ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRE1BLUFQSS50eHQgYi9Eb2N1bWVudGF0aW9uL0RNQS1BUEkudHh0CmluZGV4IDJhM2ZjYzU1Li5kOWFhNDNkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RNQS1BUEkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vRE1BLUFQSS50eHQKQEAgLTYwOSwzICs2MDksMTA5IEBACiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgZWl0aGVyIGEgcG9pbnRlciB0byB0aGUgcHJvY2Vzc29yIHZpcnR1YWwKIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSwgb3IgYW4gZXJyb3IgKHZpYSBQVFJfRVJSKCkpIGlmIGFueSBwYXJ0IG9mIHRoZQogcmVnaW9uIGlzIG9jY3VwaWVkLgorCitQYXJ0IElJSSAtIERlYnVnIGRyaXZlcnMgdXNlIG9mIHRoZSBETUEtQVBJCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBETUEtQVBJIGFzIGRlc2NyaWJlZCBhYm92ZSBhcyBzb21lIGNvbnN0cmFpbnRzLiBETUEgYWRkcmVzc2VzIG11c3QgYmUKK3JlbGVhc2VkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaXplIGZvciBleGFtcGxlLiBXaXRoCit0aGUgYWR2ZW50IG9mIGhhcmR3YXJlIElPTU1VcyBpdCBiZWNvbWVzIG1vcmUgYW5kIG1vcmUgaW1wb3J0YW50IHRoYXQgZHJpdmVycworZG8gbm90IHZpb2xhdGUgdGhvc2UgY29uc3RyYWludHMuIEluIHRoZSB3b3JzdCBjYXNlIHN1Y2ggYSB2aW9sYXRpb24gY2FuCityZXN1bHQgaW4gZGF0YSBjb3JydXB0aW9uIHVwIHRvIGRlc3Ryb3llZCBmaWxlc3lzdGVtcy4KKworVG8gZGVidWcgZHJpdmVycyBhbmQgZmluZCBidWdzIGluIHRoZSB1c2FnZSBvZiB0aGUgRE1BLUFQSSBjaGVja2luZyBjb2RlIGNhbgorYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHdoaWNoIHdpbGwgdGVsbCB0aGUgZGV2ZWxvcGVyIGFib3V0IHRob3NlCit2aW9sYXRpb25zLiBJZiB5b3VyIGFyY2hpdGVjdHVyZSBzdXBwb3J0cyBpdCB5b3UgY2FuIHNlbGVjdCB0aGUgIkVuYWJsZQorZGVidWdnaW5nIG9mIERNQS1BUEkgdXNhZ2UiIG9wdGlvbiBpbiB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uLiBFbmFibGluZyB0aGlzCitvcHRpb24gaGFzIGEgcGVyZm9ybWFuY2UgaW1wYWN0LiBEbyBub3QgZW5hYmxlIGl0IGluIHByb2R1Y3Rpb24ga2VybmVscy4KKworSWYgeW91IGJvb3QgdGhlIHJlc3VsdGluZyBrZXJuZWwgd2lsbCBjb250YWluIGNvZGUgd2hpY2ggZG9lcyBzb21lIGJvb2trZWVwaW5nCithYm91dCB3aGF0IERNQSBtZW1vcnkgd2FzIGFsbG9jYXRlZCBmb3Igd2hpY2ggZGV2aWNlLiBJZiB0aGlzIGNvZGUgZGV0ZWN0cyBhbgorZXJyb3IgaXQgcHJpbnRzIGEgd2FybmluZyBtZXNzYWdlIHdpdGggc29tZSBkZXRhaWxzIGludG8geW91ciBrZXJuZWwgbG9nLiBBbgorZXhhbXBsZSB3YXJuaW5nIG1lc3NhZ2UgbWF5IGxvb2sgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS1bIGN1dCBoZXJlIF0tLS0tLS0tLS0tLS0KK1dBUk5JTkc6IGF0IC9kYXRhMi9yZXBvcy9saW51eC0yLjYtaW9tbXUvbGliL2RtYS1kZWJ1Zy5jOjQ0OAorCWNoZWNrX3VubWFwKzB4MjAzLzB4NDkwKCkKK0hhcmR3YXJlIG5hbWU6Citmb3JjZWRldGggMDAwMDowMDowOC4wOiBETUEtQVBJOiBkZXZpY2UgZHJpdmVyIGZyZWVzIERNQSBtZW1vcnkgd2l0aCB3cm9uZworCWZ1bmN0aW9uIFtkZXZpY2UgYWRkcmVzcz0weDAwMDAwMDAwNjQwNDQ0YmVdIFtzaXplPTY2IGJ5dGVzXSBbbWFwcGVkIGFzCitzaW5nbGVdIFt1bm1hcHBlZCBhcyBwYWdlXQorTW9kdWxlcyBsaW5rZWQgaW46IG5mc2QgZXhwb3J0ZnMgYnJpZGdlIHN0cCBsbGMgcjgxNjkKK1BpZDogMCwgY29tbTogc3dhcHBlciBUYWludGVkOiBHICAgICAgICBXICAyLjYuMjgtZG1hdGVzdC0wOTI4OS1nOGJiOTljMCAjMQorQ2FsbCBUcmFjZToKKyA8SVJRPiAgWzxmZmZmZmZmZjgwMjQwYjIyPl0gd2Fybl9zbG93cGF0aCsweGYyLzB4MTMwCisgWzxmZmZmZmZmZjgwNjQ3YjcwPl0gX3NwaW5fdW5sb2NrKzB4MTAvMHgzMAorIFs8ZmZmZmZmZmY4MDUzN2U3NT5dIHVzYl9oY2RfbGlua191cmJfdG9fZXArMHg3NS8weGMwCisgWzxmZmZmZmZmZjgwNjQ3YzIyPl0gX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUrMHgxMi8weDQwCisgWzxmZmZmZmZmZjgwNTUzNDdmPl0gb2hjaV91cmJfZW5xdWV1ZSsweDE5Zi8weDdjMAorIFs8ZmZmZmZmZmY4MDI1MmY5Nj5dIHF1ZXVlX3dvcmsrMHg1Ni8weDYwCisgWzxmZmZmZmZmZjgwMjM3ZTEwPl0gZW5xdWV1ZV90YXNrX2ZhaXIrMHgyMC8weDUwCisgWzxmZmZmZmZmZjgwNTM5Mjc5Pl0gdXNiX2hjZF9zdWJtaXRfdXJiKzB4Mzc5LzB4YmMwCisgWzxmZmZmZmZmZjgwM2I3OGMzPl0gY3B1bWFza19uZXh0X2FuZCsweDIzLzB4NDAKKyBbPGZmZmZmZmZmODAyMzUxNzc+XSBmaW5kX2J1c2llc3RfZ3JvdXArMHgyMDcvMHg4YTAKKyBbPGZmZmZmZmZmODA2NDc4NGY+XSBfc3Bpbl9sb2NrX2lycXNhdmUrMHgxZi8weDUwCisgWzxmZmZmZmZmZjgwM2M3ZWEzPl0gY2hlY2tfdW5tYXArMHgyMDMvMHg0OTAKKyBbPGZmZmZmZmZmODAzYzgyNTk+XSBkZWJ1Z19kbWFfdW5tYXBfcGFnZSsweDQ5LzB4NTAKKyBbPGZmZmZmZmZmODA0ODVmMjY+XSBudl90eF9kb25lX29wdGltaXplZCsweGM2LzB4MmMwCisgWzxmZmZmZmZmZjgwNDg2YzEzPl0gbnZfbmljX2lycV9vcHRpbWl6ZWQrMHg3My8weDJiMAorIFs8ZmZmZmZmZmY4MDI2ZGY4ND5dIGhhbmRsZV9JUlFfZXZlbnQrMHgzNC8weDcwCisgWzxmZmZmZmZmZjgwMjZmZmU5Pl0gaGFuZGxlX2VkZ2VfaXJxKzB4YzkvMHgxNTAKKyBbPGZmZmZmZmZmODAyMGUzYWI+XSBkb19JUlErMHhjYi8weDFjMAorIFs8ZmZmZmZmZmY4MDIwYzA5Mz5dIHJldF9mcm9tX2ludHIrMHgwLzB4YQorIDxFT0k+IDw0Pi0tLVsgZW5kIHRyYWNlIGY2NDM1YTk4ZTJhMzhjMGUgXS0tLQorCitUaGUgZHJpdmVyIGRldmVsb3BlciBjYW4gZmluZCB0aGUgZHJpdmVyIGFuZCB0aGUgZGV2aWNlIGluY2x1ZGluZyBhIHN0YWNrdHJhY2UKK29mIHRoZSBETUEtQVBJIGNhbGwgd2hpY2ggY2F1c2VkIHRoaXMgd2FybmluZy4KKworUGVyIGRlZmF1bHQgb25seSB0aGUgZmlyc3QgZXJyb3Igd2lsbCByZXN1bHQgaW4gYSB3YXJuaW5nIG1lc3NhZ2UuIEFsbCBvdGhlcgorZXJyb3JzIHdpbGwgb25seSBzaWxlbnRseSBjb3VudGVkLiBUaGlzIGxpbWl0YXRpb24gZXhpc3QgdG8gcHJldmVudCB0aGUgY29kZQorZnJvbSBmbG9vZGluZyB5b3VyIGtlcm5lbCBsb2cuIFRvIHN1cHBvcnQgZGVidWdnaW5nIGEgZGV2aWNlIGRyaXZlciB0aGlzIGNhbgorYmUgZGlzYWJsZWQgdmlhIGRlYnVnZnMuIFNlZSB0aGUgZGVidWdmcyBpbnRlcmZhY2UgZG9jdW1lbnRhdGlvbiBiZWxvdyBmb3IKK2RldGFpbHMuCisKK1RoZSBkZWJ1Z2ZzIGRpcmVjdG9yeSBmb3IgdGhlIERNQS1BUEkgZGVidWdnaW5nIGNvZGUgaXMgY2FsbGVkIGRtYS1hcGkvLiBJbgordGhpcyBkaXJlY3RvcnkgdGhlIGZvbGxvd2luZyBmaWxlcyBjYW4gY3VycmVudGx5IGJlIGZvdW5kOgorCisJZG1hLWFwaS9hbGxfZXJyb3JzCVRoaXMgZmlsZSBjb250YWlucyBhIG51bWVyaWMgdmFsdWUuIElmIHRoaXMKKwkJCQl2YWx1ZSBpcyBub3QgZXF1YWwgdG8gemVybyB0aGUgZGVidWdnaW5nIGNvZGUKKwkJCQl3aWxsIHByaW50IGEgd2FybmluZyBmb3IgZXZlcnkgZXJyb3IgaXQgZmluZHMKKwkJCQlpbnRvIHRoZSBrZXJuZWwgbG9nLiBCZSBjYXJlZnVsbCB3aXRoIHRoaXMKKwkJCQlvcHRpb24uIEl0IGNhbiBlYXNpbHkgZmxvb2QgeW91ciBsb2dzLgorCisJZG1hLWFwaS9kaXNhYmxlZAlUaGlzIHJlYWQtb25seSBmaWxlIGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXIgJ1knCisJCQkJaWYgdGhlIGRlYnVnZ2luZyBjb2RlIGlzIGRpc2FibGVkLiBUaGlzIGNhbgorCQkJCWhhcHBlbiB3aGVuIGl0IHJ1bnMgb3V0IG9mIG1lbW9yeSBvciBpZiBpdCB3YXMKKwkJCQlkaXNhYmxlZCBhdCBib290IHRpbWUKKworCWRtYS1hcGkvZXJyb3JfY291bnQJVGhpcyBmaWxlIGlzIHJlYWQtb25seSBhbmQgc2hvd3MgdGhlIHRvdGFsCisJCQkJbnVtYmVycyBvZiBlcnJvcnMgZm91bmQuCisKKwlkbWEtYXBpL251bV9lcnJvcnMJVGhlIG51bWJlciBpbiB0aGlzIGZpbGUgc2hvd3MgaG93IG1hbnkKKwkJCQl3YXJuaW5ncyB3aWxsIGJlIHByaW50ZWQgdG8gdGhlIGtlcm5lbCBsb2cKKwkJCQliZWZvcmUgaXQgc3RvcHMuIFRoaXMgbnVtYmVyIGlzIGluaXRpYWxpemVkIHRvCisJCQkJb25lIGF0IHN5c3RlbSBib290IGFuZCBiZSBzZXQgYnkgd3JpdGluZyBpbnRvCisJCQkJdGhpcyBmaWxlCisKKwlkbWEtYXBpL21pbl9mcmVlX2VudHJpZXMKKwkJCQlUaGlzIHJlYWQtb25seSBmaWxlIGNhbiBiZSByZWFkIHRvIGdldCB0aGUKKwkJCQltaW5pbXVtIG51bWJlciBvZiBmcmVlIGRtYV9kZWJ1Z19lbnRyaWVzIHRoZQorCQkJCWFsbG9jYXRvciBoYXMgZXZlciBzZWVuLiBJZiB0aGlzIHZhbHVlIGdvZXMKKwkJCQlkb3duIHRvIHplcm8gdGhlIGNvZGUgd2lsbCBkaXNhYmxlIGl0c2VsZgorCQkJCWJlY2F1c2UgaXQgaXMgbm90IGxvbmdlciByZWxpYWJsZS4KKworCWRtYS1hcGkvbnVtX2ZyZWVfZW50cmllcworCQkJCVRoZSBjdXJyZW50IG51bWJlciBvZiBmcmVlIGRtYV9kZWJ1Z19lbnRyaWVzCisJCQkJaW4gdGhlIGFsbG9jYXRvci4KKworSWYgeW91IGhhdmUgdGhpcyBjb2RlIGNvbXBpbGVkIGludG8geW91ciBrZXJuZWwgaXQgd2lsbCBiZSBlbmFibGVkIGJ5IGRlZmF1bHQuCitJZiB5b3Ugd2FudCB0byBib290IHdpdGhvdXQgdGhlIGJvb2trZWVwaW5nIGFueXdheSB5b3UgY2FuIHByb3ZpZGUKKydkbWFfZGVidWc9b2ZmJyBhcyBhIGJvb3QgcGFyYW1ldGVyLiBUaGlzIHdpbGwgZGlzYWJsZSBETUEtQVBJIGRlYnVnZ2luZy4KK05vdGljZSB0aGF0IHlvdSBjYW4gbm90IGVuYWJsZSBpdCBhZ2FpbiBhdCBydW50aW1lLiBZb3UgaGF2ZSB0byByZWJvb3QgdG8gZG8KK3NvLgorCitXaGVuIHRoZSBjb2RlIGRpc2FibGVzIGl0c2VsZiBhdCBydW50aW1lIHRoaXMgaXMgbW9zdCBsaWtlbHkgYmVjYXVzZSBpdCByYW4KK291dCBvZiBkbWFfZGVidWdfZW50cmllcy4gVGhlc2UgZW50cmllcyBhcmUgcHJlYWxsb2NhdGVkIGF0IGJvb3QuIFRoZSBudW1iZXIKK29mIHByZWFsbG9jYXRlZCBlbnRyaWVzIGlzIGRlZmluZWQgcGVyIGFyY2hpdGVjdHVyZS4gSWYgaXQgaXMgdG9vIGxvdyBmb3IgeW91Citib290IHdpdGggJ2RtYV9kZWJ1Z19lbnRyaWVzPTx5b3VyX2Rlc2lyZWRfbnVtYmVyPicgdG8gb3ZlcndyaXRlIHRoZQorYXJjaGl0ZWN0dXJhbCBkZWZhdWx0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Byb2Nmc19leGFtcGxlLmMgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcHJvY2ZzX2V4YW1wbGUuYwppbmRleCA4YzYzOTZlLi5hNWIxMTc5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcHJvY2ZzX2V4YW1wbGUuYworKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcHJvY2ZzX2V4YW1wbGUuYwpAQCAtMTE3LDkgKzExNyw2IEBACiAJCXJ2ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQotCQotCWV4YW1wbGVfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQogCS8qIGNyZWF0ZSBqaWZmaWVzIHVzaW5nIGNvbnZlbmllbmNlIGZ1bmN0aW9uICovCiAJamlmZmllc19maWxlID0gY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiamlmZmllcyIsIAogCQkJCQkgICAgICAwNDQ0LCBleGFtcGxlX2RpciwgCkBAIC0xMzAsOCArMTI3LDYgQEAKIAkJZ290byBub19qaWZmaWVzOwogCX0KIAotCWppZmZpZXNfZmlsZS0+b3duZXIgPSBUSElTX01PRFVMRTsKLQogCS8qIGNyZWF0ZSBmb28gYW5kIGJhciBmaWxlcyB1c2luZyBzYW1lIGNhbGxiYWNrCiAJICogZnVuY3Rpb25zIAogCSAqLwpAQCAtMTQ2LDcgKzE0MSw2IEBACiAJZm9vX2ZpbGUtPmRhdGEgPSAmZm9vX2RhdGE7CiAJZm9vX2ZpbGUtPnJlYWRfcHJvYyA9IHByb2NfcmVhZF9mb29iYXI7CiAJZm9vX2ZpbGUtPndyaXRlX3Byb2MgPSBwcm9jX3dyaXRlX2Zvb2JhcjsKLQlmb29fZmlsZS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkJCiAJYmFyX2ZpbGUgPSBjcmVhdGVfcHJvY19lbnRyeSgiYmFyIiwgMDY0NCwgZXhhbXBsZV9kaXIpOwogCWlmKGJhcl9maWxlID09IE5VTEwpIHsKQEAgLTE1OSw3ICsxNTMsNiBAQAogCWJhcl9maWxlLT5kYXRhID0gJmJhcl9kYXRhOwogCWJhcl9maWxlLT5yZWFkX3Byb2MgPSBwcm9jX3JlYWRfZm9vYmFyOwogCWJhcl9maWxlLT53cml0ZV9wcm9jID0gcHJvY193cml0ZV9mb29iYXI7Ci0JYmFyX2ZpbGUtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCQogCS8qIGNyZWF0ZSBzeW1saW5rICovCiAJc3ltbGluayA9IHByb2Nfc3ltbGluaygiamlmZmllc190b28iLCBleGFtcGxlX2RpciwgCkBAIC0xNjksOCArMTYyLDYgQEAKIAkJZ290byBub19zeW1saW5rOwogCX0KIAotCXN5bWxpbmstPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KIAkvKiBldmVyeXRoaW5nIE9LICovCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXMgaW5pdGlhbGlzZWRcbiIsCiAJICAgICAgIE1PRFVMRV9OQU1FLCBNT0RVTEVfVkVSUyk7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1NtYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vU21hY2sudHh0CmluZGV4IDk4OWMyZmMuLjYyOWM5MmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vU21hY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vU21hY2sudHh0CkBAIC0xODQsMTQgKzE4NCwxNiBAQAogb3RoZXIgdGhhbiBhIGxldHRlciBvciBkaWdpdCwgYXJlIHJlc2VydmVkIGZvciB1c2UgYnkgdGhlIFNtYWNrIGRldmVsb3BtZW50CiB0ZWFtLiBTbWFjayBsYWJlbHMgYXJlIHVuc3RydWN0dXJlZCwgY2FzZSBzZW5zaXRpdmUsIGFuZCB0aGUgb25seSBvcGVyYXRpb24KIGV2ZXIgcGVyZm9ybWVkIG9uIHRoZW0gaXMgY29tcGFyaXNvbiBmb3IgZXF1YWxpdHkuIFNtYWNrIGxhYmVscyBjYW5ub3QKLWNvbnRhaW4gdW5wcmludGFibGUgY2hhcmFjdGVycyBvciB0aGUgIi8iIChzbGFzaCkgY2hhcmFjdGVyLgorY29udGFpbiB1bnByaW50YWJsZSBjaGFyYWN0ZXJzIG9yIHRoZSAiLyIgKHNsYXNoKSBjaGFyYWN0ZXIuIFNtYWNrIGxhYmVscworY2Fubm90IGJlZ2luIHdpdGggYSAnLScsIHdoaWNoIGlzIHJlc2VydmVkIGZvciBzcGVjaWFsIG9wdGlvbnMuCiAKIFRoZXJlIGFyZSBzb21lIHByZWRlZmluZWQgbGFiZWxzOgogCi0JXyBQcm9ub3VuY2VkICJmbG9vciIsIGEgc2luZ2xlIHVuZGVyc2NvcmUgY2hhcmFjdGVyLgotCV4gUHJvbm91bmNlZCAiaGF0IiwgYSBzaW5nbGUgY2lyY3VtZmxleCBjaGFyYWN0ZXIuCi0JKiBQcm9ub3VuY2VkICJzdGFyIiwgYSBzaW5nbGUgYXN0ZXJpc2sgY2hhcmFjdGVyLgotCT8gUHJvbm91bmNlZCAiaHVoIiwgYSBzaW5nbGUgcXVlc3Rpb24gbWFyayBjaGFyYWN0ZXIuCisJXyAJUHJvbm91bmNlZCAiZmxvb3IiLCBhIHNpbmdsZSB1bmRlcnNjb3JlIGNoYXJhY3Rlci4KKwleIAlQcm9ub3VuY2VkICJoYXQiLCBhIHNpbmdsZSBjaXJjdW1mbGV4IGNoYXJhY3Rlci4KKwkqIAlQcm9ub3VuY2VkICJzdGFyIiwgYSBzaW5nbGUgYXN0ZXJpc2sgY2hhcmFjdGVyLgorCT8gCVByb25vdW5jZWQgImh1aCIsIGEgc2luZ2xlIHF1ZXN0aW9uIG1hcmsgY2hhcmFjdGVyLgorCUAgCVByb25vdW5jZWQgIkludGVybmV0IiwgYSBzaW5nbGUgYXQgc2lnbiBjaGFyYWN0ZXIuCiAKIEV2ZXJ5IHRhc2sgb24gYSBTbWFjayBzeXN0ZW0gaXMgYXNzaWduZWQgYSBsYWJlbC4gU3lzdGVtIHRhc2tzLCBzdWNoIGFzCiBpbml0KDgpIGFuZCBzeXN0ZW1zIGRhZW1vbnMsIGFyZSBydW4gd2l0aCB0aGUgZmxvb3IgKCJfIikgbGFiZWwuIFVzZXIgdGFza3MKQEAgLTQxMiw2ICs0MTQsMzYgQEAKIAlBIHByaXZpbGVnZWQgcHJvZ3JhbSBtYXkgc2V0IHRoaXMgdG8gbWF0Y2ggdGhlIGxhYmVsIG9mIGFub3RoZXIKIAl0YXNrIHdpdGggd2hpY2ggaXQgaG9wZXMgdG8gY29tbXVuaWNhdGUuCiAKK1NtYWNrIE5ldGxhYmVsIEV4Y2VwdGlvbnMKKworWW91IHdpbGwgb2Z0ZW4gZmluZCB0aGF0IHlvdXIgbGFiZWxlZCBhcHBsaWNhdGlvbiBoYXMgdG8gdGFsayB0byB0aGUgb3V0c2lkZSwKK3VubGFiZWxlZCB3b3JsZC4gVG8gZG8gdGhpcyB0aGVyZSdzIGEgc3BlY2lhbCBmaWxlIC9zbWFjay9uZXRsYWJlbCB3aGVyZSB5b3UgY2FuCithZGQgc29tZSBleGNlcHRpb25zIGluIHRoZSBmb3JtIG9mIDoKK0BJUDEJICAgTEFCRUwxIG9yCitASVAyL01BU0sgIExBQkVMMgorCitJdCBtZWFucyB0aGF0IHlvdXIgYXBwbGljYXRpb24gd2lsbCBoYXZlIHVubGFiZWxlZCBhY2Nlc3MgdG8gQElQMSBpZiBpdCBoYXMKK3dyaXRlIGFjY2VzcyBvbiBMQUJFTDEsIGFuZCBhY2Nlc3MgdG8gdGhlIHN1Ym5ldCBASVAyL01BU0sgaWYgaXQgaGFzIHdyaXRlCithY2Nlc3Mgb24gTEFCRUwyLgorCitFbnRyaWVzIGluIHRoZSAvc21hY2svbmV0bGFiZWwgZmlsZSBhcmUgbWF0Y2hlZCBieSBsb25nZXN0IG1hc2sgZmlyc3QsIGxpa2UgaW4KK2NsYXNzbGVzcyBJUHY0IHJvdXRpbmcuCisKK0Egc3BlY2lhbCBsYWJlbCAnQCcgYW5kIGFuIG9wdGlvbiAnLUNJUFNPJyBjYW4gYmUgdXNlZCB0aGVyZSA6CitAICAgICAgbWVhbnMgSW50ZXJuZXQsIGFueSBhcHBsaWNhdGlvbiB3aXRoIGFueSBsYWJlbCBoYXMgYWNjZXNzIHRvIGl0CistQ0lQU08gbWVhbnMgc3RhbmRhcmQgQ0lQU08gbmV0d29ya2luZworCitJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IENJUFNPIGlzIGFuZCBkb24ndCBwbGFuIHRvIHVzZSBpdCwgeW91IGNhbiBqdXN0IGRvIDoKK2VjaG8gMTI3LjAuMC4xIC1DSVBTTyA+IC9zbWFjay9uZXRsYWJlbAorZWNobyAwLjAuMC4wLzAgQCAgICAgID4gL3NtYWNrL25ldGxhYmVsCisKK0lmIHlvdSB1c2UgQ0lQU08gb24geW91ciAxOTIuMTY4LjAuMC8xNiBsb2NhbCBuZXR3b3JrIGFuZCBuZWVkIGFsc28gdW5sYWJlbGVkCitJbnRlcm5ldCBhY2Nlc3MsIHlvdSBjYW4gaGF2ZSA6CitlY2hvIDEyNy4wLjAuMSAgICAgIC1DSVBTTyA+IC9zbWFjay9uZXRsYWJlbAorZWNobyAxOTIuMTY4LjAuMC8xNiAtQ0lQU08gPiAvc21hY2svbmV0bGFiZWwKK2VjaG8gMC4wLjAuMC8wICAgICAgQCAgICAgID4gL3NtYWNrL25ldGxhYmVsCisKKwogV3JpdGluZyBBcHBsaWNhdGlvbnMgZm9yIFNtYWNrCiAKIFRoZXJlIGFyZSB0aHJlZSBzb3J0cyBvZiBhcHBsaWNhdGlvbnMgdGhhdCB3aWxsIHJ1biBvbiBhIFNtYWNrIHN5c3RlbS4gSG93IGFuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlIGIvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQppbmRleCBmMmU5MDhkLi4yZjIxZWNkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlCisrKyBiL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKQEAgLTI1LDcgKzI1LDcgQEAKIAkJInRkYTEwMDQ2bGlmZXZpZXciLCAiYXY3MTEwIiwgImRlYzIwMDB0IiwgImRlYzI1NDB0IiwKIAkJImRlYzMwMDBzIiwgInZwNzA0MSIsICJkaWJ1c2IiLCAibnh0MjAwMiIsICJueHQyMDA0IiwKIAkJIm9yNTEyMTEiLCAib3I1MTEzMl9xYW0iLCAib3I1MTEzMl92c2IiLCAiYmx1ZWJpcmQiLAotCQkib3BlcmExIik7CisJCSJvcGVyYTEiLCAiY3gyMzF4eCIsICJjeDE4IiwgImN4MjM4ODUiLCAicHZydXNiMiIgKTsKIAogIyBDaGVjayBhcmdzCiBzeW50YXgoKSBpZiAoc2NhbGFyKEBBUkdWKSAhPSAxKTsKQEAgLTM3LDggKzM3LDggQEAKIAkkb3V0ZmlsZSA9IGV2YWwoJGNpZCk7CiAJZGllICRAIGlmICRAOwogCXByaW50IFNUREVSUiA8PEVPRjsKLUZpcm13YXJlICRvdXRmaWxlIGV4dHJhY3RlZCBzdWNjZXNzZnVsbHkuCi1Ob3cgY29weSBpdCB0byBlaXRoZXIgL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZSBvciAvbGliL2Zpcm13YXJlCitGaXJtd2FyZShzKSAkb3V0ZmlsZSBleHRyYWN0ZWQgc3VjY2Vzc2Z1bGx5LgorTm93IGNvcHkgaXQodGhleSkgdG8gZWl0aGVyIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUgb3IgL2xpYi9maXJtd2FyZQogKGRlcGVuZGluZyBvbiBjb25maWd1cmF0aW9uIG9mIGZpcm13YXJlIGhvdHBsdWcpLgogRU9GCiAJZXhpdCgwKTsKQEAgLTM0NSw2ICszNDUsODUgQEAKICAgICAkZndmaWxlOwogfQogCitzdWIgY3gyMzF4eCB7CisgICAgbXkgJGZ3ZmlsZSA9ICJ2NGwtY3gyMzF4eC1hdmNvcmUtMDEuZnciOworICAgIG15ICR1cmwgPSAiaHR0cDovL2xpbnV4dHYub3JnL2Rvd25sb2Fkcy9maXJtd2FyZS8kZndmaWxlIjsKKyAgICBteSAkaGFzaCA9ICI3ZDNiYjk1NmRjOWRmMGVhZmRlZDJiNTZiYTU3Y2M0MiI7CisKKyAgICBjaGVja3N0YW5kYXJkKCk7CisKKyAgICB3Z2V0ZmlsZSgkZndmaWxlLCAkdXJsKTsKKyAgICB2ZXJpZnkoJGZ3ZmlsZSwgJGhhc2gpOworCisgICAgJGZ3ZmlsZTsKK30KKworc3ViIGN4MTggeworICAgIG15ICR1cmwgPSAiaHR0cDovL2xpbnV4dHYub3JnL2Rvd25sb2Fkcy9maXJtd2FyZS8iOworCisgICAgbXkgJWZpbGVzID0gKAorCSd2NGwtY3gyMzQxOC1hcHUuZncnID0+ICc1ODhmMDgxYjU2MmY1YzY1M2EzZGIxYWQ4ZjY1OTM5YScsCisJJ3Y0bC1jeDIzNDE4LWNwdS5mdycgPT4gJ2I2YzdlZDY0YmM0NGIxYTZlMDg0MGFkYWVhYzM5ZDc5JywKKwkndjRsLWN4MjM0MTgtZGlnLmZ3JyA9PiAnOTViYzY4OGQzZTc1OTlmZDU4MDAxNjFlOTk3MWNjNTUnLAorICAgICk7CisKKyAgICBjaGVja3N0YW5kYXJkKCk7CisKKyAgICBteSAkYWxsZmlsZXM7CisgICAgZm9yZWFjaCBteSAkZndmaWxlIChrZXlzICVmaWxlcykgeworCXdnZXRmaWxlKCRmd2ZpbGUsICIkdXJsLyRmd2ZpbGUiKTsKKwl2ZXJpZnkoJGZ3ZmlsZSwgJGZpbGVzeyRmd2ZpbGV9KTsKKwkkYWxsZmlsZXMgLj0gIiAkZndmaWxlIjsKKyAgICB9CisKKyAgICAkYWxsZmlsZXMgPX4gcy9eXHMvLzsKKworICAgICRhbGxmaWxlczsKK30KKworc3ViIGN4MjM4ODUgeworICAgIG15ICR1cmwgPSAiaHR0cDovL2xpbnV4dHYub3JnL2Rvd25sb2Fkcy9maXJtd2FyZS8iOworCisgICAgbXkgJWZpbGVzID0gKAorCSd2NGwtY3gyMzg4NS1hdmNvcmUtMDEuZncnID0+ICdhOWY4ZjVkOTAxYTdmYjQyZjU1MmUxZWU2Mzg0ZjNiYicsCisJJ3Y0bC1jeDIzODg1LWVuYy5mdycgICAgICAgPT4gJ2E5ZjhmNWQ5MDFhN2ZiNDJmNTUyZTFlZTYzODRmM2JiJywKKyAgICApOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworCisgICAgbXkgJGFsbGZpbGVzOworICAgIGZvcmVhY2ggbXkgJGZ3ZmlsZSAoa2V5cyAlZmlsZXMpIHsKKwl3Z2V0ZmlsZSgkZndmaWxlLCAiJHVybC8kZndmaWxlIik7CisJdmVyaWZ5KCRmd2ZpbGUsICRmaWxlc3skZndmaWxlfSk7CisJJGFsbGZpbGVzIC49ICIgJGZ3ZmlsZSI7CisgICAgfQorCisgICAgJGFsbGZpbGVzID1+IHMvXlxzLy87CisKKyAgICAkYWxsZmlsZXM7Cit9CisKK3N1YiBwdnJ1c2IyIHsKKyAgICBteSAkdXJsID0gImh0dHA6Ly9saW51eHR2Lm9yZy9kb3dubG9hZHMvZmlybXdhcmUvIjsKKworICAgIG15ICVmaWxlcyA9ICgKKwkndjRsLWN4MjU4NDAuZncnICAgICAgICAgICA9PiAnZGFkYjc5ZTk5MDRmYzhhZjk2ZTgxMTFkOWNiNTkzMjAnLAorICAgICk7CisKKyAgICBjaGVja3N0YW5kYXJkKCk7CisKKyAgICBteSAkYWxsZmlsZXM7CisgICAgZm9yZWFjaCBteSAkZndmaWxlIChrZXlzICVmaWxlcykgeworCXdnZXRmaWxlKCRmd2ZpbGUsICIkdXJsLyRmd2ZpbGUiKTsKKwl2ZXJpZnkoJGZ3ZmlsZSwgJGZpbGVzeyRmd2ZpbGV9KTsKKwkkYWxsZmlsZXMgLj0gIiAkZndmaWxlIjsKKyAgICB9CisKKyAgICAkYWxsZmlsZXMgPX4gcy9eXHMvLzsKKworICAgICRhbGxmaWxlczsKK30KKwogc3ViIG9yNTExMzJfcWFtIHsKICAgICBteSAkZndmaWxlID0gImR2Yi1mZS1vcjUxMTMyLXFhbS5mdyI7CiAgICAgbXkgJHVybCA9ICJodHRwOi8vbGludXh0di5vcmcvZG93bmxvYWRzL2Zpcm13YXJlLyRmd2ZpbGUiOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDc5MDc1ODYuLjVlMDJiODMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTY0LDEwICs2NCwxMCBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJVmlkZW80TGludXggQVBJIDEgaW9jdGxzIGFuZCB2aWRlb19kZWNvZGVyLmggZnJvbSBWaWRlbyBkZXZpY2VzLgotV2hlbjoJRGVjZW1iZXIgMjAwOAotRmlsZXM6CWluY2x1ZGUvbGludXgvdmlkZW9fZGVjb2Rlci5oIGluY2x1ZGUvbGludXgvdmlkZW9kZXYuaAotQ2hlY2s6CWluY2x1ZGUvbGludXgvdmlkZW9fZGVjb2Rlci5oIGluY2x1ZGUvbGludXgvdmlkZW9kZXYuaAorV2hhdDoJVmlkZW80TGludXggQVBJIDEgaW9jdGxzIGFuZCBmcm9tIFZpZGVvIGRldmljZXMuCitXaGVuOglKdWx5IDIwMDkKK0ZpbGVzOglpbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmgKK0NoZWNrOglpbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmgKIFdoeToJVjRMMSBBUDEgd2FzIHJlcGxhY2VkIGJ5IFY0TDIgQVBJIGR1cmluZyBtaWdyYXRpb24gZnJvbSAyLjQgdG8gMi42CiAJc2VyaWVzLiBUaGUgb2xkIEFQSSBoYXZlIGxvdHMgb2YgZHJhd2JhY2tzIGFuZCBkb24ndCBwcm92aWRlIGVub3VnaAogCW1lYW5zIHRvIHdvcmsgd2l0aCBhbGwgdmlkZW8gYW5kIGF1ZGlvIHN0YW5kYXJkcy4gVGhlIG5ld2VyIEFQSSBpcwpAQCAtMzU2LDE3ICszNTYsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJU0VMaW51eCAiY29tcGF0X25ldCIgZnVuY3Rpb25hbGl0eQotV2hlbjoJMi42LjMwIGF0IHRoZSBlYXJsaWVzdAotV2h5OglJbiAyLjYuMTggdGhlIFNlY21hcmsgY29uY2VwdCB3YXMgaW50cm9kdWNlZCB0byByZXBsYWNlIHRoZSAiY29tcGF0X25ldCIKLQluZXR3b3JrIGFjY2VzcyBjb250cm9sIGZ1bmN0aW9uYWxpdHkgb2YgU0VMaW51eC4gIFNlY21hcmsgb2ZmZXJzIGJvdGgKLQliZXR0ZXIgcGVyZm9ybWFuY2UgYW5kIGdyZWF0ZXIgZmxleGliaWxpdHkgdGhhbiB0aGUgImNvbXBhdF9uZXQiCi0JbWVjaGFuaXNtLiAgTm93IHRoYXQgdGhlIG1ham9yIExpbnV4IGRpc3RyaWJ1dGlvbnMgaGF2ZSBtb3ZlZCB0bwotCVNlY21hcmssIGl0IGlzIHRpbWUgdG8gZGVwcmVjYXRlIHRoZSBvbGRlciBtZWNoYW5pc20gYW5kIHN0YXJ0IHRoZQotCXByb2Nlc3Mgb2YgcmVtb3ZpbmcgdGhlIG9sZCBjb2RlLgotV2hvOglQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OglzeXNmcyB1aSBmb3IgY2hhbmdpbmcgcDQtY2xvY2ttb2QgcGFyYW1ldGVycwogV2hlbjoJU2VwdGVtYmVyIDIwMDkKIFdoeToJU2VlIGNvbW1pdHMgMTI5ZjhhZTliMWI1YmU5NDUxN2RhNzYwMDllYTk1NmU4OTEwNGNlOCBhbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vZHMxNjIxIGIvRG9jdW1lbnRhdGlvbi9od21vbi9kczE2MjEKaW5kZXggMWZlZTZmMS4uNWU5N2YzMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9kczE2MjEKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9kczE2MjEKQEAgLTQ5LDEyICs0OSw5IEBACiByZWFkaW5ncy4gQmUgc3VyZSB0byBoYXZlIGEgaGlnaCB2cy4gbG93IHRlbXBlcmF0dXJlIGxpbWl0IGdhcCBvZiBhbCBsZWFzdAogMS4wIGRlZ3JlZSBDZWxzaXVzIHRvIGF2b2lkIFRvdXQgImJvdW5jaW5nIiwgdGhvdWdoIQogCi1BcyBmb3IgYWxhcm1zLCB5b3UgY2FuIHJlYWQgdGhlIGFsYXJtIHN0YXR1cyBvZiB0aGUgRFMxNjIxIHZpYSB0aGUgJ2FsYXJtcycKLS9zeXMgZmlsZSBpbnRlcmZhY2UuIFRoZSByZXN1bHQgY29uc2lzdHMgbWFpbmx5IG9mIGJpdCA2IGFuZCA1IG9mIHRoZQotY29uZmlndXJhdGlvbiByZWdpc3RlciBvZiB0aGUgY2hpcDsgYml0IDYgKDB4NDAgb3IgNjQpIGlzIHRoZSBoaWdoIGFsYXJtCi1iaXQgYW5kIGJpdCA1ICgweDIwIG9yIDMyKSB0aGUgbG93IG9uZS4gVGhlc2UgYml0cyBhcmUgc2V0IHdoZW4gdGhlIGhpZ2ggb3IKLWxvdyBsaW1pdHMgYXJlIG1ldCBvciBleGNlZWRlZCBhbmQgYXJlIHJlc2V0IGJ5IHRoZSBtb2R1bGUgYXMgc29vbiBhcyB0aGUKLXJlc3BlY3RpdmUgdGVtcGVyYXR1cmUgcmFuZ2VzIGFyZSBsZWZ0LgorVGhlIGFsYXJtIGJpdHMgYXJlIHNldCB3aGVuIHRoZSBoaWdoIG9yIGxvdyBsaW1pdHMgYXJlIG1ldCBvciBleGNlZWRlZCBhbmQKK2FyZSByZXNldCBieSB0aGUgbW9kdWxlIGFzIHNvb24gYXMgdGhlIHJlc3BlY3RpdmUgdGVtcGVyYXR1cmUgcmFuZ2VzIGFyZQorbGVmdC4KIAogVGhlIGFsYXJtIHJlZ2lzdGVycyBhcmUgaW4gbm8gd2F5IHN1aXRhYmxlIHRvIGZpbmQgb3V0IGFib3V0IHRoZSBhY3R1YWwKIHN0YXR1cyBvZiBUb3V0LiBUaGV5IHdpbGwgb25seSB0ZWxsIHlvdSBhYm91dCBpdHMgaGlzdG9yeSwgd2hldGhlciBvciBub3QKQEAgLTY0LDQ1ICs2MSwzIEBACiAKIFRlbXBlcmF0dXJlIGNvbnZlcnNpb24gb2YgdGhlIERTMTYyMSB0YWtlcyB1cCB0byAxMDAwbXM7IGludGVybmFsIGFjY2VzcyB0bwogbm9uLXZvbGF0aWxlIHJlZ2lzdGVycyBtYXkgbGFzdCBmb3IgMTBtcyBvciBiZWxvdy4KLQotSGlnaCBBY2N1cmFjeSBUZW1wZXJhdHVyZSBSZWFkaW5nCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQXMgc2FpZCBiZWZvcmUsIHRoZSB0ZW1wZXJhdHVyZSBpc3N1ZWQgdmlhIHRoZSA5LWJpdCBpMmMtYnVzIGRhdGEgaXMKLXNvbWV3aGF0IGFyYml0cmFyeS4gSW50ZXJuYWxseSwgdGhlIHRlbXBlcmF0dXJlIGNvbnZlcnNpb24gaXMgb2YgYQotZGlmZmVyZW50IGtpbmQgdGhhdCBpcyBleHBsYWluZWQgKG5vdCBzby4uLikgd2VsbCBpbiB0aGUgRFMxNjIxIGRhdGEgc2hlZXQuCi1UbyBjdXQgdGhlIGxvbmcgc3Rvcnkgc2hvcnQ6IEluc2lkZSB0aGUgRFMxNjIxIHRoZXJlIGFyZSB0d28gb3NjaWxsYXRvcnMsCi1ib3RoIG9mIHRoZW0gYmlhc3NlZCBieSBhIHRlbXBlcmF0dXJlIGNvZWZmaWNpZW50LgotCi1IaWdoZXIgcmVzb2x1dGlvbiBvZiB0aGUgdGVtcGVyYXR1cmUgcmVhZGluZyBjYW4gYmUgYWNoaWV2ZWQgdXNpbmcgdGhlCi1pbnRlcm5hbCBwcm9qZWN0aW9uLCB3aGljaCBtZWFucyB0YWtpbmcgYWNjb3VudCBvZiBSRUdfQ09VTlQgYW5kIFJFR19TTE9QRQotKHRoZSBkcml2ZXIgbWFuYWdlcyB0aGVtKToKLQotVGFrZW4gZnJvbSBEYWxsYXMgU2VtaWNvbmR1Y3RvcnMgQXBwIE5vdGUgMDY4OiAnSW5jcmVhc2luZyBUZW1wZXJhdHVyZQotUmVzb2x1dGlvbiBvbiB0aGUgRFMxNjIwJyBhbmQgQXBwIE5vdGUgMTA1OiAnSGlnaCBSZXNvbHV0aW9uIFRlbXBlcmF0dXJlCi1NZWFzdXJlbWVudCB3aXRoIERhbGxhcyBEaXJlY3QtdG8tRGlnaXRhbCBUZW1wZXJhdHVyZSBTZW5zb3JzJwotCi0tIFJlYWQgdGhlIDktYml0IHRlbXBlcmF0dXJlIGFuZCBzdHJpcCB0aGUgTFNCIChUcnVuY2F0ZSB0aGUgLjUgZGVncykKLS0gVGhlIHJlc3VsdGluZyB2YWx1ZSBpcyBURU1QX1JFQUQuCi0tIFRoZW4sIHJlYWQgUkVHX0NPVU5ULgotLSBBbmQgdGhlbiwgUkVHX1NMT1BFLgotCi0gICAgICBURU1QID0gVEVNUF9SRUFEIC0gMC4yNSArICgoUkVHX1NMT1BFIC0gUkVHX0NPVU5UKSAvIFJFR19TTE9QRSkKLQotTm90ZSB0aGF0IHRoaXMgaXMgd2hhdCB0aGUgRE9ORSBiaXQgaW4gdGhlIERTMTYyMSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGlzCi1nb29kIGZvcjogSW50ZXJuYWxseSwgb25lIHRlbXBlcmF0dXJlIGNvbnZlcnNpb24gdGFrZXMgdXAgdG8gMTAwMG1zLiBCZWZvcmUKLXRoYXQgY29udmVyc2lvbiBpcyBjb21wbGV0ZSB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byByZWFkIHZhbGlkIHRoaW5ncyBvdXQKLW9mIFJFR19DT1VOVCBhbmQgUkVHX1NMT1BFLiBUaGUgRE9ORSBiaXQsIGFzIHlvdSBtYXkgaGF2ZSBndWVzc2VkIGJ5IG5vdywKLXRlbGxzIHlvdSB3aGV0aGVyIHRoZSBjb252ZXJzaW9uIGlzIGNvbXBsZXRlICgiZG9uZSIsIGluIHBsYWluIEVuZ2xpc2gpIGFuZAotdGh1cywgd2hldGhlciB0aGUgdmFsdWVzIHlvdSByZWFkIGFyZSBnb29kIG9yIG5vdC4KLQotVGhlIERTMTYyMSBoYXMgdHdvIG1vZGVzIG9mIG9wZXJhdGlvbjogIkNvbnRpbnVvdXMiIGNvbnZlcnNpb24sIHdoaWNoIGNhbgotYmUgdW5kZXJzdG9vZCBhcyB0aGUgZGVmYXVsdCBzdGFuZC1hbG9uZSBtb2RlIHdoZXJlIHRoZSBjaGlwIGdldHMgdGhlCi10ZW1wZXJhdHVyZSBhbmQgY29udHJvbHMgZXh0ZXJuYWwgZGV2aWNlcyB2aWEgaXRzIFRvdXQgcGluIG9yIHRlbGxzIG90aGVyCi1pMmMncyBhYm91dCBpdCBpZiB0aGV5IGNhcmUuIFRoZSBvdGhlciBtb2RlIGlzIGNhbGxlZCAiMVNIT1QiLCB0aGF0IG1lYW5zCi10aGF0IGl0IG9ubHkgZmlndXJlcyBvdXQgYWJvdXQgdGhlIHRlbXBlcmF0dXJlIHdoZW4gaXQgaXMgZXhwbGljaXRseSB0b2xkCi10byBkbyBzbzsgdGhpcyBjYW4gYmUgc2VlbiBhcyBwb3dlciBzYXZpbmcgbW9kZS4KLQotTm93IGlmIHlvdSB3YW50IHRvIHJlYWQgUkVHX0NPVU5UIGFuZCBSRUdfU0xPUEUsIHlvdSBoYXZlIHRvIGVpdGhlciBzdG9wCi10aGUgY29udGludW91cyBjb252ZXJzaW9ucyB1bnRpbCB0aGUgY29udGVudHMgb2YgdGhlc2UgcmVnaXN0ZXJzIGFyZSB2YWxpZCwKLW9yLCBpbiAxU0hPVCBtb2RlLCB5b3UgaGF2ZSB0byBoYXZlIG9uZSBjb252ZXJzaW9uIG1hZGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9wY2Y4NTkxIGIvRG9jdW1lbnRhdGlvbi9od21vbi9wY2Y4NTkxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9wY2Y4NTkxCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2h3bW9uL3BjZjg1OTEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlIGIvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKaW5kZXggNmRiZmQ1ZS4uMmYxMGNlNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKQEAgLTM2NSw2ICszNjUsNyBAQAogCQkJCVVuaXQ6IG1pY3JvSm91bGUKIAkJCQlSTwogCisKICoqKioqKioqKioKICogQWxhcm1zICoKICoqKioqKioqKioKQEAgLTQ1Myw2ICs0NTQsMjcgQEAKIAkJUlcKIAogCisqKioqKioqKioqKioqKioqKioqKioqKgorKiBJbnRydXNpb24gZGV0ZWN0aW9uICoKKyoqKioqKioqKioqKioqKioqKioqKioqCisKK2ludHJ1c2lvblswLSpdX2FsYXJtCisJCUNoYXNzaXMgaW50cnVzaW9uIGRldGVjdGlvbgorCQkwOiBPSworCQkxOiBpbnRydXNpb24gZGV0ZWN0ZWQKKwkJUlcKKwkJQ29udHJhcnkgdG8gcmVndWxhciBhbGFybSBmbGFncyB3aGljaCBjbGVhciB0aGVtc2VsdmVzCisJCWF1dG9tYXRpY2FsbHkgd2hlbiByZWFkLCB0aGlzIG9uZSBzdGlja3MgdW50aWwgY2xlYXJlZCBieQorCQl0aGUgdXNlci4gVGhpcyBpcyBkb25lIGJ5IHdyaXRpbmcgMCB0byB0aGUgZmlsZS4gV3JpdGluZworCQlvdGhlciB2YWx1ZXMgaXMgdW5zdXBwb3J0ZWQuCisKK2ludHJ1c2lvblswLSpdX2JlZXAKKwkJQ2hhc3NpcyBpbnRydXNpb24gYmVlcAorCQkwOiBkaXNhYmxlCisJCTE6IGVuYWJsZQorCQlSVworCisKIHN5c2ZzIGF0dHJpYnV0ZSB3cml0ZXMgaW50ZXJwcmV0YXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM2MjdlaGYgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4MzYyN2VoZgppbmRleCBkNmUxYWUzLi5iNmViNTkzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4MzYyN2VoZgorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4MzYyN2VoZgpAQCAtMiwzMCArMiw0MCBAQAogPT09PT09PT09PT09PT09PT09PT09PT0KIAogU3VwcG9ydGVkIGNoaXBzOgotICAqIFdpbmJvbmQgVzgzNjI3RUhGL0VIRy9ESEcgKElTQSBhY2Nlc3MgT05MWSkKKyAgKiBXaW5ib25kIFc4MzYyN0VIRi9FSEcgKElTQSBhY2Nlc3MgT05MWSkKICAgICBQcmVmaXg6ICd3ODM2MjdlaGYnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IElTQSBhZGRyZXNzIHJldHJpZXZlZCBmcm9tIFN1cGVyIEkvTyByZWdpc3RlcnMKICAgICBEYXRhc2hlZXQ6Ci0gICAgICAgIGh0dHA6Ly93d3cud2luYm9uZC11c2EuY29tL3Byb2R1Y3RzL3dpbmJvbmRfcHJvZHVjdHMvcGRmcy9QQ0lDL1c4MzYyN0VIRl8lMjBXODM2MjdFSEdiLnBkZgotICAgICAgICBESEcgZGF0YXNoZWV0IGNvbmZpZGVudGlhbC4KKyAgICAgICAgaHR0cDovL3d3dy5udXZvdG9uLmNvbS50dy9OUi9yZG9ubHlyZXMvQTZBMjU4RjAtRjBDOS00Rjk3LTgxQzAtQzREMjlFN0U5NDNFLzAvVzgzNjI3RUhGLnBkZgorICAqIFdpbmJvbmQgVzgzNjI3REhHCisgICAgUHJlZml4OiAndzgzNjI3ZGhnJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCisgICAgRGF0YXNoZWV0OgorICAgICAgICBodHRwOi8vd3d3Lm51dm90b24uY29tLnR3L05SL3Jkb25seXJlcy83ODg1NjIzRC1BNDg3LTRDRjktQTQ3Ri0zMEM1RjczRDZGRTYvMC9XODM2MjdESEcucGRmCisgICogV2luYm9uZCBXODM2NjdIRworICAgIFByZWZpeDogJ3c4MzY2N2hnJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCisgICAgRGF0YXNoZWV0OiBub3QgYXZhaWxhYmxlCiAKIEF1dGhvcnM6CiAgICAgICAgIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogICAgICAgICBZdWFuIE11IChXaW5ib25kKQogICAgICAgICBSdWRvbGYgTWFyZWsgPHIubWFyZWtAYXNzZW1ibGVyLmN6PgogICAgICAgICBEYXZpZCBIdWJiYXJkIDxkYXZpZC5jLmh1YmJhcmRAZ21haWwuY29tPgorICAgICAgICBHb25nIEp1biA8SkdvbmdAbnV2b3Rvbi5jb20+CiAKIERlc2NyaXB0aW9uCiAtLS0tLS0tLS0tLQogCi1UaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBXaW5ib25kIFc4MzYyN0VIRiwgVzgzNjI3RUhHLCBhbmQKLVc4MzYyN0RIRyBzdXBlciBJL08gY2hpcHMuIFdlIHdpbGwgcmVmZXIgdG8gdGhlbSBjb2xsZWN0aXZlbHkgYXMgV2luYm9uZCBjaGlwcy4KK1RoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIFdpbmJvbmQgVzgzNjI3RUhGLCBXODM2MjdFSEcsCitXODM2MjdESEcgYW5kIFc4MzY2N0hHIHN1cGVyIEkvTyBjaGlwcy4gV2Ugd2lsbCByZWZlciB0byB0aGVtIGNvbGxlY3RpdmVseQorYXMgV2luYm9uZCBjaGlwcy4KIAogVGhlIGNoaXBzIGltcGxlbWVudCB0aHJlZSB0ZW1wZXJhdHVyZSBzZW5zb3JzLCBmaXZlIGZhbiByb3RhdGlvbgogc3BlZWQgc2Vuc29ycywgdGVuIGFuYWxvZyB2b2x0YWdlIHNlbnNvcnMgKG9ubHkgbmluZSBmb3IgdGhlIDYyN0RIRyksIG9uZQotVklEICg2IHBpbnMgZm9yIHRoZSA2MjdFSEYvRUhHLCA4IHBpbnMgZm9yIHRoZSA2MjdESEcpLCBhbGFybXMgd2l0aCBiZWVwCi13YXJuaW5ncyAoY29udHJvbCB1bmltcGxlbWVudGVkKSwgYW5kIHNvbWUgYXV0b21hdGljIGZhbiByZWd1bGF0aW9uCi1zdHJhdGVnaWVzIChwbHVzIG1hbnVhbCBmYW4gY29udHJvbCBtb2RlKS4KK1ZJRCAoNiBwaW5zIGZvciB0aGUgNjI3RUhGL0VIRywgOCBwaW5zIGZvciB0aGUgNjI3REhHIGFuZCA2NjdIRyksIGFsYXJtcword2l0aCBiZWVwIHdhcm5pbmdzIChjb250cm9sIHVuaW1wbGVtZW50ZWQpLCBhbmQgc29tZSBhdXRvbWF0aWMgZmFuCityZWd1bGF0aW9uIHN0cmF0ZWdpZXMgKHBsdXMgbWFudWFsIGZhbiBjb250cm9sIG1vZGUpLgogCiBUZW1wZXJhdHVyZXMgYXJlIG1lYXN1cmVkIGluIGRlZ3JlZXMgQ2Vsc2l1cyBhbmQgbWVhc3VyZW1lbnQgcmVzb2x1dGlvbiBpcyAxCiBkZWdDIGZvciB0ZW1wMSBhbmQgMC41IGRlZ0MgZm9yIHRlbXAyIGFuZCB0ZW1wMy4gQW4gYWxhcm0gaXMgdHJpZ2dlcmVkIHdoZW4KQEAgLTU0LDcgKzY0LDggQEAKIHRlbXAxIC0+IHB3bTEKIHRlbXAyIC0+IHB3bTIKIHRlbXAzIC0+IHB3bTMKLXByb2cgIC0+IHB3bTQgKHRoZSBwcm9ncmFtbWFibGUgc2V0dGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIpCitwcm9nICAtPiBwd200IChub3Qgb24gNjY3SEc7IHRoZSBwcm9ncmFtbWFibGUgc2V0dGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5CisJICAgICAgIHRoZSBkcml2ZXIpCiAKIC9zeXMgZmlsZXMKIC0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dCBiL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dAppbmRleCBmMWQ2Mzk5Li4xZjc3OWEyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0CkBAIC0xMjIsMTAgKzEyMiw4IEBACiAnYycJMDAtN0YJbGludXgvY29kYS5oCQljb25mbGljdCEKICdjJwk4MC05RglhcmNoL3MzOTAvaW5jbHVkZS9hc20vY2hzYy5oCiAnZCcJMDAtRkYJbGludXgvY2hhci9kcm0vZHJtL2gJY29uZmxpY3QhCi0nZCcJMDAtREYJbGludXgvdmlkZW9fZGVjb2Rlci5oCWNvbmZsaWN0IQogJ2QnCUYwLUZGCWxpbnV4L2RpZ2kxLmgKICdlJwlhbGwJbGludXgvZGlnaTEuaAkJY29uZmxpY3QhCi0nZScJMDAtMUYJbGludXgvdmlkZW9fZW5jb2Rlci5oCWNvbmZsaWN0IQogJ2UnCTAwLTFGCW5ldC9pcmRhL2lydHR5LmgJY29uZmxpY3QhCiAnZicJMDAtMUYJbGludXgvZXh0Ml9mcy5oCiAnaCcJMDAtN0YJCQkJQ2hhcm9uIGZpbGVzeXN0ZW0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggZDFlMmZjYi4uYWVlZGI4OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTQ5Miw2ICs0OTIsMTYgQEAKIAkJCVJhbmdlOiAwIC0gODE5MgogCQkJRGVmYXVsdDogNjQKIAorCWRtYV9kZWJ1Zz1vZmYJSWYgdGhlIGtlcm5lbCBpcyBjb21waWxlZCB3aXRoIERNQV9BUElfREVCVUcgc3VwcG9ydAorCQkJdGhpcyBvcHRpb24gZGlzYWJsZXMgdGhlIGRlYnVnZ2luZyBjb2RlIGF0IGJvb3QuCisKKwlkbWFfZGVidWdfZW50cmllcz08bnVtYmVyPgorCQkJVGhpcyBvcHRpb24gYWxsb3dzIHRvIHR1bmUgdGhlIG51bWJlciBvZiBwcmVhbGxvY2F0ZWQKKwkJCWVudHJpZXMgZm9yIERNQS1BUEkgZGVidWdnaW5nIGNvZGUuIE9uZSBlbnRyeSBpcworCQkJcmVxdWlyZWQgcGVyIERNQS1BUEkgYWxsb2NhdGlvbi4gVXNlIHRoaXMgaWYgdGhlCisJCQlETUEtQVBJIGRlYnVnZ2luZyBjb2RlIGRpc2FibGVzIGl0c2VsZiBiZWNhdXNlIHRoZQorCQkJYXJjaGl0ZWN0dXJhbCBkZWZhdWx0IGlzIHRvbyBsb3cuCisKIAlocGV0PQkJW1g4Ni0zMixIUEVUXSBvcHRpb24gdG8gY29udHJvbCBIUEVUIHVzYWdlCiAJCQlGb3JtYXQ6IHsgZW5hYmxlIChkZWZhdWx0KSB8IGRpc2FibGUgfCBmb3JjZSB8CiAJCQkJdmVyYm9zZSB9CkBAIC0yMDMwLDE1ICsyMDQwLDYgQEAKIAkJCUlmIGVuYWJsZWQgYXQgYm9vdCB0aW1lLCAvc2VsaW51eC9kaXNhYmxlIGNhbiBiZSB1c2VkCiAJCQlsYXRlciB0byBkaXNhYmxlIHByaW9yIHRvIGluaXRpYWwgcG9saWN5IGxvYWQuCiAKLQlzZWxpbnV4X2NvbXBhdF9uZXQgPQotCQkJW1NFTElOVVhdIFNldCBpbml0aWFsIHNlbGludXhfY29tcGF0X25ldCBmbGFnIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAgICAgRm9ybWF0OiB7ICIwIiB8ICIxIiB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAwIC0tIHVzZSBuZXcgc2VjbWFyay1iYXNlZCBwYWNrZXQgY29udHJvbHMKLSAgICAgICAgICAgICAgICAgICAgICAgIDEgLS0gdXNlIGxlZ2FjeSBwYWNrZXQgY29udHJvbHMKLSAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgdmFsdWUgaXMgMCAocHJlZmVycmVkKS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlIGNhbiBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgdmlhCi0gICAgICAgICAgICAgICAgICAgICAgICAvc2VsaW51eC9jb21wYXRfbmV0LgotCiAJc2VyaWFsbnVtYmVyCVtCVUdTPVg4Ni0zMl0KIAogCXNoYXBlcnM9CVtORVRdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCmluZGV4IGYyZGJiZjMuLmQzNmZjYzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCisrKyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCkBAIC0xNjMwLDYgKzE2MzAsMTMgQEAKIAkJfQogCX0KIAorCS8qIE9LLCBzbyB3ZSBub3RlZCB0aGF0IGl0IHdhcyBwcmV0dHkgcG9vciB0byB1c2UgYW4gZmRhdGFzeW5jIGFzIGEKKwkgKiBiYXJyaWVyLiAgQnV0IENocmlzdG9waCBIZWxsd2lnIHBvaW50cyBvdXQgdGhhdCB3ZSBuZWVkIGEgc3luYworCSAqICphZnRlcndhcmRzKiBhcyB3ZWxsOiAiQmFycmllcnMgc3BlY2lmeSBubyByZW9yZGVyaW5nIHRvIHRoZSBmcm9udAorCSAqIG9yIHRoZSBiYWNrLiIgIEFuZCBKZW5zIEF4Ym9lIGNvbmZpcm1lZCBpdCwgc28gaGVyZSB3ZSBhcmU6ICovCisJaWYgKG91dC0+dHlwZSAmIFZJUlRJT19CTEtfVF9CQVJSSUVSKQorCQlmZGF0YXN5bmModmJsay0+ZmQpOworCiAJLyogV2UgY2FuJ3QgdHJpZ2dlciBhbiBJUlEsIGJlY2F1c2Ugd2UncmUgbm90IHRoZSBMYXVuY2hlci4gIEl0IGRvZXMKIAkgKiB0aGF0IHdoZW4gd2UgdGVsbCBpdCB3ZSdyZSBkb25lLiAqLwogCWFkZF91c2VkKGRldi0+dnEsIGhlYWQsIHdsZW4pOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sb2NrZGVwLWRlc2lnbi50eHQgYi9Eb2N1bWVudGF0aW9uL2xvY2tkZXAtZGVzaWduLnR4dAppbmRleCA0ODg3NzMwLi45MzhlYTIyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xvY2tkZXAtZGVzaWduLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2xvY2tkZXAtZGVzaWduLnR4dApAQCAtMjcsMzMgKzI3LDM3IEBACiBTdGF0ZQogLS0tLS0KIAotVGhlIHZhbGlkYXRvciB0cmFja3MgbG9jay1jbGFzcyB1c2FnZSBoaXN0b3J5IGludG8gNSBzZXBhcmF0ZSBzdGF0ZSBiaXRzOgorVGhlIHZhbGlkYXRvciB0cmFja3MgbG9jay1jbGFzcyB1c2FnZSBoaXN0b3J5IGludG8gNG4gKyAxIHNlcGFyYXRlIHN0YXRlIGJpdHM6CiAKLS0gJ2V2ZXIgaGVsZCBpbiBoYXJkaXJxIGNvbnRleHQnICAgICAgICAgICAgICAgICAgICBbID09IGhhcmRpcnEtc2FmZSAgIF0KLS0gJ2V2ZXIgaGVsZCBpbiBzb2Z0aXJxIGNvbnRleHQnICAgICAgICAgICAgICAgICAgICBbID09IHNvZnRpcnEtc2FmZSAgIF0KLS0gJ2V2ZXIgaGVsZCB3aXRoIGhhcmRpcnFzIGVuYWJsZWQnICAgICAgICAgICAgICAgICBbID09IGhhcmRpcnEtdW5zYWZlIF0KLS0gJ2V2ZXIgaGVsZCB3aXRoIHNvZnRpcnFzIGFuZCBoYXJkaXJxcyBlbmFibGVkJyAgICBbID09IHNvZnRpcnEtdW5zYWZlIF0KKy0gJ2V2ZXIgaGVsZCBpbiBTVEFURSBjb250ZXh0JworLSAnZXZlciBoZWFkIGFzIHJlYWRsb2NrIGluIFNUQVRFIGNvbnRleHQnCistICdldmVyIGhlYWQgd2l0aCBTVEFURSBlbmFibGVkJworLSAnZXZlciBoZWFkIGFzIHJlYWRsb2NrIHdpdGggU1RBVEUgZW5hYmxlZCcKKworV2hlcmUgU1RBVEUgY2FuIGJlIGVpdGhlciBvbmUgb2YgKGtlcm5lbC9sb2NrZGVwX3N0YXRlcy5oKQorIC0gaGFyZGlycQorIC0gc29mdGlycQorIC0gcmVjbGFpbV9mcwogCiAtICdldmVyIHVzZWQnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyA9PSAhdW51c2VkICAgICAgICBdCiAKLVdoZW4gbG9ja2luZyBydWxlcyBhcmUgdmlvbGF0ZWQsIHRoZXNlIDQgc3RhdGUgYml0cyBhcmUgcHJlc2VudGVkIGluIHRoZQotbG9ja2luZyBlcnJvciBtZXNzYWdlcywgaW5zaWRlIGN1cmxpZXMuICBBIGNvbnRyaXZlZCBleGFtcGxlOgorV2hlbiBsb2NraW5nIHJ1bGVzIGFyZSB2aW9sYXRlZCwgdGhlc2Ugc3RhdGUgYml0cyBhcmUgcHJlc2VudGVkIGluIHRoZQorbG9ja2luZyBlcnJvciBtZXNzYWdlcywgaW5zaWRlIGN1cmxpZXMuIEEgY29udHJpdmVkIGV4YW1wbGU6CiAKICAgIG1vZHByb2JlLzIyODcgaXMgdHJ5aW5nIHRvIGFjcXVpcmUgbG9jazoKLSAgICAoJnNpb19sb2Nrc1tpXS5sb2NrKXstLS4ufSwgYXQ6IFs8YzAyODY3ZmQ+XSBtdXRleF9sb2NrKzB4MjEvMHgyNAorICAgICgmc2lvX2xvY2tzW2ldLmxvY2spey0uLS4uLn0sIGF0OiBbPGMwMjg2N2ZkPl0gbXV0ZXhfbG9jaysweDIxLzB4MjQKIAogICAgYnV0IHRhc2sgaXMgYWxyZWFkeSBob2xkaW5nIGxvY2s6Ci0gICAgKCZzaW9fbG9ja3NbaV0ubG9jayl7LS0uLn0sIGF0OiBbPGMwMjg2N2ZkPl0gbXV0ZXhfbG9jaysweDIxLzB4MjQKKyAgICAoJnNpb19sb2Nrc1tpXS5sb2NrKXstLi0uLi59LCBhdDogWzxjMDI4NjdmZD5dIG11dGV4X2xvY2srMHgyMS8weDI0CiAKIAotVGhlIGJpdCBwb3NpdGlvbiBpbmRpY2F0ZXMgaGFyZGlycSwgc29mdGlycSwgaGFyZGlycS1yZWFkLAotc29mdGlycS1yZWFkIHJlc3BlY3RpdmVseSwgYW5kIHRoZSBjaGFyYWN0ZXIgZGlzcGxheWVkIGluIGVhY2gKLWluZGljYXRlczoKK1RoZSBiaXQgcG9zaXRpb24gaW5kaWNhdGVzIFNUQVRFLCBTVEFURS1yZWFkLCBmb3IgZWFjaCBvZiB0aGUgc3RhdGVzIGxpc3RlZAorYWJvdmUsIGFuZCB0aGUgY2hhcmFjdGVyIGRpc3BsYXllZCBpbiBlYWNoIGluZGljYXRlczoKIAogICAgJy4nICBhY3F1aXJlZCB3aGlsZSBpcnFzIGRpc2FibGVkCiAgICAnKycgIGFjcXVpcmVkIGluIGlycSBjb250ZXh0CiAgICAnLScgIGFjcXVpcmVkIHdpdGggaXJxcyBlbmFibGVkCi0gICAnPycgcmVhZCBhY3F1aXJlZCBpbiBpcnEgY29udGV4dCB3aXRoIGlycXMgZW5hYmxlZC4KKyAgICc/JyAgYWNxdWlyZWQgaW4gaXJxIGNvbnRleHQgd2l0aCBpcnFzIGVuYWJsZWQuCiAKIFVudXNlZCBtdXRleGVzIGNhbm5vdCBiZSBwYXJ0IG9mIHRoZSBjYXVzZSBvZiBhbiBlcnJvci4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZG1hLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2RtYS50eHQKaW5kZXggY2M0NTMxMS4uMDczMmNkZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZG1hLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9kbWEudHh0CkBAIC0zNSwzMCArMzUsMzAgQEAKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYSIsICJmc2wsZWxvLWRtYSI7Ci0JCXJlZyA9IDw4MmE4IDQ+OwotCQlyYW5nZXMgPSA8MCA4MTAwIDFhND47CisJCXJlZyA9IDwweDgyYTggND47CisJCXJhbmdlcyA9IDwwIDB4ODEwMCAweDFhND47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQlpbnRlcnJ1cHRzID0gPDQ3IDg+OworCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQljZWxsLWluZGV4ID0gPDA+OwogCQlkbWEtY2hhbm5lbEAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQljZWxsLWluZGV4ID0gPDA+OwotCQkJcmVnID0gPDAgODA+OworCQkJcmVnID0gPDAgMHg4MD47CiAJCX07CiAJCWRtYS1jaGFubmVsQDgwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQljZWxsLWluZGV4ID0gPDE+OwotCQkJcmVnID0gPDgwIDgwPjsKKwkJCXJlZyA9IDwweDgwIDB4ODA+OwogCQl9OwogCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCWNlbGwtaW5kZXggPSA8Mj47Ci0JCQlyZWcgPSA8MTAwIDgwPjsKKwkJCXJlZyA9IDwweDEwMCAweDgwPjsKIAkJfTsKIAkJZG1hLWNoYW5uZWxAMTgwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQljZWxsLWluZGV4ID0gPDM+OwotCQkJcmVnID0gPDE4MCA4MD47CisJCQlyZWcgPSA8MHgxODAgMHg4MD47CiAJCX07CiAJfTsKIApAQCAtOTMsMzYgKzkzLDM2IEBACiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1kbWEiLCAiZnNsLGVsb3BsdXMtZG1hIjsKLQkJcmVnID0gPDIxMzAwIDQ+OwotCQlyYW5nZXMgPSA8MCAyMTEwMCAyMDA+OworCQlyZWcgPSA8MHgyMTMwMCA0PjsKKwkJcmFuZ2VzID0gPDAgMHgyMTEwMCAweDIwMD47CiAJCWNlbGwtaW5kZXggPSA8MD47CiAJCWRtYS1jaGFubmVsQDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQlyZWcgPSA8MCA4MD47CisJCQlyZWcgPSA8MCAweDgwPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWludGVycnVwdHMgPSA8MTQgMj47CisJCQlpbnRlcnJ1cHRzID0gPDIwIDI+OwogCQl9OwogCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQwLWRtYS1jaGFubmVsIiwgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCXJlZyA9IDw4MCA4MD47CisJCQlyZWcgPSA8MHg4MCAweDgwPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWludGVycnVwdHMgPSA8MTUgMj47CisJCQlpbnRlcnJ1cHRzID0gPDIxIDI+OwogCQl9OwogCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQlyZWcgPSA8MTAwIDgwPjsKKwkJCXJlZyA9IDwweDEwMCAweDgwPjsKIAkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWludGVycnVwdHMgPSA8MTYgMj47CisJCQlpbnRlcnJ1cHRzID0gPDIyIDI+OwogCQl9OwogCQlkbWEtY2hhbm5lbEAxODAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQlyZWcgPSA8MTgwIDgwPjsKKwkJCXJlZyA9IDwweDE4MCAweDgwPjsKIAkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWludGVycnVwdHMgPSA8MTcgMj47CisJCQlpbnRlcnJ1cHRzID0gPDIzIDI+OwogCQl9OwogCX07CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2VzZGhjLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2VzZGhjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDA4NDY1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZXNkaGMudHh0CkBAIC0wLDAgKzEsMjQgQEAKKyogRnJlZXNjYWxlIEVuaGFuY2VkIFNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlciAoZVNESEMpCisKK1RoZSBFbmhhbmNlZCBTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgcHJvdmlkZXMgYW4gaW50ZXJmYWNlCitmb3IgTU1DLCBTRCwgYW5kIFNESU8gdHlwZXMgb2YgbWVtb3J5IGNhcmRzLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorICAtIGNvbXBhdGlibGUgOiBzaG91bGQgYmUKKyAgICAiZnNsLDxjaGlwPi1lc2RoYyIsICJmc2wsbXBjODM3OS1lc2RoYyIgZm9yIE1QQzgzeHggcHJvY2Vzc29ycy4KKyAgICAiZnNsLDxjaGlwPi1lc2RoYyIsICJmc2wsbXBjODUzNi1lc2RoYyIgZm9yIE1QQzg1eHggcHJvY2Vzc29ycy4KKyAgLSByZWcgOiBzaG91bGQgY29udGFpbiBlU0RIQyByZWdpc3RlcnMgbG9jYXRpb24gYW5kIGxlbmd0aC4KKyAgLSBpbnRlcnJ1cHRzIDogc2hvdWxkIGNvbnRhaW4gZVNESEMgaW50ZXJydXB0LgorICAtIGludGVycnVwdC1wYXJlbnQgOiBpbnRlcnJ1cHQgc291cmNlIHBoYW5kbGUuCisgIC0gY2xvY2stZnJlcXVlbmN5IDogc3BlY2lmaWVzIGVTREhDIGJhc2UgY2xvY2sgZnJlcXVlbmN5LgorCitFeGFtcGxlOgorCitzZGhjaUAyZTAwMCB7CisJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1lc2RoYyIsICJmc2wsbXBjODM3OS1lc2RoYyI7CisJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKKwlpbnRlcnJ1cHRzID0gPDQyIDB4OD47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zc2kudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3NpLnR4dAppbmRleCBhMmQ5NjM5Li41ZmY3NmM5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zc2kudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NzaS50eHQKQEAgLTQsNDQgKzQsNTYgQEAKIGJlIHByb2dyYW1tZWQgaW4gQUM5NywgSTJTLCBsZWZ0LWp1c3RpZmllZCwgb3IgcmlnaHQtanVzdGlmaWVkIG1vZGVzLgogCiBSZXF1aXJlZCBwcm9wZXJ0aWVzOgotLSBjb21wYXRpYmxlCSAgOiBjb21wYXRpYmxlIGxpc3QsIGNvbnRhaW5pbmcgImZzbCxzc2kiCi0tIGNlbGwtaW5kZXgJICA6IHRoZSBTU0ksIDwwPiA9IFNTSTEsIDwxPiA9IFNTSTIsIGFuZCBzbyBvbgotLSByZWcJCSAgOiBvZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgZGV2aWNlCi0tIGludGVycnVwdHMJICA6IDxhIGI+IHdoZXJlIGEgaXMgdGhlIGludGVycnVwdCBudW1iZXIgYW5kIGIgaXMgYQotICAgICAgICAgICAgICAgICAgICAgZmllbGQgdGhhdCByZXByZXNlbnRzIGFuIGVuY29kaW5nIG9mIHRoZSBzZW5zZSBhbmQKLQkJICAgIGxldmVsIGluZm9ybWF0aW9uIGZvciB0aGUgaW50ZXJydXB0LiAgVGhpcyBzaG91bGQgYmUKLQkJICAgIGVuY29kZWQgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIGluIHNlY3Rpb24gMikKLQkJICAgIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBpbnRlcnJ1cHQgY29udHJvbGxlciB5b3UKLQkJICAgIGhhdmUuCi0tIGludGVycnVwdC1wYXJlbnQgOiB0aGUgcGhhbmRsZSBmb3IgdGhlIGludGVycnVwdCBjb250cm9sbGVyIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzIGludGVycnVwdHMgZm9yIHRoaXMgZGV2aWNlLgotLSBmc2wsbW9kZQkgIDogdGhlIG9wZXJhdGluZyBtb2RlIGZvciB0aGUgU1NJIGludGVyZmFjZQotCQkgICAgImkycy1zbGF2ZSIgLSBJMlMgbW9kZSwgU1NJIGlzIGNsb2NrIHNsYXZlCi0JCSAgICAiaTJzLW1hc3RlciIgLSBJMlMgbW9kZSwgU1NJIGlzIGNsb2NrIG1hc3RlcgotCQkgICAgImxqLXNsYXZlIiAtIGxlZnQtanVzdGlmaWVkIG1vZGUsIFNTSSBpcyBjbG9jayBzbGF2ZQotCQkgICAgImxqLW1hc3RlciIgLSBsLmouIG1vZGUsIFNTSSBpcyBjbG9jayBtYXN0ZXIKLQkJICAgICJyai1zbGF2ZSIgLSByaWdodC1qdXN0aWZpZWQgbW9kZSwgU1NJIGlzIGNsb2NrIHNsYXZlCi0JCSAgICAicmotbWFzdGVyIiAtIHIuai4sIFNTSSBpcyBjbG9jayBtYXN0ZXIKLQkJICAgICJhYzk3LXNsYXZlIiAtIEFDOTcgbW9kZSwgU1NJIGlzIGNsb2NrIHNsYXZlCi0JCSAgICAiYWM5Ny1tYXN0ZXIiIC0gQUM5NyBtb2RlLCBTU0kgaXMgY2xvY2sgbWFzdGVyCi0tIGZzbCxwbGF5YmFjay1kbWE6IHBoYW5kbGUgdG8gYSBub2RlIGZvciB0aGUgRE1BIGNoYW5uZWwgdG8gdXNlIGZvcgorLSBjb21wYXRpYmxlOiAgICAgICBDb21wYXRpYmxlIGxpc3QsIGNvbnRhaW5zICJmc2wsc3NpIi4KKy0gY2VsbC1pbmRleDogICAgICAgVGhlIFNTSSwgPDA+ID0gU1NJMSwgPDE+ID0gU1NJMiwgYW5kIHNvIG9uLgorLSByZWc6ICAgICAgICAgICAgICBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgZGV2aWNlLgorLSBpbnRlcnJ1cHRzOiAgICAgICA8YSBiPiB3aGVyZSBhIGlzIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIGFuZCBiIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgZmllbGQgdGhhdCByZXByZXNlbnRzIGFuIGVuY29kaW5nIG9mIHRoZSBzZW5zZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgbGV2ZWwgaW5mb3JtYXRpb24gZm9yIHRoZSBpbnRlcnJ1cHQuICBUaGlzIHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgICBlbmNvZGVkIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBpbiBzZWN0aW9uIDIpCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBpbnRlcnJ1cHQgY29udHJvbGxlciB5b3UKKyAgICAgICAgICAgICAgICAgICAgaGF2ZS4KKy0gaW50ZXJydXB0LXBhcmVudDogVGhlIHBoYW5kbGUgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciB0aGF0CisgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzIGludGVycnVwdHMgZm9yIHRoaXMgZGV2aWNlLgorLSBmc2wsbW9kZTogICAgICAgICBUaGUgb3BlcmF0aW5nIG1vZGUgZm9yIHRoZSBTU0kgaW50ZXJmYWNlLgorICAgICAgICAgICAgICAgICAgICAiaTJzLXNsYXZlIiAtIEkyUyBtb2RlLCBTU0kgaXMgY2xvY2sgc2xhdmUKKyAgICAgICAgICAgICAgICAgICAgImkycy1tYXN0ZXIiIC0gSTJTIG1vZGUsIFNTSSBpcyBjbG9jayBtYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgImxqLXNsYXZlIiAtIGxlZnQtanVzdGlmaWVkIG1vZGUsIFNTSSBpcyBjbG9jayBzbGF2ZQorICAgICAgICAgICAgICAgICAgICAibGotbWFzdGVyIiAtIGwuai4gbW9kZSwgU1NJIGlzIGNsb2NrIG1hc3RlcgorICAgICAgICAgICAgICAgICAgICAicmotc2xhdmUiIC0gcmlnaHQtanVzdGlmaWVkIG1vZGUsIFNTSSBpcyBjbG9jayBzbGF2ZQorICAgICAgICAgICAgICAgICAgICAicmotbWFzdGVyIiAtIHIuai4sIFNTSSBpcyBjbG9jayBtYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgImFjOTctc2xhdmUiIC0gQUM5NyBtb2RlLCBTU0kgaXMgY2xvY2sgc2xhdmUKKyAgICAgICAgICAgICAgICAgICAgImFjOTctbWFzdGVyIiAtIEFDOTcgbW9kZSwgU1NJIGlzIGNsb2NrIG1hc3RlcgorLSBmc2wscGxheWJhY2stZG1hOiBQaGFuZGxlIHRvIGEgbm9kZSBmb3IgdGhlIERNQSBjaGFubmVsIHRvIHVzZSBmb3IKICAgICAgICAgICAgICAgICAgICAgcGxheWJhY2sgb2YgYXVkaW8uICBUaGlzIGlzIHR5cGljYWxseSBkaWN0YXRlZCBieSBTT0MKICAgICAgICAgICAgICAgICAgICAgZGVzaWduLiAgU2VlIHRoZSBub3RlcyBiZWxvdy4KLS0gZnNsLGNhcHR1cmUtZG1hOiAgcGhhbmRsZSB0byBhIG5vZGUgZm9yIHRoZSBETUEgY2hhbm5lbCB0byB1c2UgZm9yCistIGZzbCxjYXB0dXJlLWRtYTogIFBoYW5kbGUgdG8gYSBub2RlIGZvciB0aGUgRE1BIGNoYW5uZWwgdG8gdXNlIGZvcgogICAgICAgICAgICAgICAgICAgICBjYXB0dXJlIChyZWNvcmRpbmcpIG9mIGF1ZGlvLiAgVGhpcyBpcyB0eXBpY2FsbHkgZGljdGF0ZWQKICAgICAgICAgICAgICAgICAgICAgYnkgU09DIGRlc2lnbi4gIFNlZSB0aGUgbm90ZXMgYmVsb3cuCistIGZzbCxmaWZvLWRlcHRoOiAgIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIEZJRk9zLgorICAgICAgICAgICAgICAgICAgICBUaGlzIG51bWJlciBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlIGZvciBTRkNTUltURldNMF0uCistIGZzbCxzc2ktYXN5bmNocm9ub3VzOgorICAgICAgICAgICAgICAgICAgICBJZiBzcGVjaWZpZWQsIHRoZSBTU0kgaXMgdG8gYmUgcHJvZ3JhbW1lZCBpbiBhc3luY2hyb25vdXMKKyAgICAgICAgICAgICAgICAgICAgbW9kZS4gIEluIHRoaXMgbW9kZSwgcGlucyBTUkNLLCBTVENLLCBTUkZTLCBhbmQgU1RGUyBtdXN0CisgICAgICAgICAgICAgICAgICAgIGFsbCBiZSBjb25uZWN0ZWQgdG8gdmFsaWQgc2lnbmFscy4gIEluIHN5bmNocm9ub3VzIG1vZGUsCisgICAgICAgICAgICAgICAgICAgIFNSQ0sgYW5kIFNSRlMgYXJlIGlnbm9yZWQuICBBc3luY2hyb25vdXMgbW9kZSBhbGxvd3MKKyAgICAgICAgICAgICAgICAgICAgcGxheWJhY2sgYW5kIGNhcHR1cmUgdG8gdXNlIGRpZmZlcmVudCBzYW1wbGUgc2l6ZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIHNhbXBsZSByYXRlcy4gIFNvbWUgZHJpdmVycyBtYXkgcmVxdWlyZSB0aGF0IFNSQ0sgYW5kIFNUQ0sKKyAgICAgICAgICAgICAgICAgICAgYmUgY29ubmVjdGVkIHRvZ2V0aGVyLCBhbmQgU1JGUyBhbmQgU1RGUyBiZSBjb25uZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgdG9nZXRoZXIuICBUaGlzIHdvdWxkIHN0aWxsIGFsbG93IGRpZmZlcmVudCBzYW1wbGUgc2l6ZXMsCisgICAgICAgICAgICAgICAgICAgIGJ1dCBub3QgZGlmZmVyZW50IHNhbXBsZSByYXRlcy4KIAogT3B0aW9uYWwgcHJvcGVydGllczoKLS0gY29kZWMtaGFuZGxlCSAgOiBwaGFuZGxlIHRvIGEgJ2NvZGVjJyBub2RlIHRoYXQgZGVmaW5lcyBhbiBhdWRpbwotCQkgICAgY29kZWMgY29ubmVjdGVkIHRvIHRoaXMgU1NJLiAgVGhpcyBub2RlIGlzIHR5cGljYWxseQotCQkgICAgYSBjaGlsZCBvZiBhbiBJMkMgb3Igb3RoZXIgY29udHJvbCBub2RlLgorLSBjb2RlYy1oYW5kbGU6ICAgICBQaGFuZGxlIHRvIGEgJ2NvZGVjJyBub2RlIHRoYXQgZGVmaW5lcyBhbiBhdWRpbworICAgICAgICAgICAgICAgICAgICBjb2RlYyBjb25uZWN0ZWQgdG8gdGhpcyBTU0kuICBUaGlzIG5vZGUgaXMgdHlwaWNhbGx5CisgICAgICAgICAgICAgICAgICAgIGEgY2hpbGQgb2YgYW4gSTJDIG9yIG90aGVyIGNvbnRyb2wgbm9kZS4KIAogQ2hpbGQgJ2NvZGVjJyBub2RlIHJlcXVpcmVkIHByb3BlcnRpZXM6Ci0tIGNvbXBhdGlibGUJICA6IGNvbXBhdGlibGUgbGlzdCwgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGNvZGVjCistIGNvbXBhdGlibGU6ICAgICAgIENvbXBhdGlibGUgbGlzdCwgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGNvZGVjCiAKIENoaWxkICdjb2RlYycgbm9kZSBvcHRpb25hbCBwcm9wZXJ0aWVzOgotLSBjbG9jay1mcmVxdWVuY3kgIDogVGhlIGZyZXF1ZW5jeSBvZiB0aGUgaW5wdXQgY2xvY2ssIHdoaWNoIHR5cGljYWxseQotICAgICAgICAgICAgICAgICAgICAgY29tZXMgZnJvbSBhbiBvbi1ib2FyZCBkZWRpY2F0ZWQgb3NjaWxsYXRvci4KKy0gY2xvY2stZnJlcXVlbmN5OiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgaW5wdXQgY2xvY2ssIHdoaWNoIHR5cGljYWxseSBjb21lcworICAgICAgICAgICAgICAgICAgICBmcm9tIGFuIG9uLWJvYXJkIGRlZGljYXRlZCBvc2NpbGxhdG9yLgogCiBOb3RlcyBvbiBmc2wscGxheWJhY2stZG1hIGFuZCBmc2wsY2FwdHVyZS1kbWE6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0diBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0dgppbmRleCAwZDkzZmExLi5mMTFjNTgzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmJ0dHYKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5idHR2CkBAIC0xMzUsNyArMTM1LDcgQEAKIDEzNCAtPiBBZGxpbmsgUlRWMjQKIDEzNSAtPiBEVmlDTyBGdXNpb25IRFRWIDUgTGl0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE4YWM6ZDUwMF0KIDEzNiAtPiBBY29ycCBZODc4RiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzk1MTE6MTU0MF0KLTEzNyAtPiBDb25jZXB0cm9uaWMgQ1RWRk1pIHYyCisxMzcgLT4gQ29uY2VwdHJvbmljIENUVkZNaSB2MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMzZlOjEwOWVdCiAxMzggLT4gUHJvbGluayBQaXhlbHZpZXcgUFYtQlQ4NzhQKyAoUmV2LjJFKQogMTM5IC0+IFByb2xpbmsgUGl4ZWxWaWV3IFBsYXlUViBNUEVHMiBQVi1NNDkwMAogMTQwIC0+IE9zcHJleSA0NDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDA3MDpmZjA3XQpAQCAtMTU0LDMgKzE1NCw3IEBACiAxNTMgLT4gUEhZVEVDIFZELTAxMiAoYnQ4NzgpCiAxNTQgLT4gUEhZVEVDIFZELTAxMi1YMSAoYnQ4NzgpCiAxNTUgLT4gUEhZVEVDIFZELTAxMi1YMiAoYnQ4NzgpCisxNTYgLT4gSVZDRS04Nzg0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswMDAwOmYwNTAsMDAwMTpmMDUwLDAwMDI6ZjA1MCwwMDAzOmYwNTBdCisxNTcgLT4gR2VvdmlzaW9uIEdWLTgwMChTKSAobWFzdGVyKSAgICAgICAgICAgICAgICAgICAgICAgIFs4MDBhOjc2M2RdCisxNTggLT4gR2VvdmlzaW9uIEdWLTgwMChTKSAoc2xhdmUpICAgICAgICAgICAgICAgICAgICAgICAgIFs4MDBiOjc2M2QsODAwYzo3NjNkLDgwMGQ6NzYzZF0KKzE1OSAtPiBQcm9WaWRlbyBQVjE4MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE4MzA6MTU0MCwxODMxOjE1NDAsMTgzMjoxNTQwLDE4MzM6MTU0MCwxODM0OjE1NDAsMTgzNToxNTQwLDE4MzY6MTU0MCwxODM3OjE1NDBdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUKaW5kZXggMzVlYTEzMC4uOTFhYTNjMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NQpAQCAtMTIsMyArMTIsNyBAQAogIDExIC0+IERWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgRHVhbCBFeHByZXNzICAgICAgICAgICAgICAgICBbMThhYzpkYjc4XQogIDEyIC0+IExlYWR0ZWsgV2luZmFzdCBQeERWUjMyMDAgSCAgICAgICAgICAgICAgICAgICAgICAgICBbMTA3ZDo2NjgxXQogIDEzIC0+IENvbXBybyBWaWRlb01hdGUgRTY1MEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMTg1YjplODAwXQorIDE0IC0+IFR1cmJvU2lnaHQgVEJTIDY5MjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNjkyMDo4ODg4XQorIDE1IC0+IFRlVmlpIFM0NzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZDQ3MDo5MDIyXQorIDE2IC0+IERWQldvcmxkIERWQi1TMiAyMDA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDAwMToyMDA1XQorIDE3IC0+IE5ldFVQIER1YWwgRFZCLVMyIENJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMWI1NToyYTJjXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4CmluZGV4IDBkMDhmMWUuLjcxZTlkYjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODgKQEAgLTc3LDMgKzc3LDQgQEAKICA3NiAtPiBTQVRUUkFERSBTVDQyMDAgRFZCLVMvUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2IyMDA6NDIwMF0KICA3NyAtPiBUQlMgODkxMCBEVkItUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzg5MTA6ODg4OF0KICA3OCAtPiBQcm9mIDYyMDAgRFZCLVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2IwMjI6MzAyMl0KKyA3OSAtPiBUZXJyYXRlYyBDaW5lcmd5IEhUIFBDSSBNS0lJICAgICAgICAgICAgICAgICAgICAgICAgWzE1M2I6MTE3N10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5lbTI4eHgKaW5kZXggNzViZGVkOC4uNzhkMGE2ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5lbTI4eHgKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5lbTI4eHgKQEAgLTcsMTIgKzcsMTIgQEAKICAgNiAtPiBUZXJyYXRlYyBDaW5lcmd5IDIwMCBVU0IgICAgICAgICAgICAgICAgIChlbTI4MDApCiAgIDcgLT4gTGVhZHRlayBXaW5mYXN0IFVTQiBJSSAgICAgICAgICAgICAgICAgICAoZW0yODAwKSAgICAgICAgWzA0MTM6NjAyM10KICAgOCAtPiBLd29ybGQgVVNCMjgwMCAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbTI4MDApCi0gIDkgLT4gUGlubmFjbGUgRGF6emxlIERWQyA5MC9EVkMgMTAwICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkgWzIzMDQ6MDIwNywyMzA0OjAyMWFdCisgIDkgLT4gUGlubmFjbGUgRGF6emxlIERWQyA5MC8xMDAvMTAxLzEwNyAvIEthaXNlciBCYWFzIFZpZGVvIHRvIERWRCBtYWtlciAoZW0yODIwL2VtMjg0MCkgWzFiODA6ZTMwMiwyMzA0OjAyMDcsMjMwNDowMjFhXQogIDEwIC0+IEhhdXBwYXVnZSBXaW5UViBIVlIgOTAwICAgICAgICAgICAgICAgICAgKGVtMjg4MCkgICAgICAgIFsyMDQwOjY1MDBdCiAgMTEgLT4gVGVycmF0ZWMgSHlicmlkIFhTICAgICAgICAgICAgICAgICAgICAgICAoZW0yODgwKSAgICAgICAgWzBjY2Q6MDA0Ml0KICAxMiAtPiBLd29ybGQgUFZSIFRWIDI4MDAgUkYgICAgICAgICAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKQogIDEzIC0+IFRlcnJhdGVjIFByb2RpZ3kgWFMgICAgICAgICAgICAgICAgICAgICAgKGVtMjg4MCkgICAgICAgIFswY2NkOjAwNDddCi0gMTQgLT4gUGl4ZWx2aWV3IFByb2xpbmsgUGxheVRWIFVTQiAyLjAgICAgICAgICAoZW0yODIwL2VtMjg0MCkKKyAxNCAtPiBTSUlHIEFWVHVuZXItUFZSIC8gUGl4ZWx2aWV3IFByb2xpbmsgUGxheVRWIFVTQiAyLjAgKGVtMjgyMC9lbTI4NDApCiAgMTUgLT4gVi1HZWFyIFBvY2tldFRWICAgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODAwKQogIDE2IC0+IEhhdXBwYXVnZSBXaW5UViBIVlIgOTUwICAgICAgICAgICAgICAgICAgKGVtMjg4MykgICAgICAgIFsyMDQwOjY1MTMsMjA0MDo2NTE3LDIwNDA6NjUxYl0KICAxNyAtPiBQaW5uYWNsZSBQQ1RWIEhEIFBybyBTdGljayAgICAgICAgICAgICAgIChlbTI4ODApICAgICAgICBbMjMwNDowMjI3XQpAQCAtMzAsNyArMzAsNiBAQAogIDMwIC0+IFZpZGVvbG9neSAyMEsxNFhVU0IgVVNCMi4wICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApCiAgMzEgLT4gVXNiZ2VhciBWRDIwNHY5ICAgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODIxKQogIDMyIC0+IFN1cGVyY29tcCBVU0IgMi4wIFRWICAgICAgICAgICAgICAgICAgICAgKGVtMjgyMSkKLSAzMyAtPiBTSUlHIEFWVHVuZXItUFZSL1Byb2xpbmsgUGxheVRWIFVTQiAyLjAgIChlbTI4MjEpCiAgMzQgLT4gVGVycmF0ZWMgQ2luZXJneSBBIEh5YnJpZCBYUyAgICAgICAgICAgICAoZW0yODYwKSAgICAgICAgWzBjY2Q6MDA0Zl0KICAzNSAtPiBUeXBob29uIERWRCBNYWtlciAgICAgICAgICAgICAgICAgICAgICAgIChlbTI4NjApCiAgMzYgLT4gTmV0R01CSCBDYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODYwKQpAQCAtNTgsMyArNTcsNyBAQAogIDU4IC0+IENvbXBybyBWaWRlb01hdGUgRm9yWW91L1N0ZXJlbyAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApIFsxODViOjIwNDFdCiAgNjAgLT4gSGF1cHBhdWdlIFdpblRWIEhWUiA4NTAgICAgICAgICAgICAgICAgICAoZW0yODgzKSAgICAgICAgWzIwNDA6NjUxZl0KICA2MSAtPiBQaXhlbHZpZXcgUGxheVRWIEJveCA0IFVTQiAyLjAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKQorIDYyIC0+IEdhZG1laSBUVlIyMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApCisgNjMgLT4gS2Fpb215IFRWblBDIFUyICAgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODYwKSAgICAgICAgW2ViMWE6ZTMwM10KKyA2NCAtPiBFYXN5IENhcCBDYXB0dXJlIERDLTYwICAgICAgICAgICAgICAgICAgIChlbTI4NjApCisgNjUgLT4gSU8tREFUQSBHVi1NVlAvU1ogICAgICAgICAgICAgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkgWzA0YmI6MDUxNV0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNAppbmRleCBiOGQ0NzA1Li42ZGFjZjI4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CkBAIC0xNTMsMyArMTUzLDUgQEAKIDE1MiAtPiBBc3VzIFRpZ2VyIFJldjoxLjAwICAgICAgICAgICAgICAgICAgICAgIFsxMDQzOjQ4NTddCiAxNTMgLT4gS3dvcmxkIFBsdXMgVFYgQW5hbG9nIExpdGUgUENJICAgICAgICAgICBbMTdkZTo3MTI4XQogMTU0IC0+IEF2ZXJtZWRpYSBBVmVyVFYgR08gMDA3IEZNIFBsdXMgICAgICAgICAgWzE0NjE6ZjMxZF0KKzE1NSAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMTEyMCBBVFNDL1FBTS1IeWJyaWQgIFswMDcwOjY3MDYsMDA3MDo2NzA4XQorMTU2IC0+IEhhdXBwYXVnZSBXaW5UVi1IVlIxMTEwcjMgICAgICAgICAgICAgICAgWzAwNzA6NjcwNywwMDcwOjY3MDksMDA3MDo2NzBhXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3JhbiBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4KaW5kZXggMjk1NDYyYi4uMGU4OWU3NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3JhbgorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1pvcmFuCkBAIC00MDEsOCArNDAxLDcgQEAKICAgIGZpcnN0IHNldCB0aGUgY29ycmVjdCBub3JtLiBXZWxsLCBpdCBzZWVtcyBsb2dpY2FsbHkgY29ycmVjdDogVFYKICAgIHN0YW5kYXJkIGlzICJtb3JlIGNvbnN0YW50IiBmb3IgY3VycmVudCBjb3VudHJ5IHRoYW4gZ2VvbWV0cnkKICAgIHNldHRpbmdzIG9mIGEgdmFyaWV0eSBvZiBUViBjYXB0dXJlIGNhcmRzIHdoaWNoIG1heSB3b3JrIGluIElUVSBvcgotICAgc3F1YXJlIHBpeGVsIGZvcm1hdC4gUmVtZW1iZXIgdGhhdCB1c2VycyBub3cgY2FuIGxvY2sgdGhlIG5vcm0gdG8KLSAgIGF2b2lkIGFueSBhbWJpZ3VpdHkuCisgICBzcXVhcmUgcGl4ZWwgZm9ybWF0LgogLS0KIFBsZWFzZSBub3RlIHRoYXQgbGF2cGxheS9sYXZyZWMgYXJlIGFsc28gaW5jbHVkZWQgaW4gdGhlIE1KUEVHLXRvb2xzCiAoaHR0cDovL21qcGVnLnNmLm5ldC8pLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0luc21vZC1vcHRpb25zIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0luc21vZC1vcHRpb25zCmluZGV4IDVlZjc1NzguLmJiZTNlZDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9JbnNtb2Qtb3B0aW9ucworKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvSW5zbW9kLW9wdGlvbnMKQEAgLTgxLDE2ICs4MSw2IEBACiAJCXBhbD1bYmRnaWxdCXNlbGVjdCBQQUwgdmFyaWFudCAodXNlZCBmb3Igc29tZSB0dW5lcnMKIAkJCQlvbmx5LCBpbXBvcnRhbnQgZm9yIHRoZSBhdWRpbyBjYXJyaWVyKS4KIAotdHZtaXhlci5vCi0JcmVnaXN0ZXJzIGEgbWl4ZXIgZGV2aWNlIGZvciB0aGUgVFYgY2FyZCdzIHZvbHVtZS9iYXNzL3RyZWJsZQotCWNvbnRyb2xzIChyZXF1aXJlcyBhIGkyYyBhdWRpbyBjb250cm9sIGNoaXAgbGlrZSB0aGUgbXNwMzQwMCkuCi0KLQlpbnNtb2QgYXJnczoKLQkJZGVidWc9MQkJcHJpbnQgc29tZSBkZWJ1ZyBpbmZvIHRvIHRoZSBzeXNsb2cuCi0JCWRldm5yPW4JCWFsbG9jYXRlIGRldmljZSAjbiAoMCA9PSAvZGV2L21peGVyLAotCQkJCTEgPSAvZGV2L21peGVyMSwgLi4uKSwgZGVmYXVsdCBpcyB0bwotCQkJCXVzZSB0aGUgZmlyc3QgZnJlZSBvbmUuCi0KIHR2YXVkaW8ubwogCW5ldywgZXhwZXJpbWVudGFsIG1vZHVsZSB3aGljaCBpcyBzdXBwb3J0ZWQgdG8gcHJvdmlkZSBhIHNpbmdsZQogCWRyaXZlciBmb3IgYWxsIHNpbXBsZSBpMmMgYXVkaW8gY29udHJvbCBjaGlwcyAodGRhL3RlYSopLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRSBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUKaW5kZXggN2NhMjE1NC4uM2EzNjdjZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRQorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FCkBAIC02Myw4ICs2Myw4IEBACiB5b3Vyc2VsZiAocGF0Y2hlcyB2ZXJ5IHdlbGNvbWUgb2YgY291cnNlLi4uKSAgWW91IGtub3c6IFRoZSBsaW51eAogc2xvZ2FuIGlzICJEbyBpdCB5b3Vyc2VsZiIuCiAKLVRoZXJlIGlzIGEgbWFpbGluZyBsaXN0OiB2aWRlbzRsaW51eC1saXN0QHJlZGhhdC5jb20uCi1odHRwczovL2xpc3RtYW4ucmVkaGF0LmNvbS9tYWlsbWFuL2xpc3RpbmZvL3ZpZGVvNGxpbnV4LWxpc3QKK1RoZXJlIGlzIGEgbWFpbGluZyBsaXN0OiBsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKK2h0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvdmdlci1saXN0cy5odG1sI2xpbnV4LW1lZGlhCiAKIElmIHlvdSBoYXZlIHRyb3VibGUgd2l0aCBzb21lIHNwZWNpZmljIFRWIGNhcmQsIHRyeSB0byBhc2sgdGhlcmUKIGluc3RlYWQgb2YgbWFpbGluZyBtZSBkaXJlY3RseS4gIFRoZSBjaGFuY2UgdGhhdCBzb21lb25lIHdpdGggdGhlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvUkVBRE1FLmhtMTIgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvUkVBRE1FLmhtMTIKaW5kZXggMGUyMTNlZC4uYjM2MTQ4ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jeDIzNDF4L1JFQURNRS5obTEyCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvY3gyMzQxeC9SRUFETUUuaG0xMgpAQCAtMzIsNiArMzIsMTAgQEAKIFRoZSB3aWR0aCBvZiBhIGZyYW1lIGlzIGFsd2F5cyA3MjAgcGl4ZWxzLCByZWdhcmRsZXNzIG9mIHRoZSBhY3R1YWwgc3BlY2lmaWVkCiB3aWR0aC4KIAorSWYgdGhlIGhlaWdodCBpcyBub3QgYSBtdWx0aXBsZSBvZiAzMiBsaW5lcywgdGhlbiB0aGUgY2FwdHVyZWQgdmlkZW8gaXMKK21pc3NpbmcgbWFjcm9ibG9ja3MgYXQgdGhlIGVuZCBhbmQgaXMgdW51c2FibGUuIFNvIHRoZSBoZWlnaHQgbXVzdCBiZSBhCittdWx0aXBsZSBvZiAzMi4KKwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CmluZGV4IDFjNThhNzYuLjk4NTI5ZTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvZ3NwY2EudHh0CkBAIC0zMiw2ICszMiw3IEBACiB6YzN4eAkJMDQxZTo0MDUxCUNyZWF0aXZlIExpdmUhQ2FtIE5vdGVib29rIFBybyAoVkYwMjUwKQogb3Y1MTkJCTA0MWU6NDA1MglDcmVhdGl2ZSBMaXZlISBWSVNUQSBJTQogemMzeHgJCTA0MWU6NDA1MwlDcmVhdGl2ZSBMaXZlIUNhbSBWaWRlbyBJTQordmMwMzJ4CQkwNDFlOjQwNWIJQ3JlYXRpdmUgTGl2ZSEgQ2FtIE5vdGVib29rIFVsdHJhIChWQzAxMzApCiBvdjUxOQkJMDQxZTo0MDVmCUNyZWF0aXZlIExpdmUhIFZJU1RBIFZGMDMzMAogb3Y1MTkJCTA0MWU6NDA2MAlDcmVhdGl2ZSBMaXZlISBWSVNUQSBWRjAzNTAKIG92NTE5CQkwNDFlOjQwNjEJQ3JlYXRpdmUgTGl2ZSEgVklTVEEgVkYwNDAwCkBAIC0xOTMsNiArMTk0LDcgQEAKIHNwY2E1MDAJCTA4Y2E6MDEwMwlBaXB0ZWsgUG9ja2V0RFYKIHN1bnBsdXMJCTA4Y2E6MDEwNAlBaXB0ZWsgUG9ja2V0RFZJSSAxLjMKIHN1bnBsdXMJCTA4Y2E6MDEwNglBaXB0ZWsgUG9ja2V0IERWMzEwMCsKK21yOTczMTBhCTA4Y2E6MDExMQlBaXB0ZWsgUGVuQ2FtIFZHQSsKIHN1bnBsdXMJCTA4Y2E6MjAwOAlBaXB0ZWsgTWluaSBQZW5DYW0gMiBNCiBzdW5wbHVzCQkwOGNhOjIwMTAJQWlwdGVrIFBvY2tldENhbSAzTQogc3VucGx1cwkJMDhjYToyMDE2CUFpcHRlayBQb2NrZXRDYW0gMiBNZWdhCkBAIC0yMTUsNiArMjE3LDcgQEAKIHBhYzIwNwkJMDkzYToyNDcwCUdlbml1cyBHRjExMgogcGFjMjA3CQkwOTNhOjI0NzEJR2VuaXVzIFZpZGVvQ2FtIGdlMTExCiBwYWMyMDcJCTA5M2E6MjQ3MglHZW5pdXMgVmlkZW9DYW0gZ2UxMTAKK3BhYzIwNwkJMDkzYToyNDc0CUdlbml1cyBpTG9vayAxMTEKIHBhYzIwNwkJMDkzYToyNDc2CUdlbml1cyBlLU1lc3NlbmdlciAxMTIKIHBhYzczMTEJCTA5M2E6MjYwMAlQQUM3MzExIFR5cGhvb24KIHBhYzczMTEJCTA5M2E6MjYwMQlQaGlsaXBzIFNQQyA2MTAgTkMKQEAgLTI3OSw2ICsyODIsNyBAQAogemMzeHgJCTEwZmQ6ODA1MAlUeXBob29uIFdlYnNob3QgSUkgVVNCIDMwMGsKIG92NTM0CQkxNDE1OjIwMDAJU29ueSBIRCBFeWUgZm9yIFBTMyAoU0xFSCAwMDIwMSkKIHBhYzIwNwkJMTQ1ZjowMTNhCVRydXN0IFdCLTEzMDBOCit2YzAzMngJCTE1Yjg6NjAwMQlIUCAyLjAgTWVnYXBpeGVsCiB2YzAzMngJCTE1Yjg6NjAwMglIUCAyLjAgTWVnYXBpeGVsIHJ6NDA2YWEKIHNwY2E1MDEJCTE3NzY6NTAxYwlBcm93YW5hIDMwMEsgQ01PUyBDYW1lcmEKIHQ2MTMJCTE3YTE6MDEyOAlUQVNDT1JQIEpQRUcgV2ViY2FtLCBOR1MgQ3ljbG9wcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zaTQ3MHgudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zaTQ3MHgudHh0CmluZGV4IDQ5Njc5ZTYuLjNhNzgyM2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc2k0NzB4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NpNDcweC50eHQKQEAgLTEsNiArMSw2IEBACiBEcml2ZXIgZm9yIFVTQiByYWRpb3MgZm9yIHRoZSBTaWxpY29uIExhYnMgU2k0NzB4IEZNIFJhZGlvIFJlY2VpdmVycwogCi1Db3B5cmlnaHQgKGMpIDIwMDggVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PgorQ29weXJpZ2h0IChjKSAyMDA5IFRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KIAogCiBJbmZvcm1hdGlvbiBmcm9tIFNpbGljb24gTGFicwpAQCAtNDEsNyArNDEsNyBAQAogLSAxMGM0OjgxOGE6IFNpbGljb24gTGFicyBVU0IgRk0gUmFkaW8gUmVmZXJlbmNlIERlc2lnbgogLSAwNmUxOmExNTU6IEFEUy9UZWNoIEZNIFJhZGlvIFJlY2VpdmVyIChmb3JtZXJseSBJbnN0YW50IEZNIE11c2ljKSAoUkRYLTE1NS1FRikKIC0gMWI4MDpkNzAwOiBLV29ybGQgVVNCIEZNIFJhZGlvIFNuYXBNdXNpYyBNb2JpbGUgNzAwIChGTTcwMCkKLS0gMTBjNTo4MTlhOiBEZWFsRXh0cmVtZSBVU0IgUmFkaW8KKy0gMTBjNTo4MTlhOiBTYW5laSBFbGVjdHJpYywgSW5jLiBGTSBVU0IgUmFkaW8gKHNvbGQgYXMgRGVhbEV4dHJlbWUuY29tIFBDZWFyKQogCiAKIFNvZnR3YXJlCkBAIC01Miw2ICs1Miw3IEBACiAtIGdyYWRpbyAtIEdUSyBGTSByYWRpbyB0dW5lcgogLSBrcmFkaW8gLSBDb21mb3J0YWJsZSBSYWRpbyBBcHBsaWNhdGlvbiBmb3IgS0RFCiAtIHJhZGlvIC0gbmN1cnNlcy1iYXNlZCByYWRpbyBhcHBsaWNhdGlvbgorLSBtcGxheWVyIC0gVGhlIFVsdGltYXRlIE1vdmllIFBsYXllciBGb3IgTGludXgKIAogVGhlcmUgaXMgYWxzbyBhIGxpYnJhcnkgbGlidjRsLCB3aGljaCBjYW4gYmUgdXNlZC4gSXQncyBnb2luZyB0byBoYXZlIGEgZnVuY3Rpb24KIGZvciBmcmVxdWVuY3kgc2Vla2luZywgZWl0aGVyIGJ5IHVzaW5nIGhhcmR3YXJlIGZ1bmN0aW9uYWxpdHkgYXMgaW4gcmFkaW8tc2k0NzB4CkBAIC02OSw3ICs3MCw3IEBACiBVU0IgQXVkaW8gaXMgcHJvdmlkZWQgYnkgdGhlIEFMU0Egc25kX3VzYl9hdWRpbyBtb2R1bGUuIEl0IGlzIHJlY29tbWVuZGVkIHRvCiBhbHNvIHNlbGVjdCBTTkRfVVNCX0FVRElPLCBhcyB0aGlzIGlzIHJlcXVpcmVkIHRvIGdldCBzb3VuZCBmcm9tIHRoZSByYWRpby4gRm9yCiBsaXN0aW5nIHlvdSBoYXZlIHRvIHJlZGlyZWN0IHRoZSBzb3VuZCwgZm9yIGV4YW1wbGUgdXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcKLWNvbW1hbmRzLgorY29tbWFuZHMuIFBsZWFzZSBhZGp1c3QgdGhlIGF1ZGlvIGRldmljZXMgdG8geW91ciBuZWVkcyAoL2Rldi9kc3AqIGFuZCBodzp4LHgpLgogCiBJZiB5b3UganVzdCB3YW50IHRvIHRlc3QgYXVkaW8gKHZlcnkgcG9vciBxdWFsaXR5KToKIGNhdCAvZGV2L2RzcDEgPiAvZGV2L2RzcApAQCAtODAsNiArODEsMTAgQEAKIElmIHlvdSB1c2UgYXJ0cyB0cnk6CiBhcmVjb3JkIC1EIGh3OjEsMCAtcjk2MDAwIC1jMiAtZiBTMTZfTEUgfCBhcnRzZHNwIGFwbGF5IC1CIC0KIAorSWYgeW91IHVzZSBtcGxheWVyIHRyeToKK21wbGF5ZXIgLXJhZGlvIGFkZXZpY2U9aHc9MS4wOmFyYXRlPTk2MDAwIFwKKwktcmF3YXVkaW8gcmF0ZT05NjAwMCBcCisJcmFkaW86Ly88ZnJlcXVlbmN5Pi9jYXB0dXJlCiAKIE1vZHVsZSBQYXJhbWV0ZXJzCiA9PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dAppbmRleCBmZjEyNDM3Li5hMzExNzczIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dApAQCAtNDcsNyArNDcsOSBAQAogMykgQ3JlYXRpbmcgVjRMMiBkZXZpY2Ugbm9kZXMgKC9kZXYvdmlkZW9YLCAvZGV2L3ZiaVgsIC9kZXYvcmFkaW9YIGFuZAogICAgL2Rldi92dHhYKSBhbmQga2VlcGluZyB0cmFjayBvZiBkZXZpY2Utbm9kZSBzcGVjaWZpYyBkYXRhLgogCi00KSBGaWxlaGFuZGxlLXNwZWNpZmljIHN0cnVjdHMgY29udGFpbmluZyBwZXItZmlsZWhhbmRsZSBkYXRhLgorNCkgRmlsZWhhbmRsZS1zcGVjaWZpYyBzdHJ1Y3RzIGNvbnRhaW5pbmcgcGVyLWZpbGVoYW5kbGUgZGF0YTsKKworNSkgdmlkZW8gYnVmZmVyIGhhbmRsaW5nLgogCiBUaGlzIGlzIGEgcm91Z2ggc2NoZW1hdGljIG9mIGhvdyBpdCBhbGwgcmVsYXRlczoKIApAQCAtODIsMTIgKzg0LDIwIEBACiAJdjRsMl9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KTsKIAogUmVnaXN0cmF0aW9uIHdpbGwgaW5pdGlhbGl6ZSB0aGUgdjRsMl9kZXZpY2Ugc3RydWN0IGFuZCBsaW5rIGRldi0+ZHJpdmVyX2RhdGEKLXRvIHY0bDJfZGV2LiBSZWdpc3RyYXRpb24gd2lsbCBhbHNvIHNldCB2NGwyX2Rldi0+bmFtZSB0byBhIHZhbHVlIGRlcml2ZWQgZnJvbQotZGV2IChkcml2ZXIgbmFtZSBmb2xsb3dlZCBieSB0aGUgYnVzX2lkLCB0byBiZSBwcmVjaXNlKS4gWW91IG1heSBjaGFuZ2UgdGhlCi1uYW1lIGFmdGVyIHJlZ2lzdHJhdGlvbiBpZiB5b3Ugd2FudC4KK3RvIHY0bDJfZGV2LiBJZiB2NGwyX2Rldi0+bmFtZSBpcyBlbXB0eSB0aGVuIGl0IHdpbGwgYmUgc2V0IHRvIGEgdmFsdWUgZGVyaXZlZAorZnJvbSBkZXYgKGRyaXZlciBuYW1lIGZvbGxvd2VkIGJ5IHRoZSBidXNfaWQsIHRvIGJlIHByZWNpc2UpLiBJZiB5b3Ugc2V0IGl0Cit1cCBiZWZvcmUgY2FsbGluZyB2NGwyX2RldmljZV9yZWdpc3RlciB0aGVuIGl0IHdpbGwgYmUgdW50b3VjaGVkLiBJZiBkZXYgaXMKK05VTEwsIHRoZW4geW91ICptdXN0KiBzZXR1cCB2NGwyX2Rldi0+bmFtZSBiZWZvcmUgY2FsbGluZyB2NGwyX2RldmljZV9yZWdpc3Rlci4KIAogVGhlIGZpcnN0ICdkZXYnIGFyZ3VtZW50IGlzIG5vcm1hbGx5IHRoZSBzdHJ1Y3QgZGV2aWNlIHBvaW50ZXIgb2YgYSBwY2lfZGV2LAotdXNiX2RldmljZSBvciBwbGF0Zm9ybV9kZXZpY2UuCit1c2JfZGV2aWNlIG9yIHBsYXRmb3JtX2RldmljZS4gSXQgaXMgcmFyZSBmb3IgZGV2IHRvIGJlIE5VTEwsIGJ1dCBpdCBoYXBwZW5zCit3aXRoIElTQSBkZXZpY2VzIG9yIHdoZW4gb25lIGRldmljZSBjcmVhdGVzIG11bHRpcGxlIFBDSSBkZXZpY2VzLCB0aHVzIG1ha2luZworaXQgaW1wb3NzaWJsZSB0byBhc3NvY2lhdGUgdjRsMl9kZXYgd2l0aCBhIHBhcnRpY3VsYXIgcGFyZW50LgorCitZb3UgY2FuIGFsc28gc3VwcGx5IGEgbm90aWZ5KCkgY2FsbGJhY2sgdGhhdCBjYW4gYmUgY2FsbGVkIGJ5IHN1Yi1kZXZpY2VzIHRvCitub3RpZnkgeW91IG9mIGV2ZW50cy4gV2hldGhlciB5b3UgbmVlZCB0byBzZXQgdGhpcyBkZXBlbmRzIG9uIHRoZSBzdWItZGV2aWNlLgorQW55IG5vdGlmaWNhdGlvbnMgYSBzdWItZGV2aWNlIHN1cHBvcnRzIG11c3QgYmUgZGVmaW5lZCBpbiBhIGhlYWRlciBpbgoraW5jbHVkZS9tZWRpYS88c3ViZGV2aWNlPi5oLgogCiBZb3UgdW5yZWdpc3RlciB3aXRoOgogCkBAIC05NSw2ICsxMDUsMTcgQEAKIAogVW5yZWdpc3RlcmluZyB3aWxsIGFsc28gYXV0b21hdGljYWxseSB1bnJlZ2lzdGVyIGFsbCBzdWJkZXZzIGZyb20gdGhlIGRldmljZS4KIAorSWYgeW91IGhhdmUgYSBob3RwbHVnZ2FibGUgZGV2aWNlIChlLmcuIGEgVVNCIGRldmljZSksIHRoZW4gd2hlbiBhIGRpc2Nvbm5lY3QKK2hhcHBlbnMgdGhlIHBhcmVudCBkZXZpY2UgYmVjb21lcyBpbnZhbGlkLiBTaW5jZSB2NGwyX2RldmljZSBoYXMgYSBwb2ludGVyIHRvCit0aGF0IHBhcmVudCBkZXZpY2UgaXQgaGFzIHRvIGJlIGNsZWFyZWQgYXMgd2VsbCB0byBtYXJrIHRoYXQgdGhlIHBhcmVudCBpcworZ29uZS4gVG8gZG8gdGhpcyBjYWxsOgorCisJdjRsMl9kZXZpY2VfZGlzY29ubmVjdChzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KTsKKworVGhpcyBkb2VzICpub3QqIHVucmVnaXN0ZXIgdGhlIHN1YmRldnMsIHNvIHlvdSBzdGlsbCBuZWVkIHRvIGNhbGwgdGhlCit2NGwyX2RldmljZV91bnJlZ2lzdGVyKCkgZnVuY3Rpb24gZm9yIHRoYXQuIElmIHlvdXIgZHJpdmVyIGlzIG5vdCBob3RwbHVnZ2FibGUsCit0aGVuIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsbCB2NGwyX2RldmljZV9kaXNjb25uZWN0KCkuCisKIFNvbWV0aW1lcyB5b3UgbmVlZCB0byBpdGVyYXRlIG92ZXIgYWxsIGRldmljZXMgcmVnaXN0ZXJlZCBieSBhIHNwZWNpZmljCiBkcml2ZXIuIFRoaXMgaXMgdXN1YWxseSB0aGUgY2FzZSBpZiBtdWx0aXBsZSBkZXZpY2UgZHJpdmVycyB1c2UgdGhlIHNhbWUKIGhhcmR3YXJlLiBFLmcuIHRoZSBpdnR2ZmIgZHJpdmVyIGlzIGEgZnJhbWVidWZmZXIgZHJpdmVyIHRoYXQgdXNlcyB0aGUgaXZ0dgpAQCAtMTM0LDcgKzE1NSw3IEBACiAKIHN0YXRpYyBhdG9taWNfdCBkcnZfaW5zdGFuY2UgPSBBVE9NSUNfSU5JVCgwKTsKIAotc3RhdGljIGludCBfX2RldmluaXQgZHJ2X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcnZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKIAkuLi4KQEAgLTIxOCw3ICsyMzksNyBAQAogCiBBIHN1Yi1kZXZpY2UgZHJpdmVyIGluaXRpYWxpemVzIHRoZSB2NGwyX3N1YmRldiBzdHJ1Y3QgdXNpbmc6CiAKLQl2NGwyX3N1YmRldl9pbml0KHN1YmRldiwgJm9wcyk7CisJdjRsMl9zdWJkZXZfaW5pdChzZCwgJm9wcyk7CiAKIEFmdGVyd2FyZHMgeW91IG5lZWQgdG8gaW5pdGlhbGl6ZSBzdWJkZXYtPm5hbWUgd2l0aCBhIHVuaXF1ZSBuYW1lIGFuZCBzZXQgdGhlCiBtb2R1bGUgb3duZXIuIFRoaXMgaXMgZG9uZSBmb3IgeW91IGlmIHlvdSB1c2UgdGhlIGkyYyBoZWxwZXIgZnVuY3Rpb25zLgpAQCAtMjI2LDcgKzI0Nyw3IEBACiBBIGRldmljZSAoYnJpZGdlKSBkcml2ZXIgbmVlZHMgdG8gcmVnaXN0ZXIgdGhlIHY0bDJfc3ViZGV2IHdpdGggdGhlCiB2NGwyX2RldmljZToKIAotCWludCBlcnIgPSB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoZGV2aWNlLCBzdWJkZXYpOworCWludCBlcnIgPSB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYodjRsMl9kZXYsIHNkKTsKIAogVGhpcyBjYW4gZmFpbCBpZiB0aGUgc3ViZGV2IG1vZHVsZSBkaXNhcHBlYXJlZCBiZWZvcmUgaXQgY291bGQgYmUgcmVnaXN0ZXJlZC4KIEFmdGVyIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZCBzdWNjZXNzZnVsbHkgdGhlIHN1YmRldi0+ZGV2IGZpZWxkIHBvaW50cyB0bwpAQCAtMjM0LDE3ICsyNTUsMTcgQEAKIAogWW91IGNhbiB1bnJlZ2lzdGVyIGEgc3ViLWRldmljZSB1c2luZzoKIAotCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHN1YmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOwogCi1BZnRlcndhcmRzIHRoZSBzdWJkZXYgbW9kdWxlIGNhbiBiZSB1bmxvYWRlZCBhbmQgc3ViZGV2LT5kZXYgPT0gTlVMTC4KK0FmdGVyd2FyZHMgdGhlIHN1YmRldiBtb2R1bGUgY2FuIGJlIHVubG9hZGVkIGFuZCBzZC0+ZGV2ID09IE5VTEwuCiAKIFlvdSBjYW4gY2FsbCBhbiBvcHMgZnVuY3Rpb24gZWl0aGVyIGRpcmVjdGx5OgogCi0JZXJyID0gc3ViZGV2LT5vcHMtPmNvcmUtPmdfY2hpcF9pZGVudChzdWJkZXYsICZjaGlwKTsKKwllcnIgPSBzZC0+b3BzLT5jb3JlLT5nX2NoaXBfaWRlbnQoc2QsICZjaGlwKTsKIAogYnV0IGl0IGlzIGJldHRlciBhbmQgZWFzaWVyIHRvIHVzZSB0aGlzIG1hY3JvOgogCi0JZXJyID0gdjRsMl9zdWJkZXZfY2FsbChzdWJkZXYsIGNvcmUsIGdfY2hpcF9pZGVudCwgJmNoaXApOworCWVyciA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIGdfY2hpcF9pZGVudCwgJmNoaXApOwogCiBUaGUgbWFjcm8gd2lsbCB0byB0aGUgcmlnaHQgTlVMTCBwb2ludGVyIGNoZWNrcyBhbmQgcmV0dXJucyAtRU5PREVWIGlmIHN1YmRldgogaXMgTlVMTCwgLUVOT0lPQ1RMQ01EIGlmIGVpdGhlciBzdWJkZXYtPmNvcmUgb3Igc3ViZGV2LT5jb3JlLT5nX2NoaXBfaWRlbnQgaXMKQEAgLTI1MiwxOSArMjczLDE5IEBACiAKIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY2FsbCBhbGwgb3IgYSBzdWJzZXQgb2YgdGhlIHN1Yi1kZXZpY2VzOgogCi0JdjRsMl9kZXZpY2VfY2FsbF9hbGwoZGV2LCAwLCBjb3JlLCBnX2NoaXBfaWRlbnQsICZjaGlwKTsKKwl2NGwyX2RldmljZV9jYWxsX2FsbCh2NGwyX2RldiwgMCwgY29yZSwgZ19jaGlwX2lkZW50LCAmY2hpcCk7CiAKIEFueSBzdWJkZXYgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BzIGlzIHNraXBwZWQgYW5kIGVycm9yIHJlc3VsdHMgYXJlCiBpZ25vcmVkLiBJZiB5b3Ugd2FudCB0byBjaGVjayBmb3IgZXJyb3JzIHVzZSB0aGlzOgogCi0JZXJyID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoZGV2LCAwLCBjb3JlLCBnX2NoaXBfaWRlbnQsICZjaGlwKTsKKwllcnIgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2Vycih2NGwyX2RldiwgMCwgY29yZSwgZ19jaGlwX2lkZW50LCAmY2hpcCk7CiAKIEFueSBlcnJvciBleGNlcHQgLUVOT0lPQ1RMQ01EIHdpbGwgZXhpdCB0aGUgbG9vcCB3aXRoIHRoYXQgZXJyb3IuIElmIG5vCiBlcnJvcnMgKGV4Y2VwdCAtRU5PSU9DVExDTUQpIG9jY3VyZWQsIHRoZW4gMCBpcyByZXR1cm5lZC4KIAogVGhlIHNlY29uZCBhcmd1bWVudCB0byBib3RoIGNhbGxzIGlzIGEgZ3JvdXAgSUQuIElmIDAsIHRoZW4gYWxsIHN1YmRldnMgYXJlCiBjYWxsZWQuIElmIG5vbi16ZXJvLCB0aGVuIG9ubHkgdGhvc2Ugd2hvc2UgZ3JvdXAgSUQgbWF0Y2ggdGhhdCB2YWx1ZSB3aWxsCi1iZSBjYWxsZWQuIEJlZm9yZSBhIGJyaWRnZSBkcml2ZXIgcmVnaXN0ZXJzIGEgc3ViZGV2IGl0IGNhbiBzZXQgc3ViZGV2LT5ncnBfaWQKK2JlIGNhbGxlZC4gQmVmb3JlIGEgYnJpZGdlIGRyaXZlciByZWdpc3RlcnMgYSBzdWJkZXYgaXQgY2FuIHNldCBzZC0+Z3JwX2lkCiB0byB3aGF0ZXZlciB2YWx1ZSBpdCB3YW50cyAoaXQncyAwIGJ5IGRlZmF1bHQpLiBUaGlzIHZhbHVlIGlzIG93bmVkIGJ5IHRoZQogYnJpZGdlIGRyaXZlciBhbmQgdGhlIHN1Yi1kZXZpY2UgZHJpdmVyIHdpbGwgbmV2ZXIgbW9kaWZ5IG9yIHVzZSBpdC4KIApAQCAtMjc2LDYgKzI5NywxMSBAQAogdjRsMl9kZXZpY2VfY2FsbF9hbGwoKS4gVGhhdCBlbnN1cmVzIHRoYXQgaXQgd2lsbCBvbmx5IGdvIHRvIHRoZSBzdWJkZXYKIHRoYXQgbmVlZHMgaXQuCiAKK0lmIHRoZSBzdWItZGV2aWNlIG5lZWRzIHRvIG5vdGlmeSBpdHMgdjRsMl9kZXZpY2UgcGFyZW50IG9mIGFuIGV2ZW50LCB0aGVuCitpdCBjYW4gY2FsbCB2NGwyX3N1YmRldl9ub3RpZnkoc2QsIG5vdGlmaWNhdGlvbiwgYXJnKS4gVGhpcyBtYWNybyBjaGVja3MKK3doZXRoZXIgdGhlcmUgaXMgYSBub3RpZnkoKSBjYWxsYmFjayBkZWZpbmVkIGFuZCByZXR1cm5zIC1FTk9ERVYgaWYgbm90LgorT3RoZXJ3aXNlIHRoZSByZXN1bHQgb2YgdGhlIG5vdGlmeSgpIGNhbGwgaXMgcmV0dXJuZWQuCisKIFRoZSBhZHZhbnRhZ2Ugb2YgdXNpbmcgdjRsMl9zdWJkZXYgaXMgdGhhdCBpdCBpcyBhIGdlbmVyaWMgc3RydWN0IGFuZCBkb2VzCiBub3QgY29udGFpbiBhbnkga25vd2xlZGdlIGFib3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLiBTbyBhIGRyaXZlciBtaWdodAogY29udGFpbiBzZXZlcmFsIHN1YmRldnMgdGhhdCB1c2UgYW4gSTJDIGJ1cywgYnV0IGFsc28gYSBzdWJkZXYgdGhhdCBpcwpAQCAtMzQwLDYgKzM2NiwxMiBAQAogaXMgY2FsbGVkLiBUaGlzIHdpbGwgdW5yZWdpc3RlciB0aGUgc3ViLWRldmljZSBmcm9tIHRoZSBicmlkZ2UgZHJpdmVyLiBJdCBpcwogc2FmZSB0byBjYWxsIHRoaXMgZXZlbiBpZiB0aGUgc3ViLWRldmljZSB3YXMgbmV2ZXIgcmVnaXN0ZXJlZC4KIAorWW91IG5lZWQgdG8gZG8gdGhpcyBiZWNhdXNlIHdoZW4gdGhlIGJyaWRnZSBkcml2ZXIgZGVzdHJveXMgdGhlIGkyYyBhZGFwdGVyCit0aGUgcmVtb3ZlKCkgY2FsbGJhY2tzIGFyZSBjYWxsZWQgb2YgdGhlIGkyYyBkZXZpY2VzIG9uIHRoYXQgYWRhcHRlci4KK0FmdGVyIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgdjRsMl9zdWJkZXYgc3RydWN0dXJlcyBhcmUgaW52YWxpZCwgc28gdGhleQoraGF2ZSB0byBiZSB1bnJlZ2lzdGVyZWQgZmlyc3QuIENhbGxpbmcgdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpCitmcm9tIHRoZSByZW1vdmUoKSBjYWxsYmFjayBlbnN1cmVzIHRoYXQgdGhpcyBpcyBhbHdheXMgZG9uZSBjb3JyZWN0bHkuCisKIAogVGhlIGJyaWRnZSBkcml2ZXIgYWxzbyBoYXMgc29tZSBoZWxwZXIgZnVuY3Rpb25zIGl0IGNhbiB1c2U6CiAKQEAgLTM0OSw4ICszODEsOCBAQAogY2FsbHMgaTJjX25ld19kZXZpY2UoKSB3aXRoIHRoZSBnaXZlbiBpMmNfYWRhcHRlciBhbmQgY2hpcC9hZGRyZXNzIGFyZ3VtZW50cy4KIElmIGFsbCBnb2VzIHdlbGwsIHRoZW4gaXQgcmVnaXN0ZXJzIHRoZSBzdWJkZXYgd2l0aCB0aGUgdjRsMl9kZXZpY2UuIEl0IGdldHMKIHRoZSB2NGwyX2RldmljZSBieSBjYWxsaW5nIGkyY19nZXRfYWRhcGRhdGEoYWRhcHRlciksIHNvIHlvdSBzaG91bGQgbWFrZSBzdXJlCi10aGF0IGFkYXBkYXRhIGlzIHNldCB0byB2NGwyX2RldmljZSB3aGVuIHlvdSBzZXR1cCB0aGUgaTJjX2FkYXB0ZXIgaW4geW91cgotZHJpdmVyLgordG8gY2FsbCBpMmNfc2V0X2FkYXBkYXRhKGFkYXB0ZXIsIHY0bDJfZGV2aWNlKSB3aGVuIHlvdSBzZXR1cCB0aGUgaTJjX2FkYXB0ZXIKK2luIHlvdXIgZHJpdmVyLgogCiBZb3UgY2FuIGFsc28gdXNlIHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCkgd2hpY2ggaXMgdmVyeSBzaW1pbGFyIHRvCiB2NGwyX2kyY19uZXdfc3ViZGV2KCksIGV4Y2VwdCB0aGF0IGl0IGhhcyBhbiBhcnJheSBvZiBwb3NzaWJsZSBJMkMgYWRkcmVzc2VzCkBAIC0zNTgsNiArMzkwLDE0IEBACiAKIEJvdGggZnVuY3Rpb25zIHJldHVybiBOVUxMIGlmIHNvbWV0aGluZyB3ZW50IHdyb25nLgogCitOb3RlIHRoYXQgdGhlIGNoaXBpZCB5b3UgcGFzcyB0byB2NGwyX2kyY19uZXdfKHByb2JlZF8pc3ViZGV2KCkgaXMgdXN1YWxseQordGhlIHNhbWUgYXMgdGhlIG1vZHVsZSBuYW1lLiBJdCBhbGxvd3MgeW91IHRvIHNwZWNpZnkgYSBjaGlwIHZhcmlhbnQsIGUuZy4KKyJzYWE3MTE0IiBvciAic2FhNzExNSIuIEluIGdlbmVyYWwgdGhvdWdoIHRoZSBpMmMgZHJpdmVyIGF1dG9kZXRlY3RzIHRoaXMuCitUaGUgdXNlIG9mIGNoaXBpZCBpcyBzb21ldGhpbmcgdGhhdCBuZWVkcyB0byBiZSBsb29rZWQgYXQgbW9yZSBjbG9zZWx5IGF0IGEKK2xhdGVyIGRhdGUuIEl0IGRpZmZlcnMgYmV0d2VlbiBpMmMgZHJpdmVycyBhbmQgYXMgc3VjaCBjYW4gYmUgY29uZnVzaW5nLgorVG8gc2VlIHdoaWNoIGNoaXAgdmFyaWFudHMgYXJlIHN1cHBvcnRlZCB5b3UgY2FuIGxvb2sgaW4gdGhlIGkyYyBkcml2ZXIgY29kZQorZm9yIHRoZSBpMmNfZGV2aWNlX2lkIHRhYmxlLiBUaGlzIGxpc3RzIGFsbCB0aGUgcG9zc2liaWxpdGllcy4KKwogCiBzdHJ1Y3QgdmlkZW9fZGV2aWNlCiAtLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zOTYsNiArNDM2LDE1IEBACiAtIGlvY3RsX29wczogaWYgeW91IHVzZSB0aGUgdjRsMl9pb2N0bF9vcHMgdG8gc2ltcGxpZnkgaW9jdGwgbWFpbnRlbmFuY2UKICAgKGhpZ2hseSByZWNvbW1lbmRlZCB0byB1c2UgdGhpcyBhbmQgaXQgbWlnaHQgYmVjb21lIGNvbXB1bHNvcnkgaW4gdGhlCiAgIGZ1dHVyZSEpLCB0aGVuIHNldCB0aGlzIHRvIHlvdXIgdjRsMl9pb2N0bF9vcHMgc3RydWN0LgorLSBwYXJlbnQ6IHlvdSBvbmx5IHNldCB0aGlzIGlmIHY0bDJfZGV2aWNlIHdhcyByZWdpc3RlcmVkIHdpdGggTlVMTCBhcworICB0aGUgcGFyZW50IGRldmljZSBzdHJ1Y3QuIFRoaXMgb25seSBoYXBwZW5zIGluIGNhc2VzIHdoZXJlIG9uZSBoYXJkd2FyZQorICBkZXZpY2UgaGFzIG11bHRpcGxlIFBDSSBkZXZpY2VzIHRoYXQgYWxsIHNoYXJlIHRoZSBzYW1lIHY0bDJfZGV2aWNlIGNvcmUuCisKKyAgVGhlIGN4ODggZHJpdmVyIGlzIGFuIGV4YW1wbGUgb2YgdGhpczogb25lIGNvcmUgdjRsMl9kZXZpY2Ugc3RydWN0LCBidXQKKyAgaXQgaXMgdXNlZCBieSBib3RoIGFuIHJhdyB2aWRlbyBQQ0kgZGV2aWNlIChjeDg4MDApIGFuZCBhIE1QRUcgUENJIGRldmljZQorICAoY3g4ODAyKS4gU2luY2UgdGhlIHY0bDJfZGV2aWNlIGNhbm5vdCBiZSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyCisgIFBDSSBkZXZpY2UgaXQgaXMgc2V0dXAgd2l0aG91dCBhIHBhcmVudCBkZXZpY2UuIEJ1dCB3aGVuIHRoZSBzdHJ1Y3QKKyAgdmlkZW9fZGV2aWNlIGlzIHNldHVwIHlvdSBkbyBrbm93IHdoaWNoIHBhcmVudCBQQ0kgZGV2aWNlIHRvIHVzZS4KIAogSWYgeW91IHVzZSB2NGwyX2lvY3RsX29wcywgdGhlbiB5b3Ugc2hvdWxkIHNldCBlaXRoZXIgLnVubG9ja2VkX2lvY3RsIG9yCiAuaW9jdGwgdG8gdmlkZW9faW9jdGwyIGluIHlvdXIgdjRsMl9maWxlX29wZXJhdGlvbnMgc3RydWN0LgpAQCAtNDk5LDggKzU0OCw4IEBACiAKIFlvdSBjYW4gc2V0L2dldCBkcml2ZXIgcHJpdmF0ZSBkYXRhIGluIHRoZSB2aWRlb19kZXZpY2Ugc3RydWN0IHVzaW5nOgogCi12b2lkICp2aWRlb19nZXRfZHJ2ZGF0YShzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYpOwotdm9pZCB2aWRlb19zZXRfZHJ2ZGF0YShzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpOwordm9pZCAqdmlkZW9fZ2V0X2RydmRhdGEoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldik7Cit2b2lkIHZpZGVvX3NldF9kcnZkYXRhKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYsIHZvaWQgKmRhdGEpOwogCiBOb3RlIHRoYXQgeW91IGNhbiBzYWZlbHkgY2FsbCB2aWRlb19zZXRfZHJ2ZGF0YSgpIGJlZm9yZSBjYWxsaW5nCiB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoKS4KQEAgLTUxOSwzICs1NjgsMTAzIEBACiBZb3UgY2FuIGdvIGZyb20gYSB2aWRlb19kZXZpY2Ugc3RydWN0IHRvIHRoZSB2NGwyX2RldmljZSBzdHJ1Y3QgdXNpbmc6CiAKIHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSB2ZGV2LT52NGwyX2RldjsKKwordmlkZW8gYnVmZmVyIGhlbHBlciBmdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB2NGwyIGNvcmUgQVBJIHByb3ZpZGVzIGEgc3RhbmRhcmQgbWV0aG9kIGZvciBkZWFsaW5nIHdpdGggdmlkZW8KK2J1ZmZlcnMuIFRob3NlIG1ldGhvZHMgYWxsb3cgYSBkcml2ZXIgdG8gaW1wbGVtZW50IHJlYWQoKSwgbW1hcCgpIGFuZAorb3ZlcmxheSgpIG9uIGEgY29uc2lzdGVudCB3YXkuCisKK1RoZXJlIGFyZSBjdXJyZW50bHkgbWV0aG9kcyBmb3IgdXNpbmcgdmlkZW8gYnVmZmVycyBvbiBkZXZpY2VzIHRoYXQKK3N1cHBvcnRzIERNQSB3aXRoIHNjYXR0ZXIvZ2F0aGVyIG1ldGhvZCAodmlkZW9idWYtZG1hLXNnKSwgRE1BIHdpdGgKK2xpbmVhciBhY2Nlc3MgKHZpZGVvYnVmLWRtYS1jb250aWcpLCBhbmQgdm1hbGxvY2VkIGJ1ZmZlcnMsIG1vc3RseQordXNlZCBvbiBVU0IgZHJpdmVycyAodmlkZW9idWYtdm1hbGxvYykuCisKK0FueSBkcml2ZXIgdXNpbmcgdmlkZW9idWYgc2hvdWxkIHByb3ZpZGUgb3BlcmF0aW9ucyAoY2FsbGJhY2tzKSBmb3IKK2ZvdXIgaGFuZGxlcnM6CisKK29wcy0+YnVmX3NldHVwICAgLSBjYWxjdWxhdGVzIHRoZSBzaXplIG9mIHRoZSB2aWRlbyBidWZmZXJzIGFuZCBhdm9pZCB0aGV5CisJCSAgIHRvIHdhc3RlIG1vcmUgdGhhbiBzb21lIG1heGltdW0gbGltaXQgb2YgUkFNOworb3BzLT5idWZfcHJlcGFyZSAtIGZpbGxzIHRoZSB2aWRlbyBidWZmZXIgc3RydWN0cyBhbmQgY2FsbHMKKwkJICAgdmlkZW9idWZfaW9sb2NrKCkgdG8gYWxsb2MgYW5kIHByZXBhcmUgbW1hcGVkIG1lbW9yeTsKK29wcy0+YnVmX3F1ZXVlICAgLSBhZHZpY2VzIHRoZSBkcml2ZXIgdGhhdCBhbm90aGVyIGJ1ZmZlciB3ZXJlCisJCSAgIHJlcXVlc3RlZCAoYnkgcmVhZCgpIG9yIGJ5IFFCVUYpOworb3BzLT5idWZfcmVsZWFzZSAtIGZyZWVzIGFueSBidWZmZXIgdGhhdCB3ZXJlIGFsbG9jYXRlZC4KKworSW4gb3JkZXIgdG8gdXNlIGl0LCB0aGUgZHJpdmVyIG5lZWQgdG8gaGF2ZSBhIGNvZGUgKGdlbmVyYWxseSBjYWxsZWQgYXQKK2ludGVycnVwdCBjb250ZXh0KSB0aGF0IHdpbGwgcHJvcGVybHkgaGFuZGxlIHRoZSBidWZmZXIgcmVxdWVzdCBsaXN0cywKK2Fubm91bmNpbmcgdGhhdCBhIG5ldyBidWZmZXIgd2VyZSBmaWxsZWQuCisKK1RoZSBpcnEgaGFuZGxpbmcgY29kZSBzaG91bGQgaGFuZGxlIHRoZSB2aWRlb2J1ZiB0YXNrIGxpc3RzLCBpbiBvcmRlcgordG8gYWR2aWNlIHZpZGVvYnVmIHRoYXQgYSBuZXcgZnJhbWUgd2VyZSBmaWxsZWQsIGluIG9yZGVyIHRvIGhvbm9yIHRvIGEKK3JlcXVlc3QuIFRoZSBjb2RlIGlzIGdlbmVyYWxseSBsaWtlIHRoaXMgb25lOgorCWlmIChsaXN0X2VtcHR5KCZkbWFfcS0+YWN0aXZlKSkKKwkJcmV0dXJuOworCisJYnVmID0gbGlzdF9lbnRyeShkbWFfcS0+YWN0aXZlLm5leHQsIHN0cnVjdCB2YnVmZmVyLCB2Yi5xdWV1ZSk7CisKKwlpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoJmJ1Zi0+dmIuZG9uZSkpCisJCXJldHVybjsKKworCS8qIFNvbWUgbG9naWMgdG8gaGFuZGxlIHRoZSBidWYgbWF5IGJlIG5lZWRlZCBoZXJlICovCisKKwlsaXN0X2RlbCgmYnVmLT52Yi5xdWV1ZSk7CisJZG9fZ2V0dGltZW9mZGF5KCZidWYtPnZiLnRzKTsKKwl3YWtlX3VwKCZidWYtPnZiLmRvbmUpOworCitUaG9zZSBhcmUgdGhlIHZpZGVvYnVmZmVyIGZ1bmN0aW9ucyB1c2VkIG9uIGRyaXZlcnMsIGltcGxlbWVudGVkIG9uCit2aWRlb2J1Zi1jb3JlOgorCistIFZpZGVvYnVmIGluaXQgZnVuY3Rpb25zCisgIHZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoKQorICAgICAgSW5pdGlhbGl6ZXMgdGhlIHZpZGVvYnVmIGluZnJhc3RydWN0dXJlLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZQorICAgICAgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgdmlkZW9idWYgZnVuY3Rpb24gb24gZHJpdmVycyB0aGF0IHVzZXMgRE1BCisgICAgICBTY2F0dGVyL0dhdGhlciBidWZmZXJzLgorCisgIHZpZGVvYnVmX3F1ZXVlX2RtYV9jb250aWdfaW5pdAorICAgICAgSW5pdGlhbGl6ZXMgdGhlIHZpZGVvYnVmIGluZnJhc3RydWN0dXJlLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZQorICAgICAgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgdmlkZW9idWYgZnVuY3Rpb24gb24gZHJpdmVycyB0aGF0IG5lZWQgRE1BCisgICAgICBjb250aWd1b3VzIGJ1ZmZlcnMuCisKKyAgdmlkZW9idWZfcXVldWVfdm1hbGxvY19pbml0KCkKKyAgICAgIEluaXRpYWxpemVzIHRoZSB2aWRlb2J1ZiBpbmZyYXN0cnVjdHVyZS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUKKyAgICAgIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIHZpZGVvYnVmIGZ1bmN0aW9uIG9uIFVTQiAoYW5kIG90aGVyIGRyaXZlcnMpCisgICAgICB0aGF0IG5lZWQgYSB2bWFsbG9jZWQgdHlwZSBvZiB2aWRlb2J1Zi4KKworLSB2aWRlb2J1Zl9pb2xvY2soKQorICBQcmVwYXJlcyB0aGUgdmlkZW9idWYgbWVtb3J5IGZvciB0aGUgcHJvcGVyIG1ldGhvZCAocmVhZCwgbW1hcCwgb3ZlcmxheSkuCisKKy0gdmlkZW9idWZfcXVldWVfaXNfYnVzeSgpCisgIENoZWNrcyBpZiBhIHZpZGVvYnVmIGlzIHN0cmVhbWluZy4KKworLSB2aWRlb2J1Zl9xdWV1ZV9jYW5jZWwoKQorICBTdG9wcyB2aWRlbyBoYW5kbGluZy4KKworLSB2aWRlb2J1Zl9tbWFwX2ZyZWUoKQorICBmcmVlcyBtbWFwIGJ1ZmZlcnMuCisKKy0gdmlkZW9idWZfc3RvcCgpCisgIFN0b3BzIHZpZGVvIGhhbmRsaW5nLCBlbmRzIG1tYXAgYW5kIGZyZWVzIG1tYXAgYW5kIG90aGVyIGJ1ZmZlcnMuCisKKy0gVjRMMiBhcGkgZnVuY3Rpb25zLiBUaG9zZSBmdW5jdGlvbnMgY29ycmVzcG9uZCB0byBWSURJT0NfZm9vIGlvY3RsczoKKyAgIHZpZGVvYnVmX3JlcWJ1ZnMoKSwgdmlkZW9idWZfcXVlcnlidWYoKSwgdmlkZW9idWZfcWJ1ZigpLAorICAgdmlkZW9idWZfZHFidWYoKSwgdmlkZW9idWZfc3RyZWFtb24oKSwgdmlkZW9idWZfc3RyZWFtb2ZmKCkuCisKKy0gVjRMMSBhcGkgZnVuY3Rpb24gKGNvcnJlc3BvbmRzIHRvIFZJRElPQ01CVUYgaW9jdGwpOgorICAgdmlkZW9idWZfY2dtYnVmKCkKKyAgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBwcm92aWRlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBWNEwxCisgICAgICBBUEkuCisKKy0gU29tZSBoZWxwIGZ1bmN0aW9ucyBmb3IgcmVhZCgpL3BvbGwoKSBvcGVyYXRpb25zOgorICAgdmlkZW9idWZfcmVhZF9zdHJlYW0oKQorICAgICAgRm9yIGNvbnRpbnVvdXMgc3RyZWFtIHJlYWQoKQorICAgdmlkZW9idWZfcmVhZF9vbmUoKQorICAgICAgRm9yIHNuYXBzaG90IHJlYWQoKQorICAgdmlkZW9idWZfcG9sbF9zdHJlYW0oKQorICAgICAgcG9sbGluZyBoZWxwIGZ1bmN0aW9uCisKK1RoZSBiZXR0ZXIgd2F5IHRvIHVuZGVyc3RhbmQgaXQgaXMgdG8gdGFrZSBhIGxvb2sgYXQgdml2aSBkcml2ZXIuIE9uZQorb2YgdGhlIG1haW4gcmVhc29ucyBmb3Igdml2aSBpcyB0byBiZSBhIHZpZGVvYnVmIHVzYWdlIGV4YW1wbGUuIHRoZQordml2aV90aHJlYWRfdGljaygpIGRvZXMgdGhlIHRhc2sgdGhhdCB0aGUgSVJRIGNhbGxiYWNrIHdvdWxkIGRvIG9uIFBDSQorZHJpdmVycyAob3IgdGhlIGlycSBjYWxsYmFjayBvbiBVU0IpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGxncmFiLmMgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bGdyYWIuYwppbmRleCBkNmU3MGJlLi4wNTc2OWNmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bGdyYWIuYworKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bGdyYWIuYwpAQCAtMTA1LDggKzEwNSw4IEBACiAgIHN0cnVjdCB2aWRlb19waWN0dXJlIHZwaWM7CiAKICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCAqc3JjOwotICBpbnQgYnBwID0gMjQsIHIsIGcsIGI7Ci0gIHVuc2lnbmVkIGludCBpLCBzcmNfZGVwdGg7CisgIGludCBicHAgPSAyNCwgciA9IDAsIGcgPSAwLCBiID0gMDsKKyAgdW5zaWduZWQgaW50IGksIHNyY19kZXB0aCA9IDE2OwogCiAgIGlmIChmZCA8IDApIHsKICAgICBwZXJyb3IoVklERU9fREVWKTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvenIzNjR4eC50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3pyMzY0eHgudHh0CmluZGV4IDVjODFlM2EuLjdmM2QxOTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvenIzNjR4eC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC96cjM2NHh4LnR4dApAQCAtNjUsMyArNjUsNCBAQAogMHgwNmQ2ICAweDAwM2IgICBUcnVzdCAgICAgICAgICAgUG93ZXJjQG0gOTcwWgogMHgwYTE3ICAweDAwNGUgICBQZW50YXggICAgICAgICAgT3B0aW8gNTAKIDB4MDQxZSAgMHg0MDVkICAgQ3JlYXRpdmUgICAgICAgIERpVmkgQ0FNIDUxNgorMHgwOGNhICAweDIxMDIgICBBaXB0ZWsgICAgICAgICAgRFYgVDMwMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi94ODYvZWFybHlwcmludGsudHh0IGIvRG9jdW1lbnRhdGlvbi94ODYvZWFybHlwcmludGsudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwN2IxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3g4Ni9lYXJseXByaW50ay50eHQKQEAgLTAsMCArMSwxMDEgQEAKKworTWluaS1IT1dUTyBmb3IgdXNpbmcgdGhlIGVhcmx5cHJpbnRrPWRiZ3AgYm9vdCBvcHRpb24gd2l0aCBhCitVU0IyIERlYnVnIHBvcnQga2V5IGFuZCBhIGRlYnVnIGNhYmxlLCBvbiB4ODYgc3lzdGVtcy4KKworWW91IG5lZWQgdHdvIGNvbXB1dGVycywgdGhlICdVU0IgZGVidWcga2V5JyBzcGVjaWFsIGdhZGdldCBhbmQKK2FuZCB0d28gVVNCIGNhYmxlcywgY29ubmVjdGVkIGxpa2UgdGhpczoKKworICBbaG9zdC90YXJnZXRdIDwtLS0tLS0tPiBbVVNCIGRlYnVnIGtleV0gPC0tLS0tLS0+IFtjbGllbnQvY29uc29sZV0KKworMS4gVGhlcmUgYXJlIHRocmVlIHNwZWNpZmljIGhhcmR3YXJlIHJlcXVpcmVtZW50czoKKworIGEuKSBIb3N0L3RhcmdldCBzeXN0ZW0gbmVlZHMgdG8gaGF2ZSBVU0IgZGVidWcgcG9ydCBjYXBhYmlsaXR5LgorCisgWW91IGNhbiBjaGVjayB0aGlzIGNhcGFiaWxpdHkgYnkgbG9va2luZyBhdCBhICdEZWJ1ZyBwb3J0JyBiaXQgaW4KKyB0aGUgbHNwY2kgLXZ2diBvdXRwdXQ6CisKKyAjIGxzcGNpIC12dnYKKyAuLi4KKyAwMDoxZC43IFVTQiBDb250cm9sbGVyOiBJbnRlbCBDb3Jwb3JhdGlvbiA4MjgwMUggKElDSDggRmFtaWx5KSBVU0IyIEVIQ0kgQ29udHJvbGxlciAjMSAocmV2IDAzKSAocHJvZy1pZiAyMCBbRUhDSV0pCisgICAgICAgICBTdWJzeXN0ZW06IExlbm92byBUaGlua1BhZCBUNjEKKyAgICAgICAgIENvbnRyb2w6IEkvTy0gTWVtKyBCdXNNYXN0ZXIrIFNwZWNDeWNsZS0gTWVtV0lOVi0gVkdBU25vb3AtIFBhckVyci0gU3RlcHBpbmctIFNFUlIrIEZhc3RCMkItIERpc0lOVHgtCisgICAgICAgICBTdGF0dXM6IENhcCsgNjZNSHotIFVERi0gRmFzdEIyQisgUGFyRXJyLSBERVZTRUw9bWVkaXVtID5UQWJvcnQtIDxUQWJvcnQtIDxNQWJvcnQtID5TRVJSLSA8UEVSUi0gSU5UeC0KKyAgICAgICAgIExhdGVuY3k6IDAKKyAgICAgICAgIEludGVycnVwdDogcGluIEQgcm91dGVkIHRvIElSUSAxOQorICAgICAgICAgUmVnaW9uIDA6IE1lbW9yeSBhdCBmZTIyNzAwMCAoMzItYml0LCBub24tcHJlZmV0Y2hhYmxlKSBbc2l6ZT0xS10KKyAgICAgICAgIENhcGFiaWxpdGllczogWzUwXSBQb3dlciBNYW5hZ2VtZW50IHZlcnNpb24gMgorICAgICAgICAgICAgICAgICBGbGFnczogUE1FQ2xrLSBEU0ktIEQxLSBEMi0gQXV4Q3VycmVudD0zNzVtQSBQTUUoRDArLEQxLSxEMi0sRDNob3QrLEQzY29sZCspCisgICAgICAgICAgICAgICAgIFN0YXR1czogRDAgUE1FLUVuYWJsZS0gRFNlbD0wIERTY2FsZT0wIFBNRSsKKyAgICAgICAgIENhcGFiaWxpdGllczogWzU4XSBEZWJ1ZyBwb3J0OiBCQVI9MSBvZmZzZXQ9MDBhMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eIDw9PT09PT09PT09PT09PT09PT09PSBbIEhFUkUgXQorCSBLZXJuZWwgZHJpdmVyIGluIHVzZTogZWhjaV9oY2QKKyAgICAgICAgIEtlcm5lbCBtb2R1bGVzOiBlaGNpLWhjZAorIC4uLgorCisoIElmIHlvdXIgc3lzdGVtIGRvZXMgbm90IGxpc3QgYSBkZWJ1ZyBwb3J0IGNhcGFiaWxpdHkgdGhlbiB5b3UgcHJvYmFibHkKKyAgd29udCBiZSBhYmxlIHRvIHVzZSB0aGUgVVNCIGRlYnVnIGtleS4gKQorCisgYi4pIFlvdSBhbHNvIG5lZWQgYSBOZXRjaGlwIFVTQiBkZWJ1ZyBjYWJsZS9rZXk6CisKKyAgICAgICAgaHR0cDovL3d3dy5wbHh0ZWNoLmNvbS9wcm9kdWN0cy9ORVQyMDAwL05FVDIwREMvZGVmYXVsdC5hc3AKKworICAgICBUaGlzIGlzIGEgc21hbGwgYmx1ZSBwbGFzdGljIGNvbm5lY3RvciB3aXRoIHR3byBVU0IgY29ubmVjdGlvbnMsCisgICAgIGl0IGRyYXdzIHBvd2VyIGZyb20gaXRzIFVTQiBjb25uZWN0aW9ucy4KKworIGMuKSBUaGlyZGx5LCB5b3UgbmVlZCBhIHNlY29uZCBjbGllbnQvY29uc29sZSBzeXN0ZW0gd2l0aCBhIHJlZ3VsYXIgVVNCIHBvcnQuCisKKzIuIFNvZnR3YXJlIHJlcXVpcmVtZW50czoKKworIGEuKSBPbiB0aGUgaG9zdC90YXJnZXQgc3lzdGVtOgorCisgICAgWW91IG5lZWQgdG8gZW5hYmxlIHRoZSBmb2xsb3dpbmcga2VybmVsIGNvbmZpZyBvcHRpb246CisKKyAgICAgIENPTkZJR19FQVJMWV9QUklOVEtfREJHUD15CisKKyAgICBBbmQgeW91IG5lZWQgdG8gYWRkIHRoZSBib290IGNvbW1hbmQgbGluZTogImVhcmx5cHJpbnRrPWRiZ3AiLgorICAgIChJZiB5b3UgYXJlIHVzaW5nIEdydWIsIGFwcGVuZCBpdCB0byB0aGUgJ2tlcm5lbCcgbGluZSBpbgorICAgICAvZXRjL2dydWIuY29uZikKKworICAgIE5PVEU6IG5vcm1hbGx5IGVhcmx5cHJpbnRrIGNvbnNvbGUgZ2V0cyB0dXJuZWQgb2ZmIG9uY2UgdGhlCisgICAgcmVndWxhciBjb25zb2xlIGlzIGFsaXZlIC0gdXNlICJlYXJseXByaW50az1kYmdwLGtlZXAiIHRvIGtlZXAKKyAgICB0aGlzIGNoYW5uZWwgb3BlbiBiZXlvbmQgZWFybHkgYm9vdHVwLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yCisgICAgZGVidWdnaW5nIGNyYXNoZXMgdW5kZXIgWG9yZywgZXRjLgorCisgYi4pIE9uIHRoZSBjbGllbnQvY29uc29sZSBzeXN0ZW06CisKKyAgICBZb3Ugc2hvdWxkIGVuYWJsZSB0aGUgZm9sbG93aW5nIGtlcm5lbCBjb25maWcgb3B0aW9uOgorCisgICAgICBDT05GSUdfVVNCX1NFUklBTF9ERUJVRz15CisKKyAgICBPbiB0aGUgbmV4dCBib290dXAgd2l0aCB0aGUgbW9kaWZpZWQga2VybmVsIHlvdSBzaG91bGQKKyAgICBnZXQgYSAvZGV2L3R0eVVTQnggZGV2aWNlKHMpLgorCisgICAgTm93IHRoaXMgY2hhbm5lbCBvZiBrZXJuZWwgbWVzc2FnZXMgaXMgcmVhZHkgdG8gYmUgdXNlZDogc3RhcnQKKyAgICB5b3VyIGZhdm9yaXRlIHRlcm1pbmFsIGVtdWxhdG9yIChtaW5pY29tLCBldGMuKSBhbmQgc2V0CisgICAgaXQgdXAgdG8gdXNlIC9kZXYvdHR5VVNCMCAtIG9yIHVzZSBhIHJhdyAnY2F0IC9kZXYvdHR5VVNCeCcgdG8KKyAgICBzZWUgdGhlIHJhdyBvdXRwdXQuCisKKyBjLikgT24gTnZpZGlhIFNvdXRoYnJpZGdlIGJhc2VkIHN5c3RlbXM6IHRoZSBrZXJuZWwgd2lsbCB0cnkgdG8gcHJvYmUKKyAgICAgYW5kIGZpbmQgb3V0IHdoaWNoIHBvcnQgaGFzIGRlYnVnIGRldmljZSBjb25uZWN0ZWQuCisKKzMuIFRlc3RpbmcgdGhhdCBpdCB3b3JrcyBmaW5lOgorCisgICBZb3UgY2FuIHRlc3QgdGhlIG91dHB1dCBieSB1c2luZyBlYXJseXByaW50az1kYmdwLGtlZXAgYW5kIHByb3Zva2luZworICAga2VybmVsIG1lc3NhZ2VzIG9uIHRoZSBob3N0L3RhcmdldCBzeXN0ZW0uIFlvdSBjYW4gcHJvdm9rZSBhIGhhcm1sZXNzCisgICBrZXJuZWwgbWVzc2FnZSBieSBmb3IgZXhhbXBsZSBkb2luZzoKKworICAgICBlY2hvIGggPiAvcHJvYy9zeXNycS10cmlnZ2VyCisKKyAgIE9uIHRoZSBob3N0L3RhcmdldCBzeXN0ZW0geW91IHNob3VsZCBzZWUgdGhpcyBoZWxwIGxpbmUgaW4gImRtZXNnIiBvdXRwdXQ6CisKKyAgICAgU3lzUnEgOiBIRUxQIDogbG9nbGV2ZWwoMC05KSByZUJvb3QgQ3Jhc2hkdW1wIHRlcm1pbmF0ZS1hbGwtdGFza3MoRSkgbWVtb3J5LWZ1bGwtb29tLWtpbGwoRikga2lsbC1hbGwtdGFza3MoSSkgc2FLIHNob3ctYmFja3RyYWNlLWFsbC1hY3RpdmUtY3B1cyhMKSBzaG93LW1lbW9yeS11c2FnZShNKSBuaWNlLWFsbC1SVC10YXNrcyhOKSBwb3dlck9mZiBzaG93LXJlZ2lzdGVycyhQKSBzaG93LWFsbC10aW1lcnMoUSkgdW5SYXcgU3luYyBzaG93LXRhc2stc3RhdGVzKFQpIFVubW91bnQgc2hvdy1ibG9ja2VkLXRhc2tzKFcpIGR1bXAtZnRyYWNlLWJ1ZmZlcihaKQorCisgICBPbiB0aGUgY2xpZW50L2NvbnNvbGUgc3lzdGVtIGRvOgorCisgICAgICAgY2F0IC9kZXYvdHR5VVNCMAorCisgICBBbmQgeW91IHNob3VsZCBzZWUgdGhlIGhlbHAgbGluZSBhYm92ZSBkaXNwbGF5ZWQgc2hvcnRseSBhZnRlciB5b3UndmUKKyAgIHByb3Zva2VkIGl0IG9uIHRoZSBob3N0IHN5c3RlbS4KKworSWYgaXQgZG9lcyBub3Qgd29yayB0aGVuIHBsZWFzZSBhc2sgYWJvdXQgaXQgb24gdGhlIGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKK21haWxpbmcgbGlzdCBvciBjb250YWN0IHRoZSB4ODYgbWFpbnRhaW5lcnMuCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDAxMjQzY2UuLmM1ZjRlOWQgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xMDYzLDcgKzEwNjMsNiBAQAogUDoJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiCiBNOgltY2hlaGFiQGluZnJhZGVhZC5vcmcKIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwotTDoJdmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tCiBXOglodHRwOi8vbGludXh0di5vcmcKIFQ6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbWNoZWhhYi9saW51eC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCkBAIC00ODM1LDcgKzQ4MzQsNiBAQAogUDoJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiCiBNOgltY2hlaGFiQGluZnJhZGVhZC5vcmcKIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwotTDoJdmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tCiBXOglodHRwOi8vbGludXh0di5vcmcKIFQ6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbWNoZWhhYi9saW51eC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCmRpZmYgLS1naXQgYS9hcmNoL0tjb25maWcgYi9hcmNoL0tjb25maWcKaW5kZXggNTUwZGFiMi4uODMwYzE2YSAxMDA2NDQKLS0tIGEvYXJjaC9LY29uZmlnCisrKyBiL2FyY2gvS2NvbmZpZwpAQCAtMTA2LDMgKzEwNiw1IEBACiAJICBUaGUgPGxpbnV4L2Nsay5oPiBjYWxscyBzdXBwb3J0IHNvZnR3YXJlIGNsb2NrIGdhdGluZyBhbmQKIAkgIHRodXMgYXJlIGEga2V5IHBvd2VyIG1hbmFnZW1lbnQgdG9vbCBvbiBtYW55IHN5c3RlbXMuCiAKK2NvbmZpZyBIQVZFX0RNQV9BUElfREVCVUcKKwlib29sCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zcm1fZW52LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zcm1fZW52LmMKaW5kZXggNzhhZDdjZC4uZDEyYWY0NyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3JtX2Vudi5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3NybV9lbnYuYwpAQCAtMjE4LDcgKzIxOCw2IEBACiAJCQkJQkFTRV9ESVIpOwogCQlnb3RvIGNsZWFudXA7CiAJfQotCWJhc2VfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJLyoKIAkgKiBDcmVhdGUgcGVyLW5hbWUgc3ViZGlyZWN0b3J5CkBAIC0yMjksNyArMjI4LDYgQEAKIAkJCQlCQVNFX0RJUiwgTkFNRURfRElSKTsKIAkJZ290byBjbGVhbnVwOwogCX0KLQluYW1lZF9kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAkvKgogCSAqIENyZWF0ZSBwZXItbnVtYmVyIHN1YmRpcmVjdG9yeQpAQCAtMjQxLDcgKzIzOSw2IEBACiAJCWdvdG8gY2xlYW51cDsKIAogCX0KLQludW1iZXJlZF9kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAkvKgogCSAqIENyZWF0ZSBhbGwgbmFtZWQgbm9kZXMKQEAgLTI1NCw3ICsyNTEsNiBAQAogCQkJZ290byBjbGVhbnVwOwogCiAJCWVudHJ5LT5wcm9jX2VudHJ5LT5kYXRhCQk9ICh2b2lkICopIGVudHJ5OwotCQllbnRyeS0+cHJvY19lbnRyeS0+b3duZXIJPSBUSElTX01PRFVMRTsKIAkJZW50cnktPnByb2NfZW50cnktPnJlYWRfcHJvYwk9IHNybV9lbnZfcmVhZDsKIAkJZW50cnktPnByb2NfZW50cnktPndyaXRlX3Byb2MJPSBzcm1fZW52X3dyaXRlOwogCkBAIC0yNzUsNyArMjcxLDYgQEAKIAogCQllbnRyeS0+aWQJCQk9IHZhcl9udW07CiAJCWVudHJ5LT5wcm9jX2VudHJ5LT5kYXRhCQk9ICh2b2lkICopIGVudHJ5OwotCQllbnRyeS0+cHJvY19lbnRyeS0+b3duZXIJPSBUSElTX01PRFVMRTsKIAkJZW50cnktPnByb2NfZW50cnktPnJlYWRfcHJvYwk9IHNybV9lbnZfcmVhZDsKIAkJZW50cnktPnByb2NfZW50cnktPndyaXRlX3Byb2MJPSBzcm1fZW52X3dyaXRlOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYwppbmRleCBmNDY2OThlLi42MTEyNzQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jCkBAIC0zODAsMTQgKzM4MCw0OSBAQAogCS5ncGlvX2Jhc2UJPSBOUl9CVUlMVElOX0dQSU8gKyAxLAogfTsKIAotc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgaWNsaW5rW10gPSB7Ci0JewotCQkuYnVzX2lkCT0gMCwgLyogTXVzdCBtYXRjaCB3aXRoIHRoZSBjYW1lcmEgSUQgYWJvdmUgKi8KLQkJLmdwaW8JPSBOUl9CVUlMVElOX0dQSU8gKyAxLAotCX0sIHsKLQkJLmJ1c19pZAk9IDAsIC8qIE11c3QgbWF0Y2ggd2l0aCB0aGUgY2FtZXJhIElEIGFib3ZlICovCi0JCS5ncGlvCT0gLUVOWElPLAorc3RhdGljIGludCBncGlvX2J1c19zd2l0Y2g7CisKK3N0YXRpYyBpbnQgcGNtOTkwX2NhbWVyYV9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmxpbmssCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJaWYgKGdwaW9fYnVzX3N3aXRjaCA8PSAwKSB7CisJCWlmIChmbGFncyA9PSBTT0NBTV9EQVRBV0lEVEhfMTApCisJCQlyZXR1cm4gMDsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCisJaWYgKGZsYWdzICYgU09DQU1fREFUQVdJRFRIXzgpCisJCWdwaW9fc2V0X3ZhbHVlKGdwaW9fYnVzX3N3aXRjaCwgMSk7CisJZWxzZQorCQlncGlvX3NldF92YWx1ZShncGlvX2J1c19zd2l0Y2gsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBjbTk5MF9jYW1lcmFfcXVlcnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmxpbmspCit7CisJaW50IHJldDsKKworCWlmICghZ3Bpb19idXNfc3dpdGNoKSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChOUl9CVUlMVElOX0dQSU8gKyAxLCAiY2FtZXJhIik7CisJCWlmICghcmV0KSB7CisJCQlncGlvX2J1c19zd2l0Y2ggPSBOUl9CVUlMVElOX0dQSU8gKyAxOworCQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW9fYnVzX3N3aXRjaCwgMCk7CisJCX0gZWxzZQorCQkJZ3Bpb19idXNfc3dpdGNoID0gLUVJTlZBTDsKKwl9CisKKwlpZiAoZ3Bpb19idXNfc3dpdGNoID4gMCkKKwkJcmV0dXJuIFNPQ0FNX0RBVEFXSURUSF84IHwgU09DQU1fREFUQVdJRFRIXzEwOworCWVsc2UKKwkJcmV0dXJuIFNPQ0FNX0RBVEFXSURUSF8xMDsKK30KKworc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgaWNsaW5rID0geworCS5idXNfaWQJPSAwLCAvKiBNdXN0IG1hdGNoIHdpdGggdGhlIGNhbWVyYSBJRCBhYm92ZSAqLworCS5xdWVyeV9idXNfcGFyYW0gPSBwY205OTBfY2FtZXJhX3F1ZXJ5X2J1c19wYXJhbSwKKwkuc2V0X2J1c19wYXJhbSA9IHBjbTk5MF9jYW1lcmFfc2V0X2J1c19wYXJhbSwKIH07CiAKIC8qIEJvYXJkIEkyQyBkZXZpY2VzLiAqLwpAQCAtMzk4LDEwICs0MzMsMTAgQEAKIAkJLnBsYXRmb3JtX2RhdGEgPSAmcGNhOTUzNl9kYXRhLAogCX0sIHsKIAkJSTJDX0JPQVJEX0lORk8oIm10OXYwMjIiLCAweDQ4KSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rWzBdLCAvKiBXaXRoIGV4dGVuZGVyICovCisJCS5wbGF0Zm9ybV9kYXRhID0gJmljbGluaywgLyogV2l0aCBleHRlbmRlciAqLwogCX0sIHsKIAkJSTJDX0JPQVJEX0lORk8oIm10OW0wMDEiLCAweDVkKSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rWzBdLCAvKiBXaXRoIGV4dGVuZGVyICovCisJCS5wbGF0Zm9ybV9kYXRhID0gJmljbGluaywgLyogV2l0aCBleHRlbmRlciAqLwogCX0sCiB9OwogI2VuZGlmIC8qIENPTkZJR19WSURFT19QWEEyN3ggfHxDT05GSUdfVklERU9fUFhBMjd4X01PRFVMRSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M19jYW1lcmEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDNfY2FtZXJhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZkN2ZmMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDNfY2FtZXJhLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIG14M19jYW1lcmEuaCAtIGkuTVgzeCBjYW1lcmEgZHJpdmVyIGhlYWRlciBmaWxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCBHdWVubmFkaSBMaWFraG92ZXRza2ksIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxsZ0BkZW54LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX01YM19DQU1FUkFfSF8KKyNkZWZpbmUgX01YM19DQU1FUkFfSF8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjZGVmaW5lIE1YM19DQU1FUkFfQ0xLX1NSQwkxCisjZGVmaW5lIE1YM19DQU1FUkFfRVhUX1ZTWU5DCTIKKyNkZWZpbmUgTVgzX0NBTUVSQV9EUAkJNAorI2RlZmluZSBNWDNfQ0FNRVJBX1BDUAkJOAorI2RlZmluZSBNWDNfQ0FNRVJBX0hTUAkJMHgxMAorI2RlZmluZSBNWDNfQ0FNRVJBX1ZTUAkJMHgyMAorI2RlZmluZSBNWDNfQ0FNRVJBX0RBVEFXSURUSF80CTB4NDAKKyNkZWZpbmUgTVgzX0NBTUVSQV9EQVRBV0lEVEhfOAkweDgwCisjZGVmaW5lIE1YM19DQU1FUkFfREFUQVdJRFRIXzEwCTB4MTAwCisjZGVmaW5lIE1YM19DQU1FUkFfREFUQVdJRFRIXzE1CTB4MjAwCisKKyNkZWZpbmUgTVgzX0NBTUVSQV9EQVRBV0lEVEhfTUFTSyAoTVgzX0NBTUVSQV9EQVRBV0lEVEhfNCB8IE1YM19DQU1FUkFfREFUQVdJRFRIXzggfCBcCisJCQkJICAgTVgzX0NBTUVSQV9EQVRBV0lEVEhfMTAgfCBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xNSkKKworLyoqCisgKiBzdHJ1Y3QgbXgzX2NhbWVyYV9wZGF0YSAtIGkuTVgzeCBjYW1lcmEgcGxhdGZvcm0gZGF0YQorICogQGZsYWdzOglNWDNfQ0FNRVJBXyogZmxhZ3MKKyAqIEBtY2xrXzEwa2h6OgltYXN0ZXIgY2xvY2sgZnJlcXVlbmN5IGluIDEwa0h6IHVuaXRzCisgKiBAZG1hX2RldjoJSVBVIERNQSBkZXZpY2UgdG8gbWF0Y2ggYWdhaW5zdCBpbiBjaGFubmVsIGFsbG9jYXRpb24KKyAqLworc3RydWN0IG14M19jYW1lcmFfcGRhdGEgeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBtY2xrXzEwa2h6OworCXN0cnVjdCBkZXZpY2UgKmRtYV9kZXY7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jIGIvYXJjaC9ibGFja2Zpbi9tbS9zcmFtLWFsbG9jLmMKaW5kZXggODM0Y2FiNy4uNTMwZDEzOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tbS9zcmFtLWFsbG9jLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tbS9zcmFtLWFsbG9jLmMKQEAgLTg1NCw3ICs4NTQsNiBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1bmFibGUgdG8gY3JlYXRlIC9wcm9jL3NyYW1cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQotCXB0ci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlwdHItPnJlYWRfcHJvYyA9IHNyYW1fcHJvY19yZWFkOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3RpbWUuYwppbmRleCBjNjg1YmE0Li4yYjczYzdhIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3RpbWUuYwpAQCAtMjYxLDcgKzI2MSw2IEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEyICA9IHsKIAkuaGFuZGxlciA9IHRpbWVyX2ludGVycnVwdCwKIAkuZmxhZ3MgPSBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsCi0JLm1hc2sgPSBDUFVfTUFTS19OT05FLAogCS5uYW1lID0gInRpbWVyIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NtcC5jCmluZGV4IDlkYWMxNzMuLmY1OWE5NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYwpAQCAtNjUsNyArNjUsNiBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX2lwaSAgPSB7CiAJLmhhbmRsZXIgPSBjcmlzdjMyX2lwaV9pbnRlcnJ1cHQsCiAJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCwKLQkubWFzayA9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUgPSAiaXBpIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvdGltZS5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90aW1lLmMKaW5kZXggM2ExM2RkNi4uNjU2MzNkMCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90aW1lLmMKQEAgLTI2Nyw3ICsyNjcsNiBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX3RpbWVyID0gewogCS5oYW5kbGVyID0gdGltZXJfaW50ZXJydXB0LAogCS5mbGFncyA9IElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwKLQkubWFzayA9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUgPSAidGltZXIiCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvaXJxLW1iOTMwOTEuYyBiL2FyY2gvZnJ2L2tlcm5lbC9pcnEtbWI5MzA5MS5jCmluZGV4IDllMzhmOTkuLjRkZDlhZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9pcnEtbWI5MzA5MS5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9pcnEtbWI5MzA5MS5jCkBAIC0xMDksMjggKzEwOSwyNCBAQAogCVswXSA9IHsKIAkJLmhhbmRsZXIJPSBmcGdhX2ludGVycnVwdCwKIAkJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKLQkJLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIAkJLm5hbWUJCT0gImZwZ2EuMCIsCiAJCS5kZXZfaWQJCT0gKHZvaWQgKikgMHgwMDI4VUwsCiAJfSwKIAlbMV0gPSB7CiAJCS5oYW5kbGVyCT0gZnBnYV9pbnRlcnJ1cHQsCiAJCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCi0JCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiAJCS5uYW1lCQk9ICJmcGdhLjEiLAogCQkuZGV2X2lkCQk9ICh2b2lkICopIDB4MDA1MFVMLAogCX0sCiAJWzJdID0gewogCQkuaGFuZGxlcgk9IGZwZ2FfaW50ZXJydXB0LAogCQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELAotCQkubWFzawkJPSBDUFVfTUFTS19OT05FLAogCQkubmFtZQkJPSAiZnBnYS4yIiwKIAkJLmRldl9pZAkJPSAodm9pZCAqKSAweDFjMDBVTCwKIAl9LAogCVszXSA9IHsKIAkJLmhhbmRsZXIJPSBmcGdhX2ludGVycnVwdCwKIAkJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKLQkJLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIAkJLm5hbWUJCT0gImZwZ2EuMyIsCiAJCS5kZXZfaWQJCT0gKHZvaWQgKikgMHg2Mzg2VUwsCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2lycS1tYjkzMDkzLmMgYi9hcmNoL2Zydi9rZXJuZWwvaXJxLW1iOTMwOTMuYwppbmRleCAzYzI3NTJjLi5lNDUyMDkwIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvaXJxLW1iOTMwOTMuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvaXJxLW1iOTMwOTMuYwpAQCAtMTA4LDcgKzEwOCw2IEBACiAJWzBdID0gewogCQkuaGFuZGxlcgk9IGZwZ2FfaW50ZXJydXB0LAogCQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCwKLQkJLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIAkJLm5hbWUJCT0gImZwZ2EuMCIsCiAJCS5kZXZfaWQJCT0gKHZvaWQgKikgMHgwNzAwVUwsCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2lycS1tYjkzNDkzLmMgYi9hcmNoL2Zydi9rZXJuZWwvaXJxLW1iOTM0OTMuYwppbmRleCA3NzU0YzczLi5iYTU1ZWNkIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvaXJxLW1iOTM0OTMuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvaXJxLW1iOTM0OTMuYwpAQCAtMTIwLDE0ICsxMjAsMTIgQEAKIAlbMF0gPSB7CiAJCS5oYW5kbGVyCT0gbWI5MzQ5M19pbnRlcnJ1cHQsCiAJCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCi0JCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiAJCS5uYW1lCQk9ICJtYjkzNDkzLjAiLAogCQkuZGV2X2lkCQk9ICh2b2lkICopIF9fYWRkcl9NQjkzNDkzX0lRU1IoMCksCiAJfSwKIAlbMV0gPSB7CiAJCS5oYW5kbGVyCT0gbWI5MzQ5M19pbnRlcnJ1cHQsCiAJCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCi0JCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiAJCS5uYW1lCQk9ICJtYjkzNDkzLjEiLAogCQkuZGV2X2lkCQk9ICh2b2lkICopIF9fYWRkcl9NQjkzNDkzX0lRU1IoMSksCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3RpbWUuYyBiL2FyY2gvZnJ2L2tlcm5lbC90aW1lLmMKaW5kZXggNjlmNmE0ZS4uZmIwY2U3NSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvdGltZS5jCkBAIC00NSw3ICs0NSw2IEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0aW1lcl9pcnEgID0gewogCS5oYW5kbGVyID0gdGltZXJfaW50ZXJydXB0LAogCS5mbGFncyA9IElSUUZfRElTQUJMRUQsCi0JLm1hc2sgPSBDUFVfTUFTS19OT05FLAogCS5uYW1lID0gInRpbWVyIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL2l0dS5jIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvaXR1LmMKaW5kZXggZDFjOTI2NS4uNDg4M2JhNyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvaXR1LmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvaXR1LmMKQEAgLTYwLDcgKzYwLDYgQEAKIAkubmFtZQkJPSAiaXR1IiwKIAkuaGFuZGxlcgk9IHRpbWVyX2ludGVycnVwdCwKIAkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCi0JLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIH07CiAKIHN0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBkaXZpZGVfcmF0ZVtdID0gezEsIDIsIDQsIDh9OwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdGltZXIxNi5jIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdGltZXIxNi5jCmluZGV4IGUxNDI3MWIuLjA0MmRiYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RpbWVyMTYuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90aW1lcjE2LmMKQEAgLTU1LDcgKzU1LDYgQEAKIAkubmFtZQkJPSAidGltZXItMTYiLAogCS5oYW5kbGVyCT0gdGltZXJfaW50ZXJydXB0LAogCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKLQkubWFzawkJPSBDUFVfTUFTS19OT05FLAogfTsKIAogc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhIGRpdmlkZV9yYXRlW10gPSB7MSwgMiwgNCwgOH07CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90aW1lcjguYyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RpbWVyOC5jCmluZGV4IDA1NTZkN2MuLjM4YmUwY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RpbWVyOC5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RpbWVyOC5jCkBAIC03NSw3ICs3NSw2IEBACiAJLm5hbWUJCT0gInRpbWVyLTgiLAogCS5oYW5kbGVyCT0gdGltZXJfaW50ZXJydXB0LAogCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKLQkubWFzawkJPSBDUFVfTUFTS19OT05FLAogfTsKIAogc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhIGRpdmlkZV9yYXRlW10gPSB7OCwgNjQsIDgxOTJ9OwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdHB1LmMgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90cHUuYwppbmRleCBkZjdmNDUzLi5hZDM4M2NhIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90cHUuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90cHUuYwpAQCAtNjUsNyArNjUsNiBAQAogCS5uYW1lCQk9ICJ0cHUiLAogCS5oYW5kbGVyCT0gdGltZXJfaW50ZXJydXB0LAogCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKLQkubWFzawkJPSBDUFVfTUFTS19OT05FLAogfTsKIAogY29uc3Qgc3RhdGljIGludCBfX2luaXRkYXRhIGRpdmlkZV9yYXRlW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvZGlnL01ha2VmaWxlIGIvYXJjaC9pYTY0L2RpZy9NYWtlZmlsZQppbmRleCA1YzAyODM4Li4yZjdjYWRkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvZGlnL01ha2VmaWxlCisrKyBiL2FyY2gvaWE2NC9kaWcvTWFrZWZpbGUKQEAgLTcsOCArNyw4IEBACiAKIG9iai15IDo9IHNldHVwLm8KIGlmZXEgKCQoQ09ORklHX0RNQVIpLCB5KQotb2JqLSQoQ09ORklHX0lBNjRfR0VORVJJQykgKz0gbWFjaHZlYy5vIG1hY2h2ZWNfdnRkLm8gZGlnX3Z0ZF9pb21tdS5vCitvYmotJChDT05GSUdfSUE2NF9HRU5FUklDKSArPSBtYWNodmVjLm8gbWFjaHZlY192dGQubwogZWxzZQogb2JqLSQoQ09ORklHX0lBNjRfR0VORVJJQykgKz0gbWFjaHZlYy5vCiBlbmRpZgotb2JqLSQoQ09ORklHX0lBNjRfRElHX1ZURCkgKz0gZGlnX3Z0ZF9pb21tdS5vCisKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9kaWcvZGlnX3Z0ZF9pb21tdS5jIGIvYXJjaC9pYTY0L2RpZy9kaWdfdnRkX2lvbW11LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjOGEwNzkuLjAwMDAwMDAKLS0tIGEvYXJjaC9pYTY0L2RpZy9kaWdfdnRkX2lvbW11LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlbC1pb21tdS5oPgotCi12b2lkICoKLXZ0ZF9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLAotCQkgZ2ZwX3QgZmxhZ3MpCi17Ci0JcmV0dXJuIGludGVsX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodnRkX2FsbG9jX2NvaGVyZW50KTsKLQotdm9pZAotdnRkX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsCi0JCSBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCi17Ci0JaW50ZWxfZnJlZV9jb2hlcmVudChkZXYsIHNpemUsIHZhZGRyLCBkbWFfaGFuZGxlKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHZ0ZF9mcmVlX2NvaGVyZW50KTsKLQotZG1hX2FkZHJfdAotdnRkX21hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwKLQkJICAgICBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKLXsKLQlyZXR1cm4gaW50ZWxfbWFwX3NpbmdsZShkZXYsIChwaHlzX2FkZHJfdClhZGRyLCBzaXplLCBkaXIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodnRkX21hcF9zaW5nbGVfYXR0cnMpOwotCi12b2lkCi12dGRfdW5tYXBfc2luZ2xlX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBpb3ZhLCBzaXplX3Qgc2l6ZSwKLQkJICAgICAgIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQotewotCWludGVsX3VubWFwX3NpbmdsZShkZXYsIGlvdmEsIHNpemUsIGRpcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh2dGRfdW5tYXBfc2luZ2xlX2F0dHJzKTsKLQotaW50Ci12dGRfbWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZW50cywKLQkJIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQotewotCXJldHVybiBpbnRlbF9tYXBfc2coZGV2LCBzZ2xpc3QsIG5lbnRzLCBkaXIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodnRkX21hcF9zZ19hdHRycyk7Ci0KLXZvaWQKLXZ0ZF91bm1hcF9zZ19hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAotCQkgICBpbnQgbmVudHMsIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQotewotCWludGVsX3VubWFwX3NnKGRldiwgc2dsaXN0LCBuZW50cywgZGlyKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHZ0ZF91bm1hcF9zZ19hdHRycyk7Ci0KLWludAotdnRkX2RtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcikKLXsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHZ0ZF9kbWFfbWFwcGluZ19lcnJvcik7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvY29tbW9uL2h3c3dfaW9tbXUuYyBiL2FyY2gvaWE2NC9ocC9jb21tb24vaHdzd19pb21tdS5jCmluZGV4IDI3NjlkYmYuLmU0YTgwZDggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9jb21tb24vaHdzd19pb21tdS5jCisrKyBiL2FyY2gvaWE2NC9ocC9jb21tb24vaHdzd19pb21tdS5jCkBAIC0xMyw0OSArMTMsMzQgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zd2lvdGxiLmg+Ci0KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogCitleHRlcm4gc3RydWN0IGRtYV9tYXBfb3BzIHNiYV9kbWFfb3BzLCBzd2lvdGxiX2RtYV9vcHM7CisKIC8qIHN3aW90bGIgZGVjbGFyYXRpb25zICYgZGVmaW5pdGlvbnM6ICovCiBleHRlcm4gaW50IHN3aW90bGJfbGF0ZV9pbml0X3dpdGhfZGVmYXVsdF9zaXplIChzaXplX3Qgc2l6ZSk7CiAKLS8qIGh3aW9tbXUgZGVjbGFyYXRpb25zICYgZGVmaW5pdGlvbnM6ICovCi0KLWV4dGVybiBpYTY0X212X2RtYV9hbGxvY19jb2hlcmVudAlzYmFfYWxsb2NfY29oZXJlbnQ7Ci1leHRlcm4gaWE2NF9tdl9kbWFfZnJlZV9jb2hlcmVudAlzYmFfZnJlZV9jb2hlcmVudDsKLWV4dGVybiBpYTY0X212X2RtYV9tYXBfc2luZ2xlX2F0dHJzCXNiYV9tYXBfc2luZ2xlX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3VubWFwX3NpbmdsZV9hdHRycwlzYmFfdW5tYXBfc2luZ2xlX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zZ19hdHRycwkJc2JhX21hcF9zZ19hdHRyczsKLWV4dGVybiBpYTY0X212X2RtYV91bm1hcF9zZ19hdHRycwlzYmFfdW5tYXBfc2dfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfc3VwcG9ydGVkCQlzYmFfZG1hX3N1cHBvcnRlZDsKLWV4dGVybiBpYTY0X212X2RtYV9tYXBwaW5nX2Vycm9yCXNiYV9kbWFfbWFwcGluZ19lcnJvcjsKLQotI2RlZmluZSBod2lvbW11X2FsbG9jX2NvaGVyZW50CQlzYmFfYWxsb2NfY29oZXJlbnQKLSNkZWZpbmUgaHdpb21tdV9mcmVlX2NvaGVyZW50CQlzYmFfZnJlZV9jb2hlcmVudAotI2RlZmluZSBod2lvbW11X21hcF9zaW5nbGVfYXR0cnMJc2JhX21hcF9zaW5nbGVfYXR0cnMKLSNkZWZpbmUgaHdpb21tdV91bm1hcF9zaW5nbGVfYXR0cnMJc2JhX3VubWFwX3NpbmdsZV9hdHRycwotI2RlZmluZSBod2lvbW11X21hcF9zZ19hdHRycwkJc2JhX21hcF9zZ19hdHRycwotI2RlZmluZSBod2lvbW11X3VubWFwX3NnX2F0dHJzCQlzYmFfdW5tYXBfc2dfYXR0cnMKLSNkZWZpbmUgaHdpb21tdV9kbWFfc3VwcG9ydGVkCQlzYmFfZG1hX3N1cHBvcnRlZAotI2RlZmluZSBod2lvbW11X2RtYV9tYXBwaW5nX2Vycm9yCXNiYV9kbWFfbWFwcGluZ19lcnJvcgotI2RlZmluZSBod2lvbW11X3N5bmNfc2luZ2xlX2Zvcl9jcHUJbWFjaHZlY19kbWFfc3luY19zaW5nbGUKLSNkZWZpbmUgaHdpb21tdV9zeW5jX3NnX2Zvcl9jcHUJCW1hY2h2ZWNfZG1hX3N5bmNfc2cKLSNkZWZpbmUgaHdpb21tdV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlCW1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlCi0jZGVmaW5lIGh3aW9tbXVfc3luY19zZ19mb3JfZGV2aWNlCW1hY2h2ZWNfZG1hX3N5bmNfc2cKLQotCiAvKgogICogTm90ZTogd2UgbmVlZCB0byBtYWtlIHRoZSBkZXRlcm1pbmF0aW9uIG9mIHdoZXRoZXIgb3Igbm90IHRvIHVzZQogICogdGhlIHN3IEkvTyBUTEIgYmFzZWQgcHVyZWx5IG9uIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAgQW55dGhpbmcgZWxzZQogICogd291bGQgYmUgdW5yZWxpYWJsZSBvciB3b3VsZCBiZSB0b28gaW50cnVzaXZlLgogICovCi1zdGF0aWMgaW5saW5lIGludAotdXNlX3N3aW90bGIgKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbmxpbmUgaW50IHVzZV9zd2lvdGxiKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gZGV2ICYmIGRldi0+ZG1hX21hc2sgJiYgIWh3aW9tbXVfZG1hX3N1cHBvcnRlZChkZXYsICpkZXYtPmRtYV9tYXNrKTsKKwlyZXR1cm4gZGV2ICYmIGRldi0+ZG1hX21hc2sgJiYKKwkJIXNiYV9kbWFfb3BzLmRtYV9zdXBwb3J0ZWQoZGV2LCAqZGV2LT5kbWFfbWFzayk7CiB9CiAKK3N0cnVjdCBkbWFfbWFwX29wcyAqaHdzd19kbWFfZ2V0X29wcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYgKHVzZV9zd2lvdGxiKGRldikpCisJCXJldHVybiAmc3dpb3RsYl9kbWFfb3BzOworCXJldHVybiAmc2JhX2RtYV9vcHM7Cit9CitFWFBPUlRfU1lNQk9MKGh3c3dfZG1hX2dldF9vcHMpOworCiB2b2lkIF9faW5pdAogaHdzd19pbml0ICh2b2lkKQogewpAQCAtNzEsMTI1ICs1NiwzIEBACiAjZW5kaWYKIAl9CiB9Ci0KLXZvaWQgKgotaHdzd19hbGxvY19jb2hlcmVudCAoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZ3MpCi17Ci0JaWYgKHVzZV9zd2lvdGxiKGRldikpCi0JCXJldHVybiBzd2lvdGxiX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZmxhZ3MpOwotCWVsc2UKLQkJcmV0dXJuIGh3aW9tbXVfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBmbGFncyk7Ci19Ci0KLXZvaWQKLWh3c3dfZnJlZV9jb2hlcmVudCAoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKLXsKLQlpZiAodXNlX3N3aW90bGIoZGV2KSkKLQkJc3dpb3RsYl9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOwotCWVsc2UKLQkJaHdpb21tdV9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOwotfQotCi1kbWFfYWRkcl90Ci1od3N3X21hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwgaW50IGRpciwKLQkJICAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQotewotCWlmICh1c2Vfc3dpb3RsYihkZXYpKQotCQlyZXR1cm4gc3dpb3RsYl9tYXBfc2luZ2xlX2F0dHJzKGRldiwgYWRkciwgc2l6ZSwgZGlyLCBhdHRycyk7Ci0JZWxzZQotCQlyZXR1cm4gaHdpb21tdV9tYXBfc2luZ2xlX2F0dHJzKGRldiwgYWRkciwgc2l6ZSwgZGlyLCBhdHRycyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGh3c3dfbWFwX3NpbmdsZV9hdHRycyk7Ci0KLXZvaWQKLWh3c3dfdW5tYXBfc2luZ2xlX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBpb3ZhLCBzaXplX3Qgc2l6ZSwKLQkJCSBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKLXsKLQlpZiAodXNlX3N3aW90bGIoZGV2KSkKLQkJcmV0dXJuIHN3aW90bGJfdW5tYXBfc2luZ2xlX2F0dHJzKGRldiwgaW92YSwgc2l6ZSwgZGlyLCBhdHRycyk7Ci0JZWxzZQotCQlyZXR1cm4gaHdpb21tdV91bm1hcF9zaW5nbGVfYXR0cnMoZGV2LCBpb3ZhLCBzaXplLCBkaXIsIGF0dHJzKTsKLX0KLUVYUE9SVF9TWU1CT0woaHdzd191bm1hcF9zaW5nbGVfYXR0cnMpOwotCi1pbnQKLWh3c3dfbWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZW50cywKLQkJICAgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCi17Ci0JaWYgKHVzZV9zd2lvdGxiKGRldikpCi0JCXJldHVybiBzd2lvdGxiX21hcF9zZ19hdHRycyhkZXYsIHNnbGlzdCwgbmVudHMsIGRpciwgYXR0cnMpOwotCWVsc2UKLQkJcmV0dXJuIGh3aW9tbXVfbWFwX3NnX2F0dHJzKGRldiwgc2dsaXN0LCBuZW50cywgZGlyLCBhdHRycyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGh3c3dfbWFwX3NnX2F0dHJzKTsKLQotdm9pZAotaHdzd191bm1hcF9zZ19hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVudHMsCi0JCSAgICAgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCi17Ci0JaWYgKHVzZV9zd2lvdGxiKGRldikpCi0JCXJldHVybiBzd2lvdGxiX3VubWFwX3NnX2F0dHJzKGRldiwgc2dsaXN0LCBuZW50cywgZGlyLCBhdHRycyk7Ci0JZWxzZQotCQlyZXR1cm4gaHdpb21tdV91bm1hcF9zZ19hdHRycyhkZXYsIHNnbGlzdCwgbmVudHMsIGRpciwgYXR0cnMpOwotfQotRVhQT1JUX1NZTUJPTChod3N3X3VubWFwX3NnX2F0dHJzKTsKLQotdm9pZAotaHdzd19zeW5jX3NpbmdsZV9mb3JfY3B1IChzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwgc2l6ZV90IHNpemUsIGludCBkaXIpCi17Ci0JaWYgKHVzZV9zd2lvdGxiKGRldikpCi0JCXN3aW90bGJfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsIGFkZHIsIHNpemUsIGRpcik7Ci0JZWxzZQotCQlod2lvbW11X3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBhZGRyLCBzaXplLCBkaXIpOwotfQotCi12b2lkCi1od3N3X3N5bmNfc2dfZm9yX2NwdSAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLCBpbnQgZGlyKQotewotCWlmICh1c2Vfc3dpb3RsYihkZXYpKQotCQlzd2lvdGxiX3N5bmNfc2dfZm9yX2NwdShkZXYsIHNnLCBuZWxlbXMsIGRpcik7Ci0JZWxzZQotCQlod2lvbW11X3N5bmNfc2dfZm9yX2NwdShkZXYsIHNnLCBuZWxlbXMsIGRpcik7Ci19Ci0KLXZvaWQKLWh3c3dfc3luY19zaW5nbGVfZm9yX2RldmljZSAoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsIHNpemVfdCBzaXplLCBpbnQgZGlyKQotewotCWlmICh1c2Vfc3dpb3RsYihkZXYpKQotCQlzd2lvdGxiX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBhZGRyLCBzaXplLCBkaXIpOwotCWVsc2UKLQkJaHdpb21tdV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgYWRkciwgc2l6ZSwgZGlyKTsKLX0KLQotdm9pZAotaHdzd19zeW5jX3NnX2Zvcl9kZXZpY2UgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywgaW50IGRpcikKLXsKLQlpZiAodXNlX3N3aW90bGIoZGV2KSkKLQkJc3dpb3RsYl9zeW5jX3NnX2Zvcl9kZXZpY2UoZGV2LCBzZywgbmVsZW1zLCBkaXIpOwotCWVsc2UKLQkJaHdpb21tdV9zeW5jX3NnX2Zvcl9kZXZpY2UoZGV2LCBzZywgbmVsZW1zLCBkaXIpOwotfQotCi1pbnQKLWh3c3dfZG1hX3N1cHBvcnRlZCAoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKLXsKLQlpZiAoaHdpb21tdV9kbWFfc3VwcG9ydGVkKGRldiwgbWFzaykpCi0JCXJldHVybiAxOwotCXJldHVybiBzd2lvdGxiX2RtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKTsKLX0KLQotaW50Ci1od3N3X2RtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcikKLXsKLQlyZXR1cm4gaHdpb21tdV9kbWFfbWFwcGluZ19lcnJvcihkZXYsIGRtYV9hZGRyKSB8fAotCQlzd2lvdGxiX2RtYV9tYXBwaW5nX2Vycm9yKGRldiwgZG1hX2FkZHIpOwotfQotCi1FWFBPUlRfU1lNQk9MKGh3c3dfZG1hX21hcHBpbmdfZXJyb3IpOwotRVhQT1JUX1NZTUJPTChod3N3X2RtYV9zdXBwb3J0ZWQpOwotRVhQT1JUX1NZTUJPTChod3N3X2FsbG9jX2NvaGVyZW50KTsKLUVYUE9SVF9TWU1CT0woaHdzd19mcmVlX2NvaGVyZW50KTsKLUVYUE9SVF9TWU1CT0woaHdzd19zeW5jX3NpbmdsZV9mb3JfY3B1KTsKLUVYUE9SVF9TWU1CT0woaHdzd19zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKTsKLUVYUE9SVF9TWU1CT0woaHdzd19zeW5jX3NnX2Zvcl9jcHUpOwotRVhQT1JUX1NZTUJPTChod3N3X3N5bmNfc2dfZm9yX2RldmljZSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYwppbmRleCA2ZDVlNmM1Li41NmNlYjY4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCisrKyBiL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4gICAgICAgICAvKiBod2VpZ2h0NjQoKSAqLwogI2luY2x1ZGUgPGxpbnV4L2NyYXNoX2R1bXAuaD4KICNpbmNsdWRlIDxsaW51eC9pb21tdS1oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CQkvKiBpYTY0X2dldF9pdGMoKSAqLwogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtOTA4LDExICs5MDksMTMgQEAKICAqCiAgKiBTZWUgRG9jdW1lbnRhdGlvbi9QQ0kvUENJLURNQS1tYXBwaW5nLnR4dAogICovCi1kbWFfYWRkcl90Ci1zYmFfbWFwX3NpbmdsZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCBpbnQgZGlyLAotCQkgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQorc3RhdGljIGRtYV9hZGRyX3Qgc2JhX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBwb2ZmLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IGlvYyAqaW9jOworCXZvaWQgKmFkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSkgKyBwb2ZmOwogCWRtYV9hZGRyX3QgaW92cDsKIAlkbWFfYWRkcl90IG9mZnNldDsKIAl1NjQgKnBkaXJfc3RhcnQ7CkBAIC05OTAsNyArOTkzLDE0IEBACiAjZW5kaWYKIAlyZXR1cm4gU0JBX0lPVkEoaW9jLCBpb3ZwLCBvZmZzZXQpOwogfQotRVhQT1JUX1NZTUJPTChzYmFfbWFwX3NpbmdsZV9hdHRycyk7CisKK3N0YXRpYyBkbWFfYWRkcl90IHNiYV9tYXBfc2luZ2xlX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYWRkciwKKwkJCQkgICAgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCQkgICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJcmV0dXJuIHNiYV9tYXBfcGFnZShkZXYsIHZpcnRfdG9fcGFnZShhZGRyKSwKKwkJCSAgICAodW5zaWduZWQgbG9uZylhZGRyICYgflBBR0VfTUFTSywgc2l6ZSwgZGlyLCBhdHRycyk7Cit9CiAKICNpZmRlZiBFTkFCTEVfTUFSS19DTEVBTgogc3RhdGljIFNCQV9JTkxJTkUgdm9pZApAQCAtMTAyNiw4ICsxMDM2LDggQEAKICAqCiAgKiBTZWUgRG9jdW1lbnRhdGlvbi9QQ0kvUENJLURNQS1tYXBwaW5nLnR4dAogICovCi12b2lkIHNiYV91bm1hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGlvdmEsIHNpemVfdCBzaXplLAotCQkJICAgIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQorc3RhdGljIHZvaWQgc2JhX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGlvdmEsIHNpemVfdCBzaXplLAorCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAlzdHJ1Y3QgaW9jICppb2M7CiAjaWYgREVMQVlFRF9SRVNPVVJDRV9DTlQgPiAwCkBAIC0xMDk0LDcgKzExMDQsMTIgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnJlc19sb2NrLCBmbGFncyk7CiAjZW5kaWYgLyogREVMQVlFRF9SRVNPVVJDRV9DTlQgPT0gMCAqLwogfQotRVhQT1JUX1NZTUJPTChzYmFfdW5tYXBfc2luZ2xlX2F0dHJzKTsKKwordm9pZCBzYmFfdW5tYXBfc2luZ2xlX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBpb3ZhLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQoreworCXNiYV91bm1hcF9wYWdlKGRldiwgaW92YSwgc2l6ZSwgZGlyLCBhdHRycyk7Cit9CiAKIC8qKgogICogc2JhX2FsbG9jX2NvaGVyZW50IC0gYWxsb2NhdGUvbWFwIHNoYXJlZCBtZW0gZm9yIERNQQpAQCAtMTEwNCw3ICsxMTE5LDcgQEAKICAqCiAgKiBTZWUgRG9jdW1lbnRhdGlvbi9QQ0kvUENJLURNQS1tYXBwaW5nLnR4dAogICovCi12b2lkICoKK3N0YXRpYyB2b2lkICoKIHNiYV9hbGxvY19jb2hlcmVudCAoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZ3MpCiB7CiAJc3RydWN0IGlvYyAqaW9jOwpAQCAtMTE2Nyw3ICsxMTgyLDggQEAKICAqCiAgKiBTZWUgRG9jdW1lbnRhdGlvbi9QQ0kvUENJLURNQS1tYXBwaW5nLnR4dAogICovCi12b2lkIHNiYV9mcmVlX2NvaGVyZW50IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQorc3RhdGljIHZvaWQgc2JhX2ZyZWVfY29oZXJlbnQgKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyLAorCQkJICAgICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKIHsKIAlzYmFfdW5tYXBfc2luZ2xlX2F0dHJzKGRldiwgZG1hX2hhbmRsZSwgc2l6ZSwgMCwgTlVMTCk7CiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgdmFkZHIsIGdldF9vcmRlcihzaXplKSk7CkBAIC0xNDIyLDggKzE0MzgsOSBAQAogICoKICAqIFNlZSBEb2N1bWVudGF0aW9uL1BDSS9QQ0ktRE1BLW1hcHBpbmcudHh0CiAgKi8KLWludCBzYmFfbWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZW50cywKLQkJICAgICBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3N0YXRpYyBpbnQgc2JhX21hcF9zZ19hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorCQkJICAgIGludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXN0cnVjdCBpb2MgKmlvYzsKIAlpbnQgY29hbGVzY2VkLCBmaWxsZWQgPSAwOwpAQCAtMTUwMiw3ICsxNTE5LDYgQEAKIAogCXJldHVybiBmaWxsZWQ7CiB9Ci1FWFBPUlRfU1lNQk9MKHNiYV9tYXBfc2dfYXR0cnMpOwogCiAvKioKICAqIHNiYV91bm1hcF9zZ19hdHRycyAtIHVubWFwIFNjYXR0ZXIvR2F0aGVyIGxpc3QKQEAgLTE1MTQsOCArMTUzMCw5IEBACiAgKgogICogU2VlIERvY3VtZW50YXRpb24vUENJL1BDSS1ETUEtbWFwcGluZy50eHQKICAqLwotdm9pZCBzYmFfdW5tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKLQkJCWludCBuZW50cywgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCitzdGF0aWMgdm9pZCBzYmFfdW5tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKKwkJCSAgICAgICBpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKICNpZmRlZiBBU1NFUlRfUERJUl9TQU5JVFkKIAlzdHJ1Y3QgaW9jICppb2M7CkBAIC0xNTUxLDcgKzE1NjgsNiBAQAogI2VuZGlmCiAKIH0KLUVYUE9SVF9TWU1CT0woc2JhX3VubWFwX3NnX2F0dHJzKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCkBAIC0yMDY0LDYgKzIwODAsOCBAQAogCX0sCiB9OwogCitleHRlcm4gc3RydWN0IGRtYV9tYXBfb3BzIHN3aW90bGJfZG1hX29wczsKKwogc3RhdGljIGludCBfX2luaXQKIHNiYV9pbml0KHZvaWQpCiB7CkBAIC0yMDc3LDYgKzIwOTUsNyBAQAogCSAqIGEgc3VjY2Vzc2Z1bCBrZHVtcCBrZXJuZWwgYm9vdCBpcyB0byB1c2UgdGhlIHN3aW90bGIuCiAJICovCiAJaWYgKGlzX2tkdW1wX2tlcm5lbCgpKSB7CisJCWRtYV9vcHMgPSAmc3dpb3RsYl9kbWFfb3BzOwogCQlpZiAoc3dpb3RsYl9sYXRlX2luaXRfd2l0aF9kZWZhdWx0X3NpemUoNjQgKiAoMTw8MjApKSAhPSAwKQogCQkJcGFuaWMoIlVuYWJsZSB0byBpbml0aWFsaXplIHNvZnR3YXJlIEkvTyBUTEI6IgogCQkJCSAgIiBUcnkgbWFjaHZlYz1kaWcgYm9vdCBvcHRpb24iKTsKQEAgLTIwOTIsNiArMjExMSw3IEBACiAJCSAqIElmIHdlIGRpZG4ndCBmaW5kIHNvbWV0aGluZyBzYmFfaW9tbXUgY2FuIGNsYWltLCB3ZQogCQkgKiBuZWVkIHRvIHNldHVwIHRoZSBzd2lvdGxiIGFuZCBzd2l0Y2ggdG8gdGhlIGRpZyBtYWNodmVjLgogCQkgKi8KKwkJZG1hX29wcyA9ICZzd2lvdGxiX2RtYV9vcHM7CiAJCWlmIChzd2lvdGxiX2xhdGVfaW5pdF93aXRoX2RlZmF1bHRfc2l6ZSg2NCAqICgxPDwyMCkpICE9IDApCiAJCQlwYW5pYygiVW5hYmxlIHRvIGZpbmQgU0JBIElPTU1VIG9yIGluaXRpYWxpemUgIgogCQkJICAgICAgInNvZnR3YXJlIEkvTyBUTEI6IFRyeSBtYWNodmVjPWRpZyBib290IG9wdGlvbiIpOwpAQCAtMjEzOCwxNSArMjE1OCwxMyBAQAogCXJldHVybiAxOwogfQogCi1pbnQKLXNiYV9kbWFfc3VwcG9ydGVkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQorc3RhdGljIGludCBzYmFfZG1hX3N1cHBvcnRlZCAoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKIHsKIAkvKiBtYWtlIHN1cmUgaXQncyBhdCBsZWFzdCAzMmJpdCBjYXBhYmxlICovCiAJcmV0dXJuICgobWFzayAmIDB4RkZGRkZGRkZVTCkgPT0gMHhGRkZGRkZGRlVMKTsKIH0KIAotaW50Ci1zYmFfZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKQorc3RhdGljIGludCBzYmFfZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKQogewogCXJldHVybiAwOwogfQpAQCAtMjE3Niw3ICsyMTk0LDIyIEBACiAKIF9fc2V0dXAoInNiYXBhZ2VzaXplPSIsc2JhX3BhZ2Vfb3ZlcnJpZGUpOwogCi1FWFBPUlRfU1lNQk9MKHNiYV9kbWFfbWFwcGluZ19lcnJvcik7Ci1FWFBPUlRfU1lNQk9MKHNiYV9kbWFfc3VwcG9ydGVkKTsKLUVYUE9SVF9TWU1CT0woc2JhX2FsbG9jX2NvaGVyZW50KTsKLUVYUE9SVF9TWU1CT0woc2JhX2ZyZWVfY29oZXJlbnQpOworc3RydWN0IGRtYV9tYXBfb3BzIHNiYV9kbWFfb3BzID0geworCS5hbGxvY19jb2hlcmVudAkJPSBzYmFfYWxsb2NfY29oZXJlbnQsCisJLmZyZWVfY29oZXJlbnQJCT0gc2JhX2ZyZWVfY29oZXJlbnQsCisJLm1hcF9wYWdlCQk9IHNiYV9tYXBfcGFnZSwKKwkudW5tYXBfcGFnZQkJPSBzYmFfdW5tYXBfcGFnZSwKKwkubWFwX3NnCQkJPSBzYmFfbWFwX3NnX2F0dHJzLAorCS51bm1hcF9zZwkJPSBzYmFfdW5tYXBfc2dfYXR0cnMsCisJLnN5bmNfc2luZ2xlX2Zvcl9jcHUJPSBtYWNodmVjX2RtYV9zeW5jX3NpbmdsZSwKKwkuc3luY19zZ19mb3JfY3B1CT0gbWFjaHZlY19kbWFfc3luY19zZywKKwkuc3luY19zaW5nbGVfZm9yX2RldmljZQk9IG1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlLAorCS5zeW5jX3NnX2Zvcl9kZXZpY2UJPSBtYWNodmVjX2RtYV9zeW5jX3NnLAorCS5kbWFfc3VwcG9ydGVkCQk9IHNiYV9kbWFfc3VwcG9ydGVkLAorCS5tYXBwaW5nX2Vycm9yCQk9IHNiYV9kbWFfbWFwcGluZ19lcnJvciwKK307CisKK3ZvaWQgc2JhX2RtYV9pbml0KHZvaWQpCit7CisJZG1hX29wcyA9ICZzYmFfZG1hX29wczsKK30KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggMWY5MTJkOS4uMzZjMDAwOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTExLDk5ICsxMSwxMjggQEAKIAogI2RlZmluZSBBUkNIX0hBU19ETUFfR0VUX1JFUVVJUkVEX01BU0sKIAotc3RydWN0IGRtYV9tYXBwaW5nX29wcyB7Ci0JaW50ICAgICAgICAgICAgICgqbWFwcGluZ19lcnJvcikoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkgZG1hX2FkZHJfdCBkbWFfYWRkcik7Ci0Jdm9pZCogICAgICAgICAgICgqYWxsb2NfY29oZXJlbnQpKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwKTsKLQl2b2lkICAgICAgICAgICAgKCpmcmVlX2NvaGVyZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCXZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpOwotCWRtYV9hZGRyX3QgICAgICAoKm1hcF9zaW5nbGUpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB1bnNpZ25lZCBsb25nIHB0ciwKLQkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqdW5tYXBfc2luZ2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwKLQkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqc3luY19zaW5nbGVfZm9yX2NwdSkoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKLQkJCQlpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCpzeW5jX3NpbmdsZV9mb3JfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAotCQkJCWludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2dfZm9yX2NwdSkoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKLQkJCQlpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCpzeW5jX3NnX2Zvcl9kZXZpY2UpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCi0JCQkJaW50IGRpcmVjdGlvbik7Ci0JaW50ICAgICAgICAgICAgICgqbWFwX3NnKShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCQlpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnVubWFwX3NnKShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCi0JCQkJaW50IGRpcmVjdGlvbik7Ci0JaW50ICAgICAgICAgICAgICgqZG1hX3N1cHBvcnRlZF9vcCkoc3RydWN0IGRldmljZSAqaHdkZXYsIHU2NCBtYXNrKTsKLQlpbnQJCWlzX3BoeXM7Ci19OwotCi1leHRlcm4gc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wczsKK2V4dGVybiBzdHJ1Y3QgZG1hX21hcF9vcHMgKmRtYV9vcHM7CiBleHRlcm4gc3RydWN0IGlhNjRfbWFjaGluZV92ZWN0b3IgaWE2NF9tdjsKIGV4dGVybiB2b2lkIHNldF9pb21tdV9tYWNodmVjKHZvaWQpOwogCi0jZGVmaW5lIGRtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGhhbmRsZSwgZ2ZwKQlcCi0JcGxhdGZvcm1fZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgaGFuZGxlLCAoZ2ZwKSB8IEdGUF9ETUEpCitleHRlcm4gdm9pZCBtYWNodmVjX2RtYV9zeW5jX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICosIGRtYV9hZGRyX3QsIHNpemVfdCwKKwkJCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgbWFjaHZlY19kbWFfc3luY19zZyhzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsCisJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOwogCi0vKiBjb2hlcmVudCBtZW0uIGlzIGNoZWFwICovCi1zdGF0aWMgaW5saW5lIHZvaWQgKgotZG1hX2FsbG9jX25vbmNvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsCi0JCSAgICAgIGdmcF90IGZsYWcpCitzdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCSAgICAgICBkbWFfYWRkcl90ICpkYWRkciwgZ2ZwX3QgZ2ZwKQogewotCXJldHVybiBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBmbGFnKTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IHBsYXRmb3JtX2RtYV9nZXRfb3BzKGRldik7CisJcmV0dXJuIG9wcy0+YWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBkYWRkciwgZ2ZwKTsKIH0KLSNkZWZpbmUgZG1hX2ZyZWVfY29oZXJlbnQJcGxhdGZvcm1fZG1hX2ZyZWVfY29oZXJlbnQKLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX2ZyZWVfbm9uY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1X2FkZHIsCi0JCSAgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQotewotCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgY3B1X2FkZHIsIGRtYV9oYW5kbGUpOwotfQotI2RlZmluZSBkbWFfbWFwX3NpbmdsZV9hdHRycwlwbGF0Zm9ybV9kbWFfbWFwX3NpbmdsZV9hdHRycwotc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsCi0JCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyKQotewotCXJldHVybiBkbWFfbWFwX3NpbmdsZV9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLCBkaXIsIE5VTEwpOwotfQotI2RlZmluZSBkbWFfbWFwX3NnX2F0dHJzCXBsYXRmb3JtX2RtYV9tYXBfc2dfYXR0cnMKLXN0YXRpYyBpbmxpbmUgaW50IGRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKLQkJCSAgICAgaW50IG5lbnRzLCBpbnQgZGlyKQotewotCXJldHVybiBkbWFfbWFwX3NnX2F0dHJzKGRldiwgc2dsLCBuZW50cywgZGlyLCBOVUxMKTsKLX0KLSNkZWZpbmUgZG1hX3VubWFwX3NpbmdsZV9hdHRycwlwbGF0Zm9ybV9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzCi1zdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgY3B1X2FkZHIsCi0JCQkJICAgIHNpemVfdCBzaXplLCBpbnQgZGlyKQotewotCXJldHVybiBkbWFfdW5tYXBfc2luZ2xlX2F0dHJzKGRldiwgY3B1X2FkZHIsIHNpemUsIGRpciwgTlVMTCk7Ci19Ci0jZGVmaW5lIGRtYV91bm1hcF9zZ19hdHRycwlwbGF0Zm9ybV9kbWFfdW5tYXBfc2dfYXR0cnMKLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKLQkJCQlpbnQgbmVudHMsIGludCBkaXIpCi17Ci0JcmV0dXJuIGRtYV91bm1hcF9zZ19hdHRycyhkZXYsIHNnbCwgbmVudHMsIGRpciwgTlVMTCk7Ci19Ci0jZGVmaW5lIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1CXBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1Ci0jZGVmaW5lIGRtYV9zeW5jX3NnX2Zvcl9jcHUJcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2NwdQotI2RlZmluZSBkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSBwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZQotI2RlZmluZSBkbWFfc3luY19zZ19mb3JfZGV2aWNlCXBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UKLSNkZWZpbmUgZG1hX21hcHBpbmdfZXJyb3IJcGxhdGZvcm1fZG1hX21hcHBpbmdfZXJyb3IKIAotI2RlZmluZSBkbWFfbWFwX3BhZ2UoZGV2LCBwZywgb2ZmLCBzaXplLCBkaXIpCQkJCVwKLQlkbWFfbWFwX3NpbmdsZShkZXYsIHBhZ2VfYWRkcmVzcyhwZykgKyAob2ZmKSwgKHNpemUpLCAoZGlyKSkKLSNkZWZpbmUgZG1hX3VubWFwX3BhZ2UoZGV2LCBkbWFfYWRkciwgc2l6ZSwgZGlyKQkJCVwKLQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgZG1hX2FkZHIsIHNpemUsIGRpcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCSAgICAgdm9pZCAqY2FkZHIsIGRtYV9hZGRyX3QgZGFkZHIpCit7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBwbGF0Zm9ybV9kbWFfZ2V0X29wcyhkZXYpOworCW9wcy0+ZnJlZV9jb2hlcmVudChkZXYsIHNpemUsIGNhZGRyLCBkYWRkcik7Cit9CisKKyNkZWZpbmUgZG1hX2FsbG9jX25vbmNvaGVyZW50KGQsIHMsIGgsIGYpIGRtYV9hbGxvY19jb2hlcmVudChkLCBzLCBoLCBmKQorI2RlZmluZSBkbWFfZnJlZV9ub25jb2hlcmVudChkLCBzLCB2LCBoKSBkbWFfZnJlZV9jb2hlcmVudChkLCBzLCB2LCBoKQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgZG1hX21hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgICB2b2lkICpjYWRkciwgc2l6ZV90IHNpemUsCisJCQkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCQkJICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBwbGF0Zm9ybV9kbWFfZ2V0X29wcyhkZXYpOworCXJldHVybiBvcHMtPm1hcF9wYWdlKGRldiwgdmlydF90b19wYWdlKGNhZGRyKSwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcpY2FkZHIgJiB+UEFHRV9NQVNLLCBzaXplLAorCQkJICAgICBkaXIsIGF0dHJzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRhZGRyLAorCQkJCQkgIHNpemVfdCBzaXplLAorCQkJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCQkJICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3sKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IHBsYXRmb3JtX2RtYV9nZXRfb3BzKGRldik7CisJb3BzLT51bm1hcF9wYWdlKGRldiwgZGFkZHIsIHNpemUsIGRpciwgYXR0cnMpOworfQorCisjZGVmaW5lIGRtYV9tYXBfc2luZ2xlKGQsIGEsIHMsIHIpIGRtYV9tYXBfc2luZ2xlX2F0dHJzKGQsIGEsIHMsIHIsIE5VTEwpCisjZGVmaW5lIGRtYV91bm1hcF9zaW5nbGUoZCwgYSwgcywgcikgZG1hX3VubWFwX3NpbmdsZV9hdHRycyhkLCBhLCBzLCByLCBOVUxMKQorCitzdGF0aWMgaW5saW5lIGludCBkbWFfbWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCisJCQkJICAgaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkJICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBwbGF0Zm9ybV9kbWFfZ2V0X29wcyhkZXYpOworCXJldHVybiBvcHMtPm1hcF9zZyhkZXYsIHNnbCwgbmVudHMsIGRpciwgYXR0cnMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VubWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgaW50IG5lbnRzLAorCQkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCQkgICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3sKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IHBsYXRmb3JtX2RtYV9nZXRfb3BzKGRldik7CisJb3BzLT51bm1hcF9zZyhkZXYsIHNnbCwgbmVudHMsIGRpciwgYXR0cnMpOworfQorCisjZGVmaW5lIGRtYV9tYXBfc2coZCwgcywgbiwgcikgZG1hX21hcF9zZ19hdHRycyhkLCBzLCBuLCByLCBOVUxMKQorI2RlZmluZSBkbWFfdW5tYXBfc2coZCwgcywgbiwgcikgZG1hX3VubWFwX3NnX2F0dHJzKGQsIHMsIG4sIHIsIE5VTEwpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZGFkZHIsCisJCQkJCSAgIHNpemVfdCBzaXplLAorCQkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBwbGF0Zm9ybV9kbWFfZ2V0X29wcyhkZXYpOworCW9wcy0+c3luY19zaW5nbGVfZm9yX2NwdShkZXYsIGRhZGRyLCBzaXplLCBkaXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAorCQkJCSAgICAgICBpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IHBsYXRmb3JtX2RtYV9nZXRfb3BzKGRldik7CisJb3BzLT5zeW5jX3NnX2Zvcl9jcHUoZGV2LCBzZ2wsIG5lbnRzLCBkaXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgICBkbWFfYWRkcl90IGRhZGRyLAorCQkJCQkgICAgICBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gcGxhdGZvcm1fZG1hX2dldF9vcHMoZGV2KTsKKwlvcHMtPnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBkYWRkciwgc2l6ZSwgZGlyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAorCQkJCQkgIGludCBuZW50cywKKwkJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBwbGF0Zm9ybV9kbWFfZ2V0X29wcyhkZXYpOworCW9wcy0+c3luY19zZ19mb3JfZGV2aWNlKGRldiwgc2dsLCBuZW50cywgZGlyKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRhZGRyKQoreworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gcGxhdGZvcm1fZG1hX2dldF9vcHMoZGV2KTsKKwlyZXR1cm4gb3BzLT5tYXBwaW5nX2Vycm9yKGRldiwgZGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICAgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gcGxhdGZvcm1fZG1hX2dldF9vcHMoZGV2KTsKKwlyZXR1cm4gb3BzLT5tYXBfcGFnZShkZXYsIHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLAorCQkJCSAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlkbWFfdW5tYXBfc2luZ2xlKGRldiwgYWRkciwgc2l6ZSwgZGlyKTsKK30KIAogLyoKICAqIFJlc3Qgb2YgdGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlICJBZHZhbmNlZCBETUEgQVBJIi4gIFVzZSBhdCB5b3VyIG93biByaXNrLgpAQCAtMTE1LDcgKzE0NCwxMSBAQAogI2RlZmluZSBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShkZXYsIGRtYV9oYW5kbGUsIG9mZnNldCwgc2l6ZSwgZGlyKQlcCiAJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBkaXIpCiAKLSNkZWZpbmUgZG1hX3N1cHBvcnRlZAkJcGxhdGZvcm1fZG1hX3N1cHBvcnRlZAorc3RhdGljIGlubGluZSBpbnQgZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQoreworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gcGxhdGZvcm1fZG1hX2dldF9vcHMoZGV2KTsKKwlyZXR1cm4gb3BzLT5kbWFfc3VwcG9ydGVkKGRldiwgbWFzayk7Cit9CiAKIHN0YXRpYyBpbmxpbmUgaW50CiBkbWFfc2V0X21hc2sgKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCkBAIC0xNDEsMTEgKzE3NCw0IEBACiAKICNkZWZpbmUgZG1hX2lzX2NvbnNpc3RlbnQoZCwgaCkJKDEpCS8qIGFsbCB3ZSBkbyBpcyBjb2hlcmVudCBtZW1vcnkuLi4gKi8KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpnZXRfZG1hX29wcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGRtYV9vcHM7Ci19Ci0KLQotCiAjZW5kaWYgLyogX0FTTV9JQTY0X0RNQV9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlYy5oCmluZGV4IGZlODdiMjEuLjM2N2QyOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWMuaApAQCAtMTEsNyArMTEsNiBAQAogI2RlZmluZSBfQVNNX0lBNjRfTUFDSFZFQ19ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N3aW90bGIuaD4KIAogLyogZm9yd2FyZCBkZWNsYXJhdGlvbnM6ICovCiBzdHJ1Y3QgZGV2aWNlOwpAQCAtNDUsMjQgKzQ0LDggQEAKIAogLyogRE1BLW1hcHBpbmcgaW50ZXJmYWNlOiAqLwogdHlwZWRlZiB2b2lkIGlhNjRfbXZfZG1hX2luaXQgKHZvaWQpOwotdHlwZWRlZiB2b2lkICppYTY0X212X2RtYV9hbGxvY19jb2hlcmVudCAoc3RydWN0IGRldmljZSAqLCBzaXplX3QsIGRtYV9hZGRyX3QgKiwgZ2ZwX3QpOwotdHlwZWRlZiB2b2lkIGlhNjRfbXZfZG1hX2ZyZWVfY29oZXJlbnQgKHN0cnVjdCBkZXZpY2UgKiwgc2l6ZV90LCB2b2lkICosIGRtYV9hZGRyX3QpOwotdHlwZWRlZiBkbWFfYWRkcl90IGlhNjRfbXZfZG1hX21hcF9zaW5nbGUgKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqLCBzaXplX3QsIGludCk7Ci10eXBlZGVmIHZvaWQgaWE2NF9tdl9kbWFfdW5tYXBfc2luZ2xlIChzdHJ1Y3QgZGV2aWNlICosIGRtYV9hZGRyX3QsIHNpemVfdCwgaW50KTsKLXR5cGVkZWYgaW50IGlhNjRfbXZfZG1hX21hcF9zZyAoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOwotdHlwZWRlZiB2b2lkIGlhNjRfbXZfZG1hX3VubWFwX3NnIChzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGludCk7Ci10eXBlZGVmIHZvaWQgaWE2NF9tdl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSAoc3RydWN0IGRldmljZSAqLCBkbWFfYWRkcl90LCBzaXplX3QsIGludCk7Ci10eXBlZGVmIHZvaWQgaWE2NF9tdl9kbWFfc3luY19zZ19mb3JfY3B1IChzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGludCk7Ci10eXBlZGVmIHZvaWQgaWE2NF9tdl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSAoc3RydWN0IGRldmljZSAqLCBkbWFfYWRkcl90LCBzaXplX3QsIGludCk7Ci10eXBlZGVmIHZvaWQgaWE2NF9tdl9kbWFfc3luY19zZ19mb3JfZGV2aWNlIChzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGludCk7Ci10eXBlZGVmIGludCBpYTY0X212X2RtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKiwgZG1hX2FkZHJfdCBkbWFfYWRkcik7Ci10eXBlZGVmIGludCBpYTY0X212X2RtYV9zdXBwb3J0ZWQgKHN0cnVjdCBkZXZpY2UgKiwgdTY0KTsKLQotdHlwZWRlZiBkbWFfYWRkcl90IGlhNjRfbXZfZG1hX21hcF9zaW5nbGVfYXR0cnMgKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqLCBzaXplX3QsIGludCwgc3RydWN0IGRtYV9hdHRycyAqKTsKLXR5cGVkZWYgdm9pZCBpYTY0X212X2RtYV91bm1hcF9zaW5nbGVfYXR0cnMgKHN0cnVjdCBkZXZpY2UgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LCBpbnQsIHN0cnVjdCBkbWFfYXR0cnMgKik7Ci10eXBlZGVmIGludCBpYTY0X212X2RtYV9tYXBfc2dfYXR0cnMgKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgaW50LCBzdHJ1Y3QgZG1hX2F0dHJzICopOwotdHlwZWRlZiB2b2lkIGlhNjRfbXZfZG1hX3VubWFwX3NnX2F0dHJzIChzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGludCwgc3RydWN0IGRtYV9hdHRycyAqKTsKIHR5cGVkZWYgdTY0IGlhNjRfbXZfZG1hX2dldF9yZXF1aXJlZF9tYXNrIChzdHJ1Y3QgZGV2aWNlICopOwordHlwZWRlZiBzdHJ1Y3QgZG1hX21hcF9vcHMgKmlhNjRfbXZfZG1hX2dldF9vcHMoc3RydWN0IGRldmljZSAqKTsKIAogLyoKICAqIFdBUk5JTkc6IFRoZSBsZWdhY3kgSS9PIHNwYWNlIGlzIF9hcmNoaXRlY3RlZF8uICBQbGF0Zm9ybXMgYXJlCkBAIC0xMTQsOCArOTcsNiBAQAogCiBleHRlcm4gdm9pZCBtYWNodmVjX3NldHVwIChjaGFyICoqKTsKIGV4dGVybiB2b2lkIG1hY2h2ZWNfdGltZXJfaW50ZXJydXB0IChpbnQsIHZvaWQgKik7Ci1leHRlcm4gdm9pZCBtYWNodmVjX2RtYV9zeW5jX3NpbmdsZSAoc3RydWN0IGRldmljZSAqLCBkbWFfYWRkcl90LCBzaXplX3QsIGludCk7Ci1leHRlcm4gdm9pZCBtYWNodmVjX2RtYV9zeW5jX3NnIChzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGludCk7CiBleHRlcm4gdm9pZCBtYWNodmVjX3RsYl9taWdyYXRlX2ZpbmlzaCAoc3RydWN0IG1tX3N0cnVjdCAqKTsKIAogIyBpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9IUF9TSU0pCkBAIC0xNDgsMTkgKzEyOSw4IEBACiAjICBkZWZpbmUgcGxhdGZvcm1fZ2xvYmFsX3RsYl9wdXJnZQlpYTY0X212Lmdsb2JhbF90bGJfcHVyZ2UKICMgIGRlZmluZSBwbGF0Zm9ybV90bGJfbWlncmF0ZV9maW5pc2gJaWE2NF9tdi50bGJfbWlncmF0ZV9maW5pc2gKICMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfaW5pdAkJaWE2NF9tdi5kbWFfaW5pdAotIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9hbGxvY19jb2hlcmVudAlpYTY0X212LmRtYV9hbGxvY19jb2hlcmVudAotIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9mcmVlX2NvaGVyZW50CWlhNjRfbXYuZG1hX2ZyZWVfY29oZXJlbnQKLSMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NpbmdsZV9hdHRycwlpYTY0X212LmRtYV9tYXBfc2luZ2xlX2F0dHJzCi0jICBkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NpbmdsZV9hdHRycwlpYTY0X212LmRtYV91bm1hcF9zaW5nbGVfYXR0cnMKLSMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NnX2F0dHJzCWlhNjRfbXYuZG1hX21hcF9zZ19hdHRycwotIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV91bm1hcF9zZ19hdHRycwlpYTY0X212LmRtYV91bm1hcF9zZ19hdHRycwotIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1IGlhNjRfbXYuZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUKLSMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfY3B1CWlhNjRfbXYuZG1hX3N5bmNfc2dfZm9yX2NwdQotIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlIGlhNjRfbXYuZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UKLSMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfZGV2aWNlIGlhNjRfbXYuZG1hX3N5bmNfc2dfZm9yX2RldmljZQotIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBwaW5nX2Vycm9yCQlpYTY0X212LmRtYV9tYXBwaW5nX2Vycm9yCi0jICBkZWZpbmUgcGxhdGZvcm1fZG1hX3N1cHBvcnRlZAlpYTY0X212LmRtYV9zdXBwb3J0ZWQKICMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfZ2V0X3JlcXVpcmVkX21hc2sgaWE2NF9tdi5kbWFfZ2V0X3JlcXVpcmVkX21hc2sKKyMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfZ2V0X29wcwkJaWE2NF9tdi5kbWFfZ2V0X29wcwogIyAgZGVmaW5lIHBsYXRmb3JtX2lycV90b192ZWN0b3IJaWE2NF9tdi5pcnFfdG9fdmVjdG9yCiAjICBkZWZpbmUgcGxhdGZvcm1fbG9jYWxfdmVjdG9yX3RvX2lycQlpYTY0X212LmxvY2FsX3ZlY3Rvcl90b19pcnEKICMgIGRlZmluZSBwbGF0Zm9ybV9wY2lfZ2V0X2xlZ2FjeV9tZW0JaWE2NF9tdi5wY2lfZ2V0X2xlZ2FjeV9tZW0KQEAgLTIwMywxOSArMTczLDggQEAKIAlpYTY0X212X2dsb2JhbF90bGJfcHVyZ2VfdCAqZ2xvYmFsX3RsYl9wdXJnZTsKIAlpYTY0X212X3RsYl9taWdyYXRlX2ZpbmlzaF90ICp0bGJfbWlncmF0ZV9maW5pc2g7CiAJaWE2NF9tdl9kbWFfaW5pdCAqZG1hX2luaXQ7Ci0JaWE2NF9tdl9kbWFfYWxsb2NfY29oZXJlbnQgKmRtYV9hbGxvY19jb2hlcmVudDsKLQlpYTY0X212X2RtYV9mcmVlX2NvaGVyZW50ICpkbWFfZnJlZV9jb2hlcmVudDsKLQlpYTY0X212X2RtYV9tYXBfc2luZ2xlX2F0dHJzICpkbWFfbWFwX3NpbmdsZV9hdHRyczsKLQlpYTY0X212X2RtYV91bm1hcF9zaW5nbGVfYXR0cnMgKmRtYV91bm1hcF9zaW5nbGVfYXR0cnM7Ci0JaWE2NF9tdl9kbWFfbWFwX3NnX2F0dHJzICpkbWFfbWFwX3NnX2F0dHJzOwotCWlhNjRfbXZfZG1hX3VubWFwX3NnX2F0dHJzICpkbWFfdW5tYXBfc2dfYXR0cnM7Ci0JaWE2NF9tdl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSAqZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHU7Ci0JaWE2NF9tdl9kbWFfc3luY19zZ19mb3JfY3B1ICpkbWFfc3luY19zZ19mb3JfY3B1OwotCWlhNjRfbXZfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UgKmRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlOwotCWlhNjRfbXZfZG1hX3N5bmNfc2dfZm9yX2RldmljZSAqZG1hX3N5bmNfc2dfZm9yX2RldmljZTsKLQlpYTY0X212X2RtYV9tYXBwaW5nX2Vycm9yICpkbWFfbWFwcGluZ19lcnJvcjsKLQlpYTY0X212X2RtYV9zdXBwb3J0ZWQgKmRtYV9zdXBwb3J0ZWQ7CiAJaWE2NF9tdl9kbWFfZ2V0X3JlcXVpcmVkX21hc2sgKmRtYV9nZXRfcmVxdWlyZWRfbWFzazsKKwlpYTY0X212X2RtYV9nZXRfb3BzICpkbWFfZ2V0X29wczsKIAlpYTY0X212X2lycV90b192ZWN0b3IgKmlycV90b192ZWN0b3I7CiAJaWE2NF9tdl9sb2NhbF92ZWN0b3JfdG9faXJxICpsb2NhbF92ZWN0b3JfdG9faXJxOwogCWlhNjRfbXZfcGNpX2dldF9sZWdhY3lfbWVtX3QgKnBjaV9nZXRfbGVnYWN5X21lbTsKQEAgLTI1NCwxOSArMjEzLDggQEAKIAlwbGF0Zm9ybV9nbG9iYWxfdGxiX3B1cmdlLAkJXAogCXBsYXRmb3JtX3RsYl9taWdyYXRlX2ZpbmlzaCwJCVwKIAlwbGF0Zm9ybV9kbWFfaW5pdCwJCQlcCi0JcGxhdGZvcm1fZG1hX2FsbG9jX2NvaGVyZW50LAkJXAotCXBsYXRmb3JtX2RtYV9mcmVlX2NvaGVyZW50LAkJXAotCXBsYXRmb3JtX2RtYV9tYXBfc2luZ2xlX2F0dHJzLAkJXAotCXBsYXRmb3JtX2RtYV91bm1hcF9zaW5nbGVfYXR0cnMsCVwKLQlwbGF0Zm9ybV9kbWFfbWFwX3NnX2F0dHJzLAkJXAotCXBsYXRmb3JtX2RtYV91bm1hcF9zZ19hdHRycywJCVwKLQlwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSwJXAotCXBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9jcHUsCQlcCi0JcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UsCVwKLQlwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfZGV2aWNlLAlcCi0JcGxhdGZvcm1fZG1hX21hcHBpbmdfZXJyb3IsCQkJXAotCXBsYXRmb3JtX2RtYV9zdXBwb3J0ZWQsCQkJXAogCXBsYXRmb3JtX2RtYV9nZXRfcmVxdWlyZWRfbWFzaywJCVwKKwlwbGF0Zm9ybV9kbWFfZ2V0X29wcywJCQlcCiAJcGxhdGZvcm1faXJxX3RvX3ZlY3RvciwJCQlcCiAJcGxhdGZvcm1fbG9jYWxfdmVjdG9yX3RvX2lycSwJCVwKIAlwbGF0Zm9ybV9wY2lfZ2V0X2xlZ2FjeV9tZW0sCQlcCkBAIC0zMDIsNiArMjUwLDkgQEAKICMgIGVycm9yIFVua25vd24gY29uZmlndXJhdGlvbi4gIFVwZGF0ZSBhcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlYy5oLgogIyBlbmRpZiAvKiBDT05GSUdfSUE2NF9HRU5FUklDICovCiAKK2V4dGVybiB2b2lkIHN3aW90bGJfZG1hX2luaXQodm9pZCk7CitleHRlcm4gc3RydWN0IGRtYV9tYXBfb3BzICpkbWFfZ2V0X29wcyhzdHJ1Y3QgZGV2aWNlICopOworCiAvKgogICogRGVmaW5lIGRlZmF1bHQgdmVyc2lvbnMgc28gd2UgY2FuIGV4dGVuZCBtYWNodmVjIGZvciBuZXcgcGxhdGZvcm1zIHdpdGhvdXQgaGF2aW5nCiAgKiB0byB1cGRhdGUgdGhlIG1hY2h2ZWMgZmlsZXMgZm9yIGFsbCBleGlzdGluZyBwbGF0Zm9ybXMuCkBAIC0zMzIsNDMgKzI4MywxMCBAQAogIyBkZWZpbmUgcGxhdGZvcm1fa2VybmVsX2xhdW5jaF9ldmVudAltYWNodmVjX25vb3AKICNlbmRpZgogI2lmbmRlZiBwbGF0Zm9ybV9kbWFfaW5pdAotIyBkZWZpbmUgcGxhdGZvcm1fZG1hX2luaXQJCXN3aW90bGJfaW5pdAorIyBkZWZpbmUgcGxhdGZvcm1fZG1hX2luaXQJCXN3aW90bGJfZG1hX2luaXQKICNlbmRpZgotI2lmbmRlZiBwbGF0Zm9ybV9kbWFfYWxsb2NfY29oZXJlbnQKLSMgZGVmaW5lIHBsYXRmb3JtX2RtYV9hbGxvY19jb2hlcmVudAlzd2lvdGxiX2FsbG9jX2NvaGVyZW50Ci0jZW5kaWYKLSNpZm5kZWYgcGxhdGZvcm1fZG1hX2ZyZWVfY29oZXJlbnQKLSMgZGVmaW5lIHBsYXRmb3JtX2RtYV9mcmVlX2NvaGVyZW50CXN3aW90bGJfZnJlZV9jb2hlcmVudAotI2VuZGlmCi0jaWZuZGVmIHBsYXRmb3JtX2RtYV9tYXBfc2luZ2xlX2F0dHJzCi0jIGRlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NpbmdsZV9hdHRycwlzd2lvdGxiX21hcF9zaW5nbGVfYXR0cnMKLSNlbmRpZgotI2lmbmRlZiBwbGF0Zm9ybV9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzCi0jIGRlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzCXN3aW90bGJfdW5tYXBfc2luZ2xlX2F0dHJzCi0jZW5kaWYKLSNpZm5kZWYgcGxhdGZvcm1fZG1hX21hcF9zZ19hdHRycwotIyBkZWZpbmUgcGxhdGZvcm1fZG1hX21hcF9zZ19hdHRycwlzd2lvdGxiX21hcF9zZ19hdHRycwotI2VuZGlmCi0jaWZuZGVmIHBsYXRmb3JtX2RtYV91bm1hcF9zZ19hdHRycwotIyBkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NnX2F0dHJzCXN3aW90bGJfdW5tYXBfc2dfYXR0cnMKLSNlbmRpZgotI2lmbmRlZiBwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdQotIyBkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUJc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfY3B1Ci0jZW5kaWYKLSNpZm5kZWYgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2NwdQotIyBkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2NwdQkJc3dpb3RsYl9zeW5jX3NnX2Zvcl9jcHUKLSNlbmRpZgotI2lmbmRlZiBwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZQotIyBkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UJc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlCi0jZW5kaWYKLSNpZm5kZWYgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2RldmljZQotIyBkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2RldmljZQlzd2lvdGxiX3N5bmNfc2dfZm9yX2RldmljZQotI2VuZGlmCi0jaWZuZGVmIHBsYXRmb3JtX2RtYV9tYXBwaW5nX2Vycm9yCi0jIGRlZmluZSBwbGF0Zm9ybV9kbWFfbWFwcGluZ19lcnJvcgkJc3dpb3RsYl9kbWFfbWFwcGluZ19lcnJvcgotI2VuZGlmCi0jaWZuZGVmIHBsYXRmb3JtX2RtYV9zdXBwb3J0ZWQKLSMgZGVmaW5lICBwbGF0Zm9ybV9kbWFfc3VwcG9ydGVkCXN3aW90bGJfZG1hX3N1cHBvcnRlZAorI2lmbmRlZiBwbGF0Zm9ybV9kbWFfZ2V0X29wcworIyBkZWZpbmUgcGxhdGZvcm1fZG1hX2dldF9vcHMJCWRtYV9nZXRfb3BzCiAjZW5kaWYKICNpZm5kZWYgcGxhdGZvcm1fZG1hX2dldF9yZXF1aXJlZF9tYXNrCiAjIGRlZmluZSAgcGxhdGZvcm1fZG1hX2dldF9yZXF1aXJlZF9tYXNrCWlhNjRfZG1hX2dldF9yZXF1aXJlZF9tYXNrCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19kaWdfdnRkLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19kaWdfdnRkLmgKaW5kZXggMzQwMGI1Ni4uNmFiMWRlNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWNfZGlnX3Z0ZC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjX2RpZ192dGQuaApAQCAtMiwxNCArMiw2IEBACiAjZGVmaW5lIF9BU01fSUE2NF9NQUNIVkVDX0RJR19WVERfaAogCiBleHRlcm4gaWE2NF9tdl9zZXR1cF90CQkJZGlnX3NldHVwOwotZXh0ZXJuIGlhNjRfbXZfZG1hX2FsbG9jX2NvaGVyZW50CXZ0ZF9hbGxvY19jb2hlcmVudDsKLWV4dGVybiBpYTY0X212X2RtYV9mcmVlX2NvaGVyZW50CXZ0ZF9mcmVlX2NvaGVyZW50OwotZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zaW5nbGVfYXR0cnMJdnRkX21hcF9zaW5nbGVfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzCXZ0ZF91bm1hcF9zaW5nbGVfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfbWFwX3NnX2F0dHJzCQl2dGRfbWFwX3NnX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3VubWFwX3NnX2F0dHJzCXZ0ZF91bm1hcF9zZ19hdHRyczsKLWV4dGVybiBpYTY0X212X2RtYV9zdXBwb3J0ZWQJCWlvbW11X2RtYV9zdXBwb3J0ZWQ7Ci1leHRlcm4gaWE2NF9tdl9kbWFfbWFwcGluZ19lcnJvcgl2dGRfZG1hX21hcHBpbmdfZXJyb3I7CiBleHRlcm4gaWE2NF9tdl9kbWFfaW5pdAkJCXBjaV9pb21tdV9hbGxvYzsKIAogLyoKQEAgLTIyLDE3ICsxNCw1IEBACiAjZGVmaW5lIHBsYXRmb3JtX25hbWUJCQkJImRpZ192dGQiCiAjZGVmaW5lIHBsYXRmb3JtX3NldHVwCQkJCWRpZ19zZXR1cAogI2RlZmluZSBwbGF0Zm9ybV9kbWFfaW5pdAkJCXBjaV9pb21tdV9hbGxvYwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfYWxsb2NfY29oZXJlbnQJCXZ0ZF9hbGxvY19jb2hlcmVudAotI2RlZmluZSBwbGF0Zm9ybV9kbWFfZnJlZV9jb2hlcmVudAkJdnRkX2ZyZWVfY29oZXJlbnQKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcF9zaW5nbGVfYXR0cnMJCXZ0ZF9tYXBfc2luZ2xlX2F0dHJzCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV91bm1hcF9zaW5nbGVfYXR0cnMJCXZ0ZF91bm1hcF9zaW5nbGVfYXR0cnMKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcF9zZ19hdHRycwkJdnRkX21hcF9zZ19hdHRycwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2dfYXR0cnMJCXZ0ZF91bm1hcF9zZ19hdHRycwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdQltYWNodmVjX2RtYV9zeW5jX3NpbmdsZQotI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfY3B1CQltYWNodmVjX2RtYV9zeW5jX3NnCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlCW1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UJCW1hY2h2ZWNfZG1hX3N5bmNfc2cKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3N1cHBvcnRlZAkJCWlvbW11X2RtYV9zdXBwb3J0ZWQKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcHBpbmdfZXJyb3IJCXZ0ZF9kbWFfbWFwcGluZ19lcnJvcgogCiAjZW5kaWYgLyogX0FTTV9JQTY0X01BQ0hWRUNfRElHX1ZURF9oICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19ocHp4MS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWNfaHB6eDEuaAppbmRleCAyZjU3ZjUxLi4zYmQ4M2Q3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19ocHp4MS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjX2hwengxLmgKQEAgLTIsMTQgKzIsNyBAQAogI2RlZmluZSBfQVNNX0lBNjRfTUFDSFZFQ19IUFpYMV9oCiAKIGV4dGVybiBpYTY0X212X3NldHVwX3QJCQlkaWdfc2V0dXA7Ci1leHRlcm4gaWE2NF9tdl9kbWFfYWxsb2NfY29oZXJlbnQJc2JhX2FsbG9jX2NvaGVyZW50OwotZXh0ZXJuIGlhNjRfbXZfZG1hX2ZyZWVfY29oZXJlbnQJc2JhX2ZyZWVfY29oZXJlbnQ7Ci1leHRlcm4gaWE2NF9tdl9kbWFfbWFwX3NpbmdsZV9hdHRycwlzYmFfbWFwX3NpbmdsZV9hdHRyczsKLWV4dGVybiBpYTY0X212X2RtYV91bm1hcF9zaW5nbGVfYXR0cnMJc2JhX3VubWFwX3NpbmdsZV9hdHRyczsKLWV4dGVybiBpYTY0X212X2RtYV9tYXBfc2dfYXR0cnMJCXNiYV9tYXBfc2dfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfdW5tYXBfc2dfYXR0cnMJc2JhX3VubWFwX3NnX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3N1cHBvcnRlZAkJc2JhX2RtYV9zdXBwb3J0ZWQ7Ci1leHRlcm4gaWE2NF9tdl9kbWFfbWFwcGluZ19lcnJvcglzYmFfZG1hX21hcHBpbmdfZXJyb3I7CitleHRlcm4gaWE2NF9tdl9kbWFfaW5pdAkJCXNiYV9kbWFfaW5pdDsKIAogLyoKICAqIFRoaXMgc3R1ZmYgaGFzIGR1YWwgdXNlIQpAQCAtMjAsMTggKzEzLDYgQEAKICAqLwogI2RlZmluZSBwbGF0Zm9ybV9uYW1lCQkJCSJocHp4MSIKICNkZWZpbmUgcGxhdGZvcm1fc2V0dXAJCQkJZGlnX3NldHVwCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9pbml0CQkJbWFjaHZlY19ub29wCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9hbGxvY19jb2hlcmVudAkJc2JhX2FsbG9jX2NvaGVyZW50Ci0jZGVmaW5lIHBsYXRmb3JtX2RtYV9mcmVlX2NvaGVyZW50CQlzYmFfZnJlZV9jb2hlcmVudAotI2RlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NpbmdsZV9hdHRycwkJc2JhX21hcF9zaW5nbGVfYXR0cnMKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NpbmdsZV9hdHRycwkJc2JhX3VubWFwX3NpbmdsZV9hdHRycwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NnX2F0dHJzCQlzYmFfbWFwX3NnX2F0dHJzCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV91bm1hcF9zZ19hdHRycwkJc2JhX3VubWFwX3NnX2F0dHJzCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1CW1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9jcHUJCW1hY2h2ZWNfZG1hX3N5bmNfc2cKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UJbWFjaHZlY19kbWFfc3luY19zaW5nbGUKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2RldmljZQkJbWFjaHZlY19kbWFfc3luY19zZwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3VwcG9ydGVkCQkJc2JhX2RtYV9zdXBwb3J0ZWQKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcHBpbmdfZXJyb3IJCXNiYV9kbWFfbWFwcGluZ19lcnJvcgorI2RlZmluZSBwbGF0Zm9ybV9kbWFfaW5pdAkJCXNiYV9kbWFfaW5pdAogCiAjZW5kaWYgLyogX0FTTV9JQTY0X01BQ0hWRUNfSFBaWDFfaCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWNfaHB6eDFfc3dpb3RsYi5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWNfaHB6eDFfc3dpb3RsYi5oCmluZGV4IGE4NDJjZGQuLjEwOTFhYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjX2hwengxX3N3aW90bGIuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19ocHp4MV9zd2lvdGxiLmgKQEAgLTIsMTggKzIsNyBAQAogI2RlZmluZSBfQVNNX0lBNjRfTUFDSFZFQ19IUFpYMV9TV0lPVExCX2gKIAogZXh0ZXJuIGlhNjRfbXZfc2V0dXBfdAkJCQlkaWdfc2V0dXA7Ci1leHRlcm4gaWE2NF9tdl9kbWFfYWxsb2NfY29oZXJlbnQJCWh3c3dfYWxsb2NfY29oZXJlbnQ7Ci1leHRlcm4gaWE2NF9tdl9kbWFfZnJlZV9jb2hlcmVudAkJaHdzd19mcmVlX2NvaGVyZW50OwotZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zaW5nbGVfYXR0cnMJCWh3c3dfbWFwX3NpbmdsZV9hdHRyczsKLWV4dGVybiBpYTY0X212X2RtYV91bm1hcF9zaW5nbGVfYXR0cnMJCWh3c3dfdW5tYXBfc2luZ2xlX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zZ19hdHRycwkJCWh3c3dfbWFwX3NnX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3VubWFwX3NnX2F0dHJzCQlod3N3X3VubWFwX3NnX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3N1cHBvcnRlZAkJCWh3c3dfZG1hX3N1cHBvcnRlZDsKLWV4dGVybiBpYTY0X212X2RtYV9tYXBwaW5nX2Vycm9yCQlod3N3X2RtYV9tYXBwaW5nX2Vycm9yOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUJCWh3c3dfc3luY19zaW5nbGVfZm9yX2NwdTsKLWV4dGVybiBpYTY0X212X2RtYV9zeW5jX3NnX2Zvcl9jcHUJCWh3c3dfc3luY19zZ19mb3JfY3B1OwotZXh0ZXJuIGlhNjRfbXZfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UJaHdzd19zeW5jX3NpbmdsZV9mb3JfZGV2aWNlOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3N5bmNfc2dfZm9yX2RldmljZQkJaHdzd19zeW5jX3NnX2Zvcl9kZXZpY2U7CitleHRlcm4gaWE2NF9tdl9kbWFfZ2V0X29wcwkJCWh3c3dfZG1hX2dldF9vcHM7CiAKIC8qCiAgKiBUaGlzIHN0dWZmIGhhcyBkdWFsIHVzZSEKQEAgLTIzLDIwICsxMiw4IEBACiAgKiB0aGUgbWFjcm9zIGFyZSB1c2VkIGRpcmVjdGx5LgogICovCiAjZGVmaW5lIHBsYXRmb3JtX25hbWUJCQkJImhwengxX3N3aW90bGIiCi0KICNkZWZpbmUgcGxhdGZvcm1fc2V0dXAJCQkJZGlnX3NldHVwCiAjZGVmaW5lIHBsYXRmb3JtX2RtYV9pbml0CQkJbWFjaHZlY19ub29wCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9hbGxvY19jb2hlcmVudAkJaHdzd19hbGxvY19jb2hlcmVudAotI2RlZmluZSBwbGF0Zm9ybV9kbWFfZnJlZV9jb2hlcmVudAkJaHdzd19mcmVlX2NvaGVyZW50Ci0jZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBfc2luZ2xlX2F0dHJzCQlod3N3X21hcF9zaW5nbGVfYXR0cnMKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NpbmdsZV9hdHRycwkJaHdzd191bm1hcF9zaW5nbGVfYXR0cnMKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcF9zZ19hdHRycwkJaHdzd19tYXBfc2dfYXR0cnMKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NnX2F0dHJzCQlod3N3X3VubWFwX3NnX2F0dHJzCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zdXBwb3J0ZWQJCQlod3N3X2RtYV9zdXBwb3J0ZWQKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcHBpbmdfZXJyb3IJCWh3c3dfZG1hX21hcHBpbmdfZXJyb3IKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUJaHdzd19zeW5jX3NpbmdsZV9mb3JfY3B1Ci0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9jcHUJCWh3c3dfc3luY19zZ19mb3JfY3B1Ci0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlCWh3c3dfc3luY19zaW5nbGVfZm9yX2RldmljZQotI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfZGV2aWNlCQlod3N3X3N5bmNfc2dfZm9yX2RldmljZQorI2RlZmluZSBwbGF0Zm9ybV9kbWFfZ2V0X29wcwkJCWh3c3dfZG1hX2dldF9vcHMKIAogI2VuZGlmIC8qIF9BU01fSUE2NF9NQUNIVkVDX0hQWlgxX1NXSU9UTEJfaCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWNfc24yLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19zbjIuaAppbmRleCBmMWE2ZTBkLi5mMDYxYTMwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19zbjIuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19zbjIuaApAQCAtNTUsMTkgKzU1LDggQEAKIGV4dGVybiBpYTY0X212X3JlYWR3X3QgX19zbl9yZWFkd19yZWxheGVkOwogZXh0ZXJuIGlhNjRfbXZfcmVhZGxfdCBfX3NuX3JlYWRsX3JlbGF4ZWQ7CiBleHRlcm4gaWE2NF9tdl9yZWFkcV90IF9fc25fcmVhZHFfcmVsYXhlZDsKLWV4dGVybiBpYTY0X212X2RtYV9hbGxvY19jb2hlcmVudAlzbl9kbWFfYWxsb2NfY29oZXJlbnQ7Ci1leHRlcm4gaWE2NF9tdl9kbWFfZnJlZV9jb2hlcmVudAlzbl9kbWFfZnJlZV9jb2hlcmVudDsKLWV4dGVybiBpYTY0X212X2RtYV9tYXBfc2luZ2xlX2F0dHJzCXNuX2RtYV9tYXBfc2luZ2xlX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3VubWFwX3NpbmdsZV9hdHRycwlzbl9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zZ19hdHRycwkJc25fZG1hX21hcF9zZ19hdHRyczsKLWV4dGVybiBpYTY0X212X2RtYV91bm1hcF9zZ19hdHRycwlzbl9kbWFfdW5tYXBfc2dfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdQlzbl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdTsKLWV4dGVybiBpYTY0X212X2RtYV9zeW5jX3NnX2Zvcl9jcHUJc25fZG1hX3N5bmNfc2dfZm9yX2NwdTsKLWV4dGVybiBpYTY0X212X2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlIHNuX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3N5bmNfc2dfZm9yX2RldmljZQlzbl9kbWFfc3luY19zZ19mb3JfZGV2aWNlOwotZXh0ZXJuIGlhNjRfbXZfZG1hX21hcHBpbmdfZXJyb3IJc25fZG1hX21hcHBpbmdfZXJyb3I7Ci1leHRlcm4gaWE2NF9tdl9kbWFfc3VwcG9ydGVkCQlzbl9kbWFfc3VwcG9ydGVkOwogZXh0ZXJuIGlhNjRfbXZfZG1hX2dldF9yZXF1aXJlZF9tYXNrCXNuX2RtYV9nZXRfcmVxdWlyZWRfbWFzazsKK2V4dGVybiBpYTY0X212X2RtYV9pbml0CQkJc25fZG1hX2luaXQ7CiBleHRlcm4gaWE2NF9tdl9taWdyYXRlX3QJCXNuX21pZ3JhdGU7CiBleHRlcm4gaWE2NF9tdl9rZXJuZWxfbGF1bmNoX2V2ZW50X3QJc25fa2VybmVsX2xhdW5jaF9ldmVudDsKIGV4dGVybiBpYTY0X212X3NldHVwX21zaV9pcnFfdAkJc25fc2V0dXBfbXNpX2lycTsKQEAgLTExMSwyMCArMTAwLDggQEAKICNkZWZpbmUgcGxhdGZvcm1fcGNpX2dldF9sZWdhY3lfbWVtCXNuX3BjaV9nZXRfbGVnYWN5X21lbQogI2RlZmluZSBwbGF0Zm9ybV9wY2lfbGVnYWN5X3JlYWQJc25fcGNpX2xlZ2FjeV9yZWFkCiAjZGVmaW5lIHBsYXRmb3JtX3BjaV9sZWdhY3lfd3JpdGUJc25fcGNpX2xlZ2FjeV93cml0ZQotI2RlZmluZSBwbGF0Zm9ybV9kbWFfaW5pdAkJbWFjaHZlY19ub29wCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9hbGxvY19jb2hlcmVudAlzbl9kbWFfYWxsb2NfY29oZXJlbnQKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX2ZyZWVfY29oZXJlbnQJc25fZG1hX2ZyZWVfY29oZXJlbnQKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcF9zaW5nbGVfYXR0cnMJc25fZG1hX21hcF9zaW5nbGVfYXR0cnMKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NpbmdsZV9hdHRycwlzbl9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBfc2dfYXR0cnMJc25fZG1hX21hcF9zZ19hdHRycwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2dfYXR0cnMJc25fZG1hX3VubWFwX3NnX2F0dHJzCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1IHNuX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1Ci0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9jcHUJc25fZG1hX3N5bmNfc2dfZm9yX2NwdQotI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSBzbl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZQotI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfZGV2aWNlCXNuX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcHBpbmdfZXJyb3IJCXNuX2RtYV9tYXBwaW5nX2Vycm9yCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zdXBwb3J0ZWQJCXNuX2RtYV9zdXBwb3J0ZWQKICNkZWZpbmUgcGxhdGZvcm1fZG1hX2dldF9yZXF1aXJlZF9tYXNrCXNuX2RtYV9nZXRfcmVxdWlyZWRfbWFzaworI2RlZmluZSBwbGF0Zm9ybV9kbWFfaW5pdAkJc25fZG1hX2luaXQKICNkZWZpbmUgcGxhdGZvcm1fbWlncmF0ZQkJc25fbWlncmF0ZQogI2RlZmluZSBwbGF0Zm9ybV9rZXJuZWxfbGF1bmNoX2V2ZW50ICAgIHNuX2tlcm5lbF9sYXVuY2hfZXZlbnQKICNpZmRlZiBDT05GSUdfUENJX01TSQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAppbmRleCAzMTkzZjQ0Li5mMjYwZGNmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApAQCAtNDQsMTEgKzQ0LDYgQEAKICNkZWZpbmUgcGFyZW50X25vZGUobmlkKSAobmlkKQogCiAvKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBDUFUgb24gTm9kZSAnbm9kZScuCi0gKi8KLSNkZWZpbmUgbm9kZV90b19maXJzdF9jcHUobm9kZSkgKGNwdW1hc2tfZmlyc3QoY3B1bWFza19vZl9ub2RlKG5vZGUpKSkKLQotLyoKICAqIERldGVybWluZXMgdGhlIG5vZGUgZm9yIGEgZ2l2ZW4gcGNpIGJ1cwogICovCiAjZGVmaW5lIHBjaWJ1c190b19ub2RlKGJ1cykgUENJX0NPTlRST0xMRVIoYnVzKS0+bm9kZQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggYzM4MWVhOS4uZjI3NzhmMiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCkBAIC03LDcgKzcsNyBAQAogb2JqLXkgOj0gYWNwaS5vIGVudHJ5Lm8gZWZpLm8gZWZpX3N0dWIubyBnYXRlLWRhdGEubyBmc3lzLm8gaWE2NF9rc3ltcy5vIGlycS5vIGlycV9pYTY0Lm8JXAogCSBpcnFfbHNhcGljLm8gaXZ0Lm8gbWFjaHZlYy5vIHBhbC5vIHBhdGNoLm8gcHJvY2Vzcy5vIHBlcmZtb24ubyBwdHJhY2UubyBzYWwubwkJXAogCSBzYWxpbmZvLm8gc2V0dXAubyBzaWduYWwubyBzeXNfaWE2NC5vIHRpbWUubyB0cmFwcy5vIHVuYWxpZ25lZC5vIFwKLQkgdW53aW5kLm8gbWNhLm8gbWNhX2FzbS5vIHRvcG9sb2d5Lm8KKwkgdW53aW5kLm8gbWNhLm8gbWNhX2FzbS5vIHRvcG9sb2d5Lm8gZG1hLW1hcHBpbmcubwogCiBvYmotJChDT05GSUdfSUE2NF9CUkxfRU1VKQkrPSBicmxfZW11Lm8KIG9iai0kKENPTkZJR19JQTY0X0dFTkVSSUMpCSs9IGFjcGktZXh0Lm8KQEAgLTQzLDkgKzQzLDcgQEAKIG9iai15CQkJCSs9IGVzaV9zdHViLm8JIyBtdXN0IGJlIGluIGtlcm5lbCBwcm9wZXIKIGVuZGlmCiBvYmotJChDT05GSUdfRE1BUikJCSs9IHBjaS1kbWEubwotaWZlcSAoJChDT05GSUdfRE1BUiksIHkpCiBvYmotJChDT05GSUdfU1dJT1RMQikJCSs9IHBjaS1zd2lvdGxiLm8KLWVuZGlmCiAKICMgVGhlIGdhdGUgRFNPIGltYWdlIGlzIGJ1aWx0IHVzaW5nIGEgc3BlY2lhbCBsaW5rZXIgc2NyaXB0LgogdGFyZ2V0cyArPSBnYXRlLnNvIGdhdGUtc3ltcy5vCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2RtYS1tYXBwaW5nLmMgYi9hcmNoL2lhNjQva2VybmVsL2RtYS1tYXBwaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg2YTJhZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZG1hLW1hcHBpbmcuYwpAQCAtMCwwICsxLDEzIEBACisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworLyogU2V0IHRoaXMgdG8gMSBpZiB0aGVyZSBpcyBhIEhXIElPTU1VIGluIHRoZSBzeXN0ZW0gKi8KK2ludCBpb21tdV9kZXRlY3RlZCBfX3JlYWRfbW9zdGx5OworCitzdHJ1Y3QgZG1hX21hcF9vcHMgKmRtYV9vcHM7CitFWFBPUlRfU1lNQk9MKGRtYV9vcHMpOworCitzdHJ1Y3QgZG1hX21hcF9vcHMgKmRtYV9nZXRfb3BzKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZG1hX29wczsKK30KK0VYUE9SVF9TWU1CT0woZG1hX2dldF9vcHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tYWNodmVjLmMgYi9hcmNoL2lhNjQva2VybmVsL21hY2h2ZWMuYwppbmRleCA3Y2NiMjI4Li5kNDFhNDBlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21hY2h2ZWMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21hY2h2ZWMuYwpAQCAtMSw1ICsxLDUgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKQEAgLTc1LDE0ICs3NSwxNiBAQAogRVhQT1JUX1NZTUJPTChtYWNodmVjX3RpbWVyX2ludGVycnVwdCk7CiAKIHZvaWQKLW1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlIChzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwgaW50IGRpcikKK21hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewogCW1iKCk7CiB9CiBFWFBPUlRfU1lNQk9MKG1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlKTsKIAogdm9pZAotbWFjaHZlY19kbWFfc3luY19zZyAoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuLCBpbnQgZGlyKQorbWFjaHZlY19kbWFfc3luY19zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG4sCisJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CiAJbWIoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGFsaW5mby5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wYWxpbmZvLmMKaW5kZXggZTVjNTdmNC4uYTRmMTljNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wYWxpbmZvLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wYWxpbmZvLmMKQEAgLTEwMDIsOCArMTAwMiw2IEBACiAJCSpwZGlyID0gY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgKIAkJCQlwYWxpbmZvX2VudHJpZXNbal0ubmFtZSwgMCwgY3B1X2RpciwKIAkJCQlwYWxpbmZvX3JlYWRfZW50cnksICh2b2lkICopZi52YWx1ZSk7Ci0JCWlmICgqcGRpcikKLQkJCSgqcGRpciktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCXBkaXIrKzsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BjaS1kbWEuYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGNpLWRtYS5jCmluZGV4IGQwYWRhMDYuLmU0Y2I0NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGNpLWRtYS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGNpLWRtYS5jCkBAIC0zMiw5ICszMiw2IEBACiBpbnQgZm9yY2VfaW9tbXUgX19yZWFkX21vc3RseTsKICNlbmRpZgogCi0vKiBTZXQgdGhpcyB0byAxIGlmIHRoZXJlIGlzIGEgSFcgSU9NTVUgaW4gdGhlIHN5c3RlbSAqLwotaW50IGlvbW11X2RldGVjdGVkIF9fcmVhZF9tb3N0bHk7Ci0KIC8qIER1bW15IGRldmljZSB1c2VkIGZvciBOVUxMIGFyZ3VtZW50cyAobm9ybWFsbHkgSVNBKS4gQmV0dGVyIHdvdWxkCiAgICBiZSBwcm9iYWJseSBhIHNtYWxsZXIgRE1BIG1hc2ssIGJ1dCB0aGlzIGlzIGJ1Zy10by1idWcgY29tcGF0aWJsZQogICAgdG8gaTM4Ni4gKi8KQEAgLTQ0LDE4ICs0MSw3IEBACiAJLmRtYV9tYXNrID0gJmZhbGxiYWNrX2Rldi5jb2hlcmVudF9kbWFfbWFzaywKIH07CiAKLXZvaWQgX19pbml0IHBjaV9pb21tdV9hbGxvYyh2b2lkKQotewotCS8qCi0JICogVGhlIG9yZGVyIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBpbXBvcnRhbnQgZm9yCi0JICogZmFsbC1iYWNrL2ZhaWwtb3ZlciByZWFzb25zCi0JICovCi0JZGV0ZWN0X2ludGVsX2lvbW11KCk7Ci0KLSNpZmRlZiBDT05GSUdfU1dJT1RMQgotCXBjaV9zd2lvdGxiX2luaXQoKTsKLSNlbmRpZgotfQorZXh0ZXJuIHN0cnVjdCBkbWFfbWFwX29wcyBpbnRlbF9kbWFfb3BzOwogCiBzdGF0aWMgaW50IF9faW5pdCBwY2lfaW9tbXVfaW5pdCh2b2lkKQogewpAQCAtNzksMTUgKzY1LDEyIEBACiAJcmV0dXJuOwogfQogCi1zdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzOwotRVhQT1JUX1NZTUJPTChkbWFfb3BzKTsKLQogaW50IGlvbW11X2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKIHsKLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gcGxhdGZvcm1fZG1hX2dldF9vcHMoZGV2KTsKIAotCWlmIChvcHMtPmRtYV9zdXBwb3J0ZWRfb3ApCi0JCXJldHVybiBvcHMtPmRtYV9zdXBwb3J0ZWRfb3AoZGV2LCBtYXNrKTsKKwlpZiAob3BzLT5kbWFfc3VwcG9ydGVkKQorCQlyZXR1cm4gb3BzLT5kbWFfc3VwcG9ydGVkKGRldiwgbWFzayk7CiAKIAkvKiBDb3BpZWQgZnJvbSBpMzg2LiBEb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSwgYmVjYXVzZSBpdCB3aWxsCiAJICAgb25seSB3b3JrIGZvciBwY2lfYWxsb2NfY29oZXJlbnQuCkBAIC0xMTYsNCArOTksMjUgQEAKIH0KIEVYUE9SVF9TWU1CT0woaW9tbXVfZG1hX3N1cHBvcnRlZCk7CiAKK3ZvaWQgX19pbml0IHBjaV9pb21tdV9hbGxvYyh2b2lkKQoreworCWRtYV9vcHMgPSAmaW50ZWxfZG1hX29wczsKKworCWRtYV9vcHMtPnN5bmNfc2luZ2xlX2Zvcl9jcHUgPSBtYWNodmVjX2RtYV9zeW5jX3NpbmdsZTsKKwlkbWFfb3BzLT5zeW5jX3NnX2Zvcl9jcHUgPSBtYWNodmVjX2RtYV9zeW5jX3NnOworCWRtYV9vcHMtPnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UgPSBtYWNodmVjX2RtYV9zeW5jX3NpbmdsZTsKKwlkbWFfb3BzLT5zeW5jX3NnX2Zvcl9kZXZpY2UgPSBtYWNodmVjX2RtYV9zeW5jX3NnOworCWRtYV9vcHMtPmRtYV9zdXBwb3J0ZWQgPSBpb21tdV9kbWFfc3VwcG9ydGVkOworCisJLyoKKwkgKiBUaGUgb3JkZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGltcG9ydGFudCBmb3IKKwkgKiBmYWxsLWJhY2svZmFpbC1vdmVyIHJlYXNvbnMKKwkgKi8KKwlkZXRlY3RfaW50ZWxfaW9tbXUoKTsKKworI2lmZGVmIENPTkZJR19TV0lPVExCCisJcGNpX3N3aW90bGJfaW5pdCgpOworI2VuZGlmCit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wY2ktc3dpb3RsYi5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wY2ktc3dpb3RsYi5jCmluZGV4IDE2YzUwNTEuLjU3M2YwMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGNpLXN3aW90bGIuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BjaS1zd2lvdGxiLmMKQEAgLTEzLDIzICsxMywzNyBAQAogaW50IHN3aW90bGIgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0woc3dpb3RsYik7CiAKLXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgc3dpb3RsYl9kbWFfb3BzID0gewotCS5tYXBwaW5nX2Vycm9yID0gc3dpb3RsYl9kbWFfbWFwcGluZ19lcnJvciwKLQkuYWxsb2NfY29oZXJlbnQgPSBzd2lvdGxiX2FsbG9jX2NvaGVyZW50LAorc3RhdGljIHZvaWQgKmlhNjRfc3dpb3RsYl9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCQkgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwKQoreworCWlmIChkZXYtPmNvaGVyZW50X2RtYV9tYXNrICE9IERNQV82NEJJVF9NQVNLKQorCQlnZnAgfD0gR0ZQX0RNQTsKKwlyZXR1cm4gc3dpb3RsYl9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGdmcCk7Cit9CisKK3N0cnVjdCBkbWFfbWFwX29wcyBzd2lvdGxiX2RtYV9vcHMgPSB7CisJLmFsbG9jX2NvaGVyZW50ID0gaWE2NF9zd2lvdGxiX2FsbG9jX2NvaGVyZW50LAogCS5mcmVlX2NvaGVyZW50ID0gc3dpb3RsYl9mcmVlX2NvaGVyZW50LAotCS5tYXBfc2luZ2xlID0gc3dpb3RsYl9tYXBfc2luZ2xlLAotCS51bm1hcF9zaW5nbGUgPSBzd2lvdGxiX3VubWFwX3NpbmdsZSwKKwkubWFwX3BhZ2UgPSBzd2lvdGxiX21hcF9wYWdlLAorCS51bm1hcF9wYWdlID0gc3dpb3RsYl91bm1hcF9wYWdlLAorCS5tYXBfc2cgPSBzd2lvdGxiX21hcF9zZ19hdHRycywKKwkudW5tYXBfc2cgPSBzd2lvdGxiX3VubWFwX3NnX2F0dHJzLAogCS5zeW5jX3NpbmdsZV9mb3JfY3B1ID0gc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfY3B1LAogCS5zeW5jX3NpbmdsZV9mb3JfZGV2aWNlID0gc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlLAogCS5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1ID0gc3dpb3RsYl9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1LAogCS5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlID0gc3dpb3RsYl9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlLAogCS5zeW5jX3NnX2Zvcl9jcHUgPSBzd2lvdGxiX3N5bmNfc2dfZm9yX2NwdSwKIAkuc3luY19zZ19mb3JfZGV2aWNlID0gc3dpb3RsYl9zeW5jX3NnX2Zvcl9kZXZpY2UsCi0JLm1hcF9zZyA9IHN3aW90bGJfbWFwX3NnLAotCS51bm1hcF9zZyA9IHN3aW90bGJfdW5tYXBfc2csCi0JLmRtYV9zdXBwb3J0ZWRfb3AgPSBzd2lvdGxiX2RtYV9zdXBwb3J0ZWQsCisJLmRtYV9zdXBwb3J0ZWQgPSBzd2lvdGxiX2RtYV9zdXBwb3J0ZWQsCisJLm1hcHBpbmdfZXJyb3IgPSBzd2lvdGxiX2RtYV9tYXBwaW5nX2Vycm9yLAogfTsKIAordm9pZCBfX2luaXQgc3dpb3RsYl9kbWFfaW5pdCh2b2lkKQoreworCWRtYV9vcHMgPSAmc3dpb3RsYl9kbWFfb3BzOworCXN3aW90bGJfaW5pdCgpOworfQorCiB2b2lkIF9faW5pdCBwY2lfc3dpb3RsYl9pbml0KHZvaWQpCiB7CiAJaWYgKCFpb21tdV9kZXRlY3RlZCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvcHJvbWluZm9fcHJvYy5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvcHJvbWluZm9fcHJvYy5jCmluZGV4IDRkY2NlM2QuLmU2MzMyODggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3Byb21pbmZvX3Byb2MuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9wcm9taW5mb19wcm9jLmMKQEAgLTIyNSw3ICsyMjUsNiBAQAogaW50IF9faW5pdCBwcm9taW5mb19pbml0KHZvaWQpCiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICoqZW50cDsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnA7CiAJY25vZGVpZF90IGNub2RlaWQ7CiAJdW5zaWduZWQgbG9uZyBuYXNpZDsKIAlpbnQgc2l6ZTsKQEAgLTI0NiwxNCArMjQ1LDEwIEBACiAJCXNwcmludGYobmFtZSwgIm5vZGUlZCIsIGNub2RlaWQpOwogCQkqZW50cCA9IHByb2NfbWtkaXIobmFtZSwgc2dpX3Byb21pbmZvX2VudHJ5KTsKIAkJbmFzaWQgPSBjbm9kZWlkX3RvX25hc2lkKGNub2RlaWQpOwotCQlwID0gY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiZml0IiwgMCwgKmVudHAsIHJlYWRfZml0X2VudHJ5LAorCQljcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJmaXQiLCAwLCAqZW50cCwgcmVhZF9maXRfZW50cnksCiAJCQkJCSAgICh2b2lkICopbmFzaWQpOwotCQlpZiAocCkKLQkJCXAtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JCXAgPSBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJ2ZXJzaW9uIiwgMCwgKmVudHAsCisJCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoInZlcnNpb24iLCAwLCAqZW50cCwKIAkJCQkJICAgcmVhZF92ZXJzaW9uX2VudHJ5LCAodm9pZCAqKW5hc2lkKTsKLQkJaWYgKHApCi0JCQlwLT5vd25lciA9IFRISVNfTU9EVUxFOwogCQllbnRwKys7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3BjaV9kbWEuYyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpX2RtYS5jCmluZGV4IDg2M2Y1MDEuLjhjMTMwZTggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpX2RtYS5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpX2RtYS5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1hdHRycy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9zbi9pbnRyLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3BjaWJ1c19wcm92aWRlcl9kZWZzLmg+CkBAIC0zMSw3ICszMSw3IEBACiAgKiB0aGlzIGZ1bmN0aW9uLiAgT2YgY291cnNlLCBTTiBvbmx5IHN1cHBvcnRzIGRldmljZXMgdGhhdCBoYXZlIDMyIG9yIG1vcmUKICAqIGFkZHJlc3MgYml0cyB3aGVuIHVzaW5nIHRoZSBQTVUuCiAgKi8KLWludCBzbl9kbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCitzdGF0aWMgaW50IHNuX2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKIHsKIAlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CiAKQEAgLTM5LDcgKzM5LDYgQEAKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIDE7CiB9Ci1FWFBPUlRfU1lNQk9MKHNuX2RtYV9zdXBwb3J0ZWQpOwogCiAvKioKICAqIHNuX2RtYV9zZXRfbWFzayAtIHNldCB0aGUgRE1BIG1hc2sKQEAgLTc1LDggKzc0LDggQEAKICAqIHF1ZXVlIGZvciBhIFNDU0kgY29udHJvbGxlcikuICBTZWUgRG9jdW1lbnRhdGlvbi9ETUEtQVBJLnR4dCBmb3IKICAqIG1vcmUgaW5mb3JtYXRpb24uCiAgKi8KLXZvaWQgKnNuX2RtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJICAgIGRtYV9hZGRyX3QgKiBkbWFfaGFuZGxlLCBnZnBfdCBmbGFncykKK3N0YXRpYyB2b2lkICpzbl9kbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICBkbWFfYWRkcl90ICogZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZ3MpCiB7CiAJdm9pZCAqY3B1YWRkcjsKIAl1bnNpZ25lZCBsb25nIHBoeXNfYWRkcjsKQEAgLTEyNCw3ICsxMjMsNiBAQAogCiAJcmV0dXJuIGNwdWFkZHI7CiB9Ci1FWFBPUlRfU1lNQk9MKHNuX2RtYV9hbGxvY19jb2hlcmVudCk7CiAKIC8qKgogICogc25fcGNpX2ZyZWVfY29oZXJlbnQgLSBmcmVlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggY29oZXJlbnQgRE1BYWJsZSByZWdpb24KQEAgLTEzNiw4ICsxMzQsOCBAQAogICogRnJlZXMgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgZG1hX2FsbG9jX2NvaGVyZW50KCksIHBvdGVudGlhbGx5IHVubWFwcGluZwogICogYW55IGFzc29jaWF0ZWQgSU9NTVUgbWFwcGluZ3MuCiAgKi8KLXZvaWQgc25fZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1X2FkZHIsCi0JCQkgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKK3N0YXRpYyB2b2lkIHNuX2RtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKmNwdV9hZGRyLAorCQkJCSBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNuX3BjaWJ1c19wcm92aWRlciAqcHJvdmlkZXIgPSBTTl9QQ0lERVZfQlVTUFJPVklERVIocGRldik7CkBAIC0xNDcsNyArMTQ1LDYgQEAKIAlwcm92aWRlci0+ZG1hX3VubWFwKHBkZXYsIGRtYV9oYW5kbGUsIDApOwogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpY3B1X2FkZHIsIGdldF9vcmRlcihzaXplKSk7CiB9Ci1FWFBPUlRfU1lNQk9MKHNuX2RtYV9mcmVlX2NvaGVyZW50KTsKIAogLyoqCiAgKiBzbl9kbWFfbWFwX3NpbmdsZV9hdHRycyAtIG1hcCBhIHNpbmdsZSBwYWdlIGZvciBETUEKQEAgLTE3MywxMCArMTcwLDEyIEBACiAgKiBUT0RPOiBzaW1wbGlmeSBvdXIgaW50ZXJmYWNlOwogICogICAgICAgZmlndXJlIG91dCBob3cgdG8gc2F2ZSBkbWFtYXAgaGFuZGxlIHNvIGNhbiB1c2UgdHdvIHN0ZXAuCiAgKi8KLWRtYV9hZGRyX3Qgc25fZG1hX21hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwKLQkJCQkgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbiwKLQkJCQkgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3N0YXRpYyBkbWFfYWRkcl90IHNuX2RtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJCSAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CisJdm9pZCAqY3B1X2FkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQ7CiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAl1bnNpZ25lZCBsb25nIHBoeXNfYWRkcjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKQEAgLTIwMSw3ICsyMDAsNiBAQAogCX0KIAlyZXR1cm4gZG1hX2FkZHI7CiB9Ci1FWFBPUlRfU1lNQk9MKHNuX2RtYV9tYXBfc2luZ2xlX2F0dHJzKTsKIAogLyoqCiAgKiBzbl9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzIC0gdW5hbXAgYSBETUEgbWFwcGVkIHBhZ2UKQEAgLTIxNSwyMSArMjEzLDIwIEBACiAgKiBieSBAZG1hX2hhbmRsZSBpbnRvIHRoZSBjb2hlcmVuY2UgZG9tYWluLiAgT24gU04sIHdlJ3JlIGFsd2F5cyBjYWNoZQogICogY29oZXJlbnQsIHNvIHdlIGp1c3QgbmVlZCB0byBmcmVlIGFueSBBVEVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hcHBpbmcuCiAgKi8KLXZvaWQgc25fZG1hX3VubWFwX3NpbmdsZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCi0JCQkgICAgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24sCi0JCQkgICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCitzdGF0aWMgdm9pZCBzbl9kbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCisJCQkgICAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNuX3BjaWJ1c19wcm92aWRlciAqcHJvdmlkZXIgPSBTTl9QQ0lERVZfQlVTUFJPVklERVIocGRldik7CiAKIAlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CiAKLQlwcm92aWRlci0+ZG1hX3VubWFwKHBkZXYsIGRtYV9hZGRyLCBkaXJlY3Rpb24pOworCXByb3ZpZGVyLT5kbWFfdW5tYXAocGRldiwgZG1hX2FkZHIsIGRpcik7CiB9Ci1FWFBPUlRfU1lNQk9MKHNuX2RtYV91bm1hcF9zaW5nbGVfYXR0cnMpOwogCiAvKioKLSAqIHNuX2RtYV91bm1hcF9zZ19hdHRycyAtIHVubWFwIGEgRE1BIHNjYXR0ZXJsaXN0CisgKiBzbl9kbWFfdW5tYXBfc2cgLSB1bm1hcCBhIERNQSBzY2F0dGVybGlzdAogICogQGRldjogZGV2aWNlIHRvIHVubWFwCiAgKiBAc2c6IHNjYXR0ZXJsaXN0IHRvIHVubWFwCiAgKiBAbmh3ZW50cmllczogbnVtYmVyIG9mIHNjYXR0ZXJsaXN0IGVudHJpZXMKQEAgLTIzOCw5ICsyMzUsOSBAQAogICoKICAqIFVubWFwIGEgc2V0IG9mIHN0cmVhbWluZyBtb2RlIERNQSB0cmFuc2xhdGlvbnMuCiAgKi8KLXZvaWQgc25fZG1hX3VubWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCi0JCQkgICBpbnQgbmh3ZW50cmllcywgaW50IGRpcmVjdGlvbiwKLQkJCSAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQorc3RhdGljIHZvaWQgc25fZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCisJCQkgICAgaW50IG5od2VudHJpZXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKQEAgLTI1MCwxNSArMjQ3LDE0IEBACiAJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwogCiAJZm9yX2VhY2hfc2coc2dsLCBzZywgbmh3ZW50cmllcywgaSkgewotCQlwcm92aWRlci0+ZG1hX3VubWFwKHBkZXYsIHNnLT5kbWFfYWRkcmVzcywgZGlyZWN0aW9uKTsKKwkJcHJvdmlkZXItPmRtYV91bm1hcChwZGV2LCBzZy0+ZG1hX2FkZHJlc3MsIGRpcik7CiAJCXNnLT5kbWFfYWRkcmVzcyA9IChkbWFfYWRkcl90KSBOVUxMOwogCQlzZy0+ZG1hX2xlbmd0aCA9IDA7CiAJfQogfQotRVhQT1JUX1NZTUJPTChzbl9kbWFfdW5tYXBfc2dfYXR0cnMpOwogCiAvKioKLSAqIHNuX2RtYV9tYXBfc2dfYXR0cnMgLSBtYXAgYSBzY2F0dGVybGlzdCBmb3IgRE1BCisgKiBzbl9kbWFfbWFwX3NnIC0gbWFwIGEgc2NhdHRlcmxpc3QgZm9yIERNQQogICogQGRldjogZGV2aWNlIHRvIG1hcCBmb3IKICAqIEBzZzogc2NhdHRlcmxpc3QgdG8gbWFwCiAgKiBAbmh3ZW50cmllczogbnVtYmVyIG9mIGVudHJpZXMKQEAgLTI3Miw4ICsyNjgsOSBAQAogICoKICAqIE1hcHMgZWFjaCBlbnRyeSBvZiBAc2cgZm9yIERNQS4KICAqLwotaW50IHNuX2RtYV9tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKLQkJCWludCBuaHdlbnRyaWVzLCBpbnQgZGlyZWN0aW9uLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3N0YXRpYyBpbnQgc25fZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAorCQkJIGludCBuaHdlbnRyaWVzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJdW5zaWduZWQgbG9uZyBwaHlzX2FkZHI7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzYXZlZF9zZyA9IHNnbCwgKnNnOwpAQCAtMzEwLDggKzMwNyw3IEBACiAJCQkgKiBGcmVlIGFueSBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkIGVudHJpZXMuCiAJCQkgKi8KIAkJCWlmIChpID4gMCkKLQkJCQlzbl9kbWFfdW5tYXBfc2dfYXR0cnMoZGV2LCBzYXZlZF9zZywgaSwKLQkJCQkJCSAgICAgIGRpcmVjdGlvbiwgYXR0cnMpOworCQkJCXNuX2RtYV91bm1hcF9zZyhkZXYsIHNhdmVkX3NnLCBpLCBkaXIsIGF0dHJzKTsKIAkJCXJldHVybiAwOwogCQl9CiAKQEAgLTMyMCw0MSArMzE2LDM2IEBACiAKIAlyZXR1cm4gbmh3ZW50cmllczsKIH0KLUVYUE9SVF9TWU1CT0woc25fZG1hX21hcF9zZ19hdHRycyk7CiAKLXZvaWQgc25fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0JCQkJc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCitzdGF0aWMgdm9pZCBzbl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkgICAgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CiB9Ci1FWFBPUlRfU1lNQk9MKHNuX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KTsKIAotdm9pZCBzbl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKLQkJCQkgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKK3N0YXRpYyB2b2lkIHNuX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCQkgIHNpemVfdCBzaXplLAorCQkJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CiB9Ci1FWFBPUlRfU1lNQk9MKHNuX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKTsKIAotdm9pZCBzbl9kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCSAgICBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQorc3RhdGljIHZvaWQgc25fZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewogCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKIH0KLUVYUE9SVF9TWU1CT0woc25fZG1hX3N5bmNfc2dfZm9yX2NwdSk7CiAKLXZvaWQgc25fZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkgICAgICAgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKK3N0YXRpYyB2b2lkIHNuX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCSAgICAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CiB9Ci1FWFBPUlRfU1lNQk9MKHNuX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UpOwogCi1pbnQgc25fZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKQorc3RhdGljIGludCBzbl9kbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCiB7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHNuX2RtYV9tYXBwaW5nX2Vycm9yKTsKIAogdTY0IHNuX2RtYV9nZXRfcmVxdWlyZWRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC00NzEsMyArNDYyLDIzIEBACiAgb3V0OgogCXJldHVybiByZXQ7CiB9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX21hcF9vcHMgc25fZG1hX29wcyA9IHsKKwkuYWxsb2NfY29oZXJlbnQJCT0gc25fZG1hX2FsbG9jX2NvaGVyZW50LAorCS5mcmVlX2NvaGVyZW50CQk9IHNuX2RtYV9mcmVlX2NvaGVyZW50LAorCS5tYXBfcGFnZQkJPSBzbl9kbWFfbWFwX3BhZ2UsCisJLnVubWFwX3BhZ2UJCT0gc25fZG1hX3VubWFwX3BhZ2UsCisJLm1hcF9zZwkJCT0gc25fZG1hX21hcF9zZywKKwkudW5tYXBfc2cJCT0gc25fZG1hX3VubWFwX3NnLAorCS5zeW5jX3NpbmdsZV9mb3JfY3B1IAk9IHNuX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1LAorCS5zeW5jX3NnX2Zvcl9jcHUJPSBzbl9kbWFfc3luY19zZ19mb3JfY3B1LAorCS5zeW5jX3NpbmdsZV9mb3JfZGV2aWNlID0gc25fZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UsCisJLnN5bmNfc2dfZm9yX2RldmljZQk9IHNuX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UsCisJLm1hcHBpbmdfZXJyb3IJCT0gc25fZG1hX21hcHBpbmdfZXJyb3IsCisJLmRtYV9zdXBwb3J0ZWQJCT0gc25fZG1hX3N1cHBvcnRlZCwKK307CisKK3ZvaWQgc25fZG1hX2luaXQodm9pZCkKK3sKKwlkbWFfb3BzID0gJnNuX2RtYV9vcHM7Cit9CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3RpbWUuYyBiL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jCmluZGV4IDZlYTAxNzcuLmNhZGEzYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jCkBAIC0yMzAsNyArMjMwLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTAgPSB7CiAJLmhhbmRsZXIgPSB0aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCwKLQkubWFzayA9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUgPSAiTUZUMiIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaWRlLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaWRlLmgKaW5kZXggYjk5NmEzYy4uMzk1ODcyNiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lkZS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pZGUuaApAQCAtMzAsMTAxICszMCwyOCBAQAogI2RlZmluZSBfTTY4S19JREVfSAogCiAjaWZkZWYgX19LRVJORUxfXwotCi0KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKLSNpZmRlZiBDT05GSUdfQVRBUkkKLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxhc20vYXRhcmlfc3RkbWEuaD4KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQwotI2luY2x1ZGUgPGFzbS9tYWNpbnRzLmg+Ci0jZW5kaWYKLQogLyoKICAqIEdldCByaWQgb2YgZGVmcyBmcm9tIGlvLmggLSBpZGUgaGFzIGl0cyBwcml2YXRlIGFuZCBjb25mbGljdGluZyB2ZXJzaW9ucwogICogU2luY2Ugc28gZmFyIG5vIHNpbmdsZSBtNjhrIHBsYXRmb3JtIHVzZXMgSVNBL1BDSSBJL08gc3BhY2UgZm9yIElERSwgd2UKICAqIGFsd2F5cyB1c2UgdGhlIGByYXcnIE1NSU8gdmVyc2lvbnMKICAqLwotI3VuZGVmIGluYgotI3VuZGVmIGludwotI3VuZGVmIGluc3cKLSN1bmRlZiBpbmwKLSN1bmRlZiBpbnNsCi0jdW5kZWYgb3V0YgotI3VuZGVmIG91dHcKLSN1bmRlZiBvdXRzdwotI3VuZGVmIG91dGwKLSN1bmRlZiBvdXRzbAogI3VuZGVmIHJlYWRiCiAjdW5kZWYgcmVhZHcKLSN1bmRlZiByZWFkbAogI3VuZGVmIHdyaXRlYgogI3VuZGVmIHdyaXRldwotI3VuZGVmIHdyaXRlbAogCi0jZGVmaW5lIGluYgkJCQlpbl84Ci0jZGVmaW5lIGludwkJCQlpbl9iZTE2Ci0jZGVmaW5lIGluc3cocG9ydCwgYWRkciwgbikJCXJhd19pbnN3KCh1MTYgKilwb3J0LCBhZGRyLCBuKQotI2RlZmluZSBpbmwJCQkJaW5fYmUzMgotI2RlZmluZSBpbnNsKHBvcnQsIGFkZHIsIG4pCQlyYXdfaW5zbCgodTMyICopcG9ydCwgYWRkciwgbikKLSNkZWZpbmUgb3V0Yih2YWwsIHBvcnQpCQkJb3V0XzgocG9ydCwgdmFsKQotI2RlZmluZSBvdXR3KHZhbCwgcG9ydCkJCQlvdXRfYmUxNihwb3J0LCB2YWwpCi0jZGVmaW5lIG91dHN3KHBvcnQsIGFkZHIsIG4pCQlyYXdfb3V0c3coKHUxNiAqKXBvcnQsIGFkZHIsIG4pCi0jZGVmaW5lIG91dGwodmFsLCBwb3J0KQkJCW91dF9iZTMyKHBvcnQsIHZhbCkKLSNkZWZpbmUgb3V0c2wocG9ydCwgYWRkciwgbikJCXJhd19vdXRzbCgodTMyICopcG9ydCwgYWRkciwgbikKICNkZWZpbmUgcmVhZGIJCQkJaW5fOAogI2RlZmluZSByZWFkdwkJCQlpbl9iZTE2CiAjZGVmaW5lIF9faWRlX21tX2luc3cocG9ydCwgYWRkciwgbikJcmF3X2luc3coKHUxNiAqKXBvcnQsIGFkZHIsIG4pCi0jZGVmaW5lIHJlYWRsCQkJCWluX2JlMzIKICNkZWZpbmUgX19pZGVfbW1faW5zbChwb3J0LCBhZGRyLCBuKQlyYXdfaW5zbCgodTMyICopcG9ydCwgYWRkciwgbikKICNkZWZpbmUgd3JpdGViKHZhbCwgcG9ydCkJCW91dF84KHBvcnQsIHZhbCkKICNkZWZpbmUgd3JpdGV3KHZhbCwgcG9ydCkJCW91dF9iZTE2KHBvcnQsIHZhbCkKICNkZWZpbmUgX19pZGVfbW1fb3V0c3cocG9ydCwgYWRkciwgbikJcmF3X291dHN3KCh1MTYgKilwb3J0LCBhZGRyLCBuKQotI2RlZmluZSB3cml0ZWwodmFsLCBwb3J0KQkJb3V0X2JlMzIocG9ydCwgdmFsKQogI2RlZmluZSBfX2lkZV9tbV9vdXRzbChwb3J0LCBhZGRyLCBuKQlyYXdfb3V0c2woKHUzMiAqKXBvcnQsIGFkZHIsIG4pCi0jaWYgZGVmaW5lZChDT05GSUdfQVRBUkkpIHx8IGRlZmluZWQoQ09ORklHX1E0MCkKLSNkZWZpbmUgaW5zd19zd2Fwdyhwb3J0LCBhZGRyLCBuKQlyYXdfaW5zd19zd2FwdygodTE2ICopcG9ydCwgYWRkciwgbikKLSNkZWZpbmUgb3V0c3dfc3dhcHcocG9ydCwgYWRkciwgbikJcmF3X291dHN3X3N3YXB3KCh1MTYgKilwb3J0LCBhZGRyLCBuKQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9GQUxDT05fSURFCi0jZGVmaW5lIElERV9BUkNIX0xPQ0sKLQotZXh0ZXJuIGludCBmYWxjb25pZGVfaW50cl9sb2NrOwotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGlkZV9yZWxlYXNlX2xvY2sgKHZvaWQpCi17Ci0JaWYgKE1BQ0hfSVNfQVRBUkkpIHsKLQkJaWYgKGZhbGNvbmlkZV9pbnRyX2xvY2sgPT0gMCkgewotCQkJcHJpbnRrKCJpZGVfcmVsZWFzZV9sb2NrOiBidWdcbiIpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWZhbGNvbmlkZV9pbnRyX2xvY2sgPSAwOwotCQlzdGRtYV9yZWxlYXNlKCk7Ci0JfQotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkCi1pZGVfZ2V0X2xvY2soaXJxX2hhbmRsZXJfdCBoYW5kbGVyLCB2b2lkICpkYXRhKQotewotCWlmIChNQUNIX0lTX0FUQVJJKSB7Ci0JCWlmIChmYWxjb25pZGVfaW50cl9sb2NrID09IDApIHsKLQkJCWlmIChpbl9pbnRlcnJ1cHQoKSA+IDApCi0JCQkJcGFuaWMoICJGYWxjb24gSURFIGhhc24ndCBTVC1ETUEgbG9jayBpbiBpbnRlcnJ1cHQiICk7Ci0JCQlzdGRtYV9sb2NrKGhhbmRsZXIsIGRhdGEpOwotCQkJZmFsY29uaWRlX2ludHJfbG9jayA9IDE7Ci0JCX0KLQl9Ci19Ci0jZW5kaWYgLyogQ09ORklHX0JMS19ERVZfRkFMQ09OX0lERSAqLwotCi0jZGVmaW5lIElERV9BUkNIX0FDS19JTlRSCi0jZGVmaW5lIGlkZV9hY2tfaW50cihod2lmKQkoKGh3aWYpLT5hY2tfaW50ciA/IChod2lmKS0+YWNrX2ludHIoaHdpZikgOiAxKQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9NNjhLX0lERV9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IDIwNmNiNzkuLmRjNzg3MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC03Nyw3ICs3Nyw2IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAogY29uZmlnIE1BQ0hfREVDU1RBVElPTgogCWJvb2wgIkRFQ3N0YXRpb25zIgpAQCAtMTMyLDcgKzEzMSw2IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTCBpZiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzEwMEhaCi0Jc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQogCWhlbHAKIAkgVGhpcyBhIGZhbWlseSBvZiBtYWNoaW5lcyBiYXNlZCBvbiB0aGUgTUlQUyBSNDAzMCBjaGlwc2V0IHdoaWNoIHdhcwogCSB1c2VkIGJ5IHNldmVyYWwgdmVuZG9ycyB0byBidWlsZCBSSVNDL29zIGFuZCBXaW5kb3dzIE5UIHdvcmtzdGF0aW9ucy4KQEAgLTE1NCw3ICsxNTIsNiBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwgaWYgQlJPS0VOCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCi0Jc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQogCiBjb25maWcgTEVNT1RFX0ZVTE9ORwogCWJvb2wgIkxlbW90ZSBGdWxvbmcgbWluaS1QQyIKQEAgLTE3NSw3ICsxNzIsNiBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfSElHSE1FTQogCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAlzZWxlY3QgR0VORVJJQ19JU0FfRE1BX1NVUFBPUlRfQlJPS0VOCiAJc2VsZWN0IENQVV9IQVNfV0IKIAloZWxwCkBAIC0yNTAsNyArMjQ2LDYgQEAKIAlzZWxlY3QgQ0VWVF9SNEsKIAlzZWxlY3QgQ1NSQ19SNEsKIAlzZWxlY3QgU1lTX0hBU19DUFVfVlI0MVhYCi0Jc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQogCiBjb25maWcgTlhQX1NUQjIyMAogCWJvb2wgIk5YUCBTVEIyMjAgYm9hcmQiCkBAIC0zNjQsNyArMzU5LDYgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KIAlzZWxlY3QgU1lTX1NVUFBPUlRTX05VTUEKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1NNUAotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAloZWxwCiAJICBUaGlzIGFyZSB0aGUgU0dJIE9yaWdpbiAyMDAsIE9yaWdpbiAyMDAwIGFuZCBPbnl4IDIgR3JhcGhpY3MKIAkgIHdvcmtzdGF0aW9ucy4gIFRvIGNvbXBpbGUgYSBMaW51eCBrZXJuZWwgdGhhdCBydW5zIG9uIHRoZXNlLCBzYXkgWQpAQCAtNTYzLDcgKzU1Nyw2IEBACiAJc2VsZWN0IENFVlRfUjRLCiAJc2VsZWN0IENTUkNfUjRLCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBJUlFfQ1BVCiAJc2VsZWN0IFNZU19IQVNfQ1BVX01JUFMzMl9SMQpAQCAtNzAwLDggKzY5Myw3IEBACiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKLQlib29sCi0JZGVmYXVsdCBuCisJZGVmX2Jvb2wgeQogCiAjCiAjIFNlbGVjdCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHVzZXIgc2VsZWN0aW9ucy4KQEAgLTkyMCw3ICs5MTIsNiBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAJc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCi0Jc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQogCXNlbGVjdCBHRU5FUklDX0dQSU8KIAlzZWxlY3QgQ1BVX01JUFNSMl9JUlFfVkkKIApAQCAtOTM5LDcgKzkzMCw2IEBACiAJc2VsZWN0IFNZU19IQVNfQ1BVX01JUFMzMl9SMQogCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCi0Jc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQogCXNlbGVjdCBHRU5FUklDX0dQSU8KIAogY29uZmlnIFNXQVBfSU9fU1BBQ0UKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9NYWtlZmlsZSBiL2FyY2gvbWlwcy9NYWtlZmlsZQppbmRleCAyMmRhYjJlLi44ZDU0NGM3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL01ha2VmaWxlCkBAIC03MjAsMTEgKzcyMCwxNyBAQAogCSQoUSkkKE1BS0UpICQoYnVpbGQpPS4gbWlzc2luZy1zeXNjYWxscyBFWFRSQV9DRkxBR1M9Ii1tYWJpPTMyIgogZW5kaWYKIAoraW5zdGFsbDoKKwkkKFEpaW5zdGFsbCAtRCAtbSA3NTUgdm1saW51eCAkKElOU1RBTExfUEFUSCkvdm1saW51eC0kKEtFUk5FTFJFTEVBU0UpCisJJChRKWluc3RhbGwgLUQgLW0gNjQ0IC5jb25maWcgJChJTlNUQUxMX1BBVEgpL2NvbmZpZy0kKEtFUk5FTFJFTEVBU0UpCisJJChRKWluc3RhbGwgLUQgLW0gNjQ0IFN5c3RlbS5tYXAgJChJTlNUQUxMX1BBVEgpL1N5c3RlbS5tYXAtJChLRVJORUxSRUxFQVNFKQorCiBhcmNoY2xlYW46CiAJQCQoTUFLRSkgJChjbGVhbik9YXJjaC9taXBzL2Jvb3QKIAlAJChNQUtFKSAkKGNsZWFuKT1hcmNoL21pcHMvbGFzYXQKIAogZGVmaW5lIGFyY2hoZWxwCisJZWNobyAnICBpbnN0YWxsICAgICAgICAgICAgICAtIGluc3RhbGwga2VybmVsIGludG8gJChJTlNUQUxMX1BBVEgpJwogCWVjaG8gJyAgdm1saW51eC5lY29mZiAgICAgICAgLSBFQ09GRiBib290IGltYWdlJwogCWVjaG8gJyAgdm1saW51eC5iaW4gICAgICAgICAgLSBSYXcgYmluYXJ5IGJvb3QgaW1hZ2UnCiAJZWNobyAnICB2bWxpbnV4LnNyZWMgICAgICAgICAtIFNSRUMgYm9vdCBpbWFnZScKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L0tjb25maWcgYi9hcmNoL21pcHMvYWxjaGVteS9LY29uZmlnCmluZGV4IDdmOGVmMTMuLjgxMjhhZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L0tjb25maWcKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvS2NvbmZpZwpAQCAtMTM0LDQgKzEzNCw0IEBACiAJc2VsZWN0IFNZU19IQVNfQ1BVX01JUFMzMl9SMQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OCi0Jc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQorCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2dwaW8uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9ncGlvLmMKaW5kZXggZTY2MGRkZC4uOTFhOWM0NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2dwaW8uYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZ3Bpby5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcsIE9wZW5XcnQub3JnLCBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA5LCBPcGVuV3J0Lm9yZywgRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KICAqICAJQXJjaGl0ZWN0dXJlIHNwZWNpZmljIEdQSU8gc3VwcG9ydAogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUJIGl0IGFuZC9vciBtb2RpZnkgaXQKQEAgLTI3LDEyMiArMjcsMTc1IEBACiAgKiAJb3RoZXJzIGhhdmUgYSBzZWNvbmQgb25lIDogR1BJTzIKICAqLwogCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CiAjaW5jbHVkZSA8YXNtL2dwaW8uaD4KIAotI2RlZmluZSBncGlvMSBzeXMKK3N0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwIHsKKwlzdHJ1Y3QgZ3Bpb19jaGlwCWNoaXA7CisJdm9pZCBfX2lvbWVtCQkqcmVnYmFzZTsKK307CisKICNpZiAhZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQotc3RhdGljIHN0cnVjdCBhdTF4MDBfZ3BpbzIgKmNvbnN0IGdwaW8yID0gKHN0cnVjdCBhdTF4MDBfZ3BpbzIgKikgR1BJTzJfQkFTRTsKLSNkZWZpbmUgR1BJTzJfT1VUUFVUX0VOQUJMRV9NQVNLIAkweDAwMDEwMDAwCi0KLXN0YXRpYyBpbnQgYXUxeHh4X2dwaW8yX3JlYWQodW5zaWduZWQgZ3BpbykKK3N0YXRpYyBpbnQgYXUxMDAwX2dwaW8yX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0JZ3BpbyAtPSBBVTFYWFhfR1BJT19CQVNFOwotCXJldHVybiAoKGdwaW8yLT5waW5zdGF0ZSA+PiBncGlvKSAmIDB4MDEpOworCXUzMiBtYXNrID0gMSA8PCBvZmZzZXQ7CisJc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAgKmdwY2g7CisKKwlncGNoID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwLCBjaGlwKTsKKwlyZXR1cm4gcmVhZGwoZ3BjaC0+cmVnYmFzZSArIEFVMTAwMF9HUElPMl9TVCkgJiBtYXNrOwogfQogCi1zdGF0aWMgdm9pZCBhdTF4eHhfZ3BpbzJfd3JpdGUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQorc3RhdGljIHZvaWQgYXUxMDAwX2dwaW8yX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCXVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQogewotCWdwaW8gLT0gQVUxWFhYX0dQSU9fQkFTRTsKKwl1MzIgbWFzayA9ICgoR1BJTzJfT1VUX0VOX01BU0sgPDwgb2Zmc2V0KSB8ICghIXZhbHVlIDw8IG9mZnNldCkpOworCXN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwICpncGNoOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlncGlvMi0+b3V0cHV0ID0gKEdQSU8yX09VVFBVVF9FTkFCTEVfTUFTSyA8PCBncGlvKSB8ICgoISF2YWx1ZSkgPDwgZ3Bpbyk7CisJZ3BjaCA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCwgY2hpcCk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJd3JpdGVsKG1hc2ssIGdwY2gtPnJlZ2Jhc2UgKyBBVTEwMDBfR1BJTzJfT1VUKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgYXUxeHh4X2dwaW8yX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKQorc3RhdGljIGludCBhdTEwMDBfZ3BpbzJfZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKLQlncGlvIC09IEFVMVhYWF9HUElPX0JBU0U7Ci0JZ3BpbzItPmRpciAmPSB+KDB4MDEgPDwgZ3Bpbyk7CisJdTMyIG1hc2sgPSAxIDw8IG9mZnNldDsKKwl1MzIgdG1wOworCXN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwICpncGNoOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlncGNoID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwLCBjaGlwKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl0bXAgPSByZWFkbChncGNoLT5yZWdiYXNlICsgQVUxMDAwX0dQSU8yX0RJUik7CisJdG1wICY9IH5tYXNrOworCXdyaXRlbCh0bXAsIGdwY2gtPnJlZ2Jhc2UgKyBBVTEwMDBfR1BJTzJfRElSKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhdTF4eHhfZ3BpbzJfZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IGF1MTAwMF9ncGlvMl9kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCXVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQogewotCWdwaW8gLT0gQVUxWFhYX0dQSU9fQkFTRTsKLQlncGlvMi0+ZGlyIHw9IDB4MDEgPDwgZ3BpbzsKLQlncGlvMi0+b3V0cHV0ID0gKEdQSU8yX09VVFBVVF9FTkFCTEVfTUFTSyA8PCBncGlvKSB8ICgoISF2YWx1ZSkgPDwgZ3Bpbyk7CisJdTMyIG1hc2sgPSAxIDw8IG9mZnNldDsKKwl1MzIgb3V0X21hc2sgPSAoKEdQSU8yX09VVF9FTl9NQVNLIDw8IG9mZnNldCkgfCAoISF2YWx1ZSA8PCBvZmZzZXQpKTsKKwl1MzIgdG1wOworCXN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwICpncGNoOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlncGNoID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwLCBjaGlwKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl0bXAgPSByZWFkbChncGNoLT5yZWdiYXNlICsgQVUxMDAwX0dQSU8yX0RJUik7CisJdG1wIHw9IG1hc2s7CisJd3JpdGVsKHRtcCwgZ3BjaC0+cmVnYmFzZSArIEFVMTAwMF9HUElPMl9ESVIpOworCXdyaXRlbChvdXRfbWFzaywgZ3BjaC0+cmVnYmFzZSArIEFVMTAwMF9HUElPMl9PVVQpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwogCXJldHVybiAwOwogfQotCiAjZW5kaWYgLyogIWRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApICovCiAKLXN0YXRpYyBpbnQgYXUxeHh4X2dwaW8xX3JlYWQodW5zaWduZWQgZ3BpbykKK3N0YXRpYyBpbnQgYXUxMDAwX2dwaW8xX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0JcmV0dXJuIChncGlvMS0+cGluc3RhdGVyZCA+PiBncGlvKSAmIDB4MDE7CisJdTMyIG1hc2sgPSAxIDw8IG9mZnNldDsKKwlzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCAqZ3BjaDsKKworCWdwY2ggPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAsIGNoaXApOworCXJldHVybiByZWFkbChncGNoLT5yZWdiYXNlICsgQVUxMDAwX0dQSU8xX1NUKSAmIG1hc2s7CiB9CiAKLXN0YXRpYyB2b2lkIGF1MXh4eF9ncGlvMV93cml0ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCitzdGF0aWMgdm9pZCBhdTEwMDBfZ3BpbzFfc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCiB7CisJdTMyIG1hc2sgPSAxIDw8IG9mZnNldDsKKwl1MzIgcmVnX29mZnNldDsKKwlzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCAqZ3BjaDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZ3BjaCA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCwgY2hpcCk7CisKIAlpZiAodmFsdWUpCi0JCWdwaW8xLT5vdXRwdXRzZXQgPSAoMHgwMSA8PCBncGlvKTsKKwkJcmVnX29mZnNldCA9IEFVMTAwMF9HUElPMV9PVVQ7CiAJZWxzZQotCQkvKiBPdXRwdXQgYSB6ZXJvICovCi0JCWdwaW8xLT5vdXRwdXRjbHIgPSAoMHgwMSA8PCBncGlvKTsKKwkJcmVnX29mZnNldCA9IEFVMTAwMF9HUElPMV9DTFI7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJd3JpdGVsKG1hc2ssIGdwY2gtPnJlZ2Jhc2UgKyByZWdfb2Zmc2V0KTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgYXUxeHh4X2dwaW8xX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKQorc3RhdGljIGludCBhdTEwMDBfZ3BpbzFfZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKLQlncGlvMS0+cGluaW5wdXRlbiA9ICgweDAxIDw8IGdwaW8pOworCXUzMiBtYXNrID0gMSA8PCBvZmZzZXQ7CisJc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAgKmdwY2g7CisKKwlncGNoID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwLCBjaGlwKTsKKwl3cml0ZWwobWFzaywgZ3BjaC0+cmVnYmFzZSArIEFVMTAwMF9HUElPMV9TVCk7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhdTF4eHhfZ3BpbzFfZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IGF1MTAwMF9ncGlvMV9kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCXVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQogewotCWdwaW8xLT50cmlvdXRjbHIgPSAoMHgwMSAmIGdwaW8pOwotCWF1MXh4eF9ncGlvMV93cml0ZShncGlvLCB2YWx1ZSk7CisJdTMyIG1hc2sgPSAxIDw8IG9mZnNldDsKKwlzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCAqZ3BjaDsKKworCWdwY2ggPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAsIGNoaXApOworCisJd3JpdGVsKG1hc2ssIGdwY2gtPnJlZ2Jhc2UgKyBBVTEwMDBfR1BJTzFfVFJJX09VVCk7CisJYXUxMDAwX2dwaW8xX3NldChjaGlwLCBvZmZzZXQsIHZhbHVlKTsKKwogCXJldHVybiAwOwogfQogCi1pbnQgYXUxeHh4X2dwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCi17Ci0JaWYgKGdwaW8gPj0gQVUxWFhYX0dQSU9fQkFTRSkKLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCQlyZXR1cm4gMDsKLSNlbHNlCi0JCXJldHVybiBhdTF4eHhfZ3BpbzJfcmVhZChncGlvKTsKK3N0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwIGF1MTAwMF9ncGlvX2NoaXBbXSA9IHsKKwlbMF0gPSB7CisJCS5yZWdiYXNlCQkJPSAodm9pZCBfX2lvbWVtICopU1lTX0JBU0UsCisJCS5jaGlwID0geworCQkJLmxhYmVsCQkJPSAiYXUxMDAwLWdwaW8xIiwKKwkJCS5kaXJlY3Rpb25faW5wdXQJPSBhdTEwMDBfZ3BpbzFfZGlyZWN0aW9uX2lucHV0LAorCQkJLmRpcmVjdGlvbl9vdXRwdXQJPSBhdTEwMDBfZ3BpbzFfZGlyZWN0aW9uX291dHB1dCwKKwkJCS5nZXQJCQk9IGF1MTAwMF9ncGlvMV9nZXQsCisJCQkuc2V0CQkJPSBhdTEwMDBfZ3BpbzFfc2V0LAorCQkJLmJhc2UJCQk9IDAsCisJCQkubmdwaW8JCQk9IDMyLAorCQl9LAorCX0sCisjaWYgIWRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCisJWzFdID0geworCQkucmVnYmFzZSAgICAgICAgICAgICAgICAgICAgICAgID0gKHZvaWQgX19pb21lbSAqKUdQSU8yX0JBU0UsCisJCS5jaGlwID0geworCQkJLmxhYmVsICAgICAgICAgICAgICAgICAgPSAiYXUxMDAwLWdwaW8yIiwKKwkJCS5kaXJlY3Rpb25faW5wdXQgICAgICAgID0gYXUxMDAwX2dwaW8yX2RpcmVjdGlvbl9pbnB1dCwKKwkJCS5kaXJlY3Rpb25fb3V0cHV0ICAgICAgID0gYXUxMDAwX2dwaW8yX2RpcmVjdGlvbl9vdXRwdXQsCisJCQkuZ2V0ICAgICAgICAgICAgICAgICAgICA9IGF1MTAwMF9ncGlvMl9nZXQsCisJCQkuc2V0ICAgICAgICAgICAgICAgICAgICA9IGF1MTAwMF9ncGlvMl9zZXQsCisJCQkuYmFzZSAgICAgICAgICAgICAgICAgICA9IEFVMVhYWF9HUElPX0JBU0UsCisJCQkubmdwaW8gICAgICAgICAgICAgICAgICA9IDMyLAorCQl9LAorCX0sCiAjZW5kaWYKLQllbHNlCi0JCXJldHVybiBhdTF4eHhfZ3BpbzFfcmVhZChncGlvKTsKLX0KLUVYUE9SVF9TWU1CT0woYXUxeHh4X2dwaW9fZ2V0X3ZhbHVlKTsKK307CiAKLXZvaWQgYXUxeHh4X2dwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgX19pbml0IGF1MTAwMF9ncGlvX2luaXQodm9pZCkKIHsKLQlpZiAoZ3BpbyA+PSBBVTFYWFhfR1BJT19CQVNFKQotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JCTsKLSNlbHNlCi0JCWF1MXh4eF9ncGlvMl93cml0ZShncGlvLCB2YWx1ZSk7Ci0jZW5kaWYKLQllbHNlCi0JCWF1MXh4eF9ncGlvMV93cml0ZShncGlvLCB2YWx1ZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGF1MXh4eF9ncGlvX3NldF92YWx1ZSk7Ci0KLWludCBhdTF4eHhfZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKLXsKLQlpZiAoZ3BpbyA+PSBBVTFYWFhfR1BJT19CQVNFKQotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JCXJldHVybiAtRU5PREVWOwotI2Vsc2UKLQkJcmV0dXJuIGF1MXh4eF9ncGlvMl9kaXJlY3Rpb25faW5wdXQoZ3Bpbyk7CisJZ3Bpb2NoaXBfYWRkKCZhdTEwMDBfZ3Bpb19jaGlwWzBdLmNoaXApOworI2lmICFkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQorCWdwaW9jaGlwX2FkZCgmYXUxMDAwX2dwaW9fY2hpcFsxXS5jaGlwKTsKICNlbmRpZgogCi0JcmV0dXJuIGF1MXh4eF9ncGlvMV9kaXJlY3Rpb25faW5wdXQoZ3Bpbyk7CisJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGF1MXh4eF9ncGlvX2RpcmVjdGlvbl9pbnB1dCk7CithcmNoX2luaXRjYWxsKGF1MTAwMF9ncGlvX2luaXQpOwogCi1pbnQgYXUxeHh4X2dwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCi17Ci0JaWYgKGdwaW8gPj0gQVUxWFhYX0dQSU9fQkFTRSkKLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCQlyZXR1cm4gLUVOT0RFVjsKLSNlbHNlCi0JCXJldHVybiBhdTF4eHhfZ3BpbzJfZGlyZWN0aW9uX291dHB1dChncGlvLCB2YWx1ZSk7Ci0jZW5kaWYKLQotCXJldHVybiBhdTF4eHhfZ3BpbzFfZGlyZWN0aW9uX291dHB1dChncGlvLCB2YWx1ZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGF1MXh4eF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9wbGF0Zm9ybS5jCmluZGV4IDk1MzAzMjkuLjBkNjhlMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL3BsYXRmb3JtLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTExMDBfbW1jLmg+CkBAIC0xMzEsNiArMTMyLDEyIEBACiAJLnJlc291cmNlCT0gaWRlX3Jlc291cmNlcwogfTsKIAorc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgc21jX2RhdGEgPSB7CisJLmZsYWdzCT0gU01DOTFYX05PV0FJVCB8IFNNQzkxWF9VU0VfMTZCSVQsCisJLmxlZGEJPSBSUENfTEVEXzEwMF8xMCwKKwkubGVkYgk9IFJQQ19MRURfVFhfUlgsCit9OworCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxYzExMV9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5uYW1lCT0gInNtYzkxeC1yZWdzIiwKQEAgLTE0Niw2ICsxNTMsOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21jOTFjMTExX2RldmljZSA9IHsKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzbWNfZGF0YSwKKwl9LAogCS5uYW1lCQk9ICJzbWM5MXgiLAogCS5pZAkJPSAtMSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21jOTFjMTExX3Jlc291cmNlcyksCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9NYWtlZmlsZSBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL01ha2VmaWxlCmluZGV4IDFjMmE3ZmEuLmQ2OTAzYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL01ha2VmaWxlCkBAIC0xNCwzICsxNCw1IEBACiBvYmoteSArPSBvY3Rlb24tbWVtY3B5Lm8KIAogb2JqLSQoQ09ORklHX1NNUCkgICAgICAgICAgICAgICAgICAgICArPSBzbXAubworCitFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZmxhc2hfc2V0dXAuYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2ZsYXNoX3NldHVwLmMKaW5kZXggNTUzZDM2Yy4uMDA4ZjY1NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZmxhc2hfc2V0dXAuYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9mbGFzaF9zZXR1cC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJCWZsYXNoX21hcC5iYW5rd2lkdGggPSAxOwogCQlmbGFzaF9tYXAudmlydCA9IGlvcmVtYXAoZmxhc2hfbWFwLnBoeXMsIGZsYXNoX21hcC5zaXplKTsKIAkJcHJfbm90aWNlKCJCb290YnVzIGZsYXNoOiBTZXR0aW5nIGZsYXNoIGZvciAlbHVNQiBmbGFzaCBhdCAiCi0JCQkgICIweCUwOGx4XG4iLCBmbGFzaF9tYXAuc2l6ZSA+PiAyMCwgZmxhc2hfbWFwLnBoeXMpOworCQkJICAiMHglMDhsbHhcbiIsIGZsYXNoX21hcC5zaXplID4+IDIwLCBmbGFzaF9tYXAucGh5cyk7CiAJCXNpbXBsZV9tYXBfaW5pdCgmZmxhc2hfbWFwKTsKIAkJbXltdGQgPSBkb19tYXBfcHJvYmUoImNmaV9wcm9iZSIsICZmbGFzaF9tYXApOwogCQlpZiAobXltdGQpIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1pcnEuYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1pcnEuYwppbmRleCBmYzcyOTg0Li4xYzE5YWY4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jCkBAIC0zMSw3ICszMSw3IEBACiAKIHN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY29yZV9lb2kodW5zaWduZWQgaW50IGlycSkKIHsKLQlpcnFfZGVzY190ICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CiAJdW5zaWduZWQgaW50IGJpdCA9IGlycSAtIE9DVEVPTl9JUlFfU1cwOwogCS8qCiAJICogSWYgYW4gSVJRIGlzIGJlaW5nIHByb2Nlc3NlZCB3aGlsZSB3ZSBhcmUgZGlzYWJsaW5nIGl0IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvYmFsdC9pcnEuYyBiL2FyY2gvbWlwcy9jb2JhbHQvaXJxLmMKaW5kZXggYWM0ZmI5MS4uY2I5YmY4MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvYmFsdC9pcnEuYworKysgYi9hcmNoL21pcHMvY29iYWx0L2lycS5jCkBAIC00Nyw3ICs0Nyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGNhc2NhZGUgPSB7CiAJLmhhbmRsZXIJPSBub19hY3Rpb24sCi0JLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZQkJPSAiY2FzY2FkZSIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZW1tYS9tYXJrZWlucy9pcnEuYyBiL2FyY2gvbWlwcy9lbW1hL21hcmtlaW5zL2lycS5jCmluZGV4IGMyNTgzZWMuLjQzODI4YWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9lbW1hL21hcmtlaW5zL2lycS5jCisrKyBiL2FyY2gvbWlwcy9lbW1hL21hcmtlaW5zL2lycS5jCkBAIC04MCw5ICs4MCw5IEBACiAJdTMyIGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0VNTUEyUkhfSVJROyBpKyspCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihFTU1BMlJIX0lSUV9CQVNFICsgaSwKLQkJCQkJICZlbW1hMnJoX2lycV9jb250cm9sbGVyLAotCQkJCQkgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKEVNTUEyUkhfSVJRX0JBU0UgKyBpLAorCQkJCQkgICAgICAmZW1tYTJyaF9pcnFfY29udHJvbGxlciwKKwkJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgImxldmVsIik7CiB9CiAKIHN0YXRpYyB2b2lkIGVtbWEycmhfc3dfaXJxX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMTIwLDkgKzEyMCw5IEBACiAJdTMyIGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0VNTUEyUkhfSVJRX1NXOyBpKyspCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihFTU1BMlJIX1NXX0lSUV9CQVNFICsgaSwKLQkJCQkJICZlbW1hMnJoX3N3X2lycV9jb250cm9sbGVyLAotCQkJCQkgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKEVNTUEyUkhfU1dfSVJRX0JBU0UgKyBpLAorCQkJCQkgICAgICAmZW1tYTJyaF9zd19pcnFfY29udHJvbGxlciwKKwkJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgImxldmVsIik7CiB9CiAKIHN0YXRpYyB2b2lkIGVtbWEycmhfZ3Bpb19pcnFfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpCkBAIC0xNDksNiArMTQ5LDEyIEBACiAKIHN0YXRpYyB2b2lkIGVtbWEycmhfZ3Bpb19pcnFfYWNrKHVuc2lnbmVkIGludCBpcnEpCiB7CisJaXJxIC09IEVNTUEyUkhfR1BJT19JUlFfQkFTRTsKKwllbW1hMnJoX291dDMyKEVNTUEyUkhfR1BJT19JTlRfU1QsIH4oMSA8PCBpcnEpKTsKK30KKworc3RhdGljIHZvaWQgZW1tYTJyaF9ncGlvX2lycV9tYXNrX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQorewogCXUzMiByZWc7CiAKIAlpcnEgLT0gRU1NQTJSSF9HUElPX0lSUV9CQVNFOwpAQCAtMTU5LDI3ICsxNjUsMTIgQEAKIAllbW1hMnJoX291dDMyKEVNTUEyUkhfR1BJT19JTlRfTUFTSywgcmVnKTsKIH0KIAotc3RhdGljIHZvaWQgZW1tYTJyaF9ncGlvX2lycV9lbmQodW5zaWduZWQgaW50IGlycSkKLXsKLQl1MzIgcmVnOwotCi0JaWYgKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEIHwgSVJRX0lOUFJPR1JFU1MpKSkgewotCi0JCWlycSAtPSBFTU1BMlJIX0dQSU9fSVJRX0JBU0U7Ci0KLQkJcmVnID0gZW1tYTJyaF9pbjMyKEVNTUEyUkhfR1BJT19JTlRfTUFTSyk7Ci0JCXJlZyB8PSAxIDw8IGlycTsKLQkJZW1tYTJyaF9vdXQzMihFTU1BMlJIX0dQSU9fSU5UX01BU0ssIHJlZyk7Ci0JfQotfQotCiBzdHJ1Y3QgaXJxX2NoaXAgZW1tYTJyaF9ncGlvX2lycV9jb250cm9sbGVyID0gewogCS5uYW1lID0gImVtbWEycmhfZ3Bpb19pcnEiLAogCS5hY2sgPSBlbW1hMnJoX2dwaW9faXJxX2FjaywKIAkubWFzayA9IGVtbWEycmhfZ3Bpb19pcnFfZGlzYWJsZSwKLQkubWFza19hY2sgPSBlbW1hMnJoX2dwaW9faXJxX2FjaywKKwkubWFza19hY2sgPSBlbW1hMnJoX2dwaW9faXJxX21hc2tfYWNrLAogCS51bm1hc2sgPSBlbW1hMnJoX2dwaW9faXJxX2VuYWJsZSwKLQkuZW5kID0gZW1tYTJyaF9ncGlvX2lycV9lbmQsCiB9OwogCiB2b2lkIGVtbWEycmhfZ3Bpb19pcnFfaW5pdCh2b2lkKQpAQCAtMTg3LDE0ICsxNzgsMTQgQEAKIAl1MzIgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1fRU1NQTJSSF9JUlFfR1BJTzsgaSsrKQotCQlzZXRfaXJxX2NoaXAoRU1NQTJSSF9HUElPX0lSUV9CQVNFICsgaSwKLQkJCSAgICAgJmVtbWEycmhfZ3Bpb19pcnFfY29udHJvbGxlcik7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKEVNTUEyUkhfR1BJT19JUlFfQkFTRSArIGksCisJCQkJCSAgICAgICZlbW1hMnJoX2dwaW9faXJxX2NvbnRyb2xsZXIsCisJCQkJCSAgICAgIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX2Nhc2NhZGUgPSB7CiAJICAgLmhhbmRsZXIgPSBub19hY3Rpb24sCiAJICAgLmZsYWdzID0gMCwKLQkgICAubWFzayA9IENQVV9NQVNLX05PTkUsCiAJICAgLm5hbWUgPSAiY2FzY2FkZSIsCiAJICAgLmRldl9pZCA9IE5VTEwsCiAJICAgLm5leHQgPSBOVUxMLApAQCAtMjEzLDggKzIwNCw3IEBACiAJCSAgICBlbW1hMnJoX2luMzIoRU1NQTJSSF9CSElGX0lOVF9FTl8wKTsKIAogI2lmZGVmIEVNTUEyUkhfU1dfQ0FTQ0FERQotCWlmIChpbnRTdGF0dXMgJgotCSAgICAoMSA8PCAoKEVNTUEyUkhfU1dfQ0FTQ0FERSAtIEVNTUEyUkhfSVJRX0lOVDApICYgKDMyIC0gMSkpKSkgeworCWlmIChpbnRTdGF0dXMgJiAoMVVMIDw8IEVNTUEyUkhfU1dfQ0FTQ0FERSkpIHsKIAkJdTMyIHN3SW50U3RhdHVzOwogCQlzd0ludFN0YXR1cyA9IGVtbWEycmhfaW4zMihFTU1BMlJIX0JISUZfU1dfSU5UKQogCQkgICAgJiBlbW1hMnJoX2luMzIoRU1NQTJSSF9CSElGX1NXX0lOVF9FTik7CkBAIC0yMjUsNiArMjE1LDggQEAKIAkJCX0KIAkJfQogCX0KKwkvKiBTa2lwIFMvVyBpbnRlcnJ1cHQgKi8KKwlpbnRTdGF0dXMgJj0gfigxVUwgPDwgRU1NQTJSSF9TV19DQVNDQURFKTsKICNlbmRpZgogCiAJZm9yIChpID0gMCwgYml0bWFzayA9IDE7IGkgPCAzMjsgaSsrLCBiaXRtYXNrIDw8PSAxKSB7CkBAIC0yMzgsOCArMjMwLDcgQEAKIAkJICAgIGVtbWEycmhfaW4zMihFTU1BMlJIX0JISUZfSU5UX0VOXzEpOwogCiAjaWZkZWYgRU1NQTJSSF9HUElPX0NBU0NBREUKLQlpZiAoaW50U3RhdHVzICYKLQkgICAgKDEgPDwgKChFTU1BMlJIX0dQSU9fQ0FTQ0FERSAtIEVNTUEyUkhfSVJRX0lOVDApICYgKDMyIC0gMSkpKSkgeworCWlmIChpbnRTdGF0dXMgJiAoMVVMIDw8IChFTU1BMlJIX0dQSU9fQ0FTQ0FERSAlIDMyKSkpIHsKIAkJdTMyIGdwaW9JbnRTdGF0dXM7CiAJCWdwaW9JbnRTdGF0dXMgPSBlbW1hMnJoX2luMzIoRU1NQTJSSF9HUElPX0lOVF9TVCkKIAkJICAgICYgZW1tYTJyaF9pbjMyKEVNTUEyUkhfR1BJT19JTlRfTUFTSyk7CkBAIC0yNTAsNiArMjQxLDggQEAKIAkJCX0KIAkJfQogCX0KKwkvKiBTa2lwIEdQSU8gaW50ZXJydXB0ICovCisJaW50U3RhdHVzICY9IH4oMVVMIDw8IChFTU1BMlJIX0dQSU9fQ0FTQ0FERSAlIDMyKSk7CiAjZW5kaWYKIAogCWZvciAoaSA9IDMyLCBiaXRtYXNrID0gMTsgaSA8IDY0OyBpKyssIGJpdG1hc2sgPDw9IDEpIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9lbW1hL21hcmtlaW5zL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvZW1tYS9tYXJrZWlucy9wbGF0Zm9ybS5jCmluZGV4IGQ1ZjQ3ZTQuLjgwYWUxMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9lbW1hL21hcmtlaW5zL3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2VtbWEvbWFya2VpbnMvcGxhdGZvcm0uYwpAQCAtMTEwLDYgKzExMCw3IEBACiBzdGF0aWMgc3RydWN0ICBwbGF0X3NlcmlhbDgyNTBfcG9ydCBwbGF0Zm9ybV9zZXJpYWxfcG9ydHNbXSA9IHsKIAlbMF0gPSB7CiAJCS5tZW1iYXNlPSAodm9pZCBfX2lvbWVtKilLU0VHMUFERFIoRU1NQTJSSF9QRlVSMF9CQVNFICsgMyksCisJCS5tYXBiYXNlID0gRU1NQTJSSF9QRlVSMF9CQVNFICsgMywKIAkJLmlycSA9IEVNTUEyUkhfSVJRX1BGVVIwLAogCQkudWFydGNsayA9IEVNTUEyUkhfU0VSSUFMX0NMT0NLLAogCQkucmVnc2hpZnQgPSA0LApAQCAtMTE3LDYgKzExOCw3IEBACiAJCS5mbGFncyA9IEVNTUEyUkhfU0VSSUFMX0ZMQUdTLAogICAgICAgIH0sIFsxXSA9IHsKIAkJLm1lbWJhc2UgPSAodm9pZCBfX2lvbWVtKilLU0VHMUFERFIoRU1NQTJSSF9QRlVSMV9CQVNFICsgMyksCisJCS5tYXBiYXNlID0gRU1NQTJSSF9QRlVSMV9CQVNFICsgMywKIAkJLmlycSA9IEVNTUEyUkhfSVJRX1BGVVIxLAogCQkudWFydGNsayA9IEVNTUEyUkhfU0VSSUFMX0NMT0NLLAogCQkucmVnc2hpZnQgPSA0LApAQCAtMTI0LDYgKzEyNiw3IEBACiAJCS5mbGFncyA9IEVNTUEyUkhfU0VSSUFMX0ZMQUdTLAogICAgICAgIH0sIFsyXSA9IHsKIAkJLm1lbWJhc2UgPSAodm9pZCBfX2lvbWVtKilLU0VHMUFERFIoRU1NQTJSSF9QRlVSMl9CQVNFICsgMyksCisJCS5tYXBiYXNlID0gRU1NQTJSSF9QRlVSMl9CQVNFICsgMywKIAkJLmlycSA9IEVNTUEyUkhfSVJRX1BGVVIyLAogCQkudWFydGNsayA9IEVNTUEyUkhfU0VSSUFMX0NMT0NLLAogCQkucmVnc2hpZnQgPSA0LApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oCmluZGV4IGMwMTg3MjcuLjNiZGMwZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmgKQEAgLTIwOSw4ICsyMDksNyBAQAogCSAqIE1JUFMzMiBjbGFzcyBwcm9jZXNzb3JzCiAJICovCiAJQ1BVXzRLQywgQ1BVXzRLRUMsIENQVV80S1NDLCBDUFVfMjRLLCBDUFVfMzRLLCBDUFVfMTAwNEssIENQVV83NEssCi0JQ1BVX0FVMTAwMCwgQ1BVX0FVMTEwMCwgQ1BVX0FVMTIwMCwgQ1BVX0FVMTIxMCwgQ1BVX0FVMTI1MCwgQ1BVX0FVMTUwMCwKLQlDUFVfQVUxNTUwLCBDUFVfUFI0NDUwLCBDUFVfQkNNMzMwMiwgQ1BVX0JDTTQ3MTAsCisJQ1BVX0FMQ0hFTVksIENQVV9QUjQ0NTAsIENQVV9CQ00zMzAyLCBDUFVfQkNNNDcxMCwKIAogCS8qCiAJICogTUlQUzY0IGNsYXNzIHByb2Nlc3NvcnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9oYXphcmRzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaGF6YXJkcy5oCmluZGV4IDEzNGUxZmMuLmExMmQ5NzEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9oYXphcmRzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2hhemFyZHMuaApAQCAtODcsNyArODcsNyBAQAogCTogIj1yIiAodG1wKSk7CQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTUjEpCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQU1IxKSAmJiAhZGVmaW5lZChDT05GSUdfTUFDSF9BTENIRU1ZKQogCiAvKgogICogVGhlc2UgYXJlIHNsaWdodGx5IGNvbXBsaWNhdGVkIGJ5IHRoZSBmYWN0IHRoYXQgd2UgZ3VhcmFudGVlIFIxIGtlcm5lbHMgdG8KQEAgLTEzOSw3ICsxMzksNyBAQAogfSB3aGlsZSAoMCkKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1IxMDAwMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04pIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9SNTUwMCkKKyAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9SNTUwMCkgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9BTENIRU1ZKQogCiAvKgogICogUjEwMDAwIHJvY2tzIC0gYWxsIGhhemFyZHMgaGFuZGxlZCBpbiBoYXJkd2FyZSwgc28gdGhpcyBiZWNvbWVzIGEgbm9icmFpbmVyLgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZGYwY2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19BU01fTUFDSF9BVTFYMDBfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKKyNkZWZpbmUgX19BU01fTUFDSF9BVTFYMDBfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKKworI2RlZmluZSBjcHVfaGFzX3RsYgkJCTEKKyNkZWZpbmUgY3B1X2hhc180a2V4CQkJMQorI2RlZmluZSBjcHVfaGFzXzNrX2NhY2hlCQkwCisjZGVmaW5lIGNwdV9oYXNfNGtfY2FjaGUJCTEKKyNkZWZpbmUgY3B1X2hhc190eDM5X2NhY2hlCQkwCisjZGVmaW5lIGNwdV9oYXNfZnB1CQkJMAorI2RlZmluZSBjcHVfaGFzX2NvdW50ZXIJCQkxCisjZGVmaW5lIGNwdV9oYXNfd2F0Y2gJCQkxCisjZGVmaW5lIGNwdV9oYXNfZGl2ZWMJCQkxCisjZGVmaW5lIGNwdV9oYXNfdmNlCQkJMAorI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcAkJMAorI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcwkJMAorI2RlZmluZSBjcHVfaGFzX21jaGVjawkJCTEKKyNkZWZpbmUgY3B1X2hhc19lanRhZwkJCTEKKyNkZWZpbmUgY3B1X2hhc19sbHNjCQkJMQorI2RlZmluZSBjcHVfaGFzX21pcHMxNgkJCTAKKyNkZWZpbmUgY3B1X2hhc19tZG14CQkJMAorI2RlZmluZSBjcHVfaGFzX21pcHMzZAkJCTAKKyNkZWZpbmUgY3B1X2hhc19zbWFydG1pcHMJCTAKKyNkZWZpbmUgY3B1X2hhc192dGFnX2ljYWNoZQkJMAorI2RlZmluZSBjcHVfaGFzX2RjX2FsaWFzZXMJCTAKKyNkZWZpbmUgY3B1X2hhc19pY19maWxsc19mX2RjCQkxCisjZGVmaW5lIGNwdV9oYXNfbWlwczMycjEJCTEKKyNkZWZpbmUgY3B1X2hhc19taXBzMzJyMgkJMAorI2RlZmluZSBjcHVfaGFzX21pcHM2NHIxCQkwCisjZGVmaW5lIGNwdV9oYXNfbWlwczY0cjIJCTAKKyNkZWZpbmUgY3B1X2hhc19kc3AJCQkwCisjZGVmaW5lIGNwdV9oYXNfbWlwc210CQkJMAorI2RlZmluZSBjcHVfaGFzX3VzZXJsb2NhbAkJMAorI2RlZmluZSBjcHVfaGFzX25vZnB1ZXgJCQkwCisjZGVmaW5lIGNwdV9oYXNfNjRiaXRzCQkJMAorI2RlZmluZSBjcHVfaGFzXzY0Yml0X3plcm9fcmVnCQkwCisjZGVmaW5lIGNwdV9oYXNfdmludAkJCTAKKyNkZWZpbmUgY3B1X2hhc192ZWljCQkJMAorI2RlZmluZSBjcHVfaGFzX2luY2x1c2l2ZV9wY2FjaGVzCTAKKworI2RlZmluZSBjcHVfZGNhY2hlX2xpbmVfc2l6ZSgpCQkzMgorI2RlZmluZSBjcHVfaWNhY2hlX2xpbmVfc2l6ZSgpCQkzMgorCisjZW5kaWYgLyogX19BU01fTUFDSF9BVTFYMDBfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby5oCmluZGV4IDJkYzYxZTAuLjM0ZDliNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8uaApAQCAtNSw2NSArNSwyOSBAQAogCiAjZGVmaW5lIEFVMVhYWF9HUElPX0JBU0UJMjAwCiAKLXN0cnVjdCBhdTF4MDBfZ3BpbzIgewotCXUzMglkaXI7Ci0JdTMyCXJlc2VydmVkOwotCXUzMglvdXRwdXQ7Ci0JdTMyCXBpbnN0YXRlOwotCXUzMglpbnRlbjsKLQl1MzIJZW5hYmxlOwotfTsKKy8qIEdQSU8gYmFuayAxIG9mZnNldHMgKi8KKyNkZWZpbmUgQVUxMDAwX0dQSU8xX1RSSV9PVVQJMHgwMTAwCisjZGVmaW5lIEFVMTAwMF9HUElPMV9PVVQJMHgwMTA4CisjZGVmaW5lIEFVMTAwMF9HUElPMV9TVAkJMHgwMTEwCisjZGVmaW5lIEFVMTAwMF9HUElPMV9DTFIJMHgwMTBDCiAKLWV4dGVybiBpbnQgYXUxeHh4X2dwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pOwotZXh0ZXJuIHZvaWQgYXUxeHh4X2dwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci1leHRlcm4gaW50IGF1MXh4eF9ncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKTsKLWV4dGVybiBpbnQgYXUxeHh4X2dwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOworLyogR1BJTyBiYW5rIDIgb2Zmc2V0cyAqLworI2RlZmluZSBBVTEwMDBfR1BJTzJfRElSCTB4MDAKKyNkZWZpbmUgQVUxMDAwX0dQSU8yX1JTVkQJMHgwNAorI2RlZmluZSBBVTEwMDBfR1BJTzJfT1VUCTB4MDgKKyNkZWZpbmUgQVUxMDAwX0dQSU8yX1NUCQkweDBDCisjZGVmaW5lIEFVMTAwMF9HUElPMl9JTlQJMHgxMAorI2RlZmluZSBBVTEwMDBfR1BJTzJfRU4JCTB4MTQKIAorI2RlZmluZSBHUElPMl9PVVRfRU5fTUFTSwkweDAwMDEwMDAwCiAKLS8qIFdyYXBwZXJzIGZvciB0aGUgYXJjaC1uZXV0cmFsIEdQSU8gQVBJICovCisjZGVmaW5lIGdwaW9fdG9faXJxKGdwaW8pCU5VTEwKIAotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQotewotCS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KLQlyZXR1cm4gMDsKLX0KKyNkZWZpbmUgZ3Bpb19nZXRfdmFsdWUgX19ncGlvX2dldF92YWx1ZQorI2RlZmluZSBncGlvX3NldF92YWx1ZSBfX2dwaW9fc2V0X3ZhbHVlCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX2ZyZWUodW5zaWduZWQgZ3BpbykKLXsKLQkvKiBOb3QgeWV0IGltcGxlbWVudGVkICovCi19CisjZGVmaW5lIGdwaW9fY2Fuc2xlZXAgX19ncGlvX2NhbnNsZWVwCiAKLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCi17Ci0JcmV0dXJuIGF1MXh4eF9ncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKLXsKLQlyZXR1cm4gYXUxeHh4X2dwaW9fZGlyZWN0aW9uX291dHB1dChncGlvLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCi17Ci0JcmV0dXJuIGF1MXh4eF9ncGlvX2dldF92YWx1ZShncGlvKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKLXsKLQlhdTF4eHhfZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQotewotCXJldHVybiBncGlvOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpcnEpCi17Ci0JcmV0dXJuIGlycTsKLX0KLQotLyogRm9yIGNhbnNsZWVwICovCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgogCiAjZW5kaWYgLyogX0FVMVhYWF9HUElPX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI3L3RvcG9sb2d5LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI3L3RvcG9sb2d5LmgKaW5kZXggNTVkNDgxNS4uMDc1NDcyMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyNy90b3BvbG9neS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMjcvdG9wb2xvZ3kuaApAQCAtMjYsNyArMjYsNiBAQAogI2RlZmluZSBwYXJlbnRfbm9kZShub2RlKQkobm9kZSkKICNkZWZpbmUgbm9kZV90b19jcHVtYXNrKG5vZGUpCShodWJfZGF0YShub2RlKS0+aF9jcHVzKQogI2RlZmluZSBjcHVtYXNrX29mX25vZGUobm9kZSkJKCZodWJfZGF0YShub2RlKS0+aF9jcHVzKQotI2RlZmluZSBub2RlX3RvX2ZpcnN0X2NwdShub2RlKQkoY3B1bWFza19maXJzdChjcHVtYXNrX29mX25vZGUobm9kZSkpKQogc3RydWN0IHBjaV9idXM7CiBleHRlcm4gaW50IHBjaWJ1c190b19ub2RlKHN0cnVjdCBwY2lfYnVzICopOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwcy1ib2FyZHMvZ2VuZXJpYy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHMtYm9hcmRzL2dlbmVyaWMuaAppbmRleCA3ZjBiMDM0Li5jMGRhMWE4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwcy1ib2FyZHMvZ2VuZXJpYy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzLWJvYXJkcy9nZW5lcmljLmgKQEAgLTcxLDggKzcxLDYgQEAKIAogI2RlZmluZSBNSVBTX1JFVklTSU9OX0NPUklEICgoKCoodm9sYXRpbGUgdTMyICopaW9yZW1hcChNSVBTX1JFVklTSU9OX1JFRywgNCkpID4+IDEwKSAmIDB4M2YpCiAKLWV4dGVybiBpbnQgbWlwc19yZXZpc2lvbl9jb3JpZDsKLQogI2RlZmluZSBNSVBTX1JFVklTSU9OX1NDT05fT1RIRVIJICAgMAogI2RlZmluZSBNSVBTX1JFVklTSU9OX1NDT05fU09DSVRTQwkgICAxCiAjZGVmaW5lIE1JUFNfUkVWSVNJT05fU0NPTl9TT0NJVFNDUAkgICAyCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc21wLW9wcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtcC1vcHMuaAppbmRleCA0M2MyMDdlNy4uNjRmZmMwMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtcC1vcHMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc21wLW9wcy5oCkBAIC0xNSw2ICsxNSw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKwogc3RydWN0IHBsYXRfc21wX29wcyB7CiAJdm9pZCAoKnNlbmRfaXBpX3NpbmdsZSkoaW50IGNwdSwgdW5zaWduZWQgaW50IGFjdGlvbik7CiAJdm9pZCAoKnNlbmRfaXBpX21hc2spKGNwdW1hc2tfdCBtYXNrLCB1bnNpZ25lZCBpbnQgYWN0aW9uKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggMDg4NDk0Ny4uMTBlODI0NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTc2LDcgKzc2LDcgQEAKIAkJIjI6CQkJCQkJCVxuIgogCQkiCS5zdWJzZWN0aW9uIDIJCQkJCVxuIgogCQkiNDoJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgxZmZmCQlcbiIKLQkJIjU6CXNsbAklW3RpY2tldF0sIDUJCQkJXG4iCisJCSIJc2xsCSVbdGlja2V0XSwgNQkJCQlcbiIKIAkJIgkJCQkJCQlcbiIKIAkJIjY6CWJuZXoJJVt0aWNrZXRdLCA2YgkJCQlcbiIKIAkJIgkgc3VidQklW3RpY2tldF0sIDEJCQkJXG4iCkBAIC04NSw3ICs4NSw3IEBACiAJCSIJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgxZmZmCQlcbiIKIAkJIgliZXEJJVt0aWNrZXRdLCAlW215X3RpY2tldF0sIDJiCQlcbiIKIAkJIgkgc3VidQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgJVt0aWNrZXRdCVxuIgotCQkiCWIJNWIJCQkJCVxuIgorCQkiCWIJNGIJCQkJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgJVt0aWNrZXRdLCAxCQkJXG4iCiAJCSIJLnByZXZpb3VzCQkJCQlcbiIKIAkJIgkuc2V0IHBvcAkJCQkJXG4iCkBAIC0xMTMsNyArMTEzLDcgQEAKIAkJIgkgbGwJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKIAkJIgkJCQkJCQlcbiIKIAkJIjQ6CWFuZGkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MWZmZgkJXG4iCi0JCSI1OglzbGwJJVt0aWNrZXRdLCA1CQkJCVxuIgorCQkiCXNsbAklW3RpY2tldF0sIDUJCQkJXG4iCiAJCSIJCQkJCQkJXG4iCiAJCSI2OglibmV6CSVbdGlja2V0XSwgNmIJCQkJXG4iCiAJCSIJIHN1YnUJJVt0aWNrZXRdLCAxCQkJCVxuIgpAQCAtMTIyLDcgKzEyMiw3IEBACiAJCSIJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgxZmZmCQlcbiIKIAkJIgliZXEJJVt0aWNrZXRdLCAlW215X3RpY2tldF0sIDJiCQlcbiIKIAkJIgkgc3VidQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgJVt0aWNrZXRdCVxuIgotCQkiCWIJNWIJCQkJCVxuIgorCQkiCWIJNGIJCQkJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgJVt0aWNrZXRdLCAxCQkJXG4iCiAJCSIJLnByZXZpb3VzCQkJCQlcbiIKIAkJIgkuc2V0IHBvcAkJCQkJXG4iCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdHlwZXMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90eXBlcy5oCmluZGV4IGJjYmI4ZDYuLjc5NTZlNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90eXBlcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90eXBlcy5oCkBAIC00LDEyICs0LDE4IEBACiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OSBieSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMjAwOCBXaW5kIFJpdmVyIFN5c3RlbXMsCisgKiAgIHdyaXR0ZW4gYnkgUmFsZiBCYWVjaGxlCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgogICovCiAjaWZuZGVmIF9BU01fVFlQRVNfSAogI2RlZmluZSBfQVNNX1RZUEVTX0gKIAotI2lmIF9NSVBTX1NaTE9ORyA9PSA2NAorLyoKKyAqIFdlIGRvbid0IHVzZSBpbnQtbDY0LmggZm9yIHRoZSBrZXJuZWwgYW55bW9yZSBidXQgc3RpbGwgdXNlIGl0IGZvcgorICogdXNlcnNwYWNlIHRvIGF2b2lkIGNvZGUgY2hhbmdlcy4KKyAqLworI2lmIChfTUlQU19TWkxPTkcgPT0gNjQpICYmICFkZWZpbmVkKF9fS0VSTkVMX18pCiAjIGluY2x1ZGUgPGFzbS1nZW5lcmljL2ludC1sNjQuaD4KICNlbHNlCiAjIGluY2x1ZGUgPGFzbS1nZW5lcmljL2ludC1sbDY0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvamF6ei9pcnEuYyBiL2FyY2gvbWlwcy9qYXp6L2lycS5jCmluZGV4IDAzOTY1Y2IuLmQ5YjZhNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qYXp6L2lycS5jCisrKyBiL2FyY2gvbWlwcy9qYXp6L2lycS5jCkBAIC0xMzQsNyArMTM0LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHI0MDMwX3RpbWVyX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlcgk9IHI0MDMwX3RpbWVyX2ludGVycnVwdCwKIAkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCwKLQkubWFzawkJPSBDUFVfTUFTS19DUFUwLAogCS5uYW1lCQk9ICJSNDAzMCB0aW1lciIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvamF6ei9qYXp6ZG1hLmMgYi9hcmNoL21pcHMvamF6ei9qYXp6ZG1hLmMKaW5kZXggYzY3MmMwOC4uZjBmZDYzNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2phenovamF6emRtYS5jCisrKyBiL2FyY2gvbWlwcy9qYXp6L2phenpkbWEuYwpAQCAtNjgsOCArNjgsNyBAQAogCSAqLwogCXBndGJsID0gKFZETUFfUEdUQkxfRU5UUlkgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwgfCBHRlBfRE1BLAogCQkJCQkJICAgIGdldF9vcmRlcihWRE1BX1BHVEJMX1NJWkUpKTsKLQlpZiAoIXBndGJsKQotCQlCVUcoKTsKKwlCVUdfT04oIXBndGJsKTsKIAlkbWFfY2FjaGVfd2JhY2tfaW52KCh1bnNpZ25lZCBsb25nKXBndGJsLCBWRE1BX1BHVEJMX1NJWkUpOwogCXBndGJsID0gKFZETUFfUEdUQkxfRU5UUlkgKilLU0VHMUFERFIocGd0YmwpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtYmNtMTQ4MC5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWJjbTE0ODAuYwppbmRleCBiODIwNjYxLi5hNTE4MmEyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtYmNtMTQ4MC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1iY20xNDgwLmMKQEAgLTE0NCw3ICsxNDQsNiBAQAogCiAJYWN0aW9uLT5oYW5kbGVyCT0gc2lieXRlX2NvdW50ZXJfaGFuZGxlcjsKIAlhY3Rpb24tPmZsYWdzCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVOwotCWFjdGlvbi0+bWFzawk9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CiAJYWN0aW9uLT5uYW1lCT0gbmFtZTsKIAlhY3Rpb24tPmRldl9pZAk9IGNkOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtc2IxMjUwLmMgYi9hcmNoL21pcHMva2VybmVsL2NldnQtc2IxMjUwLmMKaW5kZXggYTJlZWJhYS4uMzQwZjUzZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXNiMTI1MC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1zYjEyNTAuYwpAQCAtMTQzLDcgKzE0Myw2IEBACiAKIAlhY3Rpb24tPmhhbmRsZXIJPSBzaWJ5dGVfY291bnRlcl9oYW5kbGVyOwogCWFjdGlvbi0+ZmxhZ3MJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFU7Ci0JYWN0aW9uLT5tYXNrCT0gY3B1bWFza19vZl9jcHUoY3B1KTsKIAlhY3Rpb24tPm5hbWUJPSBuYW1lOwogCWFjdGlvbi0+ZGV2X2lkCT0gY2Q7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCmluZGV4IDFiZGJjYWQuLmIxM2I4ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwpAQCAtMTgzLDEzICsxODMsNyBAQAogCWNhc2UgQ1BVX1RYNDlYWDoKIAkJY3B1X3dhaXQgPSByNGtfd2FpdF9pcnFvZmY7CiAJCWJyZWFrOwotCWNhc2UgQ1BVX0FVMTAwMDoKLQljYXNlIENQVV9BVTExMDA6Ci0JY2FzZSBDUFVfQVUxNTAwOgotCWNhc2UgQ1BVX0FVMTU1MDoKLQljYXNlIENQVV9BVTEyMDA6Ci0JY2FzZSBDUFVfQVUxMjEwOgotCWNhc2UgQ1BVX0FVMTI1MDoKKwljYXNlIENQVV9BTENIRU1ZOgogCQljcHVfd2FpdCA9IGF1MWtfd2FpdDsKIAkJYnJlYWs7CiAJY2FzZSBDUFVfMjBLQzoKQEAgLTc4MywzNyArNzc3LDMwIEBACiAJc3dpdGNoIChjLT5wcm9jZXNzb3JfaWQgJiAweGZmMDApIHsKIAljYXNlIFBSSURfSU1QX0FVMV9SRVYxOgogCWNhc2UgUFJJRF9JTVBfQVUxX1JFVjI6CisJCWMtPmNwdXR5cGUgPSBDUFVfQUxDSEVNWTsKIAkJc3dpdGNoICgoYy0+cHJvY2Vzc29yX2lkID4+IDI0KSAmIDB4ZmYpIHsKIAkJY2FzZSAwOgotCQkJYy0+Y3B1dHlwZSA9IENQVV9BVTEwMDA7CiAJCQlfX2NwdV9uYW1lW2NwdV0gPSAiQXUxMDAwIjsKIAkJCWJyZWFrOwogCQljYXNlIDE6Ci0JCQljLT5jcHV0eXBlID0gQ1BVX0FVMTUwMDsKIAkJCV9fY3B1X25hbWVbY3B1XSA9ICJBdTE1MDAiOwogCQkJYnJlYWs7CiAJCWNhc2UgMjoKLQkJCWMtPmNwdXR5cGUgPSBDUFVfQVUxMTAwOwogCQkJX19jcHVfbmFtZVtjcHVdID0gIkF1MTEwMCI7CiAJCQlicmVhazsKIAkJY2FzZSAzOgotCQkJYy0+Y3B1dHlwZSA9IENQVV9BVTE1NTA7CiAJCQlfX2NwdV9uYW1lW2NwdV0gPSAiQXUxNTUwIjsKIAkJCWJyZWFrOwogCQljYXNlIDQ6Ci0JCQljLT5jcHV0eXBlID0gQ1BVX0FVMTIwMDsKIAkJCV9fY3B1X25hbWVbY3B1XSA9ICJBdTEyMDAiOwotCQkJaWYgKChjLT5wcm9jZXNzb3JfaWQgJiAweGZmKSA9PSAyKSB7Ci0JCQkJYy0+Y3B1dHlwZSA9IENQVV9BVTEyNTA7CisJCQlpZiAoKGMtPnByb2Nlc3Nvcl9pZCAmIDB4ZmYpID09IDIpCiAJCQkJX19jcHVfbmFtZVtjcHVdID0gIkF1MTI1MCI7Ci0JCQl9CiAJCQlicmVhazsKIAkJY2FzZSA1OgotCQkJYy0+Y3B1dHlwZSA9IENQVV9BVTEyMTA7CiAJCQlfX2NwdV9uYW1lW2NwdV0gPSAiQXUxMjEwIjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcGFuaWMoIlVua25vd24gQXUgQ29yZSEiKTsKKwkJCV9fY3B1X25hbWVbY3B1XSA9ICJBdTF4eHgiOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2k4MjUzLmMgYi9hcmNoL21pcHMva2VybmVsL2k4MjUzLmMKaW5kZXggZjRkMTg3OC4uNjg5NzE5ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pODI1My5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTMuYwpAQCAtOTgsNyArOTgsNiBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMCAgPSB7CiAJLmhhbmRsZXIgPSB0aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfTk9CQUxBTkNJTkcsCi0JLm1hc2sgPSBDUFVfTUFTS19OT05FLAogCS5uYW1lID0gInRpbWVyIgogfTsKIApAQCAtMTIxLDcgKzEyMCw2IEBACiAJY2QtPm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHhGLCBjZCk7CiAJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNkKTsKIAotCWlycTAubWFzayA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CiAJc2V0dXBfaXJxKDAsICZpcnEwKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jIGIvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jCmluZGV4IDQxM2JkMWQuLjAxYzA4ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTkuYworKysgYi9hcmNoL21pcHMva2VybmVsL2k4MjU5LmMKQEAgLTMwNiw3ICszMDYsNiBAQAogICovCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEyID0gewogCS5oYW5kbGVyID0gbm9fYWN0aW9uLAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJjYXNjYWRlIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLW1zYzAxLmMgYi9hcmNoL21pcHMva2VybmVsL2lycS1tc2MwMS5jCmluZGV4IDk2M2MxNmQuLjZhOGNkMjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLW1zYzAxLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEtbXNjMDEuYwpAQCAtMTQwLDE0ICsxNDAsMTYgQEAKIAogCQlzd2l0Y2ggKGltcC0+aW1fdHlwZSkgewogCQljYXNlIE1TQzAxX0lSUV9FREdFOgotCQkJc2V0X2lycV9jaGlwKGlycWJhc2UrbiwgJm1zY19lZGdlaXJxX3R5cGUpOworCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxYmFzZSArIG4sCisJCQkJJm1zY19lZGdlaXJxX3R5cGUsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKIAkJCWlmIChjcHVfaGFzX3ZlaWMpCiAJCQkJTVNDSUNfV1JJVEUoTVNDMDFfSUNfU1VQK24qOCwgTVNDMDFfSUNfU1VQX0VER0VfQklUKTsKIAkJCWVsc2UKIAkJCQlNU0NJQ19XUklURShNU0MwMV9JQ19TVVArbio4LCBNU0MwMV9JQ19TVVBfRURHRV9CSVQgfCBpbXAtPmltX2x2bCk7CiAJCQlicmVhazsKIAkJY2FzZSBNU0MwMV9JUlFfTEVWRUw6Ci0JCQlzZXRfaXJxX2NoaXAoaXJxYmFzZStuLCAmbXNjX2xldmVsaXJxX3R5cGUpOworCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxYmFzZStuLAorCQkJCSZtc2NfbGV2ZWxpcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSwgImxldmVsIik7CiAJCQlpZiAoY3B1X2hhc192ZWljKQogCQkJCU1TQ0lDX1dSSVRFKE1TQzAxX0lDX1NVUCtuKjgsIDApOwogCQkJZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pcnFfY3B1LmMgYi9hcmNoL21pcHMva2VybmVsL2lycV9jcHUuYwppbmRleCAwZWUyNTY3Li41NWM4YTNjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2lycV9jcHUuYworKysgYi9hcmNoL21pcHMva2VybmVsL2lycV9jcHUuYwpAQCAtMTEyLDcgKzExMiw4IEBACiAJICovCiAJaWYgKGNwdV9oYXNfbWlwc210KQogCQlmb3IgKGkgPSBpcnFfYmFzZTsgaSA8IGlycV9iYXNlICsgMjsgaSsrKQotCQkJc2V0X2lycV9jaGlwKGksICZtaXBzX210X2NwdV9pcnFfY29udHJvbGxlcik7CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJm1pcHNfbXRfY3B1X2lycV9jb250cm9sbGVyLAorCQkJCQkJIGhhbmRsZV9wZXJjcHVfaXJxKTsKIAogCWZvciAoaSA9IGlycV9iYXNlICsgMjsgaSA8IGlycV9iYXNlICsgODsgaSsrKQogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJm1pcHNfY3B1X2lycV9jb250cm9sbGVyLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMgYi9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYwppbmRleCAyYTQ3MjcxLi42MjQyYmM2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYworKysgYi9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYwpAQCAtMTMzLDkgKzEzMyw5IEBACiAJcmV0dXJuIHN5c19mdHJ1bmNhdGUoZmQsIG1lcmdlXzY0KGEyLCBhMykpOwogfQogCi1TWVNDQUxMX0RFRklORTUoMzJfbGxzZWVrLCB1bnNpZ25lZCBsb25nLCBmZCwgdW5zaWduZWQgbG9uZywgb2Zmc2V0X2hpZ2gsCi0JdW5zaWduZWQgbG9uZywgb2Zmc2V0X2xvdywgbG9mZl90IF9fdXNlciAqLCByZXN1bHQsCi0JdW5zaWduZWQgbG9uZywgb3JpZ2luKQorU1lTQ0FMTF9ERUZJTkU1KDMyX2xsc2VlaywgdW5zaWduZWQgaW50LCBmZCwgdW5zaWduZWQgaW50LCBvZmZzZXRfaGlnaCwKKwkJdW5zaWduZWQgaW50LCBvZmZzZXRfbG93LCBsb2ZmX3QgX191c2VyICosIHJlc3VsdCwKKwkJdW5zaWduZWQgaW50LCBvcmlnaW4pCiB7CiAJcmV0dXJuIHN5c19sbHNlZWsoZmQsIG9mZnNldF9oaWdoLCBvZmZzZXRfbG93LCByZXN1bHQsIG9yaWdpbik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NldHVwLmMgYi9hcmNoL21pcHMva2VybmVsL3NldHVwLmMKaW5kZXggNDQzMGExZi4uMjk1MGI5NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYwpAQCAtMjc3LDcgKzI3Nyw4IEBACiAJICogbm90IHNlbGVjdGVkLiBPbmNlIHRoYXQgZG9uZSB3ZSBjYW4gZGV0ZXJtaW5lIHRoZSBsb3cgYm91bmQKIAkgKiBvZiB1c2FibGUgbWVtb3J5LgogCSAqLwotCXJlc2VydmVkX2VuZCA9IG1heChpbml0X2luaXRyZCgpLCBQRk5fVVAoX19wYV9zeW1ib2woJl9lbmQpKSk7CisJcmVzZXJ2ZWRfZW5kID0gbWF4KGluaXRfaW5pdHJkKCksCisJCQkgICAodW5zaWduZWQgbG9uZykgUEZOX1VQKF9fcGFfc3ltYm9sKCZfZW5kKSkpOwogCiAJLyoKIAkgKiBtYXhfbG93X3BmbiBpcyBub3QgYSBudW1iZXIgb2YgcGFnZXMuIFRoZSBudW1iZXIgb2YgcGFnZXMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLXVwLmMgYi9hcmNoL21pcHMva2VybmVsL3NtcC11cC5jCmluZGV4IGVhZDZjMzAuLjg3OGUzNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLXVwLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAtdXAuYwpAQCAtMTMsNyArMTMsNyBAQAogLyoKICAqIFNlbmQgaW50ZXItcHJvY2Vzc29yIGludGVycnVwdAogICovCi12b2lkIHVwX3NlbmRfaXBpX3NpbmdsZShpbnQgY3B1LCB1bnNpZ25lZCBpbnQgYWN0aW9uKQorc3RhdGljIHZvaWQgdXBfc2VuZF9pcGlfc2luZ2xlKGludCBjcHUsIHVuc2lnbmVkIGludCBhY3Rpb24pCiB7CiAJcGFuaWMoS0VSTl9FUlIgIiVzIGNhbGxlZCIsIF9fZnVuY19fKTsKIH0KQEAgLTI3LDMxICsyNywzMSBAQAogICogIEFmdGVyIHdlJ3ZlIGRvbmUgaW5pdGlhbCBib290LCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBhbGxvdyB0aGUKICAqICBib2FyZCBjb2RlIHRvIGNsZWFuIHVwIHN0YXRlLCBpZiBuZWVkZWQKICAqLwotdm9pZCBfX2NwdWluaXQgdXBfaW5pdF9zZWNvbmRhcnkodm9pZCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCB1cF9pbml0X3NlY29uZGFyeSh2b2lkKQogewogfQogCi12b2lkIF9fY3B1aW5pdCB1cF9zbXBfZmluaXNoKHZvaWQpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgdXBfc21wX2ZpbmlzaCh2b2lkKQogewogfQogCiAvKiBIb29rIGZvciBhZnRlciBhbGwgQ1BVcyBhcmUgb25saW5lICovCi12b2lkIHVwX2NwdXNfZG9uZSh2b2lkKQorc3RhdGljIHZvaWQgdXBfY3B1c19kb25lKHZvaWQpCiB7CiB9CiAKIC8qCiAgKiBGaXJtd2FyZSBDUFUgc3RhcnR1cCBob29rCiAgKi8KLXZvaWQgX19jcHVpbml0IHVwX2Jvb3Rfc2Vjb25kYXJ5KGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZSkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCB1cF9ib290X3NlY29uZGFyeShpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpCiB7CiB9CiAKLXZvaWQgX19pbml0IHVwX3NtcF9zZXR1cCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHVwX3NtcF9zZXR1cCh2b2lkKQogewogfQogCi12b2lkIF9faW5pdCB1cF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQorc3RhdGljIHZvaWQgX19pbml0IHVwX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMgYi9hcmNoL21pcHMva2VybmVsL3NtcC5jCmluZGV4IDNkYTk0NzAuLmM5Mzc1MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAuYwpAQCAtNDQsNyArNDQsNyBAQAogI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+CiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCi12b2xhdGlsZSBjcHVtYXNrX3QgY3B1X2NhbGxpbl9tYXA7CS8qIEJpdG1hc2sgb2Ygc3RhcnRlZCBzZWNvbmRhcmllcyAqLworc3RhdGljIHZvbGF0aWxlIGNwdW1hc2tfdCBjcHVfY2FsbGluX21hcDsJLyogQml0bWFzayBvZiBzdGFydGVkIHNlY29uZGFyaWVzICovCiBpbnQgX19jcHVfbnVtYmVyX21hcFtOUl9DUFVTXTsJCS8qIE1hcCBwaHlzaWNhbCB0byBsb2dpY2FsICovCiBpbnQgX19jcHVfbG9naWNhbF9tYXBbTlJfQ1BVU107CQkvKiBNYXAgbG9naWNhbCB0byBwaHlzaWNhbCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKaW5kZXggMjlmYWRhYy4uZTgzZGExNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwpAQCAtMTI3Nyw4ICsxMjc3LDcgQEAKIAl1MzIgKnc7CiAJdW5zaWduZWQgY2hhciAqYjsKIAotCWlmICghY3B1X2hhc192ZWljICYmICFjcHVfaGFzX3ZpbnQpCi0JCUJVRygpOworCUJVR19PTighY3B1X2hhc192ZWljICYmICFjcHVfaGFzX3ZpbnQpOwogCiAJaWYgKGFkZHIgPT0gTlVMTCkgewogCQloYW5kbGVyID0gKHVuc2lnbmVkIGxvbmcpIGRvX2RlZmF1bHRfdmk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFzYXQvaW50ZXJydXB0LmMgYi9hcmNoL21pcHMvbGFzYXQvaW50ZXJydXB0LmMKaW5kZXggZDFhYzdhMi4uMTM1M2ZiMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xhc2F0L2ludGVycnVwdC5jCisrKyBiL2FyY2gvbWlwcy9sYXNhdC9pbnRlcnJ1cHQuYwpAQCAtMTA0LDcgKzEwNCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGNhc2NhZGUgPSB7CiAJLmhhbmRsZXIJPSBub19hY3Rpb24sCi0JLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZQkJPSAiY2FzY2FkZSIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGVtb3RlL2xtMmUvaXJxLmMgYi9hcmNoL21pcHMvbGVtb3RlL2xtMmUvaXJxLmMKaW5kZXggM2UwYjdiZS4uMWQwYTA5ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xlbW90ZS9sbTJlL2lycS5jCisrKyBiL2FyY2gvbWlwcy9sZW1vdGUvbG0yZS9pcnEuYwpAQCAtOTIsNyArOTIsNiBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBjYXNjYWRlX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9IG5vX2FjdGlvbiwKLQkubWFzayA9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUgPSAiY2FzY2FkZSIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vYy1yNGsuYyBiL2FyY2gvbWlwcy9tbS9jLXI0ay5jCmluZGV4IDg3MWU4MjguLjU4ZDkwNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jLXI0ay5jCisrKyBiL2FyY2gvbWlwcy9tbS9jLXI0ay5jCkBAIC0xMDI2LDEzICsxMDI2LDcgQEAKIAkJYy0+aWNhY2hlLmZsYWdzIHw9IE1JUFNfQ0FDSEVfVlRBRzsKIAkJYnJlYWs7CiAKLQljYXNlIENQVV9BVTEwMDA6Ci0JY2FzZSBDUFVfQVUxNTAwOgotCWNhc2UgQ1BVX0FVMTEwMDoKLQljYXNlIENQVV9BVTE1NTA6Ci0JY2FzZSBDUFVfQVUxMjAwOgotCWNhc2UgQ1BVX0FVMTIxMDoKLQljYXNlIENQVV9BVTEyNTA6CisJY2FzZSBDUFVfQUxDSEVNWToKIAkJYy0+aWNhY2hlLmZsYWdzIHw9IE1JUFNfQ0FDSEVfSUNfRl9EQzsKIAkJYnJlYWs7CiAJfQpAQCAtMTI0NCw3ICsxMjM4LDcgQEAKIAkvKgogCSAqIEF1MTEwMCBlcnJhdGEgYWN0dWFsbHkga2VlcHMgc2lsZW5jZSBhYm91dCB0aGlzIGJpdCwgc28gd2Ugc2V0IGl0CiAJICoganVzdCBpbiBjYXNlIGZvciB0aG9zZSByZXZpc2lvbnMgdGhhdCByZXF1aXJlIGl0IHRvIGJlIHNldCBhY2NvcmRpbmcKLQkgKiB0byBhcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9jcHV0YWJsZS5jCisJICogdG8gdGhlIChub3cgZ29uZSkgY3B1IHRhYmxlLgogCSAqLwogCWNhc2UgMHgwMjAzMDIwMDogLyogQXUxMTAwIEFCICovCiAJY2FzZSAweDAyMDMwMjAxOiAvKiBBdTExMDAgQkEgKi8KQEAgLTEzMTQsMTEgKzEzMDgsMTAgQEAKIAkJYnJlYWs7CiAJLyoKIAkgKiBXZSBuZWVkIHRvIGNhdGNoIHRoZSBlYXJseSBBbGNoZW15IFNPQ3Mgd2l0aAotCSAqIHRoZSB3cml0ZS1vbmx5IGNvX2NvbmZpZy5vZCBiaXQgYW5kIHNldCBpdCBiYWNrIHRvIG9uZS4uLgorCSAqIHRoZSB3cml0ZS1vbmx5IGNvX2NvbmZpZy5vZCBiaXQgYW5kIHNldCBpdCBiYWNrIHRvIG9uZSBvbjoKKwkgKiBBdTEwMDAgcmV2IERBLCBIQSwgSEI7ICBBdTExMDAgQUIsIEJBLCBCQywgQXUxNTAwIEFCCiAJICovCi0JY2FzZSBDUFVfQVUxMDAwOiAvKiByZXYuIERBLCBIQSwgSEIgKi8KLQljYXNlIENQVV9BVTExMDA6IC8qIHJldi4gQUIsIEJBLCBCQyA/PyAqLwotCWNhc2UgQ1BVX0FVMTUwMDogLyogcmV2LiBBQiAqLworCWNhc2UgQ1BVX0FMQ0hFTVk6CiAJCWF1MXgwMF9maXh1cF9jb25maWdfb2QoKTsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9oaWdobWVtLmMgYi9hcmNoL21pcHMvbW0vaGlnaG1lbS5jCmluZGV4IDhmMmNkOGUuLjA2MGQyOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9oaWdobWVtLmMKKysrIGIvYXJjaC9taXBzL21tL2hpZ2htZW0uYwpAQCAtMTcsOCArMTcsNyBAQAogCiB2b2lkIF9fa3VubWFwKHN0cnVjdCBwYWdlICpwYWdlKQogewotCWlmIChpbl9pbnRlcnJ1cHQoKSkKLQkJQlVHKCk7CisJQlVHX09OKGluX2ludGVycnVwdCgpKTsKIAlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKQogCQlyZXR1cm47CiAJa3VubWFwX2hpZ2gocGFnZSk7CkBAIC00Niw4ICs0NSw3IEBACiAJaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIqc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXZhZGRyID0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCk7CiAjaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KLQlpZiAoIXB0ZV9ub25lKCooa21hcF9wdGUtaWR4KSkpCi0JCUJVRygpOworCUJVR19PTighcHRlX25vbmUoKihrbWFwX3B0ZSAtIGlkeCkpKTsKICNlbmRpZgogCXNldF9wdGUoa21hcF9wdGUtaWR4LCBta19wdGUocGFnZSwga21hcF9wcm90KSk7CiAJbG9jYWxfZmx1c2hfdGxiX29uZSgodW5zaWduZWQgbG9uZyl2YWRkcik7CkBAIC02Niw4ICs2NCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAodmFkZHIgIT0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTitpZHgpKQotCQlCVUcoKTsKKwlCVUdfT04odmFkZHIgIT0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCkpOwogCiAJLyoKIAkgKiBmb3JjZSBvdGhlciBtYXBwaW5ncyB0byBPb3BzIGlmIHRoZXknbGwgdHJ5IHRvIGFjY2VzcwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2luaXQuYyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKaW5kZXggMTM3YzE0Yi4uZDkzNDg5NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2luaXQuYworKysgYi9hcmNoL21pcHMvbW0vaW5pdC5jCkBAIC0zMDcsOCArMzA3LDcgQEAKIAkJCQlpZiAocG1kX25vbmUoKnBtZCkpIHsKIAkJCQkJcHRlID0gKHB0ZV90ICopIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKFBBR0VfU0laRSk7CiAJCQkJCXNldF9wbWQocG1kLCBfX3BtZCgodW5zaWduZWQgbG9uZylwdGUpKTsKLQkJCQkJaWYgKHB0ZSAhPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIDApKQotCQkJCQkJQlVHKCk7CisJCQkJCUJVR19PTihwdGUgIT0gcHRlX29mZnNldF9rZXJuZWwocG1kLCAwKSk7CiAJCQkJfQogCQkJCXZhZGRyICs9IFBNRF9TSVpFOwogCQkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2lvcmVtYXAuYyBiL2FyY2gvbWlwcy9tbS9pb3JlbWFwLmMKaW5kZXggNTk5NDViOS4uMGM0MzI0OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2lvcmVtYXAuYworKysgYi9hcmNoL21pcHMvbW0vaW9yZW1hcC5jCkBAIC0yNyw4ICsyNyw3IEBACiAJZW5kID0gYWRkcmVzcyArIHNpemU7CiAJaWYgKGVuZCA+IFBNRF9TSVpFKQogCQllbmQgPSBQTURfU0laRTsKLQlpZiAoYWRkcmVzcyA+PSBlbmQpCi0JCUJVRygpOworCUJVR19PTihhZGRyZXNzID49IGVuZCk7CiAJcGZuID0gcGh5c19hZGRyID4+IFBBR0VfU0hJRlQ7CiAJZG8gewogCQlpZiAoIXB0ZV9ub25lKCpwdGUpKSB7CkBAIC01Miw4ICs1MSw3IEBACiAJaWYgKGVuZCA+IFBHRElSX1NJWkUpCiAJCWVuZCA9IFBHRElSX1NJWkU7CiAJcGh5c19hZGRyIC09IGFkZHJlc3M7Ci0JaWYgKGFkZHJlc3MgPj0gZW5kKQotCQlCVUcoKTsKKwlCVUdfT04oYWRkcmVzcyA+PSBlbmQpOwogCWRvIHsKIAkJcHRlX3QgKiBwdGUgPSBwdGVfYWxsb2Nfa2VybmVsKHBtZCwgYWRkcmVzcyk7CiAJCWlmICghcHRlKQpAQCAtNzUsOCArNzMsNyBAQAogCXBoeXNfYWRkciAtPSBhZGRyZXNzOwogCWRpciA9IHBnZF9vZmZzZXQoJmluaXRfbW0sIGFkZHJlc3MpOwogCWZsdXNoX2NhY2hlX2FsbCgpOwotCWlmIChhZGRyZXNzID49IGVuZCkKLQkJQlVHKCk7CisJQlVHX09OKGFkZHJlc3MgPj0gZW5kKTsKIAlkbyB7CiAJCXB1ZF90ICpwdWQ7CiAJCXBtZF90ICpwbWQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vdGxiZXguYyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCmluZGV4IGYzMzVjZjYuLjA2MTViNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS90bGJleC5jCisrKyBiL2FyY2gvbWlwcy9tbS90bGJleC5jCkBAIC0yOTIsMTMgKzI5Miw2IEBACiAJY2FzZSBDUFVfUjQzMDA6CiAJY2FzZSBDUFVfNUtDOgogCWNhc2UgQ1BVX1RYNDlYWDoKLQljYXNlIENQVV9BVTEwMDA6Ci0JY2FzZSBDUFVfQVUxMTAwOgotCWNhc2UgQ1BVX0FVMTUwMDoKLQljYXNlIENQVV9BVTE1NTA6Ci0JY2FzZSBDUFVfQVUxMjAwOgotCWNhc2UgQ1BVX0FVMTIxMDoKLQljYXNlIENQVV9BVTEyNTA6CiAJY2FzZSBDUFVfUFI0NDUwOgogCQl1YXNtX2lfbm9wKHApOwogCQl0bGJ3KHApOwpAQCAtMzIxLDYgKzMxNCw3IEBACiAJY2FzZSBDUFVfUjU1MDA6CiAJCWlmIChtNGtjX3RsYnBfd2FyKCkpCiAJCQl1YXNtX2lfbm9wKHApOworCWNhc2UgQ1BVX0FMQ0hFTVk6CiAJCXRsYncocCk7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWluaXQuYyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW5pdC5jCmluZGV4IDQ4MzJhZjIuLjQ3NTAzOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW5pdC5jCkBAIC00OCw3ICs0OCw3IEBACiAKIGludCBpbml0X2RlYnVnID0gMDsKIAotaW50IG1pcHNfcmV2aXNpb25fY29yaWQ7CitzdGF0aWMgaW50IG1pcHNfcmV2aXNpb25fY29yaWQ7CiBpbnQgbWlwc19yZXZpc2lvbl9zY29uaWQ7CiAKIC8qIEJvbml0bzY0IHN5c3RlbSBjb250cm9sbGVyIHJlZ2lzdGVyIGJhc2UuICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1iZXJyLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1iZXJyLmMKaW5kZXggN2QwNWU2OC4uMDRjZWJhZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctYmVyci5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWJlcnIuYwpAQCAtNjYsNyArNjYsNyBAQAogCXByaW50aygiU2xpY2UgJWMgZ290ICVjYmUgYXQgMHglbHhcbiIsICdBJyArIGNwdSwgZGF0YSA/ICdkJyA6ICdpJywKIAkgICAgICAgcmVncy0+Y3AwX2VwYyk7CiAJcHJpbnRrKCJIdWIgaW5mb3JtYXRpb246XG4iKTsKLQlwcmludGsoIkVSUl9JTlRfUEVORCA9IDB4JTA2bHhcbiIsIExPQ0FMX0hVQl9MKFBJX0VSUl9JTlRfUEVORCkpOworCXByaW50aygiRVJSX0lOVF9QRU5EID0gMHglMDZsbHhcbiIsIExPQ0FMX0hVQl9MKFBJX0VSUl9JTlRfUEVORCkpOwogCWVycnN0MCA9IExPQ0FMX0hVQl9MKGNwdSA/IFBJX0VSUl9TVEFUVVMwX0IgOiBQSV9FUlJfU1RBVFVTMF9BKTsKIAllcnJzdDEgPSBMT0NBTF9IVUJfTChjcHUgPyBQSV9FUlJfU1RBVFVTMV9CIDogUElfRVJSX1NUQVRVUzFfQSk7CiAJZHVtcF9odWJfaW5mb3JtYXRpb24oZXJyc3QwLCBlcnJzdDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctbm1pLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1ubWkuYwppbmRleCA2NDQ1OWU3Li42YzVhNjMwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1ubWkuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1ubWkuYwpAQCAtMTQzLDggKzE0Myw4IEBACiAJcGVuZDAgPSBSRU1PVEVfSFVCX0wobmFzaWQsIFBJX0lOVF9QRU5EMCk7CiAJcGVuZDEgPSBSRU1PVEVfSFVCX0wobmFzaWQsIFBJX0lOVF9QRU5EMSk7CiAKLQlwcmludGsoIlBJX0lOVF9NQVNLMDogJTE2bHggUElfSU5UX01BU0sxOiAlMTZseFxuIiwgbWFzazAsIG1hc2sxKTsKLQlwcmludGsoIlBJX0lOVF9QRU5EMDogJTE2bHggUElfSU5UX1BFTkQxOiAlMTZseFxuIiwgcGVuZDAsIHBlbmQxKTsKKwlwcmludGsoIlBJX0lOVF9NQVNLMDogJTE2THggUElfSU5UX01BU0sxOiAlMTZMeFxuIiwgbWFzazAsIG1hc2sxKTsKKwlwcmludGsoIlBJX0lOVF9QRU5EMDogJTE2THggUElfSU5UX1BFTkQxOiAlMTZMeFxuIiwgcGVuZDAsIHBlbmQxKTsKIAlwcmludGsoIlxuXG4iKTsKIH0KIApAQCAtMjE5LDcgKzIxOSw3IEBACiAJCWlmIChpID09IDEwMDApIHsKIAkJCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpCiAJCQkJaWYgKE5PREVQREEobm9kZSktPmR1bXBfY291bnQgPT0gMCkgewotCQkJCQljcHUgPSBub2RlX3RvX2ZpcnN0X2NwdShub2RlKTsKKwkJCQkJY3B1ID0gY3B1bWFza19maXJzdChjcHVtYXNrX29mX25vZGUobm9kZSkpOwogCQkJCQlmb3IgKG49MDsgbiA8IENOT0RFX05VTV9DUFVTKG5vZGUpOyBjcHUrKywgbisrKSB7CiAJCQkJCQlDUFVNQVNLX1NFVEIobm1pZWRfY3B1cywgY3B1KTsKIAkJCQkJCS8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1pcnEuYyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jCmluZGV4IDBkNmI2NjYuLjgzYTBiM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jCkBAIC0xMTUsMTQgKzExNSwxMiBAQAogc3RydWN0IGlycWFjdGlvbiBtZW1lcnJfaXJxID0gewogCS5oYW5kbGVyID0gY3JpbWVfbWVtZXJyX2ludHIsCiAJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCwKLQkubWFzayA9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUgPSAiQ1JJTUUgbWVtb3J5IGVycm9yIiwKIH07CiAKIHN0cnVjdCBpcnFhY3Rpb24gY3B1ZXJyX2lycSA9IHsKIAkuaGFuZGxlciA9IGNyaW1lX2NwdWVycl9pbnRyLAogCS5mbGFncyA9IElSUUZfRElTQUJMRUQsCi0JLm1hc2sgPSBDUFVfTUFTS19OT05FLAogCS5uYW1lID0gIkNSSU1FIENQVSBlcnJvciIsCiB9OwogCkBAIC0zMjUsMTYgKzMyMywxMSBAQAogewogCXVuc2lnbmVkIGxvbmcgbWFjZV9pbnQ7CiAKLQlzd2l0Y2ggKGlycSkgewotCWNhc2UgTUFDRUlTQV9QQVJBTExFTF9JUlE6Ci0JY2FzZSBNQUNFSVNBX1NFUklBTDFfVERNQVBSX0lSUToKLQljYXNlIE1BQ0VJU0FfU0VSSUFMMl9URE1BUFJfSVJROgotCQkvKiBlZGdlIHRyaWdnZXJlZCAqLwotCQltYWNlX2ludCA9IG1hY2UtPnBlcmlmLmN0cmwuaXN0YXQ7Ci0JCW1hY2VfaW50ICY9IH4oMSA8PCAoaXJxIC0gTUFDRUlTQV9BVURJT19TV19JUlEpKTsKLQkJbWFjZS0+cGVyaWYuY3RybC5pc3RhdCA9IG1hY2VfaW50OwotCQlicmVhazsKLQl9CisJLyogZWRnZSB0cmlnZ2VyZWQgKi8KKwltYWNlX2ludCA9IG1hY2UtPnBlcmlmLmN0cmwuaXN0YXQ7CisJbWFjZV9pbnQgJj0gfigxIDw8IChpcnEgLSBNQUNFSVNBX0FVRElPX1NXX0lSUSkpOworCW1hY2UtPnBlcmlmLmN0cmwuaXN0YXQgPSBtYWNlX2ludDsKKwogCWRpc2FibGVfbWFjZWlzYV9pcnEoaXJxKTsKIH0KIApAQCAtMzQ0LDcgKzMzNywxNiBAQAogCQllbmFibGVfbWFjZWlzYV9pcnEoaXJxKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcDMyX21hY2Vpc2FfaW50ZXJydXB0ID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcDMyX21hY2Vpc2FfbGV2ZWxfaW50ZXJydXB0ID0geworCS5uYW1lCQk9ICJJUDMyIE1BQ0UgSVNBIiwKKwkuYWNrCQk9IGRpc2FibGVfbWFjZWlzYV9pcnEsCisJLm1hc2sJCT0gZGlzYWJsZV9tYWNlaXNhX2lycSwKKwkubWFza19hY2sJPSBkaXNhYmxlX21hY2Vpc2FfaXJxLAorCS51bm1hc2sJCT0gZW5hYmxlX21hY2Vpc2FfaXJxLAorCS5lbmQJCT0gZW5kX21hY2Vpc2FfaXJxLAorfTsKKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcDMyX21hY2Vpc2FfZWRnZV9pbnRlcnJ1cHQgPSB7CiAJLm5hbWUJCT0gIklQMzIgTUFDRSBJU0EiLAogCS5hY2sJCT0gbWFza19hbmRfYWNrX21hY2Vpc2FfaXJxLAogCS5tYXNrCQk9IGRpc2FibGVfbWFjZWlzYV9pcnEsCkBAIC01MDAsMjcgKzUwMiw1MCBAQAogCWZvciAoaXJxID0gQ1JJTUVfSVJRX0JBU0U7IGlycSA8PSBJUDMyX0lSUV9NQVg7IGlycSsrKSB7CiAJCXN3aXRjaCAoaXJxKSB7CiAJCWNhc2UgTUFDRV9WSURfSU4xX0lSUSAuLi4gTUFDRV9QQ0lfQlJJREdFX0lSUToKLQkJCXNldF9pcnFfY2hpcChpcnEsICZpcDMyX21hY2VfaW50ZXJydXB0KTsKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwmaXAzMl9tYWNlX2ludGVycnVwdCwKKwkJCQloYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKIAkJCWJyZWFrOworCiAJCWNhc2UgTUFDRVBDSV9TQ1NJMF9JUlEgLi4uICBNQUNFUENJX1NIQVJFRDJfSVJROgotCQkJc2V0X2lycV9jaGlwKGlycSwgJmlwMzJfbWFjZXBjaV9pbnRlcnJ1cHQpOworCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLAorCQkJCSZpcDMyX21hY2VwY2lfaW50ZXJydXB0LCBoYW5kbGVfbGV2ZWxfaXJxLAorCQkJCSJsZXZlbCIpOwogCQkJYnJlYWs7CisKIAkJY2FzZSBDUklNRV9HQkUwX0lSUSAuLi4gQ1JJTUVfR0JFM19JUlE6Ci0JCQlzZXRfaXJxX2NoaXAoaXJxLCAmY3JpbWVfZWRnZV9pbnRlcnJ1cHQpOworCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLAorCQkJCSZjcmltZV9lZGdlX2ludGVycnVwdCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwogCQkJYnJlYWs7CiAJCWNhc2UgQ1JJTUVfQ1BVRVJSX0lSUToKIAkJY2FzZSBDUklNRV9NRU1FUlJfSVJROgotCQkJc2V0X2lycV9jaGlwKGlycSwgJmNyaW1lX2xldmVsX2ludGVycnVwdCk7CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsCisJCQkJJmNyaW1lX2xldmVsX2ludGVycnVwdCwgaGFuZGxlX2xldmVsX2lycSwKKwkJCQkibGV2ZWwiKTsKIAkJCWJyZWFrOworCiAJCWNhc2UgQ1JJTUVfUkVfRU1QVFlfRV9JUlEgLi4uIENSSU1FX1JFX0lETEVfRV9JUlE6CiAJCWNhc2UgQ1JJTUVfU09GVDBfSVJRIC4uLiBDUklNRV9TT0ZUMl9JUlE6Ci0JCQlzZXRfaXJxX2NoaXAoaXJxLCAmY3JpbWVfZWRnZV9pbnRlcnJ1cHQpOworCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLAorCQkJCSZjcmltZV9lZGdlX2ludGVycnVwdCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwogCQkJYnJlYWs7CisKIAkJY2FzZSBDUklNRV9WSUNFX0lSUToKLQkJCXNldF9pcnFfY2hpcChpcnEsICZjcmltZV9lZGdlX2ludGVycnVwdCk7CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsCisJCQkJJmNyaW1lX2VkZ2VfaW50ZXJydXB0LCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7CiAJCQlicmVhazsKKworCQljYXNlIE1BQ0VJU0FfUEFSQUxMRUxfSVJROgorCQljYXNlIE1BQ0VJU0FfU0VSSUFMMV9URE1BUFJfSVJROgorCQljYXNlIE1BQ0VJU0FfU0VSSUFMMl9URE1BUFJfSVJROgorCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLAorCQkJCSZpcDMyX21hY2Vpc2FfZWRnZV9pbnRlcnJ1cHQsIGhhbmRsZV9lZGdlX2lycSwKKwkJCQkiZWRnZSIpOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKLQkJCXNldF9pcnFfY2hpcChpcnEsICZpcDMyX21hY2Vpc2FfaW50ZXJydXB0KTsKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwKKwkJCQkmaXAzMl9tYWNlaXNhX2xldmVsX2ludGVycnVwdCwgaGFuZGxlX2xldmVsX2lycSwKKwkJCQkibGV2ZWwiKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItbWVtb3J5LmMgYi9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1tZW1vcnkuYwppbmRleCBjYTkzZWNmLi44MjhjZTEzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1tZW1vcnkuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1tZW1vcnkuYwpAQCAtMzYsNyArMzYsNyBAQAogCQlpZiAoYmFzZSArIHNpemUgPiAoMjU2IDw8IDIwKSkKIAkJCWJhc2UgKz0gQ1JJTUVfSElfTUVNX0JBU0U7CiAKLQkJcHJpbnRrKCJDUklNRSBNQzogYmFuayAldSBiYXNlIDB4JTAxNmx4IHNpemUgJWx1TWlCXG4iLAorCQlwcmludGsoIkNSSU1FIE1DOiBiYW5rICV1IGJhc2UgMHglMDE2THggc2l6ZSAlTHVNaUJcbiIsCiAJCQliYW5rLCBiYXNlLCBzaXplID4+IDIwKTsKIAkJYWRkX21lbW9yeV9yZWdpb24oYmFzZSwgc2l6ZSwgQk9PVF9NRU1fUkFNKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMgYi9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKaW5kZXggMTJiNDY1ZC4uMzUyMzUyYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYwpAQCAtMjM2LDcgKzIzNiw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQkNNMTQ4MF9OUl9JUlFTOyBpKyspIHsKLQkJc2V0X2lycV9jaGlwKGksICZiY20xNDgwX2lycV90eXBlKTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZiY20xNDgwX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAkJYmNtMTQ4MF9pcnFfb3duZXJbaV0gPSAwOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKaW5kZXggODA4YWMyOS4uYzA4ZmY1OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKQEAgLTIyMCw3ICsyMjAsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFNCMTI1MF9OUl9JUlFTOyBpKyspIHsKLQkJc2V0X2lycV9jaGlwKGksICZzYjEyNTBfaXJxX3R5cGUpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJnNiMTI1MF9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CiAJCXNiMTI1MF9pcnFfb3duZXJbaV0gPSAwOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvYTIwci5jIGIvYXJjaC9taXBzL3NuaS9hMjByLmMKaW5kZXggM2Y4Y2Y1ZS4uN2RkNzZmYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9hMjByLmMKKysrIGIvYXJjaC9taXBzL3NuaS9hMjByLmMKQEAgLTIxOSw3ICsyMTksNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gU05JX0EyMFJfSVJRX0JBU0UgKyAyIDsgaSA8IFNOSV9BMjBSX0lSUV9CQVNFICsgODsgaSsrKQotCQlzZXRfaXJxX2NoaXAoaSwgJmEyMHJfaXJxX3R5cGUpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmEyMHJfaXJxX3R5cGUsIGhhbmRsZV9sZXZlbF9pcnEpOwogCXNuaV9od2ludCA9IGEyMHJfaHdpbnQ7CiAJY2hhbmdlX2MwX3N0YXR1cyhTVDBfSU0sIElFX0lSUTApOwogCXNldHVwX2lycShTTklfQTIwUl9JUlFfQkFTRSArIDMsICZzbmlfaXNhX2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3BjaW10LmMgYi9hcmNoL21pcHMvc25pL3BjaW10LmMKaW5kZXggODM0NjUwZi4uNzRlNmM2NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9wY2ltdC5jCisrKyBiL2FyY2gvbWlwcy9zbmkvcGNpbXQuYwpAQCAtMzA0LDcgKzMwNCw3IEBACiAJbWlwc19jcHVfaXJxX2luaXQoKTsKIAkvKiBBY3R1YWxseSB3ZSd2ZSBnb3QgbW9yZSBpbnRlcnJ1cHRzIHRvIGhhbmRsZSAuLi4gICovCiAJZm9yIChpID0gUENJTVRfSVJRX0lOVDI7IGkgPD0gUENJTVRfSVJRX1NDU0k7IGkrKykKLQkJc2V0X2lycV9jaGlwKGksICZwY2ltdF9pcnFfdHlwZSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmcGNpbXRfaXJxX3R5cGUsIGhhbmRsZV9sZXZlbF9pcnEpOwogCXNuaV9od2ludCA9IHNuaV9wY2ltdF9od2ludDsKIAljaGFuZ2VfYzBfc3RhdHVzKFNUMF9JTSwgSUVfSVJRMXxJRV9JUlEzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvcGNpdC5jIGIvYXJjaC9taXBzL3NuaS9wY2l0LmMKaW5kZXggZTVmMTJjZi4uMDcxYTk1NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9wY2l0LmMKKysrIGIvYXJjaC9taXBzL3NuaS9wY2l0LmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCiAJbWlwc19jcHVfaXJxX2luaXQoKTsKIAlmb3IgKGkgPSBTTklfUENJVF9JTlRfU1RBUlQ7IGkgPD0gU05JX1BDSVRfSU5UX0VORDsgaSsrKQotCQlzZXRfaXJxX2NoaXAoaSwgJnBjaXRfaXJxX3R5cGUpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJnBjaXRfaXJxX3R5cGUsIGhhbmRsZV9sZXZlbF9pcnEpOwogCSoodm9sYXRpbGUgdTMyICopU05JX1BDSVRfSU5UX1JFRyA9IDA7CiAJc25pX2h3aW50ID0gc25pX3BjaXRfaHdpbnQ7CiAJY2hhbmdlX2MwX3N0YXR1cyhTVDBfSU0sIElFX0lSUTEpOwpAQCAtMjU5LDcgKzI1OSw3IEBACiAKIAltaXBzX2NwdV9pcnFfaW5pdCgpOwogCWZvciAoaSA9IFNOSV9QQ0lUX0lOVF9TVEFSVDsgaSA8PSBTTklfUENJVF9JTlRfRU5EOyBpKyspCi0JCXNldF9pcnFfY2hpcChpLCAmcGNpdF9pcnFfdHlwZSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmcGNpdF9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CiAJKih2b2xhdGlsZSB1MzIgKilTTklfUENJVF9JTlRfUkVHID0gMHg0MDAwMDAwMDsKIAlzbmlfaHdpbnQgPSBzbmlfcGNpdF9od2ludF9jcGx1czsKIAljaGFuZ2VfYzBfc3RhdHVzKFNUMF9JTSwgSUVfSVJRMCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3JtMjAwLmMgYi9hcmNoL21pcHMvc25pL3JtMjAwLmMKaW5kZXggNTMxMGFhNy4uNWU2ODc4MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9ybTIwMC5jCisrKyBiL2FyY2gvbWlwcy9zbmkvcm0yMDAuYwpAQCAtMzU5LDcgKzM1OSw4IEBACiAgKiBJUlEyIGlzIGNhc2NhZGUgaW50ZXJydXB0IHRvIHNlY29uZCBpbnRlcnJ1cHQgY29udHJvbGxlcgogICovCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBzbmlfcm0yMDBfaXJxMiA9IHsKLQlub19hY3Rpb24sIDAsIENQVV9NQVNLX05PTkUsICJjYXNjYWRlIiwgTlVMTCwgTlVMTAorCS5oYW5kbGVyID0gbm9fYWN0aW9uLAorCS5uYW1lID0gImNhc2NhZGUiLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbmlfcm0yMDBfcGljMV9yZXNvdXJjZSA9IHsKQEAgLTQ4Nyw3ICs0ODgsNyBAQAogCW1pcHNfY3B1X2lycV9pbml0KCk7CiAJLyogQWN0dWFsbHkgd2UndmUgZ290IG1vcmUgaW50ZXJydXB0cyB0byBoYW5kbGUgLi4uICAqLwogCWZvciAoaSA9IFNOSV9STTIwMF9JTlRfU1RBUlQ7IGkgPD0gU05JX1JNMjAwX0lOVF9FTkQ7IGkrKykKLQkJc2V0X2lycV9jaGlwKGksICZybTIwMF9pcnFfdHlwZSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmcm0yMDBfaXJxX3R5cGUsIGhhbmRsZV9sZXZlbF9pcnEpOwogCXNuaV9od2ludCA9IHNuaV9ybTIwMF9od2ludDsKIAljaGFuZ2VfYzBfc3RhdHVzKFNUMF9JTSwgSUVfSVJRMCk7CiAJc2V0dXBfaXJxKFNOSV9STTIwMF9JTlRfU1RBUlQgKyAwLCAmc25pX3JtMjAwX2k4MjU5QV9pcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvS2NvbmZpZyBiL2FyY2gvbWlwcy90eHg5L0tjb25maWcKaW5kZXggMjI2ZThiYi4uMGRiN2NmMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3R4eDkvS2NvbmZpZworKysgYi9hcmNoL21pcHMvdHh4OS9LY29uZmlnCkBAIC0yMCw3ICsyMCw2IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAKIGNvbmZpZyBUT1NISUJBX0pNUjM5MjcKIAlib29sICJUb3NoaWJhIEpNUi1UWDM5MjcgYm9hcmQiCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9pcnEuYyBiL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2lycS5jCmluZGV4IDkyZGQxYTAuLjljYzM4OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2lycS5jCisrKyBiL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2lycS5jCkBAIC0zMiw3ICszMiw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGNhc2NhZGVfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyCT0gbm9fYWN0aW9uLAotCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUJCT0gImNhc2NhZGUiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC90aW1lLmMgYi9hcmNoL21uMTAzMDAva2VybmVsL3RpbWUuYwppbmRleCBlNDYwNjU4Li4zOTVjYWYwIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL3RpbWUuYworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL3RpbWUuYwpAQCAtMzcsNyArMzcsNiBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdGltZXJfaXJxID0gewogCS5oYW5kbGVyCT0gdGltZXJfaW50ZXJydXB0LAogCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQgfCBJUlFGX1RJTUVSLAotCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUJCT0gInRpbWVyIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggNzRjYzMxMi4uYWQ2YjFjMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTExMSw2ICsxMTEsNyBAQAogCXNlbGVjdCBIQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JECiAJc2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIKKwlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAlzZWxlY3QgQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUIKIAlzZWxlY3QgSEFWRV9JREUKIAlzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1QKQEAgLTMxMiw3ICszMTMsNyBAQAogCiBjb25maWcgS0VYRUMKIAlib29sICJrZXhlYyBzeXN0ZW0gY2FsbCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIChQUENfUFJQTUMyODAwIHx8IFBQQ19NVUxUSVBMQVRGT1JNKSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEJPT0szUyAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBrZXhlYyBpcyBhIHN5c3RlbSBjYWxsIHRoYXQgaW1wbGVtZW50cyB0aGUgYWJpbGl0eSB0byBzaHV0ZG93biB5b3VyCiAJICBjdXJyZW50IGtlcm5lbCwgYW5kIHRvIHN0YXJ0IGFub3RoZXIga2VybmVsLiAgSXQgaXMgbGlrZSBhIHJlYm9vdApAQCAtNDA5LDYgKzQxMCwxOCBAQAogCWRlcGVuZHMgb24gUFBDNjQKIAlkZWZhdWx0IG4KIAorY29uZmlnIFNUREJJTlVUSUxTCisJYm9vbCAiVXNpbmcgc3RhbmRhcmQgYmludXRpbHMgc2V0dGluZ3MiCisJZGVwZW5kcyBvbiA0NHgKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUdXJuaW5nIHRoaXMgb3B0aW9uIG9mZiBhbGxvd3MgeW91IHRvIHNlbGVjdCAyNTZLQiBQQUdFX1NJWkUgb24gNDR4LgorCSAgTm90ZSwgdGhhdCBrZXJuZWwgd2lsbCBiZSBhYmxlIHRvIHJ1biBvbmx5IHRob3NlIGFwcGxpY2F0aW9ucywKKwkgIHdoaWNoIGhhZCBiZWVuIGNvbXBpbGVkIHVzaW5nIGJpbnV0aWxzIGxhdGVyIHRoYW4gMi4xNy41MC4wLjMgd2l0aAorCSAgJy16bWF4LXBhZ2Utc2l6ZScgc2V0IHRvIDI1NksgKHRoZSBkZWZhdWx0IGlzIDY0SykuIE9yLCBpZiB1c2luZworCSAgdGhlIG9sZGVyIGJpbnV0aWxzLCB5b3UgY2FuIHBhdGNoIHRoZW0gd2l0aCBhIHRyaXZpYWwgcGF0Y2gsIHdoaWNoCisJICBjaGFuZ2VzIHRoZSBFTEZfTUFYUEFHRVNJWkUgZGVmaW5pdGlvbiBmcm9tIDB4MTAwMDAgdG8gMHg0MDAwMC4KKwogY2hvaWNlCiAJcHJvbXB0ICJQYWdlIHNpemUiCiAJZGVmYXVsdCBQUENfNEtfUEFHRVMKQEAgLTQ0NCw2ICs0NTcsMTkgQEAKIAlib29sICI2NGsgcGFnZSBzaXplIiBpZiA0NHggfHwgUFBDX1NURF9NTVVfNjQKIAlzZWxlY3QgUFBDX0hBU19IQVNIXzY0SyBpZiBQUENfU1REX01NVV82NAogCitjb25maWcgUFBDXzI1NktfUEFHRVMKKwlib29sICIyNTZrIHBhZ2Ugc2l6ZSIgaWYgNDR4CisJZGVwZW5kcyBvbiAhU1REQklOVVRJTFMgJiYgKCFTSE1FTSB8fCBCUk9LRU4pCisJaGVscAorCSAgTWFrZSB0aGUgcGFnZSBzaXplIDI1NmsuCisKKwkgIEFzIHRoZSBFTEYgc3RhbmRhcmQgb25seSByZXF1aXJlcyBhbGlnbm1lbnQgdG8gc3VwcG9ydCBwYWdlCisJICBzaXplcyB1cCB0byA2NGssIHlvdSB3aWxsIG5lZWQgdG8gY29tcGlsZSBhbGwgb2YgeW91ciB1c2VyCisJICBzcGFjZSBhcHBsaWNhdGlvbnMgd2l0aCBhIG5vbi1zdGFuZGFyZCBiaW51dGlscyBzZXR0aW5ncworCSAgKHNlZSB0aGUgU1REQklOVVRJTFMgZGVzY3JpcHRpb24gZm9yIGRldGFpbHMpLgorCisJICBTYXkgTiB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorCiBlbmRjaG9pY2UKIAogY29uZmlnIEZPUkNFX01BWF9aT05FT1JERVIKQEAgLTQ1Niw2ICs0ODIsOCBAQAogCWRlZmF1bHQgIjkiIGlmIFBQQ19TVERfTU1VXzMyICYmIFBQQ18xNktfUEFHRVMKIAlyYW5nZSA3IDY0IGlmIFBQQ19TVERfTU1VXzMyICYmIFBQQ182NEtfUEFHRVMKIAlkZWZhdWx0ICI3IiBpZiBQUENfU1REX01NVV8zMiAmJiBQUENfNjRLX1BBR0VTCisJcmFuZ2UgNSA2NCBpZiBQUENfU1REX01NVV8zMiAmJiBQUENfMjU2S19QQUdFUworCWRlZmF1bHQgIjUiIGlmIFBQQ19TVERfTU1VXzMyICYmIFBQQ18yNTZLX1BBR0VTCiAJcmFuZ2UgMTEgNjQKIAlkZWZhdWx0ICIxMSIKIAloZWxwCkBAIC01OTQsNiArNjIyLDcgQEAKIGNvbmZpZyBGU0xfUENJCiAgCWJvb2wKIAlzZWxlY3QgUFBDX0lORElSRUNUX1BDSQorCXNlbGVjdCBQQ0lfUVVJUktTCiAKIGNvbmZpZyA0eHhfU09DCiAJYm9vbApAQCAtNzMwLDYgKzc1OSwyMiBAQAogCWhleCAiTWF4aW11bSBsb3cgbWVtb3J5IHNpemUgKGluIGJ5dGVzKSIgaWYgTE9XTUVNX1NJWkVfQk9PTAogCWRlZmF1bHQgIjB4MzAwMDAwMDAiCiAKK2NvbmZpZyBMT1dNRU1fQ0FNX05VTV9CT09MCisJYm9vbCAiU2V0IG51bWJlciBvZiBDQU1zIHRvIHVzZSB0byBtYXAgbG93IG1lbW9yeSIKKwlkZXBlbmRzIG9uIEFEVkFOQ0VEX09QVElPTlMgJiYgRlNMX0JPT0tFCisJaGVscAorCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIENBTSBzbG90cyB0aGF0CisJICB3aWxsIGJlIHVzZWQgdG8gbWFwIGxvdyBtZW1vcnkuICBUaGVyZSBhcmUgYSBsaW1pdGVkIG51bWJlciBvZiBzbG90cworCSAgYXZhaWxhYmxlIGFuZCBldmVuIG1vcmUgbGltaXRlZCBudW1iZXIgdGhhdCB3aWxsIGZpdCBpbiB0aGUgTDEgTU1VLgorCSAgSG93ZXZlciwgdXNpbmcgbW9yZSBlbnRyaWVzIHdpbGwgYWxsb3cgbWFwcGluZyBtb3JlIGxvdyBtZW1vcnkuICBUaGlzCisJICBjYW4gYmUgdXNlZnVsIGluIG9wdGltaXppbmcgdGhlIGxheW91dCBvZiBrZXJuZWwgdmlydHVhbCBtZW1vcnkuCisKKwkgIFNheSBOIGhlcmUgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KKworY29uZmlnIExPV01FTV9DQU1fTlVNCisJaW50ICJOdW1iZXIgb2YgQ0FNcyB0byB1c2UgdG8gbWFwIGxvdyBtZW1vcnkiIGlmIExPV01FTV9DQU1fTlVNX0JPT0wKKwlkZWZhdWx0IDMKKwogY29uZmlnIFJFTE9DQVRBQkxFCiAJYm9vbCAiQnVpbGQgYSByZWxvY2F0YWJsZSBrZXJuZWwgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgQURWQU5DRURfT1BUSU9OUyAmJiBGTEFUTUVNICYmIEZTTF9CT09LRQpAQCAtNzk0LDcgKzgzOSw3IEBACiAKIGNvbmZpZyBQSFlTSUNBTF9BTElHTgogCWhleAotCWRlZmF1bHQgIjB4MTAwMDAwMDAiIGlmIEZTTF9CT09LRQorCWRlZmF1bHQgIjB4MDQwMDAwMDAiIGlmIEZTTF9CT09LRQogCWhlbHAKIAkgIFRoaXMgdmFsdWUgcHV0cyB0aGUgYWxpZ25tZW50IHJlc3RyaWN0aW9ucyBvbiBwaHlzaWNhbCBhZGRyZXNzCiAJICB3aGVyZSBrZXJuZWwgaXMgbG9hZGVkIGFuZCBydW4gZnJvbS4gS2VybmVsIGlzIGNvbXBpbGVkIGZvciBhbgpAQCAtODE1LDMxICs4NjAsNiBAQAogCWRlZmF1bHQgIjB4ODAwMDAwMDAiIGlmIFBQQ19QUkVQIHx8IFBQQ184eHgKIAlkZWZhdWx0ICIweGMwMDAwMDAwIgogCi1jb25maWcgQ09OU0lTVEVOVF9TVEFSVF9CT09MCi0JYm9vbCAiU2V0IGN1c3RvbSBjb25zaXN0ZW50IG1lbW9yeSBwb29sIGFkZHJlc3MiCi0JZGVwZW5kcyBvbiBBRFZBTkNFRF9PUFRJT05TICYmIE5PVF9DT0hFUkVOVF9DQUNIRQotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSBiYXNlIHZpcnR1YWwgYWRkcmVzcwotCSAgb2YgdGhlIGNvbnNpc3RlbnQgbWVtb3J5IHBvb2wuICBUaGlzIHBvb2wgb2YgdmlydHVhbAotCSAgbWVtb3J5IGlzIHVzZWQgdG8gbWFrZSBjb25zaXN0ZW50IG1lbW9yeSBhbGxvY2F0aW9ucy4KLQotY29uZmlnIENPTlNJU1RFTlRfU1RBUlQKLQloZXggIkJhc2UgdmlydHVhbCBhZGRyZXNzIG9mIGNvbnNpc3RlbnQgbWVtb3J5IHBvb2wiIGlmIENPTlNJU1RFTlRfU1RBUlRfQk9PTAotCWRlZmF1bHQgIjB4ZmQwMDAwMDAiIGlmIChOT1RfQ09IRVJFTlRfQ0FDSEUgJiYgOHh4KQotCWRlZmF1bHQgIjB4ZmYxMDAwMDAiIGlmIE5PVF9DT0hFUkVOVF9DQUNIRQotCi1jb25maWcgQ09OU0lTVEVOVF9TSVpFX0JPT0wKLQlib29sICJTZXQgY3VzdG9tIGNvbnNpc3RlbnQgbWVtb3J5IHBvb2wgc2l6ZSIKLQlkZXBlbmRzIG9uIEFEVkFOQ0VEX09QVElPTlMgJiYgTk9UX0NPSEVSRU5UX0NBQ0hFCi0JaGVscAotCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHNpemUgb2YgdGhlCi0JICBjb25zaXN0ZW50IG1lbW9yeSBwb29sLiAgVGhpcyBwb29sIG9mIHZpcnR1YWwgbWVtb3J5Ci0JICBpcyB1c2VkIHRvIG1ha2UgY29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGlvbnMuCi0KLWNvbmZpZyBDT05TSVNURU5UX1NJWkUKLQloZXggIlNpemUgb2YgY29uc2lzdGVudCBtZW1vcnkgcG9vbCIgaWYgQ09OU0lTVEVOVF9TSVpFX0JPT0wKLQlkZWZhdWx0ICIweDAwMjAwMDAwIiBpZiBOT1RfQ09IRVJFTlRfQ0FDSEUKLQogY29uZmlnIFBJTl9UTEIKIAlib29sICJQaW5uZWQgS2VybmVsIFRMQnMgKDg2MCBPTkxZKSIKIAlkZXBlbmRzIG9uIEFEVkFOQ0VEX09QVElPTlMgJiYgOHh4CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnCmluZGV4IDA4ZjdjYzAuLjIyMDkxYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnCkBAIC0xMjksNyArMTI5LDcgQEAKIAogY29uZmlnIEJPT1RYX1RFWFQKIAlib29sICJTdXBwb3J0IGZvciBlYXJseSBib290IHRleHQgY29uc29sZSAoQm9vdFggb3IgT3BlbkZpcm13YXJlIG9ubHkpIgotCWRlcGVuZHMgb24gUFBDX09GICYmIFBQQ19NVUxUSVBMQVRGT1JNCisJZGVwZW5kcyBvbiBQUENfT0YgJiYgUFBDX0JPT0szUwogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc2VlIHByb2dyZXNzIG1lc3NhZ2VzIGZyb20gdGhlIGJvb3QgZmlybXdhcmUgaW4gdGV4dAogCSAgbW9kZS4gUmVxdWlyZXMgZWl0aGVyIEJvb3RYIG9yIE9wZW4gRmlybXdhcmUuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKaW5kZXggNzJkMTdmNS4uNTUxZmM1OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQpAQCAtMTQ3LDggKzE0Nyw4IEBACiAJCQkJICAgYXJjaC9wb3dlcnBjL21tLyBcCiAJCQkJICAgYXJjaC9wb3dlcnBjL2xpYi8gXAogCQkJCSAgIGFyY2gvcG93ZXJwYy9zeXNkZXYvIFwKLQkJCQkgICBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zLwotY29yZS0kKENPTkZJR19NQVRIX0VNVUxBVElPTikJKz0gYXJjaC9wb3dlcnBjL21hdGgtZW11LworCQkJCSAgIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvIFwKKwkJCQkgICBhcmNoL3Bvd2VycGMvbWF0aC1lbXUvCiBjb3JlLSQoQ09ORklHX1hNT04pCQkrPSBhcmNoL3Bvd2VycGMveG1vbi8KIGNvcmUtJChDT05GSUdfS1ZNKSAJCSs9IGFyY2gvcG93ZXJwYy9rdm0vCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKaW5kZXggZTg0ZGYzMy4uNDQ1OGFiYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKQEAgLTcwLDcgKzcwLDcgQEAKIAkJY3Vib290LWthdG1haS5jIGN1Ym9vdC1yYWluaWVyLmMgcmVkYm9vdC04eHguYyBlcDgyNDhlLmMgXAogCQljdWJvb3Qtd2FycC5jIGN1Ym9vdC04NXh4LWNwbTIuYyBjdWJvb3QteW9zZW1pdGUuYyBzaW1wbGVib290LmMgXAogCQl2aXJ0ZXg0MDUtaGVhZC5TIHZpcnRleC5jIHJlZGJvb3QtODN4eC5jIGN1Ym9vdC1zYW00NDBlcC5jIFwKLQkJY3Vib290LWFjYWRpYS5jCisJCWN1Ym9vdC1hY2FkaWEuYyBjdWJvb3QtYW1pZ2FvbmUuYwogc3JjLWJvb3QgOj0gJChzcmMtd2xpYikgJChzcmMtcGxhdCkgZW1wdHkuYwogCiBzcmMtYm9vdCA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCAkKHNyYy1ib290KSkKQEAgLTIzNSw3ICsyMzUsOSBAQAogCQkJCQkgICBkdGJJbWFnZS5hZGRlcjg3NS1yZWRib290CiAKICMgQm9hcmQgcG9ydHMgaW4gYXJjaC9wb3dlcnBjL3BsYXRmb3JtLzUyeHgvS2NvbmZpZwotaW1hZ2UtJChDT05GSUdfUFBDX0xJVEU1MjAwKQkJKz0gY3VJbWFnZS5saXRlNTIwMCBjdUltYWdlLmxpdGU1MjAwYgoraW1hZ2UtJChDT05GSUdfUFBDX0xJVEU1MjAwKQkJKz0gY3VJbWFnZS5saXRlNTIwMCBsaXRlNTIwMC5kdGIKK2ltYWdlLSQoQ09ORklHX1BQQ19MSVRFNTIwMCkJCSs9IGN1SW1hZ2UubGl0ZTUyMDBiIGxpdGU1MjAwYi5kdGIKK2ltYWdlLSQoQ09ORklHX1BQQ19NRURJQTUyMDApCQkrPSBjdUltYWdlLm1lZGlhNTIwMCBtZWRpYTUyMDAuZHRiCiAKICMgQm9hcmQgcG9ydHMgaW4gYXJjaC9wb3dlcnBjL3BsYXRmb3JtLzgyeHgvS2NvbmZpZwogaW1hZ2UtJChDT05GSUdfTVBDODI3Ml9BRFMpCQkrPSBjdUltYWdlLm1wYzgyNzJhZHMKQEAgLTI3NCw2ICsyNzYsOSBAQAogaW1hZ2UtJChDT05GSUdfTVBDNzQ0OEhQQzIpCQkrPSBjdUltYWdlLm1wYzc0NDhocGMyCiBpbWFnZS0kKENPTkZJR19QUENfQzJLKQkJCSs9IGN1SW1hZ2UuYzJrCiAKKyMgQm9hcmQgcG9ydCBpbiBhcmNoL3Bvd2VycGMvcGxhdGZvcm0vYW1pZ2FvbmUvS2NvbmZpZworaW1hZ2UtJChDT05GSUdfQU1JR0FPTkUpCQkrPSBjdUltYWdlLmFtaWdhb25lCisKICMgRm9yIDMyLWJpdCBwb3dlcm1hY3MsIGJ1aWxkIHRoZSBDT0ZGIGFuZCBtaWJvb3QgaW1hZ2VzCiAjIGFzIHdlbGwgYXMgdGhlIEVMRiBpbWFnZXMuCiBpZmVxICgkKENPTkZJR19QUEMzMikseSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC1hbWlnYW9uZS5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LWFtaWdhb25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUwMjk2NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC1hbWlnYW9uZS5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBPbGQgVS1ib290IGNvbXBhdGliaWxpdHkgZm9yIEFtaWdhT25lCisgKgorICogQXV0aG9yOiBHZXJoYXJkIFBpcmNoZXIgKGdlcmhhcmRfcGlyY2hlckBnbXgubmV0KQorICoKKyAqICAgQmFzZWQgb24gY3Vib290LTgzeHguYworICogQ29weXJpZ2h0IChjKSAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAib3BzLmgiCisjaW5jbHVkZSAic3RkaW8uaCIKKyNpbmNsdWRlICJjdWJvb3QuaCIKKworI2luY2x1ZGUgInBwY2Jvb3QuaCIKKworc3RhdGljIGJkX3QgYmQ7CisKK3N0YXRpYyB2b2lkIHBsYXRmb3JtX2ZpeHVwcyh2b2lkKQoreworCWR0X2ZpeHVwX21lbW9yeShiZC5iaV9tZW1zdGFydCwgYmQuYmlfbWVtc2l6ZSk7CisJZHRfZml4dXBfY3B1X2Nsb2NrcyhiZC5iaV9pbnRmcmVxLCBiZC5iaV9idXNmcmVxIC8gNCwgYmQuYmlfYnVzZnJlcSk7Cit9CisKK3ZvaWQgcGxhdGZvcm1faW5pdCh1bnNpZ25lZCBsb25nIHIzLCB1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcpCit7CisJQ1VCT09UX0lOSVQoKTsKKwlmZHRfaW5pdChfZHRiX3N0YXJ0KTsKKwlzZXJpYWxfY29uc29sZV9pbml0KCk7CisJcGxhdGZvcm1fb3BzLmZpeHVwcyA9IHBsYXRmb3JtX2ZpeHVwczsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hbWlnYW9uZS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYW1pZ2FvbmUuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NTQ5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYW1pZ2FvbmUuZHRzCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQW1pZ2FPbmUgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IDIwMDggR2VyaGFyZCBQaXJjaGVyIChnZXJoYXJkX3BpcmNoZXJAZ214Lm5ldCkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJBbWlnYU9uZSI7CisJY29tcGF0aWJsZSA9ICJleWV0ZWNoLGFtaWdhb25lIjsKKwljb2hlcmVuY3ktb2ZmOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCisJY3B1cyB7CisJCSNjcHVzID0gPDE+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyAzMy4zIE1IeiwgZnJvbSBVLWJvb3QKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gVS1ib290CisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSBVLWJvb3QKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDAgMD47CQkJCS8vIEZyb20gVS1ib290CisJfTsKKworCXBjaUA4MDAwMDAwMCB7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAibWFpLWxvZ2ljLGFydGljaWEtcyI7CisJCWJ1cy1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCQlidXMtcmFuZ2UgPSA8MCAweGZmPjsKKwkJcmFuZ2VzID0gPDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4ZmUwMDAwMDAgMCAweDAwYzAwMDAwCS8vIFBDSSBJL08KKwkJICAgICAgICAgIDB4MDIwMDAwMDAgMCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMCAweDdkMDAwMDAwCS8vIFBDSSBtZW1vcnkKKwkJICAgICAgICAgIDB4MDIwMDAwMDAgMCAweDAwMDAwMDAwIDB4ZmQwMDAwMDAgMCAweDAxMDAwMDAwPjsJLy8gUENJIGFsaWFzIG1lbW9yeSAoSVNBKQorCQkvLyBDb25maWd1cmF0aW9uIGFkZHJlc3MgYW5kIGRhdGEgcmVnaXN0ZXIuCisJCXJlZyA9IDwweGZlYzAwY2Y4IDQKKwkJICAgICAgIDB4ZmVlMDBjZmMgND47CisJCTgyNTktaW50ZXJydXB0LWFja25vd2xlZGdlID0gPDB4ZmVmMDAwMDA+OworCQkvLyBEbyBub3QgZGVmaW5lIGEgaW50ZXJydXB0LXBhcmVudCBoZXJlLCBpZiB0aGVyZSBpcyBubworCQkvLyBpbnRlcnJ1cHQtbWFwIHByb3BlcnR5LgorCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisKKwkJaXNhQDcgeworCQkJZGV2aWNlX3R5cGUgPSAiaXNhIjsKKwkJCWNvbXBhdGlibGUgPSAicGNpY2xhc3MsMDYwMSI7CisJCQl2ZW5kb3ItaWQgPSA8MHgwMDAwMTEwNj47CisJCQlkZXZpY2UtaWQgPSA8MHgwMDAwMDY4Nj47CisJCQlyZXZpc2lvbi1pZCA9IDwweDAwMDAwMDEwPjsKKwkJCWNsYXNzLWNvZGUgPSA8MHgwMDA2MDEwMD47CisJCQlzdWJzeXN0ZW0taWQgPSA8MD47CisJCQlzdWJzeXN0ZW0tdmVuZG9yLWlkID0gPDA+OworCQkJZGV2c2VsLXNwZWVkID0gPDB4MDAwMDAwMDE+OworCQkJbWluLWdyYW50ID0gPDA+OworCQkJbWF4LWxhdGVuY3kgPSA8MD47CisJCQkvKiBGaXJzdCA2NGsgZm9yIEkvTyBhdCAweDAgb24gUENJIG1hcHBlZCB0byAweDAgb24gSVNBLiAqLworCQkJcmFuZ2VzID0gPDB4MDAwMDAwMDEgMCAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweDAwMDEwMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jmk4MjU5PjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCisJCQlkbWEtY29udHJvbGxlckAwIHsKKwkJCQljb21wYXRpYmxlID0gInBucFBOUCwyMDAiOworCQkJCXJlZyA9IDwxIDB4MDAwMDAwMDAgMHgwMDAwMDAyMAorCQkJCSAgICAgICAxIDB4MDAwMDAwODAgMHgwMDAwMDAxMAorCQkJCSAgICAgICAxIDB4MDAwMDAwYzAgMHgwMDAwMDAyMD47CisJCQl9OworCisJCQlpODI1OTogaW50ZXJydXB0LWNvbnRyb2xsZXJAMjAgeworCQkJCWRldmljZV90eXBlID0gImludGVycnVwdC1jb250cm9sbGVyIjsKKwkJCQljb21wYXRpYmxlID0gInBucFBOUCwwMDAiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCXJlZyA9IDwxIDB4MDAwMDAwMjAgMHgwMDAwMDAwMgorCQkJCSAgICAgICAxIDB4MDAwMDAwYTAgMHgwMDAwMDAwMgorCQkJCSAgICAgICAxIDB4MDAwMDA0ZDAgMHgwMDAwMDAwMj47CisJCQkJcmVzZXJ2ZWQtaW50ZXJydXB0cyA9IDwyPjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJfTsKKworCQkJdGltZXJANDAgeworCQkJCS8vIEFsc28gYWRkcyBwY3Nwa3IgdG8gcGxhdGZvcm0gZGV2aWNlcy4KKwkJCQljb21wYXRpYmxlID0gInBucFBOUCwxMDAiOworCQkJCXJlZyA9IDwxIDB4MDAwMDAwNDAgMHgwMDAwMDAyMD47CisJCQl9OworCisJCQk4MDQyQDYwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICI4MDQyIjsKKwkJCQlyZWcgPSA8MSAweDAwMDAwMDYwIDB4MDAwMDAwMDEKKwkJCQkgICAgICAgMSAweDAwMDAwMDY0IDB4MDAwMDAwMDE+OworCQkJCWludGVycnVwdHMgPSA8MSAzIDEyIDM+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJa2V5Ym9hcmRAMCB7CisJCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLDMwMyI7CisJCQkJCXJlZyA9IDwwPjsKKwkJCQl9OworCisJCQkJbW91c2VAMSB7CisJCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLGYwMyI7CisJCQkJCXJlZyA9IDwxPjsKKwkJCQl9OworCQkJfTsKKworCQkJcnRjQDcwIHsKKwkJCQljb21wYXRpYmxlID0gInBucFBOUCxiMDAiOworCQkJCXJlZyA9IDwxIDB4MDAwMDAwNzAgMHgwMDAwMDAwMj47CisJCQkJaW50ZXJydXB0cyA9IDw4IDM+OworCQkJfTsKKworCQkJc2VyaWFsQDNmOCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gInBucFBOUCw1MDEiLCJwbnBQTlAsNTAwIjsKKwkJCQlyZWcgPSA8MSAweDAwMDAwM2Y4IDB4MDAwMDAwMDg+OworCQkJCWludGVycnVwdHMgPSA8NCAzPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MTg0MzIwMD47CisJCQkJY3VycmVudC1zcGVlZCA9IDwxMTUyMDA+OworCQkJfTsKKworCQkJc2VyaWFsQDJmOCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gInBucFBOUCw1MDEiLCJwbnBQTlAsNTAwIjsKKwkJCQlyZWcgPSA8MSAweDAwMDAwMmY4IDB4MDAwMDAwMDg+OworCQkJCWludGVycnVwdHMgPSA8MyAzPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MTg0MzIwMD47CisJCQkJY3VycmVudC1zcGVlZCA9IDwxMTUyMDA+OworCQkJfTsKKworCQkJcGFyYWxsZWxAMzc4IHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJwYXJhbGxlbCI7CisJCQkJLy8gTm8gRUNQIHN1cHBvcnQgZm9yIG5vdywgb3RoZXJ3aXNlIGFkZCAicG5wUE5QLDQwMSIuCisJCQkJY29tcGF0aWJsZSA9ICJwbnBQTlAsNDAwIjsKKwkJCQlyZWcgPSA8MSAweDAwMDAwMzc4IDB4MDAwMDAwMDMKKwkJCQkgICAgICAgMSAweDAwMDAwNzc4IDB4MDAwMDAwMDM+OworCQkJfTsKKworCQkJZmRjQDNmMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAiZmRjIjsKKwkJCQljb21wYXRpYmxlID0gInBucFBOUCw3MDAiOworCQkJCXJlZyA9IDwxIDB4MDAwMDAzZjAgMHgwMDAwMDAwOD47CisJCQkJaW50ZXJydXB0cyA9IDw2IDM+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJZGlza0AwIHsKKwkJCQkJcmVnID0gPDA+OworCQkJCX07CisJCQl9OworCQl9OworCX07CisKKwljaG9zZW4geworCQlsaW51eCxzdGRvdXQtcGF0aCA9ICIvcGNpQDgwMDAwMDAwL2lzYUA3L3NlcmlhbEAzZjgiOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FzcDgzNHgtcmVkYm9vdC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXNwODM0eC1yZWRib290LmR0cwppbmRleCA1MjRhZjdlLi43ZGE4NGZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXNwODM0eC1yZWRib290LmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXNwODM0eC1yZWRib290LmR0cwpAQCAtMTgxLDcwICsxODEsNzYgQEAKIAkJCXBoeV90eXBlID0gInVscGkiOwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKLQkJCQlyZWcgPSA8MHgxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47Ci0JCQkJcmVnID0gPDB4Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0KLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwOCBlNSAxMSAzMiAzMyBdOwogCQkJaW50ZXJydXB0cyA9IDwzMiAweDggMzMgMHg4IDM0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47CisJCQkJCXJlZyA9IDwweDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwOCBlNSAxMSAzMiAzNCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAweDggMzYgMHg4IDM3IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CiAJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzCmluZGV4IDQ0NDdkZWYuLjVmZDFhZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NhbnlvbmxhbmRzLmR0cwpAQCAtMTQ5LDYgKzE0OSwyMCBAQAogCQkJCQkvKlJYREUqLyAgMHg1IDB4ND47CiAJCX07CiAKKyAgICAgICAgICAgICAgICBVU0IwOiBlaGNpQGJmZmQwNDAwIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAiaWJtLHVzYi1laGNpLTQ2MGV4IiwgInVzYi1laGNpIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdC1wYXJlbnQgPSA8JlVJQzI+OworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cyA9IDwweDFkIDQ+OworICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDQgMHhiZmZkMDQwMCAweDkwIDQgMHhiZmZkMDQ5MCAweDcwPjsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgVVNCMTogdXNiQGJmZmQwMDAwIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAib2hjaS1sZSI7CisgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSA8NCAweGJmZmQwMDAwIDB4NjA+OworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMj47CisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPDB4MWUgND47CisgICAgICAgICAgICAgICAgfTsKKwogCQlQT0IwOiBvcGIgewogCQkJY29tcGF0aWJsZSA9ICJpYm0sb3BiLTQ2MGV4IiwgImlibSxvcGIiOwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0yNTIsNiArMjY2LDIwIEBACiAJCQkJcmVnID0gPDB4ZWY2MDA3MDAgMHgwMDAwMDAxND47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CiAJCQkJaW50ZXJydXB0cyA9IDwweDIgMHg0PjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRjQDY4IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gInN0bSxtNDF0ODAiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDwweDY4PjsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMj47CisJCQkJCWludGVycnVwdHMgPSA8MHgxOSAweDg+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHRtQDQ4IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gImFkLGFkNzQxNCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDB4NDg+OworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDE0IDB4OD47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAJCQl9OwogCiAJCQlJSUMxOiBpMmNAZWY2MDA4MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NtNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cwppbmRleCAyZjc0Y2M0Li5jZWU4MDgwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cwpAQCAtMTcsNiArMTcsNyBAQAogCWNvbXBhdGlibGUgPSAic2NoaW5kbGVyLGNtNTIwMCI7CiAJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJI3NpemUtY2VsbHMgPSA8MT47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtNjYsNyArNjcsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDYwMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSA5IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJZnNsLGhhcy13ZHQ7CiAJCX07CiAKQEAgLTc0LDg0ICs3NCw3NiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDYxMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2MjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CiAJCQlyZWcgPSA8MHg2MjAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTEgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjMwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjMwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDEyIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY0MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDY0MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2NTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CiAJCQlyZWcgPSA8MHg2NTAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTQgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjYwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjYwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDE1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY3MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDY3MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlydGNAODAwIHsJLy8gUmVhbCB0aW1lIGNsb2NrCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ydGMiLCJmc2wsbXBjNTIwMC1ydGMiOwogCQkJcmVnID0gPDB4ODAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MSA1IDAgMSA2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCi0JCWdwaW9AYjAwIHsKKwkJZ3Bpb19zaW1wbGU6IGdwaW9AYjAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8iLCJmc2wsbXBjNTIwMC1ncGlvIjsKIAkJCXJlZyA9IDwweGIwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MSA3IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CiAKLQkJZ3Bpb0BjMDAgeworCQlncGlvX3drdXA6IGdwaW9AYzAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8td2t1cCIsImZzbCxtcGM1MjAwLWdwaW8td2t1cCI7CiAJCQlyZWcgPSA8MHhjMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgOCAwIDAgMyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwogCiAJCXNwaUBmMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItc3BpIiwiZnNsLG1wYzUyMDAtc3BpIjsKIAkJCXJlZyA9IDwweGYwMCAweDIwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxMyAwIDIgMTQgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdXNiQDEwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItb2hjaSIsImZzbCxtcGM1MjAwLW9oY2kiLCJvaGNpLWJlIjsKIAkJCXJlZyA9IDwweDEwMDAgMHhmZj47CiAJCQlpbnRlcnJ1cHRzID0gPDIgNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlkbWEtY29udHJvbGxlckAxMjAwIHsKQEAgLTE2MSw3ICsxNTMsNiBAQAogCQkJICAgICAgICAgICAgICAzIDQgMCAgMyA1IDAgIDMgNiAwICAzIDcgMAogCQkJICAgICAgICAgICAgICAzIDggMCAgMyA5IDAgIDMgMTAgMCAgMyAxMSAwCiAJCQkgICAgICAgICAgICAgIDMgMTIgMCAgMyAxMyAwICAzIDE0IDAgIDMgMTUgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJeGxiQDFmMDAgewpAQCAtMTcwLDQ4ICsxNjEsMzQgQEAKIAkJfTsKIAogCQlzZXJpYWxAMjAwMCB7CQkvLyBQU0MxCi0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7Ci0JCQlwb3J0LW51bWJlciA9IDwwPjsgIC8vIExvZ2ljYWwgcG9ydCBhc3NpZ25tZW50CiAJCQlyZWcgPSA8MHgyMDAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXNlcmlhbEAyMjAwIHsJCS8vIFBTQzIKLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKLQkJCXBvcnQtbnVtYmVyID0gPDE+OyAgLy8gTG9naWNhbCBwb3J0IGFzc2lnbm1lbnQKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwogCQkJcmVnID0gPDB4MjIwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlzZXJpYWxAMjQwMCB7CQkvLyBQU0MzCi0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1wc2MtdWFydCI7Ci0JCQlwb3J0LW51bWJlciA9IDwyPjsgIC8vIExvZ2ljYWwgcG9ydCBhc3NpZ25tZW50CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKIAkJCXJlZyA9IDwweDI0MDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDMgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJc2VyaWFsQDJjMDAgewkJLy8gUFNDNgotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwotCQkJcG9ydC1udW1iZXIgPSA8NT47ICAvLyBMb2dpY2FsIHBvcnQgYXNzaWdubWVudAogCQkJcmVnID0gPDB4MmMwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgNCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlldGhlcm5ldEAzMDAwIHsKLQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZmVjIiwiZnNsLG1wYzUyMDAtZmVjIjsKIAkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQl9OwogCkBAIC0yMjEsMTAgKzE5OCw4IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwiZnNsLG1wYzUyMDAtbWRpbyI7CiAJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsgICAgICAgLy8gZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzCiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsgICAvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAogCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQkJcmVnID0gPDA+OwogCQkJfTsKIAkJfTsKQEAgLTIzNSw3ICsyMTAsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIApAQCAtMjQ1LDkgKzIxOSw4IEBACiAJCX07CiAJfTsKIAotCWxwYiB7Ci0JCW1vZGVsID0gImZzbCxscGIiOwotCQljb21wYXRpYmxlID0gImZzbCxscGIiOworCWxvY2FsYnVzIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbHBiIiwic2ltcGxlLWJ1cyI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDI+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJcmFuZ2VzID0gPDAgMCAweGZjMDAwMDAwIDB4MjAwMDAwMD47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZGlnc3lfbXRjLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMzYxODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZGlnc3lfbXRjLmR0cwpAQCAtMCwwICsxLDI1NCBAQAorLyoKKyAqIERpZ3N5IE1UQyBib2FyZCBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU2VtaWhhbGYKKyAqCisgKiBCYXNlZCBvbiB0aGUgQ001MjAwIGJ5IE0uIEJhbGFrb3dpY3oKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJpbnRlcmNvbnRyb2wsZGlnc3ktbXRjIjsKKwljb21wYXRpYmxlID0gImludGVyY29udHJvbCxkaWdzeS1tdGMiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw1MjAwQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkJLy8gTDEsIDE2SworCQkJaS1jYWNoZS1zaXplID0gPDB4NDAwMD47CQkvLyBMMSwgMTZLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vIGZyb20gYm9vdGxvYWRlcgorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDIwMDAwMDA+OwkvLyAzMk1CCisJfTsKKworCXNvYzUyMDBAZjAwMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWltbXIiOworCQlyYW5nZXMgPSA8MCAweGYwMDAwMDAwIDB4MDAwMGMwMDA+OworCQlyZWcgPSA8MHhmMDAwMDAwMCAweDAwMDAwMTAwPjsKKwkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQlzeXN0ZW0tZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisKKwkJY2RtQDIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1jZG0iLCJmc2wsbXBjNTIwMC1jZG0iOworCQkJcmVnID0gPDB4MjAwIDB4Mzg+OworCQl9OworCisJCW1wYzUyMDBfcGljOiBpbnRlcnJ1cHQtY29udHJvbGxlckA1MDAgeworCQkJLy8gNTIwMCBpbnRlcnJ1cHRzIGFyZSBlbmNvZGVkIGludG8gdHdvIGxldmVsczsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBpYyIsImZzbCxtcGM1MjAwLXBpYyI7CisJCQlyZWcgPSA8MHg1MDAgMHg4MD47CisJCX07CisKKwkJdGltZXJANjAwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjAwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDkgMD47CisJCQlmc2wsaGFzLXdkdDsKKwkJfTsKKworCQl0aW1lckA2MTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MTAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTAgMD47CisJCX07CisKKwkJdGltZXJANjIwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjIwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDExIDA+OworCQl9OworCisJCXRpbWVyQDYzMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYzMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMiAwPjsKKwkJfTsKKworCQl0aW1lckA2NDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NDAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTMgMD47CisJCX07CisKKwkJdGltZXJANjUwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjUwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDE0IDA+OworCQl9OworCisJCXRpbWVyQDY2MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY2MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNSAwPjsKKwkJfTsKKworCQl0aW1lckA2NzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NzAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTYgMD47CisJCX07CisKKwkJZ3Bpb19zaW1wbGU6IGdwaW9AYjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8iLCJmc2wsbXBjNTIwMC1ncGlvIjsKKwkJCXJlZyA9IDwweGIwMCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MSA3IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3Bpb193a3VwOiBncGlvQGMwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvLXdrdXAiLCJmc2wsbXBjNTIwMC1ncGlvLXdrdXAiOworCQkJcmVnID0gPDB4YzAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDggMCAwIDMgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlzcGlAZjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNwaSIsImZzbCxtcGM1MjAwLXNwaSI7CisJCQlyZWcgPSA8MHhmMDAgMHgyMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTMgMCAyIDE0IDA+OworCQl9OworCisJCXVzYkAxMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW9oY2kiLCJmc2wsbXBjNTIwMC1vaGNpIiwib2hjaS1iZSI7CisJCQlyZWcgPSA8MHgxMDAwIDB4ZmY+OworCQkJaW50ZXJydXB0cyA9IDwyIDYgMD47CisJCX07CisKKwkJZG1hLWNvbnRyb2xsZXJAMTIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1iZXN0Y29tbSIsImZzbCxtcGM1MjAwLWJlc3Rjb21tIjsKKwkJCXJlZyA9IDwweDEyMDAgMHg4MD47CisJCQlpbnRlcnJ1cHRzID0gPDMgMCAwICAzIDEgMCAgMyAyIDAgIDMgMyAwCisJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCisJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyAxMCAwICAzIDExIDAKKwkJCSAgICAgICAgICAgICAgMyAxMiAwICAzIDEzIDAgIDMgMTQgMCAgMyAxNSAwPjsKKwkJfTsKKworCQl4bGJAMWYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi14bGIiLCJmc2wsbXBjNTIwMC14bGIiOworCQkJcmVnID0gPDB4MWYwMCAweDEwMD47CisJCX07CisKKwkJc2VyaWFsQDI2MDAgewkJLy8gUFNDNAorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CisJCQlyZWcgPSA8MHgyNjAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxMSAwPjsKKwkJfTsKKworCQlzZXJpYWxAMjgwMCB7CQkvLyBQU0M1CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCXJlZyA9IDwweDI4MDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDEyIDA+OworCQl9OworCisJCWV0aGVybmV0QDMwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZmVjIiwiZnNsLG1wYzUyMDAtZmVjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQl9OworCisJCW1kaW9AMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyIsImZzbCxtcGM1MjAwLW1kaW8iOworCQkJcmVnID0gPDB4MzAwMCAweDQwMD47ICAgICAgIC8vIGZlYyByYW5nZSwgc2luY2Ugd2UgbmVlZCB0byBzZXR1cCBmZWMgaW50ZXJydXB0cworCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47ICAgLy8gdGhlc2UgYXJlIGZvciAibWlpIGNvbW1hbmQgZmluaXNoZWQiLCBub3QgbGluayBjaGFuZ2VzICYgY28uCisKKwkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQlyZWcgPSA8MD47CisJCQl9OworCQl9OworCisJCWF0YUAzYTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWF0YSIsImZzbCxtcGM1MjAwLWF0YSI7CisJCQlyZWcgPSA8MHgzYTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiA3IDA+OworCQl9OworCisJCWkyY0AzZDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDNkMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47CisJCQlmc2w1MjAwLWNsb2NraW5nOworCisJCQlydGNANTAgeworCQkJCWNvbXBhdGlibGUgPSAiYXQsMjRjMDgiOworCQkJCXJlZyA9IDwweDUwPjsKKwkJCX07CisKKwkJCXJ0Y0A2OCB7CisJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM5IjsKKwkJCQlyZWcgPSA8MHg2OD47CisJCQl9OworCQl9OworCisJCXNyYW1AODAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcmFtIiwiZnNsLG1wYzUyMDAtc3JhbSI7CisJCQlyZWcgPSA8MHg4MDAwIDB4NDAwMD47CisJCX07CisJfTsKKworCWxwYiB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWxwYiIsInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlcyA9IDwwIDAgMHhmZjAwMDAwMCAweDEwMDAwMDA+OworCisJCS8vIDE2LWJpdCBmbGFzaCBkZXZpY2UgYXQgTG9jYWxQbHVzIEJ1cyBDUzAKKwkJZmxhc2hAMCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwwIDAgMHgxMDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAia2VybmVsIjsKKwkJCQlyZWcgPSA8MHgwIDB4MDAyMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAyMDAwMDAgeworCQkJCWxhYmVsID0gInJvb3QiOworCQkJCXJlZyA9IDwweDAwMjAwMDAwIDB4MDAzMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA1MDAwMDAgeworCQkJCWxhYmVsID0gInVzZXIiOworCQkJCXJlZyA9IDwweDAwNTAwMDAwIDB4MDBhMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkBmMDAwMDAgeworCQkJCWxhYmVsID0gInUtYm9vdCI7CisJCQkJcmVnID0gPDB4MDBmMDAwMDAgMHgxMDAwMDA+OworCQkJfTsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfcHBjOWEuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9wcGM5YS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3YWQwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfcHBjOWEuZHRzCkBAIC0wLDAgKzEsMzY3IEBACisvKgorICogR0UgRmFudWMgUFBDOUEgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IDIwMDggR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEJhc2VkIG9uOiBTQlMgQ002IERldmljZSBUcmVlIFNvdXJjZQorICogQ29weXJpZ2h0IDIwMDcgU0JTIFRlY2hub2xvZ2llcyBHbWJIICYgQ28uIEtHCisgKiBBbmQ6IG1wYzg2NDFfaHBjbi5kdHMgKE1QQzg2NDEgSFBDTiBEZXZpY2UgVHJlZSBTb3VyY2UpCisgKiBDb3B5cmlnaHQgMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKi8KKworLyoKKyAqIENvbXBpbGVkIHdpdGggZHRjIC1JIGR0cyAtTyBkdGIgLW8gZ2VmX3BwYzlhLmR0YiBnZWZfcHBjOWEuZHRzCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gIkdFRl9QUEM5QSI7CisJY29tcGF0aWJsZSA9ICJnZWYscHBjOWEiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZlbmV0MDsKKwkJZXRoZXJuZXQxID0gJmVuZXQxOworCQlzZXJpYWwwID0gJnNlcmlhbDA7CisJCXNlcmlhbDEgPSAmc2VyaWFsMTsKKwkJcGNpMCA9ICZwY2kwOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsODY0MUAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlkLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJaS1jYWNoZS1zaXplID0gPDMyNzY4PjsJCS8vIEwxLCAzMksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gRnJvbSB1Ym9vdAorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gdWJvb3QKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gdWJvb3QKKwkJfTsKKwkJUG93ZXJQQyw4NjQxQDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwxPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyBGcm9tIHVib290CisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwIDB4NDAwMDAwMDA+OwkvLyBzZXQgYnkgdWJvb3QKKwl9OworCisJbG9jYWxidXNAZmVmMDUwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtbG9jYWxidXMiLCAic2ltcGxlLWJ1cyI7CisJCXJlZyA9IDwweGZlZjA1MDAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8MTkgMj47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCisJCXJhbmdlcyA9IDwwIDAgMHhmZjAwMDAwMCAweDAxMDAwMDAwCS8vIDE2TUIgQm9vdCBmbGFzaAorCQkJICAxIDAgMHhlODAwMDAwMCAweDA4MDAwMDAwCS8vIFBhZ2VkIEZsYXNoIDAKKwkJCSAgMiAwIDB4ZTAwMDAwMDAgMHgwODAwMDAwMAkvLyBQYWdlZCBGbGFzaCAxCisJCQkgIDMgMCAweGZjMTAwMDAwIDB4MDAwMjAwMDAJLy8gTlZSQU0KKwkJCSAgNCAwIDB4ZmMwMDAwMDAgMHgwMDAwODAwMAkvLyBGUEdBCisJCQkgIDUgMCAweGZjMDA4MDAwIDB4MDAwMDgwMDAJLy8gQUZJWCBGUEdBCisJCQkgIDYgMCAweGZkMDAwMDAwIDB4MDA4MDAwMDAJLy8gSU8gRlBHQSAoOC1iaXQpCisJCQkgIDcgMCAweGZkODAwMDAwIDB4MDA4MDAwMDA+OwkvLyBJTyBGUEdBICgzMi1iaXQpCisKKwkJLyogZmxhc2hAMCwwIGlzIGEgbWlycm9yIG9mIHBhcnQgb2YgdGhlIG1lbW9yeSBpbiBmbGFzaEAxLDAKKwkJZmxhc2hAMCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLHBwYzlhLWZpcm13YXJlLW1pcnJvciIsICJjZmktZmxhc2giOworCQkJcmVnID0gPDB4MCAweDAgMHgxMDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8ND47CisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gImZpcm13YXJlIjsKKwkJCQlyZWcgPSA8MHgwIDB4MTAwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJfTsKKwkJKi8KKworCQlmbGFzaEAxLDAgeworCQkJY29tcGF0aWJsZSA9ICJnZWYscHBjOWEtcGFnZWQtZmxhc2giLCAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwweDEgMHgwIDB4ODAwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDQ+OworCQkJZGV2aWNlLXdpZHRoID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJ1c2VyIjsKKwkJCQlyZWcgPSA8MHgwIDB4NzgwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDc4MDAwMDAgeworCQkJCWxhYmVsID0gImZpcm13YXJlIjsKKwkJCQlyZWcgPSA8MHg3ODAwMDAwIDB4ODAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQl9OworCisJCWZwZ2FANCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLHBwYzlhLWZwZ2EtcmVncyI7CisJCQlyZWcgPSA8MHg0IDB4MCAweDQwPjsKKwkJfTsKKworCQl3ZHRANCwyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLHBwYzlhLWZwZ2Etd2R0IiwgImdlZixmcGdhLXdkdC0xLjAwIiwKKwkJCQkiZ2VmLGZwZ2Etd2R0IjsKKwkJCXJlZyA9IDwweDQgMHgyMDAwIDB4OD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWEgMHg0PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdlZl9waWM+OworCQl9OworCQkvKiBTZWNvbmQgd2F0Y2hkb2cgYXZhaWxhYmxlLCBkcml2ZXIgY3VycmVudGx5IHN1cHBvcnRzIG9uZS4KKwkJd2R0QDQsMjAxMCB7CisJCQljb21wYXRpYmxlID0gImdlZixwcGM5YS1mcGdhLXdkdCIsICJnZWYsZnBnYS13ZHQtMS4wMCIsCisJCQkJImdlZixmcGdhLXdkdCI7CisJCQlyZWcgPSA8MHg0IDB4MjAxMCAweDg+OworCQkJaW50ZXJydXB0cyA9IDwweDFiIDB4ND47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKKwkJfTsKKwkJKi8KKwkJZ2VmX3BpYzogcGljQDQsNDAwMCB7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQljb21wYXRpYmxlID0gImdlZixwcGM5YS1mcGdhLXBpYyIsICJnZWYsZnBnYS1waWMtMS4wMCI7CisJCQlyZWcgPSA8MHg0IDB4NDAwMCAweDIwPjsKKwkJCWludGVycnVwdHMgPSA8MHg4CisJCQkJICAgICAgMHg5PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCisJCX07CisJCWdlZl9ncGlvOiBncGlvQDcsMTQwMDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImdlZixwcGM5YS1ncGlvIiwgImdlZixzYmM2MTAtZ3BpbyI7CisJCQlyZWcgPSA8MHg3IDB4MTQwMDAgMHgyND47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisJfTsKKworCXNvY0BmZWYwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1zb2MiLCAic2ltcGxlLWJ1cyI7CisJCXJhbmdlcyA9IDwweDAgMHhmZWYwMDAwMCAweDAwMTAwMDAwPjsKKwkJcmVnID0gPDB4ZmVmMDAwMDAgMHgxMDAwMDA+OwkvLyBDQ1NSQkFSIDFNCisJCWJ1cy1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCisJCWkyYzE6IGkyY0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MmIgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisKKwkJCWh3bW9uQDQ4IHsKKwkJCQljb21wYXRpYmxlID0gIm5hdGlvbmFsLGxtOTIiOworCQkJCXJlZyA9IDwweDQ4PjsKKwkJCX07CisKKwkJCWh3bW9uQDRjIHsKKwkJCQljb21wYXRpYmxlID0gImFkaSxhZHQ3NDYxIjsKKwkJCQlyZWcgPSA8MHg0Yz47CisJCQl9OworCisJCQlydGNANTEgeworCQkJCWNvbXBhdGlibGUgPSAiZXBzb24scng4NTgxIjsKKwkJCQlyZWcgPSA8MHgwMDAwMDA1MT47CisJCQl9OworCisJCQlldGlANmIgeworCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTY4MiI7CisJCQkJcmVnID0gPDB4NmI+OworCQkJfTsKKwkJfTsKKworCQlpMmMyOiBpMmNAMzEwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMxMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwweDJiIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCQl9OworCisJCWRtYUAyMTMwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1kbWEiLCAiZnNsLGVsb3BsdXMtZG1hIjsKKwkJCXJlZyA9IDwweDIxMzAwIDB4ND47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjExMDAgMHgyMDA+OworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRtYS1jaGFubmVsQDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZG1hLWNoYW5uZWwiLAorCQkJCQkgICAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIwIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYS1jaGFubmVsIiwKKwkJCQkJICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjEgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYS1jaGFubmVsIiwKKwkJCQkJICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIyIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDE4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1kbWEtY2hhbm5lbCIsCisJCQkJCSAgICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMyAyPjsKKwkJCX07CisJCX07CisKKwkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MHgxZCAweDIgMHgxZSAweDIgMHgyMiAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAiZ21paSI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2VmX3BpYz47CisJCQkJCWludGVycnVwdHMgPSA8MHg5IDB4ND47CisJCQkJCXJlZyA9IDwxPjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2VmX3BpYz47CisJCQkJCWludGVycnVwdHMgPSA8MHg4IDB4ND47CisJCQkJCXJlZyA9IDwzPjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQllbmV0MTogZXRoZXJuZXRAMjYwMDAgeworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwweDFmIDB4MiAweDIwIDB4MiAweDIxIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJnbWlpIjsKKwkJfTsKKworCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8MHgyYSAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJc2VyaWFsMTogc2VyaWFsQDQ2MDAgeworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDB4NDYwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWMgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCW1waWM6IHBpY0A0MDAwMCB7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OworCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKKwkJfTsKKworCQlnbG9iYWwtdXRpbGl0aWVzQGUwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZ3V0cyI7CisJCQlyZWcgPSA8MHhlMDAwMCAweDEwMDA+OworCQkJZnNsLGhhcy1yc3RjcjsKKwkJfTsKKwl9OworCisJcGNpMDogcGNpZUBmZWYwODAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtcGNpZSI7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJcmVnID0gPDB4ZmVmMDgwMDAgMHgxMDAwPjsKKwkJYnVzLXJhbmdlID0gPDB4MCAweGZmPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHg0MDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZmUwMDAwMDAgMHgwIDB4MDA0MDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDwweDE4IDB4Mj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJMHgwMDAwIDB4MCAweDAgMHgxICZtcGljIDB4MCAweDEKKwkJCTB4MDAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDEgMHgxCisJCQkweDAwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgyIDB4MQorCQkJMHgwMDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDEKKwkJPjsKKworCQlwY2llQDAgeworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDgwMDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDB4MCAweDgwMDAwMDAwCisJCQkJICAweDAgMHg0MDAwMDAwMAorCisJCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwCisJCQkJICAweDAgMHgwMDQwMDAwMD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzMxMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzMxMC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU2OTExNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjMzEwLmR0cwpAQCAtMCwwICsxLDM2NyBAQAorLyoKKyAqIEdFIEZhbnVjIFNCQzMxMCBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgRW1iZWRkZWQgU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogQmFzZWQgb246IFNCUyBDTTYgRGV2aWNlIFRyZWUgU291cmNlCisgKiBDb3B5cmlnaHQgMjAwNyBTQlMgVGVjaG5vbG9naWVzIEdtYkggJiBDby4gS0cKKyAqIEFuZDogbXBjODY0MV9ocGNuLmR0cyAoTVBDODY0MSBIUENOIERldmljZSBUcmVlIFNvdXJjZSkKKyAqIENvcHlyaWdodCAyMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqLworCisvKgorICogQ29tcGlsZWQgd2l0aCBkdGMgLUkgZHRzIC1PIGR0YiAtbyBnZWZfc2JjMzEwLmR0YiBnZWZfc2JjMzEwLmR0cworICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJHRUZfU0JDMzEwIjsKKwljb21wYXRpYmxlID0gImdlZixzYmMzMTAiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZlbmV0MDsKKwkJZXRoZXJuZXQxID0gJmVuZXQxOworCQlzZXJpYWwwID0gJnNlcmlhbDA7CisJCXNlcmlhbDEgPSAmc2VyaWFsMTsKKwkJcGNpMCA9ICZwY2kwOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsODY0MUAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlkLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJaS1jYWNoZS1zaXplID0gPDMyNzY4PjsJCS8vIEwxLCAzMksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gRnJvbSB1Ym9vdAorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gdWJvb3QKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gdWJvb3QKKwkJfTsKKwkJUG93ZXJQQyw4NjQxQDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwxPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyBGcm9tIHVib290CisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwIDB4NDAwMDAwMDA+OwkvLyBzZXQgYnkgdWJvb3QKKwl9OworCisJbG9jYWxidXNAZmVmMDUwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtbG9jYWxidXMiLCAic2ltcGxlLWJ1cyI7CisJCXJlZyA9IDwweGZlZjA1MDAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8MTkgMj47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCisJCXJhbmdlcyA9IDwwIDAgMHhmZjAwMDAwMCAweDAxMDAwMDAwCS8vIDE2TUIgQm9vdCBmbGFzaAorCQkJICAxIDAgMHhlMDAwMDAwMCAweDA4MDAwMDAwCS8vIFBhZ2VkIEZsYXNoIDAKKwkJCSAgMiAwIDB4ZTgwMDAwMDAgMHgwODAwMDAwMAkvLyBQYWdlZCBGbGFzaCAxCisJCQkgIDMgMCAweGZjMTAwMDAwIDB4MDAwMjAwMDAJLy8gTlZSQU0KKwkJCSAgNCAwIDB4ZmMwMDAwMDAgMHgwMDAxMDAwMD47CS8vIEZQR0EKKworCQkvKiBmbGFzaEAwLDAgaXMgYSBtaXJyb3Igb2YgcGFydCBvZiB0aGUgbWVtb3J5IGluIGZsYXNoQDEsMAorCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDAgMCAweDAxMDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gImZpcm13YXJlIjsKKwkJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAxMDAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQl9OworCQkqLworCisJCWZsYXNoQDEsMCB7CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MSAwIDB4ODAwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJZGV2aWNlLXdpZHRoID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJ1c2VyIjsKKwkJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDA3ODAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzgwMDAwMCB7CisJCQkJbGFiZWwgPSAiZmlybXdhcmUiOworCQkJCXJlZyA9IDwweDA3ODAwMDAwIDB4MDA4MDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisJCX07CisKKwkJZnBnYUA0LDAgeworCQkJY29tcGF0aWJsZSA9ICJnZWYsZnBnYS1yZWdzIjsKKwkJCXJlZyA9IDwweDQgMHgwIDB4NDA+OworCQl9OworCisJCXdkdEA0LDIwMDAgeworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCWRldmljZV90eXBlID0gIndhdGNoZG9nIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLGZwZ2Etd2R0IjsKKwkJCXJlZyA9IDwweDQgMHgyMDAwIDB4OD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWEgMHg0PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdlZl9waWM+OworCQl9OworLyoKKwkJd2R0QDQsMjAxMCB7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAid2F0Y2hkb2ciOworCQkJY29tcGF0aWJsZSA9ICJnZWYsZnBnYS13ZHQiOworCQkJcmVnID0gPDB4NCAweDIwMTAgMHg4PjsKKwkJCWludGVycnVwdHMgPSA8MHgxYiAweDQ+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2VmX3BpYz47CisJCX07CisqLworCQlnZWZfcGljOiBwaWNANCw0MDAwIHsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLGZwZ2EtcGljIjsKKwkJCXJlZyA9IDwweDQgMHg0MDAwIDB4MjA+OworCQkJaW50ZXJydXB0cyA9IDwweDgKKwkJCQkgICAgICAweDk+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisKKwkJfTsKKwkJZ2VmX2dwaW86IGdwaW9ANCw4MDAwIHsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJY29tcGF0aWJsZSA9ICJnZWYsc2JjMzEwLWdwaW8iOworCQkJcmVnID0gPDB4NCAweDgwMDAgMHgyND47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisJfTsKKworCXNvY0BmZWYwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJZGV2aWNlX3R5cGUgPSAic29jIjsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzID0gPDB4MCAweGZlZjAwMDAwIDB4MDAxMDAwMDA+OworCQlyZWcgPSA8MHhmZWYwMDAwMCAweDEwMDAwMD47CS8vIENDU1JCQVIgMU0KKwkJYnVzLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisKKwkJaTJjMTogaTJjQDMwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MHgyYiAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlkZnNycjsKKworCQkJcnRjQDUxIHsKKwkJCQljb21wYXRpYmxlID0gImVwc29uLHJ4ODU4MSI7CisJCQkJcmVnID0gPDB4MDAwMDAwNTE+OworCQkJfTsKKwkJfTsKKworCQlpMmMyOiBpMmNAMzEwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMxMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwweDJiIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCisJCQlod21vbkA0OCB7CisJCQkJY29tcGF0aWJsZSA9ICJuYXRpb25hbCxsbTkyIjsKKwkJCQlyZWcgPSA8MHg0OD47CisJCQl9OworCisJCQlod21vbkA0YyB7CisJCQkJY29tcGF0aWJsZSA9ICJhZGksYWR0NzQ2MSI7CisJCQkJcmVnID0gPDB4NGM+OworCQkJfTsKKworCQkJZXRpQDZiIHsKKwkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczE2ODIiOworCQkJCXJlZyA9IDwweDZiPjsKKwkJCX07CisJCX07CisKKwkJZG1hQDIxMzAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYSIsICJmc2wsZWxvcGx1cy1kbWEiOworCQkJcmVnID0gPDB4MjEzMDAgMHg0PjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyMTEwMCAweDIwMD47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZG1hLWNoYW5uZWxAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1kbWEtY2hhbm5lbCIsCisJCQkJCSAgICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjAgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZG1hLWNoYW5uZWwiLAorCQkJCQkgICAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMSAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZG1hLWNoYW5uZWwiLAorCQkJCQkgICAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjIgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYS1jaGFubmVsIiwKKwkJCQkJICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIzIDI+OworCQkJfTsKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwweDFkIDB4MiAweDFlIDB4MiAweDIyIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJnbWlpIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDkgMHg0PjsKKwkJCQkJcmVnID0gPDE+OworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDggMHg0PjsKKwkJCQkJcmVnID0gPDM+OworCQkJCX07CisJCQl9OworCQl9OworCisJCWVuZXQxOiBldGhlcm5ldEAyNjAwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDB4MWYgMHgyIDB4MjAgMHgyIDB4MjEgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gImdtaWkiOworCQl9OworCisJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ1MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDwweDJhIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8MHgxYyAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJbXBpYzogcGljQDQwMDAwIHsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJcmVnID0gPDB4NDAwMDAgMHg0MDAwMD47CisJCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOworCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOworCQl9OworCisJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1ndXRzIjsKKwkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47CisJCQlmc2wsaGFzLXJzdGNyOworCQl9OworCX07CisKKwlwY2kwOiBwY2llQGZlZjA4MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1wY2llIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlyZWcgPSA8MHhmZWYwODAwMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MHgwIDB4ZmY+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDQwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhmZTAwMDAwMCAweDAgMHgwMDQwMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDB4MTggMHgyPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkweDAwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MgorCQkJMHgwMDAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDIKKwkJCTB4MDAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgyCisJCQkweDAwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MgorCQk+OworCisJCXBjaWVAMCB7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MCAweDQwMDAwMDAwCisKKwkJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MCAweDAwNDAwMDAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjNjEwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjNjEwLmR0cwppbmRleCBlNzhjMzU1Li42NTgyZGJkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzYxMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzCkBAIC03MSw3ICs3MSw3IEBACiAJCSNhZGRyZXNzLWNlbGxzID0gPDI+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1sb2NhbGJ1cyIsICJzaW1wbGUtYnVzIjsKLQkJcmVnID0gPDB4ZjgwMDUwMDAgMHgxMDAwPjsKKwkJcmVnID0gPDB4ZmVmMDUwMDAgMHgxMDAwPjsKIAkJaW50ZXJydXB0cyA9IDwxOSAyPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAKQEAgLTIwMiwzNCArMjAyLDM3IEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdlZl9waWM+OwotCQkJCWludGVycnVwdHMgPSA8MHg5IDB4ND47Ci0JCQkJcmVnID0gPDE+OwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDB4OCAweDQ+OwotCQkJCXJlZyA9IDwzPjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MHgxZCAweDIgMHgxZSAweDIgMHgyMiAweDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAiZ21paSI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2VmX3BpYz47CisJCQkJCWludGVycnVwdHMgPSA8MHg5IDB4ND47CisJCQkJCXJlZyA9IDwxPjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2VmX3BpYz47CisJCQkJCWludGVycnVwdHMgPSA8MHg4IDB4ND47CisJCQkJCXJlZyA9IDwzPjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjYwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2tzaTg1NjAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2tzaTg1NjAuZHRzCmluZGV4IDNiZmZmNDcuLjMwOGZlN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rc2k4NTYwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva3NpODU2MC5kdHMKQEAgLTEyNCw2NyArMTI0LDcyIEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewkJCQkJLyogRm9yIFRTRUNzICovCi0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlQSFkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0KLQkJCVBIWTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlyZWcgPSA8MHgyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQkvKiBNYWMgYWRkcmVzcyBmaWxsZWQgaW4gYnkgYm9vdHdyYXBwZXIgKi8KIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwweDFkIDB4MiAweDFlIDB4MiAweDIyIDB4Mj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmUEhZMT47CisKKwkJCW1kaW9ANTIwIHsJCQkJCS8qIEZvciBUU0VDcyAqLworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJUEhZMTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCVBIWTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJLyogTWFjIGFkZHJlc3MgZmlsbGVkIGluIGJ5IGJvb3R3cmFwcGVyICovCiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MHgyMyAweDIgMHgyNCAweDIgMHgyOCAweDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JlBIWTI+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCW1waWM6IHBpY0A0MDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwLmR0cwppbmRleCAzZjdhNWRjLi5kZTMwYjNmOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzCkBAIC0xNyw2ICsxNyw3IEBACiAJY29tcGF0aWJsZSA9ICJmc2wsbGl0ZTUyMDAiOwogCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCSNzaXplLWNlbGxzID0gPDE+OworCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTU4LDk2ICs1OSw3NCBAQAogCQkJLy8gNTIwMCBpbnRlcnJ1cHRzIGFyZSBlbmNvZGVkIGludG8gdHdvIGxldmVsczsKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKLQkJCWRldmljZV90eXBlID0gImludGVycnVwdC1jb250cm9sbGVyIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtcGljIjsKIAkJCXJlZyA9IDwweDUwMCAweDgwPjsKIAkJfTsKIAogCQl0aW1lckA2MDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MHg2MDAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgOSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCWZzbCxoYXMtd2R0OwogCQl9OwogCiAJCXRpbWVyQDYxMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCXJlZyA9IDwweDYxMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2MjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQlyZWcgPSA8MHg2MjAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTEgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjMwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDM+OwogCQkJcmVnID0gPDB4NjMwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDEyIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY0MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDw0PjsKIAkJCXJlZyA9IDwweDY0MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2NTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8NT47CiAJCQlyZWcgPSA8MHg2NTAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTQgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjYwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDY+OwogCQkJcmVnID0gPDB4NjYwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDE1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY3MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDw3PjsKIAkJCXJlZyA9IDwweDY3MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlydGNAODAwIHsJLy8gUmVhbCB0aW1lIGNsb2NrCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXJ0YyI7CiAJCQlyZWcgPSA8MHg4MDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDUgMCAxIDYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJY2FuQDkwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLW1zY2FuIjsKLQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlyZWcgPSA8MHg5MDAgMHg4MD47CiAJCX07CiAKIAkJY2FuQDk4MCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLW1zY2FuIjsKLQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTggMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlyZWcgPSA8MHg5ODAgMHg4MD47CiAJCX07CiAKQEAgLTE1NSwzOSArMTM0LDMzIEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwaW8iOwogCQkJcmVnID0gPDB4YjAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJZ3Bpb0BjMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncGlvLXdrdXAiOwogCQkJcmVnID0gPDB4YzAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDggMCAwIDMgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJc3BpQGYwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXNwaSI7CiAJCQlyZWcgPSA8MHhmMDAgMHgyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTMgMCAyIDE0IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXVzYkAxMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtb2hjaSIsIm9oY2ktYmUiOwogCQkJcmVnID0gPDB4MTAwMCAweGZmPjsKIAkJCWludGVycnVwdHMgPSA8MiA2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWRtYS1jb250cm9sbGVyQDEyMDAgewotCQkJZGV2aWNlX3R5cGUgPSAiZG1hLWNvbnRyb2xsZXIiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1iZXN0Y29tbSI7CiAJCQlyZWcgPSA8MHgxMjAwIDB4ODA+OwogCQkJaW50ZXJydXB0cyA9IDwzIDAgMCAgMyAxIDAgIDMgMiAwICAzIDMgMAogCQkJICAgICAgICAgICAgICAzIDQgMCAgMyA1IDAgIDMgNiAwICAzIDcgMAogCQkJICAgICAgICAgICAgICAzIDggMCAgMyA5IDAgIDMgMTAgMCAgMyAxMSAwCiAJCQkgICAgICAgICAgICAgIDMgMTIgMCAgMyAxMyAwICAzIDE0IDAgIDMgMTUgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJeGxiQDFmMDAgewpAQCAtMTk2LDEzICsxNjksMTAgQEAKIAkJfTsKIAogCQlzZXJpYWxAMjAwMCB7CQkvLyBQU0MxCi0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1wc2MtdWFydCI7Ci0JCQlwb3J0LW51bWJlciA9IDwwPjsgIC8vIExvZ2ljYWwgcG9ydCBhc3NpZ25tZW50CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJcmVnID0gPDB4MjAwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQkvLyBQU0MyIGluIGFjOTcgbW9kZSBleGFtcGxlCkBAIC0yMTEsNyArMTgxLDYgQEAKIAkJLy8JY2VsbC1pbmRleCA9IDwxPjsKIAkJLy8JcmVnID0gPDB4MjIwMCAweDEwMD47CiAJCS8vCWludGVycnVwdHMgPSA8MiAyIDA+OwotCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCS8vfTsKIAogCQkvLyBQU0MzIGluIENPREVDIG1vZGUgZXhhbXBsZQpAQCAtMjIwLDI3ICsxODksMjIgQEAKIAkJLy8JY2VsbC1pbmRleCA9IDwyPjsKIAkJLy8JcmVnID0gPDB4MjQwMCAweDEwMD47CiAJCS8vCWludGVycnVwdHMgPSA8MiAzIDA+OwotCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCS8vfTsKIAogCQkvLyBQU0M0IGluIHVhcnQgbW9kZSBleGFtcGxlCiAJCS8vc2VyaWFsQDI2MDAgewkJLy8gUFNDNAotCQkvLwlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkvLwljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKIAkJLy8JY2VsbC1pbmRleCA9IDwzPjsKIAkJLy8JcmVnID0gPDB4MjYwMCAweDEwMD47CiAJCS8vCWludGVycnVwdHMgPSA8MiAxMSAwPjsKLQkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkvL307CiAKIAkJLy8gUFNDNSBpbiB1YXJ0IG1vZGUgZXhhbXBsZQogCQkvL3NlcmlhbEAyODAwIHsJCS8vIFBTQzUKLQkJLy8JZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJLy8JY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CiAJCS8vCWNlbGwtaW5kZXggPSA8ND47CiAJCS8vCXJlZyA9IDwweDI4MDAgMHgxMDA+OwogCQkvLwlpbnRlcnJ1cHRzID0gPDIgMTIgMD47Ci0JCS8vCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJLy99OwogCiAJCS8vIFBTQzYgaW4gc3BpIG1vZGUgZXhhbXBsZQpAQCAtMjQ5LDE2ICsyMTMsMTMgQEAKIAkJLy8JY2VsbC1pbmRleCA9IDw1PjsKIAkJLy8JcmVnID0gPDB4MmMwMCAweDEwMD47CiAJCS8vCWludGVycnVwdHMgPSA8MiA0IDA+OwotCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCS8vfTsKIAogCQlldGhlcm5ldEAzMDAwIHsKLQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1mZWMiOwogCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MiA1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCX07CiAKQEAgLTI2OCwzMCArMjI5LDI0IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLW1kaW8iOwogCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CS8vIGZlYyByYW5nZSwgc2luY2Ugd2UgbmVlZCB0byBzZXR1cCBmZWMgaW50ZXJydXB0cwogCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47CS8vIHRoZXNlIGFyZSBmb3IgIm1paSBjb21tYW5kIGZpbmlzaGVkIiwgbm90IGxpbmsgY2hhbmdlcyAmIGNvLgotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCiAJCQlwaHkwOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCQlyZWcgPSA8MT47CiAJCQl9OwogCQl9OwogCiAJCWF0YUAzYTAwIHsKLQkJCWRldmljZV90eXBlID0gImF0YSI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWF0YSI7CiAJCQlyZWcgPSA8MHgzYTAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiA3IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWkyY0AzZDAwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwotCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCXJlZyA9IDwweDNkMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCkBAIC0yOTksMTQgKzI1NCwxMiBAQAogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAJCXNyYW1AODAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXNyYW0iLCJzcmFtIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtc3JhbSI7CiAJCQlyZWcgPSA8MHg4MDAwIDB4NDAwMD47CiAJCX07CiAJfTsKQEAgLTMyNSw3ICsyNzgsNiBAQAogCQkJCSAweGMwMDAgMCAwIDQgJm1wYzUyMDBfcGljIDAgMCAzPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvLyBGcm9tIGJvb3QgbG9hZGVyCiAJCWludGVycnVwdHMgPSA8MiA4IDAgMiA5IDAgMiAxMCAwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQlidXMtcmFuZ2UgPSA8MCAwPjsKIAkJcmFuZ2VzID0gPDB4NDIwMDAwMDAgMCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMCAweDIwMDAwMDAwCiAJCQkgIDB4MDIwMDAwMDAgMCAweGEwMDAwMDAwIDB4YTAwMDAwMDAgMCAweDEwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMGIuZHRzCmluZGV4IDYzZTNiYjQuLmM2M2UzNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMGIuZHRzCkBAIC0xNyw2ICsxNyw3IEBACiAJY29tcGF0aWJsZSA9ICJmc2wsbGl0ZTUyMDBiIjsKIAkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC01OCwxMzYgKzU5LDExMiBAQAogCQkJLy8gNTIwMCBpbnRlcnJ1cHRzIGFyZSBlbmNvZGVkIGludG8gdHdvIGxldmVsczsKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKLQkJCWRldmljZV90eXBlID0gImludGVycnVwdC1jb250cm9sbGVyIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBpYyIsImZzbCxtcGM1MjAwLXBpYyI7CiAJCQlyZWcgPSA8MHg1MDAgMHg4MD47CiAJCX07CiAKIAkJdGltZXJANjAwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCXJlZyA9IDwweDYwMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSA5IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJZnNsLGhhcy13ZHQ7CiAJCX07CiAKIAkJdGltZXJANjEwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCXJlZyA9IDwweDYxMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2MjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDI+OwogCQkJcmVnID0gPDB4NjIwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDExIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDYzMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQlyZWcgPSA8MHg2MzAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTIgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjQwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDw0PjsKIAkJCXJlZyA9IDwweDY0MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2NTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDU+OwogCQkJcmVnID0gPDB4NjUwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDE0IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY2MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8Nj47CiAJCQlyZWcgPSA8MHg2NjAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTUgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjcwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDw3PjsKIAkJCXJlZyA9IDwweDY3MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlydGNAODAwIHsJLy8gUmVhbCB0aW1lIGNsb2NrCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ydGMiLCJmc2wsbXBjNTIwMC1ydGMiOwogCQkJcmVnID0gPDB4ODAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MSA1IDAgMSA2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWNhbkA5MDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbXNjYW4iLCJmc2wsbXBjNTIwMC1tc2NhbiI7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE3IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcmVnID0gPDB4OTAwIDB4ODA+OwogCQl9OwogCiAJCWNhbkA5ODAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbXNjYW4iLCJmc2wsbXBjNTIwMC1tc2NhbiI7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE4IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcmVnID0gPDB4OTgwIDB4ODA+OwogCQl9OwogCi0JCWdwaW9AYjAwIHsKKwkJZ3Bpb19zaW1wbGU6IGdwaW9AYjAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8iLCJmc2wsbXBjNTIwMC1ncGlvIjsKIAkJCXJlZyA9IDwweGIwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MSA3IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CiAKLQkJZ3Bpb0BjMDAgeworCQlncGlvX3drdXA6IGdwaW9AYzAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8td2t1cCIsImZzbCxtcGM1MjAwLWdwaW8td2t1cCI7CiAJCQlyZWcgPSA8MHhjMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgOCAwIDAgMyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwogCiAJCXNwaUBmMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItc3BpIiwiZnNsLG1wYzUyMDAtc3BpIjsKIAkJCXJlZyA9IDwweGYwMCAweDIwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxMyAwIDIgMTQgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdXNiQDEwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItb2hjaSIsImZzbCxtcGM1MjAwLW9oY2kiLCJvaGNpLWJlIjsKIAkJCXJlZyA9IDwweDEwMDAgMHhmZj47CiAJCQlpbnRlcnJ1cHRzID0gPDIgNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlkbWEtY29udHJvbGxlckAxMjAwIHsKLQkJCWRldmljZV90eXBlID0gImRtYS1jb250cm9sbGVyIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWJlc3Rjb21tIiwiZnNsLG1wYzUyMDAtYmVzdGNvbW0iOwogCQkJcmVnID0gPDB4MTIwMCAweDgwPjsKIAkJCWludGVycnVwdHMgPSA8MyAwIDAgIDMgMSAwICAzIDIgMCAgMyAzIDAKIAkJCSAgICAgICAgICAgICAgMyA0IDAgIDMgNSAwICAzIDYgMCAgMyA3IDAKIAkJCSAgICAgICAgICAgICAgMyA4IDAgIDMgOSAwICAzIDEwIDAgIDMgMTEgMAogCQkJICAgICAgICAgICAgICAzIDEyIDAgIDMgMTMgMCAgMyAxNCAwICAzIDE1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXhsYkAxZjAwIHsKQEAgLTE5NiwxMyArMTczLDEwIEBACiAJCX07CiAKIAkJc2VyaWFsQDIwMDAgewkJLy8gUFNDMQotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwotCQkJcG9ydC1udW1iZXIgPSA8MD47ICAvLyBMb2dpY2FsIHBvcnQgYXNzaWdubWVudAogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCXJlZyA9IDwweDIwMDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJLy8gUFNDMiBpbiBhYzk3IG1vZGUgZXhhbXBsZQpAQCAtMjExLDcgKzE4NSw2IEBACiAJCS8vCWNlbGwtaW5kZXggPSA8MT47CiAJCS8vCXJlZyA9IDwweDIyMDAgMHgxMDA+OwogCQkvLwlpbnRlcnJ1cHRzID0gPDIgMiAwPjsKLQkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkvL307CiAKIAkJLy8gUFNDMyBpbiBDT0RFQyBtb2RlIGV4YW1wbGUKQEAgLTIyMCwyNyArMTkzLDIyIEBACiAJCS8vCWNlbGwtaW5kZXggPSA8Mj47CiAJCS8vCXJlZyA9IDwweDI0MDAgMHgxMDA+OwogCQkvLwlpbnRlcnJ1cHRzID0gPDIgMyAwPjsKLQkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkvL307CiAKIAkJLy8gUFNDNCBpbiB1YXJ0IG1vZGUgZXhhbXBsZQogCQkvL3NlcmlhbEAyNjAwIHsJCS8vIFBTQzQKLQkJLy8JZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJLy8JY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CiAJCS8vCWNlbGwtaW5kZXggPSA8Mz47CiAJCS8vCXJlZyA9IDwweDI2MDAgMHgxMDA+OwogCQkvLwlpbnRlcnJ1cHRzID0gPDIgMTEgMD47Ci0JCS8vCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJLy99OwogCiAJCS8vIFBTQzUgaW4gdWFydCBtb2RlIGV4YW1wbGUKIAkJLy9zZXJpYWxAMjgwMCB7CQkvLyBQU0M1Ci0JCS8vCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCS8vCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwogCQkvLwljZWxsLWluZGV4ID0gPDQ+OwogCQkvLwlyZWcgPSA8MHgyODAwIDB4MTAwPjsKIAkJLy8JaW50ZXJydXB0cyA9IDwyIDEyIDA+OwotCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCS8vfTsKIAogCQkvLyBQU0M2IGluIHNwaSBtb2RlIGV4YW1wbGUKQEAgLTI0OSw0OSArMjE3LDQwIEBACiAJCS8vCWNlbGwtaW5kZXggPSA8NT47CiAJCS8vCXJlZyA9IDwweDJjMDAgMHgxMDA+OwogCQkvLwlpbnRlcnJ1cHRzID0gPDIgNCAwPjsKLQkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkvL307CiAKIAkJZXRoZXJuZXRAMzAwMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWZlYyIsImZzbCxtcGM1MjAwLWZlYyI7CiAJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJfTsKIAogCQltZGlvQDMwMDAgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1kaW8iLCAiZnNsLG1wYzUyMDAtbWRpbyI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwiZnNsLG1wYzUyMDAtbWRpbyI7CiAJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsJLy8gZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzCiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsJLy8gdGhlc2UgYXJlIGZvciAibWlpIGNvbW1hbmQgZmluaXNoZWQiLCBub3QgbGluayBjaGFuZ2VzICYgY28uCi0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAKIAkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJCXJlZyA9IDwwPjsKIAkJCX07CiAJCX07CiAKIAkJYXRhQDNhMDAgewotCQkJZGV2aWNlX3R5cGUgPSAiYXRhIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWF0YSIsImZzbCxtcGM1MjAwLWF0YSI7CiAJCQlyZWcgPSA8MHgzYTAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiA3IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWkyY0AzZDAwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKLQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIApAQCAtMjk5LDE0ICsyNTgsMTMgQEAKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKLQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKKwogCQlzcmFtQDgwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItc3JhbSIsImZzbCxtcGM1MjAwLXNyYW0iLCJzcmFtIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNyYW0iLCJmc2wsbXBjNTIwMC1zcmFtIjsKIAkJCXJlZyA9IDwweDgwMDAgMHg0MDAwPjsKIAkJfTsKIAl9OwpAQCAtMzMwLDcgKzI4OCw2IEBACiAJCQkJIDB4YzgwMCAwIDAgNCAmbXBjNTIwMF9waWMgMCAwIDM+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8vIEZyb20gYm9vdCBsb2FkZXIKIAkJaW50ZXJydXB0cyA9IDwyIDggMCAyIDkgMCAyIDEwIDA+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCWJ1cy1yYW5nZSA9IDwwIDA+OwogCQlyYW5nZXMgPSA8MHg0MjAwMDAwMCAwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAwIDB4MjAwMDAwMDAKIAkJCSAgMHgwMjAwMDAwMCAwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAwIDB4MTAwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZWRpYTUyMDAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21lZGlhNTIwMC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI5N2Q4YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZWRpYTUyMDAuZHRzCkBAIC0wLDAgKzEsMzE4IEBACisvKgorICogRnJlZXNjYWxlIE1lZGlhNTIwMCBib2FyZCBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTZWNyZXQgTGFiIFRlY2hub2xvZ2llcyBMdGQuCisgKiBHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+CisgKiBTdGV2ZW4gQ2F2YW5hZ2ggPHNjYXZhbmFnaEBzZWNyZXRsYWIuY2E+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKworLyB7CisJbW9kZWwgPSAiZnNsLG1lZGlhNTIwMCI7CisJY29tcGF0aWJsZSA9ICJmc2wsbWVkaWE1MjAwIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisKKwlhbGlhc2VzIHsKKwkJY29uc29sZSA9ICZjb25zb2xlOworCQlldGhlcm5ldDAgPSAmZXRoMDsKKwl9OworCisJY2hvc2VuIHsKKwkJbGludXgsc3Rkb3V0LXBhdGggPSAmY29uc29sZTsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlQb3dlclBDLDUyMDBAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJZC1jYWNoZS1zaXplID0gPDB4NDAwMD47CQkvLyBMMSwgMTZLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJCS8vIEwxLCAxNksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwzMzAwMDAwMD47CS8vIDMzIE1IeiwgdGhlc2Ugd2VyZSBjb25maWd1cmVkIGJ5IFUtQm9vdAorCQkJYnVzLWZyZXF1ZW5jeSA9IDwxMzIwMDAwMDA+OwkJLy8gMTMyIE1IegorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDM5NjAwMDAwMD47CQkvLyAzOTYgTUh6CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDgwMDAwMDA+OwkvLyAxMjhNQiBSQU0KKwl9OworCisJc29jQGYwMDAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pbW1yIjsKKwkJcmFuZ2VzID0gPDAgMHhmMDAwMDAwMCAweDAwMDBjMDAwPjsKKwkJcmVnID0gPDB4ZjAwMDAwMDAgMHgwMDAwMDEwMD47CisJCWJ1cy1mcmVxdWVuY3kgPSA8MTMyMDAwMDAwPjsvLyAxMzIgTUh6CisJCXN5c3RlbS1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKworCQljZG1AMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWNkbSIsImZzbCxtcGM1MjAwLWNkbSI7CisJCQlyZWcgPSA8MHgyMDAgMHgzOD47CisJCX07CisKKwkJbXBjNTIwMF9waWM6IGludGVycnVwdC1jb250cm9sbGVyQDUwMCB7CisJCQkvLyA1MjAwIGludGVycnVwdHMgYXJlIGVuY29kZWQgaW50byB0d28gbGV2ZWxzOworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcGljIiwiZnNsLG1wYzUyMDAtcGljIjsKKwkJCXJlZyA9IDwweDUwMCAweDgwPjsKKwkJfTsKKworCQl0aW1lckA2MDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MDAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgOSAwPjsKKwkJCWZzbCxoYXMtd2R0OworCQl9OworCisJCXRpbWVyQDYxMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYxMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMCAwPjsKKwkJfTsKKworCQl0aW1lckA2MjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MjAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTEgMD47CisJCX07CisKKwkJdGltZXJANjMwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjMwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEyIDA+OworCQl9OworCisJCXRpbWVyQDY0MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY0MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMyAwPjsKKwkJfTsKKworCQl0aW1lckA2NTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NTAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTQgMD47CisJCX07CisKKwkJdGltZXJANjYwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjYwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDE1IDA+OworCQl9OworCisJCXRpbWVyQDY3MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY3MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNiAwPjsKKwkJfTsKKworCQlydGNAODAwIHsJLy8gUmVhbCB0aW1lIGNsb2NrCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ydGMiLCJmc2wsbXBjNTIwMC1ydGMiOworCQkJcmVnID0gPDB4ODAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MSA1IDAgMSA2IDA+OworCQl9OworCisJCWNhbkA5MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbXNjYW4iLCJmc2wsbXBjNTIwMC1tc2NhbiI7CisJCQlpbnRlcnJ1cHRzID0gPDIgMTcgMD47CisJCQlyZWcgPSA8MHg5MDAgMHg4MD47CisJCX07CisKKwkJY2FuQDk4MCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tc2NhbiIsImZzbCxtcGM1MjAwLW1zY2FuIjsKKwkJCWludGVycnVwdHMgPSA8MiAxOCAwPjsKKwkJCXJlZyA9IDwweDk4MCAweDgwPjsKKwkJfTsKKworCQlncGlvX3NpbXBsZTogZ3Bpb0BiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3BpbyIsImZzbCxtcGM1MjAwLWdwaW8iOworCQkJcmVnID0gPDB4YjAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDcgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncGlvX3drdXA6IGdwaW9AYzAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8td2t1cCIsImZzbCxtcGM1MjAwLWdwaW8td2t1cCI7CisJCQlyZWcgPSA8MHhjMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDEgOCAwIDAgMyAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCXNwaUBmMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItc3BpIiwiZnNsLG1wYzUyMDAtc3BpIjsKKwkJCXJlZyA9IDwweGYwMCAweDIwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxMyAwIDIgMTQgMD47CisJCX07CisKKwkJdXNiQDEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItb2hjaSIsImZzbCxtcGM1MjAwLW9oY2kiLCJvaGNpLWJlIjsKKwkJCXJlZyA9IDwweDEwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDYgMD47CisJCX07CisKKwkJZG1hLWNvbnRyb2xsZXJAMTIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1iZXN0Y29tbSIsImZzbCxtcGM1MjAwLWJlc3Rjb21tIjsKKwkJCXJlZyA9IDwweDEyMDAgMHg4MD47CisJCQlpbnRlcnJ1cHRzID0gPDMgMCAwICAzIDEgMCAgMyAyIDAgIDMgMyAwCisJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCisJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyAxMCAwICAzIDExIDAKKwkJCSAgICAgICAgICAgICAgMyAxMiAwICAzIDEzIDAgIDMgMTQgMCAgMyAxNSAwPjsKKwkJfTsKKworCQl4bGJAMWYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi14bGIiLCJmc2wsbXBjNTIwMC14bGIiOworCQkJcmVnID0gPDB4MWYwMCAweDEwMD47CisJCX07CisKKwkJLy8gUFNDNiBpbiB1YXJ0IG1vZGUKKwkJY29uc29sZTogc2VyaWFsQDJjMDAgewkJLy8gUFNDNgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CisJCQljZWxsLWluZGV4ID0gPDU+OworCQkJcG9ydC1udW1iZXIgPSA8MD47ICAvLyBMb2dpY2FsIHBvcnQgYXNzaWdubWVudAorCQkJcmVnID0gPDB4MmMwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgNCAwPjsKKwkJfTsKKworCQlldGgwOiBldGhlcm5ldEAzMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWZlYyIsImZzbCxtcGM1MjAwLWZlYyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKwkJfTsKKworCQltZGlvQDMwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1kaW8iLCJmc2wsbXBjNTIwMC1tZGlvIjsKKwkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwkvLyBmZWMgcmFuZ2UsIHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgZmVjIGludGVycnVwdHMKKwkJCWludGVycnVwdHMgPSA8MiA1IDA+OwkvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KKworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCXJlZyA9IDwwPjsKKwkJCX07CisJCX07CisKKwkJYXRhQDNhMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYXRhIiwiZnNsLG1wYzUyMDAtYXRhIjsKKwkJCXJlZyA9IDwweDNhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDcgMD47CisJCX07CisKKwkJaTJjQDNkMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOworCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKKwkJCWZzbDUyMDAtY2xvY2tpbmc7CisJCX07CisKKwkJaTJjQDNkNDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOworCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKKwkJCWZzbDUyMDAtY2xvY2tpbmc7CisJCX07CisKKwkJc3JhbUA4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNyYW0iLCJmc2wsbXBjNTIwMC1zcmFtIjsKKwkJCXJlZyA9IDwweDgwMDAgMHg0MDAwPjsKKwkJfTsKKwl9OworCisJcGNpQGYwMDAwZDAwIHsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wY2kiLCJmc2wsbXBjNTIwMC1wY2kiOworCQlyZWcgPSA8MHhmMDAwMGQwMCAweDEwMD47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDB4YzAwMCAwIDAgMSAmbWVkaWE1MjAwX2ZwZ2EgMCAyIC8vIDFzdCBzbG90CisJCQkJIDB4YzAwMCAwIDAgMiAmbWVkaWE1MjAwX2ZwZ2EgMCAzCisJCQkJIDB4YzAwMCAwIDAgMyAmbWVkaWE1MjAwX2ZwZ2EgMCA0CisJCQkJIDB4YzAwMCAwIDAgNCAmbWVkaWE1MjAwX2ZwZ2EgMCA1CisKKwkJCQkgMHhjODAwIDAgMCAxICZtZWRpYTUyMDBfZnBnYSAwIDMgLy8gMm5kIHNsb3QKKwkJCQkgMHhjODAwIDAgMCAyICZtZWRpYTUyMDBfZnBnYSAwIDQKKwkJCQkgMHhjODAwIDAgMCAzICZtZWRpYTUyMDBfZnBnYSAwIDUKKwkJCQkgMHhjODAwIDAgMCA0ICZtZWRpYTUyMDBfZnBnYSAwIDIKKworCQkJCSAweGQwMDAgMCAwIDEgJm1lZGlhNTIwMF9mcGdhIDAgNCAvLyBtaW5pUENJCisJCQkJIDB4ZDAwMCAwIDAgMiAmbWVkaWE1MjAwX2ZwZ2EgMCA1CisKKwkJCQkgMHhlMDAwIDAgMCAxICZtZWRpYTUyMDBfZnBnYSAwIDUgLy8gQ29yYWxJUAorCQkJCT47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLy8gRnJvbSBib290IGxvYWRlcgorCQlpbnRlcnJ1cHRzID0gPDIgOCAwIDIgOSAwIDIgMTAgMD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJYnVzLXJhbmdlID0gPDAgMD47CisJCXJhbmdlcyA9IDwweDQyMDAwMDAwIDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDAgMHgyMDAwMDAwMAorCQkJICAweDAyMDAwMDAwIDAgMHhhMDAwMDAwMCAweGEwMDAwMDAwIDAgMHgxMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGIwMDAwMDAwIDAgMHgwMTAwMDAwMD47CisJfTsKKworCWxvY2FsYnVzIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbHBiIiwic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQlyYW5nZXMgPSA8IDAgMCAweGZjMDAwMDAwIDB4MDIwMDAwMDAKKwkJCSAgIDEgMCAweGZlMDAwMDAwIDB4MDIwMDAwMDAKKwkJCSAgIDIgMCAweGYwMDEwMDAwIDB4MDAwMTAwMDAKKwkJCSAgIDMgMCAweGYwMDIwMDAwIDB4MDAwMTAwMDAgPjsKKworCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJhbWQsYW0yOWx2MjhtbCIsICJjZmktZmxhc2giOworCQkJcmVnID0gPDAgMHgwIDB4MjAwMDAwMD47CQkvLyAzMiBNQgorCQkJYmFuay13aWR0aCA9IDw0PjsJCQkvLyBXaWR0aCBpbiBieXRlcyBvZiB0aGUgZmxhc2ggYmFuaworCQkJZGV2aWNlLXdpZHRoID0gPDI+OwkJCS8vIFR3byBkZXZpY2VzIG9uIGVhY2ggYmFuaworCQl9OworCisJCWZsYXNoQDEsMCB7CisJCQljb21wYXRpYmxlID0gImFtZCxhbTI5bHYyOG1sIiwgImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MSAwIDB4MjAwMDAwMD47CQkJLy8gMzIgTUIKKwkJCWJhbmstd2lkdGggPSA8ND47CQkJLy8gV2lkdGggaW4gYnl0ZXMgb2YgdGhlIGZsYXNoIGJhbmsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsJCQkvLyBUd28gZGV2aWNlcyBvbiBlYWNoIGJhbmsKKwkJfTsKKworCQltZWRpYTUyMDBfZnBnYTogZnBnYUAyLDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbWVkaWE1MjAwLWZwZ2EiOworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwkvLyAwOmJhbmsgMTppZDsgbm8gdHlwZSBmaWVsZAorCQkJcmVnID0gPDIgMCAweDEwMDAwPjsKKworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwwIDAgMwkvLyBJUlEgYmFuayAwCisJCQkgICAgICAgICAgICAgIDEgMSAzPjsJLy8gSVJRIGJhbmsgMQorCQl9OworCisJCXVhcnRAMywwIHsKKwkJCWNvbXBhdGlibGUgPSAidGksdGwxNmM3NTJicHQiOworCQkJcmVnID0gPDMgMCAweDEwMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1lZGlhNTIwMF9mcGdhPjsKKwkJCWludGVycnVwdHMgPSA8MCAwICAwIDE+OyAvLyAyIGlycXMKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tb3Rpb25wcm8uZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21vdGlvbnByby5kdHMKaW5kZXggNTJiYTZmOS4uN2JlOGNhMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21vdGlvbnByby5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21vdGlvbnByby5kdHMKQEAgLTE3LDYgKzE3LDcgQEAKIAljb21wYXRpYmxlID0gInByb21lc3MsbW90aW9ucHJvIjsKIAkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC02Niw3ICs2Nyw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjAwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDkgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlmc2wsaGFzLXdkdDsKIAkJfTsKIApAQCAtNzQsMzUgKzc0LDMwIEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjEwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDEwIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDYyMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDYyMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2MzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CiAJCQlyZWcgPSA8MHg2MzAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTIgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjQwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjQwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDEzIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY1MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDY1MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxNCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQltb3Rpb25wcm8tbGVkQDY2MCB7CS8vIE1vdGlvbi1QUk8gc3RhdHVzIExFRApAQCAtMTEwLDcgKzEwNSw2IEBACiAJCQlsYWJlbCA9ICJtb3Rpb25wcm8tc3RhdHVzbGVkIjsKIAkJCXJlZyA9IDwweDY2MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCWJsaW5rLWRlbGF5ID0gPDEwMD47IC8vIDEwMCBtc2VjCiAJCX07CiAKQEAgLTExOSw0OSArMTEzLDQ2IEBACiAJCQlsYWJlbCA9ICJtb3Rpb25wcm8tcmVhZHlsZWQiOwogCQkJcmVnID0gPDB4NjcwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDE2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXJ0Y0A4MDAgewkvLyBSZWFsIHRpbWUgY2xvY2sKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXJ0YyIsImZzbCxtcGM1MjAwLXJ0YyI7CiAJCQlyZWcgPSA8MHg4MDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDUgMCAxIDYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJY2FuQDk4MCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tc2NhbiIsImZzbCxtcGM1MjAwLW1zY2FuIjsKIAkJCWludGVycnVwdHMgPSA8MiAxOCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCXJlZyA9IDwweDk4MCAweDgwPjsKIAkJfTsKIAotCQlncGlvQGIwMCB7CisJCWdwaW9fc2ltcGxlOiBncGlvQGIwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvIiwiZnNsLG1wYzUyMDAtZ3BpbyI7CiAJCQlyZWcgPSA8MHhiMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwogCi0JCWdwaW9AYzAwIHsKKwkJZ3Bpb193a3VwOiBncGlvQGMwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvLXdrdXAiLCJmc2wsbXBjNTIwMC1ncGlvLXdrdXAiOwogCQkJcmVnID0gPDB4YzAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDggMCAwIDMgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJfTsKIAogCQlzcGlAZjAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNwaSIsImZzbCxtcGM1MjAwLXNwaSI7CiAJCQlyZWcgPSA8MHhmMDAgMHgyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTMgMCAyIDE0IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXVzYkAxMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW9oY2kiLCJmc2wsbXBjNTIwMC1vaGNpIiwib2hjaS1iZSI7CiAJCQlyZWcgPSA8MHgxMDAwIDB4ZmY+OwogCQkJaW50ZXJydXB0cyA9IDwyIDYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJZG1hLWNvbnRyb2xsZXJAMTIwMCB7CkBAIC0xNzEsNyArMTYyLDYgQEAKIAkJCSAgICAgICAgICAgICAgMyA0IDAgIDMgNSAwICAzIDYgMCAgMyA3IDAKIAkJCSAgICAgICAgICAgICAgMyA4IDAgIDMgOSAwICAzIDEwIDAgIDMgMTEgMAogCQkJICAgICAgICAgICAgICAzIDEyIDAgIDMgMTMgMCAgMyAxNCAwICAzIDE1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXhsYkAxZjAwIHsKQEAgLTE4MCwxMiArMTcwLDkgQEAKIAkJfTsKIAogCQlzZXJpYWxAMjAwMCB7CQkvLyBQU0MxCi0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7Ci0JCQlwb3J0LW51bWJlciA9IDwwPjsgIC8vIExvZ2ljYWwgcG9ydCBhc3NpZ25tZW50CiAJCQlyZWcgPSA8MHgyMDAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCS8vIFBTQzIgaW4gc3BpIG1hc3RlciBtb2RlIApAQCAtMTk0LDI2ICsxODEsMjAgQEAKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlyZWcgPSA8MHgyMjAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiAyIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCS8vIFBTQzUgaW4gdWFydCBtb2RlCiAJCXNlcmlhbEAyODAwIHsJCS8vIFBTQzUKLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKLQkJCXBvcnQtbnVtYmVyID0gPDQ+OyAgLy8gTG9naWNhbCBwb3J0IGFzc2lnbm1lbnQKIAkJCXJlZyA9IDwweDI4MDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEyIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWV0aGVybmV0QDMwMDAgewotCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCJmc2wsbXBjNTIwMC1mZWMiOwogCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MiA1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCX07CiAKQEAgLTIyMywxMCArMjA0LDggQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1kaW8iLCJmc2wsbXBjNTIwMC1tZGlvIjsKIAkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OyAgICAgICAvLyBmZWMgcmFuZ2UsIHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgZmVjIGludGVycnVwdHMKIAkJCWludGVycnVwdHMgPSA8MiA1IDA+OyAgIC8vIHRoZXNlIGFyZSBmb3IgIm1paSBjb21tYW5kIGZpbmlzaGVkIiwgbm90IGxpbmsgY2hhbmdlcyAmIGNvLgotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCiAJCQlwaHkwOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCQlyZWcgPSA8Mj47CiAJCQl9OwogCQl9OwpAQCAtMjM1LDcgKzIxNCw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1hdGEiLCJmc2wsbXBjNTIwMC1hdGEiOwogCQkJcmVnID0gPDB4M2EwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlpMmNAM2Q0MCB7CkBAIC0yNDQsNyArMjIyLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCWZzbDUyMDAtY2xvY2tpbmc7CiAKIAkJCXJ0Y0A2OCB7CkBAIC0yNTksOCArMjM2LDggQEAKIAkJfTsKIAl9OwogCi0JbHBiIHsKLQkJY29tcGF0aWJsZSA9ICJmc2wsbHBiIjsKKwlsb2NhbGJ1cyB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWxwYiIsInNpbXBsZS1idXMiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCXJhbmdlcyA9IDwwIDAgMHhmZjAwMDAwMCAweDAxMDAwMDAwCkBAIC0yNzMsNyArMjUwLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAicHJvbWVzcyxtb3Rpb25wcm8ta29sbG1vcmdlbiI7CiAJCQlyZWcgPSA8MSAwIDB4MTAwMDA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDEgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJLy8gOC1iaXQgYm9hcmQgQ1BMRCBvbiBMb2NhbFBsdXMgQnVzIENTMgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTNlcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzEzZXJkYi5kdHMKaW5kZXggM2ViZjdlYy4uNzYxZmFhNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTNlcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxM2VyZGIuZHRzCkBAIC0xODAsNyArMTgwLDcgQEAKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQlzbGVlcCA9IDwmcG1jIDB4MjAwMDAwMDA+OwotCQkJcmFuZ2VzOworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKQEAgLTE5NSwxMSArMTk1LDExIEBACiAJCQlmaXhlZC1saW5rID0gPDEgMSAxMDAwIDAgMD47CiAJCQlmc2wsbWFnaWMtcGFja2V0OwogCi0JCQltZGlvQDI0NTIwIHsKKwkJCW1kaW9ANTIwIHsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKIAkJCQlwaHk0OiBldGhlcm5ldC1waHlANCB7CiAJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJCQlpbnRlcnJ1cHRzID0gPDIwIDB4OD47CkBAIC0yMjEsNiArMjIxLDcgQEAKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzQgMHg4IDMzIDB4OCAzMiAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CkBAIC0yMjksMTEgKzIzMCwxMSBAQAogCQkJc2xlZXAgPSA8JnBtYyAweDEwMDAwMDAwPjsKIAkJCWZzbCxtYWdpYy1wYWNrZXQ7CiAKLQkJCW1kaW9AMjU1MjAgeworCQkJbWRpb0A1MjAgewogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CiAKIAkJCQl0YmkxOiB0YmktcGh5QDExIHsKIAkJCQkJcmVnID0gPDB4MTE+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTVlcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMKaW5kZXggNzE3ODQxNi4uM2Y0YzVmYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTVlcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxNWVyZGIuZHRzCkBAIC0yMiw2ICsyMiw4IEBACiAJCXNlcmlhbDAgPSAmc2VyaWFsMDsKIAkJc2VyaWFsMSA9ICZzZXJpYWwxOwogCQlwY2kwID0gJnBjaTA7CisJCXBjaTEgPSAmcGNpMTsKKwkJcGNpMiA9ICZwY2kyOwogCX07CiAKIAljcHVzIHsKQEAgLTE4OCw2NiArMTkwLDc0IEBACiAJCQlwaHlfdHlwZSA9ICJ1dG1pIjsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0JCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwyMCAweDg+OwotCQkJCXJlZyA9IDwweDA+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTkgMHg4PjsKLQkJCQlyZWcgPSA8MHgxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzIgMHg4IDMzIDB4OCAzNCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8ICZwaHkwID47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MjAgMHg4PjsKKwkJCQkJcmVnID0gPDB4MD47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTkgMHg4PjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAweDggMzYgMHg4IDM3IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwgJnBoeTEgPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CkBAIC0zNDksNCArMzU5LDY2IEBACiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OworCisJcGNpMTogcGNpZUBlMDAwOTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxNS1wY2llIiwgImZzbCxtcGM4MzE0LXBjaWUiOworCQlyZWcgPSA8MHhlMDAwOTAwMCAweDAwMDAxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGEwMDAwMDAwIDB4YTAwMDAwMDAgMCAweDEwMDAwMDAwCisJCSAgICAgICAgICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGIxMDAwMDAwIDAgMHgwMDgwMDAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDIgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDMgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDQgJmlwaWMgMSA4PjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCisJCXBjaWVAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGEwMDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDAgMHhhMDAwMDAwMAorCQkJCSAgMCAweDEwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDAgMHgwMDgwMDAwMD47CisJCX07CisJfTsKKworCXBjaTI6IHBjaWVAZTAwMGEwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTUtcGNpZSIsICJmc2wsbXBjODMxNC1wY2llIjsKKwkJcmVnID0gPDB4ZTAwMGEwMDAgMHgwMDAwMTAwMD47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhjMDAwMDAwMCAweGMwMDAwMDAwIDAgMHgxMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGQxMDAwMDAwIDAgMHgwMDgwMDAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDIgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDMgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDQgJmlwaWMgMiA4PjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCisJCXBjaWVAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGMwMDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDAgMHhjMDAwMDAwMAorCQkJCSAgMCAweDEwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDAgMHgwMDgwMDAwMD47CisJCX07CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzCmluZGV4IGI1ZWRhOTQuLjFhZTM4ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzCkBAIC0xNzAsNTcgKzE3MCw1MiBAQAogCQkJcGh5X3R5cGUgPSAidWxwaSI7CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQkvKiBWaXRlc3NlIDgyMDEgKi8KLQkJCXBoeTFjOiBldGhlcm5ldC1waHlAMWMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTggMHg4PjsKLQkJCQlyZWcgPSA8MHgxYz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMyIDB4OCAzMyAweDggMzQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxYz47CiAJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQkvKiBWaXRlc3NlIDgyMDEgKi8KKwkJCQlwaHkxYzogZXRoZXJuZXQtcGh5QDFjIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTggMHg4PjsKKwkJCQkJcmVnID0gPDB4MWM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAweDggMzYgMHg4IDM3IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKQEAgLTIyOCw2ICsyMjMsMTggQEAKIAkJCWZpeGVkLWxpbmsgPSA8MSAxIDEwMDAgMCAwPjsKIAkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MT47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4Z3AuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eGdwLmR0cwppbmRleCBjODdhNjAxLi42NjJhYmUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4Z3AuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHhncC5kdHMKQEAgLTE0OSwzNyArMTQ5LDQxIEBACiAJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCS8qIFZpdGVzc2UgODIwMSAqLwotCQkJcGh5MWM6IGV0aGVybmV0LXBoeUAxYyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OwotCQkJCXJlZyA9IDwweDFjPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzIgMHg4IDMzIDB4OCAzNCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTFjPjsKIAkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MD47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCS8qIFZpdGVzc2UgODIwMSAqLworCQkJCXBoeTFjOiBldGhlcm5ldC1waHlAMWMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OworCQkJCQlyZWcgPSA8MHgxYz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzR4X21kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0eF9tZHMuZHRzCmluZGV4IGQ5YWRiYTAuLmQ5ZjBhMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzR4X21kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNHhfbWRzLmR0cwpAQCAtMTY3LDY5ICsxNjcsNzYgQEAKIAkJCXBoeV90eXBlID0gInVscGkiOwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKLQkJCQlyZWcgPSA8MHgwPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzIgMHg4IDMzIDB4OCAzNCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQkJbGludXgsbmV0d29yay1pbmRleCA9IDwwPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OworCQkJCQlyZWcgPSA8MHgwPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OworCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMHg4IDM2IDB4OCAzNyAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OwogCQkJbGludXgsbmV0d29yay1pbmRleCA9IDwxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfbWRzLmR0cwppbmRleCAxZDE0ZDcwLi45NjM3MDgwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X21kcy5kdHMKQEAgLTIzLDYgKzIzLDggQEAKIAkJc2VyaWFsMCA9ICZzZXJpYWwwOwogCQlzZXJpYWwxID0gJnNlcmlhbDE7CiAJCXBjaTAgPSAmcGNpMDsKKwkJcGNpMSA9ICZwY2kxOworCQlwY2kyID0gJnBjaTI7CiAJfTsKIAogCWNwdXMgewpAQCAtMTI3LDIxICsxMjksMzggQEAKIAkJCXJlZyA9IDwweDIwMCAweDEwMD47CiAJCX07CiAKLQkJaTJjQDMwMDAgeworCQlzbGVlcC1uZXh1cyB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJZGZzcnI7CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCQlzbGVlcCA9IDwmcG1jIDB4MGMwMDAwMDA+OworCQkJcmFuZ2VzOwogCi0JCQlydGNANjggewotCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTM3NCI7Ci0JCQkJcmVnID0gPDB4Njg+OwotCQkJCWludGVycnVwdHMgPSA8MTkgMHg4PjsKKwkJCWkyY0AzMDAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCWRmc3JyOworCisJCQkJcnRjQDY4IHsKKwkJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzc0IjsKKwkJCQkJcmVnID0gPDB4Njg+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE5IDB4OD47CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCX07CisJCQl9OworCisJCQlzZGhjaUAyZTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1lc2RoYyIsICJmc2wsbXBjODM3OS1lc2RoYyI7CisJCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQyIDB4OD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCX07CiAJCX07CiAKQEAgLTE3NCw3MCArMTkzLDgzIEBACiAJCQlpbnRlcnJ1cHRzID0gPDM4IDB4OD47CiAJCQlkcl9tb2RlID0gImhvc3QiOwogCQkJcGh5X3R5cGUgPSAidWxwaSI7CisJCQlzbGVlcCA9IDwmcG1jIDB4MDBjMDAwMDA+OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47Ci0JCQkJcmVnID0gPDB4Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OwotCQkJCXJlZyA9IDwweDM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMiAweDggMzMgMHg4IDM0IDB4OD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gIm1paSI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisJCQlzbGVlcCA9IDwmcG1jIDB4YzAwMDAwMDA+OworCQkJZnNsLG1hZ2ljLXBhY2tldDsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OworCQkJCQlyZWcgPSA8MHgyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OworCQkJCQlyZWcgPSA8MHgzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDB4OCAzNiAweDggMzcgMHg4PjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgzMDAwMDAwMD47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKQEAgLTMwOSwxNCArMzQxLDcgQEAKIAkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKIAkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHg5ZmU+OwogCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+OwotCQl9OwotCi0JCXNkaGNAMmUwMDAgewotCQkJbW9kZWwgPSAiZVNESEMiOwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZXNkaGMiOwotCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdHMgPSA8NDIgMHg4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAzMDAwMDAwPjsKIAkJfTsKIAogCQlzYXRhQDE4MDAwIHsKQEAgLTMyNCw2ICszNDksNyBAQAogCQkJcmVnID0gPDB4MTgwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMGMwPjsKIAkJfTsKIAogCQlzYXRhQDE5MDAwIHsKQEAgLTMzMSw2ICszNTcsNyBAQAogCQkJcmVnID0gPDB4MTkwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDUgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMDMwPjsKIAkJfTsKIAogCQkvKiBJUElDCkBAIC0zNDYsNiArMzczLDEzIEBACiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQkJcmVnID0gPDB4NzAwIDB4MTAwPjsKIAkJfTsKKworCQlwbWM6IHBvd2VyQGIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LXBtYyIsICJmc2wsbXBjODM0OS1wbWMiOworCQkJcmVnID0gPDB4YjAwIDB4MTAwIDB4YTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8ODAgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQl9OwogCX07CiAKIAlwY2kwOiBwY2lAZTAwMDg1MDAgewpAQCAtNDAwLDYgKzQzNCw3IEBACiAJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDkwMDAwMDAwIDB4OTAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKIAkJICAgICAgICAgIDB4NDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkgICAgICAgICAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGUwMzAwMDAwIDB4MCAweDAwMTAwMDAwPjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMDEwMDAwPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKQEAgLTQwOSw0ICs0NDQsNjggQEAKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CisKKwlwY2kxOiBwY2llQGUwMDA5MDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LXBjaWUiLCAiZnNsLG1wYzgzMTQtcGNpZSI7CisJCXJlZyA9IDwweGUwMDA5MDAwIDB4MDAwMDEwMDA+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YTgwMDAwMDAgMHhhODAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJICAgICAgICAgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4YjgwMDAwMDAgMCAweDAwODAwMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgMiAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgMyAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgNCAmaXBpYyAxIDg+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAzMDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisKKwkJcGNpZUAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YTgwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwCisJCQkJICAwIDB4MTAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMCAweDAwODAwMDAwPjsKKwkJfTsKKwl9OworCisJcGNpMjogcGNpZUBlMDAwYTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1wY2llIiwgImZzbCxtcGM4MzE0LXBjaWUiOworCQlyZWcgPSA8MHhlMDAwYTAwMCAweDAwMDAxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGM4MDAwMDAwIDB4YzgwMDAwMDAgMCAweDEwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4ZDgwMDAwMDAgMCAweDAwODAwMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgMiAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgMyAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgNCAmaXBpYyAyIDg+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAwYzAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisKKwkJcGNpZUAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YzgwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMCAweGM4MDAwMDAwCisJCQkJICAwIDB4MTAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMCAweDAwODAwMDAwPjsKKwkJfTsKKwl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3JkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19yZGIuZHRzCmluZGV4IDk0MTNhZjMuLjA1MzMzOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3JkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfcmRiLmR0cwpAQCAtMjIsNiArMjIsOCBAQAogCQlzZXJpYWwwID0gJnNlcmlhbDA7CiAJCXNlcmlhbDEgPSAmc2VyaWFsMTsKIAkJcGNpMCA9ICZwY2kwOworCQlwY2kxID0gJnBjaTE7CisJCXBjaTIgPSAmcGNpMjsKIAl9OwogCiAJY3B1cyB7CkBAIC0xMDcsMjYgKzEwOSw3MiBAQAogCQkJcmVnID0gPDB4MjAwIDB4MTAwPjsKIAkJfTsKIAotCQlpMmNAMzAwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKKwkJZ3BpbzE6IGdwaW8tY29udHJvbGxlckBjMDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWdwaW8iLCAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCQlyZWcgPSA8MHhjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw3NCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQlkZnNycjsKLQkJCXJ0Y0A2OCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM5IjsKLQkJCQlyZWcgPSA8MHg2OD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKKwkJZ3BpbzI6IGdwaW8tY29udHJvbGxlckBkMDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWdwaW8iLCAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCQlyZWcgPSA8MHhkMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw3NSAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKKwkJc2xlZXAtbmV4dXMgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCQlzbGVlcCA9IDwmcG1jIDB4MGMwMDAwMDA+OworCQkJcmFuZ2VzOworCisJCQlpMmNAMzAwMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQlkZnNycjsKKworCQkJCWR0dEA0OCB7CisJCQkJCWNvbXBhdGlibGUgPSAibmF0aW9uYWwsbG03NSI7CisJCQkJCXJlZyA9IDwweDQ4PjsKKwkJCQl9OworCisJCQkJYXQyNEA1MCB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXQyNCwyNGMyNTYiOworCQkJCQlyZWcgPSA8MHg1MD47CisJCQkJfTsKKworCQkJCXJ0Y0A2OCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzOSI7CisJCQkJCXJlZyA9IDwweDY4PjsKKwkJCQl9OworCisJCQkJbWN1X3BpbzogbWN1QGEgeworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQkJY29tcGF0aWJsZSA9ICJmc2wsbWM5czA4cWc4LW1wYzgzNzdlcmRiIiwKKwkJCQkJCSAgICAgImZzbCxtY3UtbXBjODM0OWVtaXR4IjsKKwkJCQkJcmVnID0gPDB4MGE+OworCQkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJfTsKIAkJCX07CiAKLQkJCW1jdV9waW86IG1jdUBhIHsKLQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQkJCQljb21wYXRpYmxlID0gImZzbCxtYzlzMDhxZzgtbXBjODM3N2VyZGIiLAotCQkJCQkgICAgICJmc2wsbWN1LW1wYzgzNDllbWl0eCI7Ci0JCQkJcmVnID0gPDB4MGE+OwotCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCXNkaGNpQDJlMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWVzZGhjIiwgImZzbCxtcGM4Mzc5LWVzZGhjIjsKKwkJCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8NDIgMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkJfTsKIAkJfTsKIApAQCAtMTk3LDY0ICsyNDUsNzYgQEAKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJaW50ZXJydXB0cyA9IDwzOCAweDg+OwogCQkJcGh5X3R5cGUgPSAidWxwaSI7CisJCQlzbGVlcCA9IDwmcG1jIDB4MDBjMDAwMDA+OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47Ci0JCQkJcmVnID0gPDB4Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMyIDB4OCAzMyAweDggMzQgMHg4PjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKwkJCXNsZWVwID0gPCZwbWMgMHhjMDAwMDAwMD47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMHg4IDM2IDB4OCAzNyAweDg+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQlmaXhlZC1saW5rID0gPDEgMSAxMDAwIDAgMD47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgzMDAwMDAwMD47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKQEAgLTI4Nyw2ICszNDcsNyBAQAogCQkJZnNsLGNoYW5uZWwtZmlmby1sZW4gPSA8MjQ+OwogCQkJZnNsLGV4ZWMtdW5pdHMtbWFzayA9IDwweDlmZT47CiAJCQlmc2wsZGVzY3JpcHRvci10eXBlcy1tYXNrID0gPDB4M2FiMGViZj47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDMwMDAwMDA+OwogCQl9OwogCiAJCXNhdGFAMTgwMDAgewpAQCAtMjk0LDYgKzM1NSw3IEBACiAJCQlyZWcgPSA8MHgxODAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw0NCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwYzA+OwogCQl9OwogCiAJCXNhdGFAMTkwMDAgewpAQCAtMzAxLDYgKzM2Myw3IEBACiAJCQlyZWcgPSA8MHgxOTAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw0NSAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwMzA+OwogCQl9OwogCiAJCS8qIElQSUMKQEAgLTMxNiw2ICszNzksMTMgQEAKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCQlyZWcgPSA8MHg3MDAgMHgxMDA+OwogCQl9OworCisJCXBtYzogcG93ZXJAYjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctcG1jIiwgImZzbCxtcGM4MzQ5LXBtYyI7CisJCQlyZWcgPSA8MHhiMDAgMHgxMDAgMHhhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw4MCAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCX07CiAJfTsKIAogCXBjaTA6IHBjaUBlMDAwODUwMCB7CkBAIC0zNDEsNiArNDExLDcgQEAKIAkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4OTAwMDAwMDAgMHg5MDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkgICAgICAgICAgMHg0MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDEwMDAwMDAwCiAJCSAgICAgICAgICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZTIwMDAwMDAgMHgwIDB4MDAxMDAwMDA+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAwMTAwMDA+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8NjY2NjY2NjY+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKQEAgLTM1MCw0ICs0MjEsNjggQEAKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CisKKwlwY2kxOiBwY2llQGUwMDA5MDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LXBjaWUiLCAiZnNsLG1wYzgzMTQtcGNpZSI7CisJCXJlZyA9IDwweGUwMDA5MDAwIDB4MDAwMDEwMDA+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YTgwMDAwMDAgMHhhODAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJICAgICAgICAgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4YjgwMDAwMDAgMCAweDAwODAwMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgMiAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgMyAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgNCAmaXBpYyAxIDg+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAzMDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisKKwkJcGNpZUAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YTgwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwCisJCQkJICAwIDB4MTAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMCAweDAwODAwMDAwPjsKKwkJfTsKKwl9OworCisJcGNpMjogcGNpZUBlMDAwYTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1wY2llIiwgImZzbCxtcGM4MzE0LXBjaWUiOworCQlyZWcgPSA8MHhlMDAwYTAwMCAweDAwMDAxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGM4MDAwMDAwIDB4YzgwMDAwMDAgMCAweDEwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4ZDgwMDAwMDAgMCAweDAwODAwMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgMiAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgMyAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgNCAmaXBpYyAyIDg+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAwYzAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisKKwkJcGNpZUAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YzgwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMCAweGM4MDAwMDAwCisJCQkJICAwIDB4MTAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMCAweDAwODAwMDAwPjsKKwkJfTsKKwl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X21kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9tZHMuZHRzCmluZGV4IGI4NWZjMDIuLjY1MWZmMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X21kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfbWRzLmR0cwpAQCAtMjMsNiArMjMsOCBAQAogCQlzZXJpYWwwID0gJnNlcmlhbDA7CiAJCXNlcmlhbDEgPSAmc2VyaWFsMTsKIAkJcGNpMCA9ICZwY2kwOworCQlwY2kxID0gJnBjaTE7CisJCXBjaTIgPSAmcGNpMjsKIAl9OwogCiAJY3B1cyB7CkBAIC0xMjcsMjEgKzEyOSwzOCBAQAogCQkJcmVnID0gPDB4MjAwIDB4MTAwPjsKIAkJfTsKIAotCQlpMmNAMzAwMCB7CisJCXNsZWVwLW5leHVzIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKLQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQlkZnNycjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwYzAwMDAwMD47CisJCQlyYW5nZXM7CiAKLQkJCXJ0Y0A2OCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzc0IjsKLQkJCQlyZWcgPSA8MHg2OD47Ci0JCQkJaW50ZXJydXB0cyA9IDwxOSAweDg+OworCQkJaTJjQDMwMDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJZGZzcnI7CisKKwkJCQlydGNANjggeworCQkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzNzQiOworCQkJCQlyZWcgPSA8MHg2OD47CisJCQkJCWludGVycnVwdHMgPSA8MTkgMHg4PjsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJfTsKKwkJCX07CisKKwkJCXNkaGNpQDJlMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc4LWVzZGhjIiwgImZzbCxtcGM4Mzc5LWVzZGhjIjsKKwkJCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8NDIgMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkJfTsKIAkJfTsKIApAQCAtMjEzLDcwICsyMzIsODMgQEAKIAkJCWludGVycnVwdHMgPSA8MzggMHg4PjsKIAkJCWRyX21vZGUgPSAiaG9zdCI7CiAJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMGMwMDAwMD47CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKLQkJCQlyZWcgPSA8MHgyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47Ci0JCQkJcmVnID0gPDB4Mz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMyIDB4OCAzMyAweDggMzQgMHg4PjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKwkJCXNsZWVwID0gPCZwbWMgMHhjMDAwMDAwMD47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47CisJCQkJCXJlZyA9IDwweDM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMHg4IDM2IDB4OCAzNyAweDg+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OworCQkJc2xlZXAgPSA8JnBtYyAweDMwMDAwMDAwPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpAQCAtMzA5LDE0ICszNDEsNyBAQAogCQkJZnNsLGNoYW5uZWwtZmlmby1sZW4gPSA8MjQ+OwogCQkJZnNsLGV4ZWMtdW5pdHMtbWFzayA9IDwweDlmZT47CiAJCQlmc2wsZGVzY3JpcHRvci10eXBlcy1tYXNrID0gPDB4M2FiMGViZj47Ci0JCX07Ci0KLQkJc2RoY0AyZTAwMCB7Ci0JCQltb2RlbCA9ICJlU0RIQyI7Ci0JCQljb21wYXRpYmxlID0gImZzbCxlc2RoYyI7Ci0JCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0MiAweDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDMwMDAwMDA+OwogCQl9OwogCiAJCS8qIElQSUMKQEAgLTMzMiw2ICszNTcsMTMgQEAKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCQlyZWcgPSA8MHg3MDAgMHgxMDA+OwogCQl9OworCisJCXBtYzogcG93ZXJAYjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtcG1jIiwgImZzbCxtcGM4MzQ5LXBtYyI7CisJCQlyZWcgPSA8MHhiMDAgMHgxMDAgMHhhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw4MCAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCX07CiAJfTsKIAogCXBjaTA6IHBjaUBlMDAwODUwMCB7CkBAIC0zODcsNiArNDE5LDcgQEAKIAkJICAgICAgICAgIDB4NDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkgICAgICAgICAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGUwMzAwMDAwIDB4MCAweDAwMTAwMDAwPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAwMTAwMDA+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CkBAIC0zOTUsNCArNDI4LDY4IEBACiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OworCisJcGNpMTogcGNpZUBlMDAwOTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1wY2llIiwgImZzbCxtcGM4MzE0LXBjaWUiOworCQlyZWcgPSA8MHhlMDAwOTAwMCAweDAwMDAxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwIDB4YTgwMDAwMDAgMCAweDEwMDAwMDAwCisJCSAgICAgICAgICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGI4MDAwMDAwIDAgMHgwMDgwMDAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDIgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDMgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDQgJmlwaWMgMSA4PjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMzAwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCisJCXBjaWVAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDAgMHhhODAwMDAwMAorCQkJCSAgMCAweDEwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDAgMHgwMDgwMDAwMD47CisJCX07CisJfTsKKworCXBjaTI6IHBjaWVAZTAwMGEwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtcGNpZSIsICJmc2wsbXBjODMxNC1wY2llIjsKKwkJcmVnID0gPDB4ZTAwMGEwMDAgMHgwMDAwMTAwMD47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhjODAwMDAwMCAweGM4MDAwMDAwIDAgMHgxMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGQ4MDAwMDAwIDAgMHgwMDgwMDAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDIgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDMgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDQgJmlwaWMgMiA4PjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMGMwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCisJCXBjaWVAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGM4MDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDAgMHhjODAwMDAwMAorCQkJCSAgMCAweDEwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDAgMHgwMDgwMDAwMD47CisJCX07CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9yZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfcmRiLmR0cwppbmRleCAyM2MxMGNlLi41ZDkwZTg1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9yZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X3JkYi5kdHMKQEAgLTIyLDYgKzIyLDggQEAKIAkJc2VyaWFsMCA9ICZzZXJpYWwwOwogCQlzZXJpYWwxID0gJnNlcmlhbDE7CiAJCXBjaTAgPSAmcGNpMDsKKwkJcGNpMSA9ICZwY2kxOworCQlwY2kyID0gJnBjaTI7CiAJfTsKIAogCWNwdXMgewpAQCAtMTA3LDI2ICsxMDksNzIgQEAKIAkJCXJlZyA9IDwweDIwMCAweDEwMD47CiAJCX07CiAKLQkJaTJjQDMwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDB4MzAwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47CisJCWdwaW8xOiBncGlvLWNvbnRyb2xsZXJAYzAwIHsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1ncGlvIiwgImZzbCxtcGM4MzQ5LWdwaW8iOworCQkJcmVnID0gPDB4YzAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NzQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJZGZzcnI7Ci0JCQlydGNANjggewotCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzOSI7Ci0JCQkJcmVnID0gPDB4Njg+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQl9OworCisJCWdwaW8yOiBncGlvLWNvbnRyb2xsZXJAZDAwIHsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1ncGlvIiwgImZzbCxtcGM4MzQ5LWdwaW8iOworCQkJcmVnID0gPDB4ZDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NzUgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQl9OworCisJCXNsZWVwLW5leHVzIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkJc2xlZXAgPSA8JnBtYyAweDBjMDAwMDAwPjsKKwkJCXJhbmdlczsKKworCQkJaTJjQDMwMDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJZGZzcnI7CisKKwkJCQlkdHRANDggeworCQkJCQljb21wYXRpYmxlID0gIm5hdGlvbmFsLGxtNzUiOworCQkJCQlyZWcgPSA8MHg0OD47CisJCQkJfTsKKworCQkJCWF0MjRANTAgeworCQkJCQljb21wYXRpYmxlID0gImF0MjQsMjRjMjU2IjsKKwkJCQkJcmVnID0gPDB4NTA+OworCQkJCX07CisKKwkJCQlydGNANjggeworCQkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOworCQkJCQlyZWcgPSA8MHg2OD47CisJCQkJfTsKKworCQkJCW1jdV9waW86IG1jdUBhIHsKKwkJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1jOXMwOHFnOC1tcGM4Mzc4ZXJkYiIsCisJCQkJCQkgICAgICJmc2wsbWN1LW1wYzgzNDllbWl0eCI7CisJCQkJCXJlZyA9IDwweDBhPjsKKwkJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCX07CiAJCQl9OwogCi0JCQltY3VfcGlvOiBtY3VAYSB7Ci0JCQkJI2dwaW8tY2VsbHMgPSA8Mj47Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsbWM5czA4cWc4LW1wYzgzNzhlcmRiIiwKLQkJCQkJICAgICAiZnNsLG1jdS1tcGM4MzQ5ZW1pdHgiOwotCQkJCXJlZyA9IDwweDBhPjsKLQkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQlzZGhjaUAyZTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1lc2RoYyIsICJmc2wsbXBjODM3OS1lc2RoYyI7CisJCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQyIDB4OD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCX07CiAJCX07CiAKQEAgLTE5Nyw2MiArMjQ1LDc2IEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCWludGVycnVwdHMgPSA8MzggMHg4PjsKIAkJCXBoeV90eXBlID0gInVscGkiOworCQkJc2xlZXAgPSA8JnBtYyAweDAwYzAwMDAwPjsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OwotCQkJCXJlZyA9IDwweDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMiAweDggMzMgMHg4IDM0IDB4OD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gIm1paSI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisJCQlzbGVlcCA9IDwmcG1jIDB4YzAwMDAwMDA+OworCQkJZnNsLG1hZ2ljLXBhY2tldDsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OworCQkJCQlyZWcgPSA8MHgyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDB4OCAzNiAweDggMzcgMHg4PjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJZml4ZWQtbGluayA9IDwxIDEgMTAwMCAwIDA+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CisJCQlzbGVlcCA9IDwmcG1jIDB4MzAwMDAwMDA+OworCQkJZnNsLG1hZ2ljLXBhY2tldDsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CkBAIC0yODUsNiArMzQ3LDcgQEAKIAkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKIAkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHg5ZmU+OwogCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+OworCQkJc2xlZXAgPSA8JnBtYyAweDAzMDAwMDAwPjsKIAkJfTsKIAogCQkvKiBJUElDCkBAIC0zMDAsNiArMzYzLDEzIEBACiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQkJcmVnID0gPDB4NzAwIDB4MTAwPjsKIAkJfTsKKworCQlwbWM6IHBvd2VyQGIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc4LXBtYyIsICJmc2wsbXBjODM0OS1wbWMiOworCQkJcmVnID0gPDB4YjAwIDB4MTAwIDB4YTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8ODAgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQl9OwogCX07CiAKIAlwY2kwOiBwY2lAZTAwMDg1MDAgewpAQCAtMzI1LDYgKzM5NSw3IEBACiAJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDkwMDAwMDAwIDB4OTAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKIAkJICAgICAgICAgIDB4NDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkgICAgICAgICAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGUyMDAwMDAwIDB4MCAweDAwMTAwMDAwPjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMDEwMDAwPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDY2NjY2NjY2PjsKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CkBAIC0zMzQsNCArNDA1LDY4IEBACiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OworCisJcGNpMTogcGNpZUBlMDAwOTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1wY2llIiwgImZzbCxtcGM4MzE0LXBjaWUiOworCQlyZWcgPSA8MHhlMDAwOTAwMCAweDAwMDAxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwIDB4YTgwMDAwMDAgMCAweDEwMDAwMDAwCisJCSAgICAgICAgICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGI4MDAwMDAwIDAgMHgwMDgwMDAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDIgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDMgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDQgJmlwaWMgMSA4PjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMzAwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCisJCXBjaWVAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDAgMHhhODAwMDAwMAorCQkJCSAgMCAweDEwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDAgMHgwMDgwMDAwMD47CisJCX07CisJfTsKKworCXBjaTI6IHBjaWVAZTAwMGEwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtcGNpZSIsICJmc2wsbXBjODMxNC1wY2llIjsKKwkJcmVnID0gPDB4ZTAwMGEwMDAgMHgwMDAwMTAwMD47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhjODAwMDAwMCAweGM4MDAwMDAwIDAgMHgxMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGQ4MDAwMDAwIDAgMHgwMDgwMDAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDIgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDMgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDQgJmlwaWMgMiA4PjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMGMwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCisJCXBjaWVAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGM4MDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDAgMHhjODAwMDAwMAorCQkJCSAgMCAweDEwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDAgMHgwMDgwMDAwMD47CisJCX07CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfbWRzLmR0cwppbmRleCBhY2YwNmM0Li5kNmYyMDhiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X21kcy5kdHMKQEAgLTEyNywyMSArMTI3LDM4IEBACiAJCQlyZWcgPSA8MHgyMDAgMHgxMDA+OwogCQl9OwogCi0JCWkyY0AzMDAwIHsKKwkJc2xlZXAtbmV4dXMgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDB4MzAwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCWRmc3JyOworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkJc2xlZXAgPSA8JnBtYyAweDBjMDAwMDAwPjsKKwkJCXJhbmdlczsKIAotCQkJcnRjQDY4IHsKLQkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzNzQiOwotCQkJCXJlZyA9IDwweDY4PjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE5IDB4OD47CisJCQlpMmNAMzAwMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQlkZnNycjsKKworCQkJCXJ0Y0A2OCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTM3NCI7CisJCQkJCXJlZyA9IDwweDY4PjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxOSAweDg+OworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQl9OworCQkJfTsKKworCQkJc2RoY2lAMmUwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktZXNkaGMiOworCQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDw0MiAweDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQl9OwogCQl9OwogCkBAIC0yMTMsNjkgKzIzMCw4MyBAQAogCQkJaW50ZXJydXB0cyA9IDwzOCAweDg+OwogCQkJZHJfbW9kZSA9ICJob3N0IjsKIAkJCXBoeV90eXBlID0gInVscGkiOwotCQl9OwotCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47Ci0JCQkJcmVnID0gPDB4Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OwotCQkJCXJlZyA9IDwweDM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMGMwMDAwMD47CiAJCX07CiAKIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMyIDB4OCAzMyAweDggMzQgMHg4PjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKwkJCXNsZWVwID0gPCZwbWMgMHhjMDAwMDAwMD47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47CisJCQkJCXJlZyA9IDwweDM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMHg4IDM2IDB4OCAzNyAweDg+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OworCQkJc2xlZXAgPSA8JnBtYyAweDMwMDAwMDAwPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpAQCAtMzA4LDE0ICszMzksNyBAQAogCQkJZnNsLGNoYW5uZWwtZmlmby1sZW4gPSA8MjQ+OwogCQkJZnNsLGV4ZWMtdW5pdHMtbWFzayA9IDwweDlmZT47CiAJCQlmc2wsZGVzY3JpcHRvci10eXBlcy1tYXNrID0gPDB4M2FiMGViZj47Ci0JCX07Ci0KLQkJc2RoY0AyZTAwMCB7Ci0JCQltb2RlbCA9ICJlU0RIQyI7Ci0JCQljb21wYXRpYmxlID0gImZzbCxlc2RoYyI7Ci0JCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0MiAweDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDMwMDAwMDA+OwogCQl9OwogCiAJCXNhdGFAMTgwMDAgewpAQCAtMzIzLDYgKzM0Nyw3IEBACiAJCQlyZWcgPSA8MHgxODAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw0NCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwYzA+OwogCQl9OwogCiAJCXNhdGFAMTkwMDAgewpAQCAtMzMwLDYgKzM1NSw3IEBACiAJCQlyZWcgPSA8MHgxOTAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw0NSAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwMzA+OwogCQl9OwogCiAJCXNhdGFAMWEwMDAgewpAQCAtMzM3LDYgKzM2Myw3IEBACiAJCQlyZWcgPSA8MHgxYTAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw0NiAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwMGM+OwogCQl9OwogCiAJCXNhdGFAMWIwMDAgewpAQCAtMzQ0LDYgKzM3MSw3IEBACiAJCQlyZWcgPSA8MHgxYjAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw0NyAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwMDM+OwogCQl9OwogCiAJCS8qIElQSUMKQEAgLTM1OSw2ICszODcsMTMgQEAKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCQlyZWcgPSA8MHg3MDAgMHgxMDA+OwogCQl9OworCisJCXBtYzogcG93ZXJAYjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktcG1jIiwgImZzbCxtcGM4MzQ5LXBtYyI7CisJCQlyZWcgPSA8MHhiMDAgMHgxMDAgMHhhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw4MCAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCX07CiAJfTsKIAogCXBjaTA6IHBjaUBlMDAwODUwMCB7CkBAIC00MTMsNiArNDQ4LDcgQEAKIAkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4OTAwMDAwMDAgMHg5MDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkgICAgICAgICAgMHg0MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDEwMDAwMDAwCiAJCSAgICAgICAgICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZTAzMDAwMDAgMHgwIDB4MDAxMDAwMDA+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAwMTAwMDA+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X3JkYi5kdHMKaW5kZXggNzJjZGMzYy4uOThhZTk1YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9yZGIuZHRzCkBAIC0xMDcsMjYgKzEwNyw3MiBAQAogCQkJcmVnID0gPDB4MjAwIDB4MTAwPjsKIAkJfTsKIAotCQlpMmNAMzAwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKKwkJZ3BpbzE6IGdwaW8tY29udHJvbGxlckBjMDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LWdwaW8iLCAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCQlyZWcgPSA8MHhjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw3NCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQlkZnNycjsKLQkJCXJ0Y0A2OCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM5IjsKLQkJCQlyZWcgPSA8MHg2OD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKKwkJZ3BpbzI6IGdwaW8tY29udHJvbGxlckBkMDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LWdwaW8iLCAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCQlyZWcgPSA8MHhkMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw3NSAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKKwkJc2xlZXAtbmV4dXMgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCQlzbGVlcCA9IDwmcG1jIDB4MGMwMDAwMDA+OworCQkJcmFuZ2VzOworCisJCQlpMmNAMzAwMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQlkZnNycjsKKworCQkJCWR0dEA0OCB7CisJCQkJCWNvbXBhdGlibGUgPSAibmF0aW9uYWwsbG03NSI7CisJCQkJCXJlZyA9IDwweDQ4PjsKKwkJCQl9OworCisJCQkJYXQyNEA1MCB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXQyNCwyNGMyNTYiOworCQkJCQlyZWcgPSA8MHg1MD47CisJCQkJfTsKKworCQkJCXJ0Y0A2OCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzOSI7CisJCQkJCXJlZyA9IDwweDY4PjsKKwkJCQl9OworCisJCQkJbWN1X3BpbzogbWN1QGEgeworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQkJY29tcGF0aWJsZSA9ICJmc2wsbWM5czA4cWc4LW1wYzgzNzllcmRiIiwKKwkJCQkJCSAgICAgImZzbCxtY3UtbXBjODM0OWVtaXR4IjsKKwkJCQkJcmVnID0gPDB4MGE+OworCQkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJfTsKIAkJCX07CiAKLQkJCW1jdV9waW86IG1jdUBhIHsKLQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQkJCQljb21wYXRpYmxlID0gImZzbCxtYzlzMDhxZzgtbXBjODM3OWVyZGIiLAotCQkJCQkgICAgICJmc2wsbWN1LW1wYzgzNDllbWl0eCI7Ci0JCQkJcmVnID0gPDB4MGE+OwotCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCXNkaGNpQDJlMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LWVzZGhjIjsKKwkJCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8NDIgMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkJfTsKIAkJfTsKIApAQCAtMTk3LDYzICsyNDMsNzYgQEAKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJaW50ZXJydXB0cyA9IDwzOCAweDg+OwogCQkJcGh5X3R5cGUgPSAidWxwaSI7Ci0JCX07Ci0KLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKLQkJCQlyZWcgPSA8MHgyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07CisJCQlzbGVlcCA9IDwmcG1jIDB4MDBjMDAwMDA+OwogCQl9OwogCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMiAweDggMzMgMHg4IDM0IDB4OD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gIm1paSI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisJCQlzbGVlcCA9IDwmcG1jIDB4YzAwMDAwMDA+OworCQkJZnNsLG1hZ2ljLXBhY2tldDsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OworCQkJCQlyZWcgPSA8MHgyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDB4OCAzNiAweDggMzcgMHg4PjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJZml4ZWQtbGluayA9IDwxIDEgMTAwMCAwIDA+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CisJCQlzbGVlcCA9IDwmcG1jIDB4MzAwMDAwMDA+OworCQkJZnNsLG1hZ2ljLXBhY2tldDsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CkBAIC0yODYsNiArMzQ1LDcgQEAKIAkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKIAkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHg5ZmU+OwogCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+OworCQkJc2xlZXAgPSA8JnBtYyAweDAzMDAwMDAwPjsKIAkJfTsKIAogCQlzYXRhQDE4MDAwIHsKQEAgLTI5Myw2ICszNTMsNyBAQAogCQkJcmVnID0gPDB4MTgwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMGMwPjsKIAkJfTsKIAogCQlzYXRhQDE5MDAwIHsKQEAgLTMwMCw2ICszNjEsNyBAQAogCQkJcmVnID0gPDB4MTkwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDUgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMDMwPjsKIAkJfTsKIAogCQlzYXRhQDFhMDAwIHsKQEAgLTMwNyw2ICszNjksNyBAQAogCQkJcmVnID0gPDB4MWEwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDYgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMDBjPjsKIAkJfTsKIAogCQlzYXRhQDFiMDAwIHsKQEAgLTMxNCw2ICszNzcsNyBAQAogCQkJcmVnID0gPDB4MWIwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDcgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMDAzPjsKIAkJfTsKIAogCQkvKiBJUElDCkBAIC0zMjksNiArMzkzLDEzIEBACiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQkJcmVnID0gPDB4NzAwIDB4MTAwPjsKIAkJfTsKKworCQlwbWM6IHBvd2VyQGIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LXBtYyIsICJmc2wsbXBjODM0OS1wbWMiOworCQkJcmVnID0gPDB4YjAwIDB4MTAwIDB4YTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8ODAgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQl9OwogCX07CiAKIAlwY2kwOiBwY2lAZTAwMDg1MDAgewpAQCAtMzU0LDYgKzQyNSw3IEBACiAJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDkwMDAwMDAwIDB4OTAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKIAkJICAgICAgICAgIDB4NDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkgICAgICAgICAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGUyMDAwMDAwIDB4MCAweDAwMTAwMDAwPjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMDEwMDAwPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDY2NjY2NjY2PjsKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODUzNmRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTM2ZHMuZHRzCmluZGV4IDNjOTA1ZGYuLmIzMWM1MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTM2ZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTM2ZHMuZHRzCkBAIC0xMzcsNDIgKzEzNyw2IEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMHgxPjsKLQkJCQlyZWcgPSA8MD47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAweDE+OwotCQkJCXJlZyA9IDwxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNjUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjY1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJdXNiQDIyMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1MzYtdXNiMi1tcGgiLCAiZnNsLXVzYjItbXBoIjsKIAkJCXJlZyA9IDwweDIyMDAwIDB4MTAwMD47CkBAIC0xOTQsMzEgKzE1OCw3MyBAQAogCQl9OwogCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAweDE+OworCQkJCQlyZWcgPSA8MD47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDB4MT47CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjYwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQl1c2JAMmIwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDBhZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDBhZHMuZHRzCmluZGV4IDc5NTcwZmYuLmRkZDY3YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQwYWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MGFkcy5kdHMKQEAgLTEyNiw5NyArMTI2LDEwNiBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47Ci0JCQkJcmVnID0gPDB4MD47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw1IDE+OwotCQkJCXJlZyA9IDwweDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NyAxPjsKLQkJCQlyZWcgPSA8MHgzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNjUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjY1MjAgMHgyMD47Ci0KLQkJCXRiaTI6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47CisJCQkJCXJlZyA9IDwweDA+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDE+OworCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NyAxPjsKKwkJCQkJcmVnID0gPDB4Mz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDI6IGV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJGRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjYwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDw0MSAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMj47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkyOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MWNkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MWNkcy5kdHMKaW5kZXggMjIxMDM2YS4uZTQ1MDk3ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQxY2RzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MWNkcy5kdHMKQEAgLTEyNiw2NiArMTI2LDcyIEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MHgwPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDE+OworCQkJCQlyZWcgPSA8MHgwPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NSAxPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDRkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0NGRzLmR0cwppbmRleCAwNjY4ZDEwLi43YzY5MzJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0NGRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0NGRzLmR0cwpAQCAtOTgsNDQgKzk4LDYgQEAKIAkJCWRmc3JyOwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDB4MD47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8MHgxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI2NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNjUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCiAJCWRtYUAyMTMwMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDE+OwpAQCAtMTc4LDMxICsxNDAsNzQgQEAKIAkJfTsKIAogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDB4MD47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAyIDMzIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDhjZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDhjZHMuZHRzCmluZGV4IGRmNzc0YTcuLjgwNGU5MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ4Y2RzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0OGNkcy5kdHMKQEAgLTE0MiwxMjkgKzE0MiwxNDEgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw1IDE+OwotCQkJCXJlZyA9IDwweDA+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MHgxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47Ci0JCQkJcmVnID0gPDB4Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw1IDE+OwotCQkJCXJlZyA9IDwweDM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI2NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNjUyMCAweDIwPjsKLQotCQkJdGJpMjogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI3NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNzUyMCAweDIwPjsKLQotCQkJdGJpMzogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47CisJCQkJCXJlZyA9IDwweDA+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDE+OworCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NSAxPjsKKwkJCQkJcmVnID0gPDB4Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47CisJCQkJCXJlZyA9IDwweDM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogLyogZVRTRUMgMy80IGFyZSBjdXJyZW50bHkgYnJva2VuCiAJCWVuZXQyOiBldGhlcm5ldEAyNjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjYwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTI+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMjogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDM6IGV0aGVybmV0QDI3MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjcwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNzAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM3IDIgMzggMiAzOSAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkzOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU1NWNkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU1NWNkcy5kdHMKaW5kZXggMDUzYjAxZS4uOTQ4NGYwNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NTVjZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTU1Y2RzLmR0cwpAQCAtMTI2LDY2ICsxMjYsNzIgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw1IDE+OwotCQkJCXJlZyA9IDwweDA+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MHgxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47CisJCQkJCXJlZyA9IDwweDA+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDE+OworCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2MGFkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2MGFkcy5kdHMKaW5kZXggMTFiMWJjYi4uY2MyYWNmOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjBhZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTYwYWRzLmR0cwpAQCAtMTE1LDc4ICsxMTUsODQgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw1IDE+OwotCQkJCXJlZyA9IDwweDA+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MHgxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDcgMT47Ci0JCQkJcmVnID0gPDB4Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw3IDE+OwotCQkJCXJlZyA9IDwweDM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NSAxPjsKKwkJCQkJcmVnID0gPDB4MD47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47CisJCQkJCXJlZyA9IDwweDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw3IDE+OworCQkJCQlyZWcgPSA8MHgyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NyAxPjsKKwkJCQkJcmVnID0gPDB4Mz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJbXBpYzogcGljQDQwMDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cwppbmRleCAxOTU1YmQ5Li45ZDUyZTNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjhtZHMuZHRzCkBAIC0xNDksNzggKzE0OSw4NCBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTA6IGV0aGVybmV0LXBoeUA3IHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEgMT47Ci0JCQkJcmVnID0gPDB4Nz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwyIDE+OwotCQkJCXJlZyA9IDwweDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MSAxPjsKLQkJCQlyZWcgPSA8MHgyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIgMT47Ci0JCQkJcmVnID0gPDB4Mz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlANyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEgMT47CisJCQkJCXJlZyA9IDwweDc+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwyIDE+OworCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MSAxPjsKKwkJCQkJcmVnID0gPDB4Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDIgMT47CisJCQkJCXJlZyA9IDwweDM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAgCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzLmR0cwppbmRleCAzNTljM2I3Li42ZTc5YTQxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzLmR0cwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBNUEM4NTcyIERTIERldmljZSBUcmVlIFNvdXJjZQogICoKLSAqIENvcHlyaWdodCAyMDA3LCAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0zMTIsMTI5ICszMTIsMTQxIEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDB4MD47Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQl9OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDB4Mj47Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDB4Mz47Ci0JCQl9OwotCi0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjY1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI2NTIwIDB4MjA+OwotCi0JCQl0YmkyOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjc1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI3NTIwIDB4MjA+OwotCi0JCQl0YmkzOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDB4MD47CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDB4Mz47CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAyIDMzIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkyPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMjogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDM6IGV0aGVybmV0QDI3MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjcwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNzAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM3IDIgMzggMiAzOSAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTM6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKQEAgLTY0Myw3ICs2NTUsNyBAQAogCiAJCQkJICAweDEwMDAwMDAgMHgwIDB4MAogCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKLQkJCQkgIDB4MCAweDEwMDAwMD47CisJCQkJICAweDAgMHgxMDAwMD47CiAJCQl1bGkxNTc1QDAgewogCQkJCXJlZyA9IDwweDAgMHgwIDB4MCAweDAgMHgwPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwyPjsKQEAgLTY1NCw3ICs2NjYsNyBAQAogCiAJCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKIAkJCQkJICAweDEwMDAwMDAgMHgwIDB4MAotCQkJCQkgIDB4MCAweDEwMDAwMD47CisJCQkJCSAgMHgwIDB4MTAwMDA+OwogCQkJCWlzYUAxZSB7CiAJCQkJCWRldmljZV90eXBlID0gImlzYSI7CiAJCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CkBAIC03NDQsNyArNzU2LDcgQEAKIAogCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKIAkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCi0JCQkJICAweDAgMHgxMDAwMDA+OworCQkJCSAgMHgwIDB4MTAwMDA+OwogCQl9OwogCX07CiAKQEAgLTc4MSw3ICs3OTMsNyBAQAogCiAJCQkJICAweDEwMDAwMDAgMHgwIDB4MAogCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKLQkJCQkgIDB4MCAweDEwMDAwMD47CisJCQkJICAweDAgMHgxMDAwMD47CiAJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzXzM2Yi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzXzM2Yi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJkODFhNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHNfMzZiLmR0cwpAQCAtMCwwICsxLDc5OSBAQAorLyoKKyAqIE1QQzg1NzIgRFMgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKy8geworCW1vZGVsID0gImZzbCxNUEM4NTcyRFMiOworCWNvbXBhdGlibGUgPSAiZnNsLE1QQzg1NzJEUyI7CisJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJI3NpemUtY2VsbHMgPSA8Mj47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJmVuZXQwOworCQlldGhlcm5ldDEgPSAmZW5ldDE7CisJCWV0aGVybmV0MiA9ICZlbmV0MjsKKwkJZXRoZXJuZXQzID0gJmVuZXQzOworCQlzZXJpYWwwID0gJnNlcmlhbDA7CisJCXNlcmlhbDEgPSAmc2VyaWFsMTsKKwkJcGNpMCA9ICZwY2kwOworCQlwY2kxID0gJnBjaTE7CisJCXBjaTIgPSAmcGNpMjsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlQb3dlclBDLDg1NzJAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDB4MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlkLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJCS8vIEwxLCAzMksKKwkJCWktY2FjaGUtc2l6ZSA9IDwweDgwMDA+OwkJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OworCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJfTsKKworCQlQb3dlclBDLDg1NzJAMSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDB4MT47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlkLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJCS8vIEwxLCAzMksKKwkJCWktY2FjaGUtc2l6ZSA9IDwweDgwMDA+OwkJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OworCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwl9OworCisJbG9jYWxidXNAZmZmZTA1MDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWVsYmMiLCAiZnNsLGVsYmMiLCAic2ltcGxlLWJ1cyI7CisJCXJlZyA9IDwweGYgMHhmZmUwNTAwMCAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8MTkgMj47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCisJCXJhbmdlcyA9IDwweDAgMHgwIDB4ZiAweGU4MDAwMDAwIDB4MDgwMDAwMDAKKwkJCSAgMHgxIDB4MCAweGYgMHhlMDAwMDAwMCAweDA4MDAwMDAwCisJCQkgIDB4MiAweDAgMHhmIDB4ZmZhMDAwMDAgMHgwMDA0MDAwMAorCQkJICAweDMgMHgwIDB4ZiAweGZmZGYwMDAwIDB4MDAwMDgwMDAKKwkJCSAgMHg0IDB4MCAweGYgMHhmZmE0MDAwMCAweDAwMDQwMDAwCisJCQkgIDB4NSAweDAgMHhmIDB4ZmZhODAwMDAgMHgwMDA0MDAwMAorCQkJICAweDYgMHgwIDB4ZiAweGZmYWMwMDAwIDB4MDAwNDAwMDA+OworCisJCW5vckAwLDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwweDAgMHgwIDB4ODAwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJZGV2aWNlLXdpZHRoID0gPDE+OworCisJCQlyYW1kaXNrQDAgeworCQkJCXJlZyA9IDwweDAgMHgwMzAwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJZGlhZ25vc3RpY0AzMDAwMDAwIHsKKwkJCQlyZWcgPSA8MHgwMzAwMDAwMCAweDAwZTAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlkaW5rQDNlMDAwMDAgeworCQkJCXJlZyA9IDwweDAzZTAwMDAwIDB4MDAyMDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCWtlcm5lbEA0MDAwMDAwIHsKKwkJCQlyZWcgPSA8MHgwNDAwMDAwMCAweDAwNDAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlqZmZzMkA0NDAwMDAwIHsKKwkJCQlyZWcgPSA8MHgwNDQwMDAwMCAweDAzYjAwMDAwPjsKKwkJCX07CisKKwkJCWR0YkA3ZjAwMDAwIHsKKwkJCQlyZWcgPSA8MHgwN2YwMDAwMCAweDAwMDgwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQl1LWJvb3RAN2Y4MDAwMCB7CisJCQkJcmVnID0gPDB4MDdmODAwMDAgMHgwMDA4MDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJfTsKKworCQluYW5kQDIsMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1mY20tbmFuZCIsCisJCQkJICAgICAiZnNsLGVsYmMtZmNtLW5hbmQiOworCQkJcmVnID0gPDB4MiAweDAgMHg0MDAwMD47CisKKwkJCXUtYm9vdEAwIHsKKwkJCQlyZWcgPSA8MHgwIDB4MDIwMDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCWpmZnMyQDIwMDAwMDAgeworCQkJCXJlZyA9IDwweDAyMDAwMDAwIDB4MTAwMDAwMDA+OworCQkJfTsKKworCQkJcmFtZGlza0AxMjAwMDAwMCB7CisJCQkJcmVnID0gPDB4MTIwMDAwMDAgMHgwODAwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJa2VybmVsQDFhMDAwMDAwIHsKKwkJCQlyZWcgPSA8MHgxYTAwMDAwMCAweDA0MDAwMDAwPjsKKwkJCX07CisKKwkJCWR0YkAxZTAwMDAwMCB7CisJCQkJcmVnID0gPDB4MWUwMDAwMDAgMHgwMTAwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJZW1wdHlAMWYwMDAwMDAgeworCQkJCXJlZyA9IDwweDFmMDAwMDAwIDB4MjEwMDAwMDA+OworCQkJfTsKKwkJfTsKKworCQluYW5kQDQsMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWZjbS1uYW5kIiwKKwkJCQkgICAgICJmc2wsZWxiYy1mY20tbmFuZCI7CisJCQlyZWcgPSA8MHg0IDB4MCAweDQwMDAwPjsKKwkJfTsKKworCQluYW5kQDUsMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWZjbS1uYW5kIiwKKwkJCQkgICAgICJmc2wsZWxiYy1mY20tbmFuZCI7CisJCQlyZWcgPSA8MHg1IDB4MCAweDQwMDAwPjsKKwkJfTsKKworCQluYW5kQDYsMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWZjbS1uYW5kIiwKKwkJCQkgICAgICJmc2wsZWxiYy1mY20tbmFuZCI7CisJCQlyZWcgPSA8MHg2IDB4MCAweDQwMDAwPjsKKwkJfTsKKwl9OworCisJc29jODU3MkBmZmZlMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInNvYyI7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCXJhbmdlcyA9IDwweDAgMHhmIDB4ZmZlMDAwMDAgMHgxMDAwMDA+OworCQlyZWcgPSA8MHhmIDB4ZmZlMDAwMDAgMCAweDEwMDA+OwkvLyBDQ1NSQkFSICYgc29jIHJlZ3MsIHJlbW92ZSBvbmNlIHBhcnNlIGNvZGUgZm9yIGltbXJiYXNlIGZpeGVkCisJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGaWxsZWQgb3V0IGJ5IHVib290LgorCisJCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1tZW1vcnktY29udHJvbGxlciI7CisJCQlyZWcgPSA8MHgyMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MTggMj47CisJCX07CisKKwkJbWVtb3J5LWNvbnRyb2xsZXJANjAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLW1lbW9yeS1jb250cm9sbGVyIjsKKwkJCXJlZyA9IDwweDYwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDwxOCAyPjsKKwkJfTsKKworCQlMMjogbDItY2FjaGUtY29udHJvbGxlckAyMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWwyLWNhY2hlLWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKKwkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQljYWNoZS1zaXplID0gPDB4MTAwMDAwPjsgLy8gTDIsIDFNCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MTYgMj47CisJCX07CisKKwkJaTJjQDMwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlkZnNycjsKKwkJfTsKKworCQlpMmNAMzEwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzMTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDMgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCQl9OworCisJCWRtYUBjMzAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWRtYSIsICJmc2wsZWxvcGx1cy1kbWEiOworCQkJcmVnID0gPDB4YzMwMCAweDQ+OworCQkJcmFuZ2VzID0gPDB4MCAweGMxMDAgMHgyMDA+OworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCWRtYS1jaGFubmVsQDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZG1hLWNoYW5uZWwiLAorCQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDw3NiAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEA4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1kbWEtY2hhbm5lbCIsCisJCQkJCQkiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDw3NyAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZG1hLWNoYW5uZWwiLAorCQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDc4IDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDE4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1kbWEtY2hhbm5lbCIsCisJCQkJCQkiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDE4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8NzkgMj47CisJCQl9OworCQl9OworCisJCWRtYUAyMTMwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1kbWEiLCAiZnNsLGVsb3BsdXMtZG1hIjsKKwkJCXJlZyA9IDwweDIxMzAwIDB4ND47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjExMDAgMHgyMDA+OworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRtYS1jaGFubmVsQDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZG1hLWNoYW5uZWwiLAorCQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMCAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEA4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1kbWEtY2hhbm5lbCIsCisJCQkJCQkiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMSAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZG1hLWNoYW5uZWwiLAorCQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIyIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDE4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1kbWEtY2hhbm5lbCIsCisJCQkJCQkiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDE4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjMgMj47CisJCQl9OworCQl9OworCisJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDB4MD47CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDB4Mz47CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OworCQl9OworCisJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAyIDMzIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQl0YmktaGFuZGxlID0gPCZ0YmkyPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMjogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJZW5ldDM6IGV0aGVybmV0QDI3MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljZWxsLWluZGV4ID0gPDM+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjcwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNzAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDM3IDIgMzggMiAzOSAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTM6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OworCQl9OworCisJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ1MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCXNlcmlhbDE6IHNlcmlhbEA0NjAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ2MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgewkvL2dsb2JhbCB1dGlsaXRpZXMgYmxvY2sKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZ3V0cyI7CisJCQlyZWcgPSA8MHhlMDAwMCAweDEwMDA+OworCQkJZnNsLGhhcy1yc3RjcjsKKwkJfTsKKworCQltc2lANDE2MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1tc2kiLCAiZnNsLG1waWMtbXNpIjsKKwkJCXJlZyA9IDwweDQxNjAwIDB4ODA+OworCQkJbXNpLWF2YWlsYWJsZS1yYW5nZXMgPSA8MCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPAorCQkJCTB4ZTAgMAorCQkJCTB4ZTEgMAorCQkJCTB4ZTIgMAorCQkJCTB4ZTMgMAorCQkJCTB4ZTQgMAorCQkJCTB4ZTUgMAorCQkJCTB4ZTYgMAorCQkJCTB4ZTcgMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQljcnlwdG9AMzAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsc2VjMy4wIiwgImZzbCxzZWMyLjQiLCAiZnNsLHNlYzIuMiIsCisJCQkJICAgICAiZnNsLHNlYzIuMSIsICJmc2wsc2VjMi4wIjsKKwkJCXJlZyA9IDwweDMwMDAwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDw0NSAyIDU4IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlmc2wsbnVtLWNoYW5uZWxzID0gPDQ+OworCQkJZnNsLGNoYW5uZWwtZmlmby1sZW4gPSA8MjQ+OworCQkJZnNsLGV4ZWMtdW5pdHMtbWFzayA9IDwweDlmZT47CisJCQlmc2wsZGVzY3JpcHRvci10eXBlcy1tYXNrID0gPDB4M2FiMGViZj47CisJCX07CisKKwkJbXBpYzogcGljQDQwMDAwIHsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJcmVnID0gPDB4NDAwMDAgMHg0MDAwMD47CisJCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOworCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOworCQl9OworCX07CisKKwlwY2kwOiBwY2llQGZmZmUwODAwMCB7CisJCWNlbGwtaW5kZXggPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDgtcGNpZSI7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJcmVnID0gPDB4ZiAweGZmZTA4MDAwIDAgMHgxMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMCAweGMgMHgwMDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhmIDB4ZmZjMDAwMDAgMHgwIDB4MDAwMTAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDwyNCAyPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZmYwMCAweDAgMHgwIDB4Nz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkvKiBJRFNFTCAweDExIGZ1bmMgMCAtIFBDSSBzbG90IDEgKi8KKwkJCTB4ODgwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDg4MDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHg4ODAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4ODgwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCisKKwkJCS8qIElEU0VMIDB4MTEgZnVuYyAxIC0gUENJIHNsb3QgMSAqLworCQkJMHg4OTAwIDB4MCAweDAgMHgxICZtcGljIDB4MiAweDEKKwkJCTB4ODkwMCAweDAgMHgwIDB4MiAmbXBpYyAweDMgMHgxCisJCQkweDg5MDAgMHgwIDB4MCAweDMgJm1waWMgMHg0IDB4MQorCQkJMHg4OTAwIDB4MCAweDAgMHg0ICZtcGljIDB4MSAweDEKKworCQkJLyogSURTRUwgMHgxMSBmdW5jIDIgLSBQQ0kgc2xvdCAxICovCisJCQkweDhhMDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJMHg4YTAwIDB4MCAweDAgMHgyICZtcGljIDB4MyAweDEKKwkJCTB4OGEwMCAweDAgMHgwIDB4MyAmbXBpYyAweDQgMHgxCisJCQkweDhhMDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MQorCisJCQkvKiBJRFNFTCAweDExIGZ1bmMgMyAtIFBDSSBzbG90IDEgKi8KKwkJCTB4OGIwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDhiMDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHg4YjAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4OGIwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCisKKwkJCS8qIElEU0VMIDB4MTEgZnVuYyA0IC0gUENJIHNsb3QgMSAqLworCQkJMHg4YzAwIDB4MCAweDAgMHgxICZtcGljIDB4MiAweDEKKwkJCTB4OGMwMCAweDAgMHgwIDB4MiAmbXBpYyAweDMgMHgxCisJCQkweDhjMDAgMHgwIDB4MCAweDMgJm1waWMgMHg0IDB4MQorCQkJMHg4YzAwIDB4MCAweDAgMHg0ICZtcGljIDB4MSAweDEKKworCQkJLyogSURTRUwgMHgxMSBmdW5jIDUgLSBQQ0kgc2xvdCAxICovCisJCQkweDhkMDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJMHg4ZDAwIDB4MCAweDAgMHgyICZtcGljIDB4MyAweDEKKwkJCTB4OGQwMCAweDAgMHgwIDB4MyAmbXBpYyAweDQgMHgxCisJCQkweDhkMDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MQorCisJCQkvKiBJRFNFTCAweDExIGZ1bmMgNiAtIFBDSSBzbG90IDEgKi8KKwkJCTB4OGUwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDhlMDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHg4ZTAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4OGUwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCisKKwkJCS8qIElEU0VMIDB4MTEgZnVuYyA3IC0gUENJIHNsb3QgMSAqLworCQkJMHg4ZjAwIDB4MCAweDAgMHgxICZtcGljIDB4MiAweDEKKwkJCTB4OGYwMCAweDAgMHgwIDB4MiAmbXBpYyAweDMgMHgxCisJCQkweDhmMDAgMHgwIDB4MCAweDMgJm1waWMgMHg0IDB4MQorCQkJMHg4ZjAwIDB4MCAweDAgMHg0ICZtcGljIDB4MSAweDEKKworCQkJLyogSURTRUwgMHgxMiBmdW5jIDAgLSBQQ0kgc2xvdCAyICovCisJCQkweDkwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgzIDB4MQorCQkJMHg5MDAwIDB4MCAweDAgMHgyICZtcGljIDB4NCAweDEKKwkJCTB4OTAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDEgMHgxCisJCQkweDkwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgyIDB4MQorCisJCQkvKiBJRFNFTCAweDEyIGZ1bmMgMSAtIFBDSSBzbG90IDIgKi8KKwkJCTB4OTEwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDkxMDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg5MTAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4OTEwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCisKKwkJCS8qIElEU0VMIDB4MTIgZnVuYyAyIC0gUENJIHNsb3QgMiAqLworCQkJMHg5MjAwIDB4MCAweDAgMHgxICZtcGljIDB4MyAweDEKKwkJCTB4OTIwMCAweDAgMHgwIDB4MiAmbXBpYyAweDQgMHgxCisJCQkweDkyMDAgMHgwIDB4MCAweDMgJm1waWMgMHgxIDB4MQorCQkJMHg5MjAwIDB4MCAweDAgMHg0ICZtcGljIDB4MiAweDEKKworCQkJLyogSURTRUwgMHgxMiBmdW5jIDMgLSBQQ0kgc2xvdCAyICovCisJCQkweDkzMDAgMHgwIDB4MCAweDEgJm1waWMgMHgzIDB4MQorCQkJMHg5MzAwIDB4MCAweDAgMHgyICZtcGljIDB4NCAweDEKKwkJCTB4OTMwMCAweDAgMHgwIDB4MyAmbXBpYyAweDEgMHgxCisJCQkweDkzMDAgMHgwIDB4MCAweDQgJm1waWMgMHgyIDB4MQorCisJCQkvKiBJRFNFTCAweDEyIGZ1bmMgNCAtIFBDSSBzbG90IDIgKi8KKwkJCTB4OTQwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDk0MDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg5NDAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4OTQwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCisKKwkJCS8qIElEU0VMIDB4MTIgZnVuYyA1IC0gUENJIHNsb3QgMiAqLworCQkJMHg5NTAwIDB4MCAweDAgMHgxICZtcGljIDB4MyAweDEKKwkJCTB4OTUwMCAweDAgMHgwIDB4MiAmbXBpYyAweDQgMHgxCisJCQkweDk1MDAgMHgwIDB4MCAweDMgJm1waWMgMHgxIDB4MQorCQkJMHg5NTAwIDB4MCAweDAgMHg0ICZtcGljIDB4MiAweDEKKworCQkJLyogSURTRUwgMHgxMiBmdW5jIDYgLSBQQ0kgc2xvdCAyICovCisJCQkweDk2MDAgMHgwIDB4MCAweDEgJm1waWMgMHgzIDB4MQorCQkJMHg5NjAwIDB4MCAweDAgMHgyICZtcGljIDB4NCAweDEKKwkJCTB4OTYwMCAweDAgMHgwIDB4MyAmbXBpYyAweDEgMHgxCisJCQkweDk2MDAgMHgwIDB4MCAweDQgJm1waWMgMHgyIDB4MQorCisJCQkvKiBJRFNFTCAweDEyIGZ1bmMgNyAtIFBDSSBzbG90IDIgKi8KKwkJCTB4OTcwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDk3MDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg5NzAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4OTcwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCisKKwkJCS8vIElEU0VMIDB4MWMgIFVTQgorCQkJMHhlMDAwIDB4MCAweDAgMHgxICZpODI1OSAweGMgMHgyCisJCQkweGUxMDAgMHgwIDB4MCAweDIgJmk4MjU5IDB4OSAweDIKKwkJCTB4ZTIwMCAweDAgMHgwIDB4MyAmaTgyNTkgMHhhIDB4MgorCQkJMHhlMzAwIDB4MCAweDAgMHg0ICZpODI1OSAweGIgMHgyCisKKwkJCS8vIElEU0VMIDB4MWQgIEF1ZGlvCisJCQkweGU4MDAgMHgwIDB4MCAweDEgJmk4MjU5IDB4NiAweDIKKworCQkJLy8gSURTRUwgMHgxZSBMZWdhY3kKKwkJCTB4ZjAwMCAweDAgMHgwIDB4MSAmaTgyNTkgMHg3IDB4MgorCQkJMHhmMTAwIDB4MCAweDAgMHgxICZpODI1OSAweDcgMHgyCisKKwkJCS8vIElEU0VMIDB4MWYgSURFL1NBVEEKKwkJCTB4ZjgwMCAweDAgMHgwIDB4MSAmaTgyNTkgMHhlIDB4MgorCQkJMHhmOTAwIDB4MCAweDAgMHgxICZpODI1OSAweDUgMHgyCisKKwkJCT47CisKKwkJcGNpZUAwIHsKKwkJCXJlZyA9IDwweDAgMHgwIDB4MCAweDAgMHgwPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMAorCQkJCSAgMHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwCisJCQkJICAweDAgMHgyMDAwMDAwMAorCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MCAweDEwMDAwPjsKKwkJCXVsaTE1NzVAMCB7CisJCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OworCQkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAKKwkJCQkJICAweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAKKwkJCQkJICAweDAgMHgyMDAwMDAwMAorCisJCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCQkgIDB4MCAweDEwMDAwPjsKKwkJCQlpc2FAMWUgeworCQkJCQlkZXZpY2VfdHlwZSA9ICJpc2EiOworCQkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCQkJCXJlZyA9IDwweGYwMDAgMHgwIDB4MCAweDAgMHgwPjsKKwkJCQkJcmFuZ2VzID0gPDB4MSAweDAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkJCSAgMHgxMDAwPjsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaTgyNTk+OworCisJCQkJCWk4MjU5OiBpbnRlcnJ1cHQtY29udHJvbGxlckAyMCB7CisJCQkJCQlyZWcgPSA8MHgxIDB4MjAgMHgyCisJCQkJCQkgICAgICAgMHgxIDB4YTAgMHgyCisJCQkJCQkgICAgICAgMHgxIDB4NGQwIDB4Mj47CisJCQkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQkJCWRldmljZV90eXBlID0gImludGVycnVwdC1jb250cm9sbGVyIjsKKwkJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQkJCWNvbXBhdGlibGUgPSAiY2hycCxpaWMiOworCQkJCQkJaW50ZXJydXB0cyA9IDw5IDI+OworCQkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCX07CisKKwkJCQkJaTgwNDJANjAgeworCQkJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkJCXJlZyA9IDwweDEgMHg2MCAweDEgMHgxIDB4NjQgMHgxPjsKKwkJCQkJCWludGVycnVwdHMgPSA8MSAzIDEyIDM+OworCQkJCQkJaW50ZXJydXB0LXBhcmVudCA9CisJCQkJCQkJPCZpODI1OT47CisKKwkJCQkJCWtleWJvYXJkQDAgeworCQkJCQkJCXJlZyA9IDwweDA+OworCQkJCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLDMwMyI7CisJCQkJCQl9OworCisJCQkJCQltb3VzZUAxIHsKKwkJCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQkJCQljb21wYXRpYmxlID0gInBucFBOUCxmMDMiOworCQkJCQkJfTsKKwkJCQkJfTsKKworCQkJCQlydGNANzAgeworCQkJCQkJY29tcGF0aWJsZSA9ICJwbnBQTlAsYjAwIjsKKwkJCQkJCXJlZyA9IDwweDEgMHg3MCAweDI+OworCQkJCQl9OworCisJCQkJCWdwaW9ANDAwIHsKKwkJCQkJCXJlZyA9IDwweDEgMHg0MDAgMHg4MD47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisJCX07CisKKwl9OworCisJcGNpMTogcGNpZUBmZmZlMDkwMDAgeworCQljZWxsLWluZGV4ID0gPDE+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwweGYgMHhmZmUwOTAwMCAwIDB4MTAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAgMHhjIDB4MjAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKKwkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZiAweGZmYzEwMDAwIDB4MCAweDAwMDEwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MjUgMj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJLyogSURTRUwgMHgwICovCisJCQkwMDAwIDB4MCAweDAgMHgxICZtcGljIDB4NCAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDIgJm1waWMgMHg1IDB4MQorCQkJMDAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDYgMHgxCisJCQkwMDAwIDB4MCAweDAgMHg0ICZtcGljIDB4NyAweDEKKwkJCT47CisJCXBjaWVAMCB7CisJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAKKwkJCQkgIDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMAorCQkJCSAgMHgwIDB4MjAwMDAwMDAKKworCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDAgMHgxMDAwMD47CisJCX07CisJfTsKKworCXBjaTI6IHBjaWVAZmZmZTBhMDAwIHsKKwkJY2VsbC1pbmRleCA9IDwyPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlyZWcgPSA8MHhmIDB4ZmZlMGEwMDAgMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwIDB4YyAweDQwMDAwMDAwIDB4MCAweDIwMDAwMDAwCisJCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGYgMHhmZmMyMDAwMCAweDAgMHgwMDAxMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDI2IDI+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCS8qIElEU0VMIDB4MCAqLworCQkJMDAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDAgMHgxCisJCQkwMDAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgyIDB4MQorCQkJMDAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDMgMHgxCisJCQk+OworCQlwY2llQDAgeworCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwCisJCQkJICAweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAKKwkJCQkgIDB4MCAweDIwMDAwMDAwCisKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgwIDB4MTAwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkc19jYW1wX2NvcmUwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHNfY2FtcF9jb3JlMC5kdHMKaW5kZXggZmQ0NjJlZi4uMmJjMGM3MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkc19jYW1wX2NvcmUwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzX2NhbXBfY29yZTAuZHRzCkBAIC02LDcgKzYsNyBAQAogICogVGhpcyBkdHMgZmlsZSBhbGxvd3MgY29yZTAgdG8gaGF2ZSBtZW1vcnksIGwyLCBpMmMsIGRtYTEsIGdsb2JhbC11dGlsLCBldGgwLAogICogZXRoMSwgY3J5cHRvLCBwY2kwLCBwY2kxLgogICoKLSAqIENvcHlyaWdodCAyMDA3LCAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0xNDgsMzUgKzE0OCwzOCBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwweDA+OwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwweDE+OwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MHgwPjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwweDE+OworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CkBAIC0yMjcsNyArMjMwLDcgQEAKIAkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKIAkJCXByb3RlY3RlZC1zb3VyY2VzID0gPAogCQkJMzEgMzIgMzMgMzcgMzggMzkgICAgICAgLyogZW5ldDIgZW5ldDMgKi8KLQkJCTc2IDc3IDc4IDc5IDI3IDQyCS8qIGRtYTIgcGNpMiBzZXJpYWwqLworCQkJNzYgNzcgNzggNzkgMjYgNDIJLyogZG1hMiBwY2kyIHNlcmlhbCovCiAJCQkweGUwIDB4ZTEgMHhlMiAweGUzICAgICAvKiBtc2kgKi8KIAkJCTB4ZTQgMHhlNSAweGU2IDB4ZTcKIAkJCT47CkBAIC0zNzYsNyArMzc5LDcgQEAKIAogCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKIAkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCi0JCQkJICAweDAgMHgxMDAwMDA+OworCQkJCSAgMHgwIDB4MTAwMDA+OwogCQkJdWxpMTU3NUAwIHsKIAkJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CiAJCQkJI3NpemUtY2VsbHMgPSA8Mj47CkBAIC0zODcsNyArMzkwLDcgQEAKIAogCQkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCiAJCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKLQkJCQkJICAweDAgMHgxMDAwMDA+OworCQkJCQkgIDB4MCAweDEwMDAwPjsKIAkJCQlpc2FAMWUgewogCQkJCQlkZXZpY2VfdHlwZSA9ICJpc2EiOwogCQkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwpAQCAtNDc3LDcgKzQ4MCw3IEBACiAKIAkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCiAJCQkJICAweDEwMDAwMDAgMHgwIDB4MAotCQkJCSAgMHgwIDB4MTAwMDAwPjsKKwkJCQkgIDB4MCAweDEwMDAwPjsKIAkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHNfY2FtcF9jb3JlMS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzX2NhbXBfY29yZTEuZHRzCmluZGV4IGUzNTIzMGYuLjE1OWNiM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHNfY2FtcF9jb3JlMS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkc19jYW1wX2NvcmUxLmR0cwpAQCAtNyw3ICs3LDcgQEAKICAqCiAgKiBQbGVhc2Ugbm90ZSB0byBhZGQgIi1iIDEiIGZvciBjb3JlMSdzIGR0cyBjb21waWxpbmcuCiAgKgotICogQ29weXJpZ2h0IDIwMDcsIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTE4Niw3ICsxODYsNyBAQAogCQkJcHJvdGVjdGVkLXNvdXJjZXMgPSA8CiAJCQkxOCAxNiAxMCA0MiA0NSA1OAkvKiBNRU0gTDIgbWRpbyBzZXJpYWwgY3J5cHRvICovCiAJCQkyOSAzMCAzNCAzNSAzNiA0MAkvKiBlbmV0MCBlbmV0MSAqLwotCQkJMjQgMjYgMjAgMjEgMjIgMjMJLyogcGNpZTAgcGNpZTEgZG1hMSAqLworCQkJMjQgMjUgMjAgMjEgMjIgMjMJLyogcGNpMCBwY2kxIGRtYTEgKi8KIAkJCTQzCQkJLyogaTJjICovCiAJCQkweDEgMHgyIDB4MyAweDQgICAgICAgICAvKiBwY2kgc2xvdCAqLwogCQkJMHg5IDB4YSAweGIgMHhjICAgICAgICAgLyogdXNiICovCkBAIC0yMjgsNyArMjI4LDcgQEAKIAogCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKIAkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCi0JCQkJICAweDAgMHgxMDAwMDA+OworCQkJCSAgMHgwIDB4MTAwMDA+OwogCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2MTBfaHBjZC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODYxMF9ocGNkLmR0cwppbmRleCBmNzI0ZDcyLi4xYmQzZWJlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODYxMF9ocGNkLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODYxMF9ocGNkLmR0cwpAQCAtMjE3LDYgKzIxNyw3IEBACiAJCQljb2RlYy1oYW5kbGUgPSA8JmNzNDI3MD47CiAJCQlmc2wscGxheWJhY2stZG1hID0gPCZkbWEwMD47CiAJCQlmc2wsY2FwdHVyZS1kbWEgPSA8JmRtYTAxPjsKKwkJCWZzbCxmaWZvLWRlcHRoID0gPDg+OwogCQl9OwogCiAJCXNzaUAxNjEwMCB7CkBAIC0yMjUsNiArMjI2LDcgQEAKIAkJCXJlZyA9IDwweDE2MTAwIDB4MTAwPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJaW50ZXJydXB0cyA9IDw2MyAyPjsKKwkJCWZzbCxmaWZvLWRlcHRoID0gPDg+OwogCQl9OwogCiAJCWRtYUAyMTMwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODY0MV9ocGNuLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjQxX2hwY24uZHRzCmluZGV4IDQ0ODE1MzIuLmQ3MmJlYjE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODY0MV9ocGNuLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODY0MV9ocGNuLmR0cwpAQCAtMTgwLDEzMyArMTgwLDE0NCBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwwPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNjUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjY1MjAgMHgyMD47Ci0KLQkJCXRiaTI6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNzUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4Mjc1MjAgMHgyMD47Ci0KLQkJCXRiaTM6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwICAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwwPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCQkKIAkJZW5ldDI6IGV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAyIDMzIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkyPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMjogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDM6IGV0aGVybmV0QDI3MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNzAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI3MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzcgMiAzOCAyIDM5IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkzPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMzogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcGNtMDMwLmR0cwppbmRleCBiZTJjMTFjLi44OTU4MzQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcGNtMDMwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcGNtMDMwLmR0cwpAQCAtMTksNiArMTksNyBAQAogCWNvbXBhdGlibGUgPSAicGh5dGVjLHBjbTAzMCI7CiAJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJI3NpemUtY2VsbHMgPSA8MT47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtMjksMjYgKzMwLDI2IEBACiAJCQlyZWcgPSA8MD47CiAJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CiAJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47Ci0JCQlkLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJLyogTDEsIDE2SyAgICAgICAgICAqLwotCQkJaS1jYWNoZS1zaXplID0gPDB4NDAwMD47CS8qIEwxLCAxNksgICAgICAgICAgKi8KLQkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLyogRnJvbSBCb290bG9hZGVyICAqLwotCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8qIEZyb20gQm9vdGxvYWRlciAgKi8KLQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8qIEZyb20gQm9vdGxvYWRlciAgKi8KKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkvLyBMMSwgMTZLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJLy8gTDEsIDE2SworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgogCQl9OwogCX07CiAKIAltZW1vcnkgewogCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwotCQlyZWcgPSA8MHgwMDAwMDAwMCAweDA0MDAwMDAwPjsJLyogNjRNQiAqLworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDA0MDAwMDAwPjsJLy8gNjRNQgogCX07CiAKIAlzb2M1MjAwQGYwMDAwMDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwogCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pbW1yIjsKLQkJcmFuZ2VzID0gPDB4MCAweGYwMDAwMDAwIDB4MDAwMGMwMDA+OwotCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLyogRnJvbSBib290bG9hZGVyICovCi0JCXN5c3RlbS1mcmVxdWVuY3kgPSA8MD47CQkvKiBGcm9tIGJvb3Rsb2FkZXIgKi8KKwkJcmFuZ2VzID0gPDAgMHhmMDAwMDAwMCAweDAwMDBjMDAwPjsKKwkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQlzeXN0ZW0tZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCiAKIAkJY2RtQDIwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1jZG0iLCJmc2wsbXBjNTIwMC1jZG0iOwpAQCAtNTYsODcgKzU3LDcwIEBACiAJCX07CiAKIAkJbXBjNTIwMF9waWM6IGludGVycnVwdC1jb250cm9sbGVyQDUwMCB7Ci0JCQkvKiA1MjAwIGludGVycnVwdHMgYXJlIGVuY29kZWQgaW50byB0d28gbGV2ZWxzOyAqLworCQkJLy8gNTIwMCBpbnRlcnJ1cHRzIGFyZSBlbmNvZGVkIGludG8gdHdvIGxldmVsczsKIAkJCWludGVycnVwdC1jb250cm9sbGVyOwogCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKLQkJCWRldmljZV90eXBlID0gImludGVycnVwdC1jb250cm9sbGVyIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBpYyIsImZzbCxtcGM1MjAwLXBpYyI7CiAJCQlyZWcgPSA8MHg1MDAgMHg4MD47CiAJCX07CiAKLQkJdGltZXJANjAwIHsJLyogR2VuZXJhbCBQdXJwb3NlIFRpbWVyICovCisJCXRpbWVyQDYwMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MHg2MDAgMHgxMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MSAweDkgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MSA5IDA+OwogCQkJZnNsLGhhcy13ZHQ7CiAJCX07CiAKLQkJdGltZXJANjEwIHsJLyogR2VuZXJhbCBQdXJwb3NlIFRpbWVyICovCisJCXRpbWVyQDYxMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlyZWcgPSA8MHg2MTAgMHgxMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MSAweGEgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMCAwPjsKIAkJfTsKIAotCQlncHQyOiB0aW1lckA2MjAgeyAvKiBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlICovCisJCWdwdDI6IHRpbWVyQDYyMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdC1ncGlvIiwiZnNsLG1wYzUyMDAtZ3B0LWdwaW8iOwotCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCXJlZyA9IDwweDYyMCAweDEwPjsKLQkJCWludGVycnVwdHMgPSA8MHgxIDB4YiAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwxIDExIDA+OwogCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CiAKLQkJZ3B0MzogdGltZXJANjMwIHsgLyogR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZSAqLworCQlncHQzOiB0aW1lckA2MzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQtZ3BpbyIsImZzbCxtcGM1MjAwLWdwdC1ncGlvIjsKLQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQlyZWcgPSA8MHg2MzAgMHgxMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MSAweGMgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMiAwPjsKIAkJCWdwaW8tY29udHJvbGxlcjsKIAkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwogCi0JCWdwdDQ6IHRpbWVyQDY0MCB7IC8qIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUgKi8KKwkJZ3B0NDogdGltZXJANjQwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0LWdwaW8iLCJmc2wsbXBjNTIwMC1ncHQtZ3BpbyI7Ci0JCQljZWxsLWluZGV4ID0gPDQ+OwogCQkJcmVnID0gPDB4NjQwIDB4MTA+OwotCQkJaW50ZXJydXB0cyA9IDwweDEgMHhkIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTMgMD47CiAJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJfTsKIAotCQlncHQ1OiB0aW1lckA2NTAgeyAvKiBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlICovCisJCWdwdDU6IHRpbWVyQDY1MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdC1ncGlvIiwiZnNsLG1wYzUyMDAtZ3B0LWdwaW8iOwotCQkJY2VsbC1pbmRleCA9IDw1PjsKIAkJCXJlZyA9IDwweDY1MCAweDEwPjsKLQkJCWludGVycnVwdHMgPSA8MHgxIDB4ZSAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwxIDE0IDA+OwogCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CiAKLQkJZ3B0NjogdGltZXJANjYwIHsgLyogR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZSAqLworCQlncHQ2OiB0aW1lckA2NjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQtZ3BpbyIsImZzbCxtcGM1MjAwLWdwdC1ncGlvIjsKLQkJCWNlbGwtaW5kZXggPSA8Nj47CiAJCQlyZWcgPSA8MHg2NjAgMHgxMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MSAweGYgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNSAwPjsKIAkJCWdwaW8tY29udHJvbGxlcjsKIAkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwogCi0JCWdwdDc6IHRpbWVyQDY3MCB7IC8qIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUgKi8KKwkJZ3B0NzogdGltZXJANjcwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0LWdwaW8iLCJmc2wsbXBjNTIwMC1ncHQtZ3BpbyI7Ci0JCQljZWxsLWluZGV4ID0gPDc+OwogCQkJcmVnID0gPDB4NjcwIDB4MTA+OwotCQkJaW50ZXJydXB0cyA9IDwweDEgMHgxMCAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwxIDE2IDA+OwogCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CkBAIC0xNDQsNDAgKzEyOCwzMyBAQAogCQlydGNAODAwIHsJLy8gUmVhbCB0aW1lIGNsb2NrCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ydGMiLCJmc2wsbXBjNTIwMC1ydGMiOwogCQkJcmVnID0gPDB4ODAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8MHgxIDB4NSAweDAgMHgxIDB4NiAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwxIDUgMCAxIDYgMD47CiAJCX07CiAKIAkJY2FuQDkwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tc2NhbiIsImZzbCxtcGM1MjAwLW1zY2FuIjsKLQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MiAweDExIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTcgMD47CiAJCQlyZWcgPSA8MHg5MDAgMHg4MD47CiAJCX07CiAKIAkJY2FuQDk4MCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tc2NhbiIsImZzbCxtcGM1MjAwLW1zY2FuIjsKLQkJCWNlbGwtaW5kZXggPSA8MT47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MiAweDEyIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTggMD47CiAJCQlyZWcgPSA8MHg5ODAgMHg4MD47CiAJCX07CiAKIAkJZ3Bpb19zaW1wbGU6IGdwaW9AYjAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8iLCJmc2wsbXBjNTIwMC1ncGlvIjsKIAkJCXJlZyA9IDwweGIwMCAweDQwPjsKLQkJCWludGVycnVwdHMgPSA8MHgxIDB4NyAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwxIDcgMD47CiAJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJfTsKIAotCQlncGlvX3drdXA6IGdwaW8td2t1cEBjMDAgeworCQlncGlvX3drdXA6IGdwaW9AYzAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8td2t1cCIsImZzbCxtcGM1MjAwLWdwaW8td2t1cCI7CiAJCQlyZWcgPSA8MHhjMDAgMHg0MD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MSAweDggMHgwIDB4MCAweDMgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MSA4IDAgMCAzIDA+OwogCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CkBAIC0xODUsMjYgKzE2MiwyMiBAQAogCQlzcGlAZjAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNwaSIsImZzbCxtcGM1MjAwLXNwaSI7CiAJCQlyZWcgPSA8MHhmMDAgMHgyMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MiAweGQgMHgwIDB4MiAweGUgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MiAxMyAwIDIgMTQgMD47CiAJCX07CiAKIAkJdXNiQDEwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItb2hjaSIsImZzbCxtcGM1MjAwLW9oY2kiLCJvaGNpLWJlIjsKIAkJCXJlZyA9IDwweDEwMDAgMHhmZj47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MiAweDYgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MiA2IDA+OwogCQl9OwogCiAJCWRtYS1jb250cm9sbGVyQDEyMDAgewotCQkJZGV2aWNlX3R5cGUgPSAiZG1hLWNvbnRyb2xsZXIiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYmVzdGNvbW0iLCJmc2wsbXBjNTIwMC1iZXN0Y29tbSI7CiAJCQlyZWcgPSA8MHgxMjAwIDB4ODA+OwotCQkJaW50ZXJydXB0cyA9IDwweDMgMHgwIDB4MCAgMHgzIDB4MSAweDAgIDB4MyAweDIgMHgwICAweDMgMHgzIDB4MAotCQkJICAgICAgICAgICAgICAweDMgMHg0IDB4MCAgMHgzIDB4NSAweDAgIDB4MyAweDYgMHgwICAweDMgMHg3IDB4MAotCQkJICAgICAgICAgICAgICAweDMgMHg4IDB4MCAgMHgzIDB4OSAweDAgIDB4MyAweGEgMHgwICAweDMgMHhiIDB4MAotCQkJICAgICAgICAgICAgICAweDMgMHhjIDB4MCAgMHgzIDB4ZCAweDAgIDB4MyAweGUgMHgwICAweDMgMHhmIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDMgMCAwICAzIDEgMCAgMyAyIDAgIDMgMyAwCisJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCisJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyAxMCAwICAzIDExIDAKKwkJCSAgICAgICAgICAgICAgMyAxMiAwICAzIDEzIDAgIDMgMTQgMCAgMyAxNSAwPjsKIAkJfTsKIAogCQl4bGJAMWYwMCB7CkBAIC0yMTMsMjQgKzE4NiwxOSBAQAogCQl9OwogCiAJCWFjOTdAMjAwMCB7IC8qIFBTQzEgaW4gYWM5NyBtb2RlICovCi0JCQlkZXZpY2VfdHlwZSA9ICJzb3VuZCI7CiAJCQljb21wYXRpYmxlID0gIm1wYzUyMDBiLXBzYy1hYzk3IiwiZnNsLG1wYzUyMDBiLXBzYy1hYzk3IjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MHgyMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8MHgyIDB4MiAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwyIDEgMD47CiAJCX07CiAKIAkJLyogUFNDMiBwb3J0IGlzIHVzZWQgYnkgQ0FOMS8yICovCiAKIAkJc2VyaWFsQDI0MDAgeyAvKiBQU0MzIGluIFVBUlQgbW9kZSAqLwotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwotCQkJcG9ydC1udW1iZXIgPSA8MD47CiAJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJcmVnID0gPDB4MjQwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MiAweDMgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MiAzIDA+OwogCQl9OwogCiAJCS8qIFBTQzQgaXMgPz8/ICovCkBAIC0yMzgsNTUgKzIwNiw0NCBAQAogCQkvKiBQU0M1IGlzID8/PyAqLwogCiAJCXNlcmlhbEAyYzAwIHsgLyogUFNDNiBpbiBVQVJUIG1vZGUgKi8KLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKLQkJCXBvcnQtbnVtYmVyID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDw1PjsKIAkJCXJlZyA9IDwweDJjMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDwweDIgMHg0IDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDIgNCAwPjsKIAkJfTsKIAogCQlldGhlcm5ldEAzMDAwIHsKLQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZmVjIiwiZnNsLG1wYzUyMDAtZmVjIjsKIAkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwotCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAgMDAgMDAgMDAgMDAgMDBdOwotCQkJaW50ZXJydXB0cyA9IDwweDIgMHg1IDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MiA1IDA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCX07CiAKIAkJbWRpb0AzMDAwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwgImZzbCxtcGM1MjAwLW1kaW8iOwotCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CS8qIGZlYyByYW5nZSwgc2luY2Ugd2UgbmVlZCB0byBzZXR1cCBmZWMgaW50ZXJydXB0cyAqLwotCQkJaW50ZXJydXB0cyA9IDwweDIgMHg1IDB4MD47CS8qIHRoZXNlIGFyZSBmb3IgIm1paSBjb21tYW5kIGZpbmlzaGVkIiwgbm90IGxpbmsgY2hhbmdlcyAmIGNvLiAqLwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyIsImZzbCxtcGM1MjAwLW1kaW8iOworCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CS8vIGZlYyByYW5nZSwgc2luY2Ugd2UgbmVlZCB0byBzZXR1cCBmZWMgaW50ZXJydXB0cworCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47CS8vIHRoZXNlIGFyZSBmb3IgIm1paSBjb21tYW5kIGZpbmlzaGVkIiwgbm90IGxpbmsgY2hhbmdlcyAmIGNvLgogCi0JCQlwaHkwOmV0aGVybmV0LXBoeUAwIHsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJCXJlZyA9IDwweDA+OworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCXJlZyA9IDwwPjsKIAkJCX07CiAJCX07CiAKIAkJYXRhQDNhMDAgewotCQkJZGV2aWNlX3R5cGUgPSAiYXRhIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWF0YSIsImZzbCxtcGM1MjAwLWF0YSI7CiAJCQlyZWcgPSA8MHgzYTAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8MHgyIDB4NyAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwyIDcgMD47CiAJCX07CiAKIAkJaTJjQDNkMDAgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwotCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCXJlZyA9IDwweDNkMDAgMHg0MD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MiAweGYgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKIAkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKQEAgLTI5NCwxMCArMjUxLDggQEAKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKLQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwotCQkJaW50ZXJydXB0cyA9IDwweDIgMHgxMCAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwogCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJCXJ0Y0A1MSB7CiAJCQkJY29tcGF0aWJsZSA9ICJueHAscGNmODU2MyI7CkBAIC0zMDcsNyArMjYyLDcgQEAKIAkJfTsKIAogCQlzcmFtQDgwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItc3JhbSIsImZzbCxtcGM1MjAwLXNyYW0iLCJzcmFtIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNyYW0iLCJmc2wsbXBjNTIwMC1zcmFtIjsKIAkJCXJlZyA9IDwweDgwMDAgMHg0MDAwPjsKIAkJfTsKIApAQCAtMzQwLDIyICsyOTUsMjEgQEAKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcGNpIiwiZnNsLG1wYzUyMDAtcGNpIjsKIAkJcmVnID0gPDB4ZjAwMDBkMDAgMHgxMDA+OwotCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKLQkJaW50ZXJydXB0LW1hcCA9IDwweGMwMDAgMHgwIDB4MCAweDEgJm1wYzUyMDBfcGljIDB4MCAweDAgMHgzIC8qIDFzdCBzbG90ICovCi0JCQkJIDB4YzAwMCAweDAgMHgwIDB4MiAmbXBjNTIwMF9waWMgMHgxIDB4MSAweDMKLQkJCQkgMHhjMDAwIDB4MCAweDAgMHgzICZtcGM1MjAwX3BpYyAweDEgMHgyIDB4MwotCQkJCSAweGMwMDAgMHgwIDB4MCAweDQgJm1wYzUyMDBfcGljIDB4MSAweDMgMHgzCisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDB4YzAwMCAwIDAgMSAmbXBjNTIwMF9waWMgMCAwIDMgLy8gMXN0IHNsb3QKKwkJCQkgMHhjMDAwIDAgMCAyICZtcGM1MjAwX3BpYyAxIDEgMworCQkJCSAweGMwMDAgMCAwIDMgJm1wYzUyMDBfcGljIDEgMiAzCisJCQkJIDB4YzAwMCAwIDAgNCAmbXBjNTIwMF9waWMgMSAzIDMKIAotCQkJCSAweGM4MDAgMHgwIDB4MCAweDEgJm1wYzUyMDBfcGljIDB4MSAweDEgMHgzIC8qIDJuZCBzbG90ICovCi0JCQkJIDB4YzgwMCAweDAgMHgwIDB4MiAmbXBjNTIwMF9waWMgMHgxIDB4MiAweDMKLQkJCQkgMHhjODAwIDB4MCAweDAgMHgzICZtcGM1MjAwX3BpYyAweDEgMHgzIDB4MwotCQkJCSAweGM4MDAgMHgwIDB4MCAweDQgJm1wYzUyMDBfcGljIDB4MCAweDAgMHgzPjsKKwkJCQkgMHhjODAwIDAgMCAxICZtcGM1MjAwX3BpYyAxIDEgMyAvLyAybmQgc2xvdAorCQkJCSAweGM4MDAgMCAwIDIgJm1wYzUyMDBfcGljIDEgMiAzCisJCQkJIDB4YzgwMCAwIDAgMyAmbXBjNTIwMF9waWMgMSAzIDMKKwkJCQkgMHhjODAwIDAgMCA0ICZtcGM1MjAwX3BpYyAwIDAgMz47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLy8gRnJvbSBib290IGxvYWRlcgotCQlpbnRlcnJ1cHRzID0gPDB4MiAweDggMHgwIDB4MiAweDkgMHgwIDB4MiAweGEgMHgwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQlpbnRlcnJ1cHRzID0gPDIgOCAwIDIgOSAwIDIgMTAgMD47CiAJCWJ1cy1yYW5nZSA9IDwwIDA+OwotCQlyYW5nZXMgPSA8MHg0MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDIwMDAwMDAwCi0JCQkgIDB4MDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAweDAgMHgxMDAwMDAwMAotCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4YjAwMDAwMDAgMHgwIDB4MDEwMDAwMDA+OworCQlyYW5nZXMgPSA8MHg0MjAwMDAwMCAwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAwIDB4MjAwMDAwMDAKKwkJCSAgMHgwMjAwMDAwMCAwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhiMDAwMDAwMCAwIDB4MDEwMDAwMDA+OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcGNtMDMyLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzAwNDI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMi5kdHMKQEAgLTAsMCArMSwzOTIgQEAKKy8qCisgKiBwaHlDT1JFLU1QQzUyMDBCLUlPIChwY20wMzIpIGJvYXJkIERldmljZSBUcmVlIFNvdXJjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IFBlbmd1dHJvbml4CisgKiBTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+CisgKiBKdWVyZ2VuIEJlaXNlcnQgPGouYmVpc2VydEBwZW5ndXRyb25peC5kZT4KKyAqIFdvbGZyYW0gU2FuZyA8dy5zYW5nQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gInBoeXRlYyxwY20wMzIiOworCWNvbXBhdGlibGUgPSAicGh5dGVjLHBjbTAzMiI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlQb3dlclBDLDUyMDBAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJZC1jYWNoZS1zaXplID0gPDB4NDAwMD47CS8vIEwxLCAxNksKKwkJCWktY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkvLyBMMSwgMTZLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vIGZyb20gYm9vdGxvYWRlcgorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDgwMDAwMDA+OwkvLyAxMjhNQgorCX07CisKKwlzb2M1MjAwQGYwMDAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pbW1yIjsKKwkJcmFuZ2VzID0gPDAgMHhmMDAwMDAwMCAweDAwMDBjMDAwPjsKKwkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQlzeXN0ZW0tZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisKKwkJY2RtQDIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1jZG0iLCJmc2wsbXBjNTIwMC1jZG0iOworCQkJcmVnID0gPDB4MjAwIDB4Mzg+OworCQl9OworCisJCW1wYzUyMDBfcGljOiBpbnRlcnJ1cHQtY29udHJvbGxlckA1MDAgeworCQkJLy8gNTIwMCBpbnRlcnJ1cHRzIGFyZSBlbmNvZGVkIGludG8gdHdvIGxldmVsczsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBpYyIsImZzbCxtcGM1MjAwLXBpYyI7CisJCQlyZWcgPSA8MHg1MDAgMHg4MD47CisJCX07CisKKwkJdGltZXJANjAwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjAwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDkgMD47CisJCQlmc2wsaGFzLXdkdDsKKwkJfTsKKworCQl0aW1lckA2MTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MTAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTAgMD47CisJCX07CisKKwkJZ3B0MjogdGltZXJANjIwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYyMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMSAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDM6IHRpbWVyQDYzMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MzAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTIgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQ0OiB0aW1lckA2NDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjQwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEzIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0NTogdGltZXJANjUwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY1MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNCAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDY6IHRpbWVyQDY2MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NjAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTUgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQ3OiB0aW1lckA2NzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjcwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDE2IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJcnRjQDgwMCB7CS8vIFJlYWwgdGltZSBjbG9jaworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcnRjIiwiZnNsLG1wYzUyMDAtcnRjIjsKKwkJCXJlZyA9IDwweDgwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgNSAwIDEgNiAwPjsKKwkJfTsKKworCQljYW5AOTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1zY2FuIiwiZnNsLG1wYzUyMDAtbXNjYW4iOworCQkJaW50ZXJydXB0cyA9IDwyIDE3IDA+OworCQkJcmVnID0gPDB4OTAwIDB4ODA+OworCQl9OworCisJCWNhbkA5ODAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbXNjYW4iLCJmc2wsbXBjNTIwMC1tc2NhbiI7CisJCQlpbnRlcnJ1cHRzID0gPDIgMTggMD47CisJCQlyZWcgPSA8MHg5ODAgMHg4MD47CisJCX07CisKKwkJZ3Bpb19zaW1wbGU6IGdwaW9AYjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8iLCJmc2wsbXBjNTIwMC1ncGlvIjsKKwkJCXJlZyA9IDwweGIwMCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MSA3IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3Bpb193a3VwOiBncGlvQGMwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvLXdrdXAiLCJmc2wsbXBjNTIwMC1ncGlvLXdrdXAiOworCQkJcmVnID0gPDB4YzAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDggMCAwIDMgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlzcGlAZjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNwaSIsImZzbCxtcGM1MjAwLXNwaSI7CisJCQlyZWcgPSA8MHhmMDAgMHgyMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTMgMCAyIDE0IDA+OworCQl9OworCisJCXVzYkAxMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW9oY2kiLCJmc2wsbXBjNTIwMC1vaGNpIiwib2hjaS1iZSI7CisJCQlyZWcgPSA8MHgxMDAwIDB4ZmY+OworCQkJaW50ZXJydXB0cyA9IDwyIDYgMD47CisJCX07CisKKwkJZG1hLWNvbnRyb2xsZXJAMTIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1iZXN0Y29tbSIsImZzbCxtcGM1MjAwLWJlc3Rjb21tIjsKKwkJCXJlZyA9IDwweDEyMDAgMHg4MD47CisJCQlpbnRlcnJ1cHRzID0gPDMgMCAwICAzIDEgMCAgMyAyIDAgIDMgMyAwCisJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCisJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyAxMCAwICAzIDExIDAKKwkJCSAgICAgICAgICAgICAgMyAxMiAwICAzIDEzIDAgIDMgMTQgMCAgMyAxNSAwPjsKKwkJfTsKKworCQl4bGJAMWYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi14bGIiLCJmc2wsbXBjNTIwMC14bGIiOworCQkJcmVnID0gPDB4MWYwMCAweDEwMD47CisJCX07CisKKwkJYWM5N0AyMDAwIHsJLyogUFNDMSBpcyBhYzk3ICovCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtYWM5NyIsImZzbCxtcGM1MjAwLXBzYy1hYzk3IjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlyZWcgPSA8MHgyMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxIDA+OworCQl9OworCisJCS8qIFBTQzIgcG9ydCBpcyB1c2VkIGJ5IENBTjEvMiAqLworCisJCXNlcmlhbEAyNDAwIHsgLyogUFNDMyBpbiBVQVJUIG1vZGUgKi8KKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOworCQkJY2VsbC1pbmRleCA9IDwyPjsKKwkJCXJlZyA9IDwweDI0MDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDMgMD47CisJCX07CisKKwkJLyogUFNDNCBpcyA/Pz8gKi8KKworCQkvKiBQU0M1IGlzID8/PyAqLworCisJCXNlcmlhbEAyYzAwIHsgLyogUFNDNiBpbiBVQVJUIG1vZGUgKi8KKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOworCQkJY2VsbC1pbmRleCA9IDw1PjsKKwkJCXJlZyA9IDwweDJjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDQgMD47CisJCX07CisKKwkJZXRoZXJuZXRAMzAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCJmc2wsbXBjNTIwMC1mZWMiOworCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MiA1IDA+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisJCX07CisKKwkJbWRpb0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwiZnNsLG1wYzUyMDAtbWRpbyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsJLy8gZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzCisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsJLy8gdGhlc2UgYXJlIGZvciAibWlpIGNvbW1hbmQgZmluaXNoZWQiLCBub3QgbGluayBjaGFuZ2VzICYgY28uCisKKwkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQlyZWcgPSA8MD47CisJCQl9OworCQl9OworCisJCWF0YUAzYTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWF0YSIsImZzbCxtcGM1MjAwLWF0YSI7CisJCQlyZWcgPSA8MHgzYTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiA3IDA+OworCQl9OworCisJCWkyY0AzZDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDNkMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47CisJCQlmc2w1MjAwLWNsb2NraW5nOworCQl9OworCisJCWkyY0AzZDQwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDNkNDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47CisJCQlmc2w1MjAwLWNsb2NraW5nOworCQkJcnRjQDUxIHsKKwkJCQljb21wYXRpYmxlID0gIm54cCxwY2Y4NTYzIjsKKwkJCQlyZWcgPSA8MHg1MT47CisJCQl9OworCQkJZWVwcm9tQDUyIHsKKwkJCQljb21wYXRpYmxlID0gImF0MjQsMjRjMzIiOworCQkJCXJlZyA9IDwweDUyPjsKKwkJCX07CisJCX07CisKKwkJc3JhbUA4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNyYW0iLCJmc2wsbXBjNTIwMC1zcmFtIjsKKwkJCXJlZyA9IDwweDgwMDAgMHg0MDAwPjsKKwkJfTsKKwl9OworCisJcGNpQGYwMDAwZDAwIHsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wY2kiLCJmc2wsbXBjNTIwMC1wY2kiOworCQlyZWcgPSA8MHhmMDAwMGQwMCAweDEwMD47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDB4YzAwMCAwIDAgMSAmbXBjNTIwMF9waWMgMCAwIDMgLy8gMXN0IHNsb3QKKwkJCQkgMHhjMDAwIDAgMCAyICZtcGM1MjAwX3BpYyAxIDEgMworCQkJCSAweGMwMDAgMCAwIDMgJm1wYzUyMDBfcGljIDEgMiAzCisJCQkJIDB4YzAwMCAwIDAgNCAmbXBjNTIwMF9waWMgMSAzIDMKKworCQkJCSAweGM4MDAgMCAwIDEgJm1wYzUyMDBfcGljIDEgMSAzIC8vIDJuZCBzbG90CisJCQkJIDB4YzgwMCAwIDAgMiAmbXBjNTIwMF9waWMgMSAyIDMKKwkJCQkgMHhjODAwIDAgMCAzICZtcGM1MjAwX3BpYyAxIDMgMworCQkJCSAweGM4MDAgMCAwIDQgJm1wYzUyMDBfcGljIDAgMCAzPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvLyBGcm9tIGJvb3QgbG9hZGVyCisJCWludGVycnVwdHMgPSA8MiA4IDAgMiA5IDAgMiAxMCAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMD47CisJCXJhbmdlcyA9IDwweDQyMDAwMDAwIDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDAgMHgyMDAwMDAwMAorCQkJICAweDAyMDAwMDAwIDAgMHhhMDAwMDAwMCAweGEwMDAwMDAwIDAgMHgxMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGIwMDAwMDAwIDAgMHgwMTAwMDAwMD47CisJfTsKKworCWxvY2FsYnVzIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbHBiIiwiZnNsLG1wYzUyMDAtbHBiIiwic2ltcGxlLWJ1cyI7CisKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCXJhbmdlcyA9IDwwIDAgMHhmZTAwMDAwMCAweDAyMDAwMDAwCisJCQkgIDEgMCAweGZjMDAwMDAwIDB4MDIwMDAwMDAKKwkJCSAgMiAwIDB4ZmJlMDAwMDAgMHgwMDIwMDAwMAorCQkJICAzIDAgMHhmOWUwMDAwMCAweDAyMDAwMDAwCisJCQkgIDQgMCAweGY3ZTAwMDAwIDB4MDIwMDAwMDAKKwkJCSAgNSAwIDB4ZTYwMDAwMDAgMHgwMjAwMDAwMAorCQkJICA2IDAgMHhlODAwMDAwMCAweDAyMDAwMDAwCisJCQkgIDcgMCAweGVhMDAwMDAwIDB4MDIwMDAwMDA+OworCisJCWZsYXNoQDAsMCB7CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MCAwIDB4MDIwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDw0PjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJ1Ym9vdGwiOworCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAwNDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA0MDAwMCB7CisJCQkJbGFiZWwgPSAia2VybmVsIjsKKwkJCQlyZWcgPSA8MHgwMDA0MDAwMCAweDAwMWMwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMjAwMDAwIHsKKwkJCQlsYWJlbCA9ICJqZmZzMiI7CisJCQkJcmVnID0gPDB4MDAyMDAwMDAgMHgwMWQwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDFmMDAwMDAgeworCQkJCWxhYmVsID0gInVib290IjsKKwkJCQlyZWcgPSA8MHgwMWYwMDAwMCAweDAwMDQwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMWY0MDAwMCB7CisJCQkJbGFiZWwgPSAiZW52IjsKKwkJCQlyZWcgPSA8MHgwMWY0MDAwMCAweDAwMDQwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMWY4MDAwMCB7CisJCQkJbGFiZWwgPSAib2Z0cmVlIjsKKwkJCQlyZWcgPSA8MHgwMWY4MDAwMCAweDAwMDQwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMWZjMDAwMCB7CisJCQkJbGFiZWwgPSAic3BhY2UiOworCQkJCXJlZyA9IDwweDAxZmMwMDAwIDB4MDAwNDAwMDA+OworCQkJfTsKKwkJfTsKKworCQlzcmFtQDIsMCB7CisJCQljb21wYXRpYmxlID0gIm10ZC1yYW0iOworCQkJcmVnID0gPDIgMCAweDAwMjAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCX07CisKKyAgICAgICAgICAgICAgICAvKgorCQkgKiBleGFtcGxlIHNuaXBwZXRzIGZvciBGUEdBCisJCSAqCisJCSAqIGZwZ2FAMywwIHsKKwkJICogICAgICAgICBjb21wYXRpYmxlID0gImZwZ2FfZHJpdmVyIjsKKwkJICogICAgICAgICByZWcgPSA8MyAwIDB4MDIwMDAwMDA+OworCQkgKiAgICAgICAgIGJhbmstd2lkdGggPSA8ND47CisJCSAqIH07CisJCSAqCisJCSAqIGZwZ2FANCwwIHsKKwkJICogICAgICAgICBjb21wYXRpYmxlID0gImZwZ2FfZHJpdmVyIjsKKwkJICogICAgICAgICByZWcgPSA8NCAwIDB4MDIwMDAwMDA+OworCQkgKiAgICAgICAgIGJhbmstd2lkdGggPSA8ND47CisJCSAqIH07CisgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgICAgICAvKgorCQkgKiBleGFtcGxlIHNuaXBwZXRzIGZvciBmcmVlIGNoaXBzZWxlY3RzCisgICAgICAgICAgICAgICAgICoKKwkJICogZGV2aWNlQDUsMCB7CisJCSAqICAgICAgICAgY29tcGF0aWJsZSA9ICJjdXN0b21fZHJpdmVyIjsKKwkJICogICAgICAgICByZWcgPSA8NSAwIDB4MDIwMDAwMDA+OworCQkgKiB9OworICAgICAgICAgICAgICAgICAqCisJCSAqIGRldmljZUA2LDAgeworCQkgKiAgICAgICAgIGNvbXBhdGlibGUgPSAiY3VzdG9tX2RyaXZlciI7CisJCSAqICAgICAgICAgcmVnID0gPDYgMCAweDAyMDAwMDAwPjsKKwkJICogfTsKKyAgICAgICAgICAgICAgICAgKgorCQkgKiBkZXZpY2VANywwIHsKKwkJICogICAgICAgICBjb21wYXRpYmxlID0gImN1c3RvbV9kcml2ZXIiOworCQkgKiAgICAgICAgIHJlZyA9IDw3IDAgMHgwMjAwMDAwMD47CisJCSAqIH07CisgICAgICAgICAgICAgICAgICovCisJfTsKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9yZWR3b29kLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9yZWR3b29kLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDQwMmM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3JlZHdvb2QuZHRzCkBAIC0wLDAgKzEsMjQ0IEBACisvKgorICogRGV2aWNlIFRyZWUgU291cmNlIGZvciBBTUNDIFJlZHdvb2QoNDYwU1gpCisgKgorICogQ29weXJpZ2h0IDIwMDggQU1DQyA8dG1hcnJpQGFtY2MuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0CisgKiBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKy9kdHMtdjEvOworCisvIHsKKwkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKwltb2RlbCA9ICJhbWNjLHJlZHdvb2QiOworCWNvbXBhdGlibGUgPSAiYW1jYyxyZWR3b29kIjsKKwlkY3ItcGFyZW50ID0gPCZ7L2NwdXMvY3B1QDB9PjsKKworCWFsaWFzZXMgeworCQlldGhlcm5ldDAgPSAmRU1BQzA7CisJCXNlcmlhbDAgPSAmVUFSVDA7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCW1vZGVsID0gIlBvd2VyUEMsNDYwU1giOworCQkJcmVnID0gPDB4MDAwMDAwMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtc2l6ZSA9IDwzMjc2OD47CisJCQlkLWNhY2hlLXNpemUgPSA8MzI3Njg+OworCQkJZGNyLWNvbnRyb2xsZXI7CisJCQlkY3ItYWNjZXNzLW1ldGhvZCA9ICJuYXRpdmUiOworCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAwMDAwMDAwIDB4MDAwMDAwMDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJfTsKKworCVVJQzA6IGludGVycnVwdC1jb250cm9sbGVyMCB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHVpYy00NjBzeCIsImlibSx1aWMiOworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJY2VsbC1pbmRleCA9IDwwPjsKKwkJZGNyLXJlZyA9IDwweDBjMCAweDAwOT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJVUlDMTogaW50ZXJydXB0LWNvbnRyb2xsZXIxIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sdWljLTQ2MHN4IiwiaWJtLHVpYyI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQljZWxsLWluZGV4ID0gPDE+OworCQlkY3ItcmVnID0gPDB4MGQwIDB4MDA5PjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHRzID0gPDB4MWUgMHg0IDB4MWYgMHg0PjsgLyogY2FzY2FkZSAqLworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwl9OworCisJVUlDMjogaW50ZXJydXB0LWNvbnRyb2xsZXIyIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sdWljLTQ2MHN4IiwiaWJtLHVpYyI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQljZWxsLWluZGV4ID0gPDI+OworCQlkY3ItcmVnID0gPDB4MGUwIDB4MDA5PjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHRzID0gPDB4YSAweDQgMHhiIDB4ND47IC8qIGNhc2NhZGUgKi8KKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJfTsKKworCVVJQzM6IGludGVycnVwdC1jb250cm9sbGVyMyB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHVpYy00NjBzeCIsImlibSx1aWMiOworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJY2VsbC1pbmRleCA9IDwzPjsKKwkJZGNyLXJlZyA9IDwweDBmMCAweDAwOT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJaW50ZXJydXB0cyA9IDwweDEwIDB4NCAweDExIDB4ND47IC8qIGNhc2NhZGUgKi8KKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJfTsKKworCVNEUjA6IHNkciB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHNkci00NjBzeCI7CisJCWRjci1yZWcgPSA8MHgwMGUgMHgwMDI+OworCX07CisKKwlDUFIwOiBjcHIgeworCQljb21wYXRpYmxlID0gImlibSxjcHItNDYwc3giOworCQlkY3ItcmVnID0gPDB4MDBjIDB4MDAyPjsKKwl9OworCisJcGxiIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0scGxiLTQ2MHN4IiwgImlibSxwbGI0IjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyYW5nZXM7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCisJCVNEUkFNMDogc2RyYW0geworCQkJY29tcGF0aWJsZSA9ICJpYm0sc2RyYW0tNDYwc3giLCAiaWJtLHNkcmFtLTQwNWdwIjsKKwkJCWRjci1yZWcgPSA8MHgwMTAgMHgwMDI+OworCQl9OworCisJCU1BTDA6IG1jbWFsIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLG1jbWFsLTQ2MHN4IiwgImlibSxtY21hbDIiOworCQkJZGNyLXJlZyA9IDwweDE4MCAweDYyPjsKKwkJCW51bS10eC1jaGFucyA9IDw0PjsKKwkJCW51bS1yeC1jaGFucyA9IDwzMj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CisJCQlpbnRlcnJ1cHRzID0gPAkvKlRYRU9CKi8gMHg2IDB4NAorCQkJCQkvKlJYRU9CKi8gMHg3IDB4NAorCQkJCQkvKlNFUlIqLyAgMHgxIDB4NAorCQkJCQkvKlRYREUqLyAgMHgyIDB4NAorCQkJCQkvKlJYREUqLyAgMHgzIDB4NAorCQkJCQkvKkNPQUwgVFgwKi8gMHgxOCAweDIKKwkJCQkJLypDT0FMIFRYMSovIDB4MTkgMHgyCisJCQkJCS8qQ09BTCBUWDIqLyAweDFhIDB4MgorCQkJCQkvKkNPQUwgVFgzKi8gMHgxYiAweDIKKwkJCQkJLypDT0FMIFJYMCovIDB4MWMgMHgyCisJCQkJCS8qQ09BTCBSWDEqLyAweDFkIDB4MgorCQkJCQkvKkNPQUwgUlgyKi8gMHgxZSAweDIKKwkJCQkJLypDT0FMIFJYMyovIDB4MWYgMHgyPjsKKwkJfTsKKworCQlQT0IwOiBvcGIgeworCQkJY29tcGF0aWJsZSA9ICJpYm0sb3BiLTQ2MHN4IiwgImlibSxvcGIiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXJhbmdlcyA9IDwweGIwMDAwMDAwIDB4MDAwMDAwMDQgMHhiMDAwMDAwMCAweDUwMDAwMDAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCisJCQlFQkMwOiBlYmMgeworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGViYy00NjBzeCIsICJpYm0sZWJjIjsKKwkJCQlkY3ItcmVnID0gPDB4MDEyIDB4MDAyPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQkvKiByYW5nZXMgcHJvcGVydHkgaXMgc3VwcGxpZWQgYnkgVS1Cb290ICovCisJCQkJaW50ZXJydXB0cyA9IDwweDYgMHg0PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKworCQkJCW5vcl9mbGFzaEAwLDAgeworCQkJCQljb21wYXRpYmxlID0gImFtZCxzMjlnbDUxMm4iLCAiY2ZpLWZsYXNoIjsKKwkJCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCQkJcmVnID0gPDB4MDAwMDAwMCAweDAwMDAwMDAwIDB4MDQwMDAwMDA+OworCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJCXBhcnRpdGlvbkAwIHsKKwkJCQkJCWxhYmVsID0gImtlcm5lbCI7CisJCQkJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAwMWUwMDAwPjsKKwkJCQkJfTsKKwkJCQkJcGFydGl0aW9uQDFlMDAwMCB7CisJCQkJCQlsYWJlbCA9ICJkdGIiOworCQkJCQkJcmVnID0gPDB4MDAxZTAwMDAgMHgwMDAyMDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkAyMDAwMDAgeworCQkJCQkJbGFiZWwgPSAicmFtZGlzayI7CisJCQkJCQlyZWcgPSA8MHgwMDIwMDAwMCAweDAxNDAwMDAwPjsKKwkJCQkJfTsKKwkJCQkJcGFydGl0aW9uQDE2MDAwMDAgeworCQkJCQkJbGFiZWwgPSAiamZmczIiOworCQkJCQkJcmVnID0gPDB4MDE2MDAwMDAgMHgwMDQwMDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkAxYTAwMDAwIHsKKwkJCQkJCWxhYmVsID0gInVzZXIiOworCQkJCQkJcmVnID0gPDB4MDFhMDAwMDAgMHgwMjU2MDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkAzZjYwMDAwIHsKKwkJCQkJCWxhYmVsID0gImVudiI7CisJCQkJCQlyZWcgPSA8MHgwM2Y2MDAwMCAweDAwMDQwMDAwPjsKKwkJCQkJfTsKKwkJCQkJcGFydGl0aW9uQDNmYTAwMDAgeworCQkJCQkJbGFiZWwgPSAidS1ib290IjsKKwkJCQkJCXJlZyA9IDwweDAzZmEwMDAwIDB4MDAwNjAwMDA+OworCQkJCQl9OworCQkJCX07CisJCQl9OworCisJCQlVQVJUMDogc2VyaWFsQGVmNjAwMjAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQkJcmVnID0gPDB4ZWY2MDAyMDAgMHgwMDAwMDAwOD47CisJCQkJdmlydHVhbC1yZWcgPSA8MHhlZjYwMDIwMD47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJY3VycmVudC1zcGVlZCA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCQkJCWludGVycnVwdHMgPSA8MHgwIDB4ND47CisJCQl9OworCisJCQlSR01JSTA6IGVtYWMtcmdtaWlAZWY2MDA5MDAgeworCQkJCWNvbXBhdGlibGUgPSAiaWJtLHJnbWlpLTQ2MHN4IiwgImlibSxyZ21paSI7CisJCQkJcmVnID0gPDB4ZWY2MDA5MDAgMHgwMDAwMDAwOD47CisJCQl9OworCisJCQlFTUFDMDogZXRoZXJuZXRAZWY2MDBhMDAgeworCQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJCWNvbXBhdGlibGUgPSAiaWJtLGVtYWMtNDYwc3giLCAiaWJtLGVtYWM0IjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZFTUFDMD47CisJCQkJaW50ZXJydXB0cyA9IDwweDAgMHgxPjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWludGVycnVwdC1tYXAgPSA8LypTdGF0dXMqLyAweDAgJlVJQzAgMHgxMyAweDQKKwkJCQkJCSAvKldha2UqLyAgIDB4MSAmVUlDMiAweDFkIDB4ND47CisJCQkJcmVnID0gPDB4ZWY2MDBhMDAgMHgwMDAwMDA3MD47CisJCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbMDAwMDAwMDAwMDAwXTsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCW1hbC1kZXZpY2UgPSA8Jk1BTDA+OworCQkJCW1hbC10eC1jaGFubmVsID0gPDA+OworCQkJCW1hbC1yeC1jaGFubmVsID0gPDA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJbWF4LWZyYW1lLXNpemUgPSA8OTAwMD47CisJCQkJcngtZmlmby1zaXplID0gPDQwOTY+OworCQkJCXR4LWZpZm8tc2l6ZSA9IDwyMDQ4PjsKKwkJCQlwaHktbW9kZSA9ICJyZ21paSI7CisJCQkJcGh5LW1hcCA9IDwweDAwMDAwMDAwPjsKKwkJCQlyZ21paS1kZXZpY2UgPSA8JlJHTUlJMD47CisJCQkJcmdtaWktY2hhbm5lbCA9IDwwPjsKKwkJCQloYXMtaW52ZXJ0ZWQtc3RhY3Itb2M7CisJCQkJaGFzLW5ldy1zdGFjci1zdGFvcGM7CisJCQl9OworCisJCX07CisKKwl9OworCWNob3NlbiB7CisJCWxpbnV4LHN0ZG91dC1wYXRoID0gIi9wbGIvb3BiL3NlcmlhbEBlZjYwMDIwMCI7CisJfTsKKworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4MzQ5LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4MzQ5LmR0cwppbmRleCA4ZDM2NWE1Li5hMzZkYmJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODM0OS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzgzNDkuZHRzCkBAIC0xNTksNjggKzE1OSw3NiBAQAogCQkJcGh5X3R5cGUgPSAidWxwaSI7CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMTkgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MjAgMHg4PjsKLQkJCQlyZWcgPSA8MHgxOT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMWEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MjEgMHg4PjsKLQkJCQlyZWcgPSA8MHgxYT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMyIDB4OCAzMyAweDggMzQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MD47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAxOSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDIwIDB4OD47CisJCQkJCXJlZyA9IDwweDE5PjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDFhIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MjEgMHg4PjsKKwkJCQkJcmVnID0gPDB4MWE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAweDggMzYgMHg4IDM3IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CiAJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NTQ4LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NTQ4LmR0cwppbmRleCAyYmFmNGE1Li45YzUwNzlmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODU0OC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg1NDguZHRzCkBAIC0yMzQsNjYgKzIzNCw3MiBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTA6IGV0aGVybmV0LXBoeUAxOSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwweDYgMHgxPjsKLQkJCQlyZWcgPSA8MHgxOT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMWEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MHg3IDB4MT47Ci0JCQkJcmVnID0gPDB4MWE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MHgxZCAweDIgMHgxZSAweDIgMHgyMiAweDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMTkgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDYgMHgxPjsKKwkJCQkJcmVnID0gPDB4MTk+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDFhIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MHg3IDB4MT47CisJCQkJCXJlZyA9IDwweDFhPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwweDIzIDB4MiAweDI0IDB4MiAweDI4IDB4Mj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg1NjAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg1NjAuZHRzCmluZGV4IDAxNTQyZjcuLmI3NzI0MDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NTYwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODU2MC5kdHMKQEAgLTEzOSw3NyArMTM5LDgzIEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQkJCXBoeTA6IGV0aGVybmV0LXBoeUAxOSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwweDYgMHgxPjsKLQkJCQlyZWcgPSA8MHgxOT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMWEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MHg3IDB4MT47Ci0JCQkJcmVnID0gPDB4MWE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDFiIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDB4OCAweDE+OwotCQkJCXJlZyA9IDwweDFiPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAxYyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwweDggMHgxPjsKLQkJCQlyZWcgPSA8MHgxYz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDB4MWQgMHgyIDB4MWUgMHgyIDB4MjIgMHgyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAxOSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDB4NiAweDE+OworCQkJCQlyZWcgPSA8MHgxOT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMWEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDcgMHgxPjsKKwkJCQkJcmVnID0gPDB4MWE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDFiIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MHg4IDB4MT47CisJCQkJCXJlZyA9IDwweDFiPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAxYyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDB4OCAweDE+OworCQkJCQlyZWcgPSA8MHgxYz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwweDIzIDB4MiAweDI0IDB4MiAweDI4IDB4Mj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJbXBpYzogcGljQDQwMDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NjQxZC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODY0MWQuZHRzCmluZGV4IDM2ZGI5ODEuLmUzZTkxNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NjQxZC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg2NDFkLmR0cwpAQCAtMTkyLDEzMiArMTkyLDE0NCBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTA6IGV0aGVybmV0LXBoeUAxZiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8MHgxZj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8MD47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjY1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI2NTIwIDB4MjA+OwotCi0JCQl0YmkyOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjc1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI3NTIwIDB4MjA+OwotCi0JCQl0YmkzOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDFmIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwweDFmPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwwPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQyOiBldGhlcm5ldEAyNjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMxIDIgMzIgMiAzMyAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMj47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTI6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQzOiBldGhlcm5ldEAyNzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjcwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNzAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM3IDIgMzggMiAzOSAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTM6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zb2NyYXRlcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc29jcmF0ZXMuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZDBmYzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc29jcmF0ZXMuZHRzCkBAIC0wLDAgKzEsMzM4IEBACisvKgorICogRGV2aWNlIFRyZWUgU291cmNlIGZvciB0aGUgU29jcmF0ZXMgYm9hcmQgKE1QQzg1NDQpLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBFbWNyYWZ0IFN5c3RlbXMuCisgKiBTZXJnZWkgUG9zZWxlbm92LCA8c3Bvc2VsZW5vdkBlbWNyYWZ0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJhYmIsc29jcmF0ZXMiOworCWNvbXBhdGlibGUgPSAiYWJiLHNvY3JhdGVzIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKworCWFsaWFzZXMgeworCQlldGhlcm5ldDAgPSAmZW5ldDA7CisJCWV0aGVybmV0MSA9ICZlbmV0MTsKKwkJc2VyaWFsMCA9ICZzZXJpYWwwOworCQlzZXJpYWwxID0gJnNlcmlhbDE7CisJCXBjaTAgPSAmcGNpMDsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlQb3dlclBDLDg1NDRAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJZC1jYWNoZS1zaXplID0gPDB4ODAwMD47CS8vIEwxLCAzMksKKwkJCWktY2FjaGUtc2l6ZSA9IDwweDgwMDA+OwkvLyBMMSwgMzJLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAwMDAwMDAwPjsJLy8gRmlsbGVkIGluIGJ5IFUtQm9vdAorCX07CisKKwlzb2M4NTQ0QGUwMDAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCXJhbmdlcyA9IDwweDAwMDAwMDAwIDB4ZTAwMDAwMDAgMHgwMDEwMDAwMD47CisJCXJlZyA9IDwweGUwMDAwMDAwIDB4MDAwMDEwMDA+OwkvLyBDQ1NSQkFSIDFNCisJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGaWxsZWQgaW4gYnkgVS1Cb290CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDQtaW1tciIsICJzaW1wbGUtYnVzIjsKKworCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDQtbWVtb3J5LWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDB4MjAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDE4IDI+OworCQl9OworCisJCUwyOiBsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDQtbDItY2FjaGUtY29udHJvbGxlciI7CisJCQlyZWcgPSA8MHgyMDAwMCAweDEwMDA+OworCQkJY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWNhY2hlLXNpemUgPSA8MHg0MDAwMD47CS8vIEwyLCAyNTZLCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MTYgMj47CisJCX07CisKKwkJaTJjQDMwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlkZnNycjsKKworCQkJZHR0QDI4IHsKKwkJCQljb21wYXRpYmxlID0gIndpbmJvbmQsdzgzNzgyZCI7CisJCQkJcmVnID0gPDB4Mjg+OworCQkJfTsKKwkJCXJ0Y0AzMiB7CisJCQkJY29tcGF0aWJsZSA9ICJlcHNvbixyeDgwMjUiOworCQkJCXJlZyA9IDwweDMyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDcgMT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQl9OworCQkJZHR0QDRjIHsKKwkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczc1IjsKKwkJCQlyZWcgPSA8MHg0Yz47CisJCQl9OworCQkJdHNANGEgeworCQkJCWNvbXBhdGlibGUgPSAidGksdHNjMjAwMyI7CisJCQkJcmVnID0gPDB4NGE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCX07CisJCX07CisKKwkJaTJjQDMxMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlkZnNycjsKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKwkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MCAxPjsKKwkJCQkJcmVnID0gPDA+OworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwwIDE+OworCQkJCQlyZWcgPSA8MT47CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCX07CisJCQl9OworCQl9OworCisJCWVuZXQxOiBldGhlcm5ldEAyNjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjYwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCX07CisJCQl9OworCQl9OworCisJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ1MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCXNlcmlhbDE6IHNlcmlhbEA0NjAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ2MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDw0MiAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgewkvL2dsb2JhbCB1dGlsaXRpZXMgYmxvY2sKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDgtZ3V0cyI7CisJCQlyZWcgPSA8MHhlMDAwMCAweDEwMDA+OworCQkJZnNsLGhhcy1yc3RjcjsKKwkJfTsKKworCQltcGljOiBwaWNANDAwMDAgeworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQlyZWcgPSA8MHg0MDAwMCAweDQwMDAwPjsKKwkJCWNvbXBhdGlibGUgPSAiY2hycCxvcGVuLXBpYyI7CisJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CisJCX07CisJfTsKKworCisJbG9jYWxidXMgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ0LWxvY2FsYnVzIiwKKwkJICAgICAgICAgICAgICJmc2wscHEzLWxvY2FsYnVzIiwKKwkJCSAgICAgInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJlZyA9IDwweGUwMDA1MDAwIDB4NDA+OworCisJCXJhbmdlcyA9IDwwIDAgMHhmYzAwMDAwMCAweDA0MDAwMDAwCisJCQkgIDIgMCAweGM4MDAwMDAwIDB4MDQwMDAwMDAKKwkJCSAgMyAwIDB4YzAwMDAwMDAgMHgwMDEwMDAwMAorCQkJPjsgLyogT3ZlcndyaXR0ZW4gYnkgVS1Cb290ICovCisKKwkJbm9yX2ZsYXNoQDAsMCB7CisJCQljb21wYXRpYmxlID0gImFtZCxzMjlnbDI1Nm4iLCAiY2ZpLWZsYXNoIjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlyZWcgPSA8MHgwIDB4MDAwMDAwIDB4NDAwMDAwMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gImtlcm5lbCI7CisJCQkJcmVnID0gPDB4MCAweDFlMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJCXBhcnRpdGlvbkAxZTAwMDAgeworCQkJCWxhYmVsID0gImR0YiI7CisJCQkJcmVnID0gPDB4MWUwMDAwIDB4MjAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAyMDAwMDAgeworCQkJCWxhYmVsID0gInJvb3QiOworCQkJCXJlZyA9IDwweDIwMDAwMCAweDIwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDQwMDAwMCB7CisJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJcmVnID0gPDB4NDAwMDAwIDB4M2I4MDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDNmODAwMDAgeworCQkJCWxhYmVsID0gImVudiI7CisJCQkJcmVnID0gPDB4M2Y4MDAwMCAweDQwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQkJcGFydGl0aW9uQDNmYzAwMDAgeworCQkJCWxhYmVsID0gInUtYm9vdCI7CisJCQkJcmVnID0gPDB4M2ZjMDAwMCAweDQwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQl9OworCisJCWRpc3BsYXlAMiwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnVqaXRzdSxsaW1lIjsKKwkJCXJlZyA9IDwyIDB4MCAweDQwMDAwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDYgMT47CisJCX07CisKKwkJZnBnYV9waWM6IGZwZ2EtcGljQDMsMTAgeworCQkJY29tcGF0aWJsZSA9ICJhYmIsc29jcmF0ZXMtZnBnYS1waWMiOworCQkJcmVnID0gPDMgMHgxMCAweDEwPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJLyogSVJRcyAyLCAxMCwgMTEsIGFjdGl2ZSBsb3csIGxldmVsLXNlbnNpdGl2ZSAqLworCQkJaW50ZXJydXB0cyA9IDwyIDEgMTAgMSAxMSAxPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJfTsKKworCQlzcGlAMyw2MCB7CisJCQljb21wYXRpYmxlID0gImFiYixzb2NyYXRlcy1zcGkiOworCQkJcmVnID0gPDMgMHg2MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8OCA0IDA+OwkvLyBudW1iZXIsIHR5cGUsIHJvdXRpbmcKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmZwZ2FfcGljPjsKKwkJfTsKKworCQluYW5kQDMsNzAgeworCQkJY29tcGF0aWJsZSA9ICJhYmIsc29jcmF0ZXMtbmFuZCI7CisJCQlyZWcgPSA8MyAweDcwIDB4MDQ+OworCQkJYmFuay13aWR0aCA9IDwxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlkYXRhQDAgeworCQkJCWxhYmVsID0gImRhdGEiOworCQkJCXJlZyA9IDwweDAgMHg0MDAwMDAwMD47CisJCQl9OworCQl9OworCisJCWNhbkAzLDEwMCB7CisJCQljb21wYXRpYmxlID0gInBoaWxpcHMsc2phMTAwMCI7CisJCQlyZWcgPSA8MyAweDEwMCAweDgwPjsKKwkJCWludGVycnVwdHMgPSA8MiA4IDE+OwkvLyBudW1iZXIsIHR5cGUsIHJvdXRpbmcKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmZwZ2FfcGljPjsKKwkJfTsKKwl9OworCisJcGNpMDogcGNpQGUwMDA4MDAwIHsKKwkJY2VsbC1pbmRleCA9IDwwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQwLXBjaSI7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCXJlZyA9IDwweGUwMDA4MDAwIDB4MTAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjY2NjY2Nj47CisKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkJLyogSURTRUwgMHgxMSAqLworCQkJCSAweDg4MDAgMHgwIDB4MCAxICZtcGljIDUgMQorCQkJCS8qIElEU0VMIDB4MTIgKi8KKwkJCQkgMHg5MDAwIDB4MCAweDAgMSAmbXBpYyA0IDE+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDwyNCAyPjsKKwkJYnVzLXJhbmdlID0gPDB4MCAweDA+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDIwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhlMjAwMDAwMCAweDAgMHgwMTAwMDAwMD47CisJfTsKKworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zdHhfZ3AzXzg1NjAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3N0eF9ncDNfODU2MC5kdHMKaW5kZXggZmZmMzNmZS4uOGIxNzM5NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3N0eF9ncDNfODU2MC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3N0eF9ncDNfODU2MC5kdHMKQEAgLTEyNCw2NiArMTI0LDcyIEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSA0PjsKLQkJCQlyZWcgPSA8Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHk0OiBldGhlcm5ldC1waHlANCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw1IDQ+OwotCQkJCXJlZyA9IDw0PjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDUgND47CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTQ6IGV0aGVybmV0LXBoeUA0IHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NSA0PjsKKwkJCQkJcmVnID0gPDQ+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTQ+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCW1waWM6IHBpY0A0MDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtNTIwMC5kdHMKaW5kZXggOTA2MzAyZS4uYzk1OTBiNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTUyMDAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW01MjAwLmR0cwpAQCAtMTcsNiArMTcsNyBAQAogCWNvbXBhdGlibGUgPSAidHFjLHRxbTUyMDAiOwogCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCSNzaXplLWNlbGxzID0gPDE+OworCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTY2LDM2ICs2NywzMyBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjAwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDkgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlmc2wsaGFzLXdkdDsKIAkJfTsKIAogCQljYW5AOTAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtbXNjYW4iOwogCQkJaW50ZXJydXB0cyA9IDwyIDE3IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcmVnID0gPDB4OTAwIDB4ODA+OwogCQl9OwogCiAJCWNhbkA5ODAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1tc2NhbiI7CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTggMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlyZWcgPSA8MHg5ODAgMHg4MD47CiAJCX07CiAKLQkJZ3Bpb0BiMDAgeworCQlncGlvX3NpbXBsZTogZ3Bpb0BiMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncGlvIjsKIAkJCXJlZyA9IDwweGIwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MSA3IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CiAKIAkJdXNiQDEwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1vaGNpIiwib2hjaS1iZSI7CiAJCQlyZWcgPSA8MHgxMDAwIDB4ZmY+OwogCQkJaW50ZXJydXB0cyA9IDwyIDYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJZG1hLWNvbnRyb2xsZXJAMTIwMCB7CkBAIC0xMDUsNyArMTAzLDYgQEAKIAkJCSAgICAgICAgICAgICAgMyA0IDAgIDMgNSAwICAzIDYgMCAgMyA3IDAKIAkJCSAgICAgICAgICAgICAgMyA4IDAgIDMgOSAwICAzIDEwIDAgIDMgMTEgMAogCQkJICAgICAgICAgICAgICAzIDEyIDAgIDMgMTMgMCAgMyAxNCAwICAzIDE1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXhsYkAxZjAwIHsKQEAgLTExNCwzOSArMTExLDI4IEBACiAJCX07CiAKIAkJc2VyaWFsQDIwMDAgewkJLy8gUFNDMQotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwotCQkJcG9ydC1udW1iZXIgPSA8MD47ICAvLyBMb2dpY2FsIHBvcnQgYXNzaWdubWVudAogCQkJcmVnID0gPDB4MjAwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlzZXJpYWxAMjIwMCB7CQkvLyBQU0MyCi0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1wc2MtdWFydCI7Ci0JCQlwb3J0LW51bWJlciA9IDwxPjsgIC8vIExvZ2ljYWwgcG9ydCBhc3NpZ25tZW50CiAJCQlyZWcgPSA8MHgyMjAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiAyIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXNlcmlhbEAyNDAwIHsJCS8vIFBTQzMKLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKLQkJCXBvcnQtbnVtYmVyID0gPDI+OyAgLy8gTG9naWNhbCBwb3J0IGFzc2lnbm1lbnQKIAkJCXJlZyA9IDwweDI0MDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDMgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJZXRoZXJuZXRAMzAwMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZmVjIjsKIAkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQl9OwogCkBAIC0xNTYsMTAgKzE0Miw4IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLW1kaW8iOwogCQkJcmVnID0gPDB4MzAwMCAweDQwMD47ICAgICAgIC8vIGZlYyByYW5nZSwgc2luY2Ugd2UgbmVlZCB0byBzZXR1cCBmZWMgaW50ZXJydXB0cwogCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47ICAgLy8gdGhlc2UgYXJlIGZvciAibWlpIGNvbW1hbmQgZmluaXNoZWQiLCBub3QgbGluayBjaGFuZ2VzICYgY28uCi0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAKIAkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJCXJlZyA9IDwwPjsKIAkJCX07CiAJCX07CkBAIC0xNjgsNyArMTUyLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtYXRhIjsKIAkJCXJlZyA9IDwweDNhMDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJaTJjQDNkNDAgewpAQCAtMTc3LDcgKzE2MCw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCWZzbDUyMDAtY2xvY2tpbmc7CiAKIAkJCSBydGNANjggewpAQCAtMTkyLDkgKzE3NCw4IEBACiAJCX07CiAJfTsKIAotCWxwYiB7Ci0JCW1vZGVsID0gImZzbCxscGIiOwotCQljb21wYXRpYmxlID0gImZzbCxscGIiOworCWxvY2FsYnVzIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1scGIiLCJzaW1wbGUtYnVzIjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CiAJCSNzaXplLWNlbGxzID0gPDE+OwogCQlyYW5nZXMgPSA8MCAwIDB4ZmMwMDAwMDAgMHgwMjAwMDAwMD47CkBAIC0yMjMsNyArMjA0LDYgQEAKIAkJCQkgMHhjMDAwIDAgMCA0ICZtcGM1MjAwX3BpYyAwIDAgMz47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLy8gRnJvbSBib290IGxvYWRlcgogCQlpbnRlcnJ1cHRzID0gPDIgOCAwIDIgOSAwIDIgMTAgMD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJYnVzLXJhbmdlID0gPDAgMD47CiAJCXJhbmdlcyA9IDwweDQyMDAwMDAwIDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDAgMHgxMDAwMDAwMAogCQkJICAweDAyMDAwMDAwIDAgMHg5MDAwMDAwMCAweDkwMDAwMDAwIDAgMHgxMDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDAuZHRzCmluZGV4IGE2OTNmMDEuLmFjOTQxM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0MC5kdHMKQEAgLTg0LDYgKzg0LDExIEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWRmc3JyOwogCisJCQlkdHRANTAgeworCQkJCWNvbXBhdGlibGUgPSAibmF0aW9uYWwsbG03NSI7CisJCQkJcmVnID0gPDB4NTA+OworCQkJfTsKKwogCQkJcnRjQDY4IHsKIAkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzciOwogCQkJCXJlZyA9IDwweDY4PjsKQEAgLTEzMSw5NCArMTM2LDEwMyBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNjUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjY1MjAgMHgyMD47Ci0KLQkJCXRiaTI6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIkZFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDQxIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkyOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0MS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0MS5kdHMKaW5kZXggOWUzZjVmMGQuLmM3MWJiNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQxLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0MS5kdHMKQEAgLTgzLDYgKzgzLDExIEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWRmc3JyOwogCisJCQlkdHRANTAgeworCQkJCWNvbXBhdGlibGUgPSAibmF0aW9uYWwsbG03NSI7CisJCQkJcmVnID0gPDB4NTA+OworCQkJfTsKKwogCQkJcnRjQDY4IHsKIAkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzciOwogCQkJCXJlZyA9IDwweDY4PjsKQEAgLTEzMCw3MiArMTM1LDc4IEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0OC1iaWdmbGFzaC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0OC1iaWdmbGFzaC5kdHMKaW5kZXggMTUwODZlYi4uMjhiMWE5NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDgtYmlnZmxhc2guZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQ4LWJpZ2ZsYXNoLmR0cwpAQCAtODUsNiArODUsMTEgQEAKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJZGZzcnI7CiAKKwkJCWR0dEA1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJuYXRpb25hbCxsbTc1IjsKKwkJCQlyZWcgPSA8MHg1MD47CisJCQl9OworCiAJCQlydGNANjggewogCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzNyI7CiAJCQkJcmVnID0gPDB4Njg+OwpAQCAtMTQzLDEzNCArMTQ4LDE0NiBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTQ6IGV0aGVybmV0LXBoeUA0IHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDQ+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5NTogZXRoZXJuZXQtcGh5QDUgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8NT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjY1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI2NTIwIDB4MjA+OwotCi0JCQl0YmkyOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjc1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI3NTIwIDB4MjA+OwotCi0JCQl0YmkzOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTQ6IGV0aGVybmV0LXBoeUA0IHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDQ+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5NTogZXRoZXJuZXQtcGh5QDUgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8NT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQyOiBldGhlcm5ldEAyNjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjYwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTI+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMjogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDM6IGV0aGVybmV0QDI3MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjcwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNzAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM3IDIgMzggMiAzOSAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHk0PjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkzOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CkBAIC0zNjUsMTQgKzM4MiwxNCBAQAogCQljYW4wQDIsMCB7CiAJCQljb21wYXRpYmxlID0gImludGVsLDgyNTI3IjsgLy8gQm9zY2ggQ0M3NzAKIAkJCXJlZyA9IDwyIDB4MCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQgMD47CisJCQlpbnRlcnJ1cHRzID0gPDQgMT47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIAogCQljYW4xQDIsMTAwIHsKIAkJCWNvbXBhdGlibGUgPSAiaW50ZWwsODI1MjciOyAvLyBCb3NjaCBDQzc3MAogCQkJcmVnID0gPDIgMHgxMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0IDA+OworCQkJaW50ZXJydXB0cyA9IDw0IDE+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQ4LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQ4LmR0cwppbmRleCBiN2I2NWY1Li44MjZmYjYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0OC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDguZHRzCkBAIC04NSw2ICs4NSwxMSBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlkZnNycjsKIAorCQkJZHR0QDUwIHsKKwkJCQljb21wYXRpYmxlID0gIm5hdGlvbmFsLGxtNzUiOworCQkJCXJlZyA9IDwweDUwPjsKKwkJCX07CisKIAkJCXJ0Y0A2OCB7CiAJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM3IjsKIAkJCQlyZWcgPSA8MHg2OD47CkBAIC0xNDMsMTM0ICsxNDgsMTQ2IEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5NDogZXRoZXJuZXQtcGh5QDQgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8ND47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHk1OiBldGhlcm5ldC1waHlANSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDw1PjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNjUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjY1MjAgMHgyMD47Ci0KLQkJCXRiaTI6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNzUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4Mjc1MjAgMHgyMD47Ci0KLQkJCXRiaTM6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5NDogZXRoZXJuZXQtcGh5QDQgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8ND47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHk1OiBldGhlcm5ldC1waHlANSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDw1PjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDI6IGV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMxIDIgMzIgMiAzMyAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMj47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkyOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MzogZXRoZXJuZXRAMjcwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNzAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI3MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzcgMiAzOCAyIDM5IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkzPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTQ+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTM6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKQEAgLTM2NSwxNCArMzgyLDE0IEBACiAJCWNhbjBAMiwwIHsKIAkJCWNvbXBhdGlibGUgPSAiaW50ZWwsODI1MjciOyAvLyBCb3NjaCBDQzc3MAogCQkJcmVnID0gPDIgMHgwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8NCAwPjsKKwkJCWludGVycnVwdHMgPSA8NCAxPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OwogCiAJCWNhbjFAMiwxMDAgewogCQkJY29tcGF0aWJsZSA9ICJpbnRlbCw4MjUyNyI7IC8vIEJvc2NoIENDNzcwCiAJCQlyZWcgPSA8MiAweDEwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQgMD47CisJCQlpbnRlcnJ1cHRzID0gPDQgMT47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NTUuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NTUuZHRzCmluZGV4IGNmOTJiNGUuLmExMzNkZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTU1LmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU1NS5kdHMKQEAgLTgzLDYgKzgzLDExIEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWRmc3JyOwogCisJCQlkdHRANTAgeworCQkJCWNvbXBhdGlibGUgPSAibmF0aW9uYWwsbG03NSI7CisJCQkJcmVnID0gPDB4NTA+OworCQkJfTsKKwogCQkJcnRjQDY4IHsKIAkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzciOwogCQkJCXJlZyA9IDwweDY4PjsKQEAgLTEzMCw3MiArMTM1LDc4IEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU2MC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU2MC5kdHMKaW5kZXggOWUxYWIyZC4uNjQ5ZTJlNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NjAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTYwLmR0cwpAQCAtODUsNiArODUsMTEgQEAKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJZGZzcnI7CiAKKwkJCWR0dEA1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJuYXRpb25hbCxsbTc1IjsKKwkJCQlyZWcgPSA8MHg1MD47CisJCQl9OworCiAJCQlydGNANjggewogCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzNyI7CiAJCQkJcmVnID0gPDB4Njg+OwpAQCAtMTMyLDcyICsxMzcsNzggQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8Mz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCW1waWM6IHBpY0A0MDAwMCB7CkBAIC0zMzUsMTQgKzM0NiwxNCBAQAogCQljYW4wQDIsMCB7CiAJCQljb21wYXRpYmxlID0gImludGVsLDgyNTI3IjsgLy8gQm9zY2ggQ0M3NzAKIAkJCXJlZyA9IDwyIDB4MCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQgMD47CisJCQlpbnRlcnJ1cHRzID0gPDQgMT47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIAogCQljYW4xQDIsMTAwIHsKIAkJCWNvbXBhdGlibGUgPSAiaW50ZWwsODI1MjciOyAvLyBCb3NjaCBDQzc3MAogCQkJcmVnID0gPDIgMHgxMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0IDA+OworCQkJaW50ZXJydXB0cyA9IDw0IDE+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy92aXJ0ZXg0NDAtbWw1MDcuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3ZpcnRleDQ0MC1tbDUwNy5kdHMKaW5kZXggZGM4ZTc4ZS4uNTJkOGMxYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3ZpcnRleDQ0MC1tbDUwNy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3ZpcnRleDQ0MC1tbDUwNy5kdHMKQEAgLTcsNiArNywxNSBAQAogICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CiAgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKiAtLS0KKyAqCisgKiBEZXZpY2UgVHJlZSBHZW5lcmF0b3IgdmVyc2lvbjogMS4xCisgKgorICogQ0FVVElPTjogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGxpYmdlbi4KKyAqIFZlcnNpb246IFhpbGlueCBFREsgMTAuMS4wMyBFREtfS19TUDMuNgorICoKKyAqIFhQUyBwcm9qZWN0IGRpcmVjdG9yeTogbWw1MDdfcHBjNDQwX2VtYl9yZWYKICAqLwogCiAvZHRzLXYxLzsKQEAgLTIyLDggKzMxLDggQEAKIAkJcmVnID0gPCAwIDB4MTAwMDAwMDAgPjsKIAl9IDsKIAljaG9zZW4gewotCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwIGlwPW9uIHJvb3Q9L2Rldi9yYW0iOwotCQlsaW51eCxzdGRvdXQtcGF0aCA9ICIvcGxiQDAvc2VyaWFsQDgzZTAwMDAwIjsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCByb290PS9kZXYvcmFtIjsKKwkJbGludXgsc3Rkb3V0LXBhdGggPSAmUlMyMzJfVWFydF8xOwogCX0gOwogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTEzNiwxOSArMTQ1LDE5IEBACiAJCQkJY29tcGF0aWJsZSA9ICJ4bG54LGxsLWRtYS0xLjAwLmEiOwogCQkJCWRjci1yZWcgPSA8IDB4ODAgMHgxMSA+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jnhwc19pbnRjXzA+OwotCQkJCWludGVycnVwdHMgPSA8IDkgMiAweGEgMiA+OworCQkJCWludGVycnVwdHMgPSA8IDEwIDIgMTEgMiA+OwogCQkJfSA7CiAJCX0gOwogCX0gOwogCXBsYl92NDZfMDogcGxiQDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47Ci0JCWNvbXBhdGlibGUgPSAieGxueCxwbGItdjQ2LTEuMDIuYSIsICJzaW1wbGUtYnVzIjsKKwkJY29tcGF0aWJsZSA9ICJ4bG54LHBsYi12NDYtMS4wMy5hIiwgInNpbXBsZS1idXMiOwogCQlyYW5nZXMgOwogCQlESVBfU3dpdGNoZXNfOEJpdDogZ3Bpb0A4MTQ2MDAwMCB7CiAJCQljb21wYXRpYmxlID0gInhsbngseHBzLWdwaW8tMS4wMC5hIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jnhwc19pbnRjXzA+OwotCQkJaW50ZXJydXB0cyA9IDwgNiAyID47CisJCQlpbnRlcnJ1cHRzID0gPCA3IDIgPjsKIAkJCXJlZyA9IDwgMHg4MTQ2MDAwMCAweDEwMDAwID47CiAJCQl4bG54LGFsbC1pbnB1dHMgPSA8MT47CiAJCQl4bG54LGFsbC1pbnB1dHMtMiA9IDwwPjsKQEAgLTE2Myw2ICsxNzIsODYgQEAKIAkJCXhsbngsdHJpLWRlZmF1bHQgPSA8MHhmZmZmZmZmZj47CiAJCQl4bG54LHRyaS1kZWZhdWx0LTIgPSA8MHhmZmZmZmZmZj47CiAJCX0gOworCQlGTEFTSDogZmxhc2hAZmMwMDAwMDAgeworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAieGxueCx4cHMtbWNoLWVtYy0yLjAwLmEiLCAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwgMHhmYzAwMDAwMCAweDIwMDAwMDAgPjsKKwkJCXhsbngsZmFtaWx5ID0gInZpcnRleDUiOworCQkJeGxueCxpbmNsdWRlLWRhdGF3aWR0aC1tYXRjaGluZy0wID0gPDB4MT47CisJCQl4bG54LGluY2x1ZGUtZGF0YXdpZHRoLW1hdGNoaW5nLTEgPSA8MHgwPjsKKwkJCXhsbngsaW5jbHVkZS1kYXRhd2lkdGgtbWF0Y2hpbmctMiA9IDwweDA+OworCQkJeGxueCxpbmNsdWRlLWRhdGF3aWR0aC1tYXRjaGluZy0zID0gPDB4MD47CisJCQl4bG54LGluY2x1ZGUtbmVnZWRnZS1pb3JlZ3MgPSA8MHgwPjsKKwkJCXhsbngsaW5jbHVkZS1wbGItaXBpZiA9IDwweDE+OworCQkJeGxueCxpbmNsdWRlLXdyYnVmID0gPDB4MT47CisJCQl4bG54LG1heC1tZW0td2lkdGggPSA8MHgxMD47CisJCQl4bG54LG1jaC1uYXRpdmUtZHdpZHRoID0gPDB4MjA+OworCQkJeGxueCxtY2gtcGxiLWNsay1wZXJpb2QtcHMgPSA8MHgyNzEwPjsKKwkJCXhsbngsbWNoLXNwbGItYXdpZHRoID0gPDB4MjA+OworCQkJeGxueCxtY2gwLWFjY2Vzc2J1Zi1kZXB0aCA9IDwweDEwPjsKKwkJCXhsbngsbWNoMC1wcm90b2NvbCA9IDwweDA+OworCQkJeGxueCxtY2gwLXJkZGF0YWJ1Zi1kZXB0aCA9IDwweDEwPjsKKwkJCXhsbngsbWNoMS1hY2Nlc3NidWYtZGVwdGggPSA8MHgxMD47CisJCQl4bG54LG1jaDEtcHJvdG9jb2wgPSA8MHgwPjsKKwkJCXhsbngsbWNoMS1yZGRhdGFidWYtZGVwdGggPSA8MHgxMD47CisJCQl4bG54LG1jaDItYWNjZXNzYnVmLWRlcHRoID0gPDB4MTA+OworCQkJeGxueCxtY2gyLXByb3RvY29sID0gPDB4MD47CisJCQl4bG54LG1jaDItcmRkYXRhYnVmLWRlcHRoID0gPDB4MTA+OworCQkJeGxueCxtY2gzLWFjY2Vzc2J1Zi1kZXB0aCA9IDwweDEwPjsKKwkJCXhsbngsbWNoMy1wcm90b2NvbCA9IDwweDA+OworCQkJeGxueCxtY2gzLXJkZGF0YWJ1Zi1kZXB0aCA9IDwweDEwPjsKKwkJCXhsbngsbWVtMC13aWR0aCA9IDwweDEwPjsKKwkJCXhsbngsbWVtMS13aWR0aCA9IDwweDIwPjsKKwkJCXhsbngsbWVtMi13aWR0aCA9IDwweDIwPjsKKwkJCXhsbngsbWVtMy13aWR0aCA9IDwweDIwPjsKKwkJCXhsbngsbnVtLWJhbmtzLW1lbSA9IDwweDE+OworCQkJeGxueCxudW0tY2hhbm5lbHMgPSA8MHgyPjsKKwkJCXhsbngscHJpb3JpdHktbW9kZSA9IDwweDA+OworCQkJeGxueCxzeW5jaC1tZW0tMCA9IDwweDA+OworCQkJeGxueCxzeW5jaC1tZW0tMSA9IDwweDA+OworCQkJeGxueCxzeW5jaC1tZW0tMiA9IDwweDA+OworCQkJeGxueCxzeW5jaC1tZW0tMyA9IDwweDA+OworCQkJeGxueCxzeW5jaC1waXBlZGVsYXktMCA9IDwweDI+OworCQkJeGxueCxzeW5jaC1waXBlZGVsYXktMSA9IDwweDI+OworCQkJeGxueCxzeW5jaC1waXBlZGVsYXktMiA9IDwweDI+OworCQkJeGxueCxzeW5jaC1waXBlZGVsYXktMyA9IDwweDI+OworCQkJeGxueCx0YXZkdi1wcy1tZW0tMCA9IDwweDFhZGIwPjsKKwkJCXhsbngsdGF2ZHYtcHMtbWVtLTEgPSA8MHgzYTk4PjsKKwkJCXhsbngsdGF2ZHYtcHMtbWVtLTIgPSA8MHgzYTk4PjsKKwkJCXhsbngsdGF2ZHYtcHMtbWVtLTMgPSA8MHgzYTk4PjsKKwkJCXhsbngsdGNlZHYtcHMtbWVtLTAgPSA8MHgxYWRiMD47CisJCQl4bG54LHRjZWR2LXBzLW1lbS0xID0gPDB4M2E5OD47CisJCQl4bG54LHRjZWR2LXBzLW1lbS0yID0gPDB4M2E5OD47CisJCQl4bG54LHRjZWR2LXBzLW1lbS0zID0gPDB4M2E5OD47CisJCQl4bG54LHRoemNlLXBzLW1lbS0wID0gPDB4ODhiOD47CisJCQl4bG54LHRoemNlLXBzLW1lbS0xID0gPDB4MWI1OD47CisJCQl4bG54LHRoemNlLXBzLW1lbS0yID0gPDB4MWI1OD47CisJCQl4bG54LHRoemNlLXBzLW1lbS0zID0gPDB4MWI1OD47CisJCQl4bG54LHRoem9lLXBzLW1lbS0wID0gPDB4MWI1OD47CisJCQl4bG54LHRoem9lLXBzLW1lbS0xID0gPDB4MWI1OD47CisJCQl4bG54LHRoem9lLXBzLW1lbS0yID0gPDB4MWI1OD47CisJCQl4bG54LHRoem9lLXBzLW1lbS0zID0gPDB4MWI1OD47CisJCQl4bG54LHRsendlLXBzLW1lbS0wID0gPDB4ODhiOD47CisJCQl4bG54LHRsendlLXBzLW1lbS0xID0gPDB4MD47CisJCQl4bG54LHRsendlLXBzLW1lbS0yID0gPDB4MD47CisJCQl4bG54LHRsendlLXBzLW1lbS0zID0gPDB4MD47CisJCQl4bG54LHR3Yy1wcy1tZW0tMCA9IDwweDJhZjg+OworCQkJeGxueCx0d2MtcHMtbWVtLTEgPSA8MHgzYTk4PjsKKwkJCXhsbngsdHdjLXBzLW1lbS0yID0gPDB4M2E5OD47CisJCQl4bG54LHR3Yy1wcy1tZW0tMyA9IDwweDNhOTg+OworCQkJeGxueCx0d3AtcHMtbWVtLTAgPSA8MHgxMTE3MD47CisJCQl4bG54LHR3cC1wcy1tZW0tMSA9IDwweDJlZTA+OworCQkJeGxueCx0d3AtcHMtbWVtLTIgPSA8MHgyZWUwPjsKKwkJCXhsbngsdHdwLXBzLW1lbS0zID0gPDB4MmVlMD47CisJCQl4bG54LHhjbDAtbGluZXNpemUgPSA8MHg0PjsKKwkJCXhsbngseGNsMC13cml0ZXhmZXIgPSA8MHgxPjsKKwkJCXhsbngseGNsMS1saW5lc2l6ZSA9IDwweDQ+OworCQkJeGxueCx4Y2wxLXdyaXRleGZlciA9IDwweDE+OworCQkJeGxueCx4Y2wyLWxpbmVzaXplID0gPDB4ND47CisJCQl4bG54LHhjbDItd3JpdGV4ZmVyID0gPDB4MT47CisJCQl4bG54LHhjbDMtbGluZXNpemUgPSA8MHg0PjsKKwkJCXhsbngseGNsMy13cml0ZXhmZXIgPSA8MHgxPjsKKwkJfSA7CiAJCUhhcmRfRXRoZXJuZXRfTUFDOiB4cHMtbGwtdGVtYWNAODFjMDAwMDAgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwxPjsKQEAgLTE4NSw2ICsyNzQsMTkgQEAKIAkJCQl4bG54LHR4ZmlmbyA9IDwweDEwMDA+OwogCQkJfSA7CiAJCX0gOworCQlJSUNfRUVQUk9NOiBpMmNAODE2MDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1paWMtMi4wMC5hIjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jnhwc19pbnRjXzA+OworCQkJaW50ZXJydXB0cyA9IDwgNiAyID47CisJCQlyZWcgPSA8IDB4ODE2MDAwMDAgMHgxMDAwMCA+OworCQkJeGxueCxjbGstZnJlcSA9IDwweDVmNWUxMDA+OworCQkJeGxueCxmYW1pbHkgPSAidmlydGV4NSI7CisJCQl4bG54LGdwby13aWR0aCA9IDwweDE+OworCQkJeGxueCxpaWMtZnJlcSA9IDwweDE4NmEwPjsKKwkJCXhsbngsc2NsLWluZXJ0aWFsLWRlbGF5ID0gPDB4MD47CisJCQl4bG54LHNkYS1pbmVydGlhbC1kZWxheSA9IDwweDA+OworCQkJeGxueCx0ZW4tYml0LWFkciA9IDwweDA+OworCQl9IDsKIAkJTEVEc184Qml0OiBncGlvQDgxNDAwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAieGxueCx4cHMtZ3Bpby0xLjAwLmEiOwogCQkJcmVnID0gPCAweDgxNDAwMDAwIDB4MTAwMDAgPjsKQEAgLTIyMCw3ICszMjIsNyBAQAogCQlQdXNoX0J1dHRvbnNfNUJpdDogZ3Bpb0A4MTQ0MDAwMCB7CiAJCQljb21wYXRpYmxlID0gInhsbngseHBzLWdwaW8tMS4wMC5hIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jnhwc19pbnRjXzA+OwotCQkJaW50ZXJydXB0cyA9IDwgNyAyID47CisJCQlpbnRlcnJ1cHRzID0gPCA4IDIgPjsKIAkJCXJlZyA9IDwgMHg4MTQ0MDAwMCAweDEwMDAwID47CiAJCQl4bG54LGFsbC1pbnB1dHMgPSA8MT47CiAJCQl4bG54LGFsbC1pbnB1dHMtMiA9IDwwPjsKQEAgLTIzNywxMyArMzM5LDEzIEBACiAJCX0gOwogCQlSUzIzMl9VYXJ0XzE6IHNlcmlhbEA4M2UwMDAwMCB7CiAJCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwPjsKLQkJCWNvbXBhdGlibGUgPSAieGxueCx4cHMtdWFydDE2NTUwLTIuMDAuYSIsICJuczE2NTUwIjsKLQkJCWN1cnJlbnQtc3BlZWQgPSA8MHgyNTgwPjsKKwkJCWNvbXBhdGlibGUgPSAieGxueCx4cHMtdWFydDE2NTUwLTIuMDAuYiIsICJuczE2NTUwIjsKKwkJCWN1cnJlbnQtc3BlZWQgPSA8OTYwMD47CiAJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmeHBzX2ludGNfMD47Ci0JCQlpbnRlcnJ1cHRzID0gPCA4IDIgPjsKKwkJCWludGVycnVwdHMgPSA8IDkgMiA+OwogCQkJcmVnID0gPCAweDgzZTAwMDAwIDB4MTAwMDAgPjsKLQkJCXJlZy1vZmZzZXQgPSA8Mz47CisJCQlyZWctb2Zmc2V0ID0gPDB4MTAwMz47CiAJCQlyZWctc2hpZnQgPSA8Mj47CiAJCQl4bG54LGZhbWlseSA9ICJ2aXJ0ZXg1IjsKIAkJCXhsbngsaGFzLWV4dGVybmFsLXJjbGsgPSA8MD47CkBAIC0yNjgsNyArMzcwLDcgQEAKIAkJCWNvbXBhdGlibGUgPSAieGxueCx4cHMtaW50Yy0xLjAwLmEiOwogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXIgOwogCQkJcmVnID0gPCAweDgxODAwMDAwIDB4MTAwMDAgPjsKLQkJCXhsbngsbnVtLWludHItaW5wdXRzID0gPDB4Yj47CisJCQl4bG54LG51bS1pbnRyLWlucHV0cyA9IDwweGM+OwogCQl9IDsKIAkJeHBzX3RpbWViYXNlX3dkdF8xOiB4cHMtdGltZWJhc2Utd2R0QDgzYTAwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAieGxueCx4cHMtdGltZWJhc2Utd2R0LTEuMDAuYiI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9zZXJpYWwuYyBiL2FyY2gvcG93ZXJwYy9ib290L3NlcmlhbC5jCmluZGV4IDhiMzYwN2MuLmYyMTU2ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L3NlcmlhbC5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L3NlcmlhbC5jCkBAIC0xMTcsNyArMTE3LDggQEAKIAlpZiAoZGV2cCA9PSBOVUxMKQogCQlnb3RvIGVycl9vdXQ7CiAKLQlpZiAoZHRfaXNfY29tcGF0aWJsZShkZXZwLCAibnMxNjU1MCIpKQorCWlmIChkdF9pc19jb21wYXRpYmxlKGRldnAsICJuczE2NTUwIikgfHwKKwkgICAgZHRfaXNfY29tcGF0aWJsZShkZXZwLCAicG5wUE5QLDUwMSIpKQogCQlyYyA9IG5zMTY1NTBfY29uc29sZV9pbml0KGRldnAsICZzZXJpYWxfY2QpOwogCWVsc2UgaWYgKGR0X2lzX2NvbXBhdGlibGUoZGV2cCwgIm1hcnZlbGwsbXY2NDM2MC1tcHNjIikpCiAJCXJjID0gbXBzY19jb25zb2xlX2luaXQoZGV2cCwgJnNlcmlhbF9jZCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcgppbmRleCA5NjVjMjM3Li4zYWM3NWFlIDEwMDc1NQotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIKQEAgLTE4Niw2ICsxODYsOSBAQAogICAgICotbXBjODUqfCotdHFtODUqfCotc2JjODUqKQogICAgICAgICBwbGF0Zm9ybW89JG9iamVjdC9jdWJvb3QtODV4eC5vCiAgICAgICAgIDs7CisgICAgKi1hbWlnYW9uZSkKKyAgICAgICAgbGlua19hZGRyZXNzPScweDgwMDAwMCcKKyAgICAgICAgOzsKICAgICBlc2FjCiAgICAgOzsKIHBzMykKQEAgLTIxMSwxMSArMjE0LDExIEBACiAgICAgYmluYXJ5PXkKICAgICA7Owogc2ltcGxlYm9vdC12aXJ0ZXg0NDAtKikKLSAgICBwbGF0Zm9ybW89IiRvYmplY3Qvc2ltcGxlYm9vdC5vICRvYmplY3QvdmlydGV4Lm8iCisgICAgcGxhdGZvcm1vPSIkb2JqZWN0L2ZpeGVkLWhlYWQubyAkb2JqZWN0L3NpbXBsZWJvb3QubyAkb2JqZWN0L3ZpcnRleC5vIgogICAgIGJpbmFyeT15CiAgICAgOzsKIHNpbXBsZWJvb3QtKikKLSAgICBwbGF0Zm9ybW89IiRvYmplY3Qvc2ltcGxlYm9vdC5vIgorICAgIHBsYXRmb3Jtbz0iJG9iamVjdC9maXhlZC1oZWFkLm8gJG9iamVjdC9zaW1wbGVib290Lm8iCiAgICAgYmluYXJ5PXkKICAgICA7OwogYXNwODM0eC1yZWRib290KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jYW55b25sYW5kc19kZWZjb25maWcKaW5kZXggODFjZGNjNC4uZjlhMDhlZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvY2FueW9ubGFuZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgotIyBUdWUgSmFuIDIwIDA4OjIyOjM1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzMKKyMgTW9uIEZlYiAgMiAxMzoxMzowNCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTc0LDYgKzc0LDE1IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC0xNDcsMTEgKzE1Niw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUz15CiAKQEAgLTM3Myw2ICszNzcsNyBAQAogQ09ORklHX1BST0NfRVZFTlRTPXkKICMgQ09ORklHX01URCBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKK0NPTkZJR19PRl9JMkM9eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKQEAgLTM4NCw2ICszODksNyBAQAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKQEAgLTQ2Niw2ICs0NzIsMTUgQEAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwogIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldApAQCAtNTMzLDEzICs1NDgsMTM2IEBACiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0RFVlBPUlQ9eQotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfSUJNX0lJQz15CisjIENPTkZJR19JMkNfTVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0FENzQxND15CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldApAQCAtNTU2LDcgKzY5NCwxMiBAQAogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKQEAgLTU3NCw2ICs3MTcsNyBAQAogIyBNdWx0aW1lZGlhIGRyaXZlcnMKICMKIENPTkZJR19EQUI9eQorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtNTkwLDcgKzczNCwxMDkgQEAKICMKICMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9bQorIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQorQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CitDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX0xJQlVTVUFMPXkKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKICMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3JlZHdvb2RfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3JlZHdvb2RfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NjU0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvcmVkd29vZF9kZWZjb25maWcKQEAgLTAsMCArMSwxMTc2IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMzCisjIFdlZCBGZWIgIDQgMTQ6MzE6MDkgMjAwOQorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR182eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorQ09ORklHXzQ0eD15CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRlBVPXkKK0NPTkZJR180eHg9eQorQ09ORklHX0JPT0tFPXkKK0NPTkZJR19QVEVfNjRCSVQ9eQorQ09ORklHX1BIWVNfNjRCSVQ9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKKyMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRENSX05BVElWRT15CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX1BQQ19EQ1I9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEPXkKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUz15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19CQU1CT08gaXMgbm90IHNldAorIyBDT05GSUdfRUJPTlkgaXMgbm90IHNldAorIyBDT05GSUdfU0FNNDQwRVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VRVU9JQSBpcyBub3Qgc2V0CisjIENPTkZJR19UQUlTSEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBVE1BSSBpcyBub3Qgc2V0CisjIENPTkZJR19SQUlOSUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBUlAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTllPTkxBTkRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dMQUNJRVIgaXMgbm90IHNldAorQ09ORklHX1JFRFdPT0Q9eQorIyBDT05GSUdfWU9TRU1JVEUgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX1ZJUlRFWDQ0MF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM0NHhfU0lNUExFPXkKKyMgQ09ORklHX1BQQzR4eF9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR180NjBTWD15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKK0NPTkZJR19QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19QUENfNEtfUEFHRVM9eQorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9IiIKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHXzR4eF9TT0M9eQorQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CitDT05GSUdfUENJRVBPUlRCVVM9eQorQ09ORklHX1BDSUVBRVI9eQorIyBDT05GSUdfUENJRUFTUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmYxMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CitDT05GSUdfQ09OTkVDVE9SPXkKK0NPTkZJR19QUk9DX0VWRU5UUz15CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CitDT05GSUdfTVREX09GX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUF9PRj15CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0kyQz15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9TWVNBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TQVNfQVRUUlM9eQorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX0ZVU0lPTj15CisjIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0CitDT05GSUdfRlVTSU9OX1NBUz15CitDT05GSUdfRlVTSU9OX01BWF9TR0U9MTI4CisjIENPTkZJR19GVVNJT05fQ1RMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9MT0dHSU5HIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CitDT05GSUdfSTJPPXkKK0NPTkZJR19JMk9fTENUX05PVElGWV9PTl9DSEFOR0VTPXkKK0NPTkZJR19JMk9fRVhUX0FEQVBURUM9eQorIyBDT05GSUdfSTJPX0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JMk9fQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyT19CTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JMk9fU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19JMk9fUFJPQyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorQ09ORklHX0lCTV9ORVdfRU1BQz15CitDT05GSUdfSUJNX05FV19FTUFDX1JYQj0yNTYKK0NPTkZJR19JQk1fTkVXX0VNQUNfVFhCPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19QT0xMX1dFSUdIVD0zMgorQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9DT1BZX1RIUkVTSE9MRD0yNTYKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhfU0tCX0hFQURST09NPTAKK0NPTkZJR19JQk1fTkVXX0VNQUNfREVCVUc9eQorQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUk9eQorQ09ORklHX0lCTV9ORVdfRU1BQ19UQUg9eQorQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDND15CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorQ09ORklHX0UxMDAwRT15CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKKyMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0xCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0xCitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19JQk1fSUlDPXkKKyMgQ09ORklHX0kyQ19NUEMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0RFQlVHX0NPUkU9eQorQ09ORklHX0kyQ19ERUJVR19BTEdPPXkKK0NPTkZJR19JMkNfREVCVUdfQlVTPXkKK0NPTkZJR19JMkNfREVCVUdfQ0hJUD15CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfREFCPXkKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VV0IgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfRE1BREVWSUNFUz15CisKKyMKKyMgRE1BIERldmljZXMKKyMKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CitDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPXkKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ1JZUFREPXkKK0NPTkZJR19DUllQVE9fQVVUSEVOQz15CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCitDT05GSUdfQ1JZUFRPX0NDTT15CitDT05GSUdfQ1JZUFRPX0dDTT15CitDT05GSUdfQ1JZUFRPX1NFUUlWPXkKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorQ09ORklHX0NSWVBUT19DVFI9eQorQ09ORklHX0NSWVBUT19DVFM9eQorQ09ORklHX0NSWVBUT19FQ0I9eQorQ09ORklHX0NSWVBUT19MUlc9eQorQ09ORklHX0NSWVBUT19QQ0JDPXkKK0NPTkZJR19DUllQVE9fWFRTPXkKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19YQ0JDPXkKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDQ9eQorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPXkKK0NPTkZJR19DUllQVE9fU0hBMjU2PXkKK0NPTkZJR19DUllQVE9fU0hBNTEyPXkKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz15CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVJDND15CitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPXkKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NvY3JhdGVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYzkwNDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NvY3JhdGVzX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE0MTAgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNi4yCisjIFNhdCBPY3QgMTggMTE6MDY6MTMgMjAwOAorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCisjIENPTkZJR182eHggaXMgbm90IHNldAorQ09ORklHX1BQQ184NXh4PXkKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19FNTAwPXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfRlNMX0JPT0tFPXkKK0NPTkZJR19GU0xfRU1CX1BFUkZNT049eQorIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfU1BFPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19QUENfTUVSR0U9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorIyBDT05GSUdfSEFWRV9ETUFfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CitDT05GSUdfTVBDODV4eD15CisjIENPTkZJR19NUEM4NTQwX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NTYwX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X0NEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NSQVRFUz15CisjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUWF9HUDMgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU0MCBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NTUgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4NTQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzg1NjAgaXMgbm90IHNldAorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CitDT05GSUdfTVBJQz15CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19NQVRIX0VNVUxBVElPTj15CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCisjIENPTkZJR19QUk9DX0RFVklDRVRSRUUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfRlNMX1NPQz15CitDT05GSUdfRlNMX1BDST15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX0FMSUdOPTB4MTAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CitDT05GSUdfQ0FOPXkKK0NPTkZJR19DQU5fUkFXPXkKK0NPTkZJR19DQU5fQkNNPXkKKworIworIyBDQU4gRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0NBTl9WQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9PTERfRFJJVkVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU5fU0xDQU4gaXMgbm90IHNldAorQ09ORklHX0NBTl9TSkExMDAwPXkKK0NPTkZJR19DQU5fU0pBMTAwMF9NRU1fT0Y9eQorIyBDT05GSUdfQ0FOX0VNU19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQ0FOX0lYWEFUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19DQU5fUEVBS19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQ0FOX0tWQVNFUl9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQ0FOX01TQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9ERUJVR19ERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9PRl9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9GU0xfRUxCQyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfU09DUkFURVM9eQorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKK0NPTkZJR19PRl9JMkM9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfTkVUREVWSUNFU19NVUxUSVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NQVJWRUxMX1BIWT15CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfR0lBTkZBUj15CitDT05GSUdfR0ZBUl9OQVBJPXkKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTgwMAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTQ4MAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwIGlzIG5vdCBzZXQKK0NPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDAzPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorQ09ORklHX0kyQ19NUEM9eQorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfU09DUkFURVM9eQorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorQ09ORklHX0hXTU9OX1ZJRD15CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0xNNzU9eQorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfVzgzNzgxRD15CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfREFCPXkKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU49eQorQ09ORklHX0ZCX0JPVEhfRU5ESUFOPXkKKyMgQ09ORklHX0ZCX0JJR19FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworQ09ORklHX0ZCX01CODYyWFg9eQorIyBDT05GSUdfRkJfTUI4NjJYWF9QQ0lfR0RDIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NQjg2MlhYX0xJTUU9eQorIyBDT05GSUdfRkJfUFJFX0lOSVRfRkIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfT0YgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1Q2NTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAorIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZTTF9ESVUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorQ09ORklHX0ZPTlRTPXkKKyMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4MTY9eQorIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAorIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfRlNMIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKK0NPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQorQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9SWDgwMjU9eQorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9QUEM9eQorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMmMxNjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcKQEAgLTAsMCArMSwxODg5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM3CisjIEZyaSBNYXIgMTMgMTU6MzY6MTEgMjAwOQorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCitDT05GSUdfNnh4PXkKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRlBVPXkKKyMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX0FMVElWRUM9eQorQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19QUENfU1REX01NVV8zMj15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19TTVA9eQorQ09ORklHX05SX0NQVVM9MgorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKKyMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19HRU5FUklDX0xPQ0tCUkVBSz15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorQ09ORklHX0dFTkVSSUNfVEJTWU5DPXkKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKK0NPTkZJR19SRUxBWT15CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX1NUT1BfTUFDSElORT15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKK0NPTkZJR19QUENfTVVMVElQTEFURk9STT15CitDT05GSUdfQ0xBU1NJQzMyPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODZ4eD15CisjIENPTkZJR19NUEM4NjQxX0hQQ04gaXMgbm90IHNldAorIyBDT05GSUdfU0JDODY0MUQgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODYxMF9IUENEIGlzIG5vdCBzZXQKK0NPTkZJR19HRUZfUFBDOUE9eQorIyBDT05GSUdfR0VGX1NCQzMxMCBpcyBub3Qgc2V0CisjIENPTkZJR19HRUZfU0JDNjEwIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4NjQxPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorQ09ORklHX01QSUM9eQorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBVSBpcyBub3Qgc2V0CisjIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorIyBDT05GSUdfTVBDOHh4eF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfVElDS19PTkVTSE9UPXkKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorQ09ORklHX0haPTEwMDAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9bQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfSVJRX0FMTF9DUFVTPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX1BQQ180S19QQUdFUz15CisjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKKyMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKK0NPTkZJR19GU0xfUENJPXkKK0NPTkZJR19QUENfUENJX0NIT0lDRT15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorQ09ORklHX1BDSUVQT1JUQlVTPXkKK0NPTkZJR19QQ0lFQUVSPXkKKyMgQ09ORklHX1BDSUVBU1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAorQ09ORklHX1BDSV9ERUJVRz15CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj1tCisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9JUENPTVA9bQorQ09ORklHX05FVF9LRVk9bQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQorQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorQ09ORklHX05FVF9JUElQPW0KK0NPTkZJR19ORVRfSVBHUkU9bQorQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eQorQ09ORklHX0lQX01ST1VURT15CitDT05GSUdfSVBfUElNU01fVjE9eQorQ09ORklHX0lQX1BJTVNNX1YyPXkKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCitDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PW0KKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X0FIPW0KK0NPTkZJR19JTkVUNl9FU1A9bQorQ09ORklHX0lORVQ2X0lQQ09NUD1tCisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorQ09ORklHX0lQVjZfVFVOTkVMPW0KKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKK0NPTkZJR19CUklER0VfTkVURklMVEVSPXkKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KKyMgQ09ORklHX0lQX05GX01BVENIX0FIIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorQ09ORklHX0lQX05GX01BVENIX1RUTD1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9UVEwgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1JBVz1tCisjIENPTkZJR19JUF9ORl9TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9bQorQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVA2X05GX1FVRVVFPW0KK0NPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQorIyBDT05GSUdfSVA2X05GX01BVENIX0FIIGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCitDT05GSUdfSVA2X05GX01BVENIX0hMPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCisjIENPTkZJR19JUDZfTkZfTUFUQ0hfTUggaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQNl9ORl9GSUxURVI9bQorIyBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1QgaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9NQU5HTEU9bQorIyBDT05GSUdfSVA2X05GX1RBUkdFVF9ITCBpcyBub3Qgc2V0CitDT05GSUdfSVA2X05GX1JBVz1tCisjIENPTkZJR19JUDZfTkZfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CitDT05GSUdfVElQQz1tCisjIENPTkZJR19USVBDX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUENfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0FUTT1tCitDT05GSUdfQVRNX0NMSVA9bQorIyBDT05GSUdfQVRNX0NMSVBfTk9fSUNNUCBpcyBub3Qgc2V0CitDT05GSUdfQVRNX0xBTkU9bQorQ09ORklHX0FUTV9NUE9BPW0KK0NPTkZJR19BVE1fQlIyNjg0PW0KKyMgQ09ORklHX0FUTV9CUjI2ODRfSVBGSUxURVIgaXMgbm90IHNldAorQ09ORklHX1NUUD1tCitDT05GSUdfQlJJREdFPW0KKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorQ09ORklHX1ZMQU5fODAyMVE9bQorIyBDT05GSUdfVkxBTl84MDIxUV9HVlJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0FOX1JPVVRFUj1tCitDT05GSUdfTkVUX1NDSEVEPXkKKworIworIyBRdWV1ZWluZy9TY2hlZHVsaW5nCisjCitDT05GSUdfTkVUX1NDSF9DQlE9bQorQ09ORklHX05FVF9TQ0hfSFRCPW0KK0NPTkZJR19ORVRfU0NIX0hGU0M9bQorQ09ORklHX05FVF9TQ0hfQVRNPW0KK0NPTkZJR19ORVRfU0NIX1BSSU89bQorIyBDT05GSUdfTkVUX1NDSF9NVUxUSVEgaXMgbm90IHNldAorQ09ORklHX05FVF9TQ0hfUkVEPW0KK0NPTkZJR19ORVRfU0NIX1NGUT1tCitDT05GSUdfTkVUX1NDSF9URVFMPW0KK0NPTkZJR19ORVRfU0NIX1RCRj1tCitDT05GSUdfTkVUX1NDSF9HUkVEPW0KK0NPTkZJR19ORVRfU0NIX0RTTUFSSz1tCitDT05GSUdfTkVUX1NDSF9ORVRFTT1tCisjIENPTkZJR19ORVRfU0NIX0RSUiBpcyBub3Qgc2V0CisKKyMKKyMgQ2xhc3NpZmljYXRpb24KKyMKK0NPTkZJR19ORVRfQ0xTPXkKKyMgQ09ORklHX05FVF9DTFNfQkFTSUMgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfVENJTkRFWD1tCitDT05GSUdfTkVUX0NMU19ST1VURTQ9bQorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorQ09ORklHX05FVF9DTFNfRlc9bQorQ09ORklHX05FVF9DTFNfVTMyPW0KKyMgQ09ORklHX0NMU19VMzJfUEVSRiBpcyBub3Qgc2V0CisjIENPTkZJR19DTFNfVTMyX01BUksgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUlNWUD1tCitDT05GSUdfTkVUX0NMU19SU1ZQNj1tCisjIENPTkZJR19ORVRfQ0xTX0ZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VNQVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0FDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0lORCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSF9GSUZPPXkKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCitDT05GSUdfTkVUX1BLVEdFTj1tCisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX0ZJQl9SVUxFUz15CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX09GX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKK0NPTkZJR19PRl9HUElPPXkKK0NPTkZJR19PRl9JMkM9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPXkKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TUj15CisjIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1BNUD15CisjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0ZTTCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1NGRj15CisjIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfU0lMPXkKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCitDT05GSUdfQk9ORElORz1tCisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CitDT05GSUdfVFVOPW0KKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfR0lBTkZBUj15CisjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX0FUTV9EUklWRVJTPXkKKyMgQ09ORklHX0FUTV9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9MQU5BSSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fRU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9GSVJFU1RSRUFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9aQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9OSUNTVEFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9JRFQ3NzI1MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fQU1CQVNTQURPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSE9SSVpPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSUEgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0ZPUkUyMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9IRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fU09MT1MgaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KK0NPTkZJR19QUFBfTVVMVElMSU5LPXkKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KKyMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBPRT1tCitDT05GSUdfUFBQT0FUTT1tCisjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CitDT05GSUdfU0xJUD1tCitDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKK0NPTkZJR19TTEhDPW0KK0NPTkZJR19TTElQX1NNQVJUPXkKK0NPTkZJR19TTElQX01PREVfU0xJUDY9eQorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRDT05TT0xFPXkKKyMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUUE9MTD15CitDT05GSUdfTkVUUE9MTF9UUkFQPXkKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorQ09ORklHX05WUkFNPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfSTJDX01QQz15CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworQ09ORklHX0RTMTY4Mj15CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX1hJTElOWCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19MTTkwPXkKK0NPTkZJR19TRU5TT1JTX0xNOTI9eQorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfQUxJTTcxMDFfV0RUIGlzIG5vdCBzZXQKK0NPTkZJR19HRUZfV0RUPXkKKyMgQ09ORklHXzh4eHhfV0RUIGlzIG5vdCBzZXQKKworIworIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworQ09ORklHX0RBQj15CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfVkdBX0NPTlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfVEhSVVNUTUFTVEVSX0ZGPW0KK0NPTkZJR19aRVJPUExVU19GRj1tCitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9GU0wgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjCisKKyMKKyMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKKyMgQ09ORklHX1JUQ19JTlRGX1BST0MgaXMgbm90IHNldAorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfUlg4NTgxPXkKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1BQQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTX1hBVFRSPXkKK0NPTkZJR19DSUZTX1BPU0lYPXkKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCitDT05GSUdfTkxTX0FTQ0lJPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQorQ09ORklHX05MU19JU084ODU5XzE1PW0KK0NPTkZJR19OTFNfS09JOF9SPW0KK0NPTkZJR19OTFNfS09JOF9VPW0KK0NPTkZJR19OTFNfVVRGOD1tCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorQ09ORklHX0NSQ19DQ0lUVD1tCisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWT15CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWV9ORVRXT1JLPXkKKyMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9QQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX1JPT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWV9ERUZBVUxUX01NQVBfTUlOX0FERFI9MAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19OVUxMPW0KKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz15CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX01END1tCitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPW0KK0NPTkZJR19DUllQVE9fU0hBMjU2PW0KK0NPTkZJR19DUllQVE9fU0hBNTEyPW0KKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XUDUxMj1tCisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT1tCisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjMzEwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQyMzZiMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcKQEAgLTAsMCArMSwxNjEzIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMzCisjIFdlZCBKYW4gMjggMjM6MDU6MzQgMjAwOQorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCitDT05GSUdfNnh4PXkKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRlBVPXkKKyMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX0FMVElWRUM9eQorQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19QUENfU1REX01NVV8zMj15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19TTVA9eQorQ09ORklHX05SX0NQVVM9MgorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKKyMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19HRU5FUklDX0xPQ0tCUkVBSz15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorQ09ORklHX0dFTkVSSUNfVEJTWU5DPXkKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CitDT05GSUdfUkVMQVk9eQorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX1NUT1BfTUFDSElORT15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX1BQQ19NU0lfQklUTUFQPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCitDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQorQ09ORklHX0NMQVNTSUMzMj15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzg2eHg9eQorIyBDT05GSUdfTVBDODY0MV9IUENOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzg2NDFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg2MTBfSFBDRCBpcyBub3Qgc2V0CitDT05GSUdfR0VGX1NCQzMxMD15CisjIENPTkZJR19HRUZfU0JDNjEwIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4NjQxPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorQ09ORklHX01QSUM9eQorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBVSBpcyBub3Qgc2V0CisjIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorIyBDT05GSUdfTVBDOHh4eF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfVElDS19PTkVTSE9UPXkKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMDA9eQorQ09ORklHX0haPTEwMDAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9eQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfSVJRX0FMTF9DUFVTPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfTUlHUkFUSU9OPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX1BQQ180S19QQUdFUz15CisjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKKyMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKK0NPTkZJR19GU0xfUENJPXkKK0NPTkZJR19QUENfUENJX0NIT0lDRT15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorQ09ORklHX1BDSUVQT1JUQlVTPXkKK0NPTkZJR19QQ0lFQUVSPXkKKyMgQ09ORklHX1BDSUVBU1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CitDT05GSUdfUENJX01TST15CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19MT1dNRU1fQ0FNX05VTT0zCitDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj1tCisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9JUENPTVA9bQorQ09ORklHX05FVF9LRVk9bQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQorQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorQ09ORklHX05FVF9JUElQPW0KK0NPTkZJR19ORVRfSVBHUkU9bQorQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eQorQ09ORklHX0lQX01ST1VURT15CitDT05GSUdfSVBfUElNU01fVjE9eQorQ09ORklHX0lQX1BJTVNNX1YyPXkKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCitDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PW0KKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X0FIPW0KK0NPTkZJR19JTkVUNl9FU1A9bQorQ09ORklHX0lORVQ2X0lQQ09NUD1tCisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorQ09ORklHX0lQVjZfVFVOTkVMPW0KKyMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworQ09ORklHX05FVF9QS1RHRU49bQorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19GSUJfUlVMRVM9eQorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfT0ZfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9KRURFQ1BST0JFPXkKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKK0NPTkZJR19PRl9HUElPPXkKK0NPTkZJR19PRl9JMkM9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD1tCitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPXkKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TUj15CisjIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1BNUD15CisjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAorQ09ORklHX1NBVEFfU0lMMjQ9eQorIyBDT05GSUdfU0FUQV9GU0wgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX1NGRiBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorQ09ORklHX0JPTkRJTkc9bQorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj1tCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX0dJQU5GQVI9eQorIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorQ09ORklHX1BQUD1tCitDT05GSUdfUFBQX01VTFRJTElOSz15CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCisjIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CitDT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorQ09ORklHX1NMSVA9bQorQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xIQz1tCitDT05GSUdfU0xJUF9TTUFSVD15CitDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUQ09OU09MRT15CisjIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgbm90IHNldAorQ09ORklHX05FVFBPTEw9eQorQ09ORklHX05FVFBPTExfVFJBUD15CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorQ09ORklHX05WUkFNPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfSTJDX01QQz15CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworQ09ORklHX0RTMTY4Mj15CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CitDT05GSUdfR1BJT19TWVNGUz15CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fWElMSU5YIGlzIG5vdCBzZXQKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0xNOTA9eQorQ09ORklHX1NFTlNPUlNfTE05Mj15CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAorQ09ORklHX0dFRl9XRFQ9eQorIyBDT05GSUdfOHh4eF9XRFQgaXMgbm90IHNldAorCisjCisjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfREFCPXkKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19WR0FfQ09OU09MRT15CisjIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9MT0dJVEVDSD15CisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9GU0wgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjCisKKyMKKyMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CisjIENPTkZJR19SVENfSU5URl9QUk9DIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1JYODU4MT15CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9QUEMgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CitDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz15CitDT05GSUdfSk9MSUVUPXkKK0NPTkZJR19aSVNPRlM9eQorQ09ORklHX1VERl9GUz15CitDT05GSUdfVURGX05MUz15CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTg1MAorQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iYXNjaWkiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTX1hBVFRSPXkKK0NPTkZJR19DSUZTX1BPU0lYPXkKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCitDT05GSUdfTkxTX0FTQ0lJPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQorQ09ORklHX05MU19JU084ODU5XzE1PW0KK0NPTkZJR19OTFNfS09JOF9SPW0KK0NPTkZJR19OTFNfS09JOF9VPW0KK0NPTkZJR19OTFNfVVRGOD1tCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorQ09ORklHX0NSQ19DQ0lUVD15CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDX1QxMERJRj15CitDT05GSUdfQ1JDX0lUVV9UPXkKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9eQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9bQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworQ09ORklHX0NSWVBUT19DUkMzMkM9eQorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9hbWlnYW9uZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9hbWlnYW9uZV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYzY2MzOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2FtaWdhb25lX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE2MzYgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzMKKyMgU3VuIEZlYiAgMSAxNDoyMjo0MiAyMDA5CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKK0NPTkZJR182eHg9eQorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19GUFU9eQorQ09ORklHX0FMVElWRUM9eQorQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19QUENfU1REX01NVV8zMj15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CitDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKK0NPTkZJR19DSEVDS19DQUNIRV9DT0hFUkVOQ1k9eQorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKKyMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorQ09ORklHX0lSUV9QRVJfQ1BVPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE1CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19QQ1NQS1JfUExBVEZPUk09eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEPXkKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKK0NPTkZJR19QUENfTVVMVElQTEFURk9STT15CitDT05GSUdfQ0xBU1NJQzMyPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VNQkVEREVENnh4IGlzIG5vdCBzZXQKK0NPTkZJR19BTUlHQU9ORT15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0k4MjU5PXkKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19UQVUgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCitDT05GSUdfSElHSE1FTT15CitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9eQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19NSUdSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfUFBDXzRLX1BBR0VTPXkKKyMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfQURWQU5DRUQgaXMgbm90IHNldAorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KK0NPTkZJR19ORl9DT05OVFJBQ0s9bQorQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQorQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORl9ERUZSQUdfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCisjIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRyBpcyBub3Qgc2V0CitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCisjIENPTkZJR19ORl9OQVRfVEZUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9OQVRfQU1BTkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9QUFRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9IMzIzIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9OQVRfU0lQPW0KKyMgQ09ORklHX0lQX05GX01BTkdMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKK0NPTkZJR19PRl9JMkM9eQorQ09ORklHX1BBUlBPUlQ9eQorQ09ORklHX1BBUlBPUlRfUEM9eQorIyBDT05GSUdfUEFSUE9SVF9TRVJJQUwgaXMgbm90IHNldAorQ09ORklHX1BBUlBPUlRfUENfRklGTz15CisjIENPTkZJR19QQVJQT1JUX1BDX1NVUEVSSU8gaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVF9HU0MgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVF9BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfMTI4NCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CitDT05GSUdfQkxLX0RFVl9GRD15CisjIENPTkZJR19QQVJJREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKK0NPTkZJR19JREVfVElNSU5HUz15CitDT05GSUdfSURFX0FUQVBJPXkKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ0Q9eQorQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfUFJPQ19GUz15CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKKworIworIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKKyMKK0NPTkZJR19CTEtfREVWX0lERVBDST15CisjIENPTkZJR19JREVQQ0lfUENJQlVTX09SREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfR0VORVJJQz15CisjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CisjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TSUlNQUdFPXkKKyMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFg9eQorIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUE9eQorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9eQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz15CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BQQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lNTSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CitDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0wCitDT05GSUdfU0NTSV9TWU01M0M4WFhfREVGQVVMVF9UQUdTPTE2CitDT05GSUdfU0NTSV9TWU01M0M4WFhfTUFYX1RBR1M9NjQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1ZFTkRPUl8zQ09NPXkKK0NPTkZJR19WT1JURVg9eQorIyBDT05GSUdfVFlQSE9PTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CisjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKK0NPTkZJR184MTM5Q1A9eQorQ09ORklHXzgxMzlUT089eQorQ09ORklHXzgxMzlUT09fUElPPXkKKyMgQ09ORklHXzgxMzlUT09fVFVORV9UV0lTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT09fODEyOSBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5X09MRF9SWF9SRVNFVCBpcyBub3Qgc2V0CisjIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0NLRVQgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUExJUCBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KK0NPTkZJR19QUFBfTVVMVElMSU5LPXkKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBfTVBQRT1tCitDT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CitDT05GSUdfU0xIQz1tCisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTUlTQz15CitDT05GSUdfSU5QVVRfUENTUEtSPXkKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1VJTlBVVD15CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX1BBUktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfUFBERVYgaXMgbm90IHNldAorIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CisjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT0JJVD15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX01QQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQorQ09ORklHX0ZCX0REQz15CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CitDT05GSUdfRkJfTUFDTU9ERVM9eQorQ09ORklHX0ZCX0JBQ0tMSUdIVD15CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKK0NPTkZJR19GQl9USUxFQkxJVFRJTkc9eQorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9PRiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DVDY1NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZHQTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfUkFERU9OPXkKK0NPTkZJR19GQl9SQURFT05fSTJDPXkKK0NPTkZJR19GQl9SQURFT05fQkFDS0xJR0hUPXkKKyMgQ09ORklHX0ZCX1JBREVPTl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAorQ09ORklHX0ZCXzNERlg9eQorIyBDT05GSUdfRkJfM0RGWF9BQ0NFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9bQorIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAorIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKK0NPTkZJR19CQUNLTElHSFRfR0VORVJJQz15CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0RJU1BMQVlfU1VQUE9SVD1tCisKKyMKKyMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCisjCisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfVkdBX0NPTlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0xPR089eQorQ09ORklHX0xPR09fTElOVVhfTU9OTz15CitDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9MT0dJVEVDSD15CisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKK0NPTkZJR19ISURfTlRSSUc9eQorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1RPUFNFRUQ9eQorIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorQ09ORklHX1VTQl9VSENJX0hDRD15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9VU1M3MjAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfQ01PUz15CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9QUEMgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9GUz15CisjIENPTkZJR19FWFQ0REVWX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9GU19YQVRUUj15CisjIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0pCRDI9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9eQorIyBDT05GSUdfSk9MSUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9bQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQUZGU19GUz1tCisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CisjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfQU1JR0FfUEFSVElUSU9OPXkKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9bQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PXkKK0NPTkZJR19DUkNfVDEwRElGPXkKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT1tCitDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAorIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfWE1PTj15CitDT05GSUdfWE1PTl9ERUZBVUxUPXkKK0NPTkZJR19YTU9OX0RJU0FTU0VNQkxZPXkKK0NPTkZJR19ERUJVR0dFUj15CitDT05GSUdfSVJRU1RBQ0tTPXkKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPW0KK0NPTkZJR19DUllQVE9fQUxHQVBJMj1tCitDT05GSUdfQ1JZUFRPX0FFQUQyPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9bQorQ09ORklHX0NSWVBUT19IQVNIMj1tCitDT05GSUdfQ1JZUFRPX1JORzI9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9bQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BUkM0PW0KKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTIwMF9kZWZjb25maWcKaW5kZXggODFhZmM4Yi4uYWYwY2Q1NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTIwMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMyCi0jIE1vbiBKYW4gMjYgMjE6NDA6NDQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMworIyBGcmkgRmViICA2IDA5OjQ4OjUzIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzg4LDcgKzM4OCwxMCBAQAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQorQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfUkVBRE9OTFkgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTUwMiw3ICs1MDUsNyBAQAogIwogIyBFRVBST00gc3VwcG9ydAogIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorQ09ORklHX0VFUFJPTV9BVDI0PXkKICMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CkBAIC02NzgsNyArNjgxLDcgQEAKICMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19MWFRfUEhZPXkKICMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldApAQCAtODE1LDggKzgxOCw2IEBACiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5fUlRDPXkKLSMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTEyODEsNyArMTI4Miw2MSBAQAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0RTMTMwNz15CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1BQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZwppbmRleCA4OGM2Mjk1Li4yNTI0MDE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCkBAIC0yMDY3LDkgKzIwNjcsOSBAQAogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQ0FMTF9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKK0NPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUPXkKK0NPTkZJR19GVFJfRklYVVBfU0VMRlRFU1Q9eQorQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1Q9eQogQ09ORklHX1hNT049eQogIyBDT05GSUdfWE1PTl9ERUZBVUxUIGlzIG5vdCBzZXQKIENPTkZJR19YTU9OX0RJU0FTU0VNQkxZPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jb2RlLXBhdGNoaW5nLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY29kZS1wYXRjaGluZy5oCmluZGV4IDEwN2Q5YjkuLjM3YzMyYWJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY29kZS1wYXRjaGluZy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jb2RlLXBhdGNoaW5nLmgKQEAgLTExLDkgKzExLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLSNkZWZpbmUgUFBDX05PUF9JTlNUUgkJMHg2MDAwMDAwMAotI2RlZmluZSBQUENfTFdTWU5DX0lOU1RSCTB4N2MyMDA0YWMKKyNpbmNsdWRlIDxhc20vcHBjLW9wY29kZS5oPgogCiAvKiBGbGFncyBmb3IgY3JlYXRlX2JyYW5jaDoKICAqICJiIiAgID09IGNyZWF0ZV9icmFuY2goYWRkciwgdGFyZ2V0LCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKaW5kZXggMjExNzJiYS4uODBmMzE1ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKQEAgLTE0NSw2ICsxNDUsNyBAQAogI2RlZmluZSBDUFVfRlRSX1VTRV9UQgkJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDAwNDApCiAjZGVmaW5lIENQVV9GVFJfTDJDU1IJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDgwKQogI2RlZmluZSBDUFVfRlRSXzYwMQkJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDAxMDApCisjZGVmaW5lIENQVV9GVFJfREJFTEwJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMjAwKQogI2RlZmluZSBDUFVfRlRSX0NBTl9OQVAJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwNDAwKQogI2RlZmluZSBDUFVfRlRSX0wzQ1IJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwODAwKQogI2RlZmluZSBDUFVfRlRSX0wzX0RJU0FCTEVfTkFQCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAxMDAwKQpAQCAtMzc1LDcgKzM3Niw4IEBACiAJICAgIENQVV9GVFJfTk9EU0lTUkFMSUdOIHwgQ1BVX0ZUUl9OT0VYRUNVVEUpCiAjZGVmaW5lIENQVV9GVFJTX0U1MDBNQwkoQ1BVX0ZUUl9NQVlCRV9DQU5fRE9aRSB8IENQVV9GVFJfVVNFX1RCIHwgXAogCSAgICBDUFVfRlRSX01BWUJFX0NBTl9OQVAgfCBDUFVfRlRSX05PRFNJU1JBTElHTiB8IFwKLQkgICAgQ1BVX0ZUUl9MMkNTUiB8IENQVV9GVFJfTFdTWU5DIHwgQ1BVX0ZUUl9OT0VYRUNVVEUpCisJICAgIENQVV9GVFJfTDJDU1IgfCBDUFVfRlRSX0xXU1lOQyB8IENQVV9GVFJfTk9FWEVDVVRFIHwgXAorCSAgICBDUFVfRlRSX0RCRUxMKQogI2RlZmluZSBDUFVfRlRSU19HRU5FUklDXzMyCShDUFVfRlRSX0NPTU1PTiB8IENQVV9GVFJfTk9EU0lTUkFMSUdOKQogCiAvKiA2NC1iaXQgQ1BVcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RiZWxsLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGJlbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDExODlhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RiZWxsLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IEZyZWVzY2FsZSBTZW1pY29uZHV0b3IsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIHByb3ZpZGVzIG1hc2tzIGFuZCBvcGNvZGUgaW1hZ2VzIGZvciB1c2UgYnkgY29kZSBnZW5lcmF0aW9uLCBlbXVsYXRpb24KKyAqIGFuZCBmb3IgaW5zdHJ1Y3Rpb25zIHRoYXQgb2xkZXIgYXNzZW1ibGVycyBtaWdodCBub3Qga25vdyBhYm91dAorICovCisjaWZuZGVmIF9BU01fUE9XRVJQQ19EQkVMTF9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19EQkVMTF9ICisKKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisKKyNpbmNsdWRlIDxhc20vcHBjLW9wY29kZS5oPgorCisjZGVmaW5lIFBQQ19EQkVMTF9NU0dfQlJEQ0FTVAkoMHgwNDAwMDAwMCkKKyNkZWZpbmUgUFBDX0RCRUxMX1RZUEUoeCkJKCgoeCkgJiAweGYpIDw8IDI4KQorZW51bSBwcGNfZGJlbGwgeworCVBQQ19EQkVMTCA9IDAsCQkvKiBkb29yYmVsbCAqLworCVBQQ19EQkVMTF9DUklUID0gMSwJLyogY3JpdGljYWwgZG9vcmJlbGwgKi8KKwlQUENfR19EQkVMTCA9IDIsCS8qIGd1ZXN0IGRvb3JiZWxsICovCisJUFBDX0dfREJFTExfQ1JJVCA9IDMsCS8qIGd1ZXN0IGNyaXRpY2FsIGRvb3JiZWxsICovCisJUFBDX0dfREJFTExfTUMgPSA0LAkvKiBndWVzdCBtY2hlY2sgZG9vcmJlbGwgKi8KK307CisKKyNpZmRlZiBDT05GSUdfU01QCitleHRlcm4gdW5zaWduZWQgbG9uZyBkYmVsbF9zbXBfbWVzc2FnZVtOUl9DUFVTXTsKK2V4dGVybiB2b2lkIHNtcF9kYmVsbF9tZXNzYWdlX3Bhc3MoaW50IHRhcmdldCwgaW50IG1zZyk7CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIHBwY19tc2dzbmQoZW51bSBwcGNfZGJlbGwgdHlwZSwgdTMyIGZsYWdzLCB1MzIgdGFnKQoreworCXUzMiBtc2cgPSBQUENfREJFTExfVFlQRSh0eXBlKSB8IChmbGFncyAmIFBQQ19EQkVMTF9NU0dfQlJEQ0FTVCkgfAorCQkJKHRhZyAmIDB4MDdmZmZmZmYpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKFBQQ19NU0dTTkQoJTApIDogOiAiciIgKG1zZykpOworfQorCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0RCRUxMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggODZjZWY3ZC4uYzY5ZjJiNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTEwOSwxOCArMTA5LDggQEAKIAkgKiBvbmx5IElTQSBETUEgZGV2aWNlIHdlIHN1cHBvcnQgaXMgdGhlIGZsb3BweSBhbmQgd2UgaGF2ZSBhIGhhY2sKIAkgKiBpbiB0aGUgZmxvcHB5IGRyaXZlciBkaXJlY3RseSB0byBnZXQgYSBkZXZpY2UgZm9yIHVzLgogCSAqLwotCi0JaWYgKHVubGlrZWx5KGRldiA9PSBOVUxMKSB8fCBkZXYtPmFyY2hkYXRhLmRtYV9vcHMgPT0gTlVMTCkgewotI2lmZGVmIENPTkZJR19QUEM2NAorCWlmICh1bmxpa2VseShkZXYgPT0gTlVMTCkpCiAJCXJldHVybiBOVUxMOwotI2Vsc2UKLQkJLyogVXNlIGRlZmF1bHQgb24gMzItYml0IGlmIGRtYV9vcHMgaXMgbm90IHNldCB1cCAqLwotCQkvKiBUT0RPOiBMb25nIHRlcm0sIHdlIHNob3VsZCBmaXggZHJpdmVycyBzbyB0aGF0IGRldiBhbmQKLQkJICogYXJjaGRhdGEgZG1hX29wcyBhcmUgc2V0IHVwIGZvciBhbGwgYnVzZXMuCi0JCSAqLwotCQlyZXR1cm4gJmRtYV9kaXJlY3Rfb3BzOwotI2VuZGlmCi0JfQogCiAJcmV0dXJuIGRldi0+YXJjaGRhdGEuZG1hX29wczsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBiNTYwMGNlLi4xYTg1NmIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC04LDYgKzgsNyBAQAogI2VuZGlmCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9hdXh2ZWMuaD4KQEAgLTE3OCw3ICsxNzksOCBAQAogICAgdGhlIGxvYWRlci4gIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgaXMgb3V0IG9mIHRoZSB3YXkgb2YgdGhlIHByb2dyYW0KICAgIHRoYXQgaXQgd2lsbCAiZXhlYyIsIGFuZCB0aGF0IHRoZXJlIGlzIHN1ZmZpY2llbnQgcm9vbSBmb3IgdGhlIGJyay4gICovCiAKLSNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFICAgICAgICAgKDB4MjAwMDAwMDApCitleHRlcm4gdW5zaWduZWQgbG9uZyByYW5kb21pemVfZXRfZHluKHVuc2lnbmVkIGxvbmcgYmFzZSk7CisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRQkJKHJhbmRvbWl6ZV9ldF9keW4oMHgyMDAwMDAwMCkpCiAKIC8qCiAgKiBPdXIgcmVnaXN0ZXJzIGFyZSBhbHdheXMgdW5zaWduZWQgbG9uZ3MsIHdoZXRoZXIgd2UncmUgYSAzMiBiaXQKQEAgLTI3MCw2ICsyNzIsMTQgQEAKIAkJCQkgICAgICAgaW50IHVzZXNfaW50ZXJwKTsKICNkZWZpbmUgVkRTT19BVVhfRU5UKGEsYikgTkVXX0FVWF9FTlQoYSxiKTsKIAorLyogMUdCIGZvciA2NGJpdCwgOE1CIGZvciAzMmJpdCAqLworI2RlZmluZSBTVEFDS19STkRfTUFTSyAoaXNfMzJiaXRfdGFzaygpID8gXAorCSgweDdmZiA+PiAoUEFHRV9TSElGVCAtIDEyKSkgOiBcCisJKDB4M2ZmZmYgPj4gKFBBR0VfU0hJRlQgLSAxMikpKQorCitleHRlcm4gdW5zaWduZWQgbG9uZyBhcmNoX3JhbmRvbWl6ZV9icmsoc3RydWN0IG1tX3N0cnVjdCAqbW0pOworI2RlZmluZSBhcmNoX3JhbmRvbWl6ZV9icmsgYXJjaF9yYW5kb21pemVfYnJrCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZml4bWFwLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZml4bWFwLmgKaW5kZXggODQyOGIzOC4uZDYwZmQxOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXhtYXAuaApAQCAtNjEsNyArNjEsNyBAQAogICogU29tZSBoYXJkd2FyZSB3YW50cyB0byBnZXQgZml4bWFwcGVkIHdpdGhvdXQgY2FjaGluZy4KICAqLwogI2RlZmluZSBzZXRfZml4bWFwX25vY2FjaGUoaWR4LCBwaHlzKSBcCi0JCV9fc2V0X2ZpeG1hcChpZHgsIHBoeXMsIFBBR0VfS0VSTkVMX05PQ0FDSEUpCisJCV9fc2V0X2ZpeG1hcChpZHgsIHBoeXMsIFBBR0VfS0VSTkVMX05DRykKIAogI2RlZmluZSBjbGVhcl9maXhtYXAoaWR4KSBcCiAJCV9fc2V0X2ZpeG1hcChpZHgsIDAsIF9fcGdwcm90KDApKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCmluZGV4IGU1ZjJhZTguLmRkZTEyOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mdHJhY2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTUsNyArNSw0NCBAQAogI2RlZmluZSBNQ09VTlRfQUREUgkJKChsb25nKShfbWNvdW50KSkKICNkZWZpbmUgTUNPVU5UX0lOU05fU0laRQk0IC8qIHNpemVvZiBtY291bnQgY2FsbCAqLwogCi0jaWZuZGVmIF9fQVNTRU1CTFlfXworI2lmZGVmIF9fQVNTRU1CTFlfXworCisvKiBCYXNlZCBvZmYgb2Ygb2JqZHVtcCBvcHRwdXQgZnJvbSBnbGliYyAqLworCisjZGVmaW5lIE1DT1VOVF9TQVZFX0ZSQU1FCQkJXAorCXN0d3UJcjEsLTQ4KHIxKTsJCQlcCisJc3R3CXIzLCAxMihyMSk7CQkJXAorCXN0dwlyNCwgMTYocjEpOwkJCVwKKwlzdHcJcjUsIDIwKHIxKTsJCQlcCisJc3R3CXI2LCAyNChyMSk7CQkJXAorCW1mbHIJcjM7CQkJCVwKKwlsd3oJcjQsIDUyKHIxKTsJCQlcCisJbWZjcglyNTsJCQkJXAorCXN0dwlyNywgMjgocjEpOwkJCVwKKwlzdHcJcjgsIDMyKHIxKTsJCQlcCisJc3R3CXI5LCAzNihyMSk7CQkJXAorCXN0dwlyMTAsNDAocjEpOwkJCVwKKwlzdHcJcjMsIDQ0KHIxKTsJCQlcCisJc3R3CXI1LCA4KHIxKQorCisjZGVmaW5lIE1DT1VOVF9SRVNUT1JFX0ZSQU1FCQkJXAorCWx3eglyNiwgOChyMSk7CQkJXAorCWx3eglyMCwgNDQocjEpOwkJCVwKKwlsd3oJcjMsIDEyKHIxKTsJCQlcCisJbXRjdHIJcjA7CQkJCVwKKwlsd3oJcjQsIDE2KHIxKTsJCQlcCisJbXRjcglyNjsJCQkJXAorCWx3eglyNSwgMjAocjEpOwkJCVwKKwlsd3oJcjYsIDI0KHIxKTsJCQlcCisJbHd6CXIwLCA1MihyMSk7CQkJXAorCWx3eglyNywgMjgocjEpOwkJCVwKKwlsd3oJcjgsIDMyKHIxKTsJCQlcCisJbXRscglyMDsJCQkJXAorCWx3eglyOSwgMzYocjEpOwkJCVwKKwlsd3oJcjEwLDQwKHIxKTsJCQlcCisJYWRkaQlyMSwgcjEsIDQ4CisKKyNlbHNlIC8qICFfX0FTU0VNQkxZX18gKi8KIGV4dGVybiB2b2lkIF9tY291bnQodm9pZCk7CiAKICNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oaWdobWVtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGlnaG1lbS5oCmluZGV4IDA0ZTRhNjIuLjU0NTAyOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oaWdobWVtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hpZ2htZW0uaApAQCAtMzksMTUgKzM5LDE1IEBACiAgKiBjaHVuayBvZiBSQU0uCiAgKi8KIC8qCi0gKiBXZSB1c2Ugb25lIGZ1bGwgcHRlIHRhYmxlIHdpdGggNEsgcGFnZXMuIEFuZCB3aXRoIDE2Sy82NEsgcGFnZXMgcHRlCi0gKiB0YWJsZSBjb3ZlcnMgZW5vdWdoIG1lbW9yeSAoMzJNQiBhbmQgNTEyTUIgcmVzcC4pIHRoYXQgYm90aCBGSVhNQVAKLSAqIGFuZCBQS01BUCBjYW4gYmUgcGxhY2VkIGluIHNpbmdsZSBwdGUgdGFibGUuIFdlIHVzZSAxMDI0IHBhZ2VzIGZvcgotICogUEtNQVAgaW4gY2FzZSBvZiAxNksvNjRLIHBhZ2VzLgorICogV2UgdXNlIG9uZSBmdWxsIHB0ZSB0YWJsZSB3aXRoIDRLIHBhZ2VzLiBBbmQgd2l0aCAxNksvNjRLLzI1NksgcGFnZXMgcHRlCisgKiB0YWJsZSBjb3ZlcnMgZW5vdWdoIG1lbW9yeSAoMzJNQi81MTJNQi8yR0IgcmVzcC4pLCBzbyB0aGF0IGJvdGggRklYTUFQCisgKiBhbmQgUEtNQVAgY2FuIGJlIHBsYWNlZCBpbiBhIHNpbmdsZSBwdGUgdGFibGUuIFdlIHVzZSA1MTIgcGFnZXMgZm9yIFBLTUFQCisgKiBpbiBjYXNlIG9mIDE2Sy82NEsvMjU2SyBwYWdlIHNpemVzLgogICovCiAjaWZkZWYgQ09ORklHX1BQQ180S19QQUdFUwogI2RlZmluZSBQS01BUF9PUkRFUglQVEVfU0hJRlQKICNlbHNlCi0jZGVmaW5lIFBLTUFQX09SREVSCTEwCisjZGVmaW5lIFBLTUFQX09SREVSCTkKICNlbmRpZgogI2RlZmluZSBMQVNUX1BLTUFQCSgxIDw8IFBLTUFQX09SREVSKQogI2lmbmRlZiBDT05GSUdfUFBDXzRLX1BBR0VTCkBAIC05OSw3ICs5OSw3IEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KIAlCVUdfT04oIXB0ZV9ub25lKCooa21hcF9wdGUtaWR4KSkpOwogI2VuZGlmCi0JX19zZXRfcHRlX2F0KCZpbml0X21tLCB2YWRkciwga21hcF9wdGUtaWR4LCBta19wdGUocGFnZSwgcHJvdCkpOworCV9fc2V0X3B0ZV9hdCgmaW5pdF9tbSwgdmFkZHIsIGttYXBfcHRlLWlkeCwgbWtfcHRlKHBhZ2UsIHByb3QpLCAxKTsKIAlsb2NhbF9mbHVzaF90bGJfcGFnZShOVUxMLCB2YWRkcik7CiAKIAlyZXR1cm4gKHZvaWQqKSB2YWRkcjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9od19pcnEuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9od19pcnEuaAppbmRleCBmNzVhNWZjLi5iN2UwMzRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHdfaXJxLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h3X2lycS5oCkBAIC0xMjksNyArMTI5LDcgQEAKICAqIGludGVycnVwdC1yZXRyaWdnZXI6IHNob3VsZCB3ZSBoYW5kbGUgdGhpcyB2aWEgbG9zdCBpbnRlcnJ1cHRzIGFuZCBJUElzCiAgKiBvciBzaG91bGQgd2Ugbm90IGNhcmUgbGlrZSB3ZSBkbyBub3cgPyAtLUJlbkguCiAgKi8KLXN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZTsKK3N0cnVjdCBpcnFfY2hpcDsKIAogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KICNlbmRpZgkvKiBfQVNNX1BPV0VSUENfSFdfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggNDk0Y2Q4Yi4uMDAxZjJmMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTYzMiw2ICs2MzIsOSBAQAogICogICBpb3JlbWFwX2ZsYWdzIGFuZCBjYW5ub3QgYmUgaG9va2VkIChidXQgY2FuIGJlIHVzZWQgYnkgYSBob29rIG9uIG9uZQogICogICBvZiB0aGUgcHJldmlvdXMgb25lcykKICAqCisgKiAqIF9faW9yZW1hcF9jYWxsZXIgaXMgdGhlIHNhbWUgYXMgYWJvdmUgYnV0IHRha2VzIGFuIGV4cGxpY2l0IGNhbGxlcgorICogICByZWZlcmVuY2UgcmF0aGVyIHRoYW4gdXNpbmcgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApCisgKgogICogKiBfX2lvdW5tYXAsIGlzIHRoZSBsb3cgbGV2ZWwgaW1wbGVtZW50YXRpb24gdXNlZCBieSBpb3VubWFwIGFuZCBjYW5ub3QKICAqICAgYmUgaG9va2VkIChidXQgY2FuIGJlIHVzZWQgYnkgYSBob29rIG9uIGlvdW5tYXApCiAgKgpAQCAtNjQ2LDYgKzY0OSw5IEBACiAKIGV4dGVybiB2b2lkIF9faW9tZW0gKl9faW9yZW1hcChwaHlzX2FkZHJfdCwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworZXh0ZXJuIHZvaWQgX19pb21lbSAqX19pb3JlbWFwX2NhbGxlcihwaHlzX2FkZHJfdCwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmNhbGxlcik7CisKIGV4dGVybiB2b2lkIF9faW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOwogCiBleHRlcm4gdm9pZCBfX2lvbWVtICogX19pb3JlbWFwX2F0KHBoeXNfYWRkcl90IHBhLCB2b2lkICplYSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9scHBhY2EuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9scHBhY2EuaAppbmRleCAyNWFhYTk3Li42ODIzNWY3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbHBwYWNhLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xwcGFjYS5oCkBAIC05Nyw3ICs5Nyw3IEBACiAJdTY0CXNhdmVkX2dwcjQ7CQkvLyBTYXZlZCBHUFI0ICAgICAgICAgICAgICAgICAgIHgyOC14MkYKIAl1NjQJc2F2ZWRfZ3ByNTsJCS8vIFNhdmVkIEdQUjUgICAgICAgICAgICAgICAgICAgeDMwLXgzNwogCi0JdTgJcmVzZXJ2ZWQ0OwkJLy8gUmVzZXJ2ZWQJCQl4MzgteDM4CisJdTgJZHRsX2VuYWJsZV9tYXNrOwkvLyBEaXNwYXRjaCBUcmFjZSBMb2cgbWFzawl4MzgteDM4CiAJdTgJZG9uYXRlX2RlZGljYXRlZF9jcHU7CS8vIERvbmF0ZSBkZWRpY2F0ZWQgQ1BVIGN5Y2xlcyAgeDM5LXgzOQogCXU4CWZwcmVnc19pbl91c2U7CQkvLyBGUCByZWdzIGluIHVzZSAgICAgICAgICAgICAgIHgzQS14M0EKIAl1OAlwbWNyZWdzX2luX3VzZTsJCS8vIFBNQyByZWdzIGluIHVzZSAgICAgICAgICAgICAgeDNCLXgzQgpAQCAtMTMzLDggKzEzMywxMCBAQAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gQ0FDSEVfTElORV80LTUgMHgwMTgwIC0gMHgwMjdGIENvbnRhaW5zIFBNQyBpbnRlcnJ1cHQgZGF0YQogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCXUzMglwYWdlX2luczsJCQkvLyBDTU8gSGludCAtICMgcGFnZSBpbnMgYnkgT1MgIHgwMC14MDQKLQl1OAlwbWNfc2F2ZV9hcmVhWzI1Ml07CS8vIFBNQyBpbnRlcnJ1cHQgQXJlYSAgICAgICAgICAgeDA0LXhGRgorCXUzMglwYWdlX2luczsJCS8vIENNTyBIaW50IC0gIyBwYWdlIGlucyBieSBPUyAgeDAwLXgwMworCXU4CXJlc2VydmVkOFsxNDhdOwkJLy8gUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICB4MDQteDk3CisJdm9sYXRpbGUgdTY0IGR0bF9pZHg7CQkvLyBEaXNwYXRjaCBUcmFjZSBMb2cgaGVhZCBpZHgJeDk4LXg5RgorCXU4CXJlc2VydmVkOVs5Nl07CQkvLyBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgIHhBMC14RkYKIH0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oMHg0MDApKSk7CiAKIGV4dGVybiBzdHJ1Y3QgbHBwYWNhIGxwcGFjYVtdOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKaW5kZXggMjc0MGM0NC4uMGVmZGIxZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaGRlcC5oCkBAIC05MCw3ICs5MCw3IEBACiAJdm9pZAkJKCp0Y2VfZmx1c2gpKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsKTsKIAogCXZvaWQgX19pb21lbSAqCSgqaW9yZW1hcCkocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCQkJCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmNhbGxlcik7CiAJdm9pZAkJKCppb3VubWFwKSh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnRva2VuKTsKIAogI2lmZGVmIENPTkZJR19QTQpAQCAtMzI3LDggKzMyNyw2IEBACiAgKi8KIC8qIFByaW50IGEgYm9vdCBwcm9ncmVzcyBtZXNzYWdlLiAqLwogdm9pZCBwcGM2NF9ib290X21zZyh1bnNpZ25lZCBpbnQgc3JjLCBjb25zdCBjaGFyICptc2cpOwotLyogUHJpbnQgYSB0ZXJtaW5hdGlvbiBtZXNzYWdlIChwcmludCBvbmx5IC0tIGRvZXMgbm90IHN0b3AgdGhlIGtlcm5lbCkgKi8KLXZvaWQgcHBjNjRfdGVybWluYXRlX21zZyh1bnNpZ25lZCBpbnQgc3JjLCBjb25zdCBjaGFyICptc2cpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbG9nX2Vycm9yKGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGVycl90eXBlLCBpbnQgZmF0YWwpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LTQ0eC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS00NHguaAppbmRleCAyN2NjNmZkLi4zYzg2NTc2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LTQ0eC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtNDR4LmgKQEAgLTgzLDYgKzgzLDggQEAKICNkZWZpbmUgUFBDNDR4X1RMQkVfU0laRQlQUEM0NHhfVExCXzE2SwogI2VsaWYgKFBBR0VfU0hJRlQgPT0gMTYpCiAjZGVmaW5lIFBQQzQ0eF9UTEJFX1NJWkUJUFBDNDR4X1RMQl82NEsKKyNlbGlmIChQQUdFX1NISUZUID09IDE4KQorI2RlZmluZSBQUEM0NHhfVExCRV9TSVpFCVBQQzQ0eF9UTEJfMjU2SwogI2Vsc2UKICNlcnJvciAiVW5zdXBwb3J0ZWQgUEFHRV9TSVpFIgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWJvb2szZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1ib29rM2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTc0Y2ZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1ib29rM2UuaApAQCAtMCwwICsxLDEwNSBAQAorI2lmbmRlZiBfQVNNX1BPV0VSUENfTU1VX0JPT0szRV9IXworI2RlZmluZSBfQVNNX1BPV0VSUENfTU1VX0JPT0szRV9IXworLyoKKyAqIEZyZWVzY2FsZSBCb29rLUUvQm9vay0zZSAoSVNBIDIuMDYrKSBNTVUgc3VwcG9ydAorICovCisKKy8qIEJvb2stM2UgZGVmaW5lZCBwYWdlIHNpemVzICovCisjZGVmaW5lIEJPT0szRV9QQUdFU1pfMUsJMAorI2RlZmluZSBCT09LM0VfUEFHRVNaXzJLCTEKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl80SwkyCisjZGVmaW5lIEJPT0szRV9QQUdFU1pfOEsJMworI2RlZmluZSBCT09LM0VfUEFHRVNaXzE2Swk0CisjZGVmaW5lIEJPT0szRV9QQUdFU1pfMzJLCTUKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl82NEsJNgorI2RlZmluZSBCT09LM0VfUEFHRVNaXzEyOEsJNworI2RlZmluZSBCT09LM0VfUEFHRVNaXzI1NksJOAorI2RlZmluZSBCT09LM0VfUEFHRVNaXzUxMksJOQorI2RlZmluZSBCT09LM0VfUEFHRVNaXzFNCTEwCisjZGVmaW5lIEJPT0szRV9QQUdFU1pfMk0JMTEKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl80TQkxMgorI2RlZmluZSBCT09LM0VfUEFHRVNaXzhNCTEzCisjZGVmaW5lIEJPT0szRV9QQUdFU1pfMTZNCTE0CisjZGVmaW5lIEJPT0szRV9QQUdFU1pfMzJNCTE1CisjZGVmaW5lIEJPT0szRV9QQUdFU1pfNjRNCTE2CisjZGVmaW5lIEJPT0szRV9QQUdFU1pfMTI4TQkxNworI2RlZmluZSBCT09LM0VfUEFHRVNaXzI1Nk0JMTgKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl81MTJNCTE5CisjZGVmaW5lIEJPT0szRV9QQUdFU1pfMUdCCTIwCisjZGVmaW5lIEJPT0szRV9QQUdFU1pfMkdCCTIxCisjZGVmaW5lIEJPT0szRV9QQUdFU1pfNEdCCTIyCisjZGVmaW5lIEJPT0szRV9QQUdFU1pfOEdCCTIzCisjZGVmaW5lIEJPT0szRV9QQUdFU1pfMTZHQgkyNAorI2RlZmluZSBCT09LM0VfUEFHRVNaXzMyR0IJMjUKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl82NEdCCTI2CisjZGVmaW5lIEJPT0szRV9QQUdFU1pfMTI4R0IJMjcKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8yNTZHQgkyOAorI2RlZmluZSBCT09LM0VfUEFHRVNaXzUxMkdCCTI5CisjZGVmaW5lIEJPT0szRV9QQUdFU1pfMVRCCTMwCisjZGVmaW5lIEJPT0szRV9QQUdFU1pfMlRCCTMxCisKKyNkZWZpbmUgTUFTMF9UTEJTRUwoeCkJKCh4IDw8IDI4KSAmIDB4MzAwMDAwMDApCisjZGVmaW5lIE1BUzBfRVNFTCh4KQkoKHggPDwgMTYpICYgMHgwRkZGMDAwMCkKKyNkZWZpbmUgTUFTMF9OVih4KQkoKHgpICYgMHgwMDAwMEZGRikKKworI2RlZmluZSBNQVMxX1ZBTElEIAkweDgwMDAwMDAwCisjZGVmaW5lIE1BUzFfSVBST1QJMHg0MDAwMDAwMAorI2RlZmluZSBNQVMxX1RJRCh4KQkoKHggPDwgMTYpICYgMHgzRkZGMDAwMCkKKyNkZWZpbmUgTUFTMV9JTkQJMHgwMDAwMjAwMAorI2RlZmluZSBNQVMxX1RTCQkweDAwMDAxMDAwCisjZGVmaW5lIE1BUzFfVFNJWkUoeCkJKCh4IDw8IDcpICYgMHgwMDAwMEY4MCkKKworI2RlZmluZSBNQVMyX0VQTgkweEZGRkZGMDAwCisjZGVmaW5lIE1BUzJfWDAJCTB4MDAwMDAwNDAKKyNkZWZpbmUgTUFTMl9YMQkJMHgwMDAwMDAyMAorI2RlZmluZSBNQVMyX1cJCTB4MDAwMDAwMTAKKyNkZWZpbmUgTUFTMl9JCQkweDAwMDAwMDA4CisjZGVmaW5lIE1BUzJfTQkJMHgwMDAwMDAwNAorI2RlZmluZSBNQVMyX0cJCTB4MDAwMDAwMDIKKyNkZWZpbmUgTUFTMl9FCQkweDAwMDAwMDAxCisjZGVmaW5lIE1BUzJfRVBOX01BU0soc2l6ZSkJCSh+MCA8PCAoc2l6ZSArIDEwKSkKKyNkZWZpbmUgTUFTMl9WQUwoYWRkciwgc2l6ZSwgZmxhZ3MpCSgoYWRkcikgJiBNQVMyX0VQTl9NQVNLKHNpemUpIHwgKGZsYWdzKSkKKworI2RlZmluZSBNQVMzX1JQTgkweEZGRkZGMDAwCisjZGVmaW5lIE1BUzNfVTAJCTB4MDAwMDAyMDAKKyNkZWZpbmUgTUFTM19VMQkJMHgwMDAwMDEwMAorI2RlZmluZSBNQVMzX1UyCQkweDAwMDAwMDgwCisjZGVmaW5lIE1BUzNfVTMJCTB4MDAwMDAwNDAKKyNkZWZpbmUgTUFTM19VWAkJMHgwMDAwMDAyMAorI2RlZmluZSBNQVMzX1NYCQkweDAwMDAwMDEwCisjZGVmaW5lIE1BUzNfVVcJCTB4MDAwMDAwMDgKKyNkZWZpbmUgTUFTM19TVwkJMHgwMDAwMDAwNAorI2RlZmluZSBNQVMzX1VSCQkweDAwMDAwMDAyCisjZGVmaW5lIE1BUzNfU1IJCTB4MDAwMDAwMDEKKworI2RlZmluZSBNQVM0X1RMQlNFTEQoeCkgTUFTMF9UTEJTRUwoeCkKKyNkZWZpbmUgTUFTNF9JTkRECTB4MDAwMDgwMDAKKyNkZWZpbmUgTUFTNF9UU0laRUQoeCkJTUFTMV9UU0laRSh4KQorI2RlZmluZSBNQVM0X1gwRAkweDAwMDAwMDQwCisjZGVmaW5lIE1BUzRfWDFECTB4MDAwMDAwMjAKKyNkZWZpbmUgTUFTNF9XRAkJMHgwMDAwMDAxMAorI2RlZmluZSBNQVM0X0lECQkweDAwMDAwMDA4CisjZGVmaW5lIE1BUzRfTUQJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTUFTNF9HRAkJMHgwMDAwMDAwMgorI2RlZmluZSBNQVM0X0VECQkweDAwMDAwMDAxCisKKyNkZWZpbmUgTUFTNl9TUElEMAkweDNGRkYwMDAwCisjZGVmaW5lIE1BUzZfU1BJRDEJMHgwMDAwN0ZGRQorI2RlZmluZSBNQVM2X0lTSVpFKHgpCU1BUzFfVFNJWkUoeCkKKyNkZWZpbmUgTUFTNl9TQVMJMHgwMDAwMDAwMQorI2RlZmluZSBNQVM2X1NQSUQJTUFTNl9TUElEMAorCisjZGVmaW5lIE1BUzdfUlBOCTB4RkZGRkZGRkYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworZXh0ZXJuIHVuc2lnbmVkIGludCB0bGJjYW1faW5kZXg7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJaWQ7CisJdW5zaWduZWQgaW50CWFjdGl2ZTsKKwl1bnNpZ25lZCBsb25nCXZkc29fYmFzZTsKK30gbW1fY29udGV4dF90OworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19NTVVfQk9PSzNFX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWZzbC1ib29rZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1mc2wtYm9va2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI4NWI2NC4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWZzbC1ib29rZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotI2lmbmRlZiBfQVNNX1BPV0VSUENfTU1VX0ZTTF9CT09LRV9IXwotI2RlZmluZSBfQVNNX1BPV0VSUENfTU1VX0ZTTF9CT09LRV9IXwotLyoKLSAqIEZyZWVzY2FsZSBCb29rLUUgTU1VIHN1cHBvcnQKLSAqLwotCi0vKiBCb29rLUUgZGVmaW5lZCBwYWdlIHNpemVzICovCi0jZGVmaW5lIEJPT0tFX1BBR0VTWl8xSwkJMAotI2RlZmluZSBCT09LRV9QQUdFU1pfNEsJCTEKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzE2SwkyCi0jZGVmaW5lIEJPT0tFX1BBR0VTWl82NEsJMwotI2RlZmluZSBCT09LRV9QQUdFU1pfMjU2Swk0Ci0jZGVmaW5lIEJPT0tFX1BBR0VTWl8xTQkJNQotI2RlZmluZSBCT09LRV9QQUdFU1pfNE0JCTYKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzE2TQk3Ci0jZGVmaW5lIEJPT0tFX1BBR0VTWl82NE0JOAotI2RlZmluZSBCT09LRV9QQUdFU1pfMjU2TQk5Ci0jZGVmaW5lIEJPT0tFX1BBR0VTWl8xR0IJMTAKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzRHQgkxMQotI2RlZmluZSBCT09LRV9QQUdFU1pfMTZHQgkxMgotI2RlZmluZSBCT09LRV9QQUdFU1pfNjRHQgkxMwotI2RlZmluZSBCT09LRV9QQUdFU1pfMjU2R0IJMTQKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzFUQgkxNQotCi0jZGVmaW5lIE1BUzBfVExCU0VMKHgpCSgoeCA8PCAyOCkgJiAweDMwMDAwMDAwKQotI2RlZmluZSBNQVMwX0VTRUwoeCkJKCh4IDw8IDE2KSAmIDB4MEZGRjAwMDApCi0jZGVmaW5lIE1BUzBfTlYoeCkJKCh4KSAmIDB4MDAwMDBGRkYpCi0KLSNkZWZpbmUgTUFTMV9WQUxJRCAJMHg4MDAwMDAwMAotI2RlZmluZSBNQVMxX0lQUk9UCTB4NDAwMDAwMDAKLSNkZWZpbmUgTUFTMV9USUQoeCkJKCh4IDw8IDE2KSAmIDB4M0ZGRjAwMDApCi0jZGVmaW5lIE1BUzFfVFMJCTB4MDAwMDEwMDAKLSNkZWZpbmUgTUFTMV9UU0laRSh4KQkoKHggPDwgOCkgJiAweDAwMDAwRjAwKQotCi0jZGVmaW5lIE1BUzJfRVBOCTB4RkZGRkYwMDAKLSNkZWZpbmUgTUFTMl9YMAkJMHgwMDAwMDA0MAotI2RlZmluZSBNQVMyX1gxCQkweDAwMDAwMDIwCi0jZGVmaW5lIE1BUzJfVwkJMHgwMDAwMDAxMAotI2RlZmluZSBNQVMyX0kJCTB4MDAwMDAwMDgKLSNkZWZpbmUgTUFTMl9NCQkweDAwMDAwMDA0Ci0jZGVmaW5lIE1BUzJfRwkJMHgwMDAwMDAwMgotI2RlZmluZSBNQVMyX0UJCTB4MDAwMDAwMDEKLSNkZWZpbmUgTUFTMl9FUE5fTUFTSyhzaXplKQkJKH4wIDw8ICgyKihzaXplKSArIDEwKSkKLSNkZWZpbmUgTUFTMl9WQUwoYWRkciwgc2l6ZSwgZmxhZ3MpCSgoYWRkcikgJiBNQVMyX0VQTl9NQVNLKHNpemUpIHwgKGZsYWdzKSkKLQotI2RlZmluZSBNQVMzX1JQTgkweEZGRkZGMDAwCi0jZGVmaW5lIE1BUzNfVTAJCTB4MDAwMDAyMDAKLSNkZWZpbmUgTUFTM19VMQkJMHgwMDAwMDEwMAotI2RlZmluZSBNQVMzX1UyCQkweDAwMDAwMDgwCi0jZGVmaW5lIE1BUzNfVTMJCTB4MDAwMDAwNDAKLSNkZWZpbmUgTUFTM19VWAkJMHgwMDAwMDAyMAotI2RlZmluZSBNQVMzX1NYCQkweDAwMDAwMDEwCi0jZGVmaW5lIE1BUzNfVVcJCTB4MDAwMDAwMDgKLSNkZWZpbmUgTUFTM19TVwkJMHgwMDAwMDAwNAotI2RlZmluZSBNQVMzX1VSCQkweDAwMDAwMDAyCi0jZGVmaW5lIE1BUzNfU1IJCTB4MDAwMDAwMDEKLQotI2RlZmluZSBNQVM0X1RMQlNFTEQoeCkgTUFTMF9UTEJTRUwoeCkKLSNkZWZpbmUgTUFTNF9USUREU0VMCTB4MDAwRjAwMDAKLSNkZWZpbmUgTUFTNF9UU0laRUQoeCkJTUFTMV9UU0laRSh4KQotI2RlZmluZSBNQVM0X1gwRAkweDAwMDAwMDQwCi0jZGVmaW5lIE1BUzRfWDFECTB4MDAwMDAwMjAKLSNkZWZpbmUgTUFTNF9XRAkJMHgwMDAwMDAxMAotI2RlZmluZSBNQVM0X0lECQkweDAwMDAwMDA4Ci0jZGVmaW5lIE1BUzRfTUQJCTB4MDAwMDAwMDQKLSNkZWZpbmUgTUFTNF9HRAkJMHgwMDAwMDAwMgotI2RlZmluZSBNQVM0X0VECQkweDAwMDAwMDAxCi0KLSNkZWZpbmUgTUFTNl9TUElEMAkweDNGRkYwMDAwCi0jZGVmaW5lIE1BUzZfU1BJRDEJMHgwMDAwN0ZGRQotI2RlZmluZSBNQVM2X1NBUwkweDAwMDAwMDAxCi0jZGVmaW5lIE1BUzZfU1BJRAlNQVM2X1NQSUQwCi0KLSNkZWZpbmUgTUFTN19SUE4JMHhGRkZGRkZGRgotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi1leHRlcm4gdW5zaWduZWQgaW50IHRsYmNhbV9pbmRleDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGludAlpZDsKLQl1bnNpZ25lZCBpbnQJYWN0aXZlOwotCXVuc2lnbmVkIGxvbmcJdmRzb19iYXNlOwotfSBtbV9jb250ZXh0X3Q7Ci0jZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwotCi0jZW5kaWYgLyogX0FTTV9QT1dFUlBDX01NVV9GU0xfQk9PS0VfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtaGFzaDY0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2g2NC5oCmluZGV4IDY4Yjc1MjYuLjk4YzEwNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtaGFzaDY0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1oYXNoNjQuaApAQCAtMjg0LDggKzI4NCw2IEBACiAJCQkgIHVuc2lnbmVkIGxvbmcgbnVtYmVyX29mX3BhZ2VzKTsKIGV4dGVybiB2b2lkIGRlbW90ZV9zZWdtZW50XzRrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpOwogCi1leHRlcm4gdm9pZCBodGFiX2luaXRpYWxpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBodGFiX2luaXRpYWxpemVfc2Vjb25kYXJ5KHZvaWQpOwogZXh0ZXJuIHZvaWQgaHB0ZV9pbml0X25hdGl2ZSh2b2lkKTsKIGV4dGVybiB2b2lkIGhwdGVfaW5pdF9scGFyKHZvaWQpOwogZXh0ZXJuIHZvaWQgaHB0ZV9pbml0X2lTZXJpZXModm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LmgKaW5kZXggNmU3NjM5OS4uY2JmMTU0MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUuaApAQCAtMzYsOSArMzYsOSBAQAogICovCiAjZGVmaW5lIE1NVV9GVFJfVVNFX1RMQklWQVhfQkNBU1QJQVNNX0NPTlNUKDB4MDAwNDAwMDApCiAKLS8qIEVuYWJsZSB1c2Ugb2YgdGxiaWx4IGludmFsaWRhdGUtYnktUElEIHZhcmlhbnQuCisvKiBFbmFibGUgdXNlIG9mIHRsYmlseCBpbnZhbGlkYXRlIGluc3RydWN0aW9ucy4KICAqLwotI2RlZmluZSBNTVVfRlRSX1VTRV9UTEJJTFhfUElECQlBU01fQ09OU1QoMHgwMDA4MDAwMCkKKyNkZWZpbmUgTU1VX0ZUUl9VU0VfVExCSUxYCQlBU01fQ09OU1QoMHgwMDA4MDAwMCkKIAogLyogVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgcHJvY2Vzc29yIGNhbm5vdCBoYW5kbGUgbXVsdGlwbGUgb3V0c3RhbmRpbmcKICAqIGJyb2FkY2FzdCB0bGJpdmF4IG9yIHRsYnN5bmMuIFRoaXMgbWFrZXMgdGhlIGNvZGUgdXNlIGEgc3BpbmxvY2sKQEAgLTQ2LDYgKzQ2LDEyIEBACiAgKi8KICNkZWZpbmUgTU1VX0ZUUl9MT0NLX0JDQVNUX0lOVkFMCUFTTV9DT05TVCgweDAwMTAwMDAwKQogCisvKiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBwcm9jZXNzb3IgZG9lc24ndCBoYW5kbGUgd2F5IHNlbGVjdGlvbgorICogcHJvcGVybHkgYW5kIG5lZWRzIFNXIHRvIHRyYWNrIGFuZCB1cGRhdGUgdGhlIExSVSBzdGF0ZS4gIFRoaXMKKyAqIGlzIHNwZWNpZmljIHRvIGFuIGVycmF0YSBvbiBlMzAwYzIvYzMvYzQgY2xhc3MgcGFydHMKKyAqLworI2RlZmluZSBNTVVfRlRSX05FRURfRFRMQl9TV19MUlUJQVNNX0NPTlNUKDB4MDAyMDAwMDApCisKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAKQEAgLTU2LDYgKzYyLDEwIEBACiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgX19zdGFydF9fX21tdV9mdHJfZml4dXAsIF9fc3RvcF9fX21tdV9mdHJfZml4dXA7CiAKKy8qIE1NVSBpbml0aWFsaXphdGlvbiAoNjQtYml0IG9ubHkgZm8gbm93KSAqLworZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9tbXUodm9pZCk7CitleHRlcm4gdm9pZCBlYXJseV9pbml0X21tdV9zZWNvbmRhcnkodm9pZCk7CisKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKIApAQCAtNzEsOSArODEsOSBAQAogI2VsaWYgZGVmaW5lZChDT05GSUdfNDR4KQogLyogNDR4LXN0eWxlIHNvZnR3YXJlIGxvYWRlZCBUTEIgKi8KICMgIGluY2x1ZGUgPGFzbS9tbXUtNDR4Lmg+Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19GU0xfQk9PS0UpCi0vKiBGcmVlc2NhbGUgQm9vay1FIHNvZnR3YXJlIGxvYWRlZCBUTEIgKi8KLSMgIGluY2x1ZGUgPGFzbS9tbXUtZnNsLWJvb2tlLmg+CisjZWxpZiBkZWZpbmVkKENPTkZJR19QUENfQk9PSzNFX01NVSkKKy8qIEZyZWVzY2FsZSBCb29rLUUgc29mdHdhcmUgbG9hZGVkIFRMQiBvciBCb29rLTNlIChJU0EgMi4wNispIE1NVSAqLworIyAgaW5jbHVkZSA8YXNtL21tdS1ib29rM2UuaD4KICNlbGlmIGRlZmluZWQgKENPTkZJR19QUENfOHh4KQogLyogTW90b3JvbGEvRnJlZXNjYWxlIDh4eCBzb2Z0d2FyZSBsb2FkZWQgVExCICovCiAjICBpbmNsdWRlIDxhc20vbW11LTh4eC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCBhYjRmMTkyLi5iNzA2MzY2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMzEsNyArMzEsNyBAQAogCQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAkvKiBNYXJrIHRoaXMgY29udGV4dCBoYXMgYmVlbiB1c2VkIG9uIHRoZSBuZXcgQ1BVICovCi0JY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG5leHQtPmNwdV92bV9tYXNrKTsKKwljcHVtYXNrX3NldF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbV9jcHVtYXNrKG5leHQpKTsKIAogCS8qIDMyLWJpdCBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBQR0RJUiBpbiB0aGUgdGhyZWFkIHN0cnVjdCAqLwogI2lmZGVmIENPTkZJR19QUEMzMgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21wYzUyeHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1Mnh4LmgKaW5kZXggODFhMjM5My4uNTJlMDQ5YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21wYzUyeHguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTJ4eC5oCkBAIC0yNzMsNiArMjczLDcgQEAKIGV4dGVybiB2b2lkIG1wYzUyeHhfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpOwogZXh0ZXJuIHZvaWQgbXBjNTJ4eF9tYXBfY29tbW9uX2RldmljZXModm9pZCk7CiBleHRlcm4gaW50IG1wYzUyeHhfc2V0X3BzY19jbGtkaXYoaW50IHBzY19pZCwgaW50IGNsa2Rpdik7CitleHRlcm4gdW5zaWduZWQgaW50IG1wYzUyeHhfZ2V0X3h0YWxfZnJlcShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQgbXBjNTJ4eF9yZXN0YXJ0KGNoYXIgKmNtZCk7CiAKIC8qIG1wYzUyeHhfcGljLmMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDE5N2Q1NjkuLjMyY2JmMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTksMTIgKzE5LDE0IEBACiAjaW5jbHVkZSA8YXNtL2tkdW1wLmg+CiAKIC8qCi0gKiBPbiByZWd1bGFyIFBQQzMyIHBhZ2Ugc2l6ZSBpcyA0SyAoYnV0IHdlIHN1cHBvcnQgNEsvMTZLLzY0SyBwYWdlcworICogT24gcmVndWxhciBQUEMzMiBwYWdlIHNpemUgaXMgNEsgKGJ1dCB3ZSBzdXBwb3J0IDRLLzE2Sy82NEsvMjU2SyBwYWdlcwogICogb24gUFBDNDR4KS4gRm9yIFBQQzY0IHdlIHN1cHBvcnQgZWl0aGVyIDRLIG9yIDY0SyBzb2Z0d2FyZQogICogcGFnZSBzaXplLiBXaGVuIHVzaW5nIDY0SyBwYWdlcyBob3dldmVyLCB3aGV0aGVyIHdlIGFyZSByZWFsbHkgc3VwcG9ydGluZwogICogNjRLIHBhZ2VzIGluIEhXIG9yIG5vdCBpcyBpcnJlbGV2YW50IHRvIHRob3NlIGRlZmluaXRpb25zLgogICovCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDXzY0S19QQUdFUykKKyNpZiBkZWZpbmVkKENPTkZJR19QUENfMjU2S19QQUdFUykKKyNkZWZpbmUgUEFHRV9TSElGVAkJMTgKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ182NEtfUEFHRVMpCiAjZGVmaW5lIFBBR0VfU0hJRlQJCTE2CiAjZWxpZiBkZWZpbmVkKENPTkZJR19QUENfMTZLX1BBR0VTKQogI2RlZmluZSBQQUdFX1NISUZUCQkxNApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2VfMzIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzMyLmgKaW5kZXggMTQ1OGQ5NS4uYTBlM2Y2ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2VfMzIuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZV8zMi5oCkBAIC0xOSw3ICsxOSwxMSBAQAogI2RlZmluZSBQVEVfRkxBR1NfT0ZGU0VUCTAKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BQQ18yNTZLX1BBR0VTCisjZGVmaW5lIFBURV9TSElGVAkoUEFHRV9TSElGVCAtIFBURV9UX0xPRzIgLSAyKQkvKiAxLzQgb2YgYSBwYWdlICovCisjZWxzZQogI2RlZmluZSBQVEVfU0hJRlQJKFBBR0VfU0hJRlQgLSBQVEVfVF9MT0cyKQkvKiBmdWxsIHBhZ2UgKi8KKyNlbmRpZgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTRrLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS00ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGJjYTRlNy4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS00ay5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9QT1dFUlBDX1BHVEFCTEVfNEtfSAotI2RlZmluZSBfQVNNX1BPV0VSUENfUEdUQUJMRV80S19ICi0vKgotICogRW50cmllcyBwZXIgcGFnZSBkaXJlY3RvcnkgbGV2ZWwuICBUaGUgUFRFIGxldmVsIG11c3QgdXNlIGEgNjRiIHJlY29yZAotICogZm9yIGVhY2ggcGFnZSB0YWJsZSBlbnRyeS4gIFRoZSBQTUQgYW5kIFBHRCBsZXZlbCB1c2UgYSAzMmIgcmVjb3JkIGZvcgotICogZWFjaCBlbnRyeSBieSBhc3N1bWluZyB0aGF0IGVhY2ggZW50cnkgaXMgcGFnZSBhbGlnbmVkLgotICovCi0jZGVmaW5lIFBURV9JTkRFWF9TSVpFICA5Ci0jZGVmaW5lIFBNRF9JTkRFWF9TSVpFICA3Ci0jZGVmaW5lIFBVRF9JTkRFWF9TSVpFICA3Ci0jZGVmaW5lIFBHRF9JTkRFWF9TSVpFICA5Ci0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0jZGVmaW5lIFBURV9UQUJMRV9TSVpFCShzaXplb2YocHRlX3QpIDw8IFBURV9JTkRFWF9TSVpFKQotI2RlZmluZSBQTURfVEFCTEVfU0laRQkoc2l6ZW9mKHBtZF90KSA8PCBQTURfSU5ERVhfU0laRSkKLSNkZWZpbmUgUFVEX1RBQkxFX1NJWkUJKHNpemVvZihwdWRfdCkgPDwgUFVEX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBHRF9UQUJMRV9TSVpFCShzaXplb2YocGdkX3QpIDw8IFBHRF9JTkRFWF9TSVpFKQotI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZGVmaW5lIFBUUlNfUEVSX1BURQkoMSA8PCBQVEVfSU5ERVhfU0laRSkKLSNkZWZpbmUgUFRSU19QRVJfUE1ECSgxIDw8IFBNRF9JTkRFWF9TSVpFKQotI2RlZmluZSBQVFJTX1BFUl9QVUQJKDEgPDwgUE1EX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBUUlNfUEVSX1BHRAkoMSA8PCBQR0RfSU5ERVhfU0laRSkKLQotLyogUE1EX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAgKi8KLSNkZWZpbmUgUE1EX1NISUZUCShQQUdFX1NISUZUICsgUFRFX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBNRF9TSVpFCSgxVUwgPDwgUE1EX1NISUZUKQotI2RlZmluZSBQTURfTUFTSwkofihQTURfU0laRS0xKSkKLQotLyogV2l0aCA0ayBiYXNlIHBhZ2Ugc2l6ZSwgaHVnZXBhZ2UgUFRFcyBnbyBhdCB0aGUgUE1EIGxldmVsICovCi0jZGVmaW5lIE1JTl9IVUdFUFRFX1NISUZUCVBNRF9TSElGVAotCi0vKiBQVURfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCi0jZGVmaW5lIFBVRF9TSElGVAkoUE1EX1NISUZUICsgUE1EX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBVRF9TSVpFCSgxVUwgPDwgUFVEX1NISUZUKQotI2RlZmluZSBQVURfTUFTSwkofihQVURfU0laRS0xKSkKLQotLyogUEdESVJfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgZm91cnRoLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLwotI2RlZmluZSBQR0RJUl9TSElGVAkoUFVEX1NISUZUICsgUFVEX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKLSNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQotCi0vKiBQVEUgYml0cyAqLwotI2RlZmluZSBfUEFHRV9IQVNIUFRFCTB4MDQwMCAvKiBzb2Z0d2FyZTogcHRlIGhhcyBhbiBhc3NvY2lhdGVkIEhQVEUgKi8KLSNkZWZpbmUgX1BBR0VfU0VDT05EQVJZIDB4ODAwMCAvKiBzb2Z0d2FyZTogSFBURSBpcyBpbiBzZWNvbmRhcnkgZ3JvdXAgKi8KLSNkZWZpbmUgX1BBR0VfR1JPVVBfSVggIDB4NzAwMCAvKiBzb2Z0d2FyZTogSFBURSBpbmRleCB3aXRoaW4gZ3JvdXAgKi8KLSNkZWZpbmUgX1BBR0VfRl9TRUNPTkQgIF9QQUdFX1NFQ09OREFSWQotI2RlZmluZSBfUEFHRV9GX0dJWCAgICAgX1BBR0VfR1JPVVBfSVgKLSNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkweDEwMDAwIC8qIHNvZnR3YXJlOiBzcGVjaWFsIHBhZ2UgKi8KLSNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NQRUNJQUwKLQotLyogUFRFIGZsYWdzIHRvIGNvbnNlcnZlIGZvciBIUFRFIGlkZW50aWZpY2F0aW9uICovCi0jZGVmaW5lIF9QQUdFX0hQVEVGTEFHUyAoX1BBR0VfQlVTWSB8IF9QQUdFX0hBU0hQVEUgfCBcCi0JCQkgX1BBR0VfU0VDT05EQVJZIHwgX1BBR0VfR1JPVVBfSVgpCi0KLS8qIFRoZXJlIGlzIG5vIDRLIFBGTiBoYWNrIG9uIDRLIHBhZ2VzICovCi0jZGVmaW5lIF9QQUdFXzRLX1BGTgkwCi0KLS8qIFBBR0VfTUFTSyBnaXZlcyB0aGUgcmlnaHQgYW5zd2VyIGJlbG93LCBidXQgb25seSBieSBhY2NpZGVudCAqLwotLyogSXQgc2hvdWxkIGJlIHByZXNlcnZpbmcgdGhlIGhpZ2ggNDggYml0cyBhbmQgdGhlbiBzcGVjaWZpY2FsbHkgKi8KLS8qIHByZXNlcnZpbmcgX1BBR0VfU0VDT05EQVJZIHwgX1BBR0VfR1JPVVBfSVggKi8KLSNkZWZpbmUgX1BBR0VfQ0hHX01BU0sJKFBBR0VfTUFTSyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgX1BBR0VfSFBURUZMQUdTIHwgX1BBR0VfU1BFQ0lBTCkKLQotLyogQml0cyB0byBtYXNrIG91dCBmcm9tIGEgUE1EIHRvIGdldCB0byB0aGUgUFRFIHBhZ2UgKi8KLSNkZWZpbmUgUE1EX01BU0tFRF9CSVRTCQkwCi0vKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQVUQgdG8gZ2V0IHRvIHRoZSBQTUQgcGFnZSAqLwotI2RlZmluZSBQVURfTUFTS0VEX0JJVFMJCTAKLS8qIEJpdHMgdG8gbWFzayBvdXQgZnJvbSBhIFBHRCB0byBnZXQgdG8gdGhlIFBVRCBwYWdlICovCi0jZGVmaW5lIFBHRF9NQVNLRURfQklUUwkJMAotCi0vKiBzaGlmdCB0byBwdXQgcGFnZSBudW1iZXIgaW50byBwdGUgKi8KLSNkZWZpbmUgUFRFX1JQTl9TSElGVAkoMTcpCi0KLSNpZmRlZiBTVFJJQ1RfTU1fVFlQRUNIRUNLUwotI2RlZmluZSBfX3JlYWxfcHRlKGUscCkJCSgocmVhbF9wdGVfdCl7KGUpfSkKLSNkZWZpbmUgX19ycHRlX3RvX3B0ZShyKQkoKHIpLnB0ZSkKLSNlbHNlCi0jZGVmaW5lIF9fcmVhbF9wdGUoZSxwKQkJKGUpCi0jZGVmaW5lIF9fcnB0ZV90b19wdGUocikJKF9fcHRlKHIpKQotI2VuZGlmCi0jZGVmaW5lIF9fcnB0ZV90b19oaWR4KHIsaW5kZXgpCShwdGVfdmFsKF9fcnB0ZV90b19wdGUocikpID4+IDEyKQotCi0jZGVmaW5lIHB0ZV9pdGVyYXRlX2hhc2hlZF9zdWJwYWdlcyhycHRlLCBwc2l6ZSwgdmEsIGluZGV4LCBzaGlmdCkgICAgICAgXAotCWRvIHsJCQkJCQkJICAgICAgICAgXAotCQlpbmRleCA9IDA7CQkJCQkgICAgICAgICBcCi0JCXNoaWZ0ID0gbW11X3BzaXplX2RlZnNbcHNpemVdLnNoaWZ0OwkJICAgICAgICAgXAotCi0jZGVmaW5lIHB0ZV9pdGVyYXRlX2hhc2hlZF9lbmQoKSB9IHdoaWxlKDApCi0KLSNpZmRlZiBDT05GSUdfUFBDX0hBU19IQVNIXzY0SwotI2RlZmluZSBwdGVfcGFnZXNpemVfaW5kZXgobW0sIGFkZHIsIHB0ZSkJZ2V0X3NsaWNlX3BzaXplKG1tLCBhZGRyKQotI2Vsc2UKLSNkZWZpbmUgcHRlX3BhZ2VzaXplX2luZGV4KG1tLCBhZGRyLCBwdGUpCU1NVV9QQUdFXzRLCi0jZW5kaWYKLQotLyoKLSAqIDQtbGV2ZWwgcGFnZSB0YWJsZXMgcmVsYXRlZCBiaXRzCi0gKi8KLQotI2RlZmluZSBwZ2Rfbm9uZShwZ2QpCQkoIXBnZF92YWwocGdkKSkKLSNkZWZpbmUgcGdkX2JhZChwZ2QpCQkocGdkX3ZhbChwZ2QpID09IDApCi0jZGVmaW5lIHBnZF9wcmVzZW50KHBnZCkJKHBnZF92YWwocGdkKSAhPSAwKQotI2RlZmluZSBwZ2RfY2xlYXIocGdkcCkJCShwZ2RfdmFsKCoocGdkcCkpID0gMCkKLSNkZWZpbmUgcGdkX3BhZ2VfdmFkZHIocGdkKQkocGdkX3ZhbChwZ2QpICYgflBHRF9NQVNLRURfQklUUykKLSNkZWZpbmUgcGdkX3BhZ2UocGdkKQkJdmlydF90b19wYWdlKHBnZF9wYWdlX3ZhZGRyKHBnZCkpCi0KLSNkZWZpbmUgcHVkX29mZnNldChwZ2RwLCBhZGRyKQlcCi0gICgoKHB1ZF90ICopIHBnZF9wYWdlX3ZhZGRyKCoocGdkcCkpKSArIFwKLSAgICAoKChhZGRyKSA+PiBQVURfU0hJRlQpICYgKFBUUlNfUEVSX1BVRCAtIDEpKSkKLQotI2RlZmluZSBwdWRfRVJST1IoZSkgXAotCXByaW50aygiJXM6JWQ6IGJhZCBwdWQgJTA4bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHB1ZF92YWwoZSkpCi0KLSNkZWZpbmUgcmVtYXBfNGtfcGZuKHZtYSwgYWRkciwgcGZuLCBwcm90KQlcCi0JcmVtYXBfcGZuX3JhbmdlKCh2bWEpLCAoYWRkciksIChwZm4pLCBQQUdFX1NJWkUsIChwcm90KSkKLSNlbmRpZiAvKiBfQVNNX1BPV0VSUENfUEdUQUJMRV80S19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGMzMi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjMzIuaAppbmRleCA4MjBiNWYwLi5iYTQ1Yzk5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGMzMi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzMyLmgKQEAgLTE5LDU1ICsxOSw2IEBACiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKIC8qCi0gKiBUaGUgUG93ZXJQQyBNTVUgdXNlcyBhIGhhc2ggdGFibGUgY29udGFpbmluZyBQVEVzLCB0b2dldGhlciB3aXRoCi0gKiBhIHNldCBvZiAxNiBzZWdtZW50IHJlZ2lzdGVycyAob24gMzItYml0IGltcGxlbWVudGF0aW9ucyksIHRvIGRlZmluZQotICogdGhlIHZpcnR1YWwgdG8gcGh5c2ljYWwgYWRkcmVzcyBtYXBwaW5nLgotICoKLSAqIFdlIHVzZSB0aGUgaGFzaCB0YWJsZSBhcyBhbiBleHRlbmRlZCBUTEIsIGkuZS4gYSBjYWNoZSBvZiBjdXJyZW50bHkKLSAqIGFjdGl2ZSBtYXBwaW5ncy4gIFdlIG1haW50YWluIGEgdHdvLWxldmVsIHBhZ2UgdGFibGUgdHJlZSwgbXVjaAotICogbGlrZSB0aGF0IHVzZWQgYnkgdGhlIGkzODYsIGZvciB0aGUgc2FrZSBvZiB0aGUgTGludXggbWVtb3J5Ci0gKiBtYW5hZ2VtZW50IGNvZGUuICBMb3ctbGV2ZWwgYXNzZW1ibGVyIGNvZGUgaW4gaGFzaHRhYmxlLlMKLSAqIChwcm9jZWR1cmUgaGFzaF9wYWdlKSBpcyByZXNwb25zaWJsZSBmb3IgZXh0cmFjdGluZyBwdGVzIGZyb20gdGhlCi0gKiB0cmVlIGFuZCBwdXR0aW5nIHRoZW0gaW50byB0aGUgaGFzaCB0YWJsZSB3aGVuIG5lY2Vzc2FyeSwgYW5kCi0gKiB1cGRhdGluZyB0aGUgYWNjZXNzZWQgYW5kIG1vZGlmaWVkIGJpdHMgaW4gdGhlIHBhZ2UgdGFibGUgdHJlZS4KLSAqLwotCi0vKgotICogVGhlIFBvd2VyUEMgTVBDOHh4IHVzZXMgYSBUTEIgd2l0aCBoYXJkd2FyZSBhc3Npc3RlZCwgc29mdHdhcmUgdGFibGV3YWxrLgotICogV2UgYWxzbyB1c2UgdGhlIHR3byBsZXZlbCB0YWJsZXMsIGJ1dCB3ZSBjYW4gcHV0IHRoZSByZWFsIGJpdHMgaW4gdGhlbQotICogbmVlZGVkIGZvciB0aGUgVExCIGFuZCB0YWJsZXdhbGsuICBUaGVzZSBkZWZpbml0aW9ucyByZXF1aXJlIE14X0NUUi5QUE0gPSAwLAotICogTXhfQ1RSLlBQQ1MgPSAwLCBhbmQgTURfQ1RSLlRXQU0gPSAxLiAgVGhlIGxldmVsIDIgZGVzY3JpcHRvciBoYXMKLSAqIGFkZGl0aW9uYWwgcGFnZSBwcm90ZWN0aW9uICh3aGVuIE14X0NUUi5QUENTID0gMSkgdGhhdCBhbGxvd3MgVExCIGhpdAotICogYmFzZWQgdXBvbiB1c2VyL3N1cGVyIGFjY2Vzcy4gIFRoZSBUTEIgZG9lcyBub3QgaGF2ZSBhY2Nlc3NlZCBub3Igd3JpdGUKLSAqIHByb3RlY3QuICBXZSBhc3N1bWUgdGhhdCBpZiB0aGUgVExCIGdldCBsb2FkZWQgd2l0aCBhbiBlbnRyeSBpdCBpcwotICogYWNjZXNzZWQsIGFuZCBvdmVybG9hZCB0aGUgY2hhbmdlZCBiaXQgZm9yIHdyaXRlIHByb3RlY3QuICBXZSB1c2UKLSAqIHR3byBiaXRzIGluIHRoZSBzb2Z0d2FyZSBwdGUgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUgc2V0IHRvIHplcm8gaW4KLSAqIHRoZSBUTEIgZW50cnkgKDI0IGFuZCAyNSkgZm9yIHRoZXNlIGluZGljYXRvcnMuICBBbHRob3VnaCB0aGUgbGV2ZWwgMQotICogZGVzY3JpcHRvciBjb250YWlucyB0aGUgZ3VhcmRlZCBhbmQgd3JpdGV0aHJvdWdoL2NvcHliYWNrIGJpdHMsIHdlIGNhbgotICogc2V0IHRoZXNlIGF0IHRoZSBwYWdlIGxldmVsIHNpbmNlIHRoZXkgZ2V0IGNvcGllZCBmcm9tIHRoZSBNeF9UV0MKLSAqIHJlZ2lzdGVyIHdoZW4gdGhlIFRMQiBlbnRyeSBpcyBsb2FkZWQuICBXZSB3aWxsIHVzZSBiaXQgMjcgZm9yIGd1YXJkLCBzaW5jZQotICogdGhhdCBpcyB3aGVyZSBpdCBleGlzdHMgaW4gdGhlIE1EX1RXQywgYW5kIGJpdCAyNiBmb3Igd3JpdGV0aHJvdWdoLgotICogVGhlc2Ugd2lsbCBnZXQgbWFza2VkIGZyb20gdGhlIGxldmVsIDIgZGVzY3JpcHRvciBhdCBUTEIgbG9hZCB0aW1lLCBhbmQKLSAqIGNvcGllZCB0byB0aGUgTURfVFdDIGJlZm9yZSBpdCBnZXRzIGxvYWRlZC4KLSAqIExhcmdlIHBhZ2Ugc2l6ZXMgYWRkZWQuICBXZSBjdXJyZW50bHkgc3VwcG9ydCB0d28gc2l6ZXMsIDRLIGFuZCA4TS4KLSAqIFRoaXMgYWxzbyBhbGxvd3MgYSBUTEIgaGFuZGVyIG9wdGltaXphdGlvbiBiZWNhdXNlIHdlIGNhbiBkaXJlY3RseQotICogbG9hZCB0aGUgUE1EIGludG8gTURfVFdDLiAgVGhlIDhNIHBhZ2VzIGFyZSBvbmx5IHVzZWQgZm9yIGtlcm5lbAotICogbWFwcGluZyBvZiB3ZWxsIGtub3duIGFyZWFzLiAgVGhlIFBNRCAoUEdEKSBlbnRyaWVzIGNvbnRhaW4gY29udHJvbAotICogZmxhZ3MgaW4gYWRkaXRpb24gdG8gdGhlIGFkZHJlc3MsIHNvIGNhcmUgbXVzdCBiZSB0YWtlbiB0aGF0IHRoZQotICogc29mdHdhcmUgbm8gbG9uZ2VyIGFzc3VtZXMgdGhlc2UgYXJlIG9ubHkgcG9pbnRlcnMuCi0gKi8KLQotLyoKLSAqIEF0IHByZXNlbnQsIGFsbCBQb3dlclBDIDQwMC1jbGFzcyBwcm9jZXNzb3JzIHNoYXJlIGEgc2ltaWxhciBUTEIKLSAqIGFyY2hpdGVjdHVyZS4gVGhlIGluc3RydWN0aW9uIGFuZCBkYXRhIHNpZGVzIHNoYXJlIGEgdW5pZmllZCwKLSAqIDY0LWVudHJ5LCBmdWxseS1hc3NvY2lhdGl2ZSBUTEIgd2hpY2ggaXMgbWFpbnRhaW5lZCB0b3RhbGx5IHVuZGVyCi0gKiBzb2Z0d2FyZSBjb250cm9sLiBJbiBhZGRpdGlvbiwgdGhlIGluc3RydWN0aW9uIHNpZGUgaGFzIGEKLSAqIGhhcmR3YXJlLW1hbmFnZWQsIDQtZW50cnksIGZ1bGx5LWFzc29jaWF0aXZlIFRMQiB3aGljaCBzZXJ2ZXMgYXMgYQotICogZmlyc3QgbGV2ZWwgdG8gdGhlIHNoYXJlZCBUTEIuIFRoZXNlIHR3byBUTEJzIGFyZSBrbm93biBhcyB0aGUgVVRMQgotICogYW5kIElUTEIsIHJlc3BlY3RpdmVseSAoc2VlICJtbXUuaCIgZm9yIGRlZmluaXRpb25zKS4KLSAqLwotCi0vKgogICogVGhlIG5vcm1hbCBjYXNlIGlzIHRoYXQgUFRFcyBhcmUgMzItYml0cyBhbmQgd2UgaGF2ZSBhIDEtcGFnZQogICogMTAyNC1lbnRyeSBwZ2RpciBwb2ludGluZyB0byAxLXBhZ2UgMTAyNC1lbnRyeSBQVEUgcGFnZXMuICAtLSBwYXVsdXMKICAqCkBAIC0xMzUsNDA5ICs4NiwyMiBAQAogICovCiAKICNpZiBkZWZpbmVkKENPTkZJR180MHgpCi0KLS8qIFRoZXJlIGFyZSBzZXZlcmFsIHBvdGVudGlhbCBnb3RjaGFzIGhlcmUuICBUaGUgNDB4IGhhcmR3YXJlIFRMQkxPCi0gICBmaWVsZCBsb29rcyBsaWtlIHRoaXM6Ci0KLSAgIDAgIDEgIDIgIDMgIDQgIC4uLiAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMQotICAgUlBOLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAwICAwIEVYIFdSIFpTRUwuLi4uLi4uICBXICBJICBNICBHCi0KLSAgIFdoZXJlIHBvc3NpYmxlIHdlIG1ha2UgdGhlIExpbnV4IFBURSBiaXRzIG1hdGNoIHVwIHdpdGggdGhpcwotCi0gICAtIGJpdHMgMjAgYW5kIDIxIG11c3QgYmUgY2xlYXJlZCwgYmVjYXVzZSB3ZSB1c2UgNGsgcGFnZXMgKDQweCBjYW4KLSAgICAgc3VwcG9ydCBkb3duIHRvIDFrIHBhZ2VzKSwgdGhpcyBpcyBkb25lIGluIHRoZSBUTEJNaXNzIGV4Y2VwdGlvbgotICAgICBoYW5kbGVyLgotICAgLSBXZSB1c2Ugb25seSB6b25lcyAwIChmb3Iga2VybmVsIHBhZ2VzKSBhbmQgMSAoZm9yIHVzZXIgcGFnZXMpCi0gICAgIG9mIHRoZSAxNiBhdmFpbGFibGUuICBCaXQgMjQtMjYgb2YgdGhlIFRMQiBhcmUgY2xlYXJlZCBpbiB0aGUgVExCCi0gICAgIG1pc3MgaGFuZGxlci4gIEJpdCAyNyBpcyBQQUdFX1VTRVIsIHRodXMgc2VsZWN0aW5nIHRoZSBjb3JyZWN0Ci0gICAgIHpvbmUuCi0gICAtIFBSRVNFTlQgKm11c3QqIGJlIGluIHRoZSBib3R0b20gdHdvIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCi0gICAgIGVudHJpZXMgdXNlIHRoZSB0b3AgMzAgYml0cy4gIEJlY2F1c2UgNDB4IGRvZXNuJ3Qgc3VwcG9ydCBTTVAKLSAgICAgYW55d2F5LCBNIGlzIGlycmVsZXZhbnQgc28gd2UgYm9ycm93IGl0IGZvciBQQUdFX1BSRVNFTlQuICBCaXQgMzAKLSAgICAgaXMgY2xlYXJlZCBpbiB0aGUgVExCIG1pc3MgaGFuZGxlciBiZWZvcmUgdGhlIFRMQiBlbnRyeSBpcyBsb2FkZWQuCi0gICAtIEFsbCBvdGhlciBiaXRzIG9mIHRoZSBQVEUgYXJlIGxvYWRlZCBpbnRvIFRMQkxPIHdpdGhvdXQKLSAgICAgbW9kaWZpY2F0aW9uLCBsZWF2aW5nIHVzIG9ubHkgdGhlIGJpdHMgMjAsIDIxLCAyNCwgMjUsIDI2LCAzMCBmb3IKLSAgICAgc29mdHdhcmUgUFRFIGJpdHMuICBXZSBhY3R1YWxseSB1c2UgdXNlIGJpdHMgMjEsIDI0LCAyNSwgYW5kCi0gICAgIDMwIHJlc3BlY3RpdmVseSBmb3IgdGhlIHNvZnR3YXJlIGJpdHM6IEFDQ0VTU0VELCBESVJUWSwgUlcsIGFuZAotICAgICBQUkVTRU5ULgotKi8KLQotLyogRGVmaW5pdGlvbnMgZm9yIDQweCBlbWJlZGRlZCBjaGlwcy4gKi8KLSNkZWZpbmUJX1BBR0VfR1VBUkRFRAkweDAwMQkvKiBHOiBwYWdlIGlzIGd1YXJkZWQgZnJvbSBwcmVmZXRjaCAqLwotI2RlZmluZSBfUEFHRV9GSUxFCTB4MDAxCS8qIHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KLSNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMgkvKiBzb2Z0d2FyZTogUFRFIGNvbnRhaW5zIGEgdHJhbnNsYXRpb24gKi8KLSNkZWZpbmUJX1BBR0VfTk9fQ0FDSEUJMHgwMDQJLyogSTogY2FjaGluZyBpcyBpbmhpYml0ZWQgKi8KLSNkZWZpbmUJX1BBR0VfV1JJVEVUSFJVCTB4MDA4CS8qIFc6IGNhY2hpbmcgaXMgd3JpdGUtdGhyb3VnaCAqLwotI2RlZmluZQlfUEFHRV9VU0VSCTB4MDEwCS8qIG1hdGNoZXMgb25lIG9mIHRoZSB6b25lIHBlcm1pc3Npb24gYml0cyAqLwotI2RlZmluZQlfUEFHRV9SVwkweDA0MAkvKiBzb2Z0d2FyZTogV3JpdGVzIHBlcm1pdHRlZCAqLwotI2RlZmluZQlfUEFHRV9ESVJUWQkweDA4MAkvKiBzb2Z0d2FyZTogZGlydHkgcGFnZSAqLwotI2RlZmluZSBfUEFHRV9IV1dSSVRFCTB4MTAwCS8qIGhhcmR3YXJlOiBEaXJ0eSAmIFJXLCBzZXQgaW4gZXhjZXB0aW9uICovCi0jZGVmaW5lIF9QQUdFX0hXRVhFQwkweDIwMAkvKiBoYXJkd2FyZTogRVggcGVybWlzc2lvbiAqLwotI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDQwMAkvKiBzb2Z0d2FyZTogUjogcGFnZSByZWZlcmVuY2VkICovCi0KLSNkZWZpbmUgX1BNRF9QUkVTRU5UCTB4NDAwCS8qIFBNRCBwb2ludHMgdG8gcGFnZSBvZiBQVEVzICovCi0jZGVmaW5lIF9QTURfQkFECTB4ODAyCi0jZGVmaW5lIF9QTURfU0laRQkweDBlMAkvKiBzaXplIGZpZWxkLCAhPSAwIGZvciBsYXJnZS1wYWdlIFBNRCBlbnRyeSAqLwotI2RlZmluZSBfUE1EX1NJWkVfNE0JMHgwYzAKLSNkZWZpbmUgX1BNRF9TSVpFXzE2TQkweDBlMAotI2RlZmluZSBQTURfUEFHRV9TSVpFKHBtZHZhbCkJKDEwMjQgPDwgKCgocG1kdmFsKSAmIF9QTURfU0laRSkgPj4gNCkpCi0KLS8qIFVudGlsIG15IHJld29yayBpcyBmaW5pc2hlZCwgNDB4IHN0aWxsIG5lZWRzIGF0b21pYyBQVEUgdXBkYXRlcyAqLwotI2RlZmluZSBQVEVfQVRPTUlDX1VQREFURVMJMQotCisjaW5jbHVkZSA8YXNtL3B0ZS00MHguaD4KICNlbGlmIGRlZmluZWQoQ09ORklHXzQ0eCkKLS8qCi0gKiBEZWZpbml0aW9ucyBmb3IgUFBDNDQwCi0gKgotICogQmVjYXVzZSBvZiB0aGUgMyB3b3JkIFRMQiBlbnRyaWVzIHRvIHN1cHBvcnQgMzYtYml0IGFkZHJlc3NpbmcsCi0gKiB0aGUgYXR0cmlidXRlIGFyZSBkaWZmaWN1bHQgdG8gbWFwIGluIHN1Y2ggYSBmYXNoaW9uIHRoYXQgdGhleQotICogYXJlIGVhc2lseSBsb2FkZWQgZHVyaW5nIGV4Y2VwdGlvbiBwcm9jZXNzaW5nLiAgSSBkZWNpZGVkIHRvCi0gKiBvcmdhbml6ZSB0aGUgZW50cnkgc28gdGhlIEVSUE4gaXMgdGhlIG9ubHkgcG9ydGlvbiBpbiB0aGUKLSAqIHVwcGVyIHdvcmQgb2YgdGhlIFBURSBhbmQgdGhlIGF0dHJpYnV0ZSBiaXRzIGJlbG93IGFyZSBwYWNrZWQKLSAqIGluIGFzIHNlbnNpYmx5IGFzIHRoZXkgY2FuIGJlIGluIHRoZSBhcmVhIGJlbG93IGEgNEtCIHBhZ2Ugc2l6ZQotICogb3JpZW50ZWQgUlBOLiAgVGhpcyBhdCBsZWFzdCBtYWtlcyBpdCBlYXN5IHRvIGxvYWQgdGhlIFJQTiBhbmQKLSAqIEVSUE4gZmllbGRzIGluIHRoZSBUTEIuIC1NYXR0Ci0gKgotICogTm90ZSB0aGF0IHRoZXNlIGJpdHMgcHJlY2x1ZGUgZnV0dXJlIHVzZSBvZiBhIHBhZ2Ugc2l6ZQotICogbGVzcyB0aGFuIDRLQi4KLSAqCi0gKgotICogUFBDIDQ0MCBjb3JlIGhhcyBmb2xsb3dpbmcgVExCIGF0dHJpYnV0ZSBmaWVsZHM7Ci0gKgotICogICBUTEIxOgotICogICAwICAxICAyICAzICA0ICAuLi4gMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEKLSAqICAgUlBOLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAtICAtICAtICAtICAtICAtIEVSUE4uLi4uLi4uCi0gKgotICogICBUTEIyOgotICogICAwICAxICAyICAzICA0ICAuLi4gMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEKLSAqICAgLSAgLSAgLSAgLSAgLSAgICAtIFUwIFUxIFUyIFUzIFcgIEkgIE0gIEcgIEUgICAtIFVYIFVXIFVSIFNYIFNXIFNSCi0gKgotICogTmV3ZXIgNDQwIGNvcmVzICg0NDB4NiBhcyB1c2VkIG9uIEFNQ0MgNDYwRVgvNDYwR1QpIGhhdmUgYWRkaXRpb25hbAotICogVExCMiBzdG9yYWdlIGF0dGlidXRlIGZpZWxkcy4gVGhvc2UgYXJlOgotICoKLSAqICAgVExCMjoKLSAqICAgMC4uLjEwICAgIDExICAgMTIgICAxMyAgIDE0ICAgMTUgICAxNi4uLjMxCi0gKiAgIG5vIGNoYW5nZSBXTDEgIElMMUkgSUwxRCBJTDJJIElMMkQgbm8gY2hhbmdlCi0gKgotICogVGhlcmUgYXJlIHNvbWUgY29uc3RyYWlucyBhbmQgb3B0aW9ucywgdG8gZGVjaWRlIG1hcHBpbmcgc29mdHdhcmUgYml0cwotICogaW50byBUTEIgZW50cnkuCi0gKgotICogICAtIFBSRVNFTlQgKm11c3QqIGJlIGluIHRoZSBib3R0b20gdGhyZWUgYml0cyBiZWNhdXNlIHN3YXAgY2FjaGUKLSAqICAgICBlbnRyaWVzIHVzZSB0aGUgdG9wIDI5IGJpdHMgZm9yIFRMQjIuCi0gKgotICogICAtIEZJTEUgKm11c3QqIGJlIGluIHRoZSBib3R0b20gdGhyZWUgYml0cyBiZWNhdXNlIHN3YXAgY2FjaGUKLSAqICAgICBlbnRyaWVzIHVzZSB0aGUgdG9wIDI5IGJpdHMgZm9yIFRMQjIuCi0gKgotICogICAtIENBQ0hFIENPSEVSRU5UIGJpdCAoTSkgaGFzIG5vIGVmZmVjdCBvbiBvcmlnaW5hbCBQUEM0NDAgY29yZXMsCi0gKiAgICAgYmVjYXVzZSBpdCBkb2Vzbid0IHN1cHBvcnQgU01QLiBIb3dldmVyLCBzb21lIGxhdGVyIDQ2MCB2YXJpYW50cwotICogICAgIGhhdmUgLXNvbWUtIGZvcm0gb2YgU01QIHN1cHBvcnQgYW5kIHNvIEkga2VlcCB0aGUgYml0IHRoZXJlIGZvcgotICogICAgIGZ1dHVyZSB1c2UKLSAqCi0gKiBXaXRoIHRoZSBQUEMgNDR4IExpbnV4IGltcGxlbWVudGF0aW9uLCB0aGUgMC0xMXRoIExTQnMgb2YgdGhlIFBURSBhcmUgdXNlZAotICogZm9yIG1lbW9yeSBwcm90ZWN0aW9uIHJlbGF0ZWQgZnVuY3Rpb25zIChzZWUgUFRFIHN0cnVjdHVyZSBpbgotICogaW5jbHVkZS9hc20tcHBjL21tdS5oKS4gIFRoZSBfUEFHRV9YWFggZGVmaW5pdGlvbnMgaW4gdGhpcyBmaWxlIG1hcCB0byB0aGUKLSAqIGFib3ZlIGJpdHMuICBOb3RlIHRoYXQgdGhlIGJpdCB2YWx1ZXMgYXJlIENQVSBzcGVjaWZpYywgbm90IGFyY2hpdGVjdHVyZQotICogc3BlY2lmaWMuCi0gKgotICogVGhlIGtlcm5lbCBQVEUgZW50cnkgaG9sZHMgYW4gYXJjaC1kZXBlbmRlbnQgc3dwX2VudHJ5IHN0cnVjdHVyZSB1bmRlcgotICogY2VydGFpbiBzaXR1YXRpb25zLiBJbiBvdGhlciB3b3JkcywgaW4gc3VjaCBzaXR1YXRpb25zIHNvbWUgcG9ydGlvbiBvZgotICogdGhlIFBURSBiaXRzIGFyZSB1c2VkIGFzIGEgc3dwX2VudHJ5LiBJbiB0aGUgUFBDIGltcGxlbWVudGF0aW9uLCB0aGUKLSAqIDMtMjR0aCBMU0IgYXJlIHNoYXJlZCB3aXRoIHN3cF9lbnRyeSwgaG93ZXZlciB0aGUgMC0ybmQgdGhyZWUgTFNCIHN0aWxsCi0gKiBob2xkIHByb3RlY3Rpb24gdmFsdWVzLiBUaGF0IG1lYW5zIHRoZSB0aHJlZSBwcm90ZWN0aW9uIGJpdHMgYXJlCi0gKiByZXNlcnZlZCBmb3IgYm90aCBQVEUgYW5kIFNXQVAgZW50cnkgYXQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgdGhyZWUKLSAqIExTQnMuCi0gKgotICogVGhlcmUgYXJlIHRocmVlIHByb3RlY3Rpb24gYml0cyBhdmFpbGFibGUgZm9yIFNXQVAgZW50cnk6Ci0gKglfUEFHRV9QUkVTRU5UCi0gKglfUEFHRV9GSUxFCi0gKglfUEFHRV9IQVNIUFRFIChpZiBIVyBoYXMpCi0gKgotICogU28gdGhvc2UgdGhyZWUgYml0cyBoYXZlIHRvIGJlIGluc2lkZSBvZiAwLTJuZCBMU0Igb2YgUFRFLgotICoKLSAqLwotCi0jZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDAwMDAwMQkJLyogUzogUFRFIHZhbGlkICovCi0jZGVmaW5lIF9QQUdFX1JXCTB4MDAwMDAwMDIJCS8qIFM6IFdyaXRlIHBlcm1pc3Npb24gKi8KLSNkZWZpbmUgX1BBR0VfRklMRQkweDAwMDAwMDA0CQkvKiBTOiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCi0jZGVmaW5lIF9QQUdFX0hXRVhFQwkweDAwMDAwMDA0CQkvKiBIOiBFeGVjdXRlIHBlcm1pc3Npb24gKi8KLSNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgwMDAwMDAwOAkJLyogUzogUGFnZSByZWZlcmVuY2VkICovCi0jZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDAwMDAwMTAJCS8qIFM6IFBhZ2UgZGlydHkgKi8KLSNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkweDAwMDAwMDIwCQkvKiBTOiBTcGVjaWFsIHBhZ2UgKi8KLSNkZWZpbmUgX1BBR0VfVVNFUgkweDAwMDAwMDQwCQkvKiBTOiBVc2VyIHBhZ2UgKi8KLSNkZWZpbmUgX1BBR0VfRU5ESUFOCTB4MDAwMDAwODAJCS8qIEg6IEUgYml0ICovCi0jZGVmaW5lIF9QQUdFX0dVQVJERUQJMHgwMDAwMDEwMAkJLyogSDogRyBiaXQgKi8KLSNkZWZpbmUgX1BBR0VfQ09IRVJFTlQJMHgwMDAwMDIwMAkJLyogSDogTSBiaXQgKi8KLSNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDAwMDQwMAkJLyogSDogSSBiaXQgKi8KLSNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTB4MDAwMDA4MDAJCS8qIEg6IFcgYml0ICovCi0KLS8qIFRPRE86IEFkZCBsYXJnZSBwYWdlIGxvd21lbSBtYXBwaW5nIHN1cHBvcnQgKi8KLSNkZWZpbmUgX1BNRF9QUkVTRU5UCTAKLSNkZWZpbmUgX1BNRF9QUkVTRU5UX01BU0sgKFBBR0VfTUFTSykKLSNkZWZpbmUgX1BNRF9CQUQJKH5QQUdFX01BU0spCi0KLS8qIEVSUE4gaW4gYSBQVEUgbmV2ZXIgZ2V0cyBjbGVhcmVkLCBpZ25vcmUgaXQgKi8KLSNkZWZpbmUgX1BURV9OT05FX01BU0sJMHhmZmZmZmZmZjAwMDAwMDAwVUxMCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NQRUNJQUwKLQorI2luY2x1ZGUgPGFzbS9wdGUtNDR4Lmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19GU0xfQk9PS0UpCi0vKgotICAgTU1VIEFzc2lzdCBSZWdpc3RlciAzOgotCi0gICAzMiAzMyAzNCAzNSAzNiAgLi4uIDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3IDU4IDU5IDYwIDYxIDYyIDYzCi0gICBSUE4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAwICAwIFUwIFUxIFUyIFUzIFVYIFNYIFVXIFNXIFVSIFNSCi0KLSAgIC0gUFJFU0VOVCAqbXVzdCogYmUgaW4gdGhlIGJvdHRvbSB0aHJlZSBiaXRzIGJlY2F1c2Ugc3dhcCBjYWNoZQotICAgICBlbnRyaWVzIHVzZSB0aGUgdG9wIDI5IGJpdHMuCi0KLSAgIC0gRklMRSAqbXVzdCogYmUgaW4gdGhlIGJvdHRvbSB0aHJlZSBiaXRzIGJlY2F1c2Ugc3dhcCBjYWNoZQotICAgICBlbnRyaWVzIHVzZSB0aGUgdG9wIDI5IGJpdHMuCi0qLwotCi0vKiBEZWZpbml0aW9ucyBmb3IgRlNMIEJvb2stRSBDb3JlcyAqLwotI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAwMDEJLyogUzogUFRFIGNvbnRhaW5zIGEgdHJhbnNsYXRpb24gKi8KLSNkZWZpbmUgX1BBR0VfVVNFUgkweDAwMDAyCS8qIFM6IFVzZXIgcGFnZSAobWFwcyB0byBVUikgKi8KLSNkZWZpbmUgX1BBR0VfRklMRQkweDAwMDAyCS8qIFM6IHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KLSNkZWZpbmUgX1BBR0VfUlcJMHgwMDAwNAkvKiBTOiBXcml0ZSBwZXJtaXNzaW9uIChTVykgKi8KLSNkZWZpbmUgX1BBR0VfRElSVFkJMHgwMDAwOAkvKiBTOiBQYWdlIGRpcnR5ICovCi0jZGVmaW5lIF9QQUdFX0hXRVhFQwkweDAwMDEwCS8qIEg6IFNYIHBlcm1pc3Npb24gKi8KLSNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgwMDAyMAkvKiBTOiBQYWdlIHJlZmVyZW5jZWQgKi8KLQotI2RlZmluZSBfUEFHRV9FTkRJQU4JMHgwMDA0MAkvKiBIOiBFIGJpdCAqLwotI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDAwODAJLyogSDogRyBiaXQgKi8KLSNkZWZpbmUgX1BBR0VfQ09IRVJFTlQJMHgwMDEwMAkvKiBIOiBNIGJpdCAqLwotI2RlZmluZSBfUEFHRV9OT19DQUNIRQkweDAwMjAwCS8qIEg6IEkgYml0ICovCi0jZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkweDAwNDAwCS8qIEg6IFcgYml0ICovCi0jZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHgwMDgwMCAvKiBTOiBTcGVjaWFsIHBhZ2UgKi8KLQotI2lmZGVmIENPTkZJR19QVEVfNjRCSVQKLS8qIEVSUE4gaW4gYSBQVEUgbmV2ZXIgZ2V0cyBjbGVhcmVkLCBpZ25vcmUgaXQgKi8KLSNkZWZpbmUgX1BURV9OT05FX01BU0sJMHhmZmZmZmZmZmZmZmYwMDAwVUxMCi0jZW5kaWYKLQotI2RlZmluZSBfUE1EX1BSRVNFTlQJMAotI2RlZmluZSBfUE1EX1BSRVNFTlRfTUFTSyAoUEFHRV9NQVNLKQotI2RlZmluZSBfUE1EX0JBRAkoflBBR0VfTUFTSykKLQotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU1BFQ0lBTAotCisjaW5jbHVkZSA8YXNtL3B0ZS1mc2wtYm9va2UuaD4KICNlbGlmIGRlZmluZWQoQ09ORklHXzh4eCkKLS8qIERlZmluaXRpb25zIGZvciA4eHggZW1iZWRkZWQgY2hpcHMuICovCi0jZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDAxCS8qIFBhZ2UgaXMgdmFsaWQgKi8KLSNkZWZpbmUgX1BBR0VfRklMRQkweDAwMDIJLyogd2hlbiAhcHJlc2VudDogbm9ubGluZWFyIGZpbGUgbWFwcGluZyAqLwotI2RlZmluZSBfUEFHRV9OT19DQUNIRQkweDAwMDIJLyogSTogY2FjaGUgaW5oaWJpdCAqLwotI2RlZmluZSBfUEFHRV9TSEFSRUQJMHgwMDA0CS8qIE5vIEFTSUQgKGNvbnRleHQpIGNvbXBhcmUgKi8KLQotLyogVGhlc2UgZml2ZSBzb2Z0d2FyZSBiaXRzIG11c3QgYmUgbWFza2VkIG91dCB3aGVuIHRoZSBlbnRyeSBpcyBsb2FkZWQKLSAqIGludG8gdGhlIFRMQi4KLSAqLwotI2RlZmluZSBfUEFHRV9FWEVDCTB4MDAwOAkvKiBzb2Z0d2FyZTogaS1jYWNoZSBjb2hlcmVuY3kgcmVxdWlyZWQgKi8KLSNkZWZpbmUgX1BBR0VfR1VBUkRFRAkweDAwMTAJLyogc29mdHdhcmU6IGd1YXJkZWQgYWNjZXNzICovCi0jZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDAyMAkvKiBzb2Z0d2FyZTogcGFnZSBjaGFuZ2VkICovCi0jZGVmaW5lIF9QQUdFX1JXCTB4MDA0MAkvKiBzb2Z0d2FyZTogdXNlciB3cml0ZSBhY2Nlc3MgYWxsb3dlZCAqLwotI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDAwODAJLyogc29mdHdhcmU6IHBhZ2UgcmVmZXJlbmNlZCAqLwotCi0vKiBTZXR0aW5nIGFueSBiaXRzIGluIHRoZSBuaWJibGUgd2l0aCB0aGUgZm9sbG93IHR3byBjb250cm9scyB3aWxsCi0gKiByZXF1aXJlIGEgVExCIGV4Y2VwdGlvbiBoYW5kbGVyIGNoYW5nZS4gIEl0IGlzIGFzc3VtZWQgdW51c2VkIGJpdHMKLSAqIGFyZSBhbHdheXMgemVyby4KLSAqLwotI2RlZmluZSBfUEFHRV9IV1dSSVRFCTB4MDEwMAkvKiBoL3cgd3JpdGUgZW5hYmxlOiBuZXZlciBzZXQgaW4gTGludXggUFRFICovCi0jZGVmaW5lIF9QQUdFX1VTRVIJMHgwODAwCS8qIE9uZSBvZiB0aGUgUFAgYml0cywgdGhlIG90aGVyIGlzIFVTRVImflJXICovCi0KLSNkZWZpbmUgX1BNRF9QUkVTRU5UCTB4MDAwMQotI2RlZmluZSBfUE1EX0JBRAkweDBmZjAKLSNkZWZpbmUgX1BNRF9QQUdFX01BU0sJMHgwMDBjCi0jZGVmaW5lIF9QTURfUEFHRV84TQkweDAwMGMKLQotI2RlZmluZSBfUFRFX05PTkVfTUFTSyBfUEFHRV9BQ0NFU1NFRAotCi0vKiBVbnRpbCBteSByZXdvcmsgaXMgZmluaXNoZWQsIDh4eCBzdGlsbCBuZWVkcyBhdG9taWMgUFRFIHVwZGF0ZXMgKi8KLSNkZWZpbmUgUFRFX0FUT01JQ19VUERBVEVTCTEKLQorI2luY2x1ZGUgPGFzbS9wdGUtOHh4Lmg+CiAjZWxzZSAvKiBDT05GSUdfNnh4ICovCi0vKiBEZWZpbml0aW9ucyBmb3IgNjB4LCA3NDAvNzUwLCBldGMuICovCi0jZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDEJLyogc29mdHdhcmU6IHB0ZSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCi0jZGVmaW5lIF9QQUdFX0hBU0hQVEUJMHgwMDIJLyogaGFzaF9wYWdlIGhhcyBtYWRlIGFuIEhQVEUgZm9yIHRoaXMgcHRlICovCi0jZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDQJLyogd2hlbiAhcHJlc2VudDogbm9ubGluZWFyIGZpbGUgbWFwcGluZyAqLwotI2RlZmluZSBfUEFHRV9VU0VSCTB4MDA0CS8qIHVzZXJtb2RlIGFjY2VzcyBhbGxvd2VkICovCi0jZGVmaW5lIF9QQUdFX0dVQVJERUQJMHgwMDgJLyogRzogcHJvaGliaXQgc3BlY3VsYXRpdmUgYWNjZXNzICovCi0jZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTB4MDEwCS8qIE06IGVuZm9yY2UgbWVtb3J5IGNvaGVyZW5jZSAoU01QIHN5c3RlbXMpICovCi0jZGVmaW5lIF9QQUdFX05PX0NBQ0hFCTB4MDIwCS8qIEk6IGNhY2hlIGluaGliaXQgKi8KLSNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTB4MDQwCS8qIFc6IGNhY2hlIHdyaXRlLXRocm91Z2ggKi8KLSNkZWZpbmUgX1BBR0VfRElSVFkJMHgwODAJLyogQzogcGFnZSBjaGFuZ2VkICovCi0jZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MTAwCS8qIFI6IHBhZ2UgcmVmZXJlbmNlZCAqLwotI2RlZmluZSBfUEFHRV9FWEVDCTB4MjAwCS8qIHNvZnR3YXJlOiBpLWNhY2hlIGNvaGVyZW5jeSByZXF1aXJlZCAqLwotI2RlZmluZSBfUEFHRV9SVwkweDQwMAkvKiBzb2Z0d2FyZTogdXNlciB3cml0ZSBhY2Nlc3MgYWxsb3dlZCAqLwotI2RlZmluZSBfUEFHRV9TUEVDSUFMCTB4ODAwCS8qIHNvZnR3YXJlOiBTcGVjaWFsIHBhZ2UgKi8KLQotI2lmZGVmIENPTkZJR19QVEVfNjRCSVQKLS8qIFdlIG5ldmVyIGNsZWFyIHRoZSBoaWdoIHdvcmQgb2YgdGhlIHB0ZSAqLwotI2RlZmluZSBfUFRFX05PTkVfTUFTSwkoMHhmZmZmZmZmZjAwMDAwMDAwVUxMIHwgX1BBR0VfSEFTSFBURSkKLSNlbHNlCi0jZGVmaW5lIF9QVEVfTk9ORV9NQVNLCV9QQUdFX0hBU0hQVEUKKyNpbmNsdWRlIDxhc20vcHRlLWhhc2gzMi5oPgogI2VuZGlmCiAKLSNkZWZpbmUgX1BNRF9QUkVTRU5UCTAKLSNkZWZpbmUgX1BNRF9QUkVTRU5UX01BU0sgKFBBR0VfTUFTSykKLSNkZWZpbmUgX1BNRF9CQUQJKH5QQUdFX01BU0spCi0KLS8qIEhhc2ggdGFibGUgYmFzZWQgcGxhdGZvcm1zIG5lZWQgYXRvbWljIHVwZGF0ZXMgb2YgdGhlIGxpbnV4IFBURSAqLwotI2RlZmluZSBQVEVfQVRPTUlDX1VQREFURVMJMQotCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TUEVDSUFMCi0KLSNlbmRpZgotCi0vKgotICogU29tZSBiaXRzIGFyZSBvbmx5IHVzZWQgb24gc29tZSBjcHUgZmFtaWxpZXMuLi4KLSAqLwotI2lmbmRlZiBfUEFHRV9IQVNIUFRFCi0jZGVmaW5lIF9QQUdFX0hBU0hQVEUJMAotI2VuZGlmCi0jaWZuZGVmIF9QVEVfTk9ORV9NQVNLCi0jZGVmaW5lIF9QVEVfTk9ORV9NQVNLIDAKLSNlbmRpZgotI2lmbmRlZiBfUEFHRV9TSEFSRUQKLSNkZWZpbmUgX1BBR0VfU0hBUkVECTAKLSNlbmRpZgotI2lmbmRlZiBfUEFHRV9IV1dSSVRFCi0jZGVmaW5lIF9QQUdFX0hXV1JJVEUJMAotI2VuZGlmCi0jaWZuZGVmIF9QQUdFX0hXRVhFQwotI2RlZmluZSBfUEFHRV9IV0VYRUMJMAotI2VuZGlmCi0jaWZuZGVmIF9QQUdFX0VYRUMKLSNkZWZpbmUgX1BBR0VfRVhFQwkwCi0jZW5kaWYKLSNpZm5kZWYgX1BBR0VfRU5ESUFOCi0jZGVmaW5lIF9QQUdFX0VORElBTgkwCi0jZW5kaWYKLSNpZm5kZWYgX1BBR0VfQ09IRVJFTlQKLSNkZWZpbmUgX1BBR0VfQ09IRVJFTlQJMAotI2VuZGlmCi0jaWZuZGVmIF9QQUdFX1dSSVRFVEhSVQotI2RlZmluZSBfUEFHRV9XUklURVRIUlUJMAotI2VuZGlmCi0jaWZuZGVmIF9QQUdFX1NQRUNJQUwKLSNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkwCi0jZW5kaWYKLSNpZm5kZWYgX1BNRF9QUkVTRU5UX01BU0sKLSNkZWZpbmUgX1BNRF9QUkVTRU5UX01BU0sJX1BNRF9QUkVTRU5UCi0jZW5kaWYKLSNpZm5kZWYgX1BNRF9TSVpFCi0jZGVmaW5lIF9QTURfU0laRQkwCi0jZGVmaW5lIFBNRF9QQUdFX1NJWkUocG1kKQliYWRfY2FsbF90b19QTURfUEFHRV9TSVpFKCkKLSNlbmRpZgotCi0jZGVmaW5lIF9QQUdFX0NIR19NQVNLCShQQUdFX01BU0sgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZIHwgXAotCQkJIF9QQUdFX1NQRUNJQUwpCi0KLQotI2RlZmluZSBQQUdFX1BST1RfQklUUwkoX1BBR0VfR1VBUkRFRCB8IF9QQUdFX0NPSEVSRU5UIHwgX1BBR0VfTk9fQ0FDSEUgfCBcCi0JCQkgX1BBR0VfV1JJVEVUSFJVIHwgX1BBR0VfRU5ESUFOIHwgXAotCQkJIF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCB8IFwKLQkJCSBfUEFHRV9SVyB8IF9QQUdFX0hXV1JJVEUgfCBfUEFHRV9ESVJUWSB8IFwKLQkJCSBfUEFHRV9FWEVDIHwgX1BBR0VfSFdFWEVDKQotCi0vKgotICogV2UgZGVmaW5lIDIgc2V0cyBvZiBiYXNlIHByb3QgYml0cywgb25lIGZvciBiYXNpYyBwYWdlcyAoaWUsCi0gKiBjYWNoZWFibGUga2VybmVsIGFuZCB1c2VyIHBhZ2VzKSBhbmQgb25lIGZvciBub24gY2FjaGVhYmxlCi0gKiBwYWdlcy4gV2UgYWx3YXlzIHNldCBfUEFHRV9DT0hFUkVOVCB3aGVuIFNNUCBpcyBlbmFibGVkIG9yCi0gKiB0aGUgcHJvY2Vzc29yIG1pZ2h0IG5lZWQgaXQgZm9yIERNQSBjb2hlcmVuY3kuCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX1BQQ19TVERfTU1VKQotI2RlZmluZSBfUEFHRV9CQVNFCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9DT0hFUkVOVCkKLSNlbHNlCi0jZGVmaW5lIF9QQUdFX0JBU0UJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCkKLSNlbmRpZgotI2RlZmluZSBfUEFHRV9CQVNFX05DCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9OT19DQUNIRSkKLQotI2RlZmluZSBfUEFHRV9XUkVOQUJMRQkoX1BBR0VfUlcgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0hXV1JJVEUpCi0jZGVmaW5lIF9QQUdFX0tFUk5FTAkoX1BBR0VfQkFTRSB8IF9QQUdFX1NIQVJFRCB8IF9QQUdFX1dSRU5BQkxFKQotI2RlZmluZSBfUEFHRV9LRVJORUxfTkMJKF9QQUdFX0JBU0VfTkMgfCBfUEFHRV9TSEFSRUQgfCBfUEFHRV9XUkVOQUJMRSkKLQotI2lmZGVmIENPTkZJR19QUENfU1REX01NVQotLyogT24gc3RhbmRhcmQgUFBDIE1NVSwgbm8gdXNlciBhY2Nlc3MgaW1wbGllcyBrZXJuZWwgcmVhZC93cml0ZSBhY2Nlc3MsCi0gKiBzbyB0byB3cml0ZS1wcm90ZWN0IGtlcm5lbCBtZW1vcnkgd2UgbXVzdCB0dXJuIG9uIHVzZXIgYWNjZXNzICovCi0jZGVmaW5lIF9QQUdFX0tFUk5FTF9STwkoX1BBR0VfQkFTRSB8IF9QQUdFX1NIQVJFRCB8IF9QQUdFX1VTRVIpCi0jZWxzZQotI2RlZmluZSBfUEFHRV9LRVJORUxfUk8JKF9QQUdFX0JBU0UgfCBfUEFHRV9TSEFSRUQpCi0jZW5kaWYKLQotI2RlZmluZSBfUEFHRV9JTwkoX1BBR0VfS0VSTkVMX05DIHwgX1BBR0VfR1VBUkRFRCkKLSNkZWZpbmUgX1BBR0VfUkFNCShfUEFHRV9LRVJORUwgfCBfUEFHRV9IV0VYRUMpCi0KLSNpZiBkZWZpbmVkKENPTkZJR19LR0RCKSB8fCBkZWZpbmVkKENPTkZJR19YTU9OKSB8fCBkZWZpbmVkKENPTkZJR19CRElfU1dJVENIKSB8fFwKLQlkZWZpbmVkKENPTkZJR19LUFJPQkVTKQotLyogV2Ugd2FudCB0aGUgZGVidWdnZXJzIHRvIGJlIGFibGUgdG8gc2V0IGJyZWFrcG9pbnRzIGFueXdoZXJlLCBzbwotICogZG9uJ3Qgd3JpdGUgcHJvdGVjdCB0aGUga2VybmVsIHRleHQgKi8KLSNkZWZpbmUgX1BBR0VfUkFNX1RFWFQJX1BBR0VfUkFNCi0jZWxzZQotI2RlZmluZSBfUEFHRV9SQU1fVEVYVAkoX1BBR0VfS0VSTkVMX1JPIHwgX1BBR0VfSFdFWEVDKQotI2VuZGlmCi0KLSNkZWZpbmUgUEFHRV9OT05FCV9fcGdwcm90KF9QQUdFX0JBU0UpCi0jZGVmaW5lIFBBR0VfUkVBRE9OTFkJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIpCi0jZGVmaW5lIFBBR0VfUkVBRE9OTFlfWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0VYRUMpCi0jZGVmaW5lIFBBR0VfU0hBUkVECV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfUlcpCi0jZGVmaW5lIFBBR0VfU0hBUkVEX1gJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9SVyB8IF9QQUdFX0VYRUMpCi0jZGVmaW5lIFBBR0VfQ09QWQlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUikKLSNkZWZpbmUgUEFHRV9DT1BZX1gJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9FWEVDKQotCi0jZGVmaW5lIFBBR0VfS0VSTkVMCQlfX3BncHJvdChfUEFHRV9SQU0pCi0jZGVmaW5lIFBBR0VfS0VSTkVMX05PQ0FDSEUJX19wZ3Byb3QoX1BBR0VfSU8pCi0KLS8qCi0gKiBUaGUgUG93ZXJQQyBjYW4gb25seSBkbyBleGVjdXRlIHByb3RlY3Rpb24gb24gYSBzZWdtZW50ICgyNTZNQikgYmFzaXMsCi0gKiBub3Qgb24gYSBwYWdlIGJhc2lzLiAgU28gd2UgY29uc2lkZXIgZXhlY3V0ZSBwZXJtaXNzaW9uIHRoZSBzYW1lIGFzIHJlYWQuCi0gKiBBbHNvLCB3cml0ZSBwZXJtaXNzaW9ucyBpbXBseSByZWFkIHBlcm1pc3Npb25zLgotICogVGhpcyBpcyB0aGUgY2xvc2VzdCB3ZSBjYW4gZ2V0Li4KLSAqLwotI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FCi0jZGVmaW5lIF9fUDAwMQlQQUdFX1JFQURPTkxZX1gKLSNkZWZpbmUgX19QMDEwCVBBR0VfQ09QWQotI2RlZmluZSBfX1AwMTEJUEFHRV9DT1BZX1gKLSNkZWZpbmUgX19QMTAwCVBBR0VfUkVBRE9OTFkKLSNkZWZpbmUgX19QMTAxCVBBR0VfUkVBRE9OTFlfWAotI2RlZmluZSBfX1AxMTAJUEFHRV9DT1BZCi0jZGVmaW5lIF9fUDExMQlQQUdFX0NPUFlfWAotCi0jZGVmaW5lIF9fUzAwMAlQQUdFX05PTkUKLSNkZWZpbmUgX19TMDAxCVBBR0VfUkVBRE9OTFlfWAotI2RlZmluZSBfX1MwMTAJUEFHRV9TSEFSRUQKLSNkZWZpbmUgX19TMDExCVBBR0VfU0hBUkVEX1gKLSNkZWZpbmUgX19TMTAwCVBBR0VfUkVBRE9OTFkKLSNkZWZpbmUgX19TMTAxCVBBR0VfUkVBRE9OTFlfWAotI2RlZmluZSBfX1MxMTAJUEFHRV9TSEFSRUQKLSNkZWZpbmUgX19TMTExCVBBR0VfU0hBUkVEX1gKKy8qIEFuZCBoZXJlIHdlIGluY2x1ZGUgY29tbW9uIGRlZmluaXRpb25zICovCisjaW5jbHVkZSA8YXNtL3B0ZS1jb21tb24uaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KLS8qIE1ha2Ugc3VyZSB3ZSBnZXQgYSBsaW5rIGVycm9yIGlmIFBNRF9QQUdFX1NJWkUgaXMgZXZlciBjYWxsZWQgb24gYQotICoga2VybmVsIHdpdGhvdXQgbGFyZ2UgcGFnZSBQTUQgc3VwcG9ydCAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYmFkX2NhbGxfdG9fUE1EX1BBR0VfU0laRSh2b2lkKTsKIAotLyoKLSAqIENvbnZlcnNpb25zIGJldHdlZW4gUFRFIHZhbHVlcyBhbmQgcGFnZSBmcmFtZSBudW1iZXJzLgotICovCi0KLS8qIGluIHNvbWUgY2FzZSB3ZSB3YW50IHRvIGFkZGl0aW9uYWx5IGFkanVzdCB3aGVyZSB0aGUgcGZuIGlzIGluIHRoZSBwdGUgdG8KLSAqIGFsbG93IHJvb20gZm9yIG1vcmUgZmxhZ3MgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19GU0xfQk9PS0UpICYmIGRlZmluZWQoQ09ORklHX1BURV82NEJJVCkKLSNkZWZpbmUgUEZOX1NISUZUX09GRlNFVAkoUEFHRV9TSElGVCArIDgpCi0jZWxzZQotI2RlZmluZSBQRk5fU0hJRlRfT0ZGU0VUCShQQUdFX1NISUZUKQotI2VuZGlmCi0KLSNkZWZpbmUgcHRlX3Bmbih4KQkJKHB0ZV92YWwoeCkgPj4gUEZOX1NISUZUX09GRlNFVCkKLSNkZWZpbmUgcHRlX3BhZ2UoeCkJCXBmbl90b19wYWdlKHB0ZV9wZm4oeCkpCi0KLSNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpCV9fcHRlKCgocHRlX2Jhc2ljX3QpKHBmbikgPDwgUEZOX1NISUZUX09GRlNFVCkgfFwKLQkJCQkJcGdwcm90X3ZhbChwcm90KSkKLSNkZWZpbmUgbWtfcHRlKHBhZ2UsIHByb3QpCXBmbl9wdGUocGFnZV90b19wZm4ocGFnZSksIHByb3QpCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KLSNkZWZpbmUgcHRlX25vbmUocHRlKQkJKChwdGVfdmFsKHB0ZSkgJiB+X1BURV9OT05FX01BU0spID09IDApCi0jZGVmaW5lIHB0ZV9wcmVzZW50KHB0ZSkJKHB0ZV92YWwocHRlKSAmIF9QQUdFX1BSRVNFTlQpCiAjZGVmaW5lIHB0ZV9jbGVhcihtbSwgYWRkciwgcHRlcCkgXAogCWRvIHsgcHRlX3VwZGF0ZShwdGVwLCB+X1BBR0VfSEFTSFBURSwgMCk7IH0gd2hpbGUgKDApCiAKQEAgLTU0Niw0MyArMTEwLDYgQEAKICNkZWZpbmUJcG1kX3ByZXNlbnQocG1kKQkocG1kX3ZhbChwbWQpICYgX1BNRF9QUkVTRU5UX01BU0spCiAjZGVmaW5lCXBtZF9jbGVhcihwbWRwKQkJZG8geyBwbWRfdmFsKCoocG1kcCkpID0gMDsgfSB3aGlsZSAoMCkKIAotI2lmbmRlZiBfX0FTU0VNQkxZX18KLS8qCi0gKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCi0gKiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9SVzsgfQotc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0RJUlRZOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfQUNDRVNTRUQ7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZJTEU7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9zcGVjaWFsKHB0ZV90IHB0ZSkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfU1BFQ0lBTDsgfQotCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpICY9IH4oX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFKTsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgJj0gfihfUEFHRV9ESVJUWSB8IF9QQUdFX0hXV1JJVEUpOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9Ci0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1JXOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9ESVJUWTsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfQUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfU1BFQ0lBTDsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwZ3Byb3RfdCBwdGVfcGdwcm90KHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gX19wZ3Byb3QocHRlX3ZhbChwdGUpICYgUEFHRV9QUk9UX0JJVFMpOwotfQotCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQotewotCXB0ZV92YWwocHRlKSA9IChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9DSEdfTUFTSykgfCBwZ3Byb3RfdmFsKG5ld3Byb3QpOwotCXJldHVybiBwdGU7Ci19Ci0KIC8qCiAgKiBXaGVuIGZsdXNoaW5nIHRoZSB0bGIgZW50cnkgZm9yIGEgcGFnZSwgd2UgYWxzbyBuZWVkIHRvIGZsdXNoIHRoZSBoYXNoCiAgKiB0YWJsZSBlbnRyeS4gIGZsdXNoX2hhc2hfcGFnZXMgaXMgYXNzZW1ibGVyIChmb3Igc3BlZWQpIGluIGhhc2h0YWJsZS5TLgpAQCAtNTk5LDExICsxMjYsMTkgQEAKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKIAogLyoKLSAqIEF0b21pYyBQVEUgdXBkYXRlcy4KKyAqIFBURSB1cGRhdGVzLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhbiBleGlzdGluZworICogdmFsaWQgUFRFIGlzIHVwZGF0ZWQuIFRoaXMgZG9lcyAtbm90LSBpbmNsdWRlIHNldF9wdGVfYXQoKQorICogd2hpY2ggbm93YWRheXMgb25seSBzZXRzIGEgbmV3IFBURS4KICAqCi0gKiBwdGVfdXBkYXRlIGNsZWFycyBhbmQgc2V0cyBiaXQgYXRvbWljYWxseSwgYW5kIHJldHVybnMKLSAqIHRoZSBvbGQgcHRlIHZhbHVlLiAgSW4gdGhlIDY0LWJpdCBQVEUgY2FzZSB3ZSBsb2NrIGFyb3VuZCB0aGUKLSAqIGxvdyBQVEUgd29yZCBzaW5jZSB3ZSBleHBlY3QgQUxMIGZsYWcgYml0cyB0byBiZSB0aGVyZQorICogRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIE1NVSwgd2UgbWF5IG5lZWQgdG8gdXNlIGF0b21pYyB1cGRhdGVzCisgKiBhbmQgdGhlIFBURSBtYXkgYmUgZWl0aGVyIDMyIG9yIDY0IGJpdCB3aWRlLiBJbiB0aGUgbGF0ZXIgY2FzZSwKKyAqIHdoZW4gdXNpbmcgYXRvbWljIHVwZGF0ZXMsIG9ubHkgdGhlIGxvdyBwYXJ0IG9mIHRoZSBQVEUgaXMKKyAqIGFjY2Vzc2VkIGF0b21pY2FsbHkuCisgKgorICogSW4gYWRkaXRpb24sIG9uIDQ0eCwgd2UgYWxzbyBtYWludGFpbiBhIGdsb2JhbCBmbGFnIGluZGljYXRpbmcKKyAqIHRoYXQgYW4gZXhlY3V0YWJsZSB1c2VyIG1hcHBpbmcgd2FzIG1vZGlmaWVkLCB3aGljaCBpcyBuZWVkZWQKKyAqIHRvIHByb3Blcmx5IGZsdXNoIHRoZSB2aXJ0dWFsbHkgdGFnZ2VkIGluc3RydWN0aW9uIGNhY2hlIG9mCisgKiB0aG9zZSBpbXBsZW1lbnRhdGlvbnMuCiAgKi8KICNpZm5kZWYgQ09ORklHX1BURV82NEJJVAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV91cGRhdGUocHRlX3QgKnAsCkBAIC02NjgsNDQgKzIwMyw2IEBACiAjZW5kaWYgLyogQ09ORklHX1BURV82NEJJVCAqLwogCiAvKgotICogc2V0X3B0ZSBzdG9yZXMgYSBsaW51eCBQVEUgaW50byB0aGUgbGludXggcGFnZSB0YWJsZS4KLSAqIE9uIG1hY2hpbmVzIHdoaWNoIHVzZSBhbiBNTVUgaGFzaCB0YWJsZSB3ZSBhdm9pZCBjaGFuZ2luZyB0aGUKLSAqIF9QQUdFX0hBU0hQVEUgYml0LgotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0jaWYgKF9QQUdFX0hBU0hQVEUgIT0gMCkgJiYgZGVmaW5lZChDT05GSUdfU01QKSAmJiAhZGVmaW5lZChDT05GSUdfUFRFXzY0QklUKQotCXB0ZV91cGRhdGUocHRlcCwgfl9QQUdFX0hBU0hQVEUsIHB0ZV92YWwocHRlKSAmIH5fUEFHRV9IQVNIUFRFKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1BURV82NEJJVCkgJiYgZGVmaW5lZChDT05GSUdfU01QKQotI2lmIF9QQUdFX0hBU0hQVEUgIT0gMAotCWlmIChwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX0hBU0hQVEUpCi0JCWZsdXNoX2hhc2hfZW50cnkobW0sIHB0ZXAsIGFkZHIpOwotI2VuZGlmCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oIlwKLQkJc3R3JVUwJVgwICUyLCUwXG5cCi0JCWVpZWlvXG5cCi0JCXN0dyVVMCVYMCAlTDIsJTEiCi0JOiAiPW0iICgqcHRlcCksICI9bSIgKCooKHVuc2lnbmVkIGNoYXIgKilwdGVwKzQpKQotCTogInIiIChwdGUpIDogIm1lbW9yeSIpOwotI2Vsc2UKLQkqcHRlcCA9IF9fcHRlKChwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX0hBU0hQVEUpCi0JCSAgICAgIHwgKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9IQVNIUFRFKSk7Ci0jZW5kaWYKLX0KLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLSNpZiBkZWZpbmVkKENPTkZJR19QVEVfNjRCSVQpICYmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgZGVmaW5lZChDT05GSUdfREVCVUdfVk0pCi0JV0FSTl9PTihwdGVfcHJlc2VudCgqcHRlcCkpOwotI2VuZGlmCi0JX19zZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGUpOwotfQotCi0vKgogICogMi42IGNhbGxzIHRoaXMgd2l0aG91dCBmbHVzaGluZyB0aGUgVExCIGVudHJ5OyB0aGlzIGlzIHdyb25nCiAgKiBmb3Igb3VyIGhhc2gtYmFzZWQgaW1wbGVtZW50YXRpb24sIHdlIGZpeCB0aGF0IHVwIGhlcmUuCiAgKi8KQEAgLTc0NSwyNCArMjQyLDE0IEBACiB9CiAKIAotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1NFVF9BQ0NFU1NfRkxBR1MKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhwdGVfdCAqcHRlcCwgcHRlX3QgZW50cnksIGludCBkaXJ0eSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhwdGVfdCAqcHRlcCwgcHRlX3QgZW50cnkpCiB7CiAJdW5zaWduZWQgbG9uZyBiaXRzID0gcHRlX3ZhbChlbnRyeSkgJgotCQkoX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1JXKTsKKwkJKF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9SVyB8CisJCSBfUEFHRV9IV0VYRUMgfCBfUEFHRV9FWEVDKTsKIAlwdGVfdXBkYXRlKHB0ZXAsIDAsIGJpdHMpOwogfQogCi0jZGVmaW5lICBwdGVwX3NldF9hY2Nlc3NfZmxhZ3MoX192bWEsIF9fYWRkcmVzcywgX19wdGVwLCBfX2VudHJ5LCBfX2RpcnR5KSBcCi0oewkJCQkJCQkJCSAgIFwKLQlpbnQgX19jaGFuZ2VkID0gIXB0ZV9zYW1lKCooX19wdGVwKSwgX19lbnRyeSk7CQkJICAgXAotCWlmIChfX2NoYW5nZWQpIHsJCQkJCQkgICBcCi0JCV9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKF9fcHRlcCwgX19lbnRyeSwgX19kaXJ0eSk7ICAgICAgICAgXAotCQlmbHVzaF90bGJfcGFnZV9ub2hhc2goX192bWEsIF9fYWRkcmVzcyk7CQkgICBcCi0JfQkJCQkJCQkJICAgXAotCV9fY2hhbmdlZDsJCQkJCQkJICAgXAotfSkKLQogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU0FNRQogI2RlZmluZSBwdGVfc2FtZShBLEIpCSgoKHB0ZV92YWwoQSkgXiBwdGVfdmFsKEIpKSAmIH5fUEFHRV9IQVNIUFRFKSA9PSAwKQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGM2NC00ay5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQtNGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWVmZGNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQtNGsuaApAQCAtMCwwICsxLDc0IEBACisjaWZuZGVmIF9BU01fUE9XRVJQQ19QR1RBQkxFX1BQQzY0XzRLX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1BHVEFCTEVfUFBDNjRfNEtfSAorLyoKKyAqIEVudHJpZXMgcGVyIHBhZ2UgZGlyZWN0b3J5IGxldmVsLiAgVGhlIFBURSBsZXZlbCBtdXN0IHVzZSBhIDY0YiByZWNvcmQKKyAqIGZvciBlYWNoIHBhZ2UgdGFibGUgZW50cnkuICBUaGUgUE1EIGFuZCBQR0QgbGV2ZWwgdXNlIGEgMzJiIHJlY29yZCBmb3IKKyAqIGVhY2ggZW50cnkgYnkgYXNzdW1pbmcgdGhhdCBlYWNoIGVudHJ5IGlzIHBhZ2UgYWxpZ25lZC4KKyAqLworI2RlZmluZSBQVEVfSU5ERVhfU0laRSAgOQorI2RlZmluZSBQTURfSU5ERVhfU0laRSAgNworI2RlZmluZSBQVURfSU5ERVhfU0laRSAgNworI2RlZmluZSBQR0RfSU5ERVhfU0laRSAgOQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBQVEVfVEFCTEVfU0laRQkoc2l6ZW9mKHB0ZV90KSA8PCBQVEVfSU5ERVhfU0laRSkKKyNkZWZpbmUgUE1EX1RBQkxFX1NJWkUJKHNpemVvZihwbWRfdCkgPDwgUE1EX0lOREVYX1NJWkUpCisjZGVmaW5lIFBVRF9UQUJMRV9TSVpFCShzaXplb2YocHVkX3QpIDw8IFBVRF9JTkRFWF9TSVpFKQorI2RlZmluZSBQR0RfVEFCTEVfU0laRQkoc2l6ZW9mKHBnZF90KSA8PCBQR0RfSU5ERVhfU0laRSkKKyNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBQVFJTX1BFUl9QVEUJKDEgPDwgUFRFX0lOREVYX1NJWkUpCisjZGVmaW5lIFBUUlNfUEVSX1BNRAkoMSA8PCBQTURfSU5ERVhfU0laRSkKKyNkZWZpbmUgUFRSU19QRVJfUFVECSgxIDw8IFBNRF9JTkRFWF9TSVpFKQorI2RlZmluZSBQVFJTX1BFUl9QR0QJKDEgPDwgUEdEX0lOREVYX1NJWkUpCisKKy8qIFBNRF9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCisjZGVmaW5lIFBNRF9TSElGVAkoUEFHRV9TSElGVCArIFBURV9JTkRFWF9TSVpFKQorI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKKyNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCisKKy8qIFdpdGggNGsgYmFzZSBwYWdlIHNpemUsIGh1Z2VwYWdlIFBURXMgZ28gYXQgdGhlIFBNRCBsZXZlbCAqLworI2RlZmluZSBNSU5fSFVHRVBURV9TSElGVAlQTURfU0hJRlQKKworLyogUFVEX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworI2RlZmluZSBQVURfU0hJRlQJKFBNRF9TSElGVCArIFBNRF9JTkRFWF9TSVpFKQorI2RlZmluZSBQVURfU0laRQkoMVVMIDw8IFBVRF9TSElGVCkKKyNkZWZpbmUgUFVEX01BU0sJKH4oUFVEX1NJWkUtMSkpCisKKy8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIGZvdXJ0aC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAgKi8KKyNkZWZpbmUgUEdESVJfU0hJRlQJKFBVRF9TSElGVCArIFBVRF9JTkRFWF9TSVpFKQorI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCisjZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRS0xKSkKKworLyogQml0cyB0byBtYXNrIG91dCBmcm9tIGEgUE1EIHRvIGdldCB0byB0aGUgUFRFIHBhZ2UgKi8KKyNkZWZpbmUgUE1EX01BU0tFRF9CSVRTCQkwCisvKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQVUQgdG8gZ2V0IHRvIHRoZSBQTUQgcGFnZSAqLworI2RlZmluZSBQVURfTUFTS0VEX0JJVFMJCTAKKy8qIEJpdHMgdG8gbWFzayBvdXQgZnJvbSBhIFBHRCB0byBnZXQgdG8gdGhlIFBVRCBwYWdlICovCisjZGVmaW5lIFBHRF9NQVNLRURfQklUUwkJMAorCisKKy8qCisgKiA0LWxldmVsIHBhZ2UgdGFibGVzIHJlbGF0ZWQgYml0cworICovCisKKyNkZWZpbmUgcGdkX25vbmUocGdkKQkJKCFwZ2RfdmFsKHBnZCkpCisjZGVmaW5lIHBnZF9iYWQocGdkKQkJKHBnZF92YWwocGdkKSA9PSAwKQorI2RlZmluZSBwZ2RfcHJlc2VudChwZ2QpCShwZ2RfdmFsKHBnZCkgIT0gMCkKKyNkZWZpbmUgcGdkX2NsZWFyKHBnZHApCQkocGdkX3ZhbCgqKHBnZHApKSA9IDApCisjZGVmaW5lIHBnZF9wYWdlX3ZhZGRyKHBnZCkJKHBnZF92YWwocGdkKSAmIH5QR0RfTUFTS0VEX0JJVFMpCisjZGVmaW5lIHBnZF9wYWdlKHBnZCkJCXZpcnRfdG9fcGFnZShwZ2RfcGFnZV92YWRkcihwZ2QpKQorCisjZGVmaW5lIHB1ZF9vZmZzZXQocGdkcCwgYWRkcikJXAorICAoKChwdWRfdCAqKSBwZ2RfcGFnZV92YWRkcigqKHBnZHApKSkgKyBcCisgICAgKCgoYWRkcikgPj4gUFVEX1NISUZUKSAmIChQVFJTX1BFUl9QVUQgLSAxKSkpCisKKyNkZWZpbmUgcHVkX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcHVkICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwdWRfdmFsKGUpKQorCisvKgorICogT24gYWxsIDRLIHNldHVwcywgcmVtYXBfNGtfcGZuKCkgZXF1YXRlcyB0byByZW1hcF9wZm5fcmFuZ2UoKSAqLworI2RlZmluZSByZW1hcF80a19wZm4odm1hLCBhZGRyLCBwZm4sIHByb3QpCVwKKwlyZW1hcF9wZm5fcmFuZ2UoKHZtYSksIChhZGRyKSwgKHBmbiksIFBBR0VfU0laRSwgKHByb3QpKQorCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BHVEFCTEVfUFBDNjRfNEtfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQtNjRrLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGM2NC02NGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2MwODViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQtNjRrLmgKQEAgLTAsMCArMSw0MiBAQAorI2lmbmRlZiBfQVNNX1BPV0VSUENfUEdUQUJMRV9QUEM2NF82NEtfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfUEdUQUJMRV9QUEM2NF82NEtfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oPgorCisKKyNkZWZpbmUgUFRFX0lOREVYX1NJWkUgIDEyCisjZGVmaW5lIFBNRF9JTkRFWF9TSVpFICAxMgorI2RlZmluZSBQVURfSU5ERVhfU0laRQkwCisjZGVmaW5lIFBHRF9JTkRFWF9TSVpFICA0CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgUFRFX1RBQkxFX1NJWkUJKHNpemVvZihyZWFsX3B0ZV90KSA8PCBQVEVfSU5ERVhfU0laRSkKKyNkZWZpbmUgUE1EX1RBQkxFX1NJWkUJKHNpemVvZihwbWRfdCkgPDwgUE1EX0lOREVYX1NJWkUpCisjZGVmaW5lIFBHRF9UQUJMRV9TSVpFCShzaXplb2YocGdkX3QpIDw8IFBHRF9JTkRFWF9TSVpFKQorCisjZGVmaW5lIFBUUlNfUEVSX1BURQkoMSA8PCBQVEVfSU5ERVhfU0laRSkKKyNkZWZpbmUgUFRSU19QRVJfUE1ECSgxIDw8IFBNRF9JTkRFWF9TSVpFKQorI2RlZmluZSBQVFJTX1BFUl9QR0QJKDEgPDwgUEdEX0lOREVYX1NJWkUpCisKKy8qIFdpdGggNGsgYmFzZSBwYWdlIHNpemUsIGh1Z2VwYWdlIFBURXMgZ28gYXQgdGhlIFBNRCBsZXZlbCAqLworI2RlZmluZSBNSU5fSFVHRVBURV9TSElGVAlQQUdFX1NISUZUCisKKy8qIFBNRF9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCisjZGVmaW5lIFBNRF9TSElGVAkoUEFHRV9TSElGVCArIFBURV9JTkRFWF9TSVpFKQorI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKKyNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCisKKy8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworI2RlZmluZSBQR0RJUl9TSElGVAkoUE1EX1NISUZUICsgUE1EX0lOREVYX1NJWkUpCisjZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKKyNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQorCisjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCisKKy8qIEJpdHMgdG8gbWFzayBvdXQgZnJvbSBhIFBNRCB0byBnZXQgdG8gdGhlIFBURSBwYWdlICovCisjZGVmaW5lIFBNRF9NQVNLRURfQklUUwkJMHgxZmYKKy8qIEJpdHMgdG8gbWFzayBvdXQgZnJvbSBhIFBHRC9QVUQgdG8gZ2V0IHRvIHRoZSBQTUQgcGFnZSAqLworI2RlZmluZSBQVURfTUFTS0VEX0JJVFMJCTB4MWZmCisKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfUEdUQUJMRV9QUEM2NF82NEtfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LmgKaW5kZXggYjBmMThiZS4uYzQwZGIwNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGM2NC5oCkBAIC0xMSw5ICsxMSw5IEBACiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKICNpZmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUwotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLTY0ay5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLXBwYzY0LTY0ay5oPgogI2Vsc2UKLSNpbmNsdWRlIDxhc20vcGd0YWJsZS00ay5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLXBwYzY0LTRrLmg+CiAjZW5kaWYKIAogI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMApAQCAtMjUsNiArMjUsOCBAQAogICAgICAgICAgICAgICAgIAkgICAgUFVEX0lOREVYX1NJWkUgKyBQR0RfSU5ERVhfU0laRSArIFBBR0VfU0hJRlQpCiAjZGVmaW5lIFBHVEFCTEVfUkFOR0UgKEFTTV9DT05TVCgxKSA8PCBQR1RBQkxFX0VBRERSX1NJWkUpCiAKKworLyogU29tZSBzYW5pdHkgY2hlY2tpbmcgKi8KICNpZiBUQVNLX1NJWkVfVVNFUjY0ID4gUEdUQUJMRV9SQU5HRQogI2Vycm9yIFRBU0tfU0laRV9VU0VSNjQgZXhjZWVkcyBwYWdldGFibGUgcmFuZ2UKICNlbmRpZgpAQCAtMzMsNyArMzUsNiBAQAogI2Vycm9yIFRBU0tfU0laRV9VU0VSNjQgZXhjZWVkcyB1c2VyIFZTSUQgcmFuZ2UKICNlbmRpZgogCi0KIC8qCiAgKiBEZWZpbmUgdGhlIGFkZHJlc3MgcmFuZ2Ugb2YgdGhlIHZtYWxsb2MgVk0gYXJlYS4KICAqLwpAQCAtNzYsODIgKzc3LDExIEBACiAKIAogLyoKLSAqIENvbW1vbiBiaXRzIGluIGEgbGludXgtc3R5bGUgUFRFLiAgVGhlc2UgbWF0Y2ggdGhlIGJpdHMgaW4gdGhlCi0gKiAoaGFyZHdhcmUtZGVmaW5lZCkgUG93ZXJQQyBQVEUgYXMgY2xvc2VseSBhcyBwb3NzaWJsZS4gQWRkaXRpb25hbAotICogYml0cyBtYXkgYmUgZGVmaW5lZCBpbiBwZ3RhYmxlLSouaAorICogSW5jbHVkZSB0aGUgUFRFIGJpdHMgZGVmaW5pdGlvbnMKICAqLwotI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAwMSAvKiBzb2Z0d2FyZTogcHRlIGNvbnRhaW5zIGEgdHJhbnNsYXRpb24gKi8KLSNkZWZpbmUgX1BBR0VfVVNFUgkweDAwMDIgLyogbWF0Y2hlcyBvbmUgb2YgdGhlIFBQIGJpdHMgKi8KLSNkZWZpbmUgX1BBR0VfRklMRQkweDAwMDIgLyogKCFwcmVzZW50IG9ubHkpIHNvZnR3YXJlOiBwdGUgaG9sZHMgZmlsZSBvZmZzZXQgKi8KLSNkZWZpbmUgX1BBR0VfRVhFQwkweDAwMDQgLyogTm8gZXhlY3V0ZSBvbiBQT1dFUjQgYW5kIG5ld2VyICh3ZSBpbnZlcnQpICovCi0jZGVmaW5lIF9QQUdFX0dVQVJERUQJMHgwMDA4Ci0jZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTB4MDAxMCAvKiBNOiBlbmZvcmNlIG1lbW9yeSBjb2hlcmVuY2UgKFNNUCBzeXN0ZW1zKSAqLwotI2RlZmluZSBfUEFHRV9OT19DQUNIRQkweDAwMjAgLyogSTogY2FjaGUgaW5oaWJpdCAqLwotI2RlZmluZSBfUEFHRV9XUklURVRIUlUJMHgwMDQwIC8qIFc6IGNhY2hlIHdyaXRlLXRocm91Z2ggKi8KLSNkZWZpbmUgX1BBR0VfRElSVFkJMHgwMDgwIC8qIEM6IHBhZ2UgY2hhbmdlZCAqLwotI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDAxMDAgLyogUjogcGFnZSByZWZlcmVuY2VkICovCi0jZGVmaW5lIF9QQUdFX1JXCTB4MDIwMCAvKiBzb2Z0d2FyZTogdXNlciB3cml0ZSBhY2Nlc3MgYWxsb3dlZCAqLwotI2RlZmluZSBfUEFHRV9CVVNZCTB4MDgwMCAvKiBzb2Z0d2FyZTogUFRFICYgaGFzaCBhcmUgYnVzeSAqLworI2luY2x1ZGUgPGFzbS9wdGUtaGFzaDY0Lmg+CisjaW5jbHVkZSA8YXNtL3B0ZS1jb21tb24uaD4KIAotLyogU3Ryb25nIEFjY2VzcyBPcmRlcmluZyAqLwotI2RlZmluZSBfUEFHRV9TQU8JKF9QQUdFX1dSSVRFVEhSVSB8IF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfQ09IRVJFTlQpCi0KLSNkZWZpbmUgX1BBR0VfQkFTRQkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfQ09IRVJFTlQpCi0KLSNkZWZpbmUgX1BBR0VfV1JFTkFCTEUJKF9QQUdFX1JXIHwgX1BBR0VfRElSVFkpCi0KLS8qIF9fcGdwcm90IGRlZmluZWQgaW4gYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaCAqLwotI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEKQotCi0jZGVmaW5lIFBBR0VfU0hBUkVECV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIpCi0jZGVmaW5lIFBBR0VfU0hBUkVEX1gJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0VYRUMpCi0jZGVmaW5lIFBBR0VfQ09QWQlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUikKLSNkZWZpbmUgUEFHRV9DT1BZX1gJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9FWEVDKQotI2RlZmluZSBQQUdFX1JFQURPTkxZCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSKQotI2RlZmluZSBQQUdFX1JFQURPTkxZX1gJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9FWEVDKQotI2RlZmluZSBQQUdFX0tFUk5FTAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfV1JFTkFCTEUpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0NJCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCB8IFwKLQkJCSAgICAgICBfUEFHRV9XUkVOQUJMRSB8IF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfR1VBUkRFRCkKLSNkZWZpbmUgUEFHRV9LRVJORUxfRVhFQyBfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfV1JFTkFCTEUgfCBfUEFHRV9FWEVDKQotCi0jZGVmaW5lIFBBR0VfQUdQCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9XUkVOQUJMRSB8IF9QQUdFX05PX0NBQ0hFKQotI2RlZmluZSBIQVZFX1BBR0VfQUdQCi0KLSNkZWZpbmUgUEFHRV9QUk9UX0JJVFMJKF9QQUdFX0dVQVJERUQgfCBfUEFHRV9DT0hFUkVOVCB8IFwKLQkJCSBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX1dSSVRFVEhSVSB8CQlcCi0JCQkgX1BBR0VfNEtfUEZOIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwJCVwKLQkJCSBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfRVhFQykKLS8qIFBURUlEWCBuaWJibGUgKi8KLSNkZWZpbmUgX1BURUlEWF9TRUNPTkRBUlkJMHg4Ci0jZGVmaW5lIF9QVEVJRFhfR1JPVVBfSVgJMHg3Ci0KLQotLyoKLSAqIFBPV0VSNCBhbmQgbmV3ZXIgaGF2ZSBwZXIgcGFnZSBleGVjdXRlIHByb3RlY3Rpb24sIG9sZGVyIGNoaXBzIGNhbiBvbmx5Ci0gKiBkbyB0aGlzIG9uIGEgc2VnbWVudCAoMjU2TUIpIGJhc2lzLgotICoKLSAqIEFsc28sIHdyaXRlIHBlcm1pc3Npb25zIGltcGx5IHJlYWQgcGVybWlzc2lvbnMuCi0gKiBUaGlzIGlzIHRoZSBjbG9zZXN0IHdlIGNhbiBnZXQuLgotICoKLSAqIE5vdGUgZHVlIHRvIHRoZSB3YXkgdm0gZmxhZ3MgYXJlIGxhaWQgb3V0LCB0aGUgYml0cyBhcmUgWFdSCi0gKi8KLSNkZWZpbmUgX19QMDAwCVBBR0VfTk9ORQotI2RlZmluZSBfX1AwMDEJUEFHRV9SRUFET05MWQotI2RlZmluZSBfX1AwMTAJUEFHRV9DT1BZCi0jZGVmaW5lIF9fUDAxMQlQQUdFX0NPUFkKLSNkZWZpbmUgX19QMTAwCVBBR0VfUkVBRE9OTFlfWAotI2RlZmluZSBfX1AxMDEJUEFHRV9SRUFET05MWV9YCi0jZGVmaW5lIF9fUDExMAlQQUdFX0NPUFlfWAotI2RlZmluZSBfX1AxMTEJUEFHRV9DT1BZX1gKLQotI2RlZmluZSBfX1MwMDAJUEFHRV9OT05FCi0jZGVmaW5lIF9fUzAwMQlQQUdFX1JFQURPTkxZCi0jZGVmaW5lIF9fUzAxMAlQQUdFX1NIQVJFRAotI2RlZmluZSBfX1MwMTEJUEFHRV9TSEFSRUQKLSNkZWZpbmUgX19TMTAwCVBBR0VfUkVBRE9OTFlfWAotI2RlZmluZSBfX1MxMDEJUEFHRV9SRUFET05MWV9YCi0jZGVmaW5lIF9fUzExMAlQQUdFX1NIQVJFRF9YCi0jZGVmaW5lIF9fUzExMQlQQUdFX1NIQVJFRF9YCiAKICNpZmRlZiBDT05GSUdfUFBDX01NX1NMSUNFUwogI2RlZmluZSBIQVZFX0FSQ0hfVU5NQVBQRURfQVJFQQpAQCAtMTYxLDMzICs5MSwzOSBAQAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogLyoKLSAqIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCi0gKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgotICoKLSAqIG1rX3B0ZSB0YWtlcyBhIChzdHJ1Y3QgcGFnZSAqKSBhcyBpbnB1dAorICogVGhpcyBpcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB2YXJpb3VzIFBURSBhY2Nlc3NvcnMsIGl0J3MKKyAqIHVzZWQgaW4gYWxsIGNhc2VzIGV4Y2VwdCBCb29rM1Mgd2l0aCA2NEsgcGFnZXMgd2hlcmUgd2UgaGF2ZSBhCisgKiBjb25jZXB0IG9mIHN1Yi1wYWdlcwogICovCi0jZGVmaW5lIG1rX3B0ZShwYWdlLCBwZ3Byb3QpCXBmbl9wdGUocGFnZV90b19wZm4ocGFnZSksIChwZ3Byb3QpKQorI2lmbmRlZiBfX3JlYWxfcHRlCiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcGZuX3B0ZSh1bnNpZ25lZCBsb25nIHBmbiwgcGdwcm90X3QgcGdwcm90KQotewotCXB0ZV90IHB0ZTsKKyNpZmRlZiBTVFJJQ1RfTU1fVFlQRUNIRUNLUworI2RlZmluZSBfX3JlYWxfcHRlKGUscCkJCSgocmVhbF9wdGVfdCl7KGUpfSkKKyNkZWZpbmUgX19ycHRlX3RvX3B0ZShyKQkoKHIpLnB0ZSkKKyNlbHNlCisjZGVmaW5lIF9fcmVhbF9wdGUoZSxwKQkJKGUpCisjZGVmaW5lIF9fcnB0ZV90b19wdGUocikJKF9fcHRlKHIpKQorI2VuZGlmCisjZGVmaW5lIF9fcnB0ZV90b19oaWR4KHIsaW5kZXgpCShwdGVfdmFsKF9fcnB0ZV90b19wdGUocikpID4+IDEyKQogCisjZGVmaW5lIHB0ZV9pdGVyYXRlX2hhc2hlZF9zdWJwYWdlcyhycHRlLCBwc2l6ZSwgdmEsIGluZGV4LCBzaGlmdCkgICAgICAgXAorCWRvIHsJCQkJCQkJICAgICAgICAgXAorCQlpbmRleCA9IDA7CQkJCQkgICAgICAgICBcCisJCXNoaWZ0ID0gbW11X3BzaXplX2RlZnNbcHNpemVdLnNoaWZ0OwkJICAgICAgICAgXAogCi0JcHRlX3ZhbChwdGUpID0gKHBmbiA8PCBQVEVfUlBOX1NISUZUKSB8IHBncHJvdF92YWwocGdwcm90KTsKLQlyZXR1cm4gcHRlOwotfQorI2RlZmluZSBwdGVfaXRlcmF0ZV9oYXNoZWRfZW5kKCkgfSB3aGlsZSgwKQogCi0jZGVmaW5lIHB0ZV9tb2RpZnkoX3B0ZSwgbmV3cHJvdCkgXAotICAoX19wdGUoKHB0ZV92YWwoX3B0ZSkgJiBfUEFHRV9DSEdfTUFTSykgfCBwZ3Byb3RfdmFsKG5ld3Byb3QpKSkKKyNpZmRlZiBDT05GSUdfUFBDX0hBU19IQVNIXzY0SworI2RlZmluZSBwdGVfcGFnZXNpemVfaW5kZXgobW0sIGFkZHIsIHB0ZSkJZ2V0X3NsaWNlX3BzaXplKG1tLCBhZGRyKQorI2Vsc2UKKyNkZWZpbmUgcHRlX3BhZ2VzaXplX2luZGV4KG1tLCBhZGRyLCBwdGUpCU1NVV9QQUdFXzRLCisjZW5kaWYKIAotI2RlZmluZSBwdGVfbm9uZShwdGUpCQkoKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9IUFRFRkxBR1MpID09IDApCi0jZGVmaW5lIHB0ZV9wcmVzZW50KHB0ZSkJKHB0ZV92YWwocHRlKSAmIF9QQUdFX1BSRVNFTlQpCisjZW5kaWYgLyogX19yZWFsX3B0ZSAqLworCiAKIC8qIHB0ZV9jbGVhciBtb3ZlZCB0byBsYXRlciBpbiB0aGlzIGZpbGUgKi8KIAotI2RlZmluZSBwdGVfcGZuKHgpCQkoKHVuc2lnbmVkIGxvbmcpKChwdGVfdmFsKHgpPj5QVEVfUlBOX1NISUZUKSkpCi0jZGVmaW5lIHB0ZV9wYWdlKHgpCQlwZm5fdG9fcGFnZShwdGVfcGZuKHgpKQotCiAjZGVmaW5lIFBNRF9CQURfQklUUwkJKFBURV9UQUJMRV9TSVpFLTEpCiAjZGVmaW5lIFBVRF9CQURfQklUUwkJKFBNRF9UQUJMRV9TSVpFLTEpCiAKQEAgLTIzNSwzNiArMTcxLDYgQEAKIC8qIFRoaXMgbm93IG9ubHkgY29udGFpbnMgdGhlIHZtYWxsb2MgcGFnZXMgKi8KICNkZWZpbmUgcGdkX29mZnNldF9rKGFkZHJlc3MpIHBnZF9vZmZzZXQoJmluaXRfbW0sIGFkZHJlc3MpCiAKLS8qCi0gKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCi0gKiBVbmRlZmluZWQgYmVoYXZpb3VyIGlmIG5vdC4uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1JXO30KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0RJUlRZO30KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEO30KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkgeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRklMRTt9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfc3BlY2lhbChwdGVfdCBwdGUpIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1NQRUNJQUw7IH0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSAmPSB+KF9QQUdFX1JXKTsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgJj0gfihfUEFHRV9ESVJUWSk7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfQUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1JXOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9ESVJUWTsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfQUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21raHVnZShwdGVfdCBwdGUpIHsKLQlyZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1NQRUNJQUw7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcGdwcm90X3QgcHRlX3BncHJvdChwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIF9fcGdwcm90KHB0ZV92YWwocHRlKSAmIFBBR0VfUFJPVF9CSVRTKTsKLX0KIAogLyogQXRvbWljIFBURSB1cGRhdGVzICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3VwZGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKQEAgLTI3Miw2ICsxNzgsNyBAQAogCQkJCSAgICAgICBwdGVfdCAqcHRlcCwgdW5zaWduZWQgbG9uZyBjbHIsCiAJCQkJICAgICAgIGludCBodWdlKQogeworI2lmZGVmIFBURV9BVE9NSUNfVVBEQVRFUwogCXVuc2lnbmVkIGxvbmcgb2xkLCB0bXA7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKQEAgLTI4NCw2ICsxOTEsMTMgQEAKIAk6ICI9JnIiIChvbGQpLCAiPSZyIiAodG1wKSwgIj1tIiAoKnB0ZXApCiAJOiAiciIgKHB0ZXApLCAiciIgKGNsciksICJtIiAoKnB0ZXApLCAiaSIgKF9QQUdFX0JVU1kpCiAJOiAiY2MiICk7CisjZWxzZQorCXVuc2lnbmVkIGxvbmcgb2xkID0gcHRlX3ZhbCgqcHRlcCk7CisJKnB0ZXAgPSBfX3B0ZShvbGQgJiB+Y2xyKTsKKyNlbmRpZgorCS8qIGh1Z2UgcGFnZXMgdXNlIHRoZSBvbGQgcGFnZSB0YWJsZSBsb2NrICovCisJaWYgKCFodWdlKQorCQlhc3NlcnRfcHRlX2xvY2tlZChtbSwgYWRkcik7CiAKIAlpZiAob2xkICYgX1BBR0VfSEFTSFBURSkKIAkJaHB0ZV9uZWVkX2ZsdXNoKG1tLCBhZGRyLCBwdGVwLCBvbGQsIGh1Z2UpOwpAQCAtMzU5LDI2ICsyNzMsMTcgQEAKIAlwdGVfdXBkYXRlKG1tLCBhZGRyLCBwdGVwLCB+MFVMLCAwKTsKIH0KIAotLyoKLSAqIHNldF9wdGUgc3RvcmVzIGEgbGludXggUFRFIGludG8gdGhlIGxpbnV4IHBhZ2UgdGFibGUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQotewotCWlmIChwdGVfcHJlc2VudCgqcHRlcCkpCi0JCXB0ZV9jbGVhcihtbSwgYWRkciwgcHRlcCk7Ci0JcHRlID0gX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX0hQVEVGTEFHUyk7Ci0JKnB0ZXAgPSBwdGU7Ci19CiAKIC8qIFNldCB0aGUgZGlydHkgYW5kL29yIGFjY2Vzc2VkIGJpdHMgYXRvbWljYWxseSBpbiBhIGxpbnV4IFBURSwgdGhpcwogICogZnVuY3Rpb24gZG9lc24ndCBuZWVkIHRvIGZsdXNoIHRoZSBoYXNoIGVudHJ5CiAgKi8KLSNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9TRVRfQUNDRVNTX0ZMQUdTCi1zdGF0aWMgaW5saW5lIHZvaWQgX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3MocHRlX3QgKnB0ZXAsIHB0ZV90IGVudHJ5LCBpbnQgZGlydHkpCitzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3MocHRlX3QgKnB0ZXAsIHB0ZV90IGVudHJ5KQogewogCXVuc2lnbmVkIGxvbmcgYml0cyA9IHB0ZV92YWwoZW50cnkpICYKLQkJKF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9SVyB8IF9QQUdFX0VYRUMpOworCQkoX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1JXIHwKKwkJIF9QQUdFX0VYRUMgfCBfUEFHRV9IV0VYRUMpOworCisjaWZkZWYgUFRFX0FUT01JQ19VUERBVEVTCiAJdW5zaWduZWQgbG9uZyBvbGQsIHRtcDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKApAQCAtMzkxLDE2ICsyOTYsMTEgQEAKIAk6Ij0mciIgKG9sZCksICI9JnIiICh0bXApLCAiPW0iICgqcHRlcCkKIAk6InIiIChiaXRzKSwgInIiIChwdGVwKSwgIm0iICgqcHRlcCksICJpIiAoX1BBR0VfQlVTWSkKIAk6ImNjIik7CisjZWxzZQorCXVuc2lnbmVkIGxvbmcgb2xkID0gcHRlX3ZhbCgqcHRlcCk7CisJKnB0ZXAgPSBfX3B0ZShvbGQgfCBiaXRzKTsKKyNlbmRpZgogfQotI2RlZmluZSAgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCwgX19lbnRyeSwgX19kaXJ0eSkgXAotKHsJCQkJCQkJCQkgICBcCi0JaW50IF9fY2hhbmdlZCA9ICFwdGVfc2FtZSgqKF9fcHRlcCksIF9fZW50cnkpOwkJCSAgIFwKLQlpZiAoX19jaGFuZ2VkKSB7CQkJCQkJICAgXAotCQlfX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhfX3B0ZXAsIF9fZW50cnksIF9fZGlydHkpOyAgICAJICAgXAotCQlmbHVzaF90bGJfcGFnZV9ub2hhc2goX192bWEsIF9fYWRkcmVzcyk7CQkgICBcCi0JfQkJCQkJCQkJICAgXAotCV9fY2hhbmdlZDsJCQkJCQkJICAgXAotfSkKIAogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU0FNRQogI2RlZmluZSBwdGVfc2FtZShBLEIpCSgoKHB0ZV92YWwoQSkgXiBwdGVfdmFsKEIpKSAmIH5fUEFHRV9IUFRFRkxBR1MpID09IDApCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCAwN2Y1NWU2Li5lYjE3ZGE3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTYsNyArNiwxNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4JCS8qIEZvciBUQVNLX1NJWkUgKi8KICNpbmNsdWRlIDxhc20vbW11Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKwogc3RydWN0IG1tX3N0cnVjdDsKKworI2lmZGVmIENPTkZJR19ERUJVR19WTQorZXh0ZXJuIHZvaWQgYXNzZXJ0X3B0ZV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcik7CisjZWxzZSAvKiBDT05GSUdfREVCVUdfVk0gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfcHRlX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworfQorI2VuZGlmIC8qICFDT05GSUdfREVCVUdfVk0gKi8KKwogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KQpAQCAtMTcsNiArMjcsMTMwIEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKKy8qIEdlbmVyaWMgYWNjZXNzb3JzIHRvIFBURSBiaXRzICovCitzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfUlc7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfc3BlY2lhbChwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1NQRUNJQUw7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9wcmVzZW50KHB0ZV90IHB0ZSkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfUFJFU0VOVDsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX25vbmUocHRlX3QgcHRlKQkJeyByZXR1cm4gKHB0ZV92YWwocHRlKSAmIH5fUFRFX05PTkVfTUFTSykgPT0gMDsgfQorc3RhdGljIGlubGluZSBwZ3Byb3RfdCBwdGVfcGdwcm90KHB0ZV90IHB0ZSkJeyByZXR1cm4gX19wZ3Byb3QocHRlX3ZhbChwdGUpICYgUEFHRV9QUk9UX0JJVFMpOyB9CisKKy8qIENvbnZlcnNpb24gZnVuY3Rpb25zOiBjb252ZXJ0IGEgcGFnZSBhbmQgcHJvdGVjdGlvbiB0byBhIHBhZ2UgZW50cnksCisgKiBhbmQgYSBwYWdlIGVudHJ5IGFuZCBwYWdlIGRpcmVjdG9yeSB0byB0aGUgcGFnZSB0aGV5IHJlZmVyIHRvLgorICoKKyAqIEV2ZW4gaWYgUFRFcyBjYW4gYmUgdW5zaWduZWQgbG9uZyBsb25nLCBhIFBGTiBpcyBhbHdheXMgYW4gdW5zaWduZWQKKyAqIGxvbmcgZm9yIG5vdy4KKyAqLworc3RhdGljIGlubGluZSBwdGVfdCBwZm5fcHRlKHVuc2lnbmVkIGxvbmcgcGZuLCBwZ3Byb3RfdCBwZ3Byb3QpIHsKKwlyZXR1cm4gX19wdGUoKChwdGVfYmFzaWNfdCkocGZuKSA8PCBQVEVfUlBOX1NISUZUKSB8CisJCSAgICAgcGdwcm90X3ZhbChwZ3Byb3QpKTsgfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV9wZm4ocHRlX3QgcHRlKQl7CisJcmV0dXJuIHB0ZV92YWwocHRlKSA+PiBQVEVfUlBOX1NISUZUOyB9CisKKy8qIEtlZXAgdGhlc2UgYXMgYSBtYWNyb3MgdG8gYXZvaWQgaW5jbHVkZSBkZXBlbmRlbmN5IG1lc3MgKi8KKyNkZWZpbmUgcHRlX3BhZ2UoeCkJCXBmbl90b19wYWdlKHB0ZV9wZm4oeCkpCisjZGVmaW5lIG1rX3B0ZShwYWdlLCBwZ3Byb3QpCXBmbl9wdGUocGFnZV90b19wZm4ocGFnZSksIChwZ3Byb3QpKQorCisvKiBHZW5lcmljIG1vZGlmaWVycyBmb3IgUFRFIGJpdHMgKi8KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgJj0gfihfUEFHRV9SVyB8IF9QQUdFX0hXV1JJVEUpOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2NsZWFuKHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSAmPSB+KF9QQUdFX0RJUlRZIHwgX1BBR0VfSFdXUklURSk7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfQUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1JXOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9ESVJUWTsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfQUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rc3BlY2lhbChwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfU1BFQ0lBTDsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtodWdlKHB0ZV90IHB0ZSkgeworCXJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVfdCBwdGUsIHBncHJvdF90IG5ld3Byb3QpCit7CisJcHRlX3ZhbChwdGUpID0gKHB0ZV92YWwocHRlKSAmIF9QQUdFX0NIR19NQVNLKSB8IHBncHJvdF92YWwobmV3cHJvdCk7CisJcmV0dXJuIHB0ZTsKK30KKworCisvKiBJbnNlcnQgYSBQVEUsIHRvcC1sZXZlbCBmdW5jdGlvbiBpcyBvdXQgb2YgbGluZS4gSXQgdXNlcyBhbiBpbmxpbmUKKyAqIGxvdyBsZXZlbCBmdW5jdGlvbiBpbiB0aGUgcmVzcGVjdGl2ZSBwZ3RhYmxlLSogZmlsZXMKKyAqLworZXh0ZXJuIHZvaWQgc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwKKwkJICAgICAgIHB0ZV90IHB0ZSk7CisKKy8qIFRoaXMgbG93IGxldmVsIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBhY3R1YWwgUFRFIGluc2VydGlvbgorICogU2V0dGluZyB0aGUgUFRFIGRlcGVuZHMgb24gdGhlIE1NVSB0eXBlIGFuZCBvdGhlciBmYWN0b3JzLiBJdCdzCisgKiBhbiBob3JyaWJsZSBtZXNzIHRoYXQgSSdtIG5vdCBnb2luZyB0byB0cnkgdG8gY2xlYW4gdXAgbm93IGJ1dAorICogSSdtIGtlZXBpbmcgaXQgaW4gb25lIHBsYWNlIHJhdGhlciB0aGFuIHNwcmVhZCBhcm91bmQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCXB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsIGludCBwZXJjcHUpCit7CisjaWYgZGVmaW5lZChDT05GSUdfUFBDX1NURF9NTVVfMzIpICYmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgIWRlZmluZWQoQ09ORklHX1BURV82NEJJVCkKKwkvKiBGaXJzdCBjYXNlIGlzIDMyLWJpdCBIYXNoIE1NVSBpbiBTTVAgbW9kZSB3aXRoIDMyLWJpdCBQVEVzLiBXZSB1c2UgdGhlCisJICogaGVscGVyIHB0ZV91cGRhdGUoKSB3aGljaCBkb2VzIGFuIGF0b21pYyB1cGRhdGUuIFdlIG5lZWQgdG8gZG8gdGhhdAorCSAqIGJlY2F1c2UgYSBjb25jdXJyZW50IGludmFsaWRhdGlvbiBjYW4gY2xlYXIgX1BBR0VfSEFTSFBURS4gSWYgaXQncyBhCisJICogcGVyLUNQVSBQVEUgc3VjaCBhcyBhIGttYXBfYXRvbWljLCB3ZSBkbyBhIHNpbXBsZSB1cGRhdGUgcHJlc2VydmluZworCSAqIHRoZSBoYXNoIGJpdHMgaW5zdGVhZCAoaWUsIHNhbWUgYXMgdGhlIG5vbi1TTVAgY2FzZSkKKwkgKi8KKwlpZiAocGVyY3B1KQorCQkqcHRlcCA9IF9fcHRlKChwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX0hBU0hQVEUpCisJCQkgICAgICB8IChwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSEFTSFBURSkpOworCWVsc2UKKwkJcHRlX3VwZGF0ZShwdGVwLCB+X1BBR0VfSEFTSFBURSwgcHRlX3ZhbChwdGUpKTsKKworI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmIGRlZmluZWQoQ09ORklHX1BURV82NEJJVCkgJiYgZGVmaW5lZChDT05GSUdfU01QKQorCS8qIFNlY29uZCBjYXNlIGlzIDMyLWJpdCB3aXRoIDY0LWJpdCBQVEUgaW4gU01QIG1vZGUuIEluIHRoaXMgY2FzZSwgd2UKKwkgKiBjYW4ganVzdCBzdG9yZSBhcyBsb25nIGFzIHdlIGRvIHRoZSB0d28gaGFsdmVzIGluIHRoZSByaWdodCBvcmRlcgorCSAqIHdpdGggYSBiYXJyaWVyIGluIGJldHdlZW4uIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSB3ZSB0YWtlIGNhcmUsCisJICogaW4gdGhlIGhhc2ggY29kZSwgdG8gcHJlLWludmFsaWRhdGUgaWYgdGhlIFBURSB3YXMgYWxyZWFkeSBoYXNoZWQsCisJICogd2hpY2ggc3luY2hyb25pemVzIHVzIHdpdGggYW55IGNvbmN1cnJlbnQgaW52YWxpZGF0aW9uLgorCSAqIEluIHRoZSBwZXJjcHUgY2FzZSwgd2UgYWxzbyBmYWxsYmFjayB0byB0aGUgc2ltcGxlIHVwZGF0ZSBwcmVzZXJ2aW5nCisJICogdGhlIGhhc2ggYml0cworCSAqLworCWlmIChwZXJjcHUpIHsKKwkJKnB0ZXAgPSBfX3B0ZSgocHRlX3ZhbCgqcHRlcCkgJiBfUEFHRV9IQVNIUFRFKQorCQkJICAgICAgfCAocHRlX3ZhbChwdGUpICYgfl9QQUdFX0hBU0hQVEUpKTsKKwkJcmV0dXJuOworCX0KKyNpZiBfUEFHRV9IQVNIUFRFICE9IDAKKwlpZiAocHRlX3ZhbCgqcHRlcCkgJiBfUEFHRV9IQVNIUFRFKQorCQlmbHVzaF9oYXNoX2VudHJ5KG1tLCBwdGVwLCBhZGRyKTsKKyNlbmRpZgorCV9fYXNtX18gX192b2xhdGlsZV9fKCJcCisJCXN0dyVVMCVYMCAlMiwlMFxuXAorCQllaWVpb1xuXAorCQlzdHclVTAlWDAgJUwyLCUxIgorCTogIj1tIiAoKnB0ZXApLCAiPW0iICgqKCh1bnNpZ25lZCBjaGFyICopcHRlcCs0KSkKKwk6ICJyIiAocHRlKSA6ICJtZW1vcnkiKTsKKworI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDX1NURF9NTVVfMzIpCisJLyogVGhpcmQgY2FzZSBpcyAzMi1iaXQgaGFzaCB0YWJsZSBpbiBVUCBtb2RlLCB3ZSBuZWVkIHRvIHByZXNlcnZlCisJICogdGhlIF9QQUdFX0hBU0hQVEUgYml0IHNpbmNlIHdlIG1heSBub3QgaGF2ZSBpbnZhbGlkYXRlZCB0aGUgcHJldmlvdXMKKwkgKiB0cmFuc2xhdGlvbiBpbiB0aGUgaGFzaCB5ZXQgKGRvbmUgaW4gYSBzdWJzZXF1ZW50IGZsdXNoX3RsYl94eHgoKSkKKwkgKiBhbmQgc2VlIHdlIG5lZWQgdG8ga2VlcCB0cmFjayB0aGF0IHRoaXMgUFRFIG5lZWRzIGludmFsaWRhdGluZworCSAqLworCSpwdGVwID0gX19wdGUoKHB0ZV92YWwoKnB0ZXApICYgX1BBR0VfSEFTSFBURSkKKwkJICAgICAgfCAocHRlX3ZhbChwdGUpICYgfl9QQUdFX0hBU0hQVEUpKTsKKworI2Vsc2UKKwkvKiBBbnl0aGluZyBlbHNlIGp1c3Qgc3RvcmVzIHRoZSBQVEUgbm9ybWFsbHkuIFRoYXQgY292ZXJzIGFsbCA2NC1iaXQKKwkgKiBjYXNlcywgYW5kIDMyLWJpdCBub24taGFzaCB3aXRoIDY0LWJpdCBQVEVzIGluIFVQIG1vZGUKKwkgKi8KKwkqcHRlcCA9IHB0ZTsKKyNlbmRpZgorfQorCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9TRVRfQUNDRVNTX0ZMQUdTCitleHRlcm4gaW50IHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJCSBwdGVfdCAqcHRlcCwgcHRlX3QgZW50cnksIGludCBkaXJ0eSk7CisKIC8qCiAgKiBNYWNybyB0byBtYXJrIGEgcGFnZSBwcm90ZWN0aW9uIHZhbHVlIGFzICJ1bmNhY2hlYWJsZSIuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGMtb3Bjb2RlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLW9wY29kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YTRkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLW9wY29kZS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1dG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBwcm92aWRlcyBtYXNrcyBhbmQgb3Bjb2RlIGltYWdlcyBmb3IgdXNlIGJ5IGNvZGUgZ2VuZXJhdGlvbiwgZW11bGF0aW9uCisgKiBhbmQgZm9yIGluc3RydWN0aW9ucyB0aGF0IG9sZGVyIGFzc2VtYmxlcnMgbWlnaHQgbm90IGtub3cgYWJvdXQKKyAqLworI2lmbmRlZiBfQVNNX1BPV0VSUENfUFBDX09QQ09ERV9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19QUENfT1BDT0RFX0gKKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CisKKy8qIHNvcnRlZCBhbHBoYWJldGljYWxseSAqLworI2RlZmluZSBQUENfSU5TVF9EQ0JBCQkJMHg3YzAwMDVlYworI2RlZmluZSBQUENfSU5TVF9EQ0JBX01BU0sJCTB4ZmMwMDA3ZmUKKyNkZWZpbmUgUFBDX0lOU1RfRENCQUwJCQkweDdjMjAwNWVjCisjZGVmaW5lIFBQQ19JTlNUX0RDQlpMCQkJMHg3YzIwMDdlYworI2RlZmluZSBQUENfSU5TVF9JU0VMCQkJMHg3YzAwMDAxZQorI2RlZmluZSBQUENfSU5TVF9JU0VMX01BU0sJCTB4ZmMwMDAwM2UKKyNkZWZpbmUgUFBDX0lOU1RfTFNXSQkJCTB4N2MwMDA0YWEKKyNkZWZpbmUgUFBDX0lOU1RfTFNXWAkJCTB4N2MwMDA0MmEKKyNkZWZpbmUgUFBDX0lOU1RfTFdTWU5DCQkJMHg3YzIwMDRhYworI2RlZmluZSBQUENfSU5TVF9NQ1JYUgkJCTB4N2MwMDA0MDAKKyNkZWZpbmUgUFBDX0lOU1RfTUNSWFJfTUFTSwkJMHhmYzAwMDdmZQorI2RlZmluZSBQUENfSU5TVF9NRlNQUl9QVlIJCTB4N2MxZjQyYTYKKyNkZWZpbmUgUFBDX0lOU1RfTUZTUFJfUFZSX01BU0sJCTB4ZmMxZmZmZmYKKyNkZWZpbmUgUFBDX0lOU1RfTVNHU05ECQkJMHg3YzAwMDE5YworI2RlZmluZSBQUENfSU5TVF9OT1AJCQkweDYwMDAwMDAwCisjZGVmaW5lIFBQQ19JTlNUX1BPUENOVEIJCTB4N2MwMDAwZjQKKyNkZWZpbmUgUFBDX0lOU1RfUE9QQ05UQl9NQVNLCQkweGZjMDAwN2ZlCisjZGVmaW5lIFBQQ19JTlNUX1JGQ0kJCQkweDRjMDAwMDY2CisjZGVmaW5lIFBQQ19JTlNUX1JGREkJCQkweDRjMDAwMDRlCisjZGVmaW5lIFBQQ19JTlNUX1JGTUNJCQkJMHg0YzAwMDA0YworCisjZGVmaW5lIFBQQ19JTlNUX1NUUklORwkJCTB4N2MwMDA0MmEKKyNkZWZpbmUgUFBDX0lOU1RfU1RSSU5HX01BU0sJCTB4ZmMwMDA3ZmUKKyNkZWZpbmUgUFBDX0lOU1RfU1RSSU5HX0dFTl9NQVNLCTB4ZmMwMDA2N2UKKworI2RlZmluZSBQUENfSU5TVF9TVFNXSQkJCTB4N2MwMDA1YWEKKyNkZWZpbmUgUFBDX0lOU1RfU1RTV1gJCQkweDdjMDAwNTJhCisjZGVmaW5lIFBQQ19JTlNUX1RMQklMWAkJCTB4N2MwMDA2MjYKKyNkZWZpbmUgUFBDX0lOU1RfV0FJVAkJCTB4N2MwMDAwN2MKKworLyogbWFjcm9zIHRvIGluc2VydCBmaWVsZHMgaW50byBvcGNvZGVzICovCisjZGVmaW5lIF9fUFBDX1JBKGEpCSgoYSAmIDB4MWYpIDw8IDE2KQorI2RlZmluZSBfX1BQQ19SQihiKQkoKGIgJiAweDFmKSA8PCAxMSkKKyNkZWZpbmUgX19QUENfVF9UTEIodCkJKCh0ICYgMHgzKSA8PCAyMSkKKyNkZWZpbmUgX19QUENfV0ModykJKCh3ICYgMHgzKSA8PCAyMSkKKworLyogRGVhbCB3aXRoIGluc3RydWN0aW9ucyB0aGF0IG9sZGVyIGFzc2VtYmxlcnMgYXJlbid0IGF3YXJlIG9mICovCisjZGVmaW5lCVBQQ19EQ0JBTChhLCBiKQkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfRENCQUwgfCBcCisJCQkJCV9fUFBDX1JBKGEpIHwgX19QUENfUkIoYikpCisjZGVmaW5lCVBQQ19EQ0JaTChhLCBiKQkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfRENCWkwgfCBcCisJCQkJCV9fUFBDX1JBKGEpIHwgX19QUENfUkIoYikpCisjZGVmaW5lIFBQQ19NU0dTTkQoYikJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX01TR1NORCB8IFwKKwkJCQkJX19QUENfUkIoYikpCisjZGVmaW5lIFBQQ19SRkNJCQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9SRkNJKQorI2RlZmluZSBQUENfUkZESQkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfUkZESSkKKyNkZWZpbmUgUFBDX1JGTUNJCQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9SRk1DSSkKKyNkZWZpbmUgUFBDX1RMQklMWCh0LCBhLCBiKQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9UTEJJTFggfCBcCisJCQkJCV9fUFBDX1RfVExCKHQpIHwgX19QUENfUkEoYSkgfCBfX1BQQ19SQihiKSkKKyNkZWZpbmUgUFBDX1RMQklMWF9BTEwoYSwgYikJUFBDX1RMQklMWCgwLCBhLCBiKQorI2RlZmluZSBQUENfVExCSUxYX1BJRChhLCBiKQlQUENfVExCSUxYKDEsIGEsIGIpCisjZGVmaW5lIFBQQ19UTEJJTFhfVkEoYSwgYikJUFBDX1RMQklMWCgzLCBhLCBiKQorI2RlZmluZSBQUENfV0FJVCh3KQkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfV0FJVCB8IFwKKwkJCQkJX19QUENfV0ModykpCisKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfUFBDX09QQ09ERV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjX2FzbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwY19hc20uaAppbmRleCAxYTBkNjI4Li5mNTlhNjY2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjX2FzbS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGNfYXNtLmgKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3BwYy1vcGNvZGUuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNlcnJvciBfX0ZJTEVfXyBzaG91bGQgb25seSBiZSB1c2VkIGluIGFzc2VtYmxlciBmaWxlcwpAQCAtMTY3LDExICsxNjgsNiBAQAogI2RlZmluZSBITVRfTUVESVVNX0hJR0ggb3IJNSw1LDUJCSMgbWVkaXVtIGhpZ2ggcHJpb3JpdHkKICNkZWZpbmUgSE1UX0hJR0gJb3IJMywzLDMKIAotLyogaGFuZGxlIGluc3RydWN0aW9ucyB0aGF0IG9sZGVyIGFzc2VtYmxlcnMgbWF5IG5vdCBrbm93ICovCi0jZGVmaW5lIFJGQ0kJCS5sb25nIDB4NGMwMDAwNjYJLyogcmZjaSBpbnN0cnVjdGlvbiAqLwotI2RlZmluZSBSRkRJCQkubG9uZyAweDRjMDAwMDRlCS8qIHJmZGkgaW5zdHJ1Y3Rpb24gKi8KLSNkZWZpbmUgUkZNQ0kJCS5sb25nIDB4NGMwMDAwNGMJLyogcmZtY2kgaW5zdHJ1Y3Rpb24gKi8KLQogI2lmZGVmIF9fS0VSTkVMX18KICNpZmRlZiBDT05GSUdfUFBDNjQKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IGQzNDY2NDkuLjllZWQyOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTMxMyw2ICszMTMsMjUgQEAKICNkZWZpbmUgSEFWRV9BUkNIX1BJQ0tfTU1BUF9MQVlPVVQKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BQQzY0CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2NsZWFuX3NwKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgaXNfMzIpCit7CisJdW5zaWduZWQgbG9uZyBzcDsKKworCWlmIChpc18zMikKKwkJc3AgPSByZWdzLT5ncHJbMV0gJiAweDBmZmZmZmZmZlVMOworCWVsc2UKKwkJc3AgPSByZWdzLT5ncHJbMV07CisKKwlyZXR1cm4gc3A7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9jbGVhbl9zcChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGlzXzMyKQoreworCXJldHVybiByZWdzLT5ncHJbMV07Cit9CisjZW5kaWYKKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfUFJPQ0VTU09SX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNhdi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2F2LmgKaW5kZXggY2QyNGFjMS4uMDQyN2IwYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2F2LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2F2LmgKQEAgLTczMCw3ICs3MzAsNyBAQAogZXh0ZXJuIGludCBwczNhdl9jbWRfdmlkZW9fZ2V0X21vbml0b3JfaW5mbyhzdHJ1Y3QgcHMzYXZfcGt0X2F2X2dldF9tb25pdG9yX2luZm8gKiwKIAkJCQkJICAgIHUzMik7CiAKLWV4dGVybiBpbnQgcHMzYXZfc2V0X3ZpZGVvX21vZGUodTMyKTsKK2V4dGVybiBpbnQgcHMzYXZfc2V0X3ZpZGVvX21vZGUoaW50KTsKIGV4dGVybiBpbnQgcHMzYXZfc2V0X2F1ZGlvX21vZGUodTMyLCB1MzIsIHUzMiwgdTMyLCB1MzIpOwogZXh0ZXJuIGludCBwczNhdl9nZXRfYXV0b19tb2RlKHZvaWQpOwogZXh0ZXJuIGludCBwczNhdl9nZXRfbW9kZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNmYi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2ZiLmgKaW5kZXggZTcyMzNhOC4uOTBkYmVmYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2ZiLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2ZiLmgKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiBpb2N0bCAqLwogI2RlZmluZSBQUzNGQl9JT0NUTF9TRVRNT0RFICAgICAgIF9JT1coJ3InLCAgMSwgaW50KSAvKiBzZXQgdmlkZW8gbW9kZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS00MHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtNDB4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc2MzBmYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtNDB4LmgKQEAgLTAsMCArMSw2NCBAQAorI2lmbmRlZiBfQVNNX1BPV0VSUENfUFRFXzQweF9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19QVEVfNDB4X0gKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBBdCBwcmVzZW50LCBhbGwgUG93ZXJQQyA0MDAtY2xhc3MgcHJvY2Vzc29ycyBzaGFyZSBhIHNpbWlsYXIgVExCCisgKiBhcmNoaXRlY3R1cmUuIFRoZSBpbnN0cnVjdGlvbiBhbmQgZGF0YSBzaWRlcyBzaGFyZSBhIHVuaWZpZWQsCisgKiA2NC1lbnRyeSwgZnVsbHktYXNzb2NpYXRpdmUgVExCIHdoaWNoIGlzIG1haW50YWluZWQgdG90YWxseSB1bmRlcgorICogc29mdHdhcmUgY29udHJvbC4gSW4gYWRkaXRpb24sIHRoZSBpbnN0cnVjdGlvbiBzaWRlIGhhcyBhCisgKiBoYXJkd2FyZS1tYW5hZ2VkLCA0LWVudHJ5LCBmdWxseS1hc3NvY2lhdGl2ZSBUTEIgd2hpY2ggc2VydmVzIGFzIGEKKyAqIGZpcnN0IGxldmVsIHRvIHRoZSBzaGFyZWQgVExCLiBUaGVzZSB0d28gVExCcyBhcmUga25vd24gYXMgdGhlIFVUTEIKKyAqIGFuZCBJVExCLCByZXNwZWN0aXZlbHkgKHNlZSAibW11LmgiIGZvciBkZWZpbml0aW9ucykuCisgKgorICogVGhlcmUgYXJlIHNldmVyYWwgcG90ZW50aWFsIGdvdGNoYXMgaGVyZS4gIFRoZSA0MHggaGFyZHdhcmUgVExCTE8KKyAqIGZpZWxkIGxvb2tzIGxpa2UgdGhpczoKKyAqCisgKiAwICAxICAyICAzICA0ICAuLi4gMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEKKyAqIFJQTi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgMCAgMCBFWCBXUiBaU0VMLi4uLi4uLiAgVyAgSSAgTSAgRworICoKKyAqIFdoZXJlIHBvc3NpYmxlIHdlIG1ha2UgdGhlIExpbnV4IFBURSBiaXRzIG1hdGNoIHVwIHdpdGggdGhpcworICoKKyAqIC0gYml0cyAyMCBhbmQgMjEgbXVzdCBiZSBjbGVhcmVkLCBiZWNhdXNlIHdlIHVzZSA0ayBwYWdlcyAoNDB4IGNhbgorICogICBzdXBwb3J0IGRvd24gdG8gMWsgcGFnZXMpLCB0aGlzIGlzIGRvbmUgaW4gdGhlIFRMQk1pc3MgZXhjZXB0aW9uCisgKiAgIGhhbmRsZXIuCisgKiAtIFdlIHVzZSBvbmx5IHpvbmVzIDAgKGZvciBrZXJuZWwgcGFnZXMpIGFuZCAxIChmb3IgdXNlciBwYWdlcykKKyAqICAgb2YgdGhlIDE2IGF2YWlsYWJsZS4gIEJpdCAyNC0yNiBvZiB0aGUgVExCIGFyZSBjbGVhcmVkIGluIHRoZSBUTEIKKyAqICAgbWlzcyBoYW5kbGVyLiAgQml0IDI3IGlzIFBBR0VfVVNFUiwgdGh1cyBzZWxlY3RpbmcgdGhlIGNvcnJlY3QKKyAqICAgem9uZS4KKyAqIC0gUFJFU0VOVCAqbXVzdCogYmUgaW4gdGhlIGJvdHRvbSB0d28gYml0cyBiZWNhdXNlIHN3YXAgY2FjaGUKKyAqICAgZW50cmllcyB1c2UgdGhlIHRvcCAzMCBiaXRzLiAgQmVjYXVzZSA0MHggZG9lc24ndCBzdXBwb3J0IFNNUAorICogICBhbnl3YXksIE0gaXMgaXJyZWxldmFudCBzbyB3ZSBib3Jyb3cgaXQgZm9yIFBBR0VfUFJFU0VOVC4gIEJpdCAzMAorICogICBpcyBjbGVhcmVkIGluIHRoZSBUTEIgbWlzcyBoYW5kbGVyIGJlZm9yZSB0aGUgVExCIGVudHJ5IGlzIGxvYWRlZC4KKyAqIC0gQWxsIG90aGVyIGJpdHMgb2YgdGhlIFBURSBhcmUgbG9hZGVkIGludG8gVExCTE8gd2l0aG91dAorICogICBtb2RpZmljYXRpb24sIGxlYXZpbmcgdXMgb25seSB0aGUgYml0cyAyMCwgMjEsIDI0LCAyNSwgMjYsIDMwIGZvcgorICogICBzb2Z0d2FyZSBQVEUgYml0cy4gIFdlIGFjdHVhbGx5IHVzZSB1c2UgYml0cyAyMSwgMjQsIDI1LCBhbmQKKyAqICAgMzAgcmVzcGVjdGl2ZWx5IGZvciB0aGUgc29mdHdhcmUgYml0czogQUNDRVNTRUQsIERJUlRZLCBSVywgYW5kCisgKiAgIFBSRVNFTlQuCisgKi8KKworI2RlZmluZQlfUEFHRV9HVUFSREVECTB4MDAxCS8qIEc6IHBhZ2UgaXMgZ3VhcmRlZCBmcm9tIHByZWZldGNoICovCisjZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDEJLyogd2hlbiAhcHJlc2VudDogbm9ubGluZWFyIGZpbGUgbWFwcGluZyAqLworI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAyCS8qIHNvZnR3YXJlOiBQVEUgY29udGFpbnMgYSB0cmFuc2xhdGlvbiAqLworI2RlZmluZQlfUEFHRV9OT19DQUNIRQkweDAwNAkvKiBJOiBjYWNoaW5nIGlzIGluaGliaXRlZCAqLworI2RlZmluZQlfUEFHRV9XUklURVRIUlUJMHgwMDgJLyogVzogY2FjaGluZyBpcyB3cml0ZS10aHJvdWdoICovCisjZGVmaW5lCV9QQUdFX1VTRVIJMHgwMTAJLyogbWF0Y2hlcyBvbmUgb2YgdGhlIHpvbmUgcGVybWlzc2lvbiBiaXRzICovCisjZGVmaW5lCV9QQUdFX1JXCTB4MDQwCS8qIHNvZnR3YXJlOiBXcml0ZXMgcGVybWl0dGVkICovCisjZGVmaW5lCV9QQUdFX0RJUlRZCTB4MDgwCS8qIHNvZnR3YXJlOiBkaXJ0eSBwYWdlICovCisjZGVmaW5lIF9QQUdFX0hXV1JJVEUJMHgxMDAJLyogaGFyZHdhcmU6IERpcnR5ICYgUlcsIHNldCBpbiBleGNlcHRpb24gKi8KKyNkZWZpbmUgX1BBR0VfSFdFWEVDCTB4MjAwCS8qIGhhcmR3YXJlOiBFWCBwZXJtaXNzaW9uICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4NDAwCS8qIHNvZnR3YXJlOiBSOiBwYWdlIHJlZmVyZW5jZWQgKi8KKworI2RlZmluZSBfUE1EX1BSRVNFTlQJMHg0MDAJLyogUE1EIHBvaW50cyB0byBwYWdlIG9mIFBURXMgKi8KKyNkZWZpbmUgX1BNRF9CQUQJMHg4MDIKKyNkZWZpbmUgX1BNRF9TSVpFCTB4MGUwCS8qIHNpemUgZmllbGQsICE9IDAgZm9yIGxhcmdlLXBhZ2UgUE1EIGVudHJ5ICovCisjZGVmaW5lIF9QTURfU0laRV80TQkweDBjMAorI2RlZmluZSBfUE1EX1NJWkVfMTZNCTB4MGUwCisKKyNkZWZpbmUgUE1EX1BBR0VfU0laRShwbWR2YWwpCSgxMDI0IDw8ICgoKHBtZHZhbCkgJiBfUE1EX1NJWkUpID4+IDQpKQorCisvKiBVbnRpbCBteSByZXdvcmsgaXMgZmluaXNoZWQsIDQweCBzdGlsbCBuZWVkcyBhdG9taWMgUFRFIHVwZGF0ZXMgKi8KKyNkZWZpbmUgUFRFX0FUT01JQ19VUERBVEVTCTEKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiAgX0FTTV9QT1dFUlBDX1BURV80MHhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS00NHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtNDR4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdlOThiYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtNDR4LmgKQEAgLTAsMCArMSwxMDIgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BURV80NHhfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfUFRFXzQ0eF9ICisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogRGVmaW5pdGlvbnMgZm9yIFBQQzQ0MAorICoKKyAqIEJlY2F1c2Ugb2YgdGhlIDMgd29yZCBUTEIgZW50cmllcyB0byBzdXBwb3J0IDM2LWJpdCBhZGRyZXNzaW5nLAorICogdGhlIGF0dHJpYnV0ZSBhcmUgZGlmZmljdWx0IHRvIG1hcCBpbiBzdWNoIGEgZmFzaGlvbiB0aGF0IHRoZXkKKyAqIGFyZSBlYXNpbHkgbG9hZGVkIGR1cmluZyBleGNlcHRpb24gcHJvY2Vzc2luZy4gIEkgZGVjaWRlZCB0bworICogb3JnYW5pemUgdGhlIGVudHJ5IHNvIHRoZSBFUlBOIGlzIHRoZSBvbmx5IHBvcnRpb24gaW4gdGhlCisgKiB1cHBlciB3b3JkIG9mIHRoZSBQVEUgYW5kIHRoZSBhdHRyaWJ1dGUgYml0cyBiZWxvdyBhcmUgcGFja2VkCisgKiBpbiBhcyBzZW5zaWJseSBhcyB0aGV5IGNhbiBiZSBpbiB0aGUgYXJlYSBiZWxvdyBhIDRLQiBwYWdlIHNpemUKKyAqIG9yaWVudGVkIFJQTi4gIFRoaXMgYXQgbGVhc3QgbWFrZXMgaXQgZWFzeSB0byBsb2FkIHRoZSBSUE4gYW5kCisgKiBFUlBOIGZpZWxkcyBpbiB0aGUgVExCLiAtTWF0dAorICoKKyAqIFRoaXMgaXNuJ3QgZW50aXJlbHkgdHJ1ZSBhbnltb3JlLCBhdCBsZWFzdCBzb21lIGJpdHMgYXJlIG5vdworICogZWFzaWVyIHRvIG1vdmUgaW50byB0aGUgVExCIGZyb20gdGhlIFBURS4gLUJlbkguCisgKgorICogTm90ZSB0aGF0IHRoZXNlIGJpdHMgcHJlY2x1ZGUgZnV0dXJlIHVzZSBvZiBhIHBhZ2Ugc2l6ZQorICogbGVzcyB0aGFuIDRLQi4KKyAqCisgKgorICogUFBDIDQ0MCBjb3JlIGhhcyBmb2xsb3dpbmcgVExCIGF0dHJpYnV0ZSBmaWVsZHM7CisgKgorICogICBUTEIxOgorICogICAwICAxICAyICAzICA0ICAuLi4gMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEKKyAqICAgUlBOLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAtICAtICAtICAtICAtICAtIEVSUE4uLi4uLi4uCisgKgorICogICBUTEIyOgorICogICAwICAxICAyICAzICA0ICAuLi4gMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEKKyAqICAgLSAgLSAgLSAgLSAgLSAgICAtIFUwIFUxIFUyIFUzIFcgIEkgIE0gIEcgIEUgICAtIFVYIFVXIFVSIFNYIFNXIFNSCisgKgorICogTmV3ZXIgNDQwIGNvcmVzICg0NDB4NiBhcyB1c2VkIG9uIEFNQ0MgNDYwRVgvNDYwR1QpIGhhdmUgYWRkaXRpb25hbAorICogVExCMiBzdG9yYWdlIGF0dGlidXRlIGZpZWxkcy4gVGhvc2UgYXJlOgorICoKKyAqICAgVExCMjoKKyAqICAgMC4uLjEwICAgIDExICAgMTIgICAxMyAgIDE0ICAgMTUgICAxNi4uLjMxCisgKiAgIG5vIGNoYW5nZSBXTDEgIElMMUkgSUwxRCBJTDJJIElMMkQgbm8gY2hhbmdlCisgKgorICogVGhlcmUgYXJlIHNvbWUgY29uc3RyYWlucyBhbmQgb3B0aW9ucywgdG8gZGVjaWRlIG1hcHBpbmcgc29mdHdhcmUgYml0cworICogaW50byBUTEIgZW50cnkuCisgKgorICogICAtIFBSRVNFTlQgKm11c3QqIGJlIGluIHRoZSBib3R0b20gdGhyZWUgYml0cyBiZWNhdXNlIHN3YXAgY2FjaGUKKyAqICAgICBlbnRyaWVzIHVzZSB0aGUgdG9wIDI5IGJpdHMgZm9yIFRMQjIuCisgKgorICogICAtIEZJTEUgKm11c3QqIGJlIGluIHRoZSBib3R0b20gdGhyZWUgYml0cyBiZWNhdXNlIHN3YXAgY2FjaGUKKyAqICAgICBlbnRyaWVzIHVzZSB0aGUgdG9wIDI5IGJpdHMgZm9yIFRMQjIuCisgKgorICogICAtIENBQ0hFIENPSEVSRU5UIGJpdCAoTSkgaGFzIG5vIGVmZmVjdCBvbiBvcmlnaW5hbCBQUEM0NDAgY29yZXMsCisgKiAgICAgYmVjYXVzZSBpdCBkb2Vzbid0IHN1cHBvcnQgU01QLiBIb3dldmVyLCBzb21lIGxhdGVyIDQ2MCB2YXJpYW50cworICogICAgIGhhdmUgLXNvbWUtIGZvcm0gb2YgU01QIHN1cHBvcnQgYW5kIHNvIEkga2VlcCB0aGUgYml0IHRoZXJlIGZvcgorICogICAgIGZ1dHVyZSB1c2UKKyAqCisgKiBXaXRoIHRoZSBQUEMgNDR4IExpbnV4IGltcGxlbWVudGF0aW9uLCB0aGUgMC0xMXRoIExTQnMgb2YgdGhlIFBURSBhcmUgdXNlZAorICogZm9yIG1lbW9yeSBwcm90ZWN0aW9uIHJlbGF0ZWQgZnVuY3Rpb25zIChzZWUgUFRFIHN0cnVjdHVyZSBpbgorICogaW5jbHVkZS9hc20tcHBjL21tdS5oKS4gIFRoZSBfUEFHRV9YWFggZGVmaW5pdGlvbnMgaW4gdGhpcyBmaWxlIG1hcCB0byB0aGUKKyAqIGFib3ZlIGJpdHMuICBOb3RlIHRoYXQgdGhlIGJpdCB2YWx1ZXMgYXJlIENQVSBzcGVjaWZpYywgbm90IGFyY2hpdGVjdHVyZQorICogc3BlY2lmaWMuCisgKgorICogVGhlIGtlcm5lbCBQVEUgZW50cnkgaG9sZHMgYW4gYXJjaC1kZXBlbmRlbnQgc3dwX2VudHJ5IHN0cnVjdHVyZSB1bmRlcgorICogY2VydGFpbiBzaXR1YXRpb25zLiBJbiBvdGhlciB3b3JkcywgaW4gc3VjaCBzaXR1YXRpb25zIHNvbWUgcG9ydGlvbiBvZgorICogdGhlIFBURSBiaXRzIGFyZSB1c2VkIGFzIGEgc3dwX2VudHJ5LiBJbiB0aGUgUFBDIGltcGxlbWVudGF0aW9uLCB0aGUKKyAqIDMtMjR0aCBMU0IgYXJlIHNoYXJlZCB3aXRoIHN3cF9lbnRyeSwgaG93ZXZlciB0aGUgMC0ybmQgdGhyZWUgTFNCIHN0aWxsCisgKiBob2xkIHByb3RlY3Rpb24gdmFsdWVzLiBUaGF0IG1lYW5zIHRoZSB0aHJlZSBwcm90ZWN0aW9uIGJpdHMgYXJlCisgKiByZXNlcnZlZCBmb3IgYm90aCBQVEUgYW5kIFNXQVAgZW50cnkgYXQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgdGhyZWUKKyAqIExTQnMuCisgKgorICogVGhlcmUgYXJlIHRocmVlIHByb3RlY3Rpb24gYml0cyBhdmFpbGFibGUgZm9yIFNXQVAgZW50cnk6CisgKglfUEFHRV9QUkVTRU5UCisgKglfUEFHRV9GSUxFCisgKglfUEFHRV9IQVNIUFRFIChpZiBIVyBoYXMpCisgKgorICogU28gdGhvc2UgdGhyZWUgYml0cyBoYXZlIHRvIGJlIGluc2lkZSBvZiAwLTJuZCBMU0Igb2YgUFRFLgorICoKKyAqLworCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDAwMDAwMQkJLyogUzogUFRFIHZhbGlkICovCisjZGVmaW5lIF9QQUdFX1JXCTB4MDAwMDAwMDIJCS8qIFM6IFdyaXRlIHBlcm1pc3Npb24gKi8KKyNkZWZpbmUgX1BBR0VfRklMRQkweDAwMDAwMDA0CQkvKiBTOiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCisjZGVmaW5lIF9QQUdFX0hXRVhFQwkweDAwMDAwMDA0CQkvKiBIOiBFeGVjdXRlIHBlcm1pc3Npb24gKi8KKyNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgwMDAwMDAwOAkJLyogUzogUGFnZSByZWZlcmVuY2VkICovCisjZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDAwMDAwMTAJCS8qIFM6IFBhZ2UgZGlydHkgKi8KKyNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkweDAwMDAwMDIwCQkvKiBTOiBTcGVjaWFsIHBhZ2UgKi8KKyNkZWZpbmUgX1BBR0VfVVNFUgkweDAwMDAwMDQwCQkvKiBTOiBVc2VyIHBhZ2UgKi8KKyNkZWZpbmUgX1BBR0VfRU5ESUFOCTB4MDAwMDAwODAJCS8qIEg6IEUgYml0ICovCisjZGVmaW5lIF9QQUdFX0dVQVJERUQJMHgwMDAwMDEwMAkJLyogSDogRyBiaXQgKi8KKyNkZWZpbmUgX1BBR0VfQ09IRVJFTlQJMHgwMDAwMDIwMAkJLyogSDogTSBiaXQgKi8KKyNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDAwMDQwMAkJLyogSDogSSBiaXQgKi8KKyNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTB4MDAwMDA4MDAJCS8qIEg6IFcgYml0ICovCisKKy8qIFRPRE86IEFkZCBsYXJnZSBwYWdlIGxvd21lbSBtYXBwaW5nIHN1cHBvcnQgKi8KKyNkZWZpbmUgX1BNRF9QUkVTRU5UCTAKKyNkZWZpbmUgX1BNRF9QUkVTRU5UX01BU0sgKFBBR0VfTUFTSykKKyNkZWZpbmUgX1BNRF9CQUQJKH5QQUdFX01BU0spCisKKy8qIEVSUE4gaW4gYSBQVEUgbmV2ZXIgZ2V0cyBjbGVhcmVkLCBpZ25vcmUgaXQgKi8KKyNkZWZpbmUgX1BURV9OT05FX01BU0sJMHhmZmZmZmZmZjAwMDAwMDAwVUxMCisKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiAgX0FTTV9QT1dFUlBDX1BURV80NHhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS04eHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtOHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM2ZTMxMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtOHh4LmgKQEAgLTAsMCArMSw2NyBAQAorI2lmbmRlZiBfQVNNX1BPV0VSUENfUFRFXzh4eF9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19QVEVfOHh4X0gKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBUaGUgUG93ZXJQQyBNUEM4eHggdXNlcyBhIFRMQiB3aXRoIGhhcmR3YXJlIGFzc2lzdGVkLCBzb2Z0d2FyZSB0YWJsZXdhbGsuCisgKiBXZSBhbHNvIHVzZSB0aGUgdHdvIGxldmVsIHRhYmxlcywgYnV0IHdlIGNhbiBwdXQgdGhlIHJlYWwgYml0cyBpbiB0aGVtCisgKiBuZWVkZWQgZm9yIHRoZSBUTEIgYW5kIHRhYmxld2Fsay4gIFRoZXNlIGRlZmluaXRpb25zIHJlcXVpcmUgTXhfQ1RSLlBQTSA9IDAsCisgKiBNeF9DVFIuUFBDUyA9IDAsIGFuZCBNRF9DVFIuVFdBTSA9IDEuICBUaGUgbGV2ZWwgMiBkZXNjcmlwdG9yIGhhcworICogYWRkaXRpb25hbCBwYWdlIHByb3RlY3Rpb24gKHdoZW4gTXhfQ1RSLlBQQ1MgPSAxKSB0aGF0IGFsbG93cyBUTEIgaGl0CisgKiBiYXNlZCB1cG9uIHVzZXIvc3VwZXIgYWNjZXNzLiAgVGhlIFRMQiBkb2VzIG5vdCBoYXZlIGFjY2Vzc2VkIG5vciB3cml0ZQorICogcHJvdGVjdC4gIFdlIGFzc3VtZSB0aGF0IGlmIHRoZSBUTEIgZ2V0IGxvYWRlZCB3aXRoIGFuIGVudHJ5IGl0IGlzCisgKiBhY2Nlc3NlZCwgYW5kIG92ZXJsb2FkIHRoZSBjaGFuZ2VkIGJpdCBmb3Igd3JpdGUgcHJvdGVjdC4gIFdlIHVzZQorICogdHdvIGJpdHMgaW4gdGhlIHNvZnR3YXJlIHB0ZSB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZSBzZXQgdG8gemVybyBpbgorICogdGhlIFRMQiBlbnRyeSAoMjQgYW5kIDI1KSBmb3IgdGhlc2UgaW5kaWNhdG9ycy4gIEFsdGhvdWdoIHRoZSBsZXZlbCAxCisgKiBkZXNjcmlwdG9yIGNvbnRhaW5zIHRoZSBndWFyZGVkIGFuZCB3cml0ZXRocm91Z2gvY29weWJhY2sgYml0cywgd2UgY2FuCisgKiBzZXQgdGhlc2UgYXQgdGhlIHBhZ2UgbGV2ZWwgc2luY2UgdGhleSBnZXQgY29waWVkIGZyb20gdGhlIE14X1RXQworICogcmVnaXN0ZXIgd2hlbiB0aGUgVExCIGVudHJ5IGlzIGxvYWRlZC4gIFdlIHdpbGwgdXNlIGJpdCAyNyBmb3IgZ3VhcmQsIHNpbmNlCisgKiB0aGF0IGlzIHdoZXJlIGl0IGV4aXN0cyBpbiB0aGUgTURfVFdDLCBhbmQgYml0IDI2IGZvciB3cml0ZXRocm91Z2guCisgKiBUaGVzZSB3aWxsIGdldCBtYXNrZWQgZnJvbSB0aGUgbGV2ZWwgMiBkZXNjcmlwdG9yIGF0IFRMQiBsb2FkIHRpbWUsIGFuZAorICogY29waWVkIHRvIHRoZSBNRF9UV0MgYmVmb3JlIGl0IGdldHMgbG9hZGVkLgorICogTGFyZ2UgcGFnZSBzaXplcyBhZGRlZC4gIFdlIGN1cnJlbnRseSBzdXBwb3J0IHR3byBzaXplcywgNEsgYW5kIDhNLgorICogVGhpcyBhbHNvIGFsbG93cyBhIFRMQiBoYW5kZXIgb3B0aW1pemF0aW9uIGJlY2F1c2Ugd2UgY2FuIGRpcmVjdGx5CisgKiBsb2FkIHRoZSBQTUQgaW50byBNRF9UV0MuICBUaGUgOE0gcGFnZXMgYXJlIG9ubHkgdXNlZCBmb3Iga2VybmVsCisgKiBtYXBwaW5nIG9mIHdlbGwga25vd24gYXJlYXMuICBUaGUgUE1EIChQR0QpIGVudHJpZXMgY29udGFpbiBjb250cm9sCisgKiBmbGFncyBpbiBhZGRpdGlvbiB0byB0aGUgYWRkcmVzcywgc28gY2FyZSBtdXN0IGJlIHRha2VuIHRoYXQgdGhlCisgKiBzb2Z0d2FyZSBubyBsb25nZXIgYXNzdW1lcyB0aGVzZSBhcmUgb25seSBwb2ludGVycy4KKyAqLworCisvKiBEZWZpbml0aW9ucyBmb3IgOHh4IGVtYmVkZGVkIGNoaXBzLiAqLworI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAwMQkvKiBQYWdlIGlzIHZhbGlkICovCisjZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAyCS8qIHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KKyNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDAyCS8qIEk6IGNhY2hlIGluaGliaXQgKi8KKyNkZWZpbmUgX1BBR0VfU0hBUkVECTB4MDAwNAkvKiBObyBBU0lEIChjb250ZXh0KSBjb21wYXJlICovCisKKy8qIFRoZXNlIGZpdmUgc29mdHdhcmUgYml0cyBtdXN0IGJlIG1hc2tlZCBvdXQgd2hlbiB0aGUgZW50cnkgaXMgbG9hZGVkCisgKiBpbnRvIHRoZSBUTEIuCisgKi8KKyNkZWZpbmUgX1BBR0VfRVhFQwkweDAwMDgJLyogc29mdHdhcmU6IGktY2FjaGUgY29oZXJlbmN5IHJlcXVpcmVkICovCisjZGVmaW5lIF9QQUdFX0dVQVJERUQJMHgwMDEwCS8qIHNvZnR3YXJlOiBndWFyZGVkIGFjY2VzcyAqLworI2RlZmluZSBfUEFHRV9ESVJUWQkweDAwMjAJLyogc29mdHdhcmU6IHBhZ2UgY2hhbmdlZCAqLworI2RlZmluZSBfUEFHRV9SVwkweDAwNDAJLyogc29mdHdhcmU6IHVzZXIgd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KKyNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgwMDgwCS8qIHNvZnR3YXJlOiBwYWdlIHJlZmVyZW5jZWQgKi8KKworLyogU2V0dGluZyBhbnkgYml0cyBpbiB0aGUgbmliYmxlIHdpdGggdGhlIGZvbGxvdyB0d28gY29udHJvbHMgd2lsbAorICogcmVxdWlyZSBhIFRMQiBleGNlcHRpb24gaGFuZGxlciBjaGFuZ2UuICBJdCBpcyBhc3N1bWVkIHVudXNlZCBiaXRzCisgKiBhcmUgYWx3YXlzIHplcm8uCisgKi8KKyNkZWZpbmUgX1BBR0VfSFdXUklURQkweDAxMDAJLyogaC93IHdyaXRlIGVuYWJsZTogbmV2ZXIgc2V0IGluIExpbnV4IFBURSAqLworI2RlZmluZSBfUEFHRV9VU0VSCTB4MDgwMAkvKiBPbmUgb2YgdGhlIFBQIGJpdHMsIHRoZSBvdGhlciBpcyBVU0VSJn5SVyAqLworCisjZGVmaW5lIF9QTURfUFJFU0VOVAkweDAwMDEKKyNkZWZpbmUgX1BNRF9CQUQJMHgwZmYwCisjZGVmaW5lIF9QTURfUEFHRV9NQVNLCTB4MDAwYworI2RlZmluZSBfUE1EX1BBR0VfOE0JMHgwMDBjCisKKyNkZWZpbmUgX1BURV9OT05FX01BU0sgX1BBR0VfQUNDRVNTRUQKKworLyogVW50aWwgbXkgcmV3b3JrIGlzIGZpbmlzaGVkLCA4eHggc3RpbGwgbmVlZHMgYXRvbWljIFBURSB1cGRhdGVzICovCisjZGVmaW5lIFBURV9BVE9NSUNfVVBEQVRFUwkxCisKKy8qIFdlIG5lZWQgdG8gYWRkIF9QQUdFX1NIQVJFRCB0byBrZXJuZWwgcGFnZXMgKi8KKyNkZWZpbmUgX1BBR0VfS0VSTkVMX1JPCShfUEFHRV9TSEFSRUQpCisjZGVmaW5lIF9QQUdFX0tFUk5FTF9SVwkoX1BBR0VfRElSVFkgfCBfUEFHRV9SVyB8IF9QQUdFX0hXV1JJVEUpCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogIF9BU01fUE9XRVJQQ19QVEVfOHh4X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtY29tbW9uLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NzQwZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWNvbW1vbi5oCkBAIC0wLDAgKzEsMTgwIEBACisvKiBJbmNsdWRlZCBmcm9tIGFzbS9wZ3RhYmxlLSouaCBvbmx5ICEgKi8KKworLyoKKyAqIFNvbWUgYml0cyBhcmUgb25seSB1c2VkIG9uIHNvbWUgY3B1IGZhbWlsaWVzLi4uIE1ha2Ugc3VyZSB0aGF0IGFsbAorICogdGhlIHVuZGVmaW5lZCBnZXRzIGEgc2Vuc2libGUgZGVmYXVsdAorICovCisjaWZuZGVmIF9QQUdFX0hBU0hQVEUKKyNkZWZpbmUgX1BBR0VfSEFTSFBURQkwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfU0hBUkVECisjZGVmaW5lIF9QQUdFX1NIQVJFRAkwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfSFdXUklURQorI2RlZmluZSBfUEFHRV9IV1dSSVRFCTAKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9IV0VYRUMKKyNkZWZpbmUgX1BBR0VfSFdFWEVDCTAKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9FWEVDCisjZGVmaW5lIF9QQUdFX0VYRUMJMAorI2VuZGlmCisjaWZuZGVmIF9QQUdFX0VORElBTgorI2RlZmluZSBfUEFHRV9FTkRJQU4JMAorI2VuZGlmCisjaWZuZGVmIF9QQUdFX0NPSEVSRU5UCisjZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTAKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9XUklURVRIUlUKKyNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTAKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9TUEVDSUFMCisjZGVmaW5lIF9QQUdFX1NQRUNJQUwJMAorI2VuZGlmCisjaWZuZGVmIF9QQUdFXzRLX1BGTgorI2RlZmluZSBfUEFHRV80S19QRk4JCTAKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9QU0laRQorI2RlZmluZSBfUEFHRV9QU0laRQkJMAorI2VuZGlmCisjaWZuZGVmIF9QTURfUFJFU0VOVF9NQVNLCisjZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLCV9QTURfUFJFU0VOVAorI2VuZGlmCisjaWZuZGVmIF9QTURfU0laRQorI2RlZmluZSBfUE1EX1NJWkUJMAorI2RlZmluZSBQTURfUEFHRV9TSVpFKHBtZCkJYmFkX2NhbGxfdG9fUE1EX1BBR0VfU0laRSgpCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfS0VSTkVMX1JPCisjZGVmaW5lIF9QQUdFX0tFUk5FTF9STwkwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfS0VSTkVMX1JXCisjZGVmaW5lIF9QQUdFX0tFUk5FTF9SVwkoX1BBR0VfRElSVFkgfCBfUEFHRV9SVyB8IF9QQUdFX0hXV1JJVEUpCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfSFBURUZMQUdTCisjZGVmaW5lIF9QQUdFX0hQVEVGTEFHUyBfUEFHRV9IQVNIUFRFCisjZW5kaWYKKyNpZm5kZWYgX1BURV9OT05FX01BU0sKKyNkZWZpbmUgX1BURV9OT05FX01BU0sJX1BBR0VfSFBURUZMQUdTCisjZW5kaWYKKworLyogTWFrZSBzdXJlIHdlIGdldCBhIGxpbmsgZXJyb3IgaWYgUE1EX1BBR0VfU0laRSBpcyBldmVyIGNhbGxlZCBvbiBhCisgKiBrZXJuZWwgd2l0aG91dCBsYXJnZSBwYWdlIFBNRCBzdXBwb3J0CisgKi8KKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBiYWRfY2FsbF90b19QTURfUEFHRV9TSVpFKHZvaWQpOworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKiBMb2NhdGlvbiBvZiB0aGUgUEZOIGluIHRoZSBQVEUuIE1vc3QgMzItYml0IHBsYXRmb3JtcyB1c2UgdGhlIHNhbWUKKyAqIGFzIF9QQUdFX1NISUZUIGhlcmUgKGllLCBuYXR1cmFsbHkgYWxpZ25lZCkuCisgKiBQbGF0Zm9ybSB3aG8gZG9uJ3QganVzdCBwcmUtZGVmaW5lIHRoZSB2YWx1ZSBzbyB3ZSBkb24ndCBvdmVycmlkZSBpdCBoZXJlCisgKi8KKyNpZm5kZWYgUFRFX1JQTl9TSElGVAorI2RlZmluZSBQVEVfUlBOX1NISUZUCShQQUdFX1NISUZUKQorI2VuZGlmCisKKy8qIFRoZSBtYXNrIGNvbnZlcmVkIGJ5IHRoZSBSUE4gbXVzdCBiZSBhIFVMTCBvbiAzMi1iaXQgcGxhdGZvcm1zIHdpdGgKKyAqIDY0LWJpdCBQVEVzCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19QUEMzMikgJiYgZGVmaW5lZChDT05GSUdfUFRFXzY0QklUKQorI2RlZmluZSBQVEVfUlBOX01BWAkoMVVMTCA8PCAoNjQgLSBQVEVfUlBOX1NISUZUKSkKKyNkZWZpbmUgUFRFX1JQTl9NQVNLCSh+KCgxVUxMPDxQVEVfUlBOX1NISUZUKS0xKSkKKyNlbHNlCisjZGVmaW5lIFBURV9SUE5fTUFYCSgxVUwgPDwgKDMyIC0gUFRFX1JQTl9TSElGVCkpCisjZGVmaW5lIFBURV9SUE5fTUFTSwkofigoMVVMPDxQVEVfUlBOX1NISUZUKS0xKSkKKyNlbmRpZgorCisvKiBfUEFHRV9DSEdfTUFTSyBtYXNrcyBvZiBiaXRzIHRoYXQgYXJlIHRvIGJlIHByZXNlcnZlZCBhY2Nyb3NzCisgKiBwZ3Byb3QgY2hhbmdlcworICovCisjZGVmaW5lIF9QQUdFX0NIR19NQVNLCShQVEVfUlBOX01BU0sgfCBfUEFHRV9IUFRFRkxBR1MgfCBfUEFHRV9ESVJUWSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1NQRUNJQUwpCisKKy8qIE1hc2sgb2YgYml0cyByZXR1cm5lZCBieSBwdGVfcGdwcm90KCkgKi8KKyNkZWZpbmUgUEFHRV9QUk9UX0JJVFMJKF9QQUdFX0dVQVJERUQgfCBfUEFHRV9DT0hFUkVOVCB8IF9QQUdFX05PX0NBQ0hFIHwgXAorCQkJIF9QQUdFX1dSSVRFVEhSVSB8IF9QQUdFX0VORElBTiB8IF9QQUdFXzRLX1BGTiB8IFwKKwkJCSBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQgfCBcCisJCQkgX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFIHwgX1BBR0VfRElSVFkgfCBcCisJCQkgX1BBR0VfRVhFQyB8IF9QQUdFX0hXRVhFQykKKworLyoKKyAqIFdlIGRlZmluZSAyIHNldHMgb2YgYmFzZSBwcm90IGJpdHMsIG9uZSBmb3IgYmFzaWMgcGFnZXMgKGllLAorICogY2FjaGVhYmxlIGtlcm5lbCBhbmQgdXNlciBwYWdlcykgYW5kIG9uZSBmb3Igbm9uIGNhY2hlYWJsZQorICogcGFnZXMuIFdlIGFsd2F5cyBzZXQgX1BBR0VfQ09IRVJFTlQgd2hlbiBTTVAgaXMgZW5hYmxlZCBvcgorICogdGhlIHByb2Nlc3NvciBtaWdodCBuZWVkIGl0IGZvciBETUEgY29oZXJlbmN5LgorICovCisjZGVmaW5lIF9QQUdFX0JBU0VfTkMJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1BTSVpFKQorI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfUFBDX1NURF9NTVUpCisjZGVmaW5lIF9QQUdFX0JBU0UJKF9QQUdFX0JBU0VfTkMgfCBfUEFHRV9DT0hFUkVOVCkKKyNlbHNlCisjZGVmaW5lIF9QQUdFX0JBU0UJKF9QQUdFX0JBU0VfTkMpCisjZW5kaWYKKworLyogUGVybWlzc2lvbiBtYXNrcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBfX1AgYW5kIF9fUyB0YWJsZSwKKyAqCisgKiBOb3RlOl9fcGdwcm90IGlzIGRlZmluZWQgaW4gYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaAorICoKKyAqIFdyaXRlIHBlcm1pc3Npb25zIGltcGx5IHJlYWQgcGVybWlzc2lvbnMgZm9yIG5vdyAod2UgY291bGQgbWFrZSB3cml0ZS1vbmx5CisgKiBwYWdlcyBvbiBCb29rRSBidXQgd2UgZG9uJ3QgYm90aGVyIGZvciBub3cpLiBFeGVjdXRlIHBlcm1pc3Npb24gY29udHJvbCBpcworICogcG9zc2libGUgb24gcGxhdGZvcm1zIHRoYXQgZGVmaW5lIF9QQUdFX0VYRUMKKyAqCisgKiBOb3RlIGR1ZSB0byB0aGUgd2F5IHZtIGZsYWdzIGFyZSBsYWlkIG91dCwgdGhlIGJpdHMgYXJlIFhXUgorICovCisjZGVmaW5lIFBBR0VfTk9ORQlfX3BncHJvdChfUEFHRV9CQVNFKQorI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX1JXKQorI2RlZmluZSBQQUdFX1NIQVJFRF9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfUlcgfCBfUEFHRV9FWEVDKQorI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIpCisjZGVmaW5lIFBBR0VfQ09QWV9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQykKKyNkZWZpbmUgUEFHRV9SRUFET05MWQlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUikKKyNkZWZpbmUgUEFHRV9SRUFET05MWV9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQykKKworI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUDAwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFkKKyNkZWZpbmUgX19QMDExCVBBR0VfQ09QWQorI2RlZmluZSBfX1AxMDAJUEFHRV9SRUFET05MWV9YCisjZGVmaW5lIF9fUDEwMQlQQUdFX1JFQURPTkxZX1gKKyNkZWZpbmUgX19QMTEwCVBBR0VfQ09QWV9YCisjZGVmaW5lIF9fUDExMQlQQUdFX0NPUFlfWAorCisjZGVmaW5lIF9fUzAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19TMDAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMDEwCVBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzAxMQlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MxMDAJUEFHRV9SRUFET05MWV9YCisjZGVmaW5lIF9fUzEwMQlQQUdFX1JFQURPTkxZX1gKKyNkZWZpbmUgX19TMTEwCVBBR0VfU0hBUkVEX1gKKyNkZWZpbmUgX19TMTExCVBBR0VfU0hBUkVEX1gKKworLyogUGVybWlzc2lvbiBtYXNrcyB1c2VkIGZvciBrZXJuZWwgbWFwcGluZ3MgKi8KKyNkZWZpbmUgUEFHRV9LRVJORUwJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX0tFUk5FTF9SVykKKyNkZWZpbmUgUEFHRV9LRVJORUxfTkMJX19wZ3Byb3QoX1BBR0VfQkFTRV9OQyB8IF9QQUdFX0tFUk5FTF9SVyB8IFwKKwkJCQkgX1BBR0VfTk9fQ0FDSEUpCisjZGVmaW5lIFBBR0VfS0VSTkVMX05DRwlfX3BncHJvdChfUEFHRV9CQVNFX05DIHwgX1BBR0VfS0VSTkVMX1JXIHwgXAorCQkJCSBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0dVQVJERUQpCisjZGVmaW5lIFBBR0VfS0VSTkVMX1gJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX0tFUk5FTF9SVyB8IF9QQUdFX0VYRUMpCisjZGVmaW5lIFBBR0VfS0VSTkVMX1JPCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9LRVJORUxfUk8pCisjZGVmaW5lIFBBR0VfS0VSTkVMX1JPWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfS0VSTkVMX1JPIHwgX1BBR0VfRVhFQykKKworLyogUHJvdGVjdGlvbiB1c2VkIGZvciBrZXJuZWwgdGV4dC4gV2Ugd2FudCB0aGUgZGVidWdnZXJzIHRvIGJlIGFibGUgdG8KKyAqIHNldCBicmVha3BvaW50cyBhbnl3aGVyZSwgc28gZG9uJ3Qgd3JpdGUgcHJvdGVjdCB0aGUga2VybmVsIHRleHQKKyAqIG9uIHBsYXRmb3JtcyB3aGVyZSBzdWNoIGNvbnRyb2wgaXMgcG9zc2libGUuCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19LR0RCKSB8fCBkZWZpbmVkKENPTkZJR19YTU9OKSB8fCBkZWZpbmVkKENPTkZJR19CRElfU1dJVENIKSB8fFwKKwlkZWZpbmVkKENPTkZJR19LUFJPQkVTKQorI2RlZmluZSBQQUdFX0tFUk5FTF9URVhUCVBBR0VfS0VSTkVMX1gKKyNlbHNlCisjZGVmaW5lIFBBR0VfS0VSTkVMX1RFWFQJUEFHRV9LRVJORUxfUk9YCisjZW5kaWYKKworLyogTWFrZSBtb2R1bGVzIGNvZGUgaGFwcHkuIFdlIGRvbid0IHNldCBSTyB5ZXQgKi8KKyNkZWZpbmUgUEFHRV9LRVJORUxfRVhFQwlQQUdFX0tFUk5FTF9YCisKKy8qIEFkdmVydGlzZSBzcGVjaWFsIG1hcHBpbmcgdHlwZSBmb3IgQUdQICovCisjZGVmaW5lIFBBR0VfQUdQCQkoUEFHRV9LRVJORUxfTkMpCisjZGVmaW5lIEhBVkVfUEFHRV9BR1AKKworLyogQWR2ZXJ0aXNlIHN1cHBvcnQgZm9yIF9QQUdFX1NQRUNJQUwgKi8KKyNpZmRlZiBfUEFHRV9TUEVDSUFMCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TUEVDSUFMCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1mc2wtYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtZnNsLWJvb2tlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4MjBmNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtZnNsLWJvb2tlLmgKQEAgLTAsMCArMSw0OCBAQAorI2lmbmRlZiBfQVNNX1BPV0VSUENfUFRFX0ZTTF9CT09LRV9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19QVEVfRlNMX0JPT0tFX0gKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIFBURSBiaXQgZGVmaW5pdGlvbnMgZm9yIEZyZWVzY2FsZSBCb29rRSBTVyBsb2FkZWQgVExCIE1NVSBiYXNlZAorICogcHJvY2Vzc29ycworICoKKyAgIE1NVSBBc3Npc3QgUmVnaXN0ZXIgMzoKKworICAgMzIgMzMgMzQgMzUgMzYgIC4uLiA1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NyA1OCA1OSA2MCA2MSA2MiA2MworICAgUlBOLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgMCAgMCBVMCBVMSBVMiBVMyBVWCBTWCBVVyBTVyBVUiBTUgorCisgICAtIFBSRVNFTlQgKm11c3QqIGJlIGluIHRoZSBib3R0b20gdGhyZWUgYml0cyBiZWNhdXNlIHN3YXAgY2FjaGUKKyAgICAgZW50cmllcyB1c2UgdGhlIHRvcCAyOSBiaXRzLgorCisgICAtIEZJTEUgKm11c3QqIGJlIGluIHRoZSBib3R0b20gdGhyZWUgYml0cyBiZWNhdXNlIHN3YXAgY2FjaGUKKyAgICAgZW50cmllcyB1c2UgdGhlIHRvcCAyOSBiaXRzLgorKi8KKworLyogRGVmaW5pdGlvbnMgZm9yIEZTTCBCb29rLUUgQ29yZXMgKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMDAxCS8qIFM6IFBURSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCisjZGVmaW5lIF9QQUdFX1VTRVIJMHgwMDAwMgkvKiBTOiBVc2VyIHBhZ2UgKG1hcHMgdG8gVVIpICovCisjZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAwMgkvKiBTOiB3aGVuICFwcmVzZW50OiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCisjZGVmaW5lIF9QQUdFX1JXCTB4MDAwMDQJLyogUzogV3JpdGUgcGVybWlzc2lvbiAoU1cpICovCisjZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDAwMDgJLyogUzogUGFnZSBkaXJ0eSAqLworI2RlZmluZSBfUEFHRV9IV0VYRUMJMHgwMDAxMAkvKiBIOiBTWCBwZXJtaXNzaW9uICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDAwMjAJLyogUzogUGFnZSByZWZlcmVuY2VkICovCisKKyNkZWZpbmUgX1BBR0VfRU5ESUFOCTB4MDAwNDAJLyogSDogRSBiaXQgKi8KKyNkZWZpbmUgX1BBR0VfR1VBUkRFRAkweDAwMDgwCS8qIEg6IEcgYml0ICovCisjZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTB4MDAxMDAJLyogSDogTSBiaXQgKi8KKyNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDIwMAkvKiBIOiBJIGJpdCAqLworI2RlZmluZSBfUEFHRV9XUklURVRIUlUJMHgwMDQwMAkvKiBIOiBXIGJpdCAqLworI2RlZmluZSBfUEFHRV9TUEVDSUFMCTB4MDA4MDAgLyogUzogU3BlY2lhbCBwYWdlICovCisKKyNpZmRlZiBDT05GSUdfUFRFXzY0QklUCisvKiBFUlBOIGluIGEgUFRFIG5ldmVyIGdldHMgY2xlYXJlZCwgaWdub3JlIGl0ICovCisjZGVmaW5lIF9QVEVfTk9ORV9NQVNLCTB4ZmZmZmZmZmZmZmZmMDAwMFVMTAorLyogV2UgZXh0ZW5kIHRoZSBzaXplIG9mIHRoZSBQVEUgZmxhZ3MgYXJlYSB3aGVuIHVzaW5nIDY0LWJpdCBQVEVzICovCisjZGVmaW5lIFBURV9SUE5fU0hJRlQJKFBBR0VfU0hJRlQgKyA4KQorI2VuZGlmCisKKyNkZWZpbmUgX1BNRF9QUkVTRU5UCTAKKyNkZWZpbmUgX1BNRF9QUkVTRU5UX01BU0sgKFBBR0VfTUFTSykKKyNkZWZpbmUgX1BNRF9CQUQJKH5QQUdFX01BU0spCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogIF9BU01fUE9XRVJQQ19QVEVfRlNMX0JPT0tFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDMyLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2gzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZTU3MWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2gzMi5oCkBAIC0wLDAgKzEsNDggQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BURV9IQVNIMzJfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfUFRFX0hBU0gzMl9ICisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogVGhlICJjbGFzc2ljIiAzMi1iaXQgaW1wbGVtZW50YXRpb24gb2YgdGhlIFBvd2VyUEMgTU1VIHVzZXMgYSBoYXNoCisgKiB0YWJsZSBjb250YWluaW5nIFBURXMsIHRvZ2V0aGVyIHdpdGggYSBzZXQgb2YgMTYgc2VnbWVudCByZWdpc3RlcnMsCisgKiB0byBkZWZpbmUgdGhlIHZpcnR1YWwgdG8gcGh5c2ljYWwgYWRkcmVzcyBtYXBwaW5nLgorICoKKyAqIFdlIHVzZSB0aGUgaGFzaCB0YWJsZSBhcyBhbiBleHRlbmRlZCBUTEIsIGkuZS4gYSBjYWNoZSBvZiBjdXJyZW50bHkKKyAqIGFjdGl2ZSBtYXBwaW5ncy4gIFdlIG1haW50YWluIGEgdHdvLWxldmVsIHBhZ2UgdGFibGUgdHJlZSwgbXVjaAorICogbGlrZSB0aGF0IHVzZWQgYnkgdGhlIGkzODYsIGZvciB0aGUgc2FrZSBvZiB0aGUgTGludXggbWVtb3J5CisgKiBtYW5hZ2VtZW50IGNvZGUuICBMb3ctbGV2ZWwgYXNzZW1ibGVyIGNvZGUgaW4gaGFzaF9sb3dfMzIuUworICogKHByb2NlZHVyZSBoYXNoX3BhZ2UpIGlzIHJlc3BvbnNpYmxlIGZvciBleHRyYWN0aW5nIHB0ZXMgZnJvbSB0aGUKKyAqIHRyZWUgYW5kIHB1dHRpbmcgdGhlbSBpbnRvIHRoZSBoYXNoIHRhYmxlIHdoZW4gbmVjZXNzYXJ5LCBhbmQKKyAqIHVwZGF0aW5nIHRoZSBhY2Nlc3NlZCBhbmQgbW9kaWZpZWQgYml0cyBpbiB0aGUgcGFnZSB0YWJsZSB0cmVlLgorICovCisKKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMQkvKiBzb2Z0d2FyZTogcHRlIGNvbnRhaW5zIGEgdHJhbnNsYXRpb24gKi8KKyNkZWZpbmUgX1BBR0VfSEFTSFBURQkweDAwMgkvKiBoYXNoX3BhZ2UgaGFzIG1hZGUgYW4gSFBURSBmb3IgdGhpcyBwdGUgKi8KKyNkZWZpbmUgX1BBR0VfRklMRQkweDAwNAkvKiB3aGVuICFwcmVzZW50OiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCisjZGVmaW5lIF9QQUdFX1VTRVIJMHgwMDQJLyogdXNlcm1vZGUgYWNjZXNzIGFsbG93ZWQgKi8KKyNkZWZpbmUgX1BBR0VfR1VBUkRFRAkweDAwOAkvKiBHOiBwcm9oaWJpdCBzcGVjdWxhdGl2ZSBhY2Nlc3MgKi8KKyNkZWZpbmUgX1BBR0VfQ09IRVJFTlQJMHgwMTAJLyogTTogZW5mb3JjZSBtZW1vcnkgY29oZXJlbmNlIChTTVAgc3lzdGVtcykgKi8KKyNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMjAJLyogSTogY2FjaGUgaW5oaWJpdCAqLworI2RlZmluZSBfUEFHRV9XUklURVRIUlUJMHgwNDAJLyogVzogY2FjaGUgd3JpdGUtdGhyb3VnaCAqLworI2RlZmluZSBfUEFHRV9ESVJUWQkweDA4MAkvKiBDOiBwYWdlIGNoYW5nZWQgKi8KKyNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgxMDAJLyogUjogcGFnZSByZWZlcmVuY2VkICovCisjZGVmaW5lIF9QQUdFX0VYRUMJMHgyMDAJLyogc29mdHdhcmU6IGktY2FjaGUgY29oZXJlbmN5IHJlcXVpcmVkICovCisjZGVmaW5lIF9QQUdFX1JXCTB4NDAwCS8qIHNvZnR3YXJlOiB1c2VyIHdyaXRlIGFjY2VzcyBhbGxvd2VkICovCisjZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHg4MDAJLyogc29mdHdhcmU6IFNwZWNpYWwgcGFnZSAqLworCisjaWZkZWYgQ09ORklHX1BURV82NEJJVAorLyogV2UgbmV2ZXIgY2xlYXIgdGhlIGhpZ2ggd29yZCBvZiB0aGUgcHRlICovCisjZGVmaW5lIF9QVEVfTk9ORV9NQVNLCSgweGZmZmZmZmZmMDAwMDAwMDBVTEwgfCBfUEFHRV9IQVNIUFRFKQorI2Vsc2UKKyNkZWZpbmUgX1BURV9OT05FX01BU0sJX1BBR0VfSEFTSFBURQorI2VuZGlmCisKKyNkZWZpbmUgX1BNRF9QUkVTRU5UCTAKKyNkZWZpbmUgX1BNRF9QUkVTRU5UX01BU0sgKFBBR0VfTUFTSykKKyNkZWZpbmUgX1BNRF9CQUQJKH5QQUdFX01BU0spCisKKy8qIEhhc2ggdGFibGUgYmFzZWQgcGxhdGZvcm1zIG5lZWQgYXRvbWljIHVwZGF0ZXMgb2YgdGhlIGxpbnV4IFBURSAqLworI2RlZmluZSBQVEVfQVRPTUlDX1VQREFURVMJMQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qICBfQVNNX1BPV0VSUENfUFRFX0hBU0gzMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2g2NC00ay5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1oYXNoNjQtNGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTM0ZTgwOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDY0LTRrLmgKQEAgLTAsMCArMSwxNyBAQAorLyogVG8gYmUgaW5jbHVkZSBieSBwZ3RhYmxlLWhhc2g2NC5oIG9ubHkgKi8KKworLyogUFRFIGJpdHMgKi8KKyNkZWZpbmUgX1BBR0VfSEFTSFBURQkweDA0MDAgLyogc29mdHdhcmU6IHB0ZSBoYXMgYW4gYXNzb2NpYXRlZCBIUFRFICovCisjZGVmaW5lIF9QQUdFX1NFQ09OREFSWSAweDgwMDAgLyogc29mdHdhcmU6IEhQVEUgaXMgaW4gc2Vjb25kYXJ5IGdyb3VwICovCisjZGVmaW5lIF9QQUdFX0dST1VQX0lYICAweDcwMDAgLyogc29mdHdhcmU6IEhQVEUgaW5kZXggd2l0aGluIGdyb3VwICovCisjZGVmaW5lIF9QQUdFX0ZfU0VDT05EICBfUEFHRV9TRUNPTkRBUlkKKyNkZWZpbmUgX1BBR0VfRl9HSVggICAgIF9QQUdFX0dST1VQX0lYCisjZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHgxMDAwMCAvKiBzb2Z0d2FyZTogc3BlY2lhbCBwYWdlICovCisKKy8qIFBURSBmbGFncyB0byBjb25zZXJ2ZSBmb3IgSFBURSBpZGVudGlmaWNhdGlvbiAqLworI2RlZmluZSBfUEFHRV9IUFRFRkxBR1MgKF9QQUdFX0JVU1kgfCBfUEFHRV9IQVNIUFRFIHwgXAorCQkJIF9QQUdFX1NFQ09OREFSWSB8IF9QQUdFX0dST1VQX0lYKQorCisvKiBzaGlmdCB0byBwdXQgcGFnZSBudW1iZXIgaW50byBwdGUgKi8KKyNkZWZpbmUgUFRFX1JQTl9TSElGVAkoMTcpCisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTY0ay5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1oYXNoNjQtNjRrLmgKc2ltaWxhcml0eSBpbmRleCA3MyUKcmVuYW1lIGZyb20gYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtNjRrLmgKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDY0LTY0ay5oCmluZGV4IDczODkwMDMuLmUwNWQyNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTY0ay5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDY0LTY0ay5oCkBAIC0xLDIyICsxLDgwIEBACi0jaWZuZGVmIF9BU01fUE9XRVJQQ19QR1RBQkxFXzY0S19ICi0jZGVmaW5lIF9BU01fUE9XRVJQQ19QR1RBQkxFXzY0S19ICisvKiBUbyBiZSBpbmNsdWRlIGJ5IHBndGFibGUtaGFzaDY0Lmggb25seSAqLwogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oPgorLyogQWRkaXRpb25hbCBQVEUgYml0cyAoZG9uJ3QgY2hhbmdlIHdpdGhvdXQgY2hlY2tpbmcgYXNtIGluIGhhc2hfbG93LlMpICovCisjZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHgwMDAwMDQwMCAvKiBzb2Z0d2FyZTogc3BlY2lhbCBwYWdlICovCisjZGVmaW5lIF9QQUdFX0hQVEVfU1VCCTB4MGZmZmYwMDAgLyogY29tYm8gb25seTogc3ViIHBhZ2VzIEhQVEUgYml0cyAqLworI2RlZmluZSBfUEFHRV9IUFRFX1NVQjAJMHgwODAwMDAwMCAvKiBjb21ibyBvbmx5OiBmaXJzdCBzdWIgcGFnZSAqLworI2RlZmluZSBfUEFHRV9DT01CTwkweDEwMDAwMDAwIC8qIHRoaXMgaXMgYSBjb21ibyA0ayBwYWdlICovCisjZGVmaW5lIF9QQUdFXzRLX1BGTgkweDIwMDAwMDAwIC8qIFBGTiBpcyBmb3IgYSBzaW5nbGUgNGsgcGFnZSAqLwogCisvKiBGb3IgNjRLIHBhZ2UsIHdlIGRvbid0IGhhdmUgYSBzZXBhcmF0ZSBfUEFHRV9IQVNIUFRFIGJpdC4gSW5zdGVhZCwKKyAqIHdlIHNldCB0aGF0IHRvIGJlIHRoZSB3aG9sZSBzdWItYml0cyBtYXNrLiBUaGUgQyBjb2RlIHdpbGwgb25seQorICogdGVzdCB0aGlzLCBzbyBhIG11bHRpLWJpdCBtYXNrIHdpbGwgd29yay4gRm9yIGNvbWJvIHBhZ2VzLCB0aGlzCisgKiBpcyBlcXVpdmFsZW50IGFzIGVmZmVjdGl2ZWx5LCB0aGUgb2xkIF9QQUdFX0hBU0hQVEUgd2FzIGFuIE9SIG9mCisgKiBhbGwgdGhlIHN1YiBiaXRzLiBGb3IgcmVhbCA2NGsgcGFnZXMsIHdlIG5vdyBoYXZlIHRoZSBhc3NlbWJseSBzZXQKKyAqIF9QQUdFX0hQVEVfU1VCMCBpbiBhZGRpdGlvbiB0byBzZXR0aW5nIHRoZSBISURYIGJpdHMgd2hpY2ggb3ZlcmxhcAorICogdGhhdCBtYXNrLiBUaGlzIGlzIGZpbmUgYXMgbG9uZyBhcyB0aGUgSElEWCBiaXRzIGFyZSBuZXZlciBzZXQgb24KKyAqIGEgUFRFIHRoYXQgaXNuJ3QgaGFzaGVkLCB3aGljaCBpcyB0aGUgY2FzZSB0b2RheS4KKyAqCisgKiBBIGxpdHRsZSBuaXQgaXMgZm9yIHRoZSBodWdlIHBhZ2UgQyBjb2RlLCB3aGljaCBkb2VzIHRoZSBoYXNoaW5nCisgKiBpbiBDLCB3ZSBuZWVkIHRvIHByb3ZpZGUgd2hpY2ggYml0IHRvIHVzZS4KKyAqLworI2RlZmluZSBfUEFHRV9IQVNIUFRFCV9QQUdFX0hQVEVfU1VCCiAKLSNkZWZpbmUgUFRFX0lOREVYX1NJWkUgIDEyCi0jZGVmaW5lIFBNRF9JTkRFWF9TSVpFICAxMgotI2RlZmluZSBQVURfSU5ERVhfU0laRQkwCi0jZGVmaW5lIFBHRF9JTkRFWF9TSVpFICA0CisvKiBOb3RlIHRoZSBmdWxsIHBhZ2UgYml0cyBtdXN0IGJlIGluIHRoZSBzYW1lIGxvY2F0aW9uIGFzIGZvciBub3JtYWwKKyAqIDRrIHBhZ2VzIGFzIHRoZSBzYW1lIGFzc3NlbWJseSB3aWxsIGJlIHVzZWQgdG8gaW5zZXJ0IDY0SyBwYWdlcworICogd2V0aGVyIHRoZSBrZXJuZWwgaGFzIENPTkZJR19QUENfNjRLX1BBR0VTIG9yIG5vdAorICovCisjZGVmaW5lIF9QQUdFX0ZfU0VDT05EICAweDAwMDA4MDAwIC8qIGZ1bGwgcGFnZTogaGlkeCBiaXRzICovCisjZGVmaW5lIF9QQUdFX0ZfR0lYICAgICAweDAwMDA3MDAwIC8qIGZ1bGwgcGFnZTogaGlkeCBiaXRzICovCisKKy8qIFBURSBmbGFncyB0byBjb25zZXJ2ZSBmb3IgSFBURSBpZGVudGlmaWNhdGlvbiAqLworI2RlZmluZSBfUEFHRV9IUFRFRkxBR1MgKF9QQUdFX0JVU1kgfCBfUEFHRV9IQVNIUFRFIHwgX1BBR0VfQ09NQk8pCisKKy8qIFNoaWZ0IHRvIHB1dCBwYWdlIG51bWJlciBpbnRvIHB0ZS4KKyAqCisgKiBUaGF0IGdpdmVzIHVzIGEgbWF4IFJQTiBvZiAzNCBiaXRzLCB3aGljaCBtZWFucyBhIG1heCBvZiA1MCBiaXRzCisgKiBvZiBhZGRyZXNzYWJsZSBwaHlzaWNhbCBzcGFjZSwgb3IgNDYgYml0cyBmb3IgdGhlIHNwZWNpYWwgNGsgUEZOcy4KKyAqLworI2RlZmluZSBQVEVfUlBOX1NISUZUCSgzMCkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNkZWZpbmUgUFRFX1RBQkxFX1NJWkUJKHNpemVvZihyZWFsX3B0ZV90KSA8PCBQVEVfSU5ERVhfU0laRSkKLSNkZWZpbmUgUE1EX1RBQkxFX1NJWkUJKHNpemVvZihwbWRfdCkgPDwgUE1EX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBHRF9UQUJMRV9TSVpFCShzaXplb2YocGdkX3QpIDw8IFBHRF9JTkRFWF9TSVpFKQogCi0jZGVmaW5lIFBUUlNfUEVSX1BURQkoMSA8PCBQVEVfSU5ERVhfU0laRSkKLSNkZWZpbmUgUFRSU19QRVJfUE1ECSgxIDw8IFBNRF9JTkRFWF9TSVpFKQotI2RlZmluZSBQVFJTX1BFUl9QR0QJKDEgPDwgUEdEX0lOREVYX1NJWkUpCisvKgorICogV2l0aCA2NEsgcGFnZXMgb24gaGFzaCB0YWJsZSwgd2UgaGF2ZSBhIHNwZWNpYWwgUFRFIGZvcm1hdCB0aGF0CisgKiB1c2VzIGEgc2Vjb25kICJoYWxmIiBvZiB0aGUgcGFnZSB0YWJsZSB0byBlbmNvZGUgc3ViLXBhZ2UgaW5mb3JtYXRpb24KKyAqIGluIG9yZGVyIHRvIGRlYWwgd2l0aCA2NEsgbWFkZSBvZiA0SyBIVyBwYWdlcy4gVGh1cyB3ZSBvdmVycmlkZSB0aGUKKyAqIGdlbmVyaWMgYWNjZXNzb3JzIGFuZCBpdGVyYXRvcnMgaGVyZQorICovCisjZGVmaW5lIF9fcmVhbF9wdGUoZSxwKSAJKChyZWFsX3B0ZV90KSB7IFwKKwkoZSksIHB0ZV92YWwoKigocCkgKyBQVFJTX1BFUl9QVEUpKSB9KQorI2RlZmluZSBfX3JwdGVfdG9faGlkeChyLGluZGV4KQkoKHB0ZV92YWwoKHIpLnB0ZSkgJiBfUEFHRV9DT01CTykgPyBcCisgICAgICAgICgoKHIpLmhpZHggPj4gKChpbmRleCk8PDIpKSAmIDB4ZikgOiAoKHB0ZV92YWwoKHIpLnB0ZSkgPj4gMTIpICYgMHhmKSkKKyNkZWZpbmUgX19ycHRlX3RvX3B0ZShyKQkoKHIpLnB0ZSkKKyNkZWZpbmUgX19ycHRlX3N1Yl92YWxpZChycHRlLCBpbmRleCkgXAorCShwdGVfdmFsKHJwdGUucHRlKSAmIChfUEFHRV9IUFRFX1NVQjAgPj4gKGluZGV4KSkpCisKKy8qIFRyaWNrOiB3ZSBzZXQgX19lbmQgdG8gdmEgKyA2NGssIHdoaWNoIGhhcHBlbnMgd29ya3MgZm9yCisgKiBhIDE2TSBwYWdlIGFzIHdlbGwgYXMgd2Ugd2FudCBvbmx5IG9uZSBpdGVyYXRpb24KKyAqLworI2RlZmluZSBwdGVfaXRlcmF0ZV9oYXNoZWRfc3VicGFnZXMocnB0ZSwgcHNpemUsIHZhLCBpbmRleCwgc2hpZnQpCSAgICBcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX19lbmQgPSB2YSArIFBBR0VfU0laRTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBfX3NwbGl0ID0gKHBzaXplID09IE1NVV9QQUdFXzRLIHx8ICAgICAgICAgICAgICAgICBcCisJCQkJICAgIHBzaXplID09IE1NVV9QQUdFXzY0S19BUCk7ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgc2hpZnQgPSBtbXVfcHNpemVfZGVmc1twc2l6ZV0uc2hpZnQ7ICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlmb3IgKGluZGV4ID0gMDsgdmEgPCBfX2VuZDsgaW5kZXgrKywgdmEgKz0gKDFMIDw8IHNoaWZ0KSkgeyBcCisJCSAgICAgICAgaWYgKCFfX3NwbGl0IHx8IF9fcnB0ZV9zdWJfdmFsaWQocnB0ZSwgaW5kZXgpKSBkbyB7IFwKKworI2RlZmluZSBwdGVfaXRlcmF0ZV9oYXNoZWRfZW5kKCkgfSB3aGlsZSgwKTsgfSB9IHdoaWxlKDApCisKKyNkZWZpbmUgcHRlX3BhZ2VzaXplX2luZGV4KG1tLCBhZGRyLCBwdGUpCVwKKwkoKChwdGUpICYgX1BBR0VfQ09NQk8pPyBNTVVfUEFHRV80SzogTU1VX1BBR0VfNjRLKQorCisjZGVmaW5lIHJlbWFwXzRrX3Bmbih2bWEsIGFkZHIsIHBmbiwgcHJvdCkJCQkJXAorCXJlbWFwX3Bmbl9yYW5nZSgodm1hKSwgKGFkZHIpLCAocGZuKSwgUEFHRV9TSVpFLAkJXAorCQkJX19wZ3Byb3QocGdwcm90X3ZhbCgocHJvdCkpIHwgX1BBR0VfNEtfUEZOKSkKKwogCiAjaWZkZWYgQ09ORklHX1BQQ19TVUJQQUdFX1BST1QKIC8qCkBAIC01NSwxMDEgKzExMywzIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BQQ19TVUJQQUdFX1BST1QgKi8KICNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KLQotLyogV2l0aCA0ayBiYXNlIHBhZ2Ugc2l6ZSwgaHVnZXBhZ2UgUFRFcyBnbyBhdCB0aGUgUE1EIGxldmVsICovCi0jZGVmaW5lIE1JTl9IVUdFUFRFX1NISUZUCVBBR0VfU0hJRlQKLQotLyogUE1EX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAgKi8KLSNkZWZpbmUgUE1EX1NISUZUCShQQUdFX1NISUZUICsgUFRFX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBNRF9TSVpFCSgxVUwgPDwgUE1EX1NISUZUKQotI2RlZmluZSBQTURfTUFTSwkofihQTURfU0laRS0xKSkKLQotLyogUEdESVJfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgdGhpcmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCi0jZGVmaW5lIFBHRElSX1NISUZUCShQTURfU0hJRlQgKyBQTURfSU5ERVhfU0laRSkKLSNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQotI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCi0KLS8qIEFkZGl0aW9uYWwgUFRFIGJpdHMgKGRvbid0IGNoYW5nZSB3aXRob3V0IGNoZWNraW5nIGFzbSBpbiBoYXNoX2xvdy5TKSAqLwotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU1BFQ0lBTAotI2RlZmluZSBfUEFHRV9TUEVDSUFMCTB4MDAwMDA0MDAgLyogc29mdHdhcmU6IHNwZWNpYWwgcGFnZSAqLwotI2RlZmluZSBfUEFHRV9IUFRFX1NVQgkweDBmZmZmMDAwIC8qIGNvbWJvIG9ubHk6IHN1YiBwYWdlcyBIUFRFIGJpdHMgKi8KLSNkZWZpbmUgX1BBR0VfSFBURV9TVUIwCTB4MDgwMDAwMDAgLyogY29tYm8gb25seTogZmlyc3Qgc3ViIHBhZ2UgKi8KLSNkZWZpbmUgX1BBR0VfQ09NQk8JMHgxMDAwMDAwMCAvKiB0aGlzIGlzIGEgY29tYm8gNGsgcGFnZSAqLwotI2RlZmluZSBfUEFHRV80S19QRk4JMHgyMDAwMDAwMCAvKiBQRk4gaXMgZm9yIGEgc2luZ2xlIDRrIHBhZ2UgKi8KLQotLyogRm9yIDY0SyBwYWdlLCB3ZSBkb24ndCBoYXZlIGEgc2VwYXJhdGUgX1BBR0VfSEFTSFBURSBiaXQuIEluc3RlYWQsCi0gKiB3ZSBzZXQgdGhhdCB0byBiZSB0aGUgd2hvbGUgc3ViLWJpdHMgbWFzay4gVGhlIEMgY29kZSB3aWxsIG9ubHkKLSAqIHRlc3QgdGhpcywgc28gYSBtdWx0aS1iaXQgbWFzayB3aWxsIHdvcmsuIEZvciBjb21ibyBwYWdlcywgdGhpcwotICogaXMgZXF1aXZhbGVudCBhcyBlZmZlY3RpdmVseSwgdGhlIG9sZCBfUEFHRV9IQVNIUFRFIHdhcyBhbiBPUiBvZgotICogYWxsIHRoZSBzdWIgYml0cy4gRm9yIHJlYWwgNjRrIHBhZ2VzLCB3ZSBub3cgaGF2ZSB0aGUgYXNzZW1ibHkgc2V0Ci0gKiBfUEFHRV9IUFRFX1NVQjAgaW4gYWRkaXRpb24gdG8gc2V0dGluZyB0aGUgSElEWCBiaXRzIHdoaWNoIG92ZXJsYXAKLSAqIHRoYXQgbWFzay4gVGhpcyBpcyBmaW5lIGFzIGxvbmcgYXMgdGhlIEhJRFggYml0cyBhcmUgbmV2ZXIgc2V0IG9uCi0gKiBhIFBURSB0aGF0IGlzbid0IGhhc2hlZCwgd2hpY2ggaXMgdGhlIGNhc2UgdG9kYXkuCi0gKgotICogQSBsaXR0bGUgbml0IGlzIGZvciB0aGUgaHVnZSBwYWdlIEMgY29kZSwgd2hpY2ggZG9lcyB0aGUgaGFzaGluZwotICogaW4gQywgd2UgbmVlZCB0byBwcm92aWRlIHdoaWNoIGJpdCB0byB1c2UuCi0gKi8KLSNkZWZpbmUgX1BBR0VfSEFTSFBURQlfUEFHRV9IUFRFX1NVQgotCi0vKiBOb3RlIHRoZSBmdWxsIHBhZ2UgYml0cyBtdXN0IGJlIGluIHRoZSBzYW1lIGxvY2F0aW9uIGFzIGZvciBub3JtYWwKLSAqIDRrIHBhZ2VzIGFzIHRoZSBzYW1lIGFzc3NlbWJseSB3aWxsIGJlIHVzZWQgdG8gaW5zZXJ0IDY0SyBwYWdlcwotICogd2V0aGVyIHRoZSBrZXJuZWwgaGFzIENPTkZJR19QUENfNjRLX1BBR0VTIG9yIG5vdAotICovCi0jZGVmaW5lIF9QQUdFX0ZfU0VDT05EICAweDAwMDA4MDAwIC8qIGZ1bGwgcGFnZTogaGlkeCBiaXRzICovCi0jZGVmaW5lIF9QQUdFX0ZfR0lYICAgICAweDAwMDA3MDAwIC8qIGZ1bGwgcGFnZTogaGlkeCBiaXRzICovCi0KLS8qIFBURSBmbGFncyB0byBjb25zZXJ2ZSBmb3IgSFBURSBpZGVudGlmaWNhdGlvbiAqLwotI2RlZmluZSBfUEFHRV9IUFRFRkxBR1MgKF9QQUdFX0JVU1kgfCBfUEFHRV9IQVNIUFRFIHwgX1BBR0VfQ09NQk8pCi0KLS8qIFNoaWZ0IHRvIHB1dCBwYWdlIG51bWJlciBpbnRvIHB0ZS4KLSAqCi0gKiBUaGF0IGdpdmVzIHVzIGEgbWF4IFJQTiBvZiAzNCBiaXRzLCB3aGljaCBtZWFucyBhIG1heCBvZiA1MCBiaXRzCi0gKiBvZiBhZGRyZXNzYWJsZSBwaHlzaWNhbCBzcGFjZSwgb3IgNDYgYml0cyBmb3IgdGhlIHNwZWNpYWwgNGsgUEZOcy4KLSAqLwotI2RlZmluZSBQVEVfUlBOX1NISUZUCSgzMCkKLSNkZWZpbmUgUFRFX1JQTl9NQVgJKDFVTCA8PCAoNjQgLSBQVEVfUlBOX1NISUZUKSkKLSNkZWZpbmUgUFRFX1JQTl9NQVNLCSh+KCgxVUw8PFBURV9SUE5fU0hJRlQpLTEpKQotCi0vKiBfUEFHRV9DSEdfTUFTSyBtYXNrcyBvZiBiaXRzIHRoYXQgYXJlIHRvIGJlIHByZXNlcnZlZCBhY2Nyb3NzCi0gKiBwZ3Byb3QgY2hhbmdlcwotICovCi0jZGVmaW5lIF9QQUdFX0NIR19NQVNLCShQVEVfUlBOX01BU0sgfCBfUEFHRV9IUFRFRkxBR1MgfCBfUEFHRV9ESVJUWSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1NQRUNJQUwpCi0KLS8qIEJpdHMgdG8gbWFzayBvdXQgZnJvbSBhIFBNRCB0byBnZXQgdG8gdGhlIFBURSBwYWdlICovCi0jZGVmaW5lIFBNRF9NQVNLRURfQklUUwkJMHgxZmYKLS8qIEJpdHMgdG8gbWFzayBvdXQgZnJvbSBhIFBHRC9QVUQgdG8gZ2V0IHRvIHRoZSBQTUQgcGFnZSAqLwotI2RlZmluZSBQVURfTUFTS0VEX0JJVFMJCTB4MWZmCi0KLS8qIE1hbmlwdWxhdGUgInJwdGUiIHZhbHVlcyAqLwotI2RlZmluZSBfX3JlYWxfcHRlKGUscCkgCSgocmVhbF9wdGVfdCkgeyBcCi0JKGUpLCBwdGVfdmFsKCooKHApICsgUFRSU19QRVJfUFRFKSkgfSkKLSNkZWZpbmUgX19ycHRlX3RvX2hpZHgocixpbmRleCkJKChwdGVfdmFsKChyKS5wdGUpICYgX1BBR0VfQ09NQk8pID8gXAotICAgICAgICAoKChyKS5oaWR4ID4+ICgoaW5kZXgpPDwyKSkgJiAweGYpIDogKChwdGVfdmFsKChyKS5wdGUpID4+IDEyKSAmIDB4ZikpCi0jZGVmaW5lIF9fcnB0ZV90b19wdGUocikJKChyKS5wdGUpCi0jZGVmaW5lIF9fcnB0ZV9zdWJfdmFsaWQocnB0ZSwgaW5kZXgpIFwKLQkocHRlX3ZhbChycHRlLnB0ZSkgJiAoX1BBR0VfSFBURV9TVUIwID4+IChpbmRleCkpKQotCi0KLS8qIFRyaWNrOiB3ZSBzZXQgX19lbmQgdG8gdmEgKyA2NGssIHdoaWNoIGhhcHBlbnMgd29ya3MgZm9yCi0gKiBhIDE2TSBwYWdlIGFzIHdlbGwgYXMgd2Ugd2FudCBvbmx5IG9uZSBpdGVyYXRpb24KLSAqLwotI2RlZmluZSBwdGVfaXRlcmF0ZV9oYXNoZWRfc3VicGFnZXMocnB0ZSwgcHNpemUsIHZhLCBpbmRleCwgc2hpZnQpCSAgICBcCi0gICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX19lbmQgPSB2YSArIFBBR0VfU0laRTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBfX3NwbGl0ID0gKHBzaXplID09IE1NVV9QQUdFXzRLIHx8ICAgICAgICAgICAgICAgICBcCi0JCQkJICAgIHBzaXplID09IE1NVV9QQUdFXzY0S19BUCk7ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgc2hpZnQgPSBtbXVfcHNpemVfZGVmc1twc2l6ZV0uc2hpZnQ7ICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlmb3IgKGluZGV4ID0gMDsgdmEgPCBfX2VuZDsgaW5kZXgrKywgdmEgKz0gKDFMIDw8IHNoaWZ0KSkgeyBcCi0JCSAgICAgICAgaWYgKCFfX3NwbGl0IHx8IF9fcnB0ZV9zdWJfdmFsaWQocnB0ZSwgaW5kZXgpKSBkbyB7IFwKLQotI2RlZmluZSBwdGVfaXRlcmF0ZV9oYXNoZWRfZW5kKCkgfSB3aGlsZSgwKTsgfSB9IHdoaWxlKDApCi0KLSNkZWZpbmUgcHRlX3BhZ2VzaXplX2luZGV4KG1tLCBhZGRyLCBwdGUpCVwKLQkoKChwdGUpICYgX1BBR0VfQ09NQk8pPyBNTVVfUEFHRV80SzogTU1VX1BBR0VfNjRLKQotCi0jZGVmaW5lIHJlbWFwXzRrX3Bmbih2bWEsIGFkZHIsIHBmbiwgcHJvdCkJCQkJXAotCXJlbWFwX3Bmbl9yYW5nZSgodm1hKSwgKGFkZHIpLCAocGZuKSwgUEFHRV9TSVpFLAkJXAotCQkJX19wZ3Byb3QocGdwcm90X3ZhbCgocHJvdCkpIHwgX1BBR0VfNEtfUEZOKSkKLQotI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19QR1RBQkxFXzY0S19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2g2NC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1oYXNoNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDE5ZWViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1oYXNoNjQuaApAQCAtMCwwICsxLDU0IEBACisjaWZuZGVmIF9BU01fUE9XRVJQQ19QVEVfSEFTSDY0X0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1BURV9IQVNINjRfSAorI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIENvbW1vbiBiaXRzIGJldHdlZW4gNEsgYW5kIDY0SyBwYWdlcyBpbiBhIGxpbnV4LXN0eWxlIFBURS4KKyAqIFRoZXNlIG1hdGNoIHRoZSBiaXRzIGluIHRoZSAoaGFyZHdhcmUtZGVmaW5lZCkgUG93ZXJQQyBQVEUgYXMgY2xvc2VseQorICogYXMgcG9zc2libGUuIEFkZGl0aW9uYWwgYml0cyBtYXkgYmUgZGVmaW5lZCBpbiBwZ3RhYmxlLWhhc2g2NC0qLmgKKyAqCisgKiBOb3RlOiBXZSBvbmx5IHN1cHBvcnQgdXNlciByZWFkL3dyaXRlIHBlcm1pc3Npb25zLiBTdXBlcnZpc29yIGFsd2F5cworICogaGF2ZSBmdWxsIHJlYWQvd3JpdGUgdG8gcGFnZXMgYWJvdmUgUEFHRV9PRkZTRVQgKHBhZ2VzIGJlbG93IHRoYXQKKyAqIGFsd2F5cyB1c2UgdGhlIHVzZXIgYWNjZXNzIHBlcm1pc3Npb25zKS4KKyAqCisgKiBXZSBjb3VsZCBjcmVhdGUgc2VwYXJhdGUga2VybmVsIHJlYWQtb25seSBpZiB3ZSB1c2VkIHRoZSAzIFBQIGJpdHMKKyAqIGNvbWJpbmF0aW9ucyB0aGF0IG5ld2VyIHByb2Nlc3NvcnMgcHJvdmlkZSBidXQgd2UgY3VycmVudGx5IGRvbid0LgorICovCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQJCTB4MDAwMSAvKiBzb2Z0d2FyZTogcHRlIGNvbnRhaW5zIGEgdHJhbnNsYXRpb24gKi8KKyNkZWZpbmUgX1BBR0VfVVNFUgkJMHgwMDAyIC8qIG1hdGNoZXMgb25lIG9mIHRoZSBQUCBiaXRzICovCisjZGVmaW5lIF9QQUdFX0ZJTEUJCTB4MDAwMiAvKiAoIXByZXNlbnQgb25seSkgc29mdHdhcmU6IHB0ZSBob2xkcyBmaWxlIG9mZnNldCAqLworI2RlZmluZSBfUEFHRV9FWEVDCQkweDAwMDQgLyogTm8gZXhlY3V0ZSBvbiBQT1dFUjQgYW5kIG5ld2VyICh3ZSBpbnZlcnQpICovCisjZGVmaW5lIF9QQUdFX0dVQVJERUQJCTB4MDAwOAorI2RlZmluZSBfUEFHRV9DT0hFUkVOVAkJMHgwMDEwIC8qIE06IGVuZm9yY2UgbWVtb3J5IGNvaGVyZW5jZSAoU01QIHN5c3RlbXMpICovCisjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCQkweDAwMjAgLyogSTogY2FjaGUgaW5oaWJpdCAqLworI2RlZmluZSBfUEFHRV9XUklURVRIUlUJCTB4MDA0MCAvKiBXOiBjYWNoZSB3cml0ZS10aHJvdWdoICovCisjZGVmaW5lIF9QQUdFX0RJUlRZCQkweDAwODAgLyogQzogcGFnZSBjaGFuZ2VkICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECQkweDAxMDAgLyogUjogcGFnZSByZWZlcmVuY2VkICovCisjZGVmaW5lIF9QQUdFX1JXCQkweDAyMDAgLyogc29mdHdhcmU6IHVzZXIgd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KKyNkZWZpbmUgX1BBR0VfQlVTWQkJMHgwODAwIC8qIHNvZnR3YXJlOiBQVEUgJiBoYXNoIGFyZSBidXN5ICovCisKKy8qIE5vIHNlcGFyYXRlIGtlcm5lbCByZWFkLW9ubHkgKi8KKyNkZWZpbmUgX1BBR0VfS0VSTkVMX1JXCQkoX1BBR0VfUlcgfCBfUEFHRV9ESVJUWSkgLyogdXNlciBhY2Nlc3MgYmxvY2tlZCBieSBrZXkgKi8KKyNkZWZpbmUgX1BBR0VfS0VSTkVMX1JPCQkgX1BBR0VfS0VSTkVMX1JXCisKKy8qIFN0cm9uZyBBY2Nlc3MgT3JkZXJpbmcgKi8KKyNkZWZpbmUgX1BBR0VfU0FPCQkoX1BBR0VfV1JJVEVUSFJVIHwgX1BBR0VfTk9fQ0FDSEUgfCBfUEFHRV9DT0hFUkVOVCkKKworLyogTm8gcGFnZSBzaXplIGVuY29kaW5nIGluIHRoZSBsaW51eCBQVEUgKi8KKyNkZWZpbmUgX1BBR0VfUFNJWkUJCTAKKworLyogUFRFSURYIG5pYmJsZSAqLworI2RlZmluZSBfUFRFSURYX1NFQ09OREFSWQkweDgKKyNkZWZpbmUgX1BURUlEWF9HUk9VUF9JWAkweDcKKworLyogSGFzaCB0YWJsZSBiYXNlZCBwbGF0Zm9ybXMgbmVlZCBhdG9taWMgdXBkYXRlcyBvZiB0aGUgbGludXggUFRFICovCisjZGVmaW5lIFBURV9BVE9NSUNfVVBEQVRFUwkxCisKKyNpZmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUworI2luY2x1ZGUgPGFzbS9wdGUtaGFzaDY0LTY0ay5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20vcHRlLWhhc2g2NC00ay5oPgorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogIF9BU01fUE9XRVJQQ19QVEVfSEFTSDY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaAppbmRleCBmNDg0YTM0Li5jOWZmMWVjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oCkBAIC0xNTUsNiArMTU1LDggQEAKICNkZWZpbmUgICBDVFJMX1JVTkxBVENICTB4MQogI2RlZmluZSBTUFJOX0RBQlIJMHgzRjUJLyogRGF0YSBBZGRyZXNzIEJyZWFrcG9pbnQgUmVnaXN0ZXIgKi8KICNkZWZpbmUgICBEQUJSX1RSQU5TTEFUSU9OCSgxVUwgPDwgMikKKyNkZWZpbmUgICBEQUJSX0RBVEFfV1JJVEUJKDFVTCA8PCAxKQorI2RlZmluZSAgIERBQlJfREFUQV9SRUFECSgxVUwgPDwgMCkKICNkZWZpbmUgU1BSTl9EQUJSMgkweDEzRAkvKiBlMzAwICovCiAjZGVmaW5lIFNQUk5fREFCUlgJMHgzRjcJLyogRGF0YSBBZGRyZXNzIEJyZWFrcG9pbnQgUmVnaXN0ZXIgRXh0ZW5zaW9uICovCiAjZGVmaW5lICAgREFCUlhfVVNFUgkoMVVMIDw8IDApCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKaW5kZXggNjc0NTM3Ni4uYTU2ZjRkNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKQEAgLTEwLDYgKzEwLDcgQEAKICNkZWZpbmUgX19BU01fUE9XRVJQQ19SRUdfQk9PS0VfSF9fCiAKIC8qIE1hY2hpbmUgU3RhdGUgUmVnaXN0ZXIgKE1TUikgRmllbGRzICovCisjZGVmaW5lIE1TUl9HUwkJKDE8PDI4KSAvKiBHdWVzdCBzdGF0ZSAqLwogI2RlZmluZSBNU1JfVUNMRQkoMTw8MjYpCS8qIFVzZXItbW9kZSBjYWNoZSBsb2NrIGVuYWJsZSAqLwogI2RlZmluZSBNU1JfU1BFCQkoMTw8MjUpCS8qIEVuYWJsZSBTUEUgKi8KICNkZWZpbmUgTVNSX0RXRQkJKDE8PDEwKQkvKiBEZWJ1ZyBXYWl0IEVuYWJsZSAqLwpAQCAtMTEwLDYgKzExMSw3IEBACiAjZGVmaW5lIFNQUk5fTDFDU1IwCTB4M0YyCS8qIEwxIENhY2hlIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAwICovCiAjZGVmaW5lIFNQUk5fTDFDU1IxCTB4M0YzCS8qIEwxIENhY2hlIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAxICovCiAjZGVmaW5lIFNQUk5fTU1VQ1NSMAkweDNGNAkvKiBNTVUgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgU1BSTl9NTVVDRkcJMHgzRjcJLyogTU1VIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KICNkZWZpbmUgU1BSTl9QSVQJMHgzREIJLyogUHJvZ3JhbW1hYmxlIEludGVydmFsIFRpbWVyICovCiAjZGVmaW5lIFNQUk5fQlVDU1IJMHgzRjUJLyogQnJhbmNoIFVuaXQgQ29udHJvbCBhbmQgU3RhdHVzICovCiAjZGVmaW5lIFNQUk5fTDJDU1IwCTB4M0Y5CS8qIEwyIERhdGEgQ2FjaGUgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIDAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCAyYTRiZTE5Li5mNjEyNzk4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC01MzEsNyArNTMxLDcgQEAKICNkZWZpbmUgY21weGNoZzY0X2xvY2FsKHB0ciwgbywgbikgX19jbXB4Y2hnNjRfbG9jYWxfZ2VuZXJpYygocHRyKSwgKG8pLCAobikpCiAjZW5kaWYKIAotI2RlZmluZSBhcmNoX2FsaWduX3N0YWNrKHgpICh4KQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXJjaF9hbGlnbl9zdGFjayh1bnNpZ25lZCBsb25nIHNwKTsKIAogLyogVXNlZCBpbiB2ZXJ5IGVhcmx5IGtlcm5lbCBpbml0aWFsaXphdGlvbi4gKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIHJlbG9jX29mZnNldCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggOTY2NWEyNi4uOWFiYTVhMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTEyLDggKzEyLDEwIEBACiAKIC8qIFdlIGhhdmUgOGsgc3RhY2tzIG9uIHBwYzMyIGFuZCAxNmsgb24gcHBjNjQgKi8KIAotI2lmZGVmIENPTkZJR19QUEM2NAorI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KQogI2RlZmluZSBUSFJFQURfU0hJRlQJCTE0CisjZWxpZiBkZWZpbmVkKENPTkZJR19QUENfMjU2S19QQUdFUykKKyNkZWZpbmUgVEhSRUFEX1NISUZUCQkxNQogI2Vsc2UKICNkZWZpbmUgVEhSRUFEX1NISUZUCQkxMwogI2VuZGlmCkBAIC0xNTQsNiArMTU2LDEzIEBACiAJdGktPmxvY2FsX2ZsYWdzIHw9IF9UTEZfUkVTVE9SRV9TSUdNQVNLOwogCXNldF9iaXQoVElGX1NJR1BFTkRJTkcsICZ0aS0+ZmxhZ3MpOwogfQorCisjaWZkZWYgQ09ORklHX1BQQzY0CisjZGVmaW5lIGlzXzMyYml0X3Rhc2soKQkodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKQorI2Vsc2UKKyNkZWZpbmUgaXNfMzJiaXRfdGFzaygpCSgxKQorI2VuZGlmCisKICNlbmRpZgkvKiAhX19BU1NFTUJMWV9fICovCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IDM3NTI1ODUuLjA1NGExNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90b3BvbG9neS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC0yNCwxMSArMjQsNiBAQAogCiAjZGVmaW5lIGNwdW1hc2tfb2Zfbm9kZShub2RlKSAoJm51bWFfY3B1bWFza19sb29rdXBfdGFibGVbbm9kZV0pCiAKLXN0YXRpYyBpbmxpbmUgaW50IG5vZGVfdG9fZmlyc3RfY3B1KGludCBub2RlKQotewotCXJldHVybiBjcHVtYXNrX2ZpcnN0KGNwdW1hc2tfb2Zfbm9kZShub2RlKSk7Ci19Ci0KIGludCBvZl9ub2RlX3RvX25pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSk7CiAKIHN0cnVjdCBwY2lfYnVzOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VkYmcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91ZGJnLmgKaW5kZXggNjQxOGNlZS4uY2QyMWU1ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VkYmcuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdWRiZy5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiBleHRlcm4gdm9pZCAoKnVkYmdfcHV0YykoY2hhciBjKTsKK2V4dGVybiB2b2lkICgqdWRiZ19mbHVzaCkodm9pZCk7CiBleHRlcm4gaW50ICgqdWRiZ19nZXRjKSh2b2lkKTsKIGV4dGVybiBpbnQgKCp1ZGJnX2dldGNfcG9sbCkodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCmluZGV4IDhkMWE0MTkuLjcxOTAxZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTgsMTIgKzE4LDEwIEBACiBDRkxBR1NfUkVNT1ZFX3Byb21faW5pdC5vID0gLXBnIC1tbm8tc2NoZWQtZXBpbG9nCiBDRkxBR1NfUkVNT1ZFX2J0ZXh0Lm8gPSAtcGcgLW1uby1zY2hlZC1lcGlsb2cKIENGTEFHU19SRU1PVkVfcHJvbS5vID0gLXBnIC1tbm8tc2NoZWQtZXBpbG9nCi0KLWlmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQotIyBkeW5hbWljIGZ0cmFjZSBzZXR1cC4KKyMgZG8gbm90IHRyYWNlIHRyYWNlciBjb2RlCiBDRkxBR1NfUkVNT1ZFX2Z0cmFjZS5vID0gLXBnIC1tbm8tc2NoZWQtZXBpbG9nCi1lbmRpZgotCisjIHRpbWVycyB1c2VkIGJ5IHRyYWNpbmcKK0NGTEFHU19SRU1PVkVfdGltZS5vID0gLXBnIC1tbm8tc2NoZWQtZXBpbG9nCiBlbmRpZgogCiBvYmoteQkJCQk6PSBjcHV0YWJsZS5vIHB0cmFjZS5vIHN5c2NhbGxzLm8gXApAQCAtNjEsNiArNTksNyBAQAogb2JqNjQtJChDT05GSUdfSElCRVJOQVRJT04pCSs9IHN3c3VzcF9hc202NC5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IG1vZHVsZS5vIG1vZHVsZV8kKENPTkZJR19XT1JEX1NJWkUpLm8KIG9iai0kKENPTkZJR180NHgpCQkrPSBjcHVfc2V0dXBfNDR4Lm8KK29iai0kKENPTkZJR19GU0xfQk9PS0UpCQkrPSBjcHVfc2V0dXBfZnNsX2Jvb2tlLm8gZGJlbGwubwogCiBleHRyYS0kKENPTkZJR19QUENfU1REX01NVSkJOj0gaGVhZF8zMi5vCiBleHRyYS0kKENPTkZJR19QUEM2NCkJCTo9IGhlYWRfNjQubwpAQCAtNzYsNyArNzUsNyBAQAogb2JqLSQoQ09ORklHX1BQQzMyKQkJKz0gZW50cnlfMzIubyBzZXR1cF8zMi5vCiBvYmotJChDT05GSUdfUFBDNjQpCQkrPSBkbWEtaW9tbXUubyBpb21tdS5vCiBvYmotJChDT05GSUdfS0dEQikJCSs9IGtnZGIubwotb2JqLSQoQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNKQkrPSBwcm9tX2luaXQubworb2JqLSQoQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkUpCSs9IHByb21faW5pdC5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IHBwY19rc3ltcy5vCiBvYmotJChDT05GSUdfQk9PVFhfVEVYVCkJKz0gYnRleHQubwogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCkBAIC05NCw2ICs5Myw3IEBACiBvYmo2NC0kKENPTkZJR19BVURJVCkJCSs9IGNvbXBhdF9hdWRpdC5vCiAKIG9iai0kKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkJKz0gZnRyYWNlLm8KK29iai0kKENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIpCSs9IGZ0cmFjZS5vCiAKIG9iai0kKENPTkZJR184WFhfTUlOSU1BTF9GUEVNVSkgKz0gc29mdGVtdTh4eC5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYWxpZ24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYWxpZ24uYwppbmRleCA3M2NiNmEzLi41ZmZjZmFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2FsaWduLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hbGlnbi5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAl7IDQsIFNUK0YrUytVIH0sCS8qIDExIDEgMTAxMDogc3Rmc3V4ICovCiAJeyA4LCBTVCtGK1UgfSwJCS8qIDExIDEgMTAxMTogc3RmZHV4ICovCiAJSU5WQUxJRCwJCS8qIDExIDEgMTEwMCAqLwotCUlOVkFMSUQsCQkvKiAxMSAxIDExMDEgKi8KKwl7IDQsIExEK0YgfSwJCS8qIDExIDEgMTEwMTogbGZpd3p4ICovCiAJSU5WQUxJRCwJCS8qIDExIDEgMTExMCAqLwogCUlOVkFMSUQsCQkvKiAxMSAxIDExMTEgKi8KIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggNDJmZTRkYS4uMWU0MGJjMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMjg0LDkgKzI4NCw2IEBACiAjZW5kaWYgLyogISBDT05GSUdfUFBDNjQgKi8KIAogCS8qIEFib3V0IHRoZSBDUFUgZmVhdHVyZXMgdGFibGUgKi8KLQlERUZJTkUoQ1BVX1NQRUNfRU5UUllfU0laRSwgc2l6ZW9mKHN0cnVjdCBjcHVfc3BlYykpOwotCURFRklORShDUFVfU1BFQ19QVlJfTUFTSywgb2Zmc2V0b2Yoc3RydWN0IGNwdV9zcGVjLCBwdnJfbWFzaykpOwotCURFRklORShDUFVfU1BFQ19QVlJfVkFMVUUsIG9mZnNldG9mKHN0cnVjdCBjcHVfc3BlYywgcHZyX3ZhbHVlKSk7CiAJREVGSU5FKENQVV9TUEVDX0ZFQVRVUkVTLCBvZmZzZXRvZihzdHJ1Y3QgY3B1X3NwZWMsIGNwdV9mZWF0dXJlcykpOwogCURFRklORShDUFVfU1BFQ19TRVRVUCwgb2Zmc2V0b2Yoc3RydWN0IGNwdV9zcGVjLCBjcHVfc2V0dXApKTsKIAlERUZJTkUoQ1BVX1NQRUNfUkVTVE9SRSwgb2Zmc2V0b2Yoc3RydWN0IGNwdV9zcGVjLCBjcHVfcmVzdG9yZSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNDR4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF80NHguUwppbmRleCAxMGI0YWIxLi43ZDYwNmY4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF80NHguUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF80NHguUwpAQCAtMzQsNiArMzQsNyBAQAogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV80NjBleCkKIF9HTE9CQUwoX19zZXR1cF9jcHVfNDYwZ3QpCitfR0xPQkFMKF9fc2V0dXBfY3B1XzQ2MHN4KQogCW1mbHIJcjQKIAlibAlfX2luaXRfZnB1XzQ0eAogCWJsCV9fZml4dXBfNDQwQV9tY2hlY2sKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwXzZ4eC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKaW5kZXggNzJkMWQ3My4uNTRmNzY3ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKQEAgLTE1LDkgKzE1LDE0IEBACiAjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CiAKIF9HTE9CQUwoX19zZXR1cF9jcHVfNjAzKQogCW1mbHIJcjQKK0JFR0lOX01NVV9GVFJfU0VDVElPTgorCWxpCXIxMCwwCisJbXRzcHIJU1BSTl9TUFJHNCxyMTAJCS8qIGluaXQgU1cgTFJVIHRyYWNraW5nICovCitFTkRfTU1VX0ZUUl9TRUNUSU9OX0lGU0VUKE1NVV9GVFJfTkVFRF9EVExCX1NXX0xSVSkKIEJFR0lOX0ZUUl9TRUNUSU9OCiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIEVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX0ZQVV9VTkFWQUlMQUJMRSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX2ZzbF9ib29rZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfZnNsX2Jvb2tlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI0YjlhZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX2ZzbF9ib29rZS5TCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgbG93IGxldmVsIENQVSBzZXR1cCBmdW5jdGlvbnMuCisgKiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBCYXNlZCBvbiBjcHVfc2V0dXBfNnh4IGNvZGUgYnkKKyAqIEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CisKK19HTE9CQUwoX19zZXR1cF9jcHVfZTIwMCkKKwkvKiBlbmFibGUgZGVkaWNhdGVkIGRlYnVnIGV4Y2VwdGlvbiBoYW5kbGluZyByZXNvdXJjZXMgKERlYnVnIEFQVSkgKi8KKwltZnNwcglyMyxTUFJOX0hJRDAKKwlvcmkJcjMscjMsSElEMF9EQVBVRU5AbAorCW10c3ByCVNQUk5fSElEMCxyMworCWIJX19zZXR1cF9lMjAwX2l2b3JzCitfR0xPQkFMKF9fc2V0dXBfY3B1X2U1MDB2MSkKK19HTE9CQUwoX19zZXR1cF9jcHVfZTUwMHYyKQorCWIJX19zZXR1cF9lNTAwX2l2b3JzCitfR0xPQkFMKF9fc2V0dXBfY3B1X2U1MDBtYykKKwliCV9fc2V0dXBfZTUwMG1jX2l2b3JzCisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCA5MjNmODdhLi5jZDFiNjg3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC0zNSw2ICszNSwxMCBAQAogICogYW5kIHBwYzY0CiAgKi8KICNpZmRlZiBDT05GSUdfUFBDMzIKK2V4dGVybiB2b2lkIF9fc2V0dXBfY3B1X2UyMDAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CitleHRlcm4gdm9pZCBfX3NldHVwX2NwdV9lNTAwdjEodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CitleHRlcm4gdm9pZCBfX3NldHVwX2NwdV9lNTAwdjIodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CitleHRlcm4gdm9pZCBfX3NldHVwX2NwdV9lNTAwbWModW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV80NDBlcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjKiBzcGVjKTsKIGV4dGVybiB2b2lkIF9fc2V0dXBfY3B1XzQ0MGVweCh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjKiBzcGVjKTsKIGV4dGVybiB2b2lkIF9fc2V0dXBfY3B1XzQ0MGd4KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMqIHNwZWMpOwpAQCAtNDMsNiArNDcsNyBAQAogZXh0ZXJuIHZvaWQgX19zZXR1cF9jcHVfNDQweDUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV80NjBleCh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjKiBzcGVjKTsKIGV4dGVybiB2b2lkIF9fc2V0dXBfY3B1XzQ2MGd0KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMqIHNwZWMpOworZXh0ZXJuIHZvaWQgX19zZXR1cF9jcHVfNDYwc3godW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyAqc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV82MDModW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV82MDQodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV83NTAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CkBAIC03MjYsNiArNzMxLDggQEAKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTAsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLAorCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzUwIiwKKwkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LAogCX0sCiAJewkvKiA3NTBGWCByZXYgMi4wIG11c3QgZGlzYWJsZSBISUQwW0RQTV0gKi8KIAkJLnB2cl9tYXNrCQk9IDB4ZmZmZmZmZmYsCkBAIC03NDEsNiArNzQ4LDggQEAKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTAsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLAorCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzUwIiwKKwkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LAogCX0sCiAJewkvKiA3NTBGWCAoQWxsIHJldnMgZXhjZXB0IDIuMCkgKi8KIAkJLnB2cl9tYXNrCQk9IDB4ZmZmZjAwMDAsCkBAIC03NTYsNiArNzY1LDggQEAKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTBmeCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc1MCIsCisJCS5vcHJvZmlsZV9jcHVfdHlwZSAgICAgID0gInBwYy83NTAiLAorCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRzQsCiAJfSwKIAl7CS8qIDc1MEdYICovCiAJCS5wdnJfbWFzawkJPSAweGZmZmYwMDAwLApAQCAtNzcxLDYgKzc4Miw4IEBACiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzUwZngsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLAorCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzUwIiwKKwkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LAogCX0sCiAJewkvKiA3NDAvNzUwIChMMkNSIGJpdCBuZWVkIGZpeHVwIGZvciA3NDApICovCiAJCS5wdnJfbWFzawkJPSAweGZmZmYwMDAwLApAQCAtMTA3Nyw3ICsxMDkwLDggQEAKIAkJLmNwdV9uYW1lCQk9ICJlMzAwYzIiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX0UzMDBDMiwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gUFBDX0ZFQVRVUkVfMzIgfCBQUENfRkVBVFVSRV9IQVNfTU1VLAotCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVVNFX0hJR0hfQkFUUywKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1VTRV9ISUdIX0JBVFMgfAorCQkJTU1VX0ZUUl9ORUVEX0RUTEJfU1dfTFJVLAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1XzYwMywKQEAgLTEwOTAsNyArMTEwNCw4IEBACiAJCS5jcHVfbmFtZQkJPSAiZTMwMGMzIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19FMzAwLAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUiwKLQkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1VTRV9ISUdIX0JBVFMsCisJCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9VU0VfSElHSF9CQVRTIHwKKwkJCU1NVV9GVFJfTkVFRF9EVExCX1NXX0xSVSwKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV82MDMsCkBAIC0xMTA1LDcgKzExMjAsOCBAQAogCQkuY3B1X25hbWUJCT0gImUzMDBjNCIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfRTMwMCwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVIsCi0JCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9VU0VfSElHSF9CQVRTLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVVNFX0hJR0hfQkFUUyB8CisJCQlNTVVfRlRSX05FRURfRFRMQl9TV19MUlUsCiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNjAzLApAQCAtMTYzNCw2ICsxNjUwLDE5IEBACiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfNDQwQSwKIAkJLnBsYXRmb3JtCQk9ICJwcGM0NDAiLAogCX0sCisJeyAvKiA0NjBTWCAqLworCQkucHZyX21hc2sJCT0gMHhmZmZmZmYwMCwKKwkJLnB2cl92YWx1ZQkJPSAweDEzNTQxODAwLAorCQkuY3B1X25hbWUJCT0gIjQ2MFNYIiwKKwkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU180NFgsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX0JPT0tFLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVFlQRV80NHgsCisJCS5pY2FjaGVfYnNpemUJCT0gMzIsCisJCS5kY2FjaGVfYnNpemUJCT0gMzIsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNDYwc3gsCisJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfNDQwQSwKKwkJLnBsYXRmb3JtCQk9ICJwcGM0NDAiLAorCX0sCiAJewkvKiBkZWZhdWx0IG1hdGNoICovCiAJCS5wdnJfbWFzawkJPSAweDAwMDAwMDAwLAogCQkucHZyX3ZhbHVlCQk9IDB4MDAwMDAwMDAsCkBAIC0xNjg3LDYgKzE3MTYsNyBAQAogCQkJUFBDX0ZFQVRVUkVfVU5JRklFRF9DQUNIRSwKIAkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1RZUEVfRlNMX0UsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfZTIwMCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19lMjAwLAogCQkucGxhdGZvcm0JCT0gInBwYzU1NTQiLAogCX0KQEAgLTE3MDYsNiArMTczNiw3IEBACiAJCS5udW1fcG1jcwkJPSA0LAogCQkub3Byb2ZpbGVfY3B1X3R5cGUJPSAicHBjL2U1MDAiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRlNMX0VNQiwKKwkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV9lNTAwdjEsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZTUwMCwKIAkJLnBsYXRmb3JtCQk9ICJwcGM4NTQwIiwKIAl9LApAQCAtMTcyNCw2ICsxNzU1LDcgQEAKIAkJLm51bV9wbWNzCQk9IDQsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZQk9ICJwcGMvZTUwMCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9GU0xfRU1CLAorCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1X2U1MDB2MiwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19lNTAwLAogCQkucGxhdGZvcm0JCT0gInBwYzg1NDgiLAogCX0sCkBAIC0xNzMzLDEyICsxNzY1LDE0IEBACiAJCS5jcHVfbmFtZQkJPSAiZTUwMG1jIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19FNTAwTUMsCiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX0JPT0tFIHwgUFBDX0ZFQVRVUkVfSEFTX0ZQVSwKLQkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1RZUEVfRlNMX0UgfCBNTVVfRlRSX0JJR19QSFlTLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVFlQRV9GU0xfRSB8IE1NVV9GVFJfQklHX1BIWVMgfAorCQkJTU1VX0ZUUl9VU0VfVExCSUxYLAogCQkuaWNhY2hlX2JzaXplCQk9IDY0LAogCQkuZGNhY2hlX2JzaXplCQk9IDY0LAogCQkubnVtX3BtY3MJCT0gNCwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYy9lNTAwIiwgLyogeHh4IC0gZ2FsYWssIGU1MDBtYz8gKi8KIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0ZTTF9FTUIsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfZTUwMG1jLAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2U1MDAsCiAJCS5wbGF0Zm9ybQkJPSAicHBjZTUwMG1jIiwKIAl9LApAQCAtMTc2Miw3NCArMTc5Niw4NCBAQAogCiBzdGF0aWMgc3RydWN0IGNwdV9zcGVjIHRoZV9jcHVfc3BlYzsKIAorc3RhdGljIHZvaWQgX19pbml0IHNldHVwX2NwdV9zcGVjKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMgKnMpCit7CisJc3RydWN0IGNwdV9zcGVjICp0ID0gJnRoZV9jcHVfc3BlYzsKKwlzdHJ1Y3QgY3B1X3NwZWMgb2xkOworCisJdCA9IFBUUlJFTE9DKHQpOworCW9sZCA9ICp0OworCisJLyogQ29weSBldmVyeXRoaW5nLCB0aGVuIGRvIGZpeHVwcyAqLworCSp0ID0gKnM7CisKKwkvKgorCSAqIElmIHdlIGFyZSBvdmVycmlkaW5nIGEgcHJldmlvdXMgdmFsdWUgZGVyaXZlZCBmcm9tIHRoZSByZWFsCisJICogUFZSIHdpdGggYSBuZXcgdmFsdWUgb2J0YWluZWQgdXNpbmcgYSBsb2dpY2FsIFBWUiB2YWx1ZSwKKwkgKiBkb24ndCBtb2RpZnkgdGhlIHBlcmZvcm1hbmNlIG1vbml0b3IgZmllbGRzLgorCSAqLworCWlmIChvbGQubnVtX3BtY3MgJiYgIXMtPm51bV9wbWNzKSB7CisJCXQtPm51bV9wbWNzID0gb2xkLm51bV9wbWNzOworCQl0LT5wbWNfdHlwZSA9IG9sZC5wbWNfdHlwZTsKKwkJdC0+b3Byb2ZpbGVfdHlwZSA9IG9sZC5vcHJvZmlsZV90eXBlOworCQl0LT5vcHJvZmlsZV9tbWNyYV9zaWh2ID0gb2xkLm9wcm9maWxlX21tY3JhX3NpaHY7CisJCXQtPm9wcm9maWxlX21tY3JhX3NpcHIgPSBvbGQub3Byb2ZpbGVfbW1jcmFfc2lwcjsKKwkJdC0+b3Byb2ZpbGVfbW1jcmFfY2xlYXIgPSBvbGQub3Byb2ZpbGVfbW1jcmFfY2xlYXI7CisKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBwYXNzZWQgdGhyb3VnaCB0aGlzIGxvZ2ljIG9uY2UgYmVmb3JlIGFuZAorCQkgKiBoYXZlIHB1bGxlZCB0aGUgZGVmYXVsdCBjYXNlIGJlY2F1c2UgdGhlIHJlYWwgUFZSIHdhcworCQkgKiBub3QgZm91bmQgaW5zaWRlIGNwdV9zcGVjc1tdLCB0aGVuIHdlIGFyZSBwb3NzaWJseQorCQkgKiBydW5uaW5nIGluIGNvbXBhdGliaWxpdHkgbW9kZS4gSW4gdGhhdCBjYXNlLCBsZXQgdGhlCisJCSAqIG9wcm9maWxlciBrbm93IHdoaWNoIHNldCBvZiBjb21wYXRpYmlsaXR5IGNvdW50ZXJzIHRvCisJCSAqIHB1bGwgZnJvbSBieSBtYWtpbmcgc3VyZSB0aGUgb3Byb2ZpbGVfY3B1X3R5cGUgc3RyaW5nCisJCSAqIGlzIHNldCB0byB0aGF0IG9mIGNvbXBhdGliaWxpdHkgbW9kZS4gSWYgdGhlCisJCSAqIG9wcm9maWxlX2NwdV90eXBlIGFscmVhZHkgaGFzIGEgdmFsdWUsIHRoZW4gd2UgYXJlCisJCSAqIHBvc3NpYmx5IG92ZXJyaWRpbmcgYSByZWFsIFBWUiB3aXRoIGEgbG9naWNhbCBvbmUsCisJCSAqIGFuZCwgaW4gdGhhdCBjYXNlLCBrZWVwIHRoZSBjdXJyZW50IHZhbHVlIGZvcgorCQkgKiBvcHJvZmlsZV9jcHVfdHlwZS4KKwkJICovCisJCWlmIChvbGQub3Byb2ZpbGVfY3B1X3R5cGUgPT0gTlVMTCkKKwkJCXQtPm9wcm9maWxlX2NwdV90eXBlID0gcy0+b3Byb2ZpbGVfY3B1X3R5cGU7CisJfQorCisJKlBUUlJFTE9DKCZjdXJfY3B1X3NwZWMpID0gJnRoZV9jcHVfc3BlYzsKKworCS8qCisJICogU2V0IHRoZSBiYXNlIHBsYXRmb3JtIHN0cmluZyBvbmNlOyBhc3N1bWVzCisJICogd2UncmUgY2FsbGVkIHdpdGggcmVhbCBwdnIgZmlyc3QuCisJICovCisJaWYgKCpQVFJSRUxPQygmcG93ZXJwY19iYXNlX3BsYXRmb3JtKSA9PSBOVUxMKQorCQkqUFRSUkVMT0MoJnBvd2VycGNfYmFzZV9wbGF0Zm9ybSkgPSB0LT5wbGF0Zm9ybTsKKworI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKwkvKiBwcGM2NCBhbmQgYm9va2UgZXhwZWN0IGlkZW50aWZ5X2NwdSB0byBhbHNvIGNhbGwgc2V0dXBfY3B1IGZvcgorCSAqIHRoYXQgcHJvY2Vzc29yLiBJIHdpbGwgY29uc29saWRhdGUgdGhhdCBhdCBhIGxhdGVyIHRpbWUsIGZvciBub3csCisJICoganVzdCB1c2UgI2lmZGVmLiBXZSBhbHNvIGRvbid0IG5lZWQgdG8gUFRSUkVMT0MgdGhlIGZ1bmN0aW9uCisJICogcG9pbnRlciBvbiBwcGM2NCBhbmQgYm9va2UgYXMgd2UgYXJlIHJ1bm5pbmcgYXQgMCBpbiByZWFsIG1vZGUKKwkgKiBvbiBwcGM2NCBhbmQgcmVsb2Nfb2Zmc2V0IGlzIGFsd2F5cyAwIG9uIGJvb2tlLgorCSAqLworCWlmIChzLT5jcHVfc2V0dXApIHsKKwkJcy0+Y3B1X3NldHVwKG9mZnNldCwgcyk7CisJfQorI2VuZGlmIC8qIENPTkZJR19QUEM2NCB8fCBDT05GSUdfQk9PS0UgKi8KK30KKwogc3RydWN0IGNwdV9zcGVjICogX19pbml0IGlkZW50aWZ5X2NwdSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgaW50IHB2cikKIHsKIAlzdHJ1Y3QgY3B1X3NwZWMgKnMgPSBjcHVfc3BlY3M7Ci0Jc3RydWN0IGNwdV9zcGVjICp0ID0gJnRoZV9jcHVfc3BlYzsKIAlpbnQgaTsKIAogCXMgPSBQVFJSRUxPQyhzKTsKLQl0ID0gUFRSUkVMT0ModCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjcHVfc3BlY3MpOyBpKysscysrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNwdV9zcGVjcyk7IGkrKyxzKyspIHsKIAkJaWYgKChwdnIgJiBzLT5wdnJfbWFzaykgPT0gcy0+cHZyX3ZhbHVlKSB7Ci0JCQkvKgotCQkJICogSWYgd2UgYXJlIG92ZXJyaWRpbmcgYSBwcmV2aW91cyB2YWx1ZSBkZXJpdmVkCi0JCQkgKiBmcm9tIHRoZSByZWFsIFBWUiB3aXRoIGEgbmV3IHZhbHVlIG9idGFpbmVkCi0JCQkgKiB1c2luZyBhIGxvZ2ljYWwgUFZSIHZhbHVlLCBkb24ndCBtb2RpZnkgdGhlCi0JCQkgKiBwZXJmb3JtYW5jZSBtb25pdG9yIGZpZWxkcy4KLQkJCSAqLwotCQkJaWYgKHQtPm51bV9wbWNzICYmICFzLT5udW1fcG1jcykgewotCQkJCXQtPmNwdV9uYW1lID0gcy0+Y3B1X25hbWU7Ci0JCQkJdC0+Y3B1X2ZlYXR1cmVzID0gcy0+Y3B1X2ZlYXR1cmVzOwotCQkJCXQtPmNwdV91c2VyX2ZlYXR1cmVzID0gcy0+Y3B1X3VzZXJfZmVhdHVyZXM7Ci0JCQkJdC0+aWNhY2hlX2JzaXplID0gcy0+aWNhY2hlX2JzaXplOwotCQkJCXQtPmRjYWNoZV9ic2l6ZSA9IHMtPmRjYWNoZV9ic2l6ZTsKLQkJCQl0LT5jcHVfc2V0dXAgPSBzLT5jcHVfc2V0dXA7Ci0JCQkJdC0+Y3B1X3Jlc3RvcmUgPSBzLT5jcHVfcmVzdG9yZTsKLQkJCQl0LT5wbGF0Zm9ybSA9IHMtPnBsYXRmb3JtOwotCQkJCS8qCi0JCQkJICogSWYgd2UgaGF2ZSBwYXNzZWQgdGhyb3VnaCB0aGlzIGxvZ2ljIG9uY2UKLQkJCQkgKiBiZWZvcmUgYW5kIGhhdmUgcHVsbGVkIHRoZSBkZWZhdWx0IGNhc2UKLQkJCQkgKiBiZWNhdXNlIHRoZSByZWFsIFBWUiB3YXMgbm90IGZvdW5kIGluc2lkZQotCQkJCSAqIGNwdV9zcGVjc1tdLCB0aGVuIHdlIGFyZSBwb3NzaWJseSBydW5uaW5nIGluCi0JCQkJICogY29tcGF0aWJpbGl0eSBtb2RlLiBJbiB0aGF0IGNhc2UsIGxldCB0aGUKLQkJCQkgKiBvcHJvZmlsZXIga25vdyB3aGljaCBzZXQgb2YgY29tcGF0aWJpbGl0eQotCQkJCSAqIGNvdW50ZXJzIHRvIHB1bGwgZnJvbSBieSBtYWtpbmcgc3VyZSB0aGUKLQkJCQkgKiBvcHJvZmlsZV9jcHVfdHlwZSBzdHJpbmcgaXMgc2V0IHRvIHRoYXQgb2YKLQkJCQkgKiBjb21wYXRpYmlsaXR5IG1vZGUuIElmIHRoZSBvcHJvZmlsZV9jcHVfdHlwZQotCQkJCSAqIGFscmVhZHkgaGFzIGEgdmFsdWUsIHRoZW4gd2UgYXJlIHBvc3NpYmx5Ci0JCQkJICogb3ZlcnJpZGluZyBhIHJlYWwgUFZSIHdpdGggYSBsb2dpY2FsIG9uZSwgYW5kLAotCQkJCSAqIGluIHRoYXQgY2FzZSwga2VlcCB0aGUgY3VycmVudCB2YWx1ZSBmb3IKLQkJCQkgKiBvcHJvZmlsZV9jcHVfdHlwZS4KLQkJCQkgKi8KLQkJCQlpZiAodC0+b3Byb2ZpbGVfY3B1X3R5cGUgPT0gTlVMTCkKLQkJCQkJdC0+b3Byb2ZpbGVfY3B1X3R5cGUgPSBzLT5vcHJvZmlsZV9jcHVfdHlwZTsKLQkJCX0gZWxzZQotCQkJCSp0ID0gKnM7Ci0JCQkqUFRSUkVMT0MoJmN1cl9jcHVfc3BlYykgPSAmdGhlX2NwdV9zcGVjOwotCi0JCQkvKgotCQkJICogU2V0IHRoZSBiYXNlIHBsYXRmb3JtIHN0cmluZyBvbmNlOyBhc3N1bWVzCi0JCQkgKiB3ZSdyZSBjYWxsZWQgd2l0aCByZWFsIHB2ciBmaXJzdC4KLQkJCSAqLwotCQkJaWYgKCpQVFJSRUxPQygmcG93ZXJwY19iYXNlX3BsYXRmb3JtKSA9PSBOVUxMKQotCQkJCSpQVFJSRUxPQygmcG93ZXJwY19iYXNlX3BsYXRmb3JtKSA9IHQtPnBsYXRmb3JtOwotCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQotCQkJLyogcHBjNjQgYW5kIGJvb2tlIGV4cGVjdCBpZGVudGlmeV9jcHUgdG8gYWxzbyBjYWxsCi0JCQkgKiBzZXR1cF9jcHUgZm9yIHRoYXQgcHJvY2Vzc29yLiBJIHdpbGwgY29uc29saWRhdGUKLQkJCSAqIHRoYXQgYXQgYSBsYXRlciB0aW1lLCBmb3Igbm93LCBqdXN0IHVzZSAjaWZkZWYuCi0JCQkgKiB3ZSBhbHNvIGRvbid0IG5lZWQgdG8gUFRSUkVMT0MgdGhlIGZ1bmN0aW9uIHBvaW50ZXIKLQkJCSAqIG9uIHBwYzY0IGFuZCBib29rZSBhcyB3ZSBhcmUgcnVubmluZyBhdCAwIGluIHJlYWwKLQkJCSAqIG1vZGUgb24gcHBjNjQgYW5kIHJlbG9jX29mZnNldCBpcyBhbHdheXMgMCBvbiBib29rZS4KLQkJCSAqLwotCQkJaWYgKHMtPmNwdV9zZXR1cCkgewotCQkJCXMtPmNwdV9zZXR1cChvZmZzZXQsIHMpOwotCQkJfQotI2VuZGlmIC8qIENPTkZJR19QUEM2NCB8fCBDT05GSUdfQk9PS0UgKi8KKwkJCXNldHVwX2NwdV9zcGVjKG9mZnNldCwgcyk7CiAJCQlyZXR1cm4gczsKIAkJfQorCX0KKwogCUJVRygpOworCiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCmluZGV4IDE5NjcxYWMuLjVmYjY2N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCkBAIC00OCw3ICs0OCw3IEBACiAJICogYnJhbmNoIHRvICJhZGRyIiB3ZSBqdW1wIHRvICgiYWRkciIgKyAzMiBNQikuIEFsdGhvdWdoIGl0IHJlcXVpcmVzCiAJICogdHdvIGluc3RydWN0aW9ucyBpdCBkb2Vzbid0IHJlcXVpcmUgYW55IHJlZ2lzdGVycy4KIAkgKi8KLQlwYXRjaF9pbnN0cnVjdGlvbihwLCBQUENfTk9QX0lOU1RSKTsKKwlwYXRjaF9pbnN0cnVjdGlvbihwLCBQUENfSU5TVF9OT1ApOwogCXBhdGNoX2JyYW5jaCgrK3AsIGFkZHIgKyBQSFlTSUNBTF9TVEFSVCwgMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZGJlbGwuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZGJlbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDkzNzM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kYmVsbC5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBBdXRob3I6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisgKgorICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKworI2luY2x1ZGUgPGFzbS9kYmVsbC5oPgorCisjaWZkZWYgQ09ORklHX1NNUAordW5zaWduZWQgbG9uZyBkYmVsbF9zbXBfbWVzc2FnZVtOUl9DUFVTXTsKKwordm9pZCBzbXBfZGJlbGxfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpCit7CisJaW50IGk7CisKKwlpZih0YXJnZXQgPCBOUl9DUFVTKSB7CisJCXNldF9iaXQobXNnLCAmZGJlbGxfc21wX21lc3NhZ2VbdGFyZ2V0XSk7CisJCXBwY19tc2dzbmQoUFBDX0RCRUxMLCAwLCB0YXJnZXQpOworCX0KKwllbHNlIGlmKHRhcmdldCA9PSBNU0dfQUxMX0JVVF9TRUxGKSB7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgeworCQkJaWYgKGkgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJCWNvbnRpbnVlOworCQkJc2V0X2JpdChtc2csICZkYmVsbF9zbXBfbWVzc2FnZVtpXSk7CisJCQlwcGNfbXNnc25kKFBQQ19EQkVMTCwgMCwgaSk7CisJCX0KKwl9CisJZWxzZSB7IC8qIHRhcmdldCA9PSBNU0dfQUxMICovCisJCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKKwkJCXNldF9iaXQobXNnLCAmZGJlbGxfc21wX21lc3NhZ2VbaV0pOworCQlwcGNfbXNnc25kKFBQQ19EQkVMTCwgUFBDX0RCRUxMX01TR19CUkRDQVNULCAwKTsKKwl9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUwppbmRleCA2ZjdlYjdlLi40ZGQzOGYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TCkBAIC02Myw3ICs2Myw3IEBACiAKIAkuZ2xvYmwJY3JpdF90cmFuc2Zlcl90b19oYW5kbGVyCiBjcml0X3RyYW5zZmVyX3RvX2hhbmRsZXI6Ci0jaWZkZWYgQ09ORklHX0ZTTF9CT09LRQorI2lmZGVmIENPTkZJR19QUENfQk9PSzNFX01NVQogCW1mc3ByCXIwLFNQUk5fTUFTMAogCXN0dwlyMCxNQVMwKHIxMSkKIAltZnNwcglyMCxTUFJOX01BUzEKQEAgLTc4LDcgKzc4LDcgQEAKIAltZnNwcglyMCxTUFJOX01BUzcKIAlzdHcJcjAsTUFTNyhyMTEpCiAjZW5kaWYgLyogQ09ORklHX1BIWVNfNjRCSVQgKi8KLSNlbmRpZiAvKiBDT05GSUdfRlNMX0JPT0tFICovCisjZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM0VfTU1VICovCiAjaWZkZWYgQ09ORklHXzQ0eAogCW1mc3ByCXIwLFNQUk5fTU1VQ1IKIAlzdHcJcjAsTU1VQ1IocjExKQpAQCAtOTE0LDcgKzkxNCw3IEBACiAJbXRzcHIJU1BSTl8jI2V4Y19sdmxfc3JyMCxyOTsJCQkJCVwKIAltdHNwcglTUFJOXyMjZXhjX2x2bF9zcnIxLHIxMDsKIAotI2lmIGRlZmluZWQoQ09ORklHX0ZTTF9CT09LRSkKKyNpZiBkZWZpbmVkKENPTkZJR19QUENfQk9PSzNFX01NVSkKICNpZmRlZiBDT05GSUdfUEhZU182NEJJVAogI2RlZmluZQlSRVNUT1JFX01BUzcJCQkJCQkJXAogCWx3eglyMTEsTUFTNyhyMSk7CQkJCQkJXApAQCAtOTU2LDcgKzk1Niw3IEBACiAJbHd6CXIxMCxjcml0X3NycjFAbChyMTApOwogCW10c3ByCVNQUk5fU1JSMCxyOTsKIAltdHNwcglTUFJOX1NSUjEscjEwOwotCVJFVF9GUk9NX0VYQ19MRVZFTChTUFJOX0NTUlIwLCBTUFJOX0NTUlIxLCBSRkNJKQorCVJFVF9GUk9NX0VYQ19MRVZFTChTUFJOX0NTUlIwLCBTUFJOX0NTUlIxLCBQUENfUkZDSSkKICNlbmRpZiAvKiBDT05GSUdfNDB4ICovCiAKICNpZmRlZiBDT05GSUdfQk9PS0UKQEAgLTk2Nyw3ICs5NjcsNyBAQAogCXN0dwlyMTAsS1NQX0xJTUlUKHI5KQogCVJFU1RPUkVfeFNSUihTUlIwLFNSUjEpOwogCVJFU1RPUkVfTU1VX1JFR1M7Ci0JUkVUX0ZST01fRVhDX0xFVkVMKFNQUk5fQ1NSUjAsIFNQUk5fQ1NSUjEsIFJGQ0kpCisJUkVUX0ZST01fRVhDX0xFVkVMKFNQUk5fQ1NSUjAsIFNQUk5fQ1NSUjEsIFBQQ19SRkNJKQogCiAJLmdsb2JsCXJldF9mcm9tX2RlYnVnX2V4YwogcmV0X2Zyb21fZGVidWdfZXhjOgpAQCAtOTgxLDcgKzk4MSw3IEBACiAJUkVTVE9SRV94U1JSKFNSUjAsU1JSMSk7CiAJUkVTVE9SRV94U1JSKENTUlIwLENTUlIxKTsKIAlSRVNUT1JFX01NVV9SRUdTOwotCVJFVF9GUk9NX0VYQ19MRVZFTChTUFJOX0RTUlIwLCBTUFJOX0RTUlIxLCBSRkRJKQorCVJFVF9GUk9NX0VYQ19MRVZFTChTUFJOX0RTUlIwLCBTUFJOX0RTUlIxLCBQUENfUkZESSkKIAogCS5nbG9ibAlyZXRfZnJvbV9tY2hlY2tfZXhjCiByZXRfZnJvbV9tY2hlY2tfZXhjOgpAQCAtOTkyLDcgKzk5Miw3IEBACiAJUkVTVE9SRV94U1JSKENTUlIwLENTUlIxKTsKIAlSRVNUT1JFX3hTUlIoRFNSUjAsRFNSUjEpOwogCVJFU1RPUkVfTU1VX1JFR1M7Ci0JUkVUX0ZST01fRVhDX0xFVkVMKFNQUk5fTUNTUlIwLCBTUFJOX01DU1JSMSwgUkZNQ0kpCisJUkVUX0ZST01fRVhDX0xFVkVMKFNQUk5fTUNTUlIwLCBTUFJOX01DU1JSMSwgUFBDX1JGTUNJKQogI2VuZGlmIC8qIENPTkZJR19CT09LRSAqLwogCiAvKgpAQCAtMTE3Niw1OSArMTE3NiwyNyBAQAogCWJjdHIKIAogX0dMT0JBTChmdHJhY2VfY2FsbGVyKQotCS8qIEJhc2VkIG9mZiBvZiBvYmpkdW1wIG9wdHB1dCBmcm9tIGdsaWJjICovCi0Jc3R3dQlyMSwtNDgocjEpCi0Jc3R3CXIzLCAxMihyMSkKLQlzdHcJcjQsIDE2KHIxKQotCXN0dwlyNSwgMjAocjEpCi0Jc3R3CXI2LCAyNChyMSkKLQltZmxyCXIzCi0JbHd6CXI0LCA1MihyMSkKLQltZmNyCXI1Ci0Jc3R3CXI3LCAyOChyMSkKLQlzdHcJcjgsIDMyKHIxKQotCXN0dwlyOSwgMzYocjEpCi0Jc3R3CXIxMCw0MChyMSkKLQlzdHcJcjMsIDQ0KHIxKQotCXN0dwlyNSwgOChyMSkKKwlNQ09VTlRfU0FWRV9GUkFNRQorCS8qIHIzIGVuZHMgdXAgd2l0aCBsaW5rIHJlZ2lzdGVyICovCiAJc3ViaQlyMywgcjMsIE1DT1VOVF9JTlNOX1NJWkUKIC5nbG9ibCBmdHJhY2VfY2FsbAogZnRyYWNlX2NhbGw6CiAJYmwJZnRyYWNlX3N0dWIKIAlub3AKLQlsd3oJcjYsIDgocjEpCi0JbHd6CXIwLCA0NChyMSkKLQlsd3oJcjMsIDEyKHIxKQotCW10Y3RyCXIwCi0JbHd6CXI0LCAxNihyMSkKLQltdGNyCXI2Ci0JbHd6CXI1LCAyMChyMSkKLQlsd3oJcjYsIDI0KHIxKQotCWx3eglyMCwgNTIocjEpCi0JbHd6CXI3LCAyOChyMSkKLQlsd3oJcjgsIDMyKHIxKQotCW10bHIJcjAKLQlsd3oJcjksIDM2KHIxKQotCWx3eglyMTAsNDAocjEpCi0JYWRkaQlyMSwgcjEsIDQ4CisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorLmdsb2JsIGZ0cmFjZV9ncmFwaF9jYWxsCitmdHJhY2VfZ3JhcGhfY2FsbDoKKwliCWZ0cmFjZV9ncmFwaF9zdHViCitfR0xPQkFMKGZ0cmFjZV9ncmFwaF9zdHViKQorI2VuZGlmCisJTUNPVU5UX1JFU1RPUkVfRlJBTUUKKwkvKiBvbGQgbGluayByZWdpc3RlciBlbmRzIHVwIGluIGN0ciByZWcgKi8KIAliY3RyCiAjZWxzZQogX0dMT0JBTChtY291bnQpCiBfR0xPQkFMKF9tY291bnQpCi0Jc3R3dQlyMSwtNDgocjEpCi0Jc3R3CXIzLCAxMihyMSkKLQlzdHcJcjQsIDE2KHIxKQotCXN0dwlyNSwgMjAocjEpCi0Jc3R3CXI2LCAyNChyMSkKLQltZmxyCXIzCi0JbHd6CXI0LCA1MihyMSkKLQltZmNyCXI1Ci0Jc3R3CXI3LCAyOChyMSkKLQlzdHcJcjgsIDMyKHIxKQotCXN0dwlyOSwgMzYocjEpCi0Jc3R3CXIxMCw0MChyMSkKLQlzdHcJcjMsIDQ0KHIxKQotCXN0dwlyNSwgOChyMSkKKworCU1DT1VOVF9TQVZFX0ZSQU1FCiAKIAlzdWJpCXIzLCByMywgTUNPVU5UX0lOU05fU0laRQogCUxPQURfUkVHX0FERFIocjUsIGZ0cmFjZV90cmFjZV9mdW5jdGlvbikKQEAgLTEyMzYsMjggKzEyMDQsNTUgQEAKIAogCW10Y3RyCXI1CiAJYmN0cmwKLQogCW5vcAogCi0JbHd6CXI2LCA4KHIxKQotCWx3eglyMCwgNDQocjEpCi0JbHd6CXIzLCAxMihyMSkKLQltdGN0cglyMAotCWx3eglyNCwgMTYocjEpCi0JbXRjcglyNgotCWx3eglyNSwgMjAocjEpCi0JbHd6CXI2LCAyNChyMSkKLQlsd3oJcjAsIDUyKHIxKQotCWx3eglyNywgMjgocjEpCi0JbHd6CXI4LCAzMihyMSkKLQltdGxyCXIwCi0JbHd6CXI5LCAzNihyMSkKLQlsd3oJcjEwLDQwKHIxKQotCWFkZGkJcjEsIHIxLCA0OAorI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKKwliCWZ0cmFjZV9ncmFwaF9jYWxsZXIKKyNlbmRpZgorCU1DT1VOVF9SRVNUT1JFX0ZSQU1FCiAJYmN0cgogI2VuZGlmCiAKIF9HTE9CQUwoZnRyYWNlX3N0dWIpCiAJYmxyCiAKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCitfR0xPQkFMKGZ0cmFjZV9ncmFwaF9jYWxsZXIpCisJLyogbG9hZCByNCB3aXRoIGxvY2FsIGFkZHJlc3MgKi8KKwlsd3oJcjQsIDQ0KHIxKQorCXN1YmkJcjQsIHI0LCBNQ09VTlRfSU5TTl9TSVpFCisKKwkvKiBnZXQgdGhlIHBhcmVudCBhZGRyZXNzICovCisJYWRkaQlyMywgcjEsIDUyCisKKwlibAlwcmVwYXJlX2Z0cmFjZV9yZXR1cm4KKwlub3AKKworCU1DT1VOVF9SRVNUT1JFX0ZSQU1FCisJLyogb2xkIGxpbmsgcmVnaXN0ZXIgZW5kcyB1cCBpbiBjdHIgcmVnICovCisJYmN0cgorCitfR0xPQkFMKHJldHVybl90b19oYW5kbGVyKQorCS8qIG5lZWQgdG8gc2F2ZSByZXR1cm4gdmFsdWVzICovCisJc3R3dQlyMSwgLTMyKHIxKQorCXN0dwlyMywgMjAocjEpCisJc3R3CXI0LCAxNihyMSkKKwlzdHcJcjMxLCAxMihyMSkKKwltcglyMzEsIHIxCisKKwlibAlmdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIKKwlub3AKKworCS8qIHJldHVybiB2YWx1ZSBoYXMgcmVhbCByZXR1cm4gYWRkcmVzcyAqLworCW10bHIJcjMKKworCWx3eglyMywgMjAocjEpCisJbHd6CXI0LCAxNihyMSkKKwlsd3oJcjMxLDEyKHIxKQorCWx3eglyMSwgMChyMSkKKworCS8qIEp1bXAgYmFjayB0byByZWFsIHJldHVybiBhZGRyZXNzICovCisJYmxyCisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLworCiAjZW5kaWYgLyogQ09ORklHX01DT1VOVCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IDM4M2VkNmUuLmFiZmMzMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKQEAgLTkwOCw2ICs5MDgsMTIgQEAKIGZ0cmFjZV9jYWxsOgogCWJsCWZ0cmFjZV9zdHViCiAJbm9wCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorLmdsb2JsIGZ0cmFjZV9ncmFwaF9jYWxsCitmdHJhY2VfZ3JhcGhfY2FsbDoKKwliCWZ0cmFjZV9ncmFwaF9zdHViCitfR0xPQkFMKGZ0cmFjZV9ncmFwaF9zdHViKQorI2VuZGlmCiAJbGQJcjAsIDEyOChyMSkKIAltdGxyCXIwCiAJYWRkaQlyMSwgcjEsIDExMgpAQCAtOTMxLDEzICs5MzcsOTAgQEAKIAlsZAlyNSwwKHI1KQogCW10Y3RyCXI1CiAJYmN0cmwKLQogCW5vcAorCisKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJYglmdHJhY2VfZ3JhcGhfY2FsbGVyCisjZW5kaWYKIAlsZAlyMCwgMTI4KHIxKQogCW10bHIJcjAKIAlhZGRpCXIxLCByMSwgMTEyCiBfR0xPQkFMKGZ0cmFjZV9zdHViKQogCWJscgogCi0jZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLworCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorX0dMT0JBTChmdHJhY2VfZ3JhcGhfY2FsbGVyKQorCS8qIGxvYWQgcjQgd2l0aCBsb2NhbCBhZGRyZXNzICovCisJbGQJcjQsIDEyOChyMSkKKwlzdWJpCXI0LCByNCwgTUNPVU5UX0lOU05fU0laRQorCisJLyogZ2V0IHRoZSBwYXJlbnQgYWRkcmVzcyAqLworCWxkCXIxMSwgMTEyKHIxKQorCWFkZGkJcjMsIHIxMSwgMTYKKworCWJsCS5wcmVwYXJlX2Z0cmFjZV9yZXR1cm4KKwlub3AKKworCWxkCXIwLCAxMjgocjEpCisJbXRscglyMAorCWFkZGkJcjEsIHIxLCAxMTIKKwlibHIKKworX0dMT0JBTChyZXR1cm5fdG9faGFuZGxlcikKKwkvKiBuZWVkIHRvIHNhdmUgcmV0dXJuIHZhbHVlcyAqLworCXN0ZAlyNCwgIC0yNChyMSkKKwlzdGQJcjMsICAtMTYocjEpCisJc3RkCXIzMSwgLTgocjEpCisJbXIJcjMxLCByMQorCXN0ZHUJcjEsIC0xMTIocjEpCisKKwlibAkuZnRyYWNlX3JldHVybl90b19oYW5kbGVyCisJbm9wCisKKwkvKiByZXR1cm4gdmFsdWUgaGFzIHJlYWwgcmV0dXJuIGFkZHJlc3MgKi8KKwltdGxyCXIzCisKKwlsZAlyMSwgMChyMSkKKwlsZAlyNCwgIC0yNChyMSkKKwlsZAlyMywgIC0xNihyMSkKKwlsZAlyMzEsIC04KHIxKQorCisJLyogSnVtcCBiYWNrIHRvIHJlYWwgcmV0dXJuIGFkZHJlc3MgKi8KKwlibHIKKworX0dMT0JBTChtb2RfcmV0dXJuX3RvX2hhbmRsZXIpCisJLyogbmVlZCB0byBzYXZlIHJldHVybiB2YWx1ZXMgKi8KKwlzdGQJcjQsICAtMzIocjEpCisJc3RkCXIzLCAgLTI0KHIxKQorCS8qIHNhdmUgVE9DICovCisJc3RkCXIyLCAgLTE2KHIxKQorCXN0ZAlyMzEsIC04KHIxKQorCW1yCXIzMSwgcjEKKwlzdGR1CXIxLCAtMTEyKHIxKQorCisJLyoKKwkgKiBXZSBhcmUgaW4gYSBtb2R1bGUgdXNpbmcgdGhlIG1vZHVsZSdzIFRPQy4KKwkgKiBTd2l0Y2ggdG8gb3VyIFRPQyB0byBydW4gaW5zaWRlIHRoZSBjb3JlIGtlcm5lbC4KKwkgKi8KKwlMT0FEX1JFR19JTU1FRElBVEUocjQsZnRyYWNlX3JldHVybl90b19oYW5kbGVyKQorCWxkCXIyLCA4KHI0KQorCisJYmwJLmZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcgorCW5vcAorCisJLyogcmV0dXJuIHZhbHVlIGhhcyByZWFsIHJldHVybiBhZGRyZXNzICovCisJbXRscglyMworCisJbGQJcjEsIDAocjEpCisJbGQJcjQsICAtMzIocjEpCisJbGQJcjMsICAtMjQocjEpCisJbGQJcjIsICAtMTYocjEpCisJbGQJcjMxLCAtOChyMSkKKworCS8qIEp1bXAgYmFjayB0byByZWFsIHJldHVybiBhZGRyZXNzICovCisJYmxyCisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLworI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9UUkFDRVIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2Z0cmFjZS5jCmluZGV4IDYwYzYwY2MuLjViNWQxNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9mdHJhY2UuYwpAQCAtNSw2ICs1LDkgQEAKICAqCiAgKiBUaGFua3MgZ29lcyBvdXQgdG8gUC5BLiBTZW1pLCBJbmMgZm9yIHN1cHBseWluZyBtZSB3aXRoIGEgUFBDNjQgYm94LgogICoKKyAqIEFkZGVkIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciBjb2RlLCB0YWtlbiBmcm9tIHg4NiB0aGF0IHdhcyB3cml0dGVuCisgKiBieSBGcmVkZXJpYyBXZWlzYmVja2VyLCBhbmQgcG9ydGVkIHRvIFBQQyBieSBTdGV2ZW4gUm9zdGVkdC4KKyAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CkBAIC0yMCwxNCArMjMsNiBAQAogI2luY2x1ZGUgPGFzbS9jb2RlLXBhdGNoaW5nLmg+CiAjaW5jbHVkZSA8YXNtL2Z0cmFjZS5oPgogCi0jaWYgMAotI2RlZmluZSBERUJVR1AgcHJpbnRrCi0jZWxzZQotI2RlZmluZSBERUJVR1AoZm10ICwgLi4uKQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQotc3RhdGljIHVuc2lnbmVkIGludCBmdHJhY2Vfbm9wID0gUFBDX05PUF9JTlNUUjsKLQogI2lmZGVmIENPTkZJR19QUEMzMgogIyBkZWZpbmUgR0VUX0FERFIoYWRkcikgYWRkcgogI2Vsc2UKQEAgLTM1LDM3ICszMCwyMyBAQAogIyBkZWZpbmUgR0VUX0FERFIoYWRkcikgKCoodW5zaWduZWQgbG9uZyAqKWFkZHIpCiAjZW5kaWYKIAotCi1zdGF0aWMgdW5zaWduZWQgaW50IGZ0cmFjZV9jYWxjX29mZnNldChsb25nIGlwLCBsb25nIGFkZHIpCisjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCitzdGF0aWMgdW5zaWduZWQgaW50IGZ0cmFjZV9ub3BfcmVwbGFjZSh2b2lkKQogewotCXJldHVybiAoaW50KShhZGRyIC0gaXApOworCXJldHVybiBQUENfSU5TVF9OT1A7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICpmdHJhY2Vfbm9wX3JlcGxhY2Uodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2Z0cmFjZV9jYWxsX3JlcGxhY2UodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGluaykKIHsKLQlyZXR1cm4gKGNoYXIgKikmZnRyYWNlX25vcDsKLX0KKwl1bnNpZ25lZCBpbnQgb3A7CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICpmdHJhY2VfY2FsbF9yZXBsYWNlKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlzdGF0aWMgdW5zaWduZWQgaW50IG9wOwotCi0JLyoKLQkgKiBJdCB3b3VsZCBiZSBuaWNlIHRvIGp1c3QgdXNlIGNyZWF0ZV9mdW5jdGlvbl9jYWxsLCBidXQgdGhhdCB3aWxsCi0JICogdXBkYXRlIHRoZSBjb2RlIGl0c2VsZi4gSGVyZSB3ZSBuZWVkIHRvIGp1c3QgcmV0dXJuIHRoZQotCSAqIGluc3RydWN0aW9uIHRoYXQgaXMgZ29pbmcgdG8gYmUgbW9kaWZpZWQsIHdpdGhvdXQgbW9kaWZ5aW5nIHRoZQotCSAqIGNvZGUuCi0JICovCiAJYWRkciA9IEdFVF9BRERSKGFkZHIpOwogCi0JLyogU2V0IHRvICJibCBhZGRyIiAqLwotCW9wID0gMHg0ODAwMDAwMSB8IChmdHJhY2VfY2FsY19vZmZzZXQoaXAsIGFkZHIpICYgMHgwM2ZmZmZmYyk7CisJLyogaWYgKGxpbmspIHNldCBvcCB0byAnYmwnIGVsc2UgJ2InICovCisJb3AgPSBjcmVhdGVfYnJhbmNoKCh1bnNpZ25lZCBpbnQgKilpcCwgYWRkciwgbGluayA/IDEgOiAwKTsKIAotCS8qCi0JICogTm8gbG9ja2luZyBuZWVkZWQsIHRoaXMgbXVzdCBiZSBjYWxsZWQgdmlhIGtzdG9wX21hY2hpbmUKLQkgKiB3aGljaCBpbiBlc3NlbmNlIGlzIGxpa2UgcnVubmluZyBvbiBhIHVuaXByb2Nlc3NvciBtYWNoaW5lLgotCSAqLwotCXJldHVybiAodW5zaWduZWQgY2hhciAqKSZvcDsKKwlyZXR1cm4gb3A7CiB9CiAKICNpZmRlZiBDT05GSUdfUFBDNjQKQEAgLTc3LDEwICs1OCw5IEBACiAjZW5kaWYKIAogc3RhdGljIGludAotZnRyYWNlX21vZGlmeV9jb2RlKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGNoYXIgKm9sZF9jb2RlLAotCQkgICB1bnNpZ25lZCBjaGFyICpuZXdfY29kZSkKK2Z0cmFjZV9tb2RpZnlfY29kZSh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBpbnQgb2xkLCB1bnNpZ25lZCBpbnQgbmV3KQogewotCXVuc2lnbmVkIGNoYXIgcmVwbGFjZWRbTUNPVU5UX0lOU05fU0laRV07CisJdW5zaWduZWQgaW50IHJlcGxhY2VkOwogCiAJLyoKIAkgKiBOb3RlOiBEdWUgdG8gbW9kdWxlcyBhbmQgX19pbml0LCBjb2RlIGNhbgpAQCAtOTMsMTUgKzczLDE1IEBACiAJICovCiAKIAkvKiByZWFkIHRoZSB0ZXh0IHdlIHdhbnQgdG8gbW9kaWZ5ICovCi0JaWYgKHByb2JlX2tlcm5lbF9yZWFkKHJlcGxhY2VkLCAodm9pZCAqKWlwLCBNQ09VTlRfSU5TTl9TSVpFKSkKKwlpZiAocHJvYmVfa2VybmVsX3JlYWQoJnJlcGxhY2VkLCAodm9pZCAqKWlwLCBNQ09VTlRfSU5TTl9TSVpFKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkvKiBNYWtlIHN1cmUgaXQgaXMgd2hhdCB3ZSBleHBlY3QgaXQgdG8gYmUgKi8KLQlpZiAobWVtY21wKHJlcGxhY2VkLCBvbGRfY29kZSwgTUNPVU5UX0lOU05fU0laRSkgIT0gMCkKKwlpZiAocmVwbGFjZWQgIT0gb2xkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIHJlcGxhY2UgdGhlIHRleHQgd2l0aCB0aGUgbmV3IHRleHQgKi8KLQlpZiAocHJvYmVfa2VybmVsX3dyaXRlKCh2b2lkICopaXAsIG5ld19jb2RlLCBNQ09VTlRfSU5TTl9TSVpFKSkKKwlpZiAocHJvYmVfa2VybmVsX3dyaXRlKCh2b2lkICopaXAsICZuZXcsIE1DT1VOVF9JTlNOX1NJWkUpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJZmx1c2hfaWNhY2hlX3JhbmdlKGlwLCBpcCArIDgpOwpAQCAtMTE5LDYgKzk5LDggQEAKIAlyZXR1cm4gY3JlYXRlX2JyYW5jaCgodW5zaWduZWQgaW50ICopaXAsIGFkZHIsIDApOwogfQogCisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwogc3RhdGljIGludCBpc19ibF9vcCh1bnNpZ25lZCBpbnQgb3ApCiB7CiAJcmV0dXJuIChvcCAmIDB4ZmMwMDAwMDMpID09IDB4NDgwMDAwMDE7CkBAIC0xNzUsNyArMTU3LDcgQEAKIAkgKiAweGU4LCAweDRjLCAweDAwLCAweDI4LCAgICBsZCAgICAgIHIyLDQwKHIxMikKIAkgKi8KIAotCURFQlVHUCgiaXA6JWx4IGp1bXBzIHRvICVseCByMjogJWx4IiwgaXAsIHRyYW1wLCBtb2QtPmFyY2gudG9jKTsKKwlwcl9kZWJ1ZygiaXA6JWx4IGp1bXBzIHRvICVseCByMjogJWx4IiwgaXAsIHRyYW1wLCBtb2QtPmFyY2gudG9jKTsKIAogCS8qIEZpbmQgd2hlcmUgdGhlIHRyYW1wb2xpbmUganVtcHMgdG8gKi8KIAlpZiAocHJvYmVfa2VybmVsX3JlYWQoam1wLCAodm9pZCAqKXRyYW1wLCBzaXplb2Yoam1wKSkpIHsKQEAgLTE4Myw3ICsxNjUsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQlERUJVR1AoIiAlMDh4ICUwOHgiLCBqbXBbMF0sIGptcFsxXSk7CisJcHJfZGVidWcoIiAlMDh4ICUwOHgiLCBqbXBbMF0sIGptcFsxXSk7CiAKIAkvKiB2ZXJpZnkgdGhhdCB0aGlzIGlzIHdoYXQgd2UgZXhwZWN0IGl0IHRvIGJlICovCiAJaWYgKCgoam1wWzBdICYgMHhmZmZmMDAwMCkgIT0gMHgzZDgyMDAwMCkgfHwKQEAgLTE5OSwxOCArMTgxLDE4IEBACiAJb2Zmc2V0ID0gKCh1bnNpZ25lZCkoKHVuc2lnbmVkIHNob3J0KWptcFswXSkgPDwgMTYpICsKIAkJKGludCkoKHNob3J0KWptcFsxXSk7CiAKLQlERUJVR1AoIiAleCAiLCBvZmZzZXQpOworCXByX2RlYnVnKCIgJXggIiwgb2Zmc2V0KTsKIAogCS8qIGdldCB0aGUgYWRkcmVzcyB0aGlzIGp1bXBzIHRvbyAqLwogCXRyYW1wID0gbW9kLT5hcmNoLnRvYyArIG9mZnNldCArIDMyOwotCURFQlVHUCgidG9jOiAlbHgiLCB0cmFtcCk7CisJcHJfZGVidWcoInRvYzogJWx4IiwgdHJhbXApOwogCiAJaWYgKHByb2JlX2tlcm5lbF9yZWFkKGptcCwgKHZvaWQgKil0cmFtcCwgOCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVhZCAlbHhcbiIsIHRyYW1wKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JREVCVUdQKCIgJTA4eCAlMDh4XG4iLCBqbXBbMF0sIGptcFsxXSk7CisJcHJfZGVidWcoIiAlMDh4ICUwOHhcbiIsIGptcFswXSwgam1wWzFdKTsKIAogCXB0ciA9ICgodW5zaWduZWQgbG9uZylqbXBbMF0gPDwgMzIpICsgam1wWzFdOwogCkBAIC0yODcsNyArMjY5LDcgQEAKIAkgKiAgMHg0ZSwgMHg4MCwgMHgwNCwgMHgyMCAgYmN0cgogCSAqLwogCi0JREVCVUdQKCJpcDolbHgganVtcHMgdG8gJWx4IiwgaXAsIHRyYW1wKTsKKwlwcl9kZWJ1ZygiaXA6JWx4IGp1bXBzIHRvICVseCIsIGlwLCB0cmFtcCk7CiAKIAkvKiBGaW5kIHdoZXJlIHRoZSB0cmFtcG9saW5lIGp1bXBzIHRvICovCiAJaWYgKHByb2JlX2tlcm5lbF9yZWFkKGptcCwgKHZvaWQgKil0cmFtcCwgc2l6ZW9mKGptcCkpKSB7CkBAIC0yOTUsNyArMjc3LDcgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JREVCVUdQKCIgJTA4eCAlMDh4ICIsIGptcFswXSwgam1wWzFdKTsKKwlwcl9kZWJ1ZygiICUwOHggJTA4eCAiLCBqbXBbMF0sIGptcFsxXSk7CiAKIAkvKiB2ZXJpZnkgdGhhdCB0aGlzIGlzIHdoYXQgd2UgZXhwZWN0IGl0IHRvIGJlICovCiAJaWYgKCgoam1wWzBdICYgMHhmZmZmMDAwMCkgIT0gMHgzZDYwMDAwMCkgfHwKQEAgLTMxMSw3ICsyOTMsNyBAQAogCWlmICh0cmFtcCAmIDB4ODAwMCkKIAkJdHJhbXAgLT0gMHgxMDAwMDsKIAotCURFQlVHUCgiICV4ICIsIHRyYW1wKTsKKwlwcl9kZWJ1ZygiICV4ICIsIHRyYW1wKTsKIAogCWlmICh0cmFtcCAhPSBhZGRyKSB7CiAJCXByaW50ayhLRVJOX0VSUgpAQCAtMzIwLDcgKzMwMiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW9wID0gUFBDX05PUF9JTlNUUjsKKwlvcCA9IFBQQ19JTlNUX05PUDsKIAogCWlmIChwcm9iZV9rZXJuZWxfd3JpdGUoKHZvaWQgKilpcCwgJm9wLCBNQ09VTlRfSU5TTl9TSVpFKSkKIAkJcmV0dXJuIC1FUEVSTTsKQEAgLTMzMCwxMiArMzEyLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogUFBDNjQgKi8KKyNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLwogCiBpbnQgZnRyYWNlX21ha2Vfbm9wKHN0cnVjdCBtb2R1bGUgKm1vZCwKIAkJICAgIHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQl1bnNpZ25lZCBjaGFyICpvbGQsICpuZXc7CiAJdW5zaWduZWQgbG9uZyBpcCA9IHJlYy0+aXA7CisJdW5zaWduZWQgaW50IG9sZCwgbmV3OwogCiAJLyoKIAkgKiBJZiB0aGUgY2FsbGluZyBhZGRyZXNzIGlzIG1vcmUgdGhhdCAyNCBiaXRzIGF3YXksCkBAIC0zNDQsMTEgKzMyNywxMiBAQAogCSAqLwogCWlmICh0ZXN0XzI0Yml0X2FkZHIoaXAsIGFkZHIpKSB7CiAJCS8qIHdpdGhpbiByYW5nZSAqLwotCQlvbGQgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBhZGRyKTsKKwkJb2xkID0gZnRyYWNlX2NhbGxfcmVwbGFjZShpcCwgYWRkciwgMSk7CiAJCW5ldyA9IGZ0cmFjZV9ub3BfcmVwbGFjZSgpOwogCQlyZXR1cm4gZnRyYWNlX21vZGlmeV9jb2RlKGlwLCBvbGQsIG5ldyk7CiAJfQogCisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkvKgogCSAqIE91dCBvZiByYW5nZSBqdW1wcyBhcmUgY2FsbGVkIGZyb20gbW9kdWxlcy4KIAkgKiBXZSBzaG91bGQgZWl0aGVyIGFscmVhZHkgaGF2ZSBhIHBvaW50ZXIgdG8gdGhlIG1vZHVsZQpAQCAtMzczLDkgKzM1NywxMyBAQAogCQltb2QgPSByZWMtPmFyY2gubW9kOwogCiAJcmV0dXJuIF9fZnRyYWNlX21ha2Vfbm9wKG1vZCwgcmVjLCBhZGRyKTsKLQorI2Vsc2UKKwkvKiBXZSBzaG91bGQgbm90IGdldCBoZXJlIHdpdGhvdXQgbW9kdWxlcyAqLworCXJldHVybiAtRUlOVkFMOworI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCiB9CiAKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogI2lmZGVmIENPTkZJR19QUEM2NAogc3RhdGljIGludAogX19mdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKQEAgLTM5Miw3ICszODAsNyBAQAogCSAqICBiICs4OyBsZCByMiw0MChyMSkKIAkgKi8KIAlpZiAoKChvcFswXSAhPSAweDQ4MDAwMDA4KSB8fCAob3BbMV0gIT0gMHhlODQxMDAyOCkpICYmCi0JICAgICgob3BbMF0gIT0gUFBDX05PUF9JTlNUUikgfHwgKG9wWzFdICE9IFBQQ19OT1BfSU5TVFIpKSkgeworCSAgICAoKG9wWzBdICE9IFBQQ19JTlNUX05PUCkgfHwgKG9wWzFdICE9IFBQQ19JTlNUX05PUCkpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRXhwZWN0ZWQgTk9QcyBidXQgaGF2ZSAleCAleFxuIiwgb3BbMF0sIG9wWzFdKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNDE0LDcgKzQwMiw3IEBACiAJLyogbGQgcjIsNDAocjEpICovCiAJb3BbMV0gPSAweGU4NDEwMDI4OwogCi0JREVCVUdQKCJ3cml0ZSB0byAlbHhcbiIsIHJlYy0+aXApOworCXByX2RlYnVnKCJ3cml0ZSB0byAlbHhcbiIsIHJlYy0+aXApOwogCiAJaWYgKHByb2JlX2tlcm5lbF93cml0ZSgodm9pZCAqKWlwLCBvcCwgTUNPVU5UX0lOU05fU0laRSAqIDIpKQogCQlyZXR1cm4gLUVQRVJNOwpAQCAtNDM1LDcgKzQyMyw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJLyogSXQgc2hvdWxkIGJlIHBvaW50aW5nIHRvIGEgbm9wICovCi0JaWYgKG9wICE9IFBQQ19OT1BfSU5TVFIpIHsKKwlpZiAob3AgIT0gUFBDX0lOU1RfTk9QKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRXhwZWN0ZWQgTk9QIGJ1dCBoYXZlICV4XG4iLCBvcCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTQ1NCw3ICs0NDIsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlERUJVR1AoIndyaXRlIHRvICVseFxuIiwgcmVjLT5pcCk7CisJcHJfZGVidWcoIndyaXRlIHRvICVseFxuIiwgcmVjLT5pcCk7CiAKIAlpZiAocHJvYmVfa2VybmVsX3dyaXRlKCh2b2lkICopaXAsICZvcCwgTUNPVU5UX0lOU05fU0laRSkpCiAJCXJldHVybiAtRVBFUk07CkBAIC00NjQsMTEgKzQ1MiwxMiBAQAogCXJldHVybiAwOwogfQogI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLworI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCiAKIGludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQl1bnNpZ25lZCBjaGFyICpvbGQsICpuZXc7CiAJdW5zaWduZWQgbG9uZyBpcCA9IHJlYy0+aXA7CisJdW5zaWduZWQgaW50IG9sZCwgbmV3OwogCiAJLyoKIAkgKiBJZiB0aGUgY2FsbGluZyBhZGRyZXNzIGlzIG1vcmUgdGhhdCAyNCBiaXRzIGF3YXksCkBAIC00NzgsMTAgKzQ2NywxMSBAQAogCWlmICh0ZXN0XzI0Yml0X2FkZHIoaXAsIGFkZHIpKSB7CiAJCS8qIHdpdGhpbiByYW5nZSAqLwogCQlvbGQgPSBmdHJhY2Vfbm9wX3JlcGxhY2UoKTsKLQkJbmV3ID0gZnRyYWNlX2NhbGxfcmVwbGFjZShpcCwgYWRkcik7CisJCW5ldyA9IGZ0cmFjZV9jYWxsX3JlcGxhY2UoaXAsIGFkZHIsIDEpOwogCQlyZXR1cm4gZnRyYWNlX21vZGlmeV9jb2RlKGlwLCBvbGQsIG5ldyk7CiAJfQogCisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkvKgogCSAqIE91dCBvZiByYW5nZSBqdW1wcyBhcmUgY2FsbGVkIGZyb20gbW9kdWxlcy4KIAkgKiBCZWluZyB0aGF0IHdlIGFyZSBjb252ZXJ0aW5nIGZyb20gbm9wLCBpdCBoYWQgYmV0dGVyCkBAIC00OTMsMTYgKzQ4MywyMCBAQAogCX0KIAogCXJldHVybiBfX2Z0cmFjZV9tYWtlX2NhbGwocmVjLCBhZGRyKTsKKyNlbHNlCisJLyogV2Ugc2hvdWxkIG5vdCBnZXQgaGVyZSB3aXRob3V0IG1vZHVsZXMgKi8KKwlyZXR1cm4gLUVJTlZBTDsKKyNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLwogfQogCiBpbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpCiB7CiAJdW5zaWduZWQgbG9uZyBpcCA9ICh1bnNpZ25lZCBsb25nKSgmZnRyYWNlX2NhbGwpOwotCXVuc2lnbmVkIGNoYXIgb2xkW01DT1VOVF9JTlNOX1NJWkVdLCAqbmV3OworCXVuc2lnbmVkIGludCBvbGQsIG5ldzsKIAlpbnQgcmV0OwogCi0JbWVtY3B5KG9sZCwgJmZ0cmFjZV9jYWxsLCBNQ09VTlRfSU5TTl9TSVpFKTsKLQluZXcgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCAodW5zaWduZWQgbG9uZylmdW5jKTsKKwlvbGQgPSAqKHVuc2lnbmVkIGludCAqKSZmdHJhY2VfY2FsbDsKKwluZXcgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCAodW5zaWduZWQgbG9uZylmdW5jLCAxKTsKIAlyZXQgPSBmdHJhY2VfbW9kaWZ5X2NvZGUoaXAsIG9sZCwgbmV3KTsKIAogCXJldHVybiByZXQ7CkBAIC01MTcsMyArNTExLDExNSBAQAogCiAJcmV0dXJuIDA7CiB9CisjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCisKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisKKyNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKK2V4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9jYWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX3N0dWIodm9pZCk7CisKK2ludCBmdHJhY2VfZW5hYmxlX2Z0cmFjZV9ncmFwaF9jYWxsZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGlwID0gKHVuc2lnbmVkIGxvbmcpKCZmdHJhY2VfZ3JhcGhfY2FsbCk7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpKCZmdHJhY2VfZ3JhcGhfY2FsbGVyKTsKKwl1bnNpZ25lZCBsb25nIHN0dWIgPSAodW5zaWduZWQgbG9uZykoJmZ0cmFjZV9ncmFwaF9zdHViKTsKKwl1bnNpZ25lZCBpbnQgb2xkLCBuZXc7CisKKwlvbGQgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBzdHViLCAwKTsKKwluZXcgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBhZGRyLCAwKTsKKworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoaXAsIG9sZCwgbmV3KTsKK30KKworaW50IGZ0cmFjZV9kaXNhYmxlX2Z0cmFjZV9ncmFwaF9jYWxsZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGlwID0gKHVuc2lnbmVkIGxvbmcpKCZmdHJhY2VfZ3JhcGhfY2FsbCk7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpKCZmdHJhY2VfZ3JhcGhfY2FsbGVyKTsKKwl1bnNpZ25lZCBsb25nIHN0dWIgPSAodW5zaWduZWQgbG9uZykoJmZ0cmFjZV9ncmFwaF9zdHViKTsKKwl1bnNpZ25lZCBpbnQgb2xkLCBuZXc7CisKKwlvbGQgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBhZGRyLCAwKTsKKwluZXcgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBzdHViLCAwKTsKKworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoaXAsIG9sZCwgbmV3KTsKK30KKyNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KKworI2lmZGVmIENPTkZJR19QUEM2NAorZXh0ZXJuIHZvaWQgbW9kX3JldHVybl90b19oYW5kbGVyKHZvaWQpOworI2VuZGlmCisKKy8qCisgKiBIb29rIHRoZSByZXR1cm4gYWRkcmVzcyBhbmQgcHVzaCBpdCBpbiB0aGUgc3RhY2sgb2YgcmV0dXJuIGFkZHJzCisgKiBpbiBjdXJyZW50IHRocmVhZCBpbmZvLgorICovCit2b2lkIHByZXBhcmVfZnRyYWNlX3JldHVybih1bnNpZ25lZCBsb25nICpwYXJlbnQsIHVuc2lnbmVkIGxvbmcgc2VsZl9hZGRyKQoreworCXVuc2lnbmVkIGxvbmcgb2xkOworCXVuc2lnbmVkIGxvbmcgbG9uZyBjYWxsdGltZTsKKwlpbnQgZmF1bHRlZDsKKwlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCB0cmFjZTsKKwl1bnNpZ25lZCBsb25nIHJldHVybl9ob29rZXIgPSAodW5zaWduZWQgbG9uZykmcmV0dXJuX3RvX2hhbmRsZXI7CisKKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmN1cnJlbnQtPnRyYWNpbmdfZ3JhcGhfcGF1c2UpKSkKKwkJcmV0dXJuOworCisjaWYgQ09ORklHX1BQQzY0CisJLyogbm9uIGNvcmUga2VybmVsIGNvZGUgbmVlZHMgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgVE9DICovCisJaWYgKFJFR0lPTl9JRChzZWxmX2FkZHIpICE9IEtFUk5FTF9SRUdJT05fSUQpCisJCXJldHVybl9ob29rZXIgPSAodW5zaWduZWQgbG9uZykmbW9kX3JldHVybl90b19oYW5kbGVyOworI2VuZGlmCisKKwlyZXR1cm5faG9va2VyID0gR0VUX0FERFIocmV0dXJuX2hvb2tlcik7CisKKwkvKgorCSAqIFByb3RlY3QgYWdhaW5zdCBmYXVsdCwgZXZlbiBpZiBpdCBzaG91bGRuJ3QKKwkgKiBoYXBwZW4uIFRoaXMgdG9vbCBpcyB0b28gbXVjaCBpbnRydXNpdmUgdG8KKwkgKiBpZ25vcmUgc3VjaCBhIHByb3RlY3Rpb24uCisJICovCisJYXNtIHZvbGF0aWxlKAorCQkiMTogIiBQUENfTEwgIiVbb2xkXSwgMCglW3BhcmVudF0pXG4iCisJCSIyOiAiIFBQQ19TVEwgIiVbcmV0dXJuX2hvb2tlcl0sIDAoJVtwYXJlbnRdKVxuIgorCQkiICAgbGkgJVtmYXVsdGVkXSwgMFxuIgorCQkiMzpcbiIKKworCQkiLnNlY3Rpb24gLmZpeHVwLCBcImF4XCJcbiIKKwkJIjQ6IGxpICVbZmF1bHRlZF0sIDFcbiIKKwkJIiAgIGIgM2JcbiIKKwkJIi5wcmV2aW91c1xuIgorCisJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJCQlQUENfTE9OR19BTElHTiAiXG4iCisJCQlQUENfTE9ORyAiMWIsNGJcbiIKKwkJCVBQQ19MT05HICIyYiw0YlxuIgorCQkiLnByZXZpb3VzIgorCisJCTogW29sZF0gIj1yIiAob2xkKSwgW2ZhdWx0ZWRdICI9ciIgKGZhdWx0ZWQpCisJCTogW3BhcmVudF0gInIiIChwYXJlbnQpLCBbcmV0dXJuX2hvb2tlcl0gInIiIChyZXR1cm5faG9va2VyKQorCQk6ICJtZW1vcnkiCisJKTsKKworCWlmICh1bmxpa2VseShmYXVsdGVkKSkgeworCQlmdHJhY2VfZ3JhcGhfc3RvcCgpOworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCisJY2FsbHRpbWUgPSBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwlpZiAoZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKG9sZCwgY2FsbHRpbWUsCisJCQkJc2VsZl9hZGRyLCAmdHJhY2UuZGVwdGgpID09IC1FQlVTWSkgeworCQkqcGFyZW50ID0gb2xkOworCQlyZXR1cm47CisJfQorCisJdHJhY2UuZnVuYyA9IHNlbGZfYWRkcjsKKworCS8qIE9ubHkgdHJhY2UgaWYgdGhlIGNhbGxpbmcgZnVuY3Rpb24gZXhwZWN0cyB0byAqLworCWlmICghZnRyYWNlX2dyYXBoX2VudHJ5KCZ0cmFjZSkpIHsKKwkJY3VycmVudC0+Y3Vycl9yZXRfc3RhY2stLTsKKwkJKnBhcmVudCA9IG9sZDsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwppbmRleCBkNzk0YTYzLi41NGU2OGMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwpAQCAtMTA4LDE4ICsxMDgsMjEgQEAKICAqIGJlY2F1c2UgT0YgbWF5IGhhdmUgSS9PIGRldmljZXMgbWFwcGVkIGludG8gdGhhdCBhcmVhCiAgKiAocGFydGljdWxhcmx5IG9uIENIUlApLgogICovCi0jaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCiAJY21wd2kJMCxyNSwwCiAJYmVxCTFmCiAKKyNpZmRlZiBDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORQogCS8qIGZpbmQgb3V0IHdoZXJlIHdlIGFyZSBub3cgKi8KIAliY2wJMjAsMzEsJCs0CiAwOgltZmxyCXI4CQkJLyogcjggPSBydW50aW1lIGFkZHIgaGVyZSAqLwogCWFkZGlzCXI4LHI4LChfc3RleHQgLSAwYilAaGEKIAlhZGRpCXI4LHI4LChfc3RleHQgLSAwYilAbAkvKiBjdXJyZW50IHJ1bnRpbWUgYmFzZSBhZGRyICovCiAJYmwJcHJvbV9pbml0CisjZW5kaWYgLyogQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkUgKi8KKworCS8qIFdlIG5ldmVyIHJldHVybi4gV2UgYWxzbyBoaXQgdGhhdCB0cmFwIGlmIHRyeWluZyB0byBib290CisJICogZnJvbSBPRiB3aGlsZSBDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORSBpc24ndCBzZWxlY3RlZCAqLwogCXRyYXAKLSNlbmRpZgogCiAvKgogICogQ2hlY2sgZm9yIEJvb3RYIHNpZ25hdHVyZSB3aGVuIHN1cHBvcnRpbmcgUG93ZXJNYWMgYW5kIGJyYW5jaCB0bwpAQCAtNDcyLDEyICs0NzUsMTEgQEAKIAkuID0gMHgxMDAwCiBJbnN0cnVjdGlvblRMQk1pc3M6CiAvKgotICogcjA6CXN0b3JlZCBjdHIKKyAqIHIwOglzY3JhdGNoCiAgKiByMToJbGludXggc3R5bGUgcHRlICggbGF0ZXIgYmVjb21lcyBwcGMgaGFyZHdhcmUgcHRlICkKICAqIHIyOglwdHIgdG8gbGludXgtc3R5bGUgcHRlCiAgKiByMzoJc2NyYXRjaAogICovCi0JbWZjdHIJcjAKIAkvKiBHZXQgUFRFIChsaW51eC1zdHlsZSkgYW5kIGNoZWNrIGFjY2VzcyAqLwogCW1mc3ByCXIzLFNQUk5fSU1JU1MKIAlsaXMJcjEsUEFHRV9PRkZTRVRAaAkJLyogY2hlY2sgaWYga2VybmVsIGFkZHJlc3MgKi8KQEAgLTQ5NiwyOCArNDk4LDI3IEBACiAJcmx3aW5tLglyMixyMiwwLDAsMTkJCS8qIGV4dHJhY3QgYWRkcmVzcyBvZiBwdGUgcGFnZSAqLwogCWJlcS0JSW5zdHJ1Y3Rpb25BZGRyZXNzSW52YWxpZAkvKiByZXR1cm4gaWYgbm8gbWFwcGluZyAqLwogCXJsd2ltaQlyMixyMywyMiwyMCwyOQkJLyogaW5zZXJ0IG5leHQgMTAgYml0cyBvZiBhZGRyZXNzICovCi0JbHd6CXIzLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCi0JYW5kYy4JcjEscjEscjMJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCisJbHd6CXIwLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCisJYW5kYy4JcjEscjEscjAJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCiAJYm5lLQlJbnN0cnVjdGlvbkFkZHJlc3NJbnZhbGlkIC8qIHJldHVybiBpZiBhY2Nlc3Mgbm90IHBlcm1pdHRlZCAqLwotCW9yaQlyMyxyMyxfUEFHRV9BQ0NFU1NFRAkvKiBzZXQgX1BBR0VfQUNDRVNTRUQgaW4gcHRlICovCisJb3JpCXIwLHIwLF9QQUdFX0FDQ0VTU0VECS8qIHNldCBfUEFHRV9BQ0NFU1NFRCBpbiBwdGUgKi8KIAkvKgogCSAqIE5PVEUhIFdlIGFyZSBhc3N1bWluZyB0aGlzIGlzIG5vdCBhbiBTTVAgc3lzdGVtLCBvdGhlcndpc2UKIAkgKiB3ZSB3b3VsZCBuZWVkIHRvIHVwZGF0ZSB0aGUgcHRlIGF0b21pY2FsbHkgd2l0aCBsd2FyeC9zdHdjeC4KIAkgKi8KLQlzdHcJcjMsMChyMikJCS8qIHVwZGF0ZSBQVEUgKGFjY2Vzc2VkIGJpdCkgKi8KKwlzdHcJcjAsMChyMikJCS8qIHVwZGF0ZSBQVEUgKGFjY2Vzc2VkIGJpdCkgKi8KIAkvKiBDb252ZXJ0IGxpbnV4LXN0eWxlIFBURSB0byBsb3cgd29yZCBvZiBQUEMtc3R5bGUgUFRFICovCi0Jcmx3aW5tCXIxLHIzLDMyLTEwLDMxLDMxCS8qIF9QQUdFX1JXIC0+IFBQIGxzYiAqLwotCXJsd2lubQlyMixyMywzMi03LDMxLDMxCS8qIF9QQUdFX0RJUlRZIC0+IFBQIGxzYiAqLworCXJsd2lubQlyMSxyMCwzMi0xMCwzMSwzMQkvKiBfUEFHRV9SVyAtPiBQUCBsc2IgKi8KKwlybHdpbm0JcjIscjAsMzItNywzMSwzMQkvKiBfUEFHRV9ESVJUWSAtPiBQUCBsc2IgKi8KIAlhbmQJcjEscjEscjIJCS8qIHdyaXRhYmxlIGlmIF9SVyBhbmQgX0RJUlRZICovCi0Jcmx3aW1pCXIzLHIzLDMyLTEsMzAsMzAJLyogX1BBR0VfVVNFUiAtPiBQUCBtc2IgKi8KLQlybHdpbWkJcjMscjMsMzItMSwzMSwzMQkvKiBfUEFHRV9VU0VSIC0+IFBQIGxzYiAqLworCXJsd2ltaQlyMCxyMCwzMi0xLDMwLDMwCS8qIF9QQUdFX1VTRVIgLT4gUFAgbXNiICovCisJcmx3aW1pCXIwLHIwLDMyLTEsMzEsMzEJLyogX1BBR0VfVVNFUiAtPiBQUCBsc2IgKi8KIAlvcmkJcjEscjEsMHhlMDQJCS8qIGNsZWFyIG91dCByZXNlcnZlZCBiaXRzICovCi0JYW5kYwlyMSxyMyxyMQkJLyogUFAgPSB1c2VyPyAocncmZGlydHk/IDI6IDMpOiAwICovCisJYW5kYwlyMSxyMCxyMQkJLyogUFAgPSB1c2VyPyAocncmZGlydHk/IDI6IDMpOiAwICovCiBCRUdJTl9GVFJfU0VDVElPTgogCXJsd2lubQlyMSxyMSwwLH5fUEFHRV9DT0hFUkVOVAkvKiBjbGVhciBNIChjb2hlcmVuY2Ugbm90IHJlcXVpcmVkKSAqLwogRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfTkVFRF9DT0hFUkVOVCkKIAltdHNwcglTUFJOX1JQQSxyMQotCW1mc3ByCXIzLFNQUk5fSU1JU1MKIAl0bGJsaQlyMwogCW1mc3ByCXIzLFNQUk5fU1JSMQkJLyogTmVlZCB0byByZXN0b3JlIENSMCAqLwogCW10Y3JmCTB4ODAscjMKQEAgLTUyOCw3ICs1MjksNiBAQAogCiAJYWRkaXMJcjEscjEsMHgyMDAwCiAJbXRzcHIJU1BSTl9EU0lTUixyMQkvKiAoc2hvdWxkbid0IGJlIG5lZWRlZCkgKi8KLQltdGN0cglyMAkJLyogUmVzdG9yZSBDVFIgKi8KIAlhbmRpLglyMixyMywweEZGRkYJLyogQ2xlYXIgdXBwZXIgYml0cyBvZiBTUlIxICovCiAJb3IJcjIscjIscjEKIAltdHNwcglTUFJOX1NSUjEscjIKQEAgLTU0OSwxMiArNTQ5LDExIEBACiAJLiA9IDB4MTEwMAogRGF0YUxvYWRUTEJNaXNzOgogLyoKLSAqIHIwOglzdG9yZWQgY3RyCisgKiByMDoJc2NyYXRjaAogICogcjE6CWxpbnV4IHN0eWxlIHB0ZSAoIGxhdGVyIGJlY29tZXMgcHBjIGhhcmR3YXJlIHB0ZSApCiAgKiByMjoJcHRyIHRvIGxpbnV4LXN0eWxlIHB0ZQogICogcjM6CXNjcmF0Y2gKICAqLwotCW1mY3RyCXIwCiAJLyogR2V0IFBURSAobGludXgtc3R5bGUpIGFuZCBjaGVjayBhY2Nlc3MgKi8KIAltZnNwcglyMyxTUFJOX0RNSVNTCiAJbGlzCXIxLFBBR0VfT0ZGU0VUQGgJCS8qIGNoZWNrIGlmIGtlcm5lbCBhZGRyZXNzICovCkBAIC01NzMsMzggKzU3Miw0OCBAQAogCXJsd2lubS4JcjIscjIsMCwwLDE5CQkvKiBleHRyYWN0IGFkZHJlc3Mgb2YgcHRlIHBhZ2UgKi8KIAliZXEtCURhdGFBZGRyZXNzSW52YWxpZAkvKiByZXR1cm4gaWYgbm8gbWFwcGluZyAqLwogCXJsd2ltaQlyMixyMywyMiwyMCwyOQkJLyogaW5zZXJ0IG5leHQgMTAgYml0cyBvZiBhZGRyZXNzICovCi0JbHd6CXIzLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCi0JYW5kYy4JcjEscjEscjMJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCisJbHd6CXIwLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCisJYW5kYy4JcjEscjEscjAJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCiAJYm5lLQlEYXRhQWRkcmVzc0ludmFsaWQJLyogcmV0dXJuIGlmIGFjY2VzcyBub3QgcGVybWl0dGVkICovCi0Jb3JpCXIzLHIzLF9QQUdFX0FDQ0VTU0VECS8qIHNldCBfUEFHRV9BQ0NFU1NFRCBpbiBwdGUgKi8KKwlvcmkJcjAscjAsX1BBR0VfQUNDRVNTRUQJLyogc2V0IF9QQUdFX0FDQ0VTU0VEIGluIHB0ZSAqLwogCS8qCiAJICogTk9URSEgV2UgYXJlIGFzc3VtaW5nIHRoaXMgaXMgbm90IGFuIFNNUCBzeXN0ZW0sIG90aGVyd2lzZQogCSAqIHdlIHdvdWxkIG5lZWQgdG8gdXBkYXRlIHRoZSBwdGUgYXRvbWljYWxseSB3aXRoIGx3YXJ4L3N0d2N4LgogCSAqLwotCXN0dwlyMywwKHIyKQkJLyogdXBkYXRlIFBURSAoYWNjZXNzZWQgYml0KSAqLworCXN0dwlyMCwwKHIyKQkJLyogdXBkYXRlIFBURSAoYWNjZXNzZWQgYml0KSAqLwogCS8qIENvbnZlcnQgbGludXgtc3R5bGUgUFRFIHRvIGxvdyB3b3JkIG9mIFBQQy1zdHlsZSBQVEUgKi8KLQlybHdpbm0JcjEscjMsMzItMTAsMzEsMzEJLyogX1BBR0VfUlcgLT4gUFAgbHNiICovCi0Jcmx3aW5tCXIyLHIzLDMyLTcsMzEsMzEJLyogX1BBR0VfRElSVFkgLT4gUFAgbHNiICovCisJcmx3aW5tCXIxLHIwLDMyLTEwLDMxLDMxCS8qIF9QQUdFX1JXIC0+IFBQIGxzYiAqLworCXJsd2lubQlyMixyMCwzMi03LDMxLDMxCS8qIF9QQUdFX0RJUlRZIC0+IFBQIGxzYiAqLwogCWFuZAlyMSxyMSxyMgkJLyogd3JpdGFibGUgaWYgX1JXIGFuZCBfRElSVFkgKi8KLQlybHdpbWkJcjMscjMsMzItMSwzMCwzMAkvKiBfUEFHRV9VU0VSIC0+IFBQIG1zYiAqLwotCXJsd2ltaQlyMyxyMywzMi0xLDMxLDMxCS8qIF9QQUdFX1VTRVIgLT4gUFAgbHNiICovCisJcmx3aW1pCXIwLHIwLDMyLTEsMzAsMzAJLyogX1BBR0VfVVNFUiAtPiBQUCBtc2IgKi8KKwlybHdpbWkJcjAscjAsMzItMSwzMSwzMQkvKiBfUEFHRV9VU0VSIC0+IFBQIGxzYiAqLwogCW9yaQlyMSxyMSwweGUwNAkJLyogY2xlYXIgb3V0IHJlc2VydmVkIGJpdHMgKi8KLQlhbmRjCXIxLHIzLHIxCQkvKiBQUCA9IHVzZXI/IChydyZkaXJ0eT8gMjogMyk6IDAgKi8KKwlhbmRjCXIxLHIwLHIxCQkvKiBQUCA9IHVzZXI/IChydyZkaXJ0eT8gMjogMyk6IDAgKi8KIEJFR0lOX0ZUUl9TRUNUSU9OCiAJcmx3aW5tCXIxLHIxLDAsfl9QQUdFX0NPSEVSRU5UCS8qIGNsZWFyIE0gKGNvaGVyZW5jZSBub3QgcmVxdWlyZWQpICovCiBFTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9ORUVEX0NPSEVSRU5UKQogCW10c3ByCVNQUk5fUlBBLHIxCi0JbWZzcHIJcjMsU1BSTl9ETUlTUworCW1mc3ByCXIyLFNQUk5fU1JSMQkJLyogTmVlZCB0byByZXN0b3JlIENSMCAqLworCW10Y3JmCTB4ODAscjIKK0JFR0lOX01NVV9GVFJfU0VDVElPTgorCWxpCXIwLDEKKwltZnNwcglyMSxTUFJOX1NQUkc0CisJcmx3aW5tCXIyLHIzLDIwLDI3LDMxCQkvKiBHZXQgQWRkcmVzcyBiaXRzIDE1OjE5ICovCisJc2x3CXIwLHIwLHIyCisJeG9yCXIxLHIwLHIxCisJc3J3CXIwLHIxLHIyCisJbXRzcHIgICBTUFJOX1NQUkc0LHIxCisJbWZzcHIJcjIsU1BSTl9TUlIxCisJcmx3aW1pCXIyLHIwLDMxLTE0LDE0LDE0CisJbXRzcHIgICBTUFJOX1NSUjEscjIKK0VORF9NTVVfRlRSX1NFQ1RJT05fSUZTRVQoTU1VX0ZUUl9ORUVEX0RUTEJfU1dfTFJVKQogCXRsYmxkCXIzCi0JbWZzcHIJcjMsU1BSTl9TUlIxCQkvKiBOZWVkIHRvIHJlc3RvcmUgQ1IwICovCi0JbXRjcmYJMHg4MCxyMwogCXJmaQogRGF0YUFkZHJlc3NJbnZhbGlkOgogCW1mc3ByCXIzLFNQUk5fU1JSMQogCXJsd2lubQlyMSxyMyw5LDYsNgkvKiBHZXQgbG9hZC9zdG9yZSBiaXQgKi8KIAlhZGRpcwlyMSxyMSwweDIwMDAKIAltdHNwcglTUFJOX0RTSVNSLHIxCi0JbXRjdHIJcjAJCS8qIFJlc3RvcmUgQ1RSICovCiAJYW5kaS4JcjIscjMsMHhGRkZGCS8qIENsZWFyIHVwcGVyIGJpdHMgb2YgU1JSMSAqLwogCW10c3ByCVNQUk5fU1JSMSxyMgogCW1mc3ByCXIxLFNQUk5fRE1JU1MJLyogR2V0IGZhaWxpbmcgYWRkcmVzcyAqLwpAQCAtNjI0LDEyICs2MzMsMTEgQEAKIAkuID0gMHgxMjAwCiBEYXRhU3RvcmVUTEJNaXNzOgogLyoKLSAqIHIwOglzdG9yZWQgY3RyCisgKiByMDoJc2NyYXRjaAogICogcjE6CWxpbnV4IHN0eWxlIHB0ZSAoIGxhdGVyIGJlY29tZXMgcHBjIGhhcmR3YXJlIHB0ZSApCiAgKiByMjoJcHRyIHRvIGxpbnV4LXN0eWxlIHB0ZQogICogcjM6CXNjcmF0Y2gKICAqLwotCW1mY3RyCXIwCiAJLyogR2V0IFBURSAobGludXgtc3R5bGUpIGFuZCBjaGVjayBhY2Nlc3MgKi8KIAltZnNwcglyMyxTUFJOX0RNSVNTCiAJbGlzCXIxLFBBR0VfT0ZGU0VUQGgJCS8qIGNoZWNrIGlmIGtlcm5lbCBhZGRyZXNzICovCkBAIC02NDgsMjcgKzY1NiwzOCBAQAogCXJsd2lubS4JcjIscjIsMCwwLDE5CQkvKiBleHRyYWN0IGFkZHJlc3Mgb2YgcHRlIHBhZ2UgKi8KIAliZXEtCURhdGFBZGRyZXNzSW52YWxpZAkvKiByZXR1cm4gaWYgbm8gbWFwcGluZyAqLwogCXJsd2ltaQlyMixyMywyMiwyMCwyOQkJLyogaW5zZXJ0IG5leHQgMTAgYml0cyBvZiBhZGRyZXNzICovCi0JbHd6CXIzLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCi0JYW5kYy4JcjEscjEscjMJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCisJbHd6CXIwLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCisJYW5kYy4JcjEscjEscjAJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCiAJYm5lLQlEYXRhQWRkcmVzc0ludmFsaWQJLyogcmV0dXJuIGlmIGFjY2VzcyBub3QgcGVybWl0dGVkICovCi0Jb3JpCXIzLHIzLF9QQUdFX0FDQ0VTU0VEfF9QQUdFX0RJUlRZCisJb3JpCXIwLHIwLF9QQUdFX0FDQ0VTU0VEfF9QQUdFX0RJUlRZCiAJLyoKIAkgKiBOT1RFISBXZSBhcmUgYXNzdW1pbmcgdGhpcyBpcyBub3QgYW4gU01QIHN5c3RlbSwgb3RoZXJ3aXNlCiAJICogd2Ugd291bGQgbmVlZCB0byB1cGRhdGUgdGhlIHB0ZSBhdG9taWNhbGx5IHdpdGggbHdhcngvc3R3Y3guCiAJICovCi0Jc3R3CXIzLDAocjIpCQkvKiB1cGRhdGUgUFRFIChhY2Nlc3NlZC9kaXJ0eSBiaXRzKSAqLworCXN0dwlyMCwwKHIyKQkJLyogdXBkYXRlIFBURSAoYWNjZXNzZWQvZGlydHkgYml0cykgKi8KIAkvKiBDb252ZXJ0IGxpbnV4LXN0eWxlIFBURSB0byBsb3cgd29yZCBvZiBQUEMtc3R5bGUgUFRFICovCi0Jcmx3aW1pCXIzLHIzLDMyLTEsMzAsMzAJLyogX1BBR0VfVVNFUiAtPiBQUCBtc2IgKi8KKwlybHdpbWkJcjAscjAsMzItMSwzMCwzMAkvKiBfUEFHRV9VU0VSIC0+IFBQIG1zYiAqLwogCWxpCXIxLDB4ZTA1CQkvKiBjbGVhciBvdXQgcmVzZXJ2ZWQgYml0cyAmIFBQIGxzYiAqLwotCWFuZGMJcjEscjMscjEJCS8qIFBQID0gdXNlcj8gMjogMCAqLworCWFuZGMJcjEscjAscjEJCS8qIFBQID0gdXNlcj8gMjogMCAqLwogQkVHSU5fRlRSX1NFQ1RJT04KIAlybHdpbm0JcjEscjEsMCx+X1BBR0VfQ09IRVJFTlQJLyogY2xlYXIgTSAoY29oZXJlbmNlIG5vdCByZXF1aXJlZCkgKi8KIEVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX05FRURfQ09IRVJFTlQpCiAJbXRzcHIJU1BSTl9SUEEscjEKLQltZnNwcglyMyxTUFJOX0RNSVNTCisJbWZzcHIJcjIsU1BSTl9TUlIxCQkvKiBOZWVkIHRvIHJlc3RvcmUgQ1IwICovCisJbXRjcmYJMHg4MCxyMgorQkVHSU5fTU1VX0ZUUl9TRUNUSU9OCisJbGkJcjAsMQorCW1mc3ByCXIxLFNQUk5fU1BSRzQKKwlybHdpbm0JcjIscjMsMjAsMjcsMzEJCS8qIEdldCBBZGRyZXNzIGJpdHMgMTU6MTkgKi8KKwlzbHcJcjAscjAscjIKKwl4b3IJcjEscjAscjEKKwlzcncJcjAscjEscjIKKwltdHNwciAgIFNQUk5fU1BSRzQscjEKKwltZnNwcglyMixTUFJOX1NSUjEKKwlybHdpbWkJcjIscjAsMzEtMTQsMTQsMTQKKwltdHNwciAgIFNQUk5fU1JSMSxyMgorRU5EX01NVV9GVFJfU0VDVElPTl9JRlNFVChNTVVfRlRSX05FRURfRFRMQl9TV19MUlUpCiAJdGxibGQJcjMKLQltZnNwcglyMyxTUFJOX1NSUjEJCS8qIE5lZWQgdG8gcmVzdG9yZSBDUjAgKi8KLQltdGNyZgkweDgwLHIzCiAJcmZpCiAKICNpZm5kZWYgQ09ORklHX0FMVElWRUMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggZWJhZWRhZi4uNTBlZjUwNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKQEAgLTEzNjAsNiArMTM2MCw3IEBACiAJYgkuX19hZnRlcl9wcm9tX3N0YXJ0CiAKIF9JTklUX1NUQVRJQyhfX2Jvb3RfZnJvbV9wcm9tKQorI2lmZGVmIENPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FCiAJLyogU2F2ZSBwYXJhbWV0ZXJzICovCiAJbXIJcjMxLHIzCiAJbXIJcjMwLHI0CkBAIC0xMzkwLDcgKzEzOTEsMTAgQEAKIAkvKiBEbyBhbGwgb2YgdGhlIGludGVyYWN0aW9uIHdpdGggT0YgY2xpZW50IGludGVyZmFjZSAqLwogCW1yCXI4LHIyNgogCWJsCS5wcm9tX2luaXQKLQkvKiBXZSBuZXZlciByZXR1cm4gKi8KKyNlbmRpZiAvKiAjQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkUgKi8KKworCS8qIFdlIG5ldmVyIHJldHVybi4gV2UgYWxzbyBoaXQgdGhhdCB0cmFwIGlmIHRyeWluZyB0byBib290CisJICogZnJvbSBPRiB3aGlsZSBDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORSBpc24ndCBzZWxlY3RlZCAqLwogCXRyYXAKIAogX1NUQVRJQyhfX2FmdGVyX3Byb21fc3RhcnQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9ib29rZS5oCmluZGV4IGZjZTJkZjkuLjk1ZjM5ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9ib29rZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9ib29rZS5oCkBAIC0xMCw2ICsxMCwxNSBAQAogCQltdHNwcglTUFJOX0lWT1IjI3ZlY3Rvcl9udW1iZXIscjI2OwlcCiAJCXN5bmMKIAorI2lmIChUSFJFQURfU0hJRlQgPCAxNSkKKyNkZWZpbmUgQUxMT0NfU1RBQ0tfRlJBTUUocmVnLCB2YWwpCQkJXAorCWFkZGkgcmVnLHJlZyx2YWwKKyNlbHNlCisjZGVmaW5lIEFMTE9DX1NUQUNLX0ZSQU1FKHJlZywgdmFsKQkJCVwKKwlhZGRpcwlyZWcscmVnLHZhbEBoYTsJCQkJXAorCWFkZGkJcmVnLHJlZyx2YWxAbAorI2VuZGlmCisKICNkZWZpbmUgTk9STUFMX0VYQ0VQVElPTl9QUk9MT0cJCQkJCQkgICAgIFwKIAltdHNwcglTUFJOX1NQUkcwLHIxMDsJCS8qIHNhdmUgdHdvIHJlZ2lzdGVycyB0byB3b3JrIHdpdGggKi9cCiAJbXRzcHIJU1BSTl9TUFJHMSxyMTE7CQkJCQkJICAgICBcCkBAIC0yMCw3ICsyOSw3IEBACiAJYmVxCTFmOwkJCQkJCQkgICAgIFwKIAltZnNwcglyMSxTUFJOX1NQUkczOwkJLyogaWYgZnJvbSB1c2VyLCBzdGFydCBhdCB0b3Agb2YgICAqL1wKIAlsd3oJcjEsVEhSRUFEX0lORk8tVEhSRUFEKHIxKTsgLyogdGhpcyB0aHJlYWQncyBrZXJuZWwgc3RhY2sgICAqL1wKLQlhZGRpCXIxLHIxLFRIUkVBRF9TSVpFOwkJCQkJICAgICBcCisJQUxMT0NfU1RBQ0tfRlJBTUUocjEsIFRIUkVBRF9TSVpFKTsJCQkJICAgICBcCiAxOglzdWJpCXIxLHIxLElOVF9GUkFNRV9TSVpFOwkvKiBBbGxvY2F0ZSBhbiBleGNlcHRpb24gZnJhbWUgICAgICovXAogCW1yCXIxMSxyMTsJCQkJCQkJICAgICBcCiAJc3R3CXIxMCxfQ0NSKHIxMSk7ICAgICAgICAgIC8qIHNhdmUgdmFyaW91cyByZWdpc3RlcnMJICAgKi9cCkBAIC03MCwxMCArNzksMTAgQEAKIAogLyogb25seSBvbiBlNTAwbWMvZTIwMCAqLwogI2RlZmluZSBERUJVR19TVEFDS19CQVNFCWRiZ2lycV9jdHgKLSNpZmRlZiBDT05GSUdfUFBDX0U1MDBNQwotI2RlZmluZSBERUJVR19TUFJHCQlTUFJOX1NQUkc5Ci0jZWxzZQorI2lmZGVmIENPTkZJR19FMjAwCiAjZGVmaW5lIERFQlVHX1NQUkcJCVNQUk5fU1BSRzZXCisjZWxzZQorI2RlZmluZSBERUJVR19TUFJHCQlTUFJOX1NQUkc5CiAjZW5kaWYKIAogI2RlZmluZSBFWENfTFZMX0ZSQU1FX09WRVJIRUFECShUSFJFQURfU0laRSAtIElOVF9GUkFNRV9TSVpFIC0gRVhDX0xWTF9TSVpFKQpAQCAtMjc5LDcgKzI4OCw3IEBACiAJbHd6CXIxMSxHUFIxMShyOCk7CQkJCQkJICAgICAgXAogCW1mc3ByCXI4LERFQlVHX1NQUkc7CQkJCQkJICAgICAgXAogCQkJCQkJCQkJICAgICAgXAotCVJGREk7CQkJCQkJCQkgICAgICBcCisJUFBDX1JGREk7CQkJCQkJCQkgICAgICBcCiAJYgkuOwkJCQkJCQkgICAgICBcCiAJCQkJCQkJCQkgICAgICBcCiAJLyogY29udGludWUgbm9ybWFsIGhhbmRsaW5nIGZvciBhIGRlYnVnIGV4Y2VwdGlvbi4uLiAqLwkJICAgICAgXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCmluZGV4IDM2ZmZiMzUuLjRjMjI2MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKQEAgLTEwMywxMCArMTAzLDE1IEBACiAJb3IJcjcscjcscjQKIAltdHNwcglTUFJOX01BUzYscjcKIAl0bGJzeAkwLHI2CQkJCS8qIHNlYXJjaCBNU1JbSVNdLCBTUElEPVBJRDAgKi8KLSNpZm5kZWYgQ09ORklHX0UyMDAKIAltZnNwcglyNyxTUFJOX01BUzEKIAlhbmRpcy4JcjcscjcsTUFTMV9WQUxJREBoCiAJYm5lCW1hdGNoX1RMQgorCisJbWZzcHIJcjcsU1BSTl9NTVVDRkcKKwlybHdpbm0JcjcscjcsMjEsMjgsMzEJCQkvKiBleHRyYWN0IE1NVUNGR1tOUElEU10gKi8KKwljbXB3aQlyNywzCisJYm5lCW1hdGNoX1RMQgkJCS8qIHNraXAgaWYgTlBJRFMgIT0gMyAqLworCiAJbWZzcHIJcjcsU1BSTl9QSUQxCiAJc2x3aQlyNyxyNywxNgogCW9yCXI3LHI3LHI0CkBAIC0xMjAsNyArMTI1LDcgQEAKIAlvcglyNyxyNyxyNAogCW10c3ByCVNQUk5fTUFTNixyNwogCXRsYnN4CTAscjYJCQkJLyogRmFsbCB0aHJvdWdoLCB3ZSBoYWQgdG8gbWF0Y2ggKi8KLSNlbmRpZgorCiBtYXRjaF9UTEI6CiAJbWZzcHIJcjcsU1BSTl9NQVMwCiAJcmx3aW5tCXIzLHI3LDE2LDIwLDMxCQkJLyogRXh0cmFjdCBNQVMwKEVudHJ5KSAqLwpAQCAtMTY4LDcgKzE3Myw3IEBACiAKIAkvKiBncmFiIGFuZCBmaXh1cCB0aGUgUlBOICovCiAJbWZzcHIJcjYsU1BSTl9NQVMxCS8qIGV4dHJhY3QgTUFTMVtTSVpFXSAqLwotCXJsd2lubQlyNixyNiwyNSwyNywzMAorCXJsd2lubQlyNixyNiwyNSwyNywzMQogCWxpCXI4LC0xCiAJYWRkaQlyNixyNiwxMAogCXNsdwlyNixyOCxyNgkvKiBjb252ZXJ0IHRvIG1hc2sgKi8KQEAgLTE5NCw3ICsxOTksNyBAQAogCXhvcmkJcjYscjQsMQkJLyogU2V0dXAgVE1QIG1hcHBpbmcgaW4gdGhlIG90aGVyIEFkZHJlc3Mgc3BhY2UgKi8KIAlzbHdpCXI2LHI2LDEyCiAJb3JpcwlyNixyNiwoTUFTMV9WQUxJRHxNQVMxX0lQUk9UKUBoCi0Jb3JpCXI2LHI2LChNQVMxX1RTSVpFKEJPT0tFX1BBR0VTWl80SykpQGwKKwlvcmkJcjYscjYsKE1BUzFfVFNJWkUoQk9PSzNFX1BBR0VTWl80SykpQGwKIAltdHNwcglTUFJOX01BUzEscjYKIAltZnNwcglyNixTUFJOX01BUzIKIAlsaQlyNywwCQkvKiB0ZW1wIEVQTiA9IDAgKi8KQEAgLTIxNSwxNCArMjIwLDE5IEBACiAKIC8qIDQuIENsZWFyIG91dCBQSURzICYgU2VhcmNoIGluZm8gKi8KIAlsaQlyNiwwCisJbXRzcHIgICBTUFJOX01BUzYscjYKIAltdHNwcglTUFJOX1BJRDAscjYKLSNpZm5kZWYgQ09ORklHX0UyMDAKKworCW1mc3ByCXI3LFNQUk5fTU1VQ0ZHCisJcmx3aW5tCXI3LHI3LDIxLDI4LDMxCQkJLyogZXh0cmFjdCBNTVVDRkdbTlBJRFNdICovCisJY21wd2kJcjcsMworCWJuZQkyZgkJCQkvKiBza2lwIGlmIE5QSURTICE9IDMgKi8KKwogCW10c3ByCVNQUk5fUElEMSxyNgogCW10c3ByCVNQUk5fUElEMixyNgotI2VuZGlmCi0JbXRzcHIJU1BSTl9NQVM2LHI2CiAKIC8qIDUuIEludmFsaWRhdGUgbWFwcGluZyB3ZSBzdGFydGVkIGluICovCisyOgogCWxpcwlyNywweDEwMDAJLyogU2V0IE1BUzAoVExCU0VMKSA9IDEgKi8KIAlybHdpbWkJcjcscjMsMTYsNCwxNQkvKiBTZXR1cCBNQVMwID0gVExCU0VMIHwgRVNFTChyMykgKi8KIAltdHNwcglTUFJOX01BUzAscjcKQEAgLTI0NywxMCArMjU3LDEwIEBACiAJbGlzCXI2LDB4MTAwMAkJLyogU2V0IE1BUzAoVExCU0VMKSA9IFRMQjEoMSksIEVTRUwgPSAwICovCiAJbXRzcHIJU1BSTl9NQVMwLHI2CiAJbGlzCXI2LChNQVMxX1ZBTElEfE1BUzFfSVBST1QpQGgKLQlvcmkJcjYscjYsKE1BUzFfVFNJWkUoQk9PS0VfUEFHRVNaXzY0TSkpQGwKKwlvcmkJcjYscjYsKE1BUzFfVFNJWkUoQk9PSzNFX1BBR0VTWl82NE0pKUBsCiAJbXRzcHIJU1BSTl9NQVMxLHI2Ci0JbGlzCXI2LE1BUzJfVkFMKFBBR0VfT0ZGU0VULCBCT09LRV9QQUdFU1pfNjRNLCBNX0lGX1NNUClAaAotCW9yaQlyNixyNixNQVMyX1ZBTChQQUdFX09GRlNFVCwgQk9PS0VfUEFHRVNaXzY0TSwgTV9JRl9TTVApQGwKKwlsaXMJcjYsTUFTMl9WQUwoUEFHRV9PRkZTRVQsIEJPT0szRV9QQUdFU1pfNjRNLCBNX0lGX1NNUClAaAorCW9yaQlyNixyNixNQVMyX1ZBTChQQUdFX09GRlNFVCwgQk9PSzNFX1BBR0VTWl82NE0sIE1fSUZfU01QKUBsCiAJbXRzcHIJU1BSTl9NQVMyLHI2CiAJbXRzcHIJU1BSTl9NQVMzLHI4CiAJdGxid2UKQEAgLTI5OCwyNiArMzA4LDE0IEBACiAJU0VUX0lWT1IoMTIsIFdhdGNoZG9nVGltZXIpOwogCVNFVF9JVk9SKDEzLCBEYXRhVExCRXJyb3IpOwogCVNFVF9JVk9SKDE0LCBJbnN0cnVjdGlvblRMQkVycm9yKTsKLQlTRVRfSVZPUigxNSwgRGVidWdEZWJ1Zyk7Ci0jaWYgZGVmaW5lZChDT05GSUdfRTUwMCkgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19FNTAwTUMpCiAJU0VUX0lWT1IoMTUsIERlYnVnQ3JpdCk7Ci0jZW5kaWYKLQlTRVRfSVZPUigzMiwgU1BFVW5hdmFpbGFibGUpOwotCVNFVF9JVk9SKDMzLCBTUEVGbG9hdGluZ1BvaW50RGF0YSk7Ci0JU0VUX0lWT1IoMzQsIFNQRUZsb2F0aW5nUG9pbnRSb3VuZCk7Ci0jaWZuZGVmIENPTkZJR19FMjAwCi0JU0VUX0lWT1IoMzUsIFBlcmZvcm1hbmNlTW9uaXRvcik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUFBDX0U1MDBNQwotCVNFVF9JVk9SKDM2LCBEb29yYmVsbCk7Ci0jZW5kaWYKIAogCS8qIEVzdGFibGlzaCB0aGUgaW50ZXJydXB0IHZlY3RvciBiYXNlICovCiAJbGlzCXI0LGludGVycnVwdF9iYXNlQGgJLyogSVZQUiBvbmx5IHVzZXMgdGhlIGhpZ2ggMTYtYml0cyAqLwogCW10c3ByCVNQUk5fSVZQUixyNAogCiAJLyogU2V0dXAgdGhlIGRlZmF1bHRzIGZvciBUTEIgZW50cmllcyAqLwotCWxpCXIyLChNQVM0X1RTSVpFRChCT09LRV9QQUdFU1pfNEspKUBsCisJbGkJcjIsKE1BUzRfVFNJWkVEKEJPT0szRV9QQUdFU1pfNEspKUBsCiAjaWZkZWYgQ09ORklHX0UyMDAKIAlvcmlzCXIyLHIyLE1BUzRfVExCU0VMRCgxKUBoCiAjZW5kaWYKQEAgLTMyOSwxMiArMzI3LDYgQEAKIAlvcmlzCXIyLHIyLEhJRDBfRE9aRUBoCiAJbXRzcHIJU1BSTl9ISUQwLCByMgogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0UyMDAKLQkvKiBlbmFibGUgZGVkaWNhdGVkIGRlYnVnIGV4Y2VwdGlvbiBoYW5kbGluZyByZXNvdXJjZXMgKERlYnVnIEFQVSkgKi8KLQltZnNwcglyMixTUFJOX0hJRDAKLQlvcmkJcjIscjIsSElEMF9EQVBVRU5AbAotCW10c3ByCVNQUk5fSElEMCxyMgotI2VuZGlmCiAKICNpZiAhZGVmaW5lZChDT05GSUdfQkRJX1NXSVRDSCkKIAkvKgpAQCAtNzA2LDE1ICs2OTgsMTMgQEAKIAkvKiBQZXJmb3JtYW5jZSBNb25pdG9yICovCiAJRVhDRVBUSU9OKDB4MjA2MCwgUGVyZm9ybWFuY2VNb25pdG9yLCBwZXJmb3JtYW5jZV9tb25pdG9yX2V4Y2VwdGlvbiwgRVhDX1hGRVJfU1REKQogCi0jaWZkZWYgQ09ORklHX1BQQ19FNTAwTUMKLQlFWENFUFRJT04oMHgyMDcwLCBEb29yYmVsbCwgdW5rbm93bl9leGNlcHRpb24sIEVYQ19YRkVSX1NURCkKLSNlbmRpZgorCUVYQ0VQVElPTigweDIwNzAsIERvb3JiZWxsLCBkb29yYmVsbF9leGNlcHRpb24sIEVYQ19YRkVSX1NURCkKKworCUNSSVRJQ0FMX0VYQ0VQVElPTigweDIwODAsIENyaXRpY2FsRG9vcmJlbGwsIHVua25vd25fZXhjZXB0aW9uKQogCiAJLyogRGVidWcgSW50ZXJydXB0ICovCiAJREVCVUdfREVCVUdfRVhDRVBUSU9OCi0jaWYgZGVmaW5lZChDT05GSUdfRTUwMCkgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19FNTAwTUMpCiAJREVCVUdfQ1JJVF9FWENFUFRJT04KLSNlbmRpZgogCiAvKgogICogTG9jYWwgZnVuY3Rpb25zCkBAIC04OTcsNiArODg3LDQ3IEBACiAgKiBHbG9iYWwgZnVuY3Rpb25zCiAgKi8KIAorLyogQWRqdXN0IG9yIHNldHVwIElWT1JzIGZvciBlMjAwICovCitfR0xPQkFMKF9fc2V0dXBfZTIwMF9pdm9ycykKKwlsaQlyMyxEZWJ1Z0RlYnVnQGwKKwltdHNwcglTUFJOX0lWT1IxNSxyMworCWxpCXIzLFNQRVVuYXZhaWxhYmxlQGwKKwltdHNwcglTUFJOX0lWT1IzMixyMworCWxpCXIzLFNQRUZsb2F0aW5nUG9pbnREYXRhQGwKKwltdHNwcglTUFJOX0lWT1IzMyxyMworCWxpCXIzLFNQRUZsb2F0aW5nUG9pbnRSb3VuZEBsCisJbXRzcHIJU1BSTl9JVk9SMzQscjMKKwlzeW5jCisJYmxyCisKKy8qIEFkanVzdCBvciBzZXR1cCBJVk9ScyBmb3IgZTUwMHYxL3YyICovCitfR0xPQkFMKF9fc2V0dXBfZTUwMF9pdm9ycykKKwlsaQlyMyxEZWJ1Z0NyaXRAbAorCW10c3ByCVNQUk5fSVZPUjE1LHIzCisJbGkJcjMsU1BFVW5hdmFpbGFibGVAbAorCW10c3ByCVNQUk5fSVZPUjMyLHIzCisJbGkJcjMsU1BFRmxvYXRpbmdQb2ludERhdGFAbAorCW10c3ByCVNQUk5fSVZPUjMzLHIzCisJbGkJcjMsU1BFRmxvYXRpbmdQb2ludFJvdW5kQGwKKwltdHNwcglTUFJOX0lWT1IzNCxyMworCWxpCXIzLFBlcmZvcm1hbmNlTW9uaXRvckBsCisJbXRzcHIJU1BSTl9JVk9SMzUscjMKKwlzeW5jCisJYmxyCisKKy8qIEFkanVzdCBvciBzZXR1cCBJVk9ScyBmb3IgZTUwMG1jICovCitfR0xPQkFMKF9fc2V0dXBfZTUwMG1jX2l2b3JzKQorCWxpCXIzLERlYnVnRGVidWdAbAorCW10c3ByCVNQUk5fSVZPUjE1LHIzCisJbGkJcjMsUGVyZm9ybWFuY2VNb25pdG9yQGwKKwltdHNwcglTUFJOX0lWT1IzNSxyMworCWxpCXIzLERvb3JiZWxsQGwKKwltdHNwcglTUFJOX0lWT1IzNixyMworCWxpCXIzLENyaXRpY2FsRG9vcmJlbGxAbAorCW10c3ByCVNQUk5fSVZPUjM3LHIzCisJc3luYworCWJscgorCiAvKgogICogZXh0ZXJuIHZvaWQgbG9hZGNhbV9lbnRyeSh1bnNpZ25lZCBpbnQgaW5kZXgpCiAgKgpAQCAtMTA4OSw3ICsxMTIwLDcgQEAKIAltdHNwcglTUFJOX1NQUkczLHI0CiAKIAkvKiBTZXR1cCB0aGUgZGVmYXVsdHMgZm9yIFRMQiBlbnRyaWVzICovCi0JbGkJcjQsKE1BUzRfVFNJWkVEKEJPT0tFX1BBR0VTWl80SykpQGwKKwlsaQlyNCwoTUFTNF9UU0laRUQoQk9PSzNFX1BBR0VTWl80SykpQGwKIAltdHNwcglTUFJOX01BUzQscjQKIAogCS8qIEp1bXAgdG8gc3RhcnRfc2Vjb25kYXJ5ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwppbmRleCAxYjU1ZmZkLi41NTc2MTQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogewogCWludCBpID0gKihsb2ZmX3QgKil2LCBqOwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKLQlpcnFfZGVzY190ICpkZXNjOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGkgPT0gMCkgewpAQCAtMTAzOCw3ICsxMDM4LDcgQEAKIHN0YXRpYyBpbnQgdmlycV9kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWlycV9kZXNjX3QgKmRlc2M7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWNvbnN0IGNoYXIgKnA7CiAJY2hhciBub25lW10gPSAibm9uZSI7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfNjQuYwppbmRleCA4OTkyYjAzLi44ZmJiMTI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzY0LmMKQEAgLTMyOSw3ICszMjksNyBAQAogICAgcmVzdG9yZSByMi4gKi8KIHN0YXRpYyBpbnQgcmVzdG9yZV9yMih1MzIgKmluc3RydWN0aW9uLCBzdHJ1Y3QgbW9kdWxlICptZSkKIHsKLQlpZiAoKmluc3RydWN0aW9uICE9IFBQQ19OT1BfSU5TVFIpIHsKKwlpZiAoKmluc3RydWN0aW9uICE9IFBQQ19JTlNUX05PUCkgewogCQlwcmludGsoIiVzOiBFeHBlY3Qgbm9vcCBhZnRlciByZWxvY2F0ZSwgZ290ICUwOHhcbiIsCiAJCSAgICAgICBtZS0+bmFtZSwgKmluc3RydWN0aW9uKTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCmluZGV4IDBmNDE4MTIuLjljNjllN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8YXNtL2VlaC5oPgogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGhvc2Vfc3BpbmxvY2spOworTElTVF9IRUFEKGhvc2VfbGlzdCk7CiAKIC8qIFhYWCBraWxsIHRoYXQgc29tZSBkYXkgLi4uICovCiBzdGF0aWMgaW50IGdsb2JhbF9waGJfbnVtYmVyOwkJLyogR2xvYmFsIHBoYiBjb3VudGVyICovCkBAIC00OSw3ICs1MCw3IEBACiB1bnNpZ25lZCBpbnQgcHBjX3BjaV9mbGFncyA9IDA7CiAKIAotc3RhdGljIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKnBjaV9kbWFfb3BzOworc3RhdGljIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKnBjaV9kbWFfb3BzID0gJmRtYV9kaXJlY3Rfb3BzOwogCiB2b2lkIHNldF9wY2lfZG1hX29wcyhzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzKQogewpAQCAtMTEzLDE5ICsxMTQsMjQgQEAKIAkJa2ZyZWUocGhiKTsKIH0KIAorc3RhdGljIHJlc291cmNlX3NpemVfdCBwY2liaW9zX2lvX3NpemUoY29uc3Qgc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQoreworI2lmZGVmIENPTkZJR19QUEM2NAorCXJldHVybiBob3NlLT5wY2lfaW9fc2l6ZTsKKyNlbHNlCisJcmV0dXJuIGhvc2UtPmlvX3Jlc291cmNlLmVuZCAtIGhvc2UtPmlvX3Jlc291cmNlLnN0YXJ0ICsgMTsKKyNlbmRpZgorfQorCiBpbnQgcGNpYmlvc192YWRkcl9pc19pb3BvcnQodm9pZCBfX2lvbWVtICphZGRyZXNzKQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKLQl1bnNpZ25lZCBsb25nIHNpemU7CisJcmVzb3VyY2Vfc2l6ZV90IHNpemU7CiAKIAlzcGluX2xvY2soJmhvc2Vfc3BpbmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaG9zZSwgJmhvc2VfbGlzdCwgbGlzdF9ub2RlKSB7Ci0jaWZkZWYgQ09ORklHX1BQQzY0Ci0JCXNpemUgPSBob3NlLT5wY2lfaW9fc2l6ZTsKLSNlbHNlCi0JCXNpemUgPSBob3NlLT5pb19yZXNvdXJjZS5lbmQgLSBob3NlLT5pb19yZXNvdXJjZS5zdGFydCArIDE7Ci0jZW5kaWYKKwkJc2l6ZSA9IHBjaWJpb3NfaW9fc2l6ZShob3NlKTsKIAkJaWYgKGFkZHJlc3MgPj0gaG9zZS0+aW9fYmFzZV92aXJ0ICYmCiAJCSAgICBhZGRyZXNzIDwgKGhvc2UtPmlvX2Jhc2VfdmlydCArIHNpemUpKSB7CiAJCQlyZXQgPSAxOwpAQCAtMTM2LDYgKzE0MiwyOSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3Vuc2lnbmVkIGxvbmcgcGNpX2FkZHJlc3NfdG9fcGlvKHBoeXNfYWRkcl90IGFkZHJlc3MpCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOworCXJlc291cmNlX3NpemVfdCBzaXplOworCXVuc2lnbmVkIGxvbmcgcmV0ID0gfjA7CisKKwlzcGluX2xvY2soJmhvc2Vfc3BpbmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaG9zZSwgJmhvc2VfbGlzdCwgbGlzdF9ub2RlKSB7CisJCXNpemUgPSBwY2liaW9zX2lvX3NpemUoaG9zZSk7CisJCWlmIChhZGRyZXNzID49IGhvc2UtPmlvX2Jhc2VfcGh5cyAmJgorCQkgICAgYWRkcmVzcyA8IChob3NlLT5pb19iYXNlX3BoeXMgKyBzaXplKSkgeworCQkJdW5zaWduZWQgbG9uZyBiYXNlID0KKwkJCQkodW5zaWduZWQgbG9uZylob3NlLT5pb19iYXNlX3ZpcnQgLSBfSU9fQkFTRTsKKwkJCXJldCA9IGJhc2UgKyAoYWRkcmVzcyAtIGhvc2UtPmlvX2Jhc2VfcGh5cyk7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmaG9zZV9zcGlubG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX2FkZHJlc3NfdG9fcGlvKTsKKwogLyoKICAqIFJldHVybiB0aGUgZG9tYWluIG51bWJlciBmb3IgdGhpcyBidXMuCiAgKi8KQEAgLTE0NTMsNyArMTQ4Miw3IEBACiAJICogd2UgcHJvY2VlZCB0byBhc3NpZ25pbmcgdGhpbmdzIHRoYXQgd2VyZSBsZWZ0IHVuYXNzaWduZWQKIAkgKi8KIAlpZiAoIShwcGNfcGNpX2ZsYWdzICYgUFBDX1BDSV9QUk9CRV9PTkxZKSkgewotCQlwcl9kZWJ1ZygiUENJOiBBc3NpZ25pbmcgdW5hc3NpZ25lZCByZXNvdWNlcy4uLlxuIik7CisJCXByX2RlYnVnKCJQQ0k6IEFzc2lnbmluZyB1bmFzc2lnbmVkIHJlc291cmNlcy4uLlxuIik7CiAJCXBjaV9hc3NpZ25fdW5hc3NpZ25lZF9yZXNvdXJjZXMoKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jCmluZGV4IDEzMmNkODAuLmQ0NzM2MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfMzIuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHBjLXBjaS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CkBAIC00Myw4ICs0NCw2IEBACiAgKi8KIHN0YXRpYyBpbnQgcGNpX2Fzc2lnbl9hbGxfYnVzZXM7CiAKLUxJU1RfSEVBRChob3NlX2xpc3QpOwotCiBzdGF0aWMgaW50IHBjaV9idXNfY291bnQ7CiAKIC8qIFRoaXMgd2lsbCByZW1haW4gTlVMTCBmb3Igbm93LCB1bnRpbCBpc2EtYnJpZGdlLmMgaXMgbWFkZSBjb21tb24KQEAgLTIxOSwxNiArMjE4LDIzIEBACiBzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpzY2FuX09GX2Zvcl9wY2lfZGV2KHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LAogCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGRldmZuKQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IGRldmljZV9ub2RlICpucCwgKmNucDsKIAljb25zdCB1MzIgKnJlZzsKIAl1bnNpZ25lZCBpbnQgcHNpemU7CiAKIAlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKHBhcmVudCwgbnApIHsKIAkJcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgJnBzaXplKTsKLQkJaWYgKHJlZyA9PSBOVUxMIHx8IHBzaXplIDwgNCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoKChyZWdbMF0gPj4gOCkgJiAweGZmKSA9PSBkZXZmbikKKyAgICAgICAgICAgICAgICBpZiAocmVnICYmIHBzaXplID49IDQgJiYgKChyZWdbMF0gPj4gOCkgJiAweGZmKSA9PSBkZXZmbikKIAkJCXJldHVybiBucDsKKworCQkvKiBOb3RlOiBzb21lIE9GcyBjcmVhdGUgYSBwYXJlbnQgbm9kZSAibXVsdGlmdW5jLWRldmljZSIgYXMKKwkJICogYSBmYWtlIHJvb3QgZm9yIGFsbCBmdW5jdGlvbnMgb2YgYSBtdWx0aS1mdW5jdGlvbiBkZXZpY2UsCisJCSAqIHdlIGdvIGRvd24gdGhlbSBhcyB3ZWxsLiAqLworICAgICAgICAgICAgICAgIGlmICghc3RyY21wKG5wLT5uYW1lLCAibXVsdGlmdW5jLWRldmljZSIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjbnAgPSBzY2FuX09GX2Zvcl9wY2lfZGV2KG5wLCBkZXZmbik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY25wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY25wOworICAgICAgICAgICAgICAgIH0KIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC00OTEsMjQgKzQ5Nyw2IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotdW5zaWduZWQgbG9uZyBwY2lfYWRkcmVzc190b19waW8ocGh5c19hZGRyX3QgYWRkcmVzcykKLXsKLQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsICp0bXA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaG9zZSwgdG1wLCAmaG9zZV9saXN0LCBsaXN0X25vZGUpIHsKLQkJdW5zaWduZWQgaW50IHNpemUgPSBob3NlLT5pb19yZXNvdXJjZS5lbmQgLQotCQkJaG9zZS0+aW9fcmVzb3VyY2Uuc3RhcnQgKyAxOwotCQlpZiAoYWRkcmVzcyA+PSBob3NlLT5pb19iYXNlX3BoeXMgJiYKLQkJICAgIGFkZHJlc3MgPCAoaG9zZS0+aW9fYmFzZV9waHlzICsgc2l6ZSkpIHsKLQkJCXVuc2lnbmVkIGxvbmcgYmFzZSA9Ci0JCQkJKHVuc2lnbmVkIGxvbmcpaG9zZS0+aW9fYmFzZV92aXJ0IC0gX0lPX0JBU0U7Ci0JCQlyZXR1cm4gYmFzZSArIChhZGRyZXNzIC0gaG9zZS0+aW9fYmFzZV9waHlzKTsKLQkJfQotCX0KLQlyZXR1cm4gKHVuc2lnbmVkIGludCktMTsKLX0KLUVYUE9SVF9TWU1CT0wocGNpX2FkZHJlc3NfdG9fcGlvKTsKLQogLyoKICAqIE51bGwgUENJIGNvbmZpZyBhY2Nlc3MgZnVuY3Rpb25zLCBmb3IgdGhlIGNhc2Ugd2hlbiB3ZSBjYW4ndAogICogZmluZCBhIGhvc2UuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYwppbmRleCBlYThlZGE4Li5iZTU3NGZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKQEAgLTQzLDggKzQzLDYgQEAKIHVuc2lnbmVkIGxvbmcgcGNpX2lvX2Jhc2UgPSBJU0FfSU9fQkFTRTsKIEVYUE9SVF9TWU1CT0wocGNpX2lvX2Jhc2UpOwogCi1MSVNUX0hFQUQoaG9zZV9saXN0KTsKLQogc3RhdGljIHZvaWQgZml4dXBfYnJva2VuX3BjbmV0MzIoc3RydWN0IHBjaV9kZXYqIGRldikKIHsKIAlpZiAoKGRldi0+Y2xhc3M+PjggPT0gUENJX0NMQVNTX05FVFdPUktfRVRIRVJORVQpKSB7CkBAIC01MjQsMjMgKzUyMiw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwY2liaW9zX21hcF9pb19zcGFjZSk7CiAKLXVuc2lnbmVkIGxvbmcgcGNpX2FkZHJlc3NfdG9fcGlvKHBoeXNfYWRkcl90IGFkZHJlc3MpCi17Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCAqdG1wOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhvc2UsIHRtcCwgJmhvc2VfbGlzdCwgbGlzdF9ub2RlKSB7Ci0JCWlmIChhZGRyZXNzID49IGhvc2UtPmlvX2Jhc2VfcGh5cyAmJgotCQkgICAgYWRkcmVzcyA8IChob3NlLT5pb19iYXNlX3BoeXMgKyBob3NlLT5wY2lfaW9fc2l6ZSkpIHsKLQkJCXVuc2lnbmVkIGxvbmcgYmFzZSA9Ci0JCQkJKHVuc2lnbmVkIGxvbmcpaG9zZS0+aW9fYmFzZV92aXJ0IC0gX0lPX0JBU0U7Ci0JCQlyZXR1cm4gYmFzZSArIChhZGRyZXNzIC0gaG9zZS0+aW9fYmFzZV9waHlzKTsKLQkJfQotCX0KLQlyZXR1cm4gKHVuc2lnbmVkIGludCktMTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHBjaV9hZGRyZXNzX3RvX3Bpbyk7Ci0KLQogI2RlZmluZSBJT0JBU0VfQlJJREdFX05VTUJFUgkwCiAjZGVmaW5lIElPQkFTRV9NRU1PUlkJCTEKICNkZWZpbmUgSU9CQVNFX0lPCQkyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGZiNzA0OWMuLmVhYzA2NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zMyw3ICszMywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L21xdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTAwOCw2ICsxMDExLDE0IEBACiAJdW5zaWduZWQgbG9uZyBzcCwgaXAsIGxyLCBuZXdzcDsKIAlpbnQgY291bnQgPSAwOwogCWludCBmaXJzdGZyYW1lID0gMTsKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJaW50IGN1cnJfZnJhbWUgPSBjdXJyZW50LT5jdXJyX3JldF9zdGFjazsKKwlleHRlcm4gdm9pZCByZXR1cm5fdG9faGFuZGxlcih2b2lkKTsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylyZXR1cm5fdG9faGFuZGxlcjsKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwlhZGRyID0gKih1bnNpZ25lZCBsb25nKilhZGRyOworI2VuZGlmCisjZW5kaWYKIAogCXNwID0gKHVuc2lnbmVkIGxvbmcpIHN0YWNrOwogCWlmICh0c2sgPT0gTlVMTCkKQEAgLTEwMzAsNiArMTA0MSwxMyBAQAogCQlpcCA9IHN0YWNrW1NUQUNLX0ZSQU1FX0xSX1NBVkVdOwogCQlpZiAoIWZpcnN0ZnJhbWUgfHwgaXAgIT0gbHIpIHsKIAkJCXByaW50aygiWyJSRUciXSBbIlJFRyJdICVwUyIsIHNwLCBpcCwgKHZvaWQgKilpcCk7CisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorCQkJaWYgKGlwID09IGFkZHIgJiYgY3Vycl9mcmFtZSA+PSAwKSB7CisJCQkJcHJpbnRrKCIgKCVwUykiLAorCQkJCSAgICAgICAodm9pZCAqKWN1cnJlbnQtPnJldF9zdGFja1tjdXJyX2ZyYW1lXS5yZXQpOworCQkJCWN1cnJfZnJhbWUtLTsKKwkJCX0KKyNlbmRpZgogCQkJaWYgKGZpcnN0ZnJhbWUpCiAJCQkJcHJpbnRrKCIgKHVucmVsaWFibGUpIik7CiAJCQlwcmludGsoIlxuIik7CkBAIC0xMTIyLDMgKzExNDAsNDMgQEAKIH0KIAogI2VuZGlmIC8qIFRIUkVBRF9TSElGVCA8IFBBR0VfU0hJRlQgKi8KKwordW5zaWduZWQgbG9uZyBhcmNoX2FsaWduX3N0YWNrKHVuc2lnbmVkIGxvbmcgc3ApCit7CisJaWYgKCEoY3VycmVudC0+cGVyc29uYWxpdHkgJiBBRERSX05PX1JBTkRPTUlaRSkgJiYgcmFuZG9taXplX3ZhX3NwYWNlKQorCQlzcCAtPSBnZXRfcmFuZG9tX2ludCgpICYgflBBR0VfTUFTSzsKKwlyZXR1cm4gc3AgJiB+MHhmOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYnJrX3JuZCh2b2lkKQoreworICAgICAgICB1bnNpZ25lZCBsb25nIHJuZCA9IDA7CisKKwkvKiA4TUIgZm9yIDMyYml0LCAxR0IgZm9yIDY0Yml0ICovCisJaWYgKGlzXzMyYml0X3Rhc2soKSkKKwkJcm5kID0gKGxvbmcpKGdldF9yYW5kb21faW50KCkgJSAoMTw8KDIzLVBBR0VfU0hJRlQpKSk7CisJZWxzZQorCQlybmQgPSAobG9uZykoZ2V0X3JhbmRvbV9pbnQoKSAlICgxPDwoMzAtUEFHRV9TSElGVCkpKTsKKworCXJldHVybiBybmQgPDwgUEFHRV9TSElGVDsKK30KKwordW5zaWduZWQgbG9uZyBhcmNoX3JhbmRvbWl6ZV9icmsoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJdW5zaWduZWQgbG9uZyByZXQgPSBQQUdFX0FMSUdOKG1tLT5icmsgKyBicmtfcm5kKCkpOworCisJaWYgKHJldCA8IG1tLT5icmspCisJCXJldHVybiBtbS0+YnJrOworCisJcmV0dXJuIHJldDsKK30KKwordW5zaWduZWQgbG9uZyByYW5kb21pemVfZXRfZHluKHVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwl1bnNpZ25lZCBsb25nIHJldCA9IFBBR0VfQUxJR04oYmFzZSArIGJya19ybmQoKSk7CisKKwlpZiAocmV0IDwgYmFzZSkKKwkJcmV0dXJuIGJhc2U7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwppbmRleCBmMDBmODMxLi41ZWM2YTllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwpAQCAtMTA3NSwxMSArMTA3NSw2IEBACiAJCURCRygicmVzZXJ2aW5nOiAlbGx4IC0+ICVsbHhcbiIsIGJhc2UsIHNpemUpOwogCQlsbWJfcmVzZXJ2ZShiYXNlLCBzaXplKTsKIAl9Ci0KLSNpZiAwCi0JREJHKCJtZW1vcnkgcmVzZXJ2ZWQsIGxtYnMgOlxuIik7Ci0gICAgICAJbG1iX2R1bXBfYWxsKCk7Ci0jZW5kaWYKIH0KIAogI2lmZGVmIENPTkZJR19QSFlQX0RVTVAKQEAgLTEyMjEsNiArMTIxNiw3IEBACiAJbG1iX2VuZm9yY2VfbWVtb3J5X2xpbWl0KGxpbWl0KTsKIAogCWxtYl9hbmFseXplKCk7CisJbG1iX2R1bXBfYWxsKCk7CiAKIAlEQkcoIlBoeXMuIG1lbTogJWx4XG4iLCBsbWJfcGh5c19tZW1fc2l6ZSgpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKaW5kZXggN2YxYjMzZC4uMmUwMjZjMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCkBAIC0yMjgzLDYgKzIyODMsOCBAQAogCSAqLwogCXByb21faW5pdF9zdGRvdXQoKTsKIAorCXByb21fcHJpbnRmKCJQcmVwYXJpbmcgdG8gYm9vdCAlcyIsIFJFTE9DKGxpbnV4X2Jhbm5lcikpOworCiAJLyoKIAkgKiBHZXQgZGVmYXVsdCBtYWNoaW5lIHR5cGUuIEF0IHRoaXMgcG9pbnQsIHdlIGRvIG5vdCBkaWZmZXJlbnRpYXRlCiAJICogYmV0d2VlbiBwU2VyaWVzIFNNUCBhbmQgcFNlcmllcyBMUEFSCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdF9jaGVjay5zaCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0X2NoZWNrLnNoCmluZGV4IGVhM2EyZWMuLjFhYzEzNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0X2NoZWNrLnNoCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0X2NoZWNrLnNoCkBAIC0yMCw3ICsyMCw3IEBACiBfZW5kIGVudGVyX3Byb20gbWVtY3B5IG1lbXNldCByZWxvY19vZmZzZXQgX19zZWNvbmRhcnlfaG9sZAogX19zZWNvbmRhcnlfaG9sZF9hY2tub3dsZWRnZSBfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wIF9fc3RhcnQKIHN0cmNtcCBzdHJjcHkgc3RybGNweSBzdHJsZW4gc3RybmNtcCBzdHJzdHIgbG9nb19saW51eF9jbHV0MjI0Ci1yZWxvY19nb3QyIGtlcm5zdGFydF9hZGRyIG1lbXN0YXJ0X2FkZHIiCityZWxvY19nb3QyIGtlcm5zdGFydF9hZGRyIG1lbXN0YXJ0X2FkZHIgbGludXhfYmFubmVyIgogCiBOTT0iJDEiCiBPQko9IiQyIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYwppbmRleCBmZGZlMTRjLi5lZTRjNzYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYwpAQCAtNDYsNiArNDYsNyBAQAogCiBzdHJ1Y3QgcnRhc19zdXNwZW5kX21lX2RhdGEgewogCWF0b21pY190IHdvcmtpbmc7IC8qIG51bWJlciBvZiBjcHVzIGFjY2Vzc2luZyB0aGlzIHN0cnVjdCAqLworCWF0b21pY190IGRvbmU7CiAJaW50IHRva2VuOyAvKiBpYm0sc3VzcGVuZC1tZSAqLwogCWludCBlcnJvcjsKIAlzdHJ1Y3QgY29tcGxldGlvbiAqY29tcGxldGU7IC8qIHdhaXQgb24gdGhpcyB1bnRpbCB3b3JraW5nID09IDAgKi8KQEAgLTY4OSw3ICs2OTAsNyBAQAogI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwogc3RhdGljIHZvaWQgcnRhc19wZXJjcHVfc3VzcGVuZF9tZSh2b2lkICppbmZvKQogewotCWxvbmcgcmM7CisJbG9uZyByYyA9IEhfU1VDQ0VTUzsKIAl1bnNpZ25lZCBsb25nIG1zcl9zYXZlOwogCWludCBjcHU7CiAJc3RydWN0IHJ0YXNfc3VzcGVuZF9tZV9kYXRhICpkYXRhID0KQEAgLTcwMSw3ICs3MDIsOCBAQAogCW1zcl9zYXZlID0gbWZtc3IoKTsKIAltdG1zcihtc3Jfc2F2ZSAmIH4oTVNSX0VFKSk7CiAKLQlyYyA9IHBscGFyX2hjYWxsX25vcmV0cyhIX0pPSU4pOworCXdoaWxlIChyYyA9PSBIX1NVQ0NFU1MgJiYgIWF0b21pY19yZWFkKCZkYXRhLT5kb25lKSkKKwkJcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9KT0lOKTsKIAogCW10bXNyKG1zcl9zYXZlKTsKIApAQCAtNzI0LDYgKzcyNiw5IEBACiAJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIHJjKTsKIAkJZGF0YS0+ZXJyb3IgPSByYzsKIAl9CisKKwlhdG9taWNfc2V0KCZkYXRhLT5kb25lLCAxKTsKKwogCS8qIFRoaXMgY3B1IGRpZCB0aGUgc3VzcGVuZCBvciBnb3QgYW4gZXJyb3I7IGluIGVpdGhlciBjYXNlLAogCSAqIHdlIG5lZWQgdG8gcHJvZCBhbGwgb3RoZXIgb3RoZXIgY3B1cyBvdXQgb2Ygam9pbiBzdGF0ZS4KIAkgKiBFeHRyYSBwcm9kcyBhcmUgaGFybWxlc3MuCkBAIC03NjYsNiArNzcxLDcgQEAKIAl9CiAKIAlhdG9taWNfc2V0KCZkYXRhLndvcmtpbmcsIDApOworCWF0b21pY19zZXQoJmRhdGEuZG9uZSwgMCk7CiAJZGF0YS50b2tlbiA9IHJ0YXNfdG9rZW4oImlibSxzdXNwZW5kLW1lIik7CiAJZGF0YS5lcnJvciA9IDA7CiAJZGF0YS5jb21wbGV0ZSA9ICZkb25lOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzX2ZsYXNoLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfZmxhc2guYwppbmRleCAxNDljYjExLi4xMzAxMWE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfZmxhc2guYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfZmxhc2guYwpAQCAtNjY5LDcgKzY2OSw2IEBACiB7CiAJaWYgKGRwKSB7CiAJCWtmcmVlKGRwLT5kYXRhKTsKLQkJZHAtPm93bmVyID0gTlVMTDsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoZHAtPm5hbWUsIGRwLT5wYXJlbnQpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCmluZGV4IDcwNWZjNGIuLjk3NzRmOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwpAQCAtMzUsNiArMzUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpAQCAtNjY5LDMgKzY3MSwzNyBAQAogfQogYXJjaF9pbml0Y2FsbChwb3dlcnBjX2RlYnVnZnNfaW5pdCk7CiAjZW5kaWYKKworc3RhdGljIGludCBwcGNfZGZsdF9idXNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YTsKKworCS8qIFdlIGFyZSBvbmx5IGludGVyZXRlZCBpbiBkZXZpY2UgYWRkaXRpb24gKi8KKwlpZiAoYWN0aW9uICE9IEJVU19OT1RJRllfQUREX0RFVklDRSkKKwkJcmV0dXJuIDA7CisKKwlzZXRfZG1hX29wcyhkZXYsICZkbWFfZGlyZWN0X29wcyk7CisKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcHBjX2RmbHRfcGxhdF9idXNfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBwcGNfZGZsdF9idXNfbm90aWZ5LAorCS5wcmlvcml0eSA9IElOVF9NQVgsCit9OworCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBwY19kZmx0X29mX2J1c19ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHBwY19kZmx0X2J1c19ub3RpZnksCisJLnByaW9yaXR5ID0gSU5UX01BWCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2J1c19ub3RpZmllcih2b2lkKQoreworCWJ1c19yZWdpc3Rlcl9ub3RpZmllcigmcGxhdGZvcm1fYnVzX3R5cGUsICZwcGNfZGZsdF9wbGF0X2J1c19ub3RpZmllcik7CisJYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZvZl9wbGF0Zm9ybV9idXNfdHlwZSwgJnBwY19kZmx0X29mX2J1c19ub3RpZmllcik7CisKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChzZXR1cF9idXNfbm90aWZpZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCmluZGV4IDJkMzQxOTYuLmM0MTBjNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKQEAgLTIwMiw4ICsyMDIsNiBAQAogCiAJLyogRml4IHVwIHBhY2EgZmllbGRzIHJlcXVpcmVkIGZvciB0aGUgYm9vdCBjcHUgKi8KIAlnZXRfcGFjYSgpLT5jcHVfc3RhcnQgPSAxOwotCWdldF9wYWNhKCktPnN0YWJfcmVhbCA9IF9fcGEoKHU2NCkmaW5pdGlhbF9zdGFiKTsKLQlnZXRfcGFjYSgpLT5zdGFiX2FkZHIgPSAodTY0KSZpbml0aWFsX3N0YWI7CiAKIAkvKiBQcm9iZSB0aGUgbWFjaGluZSB0eXBlICovCiAJcHJvYmVfbWFjaGluZSgpOwpAQCAtMjEyLDIwICsyMTAsOCBAQAogCiAJREJHKCJGb3VuZCwgSW5pdGlhbGl6aW5nIG1lbW9yeSBtYW5hZ2VtZW50Li4uXG4iKTsKIAotCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgTU1VIEhhc2ggdGFibGUgYW5kIGNyZWF0ZSB0aGUgbGluZWFyIG1hcHBpbmcKLQkgKiBvZiBtZW1vcnkuIEhhcyB0byBiZSBkb25lIGJlZm9yZSBzdGFiL3NsYiBpbml0aWFsaXphdGlvbiBhcwotCSAqIHRoaXMgaXMgY3VycmVudGx5IHdoZXJlIHRoZSBwYWdlIHNpemUgZW5jb2RpbmcgaXMgb2J0YWluZWQKLQkgKi8KLQlodGFiX2luaXRpYWxpemUoKTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSBzdGFiIC8gU0xCIG1hbmFnZW1lbnQgZXhjZXB0IG9uIGlTZXJpZXMKLQkgKi8KLQlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU0xCKSkKLQkJc2xiX2luaXRpYWxpemUoKTsKLQllbHNlIGlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkKLQkJc3RhYl9pbml0aWFsaXplKGdldF9wYWNhKCktPnN0YWJfcmVhbCk7CisJLyogSW5pdGlhbGl6ZSB0aGUgaGFzaCB0YWJsZSBvciBUTEIgaGFuZGxpbmcgKi8KKwllYXJseV9pbml0X21tdSgpOwogCiAJREJHKCIgPC0gZWFybHlfc2V0dXAoKVxuIik7CiB9CkBAIC0yMzMsMjIgKzIxOSwxMSBAQAogI2lmZGVmIENPTkZJR19TTVAKIHZvaWQgZWFybHlfc2V0dXBfc2Vjb25kYXJ5KHZvaWQpCiB7Ci0Jc3RydWN0IHBhY2Ffc3RydWN0ICpscGFjYSA9IGdldF9wYWNhKCk7Ci0KIAkvKiBNYXJrIGludGVycnVwdHMgZW5hYmxlZCBpbiBQQUNBICovCi0JbHBhY2EtPnNvZnRfZW5hYmxlZCA9IDA7CisJZ2V0X3BhY2EoKS0+c29mdF9lbmFibGVkID0gMDsKIAotCS8qIEluaXRpYWxpemUgaGFzaCB0YWJsZSBmb3IgdGhhdCBDUFUgKi8KLQlodGFiX2luaXRpYWxpemVfc2Vjb25kYXJ5KCk7Ci0KLQkvKiBJbml0aWFsaXplIFNUQUIvU0xCLiBXZSB1c2UgYSB2aXJ0dWFsIGFkZHJlc3MgYXMgaXQgd29ya3MKLQkgKiBpbiByZWFsIG1vZGUgb24gcFNlcmllcyBhbmQgd2Ugd2FudCBhIHZpcnV0YWwgYWRkcmVzcyBvbgotCSAqIGlTZXJpZXMgYW55d2F5Ci0JICovCi0JaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NMQikpCi0JCXNsYl9pbml0aWFsaXplKCk7Ci0JZWxzZQotCQlzdGFiX2luaXRpYWxpemUobHBhY2EtPnN0YWJfYWRkcik7CisJLyogSW5pdGlhbGl6ZSB0aGUgaGFzaCB0YWJsZSBvciBUTEIgaGFuZGxpbmcgKi8KKwllYXJseV9pbml0X21tdV9zZWNvbmRhcnkoKTsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KQEAgLTU3OCwxMyArNTUzLDYgQEAKIAlwcmludGsoIltib290XSUwNHggJXNcbiIsIHNyYywgbXNnKTsKIH0KIAotLyogUHJpbnQgYSB0ZXJtaW5hdGlvbiBtZXNzYWdlIChwcmludCBvbmx5IC0tIGRvZXMgbm90IHN0b3AgdGhlIGtlcm5lbCkgKi8KLXZvaWQgcHBjNjRfdGVybWluYXRlX21zZyh1bnNpZ25lZCBpbnQgc3JjLCBjb25zdCBjaGFyICptc2cpCi17Ci0JcHBjNjRfZG9fbXNnKFBQQzY0X0xJTlVYX0ZVTkNUSU9OfFBQQzY0X1RFUk1fTUVTU0FHRXxzcmMsIG1zZyk7Ci0JcHJpbnRrKCJbdGVybWluYXRlXSUwNHggJXNcbiIsIHNyYywgbXNnKTsKLX0KLQogdm9pZCBjcHVfZGllKHZvaWQpCiB7CiAJaWYgKHBwY19tZC5jcHVfZGllKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmMKaW5kZXggYTU0NDA1ZS4uMDBiNTA3OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbC5jCkBAIC0yNiwxMiArMjYsMTIgQEAKICAqIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgc2lnbmFsIGZyYW1lCiAgKi8KIHZvaWQgX191c2VyICogZ2V0X3NpZ2ZyYW1lKHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJICAgc2l6ZV90IGZyYW1lX3NpemUpCisJCQkgICBzaXplX3QgZnJhbWVfc2l6ZSwgaW50IGlzXzMyKQogewogICAgICAgICB1bnNpZ25lZCBsb25nIG9sZHNwLCBuZXdzcDsKIAogICAgICAgICAvKiBEZWZhdWx0IHRvIHVzaW5nIG5vcm1hbCBzdGFjayAqLwotICAgICAgICBvbGRzcCA9IHJlZ3MtPmdwclsxXTsKKyAgICAgICAgb2xkc3AgPSBnZXRfY2xlYW5fc3AocmVncywgaXNfMzIpOwogCiAJLyogQ2hlY2sgZm9yIGFsdCBzdGFjayAqLwogCWlmICgoa2EtPnNhLnNhX2ZsYWdzICYgU0FfT05TVEFDSykgJiYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmggYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbC5oCmluZGV4IGI0MjdiZjguLjZjMGRkZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuaApAQCAtMTUsNyArMTUsNyBAQAogZXh0ZXJuIHZvaWQgZG9fc2lnbmFsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIHRocmVhZF9pbmZvX2ZsYWdzKTsKIAogZXh0ZXJuIHZvaWQgX191c2VyICogZ2V0X3NpZ2ZyYW1lKHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJCSAgc2l6ZV90IGZyYW1lX3NpemUpOworCQkJCSAgc2l6ZV90IGZyYW1lX3NpemUsIGludCBpc18zMik7CiBleHRlcm4gdm9pZCByZXN0b3JlX3NpZ21hc2soc2lnc2V0X3QgKnNldCk7CiAKIGV4dGVybiBpbnQgaGFuZGxlX3NpZ25hbDMyKHVuc2lnbmVkIGxvbmcgc2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLApAQCAtMzksMjIgKzM5LDEyIEBACiAKICNpZmRlZiBDT05GSUdfUFBDNjQKIAotc3RhdGljIGlubGluZSBpbnQgaXNfMzJiaXRfdGFzayh2b2lkKQotewotCXJldHVybiB0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCk7Ci19Ci0KIGV4dGVybiBpbnQgaGFuZGxlX3J0X3NpZ25hbDY0KGludCBzaWduciwgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKIAkJCSAgICAgIHNpZ2luZm9fdCAqaW5mbywgc2lnc2V0X3QgKnNldCwKIAkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAogI2Vsc2UgLyogQ09ORklHX1BQQzY0ICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzXzMyYml0X3Rhc2sodm9pZCkKLXsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgaGFuZGxlX3J0X3NpZ25hbDY0KGludCBzaWduciwgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKIAkJCQkgICAgIHNpZ2luZm9fdCAqaW5mbywgc2lnc2V0X3QgKnNldCwKIAkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKaW5kZXggYjEzYWJmMy4uZDY3MDQyOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCkBAIC04MzYsNyArODM2LDcgQEAKIAogCS8qIFNldCB1cCBTaWduYWwgRnJhbWUgKi8KIAkvKiBQdXQgYSBSZWFsIFRpbWUgQ29udGV4dCBvbnRvIHN0YWNrICovCi0JcnRfc2YgPSBnZXRfc2lnZnJhbWUoa2EsIHJlZ3MsIHNpemVvZigqcnRfc2YpKTsKKwlydF9zZiA9IGdldF9zaWdmcmFtZShrYSwgcmVncywgc2l6ZW9mKCpydF9zZiksIDEpOwogCWFkZHIgPSBydF9zZjsKIAlpZiAodW5saWtlbHkocnRfc2YgPT0gTlVMTCkpCiAJCWdvdG8gYmFkZnJhbWU7CkBAIC0xMTgyLDcgKzExODIsNyBAQAogCXVuc2lnbmVkIGxvbmcgbmV3c3AgPSAwOwogCiAJLyogU2V0IHVwIFNpZ25hbCBGcmFtZSAqLwotCWZyYW1lID0gZ2V0X3NpZ2ZyYW1lKGthLCByZWdzLCBzaXplb2YoKmZyYW1lKSk7CisJZnJhbWUgPSBnZXRfc2lnZnJhbWUoa2EsIHJlZ3MsIHNpemVvZigqZnJhbWUpLCAxKTsKIAlpZiAodW5saWtlbHkoZnJhbWUgPT0gTlVMTCkpCiAJCWdvdG8gYmFkZnJhbWU7CiAJc2MgPSAoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICopICZmcmFtZS0+c2N0eDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jCmluZGV4IGUxMzI4OTEuLjJmZTZmYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfNjQuYwpAQCAtNDAyLDcgKzQwMiw3IEBACiAJdW5zaWduZWQgbG9uZyBuZXdzcCA9IDA7CiAJbG9uZyBlcnIgPSAwOwogCi0JZnJhbWUgPSBnZXRfc2lnZnJhbWUoa2EsIHJlZ3MsIHNpemVvZigqZnJhbWUpKTsKKwlmcmFtZSA9IGdldF9zaWdmcmFtZShrYSwgcmVncywgc2l6ZW9mKCpmcmFtZSksIDApOwogCWlmICh1bmxpa2VseShmcmFtZSA9PSBOVUxMKSkKIAkJZ290byBiYWRmcmFtZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCmluZGV4IDRhMmVlMDguLmY0MWFlYzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKQEAgLTEzNCw0NCArMTM0LDIzIEBACiB9CiBFWFBPUlRfU1lNQk9MKHBwY19lbmFibGVfcG1jcyk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR182eHgpIHx8IGRlZmluZWQoQ09ORklHX1BQQzY0KQotLyogWFhYIGNvbnZlcnQgdG8gcnVzdHkncyBvbl9vbmVfY3B1ICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBydW5fb25fY3B1KHVuc2lnbmVkIGxvbmcgY3B1LAotCQkJICAgICAgICB1bnNpZ25lZCBsb25nICgqZnVuYykodW5zaWduZWQgbG9uZyksCi0JCQkJdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JY3B1bWFza190IG9sZF9hZmZpbml0eSA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKLQl1bnNpZ25lZCBsb25nIHJldDsKLQotCS8qIHNob3VsZCByZXR1cm4gLUVJTlZBTCB0byB1c2Vyc3BhY2UgKi8KLQlpZiAoc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShjcHUpKSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXQgPSBmdW5jKGFyZyk7Ci0KLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIG9sZF9hZmZpbml0eSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotI2VuZGlmCi0KICNkZWZpbmUgU1lTRlNfUE1DU0VUVVAoTkFNRSwgQUREUkVTUykgXAotc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVhZF8jI05BTUUodW5zaWduZWQgbG9uZyBqdW5rKSBcCitzdGF0aWMgdm9pZCByZWFkXyMjTkFNRSh2b2lkICp2YWwpIFwKIHsgXAotCXJldHVybiBtZnNwcihBRERSRVNTKTsgXAorCSoodW5zaWduZWQgbG9uZyAqKXZhbCA9IG1mc3ByKEFERFJFU1MpOwlcCiB9IFwKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHdyaXRlXyMjTkFNRSh1bnNpZ25lZCBsb25nIHZhbCkgXAorc3RhdGljIHZvaWQgd3JpdGVfIyNOQU1FKHZvaWQgKnZhbCkgXAogeyBcCiAJcHBjX2VuYWJsZV9wbWNzKCk7IFwKLQltdHNwcihBRERSRVNTLCB2YWwpOyBcCi0JcmV0dXJuIDA7IFwKKwltdHNwcihBRERSRVNTLCAqKHVuc2lnbmVkIGxvbmcgKil2YWwpOwlcCiB9IFwKIHN0YXRpYyBzc2l6ZV90IHNob3dfIyNOQU1FKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIFwKIAkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBcCiAJCQljaGFyICpidWYpIFwKIHsgXAogCXN0cnVjdCBjcHUgKmNwdSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBjcHUsIHN5c2Rldik7IFwKLQl1bnNpZ25lZCBsb25nIHZhbCA9IHJ1bl9vbl9jcHUoY3B1LT5zeXNkZXYuaWQsIHJlYWRfIyNOQU1FLCAwKTsgXAorCXVuc2lnbmVkIGxvbmcgdmFsOyBcCisJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdS0+c3lzZGV2LmlkLCByZWFkXyMjTkFNRSwgJnZhbCwgMSk7CVwKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlbHhcbiIsIHZhbCk7IFwKIH0gXAogc3RhdGljIHNzaXplX3QgX191c2VkIFwKQEAgLTE4Myw3ICsxNjIsNyBAQAogCWludCByZXQgPSBzc2NhbmYoYnVmLCAiJWx4IiwgJnZhbCk7IFwKIAlpZiAocmV0ICE9IDEpIFwKIAkJcmV0dXJuIC1FSU5WQUw7IFwKLQlydW5fb25fY3B1KGNwdS0+c3lzZGV2LmlkLCB3cml0ZV8jI05BTUUsIHZhbCk7IFwKKwlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LT5zeXNkZXYuaWQsIHdyaXRlXyMjTkFNRSwgJnZhbCwgMSk7IFwKIAlyZXR1cm4gY291bnQ7IFwKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCmluZGV4IDU0NTdlOTUuLjY3OGZiZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKQEAgLTUyLDYgKzUyLDEwIEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2VuZGlmCiAjaW5jbHVkZSA8YXNtL2tleGVjLmg+CisjaW5jbHVkZSA8YXNtL3BwYy1vcGNvZGUuaD4KKyNpZmRlZiBDT05GSUdfRlNMX0JPT0tFCisjaW5jbHVkZSA8YXNtL2RiZWxsLmg+CisjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHR0VSKSB8fCBkZWZpbmVkKENPTkZJR19LRVhFQykKIGludCAoKl9fZGVidWdnZXIpKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKQEAgLTYzNywyOSArNjQxLDYgQEAKICAqIGJpdHMgaXMgZmFzdGVyIGFuZCBlYXNpZXIuCiAgKgogICovCi0jZGVmaW5lIElOU1RfTUZTUFJfUFZSCQkweDdjMWY0MmE2Ci0jZGVmaW5lIElOU1RfTUZTUFJfUFZSX01BU0sJMHhmYzFmZmZmZgotCi0jZGVmaW5lIElOU1RfRENCQQkJMHg3YzAwMDVlYwotI2RlZmluZSBJTlNUX0RDQkFfTUFTSwkJMHhmYzAwMDdmZQotCi0jZGVmaW5lIElOU1RfTUNSWFIJCTB4N2MwMDA0MDAKLSNkZWZpbmUgSU5TVF9NQ1JYUl9NQVNLCQkweGZjMDAwN2ZlCi0KLSNkZWZpbmUgSU5TVF9TVFJJTkcJCTB4N2MwMDA0MmEKLSNkZWZpbmUgSU5TVF9TVFJJTkdfTUFTSwkweGZjMDAwN2ZlCi0jZGVmaW5lIElOU1RfU1RSSU5HX0dFTl9NQVNLCTB4ZmMwMDA2N2UKLSNkZWZpbmUgSU5TVF9MU1dJCQkweDdjMDAwNGFhCi0jZGVmaW5lIElOU1RfTFNXWAkJMHg3YzAwMDQyYQotI2RlZmluZSBJTlNUX1NUU1dJCQkweDdjMDAwNWFhCi0jZGVmaW5lIElOU1RfU1RTV1gJCTB4N2MwMDA1MmEKLQotI2RlZmluZSBJTlNUX1BPUENOVEIJCTB4N2MwMDAwZjQKLSNkZWZpbmUgSU5TVF9QT1BDTlRCX01BU0sJMHhmYzAwMDdmZQotCi0jZGVmaW5lIElOU1RfSVNFTAkJMHg3YzAwMDAxZQotI2RlZmluZSBJTlNUX0lTRUxfTUFTSwkJMHhmYzAwMDAzZQotCiBzdGF0aWMgaW50IGVtdWxhdGVfc3RyaW5nX2luc3Qoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHUzMiBpbnN0d29yZCkKIHsKIAl1OCByVCA9IChpbnN0d29yZCA+PiAyMSkgJiAweDFmOwpAQCAtNjcwLDIwICs2NTEsMjAgQEAKIAlpbnQgcG9zID0gMDsKIAogCS8qIEVhcmx5IG91dCBpZiB3ZSBhcmUgYW4gaW52YWxpZCBmb3JtIG9mIGxzd3ggKi8KLQlpZiAoKGluc3R3b3JkICYgSU5TVF9TVFJJTkdfTUFTSykgPT0gSU5TVF9MU1dYKQorCWlmICgoaW5zdHdvcmQgJiBQUENfSU5TVF9TVFJJTkdfTUFTSykgPT0gUFBDX0lOU1RfTFNXWCkKIAkJaWYgKChyVCA9PSByQSkgfHwgKHJUID09IE5CX1JCKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJRUEgPSAockEgPT0gMCkgPyAwIDogcmVncy0+Z3ByW3JBXTsKIAotCXN3aXRjaCAoaW5zdHdvcmQgJiBJTlNUX1NUUklOR19NQVNLKSB7Ci0JCWNhc2UgSU5TVF9MU1dYOgotCQljYXNlIElOU1RfU1RTV1g6CisJc3dpdGNoIChpbnN0d29yZCAmIFBQQ19JTlNUX1NUUklOR19NQVNLKSB7CisJCWNhc2UgUFBDX0lOU1RfTFNXWDoKKwkJY2FzZSBQUENfSU5TVF9TVFNXWDoKIAkJCUVBICs9IE5CX1JCOwogCQkJbnVtX2J5dGVzID0gcmVncy0+eGVyICYgMHg3ZjsKIAkJCWJyZWFrOwotCQljYXNlIElOU1RfTFNXSToKLQkJY2FzZSBJTlNUX1NUU1dJOgorCQljYXNlIFBQQ19JTlNUX0xTV0k6CisJCWNhc2UgUFBDX0lOU1RfU1RTV0k6CiAJCQludW1fYnl0ZXMgPSAoTkJfUkIgPT0gMCkgPyAzMiA6IE5CX1JCOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC02OTUsOSArNjc2LDkgQEAKIAkJdTggdmFsOwogCQl1MzIgc2hpZnQgPSA4ICogKDMgLSAocG9zICYgMHgzKSk7CiAKLQkJc3dpdGNoICgoaW5zdHdvcmQgJiBJTlNUX1NUUklOR19NQVNLKSkgewotCQkJY2FzZSBJTlNUX0xTV1g6Ci0JCQljYXNlIElOU1RfTFNXSToKKwkJc3dpdGNoICgoaW5zdHdvcmQgJiBQUENfSU5TVF9TVFJJTkdfTUFTSykpIHsKKwkJCWNhc2UgUFBDX0lOU1RfTFNXWDoKKwkJCWNhc2UgUFBDX0lOU1RfTFNXSToKIAkJCQlpZiAoZ2V0X3VzZXIodmFsLCAodTggX191c2VyICopRUEpKQogCQkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCQkvKiBmaXJzdCB0aW1lIHVwZGF0aW5nIHRoaXMgcmVnLApAQCAtNzA2LDggKzY4Nyw4IEBACiAJCQkJCXJlZ3MtPmdwcltyVF0gPSAwOwogCQkJCXJlZ3MtPmdwcltyVF0gfD0gdmFsIDw8IHNoaWZ0OwogCQkJCWJyZWFrOwotCQkJY2FzZSBJTlNUX1NUU1dJOgotCQkJY2FzZSBJTlNUX1NUU1dYOgorCQkJY2FzZSBQUENfSU5TVF9TVFNXSToKKwkJCWNhc2UgUFBDX0lOU1RfU1RTV1g6CiAJCQkJdmFsID0gcmVncy0+Z3ByW3JUXSA+PiBzaGlmdDsKIAkJCQlpZiAocHV0X3VzZXIodmFsLCAodTggX191c2VyICopRUEpKQogCQkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTc3NSwxOCArNzU2LDE4IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJLyogRW11bGF0ZSB0aGUgbWZzcHIgckQsIFBWUi4gKi8KLQlpZiAoKGluc3R3b3JkICYgSU5TVF9NRlNQUl9QVlJfTUFTSykgPT0gSU5TVF9NRlNQUl9QVlIpIHsKKwlpZiAoKGluc3R3b3JkICYgUFBDX0lOU1RfTUZTUFJfUFZSX01BU0spID09IFBQQ19JTlNUX01GU1BSX1BWUikgewogCQlyZCA9IChpbnN0d29yZCA+PiAyMSkgJiAweDFmOwogCQlyZWdzLT5ncHJbcmRdID0gbWZzcHIoU1BSTl9QVlIpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBFbXVsYXRpbmcgdGhlIGRjYmEgaW5zbiBpcyBqdXN0IGEgbm8tb3AuICAqLwotCWlmICgoaW5zdHdvcmQgJiBJTlNUX0RDQkFfTUFTSykgPT0gSU5TVF9EQ0JBKQorCWlmICgoaW5zdHdvcmQgJiBQUENfSU5TVF9EQ0JBX01BU0spID09IFBQQ19JTlNUX0RDQkEpCiAJCXJldHVybiAwOwogCiAJLyogRW11bGF0ZSB0aGUgbWNyeHIgaW5zbi4gICovCi0JaWYgKChpbnN0d29yZCAmIElOU1RfTUNSWFJfTUFTSykgPT0gSU5TVF9NQ1JYUikgeworCWlmICgoaW5zdHdvcmQgJiBQUENfSU5TVF9NQ1JYUl9NQVNLKSA9PSBQUENfSU5TVF9NQ1JYUikgewogCQlpbnQgc2hpZnQgPSAoaW5zdHdvcmQgPj4gMjEpICYgMHgxYzsKIAkJdW5zaWduZWQgbG9uZyBtc2sgPSAweGYwMDAwMDAwVUwgPj4gc2hpZnQ7CiAKQEAgLTc5NiwxNiArNzc3LDE2IEBACiAJfQogCiAJLyogRW11bGF0ZSBsb2FkL3N0b3JlIHN0cmluZyBpbnNuLiAqLwotCWlmICgoaW5zdHdvcmQgJiBJTlNUX1NUUklOR19HRU5fTUFTSykgPT0gSU5TVF9TVFJJTkcpCisJaWYgKChpbnN0d29yZCAmIFBQQ19JTlNUX1NUUklOR19HRU5fTUFTSykgPT0gUFBDX0lOU1RfU1RSSU5HKQogCQlyZXR1cm4gZW11bGF0ZV9zdHJpbmdfaW5zdChyZWdzLCBpbnN0d29yZCk7CiAKIAkvKiBFbXVsYXRlIHRoZSBwb3BjbnRiIChQb3B1bGF0aW9uIENvdW50IEJ5dGVzKSBpbnN0cnVjdGlvbi4gKi8KLQlpZiAoKGluc3R3b3JkICYgSU5TVF9QT1BDTlRCX01BU0spID09IElOU1RfUE9QQ05UQikgeworCWlmICgoaW5zdHdvcmQgJiBQUENfSU5TVF9QT1BDTlRCX01BU0spID09IFBQQ19JTlNUX1BPUENOVEIpIHsKIAkJcmV0dXJuIGVtdWxhdGVfcG9wY250Yl9pbnN0KHJlZ3MsIGluc3R3b3JkKTsKIAl9CiAKIAkvKiBFbXVsYXRlIGlzZWwgKEludGVnZXIgU2VsZWN0KSBpbnN0cnVjdGlvbiAqLwotCWlmICgoaW5zdHdvcmQgJiBJTlNUX0lTRUxfTUFTSykgPT0gSU5TVF9JU0VMKSB7CisJaWYgKChpbnN0d29yZCAmIFBQQ19JTlNUX0lTRUxfTUFTSykgPT0gUFBDX0lOU1RfSVNFTCkgewogCQlyZXR1cm4gZW11bGF0ZV9pc2VsKHJlZ3MsIGluc3R3b3JkKTsKIAl9CiAKQEAgLTExNDQsNiArMTEyNSwyNCBAQAogI2VuZGlmIC8qIENPTkZJR19WU1ggKi8KIAogI2lmZGVmIENPTkZJR19GU0xfQk9PS0UKKwordm9pZCBkb29yYmVsbF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaW50IG1zZzsKKworCWlmIChudW1fb25saW5lX2NwdXMoKSA8IDIpCisJCXJldHVybjsKKworCWZvciAobXNnID0gMDsgbXNnIDwgNDsgbXNnKyspCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQobXNnLCAmZGJlbGxfc21wX21lc3NhZ2VbY3B1XSkpCisJCQlzbXBfbWVzc2FnZV9yZWN2KG1zZyk7CisjZWxzZQorCXByaW50ayhLRVJOX1dBUk5JTkcgIlJlY2VpdmVkIGRvb3JiZWxsIG9uIG5vbi1zbXAgc3lzdGVtXG4iKTsKKyNlbmRpZgorfQorCiB2b2lkIENhY2hlTG9ja2luZ0V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkJICAgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmcuYwppbmRleCA3ZDZjOWJiLi5mYzlhZjQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmcuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmcuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CiAKIHZvaWQgKCp1ZGJnX3B1dGMpKGNoYXIgYyk7Cit2b2lkICgqdWRiZ19mbHVzaCkodm9pZCk7CiBpbnQgKCp1ZGJnX2dldGMpKHZvaWQpOwogaW50ICgqdWRiZ19nZXRjX3BvbGwpKHZvaWQpOwogCkBAIC03Niw2ICs3Nyw5IEBACiAJCQl3aGlsZSAoKGMgPSAqcysrKSAhPSAnXDAnKQogCQkJCXVkYmdfcHV0YyhjKTsKIAkJfQorCisJCWlmICh1ZGJnX2ZsdXNoKQorCQkJdWRiZ19mbHVzaCgpOwogCX0KICNpZiAwCiAJZWxzZSB7CkBAIC05OCw2ICsxMDIsOSBAQAogCQl9CiAJfQogCisJaWYgKHVkYmdfZmx1c2gpCisJCXVkYmdfZmx1c2goKTsKKwogCXJldHVybiBuIC0gcmVtYWluOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCmluZGV4IDdiN2RhOGMuLjAzNjJhODkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCkBAIC00OCwxNCArNDgsMjEgQEAKIAogc3RhdGljIHN0cnVjdCBOUzE2NTUwIF9faW9tZW0gKnVkYmdfY29tcG9ydDsKIAotc3RhdGljIHZvaWQgdWRiZ181NTBfcHV0YyhjaGFyIGMpCitzdGF0aWMgdm9pZCB1ZGJnXzU1MF9mbHVzaCh2b2lkKQogewogCWlmICh1ZGJnX2NvbXBvcnQpIHsKIAkJd2hpbGUgKChpbl84KCZ1ZGJnX2NvbXBvcnQtPmxzcikgJiBMU1JfVEhSRSkgPT0gMCkKIAkJCS8qIHdhaXQgZm9yIGlkbGUgKi87Ci0JCW91dF84KCZ1ZGJnX2NvbXBvcnQtPnRociwgYyk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1ZGJnXzU1MF9wdXRjKGNoYXIgYykKK3sKKwlpZiAodWRiZ19jb21wb3J0KSB7CiAJCWlmIChjID09ICdcbicpCiAJCQl1ZGJnXzU1MF9wdXRjKCdccicpOworCQl1ZGJnXzU1MF9mbHVzaCgpOworCQlvdXRfOCgmdWRiZ19jb21wb3J0LT50aHIsIGMpOwogCX0KIH0KIApAQCAtMTA4LDYgKzExNSw3IEBACiAJCS8qIENsZWFyICYgZW5hYmxlIEZJRk9zICovCiAJCW91dF84KCZ1ZGJnX2NvbXBvcnQtPmZjciAsMHgwNyk7CiAJCXVkYmdfcHV0YyA9IHVkYmdfNTUwX3B1dGM7CisJCXVkYmdfZmx1c2ggPSB1ZGJnXzU1MF9mbHVzaDsKIAkJdWRiZ19nZXRjID0gdWRiZ181NTBfZ2V0YzsKIAkJdWRiZ19nZXRjX3BvbGwgPSB1ZGJnXzU1MF9nZXRjX3BvbGw7CiAJfQpAQCAtMTQ5LDE0ICsxNTcsMjEgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QUENfTUFQTEUKLXZvaWQgdWRiZ19tYXBsZV9yZWFsX3B1dGMoY2hhciBjKQordm9pZCB1ZGJnX21hcGxlX3JlYWxfZmx1c2godm9pZCkKIHsKIAlpZiAodWRiZ19jb21wb3J0KSB7CiAJCXdoaWxlICgocmVhbF9yZWFkYigmdWRiZ19jb21wb3J0LT5sc3IpICYgTFNSX1RIUkUpID09IDApCiAJCQkvKiB3YWl0IGZvciBpZGxlICovOwotCQlyZWFsX3dyaXRlYihjLCAmdWRiZ19jb21wb3J0LT50aHIpOyBlaWVpbygpOworCX0KK30KKwordm9pZCB1ZGJnX21hcGxlX3JlYWxfcHV0YyhjaGFyIGMpCit7CisJaWYgKHVkYmdfY29tcG9ydCkgewogCQlpZiAoYyA9PSAnXG4nKQogCQkJdWRiZ19tYXBsZV9yZWFsX3B1dGMoJ1xyJyk7CisJCXVkYmdfbWFwbGVfcmVhbF9mbHVzaCgpOworCQlyZWFsX3dyaXRlYihjLCAmdWRiZ19jb21wb3J0LT50aHIpOyBlaWVpbygpOwogCX0KIH0KIApAQCAtMTY1LDIwICsxODAsMjggQEAKIAl1ZGJnX2NvbXBvcnQgPSAoc3RydWN0IE5TMTY1NTAgX19pb21lbSAqKTB4ZjQwMDAzZjg7CiAKIAl1ZGJnX3B1dGMgPSB1ZGJnX21hcGxlX3JlYWxfcHV0YzsKKwl1ZGJnX2ZsdXNoID0gdWRiZ19tYXBsZV9yZWFsX2ZsdXNoOwogCXVkYmdfZ2V0YyA9IE5VTEw7CiAJdWRiZ19nZXRjX3BvbGwgPSBOVUxMOwogfQogI2VuZGlmIC8qIENPTkZJR19QUENfTUFQTEUgKi8KIAogI2lmZGVmIENPTkZJR19QUENfUEFTRU1JCi12b2lkIHVkYmdfcGFzX3JlYWxfcHV0YyhjaGFyIGMpCit2b2lkIHVkYmdfcGFzX3JlYWxfZmx1c2godm9pZCkKIHsKIAlpZiAodWRiZ19jb21wb3J0KSB7CiAJCXdoaWxlICgocmVhbF8yMDVfcmVhZGIoJnVkYmdfY29tcG9ydC0+bHNyKSAmIExTUl9USFJFKSA9PSAwKQogCQkJLyogd2FpdCBmb3IgaWRsZSAqLzsKLQkJcmVhbF8yMDVfd3JpdGViKGMsICZ1ZGJnX2NvbXBvcnQtPnRocik7IGVpZWlvKCk7CisJfQorfQorCit2b2lkIHVkYmdfcGFzX3JlYWxfcHV0YyhjaGFyIGMpCit7CisJaWYgKHVkYmdfY29tcG9ydCkgewogCQlpZiAoYyA9PSAnXG4nKQogCQkJdWRiZ19wYXNfcmVhbF9wdXRjKCdccicpOworCQl1ZGJnX3Bhc19yZWFsX2ZsdXNoKCk7CisJCXJlYWxfMjA1X3dyaXRlYihjLCAmdWRiZ19jb21wb3J0LT50aHIpOyBlaWVpbygpOwogCX0KIH0KIApAQCAtMTg3LDYgKzIxMCw3IEBACiAJdWRiZ19jb21wb3J0ID0gKHN0cnVjdCBOUzE2NTUwIF9faW9tZW0gKikweGZjZmYwM2Y4VUw7CiAKIAl1ZGJnX3B1dGMgPSB1ZGJnX3Bhc19yZWFsX3B1dGM7CisJdWRiZ19mbHVzaCA9IHVkYmdfcGFzX3JlYWxfZmx1c2g7CiAJdWRiZ19nZXRjID0gTlVMTDsKIAl1ZGJnX2dldGNfcG9sbCA9IE5VTEw7CiB9CkBAIC0xOTUsMTQgKzIxOSwyMSBAQAogI2lmZGVmIENPTkZJR19QUENfRUFSTFlfREVCVUdfNDR4CiAjaW5jbHVkZSA8cGxhdGZvcm1zLzQ0eC80NHguaD4KIAotc3RhdGljIHZvaWQgdWRiZ180NHhfYXMxX3B1dGMoY2hhciBjKQorc3RhdGljIGludCB1ZGJnXzQ0eF9hczFfZmx1c2godm9pZCkKIHsKIAlpZiAodWRiZ19jb21wb3J0KSB7CiAJCXdoaWxlICgoYXMxX3JlYWRiKCZ1ZGJnX2NvbXBvcnQtPmxzcikgJiBMU1JfVEhSRSkgPT0gMCkKIAkJCS8qIHdhaXQgZm9yIGlkbGUgKi87Ci0JCWFzMV93cml0ZWIoYywgJnVkYmdfY29tcG9ydC0+dGhyKTsgZWllaW8oKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVkYmdfNDR4X2FzMV9wdXRjKGNoYXIgYykKK3sKKwlpZiAodWRiZ19jb21wb3J0KSB7CiAJCWlmIChjID09ICdcbicpCiAJCQl1ZGJnXzQ0eF9hczFfcHV0YygnXHInKTsKKwkJdWRiZ180NHhfYXMxX2ZsdXNoKCk7CisJCWFzMV93cml0ZWIoYywgJnVkYmdfY29tcG9ydC0+dGhyKTsgZWllaW8oKTsKIAl9CiB9CiAKQEAgLTIyMiwxOSArMjUzLDI3IEBACiAJCShzdHJ1Y3QgTlMxNjU1MCBfX2lvbWVtICopUFBDNDR4X0VBUkxZX0RFQlVHX1ZJUlRBRERSOwogCiAJdWRiZ19wdXRjID0gdWRiZ180NHhfYXMxX3B1dGM7CisJdWRiZ19mbHVzaCA9IHVkYmdfNDR4X2FzMV9mbHVzaDsKIAl1ZGJnX2dldGMgPSB1ZGJnXzQ0eF9hczFfZ2V0YzsKIH0KICNlbmRpZiAvKiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQ0eCAqLwogCiAjaWZkZWYgQ09ORklHX1BQQ19FQVJMWV9ERUJVR180MHgKLXN0YXRpYyB2b2lkIHVkYmdfNDB4X3JlYWxfcHV0YyhjaGFyIGMpCitzdGF0aWMgdm9pZCB1ZGJnXzQweF9yZWFsX2ZsdXNoKHZvaWQpCiB7CiAJaWYgKHVkYmdfY29tcG9ydCkgewogCQl3aGlsZSAoKHJlYWxfcmVhZGIoJnVkYmdfY29tcG9ydC0+bHNyKSAmIExTUl9USFJFKSA9PSAwKQogCQkJLyogd2FpdCBmb3IgaWRsZSAqLzsKLQkJcmVhbF93cml0ZWIoYywgJnVkYmdfY29tcG9ydC0+dGhyKTsgZWllaW8oKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVkYmdfNDB4X3JlYWxfcHV0YyhjaGFyIGMpCit7CisJaWYgKHVkYmdfY29tcG9ydCkgewogCQlpZiAoYyA9PSAnXG4nKQogCQkJdWRiZ180MHhfcmVhbF9wdXRjKCdccicpOworCQl1ZGJnXzQweF9yZWFsX2ZsdXNoKCk7CisJCXJlYWxfd3JpdGViKGMsICZ1ZGJnX2NvbXBvcnQtPnRocik7IGVpZWlvKCk7CiAJfQogfQogCkBAIC0yNTQsNiArMjkzLDcgQEAKIAkJQ09ORklHX1BQQ19FQVJMWV9ERUJVR180MHhfUEhZU0FERFI7CiAKIAl1ZGJnX3B1dGMgPSB1ZGJnXzQweF9yZWFsX3B1dGM7CisJdWRiZ19mbHVzaCA9IHVkYmdfNDB4X3JlYWxfZmx1c2g7CiAJdWRiZ19nZXRjID0gdWRiZ180MHhfcmVhbF9nZXRjOwogCXVkYmdfZ2V0Y19wb2xsID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA2N2YwN2Y0Li5iOWVmMTY0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC01OCw2ICs1OCw3IEBACiAJCVNDSEVEX1RFWFQKIAkJTE9DS19URVhUCiAJCUtQUk9CRVNfVEVYVAorCQlJUlFFTlRSWV9URVhUCiAKICNpZmRlZiBDT05GSUdfUFBDMzIKIAkJKiguZ290MSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvZG1hLW5vbmNvaGVyZW50LmMgYi9hcmNoL3Bvd2VycGMvbGliL2RtYS1ub25jb2hlcmVudC5jCmluZGV4IGI3ZGM0YzEuLjAwNWEyOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvZG1hLW5vbmNvaGVyZW50LmMKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9kbWEtbm9uY29oZXJlbnQuYwpAQCAtMjksMTIxICsyOSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKIC8qCi0gKiBUaGlzIGFkZHJlc3MgcmFuZ2UgZGVmYXVsdHMgdG8gYSB2YWx1ZSB0aGF0IGlzIHNhZmUgZm9yIGFsbAotICogcGxhdGZvcm1zIHdoaWNoIGN1cnJlbnRseSBzZXQgQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRS4gSXQKLSAqIGNhbiBiZSBmdXJ0aGVyIGNvbmZpZ3VyZWQgZm9yIHNwZWNpZmljIGFwcGxpY2F0aW9ucyB1bmRlcgotICogdGhlICJBZHZhbmNlZCBTZXR1cCIgbWVudS4gLU1hdHQKLSAqLwotI2RlZmluZSBDT05TSVNURU5UX0JBU0UJKENPTkZJR19DT05TSVNURU5UX1NUQVJUKQotI2RlZmluZSBDT05TSVNURU5UX0VORAkoQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQgKyBDT05GSUdfQ09OU0lTVEVOVF9TSVpFKQotI2RlZmluZSBDT05TSVNURU5UX09GRlNFVCh4KQkoKCh1bnNpZ25lZCBsb25nKSh4KSAtIENPTlNJU1RFTlRfQkFTRSkgPj4gUEFHRV9TSElGVCkKLQotLyoKLSAqIFRoaXMgaXMgdGhlIHBhZ2UgdGFibGUgKDJNQikgY292ZXJpbmcgdW5jYWNoZWQsIERNQSBjb25zaXN0ZW50IGFsbG9jYXRpb25zCi0gKi8KLXN0YXRpYyBwdGVfdCAqY29uc2lzdGVudF9wdGU7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbnNpc3RlbnRfbG9jayk7Ci0KLS8qCi0gKiBWTSByZWdpb24gaGFuZGxpbmcgc3VwcG9ydC4KLSAqCi0gKiBUaGlzIHNob3VsZCBiZWNvbWUgc29tZXRoaW5nIGdlbmVyaWMsIGhhbmRsaW5nIFZNIHJlZ2lvbiBhbGxvY2F0aW9ucyBmb3IKLSAqIHZtYWxsb2MgYW5kIHNpbWlsYXIgKGlvcmVtYXAsIG1vZHVsZSBzcGFjZSwgZXRjKS4KLSAqCi0gKiBJIGVudmlzYWdlIHZtYWxsb2MoKSdzIHN1cHBvcnRpbmcgdm1fc3RydWN0IGJlY29taW5nOgotICoKLSAqICBzdHJ1Y3Qgdm1fc3RydWN0IHsKLSAqICAgIHN0cnVjdCB2bV9yZWdpb24JcmVnaW9uOwotICogICAgdW5zaWduZWQgbG9uZwlmbGFnczsKLSAqICAgIHN0cnVjdCBwYWdlCSoqcGFnZXM7Ci0gKiAgICB1bnNpZ25lZCBpbnQJbnJfcGFnZXM7Ci0gKiAgICB1bnNpZ25lZCBsb25nCXBoeXNfYWRkcjsKLSAqICB9OwotICoKLSAqIGdldF92bV9hcmVhKCkgd291bGQgdGhlbiBjYWxsIHZtX3JlZ2lvbl9hbGxvYyB3aXRoIGFuIGFwcHJvcHJpYXRlCi0gKiBzdHJ1Y3Qgdm1fcmVnaW9uIGhlYWQgKGVnKToKLSAqCi0gKiAgc3RydWN0IHZtX3JlZ2lvbiB2bWFsbG9jX2hlYWQgPSB7Ci0gKgkudm1fbGlzdAk9IExJU1RfSEVBRF9JTklUKHZtYWxsb2NfaGVhZC52bV9saXN0KSwKLSAqCS52bV9zdGFydAk9IFZNQUxMT0NfU1RBUlQsCi0gKgkudm1fZW5kCQk9IFZNQUxMT0NfRU5ELAotICogIH07Ci0gKgotICogSG93ZXZlciwgdm1hbGxvY19oZWFkLnZtX3N0YXJ0IGlzIHZhcmlhYmxlICh0eXBpY2FsbHksIGl0IGlzIGRlcGVuZGVudCBvbgotICogdGhlIGFtb3VudCBvZiBSQU0gZm91bmQgYXQgYm9vdCB0aW1lLikgIEkgd291bGQgaW1hZ2luZSB0aGF0IGdldF92bV9hcmVhKCkKLSAqIHdvdWxkIGhhdmUgdG8gaW5pdGlhbGlzZSB0aGlzIGVhY2ggdGltZSBwcmlvciB0byBjYWxsaW5nIHZtX3JlZ2lvbl9hbGxvYygpLgotICovCi1zdHJ1Y3QgcHBjX3ZtX3JlZ2lvbiB7Ci0Jc3RydWN0IGxpc3RfaGVhZAl2bV9saXN0OwotCXVuc2lnbmVkIGxvbmcJCXZtX3N0YXJ0OwotCXVuc2lnbmVkIGxvbmcJCXZtX2VuZDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcHBjX3ZtX3JlZ2lvbiBjb25zaXN0ZW50X2hlYWQgPSB7Ci0JLnZtX2xpc3QJPSBMSVNUX0hFQURfSU5JVChjb25zaXN0ZW50X2hlYWQudm1fbGlzdCksCi0JLnZtX3N0YXJ0CT0gQ09OU0lTVEVOVF9CQVNFLAotCS52bV9lbmQJCT0gQ09OU0lTVEVOVF9FTkQsCi19OwotCi1zdGF0aWMgc3RydWN0IHBwY192bV9yZWdpb24gKgotcHBjX3ZtX3JlZ2lvbl9hbGxvYyhzdHJ1Y3QgcHBjX3ZtX3JlZ2lvbiAqaGVhZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBoZWFkLT52bV9zdGFydCwgZW5kID0gaGVhZC0+dm1fZW5kIC0gc2l6ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBwcGNfdm1fcmVnaW9uICpjLCAqbmV3OwotCi0JbmV3ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBwY192bV9yZWdpb24pLCBnZnApOwotCWlmICghbmV3KQotCQlnb3RvIG91dDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjb25zaXN0ZW50X2xvY2ssIGZsYWdzKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmhlYWQtPnZtX2xpc3QsIHZtX2xpc3QpIHsKLQkJaWYgKChhZGRyICsgc2l6ZSkgPCBhZGRyKQotCQkJZ290byBub3NwYzsKLQkJaWYgKChhZGRyICsgc2l6ZSkgPD0gYy0+dm1fc3RhcnQpCi0JCQlnb3RvIGZvdW5kOwotCQlhZGRyID0gYy0+dm1fZW5kOwotCQlpZiAoYWRkciA+IGVuZCkKLQkJCWdvdG8gbm9zcGM7Ci0JfQotCi0gZm91bmQ6Ci0JLyoKLQkgKiBJbnNlcnQgdGhpcyBlbnRyeSBfYmVmb3JlXyB0aGUgb25lIHdlIGZvdW5kLgotCSAqLwotCWxpc3RfYWRkX3RhaWwoJm5ldy0+dm1fbGlzdCwgJmMtPnZtX2xpc3QpOwotCW5ldy0+dm1fc3RhcnQgPSBhZGRyOwotCW5ldy0+dm1fZW5kID0gYWRkciArIHNpemU7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25zaXN0ZW50X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gbmV3OwotCi0gbm9zcGM6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uc2lzdGVudF9sb2NrLCBmbGFncyk7Ci0Ja2ZyZWUobmV3KTsKLSBvdXQ6Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcHBjX3ZtX3JlZ2lvbiAqcHBjX3ZtX3JlZ2lvbl9maW5kKHN0cnVjdCBwcGNfdm1fcmVnaW9uICpoZWFkLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0Jc3RydWN0IHBwY192bV9yZWdpb24gKmM7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZoZWFkLT52bV9saXN0LCB2bV9saXN0KSB7Ci0JCWlmIChjLT52bV9zdGFydCA9PSBhZGRyKQotCQkJZ290byBvdXQ7Ci0JfQotCWMgPSBOVUxMOwotIG91dDoKLQlyZXR1cm4gYzsKLX0KLQotLyoKICAqIEFsbG9jYXRlIERNQS1jb2hlcmVudCBtZW1vcnkgc3BhY2UgYW5kIHJldHVybiBib3RoIHRoZSBrZXJuZWwgcmVtYXBwZWQKICAqIHZpcnR1YWwgYW5kIGJ1cyBhZGRyZXNzIGZvciB0aGF0IHNwYWNlLgogICovCkBAIC0xNTEsMjEgKzQxLDIxIEBACiBfX2RtYV9hbGxvY19jb2hlcmVudChzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLCBnZnBfdCBnZnApCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0Jc3RydWN0IHBwY192bV9yZWdpb24gKmM7CiAJdW5zaWduZWQgbG9uZyBvcmRlcjsKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBQQUdFX0FMSUdOKHNpemUpPj5QQUdFX1NISUZUOworCXVuc2lnbmVkIGludCBhcnJheV9zaXplID0gbnJfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKik7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKwlzdHJ1Y3QgcGFnZSAqZW5kOwogCXU2NCBtYXNrID0gMHgwMGZmZmZmZiwgbGltaXQ7IC8qIElTQSBkZWZhdWx0ICovCisJc3RydWN0IHZtX3N0cnVjdCAqYXJlYTsKIAotCWlmICghY29uc2lzdGVudF9wdGUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm90IGluaXRpYWxpc2VkXG4iLCBfX2Z1bmNfXyk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCisJQlVHX09OKCFtZW1faW5pdF9kb25lKTsKIAlzaXplID0gUEFHRV9BTElHTihzaXplKTsKIAlsaW1pdCA9IChtYXNrICsgMSkgJiB+bWFzazsKLQlpZiAoKGxpbWl0ICYmIHNpemUgPj0gbGltaXQpIHx8IHNpemUgPj0gKENPTlNJU1RFTlRfRU5EIC0gQ09OU0lTVEVOVF9CQVNFKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjb2hlcmVudCBhbGxvY2F0aW9uIHRvbyBiaWcgKHJlcXVlc3RlZCAlI3ggbWFzayAlI0x4KVxuIiwKLQkJICAgICAgIHNpemUsIG1hc2spOworCWlmIChsaW1pdCAmJiBzaXplID49IGxpbWl0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNvaGVyZW50IGFsbG9jYXRpb24gdG9vIGJpZyAocmVxdWVzdGVkICIKKwkJCQkiJSN4IG1hc2sgJSNMeClcbiIsIHNpemUsIG1hc2spOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTE3OCw2ICs2OCw4IEBACiAJaWYgKCFwYWdlKQogCQlnb3RvIG5vX3BhZ2U7CiAKKwllbmQgPSBwYWdlICsgKDEgPDwgb3JkZXIpOworCiAJLyoKIAkgKiBJbnZhbGlkYXRlIGFueSBkYXRhIHRoYXQgbWlnaHQgYmUgbHVya2luZyBpbiB0aGUKIAkgKiBrZXJuZWwgZGlyZWN0LW1hcHBlZCByZWdpb24gZm9yIGRldmljZSBETUEuCkBAIC0xODgsNDggKzgwLDU5IEBACiAJCWZsdXNoX2RjYWNoZV9yYW5nZShrYWRkciwga2FkZHIgKyBzaXplKTsKIAl9CiAKKwlzcGxpdF9wYWdlKHBhZ2UsIG9yZGVyKTsKKwogCS8qCi0JICogQWxsb2NhdGUgYSB2aXJ0dWFsIGFkZHJlc3MgaW4gdGhlIGNvbnNpc3RlbnQgbWFwcGluZyByZWdpb24uCisJICogU2V0IHRoZSAiZG1hIGhhbmRsZSIKIAkgKi8KLQljID0gcHBjX3ZtX3JlZ2lvbl9hbGxvYygmY29uc2lzdGVudF9oZWFkLCBzaXplLAotCQkJICAgIGdmcCAmIH4oX19HRlBfRE1BIHwgX19HRlBfSElHSE1FTSkpOwotCWlmIChjKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSBjLT52bV9zdGFydDsKLQkJcHRlX3QgKnB0ZSA9IGNvbnNpc3RlbnRfcHRlICsgQ09OU0lTVEVOVF9PRkZTRVQodmFkZHIpOwotCQlzdHJ1Y3QgcGFnZSAqZW5kID0gcGFnZSArICgxIDw8IG9yZGVyKTsKKwkqaGFuZGxlID0gcGFnZV90b19waHlzKHBhZ2UpOwogCi0JCXNwbGl0X3BhZ2UocGFnZSwgb3JkZXIpOworCWFyZWEgPSBnZXRfdm1fYXJlYV9jYWxsZXIoc2l6ZSwgVk1fSU9SRU1BUCwKKwkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygxKSk7CisJaWYgKCFhcmVhKQorCQlnb3RvIG91dF9mcmVlX3BhZ2VzOwogCi0JCS8qCi0JCSAqIFNldCB0aGUgImRtYSBoYW5kbGUiCi0JCSAqLwotCQkqaGFuZGxlID0gcGFnZV90b19waHlzKHBhZ2UpOworCWlmIChhcnJheV9zaXplID4gUEFHRV9TSVpFKSB7CisJCXBhZ2VzID0gdm1hbGxvYyhhcnJheV9zaXplKTsKKwkJYXJlYS0+ZmxhZ3MgfD0gVk1fVlBBR0VTOworCX0gZWxzZSB7CisJCXBhZ2VzID0ga21hbGxvYyhhcnJheV9zaXplLCBHRlBfS0VSTkVMKTsKKwl9CisJaWYgKCFwYWdlcykKKwkJZ290byBvdXRfZnJlZV9hcmVhOwogCi0JCWRvIHsKLQkJCUJVR19PTighcHRlX25vbmUoKnB0ZSkpOworCWFyZWEtPnBhZ2VzID0gcGFnZXM7CisJYXJlYS0+bnJfcGFnZXMgPSBucl9wYWdlczsKIAotCQkJU2V0UGFnZVJlc2VydmVkKHBhZ2UpOwotCQkJc2V0X3B0ZV9hdCgmaW5pdF9tbSwgdmFkZHIsCi0JCQkJICAgcHRlLCBta19wdGUocGFnZSwgcGdwcm90X25vbmNhY2hlZChQQUdFX0tFUk5FTCkpKTsKLQkJCXBhZ2UrKzsKLQkJCXB0ZSsrOwotCQkJdmFkZHIgKz0gUEFHRV9TSVpFOwotCQl9IHdoaWxlIChzaXplIC09IFBBR0VfU0laRSk7CisJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspCisJCXBhZ2VzW2ldID0gcGFnZSArIGk7CiAKLQkJLyoKLQkJICogRnJlZSB0aGUgb3RoZXJ3aXNlIHVudXNlZCBwYWdlcy4KLQkJICovCi0JCXdoaWxlIChwYWdlIDwgZW5kKSB7Ci0JCQlfX2ZyZWVfcGFnZShwYWdlKTsKLQkJCXBhZ2UrKzsKLQkJfQorCWlmIChtYXBfdm1fYXJlYShhcmVhLCBwZ3Byb3Rfbm9uY2FjaGVkKFBBR0VfS0VSTkVMKSwgJnBhZ2VzKSkKKwkJZ290byBvdXRfdW5tYXA7CiAKLQkJcmV0dXJuICh2b2lkICopYy0+dm1fc3RhcnQ7CisJLyoKKwkgKiBGcmVlIHRoZSBvdGhlcndpc2UgdW51c2VkIHBhZ2VzLgorCSAqLworCXBhZ2UgKz0gbnJfcGFnZXM7CisJd2hpbGUgKHBhZ2UgPCBlbmQpIHsKKwkJX19mcmVlX3BhZ2UocGFnZSk7CisJCXBhZ2UrKzsKIAl9CiAKKwlyZXR1cm4gYXJlYS0+YWRkcjsKK291dF91bm1hcDoKKwl2dW5tYXAoYXJlYS0+YWRkcik7CisJaWYgKGFycmF5X3NpemUgPiBQQUdFX1NJWkUpCisJCXZmcmVlKHBhZ2VzKTsKKwllbHNlCisJCWtmcmVlKHBhZ2VzKTsKKwlnb3RvIG91dF9mcmVlX3BhZ2VzOworb3V0X2ZyZWVfYXJlYToKKwlmcmVlX3ZtX2FyZWEoYXJlYSk7CitvdXRfZnJlZV9wYWdlczoKIAlpZiAocGFnZSkKIAkJX19mcmVlX3BhZ2VzKHBhZ2UsIG9yZGVyKTsKLSBub19wYWdlOgorbm9fcGFnZToKIAlyZXR1cm4gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0woX19kbWFfYWxsb2NfY29oZXJlbnQpOwpAQCAtMjM5LDEwNCArMTQyLDEyIEBACiAgKi8KIHZvaWQgX19kbWFfZnJlZV9jb2hlcmVudChzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIpCiB7Ci0Jc3RydWN0IHBwY192bV9yZWdpb24gKmM7Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgYWRkcjsKLQlwdGVfdCAqcHRlcDsKKwl2ZnJlZSh2YWRkcik7CiAKLQlzaXplID0gUEFHRV9BTElHTihzaXplKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjb25zaXN0ZW50X2xvY2ssIGZsYWdzKTsKLQotCWMgPSBwcGNfdm1fcmVnaW9uX2ZpbmQoJmNvbnNpc3RlbnRfaGVhZCwgKHVuc2lnbmVkIGxvbmcpdmFkZHIpOwotCWlmICghYykKLQkJZ290byBub19hcmVhOwotCi0JaWYgKChjLT52bV9lbmQgLSBjLT52bV9zdGFydCkgIT0gc2l6ZSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmcmVlaW5nIHdyb25nIGNvaGVyZW50IHNpemUgKCVsZCAhPSAlZClcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgYy0+dm1fZW5kIC0gYy0+dm1fc3RhcnQsIHNpemUpOwotCQlkdW1wX3N0YWNrKCk7Ci0JCXNpemUgPSBjLT52bV9lbmQgLSBjLT52bV9zdGFydDsKLQl9Ci0KLQlwdGVwID0gY29uc2lzdGVudF9wdGUgKyBDT05TSVNURU5UX09GRlNFVChjLT52bV9zdGFydCk7Ci0JYWRkciA9IGMtPnZtX3N0YXJ0OwotCWRvIHsKLQkJcHRlX3QgcHRlID0gcHRlcF9nZXRfYW5kX2NsZWFyKCZpbml0X21tLCBhZGRyLCBwdGVwKTsKLQkJdW5zaWduZWQgbG9uZyBwZm47Ci0KLQkJcHRlcCsrOwotCQlhZGRyICs9IFBBR0VfU0laRTsKLQotCQlpZiAoIXB0ZV9ub25lKHB0ZSkgJiYgcHRlX3ByZXNlbnQocHRlKSkgewotCQkJcGZuID0gcHRlX3BmbihwdGUpOwotCi0JCQlpZiAocGZuX3ZhbGlkKHBmbikpIHsKLQkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0JCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQocGFnZSk7Ci0KLQkJCQlfX2ZyZWVfcGFnZShwYWdlKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfQotCi0JCXByaW50ayhLRVJOX0NSSVQgIiVzOiBiYWQgcGFnZSBpbiBrZXJuZWwgcGFnZSB0YWJsZVxuIiwKLQkJICAgICAgIF9fZnVuY19fKTsKLQl9IHdoaWxlIChzaXplIC09IFBBR0VfU0laRSk7Ci0KLQlmbHVzaF90bGJfa2VybmVsX3JhbmdlKGMtPnZtX3N0YXJ0LCBjLT52bV9lbmQpOwotCi0JbGlzdF9kZWwoJmMtPnZtX2xpc3QpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uc2lzdGVudF9sb2NrLCBmbGFncyk7Ci0KLQlrZnJlZShjKTsKLQlyZXR1cm47Ci0KLSBub19hcmVhOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbnNpc3RlbnRfbG9jaywgZmxhZ3MpOwotCXByaW50ayhLRVJOX0VSUiAiJXM6IHRyeWluZyB0byBmcmVlIGludmFsaWQgY29oZXJlbnQgYXJlYTogJXBcbiIsCi0JICAgICAgIF9fZnVuY19fLCB2YWRkcik7Ci0JZHVtcF9zdGFjaygpOwogfQogRVhQT1JUX1NZTUJPTChfX2RtYV9mcmVlX2NvaGVyZW50KTsKIAogLyoKLSAqIEluaXRpYWxpc2UgdGhlIGNvbnNpc3RlbnQgbWVtb3J5IGFsbG9jYXRpb24uCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGRtYV9hbGxvY19pbml0KHZvaWQpCi17Ci0JcGdkX3QgKnBnZDsKLQlwdWRfdCAqcHVkOwotCXBtZF90ICpwbWQ7Ci0JcHRlX3QgKnB0ZTsKLQlpbnQgcmV0ID0gMDsKLQotCWRvIHsKLQkJcGdkID0gcGdkX29mZnNldCgmaW5pdF9tbSwgQ09OU0lTVEVOVF9CQVNFKTsKLQkJcHVkID0gcHVkX2FsbG9jKCZpbml0X21tLCBwZ2QsIENPTlNJU1RFTlRfQkFTRSk7Ci0JCXBtZCA9IHBtZF9hbGxvYygmaW5pdF9tbSwgcHVkLCBDT05TSVNURU5UX0JBU0UpOwotCQlpZiAoIXBtZCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gcG1kIHRhYmxlc1xuIiwgX19mdW5jX18pOwotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcHRlID0gcHRlX2FsbG9jX2tlcm5lbChwbWQsIENPTlNJU1RFTlRfQkFTRSk7Ci0JCWlmICghcHRlKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBwdGUgdGFibGVzXG4iLCBfX2Z1bmNfXyk7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJYnJlYWs7Ci0JCX0KLQotCQljb25zaXN0ZW50X3B0ZSA9IHB0ZTsKLQl9IHdoaWxlICgwKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWNvcmVfaW5pdGNhbGwoZG1hX2FsbG9jX2luaXQpOwotCi0vKgogICogbWFrZSBhbiBhcmVhIGNvbnNpc3RlbnQuCiAgKi8KIHZvaWQgX19kbWFfc3luYyh2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2ZlYXR1cmUtZml4dXBzLmMgYi9hcmNoL3Bvd2VycGMvbGliL2ZlYXR1cmUtZml4dXBzLmMKaW5kZXggOGM1YTAzYi4uN2U4ODY1YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9mZWF0dXJlLWZpeHVwcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvZmVhdHVyZS1maXh1cHMuYwpAQCAtODUsNyArODUsNyBAQAogCX0KIAogCWZvciAoOyBkZXN0IDwgZW5kOyBkZXN0KyspCi0JCXBhdGNoX2luc3RydWN0aW9uKGRlc3QsIFBQQ19OT1BfSU5TVFIpOworCQlwYXRjaF9pbnN0cnVjdGlvbihkZXN0LCBQUENfSU5TVF9OT1ApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjIsNyArMTIyLDcgQEAKIAogCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgewogCQlkZXN0ID0gKHZvaWQgKilzdGFydCArICpzdGFydDsKLQkJcGF0Y2hfaW5zdHJ1Y3Rpb24oZGVzdCwgUFBDX0xXU1lOQ19JTlNUUik7CisJCXBhdGNoX2luc3RydWN0aW9uKGRlc3QsIFBQQ19JTlNUX0xXU1lOQyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvTWFrZWZpbGUKaW5kZXggZjllNTA2YS4uMGMxNmFiOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9NYWtlZmlsZQpAQCAtMSw2ICsxLDQgQEAKIAotb2JqLXkJCQkJOj0gbWF0aC5vIGZtci5vIGxmZC5vIHN0ZmQubwotCiBvYmotJChDT05GSUdfTUFUSF9FTVVMQVRJT04pCSs9IGZhYnMubyBmYWRkLm8gZmFkZHMubyBmY21wby5vIGZjbXB1Lm8gXAogCQkJCQlmY3Rpdy5vIGZjdGl3ei5vIGZkaXYubyBmZGl2cy5vIFwKIAkJCQkJZm1hZGQubyBmbWFkZHMubyBmbXN1Yi5vIGZtc3Vicy5vIFwKQEAgLTksNyArNyw4IEBACiAJCQkJCWZyZXMubyBmcnNwLm8gZnJzcXJ0ZS5vIGZzZWwubyBsZnMubyBcCiAJCQkJCWZzcXJ0Lm8JZnNxcnRzLm8gZnN1Yi5vIGZzdWJzLm8gXAogCQkJCQltY3Jmcy5vIG1mZnMubyBtdGZzYjAubyBtdGZzYjEubyBcCi0JCQkJCW10ZnNmLm8gbXRmc2ZpLm8gc3RmaXd4Lm8gc3Rmcy5vCisJCQkJCW10ZnNmLm8gbXRmc2ZpLm8gc3RmaXd4Lm8gc3Rmcy5vIFwKKwkJCQkJbWF0aC5vIGZtci5vIGxmZC5vIHN0ZmQubwogCiBvYmotJChDT05GSUdfU1BFKQkJKz0gbWF0aF9lZnAubwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGUKaW5kZXggOTUzY2M0YS4uMTcyOTBiYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKIEVYVFJBX0NGTEFHUwkrPSAtbW5vLW1pbmltYWwtdG9jCiBlbmRpZgogCi1vYmoteQkJCQk6PSBmYXVsdC5vIG1lbS5vIHBndGFibGUubyBcCitvYmoteQkJCQk6PSBmYXVsdC5vIG1lbS5vIHBndGFibGUubyBndXAubyBcCiAJCQkJICAgaW5pdF8kKENPTkZJR19XT1JEX1NJWkUpLm8gXAogCQkJCSAgIHBndGFibGVfJChDT05GSUdfV09SRF9TSVpFKS5vCiBvYmotJChDT05GSUdfUFBDX01NVV9OT0hBU0gpCSs9IG1tdV9jb250ZXh0X25vaGFzaC5vIHRsYl9ub2hhc2gubyBcCkBAIC0xNCw3ICsxNCw3IEBACiBoYXNoLSQoQ09ORklHX1BQQ19OQVRJVkUpCTo9IGhhc2hfbmF0aXZlXzY0Lm8KIG9iai0kKENPTkZJR19QUEM2NCkJCSs9IGhhc2hfdXRpbHNfNjQubyBcCiAJCQkJICAgc2xiX2xvdy5vIHNsYi5vIHN0YWIubyBcCi0JCQkJICAgZ3VwLm8gbW1hcC5vICQoaGFzaC15KQorCQkJCSAgIG1tYXBfNjQubyAkKGhhc2gteSkKIG9iai0kKENPTkZJR19QUENfU1REX01NVV8zMikJKz0gcHBjX21tdV8zMi5vCiBvYmotJChDT05GSUdfUFBDX1NURF9NTVUpCSs9IGhhc2hfbG93XyQoQ09ORklHX1dPUkRfU0laRSkubyBcCiAJCQkJICAgdGxiX2hhc2gkKENPTkZJR19XT1JEX1NJWkUpLm8gXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYwppbmRleCA5MWM3Yjg2Li43Njk5Mzk0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYwpAQCAtMjUzLDQ1ICsyNTMsMzMgQEAKICNlbmRpZiAvKiBDT05GSUdfOHh4ICovCiAKIAlpZiAoaXNfZXhlYykgewotI2lmICEoZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkpCi0JCS8qIHByb3RlY3Rpb24gZmF1bHQgKi8KKyNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVUKKwkJLyogUHJvdGVjdGlvbiBmYXVsdCBvbiBleGVjIGdvIHN0cmFpZ2h0IHRvIGZhaWx1cmUgb24KKwkJICogSGFzaCBiYXNlZCBNTVVzIGFzIHRoZXkgZWl0aGVyIGRvbid0IHN1cHBvcnQgcGVyLXBhZ2UKKwkJICogZXhlY3V0ZSBwZXJtaXNzaW9uLCBvciBpZiB0aGV5IGRvLCBpdCdzIGhhbmRsZWQgYWxyZWFkeQorCQkgKiBhdCB0aGUgaGFzaCBsZXZlbC4gVGhpcyB0ZXN0IHdvdWxkIHByb2JhYmx5IGhhdmUgdG8KKwkJICogYmUgcmVtb3ZlZCBpZiB3ZSBjaGFuZ2UgdGhlIHdheSB0aGlzIHdvcmtzIHRvIG1ha2UgaGFzaAorCQkgKiBwcm9jZXNzb3JzIHVzZSB0aGUgc2FtZSBJL0QgY2FjaGUgY29oZXJlbmN5IG1lY2hhbmlzbQorCQkgKiBhcyBlbWJlZGRlZC4KKwkJICovCiAJCWlmIChlcnJvcl9jb2RlICYgRFNJU1JfUFJPVEZBVUxUKQogCQkJZ290byBiYWRfYXJlYTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDX1NURF9NTVUgKi8KKwogCQkvKgogCQkgKiBBbGxvdyBleGVjdXRpb24gZnJvbSByZWFkYWJsZSBhcmVhcyBpZiB0aGUgTU1VIGRvZXMgbm90CiAJCSAqIHByb3ZpZGUgc2VwYXJhdGUgY29udHJvbHMgb3ZlciByZWFkaW5nIGFuZCBleGVjdXRpbmcuCisJCSAqCisJCSAqIE5vdGU6IFRoYXQgY29kZSB1c2VkIHRvIG5vdCBiZSBlbmFibGVkIGZvciA0eHgvQm9va0UuCisJCSAqIEl0IGlzIG5vdyBhcyBJL0QgY2FjaGUgY29oZXJlbmN5IGZvciB0aGVzZSBpcyBkb25lIGF0CisJCSAqIHNldF9wdGVfYXQoKSB0aW1lIGFuZCBJIHNlZSBubyByZWFzb24gd2h5IHRoZSB0ZXN0CisJCSAqIGJlbG93IHdvdWxkbid0IGJlIHZhbGlkIG9uIHRob3NlIHByb2Nlc3NvcnMuIFRoaXMgLW1heS0KKwkJICogYnJlYWsgcHJvZ3JhbXMgY29tcGlsZWQgd2l0aCBhIHJlYWxseSBvbGQgQUJJIHRob3VnaC4KIAkJICovCiAJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKSAmJgogCQkgICAgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX05PRVhFQ1VURSkgfHwKIAkJICAgICAhKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX1dSSVRFKSkpKQogCQkJZ290byBiYWRfYXJlYTsKLSNlbHNlCi0JCXB0ZV90ICpwdGVwOwotCQlwbWRfdCAqcG1kcDsKLQotCQkvKiBTaW5jZSA0eHgvQm9vay1FIHN1cHBvcnRzIHBlci1wYWdlIGV4ZWN1dGUgcGVybWlzc2lvbiwKLQkJICogd2UgbGF6aWx5IGZsdXNoIGRjYWNoZSB0byBpY2FjaGUuICovCi0JCXB0ZXAgPSBOVUxMOwotCQlpZiAoZ2V0X3B0ZXB0cihtbSwgYWRkcmVzcywgJnB0ZXAsICZwbWRwKSkgewotCQkJc3BpbmxvY2tfdCAqcHRsID0gcHRlX2xvY2twdHIobW0sIHBtZHApOwotCQkJc3Bpbl9sb2NrKHB0bCk7Ci0JCQlpZiAocHRlX3ByZXNlbnQoKnB0ZXApKSB7Ci0JCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdGVfcGFnZSgqcHRlcCk7Ci0KLQkJCQlpZiAoIXRlc3RfYml0KFBHX2FyY2hfMSwgJnBhZ2UtPmZsYWdzKSkgewotCQkJCQlmbHVzaF9kY2FjaGVfaWNhY2hlX3BhZ2UocGFnZSk7Ci0JCQkJCXNldF9iaXQoUEdfYXJjaF8xLCAmcGFnZS0+ZmxhZ3MpOwotCQkJCX0KLQkJCQlwdGVfdXBkYXRlKHB0ZXAsIDAsIF9QQUdFX0hXRVhFQyB8Ci0JCQkJCSAgIF9QQUdFX0FDQ0VTU0VEKTsKLQkJCQlsb2NhbF9mbHVzaF90bGJfcGFnZSh2bWEsIGFkZHJlc3MpOwotCQkJCXB0ZV91bm1hcF91bmxvY2socHRlcCwgcHRsKTsKLQkJCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCQkJCXJldHVybiAwOwotCQkJfQotCQkJcHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpOwotCQl9Ci0jZW5kaWYKIAkvKiBhIHdyaXRlICovCiAJfSBlbHNlIGlmIChpc193cml0ZSkgewogCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2ZzbF9ib29rZV9tbXUuYyBiL2FyY2gvcG93ZXJwYy9tbS9mc2xfYm9va2VfbW11LmMKaW5kZXggZWE2ZTQxZS4uYmIzZDY1OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZzbF9ib29rZV9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vZnNsX2Jvb2tlX21tdS5jCkBAIC01NiwxMCArNTYsMTQgQEAKIAogZXh0ZXJuIHZvaWQgbG9hZGNhbV9lbnRyeSh1bnNpZ25lZCBpbnQgaW5kZXgpOwogdW5zaWduZWQgaW50IHRsYmNhbV9pbmRleDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fY2FtMCwgX19jYW0xLCBfX2NhbTI7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBjYW1bQ09ORklHX0xPV01FTV9DQU1fTlVNXTsKIAogI2RlZmluZSBOVU1fVExCQ0FNUwkoMTYpCiAKKyNpZiBkZWZpbmVkKENPTkZJR19MT1dNRU1fQ0FNX05VTV9CT09MKSAmJiAoQ09ORklHX0xPV01FTV9DQU1fTlVNID49IE5VTV9UTEJDQU1TKQorI2Vycm9yICJMT1dNRU1fQ0FNX05VTSBtdXN0IGJlIGxlc3MgdGhhbiBOVU1fVExCQ0FNUyIKKyNlbmRpZgorCiBzdHJ1Y3QgdGxiY2FtIFRMQkNBTVtOVU1fVExCQ0FNU107CiAKIHN0cnVjdCB0bGJjYW1yYW5nZSB7CkBAIC0xMDcsNyArMTExLDcgQEAKIAl1bnNpZ25lZCBpbnQgdHNpemUsIGx6OwogCiAJYXNtICgiY250bHp3ICUwLCUxIiA6ICI9ciIgKGx6KSA6ICJyIiAoc2l6ZSkpOwotCXRzaXplID0gKDIxIC0gbHopIC8gMjsKKwl0c2l6ZSA9IDIxIC0gbHo7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJaWYgKChmbGFncyAmIF9QQUdFX05PX0NBQ0hFKSA9PSAwKQpAQCAtMTUyLDE5ICsxNTYsMTkgQEAKIAlsb2FkY2FtX2VudHJ5KGluZGV4KTsKIH0KIAotdm9pZCBfX2luaXQgY2FtX21hcGluX3JhbSh1bnNpZ25lZCBsb25nIGNhbTAsIHVuc2lnbmVkIGxvbmcgY2FtMSwKLQkJdW5zaWduZWQgbG9uZyBjYW0yKQordW5zaWduZWQgbG9uZyBfX2luaXQgbW11X21hcGluX3JhbSh2b2lkKQogewotCXNldHRsYmNhbSgwLCBQQUdFX09GRlNFVCwgbWVtc3RhcnRfYWRkciwgY2FtMCwgX1BBR0VfS0VSTkVMLCAwKTsKLQl0bGJjYW1faW5kZXgrKzsKLQlpZiAoY2FtMSkgeworCXVuc2lnbmVkIGxvbmcgdmlydCA9IFBBR0VfT0ZGU0VUOworCXBoeXNfYWRkcl90IHBoeXMgPSBtZW1zdGFydF9hZGRyOworCisJd2hpbGUgKGNhbVt0bGJjYW1faW5kZXhdICYmIHRsYmNhbV9pbmRleCA8IEFSUkFZX1NJWkUoY2FtKSkgeworCQlzZXR0bGJjYW0odGxiY2FtX2luZGV4LCB2aXJ0LCBwaHlzLCBjYW1bdGxiY2FtX2luZGV4XSwgUEFHRV9LRVJORUxfWCwgMCk7CisJCXZpcnQgKz0gY2FtW3RsYmNhbV9pbmRleF07CisJCXBoeXMgKz0gY2FtW3RsYmNhbV9pbmRleF07CiAJCXRsYmNhbV9pbmRleCsrOwotCQlzZXR0bGJjYW0oMSwgUEFHRV9PRkZTRVQrY2FtMCwgbWVtc3RhcnRfYWRkcitjYW0wLCBjYW0xLCBfUEFHRV9LRVJORUwsIDApOwogCX0KLQlpZiAoY2FtMikgewotCQl0bGJjYW1faW5kZXgrKzsKLQkJc2V0dGxiY2FtKDIsIFBBR0VfT0ZGU0VUK2NhbTArY2FtMSwgbWVtc3RhcnRfYWRkcitjYW0wK2NhbTEsIGNhbTIsIF9QQUdFX0tFUk5FTCwgMCk7Ci0JfQorCisJcmV0dXJuIHZpcnQgLSBQQUdFX09GRlNFVDsKIH0KIAogLyoKQEAgLTE3NSw1MSArMTc5LDQ2IEBACiAJZmx1c2hfaW5zdHJ1Y3Rpb25fY2FjaGUoKTsKIH0KIAotdW5zaWduZWQgbG9uZyBfX2luaXQgbW11X21hcGluX3JhbSh2b2lkKQotewotCWNhbV9tYXBpbl9yYW0oX19jYW0wLCBfX2NhbTEsIF9fY2FtMik7Ci0KLQlyZXR1cm4gX19jYW0wICsgX19jYW0xICsgX19jYW0yOwotfQotCi0KIHZvaWQgX19pbml0CiBhZGp1c3RfdG90YWxfbG93bWVtKHZvaWQpCiB7Ci0JcGh5c19hZGRyX3QgbWF4X2xvd21lbV9zaXplID0gX19tYXhfbG93X21lbW9yeTsKLQlwaHlzX2FkZHJfdCBjYW1fbWF4X3NpemUgPSAweDEwMDAwMDAwOwogCXBoeXNfYWRkcl90IHJhbTsKKwl1bnNpZ25lZCBpbnQgbWF4X2NhbSA9IChtZnNwcihTUFJOX1RMQjFDRkcpID4+IDE2KSAmIDB4ZmY7CisJY2hhciBidWZbQVJSQVlfU0laRShjYW0pICogNSArIDFdLCAqcCA9IGJ1ZjsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHZpcnQgPSBQQUdFX09GRlNFVCAmIDB4ZmZmZmZmZmZVTDsKKwl1bnNpZ25lZCBsb25nIHBoeXMgPSBtZW1zdGFydF9hZGRyICYgMHhmZmZmZmZmZlVMOwogCi0JLyogYWRqdXN0IENBTSBzaXplIHRvIG1heF9sb3dtZW1fc2l6ZSAqLwotCWlmIChtYXhfbG93bWVtX3NpemUgPCBjYW1fbWF4X3NpemUpCi0JCWNhbV9tYXhfc2l6ZSA9IG1heF9sb3dtZW1fc2l6ZTsKKwkvKiBDb252ZXJ0ICg0Xm1heCkga0IgdG8gKDJebWF4KSBieXRlcyAqLworCW1heF9jYW0gPSBtYXhfY2FtICogMiArIDEwOwogCi0JLyogYWRqdXN0IGxvd21lbSBzaXplIHRvIG1heF9sb3dtZW1fc2l6ZSAqLwotCXJhbSA9IG1pbihtYXhfbG93bWVtX3NpemUsIHRvdGFsX2xvd21lbSk7CisJLyogYWRqdXN0IGxvd21lbSBzaXplIHRvIF9fbWF4X2xvd19tZW1vcnkgKi8KKwlyYW0gPSBtaW4oKHBoeXNfYWRkcl90KV9fbWF4X2xvd19tZW1vcnksIChwaHlzX2FkZHJfdCl0b3RhbF9sb3dtZW0pOwogCiAJLyogQ2FsY3VsYXRlIENBTSB2YWx1ZXMgKi8KLQlfX2NhbTAgPSAxVUwgPDwgMiAqIChfX2lsb2cyKHJhbSkgLyAyKTsKLQlpZiAoX19jYW0wID4gY2FtX21heF9zaXplKQotCQlfX2NhbTAgPSBjYW1fbWF4X3NpemU7Ci0JcmFtIC09IF9fY2FtMDsKLQlpZiAocmFtKSB7Ci0JCV9fY2FtMSA9IDFVTCA8PCAyICogKF9faWxvZzIocmFtKSAvIDIpOwotCQlpZiAoX19jYW0xID4gY2FtX21heF9zaXplKQotCQkJX19jYW0xID0gY2FtX21heF9zaXplOwotCQlyYW0gLT0gX19jYW0xOwotCX0KLQlpZiAocmFtKSB7Ci0JCV9fY2FtMiA9IDFVTCA8PCAyICogKF9faWxvZzIocmFtKSAvIDIpOwotCQlpZiAoX19jYW0yID4gY2FtX21heF9zaXplKQotCQkJX19jYW0yID0gY2FtX21heF9zaXplOwotCQlyYW0gLT0gX19jYW0yOwotCX0KKwlfX21heF9sb3dfbWVtb3J5ID0gMDsKKwlmb3IgKGkgPSAwOyByYW0gJiYgaSA8IEFSUkFZX1NJWkUoY2FtKTsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBjYW1zaXplID0gX19pbG9nMihyYW0pICYgfjFVOworCQl1bnNpZ25lZCBpbnQgYWxpZ24gPSBfX2Zmcyh2aXJ0IHwgcGh5cykgJiB+MVU7CiAKLQlwcmludGsoS0VSTl9JTkZPICJNZW1vcnkgQ0FNIG1hcHBpbmc6IENBTTA9JWxkTWIsIENBTTE9JWxkTWIsIgotCQkJIiBDQU0yPSVsZE1iIHJlc2lkdWFsOiAlbGRNYlxuIiwKLQkJCV9fY2FtMCA+PiAyMCwgX19jYW0xID4+IDIwLCBfX2NhbTIgPj4gMjAsCi0JCQkobG9uZyBpbnQpKCh0b3RhbF9sb3dtZW0gLSBfX2NhbTAgLSBfX2NhbTEgLSBfX2NhbTIpCi0JCQkJICAgPj4gMjApKTsKLQlfX21heF9sb3dfbWVtb3J5ID0gX19jYW0wICsgX19jYW0xICsgX19jYW0yOworCQlpZiAoY2Ftc2l6ZSA+IGFsaWduKQorCQkJY2Ftc2l6ZSA9IGFsaWduOworCQlpZiAoY2Ftc2l6ZSA+IG1heF9jYW0pCisJCQljYW1zaXplID0gbWF4X2NhbTsKKworCQljYW1baV0gPSAxVUwgPDwgY2Ftc2l6ZTsKKwkJcmFtIC09IGNhbVtpXTsKKwkJX19tYXhfbG93X21lbW9yeSArPSBjYW1baV07CisJCXZpcnQgKz0gY2FtW2ldOworCQlwaHlzICs9IGNhbVtpXTsKKworCQlwICs9IHNwcmludGYocCwgIiVsdS8iLCBjYW1baV0gPj4gMjApOworCX0KKwlmb3IgKDsgaSA8IEFSUkFZX1NJWkUoY2FtKTsgaSsrKQorCQlwICs9IHNwcmludGYocCwgIjAvIik7CisJcFstMV0gPSAnXDAnOworCisJcHJfaW5mbygiTWVtb3J5IENBTSBtYXBwaW5nOiAlcyBNYiwgcmVzaWR1YWw6ICVkTWJcbiIsIGJ1ZiwKKwkgICAgICAgICh1bnNpZ25lZCBpbnQpKCh0b3RhbF9sb3dtZW0gLSBfX21heF9sb3dfbWVtb3J5KSA+PiAyMCkpOwogCV9faW5pdGlhbF9tZW1vcnlfbGltaXRfYWRkciA9IG1lbXN0YXJ0X2FkZHIgKyBfX21heF9sb3dfbWVtb3J5OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2d1cC5jIGIvYXJjaC9wb3dlcnBjL21tL2d1cC5jCmluZGV4IDI4YTExNGQuLmJjNDAwYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9ndXAuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vZ3VwLmMKQEAgLTE0LDYgKzE0LDggQEAKICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKKyNpZmRlZiBfX0hBVkVfQVJDSF9QVEVfU1BFQ0lBTAorCiAvKgogICogVGhlIHBlcmZvcm1hbmNlIGNyaXRpY2FsIGxlYWYgZnVuY3Rpb25zIGFyZSBtYWRlIG5vaW5saW5lIG90aGVyd2lzZSBnY2MKICAqIGlubGluZXMgZXZlcnl0aGluZyBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uIHdoaWNoIHJlc3VsdHMgaW4gdG9vIG11Y2gKQEAgLTE1MSw4ICsxNTMsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHIsIGxlbiwgZW5kOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKIAlwZ2RfdCAqcGdkcDsKLQlpbnQgcHNpemUsIG5yID0gMDsKKwlpbnQgbnIgPSAwOworI2lmZGVmIENPTkZJR19QUEM2NAogCXVuc2lnbmVkIGludCBzaGlmdDsKKwlpbnQgcHNpemU7CisjZW5kaWYKIAogCXByX2RlYnVnKCIlcyglbHgsJXgsJXMpXG4iLCBfX2Z1bmNfXywgc3RhcnQsIG5yX3BhZ2VzLCB3cml0ZSA/ICJ3cml0ZSIgOiAicmVhZCIpOwogCkBAIC0yMDUsOCArMjEwLDEzIEBACiAJICovCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAorI2lmZGVmIENPTkZJR19QUEM2NAorCS8qIFRob3NlIGJpdHMgYXJlIHJlbGF0ZWQgdG8gaHVnZXRsYmZzIGltcGxlbWVudGF0aW9uIGFuZCBvbmx5IGV4aXN0CisJICogb24gNjQtYml0IGZvciBub3cKKwkgKi8KIAlwc2l6ZSA9IGdldF9zbGljZV9wc2l6ZShtbSwgYWRkcik7CiAJc2hpZnQgPSBtbXVfcHNpemVfZGVmc1twc2l6ZV0uc2hpZnQ7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAJaWYgKHVubGlrZWx5KG1tdV9odWdlX3BzaXplc1twc2l6ZV0pKSB7CkBAIC0yMzYsNyArMjQ2LDkgQEAKIAkJZG8gewogCQkJcGdkX3QgcGdkID0gKnBnZHA7CiAKKyNpZmRlZiBDT05GSUdfUFBDNjQKIAkJCVZNX0JVR19PTihzaGlmdCAhPSBtbXVfcHNpemVfZGVmc1tnZXRfc2xpY2VfcHNpemUobW0sIGFkZHIpXS5zaGlmdCk7CisjZW5kaWYKIAkJCXByX2RlYnVnKCIgICUwMTZseDogbm9ybWFsIHBnZCAlcFxuIiwgYWRkciwKIAkJCQkgKHZvaWQgKilwZ2RfdmFsKHBnZCkpOwogCQkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOwpAQCAtMjc5LDMgKzI5MSw1IEBACiAJCXJldHVybiByZXQ7CiAJfQogfQorCisjZW5kaWYgLyogX19IQVZFX0FSQ0hfUFRFX1NQRUNJQUwgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCmluZGV4IDhkNWI0NzUuLmRiNTU2ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwpAQCAtNTE2LDcgKzUxNiw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBodGFiX2dldF90YWJsZV9zaXplKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBtZW1fc2l6ZSwgcm5kX21lbV9zaXplLCBwdGVnX2NvdW50OworCXVuc2lnbmVkIGxvbmcgbWVtX3NpemUsIHJuZF9tZW1fc2l6ZSwgcHRlZ19jb3VudCwgcHNpemU7CiAKIAkvKiBJZiBoYXNoIHNpemUgaXNuJ3QgYWxyZWFkeSBwcm92aWRlZCBieSB0aGUgcGxhdGZvcm0sIHdlIHRyeSB0bwogCSAqIHJldHJpZXZlIGl0IGZyb20gdGhlIGRldmljZS10cmVlLiBJZiBpdCdzIG5vdCB0aGVyZSBuZWl0aGVyLCB3ZQpAQCAtNTM0LDcgKzUzNCw4IEBACiAJCXJuZF9tZW1fc2l6ZSA8PD0gMTsKIAogCS8qICMgcGFnZXMgLyAyICovCi0JcHRlZ19jb3VudCA9IG1heChybmRfbWVtX3NpemUgPj4gKDEyICsgMSksIDFVTCA8PCAxMSk7CisJcHNpemUgPSBtbXVfcHNpemVfZGVmc1ttbXVfdmlydHVhbF9wc2l6ZV0uc2hpZnQ7CisJcHRlZ19jb3VudCA9IG1heChybmRfbWVtX3NpemUgPj4gKHBzaXplICsgMSksIDFVTCA8PCAxMSk7CiAKIAlyZXR1cm4gcHRlZ19jb3VudCA8PCA3OwogfQpAQCAtNTg5LDcgKzU5MCw3IEBACiAJbWFrZV9ibChodGFiX2NhbGxfaHB0ZV91cGRhdGVwcCwgcHBjX21kLmhwdGVfdXBkYXRlcHApOwogfQogCi12b2lkIF9faW5pdCBodGFiX2luaXRpYWxpemUodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBodGFiX2luaXRpYWxpemUodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHRhYmxlOwogCXVuc2lnbmVkIGxvbmcgcHRlZ19jb3VudDsKQEAgLTczMSwxMSArNzMyLDQzIEBACiAjdW5kZWYgS0IKICN1bmRlZiBNQgogCi12b2lkIGh0YWJfaW5pdGlhbGl6ZV9zZWNvbmRhcnkodm9pZCkKK3ZvaWQgX19pbml0IGVhcmx5X2luaXRfbW11KHZvaWQpCiB7CisJLyogU2V0dXAgaW5pdGlhbCBTVEFCIGFkZHJlc3MgaW4gdGhlIFBBQ0EgKi8KKwlnZXRfcGFjYSgpLT5zdGFiX3JlYWwgPSBfX3BhKCh1NjQpJmluaXRpYWxfc3RhYik7CisJZ2V0X3BhY2EoKS0+c3RhYl9hZGRyID0gKHU2NCkmaW5pdGlhbF9zdGFiOworCisJLyogSW5pdGlhbGl6ZSB0aGUgTU1VIEhhc2ggdGFibGUgYW5kIGNyZWF0ZSB0aGUgbGluZWFyIG1hcHBpbmcKKwkgKiBvZiBtZW1vcnkuIEhhcyB0byBiZSBkb25lIGJlZm9yZSBzdGFiL3NsYiBpbml0aWFsaXphdGlvbiBhcworCSAqIHRoaXMgaXMgY3VycmVudGx5IHdoZXJlIHRoZSBwYWdlIHNpemUgZW5jb2RpbmcgaXMgb2J0YWluZWQKKwkgKi8KKwlodGFiX2luaXRpYWxpemUoKTsKKworCS8qIEluaXRpYWxpemUgc3RhYiAvIFNMQiBtYW5hZ2VtZW50IGV4Y2VwdCBvbiBpU2VyaWVzCisJICovCisJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NMQikpCisJCXNsYl9pbml0aWFsaXplKCk7CisJZWxzZSBpZiAoIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpCisJCXN0YWJfaW5pdGlhbGl6ZShnZXRfcGFjYSgpLT5zdGFiX3JlYWwpOworfQorCisjaWZkZWYgQ09ORklHX1NNUAordm9pZCBfX2luaXQgZWFybHlfaW5pdF9tbXVfc2Vjb25kYXJ5KHZvaWQpCit7CisJLyogSW5pdGlhbGl6ZSBoYXNoIHRhYmxlIGZvciB0aGF0IENQVSAqLwogCWlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKIAkJbXRzcHIoU1BSTl9TRFIxLCBfU0RSMSk7CisKKwkvKiBJbml0aWFsaXplIFNUQUIvU0xCLiBXZSB1c2UgYSB2aXJ0dWFsIGFkZHJlc3MgYXMgaXQgd29ya3MKKwkgKiBpbiByZWFsIG1vZGUgb24gcFNlcmllcyBhbmQgd2Ugd2FudCBhIHZpcnV0YWwgYWRkcmVzcyBvbgorCSAqIGlTZXJpZXMgYW55d2F5CisJICovCisJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NMQikpCisJCXNsYl9pbml0aWFsaXplKCk7CisJZWxzZQorCQlzdGFiX2luaXRpYWxpemUoZ2V0X3BhY2EoKS0+c3RhYl9hZGRyKTsKIH0KKyNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIC8qCiAgKiBDYWxsZWQgYnkgYXNtIGhhc2h0YWJsZS5TIGZvciBkb2luZyBsYXp5IGljYWNoZSBmbHVzaApAQCAtODU4LDcgKzg5MSw3IEBACiAJdW5zaWduZWQgbG9uZyB2c2lkOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCXB0ZV90ICpwdGVwOwotCWNwdW1hc2tfdCB0bXA7CisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKnRtcDsKIAlpbnQgcmMsIHVzZXJfcmVnaW9uID0gMCwgbG9jYWwgPSAwOwogCWludCBwc2l6ZSwgc3NpemU7CiAKQEAgLTkwNiw4ICs5MzksOCBAQAogCQlyZXR1cm4gMTsKIAogCS8qIENoZWNrIENQVSBsb2NhbGl0eSAqLwotCXRtcCA9IGNwdW1hc2tfb2ZfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JaWYgKHVzZXJfcmVnaW9uICYmIGNwdXNfZXF1YWwobW0tPmNwdV92bV9tYXNrLCB0bXApKQorCXRtcCA9IGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlpZiAodXNlcl9yZWdpb24gJiYgY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgdG1wKSkKIAkJbG9jYWwgPSAxOwogCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQpAQCAtMTAyMyw3ICsxMDU2LDYgQEAKIAl1bnNpZ25lZCBsb25nIHZzaWQ7CiAJdm9pZCAqcGdkaXI7CiAJcHRlX3QgKnB0ZXA7Ci0JY3B1bWFza190IG1hc2s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgbG9jYWwgPSAwOwogCWludCBzc2l6ZTsKQEAgLTEwNjYsOCArMTA5OCw3IEBACiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCiAJLyogSXMgdGhhdCBsb2NhbCB0byB0aGlzIENQVSA/ICovCi0JbWFzayA9IGNwdW1hc2tfb2ZfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JaWYgKGNwdXNfZXF1YWwobW0tPmNwdV92bV9tYXNrLCBtYXNrKSkKKwlpZiAoY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSkKIAkJbG9jYWwgPSAxOwogCiAJLyogSGFzaCBpdCBpbiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21lbS5jIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCmluZGV4IGYwMGYwOWEuLmY2NjhmYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKQEAgLTQ3Miw0MCArNDcyLDcgQEAKIHsKICNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVUKIAl1bnNpZ25lZCBsb25nIGFjY2VzcyA9IDAsIHRyYXA7Ci0jZW5kaWYKLQl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRlKTsKIAotCS8qIGhhbmRsZSBpLWNhY2hlIGNvaGVyZW5jeSAqLwotCWlmICghY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFKSAmJgotCSAgICAhY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfTk9FWEVDVVRFKSAmJgotCSAgICBwZm5fdmFsaWQocGZuKSkgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0jaWZkZWYgQ09ORklHXzh4eAotCQkvKiBPbiA4eHgsIGNhY2hlIGNvbnRyb2wgaW5zdHJ1Y3Rpb25zIChwYXJ0aWN1bGFybHkKLQkJICogImRjYnN0IiBmcm9tIGZsdXNoX2RjYWNoZV9pY2FjaGUpIGZhdWx0IGFzIHdyaXRlCi0JCSAqIG9wZXJhdGlvbiBpZiB0aGVyZSBpcyBhbiB1bnBvcHVsYXRlZCBUTEIgZW50cnkKLQkJICogZm9yIHRoZSBhZGRyZXNzIGluIHF1ZXN0aW9uLiBUbyB3b3JrYXJvdW5kIHRoYXQsCi0JCSAqIHdlIGludmFsaWRhdGUgdGhlIFRMQiBoZXJlLCB0aHVzIGF2b2lkaW5nIGRjYnN0Ci0JCSAqIG1pc2JlaGF2aW91ci4KLQkJICovCi0JCV90bGJpbF92YShhZGRyZXNzLCAwIC8qIDh4eCBkb2Vzbid0IGNhcmUgYWJvdXQgUElEICovKTsKLSNlbmRpZgotCQkvKiBUaGUgX1BBR0VfVVNFUiB0ZXN0IHNob3VsZCByZWFsbHkgYmUgX1BBR0VfRVhFQywgYnV0Ci0JCSAqIG9sZGVyIGdsaWJjIHZlcnNpb25zIGV4ZWN1dGUgc29tZSBjb2RlIGZyb20gbm8tZXhlYwotCQkgKiBwYWdlcywgd2hpY2ggZm9yIG5vdyB3ZSBhcmUgc3VwcG9ydGluZy4gIElmIGV4ZWMtb25seQotCQkgKiBwYWdlcyBhcmUgZXZlciBpbXBsZW1lbnRlZCwgdGhpcyB3aWxsIGhhdmUgdG8gY2hhbmdlLgotCQkgKi8KLQkJaWYgKCFQYWdlUmVzZXJ2ZWQocGFnZSkgJiYgKHB0ZV92YWwocHRlKSAmIF9QQUdFX1VTRVIpCi0JCSAgICAmJiAhdGVzdF9iaXQoUEdfYXJjaF8xLCAmcGFnZS0+ZmxhZ3MpKSB7Ci0JCQlpZiAodm1hLT52bV9tbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pIHsKLQkJCQlfX2ZsdXNoX2RjYWNoZV9pY2FjaGUoKHZvaWQgKikgYWRkcmVzcyk7Ci0JCQl9IGVsc2UKLQkJCQlmbHVzaF9kY2FjaGVfaWNhY2hlX3BhZ2UocGFnZSk7Ci0JCQlzZXRfYml0KFBHX2FyY2hfMSwgJnBhZ2UtPmZsYWdzKTsKLQkJfQotCX0KLQotI2lmZGVmIENPTkZJR19QUENfU1REX01NVQogCS8qIFdlIG9ubHkgd2FudCBIUFRFcyBmb3IgbGludXggUFRFcyB0aGF0IGhhdmUgX1BBR0VfQUNDRVNTRUQgc2V0ICovCiAJaWYgKCFwdGVfeW91bmcocHRlKSB8fCBhZGRyZXNzID49IFRBU0tfU0laRSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tYXAuYyBiL2FyY2gvcG93ZXJwYy9tbS9tbWFwXzY0LmMKc2ltaWxhcml0eSBpbmRleCA2NCUKcmVuYW1lIGZyb20gYXJjaC9wb3dlcnBjL21tL21tYXAuYwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL21tL21tYXBfNjQuYwppbmRleCA4NjAxMGZjLi4wZDk1N2E0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbW1hcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tbWFwXzY0LmMKQEAgLTI0LDE2ICsyNCw1NyBAQAogCiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIC8qCiAgKiBUb3Agb2YgbW1hcCBhcmVhIChqdXN0IGJlbG93IHRoZSBwcm9jZXNzIHN0YWNrKS4KICAqCi0gKiBMZWF2ZSBhbiBhdCBsZWFzdCB+MTI4IE1CIGhvbGUuCisgKiBMZWF2ZSBhdCBsZWFzdCBhIH4xMjggTUIgaG9sZSBvbiAzMmJpdCBhcHBsaWNhdGlvbnMuCisgKgorICogT24gNjRiaXQgYXBwbGljYXRpb25zIHdlIHJhbmRvbWlzZSB0aGUgc3RhY2sgYnkgMUdCIHNvIHdlIG5lZWQgdG8KKyAqIHNwYWNlIG91ciBtbWFwIHN0YXJ0IGFkZHJlc3MgYnkgYSBmdXJ0aGVyIDFHQiwgb3RoZXJ3aXNlIHRoZXJlIGlzIGEKKyAqIGNoYW5jZSB0aGUgbW1hcCBhcmVhIHdpbGwgZW5kIHVwIGNsb3NlciB0byB0aGUgc3RhY2sgdGhhbiBvdXIgdWxpbWl0CisgKiByZXF1aXJlcy4KICAqLwotI2RlZmluZSBNSU5fR0FQICgxMjgqMTAyNCoxMDI0KQorI2RlZmluZSBNSU5fR0FQMzIgKDEyOCoxMDI0KjEwMjQpCisjZGVmaW5lIE1JTl9HQVA2NCAoKDEyOCArIDEwMjQpKjEwMjQqMTAyNFVMKQorI2RlZmluZSBNSU5fR0FQICgoaXNfMzJiaXRfdGFzaygpKSA/IE1JTl9HQVAzMiA6IE1JTl9HQVA2NCkKICNkZWZpbmUgTUFYX0dBUCAoVEFTS19TSVpFLzYqNSkKIAorc3RhdGljIGlubGluZSBpbnQgbW1hcF9pc19sZWdhY3kodm9pZCkKK3sKKwlpZiAoY3VycmVudC0+cGVyc29uYWxpdHkgJiBBRERSX0NPTVBBVF9MQVlPVVQpCisJCXJldHVybiAxOworCisJaWYgKGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfU1RBQ0tdLnJsaW1fY3VyID09IFJMSU1fSU5GSU5JVFkpCisJCXJldHVybiAxOworCisJcmV0dXJuIHN5c2N0bF9sZWdhY3lfdmFfbGF5b3V0OworfQorCisvKgorICogU2luY2UgZ2V0X3JhbmRvbV9pbnQoKSByZXR1cm5zIHRoZSBzYW1lIHZhbHVlIHdpdGhpbiBhIDEgamlmZnkgd2luZG93LAorICogd2Ugd2lsbCBhbG1vc3QgYWx3YXlzIGdldCB0aGUgc2FtZSByYW5kb21pc2F0aW9uIGZvciB0aGUgc3RhY2sgYW5kIG1tYXAKKyAqIHJlZ2lvbi4gVGhpcyB3aWxsIG1lYW4gdGhlIHJlbGF0aXZlIGRpc3RhbmNlIGJldHdlZW4gc3RhY2sgYW5kIG1tYXAgd2lsbAorICogYmUgdGhlIHNhbWUuCisgKgorICogVG8gYXZvaWQgdGhpcyB3ZSBjYW4gc2hpZnQgdGhlIHJhbmRvbW5lc3MgYnkgMSBiaXQuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1tYXBfcm5kKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBybmQgPSAwOworCisJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfUkFORE9NSVpFKSB7CisJCS8qIDhNQiBmb3IgMzJiaXQsIDFHQiBmb3IgNjRiaXQgKi8KKwkJaWYgKGlzXzMyYml0X3Rhc2soKSkKKwkJCXJuZCA9IChsb25nKShnZXRfcmFuZG9tX2ludCgpICUgKDE8PCgyMi1QQUdFX1NISUZUKSkpOworCQllbHNlCisJCQlybmQgPSAobG9uZykoZ2V0X3JhbmRvbV9pbnQoKSAlICgxPDwoMjktUEFHRV9TSElGVCkpKTsKKwl9CisJcmV0dXJuIChybmQgPDwgUEFHRV9TSElGVCkgKiAyOworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW1hcF9iYXNlKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBnYXAgPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX1NUQUNLXS5ybGltX2N1cjsKQEAgLTQzLDI0ICs4NCw3IEBACiAJZWxzZSBpZiAoZ2FwID4gTUFYX0dBUCkKIAkJZ2FwID0gTUFYX0dBUDsKIAotCXJldHVybiBUQVNLX1NJWkUgLSAoZ2FwICYgUEFHRV9NQVNLKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbW1hcF9pc19sZWdhY3kodm9pZCkKLXsKLQkvKgotCSAqIEZvcmNlIHN0YW5kYXJkIGFsbG9jYXRpb24gZm9yIDY0IGJpdCBwcm9ncmFtcy4KLQkgKi8KLQlpZiAoIXRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoY3VycmVudC0+cGVyc29uYWxpdHkgJiBBRERSX0NPTVBBVF9MQVlPVVQpCi0JCXJldHVybiAxOwotCi0JaWYgKGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfU1RBQ0tdLnJsaW1fY3VyID09IFJMSU1fSU5GSU5JVFkpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIHN5c2N0bF9sZWdhY3lfdmFfbGF5b3V0OworCXJldHVybiBQQUdFX0FMSUdOKFRBU0tfU0laRSAtIGdhcCAtIG1tYXBfcm5kKCkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCmluZGV4IDUyYTBjZmMuLmE3MGUzMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAkJbW0tPmNvbnRleHQuaWQgPSBNTVVfTk9fQ09OVEVYVDsKIAogCQkvKiBNYXJrIGl0IHN0YWxlIG9uIGFsbCBDUFVzIHRoYXQgdXNlZCB0aGlzIG1tICovCi0JCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgbW0tPmNwdV92bV9tYXNrKQorCQlmb3JfZWFjaF9jcHUoY3B1LCBtbV9jcHVtYXNrKG1tKSkKIAkJCV9fc2V0X2JpdChpZCwgc3RhbGVfbWFwW2NwdV0pOwogCQlyZXR1cm4gaWQ7CiAJfQpAQCAtMzgwLDcgKzM4MCw3IEBACiAjZW5kaWYKIAogCXByaW50ayhLRVJOX0lORk8KLQkgICAgICAgIk1NVTogQWxsb2NhdGVkICVkIGJ5dGVzIG9mIGNvbnRleHQgbWFwcyBmb3IgJWQgY29udGV4dHNcbiIsCisJICAgICAgICJNTVU6IEFsbG9jYXRlZCAlenUgYnl0ZXMgb2YgY29udGV4dCBtYXBzIGZvciAlZCBjb250ZXh0c1xuIiwKIAkgICAgICAgMiAqIENUWF9NQVBfU0laRSArIChzaXplb2Yodm9pZCAqKSAqIChsYXN0X2NvbnRleHQgKyAxKSksCiAJICAgICAgIGxhc3RfY29udGV4dCAtIGZpcnN0X2NvbnRleHQgKyAxKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL251bWEuYyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKaW5kZXggNWFjMDhiOC4uOTA0NzE0NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL251bWEuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCkBAIC0xNTgsMzUgKzE1OCw2IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKiBfX2NwdWluaXQgZmluZF9jcHVfbm9kZSh1bnNpZ25lZCBpbnQgY3B1KQotewotCXVuc2lnbmVkIGludCBod19jcHVpZCA9IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoY3B1KTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdV9ub2RlID0gTlVMTDsKLQljb25zdCB1bnNpZ25lZCBpbnQgKmludGVycnVwdF9zZXJ2ZXIsICpyZWc7Ci0JaW50IGxlbjsKLQotCXdoaWxlICgoY3B1X25vZGUgPSBvZl9maW5kX25vZGVfYnlfdHlwZShjcHVfbm9kZSwgImNwdSIpKSAhPSBOVUxMKSB7Ci0JCS8qIFRyeSBpbnRlcnJ1cHQgc2VydmVyIGZpcnN0ICovCi0JCWludGVycnVwdF9zZXJ2ZXIgPSBvZl9nZXRfcHJvcGVydHkoY3B1X25vZGUsCi0JCQkJCSJpYm0scHBjLWludGVycnVwdC1zZXJ2ZXIjcyIsICZsZW4pOwotCi0JCWxlbiA9IGxlbiAvIHNpemVvZih1MzIpOwotCi0JCWlmIChpbnRlcnJ1cHRfc2VydmVyICYmIChsZW4gPiAwKSkgewotCQkJd2hpbGUgKGxlbi0tKSB7Ci0JCQkJaWYgKGludGVycnVwdF9zZXJ2ZXJbbGVuXSA9PSBod19jcHVpZCkKLQkJCQkJcmV0dXJuIGNwdV9ub2RlOwotCQkJfQotCQl9IGVsc2UgewotCQkJcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KGNwdV9ub2RlLCAicmVnIiwgJmxlbik7Ci0JCQlpZiAocmVnICYmIChsZW4gPiAwKSAmJiAocmVnWzBdID09IGh3X2NwdWlkKSkKLQkJCQlyZXR1cm4gY3B1X25vZGU7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogLyogbXVzdCBob2xkIHJlZmVyZW5jZSB0byBub2RlIGR1cmluZyBjYWxsICovCiBzdGF0aWMgY29uc3QgaW50ICpvZl9nZXRfYXNzb2NpYXRpdml0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldikKIHsKQEAgLTI5MCw3ICsyNjEsNyBAQAogCXJlZl9wb2ludHMgPSBvZl9nZXRfcHJvcGVydHkocnRhc19yb290LAogCQkJImlibSxhc3NvY2lhdGl2aXR5LXJlZmVyZW5jZS1wb2ludHMiLCAmbGVuKTsKIAotCWlmICgobGVuID49IDEpICYmIHJlZl9wb2ludHMpIHsKKwlpZiAoKGxlbiA+PSAyICogc2l6ZW9mKHVuc2lnbmVkIGludCkpICYmIHJlZl9wb2ludHMpIHsKIAkJZGVwdGggPSByZWZfcG9pbnRzWzFdOwogCX0gZWxzZSB7CiAJCWRiZygiTlVNQTogaWJtLGFzc29jaWF0aXZpdHktcmVmZXJlbmNlLXBvaW50cyBub3QgZm91bmQuXG4iKTsKQEAgLTQ3MCw3ICs0NDEsNyBAQAogc3RhdGljIGludCBfX2NwdWluaXQgbnVtYV9zZXR1cF9jcHUodW5zaWduZWQgbG9uZyBsY3B1KQogewogCWludCBuaWQgPSAwOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1ID0gZmluZF9jcHVfbm9kZShsY3B1KTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdSA9IG9mX2dldF9jcHVfbm9kZShsY3B1LCBOVUxMKTsKIAogCWlmICghY3B1KSB7CiAJCVdBUk5fT04oMSk7CkBAIC02NTIsNyArNjIzLDcgQEAKIAlmb3JfZWFjaF9wcmVzZW50X2NwdShpKSB7CiAJCWludCBuaWQ7CiAKLQkJY3B1ID0gZmluZF9jcHVfbm9kZShpKTsKKwkJY3B1ID0gb2ZfZ2V0X2NwdV9ub2RlKGksIE5VTEwpOwogCQlCVUdfT04oIWNwdSk7CiAJCW5pZCA9IG9mX25vZGVfdG9fbmlkX3NpbmdsZShjcHUpOwogCQlvZl9ub2RlX3B1dChjcHUpOwpAQCAtMTA0MSw1NyArMTAxMiwzMiBAQAogCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCiAvKgotICogVmFsaWRhdGUgdGhlIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZW1vcnkgc2VjdGlvbiB3ZSBhcmUKLSAqIHRyeWluZyB0byBhZGQuCi0gKi8KLWludCB2YWxpZF9ob3RfYWRkX3NjbihpbnQgKm5pZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdTMyIGxtYl9zaXplLAotCQkgICAgICB1bnNpZ25lZCBsb25nIHNjbl9hZGRyKQotewotCW5vZGVtYXNrX3Qgbm9kZXM7Ci0KLQlpZiAoKm5pZCA8IDAgfHwgIW5vZGVfb25saW5lKCpuaWQpKQotCQkqbmlkID0gYW55X29ubGluZV9ub2RlKE5PREVfTUFTS19BTEwpOwotCi0JaWYgKChzY25fYWRkciA+PSBzdGFydCkgJiYgKHNjbl9hZGRyIDwgKHN0YXJ0ICsgbG1iX3NpemUpKSkgewotCQlub2Rlc19zZXRhbGwobm9kZXMpOwotCQl3aGlsZSAoTk9ERV9EQVRBKCpuaWQpLT5ub2RlX3NwYW5uZWRfcGFnZXMgPT0gMCkgewotCQkJbm9kZV9jbGVhcigqbmlkLCBub2Rlcyk7Ci0JCQkqbmlkID0gYW55X29ubGluZV9ub2RlKG5vZGVzKTsKLQkJfQotCi0JCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogRmluZCB0aGUgbm9kZSBhc3NvY2lhdGVkIHdpdGggYSBob3QgYWRkZWQgbWVtb3J5IHNlY3Rpb24gcmVwcmVzZW50ZWQKLSAqIGJ5IHRoZSBpYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5IG5vZGUuCisgKiBGaW5kIHRoZSBub2RlIGFzc29jaWF0ZWQgd2l0aCBhIGhvdCBhZGRlZCBtZW1vcnkgc2VjdGlvbiBmb3IKKyAqIG1lbW9yeSByZXByZXNlbnRlZCBpbiB0aGUgZGV2aWNlIHRyZWUgYnkgdGhlIHByb3BlcnR5CisgKiBpYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5L2libSxkeW5hbWljLW1lbW9yeS4KICAqLwogc3RhdGljIGludCBob3RfYWRkX2RyY29uZl9zY25fdG9fbmlkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWVtb3J5LAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzY25fYWRkcikKIHsKIAljb25zdCB1MzIgKmRtOwotCXVuc2lnbmVkIGludCBuLCByYzsKKwl1bnNpZ25lZCBpbnQgZHJjb25mX2NlbGxfY250LCByYzsKIAl1bnNpZ25lZCBsb25nIGxtYl9zaXplOwotCWludCBkZWZhdWx0X25pZCA9IGFueV9vbmxpbmVfbm9kZShOT0RFX01BU0tfQUxMKTsKLQlpbnQgbmlkOwogCXN0cnVjdCBhc3NvY19hcnJheXMgYWE7CisJaW50IG5pZCA9IC0xOwogCi0JbiA9IG9mX2dldF9kcmNvbmZfbWVtb3J5KG1lbW9yeSwgJmRtKTsKLQlpZiAoIW4pCi0JCXJldHVybiBkZWZhdWx0X25pZDs7CisJZHJjb25mX2NlbGxfY250ID0gb2ZfZ2V0X2RyY29uZl9tZW1vcnkobWVtb3J5LCAmZG0pOworCWlmICghZHJjb25mX2NlbGxfY250KQorCQlyZXR1cm4gLTE7CiAKIAlsbWJfc2l6ZSA9IG9mX2dldF9sbWJfc2l6ZShtZW1vcnkpOwogCWlmICghbG1iX3NpemUpCi0JCXJldHVybiBkZWZhdWx0X25pZDsKKwkJcmV0dXJuIC0xOwogCiAJcmMgPSBvZl9nZXRfYXNzb2NfYXJyYXlzKG1lbW9yeSwgJmFhKTsKIAlpZiAocmMpCi0JCXJldHVybiBkZWZhdWx0X25pZDsKKwkJcmV0dXJuIC0xOwogCi0JZm9yICg7IG4gIT0gMDsgLS1uKSB7CisJZm9yICg7IGRyY29uZl9jZWxsX2NudCAhPSAwOyAtLWRyY29uZl9jZWxsX2NudCkgewogCQlzdHJ1Y3Qgb2ZfZHJjb25mX2NlbGwgZHJtZW07CiAKIAkJcmVhZF9kcmNvbmZfY2VsbCgmZHJtZW0sICZkbSk7CkBAIC0xMTAyLDM2ICsxMDQ4LDI2IEBACiAJCSAgICB8fCAhKGRybWVtLmZsYWdzICYgRFJDT05GX01FTV9BU1NJR05FRCkpCiAJCQljb250aW51ZTsKIAotCQluaWQgPSBvZl9kcmNvbmZfdG9fbmlkX3NpbmdsZSgmZHJtZW0sICZhYSk7CisJCWlmICgoc2NuX2FkZHIgPCBkcm1lbS5iYXNlX2FkZHIpCisJCSAgICB8fCAoc2NuX2FkZHIgPj0gKGRybWVtLmJhc2VfYWRkciArIGxtYl9zaXplKSkpCisJCQljb250aW51ZTsKIAotCQlpZiAodmFsaWRfaG90X2FkZF9zY24oJm5pZCwgZHJtZW0uYmFzZV9hZGRyLCBsbWJfc2l6ZSwKLQkJCQkgICAgICBzY25fYWRkcikpCi0JCQlyZXR1cm4gbmlkOworCQluaWQgPSBvZl9kcmNvbmZfdG9fbmlkX3NpbmdsZSgmZHJtZW0sICZhYSk7CisJCWJyZWFrOwogCX0KIAotCUJVRygpOwkvKiBzZWN0aW9uIGFkZHJlc3Mgc2hvdWxkIGJlIGZvdW5kIGFib3ZlICovCi0JcmV0dXJuIDA7CisJcmV0dXJuIG5pZDsKIH0KIAogLyoKLSAqIEZpbmQgdGhlIG5vZGUgYXNzb2NpYXRlZCB3aXRoIGEgaG90IGFkZGVkIG1lbW9yeSBzZWN0aW9uLiAgU2VjdGlvbgotICogY29ycmVzcG9uZHMgdG8gYSBTUEFSU0VNRU0gc2VjdGlvbiwgbm90IGFuIExNQi4gIEl0IGlzIGFzc3VtZWQgdGhhdAotICogc2VjdGlvbnMgYXJlIGZ1bGx5IGNvbnRhaW5lZCB3aXRoaW4gYSBzaW5nbGUgTE1CLgorICogRmluZCB0aGUgbm9kZSBhc3NvY2lhdGVkIHdpdGggYSBob3QgYWRkZWQgbWVtb3J5IHNlY3Rpb24gZm9yIG1lbW9yeQorICogcmVwcmVzZW50ZWQgaW4gdGhlIGRldmljZSB0cmVlIGFzIGEgbm9kZSAoaS5lLiBtZW1vcnlAWFhYWCkgZm9yCisgKiBlYWNoIGxtYi4KICAqLwotaW50IGhvdF9hZGRfc2NuX3RvX25pZCh1bnNpZ25lZCBsb25nIHNjbl9hZGRyKQoraW50IGhvdF9hZGRfbm9kZV9zY25fdG9fbmlkKHVuc2lnbmVkIGxvbmcgc2NuX2FkZHIpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICptZW1vcnkgPSBOVUxMOwotCWludCBuaWQ7Ci0KLQlpZiAoIW51bWFfZW5hYmxlZCB8fCAobWluX2NvbW1vbl9kZXB0aCA8IDApKQotCQlyZXR1cm4gYW55X29ubGluZV9ub2RlKE5PREVfTUFTS19BTEwpOwotCi0JbWVtb3J5ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9pYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5Iik7Ci0JaWYgKG1lbW9yeSkgewotCQluaWQgPSBob3RfYWRkX2RyY29uZl9zY25fdG9fbmlkKG1lbW9yeSwgc2NuX2FkZHIpOwotCQlvZl9ub2RlX3B1dChtZW1vcnkpOwotCQlyZXR1cm4gbmlkOwotCX0KKwlpbnQgbmlkID0gLTE7CiAKIAl3aGlsZSAoKG1lbW9yeSA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKG1lbW9yeSwgIm1lbW9yeSIpKSAhPSBOVUxMKSB7CiAJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemU7CkBAIC0xMTQ1LDIwICsxMDgxLDYyIEBACiAKIAkJLyogcmFuZ2VzIGluIGNlbGwgKi8KIAkJcmFuZ2VzID0gKGxlbiA+PiAyKSAvIChuX21lbV9hZGRyX2NlbGxzICsgbl9tZW1fc2l6ZV9jZWxscyk7Ci1oYV9uZXdfcmFuZ2U6Ci0JCXN0YXJ0ID0gcmVhZF9uX2NlbGxzKG5fbWVtX2FkZHJfY2VsbHMsICZtZW1jZWxsX2J1Zik7Ci0JCXNpemUgPSByZWFkX25fY2VsbHMobl9tZW1fc2l6ZV9jZWxscywgJm1lbWNlbGxfYnVmKTsKLQkJbmlkID0gb2Zfbm9kZV90b19uaWRfc2luZ2xlKG1lbW9yeSk7CiAKLQkJaWYgKHZhbGlkX2hvdF9hZGRfc2NuKCZuaWQsIHN0YXJ0LCBzaXplLCBzY25fYWRkcikpIHsKLQkJCW9mX25vZGVfcHV0KG1lbW9yeSk7Ci0JCQlyZXR1cm4gbmlkOworCQl3aGlsZSAocmFuZ2VzLS0pIHsKKwkJCXN0YXJ0ID0gcmVhZF9uX2NlbGxzKG5fbWVtX2FkZHJfY2VsbHMsICZtZW1jZWxsX2J1Zik7CisJCQlzaXplID0gcmVhZF9uX2NlbGxzKG5fbWVtX3NpemVfY2VsbHMsICZtZW1jZWxsX2J1Zik7CisKKwkJCWlmICgoc2NuX2FkZHIgPCBzdGFydCkgfHwgKHNjbl9hZGRyID49IChzdGFydCArIHNpemUpKSkKKwkJCQljb250aW51ZTsKKworCQkJbmlkID0gb2Zfbm9kZV90b19uaWRfc2luZ2xlKG1lbW9yeSk7CisJCQlicmVhazsKIAkJfQogCi0JCWlmICgtLXJhbmdlcykJCS8qIHByb2Nlc3MgYWxsIHJhbmdlcyBpbiBjZWxsICovCi0JCQlnb3RvIGhhX25ld19yYW5nZTsKKwkJb2Zfbm9kZV9wdXQobWVtb3J5KTsKKwkJaWYgKG5pZCA+PSAwKQorCQkJYnJlYWs7CiAJfQotCUJVRygpOwkvKiBzZWN0aW9uIGFkZHJlc3Mgc2hvdWxkIGJlIGZvdW5kIGFib3ZlICovCi0JcmV0dXJuIDA7CisKKwlyZXR1cm4gbmlkOwogfQorCisvKgorICogRmluZCB0aGUgbm9kZSBhc3NvY2lhdGVkIHdpdGggYSBob3QgYWRkZWQgbWVtb3J5IHNlY3Rpb24uICBTZWN0aW9uCisgKiBjb3JyZXNwb25kcyB0byBhIFNQQVJTRU1FTSBzZWN0aW9uLCBub3QgYW4gTE1CLiAgSXQgaXMgYXNzdW1lZCB0aGF0CisgKiBzZWN0aW9ucyBhcmUgZnVsbHkgY29udGFpbmVkIHdpdGhpbiBhIHNpbmdsZSBMTUIuCisgKi8KK2ludCBob3RfYWRkX3Njbl90b19uaWQodW5zaWduZWQgbG9uZyBzY25fYWRkcikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm1lbW9yeSA9IE5VTEw7CisJaW50IG5pZCwgZm91bmQgPSAwOworCisJaWYgKCFudW1hX2VuYWJsZWQgfHwgKG1pbl9jb21tb25fZGVwdGggPCAwKSkKKwkJcmV0dXJuIGFueV9vbmxpbmVfbm9kZShOT0RFX01BU0tfQUxMKTsKKworCW1lbW9yeSA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvaWJtLGR5bmFtaWMtcmVjb25maWd1cmF0aW9uLW1lbW9yeSIpOworCWlmIChtZW1vcnkpIHsKKwkJbmlkID0gaG90X2FkZF9kcmNvbmZfc2NuX3RvX25pZChtZW1vcnksIHNjbl9hZGRyKTsKKwkJb2Zfbm9kZV9wdXQobWVtb3J5KTsKKwl9IGVsc2UgeworCQluaWQgPSBob3RfYWRkX25vZGVfc2NuX3RvX25pZChzY25fYWRkcik7CisJfQorCisJaWYgKG5pZCA8IDAgfHwgIW5vZGVfb25saW5lKG5pZCkpCisJCW5pZCA9IGFueV9vbmxpbmVfbm9kZShOT0RFX01BU0tfQUxMKTsKKworCWlmIChOT0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzKQorCQlyZXR1cm4gbmlkOworCisJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7CisJCWlmIChOT0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzKSB7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCUJVR19PTighZm91bmQpOworCXJldHVybiBuaWQ7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jCmluZGV4IDZkOTQxMTYuLmY1YzZmZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYwpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgY29tbW9uIHJvdXRpbmVzIGZvciBkZWFsaW5nIHdpdGggZnJlZSBvZiBwYWdlIHRhYmxlcworICogQWxvbmcgd2l0aCBjb21tb24gcGFnZSB0YWJsZSBoYW5kbGluZyBjb2RlCiAgKgogICogIERlcml2ZWQgZnJvbSBhcmNoL3Bvd2VycGMvbW0vdGxiXzY0LmM6CiAgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NiBHYXJ5IFRob21hcyAoZ2R0QGxpbnV4cHBjLm9yZykKQEAgLTgxLDExICs4MiwxMCBAQAogdm9pZCBwZ3RhYmxlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfZnJlZV90IHBnZikKIHsKIAkvKiBUaGlzIGlzIHNhZmUgc2luY2UgdGxiX2dhdGhlcl9tbXUgaGFzIGRpc2FibGVkIHByZWVtcHRpb24gKi8KLSAgICAgICAgY3B1bWFza190IGxvY2FsX2NwdW1hc2sgPSBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOwogCXN0cnVjdCBwdGVfZnJlZWxpc3RfYmF0Y2ggKipiYXRjaHAgPSAmX19nZXRfY3B1X3ZhcihwdGVfZnJlZWxpc3RfY3VyKTsKIAogCWlmIChhdG9taWNfcmVhZCgmdGxiLT5tbS0+bW1fdXNlcnMpIDwgMiB8fAotCSAgICBjcHVzX2VxdWFsKHRsYi0+bW0tPmNwdV92bV9tYXNrLCBsb2NhbF9jcHVtYXNrKSkgeworCSAgICBjcHVtYXNrX2VxdWFsKG1tX2NwdW1hc2sodGxiLT5tbSksIGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKSkpewogCQlwZ3RhYmxlX2ZyZWUocGdmKTsKIAkJcmV0dXJuOwogCX0KQEAgLTExNSwzICsxMTUsMTMzIEBACiAJcHRlX2ZyZWVfc3VibWl0KCpiYXRjaHApOwogCSpiYXRjaHAgPSBOVUxMOwogfQorCisvKgorICogSGFuZGxlIGkvZCBjYWNoZSBmbHVzaGluZywgY2FsbGVkIGZyb20gc2V0X3B0ZV9hdCgpIG9yIHB0ZXBfc2V0X2FjY2Vzc19mbGFncygpCisgKi8KK3N0YXRpYyBwdGVfdCBkb19kY2FjaGVfaWNhY2hlX2NvaGVyZW5jeShwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBwdGVfcGZuKHB0ZSk7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlpZiAodW5saWtlbHkoIXBmbl92YWxpZChwZm4pKSkKKwkJcmV0dXJuIHB0ZTsKKwlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKKworCWlmICghUGFnZVJlc2VydmVkKHBhZ2UpICYmICF0ZXN0X2JpdChQR19hcmNoXzEsICZwYWdlLT5mbGFncykpIHsKKwkJcHJfZGVidWcoImRvX2RjYWNoZV9pY2FjaGVfY29oZXJlbmN5Li4uIGZsdXNoaW5nXG4iKTsKKwkJZmx1c2hfZGNhY2hlX2ljYWNoZV9wYWdlKHBhZ2UpOworCQlzZXRfYml0KFBHX2FyY2hfMSwgJnBhZ2UtPmZsYWdzKTsKKwl9CisJZWxzZQorCQlwcl9kZWJ1ZygiZG9fZGNhY2hlX2ljYWNoZV9jb2hlcmVuY3kuLi4gYWxyZWFkeSBjbGVhblxuIik7CisJcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0hXRVhFQyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2V4ZWNfZmF1bHQodm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudC0+dGhyZWFkLnJlZ3MgJiYgVFJBUChjdXJyZW50LT50aHJlYWQucmVncykgPT0gMHg0MDA7Cit9CisKKy8qIFdlIG9ubHkgdHJ5IHRvIGRvIGkvZCBjYWNoZSBjb2hlcmVuY3kgb24gc3R1ZmYgdGhhdCBsb29rcyBsaWtlCisgKiByZWFzb25hYmx5ICJub3JtYWwiIFBURXMuIFdlIGN1cnJlbnRseSByZXF1aXJlIGEgUFRFIHRvIGJlIHByZXNlbnQKKyAqIGFuZCB3ZSBhdm9pZCBfUEFHRV9TUEVDSUFMIGFuZCBfUEFHRV9OT19DQUNIRQorICovCitzdGF0aWMgaW5saW5lIGludCBwdGVfbG9va3Nfbm9ybWFsKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gKHB0ZV92YWwocHRlKSAmCisJCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfU1BFQ0lBTCB8IF9QQUdFX05PX0NBQ0hFKSkgPT0KKwkJKF9QQUdFX1BSRVNFTlQpOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfUFBDX1NURF9NTVUpCisvKiBTZXJ2ZXItc3R5bGUgTU1VIGhhbmRsZXMgY29oZXJlbmN5IHdoZW4gaGFzaGluZyBpZiBIVyBleGVjIHBlcm1pc3Npb24KKyAqIGlzIHN1cHBvc2VkIHBlciBwYWdlIChjdXJyZW50bHkgNjQtYml0IG9ubHkpLiBFbHNlLCB3ZSBhbHdheXMgZmx1c2gKKyAqIHZhbGlkIFBURXMgaW4gc2V0X3B0ZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHRlX25lZWRfZXhlY19mbHVzaChwdGVfdCBwdGUsIGludCBzZXRfcHRlKQoreworCXJldHVybiBzZXRfcHRlICYmIHB0ZV9sb29rc19ub3JtYWwocHRlKSAmJgorCQkhKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSkgfHwKKwkJICBjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9OT0VYRUNVVEUpKTsKK30KKyNlbGlmIF9QQUdFX0hXRVhFQyA9PSAwCisvKiBFbWJlZGRlZCB0eXBlIE1NVSB3aXRob3V0IEhXIGV4ZWMgc3VwcG9ydCAoOHh4IG9ubHkgc28gZmFyKSwgd2UgZmx1c2gKKyAqIHRoZSBjYWNoZSBmb3IgYW55IHByZXNlbnQgUFRFCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9uZWVkX2V4ZWNfZmx1c2gocHRlX3QgcHRlLCBpbnQgc2V0X3B0ZSkKK3sKKwlyZXR1cm4gc2V0X3B0ZSAmJiBwdGVfbG9va3Nfbm9ybWFsKHB0ZSk7Cit9CisjZWxzZQorLyogT3RoZXIgZW1iZWRkZWQgQ1BVcyB3aXRoIEhXIGV4ZWMgc3VwcG9ydCBwZXItcGFnZSwgd2UgZmx1c2ggb24gZXhlYworICogZmF1bHQgaWYgSFdFWEVDIGlzIG5vdCBzZXQKKyAqLworc3RhdGljIGlubGluZSBpbnQgcHRlX25lZWRfZXhlY19mbHVzaChwdGVfdCBwdGUsIGludCBzZXRfcHRlKQoreworCXJldHVybiBwdGVfbG9va3Nfbm9ybWFsKHB0ZSkgJiYgaXNfZXhlY19mYXVsdCgpICYmCisJCSEocHRlX3ZhbChwdGUpICYgX1BBR0VfSFdFWEVDKTsKK30KKyNlbmRpZgorCisvKgorICogc2V0X3B0ZSBzdG9yZXMgYSBsaW51eCBQVEUgaW50byB0aGUgbGludXggcGFnZSB0YWJsZS4KKyAqLwordm9pZCBzZXRfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCit7CisjaWZkZWYgQ09ORklHX0RFQlVHX1ZNCisJV0FSTl9PTihwdGVfcHJlc2VudCgqcHRlcCkpOworI2VuZGlmCisJLyogTm90ZTogbW0tPmNvbnRleHQuaWQgbWlnaHQgbm90IHlldCBoYXZlIGJlZW4gYXNzaWduZWQgYXMKKwkgKiB0aGlzIGNvbnRleHQgbWlnaHQgbm90IGhhdmUgYmVlbiBhY3RpdmF0ZWQgeWV0IHdoZW4gdGhpcworCSAqIGlzIGNhbGxlZC4KKwkgKi8KKwlwdGUgPSBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSFBURUZMQUdTKTsKKwlpZiAocHRlX25lZWRfZXhlY19mbHVzaChwdGUsIDEpKQorCQlwdGUgPSBkb19kY2FjaGVfaWNhY2hlX2NvaGVyZW5jeShwdGUpOworCisJLyogUGVyZm9ybSB0aGUgc2V0dGluZyBvZiB0aGUgUFRFICovCisJX19zZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGUsIDApOworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgd2hlbiByZWxheGluZyBhY2Nlc3MgdG8gYSBQVEUuIEl0J3MgYWxzbyBjYWxsZWQgaW4gdGhlIHBhZ2UKKyAqIGZhdWx0IHBhdGggd2hlbiB3ZSBkb24ndCBoaXQgYW55IG9mIHRoZSBtYWpvciBmYXVsdCBjYXNlcywgaWUsIGEgbWlub3IKKyAqIHVwZGF0ZSBvZiBfUEFHRV9BQ0NFU1NFRCwgX1BBR0VfRElSVFksIGV0Yy4uLiBUaGUgZ2VuZXJpYyBjb2RlIHdpbGwgaGF2ZQorICogaGFuZGxlZCB0aG9zZSB0d28gZm9yIHVzLCB3ZSBhZGRpdGlvbmFsbHkgZGVhbCB3aXRoIG1pc3NpbmcgZXhlY3V0ZQorICogcGVybWlzc2lvbiBoZXJlIG9uIHNvbWUgcHJvY2Vzc29ycworICovCitpbnQgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkgIHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSwgaW50IGRpcnR5KQoreworCWludCBjaGFuZ2VkOworCWlmICghZGlydHkgJiYgcHRlX25lZWRfZXhlY19mbHVzaChlbnRyeSwgMCkpCisJCWVudHJ5ID0gZG9fZGNhY2hlX2ljYWNoZV9jb2hlcmVuY3koZW50cnkpOworCWNoYW5nZWQgPSAhcHRlX3NhbWUoKihwdGVwKSwgZW50cnkpOworCWlmIChjaGFuZ2VkKSB7CisJCWFzc2VydF9wdGVfbG9ja2VkKHZtYS0+dm1fbW0sIGFkZHJlc3MpOworCQlfX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhwdGVwLCBlbnRyeSk7CisJCWZsdXNoX3RsYl9wYWdlX25vaGFzaCh2bWEsIGFkZHJlc3MpOworCX0KKwlyZXR1cm4gY2hhbmdlZDsKK30KKworI2lmZGVmIENPTkZJR19ERUJVR19WTQordm9pZCBhc3NlcnRfcHRlX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXBnZF90ICpwZ2Q7CisJcHVkX3QgKnB1ZDsKKwlwbWRfdCAqcG1kOworCisJaWYgKG1tID09ICZpbml0X21tKQorCQlyZXR1cm47CisJcGdkID0gbW0tPnBnZCArIHBnZF9pbmRleChhZGRyKTsKKwlCVUdfT04ocGdkX25vbmUoKnBnZCkpOworCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKKwlCVUdfT04ocHVkX25vbmUoKnB1ZCkpOworCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKKwlCVUdfT04oIXBtZF9wcmVzZW50KCpwbWQpKTsKKwlCVUdfT04oIXNwaW5faXNfbG9ja2VkKHB0ZV9sb2NrcHRyKG1tLCBwbWQpKSk7Cit9CisjZW5kaWYgLyogQ09ORklHX0RFQlVHX1ZNICovCisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCmluZGV4IDU4YmNhZWIuLjQzMGQwOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYwpAQCAtMTI5LDcgKzEyOSw4IEBACiB2b2lkIF9faW9tZW0gKgogaW9yZW1hcChwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JcmV0dXJuIF9faW9yZW1hcChhZGRyLCBzaXplLCBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0dVQVJERUQpOworCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKGFkZHIsIHNpemUsIF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfR1VBUkRFRCwKKwkJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogRVhQT1JUX1NZTUJPTChpb3JlbWFwKTsKIApAQCAtMTQzLDIwICsxNDQsMjcgQEAKIAkvKiB3ZSBkb24ndCB3YW50IHRvIGxldCBfUEFHRV9VU0VSIGFuZCBfUEFHRV9FWEVDIGxlYWsgb3V0ICovCiAJZmxhZ3MgJj0gfihfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQyB8IF9QQUdFX0hXRVhFQyk7CiAKLQlyZXR1cm4gX19pb3JlbWFwKGFkZHIsIHNpemUsIGZsYWdzKTsKKwlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihhZGRyLCBzaXplLCBmbGFncywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0woaW9yZW1hcF9mbGFncyk7CiAKIHZvaWQgX19pb21lbSAqCiBfX2lvcmVtYXAocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogeworCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKGFkZHIsIHNpemUsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworfQorCit2b2lkIF9faW9tZW0gKgorX19pb3JlbWFwX2NhbGxlcihwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCSB2b2lkICpjYWxsZXIpCit7CiAJdW5zaWduZWQgbG9uZyB2LCBpOwogCXBoeXNfYWRkcl90IHA7CiAJaW50IGVycjsKIAogCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBiYXNlIGZsYWdzICovCiAJaWYgKChmbGFncyAmIF9QQUdFX1BSRVNFTlQpID09IDApCi0JCWZsYWdzIHw9IF9QQUdFX0tFUk5FTDsKKwkJZmxhZ3MgfD0gUEFHRV9LRVJORUw7CiAKIAkvKiBOb24tY2FjaGVhYmxlIHBhZ2UgY2Fubm90IGJlIGNvaGVyZW50ICovCiAJaWYgKGZsYWdzICYgX1BBR0VfTk9fQ0FDSEUpCkBAIC0yMTIsNyArMjIwLDcgQEAKIAogCWlmIChtZW1faW5pdF9kb25lKSB7CiAJCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7Ci0JCWFyZWEgPSBnZXRfdm1fYXJlYShzaXplLCBWTV9JT1JFTUFQKTsKKwkJYXJlYSA9IGdldF92bV9hcmVhX2NhbGxlcihzaXplLCBWTV9JT1JFTUFQLCBjYWxsZXIpOwogCQlpZiAoYXJlYSA9PSAwKQogCQkJcmV0dXJuIE5VTEw7CiAJCXYgPSAodW5zaWduZWQgbG9uZykgYXJlYS0+YWRkcjsKQEAgLTI4OCw3ICsyOTYsNyBAQAogCXAgPSBtZW1zdGFydF9hZGRyICsgczsKIAlmb3IgKDsgcyA8IHRvdGFsX2xvd21lbTsgcyArPSBQQUdFX1NJWkUpIHsKIAkJa3RleHQgPSAoKGNoYXIgKikgdiA+PSBfc3RleHQgJiYgKGNoYXIgKikgdiA8IGV0ZXh0KTsKLQkJZiA9IGt0ZXh0ID9fUEFHRV9SQU1fVEVYVCA6IF9QQUdFX1JBTTsKKwkJZiA9IGt0ZXh0ID8gUEFHRV9LRVJORUxfVEVYVCA6IFBBR0VfS0VSTkVMOwogCQltYXBfcGFnZSh2LCBwLCBmKTsKICNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVVfMzIKIAkJaWYgKGt0ZXh0KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMKaW5kZXggMzY1ZTYxYS4uYmZhN2RiNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jCkBAIC0xNDQsOCArMTQ0LDggQEAKIAl1bm1hcF9rZXJuZWxfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpZWEsIHNpemUpOwogfQogCi12b2lkIF9faW9tZW0gKiBfX2lvcmVtYXAocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit2b2lkIF9faW9tZW0gKiBfX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjYWxsZXIpCiB7CiAJcGh5c19hZGRyX3QgcGFsaWduZWQ7CiAJdm9pZCBfX2lvbWVtICpyZXQ7CkBAIC0xNjgsOCArMTY4LDkgQEAKIAlpZiAobWVtX2luaXRfZG9uZSkgewogCQlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCi0JCWFyZWEgPSBfX2dldF92bV9hcmVhKHNpemUsIFZNX0lPUkVNQVAsCi0JCQkJICAgICBpb3JlbWFwX2JvdCwgSU9SRU1BUF9FTkQpOworCQlhcmVhID0gX19nZXRfdm1fYXJlYV9jYWxsZXIoc2l6ZSwgVk1fSU9SRU1BUCwKKwkJCQkJICAgIGlvcmVtYXBfYm90LCBJT1JFTUFQX0VORCwKKwkJCQkJICAgIGNhbGxlcik7CiAJCWlmIChhcmVhID09IE5VTEwpCiAJCQlyZXR1cm4gTlVMTDsKIAkJcmV0ID0gX19pb3JlbWFwX2F0KHBhbGlnbmVkLCBhcmVhLT5hZGRyLCBzaXplLCBmbGFncyk7CkBAIC0xODYsMTkgKzE4NywyNyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3ZvaWQgX19pb21lbSAqIF9faW9yZW1hcChwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihhZGRyLCBzaXplLCBmbGFncywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKK30KIAogdm9pZCBfX2lvbWVtICogaW9yZW1hcChwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfR1VBUkRFRDsKKwl2b2lkICpjYWxsZXIgPSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CiAKIAlpZiAocHBjX21kLmlvcmVtYXApCi0JCXJldHVybiBwcGNfbWQuaW9yZW1hcChhZGRyLCBzaXplLCBmbGFncyk7Ci0JcmV0dXJuIF9faW9yZW1hcChhZGRyLCBzaXplLCBmbGFncyk7CisJCXJldHVybiBwcGNfbWQuaW9yZW1hcChhZGRyLCBzaXplLCBmbGFncywgY2FsbGVyKTsKKwlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihhZGRyLCBzaXplLCBmbGFncywgY2FsbGVyKTsKIH0KIAogdm9pZCBfX2lvbWVtICogaW9yZW1hcF9mbGFncyhwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CisJdm9pZCAqY2FsbGVyID0gX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApOworCiAJLyogd3JpdGVhYmxlIGltcGxpZXMgZGlydHkgZm9yIGtlcm5lbCBhZGRyZXNzZXMgKi8KIAlpZiAoZmxhZ3MgJiBfUEFHRV9SVykKIAkJZmxhZ3MgfD0gX1BBR0VfRElSVFk7CkBAIC0yMDcsOCArMjE2LDggQEAKIAlmbGFncyAmPSB+KF9QQUdFX1VTRVIgfCBfUEFHRV9FWEVDKTsKIAogCWlmIChwcGNfbWQuaW9yZW1hcCkKLQkJcmV0dXJuIHBwY19tZC5pb3JlbWFwKGFkZHIsIHNpemUsIGZsYWdzKTsKLQlyZXR1cm4gX19pb3JlbWFwKGFkZHIsIHNpemUsIGZsYWdzKTsKKwkJcmV0dXJuIHBwY19tZC5pb3JlbWFwKGFkZHIsIHNpemUsIGZsYWdzLCBjYWxsZXIpOworCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKGFkZHIsIHNpemUsIGZsYWdzLCBjYWxsZXIpOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9wcGNfbW11XzMyLmMgYi9hcmNoL3Bvd2VycGMvbW0vcHBjX21tdV8zMi5jCmluZGV4IGZlNjVjNDAuLjJkMmE4N2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9wcGNfbW11XzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3BwY19tbXVfMzIuYwpAQCAtNzQsOSArNzQsNiBAQAogCiB1bnNpZ25lZCBsb25nIF9faW5pdCBtbXVfbWFwaW5fcmFtKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1BPV0VSNAotCXJldHVybiAwOwotI2Vsc2UKIAl1bnNpZ25lZCBsb25nIHRvdCwgYmwsIGRvbmU7CiAJdW5zaWduZWQgbG9uZyBtYXhfc2l6ZSA9ICgyNTY8PDIwKTsKIApAQCAtOTUsNyArOTIsNyBAQAogCQkJYnJlYWs7CiAJfQogCi0Jc2V0YmF0KDIsIFBBR0VfT0ZGU0VULCAwLCBibCwgX1BBR0VfUkFNKTsKKwlzZXRiYXQoMiwgUEFHRV9PRkZTRVQsIDAsIGJsLCBQQUdFX0tFUk5FTF9YKTsKIAlkb25lID0gKHVuc2lnbmVkIGxvbmcpYmF0X2FkZHJzWzJdLmxpbWl0IC0gUEFHRV9PRkZTRVQgKyAxOwogCWlmICgoZG9uZSA8IHRvdCkgJiYgIWJhdF9hZGRyc1szXS5saW1pdCkgewogCQkvKiB1c2UgQkFUMyB0byBjb3ZlciBhIGJpdCBtb3JlICovCkBAIC0xMDMsMTIgKzEwMCwxMSBAQAogCQlmb3IgKGJsID0gMTI4PDwxMDsgYmwgPCBtYXhfc2l6ZTsgYmwgPDw9IDEpCiAJCQlpZiAoYmwgKiAyID4gdG90KQogCQkJCWJyZWFrOwotCQlzZXRiYXQoMywgUEFHRV9PRkZTRVQrZG9uZSwgZG9uZSwgYmwsIF9QQUdFX1JBTSk7CisJCXNldGJhdCgzLCBQQUdFX09GRlNFVCtkb25lLCBkb25lLCBibCwgUEFHRV9LRVJORUxfWCk7CiAJCWRvbmUgPSAodW5zaWduZWQgbG9uZyliYXRfYWRkcnNbM10ubGltaXQgLSBQQUdFX09GRlNFVCArIDE7CiAJfQogCiAJcmV0dXJuIGRvbmU7Ci0jZW5kaWYKIH0KIAogLyoKQEAgLTEzNiw5ICsxMzIsNyBAQAogCQl3aW1neHBwIHw9IChmbGFncyAmIF9QQUdFX1JXKT8gQlBQX1JXOiBCUFBfUlg7CiAJCWJhdFsxXS5iYXR1ID0gdmlydCB8IChibCA8PCAyKSB8IDI7IC8qIFZzPTEsIFZwPTAgKi8KIAkJYmF0WzFdLmJhdGwgPSBCQVRfUEhZU19BRERSKHBoeXMpIHwgd2ltZ3hwcDsKLSNpZm5kZWYgQ09ORklHX0tHREIgLyogd2FudCB1c2VyIGFjY2VzcyBmb3IgYnJlYWtwb2ludHMgKi8KIAkJaWYgKGZsYWdzICYgX1BBR0VfVVNFUikKLSNlbmRpZgogCQkJYmF0WzFdLmJhdHUgfD0gMTsgCS8qIFZwID0gMSAqLwogCQlpZiAoZmxhZ3MgJiBfUEFHRV9HVUFSREVEKSB7CiAJCQkvKiBHIGJpdCBtdXN0IGJlIHplcm8gaW4gSUJBVHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2hhc2g2NC5jCmluZGV4IGM5MzFiYzcuLjFiZTFiNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9oYXNoNjQuYwpAQCAtMTM5LDEyICsxMzksMTIgQEAKICAqLwogdm9pZCBfX2ZsdXNoX3RsYl9wZW5kaW5nKHN0cnVjdCBwcGM2NF90bGJfYmF0Y2ggKmJhdGNoKQogewotCWNwdW1hc2tfdCB0bXA7CisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKnRtcDsKIAlpbnQgaSwgbG9jYWwgPSAwOwogCiAJaSA9IGJhdGNoLT5pbmRleDsKLQl0bXAgPSBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOwotCWlmIChjcHVzX2VxdWFsKGJhdGNoLT5tbS0+Y3B1X3ZtX21hc2ssIHRtcCkpCisJdG1wID0gY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpOworCWlmIChjcHVtYXNrX2VxdWFsKG1tX2NwdW1hc2soYmF0Y2gtPm1tKSwgdG1wKSkKIAkJbG9jYWwgPSAxOwogCWlmIChpID09IDEpCiAJCWZsdXNoX2hhc2hfcGFnZShiYXRjaC0+dmFkZHJbMF0sIGJhdGNoLT5wdGVbMF0sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaC5jIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2guYwppbmRleCAzOWFjMjJiLi43YWY3Mjk3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMKQEAgLTEzMiwxMSArMTMyLDExIEBACiAJcGlkID0gbW0tPmNvbnRleHQuaWQ7CiAJaWYgKHVubGlrZWx5KHBpZCA9PSBNTVVfTk9fQ09OVEVYVCkpCiAJCWdvdG8gbm9fY29udGV4dDsKLQljcHVfbWFzayA9IG1tLT5jcHVfdm1fbWFzazsKLQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7Ci0JaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkgeworCWlmICghY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSkgewogCQlzdHJ1Y3QgdGxiX2ZsdXNoX3BhcmFtIHAgPSB7IC5waWQgPSBwaWQgfTsKLQkJc21wX2NhbGxfZnVuY3Rpb25fbWFzayhjcHVfbWFzaywgZG9fZmx1c2hfdGxiX21tX2lwaSwgJnAsIDEpOworCQkvKiBJZ25vcmVzIHNtcF9wcm9jZXNzb3JfaWQoKSBldmVuIGlmIHNldC4gKi8KKwkJc21wX2NhbGxfZnVuY3Rpb25fbWFueShtbV9jcHVtYXNrKG1tKSwKKwkJCQkgICAgICAgZG9fZmx1c2hfdGxiX21tX2lwaSwgJnAsIDEpOwogCX0KIAlfdGxiaWxfcGlkKHBpZCk7CiAgbm9fY29udGV4dDoKQEAgLTE0NiwxNiArMTQ2LDE1IEBACiAKIHZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdm1hZGRyKQogewotCWNwdW1hc2tfdCBjcHVfbWFzazsKKwlzdHJ1Y3QgY3B1bWFzayAqY3B1X21hc2s7CiAJdW5zaWduZWQgaW50IHBpZDsKIAogCXByZWVtcHRfZGlzYWJsZSgpOwogCXBpZCA9IHZtYSA/IHZtYS0+dm1fbW0tPmNvbnRleHQuaWQgOiAwOwogCWlmICh1bmxpa2VseShwaWQgPT0gTU1VX05PX0NPTlRFWFQpKQogCQlnb3RvIGJhaWw7Ci0JY3B1X21hc2sgPSB2bWEtPnZtX21tLT5jcHVfdm1fbWFzazsKLQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7Ci0JaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkgeworCWNwdV9tYXNrID0gbW1fY3B1bWFzayh2bWEtPnZtX21tKTsKKwlpZiAoIWNwdW1hc2tfZXF1YWwoY3B1X21hc2ssIGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKSkpIHsKIAkJLyogSWYgYnJvYWRjYXN0IHRsYml2YXggaXMgc3VwcG9ydGVkLCB1c2UgaXQgKi8KIAkJaWYgKG1tdV9oYXNfZmVhdHVyZShNTVVfRlRSX1VTRV9UTEJJVkFYX0JDQVNUKSkgewogCQkJaW50IGxvY2sgPSBtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9MT0NLX0JDQVNUX0lOVkFMKTsKQEAgLTE2Nyw3ICsxNjYsOCBAQAogCQkJZ290byBiYWlsOwogCQl9IGVsc2UgewogCQkJc3RydWN0IHRsYl9mbHVzaF9wYXJhbSBwID0geyAucGlkID0gcGlkLCAuYWRkciA9IHZtYWRkciB9OwotCQkJc21wX2NhbGxfZnVuY3Rpb25fbWFzayhjcHVfbWFzaywKKwkJCS8qIElnbm9yZXMgc21wX3Byb2Nlc3Nvcl9pZCgpIGV2ZW4gaWYgc2V0IGluIGNwdV9tYXNrICovCisJCQlzbXBfY2FsbF9mdW5jdGlvbl9tYW55KGNwdV9tYXNrLAogCQkJCQkgICAgICAgZG9fZmx1c2hfdGxiX3BhZ2VfaXBpLCAmcCwgMSk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaF9sb3cuUyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoX2xvdy5TCmluZGV4IGY5MDBhMzkuLjc4OGI4N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoX2xvdy5TCisrKyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoX2xvdy5TCkBAIC0xMTgsMjUgKzExOCw1MCBAQAogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19GU0xfQk9PS0UpCiAvKgotICogRlNMIEJvb2tFIGltcGxlbWVudGF0aW9ucy4gQ3VycmVudGx5IF9waWQgYW5kIF9hbGwgYXJlIHRoZQotICogc2FtZS4gVGhpcyB3aWxsIGNoYW5nZSB3aGVuIHRsYmlseCBpcyBhY3R1YWxseSBzdXBwb3J0ZWQgYW5kCi0gKiBwZXJmb3JtcyBpbnZhbGlkYXRlLWJ5LVBJRC4gVGhpcyBjaGFuZ2Ugd2lsbCBiZSBkcml2ZW4gYnkKLSAqIG1tdV9mZWF0dXJlcyBjb25kaXRpb25hbAorICogRlNMIEJvb2tFIGltcGxlbWVudGF0aW9ucy4KKyAqCisgKiBTaW5jZSBmZWF0dXJlIHNlY3Rpb25zIGFyZSB1c2luZyBfU0VDVElPTl9FTFNFIHdlIG5lZWQKKyAqIHRvIGhhdmUgdGhlIGxhcmdlciBjb2RlIHBhdGggYmVmb3JlIHRoZSBfU0VDVElPTl9FTFNFCiAgKi8KIAorI2RlZmluZSBNTVVDU1IwX1RMQkZJCShNTVVDU1IwX1RMQjBGSSB8IE1NVUNTUjBfVExCMUZJIHwgXAorCQkJIE1NVUNTUjBfVExCMkZJIHwgTU1VQ1NSMF9UTEIzRkkpCiAvKgogICogRmx1c2ggTU1VIFRMQiBvbiB0aGUgbG9jYWwgcHJvY2Vzc29yCiAgKi8KLV9HTE9CQUwoX3RsYmlsX3BpZCkKIF9HTE9CQUwoX3RsYmlsX2FsbCkKLSNkZWZpbmUgTU1VQ1NSMF9UTEJGSQkoTU1VQ1NSMF9UTEIwRkkgfCBNTVVDU1IwX1RMQjFGSSB8IFwKLQkJCSBNTVVDU1IwX1RMQjJGSSB8IE1NVUNTUjBfVExCM0ZJKQorQkVHSU5fTU1VX0ZUUl9TRUNUSU9OCiAJbGkJcjMsKE1NVUNTUjBfVExCRkkpQGwKIAltdHNwcglTUFJOX01NVUNTUjAsIHIzCiAxOgogCW1mc3ByCXIzLFNQUk5fTU1VQ1NSMAogCWFuZGkuCXIzLHIzLE1NVUNTUjBfVExCRklAbAogCWJuZQkxYgorTU1VX0ZUUl9TRUNUSU9OX0VMU0UKKwlQUENfVExCSUxYX0FMTCgwLDApCitBTFRfTU1VX0ZUUl9TRUNUSU9OX0VORF9JRkNMUihNTVVfRlRSX1VTRV9UTEJJTFgpCisJbXN5bmMKKwlpc3luYworCWJscgorCitfR0xPQkFMKF90bGJpbF9waWQpCitCRUdJTl9NTVVfRlRSX1NFQ1RJT04KKwlzbHdpCXIzLHIzLDE2CisJbWZtc3IJcjEwCisJd3J0ZWVpCTAKKwltZnNwcglyNCxTUFJOX01BUzYJLyogc2F2ZSBNQVM2ICovCisJbXRzcHIJU1BSTl9NQVM2LHIzCisJUFBDX1RMQklMWF9QSUQoMCwwKQorCW10c3ByCVNQUk5fTUFTNixyNAkvKiByZXN0b3JlIE1BUzYgKi8KKwl3cnRlZQlyMTAKK01NVV9GVFJfU0VDVElPTl9FTFNFCisJbGkJcjMsKE1NVUNTUjBfVExCRkkpQGwKKwltdHNwcglTUFJOX01NVUNTUjAsIHIzCisxOgorCW1mc3ByCXIzLFNQUk5fTU1VQ1NSMAorCWFuZGkuCXIzLHIzLE1NVUNTUjBfVExCRklAbAorCWJuZQkxYgorQUxUX01NVV9GVFJfU0VDVElPTl9FTkRfSUZTRVQoTU1VX0ZUUl9VU0VfVExCSUxYKQogCW1zeW5jCiAJaXN5bmMKIAlibHIKQEAgLTE0OSw3ICsxNzQsOSBAQAogCW1mbXNyCXIxMAogCXdydGVlaQkwCiAJc2x3aQlyNCxyNCwxNgorCW9yaQlyNCxyNCwoTUFTNl9JU0laRShCT09LM0VfUEFHRVNaXzRLKSlAbAogCW10c3ByCVNQUk5fTUFTNixyNAkJLyogYXNzdW1lIEFTPTAgZm9yIG5vdyAqLworQkVHSU5fTU1VX0ZUUl9TRUNUSU9OCiAJdGxic3gJMCxyMwogCW1mc3ByCXI0LFNQUk5fTUFTMQkJLyogY2hlY2sgdmFsaWQgKi8KIAlhbmRpcy4JcjMscjQsTUFTMV9WQUxJREBoCkBAIC0xNTcsNiArMTg0LDkgQEAKIAlybHdpbm0JcjQscjQsMCwxLDMxCiAJbXRzcHIJU1BSTl9NQVMxLHI0CiAJdGxid2UKK01NVV9GVFJfU0VDVElPTl9FTFNFCisJUFBDX1RMQklMWF9WQSgwLHIzKQorQUxUX01NVV9GVFJfU0VDVElPTl9FTkRfSUZDTFIoTU1VX0ZUUl9VU0VfVExCSUxYKQogCW1zeW5jCiAJaXN5bmMKIDE6CXdydGVlCXIxMApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsXzc0NTAuYyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF83NDUwLmMKaW5kZXggY2M1OTllYi4uZjhkMzZmOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsXzc0NTAuYworKysgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfNzQ1MC5jCkBAIC0yOSw3ICsyOSw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyByZXNldF92YWx1ZVtPUF9NQVhfQ09VTlRFUl07CiAKIHN0YXRpYyBpbnQgb3Byb2ZpbGVfcnVubmluZzsKLXN0YXRpYyB1MzIgbW1jcjBfdmFsLCBtbWNyMV92YWwsIG1tY3IyX3ZhbDsKK3N0YXRpYyB1MzIgbW1jcjBfdmFsLCBtbWNyMV92YWwsIG1tY3IyX3ZhbCwgbnVtX3BtY3M7CiAKICNkZWZpbmUgTU1DUjBfUE1DMV9TSElGVAk2CiAjZGVmaW5lIE1NQ1IwX1BNQzJfU0hJRlQJMApAQCAtODgsMTMgKzg4LDEyIEBACiAKIAltdHNwcihTUFJOX01NQ1IwLCBtbWNyMF92YWwpOwogCW10c3ByKFNQUk5fTU1DUjEsIG1tY3IxX3ZhbCk7Ci0JbXRzcHIoU1BSTl9NTUNSMiwgbW1jcjJfdmFsKTsKKwlpZiAobnVtX3BtY3MgPiA0KQorCQltdHNwcihTUFJOX01NQ1IyLCBtbWNyMl92YWwpOwogCiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgTlVNX0NUUlMgNgotCiAvKiBDb25maWd1cmVzIHRoZSBnbG9iYWwgc2V0dGluZ3MgZm9yIHRoZSBjb3VudGVzIG9uIGFsbCBDUFVzLiAqLwogc3RhdGljIGludCBmc2w3NDUwX3JlZ19zZXR1cChzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgKmN0ciwKIAkJCSAgICAgc3RydWN0IG9wX3N5c3RlbV9jb25maWcgKnN5cywKQEAgLTEwMiwxMiArMTAxLDEzIEBACiB7CiAJaW50IGk7CiAKKwludW1fcG1jcyA9IG51bV9jdHJzOwogCS8qIE91ciBjb3VudGVycyBjb3VudCB1cCwgYW5kICJjb3VudCIgcmVmZXJzIHRvCiAJICogaG93IG11Y2ggYmVmb3JlIHRoZSBuZXh0IGludGVycnVwdCwgYW5kIHdlIGludGVycnVwdAogCSAqIG9uIG92ZXJmbG93LiAgU28gd2UgY2FsY3VsYXRlIHRoZSBzdGFydGluZyB2YWx1ZQogCSAqIHdoaWNoIHdpbGwgZ2l2ZSB1cyAiY291bnQiIHVudGlsIG92ZXJmbG93LgogCSAqIFRoZW4gd2Ugc2V0IHRoZSBldmVudHMgb24gdGhlIGVuYWJsZWQgY291bnRlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NUUlM7ICsraSkKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2N0cnM7ICsraSkKIAkJcmVzZXRfdmFsdWVbaV0gPSAweDgwMDAwMDAwVUwgLSBjdHJbaV0uY291bnQ7CiAKIAkvKiBTZXQgZXZlbnRzIGZvciBDb3VudGVycyAxICYgMiAqLwpAQCAtMTIzLDkgKzEyMywxMCBAQAogCiAJLyogU2V0IGV2ZW50cyBmb3IgQ291bnRlcnMgMy02ICovCiAJbW1jcjFfdmFsID0gbW1jcjFfZXZlbnQzKGN0clsyXS5ldmVudCkKLQkJfCBtbWNyMV9ldmVudDQoY3RyWzNdLmV2ZW50KQotCQl8IG1tY3IxX2V2ZW50NShjdHJbNF0uZXZlbnQpCi0JCXwgbW1jcjFfZXZlbnQ2KGN0cls1XS5ldmVudCk7CisJCXwgbW1jcjFfZXZlbnQ0KGN0clszXS5ldmVudCk7CisJaWYgKG51bV9jdHJzID4gNCkKKwkJbW1jcjFfdmFsIHw9IG1tY3IxX2V2ZW50NShjdHJbNF0uZXZlbnQpCisJCQl8IG1tY3IxX2V2ZW50NihjdHJbNV0uZXZlbnQpOwogCiAJbW1jcjJfdmFsID0gMDsKIApAQCAtMTM5LDcgKzE0MCw3IEBACiAKIAltdG1zcihtZm1zcigpIHwgTVNSX1BNTSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NUUlM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBudW1fcG1jczsgKytpKSB7CiAJCWlmIChjdHJbaV0uZW5hYmxlZCkKIAkJCWNsYXNzaWNfY3RyX3dyaXRlKGksIHJlc2V0X3ZhbHVlW2ldKTsKIAkJZWxzZQpAQCAtMTg0LDcgKzE4NSw3IEBACiAJcGMgPSBtZnNwcihTUFJOX1NJQVIpOwogCWlzX2tlcm5lbCA9IGlzX2tlcm5lbF9hZGRyKHBjKTsKIAotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ1RSUzsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IG51bV9wbWNzOyArK2kpIHsKIAkJdmFsID0gY2xhc3NpY19jdHJfcmVhZChpKTsKIAkJaWYgKHZhbCA8IDApIHsKIAkJCWlmIChvcHJvZmlsZV9ydW5uaW5nICYmIGN0cltpXS5lbmFibGVkKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZwppbmRleCAzNDk2YmMwLi5iZjVjN2ZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWcKQEAgLTExOCw2ICsxMTgsMTcgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBBTUNDIFBQQzQ2MEdUIGV2YWx1YXRpb24gYm9hcmQuCiAKK2NvbmZpZyBSRURXT09ECisJYm9vbCAiUmVkd29vZCIKKwlkZXBlbmRzIG9uIDQ0eAorCWRlZmF1bHQgbgorCXNlbGVjdCBQUEM0NHhfU0lNUExFCisJc2VsZWN0IDQ2MFNYCisJc2VsZWN0IFBDSQorCXNlbGVjdCBQUEM0eHhfUENJX0VYUFJFU1MKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBBTUNDIFBQQzQ2MFNYIFJlZHdvb2QgYm9hcmQuCisKIGNvbmZpZyBZT1NFTUlURQogCWJvb2wgIllvc2VtaXRlIgogCWRlcGVuZHMgb24gNDR4CkBAIC0yMjAsNiArMjMxLDE0IEBACiAJc2VsZWN0IElCTV9ORVdfRU1BQ19FTUFDNAogCXNlbGVjdCBJQk1fTkVXX0VNQUNfVEFICiAKK2NvbmZpZyA0NjBTWAorCWJvb2wKKwlzZWxlY3QgUFBDX0ZQVQorCXNlbGVjdCBJQk1fTkVXX0VNQUNfRU1BQzQKKwlzZWxlY3QgSUJNX05FV19FTUFDX1JHTUlJCisJc2VsZWN0IElCTV9ORVdfRU1BQ19aTUlJCisJc2VsZWN0IElCTV9ORVdfRU1BQ19UQUgKKwogIyA0NHggZXJyYXRhL3dvcmthcm91bmQgY29uZmlnIHN5bWJvbHMsIHNlbGVjdGVkIGJ5IHRoZSBDUFUgbW9kZWxzIGFib3ZlCiBjb25maWcgSUJNNDQwRVBfRVJSNDIKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9wcGM0NHhfc2ltcGxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9wcGM0NHhfc2ltcGxlLmMKaW5kZXggNzZmZGM1MS4uNWJjZDQ0MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvcHBjNDR4X3NpbXBsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3BwYzQ0eF9zaW1wbGUuYwpAQCAtNTcsNiArNTcsNyBAQAogCSJpYm0sZWJvbnkiLAogCSJhbWNjLGthdG1haSIsCiAJImFtY2MscmFpbmllciIsCisJImFtY2MscmVkd29vZCIsCiAJImFtY2Msc2VxdW9pYSIsCiAJImFtY2MsdGFpc2hhbiIsCiAJImFtY2MseW9zZW1pdGUiCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9LY29uZmlnCmluZGV4IDMyNjg1MmMuLjRkYWM5YjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9LY29uZmlnCkBAIC0xMiw3ICsxMiw3IEBACiAKIGNvbmZpZyBNUEM1MTIxX0FEUwogCWJvb2wgIkZyZWVzY2FsZSBNUEM1MTIxRSBBRFMiCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEMzMgorCWRlcGVuZHMgb24gNnh4CiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCiAJc2VsZWN0IFBQQ19NUEM1MTIxCiAJc2VsZWN0IE1QQzUxMjFfQURTX0NQTEQKQEAgLTIxLDcgKzIxLDcgQEAKIAogY29uZmlnIE1QQzUxMjFfR0VORVJJQwogCWJvb2wgIkdlbmVyaWMgc3VwcG9ydCBmb3Igc2ltcGxlIE1QQzUxMjEgYmFzZWQgYm9hcmRzIgotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDMzIKKwlkZXBlbmRzIG9uIDZ4eAogCXNlbGVjdCBERUZBVUxUX1VJTUFHRQogCXNlbGVjdCBQUENfTVBDNTEyMQogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L0tjb25maWcKaW5kZXggNjk2YTVlZS4uOGI4ZTk1NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgUFBDX01QQzUyeHgKIAlib29sICI1Mnh4LWJhc2VkIGJvYXJkcyIKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzMyCisJZGVwZW5kcyBvbiA2eHgKIAlzZWxlY3QgUFBDX0NMT0NLCiAJc2VsZWN0IFBQQ19QQ0lfQ0hPSUNFCiAKQEAgLTIxLDcgKzIxLDEzIEBACiAJICAgIGFuZCBpZiB0aGVyZSBpcyBhIFBDSSBidXMgbm9kZSBkZWZpbmVkIGluIHRoZSBkZXZpY2UgdHJlZS4KIAogCSAgQm9hcmRzIHRoYXQgYXJlIGNvbXBhdGlibGUgd2l0aCB0aGlzIGdlbmVyaWMgcGxhdGZvcm0gc3VwcG9ydAotCSAgYXJlOiAndHFjLHRxbTUyMDAnLCAncHJvbWVzcyxtb3Rpb25wcm8nLCAnc2NoaW5kbGVyLGNtNTIwMCcuCisJICBhcmU6CisJICAgICBpbnRlcmNvbnRyb2wsZGlnc3ktbXRjCisJICAgICBwaHl0ZWMscGNtMDMwCisJICAgICBwaHl0ZWMscGNtMDMyCisJICAgICBwcm9tZXNzLG1vdGlvbnBybworCSAgICAgc2NoaW5kbGVyLGNtNTIwMAorCSAgICAgdHFjLHRxbTUyMDAKIAogY29uZmlnIFBQQ19FRklLQQogCWJvb2wgImJQbGFuIEVmaWthIDVrMi4gTVBDNTIwMEIgYmFzZWQgY29tcHV0ZXIiCkBAIC0zNSw2ICs0MSwxMSBAQAogCWRlcGVuZHMgb24gUFBDX01QQzUyeHgKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKIAorY29uZmlnIFBQQ19NRURJQTUyMDAKKwlib29sICJGcmVlc2NhbGUgTWVkaWE1MjAwIEV2YWwgQm9hcmQiCisJZGVwZW5kcyBvbiBQUENfTVBDNTJ4eAorCXNlbGVjdCBERUZBVUxUX1VJTUFHRQorCiBjb25maWcgUFBDX01QQzUyMDBfQlVHRklYCiAJYm9vbCAiTVBDNTIwMCAoTDI1UikgYnVnZml4IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQUENfTVBDNTJ4eApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L01ha2VmaWxlCmluZGV4IGI4YTUyMDYuLmJmZDRmNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvTWFrZWZpbGUKQEAgLTEsMTIgKzEsMTMgQEAKICMKICMgTWFrZWZpbGUgZm9yIDUyeHggYmFzZWQgYm9hcmRzCiAjCi1vYmoteQkJCQkrPSBtcGM1Mnh4X3BpYy5vIG1wYzUyeHhfY29tbW9uLm8KK29iai15CQkJCSs9IG1wYzUyeHhfcGljLm8gbXBjNTJ4eF9jb21tb24ubyBtcGM1Mnh4X2dwdC5vCiBvYmotJChDT05GSUdfUENJKQkJKz0gbXBjNTJ4eF9wY2kubwogCiBvYmotJChDT05GSUdfUFBDX01QQzUyMDBfU0lNUExFKSArPSBtcGM1MjAwX3NpbXBsZS5vCiBvYmotJChDT05GSUdfUFBDX0VGSUtBKQkJKz0gZWZpa2Eubwogb2JqLSQoQ09ORklHX1BQQ19MSVRFNTIwMCkJKz0gbGl0ZTUyMDAubworb2JqLSQoQ09ORklHX1BQQ19NRURJQTUyMDApCSs9IG1lZGlhNTIwMC5vCiAKIG9iai0kKENPTkZJR19QTSkJCSs9IG1wYzUyeHhfc2xlZXAubyBtcGM1Mnh4X3BtLm8KIGlmZXEgKCQoQ09ORklHX1BQQ19MSVRFNTIwMCkseSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tZWRpYTUyMDAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tZWRpYTUyMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGU0ZjE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21lZGlhNTIwMC5jCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogU3VwcG9ydCBmb3IgJ21lZGlhNTIwMC1wbGF0Zm9ybScgY29tcGF0aWJsZSBib2FyZHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFNlY3JldCBMYWIgVGVjaG5vbG9naWVzIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyBjb2RlIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIEZyZWVzY2FwZSBNZWRpYTUyMDAgcGxhdGZvcm0KKyAqIChidWlsdCBhcm91bmQgdGhlIE1QQzUyMDAgU29DKS4KKyAqCisgKiBOb3RhYmxlIGNoYXJhY3RlcmlzdGljIG9mIHRoZSBNZWRpYTUyMDAgaXMgdGhlIHByZXNlbmNlIG9mIGFuIEZQR0EKKyAqIHRoYXQgaGFzIGFsbCBleHRlcm5hbCBJUlEgbGluZXMgcm91dGVkIHRocm91Z2ggaXQuICBUaGlzIGZpbGUgaW1wbGVtZW50cworICogYSBjYXNjYWRlZCBpbnRlcnJ1cHQgY29udHJvbGxlciBkcml2ZXIgd2hpY2ggYXR0YWNoZXMgaXRzZWxmIHRvIHRoZQorICogVmlydHVhbCBJUlEgc3Vic3lzdGVtIGFmdGVyIHRoZSBwcmltYXJ5IG1wYzUyMDAgaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAqIGlzIGluaXRpYWxpemVkLgorICoKKyAqLworCisjdW5kZWYgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL21wYzUyeHguaD4KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTIwMF9ncGlvX2lkc1tdIF9faW5pdGRhdGEgPSB7CisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncGlvIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1wYzUyMDAtZ3BpbyIsIH0sCisJe30KK307CisKKy8qIEZQR0EgcmVnaXN0ZXIgc2V0ICovCisjZGVmaW5lIE1FRElBNTIwMF9JUlFfRU5BQkxFICgweDQwYykKKyNkZWZpbmUgTUVESUE1MjAwX0lSUV9TVEFUVVMgKDB4NDEwKQorI2RlZmluZSBNRURJQTUyMDBfTlVNX0lSUVMgICAoNikKKyNkZWZpbmUgTUVESUE1MjAwX0lSUV9TSElGVCAgKDMyIC0gTUVESUE1MjAwX05VTV9JUlFTKQorCitzdHJ1Y3QgbWVkaWE1MjAwX2lycSB7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgaXJxX2hvc3QgKmlycWhvc3Q7Cit9Oworc3RydWN0IG1lZGlhNTIwMF9pcnEgbWVkaWE1MjAwX2lycTsKKworc3RhdGljIHZvaWQgbWVkaWE1MjAwX2lycV91bm1hc2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1lZGlhNTIwMF9pcnEubG9jaywgZmxhZ3MpOworCXZhbCA9IGluX2JlMzIobWVkaWE1MjAwX2lycS5yZWdzICsgTUVESUE1MjAwX0lSUV9FTkFCTEUpOworCXZhbCB8PSAxIDw8IChNRURJQTUyMDBfSVJRX1NISUZUICsgaXJxX21hcFt2aXJxXS5od2lycSk7CisJb3V0X2JlMzIobWVkaWE1MjAwX2lycS5yZWdzICsgTUVESUE1MjAwX0lSUV9FTkFCTEUsIHZhbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWVkaWE1MjAwX2lycS5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1lZGlhNTIwMF9pcnFfbWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWVkaWE1MjAwX2lycS5sb2NrLCBmbGFncyk7CisJdmFsID0gaW5fYmUzMihtZWRpYTUyMDBfaXJxLnJlZ3MgKyBNRURJQTUyMDBfSVJRX0VOQUJMRSk7CisJdmFsICY9IH4oMSA8PCAoTUVESUE1MjAwX0lSUV9TSElGVCArIGlycV9tYXBbdmlycV0uaHdpcnEpKTsKKwlvdXRfYmUzMihtZWRpYTUyMDBfaXJxLnJlZ3MgKyBNRURJQTUyMDBfSVJRX0VOQUJMRSwgdmFsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZWRpYTUyMDBfaXJxLmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtZWRpYTUyMDBfaXJxX2NoaXAgPSB7CisJLnR5cGVuYW1lID0gIk1lZGlhNTIwMCBGUEdBIiwKKwkudW5tYXNrID0gbWVkaWE1MjAwX2lycV91bm1hc2ssCisJLm1hc2sgPSBtZWRpYTUyMDBfaXJxX21hc2ssCisJLm1hc2tfYWNrID0gbWVkaWE1MjAwX2lycV9tYXNrLAorfTsKKwordm9pZCBtZWRpYTUyMDBfaXJxX2Nhc2NhZGUodW5zaWduZWQgaW50IHZpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlpbnQgc3ViX3ZpcnEsIHZhbDsKKwl1MzIgc3RhdHVzLCBlbmFibGU7CisKKwkvKiBNYXNrIG9mZiB0aGUgY2FzY2FkZWQgSVJRICovCisJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKKwlkZXNjLT5jaGlwLT5tYXNrKHZpcnEpOworCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKworCS8qIEFzayB0aGUgRlBHQSBmb3IgSVJRIHN0YXR1cy4gIElmICd2YWwnIGlzIDAsIHRoZW4gbm8gaXJxcworCSAqIGFyZSBwZW5kaW5nLiAgJ2ZmcygpJyBpcyAxIGJhc2VkICovCisJc3RhdHVzID0gaW5fYmUzMihtZWRpYTUyMDBfaXJxLnJlZ3MgKyBNRURJQTUyMDBfSVJRX0VOQUJMRSk7CisJZW5hYmxlID0gaW5fYmUzMihtZWRpYTUyMDBfaXJxLnJlZ3MgKyBNRURJQTUyMDBfSVJRX1NUQVRVUyk7CisJdmFsID0gZmZzKChzdGF0dXMgJiBlbmFibGUpID4+IE1FRElBNTIwMF9JUlFfU0hJRlQpOworCWlmICh2YWwpIHsKKwkJc3ViX3ZpcnEgPSBpcnFfbGluZWFyX3Jldm1hcChtZWRpYTUyMDBfaXJxLmlycWhvc3QsIHZhbCAtIDEpOworCQkvKiBwcl9kZWJ1ZygiJXM6IHZpcnE9JWkgcz0lLjh4IGU9JS44eCBod2lycT0laSBzdWJ2aXJxPSVpXG4iLAorCQkgKiAgICAgICAgICBfX2Z1bmNfXywgdmlycSwgc3RhdHVzLCBlbmFibGUsIHZhbCAtIDEsIHN1Yl92aXJxKTsKKwkJICovCisJCWdlbmVyaWNfaGFuZGxlX2lycShzdWJfdmlycSk7CisJfQorCisJLyogUHJvY2Vzc2luZyBkb25lOyBjYW4gcmVlbmFibGUgdGhlIGNhc2NhZGUgbm93ICovCisJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKKwlkZXNjLT5jaGlwLT5hY2sodmlycSk7CisJaWYgKCEoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSkKKwkJZGVzYy0+Y2hpcC0+dW5tYXNrKHZpcnEpOworCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKK30KKworc3RhdGljIGludCBtZWRpYTUyMDBfaXJxX21hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLAorCQkJICAgICBpcnFfaHdfbnVtYmVyX3QgaHcpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gZ2V0X2lycV9kZXNjKHZpcnEpOworCisJcHJfZGVidWcoIiVzOiBoPSVwLCB2aXJxPSVpLCBod2lycT0laVxuIiwgX19mdW5jX18sIGgsIHZpcnEsIChpbnQpaHcpOworCXNldF9pcnFfY2hpcF9kYXRhKHZpcnEsICZtZWRpYTUyMDBfaXJxKTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJm1lZGlhNTIwMF9pcnFfY2hpcCwgaGFuZGxlX2xldmVsX2lycSk7CisJc2V0X2lycV90eXBlKHZpcnEsIElSUV9UWVBFX0xFVkVMX0xPVyk7CisJZGVzYy0+c3RhdHVzICY9IH4oSVJRX1RZUEVfU0VOU0VfTUFTSyB8IElSUV9MRVZFTCk7CisJZGVzYy0+c3RhdHVzIHw9IElSUV9UWVBFX0xFVkVMX0xPVyB8IElSUV9MRVZFTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lZGlhNTIwMF9pcnFfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAorCQkJCSB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAorCQkJCSBpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwKKwkJCQkgdW5zaWduZWQgaW50ICpvdXRfZmxhZ3MpCit7CisJaWYgKGludHNpemUgIT0gMikKKwkJcmV0dXJuIC0xOworCisJcHJfZGVidWcoIiVzOiBiYW5rPSVpLCBudW1iZXI9JWlcbiIsIF9fZnVuY19fLCBpbnRzcGVjWzBdLCBpbnRzcGVjWzFdKTsKKwkqb3V0X2h3aXJxID0gaW50c3BlY1sxXTsKKwkqb3V0X2ZsYWdzID0gSVJRX1RZUEVfTk9ORTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfaG9zdF9vcHMgbWVkaWE1MjAwX2lycV9vcHMgPSB7CisJLm1hcCA9IG1lZGlhNTIwMF9pcnFfbWFwLAorCS54bGF0ZSA9IG1lZGlhNTIwMF9pcnFfeGxhdGUsCit9OworCisvKgorICogU2V0dXAgTWVkaWE1MjAwIElSUSBtYXBwaW5nCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBtZWRpYTUyMDBfaW5pdF9pcnEodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmZwZ2FfbnA7CisJaW50IGNhc2NhZGVfdmlycTsKKworCS8qIEZpcnN0IHNldHVwIHRoZSByZWd1bGFyIE1QQzUyMDAgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KKwltcGM1Mnh4X2luaXRfaXJxKCk7CisKKwkvKiBOb3cgZmluZCB0aGUgRlBHQSBJUlEgKi8KKwlmcGdhX25wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbCxtZWRpYTUyMDAtZnBnYSIpOworCWlmICghZnBnYV9ucCkKKwkJZ290byBvdXQ7CisJcHJfZGVidWcoIiVzOiBmb3VuZCBmcGdhIG5vZGU6ICVzXG4iLCBfX2Z1bmNfXywgZnBnYV9ucC0+ZnVsbF9uYW1lKTsKKworCW1lZGlhNTIwMF9pcnEucmVncyA9IG9mX2lvbWFwKGZwZ2FfbnAsIDApOworCWlmICghbWVkaWE1MjAwX2lycS5yZWdzKQorCQlnb3RvIG91dDsKKwlwcl9kZWJ1ZygiJXM6IG1hcHBlZCB0byAlcFxuIiwgX19mdW5jX18sIG1lZGlhNTIwMF9pcnEucmVncyk7CisKKwljYXNjYWRlX3ZpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChmcGdhX25wLCAwKTsKKwlpZiAoIWNhc2NhZGVfdmlycSkKKwkJZ290byBvdXQ7CisJcHJfZGVidWcoIiVzOiBjYXNjYWRlZCBvbiB2aXJxPSVpXG4iLCBfX2Z1bmNfXywgY2FzY2FkZV92aXJxKTsKKworCS8qIERpc2FibGUgYWxsIEZQR0EgSVJRcyAqLworCW91dF9iZTMyKG1lZGlhNTIwMF9pcnEucmVncyArIE1FRElBNTIwMF9JUlFfRU5BQkxFLCAwKTsKKworCXNwaW5fbG9ja19pbml0KCZtZWRpYTUyMDBfaXJxLmxvY2spOworCisJbWVkaWE1MjAwX2lycS5pcnFob3N0ID0gaXJxX2FsbG9jX2hvc3QoZnBnYV9ucCwgSVJRX0hPU1RfTUFQX0xJTkVBUiwKKwkJCQkJICAgICAgIE1FRElBNTIwMF9OVU1fSVJRUywKKwkJCQkJICAgICAgICZtZWRpYTUyMDBfaXJxX29wcywgLTEpOworCWlmICghbWVkaWE1MjAwX2lycS5pcnFob3N0KQorCQlnb3RvIG91dDsKKwlwcl9kZWJ1ZygiJXM6IGFsbG9jYXRlZCBpcnFob3N0XG4iLCBfX2Z1bmNfXyk7CisKKwltZWRpYTUyMDBfaXJxLmlycWhvc3QtPmhvc3RfZGF0YSA9ICZtZWRpYTUyMDBfaXJxOworCisJc2V0X2lycV9kYXRhKGNhc2NhZGVfdmlycSwgJm1lZGlhNTIwMF9pcnEpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGNhc2NhZGVfdmlycSwgbWVkaWE1MjAwX2lycV9jYXNjYWRlKTsKKworCXJldHVybjsKKworIG91dDoKKwlwcl9lcnIoIkNvdWxkIG5vdCBmaW5kIE1lZGlhNTIwMCBGUEdBOyBQQ0kgaW50ZXJydXB0cyB3aWxsIG5vdCB3b3JrXG4iKTsKK30KKworLyoKKyAqIFNldHVwIHRoZSBhcmNoaXRlY3R1cmUKKyAqLworc3RhdGljIHZvaWQgX19pbml0IG1lZGlhNTIwMF9zZXR1cF9hcmNoKHZvaWQpCit7CisKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXN0cnVjdCBtcGM1Mnh4X2dwaW8gX19pb21lbSAqZ3BpbzsKKwl1MzIgcG9ydF9jb25maWc7CisKKwlpZiAocHBjX21kLnByb2dyZXNzKQorCQlwcGNfbWQucHJvZ3Jlc3MoIm1lZGlhNTIwMF9zZXR1cF9hcmNoKCkiLCAwKTsKKworCS8qIE1hcCBpbXBvcnRhbnQgcmVnaXN0ZXJzIGZyb20gdGhlIGludGVybmFsIG1lbW9yeSBtYXAgKi8KKwltcGM1Mnh4X21hcF9jb21tb25fZGV2aWNlcygpOworCisJLyogU29tZSBtcGM1MjAwICYgbXBjNTIwMGIgcmVsYXRlZCBjb25maWd1cmF0aW9uICovCisJbXBjNTIwMF9zZXR1cF94bGJfYXJiaXRlcigpOworCisJbXBjNTJ4eF9zZXR1cF9wY2koKTsKKworCW5wID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKE5VTEwsIG1wYzUyMDBfZ3Bpb19pZHMpOworCWdwaW8gPSBvZl9pb21hcChucCwgMCk7CisJb2Zfbm9kZV9wdXQobnApOworCWlmICghZ3BpbykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZmFpbGVkLiBleHBlY3QgYWJub3JtYWwgYmVoYXZpb3JcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBTZXQgcG9ydCBjb25maWcgKi8KKwlwb3J0X2NvbmZpZyA9IGluX2JlMzIoJmdwaW8tPnBvcnRfY29uZmlnKTsKKworCXBvcnRfY29uZmlnICY9IH4weDAzMDAwMDAwOwkvKiBBVEEgQ1MgaXMgb24gY3NiXzQvNQkJKi8KKwlwb3J0X2NvbmZpZyB8PSAgMHgwMTAwMDAwMDsKKworCW91dF9iZTMyKCZncGlvLT5wb3J0X2NvbmZpZywgcG9ydF9jb25maWcpOworCisJLyogVW5tYXAgem9uZSAqLworCWlvdW5tYXAoZ3Bpbyk7CisKK30KKworLyogbGlzdCBvZiB0aGUgc3VwcG9ydGVkIGJvYXJkcyAqLworc3RhdGljIGNoYXIgKmJvYXJkW10gX19pbml0ZGF0YSA9IHsKKwkiZnNsLG1lZGlhNTIwMCIsCisJTlVMTAorfTsKKworLyoKKyAqIENhbGxlZCB2ZXJ5IGVhcmx5LCBNTVUgaXMgb2ZmLCBkZXZpY2UtdHJlZSBpc24ndCB1bmZsYXR0ZW5lZAorICovCitzdGF0aWMgaW50IF9faW5pdCBtZWRpYTUyMDBfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG5vZGUgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisJaW50IGkgPSAwOworCisJd2hpbGUgKGJvYXJkW2ldKSB7CisJCWlmIChvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUobm9kZSwgYm9hcmRbaV0pKQorCQkJYnJlYWs7CisJCWkrKzsKKwl9CisKKwlyZXR1cm4gKGJvYXJkW2ldICE9IE5VTEwpOworfQorCitkZWZpbmVfbWFjaGluZShtZWRpYTUyMDBfcGxhdGZvcm0pIHsKKwkubmFtZQkJPSAibWVkaWE1MjAwLXBsYXRmb3JtIiwKKwkucHJvYmUJCT0gbWVkaWE1MjAwX3Byb2JlLAorCS5zZXR1cF9hcmNoCT0gbWVkaWE1MjAwX3NldHVwX2FyY2gsCisJLmluaXQJCT0gbXBjNTJ4eF9kZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXMsCisJLmluaXRfSVJRCT0gbWVkaWE1MjAwX2luaXRfaXJxLAorCS5nZXRfaXJxCT0gbXBjNTJ4eF9nZXRfaXJxLAorCS5yZXN0YXJ0CT0gbXBjNTJ4eF9yZXN0YXJ0LAorCS5jYWxpYnJhdGVfZGVjcgk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyMDBfc2ltcGxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTIwMF9zaW1wbGUuYwppbmRleCBhM2JkYTBiLi5jMzFlNWI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTIwMF9zaW1wbGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTIwMF9zaW1wbGUuYwpAQCAtNTAsOCArNTAsMTAgQEAKIAogLyogbGlzdCBvZiB0aGUgc3VwcG9ydGVkIGJvYXJkcyAqLwogc3RhdGljIGNoYXIgKmJvYXJkW10gX19pbml0ZGF0YSA9IHsKLQkicHJvbWVzcyxtb3Rpb25wcm8iLAorCSJpbnRlcmNvbnRyb2wsZGlnc3ktbXRjIiwKIAkicGh5dGVjLHBjbTAzMCIsCisJInBoeXRlYyxwY20wMzIiLAorCSJwcm9tZXNzLG1vdGlvbnBybyIsCiAJInNjaGluZGxlcixjbTUyMDAiLAogCSJ0cWMsdHFtNTIwMCIsCiAJTlVMTApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9jb21tb24uYwppbmRleCA5ODM2N2EwLi44ZTNkZDVhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9jb21tb24uYwpAQCAtMjgsOSArMjgsMTAgQEAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzUyeHhfYnVzX2lkc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1pbW1yIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pbW1yIiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImZzbCxscGIiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCiAKIAkvKiBkZXByZWNpYXRlZCBtYXRjaGVzOyBzaG91bGRuJ3QgYmUgdXNlZCBpbiBuZXcgZGV2aWNlIHRyZWVzICovCisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbHBiIiwgfSwKIAl7IC50eXBlID0gImJ1aWx0aW4iLCAuY29tcGF0aWJsZSA9ICJtcGM1MjAwIiwgfSwgLyogZWZpa2EgKi8KIAl7IC50eXBlID0gInNvYyIsIC5jb21wYXRpYmxlID0gIm1wYzUyMDAiLCB9LCAvKiBsaXRlNTIwMCAqLwogCXt9CkBAIC0yMDUsNiArMjA2LDQzIEBACiBFWFBPUlRfU1lNQk9MKG1wYzUyeHhfc2V0X3BzY19jbGtkaXYpOwogCiAvKioKKyAqIG1wYzUyeHhfZ2V0X3h0YWxfZnJlcSAtIEdldCBTWVNfWFRBTF9JTiBmcmVxdWVuY3kgZm9yIGEgZGV2aWNlCisgKgorICogQG5vZGU6IGRldmljZSBub2RlCisgKgorICogUmV0dXJucyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBleHRlcm5hbCBvc2NpbGxhdG9yIGNsb2NrIGNvbm5lY3RlZAorICogdG8gdGhlIFNZU19YVEFMX0lOIHBpbiwgb3IgMCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC4KKyAqLwordW5zaWduZWQgaW50IG1wYzUyeHhfZ2V0X3h0YWxfZnJlcShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJdTMyIHZhbDsKKwl1bnNpZ25lZCBpbnQgZnJlcTsKKworCWlmICghbXBjNTJ4eF9jZG0pCisJCXJldHVybiAwOworCisJZnJlcSA9IG1wYzUyeHhfZmluZF9pcGJfZnJlcShub2RlKTsKKwlpZiAoIWZyZXEpCisJCXJldHVybiAwOworCisJaWYgKGluXzgoJm1wYzUyeHhfY2RtLT5pcGJfY2xrX3NlbCkgJiAweDEpCisJCWZyZXEgKj0gMjsKKworCXZhbCAgPSBpbl9iZTMyKCZtcGM1Mnh4X2NkbS0+cnN0Y2ZnKTsKKwlpZiAodmFsICYgKDEgPDwgNSkpCisJCWZyZXEgKj0gODsKKwllbHNlCisJCWZyZXEgKj0gNDsKKwlpZiAodmFsICYgKDEgPDwgNikpCisJCWZyZXEgLz0gMTI7CisJZWxzZQorCQlmcmVxIC89IDE2OworCisJcmV0dXJuIGZyZXE7Cit9CitFWFBPUlRfU1lNQk9MKG1wYzUyeHhfZ2V0X3h0YWxfZnJlcSk7CisKKy8qKgogICogbXBjNTJ4eF9yZXN0YXJ0OiBwcGNfbWQtPnJlc3RhcnQgaG9vayBmb3IgbXBjNTIwMCB1c2luZyB0aGUgd2F0Y2hkb2cgdGltZXIKICAqLwogdm9pZApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfZ3Bpby5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfZ3Bpby5jCmluZGV4IDA3Zjg5YWUuLjJiOGQ4ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2dwaW8uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncGlvLmMKQEAgLTM1NCw4OCArMzU0LDYgQEAKIAkucmVtb3ZlID0gbXBjNTJ4eF9ncGlvY2hpcF9yZW1vdmUsCiB9OwogCi0vKgotICogR1BJTyBMSUIgQVBJIGltcGxlbWVudGF0aW9uIGZvciBncHQgR1BJT3MuCi0gKgotICogRWFjaCBncHQgb25seSBoYXMgYSBzaW5nbGUgR1BJTy4KLSAqLwotc3RhdGljIGludCBtcGM1Mnh4X2dwdF9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8pCi17Ci0Jc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MgPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOwotCXN0cnVjdCBtcGM1Mnh4X2dwdCBfX2lvbWVtICpyZWdzID0gbW1fZ2MtPnJlZ3M7Ci0KLQlyZXR1cm4gKGluX2JlMzIoJnJlZ3MtPnN0YXR1cykgJiAoMSA8PCAoMzEgLSAyMykpKSA/IDEgOiAwOwotfQotCi1zdGF0aWMgdm9pZAotbXBjNTJ4eF9ncHRfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvLCBpbnQgdmFsKQotewotCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKLQlzdHJ1Y3QgbXBjNTJ4eF9ncHQgX19pb21lbSAqcmVncyA9IG1tX2djLT5yZWdzOwotCi0JaWYgKHZhbCkKLQkJb3V0X2JlMzIoJnJlZ3MtPm1vZGUsIDB4MzQpOwotCWVsc2UKLQkJb3V0X2JlMzIoJnJlZ3MtPm1vZGUsIDB4MjQpOwotCi0JcHJfZGVidWcoIiVzOiBncGlvOiAlZCB2YWw6ICVkXG4iLCBfX2Z1bmNfXywgZ3BpbywgdmFsKTsKLX0KLQotc3RhdGljIGludCBtcGM1Mnh4X2dwdF9ncGlvX2Rpcl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8pCi17Ci0Jc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MgPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOwotCXN0cnVjdCBtcGM1Mnh4X2dwdCBfX2lvbWVtICpyZWdzID0gbW1fZ2MtPnJlZ3M7Ci0KLQlvdXRfYmUzMigmcmVncy0+bW9kZSwgMHgwNCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbXBjNTJ4eF9ncHRfZ3Bpb19kaXJfb3V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbCkKLXsKLQltcGM1Mnh4X2dwdF9ncGlvX3NldChnYywgZ3BpbywgdmFsKTsKLQlwcl9kZWJ1ZygiJXM6IGdwaW86ICVkIHZhbDogJWRcbiIsIF9fZnVuY19fLCBncGlvLCB2YWwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IG1wYzUyeHhfZ3B0X2dwaW9jaGlwX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAotCQkJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKLXsKLQlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbWNoaXA7Ci0Jc3RydWN0IG9mX2dwaW9fY2hpcCAqY2hpcDsKLQotCW1tY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCptbWNoaXApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1tY2hpcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljaGlwID0gJm1tY2hpcC0+b2ZfZ2M7Ci0KLQljaGlwLT5ncGlvX2NlbGxzICAgICAgICAgID0gMjsKLQljaGlwLT5nYy5uZ3BpbyAgICAgICAgICAgID0gMTsKLQljaGlwLT5nYy5kaXJlY3Rpb25faW5wdXQgID0gbXBjNTJ4eF9ncHRfZ3Bpb19kaXJfaW47Ci0JY2hpcC0+Z2MuZGlyZWN0aW9uX291dHB1dCA9IG1wYzUyeHhfZ3B0X2dwaW9fZGlyX291dDsKLQljaGlwLT5nYy5nZXQgICAgICAgICAgICAgID0gbXBjNTJ4eF9ncHRfZ3Bpb19nZXQ7Ci0JY2hpcC0+Z2Muc2V0ICAgICAgICAgICAgICA9IG1wYzUyeHhfZ3B0X2dwaW9fc2V0OwotCi0JcmV0dXJuIG9mX21tX2dwaW9jaGlwX2FkZChvZmRldi0+bm9kZSwgbW1jaGlwKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTJ4eF9ncHRfZ3Bpb2NoaXBfbWF0Y2hbXSA9IHsKLQl7Ci0JCS5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwdC1ncGlvIiwKLQl9LAotCXt9Ci19OwotCi1zdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBtcGM1Mnh4X2dwdF9ncGlvY2hpcF9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiZ3Bpb19ncHQiLAotCS5tYXRjaF90YWJsZSA9IG1wYzUyeHhfZ3B0X2dwaW9jaGlwX21hdGNoLAotCS5wcm9iZSA9IG1wYzUyeHhfZ3B0X2dwaW9jaGlwX3Byb2JlLAotCS5yZW1vdmUgPSBtcGM1Mnh4X2dwaW9jaGlwX3JlbW92ZSwKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IG1wYzUyeHhfZ3Bpb19pbml0KHZvaWQpCiB7CiAJaWYgKG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBjNTJ4eF93a3VwX2dwaW9jaGlwX2RyaXZlcikpCkBAIC00NDQsOSArMzYyLDYgQEAKIAlpZiAob2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZtcGM1Mnh4X3NpbXBsZV9ncGlvY2hpcF9kcml2ZXIpKQogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBzaW1wbGUgR1BJTyBkcml2ZXJcbiIpOwogCi0JaWYgKG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBjNTJ4eF9ncHRfZ3Bpb2NoaXBfZHJpdmVyKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgZ3B0IEdQSU8gZHJpdmVyXG4iKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2dwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYmNkNDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncHQuYwpAQCAtMCwwICsxLDM5NiBAQAorLyoKKyAqIE1QQzUyMDAgR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGRldmljZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgU2VjcmV0IExhYiBUZWNobm9sb2dpZXMgTHRkLgorICogQ29weXJpZ2h0IChjKSAyMDA4IFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4sIFBlbmd1dHJvbml4CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgYSBkcml2ZXIgZm9yIHRoZSB0aGUgR2VuZXJhbCBQdXJwb3NlIFRpbWVyIChncHQpIGRldmljZXMKKyAqIGZvdW5kIG9uIHRoZSBNUEM1MjAwIFNvQy4gIEVhY2ggdGltZXIgaGFzIGFuIElPIHBpbiB3aGljaCBjYW4gYmUgdXNlZAorICogZm9yIEdQSU8gb3IgY2FuIGJlIHVzZWQgdG8gcmFpc2UgaW50ZXJydXB0cy4gIFRoZSB0aW1lciBmdW5jdGlvbiBjYW4KKyAqIGJlIHVzZWQgaW5kZXBlbmRlbnRseSBmcm9tIHRoZSBJTyBwaW4sIG9yIGl0IGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wKKyAqIG91dHB1dCBzaWduYWxzIG9yIG1lYXN1cmUgaW5wdXQgc2lnbmFscy4KKyAqCisgKiBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgR1BJTyBhbmQgSVJRIGNvbnRyb2xsZXIgZnVuY3Rpb25zIG9mIHRoZSBHUFQKKyAqIGRldmljZS4gIFRpbWVyIGZ1bmN0aW9ucyBhcmUgbm90IHlldCBzdXBwb3J0ZWQsIG5vciBpcyB0aGUgd2F0Y2hkb2cKKyAqIHRpbWVyLgorICoKKyAqIFRvIHVzZSB0aGUgR1BJTyBmdW5jdGlvbiwgdGhlIGZvbGxvd2luZyB0d28gcHJvcGVydGllcyBtdXN0IGJlIGFkZGVkCisgKiB0byB0aGUgZGV2aWNlIHRyZWUgbm9kZSBmb3IgdGhlIGdwdCBkZXZpY2UgKHR5cGljYWxseSBpbiB0aGUgLmR0cyBmaWxlCisgKiBmb3IgdGhlIGJvYXJkKToKKyAqIAlncGlvLWNvbnRyb2xsZXI7CisgKiAJI2dwaW8tY2VsbHMgPSA8IDIgPjsKKyAqIFRoaXMgZHJpdmVyIHdpbGwgcmVnaXN0ZXIgdGhlIEdQSU8gcGluIGlmIGl0IGZpbmRzIHRoZSBncGlvLWNvbnRyb2xsZXIKKyAqIHByb3BlcnR5IGluIHRoZSBkZXZpY2UgdHJlZS4KKyAqCisgKiBUbyB1c2UgdGhlIElSUSBjb250cm9sbGVyIGZ1bmN0aW9uLCB0aGUgZm9sbG93aW5nIHR3byBwcm9wZXJ0aWVzIG11c3QKKyAqIGJlIGFkZGVkIHRvIHRoZSBkZXZpY2UgdHJlZSBub2RlIGZvciB0aGUgZ3B0IGRldmljZToKKyAqIAlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKyAqIAkjaW50ZXJydXB0LWNlbGxzID0gPCAxID47CisgKiBUaGUgSVJRIGNvbnRyb2xsZXIgYmluZGluZyBvbmx5IHVzZXMgb25lIGNlbGwgdG8gc3BlY2lmeSB0aGUgaW50ZXJydXB0LAorICogYW5kIHRoZSBJUlEgZmxhZ3MgYXJlIGVuY29kZWQgaW4gdGhlIGNlbGwuICBBIGNlbGwgaXMgbm90IHVzZWQgdG8gZW5jb2RlCisgKiB0aGUgSVJRIG51bWJlciBiZWNhdXNlIHRoZSBHUFQgb25seSBoYXMgYSBzaW5nbGUgSVJRIHNvdXJjZS4gIEZvciBmbGFncywKKyAqIGEgdmFsdWUgb2YgJzEnIG1lYW5zIHJpc2luZyBlZGdlIHNlbnNpdGl2ZSBhbmQgJzInIG1lYW5zIGZhbGxpbmcgZWRnZS4KKyAqCisgKiBUaGUgR1BJTyBhbmQgdGhlIElSUSBjb250cm9sbGVyIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lLAorICogYnV0IGluIHRoaXMgdXNlIGNhc2UgdGhlIElPIGxpbmUgd2lsbCBvbmx5IHdvcmsgYXMgYW4gaW5wdXQuICBUcnlpbmcgdG8KKyAqIHVzZSBpdCBhcyBhIEdQSU8gb3V0cHV0IHdpbGwgbm90IHdvcmsuCisgKgorICogV2hlbiB1c2luZyB0aGUgR1BJTyBsaW5lIGFzIGFuIG91dHB1dCwgaXQgY2FuIGVpdGhlciBiZSBkcml2ZW4gYXMgbm9ybWFsCisgKiBJTywgb3IgaXQgY2FuIGJlIGFuIE9wZW4gQ29sbGVjdG9yIChPQykgb3V0cHV0LiAgQXQgdGhlIG1vbWVudCBpdCBpcyB0aGUKKyAqIHJlc3BvbnNpYmlsaXR5IG9mIGVpdGhlciB0aGUgYm9vdGxvYWRlciBvciB0aGUgcGxhdGZvcm0gc2V0dXAgY29kZSB0byBzZXQKKyAqIHRoZSBvdXRwdXQgbW9kZS4gIFRoaXMgZHJpdmVyIGRvZXMgbm90IGNoYW5nZSB0aGUgb3V0cHV0IG1vZGUgc2V0dGluZy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9tcGM1Mnh4Lmg+CisKK01PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIE1QQzUyeHggZ3B0IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiU2FzY2hhIEhhdWVyLCBHcmFudCBMaWtlbHkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyoqCisgKiBzdHJ1Y3QgbXBjNTJ4eF9ncHQgLSBQcml2YXRlIGRhdGEgc3RydWN0dXJlIGZvciBNUEM1Mnh4IEdQVCBkcml2ZXIKKyAqIEBkZXY6IHBvaW50ZXIgdG8gZGV2aWNlIHN0cnVjdHVyZQorICogQHJlZ3M6IHZpcnR1YWwgYWRkcmVzcyBvZiBHUFQgcmVnaXN0ZXJzCisgKiBAbG9jazogc3BpbmxvY2sgdG8gY29vcmRpbmF0ZSBiZXR3ZWVuIGRpZmZlcmVudCBmdW5jdGlvbnMuCisgKiBAb2ZfZ2M6IG9mX2dwaW9fY2hpcCBpbnN0YW5jZSBzdHJ1Y3R1cmU7IHVzZWQgd2hlbiBHUElPIGlzIGVuYWJsZWQKKyAqIEBpcnFob3N0OiBQb2ludGVyIHRvIGlycV9ob3N0IGluc3RhbmNlOyB1c2VkIHdoZW4gSVJRIG1vZGUgaXMgc3VwcG9ydGVkCisgKi8KK3N0cnVjdCBtcGM1Mnh4X2dwdF9wcml2IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG1wYzUyeHhfZ3B0IF9faW9tZW0gKnJlZ3M7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBpcnFfaG9zdCAqaXJxaG9zdDsKKworI2lmIGRlZmluZWQoQ09ORklHX0dQSU9MSUIpCisJc3RydWN0IG9mX2dwaW9fY2hpcCBvZl9nYzsKKyNlbmRpZgorfTsKKworI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX01TX01BU0sJKDB4MDcpCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfTVNfSUMJCSgweDAxKQorI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX01TX09DCQkoMHgwMikKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9NU19QV00JCSgweDAzKQorI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX01TX0dQSU8JKDB4MDQpCisKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9HUElPX01BU0sJKDB4MzApCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfR1BJT19PVVRfTE9XCSgweDIwKQorI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX0dQSU9fT1VUX0hJR0gJKDB4MzApCisKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9JUlFfRU4JCSgweDAxMDApCisKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9JQ1RfTUFTSwkoMHgwMzAwMDApCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfSUNUX1JJU0lORwkoMHgwMTAwMDApCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfSUNUX0ZBTExJTkcJKDB4MDIwMDAwKQorI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX0lDVF9UT0dHTEUJKDB4MDMwMDAwKQorCisjZGVmaW5lIE1QQzUyeHhfR1BUX1NUQVRVU19JUlFNQVNLCSgweDAwMGYpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ2FzY2FkZWQgaW50ZXJydXB0IGNvbnRyb2xsZXIgaG9va3MKKyAqLworCitzdGF0aWMgdm9pZCBtcGM1Mnh4X2dwdF9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCB2aXJxKQoreworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwdC0+bG9jaywgZmxhZ3MpOworCXNldGJpdHMzMigmZ3B0LT5yZWdzLT5tb2RlLCBNUEM1Mnh4X0dQVF9NT0RFX0lSUV9FTik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3B0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1wYzUyeHhfZ3B0X2lycV9tYXNrKHVuc2lnbmVkIGludCB2aXJxKQoreworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwdC0+bG9jaywgZmxhZ3MpOworCWNscmJpdHMzMigmZ3B0LT5yZWdzLT5tb2RlLCBNUEM1Mnh4X0dQVF9NT0RFX0lSUV9FTik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3B0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1wYzUyeHhfZ3B0X2lycV9hY2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdwdCA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOworCisJb3V0X2JlMzIoJmdwdC0+cmVncy0+c3RhdHVzLCBNUEM1Mnh4X0dQVF9TVEFUVVNfSVJRTUFTSyk7Cit9CisKK3N0YXRpYyBpbnQgbXBjNTJ4eF9ncHRfaXJxX3NldF90eXBlKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQoreworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByZWc7CisKKwlkZXZfZGJnKGdwdC0+ZGV2LCAiJXM6IHZpcnE9JWkgdHlwZT0leFxuIiwgX19mdW5jX18sIHZpcnEsIGZsb3dfdHlwZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3B0LT5sb2NrLCBmbGFncyk7CisJcmVnID0gaW5fYmUzMigmZ3B0LT5yZWdzLT5tb2RlKSAmIH5NUEM1Mnh4X0dQVF9NT0RFX0lDVF9NQVNLOworCWlmIChmbG93X3R5cGUgJiBJUlFGX1RSSUdHRVJfUklTSU5HKQorCQlyZWcgfD0gTVBDNTJ4eF9HUFRfTU9ERV9JQ1RfUklTSU5HOworCWlmIChmbG93X3R5cGUgJiBJUlFGX1RSSUdHRVJfRkFMTElORykKKwkJcmVnIHw9IE1QQzUyeHhfR1BUX01PREVfSUNUX0ZBTExJTkc7CisJb3V0X2JlMzIoJmdwdC0+cmVncy0+bW9kZSwgcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncHQtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1wYzUyeHhfZ3B0X2lycV9jaGlwID0geworCS50eXBlbmFtZSA9ICJNUEM1Mnh4IEdQVCIsCisJLnVubWFzayA9IG1wYzUyeHhfZ3B0X2lycV91bm1hc2ssCisJLm1hc2sgPSBtcGM1Mnh4X2dwdF9pcnFfbWFzaywKKwkuYWNrID0gbXBjNTJ4eF9ncHRfaXJxX2FjaywKKwkuc2V0X3R5cGUgPSBtcGM1Mnh4X2dwdF9pcnFfc2V0X3R5cGUsCit9OworCit2b2lkIG1wYzUyeHhfZ3B0X2lycV9jYXNjYWRlKHVuc2lnbmVkIGludCB2aXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdwdCA9IGdldF9pcnFfZGF0YSh2aXJxKTsKKwlpbnQgc3ViX3ZpcnE7CisJdTMyIHN0YXR1czsKKworCXN0YXR1cyA9IGluX2JlMzIoJmdwdC0+cmVncy0+c3RhdHVzKSAmIE1QQzUyeHhfR1BUX1NUQVRVU19JUlFNQVNLOworCWlmIChzdGF0dXMpIHsKKwkJc3ViX3ZpcnEgPSBpcnFfbGluZWFyX3Jldm1hcChncHQtPmlycWhvc3QsIDApOworCQlnZW5lcmljX2hhbmRsZV9pcnEoc3ViX3ZpcnEpOworCX0KK30KKworc3RhdGljIGludCBtcGM1Mnh4X2dwdF9pcnFfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkgICAgICAgaXJxX2h3X251bWJlcl90IGh3KQoreworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQgPSBoLT5ob3N0X2RhdGE7CisKKwlkZXZfZGJnKGdwdC0+ZGV2LCAiJXM6IGg9JXAsIHZpcnE9JWlcbiIsIF9fZnVuY19fLCBoLCB2aXJxKTsKKwlzZXRfaXJxX2NoaXBfZGF0YSh2aXJxLCBncHQpOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmbXBjNTJ4eF9ncHRfaXJxX2NoaXAsIGhhbmRsZV9lZGdlX2lycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGM1Mnh4X2dwdF9pcnFfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAorCQkJCSB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAorCQkJCSBpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwKKwkJCQkgdW5zaWduZWQgaW50ICpvdXRfZmxhZ3MpCit7CisJc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdwdCA9IGgtPmhvc3RfZGF0YTsKKworCWRldl9kYmcoZ3B0LT5kZXYsICIlczogZmxhZ3M9JWlcbiIsIF9fZnVuY19fLCBpbnRzcGVjWzBdKTsKKworCWlmICgoaW50c2l6ZSA8IDEpIHx8IChpbnRzcGVjWzBdIDwgMSkgfHwgKGludHNwZWNbMF0gPiAzKSkgeworCQlkZXZfZXJyKGdwdC0+ZGV2LCAiYmFkIGlycSBzcGVjaWZpZXIgaW4gJXNcbiIsIGN0LT5mdWxsX25hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkqb3V0X2h3aXJxID0gMDsgLyogVGhlIEdQVCBvbmx5IGhhcyAxIElSUSBsaW5lICovCisJKm91dF9mbGFncyA9IGludHNwZWNbMF07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfaG9zdF9vcHMgbXBjNTJ4eF9ncHRfaXJxX29wcyA9IHsKKwkubWFwID0gbXBjNTJ4eF9ncHRfaXJxX21hcCwKKwkueGxhdGUgPSBtcGM1Mnh4X2dwdF9pcnFfeGxhdGUsCit9OworCitzdGF0aWMgdm9pZAorbXBjNTJ4eF9ncHRfaXJxX3NldHVwKHN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwlpbnQgY2FzY2FkZV92aXJxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBPbmx5IHNldHVwIGNhc2NhZGVkIElSUSBpZiBkZXZpY2UgdHJlZSBjbGFpbXMgdGhlIEdQVCBpcworCSAqIGFuIGludGVycnVwdCBjb250cm9sbGVyICovCisJaWYgKCFvZl9maW5kX3Byb3BlcnR5KG5vZGUsICJpbnRlcnJ1cHQtY29udHJvbGxlciIsIE5VTEwpKQorCQlyZXR1cm47CisKKwljYXNjYWRlX3ZpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChub2RlLCAwKTsKKworCWdwdC0+aXJxaG9zdCA9IGlycV9hbGxvY19ob3N0KG5vZGUsIElSUV9IT1NUX01BUF9MSU5FQVIsIDEsCisJCQkJICAgICAgJm1wYzUyeHhfZ3B0X2lycV9vcHMsIC0xKTsKKwlpZiAoIWdwdC0+aXJxaG9zdCkgeworCQlkZXZfZXJyKGdwdC0+ZGV2LCAiaXJxX2FsbG9jX2hvc3QoKSBmYWlsZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJZ3B0LT5pcnFob3N0LT5ob3N0X2RhdGEgPSBncHQ7CisKKwlzZXRfaXJxX2RhdGEoY2FzY2FkZV92aXJxLCBncHQpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGNhc2NhZGVfdmlycSwgbXBjNTJ4eF9ncHRfaXJxX2Nhc2NhZGUpOworCisJLyogU2V0IHRvIElucHV0IENhcHR1cmUgbW9kZSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZncHQtPmxvY2ssIGZsYWdzKTsKKwljbHJzZXRiaXRzX2JlMzIoJmdwdC0+cmVncy0+bW9kZSwgTVBDNTJ4eF9HUFRfTU9ERV9NU19NQVNLLAorCQkJTVBDNTJ4eF9HUFRfTU9ERV9NU19JQyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3B0LT5sb2NrLCBmbGFncyk7CisKKwlkZXZfZGJnKGdwdC0+ZGV2LCAiJXMoKSBjb21wbGV0ZS4gdmlycT0laVxuIiwgX19mdW5jX18sIGNhc2NhZGVfdmlycSk7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBHUElPTElCIGhvb2tzCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19HUElPTElCKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ2NfdG9fbXBjNTJ4eF9ncHQoc3RydWN0IGdwaW9fY2hpcCAqZ2MpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih0b19vZl9ncGlvX2NoaXAoZ2MpLCBzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdixvZl9nYyk7Cit9CisKK3N0YXRpYyBpbnQgbXBjNTJ4eF9ncHRfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvKQoreworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQgPSBnY190b19tcGM1Mnh4X2dwdChnYyk7CisKKwlyZXR1cm4gKGluX2JlMzIoJmdwdC0+cmVncy0+c3RhdHVzKSA+PiA4KSAmIDE7Cit9CisKK3N0YXRpYyB2b2lkCittcGM1Mnh4X2dwdF9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8sIGludCB2KQoreworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQgPSBnY190b19tcGM1Mnh4X2dwdChnYyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcjsKKworCWRldl9kYmcoZ3B0LT5kZXYsICIlczogZ3BpbzolZCB2OiVkXG4iLCBfX2Z1bmNfXywgZ3Bpbywgdik7CisJciA9IHYgPyBNUEM1Mnh4X0dQVF9NT0RFX0dQSU9fT1VUX0hJR0ggOiBNUEM1Mnh4X0dQVF9NT0RFX0dQSU9fT1VUX0xPVzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncHQtPmxvY2ssIGZsYWdzKTsKKwljbHJzZXRiaXRzX2JlMzIoJmdwdC0+cmVncy0+bW9kZSwgTVBDNTJ4eF9HUFRfTU9ERV9HUElPX01BU0ssIHIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwdC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG1wYzUyeHhfZ3B0X2dwaW9fZGlyX2luKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbykKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0ID0gZ2NfdG9fbXBjNTJ4eF9ncHQoZ2MpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkZXZfZGJnKGdwdC0+ZGV2LCAiJXM6IGdwaW86JWRcbiIsIF9fZnVuY19fLCBncGlvKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncHQtPmxvY2ssIGZsYWdzKTsKKwljbHJiaXRzMzIoJmdwdC0+cmVncy0+bW9kZSwgTVBDNTJ4eF9HUFRfTU9ERV9HUElPX01BU0spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwdC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK21wYzUyeHhfZ3B0X2dwaW9fZGlyX291dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8sIGludCB2YWwpCit7CisJbXBjNTJ4eF9ncHRfZ3Bpb19zZXQoZ2MsIGdwaW8sIHZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCittcGM1Mnh4X2dwdF9ncGlvX3NldHVwKHN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwlpbnQgcmM7CisKKwkvKiBPbmx5IHNldHVwIEdQSU8gaWYgdGhlIGRldmljZSB0cmVlIGNsYWltcyB0aGUgR1BUIGlzCisJICogYSBHUElPIGNvbnRyb2xsZXIgKi8KKwlpZiAoIW9mX2ZpbmRfcHJvcGVydHkobm9kZSwgImdwaW8tY29udHJvbGxlciIsIE5VTEwpKQorCQlyZXR1cm47CisKKwlncHQtPm9mX2djLmdjLmxhYmVsID0ga3N0cmR1cChub2RlLT5mdWxsX25hbWUsIEdGUF9LRVJORUwpOworCWlmICghZ3B0LT5vZl9nYy5nYy5sYWJlbCkgeworCQlkZXZfZXJyKGdwdC0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybjsKKwl9CisKKwlncHQtPm9mX2djLmdwaW9fY2VsbHMgPSAyOworCWdwdC0+b2ZfZ2MuZ2MubmdwaW8gPSAxOworCWdwdC0+b2ZfZ2MuZ2MuZGlyZWN0aW9uX2lucHV0ICA9IG1wYzUyeHhfZ3B0X2dwaW9fZGlyX2luOworCWdwdC0+b2ZfZ2MuZ2MuZGlyZWN0aW9uX291dHB1dCA9IG1wYzUyeHhfZ3B0X2dwaW9fZGlyX291dDsKKwlncHQtPm9mX2djLmdjLmdldCA9IG1wYzUyeHhfZ3B0X2dwaW9fZ2V0OworCWdwdC0+b2ZfZ2MuZ2Muc2V0ID0gbXBjNTJ4eF9ncHRfZ3Bpb19zZXQ7CisJZ3B0LT5vZl9nYy5nYy5iYXNlID0gLTE7CisJZ3B0LT5vZl9nYy54bGF0ZSA9IG9mX2dwaW9fc2ltcGxlX3hsYXRlOworCW5vZGUtPmRhdGEgPSAmZ3B0LT5vZl9nYzsKKwlvZl9ub2RlX2dldChub2RlKTsKKworCS8qIFNldHVwIGV4dGVybmFsIHBpbiBpbiBHUElPIG1vZGUgKi8KKwljbHJzZXRiaXRzX2JlMzIoJmdwdC0+cmVncy0+bW9kZSwgTVBDNTJ4eF9HUFRfTU9ERV9NU19NQVNLLAorCQkJTVBDNTJ4eF9HUFRfTU9ERV9NU19HUElPKTsKKworCXJjID0gZ3Bpb2NoaXBfYWRkKCZncHQtPm9mX2djLmdjKTsKKwlpZiAocmMpCisJCWRldl9lcnIoZ3B0LT5kZXYsICJncGlvY2hpcF9hZGQoKSBmYWlsZWQ7IHJjPSVpXG4iLCByYyk7CisKKwlkZXZfZGJnKGdwdC0+ZGV2LCAiJXMoKSBjb21wbGV0ZS5cbiIsIF9fZnVuY19fKTsKK30KKyNlbHNlIC8qIGRlZmluZWQoQ09ORklHX0dQSU9MSUIpICovCitzdGF0aWMgdm9pZAorbXBjNTJ4eF9ncHRfZ3Bpb19zZXR1cChzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqcCwgc3RydWN0IGRldmljZV9ub2RlICpucCkgeyB9CisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfR1BJT0xJQikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBvZl9wbGF0Zm9ybSBidXMgYmluZGluZyBjb2RlCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IG1wYzUyeHhfZ3B0X3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0OworCisJZ3B0ID0ga3phbGxvYyhzaXplb2YgKmdwdCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFncHQpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJmdwdC0+bG9jayk7CisJZ3B0LT5kZXYgPSAmb2ZkZXYtPmRldjsKKwlncHQtPnJlZ3MgPSBvZl9pb21hcChvZmRldi0+bm9kZSwgMCk7CisJaWYgKCFncHQtPnJlZ3MpIHsKKwkJa2ZyZWUoZ3B0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCBncHQpOworCisJbXBjNTJ4eF9ncHRfZ3Bpb19zZXR1cChncHQsIG9mZGV2LT5ub2RlKTsKKwltcGM1Mnh4X2dwdF9pcnFfc2V0dXAoZ3B0LCBvZmRldi0+bm9kZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGM1Mnh4X2dwdF9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCit7CisJcmV0dXJuIC1FQlVTWTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTJ4eF9ncHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwdCIsIH0sCisKKwkvKiBEZXByZWNpYXRlZCBjb21wYXRpYmxlIHZhbHVlczsgZG9uJ3QgdXNlIGZvciBuZXcgZHRzIGZpbGVzICovCisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncHQtZ3BpbyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtcGM1MjAwLWdwdCIsIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG1wYzUyeHhfZ3B0X2RyaXZlciA9IHsKKwkubmFtZSA9ICJtcGM1Mnh4LWdwdCIsCisJLm1hdGNoX3RhYmxlID0gbXBjNTJ4eF9ncHRfbWF0Y2gsCisJLnByb2JlID0gbXBjNTJ4eF9ncHRfcHJvYmUsCisJLnJlbW92ZSA9IG1wYzUyeHhfZ3B0X3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1wYzUyeHhfZ3B0X2luaXQodm9pZCkKK3sKKwlpZiAob2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZtcGM1Mnh4X2dwdF9kcml2ZXIpKQorCQlwcl9lcnIoImVycm9yIHJlZ2lzdGVyaW5nIE1QQzUyeHggR1BUIGRyaXZlclxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyogTWFrZSBzdXJlIEdQSU9zIGFuZCBJUlFzIGdldCBzZXQgdXAgYmVmb3JlIGFueW9uZSB0cmllcyB0byB1c2UgdGhlbSAqLworc3Vic3lzX2luaXRjYWxsKG1wYzUyeHhfZ3B0X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYwppbmRleCAwYTA5M2YwLi40ODBmODA2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYwpAQCAtMTYzLDggKzE2Myw2IEBACiAJaXJxID0gaXJxX21hcFt2aXJxXS5od2lycTsKIAlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAKLQlwcl9kZWJ1ZygiJXM6IGlycT0leC4gbDI9JWRcbiIsIF9fZnVuY19fLCBpcnEsIGwyaXJxKTsKLQogCWlvX2JlX2NscmJpdCgmaW50ci0+Y3RybCwgMTEgLSBsMmlycSk7CiB9CiAKQEAgLTE3Niw4ICsxNzQsNiBAQAogCWlycSA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCi0JcHJfZGVidWcoIiVzOiBpcnE9JXguIGwyPSVkXG4iLCBfX2Z1bmNfXywgaXJxLCBsMmlycSk7Ci0KIAlpb19iZV9zZXRiaXQoJmludHItPmN0cmwsIDExIC0gbDJpcnEpOwogfQogCkBAIC0xODksMTcgKzE4NSwxNSBAQAogCWlycSA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCi0JcHJfZGVidWcoIiVzOiBpcnE9JXguIGwyPSVkXG4iLCBfX2Z1bmNfXywgaXJxLCBsMmlycSk7Ci0KIAlpb19iZV9zZXRiaXQoJmludHItPmN0cmwsIDI3LWwyaXJxKTsKIH0KIAogc3RhdGljIGludCBtcGM1Mnh4X2V4dGlycV9zZXRfdHlwZSh1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBnZXRfaXJxX2Rlc2ModmlycSk7CiAJdTMyIGN0cmxfcmVnLCB0eXBlOwogCWludCBpcnE7CiAJaW50IGwyaXJxOworCXZvaWQgKmhhbmRsZXIgPSBoYW5kbGVfbGV2ZWxfaXJxOwogCiAJaXJxID0gaXJxX21hcFt2aXJxXS5od2lycTsKIAlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CkBAIC0yMDcsMzIgKzIwMSwyMSBAQAogCXByX2RlYnVnKCIlczogaXJxPSV4LiBsMj0lZCBmbG93X3R5cGU9JWRcbiIsIF9fZnVuY19fLCBpcnEsIGwyaXJxLCBmbG93X3R5cGUpOwogCiAJc3dpdGNoIChmbG93X3R5cGUpIHsKLQljYXNlIElSUUZfVFJJR0dFUl9ISUdIOgotCQl0eXBlID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFGX1RSSUdHRVJfUklTSU5HOgotCQl0eXBlID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFGX1RSSUdHRVJfRkFMTElORzoKLQkJdHlwZSA9IDI7Ci0JCWJyZWFrOwotCWNhc2UgSVJRRl9UUklHR0VSX0xPVzoKLQkJdHlwZSA9IDM7Ci0JCWJyZWFrOworCWNhc2UgSVJRRl9UUklHR0VSX0hJR0g6IHR5cGUgPSAwOyBicmVhazsKKwljYXNlIElSUUZfVFJJR0dFUl9SSVNJTkc6IHR5cGUgPSAxOyBoYW5kbGVyID0gaGFuZGxlX2VkZ2VfaXJxOyBicmVhazsKKwljYXNlIElSUUZfVFJJR0dFUl9GQUxMSU5HOiB0eXBlID0gMjsgaGFuZGxlciA9IGhhbmRsZV9lZGdlX2lycTsgYnJlYWs7CisJY2FzZSBJUlFGX1RSSUdHRVJfTE9XOiB0eXBlID0gMzsgYnJlYWs7CiAJZGVmYXVsdDoKIAkJdHlwZSA9IDA7CiAJfQogCi0JZGVzYy0+c3RhdHVzICY9IH4oSVJRX1RZUEVfU0VOU0VfTUFTSyB8IElSUV9MRVZFTCk7Ci0JZGVzYy0+c3RhdHVzIHw9IGZsb3dfdHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0s7Ci0JaWYgKGZsb3dfdHlwZSAmIChJUlFfVFlQRV9MRVZFTF9ISUdIIHwgSVJRX1RZUEVfTEVWRUxfTE9XKSkKLQkJZGVzYy0+c3RhdHVzIHw9IElSUV9MRVZFTDsKLQogCWN0cmxfcmVnID0gaW5fYmUzMigmaW50ci0+Y3RybCk7CiAJY3RybF9yZWcgJj0gfigweDMgPDwgKDIyIC0gKGwyaXJxICogMikpKTsKIAljdHJsX3JlZyB8PSAodHlwZSA8PCAoMjIgLSAobDJpcnEgKiAyKSkpOwogCW91dF9iZTMyKCZpbnRyLT5jdHJsLCBjdHJsX3JlZyk7CiAKKwlfX3NldF9pcnFfaGFuZGxlcl91bmxvY2tlZCh2aXJxLCBoYW5kbGVyKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yNDcsNiArMjMwLDExIEBACiAvKgogICogTWFpbiBpbnRlcnJ1cHQgaXJxX2NoaXAKICAqLworc3RhdGljIGludCBtcGM1Mnh4X251bGxfc2V0X3R5cGUodW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCit7CisJcmV0dXJuIDA7IC8qIERvIG5vdGhpbmcgc28gdGhhdCB0aGUgc2Vuc2UgbWFzayB3aWxsIGdldCB1cGRhdGVkICovCit9CisKIHN0YXRpYyB2b2lkIG1wYzUyeHhfbWFpbl9tYXNrKHVuc2lnbmVkIGludCB2aXJxKQogewogCWludCBpcnE7CkBAIC0yNTUsOCArMjQzLDYgQEAKIAlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAotCXByX2RlYnVnKCIlczogaXJxPSV4LiBsMj0lZFxuIiwgX19mdW5jX18sIGlycSwgbDJpcnEpOwotCiAJaW9fYmVfc2V0Yml0KCZpbnRyLT5tYWluX21hc2ssIDE2IC0gbDJpcnEpOwogfQogCkBAIC0yNjgsOCArMjU0LDYgQEAKIAlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAotCXByX2RlYnVnKCIlczogaXJxPSV4LiBsMj0lZFxuIiwgX19mdW5jX18sIGlycSwgbDJpcnEpOwotCiAJaW9fYmVfY2xyYml0KCZpbnRyLT5tYWluX21hc2ssIDE2IC0gbDJpcnEpOwogfQogCkBAIC0yNzgsNiArMjYyLDcgQEAKIAkubWFzayA9IG1wYzUyeHhfbWFpbl9tYXNrLAogCS5tYXNrX2FjayA9IG1wYzUyeHhfbWFpbl9tYXNrLAogCS51bm1hc2sgPSBtcGM1Mnh4X21haW5fdW5tYXNrLAorCS5zZXRfdHlwZSA9IG1wYzUyeHhfbnVsbF9zZXRfdHlwZSwKIH07CiAKIC8qCkBAIC0yOTEsOCArMjc2LDYgQEAKIAlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAotCXByX2RlYnVnKCIlczogaXJxPSV4LiBsMj0lZFxuIiwgX19mdW5jX18sIGlycSwgbDJpcnEpOwotCiAJaW9fYmVfc2V0Yml0KCZpbnRyLT5wZXJfbWFzaywgMzEgLSBsMmlycSk7CiB9CiAKQEAgLTMwNCw4ICsyODcsNiBAQAogCWlycSA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCi0JcHJfZGVidWcoIiVzOiBpcnE9JXguIGwyPSVkXG4iLCBfX2Z1bmNfXywgaXJxLCBsMmlycSk7Ci0KIAlpb19iZV9jbHJiaXQoJmludHItPnBlcl9tYXNrLCAzMSAtIGwyaXJxKTsKIH0KIApAQCAtMzE0LDYgKzI5NSw3IEBACiAJLm1hc2sgPSBtcGM1Mnh4X3BlcmlwaF9tYXNrLAogCS5tYXNrX2FjayA9IG1wYzUyeHhfcGVyaXBoX21hc2ssCiAJLnVubWFzayA9IG1wYzUyeHhfcGVyaXBoX3VubWFzaywKKwkuc2V0X3R5cGUgPSBtcGM1Mnh4X251bGxfc2V0X3R5cGUsCiB9OwogCiAvKgpAQCAtMzI3LDggKzMwOSw2IEBACiAJaXJxID0gaXJxX21hcFt2aXJxXS5od2lycTsKIAlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAKLQlwcl9kZWJ1ZygiJXM6IGlycT0leC4gbDI9JWRcbiIsIF9fZnVuY19fLCBpcnEsIGwyaXJxKTsKLQogCWlvX2JlX3NldGJpdCgmc2RtYS0+SW50TWFzaywgbDJpcnEpOwogfQogCkBAIC0zNDAsOCArMzIwLDYgQEAKIAlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAotCXByX2RlYnVnKCIlczogaXJxPSV4LiBsMj0lZFxuIiwgX19mdW5jX18sIGlycSwgbDJpcnEpOwotCiAJaW9fYmVfY2xyYml0KCZzZG1hLT5JbnRNYXNrLCBsMmlycSk7CiB9CiAKQEAgLTM1Myw4ICszMzEsNiBAQAogCWlycSA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCi0JcHJfZGVidWcoIiVzOiBpcnE9JXguIGwyPSVkXG4iLCBfX2Z1bmNfXywgaXJxLCBsMmlycSk7Ci0KIAlvdXRfYmUzMigmc2RtYS0+SW50UGVuZCwgMSA8PCBsMmlycSk7CiB9CiAKQEAgLTM2Myw5ICszMzksMTkgQEAKIAkubWFzayA9IG1wYzUyeHhfc2RtYV9tYXNrLAogCS51bm1hc2sgPSBtcGM1Mnh4X3NkbWFfdW5tYXNrLAogCS5hY2sgPSBtcGM1Mnh4X3NkbWFfYWNrLAorCS5zZXRfdHlwZSA9IG1wYzUyeHhfbnVsbF9zZXRfdHlwZSwKIH07CiAKIC8qKgorICogbXBjNTJ4eF9pc19leHRpcnEgLSBSZXR1cm5zIHRydWUgaWYgaHdpcnEgbnVtYmVyIGlzIGZvciBhbiBleHRlcm5hbCBJUlEKKyAqLworc3RhdGljIGludCBtcGM1Mnh4X2lzX2V4dGlycShpbnQgbDEsIGludCBsMikKK3sKKwlyZXR1cm4gKChsMSA9PSAwKSAmJiAobDIgPT0gMCkpIHx8CisJICAgICAgICgobDEgPT0gMSkgJiYgKGwyID49IDEpICYmIChsMiA8PSAzKSk7Cit9CisKKy8qKgogICogbXBjNTJ4eF9pcnFob3N0X3hsYXRlIC0gdHJhbnNsYXRlIHZpcnEjIGZyb20gZGV2aWNlIHRyZWUgaW50ZXJydXB0cyBwcm9wZXJ0eQogICovCiBzdGF0aWMgaW50IG1wYzUyeHhfaXJxaG9zdF94bGF0ZShzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3QsCkBAIC0zODMsMzggKzM2OSwyMyBAQAogCiAJaW50cnZlY3RfbDEgPSAoaW50KWludHNwZWNbMF07CiAJaW50cnZlY3RfbDIgPSAoaW50KWludHNwZWNbMV07Ci0JaW50cnZlY3RfdHlwZSA9IChpbnQpaW50c3BlY1syXTsKKwlpbnRydmVjdF90eXBlID0gKGludClpbnRzcGVjWzJdICYgMHgzOwogCiAJaW50cnZlY3RfbGludXggPSAoaW50cnZlY3RfbDEgPDwgTVBDNTJ4eF9JUlFfTDFfT0ZGU0VUKSAmCiAJCQkgTVBDNTJ4eF9JUlFfTDFfTUFTSzsKIAlpbnRydmVjdF9saW51eCB8PSBpbnRydmVjdF9sMiAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAKKwkqb3V0X2h3aXJxID0gaW50cnZlY3RfbGludXg7CisJKm91dF9mbGFncyA9IElSUV9UWVBFX0xFVkVMX0xPVzsKKwlpZiAobXBjNTJ4eF9pc19leHRpcnEoaW50cnZlY3RfbDEsIGludHJ2ZWN0X2wyKSkKKwkJKm91dF9mbGFncyA9IG1wYzUyeHhfbWFwX3NlbnNlc1tpbnRydmVjdF90eXBlXTsKKwogCXByX2RlYnVnKCJyZXR1cm4gJXgsIGwxPSVkLCBsMj0lZFxuIiwgaW50cnZlY3RfbGludXgsIGludHJ2ZWN0X2wxLAogCQkgaW50cnZlY3RfbDIpOwotCi0JKm91dF9od2lycSA9IGludHJ2ZWN0X2xpbnV4OwotCSpvdXRfZmxhZ3MgPSBtcGM1Mnh4X21hcF9zZW5zZXNbaW50cnZlY3RfdHlwZV07Ci0KIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiBtcGM1Mnh4X2lycXhfZ2V0dHlwZSAtIGRldGVybWluZSB0aGUgSVJRIHNlbnNlIHR5cGUgKGxldmVsL2VkZ2UpCi0gKgotICogT25seSBleHRlcm5hbCBJUlFzIG5lZWQgdGhpcy4KLSAqLwotc3RhdGljIGludCBtcGM1Mnh4X2lycXhfZ2V0dHlwZShpbnQgaXJxKQotewotCWludCB0eXBlOwotCXUzMiBjdHJsX3JlZzsKLQotCWN0cmxfcmVnID0gaW5fYmUzMigmaW50ci0+Y3RybCk7Ci0JdHlwZSA9IChjdHJsX3JlZyA+PiAoMjIgLSBpcnEgKiAyKSkgJiAweDM7Ci0KLQlyZXR1cm4gbXBjNTJ4eF9tYXBfc2Vuc2VzW3R5cGVdOwotfQotCi0vKioKICAqIG1wYzUyeHhfaXJxaG9zdF9tYXAgLSBIb29rIHRvIG1hcCBmcm9tIHZpcnEgdG8gYW4gaXJxX2NoaXAgc3RydWN0dXJlCiAgKi8KIHN0YXRpYyBpbnQgbXBjNTJ4eF9pcnFob3N0X21hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLApAQCAtNDIyLDY4ICszOTMsNDYgQEAKIHsKIAlpbnQgbDFpcnE7CiAJaW50IGwyaXJxOwotCXN0cnVjdCBpcnFfY2hpcCAqZ29vZF9pcnFjaGlwOwotCXZvaWQgKmdvb2RfaGFuZGxlOworCXN0cnVjdCBpcnFfY2hpcCAqaXJxY2hpcDsKKwl2b2lkICpobmRscjsKIAlpbnQgdHlwZTsKKwl1MzIgcmVnOwogCiAJbDFpcnEgPSAoaXJxICYgTVBDNTJ4eF9JUlFfTDFfTUFTSykgPj4gTVBDNTJ4eF9JUlFfTDFfT0ZGU0VUOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAogCS8qCi0JICogTW9zdCBvZiBvdXJzIElSUXMgd2lsbCBiZSBsZXZlbCBsb3cKLQkgKiBPbmx5IGV4dGVybmFsIElSUXMgb24gc29tZSBwbGF0Zm9ybSBtYXkgYmUgb3RoZXJzCisJICogRXh0ZXJuYWwgSVJRcyBhcmUgaGFuZGxlZCBkaWZmZXJlbnRseSBieSB0aGUgaGFyZHdhcmUgc28gdGhleSBhcmUKKwkgKiBoYW5kbGVkIGJ5IGEgZGVkaWNhdGVkIGlycV9jaGlwIHN0cnVjdHVyZS4KIAkgKi8KLQl0eXBlID0gSVJRX1RZUEVfTEVWRUxfTE9XOworCWlmIChtcGM1Mnh4X2lzX2V4dGlycShsMWlycSwgbDJpcnEpKSB7CisJCXJlZyA9IGluX2JlMzIoJmludHItPmN0cmwpOworCQl0eXBlID0gbXBjNTJ4eF9tYXBfc2Vuc2VzWyhyZWcgPj4gKDIyIC0gbDJpcnEgKiAyKSkgJiAweDNdOworCQlpZiAoKHR5cGUgPT0gSVJRX1RZUEVfRURHRV9GQUxMSU5HKSB8fAorCQkgICAgKHR5cGUgPT0gSVJRX1RZUEVfRURHRV9SSVNJTkcpKQorCQkJaG5kbHIgPSBoYW5kbGVfZWRnZV9pcnE7CisJCWVsc2UKKwkJCWhuZGxyID0gaGFuZGxlX2xldmVsX2lycTsKIAorCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJm1wYzUyeHhfZXh0aXJxX2lycWNoaXAsIGhuZGxyKTsKKwkJcHJfZGVidWcoIiVzOiBFeHRlcm5hbCBJUlElaSB2aXJxPSV4LCBodz0leC4gdHlwZT0leFxuIiwKKwkJCSBfX2Z1bmNfXywgbDJpcnEsIHZpcnEsIChpbnQpaXJxLCB0eXBlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogSXQgaXMgYW4gaW50ZXJuYWwgU09DIGlycS4gIENob29zZSB0aGUgY29ycmVjdCBpcnFfY2hpcCAqLwogCXN3aXRjaCAobDFpcnEpIHsKLQljYXNlIE1QQzUyeHhfSVJRX0wxX0NSSVQ6Ci0JCXByX2RlYnVnKCIlczogQ3JpdGljYWwuIGwyPSV4XG4iLCBfX2Z1bmNfXywgbDJpcnEpOwotCi0JCUJVR19PTihsMmlycSAhPSAwKTsKLQotCQl0eXBlID0gbXBjNTJ4eF9pcnF4X2dldHR5cGUobDJpcnEpOwotCQlnb29kX2lycWNoaXAgPSAmbXBjNTJ4eF9leHRpcnFfaXJxY2hpcDsKLQkJYnJlYWs7Ci0KLQljYXNlIE1QQzUyeHhfSVJRX0wxX01BSU46Ci0JCXByX2RlYnVnKCIlczogTWFpbiBJUlFbMS0zXSBsMj0leFxuIiwgX19mdW5jX18sIGwyaXJxKTsKLQotCQlpZiAoKGwyaXJxID49IDEpICYmIChsMmlycSA8PSAzKSkgewotCQkJdHlwZSA9IG1wYzUyeHhfaXJxeF9nZXR0eXBlKGwyaXJxKTsKLQkJCWdvb2RfaXJxY2hpcCA9ICZtcGM1Mnh4X2V4dGlycV9pcnFjaGlwOwotCQl9IGVsc2UgewotCQkJZ29vZF9pcnFjaGlwID0gJm1wYzUyeHhfbWFpbl9pcnFjaGlwOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBNUEM1Mnh4X0lSUV9MMV9QRVJQOgotCQlwcl9kZWJ1ZygiJXM6IFBlcmlwaGVyYWxzLiBsMj0leFxuIiwgX19mdW5jX18sIGwyaXJxKTsKLQkJZ29vZF9pcnFjaGlwID0gJm1wYzUyeHhfcGVyaXBoX2lycWNoaXA7Ci0JCWJyZWFrOwotCi0JY2FzZSBNUEM1Mnh4X0lSUV9MMV9TRE1BOgotCQlwcl9kZWJ1ZygiJXM6IFNETUEuIGwyPSV4XG4iLCBfX2Z1bmNfXywgbDJpcnEpOwotCQlnb29kX2lycWNoaXAgPSAmbXBjNTJ4eF9zZG1hX2lycWNoaXA7Ci0JCWJyZWFrOwotCisJY2FzZSBNUEM1Mnh4X0lSUV9MMV9NQUlOOiBpcnFjaGlwID0gJm1wYzUyeHhfbWFpbl9pcnFjaGlwOyBicmVhazsKKwljYXNlIE1QQzUyeHhfSVJRX0wxX1BFUlA6IGlycWNoaXAgPSAmbXBjNTJ4eF9wZXJpcGhfaXJxY2hpcDsgYnJlYWs7CisJY2FzZSBNUEM1Mnh4X0lSUV9MMV9TRE1BOiBpcnFjaGlwID0gJm1wYzUyeHhfc2RtYV9pcnFjaGlwOyBicmVhazsKIAlkZWZhdWx0OgotCQlwcl9lcnIoIiVzOiBpbnZhbGlkIHZpcnEgcmVxdWVzdGVkICgweCV4KVxuIiwgX19mdW5jX18sIHZpcnEpOworCQlwcl9lcnIoIiVzOiBpbnZhbGlkIGlycTogdmlycT0laSwgbDE9JWksIGwyPSVpXG4iLAorCQkgICAgICAgX19mdW5jX18sIHZpcnEsIGwxaXJxLCBsMmlycSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgSVJRX1RZUEVfRURHRV9GQUxMSU5HOgotCWNhc2UgSVJRX1RZUEVfRURHRV9SSVNJTkc6Ci0JCWdvb2RfaGFuZGxlID0gaGFuZGxlX2VkZ2VfaXJxOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlnb29kX2hhbmRsZSA9IGhhbmRsZV9sZXZlbF9pcnE7Ci0JfQotCi0Jc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsIGdvb2RfaXJxY2hpcCwgZ29vZF9oYW5kbGUpOwotCi0JcHJfZGVidWcoIiVzOiB2aXJxPSV4LCBodz0leC4gdHlwZT0leFxuIiwgX19mdW5jX18sIHZpcnEsCi0JCSAoaW50KWlycSwgdHlwZSk7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsIGlycWNoaXAsIGhhbmRsZV9sZXZlbF9pcnEpOworCXByX2RlYnVnKCIlczogdmlycT0leCwgbDE9JWksIGwyPSVpXG4iLCBfX2Z1bmNfXywgdmlycSwgbDFpcnEsIGwyaXJxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTIyLDYgKzQ3MSw4IEBACiAJCXBhbmljKF9fRklMRV9fCSI6IGZpbmRfYW5kX21hcCBmYWlsZWQgb24gJ21wYzUyMDAtYmVzdGNvbW0nLiAiCiAJCQkJIkNoZWNrIG5vZGUgISIpOwogCisJcHJfZGVidWcoIk1QQzUyMDAgSVJRIGNvbnRyb2xsZXIgbWFwcGVkIHRvIDB4JXBcbiIsIGludHIpOworCiAJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0IHNvdXJjZXMuICovCiAJb3V0X2JlMzIoJnNkbWEtPkludFBlbmQsIDB4ZmZmZmZmZmYpOwkvKiAxIG1lYW5zIGNsZWFyIHBlbmRpbmcgKi8KIAlvdXRfYmUzMigmc2RtYS0+SW50TWFzaywgMHhmZmZmZmZmZik7CS8qIDEgbWVhbnMgZGlzYWJsZWQgKi8KQEAgLTYxMyw4ICs1NjQsNSBAQAogCQl9CiAJfQogCi0JcHJfZGVidWcoIiVzOiBpcnE9JXguIHZpcnE9JWRcbiIsIF9fZnVuY19fLCBpcnEsCi0JCSBpcnFfbGluZWFyX3Jldm1hcChtcGM1Mnh4X2lycWhvc3QsIGlycSkpOwotCiAJcmV0dXJuIGlycV9saW5lYXJfcmV2bWFwKG1wYzUyeHhfaXJxaG9zdCwgaXJxKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L0tjb25maWcKaW5kZXggMzBmMDA4Yi4uN2M3ZGY0MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogbWVudWNvbmZpZyBQUENfODJ4eAogCWJvb2wgIjgyeHgtYmFzZWQgYm9hcmRzIChQUSBJSSkiCi0JZGVwZW5kcyBvbiA2eHggJiYgUFBDX01VTFRJUExBVEZPUk0KKwlkZXBlbmRzIG9uIDZ4eAogCiBpZiBQUENfODJ4eAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9LY29uZmlnCmluZGV4IDgzYzY2NGEuLjQzN2QyOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogbWVudWNvbmZpZyBQUENfODN4eAogCWJvb2wgIjgzeHgtYmFzZWQgYm9hcmRzIgotCWRlcGVuZHMgb24gNnh4ICYmIFBQQ19NVUxUSVBMQVRGT1JNCisJZGVwZW5kcyBvbiA2eHgKIAlzZWxlY3QgUFBDX1VEQkdfMTY1NTAKIAlzZWxlY3QgUFBDX1BDSV9DSE9JQ0UKIAlzZWxlY3QgRlNMX1BDSSBpZiBQQ0kKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9hc3A4MzR4LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvYXNwODM0eC5jCmluZGV4IGJiMzBkNjcuLmFhMGQ4NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9hc3A4MzR4LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L2FzcDgzNHguYwpAQCAtNTgsNiArNTgsNyBAQAogCXsgLnR5cGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMXhfcmRiLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMxeF9yZGIuYwppbmRleCA5MWEyYzgwLi4wYjRmODgzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMxeF9yZGIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMxeF9yZGIuYwpAQCAtMzgsNiArMzgsOCBAQAogI2lmZGVmIENPTkZJR19QQ0kKIAlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzgzNDktcGNpIikKIAkJbXBjODN4eF9hZGRfYnJpZGdlKG5wKTsKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzgzMTQtcGNpZSIpCisJCW1wYzgzeHhfYWRkX2JyaWRnZShucCk7CiAjZW5kaWYKIAltcGM4MzF4X3VzYl9jZmcoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X2l0eC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfaXR4LmMKaW5kZXggNzYwOTJkMy4uODFlNDRmYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfaXR4LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfaXR4LmMKQEAgLTQyLDYgKzQyLDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9faW5pdGRhdGEgbXBjODM0eF9pdHhfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJmc2wscHEycHJvLWxvY2FsYnVzIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9tZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X21kcy5jCmluZGV4IGZjM2YyZWQuLmQwYTYzNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X21kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X21kcy5jCkBAIC0xMTIsNiArMTEyLDcgQEAKIAl7IC50eXBlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4Mzd4X21kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfbWRzLmMKaW5kZXggNTMwZWY5OS4uNTFkZjdlNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfbWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfbWRzLmMKQEAgLTg0LDE0ICs4NCwxMCBAQAogCQlwcGNfbWQucHJvZ3Jlc3MoIm1wYzgzN3hfbWRzX3NldHVwX2FyY2goKSIsIDApOwogCiAjaWZkZWYgQ09ORklHX1BDSQotCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgInBjaSIsICJmc2wsbXBjODM0OS1wY2kiKSB7Ci0JCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpIHsKLQkJCXByX3dhcm5pbmcoIiVzOiBkaXNhYmxlZCBieSB0aGUgZmlybXdhcmUuXG4iLAotCQkJCSAgIG5wLT5mdWxsX25hbWUpOwotCQkJY29udGludWU7Ci0JCX0KKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzgzNDktcGNpIikKIAkJbXBjODN4eF9hZGRfYnJpZGdlKG5wKTsKLQl9CisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4MzE0LXBjaWUiKQorCQltcGM4M3h4X2FkZF9icmlkZ2UobnApOwogI2VuZGlmCiAJbXBjODM3eG1kc191c2JfY2ZnKCk7CiB9CkBAIC0xMDAsNiArOTYsNyBAQAogCXsgLnR5cGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfcmRiLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM3eF9yZGIuYwppbmRleCAxZDA5NjU0Li43NmYzYjMyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM3eF9yZGIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM3eF9yZGIuYwpAQCAtMzgsNiArMzgsOCBAQAogI2lmZGVmIENPTkZJR19QQ0kKIAlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzgzNDktcGNpIikKIAkJbXBjODN4eF9hZGRfYnJpZGdlKG5wKTsKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzgzMTQtcGNpZSIpCisJCW1wYzgzeHhfYWRkX2JyaWRnZShucCk7CiAjZW5kaWYKIAltcGM4Mzd4X3VzYl9jZmcoKTsKIH0KQEAgLTQ2LDYgKzQ4LDcgQEAKIAl7IC50eXBlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zYmM4MzR4LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc2JjODM0eC5jCmluZGV4IDE1NmM0ZTIuLjQ5MDIzZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zYmM4MzR4LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3NiYzgzNHguYwpAQCAtODQsNiArODQsNyBAQAogCXsgLnR5cGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3VzYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3VzYi5jCmluZGV4IGNjOTljMjguLjExZTFmYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC91c2IuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvdXNiLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgpAQCAtMjEwLDcgKzIxMSw3IEBACiAJaW50IHJldCA9IDA7CiAKIAlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wtdXNiMi1kciIpOwotCWlmICghbnApCisJaWYgKCFucCB8fCAhb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpCiAJCXJldHVybiAtRU5PREVWOwogCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJwaHlfdHlwZSIsIE5VTEwpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCmluZGV4IGI3OWRjNzEuLjdmMDY2YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCkBAIC01MSw2ICs1MSwxMiBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1QQzg1eHggRFMgKE1QQzg1NDQgRFMpIGJvYXJkCiAKK2NvbmZpZyBTT0NSQVRFUworCWJvb2wgIlNvY3JhdGVzIgorCXNlbGVjdCBERUZBVUxUX1VJTUFHRQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFNvY3JhdGVzIGJvYXJkLgorCiBjb25maWcgS1NJODU2MAogICAgICAgICBib29sICJFbWVyc29uIEtTSTg1NjAiCiAgICAgICAgIHNlbGVjdCBERUZBVUxUX1VJTUFHRQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L01ha2VmaWxlCmluZGV4IGYwNzk4YzAuLmE4NTdiMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvTWFrZWZpbGUKQEAgLTEzLDQgKzEzLDUgQEAKIG9iai0kKENPTkZJR19UUU04NXh4KQkgICs9IHRxbTg1eHgubwogb2JqLSQoQ09ORklHX1NCQzg1NjApICAgICArPSBzYmM4NTYwLm8KIG9iai0kKENPTkZJR19TQkM4NTQ4KSAgICAgKz0gc2JjODU0OC5vCitvYmotJChDT05GSUdfU09DUkFURVMpICAgICs9IHNvY3JhdGVzLm8gc29jcmF0ZXNfZnBnYV9waWMubwogb2JqLSQoQ09ORklHX0tTSTg1NjApCSAgKz0ga3NpODU2MC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgva3NpODU2MC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L2tzaTg1NjAuYwppbmRleCA4MWNlZTdiLi5mNGQzNmI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgva3NpODU2MC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9rc2k4NTYwLmMKQEAgLTEwNiw4ICsxMDYsNiBAQAogCWNwbTJfcGljX2luaXQobnApOwogCW9mX25vZGVfcHV0KG5wKTsKIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihpcnEsIGNwbTJfY2FzY2FkZSk7Ci0KLQlzZXR1cF9pcnEoMCwgTlVMTCk7CiAjZW5kaWYKIH0KIApAQCAtMjIxLDYgKzIxOSw3IEBACiAJeyAudHlwZSA9ICJzaW1wbGUtYnVzIiwgfSwKIAl7IC5uYW1lID0gImNwbSIsIH0sCiAJeyAubmFtZSA9ICJsb2NhbGJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTM2X2RzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODUzNl9kcy5jCmluZGV4IDFiZjVhZWYuLjYzZWZjYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTM2X2RzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1MzZfZHMuYwpAQCAtOTIsNiArOTIsNyBAQAogCXsgLnR5cGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYwppbmRleCAyMWYwMDkwLi45NDM4YTg5MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMKQEAgLTIyNiw2ICsyMjYsNyBAQAogCXsgLm5hbWUgPSAiY3BtIiwgfSwKIAl7IC5uYW1lID0gImxvY2FsYnVzIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Nkcy5jCmluZGV4IGFlYjZhNWIuLjQ1OGQ5MWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Nkcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Nkcy5jCkBAIC0xNzksNyArMTc5LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG1wYzg1eHhjZHNfODI1OV9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIgPSBtcGM4NXh4XzgyNTlfY2FzY2FkZV9hY3Rpb24sCiAJLmZsYWdzID0gSVJRRl9TSEFSRUQsCi0JLm1hc2sgPSBDUFVfTUFTS19OT05FLAogCS5uYW1lID0gIjgyNTkgY2FzY2FkZSIsCiB9OwogI2VuZGlmIC8qIFBQQ19JODI1OSAqLwpAQCAtMzM2LDYgKzMzNSw3IEBACiAJeyAudHlwZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfZHMuYwppbmRleCA3MzI2ZDkwLi5kZTY2ZGU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2RzLmMKQEAgLTIwNCw2ICsyMDQsNyBAQAogCXsgLnR5cGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYwppbmRleCA2NThhMzZmLi43ZGQwMjkwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYwpAQCAtMjY1LDYgKzI2NSw3IEBACiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKIAl7IC50eXBlID0gInFlIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxxZSIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTQ4LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU0OC5jCmluZGV4IDdlYzc3Y2UuLmVjZGQ4YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTQ4LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NDguYwpAQCAtMTU0LDYgKzE1NCw3IEBACiAJeyAubmFtZSA9ICJzb2MiLCB9LAogCXsgLnR5cGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuYwppbmRleCA0NzJmMjU0Li5jYzI3ODA3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTYwLmMKQEAgLTIxMyw2ICsyMTMsNyBAQAogCXsgLm5hbWUgPSAiY3BtIiwgfSwKIAl7IC5uYW1lID0gImxvY2FsYnVzIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMKaW5kZXggNzlhMGRmMS4uY2MwYjBkYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21waWMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9kYmVsbC5oPgogCiAjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KIApAQCAtODAsMTAgKzgxLDggQEAKIH0KIAogc3RhdGljIHZvaWQgX19pbml0Ci1zbXBfODV4eF9zZXR1cF9jcHUoaW50IGNwdV9ucikKK3NtcF84NXh4X2Jhc2ljX3NldHVwKGludCBjcHVfbnIpCiB7Ci0JbXBpY19zZXR1cF90aGlzX2NwdSgpOwotCiAJLyogQ2xlYXIgYW55IHBlbmRpbmcgdGltZXIgaW50ZXJydXB0cyAqLwogCW10c3ByKFNQUk5fVFNSLCBUU1JfRU5XIHwgVFNSX1dJUyB8IFRTUl9ESVMgfCBUU1JfRklTKTsKIApAQCAtOTEsMTUgKzkwLDQzIEBACiAJbXRzcHIoU1BSTl9UQ1IsIFRDUl9ESUUpOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQKK3NtcF84NXh4X3NldHVwX2NwdShpbnQgY3B1X25yKQoreworCW1waWNfc2V0dXBfdGhpc19jcHUoKTsKKworCXNtcF84NXh4X2Jhc2ljX3NldHVwKGNwdV9ucik7Cit9CisKIHN0cnVjdCBzbXBfb3BzX3Qgc21wXzg1eHhfb3BzID0gewotCS5tZXNzYWdlX3Bhc3MgPSBzbXBfbXBpY19tZXNzYWdlX3Bhc3MsCi0JLnByb2JlID0gc21wX21waWNfcHJvYmUsCiAJLmtpY2tfY3B1ID0gc21wXzg1eHhfa2lja19jcHUsCi0JLnNldHVwX2NwdSA9IHNtcF84NXh4X3NldHVwX2NwdSwKIH07CiAKLXZvaWQgX19pbml0Ci1tcGM4NXh4X3NtcF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzbXBfZHVtbXlfcHJvYmUodm9pZCkKIHsKKwlyZXR1cm4gTlJfQ1BVUzsKK30KKwordm9pZCBfX2luaXQgbXBjODV4eF9zbXBfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwlzbXBfODV4eF9vcHMubWVzc2FnZV9wYXNzID0gTlVMTDsKKworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgIm9wZW4tcGljIik7CisJaWYgKG5wKSB7CisJCXNtcF84NXh4X29wcy5wcm9iZSA9IHNtcF9tcGljX3Byb2JlOworCQlzbXBfODV4eF9vcHMuc2V0dXBfY3B1ID0gc21wXzg1eHhfc2V0dXBfY3B1OworCQlzbXBfODV4eF9vcHMubWVzc2FnZV9wYXNzID0gc21wX21waWNfbWVzc2FnZV9wYXNzOworCX0gZWxzZSB7CisJCXNtcF84NXh4X29wcy5wcm9iZSA9IHNtcF9kdW1teV9wcm9iZTsKKwkJc21wXzg1eHhfb3BzLnNldHVwX2NwdSA9IHNtcF84NXh4X2Jhc2ljX3NldHVwOworCX0KKworCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9EQkVMTCkpCisJCXNtcF84NXh4X29wcy5tZXNzYWdlX3Bhc3MgPSBzbXBfZGJlbGxfbWVzc2FnZV9wYXNzOworCisJQlVHX09OKCFzbXBfODV4eF9vcHMubWVzc2FnZV9wYXNzKTsKKwogCXNtcF9vcHMgPSAmc21wXzg1eHhfb3BzOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGU4NDQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzLmMKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRW1jcmFmdCBTeXN0ZW1zCisgKiBTZXJnZWkgUG9zZWxlbm92IDxzcG9zZWxlbm92QGVtY3JhZnQuY29tPgorICoKKyAqIEJhc2VkIG9uIE1QQzg1NjAgQURTIGFuZCBhcmNoL3BwYyB0cW04NXh4IHBvcnRzCisgKgorICogTWFpbnRhaW5lZCBieSBLdW1hciBHYWxhIChzZWUgTUFJTlRBSU5FUlMgZm9yIGNvbnRhY3QgaW5mb3JtYXRpb24pCisgKgorICogQ29weXJpZ2h0IDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA2IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcKKyAqIFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKyAqCisgKiBCYXNlZCBvbiBvcmlnaW5hbCB3b3JrIGJ5CisgKiAJS3VtYXIgR2FsYSA8a3VtYXIuZ2FsYUBmcmVlc2NhbGUuY29tPgorICogICAgICBDb3B5cmlnaHQgMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL21waWMuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPG1tL21tdV9kZWNsLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKworI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9wY2kuaD4KKworI2luY2x1ZGUgInNvY3JhdGVzX2ZwZ2FfcGljLmgiCisKK3N0YXRpYyB2b2lkIF9faW5pdCBzb2NyYXRlc19waWNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBtcGljICptcGljOworCXN0cnVjdCByZXNvdXJjZSByOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJvcGVuLXBpYyIpOworCWlmICghbnApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZmluZCBvcGVuLXBpYyBub2RlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgbWFwIG1waWMgcmVnaXN0ZXIgc3BhY2VcbiIpOworCQlvZl9ub2RlX3B1dChucCk7CisJCXJldHVybjsKKwl9CisKKwltcGljID0gbXBpY19hbGxvYyhucCwgci5zdGFydCwKKwkJCU1QSUNfUFJJTUFSWSB8IE1QSUNfV0FOVFNfUkVTRVQgfCBNUElDX0JJR19FTkRJQU4sCisJCQkwLCAyNTYsICIgT3BlblBJQyAgIik7CisJQlVHX09OKG1waWMgPT0gTlVMTCk7CisJb2Zfbm9kZV9wdXQobnApOworCisJbXBpY19pbml0KG1waWMpOworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiYWJiLHNvY3JhdGVzLWZwZ2EtcGljIik7CisJaWYgKCFucCkgeworCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBmaW5kIHNvY3JhdGVzLWZwZ2EtcGljIG5vZGVcbiIpOworCQlyZXR1cm47CisJfQorCXNvY3JhdGVzX2ZwZ2FfcGljX2luaXQobnApOworCW9mX25vZGVfcHV0KG5wKTsKK30KKworLyoKKyAqIFNldHVwIHRoZSBhcmNoaXRlY3R1cmUKKyAqLworc3RhdGljIHZvaWQgX19pbml0IHNvY3JhdGVzX3NldHVwX2FyY2godm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfUENJCisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKyNlbmRpZgorCisJaWYgKHBwY19tZC5wcm9ncmVzcykKKwkJcHBjX21kLnByb2dyZXNzKCJzb2NyYXRlc19zZXR1cF9hcmNoKCkiLCAwKTsKKworI2lmZGVmIENPTkZJR19QQ0kKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzg1NDAtcGNpIikKKwkJZnNsX2FkZF9icmlkZ2UobnAsIDEpOworI2VuZGlmCit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9faW5pdGRhdGEgc29jcmF0ZXNfb2ZfYnVzX2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKKwl7fSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzb2NyYXRlc19pbml0KHZvaWQpCit7CisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIHNvY3JhdGVzX29mX2J1c19pZHMsIE5VTEwpOworfQorCisvKgorICogQ2FsbGVkIHZlcnkgZWFybHksIGRldmljZS10cmVlIGlzbid0IHVuZmxhdHRlbmVkCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNvY3JhdGVzX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCisJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiYWJiLHNvY3JhdGVzIikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK2RlZmluZV9tYWNoaW5lKHNvY3JhdGVzKSB7CisJLm5hbWUJCQk9ICJTb2NyYXRlcyIsCisJLnByb2JlCQkJPSBzb2NyYXRlc19wcm9iZSwKKwkuc2V0dXBfYXJjaAkJPSBzb2NyYXRlc19zZXR1cF9hcmNoLAorCS5pbml0CQkJPSBzb2NyYXRlc19pbml0LAorCS5pbml0X0lSUQkJPSBzb2NyYXRlc19waWNfaW5pdCwKKwkuZ2V0X2lycQkJPSBtcGljX2dldF9pcnEsCisJLnJlc3RhcnQJCT0gZnNsX3JzdGNyX3Jlc3RhcnQsCisJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCisJLnByb2dyZXNzCQk9IHVkYmdfcHJvZ3Jlc3MsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzX2ZwZ2FfcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGVkZjYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzX2ZwZ2FfcGljLmMKQEAgLTAsMCArMSwzMjcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IElseWEgWWFub2ssIEVtY3JhZnQgU3lzdGVtcworICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisvKgorICogVGhlIEZQR0Egc3VwcG9ydHMgOSBpbnRlcnJ1cHQgc291cmNlcywgd2hpY2ggY2FuIGJlIHJvdXRlZCB0byAzCisgKiBpbnRlcnJ1cHQgcmVxdWVzdCBsaW5lcyBvZiB0aGUgTVBJQy4gVGhlIGxpbmUgdG8gYmUgdXNlZCBjYW4gYmUKKyAqIHNwZWNpZmllZCB0aHJvdWdoIHRoZSB0aGlyZCBjZWxsIG9mIEZEVCBwcm9wZXJ0eSAgImludGVycnVwdHMiLgorICovCisKKyNkZWZpbmUgU09DUkFURVNfRlBHQV9OVU1fSVJRUwk5CisKKyNkZWZpbmUgRlBHQV9QSUNfSVJRQ0ZHCQkoMHgwKQorI2RlZmluZSBGUEdBX1BJQ19JUlFNQVNLKG4pCSgweDQgKyAweDQgKiAobikpCisKKyNkZWZpbmUgU09DUkFURVNfRlBHQV9JUlFfTUFTSwkoKDEgPDwgU09DUkFURVNfRlBHQV9OVU1fSVJRUykgLSAxKQorCitzdHJ1Y3Qgc29jcmF0ZXNfZnBnYV9pcnFfaW5mbyB7CisJdW5zaWduZWQgaW50IGlycV9saW5lOworCWludCB0eXBlOworfTsKKworLyoKKyAqIEludGVycnVwdCByb3V0aW5nIGFuZCB0eXBlIHRhYmxlCisgKgorICogSVJRX1RZUEVfTk9ORSBtZWFucyB0aGUgaW50ZXJydXB0IHR5cGUgaXMgY29uZmlndXJhYmxlLAorICogb3RoZXJ3aXNlIGl0J3MgZml4ZWQgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS4KKyAqLworc3RhdGljIHN0cnVjdCBzb2NyYXRlc19mcGdhX2lycV9pbmZvIGZwZ2FfaXJxc1tTT0NSQVRFU19GUEdBX05VTV9JUlFTXSA9IHsKKwlbMF0gPSB7MCwgSVJRX1RZUEVfTk9ORX0sCisJWzFdID0gezAsIElSUV9UWVBFX0xFVkVMX0hJR0h9LAorCVsyXSA9IHswLCBJUlFfVFlQRV9MRVZFTF9MT1d9LAorCVszXSA9IHswLCBJUlFfVFlQRV9OT05FfSwKKwlbNF0gPSB7MCwgSVJRX1RZUEVfTk9ORX0sCisJWzVdID0gezAsIElSUV9UWVBFX05PTkV9LAorCVs2XSA9IHswLCBJUlFfVFlQRV9OT05FfSwKKwlbN10gPSB7MCwgSVJRX1RZUEVfTk9ORX0sCisJWzhdID0gezAsIElSUV9UWVBFX0xFVkVMX0hJR0h9LAorfTsKKworI2RlZmluZSBzb2NyYXRlc19mcGdhX2lycV90b19odyh2aXJxKSAgICAoKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxKQorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNvY3JhdGVzX2ZwZ2FfcGljX2xvY2spOworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpzb2NyYXRlc19mcGdhX3BpY19pb2Jhc2U7CitzdGF0aWMgc3RydWN0IGlycV9ob3N0ICpzb2NyYXRlc19mcGdhX3BpY19pcnFfaG9zdDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc29jcmF0ZXNfZnBnYV9pcnFzWzNdOworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IHNvY3JhdGVzX2ZwZ2FfcGljX3JlYWQoaW50IHJlZykKK3sKKwlyZXR1cm4gaW5fYmUzMihzb2NyYXRlc19mcGdhX3BpY19pb2Jhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc29jcmF0ZXNfZnBnYV9waWNfd3JpdGUoaW50IHJlZywgdWludDMyX3QgdmFsKQoreworCW91dF9iZTMyKHNvY3JhdGVzX2ZwZ2FfcGljX2lvYmFzZSArIHJlZywgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc29jcmF0ZXNfZnBnYV9waWNfZ2V0X2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVpbnQzMl90IGNhdXNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisKKwkvKiBDaGVjayBpcnEgbGluZSByb3V0ZWQgdG8gdGhlIE1QSUMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlmIChpcnEgPT0gc29jcmF0ZXNfZnBnYV9pcnFzW2ldKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IDMpCisJCXJldHVybiBOT19JUlE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCWNhdXNlID0gc29jcmF0ZXNfZnBnYV9waWNfcmVhZChGUEdBX1BJQ19JUlFNQVNLKGkpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisJZm9yIChpID0gU09DUkFURVNfRlBHQV9OVU1fSVJRUyAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChjYXVzZSA+PiAoaSArIDE2KSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gaXJxX2xpbmVhcl9yZXZtYXAoc29jcmF0ZXNfZnBnYV9waWNfaXJxX2hvc3QsCisJCQkoaXJxX2h3X251bWJlcl90KWkpOworfQorCit2b2lkIHNvY3JhdGVzX2ZwZ2FfcGljX2Nhc2NhZGUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXVuc2lnbmVkIGludCBjYXNjYWRlX2lycTsKKworCS8qCisJICogU2VlIGlmIHdlIGFjdHVhbGx5IGhhdmUgYW4gaW50ZXJydXB0LCBjYWxsIGdlbmVyaWMgaGFuZGxpbmcgY29kZSBpZgorCSAqIHdlIGRvLgorCSAqLworCWNhc2NhZGVfaXJxID0gc29jcmF0ZXNfZnBnYV9waWNfZ2V0X2lycShpcnEpOworCisJaWYgKGNhc2NhZGVfaXJxICE9IE5PX0lSUSkKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGNhc2NhZGVfaXJxKTsKKwlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKworfQorCitzdGF0aWMgdm9pZCBzb2NyYXRlc19mcGdhX3BpY19hY2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaHdpcnEsIGlycV9saW5lOworCXVpbnQzMl90IG1hc2s7CisKKwlod2lycSA9IHNvY3JhdGVzX2ZwZ2FfaXJxX3RvX2h3KHZpcnEpOworCisJaXJxX2xpbmUgPSBmcGdhX2lycXNbaHdpcnFdLmlycV9saW5lOworCXNwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisJbWFzayA9IHNvY3JhdGVzX2ZwZ2FfcGljX3JlYWQoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSkpCisJCSYgU09DUkFURVNfRlBHQV9JUlFfTUFTSzsKKwltYXNrIHw9ICgxIDw8IChod2lycSArIDE2KSk7CisJc29jcmF0ZXNfZnBnYV9waWNfd3JpdGUoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSksIG1hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc29jcmF0ZXNfZnBnYV9waWNfbWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBod2lycTsKKwlpbnQgaXJxX2xpbmU7CisJdTMyIG1hc2s7CisKKwlod2lycSA9IHNvY3JhdGVzX2ZwZ2FfaXJxX3RvX2h3KHZpcnEpOworCisJaXJxX2xpbmUgPSBmcGdhX2lycXNbaHdpcnFdLmlycV9saW5lOworCXNwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisJbWFzayA9IHNvY3JhdGVzX2ZwZ2FfcGljX3JlYWQoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSkpCisJCSYgU09DUkFURVNfRlBHQV9JUlFfTUFTSzsKKwltYXNrICY9IH4oMSA8PCBod2lycSk7CisJc29jcmF0ZXNfZnBnYV9waWNfd3JpdGUoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSksIG1hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc29jcmF0ZXNfZnBnYV9waWNfbWFza19hY2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaHdpcnE7CisJaW50IGlycV9saW5lOworCXUzMiBtYXNrOworCisJaHdpcnEgPSBzb2NyYXRlc19mcGdhX2lycV90b19odyh2aXJxKTsKKworCWlycV9saW5lID0gZnBnYV9pcnFzW2h3aXJxXS5pcnFfbGluZTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCW1hc2sgPSBzb2NyYXRlc19mcGdhX3BpY19yZWFkKEZQR0FfUElDX0lSUU1BU0soaXJxX2xpbmUpKQorCQkmIFNPQ1JBVEVTX0ZQR0FfSVJRX01BU0s7CisJbWFzayAmPSB+KDEgPDwgaHdpcnEpOworCW1hc2sgfD0gKDEgPDwgKGh3aXJxICsgMTYpKTsKKwlzb2NyYXRlc19mcGdhX3BpY193cml0ZShGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSwgbWFzayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzb2NyYXRlc19mcGdhX3BpY191bm1hc2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaHdpcnE7CisJaW50IGlycV9saW5lOworCXUzMiBtYXNrOworCisJaHdpcnEgPSBzb2NyYXRlc19mcGdhX2lycV90b19odyh2aXJxKTsKKworCWlycV9saW5lID0gZnBnYV9pcnFzW2h3aXJxXS5pcnFfbGluZTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCW1hc2sgPSBzb2NyYXRlc19mcGdhX3BpY19yZWFkKEZQR0FfUElDX0lSUU1BU0soaXJxX2xpbmUpKQorCQkmIFNPQ1JBVEVTX0ZQR0FfSVJRX01BU0s7CisJbWFzayB8PSAoMSA8PCBod2lycSk7CisJc29jcmF0ZXNfZnBnYV9waWNfd3JpdGUoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSksIG1hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc29jcmF0ZXNfZnBnYV9waWNfZW9pKHVuc2lnbmVkIGludCB2aXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGh3aXJxOworCWludCBpcnFfbGluZTsKKwl1MzIgbWFzazsKKworCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcodmlycSk7CisKKwlpcnFfbGluZSA9IGZwZ2FfaXJxc1tod2lycV0uaXJxX2xpbmU7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKKwltYXNrID0gc29jcmF0ZXNfZnBnYV9waWNfcmVhZChGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSkKKwkJJiBTT0NSQVRFU19GUEdBX0lSUV9NQVNLOworCW1hc2sgfD0gKDEgPDwgKGh3aXJxICsgMTYpKTsKKwlzb2NyYXRlc19mcGdhX3BpY193cml0ZShGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSwgbWFzayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHNvY3JhdGVzX2ZwZ2FfcGljX3NldF90eXBlKHVuc2lnbmVkIGludCB2aXJxLAorCQl1bnNpZ25lZCBpbnQgZmxvd190eXBlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGh3aXJxOworCWludCBwb2xhcml0eTsKKwl1MzIgbWFzazsKKworCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcodmlycSk7CisKKwlpZiAoZnBnYV9pcnFzW2h3aXJxXS50eXBlICE9IElSUV9UWVBFX05PTkUpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChmbG93X3R5cGUgJiBJUlFfVFlQRV9TRU5TRV9NQVNLKSB7CisJY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgorCQlwb2xhcml0eSA9IDE7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfTEVWRUxfTE9XOgorCQlwb2xhcml0eSA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCW1hc2sgPSBzb2NyYXRlc19mcGdhX3BpY19yZWFkKEZQR0FfUElDX0lSUUNGRyk7CisJaWYgKHBvbGFyaXR5KQorCQltYXNrIHw9ICgxIDw8IGh3aXJxKTsKKwllbHNlCisJCW1hc2sgJj0gfigxIDw8IGh3aXJxKTsKKwlzb2NyYXRlc19mcGdhX3BpY193cml0ZShGUEdBX1BJQ19JUlFDRkcsIG1hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzb2NyYXRlc19mcGdhX3BpY19jaGlwID0geworCS50eXBlbmFtZSAgICAgICA9ICIgRlBHQS1QSUMgIiwKKwkuYWNrCQk9IHNvY3JhdGVzX2ZwZ2FfcGljX2FjaywKKwkubWFzayAgICAgICAgICAgPSBzb2NyYXRlc19mcGdhX3BpY19tYXNrLAorCS5tYXNrX2FjayAgICAgICA9IHNvY3JhdGVzX2ZwZ2FfcGljX21hc2tfYWNrLAorCS51bm1hc2sgICAgICAgICA9IHNvY3JhdGVzX2ZwZ2FfcGljX3VubWFzaywKKwkuZW9pCQk9IHNvY3JhdGVzX2ZwZ2FfcGljX2VvaSwKKwkuc2V0X3R5cGUJPSBzb2NyYXRlc19mcGdhX3BpY19zZXRfdHlwZSwKK307CisKK3N0YXRpYyBpbnQgc29jcmF0ZXNfZnBnYV9waWNfaG9zdF9tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSwKKwkJaXJxX2h3X251bWJlcl90IGh3aXJxKQoreworCS8qIEFsbCBpbnRlcnJ1cHRzIGFyZSBMRVZFTCBzZW5zaXRpdmUgKi8KKwlnZXRfaXJxX2Rlc2ModmlycSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZzb2NyYXRlc19mcGdhX3BpY19jaGlwLAorCQkJaGFuZGxlX2Zhc3Rlb2lfaXJxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvY3JhdGVzX2ZwZ2FfcGljX2hvc3RfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLAorCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAl1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAorCQlpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwgdW5zaWduZWQgaW50ICpvdXRfZmxhZ3MpCit7CisJc3RydWN0IHNvY3JhdGVzX2ZwZ2FfaXJxX2luZm8gKmZwZ2FfaXJxID0gJmZwZ2FfaXJxc1tpbnRzcGVjWzBdXTsKKworCSpvdXRfaHdpcnEgPSBpbnRzcGVjWzBdOworCWlmICAoZnBnYV9pcnEtPnR5cGUgPT0gSVJRX1RZUEVfTk9ORSkgeworCQkvKiB0eXBlIGlzIGNvbmZpZ3VyYWJsZSAqLworCQlpZiAoaW50c3BlY1sxXSAhPSBJUlFfVFlQRV9MRVZFTF9MT1cgJiYKKwkJICAgIGludHNwZWNbMV0gIT0gSVJRX1RZUEVfTEVWRUxfSElHSCkgeworCQkJcHJfd2FybmluZygiRlBHQSBQSUM6IGludmFsaWQgaXJxIHR5cGUsICIKKwkJCQkgICAic2V0dGluZyBkZWZhdWx0IGFjdGl2ZSBsb3dcbiIpOworCQkJKm91dF9mbGFncyA9IElSUV9UWVBFX0xFVkVMX0xPVzsKKwkJfSBlbHNlIHsKKwkJCSpvdXRfZmxhZ3MgPSBpbnRzcGVjWzFdOworCQl9CisJfSBlbHNlIHsKKwkJLyogdHlwZSBpcyBmaXhlZCAqLworCQkqb3V0X2ZsYWdzID0gZnBnYV9pcnEtPnR5cGU7CisJfQorCisJLyogVXNlIHNwZWNpZmllZCBpbnRlcnJ1cHQgcm91dGluZyAqLworCWlmIChpbnRzcGVjWzJdIDw9IDIpCisJCWZwZ2FfaXJxLT5pcnFfbGluZSA9IGludHNwZWNbMl07CisJZWxzZQorCQlwcl93YXJuaW5nKCJGUEdBIFBJQzogaW52YWxpZCBpcnEgcm91dGluZ1xuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfaG9zdF9vcHMgc29jcmF0ZXNfZnBnYV9waWNfaG9zdF9vcHMgPSB7CisJLm1hcCAgICA9IHNvY3JhdGVzX2ZwZ2FfcGljX2hvc3RfbWFwLAorCS54bGF0ZSAgPSBzb2NyYXRlc19mcGdhX3BpY19ob3N0X3hsYXRlLAorfTsKKwordm9pZCBzb2NyYXRlc19mcGdhX3BpY19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGljKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisKKwkvKiBTZXR1cCBhbiBpcnFfaG9zdCBzdHJ1Y3R1cmUgKi8KKwlzb2NyYXRlc19mcGdhX3BpY19pcnFfaG9zdCA9IGlycV9hbGxvY19ob3N0KHBpYywgSVJRX0hPU1RfTUFQX0xJTkVBUiwKKwkJCVNPQ1JBVEVTX0ZQR0FfTlVNX0lSUVMsCSZzb2NyYXRlc19mcGdhX3BpY19ob3N0X29wcywKKwkJCVNPQ1JBVEVTX0ZQR0FfTlVNX0lSUVMpOworCWlmIChzb2NyYXRlc19mcGdhX3BpY19pcnFfaG9zdCA9PSBOVUxMKSB7CisJCXByX2VycigiRlBHQSBQSUM6IFVuYWJsZSB0byBhbGxvY2F0ZSBob3N0XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJc29jcmF0ZXNfZnBnYV9pcnFzW2ldID0gaXJxX29mX3BhcnNlX2FuZF9tYXAocGljLCBpKTsKKwkJaWYgKHNvY3JhdGVzX2ZwZ2FfaXJxc1tpXSA9PSBOT19JUlEpIHsKKwkJCXByX3dhcm5pbmcoIkZQR0EgUElDOiBjYW4ndCBnZXQgaXJxJWQuXG4iLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKHNvY3JhdGVzX2ZwZ2FfaXJxc1tpXSwKKwkJCQlzb2NyYXRlc19mcGdhX3BpY19jYXNjYWRlKTsKKwl9CisKKwlzb2NyYXRlc19mcGdhX3BpY19pb2Jhc2UgPSBvZl9pb21hcChwaWMsIDApOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKKwlzb2NyYXRlc19mcGdhX3BpY193cml0ZShGUEdBX1BJQ19JUlFNQVNLKDApLAorCQkJU09DUkFURVNfRlBHQV9JUlFfTUFTSyA8PCAxNik7CisJc29jcmF0ZXNfZnBnYV9waWNfd3JpdGUoRlBHQV9QSUNfSVJRTUFTSygxKSwKKwkJCVNPQ1JBVEVTX0ZQR0FfSVJRX01BU0sgPDwgMTYpOworCXNvY3JhdGVzX2ZwZ2FfcGljX3dyaXRlKEZQR0FfUElDX0lSUU1BU0soMiksCisJCQlTT0NSQVRFU19GUEdBX0lSUV9NQVNLIDw8IDE2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisKKwlwcl9pbmZvKCJGUEdBIFBJQzogU2V0dGluZyB1cCBTb2NyYXRlcyBGUEdBIFBJQ1xuIik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZDdkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuaApAQCAtMCwwICsxLDE2IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBJbHlhIFlhbm9rLCBFbWNyYWZ0IFN5c3RlbXMKKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBTT0NSQVRFU19GUEdBX1BJQ19ICisjZGVmaW5lIFNPQ1JBVEVTX0ZQR0FfUElDX0gKKwordm9pZCBzb2NyYXRlc19mcGdhX3BpY19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGljKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYwppbmRleCAwY2NhOGY1Li5mNTU5OTE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmMKQEAgLTE0NSw2ICsxNDUsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRkYXRhIG9mX2J1c19pZHNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvdHFtODV4eC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3RxbTg1eHguYwppbmRleCAyOTMzYThlLi41YjBhYjk5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvdHFtODV4eC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC90cW04NXh4LmMKQEAgLTE1Myw2ICsxNTMsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRkYXRhIG9mX2J1c19pZHNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9LY29uZmlnCmluZGV4IDhlNTY5MzkuLmZkYWY0ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9LY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogY29uZmlnIFBQQ184Nnh4CiBtZW51Y29uZmlnIFBQQ184Nnh4CiAJYm9vbCAiODZ4eC1iYXNlZCBib2FyZHMiCi0JZGVwZW5kcyBvbiA2eHggJiYgUFBDX01VTFRJUExBVEZPUk0KKwlkZXBlbmRzIG9uIDZ4eAogCXNlbGVjdCBGU0xfU09DCiAJc2VsZWN0IEFMVElWRUMKIAloZWxwCkBAIC0zMSw2ICszMSwyMiBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1QQzg2MTAgSFBDRCBib2FyZC4KIAorY29uZmlnIEdFRl9QUEM5QQorCWJvb2wgIkdFIEZhbnVjIFBQQzlBIgorCXNlbGVjdCBERUZBVUxUX1VJTUFHRQorCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIEdFIEZhbnVjJ3MgUFBDOUEuCisKK2NvbmZpZyBHRUZfU0JDMzEwCisJYm9vbCAiR0UgRmFudWMgU0JDMzEwIgorCXNlbGVjdCBERUZBVUxUX1VJTUFHRQorCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIEdFIEZhbnVjJ3MgU0JDMzEwLgorCiBjb25maWcgR0VGX1NCQzYxMAogCWJvb2wgIkdFIEZhbnVjIFNCQzYxMCIKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKQEAgLTQ4LDcgKzY0LDcgQEAKIAlzZWxlY3QgRlNMX1BDSSBpZiBQQ0kKIAlzZWxlY3QgUFBDX1VEQkdfMTY1NTAKIAlzZWxlY3QgTVBJQwotCWRlZmF1bHQgeSBpZiBNUEM4NjQxX0hQQ04gfHwgU0JDODY0MUQgfHwgR0VGX1NCQzYxMAorCWRlZmF1bHQgeSBpZiBNUEM4NjQxX0hQQ04gfHwgU0JDODY0MUQgfHwgR0VGX1NCQzYxMCB8fCBHRUZfU0JDMzEwIHx8IEdFRl9QUEM5QQogCiBjb25maWcgTVBDODYxMAogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9NYWtlZmlsZQppbmRleCAzMWU1NDBjLi40YjBkN2IxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L01ha2VmaWxlCkBAIC05LDMgKzksNSBAQAogb2JqLSQoQ09ORklHX01QQzg2MTBfSFBDRCkJKz0gbXBjODYxMF9ocGNkLm8KIGdlZi1ncGlvLSQoQ09ORklHX0dQSU9MSUIpCSs9IGdlZl9ncGlvLm8KIG9iai0kKENPTkZJR19HRUZfU0JDNjEwKQkrPSBnZWZfc2JjNjEwLm8gZ2VmX3BpYy5vICQoZ2VmLWdwaW8teSkKK29iai0kKENPTkZJR19HRUZfU0JDMzEwKQkrPSBnZWZfc2JjMzEwLm8gZ2VmX3BpYy5vICQoZ2VmLWdwaW8teSkKK29iai0kKENPTkZJR19HRUZfUFBDOUEpCQkrPSBnZWZfcHBjOWEubyBnZWZfcGljLm8gJChnZWYtZ3Bpby15KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9ncGlvLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX2dwaW8uYwppbmRleCA4NWIyODAwLi5iMmVhODg3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX2dwaW8uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX2dwaW8uYwpAQCAtMzcsOCArMzcsNiBAQAogI2RlZmluZSBHRUZfR1BJT19PVkVSUlVOCTB4MUMKICNkZWZpbmUgR0VGX0dQSU9fTU9ERQkJMHgyMAogCi0jZGVmaW5lIE5VTV9HUElPIDE5Ci0KIHN0YXRpYyB2b2lkIF9nZWZfZ3Bpb19zZXQodm9pZCBfX2lvbWVtICpyZWcsIHVuc2lnbmVkIGludCBvZmZzZXQsIGludCB2YWx1ZSkKIHsKIAl1bnNpZ25lZCBpbnQgZGF0YTsKQEAgLTEwMywxMCArMTAxLDEwIEBACiBzdGF0aWMgaW50IF9faW5pdCBnZWZfZ3Bpb19pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKmdlZl9ncGlvX2NoaXA7CiAKIAlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJnZWYsc2JjNjEwLWdwaW8iKSB7Ci0JCWludCByZXR2YWw7Ci0JCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKmdlZl9ncGlvX2NoaXA7CiAKIAkJcHJfZGVidWcoIiVzOiBJbml0aWFsaXNpbmcgR0VGIEdQSU9cbiIsIG5wLT5mdWxsX25hbWUpOwogCkBAIC0xMjAsNyArMTE4LDM1IEBACiAKIAkJLyogU2V0dXAgcG9pbnRlcnMgdG8gY2hpcCBmdW5jdGlvbnMgKi8KIAkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ3Bpb19jZWxscyA9IDI7Ci0JCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdjLm5ncGlvID0gTlVNX0dQSU87CisJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdjLm5ncGlvID0gMTk7CisJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdjLmRpcmVjdGlvbl9pbnB1dCA9IGdlZl9ncGlvX2Rpcl9pbjsKKwkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ2MuZGlyZWN0aW9uX291dHB1dCA9IGdlZl9ncGlvX2Rpcl9vdXQ7CisJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdjLmdldCA9IGdlZl9ncGlvX2dldDsKKwkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ2Muc2V0ID0gZ2VmX2dwaW9fc2V0OworCisJCS8qIFRoaXMgZnVuY3Rpb24gYWRkcyBhIG1lbW9yeSBtYXBwZWQgR1BJTyBjaGlwICovCisJCXJldHZhbCA9IG9mX21tX2dwaW9jaGlwX2FkZChucCwgZ2VmX2dwaW9fY2hpcCk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWtmcmVlKGdlZl9ncGlvX2NoaXApOworCQkJcHJfZXJyKCIlczogVW5hYmxlIHRvIGFkZCBHUElPXG4iLCBucC0+ZnVsbF9uYW1lKTsKKwkJfQorCX0KKworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgTlVMTCwgImdlZixzYmMzMTAtZ3BpbyIpIHsKKworCQlwcl9kZWJ1ZygiJXM6IEluaXRpYWxpc2luZyBHRUYgR1BJT1xuIiwgbnAtPmZ1bGxfbmFtZSk7CisKKwkJLyogQWxsb2NhdGUgY2hpcCBzdHJ1Y3R1cmUgKi8KKwkJZ2VmX2dwaW9fY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpnZWZfZ3Bpb19jaGlwKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZ2VmX2dwaW9fY2hpcCkgeworCQkJcHJfZXJyKCIlczogVW5hYmxlIHRvIGFsbG9jYXRlIHN0cnVjdHVyZVxuIiwKKwkJCQlucC0+ZnVsbF9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU2V0dXAgcG9pbnRlcnMgdG8gY2hpcCBmdW5jdGlvbnMgKi8KKwkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ3Bpb19jZWxscyA9IDI7CisJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdjLm5ncGlvID0gNjsKIAkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ2MuZGlyZWN0aW9uX2lucHV0ID0gZ2VmX2dwaW9fZGlyX2luOwogCQlnZWZfZ3Bpb19jaGlwLT5vZl9nYy5nYy5kaXJlY3Rpb25fb3V0cHV0ID0gZ2VmX2dwaW9fZGlyX291dDsKIAkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ2MuZ2V0ID0gZ2VmX2dwaW9fZ2V0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9wcGM5YS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9wcGM5YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OTEwNDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3BwYzlhLmMKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBHRSBGYW51YyBQUEM5QSBib2FyZCBzdXBwb3J0CisgKgorICogQXV0aG9yOiBNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZWZhbnVjLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgRW1iZWRkZWQgU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogQmFzZWQgb246IG1wYzg2eHhfaHBjbi5jIChNUEM4Nnh4IEhQQ04gYm9hcmQgc3BlY2lmaWMgcm91dGluZXMpCisgKiBDb3B5cmlnaHQgMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogTkVDIGZpeHVwIGFkYXB0ZWQgZnJvbSBhcmNoL21pcHMvcGNpL2ZpeHVwLWxtMmUuYworICovCisKKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vbXBjODZ4eC5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8bW0vbW11X2RlY2wuaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorCisjaW5jbHVkZSA8YXNtL21waWMuaD4KKworI2luY2x1ZGUgPHN5c2Rldi9mc2xfcGNpLmg+CisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KKworI2luY2x1ZGUgIm1wYzg2eHguaCIKKyNpbmNsdWRlICJnZWZfcGljLmgiCisKKyN1bmRlZiBERUJVRworCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHIChmbXQuLi4pIGRvIHsgcHJpbnRrKEtFUk5fRVJSICJQUEM5QTogIiBmbXQpOyB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgREJHIChmbXQuLi4pIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCit2b2lkIF9faW9tZW0gKnBwYzlhX3JlZ3M7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBnZWZfcHBjOWFfaW5pdF9pcnEodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNhc2NhZGVfbm9kZSA9IE5VTEw7CisKKwltcGM4Nnh4X2luaXRfaXJxKCk7CisKKwkvKgorCSAqIFRoZXJlIGlzIGEgc2ltcGxlIGludGVycnVwdCBoYW5kbGVyIGluIHRoZSBtYWluIEZQR0EsIHRoaXMgbmVlZHMKKwkgKiB0byBiZSBjYXNjYWRlZCBpbnRvIHRoZSBNUElDCisJICovCisJY2FzY2FkZV9ub2RlID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImdlZixmcGdhLXBpYy0xLjAwIik7CisJaWYgKCFjYXNjYWRlX25vZGUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUFBDOUE6IE5vIEZQR0EgUElDXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWdlZl9waWNfaW5pdChjYXNjYWRlX25vZGUpOworCW9mX25vZGVfcHV0KGNhc2NhZGVfbm9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBnZWZfcHBjOWFfc2V0dXBfYXJjaCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcmVnczsKKyNpZmRlZiBDT05GSUdfUENJCisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgInBjaSIsICJmc2wsbXBjODY0MS1wY2llIikgeworCQlmc2xfYWRkX2JyaWRnZShucCwgMSk7CisJfQorI2VuZGlmCisKKwlwcmludGsoS0VSTl9JTkZPICJHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgUFBDOUEgNlUgVk1FIFNCQ1xuIik7CisKKyNpZmRlZiBDT05GSUdfU01QCisJbXBjODZ4eF9zbXBfaW5pdCgpOworI2VuZGlmCisKKwkvKiBSZW1hcCBiYXNpYyBib2FyZCByZWdpc3RlcnMgKi8KKwlyZWdzID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImdlZixwcGM5YS1mcGdhLXJlZ3MiKTsKKwlpZiAocmVncykgeworCQlwcGM5YV9yZWdzID0gb2ZfaW9tYXAocmVncywgMCk7CisJCWlmIChwcGM5YV9yZWdzID09IE5VTEwpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gbWFwIGJvYXJkIHJlZ2lzdGVyc1xuIik7CisJCW9mX25vZGVfcHV0KHJlZ3MpOworCX0KK30KKworLyogUmV0dXJuIHRoZSBQQ0IgcmV2aXNpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2VmX3BwYzlhX2dldF9wY2JfcmV2KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IGlvcmVhZDMyKHBwYzlhX3JlZ3MpOworCXJldHVybiAocmVnID4+IDgpICYgMHhmZjsKK30KKworLyogUmV0dXJuIHRoZSBib2FyZCAoc29mdHdhcmUpIHJldmlzaW9uICovCitzdGF0aWMgdW5zaWduZWQgaW50IGdlZl9wcGM5YV9nZXRfYm9hcmRfcmV2KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IGlvcmVhZDMyKHBwYzlhX3JlZ3MpOworCXJldHVybiAocmVnID4+IDE2KSAmIDB4ZmY7Cit9CisKKy8qIFJldHVybiB0aGUgRlBHQSByZXZpc2lvbiAqLworc3RhdGljIHVuc2lnbmVkIGludCBnZWZfcHBjOWFfZ2V0X2ZwZ2FfcmV2KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IGlvcmVhZDMyKHBwYzlhX3JlZ3MpOworCXJldHVybiAocmVnID4+IDI0KSAmIDB4ZjsKK30KKworc3RhdGljIHZvaWQgZ2VmX3BwYzlhX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7CisJdWludCBzdmlkID0gbWZzcHIoU1BSTl9TVlIpOworCisJc2VxX3ByaW50ZihtLCAiVmVuZG9yXHRcdDogR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zXG4iKTsKKworCXNlcV9wcmludGYobSwgIlJldmlzaW9uXHQ6ICV1JWNcbiIsIGdlZl9wcGM5YV9nZXRfcGNiX3JldigpLAorCQkoJ0EnICsgZ2VmX3BwYzlhX2dldF9ib2FyZF9yZXYoKSAtIDEpKTsKKwlzZXFfcHJpbnRmKG0sICJGUEdBIFJldmlzaW9uXHQ6ICV1XG4iLCBnZWZfcHBjOWFfZ2V0X2ZwZ2FfcmV2KCkpOworCisJc2VxX3ByaW50ZihtLCAiU1ZSXHRcdDogMHgleFxuIiwgc3ZpZCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBnZWZfcHBjOWFfbmVjX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwkvKiBEbyBub3QgZG8gdGhlIGZpeHVwIG9uIG90aGVyIHBsYXRmb3JtcyEgKi8KKwlpZiAoIW1hY2hpbmVfaXMoZ2VmX3BwYzlhKSkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fSU5GTyAiUnVubmluZyBORUMgdVBENzIwMTAxIEZpeHVwXG4iKTsKKworCS8qIEVuc3VyZSBwb3J0cyAxLCAyLCAzLCA0ICYgNSBhcmUgZW5hYmxlZCAqLworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAweGUwLCAmdmFsKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4ZTAsICh2YWwgJiB+NykgfCAweDUpOworCisJLyogU3lzdGVtIGNsb2NrIGlzIDQ4LU1IeiBPc2NpbGxhdG9yIGFuZCBFSENJIEVuYWJsZWQuICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweGU0LCAxIDw8IDUpOworfQorREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfTkVDLCBQQ0lfREVWSUNFX0lEX05FQ19VU0IsCisJZ2VmX3BwYzlhX25lY19maXh1cCk7CisKKy8qCisgKiBDYWxsZWQgdmVyeSBlYXJseSwgZGV2aWNlLXRyZWUgaXNuJ3QgdW5mbGF0dGVuZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgQlNQIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUKKyAqIHN1cHBsaWVkIGRldmljZS10cmVlLCB3aGljaCBpcyBhc3N1bWVkIHRvIGJlIHRoZSBjb3JyZWN0IG9uZSBmb3IgdGhlIGFjdHVhbAorICogYm9hcmQuIEl0IGlzIGV4cGVjdGVkIHRoYXRpLCBpbiB0aGUgZnV0dXJlLCBhIGtlcm5lbCBtYXkgc3VwcG9ydCBtdWx0aXBsZQorICogYm9hcmRzLgorICovCitzdGF0aWMgaW50IF9faW5pdCBnZWZfcHBjOWFfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisKKwlpZiAob2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJnZWYscHBjOWEiKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgX19pbml0IG1wYzg2eHhfdGltZV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHRlbXA7CisKKwkvKiBTZXQgdGhlIHRpbWUgYmFzZSB0byB6ZXJvICovCisJbXRzcHIoU1BSTl9UQldMLCAwKTsKKwltdHNwcihTUFJOX1RCV1UsIDApOworCisJdGVtcCA9IG1mc3ByKFNQUk5fSElEMCk7CisJdGVtcCB8PSBISUQwX1RCRU47CisJbXRzcHIoU1BSTl9ISUQwLCB0ZW1wKTsKKwlhc20gdm9sYXRpbGUoImlzeW5jIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCBvZl9idXNfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAorCXt9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgIlByb2JlIHBsYXRmb3JtIGRldmljZXNcbiIpOworCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBvZl9idXNfaWRzLCBOVUxMKTsKKworCXJldHVybiAwOworfQorbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwoZ2VmX3BwYzlhLCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXMpOworCitkZWZpbmVfbWFjaGluZShnZWZfcHBjOWEpIHsKKwkubmFtZQkJCT0gIkdFIEZhbnVjIFBQQzlBIiwKKwkucHJvYmUJCQk9IGdlZl9wcGM5YV9wcm9iZSwKKwkuc2V0dXBfYXJjaAkJPSBnZWZfcHBjOWFfc2V0dXBfYXJjaCwKKwkuaW5pdF9JUlEJCT0gZ2VmX3BwYzlhX2luaXRfaXJxLAorCS5zaG93X2NwdWluZm8JCT0gZ2VmX3BwYzlhX3Nob3dfY3B1aW5mbywKKwkuZ2V0X2lycQkJPSBtcGljX2dldF9pcnEsCisJLnJlc3RhcnQJCT0gZnNsX3JzdGNyX3Jlc3RhcnQsCisJLnRpbWVfaW5pdAkJPSBtcGM4Nnh4X3RpbWVfaW5pdCwKKwkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucHJvZ3Jlc3MJCT0gdWRiZ19wcm9ncmVzcywKKyNpZmRlZiBDT05GSUdfUENJCisJLnBjaWJpb3NfZml4dXBfYnVzCT0gZnNsX3BjaWJpb3NfZml4dXBfYnVzLAorI2VuZGlmCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmMzMTAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfc2JjMzEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYxNGY4NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfc2JjMzEwLmMKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiBHRSBGYW51YyBTQkMzMTAgYm9hcmQgc3VwcG9ydAorICoKKyAqIEF1dGhvcjogTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2VmYW51Yy5jb20+CisgKgorICogQ29weXJpZ2h0IDIwMDggR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEJhc2VkIG9uOiBtcGM4Nnh4X2hwY24uYyAoTVBDODZ4eCBIUENOIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzKQorICogQ29weXJpZ2h0IDIwMDYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIE5FQyBmaXh1cCBhZGFwdGVkIGZyb20gYXJjaC9taXBzL3BjaS9maXh1cC1sbTJlLmMKKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL21wYzg2eHguaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPG1tL21tdV9kZWNsLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKworI2luY2x1ZGUgPGFzbS9tcGljLmg+CisKKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3BjaS5oPgorI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CisKKyNpbmNsdWRlICJtcGM4Nnh4LmgiCisjaW5jbHVkZSAiZ2VmX3BpYy5oIgorCisjdW5kZWYgREVCVUcKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERCRyAoZm10Li4uKSBkbyB7IHByaW50ayhLRVJOX0VSUiAiU0JDMzEwOiAiIGZtdCk7IH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBEQkcgKGZtdC4uLikgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKK3ZvaWQgX19pb21lbSAqc2JjMzEwX3JlZ3M7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBnZWZfc2JjMzEwX2luaXRfaXJxKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpjYXNjYWRlX25vZGUgPSBOVUxMOworCisJbXBjODZ4eF9pbml0X2lycSgpOworCisJLyoKKwkgKiBUaGVyZSBpcyBhIHNpbXBsZSBpbnRlcnJ1cHQgaGFuZGxlciBpbiB0aGUgbWFpbiBGUEdBLCB0aGlzIG5lZWRzCisJICogdG8gYmUgY2FzY2FkZWQgaW50byB0aGUgTVBJQworCSAqLworCWNhc2NhZGVfbm9kZSA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJnZWYsZnBnYS1waWMiKTsKKwlpZiAoIWNhc2NhZGVfbm9kZSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJTQkMzMTA6IE5vIEZQR0EgUElDXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWdlZl9waWNfaW5pdChjYXNjYWRlX25vZGUpOworCW9mX25vZGVfcHV0KGNhc2NhZGVfbm9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBnZWZfc2JjMzEwX3NldHVwX2FyY2godm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJlZ3M7CisjaWZkZWYgQ09ORklHX1BDSQorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzg2NDEtcGNpZSIpIHsKKwkJZnNsX2FkZF9icmlkZ2UobnAsIDEpOworCX0KKyNlbmRpZgorCisJcHJpbnRrKEtFUk5fSU5GTyAiR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIFNCQzMxMCA2VSBWUFggU0JDXG4iKTsKKworI2lmZGVmIENPTkZJR19TTVAKKwltcGM4Nnh4X3NtcF9pbml0KCk7CisjZW5kaWYKKworCS8qIFJlbWFwIGJhc2ljIGJvYXJkIHJlZ2lzdGVycyAqLworCXJlZ3MgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZ2VmLGZwZ2EtcmVncyIpOworCWlmIChyZWdzKSB7CisJCXNiYzMxMF9yZWdzID0gb2ZfaW9tYXAocmVncywgMCk7CisJCWlmIChzYmMzMTBfcmVncyA9PSBOVUxMKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIG1hcCBib2FyZCByZWdpc3RlcnNcbiIpOworCQlvZl9ub2RlX3B1dChyZWdzKTsKKwl9Cit9CisKKy8qIFJldHVybiB0aGUgUENCIHJldmlzaW9uICovCitzdGF0aWMgdW5zaWduZWQgaW50IGdlZl9zYmMzMTBfZ2V0X2JvYXJkX2lkKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IGlvcmVhZDMyKHNiYzMxMF9yZWdzKTsKKwlyZXR1cm4gcmVnICYgMHhmZjsKK30KKworLyogUmV0dXJuIHRoZSBQQ0IgcmV2aXNpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2VmX3NiYzMxMF9nZXRfcGNiX3Jldih2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMihzYmMzMTBfcmVncyk7CisJcmV0dXJuIChyZWcgPj4gOCkgJiAweGZmOworfQorCisvKiBSZXR1cm4gdGhlIGJvYXJkIChzb2Z0d2FyZSkgcmV2aXNpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2VmX3NiYzMxMF9nZXRfYm9hcmRfcmV2KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IGlvcmVhZDMyKHNiYzMxMF9yZWdzKTsKKwlyZXR1cm4gKHJlZyA+PiAxNikgJiAweGZmOworfQorCisvKiBSZXR1cm4gdGhlIEZQR0EgcmV2aXNpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2VmX3NiYzMxMF9nZXRfZnBnYV9yZXYodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gaW9yZWFkMzIoc2JjMzEwX3JlZ3MpOworCXJldHVybiAocmVnID4+IDI0KSAmIDB4ZjsKK30KKworc3RhdGljIHZvaWQgZ2VmX3NiYzMxMF9zaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptKQoreworCXVpbnQgc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKKworCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IEdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3Jtc1xuIik7CisKKwlzZXFfcHJpbnRmKG0sICJCb2FyZCBJRFx0OiAweCUyLjJ4XG4iLCBnZWZfc2JjMzEwX2dldF9ib2FyZF9pZCgpKTsKKwlzZXFfcHJpbnRmKG0sICJSZXZpc2lvblx0OiAldSVjXG4iLCBnZWZfc2JjMzEwX2dldF9wY2JfcmV2KCksCisJCSgnQScgKyBnZWZfc2JjMzEwX2dldF9ib2FyZF9yZXYoKSAtIDEpKTsKKwlzZXFfcHJpbnRmKG0sICJGUEdBIFJldmlzaW9uXHQ6ICV1XG4iLCBnZWZfc2JjMzEwX2dldF9mcGdhX3JldigpKTsKKworCXNlcV9wcmludGYobSwgIlNWUlx0XHQ6IDB4JXhcbiIsIHN2aWQpOworCit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBnZWZfc2JjMzEwX25lY19maXh1cChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJLyogRG8gbm90IGRvIHRoZSBmaXh1cCBvbiBvdGhlciBwbGF0Zm9ybXMhICovCisJaWYgKCFtYWNoaW5lX2lzKGdlZl9zYmMzMTApKQorCQlyZXR1cm47CisKKwlwcmludGsoS0VSTl9JTkZPICJSdW5uaW5nIE5FQyB1UEQ3MjAxMDEgRml4dXBcbiIpOworCisJLyogRW5zdXJlIG9ubHkgcG9ydHMgMSAmIDIgYXJlIGVuYWJsZWQgKi8KKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHhlMCwgJnZhbCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweGUwLCAodmFsICYgfjcpIHwgMHgyKTsKKworCS8qIFN5c3RlbSBjbG9jayBpcyA0OC1NSHogT3NjaWxsYXRvciBhbmQgRUhDSSBFbmFibGVkLiAqLworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHhlNCwgMSA8PCA1KTsKK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX05FQywgUENJX0RFVklDRV9JRF9ORUNfVVNCLAorCWdlZl9zYmMzMTBfbmVjX2ZpeHVwKTsKKworLyoKKyAqIENhbGxlZCB2ZXJ5IGVhcmx5LCBkZXZpY2UtdHJlZSBpc24ndCB1bmZsYXR0ZW5lZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBCU1AgaXMgY29tcGF0aWJsZSB3aXRoIHRoZQorICogc3VwcGxpZWQgZGV2aWNlLXRyZWUsIHdoaWNoIGlzIGFzc3VtZWQgdG8gYmUgdGhlIGNvcnJlY3Qgb25lIGZvciB0aGUgYWN0dWFsCisgKiBib2FyZC4gSXQgaXMgZXhwZWN0ZWQgdGhhdGksIGluIHRoZSBmdXR1cmUsIGEga2VybmVsIG1heSBzdXBwb3J0IG11bHRpcGxlCisgKiBib2FyZHMuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGdlZl9zYmMzMTBfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisKKwlpZiAob2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJnZWYsc2JjMzEwIikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIF9faW5pdCBtcGM4Nnh4X3RpbWVfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCB0ZW1wOworCisJLyogU2V0IHRoZSB0aW1lIGJhc2UgdG8gemVybyAqLworCW10c3ByKFNQUk5fVEJXTCwgMCk7CisJbXRzcHIoU1BSTl9UQldVLCAwKTsKKworCXRlbXAgPSBtZnNwcihTUFJOX0hJRDApOworCXRlbXAgfD0gSElEMF9UQkVOOworCW10c3ByKFNQUk5fSElEMCwgdGVtcCk7CisJYXNtIHZvbGF0aWxlKCJpc3luYyIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYnVzX2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKKwl7fSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyh2b2lkKQoreworCXByaW50ayhLRVJOX0RFQlVHICJQcm9iZSBwbGF0Zm9ybSBkZXZpY2VzXG4iKTsKKwlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgb2ZfYnVzX2lkcywgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KK21hY2hpbmVfZGV2aWNlX2luaXRjYWxsKGdlZl9zYmMzMTAsIGRlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyk7CisKK2RlZmluZV9tYWNoaW5lKGdlZl9zYmMzMTApIHsKKwkubmFtZQkJCT0gIkdFIEZhbnVjIFNCQzMxMCIsCisJLnByb2JlCQkJPSBnZWZfc2JjMzEwX3Byb2JlLAorCS5zZXR1cF9hcmNoCQk9IGdlZl9zYmMzMTBfc2V0dXBfYXJjaCwKKwkuaW5pdF9JUlEJCT0gZ2VmX3NiYzMxMF9pbml0X2lycSwKKwkuc2hvd19jcHVpbmZvCQk9IGdlZl9zYmMzMTBfc2hvd19jcHVpbmZvLAorCS5nZXRfaXJxCQk9IG1waWNfZ2V0X2lycSwKKwkucmVzdGFydAkJPSBmc2xfcnN0Y3JfcmVzdGFydCwKKwkudGltZV9pbml0CQk9IG1wYzg2eHhfdGltZV9pbml0LAorCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorCS5wcm9ncmVzcwkJPSB1ZGJnX3Byb2dyZXNzLAorI2lmZGVmIENPTkZJR19QQ0kKKwkucGNpYmlvc19maXh1cF9idXMJPSBmc2xfcGNpYmlvc19maXh1cF9idXMsCisjZW5kaWYKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzYxMC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmM2MTAuYwppbmRleCBkNmI3NzJiLi5lYTIzNjA2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzYxMC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfc2JjNjEwLmMKQEAgLTE5NCw2ICsxOTQsNyBAQAogCiBzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2J1c19pZHNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODYxMF9ocGNkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODYxMF9ocGNkLmMKaW5kZXggZThkNTRhYy4uM2Y0OWE2ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2MTBfaHBjZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4NjEwX2hwY2QuYwpAQCAtNDYsNiArNDYsNyBAQAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19pbml0ZGF0YSBtcGM4NjEwX2lkc1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg2MTAtaW1tciIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMKaW5kZXggMjdlMGU2OC4uYzRlYzQ5YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X2hwY24uYwpAQCAtMTQ4LDYgKzE0OCw3IEBACiBzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2J1c19pZHNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiZnNsLHJhcGlkaW8tZGVsdGEiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvc2JjODY0MWQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9zYmM4NjQxZC5jCmluZGV4IDVmZDdlZDQuLjI4ODZhMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9zYmM4NjQxZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9zYmM4NjQxZC5jCkBAIC0xMDMsNiArMTAzLDcgQEAKIAogc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCBvZl9idXNfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvbTh4eF9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvbTh4eF9zZXR1cC5jCmluZGV4IDBkOWY3NWMuLjM4NWFjZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L204eHhfc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9tOHh4X3NldHVwLmMKQEAgLTQ0LDcgKzQ0LDYgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdGJpbnRfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyID0gdGltZWJhc2VfaW50ZXJydXB0LAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJ0YmludCIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcKaW5kZXggMjAwYjljYi4uZmZhMmE5ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZwpAQCAtMSwxNCArMSw1IEBACiBtZW51ICJQbGF0Zm9ybSBzdXBwb3J0IgogCi1jb25maWcgUFBDX01VTFRJUExBVEZPUk0KLQlib29sCi0JZGVwZW5kcyBvbiBQUEM2NCB8fCA2eHgKLQlkZWZhdWx0IHkKLQotY29uZmlnIENMQVNTSUMzMgotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIDZ4eCAmJiBQUENfTVVMVElQTEFURk9STQotCiBzb3VyY2UgImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnIgogc291cmNlICJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL0tjb25maWciCkBAIC0yOCwxNSArMTksMjggQEAKIHNvdXJjZSAiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9LY29uZmlnIgogc291cmNlICJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnIgogc291cmNlICJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQweC9LY29uZmlnIgorc291cmNlICJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2FtaWdhb25lL0tjb25maWciCiAKIGNvbmZpZyBQUENfTkFUSVZFCiAJYm9vbAotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0KKwlkZXBlbmRzIG9uIDZ4eCB8fCBQUEM2NAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHJ1bm5pbmcgbmF0aXZlbHkgb24gdGhlIGhhcmR3YXJlLCBpLmUuIHdpdGhvdXQKIAkgIGEgaHlwZXJ2aXNvci4gVGhpcyBvcHRpb24gaXMgbm90IHVzZXItc2VsZWN0YWJsZSBidXQgc2hvdWxkCiAJICBiZSBzZWxlY3RlZCBieSBhbGwgcGxhdGZvcm1zIHRoYXQgbmVlZCBpdC4KIAorY29uZmlnIFBQQ19PRl9CT09UX1RSQU1QT0xJTkUKKwlib29sICJTdXBwb3J0IGJvb3RpbmcgZnJvbSBPcGVuIEZpcm13YXJlIG9yIHlhYm9vdCIKKwlkZXBlbmRzIG9uIDZ4eCB8fCBQUEM2NAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFN1cHBvcnQgZnJvbSBib290aW5nIGZyb20gT3BlbiBGaXJtd2FyZSBvciB5YWJvb3QgdXNpbmcgYW4KKwkgIE9wZW4gRmlybXdhcmUgY2xpZW50IGludGVyZmFjZS4gVGhpcyBlbmFibGVzIHRoZSBrZXJuZWwgdG8KKwkgIGNvbW11bmljYXRlIHdpdGggb3BlbiBmaXJtd2FyZSB0byByZXRyaWV2ZSBzeXN0ZW0gaW5mb3JtYXRpb25zCisJICBzdWNoIGFzIHRoZSBkZXZpY2UgdHJlZS4KKworCSAgSW4gY2FzZSBvZiBkb3VidCwgc2F5IFkKKwogY29uZmlnIFVEQkdfUlRBU19DT05TT0xFCiAJYm9vbCAiUlRBUyBiYXNlZCBkZWJ1ZyBjb25zb2xlIgogCWRlcGVuZHMgb24gUFBDX1JUQVMKQEAgLTcwLDcgKzc0LDcgQEAKIAogY29uZmlnIFUzX0RBUlQKIAlib29sCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEM2NAorCWRlcGVuZHMgb24gUFBDNjQKIAlkZWZhdWx0IG4KIAogY29uZmlnIFBQQ19SVEFTCkBAIC05MSwxNSArOTUsNiBAQAogCXRyaXN0YXRlICJGaXJtd2FyZSBmbGFzaCBpbnRlcmZhY2UiCiAJZGVwZW5kcyBvbiBQUEM2NCAmJiBSVEFTX1BST0MKIAotY29uZmlnIFBQQ19QTUkKLQl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgUE1JIgotCWRlcGVuZHMgb24gUFBDX0lCTV9DRUxMX0JMQURFCi0JaGVscAotCSAgUE1JIChQbGF0Zm9ybSBNYW5hZ2VtZW50IEludGVycnVwdCkgaXMgYSB3YXkgdG8KLQkgIGNvbW11bmljYXRlIHdpdGggdGhlIEJNQyAoQmFzZWJvYXJkIE1hbmFnZW1lbnQgQ29udHJvbGxlcikuCi0JICBJdCBpcyB1c2VkIGluIHNvbWUgSUJNIENlbGwgYmxhZGVzLgotCWRlZmF1bHQgbQotCiBjb25maWcgTU1JT19OVlJBTQogCWJvb2wKIAlkZWZhdWx0IG4KQEAgLTE5Niw3ICsxOTEsNyBAQAogCiBjb25maWcgVEFVCiAJYm9vbCAiT24tY2hpcCBDUFUgdGVtcGVyYXR1cmUgc2Vuc29yIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBDTEFTU0lDMzIKKwlkZXBlbmRzIG9uIDZ4eAogCWhlbHAKIAkgIEczIGFuZCBHNCBwcm9jZXNzb3JzIGhhdmUgYW4gb24tY2hpcCB0ZW1wZXJhdHVyZSBzZW5zb3IgY2FsbGVkIHRoZQogCSAgJ1RoZXJtYWwgQXNzaXN0IFVuaXQgKFRBVSknLCB3aGljaCwgaW4gdGhlb3J5LCBjYW4gbWVhc3VyZSB0aGUgb24tZGllCkBAIC0yNzQsNyArMjY5LDcgQEAKIAogY29uZmlnIEFYT05fUkFNCiAJdHJpc3RhdGUgIkF4b24gRERSMiBtZW1vcnkgZGV2aWNlIGRyaXZlciIKLQlkZXBlbmRzIG9uIFBQQ19JQk1fQ0VMTF9CTEFERQorCWRlcGVuZHMgb24gUFBDX0lCTV9DRUxMX0JMQURFICYmIEJMT0NLCiAJZGVmYXVsdCBtCiAJaGVscAogCSAgSXQgcmVnaXN0ZXJzIG9uZSBibG9jayBkZXZpY2UgcGVyIEF4b24ncyBERFIyIG1lbW9yeSBiYW5rIGZvdW5kCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCmluZGV4IGU4NjhiNWMuLjlkYTc5NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCkBAIC01Nyw5ICs1NywxNyBAQAogCiBlbmRjaG9pY2UKIAorIyBVbnRpbCB3ZSBoYXZlIGEgY2hvaWNlIG9mIGV4Y2x1c2l2ZSBDUFUgdHlwZXMgb24gNjQtYml0LCB3ZSBhbHdheXMKKyMgdXNlIFBQQ19CT09LM1MuIE9uIDMyLWJpdCwgdGhpcyBpcyBlcXVpdmFsZW50IHRvIDZ4eCB3aGljaCBpcworIyAiY2xhc3NpYyIgTU1VCisKK2NvbmZpZyBQUENfQk9PSzNTCisgICAgICAgZGVmX2Jvb2wgeQorICAgICAgIGRlcGVuZHMgb24gUFBDNjQgfHwgNnh4CisKIGNvbmZpZyBQT1dFUjRfT05MWQogCWJvb2wgIk9wdGltaXplIGZvciBQT1dFUjQiCi0JZGVwZW5kcyBvbiBQUEM2NAorCWRlcGVuZHMgb24gUFBDNjQgJiYgUFBDX0JPT0szUwogCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIAkgIENhdXNlIHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBmb3IgUE9XRVI0L1BPV0VSNS9QUEM5NzAgcHJvY2Vzc29ycy4KQEAgLTY4LDE2ICs3NiwxNiBAQAogCiBjb25maWcgUE9XRVIzCiAJYm9vbAotCWRlcGVuZHMgb24gUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlkZWZhdWx0IHkgaWYgIVBPV0VSNF9PTkxZCiAKIGNvbmZpZyBQT1dFUjQKLQlkZXBlbmRzIG9uIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJZGVmX2Jvb2wgeQogCiBjb25maWcgVFVORV9DRUxMCiAJYm9vbCAiT3B0aW1pemUgZm9yIENlbGwgQnJvYWRiYW5kIEVuZ2luZSIKLQlkZXBlbmRzIG9uIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJaGVscAogCSAgQ2F1c2UgdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIGZvciB0aGUgUFBFIG9mIHRoZSBDZWxsIEJyb2FkYmFuZAogCSAgRW5naW5lLiBUaGlzIHdpbGwgbWFrZSB0aGUgY29kZSBydW4gY29uc2lkZXJhYmx5IGZhc3RlciBvbiBDZWxsCkBAIC0xNDcsNyArMTU1LDcgQEAKIAogY29uZmlnIEFMVElWRUMKIAlib29sICJBbHRpVmVjIFN1cHBvcnQiCi0JZGVwZW5kcyBvbiBDTEFTU0lDMzIgfHwgUE9XRVI0CisJZGVwZW5kcyBvbiA2eHggfHwgUE9XRVI0CiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBrZXJuZWwgc3VwcG9ydCBmb3IgdGhlIEFsdGl2ZWMgZXh0ZW5zaW9ucyB0byB0aGUKIAkgIFBvd2VyUEMgcHJvY2Vzc29yLiBUaGUga2VybmVsIGN1cnJlbnRseSBzdXBwb3J0cyBzYXZpbmcgYW5kIHJlc3RvcmluZwpAQCAtMjEwLDYgKzIxOCwxMCBAQAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uICFQUENfU1REX01NVQogCitjb25maWcgUFBDX0JPT0szRV9NTVUKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBGU0xfQk9PS0UKKwogY29uZmlnIFBQQ19NTV9TTElDRVMKIAlib29sCiAJZGVmYXVsdCB5IGlmIEhVR0VUTEJfUEFHRSB8fCAoUFBDX1NURF9NTVVfNjQgJiYgUFBDXzY0S19QQUdFUykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL01ha2VmaWxlCmluZGV4IDgwNzllMGIuLmY3NDE5MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9NYWtlZmlsZQpAQCAtMTksMyArMTksNCBAQAogb2JqLSQoQ09ORklHX1BQQ19DRUxMKQkJKz0gY2VsbC8KIG9iai0kKENPTkZJR19QUENfUFMzKQkJKz0gcHMzLwogb2JqLSQoQ09ORklHX0VNQkVEREVENnh4KQkrPSBlbWJlZGRlZDZ4eC8KK29iai0kKENPTkZJR19BTUlHQU9ORSkJCSs9IGFtaWdhb25lLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9hbWlnYW9uZS9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9hbWlnYW9uZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMjQ3NjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2FtaWdhb25lL0tjb25maWcKQEAgLTAsMCArMSwxOCBAQAorY29uZmlnIEFNSUdBT05FCisJYm9vbCAiRXlldGVjaCBBbWlnYU9uZS9NQUkgVGVyb24iCisJZGVwZW5kcyBvbiA2eHggJiYgQlJPS0VOX09OX1NNUAorCXNlbGVjdCBQUENfSTgyNTkKKwlzZWxlY3QgUFBDX0lORElSRUNUX1BDSQorCXNlbGVjdCBQUENfVURCR18xNjU1MAorCXNlbGVjdCBQQ0kKKwlzZWxlY3QgTk9UX0NPSEVSRU5UX0NBQ0hFCisJc2VsZWN0IENIRUNLX0NBQ0hFX0NPSEVSRU5DWQorCXNlbGVjdCBERUZBVUxUX1VJTUFHRQorCXNlbGVjdCBQQ1NQS1JfUExBVEZPUk0KKwloZWxwCisJU2VsZWN0IEFtaWdhT25lIGZvciB0aGUgZm9sbG93aW5nIG1hY2hpbmVzOgorCS0gQW1pZ2FPbmUgU0UvVGVyb24gQ1ggKEczIG9ubHkpCisJLSBBbWlnYU9uZSBYRS9UZXJvbiBQWAorCS0gdUExL1Rlcm9uIG1pbmkKKwkgIE1vcmUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGF0OgorCSAgPGh0dHA6Ly9hbWlnYW9uZS1saW51eC5zb3VyY2Vmb3JnZS5uZXQvPi4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvYW1pZ2FvbmUvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2FtaWdhb25lL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ODg1YjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2FtaWdhb25lL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai15CSs9IHNldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvYW1pZ2FvbmUvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvYW1pZ2FvbmUvc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDMwMzUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9hbWlnYW9uZS9zZXR1cC5jCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQW1pZ2FPbmUgcGxhdGZvcm0gc2V0dXAKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBHZXJoYXJkIFBpcmNoZXIgKGdlcmhhcmRfcGlyY2hlckBnbXgubmV0KQorICoKKyAqICAgQmFzZWQgb24gb3JpZ2luYWwgYW1pZ2FvbmVfc2V0dXAuYyBzb3VyY2UgY29kZQorICogQ29weXJpZ2h0IDIwMDMgYnkgSGFucy1Kb2VyZyBGcmllZGVuIGFuZCBUaG9tYXMgRnJpZWRlbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXRzcmVsZWFzZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL2k4MjU5Lmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vdWRiZy5oPgorCitleHRlcm4gdm9pZCBfX2ZsdXNoX2Rpc2FibGVfTDEodm9pZCk7CisKK3ZvaWQgYW1pZ2FvbmVfc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKK3sKKwlzZXFfcHJpbnRmKG0sICJ2ZW5kb3JcdFx0OiBFeWV0ZWNoIEx0ZC5cbiIpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBhbWlnYW9uZV9hZGRfYnJpZGdlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2KQoreworCWNvbnN0IHUzMiAqY2ZnX2FkZHIsICpjZmdfZGF0YTsKKwlpbnQgbGVuOworCWNvbnN0IGludCAqYnVzX3JhbmdlOworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKKworCXByaW50ayhLRVJOX0lORk8gIkFkZGluZyBQQ0kgaG9zdCBicmlkZ2UgJXNcbiIsIGRldi0+ZnVsbF9uYW1lKTsKKworCWNmZ19hZGRyID0gb2ZfZ2V0X2FkZHJlc3MoZGV2LCAwLCBOVUxMLCBOVUxMKTsKKwljZmdfZGF0YSA9IG9mX2dldF9hZGRyZXNzKGRldiwgMSwgTlVMTCwgTlVMTCk7CisJaWYgKChjZmdfYWRkciA9PSBOVUxMKSB8fCAoY2ZnX2RhdGEgPT0gTlVMTCkpCisJCXJldHVybiAtRU5PREVWOworCisJYnVzX3JhbmdlID0gb2ZfZ2V0X3Byb3BlcnR5KGRldiwgImJ1cy1yYW5nZSIsICZsZW4pOworCWlmICgoYnVzX3JhbmdlID09IE5VTEwpIHx8IChsZW4gPCAyICogc2l6ZW9mKGludCkpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW4ndCBnZXQgYnVzLXJhbmdlIGZvciAlcywgYXNzdW1lIgorCQkgICAgICAgIiBidXMgMFxuIiwgZGV2LT5mdWxsX25hbWUpOworCisJaG9zZSA9IHBjaWJpb3NfYWxsb2NfY29udHJvbGxlcihkZXYpOworCWlmIChob3NlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJaG9zZS0+Zmlyc3RfYnVzbm8gPSBidXNfcmFuZ2UgPyBidXNfcmFuZ2VbMF0gOiAwOworCWhvc2UtPmxhc3RfYnVzbm8gPSBidXNfcmFuZ2UgPyBidXNfcmFuZ2VbMV0gOiAweGZmOworCisJc2V0dXBfaW5kaXJlY3RfcGNpKGhvc2UsIGNmZ19hZGRyWzBdLCBjZmdfZGF0YVswXSwgMCk7CisKKwkvKiBJbnRlcnByZXQgdGhlICJyYW5nZXMiIHByb3BlcnR5ICovCisJLyogVGhpcyBhbHNvIG1hcHMgdGhlIEkvTyByZWdpb24gYW5kIHNldHMgaXNhX2lvL21lbV9iYXNlICovCisJcGNpX3Byb2Nlc3NfYnJpZGdlX09GX3Jhbmdlcyhob3NlLCBkZXYsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19pbml0IGFtaWdhb25lX3NldHVwX2FyY2godm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCWludCBwaGIgPSAtRU5PREVWOworCisJLyogTG9va3VwIFBDSSBob3N0IGJyaWRnZXMuICovCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgIm1haS1sb2dpYyxhcnRpY2lhLXMiKQorCQlwaGIgPSBhbWlnYW9uZV9hZGRfYnJpZGdlKG5wKTsKKworCUJVR19PTihwaGIgIT0gMCk7CisKKwlpZiAocHBjX21kLnByb2dyZXNzKQorCQlwcGNfbWQucHJvZ3Jlc3MoIkxpbnV4L1BQQyAiVVRTX1JFTEVBU0UiXG4iLCAwKTsKK30KKwordm9pZCBfX2luaXQgYW1pZ2FvbmVfaW5pdF9JUlEodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBpYywgKm5wID0gTlVMTDsKKwljb25zdCB1bnNpZ25lZCBsb25nICpwcm9wID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGludF9hY2sgPSAwOworCisJLyogU2VhcmNoIGZvciBJU0EgaW50ZXJydXB0IGNvbnRyb2xsZXIuICovCisJcGljID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgImludGVycnVwdC1jb250cm9sbGVyIiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG5wUE5QLDAwMCIpOworCUJVR19PTihwaWMgPT0gTlVMTCk7CisKKwkvKiBMb29rIGZvciBpbnRlcnJ1cHQgYWNrbm93bGVkZ2UgYWRkcmVzcyBpbiB0aGUgUENJIHJvb3Qgbm9kZS4gKi8KKwlucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsICJwY2kiLCAibWFpLWxvZ2ljLGFydGljaWEtcyIpOworCWlmIChucCkgeworCQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiODI1OS1pbnRlcnJ1cHQtYWNrbm93bGVkZ2UiLCBOVUxMKTsKKwkJaWYgKHByb3ApCisJCQlpbnRfYWNrID0gcHJvcFswXTsKKwkJb2Zfbm9kZV9wdXQobnApOworCX0KKworCWlmIChpbnRfYWNrID09IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbm5vdCBmaW5kIFBDSSBpbnRlcnJ1cHQgYWNrbm93bGVkZ2UiCisJCSAgICAgICAiIGFkZHJlc3MsIHBvbGxpbmdcbiIpOworCisJaTgyNTlfaW5pdChwaWMsIGludF9hY2spOworCXBwY19tZC5nZXRfaXJxID0gaTgyNTlfaXJxOworCWlycV9zZXRfZGVmYXVsdF9ob3N0KGk4MjU5X2dldF9ob3N0KCkpOworfQorCit2b2lkIF9faW5pdCBhbWlnYW9uZV9pbml0KHZvaWQpCit7CisJcmVxdWVzdF9yZWdpb24oMHgwMCwgMHgyMCwgImRtYTEiKTsKKwlyZXF1ZXN0X3JlZ2lvbigweDQwLCAweDIwLCAidGltZXIiKTsKKwlyZXF1ZXN0X3JlZ2lvbigweDgwLCAweDEwLCAiZG1hIHBhZ2UgcmVnIik7CisJcmVxdWVzdF9yZWdpb24oMHhjMCwgMHgyMCwgImRtYTIiKTsKK30KKwordm9pZCBhbWlnYW9uZV9yZXN0YXJ0KGNoYXIgKmNtZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCisJLyogRmx1c2ggYW5kIGRpc2FibGUgY2FjaGVzLiAqLworCV9fZmx1c2hfZGlzYWJsZV9MMSgpOworCisgICAgICAgIC8qIFNldCBTUlIwIHRvIHRoZSByZXNldCB2ZWN0b3IgYW5kIHR1cm4gb24gTVNSX0lQLiAqLworCW10c3ByKFNQUk5fU1JSMCwgMHhmZmYwMDEwMCk7CisJbXRzcHIoU1BSTl9TUlIxLCBNU1JfSVApOworCisJLyogRG8gYW4gcmZpIHRvIGp1bXAgYmFjayB0byBmaXJtd2FyZS4gKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygicmZpIiA6IDogOiAibWVtb3J5Iik7CisKKwkvKiBOb3QgcmVhY2hlZC4gKi8KKwl3aGlsZSAoMSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFtaWdhb25lX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCisJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiZXlldGVjaCxhbWlnYW9uZSIpKSB7CisJCS8qCisJCSAqIENvaGVyZW50IG1lbW9yeSBhY2Nlc3MgY2F1c2UgY29tcGxldGUgc3lzdGVtIGxvY2t1cCEgVGh1cworCQkgKiBkaXNhYmxlIHRoaXMgQ1BVIGZlYXR1cmUsIGV2ZW4gaWYgdGhlIENQVSBuZWVkcyBpdC4KKwkJICovCisJCWN1cl9jcHVfc3BlYy0+Y3B1X2ZlYXR1cmVzICY9IH5DUFVfRlRSX05FRURfQ09IRVJFTlQ7CisKKwkJSVNBX0RNQV9USFJFU0hPTEQgPSAweDAwZmZmZmZmOworCQlETUFfTU9ERV9SRUFEID0gMHg0NDsKKwkJRE1BX01PREVfV1JJVEUgPSAweDQ4OworCisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitkZWZpbmVfbWFjaGluZShhbWlnYW9uZSkgeworCS5uYW1lCQkJPSAiQW1pZ2FPbmUiLAorCS5wcm9iZQkJCT0gYW1pZ2FvbmVfcHJvYmUsCisJLnNldHVwX2FyY2gJCT0gYW1pZ2FvbmVfc2V0dXBfYXJjaCwKKwkuaW5pdAkJCT0gYW1pZ2FvbmVfaW5pdCwKKwkuc2hvd19jcHVpbmZvCQk9IGFtaWdhb25lX3Nob3dfY3B1aW5mbywKKwkuaW5pdF9JUlEJCT0gYW1pZ2FvbmVfaW5pdF9JUlEsCisJLnJlc3RhcnQJCT0gYW1pZ2FvbmVfcmVzdGFydCwKKwkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucHJvZ3Jlc3MJCT0gdWRiZ19wcm9ncmVzcywKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnCmluZGV4IDVjYzMyNzkuLjQwZTI0YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnCkBAIC0yMyw3ICsyMyw3IEBACiAKIGNvbmZpZyBQUENfSUJNX0NFTExfQkxBREUKIAlib29sICJJQk0gQ2VsbCBCbGFkZSIKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJc2VsZWN0IFBQQ19DRUxMX05BVElWRQogCXNlbGVjdCBNTUlPX05WUkFNCiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCkBAIC0zMSw3ICszMSw3IEBACiAKIGNvbmZpZyBQUENfQ0VMTEVCCiAJYm9vbCAiVG9zaGliYSdzIENlbGwgUmVmZXJlbmNlIFNldCAnQ2VsbGViJyBBcmNoaXRlY3R1cmUiCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEM2NAorCWRlcGVuZHMgb24gUFBDNjQgJiYgUFBDX0JPT0szUwogCXNlbGVjdCBQUENfQ0VMTF9OQVRJVkUKIAlzZWxlY3QgSEFTX1RYWDlfU0VSSUFMCiAJc2VsZWN0IFBQQ19VREJHX0JFQVQKQEAgLTQwLDkgKzQwLDE0IEBACiAKIGNvbmZpZyBQUENfQ0VMTF9RUEFDRQogCWJvb2wgIklCTSBDZWxsIC0gUVBBQ0UiCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEM2NAorCWRlcGVuZHMgb24gUFBDNjQgJiYgUFBDX0JPT0szUwogCXNlbGVjdCBQUENfQ0VMTF9DT01NT04KIAorY29uZmlnIEFYT05fTVNJCisJYm9vbAorCWRlcGVuZHMgb24gUFBDX0lCTV9DRUxMX0JMQURFICYmIFBDSV9NU0kKKwlkZWZhdWx0IHkKKwogbWVudSAiQ2VsbCBCcm9hZGJhbmQgRW5naW5lIG9wdGlvbnMiCiAJZGVwZW5kcyBvbiBQUENfQ0VMTAogCkBAIC05OCw3ICsxMDMsNyBAQAogCiBjb25maWcgUFBDX0lCTV9DRUxMX1BPV0VSQlVUVE9OCiAJdHJpc3RhdGUgIklCTSBDZWxsIEJsYWRlIHBvd2VyIGJ1dHRvbiIKLQlkZXBlbmRzIG9uIFBQQ19JQk1fQ0VMTF9CTEFERSAmJiBQUENfUE1JICYmIElOUFVUX0VWREVWCisJZGVwZW5kcyBvbiBQUENfSUJNX0NFTExfQkxBREUgJiYgSU5QVVRfRVZERVYKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTdXBwb3J0IFBvd2VyYnV0dG9uIG9uIElCTSBDZWxsIGJsYWRlcy4KQEAgLTExOCw5ICsxMjMsOSBAQAogCSAgRm9yIGRldGFpbHMsIHRha2UgYSBsb29rIGF0IDxmaWxlOkRvY3VtZW50YXRpb24vY3B1LWZyZXEvPi4KIAkgIElmIHlvdSBkb24ndCBoYXZlIHN1Y2ggcHJvY2Vzc29yLCBzYXkgTgogCi1jb25maWcgQ0JFX0NQVUZSRVFfUE1JCi0JdHJpc3RhdGUgIkNCRSBmcmVxdWVuY3kgc2NhbGluZyB1c2luZyBQTUkgaW50ZXJmYWNlIgotCWRlcGVuZHMgb24gQ0JFX0NQVUZSRVEgJiYgUFBDX1BNSSAmJiBFWFBFUklNRU5UQUwKK2NvbmZpZyBDQkVfQ1BVRlJFUV9QTUlfRU5BQkxFCisJYm9vbCAiQ0JFIGZyZXF1ZW5jeSBzY2FsaW5nIHVzaW5nIFBNSSBpbnRlcmZhY2UiCisJZGVwZW5kcyBvbiBDQkVfQ1BVRlJFUSAmJiBFWFBFUklNRU5UQUwKIAlkZWZhdWx0IG4KIAloZWxwCiAJICBTZWxlY3QgdGhpcywgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBQTUkgaW50ZXJmYWNlCkBAIC0xMjgsNiArMTMzLDIwIEBACiAJICBwcm9jZXNzb3Igd2lsbCBub3Qgb25seSBiZSBhYmxlIHRvIHJ1biBhdCBsb3dlciBzcGVlZCwKIAkgIGJ1dCBhbHNvIGF0IGxvd2VyIGNvcmUgdm9sdGFnZS4KIAorY29uZmlnIENCRV9DUFVGUkVRX1BNSQorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBDQkVfQ1BVRlJFUV9QTUlfRU5BQkxFCisJZGVmYXVsdCBDQkVfQ1BVRlJFUQorCitjb25maWcgUFBDX1BNSQorCXRyaXN0YXRlCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBDQkVfQ1BVRlJFUV9QTUkgfHwgUFBDX0lCTV9DRUxMX1BPV0VSQlVUVE9OCisJaGVscAorCSAgUE1JIChQbGF0Zm9ybSBNYW5hZ2VtZW50IEludGVycnVwdCkgaXMgYSB3YXkgdG8KKwkgIGNvbW11bmljYXRlIHdpdGggdGhlIEJNQyAoQmFzZWJvYXJkIE1hbmFnZW1lbnQgQ29udHJvbGxlcikuCisJICBJdCBpcyB1c2VkIGluIHNvbWUgSUJNIENlbGwgYmxhZGVzLgorCiBjb25maWcgQ0JFX0NQVUZSRVFfU1BVX0dPVkVSTk9SCiAJdHJpc3RhdGUgIkNCRSBmcmVxdWVuY3kgc2NhbGluZyBiYXNlZCBvbiBTUFUgdXNhZ2UiCiAJZGVwZW5kcyBvbiBTUFVfRlMgJiYgQ1BVX0ZSRVEKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9NYWtlZmlsZQppbmRleCA0M2VjY2IyLi44M2ZhZmU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiAJCQkJCSAgICQoc3B1LW1hbmFnZS15KSBcCiAJCQkJCSAgIHNwdWZzLwogCi1vYmotJChDT05GSUdfUENJX01TSSkJCQkrPSBheG9uX21zaS5vCitvYmotJChDT05GSUdfQVhPTl9NU0kpCQkJKz0gYXhvbl9tc2kubwogCiAjIHFwYWNlIHNldHVwCiBvYmotJChDT05GSUdfUFBDX0NFTExfUVBBQ0UpCQkrPSBxcGFjZV9zZXR1cC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW8td29ya2Fyb3VuZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pby13b3JrYXJvdW5kcy5jCmluZGV4IDA1OWNhZDYuLjVjMTExOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pby13b3JrYXJvdW5kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pby13b3JrYXJvdW5kcy5jCkBAIC0xMzEsMTAgKzEzMSwxMCBAQAogfTsKIAogc3RhdGljIHZvaWQgX19pb21lbSAqaW93YV9pb3JlbWFwKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCisJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjYWxsZXIpCiB7CiAJc3RydWN0IGlvd2FfYnVzICpidXM7Ci0Jdm9pZCBfX2lvbWVtICpyZXMgPSBfX2lvcmVtYXAoYWRkciwgc2l6ZSwgZmxhZ3MpOworCXZvaWQgX19pb21lbSAqcmVzID0gX19pb3JlbWFwX2NhbGxlcihhZGRyLCBzaXplLCBmbGFncywgY2FsbGVyKTsKIAlpbnQgYnVzbm87CiAKIAlidXMgPSBpb3dhX3BjaV9maW5kKDAsICh1bnNpZ25lZCBsb25nKWFkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW9tbXUuYwppbmRleCBlZTUwMzNlLi41NzQ0NTI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW9tbXUuYwpAQCAtNzQsNyArNzQsNyBAQAogI2RlZmluZSBJT0NfSU9fRXhjcFN0YXRfVgkJMHg4MDAwMDAwMDAwMDAwMDAwdWwKICNkZWZpbmUgSU9DX0lPX0V4Y3BTdGF0X1NQRl9NYXNrCTB4NjAwMDAwMDAwMDAwMDAwMHVsCiAjZGVmaW5lIElPQ19JT19FeGNwU3RhdF9TUEZfUwkJMHg2MDAwMDAwMDAwMDAwMDAwdWwKLSNkZWZpbmUgSU9DX0lPX0V4Y3BTdGF0X1NQRl9QCQkweDQwMDAwMDAwMDAwMDAwMDB1bAorI2RlZmluZSBJT0NfSU9fRXhjcFN0YXRfU1BGX1AJCTB4MjAwMDAwMDAwMDAwMDAwMHVsCiAjZGVmaW5lIElPQ19JT19FeGNwU3RhdF9BRERSX01hc2sJMHgwMDAwMDAwN2ZmZmZmMDAwdWwKICNkZWZpbmUgSU9DX0lPX0V4Y3BTdGF0X1JXX01hc2sJCTB4MDAwMDAwMDAwMDAwMDgwMHVsCiAjZGVmaW5lIElPQ19JT19FeGNwU3RhdF9JT0lEX01hc2sJMHgwMDAwMDAwMDAwMDAwN2ZmdWwKQEAgLTI0NywxNyArMjQ3LDE4IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpb2NfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyBzdGF0OworCXVuc2lnbmVkIGxvbmcgc3RhdCwgc3BmOwogCXN0cnVjdCBjYmVfaW9tbXUgKmlvbW11ID0gZGF0YTsKIAogCXN0YXQgPSBpbl9iZTY0KGlvbW11LT54bGF0ZV9yZWdzICsgSU9DX0lPX0V4Y3BTdGF0KTsKKwlzcGYgPSBzdGF0ICYgSU9DX0lPX0V4Y3BTdGF0X1NQRl9NYXNrOwogCiAJLyogTWlnaHQgd2FudCB0byByYXRlIGxpbWl0IGl0ICovCiAJcHJpbnRrKEtFUk5fRVJSICJpb21tdTogRE1BIGV4Y2VwdGlvbiAweCUwMTZseFxuIiwgc3RhdCk7CiAJcHJpbnRrKEtFUk5fRVJSICIgIFY9JWQsIFNQRj1bJWMlY10sIFJXPSVzLCBJT0lEPTB4JTA0eFxuIiwKIAkgICAgICAgISEoc3RhdCAmIElPQ19JT19FeGNwU3RhdF9WKSwKLQkgICAgICAgKHN0YXQgJiBJT0NfSU9fRXhjcFN0YXRfU1BGX1MpID8gJ1MnIDogJyAnLAotCSAgICAgICAoc3RhdCAmIElPQ19JT19FeGNwU3RhdF9TUEZfUCkgPyAnUCcgOiAnICcsCisJICAgICAgIChzcGYgPT0gSU9DX0lPX0V4Y3BTdGF0X1NQRl9TKSA/ICdTJyA6ICcgJywKKwkgICAgICAgKHNwZiA9PSBJT0NfSU9fRXhjcFN0YXRfU1BGX1ApID8gJ1AnIDogJyAnLAogCSAgICAgICAoc3RhdCAmIElPQ19JT19FeGNwU3RhdF9SV19NYXNrKSA/ICJSZWFkIiA6ICJXcml0ZSIsCiAJICAgICAgICh1bnNpZ25lZCBpbnQpKHN0YXQgJiBJT0NfSU9fRXhjcFN0YXRfSU9JRF9NYXNrKSk7CiAJcHJpbnRrKEtFUk5fRVJSICIgIHBhZ2U9MHglMDE2bHhcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcXBhY2Vfc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9xcGFjZV9zZXR1cC5jCmluZGV4IGJlODRlNmEuLmM1Y2UwMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9xcGFjZV9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9xcGFjZV9zZXR1cC5jCkBAIC04MSwxNiArODEsNiBAQAogfQogbWFjaGluZV9zdWJzeXNfaW5pdGNhbGwocXBhY2UsIHFwYWNlX3B1Ymxpc2hfZGV2aWNlcyk7CiAKLWV4dGVybiBpbnQgcXBhY2Vfbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQkvKiBzZXQgZG1hX29wcyBmb3Igb2ZfcGxhdGZvcm0gYnVzICovCi0JaWYgKGRldi0+YnVzICYmIGRldi0+YnVzLT5uYW1lCi0JCQkmJiAhc3RyY21wKGRldi0+YnVzLT5uYW1lLCAib2ZfcGxhdGZvcm0iKSkKLQkJc2V0X2RtYV9vcHMoZGV2LCAmZG1hX2RpcmVjdF9vcHMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBxcGFjZV9zZXR1cF9hcmNoKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1NQVV9CQVNFCkBAIC0xMTUsOSArMTA1LDYgQEAKICNpZmRlZiBDT05GSUdfRFVNTVlfQ09OU09MRQogCWNvbnN3aXRjaHAgPSAmZHVtbXlfY29uOwogI2VuZGlmCi0KLQkvKiBzZXQgbm90aWZpZXIgZnVuY3Rpb24gKi8KLQlwbGF0Zm9ybV9ub3RpZnkgPSAmcXBhY2Vfbm90aWZ5OwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBxcGFjZV9wcm9iZSh2b2lkKQpAQCAtMTQxLDYgKzEyOCw4IEBACiAJLnBvd2VyX29mZgkJPSBydGFzX3Bvd2VyX29mZiwKIAkuaGFsdAkJCT0gcnRhc19oYWx0LAogCS5nZXRfYm9vdF90aW1lCQk9IHJ0YXNfZ2V0X2Jvb3RfdGltZSwKKwkuZ2V0X3J0Y190aW1lCQk9IHJ0YXNfZ2V0X3J0Y190aW1lLAorCS5zZXRfcnRjX3RpbWUJCT0gcnRhc19zZXRfcnRjX3RpbWUsCiAJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCiAJLnByb2dyZXNzCQk9IHFwYWNlX3Byb2dyZXNzLAogCS5pbml0X0lSUQkJPSBpaWNfaW5pdF9JUlEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2Jhc2UuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jCmluZGV4IGU0ODdhZDYuLjlhYmQyMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jCkBAIC0xMTQsNyArMTE0LDcgQEAKIAlpbnQgbnIgPSAoTlJfQ1BVUyA+IDEpID8gTlJfQ1BVUyA6IE5SX0NQVVMgKyAxOwogCiAJLyogR2xvYmFsIFRMQklFIGJyb2FkY2FzdCByZXF1aXJlZCB3aXRoIFNQRXMuICovCi0JX19jcHVzX3NldGFsbCgmbW0tPmNwdV92bV9tYXNrLCBucik7CisJYml0bWFwX2ZpbGwoY3B1bWFza19iaXRzKG1tX2NwdW1hc2sobW0pKSwgbnIpOwogfQogCiB2b2lkIHNwdV9hc3NvY2lhdGVfbW0oc3RydWN0IHNwdSAqc3B1LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfZmF1bHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfZmF1bHQuYwppbmRleCBjOGIxY2Q0Li45NWQ4ZGFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2ZhdWx0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9mYXVsdC5jCkBAIC0zOSw2MCArMzksNTYgQEAKIAl1bnNpZ25lZCBsb25nIGlzX3dyaXRlOwogCWludCByZXQ7CiAKLSNpZiAwCi0JaWYgKCFJU19WQUxJRF9FQShlYSkpIHsKKwlpZiAobW0gPT0gTlVMTCkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotI2VuZGlmIC8qIFhYWCAqLwotCWlmIChtbSA9PSBOVUxMKSB7CisKKwlpZiAobW0tPnBnZCA9PSBOVUxMKQogCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaWYgKG1tLT5wZ2QgPT0gTlVMTCkgewotCQlyZXR1cm4gLUVGQVVMVDsKLQl9CiAKIAlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJcmV0ID0gLUVGQVVMVDsKIAl2bWEgPSBmaW5kX3ZtYShtbSwgZWEpOwogCWlmICghdm1hKQotCQlnb3RvIGJhZF9hcmVhOwotCWlmICh2bWEtPnZtX3N0YXJ0IDw9IGVhKQotCQlnb3RvIGdvb2RfYXJlYTsKLQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NET1dOKSkKLQkJZ290byBiYWRfYXJlYTsKLQlpZiAoZXhwYW5kX3N0YWNrKHZtYSwgZWEpKQotCQlnb3RvIGJhZF9hcmVhOwotZ29vZF9hcmVhOgorCQlnb3RvIG91dF91bmxvY2s7CisKKwlpZiAoZWEgPCB2bWEtPnZtX3N0YXJ0KSB7CisJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9HUk9XU0RPV04pKQorCQkJZ290byBvdXRfdW5sb2NrOworCQlpZiAoZXhwYW5kX3N0YWNrKHZtYSwgZWEpKQorCQkJZ290byBvdXRfdW5sb2NrOworCX0KKwogCWlzX3dyaXRlID0gZHNpc3IgJiBNRkNfRFNJU1JfQUNDRVNTX1BVVDsKIAlpZiAoaXNfd3JpdGUpIHsKIAkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkKLQkJCWdvdG8gYmFkX2FyZWE7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJfSBlbHNlIHsKIAkJaWYgKGRzaXNyICYgTUZDX0RTSVNSX0FDQ0VTU19ERU5JRUQpCi0JCQlnb3RvIGJhZF9hcmVhOworCQkJZ290byBvdXRfdW5sb2NrOwogCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9FWEVDKSkpCi0JCQlnb3RvIGJhZF9hcmVhOworCQkJZ290byBvdXRfdW5sb2NrOwogCX0KKwogCXJldCA9IDA7CiAJKmZsdCA9IGhhbmRsZV9tbV9mYXVsdChtbSwgdm1hLCBlYSwgaXNfd3JpdGUpOwogCWlmICh1bmxpa2VseSgqZmx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmICgqZmx0ICYgVk1fRkFVTFRfT09NKSB7CiAJCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBiYWRfYXJlYTsKKwkJCWdvdG8gb3V0X3VubG9jazsKIAkJfSBlbHNlIGlmICgqZmx0ICYgVk1fRkFVTFRfU0lHQlVTKSB7CiAJCQlyZXQgPSAtRUZBVUxUOwotCQkJZ290byBiYWRfYXJlYTsKKwkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQogCQlCVUcoKTsKIAl9CisKIAlpZiAoKmZsdCAmIFZNX0ZBVUxUX01BSk9SKQogCQljdXJyZW50LT5tYWpfZmx0Kys7CiAJZWxzZQogCQljdXJyZW50LT5taW5fZmx0Kys7CisKK291dF91bmxvY2s6CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAlyZXR1cm4gcmV0OwotCi1iYWRfYXJlYToKLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCXJldHVybiAtRUZBVUxUOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3B1X2hhbmRsZV9tbV9mYXVsdCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29udGV4dC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvbnRleHQuYwppbmRleCA2NjUzZGRiLi5kYjUzOThjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29udGV4dC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb250ZXh0LmMKQEAgLTM1LDYgKzM1LDggQEAKIHN0cnVjdCBzcHVfY29udGV4dCAqYWxsb2Nfc3B1X2NvbnRleHQoc3RydWN0IHNwdV9nYW5nICpnYW5nKQogewogCXN0cnVjdCBzcHVfY29udGV4dCAqY3R4OworCXN0cnVjdCB0aW1lc3BlYyB0czsKKwogCWN0eCA9IGt6YWxsb2Moc2l6ZW9mICpjdHgsIEdGUF9LRVJORUwpOwogCWlmICghY3R4KQogCQlnb3RvIG91dDsKQEAgLTY0LDYgKzY2LDggQEAKIAlfX3NwdV91cGRhdGVfc2NoZWRfaW5mbyhjdHgpOwogCXNwdV9zZXRfdGltZXNsaWNlKGN0eCk7CiAJY3R4LT5zdGF0cy51dGlsX3N0YXRlID0gU1BVX1VUSUxfSURMRV9MT0FERUQ7CisJa3RpbWVfZ2V0X3RzKCZ0cyk7CisJY3R4LT5zdGF0cy50c3RhbXAgPSB0aW1lc3BlY190b19ucygmdHMpOwogCiAJYXRvbWljX2luYygmbnJfc3B1X2NvbnRleHRzKTsKIAlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCmluZGV4IDBkYTdmMmIuLmQ2YTUxOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYwpAQCAtNTY4LDE2ICs1NjgsMTcgQEAKIAlzdHJ1Y3Qgc3B1X2xzY3NhICpsc2NzYSA9IGN0eC0+Y3NhLmxzY3NhOwogCWludCByZXQ7CiAKLQlzaXplID0gbWluX3Qoc3NpemVfdCwgc2l6ZW9mIGxzY3NhLT5ncHJzIC0gKnBvcywgc2l6ZSk7Ci0JaWYgKHNpemUgPD0gMCkKKwlpZiAoKnBvcyA+PSBzaXplb2YobHNjc2EtPmdwcnMpKQogCQlyZXR1cm4gLUVGQklHOworCisJc2l6ZSA9IG1pbl90KHNzaXplX3QsIHNpemVvZihsc2NzYS0+Z3BycykgLSAqcG9zLCBzaXplKTsKIAkqcG9zICs9IHNpemU7CiAKIAlyZXQgPSBzcHVfYWNxdWlyZV9zYXZlZChjdHgpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBjb3B5X2Zyb21fdXNlcihsc2NzYS0+Z3BycyArICpwb3MgLSBzaXplLAorCXJldCA9IGNvcHlfZnJvbV91c2VyKChjaGFyICopbHNjc2EtPmdwcnMgKyAqcG9zIC0gc2l6ZSwKIAkJCSAgICAgYnVmZmVyLCBzaXplKSA/IC1FRkFVTFQgOiBzaXplOwogCiAJc3B1X3JlbGVhc2Vfc2F2ZWQoY3R4KTsKQEAgLTYyMywxMCArNjI0LDExIEBACiAJc3RydWN0IHNwdV9sc2NzYSAqbHNjc2EgPSBjdHgtPmNzYS5sc2NzYTsKIAlpbnQgcmV0OwogCi0Jc2l6ZSA9IG1pbl90KHNzaXplX3QsIHNpemVvZihsc2NzYS0+ZnBjcikgLSAqcG9zLCBzaXplKTsKLQlpZiAoc2l6ZSA8PSAwKQorCWlmICgqcG9zID49IHNpemVvZihsc2NzYS0+ZnBjcikpCiAJCXJldHVybiAtRUZCSUc7CiAKKwlzaXplID0gbWluX3Qoc3NpemVfdCwgc2l6ZW9mKGxzY3NhLT5mcGNyKSAtICpwb3MsIHNpemUpOworCiAJcmV0ID0gc3B1X2FjcXVpcmVfc2F2ZWQoY3R4KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMjY2NSw3ICsyNjY3LDcgQEAKIAkucmVsZWFzZSAgICAgICAgPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKLXN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9jb250ZW50c1tdID0geworY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2NvbnRlbnRzW10gPSB7CiAJeyAiY2FwYWJpbGl0aWVzIiwgJnNwdWZzX2NhcHNfZm9wcywgMDQ0NCwgfSwKIAl7ICJtZW0iLCAgJnNwdWZzX21lbV9mb3BzLCAgMDY2NiwgTFNfU0laRSwgfSwKIAl7ICJyZWdzIiwgJnNwdWZzX3JlZ3NfZm9wcywgIDA2NjYsIHNpemVvZihzdHJ1Y3Qgc3B1X3JlZzEyOFsxMjhdKSwgfSwKQEAgLTI3MDYsNyArMjcwOCw3IEBACiAJe30sCiB9OwogCi1zdHJ1Y3Qgc3B1ZnNfdHJlZV9kZXNjciBzcHVmc19kaXJfbm9zY2hlZF9jb250ZW50c1tdID0geworY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX25vc2NoZWRfY29udGVudHNbXSA9IHsKIAl7ICJjYXBhYmlsaXRpZXMiLCAmc3B1ZnNfY2Fwc19mb3BzLCAwNDQ0LCB9LAogCXsgIm1lbSIsICAmc3B1ZnNfbWVtX2ZvcHMsICAwNjY2LCBMU19TSVpFLCB9LAogCXsgIm1ib3giLCAmc3B1ZnNfbWJveF9mb3BzLCAwNDQ0LCB9LApAQCAtMjczMSwxMiArMjczMywxMiBAQAogCXt9LAogfTsKIAotc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2RlYnVnX2NvbnRlbnRzW10gPSB7Citjb25zdCBzdHJ1Y3Qgc3B1ZnNfdHJlZV9kZXNjciBzcHVmc19kaXJfZGVidWdfY29udGVudHNbXSA9IHsKIAl7ICIuY3R4IiwgJnNwdWZzX2N0eF9mb3BzLCAwNDQ0LCB9LAogCXt9LAogfTsKIAotc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciBzcHVmc19jb3JlZHVtcF9yZWFkW10gPSB7Citjb25zdCBzdHJ1Y3Qgc3B1ZnNfY29yZWR1bXBfcmVhZGVyIHNwdWZzX2NvcmVkdW1wX3JlYWRbXSA9IHsKIAl7ICJyZWdzIiwgX19zcHVmc19yZWdzX3JlYWQsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3JlZzEyOFsxMjhdKX0sCiAJeyAiZnBjciIsIF9fc3B1ZnNfZnBjcl9yZWFkLCBOVUxMLCBzaXplb2Yoc3RydWN0IHNwdV9yZWcxMjgpIH0sCiAJeyAibHNsciIsIE5VTEwsIHNwdWZzX2xzbHJfZ2V0LCAxOSB9LApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYwppbmRleCBlMzA5ZWY3Li42NGYwNjg1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYwpAQCAtMTg2LDggKzE4Niw5IEBACiAJcmV0dXJuIHNpbXBsZV9ybWRpcihwYXJlbnQsIGRpcik7CiB9CiAKLXN0YXRpYyBpbnQgc3B1ZnNfZmlsbF9kaXIoc3RydWN0IGRlbnRyeSAqZGlyLCBzdHJ1Y3Qgc3B1ZnNfdHJlZV9kZXNjciAqZmlsZXMsCi0JCQkgIGludCBtb2RlLCBzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCkKK3N0YXRpYyBpbnQgc3B1ZnNfZmlsbF9kaXIoc3RydWN0IGRlbnRyeSAqZGlyLAorCQljb25zdCBzdHJ1Y3Qgc3B1ZnNfdHJlZV9kZXNjciAqZmlsZXMsIGludCBtb2RlLAorCQlzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCkKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksICp0bXA7CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9ydW4uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9ydW4uYwppbmRleCBjNThiZDM2Li40ZGRmNzY5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvcnVuLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3J1bi5jCkBAIC0xMTcsNiArMTE3LDkgQEAKIAkJY29uZF9yZXNjaGVkKCk7CiAJfQogCisJLyogY2xlYXIgcHVyZ2Ugc3RhdHVzICovCisJb3V0X2JlNjQobWZjX2NudGwsIDApOworCiAJLyogcHV0IHRoZSBTUEUgaW4ga2VybmVsIG1vZGUgdG8gYWxsb3cgYWNjZXNzIHRvIHRoZSBsb2FkZXIgKi8KIAlzcjEgPSBzcHVfbWZjX3NyMV9nZXQoY3R4LT5zcHUpOwogCXNyMSAmPSB+TUZDX1NUQVRFMV9QUk9CTEVNX1NUQVRFX01BU0s7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1ZnMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oCmluZGV4IDNiZjkwOGUuLmFlMzE1NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oCkBAIC0yNDEsOSArMjQxLDkgQEAKIAlzaXplX3Qgc2l6ZTsKIH07CiAKLWV4dGVybiBzdHJ1Y3Qgc3B1ZnNfdHJlZV9kZXNjciBzcHVmc19kaXJfY29udGVudHNbXTsKLWV4dGVybiBzdHJ1Y3Qgc3B1ZnNfdHJlZV9kZXNjciBzcHVmc19kaXJfbm9zY2hlZF9jb250ZW50c1tdOwotZXh0ZXJuIHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9kZWJ1Z19jb250ZW50c1tdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9jb250ZW50c1tdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9ub3NjaGVkX2NvbnRlbnRzW107CitleHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2RlYnVnX2NvbnRlbnRzW107CiAKIC8qIHN5c3RlbSBjYWxsIGltcGxlbWVudGF0aW9uICovCiBleHRlcm4gc3RydWN0IHNwdWZzX2NhbGxzIHNwdWZzX2NhbGxzOwpAQCAtMzU4LDcgKzM1OCw3IEBACiAJdTY0ICgqZ2V0KShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCk7CiAJc2l6ZV90IHNpemU7CiB9OwotZXh0ZXJuIHN0cnVjdCBzcHVmc19jb3JlZHVtcF9yZWFkZXIgc3B1ZnNfY29yZWR1bXBfcmVhZFtdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBzcHVmc19jb3JlZHVtcF9yZWFkZXIgc3B1ZnNfY29yZWR1bXBfcmVhZFtdOwogZXh0ZXJuIGludCBzcHVmc19jb3JlZHVtcF9udW1fbm90ZXM7CiAKIGV4dGVybiBpbnQgc3B1X2luaXRfY3NhKHN0cnVjdCBzcHVfc3RhdGUgKmNzYSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9LY29uZmlnCmluZGV4IDIyYjRiNGUuLjM3ZDQzOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFBQQ19DSFJQCiAJYm9vbCAiQ29tbW9uIEhhcmR3YXJlIFJlZmVyZW5jZSBQbGF0Zm9ybSAoQ0hSUCkgYmFzZWQgbWFjaGluZXMiCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEMzMgorCWRlcGVuZHMgb24gNnh4CiAJc2VsZWN0IE1QSUMKIAlzZWxlY3QgUFBDX0k4MjU5CiAJc2VsZWN0IFBQQ19JTkRJUkVDVF9QQ0kKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9wZWdhc29zX2V0aC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BlZ2Fzb3NfZXRoLmMKaW5kZXggMTMwZmY3Mi4uMDM5ZmM4ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BlZ2Fzb3NfZXRoLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BlZ2Fzb3NfZXRoLmMKQEAgLTIxLDggKzIxLDggQEAKICNkZWZpbmUgUEVHQVNPUzJfU1JBTV9CQVNFIAkJCSgweGYyMDAwMDAwKQogI2RlZmluZSBQRUdBU09TMl9TUkFNX1NJWkUJCQkoMjU2KjEwMjQpCiAKLSNkZWZpbmUgUEVHQVNPUzJfU1JBTV9CQVNFX0VUSDAJCQkoUEVHQVNPUzJfU1JBTV9CQVNFKQotI2RlZmluZSBQRUdBU09TMl9TUkFNX0JBU0VfRVRIMQkJCShQRUdBU09TMl9TUkFNX0JBU0VfRVRIMCArIChQRUdBU09TMl9TUkFNX1NJWkUgLyAyKSApCisjZGVmaW5lIFBFR0FTT1MyX1NSQU1fQkFTRV9FVEhfUE9SVDAJCQkoUEVHQVNPUzJfU1JBTV9CQVNFKQorI2RlZmluZSBQRUdBU09TMl9TUkFNX0JBU0VfRVRIX1BPUlQxCQkJKFBFR0FTT1MyX1NSQU1fQkFTRV9FVEhfUE9SVDAgKyAoUEVHQVNPUzJfU1JBTV9TSVpFIC8gMikgKQogCiAKICNkZWZpbmUgUEVHQVNPUzJfU1JBTV9SWFJJTkdfU0laRQkJKFBFR0FTT1MyX1NSQU1fU0laRS80KQpAQCAtNDcsNzUgKzQ3LDQyIEBACiAJLnJlc291cmNlCT0gbXY2NDN4eF9ldGhfc2hhcmVkX3Jlc291cmNlcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXY2NDN4eF9ldGgwX3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdjY0M3h4X2V0aF9wb3J0MV9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7Ci0JCS5uYW1lCT0gImV0aDAgaXJxIiwKKwkJLm5hbWUJPSAiZXRoIHBvcnQxIGlycSIsCiAJCS5zdGFydAk9IDksCiAJCS5lbmQJPSA5LAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKIAotCi1zdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgZXRoMF9wZCA9IHsKLQkuc2hhcmVkCQk9ICZtdjY0M3h4X2V0aF9zaGFyZWRfZGV2aWNlLAotCS5wb3J0X251bWJlcgk9IDAsCi0KLQkudHhfc3JhbV9hZGRyID0gUEVHQVNPUzJfU1JBTV9CQVNFX0VUSDAsCi0JLnR4X3NyYW1fc2l6ZSA9IFBFR0FTT1MyX1NSQU1fVFhSSU5HX1NJWkUsCi0JLnR4X3F1ZXVlX3NpemUgPSBQRUdBU09TMl9TUkFNX1RYUklOR19TSVpFLzE2LAotCi0JLnJ4X3NyYW1fYWRkciA9IFBFR0FTT1MyX1NSQU1fQkFTRV9FVEgwICsgUEVHQVNPUzJfU1JBTV9UWFJJTkdfU0laRSwKLQkucnhfc3JhbV9zaXplID0gUEVHQVNPUzJfU1JBTV9SWFJJTkdfU0laRSwKLQkucnhfcXVldWVfc2l6ZSA9IFBFR0FTT1MyX1NSQU1fUlhSSU5HX1NJWkUvMTYsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBldGgwX2RldmljZSA9IHsKLQkubmFtZQkJPSBNVjY0M1hYX0VUSF9OQU1FLAotCS5pZAkJPSAwLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtdjY0M3h4X2V0aDBfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBtdjY0M3h4X2V0aDBfcmVzb3VyY2VzLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmV0aDBfcGQsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXY2NDN4eF9ldGgxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLm5hbWUJPSAiZXRoMSBpcnEiLAotCQkuc3RhcnQJPSA5LAotCQkuZW5kCT0gOSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBldGgxX3BkID0geworc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIGV0aF9wb3J0MV9wZCA9IHsKIAkuc2hhcmVkCQk9ICZtdjY0M3h4X2V0aF9zaGFyZWRfZGV2aWNlLAogCS5wb3J0X251bWJlcgk9IDEsCisJLnBoeV9hZGRyCT0gTVY2NDNYWF9FVEhfUEhZX0FERFIoNyksCiAKLQkudHhfc3JhbV9hZGRyID0gUEVHQVNPUzJfU1JBTV9CQVNFX0VUSDEsCisJLnR4X3NyYW1fYWRkciA9IFBFR0FTT1MyX1NSQU1fQkFTRV9FVEhfUE9SVDEsCiAJLnR4X3NyYW1fc2l6ZSA9IFBFR0FTT1MyX1NSQU1fVFhSSU5HX1NJWkUsCiAJLnR4X3F1ZXVlX3NpemUgPSBQRUdBU09TMl9TUkFNX1RYUklOR19TSVpFLzE2LAogCi0JLnJ4X3NyYW1fYWRkciA9IFBFR0FTT1MyX1NSQU1fQkFTRV9FVEgxICsgUEVHQVNPUzJfU1JBTV9UWFJJTkdfU0laRSwKKwkucnhfc3JhbV9hZGRyID0gUEVHQVNPUzJfU1JBTV9CQVNFX0VUSF9QT1JUMSArIFBFR0FTT1MyX1NSQU1fVFhSSU5HX1NJWkUsCiAJLnJ4X3NyYW1fc2l6ZSA9IFBFR0FTT1MyX1NSQU1fUlhSSU5HX1NJWkUsCiAJLnJ4X3F1ZXVlX3NpemUgPSBQRUdBU09TMl9TUkFNX1JYUklOR19TSVpFLzE2LAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXRoMV9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBldGhfcG9ydDFfZGV2aWNlID0gewogCS5uYW1lCQk9IE1WNjQzWFhfRVRIX05BTUUsCiAJLmlkCQk9IDEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG12NjQzeHhfZXRoMV9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IG12NjQzeHhfZXRoMV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG12NjQzeHhfZXRoX3BvcnQxX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbXY2NDN4eF9ldGhfcG9ydDFfcmVzb3VyY2VzLAogCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmV0aDFfcGQsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmV0aF9wb3J0MV9wZCwKIAl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm12NjQzeHhfZXRoX3BkX2RldnNbXSBfX2luaXRkYXRhID0gewogCSZtdjY0M3h4X2V0aF9zaGFyZWRfZGV2aWNlLAotCSZldGgwX2RldmljZSwKLQkmZXRoMV9kZXZpY2UsCisJJmV0aF9wb3J0MV9kZXZpY2UsCiB9OwogCiAvKioqKioqKioqKiovCkBAIC0xOTEsMTUgKzE1OCwxMCBAQAogCiAJCWlmICggRW5hYmxlX1NSQU0oKSA8IDApCiAJCXsKLQkJCWV0aDBfcGQudHhfc3JhbV9hZGRyID0gMDsKLQkJCWV0aDBfcGQudHhfc3JhbV9zaXplID0gMDsKLQkJCWV0aDBfcGQucnhfc3JhbV9hZGRyID0gMDsKLQkJCWV0aDBfcGQucnhfc3JhbV9zaXplID0gMDsKLQotCQkJZXRoMV9wZC50eF9zcmFtX2FkZHIgPSAwOwotCQkJZXRoMV9wZC50eF9zcmFtX3NpemUgPSAwOwotCQkJZXRoMV9wZC5yeF9zcmFtX2FkZHIgPSAwOwotCQkJZXRoMV9wZC5yeF9zcmFtX3NpemUgPSAwOworCQkJZXRoX3BvcnQxX3BkLnR4X3NyYW1fYWRkciA9IDA7CisJCQlldGhfcG9ydDFfcGQudHhfc3JhbV9zaXplID0gMDsKKwkJCWV0aF9wb3J0MV9wZC5yeF9zcmFtX2FkZHIgPSAwOworCQkJZXRoX3BvcnQxX3BkLnJ4X3NyYW1fc2l6ZSA9IDA7CiAKICNpZmRlZiBCRV9WRVJCT1NFCiAJCQlwcmludGsoIlBlZ2Fzb3MgSUkvTWFydmVsbCBNVjY0MzYxOiBDYW4ndCBlbmFibGUgdGhlICIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMKaW5kZXggMjcyZDc5YS4uY2Q0YWQ5YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMKQEAgLTQ3Miw3ICs0NzIsNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX1ZUKSAmJiBkZWZpbmVkKENPTkZJR19JTlBVVF9BREJISUQpICYmIGRlZmluZWQoQ09ORklHX1hNT04pCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB4bW9uX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9IHhtb25faXJxLAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJYTU9OIGJyZWFrIiwKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvS2NvbmZpZwppbmRleCA0ZjlmODE4Li4yOTFhYzlkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIEVNQkVEREVENnh4CiAJYm9vbCAiRW1iZWRkZWQgNnh4Lzd4eC83eHh4LWJhc2VkIGJvYXJkcyIKLQlkZXBlbmRzIG9uIFBQQzMyICYmIEJST0tFTl9PTl9TTVAgJiYgUFBDX01VTFRJUExBVEZPUk0KKwlkZXBlbmRzIG9uIDZ4eCAmJiBCUk9LRU5fT05fU01QCiAKIGNvbmZpZyBMSU5LU1RBVElPTgogCWJvb2wgIkxpbmtzdGF0aW9uIC8gS3Vyb2JveChIRykgZnJvbSBCdWZmYWxvIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvS2NvbmZpZwppbmRleCA3ZGRkMGEyLi42NDdlODc3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBQUENfSVNFUklFUwogCWJvb2wgIklCTSBMZWdhY3kgaVNlcmllcyIKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJc2VsZWN0IFBQQ19JTkRJUkVDVF9JTwogCXNlbGVjdCBQUENfUENJX0NIT0lDRSBpZiBFTUJFRERFRAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMKaW5kZXggNzAxZDkyOS4uOTRmNDQ0NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWZvcl9lYWNoX2lycSAoaXJxKSB7Ci0JCWlycV9kZXNjX3QgKmRlc2MgPSBnZXRfaXJxX2Rlc2MoaXJxKTsKKwkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gZ2V0X2lycV9kZXNjKGlycSk7CiAKIAkJaWYgKGRlc2MgJiYgZGVzYy0+Y2hpcCAmJiBkZXNjLT5jaGlwLT5zdGFydHVwKSB7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYwppbmRleCAyNDUxOWI5Li5hNmNkMzM5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYwpAQCAtNjE3LDcgKzYxNyw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKmlzZXJpZXNfaW9yZW1hcChwaHlzX2FkZHJfdCBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCAqY2FsbGVyKQogewogCXJldHVybiAodm9pZCBfX2lvbWVtICopYWRkcmVzczsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvS2NvbmZpZwppbmRleCBhNjQ2N2E1Li4xZWE2MjFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9LY29uZmlnCkBAIC0xLDUgKzEsNSBAQAogY29uZmlnIFBQQ19NQVBMRQotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlib29sICJNYXBsZSA5NzBGWCBFdmFsdWF0aW9uIEJvYXJkIgogCXNlbGVjdCBQQ0kKIAlzZWxlY3QgTVBJQwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL0tjb25maWcKaW5kZXggMzQ4ZTA2MS4uYTJhZWIzMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9LY29uZmlnCkBAIC0xLDUgKzEsNSBAQAogY29uZmlnIFBQQ19QQVNFTUkKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJYm9vbCAiUEEgU2VtaSBTb0MtYmFzZWQgcGxhdGZvcm1zIgogCWRlZmF1bHQgbgogCXNlbGVjdCBNUElDCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL0tjb25maWcKaW5kZXggMDU1OTkwYy4uMWUxYTA4NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBQUENfUE1BQwogCWJvb2wgIkFwcGxlIFBvd2VyTWFjIGJhc2VkIG1hY2hpbmVzIgotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0KKwlkZXBlbmRzIG9uIFBQQ19CT09LM1MKIAlzZWxlY3QgTVBJQwogCXNlbGVjdCBQQ0kKIAlzZWxlY3QgUFBDX0lORElSRUNUX1BDSSBpZiBQUEMzMgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzY0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYwppbmRleCBiZWIzODMzLi4yMmVjZmJlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYwpAQCAtODYsNiArODYsNyBAQAogCiBzdGF0aWMgREVGSU5FX01VVEVYKGc1X3N3aXRjaF9tdXRleCk7CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRyYW5zaXRpb25fbGF0ZW5jeTsKIAogI2lmZGVmIENPTkZJR19QTUFDX1NNVQogCkBAIC0zNTcsNyArMzU4LDcgQEAKIAogc3RhdGljIGludCBnNV9jcHVmcmVxX2NwdV9pbml0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewotCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSBDUFVGUkVRX0VURVJOQUw7CisJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IHRyYW5zaXRpb25fbGF0ZW5jeTsKIAlwb2xpY3ktPmN1ciA9IGc1X2NwdV9mcmVxc1tnNV9xdWVyeV9mcmVxKCldLmZyZXF1ZW5jeTsKIAkvKiBzZWNvbmRhcnkgQ1BVcyBhcmUgdGllZCB0byB0aGUgcHJpbWFyeSBvbmUgYnkgdGhlCiAJICogY3B1ZnJlcSBjb3JlIGlmIGluIHRoZSBzZWNvbmRhcnkgcG9saWN5IHdlIHRlbGwgaXQgdGhhdApAQCAtNTAwLDYgKzUwMSw3IEBACiAJZzVfY3B1X2ZyZXFzWzFdLmZyZXF1ZW5jeSA9IG1heF9mcmVxLzI7CiAKIAkvKiBTZXQgY2FsbGJhY2tzICovCisJdHJhbnNpdGlvbl9sYXRlbmN5ID0gMTIwMDA7CiAJZzVfc3dpdGNoX2ZyZXEgPSBnNV9zY29tX3N3aXRjaF9mcmVxOwogCWc1X3F1ZXJ5X2ZyZXEgPSBnNV9zY29tX3F1ZXJ5X2ZyZXE7CiAJZnJlcV9tZXRob2QgPSAiU0NPTSI7CkBAIC02NzUsNiArNjc3LDcgQEAKIAlnNV9jcHVfZnJlcXNbMV0uZnJlcXVlbmN5ID0gbWluX2ZyZXE7CiAKIAkvKiBTZXQgY2FsbGJhY2tzICovCisJdHJhbnNpdGlvbl9sYXRlbmN5ID0gQ1BVRlJFUV9FVEVSTkFMOwogCWc1X3N3aXRjaF92b2x0ID0gZzVfcGZ1bmNfc3dpdGNoX3ZvbHQ7CiAJZzVfc3dpdGNoX2ZyZXEgPSBnNV9wZnVuY19zd2l0Y2hfZnJlcTsKIAlnNV9xdWVyeV9mcmVxID0gZzVfcGZ1bmNfcXVlcnlfZnJlcTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCmluZGV4IDZkMTQ5YWUuLjcwMzlkOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYwpAQCAtMjY2LDcgKzI2Niw2IEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB4bW9uX2FjdGlvbiA9IHsKIAkuaGFuZGxlcgk9IHhtb25faXJxLAogCS5mbGFncwkJPSAwLAotCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUJCT0gIk5NSSAtIFhNT04iCiB9OwogI2VuZGlmCkBAIC0yNzQsNyArMjczLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGdhdHdpY2tfY2FzY2FkZV9hY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSBnYXR3aWNrX2FjdGlvbiwKIAkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCwKLQkubWFzawkJPSBDUFVfTUFTS19OT05FLAogCS5uYW1lCQk9ICJjYXNjYWRlIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5oCmluZGV4IGM0NGM4OWYuLmQ2MjJhODMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuaApAQCAtMyw3ICszLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCi1leHRlcm4gc3RydWN0IGh3X2ludGVycnVwdF90eXBlIHBtYWNfcGljOworZXh0ZXJuIHN0cnVjdCBpcnFfY2hpcCBwbWFjX3BpYzsKIAogZXh0ZXJuIHZvaWQgcG1hY19waWNfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgcG1hY19nZXRfaXJxKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jCmluZGV4IDliNzhmNTMuLjQ1OTM2YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMKQEAgLTc0Niw0ICs3NDYsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKSAmJiBkZWZpbmVkKENPTkZJR19QUEM2NCkKIAkuY3B1X2RpZQkJPSBwbWFjX2NwdV9kaWUsCiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHX0NQVSkgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpCisJLmNwdV9kaWUJCT0gZ2VuZXJpY19tYWNoX2NwdV9kaWUsCisjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYwppbmRleCBiZDg4MTdiLi5jZjFkYmU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKQEAgLTM4NSw3ICszODUsNiBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gcHN1cmdlX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9IHBzdXJnZV9wcmltYXJ5X2ludHIsCiAJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCwKLQkubWFzayA9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUgPSAicHJpbWFyeSBJUEkiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wcmVwL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3ByZXAvS2NvbmZpZwppbmRleCAyOWQ0MTEyLi5iZjgzMzBlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3ByZXAvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3ByZXAvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBQUENfUFJFUAogCWJvb2wgIlBvd2VyUEMgUmVmZXJlbmNlIFBsYXRmb3JtIChQUmVQKSBiYXNlZCBtYWNoaW5lcyIKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzMyICYmIEJST0tFTgorCWRlcGVuZHMgb24gNnh4ICYmIEJST0tFTgogCXNlbGVjdCBNUElDCiAJc2VsZWN0IFBQQ19JODI1OQogCXNlbGVjdCBQUENfSU5ESVJFQ1RfUENJCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvS2NvbmZpZwppbmRleCA3NDBlZjU2Li5kZmUzMTZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgUFBDX1BTMwogCWJvb2wgIlNvbnkgUFMzIgotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlzZWxlY3QgUFBDX0NFTEwKIAlzZWxlY3QgVVNCX0FSQ0hfSEFTX09IQ0kKIAlzZWxlY3QgVVNCX09IQ0lfTElUVExFX0VORElBTgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvbW0uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL21tLmMKaW5kZXggZDI4MWNjMC4uOWEyYjZkOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvbW0uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9tbS5jCkBAIC0zMTEsNyArMzExLDcgQEAKIAlyZXN1bHQgPSBhZGRfbWVtb3J5KDAsIHN0YXJ0X2FkZHIsIG1hcC5yMS5zaXplKTsKIAogCWlmIChyZXN1bHQpIHsKLQkJREJHKCIlczolZDogYWRkX21lbW9yeSBmYWlsZWQ6ICglZClcbiIsCisJCXByX2VycigiJXM6JWQ6IGFkZF9tZW1vcnkgZmFpbGVkOiAoJWQpXG4iLAogCQkJX19mdW5jX18sIF9fTElORV9fLCByZXN1bHQpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KQEAgLTMyMiw3ICszMjIsNyBAQAogCXJlc3VsdCA9IG9ubGluZV9wYWdlcyhzdGFydF9wZm4sIG5yX3BhZ2VzKTsKIAogCWlmIChyZXN1bHQpCi0JCURCRygiJXM6JWQ6IG9ubGluZV9wYWdlcyBmYWlsZWQ6ICglZClcbiIsCisJCXByX2VycigiJXM6JWQ6IG9ubGluZV9wYWdlcyBmYWlsZWQ6ICglZClcbiIsCiAJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJlc3VsdCk7CiAKIAlyZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZwppbmRleCBkZGMyYTMwLi5mMGU2ZjI4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKIGNvbmZpZyBQUENfUFNFUklFUwotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlib29sICJJQk0gcFNlcmllcyAmIG5ldyAoUE9XRVI1LWJhc2VkKSBpU2VyaWVzIgogCXNlbGVjdCBNUElDCiAJc2VsZWN0IFBQQ19JODI1OQpAQCAtMjUsNiArMjUsMTEgQEAKIAlkZXBlbmRzIG9uIFBQQ19QU0VSSUVTICYmIFBDSQogCWRlZmF1bHQgeSBpZiAhRU1CRURERUQKIAorY29uZmlnIFBTRVJJRVNfTVNJCisgICAgICAgYm9vbAorICAgICAgIGRlcGVuZHMgb24gUENJX01TSSAmJiBFRUgKKyAgICAgICBkZWZhdWx0IHkKKwogY29uZmlnIFNDQU5MT0cKIAl0cmlzdGF0ZSAiU2NhbmxvZyBkdW1wIGludGVyZmFjZSIKIAlkZXBlbmRzIG9uIFJUQVNfUFJPQyAmJiBQUENfUFNFUklFUwpAQCAtNjMsMyArNjgsMTMgQEAKIAkgIG1ha2VzIHNlbnNlIGZvciBhIHN5c3RlbSBydW5uaW5nIGluIGFuIExQQVIgd2hlcmUgdGhlIHVudXNlZCBwYWdlcwogCSAgd2lsbCBiZSByZXVzZWQgZm9yIG90aGVyIExQQVJzLiBUaGUgaW50ZXJmYWNlIGFsbG93cyBmaXJtd2FyZSB0bwogCSAgYmFsYW5jZSBtZW1vcnkgYWNyb3NzIG1hbnkgTFBBUnMuCisKK2NvbmZpZyBEVEwKKwlib29sICJEaXNwYXRjaCBUcmFjZSBMb2ciCisJZGVwZW5kcyBvbiBQUENfU1BMUEFSICYmIERFQlVHX0ZTCisJaGVscAorCSAgU1BMUEFSIG1hY2hpbmVzIGNhbiBsb2cgaHlwZXJ2aXNvciBwcmVlbXB0ICYgZGlzcGF0Y2ggZXZlbnRzIHRvIGEKKwkgIGtlcm5lbCBidWZmZXIuIFNheWluZyBZIGhlcmUgd2lsbCBlbmFibGUgbG9nZ2luZyB0aGVzZSBldmVudHMsCisJICB3aGljaCBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIGEgZGVidWdmcyBmaWxlLgorCisJICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZQppbmRleCBkZmU1NzRhLi43OTBjMGI4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlCkBAIC0xNSw3ICsxNSw3IEBACiBvYmotJChDT05GSUdfRUVIKQkrPSBlZWgubyBlZWhfY2FjaGUubyBlZWhfZHJpdmVyLm8gZWVoX2V2ZW50Lm8gZWVoX3N5c2ZzLm8KIG9iai0kKENPTkZJR19LRVhFQykJKz0ga2V4ZWMubwogb2JqLSQoQ09ORklHX1BDSSkJKz0gcGNpLm8gcGNpX2RscGFyLm8KLW9iai0kKENPTkZJR19QQ0lfTVNJKQkrPSBtc2kubworb2JqLSQoQ09ORklHX1BTRVJJRVNfTVNJKQkrPSBtc2kubwogCiBvYmotJChDT05GSUdfSE9UUExVR19DUFUpCSs9IGhvdHBsdWctY3B1Lm8KIG9iai0kKENPTkZJR19NRU1PUllfSE9UUExVRykJKz0gaG90cGx1Zy1tZW1vcnkubwpAQCAtMjUsMyArMjUsNCBAQAogb2JqLSQoQ09ORklHX0hDQUxMX1NUQVRTKQkrPSBodkNhbGxfaW5zdC5vCiBvYmotJChDT05GSUdfUEhZUF9EVU1QKQkrPSBwaHlwX2R1bXAubwogb2JqLSQoQ09ORklHX0NNTSkJCSs9IGNtbS5vCitvYmotJChDT05GSUdfRFRMKQkJKz0gZHRsLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kdGwuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWZjYWEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2R0bC5jCkBAIC0wLDAgKzEsMjc4IEBACisvKgorICogVmlydHVhbCBQcm9jZXNzb3IgRGlzcGF0Y2ggVHJhY2UgTG9nCisgKgorICogKEMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwOQorICoKKyAqIEF1dGhvcjogSmVyZW15IEtlcnIgPGprQG96bGFicy5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjaW5jbHVkZSAicGxwYXJfd3JhcHBlcnMuaCIKKworLyoKKyAqIExheW91dCBvZiBlbnRyaWVzIGluIHRoZSBoeXBlcnZpc29yJ3MgRFRMIGJ1ZmZlci4gQWx0aG91Z2ggd2UgZG9uJ3QKKyAqIGFjdHVhbGx5IGFjY2VzcyB0aGUgaW50ZXJuYWxzIG9mIGFuIGVudHJ5ICh3ZSBvbmx5IG5lZWQgdG8ga25vdyB0aGUgc2l6ZSksCisgKiB3ZSBtaWdodCBhcyB3ZWxsIGRlZmluZSBpdCBoZXJlIGZvciByZWZlcmVuY2UuCisgKi8KK3N0cnVjdCBkdGxfZW50cnkgeworCXU4CWRpc3BhdGNoX3JlYXNvbjsKKwl1OAlwcmVlbXB0X3JlYXNvbjsKKwl1MTYJcHJvY2Vzc29yX2lkOworCXUzMgllbnF1ZXVlX3RvX2Rpc3BhdGNoX3RpbWU7CisJdTMyCXJlYWR5X3RvX2VucXVldWVfdGltZTsKKwl1MzIJd2FpdGluZ190b19yZWFkeV90aW1lOworCXU2NAl0aW1lYmFzZTsKKwl1NjQJZmF1bHRfYWRkcjsKKwl1NjQJc3JyMDsKKwl1NjQJc3JyMTsKK307CisKK3N0cnVjdCBkdGwgeworCXN0cnVjdCBkdGxfZW50cnkJKmJ1ZjsKKwlzdHJ1Y3QgZGVudHJ5CQkqZmlsZTsKKwlpbnQJCQljcHU7CisJaW50CQkJYnVmX2VudHJpZXM7CisJdTY0CQkJbGFzdF9pZHg7Cit9Oworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBkdGwsIGR0bCk7CisKKy8qCisgKiBEaXNwYXRjaCB0cmFjZSBsb2cgZXZlbnQgbWFzazoKKyAqIDB4NzogMHgxOiB2b2x1bnRhcnkgdmlydHVhbCBwcm9jZXNzb3Igd2FpdHMKKyAqICAgICAgMHgyOiB0aW1lLXNsaWNlIHByZWVtcHRzCisgKiAgICAgIDB4NDogdmlydHVhbCBwYXJ0aXRpb24gbWVtb3J5IHBhZ2UgZmF1bHRzCisgKi8KK3N0YXRpYyB1OCBkdGxfZXZlbnRfbWFzayA9IDB4NzsKKworCisvKgorICogU2l6ZSBvZiBwZXItY3B1IGxvZyBidWZmZXJzLiBEZWZhdWx0IGlzIGp1c3QgdW5kZXIgMTYgcGFnZXMgd29ydGguCisgKi8KK3N0YXRpYyBpbnQgZHRsX2J1Zl9lbnRyaWVzID0gKDE2ICogODUpOworCisKK3N0YXRpYyBpbnQgZHRsX2VuYWJsZShzdHJ1Y3QgZHRsICpkdGwpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCWludCByZXQsIGh3Y3B1OworCisJLyogb25seSBhbGxvdyBvbmUgcmVhZGVyICovCisJaWYgKGR0bC0+YnVmKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogd2UgbmVlZCB0byBzdG9yZSB0aGUgb3JpZ2luYWwgYWxsb2NhdGlvbiBzaXplIGZvciB1c2UgZHVyaW5nIHJlYWQgKi8KKwlkdGwtPmJ1Zl9lbnRyaWVzID0gZHRsX2J1Zl9lbnRyaWVzOworCisJZHRsLT5idWYgPSBrbWFsbG9jX25vZGUoZHRsLT5idWZfZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgZHRsX2VudHJ5KSwKKwkJCUdGUF9LRVJORUwsIGNwdV90b19ub2RlKGR0bC0+Y3B1KSk7CisJaWYgKCFkdGwtPmJ1ZikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogYnVmZmVyIGFsbG9jIGZhaWxlZCBmb3IgY3B1ICVkXG4iLAorCQkJCV9fZnVuY19fLCBkdGwtPmNwdSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIFJlZ2lzdGVyIG91ciBkdGwgYnVmZmVyIHdpdGggdGhlIGh5cGVydmlzb3IuIFRoZSBIViBleHBlY3RzIHRoZQorCSAqIGJ1ZmZlciBzaXplIHRvIGJlIHBhc3NlZCBpbiB0aGUgc2Vjb25kIHdvcmQgb2YgdGhlIGJ1ZmZlciAqLworCSgodTMyICopZHRsLT5idWYpWzFdID0gZHRsLT5idWZfZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgZHRsX2VudHJ5KTsKKworCWh3Y3B1ID0gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChkdGwtPmNwdSk7CisJYWRkciA9IF9fcGEoZHRsLT5idWYpOworCXJldCA9IHJlZ2lzdGVyX2R0bChod2NwdSwgYWRkcik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRFRMIHJlZ2lzdHJhdGlvbiBmb3IgY3B1ICVkIChodyAlZCkgIgorCQkgICAgICAgImZhaWxlZCB3aXRoICVkXG4iLCBfX2Z1bmNfXywgZHRsLT5jcHUsIGh3Y3B1LCByZXQpOworCQlrZnJlZShkdGwtPmJ1Zik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIHNldCBvdXIgaW5pdGlhbCBidWZmZXIgaW5kaWNlcyAqLworCWR0bC0+bGFzdF9pZHggPSBscHBhY2FbZHRsLT5jcHVdLmR0bF9pZHggPSAwOworCisJLyogZW5zdXJlIHRoYXQgb3VyIHVwZGF0ZXMgdG8gdGhlIGxwcGFjYSBmaWVsZHMgaGF2ZSBvY2N1cnJlZCBiZWZvcmUKKwkgKiB3ZSBhY3R1YWxseSBlbmFibGUgdGhlIGxvZ2dpbmcgKi8KKwlzbXBfd21iKCk7CisKKwkvKiBlbmFibGUgZXZlbnQgbG9nZ2luZyAqLworCWxwcGFjYVtkdGwtPmNwdV0uZHRsX2VuYWJsZV9tYXNrID0gZHRsX2V2ZW50X21hc2s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHRsX2Rpc2FibGUoc3RydWN0IGR0bCAqZHRsKQoreworCWludCBod2NwdSA9IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoZHRsLT5jcHUpOworCisJbHBwYWNhW2R0bC0+Y3B1XS5kdGxfZW5hYmxlX21hc2sgPSAweDA7CisKKwl1bnJlZ2lzdGVyX2R0bChod2NwdSwgX19wYShkdGwtPmJ1ZikpOworCisJa2ZyZWUoZHRsLT5idWYpOworCWR0bC0+YnVmID0gTlVMTDsKKwlkdGwtPmJ1Zl9lbnRyaWVzID0gMDsKK30KKworLyogZmlsZSBpbnRlcmZhY2UgKi8KKworc3RhdGljIGludCBkdGxfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBkdGwgKmR0bCA9IGlub2RlLT5pX3ByaXZhdGU7CisJaW50IHJjOworCisJcmMgPSBkdGxfZW5hYmxlKGR0bCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBkdGw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHRsX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgZHRsICpkdGwgPSBpbm9kZS0+aV9wcml2YXRlOworCWR0bF9kaXNhYmxlKGR0bCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGR0bF9maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sCisJCWxvZmZfdCAqcG9zKQoreworCWludCByYywgY3VyX2lkeCwgbGFzdF9pZHgsIG5fcmVhZCwgbl9yZXEsIHJlYWRfc2l6ZTsKKwlzdHJ1Y3QgZHRsICpkdGw7CisKKwlpZiAoKGxlbiAlIHNpemVvZihzdHJ1Y3QgZHRsX2VudHJ5KSkgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkdGwgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwkvKiByZXF1ZXN0ZWQgbnVtYmVyIG9mIGVudHJpZXMgdG8gcmVhZCAqLworCW5fcmVxID0gbGVuIC8gc2l6ZW9mKHN0cnVjdCBkdGxfZW50cnkpOworCisJLyogYWN0dWFsIG51bWJlciBvZiBlbnRyaWVzIHJlYWQgKi8KKwluX3JlYWQgPSAwOworCisJY3VyX2lkeCA9IGxwcGFjYVtkdGwtPmNwdV0uZHRsX2lkeDsKKwlsYXN0X2lkeCA9IGR0bC0+bGFzdF9pZHg7CisKKwlpZiAoY3VyX2lkeCAtIGxhc3RfaWR4ID4gZHRsLT5idWZfZW50cmllcykgeworCQlwcl9kZWJ1ZygiJXM6IGh2IGJ1ZmZlciBvdmVyZmxvdyBmb3IgY3B1ICVkLCBzYW1wbGVzIGxvc3RcbiIsCisJCQkJX19mdW5jX18sIGR0bC0+Y3B1KTsKKwl9CisKKwljdXJfaWR4ICAlPSBkdGwtPmJ1Zl9lbnRyaWVzOworCWxhc3RfaWR4ICU9IGR0bC0+YnVmX2VudHJpZXM7CisKKwkvKiByZWFkIHRoZSB0YWlsIG9mIHRoZSBidWZmZXIgaWYgd2UndmUgd3JhcHBlZCAqLworCWlmIChsYXN0X2lkeCA+IGN1cl9pZHgpIHsKKwkJcmVhZF9zaXplID0gbWluKG5fcmVxLCBkdGwtPmJ1Zl9lbnRyaWVzIC0gbGFzdF9pZHgpOworCisJCXJjID0gY29weV90b191c2VyKGJ1ZiwgJmR0bC0+YnVmW2xhc3RfaWR4XSwKKwkJCQlyZWFkX3NpemUgKiBzaXplb2Yoc3RydWN0IGR0bF9lbnRyeSkpOworCQlpZiAocmMpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlsYXN0X2lkeCA9IDA7CisJCW5fcmVxIC09IHJlYWRfc2l6ZTsKKwkJbl9yZWFkICs9IHJlYWRfc2l6ZTsKKwkJYnVmICs9IHJlYWRfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgZHRsX2VudHJ5KTsKKwl9CisKKwkvKiAuLiBhbmQgbm93IHRoZSBoZWFkICovCisJcmVhZF9zaXplID0gbWluKG5fcmVxLCBjdXJfaWR4IC0gbGFzdF9pZHgpOworCXJjID0gY29weV90b191c2VyKGJ1ZiwgJmR0bC0+YnVmW2xhc3RfaWR4XSwKKwkJCXJlYWRfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgZHRsX2VudHJ5KSk7CisJaWYgKHJjKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCW5fcmVhZCArPSByZWFkX3NpemU7CisJZHRsLT5sYXN0X2lkeCArPSBuX3JlYWQ7CisKKwlyZXR1cm4gbl9yZWFkICogc2l6ZW9mKHN0cnVjdCBkdGxfZW50cnkpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdGxfZm9wcyA9IHsKKwkub3BlbgkJPSBkdGxfZmlsZV9vcGVuLAorCS5yZWxlYXNlCT0gZHRsX2ZpbGVfcmVsZWFzZSwKKwkucmVhZAkJPSBkdGxfZmlsZV9yZWFkLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorfTsKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmR0bF9kaXI7CisKK3N0YXRpYyBpbnQgZHRsX3NldHVwX2ZpbGUoc3RydWN0IGR0bCAqZHRsKQoreworCWNoYXIgbmFtZVsxMF07CisKKwlzcHJpbnRmKG5hbWUsICJjcHUtJWQiLCBkdGwtPmNwdSk7CisKKwlkdGwtPmZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIDA0MDAsIGR0bF9kaXIsIGR0bCwgJmR0bF9mb3BzKTsKKwlpZiAoIWR0bC0+ZmlsZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdGxfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKmV2ZW50X21hc2tfZmlsZSwgKmJ1Zl9lbnRyaWVzX2ZpbGU7CisJaW50IHJjLCBpOworCisJaWYgKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX1NQTFBBUikpCisJCXJldHVybiAtRU5PREVWOworCisJLyogc2V0IHVwIGNvbW1vbiBkZWJ1Z2ZzIHN0cnVjdHVyZSAqLworCisJcmMgPSAtRU5PTUVNOworCWR0bF9kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImR0bCIsIHBvd2VycGNfZGVidWdmc19yb290KTsKKwlpZiAoIWR0bF9kaXIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNhbid0IGNyZWF0ZSBkdGwgcm9vdCBkaXJcbiIsCisJCQkJX19mdW5jX18pOworCQlnb3RvIGVycjsKKwl9CisKKwlldmVudF9tYXNrX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV94OCgiZHRsX2V2ZW50X21hc2siLCAwNjAwLAorCQkJCWR0bF9kaXIsICZkdGxfZXZlbnRfbWFzayk7CisJYnVmX2VudHJpZXNfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX3UzMigiZHRsX2J1Zl9lbnRyaWVzIiwgMDYwMCwKKwkJCQlkdGxfZGlyLCAmZHRsX2J1Zl9lbnRyaWVzKTsKKworCWlmICghZXZlbnRfbWFza19maWxlIHx8ICFidWZfZW50cmllc19maWxlKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjYW4ndCBjcmVhdGUgZHRsIGZpbGVzXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyX3JlbW92ZV9kaXI7CisJfQorCisJLyogc2V0IHVwIHRoZSBwZXItY3B1IGxvZyBzdHJ1Y3R1cmVzICovCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJc3RydWN0IGR0bCAqZHRsID0gJnBlcl9jcHUoZHRsLCBpKTsKKwkJZHRsLT5jcHUgPSBpOworCisJCXJjID0gZHRsX3NldHVwX2ZpbGUoZHRsKTsKKwkJaWYgKHJjKQorCQkJZ290byBlcnJfcmVtb3ZlX2RpcjsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX3JlbW92ZV9kaXI6CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGR0bF9kaXIpOworZXJyOgorCXJldHVybiByYzsKK30KK2FyY2hfaW5pdGNhbGwoZHRsX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKaW5kZXggMGFkNTZmZi4uMzgwNDIwZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCkBAIC03OSw2ICs3OSw0MCBAQAogCXJldHVybiByYzsKIH0KIAorLyoqCisgKiBlZWhfZGlzYWJsZV9pcnEgLSBkaXNhYmxlIGludGVycnVwdCBmb3IgdGhlIHJlY292ZXJpbmcgZGV2aWNlCisgKi8KK3N0YXRpYyB2b2lkIGVlaF9kaXNhYmxlX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKKworCS8qIERvbid0IGRpc2FibGUgTVNJIGFuZCBNU0ktWCBpbnRlcnJ1cHRzLiBUaGV5IGFyZQorCSAqIGVmZmVjdGl2ZWx5IGRpc2FibGVkIGJ5IHRoZSBETUEgU3RvcHBlZCBzdGF0ZQorCSAqIHdoZW4gYW4gRUVIIGVycm9yIG9jY3Vycy4KKwkqLworCWlmIChkZXYtPm1zaV9lbmFibGVkIHx8IGRldi0+bXNpeF9lbmFibGVkKQorCQlyZXR1cm47CisKKwlpZiAoIWlycV9pbl91c2UoZGV2LT5pcnEpKQorCQlyZXR1cm47CisKKwlQQ0lfRE4oZG4pLT5lZWhfbW9kZSB8PSBFRUhfTU9ERV9JUlFfRElTQUJMRUQ7CisJZGlzYWJsZV9pcnFfbm9zeW5jKGRldi0+aXJxKTsKK30KKworLyoqCisgKiBlZWhfZW5hYmxlX2lycSAtIGVuYWJsZSBpbnRlcnJ1cHQgZm9yIHRoZSByZWNvdmVyaW5nIGRldmljZQorICovCitzdGF0aWMgdm9pZCBlZWhfZW5hYmxlX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKKworCWlmICgoUENJX0ROKGRuKS0+ZWVoX21vZGUpICYgRUVIX01PREVfSVJRX0RJU0FCTEVEKSB7CisJCVBDSV9ETihkbiktPmVlaF9tb2RlICY9IH5FRUhfTU9ERV9JUlFfRElTQUJMRUQ7CisJCWVuYWJsZV9pcnEoZGV2LT5pcnEpOworCX0KK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyoqCiAgKiBlZWhfcmVwb3J0X2Vycm9yIC0gcmVwb3J0IHBjaSBlcnJvciB0byBlYWNoIGRldmljZSBkcml2ZXIKQEAgLTk4LDExICsxMzIsOCBAQAogCWlmICghZHJpdmVyKQogCQlyZXR1cm47CiAKLQlpZiAoaXJxX2luX3VzZSAoZGV2LT5pcnEpKSB7Ci0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKLQkJUENJX0ROKGRuKS0+ZWVoX21vZGUgfD0gRUVIX01PREVfSVJRX0RJU0FCTEVEOwotCQlkaXNhYmxlX2lycV9ub3N5bmMoZGV2LT5pcnEpOwotCX0KKwllZWhfZGlzYWJsZV9pcnEoZGV2KTsKKwogCWlmICghZHJpdmVyLT5lcnJfaGFuZGxlciB8fAogCSAgICAhZHJpdmVyLT5lcnJfaGFuZGxlci0+ZXJyb3JfZGV0ZWN0ZWQpCiAJCXJldHVybjsKQEAgLTE0NywxNSArMTc4LDEyIEBACiB7CiAJZW51bSBwY2lfZXJzX3Jlc3VsdCByYywgKnJlcyA9IHVzZXJkYXRhOwogCXN0cnVjdCBwY2lfZHJpdmVyICpkcml2ZXIgPSBkZXYtPmRyaXZlcjsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CiAKIAlpZiAoIWRyaXZlcikKIAkJcmV0dXJuOwogCi0JaWYgKChQQ0lfRE4oZG4pLT5lZWhfbW9kZSkgJiBFRUhfTU9ERV9JUlFfRElTQUJMRUQpIHsKLQkJUENJX0ROKGRuKS0+ZWVoX21vZGUgJj0gfkVFSF9NT0RFX0lSUV9ESVNBQkxFRDsKLQkJZW5hYmxlX2lycShkZXYtPmlycSk7Ci0JfQorCWVlaF9lbmFibGVfaXJxKGRldik7CisKIAlpZiAoIWRyaXZlci0+ZXJyX2hhbmRsZXIgfHwKIAkgICAgIWRyaXZlci0+ZXJyX2hhbmRsZXItPnNsb3RfcmVzZXQpCiAJCXJldHVybjsKQEAgLTE3NCwxNyArMjAyLDE0IEBACiBzdGF0aWMgdm9pZCBlZWhfcmVwb3J0X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICp1c2VyZGF0YSkKIHsKIAlzdHJ1Y3QgcGNpX2RyaXZlciAqZHJpdmVyID0gZGV2LT5kcml2ZXI7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOwogCiAJZGV2LT5lcnJvcl9zdGF0ZSA9IHBjaV9jaGFubmVsX2lvX25vcm1hbDsKIAogCWlmICghZHJpdmVyKQogCQlyZXR1cm47CiAKLQlpZiAoKFBDSV9ETihkbiktPmVlaF9tb2RlKSAmIEVFSF9NT0RFX0lSUV9ESVNBQkxFRCkgewotCQlQQ0lfRE4oZG4pLT5lZWhfbW9kZSAmPSB+RUVIX01PREVfSVJRX0RJU0FCTEVEOwotCQllbmFibGVfaXJxKGRldi0+aXJxKTsKLQl9CisJZWVoX2VuYWJsZV9pcnEoZGV2KTsKKwogCWlmICghZHJpdmVyLT5lcnJfaGFuZGxlciB8fAogCSAgICAhZHJpdmVyLT5lcnJfaGFuZGxlci0+cmVzdW1lKQogCQlyZXR1cm47CkBAIC0yMDgsMTUgKzIzMywxMiBAQAogCWlmICghZHJpdmVyKQogCQlyZXR1cm47CiAKLQlpZiAoaXJxX2luX3VzZSAoZGV2LT5pcnEpKSB7Ci0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKLQkJUENJX0ROKGRuKS0+ZWVoX21vZGUgfD0gRUVIX01PREVfSVJRX0RJU0FCTEVEOwotCQlkaXNhYmxlX2lycV9ub3N5bmMoZGV2LT5pcnEpOwotCX0KLQlpZiAoIWRyaXZlci0+ZXJyX2hhbmRsZXIpCisJZWVoX2Rpc2FibGVfaXJxKGRldik7CisKKwlpZiAoIWRyaXZlci0+ZXJyX2hhbmRsZXIgfHwKKwkgICAgIWRyaXZlci0+ZXJyX2hhbmRsZXItPmVycm9yX2RldGVjdGVkKQogCQlyZXR1cm47Ci0JaWYgKCFkcml2ZXItPmVycl9oYW5kbGVyLT5lcnJvcl9kZXRlY3RlZCkKLQkJcmV0dXJuOworCiAJZHJpdmVyLT5lcnJfaGFuZGxlci0+ZXJyb3JfZGV0ZWN0ZWQoZGV2LCBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMKaW5kZXggZjE1MjIyYi4uYmYyZTFhYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYwpAQCAtNzEsMTEgKzcxLDEzIEBACiAJfSB3aGlsZSAocnRhc19idXN5X2RlbGF5KHJjKSk7CiAKIAkvKgotCSAqIElmIHRoZSBSVEFTIGNhbGwgc3VjY2VlZGVkLCBjaGVjayB0aGUgbnVtYmVyIG9mIGlycXMgaXMgYWN0dWFsbHkKLQkgKiB3aGF0IHdlIGFza2VkIGZvci4gSWYgbm90LCByZXR1cm4gYW4gZXJyb3IuCisJICogSWYgdGhlIFJUQVMgY2FsbCBzdWNjZWVkZWQsIHJldHVybiB0aGUgbnVtYmVyIG9mIGlycXMgYWxsb2NhdGVkLgorCSAqIElmIG5vdCwgbWFrZSBzdXJlIHdlIHJldHVybiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCiAJICovCi0JaWYgKHJjID09IDAgJiYgcnRhc19yZXRbMF0gIT0gbnVtX2lycXMpCi0JCXJjID0gLUVOT1NQQzsKKwlpZiAocmMgPT0gMCkKKwkJcmMgPSBydGFzX3JldFswXTsKKwllbHNlIGlmIChyYyA+IDApCisJCXJjID0gLXJjOwogCiAJcHJfZGVidWcoInJ0YXNfbXNpOiBpYm0sY2hhbmdlX21zaShmdW5jPSVkLG51bT0lZCksIGdvdCAlZCByYyA9ICVkXG4iLAogCQkgZnVuYywgbnVtX2lycXMsIHJ0YXNfcmV0WzBdLCByYyk7CkBAIC05MSw3ICs5Myw3IEBACiAJaWYgKCFwZG4pCiAJCXJldHVybjsKIAotCWlmIChydGFzX2NoYW5nZV9tc2kocGRuLCBSVEFTX0NIQU5HRV9GTiwgMCkpCisJaWYgKHJ0YXNfY2hhbmdlX21zaShwZG4sIFJUQVNfQ0hBTkdFX0ZOLCAwKSAhPSAwKQogCQlwcl9kZWJ1ZygicnRhc19tc2k6IFNldHRpbmcgTVNJcyB0byAwIGZhaWxlZCFcbiIpOwogfQogCkBAIC0xMzIsNyArMTM0LDcgQEAKIAlydGFzX2Rpc2FibGVfbXNpKHBkZXYpOwogfQogCi1zdGF0aWMgaW50IGNoZWNrX3JlcV9tc2koc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudmVjKQorc3RhdGljIGludCBjaGVja19yZXEoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudmVjLCBjaGFyICpwcm9wX25hbWUpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkbjsKIAlzdHJ1Y3QgcGNpX2RuICpwZG47CkBAIC0xNDQsMjYgKzE0NiwyMzUgQEAKIAogCWRuID0gcGRuLT5ub2RlOwogCi0JcmVxX21zaSA9IG9mX2dldF9wcm9wZXJ0eShkbiwgImlibSxyZXEjbXNpIiwgTlVMTCk7CisJcmVxX21zaSA9IG9mX2dldF9wcm9wZXJ0eShkbiwgcHJvcF9uYW1lLCBOVUxMKTsKIAlpZiAoIXJlcV9tc2kpIHsKLQkJcHJfZGVidWcoInJ0YXNfbXNpOiBObyBpYm0scmVxI21zaSBvbiAlc1xuIiwgZG4tPmZ1bGxfbmFtZSk7CisJCXByX2RlYnVnKCJydGFzX21zaTogTm8gJXMgb24gJXNcbiIsIHByb3BfbmFtZSwgZG4tPmZ1bGxfbmFtZSk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAogCWlmICgqcmVxX21zaSA8IG52ZWMpIHsKLQkJcHJfZGVidWcoInJ0YXNfbXNpOiBpYm0scmVxI21zaSByZXF1ZXN0cyA8ICVkIE1TSXNcbiIsIG52ZWMpOwotCQlyZXR1cm4gLUVOT1NQQzsKKwkJcHJfZGVidWcoInJ0YXNfbXNpOiAlcyByZXF1ZXN0cyA8ICVkIE1TSXNcbiIsIHByb3BfbmFtZSwgbnZlYyk7CisKKwkJaWYgKCpyZXFfbXNpID09IDApIC8qIEJlIHBhcmFub2lkICovCisJCQlyZXR1cm4gLUVOT1NQQzsKKworCQlyZXR1cm4gKnJlcV9tc2k7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY2hlY2tfcmVxX21zaShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG52ZWMpCit7CisJcmV0dXJuIGNoZWNrX3JlcShwZGV2LCBudmVjLCAiaWJtLHJlcSNtc2kiKTsKK30KKworc3RhdGljIGludCBjaGVja19yZXFfbXNpeChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG52ZWMpCit7CisJcmV0dXJuIGNoZWNrX3JlcShwZGV2LCBudmVjLCAiaWJtLHJlcSNtc2kteCIpOworfQorCisvKiBRdW90YSBjYWxjdWxhdGlvbiAqLworCitzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpmaW5kX3BlX3RvdGFsX21zaShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgKnRvdGFsKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CisJY29uc3QgdTMyICpwOworCisJZG4gPSBvZl9ub2RlX2dldChwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KSk7CisJd2hpbGUgKGRuKSB7CisJCXAgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJpYm0scGUtdG90YWwtI21zaSIsIE5VTEwpOworCQlpZiAocCkgeworCQkJcHJfZGVidWcoInJ0YXNfbXNpOiBmb3VuZCBwcm9wIG9uIGRuICVzXG4iLAorCQkJCWRuLT5mdWxsX25hbWUpOworCQkJKnRvdGFsID0gKnA7CisJCQlyZXR1cm4gZG47CisJCX0KKworCQlkbiA9IG9mX2dldF9uZXh0X3BhcmVudChkbik7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKmZpbmRfcGVfZG4oc3RydWN0IHBjaV9kZXYgKmRldiwgaW50ICp0b3RhbCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOworCisJLyogRm91bmQgb3VyIFBFIGFuZCBhc3N1bWUgOCBhdCB0aGF0IHBvaW50LiAqLworCisJZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKKwlpZiAoIWRuKQorCQlyZXR1cm4gTlVMTDsKKworCWRuID0gZmluZF9kZXZpY2VfcGUoZG4pOworCWlmICghZG4pCisJCXJldHVybiBOVUxMOworCisJLyogV2UgYWN0dWFsbHkgd2FudCB0aGUgcGFyZW50ICovCisJZG4gPSBvZl9nZXRfcGFyZW50KGRuKTsKKwlpZiAoIWRuKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEhhcmRjb2RlIG9mIDggZm9yIG9sZCBmaXJtd2FyZXMgKi8KKwkqdG90YWwgPSA4OworCXByX2RlYnVnKCJydGFzX21zaTogdXNpbmcgUEUgZG4gJXNcbiIsIGRuLT5mdWxsX25hbWUpOworCisJcmV0dXJuIGRuOworfQorCitzdHJ1Y3QgbXNpX2NvdW50cyB7CisJc3RydWN0IGRldmljZV9ub2RlICpyZXF1ZXN0b3I7CisJaW50IG51bV9kZXZpY2VzOworCWludCByZXF1ZXN0OworCWludCBxdW90YTsKKwlpbnQgc3BhcmU7CisJaW50IG92ZXJfcXVvdGE7Cit9OworCitzdGF0aWMgdm9pZCAqY291bnRfbm9uX2JyaWRnZV9kZXZpY2VzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG1zaV9jb3VudHMgKmNvdW50cyA9IGRhdGE7CisJY29uc3QgdTMyICpwOworCXUzMiBjbGFzczsKKworCXByX2RlYnVnKCJydGFzX21zaTogY291bnRpbmcgJXNcbiIsIGRuLT5mdWxsX25hbWUpOworCisJcCA9IG9mX2dldF9wcm9wZXJ0eShkbiwgImNsYXNzLWNvZGUiLCBOVUxMKTsKKwljbGFzcyA9IHAgPyAqcCA6IDA7CisKKwlpZiAoKGNsYXNzID4+IDgpICE9IFBDSV9DTEFTU19CUklER0VfUENJKQorCQljb3VudHMtPm51bV9kZXZpY2VzKys7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgKmNvdW50X3NwYXJlX21zaXMoc3RydWN0IGRldmljZV9ub2RlICpkbiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXNpX2NvdW50cyAqY291bnRzID0gZGF0YTsKKwljb25zdCB1MzIgKnA7CisJaW50IHJlcTsKKworCWlmIChkbiA9PSBjb3VudHMtPnJlcXVlc3RvcikKKwkJcmVxID0gY291bnRzLT5yZXF1ZXN0OworCWVsc2UgeworCQkvKiBXZSBkb24ndCBrbm93IGlmIGEgZHJpdmVyIHdpbGwgdHJ5IHRvIHVzZSBNU0kgb3IgTVNJLVgsCisJCSAqIHNvIHdlIGp1c3QgaGF2ZSB0byBwdW50IGFuZCB1c2UgdGhlIGxhcmdlciBvZiB0aGUgdHdvLiAqLworCQlyZXEgPSAwOworCQlwID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLHJlcSNtc2kiLCBOVUxMKTsKKwkJaWYgKHApCisJCQlyZXEgPSAqcDsKKworCQlwID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLHJlcSNtc2kteCIsIE5VTEwpOworCQlpZiAocCkKKwkJCXJlcSA9IG1heChyZXEsIChpbnQpKnApOworCX0KKworCWlmIChyZXEgPCBjb3VudHMtPnF1b3RhKQorCQljb3VudHMtPnNwYXJlICs9IGNvdW50cy0+cXVvdGEgLSByZXE7CisJZWxzZSBpZiAocmVxID4gY291bnRzLT5xdW90YSkKKwkJY291bnRzLT5vdmVyX3F1b3RhKys7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBtc2lfcXVvdGFfZm9yX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBlX2RuOworCXN0cnVjdCBtc2lfY291bnRzIGNvdW50czsKKwlpbnQgdG90YWw7CisKKwlwcl9kZWJ1ZygicnRhc19tc2k6IGNhbGMgcXVvdGEgZm9yICVzLCByZXF1ZXN0ICVkXG4iLCBwY2lfbmFtZShkZXYpLAorCQkgIHJlcXVlc3QpOworCisJcGVfZG4gPSBmaW5kX3BlX3RvdGFsX21zaShkZXYsICZ0b3RhbCk7CisJaWYgKCFwZV9kbikKKwkJcGVfZG4gPSBmaW5kX3BlX2RuKGRldiwgJnRvdGFsKTsKKworCWlmICghcGVfZG4pIHsKKwkJcHJfZXJyKCJydGFzX21zaTogY291bGRuJ3QgZmluZCBQRSBmb3IgJXNcbiIsIHBjaV9uYW1lKGRldikpOworCQlnb3RvIG91dDsKKwl9CisKKwlwcl9kZWJ1ZygicnRhc19tc2k6IGZvdW5kIFBFICVzXG4iLCBwZV9kbi0+ZnVsbF9uYW1lKTsKKworCW1lbXNldCgmY291bnRzLCAwLCBzaXplb2Yoc3RydWN0IG1zaV9jb3VudHMpKTsKKworCS8qIFdvcmsgb3V0IGhvdyBtYW55IGRldmljZXMgd2UgaGF2ZSBiZWxvdyB0aGlzIFBFICovCisJdHJhdmVyc2VfcGNpX2RldmljZXMocGVfZG4sIGNvdW50X25vbl9icmlkZ2VfZGV2aWNlcywgJmNvdW50cyk7CisKKwlpZiAoY291bnRzLm51bV9kZXZpY2VzID09IDApIHsKKwkJcHJfZXJyKCJydGFzX21zaTogZm91bmQgMCBkZXZpY2VzIHVuZGVyIFBFIGZvciAlc1xuIiwKKwkJCXBjaV9uYW1lKGRldikpOworCQlnb3RvIG91dDsKKwl9CisKKwljb3VudHMucXVvdGEgPSB0b3RhbCAvIGNvdW50cy5udW1fZGV2aWNlczsKKwlpZiAocmVxdWVzdCA8PSBjb3VudHMucXVvdGEpCisJCWdvdG8gb3V0OworCisJLyogZWxzZSwgd2UgaGF2ZSBzb21lIG1vcmUgY2FsY3VsYXRpbmcgdG8gZG8gKi8KKwljb3VudHMucmVxdWVzdG9yID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CisJY291bnRzLnJlcXVlc3QgPSByZXF1ZXN0OworCXRyYXZlcnNlX3BjaV9kZXZpY2VzKHBlX2RuLCBjb3VudF9zcGFyZV9tc2lzLCAmY291bnRzKTsKKworCS8qIElmIHRoZSBxdW90YSBpc24ndCBhbiBpbnRlZ2VyIG11bHRpcGxlIG9mIHRoZSB0b3RhbCwgd2UgY2FuCisJICogdXNlIHRoZSByZW1haW5kZXIgYXMgc3BhcmUgTVNJcyBmb3IgYW55b25lIHRoYXQgd2FudHMgdGhlbS4gKi8KKwljb3VudHMuc3BhcmUgKz0gdG90YWwgJSBjb3VudHMubnVtX2RldmljZXM7CisKKwkvKiBEaXZpZGUgYW55IHNwYXJlIGJ5IHRoZSBudW1iZXIgb2Ygb3Zlci1xdW90YSByZXF1ZXN0b3JzICovCisJaWYgKGNvdW50cy5vdmVyX3F1b3RhKQorCQljb3VudHMucXVvdGEgKz0gY291bnRzLnNwYXJlIC8gY291bnRzLm92ZXJfcXVvdGE7CisKKwkvKiBBbmQgZmluYWxseSBjbGFtcCB0aGUgcmVxdWVzdCB0byB0aGUgcG9zc2libHkgYWRqdXN0ZWQgcXVvdGEgKi8KKwlyZXF1ZXN0ID0gbWluKGNvdW50cy5xdW90YSwgcmVxdWVzdCk7CisKKwlwcl9kZWJ1ZygicnRhc19tc2k6IHJlcXVlc3QgY2xhbXBlZCB0byBxdW90YSAlZFxuIiwgcmVxdWVzdCk7CitvdXQ6CisJb2Zfbm9kZV9wdXQocGVfZG4pOworCisJcmV0dXJuIHJlcXVlc3Q7Cit9CisKIHN0YXRpYyBpbnQgcnRhc19tc2lfY2hlY2tfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCiB7Ci0JaWYgKHR5cGUgPT0gUENJX0NBUF9JRF9NU0lYKQotCQlwcl9kZWJ1ZygicnRhc19tc2k6IE1TSS1YIHVudGVzdGVkLCB0cnlpbmcgYW55d2F5LlxuIik7CisJaW50IHF1b3RhLCByYzsKIAotCXJldHVybiBjaGVja19yZXFfbXNpKHBkZXYsIG52ZWMpOworCWlmICh0eXBlID09IFBDSV9DQVBfSURfTVNJWCkKKwkJcmMgPSBjaGVja19yZXFfbXNpeChwZGV2LCBudmVjKTsKKwllbHNlCisJCXJjID0gY2hlY2tfcmVxX21zaShwZGV2LCBudmVjKTsKKworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcXVvdGEgPSBtc2lfcXVvdGFfZm9yX2RldmljZShwZGV2LCBudmVjKTsKKworCWlmIChxdW90YSAmJiBxdW90YSA8IG52ZWMpCisJCXJldHVybiBxdW90YTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoZWNrX21zaXhfZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5OworCWludCBleHBlY3RlZDsKKworCS8qIFRoZXJlJ3Mgbm8gd2F5IGZvciB1cyB0byBleHByZXNzIHRvIGZpcm13YXJlIHRoYXQgd2Ugd2FudAorCSAqIGEgZGlzY29udGlndW91cywgb3Igbm9uLXplcm8gYmFzZWQsIHJhbmdlIG9mIE1TSS1YIGVudHJpZXMuCisJICogU28gd2UgbXVzdCByZWplY3Qgc3VjaCByZXF1ZXN0cy4gKi8KKworCWV4cGVjdGVkID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmcGRldi0+bXNpX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGVudHJ5LT5tc2lfYXR0cmliLmVudHJ5X25yICE9IGV4cGVjdGVkKSB7CisJCQlwcl9kZWJ1ZygicnRhc19tc2k6IGJhZCBNU0ktWCBlbnRyaWVzLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlleHBlY3RlZCsrOworCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJ0YXNfc2V0dXBfbXNpX2lycXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudmVjLCBpbnQgdHlwZSkKQEAgLTE3Nyw2ICszODgsOSBAQAogCWlmICghcGRuKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCWlmICh0eXBlID09IFBDSV9DQVBfSURfTVNJWCAmJiBjaGVja19tc2l4X2VudHJpZXMocGRldikpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyoKIAkgKiBUcnkgdGhlIG5ldyBtb3JlIGV4cGxpY2l0IGZpcm13YXJlIGludGVyZmFjZSwgaWYgdGhhdCBmYWlscyBmYWxsCiAJICogYmFjayB0byB0aGUgb2xkIGludGVyZmFjZS4gVGhlIG9sZCBpbnRlcmZhY2UgaXMga25vd24gdG8gbmV2ZXIKQEAgLTE4NSwyMSArMzk5LDIxIEBACiAJaWYgKHR5cGUgPT0gUENJX0NBUF9JRF9NU0kpIHsKIAkJcmMgPSBydGFzX2NoYW5nZV9tc2kocGRuLCBSVEFTX0NIQU5HRV9NU0lfRk4sIG52ZWMpOwogCi0JCWlmIChyYykgeworCQlpZiAocmMgPCAwKSB7CiAJCQlwcl9kZWJ1ZygicnRhc19tc2k6IHRyeWluZyB0aGUgb2xkIGZpcm13YXJlIGNhbGwuXG4iKTsKIAkJCXJjID0gcnRhc19jaGFuZ2VfbXNpKHBkbiwgUlRBU19DSEFOR0VfRk4sIG52ZWMpOwogCQl9CiAJfSBlbHNlCiAJCXJjID0gcnRhc19jaGFuZ2VfbXNpKHBkbiwgUlRBU19DSEFOR0VfTVNJWF9GTiwgbnZlYyk7CiAKLQlpZiAocmMpIHsKKwlpZiAocmMgIT0gbnZlYykgewogCQlwcl9kZWJ1ZygicnRhc19tc2k6IHJ0YXNfY2hhbmdlX21zaSgpIGZhaWxlZFxuIik7CiAJCXJldHVybiByYzsKIAl9CiAKIAlpID0gMDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmcGRldi0+bXNpX2xpc3QsIGxpc3QpIHsKLQkJaHdpcnEgPSBydGFzX3F1ZXJ5X2lycV9udW1iZXIocGRuLCBpKTsKKwkJaHdpcnEgPSBydGFzX3F1ZXJ5X2lycV9udW1iZXIocGRuLCBpKyspOwogCQlpZiAoaHdpcnEgPCAwKSB7CiAJCQlwcl9kZWJ1ZygicnRhc19tc2k6IGVycm9yICglZCkgZ2V0dGluZyBod2lycVxuIiwgcmMpOwogCQkJcmV0dXJuIGh3aXJxOwpAQCAtMjM0LDggKzQ0OCw4IEBACiAJfQogCiAJLyogTm8gTVNJIC0+IE1TSXMgY2FuJ3QgaGF2ZSBiZWVuIGFzc2lnbmVkIGJ5IGZ3LCBsZWF2ZSBMU0kgKi8KLQlpZiAoY2hlY2tfcmVxX21zaShwZGV2LCAxKSkgewotCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJydGFzX21zaTogbm8gcmVxI21zaSwgbm90aGluZyB0byBkby5cbiIpOworCWlmIChjaGVja19yZXFfbXNpKHBkZXYsIDEpICYmIGNoZWNrX3JlcV9tc2l4KHBkZXYsIDEpKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInJ0YXNfbXNpOiBubyByZXEjbXNpL3gsIG5vdGhpbmcgdG8gZG8uXG4iKTsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaV9kbHBhci5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaV9kbHBhci5jCmluZGV4IDVlMWVkM2QuLmFkMTUyYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2lfZGxwYXIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpX2RscGFyLmMKQEAgLTEzNywxMSArMTM3LDkgQEAKIHN0cnVjdCBwY2lfY29udHJvbGxlciAqIF9fZGV2aW5pdCBpbml0X3BoYl9keW5hbWljKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpwaGI7Ci0JaW50IHByaW1hcnk7CiAKIAlwcl9kZWJ1ZygiUENJOiBJbml0aWFsaXppbmcgbmV3IGhvdHBsdWcgUEhCICVzXG4iLCBkbi0+ZnVsbF9uYW1lKTsKIAotCXByaW1hcnkgPSBsaXN0X2VtcHR5KCZob3NlX2xpc3QpOwogCXBoYiA9IHBjaWJpb3NfYWxsb2NfY29udHJvbGxlcihkbik7CiAJaWYgKCFwaGIpCiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BscGFyX3dyYXBwZXJzLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGxwYXJfd3JhcHBlcnMuaAppbmRleCBkOTY3YzE4Li5hMjRhNmIyMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BscGFyX3dyYXBwZXJzLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BscGFyX3dyYXBwZXJzLmgKQEAgLTQzLDYgKzQzLDE2IEBACiAJcmV0dXJuIHZwYV9jYWxsKDB4MywgY3B1LCB2cGEpOwogfQogCitzdGF0aWMgaW5saW5lIGxvbmcgdW5yZWdpc3Rlcl9kdGwodW5zaWduZWQgbG9uZyBjcHUsIHVuc2lnbmVkIGxvbmcgdnBhKQoreworCXJldHVybiB2cGFfY2FsbCgweDYsIGNwdSwgdnBhKTsKK30KKworc3RhdGljIGlubGluZSBsb25nIHJlZ2lzdGVyX2R0bCh1bnNpZ25lZCBsb25nIGNwdSwgdW5zaWduZWQgbG9uZyB2cGEpCit7CisJcmV0dXJuIHZwYV9jYWxsKDB4MiwgY3B1LCB2cGEpOworfQorCiBzdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfcGFnZV9zZXRfbG9hbmVkKHVuc2lnbmVkIGxvbmcgdnBhKQogewogCXVuc2lnbmVkIGxvbmcgY21vX3BhZ2Vfc3ogPSBjbW9fZ2V0X3BhZ2Vfc2l6ZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmVjb25maWcuYwppbmRleCBjNTkxYTI1Li5iNmYxYjEzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmVjb25maWcuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmVjb25maWcuYwpAQCAtNDY4LDkgKzQ2OCwxMyBAQAogCiAJCXJjID0gYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmcFNlcmllc19yZWNvbmZpZ19jaGFpbiwKIAkJCQkJCSAgYWN0aW9uLCB2YWx1ZSk7CisJCWlmIChyYyA9PSBOT1RJRllfQkFEKSB7CisJCQlyYyA9IHByb21fdXBkYXRlX3Byb3BlcnR5KG5wLCBvbGRwcm9wLCBuZXdwcm9wKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CiAJfQogCi0JcmV0dXJuIHJjOworCXJldHVybiAwOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0xLmMKaW5kZXggNDkwNDczYy4uODI0MjRjZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0xLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0xLmMKQEAgLTExOSw3ICsxMTksNiBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBjcG1fZXJyb3JfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyID0gY3BtX2Vycm9yX2ludGVycnVwdCwKLQkubWFzayA9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUgPSAiZXJyb3IiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTIuYwppbmRleCBmMWMzMzk1Li5mZDk2OWYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTIuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTIuYwpAQCAtNTIsNiArNTIsNyBAQAogICogdGhlIGNvbW11bmljYXRpb24gcHJvY2Vzc29yIGRldmljZXMuCiAgKi8KIGNwbTJfbWFwX3QgX19pb21lbSAqY3BtMl9pbW1yOworRVhQT1JUX1NZTUJPTChjcG0yX2ltbXIpOwogCiAjZGVmaW5lIENQTV9NQVBfU0laRQkoMHg0MDAwMCkJLyogMjU2ayAtIHRoZSBQUTMgcmVzZXJ2ZSB0aGlzIGFtb3VudAogCQkJCQkgICBvZiBzcGFjZSBmb3IgQ1BNIGFzIGl0IGlzIGxhcmdlcgpAQCAtMTI5LDcgKzEzMCw4IEBACiAJCWJyZyAtPSA0OwogCX0KIAlicCArPSBicmc7Ci0JdmFsID0gKCgoY2xrIC8gcmF0ZSkgLSAxKSA8PCAxKSB8IENQTV9CUkdfRU4gfCBzcmM7CisJLyogUm91bmQgdGhlIGNsb2NrIGRpdmlkZXIgdG8gdGhlIG5lYXJlc3QgaW50ZWdlci4gKi8KKwl2YWwgPSAoKChjbGsgKiAyIC8gcmF0ZSkgLSAxKSAmIH4xKSB8IENQTV9CUkdfRU4gfCBzcmM7CiAJaWYgKGRpdjE2KQogCQl2YWwgfD0gQ1BNX0JSR19ESVYxNjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG1fY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbV9jb21tb24uYwppbmRleCAwMGQzZDE3Li5lNGI2ZDY2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbV9jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbV9jb21tb24uYwpAQCAtNTYsNyArNTYsNyBAQAogewogCWlmIChjcG1fdWRiZ190eGRlc2MpIHsKICNpZmRlZiBDT05GSUdfQ1BNMgotCQlzZXRiYXQoMSwgMHhmMDAwMDAwMCwgMHhmMDAwMDAwMCwgMTAyNCoxMDI0LCBfUEFHRV9JTyk7CisJCXNldGJhdCgxLCAweGYwMDAwMDAwLCAweGYwMDAwMDAwLCAxMDI0KjEwMjQsIFBBR0VfS0VSTkVMX05DRyk7CiAjZW5kaWYKIAkJdWRiZ19wdXRjID0gdWRiZ19wdXRjX2NwbTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jCmluZGV4IDk4MTdmNjMuLjc4MDIxZDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jCkBAIC0xLDEyICsxLDE2IEBACiAvKgogICogTVBDODN4eC84NXh4Lzg2eHggUENJL1BDSUUgc3VwcG9ydCByb3V0aW5nLgogICoKLSAqIENvcHlyaWdodCAyMDA3LDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYworICogQ29weXJpZ2h0IDIwMDctMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCiAgKgogICogSW5pdGlhbCBhdXRob3I6IFhpYW5naHVhIFhpYW8gPHgueGlhb0BmcmVlc2NhbGUuY29tPgogICogUmVjb2RlOiBaSEFORyBXRUkgPHdlaS56aGFuZ0BmcmVlc2NhbGUuY29tPgogICogUmV3cml0ZSB0aGUgcm91dGluZyBmb3IgRnJlc2NhbGUgUENJIGFuZCBQQ0kgRXhwcmVzcwogICogCVJveSBaYW5nIDx0aWUtZmVpLnphbmdAZnJlZXNjYWxlLmNvbT4KKyAqIE1QQzgzeHggUENJLUV4cHJlc3Mgc3VwcG9ydDoKKyAqIAlUb255IExpIDx0b255LmxpQGZyZWVzY2FsZS5jb20+CisgKiAJQW50b24gVm9yb250c292IDxhdm9yb250c292QHJ1Lm12aXN0YS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTI3LDYgKzMxLDI5IEBACiAjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KICNpbmNsdWRlIDxzeXNkZXYvZnNsX3BjaS5oPgogCitzdGF0aWMgaW50IGZzbF9wY2llX2J1c19maXh1cDsKKworc3RhdGljIHZvaWQgX19pbml0IHF1aXJrX2ZzbF9wY2llX2hlYWRlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCS8qIGlmIHdlIGFyZW4ndCBhIFBDSWUgZG9uJ3QgYm90aGVyICovCisJaWYgKCFwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9FWFApKQorCQlyZXR1cm47CisKKwlkZXYtPmNsYXNzID0gUENJX0NMQVNTX0JSSURHRV9QQ0kgPDwgODsKKwlmc2xfcGNpZV9idXNfZml4dXAgPSAxOworCXJldHVybjsKK30KKworc3RhdGljIGludCBfX2luaXQgZnNsX3BjaWVfY2hlY2tfbGluayhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCit7CisJdTMyIHZhbDsKKworCWVhcmx5X3JlYWRfY29uZmlnX2R3b3JkKGhvc2UsIDAsIDAsIFBDSUVfTFRTU00sICZ2YWwpOworCWlmICh2YWwgPCBQQ0lFX0xUU1NNX0wwKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwogI2lmIGRlZmluZWQoQ09ORklHX1BQQ184NXh4KSB8fCBkZWZpbmVkKENPTkZJR19QUENfODZ4eCkKIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX29uZV9hdG11KHN0cnVjdCBjY3NyX3BjaSBfX2lvbWVtICpwY2ksCiAJdW5zaWduZWQgaW50IGluZGV4LCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKQEAgLTE1OSwyOCArMTg2LDYgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgaW50IGZzbF9wY2llX2J1c19maXh1cDsKLQotc3RhdGljIHZvaWQgX19pbml0IHF1aXJrX2ZzbF9wY2llX2hlYWRlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCS8qIGlmIHdlIGFyZW4ndCBhIFBDSWUgZG9uJ3QgYm90aGVyICovCi0JaWYgKCFwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9FWFApKQotCQlyZXR1cm4gOwotCi0JZGV2LT5jbGFzcyA9IFBDSV9DTEFTU19CUklER0VfUENJIDw8IDg7Ci0JZnNsX3BjaWVfYnVzX2ZpeHVwID0gMTsKLQlyZXR1cm4gOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBmc2xfcGNpZV9jaGVja19saW5rKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKLXsKLQl1MzIgdmFsOwotCWVhcmx5X3JlYWRfY29uZmlnX2R3b3JkKGhvc2UsIDAsIDAsIFBDSUVfTFRTU00sICZ2YWwpOwotCWlmICh2YWwgPCBQQ0lFX0xUU1NNX0wwKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQogdm9pZCBmc2xfcGNpYmlvc19maXh1cF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSAoc3RydWN0IHBjaV9jb250cm9sbGVyICopIGJ1cy0+c3lzZGF0YTsKQEAgLTI5NCw4ICsyOTksMTg0IEBACiAjZW5kaWYgLyogQ09ORklHX1BQQ184NXh4IHx8IENPTkZJR19QUENfODZ4eCAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfUFBDXzgzeHgpIHx8IGRlZmluZWQoQ09ORklHX1BQQ19NUEM1MTJ4KQorREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKDB4MTk1NywgUENJX0RFVklDRV9JRF9NUEM4MzE0RSwgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfTVBDODMxNCwgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfTVBDODMxNUUsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX01QQzgzMTUsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX01QQzgzNzdFLCBxdWlya19mc2xfcGNpZV9oZWFkZXIpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKDB4MTk1NywgUENJX0RFVklDRV9JRF9NUEM4Mzc3LCBxdWlya19mc2xfcGNpZV9oZWFkZXIpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKDB4MTk1NywgUENJX0RFVklDRV9JRF9NUEM4Mzc4RSwgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfTVBDODM3OCwgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKKworc3RydWN0IG1wYzgzeHhfcGNpZV9wcml2IHsKKwl2b2lkIF9faW9tZW0gKmNmZ190eXBlMDsKKwl2b2lkIF9faW9tZW0gKmNmZ190eXBlMTsKKwl1MzIgZGV2X2Jhc2U7Cit9OworCisvKgorICogV2l0aCB0aGUgY29udmVudGlvbiBvZiB1LWJvb3QsIHRoZSBQQ0lFIG91dGJvdW5kIHdpbmRvdyAwIHNlcnZlcworICogYXMgY29uZmlndXJhdGlvbiB0cmFuc2FjdGlvbnMgb3V0Ym91bmQuCisgKi8KKyNkZWZpbmUgUEVYX09VVFdJTjBfQkFSCQkweENBNAorI2RlZmluZSBQRVhfT1VUV0lOMF9UQUwJCTB4Q0E4CisjZGVmaW5lIFBFWF9PVVRXSU4wX1RBSAkJMHhDQUMKKworc3RhdGljIGludCBtcGM4M3h4X3BjaWVfZXhjbHVkZV9kZXZpY2Uoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuKQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IGJ1cy0+c3lzZGF0YTsKKworCWlmIChob3NlLT5pbmRpcmVjdF90eXBlICYgUFBDX0lORElSRUNUX1RZUEVfTk9fUENJRV9MSU5LKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCS8qCisJICogV29ya2Fyb3VuZCBmb3IgdGhlIEhXIGJ1ZzogZm9yIFR5cGUgMCBjb25maWd1cmUgdHJhbnNhY3Rpb25zIHRoZQorCSAqIFBDSS1FIGNvbnRyb2xsZXIgZG9lcyBub3QgY2hlY2sgdGhlIGRldmljZSBudW1iZXIgYml0cyBhbmQganVzdAorCSAqIGFzc3VtZXMgdGhhdCB0aGUgZGV2aWNlIG51bWJlciBiaXRzIGFyZSAwLgorCSAqLworCWlmIChidXMtPm51bWJlciA9PSBob3NlLT5maXJzdF9idXNubyB8fAorCQkJYnVzLT5wcmltYXJ5ID09IGhvc2UtPmZpcnN0X2J1c25vKSB7CisJCWlmIChkZXZmbiAmIDB4ZjgpCisJCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCX0KKworCWlmIChwcGNfbWQucGNpX2V4Y2x1ZGVfZGV2aWNlKSB7CisJCWlmIChwcGNfbWQucGNpX2V4Y2x1ZGVfZGV2aWNlKGhvc2UsIGJ1cy0+bnVtYmVyLCBkZXZmbikpCisJCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCX0KKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKm1wYzgzeHhfcGNpZV9yZW1hcF9jZmcoc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJCQkJICAgIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IG9mZnNldCkKK3sKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSBidXMtPnN5c2RhdGE7CisJc3RydWN0IG1wYzgzeHhfcGNpZV9wcml2ICpwY2llID0gaG9zZS0+ZG4tPmRhdGE7CisJdTggYnVzX25vID0gYnVzLT5udW1iZXIgLSBob3NlLT5maXJzdF9idXNubzsKKwl1MzIgZGV2X2Jhc2UgPSBidXNfbm8gPDwgMjQgfCBkZXZmbiA8PCAxNjsKKwlpbnQgcmV0OworCisJcmV0ID0gbXBjODN4eF9wY2llX2V4Y2x1ZGVfZGV2aWNlKGJ1cywgZGV2Zm4pOworCWlmIChyZXQpCisJCXJldHVybiBOVUxMOworCisJb2Zmc2V0ICY9IDB4ZmZmOworCisJLyogVHlwZSAwICovCisJaWYgKGJ1cy0+bnVtYmVyID09IGhvc2UtPmZpcnN0X2J1c25vKQorCQlyZXR1cm4gcGNpZS0+Y2ZnX3R5cGUwICsgb2Zmc2V0OworCisJaWYgKHBjaWUtPmRldl9iYXNlID09IGRldl9iYXNlKQorCQlnb3RvIG1hcHBlZDsKKworCW91dF9sZTMyKHBjaWUtPmNmZ190eXBlMCArIFBFWF9PVVRXSU4wX1RBTCwgZGV2X2Jhc2UpOworCisJcGNpZS0+ZGV2X2Jhc2UgPSBkZXZfYmFzZTsKK21hcHBlZDoKKwlyZXR1cm4gcGNpZS0+Y2ZnX3R5cGUxICsgb2Zmc2V0OworfQorCitzdGF0aWMgaW50IG1wYzgzeHhfcGNpZV9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkJICAgIGludCBvZmZzZXQsIGludCBsZW4sIHUzMiAqdmFsKQoreworCXZvaWQgX19pb21lbSAqY2ZnX2FkZHI7CisKKwljZmdfYWRkciA9IG1wYzgzeHhfcGNpZV9yZW1hcF9jZmcoYnVzLCBkZXZmbiwgb2Zmc2V0KTsKKwlpZiAoIWNmZ19hZGRyKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJc3dpdGNoIChsZW4pIHsKKwljYXNlIDE6CisJCSp2YWwgPSBpbl84KGNmZ19hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkqdmFsID0gaW5fbGUxNihjZmdfYWRkcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSp2YWwgPSBpbl9sZTMyKGNmZ19hZGRyKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIGludCBtcGM4M3h4X3BjaWVfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCQkgICAgIGludCBvZmZzZXQsIGludCBsZW4sIHUzMiB2YWwpCit7CisJdm9pZCBfX2lvbWVtICpjZmdfYWRkcjsKKworCWNmZ19hZGRyID0gbXBjODN4eF9wY2llX3JlbWFwX2NmZyhidXMsIGRldmZuLCBvZmZzZXQpOworCWlmICghY2ZnX2FkZHIpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwlzd2l0Y2ggKGxlbikgeworCWNhc2UgMToKKwkJb3V0XzgoY2ZnX2FkZHIsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJb3V0X2xlMTYoY2ZnX2FkZHIsIHZhbCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW91dF9sZTMyKGNmZ19hZGRyLCB2YWwpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9vcHMgbXBjODN4eF9wY2llX29wcyA9IHsKKwkucmVhZCA9IG1wYzgzeHhfcGNpZV9yZWFkX2NvbmZpZywKKwkud3JpdGUgPSBtcGM4M3h4X3BjaWVfd3JpdGVfY29uZmlnLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXBjODN4eF9wY2llX3NldHVwKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKKwkJCQkgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVnKQoreworCXN0cnVjdCBtcGM4M3h4X3BjaWVfcHJpdiAqcGNpZTsKKwl1MzIgY2ZnX2JhcjsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCXBjaWUgPSB6YWxsb2NfbWF5YmVfYm9vdG1lbShzaXplb2YoKnBjaWUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBjaWUpCisJCXJldHVybiByZXQ7CisKKwlwY2llLT5jZmdfdHlwZTAgPSBpb3JlbWFwKHJlZy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVnKSk7CisJaWYgKCFwY2llLT5jZmdfdHlwZTApCisJCWdvdG8gZXJyMDsKKworCWNmZ19iYXIgPSBpbl9sZTMyKHBjaWUtPmNmZ190eXBlMCArIFBFWF9PVVRXSU4wX0JBUik7CisJaWYgKCFjZmdfYmFyKSB7CisJCS8qIFBDSS1FIGlzbid0IGNvbmZpZ3VyZWQuICovCisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyMTsKKwl9CisKKwlwY2llLT5jZmdfdHlwZTEgPSBpb3JlbWFwKGNmZ19iYXIsIDB4MTAwMCk7CisJaWYgKCFwY2llLT5jZmdfdHlwZTEpCisJCWdvdG8gZXJyMTsKKworCVdBUk5fT04oaG9zZS0+ZG4tPmRhdGEpOworCWhvc2UtPmRuLT5kYXRhID0gcGNpZTsKKwlob3NlLT5vcHMgPSAmbXBjODN4eF9wY2llX29wczsKKworCW91dF9sZTMyKHBjaWUtPmNmZ190eXBlMCArIFBFWF9PVVRXSU4wX1RBSCwgMCk7CisJb3V0X2xlMzIocGNpZS0+Y2ZnX3R5cGUwICsgUEVYX09VVFdJTjBfVEFMLCAwKTsKKworCWlmIChmc2xfcGNpZV9jaGVja19saW5rKGhvc2UpKQorCQlob3NlLT5pbmRpcmVjdF90eXBlIHw9IFBQQ19JTkRJUkVDVF9UWVBFX05PX1BDSUVfTElOSzsKKworCXJldHVybiAwOworZXJyMToKKwlpb3VubWFwKHBjaWUtPmNmZ190eXBlMCk7CitlcnIwOgorCWtmcmVlKHBjaWUpOworCXJldHVybiByZXQ7CisKK30KKwogaW50IF9faW5pdCBtcGM4M3h4X2FkZF9icmlkZ2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYpCiB7CisJaW50IHJldDsKIAlpbnQgbGVuOwogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKIAlzdHJ1Y3QgcmVzb3VyY2UgcnNyY19yZWc7CkBAIC0zMDMsNiArNDg0LDExIEBACiAJY29uc3QgaW50ICpidXNfcmFuZ2U7CiAJaW50IHByaW1hcnk7CiAKKwlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUoZGV2KSkgeworCQlwcl93YXJuaW5nKCIlczogZGlzYWJsZWQgYnkgdGhlIGZpcm13YXJlLlxuIiwKKwkJCSAgIGRldi0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCXByX2RlYnVnKCJBZGRpbmcgUENJIGhvc3QgYnJpZGdlICVzXG4iLCBkZXYtPmZ1bGxfbmFtZSk7CiAKIAkvKiBGZXRjaCBob3N0IGJyaWRnZSByZWdpc3RlcnMgYWRkcmVzcyAqLwpAQCAtMzUwLDcgKzUzNiwxNCBAQAogCWhvc2UtPmZpcnN0X2J1c25vID0gYnVzX3JhbmdlID8gYnVzX3JhbmdlWzBdIDogMDsKIAlob3NlLT5sYXN0X2J1c25vID0gYnVzX3JhbmdlID8gYnVzX3JhbmdlWzFdIDogMHhmZjsKIAotCXNldHVwX2luZGlyZWN0X3BjaShob3NlLCByc3JjX2NmZy5zdGFydCwgcnNyY19jZmcuc3RhcnQgKyA0LCAwKTsKKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoZGV2LCAiZnNsLG1wYzgzMTQtcGNpZSIpKSB7CisJCXJldCA9IG1wYzgzeHhfcGNpZV9zZXR1cChob3NlLCAmcnNyY19yZWcpOworCQlpZiAocmV0KQorCQkJZ290byBlcnIwOworCX0gZWxzZSB7CisJCXNldHVwX2luZGlyZWN0X3BjaShob3NlLCByc3JjX2NmZy5zdGFydCwKKwkJCQkgICByc3JjX2NmZy5zdGFydCArIDQsIDApOworCX0KIAogCXByaW50ayhLRVJOX0lORk8gIkZvdW5kIEZTTCBQQ0kgaG9zdCBicmlkZ2UgYXQgMHglMDE2bGx4LiAiCiAJICAgICAgICJGaXJtd2FyZSBidXMgbnVtYmVyOiAlZC0+JWRcbiIsCkBAIC0zNjUsNSArNTU4LDggQEAKIAlwY2lfcHJvY2Vzc19icmlkZ2VfT0ZfcmFuZ2VzKGhvc2UsIGRldiwgcHJpbWFyeSk7CiAKIAlyZXR1cm4gMDsKK2VycjA6CisJcGNpYmlvc19mcmVlX2NvbnRyb2xsZXIoaG9zZSk7CisJcmV0dXJuIHJldDsKIH0KICNlbmRpZiAvKiBDT05GSUdfUFBDXzgzeHggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmMKaW5kZXggMTE1Y2IxNi4uYTAxYzg5ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGh5X2ZpeGVkLmg+CkBAIC0zMjgsNiArMzI5LDkgQEAKIAkJc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgdXNiX2RhdGE7CiAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnByb3AgPSBOVUxMOwogCisJCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpCisJCQljb250aW51ZTsKKwogCQltZW1zZXQoJnIsIDAsIHNpemVvZihyKSk7CiAJCW1lbXNldCgmdXNiX2RhdGEsIDAsIHNpemVvZih1c2JfZGF0YSkpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jCmluZGV4IDlhODljZDMuLmE4NmQzY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jCkBAIC01NjgsOCArNTY4LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpcGljX2xvY2ssIGZsYWdzKTsKIAotCXRlbXAgPSBpcGljX3JlYWQoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10uYWNrKTsKLQl0ZW1wIHw9ICgxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOworCXRlbXAgPSAxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCk7CiAJaXBpY193cml0ZShpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5hY2ssIHRlbXApOwogCiAJLyogbWIoKSBjYW4ndCBndWFyYW50ZWUgdGhhdCBhY2sgaXMgZmluaXNoZWQuICBCdXQgaXQgZG9lcyBmaW5pc2gKQEAgLTU5Miw4ICs1OTEsNyBAQAogCXRlbXAgJj0gfigxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOwogCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10ubWFzaywgdGVtcCk7CiAKLQl0ZW1wID0gaXBpY19yZWFkKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLmFjayk7Ci0JdGVtcCB8PSAoMSA8PCAoMzEgLSBpcGljX2luZm9bc3JjXS5iaXQpKTsKKwl0ZW1wID0gMSA8PCAoMzEgLSBpcGljX2luZm9bc3JjXS5iaXQpOwogCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10uYWNrLCB0ZW1wKTsKIAogCS8qIG1iKCkgY2FuJ3QgZ3VhcmFudGVlIHRoYXQgYWNrIGlzIGZpbmlzaGVkLiAgQnV0IGl0IGRvZXMgZmluaXNoCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21zaV9iaXRtYXAuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jCmluZGV4IGY4NDIxN2IuLjVhMzJjYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jCkBAIC0xNDEsNyArMTQxLDcgQEAKICNkZWZpbmUgY2hlY2soeCkJXAogCWlmICghKHgpKSBwcmludGsoIm1zaV9iaXRtYXA6IHRlc3QgZmFpbGVkIGF0IGxpbmUgJWRcbiIsIF9fTElORV9fKTsKIAotdm9pZCB0ZXN0X2Jhc2ljcyh2b2lkKQordm9pZCBfX2luaXQgdGVzdF9iYXNpY3Modm9pZCkKIHsKIAlzdHJ1Y3QgbXNpX2JpdG1hcCBibXA7CiAJaW50IGksIHNpemUgPSA1MTI7CkBAIC0xODYsNyArMTg2LDcgQEAKIAlrZnJlZShibXAuYml0bWFwKTsKIH0KIAotdm9pZCB0ZXN0X29mX25vZGUodm9pZCkKK3ZvaWQgX19pbml0IHRlc3Rfb2Zfbm9kZSh2b2lkKQogewogCXUzMiBwcm9wX2RhdGFbXSA9IHsgMTAsIDEwLCAyNSwgMywgNDAsIDEsIDEwMCwgMTAwLCAyMDAsIDIwIH07CiAJY29uc3QgY2hhciAqZXhwZWN0ZWRfc3RyID0gIjAtOSwyMC0yNCwyOC0zOSw0MS05OSwyMjAtMjU1IjsKQEAgLTIzNCw3ICsyMzQsNyBAQAogCWtmcmVlKGJtcC5iaXRtYXApOwogfQogCi1pbnQgbXNpX2JpdG1hcF9zZWxmdGVzdCh2b2lkKQoraW50IF9faW5pdCBtc2lfYml0bWFwX3NlbGZ0ZXN0KHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fREVCVUcgIlJ1bm5pbmcgTVNJIGJpdG1hcCBzZWxmLXRlc3RzIC4uLlxuIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcG1pLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BtaS5jCmluZGV4IGM4NTg3NDkuLmFhYTkxNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcG1pLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wbWkuYwpAQCAtNTAsNyArNTAsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBtaV9kYXRhICpkYXRhOwogCi1zdGF0aWMgaW50IHBtaV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgcG1pX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAl1OCB0eXBlOwogCWludCByYzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X3BjaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmMKaW5kZXggNTU1OGQ5My4uNmEyZDQ3MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmMKQEAgLTE4MzksNiArMTgzOSw4IEBACiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKIAorCXBwY19wY2lfZmxhZ3MgfD0gUFBDX1BDSV9FTkFCTEVfUFJPQ19ET01BSU5TIHwgUFBDX1BDSV9DT01QQVRfRE9NQUlOXzA7CisKICNpZmRlZiBDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTCiAJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAiaWJtLHBsYi1wY2lleCIpCiAJCXBwYzR4eF9wcm9iZV9wY2lleF9icmlkZ2UobnApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKaW5kZXggYTY0ZTM4OC4uZTI3NjU1YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCkBAIC0zMTAsNyArMzEwLDggQEAKIAogc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfY2V1X2luZm8gc2hfbW9iaWxlX2NldV9pbmZvID0gewogCS5mbGFncyA9IFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8IFNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwKLQlTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX01BU1RFUiB8IFNPQ0FNX0RBVEFXSURUSF84LAorCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8IFNPQ0FNX01BU1RFUiB8CisJU09DQU1fREFUQVdJRFRIXzgsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGNldV9yZXNvdXJjZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYwppbmRleCBiYzM1YjRjLi40ZmQ2YTcyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCkBAIC0zNTIsOCArMzUyLDkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfY2V1X2luZm8gc2hfbW9iaWxlX2NldV9pbmZvID0gewotCS5mbGFncyA9IFNPQ0FNX01BU1RFUiB8IFNPQ0FNX0RBVEFXSURUSF84IHwgU09DQU1fUENMS19TQU1QTEVfUklTSU5HIFwKLQl8IFNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fVlNZTkNfQUNUSVZFX0hJR0gsCisJLmZsYWdzID0gU09DQU1fTUFTVEVSIHwgU09DQU1fREFUQVdJRFRIXzggfCBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcKKwl8IFNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fVlNZTkNfQUNUSVZFX0hJR0gKKwl8IFNPQ0FNX0RBVEFfQUNUSVZFX0hJR0gsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG1pZ29yX2NldV9yZXNvdXJjZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAppbmRleCAwNjZmMGZiLi5hM2YyMzk1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC0zMyw3ICszMyw2IEBACiAKICNkZWZpbmUgbm9kZV90b19jcHVtYXNrKG5vZGUpCSgodm9pZClub2RlLCBjcHVfb25saW5lX21hcCkKICNkZWZpbmUgY3B1bWFza19vZl9ub2RlKG5vZGUpCSgodm9pZClub2RlLCBjcHVfb25saW5lX21hc2spCi0jZGVmaW5lIG5vZGVfdG9fZmlyc3RfY3B1KG5vZGUpCSgodm9pZCkobm9kZSksMCkKIAogI2RlZmluZSBwY2lidXNfdG9fbm9kZShidXMpCSgodm9pZCkoYnVzKSwgLTEpCiAjZGVmaW5lIHBjaWJ1c190b19jcHVtYXNrKGJ1cykJKHBjaWJ1c190b19ub2RlKGJ1cykgPT0gLTEgPyBcCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lXzY0LmMKaW5kZXggNTlkMmEwMy4uOTg4Yzc3YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZV82NC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVfNjQuYwpAQCAtMjg0LDcgKzI4NCw2IEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwICA9IHsKIAkuaGFuZGxlciA9IHRpbWVyX2ludGVycnVwdCwKIAkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVELAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJ0aW1lciIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItY210LmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItY210LmMKaW5kZXggYzEyNzI5My4uOWFhMzQ4NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLWNtdC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1jbXQuYwpAQCAtMTA5LDcgKzEwOSw2IEBACiAJLm5hbWUJCT0gInRpbWVyIiwKIAkuaGFuZGxlcgk9IGNtdF90aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAotCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiB9OwogCiBzdGF0aWMgdm9pZCBjbXRfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLW10dTIuYyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1tdHUyLmMKaW5kZXggOWE3N2FlOC4uOWIwZWYwMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLW10dTIuYworKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItbXR1Mi5jCkBAIC0xMTUsNyArMTE1LDYgQEAKIAkubmFtZQkJPSAidGltZXIiLAogCS5oYW5kbGVyCT0gbXR1Ml90aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAotCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGRpdmlzb3JzW10gPSB7IDEsIDQsIDE2LCA2NCwgMSwgMSwgMjU2IH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMKaW5kZXggMTBiNWE2Zi4uYzVkMzM5NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYwpAQCAtMTYyLDcgKzE2Miw2IEBACiAJLm5hbWUJCT0gInBlcmlvZGljL29uZXNob3QgdGltZXIiLAogCS5oYW5kbGVyCT0gdG11X3RpbWVyX2ludGVycnVwdCwKIAkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCi0JLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCB0bXVfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF82NC5oCmluZGV4IDU2OTNhYjQuLjY2NmE3M2ZlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF82NC5oCkBAIC0xMjEsOCArMTIxLDggQEAKIAkgKiBsb2NhbCBUTEIuCiAJICovCiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWlmICghY3R4X3ZhbGlkIHx8ICFjcHVfaXNzZXQoY3B1LCBtbS0+Y3B1X3ZtX21hc2spKSB7Ci0JCWNwdV9zZXQoY3B1LCBtbS0+Y3B1X3ZtX21hc2spOworCWlmICghY3R4X3ZhbGlkIHx8ICFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbW1fY3B1bWFzayhtbSkpKSB7CisJCWNwdW1hc2tfc2V0X2NwdShjcHUsIG1tX2NwdW1hc2sobW0pKTsKIAkJX19mbHVzaF90bGJfbW0oQ1RYX0hXQklUUyhtbS0+Y29udGV4dCksCiAJCQkgICAgICAgU0VDT05EQVJZX0NPTlRFWFQpOwogCX0KQEAgLTE0MSw4ICsxNDEsOCBAQAogCWlmICghQ1RYX1ZBTElEKG1tLT5jb250ZXh0KSkKIAkJZ2V0X25ld19tbXVfY29udGV4dChtbSk7CiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWlmICghY3B1X2lzc2V0KGNwdSwgbW0tPmNwdV92bV9tYXNrKSkKLQkJY3B1X3NldChjcHUsIG1tLT5jcHVfdm1fbWFzayk7CisJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbW1fY3B1bWFzayhtbSkpKQorCQljcHVtYXNrX3NldF9jcHUoY3B1LCBtbV9jcHVtYXNrKG1tKSk7CiAKIAlsb2FkX3NlY29uZGFyeV9jb250ZXh0KG1tKTsKIAlfX2ZsdXNoX3RsYl9tbShDVFhfSFdCSVRTKG1tLT5jb250ZXh0KSwgU0VDT05EQVJZX0NPTlRFWFQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zbXBfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc21wXzY0LmgKaW5kZXggNTcyMjRkZC4uYmVjYjZiZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zbXBfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NtcF82NC5oCkBAIC0zNSw3ICszNSw4IEBACiBleHRlcm4gaW50IHNwYXJjNjRfbXVsdGlfY29yZTsKIAogZXh0ZXJuIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaShpbnQgY3B1KTsKLWV4dGVybiB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaShjcHVtYXNrX3QgbWFzayk7CitleHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayk7CisjZGVmaW5lIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrCiAKIC8qCiAgKglHZW5lcmFsIGZ1bmN0aW9ucyB0aGF0IGVhY2ggaG9zdCBzeXN0ZW0gbXVzdCBwcm92aWRlLgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKaW5kZXggNzljMWFlMi4uNzUxYzhjMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCkBAIC0xMjYsNyArMTI2LDcgQEAKICNkZWZpbmUgc3dpdGNoX3RvKHByZXYsIG5leHQsIGxhc3QpIGRvIHsJCQkJCQlcCiAJU1dJVENIX0VOVEVSKHByZXYpOwkJCQkJCQkJXAogCVNXSVRDSF9ET19MQVpZX0ZQVShuZXh0KTsJCQkJCQkJXAotCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBuZXh0LT5hY3RpdmVfbW0tPmNwdV92bV9tYXNrKTsJCQlcCisJY3B1bWFza19zZXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW1fY3B1bWFzayhuZXh0LT5hY3RpdmVfbW0pKTsJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkJCVwKIAkic2V0aGkJJSVoaShoZXJlIC0gMHg4KSwgJSVvN1xuXHQiCQkJCQkJXAogCSJtb3YJJSVnNiwgJSVnM1xuXHQiCQkJCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RvcG9sb2d5XzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RvcG9sb2d5XzY0LmgKaW5kZXggNWJjMGI4Zi4uZTVlYThkMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90b3BvbG9neV82NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdG9wb2xvZ3lfNjQuaApAQCAtMjgsMTEgKzI4LDYgQEAKICNkZWZpbmUgbm9kZV90b19jcHVtYXNrX3B0cl9uZXh0KHYsIG5vZGUpCVwKIAkJCSAgIHYgPSAmKG51bWFfY3B1bWFza19sb29rdXBfdGFibGVbbm9kZV0pCiAKLXN0YXRpYyBpbmxpbmUgaW50IG5vZGVfdG9fZmlyc3RfY3B1KGludCBub2RlKQotewotCXJldHVybiBjcHVtYXNrX2ZpcnN0KGNwdW1hc2tfb2Zfbm9kZShub2RlKSk7Ci19Ci0KIHN0cnVjdCBwY2lfYnVzOwogI2lmZGVmIENPTkZJR19QQ0kKIGV4dGVybiBpbnQgcGNpYnVzX3RvX25vZGUoc3RydWN0IHBjaV9idXMgKnBidXMpOwpAQCAtNDMsMTMgKzM4LDkgQEAKIH0KICNlbmRpZgogCi0jZGVmaW5lIHBjaWJ1c190b19jcHVtYXNrKGJ1cykJXAotCShwY2lidXNfdG9fbm9kZShidXMpID09IC0xID8gXAotCSBDUFVfTUFTS19BTEwgOiBcCi0JIG5vZGVfdG9fY3B1bWFzayhwY2lidXNfdG9fbm9kZShidXMpKSkKICNkZWZpbmUgY3B1bWFza19vZl9wY2lidXMoYnVzKQlcCiAJKHBjaWJ1c190b19ub2RlKGJ1cykgPT0gLTEgPyBcCi0JIENQVV9NQVNLX0FMTF9QVFIgOiBcCisJIGNwdV9hbGxfbWFzayA6IFwKIAkgY3B1bWFza19vZl9ub2RlKHBjaWJ1c190b19ub2RlKGJ1cykpKQogCiAjZGVmaW5lIFNEX05PREVfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJXApAQCAtODksNyArODAsNiBAQAogI2RlZmluZSBzbXRfY2FwYWJsZSgpCQkJCShzcGFyYzY0X211bHRpX2NvcmUpCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCi0jZGVmaW5lIGNwdV9jb3JlZ3JvdXBfbWFwKGNwdSkJCQkoY3B1X2NvcmVfbWFwW2NwdV0pCiAjZGVmaW5lIGNwdV9jb3JlZ3JvdXBfbWFzayhjcHUpCQkJKCZjcHVfY29yZV9tYXBbY3B1XSkKIAogI2VuZGlmIC8qIF9BU01fU1BBUkM2NF9UT1BPTE9HWV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9kcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvZHMuYwppbmRleCA1N2MzOTg0Li45MDM1MGY4MyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvZHMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9kcy5jCkBAIC02NTMsNyArNjUzLDcgQEAKIAkJaWYgKGNwdV9saXN0W2ldID09IENQVV9TRU5USU5FTCkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChjcHVfbGlzdFtpXSA8IE5SX0NQVVMpCisJCWlmIChjcHVfbGlzdFtpXSA8IG5yX2NwdV9pZHMpCiAJCQljcHVfc2V0KGNwdV9saXN0W2ldLCBtYXNrKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2lycV8zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzMyLmMKaW5kZXggNDRkZDVlZS4uYWQ4MDBiOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzMyLmMKQEAgLTQzOSw3ICs0MzksNiBAQAogCWZsdXNoX2NhY2hlX2FsbCgpOwogCiAJYWN0aW9uLT5mbGFncyA9IGlycWZsYWdzOwotCWNwdXNfY2xlYXIoYWN0aW9uLT5tYXNrKTsKIAlhY3Rpb24tPm5hbWUgPSBkZXZuYW1lOwogCWFjdGlvbi0+ZGV2X2lkID0gTlVMTDsKIAlhY3Rpb24tPm5leHQgPSBOVUxMOwpAQCAtNTc0LDcgKzU3Myw2IEBACiAKIAlhY3Rpb24tPmhhbmRsZXIgPSBoYW5kbGVyOwogCWFjdGlvbi0+ZmxhZ3MgPSBpcnFmbGFnczsKLQljcHVzX2NsZWFyKGFjdGlvbi0+bWFzayk7CiAJYWN0aW9uLT5uYW1lID0gZGV2bmFtZTsKIAlhY3Rpb24tPm5leHQgPSBOVUxMOwogCWFjdGlvbi0+ZGV2X2lkID0gZGV2X2lkOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfNjQuYwppbmRleCBkMGQ2YTUxLi41ZGVhYmU5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfNjQuYwpAQCAtMjY2LDEyICsyNjYsMTIgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9yb3Zlcl9sb2NrLCBmbGFncyk7CiAKIAkJd2hpbGUgKCFjcHVfb25saW5lKGlycV9yb3ZlcikpIHsKLQkJCWlmICgrK2lycV9yb3ZlciA+PSBOUl9DUFVTKQorCQkJaWYgKCsraXJxX3JvdmVyID49IG5yX2NwdV9pZHMpCiAJCQkJaXJxX3JvdmVyID0gMDsKIAkJfQogCQljcHVpZCA9IGlycV9yb3ZlcjsKIAkJZG8gewotCQkJaWYgKCsraXJxX3JvdmVyID49IE5SX0NQVVMpCisJCQlpZiAoKytpcnFfcm92ZXIgPj0gbnJfY3B1X2lkcykKIAkJCQlpcnFfcm92ZXIgPSAwOwogCQl9IHdoaWxlICghY3B1X29ubGluZShpcnFfcm92ZXIpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbGVkLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZWQuYwppbmRleCBhZGFhZWQ0Li4wMGQwMzRlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9sZWQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZWQuYwpAQCAtMTI2LDcgKzEyNiw2IEBACiAJbGVkID0gcHJvY19jcmVhdGUoImxlZCIsIDAsIE5VTEwsICZsZWRfcHJvY19mb3BzKTsKIAlpZiAoIWxlZCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbGVkLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcHJpbnRrKEtFUk5fSU5GTwogCSAgICAgICAibGVkOiB2ZXJzaW9uICVzLCBMYXJzIEtvdHRob2ZmIDxtZXRhbGhlYWRAbWV0YWxoZWFkLndzPlxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL21kZXNjLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9tZGVzYy5jCmluZGV4IDNmNzlmMGMuLmYwZTZlZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL21kZXNjLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbWRlc2MuYwpAQCAtNTY3LDcgKzU2Nyw3IEBACiAJCQltYXhfY3B1ID0gTlJfQ1BVUzsKIAkJfQogCQlmb3IgKGkgPSAwOyBpIDwgbWF4X2NwdTsgaSsrKQotCQkJY3B1X3NldChpLCBjcHVfcG9zc2libGVfbWFwKTsKKwkJCXNldF9jcHVfcG9zc2libGUoaSwgdHJ1ZSk7CiAJfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL25taS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMKaW5kZXggZjM1NzcyMi4uMmMwY2M3MiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTIwNiwxMyArMjA3LDMzIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChubWlfYWRqdXN0X2h6KTsKIAorc3RhdGljIGludCBubWlfc2h1dGRvd24oc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKnApCit7CisJb25fZWFjaF9jcHUoc3RvcF93YXRjaGRvZywgTlVMTCwgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbm1pX3JlYm9vdF9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IG5taV9zaHV0ZG93biwKK307CisKIGludCBfX2luaXQgbm1pX2luaXQodm9pZCkKIHsKKwlpbnQgZXJyOworCiAJbm1pX3VzYWJsZSA9IDE7CiAKIAlvbl9lYWNoX2NwdShzdGFydF93YXRjaGRvZywgTlVMTCwgMSk7CiAKLQlyZXR1cm4gY2hlY2tfbm1pX3dhdGNoZG9nKCk7CisJZXJyID0gY2hlY2tfbm1pX3dhdGNoZG9nKCk7CisJaWYgKCFlcnIpIHsKKwkJZXJyID0gcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZubWlfcmVib290X25vdGlmaWVyKTsKKwkJaWYgKGVycikgeworCQkJbm1pX3VzYWJsZSA9IDA7CisJCQlvbl9lYWNoX2NwdShzdG9wX3dhdGNoZG9nLCBOVUxMLCAxKTsKKwkJfQorCX0KKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9ubWlfd2F0Y2hkb2coY2hhciAqc3RyKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV82NC5jCmluZGV4IGVkZWNjYTcuLmNhNTVjNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Byb21fNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzY0LmMKQEAgLTUxOCw4ICs1MTgsOCBAQAogCQl9CiAKICNpZmRlZiBDT05GSUdfU01QCi0JCWNwdV9zZXQoY3B1aWQsIGNwdV9wcmVzZW50X21hcCk7Ci0JCWNwdV9zZXQoY3B1aWQsIGNwdV9wb3NzaWJsZV9tYXApOworCQlzZXRfY3B1X3ByZXNlbnQoY3B1aWQsIHRydWUpOworCQlzZXRfY3B1X3Bvc3NpYmxlKGNwdWlkLCB0cnVlKTsKICNlbmRpZgogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfMzIuYwppbmRleCAxZTVhYzRlMi4uMTMyZDgxZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzMyLmMKQEAgLTcwLDEzICs3MCwxMiBAQAogCWV4dGVybiB2b2lkIHNtcDRtX3NtcF9kb25lKHZvaWQpOwogCWV4dGVybiB2b2lkIHNtcDRkX3NtcF9kb25lKHZvaWQpOwogCXVuc2lnbmVkIGxvbmcgYm9nb3N1bSA9IDA7Ci0JaW50IGNwdSwgbnVtOworCWludCBjcHUsIG51bSA9IDA7CiAKLQlmb3IgKGNwdSA9IDAsIG51bSA9IDA7IGNwdSA8IE5SX0NQVVM7IGNwdSsrKQotCQlpZiAoY3B1X29ubGluZShjcHUpKSB7Ci0JCQludW0rKzsKLQkJCWJvZ29zdW0gKz0gY3B1X2RhdGEoY3B1KS51ZGVsYXlfdmFsOwotCQl9CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJbnVtKys7CisJCWJvZ29zdW0gKz0gY3B1X2RhdGEoY3B1KS51ZGVsYXlfdmFsOworCX0KIAogCXByaW50aygiVG90YWwgb2YgJWQgcHJvY2Vzc29ycyBhY3RpdmF0ZWQgKCVsdS4lMDJsdSBCb2dvTUlQUykuXG4iLAogCQludW0sIGJvZ29zdW0vKDUwMDAwMC9IWiksCkBAIC0xNDQsNyArMTQzLDcgQEAKIHZvaWQgc21wX2ZsdXNoX2NhY2hlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCWlmKG1tLT5jb250ZXh0ICE9IE5PX0NPTlRFWFQpIHsKLQkJY3B1bWFza190IGNwdV9tYXNrID0gbW0tPmNwdV92bV9tYXNrOworCQljcHVtYXNrX3QgY3B1X21hc2sgPSAqbW1fY3B1bWFzayhtbSk7CiAJCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9tYXNrKTsKIAkJaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkKIAkJCXhjMSgoc21wZnVuY190KSBCVEZJWFVQX0NBTEwobG9jYWxfZmx1c2hfY2FjaGVfbW0pLCAodW5zaWduZWQgbG9uZykgbW0pOwpAQCAtMTU1LDEyICsxNTQsMTMgQEAKIHZvaWQgc21wX2ZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlpZihtbS0+Y29udGV4dCAhPSBOT19DT05URVhUKSB7Ci0JCWNwdW1hc2tfdCBjcHVfbWFzayA9IG1tLT5jcHVfdm1fbWFzazsKKwkJY3B1bWFza190IGNwdV9tYXNrID0gKm1tX2NwdW1hc2sobW0pOwogCQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7CiAJCWlmICghY3B1c19lbXB0eShjcHVfbWFzaykpIHsKIAkJCXhjMSgoc21wZnVuY190KSBCVEZJWFVQX0NBTEwobG9jYWxfZmx1c2hfdGxiX21tKSwgKHVuc2lnbmVkIGxvbmcpIG1tKTsKIAkJCWlmKGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpID09IDEgJiYgY3VycmVudC0+YWN0aXZlX21tID09IG1tKQotCQkJCW1tLT5jcHVfdm1fbWFzayA9IGNwdW1hc2tfb2ZfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCQkJY3B1bWFza19jb3B5KG1tX2NwdW1hc2sobW0pLAorCQkJCQkgICAgIGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKSk7CiAJCX0KIAkJbG9jYWxfZmx1c2hfdGxiX21tKG1tKTsKIAl9CkBAIC0xNzIsNyArMTcyLDcgQEAKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CiAKIAlpZiAobW0tPmNvbnRleHQgIT0gTk9fQ09OVEVYVCkgewotCQljcHVtYXNrX3QgY3B1X21hc2sgPSBtbS0+Y3B1X3ZtX21hc2s7CisJCWNwdW1hc2tfdCBjcHVfbWFzayA9ICptbV9jcHVtYXNrKG1tKTsKIAkJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X21hc2spOwogCQlpZiAoIWNwdXNfZW1wdHkoY3B1X21hc2spKQogCQkJeGMzKChzbXBmdW5jX3QpIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF9jYWNoZV9yYW5nZSksICh1bnNpZ25lZCBsb25nKSB2bWEsIHN0YXJ0LCBlbmQpOwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwogCiAJaWYgKG1tLT5jb250ZXh0ICE9IE5PX0NPTlRFWFQpIHsKLQkJY3B1bWFza190IGNwdV9tYXNrID0gbW0tPmNwdV92bV9tYXNrOworCQljcHVtYXNrX3QgY3B1X21hc2sgPSAqbW1fY3B1bWFzayhtbSk7CiAJCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9tYXNrKTsKIAkJaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkKIAkJCXhjMygoc21wZnVuY190KSBCVEZJWFVQX0NBTEwobG9jYWxfZmx1c2hfdGxiX3JhbmdlKSwgKHVuc2lnbmVkIGxvbmcpIHZtYSwgc3RhcnQsIGVuZCk7CkBAIC0xOTksNyArMTk5LDcgQEAKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CiAKIAlpZihtbS0+Y29udGV4dCAhPSBOT19DT05URVhUKSB7Ci0JCWNwdW1hc2tfdCBjcHVfbWFzayA9IG1tLT5jcHVfdm1fbWFzazsKKwkJY3B1bWFza190IGNwdV9tYXNrID0gKm1tX2NwdW1hc2sobW0pOwogCQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7CiAJCWlmICghY3B1c19lbXB0eShjcHVfbWFzaykpCiAJCQl4YzIoKHNtcGZ1bmNfdCkgQlRGSVhVUF9DQUxMKGxvY2FsX2ZsdXNoX2NhY2hlX3BhZ2UpLCAodW5zaWduZWQgbG9uZykgdm1hLCBwYWdlKTsKQEAgLTIxMiw3ICsyMTIsNyBAQAogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKIAogCWlmKG1tLT5jb250ZXh0ICE9IE5PX0NPTlRFWFQpIHsKLQkJY3B1bWFza190IGNwdV9tYXNrID0gbW0tPmNwdV92bV9tYXNrOworCQljcHVtYXNrX3QgY3B1X21hc2sgPSAqbW1fY3B1bWFzayhtbSk7CiAJCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9tYXNrKTsKIAkJaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkKIAkJCXhjMigoc21wZnVuY190KSBCVEZJWFVQX0NBTEwobG9jYWxfZmx1c2hfdGxiX3BhZ2UpLCAodW5zaWduZWQgbG9uZykgdm1hLCBwYWdlKTsKQEAgLTI0MSw3ICsyNDEsNyBAQAogCiB2b2lkIHNtcF9mbHVzaF9zaWdfaW5zbnMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgaW5zbl9hZGRyKQogewotCWNwdW1hc2tfdCBjcHVfbWFzayA9IG1tLT5jcHVfdm1fbWFzazsKKwljcHVtYXNrX3QgY3B1X21hc2sgPSAqbW1fY3B1bWFzayhtbSk7CiAJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X21hc2spOwogCWlmICghY3B1c19lbXB0eShjcHVfbWFzaykpCiAJCXhjMigoc21wZnVuY190KSBCVEZJWFVQX0NBTEwobG9jYWxfZmx1c2hfc2lnX2luc25zKSwgKHVuc2lnbmVkIGxvbmcpIG1tLCBpbnNuX2FkZHIpOwpAQCAtMzMyLDggKzMzMiw4IEBACiAJaW5zdGFuY2UgPSAwOwogCXdoaWxlICghY3B1X2ZpbmRfYnlfaW5zdGFuY2UoaW5zdGFuY2UsIE5VTEwsICZtaWQpKSB7CiAJCWlmIChtaWQgPCBOUl9DUFVTKSB7Ci0JCQljcHVfc2V0KG1pZCwgY3B1X3Bvc3NpYmxlX21hcCk7Ci0JCQljcHVfc2V0KG1pZCwgY3B1X3ByZXNlbnRfbWFwKTsKKwkJCXNldF9jcHVfcG9zc2libGUobWlkLCB0cnVlKTsKKwkJCXNldF9jcHVfcHJlc2VudChtaWQsIHRydWUpOwogCQl9CiAJCWluc3RhbmNlKys7CiAJfQpAQCAtMzUxLDggKzM1MSw4IEBACiAJCXByaW50aygiYm9vdCBjcHUgaWQgIT0gMCwgdGhpcyBjb3VsZCB3b3JrIGJ1dCBpcyB1bnRlc3RlZFxuIik7CiAKIAljdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSA9IGNwdWlkOwotCWNwdV9zZXQoY3B1aWQsIGNwdV9vbmxpbmVfbWFwKTsKLQljcHVfc2V0KGNwdWlkLCBjcHVfcG9zc2libGVfbWFwKTsKKwlzZXRfY3B1X29ubGluZShjcHVpZCwgdHJ1ZSk7CisJc2V0X2NwdV9wb3NzaWJsZShjcHVpZCwgdHJ1ZSk7CiB9CiAKIGludCBfX2NwdWluaXQgX19jcHVfdXAodW5zaWduZWQgaW50IGNwdSkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKaW5kZXggNzk0NTdmNi4uNzA4ZTEyYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKQEAgLTgwOCw5ICs4MDgsOSBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyB4Y2FsbF9jYWxsX2Z1bmN0aW9uOwogCi12b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaShjcHVtYXNrX3QgbWFzaykKK3ZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCiB7Ci0JeGNhbGxfZGVsaXZlcigodTY0KSAmeGNhbGxfY2FsbF9mdW5jdGlvbiwgMCwgMCwgJm1hc2spOworCXhjYWxsX2RlbGl2ZXIoKHU2NCkgJnhjYWxsX2NhbGxfZnVuY3Rpb24sIDAsIDAsIG1hc2spOwogfQogCiBleHRlcm4gdW5zaWduZWQgbG9uZyB4Y2FsbF9jYWxsX2Z1bmN0aW9uX3NpbmdsZTsKQEAgLTg1MCw3ICs4NTAsNyBAQAogCiB2b2lkIHNtcF90c2Jfc3luYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQlzbXBfY2FsbF9mdW5jdGlvbl9tYXNrKG1tLT5jcHVfdm1fbWFzaywgdHNiX3N5bmMsIG1tLCAxKTsKKwlzbXBfY2FsbF9mdW5jdGlvbl9tYW55KG1tX2NwdW1hc2sobW0pLCB0c2Jfc3luYywgbW0sIDEpOwogfQogCiBleHRlcm4gdW5zaWduZWQgbG9uZyB4Y2FsbF9mbHVzaF90bGJfbW07CkBAIC0xMDU1LDEzICsxMDU1LDEzIEBACiAJaW50IGNwdSA9IGdldF9jcHUoKTsKIAogCWlmIChhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSA9PSAxKSB7Ci0JCW1tLT5jcHVfdm1fbWFzayA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CisJCWNwdW1hc2tfY29weShtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihjcHUpKTsKIAkJZ290byBsb2NhbF9mbHVzaF9hbmRfb3V0OwogCX0KIAogCXNtcF9jcm9zc19jYWxsX21hc2tlZCgmeGNhbGxfZmx1c2hfdGxiX21tLAogCQkJICAgICAgY3R4LCAwLCAwLAotCQkJICAgICAgJm1tLT5jcHVfdm1fbWFzayk7CisJCQkgICAgICBtbV9jcHVtYXNrKG1tKSk7CiAKIGxvY2FsX2ZsdXNoX2FuZF9vdXQ6CiAJX19mbHVzaF90bGJfbW0oY3R4LCBTRUNPTkRBUllfQ09OVEVYVCk7CkBAIC0xMDc1LDExICsxMDc1LDExIEBACiAJaW50IGNwdSA9IGdldF9jcHUoKTsKIAogCWlmIChtbSA9PSBjdXJyZW50LT5tbSAmJiBhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSA9PSAxKQotCQltbS0+Y3B1X3ZtX21hc2sgPSBjcHVtYXNrX29mX2NwdShjcHUpOworCQljcHVtYXNrX2NvcHkobW1fY3B1bWFzayhtbSksIGNwdW1hc2tfb2YoY3B1KSk7CiAJZWxzZQogCQlzbXBfY3Jvc3NfY2FsbF9tYXNrZWQoJnhjYWxsX2ZsdXNoX3RsYl9wZW5kaW5nLAogCQkJCSAgICAgIGN0eCwgbnIsICh1bnNpZ25lZCBsb25nKSB2YWRkcnMsCi0JCQkJICAgICAgJm1tLT5jcHVfdm1fbWFzayk7CisJCQkJICAgICAgbW1fY3B1bWFzayhtbSkpOwogCiAJX19mbHVzaF90bGJfcGVuZGluZyhjdHgsIG5yLCB2YWRkcnMpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX2lycS5jCmluZGV4IDMzNjlmZWYuLmFiMDM2YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX2lycS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX2lycS5jCkBAIC0zMjYsNyArMzI2LDYgQEAKIAogCWFjdGlvbi0+aGFuZGxlciA9IGhhbmRsZXI7CiAJYWN0aW9uLT5mbGFncyA9IGlycWZsYWdzOwotCWNwdXNfY2xlYXIoYWN0aW9uLT5tYXNrKTsKIAlhY3Rpb24tPm5hbWUgPSBkZXZuYW1lOwogCWFjdGlvbi0+bmV4dCA9IE5VTEw7CiAJYWN0aW9uLT5kZXZfaWQgPSBkZXZfaWQ7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9zbXAuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX3NtcC5jCmluZGV4IDUwYWZhZWQuLjU0ZmIwMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX3NtcC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX3NtcC5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3VuNGRfaW1za19sb2NrLCBmbGFncyk7CiAJY2Nfc2V0X2ltc2soY2NfZ2V0X2ltc2soKSAmIH4weDQwMDApOyAvKiBBbGxvdyBQSUwgMTQgYXMgd2VsbCAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1bjRkX2ltc2tfbG9jaywgZmxhZ3MpOwotCWNwdV9zZXQoY3B1aWQsIGNwdV9vbmxpbmVfbWFwKTsKKwlzZXRfY3B1X29ubGluZShjcHVpZCwgdHJ1ZSk7CiAKIH0KIApAQCAtMjI4LDExICsyMjgsMTAgQEAKIAkvKiBzZXR1cCBjcHUgbGlzdCBmb3IgaXJxIHJvdGF0aW9uICovCiAJZmlyc3QgPSAwOwogCXByZXYgPSAmZmlyc3Q7Ci0JZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykKLQkJaWYgKGNwdV9vbmxpbmUoaSkpIHsKLQkJCSpwcmV2ID0gaTsKLQkJCXByZXYgPSAmY3B1X2RhdGEoaSkubmV4dDsKLQkJfQorCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgeworCQkqcHJldiA9IGk7CisJCXByZXYgPSAmY3B1X2RhdGEoaSkubmV4dDsKKwl9CiAJKnByZXYgPSBmaXJzdDsKIAlsb2NhbF9mbHVzaF9jYWNoZV9hbGwoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1fc21wLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40bV9zbXAuYwppbmRleCA4MDQwMzc2Li45NjBiMTEzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40bV9zbXAuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40bV9zbXAuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKLQljcHVfc2V0KGNwdWlkLCBjcHVfb25saW5lX21hcCk7CisJc2V0X2NwdV9vbmxpbmUoY3B1aWQsIHRydWUpOwogfQogCiAvKgpAQCAtMTg2LDExICsxODYsOSBAQAogCS8qIHNldHVwIGNwdSBsaXN0IGZvciBpcnEgcm90YXRpb24gKi8KIAlmaXJzdCA9IDA7CiAJcHJldiA9ICZmaXJzdDsKLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7Ci0JCWlmIChjcHVfb25saW5lKGkpKSB7Ci0JCQkqcHJldiA9IGk7Ci0JCQlwcmV2ID0gJmNwdV9kYXRhKGkpLm5leHQ7Ci0JCX0KKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKKwkJKnByZXYgPSBpOworCQlwcmV2ID0gJmNwdV9kYXRhKGkpLm5leHQ7CiAJfQogCSpwcmV2ID0gZmlyc3Q7CiAJbG9jYWxfZmx1c2hfY2FjaGVfYWxsKCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2luaXRfNjQuYyBiL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCmluZGV4IDAwMzczY2UuLjJjOGRmZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCisrKyBiL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCkBAIC0xMDkyLDcgKzEwOTIsNyBAQAogCQlpZiAoc3RyY21wKG5hbWUsICJjcHUiKSkKIAkJCWNvbnRpbnVlOwogCQlpZCA9IG1kZXNjX2dldF9wcm9wZXJ0eShtZCwgdGFyZ2V0LCAiaWQiLCBOVUxMKTsKLQkJaWYgKCppZCA8IE5SX0NQVVMpCisJCWlmICgqaWQgPCBucl9jcHVfaWRzKQogCQkJY3B1X3NldCgqaWQsICptYXNrKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3NybW11LmMgYi9hcmNoL3NwYXJjL21tL3NybW11LmMKaW5kZXggZmU3ZWQwOC4uMDZjOWE3ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCisrKyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuYwpAQCAtMTQyNSw3ICsxNDI1LDcgQEAKIAkJCQltaW5fbGluZV9zaXplID0gdmFjX2xpbmVfc2l6ZTsKIAkJCS8vRklYTUU6IGNwdXMgbm90IGNvbnRpZ3VvdXMhIQogCQkJY3B1Kys7Ci0JCQlpZiAoY3B1ID49IE5SX0NQVVMgfHwgIWNwdV9vbmxpbmUoY3B1KSkKKwkJCWlmIChjcHUgPj0gbnJfY3B1X2lkcyB8fCAhY3B1X29ubGluZShjcHUpKQogCQkJCWJyZWFrOwogI2Vsc2UKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggMDZjMDJjMC4uNDUxNjFiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC00MCw2ICs0MCw3IEBACiAJc2VsZWN0IEhBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaWYgWDg2XzMyCiAJc2VsZWN0IEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MKIAlzZWxlY3QgVVNFUl9TVEFDS1RSQUNFX1NVUFBPUlQKKwlzZWxlY3QgSEFWRV9ETUFfQVBJX0RFQlVHCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0daSVAKIAlzZWxlY3QgSEFWRV9LRVJORUxfQlpJUDIKIAlzZWxlY3QgSEFWRV9LRVJORUxfTFpNQQpAQCAtNzg2LDYgKzc4NywxMSBAQAogCSAgIEFkZGl0aW9uYWwgc3VwcG9ydCBmb3IgQU1EIHNwZWNpZmljIE1DRSBmZWF0dXJlcyBzdWNoIGFzCiAJICAgdGhlIERSQU0gRXJyb3IgVGhyZXNob2xkLgogCitjb25maWcgWDg2X01DRV9USFJFU0hPTEQKKwlkZXBlbmRzIG9uIFg4Nl9NQ0VfQU1EIHx8IFg4Nl9NQ0VfSU5URUwKKwlib29sCisJZGVmYXVsdCB5CisKIGNvbmZpZyBYODZfTUNFX05PTkZBVEFMCiAJdHJpc3RhdGUgIkNoZWNrIGZvciBub24tZmF0YWwgZXJyb3JzIG9uIEFNRCBBdGhsb24vRHVyb24gLyBJbnRlbCBQZW50aXVtIDQiCiAJZGVwZW5kcyBvbiBYODZfMzIgJiYgWDg2X01DRQpAQCAtOTI5LDYgKzkzNSwxMiBAQAogCSAgd2l0aCBtYWpvciAyMDMgYW5kIG1pbm9ycyAwIHRvIDMxIGZvciAvZGV2L2NwdS8wL2NwdWlkIHRvCiAJICAvZGV2L2NwdS8zMS9jcHVpZC4KIAorY29uZmlnIFg4Nl9DUFVfREVCVUcKKwl0cmlzdGF0ZSAiL3N5cy9rZXJuZWwvZGVidWcveDg2L2NwdS8qIC0gQ1BVIERlYnVnIHN1cHBvcnQiCisJLS0taGVscC0tLQorCSAgSWYgeW91IHNlbGVjdCB0aGlzIG9wdGlvbiwgdGhpcyB3aWxsIHByb3ZpZGUgdmFyaW91cyB4ODYgQ1BVcworCSAgaW5mb3JtYXRpb24gdGhyb3VnaCBkZWJ1Z2ZzLgorCiBjaG9pY2UKIAlwcm9tcHQgIkhpZ2ggTWVtb3J5IFN1cHBvcnQiCiAJZGVmYXVsdCBISUdITUVNNEcgaWYgIVg4Nl9OVU1BUQpAQCAtMTEyMSw3ICsxMTMzLDcgQEAKIAogY29uZmlnIE5PREVTX1NISUZUCiAJaW50ICJNYXhpbXVtIE5VTUEgTm9kZXMgKGFzIGEgcG93ZXIgb2YgMikiIGlmICFNQVhTTVAKLQlyYW5nZSAxIDkgICBpZiBYODZfNjQKKwlyYW5nZSAxIDkKIAlkZWZhdWx0ICI5IiBpZiBNQVhTTVAKIAlkZWZhdWx0ICI2IiBpZiBYODZfNjQKIAlkZWZhdWx0ICI0IiBpZiBYODZfTlVNQVEKQEAgLTE0MjksNyArMTQ0MSw3IEBACiBjb25maWcgS0VYRUNfSlVNUAogCWJvb2wgImtleGVjIGp1bXAgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQlkZXBlbmRzIG9uIEtFWEVDICYmIEhJQkVSTkFUSU9OICYmIFg4Nl8zMgorCWRlcGVuZHMgb24gS0VYRUMgJiYgSElCRVJOQVRJT04KIAktLS1oZWxwLS0tCiAJICBKdW1wIGJldHdlZW4gb3JpZ2luYWwga2VybmVsIGFuZCBrZXhlY2VkIGtlcm5lbCBhbmQgaW52b2tlCiAJICBjb2RlIGluIHBoeXNpY2FsIGFkZHJlc3MgbW9kZSB2aWEgS0VYRUMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcuY3B1IGIvYXJjaC94ODYvS2NvbmZpZy5jcHUKaW5kZXggYTk1ZWFmMC4uOTI0ZTE1NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZy5jcHUKKysrIGIvYXJjaC94ODYvS2NvbmZpZy5jcHUKQEAgLTQ1NiwyNCArNDU2LDkgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIENQVV9TVVBfQ0VOVEFVUl8zMgorY29uZmlnIENQVV9TVVBfQ0VOVEFVUgogCWRlZmF1bHQgeQogCWJvb2wgIlN1cHBvcnQgQ2VudGF1ciBwcm9jZXNzb3JzIiBpZiBQUk9DRVNTT1JfU0VMRUNUCi0JZGVwZW5kcyBvbiAhNjRCSVQKLQktLS1oZWxwLS0tCi0JICBUaGlzIGVuYWJsZXMgZGV0ZWN0aW9uLCB0dW5pbmdzIGFuZCBxdWlya3MgZm9yIENlbnRhdXIgcHJvY2Vzc29ycwotCi0JICBZb3UgbmVlZCB0aGlzIGVuYWJsZWQgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gcnVuIG9uIGEKLQkgIENlbnRhdXIgQ1BVLiBEaXNhYmxpbmcgdGhpcyBvcHRpb24gb24gb3RoZXIgdHlwZXMgb2YgQ1BVcwotCSAgbWFrZXMgdGhlIGtlcm5lbCBhIHRpbnkgYml0IHNtYWxsZXIuIERpc2FibGluZyBpdCBvbiBhIENlbnRhdXIKLQkgIENQVSBtaWdodCByZW5kZXIgdGhlIGtlcm5lbCB1bmJvb3RhYmxlLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgQ1BVX1NVUF9DRU5UQVVSXzY0Ci0JZGVmYXVsdCB5Ci0JYm9vbCAiU3VwcG9ydCBDZW50YXVyIHByb2Nlc3NvcnMiIGlmIFBST0NFU1NPUl9TRUxFQ1QKLQlkZXBlbmRzIG9uIDY0QklUCiAJLS0taGVscC0tLQogCSAgVGhpcyBlbmFibGVzIGRldGVjdGlvbiwgdHVuaW5ncyBhbmQgcXVpcmtzIGZvciBDZW50YXVyIHByb2Nlc3NvcnMKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvTWFrZWZpbGUgYi9hcmNoL3g4Ni9NYWtlZmlsZQppbmRleCAxODM2MTkxLi5mMDVkOGM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9NYWtlZmlsZQpAQCAtMTUzLDM0ICsxNTMsMjMgQEAKIAogYm9vdCA6PSBhcmNoL3g4Ni9ib290CiAKLVBIT05ZICs9IHpJbWFnZSBiekltYWdlIGNvbXByZXNzZWQgemxpbG8gYnpsaWxvIFwKLSAgICAgICAgIHpkaXNrIGJ6ZGlzayBmZGltYWdlIGZkaW1hZ2UxNDQgZmRpbWFnZTI4OCBpc29pbWFnZSBpbnN0YWxsCitCT09UX1RBUkdFVFMgPSBiemxpbG8gYnpkaXNrIGZkaW1hZ2UgZmRpbWFnZTE0NCBmZGltYWdlMjg4IGlzb2ltYWdlIGluc3RhbGwKKworUEhPTlkgKz0gYnpJbWFnZSAkKEJPT1RfVEFSR0VUUykKIAogIyBEZWZhdWx0IGtlcm5lbCB0byBidWlsZAogYWxsOiBiekltYWdlCiAKICMgS0JVSUxEX0lNQUdFIHNwZWNpZnkgdGFyZ2V0IGltYWdlIGJlaW5nIGJ1aWx0Ci0gICAgICAgICAgICAgICAgICAgIEtCVUlMRF9JTUFHRSA6PSAkKGJvb3QpL2J6SW1hZ2UKLXpJbWFnZSB6bGlsbyB6ZGlzazogS0JVSUxEX0lNQUdFIDo9ICQoYm9vdCkvekltYWdlCitLQlVJTERfSU1BR0UgOj0gJChib290KS9iekltYWdlCiAKLXpJbWFnZSBiekltYWdlOiB2bWxpbnV4CitiekltYWdlOiB2bWxpbnV4CiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSAkKEtCVUlMRF9JTUFHRSkKIAkkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS9hcmNoLyQoVVRTX01BQ0hJTkUpL2Jvb3QKIAkkKFEpbG4gLWZzbiAuLi8uLi94ODYvYm9vdC9iekltYWdlICQob2JqdHJlZSkvYXJjaC8kKFVUU19NQUNISU5FKS9ib290LyRACiAKLWNvbXByZXNzZWQ6IHpJbWFnZQotCi16bGlsbyBiemxpbG86IHZtbGludXgKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpIEJPT1RJTUFHRT0kKEtCVUlMRF9JTUFHRSkgemxpbG8KLQotemRpc2sgYnpkaXNrOiB2bWxpbnV4Ci0JJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSBCT09USU1BR0U9JChLQlVJTERfSU1BR0UpIHpkaXNrCi0KLWZkaW1hZ2UgZmRpbWFnZTE0NCBmZGltYWdlMjg4IGlzb2ltYWdlOiB2bWxpbnV4Ci0JJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSBCT09USU1BR0U9JChLQlVJTERfSU1BR0UpICRACi0KLWluc3RhbGw6Ci0JJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSBCT09USU1BR0U9JChLQlVJTERfSU1BR0UpIGluc3RhbGwKKyQoQk9PVF9UQVJHRVRTKTogdm1saW51eAorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkgJEAKIAogUEhPTlkgKz0gdmRzb19pbnN0YWxsCiB2ZHNvX2luc3RhbGw6CkBAIC0yMDUsNyArMTk0LDMgQEAKICAgZWNobyAgJyAgICAgICAgICAgICAgICAgIEZEQVJHUz0iLi4uIiAgYXJndW1lbnRzIGZvciB0aGUgYm9vdGVkIGtlcm5lbCcKICAgZWNobyAgJyAgICAgICAgICAgICAgICAgIEZESU5JVFJEPWZpbGUgaW5pdHJkIGZvciB0aGUgYm9vdGVkIGtlcm5lbCcKIGVuZGVmCi0KLUNMRUFOX0ZJTEVTICs9IGFyY2gveDg2L2Jvb3QvZmRpbWFnZSBcCi0JICAgICAgIGFyY2gveDg2L2Jvb3QvaW1hZ2UuaXNvIFwKLQkgICAgICAgYXJjaC94ODYvYm9vdC9tdG9vbHMuY29uZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9NYWtlZmlsZSBiL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUKaW5kZXggYzcwZWZmNi4uZmI3MzdjZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9ib290L01ha2VmaWxlCkBAIC02LDI2ICs2LDI0IEBACiAjIGZvciBtb3JlIGRldGFpbHMuCiAjCiAjIENvcHlyaWdodCAoQykgMTk5NCBieSBMaW51cyBUb3J2YWxkcworIyBDaGFuZ2VkIGJ5IG1hbnksIG1hbnkgY29udHJpYnV0b3JzIG92ZXIgdGhlIHllYXJzLgogIwogCiAjIFJPT1RfREVWIHNwZWNpZmllcyB0aGUgZGVmYXVsdCByb290LWRldmljZSB3aGVuIG1ha2luZyB0aGUgaW1hZ2UuCiAjIFRoaXMgY2FuIGJlIGVpdGhlciBGTE9QUFksIENVUlJFTlQsIC9kZXYveHh4eCBvciBlbXB0eSwgaW4gd2hpY2ggY2FzZQogIyB0aGUgZGVmYXVsdCBvZiBGTE9QUFkgaXMgdXNlZCBieSAnYnVpbGQnLgogCi1ST09UX0RFViA6PSBDVVJSRU5UCitST09UX0RFVgk6PSBDVVJSRU5UCiAKICMgSWYgeW91IHdhbnQgdG8gcHJlc2V0IHRoZSBTVkdBIG1vZGUsIHVuY29tbWVudCB0aGUgbmV4dCBsaW5lIGFuZAogIyBzZXQgU1ZHQV9NT0RFIHRvIHdoYXRldmVyIG51bWJlciB5b3Ugd2FudC4KICMgU2V0IGl0IHRvIC1EU1ZHQV9NT0RFPU5PUk1BTF9WR0EgaWYgeW91IGp1c3Qgd2FudCB0aGUgRUdBL1ZHQSBtb2RlLgogIyBUaGUgbnVtYmVyIGlzIHRoZSBzYW1lIGFzIHlvdSB3b3VsZCBvcmRpbmFyaWx5IHByZXNzIGF0IGJvb3R1cC4KIAotU1ZHQV9NT0RFIDo9IC1EU1ZHQV9NT0RFPU5PUk1BTF9WR0EKK1NWR0FfTU9ERQk6PSAtRFNWR0FfTU9ERT1OT1JNQUxfVkdBCiAKLSMgSWYgeW91IHdhbnQgdGhlIFJBTSBkaXNrIGRldmljZSwgZGVmaW5lIHRoaXMgdG8gYmUgdGhlIHNpemUgaW4gYmxvY2tzLgotCi0jUkFNRElTSyA6PSAtRFJBTURJU0s9NTEyCi0KLXRhcmdldHMJCTo9IHZtbGludXguYmluIHNldHVwLmJpbiBzZXR1cC5lbGYgekltYWdlIGJ6SW1hZ2UKK3RhcmdldHMJCTo9IHZtbGludXguYmluIHNldHVwLmJpbiBzZXR1cC5lbGYgYnpJbWFnZQordGFyZ2V0cwkJKz0gZmRpbWFnZSBmZGltYWdlMTQ0IGZkaW1hZ2UyODggaW1hZ2UuaXNvIG10b29scy5jb25mCiBzdWJkaXItCQk6PSBjb21wcmVzc2VkCiAKIHNldHVwLXkJCSs9IGEyMC5vIGNtZGxpbmUubyBjb3B5Lm8gY3B1Lm8gY3B1Y2hlY2subyBlZGQubwpAQCAtNzEsMTcgKzY5LDEzIEBACiBLQlVJTERfQ0ZMQUdTICs9ICAgJChjYWxsIGNjLW9wdGlvbiwtbTMyKQogS0JVSUxEX0FGTEFHUwk6PSAkKEtCVUlMRF9DRkxBR1MpIC1EX19BU1NFTUJMWV9fCiAKLSQob2JqKS96SW1hZ2U6ICBhc2ZsYWdzLXkgOj0gJChTVkdBX01PREUpICQoUkFNRElTSykKLSQob2JqKS9iekltYWdlOiBjY2ZsYWdzLXkgOj0gLURfX0JJR19LRVJORUxfXwotJChvYmopL2J6SW1hZ2U6IGFzZmxhZ3MteSA6PSAkKFNWR0FfTU9ERSkgJChSQU1ESVNLKSAtRF9fQklHX0tFUk5FTF9fCi0kKG9iaikvYnpJbWFnZTogQlVJTERGTEFHUyAgIDo9IC1iCiskKG9iaikvYnpJbWFnZTogYXNmbGFncy15ICA6PSAkKFNWR0FfTU9ERSkKIAogcXVpZXRfY21kX2ltYWdlID0gQlVJTEQgICAkQAotY21kX2ltYWdlID0gJChvYmopL3Rvb2xzL2J1aWxkICQoQlVJTERGTEFHUykgJChvYmopL3NldHVwLmJpbiBcCi0JICAgICQob2JqKS92bWxpbnV4LmJpbiAkKFJPT1RfREVWKSA+ICRACitjbWRfaW1hZ2UgPSAkKG9iaikvdG9vbHMvYnVpbGQgJChvYmopL3NldHVwLmJpbiAkKG9iaikvdm1saW51eC5iaW4gXAorCSQoUk9PVF9ERVYpID4gJEAKIAotJChvYmopL3pJbWFnZSAkKG9iaikvYnpJbWFnZTogJChvYmopL3NldHVwLmJpbiBcCi0JCQkgICAgICAkKG9iaikvdm1saW51eC5iaW4gJChvYmopL3Rvb2xzL2J1aWxkIEZPUkNFCiskKG9iaikvYnpJbWFnZTogJChvYmopL3NldHVwLmJpbiAkKG9iaikvdm1saW51eC5iaW4gJChvYmopL3Rvb2xzL2J1aWxkIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsaW1hZ2UpCiAJQGVjaG8gJ0tlcm5lbDogJEAgaXMgcmVhZHknICcgKCMnYGNhdCAudmVyc2lvbmAnKScKIApAQCAtMTE2LDkgKzExMCwxMSBAQAogJChvYmopL2NvbXByZXNzZWQvdm1saW51eDogRk9SQ0UKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKG9iaikvY29tcHJlc3NlZCAkQAogCi0jIFNldCB0aGlzIGlmIHlvdSB3YW50IHRvIHBhc3MgYXBwZW5kIGFyZ3VtZW50cyB0byB0aGUgemRpc2svZmRpbWFnZS9pc29pbWFnZSBrZXJuZWwKKyMgU2V0IHRoaXMgaWYgeW91IHdhbnQgdG8gcGFzcyBhcHBlbmQgYXJndW1lbnRzIHRvIHRoZQorIyBiemRpc2svZmRpbWFnZS9pc29pbWFnZSBrZXJuZWwKIEZEQVJHUyA9Ci0jIFNldCB0aGlzIGlmIHlvdSB3YW50IGFuIGluaXRyZCBpbmNsdWRlZCB3aXRoIHRoZSB6ZGlzay9mZGltYWdlL2lzb2ltYWdlIGtlcm5lbAorIyBTZXQgdGhpcyBpZiB5b3Ugd2FudCBhbiBpbml0cmQgaW5jbHVkZWQgd2l0aCB0aGUKKyMgYnpkaXNrL2ZkaW1hZ2UvaXNvaW1hZ2Uga2VybmVsCiBGRElOSVRSRCA9CiAKIGltYWdlX2NtZGxpbmUgPSBkZWZhdWx0IGxpbnV4ICQoRkRBUkdTKSAkKGlmICQoRkRJTklUUkQpLGluaXRyZD1pbml0cmQuaW1nLCkKQEAgLTEyNyw3ICsxMjMsNyBAQAogCXNlZCAtZSAnc3xAT0JKQHwkKG9iail8ZycgPCAkPCA+ICRACiAKICMgVGhpcyByZXF1aXJlcyB3cml0ZSBhY2Nlc3MgdG8gL2Rldi9mZDAKLXpkaXNrOiAkKEJPT1RJTUFHRSkgJChvYmopL210b29scy5jb25mCitiemRpc2s6ICQob2JqKS9iekltYWdlICQob2JqKS9tdG9vbHMuY29uZgogCU1UT09MU1JDPSQob2JqKS9tdG9vbHMuY29uZiBtZm9ybWF0IGE6CQkJOyBzeW5jCiAJc3lzbGludXggL2Rldi9mZDAJCQkJCTsgc3luYwogCWVjaG8gJyQoaW1hZ2VfY21kbGluZSknIHwgXApAQCAtMTM1LDEwICsxMzEsMTAgQEAKIAlpZiBbIC1mICckKEZESU5JVFJEKScgXSA7IHRoZW4gXAogCQlNVE9PTFNSQz0kKG9iaikvbXRvb2xzLmNvbmYgbWNvcHkgJyQoRkRJTklUUkQpJyBhOmluaXRyZC5pbWcgOyBcCiAJZmkKLQlNVE9PTFNSQz0kKG9iaikvbXRvb2xzLmNvbmYgbWNvcHkgJChCT09USU1BR0UpIGE6bGludXgJOyBzeW5jCisJTVRPT0xTUkM9JChvYmopL210b29scy5jb25mIG1jb3B5ICQob2JqKS9iekltYWdlIGE6bGludXgJOyBzeW5jCiAKICMgVGhlc2UgcmVxdWlyZSBiZWluZyByb290IG9yIGhhdmluZyBzeXNsaW51eCAyLjAyIG9yIGhpZ2hlciBpbnN0YWxsZWQKLWZkaW1hZ2UgZmRpbWFnZTE0NDogJChCT09USU1BR0UpICQob2JqKS9tdG9vbHMuY29uZgorZmRpbWFnZSBmZGltYWdlMTQ0OiAkKG9iaikvYnpJbWFnZSAkKG9iaikvbXRvb2xzLmNvbmYKIAlkZCBpZj0vZGV2L3plcm8gb2Y9JChvYmopL2ZkaW1hZ2UgYnM9MTAyNCBjb3VudD0xNDQwCiAJTVRPT0xTUkM9JChvYmopL210b29scy5jb25mIG1mb3JtYXQgdjoJCQk7IHN5bmMKIAlzeXNsaW51eCAkKG9iaikvZmRpbWFnZQkJCQkJOyBzeW5jCkBAIC0xNDcsOSArMTQzLDkgQEAKIAlpZiBbIC1mICckKEZESU5JVFJEKScgXSA7IHRoZW4gXAogCQlNVE9PTFNSQz0kKG9iaikvbXRvb2xzLmNvbmYgbWNvcHkgJyQoRkRJTklUUkQpJyB2OmluaXRyZC5pbWcgOyBcCiAJZmkKLQlNVE9PTFNSQz0kKG9iaikvbXRvb2xzLmNvbmYgbWNvcHkgJChCT09USU1BR0UpIHY6bGludXgJOyBzeW5jCisJTVRPT0xTUkM9JChvYmopL210b29scy5jb25mIG1jb3B5ICQob2JqKS9iekltYWdlIHY6bGludXgJOyBzeW5jCiAKLWZkaW1hZ2UyODg6ICQoQk9PVElNQUdFKSAkKG9iaikvbXRvb2xzLmNvbmYKK2ZkaW1hZ2UyODg6ICQob2JqKS9iekltYWdlICQob2JqKS9tdG9vbHMuY29uZgogCWRkIGlmPS9kZXYvemVybyBvZj0kKG9iaikvZmRpbWFnZSBicz0xMDI0IGNvdW50PTI4ODAKIAlNVE9PTFNSQz0kKG9iaikvbXRvb2xzLmNvbmYgbWZvcm1hdCB3OgkJCTsgc3luYwogCXN5c2xpbnV4ICQob2JqKS9mZGltYWdlCQkJCQk7IHN5bmMKQEAgLTE1OCw5ICsxNTQsOSBAQAogCWlmIFsgLWYgJyQoRkRJTklUUkQpJyBdIDsgdGhlbiBcCiAJCU1UT09MU1JDPSQob2JqKS9tdG9vbHMuY29uZiBtY29weSAnJChGRElOSVRSRCknIHc6aW5pdHJkLmltZyA7IFwKIAlmaQotCU1UT09MU1JDPSQob2JqKS9tdG9vbHMuY29uZiBtY29weSAkKEJPT1RJTUFHRSkgdzpsaW51eAk7IHN5bmMKKwlNVE9PTFNSQz0kKG9iaikvbXRvb2xzLmNvbmYgbWNvcHkgJChvYmopL2J6SW1hZ2UgdzpsaW51eAk7IHN5bmMKIAotaXNvaW1hZ2U6ICQoQk9PVElNQUdFKQoraXNvaW1hZ2U6ICQob2JqKS9iekltYWdlCiAJLXJtIC1yZiAkKG9iaikvaXNvaW1hZ2UKIAlta2RpciAkKG9iaikvaXNvaW1hZ2UKIAlmb3IgaSBpbiBsaWIgbGliNjQgc2hhcmUgZW5kIDsgZG8gXApAQCAtMTcwLDcgKzE2Niw3IEBACiAJCWZpIDsgXAogCQlpZiBbICQkaSA9IGVuZCBdIDsgdGhlbiBleGl0IDEgOyBmaSA7IFwKIAlkb25lCi0JY3AgJChCT09USU1BR0UpICQob2JqKS9pc29pbWFnZS9saW51eAorCWNwICQob2JqKS9iekltYWdlICQob2JqKS9pc29pbWFnZS9saW51eAogCWVjaG8gJyQoaW1hZ2VfY21kbGluZSknID4gJChvYmopL2lzb2ltYWdlL2lzb2xpbnV4LmNmZwogCWlmIFsgLWYgJyQoRkRJTklUUkQpJyBdIDsgdGhlbiBcCiAJCWNwICckKEZESU5JVFJEKScgJChvYmopL2lzb2ltYWdlL2luaXRyZC5pbWcgOyBcCkBAIC0xODEsMTIgKzE3NywxMyBAQAogCWlzb2h5YnJpZCAkKG9iaikvaW1hZ2UuaXNvIDI+L2Rldi9udWxsIHx8IHRydWUKIAlybSAtcmYgJChvYmopL2lzb2ltYWdlCiAKLXpsaWxvOiAkKEJPT1RJTUFHRSkKK2J6bGlsbzogJChvYmopL2J6SW1hZ2UKIAlpZiBbIC1mICQoSU5TVEFMTF9QQVRIKS92bWxpbnV6IF07IHRoZW4gbXYgJChJTlNUQUxMX1BBVEgpL3ZtbGludXogJChJTlNUQUxMX1BBVEgpL3ZtbGludXoub2xkOyBmaQogCWlmIFsgLWYgJChJTlNUQUxMX1BBVEgpL1N5c3RlbS5tYXAgXTsgdGhlbiBtdiAkKElOU1RBTExfUEFUSCkvU3lzdGVtLm1hcCAkKElOU1RBTExfUEFUSCkvU3lzdGVtLm9sZDsgZmkKLQljYXQgJChCT09USU1BR0UpID4gJChJTlNUQUxMX1BBVEgpL3ZtbGludXoKKwljYXQgJChvYmopL2J6SW1hZ2UgPiAkKElOU1RBTExfUEFUSCkvdm1saW51egogCWNwIFN5c3RlbS5tYXAgJChJTlNUQUxMX1BBVEgpLwogCWlmIFsgLXggL3NiaW4vbGlsbyBdOyB0aGVuIC9zYmluL2xpbG87IGVsc2UgL2V0Yy9saWxvL2luc3RhbGw7IGZpCiAKIGluc3RhbGw6Ci0Jc2ggJChzcmN0cmVlKS8kKHNyYykvaW5zdGFsbC5zaCAkKEtFUk5FTFJFTEVBU0UpICQoQk9PVElNQUdFKSBTeXN0ZW0ubWFwICIkKElOU1RBTExfUEFUSCkiCisJc2ggJChzcmN0cmVlKS8kKHNyYykvaW5zdGFsbC5zaCAkKEtFUk5FTFJFTEVBU0UpICQob2JqKS9iekltYWdlIFwKKwkJU3lzdGVtLm1hcCAiJChJTlNUQUxMX1BBVEgpIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9oZWFkZXIuUyBiL2FyY2gveDg2L2Jvb3QvaGVhZGVyLlMKaW5kZXggN2NjZmY0OC4uNWQ4NGQxYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9oZWFkZXIuUworKysgYi9hcmNoL3g4Ni9ib290L2hlYWRlci5TCkBAIC0yNCwxMiArMjQsOCBAQAogI2luY2x1ZGUgImJvb3QuaCIKICNpbmNsdWRlICJvZmZzZXRzLmgiCiAKLVNFVFVQU0VDVFMJPSA0CQkJLyogZGVmYXVsdCBuciBvZiBzZXR1cC1zZWN0b3JzICovCiBCT09UU0VHCQk9IDB4MDdDMAkJLyogb3JpZ2luYWwgYWRkcmVzcyBvZiBib290LXNlY3RvciAqLwotU1lTU0VHCQk9IERFRl9TWVNTRUcJCS8qIHN5c3RlbSBsb2FkZWQgYXQgMHgxMDAwMCAoNjU1MzYpICovCi1TWVNTSVpFCQk9IERFRl9TWVNTSVpFCQkvKiBzeXN0ZW0gc2l6ZTogIyBvZiAxNi1ieXRlIGNsaWNrcyAqLwotCQkJCQkvKiB0byBiZSBsb2FkZWQgKi8KLVJPT1RfREVWCT0gMAkJCS8qIFJPT1RfREVWIGlzIG5vdyB3cml0dGVuIGJ5ICJidWlsZCIgKi8KK1NZU1NFRwkJPSAweDEwMDAJCS8qIGhpc3RvcmljYWwgbG9hZCBhZGRyZXNzID4+IDQgKi8KIAogI2lmbmRlZiBTVkdBX01PREUKICNkZWZpbmUgU1ZHQV9NT0RFIEFTS19WR0EKQEAgLTk3LDEyICs5MywxMiBAQAogCS5zZWN0aW9uICIuaGVhZGVyIiwgImEiCiAJLmdsb2JsCWhkcgogaGRyOgotc2V0dXBfc2VjdHM6CS5ieXRlIFNFVFVQU0VDVFMKK3NldHVwX3NlY3RzOgkuYnl0ZSAwCQkJLyogRmlsbGVkIGluIGJ5IGJ1aWxkLmMgKi8KIHJvb3RfZmxhZ3M6CS53b3JkIFJPT1RfUkRPTkxZCi1zeXNzaXplOgkubG9uZyBTWVNTSVpFCi1yYW1fc2l6ZToJLndvcmQgUkFNRElTSworc3lzc2l6ZToJLmxvbmcgMAkJCS8qIEZpbGxlZCBpbiBieSBidWlsZC5jICovCityYW1fc2l6ZToJLndvcmQgMAkJCS8qIE9ic29sZXRlICovCiB2aWRfbW9kZToJLndvcmQgU1ZHQV9NT0RFCi1yb290X2RldjoJLndvcmQgUk9PVF9ERVYKK3Jvb3RfZGV2Ogkud29yZCAwCQkJLyogRmlsbGVkIGluIGJ5IGJ1aWxkLmMgKi8KIGJvb3RfZmxhZzoJLndvcmQgMHhBQTU1CiAKIAkjIG9mZnNldCA1MTIsIGVudHJ5IHBvaW50CkBAIC0xMjMsMTQgKzExOSwxNSBAQAogCQkJCQkjIG9yIGVsc2Ugb2xkIGxvYWRsaW4tMS41IHdpbGwgZmFpbCkKIAkJLmdsb2JsIHJlYWxtb2RlX3N3dGNoCiByZWFsbW9kZV9zd3RjaDoJLndvcmQJMCwgMAkJIyBkZWZhdWx0X3N3aXRjaCwgU0VUVVBTRUcKLXN0YXJ0X3N5c19zZWc6CS53b3JkCVNZU1NFRworc3RhcnRfc3lzX3NlZzoJLndvcmQJU1lTU0VHCQkjIG9ic29sZXRlIGFuZCBtZWFuaW5nbGVzcywgYnV0IGp1c3QKKwkJCQkJIyBpbiBjYXNlIHNvbWV0aGluZyBkZWNpZGVkIHRvICJ1c2UiIGl0CiAJCS53b3JkCWtlcm5lbF92ZXJzaW9uLTUxMiAjIHBvaW50aW5nIHRvIGtlcm5lbCB2ZXJzaW9uIHN0cmluZwogCQkJCQkjIGFib3ZlIHNlY3Rpb24gb2YgaGVhZGVyIGlzIGNvbXBhdGlibGUKIAkJCQkJIyB3aXRoIGxvYWRsaW4tMS41IChoZWFkZXIgdjEuNSkuIERvbid0CiAJCQkJCSMgY2hhbmdlIGl0LgogCi10eXBlX29mX2xvYWRlcjoJLmJ5dGUJMAkJIyA9IDAsIG9sZCBvbmUgKExJTE8sIExvYWRsaW4sCi0JCQkJCSMgICAgICBCb290bGluLCBTWVNMWCwgYm9vdHNlY3QuLi4pCit0eXBlX29mX2xvYWRlcjoJLmJ5dGUJMAkJIyAwIG1lYW5zIGFuY2llbnQgYm9vdGxvYWRlciwgbmV3ZXIKKwkJCQkJIyBib290bG9hZGVycyBrbm93IHRvIGNoYW5nZSB0aGlzLgogCQkJCQkjIFNlZSBEb2N1bWVudGF0aW9uL2kzODYvYm9vdC50eHQgZm9yCiAJCQkJCSMgYXNzaWduZWQgaWRzCiAKQEAgLTE0MiwxMSArMTM5LDcgQEAKIAkJCQkJIyBzcGFjZSBiZWhpbmQgc2V0dXAuUyBjYW4gYmUgdXNlZCBmb3IKIAkJCQkJIyBoZWFwIHB1cnBvc2VzLgogCQkJCQkjIE9ubHkgdGhlIGxvYWRlciBrbm93cyB3aGF0IGlzIGZyZWUKLSNpZm5kZWYgX19CSUdfS0VSTkVMX18KLQkJLmJ5dGUJMAotI2Vsc2UKIAkJLmJ5dGUJTE9BREVEX0hJR0gKLSNlbmRpZgogCiBzZXR1cF9tb3ZlX3NpemU6IC53b3JkICAweDgwMDAJCSMgc2l6ZSB0byBtb3ZlLCB3aGVuIHNldHVwIGlzIG5vdAogCQkJCQkjIGxvYWRlZCBhdCAweDkwMDAwLiBXZSB3aWxsIG1vdmUgc2V0dXAKQEAgLTE1NywxMSArMTUwLDcgQEAKIAogY29kZTMyX3N0YXJ0OgkJCQkjIGhlcmUgbG9hZGVycyBjYW4gcHV0IGEgZGlmZmVyZW50CiAJCQkJCSMgc3RhcnQgYWRkcmVzcyBmb3IgMzItYml0IGNvZGUuCi0jaWZuZGVmIF9fQklHX0tFUk5FTF9fCi0JCS5sb25nCTB4MTAwMAkJIyAgIDB4MTAwMCA9IGRlZmF1bHQgZm9yIHpJbWFnZQotI2Vsc2UKIAkJLmxvbmcJMHgxMDAwMDAJIyAweDEwMDAwMCA9IGRlZmF1bHQgZm9yIGJpZyBrZXJuZWwKLSNlbmRpZgogCiByYW1kaXNrX2ltYWdlOgkubG9uZwkwCQkjIGFkZHJlc3Mgb2YgbG9hZGVkIHJhbWRpc2sgaW1hZ2UKIAkJCQkJIyBIZXJlIHRoZSBsb2FkZXIgcHV0cyB0aGUgMzItYml0CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3BtLmMgYi9hcmNoL3g4Ni9ib290L3BtLmMKaW5kZXggODVhMWNkOC4uODA2MmY4OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9wbS5jCisrKyBiL2FyY2gveDg2L2Jvb3QvcG0uYwpAQCAtMzMsNDcgKzMzLDYgQEAKIH0KIAogLyoKLSAqIEEgekltYWdlIGtlcm5lbCBpcyBsb2FkZWQgYXQgMHgxMDAwMCBidXQgd2FudHMgdG8gcnVuIGF0IDB4MTAwMC4KLSAqIEEgYnpJbWFnZSBrZXJuZWwgaXMgbG9hZGVkIGFuZCBydW5zIGF0IDB4MTAwMDAwLgotICovCi1zdGF0aWMgdm9pZCBtb3ZlX2tlcm5lbF9hcm91bmQodm9pZCkKLXsKLQkvKiBOb3RlOiByZWx5IG9uIHRoZSBjb21waWxlLXRpbWUgb3B0aW9uIGhlcmUgcmF0aGVyIHRoYW4KLQkgICB0aGUgTE9BREVEX0hJR0ggZmxhZy4gIFRoZSBRZW11IGtlcm5lbCBsb2FkZXIgdW5jb25kaXRpb25hbGx5Ci0JICAgc2V0cyB0aGUgbG9hZGZsYWdzIHRvIHplcm8uICovCi0jaWZuZGVmIF9fQklHX0tFUk5FTF9fCi0JdTE2IGRzdF9zZWcsIHNyY19zZWc7Ci0JdTMyIHN5c3NpemU7Ci0KLQlkc3Rfc2VnID0gIDB4MTAwMCA+PiA0OwotCXNyY19zZWcgPSAweDEwMDAwID4+IDQ7Ci0Jc3lzc2l6ZSA9IGJvb3RfcGFyYW1zLmhkci5zeXNzaXplOyAvKiBTaXplIGluIDE2LWJ5dGUgcGFyYWdyYXBocyAqLwotCi0Jd2hpbGUgKHN5c3NpemUpIHsKLQkJaW50IHBhcmFzICA9IChzeXNzaXplID49IDB4MTAwMCkgPyAweDEwMDAgOiBzeXNzaXplOwotCQlpbnQgZHdvcmRzID0gcGFyYXMgPDwgMjsKLQotCQlhc20gdm9sYXRpbGUoInB1c2h3ICUlZXMgOyAiCi0JCQkgICAgICJwdXNodyAlJWRzIDsgIgotCQkJICAgICAibW92dyAlMSwlJWVzIDsgIgotCQkJICAgICAibW92dyAlMiwlJWRzIDsgIgotCQkJICAgICAieG9ydyAlJWRpLCUlZGkgOyAiCi0JCQkgICAgICJ4b3J3ICUlc2ksJSVzaSA7ICIKLQkJCSAgICAgInJlcDttb3ZzbCA7ICIKLQkJCSAgICAgInBvcHcgJSVkcyA7ICIKLQkJCSAgICAgInBvcHcgJSVlcyIKLQkJCSAgICAgOiAiK2MiIChkd29yZHMpCi0JCQkgICAgIDogInIiIChkc3Rfc2VnKSwgInIiIChzcmNfc2VnKQotCQkJICAgICA6ICJlc2kiLCAiZWRpIik7Ci0KLQkJc3lzc2l6ZSAtPSBwYXJhczsKLQkJZHN0X3NlZyArPSBwYXJhczsKLQkJc3JjX3NlZyArPSBwYXJhczsKLQl9Ci0jZW5kaWYKLX0KLQotLyoKICAqIERpc2FibGUgYWxsIGludGVycnVwdHMgYXQgdGhlIGxlZ2FjeSBQSUMuCiAgKi8KIHN0YXRpYyB2b2lkIG1hc2tfYWxsX2ludGVycnVwdHModm9pZCkKQEAgLTE0Nyw5ICsxMDYsNiBAQAogCS8qIEhvb2sgYmVmb3JlIGxlYXZpbmcgcmVhbCBtb2RlLCBhbHNvIGRpc2FibGVzIGludGVycnVwdHMgKi8KIAlyZWFsbW9kZV9zd2l0Y2hfaG9vaygpOwogCi0JLyogTW92ZSB0aGUga2VybmVsL3NldHVwIHRvIHRoZWlyIGZpbmFsIHJlc3RpbmcgcGxhY2VzICovCi0JbW92ZV9rZXJuZWxfYXJvdW5kKCk7Ci0KIAkvKiBFbmFibGUgdGhlIEEyMCBnYXRlICovCiAJaWYgKGVuYWJsZV9hMjAoKSkgewogCQlwdXRzKCJBMjAgZ2F0ZSBub3QgcmVzcG9uZGluZywgdW5hYmxlIHRvIGJvb3QuLi5cbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9wbWp1bXAuUyBiL2FyY2gveDg2L2Jvb3QvcG1qdW1wLlMKaW5kZXggMDE5YzE3YS4uM2UwZWRjNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9wbWp1bXAuUworKysgYi9hcmNoL3g4Ni9ib290L3BtanVtcC5TCkBAIC00Nyw2ICs0Nyw3IEBACiBFTkRQUk9DKHByb3RlY3RlZF9tb2RlX2p1bXApCiAKIAkuY29kZTMyCisJLnNlY3Rpb24gIi50ZXh0MzIiLCJheCIKIEdMT0JBTChpbl9wbTMyKQogCSMgU2V0IHVwIGRhdGEgc2VnbWVudHMgZm9yIGZsYXQgMzItYml0IG1vZGUKIAltb3ZsCSVlY3gsICVkcwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9zZXR1cC5sZCBiL2FyY2gveDg2L2Jvb3Qvc2V0dXAubGQKaW5kZXggZGY5MjM0Yi4uYmI4ZGMyZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9zZXR1cC5sZAorKysgYi9hcmNoL3g4Ni9ib290L3NldHVwLmxkCkBAIC0xNyw3ICsxNyw4IEBACiAJLmhlYWRlcgkJOiB7ICooLmhlYWRlcikgfQogCS5pbml0dGV4dAk6IHsgKiguaW5pdHRleHQpIH0KIAkuaW5pdGRhdGEJOiB7ICooLmluaXRkYXRhKSB9Ci0JLnRleHQJCTogeyAqKC50ZXh0KikgfQorCS50ZXh0CQk6IHsgKigudGV4dCkgfQorCS50ZXh0MzIJCTogeyAqKC50ZXh0MzIpIH0KIAogCS4gPSBBTElHTigxNik7CiAJLnJvZGF0YQkJOiB7ICooLnJvZGF0YSopIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvdG9vbHMvYnVpbGQuYyBiL2FyY2gveDg2L2Jvb3QvdG9vbHMvYnVpbGQuYwppbmRleCA0NGRjMTkyLi5lZTNhNGVhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3Rvb2xzL2J1aWxkLmMKKysrIGIvYXJjaC94ODYvYm9vdC90b29scy9idWlsZC5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAogc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKIHsKLQlkaWUoIlVzYWdlOiBidWlsZCBbLWJdIHNldHVwIHN5c3RlbSBbcm9vdGRldl0gWz4gaW1hZ2VdIik7CisJZGllKCJVc2FnZTogYnVpbGQgc2V0dXAgc3lzdGVtIFtyb290ZGV2XSBbPiBpbWFnZV0iKTsKIH0KIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiogYXJndikKQEAgLTE0NSwxMSArMTQ1LDYgQEAKIAl2b2lkICprZXJuZWw7CiAJdTMyIGNyYyA9IDB4ZmZmZmZmZmZVTDsKIAotCWlmIChhcmdjID4gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItYiIpKQotCSAgewotCSAgICBpc19iaWdfa2VybmVsID0gMTsKLQkgICAgYXJnYy0tLCBhcmd2Kys7Ci0JICB9CiAJaWYgKChhcmdjIDwgMykgfHwgKGFyZ2MgPiA0KSkKIAkJdXNhZ2UoKTsKIAlpZiAoYXJnYyA+IDMpIHsKQEAgLTIxNiw4ICsyMTEsNiBAQAogCQlkaWUoIlVuYWJsZSB0byBtbWFwICclcyc6ICVtIiwgYXJndlsyXSk7CiAJLyogTnVtYmVyIG9mIDE2LWJ5dGUgcGFyYWdyYXBocywgaW5jbHVkaW5nIHNwYWNlIGZvciBhIDQtYnl0ZSBDUkMgKi8KIAlzeXNfc2l6ZSA9IChzeiArIDE1ICsgNCkgLyAxNjsKLQlpZiAoIWlzX2JpZ19rZXJuZWwgJiYgc3lzX3NpemUgPiBERUZfU1lTU0laRSkKLQkJZGllKCJTeXN0ZW0gaXMgdG9vIGJpZy4gVHJ5IHVzaW5nIGJ6SW1hZ2Ugb3IgbW9kdWxlcy4iKTsKIAogCS8qIFBhdGNoIHRoZSBzZXR1cCBjb2RlIHdpdGggdGhlIGFwcHJvcHJpYXRlIHNpemUgcGFyYW1ldGVycyAqLwogCWJ1ZlsweDFmMV0gPSBzZXR1cF9zZWN0b3JzLTE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ZpZGVvLXZnYS5jIGIvYXJjaC94ODYvYm9vdC92aWRlby12Z2EuYwppbmRleCA1ZDQ3NDJlLi45NWQ4NmNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3ZpZGVvLXZnYS5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmdhLmMKQEAgLTEyOSw0MSArMTI5LDQ1IEBACiAJcmV0dXJuIChpbmIoMHgzY2MpICYgMSkgPyAweDNkNCA6IDB4M2I0OwogfQogCi1zdGF0aWMgdm9pZCB2Z2Ffc2V0XzQ4MF9zY2FubGluZXMoaW50IGVuZCkKK3N0YXRpYyB2b2lkIHZnYV9zZXRfNDgwX3NjYW5saW5lcyhpbnQgbGluZXMpCiB7Ci0JdTE2IGNydGM7Ci0JdTggIGNzZWw7CisJdTE2IGNydGM7CQkvKiBDUlRDIGJhc2UgYWRkcmVzcyAqLworCXU4ICBjc2VsOwkJLyogQ1JUQyBtaXNjZWxsYW5lb3VzIG91dHB1dCByZWdpc3RlciAqLworCXU4ICBvdmZ3OwkJLyogQ1JUQyBvdmVyZmxvdyByZWdpc3RlciAqLworCWludCBlbmQgPSBsaW5lcy0xOwogCiAJY3J0YyA9IHZnYV9jcnRjKCk7CiAKKwlvdmZ3ID0gMHgzYyB8ICgoZW5kID4+ICg4LTEpKSAmIDB4MDIpIHwgKChlbmQgPj4gKDktNikpICYgMHg0MCk7CisKIAlvdXRfaWR4KDB4MGMsIGNydGMsIDB4MTEpOyAvKiBWZXJ0aWNhbCBzeW5jIGVuZCwgdW5sb2NrIENSMC03ICovCiAJb3V0X2lkeCgweDBiLCBjcnRjLCAweDA2KTsgLyogVmVydGljYWwgdG90YWwgKi8KLQlvdXRfaWR4KDB4M2UsIGNydGMsIDB4MDcpOyAvKiBWZXJ0aWNhbCBvdmVyZmxvdyAqLworCW91dF9pZHgob3ZmdywgY3J0YywgMHgwNyk7IC8qIFZlcnRpY2FsIG92ZXJmbG93ICovCiAJb3V0X2lkeCgweGVhLCBjcnRjLCAweDEwKTsgLyogVmVydGljYWwgc3luYyBzdGFydCAqLwotCW91dF9pZHgoZW5kLCBjcnRjLCAweDEyKTsgLyogVmVydGljYWwgZGlzcGxheSBlbmQgKi8KKwlvdXRfaWR4KGVuZCwgIGNydGMsIDB4MTIpOyAvKiBWZXJ0aWNhbCBkaXNwbGF5IGVuZCAqLwogCW91dF9pZHgoMHhlNywgY3J0YywgMHgxNSk7IC8qIFZlcnRpY2FsIGJsYW5rIHN0YXJ0ICovCiAJb3V0X2lkeCgweDA0LCBjcnRjLCAweDE2KTsgLyogVmVydGljYWwgYmxhbmsgZW5kICovCiAJY3NlbCA9IGluYigweDNjYyk7CiAJY3NlbCAmPSAweDBkOwogCWNzZWwgfD0gMHhlMjsKLQlvdXRiKGNzZWwsIDB4M2NjKTsKKwlvdXRiKGNzZWwsIDB4M2MyKTsKIH0KIAogc3RhdGljIHZvaWQgdmdhX3NldF84MHgzMCh2b2lkKQogewotCXZnYV9zZXRfNDgwX3NjYW5saW5lcygweGRmKTsKKwl2Z2Ffc2V0XzQ4MF9zY2FubGluZXMoMzAqMTYpOwogfQogCiBzdGF0aWMgdm9pZCB2Z2Ffc2V0XzgweDM0KHZvaWQpCiB7CiAJdmdhX3NldF8xNGZvbnQoKTsKLQl2Z2Ffc2V0XzQ4MF9zY2FubGluZXMoMHhkYik7CisJdmdhX3NldF80ODBfc2NhbmxpbmVzKDM0KjE0KTsKIH0KIAogc3RhdGljIHZvaWQgdmdhX3NldF84MHg2MCh2b2lkKQogewogCXZnYV9zZXRfOGZvbnQoKTsKLQl2Z2Ffc2V0XzQ4MF9zY2FubGluZXMoMHhkZik7CisJdmdhX3NldF80ODBfc2NhbmxpbmVzKDYwKjgpOwogfQogCiBzdGF0aWMgaW50IHZnYV9zZXRfbW9kZShzdHJ1Y3QgbW9kZV9pbmZvICptb2RlKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCmluZGV4IDRlZjk0OWMuLmRmOGEzMDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKQEAgLTc1LDcgKzc1LDcgQEAKICNkZWZpbmUgc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrIHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YODZfVlNNUAorI2lmZGVmIENPTkZJR19YODZfNjQKIGV4dGVybiBpbnQgaXNfdnNtcF9ib3godm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgaXNfdnNtcF9ib3godm9pZCkKQEAgLTEwOCw2ICsxMDgsMTYgQEAKIGV4dGVybiB1NjQgbmF0aXZlX2FwaWNfaWNyX3JlYWQodm9pZCk7CiAKICNpZmRlZiBDT05GSUdfWDg2X1gyQVBJQworLyoKKyAqIE1ha2UgcHJldmlvdXMgbWVtb3J5IG9wZXJhdGlvbnMgZ2xvYmFsbHkgdmlzaWJsZSBiZWZvcmUKKyAqIHNlbmRpbmcgdGhlIElQSSB0aHJvdWdoIHgyYXBpYyB3cm1zci4gV2UgbmVlZCBhIHNlcmlhbGl6aW5nIGluc3RydWN0aW9uIG9yCisgKiBtZmVuY2UgZm9yIHRoaXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB4MmFwaWNfd3Jtc3JfZmVuY2Uodm9pZCkKK3sKKwlhc20gdm9sYXRpbGUoIm1mZW5jZSIgOiA6IDogIm1lbW9yeSIpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX2FwaWNfbXNyX3dyaXRlKHUzMiByZWcsIHUzMiB2KQogewogCWlmIChyZWcgPT0gQVBJQ19ERlIgfHwgcmVnID09IEFQSUNfSUQgfHwgcmVnID09IEFQSUNfTERSIHx8CkBAIC0xODQsNiArMTk0LDkgQEAKIHsKIAlyZXR1cm4gMDsKIH0KKworI2RlZmluZQl4MmFwaWMJMAorCiAjZW5kaWYKIAogZXh0ZXJuIGludCBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KHZvaWQpOwpAQCAtMzc5LDYgKzM5Miw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhY2tfQVBJQ19pcnEodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIAkvKgogCSAqIGFja19BUElDX2lycSgpIGFjdHVhbGx5IGdldHMgY29tcGlsZWQgYXMgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24KIAkgKiAuLi4geXVtbWllLgpAQCAtMzg2LDYgKzQwMCw3IEBACiAKIAkvKiBEb2NzIHNheSB1c2UgMCBmb3IgZnV0dXJlIGNvbXBhdGliaWxpdHkgKi8KIAlhcGljX3dyaXRlKEFQSUNfRU9JLCAwKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRlZmF1bHRfZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KQpAQCAtNDc0LDEwICs0ODksMTkgQEAKIAlyZXR1cm4gcGh5c2lkX2lzc2V0KHJlYWRfYXBpY19pZCgpLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGRlZmF1bHRfcGh5c19wa2dfaWQoaW50IGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpCit7CisJcmV0dXJuIGNwdWlkX2FwaWMgPj4gaW5kZXhfbXNiOworfQorCitleHRlcm4gaW50IGRlZmF1bHRfYXBpY2lkX3RvX25vZGUoaW50IGxvZ2ljYWxfYXBpY2lkKTsKKworI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CiBkZWZhdWx0X2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaykKIHsKLQlyZXR1cm4gY3B1bWFza19iaXRzKGNwdW1hc2spWzBdOworCXJldHVybiBjcHVtYXNrX2JpdHMoY3B1bWFzaylbMF0gJiBBUElDX0FMTF9DUFVTOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludApAQCAtNDkxLDE1ICs1MTUsNiBAQAogCXJldHVybiAodW5zaWduZWQgaW50KShtYXNrMSAmIG1hc2syICYgbWFzazMpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBkZWZhdWx0X3BoeXNfcGtnX2lkKGludCBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQotewotCXJldHVybiBjcHVpZF9hcGljID4+IGluZGV4X21zYjsKLX0KLQotZXh0ZXJuIGludCBkZWZhdWx0X2FwaWNpZF90b19ub2RlKGludCBsb2dpY2FsX2FwaWNpZCk7Ci0KLSNlbmRpZgotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGVmYXVsdF9jaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCkKIHsKIAlyZXR1cm4gcGh5c2lkX2lzc2V0KGFwaWNpZCwgYml0bWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWNkZWYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWNkZWYuaAppbmRleCA2MzEzNGUzLi5iYzk1MTRmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljZGVmLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY2RlZi5oCkBAIC01Myw2ICs1Myw3IEBACiAjZGVmaW5lCQlBUElDX0VTUl9TRU5ESUxMCTB4MDAwMjAKICNkZWZpbmUJCUFQSUNfRVNSX1JFQ1ZJTEwJMHgwMDA0MAogI2RlZmluZQkJQVBJQ19FU1JfSUxMUkVHQQkweDAwMDgwCisjZGVmaW5lIAlBUElDX0xWVENNQ0kJMHgyZjAKICNkZWZpbmUJQVBJQ19JQ1IJMHgzMDAKICNkZWZpbmUJCUFQSUNfREVTVF9TRUxGCQkweDQwMDAwCiAjZGVmaW5lCQlBUElDX0RFU1RfQUxMSU5DCTB4ODAwMDAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3QuaAppbmRleCA2NTI2Y2YwLi42YmEyM2RkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ib290LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYm9vdC5oCkBAIC0xLDEwICsxLDYgQEAKICNpZm5kZWYgX0FTTV9YODZfQk9PVF9ICiAjZGVmaW5lIF9BU01fWDg2X0JPT1RfSAogCi0vKiBEb24ndCB0b3VjaCB0aGVzZSwgdW5sZXNzIHlvdSByZWFsbHkga25vdyB3aGF0IHlvdSdyZSBkb2luZy4gKi8KLSNkZWZpbmUgREVGX1NZU1NFRwkweDEwMDAKLSNkZWZpbmUgREVGX1NZU1NJWkUJMHg3RjAwCi0KIC8qIEludGVybmFsIHN2Z2Egc3RhcnR1cCBjb25zdGFudHMgKi8KICNkZWZpbmUgTk9STUFMX1ZHQQkweGZmZmYJCS8qIDgweDI1IG1vZGUgKi8KICNkZWZpbmUgRVhURU5ERURfVkdBCTB4ZmZmZQkJLyogODB4NTAgbW9kZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDViMzAxYjcuLmIzODk0YmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTkwLDYgKzkwLDkgQEAKIGludCBzZXRfbWVtb3J5X2FycmF5X3VjKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBhZGRyaW5hcnJheSk7CiBpbnQgc2V0X21lbW9yeV9hcnJheV93Yih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgYWRkcmluYXJyYXkpOwogCitpbnQgc2V0X3BhZ2VzX2FycmF5X3VjKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBhZGRyaW5hcnJheSk7CitpbnQgc2V0X3BhZ2VzX2FycmF5X3diKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBhZGRyaW5hcnJheSk7CisKIC8qCiAgKiBGb3IgbGVnYWN5IGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb2xkIEFQSXMsIGEgZmV3IGZ1bmN0aW9ucwogICogYXJlIHByb3ZpZGVkIHRoYXQgd29yayBvbiBhICJzdHJ1Y3QgcGFnZSIuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVfZGVidWcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdV9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyMjgwMjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVfZGVidWcuaApAQCAtMCwwICsxLDIyNiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9DUFVfREVCVUdfSAorI2RlZmluZSBfQVNNX1g4Nl9DUFVfREVCVUdfSAorCisvKgorICogQ1BVIHg4NiBhcmNoaXRlY3R1cmUgZGVidWcKKyAqCisgKiBDb3B5cmlnaHQoQykgMjAwOSBKYXN3aW5kZXIgU2luZ2ggUmFqcHV0CisgKi8KKworLyogUmVnaXN0ZXIgZmxhZ3MgKi8KK2VudW0gY3B1X2RlYnVnX2JpdCB7CisvKiBNb2RlbCBTcGVjaWZpYyBSZWdpc3RlcnMgKE1TUnMpCQkJCQkqLworCUNQVV9NQ19CSVQsCQkJCS8qIE1hY2hpbmUgQ2hlY2sJKi8KKwlDUFVfTU9OSVRPUl9CSVQsCQkJLyogTW9uaXRvcgkJKi8KKwlDUFVfVElNRV9CSVQsCQkJCS8qIFRpbWUJCQkqLworCUNQVV9QTUNfQklULAkJCQkvKiBQZXJmb3JtYW5jZSBNb25pdG9yCSovCisJQ1BVX1BMQVRGT1JNX0JJVCwJCQkvKiBQbGF0Zm9ybQkJKi8KKwlDUFVfQVBJQ19CSVQsCQkJCS8qIEFQSUMJCQkqLworCUNQVV9QT1dFUk9OX0JJVCwJCQkvKiBQb3dlci1vbgkJKi8KKwlDUFVfQ09OVFJPTF9CSVQsCQkJLyogQ29udHJvbAkJKi8KKwlDUFVfRkVBVFVSRVNfQklULAkJCS8qIEZlYXR1cmVzIGNvbnRyb2wJKi8KKwlDUFVfTEJSQU5DSF9CSVQsCQkJLyogTGFzdCBCcmFuY2gJCSovCisJQ1BVX0JJT1NfQklULAkJCQkvKiBCSU9TCQkJKi8KKwlDUFVfRlJFUV9CSVQsCQkJCS8qIEZyZXF1ZW5jeQkJKi8KKwlDUFVfTVRUUl9CSVQsCQkJCS8qIE1UUlIJCQkqLworCUNQVV9QRVJGX0JJVCwJCQkJLyogUGVyZm9ybWFuY2UJCSovCisJQ1BVX0NBQ0hFX0JJVCwJCQkJLyogQ2FjaGUJCSovCisJQ1BVX1NZU0VOVEVSX0JJVCwJCQkvKiBTeXNlbnRlcgkJKi8KKwlDUFVfVEhFUk1fQklULAkJCQkvKiBUaGVybWFsCQkqLworCUNQVV9NSVNDX0JJVCwJCQkJLyogTWlzY2VsbGFuZW91cwkqLworCUNQVV9ERUJVR19CSVQsCQkJCS8qIERlYnVnCQkqLworCUNQVV9QQVRfQklULAkJCQkvKiBQQVQJCQkqLworCUNQVV9WTVhfQklULAkJCQkvKiBWTVgJCQkqLworCUNQVV9DQUxMX0JJVCwJCQkJLyogU3lzdGVtIENhbGwJCSovCisJQ1BVX0JBU0VfQklULAkJCQkvKiBCQVNFIEFkZHJlc3MJCSovCisJQ1BVX1ZFUl9CSVQsCQkJCS8qIFZlcnNpb24gSUQJCSovCisJQ1BVX0NPTkZfQklULAkJCQkvKiBDb25maWd1cmF0aW9uCSovCisJQ1BVX1NNTV9CSVQsCQkJCS8qIFN5c3RlbSBtZ210IG1vZGUJKi8KKwlDUFVfU1ZNX0JJVCwJCQkJLypTZWN1cmUgVmlydHVhbCBNYWNoaW5lKi8KKwlDUFVfT1NWTV9CSVQsCQkJCS8qIE9TLVZpc2libGUgV29ya2Fyb3VuZCovCisvKiBTdGFuZGFyZCBSZWdpc3RlcnMJCQkJCQkJKi8KKwlDUFVfVFNTX0JJVCwJCQkJLyogVGFzayBTdGFjayBTZWdtZW50CSovCisJQ1BVX0NSX0JJVCwJCQkJLyogQ29udHJvbCBSZWdpc3RlcnMJKi8KKwlDUFVfRFRfQklULAkJCQkvKiBEZXNjcmlwdG9yIFRhYmxlCSovCisvKiBFbmQgb2YgUmVnaXN0ZXJzIGZsYWdzCQkJCQkJKi8KKwlDUFVfUkVHX0FMTF9CSVQsCQkJLyogU2VsZWN0IGFsbCBSZWdpc3RlcnMJKi8KK307CisKKyNkZWZpbmUJQ1BVX1JFR19BTEwJCSh+MCkJCS8qIFNlbGVjdCBhbGwgUmVnaXN0ZXJzCSovCisKKyNkZWZpbmUJQ1BVX01DCQkJKDEgPDwgQ1BVX01DX0JJVCkKKyNkZWZpbmUJQ1BVX01PTklUT1IJCSgxIDw8IENQVV9NT05JVE9SX0JJVCkKKyNkZWZpbmUJQ1BVX1RJTUUJCSgxIDw8IENQVV9USU1FX0JJVCkKKyNkZWZpbmUJQ1BVX1BNQwkJCSgxIDw8IENQVV9QTUNfQklUKQorI2RlZmluZQlDUFVfUExBVEZPUk0JCSgxIDw8IENQVV9QTEFURk9STV9CSVQpCisjZGVmaW5lCUNQVV9BUElDCQkoMSA8PCBDUFVfQVBJQ19CSVQpCisjZGVmaW5lCUNQVV9QT1dFUk9OCQkoMSA8PCBDUFVfUE9XRVJPTl9CSVQpCisjZGVmaW5lCUNQVV9DT05UUk9MCQkoMSA8PCBDUFVfQ09OVFJPTF9CSVQpCisjZGVmaW5lCUNQVV9GRUFUVVJFUwkJKDEgPDwgQ1BVX0ZFQVRVUkVTX0JJVCkKKyNkZWZpbmUJQ1BVX0xCUkFOQ0gJCSgxIDw8IENQVV9MQlJBTkNIX0JJVCkKKyNkZWZpbmUJQ1BVX0JJT1MJCSgxIDw8IENQVV9CSU9TX0JJVCkKKyNkZWZpbmUJQ1BVX0ZSRVEJCSgxIDw8IENQVV9GUkVRX0JJVCkKKyNkZWZpbmUJQ1BVX01UUlIJCSgxIDw8IENQVV9NVFRSX0JJVCkKKyNkZWZpbmUJQ1BVX1BFUkYJCSgxIDw8IENQVV9QRVJGX0JJVCkKKyNkZWZpbmUJQ1BVX0NBQ0hFCQkoMSA8PCBDUFVfQ0FDSEVfQklUKQorI2RlZmluZQlDUFVfU1lTRU5URVIJCSgxIDw8IENQVV9TWVNFTlRFUl9CSVQpCisjZGVmaW5lCUNQVV9USEVSTQkJKDEgPDwgQ1BVX1RIRVJNX0JJVCkKKyNkZWZpbmUJQ1BVX01JU0MJCSgxIDw8IENQVV9NSVNDX0JJVCkKKyNkZWZpbmUJQ1BVX0RFQlVHCQkoMSA8PCBDUFVfREVCVUdfQklUKQorI2RlZmluZQlDUFVfUEFUCQkJKDEgPDwgQ1BVX1BBVF9CSVQpCisjZGVmaW5lCUNQVV9WTVgJCQkoMSA8PCBDUFVfVk1YX0JJVCkKKyNkZWZpbmUJQ1BVX0NBTEwJCSgxIDw8IENQVV9DQUxMX0JJVCkKKyNkZWZpbmUJQ1BVX0JBU0UJCSgxIDw8IENQVV9CQVNFX0JJVCkKKyNkZWZpbmUJQ1BVX1ZFUgkJCSgxIDw8IENQVV9WRVJfQklUKQorI2RlZmluZQlDUFVfQ09ORgkJKDEgPDwgQ1BVX0NPTkZfQklUKQorI2RlZmluZQlDUFVfU01NCQkJKDEgPDwgQ1BVX1NNTV9CSVQpCisjZGVmaW5lCUNQVV9TVk0JCQkoMSA8PCBDUFVfU1ZNX0JJVCkKKyNkZWZpbmUJQ1BVX09TVk0JCSgxIDw8IENQVV9PU1ZNX0JJVCkKKyNkZWZpbmUJQ1BVX1RTUwkJCSgxIDw8IENQVV9UU1NfQklUKQorI2RlZmluZQlDUFVfQ1IJCQkoMSA8PCBDUFVfQ1JfQklUKQorI2RlZmluZQlDUFVfRFQJCQkoMSA8PCBDUFVfRFRfQklUKQorCisvKiBSZWdpc3RlciBmaWxlIGZsYWdzICovCitlbnVtIGNwdV9maWxlX2JpdCB7CisJQ1BVX0lOREVYX0JJVCwJCQkJLyogaW5kZXgJCSovCisJQ1BVX1ZBTFVFX0JJVCwJCQkJLyogdmFsdWUJCSovCit9OworCisjZGVmaW5lCUNQVV9GSUxFX1ZBTFVFCQkJKDEgPDwgQ1BVX1ZBTFVFX0JJVCkKKworLyoKKyAqIERpc3BsYXlGYW1pbHlfRGlzcGxheU1vZGVsCVByb2Nlc3NvciBGYW1pbGllcy9Qcm9jZXNzb3IgTnVtYmVyIFNlcmllcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAwNV8wMSwgMDVfMDIsIDA1XzA0CQlQZW50aXVtLCBQZW50aXVtIHdpdGggTU1YCisgKgorICogMDZfMDEJCQlQZW50aXVtIFBybworICogMDZfMDMsIDA2XzA1CQkJUGVudGl1bSBJSSBYZW9uLCBQZW50aXVtIElJCisgKiAwNl8wNywgMDZfMDgsIDA2XzBBLCAwNl8wQglQZW50aXVtIElJSSBYZW9uLCBQZW50dW0gSUlJCisgKgorICogMDZfMDksIDA2MEQJCQlQZW50aXVtIE0KKyAqCisgKiAwNl8wRQkJCUNvcmUgRHVvLCBDb3JlIFNvbG8KKyAqCisgKiAwNl8wRgkJCVhlb24gMzAwMCwgMzIwMCwgNTEwMCwgNTMwMCwgNzMwMCBzZXJpZXMsCisgKgkJCQlDb3JlIDIgUXVhZCwgQ29yZSAyIEV4dHJlbWUsIENvcmUgMiBEdW8sCisgKgkJCQlQZW50aXVtIGR1YWwtY29yZQorICogMDZfMTcJCQlYZW9uIDUyMDAsIDU0MDAgc2VyaWVzLCBDb3JlIDIgUXVhZCBROTY1MAorICoKKyAqIDA2XzFDCQkJQXRvbQorICoKKyAqIDBGXzAwLCAwRl8wMSwgMEZfMDIJCVhlb24sIFhlb24gTVAsIFBlbnRpdW0gNAorICogMEZfMDMsIDBGXzA0CQkJWGVvbiwgWGVvbiBNUCwgUGVudGl1bSA0LCBQZW50aXVtIEQKKyAqCisgKiAwRl8wNgkJCVhlb24gNzEwMCwgNTAwMCBTZXJpZXMsIFhlb24gTVAsCisgKgkJCQlQZW50aXVtIDQsIFBlbnRpdW0gRAorICovCisKKy8qIFJlZ2lzdGVyIHByb2Nlc3NvcnMgYml0cyAqLworZW51bSBjcHVfcHJvY2Vzc29yX2JpdCB7CisJQ1BVX05PTkUsCisvKiBJbnRlbCAqLworCUNQVV9JTlRFTF9QRU5USVVNX0JJVCwKKwlDUFVfSU5URUxfUDZfQklULAorCUNQVV9JTlRFTF9QRU5USVVNX01fQklULAorCUNQVV9JTlRFTF9DT1JFX0JJVCwKKwlDUFVfSU5URUxfQ09SRTJfQklULAorCUNQVV9JTlRFTF9BVE9NX0JJVCwKKwlDUFVfSU5URUxfWEVPTl9QNF9CSVQsCisJQ1BVX0lOVEVMX1hFT05fTVBfQklULAorLyogQU1EICovCisJQ1BVX0FNRF9LNl9CSVQsCisJQ1BVX0FNRF9LN19CSVQsCisJQ1BVX0FNRF9LOF9CSVQsCisJQ1BVX0FNRF8wRl9CSVQsCisJQ1BVX0FNRF8xMF9CSVQsCisJQ1BVX0FNRF8xMV9CSVQsCit9OworCisjZGVmaW5lCUNQVV9JTlRFTF9QRU5USVVNCSgxIDw8IENQVV9JTlRFTF9QRU5USVVNX0JJVCkKKyNkZWZpbmUJQ1BVX0lOVEVMX1A2CQkoMSA8PCBDUFVfSU5URUxfUDZfQklUKQorI2RlZmluZQlDUFVfSU5URUxfUEVOVElVTV9NCSgxIDw8IENQVV9JTlRFTF9QRU5USVVNX01fQklUKQorI2RlZmluZQlDUFVfSU5URUxfQ09SRQkJKDEgPDwgQ1BVX0lOVEVMX0NPUkVfQklUKQorI2RlZmluZQlDUFVfSU5URUxfQ09SRTIJCSgxIDw8IENQVV9JTlRFTF9DT1JFMl9CSVQpCisjZGVmaW5lCUNQVV9JTlRFTF9BVE9NCQkoMSA8PCBDUFVfSU5URUxfQVRPTV9CSVQpCisjZGVmaW5lCUNQVV9JTlRFTF9YRU9OX1A0CSgxIDw8IENQVV9JTlRFTF9YRU9OX1A0X0JJVCkKKyNkZWZpbmUJQ1BVX0lOVEVMX1hFT05fTVAJKDEgPDwgQ1BVX0lOVEVMX1hFT05fTVBfQklUKQorCisjZGVmaW5lCUNQVV9JTlRFTF9QWAkJKENQVV9JTlRFTF9QNiB8IENQVV9JTlRFTF9QRU5USVVNX00pCisjZGVmaW5lCUNQVV9JTlRFTF9DT1JFWAkJKENQVV9JTlRFTF9DT1JFIHwgQ1BVX0lOVEVMX0NPUkUyKQorI2RlZmluZQlDUFVfSU5URUxfWEVPTgkJKENQVV9JTlRFTF9YRU9OX1A0IHwgQ1BVX0lOVEVMX1hFT05fTVApCisjZGVmaW5lCUNQVV9DT19BVAkJKENQVV9JTlRFTF9DT1JFIHwgQ1BVX0lOVEVMX0FUT00pCisjZGVmaW5lCUNQVV9DMl9BVAkJKENQVV9JTlRFTF9DT1JFMiB8IENQVV9JTlRFTF9BVE9NKQorI2RlZmluZQlDUFVfQ1hfQVQJCShDUFVfSU5URUxfQ09SRVggfCBDUFVfSU5URUxfQVRPTSkKKyNkZWZpbmUJQ1BVX0NYX1hFCQkoQ1BVX0lOVEVMX0NPUkVYIHwgQ1BVX0lOVEVMX1hFT04pCisjZGVmaW5lCUNQVV9QNl9YRQkJKENQVV9JTlRFTF9QNiB8IENQVV9JTlRFTF9YRU9OKQorI2RlZmluZQlDUFVfUE1fQ09fQVQJCShDUFVfSU5URUxfUEVOVElVTV9NIHwgQ1BVX0NPX0FUKQorI2RlZmluZQlDUFVfQzJfQVRfWEUJCShDUFVfQzJfQVQgfCBDUFVfSU5URUxfWEVPTikKKyNkZWZpbmUJQ1BVX0NYX0FUX1hFCQkoQ1BVX0NYX0FUIHwgQ1BVX0lOVEVMX1hFT04pCisjZGVmaW5lCUNQVV9QNl9DWF9BVAkJKENQVV9JTlRFTF9QNiB8IENQVV9DWF9BVCkKKyNkZWZpbmUJQ1BVX1A2X0NYX1hFCQkoQ1BVX1A2X1hFIHwgQ1BVX0lOVEVMX0NPUkVYKQorI2RlZmluZQlDUFVfUDZfQ1hfQVRfWEUJCShDUFVfSU5URUxfUDYgfCBDUFVfQ1hfQVRfWEUpCisjZGVmaW5lCUNQVV9QTV9DWF9BVF9YRQkJKENQVV9JTlRFTF9QRU5USVVNX00gfCBDUFVfQ1hfQVRfWEUpCisjZGVmaW5lCUNQVV9QTV9DWF9BVAkJKENQVV9JTlRFTF9QRU5USVVNX00gfCBDUFVfQ1hfQVQpCisjZGVmaW5lCUNQVV9QTV9DWF9YRQkJKENQVV9JTlRFTF9QRU5USVVNX00gfCBDUFVfQ1hfWEUpCisjZGVmaW5lCUNQVV9QWF9DWF9BVAkJKENQVV9JTlRFTF9QWCB8IENQVV9DWF9BVCkKKyNkZWZpbmUJQ1BVX1BYX0NYX0FUX1hFCQkoQ1BVX0lOVEVMX1BYIHwgQ1BVX0NYX0FUX1hFKQorCisvKiBTZWxlY3QgYWxsIHN1cHBvcnRlZCBJbnRlbCBDUFVzICovCisjZGVmaW5lCUNQVV9JTlRFTF9BTEwJCShDUFVfSU5URUxfUEVOVElVTSB8IENQVV9QWF9DWF9BVF9YRSkKKworI2RlZmluZQlDUFVfQU1EX0s2CQkoMSA8PCBDUFVfQU1EX0s2X0JJVCkKKyNkZWZpbmUJQ1BVX0FNRF9LNwkJKDEgPDwgQ1BVX0FNRF9LN19CSVQpCisjZGVmaW5lCUNQVV9BTURfSzgJCSgxIDw8IENQVV9BTURfSzhfQklUKQorI2RlZmluZQlDUFVfQU1EXzBGCQkoMSA8PCBDUFVfQU1EXzBGX0JJVCkKKyNkZWZpbmUJQ1BVX0FNRF8xMAkJKDEgPDwgQ1BVX0FNRF8xMF9CSVQpCisjZGVmaW5lCUNQVV9BTURfMTEJCSgxIDw8IENQVV9BTURfMTFfQklUKQorCisjZGVmaW5lCUNQVV9LMTBfUExVUwkJKENQVV9BTURfMTAgfCBDUFVfQU1EXzExKQorI2RlZmluZQlDUFVfSzBGX1BMVVMJCShDUFVfQU1EXzBGIHwgQ1BVX0sxMF9QTFVTKQorI2RlZmluZQlDUFVfSzhfUExVUwkJKENQVV9BTURfSzggfCBDUFVfSzBGX1BMVVMpCisjZGVmaW5lCUNQVV9LN19QTFVTCQkoQ1BVX0FNRF9LNyB8IENQVV9LOF9QTFVTKQorCisvKiBTZWxlY3QgYWxsIHN1cHBvcnRlZCBBTUQgQ1BVcyAqLworI2RlZmluZQlDUFVfQU1EX0FMTAkJKENQVV9BTURfSzYgfCBDUFVfSzdfUExVUykKKworLyogU2VsZWN0IGFsbCBzdXBwb3J0ZWQgQ1BVcyAqLworI2RlZmluZQlDUFVfQUxMCQkJKENQVV9JTlRFTF9BTEwgfCBDUFVfQU1EX0FMTCkKKworI2RlZmluZSBNQVhfQ1BVX0ZJTEVTCQk1MTIKKworc3RydWN0IGNwdV9wcml2YXRlIHsKKwl1bnNpZ25lZAkJY3B1OworCXVuc2lnbmVkCQl0eXBlOworCXVuc2lnbmVkCQlyZWc7CisJdW5zaWduZWQJCWZpbGU7Cit9OworCitzdHJ1Y3QgY3B1X2RlYnVnX2Jhc2UgeworCWNoYXIJCQkqbmFtZTsJCS8qIFJlZ2lzdGVyIG5hbWUJKi8KKwl1bnNpZ25lZAkJZmxhZzsJCS8qIFJlZ2lzdGVyIGZsYWcJKi8KKwl1bnNpZ25lZAkJd3JpdGU7CQkvKiBSZWdpc3RlciB3cml0ZSBmbGFnCSovCit9OworCisvKgorICogQ3VycmVudGx5IGl0IGxvb2tzIHNpbWlsYXIgdG8gY3B1X2RlYnVnX2Jhc2UgYnV0IG9uY2Ugd2UgYWRkIG1vcmUgZmlsZXMKKyAqIGNwdV9maWxlX2Jhc2Ugd2lsbCBnbyBpbiBkaWZmZXJlbnQgZGlyZWN0aW9uCisgKi8KK3N0cnVjdCBjcHVfZmlsZV9iYXNlIHsKKwljaGFyCQkJKm5hbWU7CQkvKiBSZWdpc3RlciBmaWxlIG5hbWUJKi8KKwl1bnNpZ25lZAkJZmxhZzsJCS8qIFJlZ2lzdGVyIGZpbGUgZmxhZwkqLworCXVuc2lnbmVkCQl3cml0ZTsJCS8qIFJlZ2lzdGVyIHdyaXRlIGZsYWcJKi8KK307CisKK3N0cnVjdCBjcHVfY3B1WF9iYXNlIHsKKwlzdHJ1Y3QgZGVudHJ5CQkqZGVudHJ5OwkvKiBSZWdpc3RlciBkZW50cnkJKi8KKwlpbnQJCQlpbml0OwkJLyogUmVnaXN0ZXIgaW5kZXggZmlsZQkqLworfTsKKworc3RydWN0IGNwdV9kZWJ1Z19yYW5nZSB7CisJdW5zaWduZWQJCW1pbjsJCS8qIFJlZ2lzdGVyIHJhbmdlIG1pbgkqLworCXVuc2lnbmVkCQltYXg7CQkvKiBSZWdpc3RlciByYW5nZSBtYXgJKi8KKwl1bnNpZ25lZAkJZmxhZzsJCS8qIFN1cHBvcnRlZCBmbGFncwkqLworCXVuc2lnbmVkCQltb2RlbDsJCS8qIFN1cHBvcnRlZCBtb2RlbHMJKi8KK307CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9DUFVfREVCVUdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oCmluZGV4IGRjMjc3MDUuLjU2MjNjNTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmgKQEAgLTkxLDcgKzkxLDYgQEAKICNkZWZpbmUgc3RvcmVfZ2R0KGR0cikgbmF0aXZlX3N0b3JlX2dkdChkdHIpCiAjZGVmaW5lIHN0b3JlX2lkdChkdHIpIG5hdGl2ZV9zdG9yZV9pZHQoZHRyKQogI2RlZmluZSBzdG9yZV90cih0cikgKHRyID0gbmF0aXZlX3N0b3JlX3RyKCkpCi0jZGVmaW5lIHN0b3JlX2xkdChsZHQpIGFzbSgic2xkdCAlMCI6Ij1tIiAobGR0KSkKIAogI2RlZmluZSBsb2FkX1RMUyh0LCBjcHUpIG5hdGl2ZV9sb2FkX3Rscyh0LCBjcHUpCiAjZGVmaW5lIHNldF9sZHQgbmF0aXZlX3NldF9sZHQKQEAgLTExMiw2ICsxMTEsOCBAQAogfQogI2VuZGlmCS8qIENPTkZJR19QQVJBVklSVCAqLwogCisjZGVmaW5lIHN0b3JlX2xkdChsZHQpIGFzbSgic2xkdCAlMCIgOiAiPW0iKGxkdCkpCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfd3JpdGVfaWR0X2VudHJ5KGdhdGVfZGVzYyAqaWR0LCBpbnQgZW50cnksCiAJCQkJCSAgY29uc3QgZ2F0ZV9kZXNjICpnYXRlKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGV2aWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXZpY2UuaAppbmRleCAzYzAzNGY0Li40OTk0YTIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXZpY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXZpY2UuaApAQCAtNiw3ICs2LDcgQEAKIAl2b2lkCSphY3BpX2hhbmRsZTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19YODZfNjQKLXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHM7CitzdHJ1Y3QgZG1hX21hcF9vcHMgKmRtYV9vcHM7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRE1BUgogCXZvaWQgKmlvbW11OyAvKiBob29rIGZvciBJT01NVSBzcGVjaWZpYyBleHRlbnNpb24gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDEzMmExMzQuLmNlYTdiNzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtNyw2ICs3LDggQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtYXR0cnMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3dpb3RsYi5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS1jb2hlcmVudC5oPgpAQCAtMTYsNDcgKzE4LDkgQEAKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlIHg4Nl9kbWFfZmFsbGJhY2tfZGV2OwogZXh0ZXJuIGludCBwYW5pY19vbl9vdmVyZmxvdzsKIAotc3RydWN0IGRtYV9tYXBwaW5nX29wcyB7Ci0JaW50ICAgICAgICAgICAgICgqbWFwcGluZ19lcnJvcikoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkgZG1hX2FkZHJfdCBkbWFfYWRkcik7Ci0Jdm9pZCogICAgICAgICAgICgqYWxsb2NfY29oZXJlbnQpKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwKTsKLQl2b2lkICAgICAgICAgICAgKCpmcmVlX2NvaGVyZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCXZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpOwotCWRtYV9hZGRyX3QgICAgICAoKm1hcF9zaW5nbGUpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBwaHlzX2FkZHJfdCBwdHIsCi0JCQkJc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnVubWFwX3NpbmdsZSkoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsCi0JCQkJc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2luZ2xlX2Zvcl9jcHUpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCi0JCQkJaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqc3luY19zaW5nbGVfZm9yX2RldmljZSkoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKLQkJCQlpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCpzeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCpzeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCpzeW5jX3NnX2Zvcl9jcHUpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCi0JCQkJaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqc3luY19zZ19mb3JfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAotCQkJCWludCBkaXJlY3Rpb24pOwotCWludCAgICAgICAgICAgICAoKm1hcF9zZykoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkJaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCp1bm1hcF9zZykoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAotCQkJCWludCBkaXJlY3Rpb24pOwotCWludCAgICAgICAgICAgICAoKmRtYV9zdXBwb3J0ZWQpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB1NjQgbWFzayk7Ci0JaW50CQlpc19waHlzOwotfTsKK2V4dGVybiBzdHJ1Y3QgZG1hX21hcF9vcHMgKmRtYV9vcHM7CiAKLWV4dGVybiBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmdldF9kbWFfb3BzKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRtYV9tYXBfb3BzICpnZXRfZG1hX29wcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCXJldHVybiBkbWFfb3BzOwpAQCAtNzEsNyArMzUsNyBAQAogLyogTWFrZSBzdXJlIHdlIGtlZXAgdGhlIHNhbWUgYmVoYXZpb3VyICovCiBzdGF0aWMgaW5saW5lIGludCBkbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCiB7Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CiAJaWYgKG9wcy0+bWFwcGluZ19lcnJvcikKIAkJcmV0dXJuIG9wcy0+bWFwcGluZ19lcnJvcihkZXYsIGRtYV9hZGRyKTsKIApAQCAtOTAsMTM3ICs1NCwxNjcgQEAKIAogc3RhdGljIGlubGluZSBkbWFfYWRkcl90CiBkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKLQkgICAgICAgaW50IGRpcmVjdGlvbikKKwkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKKwlkbWFfYWRkcl90IGFkZHI7CiAKLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7Ci0JcmV0dXJuIG9wcy0+bWFwX3NpbmdsZShod2RldiwgdmlydF90b19waHlzKHB0ciksIHNpemUsIGRpcmVjdGlvbik7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcikpOworCWFkZHIgPSBvcHMtPm1hcF9wYWdlKGh3ZGV2LCB2aXJ0X3RvX3BhZ2UocHRyKSwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcpcHRyICYgflBBR0VfTUFTSywgc2l6ZSwKKwkJCSAgICAgZGlyLCBOVUxMKTsKKwlkZWJ1Z19kbWFfbWFwX3BhZ2UoaHdkZXYsIHZpcnRfdG9fcGFnZShwdHIpLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpcHRyICYgflBBR0VfTUFTSywgc2l6ZSwKKwkJCSAgIGRpciwgYWRkciwgdHJ1ZSk7CisJcmV0dXJuIGFkZHI7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwgc2l6ZV90IHNpemUsCi0JCSBpbnQgZGlyZWN0aW9uKQorCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOwogCi0JQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOwotCWlmIChvcHMtPnVubWFwX3NpbmdsZSkKLQkJb3BzLT51bm1hcF9zaW5nbGUoZGV2LCBhZGRyLCBzaXplLCBkaXJlY3Rpb24pOworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKKwlpZiAob3BzLT51bm1hcF9wYWdlKQorCQlvcHMtPnVubWFwX3BhZ2UoZGV2LCBhZGRyLCBzaXplLCBkaXIsIE5VTEwpOworCWRlYnVnX2RtYV91bm1hcF9wYWdlKGRldiwgYWRkciwgc2l6ZSwgZGlyLCB0cnVlKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKIGRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JICAgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKQorCSAgIGludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKKwlpbnQgZW50czsKIAotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKLQlyZXR1cm4gb3BzLT5tYXBfc2coaHdkZXYsIHNnLCBuZW50cywgZGlyZWN0aW9uKTsKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CisJZW50cyA9IG9wcy0+bWFwX3NnKGh3ZGV2LCBzZywgbmVudHMsIGRpciwgTlVMTCk7CisJZGVidWdfZG1hX21hcF9zZyhod2Rldiwgc2csIG5lbnRzLCBlbnRzLCBkaXIpOworCisJcmV0dXJuIGVudHM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCi0JICAgICBpbnQgZGlyZWN0aW9uKQorCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKIAotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CisJZGVidWdfZG1hX3VubWFwX3NnKGh3ZGV2LCBzZywgbmVudHMsIGRpcik7CiAJaWYgKG9wcy0+dW5tYXBfc2cpCi0JCW9wcy0+dW5tYXBfc2coaHdkZXYsIHNnLCBuZW50cywgZGlyZWN0aW9uKTsKKwkJb3BzLT51bm1hcF9zZyhod2Rldiwgc2csIG5lbnRzLCBkaXIsIE5VTEwpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0JCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKKwkJCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoaHdkZXYpOworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoaHdkZXYpOwogCi0JQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKIAlpZiAob3BzLT5zeW5jX3NpbmdsZV9mb3JfY3B1KQotCQlvcHMtPnN5bmNfc2luZ2xlX2Zvcl9jcHUoaHdkZXYsIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbik7CisJCW9wcy0+c3luY19zaW5nbGVfZm9yX2NwdShod2RldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyKTsKKwlkZWJ1Z19kbWFfc3luY19zaW5nbGVfZm9yX2NwdShod2RldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyKTsKIAlmbHVzaF93cml0ZV9idWZmZXJzKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKLQkJCSAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQorCQkJICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7CiAKLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcikpOwogCWlmIChvcHMtPnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UpCi0JCW9wcy0+c3luY19zaW5nbGVfZm9yX2RldmljZShod2RldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyZWN0aW9uKTsKKwkJb3BzLT5zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGh3ZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBkaXIpOworCWRlYnVnX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGh3ZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBkaXIpOwogCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQorCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKIAotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CiAJaWYgKG9wcy0+c3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSkKIAkJb3BzLT5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KGh3ZGV2LCBkbWFfaGFuZGxlLCBvZmZzZXQsCi0JCQkJCSAgICAgICBzaXplLCBkaXJlY3Rpb24pOworCQkJCQkgICAgICAgc2l6ZSwgZGlyKTsKKwlkZWJ1Z19kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShod2RldiwgZG1hX2hhbmRsZSwKKwkJCQkJICAgIG9mZnNldCwgc2l6ZSwgZGlyKTsKIAlmbHVzaF93cml0ZV9idWZmZXJzKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKIAkJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCQkJCSBpbnQgZGlyZWN0aW9uKQorCQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoaHdkZXYpOworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoaHdkZXYpOwogCi0JQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKIAlpZiAob3BzLT5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKQogCQlvcHMtPnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UoaHdkZXYsIGRtYV9oYW5kbGUsCi0JCQkJCQkgIG9mZnNldCwgc2l6ZSwgZGlyZWN0aW9uKTsKKwkJCQkJCSAgb2Zmc2V0LCBzaXplLCBkaXIpOworCWRlYnVnX2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKGh3ZGV2LCBkbWFfaGFuZGxlLAorCQkJCQkgICAgICAgb2Zmc2V0LCBzaXplLCBkaXIpOwogCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBkbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkgICAgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKKwkJICAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7CiAKLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcikpOwogCWlmIChvcHMtPnN5bmNfc2dfZm9yX2NwdSkKLQkJb3BzLT5zeW5jX3NnX2Zvcl9jcHUoaHdkZXYsIHNnLCBuZWxlbXMsIGRpcmVjdGlvbik7CisJCW9wcy0+c3luY19zZ19mb3JfY3B1KGh3ZGV2LCBzZywgbmVsZW1zLCBkaXIpOworCWRlYnVnX2RtYV9zeW5jX3NnX2Zvcl9jcHUoaHdkZXYsIHNnLCBuZWxlbXMsIGRpcik7CiAJZmx1c2hfd3JpdGVfYnVmZmVycygpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGRtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCSAgICAgICBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQorCQkgICAgICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKIAotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CiAJaWYgKG9wcy0+c3luY19zZ19mb3JfZGV2aWNlKQotCQlvcHMtPnN5bmNfc2dfZm9yX2RldmljZShod2Rldiwgc2csIG5lbGVtcywgZGlyZWN0aW9uKTsKKwkJb3BzLT5zeW5jX3NnX2Zvcl9kZXZpY2UoaHdkZXYsIHNnLCBuZWxlbXMsIGRpcik7CisJZGVidWdfZG1hX3N5bmNfc2dfZm9yX2RldmljZShod2Rldiwgc2csIG5lbGVtcywgZGlyKTsKIAogCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKIH0KIAogc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAogCQkJCSAgICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLAotCQkJCSAgICAgIGludCBkaXJlY3Rpb24pCisJCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOworCWRtYV9hZGRyX3QgYWRkcjsKIAotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKLQlyZXR1cm4gb3BzLT5tYXBfc2luZ2xlKGRldiwgcGFnZV90b19waHlzKHBhZ2UpICsgb2Zmc2V0LAotCQkJICAgICAgIHNpemUsIGRpcmVjdGlvbik7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcikpOworCWFkZHIgPSBvcHMtPm1hcF9wYWdlKGRldiwgcGFnZSwgb2Zmc2V0LCBzaXplLCBkaXIsIE5VTEwpOworCWRlYnVnX2RtYV9tYXBfcGFnZShkZXYsIHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyLCBhZGRyLCBmYWxzZSk7CisKKwlyZXR1cm4gYWRkcjsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLAotCQkJCSAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCisJCQkJICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBhZGRyLCBzaXplLCBkaXJlY3Rpb24pOworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKKworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKKwlpZiAob3BzLT51bm1hcF9wYWdlKQorCQlvcHMtPnVubWFwX3BhZ2UoZGV2LCBhZGRyLCBzaXplLCBkaXIsIE5VTEwpOworCWRlYnVnX2RtYV91bm1hcF9wYWdlKGRldiwgYWRkciwgc2l6ZSwgZGlyLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMjY2LDcgKzI2MCw3IEBACiBkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwKIAkJZ2ZwX3QgZ2ZwKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOwogCXZvaWQgKm1lbW9yeTsKIAogCWdmcCAmPSB+KF9fR0ZQX0RNQSB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9ETUEzMik7CkBAIC0yODUsMjAgKzI3OSwyNCBAQAogCWlmICghb3BzLT5hbGxvY19jb2hlcmVudCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gb3BzLT5hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsCi0JCQkJICAgZG1hX2FsbG9jX2NvaGVyZW50X2dmcF9mbGFncyhkZXYsIGdmcCkpOworCW1lbW9yeSA9IG9wcy0+YWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLAorCQkJCSAgICAgZG1hX2FsbG9jX2NvaGVyZW50X2dmcF9mbGFncyhkZXYsIGdmcCkpOworCWRlYnVnX2RtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsICpkbWFfaGFuZGxlLCBtZW1vcnkpOworCisJcmV0dXJuIG1lbW9yeTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkJICAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBidXMpCiB7Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKIAlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7ICAgICAgIC8qIGZvciBwb3J0YWJpbGl0eSAqLwogCiAJaWYgKGRtYV9yZWxlYXNlX2Zyb21fY29oZXJlbnQoZGV2LCBnZXRfb3JkZXIoc2l6ZSksIHZhZGRyKSkKIAkJcmV0dXJuOwogCisJZGVidWdfZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCB2YWRkciwgYnVzKTsKIAlpZiAob3BzLT5mcmVlX2NvaGVyZW50KQogCQlvcHMtPmZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCB2YWRkciwgYnVzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1pLmgKaW5kZXggYmM2ODIxMi4uZmQ4ZjllMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1pLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1pLmgKQEAgLTEsMjIgKzEsMTUgQEAKICNpZm5kZWYgX0FTTV9YODZfRE1JX0gKICNkZWZpbmUgX0FTTV9YODZfRE1JX0gKIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKLSNkZWZpbmUgRE1JX01BWF9EQVRBIDIwNDgKLQotZXh0ZXJuIGludCBkbWlfYWxsb2NfaW5kZXg7Ci1leHRlcm4gY2hhciBkbWlfYWxsb2NfZGF0YVtETUlfTUFYX0RBVEFdOwotCi0vKiBUaGlzIGlzIHNvIGVhcmx5IHRoYXQgdGhlcmUgaXMgbm8gZ29vZCB3YXkgdG8gYWxsb2NhdGUgZHluYW1pYyBtZW1vcnkuCi0gICBBbGxvY2F0ZSBkYXRhIGluIGFuIEJTUyBhcnJheS4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCAqZG1pX2FsbG9jKHVuc2lnbmVkIGxlbikKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19pbml0IHZvaWQgKmRtaV9hbGxvYyh1bnNpZ25lZCBsZW4pCiB7Ci0JaW50IGlkeCA9IGRtaV9hbGxvY19pbmRleDsKLQlpZiAoKGRtaV9hbGxvY19pbmRleCArIGxlbikgPiBETUlfTUFYX0RBVEEpCi0JCXJldHVybiBOVUxMOwotCWRtaV9hbGxvY19pbmRleCArPSBsZW47Ci0JcmV0dXJuIGRtaV9hbGxvY19kYXRhICsgaWR4OworCXJldHVybiBleHRlbmRfYnJrKGxlbiwgc2l6ZW9mKGludCkpOwogfQogCiAvKiBVc2UgZWFybHkgSU8gbWFwcGluZ3MgZm9yIERNSSBiZWNhdXNlIGl0J3MgaW5pdGlhbGl6ZWQgZWFybHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2U4MjAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2U4MjAuaAppbmRleCAwMGQ0MWNlLi43ZWNiYTRkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lODIwLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZTgyMC5oCkBAIC03Miw3ICs3Miw3IEBACiBleHRlcm4gdm9pZCBlODIwX2FkZF9yZWdpb24odTY0IHN0YXJ0LCB1NjQgc2l6ZSwgaW50IHR5cGUpOwogZXh0ZXJuIHZvaWQgZTgyMF9wcmludF9tYXAoY2hhciAqd2hvKTsKIGV4dGVybiBpbnQKLXNhbml0aXplX2U4MjBfbWFwKHN0cnVjdCBlODIwZW50cnkgKmJpb3NtYXAsIGludCBtYXhfbnJfbWFwLCBpbnQgKnBucl9tYXApOworc2FuaXRpemVfZTgyMF9tYXAoc3RydWN0IGU4MjBlbnRyeSAqYmlvc21hcCwgaW50IG1heF9ucl9tYXAsIHUzMiAqcG5yX21hcCk7CiBleHRlcm4gdTY0IGU4MjBfdXBkYXRlX3JhbmdlKHU2NCBzdGFydCwgdTY0IHNpemUsIHVuc2lnbmVkIG9sZF90eXBlLAogCQkJICAgICAgIHVuc2lnbmVkIG5ld190eXBlKTsKIGV4dGVybiB1NjQgZTgyMF9yZW1vdmVfcmFuZ2UodTY0IHN0YXJ0LCB1NjQgc2l6ZSwgdW5zaWduZWQgb2xkX3R5cGUsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeV9hcmNoLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeV9hcmNoLmgKaW5kZXggODU0ZDUzOC4uYzJlNmJlZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnlfYXJjaC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5X2FyY2guaApAQCAtMzMsNiArMzMsOCBAQAogCQkgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0KQogI2VuZGlmCiAKK0JVSUxEX0lOVEVSUlVQVChnZW5lcmljX2ludGVycnVwdCwgR0VORVJJQ19JTlRFUlJVUFRfVkVDVE9SKQorCiAvKgogICogZXZlcnkgcGVudGl1bSBsb2NhbCBBUElDIGhhcyB0d28gJ2xvY2FsIGludGVycnVwdHMnLCB3aXRoIGEKICAqIHNvZnQtZGVmaW5hYmxlIHZlY3RvciBhdHRhY2hlZCB0byBib3RoIGludGVycnVwdHMsIG9uZSBvZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mdHJhY2UuaAppbmRleCBiNTViNGE3Li5kYjI0YzIyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mdHJhY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtNTUsMjkgKzU1LDQgQEAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSICovCiAKLSNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLS8qCi0gKiBTdGFjayBvZiByZXR1cm4gYWRkcmVzc2VzIGZvciBmdW5jdGlvbnMKLSAqIG9mIGEgdGhyZWFkLgotICogVXNlZCBpbiBzdHJ1Y3QgdGhyZWFkX2luZm8KLSAqLwotc3RydWN0IGZ0cmFjZV9yZXRfc3RhY2sgewotCXVuc2lnbmVkIGxvbmcgcmV0OwotCXVuc2lnbmVkIGxvbmcgZnVuYzsKLQl1bnNpZ25lZCBsb25nIGxvbmcgY2FsbHRpbWU7Ci19OwotCi0vKgotICogUHJpbWFyeSBoYW5kbGVyIG9mIGEgZnVuY3Rpb24gcmV0dXJuLgotICogSXQgcmVsYXlzIG9uIGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlci4KLSAqIERlZmluZWQgaW4gZW50cnlfMzIvNjQuUwotICovCi1leHRlcm4gdm9pZCByZXR1cm5fdG9faGFuZGxlcih2b2lkKTsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi8KLQogI2VuZGlmIC8qIF9BU01fWDg2X0ZUUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKaW5kZXggMTc2ZjA1OC4uMDM5ZGI2YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hhcmRpcnEuaApAQCAtMTIsNiArMTIsNyBAQAogCXVuc2lnbmVkIGludCBhcGljX3RpbWVyX2lycXM7CS8qIGFyY2ggZGVwZW5kZW50ICovCiAJdW5zaWduZWQgaW50IGlycV9zcHVyaW91c19jb3VudDsKICNlbmRpZgorCXVuc2lnbmVkIGludCBnZW5lcmljX2lycXM7CS8qIGFyY2ggZGVwZW5kZW50ICovCiAjaWZkZWYgQ09ORklHX1NNUAogCXVuc2lnbmVkIGludCBpcnFfcmVzY2hlZF9jb3VudDsKIAl1bnNpZ25lZCBpbnQgaXJxX2NhbGxfY291bnQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oaWdobWVtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oaWdobWVtLmgKaW5kZXggYmY5Mjc2Yi4uMDE0YzJiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaGlnaG1lbS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hpZ2htZW0uaApAQCAtNjMsNiArNjMsNyBAQAogdm9pZCAqa21hcF9hdG9taWMoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0ga21fdHlwZSB0eXBlKTsKIHZvaWQga3VubWFwX2F0b21pYyh2b2lkICprdmFkZHIsIGVudW0ga21fdHlwZSB0eXBlKTsKIHZvaWQgKmttYXBfYXRvbWljX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUpOwordm9pZCAqa21hcF9hdG9taWNfcHJvdF9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGVudW0ga21fdHlwZSB0eXBlLCBwZ3Byb3RfdCBwcm90KTsKIHN0cnVjdCBwYWdlICprbWFwX2F0b21pY190b19wYWdlKHZvaWQgKnB0cik7CiAKICNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h3X2lycS5oCmluZGV4IDM3MGUxYzguLmI3NjJlYTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h3X2lycS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h3X2lycS5oCkBAIC0yNyw2ICsyNyw3IEBACiAKIC8qIEludGVycnVwdCBoYW5kbGVycyByZWdpc3RlcmVkIGR1cmluZyBpbml0X0lSUSAqLwogZXh0ZXJuIHZvaWQgYXBpY190aW1lcl9pbnRlcnJ1cHQodm9pZCk7CitleHRlcm4gdm9pZCBnZW5lcmljX2ludGVycnVwdCh2b2lkKTsKIGV4dGVybiB2b2lkIGVycm9yX2ludGVycnVwdCh2b2lkKTsKIGV4dGVybiB2b2lkIHNwdXJpb3VzX2ludGVycnVwdCh2b2lkKTsKIGV4dGVybiB2b2lkIHRoZXJtYWxfaW50ZXJydXB0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW5pdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW5pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZmIxYTZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW5pdC5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgX0FTTV9YODZfSU5JVF8zMl9ICisjZGVmaW5lIF9BU01fWDg2X0lOSVRfMzJfSAorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorZXh0ZXJuIHZvaWQgX19pbml0IGVhcmx5X2lvcmVtYXBfcGFnZV90YWJsZV9yYW5nZV9pbml0KHZvaWQpOworI2VuZGlmCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdAora2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJICAgICB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemVfbWFzayk7CisKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBlODIwX3RhYmxlX3N0YXJ0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSBlODIwX3RhYmxlX2VuZDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdGRhdGEgZTgyMF90YWJsZV90b3A7CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9JTklUXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaAppbmRleCA1OWNiNGExLi4zNzNjYzJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCkBAIC0xNjIsNyArMTYyLDggQEAKIGV4dGVybiB2b2lkIGlvYXBpY19pbml0X21hcHBpbmdzKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotZXh0ZXJuIGludCBzYXZlX21hc2tfSU9fQVBJQ19zZXR1cCh2b2lkKTsKK2V4dGVybiBpbnQgc2F2ZV9JT19BUElDX3NldHVwKHZvaWQpOworZXh0ZXJuIHZvaWQgbWFza19JT19BUElDX3NldHVwKHZvaWQpOwogZXh0ZXJuIHZvaWQgcmVzdG9yZV9JT19BUElDX3NldHVwKHZvaWQpOwogZXh0ZXJuIHZvaWQgcmVpbml0X2ludHJfcmVtYXBwZWRfSU9fQVBJQyhpbnQpOwogI2VuZGlmCkBAIC0xNzIsNyArMTczLDcgQEAKIGV4dGVybiBpbnQgc2V0dXBfaW9hcGljX2VudHJ5KGludCBhcGljLCBpbnQgaXJxLAogCQkJICAgICAgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVudHJ5LAogCQkJICAgICAgdW5zaWduZWQgaW50IGRlc3RpbmF0aW9uLCBpbnQgdHJpZ2dlciwKLQkJCSAgICAgIGludCBwb2xhcml0eSwgaW50IHZlY3Rvcik7CisJCQkgICAgICBpbnQgcG9sYXJpdHksIGludCB2ZWN0b3IsIGludCBwaW4pOwogZXh0ZXJuIHZvaWQgaW9hcGljX3dyaXRlX2VudHJ5KGludCBhcGljLCBpbnQgcGluLAogCQkJICAgICAgIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGUpOwogI2Vsc2UgIC8qICFDT05GSUdfWDg2X0lPX0FQSUMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvbW11LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb21tdS5oCmluZGV4IGE2ZWU5ZTYuLmFmMzI2YTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvbW11LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9tbXUuaApAQCAtMyw3ICszLDcgQEAKIAogZXh0ZXJuIHZvaWQgcGNpX2lvbW11X3NodXRkb3duKHZvaWQpOwogZXh0ZXJuIHZvaWQgbm9faW9tbXVfaW5pdCh2b2lkKTsKLWV4dGVybiBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIG5vbW11X2RtYV9vcHM7CitleHRlcm4gc3RydWN0IGRtYV9tYXBfb3BzIG5vbW11X2RtYV9vcHM7CiBleHRlcm4gaW50IGZvcmNlX2lvbW11LCBub19pb21tdTsKIGV4dGVybiBpbnQgaW9tbXVfZGV0ZWN0ZWQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxLmgKaW5kZXggMTA3ZWIyMS4uZjM4NDgxYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxLmgKQEAgLTM2LDYgKzM2LDcgQEAKIGV4dGVybiB2b2lkIGZpeHVwX2lycXModm9pZCk7CiAjZW5kaWYKIAorZXh0ZXJuIHZvaWQgKCpnZW5lcmljX2ludGVycnVwdF9leHRlbnNpb24pKHZvaWQpOwogZXh0ZXJuIHZvaWQgaW5pdF9JUlEodm9pZCk7CiBleHRlcm4gdm9pZCBuYXRpdmVfaW5pdF9JUlEodm9pZCk7CiBleHRlcm4gYm9vbCBoYW5kbGVfaXJxKHVuc2lnbmVkIGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oCmluZGV4IDIwZTFmZDUuLjAzOTY3NjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmgKQEAgLTEsOCArMSw2IEBACiAjaWZuZGVmIF9BU01fWDg2X0lSUV9SRU1BUFBJTkdfSAogI2RlZmluZSBfQVNNX1g4Nl9JUlFfUkVNQVBQSU5HX0gKIAotZXh0ZXJuIGludCB4MmFwaWM7Ci0KICNkZWZpbmUgSVJURV9ERVNUKGRlc3QpICgoeDJhcGljKSA/IGRlc3QgOiBkZXN0IDw8IDgpCiAKICNlbmRpZgkvKiBfQVNNX1g4Nl9JUlFfUkVNQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfdmVjdG9ycy5oCmluZGV4IDhhMjg1ZjMuLjNjYmQ3OWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaApAQCAtMTEyLDYgKzExMiwxMSBAQAogI2RlZmluZSBMT0NBTF9QRVJGX1ZFQ1RPUgkJMHhlZQogCiAvKgorICogR2VuZXJpYyBzeXN0ZW0gdmVjdG9yIGZvciBwbGF0Zm9ybSBzcGVjaWZpYyB1c2UKKyAqLworI2RlZmluZSBHRU5FUklDX0lOVEVSUlVQVF9WRUNUT1IJMHhlZAorCisvKgogICogRmlyc3QgQVBJQyB2ZWN0b3IgYXZhaWxhYmxlIHRvIGRyaXZlcnM6ICh2ZWN0b3JzIDB4MzAtMHhlZSkgd2UKICAqIHN0YXJ0IGF0IDB4MzEoMHg0MSkgdG8gc3ByZWFkIG91dCB2ZWN0b3JzIGV2ZW5seSBiZXR3ZWVuIHByaW9yaXR5CiAgKiBsZXZlbHMuICgweDgwIGlzIHRoZSBzeXNjYWxsIHZlY3RvcikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2tleGVjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZXhlYy5oCmluZGV4IDBjZWI2ZDEuLjMxN2ZmMTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2tleGVjLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va2V4ZWMuaApAQCAtOSwxMyArOSwxMyBAQAogIyBkZWZpbmUgUEFHRVNfTlIJCTQKICNlbHNlCiAjIGRlZmluZSBQQV9DT05UUk9MX1BBR0UJMAotIyBkZWZpbmUgUEFfVEFCTEVfUEFHRQkJMQotIyBkZWZpbmUgUEFHRVNfTlIJCTIKKyMgZGVmaW5lIFZBX0NPTlRST0xfUEFHRQkxCisjIGRlZmluZSBQQV9UQUJMRV9QQUdFCQkyCisjIGRlZmluZSBQQV9TV0FQX1BBR0UJCTMKKyMgZGVmaW5lIFBBR0VTX05SCQk0CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YODZfMzIKICMgZGVmaW5lIEtFWEVDX0NPTlRST0xfQ09ERV9NQVhfU0laRQkyMDQ4Ci0jZW5kaWYKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtMTM2LDEwICsxMzYsMTEgQEAKIAkJdW5zaWduZWQgaW50IGhhc19wYWUsCiAJCXVuc2lnbmVkIGludCBwcmVzZXJ2ZV9jb250ZXh0KTsKICNlbHNlCi1OT1JFVF9UWVBFIHZvaWQKK3Vuc2lnbmVkIGxvbmcKIHJlbG9jYXRlX2tlcm5lbCh1bnNpZ25lZCBsb25nIGluZGlyZWN0aW9uX3BhZ2UsCiAJCXVuc2lnbmVkIGxvbmcgcGFnZV9saXN0LAotCQl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3MpIEFUVFJJQl9OT1JFVDsKKwkJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzLAorCQl1bnNpZ25lZCBpbnQgcHJlc2VydmVfY29udGV4dCk7CiAjZW5kaWYKIAogI2RlZmluZSBBUkNIX0hBU19LSU1BR0VfQVJDSApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbGd1ZXN0X2hjYWxsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9sZ3Vlc3RfaGNhbGwuaAppbmRleCA0Mzg5NDQyLi4wZjRlZTcxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9sZ3Vlc3RfaGNhbGwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9sZ3Vlc3RfaGNhbGwuaApAQCAtMjYsMzYgKzI2LDIwIEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgorI2luY2x1ZGUgPGFzbS9rdm1fcGFyYS5oPgogCiAvKkc6MDMxIEJ1dCBmaXJzdCwgaG93IGRvZXMgb3VyIEd1ZXN0IGNvbnRhY3QgdGhlIEhvc3QgdG8gYXNrIGZvciBwcml2aWxlZ2VkCiAgKiBvcGVyYXRpb25zPyAgVGhlcmUgYXJlIHR3byB3YXlzOiB0aGUgZGlyZWN0IHdheSBpcyB0byBtYWtlIGEgImh5cGVyY2FsbCIsCiAgKiB0byBtYWtlIHJlcXVlc3RzIG9mIHRoZSBIb3N0IEl0c2VsZi4KICAqCi0gKiBPdXIgaHlwZXJjYWxsIG1lY2hhbmlzbSB1c2VzIHRoZSBoaWdoZXN0IHVudXNlZCB0cmFwIGNvZGUgKHRyYXBzIDMyIGFuZAotICogYWJvdmUgYXJlIHVzZWQgYnkgcmVhbCBoYXJkd2FyZSBpbnRlcnJ1cHRzKS4gIEZpZnRlZW4gaHlwZXJjYWxscyBhcmUKKyAqIFdlIHVzZSB0aGUgS1ZNIGh5cGVyY2FsbCBtZWNoYW5pc20uIEVpZ2h0ZWVuIGh5cGVyY2FsbHMgYXJlCiAgKiBhdmFpbGFibGU6IHRoZSBoeXBlcmNhbGwgbnVtYmVyIGlzIHB1dCBpbiB0aGUgJWVheCByZWdpc3RlciwgYW5kIHRoZQotICogYXJndW1lbnRzICh3aGVuIHJlcXVpcmVkKSBhcmUgcGxhY2VkIGluICVlZHgsICVlYnggYW5kICVlY3guICBJZiBhIHJldHVybgorICogYXJndW1lbnRzICh3aGVuIHJlcXVpcmVkKSBhcmUgcGxhY2VkIGluICVlYngsICVlY3ggYW5kICVlZHguICBJZiBhIHJldHVybgogICogdmFsdWUgbWFrZXMgc2Vuc2UsIGl0J3MgcmV0dXJuZWQgaW4gJWVheC4KICAqCiAgKiBHcm9zc2x5IGludmFsaWQgY2FsbHMgcmVzdWx0IGluIFN1ZGRlbiBEZWF0aCBhdCB0aGUgaGFuZHMgb2YgdGhlIHZlbmdlZnVsCiAgKiBIb3N0LCByYXRoZXIgdGhhbiByZXR1cm5pbmcgZmFpbHVyZS4gIFRoaXMgcmVmbGVjdHMgV2luc3RvbiBDaHVyY2hpbGwncwogICogZGVmaW5pdGlvbiBvZiBhIGdlbnRsZW1hbjogInNvbWVvbmUgd2hvIGlzIG9ubHkgcnVkZSBpbnRlbnRpb25hbGx5Ii4gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotaGNhbGwodW5zaWduZWQgbG9uZyBjYWxsLAotICAgICAgdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMykKLXsKLQkvKiAiaW50IiBpcyB0aGUgSW50ZWwgaW5zdHJ1Y3Rpb24gdG8gdHJpZ2dlciBhIHRyYXAuICovCi0JYXNtIHZvbGF0aWxlKCJpbnQgJCIgX19zdHJpbmdpZnkoTEdVRVNUX1RSQVBfRU5UUlkpCi0JCSAgICAgLyogVGhlIGNhbGwgaW4gJWVheCAoYWthICJhIikgbWlnaHQgYmUgb3ZlcndyaXR0ZW4gKi8KLQkJICAgICA6ICI9YSIoY2FsbCkKLQkJICAgICAgIC8qIFRoZSBhcmd1bWVudHMgYXJlIGluICVlYXgsICVlZHgsICVlYnggJiAlZWN4ICovCi0JCSAgICAgOiAiYSIoY2FsbCksICJkIihhcmcxKSwgImIiKGFyZzIpLCAiYyIoYXJnMykKLQkJICAgICAgIC8qICJtZW1vcnkiIG1lYW5zIHRoaXMgbWlnaHQgd3JpdGUgc29tZXdoZXJlIGluIG1lbW9yeS4KLQkJCSogVGhpcyBpc24ndCB0cnVlIGZvciBhbGwgY2FsbHMsIGJ1dCBpdCdzIHNhZmUgdG8gdGVsbAotCQkJKiBnY2MgdGhhdCBpdCBtaWdodCBoYXBwZW4gc28gaXQgZG9lc24ndCBnZXQgY2xldmVyLiAqLwotCQkgICAgIDogIm1lbW9yeSIpOwotCXJldHVybiBjYWxsOwotfQogLyo6Ki8KIAogLyogQ2FuJ3QgdXNlIG91ciBtaW4oKSBtYWNybyBoZXJlOiBuZWVkcyB0byBiZSBhIGNvbnN0YW50ICovCkBAIC02NCw3ICs0OCw3IEBACiAjZGVmaW5lIExIQ0FMTF9SSU5HX1NJWkUgNjQKIHN0cnVjdCBoY2FsbF9hcmdzIHsKIAkvKiBUaGVzZSBtYXAgZGlyZWN0bHkgb250byBlYXgsIGVieCwgZWN4LCBlZHggaW4gc3RydWN0IGxndWVzdF9yZWdzICovCi0JdW5zaWduZWQgbG9uZyBhcmcwLCBhcmcyLCBhcmczLCBhcmcxOworCXVuc2lnbmVkIGxvbmcgYXJnMCwgYXJnMSwgYXJnMiwgYXJnMzsKIH07CiAKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9saW5rYWdlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9saW5rYWdlLmgKaW5kZXggOTMyMGUyYS4uMTJkNTVlNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbGlua2FnZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xpbmthZ2UuaApAQCAtMSwxNCArMSwxMSBAQAogI2lmbmRlZiBfQVNNX1g4Nl9MSU5LQUdFX0gKICNkZWZpbmUgX0FTTV9YODZfTElOS0FHRV9ICiAKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKwogI3VuZGVmIG5vdHJhY2UKICNkZWZpbmUgbm90cmFjZSBfX2F0dHJpYnV0ZV9fKChub19pbnN0cnVtZW50X2Z1bmN0aW9uKSkKIAotI2lmZGVmIENPTkZJR19YODZfNjQKLSNkZWZpbmUgX19BTElHTiAucDJhbGlnbiA0LCwxNQotI2RlZmluZSBfX0FMSUdOX1NUUiAiLnAyYWxpZ24gNCwsMTUiCi0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19YODZfMzIKICNkZWZpbmUgYXNtbGlua2FnZSBDUFBfQVNNTElOS0FHRSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkKIC8qCkBAIC01MCwxNiArNDcsMjAgQEAKIAlfX2FzbWxpbmthZ2VfcHJvdGVjdF9uKHJldCwgImciIChhcmcxKSwgImciIChhcmcyKSwgImciIChhcmczKSwgXAogCQkJICAgICAgImciIChhcmc0KSwgImciIChhcmc1KSwgImciIChhcmc2KSkKIAotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLworCisjaWZkZWYgX19BU1NFTUJMWV9fCiAKICNkZWZpbmUgR0xPQkFMKG5hbWUpCVwKIAkuZ2xvYmwgbmFtZTsJXAogCW5hbWU6CiAKLSNpZmRlZiBDT05GSUdfWDg2X0FMSUdOTUVOVF8xNgotI2RlZmluZSBfX0FMSUdOIC5hbGlnbiAxNiwweDkwCi0jZGVmaW5lIF9fQUxJR05fU1RSICIuYWxpZ24gMTYsMHg5MCIKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9BTElHTk1FTlRfMTYpCisjZGVmaW5lIF9fQUxJR04JCS5wMmFsaWduIDQsIDB4OTAKKyNkZWZpbmUgX19BTElHTl9TVFIJX19zdHJpbmdpZnkoX19BTElHTikKICNlbmRpZgogCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKICNlbmRpZiAvKiBfQVNNX1g4Nl9MSU5LQUdFX0ggKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaAppbmRleCAzMmM2ZTE3Li41NjM5MzNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaApAQCAtMTEsNiArMTEsOCBAQAogICovCiAKICNkZWZpbmUgTUNHX0NUTF9QCSAoMVVMPDw4KSAgIC8qIE1DR19DQVAgcmVnaXN0ZXIgYXZhaWxhYmxlICovCisjZGVmaW5lIE1DR19FWFRfUAkgKDFVTEw8PDkpICAgLyogRXh0ZW5kZWQgcmVnaXN0ZXJzIGF2YWlsYWJsZSAqLworI2RlZmluZSBNQ0dfQ01DSV9QCSAoMVVMTDw8MTApICAvKiBDTUNJIHN1cHBvcnRlZCAqLwogCiAjZGVmaW5lIE1DR19TVEFUVVNfUklQViAgKDFVTDw8MCkgICAvKiByZXN0YXJ0IGlwIHZhbGlkICovCiAjZGVmaW5lIE1DR19TVEFUVVNfRUlQViAgKDFVTDw8MSkgICAvKiBpcCBwb2ludHMgdG8gY29ycmVjdCBpbnN0cnVjdGlvbiAqLwpAQCAtOTAsMTQgKzkyLDI5IEBACiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKK3ZvaWQgbWNlX3NldHVwKHN0cnVjdCBtY2UgKm0pOwogdm9pZCBtY2VfbG9nKHN0cnVjdCBtY2UgKm0pOwogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBzeXNfZGV2aWNlLCBkZXZpY2VfbWNlKTsKIGV4dGVybiB2b2lkICgqdGhyZXNob2xkX2NwdV9jYWxsYmFjaykodW5zaWduZWQgbG9uZyBhY3Rpb24sIHVuc2lnbmVkIGludCBjcHUpOwogCisvKgorICogVG8gc3VwcG9ydCBtb3JlIHRoYW4gMTI4IHdvdWxkIG5lZWQgdG8gZXNjYXBlIHRoZSBwcmVkZWZpbmVkCisgKiBMaW51eCBkZWZpbmVkIGV4dGVuZGVkIGJhbmtzIGZpcnN0LgorICovCisjZGVmaW5lIE1BWF9OUl9CQU5LUyAoTUNFX0VYVEVOREVEX0JBTksgLSAxKQorCiAjaWZkZWYgQ09ORklHX1g4Nl9NQ0VfSU5URUwKIHZvaWQgbWNlX2ludGVsX2ZlYXR1cmVfaW5pdChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOwordm9pZCBjbWNpX2NsZWFyKHZvaWQpOwordm9pZCBjbWNpX3JlZW5hYmxlKHZvaWQpOwordm9pZCBjbWNpX3JlZGlzY292ZXIoaW50IGR5aW5nKTsKK3ZvaWQgY21jaV9yZWNoZWNrKHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBtY2VfaW50ZWxfZmVhdHVyZV9pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgY21jaV9jbGVhcih2b2lkKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGNtY2lfcmVlbmFibGUodm9pZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbWNpX3JlZGlzY292ZXIoaW50IGR5aW5nKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGNtY2lfcmVjaGVjayh2b2lkKSB7fQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfWDg2X01DRV9BTUQKQEAgLTEwNiwxMSArMTIzLDIzIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgbWNlX2FtZF9mZWF0dXJlX2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKSB7IH0KICNlbmRpZgogCi12b2lkIG1jZV9sb2dfdGhlcm1fdGhyb3RfZXZlbnQodW5zaWduZWQgaW50IGNwdSwgX191NjQgc3RhdHVzKTsKK2V4dGVybiBpbnQgbWNlX2F2YWlsYWJsZShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOworCit2b2lkIG1jZV9sb2dfdGhlcm1fdGhyb3RfZXZlbnQoX191NjQgc3RhdHVzKTsKIAogZXh0ZXJuIGF0b21pY190IG1jZV9lbnRyeTsKIAogZXh0ZXJuIHZvaWQgZG9fbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKKwordHlwZWRlZiBERUNMQVJFX0JJVE1BUChtY2VfYmFua3NfdCwgTUFYX05SX0JBTktTKTsKK0RFQ0xBUkVfUEVSX0NQVShtY2VfYmFua3NfdCwgbWNlX3BvbGxfYmFua3MpOworCitlbnVtIG1jcF9mbGFncyB7CisJTUNQX1RJTUVTVEFNUCA9ICgxIDw8IDApLAkvKiBsb2cgdGltZSBzdGFtcCAqLworCU1DUF9VQyA9ICgxIDw8IDEpLAkJLyogbG9nIHVuY29ycmVjdGVkIGVycm9ycyAqLworfTsKK2V4dGVybiB2b2lkIG1hY2hpbmVfY2hlY2tfcG9sbChlbnVtIG1jcF9mbGFncyBmbGFncywgbWNlX2JhbmtzX3QgKmIpOworCiBleHRlcm4gaW50IG1jZV9ub3RpZnlfdXNlcih2b2lkKTsKIAogI2VuZGlmIC8qICFDT05GSUdfWDg2XzMyICovCkBAIC0xMjAsOCArMTQ5LDggQEAKICNlbHNlCiAjZGVmaW5lIG1jaGVja19pbml0KGMpIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgotZXh0ZXJuIHZvaWQgc3RvcF9tY2Uodm9pZCk7Ci1leHRlcm4gdm9pZCByZXN0YXJ0X21jZSh2b2lkKTsKKworZXh0ZXJuIHZvaWQgKCptY2VfdGhyZXNob2xkX3ZlY3Rvcikodm9pZCk7CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9YODZfTUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zaWRlZi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNpZGVmLmgKaW5kZXggNjcwNmIzMC4uNGNjNDhhZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNpZGVmLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNpZGVmLmgKQEAgLTQ3LDYgKzQ3LDcgQEAKICNkZWZpbmUJIE1TSV9BRERSX0RFU1RfSURfTUFTSwkJMHgwMGZmZmYwCiAjZGVmaW5lICBNU0lfQUREUl9ERVNUX0lEKGRlc3QpCQkoKChkZXN0KSA8PCBNU0lfQUREUl9ERVNUX0lEX1NISUZUKSAmIFwKIAkJCQkJIE1TSV9BRERSX0RFU1RfSURfTUFTSykKKyNkZWZpbmUgTVNJX0FERFJfRVhUX0RFU1RfSUQoZGVzdCkJKChkZXN0KSAmIDB4ZmZmZmZmMDApCiAKICNkZWZpbmUgTVNJX0FERFJfSVJfRVhUX0lOVAkJKDEgPDwgNCkKICNkZWZpbmUgTVNJX0FERFJfSVJfU0hWCQkJKDEgPDwgMykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKaW5kZXggZjRlNTA1Zi4uZWM0MWZjMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKQEAgLTgxLDYgKzgxLDExIEBACiAjZGVmaW5lIE1TUl9JQTMyX01DMF9BRERSCQkweDAwMDAwNDAyCiAjZGVmaW5lIE1TUl9JQTMyX01DMF9NSVNDCQkweDAwMDAwNDAzCiAKKy8qIFRoZXNlIGFyZSBjb25zZWN1dGl2ZSBhbmQgbm90IGluIHRoZSBub3JtYWwgNGVyIE1DRSBiYW5rIGJsb2NrICovCisjZGVmaW5lIE1TUl9JQTMyX01DMF9DVEwyCQkweDAwMDAwMjgwCisjZGVmaW5lIENNQ0lfRU4JCQkoMVVMTCA8PCAzMCkKKyNkZWZpbmUgQ01DSV9USFJFU0hPTERfTUFTSwkJMHhmZmZmVUxMCisKICNkZWZpbmUgTVNSX1A2X1BFUkZDVFIwCQkJMHgwMDAwMDBjMQogI2RlZmluZSBNU1JfUDZfUEVSRkNUUjEJCQkweDAwMDAwMGMyCiAjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMAkJCTB4MDAwMDAxODYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfMzJfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfMzJfdHlwZXMuaAppbmRleCBmMWU0YTc5Li4wZjkxNWFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzMyX3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV8zMl90eXBlcy5oCkBAIC0zOSw2ICszOSwxMSBAQAogI2RlZmluZSBfX1ZJUlRVQUxfTUFTS19TSElGVAkzMgogI2VuZGlmCS8qIENPTkZJR19YODZfUEFFICovCiAKKy8qCisgKiBLZXJuZWwgaW1hZ2Ugc2l6ZSBpcyBsaW1pdGVkIHRvIDUxMiBNQiAoc2VlIGluIGFyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMpCisgKi8KKyNkZWZpbmUgS0VSTkVMX0lNQUdFX1NJWkUJKDUxMiAqIDEwMjQgKiAxMDI0KQorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV90eXBlcy5oCmluZGV4IDJkNjI1ZGEuLjgyNmFkMzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlX3R5cGVzLmgKQEAgLTQwLDE0ICs0MCw4IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLXN0cnVjdCBwZ3Byb3Q7Ci0KIGV4dGVybiBpbnQgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwYWdlbnIpOwogZXh0ZXJuIGludCBkZXZtZW1faXNfYWxsb3dlZCh1bnNpZ25lZCBsb25nIHBhZ2Vucik7Ci1leHRlcm4gdm9pZCBtYXBfZGV2bWVtKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCSAgICAgICBzdHJ1Y3QgcGdwcm90IHZtYV9wcm90KTsKLWV4dGVybiB2b2lkIHVubWFwX2Rldm1lbSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJIHN0cnVjdCBwZ3Byb3Qgdm1hX3Byb3QpOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfbG93X3Bmbl9tYXBwZWQ7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfcGZuX21hcHBlZDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCmluZGV4IDA2MTdkNWMuLjc3MjdhYTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaApAQCAtMzE3LDggKzMxNyw2IEBACiAjaWYgUEFHRVRBQkxFX0xFVkVMUyA+PSAzCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKIAl2b2lkICgqc2V0X3B0ZV9hdG9taWMpKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpOwotCXZvaWQgKCpzZXRfcHRlX3ByZXNlbnQpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSk7CiAJdm9pZCAoKnB0ZV9jbGVhcikoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgcHRlX3QgKnB0ZXApOwogCXZvaWQgKCpwbWRfY2xlYXIpKHBtZF90ICpwbWRwKTsKQEAgLTM4OSw3ICszODcsNyBAQAogCiAjZGVmaW5lIHBhcmF2aXJ0X3R5cGUob3ApCQkJCVwKIAlbcGFyYXZpcnRfdHlwZW51bV0gImkiIChQQVJBVklSVF9QQVRDSChvcCkpLAlcCi0JW3BhcmF2aXJ0X29wcHRyXSAibSIgKG9wKQorCVtwYXJhdmlydF9vcHB0cl0gImkiICgmKG9wKSkKICNkZWZpbmUgcGFyYXZpcnRfY2xvYmJlcihjbG9iYmVyKQkJXAogCVtwYXJhdmlydF9jbG9iYmVyXSAiaSIgKGNsb2JiZXIpCiAKQEAgLTQ0Myw3ICs0NDEsNyBAQAogICogb2Zmc2V0IGludG8gdGhlIHBhcmF2aXJ0X3BhdGNoX3RlbXBsYXRlIHN0cnVjdHVyZSwgYW5kIGNhbiB0aGVyZWZvcmUgYmUKICAqIGZyZWVseSBjb252ZXJ0ZWQgYmFjayBpbnRvIGEgc3RydWN0dXJlIG9mZnNldC4KICAqLwotI2RlZmluZSBQQVJBVklSVF9DQUxMCSJjYWxsIColW3BhcmF2aXJ0X29wcHRyXTsiCisjZGVmaW5lIFBBUkFWSVJUX0NBTEwJImNhbGwgKiVjW3BhcmF2aXJ0X29wcHRyXTsiCiAKIC8qCiAgKiBUaGVzZSBtYWNyb3MgYXJlIGludGVuZGVkIHRvIHdyYXAgY2FsbHMgdGhyb3VnaCBvbmUgb2YgdGhlIHBhcmF2aXJ0CkBAIC0xMzY1LDEzICsxMzYzLDYgQEAKIAkJICAgIHB0ZS5wdGUsIHB0ZS5wdGUgPj4gMzIpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQkvKiA1IGFyZyB3b3JkcyAqLwotCXB2X21tdV9vcHMuc2V0X3B0ZV9wcmVzZW50KG1tLCBhZGRyLCBwdGVwLCBwdGUpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgICAgIHB0ZV90ICpwdGVwKQogewpAQCAtMTM4OCwxMiArMTM3OSw2IEBACiAJc2V0X3B0ZShwdGVwLCBwdGUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQlzZXRfcHRlKHB0ZXAsIHB0ZSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICAgcHRlX3QgKnB0ZXApCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCmluZGV4IGIwZTcwMDUuLjJjZDA3YjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfQVNNX1g4Nl9QQVRfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZV90eXBlcy5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl9QQVQKIGV4dGVybiBpbnQgcGF0X2VuYWJsZWQ7CkBAIC0xNyw1ICsxOCw5IEBACiAKIGV4dGVybiBpbnQga2VybmVsX21hcF9zeW5jX21lbXR5cGUodTY0IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJdW5zaWduZWQgbG9uZyBmbGFnKTsKK2V4dGVybiB2b2lkIG1hcF9kZXZtZW0odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJICAgICAgIHN0cnVjdCBwZ3Byb3Qgdm1hX3Byb3QpOworZXh0ZXJuIHZvaWQgdW5tYXBfZGV2bWVtKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgc3RydWN0IHBncHJvdCB2bWFfcHJvdCk7CiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLmgKaW5kZXggYzE3NzRhYy4uMjMzNDk4MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCkBAIC0yNiwxMyArMjYsNiBAQAogCW5hdGl2ZV9zZXRfcHRlKHB0ZXAsIHB0ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkJICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQotewotCW5hdGl2ZV9zZXRfcHRlKHB0ZXAsIHB0ZSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfcG1kX2NsZWFyKHBtZF90ICpwbWRwKQogewogCW5hdGl2ZV9zZXRfcG1kKHBtZHAsIF9fcG1kKDApKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCmluZGV4IDNmMTNjZGYuLjE3N2IwMTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaApAQCAtMzEsMjMgKzMxLDYgQEAKIAlwdGVwLT5wdGVfbG93ID0gcHRlLnB0ZV9sb3c7CiB9CiAKLS8qCi0gKiBTaW5jZSB0aGlzIGlzIG9ubHkgY2FsbGVkIG9uIHVzZXIgUFRFcywgYW5kIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIKLSAqIG11c3QgaGFuZGxlIHRoZSBhbHJlYWR5IHJhY3kgc2l0dWF0aW9uIG9mIHNpbXVsdGFuZW91cyBwYWdlIGZhdWx0cywKLSAqIHdlIGFyZSBqdXN0aWZpZWQgaW4gbWVyZWx5IGNsZWFyaW5nIHRoZSBQVEUgcHJlc2VudCBiaXQsIGZvbGxvd2VkCi0gKiBieSBhIHNldC4gIFRoZSBvcmRlcmluZyBoZXJlIGlzIGltcG9ydGFudC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9zZXRfcHRlX3ByZXNlbnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCQkgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0JcHRlcC0+cHRlX2xvdyA9IDA7Ci0Jc21wX3dtYigpOwotCXB0ZXAtPnB0ZV9oaWdoID0gcHRlLnB0ZV9oaWdoOwotCXNtcF93bWIoKTsKLQlwdGVwLT5wdGVfbG93ID0gcHRlLnB0ZV9sb3c7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X3B0ZV9hdG9taWMocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKIAlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgbG9uZyAqKShwdGVwKSwgbmF0aXZlX3B0ZV92YWwocHRlKSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZDA4MTJlMS4uMjlkOTZkMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMzEsOCArMzEsNiBAQAogI2RlZmluZSBzZXRfcHRlKHB0ZXAsIHB0ZSkJCW5hdGl2ZV9zZXRfcHRlKHB0ZXAsIHB0ZSkKICNkZWZpbmUgc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKQluYXRpdmVfc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKQogCi0jZGVmaW5lIHNldF9wdGVfcHJlc2VudChtbSwgYWRkciwgcHRlcCwgcHRlKQkJCQlcCi0JbmF0aXZlX3NldF9wdGVfcHJlc2VudChtbSwgYWRkciwgcHRlcCwgcHRlKQogI2RlZmluZSBzZXRfcHRlX2F0b21pYyhwdGVwLCBwdGUpCQkJCQlcCiAJbmF0aXZlX3NldF9wdGVfYXRvbWljKHB0ZXAsIHB0ZSkKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCmluZGV4IDk3NjEyZmMuLjMxYmQxMjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKQEAgLTQyLDkgKzQyLDYgQEAKICAqLwogI3VuZGVmIFRFU1RfQUNDRVNTX09LCiAKLS8qIFRoZSBib290IHBhZ2UgdGFibGVzIChhbGwgY3JlYXRlZCBhcyBhIHNpbmdsZSBhcnJheSkgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIHBnMFtdOwotCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKICMgaW5jbHVkZSA8YXNtL3BndGFibGUtM2xldmVsLmg+CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMl90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMl90eXBlcy5oCmluZGV4IGJkOGRmM2IuLjI3MzNmYWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzJfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyX3R5cGVzLmgKQEAgLTI1LDYgKzI1LDExIEBACiAgKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCiAgKi8KICNkZWZpbmUgVk1BTExPQ19PRkZTRVQJKDggKiAxMDI0ICogMTAyNCkKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCitleHRlcm4gYm9vbCBfX3ZtYWxsb2Nfc3RhcnRfc2V0OyAvKiBzZXQgb25jZSBoaWdoX21lbW9yeSBpcyBzZXQgKi8KKyNlbmRpZgorCiAjZGVmaW5lIFZNQUxMT0NfU1RBUlQJKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKICNkZWZpbmUgTEFTVF9QS01BUCA1MTIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaAppbmRleCA0ZDI1OGFkLi5iODIzOGRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oCkBAIC0yNzMsNiArMjczLDcgQEAKIAogZXh0ZXJuIHB0ZXZhbF90IF9fc3VwcG9ydGVkX3B0ZV9tYXNrOwogZXh0ZXJuIGludCBueF9lbmFibGVkOworZXh0ZXJuIHZvaWQgc2V0X254KHZvaWQpOwogCiAjZGVmaW5lIHBncHJvdF93cml0ZWNvbWJpbmUJcGdwcm90X3dyaXRlY29tYmluZQogZXh0ZXJuIHBncHJvdF90IHBncHJvdF93cml0ZWNvbWJpbmUocGdwcm90X3QgcHJvdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDc2MTM5NTAuLmFlODVhOGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC03NSw5ICs3NSw5IEBACiAjZWxzZQogCS8qIE51bWJlciBvZiA0SyBwYWdlcyBpbiBEVExCL0lUTEIgY29tYmluZWQoaW4gcGFnZXMpOiAqLwogCWludAkJCXg4Nl90bGJzaXplOworI2VuZGlmCiAJX191OAkJCXg4Nl92aXJ0X2JpdHM7CiAJX191OAkJCXg4Nl9waHlzX2JpdHM7Ci0jZW5kaWYKIAkvKiBDUFVJRCByZXR1cm5lZCBjb3JlIGlkIGJpdHM6ICovCiAJX191OAkJCXg4Nl9jb3JlaWRfYml0czsKIAkvKiBNYXggZXh0ZW5kZWQgQ1BVSUQgZnVuY3Rpb24gc3VwcG9ydGVkOiAqLwpAQCAtMzkxLDYgKzM5MSw5IEBACiBERUNMQVJFX0lOSVRfUEVSX0NQVShpcnFfc3RhY2tfdW5pb24pOwogCiBERUNMQVJFX1BFUl9DUFUoY2hhciAqLCBpcnFfc3RhY2tfcHRyKTsKK0RFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIGlycV9jb3VudCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBrZXJuZWxfZWZsYWdzOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBpZ25vcmVfc3lzcmV0KHZvaWQpOwogI2Vsc2UJLyogWDg2XzY0ICovCiAjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCiBERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgbG9uZywgc3RhY2tfY2FuYXJ5KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NlY3Rpb25zLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCmluZGV4IDJiOGM1MTYuLjFiN2VlNWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2VjdGlvbnMuaApAQCAtMSArMSw4IEBACisjaWZuZGVmIF9BU01fWDg2X1NFQ1RJT05TX0gKKyNkZWZpbmUgX0FTTV9YODZfU0VDVElPTlNfSAorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KKworZXh0ZXJuIGNoYXIgX19icmtfYmFzZVtdLCBfX2Jya19saW1pdFtdOworCisjZW5kaWYJLyogX0FTTV9YODZfU0VDVElPTlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmgKaW5kZXggMDVjNmY2Yi4uYmRjMmFkYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC02NCw3ICs2NCw3IEBACiAjaW5jbHVkZSA8YXNtL2Jvb3RwYXJhbS5oPgogCiAvKiBJbnRlcnJ1cHQgY29udHJvbCBmb3IgdlNNUG93ZXJlZCB4ODZfNjQgc3lzdGVtcyAqLwotI2lmZGVmIENPTkZJR19YODZfVlNNUAorI2lmZGVmIENPTkZJR19YODZfNjQKIHZvaWQgdnNtcF9pbml0KHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCB2c21wX2luaXQodm9pZCkgeyB9CkBAIC0xMDAsMjAgKzEwMCw1MSBAQAogICovCiAjZGVmaW5lIExPV01FTVNJWkUoKQkoMHg5ZjAwMCkKIAorLyogZXhjZWVkaW5nbHkgZWFybHkgYnJrLWxpa2UgYWxsb2NhdG9yICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBfYnJrX2VuZDsKK3ZvaWQgKmV4dGVuZF9icmsoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbik7CisKKy8qCisgKiBSZXNlcnZlIHNwYWNlIGluIHRoZSBicmsgc2VjdGlvbi4gIFRoZSBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbgorICogdGhlIGZpbGUsIGFuZCBzb21ld2hhdCBkZXNjcmlwdGl2ZS4gIFRoZSBzaXplIGlzIGluIGJ5dGVzLiAgTXVzdCBiZQorICogdXNlZCBhdCBmaWxlIHNjb3BlLgorICoKKyAqIChUaGlzIHVzZXMgYSB0ZW1wIGZ1bmN0aW9uIHRvIHdyYXAgdGhlIGFzbSBzbyB3ZSBjYW4gcGFzcyBpdCB0aGUKKyAqIHNpemUgcGFyYW1ldGVyOyBvdGhlcndpc2Ugd2Ugd291bGRuJ3QgYmUgYWJsZSB0by4gIFdlIGNhbid0IHVzZSBhCisgKiAic2VjdGlvbiIgYXR0cmlidXRlIG9uIGEgbm9ybWFsIHZhcmlhYmxlIGJlY2F1c2UgaXQgYWx3YXlzIGVuZHMgdXAKKyAqIGJlaW5nIEBwcm9nYml0cywgd2hpY2ggZW5kcyB1cCBhbGxvY2F0aW5nIHNwYWNlIGluIHRoZSB2bWxpbnV4CisgKiBleGVjdXRhYmxlLikKKyAqLworI2RlZmluZSBSRVNFUlZFX0JSSyhuYW1lLHN6KQkJCQkJCVwKKwlzdGF0aWMgdm9pZCBfX3NlY3Rpb24oLmRpc2NhcmQpIF9fdXNlZAkJCQlcCisJX19icmtfcmVzZXJ2YXRpb25fZm5fIyNuYW1lIyNfXyh2b2lkKSB7CQkJCVwKKwkJYXNtIHZvbGF0aWxlICgJCQkJCQlcCisJCQkiLnB1c2hzZWN0aW9uIC5icmtfcmVzZXJ2YXRpb24sXCJhd1wiLEBub2JpdHM7IiBcCisJCQkiLmJyay4iICNuYW1lICI6IgkJCQlcCisJCQkiIDE6LnNraXAgJWMwOyIJCQkJCVwKKwkJCSIgLnNpemUgLmJyay4iICNuYW1lICIsIC4gLSAxYjsiCQlcCisJCQkiIC5wb3BzZWN0aW9uIgkJCQkJXAorCQkJOiA6ICJpIiAoc3opKTsJCQkJCVwKKwl9CisKICNpZmRlZiBfX2kzODZfXwogCiB2b2lkIF9faW5pdCBpMzg2X3N0YXJ0X2tlcm5lbCh2b2lkKTsKIGV4dGVybiB2b2lkIHByb2JlX3JvbXModm9pZCk7CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIGluaXRfcGdfdGFibGVzX3N0YXJ0OwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdF9wZ190YWJsZXNfZW5kOwotCiAjZWxzZQogdm9pZCBfX2luaXQgeDg2XzY0X3N0YXJ0X2tlcm5lbChjaGFyICpyZWFsX21vZGUpOwogdm9pZCBfX2luaXQgeDg2XzY0X3N0YXJ0X3Jlc2VydmF0aW9ucyhjaGFyICpyZWFsX21vZGVfZGF0YSk7CiAKICNlbmRpZiAvKiBfX2kzODZfXyAqLwogI2VuZGlmIC8qIF9TRVRVUCAqLworI2Vsc2UKKyNkZWZpbmUgUkVTRVJWRV9CUksobmFtZSxzeikJCQkJXAorCS5wdXNoc2VjdGlvbiAuYnJrX3Jlc2VydmF0aW9uLCJhdyIsQG5vYml0czsJXAorLmJyay5uYW1lOgkJCQkJCVwKKzE6CS5za2lwIHN6OwkJCQkJXAorCS5zaXplIC5icmsubmFtZSwuLTFiOwkJCQlcCisJLnBvcHNlY3Rpb24KICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAgLyogIF9fS0VSTkVMX18gICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aW1lci5oCmluZGV4IGE4MTE5NWUuLmJkMzdlZDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaApAQCAtMTIsOSArMTIsOSBAQAogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogZXh0ZXJuIGludCB0aW1lcl9hY2s7Ci1leHRlcm4gaW50IHJlY2FsaWJyYXRlX2NwdV9raHoodm9pZCk7CiBleHRlcm4gaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLworZXh0ZXJuIGludCByZWNhbGlicmF0ZV9jcHVfa2h6KHZvaWQpOwogCiBleHRlcm4gaW50IG5vX3RpbWVyX2NoZWNrOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAppbmRleCA3N2NmYjJjLi43NDQyOTljIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKQEAgLTIxNywxMCArMjE3LDYgQEAKIHsKIAlyZXR1cm4gY3B1X29ubGluZV9tYXA7CiB9Ci1zdGF0aWMgaW5saW5lIGludCBub2RlX3RvX2ZpcnN0X2NwdShpbnQgbm9kZSkKLXsKLQlyZXR1cm4gZmlyc3RfY3B1KGNwdV9vbmxpbmVfbWFwKTsKLX0KIAogc3RhdGljIGlubGluZSB2b2lkIHNldHVwX25vZGVfdG9fY3B1bWFza19tYXAodm9pZCkgeyB9CiAKQEAgLTIzNywxNCArMjMzLDYgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RvcG9sb2d5Lmg+CiAKLSNpZmRlZiBDT05GSUdfTlVNQQotLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBDUFUgb24gTm9kZSAnbm9kZScuICovCi1zdGF0aWMgaW5saW5lIGludCBub2RlX3RvX2ZpcnN0X2NwdShpbnQgbm9kZSkKLXsKLQlyZXR1cm4gY3B1bWFza19maXJzdChjcHVtYXNrX29mX25vZGUobm9kZSkpOwotfQotI2VuZGlmCi0KIGV4dGVybiBjcHVtYXNrX3QgY3B1X2NvcmVncm91cF9tYXAoaW50IGNwdSk7CiBleHRlcm4gY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9jb3JlZ3JvdXBfbWFzayhpbnQgY3B1KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAppbmRleCA3NzczMjdlLi45ZjRkZmJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaApAQCAtMTk5LDYgKzE5OSwxMCBAQAogI2RlZmluZSBTQ0lSX0NQVV9BQ1RJVklUWQkweDAyCS8qIG5vdCBpZGxlICovCiAjZGVmaW5lIFNDSVJfQ1BVX0hCX0lOVEVSVkFMCShIWikJLyogb25jZSBwZXIgc2Vjb25kICovCiAKKy8qIExvb3AgdGhyb3VnaCBhbGwgaW5zdGFsbGVkIGJsYWRlcyAqLworI2RlZmluZSBmb3JfZWFjaF9wb3NzaWJsZV9ibGFkZShiaWQpCQlcCisJZm9yICgoYmlkKSA9IDA7IChiaWQpIDwgdXZfbnVtX3Bvc3NpYmxlX2JsYWRlcygpOyAoYmlkKSsrKQorCiAvKgogICogTWFjcm9zIGZvciBjb252ZXJ0aW5nIGJldHdlZW4ga2VybmVsIHZpcnR1YWwgYWRkcmVzc2VzLCBzb2NrZXQgbG9jYWwgcGh5c2ljYWwKICAqIGFkZHJlc3NlcywgYW5kIFVWIGdsb2JhbCBwaHlzaWNhbCBhZGRyZXNzZXMuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaHlwZXJjYWxsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaHlwZXJjYWxsLmgKaW5kZXggNWU3OWNhNi4uOWMzNzFlNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2h5cGVyY2FsbC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9oeXBlcmNhbGwuaApAQCAtMjk2LDYgKzI5Niw4IEBACiBzdGF0aWMgaW5saW5lIGludAogSFlQRVJWSVNPUl91cGRhdGVfZGVzY3JpcHRvcih1NjQgbWEsIHU2NCBkZXNjKQogeworCWlmIChzaXplb2YodTY0KSA9PSBzaXplb2YobG9uZykpCisJCXJldHVybiBfaHlwZXJjYWxsMihpbnQsIHVwZGF0ZV9kZXNjcmlwdG9yLCBtYSwgZGVzYyk7CiAJcmV0dXJuIF9oeXBlcmNhbGw0KGludCwgdXBkYXRlX2Rlc2NyaXB0b3IsIG1hLCBtYT4+MzIsIGRlc2MsIGRlc2M+PjMyKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCmluZGV4IDk1ZjIxNmIuLmM2MTFhZDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKQEAgLTcwLDcgKzcwLDYgQEAKIG9iai0kKENPTkZJR19LRVhFQykJCSs9IG1hY2hpbmVfa2V4ZWNfJChCSVRTKS5vCiBvYmotJChDT05GSUdfS0VYRUMpCQkrPSByZWxvY2F0ZV9rZXJuZWxfJChCSVRTKS5vIGNyYXNoLm8KIG9iai0kKENPTkZJR19DUkFTSF9EVU1QKQkrPSBjcmFzaF9kdW1wXyQoQklUUykubwotb2JqLSQoQ09ORklHX1g4Nl9WU01QKQkJKz0gdnNtcF82NC5vCiBvYmotJChDT05GSUdfS1BST0JFUykJCSs9IGtwcm9iZXMubwogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBtb2R1bGVfJChCSVRTKS5vCiBvYmotJChDT05GSUdfRUZJKSAJCSs9IGVmaS5vIGVmaV8kKEJJVFMpLm8gZWZpX3N0dWJfJChCSVRTKS5vCkBAIC0xMDYsMTIgKzEwNSwxMiBAQAogCiBvYmotJChDT05GSUdfWDg2X0NIRUNLX0JJT1NfQ09SUlVQVElPTikgKz0gY2hlY2subwogCi1vYmotJChDT05GSUdfU1dJT1RMQikJCQkrPSBwY2ktc3dpb3RsYl82NC5vICMgTkIgcmVuYW1lIHdpdGhvdXQgXzY0CitvYmotJChDT05GSUdfU1dJT1RMQikJCQkrPSBwY2ktc3dpb3RsYi5vCiAKICMjIwogIyA2NCBiaXQgc3BlY2lmaWMgZmlsZXMKIGlmZXEgKCQoQ09ORklHX1g4Nl82NCkseSkKLQlvYmotJChDT05GSUdfWDg2X1VWKQkJKz0gdGxiX3V2Lm8gYmlvc191di5vIHV2X2lycS5vIHV2X3N5c2ZzLm8KKwlvYmotJChDT05GSUdfWDg2X1VWKQkJKz0gdGxiX3V2Lm8gYmlvc191di5vIHV2X2lycS5vIHV2X3N5c2ZzLm8gdXZfdGltZS5vCiAJb2JqLSQoQ09ORklHX1g4Nl9QTV9USU1FUikJKz0gcG10aW1lcl82NC5vCiAJb2JqLSQoQ09ORklHX0FVRElUKQkJKz0gYXVkaXRfNjQubwogCkBAIC0xMjAsNCArMTE5LDUgQEAKIAlvYmotJChDT05GSUdfQU1EX0lPTU1VKQkJKz0gYW1kX2lvbW11X2luaXQubyBhbWRfaW9tbXUubwogCiAJb2JqLSQoQ09ORklHX1BDSV9NTUNPTkZJRykJKz0gbW1jb25mLWZhbTEwaF82NC5vCisJb2JqLXkJCQkJKz0gdnNtcF82NC5vCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwppbmRleCA2OTA3YjhlLi40YzgwZjE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwpAQCAtNDE0LDkgKzQxNCwxNyBAQAogCSAgIHRoYXQgbWlnaHQgZXhlY3V0ZSB0aGUgdG8gYmUgcGF0Y2hlZCBjb2RlLgogCSAgIE90aGVyIENQVXMgYXJlIG5vdCBydW5uaW5nLiAqLwogCXN0b3Bfbm1pKCk7Ci0jaWZkZWYgQ09ORklHX1g4Nl9NQ0UKLQlzdG9wX21jZSgpOwotI2VuZGlmCisKKwkvKgorCSAqIERvbid0IHN0b3AgbWFjaGluZSBjaGVjayBleGNlcHRpb25zIHdoaWxlIHBhdGNoaW5nLgorCSAqIE1DRXMgb25seSBoYXBwZW4gd2hlbiBzb21ldGhpbmcgZ290IGNvcnJ1cHRlZCBhbmQgaW4gdGhpcworCSAqIGNhc2Ugd2UgbXVzdCBkbyBzb21ldGhpbmcgYWJvdXQgdGhlIGNvcnJ1cHRpb24uCisJICogSWdub3JpbmcgaXQgaXMgd29yc2UgdGhhbiBhIHVubGlrZWx5IHBhdGNoaW5nIHJhY2UuCisJICogQWxzbyBtYWNoaW5lIGNoZWNrcyB0ZW5kIHRvIGJlIGJyb2FkY2FzdCBhbmQgaWYgb25lIENQVQorCSAqIGdvZXMgaW50byBtYWNoaW5lIGNoZWNrIHRoZSBvdGhlcnMgZm9sbG93IHF1aWNrbHksIHNvIHdlIGRvbid0CisJICogZXhwZWN0IGEgbWFjaGluZSBjaGVjayB0byBjYXVzZSB1bmR1ZSBwcm9ibGVtcyBkdXJpbmcgdG8gY29kZQorCSAqIHBhdGNoaW5nLgorCSAqLwogCiAJYXBwbHlfYWx0ZXJuYXRpdmVzKF9fYWx0X2luc3RydWN0aW9ucywgX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCk7CiAKQEAgLTQ1Niw5ICs0NjQsNiBAQAogCQkJCSh1bnNpZ25lZCBsb25nKV9fc21wX2xvY2tzX2VuZCk7CiAKIAlyZXN0YXJ0X25taSgpOwotI2lmZGVmIENPTkZJR19YODZfTUNFCi0JcmVzdGFydF9tY2UoKTsKLSNlbmRpZgogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwppbmRleCA1MTEzYzA4Li5jNTk2MmZlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCkBAIC0yMiwxMCArMjIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW9tbXUtaGVscGVyLmg+Ci0jaWZkZWYgQ09ORklHX0lPTU1VX0FQSQogI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vZ2FydC5oPgpAQCAtMTI5Nyw4ICsxMjk2LDEwIEBACiAvKgogICogVGhlIGV4cG9ydGVkIG1hcF9zaW5nbGUgZnVuY3Rpb24gZm9yIGRtYV9vcHMuCiAgKi8KLXN0YXRpYyBkbWFfYWRkcl90IG1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBwYWRkciwKLQkJCSAgICAgc2l6ZV90IHNpemUsIGludCBkaXIpCitzdGF0aWMgZG1hX2FkZHJfdCBtYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKQEAgLTEzMDYsNiArMTMwNyw3IEBACiAJdTE2IGRldmlkOwogCWRtYV9hZGRyX3QgYWRkcjsKIAl1NjQgZG1hX21hc2s7CisJcGh5c19hZGRyX3QgcGFkZHIgPSBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQ7CiAKIAlJTkNfU1RBVFNfQ09VTlRFUihjbnRfbWFwX3NpbmdsZSk7CiAKQEAgLTEzNDAsOCArMTM0Miw4IEBACiAvKgogICogVGhlIGV4cG9ydGVkIHVubWFwX3NpbmdsZSBmdW5jdGlvbiBmb3IgZG1hX29wcy4KICAqLwotc3RhdGljIHZvaWQgdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKLQkJCSBzaXplX3Qgc2l6ZSwgaW50IGRpcikKK3N0YXRpYyB2b2lkIHVubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKKwkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKQEAgLTEzOTAsNyArMTM5Miw4IEBACiAgKiBsaXN0cykuCiAgKi8KIHN0YXRpYyBpbnQgbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCi0JCSAgaW50IG5lbGVtcywgaW50IGRpcikKKwkJICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCSAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKQEAgLTE0NTcsNyArMTQ2MCw4IEBACiAgKiBsaXN0cykuCiAgKi8KIHN0YXRpYyB2b2lkIHVubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCi0JCSAgICAgaW50IG5lbGVtcywgaW50IGRpcikKKwkJICAgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCSAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKQEAgLTE2NDQsMTEgKzE2NDgsMTEgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIGFtZF9pb21tdV9kbWFfb3BzID0geworc3RhdGljIHN0cnVjdCBkbWFfbWFwX29wcyBhbWRfaW9tbXVfZG1hX29wcyA9IHsKIAkuYWxsb2NfY29oZXJlbnQgPSBhbGxvY19jb2hlcmVudCwKIAkuZnJlZV9jb2hlcmVudCA9IGZyZWVfY29oZXJlbnQsCi0JLm1hcF9zaW5nbGUgPSBtYXBfc2luZ2xlLAotCS51bm1hcF9zaW5nbGUgPSB1bm1hcF9zaW5nbGUsCisJLm1hcF9wYWdlID0gbWFwX3BhZ2UsCisJLnVubWFwX3BhZ2UgPSB1bm1hcF9wYWdlLAogCS5tYXBfc2cgPSBtYXBfc2csCiAJLnVubWFwX3NnID0gdW5tYXBfc2csCiAJLmRtYV9zdXBwb3J0ZWQgPSBhbWRfaW9tbXVfZG1hX3N1cHBvcnRlZCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwppbmRleCBmOWNlY2RmLi44NWViOGUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8YXNtL2lkbGUuaD4KICNpbmNsdWRlIDxhc20vbXRyci5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vbWNlLmg+CiAKIHVuc2lnbmVkIGludCBudW1fcHJvY2Vzc29yczsKIApAQCAtODA4LDcgKzgwOSw3IEBACiAJdTMyIHY7CiAKIAkvKiBBUElDIGhhc24ndCBiZWVuIG1hcHBlZCB5ZXQgKi8KLQlpZiAoIWFwaWNfcGh5cykKKwlpZiAoIXgyYXBpYyAmJiAhYXBpY19waHlzKQogCQlyZXR1cm47CiAKIAltYXhsdnQgPSBsYXBpY19nZXRfbWF4bHZ0KCk7CkBAIC04NDIsNiArODQzLDE0IEBACiAJCWFwaWNfd3JpdGUoQVBJQ19MVlRUSE1SLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKIAl9CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2X01DRV9JTlRFTAorCWlmIChtYXhsdnQgPj0gNikgeworCQl2ID0gYXBpY19yZWFkKEFQSUNfTFZUQ01DSSk7CisJCWlmICghKHYgJiBBUElDX0xWVF9NQVNLRUQpKQorCQkJYXBpY193cml0ZShBUElDX0xWVENNQ0ksIHYgfCBBUElDX0xWVF9NQVNLRUQpOworCX0KKyNlbmRpZgorCiAJLyoKIAkgKiBDbGVhbiBBUElDIHN0YXRlIGZvciBvdGhlciBPU3M6CiAJICovCkBAIC0xMjQxLDYgKzEyNTAsMTIgQEAKIAlhcGljX3dyaXRlKEFQSUNfTFZUMSwgdmFsdWUpOwogCiAJcHJlZW1wdF9lbmFibGUoKTsKKworI2lmZGVmIENPTkZJR19YODZfTUNFX0lOVEVMCisJLyogUmVjaGVjayBDTUNJIGluZm9ybWF0aW9uIGFmdGVyIGxvY2FsIEFQSUMgaXMgdXAgb24gQ1BVICMwICovCisJaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSA9PSAwKQorCQljbWNpX3JlY2hlY2soKTsKKyNlbmRpZgogfQogCiB2b2lkIF9fY3B1aW5pdCBlbmRfbG9jYWxfQVBJQ19zZXR1cCh2b2lkKQpAQCAtMTMxOSwxNSArMTMzNCwxNiBAQAogCQlyZXR1cm47CiAJfQogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCW1hc2tfODI1OUEoKTsKLQotCXJldCA9IHNhdmVfbWFza19JT19BUElDX3NldHVwKCk7CisJcmV0ID0gc2F2ZV9JT19BUElDX3NldHVwKCk7CiAJaWYgKHJldCkgewogCQlwcl9pbmZvKCJTYXZpbmcgSU8tQVBJQyBzdGF0ZSBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCQlnb3RvIGVuZDsKIAl9CiAKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJbWFza19JT19BUElDX3NldHVwKCk7CisJbWFza184MjU5QSgpOworCiAJcmV0ID0gZW5hYmxlX2ludHJfcmVtYXBwaW5nKDEpOwogCiAJaWYgKHJldCAmJiB4MmFwaWNfcHJlZW5hYmxlZCkgewpAQCAtMTM1MiwxMCArMTM2OCwxMCBAQAogCWVsc2UKIAkJcmVpbml0X2ludHJfcmVtYXBwZWRfSU9fQVBJQyh4MmFwaWNfcHJlZW5hYmxlZCk7CiAKLWVuZDoKIAl1bm1hc2tfODI1OUEoKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKK2VuZDoKIAlpZiAoIXJldCkgewogCQlpZiAoIXgyYXBpY19wcmVlbmFibGVkKQogCQkJcHJfaW5mbygiRW5hYmxlZCB4MmFwaWMgYW5kIGludGVycnVwdC1yZW1hcHBpbmdcbiIpOwpAQCAtMTUwOCwxMiArMTUyNCwxMCBAQAogICovCiB2b2lkIF9faW5pdCBpbml0X2FwaWNfbWFwcGluZ3Modm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfWDg2X1gyQVBJQwogCWlmICh4MmFwaWMpIHsKIAkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gcmVhZF9hcGljX2lkKCk7CiAJCXJldHVybjsKIAl9Ci0jZW5kaWYKIAogCS8qCiAJICogSWYgbm8gbG9jYWwgQVBJQyBjYW4gYmUgZm91bmQgdGhlbiBzZXQgdXAgYSBmYWtlIGFsbApAQCAtMTk1NywxMiArMTk3MSw5IEBACiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKLSNpZmRlZiBDT05GSUdfWDg2X1gyQVBJQwogCWlmICh4MmFwaWMpCiAJCWVuYWJsZV94MmFwaWMoKTsKLQllbHNlCi0jZW5kaWYKLQl7CisJZWxzZSB7CiAJCS8qCiAJCSAqIE1ha2Ugc3VyZSB0aGUgQVBJQ0JBU0UgcG9pbnRzIHRvIHRoZSByaWdodCBhZGRyZXNzCiAJCSAqCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfZmxhdF82NC5jCmluZGV4IGY5MzM4MjIuLjAwMTQ3MTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfZmxhdF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWNfZmxhdF82NC5jCkBAIC0xNTksMjAgKzE1OSw2IEBACiAJcmV0dXJuIHBoeXNpZF9pc3NldChyZWFkX3hhcGljX2lkKCksIHBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBmbGF0X2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaykKLXsKLQlyZXR1cm4gY3B1bWFza19iaXRzKGNwdW1hc2spWzBdICYgQVBJQ19BTExfQ1BVUzsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBmbGF0X2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCi0JCQkJCQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqYW5kbWFzaykKLXsKLQl1bnNpZ25lZCBsb25nIG1hc2sxID0gY3B1bWFza19iaXRzKGNwdW1hc2spWzBdICYgQVBJQ19BTExfQ1BVUzsKLQl1bnNpZ25lZCBsb25nIG1hc2syID0gY3B1bWFza19iaXRzKGFuZG1hc2spWzBdICYgQVBJQ19BTExfQ1BVUzsKLQotCXJldHVybiBtYXNrMSAmIG1hc2syOwotfQotCiBzdGF0aWMgaW50IGZsYXRfcGh5c19wa2dfaWQoaW50IGluaXRpYWxfYXBpY19pZCwgaW50IGluZGV4X21zYikKIHsKIAlyZXR1cm4gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkgPj4gaW5kZXhfbXNiOwpAQCAtMjEzLDggKzE5OSw4IEBACiAJLnNldF9hcGljX2lkCQkJPSBzZXRfYXBpY19pZCwKIAkuYXBpY19pZF9tYXNrCQkJPSAweEZGdSA8PCAyNCwKIAotCS5jcHVfbWFza190b19hcGljaWQJCT0gZmxhdF9jcHVfbWFza190b19hcGljaWQsCi0JLmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQJCT0gZmxhdF9jcHVfbWFza190b19hcGljaWRfYW5kLAorCS5jcHVfbWFza190b19hcGljaWQJCT0gZGVmYXVsdF9jcHVfbWFza190b19hcGljaWQsCisJLmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQJCT0gZGVmYXVsdF9jcHVfbWFza190b19hcGljaWRfYW5kLAogCiAJLnNlbmRfSVBJX21hc2sJCQk9IGZsYXRfc2VuZF9JUElfbWFzaywKIAkuc2VuZF9JUElfbWFza19hbGxidXRzZWxmCT0gZmxhdF9zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKaW5kZXggMDBlNjA3MS4uZGE5OWZmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwpAQCAtMzg5LDYgKzM4OSw4IEBACiAJdW5zaWduZWQgaW50IGluZGV4OwogCXVuc2lnbmVkIGludCB1bnVzZWRbM107CiAJdW5zaWduZWQgaW50IGRhdGE7CisJdW5zaWduZWQgaW50IHVudXNlZDJbMTFdOworCXVuc2lnbmVkIGludCBlb2k7CiB9OwogCiBzdGF0aWMgX19hdHRyaWJ1dGVfY29uc3RfXyBzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljX2Jhc2UoaW50IGlkeCkKQEAgLTM5Nyw2ICszOTksMTIgQEAKIAkJKyAobXBfaW9hcGljc1tpZHhdLmFwaWNhZGRyICYgflBBR0VfTUFTSyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpb19hcGljX2VvaSh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHZlY3RvcikKK3sKKwlzdHJ1Y3QgaW9fYXBpYyBfX2lvbWVtICppb19hcGljID0gaW9fYXBpY19iYXNlKGFwaWMpOworCXdyaXRlbCh2ZWN0b3IsICZpb19hcGljLT5lb2kpOworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb19hcGljX3JlYWQodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCByZWcpCiB7CiAJc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKQEAgLTU0NiwxNiArNTU0LDEyIEBACiAKIAkJYXBpYyA9IGVudHJ5LT5hcGljOwogCQlwaW4gPSBlbnRyeS0+cGluOwotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJCS8qCiAJCSAqIFdpdGggaW50ZXJydXB0LXJlbWFwcGluZywgZGVzdGluYXRpb24gaW5mb3JtYXRpb24gY29tZXMKIAkJICogZnJvbSBpbnRlcnJ1cHQtcmVtYXBwaW5nIHRhYmxlIGVudHJ5LgogCQkgKi8KIAkJaWYgKCFpcnFfcmVtYXBwZWQoaXJxKSkKIAkJCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMSArIHBpbioyLCBkZXN0KTsKLSNlbHNlCi0JCWlvX2FwaWNfd3JpdGUoYXBpYywgMHgxMSArIHBpbioyLCBkZXN0KTsKLSNlbmRpZgogCQlyZWcgPSBpb19hcGljX3JlYWQoYXBpYywgMHgxMCArIHBpbioyKTsKIAkJcmVnICY9IH5JT19BUElDX1JFRElSX1ZFQ1RPUl9NQVNLOwogCQlyZWcgfD0gdmVjdG9yOwpAQCAtNTg4LDEwICs1OTIsMTIgQEAKIAlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIG1hc2spKQogCQlyZXR1cm4gQkFEX0FQSUNJRDsKIAotCWNwdW1hc2tfYW5kKGRlc2MtPmFmZmluaXR5LCBjZmctPmRvbWFpbiwgbWFzayk7CisJLyogY2hlY2sgdGhhdCBiZWZvcmUgZGVzYy0+YWRkaW5pdHkgZ2V0IHVwZGF0ZWQgKi8KIAlzZXRfZXh0cmFfbW92ZV9kZXNjKGRlc2MsIG1hc2spOwogCi0JcmV0dXJuIGFwaWMtPmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQoZGVzYy0+YWZmaW5pdHksIGNwdV9vbmxpbmVfbWFzayk7CisJY3B1bWFza19jb3B5KGRlc2MtPmFmZmluaXR5LCBtYXNrKTsKKworCXJldHVybiBhcGljLT5jcHVfbWFza190b19hcGljaWRfYW5kKGRlc2MtPmFmZmluaXR5LCBjZmctPmRvbWFpbik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC04NDksOSArODU1LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZWFybHlfaW9hcGljX2VudHJpZXNbTUFYX0lPX0FQSUNTXTsKIAogLyoKLSAqIFNhdmVzIGFuZCBtYXNrcyBhbGwgdGhlIHVubWFza2VkIElPLUFQSUMgUlRFJ3MKKyAqIFNhdmVzIGFsbCB0aGUgSU8tQVBJQyBSVEUncwogICovCi1pbnQgc2F2ZV9tYXNrX0lPX0FQSUNfc2V0dXAodm9pZCkKK2ludCBzYXZlX0lPX0FQSUNfc2V0dXAodm9pZCkKIHsKIAl1bmlvbiBJT19BUElDX3JlZ18wMSByZWdfMDE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTg3NiwxNiArODgyLDkgQEAKIAl9CiAKIAlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKQotCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKSB7Ci0JCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKLQotCQkJZW50cnkgPSBlYXJseV9pb2FwaWNfZW50cmllc1thcGljXVtwaW5dID0KKwkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykKKwkJCWVhcmx5X2lvYXBpY19lbnRyaWVzW2FwaWNdW3Bpbl0gPQogCQkJCWlvYXBpY19yZWFkX2VudHJ5KGFwaWMsIHBpbik7Ci0JCQlpZiAoIWVudHJ5Lm1hc2spIHsKLQkJCQllbnRyeS5tYXNrID0gMTsKLQkJCQlpb2FwaWNfd3JpdGVfZW50cnkoYXBpYywgcGluLCBlbnRyeSk7Ci0JCQl9Ci0JCX0KIAogCXJldHVybiAwOwogCkBAIC04OTgsNiArODk3LDI1IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKK3ZvaWQgbWFza19JT19BUElDX3NldHVwKHZvaWQpCit7CisJaW50IGFwaWMsIHBpbjsKKworCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKKwkJaWYgKCFlYXJseV9pb2FwaWNfZW50cmllc1thcGljXSkKKwkJCWJyZWFrOworCQlmb3IgKHBpbiA9IDA7IHBpbiA8IG5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY107IHBpbisrKSB7CisJCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKKworCQkJZW50cnkgPSBlYXJseV9pb2FwaWNfZW50cmllc1thcGljXVtwaW5dOworCQkJaWYgKCFlbnRyeS5tYXNrKSB7CisJCQkJZW50cnkubWFzayA9IDE7CisJCQkJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkpOworCQkJfQorCQl9CisJfQorfQorCiB2b2lkIHJlc3RvcmVfSU9fQVBJQ19zZXR1cCh2b2lkKQogewogCWludCBhcGljLCBwaW47CkBAIC0xNDExLDkgKzE0MjksNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlvYXBpY19jaGlwOwotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlyX2lvYXBpY19jaGlwOwotI2VuZGlmCiAKICNkZWZpbmUgSU9BUElDX0FVVE8gICAgIC0xCiAjZGVmaW5lIElPQVBJQ19FREdFICAgICAwCkBAIC0xNDUyLDcgKzE0NjgsNiBAQAogCWVsc2UKIAkJZGVzYy0+c3RhdHVzICY9IH5JUlFfTEVWRUw7CiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCWlmIChpcnFfcmVtYXBwZWQoaXJxKSkgewogCQlkZXNjLT5zdGF0dXMgfD0gSVJRX01PVkVfUENOVFhUOwogCQlpZiAodHJpZ2dlcikKQEAgLTE0NjQsNyArMTQ3OSw3IEBACiAJCQkJCQkgICAgICBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7CiAJCXJldHVybjsKIAl9Ci0jZW5kaWYKKwogCWlmICgodHJpZ2dlciA9PSBJT0FQSUNfQVVUTyAmJiBJT19BUElDX2lycV90cmlnZ2VyKGlycSkpIHx8CiAJICAgIHRyaWdnZXIgPT0gSU9BUElDX0xFVkVMKQogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZpb2FwaWNfY2hpcCwKQEAgLTE0NzgsMTQgKzE0OTMsMTMgQEAKIGludCBzZXR1cF9pb2FwaWNfZW50cnkoaW50IGFwaWNfaWQsIGludCBpcnEsCiAJCSAgICAgICBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqZW50cnksCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgZGVzdGluYXRpb24sIGludCB0cmlnZ2VyLAotCQkgICAgICAgaW50IHBvbGFyaXR5LCBpbnQgdmVjdG9yKQorCQkgICAgICAgaW50IHBvbGFyaXR5LCBpbnQgdmVjdG9yLCBpbnQgcGluKQogewogCS8qCiAJICogYWRkIGl0IHRvIHRoZSBJTy1BUElDIGlycS1yb3V0aW5nIHRhYmxlOgogCSAqLwogCW1lbXNldChlbnRyeSwwLHNpemVvZigqZW50cnkpKTsKIAotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpIHsKIAkJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IG1hcF9pb2FwaWNfdG9faXIoYXBpY19pZCk7CiAJCXN0cnVjdCBpcnRlIGlydGU7CkBAIC0xNTA0LDcgKzE1MTgsMTQgQEAKIAogCQlpcnRlLnByZXNlbnQgPSAxOwogCQlpcnRlLmRzdF9tb2RlID0gYXBpYy0+aXJxX2Rlc3RfbW9kZTsKLQkJaXJ0ZS50cmlnZ2VyX21vZGUgPSB0cmlnZ2VyOworCQkvKgorCQkgKiBUcmlnZ2VyIG1vZGUgaW4gdGhlIElSVEUgd2lsbCBhbHdheXMgYmUgZWRnZSwgYW5kIHRoZQorCQkgKiBhY3R1YWwgbGV2ZWwgb3IgZWRnZSB0cmlnZ2VyIHdpbGwgYmUgc2V0dXAgaW4gdGhlIElPLUFQSUMKKwkJICogUlRFLiBUaGlzIHdpbGwgaGVscCBzaW1wbGlmeSBsZXZlbCB0cmlnZ2VyZWQgaXJxIG1pZ3JhdGlvbi4KKwkJICogRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSBjb21tZW50cyBhYm92ZSBleHBsYWluaWcgSU8tQVBJQworCQkgKiBpcnEgbWlncmF0aW9uIGluIHRoZSBwcmVzZW5jZSBvZiBpbnRlcnJ1cHQtcmVtYXBwaW5nLgorCQkgKi8KKwkJaXJ0ZS50cmlnZ2VyX21vZGUgPSAwOwogCQlpcnRlLmRsdnJ5X21vZGUgPSBhcGljLT5pcnFfZGVsaXZlcnlfbW9kZTsKIAkJaXJ0ZS52ZWN0b3IgPSB2ZWN0b3I7CiAJCWlydGUuZGVzdF9pZCA9IElSVEVfREVTVChkZXN0aW5hdGlvbik7CkBAIC0xNTE1LDE4ICsxNTM2LDIxIEBACiAJCWlyX2VudHJ5LT56ZXJvID0gMDsKIAkJaXJfZW50cnktPmZvcm1hdCA9IDE7CiAJCWlyX2VudHJ5LT5pbmRleCA9IChpbmRleCAmIDB4N2ZmZik7Ci0JfSBlbHNlCi0jZW5kaWYKLQl7CisJCS8qCisJCSAqIElPLUFQSUMgUlRFIHdpbGwgYmUgY29uZmlndXJlZCB3aXRoIHZpcnR1YWwgdmVjdG9yLgorCQkgKiBpcnEgaGFuZGxlciB3aWxsIGRvIHRoZSBleHBsaWNpdCBFT0kgdG8gdGhlIGlvLWFwaWMuCisJCSAqLworCQlpcl9lbnRyeS0+dmVjdG9yID0gcGluOworCX0gZWxzZSB7CiAJCWVudHJ5LT5kZWxpdmVyeV9tb2RlID0gYXBpYy0+aXJxX2RlbGl2ZXJ5X21vZGU7CiAJCWVudHJ5LT5kZXN0X21vZGUgPSBhcGljLT5pcnFfZGVzdF9tb2RlOwogCQllbnRyeS0+ZGVzdCA9IGRlc3RpbmF0aW9uOworCQllbnRyeS0+dmVjdG9yID0gdmVjdG9yOwogCX0KIAogCWVudHJ5LT5tYXNrID0gMDsJCQkJLyogZW5hYmxlIElSUSAqLwogCWVudHJ5LT50cmlnZ2VyID0gdHJpZ2dlcjsKIAllbnRyeS0+cG9sYXJpdHkgPSBwb2xhcml0eTsKLQllbnRyeS0+dmVjdG9yID0gdmVjdG9yOwogCiAJLyogTWFzayBsZXZlbCB0cmlnZ2VyZWQgaXJxcy4KIAkgKiBVc2UgSVJRX0RFTEFZRURfRElTQUJMRSBmb3IgZWRnZSB0cmlnZ2VyZWQgaXJxcy4KQEAgLTE1NjEsNyArMTU4NSw3IEBACiAKIAogCWlmIChzZXR1cF9pb2FwaWNfZW50cnkobXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQsIGlycSwgJmVudHJ5LAotCQkJICAgICAgIGRlc3QsIHRyaWdnZXIsIHBvbGFyaXR5LCBjZmctPnZlY3RvcikpIHsKKwkJCSAgICAgICBkZXN0LCB0cmlnZ2VyLCBwb2xhcml0eSwgY2ZnLT52ZWN0b3IsIHBpbikpIHsKIAkJcHJpbnRrKCJGYWlsZWQgdG8gc2V0dXAgaW9hcGljIGVudHJ5IGZvciBpb2FwaWMgICVkLCBwaW4gJWRcbiIsCiAJCSAgICAgICBtcF9pb2FwaWNzW2FwaWNfaWRdLmFwaWNpZCwgcGluKTsKIAkJX19jbGVhcl9pcnFfdmVjdG9yKGlycSwgY2ZnKTsKQEAgLTE2NDIsMTAgKzE2NjYsOCBAQAogewogCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwogCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKIAkJcmV0dXJuOwotI2VuZGlmCiAKIAltZW1zZXQoJmVudHJ5LCAwLCBzaXplb2YoZW50cnkpKTsKIApAQCAtMjA0MCw4ICsyMDYyLDEzIEBACiAJICogSWYgdGhlIGk4MjU5IGlzIHJvdXRlZCB0aHJvdWdoIGFuIElPQVBJQwogCSAqIFB1dCB0aGF0IElPQVBJQyBpbiB2aXJ0dWFsIHdpcmUgbW9kZQogCSAqIHNvIGxlZ2FjeSBpbnRlcnJ1cHRzIGNhbiBiZSBkZWxpdmVyZWQuCisJICoKKwkgKiBXaXRoIGludGVycnVwdC1yZW1hcHBpbmcsIGZvciBub3cgd2Ugd2lsbCB1c2UgdmlydHVhbCB3aXJlIEEgbW9kZSwKKwkgKiBhcyB2aXJ0dWFsIHdpcmUgQiBpcyBsaXR0bGUgY29tcGxleCAobmVlZCB0byBjb25maWd1cmUgYm90aAorCSAqIElPQVBJQyBSVEUgYXN3ZWxsIGFzIGludGVycnVwdC1yZW1hcHBpbmcgdGFibGUgZW50cnkpLgorCSAqIEFzIHRoaXMgZ2V0cyBjYWxsZWQgZHVyaW5nIGNyYXNoIGR1bXAsIGtlZXAgdGhpcyBzaW1wbGUgZm9yIG5vdy4KIAkgKi8KLQlpZiAoaW9hcGljX2k4MjU5LnBpbiAhPSAtMSkgeworCWlmIChpb2FwaWNfaTgyNTkucGluICE9IC0xICYmICFpbnRyX3JlbWFwcGluZ19lbmFibGVkKSB7CiAJCXN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGVudHJ5OwogCiAJCW1lbXNldCgmZW50cnksIDAsIHNpemVvZihlbnRyeSkpOwpAQCAtMjA2MSw3ICsyMDg4LDEwIEBACiAJCWlvYXBpY193cml0ZV9lbnRyeShpb2FwaWNfaTgyNTkuYXBpYywgaW9hcGljX2k4MjU5LnBpbiwgZW50cnkpOwogCX0KIAotCWRpc2Nvbm5lY3RfYnNwX0FQSUMoaW9hcGljX2k4MjU5LnBpbiAhPSAtMSk7CisJLyoKKwkgKiBVc2UgdmlydHVhbCB3aXJlIEEgbW9kZSB3aGVuIGludGVycnVwdCByZW1hcHBpbmcgaXMgZW5hYmxlZC4KKwkgKi8KKwlkaXNjb25uZWN0X2JzcF9BUElDKCFpbnRyX3JlbWFwcGluZ19lbmFibGVkICYmIGlvYXBpY19pODI1OS5waW4gIT0gLTEpOwogfQogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpAQCAtMjMwMywzNyArMjMzMywyNCBAQAogI2lmZGVmIENPTkZJR19TTVAKIAogI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi1zdGF0aWMgdm9pZCBpcl9pcnFfbWlncmF0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci0KLXN0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhpcl9taWdyYXRpb25fd29yaywgaXJfaXJxX21pZ3JhdGlvbik7CiAKIC8qCiAgKiBNaWdyYXRlIHRoZSBJTy1BUElDIGlycSBpbiB0aGUgcHJlc2VuY2Ugb2YgaW50ci1yZW1hcHBpbmcuCiAgKgotICogRm9yIGVkZ2UgdHJpZ2dlcmVkLCBpcnEgbWlncmF0aW9uIGlzIGEgc2ltcGxlIGF0b21pYyB1cGRhdGUob2YgdmVjdG9yCi0gKiBhbmQgY3B1IGRlc3RpbmF0aW9uKSBvZiBJUlRFIGFuZCBmbHVzaCB0aGUgaGFyZHdhcmUgY2FjaGUuCisgKiBGb3IgYm90aCBsZXZlbCBhbmQgZWRnZSB0cmlnZ2VyZWQsIGlycSBtaWdyYXRpb24gaXMgYSBzaW1wbGUgYXRvbWljCisgKiB1cGRhdGUob2YgdmVjdG9yIGFuZCBjcHUgZGVzdGluYXRpb24pIG9mIElSVEUgYW5kIGZsdXNoIHRoZSBoYXJkd2FyZSBjYWNoZS4KICAqCi0gKiBGb3IgbGV2ZWwgdHJpZ2dlcmVkLCB3ZSBuZWVkIHRvIG1vZGlmeSB0aGUgaW8tYXBpYyBSVEUgYXN3ZWxsIHdpdGggdGhlIHVwZGF0ZQotICogdmVjdG9yIGluZm9ybWF0aW9uLCBhbG9uZyB3aXRoIG1vZGlmeWluZyBJUlRFIHdpdGggdmVjdG9yIGFuZCBkZXN0aW5hdGlvbi4KLSAqIFNvIGlycSBtaWdyYXRpb24gZm9yIGxldmVsIHRyaWdnZXJlZCBpcyBsaXR0bGUgIGJpdCBtb3JlIGNvbXBsZXggY29tcGFyZWQgdG8KLSAqIGVkZ2UgdHJpZ2dlcmVkIG1pZ3JhdGlvbi4gQnV0IHRoZSBnb29kIG5ld3MgaXMsIHdlIHVzZSB0aGUgc2FtZSBhbGdvcml0aG0KLSAqIGZvciBsZXZlbCB0cmlnZ2VyZWQgbWlncmF0aW9uIGFzIHdlIGhhdmUgdG9kYXksIG9ubHkgZGlmZmVyZW5jZSBiZWluZywKLSAqIHdlIG5vdyBpbml0aWF0ZSB0aGUgaXJxIG1pZ3JhdGlvbiBmcm9tIHByb2Nlc3MgY29udGV4dCBpbnN0ZWFkIG9mIHRoZQotICogaW50ZXJydXB0IGNvbnRleHQuCi0gKgotICogSW4gZnV0dXJlLCB3aGVuIHdlIGRvIGEgZGlyZWN0ZWQgRU9JIChjb21iaW5lZCB3aXRoIGNwdSBFT0kgYnJvYWRjYXN0Ci0gKiBzdXBwcmVzc2lvbikgdG8gdGhlIElPLUFQSUMsIGxldmVsIHRyaWdnZXJlZCBpcnEgbWlncmF0aW9uIHdpbGwgYWxzbyBiZQotICogYXMgc2ltcGxlIGFzIGVkZ2UgdHJpZ2dlcmVkIG1pZ3JhdGlvbiBhbmQgd2UgY2FuIGRvIHRoZSBpcnEgbWlncmF0aW9uCi0gKiB3aXRoIGEgc2ltcGxlIGF0b21pYyB1cGRhdGUgdG8gSU8tQVBJQyBSVEUuCisgKiBGb3IgbGV2ZWwgdHJpZ2dlcmVkLCB3ZSBlbGltaW5hdGUgdGhlIGlvLWFwaWMgUlRFIG1vZGlmaWNhdGlvbiAod2l0aCB0aGUKKyAqIHVwZGF0ZWQgdmVjdG9yIGluZm9ybWF0aW9uKSwgYnkgdXNpbmcgYSB2aXJ0dWFsIHZlY3RvciAoaW8tYXBpYyBwaW4gbnVtYmVyKS4KKyAqIFJlYWwgdmVjdG9yIHRoYXQgaXMgdXNlZCBmb3IgaW50ZXJydXB0aW5nIGNwdSB3aWxsIGJlIGNvbWluZyBmcm9tCisgKiB0aGUgaW50ZXJydXB0LXJlbWFwcGluZyB0YWJsZSBlbnRyeS4KICAqLwogc3RhdGljIHZvaWQKIG1pZ3JhdGVfaW9hcGljX2lycV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCiB7CiAJc3RydWN0IGlycV9jZmcgKmNmZzsKIAlzdHJ1Y3QgaXJ0ZSBpcnRlOwotCWludCBtb2RpZnlfaW9hcGljX3J0ZTsKIAl1bnNpZ25lZCBpbnQgZGVzdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBpcnE7CiAKIAlpZiAoIWNwdW1hc2tfaW50ZXJzZWN0cyhtYXNrLCBjcHVfb25saW5lX21hc2spKQpAQCAtMjM1MSwxMyArMjM2OCw2IEBACiAKIAlkZXN0ID0gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkX2FuZChjZmctPmRvbWFpbiwgbWFzayk7CiAKLQltb2RpZnlfaW9hcGljX3J0ZSA9IGRlc2MtPnN0YXR1cyAmIElSUV9MRVZFTDsKLQlpZiAobW9kaWZ5X2lvYXBpY19ydGUpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JCV9fdGFyZ2V0X0lPX0FQSUNfaXJxKGlycSwgZGVzdCwgY2ZnKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKLQl9Ci0KIAlpcnRlLnZlY3RvciA9IGNmZy0+dmVjdG9yOwogCWlydGUuZGVzdF9pZCA9IElSVEVfREVTVChkZXN0KTsKIApAQCAtMjM3Miw3MyArMjM4MiwxMiBAQAogCWNwdW1hc2tfY29weShkZXNjLT5hZmZpbml0eSwgbWFzayk7CiB9CiAKLXN0YXRpYyBpbnQgbWlncmF0ZV9pcnFfcmVtYXBwZWRfbGV2ZWxfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCi17Ci0JaW50IHJldCA9IC0xOwotCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBkZXNjLT5jaGlwX2RhdGE7Ci0KLQltYXNrX0lPX0FQSUNfaXJxX2Rlc2MoZGVzYyk7Ci0KLQlpZiAoaW9fYXBpY19sZXZlbF9hY2tfcGVuZGluZyhjZmcpKSB7Ci0JCS8qCi0JCSAqIEludGVycnVwdCBpbiBwcm9ncmVzcy4gTWlncmF0aW5nIGlycSBub3cgd2lsbCBjaGFuZ2UgdGhlCi0JCSAqIHZlY3RvciBpbmZvcm1hdGlvbiBpbiB0aGUgSU8tQVBJQyBSVEUgYW5kIHRoYXQgd2lsbCBjb25mdXNlCi0JCSAqIHRoZSBFT0kgYnJvYWRjYXN0IHBlcmZvcm1lZCBieSBjcHUuCi0JCSAqIFNvLCBkZWxheSB0aGUgaXJxIG1pZ3JhdGlvbiB0byB0aGUgbmV4dCBpbnN0YW5jZS4KLQkJICovCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaXJfbWlncmF0aW9uX3dvcmssIDEpOwotCQlnb3RvIHVubWFzazsKLQl9Ci0KLQkvKiBldmVydGhpbmcgaXMgY2xlYXIuIHdlIGhhdmUgcmlnaHQgb2Ygd2F5ICovCi0JbWlncmF0ZV9pb2FwaWNfaXJxX2Rlc2MoZGVzYywgZGVzYy0+cGVuZGluZ19tYXNrKTsKLQotCXJldCA9IDA7Ci0JZGVzYy0+c3RhdHVzICY9IH5JUlFfTU9WRV9QRU5ESU5HOwotCWNwdW1hc2tfY2xlYXIoZGVzYy0+cGVuZGluZ19tYXNrKTsKLQotdW5tYXNrOgotCXVubWFza19JT19BUElDX2lycV9kZXNjKGRlc2MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgaXJfaXJxX21pZ3JhdGlvbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0JdW5zaWduZWQgaW50IGlycTsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7Ci0KLQlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpIHsKLQkJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9NT1ZFX1BFTkRJTkcpIHsKLQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JCQlpZiAoIWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eSB8fAotCQkJICAgICEoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUEVORElORykpIHsKLQkJCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9NT1ZFX1BFTkRJTkc7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkoaXJxLCBkZXNjLT5wZW5kaW5nX21hc2spOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCQl9Ci0JfQotfQotCiAvKgogICogTWlncmF0ZXMgdGhlIElSUSBkZXN0aW5hdGlvbiBpbiB0aGUgcHJvY2VzcyBjb250ZXh0LgogICovCiBzdGF0aWMgdm9pZCBzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQogewotCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUwpIHsKLQkJZGVzYy0+c3RhdHVzIHw9IElSUV9NT1ZFX1BFTkRJTkc7Ci0JCWNwdW1hc2tfY29weShkZXNjLT5wZW5kaW5nX21hc2ssIG1hc2spOwotCQltaWdyYXRlX2lycV9yZW1hcHBlZF9sZXZlbF9kZXNjKGRlc2MpOwotCQlyZXR1cm47Ci0JfQotCiAJbWlncmF0ZV9pb2FwaWNfaXJxX2Rlc2MoZGVzYywgbWFzayk7CiB9CiBzdGF0aWMgdm9pZCBzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycSh1bnNpZ25lZCBpbnQgaXJxLApAQCAtMjQ0OCw2ICsyMzk3LDExIEBACiAKIAlzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycV9kZXNjKGRlc2MsIG1hc2spOwogfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycV9kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKKwkJCQkJCSAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQoreworfQogI2VuZGlmCiAKIGFzbWxpbmthZ2Ugdm9pZCBzbXBfaXJxX21vdmVfY2xlYW51cF9pbnRlcnJ1cHQodm9pZCkKQEAgLTI0NjEsNiArMjQxNSw3IEBACiAJbWUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJZm9yICh2ZWN0b3IgPSBGSVJTVF9FWFRFUk5BTF9WRUNUT1I7IHZlY3RvciA8IE5SX1ZFQ1RPUlM7IHZlY3RvcisrKSB7CiAJCXVuc2lnbmVkIGludCBpcnE7CisJCXVuc2lnbmVkIGludCBpcnI7CiAJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAkJc3RydWN0IGlycV9jZmcgKmNmZzsKIAkJaXJxID0gX19nZXRfY3B1X3Zhcih2ZWN0b3JfaXJxKVt2ZWN0b3JdOwpAQCAtMjQ4MCw2ICsyNDM1LDE4IEBACiAJCWlmICh2ZWN0b3IgPT0gY2ZnLT52ZWN0b3IgJiYgY3B1bWFza190ZXN0X2NwdShtZSwgY2ZnLT5kb21haW4pKQogCQkJZ290byB1bmxvY2s7CiAKKwkJaXJyID0gYXBpY19yZWFkKEFQSUNfSVJSICsgKHZlY3RvciAvIDMyICogMHgxMCkpOworCQkvKgorCQkgKiBDaGVjayBpZiB0aGUgdmVjdG9yIHRoYXQgbmVlZHMgdG8gYmUgY2xlYW5lZHVwIGlzCisJCSAqIHJlZ2lzdGVyZWQgYXQgdGhlIGNwdSdzIElSUi4gSWYgc28sIHRoZW4gdGhpcyBpcyBub3QKKwkJICogdGhlIGJlc3QgdGltZSB0byBjbGVhbiBpdCB1cC4gTGV0cyBjbGVhbiBpdCB1cCBpbiB0aGUKKwkJICogbmV4dCBhdHRlbXB0IGJ5IHNlbmRpbmcgYW5vdGhlciBJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUgorCQkgKiB0byBteXNlbGYuCisJCSAqLworCQlpZiAoaXJyICAmICgxIDw8ICh2ZWN0b3IgJSAzMikpKSB7CisJCQlhcGljLT5zZW5kX0lQSV9zZWxmKElSUV9NT1ZFX0NMRUFOVVBfVkVDVE9SKTsKKwkJCWdvdG8gdW5sb2NrOworCQl9CiAJCV9fZ2V0X2NwdV92YXIodmVjdG9yX2lycSlbdmVjdG9yXSA9IC0xOwogCQljZmctPm1vdmVfY2xlYW51cF9jb3VudC0tOwogdW5sb2NrOgpAQCAtMjUyOSw5ICsyNDk2LDQ0IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCitzdGF0aWMgdm9pZCBfX2VvaV9pb2FwaWNfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfY2ZnICpjZmcpCit7CisJaW50IGFwaWMsIHBpbjsKKwlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKKworCWVudHJ5ID0gY2ZnLT5pcnFfMl9waW47CisJZm9yICg7OykgeworCisJCWlmICghZW50cnkpCisJCQlicmVhazsKKworCQlhcGljID0gZW50cnktPmFwaWM7CisJCXBpbiA9IGVudHJ5LT5waW47CisJCWlvX2FwaWNfZW9pKGFwaWMsIHBpbik7CisJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZAorZW9pX2lvYXBpY19pcnEoc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJaXJxID0gZGVzYy0+aXJxOworCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCV9fZW9pX2lvYXBpY19pcnEoaXJxLCBjZmcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Cit9CisKIHN0YXRpYyB2b2lkIGFja194MmFwaWNfbGV2ZWwodW5zaWduZWQgaW50IGlycSkKIHsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCWFja194MkFQSUNfaXJxKCk7CisJZW9pX2lvYXBpY19pcnEoZGVzYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGFja194MmFwaWNfZWRnZSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMjY2MiwyMCArMjY2NCwyMCBAQAogCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKIH07CiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcl9pb2FwaWNfY2hpcCBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lCQk9ICJJUi1JTy1BUElDIiwKIAkuc3RhcnR1cAk9IHN0YXJ0dXBfaW9hcGljX2lycSwKIAkubWFzawkJPSBtYXNrX0lPX0FQSUNfaXJxLAogCS51bm1hc2sJCT0gdW5tYXNrX0lPX0FQSUNfaXJxLAorI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJLmFjawkJPSBhY2tfeDJhcGljX2VkZ2UsCiAJLmVvaQkJPSBhY2tfeDJhcGljX2xldmVsLAogI2lmZGVmIENPTkZJR19TTVAKIAkuc2V0X2FmZmluaXR5CT0gc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnEsCiAjZW5kaWYKKyNlbmRpZgogCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKIH07Ci0jZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIGluaXRfSU9fQVBJQ190cmFwcyh2b2lkKQogewpAQCAtMjkwMSwxMCArMjkwMyw4IEBACiAJICogODI1OUEuCiAJICovCiAJaWYgKHBpbjEgPT0gLTEpIHsKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKIAkJCXBhbmljKCJCSU9TIGJ1ZzogdGltZXIgbm90IGNvbm5lY3RlZCB0byBJTy1BUElDIik7Ci0jZW5kaWYKIAkJcGluMSA9IHBpbjI7CiAJCWFwaWMxID0gYXBpYzI7CiAJCW5vX3BpbjEgPSAxOwpAQCAtMjk0MCwxMCArMjk0MCw4IEBACiAJCQkJY2xlYXJfSU9fQVBJQ19waW4oMCwgcGluMSk7CiAJCQlnb3RvIG91dDsKIAkJfQotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJCWlmIChpbnRyX3JlbWFwcGluZ19lbmFibGVkKQogCQkJcGFuaWMoInRpbWVyIGRvZXNuJ3Qgd29yayB0aHJvdWdoIEludGVycnVwdC1yZW1hcHBlZCBJTy1BUElDIik7Ci0jZW5kaWYKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJY2xlYXJfSU9fQVBJQ19waW4oYXBpYzEsIHBpbjEpOwogCQlpZiAoIW5vX3BpbjEpCkBAIC0zMjM3LDkgKzMyMzUsNyBAQAogCWlmIChkZXNjKQogCQlkZXNjLT5jaGlwX2RhdGEgPSBjZmc7CiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCWZyZWVfaXJ0ZShpcnEpOwotI2VuZGlmCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CiAJX19jbGVhcl9pcnFfdmVjdG9yKGlycSwgY2ZnKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwpAQCAtMzI2NSw3ICszMjYxLDYgQEAKIAogCWRlc3QgPSBhcGljLT5jcHVfbWFza190b19hcGljaWRfYW5kKGNmZy0+ZG9tYWluLCBhcGljLT50YXJnZXRfY3B1cygpKTsKIAotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJaWYgKGlycV9yZW1hcHBlZChpcnEpKSB7CiAJCXN0cnVjdCBpcnRlIGlydGU7CiAJCWludCBpcl9pbmRleDsKQEAgLTMyOTEsMTAgKzMyODYsMTMgQEAKIAkJCQkgIE1TSV9BRERSX0lSX1NIViB8CiAJCQkJICBNU0lfQUREUl9JUl9JTkRFWDEoaXJfaW5kZXgpIHwKIAkJCQkgIE1TSV9BRERSX0lSX0lOREVYMihpcl9pbmRleCk7Ci0JfSBlbHNlCi0jZW5kaWYKLQl7Ci0JCW1zZy0+YWRkcmVzc19oaSA9IE1TSV9BRERSX0JBU0VfSEk7CisJfSBlbHNlIHsKKwkJaWYgKHgyYXBpY19lbmFibGVkKCkpCisJCQltc2ctPmFkZHJlc3NfaGkgPSBNU0lfQUREUl9CQVNFX0hJIHwKKwkJCQkJICBNU0lfQUREUl9FWFRfREVTVF9JRChkZXN0KTsKKwkJZWxzZQorCQkJbXNnLT5hZGRyZXNzX2hpID0gTVNJX0FERFJfQkFTRV9ISTsKKwogCQltc2ctPmFkZHJlc3NfbG8gPQogCQkJTVNJX0FERFJfQkFTRV9MTyB8CiAJCQkoKGFwaWMtPmlycV9kZXN0X21vZGUgPT0gMCkgPwpAQCAtMzM5NCwxNSArMzM5MiwxNiBAQAogCS5yZXRyaWdnZXIJPSBpb2FwaWNfcmV0cmlnZ2VyX2lycSwKIH07CiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtc2lfaXJfY2hpcCA9IHsKIAkubmFtZQkJPSAiSVItUENJLU1TSSIsCiAJLnVubWFzawkJPSB1bm1hc2tfbXNpX2lycSwKIAkubWFzawkJPSBtYXNrX21zaV9pcnEsCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAkuYWNrCQk9IGFja194MmFwaWNfZWRnZSwKICNpZmRlZiBDT05GSUdfU01QCiAJLnNldF9hZmZpbml0eQk9IGlyX3NldF9tc2lfaXJxX2FmZmluaXR5LAogI2VuZGlmCisjZW5kaWYKIAkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCiB9OwogCkBAIC0zNDMyLDcgKzM0MzEsNiBAQAogCX0KIAlyZXR1cm4gaW5kZXg7CiB9Ci0jZW5kaWYKIAogc3RhdGljIGludCBzZXR1cF9tc2lfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBtc2lfZGVzYyAqbXNpZGVzYywgaW50IGlycSkKIHsKQEAgLTM0NDYsNyArMzQ0NCw2IEBACiAJc2V0X2lycV9tc2koaXJxLCBtc2lkZXNjKTsKIAl3cml0ZV9tc2lfbXNnKGlycSwgJm1zZyk7CiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCWlmIChpcnFfcmVtYXBwZWQoaXJxKSkgewogCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCQkvKgpAQCAtMzQ1NSw3ICszNDUyLDYgQEAKIAkJZGVzYy0+c3RhdHVzIHw9IElSUV9NT1ZFX1BDTlRYVDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmbXNpX2lyX2NoaXAsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKIAl9IGVsc2UKLSNlbmRpZgogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZtc2lfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwogCiAJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2LT5kZXYsICJpcnEgJWQgZm9yIE1TSS9NU0ktWFxuIiwgaXJxKTsKQEAgLTM0NjksMTEgKzM0NjUsOCBAQAogCWludCByZXQsIHN1Yl9oYW5kbGU7CiAJc3RydWN0IG1zaV9kZXNjICptc2lkZXNjOwogCXVuc2lnbmVkIGludCBpcnFfd2FudDsKLQotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi0Jc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IDA7CisJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IE5VTEw7CiAJaW50IGluZGV4ID0gMDsKLSNlbmRpZgogCiAJaXJxX3dhbnQgPSBucl9pcnFzX2dzaTsKIAlzdWJfaGFuZGxlID0gMDsKQEAgLTM0ODIsNyArMzQ3NSw2IEBACiAJCWlmIChpcnEgPT0gMCkKIAkJCXJldHVybiAtMTsKIAkJaXJxX3dhbnQgPSBpcnEgKyAxOwotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJCWlmICghaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKIAkJCWdvdG8gbm9faXI7CiAKQEAgLTM1MTAsNyArMzUwMiw2IEBACiAJCQlzZXRfaXJ0ZV9pcnEoaXJxLCBpb21tdSwgaW5kZXgsIHN1Yl9oYW5kbGUpOwogCQl9CiBub19pcjoKLSNlbmRpZgogCQlyZXQgPSBzZXR1cF9tc2lfaXJxKGRldiwgbXNpZGVzYywgaXJxKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGVycm9yOwpAQCAtMzUyOCw3ICszNTE5LDcgQEAKIAlkZXN0cm95X2lycShpcnEpOwogfQogCi0jaWZkZWYgQ09ORklHX0RNQVIKKyNpZiBkZWZpbmVkIChDT05GSUdfRE1BUikgfHwgZGVmaW5lZCAoQ09ORklHX0lOVFJfUkVNQVApCiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIHZvaWQgZG1hcl9tc2lfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQogewpAQCAtMzYwOSw3ICszNjAwLDcgQEAKIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotc3RydWN0IGlycV9jaGlwIGhwZXRfbXNpX3R5cGUgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGhwZXRfbXNpX3R5cGUgPSB7CiAJLm5hbWUgPSAiSFBFVF9NU0kiLAogCS51bm1hc2sgPSBocGV0X21zaV91bm1hc2ssCiAJLm1hc2sgPSBocGV0X21zaV9tYXNrLApAQCAtNDA0NSwxMSArNDAzNiw5IEBACiAJCQllbHNlCiAJCQkJbWFzayA9IGFwaWMtPnRhcmdldF9jcHVzKCk7CiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCQkJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCiAJCQkJc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnFfZGVzYyhkZXNjLCBtYXNrKTsKIAkJCWVsc2UKLSNlbmRpZgogCQkJCXNldF9pb2FwaWNfYWZmaW5pdHlfaXJxX2Rlc2MoZGVzYywgbWFzayk7CiAJCX0KIApAQCAtNDE0Miw5ICs0MTMxLDEyIEBACiAJc3RydWN0IHJlc291cmNlICpyID0gaW9hcGljX3Jlc291cmNlczsKIAogCWlmICghcikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJJTyBBUElDIHJlc291cmNlcyBjb3VsZCBiZSBub3QgYmUgYWxsb2NhdGVkLlxuIik7Ci0JCXJldHVybiAtMTsKKwkJaWYgKG5yX2lvYXBpY3MgPiAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkiSU8gQVBJQyByZXNvdXJjZXMgY291bGRuJ3QgYmUgYWxsb2NhdGVkLlxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJcmV0dXJuIDA7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzY0LmMKaW5kZXggOGQ3NzQ4ZS4uMTc4MzY1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV82NC5jCkBAIC02OCw2ICs2OCwxMyBAQAogCQkJYXBpYyA9ICZhcGljX3BoeXNmbGF0OwogCQlwcmludGsoS0VSTl9JTkZPICJTZXR0aW5nIEFQSUMgcm91dGluZyB0byAlc1xuIiwgYXBpYy0+bmFtZSk7CiAJfQorCisJLyoKKwkgKiBOb3cgdGhhdCBhcGljIHJvdXRpbmcgbW9kZWwgaXMgc2VsZWN0ZWQsIGNvbmZpZ3VyZSB0aGUKKwkgKiBmYXVsdCBoYW5kbGluZyBmb3IgaW50ciByZW1hcHBpbmcuCisJICovCisJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCisJCWVuYWJsZV9kcmhkX2ZhdWx0X2hhbmRsaW5nKCk7CiB9CiAKIC8qIFNhbWUgZm9yIGJvdGggZmxhdCBhbmQgcGh5c2ljYWwuICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfY2x1c3Rlci5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX2NsdXN0ZXIuYwppbmRleCA4ZmI4N2I2Li40YTkwM2UyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfY2x1c3Rlci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19jbHVzdGVyLmMKQEAgLTU3LDYgKzU3LDggQEAKIAl1bnNpZ25lZCBsb25nIHF1ZXJ5X2NwdTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJeDJhcGljX3dybXNyX2ZlbmNlKCk7CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykgewogCQlfX3gyYXBpY19zZW5kX0lQSV9kZXN0KApAQCAtNzMsNiArNzUsOCBAQAogCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwl4MmFwaWNfd3Jtc3JfZmVuY2UoKTsKKwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlmb3JfZWFjaF9jcHUocXVlcnlfY3B1LCBtYXNrKSB7CiAJCWlmIChxdWVyeV9jcHUgPT0gdGhpc19jcHUpCkBAIC05MCw2ICs5NCw4IEBACiAJdW5zaWduZWQgbG9uZyBxdWVyeV9jcHU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXgyYXBpY193cm1zcl9mZW5jZSgpOworCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWZvcl9lYWNoX29ubGluZV9jcHUocXVlcnlfY3B1KSB7CiAJCWlmIChxdWVyeV9jcHUgPT0gdGhpc19jcHUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfcGh5cy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3BoeXMuYwppbmRleCAyMzYyNWI5Li5hMjg0MzU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfcGh5cy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19waHlzLmMKQEAgLTU4LDYgKzU4LDggQEAKIAl1bnNpZ25lZCBsb25nIHF1ZXJ5X2NwdTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJeDJhcGljX3dybXNyX2ZlbmNlKCk7CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykgewogCQlfX3gyYXBpY19zZW5kX0lQSV9kZXN0KHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIHF1ZXJ5X2NwdSksCkBAIC03Myw2ICs3NSw4IEBACiAJdW5zaWduZWQgbG9uZyBxdWVyeV9jcHU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXgyYXBpY193cm1zcl9mZW5jZSgpOworCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWZvcl9lYWNoX2NwdShxdWVyeV9jcHUsIG1hc2spIHsKIAkJaWYgKHF1ZXJ5X2NwdSAhPSB0aGlzX2NwdSkKQEAgLTg5LDYgKzkzLDggQEAKIAl1bnNpZ25lZCBsb25nIHF1ZXJ5X2NwdTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJeDJhcGljX3dybXNyX2ZlbmNlKCk7CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShxdWVyeV9jcHUpIHsKIAkJaWYgKHF1ZXJ5X2NwdSA9PSB0aGlzX2NwdSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYwppbmRleCAxMDAzM2ZlLi5hYzc3ODNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCkBAIC0xMTkwLDggKzExOTAsMTAgQEAKIAlzdHJ1Y3QgYXBtX3VzZXIJKmFzOwogCiAJZGV2aWNlX3N1c3BlbmQoUE1TR19TVVNQRU5EKTsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCiAJZGV2aWNlX3Bvd2VyX2Rvd24oUE1TR19TVVNQRU5EKTsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJc3lzZGV2X3N1c3BlbmQoUE1TR19TVVNQRU5EKTsKIAogCWxvY2FsX2lycV9lbmFibGUoKTsKQEAgLTEyMDksOSArMTIxMSwxMiBAQAogCWlmIChlcnIgIT0gQVBNX1NVQ0NFU1MpCiAJCWFwbV9lcnJvcigic3VzcGVuZCIsIGVycik7CiAJZXJyID0gKGVyciA9PSBBUE1fU1VDQ0VTUykgPyAwIDogLUVJTzsKKwogCXN5c2Rldl9yZXN1bWUoKTsKLQlkZXZpY2VfcG93ZXJfdXAoUE1TR19SRVNVTUUpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKKworCWRldmljZV9wb3dlcl91cChQTVNHX1JFU1VNRSk7CisKIAlkZXZpY2VfcmVzdW1lKFBNU0dfUkVTVU1FKTsKIAlxdWV1ZV9ldmVudChBUE1fTk9STUFMX1JFU1VNRSwgTlVMTCk7CiAJc3Bpbl9sb2NrKCZ1c2VyX2xpc3RfbG9jayk7CkBAIC0xMjI4LDggKzEyMzMsOSBAQAogewogCWludCBlcnI7CiAKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCWRldmljZV9wb3dlcl9kb3duKFBNU0dfU1VTUEVORCk7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCXN5c2Rldl9zdXNwZW5kKFBNU0dfU1VTUEVORCk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCkBAIC0xMjM5LDggKzEyNDUsOSBAQAogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlzeXNkZXZfcmVzdW1lKCk7Ci0JZGV2aWNlX3Bvd2VyX3VwKFBNU0dfUkVTVU1FKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwlkZXZpY2VfcG93ZXJfdXAoUE1TR19SRVNVTUUpOwogfQogCiBzdGF0aWMgYXBtX2V2ZW50X3QgZ2V0X2V2ZW50KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY2hlY2suYyBiL2FyY2gveDg2L2tlcm5lbC9jaGVjay5jCmluZGV4IDJhYzBhYjcuLmZjOTk5ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jaGVjay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jaGVjay5jCkBAIC04MywxNSArODMsMTUgQEAKIAkJdTY0IHNpemU7CiAJCWFkZHIgPSBmaW5kX2U4MjBfYXJlYV9zaXplKGFkZHIsICZzaXplLCBQQUdFX1NJWkUpOwogCi0JCWlmIChhZGRyID09IDApCisJCWlmICghKGFkZHIgKyAxKSkKKwkJCWJyZWFrOworCisJCWlmIChhZGRyID49IGNvcnJ1cHRpb25fY2hlY2tfc2l6ZSkKIAkJCWJyZWFrOwogCiAJCWlmICgoYWRkciArIHNpemUpID4gY29ycnVwdGlvbl9jaGVja19zaXplKQogCQkJc2l6ZSA9IGNvcnJ1cHRpb25fY2hlY2tfc2l6ZSAtIGFkZHI7CiAKLQkJaWYgKHNpemUgPT0gMCkKLQkJCWJyZWFrOwotCiAJCWU4MjBfdXBkYXRlX3JhbmdlKGFkZHIsIHNpemUsIEU4MjBfUkFNLCBFODIwX1JFU0VSVkVEKTsKIAkJc2Nhbl9hcmVhc1tudW1fc2Nhbl9hcmVhc10uYWRkciA9IGFkZHI7CiAJCXNjYW5fYXJlYXNbbnVtX3NjYW5fYXJlYXNdLnNpemUgPSBzaXplOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUKaW5kZXggODJkYjdmNC4uNGUyNDJmOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L01ha2VmaWxlCkBAIC0xNCwxMSArMTQsMTIgQEAKIG9iai0kKENPTkZJR19YODZfMzIpCSs9IGJ1Z3MubyBjbXB4Y2hnLm8KIG9iai0kKENPTkZJR19YODZfNjQpCSs9IGJ1Z3NfNjQubwogCitvYmotJChDT05GSUdfWDg2X0NQVV9ERUJVRykJCSs9IGNwdV9kZWJ1Zy5vCisKIG9iai0kKENPTkZJR19DUFVfU1VQX0lOVEVMKQkJKz0gaW50ZWwubwogb2JqLSQoQ09ORklHX0NQVV9TVVBfQU1EKQkJKz0gYW1kLm8KIG9iai0kKENPTkZJR19DUFVfU1VQX0NZUklYXzMyKQkJKz0gY3lyaXgubwotb2JqLSQoQ09ORklHX0NQVV9TVVBfQ0VOVEFVUl8zMikJKz0gY2VudGF1ci5vCi1vYmotJChDT05GSUdfQ1BVX1NVUF9DRU5UQVVSXzY0KQkrPSBjZW50YXVyXzY0Lm8KK29iai0kKENPTkZJR19DUFVfU1VQX0NFTlRBVVIpCQkrPSBjZW50YXVyLm8KIG9iai0kKENPTkZJR19DUFVfU1VQX1RSQU5TTUVUQV8zMikJKz0gdHJhbnNtZXRhLm8KIG9iai0kKENPTkZJR19DUFVfU1VQX1VNQ18zMikJCSs9IHVtYy5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYWRkb25fY3B1aWRfZmVhdHVyZXMuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYWRkb25fY3B1aWRfZmVhdHVyZXMuYwppbmRleCA2ODgyYTczLi44MjIwYWU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9hZGRvbl9jcHVpZF9mZWF0dXJlcy5jCkBAIC0yOSw3ICsyOSw3IEBACiAJdTMyIHJlZ3NbNF07CiAJY29uc3Qgc3RydWN0IGNwdWlkX2JpdCAqY2I7CiAKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkX2JpdCBjcHVpZF9iaXRzW10gPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgX19jcHVpbml0Y29uc3QgY3B1aWRfYml0c1tdID0gewogCQl7IFg4Nl9GRUFUVVJFX0lEQSwgQ1JfRUFYLCAxLCAweDAwMDAwMDA2IH0sCiAJCXsgMCwgMCwgMCwgMCB9CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCmluZGV4IDI1NDIzYTUuLjdlNGE0NTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwpAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAjIGluY2x1ZGUgPGFzbS9udW1hXzY0Lmg+CkBAIC0xNDEsNiArMTQyLDU1IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgYW1kX2s3X3NtcF9jaGVjayhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCS8qIGNhbGxpbmcgaXMgZnJvbSBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KCkgPyAqLworCWlmIChjLT5jcHVfaW5kZXggPT0gYm9vdF9jcHVfaWQpCisJCXJldHVybjsKKworCS8qCisJICogQ2VydGFpbiBBdGhsb25zIG1pZ2h0IHdvcmsgKGZvciB2YXJpb3VzIHZhbHVlcyBvZiAnd29yaycpIGluIFNNUAorCSAqIGJ1dCB0aGV5IGFyZSBub3QgY2VydGlmaWVkIGFzIE1QIGNhcGFibGUuCisJICovCisJLyogQXRobG9uIDY2MC82NjEgaXMgdmFsaWQuICovCisJaWYgKChjLT54ODZfbW9kZWwgPT0gNikgJiYgKChjLT54ODZfbWFzayA9PSAwKSB8fAorCSAgICAoYy0+eDg2X21hc2sgPT0gMSkpKQorCQlnb3RvIHZhbGlkX2s3OworCisJLyogRHVyb24gNjcwIGlzIHZhbGlkICovCisJaWYgKChjLT54ODZfbW9kZWwgPT0gNykgJiYgKGMtPng4Nl9tYXNrID09IDApKQorCQlnb3RvIHZhbGlkX2s3OworCisJLyoKKwkgKiBBdGhsb24gNjYyLCBEdXJvbiA2NzEsIGFuZCBBdGhsb24gPm1vZGVsIDcgaGF2ZSBjYXBhYmlsaXR5CisJICogYml0LiBJdCdzIHdvcnRoIG5vdGluZyB0aGF0IHRoZSBBNSBzdGVwcGluZyAoNjYyKSBvZiBzb21lCisJICogQXRobG9uIFhQJ3MgaGF2ZSB0aGUgTVAgYml0IHNldC4KKwkgKiBTZWUgaHR0cDovL3d3dy5oZWlzZS5kZS9uZXdzdGlja2VyL2RhdGEvam93LTE4LjEwLjAxLTAwMCBmb3IKKwkgKiBtb3JlLgorCSAqLworCWlmICgoKGMtPng4Nl9tb2RlbCA9PSA2KSAmJiAoYy0+eDg2X21hc2sgPj0gMikpIHx8CisJICAgICgoYy0+eDg2X21vZGVsID09IDcpICYmIChjLT54ODZfbWFzayA+PSAxKSkgfHwKKwkgICAgIChjLT54ODZfbW9kZWwgPiA3KSkKKwkJaWYgKGNwdV9oYXNfbXApCisJCQlnb3RvIHZhbGlkX2s3OworCisJLyogSWYgd2UgZ2V0IGhlcmUsIG5vdCBhIGNlcnRpZmllZCBTTVAgY2FwYWJsZSBBTUQgc3lzdGVtLiAqLworCisJLyoKKwkgKiBEb24ndCB0YWludCBpZiB3ZSBhcmUgcnVubmluZyBTTVAga2VybmVsIG9uIGEgc2luZ2xlIG5vbi1NUAorCSAqIGFwcHJvdmVkIEF0aGxvbgorCSAqLworCVdBUk5fT05DRSgxLCAiV0FSTklORzogVGhpcyBjb21iaW5hdGlvbiBvZiBBTUQiCisJCSJwcm9jZXNzb3JzIGlzIG5vdCBzdWl0YWJsZSBmb3IgU01QLlxuIik7CisJaWYgKCF0ZXN0X3RhaW50KFRBSU5UX1VOU0FGRV9TTVApKQorCQlhZGRfdGFpbnQoVEFJTlRfVU5TQUZFX1NNUCk7CisKK3ZhbGlkX2s3OgorCTsKKyNlbmRpZgorfQorCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgaW5pdF9hbWRfazcoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCXUzMiBsLCBoOwpAQCAtMTc1LDYgKzIyNSw4IEBACiAJfQogCiAJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfSzcpOworCisJYW1kX2s3X3NtcF9jaGVjayhjKTsKIH0KICNlbmRpZgogCkBAIC00NTAsNyArNTAyLDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGNwdV9kZXYgYW1kX2NwdV9kZXYgX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1X2RldiBfX2NwdWluaXRjb25zdCBhbWRfY3B1X2RldiA9IHsKIAkuY192ZW5kb3IJPSAiQU1EIiwKIAkuY19pZGVudAk9IHsgIkF1dGhlbnRpY0FNRCIgfSwKICNpZmRlZiBDT05GSUdfWDg2XzMyCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NlbnRhdXIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY2VudGF1ci5jCmluZGV4IDg5YmZkZDkuLmM5NWU4MzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY2VudGF1ci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY2VudGF1ci5jCkBAIC0xLDExICsxLDExIEBACisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vZTgyMC5oPgogI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgogCiAjaW5jbHVkZSAiY3B1LmgiCiAKQEAgLTI3Niw3ICsyNzYsNyBAQAogCQkgKi8KIAkJYy0+eDg2X2NhcGFiaWxpdHlbNV0gPSBjcHVpZF9lZHgoMHhDMDAwMDAwMSk7CiAJfQotCisjaWZkZWYgQ09ORklHX1g4Nl8zMgogCS8qIEN5cml4IElJSSBmYW1pbHkgbmVlZHMgQ1g4ICYgUEdFIGV4cGxpY2l0bHkgZW5hYmxlZC4gKi8KIAlpZiAoYy0+eDg2X21vZGVsID49IDYgJiYgYy0+eDg2X21vZGVsIDw9IDkpIHsKIAkJcmRtc3IoTVNSX1ZJQV9GQ1IsIGxvLCBoaSk7CkBAIC0yODgsNiArMjg4LDExIEBACiAJLyogQmVmb3JlIE5laGVtaWFoLCB0aGUgQzMncyBoYWQgM2ROT1chICovCiAJaWYgKGMtPng4Nl9tb2RlbCA+PSA2ICYmIGMtPng4Nl9tb2RlbCA8IDkpCiAJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFXzNETk9XKTsKKyNlbmRpZgorCWlmIChjLT54ODYgPT0gMHg2ICYmIGMtPng4Nl9tb2RlbCA+PSAweGYpIHsKKwkJYy0+eDg2X2NhY2hlX2FsaWdubWVudCA9IGMtPng4Nl9jbGZsdXNoX3NpemUgKiAyOworCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9SRVBfR09PRCk7CisJfQogCiAJZGlzcGxheV9jYWNoZWluZm8oYyk7CiB9CkBAIC0zMTYsMTYgKzMyMSwyNSBAQAogc3RhdGljIHZvaWQgX19jcHVpbml0IGVhcmx5X2luaXRfY2VudGF1cihzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJc3dpdGNoIChjLT54ODYpIHsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCiAJY2FzZSA1OgogCQkvKiBFbXVsYXRlIE1UUlJzIHVzaW5nIENlbnRhdXIncyBNQ1IuICovCiAJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0NFTlRBVVJfTUNSKTsKIAkJYnJlYWs7CisjZW5kaWYKKwljYXNlIDY6CisJCWlmIChjLT54ODZfbW9kZWwgPj0gMHhmKQorCQkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKTsKKwkJYnJlYWs7CiAJfQorI2lmZGVmIENPTkZJR19YODZfNjQKKwlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9TWVNFTlRFUjMyKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgaW5pdF9jZW50YXVyKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKLQorI2lmZGVmIENPTkZJR19YODZfMzIKIAljaGFyICpuYW1lOwogCXUzMiAgZmNyX3NldCA9IDA7CiAJdTMyICBmY3JfY2xyID0gMDsKQEAgLTMzNyw4ICszNTEsMTAgQEAKIAkgKiAzRE5vdyBpcyBJRGQgYnkgYml0IDMxIGluIGV4dGVuZGVkIENQVUlEICgxKjMyKzMxKSBhbnl3YXkKIAkgKi8KIAljbGVhcl9jcHVfY2FwKGMsIDAqMzIrMzEpOwotCisjZW5kaWYKKwllYXJseV9pbml0X2NlbnRhdXIoYyk7CiAJc3dpdGNoIChjLT54ODYpIHsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCiAJY2FzZSA1OgogCQlzd2l0Y2ggKGMtPng4Nl9tb2RlbCkgewogCQljYXNlIDQ6CkBAIC00NDIsMTYgKzQ1OCwyMCBAQAogCQl9CiAJCXNwcmludGYoYy0+eDg2X21vZGVsX2lkLCAiV2luQ2hpcCAlcyIsIG5hbWUpOwogCQlicmVhazsKLQorI2VuZGlmCiAJY2FzZSA2OgogCQlpbml0X2MzKGMpOwogCQlicmVhazsKIAl9CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0xGRU5DRV9SRFRTQyk7CisjZW5kaWYKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBfX2NwdWluaXQKIGNlbnRhdXJfc2l6ZV9jYWNoZShzdHJ1Y3QgY3B1aW5mb194ODYgKmMsIHVuc2lnbmVkIGludCBzaXplKQogeworI2lmZGVmIENPTkZJR19YODZfMzIKIAkvKiBWSUEgQzMgQ1BVcyAoNjcwLTY4RikgbmVlZCBmdXJ0aGVyIHNoaWZ0aW5nLiAqLwogCWlmICgoYy0+eDg2ID09IDYpICYmICgoYy0+eDg2X21vZGVsID09IDcpIHx8IChjLT54ODZfbW9kZWwgPT0gOCkpKQogCQlzaXplID4+PSA4OwpAQCAtNDY0LDExICs0ODQsMTEgQEAKIAlpZiAoKGMtPng4NiA9PSA2KSAmJiAoYy0+eDg2X21vZGVsID09IDkpICYmCiAJCQkJKGMtPng4Nl9tYXNrID09IDEpICYmIChzaXplID09IDY1KSkKIAkJc2l6ZSAtPSAxOwotCisjZW5kaWYKIAlyZXR1cm4gc2l6ZTsKIH0KIAotc3RhdGljIHN0cnVjdCBjcHVfZGV2IGNlbnRhdXJfY3B1X2RldiBfX2NwdWluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVfZGV2IF9fY3B1aW5pdGNvbnN0IGNlbnRhdXJfY3B1X2RldiA9IHsKIAkuY192ZW5kb3IJPSAiQ2VudGF1ciIsCiAJLmNfaWRlbnQJPSB7ICJDZW50YXVySGF1bHMiIH0sCiAJLmNfZWFybHlfaW5pdAk9IGVhcmx5X2luaXRfY2VudGF1ciwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY2VudGF1cl82NC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jZW50YXVyXzY0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNjI1ZjUuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jZW50YXVyXzY0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotCi0jaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0KLSNpbmNsdWRlICJjcHUuaCIKLQotc3RhdGljIHZvaWQgX19jcHVpbml0IGVhcmx5X2luaXRfY2VudGF1cihzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCi17Ci0JaWYgKGMtPng4NiA9PSAweDYgJiYgYy0+eDg2X21vZGVsID49IDB4ZikKLQkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDKTsKLQotCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1NZU0VOVEVSMzIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgaW5pdF9jZW50YXVyKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKLXsKLQllYXJseV9pbml0X2NlbnRhdXIoYyk7Ci0KLQlpZiAoYy0+eDg2ID09IDB4NiAmJiBjLT54ODZfbW9kZWwgPj0gMHhmKSB7Ci0JCWMtPng4Nl9jYWNoZV9hbGlnbm1lbnQgPSBjLT54ODZfY2xmbHVzaF9zaXplICogMjsKLQkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfUkVQX0dPT0QpOwotCX0KLQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9MRkVOQ0VfUkRUU0MpOwotfQotCi1zdGF0aWMgc3RydWN0IGNwdV9kZXYgY2VudGF1cl9jcHVfZGV2IF9fY3B1aW5pdGRhdGEgPSB7Ci0JLmNfdmVuZG9yCT0gIkNlbnRhdXIiLAotCS5jX2lkZW50CT0geyAiQ2VudGF1ckhhdWxzIiB9LAotCS5jX2Vhcmx5X2luaXQJPSBlYXJseV9pbml0X2NlbnRhdXIsCi0JLmNfaW5pdAkJPSBpbml0X2NlbnRhdXIsCi0JLmNfeDg2X3ZlbmRvcgk9IFg4Nl9WRU5ET1JfQ0VOVEFVUiwKLX07Ci0KLWNwdV9kZXZfcmVnaXN0ZXIoY2VudGF1cl9jcHVfZGV2KTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKaW5kZXggODI2ZDVjOC4uZTI5NjJjYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCkBAIC0xLDUyICsxLDUyIEBACi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZ2RiLmg+Ci0jaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgotI2luY2x1ZGUgPGFzbS9pMzg3Lmg+Ci0jaW5jbHVkZSA8YXNtL21zci5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZ2RiLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9zdGFja3Byb3RlY3Rvci5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgotI2luY2x1ZGUgPGFzbS9tdHJyLmg+Ci0jaW5jbHVkZSA8YXNtL21jZS5oPgotI2luY2x1ZGUgPGFzbS9wYXQuaD4KLSNpbmNsdWRlIDxhc20vYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL251bWEuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+Ci0jaW5jbHVkZSA8YXNtL2NwdS5oPgorI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS90b3BvbG9neS5oPgogI2luY2x1ZGUgPGFzbS9jcHVtYXNrLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vZGVzYy5oPgorI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CisjaW5jbHVkZSA8YXNtL210cnIuaD4KKyNpbmNsdWRlIDxhc20vbnVtYS5oPgorI2luY2x1ZGUgPGFzbS9hc20uaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CisjaW5jbHVkZSA8YXNtL21jZS5oPgorI2luY2x1ZGUgPGFzbS9tc3IuaD4KKyNpbmNsdWRlIDxhc20vcGF0Lmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCiAjaW5jbHVkZSA8YXNtL3V2L3V2Lmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9kZXNjLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9wcm90by5oPgotI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3N0YWNrcHJvdGVjdG9yLmg+Ci0KICNpbmNsdWRlICJjcHUuaCIKIAogI2lmZGVmIENPTkZJR19YODZfNjQKIAogLyogYWxsIG9mIHRoZXNlIG1hc2tzIGFyZSBpbml0aWFsaXplZCBpbiBzZXR1cF9jcHVfbG9jYWxfbWFza3MoKSAqLwotY3B1bWFza192YXJfdCBjcHVfY2FsbGluX21hc2s7Ci1jcHVtYXNrX3Zhcl90IGNwdV9jYWxsb3V0X21hc2s7CiBjcHVtYXNrX3Zhcl90IGNwdV9pbml0aWFsaXplZF9tYXNrOworY3B1bWFza192YXJfdCBjcHVfY2FsbG91dF9tYXNrOworY3B1bWFza192YXJfdCBjcHVfY2FsbGluX21hc2s7CiAKIC8qIHJlcHJlc2VudGluZyBjcHVzIGZvciB3aGljaCBzaWJsaW5nIG1hcHMgY2FuIGJlIGNvbXB1dGVkICovCiBjcHVtYXNrX3Zhcl90IGNwdV9zaWJsaW5nX3NldHVwX21hc2s7CkBAIC02MiwxNSArNjIsMTUgQEAKIAogI2Vsc2UgLyogQ09ORklHX1g4Nl8zMiAqLwogCi1jcHVtYXNrX3QgY3B1X2NhbGxpbl9tYXA7CitjcHVtYXNrX3QgY3B1X3NpYmxpbmdfc2V0dXBfbWFwOwogY3B1bWFza190IGNwdV9jYWxsb3V0X21hcDsKIGNwdW1hc2tfdCBjcHVfaW5pdGlhbGl6ZWQ7Ci1jcHVtYXNrX3QgY3B1X3NpYmxpbmdfc2V0dXBfbWFwOworY3B1bWFza190IGNwdV9jYWxsaW5fbWFwOwogCiAjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwogCiAKLXN0YXRpYyBzdHJ1Y3QgY3B1X2RldiAqdGhpc19jcHUgX19jcHVpbml0ZGF0YTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1X2RldiAqdGhpc19jcHUgX19jcHVpbml0ZGF0YTsKIAogREVGSU5FX1BFUl9DUFVfUEFHRV9BTElHTkVEKHN0cnVjdCBnZHRfcGFnZSwgZ2R0X3BhZ2UpID0geyAuZ2R0ID0gewogI2lmZGVmIENPTkZJR19YODZfNjQKQEAgLTc5LDQ4ICs3OSw0OCBAQAogCSAqIElSRVQgd2lsbCBjaGVjayB0aGUgc2VnbWVudCB0eXBlcyAga2tlaWwgMjAwMC8xMC8yOAogCSAqIEFsc28gc3lzcmV0IG1hbmRhdGVzIGEgc3BlY2lhbCBHRFQgbGF5b3V0CiAJICoKLQkgKiBUaGUgVExTIGRlc2NyaXB0b3JzIGFyZSBjdXJyZW50bHkgYXQgYSBkaWZmZXJlbnQgcGxhY2UgY29tcGFyZWQgdG8gaTM4Ni4KKwkgKiBUTFMgZGVzY3JpcHRvcnMgYXJlIGN1cnJlbnRseSBhdCBhIGRpZmZlcmVudCBwbGFjZSBjb21wYXJlZCB0byBpMzg2LgogCSAqIEhvcGVmdWxseSBub2JvZHkgZXhwZWN0cyB0aGVtIGF0IGEgZml4ZWQgcGxhY2UgKFdpbmU/KQogCSAqLwotCVtHRFRfRU5UUllfS0VSTkVMMzJfQ1NdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOWIwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0tFUk5FTF9DU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwYWY5YjAwIH0gfSB9LAotCVtHRFRfRU5UUllfS0VSTkVMX0RTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjkzMDAgfSB9IH0sCi0JW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVIzMl9DU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2ZmYjAwIH0gfSB9LAotCVtHRFRfRU5UUllfREVGQVVMVF9VU0VSX0RTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZmYzMDAgfSB9IH0sCi0JW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfQ1NdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGFmZmIwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0tFUk5FTDMyX0NTXQkJPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2Y5YjAwIH0gfSB9LAorCVtHRFRfRU5UUllfS0VSTkVMX0NTXQkJPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwYWY5YjAwIH0gfSB9LAorCVtHRFRfRU5UUllfS0VSTkVMX0RTXQkJPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2Y5MzAwIH0gfSB9LAorCVtHRFRfRU5UUllfREVGQVVMVF9VU0VSMzJfQ1NdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmZmIwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9EU10JPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2ZmMzAwIH0gfSB9LAorCVtHRFRfRU5UUllfREVGQVVMVF9VU0VSX0NTXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBhZmZiMDAgfSB9IH0sCiAjZWxzZQotCVtHRFRfRU5UUllfS0VSTkVMX0NTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjlhMDAgfSB9IH0sCi0JW0dEVF9FTlRSWV9LRVJORUxfRFNdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOTIwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9DU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2ZmYTAwIH0gfSB9LAotCVtHRFRfRU5UUllfREVGQVVMVF9VU0VSX0RTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZmYyMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9LRVJORUxfQ1NdCQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjlhMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9LRVJORUxfRFNdCQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjkyMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfQ1NdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmZmEwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9EU10JPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2ZmMjAwIH0gfSB9LAogCS8qCiAJICogU2VnbWVudHMgdXNlZCBmb3IgY2FsbGluZyBQblAgQklPUyBoYXZlIGJ5dGUgZ3JhbnVsYXJpdHkuCiAJICogVGhleSBjb2RlIHNlZ21lbnRzIGFuZCBkYXRhIHNlZ21lbnRzIGhhdmUgZml4ZWQgNjRrIGxpbWl0cywKIAkgKiB0aGUgdHJhbnNmZXIgc2VnbWVudCBzaXplcyBhcmUgc2V0IGF0IHJ1biB0aW1lLgogCSAqLwogCS8qIDMyLWJpdCBjb2RlICovCi0JW0dEVF9FTlRSWV9QTlBCSU9TX0NTMzJdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDQwOWEwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX1BOUEJJT1NfQ1MzMl0JPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwNDA5YTAwIH0gfSB9LAogCS8qIDE2LWJpdCBjb2RlICovCi0JW0dEVF9FTlRSWV9QTlBCSU9TX0NTMTZdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDAwOWEwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX1BOUEJJT1NfQ1MxNl0JPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwMDA5YTAwIH0gfSB9LAogCS8qIDE2LWJpdCBkYXRhICovCi0JW0dEVF9FTlRSWV9QTlBCSU9TX0RTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDAwMDkyMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9QTlBCSU9TX0RTXQkJPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwMDA5MjAwIH0gfSB9LAogCS8qIDE2LWJpdCBkYXRhICovCi0JW0dEVF9FTlRSWV9QTlBCSU9TX1RTMV0gPSB7IHsgeyAweDAwMDAwMDAwLCAweDAwMDA5MjAwIH0gfSB9LAorCVtHRFRfRU5UUllfUE5QQklPU19UUzFdCQk9IHsgeyB7IDB4MDAwMDAwMDAsIDB4MDAwMDkyMDAgfSB9IH0sCiAJLyogMTYtYml0IGRhdGEgKi8KLQlbR0RUX0VOVFJZX1BOUEJJT1NfVFMyXSA9IHsgeyB7IDB4MDAwMDAwMDAsIDB4MDAwMDkyMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9QTlBCSU9TX1RTMl0JCT0geyB7IHsgMHgwMDAwMDAwMCwgMHgwMDAwOTIwMCB9IH0gfSwKIAkvKgogCSAqIFRoZSBBUE0gc2VnbWVudHMgaGF2ZSBieXRlIGdyYW51bGFyaXR5IGFuZCB0aGVpciBiYXNlcwogCSAqIGFyZSBzZXQgYXQgcnVuIHRpbWUuICBBbGwgaGF2ZSA2NGsgbGltaXRzLgogCSAqLwogCS8qIDMyLWJpdCBjb2RlICovCi0JW0dEVF9FTlRSWV9BUE1CSU9TX0JBU0VdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDQwOWEwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0FQTUJJT1NfQkFTRV0JPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwNDA5YTAwIH0gfSB9LAogCS8qIDE2LWJpdCBjb2RlICovCi0JW0dEVF9FTlRSWV9BUE1CSU9TX0JBU0UrMV0gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwMDA5YTAwIH0gfSB9LAorCVtHRFRfRU5UUllfQVBNQklPU19CQVNFKzFdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDAwOWEwMCB9IH0gfSwKIAkvKiBkYXRhICovCi0JW0dEVF9FTlRSWV9BUE1CSU9TX0JBU0UrMl0gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwNDA5MjAwIH0gfSB9LAorCVtHRFRfRU5UUllfQVBNQklPU19CQVNFKzJdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDQwOTIwMCB9IH0gfSwKIAotCVtHRFRfRU5UUllfRVNQRklYX1NTXSA9IHsgeyB7IDB4MDAwMDAwMDAsIDB4MDBjMDkyMDAgfSB9IH0sCi0JW0dEVF9FTlRSWV9QRVJDUFVdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOTIwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0VTUEZJWF9TU10JCT0geyB7IHsgMHgwMDAwMDAwMCwgMHgwMGMwOTIwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX1BFUkNQVV0JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOTIwMCB9IH0gfSwKIAlHRFRfU1RBQ0tfQ0FOQVJZX0lOSVQKICNlbmRpZgogfSB9OwpAQCAtMTY0LDE2ICsxNjQsMTcgQEAKIAkgKiB0aGUgQ1BVSUQuIEFkZCAidm9sYXRpbGUiIHRvIG5vdCBhbGxvdyBnY2MgdG8KIAkgKiBvcHRpbWl6ZSB0aGUgc3Vic2VxdWVudCBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLgogCSAqLwotCWFzbSB2b2xhdGlsZSAoInB1c2hmbFxuXHQiCi0JCSAgICAgICJwdXNoZmxcblx0IgotCQkgICAgICAicG9wbCAlMFxuXHQiCi0JCSAgICAgICJtb3ZsICUwLCUxXG5cdCIKLQkJICAgICAgInhvcmwgJTIsJTBcblx0IgotCQkgICAgICAicHVzaGwgJTBcblx0IgotCQkgICAgICAicG9wZmxcblx0IgotCQkgICAgICAicHVzaGZsXG5cdCIKLQkJICAgICAgInBvcGwgJTBcblx0IgotCQkgICAgICAicG9wZmxcblx0IgorCWFzbSB2b2xhdGlsZSAoInB1c2hmbAkJXG5cdCIKKwkJICAgICAgInB1c2hmbAkJXG5cdCIKKwkJICAgICAgInBvcGwgJTAJCVxuXHQiCisJCSAgICAgICJtb3ZsICUwLCAlMQlcblx0IgorCQkgICAgICAieG9ybCAlMiwgJTAJXG5cdCIKKwkJICAgICAgInB1c2hsICUwCQlcblx0IgorCQkgICAgICAicG9wZmwJCVxuXHQiCisJCSAgICAgICJwdXNoZmwJCVxuXHQiCisJCSAgICAgICJwb3BsICUwCQlcblx0IgorCQkgICAgICAicG9wZmwJCVxuXHQiCisKIAkJICAgICAgOiAiPSZyIiAoZjEpLCAiPSZyIiAoZjIpCiAJCSAgICAgIDogImlyIiAoZmxhZykpOwogCkBAIC0xODgsMTggKzE4OSwyMiBAQAogCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgc3F1YXNoX3RoZV9zdHVwaWRfc2VyaWFsX251bWJlcihzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7Ci0JaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfUE4pICYmIGRpc2FibGVfeDg2X3NlcmlhbF9ucikgewotCQkvKiBEaXNhYmxlIHByb2Nlc3NvciBzZXJpYWwgbnVtYmVyICovCi0JCXVuc2lnbmVkIGxvbmcgbG8sIGhpOwotCQlyZG1zcihNU1JfSUEzMl9CQkxfQ1JfQ1RMLCBsbywgaGkpOwotCQlsbyB8PSAweDIwMDAwMDsKLQkJd3Jtc3IoTVNSX0lBMzJfQkJMX0NSX0NUTCwgbG8sIGhpKTsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJDUFUgc2VyaWFsIG51bWJlciBkaXNhYmxlZC5cbiIpOwotCQljbGVhcl9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1BOKTsKKwl1bnNpZ25lZCBsb25nIGxvLCBoaTsKIAotCQkvKiBEaXNhYmxpbmcgdGhlIHNlcmlhbCBudW1iZXIgbWF5IGFmZmVjdCB0aGUgY3B1aWQgbGV2ZWwgKi8KLQkJYy0+Y3B1aWRfbGV2ZWwgPSBjcHVpZF9lYXgoMCk7Ci0JfQorCWlmICghY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9QTikgfHwgIWRpc2FibGVfeDg2X3NlcmlhbF9ucikKKwkJcmV0dXJuOworCisJLyogRGlzYWJsZSBwcm9jZXNzb3Igc2VyaWFsIG51bWJlcjogKi8KKworCXJkbXNyKE1TUl9JQTMyX0JCTF9DUl9DVEwsIGxvLCBoaSk7CisJbG8gfD0gMHgyMDAwMDA7CisJd3Jtc3IoTVNSX0lBMzJfQkJMX0NSX0NUTCwgbG8sIGhpKTsKKworCXByaW50ayhLRVJOX05PVElDRSAiQ1BVIHNlcmlhbCBudW1iZXIgZGlzYWJsZWQuXG4iKTsKKwljbGVhcl9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1BOKTsKKworCS8qIERpc2FibGluZyB0aGUgc2VyaWFsIG51bWJlciBtYXkgYWZmZWN0IHRoZSBjcHVpZCBsZXZlbCAqLworCWMtPmNwdWlkX2xldmVsID0gY3B1aWRfZWF4KDApOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCB4ODZfc2VyaWFsX25yX3NldHVwKGNoYXIgKnMpCkBAIC0yMzIsNiArMjM3LDcgQEAKIAl1MzIgZmVhdHVyZTsKIAl1MzIgbGV2ZWw7CiB9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkX2RlcGVuZGVudF9mZWF0dXJlIF9fY3B1aW5pdGNvbnN0CiBjcHVpZF9kZXBlbmRlbnRfZmVhdHVyZXNbXSA9IHsKIAl7IFg4Nl9GRUFUVVJFX01XQUlULAkJMHgwMDAwMDAwNSB9LApAQCAtMjQzLDcgKzI0OSwxMSBAQAogc3RhdGljIHZvaWQgX19jcHVpbml0IGZpbHRlcl9jcHVpZF9mZWF0dXJlcyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMsIGJvb2wgd2FybikKIHsKIAljb25zdCBzdHJ1Y3QgY3B1aWRfZGVwZW5kZW50X2ZlYXR1cmUgKmRmOworCiAJZm9yIChkZiA9IGNwdWlkX2RlcGVuZGVudF9mZWF0dXJlczsgZGYtPmZlYXR1cmU7IGRmKyspIHsKKworCQlpZiAoIWNwdV9oYXMoYywgZGYtPmZlYXR1cmUpKQorCQkJY29udGludWU7CiAJCS8qCiAJCSAqIE5vdGU6IGNwdWlkX2xldmVsIGlzIHNldCB0byAtMSBpZiB1bmF2YWlsYWJsZSwgYnV0CiAJCSAqIGV4dGVuZGVkX2V4dGVuZGVkX2xldmVsIGlzIHNldCB0byAwIGlmIHVuYXZhaWxhYmxlCkBAIC0yNTEsMzIgKzI2MSwzMiBAQAogCQkgKiB3aGVuIHNpZ25lZDsgaGVuY2UgdGhlIHdlaXJkIG1lc3NpbmcgYXJvdW5kIHdpdGgKIAkJICogc2lnbnMgaGVyZS4uLgogCQkgKi8KLQkJaWYgKGNwdV9oYXMoYywgZGYtPmZlYXR1cmUpICYmCi0JCSAgICAoKHMzMilkZi0+bGV2ZWwgPCAwID8KKwkJaWYgKCEoKHMzMilkZi0+bGV2ZWwgPCAwID8KIAkJICAgICAodTMyKWRmLT5sZXZlbCA+ICh1MzIpYy0+ZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgOgotCQkgICAgIChzMzIpZGYtPmxldmVsID4gKHMzMiljLT5jcHVpZF9sZXZlbCkpIHsKLQkJCWNsZWFyX2NwdV9jYXAoYywgZGYtPmZlYXR1cmUpOwotCQkJaWYgKHdhcm4pCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSAgICAgICAiQ1BVOiBDUFUgZmVhdHVyZSAlcyBkaXNhYmxlZCAiCi0JCQkJICAgICAgICJkdWUgdG8gbGFjayBvZiBDUFVJRCBsZXZlbCAweCV4XG4iLAotCQkJCSAgICAgICB4ODZfY2FwX2ZsYWdzW2RmLT5mZWF0dXJlXSwKLQkJCQkgICAgICAgZGYtPmxldmVsKTsKLQkJfQorCQkgICAgIChzMzIpZGYtPmxldmVsID4gKHMzMiljLT5jcHVpZF9sZXZlbCkpCisJCQljb250aW51ZTsKKworCQljbGVhcl9jcHVfY2FwKGMsIGRmLT5mZWF0dXJlKTsKKwkJaWYgKCF3YXJuKQorCQkJY29udGludWU7CisKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIkNQVTogQ1BVIGZlYXR1cmUgJXMgZGlzYWJsZWQsIG5vIENQVUlEIGxldmVsIDB4JXhcbiIsCisJCQkJeDg2X2NhcF9mbGFnc1tkZi0+ZmVhdHVyZV0sIGRmLT5sZXZlbCk7CiAJfQogfQogCiAvKgogICogTmFtaW5nIGNvbnZlbnRpb24gc2hvdWxkIGJlOiA8TmFtZT4gWyg8Q29kZW5hbWU+KV0KICAqIFRoaXMgdGFibGUgb25seSBpcyB1c2VkIHVubGVzcyBpbml0Xzx2ZW5kb3I+KCkgYmVsb3cgZG9lc24ndCBzZXQgaXQ7Ci0gKiBpbiBwYXJ0aWN1bGFyLCBpZiBDUFVJRCBsZXZlbHMgMHg4MDAwMDAwMi4uNCBhcmUgc3VwcG9ydGVkLCB0aGlzIGlzbid0IHVzZWQKLSAqCisgKiBpbiBwYXJ0aWN1bGFyLCBpZiBDUFVJRCBsZXZlbHMgMHg4MDAwMDAwMi4uNCBhcmUgc3VwcG9ydGVkLCB0aGlzCisgKiBpc24ndCB1c2VkCiAgKi8KIAogLyogTG9vayB1cCBDUFUgbmFtZXMgYnkgdGFibGUgbG9va3VwLiAqLwotc3RhdGljIGNoYXIgX19jcHVpbml0ICp0YWJsZV9sb29rdXBfbW9kZWwoc3RydWN0IGNwdWluZm9feDg2ICpjKQorc3RhdGljIGNvbnN0IGNoYXIgKl9fY3B1aW5pdCB0YWJsZV9sb29rdXBfbW9kZWwoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewotCXN0cnVjdCBjcHVfbW9kZWxfaW5mbyAqaW5mbzsKKwljb25zdCBzdHJ1Y3QgY3B1X21vZGVsX2luZm8gKmluZm87CiAKIAlpZiAoYy0+eDg2X21vZGVsID49IDE2KQogCQlyZXR1cm4gTlVMTDsJLyogUmFuZ2UgY2hlY2sgKi8KQEAgLTMwNyw4ICszMTcsMTAgQEAKIAlsb2FkX3N0YWNrX2NhbmFyeV9zZWdtZW50KCk7CiB9CiAKLS8qIEN1cnJlbnQgZ2R0IHBvaW50cyAlZnMgYXQgdGhlICJtYXN0ZXIiIHBlci1jcHUgYXJlYTogYWZ0ZXIgdGhpcywKLSAqIGl0J3Mgb24gdGhlIHJlYWwgb25lLiAqLworLyoKKyAqIEN1cnJlbnQgZ2R0IHBvaW50cyAlZnMgYXQgdGhlICJtYXN0ZXIiIHBlci1jcHUgYXJlYTogYWZ0ZXIgdGhpcywKKyAqIGl0J3Mgb24gdGhlIHJlYWwgb25lLgorICovCiB2b2lkIHN3aXRjaF90b19uZXdfZ2R0KGludCBjcHUpCiB7CiAJc3RydWN0IGRlc2NfcHRyIGdkdF9kZXNjcjsKQEAgLTMyMSw3ICszMzMsNyBAQAogCWxvYWRfcGVyY3B1X3NlZ21lbnQoY3B1KTsKIH0KIAotc3RhdGljIHN0cnVjdCBjcHVfZGV2ICpjcHVfZGV2c1tYODZfVkVORE9SX05VTV0gPSB7fTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1X2RldiAqX19jcHVpbml0ZGF0YSBjcHVfZGV2c1tYODZfVkVORE9SX05VTV0gPSB7fTsKIAogc3RhdGljIHZvaWQgX19jcHVpbml0IGRlZmF1bHRfaW5pdChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CkBAIC0zNDAsNyArMzUyLDcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgc3RydWN0IGNwdV9kZXYgX19jcHVpbml0ZGF0YSBkZWZhdWx0X2NwdSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1X2RldiBfX2NwdWluaXRjb25zdCBkZWZhdWx0X2NwdSA9IHsKIAkuY19pbml0CT0gZGVmYXVsdF9pbml0LAogCS5jX3ZlbmRvciA9ICJVbmtub3duIiwKIAkuY194ODZfdmVuZG9yID0gWDg2X1ZFTkRPUl9VTktOT1dOLApAQCAtMzU0LDIyICszNjYsMjQgQEAKIAlpZiAoYy0+ZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgPCAweDgwMDAwMDA0KQogCQlyZXR1cm47CiAKLQl2ID0gKHVuc2lnbmVkIGludCAqKSBjLT54ODZfbW9kZWxfaWQ7CisJdiA9ICh1bnNpZ25lZCBpbnQgKiljLT54ODZfbW9kZWxfaWQ7CiAJY3B1aWQoMHg4MDAwMDAwMiwgJnZbMF0sICZ2WzFdLCAmdlsyXSwgJnZbM10pOwogCWNwdWlkKDB4ODAwMDAwMDMsICZ2WzRdLCAmdls1XSwgJnZbNl0sICZ2WzddKTsKIAljcHVpZCgweDgwMDAwMDA0LCAmdls4XSwgJnZbOV0sICZ2WzEwXSwgJnZbMTFdKTsKIAljLT54ODZfbW9kZWxfaWRbNDhdID0gMDsKIAotCS8qIEludGVsIGNoaXBzIHJpZ2h0LWp1c3RpZnkgdGhpcyBzdHJpbmcgZm9yIHNvbWUgZHVtYiByZWFzb247Ci0JICAgdW5kbyB0aGF0IGJyYWluIGRhbWFnZSAqLworCS8qCisJICogSW50ZWwgY2hpcHMgcmlnaHQtanVzdGlmeSB0aGlzIHN0cmluZyBmb3Igc29tZSBkdW1iIHJlYXNvbjsKKwkgKiB1bmRvIHRoYXQgYnJhaW4gZGFtYWdlOgorCSAqLwogCXAgPSBxID0gJmMtPng4Nl9tb2RlbF9pZFswXTsKIAl3aGlsZSAoKnAgPT0gJyAnKQotCSAgICAgcCsrOworCQlwKys7CiAJaWYgKHAgIT0gcSkgewotCSAgICAgd2hpbGUgKCpwKQotCQkgICpxKysgPSAqcCsrOwotCSAgICAgd2hpbGUgKHEgPD0gJmMtPng4Nl9tb2RlbF9pZFs0OF0pCi0JCSAgKnErKyA9ICdcMCc7CS8qIFplcm8tcGFkIHRoZSByZXN0ICovCisJCXdoaWxlICgqcCkKKwkJCSpxKysgPSAqcCsrOworCQl3aGlsZSAocSA8PSAmYy0+eDg2X21vZGVsX2lkWzQ4XSkKKwkJCSpxKysgPSAnXDAnOwkvKiBaZXJvLXBhZCB0aGUgcmVzdCAqLwogCX0KIH0KIApAQCAtNDM4LDI4ICs0NTIsMzEgQEAKIAogCWlmIChzbXBfbnVtX3NpYmxpbmdzID09IDEpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAgIkNQVTogSHlwZXItVGhyZWFkaW5nIGlzIGRpc2FibGVkXG4iKTsKLQl9IGVsc2UgaWYgKHNtcF9udW1fc2libGluZ3MgPiAxKSB7Ci0KLQkJaWYgKHNtcF9udW1fc2libGluZ3MgPiBucl9jcHVfaWRzKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJDUFU6IFVuc3VwcG9ydGVkIG51bWJlciBvZiBzaWJsaW5ncyAlZCIsCi0JCQkJCXNtcF9udW1fc2libGluZ3MpOwotCQkJc21wX251bV9zaWJsaW5ncyA9IDE7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQlpbmRleF9tc2IgPSBnZXRfY291bnRfb3JkZXIoc21wX251bV9zaWJsaW5ncyk7Ci0JCWMtPnBoeXNfcHJvY19pZCA9IGFwaWMtPnBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCBpbmRleF9tc2IpOwotCi0JCXNtcF9udW1fc2libGluZ3MgPSBzbXBfbnVtX3NpYmxpbmdzIC8gYy0+eDg2X21heF9jb3JlczsKLQotCQlpbmRleF9tc2IgPSBnZXRfY291bnRfb3JkZXIoc21wX251bV9zaWJsaW5ncyk7Ci0KLQkJY29yZV9iaXRzID0gZ2V0X2NvdW50X29yZGVyKGMtPng4Nl9tYXhfY29yZXMpOwotCi0JCWMtPmNwdV9jb3JlX2lkID0gYXBpYy0+cGh5c19wa2dfaWQoYy0+aW5pdGlhbF9hcGljaWQsIGluZGV4X21zYikgJgotCQkJCQkgICAgICAgKCgxIDw8IGNvcmVfYml0cykgLSAxKTsKKwkJZ290byBvdXQ7CiAJfQogCisJaWYgKHNtcF9udW1fc2libGluZ3MgPD0gMSkKKwkJZ290byBvdXQ7CisKKwlpZiAoc21wX251bV9zaWJsaW5ncyA+IG5yX2NwdV9pZHMpIHsKKwkJcHJfd2FybmluZygiQ1BVOiBVbnN1cHBvcnRlZCBudW1iZXIgb2Ygc2libGluZ3MgJWQiLAorCQkJICAgc21wX251bV9zaWJsaW5ncyk7CisJCXNtcF9udW1fc2libGluZ3MgPSAxOworCQlyZXR1cm47CisJfQorCisJaW5kZXhfbXNiID0gZ2V0X2NvdW50X29yZGVyKHNtcF9udW1fc2libGluZ3MpOworCWMtPnBoeXNfcHJvY19pZCA9IGFwaWMtPnBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCBpbmRleF9tc2IpOworCisJc21wX251bV9zaWJsaW5ncyA9IHNtcF9udW1fc2libGluZ3MgLyBjLT54ODZfbWF4X2NvcmVzOworCisJaW5kZXhfbXNiID0gZ2V0X2NvdW50X29yZGVyKHNtcF9udW1fc2libGluZ3MpOworCisJY29yZV9iaXRzID0gZ2V0X2NvdW50X29yZGVyKGMtPng4Nl9tYXhfY29yZXMpOworCisJYy0+Y3B1X2NvcmVfaWQgPSBhcGljLT5waHlzX3BrZ19pZChjLT5pbml0aWFsX2FwaWNpZCwgaW5kZXhfbXNiKSAmCisJCQkJICAgICAgICgoMSA8PCBjb3JlX2JpdHMpIC0gMSk7CisKIG91dDoKIAlpZiAoKGMtPng4Nl9tYXhfY29yZXMgKiBzbXBfbnVtX3NpYmxpbmdzKSA+IDEpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAgIkNQVTogUGh5c2ljYWwgUHJvY2Vzc29yIElEOiAlZFxuIiwKQEAgLTQ3Myw4ICs0OTAsOCBAQAogc3RhdGljIHZvaWQgX19jcHVpbml0IGdldF9jcHVfdmVuZG9yKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAljaGFyICp2ID0gYy0+eDg2X3ZlbmRvcl9pZDsKLQlpbnQgaTsKIAlzdGF0aWMgaW50IHByaW50ZWQ7CisJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgWDg2X1ZFTkRPUl9OVU07IGkrKykgewogCQlpZiAoIWNwdV9kZXZzW2ldKQpAQCAtNDgzLDYgKzUwMCw3IEBACiAJCWlmICghc3RyY21wKHYsIGNwdV9kZXZzW2ldLT5jX2lkZW50WzBdKSB8fAogCQkgICAgKGNwdV9kZXZzW2ldLT5jX2lkZW50WzFdICYmCiAJCSAgICAgIXN0cmNtcCh2LCBjcHVfZGV2c1tpXS0+Y19pZGVudFsxXSkpKSB7CisKIAkJCXRoaXNfY3B1ID0gY3B1X2RldnNbaV07CiAJCQljLT54ODZfdmVuZG9yID0gdGhpc19jcHUtPmNfeDg2X3ZlbmRvcjsKIAkJCXJldHVybjsKQEAgLTQ5MSw3ICs1MDksOSBAQAogCiAJaWYgKCFwcmludGVkKSB7CiAJCXByaW50ZWQrKzsKLQkJcHJpbnRrKEtFUk5fRVJSICJDUFU6IHZlbmRvcl9pZCAnJXMnIHVua25vd24sIHVzaW5nIGdlbmVyaWMgaW5pdC5cbiIsIHYpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICJDUFU6IHZlbmRvcl9pZCAnJXMnIHVua25vd24sIHVzaW5nIGdlbmVyaWMgaW5pdC5cbiIsIHYpOworCiAJCXByaW50ayhLRVJOX0VSUiAiQ1BVOiBZb3VyIHN5c3RlbSBtYXkgYmUgdW5zdGFibGUuXG4iKTsKIAl9CiAKQEAgLTUxMSwxNCArNTMxLDE3IEBACiAJLyogSW50ZWwtZGVmaW5lZCBmbGFnczogbGV2ZWwgMHgwMDAwMDAwMSAqLwogCWlmIChjLT5jcHVpZF9sZXZlbCA+PSAweDAwMDAwMDAxKSB7CiAJCXUzMiBqdW5rLCB0Zm1zLCBjYXAwLCBtaXNjOworCiAJCWNwdWlkKDB4MDAwMDAwMDEsICZ0Zm1zLCAmbWlzYywgJmp1bmssICZjYXAwKTsKIAkJYy0+eDg2ID0gKHRmbXMgPj4gOCkgJiAweGY7CiAJCWMtPng4Nl9tb2RlbCA9ICh0Zm1zID4+IDQpICYgMHhmOwogCQljLT54ODZfbWFzayA9IHRmbXMgJiAweGY7CisKIAkJaWYgKGMtPng4NiA9PSAweGYpCiAJCQljLT54ODYgKz0gKHRmbXMgPj4gMjApICYgMHhmZjsKIAkJaWYgKGMtPng4NiA+PSAweDYpCiAJCQljLT54ODZfbW9kZWwgKz0gKCh0Zm1zID4+IDE2KSAmIDB4ZikgPDwgNDsKKwogCQlpZiAoY2FwMCAmICgxPDwxOSkpIHsKIAkJCWMtPng4Nl9jbGZsdXNoX3NpemUgPSAoKG1pc2MgPj4gOCkgJiAweGZmKSAqIDg7CiAJCQljLT54ODZfY2FjaGVfYWxpZ25tZW50ID0gYy0+eDg2X2NsZmx1c2hfc2l6ZTsKQEAgLTUzNCw2ICs1NTcsNyBAQAogCS8qIEludGVsLWRlZmluZWQgZmxhZ3M6IGxldmVsIDB4MDAwMDAwMDEgKi8KIAlpZiAoYy0+Y3B1aWRfbGV2ZWwgPj0gMHgwMDAwMDAwMSkgewogCQl1MzIgY2FwYWJpbGl0eSwgZXhjYXA7CisKIAkJY3B1aWQoMHgwMDAwMDAwMSwgJnRmbXMsICZlYngsICZleGNhcCwgJmNhcGFiaWxpdHkpOwogCQljLT54ODZfY2FwYWJpbGl0eVswXSA9IGNhcGFiaWxpdHk7CiAJCWMtPng4Nl9jYXBhYmlsaXR5WzRdID0gZXhjYXA7CkBAIC01NDIsNiArNTY2LDcgQEAKIAkvKiBBTUQtZGVmaW5lZCBmbGFnczogbGV2ZWwgMHg4MDAwMDAwMSAqLwogCXhsdmwgPSBjcHVpZF9lYXgoMHg4MDAwMDAwMCk7CiAJYy0+ZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgPSB4bHZsOworCiAJaWYgKCh4bHZsICYgMHhmZmZmMDAwMCkgPT0gMHg4MDAwMDAwMCkgewogCQlpZiAoeGx2bCA+PSAweDgwMDAwMDAxKSB7CiAJCQljLT54ODZfY2FwYWJpbGl0eVsxXSA9IGNwdWlkX2VkeCgweDgwMDAwMDAxKTsKQEAgLTU0OSwxMyArNTc0LDE1IEBACiAJCX0KIAl9CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0CiAJaWYgKGMtPmV4dGVuZGVkX2NwdWlkX2xldmVsID49IDB4ODAwMDAwMDgpIHsKIAkJdTMyIGVheCA9IGNwdWlkX2VheCgweDgwMDAwMDA4KTsKIAogCQljLT54ODZfdmlydF9iaXRzID0gKGVheCA+PiA4KSAmIDB4ZmY7CiAJCWMtPng4Nl9waHlzX2JpdHMgPSBlYXggJiAweGZmOwogCX0KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJZWxzZSBpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9QQUUpIHx8IGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfUFNFMzYpKQorCQljLT54ODZfcGh5c19iaXRzID0gMzY7CiAjZW5kaWYKIAogCWlmIChjLT5leHRlbmRlZF9jcHVpZF9sZXZlbCA+PSAweDgwMDAwMDA3KQpAQCAtNjAyLDggKzYyOSwxMiBAQAogewogI2lmZGVmIENPTkZJR19YODZfNjQKIAljLT54ODZfY2xmbHVzaF9zaXplID0gNjQ7CisJYy0+eDg2X3BoeXNfYml0cyA9IDM2OworCWMtPng4Nl92aXJ0X2JpdHMgPSA0ODsKICNlbHNlCiAJYy0+eDg2X2NsZmx1c2hfc2l6ZSA9IDMyOworCWMtPng4Nl9waHlzX2JpdHMgPSAzMjsKKwljLT54ODZfdmlydF9iaXRzID0gMzI7CiAjZW5kaWYKIAljLT54ODZfY2FjaGVfYWxpZ25tZW50ID0gYy0+eDg2X2NsZmx1c2hfc2l6ZTsKIApAQCAtNjM0LDEyICs2NjUsMTIgQEAKIAogdm9pZCBfX2luaXQgZWFybHlfY3B1X2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgY3B1X2RldiAqKmNkZXY7CisJY29uc3Qgc3RydWN0IGNwdV9kZXYgKmNvbnN0ICpjZGV2OwogCWludCBjb3VudCA9IDA7CiAKLQlwcmludGsoIktFUk5FTCBzdXBwb3J0ZWQgY3B1czpcbiIpOworCXByaW50ayhLRVJOX0lORk8gIktFUk5FTCBzdXBwb3J0ZWQgY3B1czpcbiIpOwogCWZvciAoY2RldiA9IF9feDg2X2NwdV9kZXZfc3RhcnQ7IGNkZXYgPCBfX3g4Nl9jcHVfZGV2X2VuZDsgY2RldisrKSB7Ci0JCXN0cnVjdCBjcHVfZGV2ICpjcHVkZXYgPSAqY2RldjsKKwkJY29uc3Qgc3RydWN0IGNwdV9kZXYgKmNwdWRldiA9ICpjZGV2OwogCQl1bnNpZ25lZCBpbnQgajsKIAogCQlpZiAoY291bnQgPj0gWDg2X1ZFTkRPUl9OVU0pCkBAIC02NTAsNyArNjgxLDcgQEAKIAkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgewogCQkJaWYgKCFjcHVkZXYtPmNfaWRlbnRbal0pCiAJCQkJY29udGludWU7Ci0JCQlwcmludGsoIiAgJXMgJXNcbiIsIGNwdWRldi0+Y192ZW5kb3IsCisJCQlwcmludGsoS0VSTl9JTkZPICIgICVzICVzXG4iLCBjcHVkZXYtPmNfdmVuZG9yLAogCQkJCWNwdWRldi0+Y19pZGVudFtqXSk7CiAJCX0KIAl9CkBAIC03MjYsOSArNzU3LDEzIEBACiAJYy0+eDg2X2NvcmVpZF9iaXRzID0gMDsKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJYy0+eDg2X2NsZmx1c2hfc2l6ZSA9IDY0OworCWMtPng4Nl9waHlzX2JpdHMgPSAzNjsKKwljLT54ODZfdmlydF9iaXRzID0gNDg7CiAjZWxzZQogCWMtPmNwdWlkX2xldmVsID0gLTE7CS8qIENQVUlEIG5vdCBkZXRlY3RlZCAqLwogCWMtPng4Nl9jbGZsdXNoX3NpemUgPSAzMjsKKwljLT54ODZfcGh5c19iaXRzID0gMzI7CisJYy0+eDg2X3ZpcnRfYml0cyA9IDMyOwogI2VuZGlmCiAJYy0+eDg2X2NhY2hlX2FsaWdubWVudCA9IGMtPng4Nl9jbGZsdXNoX3NpemU7CiAJbWVtc2V0KCZjLT54ODZfY2FwYWJpbGl0eSwgMCwgc2l6ZW9mIGMtPng4Nl9jYXBhYmlsaXR5KTsKQEAgLTc1OSw4ICs3OTQsOCBAQAogCXNxdWFzaF90aGVfc3R1cGlkX3NlcmlhbF9udW1iZXIoYyk7CiAKIAkvKgotCSAqIFRoZSB2ZW5kb3Itc3BlY2lmaWMgZnVuY3Rpb25zIG1pZ2h0IGhhdmUgY2hhbmdlZCBmZWF0dXJlcy4gIE5vdwotCSAqIHdlIGRvICJnZW5lcmljIGNoYW5nZXMuIgorCSAqIFRoZSB2ZW5kb3Itc3BlY2lmaWMgZnVuY3Rpb25zIG1pZ2h0IGhhdmUgY2hhbmdlZCBmZWF0dXJlcy4KKwkgKiBOb3cgd2UgZG8gImdlbmVyaWMgY2hhbmdlcy4iCiAJICovCiAKIAkvKiBGaWx0ZXIgb3V0IGFueXRoaW5nIHRoYXQgZGVwZW5kcyBvbiBDUFVJRCBsZXZlbHMgd2UgZG9uJ3QgaGF2ZSAqLwpAQCAtNzY4LDcgKzgwMyw3IEBACiAKIAkvKiBJZiB0aGUgbW9kZWwgbmFtZSBpcyBzdGlsbCB1bnNldCwgZG8gdGFibGUgbG9va3VwLiAqLwogCWlmICghYy0+eDg2X21vZGVsX2lkWzBdKSB7Ci0JCWNoYXIgKnA7CisJCWNvbnN0IGNoYXIgKnA7CiAJCXAgPSB0YWJsZV9sb29rdXBfbW9kZWwoYyk7CiAJCWlmIChwKQogCQkJc3RyY3B5KGMtPng4Nl9tb2RlbF9pZCwgcCk7CkBAIC04NDMsMTEgKzg3OCwxMSBAQAogfQogCiBzdHJ1Y3QgbXNyX3JhbmdlIHsKLQl1bnNpZ25lZCBtaW47Ci0JdW5zaWduZWQgbWF4OworCXVuc2lnbmVkCW1pbjsKKwl1bnNpZ25lZAltYXg7CiB9OwogCi1zdGF0aWMgc3RydWN0IG1zcl9yYW5nZSBtc3JfcmFuZ2VfYXJyYXlbXSBfX2NwdWluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBtc3JfcmFuZ2UgbXNyX3JhbmdlX2FycmF5W10gX19jcHVpbml0Y29uc3QgPSB7CiAJeyAweDAwMDAwMDAwLCAweDAwMDAwNDE4fSwKIAl7IDB4YzAwMDAwMDAsIDB4YzAwMDA0MGJ9LAogCXsgMHhjMDAxMDAwMCwgMHhjMDAxMDE0Mn0sCkBAIC04NTYsMTQgKzg5MSwxNSBAQAogCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgcHJpbnRfY3B1X21zcih2b2lkKQogeworCXVuc2lnbmVkIGluZGV4X21pbiwgaW5kZXhfbWF4OwogCXVuc2lnbmVkIGluZGV4OwogCXU2NCB2YWw7CiAJaW50IGk7Ci0JdW5zaWduZWQgaW5kZXhfbWluLCBpbmRleF9tYXg7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtc3JfcmFuZ2VfYXJyYXkpOyBpKyspIHsKIAkJaW5kZXhfbWluID0gbXNyX3JhbmdlX2FycmF5W2ldLm1pbjsKIAkJaW5kZXhfbWF4ID0gbXNyX3JhbmdlX2FycmF5W2ldLm1heDsKKwogCQlmb3IgKGluZGV4ID0gaW5kZXhfbWluOyBpbmRleCA8IGluZGV4X21heDsgaW5kZXgrKykgewogCQkJaWYgKHJkbXNybF9hbWRfc2FmZShpbmRleCwgJnZhbCkpCiAJCQkJY29udGludWU7CkBAIC04NzMsNiArOTA5LDcgQEAKIH0KIAogc3RhdGljIGludCBzaG93X21zciBfX2NwdWluaXRkYXRhOworCiBzdGF0aWMgX19pbml0IGludCBzZXR1cF9zaG93X21zcihjaGFyICphcmcpCiB7CiAJaW50IG51bTsKQEAgLTg5NCwxMiArOTMxLDE0IEBACiAKIHZvaWQgX19jcHVpbml0IHByaW50X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKLQljaGFyICp2ZW5kb3IgPSBOVUxMOworCWNvbnN0IGNoYXIgKnZlbmRvciA9IE5VTEw7CiAKLQlpZiAoYy0+eDg2X3ZlbmRvciA8IFg4Nl9WRU5ET1JfTlVNKQorCWlmIChjLT54ODZfdmVuZG9yIDwgWDg2X1ZFTkRPUl9OVU0pIHsKIAkJdmVuZG9yID0gdGhpc19jcHUtPmNfdmVuZG9yOwotCWVsc2UgaWYgKGMtPmNwdWlkX2xldmVsID49IDApCi0JCXZlbmRvciA9IGMtPng4Nl92ZW5kb3JfaWQ7CisJfSBlbHNlIHsKKwkJaWYgKGMtPmNwdWlkX2xldmVsID49IDApCisJCQl2ZW5kb3IgPSBjLT54ODZfdmVuZG9yX2lkOworCX0KIAogCWlmICh2ZW5kb3IgJiYgIXN0cnN0cihjLT54ODZfbW9kZWxfaWQsIHZlbmRvcikpCiAJCXByaW50ayhLRVJOX0NPTlQgIiVzICIsIHZlbmRvcik7CkBAIC05MjYsMTAgKzk2NSwxMiBAQAogc3RhdGljIF9faW5pdCBpbnQgc2V0dXBfZGlzYWJsZWNwdWlkKGNoYXIgKmFyZykKIHsKIAlpbnQgYml0OworCiAJaWYgKGdldF9vcHRpb24oJmFyZywgJmJpdCkgJiYgYml0IDwgTkNBUElOVFMqMzIpCiAJCXNldHVwX2NsZWFyX2NwdV9jYXAoYml0KTsKIAllbHNlCiAJCXJldHVybiAwOworCiAJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJjbGVhcmNwdWlkPSIsIHNldHVwX2Rpc2FibGVjcHVpZCk7CkBAIC05MzksNiArOTgwLDcgQEAKIAogREVGSU5FX1BFUl9DUFVfRklSU1QodW5pb24gaXJxX3N0YWNrX3VuaW9uLAogCQkgICAgIGlycV9zdGFja191bmlvbikgX19hbGlnbmVkKFBBR0VfU0laRSk7CisKIERFRklORV9QRVJfQ1BVKGNoYXIgKiwgaXJxX3N0YWNrX3B0cikgPQogCWluaXRfcGVyX2NwdV92YXIoaXJxX3N0YWNrX3VuaW9uLmlycV9zdGFjaykgKyBJUlFfU1RBQ0tfU0laRSAtIDY0OwogCkBAIC05NDgsMTIgKzk5MCwyMSBAQAogCiBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIGlycV9jb3VudCkgPSAtMTsKIAorLyoKKyAqIFNwZWNpYWwgSVNUIHN0YWNrcyB3aGljaCB0aGUgQ1BVIHN3aXRjaGVzIHRvIHdoZW4gaXQgY2FsbHMKKyAqIGFuIElTVC1tYXJrZWQgZGVzY3JpcHRvciBlbnRyeS4gVXAgdG8gNyBzdGFja3MgKGhhcmR3YXJlCisgKiBsaW1pdCksIGFsbCBvZiB0aGVtIGFyZSA0SywgZXhjZXB0IHRoZSBkZWJ1ZyBzdGFjayB3aGljaAorICogaXMgOEsuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZXhjZXB0aW9uX3N0YWNrX3NpemVzW05fRVhDRVBUSU9OX1NUQUNLU10gPSB7CisJICBbMCAuLi4gTl9FWENFUFRJT05fU1RBQ0tTIC0gMV0JPSBFWENFUFRJT05fU1RLU1osCisJICBbREVCVUdfU1RBQ0sgLSAxXQkJCT0gREVCVUdfU1RLU1oKK307CisKIHN0YXRpYyBERUZJTkVfUEVSX0NQVV9QQUdFX0FMSUdORUQoY2hhciwgZXhjZXB0aW9uX3N0YWNrcwogCVsoTl9FWENFUFRJT05fU1RBQ0tTIC0gMSkgKiBFWENFUFRJT05fU1RLU1ogKyBERUJVR19TVEtTWl0pCiAJX19hbGlnbmVkKFBBR0VfU0laRSk7CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgaWdub3JlX3N5c3JldCh2b2lkKTsKLQogLyogTWF5IG5vdCBiZSBtYXJrZWQgX19pbml0OiB1c2VkIGJ5IHNvZnR3YXJlIHN1c3BlbmQgKi8KIHZvaWQgc3lzY2FsbF9pbml0KHZvaWQpCiB7CkBAIC05ODMsNyArMTAzNCw3IEBACiAgKi8KIERFRklORV9QRVJfQ1BVKHN0cnVjdCBvcmlnX2lzdCwgb3JpZ19pc3QpOwogCi0jZWxzZQkvKiB4ODZfNjQgKi8KKyNlbHNlCS8qIENPTkZJR19YODZfNjQgKi8KIAogI2lmZGVmIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUgogREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgc3RhY2tfY2FuYXJ5KTsKQEAgLTk5NSw5ICsxMDQ2LDI2IEBACiAJbWVtc2V0KHJlZ3MsIDAsIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOwogCXJlZ3MtPmZzID0gX19LRVJORUxfUEVSQ1BVOwogCXJlZ3MtPmdzID0gX19LRVJORUxfU1RBQ0tfQ0FOQVJZOworCiAJcmV0dXJuIHJlZ3M7CiB9Ci0jZW5kaWYJLyogeDg2XzY0ICovCisjZW5kaWYJLyogQ09ORklHX1g4Nl82NCAqLworCisvKgorICogQ2xlYXIgYWxsIDYgZGVidWcgcmVnaXN0ZXJzOgorICovCitzdGF0aWMgdm9pZCBjbGVhcl9hbGxfZGVidWdfcmVncyh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkvKiBJZ25vcmUgZGI0LCBkYjUgKi8KKwkJaWYgKChpID09IDQpIHx8IChpID09IDUpKQorCQkJY29udGludWU7CisKKwkJc2V0X2RlYnVncmVnKDAsIGkpOworCX0KK30KIAogLyoKICAqIGNwdV9pbml0KCkgaW5pdGlhbGl6ZXMgc3RhdGUgdGhhdCBpcyBwZXItQ1BVLiBTb21lIGRhdGEgaXMgYWxyZWFkeQpAQCAtMTAwNywxNSArMTA3NSwyMCBAQAogICogQSBsb3Qgb2Ygc3RhdGUgaXMgYWxyZWFkeSBzZXQgdXAgaW4gUERBIGluaXQgZm9yIDY0IGJpdAogICovCiAjaWZkZWYgQ09ORklHX1g4Nl82NAorCiB2b2lkIF9fY3B1aW5pdCBjcHVfaW5pdCh2b2lkKQogewotCWludCBjcHUgPSBzdGFja19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jc3RydWN0IHRzc19zdHJ1Y3QgKnQgPSAmcGVyX2NwdShpbml0X3RzcywgY3B1KTsKLQlzdHJ1Y3Qgb3JpZ19pc3QgKm9yaWdfaXN0ID0gJnBlcl9jcHUob3JpZ19pc3QsIGNwdSk7Ci0JdW5zaWduZWQgbG9uZyB2OworCXN0cnVjdCBvcmlnX2lzdCAqb3JpZ19pc3Q7CiAJc3RydWN0IHRhc2tfc3RydWN0ICptZTsKKwlzdHJ1Y3QgdHNzX3N0cnVjdCAqdDsKKwl1bnNpZ25lZCBsb25nIHY7CisJaW50IGNwdTsKIAlpbnQgaTsKIAorCWNwdSA9IHN0YWNrX3NtcF9wcm9jZXNzb3JfaWQoKTsKKwl0ID0gJnBlcl9jcHUoaW5pdF90c3MsIGNwdSk7CisJb3JpZ19pc3QgPSAmcGVyX2NwdShvcmlnX2lzdCwgY3B1KTsKKwogI2lmZGVmIENPTkZJR19OVU1BCiAJaWYgKGNwdSAhPSAwICYmIHBlcmNwdV9yZWFkKG5vZGVfbnVtYmVyKSA9PSAwICYmCiAJICAgIGNwdV90b19ub2RlKGNwdSkgIT0gTlVNQV9OT19OT0RFKQpAQCAtMTA1NiwxOSArMTEyOSwxNyBAQAogCSAqIHNldCB1cCBhbmQgbG9hZCB0aGUgcGVyLUNQVSBUU1MKIAkgKi8KIAlpZiAoIW9yaWdfaXN0LT5pc3RbMF0pIHsKLQkJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzaXplc1tOX0VYQ0VQVElPTl9TVEFDS1NdID0gewotCQkgIFswIC4uLiBOX0VYQ0VQVElPTl9TVEFDS1MgLSAxXSA9IEVYQ0VQVElPTl9TVEtTWiwKLQkJICBbREVCVUdfU1RBQ0sgLSAxXSA9IERFQlVHX1NUS1NaCi0JCX07CiAJCWNoYXIgKmVzdGFja3MgPSBwZXJfY3B1KGV4Y2VwdGlvbl9zdGFja3MsIGNwdSk7CisKIAkJZm9yICh2ID0gMDsgdiA8IE5fRVhDRVBUSU9OX1NUQUNLUzsgdisrKSB7Ci0JCQllc3RhY2tzICs9IHNpemVzW3ZdOworCQkJZXN0YWNrcyArPSBleGNlcHRpb25fc3RhY2tfc2l6ZXNbdl07CiAJCQlvcmlnX2lzdC0+aXN0W3ZdID0gdC0+eDg2X3Rzcy5pc3Rbdl0gPQogCQkJCQkodW5zaWduZWQgbG9uZyllc3RhY2tzOwogCQl9CiAJfQogCiAJdC0+eDg2X3Rzcy5pb19iaXRtYXBfYmFzZSA9IG9mZnNldG9mKHN0cnVjdCB0c3Nfc3RydWN0LCBpb19iaXRtYXApOworCiAJLyoKIAkgKiA8PSBpcyByZXF1aXJlZCBiZWNhdXNlIHRoZSBDUFUgd2lsbCBhY2Nlc3MgdXAgdG8KIAkgKiA4IGJpdHMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIElPIHBlcm1pc3Npb24gYml0bWFwLgpAQCAtMTA3OCw4ICsxMTQ5LDcgQEAKIAogCWF0b21pY19pbmMoJmluaXRfbW0ubW1fY291bnQpOwogCW1lLT5hY3RpdmVfbW0gPSAmaW5pdF9tbTsKLQlpZiAobWUtPm1tKQotCQlCVUcoKTsKKwlCVUdfT04obWUtPm1tKTsKIAllbnRlcl9sYXp5X3RsYigmaW5pdF9tbSwgbWUpOwogCiAJbG9hZF9zcDAodCwgJmN1cnJlbnQtPnRocmVhZCk7CkBAIC0xMDk4LDE3ICsxMTY4LDcgQEAKIAkJYXJjaF9rZ2RiX29wcy5jb3JyZWN0X2h3X2JyZWFrKCk7CiAJZWxzZQogI2VuZGlmCi0JewotCQkvKgotCQkgKiBDbGVhciBhbGwgNiBkZWJ1ZyByZWdpc3RlcnM6Ci0JCSAqLwotCQlzZXRfZGVidWdyZWcoMFVMLCAwKTsKLQkJc2V0X2RlYnVncmVnKDBVTCwgMSk7Ci0JCXNldF9kZWJ1Z3JlZygwVUwsIDIpOwotCQlzZXRfZGVidWdyZWcoMFVMLCAzKTsKLQkJc2V0X2RlYnVncmVnKDBVTCwgNik7Ci0JCXNldF9kZWJ1Z3JlZygwVUwsIDcpOwotCX0KKwkJY2xlYXJfYWxsX2RlYnVnX3JlZ3MoKTsKIAogCWZwdV9pbml0KCk7CiAKQEAgLTExMjksNyArMTE4OSw4IEBACiAKIAlpZiAoY3B1bWFza190ZXN0X2FuZF9zZXRfY3B1KGNwdSwgY3B1X2luaXRpYWxpemVkX21hc2spKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNQVSMlZCBhbHJlYWR5IGluaXRpYWxpemVkIVxuIiwgY3B1KTsKLQkJZm9yICg7OykgbG9jYWxfaXJxX2VuYWJsZSgpOworCQlmb3IgKDs7KQorCQkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCX0KIAogCXByaW50ayhLRVJOX0lORk8gIkluaXRpYWxpemluZyBDUFUjJWRcbiIsIGNwdSk7CkBAIC0xMTQ1LDggKzEyMDYsNyBAQAogCSAqLwogCWF0b21pY19pbmMoJmluaXRfbW0ubW1fY291bnQpOwogCWN1cnItPmFjdGl2ZV9tbSA9ICZpbml0X21tOwotCWlmIChjdXJyLT5tbSkKLQkJQlVHKCk7CisJQlVHX09OKGN1cnItPm1tKTsKIAllbnRlcl9sYXp5X3RsYigmaW5pdF9tbSwgY3Vycik7CiAKIAlsb2FkX3NwMCh0LCB0aHJlYWQpOwpAQCAtMTE1OSwxMyArMTIxOSw3IEBACiAJX19zZXRfdHNzX2Rlc2MoY3B1LCBHRFRfRU5UUllfRE9VQkxFRkFVTFRfVFNTLCAmZG91YmxlZmF1bHRfdHNzKTsKICNlbmRpZgogCi0JLyogQ2xlYXIgYWxsIDYgZGVidWcgcmVnaXN0ZXJzOiAqLwotCXNldF9kZWJ1Z3JlZygwLCAwKTsKLQlzZXRfZGVidWdyZWcoMCwgMSk7Ci0Jc2V0X2RlYnVncmVnKDAsIDIpOwotCXNldF9kZWJ1Z3JlZygwLCAzKTsKLQlzZXRfZGVidWdyZWcoMCwgNik7Ci0Jc2V0X2RlYnVncmVnKDAsIDcpOworCWNsZWFyX2FsbF9kZWJ1Z19yZWdzKCk7CiAKIAkvKgogCSAqIEZvcmNlIEZQVSBpbml0aWFsaXphdGlvbjoKQEAgLTExODUsNiArMTIzOSw0IEBACiAKIAl4c2F2ZV9pbml0KCk7CiB9Ci0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdS5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHUuaAppbmRleCBkZTQwOTRhLi42ZGU5YTkwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdS5oCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1LmgKQEAgLTMsMzMgKzMsMzQgQEAKICNkZWZpbmUgQVJDSF9YODZfQ1BVX0gKIAogc3RydWN0IGNwdV9tb2RlbF9pbmZvIHsKLQlpbnQgdmVuZG9yOwotCWludCBmYW1pbHk7Ci0JY2hhciAqbW9kZWxfbmFtZXNbMTZdOworCWludAkJdmVuZG9yOworCWludAkJZmFtaWx5OworCWNvbnN0IGNoYXIJKm1vZGVsX25hbWVzWzE2XTsKIH07CiAKIC8qIGF0dGVtcHQgdG8gY29uc29saWRhdGUgY3B1IGF0dHJpYnV0ZXMgKi8KIHN0cnVjdCBjcHVfZGV2IHsKLQljaGFyCSogY192ZW5kb3I7CisJY29uc3QgY2hhcgkqY192ZW5kb3I7CiAKIAkvKiBzb21lIGhhdmUgdHdvIHBvc3NpYmlsaXRpZXMgZm9yIGNwdWlkIHN0cmluZyAqLwotCWNoYXIJKiBjX2lkZW50WzJdOwkKKwljb25zdCBjaGFyCSpjX2lkZW50WzJdOwogCiAJc3RydWN0CQljcHVfbW9kZWxfaW5mbyBjX21vZGVsc1s0XTsKIAotCXZvaWQgICAgICAgICAgICAoKmNfZWFybHlfaW5pdCkoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKLQl2b2lkCQkoKmNfaW5pdCkoc3RydWN0IGNwdWluZm9feDg2ICogYyk7Ci0Jdm9pZAkJKCpjX2lkZW50aWZ5KShzdHJ1Y3QgY3B1aW5mb194ODYgKiBjKTsKLQl1bnNpZ25lZCBpbnQJKCpjX3NpemVfY2FjaGUpKHN0cnVjdCBjcHVpbmZvX3g4NiAqIGMsIHVuc2lnbmVkIGludCBzaXplKTsKLQlpbnQJY194ODZfdmVuZG9yOworCXZvaWQgICAgICAgICAgICAoKmNfZWFybHlfaW5pdCkoc3RydWN0IGNwdWluZm9feDg2ICopOworCXZvaWQJCSgqY19pbml0KShzdHJ1Y3QgY3B1aW5mb194ODYgKik7CisJdm9pZAkJKCpjX2lkZW50aWZ5KShzdHJ1Y3QgY3B1aW5mb194ODYgKik7CisJdW5zaWduZWQgaW50CSgqY19zaXplX2NhY2hlKShzdHJ1Y3QgY3B1aW5mb194ODYgKiwgdW5zaWduZWQgaW50KTsKKwlpbnQJCWNfeDg2X3ZlbmRvcjsKIH07CiAKICNkZWZpbmUgY3B1X2Rldl9yZWdpc3RlcihjcHVfZGV2WCkgXAotCXN0YXRpYyBzdHJ1Y3QgY3B1X2RldiAqX19jcHVfZGV2XyMjY3B1X2RldlggX191c2VkIFwKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGNwdV9kZXYgKmNvbnN0IF9fY3B1X2Rldl8jI2NwdV9kZXZYIF9fdXNlZCBcCiAJX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi54ODZfY3B1X2Rldi5pbml0IikpKSA9IFwKIAkmY3B1X2Rldlg7CiAKLWV4dGVybiBzdHJ1Y3QgY3B1X2RldiAqX194ODZfY3B1X2Rldl9zdGFydFtdLCAqX194ODZfY3B1X2Rldl9lbmRbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY3B1X2RldiAqY29uc3QgX194ODZfY3B1X2Rldl9zdGFydFtdLAorCQkJICAgICpjb25zdCBfX3g4Nl9jcHVfZGV2X2VuZFtdOwogCiBleHRlcm4gdm9pZCBkaXNwbGF5X2NhY2hlaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdV9kZWJ1Zy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVfZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NmUyOWFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVfZGVidWcuYwpAQCAtMCwwICsxLDkwMSBAQAorLyoKKyAqIENQVSB4ODYgYXJjaGl0ZWN0dXJlIGRlYnVnIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQoQykgMjAwOSBKYXN3aW5kZXIgU2luZ2ggUmFqcHV0CisgKgorICogRm9yIGxpY2VuY2luZyBkZXRhaWxzIHNlZSBrZXJuZWwtYmFzZS9DT1BZSU5HCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorCisjaW5jbHVkZSA8YXNtL2NwdV9kZWJ1Zy5oPgorI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9kZXNjLmg+CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X2NwdVhfYmFzZSwgY3B1X2FycltDUFVfUkVHX0FMTF9CSVRdKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1X3ByaXZhdGUgKiwgcHJpdl9hcnJbTUFYX0NQVV9GSUxFU10pOworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkLCBjcHVfbW9kZWxmbGFnKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShpbnQsIGNwdV9wcml2X2NvdW50KTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCwgY3B1X21vZGVsKTsKKworc3RhdGljIERFRklORV9NVVRFWChjcHVfZGVidWdfbG9jayk7CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjcHVfZGVidWdmc19kaXI7CisKK3N0YXRpYyBzdHJ1Y3QgY3B1X2RlYnVnX2Jhc2UgY3B1X2Jhc2VbXSA9IHsKKwl7ICJtYyIsCQlDUFVfTUMsCQkwCX0sCisJeyAibW9uaXRvciIsCUNQVV9NT05JVE9SLAkwCX0sCisJeyAidGltZSIsCUNQVV9USU1FLAkwCX0sCisJeyAicG1jIiwJQ1BVX1BNQywJMQl9LAorCXsgInBsYXRmb3JtIiwJQ1BVX1BMQVRGT1JNLAkwCX0sCisJeyAiYXBpYyIsCUNQVV9BUElDLAkwCX0sCisJeyAicG93ZXJvbiIsCUNQVV9QT1dFUk9OLAkwCX0sCisJeyAiY29udHJvbCIsCUNQVV9DT05UUk9MLAkwCX0sCisJeyAiZmVhdHVyZXMiLAlDUFVfRkVBVFVSRVMsCTAJfSwKKwl7ICJsYXN0YnJhbmNoIiwJQ1BVX0xCUkFOQ0gsCTAJfSwKKwl7ICJiaW9zIiwJQ1BVX0JJT1MsCTAJfSwKKwl7ICJmcmVxIiwJQ1BVX0ZSRVEsCTAJfSwKKwl7ICJtdHJyIiwJQ1BVX01UUlIsCTAJfSwKKwl7ICJwZXJmIiwJQ1BVX1BFUkYsCTAJfSwKKwl7ICJjYWNoZSIsCUNQVV9DQUNIRSwJMAl9LAorCXsgInN5c2VudGVyIiwJQ1BVX1NZU0VOVEVSLAkwCX0sCisJeyAidGhlcm0iLAlDUFVfVEhFUk0sCTAJfSwKKwl7ICJtaXNjIiwJQ1BVX01JU0MsCTAJfSwKKwl7ICJkZWJ1ZyIsCUNQVV9ERUJVRywJMAl9LAorCXsgInBhdCIsCUNQVV9QQVQsCTAJfSwKKwl7ICJ2bXgiLAlDUFVfVk1YLAkwCX0sCisJeyAiY2FsbCIsCUNQVV9DQUxMLAkwCX0sCisJeyAiYmFzZSIsCUNQVV9CQVNFLAkwCX0sCisJeyAidmVyIiwJQ1BVX1ZFUiwJMAl9LAorCXsgImNvbmYiLAlDUFVfQ09ORiwJMAl9LAorCXsgInNtbSIsCUNQVV9TTU0sCTAJfSwKKwl7ICJzdm0iLAlDUFVfU1ZNLAkwCX0sCisJeyAib3N2bSIsCUNQVV9PU1ZNLAkwCX0sCisJeyAidHNzIiwJQ1BVX1RTUywJMAl9LAorCXsgImNyIiwJCUNQVV9DUiwJCTAJfSwKKwl7ICJkdCIsCQlDUFVfRFQsCQkwCX0sCisJeyAicmVnaXN0ZXJzIiwJQ1BVX1JFR19BTEwsCTAJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY3B1X2ZpbGVfYmFzZSBjcHVfZmlsZVtdID0geworCXsgImluZGV4IiwJQ1BVX1JFR19BTEwsCTAJfSwKKwl7ICJ2YWx1ZSIsCUNQVV9SRUdfQUxMLAkxCX0sCit9OworCisvKiBJbnRlbCBSZWdpc3RlcnMgUmFuZ2UgKi8KK3N0YXRpYyBzdHJ1Y3QgY3B1X2RlYnVnX3JhbmdlIGNwdV9pbnRlbF9yYW5nZVtdID0geworCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMSwgQ1BVX01DLAlDUFVfSU5URUxfQUxMCQl9LAorCXsgMHgwMDAwMDAwNiwgMHgwMDAwMDAwNywgQ1BVX01PTklUT1IsCUNQVV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIENQVV9USU1FLAlDUFVfSU5URUxfQUxMCQl9LAorCXsgMHgwMDAwMDAxMSwgMHgwMDAwMDAxMywgQ1BVX1BNQywJQ1BVX0lOVEVMX1BFTlRJVU0JfSwKKwl7IDB4MDAwMDAwMTcsIDB4MDAwMDAwMTcsIENQVV9QTEFURk9STSwJQ1BVX1BYX0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDAxQiwgMHgwMDAwMDAxQiwgQ1BVX0FQSUMsCUNQVV9QNl9DWF9BVF9YRQkJfSwKKworCXsgMHgwMDAwMDAyQSwgMHgwMDAwMDAyQSwgQ1BVX1BPV0VST04sCUNQVV9QWF9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDAwMkIsIDB4MDAwMDAwMkIsIENQVV9QT1dFUk9OLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDAwMkMsIDB4MDAwMDAwMkMsIENQVV9GUkVRLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDAwM0EsIDB4MDAwMDAwM0EsIENQVV9DT05UUk9MLAlDUFVfQ1hfQVRfWEUJCX0sCisKKwl7IDB4MDAwMDAwNDAsIDB4MDAwMDAwNDMsIENQVV9MQlJBTkNILAlDUFVfUE1fQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwMDQ0LCAweDAwMDAwMDQ3LCBDUFVfTEJSQU5DSCwJQ1BVX1BNX0NPX0FUCQl9LAorCXsgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MywgQ1BVX0xCUkFOQ0gsCUNQVV9DMl9BVAkJfSwKKwl7IDB4MDAwMDAwNjQsIDB4MDAwMDAwNjcsIENQVV9MQlJBTkNILAlDUFVfSU5URUxfQVRPTQkJfSwKKworCXsgMHgwMDAwMDA3OSwgMHgwMDAwMDA3OSwgQ1BVX0JJT1MsCUNQVV9QNl9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDAwODgsIDB4MDAwMDAwOEEsIENQVV9DQUNIRSwJQ1BVX0lOVEVMX1A2CQl9LAorCXsgMHgwMDAwMDA4QiwgMHgwMDAwMDA4QiwgQ1BVX0JJT1MsCUNQVV9QNl9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDAwOUIsIDB4MDAwMDAwOUIsIENQVV9NT05JVE9SLAlDUFVfSU5URUxfWEVPTgkJfSwKKworCXsgMHgwMDAwMDBDMSwgMHgwMDAwMDBDMiwgQ1BVX1BNQywJQ1BVX1A2X0NYX0FUCQl9LAorCXsgMHgwMDAwMDBDRCwgMHgwMDAwMDBDRCwgQ1BVX0ZSRVEsCUNQVV9DWF9BVAkJfSwKKwl7IDB4MDAwMDAwRTcsIDB4MDAwMDAwRTgsIENQVV9QRVJGLAlDUFVfQ1hfQVQJCX0sCisJeyAweDAwMDAwMEZFLCAweDAwMDAwMEZFLCBDUFVfTVRSUiwJQ1BVX1A2X0NYX1hFCQl9LAorCisJeyAweDAwMDAwMTE2LCAweDAwMDAwMTE2LCBDUFVfQ0FDSEUsCUNQVV9JTlRFTF9QNgkJfSwKKwl7IDB4MDAwMDAxMTgsIDB4MDAwMDAxMTgsIENQVV9DQUNIRSwJQ1BVX0lOVEVMX1A2CQl9LAorCXsgMHgwMDAwMDExOSwgMHgwMDAwMDExOSwgQ1BVX0NBQ0hFLAlDUFVfSU5URUxfUFgJCX0sCisJeyAweDAwMDAwMTFBLCAweDAwMDAwMTFCLCBDUFVfQ0FDSEUsCUNQVV9JTlRFTF9QNgkJfSwKKwl7IDB4MDAwMDAxMUUsIDB4MDAwMDAxMUUsIENQVV9DQUNIRSwJQ1BVX1BYX0NYX0FUCQl9LAorCisJeyAweDAwMDAwMTc0LCAweDAwMDAwMTc2LCBDUFVfU1lTRU5URVIsCUNQVV9QNl9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDAxNzksIDB4MDAwMDAxN0EsIENQVV9NQywJQ1BVX1BYX0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDE3QiwgMHgwMDAwMDE3QiwgQ1BVX01DLAlDUFVfUDZfWEUJCX0sCisJeyAweDAwMDAwMTg2LCAweDAwMDAwMTg3LCBDUFVfUE1DLAlDUFVfUDZfQ1hfQVQJCX0sCisJeyAweDAwMDAwMTk4LCAweDAwMDAwMTk5LCBDUFVfUEVSRiwJQ1BVX1BNX0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDE5QSwgMHgwMDAwMDE5QSwgQ1BVX1RJTUUsCUNQVV9QTV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDAxOUIsIDB4MDAwMDAxOUQsIENQVV9USEVSTSwJQ1BVX1BNX0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDFBMCwgMHgwMDAwMDFBMCwgQ1BVX01JU0MsCUNQVV9QTV9DWF9BVF9YRQkJfSwKKworCXsgMHgwMDAwMDFDOSwgMHgwMDAwMDFDOSwgQ1BVX0xCUkFOQ0gsCUNQVV9QTV9DWF9BVAkJfSwKKwl7IDB4MDAwMDAxRDcsIDB4MDAwMDAxRDgsIENQVV9MQlJBTkNILAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDAxRDksIDB4MDAwMDAxRDksIENQVV9ERUJVRywJQ1BVX0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDFEQSwgMHgwMDAwMDFEQSwgQ1BVX0xCUkFOQ0gsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHgwMDAwMDFEQiwgMHgwMDAwMDFEQiwgQ1BVX0xCUkFOQ0gsCUNQVV9QNl9YRQkJfSwKKwl7IDB4MDAwMDAxREMsIDB4MDAwMDAxREMsIENQVV9MQlJBTkNILAlDUFVfSU5URUxfUDYJCX0sCisJeyAweDAwMDAwMURELCAweDAwMDAwMURFLCBDUFVfTEJSQU5DSCwJQ1BVX1BYX0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDFFMCwgMHgwMDAwMDFFMCwgQ1BVX0xCUkFOQ0gsCUNQVV9JTlRFTF9QNgkJfSwKKworCXsgMHgwMDAwMDIwMCwgMHgwMDAwMDIwRiwgQ1BVX01UUlIsCUNQVV9QNl9DWF9YRQkJfSwKKwl7IDB4MDAwMDAyNTAsIDB4MDAwMDAyNTAsIENQVV9NVFJSLAlDUFVfUDZfQ1hfWEUJCX0sCisJeyAweDAwMDAwMjU4LCAweDAwMDAwMjU5LCBDUFVfTVRSUiwJQ1BVX1A2X0NYX1hFCQl9LAorCXsgMHgwMDAwMDI2OCwgMHgwMDAwMDI2RiwgQ1BVX01UUlIsCUNQVV9QNl9DWF9YRQkJfSwKKwl7IDB4MDAwMDAyNzcsIDB4MDAwMDAyNzcsIENQVV9QQVQsCUNQVV9DMl9BVF9YRQkJfSwKKwl7IDB4MDAwMDAyRkYsIDB4MDAwMDAyRkYsIENQVV9NVFJSLAlDUFVfUDZfQ1hfWEUJCX0sCisKKwl7IDB4MDAwMDAzMDAsIDB4MDAwMDAzMDgsIENQVV9QTUMsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHgwMDAwMDMwOSwgMHgwMDAwMDMwQiwgQ1BVX1BNQywJQ1BVX0MyX0FUX1hFCQl9LAorCXsgMHgwMDAwMDMwQywgMHgwMDAwMDMxMSwgQ1BVX1BNQywJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwMzQ1LCAweDAwMDAwMzQ1LCBDUFVfUE1DLAlDUFVfQzJfQVQJCX0sCisJeyAweDAwMDAwMzYwLCAweDAwMDAwMzcxLCBDUFVfUE1DLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDAzOEQsIDB4MDAwMDAzOTAsIENQVV9QTUMsCUNQVV9DMl9BVAkJfSwKKwl7IDB4MDAwMDAzQTAsIDB4MDAwMDAzQkUsIENQVV9QTUMsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHgwMDAwMDNDMCwgMHgwMDAwMDNDRCwgQ1BVX1BNQywJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwM0UwLCAweDAwMDAwM0UxLCBDUFVfUE1DLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDAzRjAsIDB4MDAwMDAzRjAsIENQVV9QTUMsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHgwMDAwMDNGMSwgMHgwMDAwMDNGMSwgQ1BVX1BNQywJQ1BVX0MyX0FUX1hFCQl9LAorCXsgMHgwMDAwMDNGMiwgMHgwMDAwMDNGMiwgQ1BVX1BNQywJQ1BVX0lOVEVMX1hFT04JCX0sCisKKwl7IDB4MDAwMDA0MDAsIDB4MDAwMDA0MDIsIENQVV9NQywJQ1BVX1BNX0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDQwMywgMHgwMDAwMDQwMywgQ1BVX01DLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDA0MDQsIDB4MDAwMDA0MDYsIENQVV9NQywJQ1BVX1BNX0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDQwNywgMHgwMDAwMDQwNywgQ1BVX01DLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDA0MDgsIDB4MDAwMDA0MEEsIENQVV9NQywJQ1BVX1BNX0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDQwQiwgMHgwMDAwMDQwQiwgQ1BVX01DLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDA0MEMsIDB4MDAwMDA0MEUsIENQVV9NQywJQ1BVX1BNX0NYX1hFCQl9LAorCXsgMHgwMDAwMDQwRiwgMHgwMDAwMDQwRiwgQ1BVX01DLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDA0MTAsIDB4MDAwMDA0MTIsIENQVV9NQywJQ1BVX1BNX0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDQxMywgMHgwMDAwMDQxNywgQ1BVX01DLAlDUFVfQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwNDgwLCAweDAwMDAwNDhCLCBDUFVfVk1YLAlDUFVfQ1hfQVRfWEUJCX0sCisKKwl7IDB4MDAwMDA2MDAsIDB4MDAwMDA2MDAsIENQVV9ERUJVRywJQ1BVX1BNX0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDY4MCwgMHgwMDAwMDY4RiwgQ1BVX0xCUkFOQ0gsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHgwMDAwMDZDMCwgMHgwMDAwMDZDRiwgQ1BVX0xCUkFOQ0gsCUNQVV9JTlRFTF9YRU9OCQl9LAorCisJeyAweDAwMDEwN0NDLCAweDAwMDEwN0QzLCBDUFVfUE1DLAlDUFVfSU5URUxfWEVPTl9NUAl9LAorCisJeyAweEMwMDAwMDgwLCAweEMwMDAwMDgwLCBDUFVfRkVBVFVSRVMsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHhDMDAwMDA4MSwgMHhDMDAwMDA4MiwgQ1BVX0NBTEwsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHhDMDAwMDA4NCwgMHhDMDAwMDA4NCwgQ1BVX0NBTEwsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHhDMDAwMDEwMCwgMHhDMDAwMDEwMiwgQ1BVX0JBU0UsCUNQVV9JTlRFTF9YRU9OCQl9LAorfTsKKworLyogQU1EIFJlZ2lzdGVycyBSYW5nZSAqLworc3RhdGljIHN0cnVjdCBjcHVfZGVidWdfcmFuZ2UgY3B1X2FtZF9yYW5nZVtdID0geworCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMSwgQ1BVX01DLAlDUFVfSzEwX1BMVVMsCQl9LAorCXsgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgQ1BVX1RJTUUsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4MDAwMDAwMUIsIDB4MDAwMDAwMUIsIENQVV9BUElDLAlDUFVfSzhfUExVUywJCX0sCisJeyAweDAwMDAwMDJBLCAweDAwMDAwMDJBLCBDUFVfUE9XRVJPTiwJQ1BVX0s3X1BMVVMJCX0sCisJeyAweDAwMDAwMDhCLCAweDAwMDAwMDhCLCBDUFVfVkVSLAlDUFVfSzhfUExVUwkJfSwKKwl7IDB4MDAwMDAwRkUsIDB4MDAwMDAwRkUsIENQVV9NVFJSLAlDUFVfSzhfUExVUywJCX0sCisKKwl7IDB4MDAwMDAxNzQsIDB4MDAwMDAxNzYsIENQVV9TWVNFTlRFUiwJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHgwMDAwMDE3OSwgMHgwMDAwMDE3QiwgQ1BVX01DLAlDUFVfSzhfUExVUywJCX0sCisJeyAweDAwMDAwMUQ5LCAweDAwMDAwMUQ5LCBDUFVfREVCVUcsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4MDAwMDAxREIsIDB4MDAwMDAxREUsIENQVV9MQlJBTkNILAlDUFVfSzhfUExVUywJCX0sCisKKwl7IDB4MDAwMDAyMDAsIDB4MDAwMDAyMEYsIENQVV9NVFJSLAlDUFVfSzhfUExVUywJCX0sCisJeyAweDAwMDAwMjUwLCAweDAwMDAwMjUwLCBDUFVfTVRSUiwJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHgwMDAwMDI1OCwgMHgwMDAwMDI1OSwgQ1BVX01UUlIsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4MDAwMDAyNjgsIDB4MDAwMDAyNkYsIENQVV9NVFJSLAlDUFVfSzhfUExVUywJCX0sCisJeyAweDAwMDAwMjc3LCAweDAwMDAwMjc3LCBDUFVfUEFULAlDUFVfSzhfUExVUywJCX0sCisJeyAweDAwMDAwMkZGLCAweDAwMDAwMkZGLCBDUFVfTVRSUiwJQ1BVX0s4X1BMVVMsCQl9LAorCisJeyAweDAwMDAwNDAwLCAweDAwMDAwNDEzLCBDUFVfTUMsCUNQVV9LOF9QTFVTLAkJfSwKKworCXsgMHhDMDAwMDA4MCwgMHhDMDAwMDA4MCwgQ1BVX0ZFQVRVUkVTLAlDUFVfQU1EX0FMTCwJCX0sCisJeyAweEMwMDAwMDgxLCAweEMwMDAwMDg0LCBDUFVfQ0FMTCwJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHhDMDAwMDEwMCwgMHhDMDAwMDEwMiwgQ1BVX0JBU0UsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4QzAwMDAxMDMsIDB4QzAwMDAxMDMsIENQVV9USU1FLAlDUFVfSzEwX1BMVVMsCQl9LAorCisJeyAweEMwMDEwMDAwLCAweEMwMDEwMDA3LCBDUFVfUE1DLAlDUFVfSzhfUExVUywJCX0sCisJeyAweEMwMDEwMDEwLCAweEMwMDEwMDEwLCBDUFVfQ09ORiwJQ1BVX0s3X1BMVVMsCQl9LAorCXsgMHhDMDAxMDAxNSwgMHhDMDAxMDAxNSwgQ1BVX0NPTkYsCUNQVV9LN19QTFVTLAkJfSwKKwl7IDB4QzAwMTAwMTYsIDB4QzAwMTAwMUEsIENQVV9NVFJSLAlDUFVfSzhfUExVUywJCX0sCisJeyAweEMwMDEwMDFELCAweEMwMDEwMDFELCBDUFVfTVRSUiwJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHhDMDAxMDAxRiwgMHhDMDAxMDAxRiwgQ1BVX0NPTkYsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4QzAwMTAwMzAsIDB4QzAwMTAwMzUsIENQVV9CSU9TLAlDUFVfSzhfUExVUywJCX0sCisJeyAweEMwMDEwMDQ0LCAweEMwMDEwMDQ4LCBDUFVfTUMsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4QzAwMTAwNTAsIDB4QzAwMTAwNTYsIENQVV9TTU0sCUNQVV9LMEZfUExVUywJCX0sCisJeyAweEMwMDEwMDU4LCAweEMwMDEwMDU4LCBDUFVfQ09ORiwJQ1BVX0sxMF9QTFVTLAkJfSwKKwl7IDB4QzAwMTAwNjAsIDB4QzAwMTAwNjAsIENQVV9DQUNIRSwJQ1BVX0FNRF8xMSwJCX0sCisJeyAweEMwMDEwMDYxLCAweEMwMDEwMDY4LCBDUFVfU01NLAlDUFVfSzEwX1BMVVMsCQl9LAorCXsgMHhDMDAxMDA2OSwgMHhDMDAxMDA2QiwgQ1BVX1NNTSwJQ1BVX0FNRF8xMSwJCX0sCisJeyAweEMwMDEwMDcwLCAweEMwMDEwMDcxLCBDUFVfU01NLAlDUFVfSzEwX1BMVVMsCQl9LAorCXsgMHhDMDAxMDExMSwgMHhDMDAxMDExMywgQ1BVX1NNTSwJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHhDMDAxMDExNCwgMHhDMDAxMDExOCwgQ1BVX1NWTSwJQ1BVX0sxMF9QTFVTLAkJfSwKKwl7IDB4QzAwMTAxNDAsIDB4QzAwMTAxNDEsIENQVV9PU1ZNLAlDUFVfSzEwX1BMVVMsCQl9LAorCXsgMHhDMDAxMTAyMiwgMHhDMDAxMTAyMywgQ1BVX0NPTkYsCUNQVV9LMTBfUExVUywJCX0sCit9OworCisKKy8qIEludGVsICovCitzdGF0aWMgaW50IGdldF9pbnRlbF9tb2RlbGZsYWcodW5zaWduZWQgbW9kZWwpCit7CisJaW50IGZsYWc7CisKKwlzd2l0Y2ggKG1vZGVsKSB7CisJY2FzZSAweDA1MDE6CisJY2FzZSAweDA1MDI6CisJY2FzZSAweDA1MDQ6CisJCWZsYWcgPSBDUFVfSU5URUxfUEVOVElVTTsKKwkJYnJlYWs7CisJY2FzZSAweDA2MDE6CisJY2FzZSAweDA2MDM6CisJY2FzZSAweDA2MDU6CisJY2FzZSAweDA2MDc6CisJY2FzZSAweDA2MDg6CisJY2FzZSAweDA2MEE6CisJY2FzZSAweDA2MEI6CisJCWZsYWcgPSBDUFVfSU5URUxfUDY7CisJCWJyZWFrOworCWNhc2UgMHgwNjA5OgorCWNhc2UgMHgwNjBEOgorCQlmbGFnID0gQ1BVX0lOVEVMX1BFTlRJVU1fTTsKKwkJYnJlYWs7CisJY2FzZSAweDA2MEU6CisJCWZsYWcgPSBDUFVfSU5URUxfQ09SRTsKKwkJYnJlYWs7CisJY2FzZSAweDA2MEY6CisJY2FzZSAweDA2MTc6CisJCWZsYWcgPSBDUFVfSU5URUxfQ09SRTI7CisJCWJyZWFrOworCWNhc2UgMHgwNjFDOgorCQlmbGFnID0gQ1BVX0lOVEVMX0FUT007CisJCWJyZWFrOworCWNhc2UgMHgwRjAwOgorCWNhc2UgMHgwRjAxOgorCWNhc2UgMHgwRjAyOgorCWNhc2UgMHgwRjAzOgorCWNhc2UgMHgwRjA0OgorCQlmbGFnID0gQ1BVX0lOVEVMX1hFT05fUDQ7CisJCWJyZWFrOworCWNhc2UgMHgwRjA2OgorCQlmbGFnID0gQ1BVX0lOVEVMX1hFT05fTVA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZsYWcgPSBDUFVfTk9ORTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGZsYWc7Cit9CisKKy8qIEFNRCAqLworc3RhdGljIGludCBnZXRfYW1kX21vZGVsZmxhZyh1bnNpZ25lZCBtb2RlbCkKK3sKKwlpbnQgZmxhZzsKKworCXN3aXRjaCAobW9kZWwgPj4gOCkgeworCWNhc2UgMHg2OgorCQlmbGFnID0gQ1BVX0FNRF9LNjsKKwkJYnJlYWs7CisJY2FzZSAweDc6CisJCWZsYWcgPSBDUFVfQU1EX0s3OworCQlicmVhazsKKwljYXNlIDB4ODoKKwkJZmxhZyA9IENQVV9BTURfSzg7CisJCWJyZWFrOworCWNhc2UgMHhmOgorCQlmbGFnID0gQ1BVX0FNRF8wRjsKKwkJYnJlYWs7CisJY2FzZSAweDEwOgorCQlmbGFnID0gQ1BVX0FNRF8xMDsKKwkJYnJlYWs7CisJY2FzZSAweDExOgorCQlmbGFnID0gQ1BVX0FNRF8xMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZmxhZyA9IENQVV9OT05FOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZmxhZzsKK30KKworc3RhdGljIGludCBnZXRfY3B1X21vZGVsZmxhZyh1bnNpZ25lZCBjcHUpCit7CisJaW50IGZsYWc7CisKKwlmbGFnID0gcGVyX2NwdShjcHVfbW9kZWwsIGNwdSk7CisKKwlzd2l0Y2ggKGZsYWcgPj4gMTYpIHsKKwljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisJCWZsYWcgPSBnZXRfaW50ZWxfbW9kZWxmbGFnKGZsYWcpOworCQlicmVhazsKKwljYXNlIFg4Nl9WRU5ET1JfQU1EOgorCQlmbGFnID0gZ2V0X2FtZF9tb2RlbGZsYWcoZmxhZyAmIDB4ZmZmZik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZsYWcgPSBDUFVfTk9ORTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGZsYWc7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2NwdV9yYW5nZV9jb3VudCh1bnNpZ25lZCBjcHUpCit7CisJaW50IGluZGV4OworCisJc3dpdGNoIChwZXJfY3B1KGNwdV9tb2RlbCwgY3B1KSA+PiAxNikgeworCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKKwkJaW5kZXggPSBBUlJBWV9TSVpFKGNwdV9pbnRlbF9yYW5nZSk7CisJCWJyZWFrOworCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CisJCWluZGV4ID0gQVJSQVlfU0laRShjcHVfYW1kX3JhbmdlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaW5kZXggPSAwOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gaW5kZXg7Cit9CisKK3N0YXRpYyBpbnQgaXNfdHlwZWZsYWdfdmFsaWQodW5zaWduZWQgY3B1LCB1bnNpZ25lZCBmbGFnKQoreworCXVuc2lnbmVkIHZlbmRvciwgbW9kZWxmbGFnOworCWludCBpLCBpbmRleDsKKworCS8qIFN0YW5kYXJkIFJlZ2lzdGVycyBzaG91bGQgYmUgYWx3YXlzIHZhbGlkICovCisJaWYgKGZsYWcgPj0gQ1BVX1RTUykKKwkJcmV0dXJuIDE7CisKKwltb2RlbGZsYWcgPSBwZXJfY3B1KGNwdV9tb2RlbGZsYWcsIGNwdSk7CisJdmVuZG9yID0gcGVyX2NwdShjcHVfbW9kZWwsIGNwdSkgPj4gMTY7CisJaW5kZXggPSBnZXRfY3B1X3JhbmdlX2NvdW50KGNwdSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5kZXg7IGkrKykgeworCQlzd2l0Y2ggKHZlbmRvcikgeworCQljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisJCQlpZiAoKGNwdV9pbnRlbF9yYW5nZVtpXS5tb2RlbCAmIG1vZGVsZmxhZykgJiYKKwkJCSAgICAoY3B1X2ludGVsX3JhbmdlW2ldLmZsYWcgJiBmbGFnKSkKKwkJCQlyZXR1cm4gMTsKKwkJCWJyZWFrOworCQljYXNlIFg4Nl9WRU5ET1JfQU1EOgorCQkJaWYgKChjcHVfYW1kX3JhbmdlW2ldLm1vZGVsICYgbW9kZWxmbGFnKSAmJgorCQkJICAgIChjcHVfYW1kX3JhbmdlW2ldLmZsYWcgJiBmbGFnKSkKKwkJCQlyZXR1cm4gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogSW52YWxpZCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgZ2V0X2NwdV9yYW5nZSh1bnNpZ25lZCBjcHUsIHVuc2lnbmVkICptaW4sIHVuc2lnbmVkICptYXgsCisJCQkgICAgICBpbnQgaW5kZXgsIHVuc2lnbmVkIGZsYWcpCit7CisJdW5zaWduZWQgbW9kZWxmbGFnOworCisJbW9kZWxmbGFnID0gcGVyX2NwdShjcHVfbW9kZWxmbGFnLCBjcHUpOworCSptYXggPSAwOworCXN3aXRjaCAocGVyX2NwdShjcHVfbW9kZWwsIGNwdSkgPj4gMTYpIHsKKwljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisJCWlmICgoY3B1X2ludGVsX3JhbmdlW2luZGV4XS5tb2RlbCAmIG1vZGVsZmxhZykgJiYKKwkJICAgIChjcHVfaW50ZWxfcmFuZ2VbaW5kZXhdLmZsYWcgJiBmbGFnKSkgeworCQkJKm1pbiA9IGNwdV9pbnRlbF9yYW5nZVtpbmRleF0ubWluOworCQkJKm1heCA9IGNwdV9pbnRlbF9yYW5nZVtpbmRleF0ubWF4OworCQl9CisJCWJyZWFrOworCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CisJCWlmICgoY3B1X2FtZF9yYW5nZVtpbmRleF0ubW9kZWwgJiBtb2RlbGZsYWcpICYmCisJCSAgICAoY3B1X2FtZF9yYW5nZVtpbmRleF0uZmxhZyAmIGZsYWcpKSB7CisJCQkqbWluID0gY3B1X2FtZF9yYW5nZVtpbmRleF0ubWluOworCQkJKm1heCA9IGNwdV9hbWRfcmFuZ2VbaW5kZXhdLm1heDsKKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gKm1heDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBjYW4gYWxzbyBiZSBjYWxsZWQgd2l0aCBzZXEgPSBOVUxMIGZvciBwcmludGsgKi8KK3N0YXRpYyB2b2lkIHByaW50X2NwdV9kYXRhKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB1bnNpZ25lZCB0eXBlLAorCQkJICAgdTMyIGxvdywgdTMyIGhpZ2gpCit7CisJc3RydWN0IGNwdV9wcml2YXRlICpwcml2OworCXU2NCB2YWwgPSBoaWdoOworCisJaWYgKHNlcSkgeworCQlwcml2ID0gc2VxLT5wcml2YXRlOworCQlpZiAocHJpdi0+ZmlsZSkgeworCQkJdmFsID0gKHZhbCA8PCAzMikgfCBsb3c7CisJCQlzZXFfcHJpbnRmKHNlcSwgIjB4JWxseFxuIiwgdmFsKTsKKwkJfSBlbHNlCisJCQlzZXFfcHJpbnRmKHNlcSwgIiAlMDh4OiAlMDh4XyUwOHhcbiIsCisJCQkJICAgdHlwZSwgaGlnaCwgbG93KTsKKwl9IGVsc2UKKwkJcHJpbnRrKEtFUk5fSU5GTyAiICUwOHg6ICUwOHhfJTA4eFxuIiwgdHlwZSwgaGlnaCwgbG93KTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBjYW4gYWxzbyBiZSBjYWxsZWQgd2l0aCBzZXEgPSBOVUxMIGZvciBwcmludGsgKi8KK3N0YXRpYyB2b2lkIHByaW50X21zcihzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdW5zaWduZWQgY3B1LCB1bnNpZ25lZCBmbGFnKQoreworCXVuc2lnbmVkIG1zciwgbXNyX21pbiwgbXNyX21heDsKKwlzdHJ1Y3QgY3B1X3ByaXZhdGUgKnByaXY7CisJdTMyIGxvdywgaGlnaDsKKwlpbnQgaSwgcmFuZ2U7CisKKwlpZiAoc2VxKSB7CisJCXByaXYgPSBzZXEtPnByaXZhdGU7CisJCWlmIChwcml2LT5maWxlKSB7CisJCQlpZiAoIXJkbXNyX3NhZmVfb25fY3B1KHByaXYtPmNwdSwgcHJpdi0+cmVnLAorCQkJCQkgICAgICAgJmxvdywgJmhpZ2gpKQorCQkJCXByaW50X2NwdV9kYXRhKHNlcSwgcHJpdi0+cmVnLCBsb3csIGhpZ2gpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJcmFuZ2UgPSBnZXRfY3B1X3JhbmdlX2NvdW50KGNwdSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmFuZ2U7IGkrKykgeworCQlpZiAoIWdldF9jcHVfcmFuZ2UoY3B1LCAmbXNyX21pbiwgJm1zcl9tYXgsIGksIGZsYWcpKQorCQkJY29udGludWU7CisKKwkJZm9yIChtc3IgPSBtc3JfbWluOyBtc3IgPD0gbXNyX21heDsgbXNyKyspIHsKKwkJCWlmIChyZG1zcl9zYWZlX29uX2NwdShjcHUsIG1zciwgJmxvdywgJmhpZ2gpKQorCQkJCWNvbnRpbnVlOworCQkJcHJpbnRfY3B1X2RhdGEoc2VxLCBtc3IsIGxvdywgaGlnaCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3Rzcyh2b2lkICphcmcpCit7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7CisJc3RydWN0IHNlcV9maWxlICpzZXEgPSBhcmc7CisJdW5zaWduZWQgaW50IHNlZzsKKworCXNlcV9wcmludGYoc2VxLCAiIFJBWFx0OiAlMDE2bHhcbiIsIHJlZ3MtPmF4KTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBSQlhcdDogJTAxNmx4XG4iLCByZWdzLT5ieCk7CisJc2VxX3ByaW50ZihzZXEsICIgUkNYXHQ6ICUwMTZseFxuIiwgcmVncy0+Y3gpOworCXNlcV9wcmludGYoc2VxLCAiIFJEWFx0OiAlMDE2bHhcbiIsIHJlZ3MtPmR4KTsKKworCXNlcV9wcmludGYoc2VxLCAiIFJTSVx0OiAlMDE2bHhcbiIsIHJlZ3MtPnNpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBSRElcdDogJTAxNmx4XG4iLCByZWdzLT5kaSk7CisJc2VxX3ByaW50ZihzZXEsICIgUkJQXHQ6ICUwMTZseFxuIiwgcmVncy0+YnApOworCXNlcV9wcmludGYoc2VxLCAiIEVTUFx0OiAlMDE2bHhcbiIsIHJlZ3MtPnNwKTsKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwlzZXFfcHJpbnRmKHNlcSwgIiBSMDhcdDogJTAxNmx4XG4iLCByZWdzLT5yOCk7CisJc2VxX3ByaW50ZihzZXEsICIgUjA5XHQ6ICUwMTZseFxuIiwgcmVncy0+cjkpOworCXNlcV9wcmludGYoc2VxLCAiIFIxMFx0OiAlMDE2bHhcbiIsIHJlZ3MtPnIxMCk7CisJc2VxX3ByaW50ZihzZXEsICIgUjExXHQ6ICUwMTZseFxuIiwgcmVncy0+cjExKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBSMTJcdDogJTAxNmx4XG4iLCByZWdzLT5yMTIpOworCXNlcV9wcmludGYoc2VxLCAiIFIxM1x0OiAlMDE2bHhcbiIsIHJlZ3MtPnIxMyk7CisJc2VxX3ByaW50ZihzZXEsICIgUjE0XHQ6ICUwMTZseFxuIiwgcmVncy0+cjE0KTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBSMTVcdDogJTAxNmx4XG4iLCByZWdzLT5yMTUpOworI2VuZGlmCisKKwlhc20oIm1vdmwgJSVjcywlMCIgOiAiPXIiIChzZWcpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBDU1x0OiAgICAgICAgICAgICAlMDR4XG4iLCBzZWcpOworCWFzbSgibW92bCAlJWRzLCUwIiA6ICI9ciIgKHNlZykpOworCXNlcV9wcmludGYoc2VxLCAiIERTXHQ6ICAgICAgICAgICAgICUwNHhcbiIsIHNlZyk7CisJc2VxX3ByaW50ZihzZXEsICIgU1NcdDogICAgICAgICAgICAgJTA0bHhcbiIsIHJlZ3MtPnNzICYgMHhmZmZmKTsKKwlhc20oIm1vdmwgJSVlcywlMCIgOiAiPXIiIChzZWcpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBFU1x0OiAgICAgICAgICAgICAlMDR4XG4iLCBzZWcpOworCWFzbSgibW92bCAlJWZzLCUwIiA6ICI9ciIgKHNlZykpOworCXNlcV9wcmludGYoc2VxLCAiIEZTXHQ6ICAgICAgICAgICAgICUwNHhcbiIsIHNlZyk7CisJYXNtKCJtb3ZsICUlZ3MsJTAiIDogIj1yIiAoc2VnKSk7CisJc2VxX3ByaW50ZihzZXEsICIgR1NcdDogICAgICAgICAgICAgJTA0eFxuIiwgc2VnKTsKKworCXNlcV9wcmludGYoc2VxLCAiIEVGTEFHU1x0OiAlMDE2bHhcbiIsIHJlZ3MtPmZsYWdzKTsKKworCXNlcV9wcmludGYoc2VxLCAiIEVJUFx0OiAlMDE2bHhcbiIsIHJlZ3MtPmlwKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfY3Iodm9pZCAqYXJnKQoreworCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gYXJnOworCisJc2VxX3ByaW50ZihzZXEsICIgY3IwXHQ6ICUwMTZseFxuIiwgcmVhZF9jcjAoKSk7CisJc2VxX3ByaW50ZihzZXEsICIgY3IyXHQ6ICUwMTZseFxuIiwgcmVhZF9jcjIoKSk7CisJc2VxX3ByaW50ZihzZXEsICIgY3IzXHQ6ICUwMTZseFxuIiwgcmVhZF9jcjMoKSk7CisJc2VxX3ByaW50ZihzZXEsICIgY3I0XHQ6ICUwMTZseFxuIiwgcmVhZF9jcjRfc2FmZSgpKTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJc2VxX3ByaW50ZihzZXEsICIgY3I4XHQ6ICUwMTZseFxuIiwgcmVhZF9jcjgoKSk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgcHJpbnRfZGVzY19wdHIoY2hhciAqc3RyLCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlc2NfcHRyIGR0KQoreworCXNlcV9wcmludGYoc2VxLCAiICVzXHQ6ICUwMTZsbHhcbiIsIHN0ciwgKHU2NCkoZHQuYWRkcmVzcyB8IGR0LnNpemUpKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfZHQodm9pZCAqc2VxKQoreworCXN0cnVjdCBkZXNjX3B0ciBkdDsKKwl1bnNpZ25lZCBsb25nIGxkdDsKKworCS8qIElEVCAqLworCXN0b3JlX2lkdCgoc3RydWN0IGRlc2NfcHRyICopJmR0KTsKKwlwcmludF9kZXNjX3B0cigiSURUIiwgc2VxLCBkdCk7CisKKwkvKiBHRFQgKi8KKwlzdG9yZV9nZHQoKHN0cnVjdCBkZXNjX3B0ciAqKSZkdCk7CisJcHJpbnRfZGVzY19wdHIoIkdEVCIsIHNlcSwgZHQpOworCisJLyogTERUICovCisJc3RvcmVfbGR0KGxkdCk7CisJc2VxX3ByaW50ZihzZXEsICIgTERUXHQ6ICUwMTZseFxuIiwgbGR0KTsKKworCS8qIFRSICovCisJc3RvcmVfdHIobGR0KTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBUUlx0OiAlMDE2bHhcbiIsIGxkdCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2RyKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGFyZzsKKwl1bnNpZ25lZCBsb25nIGRyOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkvKiBJZ25vcmUgZGI0LCBkYjUgKi8KKwkJaWYgKChpID09IDQpIHx8IChpID09IDUpKQorCQkJY29udGludWU7CisJCWdldF9kZWJ1Z3JlZyhkciwgaSk7CisJCXNlcV9wcmludGYoc2VxLCAiIGRyJWRcdDogJTAxNmx4XG4iLCBpLCBkcik7CisJfQorCisJc2VxX3ByaW50ZihzZXEsICJcbiBNU1JcdDpcbiIpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9hcGljKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGFyZzsKKworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCXNlcV9wcmludGYoc2VxLCAiIExBUElDXHQ6XG4iKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBJRFx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19JRCkgPj4gMjQpOworCXNlcV9wcmludGYoc2VxLCAiIExWUlx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19MVlIpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBUQVNLUFJJXHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19UQVNLUFJJKSk7CisJc2VxX3ByaW50ZihzZXEsICIgQVJCUFJJXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0FSQlBSSSkpOworCXNlcV9wcmludGYoc2VxLCAiIFBST0NQUklcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX1BST0NQUkkpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBMRFJcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfTERSKSk7CisJc2VxX3ByaW50ZihzZXEsICIgREZSXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0RGUikpOworCXNlcV9wcmludGYoc2VxLCAiIFNQSVZcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfU1BJVikpOworCXNlcV9wcmludGYoc2VxLCAiIElTUlx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19JU1IpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBFU1JcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfRVNSKSk7CisJc2VxX3ByaW50ZihzZXEsICIgSUNSXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0lDUikpOworCXNlcV9wcmludGYoc2VxLCAiIElDUjJcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfSUNSMikpOworCXNlcV9wcmludGYoc2VxLCAiIExWVFRcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfTFZUVCkpOworCXNlcV9wcmludGYoc2VxLCAiIExWVFRITVJcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0xWVFRITVIpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBMVlRQQ1x0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19MVlRQQykpOworCXNlcV9wcmludGYoc2VxLCAiIExWVDBcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfTFZUMCkpOworCXNlcV9wcmludGYoc2VxLCAiIExWVDFcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfTFZUMSkpOworCXNlcV9wcmludGYoc2VxLCAiIExWVEVSUlx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19MVlRFUlIpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBUTUlDVFx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19UTUlDVCkpOworCXNlcV9wcmludGYoc2VxLCAiIFRNQ0NUXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX1RNQ0NUKSk7CisJc2VxX3ByaW50ZihzZXEsICIgVERDUlx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19URENSKSk7CisjZW5kaWYgLyogQ09ORklHX1g4Nl9MT0NBTF9BUElDICovCisKKwlzZXFfcHJpbnRmKHNlcSwgIlxuIE1TUlx0OlxuIik7Cit9CisKK3N0YXRpYyBpbnQgY3B1X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXN0cnVjdCBjcHVfcHJpdmF0ZSAqcHJpdiA9IHNlcS0+cHJpdmF0ZTsKKworCWlmIChwcml2ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChjcHVfYmFzZVtwcml2LT50eXBlXS5mbGFnKSB7CisJY2FzZSBDUFVfVFNTOgorCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUocHJpdi0+Y3B1LCBwcmludF90c3MsIHNlcSwgMSk7CisJCWJyZWFrOworCWNhc2UgQ1BVX0NSOgorCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUocHJpdi0+Y3B1LCBwcmludF9jciwgc2VxLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfRFQ6CisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShwcml2LT5jcHUsIHByaW50X2R0LCBzZXEsIDEpOworCQlicmVhazsKKwljYXNlIENQVV9ERUJVRzoKKwkJaWYgKHByaXYtPmZpbGUgPT0gQ1BVX0lOREVYX0JJVCkKKwkJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShwcml2LT5jcHUsIHByaW50X2RyLCBzZXEsIDEpOworCQlwcmludF9tc3Ioc2VxLCBwcml2LT5jcHUsIGNwdV9iYXNlW3ByaXYtPnR5cGVdLmZsYWcpOworCQlicmVhazsKKwljYXNlIENQVV9BUElDOgorCQlpZiAocHJpdi0+ZmlsZSA9PSBDUFVfSU5ERVhfQklUKQorCQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKHByaXYtPmNwdSwgcHJpbnRfYXBpYywgc2VxLCAxKTsKKwkJcHJpbnRfbXNyKHNlcSwgcHJpdi0+Y3B1LCBjcHVfYmFzZVtwcml2LT50eXBlXS5mbGFnKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludF9tc3Ioc2VxLCBwcml2LT5jcHUsIGNwdV9iYXNlW3ByaXYtPnR5cGVdLmZsYWcpOworCQlicmVhazsKKwl9CisJc2VxX3ByaW50ZihzZXEsICJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICpjcHVfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKK3sKKwlpZiAoKnBvcyA9PSAwKSAvKiBPbmUgdGltZSBpcyBlbm91Z2ggOy0pICovCisJCXJldHVybiBzZXE7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgKmNwdV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJKCpwb3MpKys7CisKKwlyZXR1cm4gY3B1X3NlcV9zdGFydChzZXEsIHBvcyk7Cit9CisKK3N0YXRpYyB2b2lkIGNwdV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjcHVfc2VxX29wcyA9IHsKKwkuc3RhcnQJCT0gY3B1X3NlcV9zdGFydCwKKwkubmV4dAkJPSBjcHVfc2VxX25leHQsCisJLnN0b3AJCT0gY3B1X3NlcV9zdG9wLAorCS5zaG93CQk9IGNwdV9zZXFfc2hvdywKK307CisKK3N0YXRpYyBpbnQgY3B1X3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjcHVfcHJpdmF0ZSAqcHJpdiA9IGlub2RlLT5pX3ByaXZhdGU7CisJc3RydWN0IHNlcV9maWxlICpzZXE7CisJaW50IGVycjsKKworCWVyciA9IHNlcV9vcGVuKGZpbGUsICZjcHVfc2VxX29wcyk7CisJaWYgKCFlcnIpIHsKKwkJc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCQlzZXEtPnByaXZhdGUgPSBwcml2OworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfbXNyKHN0cnVjdCBjcHVfcHJpdmF0ZSAqcHJpdiwgdTY0IHZhbCkKK3sKKwl1MzIgbG93LCBoaWdoOworCisJaGlnaCA9ICh2YWwgPj4gMzIpICYgMHhmZmZmZmZmZjsKKwlsb3cgPSB2YWwgJiAweGZmZmZmZmZmOworCisJaWYgKCF3cm1zcl9zYWZlX29uX2NwdShwcml2LT5jcHUsIHByaXYtPnJlZywgbG93LCBoaWdoKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLUVQRVJNOworfQorCitzdGF0aWMgaW50IHdyaXRlX2NwdV9yZWdpc3RlcihzdHJ1Y3QgY3B1X3ByaXZhdGUgKnByaXYsIGNvbnN0IGNoYXIgKmJ1ZikKK3sKKwlpbnQgcmV0ID0gLUVQRVJNOworCXU2NCB2YWw7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bGwoYnVmLCAwLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFN1cHBvcnRpbmcgb25seSBNU1JzICovCisJaWYgKHByaXYtPnR5cGUgPCBDUFVfVFNTX0JJVCkKKwkJcmV0dXJuIHdyaXRlX21zcihwcml2LCB2YWwpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgY3B1X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZikKK3sKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY3B1X3ByaXZhdGUgKnByaXYgPSBzZXEtPnByaXZhdGU7CisJY2hhciBidWZbMTldOworCisJaWYgKChwcml2ID09IE5VTEwpIHx8IChjb3VudCA+PSBzaXplb2YoYnVmKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlidWZbY291bnRdID0gMDsKKworCWlmICgoY3B1X2Jhc2VbcHJpdi0+dHlwZV0ud3JpdGUpICYmIChjcHVfZmlsZVtwcml2LT5maWxlXS53cml0ZSkpCisJCWlmICghd3JpdGVfY3B1X3JlZ2lzdGVyKHByaXYsIGJ1ZikpCisJCQlyZXR1cm4gY291bnQ7CisKKwlyZXR1cm4gLUVBQ0NFUzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY3B1X2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGNwdV9zZXFfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkud3JpdGUJCT0gY3B1X3dyaXRlLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IGNwdV9jcmVhdGVfZmlsZSh1bnNpZ25lZCBjcHUsIHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIHJlZywKKwkJCSAgIHVuc2lnbmVkIGZpbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgY3B1X3ByaXZhdGUgKnByaXYgPSBOVUxMOworCisJLyogQWxyZWFkeSBpbnRpYWxpemVkICovCisJaWYgKGZpbGUgPT0gQ1BVX0lOREVYX0JJVCkKKwkJaWYgKHBlcl9jcHUoY3B1X2Fyclt0eXBlXS5pbml0LCBjcHUpKQorCQkJcmV0dXJuIDA7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYtPmNwdSA9IGNwdTsKKwlwcml2LT50eXBlID0gdHlwZTsKKwlwcml2LT5yZWcgPSByZWc7CisJcHJpdi0+ZmlsZSA9IGZpbGU7CisJbXV0ZXhfbG9jaygmY3B1X2RlYnVnX2xvY2spOworCXBlcl9jcHUocHJpdl9hcnJbdHlwZV0sIGNwdSkgPSBwcml2OworCXBlcl9jcHUoY3B1X3ByaXZfY291bnQsIGNwdSkrKzsKKwltdXRleF91bmxvY2soJmNwdV9kZWJ1Z19sb2NrKTsKKworCWlmIChmaWxlKQorCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGNwdV9maWxlW2ZpbGVdLm5hbWUsIFNfSVJVR08sCisJCQkJICAgIGRlbnRyeSwgKHZvaWQgKilwcml2LCAmY3B1X2ZvcHMpOworCWVsc2UgeworCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGNwdV9iYXNlW3R5cGVdLm5hbWUsIFNfSVJVR08sCisJCQkJICAgIHBlcl9jcHUoY3B1X2Fyclt0eXBlXS5kZW50cnksIGNwdSksCisJCQkJICAgICh2b2lkICopcHJpdiwgJmNwdV9mb3BzKTsKKwkJbXV0ZXhfbG9jaygmY3B1X2RlYnVnX2xvY2spOworCQlwZXJfY3B1KGNwdV9hcnJbdHlwZV0uaW5pdCwgY3B1KSA9IDE7CisJCW11dGV4X3VubG9jaygmY3B1X2RlYnVnX2xvY2spOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNwdV9pbml0X3JlZ2ZpbGVzKHVuc2lnbmVkIGNwdSwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIHJlZywKKwkJCSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXVuc2lnbmVkIGZpbGU7CisJaW50IGVyciA9IDA7CisKKwlmb3IgKGZpbGUgPSAwOyBmaWxlIDwgIEFSUkFZX1NJWkUoY3B1X2ZpbGUpOyBmaWxlKyspIHsKKwkJZXJyID0gY3B1X2NyZWF0ZV9maWxlKGNwdSwgdHlwZSwgcmVnLCBmaWxlLCBkZW50cnkpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGNwdV9pbml0X21zcih1bnNpZ25lZCBjcHUsIHVuc2lnbmVkIHR5cGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpjcHVfZGVudHJ5ID0gTlVMTDsKKwl1bnNpZ25lZCByZWcsIHJlZ19taW4sIHJlZ19tYXg7CisJaW50IGksIHJhbmdlLCBlcnIgPSAwOworCWNoYXIgcmVnX2RpclsxMl07CisJdTMyIGxvdywgaGlnaDsKKworCXJhbmdlID0gZ2V0X2NwdV9yYW5nZV9jb3VudChjcHUpOworCisJZm9yIChpID0gMDsgaSA8IHJhbmdlOyBpKyspIHsKKwkJaWYgKCFnZXRfY3B1X3JhbmdlKGNwdSwgJnJlZ19taW4sICZyZWdfbWF4LCBpLAorCQkJCSAgIGNwdV9iYXNlW3R5cGVdLmZsYWcpKQorCQkJY29udGludWU7CisKKwkJZm9yIChyZWcgPSByZWdfbWluOyByZWcgPD0gcmVnX21heDsgcmVnKyspIHsKKwkJCWlmIChyZG1zcl9zYWZlX29uX2NwdShjcHUsIHJlZywgJmxvdywgJmhpZ2gpKQorCQkJCWNvbnRpbnVlOworCisJCQlzcHJpbnRmKHJlZ19kaXIsICIweCV4IiwgcmVnKTsKKwkJCWNwdV9kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIocmVnX2RpciwgZGVudHJ5KTsKKwkJCWVyciA9IGNwdV9pbml0X3JlZ2ZpbGVzKGNwdSwgdHlwZSwgcmVnLCBjcHVfZGVudHJ5KTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY3B1X2luaXRfYWxscmVnKHVuc2lnbmVkIGNwdSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBkZW50cnkgKmNwdV9kZW50cnkgPSBOVUxMOworCXVuc2lnbmVkIHR5cGU7CisJaW50IGVyciA9IDA7CisKKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgIEFSUkFZX1NJWkUoY3B1X2Jhc2UpIC0gMTsgdHlwZSsrKSB7CisJCWlmICghaXNfdHlwZWZsYWdfdmFsaWQoY3B1LCBjcHVfYmFzZVt0eXBlXS5mbGFnKSkKKwkJCWNvbnRpbnVlOworCQljcHVfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZGlyKGNwdV9iYXNlW3R5cGVdLm5hbWUsIGRlbnRyeSk7CisJCXBlcl9jcHUoY3B1X2Fyclt0eXBlXS5kZW50cnksIGNwdSkgPSBjcHVfZGVudHJ5OworCisJCWlmICh0eXBlIDwgQ1BVX1RTU19CSVQpCisJCQllcnIgPSBjcHVfaW5pdF9tc3IoY3B1LCB0eXBlLCBjcHVfZGVudHJ5KTsKKwkJZWxzZQorCQkJZXJyID0gY3B1X2NyZWF0ZV9maWxlKGNwdSwgdHlwZSwgMCwgQ1BVX0lOREVYX0JJVCwKKwkJCQkJICAgICAgY3B1X2RlbnRyeSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY3B1X2luaXRfY3B1KHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqY3B1X2RlbnRyeSA9IE5VTEw7CisJc3RydWN0IGNwdWluZm9feDg2ICpjcHVpOworCWNoYXIgY3B1X2RpclsxMl07CisJdW5zaWduZWQgY3B1OworCWludCBlcnIgPSAwOworCisJZm9yIChjcHUgPSAwOyBjcHUgPCBucl9jcHVfaWRzOyBjcHUrKykgeworCQljcHVpID0gJmNwdV9kYXRhKGNwdSk7CisJCWlmICghY3B1X2hhcyhjcHVpLCBYODZfRkVBVFVSRV9NU1IpKQorCQkJY29udGludWU7CisJCXBlcl9jcHUoY3B1X21vZGVsLCBjcHUpID0gKChjcHVpLT54ODZfdmVuZG9yIDw8IDE2KSB8CisJCQkJCSAgIChjcHVpLT54ODYgPDwgOCkgfAorCQkJCQkgICAoY3B1aS0+eDg2X21vZGVsKSk7CisJCXBlcl9jcHUoY3B1X21vZGVsZmxhZywgY3B1KSA9IGdldF9jcHVfbW9kZWxmbGFnKGNwdSk7CisKKwkJc3ByaW50ZihjcHVfZGlyLCAiY3B1JWQiLCBjcHUpOworCQljcHVfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZGlyKGNwdV9kaXIsIGNwdV9kZWJ1Z2ZzX2Rpcik7CisJCWVyciA9IGNwdV9pbml0X2FsbHJlZyhjcHUsIGNwdV9kZW50cnkpOworCisJCXByX2luZm8oImNwdSVkKCVkKSBkZWJ1ZyBmaWxlcyAlZFxuIiwKKwkJCWNwdSwgbnJfY3B1X2lkcywgcGVyX2NwdShjcHVfcHJpdl9jb3VudCwgY3B1KSk7CisJCWlmIChwZXJfY3B1KGNwdV9wcml2X2NvdW50LCBjcHUpID4gTUFYX0NQVV9GSUxFUykgeworCQkJcHJfZXJyKCJSZWdpc3RlciBmaWxlcyBjb3VudCAlZCBleGNlZWRzIGxpbWl0ICVkXG4iLAorCQkJCXBlcl9jcHUoY3B1X3ByaXZfY291bnQsIGNwdSksIE1BWF9DUFVfRklMRVMpOworCQkJcGVyX2NwdShjcHVfcHJpdl9jb3VudCwgY3B1KSA9IE1BWF9DUFVfRklMRVM7CisJCQllcnIgPSAtRU5GSUxFOworCQl9CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNwdV9kZWJ1Z19pbml0KHZvaWQpCit7CisJY3B1X2RlYnVnZnNfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJjcHUiLCBhcmNoX2RlYnVnZnNfZGlyKTsKKworCXJldHVybiBjcHVfaW5pdF9jcHUoKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNwdV9kZWJ1Z19leGl0KHZvaWQpCit7CisJaW50IGksIGNwdTsKKworCWlmIChjcHVfZGVidWdmc19kaXIpCisJCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShjcHVfZGVidWdmc19kaXIpOworCisJZm9yIChjcHUgPSAwOyBjcHUgPCAgbnJfY3B1X2lkczsgY3B1KyspCisJCWZvciAoaSA9IDA7IGkgPCBwZXJfY3B1KGNwdV9wcml2X2NvdW50LCBjcHUpOyBpKyspCisJCQlrZnJlZShwZXJfY3B1KHByaXZfYXJyW2ldLCBjcHUpKTsKK30KKworbW9kdWxlX2luaXQoY3B1X2RlYnVnX2luaXQpOworbW9kdWxlX2V4aXQoY3B1X2RlYnVnX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJKYXN3aW5kZXIgU2luZ2ggUmFqcHV0Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNQVSBEZWJ1ZyBtb2R1bGUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3lyaXguYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3lyaXguYwppbmRleCBmZmQwZjVlLi41OTMxNzFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2N5cml4LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jeXJpeC5jCkBAIC02MSwyMyArNjEsMjMgQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGNoYXIgQ3g4Nl9kaXIwX21zYiBfX2NwdWluaXRkYXRhID0gMDsKIAotc3RhdGljIGNoYXIgQ3g4Nl9tb2RlbFtdWzldIF9fY3B1aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3QgY2hhciBfX2NwdWluaXRjb25zdCBDeDg2X21vZGVsW11bOV0gPSB7CiAJIkN4NDg2IiwgIkN4NDg2IiwgIjV4ODYgIiwgIjZ4ODYiLCAiTWVkaWFHWCAiLCAiNng4Nk1YICIsCiAJIk0gSUkgIiwgIlVua25vd24iCiB9Owotc3RhdGljIGNoYXIgQ3g0ODZfbmFtZVtdWzVdIF9fY3B1aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3QgY2hhciBfX2NwdWluaXRjb25zdCBDeDQ4Nl9uYW1lW11bNV0gPSB7CiAJIlNMQyIsICJETEMiLCAiU0xDMiIsICJETEMyIiwgIlNSeCIsICJEUngiLAogCSJTUngyIiwgIkRSeDIiCiB9Owotc3RhdGljIGNoYXIgQ3g0ODZTX25hbWVbXVs0XSBfX2NwdWluaXRkYXRhID0geworc3RhdGljIGNvbnN0IGNoYXIgX19jcHVpbml0Y29uc3QgQ3g0ODZTX25hbWVbXVs0XSA9IHsKIAkiUyIsICJTMiIsICJTZSIsICJTMmUiCiB9Owotc3RhdGljIGNoYXIgQ3g0ODZEX25hbWVbXVs0XSBfX2NwdWluaXRkYXRhID0geworc3RhdGljIGNvbnN0IGNoYXIgX19jcHVpbml0Y29uc3QgQ3g0ODZEX25hbWVbXVs0XSA9IHsKIAkiRFgiLCAiRFgyIiwgIj8iLCAiPyIsICI/IiwgIkRYNCIKIH07CiBzdGF0aWMgY2hhciBDeDg2X2NiW10gX19jcHVpbml0ZGF0YSA9ICI/LjV4IENvcmUvQnVzIENsb2NrIjsKLXN0YXRpYyBjaGFyIGN5cml4X21vZGVsX211bHQxW10gX19jcHVpbml0ZGF0YSA9ICIxMj8/NDMiOwotc3RhdGljIGNoYXIgY3lyaXhfbW9kZWxfbXVsdDJbXSBfX2NwdWluaXRkYXRhID0gIjEyMjMzNDQ1IjsKK3N0YXRpYyBjb25zdCBjaGFyIF9fY3B1aW5pdGNvbnN0IGN5cml4X21vZGVsX211bHQxW10gPSAiMTI/PzQzIjsKK3N0YXRpYyBjb25zdCBjaGFyIF9fY3B1aW5pdGNvbnN0IGN5cml4X21vZGVsX211bHQyW10gPSAiMTIyMzM0NDUiOwogCiAvKgogICogUmVzZXQgdGhlIHNsb3ctbG9vcCAoU0xPUCkgYml0IG9uIHRoZSA2ODYoTCkgd2hpY2ggaXMgc2V0IGJ5IHNvbWUgb2xkCkBAIC00MzUsNyArNDM1LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3B1X2RldiBjeXJpeF9jcHVfZGV2IF9fY3B1aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdV9kZXYgX19jcHVpbml0Y29uc3QgY3lyaXhfY3B1X2RldiA9IHsKIAkuY192ZW5kb3IJPSAiQ3lyaXgiLAogCS5jX2lkZW50CT0geyAiQ3lyaXhJbnN0ZWFkIiB9LAogCS5jX2Vhcmx5X2luaXQJPSBlYXJseV9pbml0X2N5cml4LApAQCAtNDQ2LDcgKzQ0Niw3IEBACiAKIGNwdV9kZXZfcmVnaXN0ZXIoY3lyaXhfY3B1X2Rldik7CiAKLXN0YXRpYyBzdHJ1Y3QgY3B1X2RldiBuc2NfY3B1X2RldiBfX2NwdWluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVfZGV2IF9fY3B1aW5pdGNvbnN0IG5zY19jcHVfZGV2ID0gewogCS5jX3ZlbmRvcgk9ICJOU0MiLAogCS5jX2lkZW50CT0geyAiR2VvZGUgYnkgTlNDIiB9LAogCS5jX2luaXQJCT0gaW5pdF9uc2MsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKaW5kZXggMWE4OWEyYi4uNzQzN2ZhMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2RzLmg+CiAjaW5jbHVkZSA8YXNtL2J1Z3MuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAjaW5jbHVkZSA8YXNtL3RvcG9sb2d5Lmg+CkBAIC01NCw2ICs1NSwxMSBAQAogCQljLT54ODZfY2FjaGVfYWxpZ25tZW50ID0gMTI4OwogI2VuZGlmCiAKKwkvKiBDUFVJRCB3b3JrYXJvdW5kIGZvciAwRjMzLzBGMzQgQ1BVICovCisJaWYgKGMtPng4NiA9PSAweEYgJiYgYy0+eDg2X21vZGVsID09IDB4MworCSAgICAmJiAoYy0+eDg2X21hc2sgPT0gMHgzIHx8IGMtPng4Nl9tYXNrID09IDB4NCkpCisJCWMtPng4Nl9waHlzX2JpdHMgPSAzNjsKKwogCS8qCiAJICogYy0+eDg2X3Bvd2VyIGlzIDgwMDBfMDAwNyBlZHguIEJpdCA4IGlzIFRTQyBydW5zIGF0IGNvbnN0YW50IHJhdGUKIAkgKiB3aXRoIFAvVCBzdGF0ZXMgYW5kIGRvZXMgbm90IHN0b3AgaW4gZGVlcCBDLXN0YXRlcy4KQEAgLTExNiw2ICsxMjIsMjggQEAKIH0KICNlbmRpZgogCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgaW50ZWxfc21wX2NoZWNrKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJLyogY2FsbGluZyBpcyBmcm9tIGlkZW50aWZ5X3NlY29uZGFyeV9jcHUoKSA/ICovCisJaWYgKGMtPmNwdV9pbmRleCA9PSBib290X2NwdV9pZCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBNYXNrIEIsIFBlbnRpdW0sIGJ1dCBub3QgUGVudGl1bSBNTVgKKwkgKi8KKwlpZiAoYy0+eDg2ID09IDUgJiYKKwkgICAgYy0+eDg2X21hc2sgPj0gMSAmJiBjLT54ODZfbWFzayA8PSA0ICYmCisJICAgIGMtPng4Nl9tb2RlbCA8PSAzKSB7CisJCS8qCisJCSAqIFJlbWVtYmVyIHdlIGhhdmUgQiBzdGVwIFBlbnRpYSB3aXRoIGJ1Z3MKKwkJICovCisJCVdBUk5fT05DRSgxLCAiV0FSTklORzogU01QIG9wZXJhdGlvbiBtYXkgYmUgdW5yZWxpYWJsZSIKKwkJCQkgICAgIndpdGggQiBzdGVwcGluZyBwcm9jZXNzb3JzLlxuIik7CisJfQorI2VuZGlmCit9CisKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBpbnRlbF93b3JrYXJvdW5kcyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJdW5zaWduZWQgbG9uZyBsbywgaGk7CkBAIC0xOTIsNiArMjIwLDggQEAKICNpZmRlZiBDT05GSUdfWDg2X05VTUFRCiAJbnVtYXFfdHNjX2Rpc2FibGUoKTsKICNlbmRpZgorCisJaW50ZWxfc21wX2NoZWNrKGMpOwogfQogI2Vsc2UKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBpbnRlbF93b3JrYXJvdW5kcyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCkBAIC0zOTEsNyArNDIxLDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGNwdV9kZXYgaW50ZWxfY3B1X2RldiBfX2NwdWluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVfZGV2IF9fY3B1aW5pdGNvbnN0IGludGVsX2NwdV9kZXYgPSB7CiAJLmNfdmVuZG9yCT0gIkludGVsIiwKIAkuY19pZGVudAk9IHsgIkdlbnVpbmVJbnRlbCIgfSwKICNpZmRlZiBDT05GSUdfWDg2XzMyCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwppbmRleCA3MjkzNTA4Li5jNDcxZWIxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKQEAgLTMyLDcgKzMyLDcgQEAKIH07CiAKIC8qIGFsbCB0aGUgY2FjaGUgZGVzY3JpcHRvciB0eXBlcyB3ZSBjYXJlIGFib3V0IChubyBUTEIgb3IgdHJhY2UgY2FjaGUgZW50cmllcykgKi8KLXN0YXRpYyBzdHJ1Y3QgX2NhY2hlX3RhYmxlIGNhY2hlX3RhYmxlW10gX19jcHVpbml0ZGF0YSA9CitzdGF0aWMgY29uc3Qgc3RydWN0IF9jYWNoZV90YWJsZSBfX2NwdWluaXRjb25zdCBjYWNoZV90YWJsZVtdID0KIHsKIAl7IDB4MDYsIExWTF8xX0lOU1QsIDggfSwJLyogNC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHgwOCwgTFZMXzFfSU5TVCwgMTYgfSwJLyogNC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwpAQCAtMjA2LDE1ICsyMDYsMTUgQEAKIAl1bnNpZ25lZCB2YWw7CiB9OwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgYXNzb2NzW10gX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBfX2NwdWluaXRjb25zdCBhc3NvY3NbXSA9IHsKIAlbMV0gPSAxLCBbMl0gPSAyLCBbNF0gPSA0LCBbNl0gPSA4LAogCVs4XSA9IDE2LCBbMHhhXSA9IDMyLCBbMHhiXSA9IDQ4LAogCVsweGNdID0gNjQsCiAJWzB4Zl0gPSAweGZmZmYgLy8gPz8KIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGxldmVsc1tdIF9fY3B1aW5pdGRhdGEgPSB7IDEsIDEsIDIsIDMgfTsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHR5cGVzW10gX19jcHVpbml0ZGF0YSA9IHsgMSwgMiwgMywgMyB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgX19jcHVpbml0Y29uc3QgbGV2ZWxzW10gPSB7IDEsIDEsIDIsIDMgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9fY3B1aW5pdGNvbnN0IHR5cGVzW10gPSB7IDEsIDIsIDMsIDMgfTsKIAogc3RhdGljIHZvaWQgX19jcHVpbml0CiBhbWRfY3B1aWQ0KGludCBsZWFmLCB1bmlvbiBfY3B1aWQ0X2xlYWZfZWF4ICplYXgsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL01ha2VmaWxlCmluZGV4IGQ3ZDIzMjMuLmIyZjg5ODIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL01ha2VmaWxlCkBAIC00LDMgKzQsNCBAQAogb2JqLSQoQ09ORklHX1g4Nl9NQ0VfSU5URUwpCSs9IG1jZV9pbnRlbF82NC5vCiBvYmotJChDT05GSUdfWDg2X01DRV9BTUQpCSs9IG1jZV9hbWRfNjQubwogb2JqLSQoQ09ORklHX1g4Nl9NQ0VfTk9ORkFUQUwpCSs9IG5vbi1mYXRhbC5vCitvYmotJChDT05GSUdfWDg2X01DRV9USFJFU0hPTEQpICs9IHRocmVzaG9sZC5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV8zMi5jCmluZGV4IGRmYWViY2UuLjM1NTIxMTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV8zMi5jCkBAIC02MCwyMCArNjAsNiBAQAogCX0KIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgb2xkX2NyNCBfX2luaXRkYXRhOwotCi12b2lkIF9faW5pdCBzdG9wX21jZSh2b2lkKQotewotCW9sZF9jcjQgPSByZWFkX2NyNCgpOwotCWNsZWFyX2luX2NyNChYODZfQ1I0X01DRSk7Ci19Ci0KLXZvaWQgX19pbml0IHJlc3RhcnRfbWNlKHZvaWQpCi17Ci0JaWYgKG9sZF9jcjQgJiBYODZfQ1I0X01DRSkKLQkJc2V0X2luX2NyNChYODZfQ1I0X01DRSk7Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0IG1jaGVja19kaXNhYmxlKGNoYXIgKnN0cikKIHsKIAltY2VfZGlzYWJsZWQgPSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfNjQuYwppbmRleCBmZTc5OTg1Li5jYTE0NjA0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfNjQuYwpAQCAtMyw2ICszLDggQEAKICAqIEs4IHBhcnRzIENvcHlyaWdodCAyMDAyLDIwMDMgQW5kaSBLbGVlbiwgU3VTRSBMYWJzLgogICogUmVzdCBmcm9tIHVua25vd24gYXV0aG9yKHMpLgogICogMjAwNCBBbmRpIEtsZWVuLiBSZXdyb3RlIG1vc3Qgb2YgaXQuCisgKiBDb3B5cmlnaHQgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBBbmRpIEtsZWVuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTI0LDYgKzI2LDkgQEAKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9yYXRlbGltaXQuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9tY2UuaD4KQEAgLTMyLDcgKzM3LDYgQEAKICNpbmNsdWRlIDxhc20vaWRsZS5oPgogCiAjZGVmaW5lIE1JU0NfTUNFTE9HX01JTk9SIDIyNwotI2RlZmluZSBOUl9TWVNGU19CQU5LUyA2CiAKIGF0b21pY190IG1jZV9lbnRyeTsKIApAQCAtNDcsNyArNTEsNyBAQAogICovCiBzdGF0aWMgaW50IHRvbGVyYW50ID0gMTsKIHN0YXRpYyBpbnQgYmFua3M7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBiYW5rW05SX1NZU0ZTX0JBTktTXSA9IHsgWzAgLi4uIE5SX1NZU0ZTX0JBTktTLTFdID0gfjBVTCB9Oworc3RhdGljIHU2NCAqYmFuazsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5vdGlmeV91c2VyOwogc3RhdGljIGludCByaXBfbXNyOwogc3RhdGljIGludCBtY2VfYm9vdGxvZyA9IC0xOwpAQCAtNTgsNiArNjIsMTkgQEAKIAogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG1jZV93YWl0KTsKIAorLyogTUNBIGJhbmtzIHBvbGxlZCBieSB0aGUgcGVyaW9kIHBvbGxpbmcgdGltZXIgZm9yIGNvcnJlY3RlZCBldmVudHMgKi8KK0RFRklORV9QRVJfQ1BVKG1jZV9iYW5rc190LCBtY2VfcG9sbF9iYW5rcykgPSB7CisJWzAgLi4uIEJJVFNfVE9fTE9OR1MoTUFYX05SX0JBTktTKS0xXSA9IH4wVUwKK307CisKKy8qIERvIGluaXRpYWwgaW5pdGlhbGl6YXRpb24gb2YgYSBzdHJ1Y3QgbWNlICovCit2b2lkIG1jZV9zZXR1cChzdHJ1Y3QgbWNlICptKQoreworCW1lbXNldChtLCAwLCBzaXplb2Yoc3RydWN0IG1jZSkpOworCW0tPmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlyZHRzY2xsKG0tPnRzYyk7Cit9CisKIC8qCiAgKiBMb2NrbGVzcyBNQ0UgbG9nZ2luZyBpbmZyYXN0cnVjdHVyZS4KICAqIFRoaXMgYXZvaWRzIGRlYWRsb2NrcyBvbiBwcmludGsgbG9ja3Mgd2l0aG91dCBoYXZpbmcgdG8gYnJlYWsgbG9ja3MuIEFsc28KQEAgLTExOSwxMSArMTM2LDExIEBACiAJCQlwcmludF9zeW1ib2woInslc30iLCBtLT5pcCk7CiAJCXByaW50aygiXG4iKTsKIAl9Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIlRTQyAlTHggIiwgbS0+dHNjKTsKKwlwcmludGsoS0VSTl9FTUVSRyAiVFNDICVsbHggIiwgbS0+dHNjKTsKIAlpZiAobS0+YWRkcikKLQkJcHJpbnRrKCJBRERSICVMeCAiLCBtLT5hZGRyKTsKKwkJcHJpbnRrKCJBRERSICVsbHggIiwgbS0+YWRkcik7CiAJaWYgKG0tPm1pc2MpCi0JCXByaW50aygiTUlTQyAlTHggIiwgbS0+bWlzYyk7CisJCXByaW50aygiTUlTQyAlbGx4ICIsIG0tPm1pc2MpOwogCXByaW50aygiXG4iKTsKIAlwcmludGsoS0VSTl9FTUVSRyAiVGhpcyBpcyBub3QgYSBzb2Z0d2FyZSBwcm9ibGVtIVxuIik7CiAJcHJpbnRrKEtFUk5fRU1FUkcgIlJ1biB0aHJvdWdoIG1jZWxvZyAtLWFzY2lpIHRvIGRlY29kZSAiCkBAIC0xNDksOCArMTY2LDEwIEBACiAJcGFuaWMobXNnKTsKIH0KIAotc3RhdGljIGludCBtY2VfYXZhaWxhYmxlKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK2ludCBtY2VfYXZhaWxhYmxlKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKKwlpZiAobWNlX2RvbnRfaW5pdCkKKwkJcmV0dXJuIDA7CiAJcmV0dXJuIGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfTUNFKSAmJiBjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX01DQSk7CiB9CiAKQEAgLTE3Miw3ICsxOTEsNzcgQEAKIH0KIAogLyoKLSAqIFRoZSBhY3R1YWwgbWFjaGluZSBjaGVjayBoYW5kbGVyCisgKiBQb2xsIGZvciBjb3JyZWN0ZWQgZXZlbnRzIG9yIGV2ZW50cyB0aGF0IGhhcHBlbmVkIGJlZm9yZSByZXNldC4KKyAqIFRob3NlIGFyZSBqdXN0IGxvZ2dlZCB0aHJvdWdoIC9kZXYvbWNlbG9nLgorICoKKyAqIFRoaXMgaXMgZXhlY3V0ZWQgaW4gc3RhbmRhcmQgaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK3ZvaWQgbWFjaGluZV9jaGVja19wb2xsKGVudW0gbWNwX2ZsYWdzIGZsYWdzLCBtY2VfYmFua3NfdCAqYikKK3sKKwlzdHJ1Y3QgbWNlIG07CisJaW50IGk7CisKKwltY2Vfc2V0dXAoJm0pOworCisJcmRtc3JsKE1TUl9JQTMyX01DR19TVEFUVVMsIG0ubWNnc3RhdHVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykgeworCQlpZiAoIWJhbmtbaV0gfHwgIXRlc3RfYml0KGksICpiKSkKKwkJCWNvbnRpbnVlOworCisJCW0ubWlzYyA9IDA7CisJCW0uYWRkciA9IDA7CisJCW0uYmFuayA9IGk7CisJCW0udHNjID0gMDsKKworCQliYXJyaWVyKCk7CisJCXJkbXNybChNU1JfSUEzMl9NQzBfU1RBVFVTICsgaSo0LCBtLnN0YXR1cyk7CisJCWlmICghKG0uc3RhdHVzICYgTUNJX1NUQVRVU19WQUwpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogVW5jb3JyZWN0ZWQgZXZlbnRzIGFyZSBoYW5kbGVkIGJ5IHRoZSBleGNlcHRpb24gaGFuZGxlcgorCQkgKiB3aGVuIGl0IGlzIGVuYWJsZWQuIEJ1dCB3aGVuIHRoZSBleGNlcHRpb24gaXMgZGlzYWJsZWQgbG9nCisJCSAqIGV2ZXJ5dGhpbmcuCisJCSAqCisJCSAqIFRCRCBkbyB0aGUgc2FtZSBjaGVjayBmb3IgTUNJX1NUQVRVU19FTiBoZXJlPworCQkgKi8KKwkJaWYgKChtLnN0YXR1cyAmIE1DSV9TVEFUVVNfVUMpICYmICEoZmxhZ3MgJiBNQ1BfVUMpKQorCQkJY29udGludWU7CisKKwkJaWYgKG0uc3RhdHVzICYgTUNJX1NUQVRVU19NSVNDVikKKwkJCXJkbXNybChNU1JfSUEzMl9NQzBfTUlTQyArIGkqNCwgbS5taXNjKTsKKwkJaWYgKG0uc3RhdHVzICYgTUNJX1NUQVRVU19BRERSVikKKwkJCXJkbXNybChNU1JfSUEzMl9NQzBfQUREUiArIGkqNCwgbS5hZGRyKTsKKworCQlpZiAoIShmbGFncyAmIE1DUF9USU1FU1RBTVApKQorCQkJbS50c2MgPSAwOworCQkvKgorCQkgKiBEb24ndCBnZXQgdGhlIElQIGhlcmUgYmVjYXVzZSBpdCdzIHVubGlrZWx5IHRvCisJCSAqIGhhdmUgYW55dGhpbmcgdG8gZG8gd2l0aCB0aGUgYWN0dWFsIGVycm9yIGxvY2F0aW9uLgorCQkgKi8KKworCQltY2VfbG9nKCZtKTsKKwkJYWRkX3RhaW50KFRBSU5UX01BQ0hJTkVfQ0hFQ0spOworCisJCS8qCisJCSAqIENsZWFyIHN0YXRlIGZvciB0aGlzIGJhbmsuCisJCSAqLworCQl3cm1zcmwoTVNSX0lBMzJfTUMwX1NUQVRVUys0KmksIDApOworCX0KKworCS8qCisJICogRG9uJ3QgY2xlYXIgTUNHX1NUQVRVUyBoZXJlIGJlY2F1c2UgaXQncyBvbmx5IGRlZmluZWQgZm9yCisJICogZXhjZXB0aW9ucy4KKwkgKi8KK30KKworLyoKKyAqIFRoZSBhY3R1YWwgbWFjaGluZSBjaGVjayBoYW5kbGVyLiBUaGlzIG9ubHkgaGFuZGxlcyByZWFsCisgKiBleGNlcHRpb25zIHdoZW4gc29tZXRoaW5nIGdvdCBjb3JydXB0ZWQgY29taW5nIGluIHRocm91Z2ggaW50IDE4LgorICoKKyAqIFRoaXMgaXMgZXhlY3V0ZWQgaW4gTk1JIGNvbnRleHQgbm90IHN1YmplY3QgdG8gbm9ybWFsIGxvY2tpbmcgcnVsZXMuIFRoaXMKKyAqIGltcGxpZXMgdGhhdCBtb3N0IGtlcm5lbCBzZXJ2aWNlcyBjYW5ub3QgYmUgc2FmZWx5IHVzZWQuIERvbid0IGV2ZW4KKyAqIHRoaW5rIGFib3V0IHB1dHRpbmcgYSBwcmludGsgaW4gdGhlcmUhCiAgKi8KIHZvaWQgZG9fbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIGxvbmcgZXJyb3JfY29kZSkKIHsKQEAgLTE5MCwxNyArMjc5LDE4IEBACiAJICogZXJyb3IuCiAJICovCiAJaW50IGtpbGxfaXQgPSAwOworCURFQ0xBUkVfQklUTUFQKHRvY2xlYXIsIE1BWF9OUl9CQU5LUyk7CiAKIAlhdG9taWNfaW5jKCZtY2VfZW50cnkpOwogCi0JaWYgKChyZWdzCi0JICAgICAmJiBub3RpZnlfZGllKERJRV9OTUksICJtYWNoaW5lIGNoZWNrIiwgcmVncywgZXJyb3JfY29kZSwKKwlpZiAobm90aWZ5X2RpZShESUVfTk1JLCAibWFjaGluZSBjaGVjayIsIHJlZ3MsIGVycm9yX2NvZGUsCiAJCQkgICAxOCwgU0lHS0lMTCkgPT0gTk9USUZZX1NUT1ApCi0JICAgIHx8ICFiYW5rcykKKwkJZ290byBvdXQyOworCWlmICghYmFua3MpCiAJCWdvdG8gb3V0MjsKIAotCW1lbXNldCgmbSwgMCwgc2l6ZW9mKHN0cnVjdCBtY2UpKTsKLQltLmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwltY2Vfc2V0dXAoJm0pOworCiAJcmRtc3JsKE1TUl9JQTMyX01DR19TVEFUVVMsIG0ubWNnc3RhdHVzKTsKIAkvKiBpZiB0aGUgcmVzdGFydCBJUCBpcyBub3QgdmFsaWQsIHdlJ3JlIGRvbmUgZm9yICovCiAJaWYgKCEobS5tY2dzdGF0dXMgJiBNQ0dfU1RBVFVTX1JJUFYpKQpAQCAtMjEwLDE4ICszMDAsMzIgQEAKIAliYXJyaWVyKCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykgewotCQlpZiAoaSA8IE5SX1NZU0ZTX0JBTktTICYmICFiYW5rW2ldKQorCQlfX2NsZWFyX2JpdChpLCB0b2NsZWFyKTsKKwkJaWYgKCFiYW5rW2ldKQogCQkJY29udGludWU7CiAKIAkJbS5taXNjID0gMDsKIAkJbS5hZGRyID0gMDsKIAkJbS5iYW5rID0gaTsKLQkJbS50c2MgPSAwOwogCiAJCXJkbXNybChNU1JfSUEzMl9NQzBfU1RBVFVTICsgaSo0LCBtLnN0YXR1cyk7CiAJCWlmICgobS5zdGF0dXMgJiBNQ0lfU1RBVFVTX1ZBTCkgPT0gMCkKIAkJCWNvbnRpbnVlOwogCisJCS8qCisJCSAqIE5vbiB1bmNvcnJlY3RlZCBlcnJvcnMgYXJlIGhhbmRsZWQgYnkgbWFjaGluZV9jaGVja19wb2xsCisJCSAqIExlYXZlIHRoZW0gYWxvbmUuCisJCSAqLworCQlpZiAoKG0uc3RhdHVzICYgTUNJX1NUQVRVU19VQykgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFNldCB0YWludCBldmVuIHdoZW4gbWFjaGluZSBjaGVjayB3YXMgbm90IGVuYWJsZWQuCisJCSAqLworCQlhZGRfdGFpbnQoVEFJTlRfTUFDSElORV9DSEVDSyk7CisKKwkJX19zZXRfYml0KGksIHRvY2xlYXIpOworCiAJCWlmIChtLnN0YXR1cyAmIE1DSV9TVEFUVVNfRU4pIHsKIAkJCS8qIGlmIFBDQyB3YXMgc2V0LCB0aGVyZSdzIG5vIHdheSBvdXQgKi8KIAkJCW5vX3dheV9vdXQgfD0gISEobS5zdGF0dXMgJiBNQ0lfU1RBVFVTX1BDQyk7CkBAIC0yMzUsNiArMzM5LDEyIEBACiAJCQkJCW5vX3dheV9vdXQgPSAxOwogCQkJCWtpbGxfaXQgPSAxOwogCQkJfQorCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIE1hY2hpbmUgY2hlY2sgZXZlbnQgd2FzIG5vdCBlbmFibGVkLiBDbGVhciwgYnV0CisJCQkgKiBpZ25vcmUuCisJCQkgKi8KKwkJCWNvbnRpbnVlOwogCQl9CiAKIAkJaWYgKG0uc3RhdHVzICYgTUNJX1NUQVRVU19NSVNDVikKQEAgLTI0MywxMCArMzUzLDcgQEAKIAkJCXJkbXNybChNU1JfSUEzMl9NQzBfQUREUiArIGkqNCwgbS5hZGRyKTsKIAogCQltY2VfZ2V0X3JpcCgmbSwgcmVncyk7Ci0JCWlmIChlcnJvcl9jb2RlID49IDApCi0JCQlyZHRzY2xsKG0udHNjKTsKLQkJaWYgKGVycm9yX2NvZGUgIT0gLTIpCi0JCQltY2VfbG9nKCZtKTsKKwkJbWNlX2xvZygmbSk7CiAKIAkJLyogRGlkIHRoaXMgYmFuayBjYXVzZSB0aGUgZXhjZXB0aW9uPyAqLwogCQkvKiBBc3N1bWUgdGhhdCB0aGUgYmFuayB3aXRoIHVuY29ycmVjdGFibGUgZXJyb3JzIGRpZCBpdCwKQEAgLTI1NSwxNCArMzYyLDggQEAKIAkJCXBhbmljbSA9IG07CiAJCQlwYW5pY21fZm91bmQgPSAxOwogCQl9Ci0KLQkJYWRkX3RhaW50KFRBSU5UX01BQ0hJTkVfQ0hFQ0spOwogCX0KIAotCS8qIE5ldmVyIGRvIGFueXRoaW5nIGZpbmFsIGluIHRoZSBwb2xsaW5nIHRpbWVyICovCi0JaWYgKCFyZWdzKQotCQlnb3RvIG91dDsKLQogCS8qIElmIHdlIGRpZG4ndCBmaW5kIGFuIHVuY29ycmVjdGFibGUgZXJyb3IsIHBpY2sKIAkgICB0aGUgbGFzdCBvbmUgKHNob3VsZG4ndCBoYXBwZW4sIGp1c3QgYmVpbmcgc2FmZSkuICovCiAJaWYgKCFwYW5pY21fZm91bmQpCkBAIC0zMDksMTAgKzQxMCwxMSBAQAogCS8qIG5vdGlmeSB1c2Vyc3BhY2UgQVNBUCAqLwogCXNldF90aHJlYWRfZmxhZyhUSUZfTUNFX05PVElGWSk7CiAKLSBvdXQ6CiAJLyogdGhlIGxhc3QgdGhpbmcgd2UgZG8gaXMgY2xlYXIgc3RhdGUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykKLQkJd3Jtc3JsKE1TUl9JQTMyX01DMF9TVEFUVVMrNCppLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykgeworCQlpZiAodGVzdF9iaXQoaSwgdG9jbGVhcikpCisJCQl3cm1zcmwoTVNSX0lBMzJfTUMwX1NUQVRVUys0KmksIDApOworCX0KIAl3cm1zcmwoTVNSX0lBMzJfTUNHX1NUQVRVUywgMCk7CiAgb3V0MjoKIAlhdG9taWNfZGVjKCZtY2VfZW50cnkpOwpAQCAtMzMyLDE1ICs0MzQsMTMgQEAKICAqIGFuZCBoaXN0b3JpY2FsbHkgaGFzIGJlZW4gdGhlIHJlZ2lzdGVyIHZhbHVlIG9mIHRoZQogICogTVNSX0lBMzJfVEhFUk1BTF9TVEFUVVMgKEludGVsKSBtc3IuCiAgKi8KLXZvaWQgbWNlX2xvZ190aGVybV90aHJvdF9ldmVudCh1bnNpZ25lZCBpbnQgY3B1LCBfX3U2NCBzdGF0dXMpCit2b2lkIG1jZV9sb2dfdGhlcm1fdGhyb3RfZXZlbnQoX191NjQgc3RhdHVzKQogewogCXN0cnVjdCBtY2UgbTsKIAotCW1lbXNldCgmbSwgMCwgc2l6ZW9mKG0pKTsKLQltLmNwdSA9IGNwdTsKKwltY2Vfc2V0dXAoJm0pOwogCW0uYmFuayA9IE1DRV9USEVSTUFMX0JBTks7CiAJbS5zdGF0dXMgPSBzdGF0dXM7Ci0JcmR0c2NsbChtLnRzYyk7CiAJbWNlX2xvZygmbSk7CiB9CiAjZW5kaWYgLyogQ09ORklHX1g4Nl9NQ0VfSU5URUwgKi8KQEAgLTM1MywxOCArNDUzLDE4IEBACiAKIHN0YXRpYyBpbnQgY2hlY2tfaW50ZXJ2YWwgPSA1ICogNjA7IC8qIDUgbWludXRlcyAqLwogc3RhdGljIGludCBuZXh0X2ludGVydmFsOyAvKiBpbiBqaWZmaWVzICovCi1zdGF0aWMgdm9pZCBtY2hlY2tfdGltZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXN0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhtY2hlY2tfd29yaywgbWNoZWNrX3RpbWVyKTsKK3N0YXRpYyB2b2lkIG1jaGVja190aW1lcih1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGltZXJfbGlzdCwgbWNlX3RpbWVyKTsKIAotc3RhdGljIHZvaWQgbWNoZWNrX2NoZWNrX2NwdSh2b2lkICppbmZvKQorc3RhdGljIHZvaWQgbWNoZWNrX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKKwlzdHJ1Y3QgdGltZXJfbGlzdCAqdCA9ICZwZXJfY3B1KG1jZV90aW1lciwgZGF0YSk7CisKKwlXQVJOX09OKHNtcF9wcm9jZXNzb3JfaWQoKSAhPSBkYXRhKTsKKwogCWlmIChtY2VfYXZhaWxhYmxlKCZjdXJyZW50X2NwdV9kYXRhKSkKLQkJZG9fbWFjaGluZV9jaGVjayhOVUxMLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgbWNoZWNrX3RpbWVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlvbl9lYWNoX2NwdShtY2hlY2tfY2hlY2tfY3B1LCBOVUxMLCAxKTsKKwkJbWFjaGluZV9jaGVja19wb2xsKE1DUF9USU1FU1RBTVAsCisJCQkJJl9fZ2V0X2NwdV92YXIobWNlX3BvbGxfYmFua3MpKTsKIAogCS8qCiAJICogQWxlcnQgdXNlcnNwYWNlIGlmIG5lZWRlZC4gIElmIHdlIGxvZ2dlZCBhbiBNQ0UsIHJlZHVjZSB0aGUKQEAgLTM3NywzMSArNDc3LDQxIEBACiAJCQkJKGludClyb3VuZF9qaWZmaWVzX3JlbGF0aXZlKGNoZWNrX2ludGVydmFsKkhaKSk7CiAJfQogCi0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZtY2hlY2tfd29yaywgbmV4dF9pbnRlcnZhbCk7CisJdC0+ZXhwaXJlcyA9IGppZmZpZXMgKyBuZXh0X2ludGVydmFsOworCWFkZF90aW1lcih0KTsKIH0KIAorc3RhdGljIHZvaWQgbWNlX2RvX3RyaWdnZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWNhbGxfdXNlcm1vZGVoZWxwZXIodHJpZ2dlciwgdHJpZ2dlcl9hcmd2LCBOVUxMLCBVTUhfTk9fV0FJVCk7Cit9CisKK3N0YXRpYyBERUNMQVJFX1dPUksobWNlX3RyaWdnZXJfd29yaywgbWNlX2RvX3RyaWdnZXIpOworCiAvKgotICogVGhpcyBpcyBvbmx5IGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dC4gIFRoaXMgaXMgd2hlcmUgd2UgZG8KLSAqIGFueXRoaW5nIHdlIG5lZWQgdG8gYWxlcnQgdXNlcnNwYWNlIGFib3V0IG5ldyBNQ0VzLiAgVGhpcyBpcyBjYWxsZWQKLSAqIGRpcmVjdGx5IGZyb20gdGhlIHBvbGxlciBhbmQgYWxzbyBmcm9tIGVudHJ5LlMgYW5kIGlkbGUsIHRoYW5rcyB0bwotICogVElGX01DRV9OT1RJRlkuCisgKiBOb3RpZnkgdGhlIHVzZXIocykgYWJvdXQgbmV3IG1hY2hpbmUgY2hlY2sgZXZlbnRzLgorICogQ2FuIGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LCBidXQgbm90IGZyb20gbWFjaGluZSBjaGVjay9OTUkKKyAqIGNvbnRleHQuCiAgKi8KIGludCBtY2Vfbm90aWZ5X3VzZXIodm9pZCkKIHsKKwkvKiBOb3QgbW9yZSB0aGFuIHR3byBtZXNzYWdlcyBldmVyeSBtaW51dGUgKi8KKwlzdGF0aWMgREVGSU5FX1JBVEVMSU1JVF9TVEFURShyYXRlbGltaXQsIDYwKkhaLCAyKTsKKwogCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9NQ0VfTk9USUZZKTsKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KDAsICZub3RpZnlfdXNlcikpIHsKLQkJc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9wcmludDsKLQkJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwotCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbWNlX3dhaXQpOwotCQlpZiAodHJpZ2dlclswXSkKLQkJCWNhbGxfdXNlcm1vZGVoZWxwZXIodHJpZ2dlciwgdHJpZ2dlcl9hcmd2LCBOVUxMLAotCQkJCQkJVU1IX05PX1dBSVQpOwogCi0JCWlmICh0aW1lX2FmdGVyX2VxKG5vdywgbGFzdF9wcmludCArIChjaGVja19pbnRlcnZhbCpIWikpKSB7Ci0JCQlsYXN0X3ByaW50ID0gbm93OworCQkvKgorCQkgKiBUaGVyZSBpcyBubyByaXNrIG9mIG1pc3Npbmcgbm90aWZpY2F0aW9ucyBiZWNhdXNlCisJCSAqIHdvcmtfcGVuZGluZyBpcyBhbHdheXMgY2xlYXJlZCBiZWZvcmUgdGhlIGZ1bmN0aW9uIGlzCisJCSAqIGV4ZWN1dGVkLgorCQkgKi8KKwkJaWYgKHRyaWdnZXJbMF0gJiYgIXdvcmtfcGVuZGluZygmbWNlX3RyaWdnZXJfd29yaykpCisJCQlzY2hlZHVsZV93b3JrKCZtY2VfdHJpZ2dlcl93b3JrKTsKKworCQlpZiAoX19yYXRlbGltaXQoJnJhdGVsaW1pdCkpCiAJCQlwcmludGsoS0VSTl9JTkZPICJNYWNoaW5lIGNoZWNrIGV2ZW50cyBsb2dnZWRcbiIpOwotCQl9CiAKIAkJcmV0dXJuIDE7CiAJfQpAQCAtNDI1LDYzICs1MzUsNzggQEAKIAogc3RhdGljIF9faW5pdCBpbnQgcGVyaW9kaWNfbWNoZWNrX2luaXQodm9pZCkKIHsKLQluZXh0X2ludGVydmFsID0gY2hlY2tfaW50ZXJ2YWwgKiBIWjsKLQlpZiAobmV4dF9pbnRlcnZhbCkKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZtY2hlY2tfd29yaywKLQkJCQkgICAgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKG5leHRfaW50ZXJ2YWwpKTsKLQlpZGxlX25vdGlmaWVyX3JlZ2lzdGVyKCZtY2VfaWRsZV9ub3RpZmllcik7Ci0JcmV0dXJuIDA7CisgICAgICAgaWRsZV9ub3RpZmllcl9yZWdpc3RlcigmbWNlX2lkbGVfbm90aWZpZXIpOworICAgICAgIHJldHVybiAwOwogfQogX19pbml0Y2FsbChwZXJpb2RpY19tY2hlY2tfaW5pdCk7CiAKLQogLyoKICAqIEluaXRpYWxpemUgTWFjaGluZSBDaGVja3MgZm9yIGEgQ1BVLgogICovCi1zdGF0aWMgdm9pZCBtY2VfaW5pdCh2b2lkICpkdW1teSkKK3N0YXRpYyBpbnQgbWNlX2NhcF9pbml0KHZvaWQpCiB7CiAJdTY0IGNhcDsKLQlpbnQgaTsKKwl1bnNpZ25lZCBiOwogCiAJcmRtc3JsKE1TUl9JQTMyX01DR19DQVAsIGNhcCk7Ci0JYmFua3MgPSBjYXAgJiAweGZmOwotCWlmIChiYW5rcyA+IE1DRV9FWFRFTkRFRF9CQU5LKSB7Ci0JCWJhbmtzID0gTUNFX0VYVEVOREVEX0JBTks7Ci0JCXByaW50ayhLRVJOX0lORk8gIk1DRTogd2FybmluZzogdXNpbmcgb25seSAlZCBiYW5rc1xuIiwKLQkJICAgICAgIE1DRV9FWFRFTkRFRF9CQU5LKTsKKwliID0gY2FwICYgMHhmZjsKKwlpZiAoYiA+IE1BWF9OUl9CQU5LUykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiTUNFOiBVc2luZyBvbmx5ICV1IG1hY2hpbmUgY2hlY2sgYmFua3Mgb3V0IG9mICV1XG4iLAorCQkJTUFYX05SX0JBTktTLCBiKTsKKwkJYiA9IE1BWF9OUl9CQU5LUzsKIAl9CisKKwkvKiBEb24ndCBzdXBwb3J0IGFzeW1tZXRyaWMgY29uZmlndXJhdGlvbnMgdG9kYXkgKi8KKwlXQVJOX09OKGJhbmtzICE9IDAgJiYgYiAhPSBiYW5rcyk7CisJYmFua3MgPSBiOworCWlmICghYmFuaykgeworCQliYW5rID0ga21hbGxvYyhiYW5rcyAqIHNpemVvZih1NjQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFiYW5rKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCW1lbXNldChiYW5rLCAweGZmLCBiYW5rcyAqIHNpemVvZih1NjQpKTsKKwl9CisKIAkvKiBVc2UgYWNjdXJhdGUgUklQIHJlcG9ydGluZyBpZiBhdmFpbGFibGUuICovCiAJaWYgKChjYXAgJiAoMTw8OSkpICYmICgoY2FwID4+IDE2KSAmIDB4ZmYpID49IDkpCiAJCXJpcF9tc3IgPSBNU1JfSUEzMl9NQ0dfRUlQOwogCi0JLyogTG9nIHRoZSBtYWNoaW5lIGNoZWNrcyBsZWZ0IG92ZXIgZnJvbSB0aGUgcHJldmlvdXMgcmVzZXQuCi0JICAgVGhpcyBhbHNvIGNsZWFycyBhbGwgcmVnaXN0ZXJzICovCi0JZG9fbWFjaGluZV9jaGVjayhOVUxMLCBtY2VfYm9vdGxvZyA/IC0xIDogLTIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtY2VfaW5pdCh2b2lkICpkdW1teSkKK3sKKwl1NjQgY2FwOworCWludCBpOworCW1jZV9iYW5rc190IGFsbF9iYW5rczsKKworCS8qCisJICogTG9nIHRoZSBtYWNoaW5lIGNoZWNrcyBsZWZ0IG92ZXIgZnJvbSB0aGUgcHJldmlvdXMgcmVzZXQuCisJICovCisJYml0bWFwX2ZpbGwoYWxsX2JhbmtzLCBNQVhfTlJfQkFOS1MpOworCW1hY2hpbmVfY2hlY2tfcG9sbChNQ1BfVUMsICZhbGxfYmFua3MpOwogCiAJc2V0X2luX2NyNChYODZfQ1I0X01DRSk7CiAKKwlyZG1zcmwoTVNSX0lBMzJfTUNHX0NBUCwgY2FwKTsKIAlpZiAoY2FwICYgTUNHX0NUTF9QKQogCQl3cm1zcihNU1JfSUEzMl9NQ0dfQ1RMLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmKTsKIAogCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7Ci0JCWlmIChpIDwgTlJfU1lTRlNfQkFOS1MpCi0JCQl3cm1zcmwoTVNSX0lBMzJfTUMwX0NUTCs0KmksIGJhbmtbaV0pOwotCQllbHNlCi0JCQl3cm1zcmwoTVNSX0lBMzJfTUMwX0NUTCs0KmksIH4wVUwpOwotCisJCXdybXNybChNU1JfSUEzMl9NQzBfQ1RMKzQqaSwgYmFua1tpXSk7CiAJCXdybXNybChNU1JfSUEzMl9NQzBfU1RBVFVTKzQqaSwgMCk7CiAJfQogfQogCiAvKiBBZGQgcGVyIENQVSBzcGVjaWZpYyB3b3JrYXJvdW5kcyBoZXJlICovCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgbWNlX2NwdV9xdWlya3Moc3RydWN0IGNwdWluZm9feDg2ICpjKQorc3RhdGljIHZvaWQgbWNlX2NwdV9xdWlya3Moc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCS8qIFRoaXMgc2hvdWxkIGJlIGRpc2FibGVkIGJ5IHRoZSBCSU9TLCBidXQgaXNuJ3QgYWx3YXlzICovCiAJaWYgKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpIHsKLQkJaWYoYy0+eDg2ID09IDE1KQorCQlpZiAoYy0+eDg2ID09IDE1ICYmIGJhbmtzID4gNCkKIAkJCS8qIGRpc2FibGUgR0FSVCBUQkwgd2FsayBlcnJvciByZXBvcnRpbmcsIHdoaWNoIHRyaXBzIG9mZgogCQkJICAgaW5jb3JyZWN0bHkgd2l0aCB0aGUgSU9NTVUgJiAzd2FyZSAmIENlcmJlcnVzLiAqLwotCQkJY2xlYXJfYml0KDEwLCAmYmFua1s0XSk7CisJCQljbGVhcl9iaXQoMTAsICh1bnNpZ25lZCBsb25nICopJmJhbmtbNF0pOwogCQlpZihjLT54ODYgPD0gMTcgJiYgbWNlX2Jvb3Rsb2cgPCAwKQogCQkJLyogTG90cyBvZiBicm9rZW4gQklPUyBhcm91bmQgdGhhdCBkb24ndCBjbGVhciB0aGVtCiAJCQkgICBieSBkZWZhdWx0IGFuZCBsZWF2ZSBjcmFwIGluIHRoZXJlLiBEb24ndCBsb2cuICovCkBAIC01MDQsMjAgKzYyOSwzOCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgbWNlX2luaXRfdGltZXIodm9pZCkKK3sKKwlzdHJ1Y3QgdGltZXJfbGlzdCAqdCA9ICZfX2dldF9jcHVfdmFyKG1jZV90aW1lcik7CisKKwkvKiBkYXRhIHJhY2UgaGFybWxlc3MgYmVjYXVzZSBldmVyeW9uZSBzZXRzIHRvIHRoZSBzYW1lIHZhbHVlICovCisJaWYgKCFuZXh0X2ludGVydmFsKQorCQluZXh0X2ludGVydmFsID0gY2hlY2tfaW50ZXJ2YWwgKiBIWjsKKwlpZiAoIW5leHRfaW50ZXJ2YWwpCisJCXJldHVybjsKKwlzZXR1cF90aW1lcih0LCBtY2hlY2tfdGltZXIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJdC0+ZXhwaXJlcyA9IHJvdW5kX2ppZmZpZXMoamlmZmllcyArIG5leHRfaW50ZXJ2YWwpOworCWFkZF90aW1lcih0KTsKK30KKwogLyoKICAqIENhbGxlZCBmb3IgZWFjaCBib290ZWQgQ1BVIHRvIHNldCB1cCBtYWNoaW5lIGNoZWNrcy4KICAqIE11c3QgYmUgY2FsbGVkIHdpdGggcHJlZW1wdCBvZmYuCiAgKi8KIHZvaWQgX19jcHVpbml0IG1jaGVja19pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKLQltY2VfY3B1X3F1aXJrcyhjKTsKLQotCWlmIChtY2VfZG9udF9pbml0IHx8Ci0JICAgICFtY2VfYXZhaWxhYmxlKGMpKQorCWlmICghbWNlX2F2YWlsYWJsZShjKSkKIAkJcmV0dXJuOwogCisJaWYgKG1jZV9jYXBfaW5pdCgpIDwgMCkgeworCQltY2VfZG9udF9pbml0ID0gMTsKKwkJcmV0dXJuOworCX0KKwltY2VfY3B1X3F1aXJrcyhjKTsKKwogCW1jZV9pbml0KE5VTEwpOwogCW1jZV9jcHVfZmVhdHVyZXMoYyk7CisJbWNlX2luaXRfdGltZXIoKTsKIH0KIAogLyoKQEAgLTU3Myw3ICs3MTYsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgKmNwdV90c2M7CiAJc3RhdGljIERFRklORV9NVVRFWChtY2VfcmVhZF9tdXRleCk7Ci0JdW5zaWduZWQgbmV4dDsKKwl1bnNpZ25lZCBwcmV2LCBuZXh0OwogCWNoYXIgX191c2VyICpidWYgPSB1YnVmOwogCWludCBpLCBlcnI7CiAKQEAgLTU5MiwyNSArNzM1LDMyIEBACiAJfQogCiAJZXJyID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgbmV4dDsgaSsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzOworCXByZXYgPSAwOworCWRvIHsKKwkJZm9yIChpID0gcHJldjsgaSA8IG5leHQ7IGkrKykgeworCQkJdW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7CiAKLQkJd2hpbGUgKCFtY2Vsb2cuZW50cnlbaV0uZmluaXNoZWQpIHsKLQkJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHN0YXJ0ICsgMikpIHsKLQkJCQltZW1zZXQobWNlbG9nLmVudHJ5ICsgaSwwLCBzaXplb2Yoc3RydWN0IG1jZSkpOwotCQkJCWdvdG8gdGltZW91dDsKKwkJCXdoaWxlICghbWNlbG9nLmVudHJ5W2ldLmZpbmlzaGVkKSB7CisJCQkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgc3RhcnQgKyAyKSkgeworCQkJCQltZW1zZXQobWNlbG9nLmVudHJ5ICsgaSwgMCwKKwkJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgbWNlKSk7CisJCQkJCWdvdG8gdGltZW91dDsKKwkJCQl9CisJCQkJY3B1X3JlbGF4KCk7CiAJCQl9Ci0JCQljcHVfcmVsYXgoKTsKKwkJCXNtcF9ybWIoKTsKKwkJCWVyciB8PSBjb3B5X3RvX3VzZXIoYnVmLCBtY2Vsb2cuZW50cnkgKyBpLAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBtY2UpKTsKKwkJCWJ1ZiArPSBzaXplb2Yoc3RydWN0IG1jZSk7Cit0aW1lb3V0OgorCQkJOwogCQl9Ci0JCXNtcF9ybWIoKTsKLQkJZXJyIHw9IGNvcHlfdG9fdXNlcihidWYsIG1jZWxvZy5lbnRyeSArIGksIHNpemVvZihzdHJ1Y3QgbWNlKSk7Ci0JCWJ1ZiArPSBzaXplb2Yoc3RydWN0IG1jZSk7Ci0gdGltZW91dDoKLQkJOwotCX0KIAotCW1lbXNldChtY2Vsb2cuZW50cnksIDAsIG5leHQgKiBzaXplb2Yoc3RydWN0IG1jZSkpOwotCW1jZWxvZy5uZXh0ID0gMDsKKwkJbWVtc2V0KG1jZWxvZy5lbnRyeSArIHByZXYsIDAsCisJCSAgICAgICAobmV4dCAtIHByZXYpICogc2l6ZW9mKHN0cnVjdCBtY2UpKTsKKwkJcHJldiA9IG5leHQ7CisJCW5leHQgPSBjbXB4Y2hnKCZtY2Vsb2cubmV4dCwgcHJldiwgMCk7CisJfSB3aGlsZSAobmV4dCAhPSBwcmV2KTsKIAogCXN5bmNocm9uaXplX3NjaGVkKCk7CiAKQEAgLTY4MCwyMCArODMwLDYgQEAKIAkmbWNlX2NocmRldl9vcHMsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBvbGRfY3I0IF9faW5pdGRhdGE7Ci0KLXZvaWQgX19pbml0IHN0b3BfbWNlKHZvaWQpCi17Ci0Jb2xkX2NyNCA9IHJlYWRfY3I0KCk7Ci0JY2xlYXJfaW5fY3I0KFg4Nl9DUjRfTUNFKTsKLX0KLQotdm9pZCBfX2luaXQgcmVzdGFydF9tY2Uodm9pZCkKLXsKLQlpZiAob2xkX2NyNCAmIFg4Nl9DUjRfTUNFKQotCQlzZXRfaW5fY3I0KFg4Nl9DUjRfTUNFKTsKLX0KLQogLyoKICAqIE9sZCBzdHlsZSBib290IG9wdGlvbnMgcGFyc2luZy4gT25seSBmb3IgY29tcGF0aWJpbGl0eS4KICAqLwpAQCAtNzAzLDggKzgzOSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLS8qIG1jZT1vZmYgZGlzYWJsZXMgbWFjaGluZSBjaGVjay4gTm90ZSB5b3UgY2FuIHJlLWVuYWJsZSBpdCBsYXRlcgotICAgdXNpbmcgc3lzZnMuCisvKiBtY2U9b2ZmIGRpc2FibGVzIG1hY2hpbmUgY2hlY2suCiAgICBtY2U9VE9MRVJBTkNFTEVWRUwgKG51bWJlciwgc2VlIGFib3ZlKQogICAgbWNlPWJvb3Rsb2cgTG9nIE1DRXMgZnJvbSBiZWZvcmUgYm9vdGluZy4gRGlzYWJsZWQgYnkgZGVmYXVsdCBvbiBBTUQuCiAgICBtY2U9bm9ib290bG9nIERvbid0IGxvZyBNQ0VzIGZyb20gYmVmb3JlIGJvb3RpbmcuICovCkBAIC03MjgsNiArODYzLDI5IEBACiAgKiBTeXNmcyBzdXBwb3J0CiAgKi8KIAorLyoKKyAqIERpc2FibGUgbWFjaGluZSBjaGVja3Mgb24gc3VzcGVuZCBhbmQgc2h1dGRvd24uIFdlIGNhbid0IHJlYWxseSBoYW5kbGUKKyAqIHRoZW0gbGF0ZXIuCisgKi8KK3N0YXRpYyBpbnQgbWNlX2Rpc2FibGUodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKQorCQl3cm1zcmwoTVNSX0lBMzJfTUMwX0NUTCArIGkqNCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWNlX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXJldHVybiBtY2VfZGlzYWJsZSgpOworfQorCitzdGF0aWMgaW50IG1jZV9zaHV0ZG93bihzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCXJldHVybiBtY2VfZGlzYWJsZSgpOworfQorCiAvKiBPbiByZXN1bWUgY2xlYXIgYWxsIE1DRSBzdGF0ZS4gRG9uJ3Qgd2FudCB0byBzZWUgbGVmdG92ZXJzIGZyb20gdGhlIEJJT1MuCiAgICBPbmx5IG9uZSBDUFUgaXMgYWN0aXZlIGF0IHRoaXMgdGltZSwgdGhlIG90aGVycyBnZXQgcmVhZGRlZCBsYXRlciB1c2luZwogICAgQ1BVIGhvdHBsdWcuICovCkBAIC03MzgsMjAgKzg5NiwyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBtY2VfY3B1X3Jlc3RhcnQodm9pZCAqZGF0YSkKK3sKKwlkZWxfdGltZXJfc3luYygmX19nZXRfY3B1X3ZhcihtY2VfdGltZXIpKTsKKwlpZiAobWNlX2F2YWlsYWJsZSgmY3VycmVudF9jcHVfZGF0YSkpCisJCW1jZV9pbml0KE5VTEwpOworCW1jZV9pbml0X3RpbWVyKCk7Cit9CisKIC8qIFJlaW5pdCBNQ0VzIGFmdGVyIHVzZXIgY29uZmlndXJhdGlvbiBjaGFuZ2VzICovCiBzdGF0aWMgdm9pZCBtY2VfcmVzdGFydCh2b2lkKQogewotCWlmIChuZXh0X2ludGVydmFsKQotCQljYW5jZWxfZGVsYXllZF93b3JrKCZtY2hlY2tfd29yayk7Ci0JLyogVGltZXIgcmFjZSBpcyBoYXJtbGVzcyBoZXJlICovCi0Jb25fZWFjaF9jcHUobWNlX2luaXQsIE5VTEwsIDEpOwogCW5leHRfaW50ZXJ2YWwgPSBjaGVja19pbnRlcnZhbCAqIEhaOwotCWlmIChuZXh0X2ludGVydmFsKQotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm1jaGVja193b3JrLAotCQkJCSAgICAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUobmV4dF9pbnRlcnZhbCkpOworCW9uX2VhY2hfY3B1KG1jZV9jcHVfcmVzdGFydCwgTlVMTCwgMSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIG1jZV9zeXNjbGFzcyA9IHsKKwkuc3VzcGVuZCA9IG1jZV9zdXNwZW5kLAorCS5zaHV0ZG93biA9IG1jZV9zaHV0ZG93biwKIAkucmVzdW1lID0gbWNlX3Jlc3VtZSwKIAkubmFtZSA9ICJtYWNoaW5lY2hlY2siLAogfTsKQEAgLTc3OCwxNiArOTQwLDI2IEBACiAJfQkJCQkJCQkJXAogCXN0YXRpYyBTWVNERVZfQVRUUihuYW1lLCAwNjQ0LCBzaG93XyAjIyBuYW1lLCBzZXRfICMjIG5hbWUpOwogCi0vKgotICogVEJEIHNob3VsZCBnZW5lcmF0ZSB0aGVzZSBkeW5hbWljYWxseSBiYXNlZCBvbiBudW1iZXIgb2YgYXZhaWxhYmxlIGJhbmtzLgotICogSGF2ZSBvbmx5IDYgY29udG9sIGJhbmtzIGluIC9zeXNmcyB1bnRpbCB0aGVuLgotICovCi1BQ0NFU1NPUihiYW5rMGN0bCxiYW5rWzBdLG1jZV9yZXN0YXJ0KCkpCi1BQ0NFU1NPUihiYW5rMWN0bCxiYW5rWzFdLG1jZV9yZXN0YXJ0KCkpCi1BQ0NFU1NPUihiYW5rMmN0bCxiYW5rWzJdLG1jZV9yZXN0YXJ0KCkpCi1BQ0NFU1NPUihiYW5rM2N0bCxiYW5rWzNdLG1jZV9yZXN0YXJ0KCkpCi1BQ0NFU1NPUihiYW5rNGN0bCxiYW5rWzRdLG1jZV9yZXN0YXJ0KCkpCi1BQ0NFU1NPUihiYW5rNWN0bCxiYW5rWzVdLG1jZV9yZXN0YXJ0KCkpCitzdGF0aWMgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmJhbmtfYXR0cnM7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYmFuayhzdHJ1Y3Qgc3lzX2RldmljZSAqcywgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY2hhciAqYnVmKQoreworCXU2NCBiID0gYmFua1thdHRyIC0gYmFua19hdHRyc107CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxseFxuIiwgYik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9iYW5rKHN0cnVjdCBzeXNfZGV2aWNlICpzLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpeikKK3sKKwljaGFyICplbmQ7CisJdTY0IG5ldyA9IHNpbXBsZV9zdHJ0b3VsbChidWYsICZlbmQsIDApOworCWlmIChlbmQgPT0gYnVmKQorCQlyZXR1cm4gLUVJTlZBTDsKKwliYW5rW2F0dHIgLSBiYW5rX2F0dHJzXSA9IG5ldzsKKwltY2VfcmVzdGFydCgpOworCXJldHVybiBlbmQtYnVmOworfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X3RyaWdnZXIoc3RydWN0IHN5c19kZXZpY2UgKnMsIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAogCQkJCWNoYXIgKmJ1ZikKQEAgLTgxNCw4ICs5ODYsNiBAQAogc3RhdGljIFNZU0RFVl9JTlRfQVRUUih0b2xlcmFudCwgMDY0NCwgdG9sZXJhbnQpOwogQUNDRVNTT1IoY2hlY2tfaW50ZXJ2YWwsY2hlY2tfaW50ZXJ2YWwsbWNlX3Jlc3RhcnQoKSkKIHN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqbWNlX2F0dHJpYnV0ZXNbXSA9IHsKLQkmYXR0cl9iYW5rMGN0bCwgJmF0dHJfYmFuazFjdGwsICZhdHRyX2JhbmsyY3RsLAotCSZhdHRyX2JhbmszY3RsLCAmYXR0cl9iYW5rNGN0bCwgJmF0dHJfYmFuazVjdGwsCiAJJmF0dHJfdG9sZXJhbnQuYXR0ciwgJmF0dHJfY2hlY2tfaW50ZXJ2YWwsICZhdHRyX3RyaWdnZXIsCiAJTlVMTAogfTsKQEAgLTg0NSwxMSArMTAxNSwyMiBAQAogCQlpZiAoZXJyKQogCQkJZ290byBlcnJvcjsKIAl9CisJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspIHsKKwkJZXJyID0gc3lzZGV2X2NyZWF0ZV9maWxlKCZwZXJfY3B1KGRldmljZV9tY2UsIGNwdSksCisJCQkJCSZiYW5rX2F0dHJzW2ldKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyb3IyOworCX0KIAljcHVfc2V0KGNwdSwgbWNlX2RldmljZV9pbml0aWFsaXplZCk7CiAKIAlyZXR1cm4gMDsKK2Vycm9yMjoKKwl3aGlsZSAoLS1pID49IDApIHsKKwkJc3lzZGV2X3JlbW92ZV9maWxlKCZwZXJfY3B1KGRldmljZV9tY2UsIGNwdSksCisJCQkJCSZiYW5rX2F0dHJzW2ldKTsKKwl9CiBlcnJvcjoKLQl3aGlsZSAoaS0tKSB7CisJd2hpbGUgKC0taSA+PSAwKSB7CiAJCXN5c2Rldl9yZW1vdmVfZmlsZSgmcGVyX2NwdShkZXZpY2VfbWNlLGNwdSksCiAJCQkJICAgbWNlX2F0dHJpYnV0ZXNbaV0pOwogCX0KQEAgLTg2OCwxNSArMTA0OSw0NiBAQAogCWZvciAoaSA9IDA7IG1jZV9hdHRyaWJ1dGVzW2ldOyBpKyspCiAJCXN5c2Rldl9yZW1vdmVfZmlsZSgmcGVyX2NwdShkZXZpY2VfbWNlLGNwdSksCiAJCQltY2VfYXR0cmlidXRlc1tpXSk7CisJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspCisJCXN5c2Rldl9yZW1vdmVfZmlsZSgmcGVyX2NwdShkZXZpY2VfbWNlLCBjcHUpLAorCQkJJmJhbmtfYXR0cnNbaV0pOwogCXN5c2Rldl91bnJlZ2lzdGVyKCZwZXJfY3B1KGRldmljZV9tY2UsY3B1KSk7CiAJY3B1X2NsZWFyKGNwdSwgbWNlX2RldmljZV9pbml0aWFsaXplZCk7CiB9CiAKKy8qIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gbWFjaGluZSBjaGVja3Mgb24gb2ZmbGluZWQgQ1BVcy4gKi8KK3N0YXRpYyB2b2lkIG1jZV9kaXNhYmxlX2NwdSh2b2lkICpoKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgYWN0aW9uID0gKih1bnNpZ25lZCBsb25nICopaDsKKworCWlmICghbWNlX2F2YWlsYWJsZSgmY3VycmVudF9jcHVfZGF0YSkpCisJCXJldHVybjsKKwlpZiAoIShhY3Rpb24gJiBDUFVfVEFTS1NfRlJPWkVOKSkKKwkJY21jaV9jbGVhcigpOworCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKQorCQl3cm1zcmwoTVNSX0lBMzJfTUMwX0NUTCArIGkqNCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIG1jZV9yZWVuYWJsZV9jcHUodm9pZCAqaCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGFjdGlvbiA9ICoodW5zaWduZWQgbG9uZyAqKWg7CisKKwlpZiAoIW1jZV9hdmFpbGFibGUoJmN1cnJlbnRfY3B1X2RhdGEpKQorCQlyZXR1cm47CisJaWYgKCEoYWN0aW9uICYgQ1BVX1RBU0tTX0ZST1pFTikpCisJCWNtY2lfcmVlbmFibGUoKTsKKwlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykKKwkJd3Jtc3JsKE1TUl9JQTMyX01DMF9DVEwgKyBpKjQsIGJhbmtbaV0pOworfQorCiAvKiBHZXQgbm90aWZpZWQgd2hlbiBhIGNwdSBjb21lcyBvbi9vZmYuIEJlIGhvdHBsdWcgZnJpZW5kbHkuICovCiBzdGF0aWMgaW50IF9fY3B1aW5pdCBtY2VfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewogCXVuc2lnbmVkIGludCBjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OworCXN0cnVjdCB0aW1lcl9saXN0ICp0ID0gJnBlcl9jcHUobWNlX3RpbWVyLCBjcHUpOwogCiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIENQVV9PTkxJTkU6CkBAIC04OTEsNiArMTEwMywyMSBAQAogCQkJdGhyZXNob2xkX2NwdV9jYWxsYmFjayhhY3Rpb24sIGNwdSk7CiAJCW1jZV9yZW1vdmVfZGV2aWNlKGNwdSk7CiAJCWJyZWFrOworCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwljYXNlIENQVV9ET1dOX1BSRVBBUkVfRlJPWkVOOgorCQlkZWxfdGltZXJfc3luYyh0KTsKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgbWNlX2Rpc2FibGVfY3B1LCAmYWN0aW9uLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfRE9XTl9GQUlMRUQ6CisJY2FzZSBDUFVfRE9XTl9GQUlMRURfRlJPWkVOOgorCQl0LT5leHBpcmVzID0gcm91bmRfamlmZmllcyhqaWZmaWVzICsgbmV4dF9pbnRlcnZhbCk7CisJCWFkZF90aW1lcl9vbih0LCBjcHUpOworCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBtY2VfcmVlbmFibGVfY3B1LCAmYWN0aW9uLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfUE9TVF9ERUFEOgorCQkvKiBpbnRlbnRpb25hbGx5IGlnbm9yaW5nIGZyb3plbiBoZXJlICovCisJCWNtY2lfcmVkaXNjb3ZlcihjcHUpOworCQlicmVhazsKIAl9CiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KQEAgLTg5OSw2ICsxMTI2LDM0IEBACiAJLm5vdGlmaWVyX2NhbGwgPSBtY2VfY3B1X2NhbGxiYWNrLAogfTsKIAorc3RhdGljIF9faW5pdCBpbnQgbWNlX2luaXRfYmFua3Modm9pZCkKK3sKKwlpbnQgaTsKKworCWJhbmtfYXR0cnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSkgKiBiYW5rcywKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWJhbmtfYXR0cnMpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspIHsKKwkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmEgPSAmYmFua19hdHRyc1tpXTsKKwkJYS0+YXR0ci5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJiYW5rJWQiLCBpKTsKKwkJaWYgKCFhLT5hdHRyLm5hbWUpCisJCQlnb3RvIG5vbWVtOworCQlhLT5hdHRyLm1vZGUgPSAwNjQ0OworCQlhLT5zaG93ID0gc2hvd19iYW5rOworCQlhLT5zdG9yZSA9IHNldF9iYW5rOworCX0KKwlyZXR1cm4gMDsKKworbm9tZW06CisJd2hpbGUgKC0taSA+PSAwKQorCQlrZnJlZShiYW5rX2F0dHJzW2ldLmF0dHIubmFtZSk7CisJa2ZyZWUoYmFua19hdHRycyk7CisJYmFua19hdHRycyA9IE5VTEw7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKIHN0YXRpYyBfX2luaXQgaW50IG1jZV9pbml0X2RldmljZSh2b2lkKQogewogCWludCBlcnI7CkBAIC05MDYsNiArMTE2MSwxMSBAQAogCiAJaWYgKCFtY2VfYXZhaWxhYmxlKCZib290X2NwdV9kYXRhKSkKIAkJcmV0dXJuIC1FSU87CisKKwllcnIgPSBtY2VfaW5pdF9iYW5rcygpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKIAllcnIgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJm1jZV9zeXNjbGFzcyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWRfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWRfNjQuYwppbmRleCA5ODE3NTA2Li43ZDAxYmU4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZF82NC5jCkBAIC03OSw2ICs3OSw4IEBACiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBjaGFyLCBiYW5rX21hcCk7CS8qIHNlZSB3aGljaCBiYW5rcyBhcmUgb24gKi8KIAorc3RhdGljIHZvaWQgYW1kX3RocmVzaG9sZF9pbnRlcnJ1cHQodm9pZCk7CisKIC8qCiAgKiBDUFUgSW5pdGlhbGl6YXRpb24KICAqLwpAQCAtOTAsNyArOTIsOCBAQAogfTsKIAogLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBjb3JyZWN0IGNwdSBhZmZpbml0eSAqLwotc3RhdGljIGxvbmcgdGhyZXNob2xkX3Jlc3RhcnRfYmFuayh2b2lkICpfdHIpCisvKiBDYWxsZWQgdmlhIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSgpICovCitzdGF0aWMgdm9pZCB0aHJlc2hvbGRfcmVzdGFydF9iYW5rKHZvaWQgKl90cikKIHsKIAlzdHJ1Y3QgdGhyZXNoX3Jlc3RhcnQgKnRyID0gX3RyOwogCXUzMiBtY2lfbWlzY19oaSwgbWNpX21pc2NfbG87CkBAIC0xMTcsNyArMTIwLDYgQEAKIAogCW1jaV9taXNjX2hpIHw9IE1BU0tfQ09VTlRfRU5fSEk7CiAJd3Jtc3IodHItPmItPmFkZHJlc3MsIG1jaV9taXNjX2xvLCBtY2lfbWlzY19oaSk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qIGNwdSBpbml0IGVudHJ5IHBvaW50LCBjYWxsZWQgZnJvbSBtY2UuYyB3aXRoIHByZWVtcHQgb2ZmICovCkBAIC0xNzQsNiArMTc2LDggQEAKIAkJCXRyLnJlc2V0ID0gMDsKIAkJCXRyLm9sZF9saW1pdCA9IDA7CiAJCQl0aHJlc2hvbGRfcmVzdGFydF9iYW5rKCZ0cik7CisKKwkJCW1jZV90aHJlc2hvbGRfdmVjdG9yID0gYW1kX3RocmVzaG9sZF9pbnRlcnJ1cHQ7CiAJCX0KIAl9CiB9CkBAIC0xODcsMTkgKzE5MSwxMyBAQAogICogdGhlIGludGVycnVwdCBnb2VzIG9mZiB3aGVuIGVycm9yX2NvdW50IHJlYWNoZXMgdGhyZXNob2xkX2xpbWl0LgogICogdGhlIGhhbmRsZXIgd2lsbCBzaW1wbHkgbG9nIG1jZWxvZyB3LyBzb2Z0d2FyZSBkZWZpbmVkIGJhbmsgbnVtYmVyLgogICovCi1hc21saW5rYWdlIHZvaWQgbWNlX3RocmVzaG9sZF9pbnRlcnJ1cHQodm9pZCkKK3N0YXRpYyB2b2lkIGFtZF90aHJlc2hvbGRfaW50ZXJydXB0KHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGJhbmssIGJsb2NrOwogCXN0cnVjdCBtY2UgbTsKIAl1MzIgbG93ID0gMCwgaGlnaCA9IDAsIGFkZHJlc3MgPSAwOwogCi0JYWNrX0FQSUNfaXJxKCk7Ci0JZXhpdF9pZGxlKCk7Ci0JaXJxX2VudGVyKCk7Ci0KLQltZW1zZXQoJm0sIDAsIHNpemVvZihtKSk7Ci0JcmR0c2NsbChtLnRzYyk7Ci0JbS5jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJbWNlX3NldHVwKCZtKTsKIAogCS8qIGFzc3VtZSBmaXJzdCBiYW5rIGNhdXNlZCBpdCAqLwogCWZvciAoYmFuayA9IDA7IGJhbmsgPCBOUl9CQU5LUzsgKytiYW5rKSB7CkBAIC0yMzMsNyArMjMxLDggQEAKIAogCQkJLyogTG9nIHRoZSBtYWNoaW5lIGNoZWNrIHRoYXQgY2F1c2VkIHRoZSB0aHJlc2hvbGQKIAkJCSAgIGV2ZW50LiAqLwotCQkJZG9fbWFjaGluZV9jaGVjayhOVUxMLCAwKTsKKwkJCW1hY2hpbmVfY2hlY2tfcG9sbChNQ1BfVElNRVNUQU1QLAorCQkJCQkmX19nZXRfY3B1X3ZhcihtY2VfcG9sbF9iYW5rcykpOwogCiAJCQlpZiAoaGlnaCAmIE1BU0tfT1ZFUkZMT1dfSEkpIHsKIAkJCQlyZG1zcmwoYWRkcmVzcywgbS5taXNjKTsKQEAgLTI0MywxMyArMjQyLDEwIEBACiAJCQkJICAgICAgICsgYmFuayAqIE5SX0JMT0NLUwogCQkJCSAgICAgICArIGJsb2NrOwogCQkJCW1jZV9sb2coJm0pOwotCQkJCWdvdG8gb3V0OworCQkJCXJldHVybjsKIAkJCX0KIAkJfQogCX0KLW91dDoKLQlpbmNfaXJxX3N0YXQoaXJxX3RocmVzaG9sZF9jb3VudCk7Ci0JaXJxX2V4aXQoKTsKIH0KIAogLyoKQEAgLTI4Myw3ICsyNzksNyBAQAogCXRyLmIgPSBiOwogCXRyLnJlc2V0ID0gMDsKIAl0ci5vbGRfbGltaXQgPSAwOwotCXdvcmtfb25fY3B1KGItPmNwdSwgdGhyZXNob2xkX3Jlc3RhcnRfYmFuaywgJnRyKTsKKwlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoYi0+Y3B1LCB0aHJlc2hvbGRfcmVzdGFydF9iYW5rLCAmdHIsIDEpOwogCiAJcmV0dXJuIGVuZCAtIGJ1ZjsKIH0KQEAgLTMwNSwyMyArMzAxLDMyIEBACiAJdHIuYiA9IGI7CiAJdHIucmVzZXQgPSAwOwogCi0Jd29ya19vbl9jcHUoYi0+Y3B1LCB0aHJlc2hvbGRfcmVzdGFydF9iYW5rLCAmdHIpOworCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShiLT5jcHUsIHRocmVzaG9sZF9yZXN0YXJ0X2JhbmssICZ0ciwgMSk7CiAKIAlyZXR1cm4gZW5kIC0gYnVmOwogfQogCi1zdGF0aWMgbG9uZyBsb2NhbF9lcnJvcl9jb3VudCh2b2lkICpfYikKK3N0cnVjdCB0aHJlc2hvbGRfYmxvY2tfY3Jvc3NfY3B1IHsKKwlzdHJ1Y3QgdGhyZXNob2xkX2Jsb2NrICp0YjsKKwlsb25nIHJldHZhbDsKK307CisKK3N0YXRpYyB2b2lkIGxvY2FsX2Vycm9yX2NvdW50X2hhbmRsZXIodm9pZCAqX3RiY2MpCiB7Ci0Jc3RydWN0IHRocmVzaG9sZF9ibG9jayAqYiA9IF9iOworCXN0cnVjdCB0aHJlc2hvbGRfYmxvY2tfY3Jvc3NfY3B1ICp0YmNjID0gX3RiY2M7CisJc3RydWN0IHRocmVzaG9sZF9ibG9jayAqYiA9IHRiY2MtPnRiOwogCXUzMiBsb3csIGhpZ2g7CiAKIAlyZG1zcihiLT5hZGRyZXNzLCBsb3csIGhpZ2gpOwotCXJldHVybiAoaGlnaCAmIDB4RkZGKSAtIChUSFJFU0hPTERfTUFYIC0gYi0+dGhyZXNob2xkX2xpbWl0KTsKKwl0YmNjLT5yZXR2YWwgPSAoaGlnaCAmIDB4RkZGKSAtIChUSFJFU0hPTERfTUFYIC0gYi0+dGhyZXNob2xkX2xpbWl0KTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19lcnJvcl9jb3VudChzdHJ1Y3QgdGhyZXNob2xkX2Jsb2NrICpiLCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWx4XG4iLCB3b3JrX29uX2NwdShiLT5jcHUsIGxvY2FsX2Vycm9yX2NvdW50LCBiKSk7CisJc3RydWN0IHRocmVzaG9sZF9ibG9ja19jcm9zc19jcHUgdGJjYyA9IHsgLnRiID0gYiwgfTsKKworCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShiLT5jcHUsIGxvY2FsX2Vycm9yX2NvdW50X2hhbmRsZXIsICZ0YmNjLCAxKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHhcbiIsIHRiY2MucmV0dmFsKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfZXJyb3JfY291bnQoc3RydWN0IHRocmVzaG9sZF9ibG9jayAqYiwKQEAgLTMyOSw3ICszMzQsNyBAQAogewogCXN0cnVjdCB0aHJlc2hfcmVzdGFydCB0ciA9IHsgLmIgPSBiLCAucmVzZXQgPSAxLCAub2xkX2xpbWl0ID0gMCB9OwogCi0Jd29ya19vbl9jcHUoYi0+Y3B1LCB0aHJlc2hvbGRfcmVzdGFydF9iYW5rLCAmdHIpOworCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShiLT5jcHUsIHRocmVzaG9sZF9yZXN0YXJ0X2JhbmssICZ0ciwgMSk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTM5OCw3ICs0MDMsNyBAQAogCWlmICgoYmFuayA+PSBOUl9CQU5LUykgfHwgKGJsb2NrID49IE5SX0JMT0NLUykpCiAJCXJldHVybiAwOwogCi0JaWYgKHJkbXNyX3NhZmUoYWRkcmVzcywgJmxvdywgJmhpZ2gpKQorCWlmIChyZG1zcl9zYWZlX29uX2NwdShjcHUsIGFkZHJlc3MsICZsb3csICZoaWdoKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIShoaWdoICYgTUFTS19WQUxJRF9ISSkpIHsKQEAgLTQ2MiwxMiArNDY3LDExIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIF9fY3B1aW5pdCBsb25nIGxvY2FsX2FsbG9jYXRlX3RocmVzaG9sZF9ibG9ja3Modm9pZCAqX2JhbmspCitzdGF0aWMgX19jcHVpbml0IGxvbmcKK2xvY2FsX2FsbG9jYXRlX3RocmVzaG9sZF9ibG9ja3MoaW50IGNwdSwgdW5zaWduZWQgaW50IGJhbmspCiB7Ci0JdW5zaWduZWQgaW50ICpiYW5rID0gX2Jhbms7Ci0KLQlyZXR1cm4gYWxsb2NhdGVfdGhyZXNob2xkX2Jsb2NrcyhzbXBfcHJvY2Vzc29yX2lkKCksICpiYW5rLCAwLAotCQkJCQkgTVNSX0lBMzJfTUMwX01JU0MgKyAqYmFuayAqIDQpOworCXJldHVybiBhbGxvY2F0ZV90aHJlc2hvbGRfYmxvY2tzKGNwdSwgYmFuaywgMCwKKwkJCQkJIE1TUl9JQTMyX01DMF9NSVNDICsgYmFuayAqIDQpOwogfQogCiAvKiBzeW1saW5rcyBzaWJsaW5nIHNoYXJlZCBiYW5rcyB0byBmaXJzdCBjb3JlLiAgZmlyc3QgY29yZSBvd25zIGRpci9maWxlcy4gKi8KQEAgLTUzMCw3ICs1MzQsNyBAQAogCiAJcGVyX2NwdSh0aHJlc2hvbGRfYmFua3MsIGNwdSlbYmFua10gPSBiOwogCi0JZXJyID0gd29ya19vbl9jcHUoY3B1LCBsb2NhbF9hbGxvY2F0ZV90aHJlc2hvbGRfYmxvY2tzLCAmYmFuayk7CisJZXJyID0gbG9jYWxfYWxsb2NhdGVfdGhyZXNob2xkX2Jsb2NrcyhjcHUsIGJhbmspOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWU7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbF82NC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsXzY0LmMKaW5kZXggYWE1ZTI4Ny4uNTdkZjNkMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsXzY0LmMKQEAgLTEsNiArMSw4IEBACiAvKgogICogSW50ZWwgc3BlY2lmaWMgTUNFIGZlYXR1cmVzLgogICogQ29weXJpZ2h0IDIwMDQgWndhbmUgTXdhaWthbWJvIDx6d2FuZUBsaW51eHBvd2VyLmNhPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IEFuZGkgS2xlZW4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTMsNiArMTUsNyBAQAogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KICNpbmNsdWRlIDxhc20vaWRsZS5oPgogI2luY2x1ZGUgPGFzbS90aGVybV90aHJvdC5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAKIGFzbWxpbmthZ2Ugdm9pZCBzbXBfdGhlcm1hbF9pbnRlcnJ1cHQodm9pZCkKIHsKQEAgLTI1LDcgKzI4LDcgQEAKIAogCXJkbXNybChNU1JfSUEzMl9USEVSTV9TVEFUVVMsIG1zcl92YWwpOwogCWlmICh0aGVybV90aHJvdF9wcm9jZXNzKG1zcl92YWwgJiAxKSkKLQkJbWNlX2xvZ190aGVybV90aHJvdF9ldmVudChzbXBfcHJvY2Vzc29yX2lkKCksIG1zcl92YWwpOworCQltY2VfbG9nX3RoZXJtX3Rocm90X2V2ZW50KG1zcl92YWwpOwogCiAJaW5jX2lycV9zdGF0KGlycV90aGVybWFsX2NvdW50KTsKIAlpcnFfZXhpdCgpOwpAQCAtODUsNyArODgsMjA5IEBACiAJcmV0dXJuOwogfQogCisvKgorICogU3VwcG9ydCBmb3IgSW50ZWwgQ29ycmVjdCBNYWNoaW5lIENoZWNrIEludGVycnVwdHMuIFRoaXMgYWxsb3dzCisgKiB0aGUgQ1BVIHRvIHJhaXNlIGFuIGludGVycnVwdCB3aGVuIGEgY29ycmVjdGVkIG1hY2hpbmUgY2hlY2sgaGFwcGVuZWQuCisgKiBOb3JtYWxseSB3ZSBwaWNrIHRob3NlIHVwIHVzaW5nIGEgcmVndWxhciBwb2xsaW5nIHRpbWVyLgorICogQWxzbyBzdXBwb3J0cyByZWxpYWJsZSBkaXNjb3Zlcnkgb2Ygc2hhcmVkIGJhbmtzLgorICovCisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShtY2VfYmFua3NfdCwgbWNlX2JhbmtzX293bmVkKTsKKworLyoKKyAqIGNtY2lfZGlzY292ZXJfbG9jayBwcm90ZWN0cyBhZ2FpbnN0IHBhcmFsbGVsIGRpc2NvdmVyeSBhdHRlbXB0cworICogd2hpY2ggY291bGQgcmFjZSBhZ2FpbnN0IGVhY2ggb3RoZXIuCisgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soY21jaV9kaXNjb3Zlcl9sb2NrKTsKKworI2RlZmluZSBDTUNJX1RIUkVTSE9MRCAxCisKK3N0YXRpYyBpbnQgY21jaV9zdXBwb3J0ZWQoaW50ICpiYW5rcykKK3sKKwl1NjQgY2FwOworCisJLyoKKwkgKiBWZW5kb3IgY2hlY2sgaXMgbm90IHN0cmljdGx5IG5lZWRlZCwgYnV0IHRoZSBpbml0aWFsCisJICogaW5pdGlhbGl6YXRpb24gaXMgdmVuZG9yIGtleWVkIGFuZCB0aGlzCisJICogbWFrZXMgc3VyZSBub25lIG9mIHRoZSBiYWNrZG9vcnMgYXJlIGVudGVyZWQgb3RoZXJ3aXNlLgorCSAqLworCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkKKwkJcmV0dXJuIDA7CisJaWYgKCFjcHVfaGFzX2FwaWMgfHwgbGFwaWNfZ2V0X21heGx2dCgpIDwgNikKKwkJcmV0dXJuIDA7CisJcmRtc3JsKE1TUl9JQTMyX01DR19DQVAsIGNhcCk7CisJKmJhbmtzID0gbWluX3QodW5zaWduZWQsIE1BWF9OUl9CQU5LUywgY2FwICYgMHhmZik7CisJcmV0dXJuICEhKGNhcCAmIE1DR19DTUNJX1ApOworfQorCisvKgorICogVGhlIGludGVycnVwdCBoYW5kbGVyLiBUaGlzIGlzIGNhbGxlZCBvbiBldmVyeSBldmVudC4KKyAqIEp1c3QgY2FsbCB0aGUgcG9sbGVyIGRpcmVjdGx5IHRvIGxvZyBhbnkgZXZlbnRzLgorICogVGhpcyBjb3VsZCBpbiB0aGVvcnkgaW5jcmVhc2UgdGhlIHRocmVzaG9sZCB1bmRlciBoaWdoIGxvYWQsCisgKiBidXQgZG9lc24ndCBmb3Igbm93LgorICovCitzdGF0aWMgdm9pZCBpbnRlbF90aHJlc2hvbGRfaW50ZXJydXB0KHZvaWQpCit7CisJbWFjaGluZV9jaGVja19wb2xsKE1DUF9USU1FU1RBTVAsICZfX2dldF9jcHVfdmFyKG1jZV9iYW5rc19vd25lZCkpOworCW1jZV9ub3RpZnlfdXNlcigpOworfQorCitzdGF0aWMgdm9pZCBwcmludF91cGRhdGUoY2hhciAqdHlwZSwgaW50ICpoZHIsIGludCBudW0pCit7CisJaWYgKCpoZHIgPT0gMCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVICVkIE1DQSBiYW5rcyIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJKmhkciA9IDE7CisJcHJpbnRrKEtFUk5fQ09OVCAiICVzOiVkIiwgdHlwZSwgbnVtKTsKK30KKworLyoKKyAqIEVuYWJsZSBDTUNJIChDb3JyZWN0ZWQgTWFjaGluZSBDaGVjayBJbnRlcnJ1cHQpIGZvciBhdmFpbGFibGUgTUNFIGJhbmtzCisgKiBvbiB0aGlzIENQVS4gVXNlIHRoZSBhbGdvcml0aG0gcmVjb21tZW5kZWQgaW4gdGhlIFNETSB0byBkaXNjb3ZlciBzaGFyZWQKKyAqIGJhbmtzLgorICovCitzdGF0aWMgdm9pZCBjbWNpX2Rpc2NvdmVyKGludCBiYW5rcywgaW50IGJvb3QpCit7CisJdW5zaWduZWQgbG9uZyAqb3duZWQgPSAodm9pZCAqKSZfX2dldF9jcHVfdmFyKG1jZV9iYW5rc19vd25lZCk7CisJaW50IGhkciA9IDA7CisJaW50IGk7CisKKwlzcGluX2xvY2soJmNtY2lfZGlzY292ZXJfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspIHsKKwkJdTY0IHZhbDsKKworCQlpZiAodGVzdF9iaXQoaSwgb3duZWQpKQorCQkJY29udGludWU7CisKKwkJcmRtc3JsKE1TUl9JQTMyX01DMF9DVEwyICsgaSwgdmFsKTsKKworCQkvKiBBbHJlYWR5IG93bmVkIGJ5IHNvbWVvbmUgZWxzZT8gKi8KKwkJaWYgKHZhbCAmIENNQ0lfRU4pIHsKKwkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgb3duZWQpIHx8IGJvb3QpCisJCQkJcHJpbnRfdXBkYXRlKCJTSEQiLCAmaGRyLCBpKTsKKwkJCV9fY2xlYXJfYml0KGksIF9fZ2V0X2NwdV92YXIobWNlX3BvbGxfYmFua3MpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdmFsIHw9IENNQ0lfRU4gfCBDTUNJX1RIUkVTSE9MRDsKKwkJd3Jtc3JsKE1TUl9JQTMyX01DMF9DVEwyICsgaSwgdmFsKTsKKwkJcmRtc3JsKE1TUl9JQTMyX01DMF9DVEwyICsgaSwgdmFsKTsKKworCQkvKiBEaWQgdGhlIGVuYWJsZSBiaXQgc3RpY2s/IC0tIHRoZSBiYW5rIHN1cHBvcnRzIENNQ0kgKi8KKwkJaWYgKHZhbCAmIENNQ0lfRU4pIHsKKwkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChpLCBvd25lZCkgfHwgYm9vdCkKKwkJCQlwcmludF91cGRhdGUoIkNNQ0kiLCAmaGRyLCBpKTsKKwkJCV9fY2xlYXJfYml0KGksIF9fZ2V0X2NwdV92YXIobWNlX3BvbGxfYmFua3MpKTsKKwkJfSBlbHNlIHsKKwkJCVdBUk5fT04oIXRlc3RfYml0KGksIF9fZ2V0X2NwdV92YXIobWNlX3BvbGxfYmFua3MpKSk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmNtY2lfZGlzY292ZXJfbG9jayk7CisJaWYgKGhkcikKKwkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKK30KKworLyoKKyAqIEp1c3QgaW4gY2FzZSB3ZSBtaXNzZWQgYW4gZXZlbnQgZHVyaW5nIGluaXRpYWxpemF0aW9uIGNoZWNrCisgKiBhbGwgdGhlIENNQ0kgb3duZWQgYmFua3MuCisgKi8KK3ZvaWQgY21jaV9yZWNoZWNrKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgYmFua3M7CisKKwlpZiAoIW1jZV9hdmFpbGFibGUoJmN1cnJlbnRfY3B1X2RhdGEpIHx8ICFjbWNpX3N1cHBvcnRlZCgmYmFua3MpKQorCQlyZXR1cm47CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCW1hY2hpbmVfY2hlY2tfcG9sbChNQ1BfVElNRVNUQU1QLCAmX19nZXRfY3B1X3ZhcihtY2VfYmFua3Nfb3duZWQpKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBEaXNhYmxlIENNQ0kgb24gdGhpcyBDUFUgZm9yIGFsbCBiYW5rcyBpdCBvd25zIHdoZW4gaXQgZ29lcyBkb3duLgorICogVGhpcyBhbGxvd3Mgb3RoZXIgQ1BVcyB0byBjbGFpbSB0aGUgYmFua3Mgb24gcmVkaXNjb3ZlcnkuCisgKi8KK3ZvaWQgY21jaV9jbGVhcih2b2lkKQoreworCWludCBpOworCWludCBiYW5rczsKKwl1NjQgdmFsOworCisJaWYgKCFjbWNpX3N1cHBvcnRlZCgmYmFua3MpKQorCQlyZXR1cm47CisJc3Bpbl9sb2NrKCZjbWNpX2Rpc2NvdmVyX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CisJCWlmICghdGVzdF9iaXQoaSwgX19nZXRfY3B1X3ZhcihtY2VfYmFua3Nfb3duZWQpKSkKKwkJCWNvbnRpbnVlOworCQkvKiBEaXNhYmxlIENNQ0kgKi8KKwkJcmRtc3JsKE1TUl9JQTMyX01DMF9DVEwyICsgaSwgdmFsKTsKKwkJdmFsICY9IH4oQ01DSV9FTnxDTUNJX1RIUkVTSE9MRF9NQVNLKTsKKwkJd3Jtc3JsKE1TUl9JQTMyX01DMF9DVEwyICsgaSwgdmFsKTsKKwkJX19jbGVhcl9iaXQoaSwgX19nZXRfY3B1X3ZhcihtY2VfYmFua3Nfb3duZWQpKTsKKwl9CisJc3Bpbl91bmxvY2soJmNtY2lfZGlzY292ZXJfbG9jayk7Cit9CisKKy8qCisgKiBBZnRlciBhIENQVSB3ZW50IGRvd24gY3ljbGUgdGhyb3VnaCBhbGwgdGhlIG90aGVycyBhbmQgcmVkaXNjb3ZlcgorICogTXVzdCBydW4gaW4gcHJvY2VzcyBjb250ZXh0LgorICovCit2b2lkIGNtY2lfcmVkaXNjb3ZlcihpbnQgZHlpbmcpCit7CisJaW50IGJhbmtzOworCWludCBjcHU7CisJY3B1bWFza192YXJfdCBvbGQ7CisKKwlpZiAoIWNtY2lfc3VwcG9ydGVkKCZiYW5rcykpCisJCXJldHVybjsKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZvbGQsIEdGUF9LRVJORUwpKQorCQlyZXR1cm47CisJY3B1bWFza19jb3B5KG9sZCwgJmN1cnJlbnQtPmNwdXNfYWxsb3dlZCk7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1IChjcHUpIHsKKwkJaWYgKGNwdSA9PSBkeWluZykKKwkJCWNvbnRpbnVlOworCQlpZiAoc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdW1hc2tfb2ZfY3B1KGNwdSkpKQorCQkJY29udGludWU7CisJCS8qIFJlY2hlY2sgYmFua3MgaW4gY2FzZSBDUFVzIGRvbid0IGFsbCBoYXZlIHRoZSBzYW1lICovCisJCWlmIChjbWNpX3N1cHBvcnRlZCgmYmFua3MpKQorCQkJY21jaV9kaXNjb3ZlcihiYW5rcywgMCk7CisJfQorCisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgb2xkKTsKKwlmcmVlX2NwdW1hc2tfdmFyKG9sZCk7Cit9CisKKy8qCisgKiBSZWVuYWJsZSBDTUNJIG9uIHRoaXMgQ1BVIGluIGNhc2UgYSBDUFUgZG93biBmYWlsZWQuCisgKi8KK3ZvaWQgY21jaV9yZWVuYWJsZSh2b2lkKQoreworCWludCBiYW5rczsKKwlpZiAoY21jaV9zdXBwb3J0ZWQoJmJhbmtzKSkKKwkJY21jaV9kaXNjb3ZlcihiYW5rcywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2luaXRfY21jaSh2b2lkKQoreworCWludCBiYW5rczsKKworCWlmICghY21jaV9zdXBwb3J0ZWQoJmJhbmtzKSkKKwkJcmV0dXJuOworCisJbWNlX3RocmVzaG9sZF92ZWN0b3IgPSBpbnRlbF90aHJlc2hvbGRfaW50ZXJydXB0OworCWNtY2lfZGlzY292ZXIoYmFua3MsIDEpOworCS8qCisJICogRm9yIENQVSAjMCB0aGlzIHJ1bnMgd2l0aCBzdGlsbCBkaXNhYmxlZCBBUElDLCBidXQgdGhhdCdzCisJICogb2sgYmVjYXVzZSBvbmx5IHRoZSB2ZWN0b3IgaXMgc2V0IHVwLiBXZSBzdGlsbCBkbyBhbm90aGVyCisJICogY2hlY2sgZm9yIHRoZSBiYW5rcyBsYXRlciBmb3IgQ1BVICMwIGp1c3QgdG8gbWFrZSBzdXJlCisJICogdG8gbm90IG1pc3MgYW55IGV2ZW50cy4KKwkgKi8KKwlhcGljX3dyaXRlKEFQSUNfTFZUQ01DSSwgVEhSRVNIT0xEX0FQSUNfVkVDVE9SfEFQSUNfRE1fRklYRUQpOworCWNtY2lfcmVjaGVjaygpOworfQorCiB2b2lkIG1jZV9pbnRlbF9mZWF0dXJlX2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCWludGVsX2luaXRfdGhlcm1hbChjKTsKKwlpbnRlbF9pbml0X2NtY2koKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RocmVzaG9sZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhyZXNob2xkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNlZTllNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RocmVzaG9sZC5jCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb21tb24gY29ycmVjdGVkIE1DRSB0aHJlc2hvbGQgaGFuZGxlciBjb2RlOgorICovCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxX3ZlY3RvcnMuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2luY2x1ZGUgPGFzbS9pZGxlLmg+CisjaW5jbHVkZSA8YXNtL21jZS5oPgorCitzdGF0aWMgdm9pZCBkZWZhdWx0X3RocmVzaG9sZF9pbnRlcnJ1cHQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9FUlIgIlVuZXhwZWN0ZWQgdGhyZXNob2xkIGludGVycnVwdCBhdCB2ZWN0b3IgJXhcbiIsCisJCQkgVEhSRVNIT0xEX0FQSUNfVkVDVE9SKTsKK30KKwordm9pZCAoKm1jZV90aHJlc2hvbGRfdmVjdG9yKSh2b2lkKSA9IGRlZmF1bHRfdGhyZXNob2xkX2ludGVycnVwdDsKKworYXNtbGlua2FnZSB2b2lkIG1jZV90aHJlc2hvbGRfaW50ZXJydXB0KHZvaWQpCit7CisJZXhpdF9pZGxlKCk7CisJaXJxX2VudGVyKCk7CisJaW5jX2lycV9zdGF0KGlycV90aHJlc2hvbGRfY291bnQpOworCW1jZV90aHJlc2hvbGRfdmVjdG9yKCk7CisJaXJxX2V4aXQoKTsKKwkvKiBBY2sgb25seSBhdCB0aGUgZW5kIHRvIGF2b2lkIHBvdGVudGlhbCByZWVudHJ5ICovCisJYWNrX0FQSUNfaXJxKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvTWFrZWZpbGUKaW5kZXggMTkxZmMwNS4uZjQzNjFiNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9NYWtlZmlsZQpAQCAtMSwzICsxLDMgQEAKLW9iai15CQk6PSBtYWluLm8gaWYubyBnZW5lcmljLm8gc3RhdGUubworb2JqLXkJCTo9IG1haW4ubyBpZi5vIGdlbmVyaWMubyBzdGF0ZS5vIGNsZWFudXAubwogb2JqLSQoQ09ORklHX1g4Nl8zMikgKz0gYW1kLm8gY3lyaXgubyBjZW50YXVyLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jbGVhbnVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UwZmU0YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jbGVhbnVwLmMKQEAgLTAsMCArMSwxMTAxIEBACisvKiAgTVRSUiAoTWVtb3J5IFR5cGUgUmFuZ2UgUmVnaXN0ZXIpIGNsZWFudXAKKworICAgIENvcHlyaWdodCAoQykgMjAwOSBZaW5naGFpIEx1CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CisKKyNpbmNsdWRlIDxhc20vZTgyMC5oPgorI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgorI2luY2x1ZGUgPGFzbS9rdm1fcGFyYS5oPgorI2luY2x1ZGUgIm10cnIuaCIKKworLyogc2hvdWxkIGJlIHJlbGF0ZWQgdG8gTVRSUl9WQVJfUkFOR0VTIG51bXMgKi8KKyNkZWZpbmUgUkFOR0VfTlVNIDI1NgorCitzdHJ1Y3QgcmVzX3JhbmdlIHsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCXVuc2lnbmVkIGxvbmcgZW5kOworfTsKKworc3RhdGljIGludCBfX2luaXQKK2FkZF9yYW5nZShzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJLyogb3V0IG9mIHNsb3RzICovCisJaWYgKG5yX3JhbmdlID49IFJBTkdFX05VTSkKKwkJcmV0dXJuIG5yX3JhbmdlOworCisJcmFuZ2VbbnJfcmFuZ2VdLnN0YXJ0ID0gc3RhcnQ7CisJcmFuZ2VbbnJfcmFuZ2VdLmVuZCA9IGVuZDsKKworCW5yX3JhbmdlKys7CisKKwlyZXR1cm4gbnJfcmFuZ2U7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0CithZGRfcmFuZ2Vfd2l0aF9tZXJnZShzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaW50IGk7CisKKwkvKiB0cnkgdG8gbWVyZ2UgaXQgd2l0aCBvbGQgb25lICovCisJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBmaW5hbF9zdGFydCwgZmluYWxfZW5kOworCQl1bnNpZ25lZCBsb25nIGNvbW1vbl9zdGFydCwgY29tbW9uX2VuZDsKKworCQlpZiAoIXJhbmdlW2ldLmVuZCkKKwkJCWNvbnRpbnVlOworCisJCWNvbW1vbl9zdGFydCA9IG1heChyYW5nZVtpXS5zdGFydCwgc3RhcnQpOworCQljb21tb25fZW5kID0gbWluKHJhbmdlW2ldLmVuZCwgZW5kKTsKKwkJaWYgKGNvbW1vbl9zdGFydCA+IGNvbW1vbl9lbmQgKyAxKQorCQkJY29udGludWU7CisKKwkJZmluYWxfc3RhcnQgPSBtaW4ocmFuZ2VbaV0uc3RhcnQsIHN0YXJ0KTsKKwkJZmluYWxfZW5kID0gbWF4KHJhbmdlW2ldLmVuZCwgZW5kKTsKKworCQlyYW5nZVtpXS5zdGFydCA9IGZpbmFsX3N0YXJ0OworCQlyYW5nZVtpXS5lbmQgPSAgZmluYWxfZW5kOworCQlyZXR1cm4gbnJfcmFuZ2U7CisJfQorCisJLyogbmVlZCB0byBhZGQgdGhhdCAqLworCXJldHVybiBhZGRfcmFuZ2UocmFuZ2UsIG5yX3JhbmdlLCBzdGFydCwgZW5kKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0CitzdWJ0cmFjdF9yYW5nZShzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaW50IGksIGo7CisKKwlmb3IgKGogPSAwOyBqIDwgUkFOR0VfTlVNOyBqKyspIHsKKwkJaWYgKCFyYW5nZVtqXS5lbmQpCisJCQljb250aW51ZTsKKworCQlpZiAoc3RhcnQgPD0gcmFuZ2Vbal0uc3RhcnQgJiYgZW5kID49IHJhbmdlW2pdLmVuZCkgeworCQkJcmFuZ2Vbal0uc3RhcnQgPSAwOworCQkJcmFuZ2Vbal0uZW5kID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHN0YXJ0IDw9IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA8IHJhbmdlW2pdLmVuZCAmJgorCQkgICAgcmFuZ2Vbal0uc3RhcnQgPCBlbmQgKyAxKSB7CisJCQlyYW5nZVtqXS5zdGFydCA9IGVuZCArIDE7CisJCQljb250aW51ZTsKKwkJfQorCisKKwkJaWYgKHN0YXJ0ID4gcmFuZ2Vbal0uc3RhcnQgJiYgZW5kID49IHJhbmdlW2pdLmVuZCAmJgorCQkgICAgcmFuZ2Vbal0uZW5kID4gc3RhcnQgLSAxKSB7CisJCQlyYW5nZVtqXS5lbmQgPSBzdGFydCAtIDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChzdGFydCA+IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA8IHJhbmdlW2pdLmVuZCkgeworCQkJLyogZmluZCB0aGUgbmV3IHNwYXJlICovCisJCQlmb3IgKGkgPSAwOyBpIDwgUkFOR0VfTlVNOyBpKyspIHsKKwkJCQlpZiAocmFuZ2VbaV0uZW5kID09IDApCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGkgPCBSQU5HRV9OVU0pIHsKKwkJCQlyYW5nZVtpXS5lbmQgPSByYW5nZVtqXS5lbmQ7CisJCQkJcmFuZ2VbaV0uc3RhcnQgPSBlbmQgKyAxOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgInJ1biBvZiBzbG90IGluIHJhbmdlc1xuIik7CisJCQl9CisJCQlyYW5nZVtqXS5lbmQgPSBzdGFydCAtIDE7CisJCQljb250aW51ZTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBfX2luaXQgY21wX3JhbmdlKGNvbnN0IHZvaWQgKngxLCBjb25zdCB2b2lkICp4MikKK3sKKwljb25zdCBzdHJ1Y3QgcmVzX3JhbmdlICpyMSA9IHgxOworCWNvbnN0IHN0cnVjdCByZXNfcmFuZ2UgKnIyID0geDI7CisJbG9uZyBzdGFydDEsIHN0YXJ0MjsKKworCXN0YXJ0MSA9IHIxLT5zdGFydDsKKwlzdGFydDIgPSByMi0+c3RhcnQ7CisKKwlyZXR1cm4gc3RhcnQxIC0gc3RhcnQyOworfQorCitzdHJ1Y3QgdmFyX210cnJfcmFuZ2Vfc3RhdGUgeworCXVuc2lnbmVkIGxvbmcgYmFzZV9wZm47CisJdW5zaWduZWQgbG9uZyBzaXplX3BmbjsKKwltdHJyX3R5cGUgdHlwZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmFyX210cnJfcmFuZ2Vfc3RhdGUgX19pbml0ZGF0YSByYW5nZV9zdGF0ZVtSQU5HRV9OVU1dOworc3RhdGljIGludCBfX2luaXRkYXRhIGRlYnVnX3ByaW50OworCitzdGF0aWMgaW50IF9faW5pdAoreDg2X2dldF9tdHJyX21lbV9yYW5nZShzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBleHRyYV9yZW1vdmVfYmFzZSwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgZXh0cmFfcmVtb3ZlX3NpemUpCit7CisJdW5zaWduZWQgbG9uZyBiYXNlLCBzaXplOworCW10cnJfdHlwZSB0eXBlOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKKwkJdHlwZSA9IHJhbmdlX3N0YXRlW2ldLnR5cGU7CisJCWlmICh0eXBlICE9IE1UUlJfVFlQRV9XUkJBQ0spCisJCQljb250aW51ZTsKKwkJYmFzZSA9IHJhbmdlX3N0YXRlW2ldLmJhc2VfcGZuOworCQlzaXplID0gcmFuZ2Vfc3RhdGVbaV0uc2l6ZV9wZm47CisJCW5yX3JhbmdlID0gYWRkX3JhbmdlX3dpdGhfbWVyZ2UocmFuZ2UsIG5yX3JhbmdlLCBiYXNlLAorCQkJCQkJYmFzZSArIHNpemUgLSAxKTsKKwl9CisJaWYgKGRlYnVnX3ByaW50KSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJBZnRlciBXQiBjaGVja2luZ1xuIik7CisJCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgTUFQIFBGTjogJTAxNmx4IC0gJTAxNmx4XG4iLAorCQkJCSByYW5nZVtpXS5zdGFydCwgcmFuZ2VbaV0uZW5kICsgMSk7CisJfQorCisJLyogdGFrZSBvdXQgVUMgcmFuZ2VzICovCisJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKKwkJdHlwZSA9IHJhbmdlX3N0YXRlW2ldLnR5cGU7CisJCWlmICh0eXBlICE9IE1UUlJfVFlQRV9VTkNBQ0hBQkxFICYmCisJCSAgICB0eXBlICE9IE1UUlJfVFlQRV9XUlBST1QpCisJCQljb250aW51ZTsKKwkJc2l6ZSA9IHJhbmdlX3N0YXRlW2ldLnNpemVfcGZuOworCQlpZiAoIXNpemUpCisJCQljb250aW51ZTsKKwkJYmFzZSA9IHJhbmdlX3N0YXRlW2ldLmJhc2VfcGZuOworCQlpZiAoYmFzZSA8ICgxPDwoMjAtUEFHRV9TSElGVCkpICYmIG10cnJfc3RhdGUuaGF2ZV9maXhlZCAmJgorCQkgICAgKG10cnJfc3RhdGUuZW5hYmxlZCAmIDEpKSB7CisJCQkvKiBWYXIgTVRSUiBjb250YWlucyBVQyBlbnRyeSBiZWxvdyAxTT8gU2tpcCBpdDogKi8KKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIldBUk5JTkc6IEJJT1MgYnVnOiBWQVIgTVRSUiAlZCAiCisJCQkJImNvbnRhaW5zIHN0cmFuZ2UgVUMgZW50cnkgdW5kZXIgMU0sIGNoZWNrICIKKwkJCQkid2l0aCB5b3VyIHN5c3RlbSB2ZW5kb3IhXG4iLCBpKTsKKwkJCWlmIChiYXNlICsgc2l6ZSA8PSAoMTw8KDIwLVBBR0VfU0hJRlQpKSkKKwkJCQljb250aW51ZTsKKwkJCXNpemUgLT0gKDE8PCgyMC1QQUdFX1NISUZUKSkgLSBiYXNlOworCQkJYmFzZSA9IDE8PCgyMC1QQUdFX1NISUZUKTsKKwkJfQorCQlzdWJ0cmFjdF9yYW5nZShyYW5nZSwgYmFzZSwgYmFzZSArIHNpemUgLSAxKTsKKwl9CisJaWYgKGV4dHJhX3JlbW92ZV9zaXplKQorCQlzdWJ0cmFjdF9yYW5nZShyYW5nZSwgZXh0cmFfcmVtb3ZlX2Jhc2UsCisJCQkJIGV4dHJhX3JlbW92ZV9iYXNlICsgZXh0cmFfcmVtb3ZlX3NpemUgIC0gMSk7CisKKwkvKiBnZXQgbmV3IHJhbmdlIG51bSAqLworCW5yX3JhbmdlID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgUkFOR0VfTlVNOyBpKyspIHsKKwkJaWYgKCFyYW5nZVtpXS5lbmQpCisJCQljb250aW51ZTsKKwkJbnJfcmFuZ2UrKzsKKwl9CisJaWYgIChkZWJ1Z19wcmludCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiQWZ0ZXIgVUMgY2hlY2tpbmdcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKKwkJCXByaW50ayhLRVJOX0RFQlVHICJNVFJSIE1BUCBQRk46ICUwMTZseCAtICUwMTZseFxuIiwKKwkJCQkgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCArIDEpOworCX0KKworCS8qIHNvcnQgdGhlIHJhbmdlcyAqLworCXNvcnQocmFuZ2UsIG5yX3JhbmdlLCBzaXplb2Yoc3RydWN0IHJlc19yYW5nZSksIGNtcF9yYW5nZSwgTlVMTCk7CisJaWYgIChkZWJ1Z19wcmludCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiQWZ0ZXIgc29ydGluZ1xuIik7CisJCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgTUFQIFBGTjogJTAxNmx4IC0gJTAxNmx4XG4iLAorCQkJCSByYW5nZVtpXS5zdGFydCwgcmFuZ2VbaV0uZW5kICsgMSk7CisJfQorCisJLyogY2xlYXIgdGhvc2UgaXMgbm90IHVzZWQgKi8KKwlmb3IgKGkgPSBucl9yYW5nZTsgaSA8IFJBTkdFX05VTTsgaSsrKQorCQltZW1zZXQoJnJhbmdlW2ldLCAwLCBzaXplb2YocmFuZ2VbaV0pKTsKKworCXJldHVybiBucl9yYW5nZTsKK30KKworc3RhdGljIHN0cnVjdCByZXNfcmFuZ2UgX19pbml0ZGF0YSByYW5nZVtSQU5HRV9OVU1dOworc3RhdGljIGludCBfX2luaXRkYXRhIG5yX3JhbmdlOworCisjaWZkZWYgQ09ORklHX01UUlJfU0FOSVRJWkVSCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBzdW1fcmFuZ2VzKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UpCit7CisJdW5zaWduZWQgbG9uZyBzdW07CisJaW50IGk7CisKKwlzdW0gPSAwOworCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQorCQlzdW0gKz0gcmFuZ2VbaV0uZW5kICsgMSAtIHJhbmdlW2ldLnN0YXJ0OworCisJcmV0dXJuIHN1bTsKK30KKworc3RhdGljIGludCBlbmFibGVfbXRycl9jbGVhbnVwIF9faW5pdGRhdGEgPQorCUNPTkZJR19NVFJSX1NBTklUSVpFUl9FTkFCTEVfREVGQVVMVDsKKworc3RhdGljIGludCBfX2luaXQgZGlzYWJsZV9tdHJyX2NsZWFudXBfc2V0dXAoY2hhciAqc3RyKQoreworCWVuYWJsZV9tdHJyX2NsZWFudXAgPSAwOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oImRpc2FibGVfbXRycl9jbGVhbnVwIiwgZGlzYWJsZV9tdHJyX2NsZWFudXBfc2V0dXApOworCitzdGF0aWMgaW50IF9faW5pdCBlbmFibGVfbXRycl9jbGVhbnVwX3NldHVwKGNoYXIgKnN0cikKK3sKKwllbmFibGVfbXRycl9jbGVhbnVwID0gMTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJlbmFibGVfbXRycl9jbGVhbnVwIiwgZW5hYmxlX210cnJfY2xlYW51cF9zZXR1cCk7CisKK3N0YXRpYyBpbnQgX19pbml0IG10cnJfY2xlYW51cF9kZWJ1Z19zZXR1cChjaGFyICpzdHIpCit7CisJZGVidWdfcHJpbnQgPSAxOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm10cnJfY2xlYW51cF9kZWJ1ZyIsIG10cnJfY2xlYW51cF9kZWJ1Z19zZXR1cCk7CisKK3N0cnVjdCB2YXJfbXRycl9zdGF0ZSB7CisJdW5zaWduZWQgbG9uZwlyYW5nZV9zdGFydGs7CisJdW5zaWduZWQgbG9uZwlyYW5nZV9zaXplazsKKwl1bnNpZ25lZCBsb25nCWNodW5rX3NpemVrOworCXVuc2lnbmVkIGxvbmcJZ3Jhbl9zaXplazsKKwl1bnNpZ25lZCBpbnQJcmVnOworfTsKKworc3RhdGljIHZvaWQgX19pbml0CitzZXRfdmFyX210cnIodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlaywgdW5zaWduZWQgbG9uZyBzaXplaywKKwkJdW5zaWduZWQgY2hhciB0eXBlLCB1bnNpZ25lZCBpbnQgYWRkcmVzc19iaXRzKQoreworCXUzMiBiYXNlX2xvLCBiYXNlX2hpLCBtYXNrX2xvLCBtYXNrX2hpOworCXU2NCBiYXNlLCBtYXNrOworCisJaWYgKCFzaXplaykgeworCQlmaWxsX210cnJfdmFyX3JhbmdlKHJlZywgMCwgMCwgMCwgMCk7CisJCXJldHVybjsKKwl9CisKKwltYXNrID0gKDFVTEwgPDwgYWRkcmVzc19iaXRzKSAtIDE7CisJbWFzayAmPSB+KCgoKHU2NClzaXplaykgPDwgMTApIC0gMSk7CisKKwliYXNlICA9ICgodTY0KWJhc2VrKSA8PCAxMDsKKworCWJhc2UgfD0gdHlwZTsKKwltYXNrIHw9IDB4ODAwOworCisJYmFzZV9sbyA9IGJhc2UgJiAoKDFVTEw8PDMyKSAtIDEpOworCWJhc2VfaGkgPSBiYXNlID4+IDMyOworCisJbWFza19sbyA9IG1hc2sgJiAoKDFVTEw8PDMyKSAtIDEpOworCW1hc2tfaGkgPSBtYXNrID4+IDMyOworCisJZmlsbF9tdHJyX3Zhcl9yYW5nZShyZWcsIGJhc2VfbG8sIGJhc2VfaGksIG1hc2tfbG8sIG1hc2tfaGkpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQKK3NhdmVfdmFyX210cnIodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlaywgdW5zaWduZWQgbG9uZyBzaXplaywKKwkJdW5zaWduZWQgY2hhciB0eXBlKQoreworCXJhbmdlX3N0YXRlW3JlZ10uYmFzZV9wZm4gPSBiYXNlayA+PiAoUEFHRV9TSElGVCAtIDEwKTsKKwlyYW5nZV9zdGF0ZVtyZWddLnNpemVfcGZuID0gc2l6ZWsgPj4gKFBBR0VfU0hJRlQgLSAxMCk7CisJcmFuZ2Vfc3RhdGVbcmVnXS50eXBlID0gdHlwZTsKK30KKworc3RhdGljIHZvaWQgX19pbml0CitzZXRfdmFyX210cnJfYWxsKHVuc2lnbmVkIGludCBhZGRyZXNzX2JpdHMpCit7CisJdW5zaWduZWQgbG9uZyBiYXNlaywgc2l6ZWs7CisJdW5zaWduZWQgY2hhciB0eXBlOworCXVuc2lnbmVkIGludCByZWc7CisKKwlmb3IgKHJlZyA9IDA7IHJlZyA8IG51bV92YXJfcmFuZ2VzOyByZWcrKykgeworCQliYXNlayA9IHJhbmdlX3N0YXRlW3JlZ10uYmFzZV9wZm4gPDwgKFBBR0VfU0hJRlQgLSAxMCk7CisJCXNpemVrID0gcmFuZ2Vfc3RhdGVbcmVnXS5zaXplX3BmbiA8PCAoUEFHRV9TSElGVCAtIDEwKTsKKwkJdHlwZSA9IHJhbmdlX3N0YXRlW3JlZ10udHlwZTsKKworCQlzZXRfdmFyX210cnIocmVnLCBiYXNlaywgc2l6ZWssIHR5cGUsIGFkZHJlc3NfYml0cyk7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0b19zaXplX2ZhY3Rvcih1bnNpZ25lZCBsb25nIHNpemVrLCBjaGFyICpmYWN0b3JwKQoreworCWNoYXIgZmFjdG9yOworCXVuc2lnbmVkIGxvbmcgYmFzZSA9IHNpemVrOworCisJaWYgKGJhc2UgJiAoKDE8PDEwKSAtIDEpKSB7CisJCS8qIG5vdCBNQiBhbGlnbm1lbnQgKi8KKwkJZmFjdG9yID0gJ0snOworCX0gZWxzZSBpZiAoYmFzZSAmICgoMTw8MjApIC0gMSkpIHsKKwkJZmFjdG9yID0gJ00nOworCQliYXNlID4+PSAxMDsKKwl9IGVsc2UgeworCQlmYWN0b3IgPSAnRyc7CisJCWJhc2UgPj49IDIwOworCX0KKworCSpmYWN0b3JwID0gZmFjdG9yOworCisJcmV0dXJuIGJhc2U7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0CityYW5nZV90b19tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnRrLAorCSAgICAgIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc2l6ZWssIHVuc2lnbmVkIGNoYXIgdHlwZSkKK3sKKwlpZiAoIXJhbmdlX3NpemVrIHx8IChyZWcgPj0gbnVtX3Zhcl9yYW5nZXMpKQorCQlyZXR1cm4gcmVnOworCisJd2hpbGUgKHJhbmdlX3NpemVrKSB7CisJCXVuc2lnbmVkIGxvbmcgbWF4X2FsaWduLCBhbGlnbjsKKwkJdW5zaWduZWQgbG9uZyBzaXplazsKKworCQkvKiBDb21wdXRlIHRoZSBtYXhpbXVtIHNpemUgSSBjYW4gbWFrZSBhIHJhbmdlICovCisJCWlmIChyYW5nZV9zdGFydGspCisJCQltYXhfYWxpZ24gPSBmZnMocmFuZ2Vfc3RhcnRrKSAtIDE7CisJCWVsc2UKKwkJCW1heF9hbGlnbiA9IDMyOworCQlhbGlnbiA9IGZscyhyYW5nZV9zaXplaykgLSAxOworCQlpZiAoYWxpZ24gPiBtYXhfYWxpZ24pCisJCQlhbGlnbiA9IG1heF9hbGlnbjsKKworCQlzaXplayA9IDEgPDwgYWxpZ247CisJCWlmIChkZWJ1Z19wcmludCkgeworCQkJY2hhciBzdGFydF9mYWN0b3IgPSAnSycsIHNpemVfZmFjdG9yID0gJ0snOworCQkJdW5zaWduZWQgbG9uZyBzdGFydF9iYXNlLCBzaXplX2Jhc2U7CisKKwkJCXN0YXJ0X2Jhc2UgPSB0b19zaXplX2ZhY3RvcihyYW5nZV9zdGFydGssCisJCQkJCQkJICZzdGFydF9mYWN0b3IpLAorCQkJc2l6ZV9iYXNlID0gdG9fc2l6ZV9mYWN0b3Ioc2l6ZWssICZzaXplX2ZhY3RvciksCisKKwkJCXByaW50ayhLRVJOX0RFQlVHICJTZXR0aW5nIHZhcmlhYmxlIE1UUlIgJWQsICIKKwkJCQkiYmFzZTogJWxkJWNCLCByYW5nZTogJWxkJWNCLCB0eXBlICVzXG4iLAorCQkJCXJlZywgc3RhcnRfYmFzZSwgc3RhcnRfZmFjdG9yLAorCQkJCXNpemVfYmFzZSwgc2l6ZV9mYWN0b3IsCisJCQkJKHR5cGUgPT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUpID8gIlVDIiA6CisJCQkJICAgKCh0eXBlID09IE1UUlJfVFlQRV9XUkJBQ0spID8gIldCIiA6ICJPdGhlciIpCisJCQkJKTsKKwkJfQorCQlzYXZlX3Zhcl9tdHJyKHJlZysrLCByYW5nZV9zdGFydGssIHNpemVrLCB0eXBlKTsKKwkJcmFuZ2Vfc3RhcnRrICs9IHNpemVrOworCQlyYW5nZV9zaXplayAtPSBzaXplazsKKwkJaWYgKHJlZyA+PSBudW1fdmFyX3JhbmdlcykKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gcmVnOworfQorCitzdGF0aWMgdW5zaWduZWQgX19pbml0CityYW5nZV90b19tdHJyX3dpdGhfaG9sZShzdHJ1Y3QgdmFyX210cnJfc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBsb25nIGJhc2VrLAorCQkJdW5zaWduZWQgbG9uZyBzaXplaykKK3sKKwl1bnNpZ25lZCBsb25nIGhvbGVfYmFzZWssIGhvbGVfc2l6ZWs7CisJdW5zaWduZWQgbG9uZyBzZWNvbmRfYmFzZWssIHNlY29uZF9zaXplazsKKwl1bnNpZ25lZCBsb25nIHJhbmdlMF9iYXNlaywgcmFuZ2UwX3NpemVrOworCXVuc2lnbmVkIGxvbmcgcmFuZ2VfYmFzZWssIHJhbmdlX3NpemVrOworCXVuc2lnbmVkIGxvbmcgY2h1bmtfc2l6ZWs7CisJdW5zaWduZWQgbG9uZyBncmFuX3NpemVrOworCisJaG9sZV9iYXNlayA9IDA7CisJaG9sZV9zaXplayA9IDA7CisJc2Vjb25kX2Jhc2VrID0gMDsKKwlzZWNvbmRfc2l6ZWsgPSAwOworCWNodW5rX3NpemVrID0gc3RhdGUtPmNodW5rX3NpemVrOworCWdyYW5fc2l6ZWsgPSBzdGF0ZS0+Z3Jhbl9zaXplazsKKworCS8qIGFsaWduIHdpdGggZ3JhbiBzaXplLCBwcmV2ZW50IHNtYWxsIGJsb2NrIHVzZWQgdXAgTVRSUnMgKi8KKwlyYW5nZV9iYXNlayA9IEFMSUdOKHN0YXRlLT5yYW5nZV9zdGFydGssIGdyYW5fc2l6ZWspOworCWlmICgocmFuZ2VfYmFzZWsgPiBiYXNlaykgJiYgYmFzZWspCisJCXJldHVybiBzZWNvbmRfc2l6ZWs7CisJc3RhdGUtPnJhbmdlX3NpemVrIC09IChyYW5nZV9iYXNlayAtIHN0YXRlLT5yYW5nZV9zdGFydGspOworCXJhbmdlX3NpemVrID0gQUxJR04oc3RhdGUtPnJhbmdlX3NpemVrLCBncmFuX3NpemVrKTsKKworCXdoaWxlIChyYW5nZV9zaXplayA+IHN0YXRlLT5yYW5nZV9zaXplaykgeworCQlyYW5nZV9zaXplayAtPSBncmFuX3NpemVrOworCQlpZiAoIXJhbmdlX3NpemVrKQorCQkJcmV0dXJuIDA7CisJfQorCXN0YXRlLT5yYW5nZV9zaXplayA9IHJhbmdlX3NpemVrOworCisJLyogdHJ5IHRvIGFwcGVuZCBzb21lIHNtYWxsIGhvbGUgKi8KKwlyYW5nZTBfYmFzZWsgPSBzdGF0ZS0+cmFuZ2Vfc3RhcnRrOworCXJhbmdlMF9zaXplayA9IEFMSUdOKHN0YXRlLT5yYW5nZV9zaXplaywgY2h1bmtfc2l6ZWspOworCisJLyogbm8gaW5jcmVhc2UgKi8KKwlpZiAocmFuZ2UwX3NpemVrID09IHN0YXRlLT5yYW5nZV9zaXplaykgeworCQlpZiAoZGVidWdfcHJpbnQpCisJCQlwcmludGsoS0VSTl9ERUJVRyAicmFuZ2VYOiAlMDE2bHggLSAlMDE2bHhcbiIsCisJCQkJcmFuZ2UwX2Jhc2VrPDwxMCwKKwkJCQkocmFuZ2UwX2Jhc2VrICsgc3RhdGUtPnJhbmdlX3NpemVrKTw8MTApOworCQlzdGF0ZS0+cmVnID0gcmFuZ2VfdG9fbXRycihzdGF0ZS0+cmVnLCByYW5nZTBfYmFzZWssCisJCQkJc3RhdGUtPnJhbmdlX3NpemVrLCBNVFJSX1RZUEVfV1JCQUNLKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogb25seSBjdXQgYmFjaywgd2hlbiBpdCBpcyBub3QgdGhlIGxhc3QgKi8KKwlpZiAoc2l6ZWspIHsKKwkJd2hpbGUgKHJhbmdlMF9iYXNlayArIHJhbmdlMF9zaXplayA+IChiYXNlayArIHNpemVrKSkgeworCQkJaWYgKHJhbmdlMF9zaXplayA+PSBjaHVua19zaXplaykKKwkJCQlyYW5nZTBfc2l6ZWsgLT0gY2h1bmtfc2l6ZWs7CisJCQllbHNlCisJCQkJcmFuZ2UwX3NpemVrID0gMDsKKworCQkJaWYgKCFyYW5nZTBfc2l6ZWspCisJCQkJYnJlYWs7CisJCX0KKwl9CisKK3NlY29uZF90cnk6CisJcmFuZ2VfYmFzZWsgPSByYW5nZTBfYmFzZWsgKyByYW5nZTBfc2l6ZWs7CisKKwkvKiBvbmUgaG9sZSBpbiB0aGUgbWlkZGxlICovCisJaWYgKHJhbmdlX2Jhc2VrID4gYmFzZWsgJiYgcmFuZ2VfYmFzZWsgPD0gKGJhc2VrICsgc2l6ZWspKQorCQlzZWNvbmRfc2l6ZWsgPSByYW5nZV9iYXNlayAtIGJhc2VrOworCisJaWYgKHJhbmdlMF9zaXplayA+IHN0YXRlLT5yYW5nZV9zaXplaykgeworCisJCS8qIG9uZSBob2xlIGluIG1pZGRsZSBvciBhdCBlbmQgKi8KKwkJaG9sZV9zaXplayA9IHJhbmdlMF9zaXplayAtIHN0YXRlLT5yYW5nZV9zaXplayAtIHNlY29uZF9zaXplazsKKworCQkvKiBob2xlIHNpemUgc2hvdWxkIGJlIGxlc3MgdGhhbiBoYWxmIG9mIHJhbmdlMCBzaXplICovCisJCWlmIChob2xlX3NpemVrID49IChyYW5nZTBfc2l6ZWsgPj4gMSkgJiYKKwkJICAgIHJhbmdlMF9zaXplayA+PSBjaHVua19zaXplaykgeworCQkJcmFuZ2UwX3NpemVrIC09IGNodW5rX3NpemVrOworCQkJc2Vjb25kX3NpemVrID0gMDsKKwkJCWhvbGVfc2l6ZWsgPSAwOworCisJCQlnb3RvIHNlY29uZF90cnk7CisJCX0KKwl9CisKKwlpZiAocmFuZ2UwX3NpemVrKSB7CisJCWlmIChkZWJ1Z19wcmludCkKKwkJCXByaW50ayhLRVJOX0RFQlVHICJyYW5nZTA6ICUwMTZseCAtICUwMTZseFxuIiwKKwkJCQlyYW5nZTBfYmFzZWs8PDEwLAorCQkJCShyYW5nZTBfYmFzZWsgKyByYW5nZTBfc2l6ZWspPDwxMCk7CisJCXN0YXRlLT5yZWcgPSByYW5nZV90b19tdHJyKHN0YXRlLT5yZWcsIHJhbmdlMF9iYXNlaywKKwkJCQlyYW5nZTBfc2l6ZWssIE1UUlJfVFlQRV9XUkJBQ0spOworCX0KKworCWlmIChyYW5nZTBfc2l6ZWsgPCBzdGF0ZS0+cmFuZ2Vfc2l6ZWspIHsKKwkJLyogbmVlZCB0byBoYW5kbGUgbGVmdCBvdmVyICovCisJCXJhbmdlX3NpemVrID0gc3RhdGUtPnJhbmdlX3NpemVrIC0gcmFuZ2UwX3NpemVrOworCisJCWlmIChkZWJ1Z19wcmludCkKKwkJCXByaW50ayhLRVJOX0RFQlVHICJyYW5nZTogJTAxNmx4IC0gJTAxNmx4XG4iLAorCQkJCSByYW5nZV9iYXNlazw8MTAsCisJCQkJIChyYW5nZV9iYXNlayArIHJhbmdlX3NpemVrKTw8MTApOworCQlzdGF0ZS0+cmVnID0gcmFuZ2VfdG9fbXRycihzdGF0ZS0+cmVnLCByYW5nZV9iYXNlaywKKwkJCQkgcmFuZ2Vfc2l6ZWssIE1UUlJfVFlQRV9XUkJBQ0spOworCX0KKworCWlmIChob2xlX3NpemVrKSB7CisJCWhvbGVfYmFzZWsgPSByYW5nZV9iYXNlayAtIGhvbGVfc2l6ZWsgLSBzZWNvbmRfc2l6ZWs7CisJCWlmIChkZWJ1Z19wcmludCkKKwkJCXByaW50ayhLRVJOX0RFQlVHICJob2xlOiAlMDE2bHggLSAlMDE2bHhcbiIsCisJCQkJIGhvbGVfYmFzZWs8PDEwLAorCQkJCSAoaG9sZV9iYXNlayArIGhvbGVfc2l6ZWspPDwxMCk7CisJCXN0YXRlLT5yZWcgPSByYW5nZV90b19tdHJyKHN0YXRlLT5yZWcsIGhvbGVfYmFzZWssCisJCQkJIGhvbGVfc2l6ZWssIE1UUlJfVFlQRV9VTkNBQ0hBQkxFKTsKKwl9CisKKwlyZXR1cm4gc2Vjb25kX3NpemVrOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQKK3NldF92YXJfbXRycl9yYW5nZShzdHJ1Y3QgdmFyX210cnJfc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBsb25nIGJhc2VfcGZuLAorCQkgICB1bnNpZ25lZCBsb25nIHNpemVfcGZuKQoreworCXVuc2lnbmVkIGxvbmcgYmFzZWssIHNpemVrOworCXVuc2lnbmVkIGxvbmcgc2Vjb25kX3NpemVrID0gMDsKKworCWlmIChzdGF0ZS0+cmVnID49IG51bV92YXJfcmFuZ2VzKQorCQlyZXR1cm47CisKKwliYXNlayA9IGJhc2VfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOworCXNpemVrID0gc2l6ZV9wZm4gPDwgKFBBR0VfU0hJRlQgLSAxMCk7CisKKwkvKiBTZWUgaWYgSSBjYW4gbWVyZ2Ugd2l0aCB0aGUgbGFzdCByYW5nZSAqLworCWlmICgoYmFzZWsgPD0gMTAyNCkgfHwKKwkgICAgKHN0YXRlLT5yYW5nZV9zdGFydGsgKyBzdGF0ZS0+cmFuZ2Vfc2l6ZWsgPT0gYmFzZWspKSB7CisJCXVuc2lnbmVkIGxvbmcgZW5kayA9IGJhc2VrICsgc2l6ZWs7CisJCXN0YXRlLT5yYW5nZV9zaXplayA9IGVuZGsgLSBzdGF0ZS0+cmFuZ2Vfc3RhcnRrOworCQlyZXR1cm47CisJfQorCS8qIFdyaXRlIHRoZSByYW5nZSBtdHJycyAqLworCWlmIChzdGF0ZS0+cmFuZ2Vfc2l6ZWsgIT0gMCkKKwkJc2Vjb25kX3NpemVrID0gcmFuZ2VfdG9fbXRycl93aXRoX2hvbGUoc3RhdGUsIGJhc2VrLCBzaXplayk7CisKKwkvKiBBbGxvY2F0ZSBhbiBtc3IgKi8KKwlzdGF0ZS0+cmFuZ2Vfc3RhcnRrID0gYmFzZWsgKyBzZWNvbmRfc2l6ZWs7CisJc3RhdGUtPnJhbmdlX3NpemVrICA9IHNpemVrIC0gc2Vjb25kX3NpemVrOworfQorCisvKiBtaW5pbnVtIHNpemUgb2YgbXRyciBibG9jayB0aGF0IGNhbiB0YWtlIGhvbGUgKi8KK3N0YXRpYyB1NjQgbXRycl9jaHVua19zaXplIF9faW5pdGRhdGEgPSAoMjU2VUxMPDwyMCk7CisKK3N0YXRpYyBpbnQgX19pbml0IHBhcnNlX210cnJfY2h1bmtfc2l6ZV9vcHQoY2hhciAqcCkKK3sKKwlpZiAoIXApCisJCXJldHVybiAtRUlOVkFMOworCW10cnJfY2h1bmtfc2l6ZSA9IG1lbXBhcnNlKHAsICZwKTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJtdHJyX2NodW5rX3NpemUiLCBwYXJzZV9tdHJyX2NodW5rX3NpemVfb3B0KTsKKworLyogZ3Jhbml0eSBvZiBtdHJyIG9mIGJsb2NrICovCitzdGF0aWMgdTY0IG10cnJfZ3Jhbl9zaXplIF9faW5pdGRhdGE7CisKK3N0YXRpYyBpbnQgX19pbml0IHBhcnNlX210cnJfZ3Jhbl9zaXplX29wdChjaGFyICpwKQoreworCWlmICghcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbXRycl9ncmFuX3NpemUgPSBtZW1wYXJzZShwLCAmcCk7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgibXRycl9ncmFuX3NpemUiLCBwYXJzZV9tdHJyX2dyYW5fc2l6ZV9vcHQpOworCitzdGF0aWMgaW50IG5yX210cnJfc3BhcmVfcmVnIF9faW5pdGRhdGEgPQorCQkJCSBDT05GSUdfTVRSUl9TQU5JVElaRVJfU1BBUkVfUkVHX05SX0RFRkFVTFQ7CisKK3N0YXRpYyBpbnQgX19pbml0IHBhcnNlX210cnJfc3BhcmVfcmVnKGNoYXIgKmFyZykKK3sKKwlpZiAoYXJnKQorCQlucl9tdHJyX3NwYXJlX3JlZyA9IHNpbXBsZV9zdHJ0b3VsKGFyZywgTlVMTCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK2Vhcmx5X3BhcmFtKCJtdHJyX3NwYXJlX3JlZ19uciIsIHBhcnNlX210cnJfc3BhcmVfcmVnKTsKKworc3RhdGljIGludCBfX2luaXQKK3g4Nl9zZXR1cF92YXJfbXRycnMoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwKKwkJICAgIHU2NCBjaHVua19zaXplLCB1NjQgZ3Jhbl9zaXplKQoreworCXN0cnVjdCB2YXJfbXRycl9zdGF0ZSB2YXJfc3RhdGU7CisJaW50IGk7CisJaW50IG51bV9yZWc7CisKKwl2YXJfc3RhdGUucmFuZ2Vfc3RhcnRrCT0gMDsKKwl2YXJfc3RhdGUucmFuZ2Vfc2l6ZWsJPSAwOworCXZhcl9zdGF0ZS5yZWcJCT0gMDsKKwl2YXJfc3RhdGUuY2h1bmtfc2l6ZWsJPSBjaHVua19zaXplID4+IDEwOworCXZhcl9zdGF0ZS5ncmFuX3NpemVrCT0gZ3Jhbl9zaXplID4+IDEwOworCisJbWVtc2V0KHJhbmdlX3N0YXRlLCAwLCBzaXplb2YocmFuZ2Vfc3RhdGUpKTsKKworCS8qIFdyaXRlIHRoZSByYW5nZSBldGMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKKwkJc2V0X3Zhcl9tdHJyX3JhbmdlKCZ2YXJfc3RhdGUsIHJhbmdlW2ldLnN0YXJ0LAorCQkJCSAgIHJhbmdlW2ldLmVuZCAtIHJhbmdlW2ldLnN0YXJ0ICsgMSk7CisKKwkvKiBXcml0ZSB0aGUgbGFzdCByYW5nZSAqLworCWlmICh2YXJfc3RhdGUucmFuZ2Vfc2l6ZWsgIT0gMCkKKwkJcmFuZ2VfdG9fbXRycl93aXRoX2hvbGUoJnZhcl9zdGF0ZSwgMCwgMCk7CisKKwludW1fcmVnID0gdmFyX3N0YXRlLnJlZzsKKwkvKiBDbGVhciBvdXQgdGhlIGV4dHJhIE1UUlIncyAqLworCXdoaWxlICh2YXJfc3RhdGUucmVnIDwgbnVtX3Zhcl9yYW5nZXMpIHsKKwkJc2F2ZV92YXJfbXRycih2YXJfc3RhdGUucmVnLCAwLCAwLCAwKTsKKwkJdmFyX3N0YXRlLnJlZysrOworCX0KKworCXJldHVybiBudW1fcmVnOworfQorCitzdHJ1Y3QgbXRycl9jbGVhbnVwX3Jlc3VsdCB7CisJdW5zaWduZWQgbG9uZyBncmFuX3NpemVrOworCXVuc2lnbmVkIGxvbmcgY2h1bmtfc2l6ZWs7CisJdW5zaWduZWQgbG9uZyBsb3NlX2NvdmVyX3NpemVrOworCXVuc2lnbmVkIGludCBudW1fcmVnOworCWludCBiYWQ7Cit9OworCisvKgorICogZ3Jhbl9zaXplOiA2NEssIDEyOEssIDI1NkssIDUxMkssIDFNLCAyTSwgLi4uLCAyRworICogY2h1bmsgc2l6ZTogZ3Jhbl9zaXplLCAuLi4sIDJHCisgKiBzbyB3ZSBuZWVkICgxKzE2KSo4CisgKi8KKyNkZWZpbmUgTlVNX1JFU1VMVAkxMzYKKyNkZWZpbmUgUFNISUZUCQkoUEFHRV9TSElGVCAtIDEwKQorCitzdGF0aWMgc3RydWN0IG10cnJfY2xlYW51cF9yZXN1bHQgX19pbml0ZGF0YSByZXN1bHRbTlVNX1JFU1VMVF07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIG1pbl9sb3NzX3BmbltSQU5HRV9OVU1dOworCitzdGF0aWMgdm9pZCBfX2luaXQgcHJpbnRfb3V0X210cnJfcmFuZ2Vfc3RhdGUodm9pZCkKK3sKKwlpbnQgaTsKKwljaGFyIHN0YXJ0X2ZhY3RvciA9ICdLJywgc2l6ZV9mYWN0b3IgPSAnSyc7CisJdW5zaWduZWQgbG9uZyBzdGFydF9iYXNlLCBzaXplX2Jhc2U7CisJbXRycl90eXBlIHR5cGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgeworCisJCXNpemVfYmFzZSA9IHJhbmdlX3N0YXRlW2ldLnNpemVfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOworCQlpZiAoIXNpemVfYmFzZSkKKwkJCWNvbnRpbnVlOworCisJCXNpemVfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHNpemVfYmFzZSwgJnNpemVfZmFjdG9yKSwKKwkJc3RhcnRfYmFzZSA9IHJhbmdlX3N0YXRlW2ldLmJhc2VfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOworCQlzdGFydF9iYXNlID0gdG9fc2l6ZV9mYWN0b3Ioc3RhcnRfYmFzZSwgJnN0YXJ0X2ZhY3RvciksCisJCXR5cGUgPSByYW5nZV9zdGF0ZVtpXS50eXBlOworCisJCXByaW50ayhLRVJOX0RFQlVHICJyZWcgJWQsIGJhc2U6ICVsZCVjQiwgcmFuZ2U6ICVsZCVjQiwgdHlwZSAlc1xuIiwKKwkJCWksIHN0YXJ0X2Jhc2UsIHN0YXJ0X2ZhY3RvciwKKwkJCXNpemVfYmFzZSwgc2l6ZV9mYWN0b3IsCisJCQkodHlwZSA9PSBNVFJSX1RZUEVfVU5DQUNIQUJMRSkgPyAiVUMiIDoKKwkJCSAgICAoKHR5cGUgPT0gTVRSUl9UWVBFX1dSUFJPVCkgPyAiV1AiIDoKKwkJCSAgICAgKCh0eXBlID09IE1UUlJfVFlQRV9XUkJBQ0spID8gIldCIiA6ICJPdGhlciIpKQorCQkJKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG10cnJfbmVlZF9jbGVhbnVwKHZvaWQpCit7CisJaW50IGk7CisJbXRycl90eXBlIHR5cGU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCS8qIGV4dHJhIG9uZSBmb3IgYWxsIDAgKi8KKwlpbnQgbnVtW01UUlJfTlVNX1RZUEVTICsgMV07CisKKwkvKiBjaGVjayBlbnRyaWVzIG51bWJlciAqLworCW1lbXNldChudW0sIDAsIHNpemVvZihudW0pKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgeworCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKKwkJc2l6ZSA9IHJhbmdlX3N0YXRlW2ldLnNpemVfcGZuOworCQlpZiAodHlwZSA+PSBNVFJSX05VTV9UWVBFUykKKwkJCWNvbnRpbnVlOworCQlpZiAoIXNpemUpCisJCQl0eXBlID0gTVRSUl9OVU1fVFlQRVM7CisJCWlmICh0eXBlID09IE1UUlJfVFlQRV9XUlBST1QpCisJCQl0eXBlID0gTVRSUl9UWVBFX1VOQ0FDSEFCTEU7CisJCW51bVt0eXBlXSsrOworCX0KKworCS8qIGNoZWNrIGlmIHdlIGdvdCBVQyBlbnRyaWVzICovCisJaWYgKCFudW1bTVRSUl9UWVBFX1VOQ0FDSEFCTEVdKQorCQlyZXR1cm4gMDsKKworCS8qIGNoZWNrIGlmIHdlIG9ubHkgaGFkIFdCIGFuZCBVQyAqLworCWlmIChudW1bTVRSUl9UWVBFX1dSQkFDS10gKyBudW1bTVRSUl9UWVBFX1VOQ0FDSEFCTEVdICE9CisJCW51bV92YXJfcmFuZ2VzIC0gbnVtW01UUlJfTlVNX1RZUEVTXSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSByYW5nZV9zdW1zOworc3RhdGljIHZvaWQgX19pbml0IG10cnJfY2FsY19yYW5nZV9zdGF0ZSh1NjQgY2h1bmtfc2l6ZSwgdTY0IGdyYW5fc2l6ZSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgZXh0cmFfcmVtb3ZlX2Jhc2UsCisJCQkJCSB1bnNpZ25lZCBsb25nIGV4dHJhX3JlbW92ZV9zaXplLAorCQkJCQkgaW50IGkpCit7CisJaW50IG51bV9yZWc7CisJc3RhdGljIHN0cnVjdCByZXNfcmFuZ2UgcmFuZ2VfbmV3W1JBTkdFX05VTV07CisJc3RhdGljIGludCBucl9yYW5nZV9uZXc7CisJdW5zaWduZWQgbG9uZyByYW5nZV9zdW1zX25ldzsKKworCS8qIGNvbnZlcnQgcmFuZ2VzIHRvIHZhciByYW5nZXMgc3RhdGUgKi8KKwludW1fcmVnID0geDg2X3NldHVwX3Zhcl9tdHJycyhyYW5nZSwgbnJfcmFuZ2UsCisJCQkJCQljaHVua19zaXplLCBncmFuX3NpemUpOworCisJLyogd2UgZ290IG5ldyBzZXR0aW5nIGluIHJhbmdlX3N0YXRlLCBjaGVjayBpdCAqLworCW1lbXNldChyYW5nZV9uZXcsIDAsIHNpemVvZihyYW5nZV9uZXcpKTsKKwlucl9yYW5nZV9uZXcgPSB4ODZfZ2V0X210cnJfbWVtX3JhbmdlKHJhbmdlX25ldywgMCwKKwkJCQlleHRyYV9yZW1vdmVfYmFzZSwgZXh0cmFfcmVtb3ZlX3NpemUpOworCXJhbmdlX3N1bXNfbmV3ID0gc3VtX3JhbmdlcyhyYW5nZV9uZXcsIG5yX3JhbmdlX25ldyk7CisKKwlyZXN1bHRbaV0uY2h1bmtfc2l6ZWsgPSBjaHVua19zaXplID4+IDEwOworCXJlc3VsdFtpXS5ncmFuX3NpemVrID0gZ3Jhbl9zaXplID4+IDEwOworCXJlc3VsdFtpXS5udW1fcmVnID0gbnVtX3JlZzsKKwlpZiAocmFuZ2Vfc3VtcyA8IHJhbmdlX3N1bXNfbmV3KSB7CisJCXJlc3VsdFtpXS5sb3NlX2NvdmVyX3NpemVrID0KKwkJCShyYW5nZV9zdW1zX25ldyAtIHJhbmdlX3N1bXMpIDw8IFBTSElGVDsKKwkJcmVzdWx0W2ldLmJhZCA9IDE7CisJfSBlbHNlCisJCXJlc3VsdFtpXS5sb3NlX2NvdmVyX3NpemVrID0KKwkJCShyYW5nZV9zdW1zIC0gcmFuZ2Vfc3Vtc19uZXcpIDw8IFBTSElGVDsKKworCS8qIGRvdWJsZSBjaGVjayBpdCAqLworCWlmICghcmVzdWx0W2ldLmJhZCAmJiAhcmVzdWx0W2ldLmxvc2VfY292ZXJfc2l6ZWspIHsKKwkJaWYgKG5yX3JhbmdlX25ldyAhPSBucl9yYW5nZSB8fAorCQkJbWVtY21wKHJhbmdlLCByYW5nZV9uZXcsIHNpemVvZihyYW5nZSkpKQorCQkJCXJlc3VsdFtpXS5iYWQgPSAxOworCX0KKworCWlmICghcmVzdWx0W2ldLmJhZCAmJiAocmFuZ2Vfc3VtcyAtIHJhbmdlX3N1bXNfbmV3IDwKKwkJCQltaW5fbG9zc19wZm5bbnVtX3JlZ10pKSB7CisJCW1pbl9sb3NzX3BmbltudW1fcmVnXSA9CisJCQlyYW5nZV9zdW1zIC0gcmFuZ2Vfc3Vtc19uZXc7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXRycl9wcmludF9vdXRfb25lX3Jlc3VsdChpbnQgaSkKK3sKKwljaGFyIGdyYW5fZmFjdG9yLCBjaHVua19mYWN0b3IsIGxvc2VfZmFjdG9yOworCXVuc2lnbmVkIGxvbmcgZ3Jhbl9iYXNlLCBjaHVua19iYXNlLCBsb3NlX2Jhc2U7CisKKwlncmFuX2Jhc2UgPSB0b19zaXplX2ZhY3RvcihyZXN1bHRbaV0uZ3Jhbl9zaXplaywgJmdyYW5fZmFjdG9yKSwKKwljaHVua19iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmVzdWx0W2ldLmNodW5rX3NpemVrLCAmY2h1bmtfZmFjdG9yKSwKKwlsb3NlX2Jhc2UgPSB0b19zaXplX2ZhY3RvcihyZXN1bHRbaV0ubG9zZV9jb3Zlcl9zaXplaywgJmxvc2VfZmFjdG9yKSwKKwlwcmludGsoS0VSTl9JTkZPICIlc2dyYW5fc2l6ZTogJWxkJWMgXHRjaHVua19zaXplOiAlbGQlYyBcdCIsCisJCQlyZXN1bHRbaV0uYmFkID8gIipCQUQqIiA6ICIgIiwKKwkJCWdyYW5fYmFzZSwgZ3Jhbl9mYWN0b3IsIGNodW5rX2Jhc2UsIGNodW5rX2ZhY3Rvcik7CisJcHJpbnRrKEtFUk5fQ09OVCAibnVtX3JlZzogJWQgIFx0bG9zZSBjb3ZlciBSQU06ICVzJWxkJWNcbiIsCisJCQlyZXN1bHRbaV0ubnVtX3JlZywgcmVzdWx0W2ldLmJhZCA/ICItIiA6ICIiLAorCQkJbG9zZV9iYXNlLCBsb3NlX2ZhY3Rvcik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG10cnJfc2VhcmNoX29wdGltYWxfaW5kZXgodm9pZCkKK3sKKwlpbnQgaTsKKwlpbnQgbnVtX3JlZ19nb29kOworCWludCBpbmRleF9nb29kOworCisJaWYgKG5yX210cnJfc3BhcmVfcmVnID49IG51bV92YXJfcmFuZ2VzKQorCQlucl9tdHJyX3NwYXJlX3JlZyA9IG51bV92YXJfcmFuZ2VzIC0gMTsKKwludW1fcmVnX2dvb2QgPSAtMTsKKwlmb3IgKGkgPSBudW1fdmFyX3JhbmdlcyAtIG5yX210cnJfc3BhcmVfcmVnOyBpID4gMDsgaS0tKSB7CisJCWlmICghbWluX2xvc3NfcGZuW2ldKQorCQkJbnVtX3JlZ19nb29kID0gaTsKKwl9CisKKwlpbmRleF9nb29kID0gLTE7CisJaWYgKG51bV9yZWdfZ29vZCAhPSAtMSkgeworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JFU1VMVDsgaSsrKSB7CisJCQlpZiAoIXJlc3VsdFtpXS5iYWQgJiYKKwkJCSAgICByZXN1bHRbaV0ubnVtX3JlZyA9PSBudW1fcmVnX2dvb2QgJiYKKwkJCSAgICAhcmVzdWx0W2ldLmxvc2VfY292ZXJfc2l6ZWspIHsKKwkJCQlpbmRleF9nb29kID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBpbmRleF9nb29kOworfQorCisKK2ludCBfX2luaXQgbXRycl9jbGVhbnVwKHVuc2lnbmVkIGFkZHJlc3NfYml0cykKK3sKKwl1bnNpZ25lZCBsb25nIGV4dHJhX3JlbW92ZV9iYXNlLCBleHRyYV9yZW1vdmVfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGJhc2UsIHNpemUsIGRlZiwgZHVtbXk7CisJbXRycl90eXBlIHR5cGU7CisJdTY0IGNodW5rX3NpemUsIGdyYW5fc2l6ZTsKKwlpbnQgaW5kZXhfZ29vZDsKKwlpbnQgaTsKKworCWlmICghaXNfY3B1KElOVEVMKSB8fCBlbmFibGVfbXRycl9jbGVhbnVwIDwgMSkKKwkJcmV0dXJuIDA7CisJcmRtc3IoTVRSUmRlZlR5cGVfTVNSLCBkZWYsIGR1bW15KTsKKwlkZWYgJj0gMHhmZjsKKwlpZiAoZGVmICE9IE1UUlJfVFlQRV9VTkNBQ0hBQkxFKQorCQlyZXR1cm4gMDsKKworCS8qIGdldCBpdCBhbmQgc3RvcmUgaXQgYXNpZGUgKi8KKwltZW1zZXQocmFuZ2Vfc3RhdGUsIDAsIHNpemVvZihyYW5nZV9zdGF0ZSkpOworCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7CisJCW10cnJfaWYtPmdldChpLCAmYmFzZSwgJnNpemUsICZ0eXBlKTsKKwkJcmFuZ2Vfc3RhdGVbaV0uYmFzZV9wZm4gPSBiYXNlOworCQlyYW5nZV9zdGF0ZVtpXS5zaXplX3BmbiA9IHNpemU7CisJCXJhbmdlX3N0YXRlW2ldLnR5cGUgPSB0eXBlOworCX0KKworCS8qIGNoZWNrIGlmIHdlIG5lZWQgaGFuZGxlIGl0IGFuZCBjYW4gaGFuZGxlIGl0ICovCisJaWYgKCFtdHJyX25lZWRfY2xlYW51cCgpKQorCQlyZXR1cm4gMDsKKworCS8qIHByaW50IG9yaWdpbmFsIHZhciBNVFJScyBhdCBmaXJzdCwgZm9yIGRlYnVnZ2luZzogKi8KKwlwcmludGsoS0VSTl9ERUJVRyAib3JpZ2luYWwgdmFyaWFibGUgTVRSUnNcbiIpOworCXByaW50X291dF9tdHJyX3JhbmdlX3N0YXRlKCk7CisKKwltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihyYW5nZSkpOworCWV4dHJhX3JlbW92ZV9zaXplID0gMDsKKwlleHRyYV9yZW1vdmVfYmFzZSA9IDEgPDwgKDMyIC0gUEFHRV9TSElGVCk7CisJaWYgKG10cnJfdG9tMikKKwkJZXh0cmFfcmVtb3ZlX3NpemUgPQorCQkJKG10cnJfdG9tMiA+PiBQQUdFX1NISUZUKSAtIGV4dHJhX3JlbW92ZV9iYXNlOworCW5yX3JhbmdlID0geDg2X2dldF9tdHJyX21lbV9yYW5nZShyYW5nZSwgMCwgZXh0cmFfcmVtb3ZlX2Jhc2UsCisJCQkJCSAgZXh0cmFfcmVtb3ZlX3NpemUpOworCS8qCisJICogWzAsIDFNKSBzaG91bGQgYWx3YXlzIGJlIGNvdmVycmVkIGJ5IHZhciBtdHJyIHdpdGggV0IKKwkgKiBhbmQgZml4ZWQgbXRycnMgc2hvdWxkIHRha2UgZWZmZWN0aXZlIGJlZm9yZSB2YXIgbXRyciBmb3IgaXQKKwkgKi8KKwlucl9yYW5nZSA9IGFkZF9yYW5nZV93aXRoX21lcmdlKHJhbmdlLCBucl9yYW5nZSwgMCwKKwkJCQkJKDFVTEw8PCgyMCAtIFBBR0VfU0hJRlQpKSAtIDEpOworCS8qIHNvcnQgdGhlIHJhbmdlcyAqLworCXNvcnQocmFuZ2UsIG5yX3JhbmdlLCBzaXplb2Yoc3RydWN0IHJlc19yYW5nZSksIGNtcF9yYW5nZSwgTlVMTCk7CisKKwlyYW5nZV9zdW1zID0gc3VtX3JhbmdlcyhyYW5nZSwgbnJfcmFuZ2UpOworCXByaW50ayhLRVJOX0lORk8gInRvdGFsIFJBTSBjb3ZlcnJlZDogJWxkTVxuIiwKKwkgICAgICAgcmFuZ2Vfc3VtcyA+PiAoMjAgLSBQQUdFX1NISUZUKSk7CisKKwlpZiAobXRycl9jaHVua19zaXplICYmIG10cnJfZ3Jhbl9zaXplKSB7CisJCWkgPSAwOworCQltdHJyX2NhbGNfcmFuZ2Vfc3RhdGUobXRycl9jaHVua19zaXplLCBtdHJyX2dyYW5fc2l6ZSwKKwkJCQkgICAgICBleHRyYV9yZW1vdmVfYmFzZSwgZXh0cmFfcmVtb3ZlX3NpemUsIGkpOworCisJCW10cnJfcHJpbnRfb3V0X29uZV9yZXN1bHQoaSk7CisKKwkJaWYgKCFyZXN1bHRbaV0uYmFkKSB7CisJCQlzZXRfdmFyX210cnJfYWxsKGFkZHJlc3NfYml0cyk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiTmV3IHZhcmlhYmxlIE1UUlJzXG4iKTsKKwkJCXByaW50X291dF9tdHJyX3JhbmdlX3N0YXRlKCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlwcmludGsoS0VSTl9JTkZPICJpbnZhbGlkIG10cnJfZ3Jhbl9zaXplIG9yIG10cnJfY2h1bmtfc2l6ZSwgIgorCQkgICAgICAgIndpbGwgZmluZCBvcHRpbWFsIG9uZVxuIik7CisJfQorCisJaSA9IDA7CisJbWVtc2V0KG1pbl9sb3NzX3BmbiwgMHhmZiwgc2l6ZW9mKG1pbl9sb3NzX3BmbikpOworCW1lbXNldChyZXN1bHQsIDAsIHNpemVvZihyZXN1bHQpKTsKKwlmb3IgKGdyYW5fc2l6ZSA9ICgxVUxMPDwxNik7IGdyYW5fc2l6ZSA8ICgxVUxMPDwzMik7IGdyYW5fc2l6ZSA8PD0gMSkgeworCisJCWZvciAoY2h1bmtfc2l6ZSA9IGdyYW5fc2l6ZTsgY2h1bmtfc2l6ZSA8ICgxVUxMPDwzMik7CisJCSAgICAgY2h1bmtfc2l6ZSA8PD0gMSkgeworCisJCQlpZiAoaSA+PSBOVU1fUkVTVUxUKQorCQkJCWNvbnRpbnVlOworCisJCQltdHJyX2NhbGNfcmFuZ2Vfc3RhdGUoY2h1bmtfc2l6ZSwgZ3Jhbl9zaXplLAorCQkJCSAgICAgIGV4dHJhX3JlbW92ZV9iYXNlLCBleHRyYV9yZW1vdmVfc2l6ZSwgaSk7CisJCQlpZiAoZGVidWdfcHJpbnQpIHsKKwkJCQltdHJyX3ByaW50X291dF9vbmVfcmVzdWx0KGkpOworCQkJCXByaW50ayhLRVJOX0lORk8gIlxuIik7CisJCQl9CisKKwkJCWkrKzsKKwkJfQorCX0KKworCS8qIHRyeSB0byBmaW5kIHRoZSBvcHRpbWFsIGluZGV4ICovCisJaW5kZXhfZ29vZCA9IG10cnJfc2VhcmNoX29wdGltYWxfaW5kZXgoKTsKKworCWlmIChpbmRleF9nb29kICE9IC0xKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkZvdW5kIG9wdGltYWwgc2V0dGluZyBmb3IgbXRyciBjbGVhbiB1cFxuIik7CisJCWkgPSBpbmRleF9nb29kOworCQltdHJyX3ByaW50X291dF9vbmVfcmVzdWx0KGkpOworCisJCS8qIGNvbnZlcnQgcmFuZ2VzIHRvIHZhciByYW5nZXMgc3RhdGUgKi8KKwkJY2h1bmtfc2l6ZSA9IHJlc3VsdFtpXS5jaHVua19zaXplazsKKwkJY2h1bmtfc2l6ZSA8PD0gMTA7CisJCWdyYW5fc2l6ZSA9IHJlc3VsdFtpXS5ncmFuX3NpemVrOworCQlncmFuX3NpemUgPDw9IDEwOworCQl4ODZfc2V0dXBfdmFyX210cnJzKHJhbmdlLCBucl9yYW5nZSwgY2h1bmtfc2l6ZSwgZ3Jhbl9zaXplKTsKKwkJc2V0X3Zhcl9tdHJyX2FsbChhZGRyZXNzX2JpdHMpOworCQlwcmludGsoS0VSTl9ERUJVRyAiTmV3IHZhcmlhYmxlIE1UUlJzXG4iKTsKKwkJcHJpbnRfb3V0X210cnJfcmFuZ2Vfc3RhdGUoKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJLyogcHJpbnQgb3V0IGFsbCAqLworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JFU1VMVDsgaSsrKQorCQkJbXRycl9wcmludF9vdXRfb25lX3Jlc3VsdChpKTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJtdHJyX2NsZWFudXA6IGNhbiBub3QgZmluZCBvcHRpbWFsIHZhbHVlXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJwbGVhc2Ugc3BlY2lmeSBtdHJyX2dyYW5fc2l6ZS9tdHJyX2NodW5rX3NpemVcbiIpOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQoraW50IF9faW5pdCBtdHJyX2NsZWFudXAodW5zaWduZWQgYWRkcmVzc19iaXRzKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgZGlzYWJsZV9tdHJyX3RyaW07CisKK3N0YXRpYyBpbnQgX19pbml0IGRpc2FibGVfbXRycl90cmltX3NldHVwKGNoYXIgKnN0cikKK3sKKwlkaXNhYmxlX210cnJfdHJpbSA9IDE7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgiZGlzYWJsZV9tdHJyX3RyaW0iLCBkaXNhYmxlX210cnJfdHJpbV9zZXR1cCk7CisKKy8qCisgKiBOZXdlciBBTUQgSzhzIGFuZCBsYXRlciBDUFVzIGhhdmUgYSBzcGVjaWFsIG1hZ2ljIE1TUiB3YXkgdG8gZm9yY2UgV0IKKyAqIGZvciBtZW1vcnkgPjRHQi4gQ2hlY2sgZm9yIHRoYXQgaGVyZS4KKyAqIE5vdGUgdGhpcyB3b24ndCBjaGVjayBpZiB0aGUgTVRSUnMgPCA0R0Igd2hlcmUgdGhlIG1hZ2ljIGJpdCBkb2Vzbid0CisgKiBhcHBseSB0byBhcmUgd3JvbmcsIGJ1dCBzbyBmYXIgd2UgZG9uJ3Qga25vdyBvZiBhbnkgc3VjaCBjYXNlIGluIHRoZSB3aWxkLgorICovCisjZGVmaW5lIFRvbTJFbmFibGVkICgxVSA8PCAyMSkKKyNkZWZpbmUgVG9tMkZvcmNlTWVtVHlwZVdCICgxVSA8PCAyMikKKworaW50IF9faW5pdCBhbWRfc3BlY2lhbF9kZWZhdWx0X210cnIodm9pZCkKK3sKKwl1MzIgbCwgaDsKKworCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQpCisJCXJldHVybiAwOworCWlmIChib290X2NwdV9kYXRhLng4NiA8IDB4ZiB8fCBib290X2NwdV9kYXRhLng4NiA+IDB4MTEpCisJCXJldHVybiAwOworCS8qIEluIGNhc2Ugc29tZSBoeXBlcnZpc29yIGRvZXNuJ3QgcGFzcyBTWVNDRkcgdGhyb3VnaCAqLworCWlmIChyZG1zcl9zYWZlKE1TUl9LOF9TWVNDRkcsICZsLCAmaCkgPCAwKQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIE1lbW9yeSBiZXR3ZWVuIDRHQiBhbmQgdG9wIG9mIG1lbSBpcyBmb3JjZWQgV0IgYnkgdGhpcyBtYWdpYyBiaXQuCisJICogUmVzZXJ2ZWQgYmVmb3JlIEs4UmV2RiwgYnV0IHNob3VsZCBiZSB6ZXJvIHRoZXJlLgorCSAqLworCWlmICgobCAmIChUb20yRW5hYmxlZCB8IFRvbTJGb3JjZU1lbVR5cGVXQikpID09CisJCSAoVG9tMkVuYWJsZWQgfCBUb20yRm9yY2VNZW1UeXBlV0IpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU2NCBfX2luaXQgcmVhbF90cmltX21lbW9yeSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGxpbWl0X3BmbikKK3sKKwl1NjQgdHJpbV9zdGFydCwgdHJpbV9zaXplOworCXRyaW1fc3RhcnQgPSBzdGFydF9wZm47CisJdHJpbV9zdGFydCA8PD0gUEFHRV9TSElGVDsKKwl0cmltX3NpemUgPSBsaW1pdF9wZm47CisJdHJpbV9zaXplIDw8PSBQQUdFX1NISUZUOworCXRyaW1fc2l6ZSAtPSB0cmltX3N0YXJ0OworCisJcmV0dXJuIGU4MjBfdXBkYXRlX3JhbmdlKHRyaW1fc3RhcnQsIHRyaW1fc2l6ZSwgRTgyMF9SQU0sCisJCQkJRTgyMF9SRVNFUlZFRCk7Cit9CisvKioKKyAqIG10cnJfdHJpbV91bmNhY2hlZF9tZW1vcnkgLSB0cmltIFJBTSBub3QgY292ZXJlZCBieSBNVFJScworICogQGVuZF9wZm46IGVuZGluZyBwYWdlIGZyYW1lIG51bWJlcgorICoKKyAqIFNvbWUgYnVnZ3kgQklPU2VzIGRvbid0IHNldHVwIHRoZSBNVFJScyBwcm9wZXJseSBmb3Igc3lzdGVtcyB3aXRoIGNlcnRhaW4KKyAqIG1lbW9yeSBjb25maWd1cmF0aW9ucy4gIFRoaXMgcm91dGluZSBjaGVja3MgdGhhdCB0aGUgaGlnaGVzdCBNVFJSIG1hdGNoZXMKKyAqIHRoZSBlbmQgb2YgbWVtb3J5LCB0byBtYWtlIHN1cmUgdGhlIE1UUlJzIGhhdmluZyBhIHdyaXRlIGJhY2sgdHlwZSBjb3ZlcgorICogYWxsIG9mIHRoZSBtZW1vcnkgdGhlIGtlcm5lbCBpcyBpbnRlbmRpbmcgdG8gdXNlLiBJZiBub3QsIGl0J2xsIHRyaW0gYW55CisgKiBtZW1vcnkgb2ZmIHRoZSBlbmQgYnkgYWRqdXN0aW5nIGVuZF9wZm4sIHJlbW92aW5nIGl0IGZyb20gdGhlIGtlcm5lbCdzCisgKiBhbGxvY2F0aW9uIHBvb2xzLCB3YXJuaW5nIHRoZSB1c2VyIHdpdGggYW4gb2Jub3hpb3VzIG1lc3NhZ2UuCisgKi8KK2ludCBfX2luaXQgbXRycl90cmltX3VuY2FjaGVkX21lbW9yeSh1bnNpZ25lZCBsb25nIGVuZF9wZm4pCit7CisJdW5zaWduZWQgbG9uZyBpLCBiYXNlLCBzaXplLCBoaWdoZXN0X3BmbiA9IDAsIGRlZiwgZHVtbXk7CisJbXRycl90eXBlIHR5cGU7CisJdTY0IHRvdGFsX3RyaW1fc2l6ZTsKKworCS8qIGV4dHJhIG9uZSBmb3IgYWxsIDAgKi8KKwlpbnQgbnVtW01UUlJfTlVNX1RZUEVTICsgMV07CisJLyoKKwkgKiBNYWtlIHN1cmUgd2Ugb25seSB0cmltIHVuY2FjaGFibGUgbWVtb3J5IG9uIG1hY2hpbmVzIHRoYXQKKwkgKiBzdXBwb3J0IHRoZSBJbnRlbCBNVFJSIGFyY2hpdGVjdHVyZToKKwkgKi8KKwlpZiAoIWlzX2NwdShJTlRFTCkgfHwgZGlzYWJsZV9tdHJyX3RyaW0pCisJCXJldHVybiAwOworCXJkbXNyKE1UUlJkZWZUeXBlX01TUiwgZGVmLCBkdW1teSk7CisJZGVmICY9IDB4ZmY7CisJaWYgKGRlZiAhPSBNVFJSX1RZUEVfVU5DQUNIQUJMRSkKKwkJcmV0dXJuIDA7CisKKwkvKiBnZXQgaXQgYW5kIHN0b3JlIGl0IGFzaWRlICovCisJbWVtc2V0KHJhbmdlX3N0YXRlLCAwLCBzaXplb2YocmFuZ2Vfc3RhdGUpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgeworCQltdHJyX2lmLT5nZXQoaSwgJmJhc2UsICZzaXplLCAmdHlwZSk7CisJCXJhbmdlX3N0YXRlW2ldLmJhc2VfcGZuID0gYmFzZTsKKwkJcmFuZ2Vfc3RhdGVbaV0uc2l6ZV9wZm4gPSBzaXplOworCQlyYW5nZV9zdGF0ZVtpXS50eXBlID0gdHlwZTsKKwl9CisKKwkvKiBGaW5kIGhpZ2hlc3QgY2FjaGVkIHBmbiAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7CisJCXR5cGUgPSByYW5nZV9zdGF0ZVtpXS50eXBlOworCQlpZiAodHlwZSAhPSBNVFJSX1RZUEVfV1JCQUNLKQorCQkJY29udGludWU7CisJCWJhc2UgPSByYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbjsKKwkJc2l6ZSA9IHJhbmdlX3N0YXRlW2ldLnNpemVfcGZuOworCQlpZiAoaGlnaGVzdF9wZm4gPCBiYXNlICsgc2l6ZSkKKwkJCWhpZ2hlc3RfcGZuID0gYmFzZSArIHNpemU7CisJfQorCisJLyoga3ZtL3FlbXUgZG9lc24ndCBoYXZlIG10cnIgc2V0IHJpZ2h0LCBkb24ndCB0cmltIHRoZW0gYWxsICovCisJaWYgKCFoaWdoZXN0X3BmbikgeworCQlwcmludGsoS0VSTl9JTkZPICJDUFUgTVRSUnMgYWxsIGJsYW5rIC0gdmlydHVhbGl6ZWQgc3lzdGVtLlxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIGNoZWNrIGVudHJpZXMgbnVtYmVyICovCisJbWVtc2V0KG51bSwgMCwgc2l6ZW9mKG51bSkpOworCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7CisJCXR5cGUgPSByYW5nZV9zdGF0ZVtpXS50eXBlOworCQlpZiAodHlwZSA+PSBNVFJSX05VTV9UWVBFUykKKwkJCWNvbnRpbnVlOworCQlzaXplID0gcmFuZ2Vfc3RhdGVbaV0uc2l6ZV9wZm47CisJCWlmICghc2l6ZSkKKwkJCXR5cGUgPSBNVFJSX05VTV9UWVBFUzsKKwkJbnVtW3R5cGVdKys7CisJfQorCisJLyogbm8gZW50cnkgZm9yIFdCPyAqLworCWlmICghbnVtW01UUlJfVFlQRV9XUkJBQ0tdKQorCQlyZXR1cm4gMDsKKworCS8qIGNoZWNrIGlmIHdlIG9ubHkgaGFkIFdCIGFuZCBVQyAqLworCWlmIChudW1bTVRSUl9UWVBFX1dSQkFDS10gKyBudW1bTVRSUl9UWVBFX1VOQ0FDSEFCTEVdICE9CisJCW51bV92YXJfcmFuZ2VzIC0gbnVtW01UUlJfTlVNX1RZUEVTXSkKKwkJcmV0dXJuIDA7CisKKwltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihyYW5nZSkpOworCW5yX3JhbmdlID0gMDsKKwlpZiAobXRycl90b20yKSB7CisJCXJhbmdlW25yX3JhbmdlXS5zdGFydCA9ICgxVUxMPDwoMzIgLSBQQUdFX1NISUZUKSk7CisJCXJhbmdlW25yX3JhbmdlXS5lbmQgPSAobXRycl90b20yID4+IFBBR0VfU0hJRlQpIC0gMTsKKwkJaWYgKGhpZ2hlc3RfcGZuIDwgcmFuZ2VbbnJfcmFuZ2VdLmVuZCArIDEpCisJCQloaWdoZXN0X3BmbiA9IHJhbmdlW25yX3JhbmdlXS5lbmQgKyAxOworCQlucl9yYW5nZSsrOworCX0KKwlucl9yYW5nZSA9IHg4Nl9nZXRfbXRycl9tZW1fcmFuZ2UocmFuZ2UsIG5yX3JhbmdlLCAwLCAwKTsKKworCXRvdGFsX3RyaW1fc2l6ZSA9IDA7CisJLyogY2hlY2sgdGhlIGhlYWQgKi8KKwlpZiAocmFuZ2VbMF0uc3RhcnQpCisJCXRvdGFsX3RyaW1fc2l6ZSArPSByZWFsX3RyaW1fbWVtb3J5KDAsIHJhbmdlWzBdLnN0YXJ0KTsKKwkvKiBjaGVjayB0aGUgaG9sZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2UgLSAxOyBpKyspIHsKKwkJaWYgKHJhbmdlW2ldLmVuZCArIDEgPCByYW5nZVtpKzFdLnN0YXJ0KQorCQkJdG90YWxfdHJpbV9zaXplICs9IHJlYWxfdHJpbV9tZW1vcnkocmFuZ2VbaV0uZW5kICsgMSwKKwkJCQkJCQkgICAgcmFuZ2VbaSsxXS5zdGFydCk7CisJfQorCS8qIGNoZWNrIHRoZSB0b3AgKi8KKwlpID0gbnJfcmFuZ2UgLSAxOworCWlmIChyYW5nZVtpXS5lbmQgKyAxIDwgZW5kX3BmbikKKwkJdG90YWxfdHJpbV9zaXplICs9IHJlYWxfdHJpbV9tZW1vcnkocmFuZ2VbaV0uZW5kICsgMSwKKwkJCQkJCQkgZW5kX3Bmbik7CisKKwlpZiAodG90YWxfdHJpbV9zaXplKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIldBUk5JTkc6IEJJT1MgYnVnOiBDUFUgTVRSUnMgZG9uJ3QgY292ZXIiCisJCQkiIGFsbCBvZiBtZW1vcnksIGxvc2luZyAlbGx1TUIgb2YgUkFNLlxuIiwKKwkJCXRvdGFsX3RyaW1fc2l6ZSA+PiAyMCk7CisKKwkJaWYgKCFjaGFuZ2VkX2J5X210cnJfY2xlYW51cCkKKwkJCVdBUk5fT04oMSk7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAidXBkYXRlIGU4MjAgZm9yIG10cnJcbiIpOworCQl1cGRhdGVfZTgyMCgpOworCisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYwppbmRleCAwYzBhNDU1Li4zN2YyOGZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKQEAgLTMzLDEzICszMywzMSBAQAogc3RydWN0IG10cnJfc3RhdGVfdHlwZSBtdHJyX3N0YXRlID0ge307CiBFWFBPUlRfU1lNQk9MX0dQTChtdHJyX3N0YXRlKTsKIAotc3RhdGljIGludCBfX2luaXRkYXRhIG10cnJfc2hvdzsKLXN0YXRpYyBpbnQgX19pbml0IG10cnJfZGVidWcoY2hhciAqb3B0KQorLyoqCisgKiBCSU9TIGlzIGV4cGVjdGVkIHRvIGNsZWFyIE10cnJGaXhEcmFtTW9kRW4gYml0LCBzZWUgZm9yIGV4YW1wbGUKKyAqICJCSU9TIGFuZCBLZXJuZWwgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIHRoZSBBTUQgQXRobG9uIDY0IGFuZCBBTUQKKyAqIE9wdGVyb24gUHJvY2Vzc29ycyIgKDI2MDk0IFJldi4gMy4zMCBGZWJydWFyeSAyMDA2KSwgc2VjdGlvbgorICogIjEzLjIuMS4yIFNZU0NGRyBSZWdpc3RlciI6ICJUaGUgTXRyckZpeERyYW1Nb2RFbiBiaXQgc2hvdWxkIGJlIHNldAorICogdG8gMSBkdXJpbmcgQklPUyBpbml0YWxpemF0aW9uIG9mIHRoZSBmaXhlZCBNVFJScywgdGhlbiBjbGVhcmVkIHRvCisgKiAwIGZvciBvcGVyYXRpb24uIgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgazhfY2hlY2tfc3lzY2ZnX2RyYW1fbW9kX2VuKHZvaWQpCiB7Ci0JbXRycl9zaG93ID0gMTsKLQlyZXR1cm4gMDsKKwl1MzIgbG8sIGhpOworCisJaWYgKCEoKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkgJiYKKwkgICAgICAoYm9vdF9jcHVfZGF0YS54ODYgPj0gMHgwZikpKQorCQlyZXR1cm47CisKKwlyZG1zcihNU1JfSzhfU1lTQ0ZHLCBsbywgaGkpOworCWlmIChsbyAmIEs4X01UUlJGSVhSQU5HRV9EUkFNX01PRElGWSkgeworCQlwcmludGsoS0VSTl9FUlIgRldfV0FSTiAiTVRSUjogQ1BVICV1OiBTWVNDRkdbTXRyckZpeERyYW1Nb2RFbl0iCisJCSAgICAgICAiIG5vdCBjbGVhcmVkIGJ5IEJJT1MsIGNsZWFyaW5nIHRoaXMgYml0XG4iLAorCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwkJbG8gJj0gfks4X01UUlJGSVhSQU5HRV9EUkFNX01PRElGWTsKKwkJbXRycl93cm1zcihNU1JfSzhfU1lTQ0ZHLCBsbywgaGkpOworCX0KIH0KLWVhcmx5X3BhcmFtKCJtdHJyLnNob3ciLCBtdHJyX2RlYnVnKTsKIAogLyoKICAqIFJldHVybnMgdGhlIGVmZmVjdGl2ZSBNVFJSIHR5cGUgZm9yIHRoZSByZWdpb24KQEAgLTE3NCw2ICsxOTIsOCBAQAogCXVuc2lnbmVkIGludCAqcCA9ICh1bnNpZ25lZCBpbnQgKikgZnJzOwogCWludCBpOwogCisJazhfY2hlY2tfc3lzY2ZnX2RyYW1fbW9kX2VuKCk7CisKIAlyZG1zcihNVFJSZml4NjRLXzAwMDAwX01TUiwgcFswXSwgcFsxXSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQpAQCAtMTg4LDE4ICsyMDgsOTQgQEAKIAkJZ2V0X2ZpeGVkX3JhbmdlcyhtdHJyX3N0YXRlLmZpeGVkX3Jhbmdlcyk7CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50X2ZpeGVkKHVuc2lnbmVkIGJhc2UsIHVuc2lnbmVkIHN0ZXAsIGNvbnN0IG10cnJfdHlwZSp0eXBlcykKK3N0YXRpYyB1bnNpZ25lZCBfX2luaXRkYXRhIGxhc3RfZml4ZWRfc3RhcnQ7CitzdGF0aWMgdW5zaWduZWQgX19pbml0ZGF0YSBsYXN0X2ZpeGVkX2VuZDsKK3N0YXRpYyBtdHJyX3R5cGUgX19pbml0ZGF0YSBsYXN0X2ZpeGVkX3R5cGU7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwcmludF9maXhlZF9sYXN0KHZvaWQpCit7CisJaWYgKCFsYXN0X2ZpeGVkX2VuZCkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiAgJTA1WC0lMDVYICVzXG4iLCBsYXN0X2ZpeGVkX3N0YXJ0LAorCQlsYXN0X2ZpeGVkX2VuZCAtIDEsIG10cnJfYXR0cmliX3RvX3N0cihsYXN0X2ZpeGVkX3R5cGUpKTsKKworCWxhc3RfZml4ZWRfZW5kID0gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHVwZGF0ZV9maXhlZF9sYXN0KHVuc2lnbmVkIGJhc2UsIHVuc2lnbmVkIGVuZCwKKwkJCQkgICAgICAgbXRycl90eXBlIHR5cGUpCit7CisJbGFzdF9maXhlZF9zdGFydCA9IGJhc2U7CisJbGFzdF9maXhlZF9lbmQgPSBlbmQ7CisJbGFzdF9maXhlZF90eXBlID0gdHlwZTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHByaW50X2ZpeGVkKHVuc2lnbmVkIGJhc2UsIHVuc2lnbmVkIHN0ZXAsCisJCQkgICAgICAgY29uc3QgbXRycl90eXBlICp0eXBlcykKIHsKIAl1bnNpZ25lZCBpOwogCi0JZm9yIChpID0gMDsgaSA8IDg7ICsraSwgKyt0eXBlcywgYmFzZSArPSBzdGVwKQotCQlwcmludGsoS0VSTl9JTkZPICJNVFJSICUwNVgtJTA1WCAlc1xuIiwKLQkJCWJhc2UsIGJhc2UgKyBzdGVwIC0gMSwgbXRycl9hdHRyaWJfdG9fc3RyKCp0eXBlcykpOworCWZvciAoaSA9IDA7IGkgPCA4OyArK2ksICsrdHlwZXMsIGJhc2UgKz0gc3RlcCkgeworCQlpZiAobGFzdF9maXhlZF9lbmQgPT0gMCkgeworCQkJdXBkYXRlX2ZpeGVkX2xhc3QoYmFzZSwgYmFzZSArIHN0ZXAsICp0eXBlcyk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobGFzdF9maXhlZF9lbmQgPT0gYmFzZSAmJiBsYXN0X2ZpeGVkX3R5cGUgPT0gKnR5cGVzKSB7CisJCQlsYXN0X2ZpeGVkX2VuZCA9IGJhc2UgKyBzdGVwOworCQkJY29udGludWU7CisJCX0KKwkJLyogbmV3IHNlZ21lbnRzOiBnYXAgb3IgZGlmZmVyZW50IHR5cGUgKi8KKwkJcHJpbnRfZml4ZWRfbGFzdCgpOworCQl1cGRhdGVfZml4ZWRfbGFzdChiYXNlLCBiYXNlICsgc3RlcCwgKnR5cGVzKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHByZXBhcmVfc2V0KHZvaWQpOwogc3RhdGljIHZvaWQgcG9zdF9zZXQodm9pZCk7CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBwcmludF9tdHJyX3N0YXRlKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGhpZ2hfd2lkdGg7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBkZWZhdWx0IHR5cGU6ICVzXG4iLAorCQkJIG10cnJfYXR0cmliX3RvX3N0cihtdHJyX3N0YXRlLmRlZl90eXBlKSk7CisJaWYgKG10cnJfc3RhdGUuaGF2ZV9maXhlZCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBmaXhlZCByYW5nZXMgJXNhYmxlZDpcbiIsCisJCSAgICAgICBtdHJyX3N0YXRlLmVuYWJsZWQgJiAxID8gImVuIiA6ICJkaXMiKTsKKwkJcHJpbnRfZml4ZWQoMHgwMDAwMCwgMHgxMDAwMCwgbXRycl9zdGF0ZS5maXhlZF9yYW5nZXMgKyAwKTsKKwkJZm9yIChpID0gMDsgaSA8IDI7ICsraSkKKwkJCXByaW50X2ZpeGVkKDB4ODAwMDAgKyBpICogMHgyMDAwMCwgMHgwNDAwMCwgbXRycl9zdGF0ZS5maXhlZF9yYW5nZXMgKyAoaSArIDEpICogOCk7CisJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCisJCQlwcmludF9maXhlZCgweEMwMDAwICsgaSAqIDB4MDgwMDAsIDB4MDEwMDAsIG10cnJfc3RhdGUuZml4ZWRfcmFuZ2VzICsgKGkgKyAzKSAqIDgpOworCisJCS8qIHRhaWwgKi8KKwkJcHJpbnRfZml4ZWRfbGFzdCgpOworCX0KKwlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiB2YXJpYWJsZSByYW5nZXMgJXNhYmxlZDpcbiIsCisJICAgICAgIG10cnJfc3RhdGUuZW5hYmxlZCAmIDIgPyAiZW4iIDogImRpcyIpOworCWhpZ2hfd2lkdGggPSAoKHNpemVfb3JfbWFzayA/IGZmcyhzaXplX29yX21hc2spIC0gMSA6IDMyKSAtICgzMiAtIFBBR0VfU0hJRlQpICsgMykgLyA0OworCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgKytpKSB7CisJCWlmIChtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0ubWFza19sbyAmICgxIDw8IDExKSkKKwkJCXByaW50ayhLRVJOX0RFQlVHICIgICV1IGJhc2UgJTAqWCUwNVgwMDAgbWFzayAlMCpYJTA1WDAwMCAlc1xuIiwKKwkJCSAgICAgICBpLAorCQkJICAgICAgIGhpZ2hfd2lkdGgsCisJCQkgICAgICAgbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLmJhc2VfaGksCisJCQkgICAgICAgbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLmJhc2VfbG8gPj4gMTIsCisJCQkgICAgICAgaGlnaF93aWR0aCwKKwkJCSAgICAgICBtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0ubWFza19oaSwKKwkJCSAgICAgICBtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0ubWFza19sbyA+PiAxMiwKKwkJCSAgICAgICBtdHJyX2F0dHJpYl90b19zdHIobXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLmJhc2VfbG8gJiAweGZmKSk7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0RFQlVHICIgICV1IGRpc2FibGVkXG4iLCBpKTsKKwl9CisJaWYgKG10cnJfdG9tMikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiVE9NMjogJTAxNmxseCBha2EgJWxsZE1cbiIsCisJCQkJICBtdHJyX3RvbTIsIG10cnJfdG9tMj4+MjApOworCX0KK30KKwogLyogIEdyYWIgYWxsIG9mIHRoZSBNVFJSIHN0YXRlIGZvciB0aGlzIENQVSBpbnRvICpzdGF0ZSAgKi8KIHZvaWQgX19pbml0IGdldF9tdHJyX3N0YXRlKHZvaWQpCiB7CkBAIC0yMzEsNDEgKzMyNyw5IEBACiAJCW10cnJfdG9tMiB8PSBsb3c7CiAJCW10cnJfdG9tMiAmPSAweGZmZmZmZjgwMDAwMFVMTDsKIAl9Ci0JaWYgKG10cnJfc2hvdykgewotCQlpbnQgaGlnaF93aWR0aDsKIAotCQlwcmludGsoS0VSTl9JTkZPICJNVFJSIGRlZmF1bHQgdHlwZTogJXNcbiIsIG10cnJfYXR0cmliX3RvX3N0cihtdHJyX3N0YXRlLmRlZl90eXBlKSk7Ci0JCWlmIChtdHJyX3N0YXRlLmhhdmVfZml4ZWQpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIk1UUlIgZml4ZWQgcmFuZ2VzICVzYWJsZWQ6XG4iLAotCQkJICAgICAgIG10cnJfc3RhdGUuZW5hYmxlZCAmIDEgPyAiZW4iIDogImRpcyIpOwotCQkJcHJpbnRfZml4ZWQoMHgwMDAwMCwgMHgxMDAwMCwgbXRycl9zdGF0ZS5maXhlZF9yYW5nZXMgKyAwKTsKLQkJCWZvciAoaSA9IDA7IGkgPCAyOyArK2kpCi0JCQkJcHJpbnRfZml4ZWQoMHg4MDAwMCArIGkgKiAweDIwMDAwLCAweDA0MDAwLCBtdHJyX3N0YXRlLmZpeGVkX3JhbmdlcyArIChpICsgMSkgKiA4KTsKLQkJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCi0JCQkJcHJpbnRfZml4ZWQoMHhDMDAwMCArIGkgKiAweDA4MDAwLCAweDAxMDAwLCBtdHJyX3N0YXRlLmZpeGVkX3JhbmdlcyArIChpICsgMykgKiA4KTsKLQkJfQotCQlwcmludGsoS0VSTl9JTkZPICJNVFJSIHZhcmlhYmxlIHJhbmdlcyAlc2FibGVkOlxuIiwKLQkJICAgICAgIG10cnJfc3RhdGUuZW5hYmxlZCAmIDIgPyAiZW4iIDogImRpcyIpOwotCQloaWdoX3dpZHRoID0gKChzaXplX29yX21hc2sgPyBmZnMoc2l6ZV9vcl9tYXNrKSAtIDEgOiAzMikgLSAoMzIgLSBQQUdFX1NISUZUKSArIDMpIC8gNDsKLQkJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyArK2kpIHsKLQkJCWlmIChtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0ubWFza19sbyAmICgxIDw8IDExKSkKLQkJCQlwcmludGsoS0VSTl9JTkZPICJNVFJSICV1IGJhc2UgJTAqWCUwNVgwMDAgbWFzayAlMCpYJTA1WDAwMCAlc1xuIiwKLQkJCQkgICAgICAgaSwKLQkJCQkgICAgICAgaGlnaF93aWR0aCwKLQkJCQkgICAgICAgbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLmJhc2VfaGksCi0JCQkJICAgICAgIG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5iYXNlX2xvID4+IDEyLAotCQkJCSAgICAgICBoaWdoX3dpZHRoLAotCQkJCSAgICAgICBtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0ubWFza19oaSwKLQkJCQkgICAgICAgbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLm1hc2tfbG8gPj4gMTIsCi0JCQkJICAgICAgIG10cnJfYXR0cmliX3RvX3N0cihtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0uYmFzZV9sbyAmIDB4ZmYpKTsKLQkJCWVsc2UKLQkJCQlwcmludGsoS0VSTl9JTkZPICJNVFJSICV1IGRpc2FibGVkXG4iLCBpKTsKLQkJfQotCQlpZiAobXRycl90b20yKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJUT00yOiAlMDE2bGx4IGFrYSAlbGxkTVxuIiwKLQkJCQkJICBtdHJyX3RvbTIsIG10cnJfdG9tMj4+MjApOwotCQl9Ci0JfQorCXByaW50X210cnJfc3RhdGUoKTsKKwogCW10cnJfc3RhdGVfc2V0ID0gMTsKIAogCS8qIFBBVCBzZXR1cCBmb3IgQlAuIFdlIG5lZWQgdG8gZ28gdGhyb3VnaCBzeW5jIHN0ZXBzIGhlcmUgKi8KQEAgLTMwOCwyNyArMzcyLDEwIEBACiB9CiAKIC8qKgotICogRW5hYmxlIGFuZCBhbGxvdyByZWFkL3dyaXRlIG9mIGV4dGVuZGVkIGZpeGVkLXJhbmdlIE1UUlIgYml0cyBvbiBLOCBDUFVzCi0gKiBzZWUgQU1EIHB1YmxpY2F0aW9uIG5vLiAyNDU5MywgY2hhcHRlciAzLjIuMSBmb3IgbW9yZSBpbmZvcm1hdGlvbgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgazhfZW5hYmxlX2ZpeGVkX2lvcnJzKHZvaWQpCi17Ci0JdW5zaWduZWQgbG8sIGhpOwotCi0JcmRtc3IoTVNSX0s4X1NZU0NGRywgbG8sIGhpKTsKLQltdHJyX3dybXNyKE1TUl9LOF9TWVNDRkcsIGxvCi0JCQkJfCBLOF9NVFJSRklYUkFOR0VfRFJBTV9FTkFCTEUKLQkJCQl8IEs4X01UUlJGSVhSQU5HRV9EUkFNX01PRElGWSwgaGkpOwotfQotCi0vKioKICAqIHNldF9maXhlZF9yYW5nZSAtIGNoZWNrcyAmIHVwZGF0ZXMgYSBmaXhlZC1yYW5nZSBNVFJSIGlmIGl0IGRpZmZlcnMgZnJvbSB0aGUgdmFsdWUgaXQgc2hvdWxkIGhhdmUKICAqIEBtc3I6IE1TUiBhZGRyZXNzIG9mIHRoZSBNVFRSIHdoaWNoIHNob3VsZCBiZSBjaGVja2VkIGFuZCB1cGRhdGVkCiAgKiBAY2hhbmdlZDogcG9pbnRlciB3aGljaCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgTVRSUiBuZWVkZWQgdG8gYmUgY2hhbmdlZAogICogQG1zcndvcmRzOiBwb2ludGVyIHRvIHRoZSBNU1IgdmFsdWVzIHdoaWNoIHRoZSBNU1Igc2hvdWxkIGhhdmUKLSAqCi0gKiBJZiBLOCBleHRlbnRpb25zIGFyZSB3YW50ZWQsIHVwZGF0ZSB0aGUgSzggU1lTQ0ZHIE1TUiBhbHNvLgotICogU2VlIEFNRCBwdWJsaWNhdGlvbiBuby4gMjQ1OTMsIGNoYXB0ZXIgNy44LjEsIHBhZ2UgMjMzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICovCiBzdGF0aWMgdm9pZCBzZXRfZml4ZWRfcmFuZ2UoaW50IG1zciwgYm9vbCAqY2hhbmdlZCwgdW5zaWduZWQgaW50ICptc3J3b3JkcykKIHsKQEAgLTMzNywxMCArMzg0LDYgQEAKIAlyZG1zcihtc3IsIGxvLCBoaSk7CiAKIAlpZiAobG8gIT0gbXNyd29yZHNbMF0gfHwgaGkgIT0gbXNyd29yZHNbMV0pIHsKLQkJaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCAmJgotCQkgICAgKGJvb3RfY3B1X2RhdGEueDg2ID49IDB4MGYgJiYgYm9vdF9jcHVfZGF0YS54ODYgPD0gMHgxMSkgJiYKLQkJICAgICgobXNyd29yZHNbMF0gfCBtc3J3b3Jkc1sxXSkgJiBLOF9NVFJSX1JETUVNX1dSTUVNX01BU0spKQotCQkJazhfZW5hYmxlX2ZpeGVkX2lvcnJzKCk7CiAJCW10cnJfd3Jtc3IobXNyLCBtc3J3b3Jkc1swXSwgbXNyd29yZHNbMV0pOwogCQkqY2hhbmdlZCA9IHRydWU7CiAJfQpAQCAtMzc2LDIyICs0MTksMzEgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbWFza19sbywgbWFza19oaSwgYmFzZV9sbywgYmFzZV9oaTsKIAl1bnNpZ25lZCBpbnQgdG1wLCBoaTsKKwlpbnQgY3B1OworCisJLyoKKwkgKiBnZXRfbXRyciBkb2Vzbid0IG5lZWQgdG8gdXBkYXRlIG10cnJfc3RhdGUsIGFsc28gaXQgY291bGQgYmUgY2FsbGVkCisJICogZnJvbSBhbnkgY3B1LCBzbyB0cnkgdG8gcHJpbnQgaXQgb3V0IGRpcmVjdGx5LgorCSAqLworCWNwdSA9IGdldF9jcHUoKTsKIAogCXJkbXNyKE1UUlJwaHlzTWFza19NU1IocmVnKSwgbWFza19sbywgbWFza19oaSk7CisKIAlpZiAoKG1hc2tfbG8gJiAweDgwMCkgPT0gMCkgewogCQkvKiAgSW52YWxpZCAoaS5lLiBmcmVlKSByYW5nZSAgKi8KIAkJKmJhc2UgPSAwOwogCQkqc2l6ZSA9IDA7CiAJCSp0eXBlID0gMDsKLQkJcmV0dXJuOworCQlnb3RvIG91dF9wdXRfY3B1OwogCX0KIAogCXJkbXNyKE1UUlJwaHlzQmFzZV9NU1IocmVnKSwgYmFzZV9sbywgYmFzZV9oaSk7CiAKLQkvKiBXb3JrIG91dCB0aGUgc2hpZnRlZCBhZGRyZXNzIG1hc2suICovCisJLyogV29yayBvdXQgdGhlIHNoaWZ0ZWQgYWRkcmVzcyBtYXNrOiAqLwogCXRtcCA9IG1hc2tfaGkgPDwgKDMyIC0gUEFHRV9TSElGVCkgfCBtYXNrX2xvID4+IFBBR0VfU0hJRlQ7CiAJbWFza19sbyA9IHNpemVfb3JfbWFzayB8IHRtcDsKLQkvKiBFeHBhbmQgdG1wIHdpdGggaGlnaCBiaXRzIHRvIGFsbCAxcyovCisKKwkvKiBFeHBhbmQgdG1wIHdpdGggaGlnaCBiaXRzIHRvIGFsbCAxczogKi8KIAloaSA9IGZscyh0bXApOwogCWlmIChoaSA+IDApIHsKIAkJdG1wIHw9IH4oKDE8PChoaSAtIDEpKSAtIDEpOwpAQCAtNDAyLDExICs0NTQsMTkgQEAKIAkJfQogCX0KIAotCS8qIFRoaXMgd29ya3MgY29ycmVjdGx5IGlmIHNpemUgaXMgYSBwb3dlciBvZiB0d28sIGkuZS4gYQotCSAgIGNvbnRpZ3VvdXMgcmFuZ2UuICovCisJLyoKKwkgKiBUaGlzIHdvcmtzIGNvcnJlY3RseSBpZiBzaXplIGlzIGEgcG93ZXIgb2YgdHdvLCBpLmUuIGEKKwkgKiBjb250aWd1b3VzIHJhbmdlOgorCSAqLwogCSpzaXplID0gLW1hc2tfbG87CiAJKmJhc2UgPSBiYXNlX2hpIDw8ICgzMiAtIFBBR0VfU0hJRlQpIHwgYmFzZV9sbyA+PiBQQUdFX1NISUZUOwogCSp0eXBlID0gYmFzZV9sbyAmIDB4ZmY7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiICBnZXRfbXRycjogY3B1JWQgcmVnJTAyZCBiYXNlPSUwMTBseCBzaXplPSUwMTBseCAlc1xuIiwKKwkJCWNwdSwgcmVnLCAqYmFzZSwgKnNpemUsCisJCQltdHJyX2F0dHJpYl90b19zdHIoKnR5cGUgJiAweGZmKSk7CitvdXRfcHV0X2NwdToKKwlwdXRfY3B1KCk7CiB9CiAKIC8qKgpAQCAtNDE5LDYgKzQ3OSw4IEBACiAJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAJaW50IGJsb2NrPS0xLCByYW5nZTsKIAorCWs4X2NoZWNrX3N5c2NmZ19kcmFtX21vZF9lbigpOworCiAJd2hpbGUgKGZpeGVkX3JhbmdlX2Jsb2Nrc1srK2Jsb2NrXS5yYW5nZXMpCiAJICAgIGZvciAocmFuZ2U9MDsgcmFuZ2UgPCBmaXhlZF9yYW5nZV9ibG9ja3NbYmxvY2tdLnJhbmdlczsgcmFuZ2UrKykKIAkJc2V0X2ZpeGVkX3JhbmdlKGZpeGVkX3JhbmdlX2Jsb2Nrc1tibG9ja10uYmFzZV9tc3IgKyByYW5nZSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2lmLmMKaW5kZXggNGM0MjE0Ni4uZmI3M2E1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2lmLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2lmLmMKQEAgLTM3NywxMCArMzc3LDYgQEAKIAkucmVsZWFzZSA9IG10cnJfY2xvc2UsCiB9OwogCi0KLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2Nfcm9vdF9tdHJyOwotCi0KIHN0YXRpYyBpbnQgbXRycl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewogCWNoYXIgZmFjdG9yOwpAQCAtNDIzLDExICs0MTksNyBAQAogCSAgICAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfQ0VOVEFVUl9NQ1IpKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlwcm9jX3Jvb3RfbXRyciA9Ci0JCXByb2NfY3JlYXRlKCJtdHJyIiwgU19JV1VTUiB8IFNfSVJVR08sIE5VTEwsICZtdHJyX2ZvcHMpOwotCi0JaWYgKHByb2Nfcm9vdF9tdHJyKQotCQlwcm9jX3Jvb3RfbXRyci0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlwcm9jX2NyZWF0ZSgibXRyciIsIFNfSVdVU1IgfCBTX0lSVUdPLCBOVUxMLCAmbXRycl9mb3BzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKaW5kZXggMjM2YTQwMS4uMDNjZGEwMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCkBAIC01NzQsNyArNTc0LDcgQEAKIAl1bnNpZ25lZCBsb25nCWxzaXplOwogfTsKIAotc3RhdGljIHN0cnVjdCBtdHJyX3ZhbHVlIG10cnJfc3RhdGVbTVRSUl9NQVhfVkFSX1JBTkdFU107CitzdGF0aWMgc3RydWN0IG10cnJfdmFsdWUgbXRycl92YWx1ZVtNVFJSX01BWF9WQVJfUkFOR0VTXTsKIAogc3RhdGljIGludCBtdHJyX3NhdmUoc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTU4Miw5ICs1ODIsOSBAQAogCiAJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKIAkJbXRycl9pZi0+Z2V0KGksCi0JCQkgICAgICZtdHJyX3N0YXRlW2ldLmxiYXNlLAotCQkJICAgICAmbXRycl9zdGF0ZVtpXS5sc2l6ZSwKLQkJCSAgICAgJm10cnJfc3RhdGVbaV0ubHR5cGUpOworCQkJICAgICAmbXRycl92YWx1ZVtpXS5sYmFzZSwKKwkJCSAgICAgJm10cnJfdmFsdWVbaV0ubHNpemUsCisJCQkgICAgICZtdHJyX3ZhbHVlW2ldLmx0eXBlKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC01OTQsMTEgKzU5NCwxMSBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKLQkJaWYgKG10cnJfc3RhdGVbaV0ubHNpemUpIAorCQlpZiAobXRycl92YWx1ZVtpXS5sc2l6ZSkKIAkJCXNldF9tdHJyKGksCi0JCQkJIG10cnJfc3RhdGVbaV0ubGJhc2UsCi0JCQkJIG10cnJfc3RhdGVbaV0ubHNpemUsCi0JCQkJIG10cnJfc3RhdGVbaV0ubHR5cGUpOworCQkJCSBtdHJyX3ZhbHVlW2ldLmxiYXNlLAorCQkJCSBtdHJyX3ZhbHVlW2ldLmxzaXplLAorCQkJCSBtdHJyX3ZhbHVlW2ldLmx0eXBlKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC02MTAsMTA1OCArNjEwLDcgQEAKIAkucmVzdW1lCQk9IG10cnJfcmVzdG9yZSwKIH07CiAKLS8qIHNob3VsZCBiZSByZWxhdGVkIHRvIE1UUlJfVkFSX1JBTkdFUyBudW1zICovCi0jZGVmaW5lIFJBTkdFX05VTSAyNTYKLQotc3RydWN0IHJlc19yYW5nZSB7Ci0JdW5zaWduZWQgbG9uZyBzdGFydDsKLQl1bnNpZ25lZCBsb25nIGVuZDsKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci1hZGRfcmFuZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwgdW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCS8qIG91dCBvZiBzbG90cyAqLwotCWlmIChucl9yYW5nZSA+PSBSQU5HRV9OVU0pCi0JCXJldHVybiBucl9yYW5nZTsKLQotCXJhbmdlW25yX3JhbmdlXS5zdGFydCA9IHN0YXJ0OwotCXJhbmdlW25yX3JhbmdlXS5lbmQgPSBlbmQ7Ci0KLQlucl9yYW5nZSsrOwotCi0JcmV0dXJuIG5yX3JhbmdlOwotfQotCi1zdGF0aWMgaW50IF9faW5pdAotYWRkX3JhbmdlX3dpdGhfbWVyZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwgdW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCWludCBpOwotCi0JLyogdHJ5IHRvIG1lcmdlIGl0IHdpdGggb2xkIG9uZSAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmluYWxfc3RhcnQsIGZpbmFsX2VuZDsKLQkJdW5zaWduZWQgbG9uZyBjb21tb25fc3RhcnQsIGNvbW1vbl9lbmQ7Ci0KLQkJaWYgKCFyYW5nZVtpXS5lbmQpCi0JCQljb250aW51ZTsKLQotCQljb21tb25fc3RhcnQgPSBtYXgocmFuZ2VbaV0uc3RhcnQsIHN0YXJ0KTsKLQkJY29tbW9uX2VuZCA9IG1pbihyYW5nZVtpXS5lbmQsIGVuZCk7Ci0JCWlmIChjb21tb25fc3RhcnQgPiBjb21tb25fZW5kICsgMSkKLQkJCWNvbnRpbnVlOwotCi0JCWZpbmFsX3N0YXJ0ID0gbWluKHJhbmdlW2ldLnN0YXJ0LCBzdGFydCk7Ci0JCWZpbmFsX2VuZCA9IG1heChyYW5nZVtpXS5lbmQsIGVuZCk7Ci0KLQkJcmFuZ2VbaV0uc3RhcnQgPSBmaW5hbF9zdGFydDsKLQkJcmFuZ2VbaV0uZW5kID0gIGZpbmFsX2VuZDsKLQkJcmV0dXJuIG5yX3JhbmdlOwotCX0KLQotCS8qIG5lZWQgdG8gYWRkIHRoYXQgKi8KLQlyZXR1cm4gYWRkX3JhbmdlKHJhbmdlLCBucl9yYW5nZSwgc3RhcnQsIGVuZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdAotc3VidHJhY3RfcmFuZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCWludCBpLCBqOwotCi0JZm9yIChqID0gMDsgaiA8IFJBTkdFX05VTTsgaisrKSB7Ci0JCWlmICghcmFuZ2Vbal0uZW5kKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHN0YXJ0IDw9IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA+PSByYW5nZVtqXS5lbmQpIHsKLQkJCXJhbmdlW2pdLnN0YXJ0ID0gMDsKLQkJCXJhbmdlW2pdLmVuZCA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChzdGFydCA8PSByYW5nZVtqXS5zdGFydCAmJiBlbmQgPCByYW5nZVtqXS5lbmQgJiYKLQkJICAgIHJhbmdlW2pdLnN0YXJ0IDwgZW5kICsgMSkgewotCQkJcmFuZ2Vbal0uc3RhcnQgPSBlbmQgKyAxOwotCQkJY29udGludWU7Ci0JCX0KLQotCi0JCWlmIChzdGFydCA+IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA+PSByYW5nZVtqXS5lbmQgJiYKLQkJICAgIHJhbmdlW2pdLmVuZCA+IHN0YXJ0IC0gMSkgewotCQkJcmFuZ2Vbal0uZW5kID0gc3RhcnQgLSAxOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoc3RhcnQgPiByYW5nZVtqXS5zdGFydCAmJiBlbmQgPCByYW5nZVtqXS5lbmQpIHsKLQkJCS8qIGZpbmQgdGhlIG5ldyBzcGFyZSAqLwotCQkJZm9yIChpID0gMDsgaSA8IFJBTkdFX05VTTsgaSsrKSB7Ci0JCQkJaWYgKHJhbmdlW2ldLmVuZCA9PSAwKQotCQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChpIDwgUkFOR0VfTlVNKSB7Ci0JCQkJcmFuZ2VbaV0uZW5kID0gcmFuZ2Vbal0uZW5kOwotCQkJCXJhbmdlW2ldLnN0YXJ0ID0gZW5kICsgMTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJydW4gb2Ygc2xvdCBpbiByYW5nZXNcbiIpOwotCQkJfQotCQkJcmFuZ2Vbal0uZW5kID0gc3RhcnQgLSAxOwotCQkJY29udGludWU7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNtcF9yYW5nZShjb25zdCB2b2lkICp4MSwgY29uc3Qgdm9pZCAqeDIpCi17Ci0JY29uc3Qgc3RydWN0IHJlc19yYW5nZSAqcjEgPSB4MTsKLQljb25zdCBzdHJ1Y3QgcmVzX3JhbmdlICpyMiA9IHgyOwotCWxvbmcgc3RhcnQxLCBzdGFydDI7Ci0KLQlzdGFydDEgPSByMS0+c3RhcnQ7Ci0Jc3RhcnQyID0gcjItPnN0YXJ0OwotCi0JcmV0dXJuIHN0YXJ0MSAtIHN0YXJ0MjsKLX0KLQotc3RydWN0IHZhcl9tdHJyX3JhbmdlX3N0YXRlIHsKLQl1bnNpZ25lZCBsb25nIGJhc2VfcGZuOwotCXVuc2lnbmVkIGxvbmcgc2l6ZV9wZm47Ci0JbXRycl90eXBlIHR5cGU7Ci19OwotCi1zdGF0aWMgc3RydWN0IHZhcl9tdHJyX3JhbmdlX3N0YXRlIF9faW5pdGRhdGEgcmFuZ2Vfc3RhdGVbUkFOR0VfTlVNXTsKLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBkZWJ1Z19wcmludDsKLQotc3RhdGljIGludCBfX2luaXQKLXg4Nl9nZXRfbXRycl9tZW1fcmFuZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZXh0cmFfcmVtb3ZlX2Jhc2UsCi0JCSAgICAgICB1bnNpZ25lZCBsb25nIGV4dHJhX3JlbW92ZV9zaXplKQotewotCXVuc2lnbmVkIGxvbmcgaSwgYmFzZSwgc2l6ZTsKLQltdHJyX3R5cGUgdHlwZTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7Ci0JCXR5cGUgPSByYW5nZV9zdGF0ZVtpXS50eXBlOwotCQlpZiAodHlwZSAhPSBNVFJSX1RZUEVfV1JCQUNLKQotCQkJY29udGludWU7Ci0JCWJhc2UgPSByYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbjsKLQkJc2l6ZSA9IHJhbmdlX3N0YXRlW2ldLnNpemVfcGZuOwotCQlucl9yYW5nZSA9IGFkZF9yYW5nZV93aXRoX21lcmdlKHJhbmdlLCBucl9yYW5nZSwgYmFzZSwKLQkJCQkJCWJhc2UgKyBzaXplIC0gMSk7Ci0JfQotCWlmIChkZWJ1Z19wcmludCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiQWZ0ZXIgV0IgY2hlY2tpbmdcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKLQkJCXByaW50ayhLRVJOX0RFQlVHICJNVFJSIE1BUCBQRk46ICUwMTZseCAtICUwMTZseFxuIiwKLQkJCQkgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCArIDEpOwotCX0KLQotCS8qIHRha2Ugb3V0IFVDIHJhbmdlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7Ci0JCXR5cGUgPSByYW5nZV9zdGF0ZVtpXS50eXBlOwotCQlpZiAodHlwZSAhPSBNVFJSX1RZUEVfVU5DQUNIQUJMRSAmJgotCQkgICAgdHlwZSAhPSBNVFJSX1RZUEVfV1JQUk9UKQotCQkJY29udGludWU7Ci0JCXNpemUgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbjsKLQkJaWYgKCFzaXplKQotCQkJY29udGludWU7Ci0JCWJhc2UgPSByYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbjsKLQkJc3VidHJhY3RfcmFuZ2UocmFuZ2UsIGJhc2UsIGJhc2UgKyBzaXplIC0gMSk7Ci0JfQotCWlmIChleHRyYV9yZW1vdmVfc2l6ZSkKLQkJc3VidHJhY3RfcmFuZ2UocmFuZ2UsIGV4dHJhX3JlbW92ZV9iYXNlLAotCQkJCSBleHRyYV9yZW1vdmVfYmFzZSArIGV4dHJhX3JlbW92ZV9zaXplICAtIDEpOwotCi0JLyogZ2V0IG5ldyByYW5nZSBudW0gKi8KLQlucl9yYW5nZSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IFJBTkdFX05VTTsgaSsrKSB7Ci0JCWlmICghcmFuZ2VbaV0uZW5kKQotCQkJY29udGludWU7Ci0JCW5yX3JhbmdlKys7Ci0JfQotCWlmICAoZGVidWdfcHJpbnQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkFmdGVyIFVDIGNoZWNraW5nXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBNQVAgUEZOOiAlMDE2bHggLSAlMDE2bHhcbiIsCi0JCQkJIHJhbmdlW2ldLnN0YXJ0LCByYW5nZVtpXS5lbmQgKyAxKTsKLQl9Ci0KLQkvKiBzb3J0IHRoZSByYW5nZXMgKi8KLQlzb3J0KHJhbmdlLCBucl9yYW5nZSwgc2l6ZW9mKHN0cnVjdCByZXNfcmFuZ2UpLCBjbXBfcmFuZ2UsIE5VTEwpOwotCWlmICAoZGVidWdfcHJpbnQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkFmdGVyIHNvcnRpbmdcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKLQkJCXByaW50ayhLRVJOX0RFQlVHICJNVFJSIE1BUCBQRk46ICUwMTZseCAtICUwMTZseFxuIiwKLQkJCQkgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCArIDEpOwotCX0KLQotCS8qIGNsZWFyIHRob3NlIGlzIG5vdCB1c2VkICovCi0JZm9yIChpID0gbnJfcmFuZ2U7IGkgPCBSQU5HRV9OVU07IGkrKykKLQkJbWVtc2V0KCZyYW5nZVtpXSwgMCwgc2l6ZW9mKHJhbmdlW2ldKSk7Ci0KLQlyZXR1cm4gbnJfcmFuZ2U7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzX3JhbmdlIF9faW5pdGRhdGEgcmFuZ2VbUkFOR0VfTlVNXTsKLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBucl9yYW5nZTsKLQotI2lmZGVmIENPTkZJR19NVFJSX1NBTklUSVpFUgotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgc3VtX3JhbmdlcyhzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlKQotewotCXVuc2lnbmVkIGxvbmcgc3VtOwotCWludCBpOwotCi0Jc3VtID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKLQkJc3VtICs9IHJhbmdlW2ldLmVuZCArIDEgLSByYW5nZVtpXS5zdGFydDsKLQotCXJldHVybiBzdW07Ci19Ci0KLXN0YXRpYyBpbnQgZW5hYmxlX210cnJfY2xlYW51cCBfX2luaXRkYXRhID0KLQlDT05GSUdfTVRSUl9TQU5JVElaRVJfRU5BQkxFX0RFRkFVTFQ7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGRpc2FibGVfbXRycl9jbGVhbnVwX3NldHVwKGNoYXIgKnN0cikKLXsKLQllbmFibGVfbXRycl9jbGVhbnVwID0gMDsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJkaXNhYmxlX210cnJfY2xlYW51cCIsIGRpc2FibGVfbXRycl9jbGVhbnVwX3NldHVwKTsKLQotc3RhdGljIGludCBfX2luaXQgZW5hYmxlX210cnJfY2xlYW51cF9zZXR1cChjaGFyICpzdHIpCi17Ci0JZW5hYmxlX210cnJfY2xlYW51cCA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgiZW5hYmxlX210cnJfY2xlYW51cCIsIGVuYWJsZV9tdHJyX2NsZWFudXBfc2V0dXApOwotCi1zdGF0aWMgaW50IF9faW5pdCBtdHJyX2NsZWFudXBfZGVidWdfc2V0dXAoY2hhciAqc3RyKQotewotCWRlYnVnX3ByaW50ID0gMTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJtdHJyX2NsZWFudXBfZGVidWciLCBtdHJyX2NsZWFudXBfZGVidWdfc2V0dXApOwotCi1zdHJ1Y3QgdmFyX210cnJfc3RhdGUgewotCXVuc2lnbmVkIGxvbmcJcmFuZ2Vfc3RhcnRrOwotCXVuc2lnbmVkIGxvbmcJcmFuZ2Vfc2l6ZWs7Ci0JdW5zaWduZWQgbG9uZwljaHVua19zaXplazsKLQl1bnNpZ25lZCBsb25nCWdyYW5fc2l6ZWs7Ci0JdW5zaWduZWQgaW50CXJlZzsKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdAotc2V0X3Zhcl9tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZWssIHVuc2lnbmVkIGxvbmcgc2l6ZWssCi0JCXVuc2lnbmVkIGNoYXIgdHlwZSwgdW5zaWduZWQgaW50IGFkZHJlc3NfYml0cykKLXsKLQl1MzIgYmFzZV9sbywgYmFzZV9oaSwgbWFza19sbywgbWFza19oaTsKLQl1NjQgYmFzZSwgbWFzazsKLQotCWlmICghc2l6ZWspIHsKLQkJZmlsbF9tdHJyX3Zhcl9yYW5nZShyZWcsIDAsIDAsIDAsIDApOwotCQlyZXR1cm47Ci0JfQotCi0JbWFzayA9ICgxVUxMIDw8IGFkZHJlc3NfYml0cykgLSAxOwotCW1hc2sgJj0gfigoKCh1NjQpc2l6ZWspIDw8IDEwKSAtIDEpOwotCi0JYmFzZSAgPSAoKHU2NCliYXNlaykgPDwgMTA7Ci0KLQliYXNlIHw9IHR5cGU7Ci0JbWFzayB8PSAweDgwMDsKLQotCWJhc2VfbG8gPSBiYXNlICYgKCgxVUxMPDwzMikgLSAxKTsKLQliYXNlX2hpID0gYmFzZSA+PiAzMjsKLQotCW1hc2tfbG8gPSBtYXNrICYgKCgxVUxMPDwzMikgLSAxKTsKLQltYXNrX2hpID0gbWFzayA+PiAzMjsKLQotCWZpbGxfbXRycl92YXJfcmFuZ2UocmVnLCBiYXNlX2xvLCBiYXNlX2hpLCBtYXNrX2xvLCBtYXNrX2hpKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0Ci1zYXZlX3Zhcl9tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZWssIHVuc2lnbmVkIGxvbmcgc2l6ZWssCi0JCXVuc2lnbmVkIGNoYXIgdHlwZSkKLXsKLQlyYW5nZV9zdGF0ZVtyZWddLmJhc2VfcGZuID0gYmFzZWsgPj4gKFBBR0VfU0hJRlQgLSAxMCk7Ci0JcmFuZ2Vfc3RhdGVbcmVnXS5zaXplX3BmbiA9IHNpemVrID4+IChQQUdFX1NISUZUIC0gMTApOwotCXJhbmdlX3N0YXRlW3JlZ10udHlwZSA9IHR5cGU7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdAotc2V0X3Zhcl9tdHJyX2FsbCh1bnNpZ25lZCBpbnQgYWRkcmVzc19iaXRzKQotewotCXVuc2lnbmVkIGxvbmcgYmFzZWssIHNpemVrOwotCXVuc2lnbmVkIGNoYXIgdHlwZTsKLQl1bnNpZ25lZCBpbnQgcmVnOwotCi0JZm9yIChyZWcgPSAwOyByZWcgPCBudW1fdmFyX3JhbmdlczsgcmVnKyspIHsKLQkJYmFzZWsgPSByYW5nZV9zdGF0ZVtyZWddLmJhc2VfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOwotCQlzaXplayA9IHJhbmdlX3N0YXRlW3JlZ10uc2l6ZV9wZm4gPDwgKFBBR0VfU0hJRlQgLSAxMCk7Ci0JCXR5cGUgPSByYW5nZV9zdGF0ZVtyZWddLnR5cGU7Ci0KLQkJc2V0X3Zhcl9tdHJyKHJlZywgYmFzZWssIHNpemVrLCB0eXBlLCBhZGRyZXNzX2JpdHMpOwotCX0KLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgdG9fc2l6ZV9mYWN0b3IodW5zaWduZWQgbG9uZyBzaXplaywgY2hhciAqZmFjdG9ycCkKLXsKLQljaGFyIGZhY3RvcjsKLQl1bnNpZ25lZCBsb25nIGJhc2UgPSBzaXplazsKLQotCWlmIChiYXNlICYgKCgxPDwxMCkgLSAxKSkgewotCQkvKiBub3QgTUIgYWxpZ25tZW50ICovCi0JCWZhY3RvciA9ICdLJzsKLQl9IGVsc2UgaWYgKGJhc2UgJiAoKDE8PDIwKSAtIDEpKXsKLQkJZmFjdG9yID0gJ00nOwotCQliYXNlID4+PSAxMDsKLQl9IGVsc2UgewotCQlmYWN0b3IgPSAnRyc7Ci0JCWJhc2UgPj49IDIwOwotCX0KLQotCSpmYWN0b3JwID0gZmFjdG9yOwotCi0JcmV0dXJuIGJhc2U7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0Ci1yYW5nZV90b19tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnRrLAotCSAgICAgIHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc2l6ZWssIHVuc2lnbmVkIGNoYXIgdHlwZSkKLXsKLQlpZiAoIXJhbmdlX3NpemVrIHx8IChyZWcgPj0gbnVtX3Zhcl9yYW5nZXMpKQotCQlyZXR1cm4gcmVnOwotCi0Jd2hpbGUgKHJhbmdlX3NpemVrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgbWF4X2FsaWduLCBhbGlnbjsKLQkJdW5zaWduZWQgbG9uZyBzaXplazsKLQotCQkvKiBDb21wdXRlIHRoZSBtYXhpbXVtIHNpemUgSSBjYW4gbWFrZSBhIHJhbmdlICovCi0JCWlmIChyYW5nZV9zdGFydGspCi0JCQltYXhfYWxpZ24gPSBmZnMocmFuZ2Vfc3RhcnRrKSAtIDE7Ci0JCWVsc2UKLQkJCW1heF9hbGlnbiA9IDMyOwotCQlhbGlnbiA9IGZscyhyYW5nZV9zaXplaykgLSAxOwotCQlpZiAoYWxpZ24gPiBtYXhfYWxpZ24pCi0JCQlhbGlnbiA9IG1heF9hbGlnbjsKLQotCQlzaXplayA9IDEgPDwgYWxpZ247Ci0JCWlmIChkZWJ1Z19wcmludCkgewotCQkJY2hhciBzdGFydF9mYWN0b3IgPSAnSycsIHNpemVfZmFjdG9yID0gJ0snOwotCQkJdW5zaWduZWQgbG9uZyBzdGFydF9iYXNlLCBzaXplX2Jhc2U7Ci0KLQkJCXN0YXJ0X2Jhc2UgPSB0b19zaXplX2ZhY3RvcihyYW5nZV9zdGFydGssICZzdGFydF9mYWN0b3IpLAotCQkJc2l6ZV9iYXNlID0gdG9fc2l6ZV9mYWN0b3Ioc2l6ZWssICZzaXplX2ZhY3RvciksCi0KLQkJCXByaW50ayhLRVJOX0RFQlVHICJTZXR0aW5nIHZhcmlhYmxlIE1UUlIgJWQsICIKLQkJCQkiYmFzZTogJWxkJWNCLCByYW5nZTogJWxkJWNCLCB0eXBlICVzXG4iLAotCQkJCXJlZywgc3RhcnRfYmFzZSwgc3RhcnRfZmFjdG9yLAotCQkJCXNpemVfYmFzZSwgc2l6ZV9mYWN0b3IsCi0JCQkJKHR5cGUgPT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUpPyJVQyI6Ci0JCQkJICAgICgodHlwZSA9PSBNVFJSX1RZUEVfV1JCQUNLKT8iV0IiOiJPdGhlciIpCi0JCQkJKTsKLQkJfQotCQlzYXZlX3Zhcl9tdHJyKHJlZysrLCByYW5nZV9zdGFydGssIHNpemVrLCB0eXBlKTsKLQkJcmFuZ2Vfc3RhcnRrICs9IHNpemVrOwotCQlyYW5nZV9zaXplayAtPSBzaXplazsKLQkJaWYgKHJlZyA+PSBudW1fdmFyX3JhbmdlcykKLQkJCWJyZWFrOwotCX0KLQlyZXR1cm4gcmVnOwotfQotCi1zdGF0aWMgdW5zaWduZWQgX19pbml0Ci1yYW5nZV90b19tdHJyX3dpdGhfaG9sZShzdHJ1Y3QgdmFyX210cnJfc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBsb25nIGJhc2VrLAotCQkJdW5zaWduZWQgbG9uZyBzaXplaykKLXsKLQl1bnNpZ25lZCBsb25nIGhvbGVfYmFzZWssIGhvbGVfc2l6ZWs7Ci0JdW5zaWduZWQgbG9uZyBzZWNvbmRfYmFzZWssIHNlY29uZF9zaXplazsKLQl1bnNpZ25lZCBsb25nIHJhbmdlMF9iYXNlaywgcmFuZ2UwX3NpemVrOwotCXVuc2lnbmVkIGxvbmcgcmFuZ2VfYmFzZWssIHJhbmdlX3NpemVrOwotCXVuc2lnbmVkIGxvbmcgY2h1bmtfc2l6ZWs7Ci0JdW5zaWduZWQgbG9uZyBncmFuX3NpemVrOwotCi0JaG9sZV9iYXNlayA9IDA7Ci0JaG9sZV9zaXplayA9IDA7Ci0Jc2Vjb25kX2Jhc2VrID0gMDsKLQlzZWNvbmRfc2l6ZWsgPSAwOwotCWNodW5rX3NpemVrID0gc3RhdGUtPmNodW5rX3NpemVrOwotCWdyYW5fc2l6ZWsgPSBzdGF0ZS0+Z3Jhbl9zaXplazsKLQotCS8qIGFsaWduIHdpdGggZ3JhbiBzaXplLCBwcmV2ZW50IHNtYWxsIGJsb2NrIHVzZWQgdXAgTVRSUnMgKi8KLQlyYW5nZV9iYXNlayA9IEFMSUdOKHN0YXRlLT5yYW5nZV9zdGFydGssIGdyYW5fc2l6ZWspOwotCWlmICgocmFuZ2VfYmFzZWsgPiBiYXNlaykgJiYgYmFzZWspCi0JCXJldHVybiBzZWNvbmRfc2l6ZWs7Ci0Jc3RhdGUtPnJhbmdlX3NpemVrIC09IChyYW5nZV9iYXNlayAtIHN0YXRlLT5yYW5nZV9zdGFydGspOwotCXJhbmdlX3NpemVrID0gQUxJR04oc3RhdGUtPnJhbmdlX3NpemVrLCBncmFuX3NpemVrKTsKLQotCXdoaWxlIChyYW5nZV9zaXplayA+IHN0YXRlLT5yYW5nZV9zaXplaykgewotCQlyYW5nZV9zaXplayAtPSBncmFuX3NpemVrOwotCQlpZiAoIXJhbmdlX3NpemVrKQotCQkJcmV0dXJuIDA7Ci0JfQotCXN0YXRlLT5yYW5nZV9zaXplayA9IHJhbmdlX3NpemVrOwotCi0JLyogdHJ5IHRvIGFwcGVuZCBzb21lIHNtYWxsIGhvbGUgKi8KLQlyYW5nZTBfYmFzZWsgPSBzdGF0ZS0+cmFuZ2Vfc3RhcnRrOwotCXJhbmdlMF9zaXplayA9IEFMSUdOKHN0YXRlLT5yYW5nZV9zaXplaywgY2h1bmtfc2l6ZWspOwotCi0JLyogbm8gaW5jcmVhc2UgKi8KLQlpZiAocmFuZ2UwX3NpemVrID09IHN0YXRlLT5yYW5nZV9zaXplaykgewotCQlpZiAoZGVidWdfcHJpbnQpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAicmFuZ2VYOiAlMDE2bHggLSAlMDE2bHhcbiIsCi0JCQkJcmFuZ2UwX2Jhc2VrPDwxMCwKLQkJCQkocmFuZ2UwX2Jhc2VrICsgc3RhdGUtPnJhbmdlX3NpemVrKTw8MTApOwotCQlzdGF0ZS0+cmVnID0gcmFuZ2VfdG9fbXRycihzdGF0ZS0+cmVnLCByYW5nZTBfYmFzZWssCi0JCQkJc3RhdGUtPnJhbmdlX3NpemVrLCBNVFJSX1RZUEVfV1JCQUNLKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogb25seSBjdXQgYmFjaywgd2hlbiBpdCBpcyBub3QgdGhlIGxhc3QgKi8KLQlpZiAoc2l6ZWspIHsKLQkJd2hpbGUgKHJhbmdlMF9iYXNlayArIHJhbmdlMF9zaXplayA+IChiYXNlayArIHNpemVrKSkgewotCQkJaWYgKHJhbmdlMF9zaXplayA+PSBjaHVua19zaXplaykKLQkJCQlyYW5nZTBfc2l6ZWsgLT0gY2h1bmtfc2l6ZWs7Ci0JCQllbHNlCi0JCQkJcmFuZ2UwX3NpemVrID0gMDsKLQotCQkJaWYgKCFyYW5nZTBfc2l6ZWspCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLXNlY29uZF90cnk6Ci0JcmFuZ2VfYmFzZWsgPSByYW5nZTBfYmFzZWsgKyByYW5nZTBfc2l6ZWs7Ci0KLQkvKiBvbmUgaG9sZSBpbiB0aGUgbWlkZGxlICovCi0JaWYgKHJhbmdlX2Jhc2VrID4gYmFzZWsgJiYgcmFuZ2VfYmFzZWsgPD0gKGJhc2VrICsgc2l6ZWspKQotCQlzZWNvbmRfc2l6ZWsgPSByYW5nZV9iYXNlayAtIGJhc2VrOwotCi0JaWYgKHJhbmdlMF9zaXplayA+IHN0YXRlLT5yYW5nZV9zaXplaykgewotCi0JCS8qIG9uZSBob2xlIGluIG1pZGRsZSBvciBhdCBlbmQgKi8KLQkJaG9sZV9zaXplayA9IHJhbmdlMF9zaXplayAtIHN0YXRlLT5yYW5nZV9zaXplayAtIHNlY29uZF9zaXplazsKLQotCQkvKiBob2xlIHNpemUgc2hvdWxkIGJlIGxlc3MgdGhhbiBoYWxmIG9mIHJhbmdlMCBzaXplICovCi0JCWlmIChob2xlX3NpemVrID49IChyYW5nZTBfc2l6ZWsgPj4gMSkgJiYKLQkJICAgIHJhbmdlMF9zaXplayA+PSBjaHVua19zaXplaykgewotCQkJcmFuZ2UwX3NpemVrIC09IGNodW5rX3NpemVrOwotCQkJc2Vjb25kX3NpemVrID0gMDsKLQkJCWhvbGVfc2l6ZWsgPSAwOwotCi0JCQlnb3RvIHNlY29uZF90cnk7Ci0JCX0KLQl9Ci0KLQlpZiAocmFuZ2UwX3NpemVrKSB7Ci0JCWlmIChkZWJ1Z19wcmludCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICJyYW5nZTA6ICUwMTZseCAtICUwMTZseFxuIiwKLQkJCQlyYW5nZTBfYmFzZWs8PDEwLAotCQkJCShyYW5nZTBfYmFzZWsgKyByYW5nZTBfc2l6ZWspPDwxMCk7Ci0JCXN0YXRlLT5yZWcgPSByYW5nZV90b19tdHJyKHN0YXRlLT5yZWcsIHJhbmdlMF9iYXNlaywKLQkJCQlyYW5nZTBfc2l6ZWssIE1UUlJfVFlQRV9XUkJBQ0spOwotCX0KLQotCWlmIChyYW5nZTBfc2l6ZWsgPCBzdGF0ZS0+cmFuZ2Vfc2l6ZWspIHsKLQkJLyogbmVlZCB0byBoYW5kbGUgbGVmdCBvdmVyICovCi0JCXJhbmdlX3NpemVrID0gc3RhdGUtPnJhbmdlX3NpemVrIC0gcmFuZ2UwX3NpemVrOwotCi0JCWlmIChkZWJ1Z19wcmludCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICJyYW5nZTogJTAxNmx4IC0gJTAxNmx4XG4iLAotCQkJCSByYW5nZV9iYXNlazw8MTAsCi0JCQkJIChyYW5nZV9iYXNlayArIHJhbmdlX3NpemVrKTw8MTApOwotCQlzdGF0ZS0+cmVnID0gcmFuZ2VfdG9fbXRycihzdGF0ZS0+cmVnLCByYW5nZV9iYXNlaywKLQkJCQkgcmFuZ2Vfc2l6ZWssIE1UUlJfVFlQRV9XUkJBQ0spOwotCX0KLQotCWlmIChob2xlX3NpemVrKSB7Ci0JCWhvbGVfYmFzZWsgPSByYW5nZV9iYXNlayAtIGhvbGVfc2l6ZWsgLSBzZWNvbmRfc2l6ZWs7Ci0JCWlmIChkZWJ1Z19wcmludCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICJob2xlOiAlMDE2bHggLSAlMDE2bHhcbiIsCi0JCQkJIGhvbGVfYmFzZWs8PDEwLAotCQkJCSAoaG9sZV9iYXNlayArIGhvbGVfc2l6ZWspPDwxMCk7Ci0JCXN0YXRlLT5yZWcgPSByYW5nZV90b19tdHJyKHN0YXRlLT5yZWcsIGhvbGVfYmFzZWssCi0JCQkJIGhvbGVfc2l6ZWssIE1UUlJfVFlQRV9VTkNBQ0hBQkxFKTsKLQl9Ci0KLQlyZXR1cm4gc2Vjb25kX3NpemVrOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQKLXNldF92YXJfbXRycl9yYW5nZShzdHJ1Y3QgdmFyX210cnJfc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBsb25nIGJhc2VfcGZuLAotCQkgICB1bnNpZ25lZCBsb25nIHNpemVfcGZuKQotewotCXVuc2lnbmVkIGxvbmcgYmFzZWssIHNpemVrOwotCXVuc2lnbmVkIGxvbmcgc2Vjb25kX3NpemVrID0gMDsKLQotCWlmIChzdGF0ZS0+cmVnID49IG51bV92YXJfcmFuZ2VzKQotCQlyZXR1cm47Ci0KLQliYXNlayA9IGJhc2VfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOwotCXNpemVrID0gc2l6ZV9wZm4gPDwgKFBBR0VfU0hJRlQgLSAxMCk7Ci0KLQkvKiBTZWUgaWYgSSBjYW4gbWVyZ2Ugd2l0aCB0aGUgbGFzdCByYW5nZSAqLwotCWlmICgoYmFzZWsgPD0gMTAyNCkgfHwKLQkgICAgKHN0YXRlLT5yYW5nZV9zdGFydGsgKyBzdGF0ZS0+cmFuZ2Vfc2l6ZWsgPT0gYmFzZWspKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZW5kayA9IGJhc2VrICsgc2l6ZWs7Ci0JCXN0YXRlLT5yYW5nZV9zaXplayA9IGVuZGsgLSBzdGF0ZS0+cmFuZ2Vfc3RhcnRrOwotCQlyZXR1cm47Ci0JfQotCS8qIFdyaXRlIHRoZSByYW5nZSBtdHJycyAqLwotCWlmIChzdGF0ZS0+cmFuZ2Vfc2l6ZWsgIT0gMCkKLQkJc2Vjb25kX3NpemVrID0gcmFuZ2VfdG9fbXRycl93aXRoX2hvbGUoc3RhdGUsIGJhc2VrLCBzaXplayk7Ci0KLQkvKiBBbGxvY2F0ZSBhbiBtc3IgKi8KLQlzdGF0ZS0+cmFuZ2Vfc3RhcnRrID0gYmFzZWsgKyBzZWNvbmRfc2l6ZWs7Ci0Jc3RhdGUtPnJhbmdlX3NpemVrICA9IHNpemVrIC0gc2Vjb25kX3NpemVrOwotfQotCi0vKiBtaW5pbnVtIHNpemUgb2YgbXRyciBibG9jayB0aGF0IGNhbiB0YWtlIGhvbGUgKi8KLXN0YXRpYyB1NjQgbXRycl9jaHVua19zaXplIF9faW5pdGRhdGEgPSAoMjU2VUxMPDwyMCk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX210cnJfY2h1bmtfc2l6ZV9vcHQoY2hhciAqcCkKLXsKLQlpZiAoIXApCi0JCXJldHVybiAtRUlOVkFMOwotCW10cnJfY2h1bmtfc2l6ZSA9IG1lbXBhcnNlKHAsICZwKTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJtdHJyX2NodW5rX3NpemUiLCBwYXJzZV9tdHJyX2NodW5rX3NpemVfb3B0KTsKLQotLyogZ3Jhbml0eSBvZiBtdHJyIG9mIGJsb2NrICovCi1zdGF0aWMgdTY0IG10cnJfZ3Jhbl9zaXplIF9faW5pdGRhdGE7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX210cnJfZ3Jhbl9zaXplX29wdChjaGFyICpwKQotewotCWlmICghcCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JbXRycl9ncmFuX3NpemUgPSBtZW1wYXJzZShwLCAmcCk7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibXRycl9ncmFuX3NpemUiLCBwYXJzZV9tdHJyX2dyYW5fc2l6ZV9vcHQpOwotCi1zdGF0aWMgaW50IG5yX210cnJfc3BhcmVfcmVnIF9faW5pdGRhdGEgPQotCQkJCSBDT05GSUdfTVRSUl9TQU5JVElaRVJfU1BBUkVfUkVHX05SX0RFRkFVTFQ7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX210cnJfc3BhcmVfcmVnKGNoYXIgKmFyZykKLXsKLQlpZiAoYXJnKQotCQlucl9tdHJyX3NwYXJlX3JlZyA9IHNpbXBsZV9zdHJ0b3VsKGFyZywgTlVMTCwgMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWVhcmx5X3BhcmFtKCJtdHJyX3NwYXJlX3JlZ19uciIsIHBhcnNlX210cnJfc3BhcmVfcmVnKTsKLQotc3RhdGljIGludCBfX2luaXQKLXg4Nl9zZXR1cF92YXJfbXRycnMoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwKLQkJICAgIHU2NCBjaHVua19zaXplLCB1NjQgZ3Jhbl9zaXplKQotewotCXN0cnVjdCB2YXJfbXRycl9zdGF0ZSB2YXJfc3RhdGU7Ci0JaW50IGk7Ci0JaW50IG51bV9yZWc7Ci0KLQl2YXJfc3RhdGUucmFuZ2Vfc3RhcnRrCT0gMDsKLQl2YXJfc3RhdGUucmFuZ2Vfc2l6ZWsJPSAwOwotCXZhcl9zdGF0ZS5yZWcJCT0gMDsKLQl2YXJfc3RhdGUuY2h1bmtfc2l6ZWsJPSBjaHVua19zaXplID4+IDEwOwotCXZhcl9zdGF0ZS5ncmFuX3NpemVrCT0gZ3Jhbl9zaXplID4+IDEwOwotCi0JbWVtc2V0KHJhbmdlX3N0YXRlLCAwLCBzaXplb2YocmFuZ2Vfc3RhdGUpKTsKLQotCS8qIFdyaXRlIHRoZSByYW5nZSBldGMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKLQkJc2V0X3Zhcl9tdHJyX3JhbmdlKCZ2YXJfc3RhdGUsIHJhbmdlW2ldLnN0YXJ0LAotCQkJCSAgIHJhbmdlW2ldLmVuZCAtIHJhbmdlW2ldLnN0YXJ0ICsgMSk7Ci0KLQkvKiBXcml0ZSB0aGUgbGFzdCByYW5nZSAqLwotCWlmICh2YXJfc3RhdGUucmFuZ2Vfc2l6ZWsgIT0gMCkKLQkJcmFuZ2VfdG9fbXRycl93aXRoX2hvbGUoJnZhcl9zdGF0ZSwgMCwgMCk7Ci0KLQludW1fcmVnID0gdmFyX3N0YXRlLnJlZzsKLQkvKiBDbGVhciBvdXQgdGhlIGV4dHJhIE1UUlIncyAqLwotCXdoaWxlICh2YXJfc3RhdGUucmVnIDwgbnVtX3Zhcl9yYW5nZXMpIHsKLQkJc2F2ZV92YXJfbXRycih2YXJfc3RhdGUucmVnLCAwLCAwLCAwKTsKLQkJdmFyX3N0YXRlLnJlZysrOwotCX0KLQotCXJldHVybiBudW1fcmVnOwotfQotCi1zdHJ1Y3QgbXRycl9jbGVhbnVwX3Jlc3VsdCB7Ci0JdW5zaWduZWQgbG9uZyBncmFuX3NpemVrOwotCXVuc2lnbmVkIGxvbmcgY2h1bmtfc2l6ZWs7Ci0JdW5zaWduZWQgbG9uZyBsb3NlX2NvdmVyX3NpemVrOwotCXVuc2lnbmVkIGludCBudW1fcmVnOwotCWludCBiYWQ7Ci19OwotCi0vKgotICogZ3Jhbl9zaXplOiA2NEssIDEyOEssIDI1NkssIDUxMkssIDFNLCAyTSwgLi4uLCAyRwotICogY2h1bmsgc2l6ZTogZ3Jhbl9zaXplLCAuLi4sIDJHCi0gKiBzbyB3ZSBuZWVkICgxKzE2KSo4Ci0gKi8KLSNkZWZpbmUgTlVNX1JFU1VMVAkxMzYKLSNkZWZpbmUgUFNISUZUCQkoUEFHRV9TSElGVCAtIDEwKQotCi1zdGF0aWMgc3RydWN0IG10cnJfY2xlYW51cF9yZXN1bHQgX19pbml0ZGF0YSByZXN1bHRbTlVNX1JFU1VMVF07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIG1pbl9sb3NzX3BmbltSQU5HRV9OVU1dOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgcHJpbnRfb3V0X210cnJfcmFuZ2Vfc3RhdGUodm9pZCkKLXsKLQlpbnQgaTsKLQljaGFyIHN0YXJ0X2ZhY3RvciA9ICdLJywgc2l6ZV9mYWN0b3IgPSAnSyc7Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9iYXNlLCBzaXplX2Jhc2U7Ci0JbXRycl90eXBlIHR5cGU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgewotCi0JCXNpemVfYmFzZSA9IHJhbmdlX3N0YXRlW2ldLnNpemVfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOwotCQlpZiAoIXNpemVfYmFzZSkKLQkJCWNvbnRpbnVlOwotCi0JCXNpemVfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHNpemVfYmFzZSwgJnNpemVfZmFjdG9yKSwKLQkJc3RhcnRfYmFzZSA9IHJhbmdlX3N0YXRlW2ldLmJhc2VfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOwotCQlzdGFydF9iYXNlID0gdG9fc2l6ZV9mYWN0b3Ioc3RhcnRfYmFzZSwgJnN0YXJ0X2ZhY3RvciksCi0JCXR5cGUgPSByYW5nZV9zdGF0ZVtpXS50eXBlOwotCi0JCXByaW50ayhLRVJOX0RFQlVHICJyZWcgJWQsIGJhc2U6ICVsZCVjQiwgcmFuZ2U6ICVsZCVjQiwgdHlwZSAlc1xuIiwKLQkJCWksIHN0YXJ0X2Jhc2UsIHN0YXJ0X2ZhY3RvciwKLQkJCXNpemVfYmFzZSwgc2l6ZV9mYWN0b3IsCi0JCQkodHlwZSA9PSBNVFJSX1RZUEVfVU5DQUNIQUJMRSkgPyAiVUMiIDoKLQkJCSAgICAoKHR5cGUgPT0gTVRSUl9UWVBFX1dSUFJPVCkgPyAiV1AiIDoKLQkJCSAgICAgKCh0eXBlID09IE1UUlJfVFlQRV9XUkJBQ0spID8gIldCIiA6ICJPdGhlciIpKQotCQkJKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IG10cnJfbmVlZF9jbGVhbnVwKHZvaWQpCi17Ci0JaW50IGk7Ci0JbXRycl90eXBlIHR5cGU7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCS8qIGV4dHJhIG9uZSBmb3IgYWxsIDAgKi8KLQlpbnQgbnVtW01UUlJfTlVNX1RZUEVTICsgMV07Ci0KLQkvKiBjaGVjayBlbnRyaWVzIG51bWJlciAqLwotCW1lbXNldChudW0sIDAsIHNpemVvZihudW0pKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgewotCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKLQkJc2l6ZSA9IHJhbmdlX3N0YXRlW2ldLnNpemVfcGZuOwotCQlpZiAodHlwZSA+PSBNVFJSX05VTV9UWVBFUykKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXNpemUpCi0JCQl0eXBlID0gTVRSUl9OVU1fVFlQRVM7Ci0JCWlmICh0eXBlID09IE1UUlJfVFlQRV9XUlBST1QpCi0JCQl0eXBlID0gTVRSUl9UWVBFX1VOQ0FDSEFCTEU7Ci0JCW51bVt0eXBlXSsrOwotCX0KLQotCS8qIGNoZWNrIGlmIHdlIGdvdCBVQyBlbnRyaWVzICovCi0JaWYgKCFudW1bTVRSUl9UWVBFX1VOQ0FDSEFCTEVdKQotCQlyZXR1cm4gMDsKLQotCS8qIGNoZWNrIGlmIHdlIG9ubHkgaGFkIFdCIGFuZCBVQyAqLwotCWlmIChudW1bTVRSUl9UWVBFX1dSQkFDS10gKyBudW1bTVRSUl9UWVBFX1VOQ0FDSEFCTEVdICE9Ci0JCW51bV92YXJfcmFuZ2VzIC0gbnVtW01UUlJfTlVNX1RZUEVTXSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSByYW5nZV9zdW1zOwotc3RhdGljIHZvaWQgX19pbml0IG10cnJfY2FsY19yYW5nZV9zdGF0ZSh1NjQgY2h1bmtfc2l6ZSwgdTY0IGdyYW5fc2l6ZSwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgZXh0cmFfcmVtb3ZlX2Jhc2UsCi0JCQkJCSB1bnNpZ25lZCBsb25nIGV4dHJhX3JlbW92ZV9zaXplLAotCQkJCQkgaW50IGkpCi17Ci0JaW50IG51bV9yZWc7Ci0Jc3RhdGljIHN0cnVjdCByZXNfcmFuZ2UgcmFuZ2VfbmV3W1JBTkdFX05VTV07Ci0Jc3RhdGljIGludCBucl9yYW5nZV9uZXc7Ci0JdW5zaWduZWQgbG9uZyByYW5nZV9zdW1zX25ldzsKLQotCS8qIGNvbnZlcnQgcmFuZ2VzIHRvIHZhciByYW5nZXMgc3RhdGUgKi8KLQludW1fcmVnID0geDg2X3NldHVwX3Zhcl9tdHJycyhyYW5nZSwgbnJfcmFuZ2UsCi0JCQkJCQljaHVua19zaXplLCBncmFuX3NpemUpOwotCi0JLyogd2UgZ290IG5ldyBzZXR0aW5nIGluIHJhbmdlX3N0YXRlLCBjaGVjayBpdCAqLwotCW1lbXNldChyYW5nZV9uZXcsIDAsIHNpemVvZihyYW5nZV9uZXcpKTsKLQlucl9yYW5nZV9uZXcgPSB4ODZfZ2V0X210cnJfbWVtX3JhbmdlKHJhbmdlX25ldywgMCwKLQkJCQlleHRyYV9yZW1vdmVfYmFzZSwgZXh0cmFfcmVtb3ZlX3NpemUpOwotCXJhbmdlX3N1bXNfbmV3ID0gc3VtX3JhbmdlcyhyYW5nZV9uZXcsIG5yX3JhbmdlX25ldyk7Ci0KLQlyZXN1bHRbaV0uY2h1bmtfc2l6ZWsgPSBjaHVua19zaXplID4+IDEwOwotCXJlc3VsdFtpXS5ncmFuX3NpemVrID0gZ3Jhbl9zaXplID4+IDEwOwotCXJlc3VsdFtpXS5udW1fcmVnID0gbnVtX3JlZzsKLQlpZiAocmFuZ2Vfc3VtcyA8IHJhbmdlX3N1bXNfbmV3KSB7Ci0JCXJlc3VsdFtpXS5sb3NlX2NvdmVyX3NpemVrID0KLQkJCShyYW5nZV9zdW1zX25ldyAtIHJhbmdlX3N1bXMpIDw8IFBTSElGVDsKLQkJcmVzdWx0W2ldLmJhZCA9IDE7Ci0JfSBlbHNlCi0JCXJlc3VsdFtpXS5sb3NlX2NvdmVyX3NpemVrID0KLQkJCShyYW5nZV9zdW1zIC0gcmFuZ2Vfc3Vtc19uZXcpIDw8IFBTSElGVDsKLQotCS8qIGRvdWJsZSBjaGVjayBpdCAqLwotCWlmICghcmVzdWx0W2ldLmJhZCAmJiAhcmVzdWx0W2ldLmxvc2VfY292ZXJfc2l6ZWspIHsKLQkJaWYgKG5yX3JhbmdlX25ldyAhPSBucl9yYW5nZSB8fAotCQkJbWVtY21wKHJhbmdlLCByYW5nZV9uZXcsIHNpemVvZihyYW5nZSkpKQotCQkJCXJlc3VsdFtpXS5iYWQgPSAxOwotCX0KLQotCWlmICghcmVzdWx0W2ldLmJhZCAmJiAocmFuZ2Vfc3VtcyAtIHJhbmdlX3N1bXNfbmV3IDwKLQkJCQltaW5fbG9zc19wZm5bbnVtX3JlZ10pKSB7Ci0JCW1pbl9sb3NzX3BmbltudW1fcmVnXSA9Ci0JCQlyYW5nZV9zdW1zIC0gcmFuZ2Vfc3Vtc19uZXc7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgbXRycl9wcmludF9vdXRfb25lX3Jlc3VsdChpbnQgaSkKLXsKLQljaGFyIGdyYW5fZmFjdG9yLCBjaHVua19mYWN0b3IsIGxvc2VfZmFjdG9yOwotCXVuc2lnbmVkIGxvbmcgZ3Jhbl9iYXNlLCBjaHVua19iYXNlLCBsb3NlX2Jhc2U7Ci0KLQlncmFuX2Jhc2UgPSB0b19zaXplX2ZhY3RvcihyZXN1bHRbaV0uZ3Jhbl9zaXplaywgJmdyYW5fZmFjdG9yKSwKLQljaHVua19iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmVzdWx0W2ldLmNodW5rX3NpemVrLCAmY2h1bmtfZmFjdG9yKSwKLQlsb3NlX2Jhc2UgPSB0b19zaXplX2ZhY3RvcihyZXN1bHRbaV0ubG9zZV9jb3Zlcl9zaXplaywgJmxvc2VfZmFjdG9yKSwKLQlwcmludGsoS0VSTl9JTkZPICIlc2dyYW5fc2l6ZTogJWxkJWMgXHRjaHVua19zaXplOiAlbGQlYyBcdCIsCi0JCQlyZXN1bHRbaV0uYmFkID8gIipCQUQqIiA6ICIgIiwKLQkJCWdyYW5fYmFzZSwgZ3Jhbl9mYWN0b3IsIGNodW5rX2Jhc2UsIGNodW5rX2ZhY3Rvcik7Ci0JcHJpbnRrKEtFUk5fQ09OVCAibnVtX3JlZzogJWQgIFx0bG9zZSBjb3ZlciBSQU06ICVzJWxkJWNcbiIsCi0JCQlyZXN1bHRbaV0ubnVtX3JlZywgcmVzdWx0W2ldLmJhZCA/ICItIiA6ICIiLAotCQkJbG9zZV9iYXNlLCBsb3NlX2ZhY3Rvcik7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IG10cnJfc2VhcmNoX29wdGltYWxfaW5kZXgodm9pZCkKLXsKLQlpbnQgaTsKLQlpbnQgbnVtX3JlZ19nb29kOwotCWludCBpbmRleF9nb29kOwotCi0JaWYgKG5yX210cnJfc3BhcmVfcmVnID49IG51bV92YXJfcmFuZ2VzKQotCQlucl9tdHJyX3NwYXJlX3JlZyA9IG51bV92YXJfcmFuZ2VzIC0gMTsKLQludW1fcmVnX2dvb2QgPSAtMTsKLQlmb3IgKGkgPSBudW1fdmFyX3JhbmdlcyAtIG5yX210cnJfc3BhcmVfcmVnOyBpID4gMDsgaS0tKSB7Ci0JCWlmICghbWluX2xvc3NfcGZuW2ldKQotCQkJbnVtX3JlZ19nb29kID0gaTsKLQl9Ci0KLQlpbmRleF9nb29kID0gLTE7Ci0JaWYgKG51bV9yZWdfZ29vZCAhPSAtMSkgewotCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JFU1VMVDsgaSsrKSB7Ci0JCQlpZiAoIXJlc3VsdFtpXS5iYWQgJiYKLQkJCSAgICByZXN1bHRbaV0ubnVtX3JlZyA9PSBudW1fcmVnX2dvb2QgJiYKLQkJCSAgICAhcmVzdWx0W2ldLmxvc2VfY292ZXJfc2l6ZWspIHsKLQkJCQlpbmRleF9nb29kID0gaTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiBpbmRleF9nb29kOwotfQotCi0KLXN0YXRpYyBpbnQgX19pbml0IG10cnJfY2xlYW51cCh1bnNpZ25lZCBhZGRyZXNzX2JpdHMpCi17Ci0JdW5zaWduZWQgbG9uZyBleHRyYV9yZW1vdmVfYmFzZSwgZXh0cmFfcmVtb3ZlX3NpemU7Ci0JdW5zaWduZWQgbG9uZyBiYXNlLCBzaXplLCBkZWYsIGR1bW15OwotCW10cnJfdHlwZSB0eXBlOwotCXU2NCBjaHVua19zaXplLCBncmFuX3NpemU7Ci0JaW50IGluZGV4X2dvb2Q7Ci0JaW50IGk7Ci0KLQlpZiAoIWlzX2NwdShJTlRFTCkgfHwgZW5hYmxlX210cnJfY2xlYW51cCA8IDEpCi0JCXJldHVybiAwOwotCXJkbXNyKE1UUlJkZWZUeXBlX01TUiwgZGVmLCBkdW1teSk7Ci0JZGVmICY9IDB4ZmY7Ci0JaWYgKGRlZiAhPSBNVFJSX1RZUEVfVU5DQUNIQUJMRSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBnZXQgaXQgYW5kIHN0b3JlIGl0IGFzaWRlICovCi0JbWVtc2V0KHJhbmdlX3N0YXRlLCAwLCBzaXplb2YocmFuZ2Vfc3RhdGUpKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgewotCQltdHJyX2lmLT5nZXQoaSwgJmJhc2UsICZzaXplLCAmdHlwZSk7Ci0JCXJhbmdlX3N0YXRlW2ldLmJhc2VfcGZuID0gYmFzZTsKLQkJcmFuZ2Vfc3RhdGVbaV0uc2l6ZV9wZm4gPSBzaXplOwotCQlyYW5nZV9zdGF0ZVtpXS50eXBlID0gdHlwZTsKLQl9Ci0KLQkvKiBjaGVjayBpZiB3ZSBuZWVkIGhhbmRsZSBpdCBhbmQgY2FuIGhhbmRsZSBpdCAqLwotCWlmICghbXRycl9uZWVkX2NsZWFudXAoKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBwcmludCBvcmlnaW5hbCB2YXIgTVRSUnMgYXQgZmlyc3QsIGZvciBkZWJ1Z2dpbmc6ICovCi0JcHJpbnRrKEtFUk5fREVCVUcgIm9yaWdpbmFsIHZhcmlhYmxlIE1UUlJzXG4iKTsKLQlwcmludF9vdXRfbXRycl9yYW5nZV9zdGF0ZSgpOwotCi0JbWVtc2V0KHJhbmdlLCAwLCBzaXplb2YocmFuZ2UpKTsKLQlleHRyYV9yZW1vdmVfc2l6ZSA9IDA7Ci0JZXh0cmFfcmVtb3ZlX2Jhc2UgPSAxIDw8ICgzMiAtIFBBR0VfU0hJRlQpOwotCWlmIChtdHJyX3RvbTIpCi0JCWV4dHJhX3JlbW92ZV9zaXplID0KLQkJCShtdHJyX3RvbTIgPj4gUEFHRV9TSElGVCkgLSBleHRyYV9yZW1vdmVfYmFzZTsKLQlucl9yYW5nZSA9IHg4Nl9nZXRfbXRycl9tZW1fcmFuZ2UocmFuZ2UsIDAsIGV4dHJhX3JlbW92ZV9iYXNlLAotCQkJCQkgIGV4dHJhX3JlbW92ZV9zaXplKTsKLQkvKgotCSAqIFswLCAxTSkgc2hvdWxkIGFsd2F5cyBiZSBjb3ZlcnJlZCBieSB2YXIgbXRyciB3aXRoIFdCCi0JICogYW5kIGZpeGVkIG10cnJzIHNob3VsZCB0YWtlIGVmZmVjdGl2ZSBiZWZvcmUgdmFyIG10cnIgZm9yIGl0Ci0JICovCi0JbnJfcmFuZ2UgPSBhZGRfcmFuZ2Vfd2l0aF9tZXJnZShyYW5nZSwgbnJfcmFuZ2UsIDAsCi0JCQkJCSgxVUxMPDwoMjAgLSBQQUdFX1NISUZUKSkgLSAxKTsKLQkvKiBzb3J0IHRoZSByYW5nZXMgKi8KLQlzb3J0KHJhbmdlLCBucl9yYW5nZSwgc2l6ZW9mKHN0cnVjdCByZXNfcmFuZ2UpLCBjbXBfcmFuZ2UsIE5VTEwpOwotCi0JcmFuZ2Vfc3VtcyA9IHN1bV9yYW5nZXMocmFuZ2UsIG5yX3JhbmdlKTsKLQlwcmludGsoS0VSTl9JTkZPICJ0b3RhbCBSQU0gY292ZXJyZWQ6ICVsZE1cbiIsCi0JICAgICAgIHJhbmdlX3N1bXMgPj4gKDIwIC0gUEFHRV9TSElGVCkpOwotCi0JaWYgKG10cnJfY2h1bmtfc2l6ZSAmJiBtdHJyX2dyYW5fc2l6ZSkgewotCQlpID0gMDsKLQkJbXRycl9jYWxjX3JhbmdlX3N0YXRlKG10cnJfY2h1bmtfc2l6ZSwgbXRycl9ncmFuX3NpemUsCi0JCQkJICAgICAgZXh0cmFfcmVtb3ZlX2Jhc2UsIGV4dHJhX3JlbW92ZV9zaXplLCBpKTsKLQotCQltdHJyX3ByaW50X291dF9vbmVfcmVzdWx0KGkpOwotCi0JCWlmICghcmVzdWx0W2ldLmJhZCkgewotCQkJc2V0X3Zhcl9tdHJyX2FsbChhZGRyZXNzX2JpdHMpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiaW52YWxpZCBtdHJyX2dyYW5fc2l6ZSBvciBtdHJyX2NodW5rX3NpemUsICIKLQkJICAgICAgICJ3aWxsIGZpbmQgb3B0aW1hbCBvbmVcbiIpOwotCX0KLQotCWkgPSAwOwotCW1lbXNldChtaW5fbG9zc19wZm4sIDB4ZmYsIHNpemVvZihtaW5fbG9zc19wZm4pKTsKLQltZW1zZXQocmVzdWx0LCAwLCBzaXplb2YocmVzdWx0KSk7Ci0JZm9yIChncmFuX3NpemUgPSAoMVVMTDw8MTYpOyBncmFuX3NpemUgPCAoMVVMTDw8MzIpOyBncmFuX3NpemUgPDw9IDEpIHsKLQotCQlmb3IgKGNodW5rX3NpemUgPSBncmFuX3NpemU7IGNodW5rX3NpemUgPCAoMVVMTDw8MzIpOwotCQkgICAgIGNodW5rX3NpemUgPDw9IDEpIHsKLQotCQkJaWYgKGkgPj0gTlVNX1JFU1VMVCkKLQkJCQljb250aW51ZTsKLQotCQkJbXRycl9jYWxjX3JhbmdlX3N0YXRlKGNodW5rX3NpemUsIGdyYW5fc2l6ZSwKLQkJCQkgICAgICBleHRyYV9yZW1vdmVfYmFzZSwgZXh0cmFfcmVtb3ZlX3NpemUsIGkpOwotCQkJaWYgKGRlYnVnX3ByaW50KSB7Ci0JCQkJbXRycl9wcmludF9vdXRfb25lX3Jlc3VsdChpKTsKLQkJCQlwcmludGsoS0VSTl9JTkZPICJcbiIpOwotCQkJfQotCi0JCQlpKys7Ci0JCX0KLQl9Ci0KLQkvKiB0cnkgdG8gZmluZCB0aGUgb3B0aW1hbCBpbmRleCAqLwotCWluZGV4X2dvb2QgPSBtdHJyX3NlYXJjaF9vcHRpbWFsX2luZGV4KCk7Ci0KLQlpZiAoaW5kZXhfZ29vZCAhPSAtMSkgewotCQlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBvcHRpbWFsIHNldHRpbmcgZm9yIG10cnIgY2xlYW4gdXBcbiIpOwotCQlpID0gaW5kZXhfZ29vZDsKLQkJbXRycl9wcmludF9vdXRfb25lX3Jlc3VsdChpKTsKLQotCQkvKiBjb252ZXJ0IHJhbmdlcyB0byB2YXIgcmFuZ2VzIHN0YXRlICovCi0JCWNodW5rX3NpemUgPSByZXN1bHRbaV0uY2h1bmtfc2l6ZWs7Ci0JCWNodW5rX3NpemUgPDw9IDEwOwotCQlncmFuX3NpemUgPSByZXN1bHRbaV0uZ3Jhbl9zaXplazsKLQkJZ3Jhbl9zaXplIDw8PSAxMDsKLQkJeDg2X3NldHVwX3Zhcl9tdHJycyhyYW5nZSwgbnJfcmFuZ2UsIGNodW5rX3NpemUsIGdyYW5fc2l6ZSk7Ci0JCXNldF92YXJfbXRycl9hbGwoYWRkcmVzc19iaXRzKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIk5ldyB2YXJpYWJsZSBNVFJSc1xuIik7Ci0JCXByaW50X291dF9tdHJyX3JhbmdlX3N0YXRlKCk7Ci0JCXJldHVybiAxOwotCX0gZWxzZSB7Ci0JCS8qIHByaW50IG91dCBhbGwgKi8KLQkJZm9yIChpID0gMDsgaSA8IE5VTV9SRVNVTFQ7IGkrKykKLQkJCW10cnJfcHJpbnRfb3V0X29uZV9yZXN1bHQoaSk7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAibXRycl9jbGVhbnVwOiBjYW4gbm90IGZpbmQgb3B0aW1hbCB2YWx1ZVxuIik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAicGxlYXNlIHNwZWNpZnkgbXRycl9ncmFuX3NpemUvbXRycl9jaHVua19zaXplXG4iKTsKLQotCXJldHVybiAwOwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgX19pbml0IG10cnJfY2xlYW51cCh1bnNpZ25lZCBhZGRyZXNzX2JpdHMpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBfX2luaXRkYXRhIGNoYW5nZWRfYnlfbXRycl9jbGVhbnVwOwotCi1zdGF0aWMgaW50IGRpc2FibGVfbXRycl90cmltOwotCi1zdGF0aWMgaW50IF9faW5pdCBkaXNhYmxlX210cnJfdHJpbV9zZXR1cChjaGFyICpzdHIpCi17Ci0JZGlzYWJsZV9tdHJyX3RyaW0gPSAxOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImRpc2FibGVfbXRycl90cmltIiwgZGlzYWJsZV9tdHJyX3RyaW1fc2V0dXApOwotCi0vKgotICogTmV3ZXIgQU1EIEs4cyBhbmQgbGF0ZXIgQ1BVcyBoYXZlIGEgc3BlY2lhbCBtYWdpYyBNU1Igd2F5IHRvIGZvcmNlIFdCCi0gKiBmb3IgbWVtb3J5ID40R0IuIENoZWNrIGZvciB0aGF0IGhlcmUuCi0gKiBOb3RlIHRoaXMgd29uJ3QgY2hlY2sgaWYgdGhlIE1UUlJzIDwgNEdCIHdoZXJlIHRoZSBtYWdpYyBiaXQgZG9lc24ndAotICogYXBwbHkgdG8gYXJlIHdyb25nLCBidXQgc28gZmFyIHdlIGRvbid0IGtub3cgb2YgYW55IHN1Y2ggY2FzZSBpbiB0aGUgd2lsZC4KLSAqLwotI2RlZmluZSBUb20yRW5hYmxlZCAoMVUgPDwgMjEpCi0jZGVmaW5lIFRvbTJGb3JjZU1lbVR5cGVXQiAoMVUgPDwgMjIpCi0KLWludCBfX2luaXQgYW1kX3NwZWNpYWxfZGVmYXVsdF9tdHJyKHZvaWQpCi17Ci0JdTMyIGwsIGg7Ci0KLQlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EKQotCQlyZXR1cm4gMDsKLQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPCAweGYgfHwgYm9vdF9jcHVfZGF0YS54ODYgPiAweDExKQotCQlyZXR1cm4gMDsKLQkvKiBJbiBjYXNlIHNvbWUgaHlwZXJ2aXNvciBkb2Vzbid0IHBhc3MgU1lTQ0ZHIHRocm91Z2ggKi8KLQlpZiAocmRtc3Jfc2FmZShNU1JfSzhfU1lTQ0ZHLCAmbCwgJmgpIDwgMCkKLQkJcmV0dXJuIDA7Ci0JLyoKLQkgKiBNZW1vcnkgYmV0d2VlbiA0R0IgYW5kIHRvcCBvZiBtZW0gaXMgZm9yY2VkIFdCIGJ5IHRoaXMgbWFnaWMgYml0LgotCSAqIFJlc2VydmVkIGJlZm9yZSBLOFJldkYsIGJ1dCBzaG91bGQgYmUgemVybyB0aGVyZS4KLQkgKi8KLQlpZiAoKGwgJiAoVG9tMkVuYWJsZWQgfCBUb20yRm9yY2VNZW1UeXBlV0IpKSA9PQotCQkgKFRvbTJFbmFibGVkIHwgVG9tMkZvcmNlTWVtVHlwZVdCKSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1NjQgX19pbml0IHJlYWxfdHJpbV9tZW1vcnkodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCi0JCQkJICAgdW5zaWduZWQgbG9uZyBsaW1pdF9wZm4pCi17Ci0JdTY0IHRyaW1fc3RhcnQsIHRyaW1fc2l6ZTsKLQl0cmltX3N0YXJ0ID0gc3RhcnRfcGZuOwotCXRyaW1fc3RhcnQgPDw9IFBBR0VfU0hJRlQ7Ci0JdHJpbV9zaXplID0gbGltaXRfcGZuOwotCXRyaW1fc2l6ZSA8PD0gUEFHRV9TSElGVDsKLQl0cmltX3NpemUgLT0gdHJpbV9zdGFydDsKLQotCXJldHVybiBlODIwX3VwZGF0ZV9yYW5nZSh0cmltX3N0YXJ0LCB0cmltX3NpemUsIEU4MjBfUkFNLAotCQkJCUU4MjBfUkVTRVJWRUQpOwotfQotLyoqCi0gKiBtdHJyX3RyaW1fdW5jYWNoZWRfbWVtb3J5IC0gdHJpbSBSQU0gbm90IGNvdmVyZWQgYnkgTVRSUnMKLSAqIEBlbmRfcGZuOiBlbmRpbmcgcGFnZSBmcmFtZSBudW1iZXIKLSAqCi0gKiBTb21lIGJ1Z2d5IEJJT1NlcyBkb24ndCBzZXR1cCB0aGUgTVRSUnMgcHJvcGVybHkgZm9yIHN5c3RlbXMgd2l0aCBjZXJ0YWluCi0gKiBtZW1vcnkgY29uZmlndXJhdGlvbnMuICBUaGlzIHJvdXRpbmUgY2hlY2tzIHRoYXQgdGhlIGhpZ2hlc3QgTVRSUiBtYXRjaGVzCi0gKiB0aGUgZW5kIG9mIG1lbW9yeSwgdG8gbWFrZSBzdXJlIHRoZSBNVFJScyBoYXZpbmcgYSB3cml0ZSBiYWNrIHR5cGUgY292ZXIKLSAqIGFsbCBvZiB0aGUgbWVtb3J5IHRoZSBrZXJuZWwgaXMgaW50ZW5kaW5nIHRvIHVzZS4gSWYgbm90LCBpdCdsbCB0cmltIGFueQotICogbWVtb3J5IG9mZiB0aGUgZW5kIGJ5IGFkanVzdGluZyBlbmRfcGZuLCByZW1vdmluZyBpdCBmcm9tIHRoZSBrZXJuZWwncwotICogYWxsb2NhdGlvbiBwb29scywgd2FybmluZyB0aGUgdXNlciB3aXRoIGFuIG9ibm94aW91cyBtZXNzYWdlLgotICovCi1pbnQgX19pbml0IG10cnJfdHJpbV91bmNhY2hlZF9tZW1vcnkodW5zaWduZWQgbG9uZyBlbmRfcGZuKQotewotCXVuc2lnbmVkIGxvbmcgaSwgYmFzZSwgc2l6ZSwgaGlnaGVzdF9wZm4gPSAwLCBkZWYsIGR1bW15OwotCW10cnJfdHlwZSB0eXBlOwotCXU2NCB0b3RhbF90cmltX3NpemU7Ci0KLQkvKiBleHRyYSBvbmUgZm9yIGFsbCAwICovCi0JaW50IG51bVtNVFJSX05VTV9UWVBFUyArIDFdOwotCS8qCi0JICogTWFrZSBzdXJlIHdlIG9ubHkgdHJpbSB1bmNhY2hhYmxlIG1lbW9yeSBvbiBtYWNoaW5lcyB0aGF0Ci0JICogc3VwcG9ydCB0aGUgSW50ZWwgTVRSUiBhcmNoaXRlY3R1cmU6Ci0JICovCi0JaWYgKCFpc19jcHUoSU5URUwpIHx8IGRpc2FibGVfbXRycl90cmltKQotCQlyZXR1cm4gMDsKLQlyZG1zcihNVFJSZGVmVHlwZV9NU1IsIGRlZiwgZHVtbXkpOwotCWRlZiAmPSAweGZmOwotCWlmIChkZWYgIT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUpCi0JCXJldHVybiAwOwotCi0JLyogZ2V0IGl0IGFuZCBzdG9yZSBpdCBhc2lkZSAqLwotCW1lbXNldChyYW5nZV9zdGF0ZSwgMCwgc2l6ZW9mKHJhbmdlX3N0YXRlKSk7Ci0JZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKLQkJbXRycl9pZi0+Z2V0KGksICZiYXNlLCAmc2l6ZSwgJnR5cGUpOwotCQlyYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbiA9IGJhc2U7Ci0JCXJhbmdlX3N0YXRlW2ldLnNpemVfcGZuID0gc2l6ZTsKLQkJcmFuZ2Vfc3RhdGVbaV0udHlwZSA9IHR5cGU7Ci0JfQotCi0JLyogRmluZCBoaWdoZXN0IGNhY2hlZCBwZm4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgewotCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKLQkJaWYgKHR5cGUgIT0gTVRSUl9UWVBFX1dSQkFDSykKLQkJCWNvbnRpbnVlOwotCQliYXNlID0gcmFuZ2Vfc3RhdGVbaV0uYmFzZV9wZm47Ci0JCXNpemUgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbjsKLQkJaWYgKGhpZ2hlc3RfcGZuIDwgYmFzZSArIHNpemUpCi0JCQloaWdoZXN0X3BmbiA9IGJhc2UgKyBzaXplOwotCX0KLQotCS8qIGt2bS9xZW11IGRvZXNuJ3QgaGF2ZSBtdHJyIHNldCByaWdodCwgZG9uJ3QgdHJpbSB0aGVtIGFsbCAqLwotCWlmICghaGlnaGVzdF9wZm4pIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVIE1UUlJzIGFsbCBibGFuayAtIHZpcnR1YWxpemVkIHN5c3RlbS5cbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBjaGVjayBlbnRyaWVzIG51bWJlciAqLwotCW1lbXNldChudW0sIDAsIHNpemVvZihudW0pKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgewotCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKLQkJaWYgKHR5cGUgPj0gTVRSUl9OVU1fVFlQRVMpCi0JCQljb250aW51ZTsKLQkJc2l6ZSA9IHJhbmdlX3N0YXRlW2ldLnNpemVfcGZuOwotCQlpZiAoIXNpemUpCi0JCQl0eXBlID0gTVRSUl9OVU1fVFlQRVM7Ci0JCW51bVt0eXBlXSsrOwotCX0KLQotCS8qIG5vIGVudHJ5IGZvciBXQj8gKi8KLQlpZiAoIW51bVtNVFJSX1RZUEVfV1JCQUNLXSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBjaGVjayBpZiB3ZSBvbmx5IGhhZCBXQiBhbmQgVUMgKi8KLQlpZiAobnVtW01UUlJfVFlQRV9XUkJBQ0tdICsgbnVtW01UUlJfVFlQRV9VTkNBQ0hBQkxFXSAhPQotCQludW1fdmFyX3JhbmdlcyAtIG51bVtNVFJSX05VTV9UWVBFU10pCi0JCXJldHVybiAwOwotCi0JbWVtc2V0KHJhbmdlLCAwLCBzaXplb2YocmFuZ2UpKTsKLQlucl9yYW5nZSA9IDA7Ci0JaWYgKG10cnJfdG9tMikgewotCQlyYW5nZVtucl9yYW5nZV0uc3RhcnQgPSAoMVVMTDw8KDMyIC0gUEFHRV9TSElGVCkpOwotCQlyYW5nZVtucl9yYW5nZV0uZW5kID0gKG10cnJfdG9tMiA+PiBQQUdFX1NISUZUKSAtIDE7Ci0JCWlmIChoaWdoZXN0X3BmbiA8IHJhbmdlW25yX3JhbmdlXS5lbmQgKyAxKQotCQkJaGlnaGVzdF9wZm4gPSByYW5nZVtucl9yYW5nZV0uZW5kICsgMTsKLQkJbnJfcmFuZ2UrKzsKLQl9Ci0JbnJfcmFuZ2UgPSB4ODZfZ2V0X210cnJfbWVtX3JhbmdlKHJhbmdlLCBucl9yYW5nZSwgMCwgMCk7Ci0KLQl0b3RhbF90cmltX3NpemUgPSAwOwotCS8qIGNoZWNrIHRoZSBoZWFkICovCi0JaWYgKHJhbmdlWzBdLnN0YXJ0KQotCQl0b3RhbF90cmltX3NpemUgKz0gcmVhbF90cmltX21lbW9yeSgwLCByYW5nZVswXS5zdGFydCk7Ci0JLyogY2hlY2sgdGhlIGhvbGVzICovCi0JZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlIC0gMTsgaSsrKSB7Ci0JCWlmIChyYW5nZVtpXS5lbmQgKyAxIDwgcmFuZ2VbaSsxXS5zdGFydCkKLQkJCXRvdGFsX3RyaW1fc2l6ZSArPSByZWFsX3RyaW1fbWVtb3J5KHJhbmdlW2ldLmVuZCArIDEsCi0JCQkJCQkJICAgIHJhbmdlW2krMV0uc3RhcnQpOwotCX0KLQkvKiBjaGVjayB0aGUgdG9wICovCi0JaSA9IG5yX3JhbmdlIC0gMTsKLQlpZiAocmFuZ2VbaV0uZW5kICsgMSA8IGVuZF9wZm4pCi0JCXRvdGFsX3RyaW1fc2l6ZSArPSByZWFsX3RyaW1fbWVtb3J5KHJhbmdlW2ldLmVuZCArIDEsCi0JCQkJCQkJIGVuZF9wZm4pOwotCi0JaWYgKHRvdGFsX3RyaW1fc2l6ZSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HOiBCSU9TIGJ1ZzogQ1BVIE1UUlJzIGRvbid0IGNvdmVyIgotCQkJIiBhbGwgb2YgbWVtb3J5LCBsb3NpbmcgJWxsdU1CIG9mIFJBTS5cbiIsCi0JCQl0b3RhbF90cmltX3NpemUgPj4gMjApOwotCi0JCWlmICghY2hhbmdlZF9ieV9tdHJyX2NsZWFudXApCi0JCQlXQVJOX09OKDEpOwotCi0JCXByaW50ayhLRVJOX0lORk8gInVwZGF0ZSBlODIwIGZvciBtdHJyXG4iKTsKLQkJdXBkYXRlX2U4MjAoKTsKLQotCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KK2ludCBfX2luaXRkYXRhIGNoYW5nZWRfYnlfbXRycl9jbGVhbnVwOwogCiAvKioKICAqIG10cnJfYnBfaW5pdCAtIGluaXRpYWxpemUgbXRycnMgb24gdGhlIGJvb3QgQ1BVCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbXRyci5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL210cnIuaAppbmRleCBmZmQ2MDQwLi43N2Y2N2Y3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbXRyci5oCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tdHJyLmgKQEAgLTc5LDYgKzc5LDcgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBudW1fdmFyX3JhbmdlczsKIGV4dGVybiB1NjQgbXRycl90b20yOworZXh0ZXJuIHN0cnVjdCBtdHJyX3N0YXRlX3R5cGUgbXRycl9zdGF0ZTsKIAogdm9pZCBtdHJyX3N0YXRlX3dhcm4odm9pZCk7CiBjb25zdCBjaGFyICptdHJyX2F0dHJpYl90b19zdHIoaW50IHgpOwpAQCAtODgsMyArODksNiBAQAogaW50IGFtZF9pbml0X210cnIodm9pZCk7CiBpbnQgY3lyaXhfaW5pdF9tdHJyKHZvaWQpOwogaW50IGNlbnRhdXJfaW5pdF9tdHJyKHZvaWQpOworCitleHRlcm4gaW50IGNoYW5nZWRfYnlfbXRycl9jbGVhbnVwOworZXh0ZXJuIGludCBtdHJyX2NsZWFudXAodW5zaWduZWQgYWRkcmVzc19iaXRzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvdHJhbnNtZXRhLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3RyYW5zbWV0YS5jCmluZGV4IDUyYjNmZWYuLmJiNjJiM2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvdHJhbnNtZXRhLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS90cmFuc21ldGEuYwpAQCAtOTgsNyArOTgsNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3B1X2RldiB0cmFuc21ldGFfY3B1X2RldiBfX2NwdWluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVfZGV2IF9fY3B1aW5pdGNvbnN0IHRyYW5zbWV0YV9jcHVfZGV2ID0gewogCS5jX3ZlbmRvcgk9ICJUcmFuc21ldGEiLAogCS5jX2lkZW50CT0geyAiR2VudWluZVRNeDg2IiwgIlRyYW5zbWV0YUNQVSIgfSwKIAkuY19lYXJseV9pbml0CT0gZWFybHlfaW5pdF90cmFuc21ldGEsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3VtYy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS91bWMuYwppbmRleCBlNzc3Zjc5Li5mZDJjMzdiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3VtYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvdW1jLmMKQEAgLTgsNyArOCw3IEBACiAgKiBzbyBubyBzcGVjaWFsIGluaXQgdGFrZXMgcGxhY2UuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBjcHVfZGV2IHVtY19jcHVfZGV2IF9fY3B1aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdV9kZXYgX19jcHVpbml0Y29uc3QgdW1jX2NwdV9kZXYgPSB7CiAJLmNfdmVuZG9yCT0gIlVNQyIsCiAJLmNfaWRlbnQJPSB7ICJVTUMgVU1DIFVNQyIgfSwKIAkuY19tb2RlbHMgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKaW5kZXggODdkMTAzZC4uZGQyMTMwYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvbm1pLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwppbmRleCA1MDhiZWMxLi5lZjJjMzU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKQEAgLTExMCwxOSArMTEwLDUwIEBACiAvKgogICogQWRkIGEgbWVtb3J5IHJlZ2lvbiB0byB0aGUga2VybmVsIGU4MjAgbWFwLgogICovCi12b2lkIF9faW5pdCBlODIwX2FkZF9yZWdpb24odTY0IHN0YXJ0LCB1NjQgc2l6ZSwgaW50IHR5cGUpCitzdGF0aWMgdm9pZCBfX2luaXQgX19lODIwX2FkZF9yZWdpb24oc3RydWN0IGU4MjBtYXAgKmU4MjB4LCB1NjQgc3RhcnQsIHU2NCBzaXplLAorCQkJCQkgaW50IHR5cGUpCiB7Ci0JaW50IHggPSBlODIwLm5yX21hcDsKKwlpbnQgeCA9IGU4MjB4LT5ucl9tYXA7CiAKLQlpZiAoeCA9PSBBUlJBWV9TSVpFKGU4MjAubWFwKSkgeworCWlmICh4ID09IEFSUkFZX1NJWkUoZTgyMHgtPm1hcCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJPb29wcyEgVG9vIG1hbnkgZW50cmllcyBpbiB0aGUgbWVtb3J5IG1hcCFcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JZTgyMC5tYXBbeF0uYWRkciA9IHN0YXJ0OwotCWU4MjAubWFwW3hdLnNpemUgPSBzaXplOwotCWU4MjAubWFwW3hdLnR5cGUgPSB0eXBlOwotCWU4MjAubnJfbWFwKys7CisJZTgyMHgtPm1hcFt4XS5hZGRyID0gc3RhcnQ7CisJZTgyMHgtPm1hcFt4XS5zaXplID0gc2l6ZTsKKwllODIweC0+bWFwW3hdLnR5cGUgPSB0eXBlOworCWU4MjB4LT5ucl9tYXArKzsKK30KKwordm9pZCBfX2luaXQgZTgyMF9hZGRfcmVnaW9uKHU2NCBzdGFydCwgdTY0IHNpemUsIGludCB0eXBlKQoreworCV9fZTgyMF9hZGRfcmVnaW9uKCZlODIwLCBzdGFydCwgc2l6ZSwgdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlODIwX3ByaW50X3R5cGUodTMyIHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBFODIwX1JBTToKKwljYXNlIEU4MjBfUkVTRVJWRURfS0VSTjoKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKHVzYWJsZSkiKTsKKwkJYnJlYWs7CisJY2FzZSBFODIwX1JFU0VSVkVEOgorCQlwcmludGsoS0VSTl9DT05UICIocmVzZXJ2ZWQpIik7CisJCWJyZWFrOworCWNhc2UgRTgyMF9BQ1BJOgorCQlwcmludGsoS0VSTl9DT05UICIoQUNQSSBkYXRhKSIpOworCQlicmVhazsKKwljYXNlIEU4MjBfTlZTOgorCQlwcmludGsoS0VSTl9DT05UICIoQUNQSSBOVlMpIik7CisJCWJyZWFrOworCWNhc2UgRTgyMF9VTlVTQUJMRToKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKHVudXNhYmxlKSIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9DT05UICJ0eXBlICV1IiwgdHlwZSk7CisJCWJyZWFrOworCX0KIH0KIAogdm9pZCBfX2luaXQgZTgyMF9wcmludF9tYXAoY2hhciAqd2hvKQpAQCAtMTM0LDI3ICsxNjUsOCBAQAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgZTgyMC5tYXBbaV0uYWRkciwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCiAJCSAgICAgICAoZTgyMC5tYXBbaV0uYWRkciArIGU4MjAubWFwW2ldLnNpemUpKTsKLQkJc3dpdGNoIChlODIwLm1hcFtpXS50eXBlKSB7Ci0JCWNhc2UgRTgyMF9SQU06Ci0JCWNhc2UgRTgyMF9SRVNFUlZFRF9LRVJOOgotCQkJcHJpbnRrKEtFUk5fQ09OVCAiKHVzYWJsZSlcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRTgyMF9SRVNFUlZFRDoKLQkJCXByaW50ayhLRVJOX0NPTlQgIihyZXNlcnZlZClcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRTgyMF9BQ1BJOgotCQkJcHJpbnRrKEtFUk5fQ09OVCAiKEFDUEkgZGF0YSlcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRTgyMF9OVlM6Ci0JCQlwcmludGsoS0VSTl9DT05UICIoQUNQSSBOVlMpXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIEU4MjBfVU5VU0FCTEU6Ci0JCQlwcmludGsoIih1bnVzYWJsZSlcbiIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9DT05UICJ0eXBlICV1XG4iLCBlODIwLm1hcFtpXS50eXBlKTsKLQkJCWJyZWFrOwotCQl9CisJCWU4MjBfcHJpbnRfdHlwZShlODIwLm1hcFtpXS50eXBlKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAl9CiB9CiAKQEAgLTIyMSw3ICsyMzMsNyBAQAogICovCiAKIGludCBfX2luaXQgc2FuaXRpemVfZTgyMF9tYXAoc3RydWN0IGU4MjBlbnRyeSAqYmlvc21hcCwgaW50IG1heF9ucl9tYXAsCi0JCQkJaW50ICpwbnJfbWFwKQorCQkJICAgICB1MzIgKnBucl9tYXApCiB7CiAJc3RydWN0IGNoYW5nZV9tZW1iZXIgewogCQlzdHJ1Y3QgZTgyMGVudHJ5ICpwYmlvczsgLyogcG9pbnRlciB0byBvcmlnaW5hbCBiaW9zIGVudHJ5ICovCkBAIC00MTcsMTEgKzQyOSwxMiBAQAogCXJldHVybiBfX2FwcGVuZF9lODIwX21hcChiaW9zbWFwLCBucl9tYXApOwogfQogCi1zdGF0aWMgdTY0IF9faW5pdCBlODIwX3VwZGF0ZV9yYW5nZV9tYXAoc3RydWN0IGU4MjBtYXAgKmU4MjB4LCB1NjQgc3RhcnQsCitzdGF0aWMgdTY0IF9faW5pdCBfX2U4MjBfdXBkYXRlX3JhbmdlKHN0cnVjdCBlODIwbWFwICplODIweCwgdTY0IHN0YXJ0LAogCQkJCQl1NjQgc2l6ZSwgdW5zaWduZWQgb2xkX3R5cGUsCiAJCQkJCXVuc2lnbmVkIG5ld190eXBlKQogewotCWludCBpOworCXU2NCBlbmQ7CisJdW5zaWduZWQgaW50IGk7CiAJdTY0IHJlYWxfdXBkYXRlZF9zaXplID0gMDsKIAogCUJVR19PTihvbGRfdHlwZSA9PSBuZXdfdHlwZSk7CkBAIC00MjksMjcgKzQ0Miw1NSBAQAogCWlmIChzaXplID4gKFVMTE9OR19NQVggLSBzdGFydCkpCiAJCXNpemUgPSBVTExPTkdfTUFYIC0gc3RhcnQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgeworCWVuZCA9IHN0YXJ0ICsgc2l6ZTsKKwlwcmludGsoS0VSTl9ERUJVRyAiZTgyMCB1cGRhdGUgcmFuZ2U6ICUwMTZMeCAtICUwMTZMeCAiLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhcnQsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBlbmQpOworCWU4MjBfcHJpbnRfdHlwZShvbGRfdHlwZSk7CisJcHJpbnRrKEtFUk5fQ09OVCAiID09PiAiKTsKKwllODIwX3ByaW50X3R5cGUobmV3X3R5cGUpOworCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgZTgyMHgtPm5yX21hcDsgaSsrKSB7CiAJCXN0cnVjdCBlODIwZW50cnkgKmVpID0gJmU4MjB4LT5tYXBbaV07CiAJCXU2NCBmaW5hbF9zdGFydCwgZmluYWxfZW5kOworCQl1NjQgZWlfZW5kOworCiAJCWlmIChlaS0+dHlwZSAhPSBvbGRfdHlwZSkKIAkJCWNvbnRpbnVlOwotCQkvKiB0b3RhbGx5IGNvdmVyZWQ/ICovCi0JCWlmIChlaS0+YWRkciA+PSBzdGFydCAmJgotCQkgICAgKGVpLT5hZGRyICsgZWktPnNpemUpIDw9IChzdGFydCArIHNpemUpKSB7CisKKwkJZWlfZW5kID0gZWktPmFkZHIgKyBlaS0+c2l6ZTsKKwkJLyogdG90YWxseSBjb3ZlcmVkIGJ5IG5ldyByYW5nZT8gKi8KKwkJaWYgKGVpLT5hZGRyID49IHN0YXJ0ICYmIGVpX2VuZCA8PSBlbmQpIHsKIAkJCWVpLT50eXBlID0gbmV3X3R5cGU7CiAJCQlyZWFsX3VwZGF0ZWRfc2l6ZSArPSBlaS0+c2l6ZTsKIAkJCWNvbnRpbnVlOwogCQl9CisKKwkJLyogbmV3IHJhbmdlIGlzIHRvdGFsbHkgY292ZXJlZD8gKi8KKwkJaWYgKGVpLT5hZGRyIDwgc3RhcnQgJiYgZWlfZW5kID4gZW5kKSB7CisJCQlfX2U4MjBfYWRkX3JlZ2lvbihlODIweCwgc3RhcnQsIHNpemUsIG5ld190eXBlKTsKKwkJCV9fZTgyMF9hZGRfcmVnaW9uKGU4MjB4LCBlbmQsIGVpX2VuZCAtIGVuZCwgZWktPnR5cGUpOworCQkJZWktPnNpemUgPSBzdGFydCAtIGVpLT5hZGRyOworCQkJcmVhbF91cGRhdGVkX3NpemUgKz0gc2l6ZTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJLyogcGFydGlhbGx5IGNvdmVyZWQgKi8KIAkJZmluYWxfc3RhcnQgPSBtYXgoc3RhcnQsIGVpLT5hZGRyKTsKLQkJZmluYWxfZW5kID0gbWluKHN0YXJ0ICsgc2l6ZSwgZWktPmFkZHIgKyBlaS0+c2l6ZSk7CisJCWZpbmFsX2VuZCA9IG1pbihlbmQsIGVpX2VuZCk7CiAJCWlmIChmaW5hbF9zdGFydCA+PSBmaW5hbF9lbmQpCiAJCQljb250aW51ZTsKLQkJZTgyMF9hZGRfcmVnaW9uKGZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQgLSBmaW5hbF9zdGFydCwKLQkJCQkJIG5ld190eXBlKTsKKworCQlfX2U4MjBfYWRkX3JlZ2lvbihlODIweCwgZmluYWxfc3RhcnQsIGZpbmFsX2VuZCAtIGZpbmFsX3N0YXJ0LAorCQkJCSAgbmV3X3R5cGUpOworCiAJCXJlYWxfdXBkYXRlZF9zaXplICs9IGZpbmFsX2VuZCAtIGZpbmFsX3N0YXJ0OwogCisJCS8qCisJCSAqIGxlZnQgcmFuZ2UgY291bGQgYmUgaGVhZCBvciB0YWlsLCBzbyBuZWVkIHRvIHVwZGF0ZQorCQkgKiBzaXplIGF0IGZpcnN0LgorCQkgKi8KIAkJZWktPnNpemUgLT0gZmluYWxfZW5kIC0gZmluYWxfc3RhcnQ7CiAJCWlmIChlaS0+YWRkciA8IGZpbmFsX3N0YXJ0KQogCQkJY29udGludWU7CkBAIC00NjEsMTMgKzUwMiwxMyBAQAogdTY0IF9faW5pdCBlODIwX3VwZGF0ZV9yYW5nZSh1NjQgc3RhcnQsIHU2NCBzaXplLCB1bnNpZ25lZCBvbGRfdHlwZSwKIAkJCSAgICAgdW5zaWduZWQgbmV3X3R5cGUpCiB7Ci0JcmV0dXJuIGU4MjBfdXBkYXRlX3JhbmdlX21hcCgmZTgyMCwgc3RhcnQsIHNpemUsIG9sZF90eXBlLCBuZXdfdHlwZSk7CisJcmV0dXJuIF9fZTgyMF91cGRhdGVfcmFuZ2UoJmU4MjAsIHN0YXJ0LCBzaXplLCBvbGRfdHlwZSwgbmV3X3R5cGUpOwogfQogCiBzdGF0aWMgdTY0IF9faW5pdCBlODIwX3VwZGF0ZV9yYW5nZV9zYXZlZCh1NjQgc3RhcnQsIHU2NCBzaXplLAogCQkJCQkgIHVuc2lnbmVkIG9sZF90eXBlLCB1bnNpZ25lZCBuZXdfdHlwZSkKIHsKLQlyZXR1cm4gZTgyMF91cGRhdGVfcmFuZ2VfbWFwKCZlODIwX3NhdmVkLCBzdGFydCwgc2l6ZSwgb2xkX3R5cGUsCisJcmV0dXJuIF9fZTgyMF91cGRhdGVfcmFuZ2UoJmU4MjBfc2F2ZWQsIHN0YXJ0LCBzaXplLCBvbGRfdHlwZSwKIAkJCQkgICAgIG5ld190eXBlKTsKIH0KIApAQCAtNTExLDcgKzU1Miw3IEBACiAKIHZvaWQgX19pbml0IHVwZGF0ZV9lODIwKHZvaWQpCiB7Ci0JaW50IG5yX21hcDsKKwl1MzIgbnJfbWFwOwogCiAJbnJfbWFwID0gZTgyMC5ucl9tYXA7CiAJaWYgKHNhbml0aXplX2U4MjBfbWFwKGU4MjAubWFwLCBBUlJBWV9TSVpFKGU4MjAubWFwKSwgJm5yX21hcCkpCkBAIC01MjIsNyArNTYzLDcgQEAKIH0KIHN0YXRpYyB2b2lkIF9faW5pdCB1cGRhdGVfZTgyMF9zYXZlZCh2b2lkKQogewotCWludCBucl9tYXA7CisJdTMyIG5yX21hcDsKIAogCW5yX21hcCA9IGU4MjBfc2F2ZWQubnJfbWFwOwogCWlmIChzYW5pdGl6ZV9lODIwX21hcChlODIwX3NhdmVkLm1hcCwgQVJSQVlfU0laRShlODIwX3NhdmVkLm1hcCksICZucl9tYXApKQpAQCAtMTAyMCw4ICsxMDYxLDggQEAKIAkJCWNvbnRpbnVlOwogCQlyZXR1cm4gYWRkcjsKIAl9Ci0JcmV0dXJuIC0xVUw7CiAKKwlyZXR1cm4gLTFVTEw7CiB9CiAKIC8qCkBAIC0xMDM0LDEzICsxMDc1LDIyIEBACiAJdTY0IHN0YXJ0OwogCiAJc3RhcnQgPSBzdGFydHQ7Ci0Jd2hpbGUgKHNpemUgPCBzaXpldCkKKwl3aGlsZSAoc2l6ZSA8IHNpemV0ICYmIChzdGFydCArIDEpKQogCQlzdGFydCA9IGZpbmRfZTgyMF9hcmVhX3NpemUoc3RhcnQsICZzaXplLCBhbGlnbik7CiAKIAlpZiAoc2l6ZSA8IHNpemV0KQogCQlyZXR1cm4gMDsKIAorI2lmZGVmIENPTkZJR19YODZfMzIKKwlpZiAoc3RhcnQgPj0gTUFYTUVNKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RhcnQgKyBzaXplID4gTUFYTUVNKQorCQlzaXplID0gTUFYTUVNIC0gc3RhcnQ7CisjZW5kaWYKKwogCWFkZHIgPSByb3VuZF9kb3duKHN0YXJ0ICsgc2l6ZSAtIHNpemV0LCBhbGlnbik7CisJaWYgKGFkZHIgPCBzdGFydCkKKwkJcmV0dXJuIDA7CiAJZTgyMF91cGRhdGVfcmFuZ2UoYWRkciwgc2l6ZXQsIEU4MjBfUkFNLCBFODIwX1JFU0VSVkVEKTsKIAllODIwX3VwZGF0ZV9yYW5nZV9zYXZlZChhZGRyLCBzaXpldCwgRTgyMF9SQU0sIEU4MjBfUkVTRVJWRUQpOwogCXByaW50ayhLRVJOX0lORk8gInVwZGF0ZSBlODIwIGZvciBlYXJseV9yZXNlcnZlX2U4MjBcbiIpOwpAQCAtMTI1Myw3ICsxMzAzLDcgQEAKIHZvaWQgX19pbml0IGZpbmlzaF9lODIwX3BhcnNpbmcodm9pZCkKIHsKIAlpZiAodXNlcmRlZikgewotCQlpbnQgbnIgPSBlODIwLm5yX21hcDsKKwkJdTMyIG5yID0gZTgyMC5ucl9tYXA7CiAKIAkJaWYgKHNhbml0aXplX2U4MjBfbWFwKGU4MjAubWFwLCBBUlJBWV9TSVpFKGU4MjAubWFwKSwgJm5yKSA8IDApCiAJCQllYXJseV9wYW5pYygiSW52YWxpZCB1c2VyIHN1cHBsaWVkIG1lbW9yeSBtYXAiKTsKQEAgLTEzMzYsNyArMTM4Niw3IEBACiBjaGFyICpfX2luaXQgZGVmYXVsdF9tYWNoaW5lX3NwZWNpZmljX21lbW9yeV9zZXR1cCh2b2lkKQogewogCWNoYXIgKndobyA9ICJCSU9TLWU4MjAiOwotCWludCBuZXdfbnI7CisJdTMyIG5ld19ucjsKIAkvKgogCSAqIFRyeSB0byBjb3B5IHRoZSBCSU9TLXN1cHBsaWVkIEU4MjAtbWFwLgogCSAqCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMKaW5kZXggNjM5YWQ5OC4uMzM1ZjA0OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYwpAQCAtMjUwLDcgKzI1MCw3IEBACiAJcmV0dXJuIChjdHJsICYgREJHUF9FUlJPUikgPyAtREJHUF9FUlJDT0RFKGN0cmwpIDogREJHUF9MRU4oY3RybCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRiZ3BfbWRlbGF5KGludCBtcykKK3N0YXRpYyB2b2lkIF9faW5pdCBkYmdwX21kZWxheShpbnQgbXMpCiB7CiAJaW50IGk7CiAKQEAgLTMxMSw3ICszMTEsNyBAQAogCXdyaXRlbChoaSwgJmVoY2lfZGVidWctPmRhdGE0Nyk7CiB9CiAKLXN0YXRpYyB2b2lkIGRiZ3BfZ2V0X2RhdGEodm9pZCAqYnVmLCBpbnQgc2l6ZSkKK3N0YXRpYyB2b2lkIF9faW5pdCBkYmdwX2dldF9kYXRhKHZvaWQgKmJ1ZiwgaW50IHNpemUpCiB7CiAJdW5zaWduZWQgY2hhciAqYnl0ZXMgPSBidWY7CiAJdTMyIGxvLCBoaTsKQEAgLTM1NSw3ICszNTUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZGJncF9idWxrX3JlYWQodW5zaWduZWQgZGV2bnVtLCB1bnNpZ25lZCBlbmRwb2ludCwgdm9pZCAqZGF0YSwKK3N0YXRpYyBpbnQgX19pbml0IGRiZ3BfYnVsa19yZWFkKHVuc2lnbmVkIGRldm51bSwgdW5zaWduZWQgZW5kcG9pbnQsIHZvaWQgKmRhdGEsCiAJCQkJIGludCBzaXplKQogewogCXUzMiBwaWRzLCBhZGRyLCBjdHJsOwpAQCAtMzg2LDggKzM4Niw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBkYmdwX2NvbnRyb2xfbXNnKHVuc2lnbmVkIGRldm51bSwgaW50IHJlcXVlc3R0eXBlLCBpbnQgcmVxdWVzdCwKLQlpbnQgdmFsdWUsIGludCBpbmRleCwgdm9pZCAqZGF0YSwgaW50IHNpemUpCitzdGF0aWMgaW50IF9faW5pdCBkYmdwX2NvbnRyb2xfbXNnKHVuc2lnbmVkIGRldm51bSwgaW50IHJlcXVlc3R0eXBlLAorCWludCByZXF1ZXN0LCBpbnQgdmFsdWUsIGludCBpbmRleCwgdm9pZCAqZGF0YSwgaW50IHNpemUpCiB7CiAJdTMyIHBpZHMsIGFkZHIsIGN0cmw7CiAJc3RydWN0IHVzYl9jdHJscmVxdWVzdCByZXE7CkBAIC00ODksNyArNDg5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBlaGNpX3Jlc2V0X3BvcnQoaW50IHBvcnQpCitzdGF0aWMgaW50IF9faW5pdCBlaGNpX3Jlc2V0X3BvcnQoaW50IHBvcnQpCiB7CiAJdTMyIHBvcnRzYzsKIAl1MzIgZGVsYXlfdGltZSwgZGVsYXk7CkBAIC01MzIsNyArNTMyLDcgQEAKIAlyZXR1cm4gLUVCVVNZOwogfQogCi1zdGF0aWMgaW50IGVoY2lfd2FpdF9mb3JfcG9ydChpbnQgcG9ydCkKK3N0YXRpYyBpbnQgX19pbml0IGVoY2lfd2FpdF9mb3JfcG9ydChpbnQgcG9ydCkKIHsKIAl1MzIgc3RhdHVzOwogCWludCByZXQsIHJlcHM7CkBAIC01NTcsMTMgKzU1NywxMyBAQAogCiB0eXBlZGVmIHZvaWQgKCpzZXRfZGVidWdfcG9ydF90KShpbnQgcG9ydCk7CiAKLXN0YXRpYyB2b2lkIGRlZmF1bHRfc2V0X2RlYnVnX3BvcnQoaW50IHBvcnQpCitzdGF0aWMgdm9pZCBfX2luaXQgZGVmYXVsdF9zZXRfZGVidWdfcG9ydChpbnQgcG9ydCkKIHsKIH0KIAotc3RhdGljIHNldF9kZWJ1Z19wb3J0X3Qgc2V0X2RlYnVnX3BvcnQgPSBkZWZhdWx0X3NldF9kZWJ1Z19wb3J0Oworc3RhdGljIHNldF9kZWJ1Z19wb3J0X3QgX19pbml0ZGF0YSBzZXRfZGVidWdfcG9ydCA9IGRlZmF1bHRfc2V0X2RlYnVnX3BvcnQ7CiAKLXN0YXRpYyB2b2lkIG52aWRpYV9zZXRfZGVidWdfcG9ydChpbnQgcG9ydCkKK3N0YXRpYyB2b2lkIF9faW5pdCBudmlkaWFfc2V0X2RlYnVnX3BvcnQoaW50IHBvcnQpCiB7CiAJdTMyIGR3b3JkOwogCWR3b3JkID0gcmVhZF9wY2lfY29uZmlnKGVoY2lfZGV2LmJ1cywgZWhjaV9kZXYuc2xvdCwgZWhjaV9kZXYuZnVuYywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzMyLlMKaW5kZXggODk5ZTg5My4uYzkyOWFkZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzMyLlMKQEAgLTQ0Miw4ICs0NDIsNyBAQAogCiAJR0VUX1RIUkVBRF9JTkZPKCVlYnApCiAKLQkvKiBOb3RlLCBfVElGX1NFQ0NPTVAgaXMgYml0IG51bWJlciA4LCBhbmQgc28gaXQgbmVlZHMgdGVzdHcgYW5kIG5vdCB0ZXN0YiAqLwotCXRlc3R3ICRfVElGX1dPUktfU1lTQ0FMTF9FTlRSWSxUSV9mbGFncyglZWJwKQorCXRlc3RsICRfVElGX1dPUktfU1lTQ0FMTF9FTlRSWSxUSV9mbGFncyglZWJwKQogCWpueiBzeXNlbnRlcl9hdWRpdAogc3lzZW50ZXJfZG9fY2FsbDoKIAljbXBsICQobnJfc3lzY2FsbHMpLCAlZWF4CkBAIC00NTQsNyArNDUzLDcgQEAKIAlESVNBQkxFX0lOVEVSUlVQVFMoQ0xCUl9BTlkpCiAJVFJBQ0VfSVJRU19PRkYKIAltb3ZsIFRJX2ZsYWdzKCVlYnApLCAlZWN4Ci0JdGVzdHcgJF9USUZfQUxMV09SS19NQVNLLCAlY3gKKwl0ZXN0bCAkX1RJRl9BTExXT1JLX01BU0ssICVlY3gKIAlqbmUgc3lzZXhpdF9hdWRpdAogc3lzZW50ZXJfZXhpdDoKIC8qIGlmIHNvbWV0aGluZyBtb2RpZmllcyByZWdpc3RlcnMgaXQgbXVzdCBhbHNvIGRpc2FibGUgc3lzZXhpdCAqLwpAQCAtNDY4LDcgKzQ2Nyw3IEBACiAKICNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCiBzeXNlbnRlcl9hdWRpdDoKLQl0ZXN0dyAkKF9USUZfV09SS19TWVNDQUxMX0VOVFJZICYgfl9USUZfU1lTQ0FMTF9BVURJVCksVElfZmxhZ3MoJWVicCkKKwl0ZXN0bCAkKF9USUZfV09SS19TWVNDQUxMX0VOVFJZICYgfl9USUZfU1lTQ0FMTF9BVURJVCksVElfZmxhZ3MoJWVicCkKIAlqbnogc3lzY2FsbF90cmFjZV9lbnRyeQogCWFkZGwgJDQsJWVzcAogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNApAQCAtNDg1LDcgKzQ4NCw3IEBACiAJam1wIHN5c2VudGVyX2RvX2NhbGwKIAogc3lzZXhpdF9hdWRpdDoKLQl0ZXN0dyAkKF9USUZfQUxMV09SS19NQVNLICYgfl9USUZfU1lTQ0FMTF9BVURJVCksICVjeAorCXRlc3RsICQoX1RJRl9BTExXT1JLX01BU0sgJiB+X1RJRl9TWVNDQUxMX0FVRElUKSwgJWVjeAogCWpuZSBzeXNjYWxsX2V4aXRfd29yawogCVRSQUNFX0lSUVNfT04KIAlFTkFCTEVfSU5URVJSVVBUUyhDTEJSX0FOWSkKQEAgLTQ5OCw3ICs0OTcsNyBAQAogCURJU0FCTEVfSU5URVJSVVBUUyhDTEJSX0FOWSkKIAlUUkFDRV9JUlFTX09GRgogCW1vdmwgVElfZmxhZ3MoJWVicCksICVlY3gKLQl0ZXN0dyAkKF9USUZfQUxMV09SS19NQVNLICYgfl9USUZfU1lTQ0FMTF9BVURJVCksICVjeAorCXRlc3RsICQoX1RJRl9BTExXT1JLX01BU0sgJiB+X1RJRl9TWVNDQUxMX0FVRElUKSwgJWVjeAogCWpuZSBzeXNjYWxsX2V4aXRfd29yawogCW1vdmwgUFRfRUFYKCVlc3ApLCVlYXgJLyogcmVsb2FkIHN5c2NhbGwgcmV0dXJuIHZhbHVlICovCiAJam1wIHN5c2VudGVyX2V4aXQKQEAgLTUyMyw4ICs1MjIsNyBAQAogCVNBVkVfQUxMCiAJR0VUX1RIUkVBRF9JTkZPKCVlYnApCiAJCQkJCSMgc3lzdGVtIGNhbGwgdHJhY2luZyBpbiBvcGVyYXRpb24gLyBlbXVsYXRpb24KLQkvKiBOb3RlLCBfVElGX1NFQ0NPTVAgaXMgYml0IG51bWJlciA4LCBhbmQgc28gaXQgbmVlZHMgdGVzdHcgYW5kIG5vdCB0ZXN0YiAqLwotCXRlc3R3ICRfVElGX1dPUktfU1lTQ0FMTF9FTlRSWSxUSV9mbGFncyglZWJwKQorCXRlc3RsICRfVElGX1dPUktfU1lTQ0FMTF9FTlRSWSxUSV9mbGFncyglZWJwKQogCWpueiBzeXNjYWxsX3RyYWNlX2VudHJ5CiAJY21wbCAkKG5yX3N5c2NhbGxzKSwgJWVheAogCWphZSBzeXNjYWxsX2JhZHN5cwpAQCAtNTM4LDcgKzUzNiw3IEBACiAJCQkJCSMgYmV0d2VlbiBzYW1wbGluZyBhbmQgdGhlIGlyZXQKIAlUUkFDRV9JUlFTX09GRgogCW1vdmwgVElfZmxhZ3MoJWVicCksICVlY3gKLQl0ZXN0dyAkX1RJRl9BTExXT1JLX01BU0ssICVjeAkjIGN1cnJlbnQtPndvcmsKKwl0ZXN0bCAkX1RJRl9BTExXT1JLX01BU0ssICVlY3gJIyBjdXJyZW50LT53b3JrCiAJam5lIHN5c2NhbGxfZXhpdF93b3JrCiAKIHJlc3RvcmVfYWxsOgpAQCAtNjczLDcgKzY3MSw3IEBACiAJIyBwZXJmb3JtIHN5c2NhbGwgZXhpdCB0cmFjaW5nCiAJQUxJR04KIHN5c2NhbGxfZXhpdF93b3JrOgotCXRlc3RiICRfVElGX1dPUktfU1lTQ0FMTF9FWElULCAlY2wKKwl0ZXN0bCAkX1RJRl9XT1JLX1NZU0NBTExfRVhJVCwgJWVjeAogCWp6IHdvcmtfcGVuZGluZwogCVRSQUNFX0lSUVNfT04KIAlFTkFCTEVfSU5URVJSVVBUUyhDTEJSX0FOWSkJIyBjb3VsZCBsZXQgc3lzY2FsbF90cmFjZV9sZWF2ZSgpIGNhbGwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKaW5kZXggODNkMTgzNi4uYTMzMWVjMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKQEAgLTM2OCw2ICszNjgsNyBAQAogRU5EKHNhdmVfcmVzdCkKIAogLyogc2F2ZSBjb21wbGV0ZSBzdGFjayBmcmFtZSAqLworCS5wdXNoc2VjdGlvbiAua3Byb2Jlcy50ZXh0LCAiYXgiCiBFTlRSWShzYXZlX3BhcmFub2lkKQogCVhDUFRfRlJBTUUgMSBSREkrOAogCWNsZApAQCAtMzk2LDYgKzM5Nyw3IEBACiAxOglyZXQKIAlDRklfRU5EUFJPQwogRU5EKHNhdmVfcGFyYW5vaWQpCisJLnBvcHNlY3Rpb24KIAogLyoKICAqIEEgbmV3bHkgZm9ya2VkIHByb2Nlc3MgZGlyZWN0bHkgY29udGV4dCBzd2l0Y2hlcyBpbnRvIHRoaXMgYWRkcmVzcy4KQEAgLTQxNiw3ICs0MTgsNiBAQAogCiAJR0VUX1RIUkVBRF9JTkZPKCVyY3gpCiAKLQlDRklfUkVNRU1CRVJfU1RBVEUKIAlSRVNUT1JFX1JFU1QKIAogCXRlc3RsICQzLCBDUy1BUkdPRkZTRVQoJXJzcCkJCSMgZnJvbSBrZXJuZWxfdGhyZWFkPwpAQCAtNDI4LDcgKzQyOSw2IEBACiAJUkVTVE9SRV9UT1BfT0ZfU1RBQ0sgJXJkaSwgLUFSR09GRlNFVAogCWptcCByZXRfZnJvbV9zeXNfY2FsbAkJCSMgZ28gdG8gdGhlIFNZU1JFVCBmYXN0cGF0aAogCi0JQ0ZJX1JFU1RPUkVfU1RBVEUKIAlDRklfRU5EUFJPQwogRU5EKHJldF9mcm9tX2ZvcmspCiAKQEAgLTk4NCw2ICs5ODQsOCBAQAogI2VuZGlmCiBhcGljaW50ZXJydXB0IExPQ0FMX1RJTUVSX1ZFQ1RPUiBcCiAJYXBpY190aW1lcl9pbnRlcnJ1cHQgc21wX2FwaWNfdGltZXJfaW50ZXJydXB0CithcGljaW50ZXJydXB0IEdFTkVSSUNfSU5URVJSVVBUX1ZFQ1RPUiBcCisJZ2VuZXJpY19pbnRlcnJ1cHQgc21wX2dlbmVyaWNfaW50ZXJydXB0CiAKICNpZmRlZiBDT05GSUdfU01QCiBhcGljaW50ZXJydXB0IElOVkFMSURBVEVfVExCX1ZFQ1RPUl9TVEFSVCswIFwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYwppbmRleCAyMzFiZGQzLi43NmY3MTQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCkBAIC0zODksNzkgKzM4OSw2IEBACiAKICNlbmRpZiAvKiAhQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCiAKLS8qIEFkZCBhIGZ1bmN0aW9uIHJldHVybiBhZGRyZXNzIHRvIHRoZSB0cmFjZSBzdGFjayBvbiB0aHJlYWQgaW5mby4qLwotc3RhdGljIGludCBwdXNoX3JldHVybl90cmFjZSh1bnNpZ25lZCBsb25nIHJldCwgdW5zaWduZWQgbG9uZyBsb25nIHRpbWUsCi0JCQkJdW5zaWduZWQgbG9uZyBmdW5jLCBpbnQgKmRlcHRoKQotewotCWludCBpbmRleDsKLQotCWlmICghY3VycmVudC0+cmV0X3N0YWNrKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JLyogVGhlIHJldHVybiB0cmFjZSBzdGFjayBpcyBmdWxsICovCi0JaWYgKGN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrID09IEZUUkFDRV9SRVRGVU5DX0RFUFRIIC0gMSkgewotCQlhdG9taWNfaW5jKCZjdXJyZW50LT50cmFjZV9vdmVycnVuKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlpbmRleCA9ICsrY3VycmVudC0+Y3Vycl9yZXRfc3RhY2s7Ci0JYmFycmllcigpOwotCWN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0ucmV0ID0gcmV0OwotCWN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uZnVuYyA9IGZ1bmM7Ci0JY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5jYWxsdGltZSA9IHRpbWU7Ci0JKmRlcHRoID0gaW5kZXg7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogUmV0cmlldmUgYSBmdW5jdGlvbiByZXR1cm4gYWRkcmVzcyB0byB0aGUgdHJhY2Ugc3RhY2sgb24gdGhyZWFkIGluZm8uKi8KLXN0YXRpYyB2b2lkIHBvcF9yZXR1cm5fdHJhY2Uoc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLCB1bnNpZ25lZCBsb25nICpyZXQpCi17Ci0JaW50IGluZGV4OwotCi0JaW5kZXggPSBjdXJyZW50LT5jdXJyX3JldF9zdGFjazsKLQotCWlmICh1bmxpa2VseShpbmRleCA8IDApKSB7Ci0JCWZ0cmFjZV9ncmFwaF9zdG9wKCk7Ci0JCVdBUk5fT04oMSk7Ci0JCS8qIE1pZ2h0IGFzIHdlbGwgcGFuaWMsIG90aGVyd2lzZSB3ZSBoYXZlIG5vIHdoZXJlIHRvIGdvICovCi0JCSpyZXQgPSAodW5zaWduZWQgbG9uZylwYW5pYzsKLQkJcmV0dXJuOwotCX0KLQotCSpyZXQgPSBjdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLnJldDsKLQl0cmFjZS0+ZnVuYyA9IGN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uZnVuYzsKLQl0cmFjZS0+Y2FsbHRpbWUgPSBjdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLmNhbGx0aW1lOwotCXRyYWNlLT5vdmVycnVuID0gYXRvbWljX3JlYWQoJmN1cnJlbnQtPnRyYWNlX292ZXJydW4pOwotCXRyYWNlLT5kZXB0aCA9IGluZGV4OwotCWJhcnJpZXIoKTsKLQljdXJyZW50LT5jdXJyX3JldF9zdGFjay0tOwotCi19Ci0KLS8qCi0gKiBTZW5kIHRoZSB0cmFjZSB0byB0aGUgcmluZy1idWZmZXIuCi0gKiBAcmV0dXJuIHRoZSBvcmlnaW5hbCByZXR1cm4gYWRkcmVzcy4KLSAqLwotdW5zaWduZWQgbG9uZyBmdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIodm9pZCkKLXsKLQlzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCB0cmFjZTsKLQl1bnNpZ25lZCBsb25nIHJldDsKLQotCXBvcF9yZXR1cm5fdHJhY2UoJnRyYWNlLCAmcmV0KTsKLQl0cmFjZS5yZXR0aW1lID0gY3B1X2Nsb2NrKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwotCWZ0cmFjZV9ncmFwaF9yZXR1cm4oJnRyYWNlKTsKLQotCWlmICh1bmxpa2VseSghcmV0KSkgewotCQlmdHJhY2VfZ3JhcGhfc3RvcCgpOwotCQlXQVJOX09OKDEpOwotCQkvKiBNaWdodCBhcyB3ZWxsIHBhbmljLiBXaGF0IGVsc2UgdG8gZG8/ICovCi0JCXJldCA9ICh1bnNpZ25lZCBsb25nKXBhbmljOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KIC8qCiAgKiBIb29rIHRoZSByZXR1cm4gYWRkcmVzcyBhbmQgcHVzaCBpdCBpbiB0aGUgc3RhY2sgb2YgcmV0dXJuIGFkZHJzCiAgKiBpbiBjdXJyZW50IHRocmVhZCBpbmZvLgpAQCAtNTIxLDcgKzQ0OCw3IEBACiAKIAljYWxsdGltZSA9IGNwdV9jbG9jayhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAotCWlmIChwdXNoX3JldHVybl90cmFjZShvbGQsIGNhbGx0aW1lLAorCWlmIChmdHJhY2VfcHVzaF9yZXR1cm5fdHJhY2Uob2xkLCBjYWxsdGltZSwKIAkJCQlzZWxmX2FkZHIsICZ0cmFjZS5kZXB0aCkgPT0gLUVCVVNZKSB7CiAJCSpwYXJlbnQgPSBvbGQ7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkMzIuYwppbmRleCBhYzEwOGQxLi4zZjg1NzlmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZDMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWQzMi5jCkBAIC0xOCw3ICsxOCw3IEBACiB7CiAJcmVzZXJ2ZV90cmFtcG9saW5lX21lbW9yeSgpOwogCi0JcmVzZXJ2ZV9lYXJseShfX3BhX3N5bWJvbCgmX3RleHQpLCBfX3BhX3N5bWJvbCgmX2VuZCksICJURVhUIERBVEEgQlNTIik7CisJcmVzZXJ2ZV9lYXJseShfX3BhX3N5bWJvbCgmX3RleHQpLCBfX3BhX3N5bWJvbCgmX19ic3Nfc3RvcCksICJURVhUIERBVEEgQlNTIik7CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKIAkvKiBSZXNlcnZlIElOSVRSRCAqLwpAQCAtMjksOSArMjksNiBAQAogCQlyZXNlcnZlX2Vhcmx5KHJhbWRpc2tfaW1hZ2UsIHJhbWRpc2tfZW5kLCAiUkFNRElTSyIpOwogCX0KICNlbmRpZgotCXJlc2VydmVfZWFybHkoaW5pdF9wZ190YWJsZXNfc3RhcnQsIGluaXRfcGdfdGFibGVzX2VuZCwKLQkJCSJJTklUX1BHX1RBQkxFIik7Ci0KIAlyZXNlcnZlX2ViZGFfcmVnaW9uKCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jIGIvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jCmluZGV4IGY1YjI3MjIuLjcwZWFhODUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiAJcmVzZXJ2ZV90cmFtcG9saW5lX21lbW9yeSgpOwogCi0JcmVzZXJ2ZV9lYXJseShfX3BhX3N5bWJvbCgmX3RleHQpLCBfX3BhX3N5bWJvbCgmX2VuZCksICJURVhUIERBVEEgQlNTIik7CisJcmVzZXJ2ZV9lYXJseShfX3BhX3N5bWJvbCgmX3RleHQpLCBfX3BhX3N5bWJvbCgmX19ic3Nfc3RvcCksICJURVhUIERBVEEgQlNTIik7CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKIAkvKiBSZXNlcnZlIElOSVRSRCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggYzMyY2ExOS4uMzA2ODM4OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCkBAIC0zOCw0MiArMzgsNDAgQEAKICNkZWZpbmUgWDg2X1ZFTkRPUl9JRAluZXdfY3B1X2RhdGErQ1BVSU5GT194ODZfdmVuZG9yX2lkCiAKIC8qCi0gKiBUaGlzIGlzIGhvdyBtdWNoIG1lbW9yeSAqaW4gYWRkaXRpb24gdG8gdGhlIG1lbW9yeSBjb3ZlcmVkIHVwIHRvCi0gKiBhbmQgaW5jbHVkaW5nIF9lbmQqIHdlIG5lZWQgbWFwcGVkIGluaXRpYWxseS4KKyAqIFRoaXMgaXMgaG93IG11Y2ggbWVtb3J5IGluIGFkZGl0aW9uIHRvIHRoZSBtZW1vcnkgY292ZXJlZCB1cCB0bworICogYW5kIGluY2x1ZGluZyBfZW5kIHdlIG5lZWQgbWFwcGVkIGluaXRpYWxseS4KICAqIFdlIG5lZWQ6Ci0gKiAgLSBvbmUgYml0IGZvciBlYWNoIHBvc3NpYmxlIHBhZ2UsIGJ1dCBvbmx5IGluIGxvdyBtZW1vcnksIHdoaWNoIG1lYW5zCi0gKiAgICAgMl4zMi80MDk2LzggPSAxMjhLIHdvcnN0IGNhc2UgKDRHLzRHIHNwbGl0LikKLSAqICAtIGVub3VnaCBzcGFjZSB0byBtYXAgYWxsIGxvdyBtZW1vcnksIHdoaWNoIG1lYW5zCi0gKiAgICAgKDJeMzIvNDA5NikgLyAxMDI0IHBhZ2VzICh3b3JzdCBjYXNlLCBub24gUEFFKQotICogICAgICgyXjMyLzQwOTYpIC8gNTEyICsgNCBwYWdlcyAod29yc3QgY2FzZSBmb3IgUEFFKQotICogIC0gYSBmZXcgcGFnZXMgZm9yIGFsbG9jYXRvciB1c2UgYmVmb3JlIHRoZSBrZXJuZWwgcGFnZXRhYmxlIGhhcwotICogICAgIGJlZW4gc2V0IHVwCisgKiAgICAgKEtFUk5FTF9JTUFHRV9TSVpFLzQwOTYpIC8gMTAyNCBwYWdlcyAod29yc3QgY2FzZSwgbm9uIFBBRSkKKyAqICAgICAoS0VSTkVMX0lNQUdFX1NJWkUvNDA5NikgLyA1MTIgKyA0IHBhZ2VzICh3b3JzdCBjYXNlIGZvciBQQUUpCiAgKgogICogTW9kdWxvIHJvdW5kaW5nLCBlYWNoIG1lZ2FieXRlIGFzc2lnbmVkIGhlcmUgcmVxdWlyZXMgYSBraWxvYnl0ZSBvZgogICogbWVtb3J5LCB3aGljaCBpcyBjdXJyZW50bHkgdW5yZWNsYWltZWQuCiAgKgogICogVGhpcyBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiBhIHBhZ2UuCisgKgorICogS0VSTkVMX0lNQUdFX1NJWkUgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBwYShfZW5kKQorICogYW5kIHNtYWxsIHRoYW4gbWF4X2xvd19wZm4sIG90aGVyd2lzZSB3aWxsIHdhc3RlIHNvbWUgcGFnZSB0YWJsZSBlbnRyaWVzCiAgKi8KLUxPV19QQUdFUyA9IDE8PCgzMi1QQUdFX1NISUZUX2FzbSkKLQotLyoKLSAqIFRvIHByZXNlcnZlIHRoZSBETUEgcG9vbCBpbiBQQUdFQUxMT0Mga2VybmVscywgd2UnbGwgYWxsb2NhdGUKLSAqIHBhZ2V0YWJsZXMgZnJvbSBhYm92ZSB0aGUgMTZNQiBETUEgbGltaXQsIHNvIHdlJ2xsIGhhdmUgdG8gc2V0Ci0gKiB1cCBwYWdldGFibGVzIDE2TUIgbW9yZSAod29yc3QtY2FzZSk6Ci0gKi8KLSNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCi1MT1dfUEFHRVMgPSBMT1dfUEFHRVMgKyAweDEwMDAwMDAKLSNlbmRpZgogCiAjaWYgUFRSU19QRVJfUE1EID4gMQotUEFHRV9UQUJMRV9TSVpFID0gKExPV19QQUdFUyAvIFBUUlNfUEVSX1BNRCkgKyBQVFJTX1BFUl9QR0QKKyNkZWZpbmUgUEFHRV9UQUJMRV9TSVpFKHBhZ2VzKSAoKChwYWdlcykgLyBQVFJTX1BFUl9QTUQpICsgUFRSU19QRVJfUEdEKQogI2Vsc2UKLVBBR0VfVEFCTEVfU0laRSA9IChMT1dfUEFHRVMgLyBQVFJTX1BFUl9QR0QpCisjZGVmaW5lIFBBR0VfVEFCTEVfU0laRShwYWdlcykgKChwYWdlcykgLyBQVFJTX1BFUl9QR0QpCiAjZW5kaWYKLUJPT1RCSVRNQVBfU0laRSA9IExPV19QQUdFUyAvIDgKLUFMTE9DQVRPUl9TTE9QID0gNAogCi1JTklUX01BUF9CRVlPTkRfRU5EID0gQk9PVEJJVE1BUF9TSVpFICsgKFBBR0VfVEFCTEVfU0laRSArIEFMTE9DQVRPUl9TTE9QKSpQQUdFX1NJWkVfYXNtCisvKiBFbm91Z2ggc3BhY2UgdG8gZml0IHBhZ2V0YWJsZXMgZm9yIHRoZSBsb3cgbWVtb3J5IGxpbmVhciBtYXAgKi8KK01BUFBJTkdfQkVZT05EX0VORCA9IFwKKwlQQUdFX1RBQkxFX1NJWkUoKCgxPDwzMikgLSBfX1BBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUKSA8PCBQQUdFX1NISUZUCisKKy8qCisgKiBXb3JzdC1jYXNlIHNpemUgb2YgdGhlIGtlcm5lbCBtYXBwaW5nIHdlIG5lZWQgdG8gbWFrZToKKyAqIHRoZSB3b3JzdC1jYXNlIHNpemUgb2YgdGhlIGtlcm5lbCBpdHNlbGYsIHBsdXMgdGhlIGV4dHJhIHdlIG5lZWQKKyAqIHRvIG1hcCBmb3IgdGhlIGxpbmVhciBtYXAuCisgKi8KK0tFUk5FTF9QQUdFUyA9IChLRVJORUxfSU1BR0VfU0laRSArIE1BUFBJTkdfQkVZT05EX0VORCk+PlBBR0VfU0hJRlQKKworSU5JVF9NQVBfU0laRSA9IFBBR0VfVEFCTEVfU0laRShLRVJORUxfUEFHRVMpICogUEFHRV9TSVpFX2FzbQorUkVTRVJWRV9CUksocGFnZXRhYmxlcywgSU5JVF9NQVBfU0laRSkKIAogLyoKICAqIDMyLWJpdCBrZXJuZWwgZW50cnlwb2ludDsgb25seSB1c2VkIGJ5IHRoZSBib290IENQVS4gIE9uIGVudHJ5LApAQCAtMTY2LDEwICsxNjQsMTAgQEAKIAogLyoKICAqIEluaXRpYWxpemUgcGFnZSB0YWJsZXMuICBUaGlzIGNyZWF0ZXMgYSBQREUgYW5kIGEgc2V0IG9mIHBhZ2UKLSAqIHRhYmxlcywgd2hpY2ggYXJlIGxvY2F0ZWQgaW1tZWRpYXRlbHkgYmV5b25kIF9lbmQuICBUaGUgdmFyaWFibGUKLSAqIGluaXRfcGdfdGFibGVzX2VuZCBpcyBzZXQgdXAgdG8gcG9pbnQgdG8gdGhlIGZpcnN0ICJzYWZlIiBsb2NhdGlvbi4KKyAqIHRhYmxlcywgd2hpY2ggYXJlIGxvY2F0ZWQgaW1tZWRpYXRlbHkgYmV5b25kIF9fYnJrX2Jhc2UuICBUaGUgdmFyaWFibGUKKyAqIF9icmtfZW5kIGlzIHNldCB1cCB0byBwb2ludCB0byB0aGUgZmlyc3QgInNhZmUiIGxvY2F0aW9uLgogICogTWFwcGluZ3MgYXJlIGNyZWF0ZWQgYm90aCBhdCB2aXJ0dWFsIGFkZHJlc3MgMCAoaWRlbnRpdHkgbWFwcGluZykKLSAqIGFuZCBQQUdFX09GRlNFVCBmb3IgdXAgdG8gX2VuZCtzaXplb2YocGFnZSB0YWJsZXMpK0lOSVRfTUFQX0JFWU9ORF9FTkQuCisgKiBhbmQgUEFHRV9PRkZTRVQgZm9yIHVwIHRvIF9lbmQuCiAgKgogICogTm90ZSB0aGF0IHRoZSBzdGFjayBpcyBub3QgeWV0IHNldCB1cCEKICAqLwpAQCAtMTkwLDggKzE4OCw3IEBACiAKIAl4b3JsICVlYngsJWVieAkJCQkvKiAlZWJ4IGlzIGtlcHQgYXQgemVybyAqLwogCi0JbW92bCAkcGEocGcwKSwgJWVkaQotCW1vdmwgJWVkaSwgcGEoaW5pdF9wZ190YWJsZXNfc3RhcnQpCisJbW92bCAkcGEoX19icmtfYmFzZSksICVlZGkKIAltb3ZsICRwYShzd2FwcGVyX3BnX3BtZCksICVlZHgKIAltb3ZsICRQVEVfSURFTlRfQVRUUiwgJWVheAogMTA6CkBAIC0yMDksMTQgKzIwNiwxNCBAQAogCWxvb3AgMTFiCiAKIAkvKgotCSAqIEVuZCBjb25kaXRpb246IHdlIG11c3QgbWFwIHVwIHRvIGFuZCBpbmNsdWRpbmcgSU5JVF9NQVBfQkVZT05EX0VORAotCSAqIGJ5dGVzIGJleW9uZCB0aGUgZW5kIG9mIG91ciBvd24gcGFnZSB0YWJsZXMuCisJICogRW5kIGNvbmRpdGlvbjogd2UgbXVzdCBtYXAgdXAgdG8gdGhlIGVuZCArIE1BUFBJTkdfQkVZT05EX0VORC4KIAkgKi8KLQlsZWFsIChJTklUX01BUF9CRVlPTkRfRU5EK1BURV9JREVOVF9BVFRSKSglZWRpKSwlZWJwCisJbW92bCAkcGEoX2VuZCkgKyBNQVBQSU5HX0JFWU9ORF9FTkQgKyBQVEVfSURFTlRfQVRUUiwgJWVicAogCWNtcGwgJWVicCwlZWF4CiAJamIgMTBiCiAxOgotCW1vdmwgJWVkaSxwYShpbml0X3BnX3RhYmxlc19lbmQpCisJYWRkbCAkX19QQUdFX09GRlNFVCwgJWVkaQorCW1vdmwgJWVkaSwgcGEoX2Jya19lbmQpCiAJc2hybCAkMTIsICVlYXgKIAltb3ZsICVlYXgsIHBhKG1heF9wZm5fbWFwcGVkKQogCkBAIC0yMjcsOCArMjI0LDcgQEAKIAogcGFnZV9wZGVfb2Zmc2V0ID0gKF9fUEFHRV9PRkZTRVQgPj4gMjApOwogCi0JbW92bCAkcGEocGcwKSwgJWVkaQotCW1vdmwgJWVkaSwgcGEoaW5pdF9wZ190YWJsZXNfc3RhcnQpCisJbW92bCAkcGEoX19icmtfYmFzZSksICVlZGkKIAltb3ZsICRwYShzd2FwcGVyX3BnX2RpciksICVlZHgKIAltb3ZsICRQVEVfSURFTlRfQVRUUiwgJWVheAogMTA6CkBAIC0yNDIsMTQgKzIzOCwxMyBAQAogCWFkZGwgJDB4MTAwMCwlZWF4CiAJbG9vcCAxMWIKIAkvKgotCSAqIEVuZCBjb25kaXRpb246IHdlIG11c3QgbWFwIHVwIHRvIGFuZCBpbmNsdWRpbmcgSU5JVF9NQVBfQkVZT05EX0VORAotCSAqIGJ5dGVzIGJleW9uZCB0aGUgZW5kIG9mIG91ciBvd24gcGFnZSB0YWJsZXM7IHRoZSArMHgwMDcgaXMKLQkgKiB0aGUgYXR0cmlidXRlIGJpdHMKKwkgKiBFbmQgY29uZGl0aW9uOiB3ZSBtdXN0IG1hcCB1cCB0byB0aGUgZW5kICsgTUFQUElOR19CRVlPTkRfRU5ELgogCSAqLwotCWxlYWwgKElOSVRfTUFQX0JFWU9ORF9FTkQrUFRFX0lERU5UX0FUVFIpKCVlZGkpLCVlYnAKKwltb3ZsICRwYShfZW5kKSArIE1BUFBJTkdfQkVZT05EX0VORCArIFBURV9JREVOVF9BVFRSLCAlZWJwCiAJY21wbCAlZWJwLCVlYXgKIAlqYiAxMGIKLQltb3ZsICVlZGkscGEoaW5pdF9wZ190YWJsZXNfZW5kKQorCWFkZGwgJF9fUEFHRV9PRkZTRVQsICVlZGkKKwltb3ZsICVlZGksIHBhKF9icmtfZW5kKQogCXNocmwgJDEyLCAlZWF4CiAJbW92bCAlZWF4LCBwYShtYXhfcGZuX21hcHBlZCkKIApAQCAtNjM2LDYgKzYzMSw3IEBACiAJLmZpbGwgMTAyNCw0LDAKIEVOVFJZKGVtcHR5X3plcm9fcGFnZSkKIAkuZmlsbCA0MDk2LDEsMAorCiAvKgogICogVGhpcyBzdGFydHMgdGhlIGRhdGEgc2VjdGlvbi4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2k4MjUzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaTgyNTMuYwppbmRleCAxMGY5MmZiLi4zNDc1NDQwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaTgyNTMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaTgyNTMuYwpAQCAtMywxNyArMywxNyBAQAogICoKICAqLwogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9pODI1My5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9ocGV0Lmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgogCiBERUZJTkVfU1BJTkxPQ0soaTgyNTNfbG9jayk7CiBFWFBPUlRfU1lNQk9MKGk4MjUzX2xvY2spOwpAQCAtNDAsNyArNDAsNyBAQAogewogCXNwaW5fbG9jaygmaTgyNTNfbG9jayk7CiAKLQlzd2l0Y2gobW9kZSkgeworCXN3aXRjaCAobW9kZSkgewogCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CiAJCS8qIGJpbmFyeSwgbW9kZSAyLCBMU0IvTVNCLCBjaCAwICovCiAJCW91dGJfcGl0KDB4MzQsIFBJVF9NT0RFKTsKQEAgLTk1LDcgKzk1LDcgQEAKICAqIHJlZ2lzdGVyZWQuIFRoaXMgbWVjaGFuaXNtIHJlcGxhY2VzIHRoZSBwcmV2aW91cyAjaWZkZWYgTE9DQUxfQVBJQyAtCiAgKiAhdXNpbmdfYXBpY190aW1lciBkZWNpc2lvbnMgaW4gZG9fdGltZXJfaW50ZXJydXB0X2hvb2soKQogICovCi1zdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBwaXRfY2xvY2tldmVudCA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIHBpdF9jZSA9IHsKIAkubmFtZQkJPSAicGl0IiwKIAkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCiAJLnNldF9tb2RlCT0gaW5pdF9waXRfdGltZXIsCkBAIC0xMTQsMTUgKzExNCwxMyBAQAogCSAqIFN0YXJ0IHBpdCB3aXRoIHRoZSBib290IGNwdSBtYXNrIGFuZCBtYWtlIGl0IGdsb2JhbCBhZnRlciB0aGUKIAkgKiBJT19BUElDIGhhcyBiZWVuIGluaXRpYWxpemVkLgogCSAqLwotCXBpdF9jbG9ja2V2ZW50LmNwdW1hc2sgPSBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JcGl0X2Nsb2NrZXZlbnQubXVsdCA9IGRpdl9zYyhDTE9DS19USUNLX1JBVEUsIE5TRUNfUEVSX1NFQywKLQkJCQkgICAgIHBpdF9jbG9ja2V2ZW50LnNoaWZ0KTsKLQlwaXRfY2xvY2tldmVudC5tYXhfZGVsdGFfbnMgPQotCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4N0ZGRiwgJnBpdF9jbG9ja2V2ZW50KTsKLQlwaXRfY2xvY2tldmVudC5taW5fZGVsdGFfbnMgPQotCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4RiwgJnBpdF9jbG9ja2V2ZW50KTsKLQljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJnBpdF9jbG9ja2V2ZW50KTsKLQlnbG9iYWxfY2xvY2tfZXZlbnQgPSAmcGl0X2Nsb2NrZXZlbnQ7CisJcGl0X2NlLmNwdW1hc2sgPSBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcGl0X2NlLm11bHQgPSBkaXZfc2MoQ0xPQ0tfVElDS19SQVRFLCBOU0VDX1BFUl9TRUMsIHBpdF9jZS5zaGlmdCk7CisJcGl0X2NlLm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHg3RkZGLCAmcGl0X2NlKTsKKwlwaXRfY2UubWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweEYsICZwaXRfY2UpOworCisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZwaXRfY2UpOworCWdsb2JhbF9jbG9ja19ldmVudCA9ICZwaXRfY2U7CiB9CiAKICNpZm5kZWYgQ09ORklHX1g4Nl82NApAQCAtMTMzLDExICsxMzEsMTEgQEAKICAqLwogc3RhdGljIGN5Y2xlX3QgcGl0X3JlYWQodm9pZCkKIHsKKwlzdGF0aWMgaW50IG9sZF9jb3VudDsKKwlzdGF0aWMgdTMyIG9sZF9qaWZzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGNvdW50OwogCXUzMiBqaWZzOwotCXN0YXRpYyBpbnQgb2xkX2NvdW50OwotCXN0YXRpYyB1MzIgb2xkX2ppZnM7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTNfbG9jaywgZmxhZ3MpOwogCS8qCkBAIC0xNzksOSArMTc3LDkgQEAKIAkgKiBQcmV2aW91cyBhdHRlbXB0cyB0byBoYW5kbGUgdGhlc2UgY2FzZXMgaW50ZWxsaWdlbnRseSB3ZXJlCiAJICogYnVnZ3ksIHNvIHdlIGp1c3QgZG8gdGhlIHNpbXBsZSB0aGluZyBub3cuCiAJICovCi0JaWYgKGNvdW50ID4gb2xkX2NvdW50ICYmIGppZnMgPT0gb2xkX2ppZnMpIHsKKwlpZiAoY291bnQgPiBvbGRfY291bnQgJiYgamlmcyA9PSBvbGRfamlmcykKIAkJY291bnQgPSBvbGRfY291bnQ7Ci0JfQorCiAJb2xkX2NvdW50ID0gY291bnQ7CiAJb2xkX2ppZnMgPSBqaWZzOwogCkBAIC0xOTIsMTMgKzE5MCwxMyBAQAogCXJldHVybiAoY3ljbGVfdCkoamlmcyAqIExBVENIKSArIGNvdW50OwogfQogCi1zdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX3BpdCA9IHsKLQkubmFtZQk9ICJwaXQiLAotCS5yYXRpbmcgPSAxMTAsCi0JLnJlYWQJPSBwaXRfcmVhZCwKLQkubWFzawk9IENMT0NLU09VUkNFX01BU0soMzIpLAotCS5tdWx0CT0gMCwKLQkuc2hpZnQJPSAyMCwKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgcGl0X2NzID0geworCS5uYW1lCQk9ICJwaXQiLAorCS5yYXRpbmcJCT0gMTEwLAorCS5yZWFkCQk9IHBpdF9yZWFkLAorCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAorCS5tdWx0CQk9IDAsCisJLnNoaWZ0CQk9IDIwLAogfTsKIAogc3RhdGljIHZvaWQgcGl0X2Rpc2FibGVfY2xvY2tzb3VyY2Uodm9pZCkKQEAgLTIwNiw5ICsyMDQsOSBAQAogCS8qCiAJICogVXNlIG11bHQgdG8gY2hlY2sgd2hldGhlciBpdCBpcyByZWdpc3RlcmVkIG9yIG5vdAogCSAqLwotCWlmIChjbG9ja3NvdXJjZV9waXQubXVsdCkgewotCQljbG9ja3NvdXJjZV91bnJlZ2lzdGVyKCZjbG9ja3NvdXJjZV9waXQpOwotCQljbG9ja3NvdXJjZV9waXQubXVsdCA9IDA7CisJaWYgKHBpdF9jcy5tdWx0KSB7CisJCWNsb2Nrc291cmNlX3VucmVnaXN0ZXIoJnBpdF9jcyk7CisJCXBpdF9jcy5tdWx0ID0gMDsKIAl9CiB9CiAKQEAgLTIyMiwxMyArMjIwLDEzIEBACiAJICAqIC0gd2hlbiBsb2NhbCBBUElDIHRpbWVyIGlzIGFjdGl2ZSAoUElUIGlzIHN3aXRjaGVkIG9mZikKIAkgICovCiAJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxIHx8IGlzX2hwZXRfZW5hYmxlZCgpIHx8Ci0JICAgIHBpdF9jbG9ja2V2ZW50Lm1vZGUgIT0gQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUMpCisJICAgIHBpdF9jZS5tb2RlICE9IENMT0NLX0VWVF9NT0RFX1BFUklPRElDKQogCQlyZXR1cm4gMDsKIAotCWNsb2Nrc291cmNlX3BpdC5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChDTE9DS19USUNLX1JBVEUsCi0JCQkJCQkgICBjbG9ja3NvdXJjZV9waXQuc2hpZnQpOwotCXJldHVybiBjbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfcGl0KTsKKwlwaXRfY3MubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoQ0xPQ0tfVElDS19SQVRFLCBwaXRfY3Muc2hpZnQpOworCisJcmV0dXJuIGNsb2Nrc291cmNlX3JlZ2lzdGVyKCZwaXRfY3MpOwogfQogYXJjaF9pbml0Y2FsbChpbml0X3BpdF9jbG9ja3NvdXJjZSk7CiAKLSNlbmRpZgorI2VuZGlmIC8qICFDT05GSUdfWDg2XzY0ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaW9fZGVsYXkuYyBiL2FyY2gveDg2L2tlcm5lbC9pb19kZWxheS5jCmluZGV4IDcyMGQyNjAuLmE5NzliNWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pb19kZWxheS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pb19kZWxheS5jCkBAIC03LDEwICs3LDEwIEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogaW50IGlvX2RlbGF5X3R5cGUgX19yZWFkX21vc3RseSA9IENPTkZJR19ERUZBVUxUX0lPX0RFTEFZX1RZUEU7CiAKQEAgLTQ3LDggKzQ3LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGRtaV9pb19kZWxheV8weGVkX3BvcnQoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQogewogCWlmIChpb19kZWxheV90eXBlID09IENPTkZJR19JT19ERUxBWV9UWVBFXzBYODApIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogdXNpbmcgMHhlZCBJL08gZGVsYXkgcG9ydFxuIiwKLQkJCWlkLT5pZGVudCk7CisJCXByX25vdGljZSgiJXM6IHVzaW5nIDB4ZWQgSS9PIGRlbGF5IHBvcnRcbiIsIGlkLT5pZGVudCk7CiAJCWlvX2RlbGF5X3R5cGUgPSBDT05GSUdfSU9fREVMQVlfVFlQRV8wWEVEOwogCX0KIApAQCAtNjQsNDAgKzYzLDQwIEBACiAJCS5jYWxsYmFjawk9IGRtaV9pb19kZWxheV8weGVkX3BvcnQsCiAJCS5pZGVudAkJPSAiQ29tcGFxIFByZXNhcmlvIFY2MDAwIiwKIAkJLm1hdGNoZXMJPSB7Ci0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIlF1YW50YSIpLAotCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiMzBCNyIpCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwJIlF1YW50YSIpLAorCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLAkiMzBCNyIpCiAJCX0KIAl9LAogCXsKIAkJLmNhbGxiYWNrCT0gZG1pX2lvX2RlbGF5XzB4ZWRfcG9ydCwKIAkJLmlkZW50CQk9ICJIUCBQYXZpbGlvbiBkdjkwMDB6IiwKIAkJLm1hdGNoZXMJPSB7Ci0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIlF1YW50YSIpLAotCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiMzBCOSIpCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwJIlF1YW50YSIpLAorCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLAkiMzBCOSIpCiAJCX0KIAl9LAogCXsKIAkJLmNhbGxiYWNrCT0gZG1pX2lvX2RlbGF5XzB4ZWRfcG9ydCwKIAkJLmlkZW50CQk9ICJIUCBQYXZpbGlvbiBkdjYwMDAiLAogCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiUXVhbnRhIiksCi0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICIzMEI4IikKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLAkiUXVhbnRhIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsCSIzMEI4IikKIAkJfQogCX0sCiAJewogCQkuY2FsbGJhY2sJPSBkbWlfaW9fZGVsYXlfMHhlZF9wb3J0LAogCQkuaWRlbnQJCT0gIkhQIFBhdmlsaW9uIHR4MTAwMCIsCiAJCS5tYXRjaGVzCT0gewotCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJRdWFudGEiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIjMwQkYiKQorCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsCSJRdWFudGEiKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwJIjMwQkYiKQogCQl9CiAJfSwKIAl7CiAJCS5jYWxsYmFjawk9IGRtaV9pb19kZWxheV8weGVkX3BvcnQsCiAJCS5pZGVudAkJPSAiUHJlc2FyaW8gRjcwMCIsCiAJCS5tYXRjaGVzCT0gewotCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJRdWFudGEiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIjMwRDMiKQorCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsCSJRdWFudGEiKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwJIjMwRDMiKQogCQl9CiAJfSwKIAl7IH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwppbmRleCBmMTNjYTE2Li4zYWFmN2I5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycS5jCkBAIC0xNSw2ICsxNSw5IEBACiAKIGF0b21pY190IGlycV9lcnJfY291bnQ7CiAKKy8qIEZ1bmN0aW9uIHBvaW50ZXIgZm9yIGdlbmVyaWMgaW50ZXJydXB0IHZlY3RvciBoYW5kbGluZyAqLwordm9pZCAoKmdlbmVyaWNfaW50ZXJydXB0X2V4dGVuc2lvbikodm9pZCkgPSBOVUxMOworCiAvKgogICogJ3doYXQgc2hvdWxkIHdlIGRvIGlmIHdlIGdldCBhIGh3IGlycSBldmVudCBvbiBhbiBpbGxlZ2FsIHZlY3RvcicuCiAgKiBlYWNoIGFyY2hpdGVjdHVyZSBoYXMgdG8gYW5zd2VyIHRoaXMgdGhlbXNlbHZlcy4KQEAgLTQyLDU1ICs0NSw2MCBAQAogLyoKICAqIC9wcm9jL2ludGVycnVwdHMgcHJpbnRpbmc6CiAgKi8KLXN0YXRpYyBpbnQgc2hvd19vdGhlcl9pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCkKK3N0YXRpYyBpbnQgc2hvd19vdGhlcl9pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgaW50IHByZWMpCiB7CiAJaW50IGo7CiAKLQlzZXFfcHJpbnRmKHAsICJOTUk6ICIpOworCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIk5NSSIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPl9fbm1pX2NvdW50KTsKIAlzZXFfcHJpbnRmKHAsICIgIE5vbi1tYXNrYWJsZSBpbnRlcnJ1cHRzXG4iKTsKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQlzZXFfcHJpbnRmKHAsICJMT0M6ICIpOworCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIkxPQyIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmFwaWNfdGltZXJfaXJxcyk7CiAJc2VxX3ByaW50ZihwLCAiICBMb2NhbCB0aW1lciBpbnRlcnJ1cHRzXG4iKTsKKworCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlNQVSIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9zcHVyaW91c19jb3VudCk7CisJc2VxX3ByaW50ZihwLCAiICBTcHVyaW91cyBpbnRlcnJ1cHRzXG4iKTsKICNlbmRpZgorCWlmIChnZW5lcmljX2ludGVycnVwdF9leHRlbnNpb24pIHsKKwkJc2VxX3ByaW50ZihwLCAiUExUOiAiKTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmdlbmVyaWNfaXJxcyk7CisJCXNlcV9wcmludGYocCwgIiAgUGxhdGZvcm0gaW50ZXJydXB0c1xuIik7CisJfQogI2lmZGVmIENPTkZJR19TTVAKLQlzZXFfcHJpbnRmKHAsICJSRVM6ICIpOworCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIlJFUyIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9yZXNjaGVkX2NvdW50KTsKIAlzZXFfcHJpbnRmKHAsICIgIFJlc2NoZWR1bGluZyBpbnRlcnJ1cHRzXG4iKTsKLQlzZXFfcHJpbnRmKHAsICJDQUw6ICIpOworCXNlcV9wcmludGYocCwgIiUqczogIiwgcHJlYywgIkNBTCIpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9jYWxsX2NvdW50KTsKIAlzZXFfcHJpbnRmKHAsICIgIEZ1bmN0aW9uIGNhbGwgaW50ZXJydXB0c1xuIik7Ci0Jc2VxX3ByaW50ZihwLCAiVExCOiAiKTsKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJUTEIiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGxiX2NvdW50KTsKIAlzZXFfcHJpbnRmKHAsICIgIFRMQiBzaG9vdGRvd25zXG4iKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19YODZfTUNFCi0Jc2VxX3ByaW50ZihwLCAiVFJNOiAiKTsKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJUUk0iKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGhlcm1hbF9jb3VudCk7CiAJc2VxX3ByaW50ZihwLCAiICBUaGVybWFsIGV2ZW50IGludGVycnVwdHNcbiIpOwogIyBpZmRlZiBDT05GSUdfWDg2XzY0Ci0Jc2VxX3ByaW50ZihwLCAiVEhSOiAiKTsKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJUSFIiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfdGhyZXNob2xkX2NvdW50KTsKIAlzZXFfcHJpbnRmKHAsICIgIFRocmVzaG9sZCBBUElDIGludGVycnVwdHNcbiIpOwogIyBlbmRpZgogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0Jc2VxX3ByaW50ZihwLCAiU1BVOiAiKTsKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfc3B1cmlvdXNfY291bnQpOwotCXNlcV9wcmludGYocCwgIiAgU3B1cmlvdXMgaW50ZXJydXB0c1xuIik7Ci0jZW5kaWYKLQlzZXFfcHJpbnRmKHAsICJFUlI6ICUxMHVcbiIsIGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KSk7CisJc2VxX3ByaW50ZihwLCAiJSpzOiAlMTB1XG4iLCBwcmVjLCAiRVJSIiwgYXRvbWljX3JlYWQoJmlycV9lcnJfY291bnQpKTsKICNpZiBkZWZpbmVkKENPTkZJR19YODZfSU9fQVBJQykKLQlzZXFfcHJpbnRmKHAsICJNSVM6ICUxMHVcbiIsIGF0b21pY19yZWFkKCZpcnFfbWlzX2NvdW50KSk7CisJc2VxX3ByaW50ZihwLCAiJSpzOiAlMTB1XG4iLCBwcmVjLCAiTUlTIiwgYXRvbWljX3JlYWQoJmlycV9taXNfY291bnQpKTsKICNlbmRpZgogCXJldHVybiAwOwogfQpAQCAtOTgsMTkgKzEwNiwyMiBAQAogaW50IHNob3dfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgYW55X2NvdW50ID0gMDsKLQlpbnQgaSA9ICoobG9mZl90ICopIHYsIGo7CisJaW50IGkgPSAqKGxvZmZfdCAqKSB2LCBqLCBwcmVjOwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKIAlpZiAoaSA+IG5yX2lycXMpCiAJCXJldHVybiAwOwogCisJZm9yIChwcmVjID0gMywgaiA9IDEwMDA7IHByZWMgPCAxMCAmJiBqIDw9IG5yX2lycXM7ICsrcHJlYykKKwkJaiAqPSAxMDsKKwogCWlmIChpID09IG5yX2lycXMpCi0JCXJldHVybiBzaG93X290aGVyX2ludGVycnVwdHMocCk7CisJCXJldHVybiBzaG93X290aGVyX2ludGVycnVwdHMocCwgcHJlYyk7CiAKIAkvKiBwcmludCBoZWFkZXIgKi8KIAlpZiAoaSA9PSAwKSB7Ci0JCXNlcV9wcmludGYocCwgIiAgICAgICAgICAgIik7CisJCXNlcV9wcmludGYocCwgIiUqcyIsIHByZWMgKyA4LCAiIik7CiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJCXNlcV9wcmludGYocCwgIkNQVSUtOGQiLCBqKTsKIAkJc2VxX3B1dGMocCwgJ1xuJyk7CkBAIC0xMjEsMjMgKzEzMiwxNSBAQAogCQlyZXR1cm4gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0jaWZuZGVmIENPTkZJR19TTVAKLQlhbnlfY291bnQgPSBrc3RhdF9pcnFzKGkpOwotI2Vsc2UKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCWFueV9jb3VudCB8PSBrc3RhdF9pcnFzX2NwdShpLCBqKTsKLSNlbmRpZgogCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKIAlpZiAoIWFjdGlvbiAmJiAhYW55X2NvdW50KQogCQlnb3RvIG91dDsKIAotCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7Ci0jaWZuZGVmIENPTkZJR19TTVAKLQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwotI2Vsc2UKKwlzZXFfcHJpbnRmKHAsICIlKmQ6ICIsIHByZWMsIGkpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7Ci0jZW5kaWYKIAlzZXFfcHJpbnRmKHAsICIgJThzIiwgZGVzYy0+Y2hpcC0+bmFtZSk7CiAJc2VxX3ByaW50ZihwLCAiLSUtOHMiLCBkZXNjLT5uYW1lKTsKIApAQCAtMTYyLDcgKzE2NSwxMCBAQAogCiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCiAJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5hcGljX3RpbWVyX2lycXM7CisJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5pcnFfc3B1cmlvdXNfY291bnQ7CiAjZW5kaWYKKwlpZiAoZ2VuZXJpY19pbnRlcnJ1cHRfZXh0ZW5zaW9uKQorCQlzdW0gKz0gaXJxX3N0YXRzKGNwdSktPmdlbmVyaWNfaXJxczsKICNpZmRlZiBDT05GSUdfU01QCiAJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5pcnFfcmVzY2hlZF9jb3VudDsKIAlzdW0gKz0gaXJxX3N0YXRzKGNwdSktPmlycV9jYWxsX2NvdW50OwpAQCAtMTc0LDkgKzE4MCw2IEBACiAJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5pcnFfdGhyZXNob2xkX2NvdW50OwogI2VuZGlmCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLQlzdW0gKz0gaXJxX3N0YXRzKGNwdSktPmlycV9zcHVyaW91c19jb3VudDsKLSNlbmRpZgogCXJldHVybiBzdW07CiB9CiAKQEAgLTIyNiw0ICsyMjksMjcgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyoKKyAqIEhhbmRsZXIgZm9yIEdFTkVSSUNfSU5URVJSVVBUX1ZFQ1RPUi4KKyAqLwordm9pZCBzbXBfZ2VuZXJpY19pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOworCisJYWNrX0FQSUNfaXJxKCk7CisKKwlleGl0X2lkbGUoKTsKKworCWlycV9lbnRlcigpOworCisJaW5jX2lycV9zdGF0KGdlbmVyaWNfaXJxcyk7CisKKwlpZiAoZ2VuZXJpY19pbnRlcnJ1cHRfZXh0ZW5zaW9uKQorCQlnZW5lcmljX2ludGVycnVwdF9leHRlbnNpb24oKTsKKworCWlycV9leGl0KCk7CisKKwlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOworfQorCiBFWFBPUlRfU1lNQk9MX0dQTCh2ZWN0b3JfdXNlZF9ieV9wZXJjcHVfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF8zMi5jCmluZGV4IDUwYjhjM2EuLjM2OGIwYTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycWluaXRfMzIuYwpAQCAtNTAsNyArNTAsNiBAQAogICovCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBmcHVfaXJxID0gewogCS5oYW5kbGVyID0gbWF0aF9lcnJvcl9pcnEsCi0JLm1hc2sgPSBDUFVfTUFTS19OT05FLAogCS5uYW1lID0gImZwdSIsCiB9OwogCkBAIC04Myw3ICs4Miw2IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTIgPSB7CiAJLmhhbmRsZXIgPSBub19hY3Rpb24sCi0JLm1hc2sgPSBDUFVfTUFTS19OT05FLAogCS5uYW1lID0gImNhc2NhZGUiLAogfTsKIApAQCAtMTc1LDYgKzE3Myw5IEBACiAJLyogc2VsZiBnZW5lcmF0ZWQgSVBJIGZvciBsb2NhbCBBUElDIHRpbWVyICovCiAJYWxsb2NfaW50cl9nYXRlKExPQ0FMX1RJTUVSX1ZFQ1RPUiwgYXBpY190aW1lcl9pbnRlcnJ1cHQpOwogCisJLyogZ2VuZXJpYyBJUEkgZm9yIHBsYXRmb3JtIHNwZWNpZmljIHVzZSAqLworCWFsbG9jX2ludHJfZ2F0ZShHRU5FUklDX0lOVEVSUlVQVF9WRUNUT1IsIGdlbmVyaWNfaW50ZXJydXB0KTsKKwogCS8qIElQSSB2ZWN0b3JzIGZvciBBUElDIHNwdXJpb3VzIGFuZCBlcnJvciBpbnRlcnJ1cHRzICovCiAJYWxsb2NfaW50cl9nYXRlKFNQVVJJT1VTX0FQSUNfVkVDVE9SLCBzcHVyaW91c19pbnRlcnJ1cHQpOwogCWFsbG9jX2ludHJfZ2F0ZShFUlJPUl9BUElDX1ZFQ1RPUiwgZXJyb3JfaW50ZXJydXB0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF82NC5jCmluZGV4IGRhNDgxYTEuLjhjZDEwNTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycWluaXRfNjQuYwpAQCAtNDUsNyArNDUsNiBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEyID0gewogCS5oYW5kbGVyID0gbm9fYWN0aW9uLAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJjYXNjYWRlIiwKIH07CiBERUZJTkVfUEVSX0NQVSh2ZWN0b3JfaXJxX3QsIHZlY3Rvcl9pcnEpID0gewpAQCAtMTQ3LDYgKzE0Niw5IEBACiAJLyogc2VsZiBnZW5lcmF0ZWQgSVBJIGZvciBsb2NhbCBBUElDIHRpbWVyICovCiAJYWxsb2NfaW50cl9nYXRlKExPQ0FMX1RJTUVSX1ZFQ1RPUiwgYXBpY190aW1lcl9pbnRlcnJ1cHQpOwogCisJLyogZ2VuZXJpYyBJUEkgZm9yIHBsYXRmb3JtIHNwZWNpZmljIHVzZSAqLworCWFsbG9jX2ludHJfZ2F0ZShHRU5FUklDX0lOVEVSUlVQVF9WRUNUT1IsIGdlbmVyaWNfaW50ZXJydXB0KTsKKwogCS8qIElQSSB2ZWN0b3JzIGZvciBBUElDIHNwdXJpb3VzIGFuZCBlcnJvciBpbnRlcnJ1cHRzICovCiAJYWxsb2NfaW50cl9nYXRlKFNQVVJJT1VTX0FQSUNfVkVDVE9SLCBzcHVyaW91c19pbnRlcnJ1cHQpOwogCWFsbG9jX2ludHJfZ2F0ZShFUlJPUl9BUElDX1ZFQ1RPUiwgZXJyb3JfaW50ZXJydXB0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rZGVidWdmcy5jIGIvYXJjaC94ODYva2VybmVsL2tkZWJ1Z2ZzLmMKaW5kZXggZmY3ZDNiMC4uZTQ0NDM1NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2tkZWJ1Z2ZzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2tkZWJ1Z2ZzLmMKQEAgLTgsMTEgKzgsMTEgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKQEAgLTI2LDkgKzI2LDggQEAKIAl1MzIgbGVuOwogfTsKIAotc3RhdGljIHNzaXplX3QKLXNldHVwX2RhdGFfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLCBzaXplX3QgY291bnQsCi0JCWxvZmZfdCAqcHBvcykKK3N0YXRpYyBzc2l6ZV90IHNldHVwX2RhdGFfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBzZXR1cF9kYXRhX25vZGUgKm5vZGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgbG9uZyByZW1haW47CkBAIC0zOSwyMCArMzgsMjEgQEAKIAogCWlmIChwb3MgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChwb3MgPj0gbm9kZS0+bGVuKQogCQlyZXR1cm4gMDsKIAogCWlmIChjb3VudCA+IG5vZGUtPmxlbiAtIHBvcykKIAkJY291bnQgPSBub2RlLT5sZW4gLSBwb3M7CisKIAlwYSA9IG5vZGUtPnBhZGRyICsgc2l6ZW9mKHN0cnVjdCBzZXR1cF9kYXRhKSArIHBvczsKIAlwZyA9IHBmbl90b19wYWdlKChwYSArIGNvdW50IC0gMSkgPj4gUEFHRV9TSElGVCk7CiAJaWYgKFBhZ2VIaWdoTWVtKHBnKSkgewogCQlwID0gaW9yZW1hcF9jYWNoZShwYSwgY291bnQpOwogCQlpZiAoIXApCiAJCQlyZXR1cm4gLUVOWElPOwotCX0gZWxzZSB7CisJfSBlbHNlCiAJCXAgPSBfX3ZhKHBhKTsKLQl9CiAKIAlyZW1haW4gPSBjb3B5X3RvX3VzZXIodXNlcl9idWYsIHAsIGNvdW50KTsKIApAQCAtNzAsMTIgKzcwLDEzIEBACiBzdGF0aWMgaW50IHNldHVwX2RhdGFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfc2V0dXBfZGF0YSA9IHsKLQkucmVhZCA9CQlzZXR1cF9kYXRhX3JlYWQsCi0JLm9wZW4gPQkJc2V0dXBfZGF0YV9vcGVuLAorCS5yZWFkCQk9IHNldHVwX2RhdGFfcmVhZCwKKwkub3BlbgkJPSBzZXR1cF9kYXRhX29wZW4sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdApAQCAtODQsNTcgKzg1LDUwIEBACiB7CiAJc3RydWN0IGRlbnRyeSAqZCwgKnR5cGUsICpkYXRhOwogCWNoYXIgYnVmWzE2XTsKLQlpbnQgZXJyb3I7CiAKIAlzcHJpbnRmKGJ1ZiwgIiVkIiwgbm8pOwogCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoYnVmLCBwYXJlbnQpOwotCWlmICghZCkgewotCQllcnJvciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3JldHVybjsKLQl9CisJaWYgKCFkKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXR5cGUgPSBkZWJ1Z2ZzX2NyZWF0ZV94MzIoInR5cGUiLCBTX0lSVUdPLCBkLCAmbm9kZS0+dHlwZSk7Ci0JaWYgKCF0eXBlKSB7Ci0JCWVycm9yID0gLUVOT01FTTsKKwlpZiAoIXR5cGUpCiAJCWdvdG8gZXJyX2RpcjsKLQl9CisKIAlkYXRhID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZGF0YSIsIFNfSVJVR08sIGQsIG5vZGUsICZmb3BzX3NldHVwX2RhdGEpOwotCWlmICghZGF0YSkgewotCQllcnJvciA9IC1FTk9NRU07CisJaWYgKCFkYXRhKQogCQlnb3RvIGVycl90eXBlOwotCX0KKwogCXJldHVybiAwOwogCiBlcnJfdHlwZToKIAlkZWJ1Z2ZzX3JlbW92ZSh0eXBlKTsKIGVycl9kaXI6CiAJZGVidWdmc19yZW1vdmUoZCk7Ci1lcnJfcmV0dXJuOgotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgY3JlYXRlX3NldHVwX2RhdGFfbm9kZXMoc3RydWN0IGRlbnRyeSAqcGFyZW50KQogewogCXN0cnVjdCBzZXR1cF9kYXRhX25vZGUgKm5vZGU7CiAJc3RydWN0IHNldHVwX2RhdGEgKmRhdGE7Ci0JaW50IGVycm9yLCBubyA9IDA7CisJaW50IGVycm9yID0gLUVOT01FTTsKIAlzdHJ1Y3QgZGVudHJ5ICpkOwogCXN0cnVjdCBwYWdlICpwZzsKIAl1NjQgcGFfZGF0YTsKKwlpbnQgbm8gPSAwOwogCiAJZCA9IGRlYnVnZnNfY3JlYXRlX2Rpcigic2V0dXBfZGF0YSIsIHBhcmVudCk7Ci0JaWYgKCFkKSB7Ci0JCWVycm9yID0gLUVOT01FTTsKLQkJZ290byBlcnJfcmV0dXJuOwotCX0KKwlpZiAoIWQpCisJCXJldHVybiAtRU5PTUVNOwogCiAJcGFfZGF0YSA9IGJvb3RfcGFyYW1zLmhkci5zZXR1cF9kYXRhOwogCiAJd2hpbGUgKHBhX2RhdGEpIHsKIAkJbm9kZSA9IGttYWxsb2Moc2l6ZW9mKCpub2RlKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbm9kZSkgewotCQkJZXJyb3IgPSAtRU5PTUVNOworCQlpZiAoIW5vZGUpCiAJCQlnb3RvIGVycl9kaXI7Ci0JCX0KKwogCQlwZyA9IHBmbl90b19wYWdlKChwYV9kYXRhK3NpemVvZigqZGF0YSktMSkgPj4gUEFHRV9TSElGVCk7CiAJCWlmIChQYWdlSGlnaE1lbShwZykpIHsKIAkJCWRhdGEgPSBpb3JlbWFwX2NhY2hlKHBhX2RhdGEsIHNpemVvZigqZGF0YSkpOwpAQCAtMTQzLDkgKzEzNyw4IEBACiAJCQkJZXJyb3IgPSAtRU5YSU87CiAJCQkJZ290byBlcnJfZGlyOwogCQkJfQotCQl9IGVsc2UgeworCQl9IGVsc2UKIAkJCWRhdGEgPSBfX3ZhKHBhX2RhdGEpOwotCQl9CiAKIAkJbm9kZS0+cGFkZHIgPSBwYV9kYXRhOwogCQlub2RlLT50eXBlID0gZGF0YS0+dHlwZTsKQEAgLTE1OSwxMSArMTUyLDExIEBACiAJCQlnb3RvIGVycl9kaXI7CiAJCW5vKys7CiAJfQorCiAJcmV0dXJuIDA7CiAKIGVycl9kaXI6CiAJZGVidWdmc19yZW1vdmUoZCk7Ci1lcnJfcmV0dXJuOgogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTc1LDI4ICsxNjgsMjYgQEAKIHN0YXRpYyBpbnQgX19pbml0IGJvb3RfcGFyYW1zX2tkZWJ1Z2ZzX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkYnAsICp2ZXJzaW9uLCAqZGF0YTsKLQlpbnQgZXJyb3I7CisJaW50IGVycm9yID0gLUVOT01FTTsKIAogCWRicCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiYm9vdF9wYXJhbXMiLCBOVUxMKTsKLQlpZiAoIWRicCkgewotCQllcnJvciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3JldHVybjsKLQl9CisJaWYgKCFkYnApCisJCXJldHVybiAtRU5PTUVNOworCiAJdmVyc2lvbiA9IGRlYnVnZnNfY3JlYXRlX3gxNigidmVyc2lvbiIsIFNfSVJVR08sIGRicCwKIAkJCQkgICAgICZib290X3BhcmFtcy5oZHIudmVyc2lvbik7Ci0JaWYgKCF2ZXJzaW9uKSB7Ci0JCWVycm9yID0gLUVOT01FTTsKKwlpZiAoIXZlcnNpb24pCiAJCWdvdG8gZXJyX2RpcjsKLQl9CisKIAlkYXRhID0gZGVidWdmc19jcmVhdGVfYmxvYigiZGF0YSIsIFNfSVJVR08sIGRicCwKIAkJCQkgICAmYm9vdF9wYXJhbXNfYmxvYik7Ci0JaWYgKCFkYXRhKSB7Ci0JCWVycm9yID0gLUVOT01FTTsKKwlpZiAoIWRhdGEpCiAJCWdvdG8gZXJyX3ZlcnNpb247Ci0JfQorCiAJZXJyb3IgPSBjcmVhdGVfc2V0dXBfZGF0YV9ub2RlcyhkYnApOwogCWlmIChlcnJvcikKIAkJZ290byBlcnJfZGF0YTsKKwogCXJldHVybiAwOwogCiBlcnJfZGF0YToKQEAgLTIwNSwxMCArMTk2LDkgQEAKIAlkZWJ1Z2ZzX3JlbW92ZSh2ZXJzaW9uKTsKIGVycl9kaXI6CiAJZGVidWdmc19yZW1vdmUoZGJwKTsKLWVycl9yZXR1cm46CiAJcmV0dXJuIGVycm9yOwogfQotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX0RFQlVHX0JPT1RfUEFSQU1TICovCiAKIHN0YXRpYyBpbnQgX19pbml0IGFyY2hfa2RlYnVnZnNfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggNDU1OGRkMy4uNTViOTQ2MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAlrcHJvYmVfb3Bjb2RlX3Qgb3Bjb2RlOwogCWtwcm9iZV9vcGNvZGVfdCAqb3JpZ19vcGNvZGVzID0gb3Bjb2RlczsKIAotCWlmIChzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhvcGNvZGVzKSkKKwlpZiAoc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMoKHVuc2lnbmVkIGxvbmcpb3Bjb2RlcykpCiAJCXJldHVybiAwOwkvKiBQYWdlIGZhdWx0IG1heSBvY2N1ciBvbiB0aGlzIGFkZHJlc3MuICovCiAKIHJldHJ5OgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2t2bS5jIGIvYXJjaC94ODYva2VybmVsL2t2bS5jCmluZGV4IDQ3OGJjYTkuLjMzMDE5ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rdm0uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3ZtLmMKQEAgLTEzOCwxMiArMTM4LDYgQEAKIAlrdm1fbW11X3dyaXRlKHB0ZXAsIHB0ZV92YWwocHRlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGt2bV9zZXRfcHRlX3ByZXNlbnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQlwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQotewotCWt2bV9tbXVfd3JpdGUocHRlcCwgcHRlX3ZhbChwdGUpKTsKLX0KLQogc3RhdGljIHZvaWQga3ZtX3B0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKIHsKQEAgLTIyMCw3ICsyMTQsNiBAQAogI2lmIFBBR0VUQUJMRV9MRVZFTFMgPj0gMwogI2lmZGVmIENPTkZJR19YODZfUEFFCiAJCXB2X21tdV9vcHMuc2V0X3B0ZV9hdG9taWMgPSBrdm1fc2V0X3B0ZV9hdG9taWM7Ci0JCXB2X21tdV9vcHMuc2V0X3B0ZV9wcmVzZW50ID0ga3ZtX3NldF9wdGVfcHJlc2VudDsKIAkJcHZfbW11X29wcy5wdGVfY2xlYXIgPSBrdm1fcHRlX2NsZWFyOwogCQlwdl9tbXVfb3BzLnBtZF9jbGVhciA9IGt2bV9wbWRfY2xlYXI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jCmluZGV4IGY1ZmM4YzcuLmU3MzY4YzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfMzIuYwpAQCAtMTQsMTIgKzE0LDEyIEBACiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CkBAIC02Myw3ICs2Myw3IEBACiAJCSJcdG1vdmwgJSVlYXgsJSVmc1xuIgogCQkiXHRtb3ZsICUlZWF4LCUlZ3NcbiIKIAkJIlx0bW92bCAlJWVheCwlJXNzXG4iCi0JCTo6OiAiZWF4IiwgIm1lbW9yeSIpOworCQk6IDogOiAiZWF4IiwgIm1lbW9yeSIpOwogI3VuZGVmIFNUUgogI3VuZGVmIF9fU1RSCiB9CkBAIC0yMDUsNyArMjA1LDggQEAKIAogCWlmIChpbWFnZS0+cHJlc2VydmVfY29udGV4dCkgewogI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCQkvKiBXZSBuZWVkIHRvIHB1dCBBUElDcyBpbiBsZWdhY3kgbW9kZSBzbyB0aGF0IHdlIGNhbgorCQkvKgorCQkgKiBXZSBuZWVkIHRvIHB1dCBBUElDcyBpbiBsZWdhY3kgbW9kZSBzbyB0aGF0IHdlIGNhbgogCQkgKiBnZXQgdGltZXIgaW50ZXJydXB0cyBpbiBzZWNvbmQga2VybmVsLiBrZXhlYy9rZHVtcAogCQkgKiBwYXRocyBhbHJlYWR5IGhhdmUgY2FsbHMgdG8gZGlzYWJsZV9JT19BUElDKCkgaW4KIAkJICogb25lIGZvcm0gb3Igb3RoZXIuIGtleGVjIGp1bXAgcGF0aCBhbHNvIG5lZWQKQEAgLTIyNyw3ICsyMjgsOCBAQAogCQlwYWdlX2xpc3RbUEFfU1dBUF9QQUdFXSA9IChwYWdlX3RvX3BmbihpbWFnZS0+c3dhcF9wYWdlKQogCQkJCQkJPDwgUEFHRV9TSElGVCk7CiAKLQkvKiBUaGUgc2VnbWVudCByZWdpc3RlcnMgYXJlIGZ1bm55IHRoaW5ncywgdGhleSBoYXZlIGJvdGggYQorCS8qCisJICogVGhlIHNlZ21lbnQgcmVnaXN0ZXJzIGFyZSBmdW5ueSB0aGluZ3MsIHRoZXkgaGF2ZSBib3RoIGEKIAkgKiB2aXNpYmxlIGFuZCBhbiBpbnZpc2libGUgcGFydC4gIFdoZW5ldmVyIHRoZSB2aXNpYmxlIHBhcnQgaXMKIAkgKiBzZXQgdG8gYSBzcGVjaWZpYyBzZWxlY3RvciwgdGhlIGludmlzaWJsZSBwYXJ0IGlzIGxvYWRlZAogCSAqIHdpdGggZnJvbSBhIHRhYmxlIGluIG1lbW9yeS4gIEF0IG5vIG90aGVyIHRpbWUgaXMgdGhlCkBAIC0yMzcsMTEgKzIzOSwxMiBAQAogCSAqIHNlZ21lbnRzLCBiZWZvcmUgSSB6YXAgdGhlIGdkdCB3aXRoIGFuIGludmFsaWQgdmFsdWUuCiAJICovCiAJbG9hZF9zZWdtZW50cygpOwotCS8qIFRoZSBnZHQgJiBpZHQgYXJlIG5vdyBpbnZhbGlkLgorCS8qCisJICogVGhlIGdkdCAmIGlkdCBhcmUgbm93IGludmFsaWQuCiAJICogSWYgeW91IHdhbnQgdG8gbG9hZCB0aGVtIHlvdSBtdXN0IHNldCB1cCB5b3VyIG93biBpZHQgJiBnZHQuCiAJICovCi0Jc2V0X2dkdChwaHlzX3RvX3ZpcnQoMCksMCk7Ci0Jc2V0X2lkdChwaHlzX3RvX3ZpcnQoMCksMCk7CisJc2V0X2dkdChwaHlzX3RvX3ZpcnQoMCksIDApOworCXNldF9pZHQocGh5c190b192aXJ0KDApLCAwKTsKIAogCS8qIG5vdyBjYWxsIGl0ICovCiAJaW1hZ2UtPnN0YXJ0ID0gcmVsb2NhdGVfa2VybmVsX3B0cigodW5zaWduZWQgbG9uZylpbWFnZS0+aGVhZCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCmluZGV4IDY5OTNkNTEuLjg5Y2VhNGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYwpAQCAtMTIsMTEgKzEyLDQ3IEBACiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvbnVtYS5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RhdGljIGludCBpbml0X29uZV9sZXZlbDJfcGFnZShzdHJ1Y3Qga2ltYWdlICppbWFnZSwgcGdkX3QgKnBnZCwKKwkJCQl1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcHVkX3QgKnB1ZDsKKwlwbWRfdCAqcG1kOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCByZXN1bHQgPSAtRU5PTUVNOworCisJYWRkciAmPSBQTURfTUFTSzsKKwlwZ2QgKz0gcGdkX2luZGV4KGFkZHIpOworCWlmICghcGdkX3ByZXNlbnQoKnBnZCkpIHsKKwkJcGFnZSA9IGtpbWFnZV9hbGxvY19jb250cm9sX3BhZ2VzKGltYWdlLCAwKTsKKwkJaWYgKCFwYWdlKQorCQkJZ290byBvdXQ7CisJCXB1ZCA9IChwdWRfdCAqKXBhZ2VfYWRkcmVzcyhwYWdlKTsKKwkJbWVtc2V0KHB1ZCwgMCwgUEFHRV9TSVpFKTsKKwkJc2V0X3BnZChwZ2QsIF9fcGdkKF9fcGEocHVkKSB8IF9LRVJOUEdfVEFCTEUpKTsKKwl9CisJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOworCWlmICghcHVkX3ByZXNlbnQoKnB1ZCkpIHsKKwkJcGFnZSA9IGtpbWFnZV9hbGxvY19jb250cm9sX3BhZ2VzKGltYWdlLCAwKTsKKwkJaWYgKCFwYWdlKQorCQkJZ290byBvdXQ7CisJCXBtZCA9IChwbWRfdCAqKXBhZ2VfYWRkcmVzcyhwYWdlKTsKKwkJbWVtc2V0KHBtZCwgMCwgUEFHRV9TSVpFKTsKKwkJc2V0X3B1ZChwdWQsIF9fcHVkKF9fcGEocG1kKSB8IF9LRVJOUEdfVEFCTEUpKTsKKwl9CisJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOworCWlmICghcG1kX3ByZXNlbnQoKnBtZCkpCisJCXNldF9wbWQocG1kLCBfX3BtZChhZGRyIHwgX19QQUdFX0tFUk5FTF9MQVJHRV9FWEVDKSk7CisJcmVzdWx0ID0gMDsKK291dDoKKwlyZXR1cm4gcmVzdWx0OworfQogCiBzdGF0aWMgdm9pZCBpbml0X2xldmVsMl9wYWdlKHBtZF90ICpsZXZlbDJwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CkBAIC04Myw5ICsxMTksOCBAQAogCQl9CiAJCWxldmVsM3AgPSAocHVkX3QgKilwYWdlX2FkZHJlc3MocGFnZSk7CiAJCXJlc3VsdCA9IGluaXRfbGV2ZWwzX3BhZ2UoaW1hZ2UsIGxldmVsM3AsIGFkZHIsIGxhc3RfYWRkcik7Ci0JCWlmIChyZXN1bHQpIHsKKwkJaWYgKHJlc3VsdCkKIAkJCWdvdG8gb3V0OwotCQl9CiAJCXNldF9wZ2QobGV2ZWw0cCsrLCBfX3BnZChfX3BhKGxldmVsM3ApIHwgX0tFUk5QR19UQUJMRSkpOwogCQlhZGRyICs9IFBHRElSX1NJWkU7CiAJfQpAQCAtMTU2LDYgKzE5MSwxMyBAQAogCXJlc3VsdCA9IGluaXRfbGV2ZWw0X3BhZ2UoaW1hZ2UsIGxldmVsNHAsIDAsIG1heF9wZm4gPDwgUEFHRV9TSElGVCk7CiAJaWYgKHJlc3VsdCkKIAkJcmV0dXJuIHJlc3VsdDsKKwkvKgorCSAqIGltYWdlLT5zdGFydCBtYXkgYmUgb3V0c2lkZSAwIH4gbWF4X3BmbiwgZm9yIGV4YW1wbGUgd2hlbgorCSAqIGp1bXAgYmFjayB0byBvcmlnaW5hbCBrZXJuZWwgZnJvbSBrZXhlY2VkIGtlcm5lbAorCSAqLworCXJlc3VsdCA9IGluaXRfb25lX2xldmVsMl9wYWdlKGltYWdlLCBsZXZlbDRwLCBpbWFnZS0+c3RhcnQpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CiAJcmV0dXJuIGluaXRfdHJhbnNpdGlvbl9wZ3RhYmxlKGltYWdlLCBsZXZlbDRwKTsKIH0KIApAQCAtMjI5LDIwICsyNzEsNDUgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHBhZ2VfbGlzdFtQQUdFU19OUl07CiAJdm9pZCAqY29udHJvbF9wYWdlOworCWludCBzYXZlX2Z0cmFjZV9lbmFibGVkOwogCi0JdHJhY2VyX2Rpc2FibGUoKTsKKyNpZmRlZiBDT05GSUdfS0VYRUNfSlVNUAorCWlmIChrZXhlY19pbWFnZS0+cHJlc2VydmVfY29udGV4dCkKKwkJc2F2ZV9wcm9jZXNzb3Jfc3RhdGUoKTsKKyNlbmRpZgorCisJc2F2ZV9mdHJhY2VfZW5hYmxlZCA9IF9fZnRyYWNlX2VuYWJsZWRfc2F2ZSgpOwogCiAJLyogSW50ZXJydXB0cyBhcmVuJ3QgYWNjZXB0YWJsZSB3aGlsZSB3ZSByZWJvb3QgKi8KIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCisJaWYgKGltYWdlLT5wcmVzZXJ2ZV9jb250ZXh0KSB7CisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gcHV0IEFQSUNzIGluIGxlZ2FjeSBtb2RlIHNvIHRoYXQgd2UgY2FuCisJCSAqIGdldCB0aW1lciBpbnRlcnJ1cHRzIGluIHNlY29uZCBrZXJuZWwuIGtleGVjL2tkdW1wCisJCSAqIHBhdGhzIGFscmVhZHkgaGF2ZSBjYWxscyB0byBkaXNhYmxlX0lPX0FQSUMoKSBpbgorCQkgKiBvbmUgZm9ybSBvciBvdGhlci4ga2V4ZWMganVtcCBwYXRoIGFsc28gbmVlZAorCQkgKiBvbmUuCisJCSAqLworCQlkaXNhYmxlX0lPX0FQSUMoKTsKKyNlbmRpZgorCX0KKwogCWNvbnRyb2xfcGFnZSA9IHBhZ2VfYWRkcmVzcyhpbWFnZS0+Y29udHJvbF9jb2RlX3BhZ2UpICsgUEFHRV9TSVpFOwotCW1lbWNweShjb250cm9sX3BhZ2UsIHJlbG9jYXRlX2tlcm5lbCwgUEFHRV9TSVpFKTsKKwltZW1jcHkoY29udHJvbF9wYWdlLCByZWxvY2F0ZV9rZXJuZWwsIEtFWEVDX0NPTlRST0xfQ09ERV9NQVhfU0laRSk7CiAKIAlwYWdlX2xpc3RbUEFfQ09OVFJPTF9QQUdFXSA9IHZpcnRfdG9fcGh5cyhjb250cm9sX3BhZ2UpOworCXBhZ2VfbGlzdFtWQV9DT05UUk9MX1BBR0VdID0gKHVuc2lnbmVkIGxvbmcpY29udHJvbF9wYWdlOwogCXBhZ2VfbGlzdFtQQV9UQUJMRV9QQUdFXSA9CiAJICAodW5zaWduZWQgbG9uZylfX3BhKHBhZ2VfYWRkcmVzcyhpbWFnZS0+Y29udHJvbF9jb2RlX3BhZ2UpKTsKIAotCS8qIFRoZSBzZWdtZW50IHJlZ2lzdGVycyBhcmUgZnVubnkgdGhpbmdzLCB0aGV5IGhhdmUgYm90aCBhCisJaWYgKGltYWdlLT50eXBlID09IEtFWEVDX1RZUEVfREVGQVVMVCkKKwkJcGFnZV9saXN0W1BBX1NXQVBfUEFHRV0gPSAocGFnZV90b19wZm4oaW1hZ2UtPnN3YXBfcGFnZSkKKwkJCQkJCTw8IFBBR0VfU0hJRlQpOworCisJLyoKKwkgKiBUaGUgc2VnbWVudCByZWdpc3RlcnMgYXJlIGZ1bm55IHRoaW5ncywgdGhleSBoYXZlIGJvdGggYQogCSAqIHZpc2libGUgYW5kIGFuIGludmlzaWJsZSBwYXJ0LiAgV2hlbmV2ZXIgdGhlIHZpc2libGUgcGFydCBpcwogCSAqIHNldCB0byBhIHNwZWNpZmljIHNlbGVjdG9yLCB0aGUgaW52aXNpYmxlIHBhcnQgaXMgbG9hZGVkCiAJICogd2l0aCBmcm9tIGEgdGFibGUgaW4gbWVtb3J5LiAgQXQgbm8gb3RoZXIgdGltZSBpcyB0aGUKQEAgLTI1MiwxNSArMzE5LDI1IEBACiAJICogc2VnbWVudHMsIGJlZm9yZSBJIHphcCB0aGUgZ2R0IHdpdGggYW4gaW52YWxpZCB2YWx1ZS4KIAkgKi8KIAlsb2FkX3NlZ21lbnRzKCk7Ci0JLyogVGhlIGdkdCAmIGlkdCBhcmUgbm93IGludmFsaWQuCisJLyoKKwkgKiBUaGUgZ2R0ICYgaWR0IGFyZSBub3cgaW52YWxpZC4KIAkgKiBJZiB5b3Ugd2FudCB0byBsb2FkIHRoZW0geW91IG11c3Qgc2V0IHVwIHlvdXIgb3duIGlkdCAmIGdkdC4KIAkgKi8KLQlzZXRfZ2R0KHBoeXNfdG9fdmlydCgwKSwwKTsKLQlzZXRfaWR0KHBoeXNfdG9fdmlydCgwKSwwKTsKKwlzZXRfZ2R0KHBoeXNfdG9fdmlydCgwKSwgMCk7CisJc2V0X2lkdChwaHlzX3RvX3ZpcnQoMCksIDApOwogCiAJLyogbm93IGNhbGwgaXQgKi8KLQlyZWxvY2F0ZV9rZXJuZWwoKHVuc2lnbmVkIGxvbmcpaW1hZ2UtPmhlYWQsICh1bnNpZ25lZCBsb25nKXBhZ2VfbGlzdCwKLQkJCWltYWdlLT5zdGFydCk7CisJaW1hZ2UtPnN0YXJ0ID0gcmVsb2NhdGVfa2VybmVsKCh1bnNpZ25lZCBsb25nKWltYWdlLT5oZWFkLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZylwYWdlX2xpc3QsCisJCQkJICAgICAgIGltYWdlLT5zdGFydCwKKwkJCQkgICAgICAgaW1hZ2UtPnByZXNlcnZlX2NvbnRleHQpOworCisjaWZkZWYgQ09ORklHX0tFWEVDX0pVTVAKKwlpZiAoa2V4ZWNfaW1hZ2UtPnByZXNlcnZlX2NvbnRleHQpCisJCXJlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKCk7CisjZW5kaWYKKworCV9fZnRyYWNlX2VuYWJsZWRfcmVzdG9yZShzYXZlX2Z0cmFjZV9lbmFibGVkKTsKIH0KIAogdm9pZCBhcmNoX2NyYXNoX3NhdmVfdm1jb3JlaW5mbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21mZ3B0XzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWZncHRfMzIuYwppbmRleCA4ODE1ZjNjLi44NDY1MTBiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWZncHRfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbWZncHRfMzIuYwpAQCAtMzQ4LDcgKzM0OCw2IEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBtZmdwdGlycSAgPSB7CiAJLmhhbmRsZXIgPSBtZmdwdF90aWNrLAogCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX05PQkFMQU5DSU5HLAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJtZmdwdC10aW1lciIKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tbWNvbmYtZmFtMTBoXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvbW1jb25mLWZhbTEwaF82NC5jCmluZGV4IDY2NmU0M2QuLjcxMmQxNWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tbWNvbmYtZmFtMTBoXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL21tY29uZi1mYW0xMGhfNjQuYwpAQCAtMjI2LDcgKzIyNiw3IEBACiAgICAgICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19kZXZpbml0ZGF0YSBtbWNvbmZfZG1pX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19jcHVpbml0Y29uc3QgbW1jb25mX2RtaV90YWJsZVtdID0gewogICAgICAgICB7CiAgICAgICAgICAgICAgICAgLmNhbGxiYWNrID0gc2V0X2NoZWNrX2VuYWJsZV9hbWRfbW1jb25mLAogICAgICAgICAgICAgICAgIC5pZGVudCA9ICJTdW4gTWljcm9zeXN0ZW1zIE1hY2hpbmUiLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYyBiL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMKaW5kZXggMzdjYjFiZC4uZGNlOTlkYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jCkBAIC0xMDksOSArMTA5LDYgQEAKIAl9IGVsc2UKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5rbm93biBidXN0eXBlICVzIC0gaWdub3JpbmdcbiIsIHN0cik7CiB9Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwogCiBzdGF0aWMgaW50IGJhZF9pb2FwaWModW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewpAQCAtMjI0LDggKzIyMSwxMiBAQAogCWlmICgrK21wX2lycV9lbnRyaWVzID09IE1BWF9JUlFfU09VUkNFUykKIAkJcGFuaWMoIk1heCAjIG9mIGlycSBzb3VyY2VzIGV4Y2VlZGVkISFcbiIpOwogfQorI2Vsc2UgLyogQ09ORklHX1g4Nl9JT19BUElDICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IE1QX2J1c19pbmZvKHN0cnVjdCBtcGNfYnVzICptKSB7fQorc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBNUF9pb2FwaWNfaW5mbyhzdHJ1Y3QgbXBjX2lvYXBpYyAqbSkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgTVBfaW50c3JjX2luZm8oc3RydWN0IG1wY19pbnRzcmMgKm0pIHt9CisjZW5kaWYgLyogQ09ORklHX1g4Nl9JT19BUElDICovCiAKLSNlbmRpZgogCiBzdGF0aWMgdm9pZCBfX2luaXQgTVBfbGludHNyY19pbmZvKHN0cnVjdCBtcGNfbGludHNyYyAqbSkKIHsKQEAgLTI3NSw2ICsyNzYsMjAgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIHZvaWQgc2tpcF9lbnRyeSh1bnNpZ25lZCBjaGFyICoqcHRyLCBpbnQgKmNvdW50LCBpbnQgc2l6ZSkKK3sKKwkqcHRyICs9IHNpemU7CisJKmNvdW50ICs9IHNpemU7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzbXBfZHVtcF9tcHRhYmxlKHN0cnVjdCBtcGNfdGFibGUgKm1wYywgdW5zaWduZWQgY2hhciAqbXB0KQoreworCXByaW50ayhLRVJOX0VSUiAiWW91ciBtcHRhYmxlIGlzIHdyb25nLCBjb250YWN0IHlvdXIgSFcgdmVuZG9yIVxuIgorCQkidHlwZSAleFxuIiwgKm1wdCk7CisJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICIgICIsIERVTVBfUFJFRklYX0FERFJFU1MsIDE2LAorCQkJMSwgbXBjLCBtcGMtPmxlbmd0aCwgMSk7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IHNtcF9yZWFkX21wYyhzdHJ1Y3QgbXBjX3RhYmxlICptcGMsIHVuc2lnbmVkIGVhcmx5KQogewogCWNoYXIgc3RyWzE2XTsKQEAgLTMxMCw2MSArMzI1LDMwIEBACiAJd2hpbGUgKGNvdW50IDwgbXBjLT5sZW5ndGgpIHsKIAkJc3dpdGNoICgqbXB0KSB7CiAJCWNhc2UgTVBfUFJPQ0VTU09SOgotCQkJewotCQkJCXN0cnVjdCBtcGNfY3B1ICptID0gKHN0cnVjdCBtcGNfY3B1ICopbXB0OwotCQkJCS8qIEFDUEkgbWF5IGhhdmUgYWxyZWFkeSBwcm92aWRlZCB0aGlzIGRhdGEgKi8KLQkJCQlpZiAoIWFjcGlfbGFwaWMpCi0JCQkJCU1QX3Byb2Nlc3Nvcl9pbmZvKG0pOwotCQkJCW1wdCArPSBzaXplb2YoKm0pOwotCQkJCWNvdW50ICs9IHNpemVvZigqbSk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQkvKiBBQ1BJIG1heSBoYXZlIGFscmVhZHkgcHJvdmlkZWQgdGhpcyBkYXRhICovCisJCQlpZiAoIWFjcGlfbGFwaWMpCisJCQkJTVBfcHJvY2Vzc29yX2luZm8oKHN0cnVjdCBtcGNfY3B1ICopbXB0KTsKKwkJCXNraXBfZW50cnkoJm1wdCwgJmNvdW50LCBzaXplb2Yoc3RydWN0IG1wY19jcHUpKTsKKwkJCWJyZWFrOwogCQljYXNlIE1QX0JVUzoKLQkJCXsKLQkJCQlzdHJ1Y3QgbXBjX2J1cyAqbSA9IChzdHJ1Y3QgbXBjX2J1cyAqKW1wdDsKLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQkJCQlNUF9idXNfaW5mbyhtKTsKLSNlbmRpZgotCQkJCW1wdCArPSBzaXplb2YoKm0pOwotCQkJCWNvdW50ICs9IHNpemVvZigqbSk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlNUF9idXNfaW5mbygoc3RydWN0IG1wY19idXMgKiltcHQpOworCQkJc2tpcF9lbnRyeSgmbXB0LCAmY291bnQsIHNpemVvZihzdHJ1Y3QgbXBjX2J1cykpOworCQkJYnJlYWs7CiAJCWNhc2UgTVBfSU9BUElDOgotCQkJewotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCQkJCXN0cnVjdCBtcGNfaW9hcGljICptID0gKHN0cnVjdCBtcGNfaW9hcGljICopbXB0OwotCQkJCU1QX2lvYXBpY19pbmZvKG0pOwotI2VuZGlmCi0JCQkJbXB0ICs9IHNpemVvZihzdHJ1Y3QgbXBjX2lvYXBpYyk7Ci0JCQkJY291bnQgKz0gc2l6ZW9mKHN0cnVjdCBtcGNfaW9hcGljKTsKLQkJCQlicmVhazsKLQkJCX0KKwkJCU1QX2lvYXBpY19pbmZvKChzdHJ1Y3QgbXBjX2lvYXBpYyAqKW1wdCk7CisJCQlza2lwX2VudHJ5KCZtcHQsICZjb3VudCwgc2l6ZW9mKHN0cnVjdCBtcGNfaW9hcGljKSk7CisJCQlicmVhazsKIAkJY2FzZSBNUF9JTlRTUkM6Ci0JCQl7Ci0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0JCQkJc3RydWN0IG1wY19pbnRzcmMgKm0gPSAoc3RydWN0IG1wY19pbnRzcmMgKiltcHQ7Ci0KLQkJCQlNUF9pbnRzcmNfaW5mbyhtKTsKLSNlbmRpZgotCQkJCW1wdCArPSBzaXplb2Yoc3RydWN0IG1wY19pbnRzcmMpOwotCQkJCWNvdW50ICs9IHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYyk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlNUF9pbnRzcmNfaW5mbygoc3RydWN0IG1wY19pbnRzcmMgKiltcHQpOworCQkJc2tpcF9lbnRyeSgmbXB0LCAmY291bnQsIHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYykpOworCQkJYnJlYWs7CiAJCWNhc2UgTVBfTElOVFNSQzoKLQkJCXsKLQkJCQlzdHJ1Y3QgbXBjX2xpbnRzcmMgKm0gPQotCQkJCSAgICAoc3RydWN0IG1wY19saW50c3JjICopbXB0OwotCQkJCU1QX2xpbnRzcmNfaW5mbyhtKTsKLQkJCQltcHQgKz0gc2l6ZW9mKCptKTsKLQkJCQljb3VudCArPSBzaXplb2YoKm0pOwotCQkJCWJyZWFrOwotCQkJfQorCQkJTVBfbGludHNyY19pbmZvKChzdHJ1Y3QgbXBjX2xpbnRzcmMgKiltcHQpOworCQkJc2tpcF9lbnRyeSgmbXB0LCAmY291bnQsIHNpemVvZihzdHJ1Y3QgbXBjX2xpbnRzcmMpKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJLyogd3JvbmcgbXB0YWJsZSAqLwotCQkJcHJpbnRrKEtFUk5fRVJSICJZb3VyIG1wdGFibGUgaXMgd3JvbmcsIGNvbnRhY3QgeW91ciBIVyB2ZW5kb3IhXG4iKTsKLQkJCXByaW50ayhLRVJOX0VSUiAidHlwZSAleFxuIiwgKm1wdCk7Ci0JCQlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgIiAgIiwgRFVNUF9QUkVGSVhfQUREUkVTUywgMTYsCi0JCQkJCTEsIG1wYywgbXBjLT5sZW5ndGgsIDEpOworCQkJc21wX2R1bXBfbXB0YWJsZShtcGMsIG1wdCk7CiAJCQljb3VudCA9IG1wYy0+bGVuZ3RoOwogCQkJYnJlYWs7CiAJCX0KQEAgLTU1OCw2ICs1NDIsNjggQEAKIAogc3RhdGljIHN0cnVjdCBtcGZfaW50ZWwgKm1wZl9mb3VuZDsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGdldF9tcGNfc2l6ZSh1bnNpZ25lZCBsb25nIHBoeXNwdHIpCit7CisJc3RydWN0IG1wY190YWJsZSAqbXBjOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCW1wYyA9IGVhcmx5X2lvcmVtYXAocGh5c3B0ciwgUEFHRV9TSVpFKTsKKwlzaXplID0gbXBjLT5sZW5ndGg7CisJZWFybHlfaW91bm1hcChtcGMsIFBBR0VfU0laRSk7CisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiICBtcGM6ICVseC0lbHhcbiIsIHBoeXNwdHIsIHBoeXNwdHIgKyBzaXplKTsKKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjaGVja19waHlzcHRyKHN0cnVjdCBtcGZfaW50ZWwgKm1wZiwgdW5zaWduZWQgaW50IGVhcmx5KQoreworCXN0cnVjdCBtcGNfdGFibGUgKm1wYzsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwlzaXplID0gZ2V0X21wY19zaXplKG1wZi0+cGh5c3B0cik7CisJbXBjID0gZWFybHlfaW9yZW1hcChtcGYtPnBoeXNwdHIsIHNpemUpOworCS8qCisJICogUmVhZCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgdGFibGUuICBBbnl0aGluZyBoZXJlIHdpbGwKKwkgKiBvdmVycmlkZSB0aGUgZGVmYXVsdHMuCisJICovCisJaWYgKCFzbXBfcmVhZF9tcGMobXBjLCBlYXJseSkpIHsKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwkJc21wX2ZvdW5kX2NvbmZpZyA9IDA7CisjZW5kaWYKKwkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1ZywgTVAgdGFibGUgZXJyb3JzIGRldGVjdGVkIS4uLlxuIgorCQkJIi4uLiBkaXNhYmxpbmcgU01QIHN1cHBvcnQuICh0ZWxsIHlvdXIgaHcgdmVuZG9yKVxuIik7CisJCWVhcmx5X2lvdW5tYXAobXBjLCBzaXplKTsKKwkJcmV0dXJuIC0xOworCX0KKwllYXJseV9pb3VubWFwKG1wYywgc2l6ZSk7CisKKwlpZiAoZWFybHkpCisJCXJldHVybiAtMTsKKworI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworCS8qCisJICogSWYgdGhlcmUgYXJlIG5vIGV4cGxpY2l0IE1QIElSUSBlbnRyaWVzLCB0aGVuIHdlIGFyZQorCSAqIGJyb2tlbi4gIFdlIHNldCB1cCBtb3N0IG9mIHRoZSBsb3cgMTYgSU8tQVBJQyBwaW5zIHRvCisJICogSVNBIGRlZmF1bHRzIGFuZCBob3BlIGl0IHdpbGwgd29yay4KKwkgKi8KKwlpZiAoIW1wX2lycV9lbnRyaWVzKSB7CisJCXN0cnVjdCBtcGNfYnVzIGJ1czsKKworCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBubyBleHBsaWNpdCBJUlEgZW50cmllcywgIgorCQkgICAgICAgInVzaW5nIGRlZmF1bHQgbXB0YWJsZS4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iKTsKKworCQlidXMudHlwZSA9IE1QX0JVUzsKKwkJYnVzLmJ1c2lkID0gMDsKKwkJbWVtY3B5KGJ1cy5idXN0eXBlLCAiSVNBICAgIiwgNik7CisJCU1QX2J1c19pbmZvKCZidXMpOworCisJCWNvbnN0cnVjdF9kZWZhdWx0X2lvaXJxX21wdGFibGUoMCk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIFNjYW4gdGhlIG1lbW9yeSBibG9ja3MgZm9yIGFuIFNNUCBjb25maWd1cmF0aW9uIGJsb2NrLgogICovCkBAIC02MTEsNDUgKzY1Nyw4IEBACiAJCWNvbnN0cnVjdF9kZWZhdWx0X0lTQV9tcHRhYmxlKG1wZi0+ZmVhdHVyZTEpOwogCiAJfSBlbHNlIGlmIChtcGYtPnBoeXNwdHIpIHsKLQotCQkvKgotCQkgKiBSZWFkIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSB0YWJsZS4gIEFueXRoaW5nIGhlcmUgd2lsbAotCQkgKiBvdmVycmlkZSB0aGUgZGVmYXVsdHMuCi0JCSAqLwotCQlpZiAoIXNtcF9yZWFkX21wYyhwaHlzX3RvX3ZpcnQobXBmLT5waHlzcHRyKSwgZWFybHkpKSB7Ci0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0JCQlzbXBfZm91bmRfY29uZmlnID0gMDsKLSNlbmRpZgotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIkJJT1MgYnVnLCBNUCB0YWJsZSBlcnJvcnMgZGV0ZWN0ZWQhLi4uXG4iKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiLi4uIGRpc2FibGluZyBTTVAgc3VwcG9ydC4gIgotCQkJICAgICAgICIodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIpOworCQlpZiAoY2hlY2tfcGh5c3B0cihtcGYsIGVhcmx5KSkKIAkJCXJldHVybjsKLQkJfQotCi0JCWlmIChlYXJseSkKLQkJCXJldHVybjsKLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQkJLyoKLQkJICogSWYgdGhlcmUgYXJlIG5vIGV4cGxpY2l0IE1QIElSUSBlbnRyaWVzLCB0aGVuIHdlIGFyZQotCQkgKiBicm9rZW4uICBXZSBzZXQgdXAgbW9zdCBvZiB0aGUgbG93IDE2IElPLUFQSUMgcGlucyB0bwotCQkgKiBJU0EgZGVmYXVsdHMgYW5kIGhvcGUgaXQgd2lsbCB3b3JrLgotCQkgKi8KLQkJaWYgKCFtcF9pcnFfZW50cmllcykgewotCQkJc3RydWN0IG1wY19idXMgYnVzOwotCi0JCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBubyBleHBsaWNpdCBJUlEgZW50cmllcywgIgotCQkJICAgICAgICJ1c2luZyBkZWZhdWx0IG1wdGFibGUuICIKLQkJCSAgICAgICAiKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iKTsKLQotCQkJYnVzLnR5cGUgPSBNUF9CVVM7Ci0JCQlidXMuYnVzaWQgPSAwOwotCQkJbWVtY3B5KGJ1cy5idXN0eXBlLCAiSVNBICAgIiwgNik7Ci0JCQlNUF9idXNfaW5mbygmYnVzKTsKLQotCQkJY29uc3RydWN0X2RlZmF1bHRfaW9pcnFfbXB0YWJsZSgwKTsKLQkJfQotI2VuZGlmCiAJfSBlbHNlCiAJCUJVRygpOwogCkBAIC02NzAsNiArNjc5LDMxIEBACiAJX19nZXRfc21wX2NvbmZpZygwKTsKIH0KIAorc3RhdGljIHZvaWQgc21wX3Jlc2VydmVfYm9vdG1lbShzdHJ1Y3QgbXBmX2ludGVsICptcGYpCit7CisJdW5zaWduZWQgbG9uZyBzaXplID0gZ2V0X21wY19zaXplKG1wZi0+cGh5c3B0cik7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qCisJICogV2UgY2Fubm90IGFjY2VzcyB0byBNUEMgdGFibGUgdG8gY29tcHV0ZSB0YWJsZSBzaXplIHlldCwKKwkgKiBhcyBvbmx5IGZldyBtZWdhYnl0ZXMgZnJvbSB0aGUgYm90dG9tIGlzIG1hcHBlZCBub3cuCisJICogUEMtOTgwMCdzIE1QQyB0YWJsZSBwbGFjZXMgb24gdGhlIHZlcnkgbGFzdCBvZiBwaHlzaWNhbAorCSAqIG1lbW9yeTsgc28gdGhhdCBzaW1wbHkgcmVzZXJ2aW5nIFBBR0VfU0laRSBmcm9tIG1wZi0+cGh5c3B0cgorCSAqIHlpZWxkcyBCVUcoKSBpbiByZXNlcnZlX2Jvb3RtZW0uCisJICogYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBwaHlzcHRyIGlzIGJlbG93IHRoYW4gbWF4X2xvd19wZm4KKwkgKiB3ZSBkb24ndCBuZWVkIHJlc2VydmUgdGhlIGFyZWEgYWJvdmUgbWF4X2xvd19wZm4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGVuZCA9IG1heF9sb3dfcGZuICogUEFHRV9TSVpFOworCisJaWYgKG1wZi0+cGh5c3B0ciA8IGVuZCkgeworCQlpZiAobXBmLT5waHlzcHRyICsgc2l6ZSA+IGVuZCkKKwkJCXNpemUgPSBlbmQgLSBtcGYtPnBoeXNwdHI7CisJCXJlc2VydmVfYm9vdG1lbV9nZW5lcmljKG1wZi0+cGh5c3B0ciwgc2l6ZSwgQk9PVE1FTV9ERUZBVUxUKTsKKwl9CisjZWxzZQorCXJlc2VydmVfYm9vdG1lbV9nZW5lcmljKG1wZi0+cGh5c3B0ciwgc2l6ZSwgQk9PVE1FTV9ERUZBVUxUKTsKKyNlbmRpZgorfQorCiBzdGF0aWMgaW50IF9faW5pdCBzbXBfc2Nhbl9jb25maWcodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIGxlbmd0aCwKIAkJCQkgIHVuc2lnbmVkIHJlc2VydmUpCiB7CkBAIC02OTcsMzYgKzczMSwxMCBAQAogCiAJCQlpZiAoIXJlc2VydmUpCiAJCQkJcmV0dXJuIDE7Ci0JCQlyZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyh2aXJ0X3RvX3BoeXMobXBmKSwgUEFHRV9TSVpFLAotCQkJCQlCT09UTUVNX0RFRkFVTFQpOwotCQkJaWYgKG1wZi0+cGh5c3B0cikgewotCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBBR0VfU0laRTsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JCQkJLyoKLQkJCQkgKiBXZSBjYW5ub3QgYWNjZXNzIHRvIE1QQyB0YWJsZSB0byBjb21wdXRlCi0JCQkJICogdGFibGUgc2l6ZSB5ZXQsIGFzIG9ubHkgZmV3IG1lZ2FieXRlcyBmcm9tCi0JCQkJICogdGhlIGJvdHRvbSBpcyBtYXBwZWQgbm93LgotCQkJCSAqIFBDLTk4MDAncyBNUEMgdGFibGUgcGxhY2VzIG9uIHRoZSB2ZXJ5IGxhc3QKLQkJCQkgKiBvZiBwaHlzaWNhbCBtZW1vcnk7IHNvIHRoYXQgc2ltcGx5IHJlc2VydmluZwotCQkJCSAqIFBBR0VfU0laRSBmcm9tIG1wZi0+cGh5c3B0ciB5aWVsZHMgQlVHKCkKLQkJCQkgKiBpbiByZXNlcnZlX2Jvb3RtZW0uCi0JCQkJICogYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBwaHlzcHRyIGlzIGJlbG93IHRoYW4KLQkJCQkgKiBtYXhfbG93X3BmbgotCQkJCSAqIHdlIGRvbid0IG5lZWQgcmVzZXJ2ZSB0aGUgYXJlYSBhYm92ZSBtYXhfbG93X3BmbgotCQkJCSAqLwotCQkJCXVuc2lnbmVkIGxvbmcgZW5kID0gbWF4X2xvd19wZm4gKiBQQUdFX1NJWkU7Ci0KLQkJCQlpZiAobXBmLT5waHlzcHRyIDwgZW5kKSB7Ci0JCQkJCWlmIChtcGYtPnBoeXNwdHIgKyBzaXplID4gZW5kKQotCQkJCQkJc2l6ZSA9IGVuZCAtIG1wZi0+cGh5c3B0cjsKLQkJCQkJcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWMobXBmLT5waHlzcHRyLCBzaXplLAotCQkJCQkJCUJPT1RNRU1fREVGQVVMVCk7Ci0JCQkJfQotI2Vsc2UKLQkJCQlyZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyhtcGYtPnBoeXNwdHIsIHNpemUsCisJCQlyZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyh2aXJ0X3RvX3BoeXMobXBmKSwgc2l6ZW9mKCptcGYpLAogCQkJCQkJQk9PVE1FTV9ERUZBVUxUKTsKLSNlbmRpZgotCQkJfQorCQkJaWYgKG1wZi0+cGh5c3B0cikKKwkJCQlzbXBfcmVzZXJ2ZV9ib290bWVtKG1wZik7CiAKIAkJCXJldHVybiAxOwogCQl9CkBAIC04MjksNyArODM3LDU3IEBACiAjZGVmaW5lIFNQQVJFX1NMT1RfTlVNIDIwCiAKIHN0YXRpYyBzdHJ1Y3QgbXBjX2ludHNyYyBfX2luaXRkYXRhICptX3NwYXJlW1NQQVJFX1NMT1RfTlVNXTsKLSNlbmRpZgorCitzdGF0aWMgdm9pZCBjaGVja19pcnFfc3JjKHN0cnVjdCBtcGNfaW50c3JjICptLCBpbnQgKm5yX21fc3BhcmUpCit7CisJaW50IGk7CisKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJPTEQgIik7CisJcHJpbnRfTVBfaW50c3JjX2luZm8obSk7CisKKwlpID0gZ2V0X01QX2ludHNyY19pbmRleChtKTsKKwlpZiAoaSA+IDApIHsKKwkJYXNzaWduX3RvX21wY19pbnRzcmMoJm1wX2lycXNbaV0sIG0pOworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJORVcgIik7CisJCXByaW50X21wX2lycV9pbmZvKCZtcF9pcnFzW2ldKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIWkpIHsKKwkJLyogbGVnYWN5LCBkbyBub3RoaW5nICovCisJCXJldHVybjsKKwl9CisJaWYgKCpucl9tX3NwYXJlIDwgU1BBUkVfU0xPVF9OVU0pIHsKKwkJLyoKKwkJICogbm90IGZvdW5kICgtMSksIG9yIGR1cGxpY2F0ZWQgKC0yKSBhcmUgaW52YWxpZCBlbnRyaWVzLAorCQkgKiB3ZSBuZWVkIHRvIHVzZSB0aGUgc2xvdCBsYXRlcgorCQkgKi8KKwkJbV9zcGFyZVsqbnJfbV9zcGFyZV0gPSBtOworCQkqbnJfbV9zcGFyZSArPSAxOworCX0KK30KKyNlbHNlIC8qIENPTkZJR19YODZfSU9fQVBJQyAqLworc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2lycV9zcmMoc3RydWN0IG1wY19pbnRzcmMgKm0sIGludCAqbnJfbV9zcGFyZSkge30KKyNlbmRpZiAvKiBDT05GSUdfWDg2X0lPX0FQSUMgKi8KKworc3RhdGljIGludCBjaGVja19zbG90KHVuc2lnbmVkIGxvbmcgbXBjX25ld19waHlzLCB1bnNpZ25lZCBsb25nIG1wY19uZXdfbGVuZ3RoLAorCQkgICAgICBpbnQgY291bnQpCit7CisJaWYgKCFtcGNfbmV3X3BoeXMpIHsKKwkJcHJfaW5mbygiTm8gc3BhcmUgc2xvdHMsIHRyeSB0byBhcHBlbmQuLi50YWtlIHlvdXIgcmlzaywgIgorCQkJIm5ldyBtcGNfbGVuZ3RoICV4XG4iLCBjb3VudCk7CisJfSBlbHNlIHsKKwkJaWYgKGNvdW50IDw9IG1wY19uZXdfbGVuZ3RoKQorCQkJcHJfaW5mbygiTm8gc3BhcmUgc2xvdHMsIHRyeSB0byBhcHBlbmQuLi4sICIKKwkJCQkibmV3IG1wY19sZW5ndGggJXhcbiIsIGNvdW50KTsKKwkJZWxzZSB7CisJCQlwcl9lcnIoIm1wY19uZXdfbGVuZ3RoICVseCBpcyB0b28gc21hbGxcbiIsCisJCQkJbXBjX25ld19sZW5ndGgpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBpbnQgIF9faW5pdCByZXBsYWNlX2ludHNyY19hbGwoc3RydWN0IG1wY190YWJsZSAqbXBjLAogCQkJCQl1bnNpZ25lZCBsb25nIG1wY19uZXdfcGh5cywKQEAgLTgzNyw3NyArODk1LDMzIEBACiB7CiAjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCiAJaW50IGk7Ci0JaW50IG5yX21fc3BhcmUgPSAwOwogI2VuZGlmCi0KIAlpbnQgY291bnQgPSBzaXplb2YoKm1wYyk7CisJaW50IG5yX21fc3BhcmUgPSAwOwogCXVuc2lnbmVkIGNoYXIgKm1wdCA9ICgodW5zaWduZWQgY2hhciAqKW1wYykgKyBjb3VudDsKIAogCXByaW50ayhLRVJOX0lORk8gIm1wY19sZW5ndGggJXhcbiIsIG1wYy0+bGVuZ3RoKTsKIAl3aGlsZSAoY291bnQgPCBtcGMtPmxlbmd0aCkgewogCQlzd2l0Y2ggKCptcHQpIHsKIAkJY2FzZSBNUF9QUk9DRVNTT1I6Ci0JCQl7Ci0JCQkJc3RydWN0IG1wY19jcHUgKm0gPSAoc3RydWN0IG1wY19jcHUgKiltcHQ7Ci0JCQkJbXB0ICs9IHNpemVvZigqbSk7Ci0JCQkJY291bnQgKz0gc2l6ZW9mKCptKTsKLQkJCQlicmVhazsKLQkJCX0KKwkJCXNraXBfZW50cnkoJm1wdCwgJmNvdW50LCBzaXplb2Yoc3RydWN0IG1wY19jcHUpKTsKKwkJCWJyZWFrOwogCQljYXNlIE1QX0JVUzoKLQkJCXsKLQkJCQlzdHJ1Y3QgbXBjX2J1cyAqbSA9IChzdHJ1Y3QgbXBjX2J1cyAqKW1wdDsKLQkJCQltcHQgKz0gc2l6ZW9mKCptKTsKLQkJCQljb3VudCArPSBzaXplb2YoKm0pOwotCQkJCWJyZWFrOwotCQkJfQorCQkJc2tpcF9lbnRyeSgmbXB0LCAmY291bnQsIHNpemVvZihzdHJ1Y3QgbXBjX2J1cykpOworCQkJYnJlYWs7CiAJCWNhc2UgTVBfSU9BUElDOgotCQkJewotCQkJCW1wdCArPSBzaXplb2Yoc3RydWN0IG1wY19pb2FwaWMpOwotCQkJCWNvdW50ICs9IHNpemVvZihzdHJ1Y3QgbXBjX2lvYXBpYyk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlza2lwX2VudHJ5KCZtcHQsICZjb3VudCwgc2l6ZW9mKHN0cnVjdCBtcGNfaW9hcGljKSk7CisJCQlicmVhazsKIAkJY2FzZSBNUF9JTlRTUkM6Ci0JCQl7Ci0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0JCQkJc3RydWN0IG1wY19pbnRzcmMgKm0gPSAoc3RydWN0IG1wY19pbnRzcmMgKiltcHQ7Ci0KLQkJCQlwcmludGsoS0VSTl9JTkZPICJPTEQgIik7Ci0JCQkJcHJpbnRfTVBfaW50c3JjX2luZm8obSk7Ci0JCQkJaSA9IGdldF9NUF9pbnRzcmNfaW5kZXgobSk7Ci0JCQkJaWYgKGkgPiAwKSB7Ci0JCQkJCWFzc2lnbl90b19tcGNfaW50c3JjKCZtcF9pcnFzW2ldLCBtKTsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiTkVXICIpOwotCQkJCQlwcmludF9tcF9pcnFfaW5mbygmbXBfaXJxc1tpXSk7Ci0JCQkJfSBlbHNlIGlmICghaSkgewotCQkJCQkvKiBsZWdhY3ksIGRvIG5vdGhpbmcgKi8KLQkJCQl9IGVsc2UgaWYgKG5yX21fc3BhcmUgPCBTUEFSRV9TTE9UX05VTSkgewotCQkJCQkvKgotCQkJCQkgKiBub3QgZm91bmQgKC0xKSwgb3IgZHVwbGljYXRlZCAoLTIpCi0JCQkJCSAqIGFyZSBpbnZhbGlkIGVudHJpZXMsCi0JCQkJCSAqIHdlIG5lZWQgdG8gdXNlIHRoZSBzbG90ICBsYXRlcgotCQkJCQkgKi8KLQkJCQkJbV9zcGFyZVtucl9tX3NwYXJlXSA9IG07Ci0JCQkJCW5yX21fc3BhcmUrKzsKLQkJCQl9Ci0jZW5kaWYKLQkJCQltcHQgKz0gc2l6ZW9mKHN0cnVjdCBtcGNfaW50c3JjKTsKLQkJCQljb3VudCArPSBzaXplb2Yoc3RydWN0IG1wY19pbnRzcmMpOwotCQkJCWJyZWFrOwotCQkJfQorCQkJY2hlY2tfaXJxX3NyYygoc3RydWN0IG1wY19pbnRzcmMgKiltcHQsICZucl9tX3NwYXJlKTsKKwkJCXNraXBfZW50cnkoJm1wdCwgJmNvdW50LCBzaXplb2Yoc3RydWN0IG1wY19pbnRzcmMpKTsKKwkJCWJyZWFrOwogCQljYXNlIE1QX0xJTlRTUkM6Ci0JCQl7Ci0JCQkJc3RydWN0IG1wY19saW50c3JjICptID0KLQkJCQkgICAgKHN0cnVjdCBtcGNfbGludHNyYyAqKW1wdDsKLQkJCQltcHQgKz0gc2l6ZW9mKCptKTsKLQkJCQljb3VudCArPSBzaXplb2YoKm0pOwotCQkJCWJyZWFrOwotCQkJfQorCQkJc2tpcF9lbnRyeSgmbXB0LCAmY291bnQsIHNpemVvZihzdHJ1Y3QgbXBjX2xpbnRzcmMpKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJLyogd3JvbmcgbXB0YWJsZSAqLwotCQkJcHJpbnRrKEtFUk5fRVJSICJZb3VyIG1wdGFibGUgaXMgd3JvbmcsIGNvbnRhY3QgeW91ciBIVyB2ZW5kb3IhXG4iKTsKLQkJCXByaW50ayhLRVJOX0VSUiAidHlwZSAleFxuIiwgKm1wdCk7Ci0JCQlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgIiAgIiwgRFVNUF9QUkVGSVhfQUREUkVTUywgMTYsCi0JCQkJCTEsIG1wYywgbXBjLT5sZW5ndGgsIDEpOworCQkJc21wX2R1bXBfbXB0YWJsZShtcGMsIG1wdCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTkyNCwyMyArOTM4LDE1IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAobnJfbV9zcGFyZSA+IDApIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIipORVcqIGZvdW5kICIpOworCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiKk5FVyogZm91bmRcbiIpOwogCQkJbnJfbV9zcGFyZS0tOwogCQkJYXNzaWduX3RvX21wY19pbnRzcmMoJm1wX2lycXNbaV0sIG1fc3BhcmVbbnJfbV9zcGFyZV0pOwogCQkJbV9zcGFyZVtucl9tX3NwYXJlXSA9IE5VTEw7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3QgbXBjX2ludHNyYyAqbSA9IChzdHJ1Y3QgbXBjX2ludHNyYyAqKW1wdDsKIAkJCWNvdW50ICs9IHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYyk7Ci0JCQlpZiAoIW1wY19uZXdfcGh5cykgewotCQkJCXByaW50ayhLRVJOX0lORk8gIk5vIHNwYXJlIHNsb3RzLCB0cnkgdG8gYXBwZW5kLi4udGFrZSB5b3VyIHJpc2ssIG5ldyBtcGNfbGVuZ3RoICV4XG4iLCBjb3VudCk7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChjb3VudCA8PSBtcGNfbmV3X2xlbmd0aCkKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiTm8gc3BhcmUgc2xvdHMsIHRyeSB0byBhcHBlbmQuLi4sIG5ldyBtcGNfbGVuZ3RoICV4XG4iLCBjb3VudCk7Ci0JCQkJZWxzZSB7Ci0JCQkJCXByaW50ayhLRVJOX0VSUiAibXBjX25ld19sZW5ndGggJWx4IGlzIHRvbyBzbWFsbFxuIiwgbXBjX25ld19sZW5ndGgpOwotCQkJCQlnb3RvIG91dDsKLQkJCQl9Ci0JCQl9CisJCQlpZiAoIWNoZWNrX3Nsb3QobXBjX25ld19waHlzLCBtcGNfbmV3X2xlbmd0aCwgY291bnQpKQorCQkJCWdvdG8gb3V0OwogCQkJYXNzaWduX3RvX21wY19pbnRzcmMoJm1wX2lycXNbaV0sIG0pOwogCQkJbXBjLT5sZW5ndGggPSBjb3VudDsKIAkJCW1wdCArPSBzaXplb2Yoc3RydWN0IG1wY19pbnRzcmMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQuYwppbmRleCA2M2RkMzU4Li44ZTQ1ZjQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQuYwpAQCAtNDcwLDcgKzQ3MCw2IEBACiAjaWYgUEFHRVRBQkxFX0xFVkVMUyA+PSAzCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKIAkuc2V0X3B0ZV9hdG9taWMgPSBuYXRpdmVfc2V0X3B0ZV9hdG9taWMsCi0JLnNldF9wdGVfcHJlc2VudCA9IG5hdGl2ZV9zZXRfcHRlX3ByZXNlbnQsCiAJLnB0ZV9jbGVhciA9IG5hdGl2ZV9wdGVfY2xlYXIsCiAJLnBtZF9jbGVhciA9IG5hdGl2ZV9wbWRfY2xlYXIsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktY2FsZ2FyeV82NC5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKaW5kZXggZDI4YmJkYy4uNzU1YzIxZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKQEAgLTM4MCw4ICszODAsOSBAQAogCXJldHVybiB0Ymw7CiB9CiAKLXN0YXRpYyB2b2lkIGNhbGdhcnlfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LAotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQorc3RhdGljIHZvaWQgY2FsZ2FyeV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorCQkJICAgICBpbnQgbmVsZW1zLGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IGlvbW11X3RhYmxlICp0YmwgPSBmaW5kX2lvbW11X3RhYmxlKGRldik7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOwpAQCAtNDA0LDcgKzQwNSw4IEBACiB9CiAKIHN0YXRpYyBpbnQgY2FsZ2FyeV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCWludCBuZWxlbXMsIGludCBkaXJlY3Rpb24pCisJCQkgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IGlvbW11X3RhYmxlICp0YmwgPSBmaW5kX2lvbW11X3RhYmxlKGRldik7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOwpAQCAtNDI5LDE1ICs0MzEsMTQgQEAKIAkJcy0+ZG1hX2FkZHJlc3MgPSAoZW50cnkgPDwgUEFHRV9TSElGVCkgfCBzLT5vZmZzZXQ7CiAKIAkJLyogaW5zZXJ0IGludG8gSFcgdGFibGUgKi8KLQkJdGNlX2J1aWxkKHRibCwgZW50cnksIG5wYWdlcywgdmFkZHIgJiBQQUdFX01BU0ssCi0JCQkgIGRpcmVjdGlvbik7CisJCXRjZV9idWlsZCh0YmwsIGVudHJ5LCBucGFnZXMsIHZhZGRyICYgUEFHRV9NQVNLLCBkaXIpOwogCiAJCXMtPmRtYV9sZW5ndGggPSBzLT5sZW5ndGg7CiAJfQogCiAJcmV0dXJuIG5lbGVtczsKIGVycm9yOgotCWNhbGdhcnlfdW5tYXBfc2coZGV2LCBzZywgbmVsZW1zLCBkaXJlY3Rpb24pOworCWNhbGdhcnlfdW5tYXBfc2coZGV2LCBzZywgbmVsZW1zLCBkaXIsIE5VTEwpOwogCWZvcl9lYWNoX3NnKHNnLCBzLCBuZWxlbXMsIGkpIHsKIAkJc2ctPmRtYV9hZGRyZXNzID0gYmFkX2RtYV9hZGRyZXNzOwogCQlzZy0+ZG1hX2xlbmd0aCA9IDA7CkBAIC00NDUsMTAgKzQ0NiwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgZG1hX2FkZHJfdCBjYWxnYXJ5X21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBwYWRkciwKLQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKK3N0YXRpYyBkbWFfYWRkcl90IGNhbGdhcnlfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJCSAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewotCXZvaWQgKnZhZGRyID0gcGh5c190b192aXJ0KHBhZGRyKTsKKwl2b2lkICp2YWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldDsKIAl1bnNpZ25lZCBsb25nIHVhZGRyOwogCXVuc2lnbmVkIGludCBucGFnZXM7CiAJc3RydWN0IGlvbW11X3RhYmxlICp0YmwgPSBmaW5kX2lvbW11X3RhYmxlKGRldik7CkBAIC00NTYsMTcgKzQ1OSwxOCBAQAogCXVhZGRyID0gKHVuc2lnbmVkIGxvbmcpdmFkZHI7CiAJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHVhZGRyLCBzaXplLCBQQUdFX1NJWkUpOwogCi0JcmV0dXJuIGlvbW11X2FsbG9jKGRldiwgdGJsLCB2YWRkciwgbnBhZ2VzLCBkaXJlY3Rpb24pOworCXJldHVybiBpb21tdV9hbGxvYyhkZXYsIHRibCwgdmFkZHIsIG5wYWdlcywgZGlyKTsKIH0KIAotc3RhdGljIHZvaWQgY2FsZ2FyeV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0Jc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCitzdGF0aWMgdm9pZCBjYWxnYXJ5X3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLAorCQkJICAgICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IGlvbW11X3RhYmxlICp0YmwgPSBmaW5kX2lvbW11X3RhYmxlKGRldik7CiAJdW5zaWduZWQgaW50IG5wYWdlczsKIAotCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfaGFuZGxlLCBzaXplLCBQQUdFX1NJWkUpOwotCWlvbW11X2ZyZWUodGJsLCBkbWFfaGFuZGxlLCBucGFnZXMpOworCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfYWRkciwgc2l6ZSwgUEFHRV9TSVpFKTsKKwlpb21tdV9mcmVlKHRibCwgZG1hX2FkZHIsIG5wYWdlcyk7CiB9CiAKIHN0YXRpYyB2b2lkKiBjYWxnYXJ5X2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCkBAIC01MTUsMTMgKzUxOSwxMyBAQAogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIGdldF9vcmRlcihzaXplKSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIGNhbGdhcnlfZG1hX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgZG1hX21hcF9vcHMgY2FsZ2FyeV9kbWFfb3BzID0gewogCS5hbGxvY19jb2hlcmVudCA9IGNhbGdhcnlfYWxsb2NfY29oZXJlbnQsCiAJLmZyZWVfY29oZXJlbnQgPSBjYWxnYXJ5X2ZyZWVfY29oZXJlbnQsCi0JLm1hcF9zaW5nbGUgPSBjYWxnYXJ5X21hcF9zaW5nbGUsCi0JLnVubWFwX3NpbmdsZSA9IGNhbGdhcnlfdW5tYXBfc2luZ2xlLAogCS5tYXBfc2cgPSBjYWxnYXJ5X21hcF9zZywKIAkudW5tYXBfc2cgPSBjYWxnYXJ5X3VubWFwX3NnLAorCS5tYXBfcGFnZSA9IGNhbGdhcnlfbWFwX3BhZ2UsCisJLnVubWFwX3BhZ2UgPSBjYWxnYXJ5X3VubWFwX3BhZ2UsCiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqIGJ1c25vX3RvX2JiYXIodW5zaWduZWQgY2hhciBudW0pCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYwppbmRleCBiMjU0Mjg1Li5jN2M0Nzc2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtZGVidWcuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFyLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtMTIsNyArMTMsNyBAQAogCiBzdGF0aWMgaW50IGZvcmJpZF9kYWMgX19yZWFkX21vc3RseTsKIAotc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wczsKK3N0cnVjdCBkbWFfbWFwX29wcyAqZG1hX29wczsKIEVYUE9SVF9TWU1CT0woZG1hX29wcyk7CiAKIHN0YXRpYyBpbnQgaW9tbXVfc2FjX2ZvcmNlIF9fcmVhZF9tb3N0bHk7CkBAIC00NCw2ICs0NSw5IEBACiB9OwogRVhQT1JUX1NZTUJPTCh4ODZfZG1hX2ZhbGxiYWNrX2Rldik7CiAKKy8qIE51bWJlciBvZiBlbnRyaWVzIHByZWFsbG9jYXRlZCBmb3IgRE1BLUFQSSBkZWJ1Z2dpbmcgKi8KKyNkZWZpbmUgUFJFQUxMT0NfRE1BX0RFQlVHX0VOVFJJRVMgICAgICAgMzI3NjgKKwogaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQogewogCWlmICghZGV2LT5kbWFfbWFzayB8fCAhZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spKQpAQCAtMjI0LDcgKzIyOCw3IEBACiAKIGludCBkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCiB7Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKICNpZmRlZiBDT05GSUdfUENJCiAJaWYgKG1hc2sgPiAweGZmZmZmZmZmICYmIGZvcmJpZF9kYWMgPiAwKSB7CkBAIC0yNjUsNiArMjY5LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBjaV9pb21tdV9pbml0KHZvaWQpCiB7CisJZG1hX2RlYnVnX2luaXQoUFJFQUxMT0NfRE1BX0RFQlVHX0VOVFJJRVMpOworCisjaWZkZWYgQ09ORklHX1BDSQorCWRtYV9kZWJ1Z19hZGRfYnVzKCZwY2lfYnVzX3R5cGUpOworI2VuZGlmCisKIAljYWxnYXJ5X2lvbW11X2luaXQoKTsKIAogCWludGVsX2lvbW11X2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKaW5kZXggZDU3NjhiMS4uYjI4NGI1OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKQEAgLTI1NSwxMCArMjU1LDEzIEBACiB9CiAKIC8qIE1hcCBhIHNpbmdsZSBhcmVhIGludG8gdGhlIElPTU1VICovCi1zdGF0aWMgZG1hX2FkZHJfdAotZ2FydF9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgcGh5c19hZGRyX3QgcGFkZHIsIHNpemVfdCBzaXplLCBpbnQgZGlyKQorc3RhdGljIGRtYV9hZGRyX3QgZ2FydF9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJdW5zaWduZWQgbG9uZyBidXM7CisJcGh5c19hZGRyX3QgcGFkZHIgPSBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQ7CiAKIAlpZiAoIWRldikKIAkJZGV2ID0gJng4Nl9kbWFfZmFsbGJhY2tfZGV2OwpAQCAtMjc1LDggKzI3OCw5IEBACiAvKgogICogRnJlZSBhIERNQSBtYXBwaW5nLgogICovCi1zdGF0aWMgdm9pZCBnYXJ0X3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCi0JCQkgICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKK3N0YXRpYyB2b2lkIGdhcnRfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCisJCQkgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAl1bnNpZ25lZCBsb25nIGlvbW11X3BhZ2U7CiAJaW50IG5wYWdlczsKQEAgLTI5OCw4ICszMDIsOCBAQAogLyoKICAqIFdyYXBwZXIgZm9yIHBjaV91bm1hcF9zaW5nbGUgd29ya2luZyB3aXRoIHNjYXR0ZXJsaXN0cy4KICAqLwotc3RhdGljIHZvaWQKLWdhcnRfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsIGludCBkaXIpCitzdGF0aWMgdm9pZCBnYXJ0X3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKIAlpbnQgaTsKQEAgLTMwNyw3ICszMTEsNyBAQAogCWZvcl9lYWNoX3NnKHNnLCBzLCBuZW50cywgaSkgewogCQlpZiAoIXMtPmRtYV9sZW5ndGggfHwgIXMtPmxlbmd0aCkKIAkJCWJyZWFrOwotCQlnYXJ0X3VubWFwX3NpbmdsZShkZXYsIHMtPmRtYV9hZGRyZXNzLCBzLT5kbWFfbGVuZ3RoLCBkaXIpOworCQlnYXJ0X3VubWFwX3BhZ2UoZGV2LCBzLT5kbWFfYWRkcmVzcywgcy0+ZG1hX2xlbmd0aCwgZGlyLCBOVUxMKTsKIAl9CiB9CiAKQEAgLTMyOSw3ICszMzMsNyBAQAogCQkJYWRkciA9IGRtYV9tYXBfYXJlYShkZXYsIGFkZHIsIHMtPmxlbmd0aCwgZGlyLCAwKTsKIAkJCWlmIChhZGRyID09IGJhZF9kbWFfYWRkcmVzcykgewogCQkJCWlmIChpID4gMCkKLQkJCQkJZ2FydF91bm1hcF9zZyhkZXYsIHNnLCBpLCBkaXIpOworCQkJCQlnYXJ0X3VubWFwX3NnKGRldiwgc2csIGksIGRpciwgTlVMTCk7CiAJCQkJbmVudHMgPSAwOwogCQkJCXNnWzBdLmRtYV9sZW5ndGggPSAwOwogCQkJCWJyZWFrOwpAQCAtNDAwLDggKzQwNCw4IEBACiAgKiBETUEgbWFwIGFsbCBlbnRyaWVzIGluIGEgc2NhdHRlcmxpc3QuCiAgKiBNZXJnZSBjaHVua3MgdGhhdCBoYXZlIHBhZ2UgYWxpZ25lZCBzaXplcyBpbnRvIGEgY29udGludW91cyBtYXBwaW5nLgogICovCi1zdGF0aWMgaW50Ci1nYXJ0X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywgaW50IGRpcikKK3N0YXRpYyBpbnQgZ2FydF9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCAqcywgKnBzLCAqc3RhcnRfc2csICpzZ21hcDsKIAlpbnQgbmVlZCA9IDAsIG5leHRuZWVkLCBpLCBvdXQsIHN0YXJ0OwpAQCAtNDY4LDcgKzQ3Miw3IEBACiAKIGVycm9yOgogCWZsdXNoX2dhcnQoKTsKLQlnYXJ0X3VubWFwX3NnKGRldiwgc2csIG91dCwgZGlyKTsKKwlnYXJ0X3VubWFwX3NnKGRldiwgc2csIG91dCwgZGlyLCBOVUxMKTsKIAogCS8qIFdoZW4gaXQgd2FzIGZvcmNlZCBvciBtZXJnZWQgdHJ5IGFnYWluIGluIGEgZHVtYiB3YXkgKi8KIAlpZiAoZm9yY2VfaW9tbXUgfHwgaW9tbXVfbWVyZ2UpIHsKQEAgLTUyMSw3ICs1MjUsNyBAQAogZ2FydF9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyLAogCQkgICBkbWFfYWRkcl90IGRtYV9hZGRyKQogewotCWdhcnRfdW5tYXBfc2luZ2xlKGRldiwgZG1hX2FkZHIsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTsKKwlnYXJ0X3VubWFwX3BhZ2UoZGV2LCBkbWFfYWRkciwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwsIE5VTEwpOwogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIGdldF9vcmRlcihzaXplKSk7CiB9CiAKQEAgLTcwNywxMSArNzExLDExIEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgc3RydWN0IGRtYV9tYXBwaW5nX29wcyBnYXJ0X2RtYV9vcHMgPSB7Ci0JLm1hcF9zaW5nbGUJCQk9IGdhcnRfbWFwX3NpbmdsZSwKLQkudW5tYXBfc2luZ2xlCQkJPSBnYXJ0X3VubWFwX3NpbmdsZSwKK3N0YXRpYyBzdHJ1Y3QgZG1hX21hcF9vcHMgZ2FydF9kbWFfb3BzID0gewogCS5tYXBfc2cJCQkJPSBnYXJ0X21hcF9zZywKIAkudW5tYXBfc2cJCQk9IGdhcnRfdW5tYXBfc2csCisJLm1hcF9wYWdlCQkJPSBnYXJ0X21hcF9wYWdlLAorCS51bm1hcF9wYWdlCQkJPSBnYXJ0X3VubWFwX3BhZ2UsCiAJLmFsbG9jX2NvaGVyZW50CQkJPSBnYXJ0X2FsbG9jX2NvaGVyZW50LAogCS5mcmVlX2NvaGVyZW50CQkJPSBnYXJ0X2ZyZWVfY29oZXJlbnQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1ub21tdS5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1ub21tdS5jCmluZGV4IGM3MGFiNWEuLmM2ZDcwM2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktbm9tbXUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLW5vbW11LmMKQEAgLTEsMTQgKzEsMTQgQEAKIC8qIEZhbGxiYWNrIGZ1bmN0aW9ucyB3aGVuIHRoZSBtYWluIElPTU1VIGNvZGUgaXMgbm90IGNvbXBpbGVkIGluLiBUaGlzCiAgICBjb2RlIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBpMzg2LiAqLwotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAotI2luY2x1ZGUgPGFzbS9pb21tdS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAKIHN0YXRpYyBpbnQKQEAgLTI1LDE5ICsyNSwxOSBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgZG1hX2FkZHJfdAotbm9tbXVfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgcGh5c19hZGRyX3QgcGFkZHIsIHNpemVfdCBzaXplLAotCSAgICAgICBpbnQgZGlyZWN0aW9uKQorc3RhdGljIGRtYV9hZGRyX3Qgbm9tbXVfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkJIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewotCWRtYV9hZGRyX3QgYnVzID0gcGFkZHI7CisJZG1hX2FkZHJfdCBidXMgPSBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQ7CiAJV0FSTl9PTihzaXplID09IDApOwotCWlmICghY2hlY2tfYWRkcigibWFwX3NpbmdsZSIsIGh3ZGV2LCBidXMsIHNpemUpKQotCQkJCXJldHVybiBiYWRfZG1hX2FkZHJlc3M7CisJaWYgKCFjaGVja19hZGRyKCJtYXBfc2luZ2xlIiwgZGV2LCBidXMsIHNpemUpKQorCQlyZXR1cm4gYmFkX2RtYV9hZGRyZXNzOwogCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKIAlyZXR1cm4gYnVzOwogfQogCi0KIC8qIE1hcCBhIHNldCBvZiBidWZmZXJzIGRlc2NyaWJlZCBieSBzY2F0dGVybGlzdCBpbiBzdHJlYW1pbmcKICAqIG1vZGUgZm9yIERNQS4gIFRoaXMgaXMgdGhlIHNjYXR0ZXItZ2F0aGVyIHZlcnNpb24gb2YgdGhlCiAgKiBhYm92ZSBwY2lfbWFwX3NpbmdsZSBpbnRlcmZhY2UuICBIZXJlIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0CkBAIC01NCw3ICs1NCw4IEBACiAgKiB0aGUgc2FtZSBoZXJlLgogICovCiBzdGF0aWMgaW50IG5vbW11X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkgICAgICAgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKQorCQkJaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnM7CiAJaW50IGk7CkBAIC03OCwxMiArNzksMTIgQEAKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOwogfQogCi1zdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIG5vbW11X2RtYV9vcHMgPSB7Ci0JLmFsbG9jX2NvaGVyZW50ID0gZG1hX2dlbmVyaWNfYWxsb2NfY29oZXJlbnQsCi0JLmZyZWVfY29oZXJlbnQgPSBub21tdV9mcmVlX2NvaGVyZW50LAotCS5tYXBfc2luZ2xlID0gbm9tbXVfbWFwX3NpbmdsZSwKLQkubWFwX3NnID0gbm9tbXVfbWFwX3NnLAotCS5pc19waHlzID0gMSwKK3N0cnVjdCBkbWFfbWFwX29wcyBub21tdV9kbWFfb3BzID0geworCS5hbGxvY19jb2hlcmVudAk9IGRtYV9nZW5lcmljX2FsbG9jX2NvaGVyZW50LAorCS5mcmVlX2NvaGVyZW50CT0gbm9tbXVfZnJlZV9jb2hlcmVudCwKKwkubWFwX3NnCQk9IG5vbW11X21hcF9zZywKKwkubWFwX3BhZ2UJPSBub21tdV9tYXBfcGFnZSwKKwkuaXNfcGh5cwk9IDEsCiB9OwogCiB2b2lkIF9faW5pdCBub19pb21tdV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLXN3aW90bGJfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYi5jCnNpbWlsYXJpdHkgaW5kZXggODAlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYl82NC5jCnJlbmFtZSB0byBhcmNoL3g4Ni9rZXJuZWwvcGNpLXN3aW90bGIuYwppbmRleCBkNTljOTE3Li4zNGYxMmU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLXN3aW90bGJfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLXN3aW90bGIuYwpAQCAtMzMsMTggKzMzLDExIEBACiAJcmV0dXJuIGJhZGRyOwogfQogCi1pbnQgX193ZWFrIHN3aW90bGJfYXJjaF9yYW5nZV9uZWVkc19tYXBwaW5nKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCitpbnQgX193ZWFrIHN3aW90bGJfYXJjaF9yYW5nZV9uZWVkc19tYXBwaW5nKHBoeXNfYWRkcl90IHBhZGRyLCBzaXplX3Qgc2l6ZSkKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGRtYV9hZGRyX3QKLXN3aW90bGJfbWFwX3NpbmdsZV9waHlzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUsCi0JCQlpbnQgZGlyZWN0aW9uKQotewotCXJldHVybiBzd2lvdGxiX21hcF9zaW5nbGUoaHdkZXYsIHBoeXNfdG9fdmlydChwYWRkciksIHNpemUsIGRpcmVjdGlvbik7Ci19Ci0KIHN0YXRpYyB2b2lkICp4ODZfc3dpb3RsYl9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCiAJCQkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWdzKQogewpAQCAtNTcsMjAgKzUwLDIwIEBACiAJcmV0dXJuIHN3aW90bGJfYWxsb2NfY29oZXJlbnQoaHdkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGZsYWdzKTsKIH0KIAotc3RydWN0IGRtYV9tYXBwaW5nX29wcyBzd2lvdGxiX2RtYV9vcHMgPSB7CitzdHJ1Y3QgZG1hX21hcF9vcHMgc3dpb3RsYl9kbWFfb3BzID0gewogCS5tYXBwaW5nX2Vycm9yID0gc3dpb3RsYl9kbWFfbWFwcGluZ19lcnJvciwKIAkuYWxsb2NfY29oZXJlbnQgPSB4ODZfc3dpb3RsYl9hbGxvY19jb2hlcmVudCwKIAkuZnJlZV9jb2hlcmVudCA9IHN3aW90bGJfZnJlZV9jb2hlcmVudCwKLQkubWFwX3NpbmdsZSA9IHN3aW90bGJfbWFwX3NpbmdsZV9waHlzLAotCS51bm1hcF9zaW5nbGUgPSBzd2lvdGxiX3VubWFwX3NpbmdsZSwKIAkuc3luY19zaW5nbGVfZm9yX2NwdSA9IHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2NwdSwKIAkuc3luY19zaW5nbGVfZm9yX2RldmljZSA9IHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2RldmljZSwKIAkuc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSA9IHN3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSwKIAkuc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSA9IHN3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSwKIAkuc3luY19zZ19mb3JfY3B1ID0gc3dpb3RsYl9zeW5jX3NnX2Zvcl9jcHUsCiAJLnN5bmNfc2dfZm9yX2RldmljZSA9IHN3aW90bGJfc3luY19zZ19mb3JfZGV2aWNlLAotCS5tYXBfc2cgPSBzd2lvdGxiX21hcF9zZywKLQkudW5tYXBfc2cgPSBzd2lvdGxiX3VubWFwX3NnLAorCS5tYXBfc2cgPSBzd2lvdGxiX21hcF9zZ19hdHRycywKKwkudW5tYXBfc2cgPSBzd2lvdGxiX3VubWFwX3NnX2F0dHJzLAorCS5tYXBfcGFnZSA9IHN3aW90bGJfbWFwX3BhZ2UsCisJLnVubWFwX3BhZ2UgPSBzd2lvdGxiX3VubWFwX3BhZ2UsCiAJLmRtYV9zdXBwb3J0ZWQgPSBOVUxMLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNmFmYTUyMy4uMTU2Zjg3NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC02NSwxMSArNjUsMTEgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1lID0gY3VycmVudDsKIAlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9ICZtZS0+dGhyZWFkOworCXVuc2lnbmVkIGxvbmcgKmJwID0gdC0+aW9fYml0bWFwX3B0cjsKIAotCWlmIChtZS0+dGhyZWFkLmlvX2JpdG1hcF9wdHIpIHsKKwlpZiAoYnApIHsKIAkJc3RydWN0IHRzc19zdHJ1Y3QgKnRzcyA9ICZwZXJfY3B1KGluaXRfdHNzLCBnZXRfY3B1KCkpOwogCi0JCWtmcmVlKHQtPmlvX2JpdG1hcF9wdHIpOwogCQl0LT5pb19iaXRtYXBfcHRyID0gTlVMTDsKIAkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX0lPX0JJVE1BUCk7CiAJCS8qCkBAIC03OCw2ICs3OCw3IEBACiAJCW1lbXNldCh0c3MtPmlvX2JpdG1hcCwgMHhmZiwgdC0+aW9fYml0bWFwX21heCk7CiAJCXQtPmlvX2JpdG1hcF9tYXggPSAwOwogCQlwdXRfY3B1KCk7CisJCWtmcmVlKGJwKTsKIAl9CiAKIAlkc19leGl0X3RocmVhZChjdXJyZW50KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwppbmRleCAzZDk2NzJlLi4xOTM3ODcxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCkBAIC02ODUsOSArNjg1LDggQEAKIAkJaWYgKCFjZmcuc2lnbmFsKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCiAJCWNoaWxkLT50aHJlYWQuYnRzX292Zmxfc2lnbmFsID0gY2ZnLnNpZ25hbDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAogCWlmICgoY2ZnLmZsYWdzICYgUFRSQUNFX0JUU19PX0FMTE9DKSAmJgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jIGIvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCmluZGV4IDY5N2QxYjcuLmU5NTAyMmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMKQEAgLTc0LDggKzc0LDcgQEAKIAlpZiAoIWZvcmNlX2hwZXRfYWRkcmVzcykKIAkJcmV0dXJuOwogCi0JaWYgKHJjYmFfYmFzZSA9PSBOVUxMKQotCQlCVUcoKTsKKwlCVUdfT04ocmNiYV9iYXNlID09IE5VTEwpOwogCiAJLyogcmVhZCB0aGUgRnVuY3Rpb24gRGlzYWJsZSByZWdpc3RlciwgZHdvcmQgbW9kZSBvbmx5ICovCiAJdmFsID0gcmVhZGwocmNiYV9iYXNlICsgMHgzNDA0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfMzIuUwppbmRleCAyMDY0ZDBhLi40MTIzNTUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF8zMi5TCkBAIC0xNyw3ICsxNyw4IEBACiAKICNkZWZpbmUgUFRSKHgpICh4IDw8IDIpCiAKLS8qIGNvbnRyb2xfcGFnZSArIEtFWEVDX0NPTlRST0xfQ09ERV9NQVhfU0laRQorLyoKKyAqIGNvbnRyb2xfcGFnZSArIEtFWEVDX0NPTlRST0xfQ09ERV9NQVhfU0laRQogICogfiBjb250cm9sX3BhZ2UgKyBQQUdFX1NJWkUgYXJlIHVzZWQgYXMgZGF0YSBzdG9yYWdlIGFuZCBzdGFjayBmb3IKICAqIGp1bXBpbmcgYmFjawogICovCkBAIC03Niw4ICs3NywxMCBAQAogCW1vdmwJJWVheCwgQ1BfUEFfU1dBUF9QQUdFKCVlZGkpCiAJbW92bAklZWJ4LCBDUF9QQV9CQUNLVVBfUEFHRVNfTUFQKCVlZGkpCiAKLQkvKiBnZXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBjb250cm9sIHBhZ2Ugbm93ICovCi0JLyogdGhpcyBpcyBpbXBvc3NpYmxlIGFmdGVyIHBhZ2UgdGFibGUgc3dpdGNoICovCisJLyoKKwkgKiBnZXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBjb250cm9sIHBhZ2Ugbm93CisJICogdGhpcyBpcyBpbXBvc3NpYmxlIGFmdGVyIHBhZ2UgdGFibGUgc3dpdGNoCisJICovCiAJbW92bAlQVFIoUEFfQ09OVFJPTF9QQUdFKSglZWJwKSwgJWVkaQogCiAJLyogc3dpdGNoIHRvIG5ldyBzZXQgb2YgcGFnZSB0YWJsZXMgKi8KQEAgLTk3LDcgKzEwMCw4IEBACiAJLyogc3RvcmUgdGhlIHN0YXJ0IGFkZHJlc3Mgb24gdGhlIHN0YWNrICovCiAJcHVzaGwgICAlZWR4CiAKLQkvKiBTZXQgY3IwIHRvIGEga25vd24gc3RhdGU6CisJLyoKKwkgKiBTZXQgY3IwIHRvIGEga25vd24gc3RhdGU6CiAJICogIC0gUGFnaW5nIGRpc2FibGVkCiAJICogIC0gQWxpZ25tZW50IGNoZWNrIGRpc2FibGVkCiAJICogIC0gV3JpdGUgcHJvdGVjdCBkaXNhYmxlZApAQCAtMTEzLDcgKzExNyw4IEBACiAJLyogY2xlYXIgY3I0IGlmIGFwcGxpY2FibGUgKi8KIAl0ZXN0bAklZWN4LCAlZWN4CiAJanoJMWYKLQkvKiBTZXQgY3I0IHRvIGEga25vd24gc3RhdGU6CisJLyoKKwkgKiBTZXQgY3I0IHRvIGEga25vd24gc3RhdGU6CiAJICogU2V0dGluZyBldmVyeXRoaW5nIHRvIHplcm8gc2VlbXMgc2FmZS4KIAkgKi8KIAl4b3JsCSVlYXgsICVlYXgKQEAgLTEzMiwxNSArMTM3LDE4IEBACiAJY2FsbAlzd2FwX3BhZ2VzCiAJYWRkbAkkOCwgJWVzcAogCi0JLyogVG8gYmUgY2VydGFpbiBvZiBhdm9pZGluZyBwcm9ibGVtcyB3aXRoIHNlbGYtbW9kaWZ5aW5nIGNvZGUKKwkvKgorCSAqIFRvIGJlIGNlcnRhaW4gb2YgYXZvaWRpbmcgcHJvYmxlbXMgd2l0aCBzZWxmLW1vZGlmeWluZyBjb2RlCiAJICogSSBuZWVkIHRvIGV4ZWN1dGUgYSBzZXJpYWxpemluZyBpbnN0cnVjdGlvbiBoZXJlLgogCSAqIFNvIEkgZmx1c2ggdGhlIFRMQiwgaXQncyBoYW5keSwgYW5kIG5vdCBwcm9jZXNzb3IgZGVwZW5kZW50LgogCSAqLwogCXhvcmwJJWVheCwgJWVheAogCW1vdmwJJWVheCwgJWNyMwogCi0JLyogc2V0IGFsbCBvZiB0aGUgcmVnaXN0ZXJzIHRvIGtub3duIHZhbHVlcyAqLwotCS8qIGxlYXZlICVlc3AgYWxvbmUgKi8KKwkvKgorCSAqIHNldCBhbGwgb2YgdGhlIHJlZ2lzdGVycyB0byBrbm93biB2YWx1ZXMKKwkgKiBsZWF2ZSAlZXNwIGFsb25lCisJICovCiAKIAl0ZXN0bAklZXNpLCAlZXNpCiAJam56IDFmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlMKaW5kZXggZDMyY2ZiMi4uNGRlOGY1YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfNjQuUwpAQCAtMTksMjkgKzE5LDc3IEBACiAjZGVmaW5lIFBUUih4KSAoeCA8PCAzKQogI2RlZmluZSBQQUdFX0FUVFIgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCiAKKy8qCisgKiBjb250cm9sX3BhZ2UgKyBLRVhFQ19DT05UUk9MX0NPREVfTUFYX1NJWkUKKyAqIH4gY29udHJvbF9wYWdlICsgUEFHRV9TSVpFIGFyZSB1c2VkIGFzIGRhdGEgc3RvcmFnZSBhbmQgc3RhY2sgZm9yCisgKiBqdW1waW5nIGJhY2sKKyAqLworI2RlZmluZSBEQVRBKG9mZnNldCkJCShLRVhFQ19DT05UUk9MX0NPREVfTUFYX1NJWkUrKG9mZnNldCkpCisKKy8qIE1pbmltYWwgQ1BVIHN0YXRlICovCisjZGVmaW5lIFJTUAkJCURBVEEoMHgwKQorI2RlZmluZSBDUjAJCQlEQVRBKDB4OCkKKyNkZWZpbmUgQ1IzCQkJREFUQSgweDEwKQorI2RlZmluZSBDUjQJCQlEQVRBKDB4MTgpCisKKy8qIG90aGVyIGRhdGEgKi8KKyNkZWZpbmUgQ1BfUEFfVEFCTEVfUEFHRQlEQVRBKDB4MjApCisjZGVmaW5lIENQX1BBX1NXQVBfUEFHRQkJREFUQSgweDI4KQorI2RlZmluZSBDUF9QQV9CQUNLVVBfUEFHRVNfTUFQCURBVEEoMHgzMCkKKwogCS50ZXh0CiAJLmFsaWduIFBBR0VfU0laRQogCS5jb2RlNjQKIAkuZ2xvYmwgcmVsb2NhdGVfa2VybmVsCiByZWxvY2F0ZV9rZXJuZWw6Ci0JLyogJXJkaSBpbmRpcmVjdGlvbl9wYWdlCisJLyoKKwkgKiAlcmRpIGluZGlyZWN0aW9uX3BhZ2UKIAkgKiAlcnNpIHBhZ2VfbGlzdAogCSAqICVyZHggc3RhcnQgYWRkcmVzcworCSAqICVyY3ggcHJlc2VydmVfY29udGV4dAogCSAqLwogCisJLyogU2F2ZSB0aGUgQ1BVIGNvbnRleHQsIHVzZWQgZm9yIGp1bXBpbmcgYmFjayAqLworCXB1c2hxICVyYngKKwlwdXNocSAlcmJwCisJcHVzaHEgJXIxMgorCXB1c2hxICVyMTMKKwlwdXNocSAlcjE0CisJcHVzaHEgJXIxNQorCXB1c2hmCisKKwltb3ZxCVBUUihWQV9DT05UUk9MX1BBR0UpKCVyc2kpLCAlcjExCisJbW92cQklcnNwLCBSU1AoJXIxMSkKKwltb3ZxCSVjcjAsICVyYXgKKwltb3ZxCSVyYXgsIENSMCglcjExKQorCW1vdnEJJWNyMywgJXJheAorCW1vdnEJJXJheCwgQ1IzKCVyMTEpCisJbW92cQklY3I0LCAlcmF4CisJbW92cQklcmF4LCBDUjQoJXIxMSkKKwogCS8qIHplcm8gb3V0IGZsYWdzLCBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJcHVzaHEgJDAKIAlwb3BmcQogCi0JLyogZ2V0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgY29udHJvbCBwYWdlIG5vdyAqLwotCS8qIHRoaXMgaXMgaW1wb3NzaWJsZSBhZnRlciBwYWdlIHRhYmxlIHN3aXRjaCAqLworCS8qCisJICogZ2V0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgY29udHJvbCBwYWdlIG5vdworCSAqIHRoaXMgaXMgaW1wb3NzaWJsZSBhZnRlciBwYWdlIHRhYmxlIHN3aXRjaAorCSAqLwogCW1vdnEJUFRSKFBBX0NPTlRST0xfUEFHRSkoJXJzaSksICVyOAogCiAJLyogZ2V0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgcGFnZSB0YWJsZSBub3cgdG9vICovCi0JbW92cQlQVFIoUEFfVEFCTEVfUEFHRSkoJXJzaSksICVyY3gKKwltb3ZxCVBUUihQQV9UQUJMRV9QQUdFKSglcnNpKSwgJXI5CisKKwkvKiBnZXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBzd2FwIHBhZ2Ugbm93ICovCisJbW92cQlQVFIoUEFfU1dBUF9QQUdFKSglcnNpKSwgJXIxMAorCisJLyogc2F2ZSBzb21lIGluZm9ybWF0aW9uIGZvciBqdW1waW5nIGJhY2sgKi8KKwltb3ZxCSVyOSwgQ1BfUEFfVEFCTEVfUEFHRSglcjExKQorCW1vdnEJJXIxMCwgQ1BfUEFfU1dBUF9QQUdFKCVyMTEpCisJbW92cQklcmRpLCBDUF9QQV9CQUNLVVBfUEFHRVNfTUFQKCVyMTEpCiAKIAkvKiBTd2l0Y2ggdG8gdGhlIGlkZW50aXR5IG1hcHBlZCBwYWdlIHRhYmxlcyAqLwotCW1vdnEJJXJjeCwgJWNyMworCW1vdnEJJXI5LCAlY3IzCiAKIAkvKiBzZXR1cCBhIG5ldyBzdGFjayBhdCB0aGUgZW5kIG9mIHRoZSBwaHlzaWNhbCBjb250cm9sIHBhZ2UgKi8KIAlsZWEJUEFHRV9TSVpFKCVyOCksICVyc3AKQEAgLTU1LDcgKzEwMyw4IEBACiAJLyogc3RvcmUgdGhlIHN0YXJ0IGFkZHJlc3Mgb24gdGhlIHN0YWNrICovCiAJcHVzaHEgICAlcmR4CiAKLQkvKiBTZXQgY3IwIHRvIGEga25vd24gc3RhdGU6CisJLyoKKwkgKiBTZXQgY3IwIHRvIGEga25vd24gc3RhdGU6CiAJICogIC0gUGFnaW5nIGVuYWJsZWQKIAkgKiAgLSBBbGlnbm1lbnQgY2hlY2sgZGlzYWJsZWQKIAkgKiAgLSBXcml0ZSBwcm90ZWN0IGRpc2FibGVkCkBAIC02OCw3ICsxMTcsOCBAQAogCW9ybAkkKFg4Nl9DUjBfUEcgfCBYODZfQ1IwX1BFKSwgJWVheAogCW1vdnEJJXJheCwgJWNyMAogCi0JLyogU2V0IGNyNCB0byBhIGtub3duIHN0YXRlOgorCS8qCisJICogU2V0IGNyNCB0byBhIGtub3duIHN0YXRlOgogCSAqICAtIHBoeXNpY2FsIGFkZHJlc3MgZXh0ZW5zaW9uIGVuYWJsZWQKIAkgKi8KIAltb3ZxCSRYODZfQ1I0X1BBRSwgJXJheApAQCAtNzgsOSArMTI4LDg3IEBACiAxOgogCiAJLyogRmx1c2ggdGhlIFRMQiAobmVlZGVkPykgKi8KLQltb3ZxCSVyY3gsICVjcjMKKwltb3ZxCSVyOSwgJWNyMworCisJbW92cQklcmN4LCAlcjExCisJY2FsbAlzd2FwX3BhZ2VzCisKKwkvKgorCSAqIFRvIGJlIGNlcnRhaW4gb2YgYXZvaWRpbmcgcHJvYmxlbXMgd2l0aCBzZWxmLW1vZGlmeWluZyBjb2RlCisJICogSSBuZWVkIHRvIGV4ZWN1dGUgYSBzZXJpYWxpemluZyBpbnN0cnVjdGlvbiBoZXJlLgorCSAqIFNvIEkgZmx1c2ggdGhlIFRMQiBieSByZWxvYWRpbmcgJWNyMyBoZXJlLCBpdCdzIGhhbmR5LAorCSAqIGFuZCBub3QgcHJvY2Vzc29yIGRlcGVuZGVudC4KKwkgKi8KKwltb3ZxCSVjcjMsICVyYXgKKwltb3ZxCSVyYXgsICVjcjMKKworCS8qCisJICogc2V0IGFsbCBvZiB0aGUgcmVnaXN0ZXJzIHRvIGtub3duIHZhbHVlcworCSAqIGxlYXZlICVyc3AgYWxvbmUKKwkgKi8KKworCXRlc3RxCSVyMTEsICVyMTEKKwlqbnogMWYKKwl4b3JxCSVyYXgsICVyYXgKKwl4b3JxCSVyYngsICVyYngKKwl4b3JxICAgICVyY3gsICVyY3gKKwl4b3JxICAgICVyZHgsICVyZHgKKwl4b3JxICAgICVyc2ksICVyc2kKKwl4b3JxICAgICVyZGksICVyZGkKKwl4b3JxICAgICVyYnAsICVyYnAKKwl4b3JxCSVyOCwgICVyOAorCXhvcnEJJXI5LCAgJXI5CisJeG9ycQklcjEwLCAlcjkKKwl4b3JxCSVyMTEsICVyMTEKKwl4b3JxCSVyMTIsICVyMTIKKwl4b3JxCSVyMTMsICVyMTMKKwl4b3JxCSVyMTQsICVyMTQKKwl4b3JxCSVyMTUsICVyMTUKKworCXJldAorCisxOgorCXBvcHEJJXJkeAorCWxlYXEJUEFHRV9TSVpFKCVyMTApLCAlcnNwCisJY2FsbAkqJXJkeAorCisJLyogZ2V0IHRoZSByZS1lbnRyeSBwb2ludCBvZiB0aGUgcGVlciBzeXN0ZW0gKi8KKwltb3ZxCTAoJXJzcCksICVyYnAKKwljYWxsCTFmCisxOgorCXBvcHEJJXI4CisJc3VicQkkKDFiIC0gcmVsb2NhdGVfa2VybmVsKSwgJXI4CisJbW92cQlDUF9QQV9TV0FQX1BBR0UoJXI4KSwgJXIxMAorCW1vdnEJQ1BfUEFfQkFDS1VQX1BBR0VTX01BUCglcjgpLCAlcmRpCisJbW92cQlDUF9QQV9UQUJMRV9QQUdFKCVyOCksICVyYXgKKwltb3ZxCSVyYXgsICVjcjMKKwlsZWEJUEFHRV9TSVpFKCVyOCksICVyc3AKKwljYWxsCXN3YXBfcGFnZXMKKwltb3ZxCSR2aXJ0dWFsX21hcHBlZCwgJXJheAorCXB1c2hxCSVyYXgKKwlyZXQKKwordmlydHVhbF9tYXBwZWQ6CisJbW92cQlSU1AoJXI4KSwgJXJzcAorCW1vdnEJQ1I0KCVyOCksICVyYXgKKwltb3ZxCSVyYXgsICVjcjQKKwltb3ZxCUNSMyglcjgpLCAlcmF4CisJbW92cQlDUjAoJXI4KSwgJXI4CisJbW92cQklcmF4LCAlY3IzCisJbW92cQklcjgsICVjcjAKKwltb3ZxCSVyYnAsICVyYXgKKworCXBvcGYKKwlwb3BxCSVyMTUKKwlwb3BxCSVyMTQKKwlwb3BxCSVyMTMKKwlwb3BxCSVyMTIKKwlwb3BxCSVyYnAKKwlwb3BxCSVyYngKKwlyZXQKIAogCS8qIERvIHRoZSBjb3BpZXMgKi8KK3N3YXBfcGFnZXM6CiAJbW92cQklcmRpLCAlcmN4IAkvKiBQdXQgdGhlIHBhZ2VfbGlzdCBpbiAlcmN4ICovCiAJeG9ycQklcmRpLCAlcmRpCiAJeG9ycQklcnNpLCAlcnNpCkBAIC0xMTIsMzYgKzI0MCwyNyBAQAogCW1vdnEJJXJjeCwgICAlcnNpICAvKiBGb3IgZXZlciBzb3VyY2UgcGFnZSBkbyBhIGNvcHkgKi8KIAlhbmRxCSQweGZmZmZmZmZmZmZmZmYwMDAsICVyc2kKIAorCW1vdnEJJXJkaSwgJXJkeAorCW1vdnEJJXJzaSwgJXJheAorCisJbW92cQklcjEwLCAlcmRpCiAJbW92cQkkNTEyLCAgICVyY3gKIAlyZXAgOyBtb3ZzcQorCisJbW92cQklcmF4LCAlcmRpCisJbW92cQklcmR4LCAlcnNpCisJbW92cQkkNTEyLCAgICVyY3gKKwlyZXAgOyBtb3ZzcQorCisJbW92cQklcmR4LCAlcmRpCisJbW92cQklcjEwLCAlcnNpCisJbW92cQkkNTEyLCAgICVyY3gKKwlyZXAgOyBtb3ZzcQorCisJbGVhCVBBR0VfU0laRSglcmF4KSwgJXJzaQogCWptcAkwYgogMzoKLQotCS8qIFRvIGJlIGNlcnRhaW4gb2YgYXZvaWRpbmcgcHJvYmxlbXMgd2l0aCBzZWxmLW1vZGlmeWluZyBjb2RlCi0JICogSSBuZWVkIHRvIGV4ZWN1dGUgYSBzZXJpYWxpemluZyBpbnN0cnVjdGlvbiBoZXJlLgotCSAqIFNvIEkgZmx1c2ggdGhlIFRMQiBieSByZWxvYWRpbmcgJWNyMyBoZXJlLCBpdCdzIGhhbmR5LAotCSAqIGFuZCBub3QgcHJvY2Vzc29yIGRlcGVuZGVudC4KLQkgKi8KLQltb3ZxCSVjcjMsICVyYXgKLQltb3ZxCSVyYXgsICVjcjMKLQotCS8qIHNldCBhbGwgb2YgdGhlIHJlZ2lzdGVycyB0byBrbm93biB2YWx1ZXMgKi8KLQkvKiBsZWF2ZSAlcnNwIGFsb25lICovCi0KLQl4b3JxCSVyYXgsICVyYXgKLQl4b3JxCSVyYngsICVyYngKLQl4b3JxICAgICVyY3gsICVyY3gKLQl4b3JxICAgICVyZHgsICVyZHgKLQl4b3JxICAgICVyc2ksICVyc2kKLQl4b3JxICAgICVyZGksICVyZGkKLQl4b3JxICAgICVyYnAsICVyYnAKLQl4b3JxCSVyOCwgICVyOAotCXhvcnEJJXI5LCAgJXI5Ci0JeG9ycQklcjEwLCAlcjkKLQl4b3JxCSVyMTEsICVyMTEKLQl4b3JxCSVyMTIsICVyMTIKLQl4b3JxCSVyMTMsICVyMTMKLQl4b3JxCSVyMTQsICVyMTQKLQl4b3JxCSVyMTUsICVyMTUKLQogCXJldAorCisJLmdsb2JsIGtleGVjX2NvbnRyb2xfY29kZV9zaXplCisuc2V0IGtleGVjX2NvbnRyb2xfY29kZV9zaXplLCAuIC0gcmVsb2NhdGVfa2VybmVsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcnRjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcnRjLmMKaW5kZXggZGQ2ZjJiNy4uNWQ0NjViMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3J0Yy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9ydGMuYwpAQCAtMSwxNCArMSwxNCBAQAogLyoKICAqIFJUQyByZWxhdGVkIGZ1bmN0aW9ucwogICovCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvYmNkLmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbnAuaD4KIAotI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL3ZzeXNjYWxsLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KIAogI2lmZGVmIENPTkZJR19YODZfMzIKIC8qCkBAIC0xNiw5ICsxNiw5IEBACiAgKiByZWdpc3RlciB3ZSBhcmUgd29ya2luZyB3aXRoLiAgSXQgaXMgcmVxdWlyZWQgZm9yIE5NSSBhY2Nlc3MgdG8gdGhlCiAgKiBDTU9TL1JUQyByZWdpc3RlcnMuICBTZWUgaW5jbHVkZS9hc20taTM4Ni9tYzE0NjgxOHJ0Yy5oIGZvciBkZXRhaWxzLgogICovCi12b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNtb3NfbG9jayA9IDA7Cit2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNtb3NfbG9jazsKIEVYUE9SVF9TWU1CT0woY21vc19sb2NrKTsKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KIAogLyogRm9yIHR3byBkaWdpdCB5ZWFycyBhc3N1bWUgdGltZSBpcyBhbHdheXMgYWZ0ZXIgdGhhdCAqLwogI2RlZmluZSBDTU9TX1lFQVJTX09GRlMgMjAwMApAQCAtMzgsOSArMzgsOSBAQAogICovCiBpbnQgbWFjaF9zZXRfcnRjX21tc3ModW5zaWduZWQgbG9uZyBub3d0aW1lKQogewotCWludCByZXR2YWwgPSAwOwogCWludCByZWFsX3NlY29uZHMsIHJlYWxfbWludXRlcywgY21vc19taW51dGVzOwogCXVuc2lnbmVkIGNoYXIgc2F2ZV9jb250cm9sLCBzYXZlX2ZyZXFfc2VsZWN0OworCWludCByZXR2YWwgPSAwOwogCiAJIC8qIHRlbGwgdGhlIGNsb2NrIGl0J3MgYmVpbmcgc2V0ICovCiAJc2F2ZV9jb250cm9sID0gQ01PU19SRUFEKFJUQ19DT05UUk9MKTsKQEAgLTcyLDggKzcyLDggQEAKIAkJCXJlYWxfc2Vjb25kcyA9IGJpbjJiY2QocmVhbF9zZWNvbmRzKTsKIAkJCXJlYWxfbWludXRlcyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKIAkJfQotCQlDTU9TX1dSSVRFKHJlYWxfc2Vjb25kcyxSVENfU0VDT05EUyk7Ci0JCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLFJUQ19NSU5VVEVTKTsKKwkJQ01PU19XUklURShyZWFsX3NlY29uZHMsIFJUQ19TRUNPTkRTKTsKKwkJQ01PU19XUklURShyZWFsX21pbnV0ZXMsIFJUQ19NSU5VVEVTKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAic2V0X3J0Y19tbXNzOiBjYW4ndCB1cGRhdGUgZnJvbSAlZCB0byAlZFxuIiwKQEAgLTE1MSw2ICsxNTEsNyBAQAogCW91dGIoYWRkciwgUlRDX1BPUlQoMCkpOwogCXZhbCA9IGluYihSVENfUE9SVCgxKSk7CiAJbG9ja19jbW9zX3N1ZmZpeChhZGRyKTsKKwogCXJldHVybiB2YWw7CiB9CiBFWFBPUlRfU1lNQk9MKHJ0Y19jbW9zX3JlYWQpOwpAQCAtMTY2LDggKzE2Nyw4IEBACiAKIHN0YXRpYyBpbnQgc2V0X3J0Y19tbXNzKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKIHsKLQlpbnQgcmV0dmFsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOwogCXJldHZhbCA9IHNldF93YWxsY2xvY2sobm93dGltZSk7CkBAIC0yNDIsNiArMjQzLDcgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJ0Y19kZXZpY2UpOwogCWRldl9pbmZvKCZydGNfZGV2aWNlLmRldiwKIAkJICJyZWdpc3RlcmVkIHBsYXRmb3JtIFJUQyBkZXZpY2UgKG5vIFBOUCBkZXZpY2UgZm91bmQpXG4iKTsKKwogCXJldHVybiAwOwogfQogZGV2aWNlX2luaXRjYWxsKGFkZF9ydGNfY21vcyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IGI3NDZkZWIuLmI0MTU4NDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCkBAIC0xMTIsOCArMTEyLDEzIEBACiAjZGVmaW5lIEFSQ0hfU0VUVVAKICNlbmRpZgogCitSRVNFUlZFX0JSSyhkbWlfYWxsb2MsIDY1NTM2KTsKKwogdW5zaWduZWQgaW50IGJvb3RfY3B1X2lkIF9fcmVhZF9tb3N0bHk7CiAKK3N0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgX2Jya19zdGFydCA9ICh1bnNpZ25lZCBsb25nKV9fYnJrX2Jhc2U7Cit1bnNpZ25lZCBsb25nIF9icmtfZW5kID0gKHVuc2lnbmVkIGxvbmcpX19icmtfYmFzZTsKKwogI2lmZGVmIENPTkZJR19YODZfNjQKIGludCBkZWZhdWx0X2NwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSkKIHsKQEAgLTE1OCwxMiArMTYzLDYgQEAKIAogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotLyogVGhpcyB2YWx1ZSBpcyBzZXQgdXAgYnkgdGhlIGVhcmx5IGJvb3QgY29kZSB0byBwb2ludCB0byB0aGUgdmFsdWUKLSAgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBib290IHRpbWUgcGFnZSB0YWJsZXMuICBJdCBjb250YWlucyBhICpwaHlzaWNhbCoKLSAgIGFkZHJlc3MsIGFuZCBtdXN0IG5vdCBiZSBpbiB0aGUgLmJzcyBzZWdtZW50ISAqLwotdW5zaWduZWQgbG9uZyBpbml0X3BnX3RhYmxlc19zdGFydCBfX2luaXRkYXRhID0gfjBVTDsKLXVuc2lnbmVkIGxvbmcgaW5pdF9wZ190YWJsZXNfZW5kIF9faW5pdGRhdGEgPSB+MFVMOwotCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHZpZGVvX3JhbV9yZXNvdXJjZSA9IHsKIAkubmFtZQk9ICJWaWRlbyBSQU0gYXJlYSIsCiAJLnN0YXJ0CT0gMHhhMDAwMCwKQEAgLTIwMiw3ICsyMDEsOSBAQAogI2VuZGlmCiAKICNlbHNlCi1zdHJ1Y3QgY3B1aW5mb194ODYgYm9vdF9jcHVfZGF0YSBfX3JlYWRfbW9zdGx5Oworc3RydWN0IGNwdWluZm9feDg2IGJvb3RfY3B1X2RhdGEgX19yZWFkX21vc3RseSA9IHsKKwkueDg2X3BoeXNfYml0cyA9IE1BWF9QSFlTTUVNX0JJVFMsCit9OwogRVhQT1JUX1NZTUJPTChib290X2NwdV9kYXRhKTsKICNlbmRpZgogCkBAIC0yMTcsMTIgKzIxOCw2IEBACiBpbnQgYm9vdGxvYWRlcl90eXBlOwogCiAvKgotICogRWFybHkgRE1JIG1lbW9yeQotICovCi1pbnQgZG1pX2FsbG9jX2luZGV4OwotY2hhciBkbWlfYWxsb2NfZGF0YVtETUlfTUFYX0RBVEFdOwotCi0vKgogICogU2V0dXAgb3B0aW9ucwogICovCiBzdHJ1Y3Qgc2NyZWVuX2luZm8gc2NyZWVuX2luZm87CkBAIC0yNjcsNiArMjYyLDM1IEBACiB9CiAjZW5kaWYKIAordm9pZCAqIF9faW5pdCBleHRlbmRfYnJrKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pCit7CisJc2l6ZV90IG1hc2sgPSBhbGlnbiAtIDE7CisJdm9pZCAqcmV0OworCisJQlVHX09OKF9icmtfc3RhcnQgPT0gMCk7CisJQlVHX09OKGFsaWduICYgbWFzayk7CisKKwlfYnJrX2VuZCA9IChfYnJrX2VuZCArIG1hc2spICYgfm1hc2s7CisJQlVHX09OKChjaGFyICopKF9icmtfZW5kICsgc2l6ZSkgPiBfX2Jya19saW1pdCk7CisKKwlyZXQgPSAodm9pZCAqKV9icmtfZW5kOworCV9icmtfZW5kICs9IHNpemU7CisKKwltZW1zZXQocmV0LCAwLCBzaXplKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCByZXNlcnZlX2Jyayh2b2lkKQoreworCWlmIChfYnJrX2VuZCA+IF9icmtfc3RhcnQpCisJCXJlc2VydmVfZWFybHkoX19wYShfYnJrX3N0YXJ0KSwgX19wYShfYnJrX2VuZCksICJCUksiKTsKKworCS8qIE1hcmsgYnJrIGFyZWEgYXMgbG9ja2VkIGRvd24gYW5kIG5vIGxvbmdlciB0YWtpbmcgYW55CisJICAgbmV3IGFsbG9jYXRpb25zICovCisJX2Jya19zdGFydCA9IDA7Cit9CisKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKIAogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTcxNSwxMSArNzM5LDcgQEAKIAlpbml0X21tLnN0YXJ0X2NvZGUgPSAodW5zaWduZWQgbG9uZykgX3RleHQ7CiAJaW5pdF9tbS5lbmRfY29kZSA9ICh1bnNpZ25lZCBsb25nKSBfZXRleHQ7CiAJaW5pdF9tbS5lbmRfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBfZWRhdGE7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWluaXRfbW0uYnJrID0gaW5pdF9wZ190YWJsZXNfZW5kICsgUEFHRV9PRkZTRVQ7Ci0jZWxzZQotCWluaXRfbW0uYnJrID0gKHVuc2lnbmVkIGxvbmcpICZfZW5kOwotI2VuZGlmCisJaW5pdF9tbS5icmsgPSBfYnJrX2VuZDsKIAogCWNvZGVfcmVzb3VyY2Uuc3RhcnQgPSB2aXJ0X3RvX3BoeXMoX3RleHQpOwogCWNvZGVfcmVzb3VyY2UuZW5kID0gdmlydF90b19waHlzKF9ldGV4dCktMTsKQEAgLTg0MCw2ICs4NjAsOCBAQAogCXNldHVwX2Jpb3NfY29ycnVwdGlvbl9jaGVjaygpOwogI2VuZGlmCiAKKwlyZXNlcnZlX2JyaygpOworCiAJLyogbWF4X3Bmbl9tYXBwZWQgaXMgdXBkYXRlZCBoZXJlICovCiAJbWF4X2xvd19wZm5fbWFwcGVkID0gaW5pdF9tZW1vcnlfbWFwcGluZygwLCBtYXhfbG93X3Bmbjw8UEFHRV9TSElGVCk7CiAJbWF4X3Bmbl9tYXBwZWQgPSBtYXhfbG93X3Bmbl9tYXBwZWQ7CkBAIC0xMDI3LDcgKzEwNDksNiBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMCAgPSB7CiAJLmhhbmRsZXIgPSB0aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfTk9CQUxBTkNJTkcgfCBJUlFGX0lSUVBPTEwgfCBJUlFGX1RJTUVSLAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJ0aW1lciIKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zaWduYWwuYyBiL2FyY2gveDg2L2tlcm5lbC9zaWduYWwuYwppbmRleCBkMmNjNjQyLi5kZmNjNzRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jCkBAIC0yMTEsMzEgKzIxMSwyNyBAQAogewogCS8qIERlZmF1bHQgdG8gdXNpbmcgbm9ybWFsIHN0YWNrICovCiAJdW5zaWduZWQgbG9uZyBzcCA9IHJlZ3MtPnNwOworCWludCBvbnNpZ3N0YWNrID0gb25fc2lnX3N0YWNrKHNwKTsKIAogI2lmZGVmIENPTkZJR19YODZfNjQKIAkvKiByZWR6b25lICovCiAJc3AgLT0gMTI4OwogI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KIAotCS8qCi0JICogSWYgd2UgYXJlIG9uIHRoZSBhbHRlcm5hdGUgc2lnbmFsIHN0YWNrIGFuZCB3b3VsZCBvdmVyZmxvdyBpdCwgZG9uJ3QuCi0JICogUmV0dXJuIGFuIGFsd2F5cy1ib2d1cyBhZGRyZXNzIGluc3RlYWQgc28gd2Ugd2lsbCBkaWUgd2l0aCBTSUdTRUdWLgotCSAqLwotCWlmIChvbl9zaWdfc3RhY2soc3ApICYmICFsaWtlbHkob25fc2lnX3N0YWNrKHNwIC0gZnJhbWVfc2l6ZSkpKQotCQlyZXR1cm4gKHZvaWQgX191c2VyICopIC0xTDsKLQotCS8qIFRoaXMgaXMgdGhlIFgvT3BlbiBzYW5jdGlvbmVkIHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuICAqLwotCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9PTlNUQUNLKSB7Ci0JCWlmIChzYXNfc3NfZmxhZ3Moc3ApID09IDApCi0JCQlzcCA9IGN1cnJlbnQtPnNhc19zc19zcCArIGN1cnJlbnQtPnNhc19zc19zaXplOwotCX0gZWxzZSB7CisJaWYgKCFvbnNpZ3N0YWNrKSB7CisJCS8qIFRoaXMgaXMgdGhlIFgvT3BlbiBzYW5jdGlvbmVkIHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuICAqLworCQlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfT05TVEFDSykgeworCQkJaWYgKHNhc19zc19mbGFncyhzcCkgPT0gMCkKKwkJCQlzcCA9IGN1cnJlbnQtPnNhc19zc19zcCArIGN1cnJlbnQtPnNhc19zc19zaXplOworCQl9IGVsc2UgewogI2lmZGVmIENPTkZJR19YODZfMzIKLQkJLyogVGhpcyBpcyB0aGUgbGVnYWN5IHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuICovCi0JCWlmICgocmVncy0+c3MgJiAweGZmZmYpICE9IF9fVVNFUl9EUyAmJgotCQkJIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUT1JFUikgJiYKLQkJCQlrYS0+c2Euc2FfcmVzdG9yZXIpCi0JCQlzcCA9ICh1bnNpZ25lZCBsb25nKSBrYS0+c2Euc2FfcmVzdG9yZXI7CisJCQkvKiBUaGlzIGlzIHRoZSBsZWdhY3kgc2lnbmFsIHN0YWNrIHN3aXRjaGluZy4gKi8KKwkJCWlmICgocmVncy0+c3MgJiAweGZmZmYpICE9IF9fVVNFUl9EUyAmJgorCQkJCSEoa2EtPnNhLnNhX2ZsYWdzICYgU0FfUkVTVE9SRVIpICYmCisJCQkJCWthLT5zYS5zYV9yZXN0b3JlcikKKwkJCQlzcCA9ICh1bnNpZ25lZCBsb25nKSBrYS0+c2Euc2FfcmVzdG9yZXI7CiAjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLworCQl9CiAJfQogCiAJaWYgKHVzZWRfbWF0aCgpKSB7CkBAIC0yNDQsMTIgKzI0MCwyMiBAQAogCQlzcCA9IHJvdW5kX2Rvd24oc3AsIDY0KTsKICNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCiAJCSpmcHN0YXRlID0gKHZvaWQgX191c2VyICopc3A7Ci0KLQkJaWYgKHNhdmVfaTM4N194c3RhdGUoKmZwc3RhdGUpIDwgMCkKLQkJCXJldHVybiAodm9pZCBfX3VzZXIgKiktMUw7CiAJfQogCi0JcmV0dXJuICh2b2lkIF9fdXNlciAqKWFsaWduX3NpZ2ZyYW1lKHNwIC0gZnJhbWVfc2l6ZSk7CisJc3AgPSBhbGlnbl9zaWdmcmFtZShzcCAtIGZyYW1lX3NpemUpOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgb24gdGhlIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgYW5kIHdvdWxkIG92ZXJmbG93IGl0LCBkb24ndC4KKwkgKiBSZXR1cm4gYW4gYWx3YXlzLWJvZ3VzIGFkZHJlc3MgaW5zdGVhZCBzbyB3ZSB3aWxsIGRpZSB3aXRoIFNJR1NFR1YuCisJICovCisJaWYgKG9uc2lnc3RhY2sgJiYgIWxpa2VseShvbl9zaWdfc3RhY2soc3ApKSkKKwkJcmV0dXJuICh2b2lkIF9fdXNlciAqKS0xTDsKKworCS8qIHNhdmUgaTM4NyBzdGF0ZSAqLworCWlmICh1c2VkX21hdGgoKSAmJiBzYXZlX2kzODdfeHN0YXRlKCpmcHN0YXRlKSA8IDApCisJCXJldHVybiAodm9pZCBfX3VzZXIgKiktMUw7CisKKwlyZXR1cm4gKHZvaWQgX191c2VyICopc3A7CiB9CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwppbmRleCAyNDkzMzRmLi5lZjdkMTAxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKQEAgLTExNCwxMCArMTE0LDYgQEAKIAogYXRvbWljX3QgaW5pdF9kZWFzc2VydGVkOwogCi0KLS8qIFNldCBpZiB3ZSBmaW5kIGEgQiBzdGVwcGluZyBDUFUgKi8KLXN0YXRpYyBpbnQgX19jcHVpbml0ZGF0YSBzbXBfYl9zdGVwcGluZzsKLQogI2lmIGRlZmluZWQoQ09ORklHX05VTUEpICYmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikKIAogLyogd2hpY2ggbG9naWNhbCBDUFVzIGFyZSBvbiB3aGljaCBub2RlcyAqLwpAQCAtMjcxLDggKzI2Nyw2IEBACiAJY3B1bWFza19zZXRfY3B1KGNwdWlkLCBjcHVfY2FsbGluX21hc2spOwogfQogCi1zdGF0aWMgaW50IF9fY3B1aW5pdGRhdGEgdW5zYWZlX3NtcDsKLQogLyoKICAqIEFjdGl2YXRlIGEgc2Vjb25kYXJ5IHByb2Nlc3Nvci4KICAqLwpAQCAtMzQwLDc2ICszMzQsNiBAQAogCWNwdV9pZGxlKCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBzbXBfYXBwbHlfcXVpcmtzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKLXsKLQkvKgotCSAqIE1hc2sgQiwgUGVudGl1bSwgYnV0IG5vdCBQZW50aXVtIE1NWAotCSAqLwotCWlmIChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgJiYKLQkgICAgYy0+eDg2ID09IDUgJiYKLQkgICAgYy0+eDg2X21hc2sgPj0gMSAmJiBjLT54ODZfbWFzayA8PSA0ICYmCi0JICAgIGMtPng4Nl9tb2RlbCA8PSAzKQotCQkvKgotCQkgKiBSZW1lbWJlciB3ZSBoYXZlIEIgc3RlcCBQZW50aWEgd2l0aCBidWdzCi0JCSAqLwotCQlzbXBfYl9zdGVwcGluZyA9IDE7Ci0KLQkvKgotCSAqIENlcnRhaW4gQXRobG9ucyBtaWdodCB3b3JrIChmb3IgdmFyaW91cyB2YWx1ZXMgb2YgJ3dvcmsnKSBpbiBTTVAKLQkgKiBidXQgdGhleSBhcmUgbm90IGNlcnRpZmllZCBhcyBNUCBjYXBhYmxlLgotCSAqLwotCWlmICgoYy0+eDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkgJiYgKGMtPng4NiA9PSA2KSkgewotCi0JCWlmIChudW1fcG9zc2libGVfY3B1cygpID09IDEpCi0JCQlnb3RvIHZhbGlkX2s3OwotCi0JCS8qIEF0aGxvbiA2NjAvNjYxIGlzIHZhbGlkLiAqLwotCQlpZiAoKGMtPng4Nl9tb2RlbCA9PSA2KSAmJiAoKGMtPng4Nl9tYXNrID09IDApIHx8Ci0JCSAgICAoYy0+eDg2X21hc2sgPT0gMSkpKQotCQkJZ290byB2YWxpZF9rNzsKLQotCQkvKiBEdXJvbiA2NzAgaXMgdmFsaWQgKi8KLQkJaWYgKChjLT54ODZfbW9kZWwgPT0gNykgJiYgKGMtPng4Nl9tYXNrID09IDApKQotCQkJZ290byB2YWxpZF9rNzsKLQotCQkvKgotCQkgKiBBdGhsb24gNjYyLCBEdXJvbiA2NzEsIGFuZCBBdGhsb24gPm1vZGVsIDcgaGF2ZSBjYXBhYmlsaXR5Ci0JCSAqIGJpdC4gSXQncyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgQTUgc3RlcHBpbmcgKDY2Mikgb2Ygc29tZQotCQkgKiBBdGhsb24gWFAncyBoYXZlIHRoZSBNUCBiaXQgc2V0LgotCQkgKiBTZWUgaHR0cDovL3d3dy5oZWlzZS5kZS9uZXdzdGlja2VyL2RhdGEvam93LTE4LjEwLjAxLTAwMCBmb3IKLQkJICogbW9yZS4KLQkJICovCi0JCWlmICgoKGMtPng4Nl9tb2RlbCA9PSA2KSAmJiAoYy0+eDg2X21hc2sgPj0gMikpIHx8Ci0JCSAgICAoKGMtPng4Nl9tb2RlbCA9PSA3KSAmJiAoYy0+eDg2X21hc2sgPj0gMSkpIHx8Ci0JCSAgICAgKGMtPng4Nl9tb2RlbCA+IDcpKQotCQkJaWYgKGNwdV9oYXNfbXApCi0JCQkJZ290byB2YWxpZF9rNzsKLQotCQkvKiBJZiB3ZSBnZXQgaGVyZSwgbm90IGEgY2VydGlmaWVkIFNNUCBjYXBhYmxlIEFNRCBzeXN0ZW0uICovCi0JCXVuc2FmZV9zbXAgPSAxOwotCX0KLQotdmFsaWRfazc6Ci0JOwotfQotCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgc21wX2NoZWNrcyh2b2lkKQotewotCWlmIChzbXBfYl9zdGVwcGluZykKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORzogU01QIG9wZXJhdGlvbiBtYXkgYmUgdW5yZWxpYWJsZSIKLQkJCQkgICAgIndpdGggQiBzdGVwcGluZyBwcm9jZXNzb3JzLlxuIik7Ci0KLQkvKgotCSAqIERvbid0IHRhaW50IGlmIHdlIGFyZSBydW5uaW5nIFNNUCBrZXJuZWwgb24gYSBzaW5nbGUgbm9uLU1QCi0JICogYXBwcm92ZWQgQXRobG9uCi0JICovCi0JaWYgKHVuc2FmZV9zbXAgJiYgbnVtX29ubGluZV9jcHVzKCkgPiAxKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIldBUk5JTkc6IFRoaXMgY29tYmluYXRpb24gb2YgQU1EIgotCQkJInByb2Nlc3NvcnMgaXMgbm90IHN1aXRhYmxlIGZvciBTTVAuXG4iKTsKLQkJYWRkX3RhaW50KFRBSU5UX1VOU0FGRV9TTVApOwotCX0KLX0KLQogLyoKICAqIFRoZSBib290c3RyYXAga2VybmVsIGVudHJ5IGNvZGUgaGFzIHNldCB0aGVzZSB1cC4gU2F2ZSB0aGVtIGZvcgogICogYSBnaXZlbiBDUFUKQEAgLTQyMyw3ICszNDcsNiBAQAogCWMtPmNwdV9pbmRleCA9IGlkOwogCWlmIChpZCAhPSAwKQogCQlpZGVudGlmeV9zZWNvbmRhcnlfY3B1KGMpOwotCXNtcF9hcHBseV9xdWlya3MoYyk7CiB9CiAKIApAQCAtMTE5Myw3ICsxMTE2LDYgQEAKIAlwcl9kZWJ1ZygiQm9vdCBkb25lLlxuIik7CiAKIAlpbXByZXNzX2ZyaWVuZHMoKTsKLQlzbXBfY2hlY2tzKCk7CiAjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCiAJc2V0dXBfaW9hcGljX2Rlc3QoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RpbWVfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC90aW1lXzY0LmMKaW5kZXggMjQxZWMzOS4uNWJhMzQzZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RpbWVfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdGltZV82NC5jCkBAIC0xMTYsNyArMTE2LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTAgPSB7CiAJLmhhbmRsZXIJPSB0aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX0lSUVBPTEwgfCBJUlFGX05PQkFMQU5DSU5HIHwgSVJRRl9USU1FUiwKLQkubWFzawkJPSBDUFVfTUFTS19OT05FLAogCS5uYW1lCQk9ICJ0aW1lciIKIH07CiAKQEAgLTEyNSw3ICsxMjQsNiBAQAogCWlmICghaHBldF9lbmFibGUoKSkKIAkJc2V0dXBfcGl0X3RpbWVyKCk7CiAKLQlpcnEwLm1hc2sgPSBjcHVtYXNrX29mX2NwdSgwKTsKIAlzZXR1cF9pcnEoMCwgJmlycTApOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKaW5kZXggZDAzOGI5Yy4uNzljMDczMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RsYl91di5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYwpAQCAtNzUwLDcgKzc1MCw3IEBACiAJaW50IG5vZGU7CiAJaW50IG5ibGFkZXM7CiAJaW50IGxhc3RfYmxhZGU7Ci0JaW50IGN1cl9jcHUgPSAwOworCWludCBjdXJfY3B1OwogCiAJaWYgKCFpc191dl9zeXN0ZW0oKSkKIAkJcmV0dXJuIDA7CkBAIC03NjAsNiArNzYwLDcgQEAKIAl1dl9tbWFzayA9ICgxVUwgPDwgdXZfaHViX2luZm8tPm5fdmFsKSAtIDE7CiAJbmJsYWRlcyA9IDA7CiAJbGFzdF9ibGFkZSA9IC0xOworCWN1cl9jcHUgPSAwOwogCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIHsKIAkJYmxhZGUgPSB1dl9ub2RlX3RvX2JsYWRlX2lkKG5vZGUpOwogCQlpZiAoYmxhZGUgPT0gbGFzdF9ibGFkZSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90b3BvbG9neS5jIGIvYXJjaC94ODYva2VybmVsL3RvcG9sb2d5LmMKaW5kZXggMGZjYzk1YS4uN2U0NTE1OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RvcG9sb2d5LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RvcG9sb2d5LmMKQEAgLTI1LDEwICsyNSwxMCBAQAogICoKICAqIFNlbmQgZmVlZGJhY2sgdG8gPGNvbHBhdGNoQHVzLmlibS5jb20+CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHg4Nl9jcHUsIGNwdV9kZXZpY2VzKTsKQEAgLTQ3LDYgKzQ3LDcgQEAKIAkgKi8KIAlpZiAobnVtKQogCQlwZXJfY3B1KGNwdV9kZXZpY2VzLCBudW0pLmNwdS5ob3RwbHVnZ2FibGUgPSAxOworCiAJcmV0dXJuIHJlZ2lzdGVyX2NwdSgmcGVyX2NwdShjcHVfZGV2aWNlcywgbnVtKS5jcHUsIG51bSk7CiB9CiBFWFBPUlRfU1lNQk9MKGFyY2hfcmVnaXN0ZXJfY3B1KTsKQEAgLTU2LDEyICs1NywxMyBAQAogCXVucmVnaXN0ZXJfY3B1KCZwZXJfY3B1KGNwdV9kZXZpY2VzLCBudW0pLmNwdSk7CiB9CiBFWFBPUlRfU1lNQk9MKGFyY2hfdW5yZWdpc3Rlcl9jcHUpOwotI2Vsc2UKKyNlbHNlIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLworCiBzdGF0aWMgaW50IF9faW5pdCBhcmNoX3JlZ2lzdGVyX2NwdShpbnQgbnVtKQogewogCXJldHVybiByZWdpc3Rlcl9jcHUoJnBlcl9jcHUoY3B1X2RldmljZXMsIG51bSkuY3B1LCBudW0pOwogfQotI2VuZGlmIC8qQ09ORklHX0hPVFBMVUdfQ1BVKi8KKyNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAogc3RhdGljIGludCBfX2luaXQgdG9wb2xvZ3lfaW5pdCh2b2lkKQogewpAQCAtNzAsMTEgKzcyLDExIEBACiAjaWZkZWYgQ09ORklHX05VTUEKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShpKQogCQlyZWdpc3Rlcl9vbmVfbm9kZShpKTsKLSNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLworI2VuZGlmCiAKIAlmb3JfZWFjaF9wcmVzZW50X2NwdShpKQogCQlhcmNoX3JlZ2lzdGVyX2NwdShpKTsKKwogCXJldHVybiAwOwogfQotCiBzdWJzeXNfaW5pdGNhbGwodG9wb2xvZ3lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdXZfdGltZS5jIGIvYXJjaC94ODYva2VybmVsL3V2X3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmZiNmM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL3V2X3RpbWUuYwpAQCAtMCwwICsxLDM5MyBAQAorLyoKKyAqIFNHSSBSVEMgY2xvY2svdGltZXIgcm91dGluZXMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IFNpbGljb24gR3JhcGhpY3MsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChjKSBEaW1pdHJpIFNpdmFuaWNoCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisKKyNpbmNsdWRlIDxhc20vdXYvdXZfbW1ycy5oPgorI2luY2x1ZGUgPGFzbS91di91dl9odWIuaD4KKyNpbmNsdWRlIDxhc20vdXYvYmlvcy5oPgorI2luY2x1ZGUgPGFzbS91di91di5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2NwdS5oPgorCisjZGVmaW5lIFJUQ19OQU1FCQkic2dpX3J0YyIKKworc3RhdGljIGN5Y2xlX3QgdXZfcmVhZF9ydGModm9pZCk7CitzdGF0aWMgaW50IHV2X3J0Y19uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKik7CitzdGF0aWMgdm9pZCB1dl9ydGNfdGltZXJfc2V0dXAoZW51bSBjbG9ja19ldmVudF9tb2RlLAorCQkJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKik7CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2VfdXYgPSB7CisJLm5hbWUJCT0gUlRDX05BTUUsCisJLnJhdGluZwkJPSA0MDAsCisJLnJlYWQJCT0gdXZfcmVhZF9ydGMsCisJLm1hc2sJCT0gKGN5Y2xlX3QpVVZIX1JUQ19SRUFMX1RJTUVfQ0xPQ0tfTUFTSywKKwkuc2hpZnQJCT0gMTAsCisJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgY2xvY2tfZXZlbnRfZGV2aWNlX3V2ID0geworCS5uYW1lCQk9IFJUQ19OQU1FLAorCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCisJLnNoaWZ0CQk9IDIwLAorCS5yYXRpbmcJCT0gNDAwLAorCS5pcnEJCT0gLTEsCisJLnNldF9uZXh0X2V2ZW50CT0gdXZfcnRjX25leHRfZXZlbnQsCisJLnNldF9tb2RlCT0gdXZfcnRjX3RpbWVyX3NldHVwLAorCS5ldmVudF9oYW5kbGVyCT0gTlVMTCwKK307CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlLCBjcHVfY2VkKTsKKworLyogVGhlcmUgaXMgb25lIG9mIHRoZXNlIGFsbG9jYXRlZCBwZXIgbm9kZSAqLworc3RydWN0IHV2X3J0Y190aW1lcl9oZWFkIHsKKwlzcGlubG9ja190CWxvY2s7CisJLyogbmV4dCBjcHUgd2FpdGluZyBmb3IgdGltZXIsIGxvY2FsIG5vZGUgcmVsYXRpdmU6ICovCisJaW50CQluZXh0X2NwdTsKKwkvKiBudW1iZXIgb2YgY3B1cyBvbiB0aGlzIG5vZGU6ICovCisJaW50CQluY3B1czsKKwlzdHJ1Y3QgeworCQlpbnQJbGNwdTsJCS8qIHN5c3RlbXdpZGUgbG9naWNhbCBjcHUgbnVtYmVyICovCisJCXU2NAlleHBpcmVzOwkvKiBuZXh0IHRpbWVyIGV4cGlyYXRpb24gZm9yIHRoaXMgY3B1ICovCisJfSBjcHVbMV07Cit9OworCisvKgorICogQWNjZXNzIHRvIHV2X3J0Y190aW1lcl9oZWFkIHZpYSBibGFkZSBpZC4KKyAqLworc3RhdGljIHN0cnVjdCB1dl9ydGNfdGltZXJfaGVhZAkJKipibGFkZV9pbmZvIF9fcmVhZF9tb3N0bHk7CisKK3N0YXRpYyBpbnQJCQkJdXZfcnRjX2VuYWJsZTsKKworLyoKKyAqIEhhcmR3YXJlIGludGVyZmFjZSByb3V0aW5lcworICovCisKKy8qIFNlbmQgSVBJcyB0byBhbm90aGVyIG5vZGUgKi8KK3N0YXRpYyB2b2lkIHV2X3J0Y19zZW5kX0lQSShpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgYXBpY2lkLCB2YWw7CisJaW50IHBub2RlOworCisJYXBpY2lkID0gY3B1X3BoeXNpY2FsX2lkKGNwdSk7CisJcG5vZGUgPSB1dl9hcGljaWRfdG9fcG5vZGUoYXBpY2lkKTsKKwl2YWwgPSAoMVVMIDw8IFVWSF9JUElfSU5UX1NFTkRfU0hGVCkgfAorCSAgICAgIChhcGljaWQgPDwgVVZIX0lQSV9JTlRfQVBJQ19JRF9TSEZUKSB8CisJICAgICAgKEdFTkVSSUNfSU5URVJSVVBUX1ZFQ1RPUiA8PCBVVkhfSVBJX0lOVF9WRUNUT1JfU0hGVCk7CisKKwl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsIFVWSF9JUElfSU5ULCB2YWwpOworfQorCisvKiBDaGVjayBmb3IgYW4gUlRDIGludGVycnVwdCBwZW5kaW5nICovCitzdGF0aWMgaW50IHV2X2ludHJfcGVuZGluZyhpbnQgcG5vZGUpCit7CisJcmV0dXJuIHV2X3JlYWRfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfRVZFTlRfT0NDVVJSRUQwKSAmCisJCVVWSF9FVkVOVF9PQ0NVUlJFRDBfUlRDMV9NQVNLOworfQorCisvKiBTZXR1cCBpbnRlcnJ1cHQgYW5kIHJldHVybiBub24temVybyBpZiBlYXJseSBleHBpcmF0aW9uIG9jY3VycmVkLiAqLworc3RhdGljIGludCB1dl9zZXR1cF9pbnRyKGludCBjcHUsIHU2NCBleHBpcmVzKQoreworCXU2NCB2YWw7CisJaW50IHBub2RlID0gdXZfY3B1X3RvX3Bub2RlKGNwdSk7CisKKwl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsIFVWSF9SVEMxX0lOVF9DT05GSUcsCisJCVVWSF9SVEMxX0lOVF9DT05GSUdfTV9NQVNLKTsKKwl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsIFVWSF9JTlRfQ01QQiwgLTFMKTsKKworCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0VWRU5UX09DQ1VSUkVEMF9BTElBUywKKwkJVVZIX0VWRU5UX09DQ1VSUkVEMF9SVEMxX01BU0spOworCisJdmFsID0gKEdFTkVSSUNfSU5URVJSVVBUX1ZFQ1RPUiA8PCBVVkhfUlRDMV9JTlRfQ09ORklHX1ZFQ1RPUl9TSEZUKSB8CisJCSgodTY0KWNwdV9waHlzaWNhbF9pZChjcHUpIDw8IFVWSF9SVEMxX0lOVF9DT05GSUdfQVBJQ19JRF9TSEZUKTsKKworCS8qIFNldCBjb25maWd1cmF0aW9uICovCisJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfUlRDMV9JTlRfQ09ORklHLCB2YWwpOworCS8qIEluaXRpYWxpemUgY29tcGFyYXRvciB2YWx1ZSAqLworCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0lOVF9DTVBCLCBleHBpcmVzKTsKKworCXJldHVybiAoZXhwaXJlcyA8IHV2X3JlYWRfcnRjKCkgJiYgIXV2X2ludHJfcGVuZGluZyhwbm9kZSkpOworfQorCisvKgorICogUGVyLWNwdSB0aW1lciB0cmFja2luZyByb3V0aW5lcworICovCisKK3N0YXRpYyBfX2luaXQgdm9pZCB1dl9ydGNfZGVhbGxvY2F0ZV90aW1lcnModm9pZCkKK3sKKwlpbnQgYmlkOworCisJZm9yX2VhY2hfcG9zc2libGVfYmxhZGUoYmlkKSB7CisJCWtmcmVlKGJsYWRlX2luZm9bYmlkXSk7CisJfQorCWtmcmVlKGJsYWRlX2luZm8pOworfQorCisvKiBBbGxvY2F0ZSBwZXItbm9kZSBsaXN0IG9mIGNwdSB0aW1lciBleHBpcmF0aW9uIHRpbWVzLiAqLworc3RhdGljIF9faW5pdCBpbnQgdXZfcnRjX2FsbG9jYXRlX3RpbWVycyh2b2lkKQoreworCWludCBjcHU7CisKKwlibGFkZV9pbmZvID0ga21hbGxvYyh1dl9wb3NzaWJsZV9ibGFkZXMgKiBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibGFkZV9pbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQoYmxhZGVfaW5mbywgMCwgdXZfcG9zc2libGVfYmxhZGVzICogc2l6ZW9mKHZvaWQgKikpOworCisJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSB7CisJCWludCBuaWQgPSBjcHVfdG9fbm9kZShjcHUpOworCQlpbnQgYmlkID0gdXZfY3B1X3RvX2JsYWRlX2lkKGNwdSk7CisJCWludCBiY3B1ID0gdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmJsYWRlX3Byb2Nlc3Nvcl9pZDsKKwkJc3RydWN0IHV2X3J0Y190aW1lcl9oZWFkICpoZWFkID0gYmxhZGVfaW5mb1tiaWRdOworCisJCWlmICghaGVhZCkgeworCQkJaGVhZCA9IGttYWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IHV2X3J0Y190aW1lcl9oZWFkKSArCisJCQkJKHV2X2JsYWRlX25yX3Bvc3NpYmxlX2NwdXMoYmlkKSAqCisJCQkJCTIgKiBzaXplb2YodTY0KSksCisJCQkJR0ZQX0tFUk5FTCwgbmlkKTsKKwkJCWlmICghaGVhZCkgeworCQkJCXV2X3J0Y19kZWFsbG9jYXRlX3RpbWVycygpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJc3Bpbl9sb2NrX2luaXQoJmhlYWQtPmxvY2spOworCQkJaGVhZC0+bmNwdXMgPSB1dl9ibGFkZV9ucl9wb3NzaWJsZV9jcHVzKGJpZCk7CisJCQloZWFkLT5uZXh0X2NwdSA9IC0xOworCQkJYmxhZGVfaW5mb1tiaWRdID0gaGVhZDsKKwkJfQorCisJCWhlYWQtPmNwdVtiY3B1XS5sY3B1ID0gY3B1OworCQloZWFkLT5jcHVbYmNwdV0uZXhwaXJlcyA9IFVMTE9OR19NQVg7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEZpbmQgYW5kIHNldCB0aGUgbmV4dCBleHBpcmluZyB0aW1lci4gICovCitzdGF0aWMgdm9pZCB1dl9ydGNfZmluZF9uZXh0X3RpbWVyKHN0cnVjdCB1dl9ydGNfdGltZXJfaGVhZCAqaGVhZCwgaW50IHBub2RlKQoreworCXU2NCBsb3dlc3QgPSBVTExPTkdfTUFYOworCWludCBjLCBiY3B1ID0gLTE7CisKKwloZWFkLT5uZXh0X2NwdSA9IC0xOworCWZvciAoYyA9IDA7IGMgPCBoZWFkLT5uY3B1czsgYysrKSB7CisJCXU2NCBleHAgPSBoZWFkLT5jcHVbY10uZXhwaXJlczsKKwkJaWYgKGV4cCA8IGxvd2VzdCkgeworCQkJYmNwdSA9IGM7CisJCQlsb3dlc3QgPSBleHA7CisJCX0KKwl9CisJaWYgKGJjcHUgPj0gMCkgeworCQloZWFkLT5uZXh0X2NwdSA9IGJjcHU7CisJCWMgPSBoZWFkLT5jcHVbYmNwdV0ubGNwdTsKKwkJaWYgKHV2X3NldHVwX2ludHIoYywgbG93ZXN0KSkKKwkJCS8qIElmIHdlIGRpZG4ndCBzZXQgaXQgdXAgaW4gdGltZSwgdHJpZ2dlciAqLworCQkJdXZfcnRjX3NlbmRfSVBJKGMpOworCX0gZWxzZSB7CisJCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX1JUQzFfSU5UX0NPTkZJRywKKwkJCVVWSF9SVEMxX0lOVF9DT05GSUdfTV9NQVNLKTsKKwl9Cit9CisKKy8qCisgKiBTZXQgZXhwaXJhdGlvbiB0aW1lIGZvciBjdXJyZW50IGNwdS4KKyAqCisgKiBSZXR1cm5zIDEgaWYgd2UgbWlzc2VkIHRoZSBleHBpcmF0aW9uIHRpbWUuCisgKi8KK3N0YXRpYyBpbnQgdXZfcnRjX3NldF90aW1lcihpbnQgY3B1LCB1NjQgZXhwaXJlcykKK3sKKwlpbnQgcG5vZGUgPSB1dl9jcHVfdG9fcG5vZGUoY3B1KTsKKwlpbnQgYmlkID0gdXZfY3B1X3RvX2JsYWRlX2lkKGNwdSk7CisJc3RydWN0IHV2X3J0Y190aW1lcl9oZWFkICpoZWFkID0gYmxhZGVfaW5mb1tiaWRdOworCWludCBiY3B1ID0gdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmJsYWRlX3Byb2Nlc3Nvcl9pZDsKKwl1NjQgKnQgPSAmaGVhZC0+Y3B1W2JjcHVdLmV4cGlyZXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbmV4dF9jcHU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGVhZC0+bG9jaywgZmxhZ3MpOworCisJbmV4dF9jcHUgPSBoZWFkLT5uZXh0X2NwdTsKKwkqdCA9IGV4cGlyZXM7CisJLyogV2lsbCB0aGlzIG9uZSBiZSBuZXh0IHRvIGdvIG9mZj8gKi8KKwlpZiAobmV4dF9jcHUgPCAwIHx8IGJjcHUgPT0gbmV4dF9jcHUgfHwKKwkJCWV4cGlyZXMgPCBoZWFkLT5jcHVbbmV4dF9jcHVdLmV4cGlyZXMpIHsKKwkJaGVhZC0+bmV4dF9jcHUgPSBiY3B1OworCQlpZiAodXZfc2V0dXBfaW50cihjcHUsIGV4cGlyZXMpKSB7CisJCQkqdCA9IFVMTE9OR19NQVg7CisJCQl1dl9ydGNfZmluZF9uZXh0X3RpbWVyKGhlYWQsIHBub2RlKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhlYWQtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGVhZC0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKgorICogVW5zZXQgZXhwaXJhdGlvbiB0aW1lIGZvciBjdXJyZW50IGNwdS4KKyAqCisgKiBSZXR1cm5zIDEgaWYgdGhpcyB0aW1lciB3YXMgcGVuZGluZy4KKyAqLworc3RhdGljIGludCB1dl9ydGNfdW5zZXRfdGltZXIoaW50IGNwdSkKK3sKKwlpbnQgcG5vZGUgPSB1dl9jcHVfdG9fcG5vZGUoY3B1KTsKKwlpbnQgYmlkID0gdXZfY3B1X3RvX2JsYWRlX2lkKGNwdSk7CisJc3RydWN0IHV2X3J0Y190aW1lcl9oZWFkICpoZWFkID0gYmxhZGVfaW5mb1tiaWRdOworCWludCBiY3B1ID0gdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmJsYWRlX3Byb2Nlc3Nvcl9pZDsKKwl1NjQgKnQgPSAmaGVhZC0+Y3B1W2JjcHVdLmV4cGlyZXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmMgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhlYWQtPmxvY2ssIGZsYWdzKTsKKworCWlmIChoZWFkLT5uZXh0X2NwdSA9PSBiY3B1ICYmIHV2X3JlYWRfcnRjKCkgPj0gKnQpCisJCXJjID0gMTsKKworCSp0ID0gVUxMT05HX01BWDsKKworCS8qIFdhcyB0aGUgaGFyZHdhcmUgc2V0dXAgZm9yIHRoaXMgdGltZXI/ICovCisJaWYgKGhlYWQtPm5leHRfY3B1ID09IGJjcHUpCisJCXV2X3J0Y19maW5kX25leHRfdGltZXIoaGVhZCwgcG5vZGUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGVhZC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJjOworfQorCisKKy8qCisgKiBLZXJuZWwgaW50ZXJmYWNlIHJvdXRpbmVzLgorICovCisKKy8qCisgKiBSZWFkIHRoZSBSVEMuCisgKi8KK3N0YXRpYyBjeWNsZV90IHV2X3JlYWRfcnRjKHZvaWQpCit7CisJcmV0dXJuIChjeWNsZV90KXV2X3JlYWRfbG9jYWxfbW1yKFVWSF9SVEMpOworfQorCisvKgorICogUHJvZ3JhbSB0aGUgbmV4dCBldmVudCwgcmVsYXRpdmUgdG8gbm93CisgKi8KK3N0YXRpYyBpbnQgdXZfcnRjX25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJCSAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkKQoreworCWludCBjZWRfY3B1ID0gY3B1bWFza19maXJzdChjZWQtPmNwdW1hc2spOworCisJcmV0dXJuIHV2X3J0Y19zZXRfdGltZXIoY2VkX2NwdSwgZGVsdGEgKyB1dl9yZWFkX3J0YygpKTsKK30KKworLyoKKyAqIFNldHVwIHRoZSBSVEMgdGltZXIgaW4gb25lc2hvdCBtb2RlCisgKi8KK3N0YXRpYyB2b2lkIHV2X3J0Y190aW1lcl9zZXR1cChlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCSAgICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJaW50IGNlZF9jcHUgPSBjcHVtYXNrX2ZpcnN0KGV2dC0+Y3B1bWFzayk7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwkJLyogTm90aGluZyB0byBkbyBoZXJlIHlldCAqLworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgorCQl1dl9ydGNfdW5zZXRfdGltZXIoY2VkX2NwdSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgdXZfcnRjX2ludGVycnVwdCh2b2lkKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCA9ICZfX2dldF9jcHVfdmFyKGNwdV9jZWQpOworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlpZiAoIWNlZCB8fCAhY2VkLT5ldmVudF9oYW5kbGVyKQorCQlyZXR1cm47CisKKwlpZiAodXZfcnRjX3Vuc2V0X3RpbWVyKGNwdSkgIT0gMSkKKwkJcmV0dXJuOworCisJY2VkLT5ldmVudF9oYW5kbGVyKGNlZCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHV2X2VuYWJsZV9ydGMoY2hhciAqc3RyKQoreworCXV2X3J0Y19lbmFibGUgPSAxOworCisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJ1dnJ0YyIsIHV2X2VuYWJsZV9ydGMpOworCitzdGF0aWMgX19pbml0IHZvaWQgdXZfcnRjX3JlZ2lzdGVyX2Nsb2NrZXZlbnRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqZHVtbXkpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkID0gJl9fZ2V0X2NwdV92YXIoY3B1X2NlZCk7CisKKwkqY2VkID0gY2xvY2tfZXZlbnRfZGV2aWNlX3V2OworCWNlZC0+Y3B1bWFzayA9IGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2VkKTsKK30KKworc3RhdGljIF9faW5pdCBpbnQgdXZfcnRjX3NldHVwX2Nsb2NrKHZvaWQpCit7CisJaW50IHJjOworCisJaWYgKCF1dl9ydGNfZW5hYmxlIHx8ICFpc191dl9zeXN0ZW0oKSB8fCBnZW5lcmljX2ludGVycnVwdF9leHRlbnNpb24pCisJCXJldHVybiAtRU5PREVWOworCisJZ2VuZXJpY19pbnRlcnJ1cHRfZXh0ZW5zaW9uID0gdXZfcnRjX2ludGVycnVwdDsKKworCWNsb2Nrc291cmNlX3V2Lm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KHNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZCwKKwkJCQljbG9ja3NvdXJjZV91di5zaGlmdCk7CisKKwlyYyA9IGNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV91dik7CisJaWYgKHJjKSB7CisJCWdlbmVyaWNfaW50ZXJydXB0X2V4dGVuc2lvbiA9IE5VTEw7CisJCXJldHVybiByYzsKKwl9CisKKwkvKiBTZXR1cCBhbmQgcmVnaXN0ZXIgY2xvY2tldmVudHMgKi8KKwlyYyA9IHV2X3J0Y19hbGxvY2F0ZV90aW1lcnMoKTsKKwlpZiAocmMpIHsKKwkJY2xvY2tzb3VyY2VfdW5yZWdpc3RlcigmY2xvY2tzb3VyY2VfdXYpOworCQlnZW5lcmljX2ludGVycnVwdF9leHRlbnNpb24gPSBOVUxMOworCQlyZXR1cm4gcmM7CisJfQorCisJY2xvY2tfZXZlbnRfZGV2aWNlX3V2Lm11bHQgPSBkaXZfc2Moc25fcnRjX2N5Y2xlc19wZXJfc2Vjb25kLAorCQkJCU5TRUNfUEVSX1NFQywgY2xvY2tfZXZlbnRfZGV2aWNlX3V2LnNoaWZ0KTsKKworCWNsb2NrX2V2ZW50X2RldmljZV91di5taW5fZGVsdGFfbnMgPSBOU0VDX1BFUl9TRUMgLworCQkJCQkJc25fcnRjX2N5Y2xlc19wZXJfc2Vjb25kOworCisJY2xvY2tfZXZlbnRfZGV2aWNlX3V2Lm1heF9kZWx0YV9ucyA9IGNsb2Nrc291cmNlX3V2Lm1hc2sgKgorCQkJCShOU0VDX1BFUl9TRUMgLyBzbl9ydGNfY3ljbGVzX3Blcl9zZWNvbmQpOworCisJcmMgPSBzY2hlZHVsZV9vbl9lYWNoX2NwdSh1dl9ydGNfcmVnaXN0ZXJfY2xvY2tldmVudHMpOworCWlmIChyYykgeworCQljbG9ja3NvdXJjZV91bnJlZ2lzdGVyKCZjbG9ja3NvdXJjZV91dik7CisJCWdlbmVyaWNfaW50ZXJydXB0X2V4dGVuc2lvbiA9IE5VTEw7CisJCXV2X3J0Y19kZWFsbG9jYXRlX3RpbWVycygpOworCX0KKworCXJldHVybiByYzsKK30KK2FyY2hfaW5pdGNhbGwodXZfcnRjX3NldHVwX2Nsb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYyBiL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYwppbmRleCAxOTFhODc2Li4zMWZmYzI0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdmlzd3NfcXVpcmtzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Zpc3dzX3F1aXJrcy5jCkBAIC01NzgsNyArNTc4LDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBwaWl4NF9tYXN0ZXJfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJaW50IHJlYWxpcnE7Ci0JaXJxX2Rlc2NfdCAqZGVzYzsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtaV8zMi5jIGIvYXJjaC94ODYva2VybmVsL3ZtaV8zMi5jCmluZGV4IDJjYzRhOTAuLjk1ZGViOWYyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtaV8zMi5jCkBAIC0zOTUsMTEgKzM5NSw2IEBACiAJdm1pX29wcy51cGRhdGVfcHRlKHB0ZXAsIFZNSV9QQUdFX1BUKTsKIH0KIAotc3RhdGljIHZvaWQgdm1pX3NldF9wdGVfcHJlc2VudChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQotewotCXZtaV9vcHMuc2V0X3B0ZShwdGUsIHB0ZXAsIHZtaV9mbGFnc19hZGRyX2RlZmVyKG1tLCBhZGRyLCBWTUlfUEFHRV9QVCwgMSkpOwotfQotCiBzdGF0aWMgdm9pZCB2bWlfc2V0X3B1ZChwdWRfdCAqcHVkcCwgcHVkX3QgcHVkdmFsKQogewogCS8qIFVtLCBld3cgKi8KQEAgLTc1MCw3ICs3NDUsNiBAQAogCQlwdl9tbXVfb3BzLnNldF9wbWQgPSB2bWlfc2V0X3BtZDsKICNpZmRlZiBDT05GSUdfWDg2X1BBRQogCQlwdl9tbXVfb3BzLnNldF9wdGVfYXRvbWljID0gdm1pX3NldF9wdGVfYXRvbWljOwotCQlwdl9tbXVfb3BzLnNldF9wdGVfcHJlc2VudCA9IHZtaV9zZXRfcHRlX3ByZXNlbnQ7CiAJCXB2X21tdV9vcHMuc2V0X3B1ZCA9IHZtaV9zZXRfcHVkOwogCQlwdl9tbXVfb3BzLnB0ZV9jbGVhciA9IHZtaV9wdGVfY2xlYXI7CiAJCXB2X21tdV9vcHMucG1kX2NsZWFyID0gdm1pX3BtZF9jbGVhcjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWljbG9ja18zMi5jIGIvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMKaW5kZXggMzNhNzg4ZC4uZDMwMzM2OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMKQEAgLTIwMiw3ICsyMDIsNiBAQAogCS5uYW1lIAkJPSAidm1pLXRpbWVyIiwKIAkuaGFuZGxlciAJPSB2bWlfdGltZXJfaW50ZXJydXB0LAogCS5mbGFncyAJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfTk9CQUxBTkNJTkcgfCBJUlFGX1RJTUVSLAotCS5tYXNrIAkJPSBDUFVfTUFTS19BTEwsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgdm1pX3RpbWVfaW5pdF9jbG9ja2V2ZW50KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF8zMi5sZHMuUyBiL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4XzMyLmxkcy5TCmluZGV4IDBkODYwOTYuLjYyYWQ1MDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4XzMyLmxkcy5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4XzMyLmxkcy5TCkBAIC0xODksMTUgKzE4OSwyNCBAQAogCSooLmJzcykKIAkuID0gQUxJR04oNCk7CiAJX19ic3Nfc3RvcCA9IC47Ci0gIAlfZW5kID0gLiA7Ci0JLyogVGhpcyBpcyB3aGVyZSB0aGUga2VybmVsIGNyZWF0ZXMgdGhlIGVhcmx5IGJvb3QgcGFnZSB0YWJsZXMgKi8KKyAgfQorCisgIC5icmsgOiBBVChBRERSKC5icmspIC0gTE9BRF9PRkZTRVQpIHsKIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQlwZzAgPSAuIDsKKwlfX2Jya19iYXNlID0gLiA7CisgCS4gKz0gNjQgKiAxMDI0IDsJLyogNjRrIGFsaWdubWVudCBzbG9wIHNwYWNlICovCisJKiguYnJrX3Jlc2VydmF0aW9uKQkvKiBhcmVhcyBicmsgdXNlcnMgaGF2ZSByZXNlcnZlZCAqLworCV9fYnJrX2xpbWl0ID0gLiA7CisgIH0KKworICAuZW5kIDogQVQoQUREUiguZW5kKSAtIExPQURfT0ZGU0VUKSB7CisJX2VuZCA9IC4gOwogICB9CiAKICAgLyogU2VjdGlvbnMgdG8gYmUgZGlzY2FyZGVkICovCiAgIC9ESVNDQVJELyA6IHsKIAkqKC5leGl0Y2FsbC5leGl0KQorCSooLmRpc2NhcmQpCiAJfQogCiAgIFNUQUJTX0RFQlVHCkBAIC0yMDUsNiArMjE0LDEyIEBACiAgIERXQVJGX0RFQlVHCiB9CiAKKy8qCisgKiBCdWlsZC10aW1lIGNoZWNrIG9uIHRoZSBpbWFnZSBzaXplOgorICovCitBU1NFUlQoKF9lbmQgLSBMT0FEX09GRlNFVCA8PSBLRVJORUxfSU1BR0VfU0laRSksCisJImtlcm5lbCBpbWFnZSBiaWdnZXIgdGhhbiBLRVJORUxfSU1BR0VfU0laRSIpCisKICNpZmRlZiBDT05GSUdfS0VYRUMKIC8qIExpbmsgdGltZSBjaGVja3MgKi8KICNpbmNsdWRlIDxhc20va2V4ZWMuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4XzY0Lmxkcy5TIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXhfNjQubGRzLlMKaW5kZXggZmJmY2VkNi4uYzg3NDI1MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtbGludXhfNjQubGRzLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXhfNjQubGRzLlMKQEAgLTI5LDggKzI5LDggQEAKIHsKICAgLiA9IF9fU1RBUlRfS0VSTkVMOwogICBwaHlzX3N0YXJ0dXBfNjQgPSBzdGFydHVwXzY0IC0gTE9BRF9PRkZTRVQ7Ci0gIF90ZXh0ID0gLjsJCQkvKiBUZXh0IGFuZCByZWFkLW9ubHkgZGF0YSAqLwogICAudGV4dCA6ICBBVChBRERSKC50ZXh0KSAtIExPQURfT0ZGU0VUKSB7CisJX3RleHQgPSAuOwkJCS8qIFRleHQgYW5kIHJlYWQtb25seSBkYXRhICovCiAJLyogRmlyc3QgdGhlIGNvZGUgdGhhdCBoYXMgdG8gYmUgZmlyc3QgZm9yIGJvb3RzdHJhcHBpbmcgKi8KIAkqKC50ZXh0LmhlYWQpCiAJX3N0ZXh0ID0gLjsKQEAgLTYxLDEzICs2MSwxMyBAQAogICAuZGF0YSA6IEFUKEFERFIoLmRhdGEpIC0gTE9BRF9PRkZTRVQpIHsKIAlEQVRBX0RBVEEKIAlDT05TVFJVQ1RPUlMKKwlfZWRhdGEgPSAuOwkJCS8qIEVuZCBvZiBkYXRhIHNlY3Rpb24gKi8KIAl9IDpkYXRhCiAKLSAgX2VkYXRhID0gLjsJCQkvKiBFbmQgb2YgZGF0YSBzZWN0aW9uICovCiAKLSAgLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0gIC4gPSBBTElHTihDT05GSUdfWDg2X0wxX0NBQ0hFX0JZVEVTKTsKICAgLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiBBVChBRERSKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKSAtIExPQURfT0ZGU0VUKSB7CisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CisJLiA9IEFMSUdOKENPTkZJR19YODZfTDFfQ0FDSEVfQllURVMpOwogCSooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpCiAgIH0KICAgLiA9IEFMSUdOKENPTkZJR19YODZfSU5URVJOT0RFX0NBQ0hFX0JZVEVTKTsKQEAgLTEyNSwyOSArMTI1LDI5IEBACiAjdW5kZWYgVlZJUlRfT0ZGU0VUCiAjdW5kZWYgVlZJUlQKIAotICAuID0gQUxJR04oVEhSRUFEX1NJWkUpOwkvKiBpbml0X3Rhc2sgKi8KICAgLmRhdGEuaW5pdF90YXNrIDogQVQoQUREUiguZGF0YS5pbml0X3Rhc2spIC0gTE9BRF9PRkZTRVQpIHsKKwkuID0gQUxJR04oVEhSRUFEX1NJWkUpOwkvKiBpbml0X3Rhc2sgKi8KIAkqKC5kYXRhLmluaXRfdGFzaykKICAgfTpkYXRhLmluaXQKIAotICAuID0gQUxJR04oUEFHRV9TSVpFKTsKICAgLmRhdGEucGFnZV9hbGlnbmVkIDogQVQoQUREUiguZGF0YS5wYWdlX2FsaWduZWQpIC0gTE9BRF9PRkZTRVQpIHsKKwkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAkqKC5kYXRhLnBhZ2VfYWxpZ25lZCkKICAgfQogCi0gIC8qIG1pZ2h0IGdldCBmcmVlZCBhZnRlciBpbml0ICovCi0gIC4gPSBBTElHTihQQUdFX1NJWkUpOwotICBfX3NtcF9hbHRfYmVnaW4gPSAuOwotICBfX3NtcF9sb2NrcyA9IC47CiAgIC5zbXBfbG9ja3MgOiBBVChBRERSKC5zbXBfbG9ja3MpIC0gTE9BRF9PRkZTRVQpIHsKKwkvKiBtaWdodCBnZXQgZnJlZWQgYWZ0ZXIgaW5pdCAqLworCS4gPSBBTElHTihQQUdFX1NJWkUpOworCV9fc21wX2FsdF9iZWdpbiA9IC47CisJX19zbXBfbG9ja3MgPSAuOwogCSooLnNtcF9sb2NrcykKKwlfX3NtcF9sb2Nrc19lbmQgPSAuOworCS4gPSBBTElHTihQQUdFX1NJWkUpOworCV9fc21wX2FsdF9lbmQgPSAuOwogICB9Ci0gIF9fc21wX2xvY2tzX2VuZCA9IC47Ci0gIC4gPSBBTElHTihQQUdFX1NJWkUpOwotICBfX3NtcF9hbHRfZW5kID0gLjsKIAogICAuID0gQUxJR04oUEFHRV9TSVpFKTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLwotICBfX2luaXRfYmVnaW4gPSAuOworICBfX2luaXRfYmVnaW4gPSAuOwkvKiBwYWlyZWQgd2l0aCBfX2luaXRfZW5kICovCiAgIC5pbml0LnRleHQgOiBBVChBRERSKC5pbml0LnRleHQpIC0gTE9BRF9PRkZTRVQpIHsKIAlfc2luaXR0ZXh0ID0gLjsKIAlJTklUX1RFWFQKQEAgLTE1OSw0MCArMTU5LDQyIEBACiAJX19pbml0ZGF0YV9lbmQgPSAuOwogICAgfQogCi0gIC4gPSBBTElHTigxNik7Ci0gIF9fc2V0dXBfc3RhcnQgPSAuOwotICAuaW5pdC5zZXR1cCA6IEFUKEFERFIoLmluaXQuc2V0dXApIC0gTE9BRF9PRkZTRVQpIHsgKiguaW5pdC5zZXR1cCkgfQotICBfX3NldHVwX2VuZCA9IC47Ci0gIF9faW5pdGNhbGxfc3RhcnQgPSAuOworICAuaW5pdC5zZXR1cCA6IEFUKEFERFIoLmluaXQuc2V0dXApIC0gTE9BRF9PRkZTRVQpIHsKKwkuID0gQUxJR04oMTYpOworCV9fc2V0dXBfc3RhcnQgPSAuOworCSooLmluaXQuc2V0dXApCisJX19zZXR1cF9lbmQgPSAuOworICB9CiAgIC5pbml0Y2FsbC5pbml0IDogQVQoQUREUiguaW5pdGNhbGwuaW5pdCkgLSBMT0FEX09GRlNFVCkgeworCV9faW5pdGNhbGxfc3RhcnQgPSAuOwogCUlOSVRDQUxMUworCV9faW5pdGNhbGxfZW5kID0gLjsKICAgfQotICBfX2luaXRjYWxsX2VuZCA9IC47Ci0gIF9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKICAgLmNvbl9pbml0Y2FsbC5pbml0IDogQVQoQUREUiguY29uX2luaXRjYWxsLmluaXQpIC0gTE9BRF9PRkZTRVQpIHsKKwlfX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47CiAJKiguY29uX2luaXRjYWxsLmluaXQpCisJX19jb25faW5pdGNhbGxfZW5kID0gLjsKICAgfQotICBfX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOwotICBfX3g4Nl9jcHVfZGV2X3N0YXJ0ID0gLjsKICAgLng4Nl9jcHVfZGV2LmluaXQgOiBBVChBRERSKC54ODZfY3B1X2Rldi5pbml0KSAtIExPQURfT0ZGU0VUKSB7CisJX194ODZfY3B1X2Rldl9zdGFydCA9IC47CiAJKigueDg2X2NwdV9kZXYuaW5pdCkKKwlfX3g4Nl9jcHVfZGV2X2VuZCA9IC47CiAgIH0KLSAgX194ODZfY3B1X2Rldl9lbmQgPSAuOwogICBTRUNVUklUWV9JTklUCiAKICAgLiA9IEFMSUdOKDgpOwogICAucGFyYWluc3RydWN0aW9ucyA6IEFUKEFERFIoLnBhcmFpbnN0cnVjdGlvbnMpIC0gTE9BRF9PRkZTRVQpIHsKLSAgX19wYXJhaW5zdHJ1Y3Rpb25zID0gLjsKKwlfX3BhcmFpbnN0cnVjdGlvbnMgPSAuOwogICAgICAgICooLnBhcmFpbnN0cnVjdGlvbnMpCi0gIF9fcGFyYWluc3RydWN0aW9uc19lbmQgPSAuOworCV9fcGFyYWluc3RydWN0aW9uc19lbmQgPSAuOwogICB9CiAKLSAgLiA9IEFMSUdOKDgpOwotICBfX2FsdF9pbnN0cnVjdGlvbnMgPSAuOwogICAuYWx0aW5zdHJ1Y3Rpb25zIDogQVQoQUREUiguYWx0aW5zdHJ1Y3Rpb25zKSAtIExPQURfT0ZGU0VUKSB7CisJLiA9IEFMSUdOKDgpOworCV9fYWx0X2luc3RydWN0aW9ucyA9IC47CiAJKiguYWx0aW5zdHJ1Y3Rpb25zKQorCV9fYWx0X2luc3RydWN0aW9uc19lbmQgPSAuOwogICB9Ci0gIF9fYWx0X2luc3RydWN0aW9uc19lbmQgPSAuOwogICAuYWx0aW5zdHJfcmVwbGFjZW1lbnQgOiBBVChBRERSKC5hbHRpbnN0cl9yZXBsYWNlbWVudCkgLSBMT0FEX09GRlNFVCkgewogCSooLmFsdGluc3RyX3JlcGxhY2VtZW50KQogICB9CkBAIC0yMDcsOSArMjA5LDExIEBACiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0gIF9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLSAgLmluaXQucmFtZnMgOiBBVChBRERSKC5pbml0LnJhbWZzKSAtIExPQURfT0ZGU0VUKSB7ICooLmluaXQucmFtZnMpIH0KLSAgX19pbml0cmFtZnNfZW5kID0gLjsKKyAgLmluaXQucmFtZnMgOiBBVChBRERSKC5pbml0LnJhbWZzKSAtIExPQURfT0ZGU0VUKSB7CisJX19pbml0cmFtZnNfc3RhcnQgPSAuOworCSooLmluaXQucmFtZnMpCisJX19pbml0cmFtZnNfZW5kID0gLjsKKyAgfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC0yMjksMjAgKzIzMywyOSBAQAogICAuID0gQUxJR04oUEFHRV9TSVpFKTsKICAgX19pbml0X2VuZCA9IC47CiAKLSAgLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0gIF9fbm9zYXZlX2JlZ2luID0gLjsKICAgLmRhdGFfbm9zYXZlIDogQVQoQUREUiguZGF0YV9ub3NhdmUpIC0gTE9BRF9PRkZTRVQpIHsKLSAgICAgICooLmRhdGEubm9zYXZlKQorCS4gPSBBTElHTihQQUdFX1NJWkUpOworCV9fbm9zYXZlX2JlZ2luID0gLjsKKwkqKC5kYXRhLm5vc2F2ZSkKKwkuID0gQUxJR04oUEFHRV9TSVpFKTsKKwlfX25vc2F2ZV9lbmQgPSAuOwogICB9IDpkYXRhLmluaXQyIC8qIHVzZSBhbm90aGVyIHNlY3Rpb24gZGF0YS5pbml0Miwgc2VlIFBFUkNQVV9WQUREUigpIGFib3ZlICovCi0gIC4gPSBBTElHTihQQUdFX1NJWkUpOwotICBfX25vc2F2ZV9lbmQgPSAuOwogCi0gIF9fYnNzX3N0YXJ0ID0gLjsJCS8qIEJTUyAqLwogICAuYnNzIDogQVQoQUREUiguYnNzKSAtIExPQURfT0ZGU0VUKSB7CisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CisJX19ic3Nfc3RhcnQgPSAuOwkJLyogQlNTICovCiAJKiguYnNzLnBhZ2VfYWxpZ25lZCkKIAkqKC5ic3MpCi0JfQotICBfX2Jzc19zdG9wID0gLjsKKwlfX2Jzc19zdG9wID0gLjsKKyAgfQorCisgIC5icmsgOiBBVChBRERSKC5icmspIC0gTE9BRF9PRkZTRVQpIHsKKwkuID0gQUxJR04oUEFHRV9TSVpFKTsKKwlfX2Jya19iYXNlID0gLiA7CisgCS4gKz0gNjQgKiAxMDI0IDsJLyogNjRrIGFsaWdubWVudCBzbG9wIHNwYWNlICovCisJKiguYnJrX3Jlc2VydmF0aW9uKQkvKiBhcmVhcyBicmsgdXNlcnMgaGF2ZSByZXNlcnZlZCAqLworCV9fYnJrX2xpbWl0ID0gLiA7CisgIH0KIAogICBfZW5kID0gLiA7CiAKQEAgLTI1MCw2ICsyNjMsNyBAQAogICAvRElTQ0FSRC8gOiB7CiAJKiguZXhpdGNhbGwuZXhpdCkKIAkqKC5laF9mcmFtZSkKKwkqKC5kaXNjYXJkKQogCX0KIAogICBTVEFCU19ERUJVRwpAQCAtMjc1LDMgKzI4OSwxMCBAQAogQVNTRVJUKChwZXJfY3B1X19pcnFfc3RhY2tfdW5pb24gPT0gMCksCiAgICAgICAgICJpcnFfc3RhY2tfdW5pb24gaXMgbm90IGF0IHN0YXJ0IG9mIHBlci1jcHUgYXJlYSIpOwogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfS0VYRUMKKyNpbmNsdWRlIDxhc20va2V4ZWMuaD4KKworQVNTRVJUKGtleGVjX2NvbnRyb2xfY29kZV9zaXplIDw9IEtFWEVDX0NPTlRST0xfQ09ERV9NQVhfU0laRSwKKyAgICAgICAia2V4ZWMgY29udHJvbCBjb2RlIHNpemUgaXMgdG9vIGJpZyIpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92c21wXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvdnNtcF82NC5jCmluZGV4IDc0ZGU1NjIuLmExZDgwNGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92c21wXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZzbXBfNjQuYwpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCi0jaWZkZWYgQ09ORklHX1BBUkFWSVJUCisjaWYgZGVmaW5lZCBDT05GSUdfUENJICYmIGRlZmluZWQgQ09ORklHX1BBUkFWSVJUCiAvKgogICogSW50ZXJydXB0IGNvbnRyb2wgb24gdlNNUG93ZXJlZCBzeXN0ZW1zOgogICogfkFDIGlzIGEgc2hhZG93IG9mIElGLiAgSWYgSUYgaXMgJ29uJyBBQyBzaG91bGQgYmUgJ29mZicKQEAgLTExNCw2ICsxMTQsNyBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgaW50IGlzX3ZzbXAgPSAtMTsKIAogc3RhdGljIHZvaWQgX19pbml0IGRldGVjdF92c21wX2JveCh2b2lkKQpAQCAtMTM5LDYgKzE0MCwxNSBAQAogCX0KIH0KIAorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBkZXRlY3RfdnNtcF9ib3godm9pZCkKK3sKK30KK2ludCBpc192c21wX2JveCh2b2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmCiB2b2lkIF9faW5pdCB2c21wX2luaXQodm9pZCkKIHsKIAlkZXRlY3RfdnNtcF9ib3goKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xndWVzdC9ib290LmMgYi9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCmluZGV4IDlmZTRkZGEuLmU5NGExMWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xndWVzdC9ib290LmMKKysrIGIvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWlmIChsZ3Vlc3RfZGF0YS5oY2FsbF9zdGF0dXNbbmV4dF9jYWxsXSAhPSAweEZGKSB7CiAJCS8qIFRhYmxlIGZ1bGwsIHNvIGRvIG5vcm1hbCBoY2FsbCB3aGljaCB3aWxsIGZsdXNoIHRhYmxlLiAqLwotCQloY2FsbChjYWxsLCBhcmcxLCBhcmcyLCBhcmczKTsKKwkJa3ZtX2h5cGVyY2FsbDMoY2FsbCwgYXJnMSwgYXJnMiwgYXJnMyk7CiAJfSBlbHNlIHsKIAkJbGd1ZXN0X2RhdGEuaGNhbGxzW25leHRfY2FsbF0uYXJnMCA9IGNhbGw7CiAJCWxndWVzdF9kYXRhLmhjYWxsc1tuZXh0X2NhbGxdLmFyZzEgPSBhcmcxOwpAQCAtMTM0LDEzICsxMzQsMzIgQEAKICAqCiAgKiBTbywgd2hlbiB3ZSdyZSBpbiBsYXp5IG1vZGUsIHdlIGNhbGwgYXN5bmNfaGNhbGwoKSB0byBzdG9yZSB0aGUgY2FsbCBmb3IKICAqIGZ1dHVyZSBwcm9jZXNzaW5nOiAqLwotc3RhdGljIHZvaWQgbGF6eV9oY2FsbCh1bnNpZ25lZCBsb25nIGNhbGwsCitzdGF0aWMgdm9pZCBsYXp5X2hjYWxsMSh1bnNpZ25lZCBsb25nIGNhbGwsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZzEpCit7CisJaWYgKHBhcmF2aXJ0X2dldF9sYXp5X21vZGUoKSA9PSBQQVJBVklSVF9MQVpZX05PTkUpCisJCWt2bV9oeXBlcmNhbGwxKGNhbGwsIGFyZzEpOworCWVsc2UKKwkJYXN5bmNfaGNhbGwoY2FsbCwgYXJnMSwgMCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGxhenlfaGNhbGwyKHVuc2lnbmVkIGxvbmcgY2FsbCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnMSwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnMikKK3sKKwlpZiAocGFyYXZpcnRfZ2V0X2xhenlfbW9kZSgpID09IFBBUkFWSVJUX0xBWllfTk9ORSkKKwkJa3ZtX2h5cGVyY2FsbDIoY2FsbCwgYXJnMSwgYXJnMik7CisJZWxzZQorCQlhc3luY19oY2FsbChjYWxsLCBhcmcxLCBhcmcyLCAwKTsKK30KKworc3RhdGljIHZvaWQgbGF6eV9oY2FsbDModW5zaWduZWQgbG9uZyBjYWxsLAogCQkgICAgICAgdW5zaWduZWQgbG9uZyBhcmcxLAogCQkgICAgICAgdW5zaWduZWQgbG9uZyBhcmcyLAogCQkgICAgICAgdW5zaWduZWQgbG9uZyBhcmczKQogewogCWlmIChwYXJhdmlydF9nZXRfbGF6eV9tb2RlKCkgPT0gUEFSQVZJUlRfTEFaWV9OT05FKQotCQloY2FsbChjYWxsLCBhcmcxLCBhcmcyLCBhcmczKTsKKwkJa3ZtX2h5cGVyY2FsbDMoY2FsbCwgYXJnMSwgYXJnMiwgYXJnMyk7CiAJZWxzZQogCQlhc3luY19oY2FsbChjYWxsLCBhcmcxLCBhcmcyLCBhcmczKTsKIH0KQEAgLTE1MCw3ICsxNjksNyBAQAogc3RhdGljIHZvaWQgbGd1ZXN0X2xlYXZlX2xhenlfbW9kZSh2b2lkKQogewogCXBhcmF2aXJ0X2xlYXZlX2xhenkocGFyYXZpcnRfZ2V0X2xhenlfbW9kZSgpKTsKLQloY2FsbChMSENBTExfRkxVU0hfQVNZTkMsIDAsIDAsIDApOworCWt2bV9oeXBlcmNhbGwwKExIQ0FMTF9GTFVTSF9BU1lOQyk7CiB9CiAKIC8qRzowMzMKQEAgLTIyOSw3ICsyNDgsNyBAQAogCS8qIEtlZXAgdGhlIGxvY2FsIGNvcHkgdXAgdG8gZGF0ZS4gKi8KIAluYXRpdmVfd3JpdGVfaWR0X2VudHJ5KGR0LCBlbnRyeW51bSwgZyk7CiAJLyogVGVsbCBIb3N0IGFib3V0IHRoaXMgbmV3IGVudHJ5LiAqLwotCWhjYWxsKExIQ0FMTF9MT0FEX0lEVF9FTlRSWSwgZW50cnludW0sIGRlc2NbMF0sIGRlc2NbMV0pOworCWt2bV9oeXBlcmNhbGwzKExIQ0FMTF9MT0FEX0lEVF9FTlRSWSwgZW50cnludW0sIGRlc2NbMF0sIGRlc2NbMV0pOwogfQogCiAvKiBDaGFuZ2luZyB0byBhIGRpZmZlcmVudCBJRFQgaXMgdmVyeSByYXJlOiB3ZSBrZWVwIHRoZSBJRFQgdXAtdG8tZGF0ZSBldmVyeQpAQCAtMjQxLDcgKzI2MCw3IEBACiAJc3RydWN0IGRlc2Nfc3RydWN0ICppZHQgPSAodm9pZCAqKWRlc2MtPmFkZHJlc3M7CiAKIAlmb3IgKGkgPSAwOyBpIDwgKGRlc2MtPnNpemUrMSkvODsgaSsrKQotCQloY2FsbChMSENBTExfTE9BRF9JRFRfRU5UUlksIGksIGlkdFtpXS5hLCBpZHRbaV0uYik7CisJCWt2bV9oeXBlcmNhbGwzKExIQ0FMTF9MT0FEX0lEVF9FTlRSWSwgaSwgaWR0W2ldLmEsIGlkdFtpXS5iKTsKIH0KIAogLyoKQEAgLTI2MSw4ICsyODAsOCBAQAogICovCiBzdGF0aWMgdm9pZCBsZ3Vlc3RfbG9hZF9nZHQoY29uc3Qgc3RydWN0IGRlc2NfcHRyICpkZXNjKQogewotCUJVR19PTigoZGVzYy0+c2l6ZSsxKS84ICE9IEdEVF9FTlRSSUVTKTsKLQloY2FsbChMSENBTExfTE9BRF9HRFQsIF9fcGEoZGVzYy0+YWRkcmVzcyksIEdEVF9FTlRSSUVTLCAwKTsKKwlCVUdfT04oKGRlc2MtPnNpemUgKyAxKSAvIDggIT0gR0RUX0VOVFJJRVMpOworCWt2bV9oeXBlcmNhbGwyKExIQ0FMTF9MT0FEX0dEVCwgX19wYShkZXNjLT5hZGRyZXNzKSwgR0RUX0VOVFJJRVMpOwogfQogCiAvKiBGb3IgYSBzaW5nbGUgR0RUIGVudHJ5IHdoaWNoIGNoYW5nZXMsIHdlIGRvIHRoZSBsYXp5IHRoaW5nOiBhbHRlciBvdXIgR0RULApAQCAtMjcyLDcgKzI5MSw3IEBACiAJCQkJICAgY29uc3Qgdm9pZCAqZGVzYywgaW50IHR5cGUpCiB7CiAJbmF0aXZlX3dyaXRlX2dkdF9lbnRyeShkdCwgZW50cnludW0sIGRlc2MsIHR5cGUpOwotCWhjYWxsKExIQ0FMTF9MT0FEX0dEVCwgX19wYShkdCksIEdEVF9FTlRSSUVTLCAwKTsKKwlrdm1faHlwZXJjYWxsMihMSENBTExfTE9BRF9HRFQsIF9fcGEoZHQpLCBHRFRfRU5UUklFUyk7CiB9CiAKIC8qIE9LLCBJIGxpZWQuICBUaGVyZSBhcmUgdGhyZWUgInRocmVhZCBsb2NhbCBzdG9yYWdlIiBHRFQgZW50cmllcyB3aGljaCBjaGFuZ2UKQEAgLTI4NCw3ICszMDMsNyBAQAogCSAqIGNhbid0IGhhbmRsZSB1cyByZW1vdmluZyBlbnRyaWVzIHdlJ3JlIGN1cnJlbnRseSB1c2luZy4gIFNvIHdlIGNsZWFyCiAJICogdGhlIEdTIHJlZ2lzdGVyIGhlcmU6IGlmIGl0J3MgbmVlZGVkIGl0J2xsIGJlIHJlbG9hZGVkIGFueXdheS4gKi8KIAlsYXp5X2xvYWRfZ3MoMCk7Ci0JbGF6eV9oY2FsbChMSENBTExfTE9BRF9UTFMsIF9fcGEoJnQtPnRsc19hcnJheSksIGNwdSwgMCk7CisJbGF6eV9oY2FsbDIoTEhDQUxMX0xPQURfVExTLCBfX3BhKCZ0LT50bHNfYXJyYXkpLCBjcHUpOwogfQogCiAvKkc6MDM4IFRoYXQncyBlbm91Z2ggZXhjaXRlbWVudCBmb3Igbm93LCBiYWNrIHRvIHBsb3VnaGluZyB0aHJvdWdoIGVhY2ggb2YKQEAgLTM4Miw3ICs0MDEsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgY3VycmVudF9jcjA7CiBzdGF0aWMgdm9pZCBsZ3Vlc3Rfd3JpdGVfY3IwKHVuc2lnbmVkIGxvbmcgdmFsKQogewotCWxhenlfaGNhbGwoTEhDQUxMX1RTLCB2YWwgJiBYODZfQ1IwX1RTLCAwLCAwKTsKKwlsYXp5X2hjYWxsMShMSENBTExfVFMsIHZhbCAmIFg4Nl9DUjBfVFMpOwogCWN1cnJlbnRfY3IwID0gdmFsOwogfQogCkBAIC0zOTYsNyArNDE1LDcgQEAKICAqIHRoZSB2b3dlbHMgaGF2ZSBiZWVuIG9wdGltaXplZCBvdXQuICovCiBzdGF0aWMgdm9pZCBsZ3Vlc3RfY2x0cyh2b2lkKQogewotCWxhenlfaGNhbGwoTEhDQUxMX1RTLCAwLCAwLCAwKTsKKwlsYXp5X2hjYWxsMShMSENBTExfVFMsIDApOwogCWN1cnJlbnRfY3IwICY9IH5YODZfQ1IwX1RTOwogfQogCkBAIC00MTgsNyArNDM3LDcgQEAKIHN0YXRpYyB2b2lkIGxndWVzdF93cml0ZV9jcjModW5zaWduZWQgbG9uZyBjcjMpCiB7CiAJbGd1ZXN0X2RhdGEucGdkaXIgPSBjcjM7Ci0JbGF6eV9oY2FsbChMSENBTExfTkVXX1BHVEFCTEUsIGNyMywgMCwgMCk7CisJbGF6eV9oY2FsbDEoTEhDQUxMX05FV19QR1RBQkxFLCBjcjMpOwogCWNyM19jaGFuZ2VkID0gdHJ1ZTsKIH0KIApAQCAtNDkwLDExICs1MDksMTcgQEAKICAqIGludG8gYSBwcm9jZXNzJyBhZGRyZXNzIHNwYWNlLiAgV2Ugc2V0IHRoZSBlbnRyeSB0aGVuIHRlbGwgdGhlIEhvc3QgdGhlCiAgKiB0b3BsZXZlbCBhbmQgYWRkcmVzcyB0aGlzIGNvcnJlc3BvbmRzIHRvLiAgVGhlIEd1ZXN0IHVzZXMgb25lIHBhZ2V0YWJsZSBwZXIKICAqIHByb2Nlc3MsIHNvIHdlIG5lZWQgdG8gdGVsbCB0aGUgSG9zdCB3aGljaCBvbmUgd2UncmUgY2hhbmdpbmcgKG1tLT5wZ2QpLiAqLworc3RhdGljIHZvaWQgbGd1ZXN0X3B0ZV91cGRhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgICBwdGVfdCAqcHRlcCkKK3sKKwlsYXp5X2hjYWxsMyhMSENBTExfU0VUX1BURSwgX19wYShtbS0+cGdkKSwgYWRkciwgcHRlcC0+cHRlX2xvdyk7Cit9CisKIHN0YXRpYyB2b2lkIGxndWVzdF9zZXRfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRldmFsKQogewogCSpwdGVwID0gcHRldmFsOwotCWxhenlfaGNhbGwoTEhDQUxMX1NFVF9QVEUsIF9fcGEobW0tPnBnZCksIGFkZHIsIHB0ZXZhbC5wdGVfbG93KTsKKwlsZ3Vlc3RfcHRlX3VwZGF0ZShtbSwgYWRkciwgcHRlcCk7CiB9CiAKIC8qIFRoZSBHdWVzdCBjYWxscyB0aGlzIHRvIHNldCBhIHRvcC1sZXZlbCBlbnRyeS4gIEFnYWluLCB3ZSBzZXQgdGhlIGVudHJ5IHRoZW4KQEAgLTUwMyw4ICs1MjgsOCBAQAogc3RhdGljIHZvaWQgbGd1ZXN0X3NldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZHZhbCkKIHsKIAkqcG1kcCA9IHBtZHZhbDsKLQlsYXp5X2hjYWxsKExIQ0FMTF9TRVRfUE1ELCBfX3BhKHBtZHApJlBBR0VfTUFTSywKLQkJICAgKF9fcGEocG1kcCkmKFBBR0VfU0laRS0xKSkvNCwgMCk7CisJbGF6eV9oY2FsbDIoTEhDQUxMX1NFVF9QTUQsIF9fcGEocG1kcCkgJiBQQUdFX01BU0ssCisJCSAgIChfX3BhKHBtZHApICYgKFBBR0VfU0laRSAtIDEpKSAvIDQpOwogfQogCiAvKiBUaGVyZSBhcmUgYSBjb3VwbGUgb2YgbGVnYWN5IHBsYWNlcyB3aGVyZSB0aGUga2VybmVsIHNldHMgYSBQVEUsIGJ1dCB3ZQpAQCAtNTIwLDcgKzU0NSw3IEBACiB7CiAJKnB0ZXAgPSBwdGV2YWw7CiAJaWYgKGNyM19jaGFuZ2VkKQotCQlsYXp5X2hjYWxsKExIQ0FMTF9GTFVTSF9UTEIsIDEsIDAsIDApOworCQlsYXp5X2hjYWxsMShMSENBTExfRkxVU0hfVExCLCAxKTsKIH0KIAogLyogVW5mb3J0dW5hdGVseSBmb3IgTGd1ZXN0LCB0aGUgcHZfbW11X29wcyBmb3IgcGFnZSB0YWJsZXMgd2VyZSBiYXNlZCBvbgpAQCAtNTM2LDcgKzU2MSw3IEBACiBzdGF0aWMgdm9pZCBsZ3Vlc3RfZmx1c2hfdGxiX3NpbmdsZSh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJLyogU2ltcGx5IHNldCBpdCB0byB6ZXJvOiBpZiBpdCB3YXMgbm90LCBpdCB3aWxsIGZhdWx0IGJhY2sgaW4uICovCi0JbGF6eV9oY2FsbChMSENBTExfU0VUX1BURSwgbGd1ZXN0X2RhdGEucGdkaXIsIGFkZHIsIDApOworCWxhenlfaGNhbGwzKExIQ0FMTF9TRVRfUFRFLCBsZ3Vlc3RfZGF0YS5wZ2RpciwgYWRkciwgMCk7CiB9CiAKIC8qIFRoaXMgaXMgd2hhdCBoYXBwZW5zIGFmdGVyIHRoZSBHdWVzdCBoYXMgcmVtb3ZlZCBhIGxhcmdlIG51bWJlciBvZiBlbnRyaWVzLgpAQCAtNTQ0LDcgKzU2OSw3IEBACiAgKiBoYXZlIGNoYW5nZWQsIGllLiB2aXJ0dWFsIGFkZHJlc3NlcyBiZWxvdyBQQUdFX09GRlNFVC4gKi8KIHN0YXRpYyB2b2lkIGxndWVzdF9mbHVzaF90bGJfdXNlcih2b2lkKQogewotCWxhenlfaGNhbGwoTEhDQUxMX0ZMVVNIX1RMQiwgMCwgMCwgMCk7CisJbGF6eV9oY2FsbDEoTEhDQUxMX0ZMVVNIX1RMQiwgMCk7CiB9CiAKIC8qIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGtlcm5lbCBwYWdlIHRhYmxlcyBoYXZlIGNoYW5nZWQuICBUaGF0J3Mgbm90IHZlcnkKQEAgLTU1Miw3ICs1NzcsNyBAQAogICogc2xvdyksIHNvIGl0J3Mgd29ydGggc2VwYXJhdGluZyB0aGlzIGZyb20gdGhlIHVzZXIgZmx1c2hpbmcgYWJvdmUuICovCiBzdGF0aWMgdm9pZCBsZ3Vlc3RfZmx1c2hfdGxiX2tlcm5lbCh2b2lkKQogewotCWxhenlfaGNhbGwoTEhDQUxMX0ZMVVNIX1RMQiwgMSwgMCwgMCk7CisJbGF6eV9oY2FsbDEoTEhDQUxMX0ZMVVNIX1RMQiwgMSk7CiB9CiAKIC8qCkBAIC02ODksNyArNzE0LDcgQEAKIAl9CiAKIAkvKiBQbGVhc2Ugd2FrZSB1cyB0aGlzIGZhciBpbiB0aGUgZnV0dXJlLiAqLwotCWhjYWxsKExIQ0FMTF9TRVRfQ0xPQ0tFVkVOVCwgZGVsdGEsIDAsIDApOworCWt2bV9oeXBlcmNhbGwxKExIQ0FMTF9TRVRfQ0xPQ0tFVkVOVCwgZGVsdGEpOwogCXJldHVybiAwOwogfQogCkBAIC03MDAsNyArNzI1LDcgQEAKIAljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKIAljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgogCQkvKiBBIDAgYXJndW1lbnQgc2h1dHMgdGhlIGNsb2NrIGRvd24uICovCi0JCWhjYWxsKExIQ0FMTF9TRVRfQ0xPQ0tFVkVOVCwgMCwgMCwgMCk7CisJCWt2bV9oeXBlcmNhbGwwKExIQ0FMTF9TRVRfQ0xPQ0tFVkVOVCk7CiAJCWJyZWFrOwogCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKIAkJLyogVGhpcyBpcyB3aGF0IHdlIGV4cGVjdC4gKi8KQEAgLTc3NSw4ICs4MDAsOCBAQAogc3RhdGljIHZvaWQgbGd1ZXN0X2xvYWRfc3AwKHN0cnVjdCB0c3Nfc3RydWN0ICp0c3MsCiAJCQkgICAgc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRocmVhZCkKIHsKLQlsYXp5X2hjYWxsKExIQ0FMTF9TRVRfU1RBQ0ssIF9fS0VSTkVMX0RTfDB4MSwgdGhyZWFkLT5zcDAsCi0JCSAgIFRIUkVBRF9TSVpFL1BBR0VfU0laRSk7CisJbGF6eV9oY2FsbDMoTEhDQUxMX1NFVF9TVEFDSywgX19LRVJORUxfRFMgfCAweDEsIHRocmVhZC0+c3AwLAorCQkgICBUSFJFQURfU0laRSAvIFBBR0VfU0laRSk7CiB9CiAKIC8qIExldCdzIGp1c3Qgc2F5LCBJIHdvdWxkbid0IGRvIGRlYnVnZ2luZyB1bmRlciBhIEd1ZXN0LiAqLwpAQCAtODQ5LDcgKzg3NCw3IEBACiAvKiBTVE9QISAgVW50aWwgYW4gaW50ZXJydXB0IGNvbWVzIGluLiAqLwogc3RhdGljIHZvaWQgbGd1ZXN0X3NhZmVfaGFsdCh2b2lkKQogewotCWhjYWxsKExIQ0FMTF9IQUxULCAwLCAwLCAwKTsKKwlrdm1faHlwZXJjYWxsMChMSENBTExfSEFMVCk7CiB9CiAKIC8qIFRoZSBTSFVURE9XTiBoeXBlcmNhbGwgdGFrZXMgYSBzdHJpbmcgdG8gZGVzY3JpYmUgd2hhdCdzIGhhcHBlbmluZywgYW5kCkBAIC04NTksNyArODg0LDggQEAKICAqIHJhdGhlciB0aGFuIHZpcnR1YWwgYWRkcmVzc2VzLCBzbyB3ZSB1c2UgX19wYSgpIGhlcmUuICovCiBzdGF0aWMgdm9pZCBsZ3Vlc3RfcG93ZXJfb2ZmKHZvaWQpCiB7Ci0JaGNhbGwoTEhDQUxMX1NIVVRET1dOLCBfX3BhKCJQb3dlciBkb3duIiksIExHVUVTVF9TSFVURE9XTl9QT1dFUk9GRiwgMCk7CisJa3ZtX2h5cGVyY2FsbDIoTEhDQUxMX1NIVVRET1dOLCBfX3BhKCJQb3dlciBkb3duIiksCisJCQkJCUxHVUVTVF9TSFVURE9XTl9QT1dFUk9GRik7CiB9CiAKIC8qCkBAIC04NjksNyArODk1LDcgQEAKICAqLwogc3RhdGljIGludCBsZ3Vlc3RfcGFuaWMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBsLCB2b2lkICpwKQogewotCWhjYWxsKExIQ0FMTF9TSFVURE9XTiwgX19wYShwKSwgTEdVRVNUX1NIVVRET1dOX1BPV0VST0ZGLCAwKTsKKwlrdm1faHlwZXJjYWxsMihMSENBTExfU0hVVERPV04sIF9fcGEocCksIExHVUVTVF9TSFVURE9XTl9QT1dFUk9GRik7CiAJLyogVGhlIGhjYWxsIHdvbid0IHJldHVybiwgYnV0IHRvIGtlZXAgZ2NjIGhhcHB5LCB3ZSdyZSAiZG9uZSIuICovCiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQpAQCAtOTEwLDcgKzkzNiw3IEBACiAJCWxlbiA9IHNpemVvZihzY3JhdGNoKSAtIDE7CiAJc2NyYXRjaFtsZW5dID0gJ1wwJzsKIAltZW1jcHkoc2NyYXRjaCwgYnVmLCBsZW4pOwotCWhjYWxsKExIQ0FMTF9OT1RJRlksIF9fcGEoc2NyYXRjaCksIDAsIDApOworCWt2bV9oeXBlcmNhbGwxKExIQ0FMTF9OT1RJRlksIF9fcGEoc2NyYXRjaCkpOwogCiAJLyogVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSB3cml0dGVuLiAqLwogCXJldHVybiBsZW47CkBAIC05MjAsNyArOTQ2LDcgQEAKICAqIExhdW5jaGVyIHRvIHJlYm9vdCB1cy4gKi8KIHN0YXRpYyB2b2lkIGxndWVzdF9yZXN0YXJ0KGNoYXIgKnJlYXNvbikKIHsKLQloY2FsbChMSENBTExfU0hVVERPV04sIF9fcGEocmVhc29uKSwgTEdVRVNUX1NIVVRET1dOX1JFU1RBUlQsIDApOworCWt2bV9oeXBlcmNhbGwyKExIQ0FMTF9TSFVURE9XTiwgX19wYShyZWFzb24pLCBMR1VFU1RfU0hVVERPV05fUkVTVEFSVCk7CiB9CiAKIC8qRzowNTAKQEAgLTEwNDAsNiArMTA2Niw4IEBACiAJcHZfbW11X29wcy5yZWFkX2NyMyA9IGxndWVzdF9yZWFkX2NyMzsKIAlwdl9tbXVfb3BzLmxhenlfbW9kZS5lbnRlciA9IHBhcmF2aXJ0X2VudGVyX2xhenlfbW11OwogCXB2X21tdV9vcHMubGF6eV9tb2RlLmxlYXZlID0gbGd1ZXN0X2xlYXZlX2xhenlfbW9kZTsKKwlwdl9tbXVfb3BzLnB0ZV91cGRhdGUgPSBsZ3Vlc3RfcHRlX3VwZGF0ZTsKKwlwdl9tbXVfb3BzLnB0ZV91cGRhdGVfZGVmZXIgPSBsZ3Vlc3RfcHRlX3VwZGF0ZTsKIAogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogCS8qIGFwaWMgcmVhZC93cml0ZSBpbnRlcmNlcHRzICovCkBAIC0xMDU4LDE0ICsxMDg2LDYgQEAKIAkgKiBsZ3Vlc3RfaW5pdCgpIHdoZXJlIHRoZSByZXN0IG9mIHRoZSBmYWlybHkgY2hhb3RpYyBib290IHNldHVwCiAJICogb2NjdXJzLiAqLwogCi0JLyogVGhlIG5hdGl2ZSBib290IGNvZGUgc2V0cyB1cCBpbml0aWFsIHBhZ2UgdGFibGVzIGltbWVkaWF0ZWx5IGFmdGVyCi0JICogdGhlIGtlcm5lbCBpdHNlbGYsIGFuZCBzZXRzIGluaXRfcGdfdGFibGVzX2VuZCBzbyB0aGV5J3JlIG5vdAotCSAqIGNsb2JiZXJlZC4gIFRoZSBMYXVuY2hlciBwbGFjZXMgb3VyIGluaXRpYWwgcGFnZXRhYmxlcyBzb21ld2hlcmUgYXQKLQkgKiB0aGUgdG9wIG9mIG91ciBwaHlzaWNhbCBtZW1vcnksIHNvIHdlIGRvbid0IG5lZWQgZXh0cmEgc3BhY2U6IHNldAotCSAqIGluaXRfcGdfdGFibGVzX2VuZCB0byB0aGUgZW5kIG9mIHRoZSBrZXJuZWwuICovCi0JaW5pdF9wZ190YWJsZXNfc3RhcnQgPSBfX3BhKHBnMCk7Ci0JaW5pdF9wZ190YWJsZXNfZW5kID0gX19wYShwZzApOwotCiAJLyogQXMgZGVzY3JpYmVkIGluIGhlYWRfMzIuUywgd2UgbWFwIHRoZSBmaXJzdCAxMjhNIG9mIG1lbW9yeS4gKi8KIAltYXhfcGZuX21hcHBlZCA9ICgxMjgqMTAyNCoxMDI0KSA+PiBQQUdFX1NISUZUOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9sZ3Vlc3QvaTM4Nl9oZWFkLlMgYi9hcmNoL3g4Ni9sZ3Vlc3QvaTM4Nl9oZWFkLlMKaW5kZXggMTBiOWJkMy4uZjc5NTQxOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGd1ZXN0L2kzODZfaGVhZC5TCisrKyBiL2FyY2gveDg2L2xndWVzdC9pMzg2X2hlYWQuUwpAQCAtMjcsOCArMjcsOCBAQAogCS8qIFdlIG1ha2UgdGhlICJpbml0aWFsaXphdGlvbiIgaHlwZXJjYWxsIG5vdyB0byB0ZWxsIHRoZSBIb3N0IGFib3V0CiAJICogdXMsIGFuZCBhbHNvIGZpbmQgb3V0IHdoZXJlIGl0IHB1dCBvdXIgcGFnZSB0YWJsZXMuICovCiAJbW92bCAkTEhDQUxMX0xHVUVTVF9JTklULCAlZWF4Ci0JbW92bCAkbGd1ZXN0X2RhdGEgLSBfX1BBR0VfT0ZGU0VULCAlZWR4Ci0JaW50ICRMR1VFU1RfVFJBUF9FTlRSWQorCW1vdmwgJGxndWVzdF9kYXRhIC0gX19QQUdFX09GRlNFVCwgJWVieAorCS5ieXRlIDB4MGYsMHgwMSwweGMxIC8qIEtWTV9IWVBFUkNBTEwgKi8KIAogCS8qIFNldCB1cCB0aGUgaW5pdGlhbCBzdGFjayBzbyB3ZSBjYW4gcnVuIEMgY29kZS4gKi8KIAltb3ZsICQoaW5pdF90aHJlYWRfdW5pb24rVEhSRUFEX1NJWkUpLCVlc3AKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUyBiL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUwppbmRleCBjMjI5ODFmLi5hZDU0NDFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMKKysrIGIvYXJjaC94ODYvbGliL21lbWNweV82NC5TCkBAIC0xLDMwICsxLDM4IEBACiAvKiBDb3B5cmlnaHQgMjAwMiBBbmRpIEtsZWVuICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL2R3YXJmMi5oPgorCiAjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KKyNpbmNsdWRlIDxhc20vZHdhcmYyLmg+CiAKIC8qCiAgKiBtZW1jcHkgLSBDb3B5IGEgbWVtb3J5IGJsb2NrLgogICoKLSAqIElucHV0OgkKLSAqIHJkaSBkZXN0aW5hdGlvbgotICogcnNpIHNvdXJjZQotICogcmR4IGNvdW50Ci0gKiAKKyAqIElucHV0OgorICogIHJkaSBkZXN0aW5hdGlvbgorICogIHJzaSBzb3VyY2UKKyAqICByZHggY291bnQKKyAqCiAgKiBPdXRwdXQ6CiAgKiByYXggb3JpZ2luYWwgZGVzdGluYXRpb24KLSAqLwkKKyAqLwogCisvKgorICogbWVtY3B5X2MoKSAtIGZhc3Qgc3RyaW5nIG9wcyAoUkVQIE1PVlNRKSBiYXNlZCB2YXJpYW50LgorICoKKyAqIENhbGxzIHRvIHRoaXMgZ2V0IHBhdGNoZWQgaW50byB0aGUga2VybmVsIGltYWdlIHZpYSB0aGUKKyAqIGFsdGVybmF0aXZlIGluc3RydWN0aW9ucyBmcmFtZXdvcms6CisgKi8KIAlBTElHTgogbWVtY3B5X2M6CiAJQ0ZJX1NUQVJUUFJPQwotCW1vdnEgJXJkaSwlcmF4Ci0JbW92bCAlZWR4LCVlY3gKLQlzaHJsICQzLCVlY3gKLQlhbmRsICQ3LCVlZHgKKwltb3ZxICVyZGksICVyYXgKKworCW1vdmwgJWVkeCwgJWVjeAorCXNocmwgJDMsICVlY3gKKwlhbmRsICQ3LCAlZWR4CiAJcmVwIG1vdnNxCi0JbW92bCAlZWR4LCVlY3gKKwltb3ZsICVlZHgsICVlY3gKIAlyZXAgbW92c2IKIAlyZXQKIAlDRklfRU5EUFJPQwpAQCAtMzMsOTkgKzQxLDExMCBAQAogRU5UUlkoX19tZW1jcHkpCiBFTlRSWShtZW1jcHkpCiAJQ0ZJX1NUQVJUUFJPQwotCXB1c2hxICVyYngKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgOAotCUNGSV9SRUxfT0ZGU0VUIHJieCwgMAotCW1vdnEgJXJkaSwlcmF4CiAKLQltb3ZsICVlZHgsJWVjeAotCXNocmwgJDYsJWVjeAorCS8qCisJICogUHV0IHRoZSBudW1iZXIgb2YgZnVsbCA2NC1ieXRlIGJsb2NrcyBpbnRvICVlY3guCisJICogVGFpbCBwb3J0aW9uIGlzIGhhbmRsZWQgYXQgdGhlIGVuZDoKKwkgKi8KKwltb3ZxICVyZGksICVyYXgKKwltb3ZsICVlZHgsICVlY3gKKwlzaHJsICAgJDYsICVlY3gKIAlqeiAuTGhhbmRsZV90YWlsCiAKIAkucDJhbGlnbiA0CiAuTGxvb3BfNjQ6CisJLyoKKwkgKiBXZSBkZWNyZW1lbnQgdGhlIGxvb3AgaW5kZXggaGVyZSAtIGFuZCB0aGUgemVyby1mbGFnIGlzCisJICogY2hlY2tlZCBhdCB0aGUgZW5kIG9mIHRoZSBsb29wIChpbnN0cnVjdGlvbnMgaW5iZXR3ZWVuIGRvCisJICogbm90IGNoYW5nZSB0aGUgemVybyBmbGFnKToKKwkgKi8KIAlkZWNsICVlY3gKIAotCW1vdnEgKCVyc2kpLCVyMTEKLQltb3ZxIDgoJXJzaSksJXI4CisJLyoKKwkgKiBNb3ZlIGluIGJsb2NrcyBvZiA0eDE2IGJ5dGVzOgorCSAqLworCW1vdnEgMCo4KCVyc2kpLAkJJXIxMQorCW1vdnEgMSo4KCVyc2kpLAkJJXI4CisJbW92cSAlcjExLAkJMCo4KCVyZGkpCisJbW92cSAlcjgsCQkxKjgoJXJkaSkKIAotCW1vdnEgJXIxMSwoJXJkaSkKLQltb3ZxICVyOCwxKjgoJXJkaSkKKwltb3ZxIDIqOCglcnNpKSwJCSVyOQorCW1vdnEgMyo4KCVyc2kpLAkJJXIxMAorCW1vdnEgJXI5LAkJMio4KCVyZGkpCisJbW92cSAlcjEwLAkJMyo4KCVyZGkpCiAKLQltb3ZxIDIqOCglcnNpKSwlcjkKLQltb3ZxIDMqOCglcnNpKSwlcjEwCisJbW92cSA0KjgoJXJzaSksCQklcjExCisJbW92cSA1KjgoJXJzaSksCQklcjgKKwltb3ZxICVyMTEsCQk0KjgoJXJkaSkKKwltb3ZxICVyOCwJCTUqOCglcmRpKQogCi0JbW92cSAlcjksMio4KCVyZGkpCi0JbW92cSAlcjEwLDMqOCglcmRpKQorCW1vdnEgNio4KCVyc2kpLAkJJXI5CisJbW92cSA3KjgoJXJzaSksCQklcjEwCisJbW92cSAlcjksCQk2KjgoJXJkaSkKKwltb3ZxICVyMTAsCQk3KjgoJXJkaSkKIAotCW1vdnEgNCo4KCVyc2kpLCVyMTEKLQltb3ZxIDUqOCglcnNpKSwlcjgKKwlsZWFxIDY0KCVyc2kpLCAlcnNpCisJbGVhcSA2NCglcmRpKSwgJXJkaQogCi0JbW92cSAlcjExLDQqOCglcmRpKQotCW1vdnEgJXI4LDUqOCglcmRpKQotCi0JbW92cSA2KjgoJXJzaSksJXI5Ci0JbW92cSA3KjgoJXJzaSksJXIxMAotCi0JbW92cSAlcjksNio4KCVyZGkpCi0JbW92cSAlcjEwLDcqOCglcmRpKQotCi0JbGVhcSA2NCglcnNpKSwlcnNpCi0JbGVhcSA2NCglcmRpKSwlcmRpCiAJam56ICAuTGxvb3BfNjQKIAogLkxoYW5kbGVfdGFpbDoKLQltb3ZsICVlZHgsJWVjeAotCWFuZGwgJDYzLCVlY3gKLQlzaHJsICQzLCVlY3gKKwltb3ZsICVlZHgsICVlY3gKKwlhbmRsICAkNjMsICVlY3gKKwlzaHJsICAgJDMsICVlY3gKIAlqeiAgIC5MaGFuZGxlXzcKKwogCS5wMmFsaWduIDQKIC5MbG9vcF84OgogCWRlY2wgJWVjeAotCW1vdnEgKCVyc2kpLCVyOAotCW1vdnEgJXI4LCglcmRpKQotCWxlYXEgOCglcmRpKSwlcmRpCi0JbGVhcSA4KCVyc2kpLCVyc2kKKwltb3ZxICglcnNpKSwJCSVyOAorCW1vdnEgJXI4LAkJKCVyZGkpCisJbGVhcSA4KCVyZGkpLAkJJXJkaQorCWxlYXEgOCglcnNpKSwJCSVyc2kKIAlqbnogIC5MbG9vcF84CiAKIC5MaGFuZGxlXzc6Ci0JbW92bCAlZWR4LCVlY3gKLQlhbmRsICQ3LCVlY3gKLQlqeiAuTGVuZGUKKwltb3ZsICVlZHgsICVlY3gKKwlhbmRsICQ3LCAlZWN4CisJanogLkxlbmQKKwogCS5wMmFsaWduIDQKIC5MbG9vcF8xOgotCW1vdmIgKCVyc2kpLCVyOGIKLQltb3ZiICVyOGIsKCVyZGkpCisJbW92YiAoJXJzaSksICVyOGIKKwltb3ZiICVyOGIsICglcmRpKQogCWluY3EgJXJkaQogCWluY3EgJXJzaQogCWRlY2wgJWVjeAogCWpueiAuTGxvb3BfMQogCi0uTGVuZGU6Ci0JcG9wcSAlcmJ4Ci0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC04Ci0JQ0ZJX1JFU1RPUkUgcmJ4CisuTGVuZDoKIAlyZXQKLS5MZmluYWw6CiAJQ0ZJX0VORFBST0MKIEVORFBST0MobWVtY3B5KQogRU5EUFJPQyhfX21lbWNweSkKIAotCS8qIFNvbWUgQ1BVcyBydW4gZmFzdGVyIHVzaW5nIHRoZSBzdHJpbmcgY29weSBpbnN0cnVjdGlvbnMuCi0JICAgSXQgaXMgYWxzbyBhIGxvdCBzaW1wbGVyLiBVc2UgdGhpcyB3aGVuIHBvc3NpYmxlICovCisJLyoKKwkgKiBTb21lIENQVXMgcnVuIGZhc3RlciB1c2luZyB0aGUgc3RyaW5nIGNvcHkgaW5zdHJ1Y3Rpb25zLgorCSAqIEl0IGlzIGFsc28gYSBsb3Qgc2ltcGxlci4gVXNlIHRoaXMgd2hlbiBwb3NzaWJsZToKKwkgKi8KIAotCS5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwiYXgiCisJLnNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LCAiYXgiCiAxOgkuYnl0ZSAweGViCQkJCS8qIGptcCA8ZGlzcDg+ICovCiAJLmJ5dGUgKG1lbWNweV9jIC0gbWVtY3B5KSAtICgyZiAtIDFiKQkvKiBvZmZzZXQgKi8KIDI6CiAJLnByZXZpb3VzCi0JLnNlY3Rpb24gLmFsdGluc3RydWN0aW9ucywiYSIKKworCS5zZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsICJhIgogCS5hbGlnbiA4CiAJLnF1YWQgbWVtY3B5CiAJLnF1YWQgMWIKIAkuYnl0ZSBYODZfRkVBVFVSRV9SRVBfR09PRAotCS8qIFJlcGxhY2Ugb25seSBiZWdpbm5pbmcsIG1lbWNweSBpcyB1c2VkIHRvIGFwcGx5IGFsdGVybmF0aXZlcywgc28gaXQKLQkgKiBpcyBzaWxseSB0byBvdmVyd3JpdGUgaXRzZWxmIHdpdGggbm9wcyAtIHJlYm9vdCBpcyBvbmx5IG91dGNvbWUuLi4gKi8KKworCS8qCisJICogUmVwbGFjZSBvbmx5IGJlZ2lubmluZywgbWVtY3B5IGlzIHVzZWQgdG8gYXBwbHkgYWx0ZXJuYXRpdmVzLAorCSAqIHNvIGl0IGlzIHNpbGx5IHRvIG92ZXJ3cml0ZSBpdHNlbGYgd2l0aCBub3BzIC0gcmVib290IGlzIHRoZQorCSAqIG9ubHkgb3V0Y29tZS4uLgorCSAqLwogCS5ieXRlIDJiIC0gMWIKIAkuYnl0ZSAyYiAtIDFiCiAJLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMgYi9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMKaW5kZXggMDBmMTI3Yy4uNTIyZGI1ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jCisrKyBiL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYwpAQCAtMTIxLDIyICsxMjEsMTMgQEAKIAlwYWdlZmF1bHRfZW5hYmxlKCk7CiB9CiAKLS8qIFRoaXMgaXMgdGhlIHNhbWUgYXMga21hcF9hdG9taWMoKSBidXQgY2FuIG1hcCBtZW1vcnkgdGhhdCBkb2Vzbid0CisvKgorICogVGhpcyBpcyB0aGUgc2FtZSBhcyBrbWFwX2F0b21pYygpIGJ1dCBjYW4gbWFwIG1lbW9yeSB0aGF0IGRvZXNuJ3QKICAqIGhhdmUgYSBzdHJ1Y3QgcGFnZSBhc3NvY2lhdGVkIHdpdGggaXQuCiAgKi8KIHZvaWQgKmttYXBfYXRvbWljX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUpCiB7Ci0JZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4OwotCXVuc2lnbmVkIGxvbmcgdmFkZHI7Ci0KLQlwYWdlZmF1bHRfZGlzYWJsZSgpOwotCi0JaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIqc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXZhZGRyID0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCk7Ci0Jc2V0X3B0ZShrbWFwX3B0ZS1pZHgsIHBmbl9wdGUocGZuLCBrbWFwX3Byb3QpKTsKLQlhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUoKTsKLQotCXJldHVybiAodm9pZCopIHZhZGRyOworCXJldHVybiBrbWFwX2F0b21pY19wcm90X3BmbihwZm4sIHR5cGUsIGttYXBfcHJvdCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrbWFwX2F0b21pY19wZm4pOyAvKiB0ZW1wb3JhcmlseSBpbiB1c2UgYnkgaTkxNSBHRU0gdW50aWwgdm1hcCAqLwogCkBAIC0xNTgsNyArMTQ5LDYgQEAKIEVYUE9SVF9TWU1CT0woa21hcF9hdG9taWMpOwogRVhQT1JUX1NZTUJPTChrdW5tYXBfYXRvbWljKTsKIAotI2lmZGVmIENPTkZJR19OVU1BCiB2b2lkIF9faW5pdCBzZXRfaGlnaG1lbV9wYWdlc19pbml0KHZvaWQpCiB7CiAJc3RydWN0IHpvbmUgKnpvbmU7CkBAIC0xODIsMTEgKzE3MiwzIEBACiAJfQogCXRvdGFscmFtX3BhZ2VzICs9IHRvdGFsaGlnaF9wYWdlczsKIH0KLSNlbHNlCi12b2lkIF9faW5pdCBzZXRfaGlnaG1lbV9wYWdlc19pbml0KHZvaWQpCi17Ci0JYWRkX2hpZ2hwYWdlc193aXRoX2FjdGl2ZV9yZWdpb25zKDAsIGhpZ2hzdGFydF9wZm4sIGhpZ2hlbmRfcGZuKTsKLQotCXRvdGFscmFtX3BhZ2VzICs9IHRvdGFsaGlnaF9wYWdlczsKLX0KLSNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdC5jIGIvYXJjaC94ODYvbW0vaW5pdC5jCmluZGV4IGNlNmE3MjIuLmZkM2RhMWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0LmMKQEAgLTEsOCArMSwzNDUgQEAKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9lODIwLmg+CisjaW5jbHVkZSA8YXNtL2luaXQuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorCit1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgZTgyMF90YWJsZV9zdGFydDsKK3Vuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSBlODIwX3RhYmxlX2VuZDsKK3Vuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSBlODIwX3RhYmxlX3RvcDsKKworaW50IGFmdGVyX2Jvb3RtZW07CisKK2ludCBkaXJlY3RfZ2JwYWdlcworI2lmZGVmIENPTkZJR19ESVJFQ1RfR0JQQUdFUworCQkJCT0gMQorI2VuZGlmCis7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBmaW5kX2Vhcmx5X3RhYmxlX3NwYWNlKHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgdXNlX3BzZSwKKwkJCQkJICBpbnQgdXNlX2dicGFnZXMpCit7CisJdW5zaWduZWQgbG9uZyBwdWRzLCBwbWRzLCBwdGVzLCB0YWJsZXMsIHN0YXJ0OworCisJcHVkcyA9IChlbmQgKyBQVURfU0laRSAtIDEpID4+IFBVRF9TSElGVDsKKwl0YWJsZXMgPSByb3VuZHVwKHB1ZHMgKiBzaXplb2YocHVkX3QpLCBQQUdFX1NJWkUpOworCisJaWYgKHVzZV9nYnBhZ2VzKSB7CisJCXVuc2lnbmVkIGxvbmcgZXh0cmE7CisKKwkJZXh0cmEgPSBlbmQgLSAoKGVuZD4+UFVEX1NISUZUKSA8PCBQVURfU0hJRlQpOworCQlwbWRzID0gKGV4dHJhICsgUE1EX1NJWkUgLSAxKSA+PiBQTURfU0hJRlQ7CisJfSBlbHNlCisJCXBtZHMgPSAoZW5kICsgUE1EX1NJWkUgLSAxKSA+PiBQTURfU0hJRlQ7CisKKwl0YWJsZXMgKz0gcm91bmR1cChwbWRzICogc2l6ZW9mKHBtZF90KSwgUEFHRV9TSVpFKTsKKworCWlmICh1c2VfcHNlKSB7CisJCXVuc2lnbmVkIGxvbmcgZXh0cmE7CisKKwkJZXh0cmEgPSBlbmQgLSAoKGVuZD4+UE1EX1NISUZUKSA8PCBQTURfU0hJRlQpOworI2lmZGVmIENPTkZJR19YODZfMzIKKwkJZXh0cmEgKz0gUE1EX1NJWkU7CisjZW5kaWYKKwkJcHRlcyA9IChleHRyYSArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7CisJfSBlbHNlCisJCXB0ZXMgPSAoZW5kICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKKworCXRhYmxlcyArPSByb3VuZHVwKHB0ZXMgKiBzaXplb2YocHRlX3QpLCBQQUdFX1NJWkUpOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qIGZvciBmaXhtYXAgKi8KKwl0YWJsZXMgKz0gcm91bmR1cChfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgKiBzaXplb2YocHRlX3QpLCBQQUdFX1NJWkUpOworI2VuZGlmCisKKwkvKgorCSAqIFJFRC1QRU4gcHV0dGluZyBwYWdlIHRhYmxlcyBvbmx5IG9uIG5vZGUgMCBjb3VsZAorCSAqIGNhdXNlIGEgaG90c3BvdCBhbmQgZmlsbCB1cCBaT05FX0RNQS4gVGhlIHBhZ2UgdGFibGVzCisJICogbmVlZCByb3VnaGx5IDAuNUtCIHBlciBHQi4KKwkgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJc3RhcnQgPSAweDcwMDA7CisJZTgyMF90YWJsZV9zdGFydCA9IGZpbmRfZTgyMF9hcmVhKHN0YXJ0LCBtYXhfcGZuX21hcHBlZDw8UEFHRV9TSElGVCwKKwkJCQkJdGFibGVzLCBQQUdFX1NJWkUpOworI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLworCXN0YXJ0ID0gMHg4MDAwOworCWU4MjBfdGFibGVfc3RhcnQgPSBmaW5kX2U4MjBfYXJlYShzdGFydCwgZW5kLCB0YWJsZXMsIFBBR0VfU0laRSk7CisjZW5kaWYKKwlpZiAoZTgyMF90YWJsZV9zdGFydCA9PSAtMVVMKQorCQlwYW5pYygiQ2Fubm90IGZpbmQgc3BhY2UgZm9yIHRoZSBrZXJuZWwgcGFnZSB0YWJsZXMiKTsKKworCWU4MjBfdGFibGVfc3RhcnQgPj49IFBBR0VfU0hJRlQ7CisJZTgyMF90YWJsZV9lbmQgPSBlODIwX3RhYmxlX3N0YXJ0OworCWU4MjBfdGFibGVfdG9wID0gZTgyMF90YWJsZV9zdGFydCArICh0YWJsZXMgPj4gUEFHRV9TSElGVCk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAia2VybmVsIGRpcmVjdCBtYXBwaW5nIHRhYmxlcyB1cCB0byAlbHggQCAlbHgtJWx4XG4iLAorCQllbmQsIGU4MjBfdGFibGVfc3RhcnQgPDwgUEFHRV9TSElGVCwgZTgyMF90YWJsZV90b3AgPDwgUEFHRV9TSElGVCk7Cit9CisKK3N0cnVjdCBtYXBfcmFuZ2UgeworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisJdW5zaWduZWQgcGFnZV9zaXplX21hc2s7Cit9OworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2RlZmluZSBOUl9SQU5HRV9NUiAzCisjZWxzZSAvKiBDT05GSUdfWDg2XzY0ICovCisjZGVmaW5lIE5SX1JBTkdFX01SIDUKKyNlbmRpZgorCitzdGF0aWMgaW50IF9fbWVtaW5pdCBzYXZlX21yKHN0cnVjdCBtYXBfcmFuZ2UgKm1yLCBpbnQgbnJfcmFuZ2UsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplX21hc2spCit7CisJaWYgKHN0YXJ0X3BmbiA8IGVuZF9wZm4pIHsKKwkJaWYgKG5yX3JhbmdlID49IE5SX1JBTkdFX01SKQorCQkJcGFuaWMoInJ1biBvdXQgb2YgcmFuZ2UgZm9yIGluaXRfbWVtb3J5X21hcHBpbmdcbiIpOworCQltcltucl9yYW5nZV0uc3RhcnQgPSBzdGFydF9wZm48PFBBR0VfU0hJRlQ7CisJCW1yW25yX3JhbmdlXS5lbmQgICA9IGVuZF9wZm48PFBBR0VfU0hJRlQ7CisJCW1yW25yX3JhbmdlXS5wYWdlX3NpemVfbWFzayA9IHBhZ2Vfc2l6ZV9tYXNrOworCQlucl9yYW5nZSsrOworCX0KKworCXJldHVybiBucl9yYW5nZTsKK30KKworI2lmZGVmIENPTkZJR19YODZfNjQKK3N0YXRpYyB2b2lkIF9faW5pdCBpbml0X2dicGFnZXModm9pZCkKK3sKKwlpZiAoZGlyZWN0X2dicGFnZXMgJiYgY3B1X2hhc19nYnBhZ2VzKQorCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyBHQiBwYWdlcyBmb3IgZGlyZWN0IG1hcHBpbmdcbiIpOworCWVsc2UKKwkJZGlyZWN0X2dicGFnZXMgPSAwOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2dicGFnZXModm9pZCkKK3sKK30KKyNlbmRpZgorCisvKgorICogU2V0dXAgdGhlIGRpcmVjdCBtYXBwaW5nIG9mIHRoZSBwaHlzaWNhbCBtZW1vcnkgYXQgUEFHRV9PRkZTRVQuCisgKiBUaGlzIHJ1bnMgYmVmb3JlIGJvb3RtZW0gaXMgaW5pdGlhbGl6ZWQgYW5kIGdldHMgcGFnZXMgZGlyZWN0bHkgZnJvbQorICogdGhlIHBoeXNpY2FsIG1lbW9yeS4gVG8gYWNjZXNzIHRoZW0gdGhleSBhcmUgdGVtcG9yYXJpbHkgbWFwcGVkLgorICovCit1bnNpZ25lZCBsb25nIF9faW5pdF9yZWZvayBpbml0X21lbW9yeV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZV9tYXNrID0gMDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKKwl1bnNpZ25lZCBsb25nIHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBwb3M7CisKKwlzdHJ1Y3QgbWFwX3JhbmdlIG1yW05SX1JBTkdFX01SXTsKKwlpbnQgbnJfcmFuZ2UsIGk7CisJaW50IHVzZV9wc2UsIHVzZV9nYnBhZ2VzOworCisJcHJpbnRrKEtFUk5fSU5GTyAiaW5pdF9tZW1vcnlfbWFwcGluZzogJTAxNmx4LSUwMTZseFxuIiwgc3RhcnQsIGVuZCk7CisKKwlpZiAoIWFmdGVyX2Jvb3RtZW0pCisJCWluaXRfZ2JwYWdlcygpOworCisjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQworCS8qCisJICogRm9yIENPTkZJR19ERUJVR19QQUdFQUxMT0MsIGlkZW50aXR5IG1hcHBpbmcgd2lsbCB1c2Ugc21hbGwgcGFnZXMuCisJICogVGhpcyB3aWxsIHNpbXBsaWZ5IGNwYSgpLCB3aGljaCBvdGhlcndpc2UgbmVlZHMgdG8gc3VwcG9ydCBzcGxpdHRpbmcKKwkgKiBsYXJnZSBwYWdlcyBpbnRvIHNtYWxsIGluIGludGVycnVwdCBjb250ZXh0LCBldGMuCisJICovCisJdXNlX3BzZSA9IHVzZV9nYnBhZ2VzID0gMDsKKyNlbHNlCisJdXNlX3BzZSA9IGNwdV9oYXNfcHNlOworCXVzZV9nYnBhZ2VzID0gZGlyZWN0X2dicGFnZXM7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfMzIKKyNpZmRlZiBDT05GSUdfWDg2X1BBRQorCXNldF9ueCgpOworCWlmIChueF9lbmFibGVkKQorCQlwcmludGsoS0VSTl9JTkZPICJOWCAoRXhlY3V0ZSBEaXNhYmxlKSBwcm90ZWN0aW9uOiBhY3RpdmVcbiIpOworI2VuZGlmCisKKwkvKiBFbmFibGUgUFNFIGlmIGF2YWlsYWJsZSAqLworCWlmIChjcHVfaGFzX3BzZSkKKwkJc2V0X2luX2NyNChYODZfQ1I0X1BTRSk7CisKKwkvKiBFbmFibGUgUEdFIGlmIGF2YWlsYWJsZSAqLworCWlmIChjcHVfaGFzX3BnZSkgeworCQlzZXRfaW5fY3I0KFg4Nl9DUjRfUEdFKTsKKwkJX19zdXBwb3J0ZWRfcHRlX21hc2sgfD0gX1BBR0VfR0xPQkFMOworCX0KKyNlbmRpZgorCisJaWYgKHVzZV9nYnBhZ2VzKQorCQlwYWdlX3NpemVfbWFzayB8PSAxIDw8IFBHX0xFVkVMXzFHOworCWlmICh1c2VfcHNlKQorCQlwYWdlX3NpemVfbWFzayB8PSAxIDw8IFBHX0xFVkVMXzJNOworCisJbWVtc2V0KG1yLCAwLCBzaXplb2YobXIpKTsKKwlucl9yYW5nZSA9IDA7CisKKwkvKiBoZWFkIGlmIG5vdCBiaWcgcGFnZSBhbGlnbm1lbnQgPyAqLworCXN0YXJ0X3BmbiA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7CisJcG9zID0gc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qCisJICogRG9uJ3QgdXNlIGEgbGFyZ2UgcGFnZSBmb3IgdGhlIGZpcnN0IDIvNE1CIG9mIG1lbW9yeQorCSAqIGJlY2F1c2UgdGhlcmUgYXJlIG9mdGVuIGZpeGVkIHNpemUgTVRSUnMgaW4gdGhlcmUKKwkgKiBhbmQgb3ZlcmxhcHBpbmcgTVRSUnMgaW50byBsYXJnZSBwYWdlcyBjYW4gY2F1c2UKKwkgKiBzbG93ZG93bnMuCisJICovCisJaWYgKHBvcyA9PSAwKQorCQllbmRfcGZuID0gMTw8KFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOworCWVsc2UKKwkJZW5kX3BmbiA9ICgocG9zICsgKFBNRF9TSVpFIC0gMSkpPj5QTURfU0hJRlQpCisJCQkJIDw8IChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTsKKyNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KKwllbmRfcGZuID0gKChwb3MgKyAoUE1EX1NJWkUgLSAxKSkgPj4gUE1EX1NISUZUKQorCQkJPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOworI2VuZGlmCisJaWYgKGVuZF9wZm4gPiAoZW5kID4+IFBBR0VfU0hJRlQpKQorCQllbmRfcGZuID0gZW5kID4+IFBBR0VfU0hJRlQ7CisJaWYgKHN0YXJ0X3BmbiA8IGVuZF9wZm4pIHsKKwkJbnJfcmFuZ2UgPSBzYXZlX21yKG1yLCBucl9yYW5nZSwgc3RhcnRfcGZuLCBlbmRfcGZuLCAwKTsKKwkJcG9zID0gZW5kX3BmbiA8PCBQQUdFX1NISUZUOworCX0KKworCS8qIGJpZyBwYWdlICgyTSkgcmFuZ2UgKi8KKwlzdGFydF9wZm4gPSAoKHBvcyArIChQTURfU0laRSAtIDEpKT4+UE1EX1NISUZUKQorCQkJIDw8IChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJZW5kX3BmbiA9IChlbmQ+PlBNRF9TSElGVCkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOworI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLworCWVuZF9wZm4gPSAoKHBvcyArIChQVURfU0laRSAtIDEpKT4+UFVEX1NISUZUKQorCQkJIDw8IChQVURfU0hJRlQgLSBQQUdFX1NISUZUKTsKKwlpZiAoZW5kX3BmbiA+ICgoZW5kPj5QTURfU0hJRlQpPDwoUE1EX1NISUZUIC0gUEFHRV9TSElGVCkpKQorCQllbmRfcGZuID0gKChlbmQ+PlBNRF9TSElGVCk8PChQTURfU0hJRlQgLSBQQUdFX1NISUZUKSk7CisjZW5kaWYKKworCWlmIChzdGFydF9wZm4gPCBlbmRfcGZuKSB7CisJCW5yX3JhbmdlID0gc2F2ZV9tcihtciwgbnJfcmFuZ2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwKKwkJCQlwYWdlX3NpemVfbWFzayAmICgxPDxQR19MRVZFTF8yTSkpOworCQlwb3MgPSBlbmRfcGZuIDw8IFBBR0VfU0hJRlQ7CisJfQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCS8qIGJpZyBwYWdlICgxRykgcmFuZ2UgKi8KKwlzdGFydF9wZm4gPSAoKHBvcyArIChQVURfU0laRSAtIDEpKT4+UFVEX1NISUZUKQorCQkJIDw8IChQVURfU0hJRlQgLSBQQUdFX1NISUZUKTsKKwllbmRfcGZuID0gKGVuZCA+PiBQVURfU0hJRlQpIDw8IChQVURfU0hJRlQgLSBQQUdFX1NISUZUKTsKKwlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikgeworCQlucl9yYW5nZSA9IHNhdmVfbXIobXIsIG5yX3JhbmdlLCBzdGFydF9wZm4sIGVuZF9wZm4sCisJCQkJcGFnZV9zaXplX21hc2sgJgorCQkJCSAoKDE8PFBHX0xFVkVMXzJNKXwoMTw8UEdfTEVWRUxfMUcpKSk7CisJCXBvcyA9IGVuZF9wZm4gPDwgUEFHRV9TSElGVDsKKwl9CisKKwkvKiB0YWlsIGlzIG5vdCBiaWcgcGFnZSAoMUcpIGFsaWdubWVudCAqLworCXN0YXJ0X3BmbiA9ICgocG9zICsgKFBNRF9TSVpFIC0gMSkpPj5QTURfU0hJRlQpCisJCQkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOworCWVuZF9wZm4gPSAoZW5kID4+IFBNRF9TSElGVCkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOworCWlmIChzdGFydF9wZm4gPCBlbmRfcGZuKSB7CisJCW5yX3JhbmdlID0gc2F2ZV9tcihtciwgbnJfcmFuZ2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwKKwkJCQlwYWdlX3NpemVfbWFzayAmICgxPDxQR19MRVZFTF8yTSkpOworCQlwb3MgPSBlbmRfcGZuIDw8IFBBR0VfU0hJRlQ7CisJfQorI2VuZGlmCisKKwkvKiB0YWlsIGlzIG5vdCBiaWcgcGFnZSAoMk0pIGFsaWdubWVudCAqLworCXN0YXJ0X3BmbiA9IHBvcz4+UEFHRV9TSElGVDsKKwllbmRfcGZuID0gZW5kPj5QQUdFX1NISUZUOworCW5yX3JhbmdlID0gc2F2ZV9tcihtciwgbnJfcmFuZ2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwgMCk7CisKKwkvKiB0cnkgdG8gbWVyZ2Ugc2FtZSBwYWdlIHNpemUgYW5kIGNvbnRpbnVvdXMgKi8KKwlmb3IgKGkgPSAwOyBucl9yYW5nZSA+IDEgJiYgaSA8IG5yX3JhbmdlIC0gMTsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgb2xkX3N0YXJ0OworCQlpZiAobXJbaV0uZW5kICE9IG1yW2krMV0uc3RhcnQgfHwKKwkJICAgIG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrICE9IG1yW2krMV0ucGFnZV9zaXplX21hc2spCisJCQljb250aW51ZTsKKwkJLyogbW92ZSBpdCAqLworCQlvbGRfc3RhcnQgPSBtcltpXS5zdGFydDsKKwkJbWVtbW92ZSgmbXJbaV0sICZtcltpKzFdLAorCQkJKG5yX3JhbmdlIC0gMSAtIGkpICogc2l6ZW9mKHN0cnVjdCBtYXBfcmFuZ2UpKTsKKwkJbXJbaS0tXS5zdGFydCA9IG9sZF9zdGFydDsKKwkJbnJfcmFuZ2UtLTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAlMDEwbHggLSAlMDEwbHggcGFnZSAlc1xuIiwKKwkJCQltcltpXS5zdGFydCwgbXJbaV0uZW5kLAorCQkJKG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrICYgKDE8PFBHX0xFVkVMXzFHKSk/IjFHIjooCisJCQkgKG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrICYgKDE8PFBHX0xFVkVMXzJNKSk/IjJNIjoiNGsiKSk7CisKKwkvKgorCSAqIEZpbmQgc3BhY2UgZm9yIHRoZSBrZXJuZWwgZGlyZWN0IG1hcHBpbmcgdGFibGVzLgorCSAqCisJICogTGF0ZXIgd2Ugc2hvdWxkIGFsbG9jYXRlIHRoZXNlIHRhYmxlcyBpbiB0aGUgbG9jYWwgbm9kZSBvZiB0aGUKKwkgKiBtZW1vcnkgbWFwcGVkLiBVbmZvcnR1bmF0ZWx5IHRoaXMgaXMgZG9uZSBjdXJyZW50bHkgYmVmb3JlIHRoZQorCSAqIG5vZGVzIGFyZSBkaXNjb3ZlcmVkLgorCSAqLworCWlmICghYWZ0ZXJfYm9vdG1lbSkKKwkJZmluZF9lYXJseV90YWJsZV9zcGFjZShlbmQsIHVzZV9wc2UsIHVzZV9nYnBhZ2VzKTsKKworI2lmZGVmIENPTkZJR19YODZfMzIKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKKwkJa2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdChtcltpXS5zdGFydCwgbXJbaV0uZW5kLAorCQkJCQkgICAgIG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrKTsKKwlyZXQgPSBlbmQ7CisjZWxzZSAvKiBDT05GSUdfWDg2XzY0ICovCisJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCisJCXJldCA9IGtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX2luaXQobXJbaV0uc3RhcnQsIG1yW2ldLmVuZCwKKwkJCQkJCSAgIG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWVhcmx5X2lvcmVtYXBfcGFnZV90YWJsZV9yYW5nZV9pbml0KCk7CisKKwlsb2FkX2NyMyhzd2FwcGVyX3BnX2Rpcik7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwlpZiAoIWFmdGVyX2Jvb3RtZW0pCisJCW1tdV9jcjRfZmVhdHVyZXMgPSByZWFkX2NyNCgpOworI2VuZGlmCisJX19mbHVzaF90bGJfYWxsKCk7CisKKwlpZiAoIWFmdGVyX2Jvb3RtZW0gJiYgZTgyMF90YWJsZV9lbmQgPiBlODIwX3RhYmxlX3N0YXJ0KQorCQlyZXNlcnZlX2Vhcmx5KGU4MjBfdGFibGVfc3RhcnQgPDwgUEFHRV9TSElGVCwKKwkJCQkgZTgyMF90YWJsZV9lbmQgPDwgUEFHRV9TSElGVCwgIlBHVEFCTEUiKTsKKworCWlmICghYWZ0ZXJfYm9vdG1lbSkKKwkJZWFybHlfbWVtdGVzdChzdGFydCwgZW5kKTsKKworCXJldHVybiByZXQgPj4gUEFHRV9TSElGVDsKK30KKworCisvKgorICogZGV2bWVtX2lzX2FsbG93ZWQoKSBjaGVja3MgdG8gc2VlIGlmIC9kZXYvbWVtIGFjY2VzcyB0byBhIGNlcnRhaW4gYWRkcmVzcworICogaXMgdmFsaWQuIFRoZSBhcmd1bWVudCBpcyBhIHBoeXNpY2FsIHBhZ2UgbnVtYmVyLgorICoKKyAqCisgKiBPbiB4ODYsIGFjY2VzcyBoYXMgdG8gYmUgZ2l2ZW4gdG8gdGhlIGZpcnN0IG1lZ2FieXRlIG9mIHJhbSBiZWNhdXNlIHRoYXQgYXJlYQorICogY29udGFpbnMgYmlvcyBjb2RlIGFuZCBkYXRhIHJlZ2lvbnMgdXNlZCBieSBYIGFuZCBkb3NlbXUgYW5kIHNpbWlsYXIgYXBwcy4KKyAqIEFjY2VzcyBoYXMgdG8gYmUgZ2l2ZW4gdG8gbm9uLWtlcm5lbC1yYW0gYXJlYXMgYXMgd2VsbCwgdGhlc2UgY29udGFpbiB0aGUgUENJCisgKiBtbWlvIHJlc291cmNlcyBhcyB3ZWxsIGFzIHBvdGVudGlhbCBiaW9zL2FjcGkgZGF0YSByZWdpb25zLgorICovCitpbnQgZGV2bWVtX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwYWdlbnIpCit7CisJaWYgKHBhZ2VuciA8PSAyNTYpCisJCXJldHVybiAxOworCWlmIChpb21lbV9pc19leGNsdXNpdmUocGFnZW5yIDw8IFBBR0VfU0hJRlQpKQorCQlyZXR1cm4gMDsKKwlpZiAoIXBhZ2VfaXNfcmFtKHBhZ2VucikpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQogCiB2b2lkIGZyZWVfaW5pdF9wYWdlcyhjaGFyICp3aGF0LCB1bnNpZ25lZCBsb25nIGJlZ2luLCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKQEAgLTQ3LDMgKzM4NCwxMCBAQAogCQkJKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfYmVnaW4pLAogCQkJKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfZW5kKSk7CiB9CisKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKK3ZvaWQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWZyZWVfaW5pdF9wYWdlcygiaW5pdHJkIG1lbW9yeSIsIHN0YXJ0LCBlbmQpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMgYi9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKaW5kZXggNDdkZjBlMS4uZGI4MWU5YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdF8zMi5jCisrKyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2luaXQuaD4KIAogdW5zaWduZWQgbG9uZyBtYXhfbG93X3Bmbl9tYXBwZWQ7CiB1bnNpZ25lZCBsb25nIG1heF9wZm5fbWFwcGVkOwpAQCAtNTgsMTkgKzU5LDE0IEBACiAKIHN0YXRpYyBub2lubGluZSBpbnQgZG9fdGVzdF93cF9iaXQodm9pZCk7CiAKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSB0YWJsZV9zdGFydDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdGRhdGEgdGFibGVfZW5kOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSB0YWJsZV90b3A7Ci0KLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBhZnRlcl9pbml0X2Jvb3RtZW07Citib29sIF9fcmVhZF9tb3N0bHkgX192bWFsbG9jX3N0YXJ0X3NldCA9IGZhbHNlOwogCiBzdGF0aWMgX19pbml0IHZvaWQgKmFsbG9jX2xvd19wYWdlKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBwZm4gPSB0YWJsZV9lbmQrKzsKKwl1bnNpZ25lZCBsb25nIHBmbiA9IGU4MjBfdGFibGVfZW5kKys7CiAJdm9pZCAqYWRyOwogCi0JaWYgKHBmbiA+PSB0YWJsZV90b3ApCisJaWYgKHBmbiA+PSBlODIwX3RhYmxlX3RvcCkKIAkJcGFuaWMoImFsbG9jX2xvd19wYWdlOiByYW4gb3V0IG9mIG1lbW9yeSIpOwogCiAJYWRyID0gX192YShwZm4gKiBQQUdFX1NJWkUpOwpAQCAtOTAsNyArODYsNyBAQAogCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKIAlpZiAoIShwZ2RfdmFsKCpwZ2QpICYgX1BBR0VfUFJFU0VOVCkpIHsKLQkJaWYgKGFmdGVyX2luaXRfYm9vdG1lbSkKKwkJaWYgKGFmdGVyX2Jvb3RtZW0pCiAJCQlwbWRfdGFibGUgPSAocG1kX3QgKilhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOwogCQllbHNlCiAJCQlwbWRfdGFibGUgPSAocG1kX3QgKilhbGxvY19sb3dfcGFnZSgpOwpAQCAtMTE3LDcgKzExMyw3IEBACiAJaWYgKCEocG1kX3ZhbCgqcG1kKSAmIF9QQUdFX1BSRVNFTlQpKSB7CiAJCXB0ZV90ICpwYWdlX3RhYmxlID0gTlVMTDsKIAotCQlpZiAoYWZ0ZXJfaW5pdF9ib290bWVtKSB7CisJCWlmIChhZnRlcl9ib290bWVtKSB7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwogCQkJcGFnZV90YWJsZSA9IChwdGVfdCAqKSBhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7CiAjZW5kaWYKQEAgLTE2OCwxMiArMTY0LDEyIEBACiAJaWYgKHBtZF9pZHhfa21hcF9iZWdpbiAhPSBwbWRfaWR4X2ttYXBfZW5kCiAJICAgICYmICh2YWRkciA+PiBQTURfU0hJRlQpID49IHBtZF9pZHhfa21hcF9iZWdpbgogCSAgICAmJiAodmFkZHIgPj4gUE1EX1NISUZUKSA8PSBwbWRfaWR4X2ttYXBfZW5kCi0JICAgICYmICgoX19wYShwdGUpID4+IFBBR0VfU0hJRlQpIDwgdGFibGVfc3RhcnQKLQkJfHwgKF9fcGEocHRlKSA+PiBQQUdFX1NISUZUKSA+PSB0YWJsZV9lbmQpKSB7CisJICAgICYmICgoX19wYShwdGUpID4+IFBBR0VfU0hJRlQpIDwgZTgyMF90YWJsZV9zdGFydAorCQl8fCAoX19wYShwdGUpID4+IFBBR0VfU0hJRlQpID49IGU4MjBfdGFibGVfZW5kKSkgewogCQlwdGVfdCAqbmV3cHRlOwogCQlpbnQgaTsKIAotCQlCVUdfT04oYWZ0ZXJfaW5pdF9ib290bWVtKTsKKwkJQlVHX09OKGFmdGVyX2Jvb3RtZW0pOwogCQluZXdwdGUgPSBhbGxvY19sb3dfcGFnZSgpOwogCQlmb3IgKGkgPSAwOyBpIDwgUFRSU19QRVJfUFRFOyBpKyspCiAJCQlzZXRfcHRlKG5ld3B0ZSArIGksIHB0ZVtpXSk7CkBAIC0yNDIsMTEgKzIzOCwxNCBAQAogICogb2YgbWF4X2xvd19wZm4gcGFnZXMsIGJ5IGNyZWF0aW5nIHBhZ2UgdGFibGVzIHN0YXJ0aW5nIGZyb20gYWRkcmVzcwogICogUEFHRV9PRkZTRVQ6CiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBrZXJuZWxfcGh5c2ljYWxfbWFwcGluZ19pbml0KHBnZF90ICpwZ2RfYmFzZSwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAotCQkJCQkJdW5zaWduZWQgbG9uZyBlbmRfcGZuLAotCQkJCQkJaW50IHVzZV9wc2UpCit1bnNpZ25lZCBsb25nIF9faW5pdAora2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJICAgICB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemVfbWFzaykKIHsKKwlpbnQgdXNlX3BzZSA9IHBhZ2Vfc2l6ZV9tYXNrID09ICgxPDxQR19MRVZFTF8yTSk7CisJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47CisJcGdkX3QgKnBnZF9iYXNlID0gc3dhcHBlcl9wZ19kaXI7CiAJaW50IHBnZF9pZHgsIHBtZF9pZHgsIHB0ZV9vZnM7CiAJdW5zaWduZWQgbG9uZyBwZm47CiAJcGdkX3QgKnBnZDsKQEAgLTI1NSw2ICsyNTQsOSBAQAogCXVuc2lnbmVkIHBhZ2VzXzJtLCBwYWdlc180azsKIAlpbnQgbWFwcGluZ19pdGVyOwogCisJc3RhcnRfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKKwllbmRfcGZuID0gZW5kID4+IFBBR0VfU0hJRlQ7CisKIAkvKgogCSAqIEZpcnN0IGl0ZXJhdGlvbiB3aWxsIHNldHVwIGlkZW50aXR5IG1hcHBpbmcgdXNpbmcgbGFyZ2Uvc21hbGwgcGFnZXMKIAkgKiBiYXNlZCBvbiB1c2VfcHNlLCB3aXRoIG90aGVyIGF0dHJpYnV0ZXMgc2FtZSBhcyBzZXQgYnkKQEAgLTM2OSwyNiArMzcxLDYgQEAKIAkJbWFwcGluZ19pdGVyID0gMjsKIAkJZ290byByZXBlYXQ7CiAJfQotfQotCi0vKgotICogZGV2bWVtX2lzX2FsbG93ZWQoKSBjaGVja3MgdG8gc2VlIGlmIC9kZXYvbWVtIGFjY2VzcyB0byBhIGNlcnRhaW4gYWRkcmVzcwotICogaXMgdmFsaWQuIFRoZSBhcmd1bWVudCBpcyBhIHBoeXNpY2FsIHBhZ2UgbnVtYmVyLgotICoKLSAqCi0gKiBPbiB4ODYsIGFjY2VzcyBoYXMgdG8gYmUgZ2l2ZW4gdG8gdGhlIGZpcnN0IG1lZ2FieXRlIG9mIHJhbSBiZWNhdXNlIHRoYXQgYXJlYQotICogY29udGFpbnMgYmlvcyBjb2RlIGFuZCBkYXRhIHJlZ2lvbnMgdXNlZCBieSBYIGFuZCBkb3NlbXUgYW5kIHNpbWlsYXIgYXBwcy4KLSAqIEFjY2VzcyBoYXMgdG8gYmUgZ2l2ZW4gdG8gbm9uLWtlcm5lbC1yYW0gYXJlYXMgYXMgd2VsbCwgdGhlc2UgY29udGFpbiB0aGUgUENJCi0gKiBtbWlvIHJlc291cmNlcyBhcyB3ZWxsIGFzIHBvdGVudGlhbCBiaW9zL2FjcGkgZGF0YSByZWdpb25zLgotICovCi1pbnQgZGV2bWVtX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwYWdlbnIpCi17Ci0JaWYgKHBhZ2VuciA8PSAyNTYpCi0JCXJldHVybiAxOwotCWlmIChpb21lbV9pc19leGNsdXNpdmUocGFnZW5yIDw8IFBBR0VfU0hJRlQpKQotCQlyZXR1cm4gMDsKLQlpZiAoIXBhZ2VfaXNfcmFtKHBhZ2VucikpCi0JCXJldHVybiAxOwogCXJldHVybiAwOwogfQogCkBAIC01NDUsOCArNTI3LDkgQEAKICAqIGJlIHBhcnRpYWxseSBwb3B1bGF0ZWQsIGFuZCBzbyBpdCBhdm9pZHMgc3RvbXBpbmcgb24gYW55IGV4aXN0aW5nCiAgKiBtYXBwaW5ncy4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2lvcmVtYXBfcGFnZV90YWJsZV9yYW5nZV9pbml0KHBnZF90ICpwZ2RfYmFzZSkKK3ZvaWQgX19pbml0IGVhcmx5X2lvcmVtYXBfcGFnZV90YWJsZV9yYW5nZV9pbml0KHZvaWQpCiB7CisJcGdkX3QgKnBnZF9iYXNlID0gc3dhcHBlcl9wZ19kaXI7CiAJdW5zaWduZWQgbG9uZyB2YWRkciwgZW5kOwogCiAJLyoKQEAgLTY0MSw3ICs2MjQsNyBAQAogfQogZWFybHlfcGFyYW0oIm5vZXhlYyIsIG5vZXhlY19zZXR1cCk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzZXRfbngodm9pZCkKK3ZvaWQgX19pbml0IHNldF9ueCh2b2lkKQogewogCXVuc2lnbmVkIGludCB2WzRdLCBsLCBoOwogCkBAIC03OTMsNiArNzc2LDggQEAKICNpZmRlZiBDT05GSUdfRkxBVE1FTQogCW1heF9tYXBuciA9IG51bV9waHlzcGFnZXM7CiAjZW5kaWYKKwlfX3ZtYWxsb2Nfc3RhcnRfc2V0ID0gdHJ1ZTsKKwogCXByaW50ayhLRVJOX05PVElDRSAiJWxkTUIgTE9XTUVNIGF2YWlsYWJsZS5cbiIsCiAJCQlwYWdlc190b19tYihtYXhfbG93X3BmbikpOwogCkBAIC04MTQsMTc2ICs3OTksNjYgQEAKIAlmcmVlX2FyZWFfaW5pdF9ub2RlcyhtYXhfem9uZV9wZm5zKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHNldHVwX25vZGVfYm9vdG1lbShpbnQgbm9kZWlkLAorCQkJCSB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJCQkgdW5zaWduZWQgbG9uZyBlbmRfcGZuLAorCQkJCSB1bnNpZ25lZCBsb25nIGJvb3RtYXApCit7CisJdW5zaWduZWQgbG9uZyBib290bWFwX3NpemU7CisKKwkvKiBkb24ndCB0b3VjaCBtaW5fbG93X3BmbiAqLworCWJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlaWQpLAorCQkJCQkgYm9vdG1hcCA+PiBQQUdFX1NISUZULAorCQkJCQkgc3RhcnRfcGZuLCBlbmRfcGZuKTsKKwlwcmludGsoS0VSTl9JTkZPICIgIG5vZGUgJWQgbG93IHJhbTogJTA4bHggLSAlMDhseFxuIiwKKwkJbm9kZWlkLCBzdGFydF9wZm48PFBBR0VfU0hJRlQsIGVuZF9wZm48PFBBR0VfU0hJRlQpOworCXByaW50ayhLRVJOX0lORk8gIiAgbm9kZSAlZCBib290bWFwICUwOGx4IC0gJTA4bHhcbiIsCisJCSBub2RlaWQsIGJvb3RtYXAsIGJvb3RtYXAgKyBib290bWFwX3NpemUpOworCWZyZWVfYm9vdG1lbV93aXRoX2FjdGl2ZV9yZWdpb25zKG5vZGVpZCwgZW5kX3Bmbik7CisJZWFybHlfcmVzX3RvX2Jvb3RtZW0oc3RhcnRfcGZuPDxQQUdFX1NISUZULCBlbmRfcGZuPDxQQUdFX1NISUZUKTsKKworCXJldHVybiBib290bWFwICsgYm9vdG1hcF9zaXplOworfQorCiB2b2lkIF9faW5pdCBzZXR1cF9ib290bWVtX2FsbG9jYXRvcih2b2lkKQogewotCWludCBpOworCWludCBub2RlaWQ7CiAJdW5zaWduZWQgbG9uZyBib290bWFwX3NpemUsIGJvb3RtYXA7CiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBib290LXRpbWUgYWxsb2NhdG9yICh3aXRoIGxvdyBtZW1vcnkgb25seSk6CiAJICovCiAJYm9vdG1hcF9zaXplID0gYm9vdG1lbV9ib290bWFwX3BhZ2VzKG1heF9sb3dfcGZuKTw8UEFHRV9TSElGVDsKLQlib290bWFwID0gZmluZF9lODIwX2FyZWEobWluX2xvd19wZm48PFBBR0VfU0hJRlQsCi0JCQkJIG1heF9wZm5fbWFwcGVkPDxQQUdFX1NISUZULCBib290bWFwX3NpemUsCisJYm9vdG1hcCA9IGZpbmRfZTgyMF9hcmVhKDAsIG1heF9wZm5fbWFwcGVkPDxQQUdFX1NISUZULCBib290bWFwX3NpemUsCiAJCQkJIFBBR0VfU0laRSk7CiAJaWYgKGJvb3RtYXAgPT0gLTFMKQogCQlwYW5pYygiQ2Fubm90IGZpbmQgYm9vdG1lbSBtYXAgb2Ygc2l6ZSAlbGRcbiIsIGJvb3RtYXBfc2l6ZSk7CiAJcmVzZXJ2ZV9lYXJseShib290bWFwLCBib290bWFwICsgYm9vdG1hcF9zaXplLCAiQk9PVE1BUCIpOwogCi0JLyogZG9uJ3QgdG91Y2ggbWluX2xvd19wZm4gKi8KLQlib290bWFwX3NpemUgPSBpbml0X2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksIGJvb3RtYXAgPj4gUEFHRV9TSElGVCwKLQkJCQkJIG1pbl9sb3dfcGZuLCBtYXhfbG93X3Bmbik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiICBtYXBwZWQgbG93IHJhbTogMCAtICUwOGx4XG4iLAogCQkgbWF4X3Bmbl9tYXBwZWQ8PFBBR0VfU0hJRlQpOwotCXByaW50ayhLRVJOX0lORk8gIiAgbG93IHJhbTogJTA4bHggLSAlMDhseFxuIiwKLQkJIG1pbl9sb3dfcGZuPDxQQUdFX1NISUZULCBtYXhfbG93X3Bmbjw8UEFHRV9TSElGVCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiICBib290bWFwICUwOGx4IC0gJTA4bHhcbiIsCi0JCSBib290bWFwLCBib290bWFwICsgYm9vdG1hcF9zaXplKTsKLQlmb3JfZWFjaF9vbmxpbmVfbm9kZShpKQotCQlmcmVlX2Jvb3RtZW1fd2l0aF9hY3RpdmVfcmVnaW9ucyhpLCBtYXhfbG93X3Bmbik7Ci0JZWFybHlfcmVzX3RvX2Jvb3RtZW0oMCwgbWF4X2xvd19wZm48PFBBR0VfU0hJRlQpOworCXByaW50ayhLRVJOX0lORk8gIiAgbG93IHJhbTogMCAtICUwOGx4XG4iLCBtYXhfbG93X3Bmbjw8UEFHRV9TSElGVCk7CiAKLQlhZnRlcl9pbml0X2Jvb3RtZW0gPSAxOwotfQorCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGVpZCkgeworCQkgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBmaW5kX2Vhcmx5X3RhYmxlX3NwYWNlKHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgdXNlX3BzZSkKLXsKLQl1bnNpZ25lZCBsb25nIHB1ZHMsIHBtZHMsIHB0ZXMsIHRhYmxlcywgc3RhcnQ7Ci0KLQlwdWRzID0gKGVuZCArIFBVRF9TSVpFIC0gMSkgPj4gUFVEX1NISUZUOwotCXRhYmxlcyA9IHJvdW5kdXAocHVkcyAqIHNpemVvZihwdWRfdCksIFBBR0VfU0laRSk7Ci0KLQlwbWRzID0gKGVuZCArIFBNRF9TSVpFIC0gMSkgPj4gUE1EX1NISUZUOwotCXRhYmxlcyArPSByb3VuZHVwKHBtZHMgKiBzaXplb2YocG1kX3QpLCBQQUdFX1NJWkUpOwotCi0JaWYgKHVzZV9wc2UpIHsKLQkJdW5zaWduZWQgbG9uZyBleHRyYTsKLQotCQlleHRyYSA9IGVuZCAtICgoZW5kPj5QTURfU0hJRlQpIDw8IFBNRF9TSElGVCk7Ci0JCWV4dHJhICs9IFBNRF9TSVpFOwotCQlwdGVzID0gKGV4dHJhICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKLQl9IGVsc2UKLQkJcHRlcyA9IChlbmQgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwotCi0JdGFibGVzICs9IHJvdW5kdXAocHRlcyAqIHNpemVvZihwdGVfdCksIFBBR0VfU0laRSk7Ci0KLQkvKiBmb3IgZml4bWFwICovCi0JdGFibGVzICs9IHJvdW5kdXAoX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzICogc2l6ZW9mKHB0ZV90KSwgUEFHRV9TSVpFKTsKLQotCS8qCi0JICogUkVELVBFTiBwdXR0aW5nIHBhZ2UgdGFibGVzIG9ubHkgb24gbm9kZSAwIGNvdWxkCi0JICogY2F1c2UgYSBob3RzcG90IGFuZCBmaWxsIHVwIFpPTkVfRE1BLiBUaGUgcGFnZSB0YWJsZXMKLQkgKiBuZWVkIHJvdWdobHkgMC41S0IgcGVyIEdCLgotCSAqLwotCXN0YXJ0ID0gMHg3MDAwOwotCXRhYmxlX3N0YXJ0ID0gZmluZF9lODIwX2FyZWEoc3RhcnQsIG1heF9wZm5fbWFwcGVkPDxQQUdFX1NISUZULAotCQkJCQl0YWJsZXMsIFBBR0VfU0laRSk7Ci0JaWYgKHRhYmxlX3N0YXJ0ID09IC0xVUwpCi0JCXBhbmljKCJDYW5ub3QgZmluZCBzcGFjZSBmb3IgdGhlIGtlcm5lbCBwYWdlIHRhYmxlcyIpOwotCi0JdGFibGVfc3RhcnQgPj49IFBBR0VfU0hJRlQ7Ci0JdGFibGVfZW5kID0gdGFibGVfc3RhcnQ7Ci0JdGFibGVfdG9wID0gdGFibGVfc3RhcnQgKyAodGFibGVzPj5QQUdFX1NISUZUKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICJrZXJuZWwgZGlyZWN0IG1hcHBpbmcgdGFibGVzIHVwIHRvICVseCBAICVseC0lbHhcbiIsCi0JCWVuZCwgdGFibGVfc3RhcnQgPDwgUEFHRV9TSElGVCwKLQkJKHRhYmxlX3N0YXJ0IDw8IFBBR0VfU0hJRlQpICsgdGFibGVzKTsKLX0KLQotdW5zaWduZWQgbG9uZyBfX2luaXRfcmVmb2sgaW5pdF9tZW1vcnlfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCQkJdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JcGdkX3QgKnBnZF9iYXNlID0gc3dhcHBlcl9wZ19kaXI7Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47Ci0JdW5zaWduZWQgbG9uZyBiaWdfcGFnZV9zdGFydDsKLSNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCi0JLyoKLQkgKiBGb3IgQ09ORklHX0RFQlVHX1BBR0VBTExPQywgaWRlbnRpdHkgbWFwcGluZyB3aWxsIHVzZSBzbWFsbCBwYWdlcy4KLQkgKiBUaGlzIHdpbGwgc2ltcGxpZnkgY3BhKCksIHdoaWNoIG90aGVyd2lzZSBuZWVkcyB0byBzdXBwb3J0IHNwbGl0dGluZwotCSAqIGxhcmdlIHBhZ2VzIGludG8gc21hbGwgaW4gaW50ZXJydXB0IGNvbnRleHQsIGV0Yy4KLQkgKi8KLQlpbnQgdXNlX3BzZSA9IDA7CisjaWZkZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKKwkJc3RhcnRfcGZuID0gbm9kZV9zdGFydF9wZm5bbm9kZWlkXTsKKwkJZW5kX3BmbiA9IG5vZGVfZW5kX3Bmbltub2RlaWRdOworCQlpZiAoc3RhcnRfcGZuID4gbWF4X2xvd19wZm4pCisJCQljb250aW51ZTsKKwkJaWYgKGVuZF9wZm4gPiBtYXhfbG93X3BmbikKKwkJCWVuZF9wZm4gPSBtYXhfbG93X3BmbjsKICNlbHNlCi0JaW50IHVzZV9wc2UgPSBjcHVfaGFzX3BzZTsKKwkJc3RhcnRfcGZuID0gMDsKKwkJZW5kX3BmbiA9IG1heF9sb3dfcGZuOwogI2VuZGlmCi0KLQkvKgotCSAqIEZpbmQgc3BhY2UgZm9yIHRoZSBrZXJuZWwgZGlyZWN0IG1hcHBpbmcgdGFibGVzLgotCSAqLwotCWlmICghYWZ0ZXJfaW5pdF9ib290bWVtKQotCQlmaW5kX2Vhcmx5X3RhYmxlX3NwYWNlKGVuZCwgdXNlX3BzZSk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2X1BBRQotCXNldF9ueCgpOwotCWlmIChueF9lbmFibGVkKQotCQlwcmludGsoS0VSTl9JTkZPICJOWCAoRXhlY3V0ZSBEaXNhYmxlKSBwcm90ZWN0aW9uOiBhY3RpdmVcbiIpOwotI2VuZGlmCi0KLQkvKiBFbmFibGUgUFNFIGlmIGF2YWlsYWJsZSAqLwotCWlmIChjcHVfaGFzX3BzZSkKLQkJc2V0X2luX2NyNChYODZfQ1I0X1BTRSk7Ci0KLQkvKiBFbmFibGUgUEdFIGlmIGF2YWlsYWJsZSAqLwotCWlmIChjcHVfaGFzX3BnZSkgewotCQlzZXRfaW5fY3I0KFg4Nl9DUjRfUEdFKTsKLQkJX19zdXBwb3J0ZWRfcHRlX21hc2sgfD0gX1BBR0VfR0xPQkFMOworCQlib290bWFwID0gc2V0dXBfbm9kZV9ib290bWVtKG5vZGVpZCwgc3RhcnRfcGZuLCBlbmRfcGZuLAorCQkJCQkJIGJvb3RtYXApOwogCX0KIAotCS8qCi0JICogRG9uJ3QgdXNlIGEgbGFyZ2UgcGFnZSBmb3IgdGhlIGZpcnN0IDIvNE1CIG9mIG1lbW9yeQotCSAqIGJlY2F1c2UgdGhlcmUgYXJlIG9mdGVuIGZpeGVkIHNpemUgTVRSUnMgaW4gdGhlcmUKLQkgKiBhbmQgb3ZlcmxhcHBpbmcgTVRSUnMgaW50byBsYXJnZSBwYWdlcyBjYW4gY2F1c2UKLQkgKiBzbG93ZG93bnMuCi0JICovCi0JYmlnX3BhZ2Vfc3RhcnQgPSBQTURfU0laRTsKLQotCWlmIChzdGFydCA8IGJpZ19wYWdlX3N0YXJ0KSB7Ci0JCXN0YXJ0X3BmbiA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7Ci0JCWVuZF9wZm4gPSBtaW4oYmlnX3BhZ2Vfc3RhcnQ+PlBBR0VfU0hJRlQsIGVuZD4+UEFHRV9TSElGVCk7Ci0JfSBlbHNlIHsKLQkJLyogaGVhZCBpcyBub3QgYmlnIHBhZ2UgYWxpZ25tZW50ID8gKi8KLQkJc3RhcnRfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKLQkJZW5kX3BmbiA9ICgoc3RhcnQgKyAoUE1EX1NJWkUgLSAxKSk+PlBNRF9TSElGVCkKLQkJCQkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOwotCX0KLQlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikKLQkJa2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdChwZ2RfYmFzZSwgc3RhcnRfcGZuLCBlbmRfcGZuLCAwKTsKLQotCS8qIGJpZyBwYWdlIHJhbmdlICovCi0Jc3RhcnRfcGZuID0gKChzdGFydCArIChQTURfU0laRSAtIDEpKT4+UE1EX1NISUZUKQotCQkJIDw8IChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTsKLQlpZiAoc3RhcnRfcGZuIDwgKGJpZ19wYWdlX3N0YXJ0ID4+IFBBR0VfU0hJRlQpKQotCQlzdGFydF9wZm4gPSAgYmlnX3BhZ2Vfc3RhcnQgPj4gUEFHRV9TSElGVDsKLQllbmRfcGZuID0gKGVuZD4+UE1EX1NISUZUKSA8PCAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7Ci0JaWYgKHN0YXJ0X3BmbiA8IGVuZF9wZm4pCi0JCWtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX2luaXQocGdkX2Jhc2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwKLQkJCQkJICAgICB1c2VfcHNlKTsKLQotCS8qIHRhaWwgaXMgbm90IGJpZyBwYWdlIGFsaWdubWVudCA/ICovCi0Jc3RhcnRfcGZuID0gZW5kX3BmbjsKLQlpZiAoc3RhcnRfcGZuID4gKGJpZ19wYWdlX3N0YXJ0Pj5QQUdFX1NISUZUKSkgewotCQllbmRfcGZuID0gZW5kID4+IFBBR0VfU0hJRlQ7Ci0JCWlmIChzdGFydF9wZm4gPCBlbmRfcGZuKQotCQkJa2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdChwZ2RfYmFzZSwgc3RhcnRfcGZuLAotCQkJCQkJCSBlbmRfcGZuLCAwKTsKLQl9Ci0KLQllYXJseV9pb3JlbWFwX3BhZ2VfdGFibGVfcmFuZ2VfaW5pdChwZ2RfYmFzZSk7Ci0KLQlsb2FkX2NyMyhzd2FwcGVyX3BnX2Rpcik7Ci0KLQlfX2ZsdXNoX3RsYl9hbGwoKTsKLQotCWlmICghYWZ0ZXJfaW5pdF9ib290bWVtKQotCQlyZXNlcnZlX2Vhcmx5KHRhYmxlX3N0YXJ0IDw8IFBBR0VfU0hJRlQsCi0JCQkJIHRhYmxlX2VuZCA8PCBQQUdFX1NISUZULCAiUEdUQUJMRSIpOwotCi0JaWYgKCFhZnRlcl9pbml0X2Jvb3RtZW0pCi0JCWVhcmx5X21lbXRlc3Qoc3RhcnQsIGVuZCk7Ci0KLQlyZXR1cm4gZW5kID4+IFBBR0VfU0hJRlQ7CisJYWZ0ZXJfYm9vdG1lbSA9IDE7CiB9CiAKLQogLyoKICAqIHBhZ2luZ19pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMgLSBub3RlIHRoYXQgdGhlIGZpcnN0IDhNQiBhcmUKICAqIGFscmVhZHkgbWFwcGVkIGJ5IGhlYWQuUy4KQEAgLTEyMTcsMTMgKzEwOTIsNiBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLXZvaWQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCWZyZWVfaW5pdF9wYWdlcygiaW5pdHJkIG1lbW9yeSIsIHN0YXJ0LCBlbmQpOwotfQotI2VuZGlmCi0KIGludCBfX2luaXQgcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWModW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJCQkgICBpbnQgZmxhZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKaW5kZXggMDdmNDRkNC4uNTRlZmE1N2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXRfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL251bWEuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9pbml0Lmg+CiAKIC8qCiAgKiBlbmRfcGZuIG9ubHkgaW5jbHVkZXMgUkFNLCB3aGlsZSBtYXhfcGZuX21hcHBlZCBpbmNsdWRlcyBhbGwgZTgyMCBlbnRyaWVzLgpAQCAtNjEsMTIgKzYyLDYgQEAKIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIAotaW50IGRpcmVjdF9nYnBhZ2VzCi0jaWZkZWYgQ09ORklHX0RJUkVDVF9HQlBBR0VTCi0JCQkJPSAxCi0jZW5kaWYKLTsKLQogc3RhdGljIGludCBfX2luaXQgcGFyc2VfZGlyZWN0X2dicGFnZXNfb2ZmKGNoYXIgKmFyZykKIHsKIAlkaXJlY3RfZ2JwYWdlcyA9IDA7CkBAIC04NywxMiArODIsMTAgQEAKICAqIGFyb3VuZCB3aXRob3V0IGNoZWNraW5nIHRoZSBwZ2QgZXZlcnkgdGltZS4KICAqLwogCi1pbnQgYWZ0ZXJfYm9vdG1lbTsKLQogcHRldmFsX3QgX19zdXBwb3J0ZWRfcHRlX21hc2sgX19yZWFkX21vc3RseSA9IH5fUEFHRV9JT01BUDsKIEVYUE9SVF9TWU1CT0xfR1BMKF9fc3VwcG9ydGVkX3B0ZV9tYXNrKTsKIAotc3RhdGljIGludCBkb19ub3RfbnggX19jcHVpbml0ZGF0YTsKK3N0YXRpYyBpbnQgZGlzYWJsZV9ueCBfX2NwdWluaXRkYXRhOwogCiAvKgogICogbm9leGVjPW9ufG9mZgpAQCAtMTA3LDkgKzEwMCw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghc3RybmNtcChzdHIsICJvbiIsIDIpKSB7CiAJCV9fc3VwcG9ydGVkX3B0ZV9tYXNrIHw9IF9QQUdFX05YOwotCQlkb19ub3RfbnggPSAwOworCQlkaXNhYmxlX254ID0gMDsKIAl9IGVsc2UgaWYgKCFzdHJuY21wKHN0ciwgIm9mZiIsIDMpKSB7Ci0JCWRvX25vdF9ueCA9IDE7CisJCWRpc2FibGVfbnggPSAxOwogCQlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfTlg7CiAJfQogCXJldHVybiAwOwpAQCAtMTIxLDcgKzExNCw3IEBACiAJdW5zaWduZWQgbG9uZyBlZmVyOwogCiAJcmRtc3JsKE1TUl9FRkVSLCBlZmVyKTsKLQlpZiAoIShlZmVyICYgRUZFUl9OWCkgfHwgZG9fbm90X254KQorCWlmICghKGVmZXIgJiBFRkVSX05YKSB8fCBkaXNhYmxlX254KQogCQlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfTlg7CiB9CiAKQEAgLTMyNSwxMyArMzE4LDkgQEAKIAl9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgdGFibGVfc3RhcnQ7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX21lbWluaXRkYXRhIHRhYmxlX2VuZDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdGRhdGEgdGFibGVfdG9wOwotCiBzdGF0aWMgX19yZWYgdm9pZCAqYWxsb2NfbG93X3BhZ2UodW5zaWduZWQgbG9uZyAqcGh5cykKIHsKLQl1bnNpZ25lZCBsb25nIHBmbiA9IHRhYmxlX2VuZCsrOworCXVuc2lnbmVkIGxvbmcgcGZuID0gZTgyMF90YWJsZV9lbmQrKzsKIAl2b2lkICphZHI7CiAKIAlpZiAoYWZ0ZXJfYm9vdG1lbSkgewpAQCAtMzQxLDcgKzMzMCw3IEBACiAJCXJldHVybiBhZHI7CiAJfQogCi0JaWYgKHBmbiA+PSB0YWJsZV90b3ApCisJaWYgKHBmbiA+PSBlODIwX3RhYmxlX3RvcCkKIAkJcGFuaWMoImFsbG9jX2xvd19wYWdlOiByYW4gb3V0IG9mIG1lbW9yeSIpOwogCiAJYWRyID0gZWFybHlfbWVtcmVtYXAocGZuICogUEFHRV9TSVpFLCBQQUdFX1NJWkUpOwpAQCAtNTgxLDU4ICs1NzAsMTAgQEAKIAlyZXR1cm4gcGh5c19wdWRfaW5pdChwdWQsIGFkZHIsIGVuZCwgcGFnZV9zaXplX21hc2spOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZmluZF9lYXJseV90YWJsZV9zcGFjZSh1bnNpZ25lZCBsb25nIGVuZCwgaW50IHVzZV9wc2UsCi0JCQkJCSAgaW50IHVzZV9nYnBhZ2VzKQotewotCXVuc2lnbmVkIGxvbmcgcHVkcywgcG1kcywgcHRlcywgdGFibGVzLCBzdGFydDsKLQotCXB1ZHMgPSAoZW5kICsgUFVEX1NJWkUgLSAxKSA+PiBQVURfU0hJRlQ7Ci0JdGFibGVzID0gcm91bmR1cChwdWRzICogc2l6ZW9mKHB1ZF90KSwgUEFHRV9TSVpFKTsKLQlpZiAodXNlX2dicGFnZXMpIHsKLQkJdW5zaWduZWQgbG9uZyBleHRyYTsKLQkJZXh0cmEgPSBlbmQgLSAoKGVuZD4+UFVEX1NISUZUKSA8PCBQVURfU0hJRlQpOwotCQlwbWRzID0gKGV4dHJhICsgUE1EX1NJWkUgLSAxKSA+PiBQTURfU0hJRlQ7Ci0JfSBlbHNlCi0JCXBtZHMgPSAoZW5kICsgUE1EX1NJWkUgLSAxKSA+PiBQTURfU0hJRlQ7Ci0JdGFibGVzICs9IHJvdW5kdXAocG1kcyAqIHNpemVvZihwbWRfdCksIFBBR0VfU0laRSk7Ci0KLQlpZiAodXNlX3BzZSkgewotCQl1bnNpZ25lZCBsb25nIGV4dHJhOwotCQlleHRyYSA9IGVuZCAtICgoZW5kPj5QTURfU0hJRlQpIDw8IFBNRF9TSElGVCk7Ci0JCXB0ZXMgPSAoZXh0cmEgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwotCX0gZWxzZQotCQlwdGVzID0gKGVuZCArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7Ci0JdGFibGVzICs9IHJvdW5kdXAocHRlcyAqIHNpemVvZihwdGVfdCksIFBBR0VfU0laRSk7Ci0KLQkvKgotCSAqIFJFRC1QRU4gcHV0dGluZyBwYWdlIHRhYmxlcyBvbmx5IG9uIG5vZGUgMCBjb3VsZAotCSAqIGNhdXNlIGEgaG90c3BvdCBhbmQgZmlsbCB1cCBaT05FX0RNQS4gVGhlIHBhZ2UgdGFibGVzCi0JICogbmVlZCByb3VnaGx5IDAuNUtCIHBlciBHQi4KLQkgKi8KLQlzdGFydCA9IDB4ODAwMDsKLQl0YWJsZV9zdGFydCA9IGZpbmRfZTgyMF9hcmVhKHN0YXJ0LCBlbmQsIHRhYmxlcywgUEFHRV9TSVpFKTsKLQlpZiAodGFibGVfc3RhcnQgPT0gLTFVTCkKLQkJcGFuaWMoIkNhbm5vdCBmaW5kIHNwYWNlIGZvciB0aGUga2VybmVsIHBhZ2UgdGFibGVzIik7Ci0KLQl0YWJsZV9zdGFydCA+Pj0gUEFHRV9TSElGVDsKLQl0YWJsZV9lbmQgPSB0YWJsZV9zdGFydDsKLQl0YWJsZV90b3AgPSB0YWJsZV9zdGFydCArICh0YWJsZXMgPj4gUEFHRV9TSElGVCk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAia2VybmVsIGRpcmVjdCBtYXBwaW5nIHRhYmxlcyB1cCB0byAlbHggQCAlbHgtJWx4XG4iLAotCQllbmQsIHRhYmxlX3N0YXJ0IDw8IFBBR0VfU0hJRlQsIHRhYmxlX3RvcCA8PCBQQUdFX1NISUZUKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGluaXRfZ2JwYWdlcyh2b2lkKQotewotCWlmIChkaXJlY3RfZ2JwYWdlcyAmJiBjcHVfaGFzX2dicGFnZXMpCi0JCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIEdCIHBhZ2VzIGZvciBkaXJlY3QgbWFwcGluZ1xuIik7Ci0JZWxzZQotCQlkaXJlY3RfZ2JwYWdlcyA9IDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdCBrZXJuZWxfcGh5c2ljYWxfbWFwcGluZ19pbml0KHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJCQl1bnNpZ25lZCBsb25nIGVuZCwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgcGFnZV9zaXplX21hc2spCit1bnNpZ25lZCBsb25nIF9faW5pdAora2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJICAgICB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemVfbWFzaykKIHsKIAogCXVuc2lnbmVkIGxvbmcgbmV4dCwgbGFzdF9tYXBfYWRkciA9IGVuZDsKQEAgLTY2OSwxNzYgKzYxMCw2IEBACiAJcmV0dXJuIGxhc3RfbWFwX2FkZHI7CiB9CiAKLXN0cnVjdCBtYXBfcmFuZ2UgewotCXVuc2lnbmVkIGxvbmcgc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBlbmQ7Ci0JdW5zaWduZWQgcGFnZV9zaXplX21hc2s7Ci19OwotCi0jZGVmaW5lIE5SX1JBTkdFX01SIDUKLQotc3RhdGljIGludCBzYXZlX21yKHN0cnVjdCBtYXBfcmFuZ2UgKm1yLCBpbnQgbnJfcmFuZ2UsCi0JCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sCi0JCSAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplX21hc2spCi17Ci0KLQlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikgewotCQlpZiAobnJfcmFuZ2UgPj0gTlJfUkFOR0VfTVIpCi0JCQlwYW5pYygicnVuIG91dCBvZiByYW5nZSBmb3IgaW5pdF9tZW1vcnlfbWFwcGluZ1xuIik7Ci0JCW1yW25yX3JhbmdlXS5zdGFydCA9IHN0YXJ0X3Bmbjw8UEFHRV9TSElGVDsKLQkJbXJbbnJfcmFuZ2VdLmVuZCAgID0gZW5kX3Bmbjw8UEFHRV9TSElGVDsKLQkJbXJbbnJfcmFuZ2VdLnBhZ2Vfc2l6ZV9tYXNrID0gcGFnZV9zaXplX21hc2s7Ci0JCW5yX3JhbmdlKys7Ci0JfQotCi0JcmV0dXJuIG5yX3JhbmdlOwotfQotCi0vKgotICogU2V0dXAgdGhlIGRpcmVjdCBtYXBwaW5nIG9mIHRoZSBwaHlzaWNhbCBtZW1vcnkgYXQgUEFHRV9PRkZTRVQuCi0gKiBUaGlzIHJ1bnMgYmVmb3JlIGJvb3RtZW0gaXMgaW5pdGlhbGl6ZWQgYW5kIGdldHMgcGFnZXMgZGlyZWN0bHkgZnJvbQotICogdGhlIHBoeXNpY2FsIG1lbW9yeS4gVG8gYWNjZXNzIHRoZW0gdGhleSBhcmUgdGVtcG9yYXJpbHkgbWFwcGVkLgotICovCi11bnNpZ25lZCBsb25nIF9faW5pdF9yZWZvayBpbml0X21lbW9yeV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQl1bnNpZ25lZCBsb25nIGxhc3RfbWFwX2FkZHIgPSAwOwotCXVuc2lnbmVkIGxvbmcgcGFnZV9zaXplX21hc2sgPSAwOwotCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOwotCXVuc2lnbmVkIGxvbmcgcG9zOwotCi0Jc3RydWN0IG1hcF9yYW5nZSBtcltOUl9SQU5HRV9NUl07Ci0JaW50IG5yX3JhbmdlLCBpOwotCWludCB1c2VfcHNlLCB1c2VfZ2JwYWdlczsKLQotCXByaW50ayhLRVJOX0lORk8gImluaXRfbWVtb3J5X21hcHBpbmc6ICUwMTZseC0lMDE2bHhcbiIsIHN0YXJ0LCBlbmQpOwotCi0JLyoKLQkgKiBGaW5kIHNwYWNlIGZvciB0aGUga2VybmVsIGRpcmVjdCBtYXBwaW5nIHRhYmxlcy4KLQkgKgotCSAqIExhdGVyIHdlIHNob3VsZCBhbGxvY2F0ZSB0aGVzZSB0YWJsZXMgaW4gdGhlIGxvY2FsIG5vZGUgb2YgdGhlCi0JICogbWVtb3J5IG1hcHBlZC4gVW5mb3J0dW5hdGVseSB0aGlzIGlzIGRvbmUgY3VycmVudGx5IGJlZm9yZSB0aGUKLQkgKiBub2RlcyBhcmUgZGlzY292ZXJlZC4KLQkgKi8KLQlpZiAoIWFmdGVyX2Jvb3RtZW0pCi0JCWluaXRfZ2JwYWdlcygpOwotCi0jaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwotCS8qCi0JICogRm9yIENPTkZJR19ERUJVR19QQUdFQUxMT0MsIGlkZW50aXR5IG1hcHBpbmcgd2lsbCB1c2Ugc21hbGwgcGFnZXMuCi0JICogVGhpcyB3aWxsIHNpbXBsaWZ5IGNwYSgpLCB3aGljaCBvdGhlcndpc2UgbmVlZHMgdG8gc3VwcG9ydCBzcGxpdHRpbmcKLQkgKiBsYXJnZSBwYWdlcyBpbnRvIHNtYWxsIGluIGludGVycnVwdCBjb250ZXh0LCBldGMuCi0JICovCi0JdXNlX3BzZSA9IHVzZV9nYnBhZ2VzID0gMDsKLSNlbHNlCi0JdXNlX3BzZSA9IGNwdV9oYXNfcHNlOwotCXVzZV9nYnBhZ2VzID0gZGlyZWN0X2dicGFnZXM7Ci0jZW5kaWYKLQotCWlmICh1c2VfZ2JwYWdlcykKLQkJcGFnZV9zaXplX21hc2sgfD0gMSA8PCBQR19MRVZFTF8xRzsKLQlpZiAodXNlX3BzZSkKLQkJcGFnZV9zaXplX21hc2sgfD0gMSA8PCBQR19MRVZFTF8yTTsKLQotCW1lbXNldChtciwgMCwgc2l6ZW9mKG1yKSk7Ci0JbnJfcmFuZ2UgPSAwOwotCi0JLyogaGVhZCBpZiBub3QgYmlnIHBhZ2UgYWxpZ25tZW50ID8qLwotCXN0YXJ0X3BmbiA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7Ci0JcG9zID0gc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7Ci0JZW5kX3BmbiA9ICgocG9zICsgKFBNRF9TSVpFIC0gMSkpID4+IFBNRF9TSElGVCkKLQkJCTw8IChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTsKLQlpZiAoZW5kX3BmbiA+IChlbmQgPj4gUEFHRV9TSElGVCkpCi0JCWVuZF9wZm4gPSBlbmQgPj4gUEFHRV9TSElGVDsKLQlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikgewotCQlucl9yYW5nZSA9IHNhdmVfbXIobXIsIG5yX3JhbmdlLCBzdGFydF9wZm4sIGVuZF9wZm4sIDApOwotCQlwb3MgPSBlbmRfcGZuIDw8IFBBR0VfU0hJRlQ7Ci0JfQotCi0JLyogYmlnIHBhZ2UgKDJNKSByYW5nZSovCi0Jc3RhcnRfcGZuID0gKChwb3MgKyAoUE1EX1NJWkUgLSAxKSk+PlBNRF9TSElGVCkKLQkJCSA8PCAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7Ci0JZW5kX3BmbiA9ICgocG9zICsgKFBVRF9TSVpFIC0gMSkpPj5QVURfU0hJRlQpCi0JCQkgPDwgKFBVRF9TSElGVCAtIFBBR0VfU0hJRlQpOwotCWlmIChlbmRfcGZuID4gKChlbmQ+PlBNRF9TSElGVCk8PChQTURfU0hJRlQgLSBQQUdFX1NISUZUKSkpCi0JCWVuZF9wZm4gPSAoKGVuZD4+UE1EX1NISUZUKTw8KFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpKTsKLQlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikgewotCQlucl9yYW5nZSA9IHNhdmVfbXIobXIsIG5yX3JhbmdlLCBzdGFydF9wZm4sIGVuZF9wZm4sCi0JCQkJcGFnZV9zaXplX21hc2sgJiAoMTw8UEdfTEVWRUxfMk0pKTsKLQkJcG9zID0gZW5kX3BmbiA8PCBQQUdFX1NISUZUOwotCX0KLQotCS8qIGJpZyBwYWdlICgxRykgcmFuZ2UgKi8KLQlzdGFydF9wZm4gPSAoKHBvcyArIChQVURfU0laRSAtIDEpKT4+UFVEX1NISUZUKQotCQkJIDw8IChQVURfU0hJRlQgLSBQQUdFX1NISUZUKTsKLQllbmRfcGZuID0gKGVuZCA+PiBQVURfU0hJRlQpIDw8IChQVURfU0hJRlQgLSBQQUdFX1NISUZUKTsKLQlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikgewotCQlucl9yYW5nZSA9IHNhdmVfbXIobXIsIG5yX3JhbmdlLCBzdGFydF9wZm4sIGVuZF9wZm4sCi0JCQkJcGFnZV9zaXplX21hc2sgJgotCQkJCSAoKDE8PFBHX0xFVkVMXzJNKXwoMTw8UEdfTEVWRUxfMUcpKSk7Ci0JCXBvcyA9IGVuZF9wZm4gPDwgUEFHRV9TSElGVDsKLQl9Ci0KLQkvKiB0YWlsIGlzIG5vdCBiaWcgcGFnZSAoMUcpIGFsaWdubWVudCAqLwotCXN0YXJ0X3BmbiA9ICgocG9zICsgKFBNRF9TSVpFIC0gMSkpPj5QTURfU0hJRlQpCi0JCQkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOwotCWVuZF9wZm4gPSAoZW5kID4+IFBNRF9TSElGVCkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOwotCWlmIChzdGFydF9wZm4gPCBlbmRfcGZuKSB7Ci0JCW5yX3JhbmdlID0gc2F2ZV9tcihtciwgbnJfcmFuZ2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwKLQkJCQlwYWdlX3NpemVfbWFzayAmICgxPDxQR19MRVZFTF8yTSkpOwotCQlwb3MgPSBlbmRfcGZuIDw8IFBBR0VfU0hJRlQ7Ci0JfQotCi0JLyogdGFpbCBpcyBub3QgYmlnIHBhZ2UgKDJNKSBhbGlnbm1lbnQgKi8KLQlzdGFydF9wZm4gPSBwb3M+PlBBR0VfU0hJRlQ7Ci0JZW5kX3BmbiA9IGVuZD4+UEFHRV9TSElGVDsKLQlucl9yYW5nZSA9IHNhdmVfbXIobXIsIG5yX3JhbmdlLCBzdGFydF9wZm4sIGVuZF9wZm4sIDApOwotCi0JLyogdHJ5IHRvIG1lcmdlIHNhbWUgcGFnZSBzaXplIGFuZCBjb250aW51b3VzICovCi0JZm9yIChpID0gMDsgbnJfcmFuZ2UgPiAxICYmIGkgPCBucl9yYW5nZSAtIDE7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIG9sZF9zdGFydDsKLQkJaWYgKG1yW2ldLmVuZCAhPSBtcltpKzFdLnN0YXJ0IHx8Ci0JCSAgICBtcltpXS5wYWdlX3NpemVfbWFzayAhPSBtcltpKzFdLnBhZ2Vfc2l6ZV9tYXNrKQotCQkJY29udGludWU7Ci0JCS8qIG1vdmUgaXQgKi8KLQkJb2xkX3N0YXJ0ID0gbXJbaV0uc3RhcnQ7Ci0JCW1lbW1vdmUoJm1yW2ldLCAmbXJbaSsxXSwKLQkJCSAobnJfcmFuZ2UgLSAxIC0gaSkgKiBzaXplb2YgKHN0cnVjdCBtYXBfcmFuZ2UpKTsKLQkJbXJbaS0tXS5zdGFydCA9IG9sZF9zdGFydDsKLQkJbnJfcmFuZ2UtLTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAlMDEwbHggLSAlMDEwbHggcGFnZSAlc1xuIiwKLQkJCQltcltpXS5zdGFydCwgbXJbaV0uZW5kLAotCQkJKG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrICYgKDE8PFBHX0xFVkVMXzFHKSk/IjFHIjooCi0JCQkgKG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrICYgKDE8PFBHX0xFVkVMXzJNKSk/IjJNIjoiNGsiKSk7Ci0KLQlpZiAoIWFmdGVyX2Jvb3RtZW0pCi0JCWZpbmRfZWFybHlfdGFibGVfc3BhY2UoZW5kLCB1c2VfcHNlLCB1c2VfZ2JwYWdlcyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKLQkJbGFzdF9tYXBfYWRkciA9IGtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX2luaXQoCi0JCQkJCW1yW2ldLnN0YXJ0LCBtcltpXS5lbmQsCi0JCQkJCW1yW2ldLnBhZ2Vfc2l6ZV9tYXNrKTsKLQotCWlmICghYWZ0ZXJfYm9vdG1lbSkKLQkJbW11X2NyNF9mZWF0dXJlcyA9IHJlYWRfY3I0KCk7Ci0JX19mbHVzaF90bGJfYWxsKCk7Ci0KLQlpZiAoIWFmdGVyX2Jvb3RtZW0gJiYgdGFibGVfZW5kID4gdGFibGVfc3RhcnQpCi0JCXJlc2VydmVfZWFybHkodGFibGVfc3RhcnQgPDwgUEFHRV9TSElGVCwKLQkJCQkgdGFibGVfZW5kIDw8IFBBR0VfU0hJRlQsICJQR1RBQkxFIik7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJsYXN0X21hcF9hZGRyOiAlbHggZW5kOiAlbHhcbiIsCi0JCQkgbGFzdF9tYXBfYWRkciwgZW5kKTsKLQotCWlmICghYWZ0ZXJfYm9vdG1lbSkKLQkJZWFybHlfbWVtdGVzdChzdGFydCwgZW5kKTsKLQotCXJldHVybiBsYXN0X21hcF9hZGRyID4+IFBBR0VfU0hJRlQ7Ci19Ci0KICNpZm5kZWYgQ09ORklHX05VTUEKIHZvaWQgX19pbml0IGluaXRtZW1faW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQogewpAQCAtOTEwLDI4ICs2ODEsNiBAQAogCiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCiAKLS8qCi0gKiBkZXZtZW1faXNfYWxsb3dlZCgpIGNoZWNrcyB0byBzZWUgaWYgL2Rldi9tZW0gYWNjZXNzIHRvIGEgY2VydGFpbiBhZGRyZXNzCi0gKiBpcyB2YWxpZC4gVGhlIGFyZ3VtZW50IGlzIGEgcGh5c2ljYWwgcGFnZSBudW1iZXIuCi0gKgotICoKLSAqIE9uIHg4NiwgYWNjZXNzIGhhcyB0byBiZSBnaXZlbiB0byB0aGUgZmlyc3QgbWVnYWJ5dGUgb2YgcmFtIGJlY2F1c2UgdGhhdCBhcmVhCi0gKiBjb250YWlucyBiaW9zIGNvZGUgYW5kIGRhdGEgcmVnaW9ucyB1c2VkIGJ5IFggYW5kIGRvc2VtdSBhbmQgc2ltaWxhciBhcHBzLgotICogQWNjZXNzIGhhcyB0byBiZSBnaXZlbiB0byBub24ta2VybmVsLXJhbSBhcmVhcyBhcyB3ZWxsLCB0aGVzZSBjb250YWluIHRoZSBQQ0kKLSAqIG1taW8gcmVzb3VyY2VzIGFzIHdlbGwgYXMgcG90ZW50aWFsIGJpb3MvYWNwaSBkYXRhIHJlZ2lvbnMuCi0gKi8KLWludCBkZXZtZW1faXNfYWxsb3dlZCh1bnNpZ25lZCBsb25nIHBhZ2VucikKLXsKLQlpZiAocGFnZW5yIDw9IDI1NikKLQkJcmV0dXJuIDE7Ci0JaWYgKGlvbWVtX2lzX2V4Y2x1c2l2ZShwYWdlbnIgPDwgUEFHRV9TSElGVCkpCi0JCXJldHVybiAwOwotCWlmICghcGFnZV9pc19yYW0ocGFnZW5yKSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLQogc3RhdGljIHN0cnVjdCBrY29yZV9saXN0IGtjb3JlX21lbSwga2NvcmVfdm1hbGxvYywga2NvcmVfa2VybmVsLAogCQkJIGtjb3JlX21vZHVsZXMsIGtjb3JlX3ZzeXNjYWxsOwogCkBAIC0xMDE5LDEzICs3NjgsNiBAQAogCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotdm9pZCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JZnJlZV9pbml0X3BhZ2VzKCJpbml0cmQgbWVtb3J5Iiwgc3RhcnQsIGVuZCk7Ci19Ci0jZW5kaWYKLQogaW50IF9faW5pdCByZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyh1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQkJCSAgIGludCBmbGFncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2lvbWFwXzMyLmMgYi9hcmNoL3g4Ni9tbS9pb21hcF8zMi5jCmluZGV4IDA0MTAyZDQuLjY5OWM5YjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2lvbWFwXzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaW9tYXBfMzIuYwpAQCAtMzEsMTYgKzMxLDI3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc19pb19tYXBwaW5nX3Bvc3NpYmxlKTsKIAotLyogTWFwICdwZm4nIHVzaW5nIGZpeGVkIG1hcCAndHlwZScgYW5kIHByb3RlY3Rpb25zICdwcm90JwotICovCi12b2lkICoKLWlvbWFwX2F0b21pY19wcm90X3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUsIHBncHJvdF90IHByb3QpCit2b2lkICprbWFwX2F0b21pY19wcm90X3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUsIHBncHJvdF90IHByb3QpCiB7CiAJZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4OwogCXVuc2lnbmVkIGxvbmcgdmFkZHI7CiAKIAlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCisJaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIgKiBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KTsKKwlzZXRfcHRlKGttYXBfcHRlIC0gaWR4LCBwZm5fcHRlKHBmbiwgcHJvdCkpOworCWFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSgpOworCisJcmV0dXJuICh2b2lkICopdmFkZHI7Cit9CisKKy8qCisgKiBNYXAgJ3BmbicgdXNpbmcgZml4ZWQgbWFwICd0eXBlJyBhbmQgcHJvdGVjdGlvbnMgJ3Byb3QnCisgKi8KK3ZvaWQgKgoraW9tYXBfYXRvbWljX3Byb3RfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIGttX3R5cGUgdHlwZSwgcGdwcm90X3QgcHJvdCkKK3sKIAkvKgogCSAqIEZvciBub24tUEFUIHN5c3RlbXMsIHByb21vdGUgUEFHRV9LRVJORUxfV0MgdG8gUEFHRV9LRVJORUxfVUNfTUlOVVMuCiAJICogUEFHRV9LRVJORUxfV0MgbWFwcyB0byBQV1QsIHdoaWNoIHRyYW5zbGF0ZXMgdG8gdW5jYWNoZWQgaWYgdGhlCkBAIC01MCwxMiArNjEsNyBAQAogCWlmICghcGF0X2VuYWJsZWQgJiYgcGdwcm90X3ZhbChwcm90KSA9PSBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMX1dDKSkKIAkJcHJvdCA9IFBBR0VfS0VSTkVMX1VDX01JTlVTOwogCi0JaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIqc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXZhZGRyID0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCk7Ci0Jc2V0X3B0ZShrbWFwX3B0ZS1pZHgsIHBmbl9wdGUocGZuLCBwcm90KSk7Ci0JYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKCk7Ci0KLQlyZXR1cm4gKHZvaWQqKSB2YWRkcjsKKwlyZXR1cm4ga21hcF9hdG9taWNfcHJvdF9wZm4ocGZuLCB0eXBlLCBwcm90KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2F0b21pY19wcm90X3Bmbik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2lvcmVtYXAuYyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwppbmRleCA0MzNmN2JkLi4wZGZhMDlkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCkBAIC0yMiwxMyArMjIsMTcgQEAKICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9wYXQuaD4KIAotI2lmZGVmIENPTkZJR19YODZfNjQKLQotc3RhdGljIGlubGluZSBpbnQgcGh5c19hZGRyX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyBpbmxpbmUgaW50IHBoeXNfYWRkcl92YWxpZChyZXNvdXJjZV9zaXplX3QgYWRkcikKIHsKLQlyZXR1cm4gYWRkciA8ICgxVUwgPDwgYm9vdF9jcHVfZGF0YS54ODZfcGh5c19iaXRzKTsKKyNpZmRlZiBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQKKwlyZXR1cm4gIShhZGRyID4+IGJvb3RfY3B1X2RhdGEueDg2X3BoeXNfYml0cyk7CisjZWxzZQorCXJldHVybiAxOworI2VuZGlmCiB9CiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisKIHVuc2lnbmVkIGxvbmcgX19waHlzX2FkZHIodW5zaWduZWQgbG9uZyB4KQogewogCWlmICh4ID49IF9fU1RBUlRfS0VSTkVMX21hcCkgewpAQCAtMzgsOCArNDIsNyBAQAogCX0gZWxzZSB7CiAJCVZJUlRVQUxfQlVHX09OKHggPCBQQUdFX09GRlNFVCk7CiAJCXggLT0gUEFHRV9PRkZTRVQ7Ci0JCVZJUlRVQUxfQlVHX09OKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORyA/IHggPiBNQVhNRU0gOgotCQkJCQkhcGh5c19hZGRyX3ZhbGlkKHgpKTsKKwkJVklSVFVBTF9CVUdfT04oIXBoeXNfYWRkcl92YWxpZCh4KSk7CiAJfQogCXJldHVybiB4OwogfQpAQCAtNTYsMTAgKzU5LDggQEAKIAkJaWYgKHggPCBQQUdFX09GRlNFVCkKIAkJCXJldHVybiBmYWxzZTsKIAkJeCAtPSBQQUdFX09GRlNFVDsKLQkJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORyA/Ci0JCQkJeCA+IE1BWE1FTSA6ICFwaHlzX2FkZHJfdmFsaWQoeCkpIHsKKwkJaWYgKCFwaHlzX2FkZHJfdmFsaWQoeCkpCiAJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KIAl9CiAKIAlyZXR1cm4gcGZuX3ZhbGlkKHggPj4gUEFHRV9TSElGVCk7CkBAIC02OCwxOCArNjksMTIgQEAKIAogI2Vsc2UKIAotc3RhdGljIGlubGluZSBpbnQgcGh5c19hZGRyX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gMTsKLX0KLQogI2lmZGVmIENPTkZJR19ERUJVR19WSVJUVUFMCiB1bnNpZ25lZCBsb25nIF9fcGh5c19hZGRyKHVuc2lnbmVkIGxvbmcgeCkKIHsKLQkvKiBWTUFMTE9DXyogYXJlbid0IGNvbnN0YW50czsgbm90IGF2YWlsYWJsZSBhdCB0aGUgYm9vdCB0aW1lICovCisJLyogVk1BTExPQ18qIGFyZW4ndCBjb25zdGFudHMgICovCiAJVklSVFVBTF9CVUdfT04oeCA8IFBBR0VfT0ZGU0VUKTsKLQlWSVJUVUFMX0JVR19PTihzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX0JPT1RJTkcgJiYKLQkJaXNfdm1hbGxvY19hZGRyKCh2b2lkICopIHgpKTsKKwlWSVJUVUFMX0JVR19PTihfX3ZtYWxsb2Nfc3RhcnRfc2V0ICYmIGlzX3ZtYWxsb2NfYWRkcigodm9pZCAqKSB4KSk7CiAJcmV0dXJuIHggLSBQQUdFX09GRlNFVDsKIH0KIEVYUE9SVF9TWU1CT0woX19waHlzX2FkZHIpOwpAQCAtODksNyArODQsOSBAQAogewogCWlmICh4IDwgUEFHRV9PRkZTRVQpCiAJCXJldHVybiBmYWxzZTsKLQlpZiAoc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9CT09USU5HICYmIGlzX3ZtYWxsb2NfYWRkcigodm9pZCAqKSB4KSkKKwlpZiAoX192bWFsbG9jX3N0YXJ0X3NldCAmJiBpc192bWFsbG9jX2FkZHIoKHZvaWQgKikgeCkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoeCA+PSBGSVhBRERSX1NUQVJUKQogCQlyZXR1cm4gZmFsc2U7CiAJcmV0dXJuIHBmbl92YWxpZCgoeCAtIFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUKTsKIH0KQEAgLTUwOCwxMyArNTA1LDE5IEBACiAJcmV0dXJuICZibV9wdGVbcHRlX2luZGV4KGFkZHIpXTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgc2xvdF92aXJ0W0ZJWF9CVE1BUFNfU0xPVFNdIF9faW5pdGRhdGE7CisKIHZvaWQgX19pbml0IGVhcmx5X2lvcmVtYXBfaW5pdCh2b2lkKQogewogCXBtZF90ICpwbWQ7CisJaW50IGk7CiAKIAlpZiAoZWFybHlfaW9yZW1hcF9kZWJ1ZykKIAkJcHJpbnRrKEtFUk5fSU5GTyAiZWFybHlfaW9yZW1hcF9pbml0KClcbiIpOwogCisJZm9yIChpID0gMDsgaSA8IEZJWF9CVE1BUFNfU0xPVFM7IGkrKykKKwkJc2xvdF92aXJ0W2ldID0gX19maXhfdG9fdmlydChGSVhfQlRNQVBfQkVHSU4gLSBOUl9GSVhfQlRNQVBTKmkpOworCiAJcG1kID0gZWFybHlfaW9yZW1hcF9wbWQoZml4X3RvX3ZpcnQoRklYX0JUTUFQX0JFR0lOKSk7CiAJbWVtc2V0KGJtX3B0ZSwgMCwgc2l6ZW9mKGJtX3B0ZSkpOwogCXBtZF9wb3B1bGF0ZV9rZXJuZWwoJmluaXRfbW0sIHBtZCwgYm1fcHRlKTsKQEAgLTU4MSw2ICs1ODQsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2lvbWVtICpwcmV2X21hcFtGSVhfQlRNQVBTX1NMT1RTXSBfX2luaXRkYXRhOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgcHJldl9zaXplW0ZJWF9CVE1BUFNfU0xPVFNdIF9faW5pdGRhdGE7CisKIHN0YXRpYyBpbnQgX19pbml0IGNoZWNrX2Vhcmx5X2lvcmVtYXBfbGVhayh2b2lkKQogewogCWludCBjb3VudCA9IDA7CkBAIC02MDIsNyArNjA2LDggQEAKIH0KIGxhdGVfaW5pdGNhbGwoY2hlY2tfZWFybHlfaW9yZW1hcF9sZWFrKTsKIAotc3RhdGljIHZvaWQgX19pbml0IF9faW9tZW0gKl9fZWFybHlfaW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQorc3RhdGljIHZvaWQgX19pbml0IF9faW9tZW0gKgorX19lYXJseV9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCiB7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQsIGxhc3RfYWRkcjsKIAl1bnNpZ25lZCBpbnQgbnJwYWdlczsKQEAgLTY2OCw5ICs2NzMsOSBAQAogCQktLW5ycGFnZXM7CiAJfQogCWlmIChlYXJseV9pb3JlbWFwX2RlYnVnKQotCQlwcmludGsoS0VSTl9DT05UICIlMDhseCArICUwOGx4XG4iLCBvZmZzZXQsIGZpeF90b192aXJ0KGlkeDApKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiJTA4bHggKyAlMDhseFxuIiwgb2Zmc2V0LCBzbG90X3ZpcnRbc2xvdF0pOwogCi0JcHJldl9tYXBbc2xvdF0gPSAodm9pZCBfX2lvbWVtICopKG9mZnNldCArIGZpeF90b192aXJ0KGlkeDApKTsKKwlwcmV2X21hcFtzbG90XSA9ICh2b2lkIF9faW9tZW0gKikob2Zmc2V0ICsgc2xvdF92aXJ0W3Nsb3RdKTsKIAlyZXR1cm4gcHJldl9tYXBbc2xvdF07CiB9CiAKQEAgLTczOCw4ICs3NDMsMyBAQAogCX0KIAlwcmV2X21hcFtzbG90XSA9IE5VTEw7CiB9Ci0KLXZvaWQgX190aGlzX2ZpeG1hcF9kb2VzX25vdF9leGlzdCh2b2lkKQotewotCVdBUk5fT04oMSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9rbW1pby5jIGIvYXJjaC94ODYvbW0va21taW8uYwppbmRleCA2YTUxOGRkLi40ZjExNWUwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9rbW1pby5jCisrKyBiL2FyY2gveDg2L21tL2ttbWlvLmMKQEAgLTMxMCw3ICszMTAsNyBAQAogCXN0cnVjdCBrbW1pb19jb250ZXh0ICpjdHggPSAmZ2V0X2NwdV92YXIoa21taW9fY3R4KTsKIAogCWlmICghY3R4LT5hY3RpdmUpIHsKLQkJcHJfd2FybmluZygia21taW86IHNwdXJpb3VzIGRlYnVnIHRyYXAgb24gQ1BVICVkLlxuIiwKKwkJcHJfZGVidWcoImttbWlvOiBzcHVyaW91cyBkZWJ1ZyB0cmFwIG9uIENQVSAlZC5cbiIsCiAJCQkJCQkJc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkJZ290byBvdXQ7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbWVtdGVzdC5jIGIvYXJjaC94ODYvbW0vbWVtdGVzdC5jCmluZGV4IDBiY2Q3ODguLjYwNWM4YmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL21lbXRlc3QuYworKysgYi9hcmNoL3g4Ni9tbS9tZW10ZXN0LmMKQEAgLTEwMCw2ICsxMDAsOSBAQAogewogCWlmIChhcmcpCiAJCW1lbXRlc3RfcGF0dGVybiA9IHNpbXBsZV9zdHJ0b3VsKGFyZywgTlVMTCwgMCk7CisJZWxzZQorCQltZW10ZXN0X3BhdHRlcm4gPSBBUlJBWV9TSVpFKHBhdHRlcm5zKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9udW1hXzMyLmMgYi9hcmNoL3g4Ni9tbS9udW1hXzMyLmMKaW5kZXggNDUxZmU5NS4uM2RhZWZhMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbnVtYV8zMi5jCisrKyBiL2FyY2gveDg2L21tL251bWFfMzIuYwpAQCAtNDE2LDEwICs0MTYsMTEgQEAKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpCiAJCXByb3BhZ2F0ZV9lODIwX21hcF9ub2RlKG5pZCk7CiAKLQlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpCisJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7CiAJCW1lbXNldChOT0RFX0RBVEEobmlkKSwgMCwgc2l6ZW9mKHN0cnVjdCBwZ2xpc3RfZGF0YSkpOworCQlOT0RFX0RBVEEobmlkKS0+YmRhdGEgPSAmYm9vdG1lbV9ub2RlX2RhdGFbbmlkXTsKKwl9CiAKLQlOT0RFX0RBVEEoMCktPmJkYXRhID0gJmJvb3RtZW1fbm9kZV9kYXRhWzBdOwogCXNldHVwX2Jvb3RtZW1fYWxsb2NhdG9yKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMgYi9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCmluZGV4IDljNDI5NDkuLmQ3MWUxYjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKKysrIGIvYXJjaC94ODYvbW0vcGFnZWF0dHIuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CkBAIC0zMyw2ICszNCw3IEBACiAJdW5zaWduZWQgbG9uZwlwZm47CiAJdW5zaWduZWQJZm9yY2Vfc3BsaXQgOiAxOwogCWludAkJY3VycGFnZTsKKwlzdHJ1Y3QgcGFnZQkqKnBhZ2VzOwogfTsKIAogLyoKQEAgLTQ1LDYgKzQ3LDcgQEAKIAogI2RlZmluZSBDUEFfRkxVU0hUTEIgMQogI2RlZmluZSBDUEFfQVJSQVkgMgorI2RlZmluZSBDUEFfUEFHRVNfQVJSQVkgNAogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRpcmVjdF9wYWdlc19jb3VudFtQR19MRVZFTF9OVU1dOwpAQCAtOTUsNyArOTgsNyBAQAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaGlnaG1hcF9lbmRfcGZuKHZvaWQpCiB7Ci0JcmV0dXJuIF9fcGEocm91bmR1cCgodW5zaWduZWQgbG9uZylfZW5kLCBQTURfU0laRSkpID4+IFBBR0VfU0hJRlQ7CisJcmV0dXJuIF9fcGEocm91bmR1cChfYnJrX2VuZCwgUE1EX1NJWkUpKSA+PiBQQUdFX1NISUZUOwogfQogCiAjZW5kaWYKQEAgLTIwMSwxMCArMjA0LDEwIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBjcGFfZmx1c2hfYXJyYXkodW5zaWduZWQgbG9uZyAqc3RhcnQsIGludCBudW1wYWdlcywgaW50IGNhY2hlKQorc3RhdGljIHZvaWQgY3BhX2ZsdXNoX2FycmF5KHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCBpbnQgbnVtcGFnZXMsIGludCBjYWNoZSwKKwkJCSAgICBpbnQgaW5fZmxhZ3MsIHN0cnVjdCBwYWdlICoqcGFnZXMpCiB7CiAJdW5zaWduZWQgaW50IGksIGxldmVsOwotCXVuc2lnbmVkIGxvbmcgKmFkZHI7CiAKIAlCVUdfT04oaXJxc19kaXNhYmxlZCgpKTsKIApAQCAtMjI1LDE0ICsyMjgsMjIgQEAKIAkgKiB3aWxsIGNhdXNlIGFsbCBvdGhlciBDUFVzIHRvIGZsdXNoIHRoZSBzYW1lCiAJICogY2FjaGVsaW5lczoKIAkgKi8KLQlmb3IgKGkgPSAwLCBhZGRyID0gc3RhcnQ7IGkgPCBudW1wYWdlczsgaSsrLCBhZGRyKyspIHsKLQkJcHRlX3QgKnB0ZSA9IGxvb2t1cF9hZGRyZXNzKCphZGRyLCAmbGV2ZWwpOworCWZvciAoaSA9IDA7IGkgPCBudW1wYWdlczsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwkJcHRlX3QgKnB0ZTsKKworCQlpZiAoaW5fZmxhZ3MgJiBDUEFfUEFHRVNfQVJSQVkpCisJCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2VzW2ldKTsKKwkJZWxzZQorCQkJYWRkciA9IHN0YXJ0W2ldOworCisJCXB0ZSA9IGxvb2t1cF9hZGRyZXNzKGFkZHIsICZsZXZlbCk7CiAKIAkJLyoKIAkJICogT25seSBmbHVzaCBwcmVzZW50IGFkZHJlc3NlczoKIAkJICovCiAJCWlmIChwdGUgJiYgKHB0ZV92YWwoKnB0ZSkgJiBfUEFHRV9QUkVTRU5UKSkKLQkJCWNsZmx1c2hfY2FjaGVfcmFuZ2UoKHZvaWQgKikgKmFkZHIsIFBBR0VfU0laRSk7CisJCQljbGZsdXNoX2NhY2hlX3JhbmdlKCh2b2lkICopYWRkciwgUEFHRV9TSVpFKTsKIAl9CiB9CiAKQEAgLTU4NCw3ICs1OTUsOSBAQAogCXVuc2lnbmVkIGludCBsZXZlbDsKIAlwdGVfdCAqa3B0ZSwgb2xkX3B0ZTsKIAotCWlmIChjcGEtPmZsYWdzICYgQ1BBX0FSUkFZKQorCWlmIChjcGEtPmZsYWdzICYgQ1BBX1BBR0VTX0FSUkFZKQorCQlhZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKGNwYS0+cGFnZXNbY3BhLT5jdXJwYWdlXSk7CisJZWxzZSBpZiAoY3BhLT5mbGFncyAmIENQQV9BUlJBWSkKIAkJYWRkcmVzcyA9IGNwYS0+dmFkZHJbY3BhLT5jdXJwYWdlXTsKIAllbHNlCiAJCWFkZHJlc3MgPSAqY3BhLT52YWRkcjsKQEAgLTY4Nyw3ICs3MDAsOSBAQAogCSAqIE5vIG5lZWQgdG8gcmVkbywgd2hlbiB0aGUgcHJpbWFyeSBjYWxsIHRvdWNoZWQgdGhlIGRpcmVjdAogCSAqIG1hcHBpbmcgYWxyZWFkeToKIAkgKi8KLQlpZiAoY3BhLT5mbGFncyAmIENQQV9BUlJBWSkKKwlpZiAoY3BhLT5mbGFncyAmIENQQV9QQUdFU19BUlJBWSkKKwkJdmFkZHIgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MoY3BhLT5wYWdlc1tjcGEtPmN1cnBhZ2VdKTsKKwllbHNlIGlmIChjcGEtPmZsYWdzICYgQ1BBX0FSUkFZKQogCQl2YWRkciA9IGNwYS0+dmFkZHJbY3BhLT5jdXJwYWdlXTsKIAllbHNlCiAJCXZhZGRyID0gKmNwYS0+dmFkZHI7CkBAIC02OTgsNyArNzEzLDcgQEAKIAkJYWxpYXNfY3BhID0gKmNwYTsKIAkJdGVtcF9jcGFfdmFkZHIgPSAodW5zaWduZWQgbG9uZykgX192YShjcGEtPnBmbiA8PCBQQUdFX1NISUZUKTsKIAkJYWxpYXNfY3BhLnZhZGRyID0gJnRlbXBfY3BhX3ZhZGRyOwotCQlhbGlhc19jcGEuZmxhZ3MgJj0gfkNQQV9BUlJBWTsKKwkJYWxpYXNfY3BhLmZsYWdzICY9IH4oQ1BBX1BBR0VTX0FSUkFZIHwgQ1BBX0FSUkFZKTsKIAogCiAJCXJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKCZhbGlhc19jcGEsIDApOwpAQCAtNzExLDcgKzcyNiw3IEBACiAJICogTm8gbmVlZCB0byByZWRvLCB3aGVuIHRoZSBwcmltYXJ5IGNhbGwgdG91Y2hlZCB0aGUgaGlnaAogCSAqIG1hcHBpbmcgYWxyZWFkeToKIAkgKi8KLQlpZiAod2l0aGluKHZhZGRyLCAodW5zaWduZWQgbG9uZykgX3RleHQsICh1bnNpZ25lZCBsb25nKSBfZW5kKSkKKwlpZiAod2l0aGluKHZhZGRyLCAodW5zaWduZWQgbG9uZykgX3RleHQsIF9icmtfZW5kKSkKIAkJcmV0dXJuIDA7CiAKIAkvKgpAQCAtNzI0LDcgKzczOSw3IEBACiAJYWxpYXNfY3BhID0gKmNwYTsKIAl0ZW1wX2NwYV92YWRkciA9IChjcGEtPnBmbiA8PCBQQUdFX1NISUZUKSArIF9fU1RBUlRfS0VSTkVMX21hcCAtIHBoeXNfYmFzZTsKIAlhbGlhc19jcGEudmFkZHIgPSAmdGVtcF9jcGFfdmFkZHI7Ci0JYWxpYXNfY3BhLmZsYWdzICY9IH5DUEFfQVJSQVk7CisJYWxpYXNfY3BhLmZsYWdzICY9IH4oQ1BBX1BBR0VTX0FSUkFZIHwgQ1BBX0FSUkFZKTsKIAogCS8qCiAJICogVGhlIGhpZ2ggbWFwcGluZyByYW5nZSBpcyBpbXByZWNpc2UsIHNvIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlLgpAQCAtNzQ1LDcgKzc2MCw3IEBACiAJCSAqLwogCQljcGEtPm51bXBhZ2VzID0gbnVtcGFnZXM7CiAJCS8qIGZvciBhcnJheSBjaGFuZ2VzLCB3ZSBjYW4ndCB1c2UgbGFyZ2UgcGFnZSAqLwotCQlpZiAoY3BhLT5mbGFncyAmIENQQV9BUlJBWSkKKwkJaWYgKGNwYS0+ZmxhZ3MgJiAoQ1BBX0FSUkFZIHwgQ1BBX1BBR0VTX0FSUkFZKSkKIAkJCWNwYS0+bnVtcGFnZXMgPSAxOwogCiAJCWlmICghZGVidWdfcGFnZWFsbG9jKQpAQCAtNzY5LDcgKzc4NCw3IEBACiAJCSAqLwogCQlCVUdfT04oY3BhLT5udW1wYWdlcyA+IG51bXBhZ2VzKTsKIAkJbnVtcGFnZXMgLT0gY3BhLT5udW1wYWdlczsKLQkJaWYgKGNwYS0+ZmxhZ3MgJiBDUEFfQVJSQVkpCisJCWlmIChjcGEtPmZsYWdzICYgKENQQV9QQUdFU19BUlJBWSB8IENQQV9BUlJBWSkpCiAJCQljcGEtPmN1cnBhZ2UrKzsKIAkJZWxzZQogCQkJKmNwYS0+dmFkZHIgKz0gY3BhLT5udW1wYWdlcyAqIFBBR0VfU0laRTsKQEAgLTc4Niw3ICs4MDEsOCBAQAogCiBzdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsCiAJCQkJICAgIHBncHJvdF90IG1hc2tfc2V0LCBwZ3Byb3RfdCBtYXNrX2NsciwKLQkJCQkgICAgaW50IGZvcmNlX3NwbGl0LCBpbnQgYXJyYXkpCisJCQkJICAgIGludCBmb3JjZV9zcGxpdCwgaW50IGluX2ZsYWcsCisJCQkJICAgIHN0cnVjdCBwYWdlICoqcGFnZXMpCiB7CiAJc3RydWN0IGNwYV9kYXRhIGNwYTsKIAlpbnQgcmV0LCBjYWNoZSwgY2hlY2thbGlhczsKQEAgLTgwMSwxNSArODE3LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBFbnN1cmUgd2UgYXJlIFBBR0VfU0laRSBhbGlnbmVkICovCi0JaWYgKCFhcnJheSkgewotCQlpZiAoKmFkZHIgJiB+UEFHRV9NQVNLKSB7Ci0JCQkqYWRkciAmPSBQQUdFX01BU0s7Ci0JCQkvKgotCQkJICogUGVvcGxlIHNob3VsZCBub3QgYmUgcGFzc2luZyBpbiB1bmFsaWduZWQgYWRkcmVzc2VzOgotCQkJICovCi0JCQlXQVJOX09OX09OQ0UoMSk7Ci0JCX0KLQl9IGVsc2UgeworCWlmIChpbl9mbGFnICYgQ1BBX0FSUkFZKSB7CiAJCWludCBpOwogCQlmb3IgKGkgPSAwOyBpIDwgbnVtcGFnZXM7IGkrKykgewogCQkJaWYgKGFkZHJbaV0gJiB+UEFHRV9NQVNLKSB7CkBAIC04MTcsNiArODI1LDE4IEBACiAJCQkJV0FSTl9PTl9PTkNFKDEpOwogCQkJfQogCQl9CisJfSBlbHNlIGlmICghKGluX2ZsYWcgJiBDUEFfUEFHRVNfQVJSQVkpKSB7CisJCS8qCisJCSAqIGluX2ZsYWcgb2YgQ1BBX1BBR0VTX0FSUkFZIGltcGxpZXMgaXQgaXMgYWxpZ25lZC4KKwkJICogTm8gbmVlZCB0byBjZWhjayBpbiB0aGF0IGNhc2UKKwkJICovCisJCWlmICgqYWRkciAmIH5QQUdFX01BU0spIHsKKwkJCSphZGRyICY9IFBBR0VfTUFTSzsKKwkJCS8qCisJCQkgKiBQZW9wbGUgc2hvdWxkIG5vdCBiZSBwYXNzaW5nIGluIHVuYWxpZ25lZCBhZGRyZXNzZXM6CisJCQkgKi8KKwkJCVdBUk5fT05fT05DRSgxKTsKKwkJfQogCX0KIAogCS8qIE11c3QgYXZvaWQgYWxpYXNpbmcgbWFwcGluZ3MgaW4gdGhlIGhpZ2htZW0gY29kZSAqLwpAQCAtODMyLDYgKzg1Miw3IEBACiAJYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKCk7CiAKIAljcGEudmFkZHIgPSBhZGRyOworCWNwYS5wYWdlcyA9IHBhZ2VzOwogCWNwYS5udW1wYWdlcyA9IG51bXBhZ2VzOwogCWNwYS5tYXNrX3NldCA9IG1hc2tfc2V0OwogCWNwYS5tYXNrX2NsciA9IG1hc2tfY2xyOwpAQCAtODM5LDggKzg2MCw4IEBACiAJY3BhLmN1cnBhZ2UgPSAwOwogCWNwYS5mb3JjZV9zcGxpdCA9IGZvcmNlX3NwbGl0OwogCi0JaWYgKGFycmF5KQotCQljcGEuZmxhZ3MgfD0gQ1BBX0FSUkFZOworCWlmIChpbl9mbGFnICYgKENQQV9BUlJBWSB8IENQQV9QQUdFU19BUlJBWSkpCisJCWNwYS5mbGFncyB8PSBpbl9mbGFnOwogCiAJLyogTm8gYWxpYXMgY2hlY2tpbmcgZm9yIF9OWCBiaXQgbW9kaWZpY2F0aW9ucyAqLwogCWNoZWNrYWxpYXMgPSAocGdwcm90X3ZhbChtYXNrX3NldCkgfCBwZ3Byb3RfdmFsKG1hc2tfY2xyKSkgIT0gX1BBR0VfTlg7CkBAIC04NjYsOSArODg3LDEwIEBACiAJICogd2JpbmR2KToKIAkgKi8KIAlpZiAoIXJldCAmJiBjcHVfaGFzX2NsZmx1c2gpIHsKLQkJaWYgKGNwYS5mbGFncyAmIENQQV9BUlJBWSkKLQkJCWNwYV9mbHVzaF9hcnJheShhZGRyLCBudW1wYWdlcywgY2FjaGUpOwotCQllbHNlCisJCWlmIChjcGEuZmxhZ3MgJiAoQ1BBX1BBR0VTX0FSUkFZIHwgQ1BBX0FSUkFZKSkgeworCQkJY3BhX2ZsdXNoX2FycmF5KGFkZHIsIG51bXBhZ2VzLCBjYWNoZSwKKwkJCQkJY3BhLmZsYWdzLCBwYWdlcyk7CisJCX0gZWxzZQogCQkJY3BhX2ZsdXNoX3JhbmdlKCphZGRyLCBudW1wYWdlcywgY2FjaGUpOwogCX0gZWxzZQogCQljcGFfZmx1c2hfYWxsKGNhY2hlKTsKQEAgLTg4OCwxNCArOTEwLDI4IEBACiAJCQkJICAgICAgIHBncHJvdF90IG1hc2ssIGludCBhcnJheSkKIHsKIAlyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKGFkZHIsIG51bXBhZ2VzLCBtYXNrLCBfX3BncHJvdCgwKSwgMCwKLQkJYXJyYXkpOworCQkoYXJyYXkgPyBDUEFfQVJSQVkgOiAwKSwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNoYW5nZV9wYWdlX2F0dHJfY2xlYXIodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IG51bXBhZ2VzLAogCQkJCQkgcGdwcm90X3QgbWFzaywgaW50IGFycmF5KQogewogCXJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoYWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBtYXNrLCAwLAotCQlhcnJheSk7CisJCShhcnJheSA/IENQQV9BUlJBWSA6IDApLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3BhX3NldF9wYWdlc19hcnJheShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtcGFnZXMsCisJCQkJICAgICAgIHBncHJvdF90IG1hc2spCit7CisJcmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihOVUxMLCBudW1wYWdlcywgbWFzaywgX19wZ3Byb3QoMCksIDAsCisJCUNQQV9QQUdFU19BUlJBWSwgcGFnZXMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcGFfY2xlYXJfcGFnZXNfYXJyYXkoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG51bXBhZ2VzLAorCQkJCQkgcGdwcm90X3QgbWFzaykKK3sKKwlyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKE5VTEwsIG51bXBhZ2VzLCBfX3BncHJvdCgwKSwgbWFzaywgMCwKKwkJQ1BBX1BBR0VTX0FSUkFZLCBwYWdlcyk7CiB9CiAKIGludCBfc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykKQEAgLTEwNDMsNyArMTA3OSw3IEBACiBpbnQgc2V0X21lbW9yeV80ayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykKIHsKIAlyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKCZhZGRyLCBudW1wYWdlcywgX19wZ3Byb3QoMCksCi0JCQkJCV9fcGdwcm90KDApLCAxLCAwKTsKKwkJCQkJX19wZ3Byb3QoMCksIDEsIDAsIE5VTEwpOwogfQogCiBpbnQgc2V0X3BhZ2VzX3VjKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpCkBAIC0xMDU0LDYgKzEwOTAsMzUgQEAKIH0KIEVYUE9SVF9TWU1CT0woc2V0X3BhZ2VzX3VjKTsKIAoraW50IHNldF9wYWdlc19hcnJheV91YyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgYWRkcmluYXJyYXkpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwl1bnNpZ25lZCBsb25nIGVuZDsKKwlpbnQgaTsKKwlpbnQgZnJlZV9pZHg7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRkcmluYXJyYXk7IGkrKykgeworCQlzdGFydCA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlc1tpXSk7CisJCWVuZCA9IHN0YXJ0ICsgUEFHRV9TSVpFOworCQlpZiAocmVzZXJ2ZV9tZW10eXBlKHN0YXJ0LCBlbmQsIF9QQUdFX0NBQ0hFX1VDX01JTlVTLCBOVUxMKSkKKwkJCWdvdG8gZXJyX291dDsKKwl9CisKKwlpZiAoY3BhX3NldF9wYWdlc19hcnJheShwYWdlcywgYWRkcmluYXJyYXksCisJCQlfX3BncHJvdChfUEFHRV9DQUNIRV9VQ19NSU5VUykpID09IDApIHsKKwkJcmV0dXJuIDA7IC8qIFN1Y2Nlc3MgKi8KKwl9CitlcnJfb3V0OgorCWZyZWVfaWR4ID0gaTsKKwlmb3IgKGkgPSAwOyBpIDwgZnJlZV9pZHg7IGkrKykgeworCQlzdGFydCA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlc1tpXSk7CisJCWVuZCA9IHN0YXJ0ICsgUEFHRV9TSVpFOworCQlmcmVlX21lbXR5cGUoc3RhcnQsIGVuZCk7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTChzZXRfcGFnZXNfYXJyYXlfdWMpOworCiBpbnQgc2V0X3BhZ2VzX3diKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOwpAQCAtMTA2Miw2ICsxMTI3LDI2IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNldF9wYWdlc193Yik7CiAKK2ludCBzZXRfcGFnZXNfYXJyYXlfd2Ioc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IGFkZHJpbmFycmF5KQoreworCWludCByZXR2YWw7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwl1bnNpZ25lZCBsb25nIGVuZDsKKwlpbnQgaTsKKworCXJldHZhbCA9IGNwYV9jbGVhcl9wYWdlc19hcnJheShwYWdlcywgYWRkcmluYXJyYXksCisJCQlfX3BncHJvdChfUEFHRV9DQUNIRV9NQVNLKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRkcmluYXJyYXk7IGkrKykgeworCQlzdGFydCA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlc1tpXSk7CisJCWVuZCA9IHN0YXJ0ICsgUEFHRV9TSVpFOworCQlmcmVlX21lbXR5cGUoc3RhcnQsIGVuZCk7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KK0VYUE9SVF9TWU1CT0woc2V0X3BhZ2VzX2FycmF5X3diKTsKKwogaW50IHNldF9wYWdlc194KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0LmMgYi9hcmNoL3g4Ni9tbS9wYXQuYwppbmRleCAyZWQzNzE1Li42NDAzMzllIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQuYworKysgYi9hcmNoL3g4Ni9tbS9wYXQuYwpAQCAtNjc3LDEwICs2NzcsMTEgQEAKIAlpc19yYW0gPSBwYXRfcGFnZXJhbmdlX2lzX3JhbShwYWRkciwgcGFkZHIgKyBzaXplKTsKIAogCS8qCi0JICogcmVzZXJ2ZV9wZm5fcmFuZ2UoKSBkb2Vzbid0IHN1cHBvcnQgUkFNIHBhZ2VzLgorCSAqIHJlc2VydmVfcGZuX3JhbmdlKCkgZG9lc24ndCBzdXBwb3J0IFJBTSBwYWdlcy4gTWFpbnRhaW4gdGhlIGN1cnJlbnQKKwkgKiBiZWhhdmlvciB3aXRoIFJBTSBwYWdlcyBieSByZXR1cm5pbmcgc3VjY2Vzcy4KIAkgKi8KIAlpZiAoaXNfcmFtICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKIAogCXJldCA9IHJlc2VydmVfbWVtdHlwZShwYWRkciwgcGFkZHIgKyBzaXplLCB3YW50X2ZsYWdzLCAmZmxhZ3MpOwogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlXzMyLmMgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlXzMyLmMKaW5kZXggZjJlNDc3Yy4uNDZjODgzNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGd0YWJsZV8zMi5jCisrKyBiL2FyY2gveDg2L21tL3BndGFibGVfMzIuYwpAQCAtNTAsNyArNTAsNyBAQAogCX0KIAlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIHZhZGRyKTsKIAlpZiAocHRlX3ZhbChwdGV2YWwpKQotCQlzZXRfcHRlX3ByZXNlbnQoJmluaXRfbW0sIHZhZGRyLCBwdGUsIHB0ZXZhbCk7CisJCXNldF9wdGVfYXQoJmluaXRfbW0sIHZhZGRyLCBwdGUsIHB0ZXZhbCk7CiAJZWxzZQogCQlwdGVfY2xlYXIoJmluaXRfbW0sIHZhZGRyLCBwdGUpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS90bGIuYyBiL2FyY2gveDg2L21tL3RsYi5jCmluZGV4IGE2NTRkNTkuLjgyMWU5NzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3RsYi5jCisrKyBiL2FyY2gveDg2L21tL3RsYi5jCkBAIC0xODcsMTEgKzE4Nyw2IEBACiAJCSAgICAgICBjcHVtYXNrLCBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSkpOwogCiAJLyoKLQkgKiBNYWtlIHRoZSBhYm92ZSBtZW1vcnkgb3BlcmF0aW9ucyBnbG9iYWxseSB2aXNpYmxlIGJlZm9yZQotCSAqIHNlbmRpbmcgdGhlIElQSS4KLQkgKi8KLQlzbXBfbWIoKTsKLQkvKgogCSAqIFdlIGhhdmUgdG8gc2VuZCB0aGUgSVBJIG9ubHkgdG8KIAkgKiBDUFVzIGFmZmVjdGVkLgogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2NvbW1vbi5jIGIvYXJjaC94ODYvcGNpL2NvbW1vbi5jCmluZGV4IDgyZDIyZmMuLjhjMzYyYjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9jb21tb24uYworKysgYi9hcmNoL3g4Ni9wY2kvY29tbW9uLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGNhbl9za2lwX3BjaXByb2JlX2RtaV90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgY2FuX3NraXBfcGNpcHJvYmVfZG1pX3RhYmxlW10gX19kZXZpbml0Y29uc3QgPSB7CiAvKgogICogU3lzdGVtcyB3aGVyZSBQQ0kgSU8gcmVzb3VyY2UgSVNBIGFsaWdubWVudCBjYW4gYmUgc2tpcHBlZAogICogd2hlbiB0aGUgSVNBIGVuYWJsZSBiaXQgaW4gdGhlIGJyaWRnZSBjb250cm9sIGlzIG5vdCBzZXQKQEAgLTE4Myw3ICsxODMsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2RldmluaXRkYXRhIHBjaXByb2JlX2RtaV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9fZGV2aW5pdGNvbnN0IHBjaXByb2JlX2RtaV90YWJsZVtdID0gewogI2lmZGVmIF9faTM4Nl9fCiAvKgogICogTGFwdG9wcyB3aGljaCBuZWVkIHBjaT1hc3NpZ24tYnVzc2VzIHRvIHNlZSBDYXJkYnVzIGNhcmRzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvZml4dXAuYyBiL2FyY2gveDg2L3BjaS9maXh1cC5jCmluZGV4IDdkMzg4ZDUuLjljNDk5MTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9maXh1cC5jCisrKyBiL2FyY2gveDg2L3BjaS9maXh1cC5jCkBAIC0zNTYsNyArMzU2LDcgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9maXh1cF92aWRlbyk7CiAKIAotc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9fZGV2aW5pdGRhdGEgbXNpX2s4dF9kbWlfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2RldmluaXRjb25zdCBtc2lfazh0X2RtaV90YWJsZVtdID0gewogCXsKIAkJLmlkZW50ID0gIk1TSS1LOFQtTmVvMkZpciIsCiAJCS5tYXRjaGVzID0gewpAQCAtNDEzLDcgKzQxMyw3IEBACiAgKi8KIHN0YXRpYyB1MTYgdG9zaGliYV9saW5lX3NpemU7CiAKLXN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2RldmluaXRkYXRhIHRvc2hpYmFfb2hjaTEzOTRfZG1pX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19kZXZpbml0Y29uc3QgdG9zaGliYV9vaGNpMTM5NF9kbWlfdGFibGVbXSA9IHsKIAl7CiAJCS5pZGVudCA9ICJUb3NoaWJhIFBTNSBiYXNlZCBsYXB0b3AiLAogCQkubWF0Y2hlcyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9pMzg2LmMgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCmluZGV4IDVlYWQ4MDguLmYyMzRhMzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9pMzg2LmMKKysrIGIvYXJjaC94ODYvcGNpL2kzODYuYwpAQCAtMzE5LDYgKzMxOSw5IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlmbGFncyA9IG5ld19mbGFnczsKKwkJdm1hLT52bV9wYWdlX3Byb3QgPSBfX3BncHJvdCgKKwkJCShwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSAmIH5fUEFHRV9DQUNIRV9NQVNLKSB8CisJCQlmbGFncyk7CiAJfQogCiAJaWYgKCgodm1hLT52bV9wZ29mZiA8IG1heF9sb3dfcGZuX21hcHBlZCkgfHwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tbXUuYyBiL2FyY2gveDg2L3hlbi9tbXUuYwppbmRleCBjYjZhZmE0Li5kYjM4MDJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vbW11LmMKKysrIGIvYXJjaC94ODYveGVuL21tdS5jCkBAIC0xNzIzLDkgKzE3MjMsOSBAQAogewogCXBtZF90ICprZXJuZWxfcG1kOwogCi0JaW5pdF9wZ190YWJsZXNfc3RhcnQgPSBfX3BhKHBnZCk7Ci0JaW5pdF9wZ190YWJsZXNfZW5kID0gX19wYShwZ2QpICsgeGVuX3N0YXJ0X2luZm8tPm5yX3B0X2ZyYW1lcypQQUdFX1NJWkU7Ci0JbWF4X3Bmbl9tYXBwZWQgPSBQRk5fRE9XTihpbml0X3BnX3RhYmxlc19lbmQgKyA1MTIqMTAyNCk7CisJbWF4X3Bmbl9tYXBwZWQgPSBQRk5fRE9XTihfX3BhKHhlbl9zdGFydF9pbmZvLT5wdF9iYXNlKSArCisJCQkJICB4ZW5fc3RhcnRfaW5mby0+bnJfcHRfZnJhbWVzICogUEFHRV9TSVpFICsKKwkJCQkgIDUxMioxMDI0KTsKIAogCWtlcm5lbF9wbWQgPSBtMnYocGdkW0tFUk5FTF9QR0RfQk9VTkRBUlldLnBnZCk7CiAJbWVtY3B5KGxldmVsMl9rZXJuZWxfcGd0LCBrZXJuZWxfcG1kLCBzaXplb2YocG1kX3QpICogUFRSU19QRVJfUE1EKTsKQEAgLTE4NzAsNyArMTg3MCw2IEBACiAKICNpZmRlZiBDT05GSUdfWDg2X1BBRQogCS5zZXRfcHRlX2F0b21pYyA9IHhlbl9zZXRfcHRlX2F0b21pYywKLQkuc2V0X3B0ZV9wcmVzZW50ID0geGVuX3NldF9wdGVfYXQsCiAJLnB0ZV9jbGVhciA9IHhlbl9wdGVfY2xlYXIsCiAJLnBtZF9jbGVhciA9IHhlbl9wbWRfY2xlYXIsCiAjZW5kaWYJLyogQ09ORklHX1g4Nl9QQUUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hYy5jIGIvZHJpdmVycy9hY3BpL2FjLmMKaW5kZXggOWI5MTdkYS4uODhlNDJhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjLmMKQEAgLTE5MSw3ICsxOTEsNiBAQAogCQkJCQkJICAgICBhY3BpX2FjX2Rpcik7CiAJCWlmICghYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQkJYWNwaV9kZXZpY2VfZGlyKGRldmljZSktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJfQogCiAJLyogJ3N0YXRlJyBbUl0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCmluZGV4IDY5Y2JjNTcuLjNiY2I1YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKKysrIGIvZHJpdmVycy9hY3BpL2JhdHRlcnkuYwpAQCAtNzYwLDcgKzc2MCw2IEBACiAJCQkJCQkgICAgIGFjcGlfYmF0dGVyeV9kaXIpOwogCQlpZiAoIWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKQogCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpLT5vd25lciA9IFRISVNfTU9EVUxFOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBBQ1BJX0JBVFRFUllfTlVNRklMRVM7ICsraSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jIGIvZHJpdmVycy9hY3BpL2J1dHRvbi5jCmluZGV4IDE3MWZkOTEuLmMyZjA2MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9idXR0b24uYworKysgYi9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKQEAgLTIwMCwxMiArMjAwLDEwIEBACiAKIAlpZiAoIWVudHJ5KQogCQlyZXR1cm4gLUVOT0RFVjsKLQllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpID0gcHJvY19ta2RpcihhY3BpX2RldmljZV9iaWQoZGV2aWNlKSwgZW50cnkpOwogCWlmICghYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpCiAJCXJldHVybiAtRU5PREVWOwotCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJLyogJ2luZm8nIFtSXSAqLwogCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YShBQ1BJX0JVVFRPTl9GSUxFX0lORk8sCkBAIC01MjIsNyArNTIwLDYgQEAKIAlhY3BpX2J1dHRvbl9kaXIgPSBwcm9jX21rZGlyKEFDUElfQlVUVE9OX0NMQVNTLCBhY3BpX3Jvb3RfZGlyKTsKIAlpZiAoIWFjcGlfYnV0dG9uX2RpcikKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JYWNwaV9idXR0b25fZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCXJlc3VsdCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9idXR0b25fZHJpdmVyKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX0JVVFRPTl9DTEFTUywgYWNwaV9yb290X2Rpcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZmFuLmMgYi9kcml2ZXJzL2FjcGkvZmFuLmMKaW5kZXggZWFhZWUxNi4uOGEwMjk0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2Zhbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9mYW4uYwpAQCAtMTkzLDcgKzE5Myw2IEBACiAJCQkJCQkgICAgIGFjcGlfZmFuX2Rpcik7CiAJCWlmICghYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQkJYWNwaV9kZXZpY2VfZGlyKGRldmljZSktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJfQogCiAJLyogJ3N0YXR1cycgW1IvV10gKi8KQEAgLTM0Nyw3ICszNDYsNiBAQAogCWFjcGlfZmFuX2RpciA9IHByb2NfbWtkaXIoQUNQSV9GQU5fQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOwogCWlmICghYWNwaV9mYW5fZGlyKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlhY3BpX2Zhbl9kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAjZW5kaWYKIAogCXJlc3VsdCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9mYW5fZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKaW5kZXggMGNjMmZkMy4uZmEyZjc0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKQEAgLTM1OSw3ICszNTksNiBAQAogCQlpZiAoIWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJLyogJ2luZm8nIFtSXSAqLwogCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YShBQ1BJX1BST0NFU1NPUl9GSUxFX0lORk8sCkBAIC0xMTM3LDcgKzExMzYsNiBAQAogCWFjcGlfcHJvY2Vzc29yX2RpciA9IHByb2NfbWtkaXIoQUNQSV9QUk9DRVNTT1JfQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOwogCWlmICghYWNwaV9wcm9jZXNzb3JfZGlyKQogCQlyZXR1cm4gLUVOT01FTTsKLQlhY3BpX3Byb2Nlc3Nvcl9kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAkvKgogCSAqIENoZWNrIHdoZXRoZXIgdGhlIHN5c3RlbSBpcyBETUkgdGFibGUuIElmIHllcywgT1NQTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Nicy5jIGIvZHJpdmVycy9hY3BpL3Nicy5jCmluZGV4IDYwNTBjZTQuLjU5YWZkNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zYnMuYworKysgYi9kcml2ZXJzL2FjcGkvc2JzLmMKQEAgLTQ4OCw3ICs0ODgsNiBAQAogCQlpZiAoISpkaXIpIHsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9Ci0JCSgqZGlyKS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAl9CiAKIAkvKiAnaW5mbycgW1JdICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jIGIvZHJpdmVycy9hY3BpL3RoZXJtYWwuYwppbmRleCA5OWU2ZjFmLi5jMTFmOWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKQEAgLTE1MDYsNyArMTUwNiw2IEBACiAJCQkJCQkgICAgIGFjcGlfdGhlcm1hbF9kaXIpOwogCQlpZiAoIWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKQogCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpLT5vd25lciA9IFRISVNfTU9EVUxFOwogCX0KIAogCS8qICdzdGF0ZScgW1JdICovCkBAIC0xODc1LDcgKzE4NzQsNiBAQAogCWFjcGlfdGhlcm1hbF9kaXIgPSBwcm9jX21rZGlyKEFDUElfVEhFUk1BTF9DTEFTUywgYWNwaV9yb290X2Rpcik7CiAJaWYgKCFhY3BpX3RoZXJtYWxfZGlyKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlhY3BpX3RoZXJtYWxfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3RoZXJtYWxfZHJpdmVyKTsKIAlpZiAocmVzdWx0IDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwppbmRleCBiYjVlZDA1Li42N2NjMzZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW8uYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwpAQCAtMTEyNSw4ICsxMTI1LDYgQEAKIAlpZiAoIWRldmljZV9kaXIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZGV2aWNlX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKLQogCS8qICdpbmZvJyBbUl0gKi8KIAllbnRyeSA9IHByb2NfY3JlYXRlX2RhdGEoImluZm8iLCBTX0lSVUdPLCBkZXZpY2VfZGlyLAogCQkJJmFjcGlfdmlkZW9fZGV2aWNlX2luZm9fZm9wcywgYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKTsKQEAgLTE0MDMsOCArMTQwMSw2IEBACiAJaWYgKCFkZXZpY2VfZGlyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRldmljZV9kaXItPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KIAkvKiAnaW5mbycgW1JdICovCiAJZW50cnkgPSBwcm9jX2NyZWF0ZV9kYXRhKCJpbmZvIiwgU19JUlVHTywgZGV2aWNlX2RpciwKIAkJCQkgJmFjcGlfdmlkZW9fYnVzX2luZm9fZm9wcywKQEAgLTIxMzEsNyArMjEyNyw2IEBACiAJYWNwaV92aWRlb19kaXIgPSBwcm9jX21rZGlyKEFDUElfVklERU9fQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOwogCWlmICghYWNwaV92aWRlb19kaXIpCiAJCXJldHVybiAtRU5PREVWOwotCWFjcGlfdmlkZW9fZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3ZpZGVvX2J1cyk7CiAJaWYgKHJlc3VsdCA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jcHUuYyBiL2RyaXZlcnMvYmFzZS9jcHUuYwppbmRleCA1YjI1N2E1Li5lNjJhNGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvY3B1LmMKKysrIGIvZHJpdmVycy9iYXNlL2NwdS5jCkBAIC0xMTksNyArMTE5LDcgQEAKICNkZWZpbmUJcHJpbnRfY3B1c19mdW5jKHR5cGUpIFwKIHN0YXRpYyBzc2l6ZV90IHByaW50X2NwdXNfIyN0eXBlKHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCVwKIHsJCQkJCQkJCQlcCi0JcmV0dXJuIHByaW50X2NwdXNfbWFwKGJ1ZiwgJmNwdV8jI3R5cGUjI19tYXApOwkJCVwKKwlyZXR1cm4gcHJpbnRfY3B1c19tYXAoYnVmLCBjcHVfIyN0eXBlIyNfbWFzayk7CQkJXAogfQkJCQkJCQkJCVwKIHN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSBhdHRyXyMjdHlwZSMjX21hcCA9IAkJXAogCV9TWVNERVZfQ0xBU1NfQVRUUih0eXBlLCAwNDQ0LCBwcmludF9jcHVzXyMjdHlwZSwgTlVMTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9pb21tdS5jIGIvZHJpdmVycy9iYXNlL2lvbW11LmMKaW5kZXggNWUwMzlkNC4uYzJkMWVlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2lvbW11LmMKKysrIGIvZHJpdmVycy9iYXNlL2lvbW11LmMKQEAgLTMxLDcgKzMxLDcgQEAKIAlpb21tdV9vcHMgPSBvcHM7CiB9CiAKLWJvb2wgaW9tbXVfZm91bmQoKQorYm9vbCBpb21tdV9mb3VuZCh2b2lkKQogewogCXJldHVybiBpb21tdV9vcHMgIT0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCmluZGV4IGUyNTUzNDEuLjY5YjRkZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvcmVzdW1lLXRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgIi4uL2Jhc2UuaCIKICNpbmNsdWRlICJwb3dlci5oIgpAQCAtMzQ5LDcgKzM1MCw4IEBACiAgKglFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSAibm9pcnEgcmVzdW1lIiBjYWxsYmFjayBmb3IgYWxsIGRldmljZXMgbWFya2VkCiAgKglhcyBEUE1fT0ZGX0lSUS4KICAqCi0gKglNdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgYW5kIG9ubHkgb25lIENQVSBydW5uaW5nLgorICoJTXVzdCBiZSBjYWxsZWQgdW5kZXIgZHBtX2xpc3RfbXR4LiAgRGV2aWNlIGRyaXZlcnMgc2hvdWxkIG5vdCByZWNlaXZlCisgKglpbnRlcnJ1cHRzIHdoaWxlIGl0J3MgYmVpbmcgZXhlY3V0ZWQuCiAgKi8KIHN0YXRpYyB2b2lkIGRwbV9wb3dlcl91cChwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CkBAIC0zNzAsMTQgKzM3MiwxMyBAQAogICoJZGV2aWNlX3Bvd2VyX3VwIC0gVHVybiBvbiBhbGwgZGV2aWNlcyB0aGF0IG5lZWQgc3BlY2lhbCBhdHRlbnRpb24uCiAgKglAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KICAqCi0gKglQb3dlciBvbiBzeXN0ZW0gZGV2aWNlcywgdGhlbiBkZXZpY2VzIHRoYXQgcmVxdWlyZWQgd2Ugc2h1dCB0aGVtIGRvd24KLSAqCXdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KLSAqCi0gKglNdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKglDYWxsIHRoZSAiZWFybHkiIHJlc3VtZSBoYW5kbGVycyBhbmQgZW5hYmxlIGRldmljZSBkcml2ZXJzIHRvIHJlY2VpdmUKKyAqCWludGVycnVwdHMuCiAgKi8KIHZvaWQgZGV2aWNlX3Bvd2VyX3VwKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlkcG1fcG93ZXJfdXAoc3RhdGUpOworCXJlc3VtZV9kZXZpY2VfaXJxcygpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2aWNlX3Bvd2VyX3VwKTsKIApAQCAtNjAyLDE2ICs2MDMsMTcgQEAKICAqCWRldmljZV9wb3dlcl9kb3duIC0gU2h1dCBkb3duIHNwZWNpYWwgZGV2aWNlcy4KICAqCUBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgogICoKLSAqCVBvd2VyIGRvd24gZGV2aWNlcyB0aGF0IHJlcXVpcmUgaW50ZXJydXB0cyB0byBiZSBkaXNhYmxlZC4KLSAqCVRoZW4gcG93ZXIgZG93biBzeXN0ZW0gZGV2aWNlcy4KKyAqCVByZXZlbnQgZGV2aWNlIGRyaXZlcnMgZnJvbSByZWNlaXZpbmcgaW50ZXJydXB0cyBhbmQgY2FsbCB0aGUgImxhdGUiCisgKglzdXNwZW5kIGhhbmRsZXJzLgogICoKLSAqCU11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCBhbmQgb25seSBvbmUgQ1BVIHJ1bm5pbmcuCisgKglNdXN0IGJlIGNhbGxlZCB1bmRlciBkcG1fbGlzdF9tdHguCiAgKi8KIGludCBkZXZpY2VfcG93ZXJfZG93bihwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCWludCBlcnJvciA9IDA7CiAKKwlzdXNwZW5kX2RldmljZV9pcnFzKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGRldiwgJmRwbV9saXN0LCBwb3dlci5lbnRyeSkgewogCQllcnJvciA9IHN1c3BlbmRfZGV2aWNlX25vaXJxKGRldiwgc3RhdGUpOwogCQlpZiAoZXJyb3IpIHsKQEAgLTYyMSw3ICs2MjMsNyBAQAogCQlkZXYtPnBvd2VyLnN0YXR1cyA9IERQTV9PRkZfSVJROwogCX0KIAlpZiAoZXJyb3IpCi0JCWRwbV9wb3dlcl91cChyZXN1bWVfZXZlbnQoc3RhdGUpKTsKKwkJZGV2aWNlX3Bvd2VyX3VwKHJlc3VtZV9ldmVudChzdGF0ZSkpOwogCXJldHVybiBlcnJvcjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9wb3dlcl9kb3duKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9zeXMuYyBiL2RyaXZlcnMvYmFzZS9zeXMuYwppbmRleCBjYmQzNmNmLi43NmNlNzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2Uvc3lzLmMKKysrIGIvZHJpdmVycy9iYXNlL3N5cy5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSAiYmFzZS5oIgogCkBAIC0zNjksNiArMzcwLDEzIEBACiAJc3RydWN0IHN5c2Rldl9kcml2ZXIgKmRydiwgKmVycl9kcnY7CiAJaW50IHJldDsKIAorCXByX2RlYnVnKCJDaGVja2luZyB3YWtlLXVwIGludGVycnVwdHNcbiIpOworCisJLyogUmV0dXJuIGVycm9yIGNvZGUgaWYgdGhlcmUgYXJlIGFueSB3YWtlLXVwIGludGVycnVwdHMgcGVuZGluZyAqLworCXJldCA9IGNoZWNrX3dha2V1cF9pcnFzKCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCXByX2RlYnVnKCJTdXNwZW5kaW5nIFN5c3RlbSBEZXZpY2VzXG4iKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShjbHMsICZzeXN0ZW1fa3NldC0+bGlzdCwga3NldC5rb2JqLmVudHJ5KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BzM3ZyYW0uYyBiL2RyaXZlcnMvYmxvY2svcHMzdnJhbS5jCmluZGV4IDM5M2VkNjcuLjhlZGRlZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcHMzdnJhbS5jCisrKyBiL2RyaXZlcnMvYmxvY2svcHMzdnJhbS5jCkBAIC01NTEsOCArNTUxLDYgQEAKIAkJZGV2X3dhcm4oJmRldi0+Y29yZSwgImZhaWxlZCB0byBjcmVhdGUgL3Byb2MgZW50cnlcbiIpOwogCQlyZXR1cm47CiAJfQotCi0JcGRlLT5vd25lciA9IFRISVNfTU9EVUxFOwogCXBkZS0+ZGF0YSA9IHByaXY7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKaW5kZXggN2E4OGRmZC4uZTkzZmM4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKQEAgLTE5NDQsNyArMTk0NCw3IEBACiAKIGludCBpcG1pX3NtaV9hZGRfcHJvY19lbnRyeShpcG1pX3NtaV90IHNtaSwgY2hhciAqbmFtZSwKIAkJCSAgICByZWFkX3Byb2NfdCAqcmVhZF9wcm9jLAotCQkJICAgIHZvaWQgKmRhdGEsIHN0cnVjdCBtb2R1bGUgKm93bmVyKQorCQkJICAgIHZvaWQgKmRhdGEpCiB7CiAJaW50ICAgICAgICAgICAgICAgICAgICBydiA9IDA7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKQEAgLTE5NzAsNyArMTk3MCw2IEBACiAJfSBlbHNlIHsKIAkJZmlsZS0+ZGF0YSA9IGRhdGE7CiAJCWZpbGUtPnJlYWRfcHJvYyA9IHJlYWRfcHJvYzsKLQkJZmlsZS0+b3duZXIgPSBvd25lcjsKIAogCQltdXRleF9sb2NrKCZzbWktPnByb2NfZW50cnlfbG9jayk7CiAJCS8qIFN0aWNrIGl0IG9uIHRoZSBsaXN0LiAqLwpAQCAtMTk5MywyMyArMTk5MiwyMSBAQAogCXNtaS0+cHJvY19kaXIgPSBwcm9jX21rZGlyKHNtaS0+cHJvY19kaXJfbmFtZSwgcHJvY19pcG1pX3Jvb3QpOwogCWlmICghc21pLT5wcm9jX2RpcikKIAkJcnYgPSAtRU5PTUVNOwotCWVsc2UKLQkJc21pLT5wcm9jX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCWlmIChydiA9PSAwKQogCQlydiA9IGlwbWlfc21pX2FkZF9wcm9jX2VudHJ5KHNtaSwgInN0YXRzIiwKIAkJCQkJICAgICBzdGF0X2ZpbGVfcmVhZF9wcm9jLAotCQkJCQkgICAgIHNtaSwgVEhJU19NT0RVTEUpOworCQkJCQkgICAgIHNtaSk7CiAKIAlpZiAocnYgPT0gMCkKIAkJcnYgPSBpcG1pX3NtaV9hZGRfcHJvY19lbnRyeShzbWksICJpcG1iIiwKIAkJCQkJICAgICBpcG1iX2ZpbGVfcmVhZF9wcm9jLAotCQkJCQkgICAgIHNtaSwgVEhJU19NT0RVTEUpOworCQkJCQkgICAgIHNtaSk7CiAKIAlpZiAocnYgPT0gMCkKIAkJcnYgPSBpcG1pX3NtaV9hZGRfcHJvY19lbnRyeShzbWksICJ2ZXJzaW9uIiwKIAkJCQkJICAgICB2ZXJzaW9uX2ZpbGVfcmVhZF9wcm9jLAotCQkJCQkgICAgIHNtaSwgVEhJU19NT0RVTEUpOworCQkJCQkgICAgIHNtaSk7CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogCXJldHVybiBydjsKQEAgLTQyNjUsNyArNDI2Miw2IEBACiAJICAgIHJldHVybiAtRU5PTUVNOwogCX0KIAotCXByb2NfaXBtaV9yb290LT5vd25lciA9IFRISVNfTU9EVUxFOwogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiAKIAlzZXR1cF90aW1lcigmaXBtaV90aW1lciwgaXBtaV90aW1lb3V0LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKaW5kZXggMzAwMDEzNS4uZTU4ZWE0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKQEAgLTI4OTksNyArMjg5OSw3IEBACiAKIAlydiA9IGlwbWlfc21pX2FkZF9wcm9jX2VudHJ5KG5ld19zbWktPmludGYsICJ0eXBlIiwKIAkJCQkgICAgIHR5cGVfZmlsZV9yZWFkX3Byb2MsCi0JCQkJICAgICBuZXdfc21pLCBUSElTX01PRFVMRSk7CisJCQkJICAgICBuZXdfc21pKTsKIAlpZiAocnYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiaXBtaV9zaTogVW5hYmxlIHRvIGNyZWF0ZSBwcm9jIGVudHJ5OiAlZFxuIiwKQEAgLTI5MDksNyArMjkwOSw3IEBACiAKIAlydiA9IGlwbWlfc21pX2FkZF9wcm9jX2VudHJ5KG5ld19zbWktPmludGYsICJzaV9zdGF0cyIsCiAJCQkJICAgICBzdGF0X2ZpbGVfcmVhZF9wcm9jLAotCQkJCSAgICAgbmV3X3NtaSwgVEhJU19NT0RVTEUpOworCQkJCSAgICAgbmV3X3NtaSk7CiAJaWYgKHJ2KSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgImlwbWlfc2k6IFVuYWJsZSB0byBjcmVhdGUgcHJvYyBlbnRyeTogJWRcbiIsCkBAIC0yOTE5LDcgKzI5MTksNyBAQAogCiAJcnYgPSBpcG1pX3NtaV9hZGRfcHJvY19lbnRyeShuZXdfc21pLT5pbnRmLCAicGFyYW1zIiwKIAkJCQkgICAgIHBhcmFtX3JlYWRfcHJvYywKLQkJCQkgICAgIG5ld19zbWksIFRISVNfTU9EVUxFKTsKKwkJCQkgICAgIG5ld19zbWkpOwogCWlmIChydikgewogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJpcG1pX3NpOiBVbmFibGUgdG8gY3JlYXRlIHByb2MgZW50cnk6ICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jhdy5jIGIvZHJpdmVycy9jaGFyL3Jhdy5jCmluZGV4IDk2YWRmMjguLjIwZDkwZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYXcuYworKysgYi9kcml2ZXJzL2NoYXIvcmF3LmMKQEAgLTkwLDYgKzkwLDcgQEAKIAlibGtkZXZfcHV0KGJkZXYsIGZpbHAtPmZfbW9kZSk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZyYXdfbXV0ZXgpOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKaW5kZXggOGYwZjdjNC4uNWYxYjU0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwpAQCAtNjgsNyArNjgsOCBAQAogICoJcG9pbnRpbmcgdG8gY29tcGxldGVseSB0aGUgd3JvbmcgcGxhY2UgZm9yIGV4YW1wbGUKICAqLwogc3RhdGljIHZvaWQgZG1pX3RhYmxlKHU4ICpidWYsIGludCBsZW4sIGludCBudW0sCi0JCSAgICAgIHZvaWQgKCpkZWNvZGUpKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICopKQorCQkgICAgICB2b2lkICgqZGVjb2RlKShjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqLCB2b2lkICopLAorCQkgICAgICB2b2lkICpwcml2YXRlX2RhdGEpCiB7CiAJdTggKmRhdGEgPSBidWY7CiAJaW50IGkgPSAwOwpAQCAtODksNyArOTAsNyBAQAogCQl3aGlsZSAoKGRhdGEgLSBidWYgPCBsZW4gLSAxKSAmJiAoZGF0YVswXSB8fCBkYXRhWzFdKSkKIAkJCWRhdGErKzsKIAkJaWYgKGRhdGEgLSBidWYgPCBsZW4gLSAxKQotCQkJZGVjb2RlKGRtKTsKKwkJCWRlY29kZShkbSwgcHJpdmF0ZV9kYXRhKTsKIAkJZGF0YSArPSAyOwogCQlpKys7CiAJfQpAQCAtOTksNyArMTAwLDggQEAKIHN0YXRpYyB1MTYgZG1pX2xlbjsKIHN0YXRpYyB1MTYgZG1pX251bTsKIAotc3RhdGljIGludCBfX2luaXQgZG1pX3dhbGtfZWFybHkodm9pZCAoKmRlY29kZSkoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKikpCitzdGF0aWMgaW50IF9faW5pdCBkbWlfd2Fsa19lYXJseSh2b2lkICgqZGVjb2RlKShjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqLAorCQl2b2lkICopKQogewogCXU4ICpidWY7CiAKQEAgLTEwNyw3ICsxMDksNyBAQAogCWlmIChidWYgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCi0JZG1pX3RhYmxlKGJ1ZiwgZG1pX2xlbiwgZG1pX251bSwgZGVjb2RlKTsKKwlkbWlfdGFibGUoYnVmLCBkbWlfbGVuLCBkbWlfbnVtLCBkZWNvZGUsIE5VTEwpOwogCiAJZG1pX2lvdW5tYXAoYnVmLCBkbWlfbGVuKTsKIAlyZXR1cm4gMDsKQEAgLTI5NSw3ICsyOTcsNyBAQAogICoJYW5kIG1hY2hpbmUgZW50cmllcy4gRm9yIDIuNSB3ZSBzaG91bGQgcHVsbCB0aGUgc21idXMgY29udHJvbGxlciBpbmZvCiAgKglvdXQgb2YgaGVyZS4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IGRtaV9kZWNvZGUoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtKQorc3RhdGljIHZvaWQgX19pbml0IGRtaV9kZWNvZGUoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtLCB2b2lkICpkdW1teSkKIHsKIAlzd2l0Y2goZG0tPnR5cGUpIHsKIAljYXNlIDA6CQkvKiBCSU9TIEluZm9ybWF0aW9uICovCkBAIC01OTgsMTAgKzYwMCwxMiBAQAogLyoqCiAgKglkbWlfd2FsayAtIFdhbGsgdGhlIERNSSB0YWJsZSBhbmQgZ2V0IGNhbGxlZCBiYWNrIGZvciBldmVyeSByZWNvcmQKICAqCUBkZWNvZGU6IENhbGxiYWNrIGZ1bmN0aW9uCisgKglAcHJpdmF0ZV9kYXRhOiBQcml2YXRlIGRhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbgogICoKICAqCVJldHVybnMgLTEgd2hlbiB0aGUgRE1JIHRhYmxlIGNhbid0IGJlIHJlYWNoZWQsIDAgb24gc3VjY2Vzcy4KICAqLwotaW50IGRtaV93YWxrKHZvaWQgKCpkZWNvZGUpKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICopKQoraW50IGRtaV93YWxrKHZvaWQgKCpkZWNvZGUpKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICosIHZvaWQgKiksCisJICAgICB2b2lkICpwcml2YXRlX2RhdGEpCiB7CiAJdTggKmJ1ZjsKIApAQCAtNjEyLDcgKzYxNiw3IEBACiAJaWYgKGJ1ZiA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAKLQlkbWlfdGFibGUoYnVmLCBkbWlfbGVuLCBkbWlfbnVtLCBkZWNvZGUpOworCWRtaV90YWJsZShidWYsIGRtaV9sZW4sIGRtaV9udW0sIGRlY29kZSwgcHJpdmF0ZV9kYXRhKTsKIAogCWlvdW5tYXAoYnVmKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hdGlfcGNpZ2FydC5jIGIvZHJpdmVycy9ncHUvZHJtL2F0aV9wY2lnYXJ0LmMKaW5kZXggYzUzM2QwYy4uNjI4ZWFlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2F0aV9wY2lnYXJ0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2F0aV9wY2lnYXJ0LmMKQEAgLTc3LDcgKzc3LDcgQEAKIAkJCWlmICghZW50cnktPmJ1c2FkZHJbaV0pCiAJCQkJYnJlYWs7CiAJCQlwY2lfdW5tYXBfcGFnZShkZXYtPnBkZXYsIGVudHJ5LT5idXNhZGRyW2ldLAotCQkJCQkgUEFHRV9TSVpFLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQkJIFBBR0VfU0laRSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAkJfQogCiAJCWlmIChnYXJ0X2luZm8tPmdhcnRfdGFibGVfbG9jYXRpb24gPT0gRFJNX0FUSV9HQVJUX01BSU4pCkBAIC05NSwxMyArOTUsMTQgQEAKIAogaW50IGRybV9hdGlfcGNpZ2FydF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYXRpX3BjaWdhcnRfaW5mbyAqZ2FydF9pbmZvKQogeworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXAgPSAmZ2FydF9pbmZvLT5tYXBwaW5nOwogCXN0cnVjdCBkcm1fc2dfbWVtICplbnRyeSA9IGRldi0+c2c7CiAJdm9pZCAqYWRkcmVzcyA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBwYWdlczsKLQl1MzIgKnBjaV9nYXJ0LCBwYWdlX2Jhc2U7CisJdTMyICpwY2lfZ2FydCA9IE5VTEwsIHBhZ2VfYmFzZSwgZ2FydF9pZHg7CiAJZG1hX2FkZHJfdCBidXNfYWRkcmVzcyA9IDA7CiAJaW50IGksIGosIHJldCA9IDA7Ci0JaW50IG1heF9wYWdlczsKKwlpbnQgbWF4X2F0aV9wYWdlcywgbWF4X3JlYWxfcGFnZXM7CiAKIAlpZiAoIWVudHJ5KSB7CiAJCURSTV9FUlJPUigibm8gc2NhdHRlci9nYXRoZXIgbWVtb3J5IVxuIik7CkBAIC0xMTcsNiArMTE4LDcgQEAKIAkJCWdvdG8gZG9uZTsKIAkJfQogCisJCXBjaV9nYXJ0ID0gZ2FydF9pbmZvLT50YWJsZV9oYW5kbGUtPnZhZGRyOwogCQlhZGRyZXNzID0gZ2FydF9pbmZvLT50YWJsZV9oYW5kbGUtPnZhZGRyOwogCQlidXNfYWRkcmVzcyA9IGdhcnRfaW5mby0+dGFibGVfaGFuZGxlLT5idXNhZGRyOwogCX0gZWxzZSB7CkBAIC0xMjcsMTggKzEyOSwyMyBAQAogCQkJICAodW5zaWduZWQgbG9uZylhZGRyZXNzKTsKIAl9CiAKLQlwY2lfZ2FydCA9ICh1MzIgKikgYWRkcmVzczsKIAotCW1heF9wYWdlcyA9IChnYXJ0X2luZm8tPnRhYmxlX3NpemUgLyBzaXplb2YodTMyKSk7Ci0JcGFnZXMgPSAoZW50cnktPnBhZ2VzIDw9IG1heF9wYWdlcykKLQkgICAgPyBlbnRyeS0+cGFnZXMgOiBtYXhfcGFnZXM7CisJbWF4X2F0aV9wYWdlcyA9IChnYXJ0X2luZm8tPnRhYmxlX3NpemUgLyBzaXplb2YodTMyKSk7CisJbWF4X3JlYWxfcGFnZXMgPSBtYXhfYXRpX3BhZ2VzIC8gKFBBR0VfU0laRSAvIEFUSV9QQ0lHQVJUX1BBR0VfU0laRSk7CisJcGFnZXMgPSAoZW50cnktPnBhZ2VzIDw9IG1heF9yZWFsX3BhZ2VzKQorCSAgICA/IGVudHJ5LT5wYWdlcyA6IG1heF9yZWFsX3BhZ2VzOwogCi0JbWVtc2V0KHBjaV9nYXJ0LCAwLCBtYXhfcGFnZXMgKiBzaXplb2YodTMyKSk7CisJaWYgKGdhcnRfaW5mby0+Z2FydF90YWJsZV9sb2NhdGlvbiA9PSBEUk1fQVRJX0dBUlRfTUFJTikgeworCQltZW1zZXQocGNpX2dhcnQsIDAsIG1heF9hdGlfcGFnZXMgKiBzaXplb2YodTMyKSk7CisJfSBlbHNlIHsKKwkJbWVtc2V0X2lvKCh2b2lkIF9faW9tZW0gKiltYXAtPmhhbmRsZSwgMCwgbWF4X2F0aV9wYWdlcyAqIHNpemVvZih1MzIpKTsKKwl9CiAKKwlnYXJ0X2lkeCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspIHsKIAkJLyogd2UgbmVlZCB0byBzdXBwb3J0IGxhcmdlIG1lbW9yeSBjb25maWd1cmF0aW9ucyAqLwogCQllbnRyeS0+YnVzYWRkcltpXSA9IHBjaV9tYXBfcGFnZShkZXYtPnBkZXYsIGVudHJ5LT5wYWdlbGlzdFtpXSwKLQkJCQkJCSAwLCBQQUdFX1NJWkUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCQkJIDAsIFBBR0VfU0laRSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAkJaWYgKGVudHJ5LT5idXNhZGRyW2ldID09IDApIHsKIAkJCURSTV9FUlJPUigidW5hYmxlIHRvIG1hcCBQQ0lHQVJUIHBhZ2VzIVxuIik7CiAJCQlkcm1fYXRpX3BjaWdhcnRfY2xlYW51cChkZXYsIGdhcnRfaW5mbyk7CkBAIC0xNDksMTkgKzE1NiwyNiBAQAogCQlwYWdlX2Jhc2UgPSAodTMyKSBlbnRyeS0+YnVzYWRkcltpXTsKIAogCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIEFUSV9QQ0lHQVJUX1BBR0VfU0laRSk7IGorKykgeworCQkJdTMyIHZhbDsKKwogCQkJc3dpdGNoKGdhcnRfaW5mby0+Z2FydF9yZWdfaWYpIHsKIAkJCWNhc2UgRFJNX0FUSV9HQVJUX0lHUDoKLQkJCQkqcGNpX2dhcnQgPSBjcHVfdG9fbGUzMigocGFnZV9iYXNlKSB8IDB4Yyk7CisJCQkJdmFsID0gcGFnZV9iYXNlIHwgMHhjOwogCQkJCWJyZWFrOwogCQkJY2FzZSBEUk1fQVRJX0dBUlRfUENJRToKLQkJCQkqcGNpX2dhcnQgPSBjcHVfdG9fbGUzMigocGFnZV9iYXNlID4+IDgpIHwgMHhjKTsKKwkJCQl2YWwgPSAocGFnZV9iYXNlID4+IDgpIHwgMHhjOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCWNhc2UgRFJNX0FUSV9HQVJUX1BDSToKLQkJCQkqcGNpX2dhcnQgPSBjcHVfdG9fbGUzMihwYWdlX2Jhc2UpOworCQkJCXZhbCA9IHBhZ2VfYmFzZTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCXBjaV9nYXJ0Kys7CisJCQlpZiAoZ2FydF9pbmZvLT5nYXJ0X3RhYmxlX2xvY2F0aW9uID09CisJCQkgICAgRFJNX0FUSV9HQVJUX01BSU4pCisJCQkJcGNpX2dhcnRbZ2FydF9pZHhdID0gY3B1X3RvX2xlMzIodmFsKTsKKwkJCWVsc2UKKwkJCQlEUk1fV1JJVEUzMihtYXAsIGdhcnRfaWR4ICogc2l6ZW9mKHUzMiksIHZhbCk7CisJCQlnYXJ0X2lkeCsrOwogCQkJcGFnZV9iYXNlICs9IEFUSV9QQ0lHQVJUX1BBR0VfU0laRTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnVmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKaW5kZXggMTI3MTVkMy4uNmQ4MGQxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKQEAgLTM0LDE1ICszNCwxNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgorI2luY2x1ZGUgPGFzbS9zaG1wYXJhbS5oPgogI2luY2x1ZGUgImRybVAuaCIKIAotdW5zaWduZWQgbG9uZyBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZXNvdXJjZSkKK3Jlc291cmNlX3NpemVfdCBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZXNvdXJjZSkKIHsKIAlyZXR1cm4gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgcmVzb3VyY2UpOwogfQogRVhQT1JUX1NZTUJPTChkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KTsKIAotdW5zaWduZWQgbG9uZyBkcm1fZ2V0X3Jlc291cmNlX2xlbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVzb3VyY2UpCityZXNvdXJjZV9zaXplX3QgZHJtX2dldF9yZXNvdXJjZV9sZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlc291cmNlKQogewogCXJldHVybiBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgcmVzb3VyY2UpOwogfQpAQCAtNTAsMjQgKzUyLDQ0IEBACiBFWFBPUlRfU1lNQk9MKGRybV9nZXRfcmVzb3VyY2VfbGVuKTsKIAogc3RhdGljIHN0cnVjdCBkcm1fbWFwX2xpc3QgKmRybV9maW5kX21hdGNoaW5nX21hcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCQkgICAgIGRybV9sb2NhbF9tYXBfdCAqbWFwKQorCQkJCQkJICBzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwKQogewogCXN0cnVjdCBkcm1fbWFwX2xpc3QgKmVudHJ5OwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYtPm1hcGxpc3QsIGhlYWQpIHsKLQkJaWYgKGVudHJ5LT5tYXAgJiYgKGVudHJ5LT5tYXN0ZXIgPT0gZGV2LT5wcmltYXJ5LT5tYXN0ZXIpICYmIChtYXAtPnR5cGUgPT0gZW50cnktPm1hcC0+dHlwZSkgJiYKLQkJICAgICgoZW50cnktPm1hcC0+b2Zmc2V0ID09IG1hcC0+b2Zmc2V0KSB8fAotCQkgICAgICgobWFwLT50eXBlID09IF9EUk1fU0hNKSAmJiAobWFwLT5mbGFncyZfRFJNX0NPTlRBSU5TX0xPQ0spKSkpIHsKKwkJLyoKKwkJICogQmVjYXVzZSB0aGUga2VybmVsLXVzZXJzcGFjZSBBQkkgaXMgZml4ZWQgYXQgYSAzMi1iaXQgb2Zmc2V0CisJCSAqIHdoaWxlIFBDSSByZXNvdXJjZXMgbWF5IGxpdmUgYWJvdmUgdGhhdCwgd2UgaWdub3JlIHRoZSBtYXAKKwkJICogb2Zmc2V0IGZvciBtYXBzIG9mIHR5cGUgX0RSTV9GUkFNRUJVRkZFUiBvciBfRFJNX1JFR0lTVEVSUy4KKwkJICogSXQgaXMgYXNzdW1lZCB0aGF0IGVhY2ggZHJpdmVyIHdpbGwgaGF2ZSBvbmx5IG9uZSByZXNvdXJjZSBvZgorCQkgKiBlYWNoIHR5cGUuCisJCSAqLworCQlpZiAoIWVudHJ5LT5tYXAgfHwKKwkJICAgIG1hcC0+dHlwZSAhPSBlbnRyeS0+bWFwLT50eXBlIHx8CisJCSAgICBlbnRyeS0+bWFzdGVyICE9IGRldi0+cHJpbWFyeS0+bWFzdGVyKQorCQkJY29udGludWU7CisJCXN3aXRjaCAobWFwLT50eXBlKSB7CisJCWNhc2UgX0RSTV9TSE06CisJCQlpZiAobWFwLT5mbGFncyAhPSBfRFJNX0NPTlRBSU5TX0xPQ0spCisJCQkJYnJlYWs7CisJCWNhc2UgX0RSTV9SRUdJU1RFUlM6CisJCWNhc2UgX0RSTV9GUkFNRV9CVUZGRVI6CiAJCQlyZXR1cm4gZW50cnk7CisJCWRlZmF1bHQ6IC8qIE1ha2UgZ2NjIGhhcHB5ICovCisJCQk7CiAJCX0KKwkJaWYgKGVudHJ5LT5tYXAtPm9mZnNldCA9PSBtYXAtPm9mZnNldCkKKwkJCXJldHVybiBlbnRyeTsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGludCBkcm1fbWFwX2hhbmRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2hhc2hfaXRlbSAqaGFzaCwKLQkJCSAgdW5zaWduZWQgbG9uZyB1c2VyX3Rva2VuLCBpbnQgaGFzaGVkX2hhbmRsZSkKKwkJCSAgdW5zaWduZWQgbG9uZyB1c2VyX3Rva2VuLCBpbnQgaGFzaGVkX2hhbmRsZSwgaW50IHNobSkKIHsKLQlpbnQgdXNlX2hhc2hlZF9oYW5kbGU7CisJaW50IHVzZV9oYXNoZWRfaGFuZGxlLCBzaGlmdDsKKwl1bnNpZ25lZCBsb25nIGFkZDsKKwogI2lmIChCSVRTX1BFUl9MT05HID09IDY0KQogCXVzZV9oYXNoZWRfaGFuZGxlID0gKCh1c2VyX3Rva2VuICYgMHhGRkZGRkZGRjAwMDAwMDAwVUwpIHx8IGhhc2hlZF9oYW5kbGUpOwogI2VsaWYgKEJJVFNfUEVSX0xPTkcgPT0gMzIpCkBAIC04MywzMCArMTA1LDQ3IEBACiAJCWlmIChyZXQgIT0gLUVJTlZBTCkKIAkJCXJldHVybiByZXQ7CiAJfQorCisJc2hpZnQgPSAwOworCWFkZCA9IERSTV9NQVBfSEFTSF9PRkZTRVQgPj4gUEFHRV9TSElGVDsKKwlpZiAoc2htICYmIChTSE1MQkEgPiBQQUdFX1NJWkUpKSB7CisJCWludCBiaXRzID0gaWxvZzIoU0hNTEJBID4+IFBBR0VfU0hJRlQpICsgMTsKKworCQkvKiBGb3Igc2hhcmVkIG1lbW9yeSwgd2UgaGF2ZSB0byBwcmVzZXJ2ZSB0aGUgU0hNTEJBCisJCSAqIGJpdHMgb2YgdGhlIGV2ZW50dWFsIHZtYS0+dm1fcGdvZmYgdmFsdWUgZHVyaW5nCisJCSAqIG1tYXAoKS4gIE90aGVyd2lzZSB3ZSBydW4gaW50byBjYWNoZSBhbGlhc2luZyBwcm9ibGVtcworCQkgKiBvbiBzb21lIHBsYXRmb3Jtcy4gIE9uIHRoZXNlIHBsYXRmb3JtcywgdGhlIHBnb2ZmIG9mCisJCSAqIGEgbW1hcCgpIHJlcXVlc3QgaXMgdXNlZCB0byBwaWNrIGEgc3VpdGFibGUgdmlydHVhbAorCQkgKiBhZGRyZXNzIGZvciB0aGUgbW1hcCgpIHJlZ2lvbiBzdWNoIHRoYXQgaXQgd2lsbCBub3QKKwkJICogY2F1c2UgY2FjaGUgYWxpYXNpbmcgcHJvYmxlbXMuCisJCSAqCisJCSAqIFRoZXJlZm9yZSwgbWFrZSBzdXJlIHRoZSBTSE1MQkEgcmVsZXZhbnQgYml0cyBvZiB0aGUKKwkJICogaGFzaCB2YWx1ZSB3ZSB1c2UgYXJlIGVxdWFsIHRvIHRob3NlIGluIHRoZSBvcmlnaW5hbAorCQkgKiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzLgorCQkgKi8KKwkJc2hpZnQgPSBiaXRzOworCQlhZGQgfD0gKCh1c2VyX3Rva2VuID4+IFBBR0VfU0hJRlQpICYgKCgxVUwgPDwgYml0cykgLSAxVUwpKTsKKwl9CisKIAlyZXR1cm4gZHJtX2h0X2p1c3RfaW5zZXJ0X3BsZWFzZSgmZGV2LT5tYXBfaGFzaCwgaGFzaCwKIAkJCQkJIHVzZXJfdG9rZW4sIDMyIC0gUEFHRV9TSElGVCAtIDMsCi0JCQkJCSAwLCBEUk1fTUFQX0hBU0hfT0ZGU0VUID4+IFBBR0VfU0hJRlQpOworCQkJCQkgc2hpZnQsIGFkZCk7CiB9CiAKIC8qKgotICogSW9jdGwgdG8gc3BlY2lmeSBhIHJhbmdlIG9mIG1lbW9yeSB0aGF0IGlzIGF2YWlsYWJsZSBmb3IgbWFwcGluZyBieSBhIG5vbi1yb290IHByb2Nlc3MuCi0gKgotICogXHBhcmFtIGlub2RlIGRldmljZSBpbm9kZS4KLSAqIFxwYXJhbSBmaWxlX3ByaXYgRFJNIGZpbGUgcHJpdmF0ZS4KLSAqIFxwYXJhbSBjbWQgY29tbWFuZC4KLSAqIFxwYXJhbSBhcmcgcG9pbnRlciB0byBhIGRybV9tYXAgc3RydWN0dXJlLgotICogXHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvci4KKyAqIENvcmUgZnVuY3Rpb24gdG8gY3JlYXRlIGEgcmFuZ2Ugb2YgbWVtb3J5IGF2YWlsYWJsZSBmb3IgbWFwcGluZyBieSBhCisgKiBub24tcm9vdCBwcm9jZXNzLgogICoKICAqIEFkanVzdHMgdGhlIG1lbW9yeSBvZmZzZXQgdG8gaXRzIGFic29sdXRlIHZhbHVlIGFjY29yZGluZyB0byB0aGUgbWFwcGluZwogICogdHlwZS4gIEFkZHMgdGhlIG1hcCB0byB0aGUgbWFwIGxpc3QgZHJtX2RldmljZTo6bWFwbGlzdC4gQWRkcyBNVFJSJ3Mgd2hlcmUKICAqIGFwcGxpY2FibGUgYW5kIGlmIHN1cHBvcnRlZCBieSB0aGUga2VybmVsLgogICovCi1zdGF0aWMgaW50IGRybV9hZGRtYXBfY29yZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IG9mZnNldCwKK3N0YXRpYyBpbnQgZHJtX2FkZG1hcF9jb3JlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LAogCQkJICAgdW5zaWduZWQgaW50IHNpemUsIGVudW0gZHJtX21hcF90eXBlIHR5cGUsCiAJCQkgICBlbnVtIGRybV9tYXBfZmxhZ3MgZmxhZ3MsCiAJCQkgICBzdHJ1Y3QgZHJtX21hcF9saXN0ICoqIG1hcGxpc3QpCiB7Ci0Jc3RydWN0IGRybV9tYXAgKm1hcDsKKwlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwOwogCXN0cnVjdCBkcm1fbWFwX2xpc3QgKmxpc3Q7CiAJZHJtX2RtYV9oYW5kbGVfdCAqZG1haDsKIAl1bnNpZ25lZCBsb25nIHVzZXJfdG9rZW47CkBAIC0xMjksOSArMTY4LDkgQEAKIAkJZHJtX2ZyZWUobWFwLCBzaXplb2YoKm1hcCksIERSTV9NRU1fTUFQUyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlEUk1fREVCVUcoIm9mZnNldCA9IDB4JTA4bHgsIHNpemUgPSAweCUwOGx4LCB0eXBlID0gJWRcbiIsCi0JCSAgbWFwLT5vZmZzZXQsIG1hcC0+c2l6ZSwgbWFwLT50eXBlKTsKLQlpZiAoKG1hcC0+b2Zmc2V0ICYgKH5QQUdFX01BU0spKSB8fCAobWFwLT5zaXplICYgKH5QQUdFX01BU0spKSkgeworCURSTV9ERUJVRygib2Zmc2V0ID0gMHglMDhsbHgsIHNpemUgPSAweCUwOGx4LCB0eXBlID0gJWRcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZyltYXAtPm9mZnNldCwgbWFwLT5zaXplLCBtYXAtPnR5cGUpOworCWlmICgobWFwLT5vZmZzZXQgJiAofihyZXNvdXJjZV9zaXplX3QpUEFHRV9NQVNLKSkgfHwgKG1hcC0+c2l6ZSAmICh+UEFHRV9NQVNLKSkpIHsKIAkJZHJtX2ZyZWUobWFwLCBzaXplb2YoKm1hcCksIERSTV9NRU1fTUFQUyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI1OSw3ICsyOTgsOCBAQAogCQkJZHJtX2ZyZWUobWFwLCBzaXplb2YoKm1hcCksIERSTV9NRU1fTUFQUyk7CiAJCQlyZXR1cm4gLUVQRVJNOwogCQl9Ci0JCURSTV9ERUJVRygiQUdQIG9mZnNldCA9IDB4JTA4bHgsIHNpemUgPSAweCUwOGx4XG4iLCBtYXAtPm9mZnNldCwgbWFwLT5zaXplKTsKKwkJRFJNX0RFQlVHKCJBR1Agb2Zmc2V0ID0gMHglMDhsbHgsIHNpemUgPSAweCUwOGx4XG4iLAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKW1hcC0+b2Zmc2V0LCBtYXAtPnNpemUpOwogCiAJCWJyZWFrOwogCWNhc2UgX0RSTV9HRU06CkBAIC0zMDksNyArMzQ5LDggQEAKIAkvKiBXZSBkbyBpdCBoZXJlIHNvIHRoYXQgZGV2LT5zdHJ1Y3RfbXV0ZXggcHJvdGVjdHMgdGhlIGluY3JlbWVudCAqLwogCXVzZXJfdG9rZW4gPSAobWFwLT50eXBlID09IF9EUk1fU0hNKSA/ICh1bnNpZ25lZCBsb25nKW1hcC0+aGFuZGxlIDoKIAkJbWFwLT5vZmZzZXQ7Ci0JcmV0ID0gZHJtX21hcF9oYW5kbGUoZGV2LCAmbGlzdC0+aGFzaCwgdXNlcl90b2tlbiwgMCk7CisJcmV0ID0gZHJtX21hcF9oYW5kbGUoZGV2LCAmbGlzdC0+aGFzaCwgdXNlcl90b2tlbiwgMCwKKwkJCSAgICAgKG1hcC0+dHlwZSA9PSBfRFJNX1NITSkpOwogCWlmIChyZXQpIHsKIAkJaWYgKG1hcC0+dHlwZSA9PSBfRFJNX1JFR0lTVEVSUykKIAkJCWlvdW5tYXAobWFwLT5oYW5kbGUpOwpAQCAtMzI3LDkgKzM2OCw5IEBACiAJcmV0dXJuIDA7CiAJfQogCi1pbnQgZHJtX2FkZG1hcChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IG9mZnNldCwKK2ludCBkcm1fYWRkbWFwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LAogCSAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgZW51bSBkcm1fbWFwX3R5cGUgdHlwZSwKLQkgICAgICAgZW51bSBkcm1fbWFwX2ZsYWdzIGZsYWdzLCBkcm1fbG9jYWxfbWFwX3QgKiogbWFwX3B0cikKKwkgICAgICAgZW51bSBkcm1fbWFwX2ZsYWdzIGZsYWdzLCBzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqKiBtYXBfcHRyKQogewogCXN0cnVjdCBkcm1fbWFwX2xpc3QgKmxpc3Q7CiAJaW50IHJjOwpAQCAtMzQyLDYgKzM4MywxNyBAQAogCiBFWFBPUlRfU1lNQk9MKGRybV9hZGRtYXApOwogCisvKioKKyAqIElvY3RsIHRvIHNwZWNpZnkgYSByYW5nZSBvZiBtZW1vcnkgdGhhdCBpcyBhdmFpbGFibGUgZm9yIG1hcHBpbmcgYnkgYQorICogbm9uLXJvb3QgcHJvY2Vzcy4KKyAqCisgKiBccGFyYW0gaW5vZGUgZGV2aWNlIGlub2RlLgorICogXHBhcmFtIGZpbGVfcHJpdiBEUk0gZmlsZSBwcml2YXRlLgorICogXHBhcmFtIGNtZCBjb21tYW5kLgorICogXHBhcmFtIGFyZyBwb2ludGVyIHRvIGEgZHJtX21hcCBzdHJ1Y3R1cmUuCisgKiBccmV0dXJuIHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLgorICoKKyAqLwogaW50IGRybV9hZGRtYXBfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKQEAgLTM2NywxOSArNDE5LDEzIEBACiAgKiBSZW1vdmUgYSBtYXAgcHJpdmF0ZSBmcm9tIGxpc3QgYW5kIGRlYWxsb2NhdGUgcmVzb3VyY2VzIGlmIHRoZSBtYXBwaW5nCiAgKiBpc24ndCBpbiB1c2UuCiAgKgotICogXHBhcmFtIGlub2RlIGRldmljZSBpbm9kZS4KLSAqIFxwYXJhbSBmaWxlX3ByaXYgRFJNIGZpbGUgcHJpdmF0ZS4KLSAqIFxwYXJhbSBjbWQgY29tbWFuZC4KLSAqIFxwYXJhbSBhcmcgcG9pbnRlciB0byBhIHN0cnVjdCBkcm1fbWFwIHN0cnVjdHVyZS4KLSAqIFxyZXR1cm4gemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IuCi0gKgogICogU2VhcmNoZXMgdGhlIG1hcCBvbiBkcm1fZGV2aWNlOjptYXBsaXN0LCByZW1vdmVzIGl0IGZyb20gdGhlIGxpc3QsIHNlZSBpZgogICogaXRzIGJlaW5nIHVzZWQsIGFuZCBmcmVlIGFueSBhc3NvY2lhdGUgcmVzb3VyY2UgKHN1Y2ggYXMgTVRSUidzKSBpZiBpdCdzIG5vdAogICogYmVpbmcgb24gdXNlLgogICoKICAqIFxzYSBkcm1fYWRkbWFwCiAgKi8KLWludCBkcm1fcm1tYXBfbG9ja2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGRybV9sb2NhbF9tYXBfdCAqbWFwKQoraW50IGRybV9ybW1hcF9sb2NrZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCkKIHsKIAlzdHJ1Y3QgZHJtX21hcF9saXN0ICpyX2xpc3QgPSBOVUxMLCAqbGlzdF90OwogCWRybV9kbWFfaGFuZGxlX3QgZG1haDsKQEAgLTQ0Miw3ICs0ODgsNyBAQAogfQogRVhQT1JUX1NZTUJPTChkcm1fcm1tYXBfbG9ja2VkKTsKIAotaW50IGRybV9ybW1hcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBkcm1fbG9jYWxfbWFwX3QgKm1hcCkKK2ludCBkcm1fcm1tYXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCkKIHsKIAlpbnQgcmV0OwogCkBAIC00NjIsMTIgKzUwOCwxOCBAQAogICogT25lIHVzZSBjYXNlIG1pZ2h0IGJlIGFmdGVyIGFkZG1hcCBpcyBhbGxvd2VkIGZvciBub3JtYWwgdXNlcnMgZm9yIFNITSBhbmQKICAqIGdldHMgdXNlZCBieSBkcml2ZXJzIHRoYXQgdGhlIHNlcnZlciBkb2Vzbid0IG5lZWQgdG8gY2FyZSBhYm91dC4gIFRoaXMgc2VlbXMKICAqIHVubGlrZWx5LgorICoKKyAqIFxwYXJhbSBpbm9kZSBkZXZpY2UgaW5vZGUuCisgKiBccGFyYW0gZmlsZV9wcml2IERSTSBmaWxlIHByaXZhdGUuCisgKiBccGFyYW0gY21kIGNvbW1hbmQuCisgKiBccGFyYW0gYXJnIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgZHJtX21hcCBzdHJ1Y3R1cmUuCisgKiBccmV0dXJuIHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLgogICovCiBpbnQgZHJtX3JtbWFwX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKIAlzdHJ1Y3QgZHJtX21hcCAqcmVxdWVzdCA9IGRhdGE7Ci0JZHJtX2xvY2FsX21hcF90ICptYXAgPSBOVUxMOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXAgPSBOVUxMOwogCXN0cnVjdCBkcm1fbWFwX2xpc3QgKnJfbGlzdDsKIAlpbnQgcmV0OwogCkBAIC0xNTM0LDcgKzE1ODYsNyBAQAogCQkJJiYgKGRtYS0+ZmxhZ3MgJiBfRFJNX0RNQV9VU0VfU0cpKQogCQkgICAgfHwgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfRkJfRE1BKQogCQkJJiYgKGRtYS0+ZmxhZ3MgJiBfRFJNX0RNQV9VU0VfRkIpKSkgewotCQkJc3RydWN0IGRybV9tYXAgKm1hcCA9IGRldi0+YWdwX2J1ZmZlcl9tYXA7CisJCQlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwID0gZGV2LT5hZ3BfYnVmZmVyX21hcDsKIAkJCXVuc2lnbmVkIGxvbmcgdG9rZW4gPSBkZXYtPmFncF9idWZmZXJfdG9rZW47CiAKIAkJCWlmICghbWFwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NvbnRleHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY29udGV4dC5jCmluZGV4IDgwOWVjMGYuLjdkMWU1M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY29udGV4dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY29udGV4dC5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCXN0cnVjdCBkcm1fY3R4X3ByaXZfbWFwICpyZXF1ZXN0ID0gZGF0YTsKLQlzdHJ1Y3QgZHJtX21hcCAqbWFwOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXA7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqX2VudHJ5OwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKIAlzdHJ1Y3QgZHJtX2N0eF9wcml2X21hcCAqcmVxdWVzdCA9IGRhdGE7Ci0Jc3RydWN0IGRybV9tYXAgKm1hcCA9IE5VTEw7CisJc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCA9IE5VTEw7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqcl9saXN0ID0gTlVMTDsKIAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCmluZGV4IGVkMzJlZGIuLmM0YWRhOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwpAQCAtMjU0LDE1ICsyNTQsMTkgQEAKIGludCBkcm1faW5pdChzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKLQlzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGlkOworCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwaWQ7CiAJaW50IGk7CiAKIAlEUk1fREVCVUcoIlxuIik7CiAKIAlJTklUX0xJU1RfSEVBRCgmZHJpdmVyLT5kZXZpY2VfbGlzdCk7CiAKKwlpZiAoZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfTU9ERVNFVCkKKwkJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlci0+cGNpX2RyaXZlcik7CisKKwkvKiBJZiBub3QgdXNpbmcgS01TLCBmYWxsIGJhY2sgdG8gc3RlYWx0aCBtb2RlIG1hbnVhbCBzY2FubmluZy4gKi8KIAlmb3IgKGkgPSAwOyBkcml2ZXItPnBjaV9kcml2ZXIuaWRfdGFibGVbaV0udmVuZG9yICE9IDA7IGkrKykgewotCQlwaWQgPSAoc3RydWN0IHBjaV9kZXZpY2VfaWQgKikmZHJpdmVyLT5wY2lfZHJpdmVyLmlkX3RhYmxlW2ldOworCQlwaWQgPSAmZHJpdmVyLT5wY2lfZHJpdmVyLmlkX3RhYmxlW2ldOwogCiAJCS8qIExvb3AgYXJvdW5kIHNldHRpbmcgdXAgYSBEUk0gZGV2aWNlIGZvciBlYWNoIFBDSSBkZXZpY2UKIAkJICogbWF0Y2hpbmcgb3VyIElEIGFuZCBkZXZpY2UgY2xhc3MuICBJZiB3ZSBoYWQgdGhlIGludGVybmFsCkBAIC0yODcsNjggKzI5MSwxNyBAQAogCiBFWFBPUlRfU1lNQk9MKGRybV9pbml0KTsKIAotLyoqCi0gKiBDYWxsZWQgdmlhIGNsZWFudXBfbW9kdWxlKCkgYXQgbW9kdWxlIHVubG9hZCB0aW1lLgotICoKLSAqIENsZWFucyB1cCBhbGwgRFJNIGRldmljZSwgY2FsbGluZyBkcm1fbGFzdGNsb3NlKCkuCi0gKgotICogXHNhIGRybV9pbml0Ci0gKi8KLXN0YXRpYyB2b2lkIGRybV9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQotewotCXN0cnVjdCBkcm1fbWFwX2xpc3QgKnJfbGlzdCwgKmxpc3RfdGVtcDsKLQlEUk1fREVCVUcoIlxuIik7Ci0KLQlpZiAoIWRldikgewotCQlEUk1fRVJST1IoImNsZWFudXAgY2FsbGVkIG5vIGRldlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcm1fdmJsYW5rX2NsZWFudXAoZGV2KTsKLQotCWRybV9sYXN0Y2xvc2UoZGV2KTsKLQotCWlmIChkcm1fY29yZV9oYXNfTVRSUihkZXYpICYmIGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJgotCSAgICBkZXYtPmFncCAmJiBkZXYtPmFncC0+YWdwX210cnIgPj0gMCkgewotCQlpbnQgcmV0dmFsOwotCQlyZXR2YWwgPSBtdHJyX2RlbChkZXYtPmFncC0+YWdwX210cnIsCi0JCQkJICBkZXYtPmFncC0+YWdwX2luZm8uYXBlcl9iYXNlLAotCQkJCSAgZGV2LT5hZ3AtPmFncF9pbmZvLmFwZXJfc2l6ZSAqIDEwMjQgKiAxMDI0KTsKLQkJRFJNX0RFQlVHKCJtdHJyX2RlbD0lZFxuIiwgcmV0dmFsKTsKLQl9Ci0KLQlpZiAoZGV2LT5kcml2ZXItPnVubG9hZCkKLQkJZGV2LT5kcml2ZXItPnVubG9hZChkZXYpOwotCi0JaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncCkgewotCQlkcm1fZnJlZShkZXYtPmFncCwgc2l6ZW9mKCpkZXYtPmFncCksIERSTV9NRU1fQUdQTElTVFMpOwotCQlkZXYtPmFncCA9IE5VTEw7Ci0JfQotCi0JZHJtX2h0X3JlbW92ZSgmZGV2LT5tYXBfaGFzaCk7Ci0JZHJtX2N0eGJpdG1hcF9jbGVhbnVwKGRldik7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocl9saXN0LCBsaXN0X3RlbXAsICZkZXYtPm1hcGxpc3QsIGhlYWQpCi0JCWRybV9ybW1hcChkZXYsIHJfbGlzdC0+bWFwKTsKLQotCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQotCQlkcm1fcHV0X21pbm9yKCZkZXYtPmNvbnRyb2wpOwotCi0JaWYgKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKQotCQlkcm1fZ2VtX2Rlc3Ryb3koZGV2KTsKLQotCWRybV9wdXRfbWlub3IoJmRldi0+cHJpbWFyeSk7Ci0JaWYgKGRybV9wdXRfZGV2KGRldikpCi0JCURSTV9FUlJPUigiQ2Fubm90IHVubG9hZCBtb2R1bGVcbiIpOwotfQotCiB2b2lkIGRybV9leGl0KHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiwgKnRtcDsKIAlEUk1fREVCVUcoIlxuIik7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2LCB0bXAsICZkcml2ZXItPmRldmljZV9saXN0LCBkcml2ZXJfaXRlbSkKLQkJZHJtX2NsZWFudXAoZGV2KTsKKwlpZiAoZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfTU9ERVNFVCkgeworCQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlci0+cGNpX2RyaXZlcik7CisJfSBlbHNlIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wLCAmZHJpdmVyLT5kZXZpY2VfbGlzdCwgZHJpdmVyX2l0ZW0pCisJCQlkcm1fcHV0X2RldihkZXYpOworCX0KIAogCURSTV9JTkZPKCJNb2R1bGUgdW5sb2FkZWRcbiIpOwogfQpAQCAtNDY4LDYgKzQyMSw3IEBACiAJZHJtX2lvY3RsX3QgKmZ1bmM7CiAJdW5zaWduZWQgaW50IG5yID0gRFJNX0lPQ1RMX05SKGNtZCk7CiAJaW50IHJldGNvZGUgPSAtRUlOVkFMOworCWNoYXIgc3RhY2tfa2RhdGFbMTI4XTsKIAljaGFyICprZGF0YSA9IE5VTEw7CiAKIAlhdG9taWNfaW5jKCZkZXYtPmlvY3RsX2NvdW50KTsKQEAgLTUwNiwxMCArNDYwLDE0IEBACiAJCXJldGNvZGUgPSAtRUFDQ0VTOwogCX0gZWxzZSB7CiAJCWlmIChjbWQgJiAoSU9DX0lOIHwgSU9DX09VVCkpIHsKLQkJCWtkYXRhID0ga21hbGxvYyhfSU9DX1NJWkUoY21kKSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWtkYXRhKSB7Ci0JCQkJcmV0Y29kZSA9IC1FTk9NRU07Ci0JCQkJZ290byBlcnJfaTE7CisJCQlpZiAoX0lPQ19TSVpFKGNtZCkgPD0gc2l6ZW9mKHN0YWNrX2tkYXRhKSkgeworCQkJCWtkYXRhID0gc3RhY2tfa2RhdGE7CisJCQl9IGVsc2UgeworCQkJCWtkYXRhID0ga21hbGxvYyhfSU9DX1NJWkUoY21kKSwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCFrZGF0YSkgeworCQkJCQlyZXRjb2RlID0gLUVOT01FTTsKKwkJCQkJZ290byBlcnJfaTE7CisJCQkJfQogCQkJfQogCQl9CiAKQEAgLTUzMCw3ICs0ODgsNyBAQAogCX0KIAogICAgICAgZXJyX2kxOgotCWlmIChrZGF0YSkKKwlpZiAoa2RhdGEgIT0gc3RhY2tfa2RhdGEpCiAJCWtmcmVlKGtkYXRhKTsKIAlhdG9taWNfZGVjKCZkZXYtPmlvY3RsX2NvdW50KTsKIAlpZiAocmV0Y29kZSkKQEAgLTU0MCw3ICs0OTgsNyBAQAogCiBFWFBPUlRfU1lNQk9MKGRybV9pb2N0bCk7CiAKLWRybV9sb2NhbF9tYXBfdCAqZHJtX2dldHNhcmVhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqZHJtX2dldHNhcmVhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqZW50cnk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKaW5kZXggYTgzOWEyOC4uYzY3NDAwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKQEAgLTU1MCwxMSArNTUwLDIwIEBACiB9CiAKICNkZWZpbmUgRERDX0FERFIgMHg1MAotCi11bnNpZ25lZCBjaGFyICpkcm1fZG9fcHJvYmVfZGRjX2VkaWQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorLyoqCisgKiBHZXQgRURJRCBpbmZvcm1hdGlvbiB2aWEgSTJDLgorICoKKyAqIFxwYXJhbSBhZGFwdGVyIDogaTJjIGRldmljZSBhZGFwdG9yCisgKiBccGFyYW0gYnVmICAgICA6IEVESUQgZGF0YSBidWZmZXIgdG8gYmUgZmlsbGVkCisgKiBccGFyYW0gbGVuICAgICA6IEVESUQgZGF0YSBidWZmZXIgbGVuZ3RoCisgKiBccmV0dXJuIDAgb24gc3VjY2VzcyBvciAtMSBvbiBmYWlsdXJlLgorICoKKyAqIFRyeSB0byBmZXRjaCBFRElEIGluZm9ybWF0aW9uIGJ5IGNhbGxpbmcgaTJjIGRyaXZlciBmdW5jdGlvbi4KKyAqLworaW50IGRybV9kb19wcm9iZV9kZGNfZWRpZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBjaGFyIHN0YXJ0ID0gMHgwOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGttYWxsb2MoRURJRF9MRU5HVEgsIEdGUF9LRVJORUwpOwogCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKIAkJewogCQkJLmFkZHIJPSBERENfQUREUiwKQEAgLTU2NCwzMSArNTczLDM2IEBACiAJCX0sIHsKIAkJCS5hZGRyCT0gRERDX0FERFIsCiAJCQkuZmxhZ3MJPSBJMkNfTV9SRCwKLQkJCS5sZW4JPSBFRElEX0xFTkdUSCwKKwkJCS5sZW4JPSBsZW4sCiAJCQkuYnVmCT0gYnVmLAogCQl9CiAJfTsKIAotCWlmICghYnVmKSB7Ci0JCWRldl93YXJuKCZhZGFwdGVyLT5kZXYsICJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBFRElEICIKLQkJCSAiYmxvY2suXG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCiAJaWYgKGkyY190cmFuc2ZlcihhZGFwdGVyLCBtc2dzLCAyKSA9PSAyKQotCQlyZXR1cm4gYnVmOworCQlyZXR1cm4gMDsKIAogCWRldl9pbmZvKCZhZGFwdGVyLT5kZXYsICJ1bmFibGUgdG8gcmVhZCBFRElEIGJsb2NrLlxuIik7Ci0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gLTE7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9kb19wcm9iZV9kZGNfZWRpZCk7CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICpkcm1fZGRjX3JlYWQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorLyoqCisgKiBHZXQgRURJRCBpbmZvcm1hdGlvbi4KKyAqCisgKiBccGFyYW0gYWRhcHRlciA6IGkyYyBkZXZpY2UgYWRhcHRvci4KKyAqIFxwYXJhbSBidWYgICAgIDogRURJRCBkYXRhIGJ1ZmZlciB0byBiZSBmaWxsZWQKKyAqIFxwYXJhbSBsZW4gICAgIDogRURJRCBkYXRhIGJ1ZmZlciBsZW5ndGgKKyAqIFxyZXR1cm4gMCBvbiBzdWNjZXNzIG9yIC0xIG9uIGZhaWx1cmUuCisgKgorICogSW5pdGlhbGl6ZSBEREMsIHRoZW4gZmV0Y2ggRURJRCBpbmZvcm1hdGlvbgorICogYnkgY2FsbGluZyBkcm1fZG9fcHJvYmVfZGRjX2VkaWQgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgZHJtX2RkY19yZWFkKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgKmFsZ29fZGF0YSA9IGFkYXB0ZXItPmFsZ29fZGF0YTsKLQl1bnNpZ25lZCBjaGFyICplZGlkID0gTlVMTDsKIAlpbnQgaSwgajsKKwlpbnQgcmV0ID0gLTE7CiAKIAlhbGdvX2RhdGEtPnNldHNjbChhbGdvX2RhdGEtPmRhdGEsIDEpOwogCkBAIC02MTYsNyArNjMwLDcgQEAKIAkJbXNsZWVwKDE1KTsKIAogCQkvKiBEbyB0aGUgcmVhbCB3b3JrICovCi0JCWVkaWQgPSBkcm1fZG9fcHJvYmVfZGRjX2VkaWQoYWRhcHRlcik7CisJCXJldCA9IGRybV9kb19wcm9iZV9kZGNfZWRpZChhZGFwdGVyLCBidWYsIGxlbik7CiAJCWFsZ29fZGF0YS0+c2V0c2RhKGFsZ29fZGF0YS0+ZGF0YSwgMCk7CiAJCWFsZ29fZGF0YS0+c2V0c2NsKGFsZ29fZGF0YS0+ZGF0YSwgMCk7CiAJCW1zbGVlcCgxNSk7CkBAIC02MzIsNyArNjQ2LDcgQEAKIAkJbXNsZWVwKDE1KTsKIAkJYWxnb19kYXRhLT5zZXRzY2woYWxnb19kYXRhLT5kYXRhLCAwKTsKIAkJYWxnb19kYXRhLT5zZXRzZGEoYWxnb19kYXRhLT5kYXRhLCAwKTsKLQkJaWYgKGVkaWQpCisJCWlmIChyZXQgPT0gMCkKIAkJCWJyZWFrOwogCX0KIAkvKiBSZWxlYXNlIHRoZSBEREMgbGluZXMgd2hlbiBkb25lIG9yIHRoZSBBcHBsZSBDaW5lbWEgSEQgZGlzcGxheQpAQCAtNjQxLDkgKzY1NSwzMSBAQAogCWFsZ29fZGF0YS0+c2V0c2RhKGFsZ29fZGF0YS0+ZGF0YSwgMSk7CiAJYWxnb19kYXRhLT5zZXRzY2woYWxnb19kYXRhLT5kYXRhLCAxKTsKIAotCXJldHVybiBlZGlkOworCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgZHJtX2RkY19yZWFkX2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCSAgICAgc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICBjaGFyICpidWYsIGludCBsZW4pCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9kZGNfcmVhZChhZGFwdGVyLCBidWYsIGxlbik7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9pbmZvKCZjb25uZWN0b3ItPmRldi0+cGRldi0+ZGV2LCAiJXM6IG5vIEVESUQgZGF0YVxuIiwKKwkJCSBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCQlnb3RvIGVuZDsKKwl9CisJaWYgKCFlZGlkX2lzX3ZhbGlkKChzdHJ1Y3QgZWRpZCAqKWJ1ZikpIHsKKwkJZGV2X3dhcm4oJmNvbm5lY3Rvci0+ZGV2LT5wZGV2LT5kZXYsICIlczogRURJRCBpbnZhbGlkLlxuIiwKKwkJCSBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCQlyZXQgPSAtMTsKKwl9CitlbmQ6CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBNQVhfRURJRF9FWFRfTlVNIDQKIC8qKgogICogZHJtX2dldF9lZGlkIC0gZ2V0IEVESUQgZGF0YSwgaWYgYXZhaWxhYmxlCiAgKiBAY29ubmVjdG9yOiBjb25uZWN0b3Igd2UncmUgcHJvYmluZwpAQCAtNjU2LDI3ICs2OTIsMTE4IEBACiBzdHJ1Y3QgZWRpZCAqZHJtX2dldF9lZGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCQkgIHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKKwlpbnQgcmV0OwogCXN0cnVjdCBlZGlkICplZGlkOwogCi0JZWRpZCA9IChzdHJ1Y3QgZWRpZCAqKWRybV9kZGNfcmVhZChhZGFwdGVyKTsKLQlpZiAoIWVkaWQpIHsKLQkJZGV2X2luZm8oJmNvbm5lY3Rvci0+ZGV2LT5wZGV2LT5kZXYsICIlczogbm8gRURJRCBkYXRhXG4iLAotCQkJIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7Ci0JCXJldHVybiBOVUxMOworCWVkaWQgPSBrbWFsbG9jKEVESURfTEVOR1RIICogKE1BWF9FRElEX0VYVF9OVU0gKyAxKSwKKwkJICAgICAgIEdGUF9LRVJORUwpOworCWlmIChlZGlkID09IE5VTEwpIHsKKwkJZGV2X3dhcm4oJmNvbm5lY3Rvci0+ZGV2LT5wZGV2LT5kZXYsCisJCQkgIkZhaWxlZCB0byBhbGxvY2F0ZSBFRElEXG4iKTsKKwkJZ290byBlbmQ7CiAJfQotCWlmICghZWRpZF9pc192YWxpZChlZGlkKSkgewotCQlkZXZfd2FybigmY29ubmVjdG9yLT5kZXYtPnBkZXYtPmRldiwgIiVzOiBFRElEIGludmFsaWQuXG4iLAotCQkJIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7Ci0JCWtmcmVlKGVkaWQpOwotCQlyZXR1cm4gTlVMTDsKKworCS8qIFJlYWQgZmlyc3QgRURJRCBibG9jayAqLworCXJldCA9IGRybV9kZGNfcmVhZF9lZGlkKGNvbm5lY3RvciwgYWRhcHRlciwKKwkJCQkodW5zaWduZWQgY2hhciAqKWVkaWQsIEVESURfTEVOR1RIKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gY2xlYW5fdXA7CisKKwkvKiBUaGVyZSBhcmUgRURJRCBleHRlbnNpb25zIHRvIGJlIHJlYWQgKi8KKwlpZiAoZWRpZC0+ZXh0ZW5zaW9ucyAhPSAwKSB7CisJCWludCBlZGlkX2V4dF9udW0gPSBlZGlkLT5leHRlbnNpb25zOworCisJCWlmIChlZGlkX2V4dF9udW0gPiBNQVhfRURJRF9FWFRfTlVNKSB7CisJCQlkZXZfd2FybigmY29ubmVjdG9yLT5kZXYtPnBkZXYtPmRldiwKKwkJCQkgIlRoZSBudW1iZXIgb2YgZXh0ZW5zaW9uKCVkKSBpcyAiCisJCQkJICJvdmVyIG1heCAoJWQpLCBhY3R1YWxseSByZWFkIG51bWJlciAoJWQpXG4iLAorCQkJCSBlZGlkX2V4dF9udW0sIE1BWF9FRElEX0VYVF9OVU0sCisJCQkJIE1BWF9FRElEX0VYVF9OVU0pOworCQkJLyogUmVzZXQgRURJRCBleHRlbnNpb24gbnVtYmVyIHRvIGJlIHJlYWQgKi8KKwkJCWVkaWRfZXh0X251bSA9IE1BWF9FRElEX0VYVF9OVU07CisJCX0KKwkJLyogUmVhZCBFRElEIGluY2x1ZGluZyBleHRlbnNpb25zIHRvbyAqLworCQlyZXQgPSBkcm1fZGRjX3JlYWRfZWRpZChjb25uZWN0b3IsIGFkYXB0ZXIsIChjaGFyICopZWRpZCwKKwkJCQkJRURJRF9MRU5HVEggKiAoZWRpZF9leHRfbnVtICsgMSkpOworCQlpZiAocmV0ICE9IDApCisJCQlnb3RvIGNsZWFuX3VwOworCiAJfQogCiAJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ucmF3X2VkaWQgPSAoY2hhciAqKWVkaWQ7CisJZ290byBlbmQ7CiAKK2NsZWFuX3VwOgorCWtmcmVlKGVkaWQpOworCWVkaWQgPSBOVUxMOworZW5kOgogCXJldHVybiBlZGlkOworCiB9CiBFWFBPUlRfU1lNQk9MKGRybV9nZXRfZWRpZCk7CiAKKyNkZWZpbmUgSERNSV9JREVOVElGSUVSIDB4MDAwQzAzCisjZGVmaW5lIFZFTkRPUl9CTE9DSyAgICAweDAzCisvKioKKyAqIGRybV9kZXRlY3RfaGRtaV9tb25pdG9yIC0gZGV0ZWN0IHdoZXRoZXIgbW9uaXRvciBpcyBoZG1pLgorICogQGVkaWQ6IG1vbml0b3IgRURJRCBpbmZvcm1hdGlvbgorICoKKyAqIFBhcnNlIHRoZSBDRUEgZXh0ZW5zaW9uIGFjY29yZGluZyB0byBDRUEtODYxLUIuCisgKiBSZXR1cm4gdHJ1ZSBpZiBIRE1JLCBmYWxzZSBpZiBub3Qgb3IgdW5rbm93bi4KKyAqLworYm9vbCBkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihzdHJ1Y3QgZWRpZCAqZWRpZCkKK3sKKwljaGFyICplZGlkX2V4dCA9IE5VTEw7CisJaW50IGksIGhkbWlfaWQsIGVkaWRfZXh0X251bTsKKwlpbnQgc3RhcnRfb2Zmc2V0LCBlbmRfb2Zmc2V0OworCWJvb2wgaXNfaGRtaSA9IGZhbHNlOworCisJLyogTm8gRURJRCBvciBFRElEIGV4dGVuc2lvbnMgKi8KKwlpZiAoZWRpZCA9PSBOVUxMIHx8IGVkaWQtPmV4dGVuc2lvbnMgPT0gMCkKKwkJZ290byBlbmQ7CisKKwkvKiBDaG9zZSByZWFsIEVESUQgZXh0ZW5zaW9uIG51bWJlciAqLworCWVkaWRfZXh0X251bSA9IGVkaWQtPmV4dGVuc2lvbnMgPiBNQVhfRURJRF9FWFRfTlVNID8KKwkJICAgICAgIE1BWF9FRElEX0VYVF9OVU0gOiBlZGlkLT5leHRlbnNpb25zOworCisJLyogRmluZCBDRUEgZXh0ZW5zaW9uICovCisJZm9yIChpID0gMDsgaSA8IGVkaWRfZXh0X251bTsgaSsrKSB7CisJCWVkaWRfZXh0ID0gKGNoYXIgKillZGlkICsgRURJRF9MRU5HVEggKiAoaSArIDEpOworCQkvKiBUaGlzIGJsb2NrIGlzIENFQSBleHRlbnNpb24gKi8KKwkJaWYgKGVkaWRfZXh0WzBdID09IDB4MDIpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA9PSBlZGlkX2V4dF9udW0pCisJCWdvdG8gZW5kOworCisJLyogRGF0YSBibG9jayBvZmZzZXQgaW4gQ0VBIGV4dGVuc2lvbiBibG9jayAqLworCXN0YXJ0X29mZnNldCA9IDQ7CisJZW5kX29mZnNldCA9IGVkaWRfZXh0WzJdOworCisJLyoKKwkgKiBCZWNhdXNlIEhETUkgaWRlbnRpZmllciBpcyBpbiBWZW5kb3IgU3BlY2lmaWMgQmxvY2ssCisJICogc2VhcmNoIGl0IGZyb20gYWxsIGRhdGEgYmxvY2tzIG9mIENFQSBleHRlbnNpb24uCisJICovCisJZm9yIChpID0gc3RhcnRfb2Zmc2V0OyBpIDwgZW5kX29mZnNldDsKKwkJLyogSW5jcmVhc2VkIGJ5IGRhdGEgYmxvY2sgbGVuICovCisJCWkgKz0gKChlZGlkX2V4dFtpXSAmIDB4MWYpICsgMSkpIHsKKwkJLyogRmluZCB2ZW5kb3Igc3BlY2lmaWMgYmxvY2sgKi8KKwkJaWYgKChlZGlkX2V4dFtpXSA+PiA1KSA9PSBWRU5ET1JfQkxPQ0spIHsKKwkJCWhkbWlfaWQgPSBlZGlkX2V4dFtpICsgMV0gfCAoZWRpZF9leHRbaSArIDJdIDw8IDgpIHwKKwkJCQkgIGVkaWRfZXh0W2kgKyAzXSA8PCAxNjsKKwkJCS8qIEZpbmQgSERNSSBpZGVudGlmaWVyICovCisJCQlpZiAoaGRtaV9pZCA9PSBIRE1JX0lERU5USUZJRVIpCisJCQkJaXNfaGRtaSA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKworZW5kOgorCXJldHVybiBpc19oZG1pOworfQorRVhQT1JUX1NZTUJPTChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcik7CisKIC8qKgogICogZHJtX2FkZF9lZGlkX21vZGVzIC0gYWRkIG1vZGVzIGZyb20gRURJRCBkYXRhLCBpZiBhdmFpbGFibGUKICAqIEBjb25uZWN0b3I6IGNvbm5lY3RvciB3ZSdyZSBwcm9iaW5nCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCmluZGV4IGUxM2NiNjIuLjA5YTM1NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCkBAIC0yNzQsNiArMjc0LDcgQEAKIAkJLyogY3JlYXRlIGEgbmV3IG1hc3RlciAqLwogCQlwcml2LT5taW5vci0+bWFzdGVyID0gZHJtX21hc3Rlcl9jcmVhdGUocHJpdi0+bWlub3IpOwogCQlpZiAoIXByaXYtPm1pbm9yLT5tYXN0ZXIpIHsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCmluZGV4IDg4ZDMzNjguLmMxMTczZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYwpAQCAtNTAyLDcgKzUwMiw3IEBACiAJc3RydWN0IGRybV9maWxlICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwcml2LT5taW5vci0+ZGV2OwogCXN0cnVjdCBkcm1fZ2VtX21tICptbSA9IGRldi0+bW1fcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX21hcCAqbWFwID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwID0gTlVMTDsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKIAlzdHJ1Y3QgZHJtX2hhc2hfaXRlbSAqaGFzaDsKIAl1bnNpZ25lZCBsb25nIHByb3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2luZm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW5mby5jCmluZGV4IDFiNjk5NzYuLmYwZjZjNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW5mby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW5mby5jCkBAIC03Miw3ICs3Miw3IEBACiB7CiAJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKLQlzdHJ1Y3QgZHJtX21hcCAqbWFwOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXA7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqcl9saXN0OwogCiAJLyogSGFyZGNvZGVkIGZyb20gX0RSTV9GUkFNRV9CVUZGRVIsCkBAIC05NCw5ICs5NCw5IEBACiAJCWVsc2UKIAkJCXR5cGUgPSB0eXBlc1ttYXAtPnR5cGVdOwogCi0JCXNlcV9wcmludGYobSwgIiU0ZCAweCUwOGx4IDB4JTA4bHggJTQuNHMgIDB4JTAyeCAweCUwOGx4ICIsCisJCXNlcV9wcmludGYobSwgIiU0ZCAweCUwMTZsbHggMHglMDhseCAlNC40cyAgMHglMDJ4IDB4JTA4bHggIiwKIAkJCSAgIGksCi0JCQkgICBtYXAtPm9mZnNldCwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpbWFwLT5vZmZzZXQsCiAJCQkgICBtYXAtPnNpemUsIHR5cGUsIG1hcC0+ZmxhZ3MsCiAJCQkgICAodW5zaWduZWQgbG9uZykgcl9saXN0LT51c2VyX3Rva2VuKTsKIAkJaWYgKG1hcC0+bXRyciA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvYzMyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvYzMyLmMKaW5kZXggOTIwYjcyZi4uMjgyZDlmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pb2MzMi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW9jMzIuYwpAQCAtOTU0LDYgKzk1NCw3IEBACiAJCQkgRFJNX0lPQ1RMX1NHX0ZSRUUsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfWDg2KSB8fCBkZWZpbmVkKENPTkZJR19JQTY0KQogdHlwZWRlZiBzdHJ1Y3QgZHJtX3VwZGF0ZV9kcmF3MzIgewogCWRybV9kcmF3YWJsZV90IGhhbmRsZTsKIAl1bnNpZ25lZCBpbnQgdHlwZTsKQEAgLTk4NCw2ICs5ODUsNyBAQAogCQkJRFJNX0lPQ1RMX1VQREFURV9EUkFXLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIAlyZXR1cm4gZXJyOwogfQorI2VuZGlmCiAKIHN0cnVjdCBkcm1fd2FpdF92YmxhbmtfcmVxdWVzdDMyIHsKIAllbnVtIGRybV92Ymxhbmtfc2VxX3R5cGUgdHlwZTsKQEAgLTEwNjYsNyArMTA2OCw5IEBACiAjZW5kaWYKIAlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9TR19BTExPQzMyKV0gPSBjb21wYXRfZHJtX3NnX2FsbG9jLAogCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1NHX0ZSRUUzMildID0gY29tcGF0X2RybV9zZ19mcmVlLAorI2lmIGRlZmluZWQoQ09ORklHX1g4NikgfHwgZGVmaW5lZChDT05GSUdfSUE2NCkKIAlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9VUERBVEVfRFJBVzMyKV0gPSBjb21wYXRfZHJtX3VwZGF0ZV9kcmF3LAorI2VuZGlmCiAJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfV0FJVF9WQkxBTkszMildID0gY29tcGF0X2RybV93YWl0X3ZibGFuaywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWVtb3J5LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21lbW9yeS5jCmluZGV4IGJjYzg2OWIuLjBjNzA3ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWVtb3J5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tZW1vcnkuYwpAQCAtMTU5LDcgKzE1OSw3IEBACiAKICNlbmRpZgkJCQkvKiBkZWJ1Z19tZW1vcnkgKi8KIAotdm9pZCBkcm1fY29yZV9pb3JlbWFwKHN0cnVjdCBkcm1fbWFwICptYXAsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit2b2lkIGRybV9jb3JlX2lvcmVtYXAoc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlpZiAoZHJtX2NvcmVfaGFzX0FHUChkZXYpICYmCiAJICAgIGRldi0+YWdwICYmIGRldi0+YWdwLT5jYW50X3VzZV9hcGVydHVyZSAmJiBtYXAtPnR5cGUgPT0gX0RSTV9BR1ApCkBAIC0xNjksNyArMTY5LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2NvcmVfaW9yZW1hcCk7CiAKLXZvaWQgZHJtX2NvcmVfaW9yZW1hcF93YyhzdHJ1Y3QgZHJtX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQordm9pZCBkcm1fY29yZV9pb3JlbWFwX3djKHN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXAsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJgogCSAgICBkZXYtPmFncCAmJiBkZXYtPmFncC0+Y2FudF91c2VfYXBlcnR1cmUgJiYgbWFwLT50eXBlID09IF9EUk1fQUdQKQpAQCAtMTc5LDcgKzE3OSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRybV9jb3JlX2lvcmVtYXBfd2MpOwogCi12b2lkIGRybV9jb3JlX2lvcmVtYXBmcmVlKHN0cnVjdCBkcm1fbWFwICptYXAsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit2b2lkIGRybV9jb3JlX2lvcmVtYXBmcmVlKHN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXAsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJaWYgKCFtYXAtPmhhbmRsZSB8fCAhbWFwLT5zaXplKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYy5jCmluZGV4IDliM2M1YWYuLmJhZTUzOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYy5jCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlICJkcm1QLmgiCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSW5pdGlhbGl6YXRpb24sIGV0Yy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3R1Yi5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMKaW5kZXggNDhmMzNiZS4uZDAwOTY2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMKQEAgLTM4MSw2ICszODEsNyBAQAogCX0KIAogCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7CisJCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCQlyZXQgPSBkcm1fZ2V0X21pbm9yKGRldiwgJmRldi0+Y29udHJvbCwgRFJNX01JTk9SX0NPTlRST0wpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJfZzI7CkBAIC00MDQsOSArNDA1LDkgQEAKIAogCWxpc3RfYWRkX3RhaWwoJmRldi0+ZHJpdmVyX2l0ZW0sICZkcml2ZXItPmRldmljZV9saXN0KTsKIAotCURSTV9JTkZPKCJJbml0aWFsaXplZCAlcyAlZC4lZC4lZCAlcyBvbiBtaW5vciAlZFxuIiwKKwlEUk1fSU5GTygiSW5pdGlhbGl6ZWQgJXMgJWQuJWQuJWQgJXMgZm9yICVzIG9uIG1pbm9yICVkXG4iLAogCQkgZHJpdmVyLT5uYW1lLCBkcml2ZXItPm1ham9yLCBkcml2ZXItPm1pbm9yLCBkcml2ZXItPnBhdGNobGV2ZWwsCi0JCSBkcml2ZXItPmRhdGUsIGRldi0+cHJpbWFyeS0+aW5kZXgpOworCQkgZHJpdmVyLT5kYXRlLCBwY2lfbmFtZShwZGV2KSwgZGV2LT5wcmltYXJ5LT5pbmRleCk7CiAKIAlyZXR1cm4gMDsKIApAQCAtNDE4LDI5ICs0MTksNyBAQAogCWRybV9mcmVlKGRldiwgc2l6ZW9mKCpkZXYpLCBEUk1fTUVNX1NUVUIpOwogCXJldHVybiByZXQ7CiB9Ci0KLS8qKgotICogUHV0IGEgZGV2aWNlIG1pbm9yIG51bWJlci4KLSAqCi0gKiBccGFyYW0gZGV2IGRldmljZSBkYXRhIHN0cnVjdHVyZQotICogXHJldHVybiBhbHdheXMgemVybwotICoKLSAqIENsZWFucyB1cCB0aGUgcHJvYyByZXNvdXJjZXMuIElmIGl0IGlzIHRoZSBsYXN0IG1pbm9yIHRoZW4gcmVsZWFzZSB0aGUgZm9yZWlnbgotICogImRybSIgZGF0YSwgb3RoZXJ3aXNlIHVucmVnaXN0ZXJzIHRoZSAiZHJtIiBkYXRhLCBmcmVlcyB0aGUgZGV2IGxpc3QgYW5kCi0gKiB1bnJlZ2lzdGVycyB0aGUgY2hhcmFjdGVyIGRldmljZS4KLSAqLwotaW50IGRybV9wdXRfZGV2KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQotewotCURSTV9ERUJVRygicmVsZWFzZSBwcmltYXJ5ICVzXG4iLCBkZXYtPmRyaXZlci0+cGNpX2RyaXZlci5uYW1lKTsKLQotCWlmIChkZXYtPmRldm5hbWUpIHsKLQkJZHJtX2ZyZWUoZGV2LT5kZXZuYW1lLCBzdHJsZW4oZGV2LT5kZXZuYW1lKSArIDEsCi0JCQkgRFJNX01FTV9EUklWRVIpOwotCQlkZXYtPmRldm5hbWUgPSBOVUxMOwotCX0KLQlkcm1fZnJlZShkZXYsIHNpemVvZigqZGV2KSwgRFJNX01FTV9TVFVCKTsKLQlyZXR1cm4gMDsKLX0KK0VYUE9SVF9TWU1CT0woZHJtX2dldF9kZXYpOwogCiAvKioKICAqIFB1dCBhIHNlY29uZGFyeSBtaW5vciBudW1iZXIuCkBAIC00NzIsMyArNDUxLDY3IEBACiAJKm1pbm9yX3AgPSBOVUxMOwogCXJldHVybiAwOwogfQorCisvKioKKyAqIENhbGxlZCB2aWEgZHJtX2V4aXQoKSBhdCBtb2R1bGUgdW5sb2FkIHRpbWUgb3Igd2hlbiBwY2kgZGV2aWNlIGlzCisgKiB1bnBsdWdnZWQuCisgKgorICogQ2xlYW5zIHVwIGFsbCBEUk0gZGV2aWNlLCBjYWxsaW5nIGRybV9sYXN0Y2xvc2UoKS4KKyAqCisgKiBcc2EgZHJtX2luaXQKKyAqLwordm9pZCBkcm1fcHV0X2RldihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIgPSBkZXYtPmRyaXZlcjsKKwlzdHJ1Y3QgZHJtX21hcF9saXN0ICpyX2xpc3QsICpsaXN0X3RlbXA7CisKKwlEUk1fREVCVUcoIlxuIik7CisKKwlpZiAoIWRldikgeworCQlEUk1fRVJST1IoImNsZWFudXAgY2FsbGVkIG5vIGRldlxuIik7CisJCXJldHVybjsKKwl9CisKKwlkcm1fdmJsYW5rX2NsZWFudXAoZGV2KTsKKworCWRybV9sYXN0Y2xvc2UoZGV2KTsKKworCWlmIChkcm1fY29yZV9oYXNfTVRSUihkZXYpICYmIGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJgorCSAgICBkZXYtPmFncCAmJiBkZXYtPmFncC0+YWdwX210cnIgPj0gMCkgeworCQlpbnQgcmV0dmFsOworCQlyZXR2YWwgPSBtdHJyX2RlbChkZXYtPmFncC0+YWdwX210cnIsCisJCQkJICBkZXYtPmFncC0+YWdwX2luZm8uYXBlcl9iYXNlLAorCQkJCSAgZGV2LT5hZ3AtPmFncF9pbmZvLmFwZXJfc2l6ZSAqIDEwMjQgKiAxMDI0KTsKKwkJRFJNX0RFQlVHKCJtdHJyX2RlbD0lZFxuIiwgcmV0dmFsKTsKKwl9CisKKwlpZiAoZGV2LT5kcml2ZXItPnVubG9hZCkKKwkJZGV2LT5kcml2ZXItPnVubG9hZChkZXYpOworCisJaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncCkgeworCQlkcm1fZnJlZShkZXYtPmFncCwgc2l6ZW9mKCpkZXYtPmFncCksIERSTV9NRU1fQUdQTElTVFMpOworCQlkZXYtPmFncCA9IE5VTEw7CisJfQorCisJZHJtX2h0X3JlbW92ZSgmZGV2LT5tYXBfaGFzaCk7CisJZHJtX2N0eGJpdG1hcF9jbGVhbnVwKGRldik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocl9saXN0LCBsaXN0X3RlbXAsICZkZXYtPm1hcGxpc3QsIGhlYWQpCisJCWRybV9ybW1hcChkZXYsIHJfbGlzdC0+bWFwKTsKKworCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQorCQlkcm1fcHV0X21pbm9yKCZkZXYtPmNvbnRyb2wpOworCisJaWYgKGRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkKKwkJZHJtX2dlbV9kZXN0cm95KGRldik7CisKKwlkcm1fcHV0X21pbm9yKCZkZXYtPnByaW1hcnkpOworCisJaWYgKGRldi0+ZGV2bmFtZSkgeworCQlkcm1fZnJlZShkZXYtPmRldm5hbWUsIHN0cmxlbihkZXYtPmRldm5hbWUpICsgMSwKKwkJCSBEUk1fTUVNX0RSSVZFUik7CisJCWRldi0+ZGV2bmFtZSA9IE5VTEw7CisJfQorCWRybV9mcmVlKGRldiwgc2l6ZW9mKCpkZXYpLCBEUk1fTUVNX1NUVUIpOworfQorRVhQT1JUX1NZTUJPTChkcm1fcHV0X2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKaW5kZXggMTg2ZDA4MS4uNWRlNTczYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYwpAQCAtMzUsNyArMzUsOSBAQAogCXN0cnVjdCBkcm1fbWlub3IgKmRybV9taW5vciA9IHRvX2RybV9taW5vcihkZXYpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZHJtX21pbm9yLT5kZXY7CiAKLQlpZiAoZHJtX21pbm9yLT50eXBlID09IERSTV9NSU5PUl9MRUdBQ1kgJiYgZHJtX2Rldi0+ZHJpdmVyLT5zdXNwZW5kKQorCWlmIChkcm1fbWlub3ItPnR5cGUgPT0gRFJNX01JTk9SX0xFR0FDWSAmJgorCSAgICAhZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkcm1fZGV2LCBEUklWRVJfTU9ERVNFVCkgJiYKKwkgICAgZHJtX2Rldi0+ZHJpdmVyLT5zdXNwZW5kKQogCQlyZXR1cm4gZHJtX2Rldi0+ZHJpdmVyLT5zdXNwZW5kKGRybV9kZXYsIHN0YXRlKTsKIAogCXJldHVybiAwOwpAQCAtNTMsNyArNTUsOSBAQAogCXN0cnVjdCBkcm1fbWlub3IgKmRybV9taW5vciA9IHRvX2RybV9taW5vcihkZXYpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZHJtX21pbm9yLT5kZXY7CiAKLQlpZiAoZHJtX21pbm9yLT50eXBlID09IERSTV9NSU5PUl9MRUdBQ1kgJiYgZHJtX2Rldi0+ZHJpdmVyLT5yZXN1bWUpCisJaWYgKGRybV9taW5vci0+dHlwZSA9PSBEUk1fTUlOT1JfTEVHQUNZICYmCisJICAgICFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRybV9kZXYsIERSSVZFUl9NT0RFU0VUKSAmJgorCSAgICBkcm1fZGV2LT5kcml2ZXItPnJlc3VtZSkKIAkJcmV0dXJuIGRybV9kZXYtPmRyaXZlci0+cmVzdW1lKGRybV9kZXYpOwogCiAJcmV0dXJuIDA7CkBAIC0xMTgsMjAgKzEyMiw2IEBACiAJY2xhc3NfZGVzdHJveShkcm1fY2xhc3MpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X2RyaShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBkcm1fbWlub3IgKmRybV9taW5vciA9IHRvX2RybV9taW5vcihkZXZpY2UpOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZHJtX21pbm9yLT5kZXY7Ci0JaWYgKGRybV9kZXYtPmRyaXZlci0+ZHJpX2xpYnJhcnlfbmFtZSkKLQkJcmV0dXJuIGRybV9kZXYtPmRyaXZlci0+ZHJpX2xpYnJhcnlfbmFtZShkcm1fZGV2LCBidWYpOwotCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBkcm1fZGV2LT5kcml2ZXItPnBjaV9kcml2ZXIubmFtZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZpY2VfYXR0cnNbXSA9IHsKLQlfX0FUVFIoZHJpX2xpYnJhcnlfbmFtZSwgU19JUlVHTywgc2hvd19kcmksIE5VTEwpLAotfTsKLQogLyoqCiAgKiBkcm1fc3lzZnNfZGV2aWNlX3JlbGVhc2UgLSBkbyBub3RoaW5nCiAgKiBAZGV2OiBMaW51eCBkZXZpY2UKQEAgLTQ3NCw3ICs0NjQsNiBAQAogaW50IGRybV9zeXNmc19kZXZpY2VfYWRkKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQogewogCWludCBlcnI7Ci0JaW50IGksIGo7CiAJY2hhciAqbWlub3Jfc3RyOwogCiAJbWlub3ItPmtkZXYucGFyZW50ID0gJm1pbm9yLT5kZXYtPnBkZXYtPmRldjsKQEAgLTQ5NiwxOCArNDg1LDggQEAKIAkJZ290byBlcnJfb3V0OwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldmljZV9hdHRycyk7IGkrKykgewotCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm1pbm9yLT5rZGV2LCAmZGV2aWNlX2F0dHJzW2ldKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9maWxlczsKLQl9Ci0KIAlyZXR1cm4gMDsKIAotZXJyX291dF9maWxlczoKLQlpZiAoaSA+IDApCi0JCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCi0JCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm1pbm9yLT5rZGV2LCAmZGV2aWNlX2F0dHJzW2pdKTsKIAlkZXZpY2VfdW5yZWdpc3RlcigmbWlub3ItPmtkZXYpOwogZXJyX291dDoKIApAQCAtNTIzLDkgKzUwMiw1IEBACiAgKi8KIHZvaWQgZHJtX3N5c2ZzX2RldmljZV9yZW1vdmUoc3RydWN0IGRybV9taW5vciAqbWlub3IpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZXZpY2VfYXR0cnMpOyBpKyspCi0JCWRldmljZV9yZW1vdmVfZmlsZSgmbWlub3ItPmtkZXYsICZkZXZpY2VfYXR0cnNbaV0pOwogCWRldmljZV91bnJlZ2lzdGVyKCZtaW5vci0+a2Rldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZtLmMKaW5kZXggM2ZmYWUwMi4uMjJmNzY1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV92bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm0uYwpAQCAtOTEsNyArOTEsNyBAQAogewogCXN0cnVjdCBkcm1fZmlsZSAqcHJpdiA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwcml2LT5taW5vci0+ZGV2OwotCXN0cnVjdCBkcm1fbWFwICptYXAgPSBOVUxMOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXAgPSBOVUxMOwogCXN0cnVjdCBkcm1fbWFwX2xpc3QgKnJfbGlzdDsKIAlzdHJ1Y3QgZHJtX2hhc2hfaXRlbSAqaGFzaDsKIApAQCAtMTE1LDkgKzExNSw5IEBACiAJCSAqIFVzaW5nIHZtX3Bnb2ZmIGFzIGEgc2VsZWN0b3IgZm9yY2VzIHVzIHRvIHVzZSB0aGlzIHVudXN1YWwKIAkJICogYWRkcmVzc2luZyBzY2hlbWUuCiAJCSAqLwotCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9ICh1bnNpZ25lZCBsb25nKXZtZi0+dmlydHVhbF9hZGRyZXNzIC0KLQkJCQkJCQkJdm1hLT52bV9zdGFydDsKLQkJdW5zaWduZWQgbG9uZyBiYWRkciA9IG1hcC0+b2Zmc2V0ICsgb2Zmc2V0OworCQlyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpdm1mLT52aXJ0dWFsX2FkZHJlc3MgLQorCQkJdm1hLT52bV9zdGFydDsKKwkJcmVzb3VyY2Vfc2l6ZV90IGJhZGRyID0gbWFwLT5vZmZzZXQgKyBvZmZzZXQ7CiAJCXN0cnVjdCBkcm1fYWdwX21lbSAqYWdwbWVtOwogCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIApAQCAtMTQ5LDggKzE0OSwxMCBAQAogCQl2bWYtPnBhZ2UgPSBwYWdlOwogCiAJCURSTV9ERUJVRwotCQkgICAgKCJiYWRkciA9IDB4JWx4IHBhZ2UgPSAweCVwLCBvZmZzZXQgPSAweCVseCwgY291bnQ9JWRcbiIsCi0JCSAgICAgYmFkZHIsIF9fdmEoYWdwbWVtLT5tZW1vcnktPm1lbW9yeVtvZmZzZXRdKSwgb2Zmc2V0LAorCQkgICAgKCJiYWRkciA9IDB4JWxseCBwYWdlID0gMHglcCwgb2Zmc2V0ID0gMHglbGx4LCBjb3VudD0lZFxuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJhZGRyLAorCQkgICAgIF9fdmEoYWdwbWVtLT5tZW1vcnktPm1lbW9yeVtvZmZzZXRdKSwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCwKIAkJICAgICBwYWdlX2NvdW50KHBhZ2UpKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTc2LDcgKzE3OCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgZHJtX2RvX3ZtX3NobV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7Ci0Jc3RydWN0IGRybV9tYXAgKm1hcCA9IChzdHJ1Y3QgZHJtX21hcCAqKSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBpOwogCXN0cnVjdCBwYWdlICpwYWdlOwpAQCAtMjA5LDcgKzIxMSw3IEBACiAJc3RydWN0IGRybV9maWxlICpwcml2ID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHByaXYtPm1pbm9yLT5kZXY7CiAJc3RydWN0IGRybV92bWFfZW50cnkgKnB0LCAqdGVtcDsKLQlzdHJ1Y3QgZHJtX21hcCAqbWFwOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXA7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqcl9saXN0OwogCWludCBmb3VuZF9tYXBzID0gMDsKIApAQCAtMzIyLDcgKzMyNCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgZHJtX2RvX3ZtX3NnX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIHsKLQlzdHJ1Y3QgZHJtX21hcCAqbWFwID0gKHN0cnVjdCBkcm1fbWFwICopIHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXAgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZHJtX2ZpbGUgKnByaXYgPSB2bWEtPnZtX2ZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcHJpdi0+bWlub3ItPmRldjsKIAlzdHJ1Y3QgZHJtX3NnX21lbSAqZW50cnkgPSBkZXYtPnNnOwpAQCAtNTEyLDE0ICs1MTQsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgbG9uZyBkcm1fY29yZV9nZXRfbWFwX29mcyhzdHJ1Y3QgZHJtX21hcCAqIG1hcCkKK3Jlc291cmNlX3NpemVfdCBkcm1fY29yZV9nZXRfbWFwX29mcyhzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqIG1hcCkKIHsKIAlyZXR1cm4gbWFwLT5vZmZzZXQ7CiB9CiAKIEVYUE9SVF9TWU1CT0woZHJtX2NvcmVfZ2V0X21hcF9vZnMpOwogCi11bnNpZ25lZCBsb25nIGRybV9jb3JlX2dldF9yZWdfb2ZzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCityZXNvdXJjZV9zaXplX3QgZHJtX2NvcmVfZ2V0X3JlZ19vZnMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKICNpZmRlZiBfX2FscGhhX18KIAlyZXR1cm4gZGV2LT5ob3NlLT5kZW5zZV9tZW1fYmFzZSAtIGRldi0+aG9zZS0+bWVtX3NwYWNlLT5zdGFydDsKQEAgLTU0Nyw4ICs1NDksOCBAQAogewogCXN0cnVjdCBkcm1fZmlsZSAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcHJpdi0+bWlub3ItPmRldjsKLQlzdHJ1Y3QgZHJtX21hcCAqbWFwID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7CisJc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCA9IE5VTEw7CisJcmVzb3VyY2Vfc2l6ZV90IG9mZnNldCA9IDA7CiAJc3RydWN0IGRybV9oYXNoX2l0ZW0gKmhhc2g7CiAKIAlEUk1fREVCVUcoInN0YXJ0ID0gMHglbHgsIGVuZCA9IDB4JWx4LCBwYWdlIG9mZnNldCA9IDB4JWx4XG4iLApAQCAtNjIzLDkgKzYyNSw5IEBACiAJCQkJICAgICAgIHZtYS0+dm1fcGFnZV9wcm90KSkKIAkJCXJldHVybiAtRUFHQUlOOwogCQlEUk1fREVCVUcoIiAgIFR5cGUgPSAlZDsgc3RhcnQgPSAweCVseCwgZW5kID0gMHglbHgsIgotCQkJICAiIG9mZnNldCA9IDB4JWx4XG4iLAorCQkJICAiIG9mZnNldCA9IDB4JWxseFxuIiwKIAkJCSAgbWFwLT50eXBlLAotCQkJICB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgbWFwLT5vZmZzZXQgKyBvZmZzZXQpOworCQkJICB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgKHVuc2lnbmVkIGxvbmcgbG9uZykobWFwLT5vZmZzZXQgKyBvZmZzZXQpKTsKIAkJdm1hLT52bV9vcHMgPSAmZHJtX3ZtX29wczsKIAkJYnJlYWs7CiAJY2FzZSBfRFJNX0NPTlNJU1RFTlQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k4MTAvaTgxMF9kcnYuaAppbmRleCAwMTE4ODQ5Li4yMWUyNjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZHJ2LmgKQEAgLTc3LDggKzc3LDggQEAKIH0gZHJtX2k4MTBfcmluZ19idWZmZXJfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k4MTBfcHJpdmF0ZSB7Ci0Jc3RydWN0IGRybV9tYXAgKnNhcmVhX21hcDsKLQlzdHJ1Y3QgZHJtX21hcCAqbW1pb19tYXA7CisJc3RydWN0IGRybV9sb2NhbF9tYXAgKnNhcmVhX21hcDsKKwlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbW1pb19tYXA7CiAKIAlkcm1faTgxMF9zYXJlYV90ICpzYXJlYV9wcml2OwogCWRybV9pODEwX3JpbmdfYnVmZmVyX3QgcmluZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2Rydi5oCmluZGV4IGI1YmY4Y2MuLmRhODJhZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k4MzAvaTgzMF9kcnYuaApAQCAtODQsOCArODQsOCBAQAogfSBkcm1faTgzMF9yaW5nX2J1ZmZlcl90OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1faTgzMF9wcml2YXRlIHsKLQlzdHJ1Y3QgZHJtX21hcCAqc2FyZWFfbWFwOwotCXN0cnVjdCBkcm1fbWFwICptbWlvX21hcDsKKwlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqc2FyZWFfbWFwOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptbWlvX21hcDsKIAogCWRybV9pODMwX3NhcmVhX3QgKnNhcmVhX3ByaXY7CiAJZHJtX2k4MzBfcmluZ19idWZmZXJfdCByaW5nOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKaW5kZXggYTgxOGIzNy4uODU1NDlmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCkBAIC0xMDk5LDcgKzEwOTksNyBAQAogaW50IGk5MTVfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGxvbmcgYmFzZSwgc2l6ZTsKKwlyZXNvdXJjZV9zaXplX3QgYmFzZSwgc2l6ZTsKIAlpbnQgcmV0ID0gMCwgbW1pb19iYXIgPSBJU19JOVhYKGRldikgPyAwIDogMTsKIAogCS8qIGk5MTUgaGFzIDQgbW9yZSBjb3VudGVycyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggZGNiOTFmNS4uMmMwMTY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC00Miw2ICs0Miw4IEBACiB1bnNpZ25lZCBpbnQgaTkxNV9mYnBlcmNydGMgPSAwOwogbW9kdWxlX3BhcmFtX25hbWVkKGZicGVyY3J0YywgaTkxNV9mYnBlcmNydGMsIGludCwgMDQwMCk7CiAKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2ZXI7CisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lpZGxpc3RbXSA9IHsKIAlpOTE1X1BDSV9JRFMKIH07CkBAIC0xMTcsNiArMTE5LDM2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBfX2RldmluaXQKK2k5MTVfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBkcm1fZ2V0X2RldihwZGV2LCBlbnQsICZkcml2ZXIpOworfQorCitzdGF0aWMgdm9pZAoraTkxNV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlkcm1fcHV0X2RldihkZXYpOworfQorCitzdGF0aWMgaW50CitpOTE1X3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXJldHVybiBpOTE1X3N1c3BlbmQoZGV2LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJcmV0dXJuIGk5MTVfcmVzdW1lKGRldik7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaTkxNV9nZW1fdm1fb3BzID0gewogCS5mYXVsdCA9IGk5MTVfZ2VtX2ZhdWx0LAogCS5vcGVuID0gZHJtX2dlbV92bV9vcGVuLApAQCAtMTc0LDYgKzIwNiwxMiBAQAogCS5wY2lfZHJpdmVyID0gewogCQkgLm5hbWUgPSBEUklWRVJfTkFNRSwKIAkJIC5pZF90YWJsZSA9IHBjaWlkbGlzdCwKKwkJIC5wcm9iZSA9IGk5MTVfcGNpX3Byb2JlLAorCQkgLnJlbW92ZSA9IGk5MTVfcGNpX3JlbW92ZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJIC5yZXN1bWUgPSBpOTE1X3BjaV9yZXN1bWUsCisJCSAuc3VzcGVuZCA9IGk5MTVfcGNpX3N1c3BlbmQsCisjZW5kaWYKIAl9LAogCiAJLm5hbWUgPSBEUklWRVJfTkFNRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IGI1MmNiYTAuLmUwMzg5YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtNDQ2LDEzICs0NDYsMTYgQEAKIAkJIGludCBsZW5ndGgpCiB7CiAJY2hhciBfX2lvbWVtICp2YWRkcjsKKwl1bnNpZ25lZCBsb25nIHVud3JpdHRlbjsKIAogCXZhZGRyID0ga21hcF9hdG9taWMocGFnZXNbcGFnZV9iYXNlID4+IFBBR0VfU0hJRlRdLCBLTV9VU0VSMCk7CiAJaWYgKHZhZGRyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCV9fY29weV9mcm9tX3VzZXJfaW5hdG9taWModmFkZHIgKyBwYWdlX29mZnNldCwgZGF0YSwgbGVuZ3RoKTsKKwl1bndyaXR0ZW4gPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKHZhZGRyICsgcGFnZV9vZmZzZXQsIGRhdGEsIGxlbmd0aCk7CiAJa3VubWFwX2F0b21pYyh2YWRkciwgS01fVVNFUjApOwogCisJaWYgKHVud3JpdHRlbikKKwkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwOTMsNyArMTA5Niw3IEBACiAJc3RydWN0IGRybV9nZW1fbW0gKm1tID0gZGV2LT5tbV9wcml2YXRlOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqbGlzdDsKLQlzdHJ1Y3QgZHJtX21hcCAqbWFwOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXA7CiAJaW50IHJldCA9IDA7CiAKIAkvKiBTZXQgdGhlIG9iamVjdCB1cCBmb3IgbW1hcCdpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMKaW5kZXggYjQ5YzVmZi4uN2E2YmY5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMKQEAgLTE0OCw4ICsxNDgsOCBAQAogCQlwcmltYXJ5LT5zcGFjZSA9IGhlYWQgLSB0YWlsOwogCX0KIAotCURSTV9ERUJVRygiICAgaGVhZCA9IDB4JTA2bHhcbiIsIGhlYWQgLSBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KTsKLQlEUk1fREVCVUcoIiAgIHRhaWwgPSAweCUwNmx4XG4iLCB0YWlsIC0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCk7CisJRFJNX0RFQlVHKCIgICBoZWFkID0gMHglMDZseFxuIiwgKHVuc2lnbmVkIGxvbmcpKGhlYWQgLSBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KSk7CisJRFJNX0RFQlVHKCIgICB0YWlsID0gMHglMDZseFxuIiwgKHVuc2lnbmVkIGxvbmcpKHRhaWwgLSBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KSk7CiAJRFJNX0RFQlVHKCIgIHNwYWNlID0gMHglMDZ4XG4iLCBwcmltYXJ5LT5zcGFjZSk7CiAKIAltZ2FfZmx1c2hfd3JpdGVfY29tYmluZSgpOwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJCXByaW1hcnktPnNwYWNlID0gaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQ7CiAJfQogCi0JRFJNX0RFQlVHKCIgICBoZWFkID0gMHglMDZseFxuIiwgaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQpOworCURSTV9ERUJVRygiICAgaGVhZCA9IDB4JTA2bHhcbiIsICh1bnNpZ25lZCBsb25nKShoZWFkIC0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCkpOwogCURSTV9ERUJVRygiICAgdGFpbCA9IDB4JTA2eFxuIiwgcHJpbWFyeS0+dGFpbCk7CiAJRFJNX0RFQlVHKCIgICB3cmFwID0gJWRcbiIsIHByaW1hcnktPmxhc3Rfd3JhcCk7CiAJRFJNX0RFQlVHKCIgIHNwYWNlID0gMHglMDZ4XG4iLCBwcmltYXJ5LT5zcGFjZSk7CkBAIC0yMzksNyArMjM5LDcgQEAKIAlmb3IgKGVudHJ5ID0gZGV2X3ByaXYtPmhlYWQtPm5leHQ7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5uZXh0KSB7CiAJCURSTV9JTkZPKCIgICAlcCAgIGlkeD0lMmQgIGFnZT0weCV4IDB4JTA2bHhcbiIsCiAJCQkgZW50cnksIGVudHJ5LT5idWYtPmlkeCwgZW50cnktPmFnZS5oZWFkLAotCQkJIGVudHJ5LT5hZ2UuaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQpOworCQkJICh1bnNpZ25lZCBsb25nKShlbnRyeS0+YWdlLmhlYWQgLSBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KSk7CiAJfQogCURSTV9JTkZPKCJcbiIpOwogfQpAQCAtMzQwLDEwICszNDAsMTAgQEAKIAogCURSTV9ERUJVRygiICAgdGFpbD0weCUwNmx4ICVkXG4iLAogCQkgIHRhaWwtPmFnZS5oZWFkID8KLQkJICB0YWlsLT5hZ2UuaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQgOiAwLAorCQkgICh1bnNpZ25lZCBsb25nKSh0YWlsLT5hZ2UuaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQpIDogMCwKIAkJICB0YWlsLT5hZ2Uud3JhcCk7CiAJRFJNX0RFQlVHKCIgICBoZWFkPTB4JTA2bHggJWRcbiIsCi0JCSAgaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQsIHdyYXApOworCQkgICh1bnNpZ25lZCBsb25nKShoZWFkIC0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCksIHdyYXApOwogCiAJaWYgKFRFU1RfQUdFKCZ0YWlsLT5hZ2UsIGhlYWQsIHdyYXApKSB7CiAJCXByZXYgPSBkZXZfcHJpdi0+dGFpbC0+cHJldjsKQEAgLTM2Niw4ICszNjYsOSBAQAogCWRybV9tZ2FfZnJlZWxpc3RfdCAqaGVhZCwgKmVudHJ5LCAqcHJldjsKIAogCURSTV9ERUJVRygiYWdlPTB4JTA2bHggd3JhcD0lZFxuIiwKLQkJICBidWZfcHJpdi0+bGlzdF9lbnRyeS0+YWdlLmhlYWQgLQotCQkgIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQsIGJ1Zl9wcml2LT5saXN0X2VudHJ5LT5hZ2Uud3JhcCk7CisJCSAgKHVuc2lnbmVkIGxvbmcpKGJ1Zl9wcml2LT5saXN0X2VudHJ5LT5hZ2UuaGVhZCAtCisJCQkJICBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KSwKKwkJICBidWZfcHJpdi0+bGlzdF9lbnRyeS0+YWdlLndyYXApOwogCiAJZW50cnkgPSBidWZfcHJpdi0+bGlzdF9lbnRyeTsKIAloZWFkID0gZGV2X3ByaXYtPmhlYWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5oCmluZGV4IDg4MjU3YzIuLjNkMjY0ZjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaApAQCAtMTEzLDggKzExMyw4IEBACiAJICogXHNhIGRybV9tZ2FfcHJpdmF0ZV90OjptbWlvCiAJICovCiAJLypAeyAqLwotCXUzMiBtbWlvX2Jhc2U7CQkgICAvKio8IEJ1cyBhZGRyZXNzIG9mIGJhc2Ugb2YgTU1JTy4gKi8KLQl1MzIgbW1pb19zaXplOwkJICAgLyoqPCBTaXplIG9mIHRoZSBNTUlPIHJlZ2lvbi4gKi8KKwlyZXNvdXJjZV9zaXplX3QgbW1pb19iYXNlOwkgICAvKio8IEJ1cyBhZGRyZXNzIG9mIGJhc2Ugb2YgTU1JTy4gKi8KKwlyZXNvdXJjZV9zaXplX3QgbW1pb19zaXplOwkgICAvKio8IFNpemUgb2YgdGhlIE1NSU8gcmVnaW9uLiAqLwogCS8qQH0gKi8KIAogCXUzMiBjbGVhcl9jbWQ7CkBAIC0zMTcsOCArMzE3LDggQEAKIAkJRFJNX0lORk8oICJcbiIgKTsJCQkJCVwKIAkJRFJNX0lORk8oICIgICB0YWlsPTB4JTA2eCBoZWFkPTB4JTA2bHhcbiIsCQlcCiAJCQkgIGRldl9wcml2LT5wcmltLnRhaWwsCQkJCVwKLQkJCSAgTUdBX1JFQUQoIE1HQV9QUklNQUREUkVTUyApIC0JCQlcCi0JCQkgIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQgKTsJCQlcCisJCQkgICh1bnNpZ25lZCBsb25nKShNR0FfUkVBRChNR0FfUFJJTUFERFJFU1MpIC0JXAorCQkJCQkgIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQpKTsJXAogCX0JCQkJCQkJCVwKIAlpZiAoICF0ZXN0X2JpdCggMCwgJmRldl9wcml2LT5wcmltLndyYXBwZWQgKSApIHsJCVwKIAkJaWYgKCBkZXZfcHJpdi0+cHJpbS5zcGFjZSA8CQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfY2NlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2NjZS5jCmluZGV4IGMzMWFmYmQuLjMyZGU0Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfY2NlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9jY2UuYwpAQCAtNTI1LDExICs1MjUsMTIgQEAKIAl9IGVsc2UKICNlbmRpZgogCXsKLQkJZGV2X3ByaXYtPmNjZV9yaW5nLT5oYW5kbGUgPSAodm9pZCAqKWRldl9wcml2LT5jY2VfcmluZy0+b2Zmc2V0OworCQlkZXZfcHJpdi0+Y2NlX3JpbmctPmhhbmRsZSA9CisJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWRldl9wcml2LT5jY2VfcmluZy0+b2Zmc2V0OwogCQlkZXZfcHJpdi0+cmluZ19ycHRyLT5oYW5kbGUgPQotCQkgICAgKHZvaWQgKilkZXZfcHJpdi0+cmluZ19ycHRyLT5vZmZzZXQ7CisJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWRldl9wcml2LT5yaW5nX3JwdHItPm9mZnNldDsKIAkJZGV2LT5hZ3BfYnVmZmVyX21hcC0+aGFuZGxlID0KLQkJICAgICh2b2lkICopZGV2LT5hZ3BfYnVmZmVyX21hcC0+b2Zmc2V0OworCQkJKHZvaWQgKikodW5zaWduZWQgbG9uZylkZXYtPmFncF9idWZmZXJfbWFwLT5vZmZzZXQ7CiAJfQogCiAjaWYgX19PU19IQVNfQUdQCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQppbmRleCBmZWI1MjFlLi41MmNlNDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgKERSSSkgaW4gWEZyZWU4NiA0LjEuMCBhbmQgaGlnaGVyLgogCiBjY2ZsYWdzLXkgOj0gLUlpbmNsdWRlL2RybQotcmFkZW9uLXkgOj0gcmFkZW9uX2Rydi5vIHJhZGVvbl9jcC5vIHJhZGVvbl9zdGF0ZS5vIHJhZGVvbl9tZW0ubyByYWRlb25faXJxLm8gcjMwMF9jbWRidWYubworcmFkZW9uLXkgOj0gcmFkZW9uX2Rydi5vIHJhZGVvbl9jcC5vIHJhZGVvbl9zdGF0ZS5vIHJhZGVvbl9tZW0ubyByYWRlb25faXJxLm8gcjMwMF9jbWRidWYubyByNjAwX2NwLm8KIAogcmFkZW9uLSQoQ09ORklHX0NPTVBBVCkgKz0gcmFkZW9uX2lvYzMyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX2NtZGJ1Zi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX2NtZGJ1Zi5jCmluZGV4IGNhY2UzOTYuLmNiMmU0NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9jbWRidWYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfY21kYnVmLmMKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlICJyYWRlb25fZHJ2LmgiCiAjaW5jbHVkZSAicjMwMF9yZWcuaCIKIAorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKwogI2RlZmluZSBSMzAwX1NJTVVMVEFORU9VU19DTElQUkVDVFMJCTQKIAogLyogVmFsdWVzIGZvciBSMzAwX1JFX0NMSVBSRUNUX0NOVEwgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgY2xpcHJlY3RzCkBAIC0yMDUsNiArMjA3LDEwIEBACiAJQUREX1JBTkdFKDB4NDJDMCwgMik7CiAJQUREX1JBTkdFKFIzMDBfUlNfQ05UTF8wLCAyKTsKIAorCUFERF9SQU5HRShSMzAwX1NVX1JFR19ERVNULCAxKTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUzMCkKKwkJQUREX1JBTkdFKFJWNTMwX0ZHX1pCUkVHX0RFU1QsIDEpOworCiAJQUREX1JBTkdFKFIzMDBfU0NfSFlQRVJaLCAyKTsKIAlBRERfUkFOR0UoMHg0M0U4LCAxKTsKIApAQCAtMjMwLDYgKzIzNiw3IEBACiAJQUREX1JBTkdFKFIzMDBfWkJfREVQVEhQSVRDSCwgMSk7CiAJQUREX1JBTkdFKFIzMDBfWkJfREVQVEhDTEVBUlZBTFVFLCAxKTsKIAlBRERfUkFOR0UoUjMwMF9aQl9aTUFTS19PRkZTRVQsIDEzKTsKKwlBRERfUkFOR0UoUjMwMF9aQl9aUEFTU19EQVRBLCAyKTsgLyogWkJfWlBBU1NfREFUQSwgWkJfWlBBU1NfQUREUiAqLwogCiAJQUREX1JBTkdFKFIzMDBfVFhfRklMVEVSXzAsIDE2KTsKIAlBRERfUkFOR0UoUjMwMF9UWF9GSUxURVIxXzAsIDE2KTsKQEAgLTkxNyw2ICs5MjQsNyBAQAogewogCXUzMiAqcmVmX2FnZV9iYXNlOwogCXUzMiBpLCBidWZfaWR4LCBoX3BlbmRpbmc7CisJdTY0IHB0cl9hZGRyOwogCVJJTkdfTE9DQUxTOwogCiAJaWYgKGNtZGJ1Zi0+YnVmc3ogPApAQCAtOTMwLDcgKzkzOCw4IEBACiAKIAlkZXZfcHJpdi0+c2NyYXRjaF9hZ2VzW2hlYWRlci5zY3JhdGNoLnJlZ10rKzsKIAotCXJlZl9hZ2VfYmFzZSA9ICAodTMyICopKHVuc2lnbmVkIGxvbmcpKigodWludDY0X3QgKiljbWRidWYtPmJ1Zik7CisJcHRyX2FkZHIgPSBnZXRfdW5hbGlnbmVkKCh1NjQgKiljbWRidWYtPmJ1Zik7CisJcmVmX2FnZV9iYXNlID0gKHUzMiAqKSh1bnNpZ25lZCBsb25nKXB0cl9hZGRyOwogCiAJY21kYnVmLT5idWYgKz0gc2l6ZW9mKHU2NCk7CiAJY21kYnVmLT5idWZzeiAtPSBzaXplb2YodTY0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaAppbmRleCBlZTZmODExLi5iZGJjOTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oCkBAIC0xNzcwLDQgKzE3NzAsOSBAQAogI2RlZmluZSBSNTAwX1JCM0RfQ09MT1JfQ0xFQVJfVkFMVUVfQVIgIDB4NDZjMAogI2RlZmluZSBSNTAwX1JCM0RfQ09OU1RBTlRfQ09MT1JfQVIgICAgIDB4NGVmOAogCisjZGVmaW5lIFIzMDBfU1VfUkVHX0RFU1QgICAgICAgICAgICAgICAgMHg0MmM4CisjZGVmaW5lIFJWNTMwX0ZHX1pCUkVHX0RFU1QgICAgICAgICAgICAgMHg0YmU4CisjZGVmaW5lIFIzMDBfWkJfWlBBU1NfREFUQSAgICAgICAgICAgICAgMHg0ZjU4CisjZGVmaW5lIFIzMDBfWkJfWlBBU1NfQUREUiAgICAgICAgICAgICAgMHg0ZjVjCisKICNlbmRpZiAvKiBfUjMwMF9SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDE0ZWVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMKQEAgLTAsMCArMSwyMjUzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgICBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgorICogICAgIEFsZXggRGV1Y2hlciA8YWxleGFuZGVyLmRldWNoZXJAYW1kLmNvbT4KKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKKyNpbmNsdWRlICJyYWRlb25fZHJ2LmgiCisKKyNpbmNsdWRlICJyNjAwX21pY3JvY29kZS5oIgorCisjIGRlZmluZSBBVElfUENJR0FSVF9QQUdFX1NJWkUJCTQwOTYJLyoqPCBQQ0kgR0FSVCBwYWdlIHNpemUgKi8KKyMgZGVmaW5lIEFUSV9QQ0lHQVJUX1BBR0VfTUFTSwkJKH4oQVRJX1BDSUdBUlRfUEFHRV9TSVpFLTEpKQorCisjZGVmaW5lIFI2MDBfUFRFX1ZBTElEICAgICAoMSA8PCAwKQorI2RlZmluZSBSNjAwX1BURV9TWVNURU0gICAgKDEgPDwgMSkKKyNkZWZpbmUgUjYwMF9QVEVfU05PT1BFRCAgICgxIDw8IDIpCisjZGVmaW5lIFI2MDBfUFRFX1JFQURBQkxFICAoMSA8PCA1KQorI2RlZmluZSBSNjAwX1BURV9XUklURUFCTEUgKDEgPDwgNikKKworLyogTUFYIHZhbHVlcyB1c2VkIGZvciBnZnggaW5pdCAqLworI2RlZmluZSBSNlhYX01BWF9TSF9HUFJTICAgICAgICAgICAyNTYKKyNkZWZpbmUgUjZYWF9NQVhfVEVNUF9HUFJTICAgICAgICAgMTYKKyNkZWZpbmUgUjZYWF9NQVhfU0hfVEhSRUFEUyAgICAgICAgMjU2CisjZGVmaW5lIFI2WFhfTUFYX1NIX1NUQUNLX0VOVFJJRVMgIDQwOTYKKyNkZWZpbmUgUjZYWF9NQVhfQkFDS0VORFMgICAgICAgICAgOAorI2RlZmluZSBSNlhYX01BWF9CQUNLRU5EU19NQVNLICAgICAweGZmCisjZGVmaW5lIFI2WFhfTUFYX1NJTURTICAgICAgICAgICAgIDgKKyNkZWZpbmUgUjZYWF9NQVhfU0lNRFNfTUFTSyAgICAgICAgMHhmZgorI2RlZmluZSBSNlhYX01BWF9QSVBFUyAgICAgICAgICAgICA4CisjZGVmaW5lIFI2WFhfTUFYX1BJUEVTX01BU0sgICAgICAgIDB4ZmYKKworI2RlZmluZSBSN1hYX01BWF9TSF9HUFJTICAgICAgICAgICAyNTYKKyNkZWZpbmUgUjdYWF9NQVhfVEVNUF9HUFJTICAgICAgICAgMTYKKyNkZWZpbmUgUjdYWF9NQVhfU0hfVEhSRUFEUyAgICAgICAgMjU2CisjZGVmaW5lIFI3WFhfTUFYX1NIX1NUQUNLX0VOVFJJRVMgIDQwOTYKKyNkZWZpbmUgUjdYWF9NQVhfQkFDS0VORFMgICAgICAgICAgOAorI2RlZmluZSBSN1hYX01BWF9CQUNLRU5EU19NQVNLICAgICAweGZmCisjZGVmaW5lIFI3WFhfTUFYX1NJTURTICAgICAgICAgICAgIDE2CisjZGVmaW5lIFI3WFhfTUFYX1NJTURTX01BU0sgICAgICAgIDB4ZmZmZgorI2RlZmluZSBSN1hYX01BWF9QSVBFUyAgICAgICAgICAgICA4CisjZGVmaW5lIFI3WFhfTUFYX1BJUEVTX01BU0sgICAgICAgIDB4ZmYKKworc3RhdGljIGludCByNjAwX2RvX3dhaXRfZm9yX2ZpZm8oZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCBpbnQgZW50cmllcykKK3sKKwlpbnQgaTsKKworCWRldl9wcml2LT5zdGF0cy5ib3hlcyB8PSBSQURFT05fQk9YX1dBSVRfSURMRTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0OyBpKyspIHsKKwkJaW50IHNsb3RzOworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SVjc3MCkKKwkJCXNsb3RzID0gKFJBREVPTl9SRUFEKFI2MDBfR1JCTV9TVEFUVVMpCisJCQkJICYgUjcwMF9DTURGSUZPX0FWQUlMX01BU0spOworCQllbHNlCisJCQlzbG90cyA9IChSQURFT05fUkVBRChSNjAwX0dSQk1fU1RBVFVTKQorCQkJCSAmIFI2MDBfQ01ERklGT19BVkFJTF9NQVNLKTsKKwkJaWYgKHNsb3RzID49IGVudHJpZXMpCisJCQlyZXR1cm4gMDsKKwkJRFJNX1VERUxBWSgxKTsKKwl9CisJRFJNX0lORk8oIndhaXQgZm9yIGZpZm8gZmFpbGVkIHN0YXR1cyA6IDB4JTA4WCAweCUwOFhcbiIsCisJCSBSQURFT05fUkVBRChSNjAwX0dSQk1fU1RBVFVTKSwKKwkJIFJBREVPTl9SRUFEKFI2MDBfR1JCTV9TVEFUVVMyKSk7CisKKwlyZXR1cm4gLUVCVVNZOworfQorCitzdGF0aWMgaW50IHI2MDBfZG9fd2FpdF9mb3JfaWRsZShkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJaW50IGksIHJldDsKKworCWRldl9wcml2LT5zdGF0cy5ib3hlcyB8PSBSQURFT05fQk9YX1dBSVRfSURMRTsKKworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JWNzcwKQorCQlyZXQgPSByNjAwX2RvX3dhaXRfZm9yX2ZpZm8oZGV2X3ByaXYsIDgpOworCWVsc2UKKwkJcmV0ID0gcjYwMF9kb193YWl0X2Zvcl9maWZvKGRldl9wcml2LCAxNik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCWlmICghKFJBREVPTl9SRUFEKFI2MDBfR1JCTV9TVEFUVVMpICYgUjYwMF9HVUlfQUNUSVZFKSkKKwkJCXJldHVybiAwOworCQlEUk1fVURFTEFZKDEpOworCX0KKwlEUk1fSU5GTygid2FpdCBpZGxlIGZhaWxlZCBzdGF0dXMgOiAweCUwOFggMHglMDhYXG4iLAorCQkgUkFERU9OX1JFQUQoUjYwMF9HUkJNX1NUQVRVUyksCisJCSBSQURFT05fUkVBRChSNjAwX0dSQk1fU1RBVFVTMikpOworCisJcmV0dXJuIC1FQlVTWTsKK30KKwordm9pZCByNjAwX3BhZ2VfdGFibGVfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2F0aV9wY2lnYXJ0X2luZm8gKmdhcnRfaW5mbykKK3sKKwlzdHJ1Y3QgZHJtX3NnX21lbSAqZW50cnkgPSBkZXYtPnNnOworCWludCBtYXhfcGFnZXM7CisJaW50IHBhZ2VzOworCWludCBpOworCisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuOworCisJaWYgKGdhcnRfaW5mby0+YnVzX2FkZHIpIHsKKwkJbWF4X3BhZ2VzID0gKGdhcnRfaW5mby0+dGFibGVfc2l6ZSAvIHNpemVvZih1NjQpKTsKKwkJcGFnZXMgPSAoZW50cnktPnBhZ2VzIDw9IG1heF9wYWdlcykKKwkJICA/IGVudHJ5LT5wYWdlcyA6IG1heF9wYWdlczsKKworCQlmb3IgKGkgPSAwOyBpIDwgcGFnZXM7IGkrKykgeworCQkJaWYgKCFlbnRyeS0+YnVzYWRkcltpXSkKKwkJCQlicmVhazsKKwkJCXBjaV91bm1hcF9wYWdlKGRldi0+cGRldiwgZW50cnktPmJ1c2FkZHJbaV0sCisJCQkJICAgICAgIFBBR0VfU0laRSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwkJfQorCQlpZiAoZ2FydF9pbmZvLT5nYXJ0X3RhYmxlX2xvY2F0aW9uID09IERSTV9BVElfR0FSVF9NQUlOKQorCQkJZ2FydF9pbmZvLT5idXNfYWRkciA9IDA7CisJfQorfQorCisvKiBSNjAwIGhhcyBwYWdlIHRhYmxlIHNldHVwICovCitpbnQgcjYwMF9wYWdlX3RhYmxlX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fYXRpX3BjaWdhcnRfaW5mbyAqZ2FydF9pbmZvID0gJmRldl9wcml2LT5nYXJ0X2luZm87CisJc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCA9ICZnYXJ0X2luZm8tPm1hcHBpbmc7CisJc3RydWN0IGRybV9zZ19tZW0gKmVudHJ5ID0gZGV2LT5zZzsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaSwgajsKKwlpbnQgcGFnZXM7CisJdTY0IHBhZ2VfYmFzZTsKKwlkbWFfYWRkcl90IGVudHJ5X2FkZHI7CisJaW50IG1heF9hdGlfcGFnZXMsIG1heF9yZWFsX3BhZ2VzLCBnYXJ0X2lkeDsKKworCS8qIG9rYXkgcGFnZSB0YWJsZSBpcyBhdmFpbGFibGUgLSBsZXRzIHJvY2sgKi8KKwltYXhfYXRpX3BhZ2VzID0gKGdhcnRfaW5mby0+dGFibGVfc2l6ZSAvIHNpemVvZih1NjQpKTsKKwltYXhfcmVhbF9wYWdlcyA9IG1heF9hdGlfcGFnZXMgLyAoUEFHRV9TSVpFIC8gQVRJX1BDSUdBUlRfUEFHRV9TSVpFKTsKKworCXBhZ2VzID0gKGVudHJ5LT5wYWdlcyA8PSBtYXhfcmVhbF9wYWdlcykgPworCQllbnRyeS0+cGFnZXMgOiBtYXhfcmVhbF9wYWdlczsKKworCW1lbXNldF9pbygodm9pZCBfX2lvbWVtICopbWFwLT5oYW5kbGUsIDAsIG1heF9hdGlfcGFnZXMgKiBzaXplb2YodTY0KSk7CisKKwlnYXJ0X2lkeCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspIHsKKwkJZW50cnktPmJ1c2FkZHJbaV0gPSBwY2lfbWFwX3BhZ2UoZGV2LT5wZGV2LAorCQkJCQkJIGVudHJ5LT5wYWdlbGlzdFtpXSwgMCwKKwkJCQkJCSBQQUdFX1NJWkUsCisJCQkJCQkgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwkJaWYgKGVudHJ5LT5idXNhZGRyW2ldID09IDApIHsKKwkJCURSTV9FUlJPUigidW5hYmxlIHRvIG1hcCBQQ0lHQVJUIHBhZ2VzIVxuIik7CisJCQlyNjAwX3BhZ2VfdGFibGVfY2xlYW51cChkZXYsIGdhcnRfaW5mbyk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJZW50cnlfYWRkciA9IGVudHJ5LT5idXNhZGRyW2ldOworCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIEFUSV9QQ0lHQVJUX1BBR0VfU0laRSk7IGorKykgeworCQkJcGFnZV9iYXNlID0gKHU2NCkgZW50cnlfYWRkciAmIEFUSV9QQ0lHQVJUX1BBR0VfTUFTSzsKKwkJCXBhZ2VfYmFzZSB8PSBSNjAwX1BURV9WQUxJRCB8IFI2MDBfUFRFX1NZU1RFTSB8IFI2MDBfUFRFX1NOT09QRUQ7CisJCQlwYWdlX2Jhc2UgfD0gUjYwMF9QVEVfUkVBREFCTEUgfCBSNjAwX1BURV9XUklURUFCTEU7CisKKwkJCURSTV9XUklURTY0KG1hcCwgZ2FydF9pZHggKiBzaXplb2YodTY0KSwgcGFnZV9iYXNlKTsKKworCQkJZ2FydF9pZHgrKzsKKworCQkJaWYgKChpICUgMTI4KSA9PSAwKQorCQkJCURSTV9ERUJVRygicGFnZSBlbnRyeSAlZDogMHglMDE2bGx4XG4iLAorCQkJCSAgICBpLCAodW5zaWduZWQgbG9uZyBsb25nKXBhZ2VfYmFzZSk7CisJCQllbnRyeV9hZGRyICs9IEFUSV9QQ0lHQVJUX1BBR0VfU0laRTsKKwkJfQorCX0KKwlyZXQgPSAxOworZG9uZToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByNjAwX3ZtX2ZsdXNoX2dhcnRfcmFuZ2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMiByZXNwLCBjb3VudGRvd24gPSAxMDAwOworCVJBREVPTl9XUklURShSNjAwX1ZNX0NPTlRFWFQwX0lOVkFMSURBVElPTl9MT1dfQUREUiwgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgPj4gMTIpOworCVJBREVPTl9XUklURShSNjAwX1ZNX0NPTlRFWFQwX0lOVkFMSURBVElPTl9ISUdIX0FERFIsIChkZXZfcHJpdi0+Z2FydF92bV9zdGFydCArIGRldl9wcml2LT5nYXJ0X3NpemUgLSAxKSA+PiAxMik7CisJUkFERU9OX1dSSVRFKFI2MDBfVk1fQ09OVEVYVDBfUkVRVUVTVF9SRVNQT05TRSwgMik7CisKKwlkbyB7CisJCXJlc3AgPSBSQURFT05fUkVBRChSNjAwX1ZNX0NPTlRFWFQwX1JFUVVFU1RfUkVTUE9OU0UpOworCQljb3VudGRvd24tLTsKKwkJRFJNX1VERUxBWSgxKTsKKwl9IHdoaWxlICgoKHJlc3AgJiAweGYwKSA9PSAwKSAmJiBjb3VudGRvd24pOworfQorCitzdGF0aWMgdm9pZCByNjAwX3ZtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCS8qIGluaXRpYWxpc2UgdGhlIFZNIHRvIHVzZSB0aGUgcGFnZSB0YWJsZSB3ZSBjb25zdHJ1Y3RlZCB1cCB0aGVyZSAqLworCXUzMiB2bV9jMCwgaTsKKwl1MzIgbWNfcmRfYTsKKwl1MzIgdm1fbDJfY250bCwgdm1fbDJfY250bDM7CisJLyogb2theSBzZXQgdXAgdGhlIFBDSUUgYXBlcnR1cmUgdHlwZSB0aGluZ28gKi8KKwlSQURFT05fV1JJVEUoUjYwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ID4+IDEyKTsKKwlSQURFT05fV1JJVEUoUjYwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLCAoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgKyBkZXZfcHJpdi0+Z2FydF9zaXplIC0gMSkgPj4gMTIpOworCVJBREVPTl9XUklURShSNjAwX01DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ERUZBVUxUX0FERFIsIDApOworCisJLyogc2V0dXAgTUMgUkQgYSAqLworCW1jX3JkX2EgPSBSNjAwX01DRF9MMV9UTEIgfCBSNjAwX01DRF9MMV9GUkFHX1BST0MgfCBSNjAwX01DRF9TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTIHwKKwkJUjYwMF9NQ0RfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTU19QQVNTX1RIUlUgfCBSNjAwX01DRF9FRkZFQ1RJVkVfTDFfVExCX1NJWkUoNSkgfAorCQlSNjAwX01DRF9FRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSg1KSB8IFI2MDBfTUNEX1dBSVRfTDJfUVVFUlk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9NQ0RfUkRfQV9DTlRMLCBtY19yZF9hKTsKKwlSQURFT05fV1JJVEUoUjYwMF9NQ0RfUkRfQl9DTlRMLCBtY19yZF9hKTsKKworCVJBREVPTl9XUklURShSNjAwX01DRF9XUl9BX0NOVEwsIG1jX3JkX2EpOworCVJBREVPTl9XUklURShSNjAwX01DRF9XUl9CX0NOVEwsIG1jX3JkX2EpOworCisJUkFERU9OX1dSSVRFKFI2MDBfTUNEX1JEX0dGWF9DTlRMLCBtY19yZF9hKTsKKwlSQURFT05fV1JJVEUoUjYwMF9NQ0RfV1JfR0ZYX0NOVEwsIG1jX3JkX2EpOworCisJUkFERU9OX1dSSVRFKFI2MDBfTUNEX1JEX1NZU19DTlRMLCBtY19yZF9hKTsKKwlSQURFT05fV1JJVEUoUjYwMF9NQ0RfV1JfU1lTX0NOVEwsIG1jX3JkX2EpOworCisJUkFERU9OX1dSSVRFKFI2MDBfTUNEX1JEX0hEUF9DTlRMLCBtY19yZF9hIHwgUjYwMF9NQ0RfTDFfU1RSSUNUX09SREVSSU5HKTsKKwlSQURFT05fV1JJVEUoUjYwMF9NQ0RfV1JfSERQX0NOVEwsIG1jX3JkX2EgLyp8IFI2MDBfTUNEX0wxX1NUUklDVF9PUkRFUklORyovKTsKKworCVJBREVPTl9XUklURShSNjAwX01DRF9SRF9QRE1BX0NOVEwsIG1jX3JkX2EpOworCVJBREVPTl9XUklURShSNjAwX01DRF9XUl9QRE1BX0NOVEwsIG1jX3JkX2EpOworCisJUkFERU9OX1dSSVRFKFI2MDBfTUNEX1JEX1NFTV9DTlRMLCBtY19yZF9hIHwgUjYwMF9NQ0RfU0VNQVBIT1JFX01PREUpOworCVJBREVPTl9XUklURShSNjAwX01DRF9XUl9TRU1fQ05UTCwgbWNfcmRfYSk7CisKKwl2bV9sMl9jbnRsID0gUjYwMF9WTV9MMl9DQUNIRV9FTiB8IFI2MDBfVk1fTDJfRlJBR19QUk9DIHwgUjYwMF9WTV9FTkFCTEVfUFRFX0NBQ0hFX0xSVV9XOworCXZtX2wyX2NudGwgfD0gUjYwMF9WTV9MMl9DTlRMX1FVRVVFX1NJWkUoNyk7CisJUkFERU9OX1dSSVRFKFI2MDBfVk1fTDJfQ05UTCwgdm1fbDJfY250bCk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9WTV9MMl9DTlRMMiwgMCk7CisJdm1fbDJfY250bDMgPSAoUjYwMF9WTV9MMl9DTlRMM19CQU5LX1NFTEVDVF8wKDApIHwKKwkJICAgICAgIFI2MDBfVk1fTDJfQ05UTDNfQkFOS19TRUxFQ1RfMSgxKSB8CisJCSAgICAgICBSNjAwX1ZNX0wyX0NOVEwzX0NBQ0hFX1VQREFURV9NT0RFKDIpKTsKKwlSQURFT05fV1JJVEUoUjYwMF9WTV9MMl9DTlRMMywgdm1fbDJfY250bDMpOworCisJdm1fYzAgPSBSNjAwX1ZNX0VOQUJMRV9DT05URVhUIHwgUjYwMF9WTV9QQUdFX1RBQkxFX0RFUFRIX0ZMQVQ7CisKKwlSQURFT05fV1JJVEUoUjYwMF9WTV9DT05URVhUMF9DTlRMLCB2bV9jMCk7CisKKwl2bV9jMCAmPSB+UjYwMF9WTV9FTkFCTEVfQ09OVEVYVDsKKworCS8qIGRpc2FibGUgYWxsIG90aGVyIGNvbnRleHRzICovCisJZm9yIChpID0gMTsgaSA8IDg7IGkrKykKKwkJUkFERU9OX1dSSVRFKFI2MDBfVk1fQ09OVEVYVDBfQ05UTCArIChpICogNCksIHZtX2MwKTsKKworCVJBREVPTl9XUklURShSNjAwX1ZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfQkFTRV9BRERSLCBkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyID4+IDEyKTsKKwlSQURFT05fV1JJVEUoUjYwMF9WTV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFIsIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ID4+IDEyKTsKKwlSQURFT05fV1JJVEUoUjYwMF9WTV9DT05URVhUMF9QQUdFX1RBQkxFX0VORF9BRERSLCAoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgKyBkZXZfcHJpdi0+Z2FydF9zaXplIC0gMSkgPj4gMTIpOworCisJcjYwMF92bV9mbHVzaF9nYXJ0X3JhbmdlKGRldik7Cit9CisKKy8qIGxvYWQgcjYwMCBtaWNyb2NvZGUgKi8KK3N0YXRpYyB2b2lkIHI2MDBfY3BfbG9hZF9taWNyb2NvZGUoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQoreworCWludCBpOworCisJcjYwMF9kb19jcF9zdG9wKGRldl9wcml2KTsKKworCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsCisJCSAgICAgUjYwMF9SQl9OT19VUERBVEUgfAorCQkgICAgIFI2MDBfUkJfQkxLU1ooMTUpIHwKKwkJICAgICBSNjAwX1JCX0JVRlNaKDMpKTsKKworCVJBREVPTl9XUklURShSNjAwX0dSQk1fU09GVF9SRVNFVCwgUjYwMF9TT0ZUX1JFU0VUX0NQKTsKKwlSQURFT05fUkVBRChSNjAwX0dSQk1fU09GVF9SRVNFVCk7CisJRFJNX1VERUxBWSgxNTAwMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfR1JCTV9TT0ZUX1JFU0VULCAwKTsKKworCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7CisKKwlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjYwMCkpIHsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUjYwMCBDUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUE00X1VDT0RFX1NJWkU7IGkrKykgeworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSNjAwX2NwX21pY3JvY29kZVtpXVswXSk7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFI2MDBfY3BfbWljcm9jb2RlW2ldWzFdKTsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUjYwMF9jcF9taWNyb2NvZGVbaV1bMl0pOworCQl9CisKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCQlEUk1fSU5GTygiTG9hZGluZyBSNjAwIFBGUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUEZQX1VDT0RFX1NJWkU7IGkrKykKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSNjAwX3BmcF9taWNyb2NvZGVbaV0pOworCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MTApKSB7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJWNjEwIENQIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBQTTRfVUNPREVfU0laRTsgaSsrKSB7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFJWNjEwX2NwX21pY3JvY29kZVtpXVswXSk7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFJWNjEwX2NwX21pY3JvY29kZVtpXVsxXSk7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFJWNjEwX2NwX21pY3JvY29kZVtpXVsyXSk7CisJCX0KKworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJWNjEwIFBGUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUEZQX1VDT0RFX1NJWkU7IGkrKykKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSVjYxMF9wZnBfbWljcm9jb2RlW2ldKTsKKwl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjMwKSkgeworCQlEUk1fSU5GTygiTG9hZGluZyBSVjYzMCBDUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUE00X1VDT0RFX1NJWkU7IGkrKykgeworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSVjYzMF9jcF9taWNyb2NvZGVbaV1bMF0pOworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSVjYzMF9jcF9taWNyb2NvZGVbaV1bMV0pOworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSVjYzMF9jcF9taWNyb2NvZGVbaV1bMl0pOworCQl9CisKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCQlEUk1fSU5GTygiTG9hZGluZyBSVjYzMCBQRlAgTWljcm9jb2RlXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IFBGUF9VQ09ERV9TSVpFOyBpKyspCisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfREFUQSwgUlY2MzBfcGZwX21pY3JvY29kZVtpXSk7CisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYyMCkpIHsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlY2MjAgQ1AgTWljcm9jb2RlXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IFBNNF9VQ09ERV9TSVpFOyBpKyspIHsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUlY2MjBfY3BfbWljcm9jb2RlW2ldWzBdKTsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUlY2MjBfY3BfbWljcm9jb2RlW2ldWzFdKTsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUlY2MjBfY3BfbWljcm9jb2RlW2ldWzJdKTsKKwkJfQorCisJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlY2MjAgUEZQIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBQRlBfVUNPREVfU0laRTsgaSsrKQorCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0RBVEEsIFJWNjIwX3BmcF9taWNyb2NvZGVbaV0pOworCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MzUpKSB7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJWNjM1IENQIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBQTTRfVUNPREVfU0laRTsgaSsrKSB7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFJWNjM1X2NwX21pY3JvY29kZVtpXVswXSk7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFJWNjM1X2NwX21pY3JvY29kZVtpXVsxXSk7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFJWNjM1X2NwX21pY3JvY29kZVtpXVsyXSk7CisJCX0KKworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJWNjM1IFBGUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUEZQX1VDT0RFX1NJWkU7IGkrKykKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSVjYzNV9wZnBfbWljcm9jb2RlW2ldKTsKKwl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjcwKSkgeworCQlEUk1fSU5GTygiTG9hZGluZyBSVjY3MCBDUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUE00X1VDT0RFX1NJWkU7IGkrKykgeworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSVjY3MF9jcF9taWNyb2NvZGVbaV1bMF0pOworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSVjY3MF9jcF9taWNyb2NvZGVbaV1bMV0pOworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSVjY3MF9jcF9taWNyb2NvZGVbaV1bMl0pOworCQl9CisKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCQlEUk1fSU5GTygiTG9hZGluZyBSVjY3MCBQRlAgTWljcm9jb2RlXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IFBGUF9VQ09ERV9TSVpFOyBpKyspCisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfREFUQSwgUlY2NzBfcGZwX21pY3JvY29kZVtpXSk7CisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc4MCkpIHsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlM3ODAgQ1AgTWljcm9jb2RlXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IFBNNF9VQ09ERV9TSVpFOyBpKyspIHsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUlY2NzBfY3BfbWljcm9jb2RlW2ldWzBdKTsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUlY2NzBfY3BfbWljcm9jb2RlW2ldWzFdKTsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUlY2NzBfY3BfbWljcm9jb2RlW2ldWzJdKTsKKwkJfQorCisJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlM3ODAgUEZQIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBQRlBfVUNPREVfU0laRTsgaSsrKQorCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0RBVEEsIFJWNjcwX3BmcF9taWNyb2NvZGVbaV0pOworCX0KKwlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX1dBRERSLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fUkFERFIsIDApOworCit9CisKK3N0YXRpYyB2b2lkIHI3MDBfdm1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJLyogaW5pdGlhbGlzZSB0aGUgVk0gdG8gdXNlIHRoZSBwYWdlIHRhYmxlIHdlIGNvbnN0cnVjdGVkIHVwIHRoZXJlICovCisJdTMyIHZtX2MwLCBpOworCXUzMiBtY192bV9tZF9sMTsKKwl1MzIgdm1fbDJfY250bCwgdm1fbDJfY250bDM7CisJLyogb2theSBzZXQgdXAgdGhlIFBDSUUgYXBlcnR1cmUgdHlwZSB0aGluZ28gKi8KKwlSQURFT05fV1JJVEUoUjcwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ID4+IDEyKTsKKwlSQURFT05fV1JJVEUoUjcwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLCAoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgKyBkZXZfcHJpdi0+Z2FydF9zaXplIC0gMSkgPj4gMTIpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ERUZBVUxUX0FERFIsIDApOworCisJbWNfdm1fbWRfbDEgPSBSNzAwX0VOQUJMRV9MMV9UTEIgfAorCSAgICBSNzAwX0VOQUJMRV9MMV9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKKwkgICAgUjcwMF9TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTIHwKKwkgICAgUjcwMF9TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX1BBU1NfVEhSVSB8CisJICAgIFI3MDBfRUZGRUNUSVZFX0wxX1RMQl9TSVpFKDUpIHwKKwkgICAgUjcwMF9FRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSg1KTsKKworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01EX0wxX1RMQjBfQ05UTCwgbWNfdm1fbWRfbDEpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01EX0wxX1RMQjFfQ05UTCwgbWNfdm1fbWRfbDEpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01EX0wxX1RMQjJfQ05UTCwgbWNfdm1fbWRfbDEpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01CX0wxX1RMQjBfQ05UTCwgbWNfdm1fbWRfbDEpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01CX0wxX1RMQjFfQ05UTCwgbWNfdm1fbWRfbDEpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01CX0wxX1RMQjJfQ05UTCwgbWNfdm1fbWRfbDEpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01CX0wxX1RMQjNfQ05UTCwgbWNfdm1fbWRfbDEpOworCisJdm1fbDJfY250bCA9IFI2MDBfVk1fTDJfQ0FDSEVfRU4gfCBSNjAwX1ZNX0wyX0ZSQUdfUFJPQyB8IFI2MDBfVk1fRU5BQkxFX1BURV9DQUNIRV9MUlVfVzsKKwl2bV9sMl9jbnRsIHw9IFI3MDBfVk1fTDJfQ05UTF9RVUVVRV9TSVpFKDcpOworCVJBREVPTl9XUklURShSNjAwX1ZNX0wyX0NOVEwsIHZtX2wyX2NudGwpOworCisJUkFERU9OX1dSSVRFKFI2MDBfVk1fTDJfQ05UTDIsIDApOworCXZtX2wyX2NudGwzID0gUjcwMF9WTV9MMl9DTlRMM19CQU5LX1NFTEVDVCgwKSB8IFI3MDBfVk1fTDJfQ05UTDNfQ0FDSEVfVVBEQVRFX01PREUoMik7CisJUkFERU9OX1dSSVRFKFI2MDBfVk1fTDJfQ05UTDMsIHZtX2wyX2NudGwzKTsKKworCXZtX2MwID0gUjYwMF9WTV9FTkFCTEVfQ09OVEVYVCB8IFI2MDBfVk1fUEFHRV9UQUJMRV9ERVBUSF9GTEFUOworCisJUkFERU9OX1dSSVRFKFI2MDBfVk1fQ09OVEVYVDBfQ05UTCwgdm1fYzApOworCisJdm1fYzAgJj0gflI2MDBfVk1fRU5BQkxFX0NPTlRFWFQ7CisKKwkvKiBkaXNhYmxlIGFsbCBvdGhlciBjb250ZXh0cyAqLworCWZvciAoaSA9IDE7IGkgPCA4OyBpKyspCisJCVJBREVPTl9XUklURShSNjAwX1ZNX0NPTlRFWFQwX0NOVEwgKyAoaSAqIDQpLCB2bV9jMCk7CisKKwlSQURFT05fV1JJVEUoUjcwMF9WTV9DT05URVhUMF9QQUdFX1RBQkxFX0JBU0VfQUREUiwgZGV2X3ByaXYtPmdhcnRfaW5mby5idXNfYWRkciA+PiAxMik7CisJUkFERU9OX1dSSVRFKFI3MDBfVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9TVEFSVF9BRERSLCBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCA+PiAxMik7CisJUkFERU9OX1dSSVRFKFI3MDBfVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9FTkRfQUREUiwgKGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ICsgZGV2X3ByaXYtPmdhcnRfc2l6ZSAtIDEpID4+IDEyKTsKKworCXI2MDBfdm1fZmx1c2hfZ2FydF9yYW5nZShkZXYpOworfQorCisvKiBsb2FkIHI2MDAgbWljcm9jb2RlICovCitzdGF0aWMgdm9pZCByNzAwX2NwX2xvYWRfbWljcm9jb2RlKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdikKK3sKKwlpbnQgaTsKKworCXI2MDBfZG9fY3Bfc3RvcChkZXZfcHJpdik7CisKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9DTlRMLAorCQkgICAgIFI2MDBfUkJfTk9fVVBEQVRFIHwKKwkJICAgICAoMTUgPDwgOCkgfAorCQkgICAgICgzIDw8IDApKTsKKworCVJBREVPTl9XUklURShSNjAwX0dSQk1fU09GVF9SRVNFVCwgUjYwMF9TT0ZUX1JFU0VUX0NQKTsKKwlSQURFT05fUkVBRChSNjAwX0dSQk1fU09GVF9SRVNFVCk7CisJRFJNX1VERUxBWSgxNTAwMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfR1JCTV9TT0ZUX1JFU0VULCAwKTsKKworCisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNzcwKSkgeworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJWNzcwIFBGUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUjcwMF9QRlBfVUNPREVfU0laRTsgaSsrKQorCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0RBVEEsIFJWNzcwX3BmcF9taWNyb2NvZGVbaV0pOworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CisKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX1dBRERSLCAwKTsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlY3NzAgQ1AgTWljcm9jb2RlXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IFI3MDBfUE00X1VDT0RFX1NJWkU7IGkrKykKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLCBSVjc3MF9jcF9taWNyb2NvZGVbaV0pOworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fV0FERFIsIDApOworCisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjczMCkpIHsKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCQlEUk1fSU5GTygiTG9hZGluZyBSVjczMCBQRlAgTWljcm9jb2RlXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IFI3MDBfUEZQX1VDT0RFX1NJWkU7IGkrKykKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSVjczMF9wZnBfbWljcm9jb2RlW2ldKTsKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCisJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJWNzMwIENQIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBSNzAwX1BNNF9VQ09ERV9TSVpFOyBpKyspCisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwgUlY3MzBfY3BfbWljcm9jb2RlW2ldKTsKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX1dBRERSLCAwKTsKKworCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY3MTApKSB7CisJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlY3MTAgUEZQIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBSNzAwX1BGUF9VQ09ERV9TSVpFOyBpKyspCisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfREFUQSwgUlY3MTBfcGZwX21pY3JvY29kZVtpXSk7CisJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKKworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fV0FERFIsIDApOworCQlEUk1fSU5GTygiTG9hZGluZyBSVjcxMCBDUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUjcwMF9QTTRfVUNPREVfU0laRTsgaSsrKQorCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsIFJWNzEwX2NwX21pY3JvY29kZVtpXSk7CisJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7CisKKwl9CisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX1JBRERSLCAwKTsKKworfQorCitzdGF0aWMgdm9pZCByNjAwX3Rlc3Rfd3JpdGViYWNrKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdikKK3sKKwl1MzIgdG1wOworCisJLyogU3RhcnQgd2l0aCBhc3N1bWluZyB0aGF0IHdyaXRlYmFjayBkb2Vzbid0IHdvcmsgKi8KKwlkZXZfcHJpdi0+d3JpdGViYWNrX3dvcmtzID0gMDsKKworCS8qIFdyaXRlYmFjayBkb2Vzbid0IHNlZW0gdG8gd29yayBldmVyeXdoZXJlLCB0ZXN0IGl0IGhlcmUgYW5kIHBvc3NpYmx5CisJICogZW5hYmxlIGl0IGlmIGl0IGFwcGVhcnMgdG8gd29yaworCSAqLworCXJhZGVvbl93cml0ZV9yaW5nX3JwdHIoZGV2X3ByaXYsIFI2MDBfU0NSQVRDSE9GRigxKSwgMCk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9TQ1JBVENIX1JFRzEsIDB4ZGVhZGJlZWYpOworCisJZm9yICh0bXAgPSAwOyB0bXAgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0OyB0bXArKykgeworCQl1MzIgdmFsOworCisJCXZhbCA9IHJhZGVvbl9yZWFkX3JpbmdfcnB0cihkZXZfcHJpdiwgUjYwMF9TQ1JBVENIT0ZGKDEpKTsKKwkJaWYgKHZhbCA9PSAweGRlYWRiZWVmKQorCQkJYnJlYWs7CisJCURSTV9VREVMQVkoMSk7CisJfQorCisJaWYgKHRtcCA8IGRldl9wcml2LT51c2VjX3RpbWVvdXQpIHsKKwkJZGV2X3ByaXYtPndyaXRlYmFja193b3JrcyA9IDE7CisJCURSTV9JTkZPKCJ3cml0ZWJhY2sgdGVzdCBzdWNjZWVkZWQgaW4gJWQgdXNlY3NcbiIsIHRtcCk7CisJfSBlbHNlIHsKKwkJZGV2X3ByaXYtPndyaXRlYmFja193b3JrcyA9IDA7CisJCURSTV9JTkZPKCJ3cml0ZWJhY2sgdGVzdCBmYWlsZWRcbiIpOworCX0KKwlpZiAocmFkZW9uX25vX3diID09IDEpIHsKKwkJZGV2X3ByaXYtPndyaXRlYmFja193b3JrcyA9IDA7CisJCURSTV9JTkZPKCJ3cml0ZWJhY2sgZm9yY2VkIG9mZlxuIik7CisJfQorCisJaWYgKCFkZXZfcHJpdi0+d3JpdGViYWNrX3dvcmtzKSB7CisJCS8qIERpc2FibGUgd3JpdGViYWNrIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGJ1cyBtYXN0ZXIgdHJhbnNmZXIgKi8KKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQ05UTCwgUkFERU9OX1JFQUQoUjYwMF9DUF9SQl9DTlRMKSB8CisJCQkgICAgIFJBREVPTl9SQl9OT19VUERBVEUpOworCQlSQURFT05fV1JJVEUoUjYwMF9TQ1JBVENIX1VNU0ssIDApOworCX0KK30KKworaW50IHI2MDBfZG9fZW5naW5lX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgY3BfcHRyLCBjcF9tZV9jbnRsLCBjcF9yYl9jbnRsOworCisJRFJNX0lORk8oIlJlc2V0dGluZyBHUFVcbiIpOworCisJY3BfcHRyID0gUkFERU9OX1JFQUQoUjYwMF9DUF9SQl9XUFRSKTsKKwljcF9tZV9jbnRsID0gUkFERU9OX1JFQUQoUjYwMF9DUF9NRV9DTlRMKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9DTlRMLCBSNjAwX0NQX01FX0hBTFQpOworCisJUkFERU9OX1dSSVRFKFI2MDBfR1JCTV9TT0ZUX1JFU0VULCAweDdmZmYpOworCVJBREVPTl9SRUFEKFI2MDBfR1JCTV9TT0ZUX1JFU0VUKTsKKwlEUk1fVURFTEFZKDUwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9HUkJNX1NPRlRfUkVTRVQsIDApOworCVJBREVPTl9SRUFEKFI2MDBfR1JCTV9TT0ZUX1JFU0VUKTsKKworCVJBREVPTl9XUklURShSNjAwX0NQX1JCX1dQVFJfREVMQVksIDApOworCWNwX3JiX2NudGwgPSBSQURFT05fUkVBRChSNjAwX0NQX1JCX0NOVEwpOworCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsIFI2MDBfUkJfUlBUUl9XUl9FTkEpOworCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfUlBUUl9XUiwgY3BfcHRyKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9XUFRSLCBjcF9wdHIpOworCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsIGNwX3JiX2NudGwpOworCVJBREVPTl9XUklURShSNjAwX0NQX01FX0NOVEwsIGNwX21lX2NudGwpOworCisJLyogUmVzZXQgdGhlIENQIHJpbmcgKi8KKwlyNjAwX2RvX2NwX3Jlc2V0KGRldl9wcml2KTsKKworCS8qIFRoZSBDUCBpcyBubyBsb25nZXIgcnVubmluZyBhZnRlciBhbiBlbmdpbmUgcmVzZXQgKi8KKwlkZXZfcHJpdi0+Y3BfcnVubmluZyA9IDA7CisKKwkvKiBSZXNldCBhbnkgcGVuZGluZyB2ZXJ0ZXgsIGluZGlyZWN0IGJ1ZmZlcnMgKi8KKwlyYWRlb25fZnJlZWxpc3RfcmVzZXQoZGV2KTsKKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyB1MzIgcjYwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKHUzMiBudW1fdGlsZV9waXBlcywKKwkJCQkJICAgICB1MzIgbnVtX2JhY2tlbmRzLAorCQkJCQkgICAgIHUzMiBiYWNrZW5kX2Rpc2FibGVfbWFzaykKK3sKKwl1MzIgYmFja2VuZF9tYXAgPSAwOworCXUzMiBlbmFibGVkX2JhY2tlbmRzX21hc2s7CisJdTMyIGVuYWJsZWRfYmFja2VuZHNfY291bnQ7CisJdTMyIGN1cl9waXBlOworCXUzMiBzd2l6emxlX3BpcGVbUjZYWF9NQVhfUElQRVNdOworCXUzMiBjdXJfYmFja2VuZDsKKwl1MzIgaTsKKworCWlmIChudW1fdGlsZV9waXBlcyA+IFI2WFhfTUFYX1BJUEVTKQorCQludW1fdGlsZV9waXBlcyA9IFI2WFhfTUFYX1BJUEVTOworCWlmIChudW1fdGlsZV9waXBlcyA8IDEpCisJCW51bV90aWxlX3BpcGVzID0gMTsKKwlpZiAobnVtX2JhY2tlbmRzID4gUjZYWF9NQVhfQkFDS0VORFMpCisJCW51bV9iYWNrZW5kcyA9IFI2WFhfTUFYX0JBQ0tFTkRTOworCWlmIChudW1fYmFja2VuZHMgPCAxKQorCQludW1fYmFja2VuZHMgPSAxOworCisJZW5hYmxlZF9iYWNrZW5kc19tYXNrID0gMDsKKwllbmFibGVkX2JhY2tlbmRzX2NvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgUjZYWF9NQVhfQkFDS0VORFM7ICsraSkgeworCQlpZiAoKChiYWNrZW5kX2Rpc2FibGVfbWFzayA+PiBpKSAmIDEpID09IDApIHsKKwkJCWVuYWJsZWRfYmFja2VuZHNfbWFzayB8PSAoMSA8PCBpKTsKKwkJCSsrZW5hYmxlZF9iYWNrZW5kc19jb3VudDsKKwkJfQorCQlpZiAoZW5hYmxlZF9iYWNrZW5kc19jb3VudCA9PSBudW1fYmFja2VuZHMpCisJCQlicmVhazsKKwl9CisKKwlpZiAoZW5hYmxlZF9iYWNrZW5kc19jb3VudCA9PSAwKSB7CisJCWVuYWJsZWRfYmFja2VuZHNfbWFzayA9IDE7CisJCWVuYWJsZWRfYmFja2VuZHNfY291bnQgPSAxOworCX0KKworCWlmIChlbmFibGVkX2JhY2tlbmRzX2NvdW50ICE9IG51bV9iYWNrZW5kcykKKwkJbnVtX2JhY2tlbmRzID0gZW5hYmxlZF9iYWNrZW5kc19jb3VudDsKKworCW1lbXNldCgodWludDhfdCAqKSZzd2l6emxlX3BpcGVbMF0sIDAsIHNpemVvZih1MzIpICogUjZYWF9NQVhfUElQRVMpOworCXN3aXRjaCAobnVtX3RpbGVfcGlwZXMpIHsKKwljYXNlIDE6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQlzd2l6emxlX3BpcGVbMl0gPSAyOworCQlicmVhazsKKwljYXNlIDQ6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDE7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDI7CisJCXN3aXp6bGVfcGlwZVszXSA9IDM7CisJCWJyZWFrOworCWNhc2UgNToKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMTsKKwkJc3dpenpsZV9waXBlWzJdID0gMjsKKwkJc3dpenpsZV9waXBlWzNdID0gMzsKKwkJc3dpenpsZV9waXBlWzRdID0gNDsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAyOworCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQlzd2l6emxlX3BpcGVbM10gPSA1OworCQlzd2l6emxlX3BpcGVbNF0gPSAxOworCQlzd2l6emxlX3BpcGVbNV0gPSAzOworCQlicmVhazsKKwljYXNlIDc6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDQ7CisJCXN3aXp6bGVfcGlwZVszXSA9IDY7CisJCXN3aXp6bGVfcGlwZVs0XSA9IDE7CisJCXN3aXp6bGVfcGlwZVs1XSA9IDM7CisJCXN3aXp6bGVfcGlwZVs2XSA9IDU7CisJCWJyZWFrOworCWNhc2UgODoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJc3dpenpsZV9waXBlWzJdID0gNDsKKwkJc3dpenpsZV9waXBlWzNdID0gNjsKKwkJc3dpenpsZV9waXBlWzRdID0gMTsKKwkJc3dpenpsZV9waXBlWzVdID0gMzsKKwkJc3dpenpsZV9waXBlWzZdID0gNTsKKwkJc3dpenpsZV9waXBlWzddID0gNzsKKwkJYnJlYWs7CisJfQorCisJY3VyX2JhY2tlbmQgPSAwOworCWZvciAoY3VyX3BpcGUgPSAwOyBjdXJfcGlwZSA8IG51bV90aWxlX3BpcGVzOyArK2N1cl9waXBlKSB7CisJCXdoaWxlICgoKDEgPDwgY3VyX2JhY2tlbmQpICYgZW5hYmxlZF9iYWNrZW5kc19tYXNrKSA9PSAwKQorCQkJY3VyX2JhY2tlbmQgPSAoY3VyX2JhY2tlbmQgKyAxKSAlIFI2WFhfTUFYX0JBQ0tFTkRTOworCisJCWJhY2tlbmRfbWFwIHw9ICh1MzIpKCgoY3VyX2JhY2tlbmQgJiAzKSA8PCAoc3dpenpsZV9waXBlW2N1cl9waXBlXSAqIDIpKSk7CisKKwkJY3VyX2JhY2tlbmQgPSAoY3VyX2JhY2tlbmQgKyAxKSAlIFI2WFhfTUFYX0JBQ0tFTkRTOworCX0KKworCXJldHVybiBiYWNrZW5kX21hcDsKK30KKworc3RhdGljIGludCByNjAwX2NvdW50X3BpcGVfYml0cyh1aW50MzJfdCB2YWwpCit7CisJaW50IGksIHJldCA9IDA7CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJcmV0ICs9IHZhbCAmIDE7CisJCXZhbCA+Pj0gMTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcjYwMF9nZnhfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICBkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJaW50IGksIGosIG51bV9xZF9waXBlczsKKwl1MzIgc3hfZGVidWdfMTsKKwl1MzIgdGNfY250bDsKKwl1MzIgYXJiX3BvcDsKKwl1MzIgbnVtX2dzX3ZlcnRzX3Blcl90aHJlYWQ7CisJdTMyIHZndF9nc19wZXJfZXM7CisJdTMyIGdzX3ByaW1fYnVmZmVyX2RlcHRoID0gMDsKKwl1MzIgc3FfbXNfZmlmb19zaXplczsKKwl1MzIgc3FfY29uZmlnOworCXUzMiBzcV9ncHJfcmVzb3VyY2VfbWdtdF8xID0gMDsKKwl1MzIgc3FfZ3ByX3Jlc291cmNlX21nbXRfMiA9IDA7CisJdTMyIHNxX3RocmVhZF9yZXNvdXJjZV9tZ210ID0gMDsKKwl1MzIgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8xID0gMDsKKwl1MzIgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yID0gMDsKKwl1MzIgaGRwX2hvc3RfcGF0aF9jbnRsOworCXUzMiBiYWNrZW5kX21hcDsKKwl1MzIgZ2JfdGlsaW5nX2NvbmZpZyA9IDA7CisJdTMyIGNjX3JiX2JhY2tlbmRfZGlzYWJsZSA9IDA7CisJdTMyIGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyA9IDA7CisJdTMyIHJhbWNmZzsKKworCS8qIHNldHVwIGNoaXAgc3BlY3MgKi8KKwlzd2l0Y2ggKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgeworCWNhc2UgQ0hJUF9SNjAwOgorCQlkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgPSA0OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcyA9IDg7CisJCWRldl9wcml2LT5yNjAwX21heF9zaW1kcyA9IDQ7CisJCWRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcyA9IDQ7CisJCWRldl9wcml2LT5yNjAwX21heF9ncHJzID0gMjU2OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGhyZWFkcyA9IDE5MjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3N0YWNrX2VudHJpZXMgPSAyNTY7CisJCWRldl9wcml2LT5yNjAwX21heF9od19jb250ZXh0cyA9IDg7CisJCWRldl9wcml2LT5yNjAwX21heF9nc190aHJlYWRzID0gMTY7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc2l6ZSA9IDEyODsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSA9IDE2OworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3NteF9zaXplID0gMTI4OworCQlkZXZfcHJpdi0+cjYwMF9zcV9udW1fY2ZfaW5zdHMgPSAyOworCQlicmVhazsKKwljYXNlIENISVBfUlY2MzA6CisJY2FzZSBDSElQX1JWNjM1OgorCQlkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgPSAyOworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcyA9IDI7CisJCWRldl9wcml2LT5yNjAwX21heF9zaW1kcyA9IDM7CisJCWRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcyA9IDE7CisJCWRldl9wcml2LT5yNjAwX21heF9ncHJzID0gMTI4OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGhyZWFkcyA9IDE5MjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3N0YWNrX2VudHJpZXMgPSAxMjg7CisJCWRldl9wcml2LT5yNjAwX21heF9od19jb250ZXh0cyA9IDg7CisJCWRldl9wcml2LT5yNjAwX21heF9nc190aHJlYWRzID0gNDsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9zaXplID0gMTI4OworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gMTY7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc214X3NpemUgPSAxMjg7CisJCWRldl9wcml2LT5yNjAwX3NxX251bV9jZl9pbnN0cyA9IDI7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjYxMDoKKwljYXNlIENISVBfUlM3ODA6CisJY2FzZSBDSElQX1JWNjIwOgorCQlkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgPSAxOworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcyA9IDE7CisJCWRldl9wcml2LT5yNjAwX21heF9zaW1kcyA9IDI7CisJCWRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcyA9IDE7CisJCWRldl9wcml2LT5yNjAwX21heF9ncHJzID0gMTI4OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGhyZWFkcyA9IDE5MjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3N0YWNrX2VudHJpZXMgPSAxMjg7CisJCWRldl9wcml2LT5yNjAwX21heF9od19jb250ZXh0cyA9IDQ7CisJCWRldl9wcml2LT5yNjAwX21heF9nc190aHJlYWRzID0gNDsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9zaXplID0gMTI4OworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gMTY7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc214X3NpemUgPSAxMjg7CisJCWRldl9wcml2LT5yNjAwX3NxX251bV9jZl9pbnN0cyA9IDE7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjY3MDoKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3BpcGVzID0gNDsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3RpbGVfcGlwZXMgPSA0OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfc2ltZHMgPSA0OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfYmFja2VuZHMgPSA0OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfZ3BycyA9IDE5MjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3RocmVhZHMgPSAxOTI7CisJCWRldl9wcml2LT5yNjAwX21heF9zdGFja19lbnRyaWVzID0gMjU2OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfaHdfY29udGV4dHMgPSA4OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfZ3NfdGhyZWFkcyA9IDE2OworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3NpemUgPSAxMjg7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfcG9zX3NpemUgPSAxNjsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSA9IDEyODsKKwkJZGV2X3ByaXYtPnI2MDBfc3FfbnVtX2NmX2luc3RzID0gMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogSW5pdGlhbGl6ZSBIRFAgKi8KKwlqID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlSQURFT05fV1JJVEUoKDB4MmMxNCArIGopLCAweDAwMDAwMDAwKTsKKwkJUkFERU9OX1dSSVRFKCgweDJjMTggKyBqKSwgMHgwMDAwMDAwMCk7CisJCVJBREVPTl9XUklURSgoMHgyYzFjICsgaiksIDB4MDAwMDAwMDApOworCQlSQURFT05fV1JJVEUoKDB4MmMyMCArIGopLCAweDAwMDAwMDAwKTsKKwkJUkFERU9OX1dSSVRFKCgweDJjMjQgKyBqKSwgMHgwMDAwMDAwMCk7CisJCWogKz0gMHgxODsKKwl9CisKKwlSQURFT05fV1JJVEUoUjYwMF9HUkJNX0NOVEwsIFI2MDBfR1JCTV9SRUFEX1RJTUVPVVQoMHhmZikpOworCisJLyogc2V0dXAgdGlsaW5nLCBzaW1kLCBwaXBlIGNvbmZpZyAqLworCXJhbWNmZyA9IFJBREVPTl9SRUFEKFI2MDBfUkFNQ0ZHKTsKKworCXN3aXRjaCAoZGV2X3ByaXYtPnI2MDBfbWF4X3RpbGVfcGlwZXMpIHsKKwljYXNlIDE6CisJCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9QSVBFX1RJTElORygwKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfUElQRV9USUxJTkcoMSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX1BJUEVfVElMSU5HKDIpOworCQlicmVhazsKKwljYXNlIDg6CisJCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9QSVBFX1RJTElORygzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0JBTktfVElMSU5HKChyYW1jZmcgPj4gUjYwMF9OT09GQkFOS19TSElGVCkgJiBSNjAwX05PT0ZCQU5LX01BU0spOworCisJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0dST1VQX1NJWkUoMCk7CisKKwlpZiAoKChyYW1jZmcgPj4gUjYwMF9OT09GUk9XU19TSElGVCkgJiBSNjAwX05PT0ZST1dTX01BU0spID4gMykgeworCQlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfUk9XX1RJTElORygzKTsKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX1NBTVBMRV9TUExJVCgzKTsKKwl9IGVsc2UgeworCQlnYl90aWxpbmdfY29uZmlnIHw9CisJCQlSNjAwX1JPV19USUxJTkcoKChyYW1jZmcgPj4gUjYwMF9OT09GUk9XU19TSElGVCkgJiBSNjAwX05PT0ZST1dTX01BU0spKTsKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PQorCQkJUjYwMF9TQU1QTEVfU1BMSVQoKChyYW1jZmcgPj4gUjYwMF9OT09GUk9XU19TSElGVCkgJiBSNjAwX05PT0ZST1dTX01BU0spKTsKKwl9CisKKwlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfQkFOS19TV0FQUygxKTsKKworCWJhY2tlbmRfbWFwID0gcjYwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKGRldl9wcml2LT5yNjAwX21heF90aWxlX3BpcGVzLAorCQkJCQkJCWRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcywKKwkJCQkJCQkoMHhmZiA8PCBkZXZfcHJpdi0+cjYwMF9tYXhfYmFja2VuZHMpICYgMHhmZik7CisJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0JBQ0tFTkRfTUFQKGJhY2tlbmRfbWFwKTsKKworCWNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyA9CisJCVI2MDBfSU5BQ1RJVkVfUURfUElQRVMoKFI2WFhfTUFYX1BJUEVTX01BU0sgPDwgZGV2X3ByaXYtPnI2MDBfbWF4X3BpcGVzKSAmIFI2WFhfTUFYX1BJUEVTX01BU0spOworCWNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyB8PQorCQlSNjAwX0lOQUNUSVZFX1NJTURTKChSNlhYX01BWF9TSU1EU19NQVNLIDw8IGRldl9wcml2LT5yNjAwX21heF9zaW1kcykgJiBSNlhYX01BWF9TSU1EU19NQVNLKTsKKworCWNjX3JiX2JhY2tlbmRfZGlzYWJsZSA9CisJCVI2MDBfQkFDS0VORF9ESVNBQkxFKChSNlhYX01BWF9CQUNLRU5EU19NQVNLIDw8IGRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcykgJiBSNlhYX01BWF9CQUNLRU5EU19NQVNLKTsKKworCVJBREVPTl9XUklURShSNjAwX0dCX1RJTElOR19DT05GSUcsICAgICAgZ2JfdGlsaW5nX2NvbmZpZyk7CisJUkFERU9OX1dSSVRFKFI2MDBfRENQX1RJTElOR19DT05GSUcsICAgIChnYl90aWxpbmdfY29uZmlnICYgMHhmZmZmKSk7CisJUkFERU9OX1dSSVRFKFI2MDBfSERQX1RJTElOR19DT05GSUcsICAgIChnYl90aWxpbmdfY29uZmlnICYgMHhmZmZmKSk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9DQ19SQl9CQUNLRU5EX0RJU0FCTEUsICAgICAgY2NfcmJfYmFja2VuZF9kaXNhYmxlKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DQ19HQ19TSEFERVJfUElQRV9DT05GSUcsICAgY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnKTsKKwlSQURFT05fV1JJVEUoUjYwMF9HQ19VU0VSX1NIQURFUl9QSVBFX0NPTkZJRywgY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnKTsKKworCW51bV9xZF9waXBlcyA9CisJCVI2WFhfTUFYX0JBQ0tFTkRTIC0gcjYwMF9jb3VudF9waXBlX2JpdHMoY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnICYgUjYwMF9JTkFDVElWRV9RRF9QSVBFU19NQVNLKTsKKwlSQURFT05fV1JJVEUoUjYwMF9WR1RfT1VUX0RFQUxMT0NfQ05UTCwgKG51bV9xZF9waXBlcyAqIDQpICYgUjYwMF9ERUFMTE9DX0RJU1RfTUFTSyk7CisJUkFERU9OX1dSSVRFKFI2MDBfVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMLCAoKG51bV9xZF9waXBlcyAqIDQpIC0gMikgJiBSNjAwX1ZUWF9SRVVTRV9ERVBUSF9NQVNLKTsKKworCS8qIHNldCBIVyBkZWZhdWx0cyBmb3IgM0QgZW5naW5lICovCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUVVFVUVfVEhSRVNIT0xEUywgKFI2MDBfUk9RX0lCMV9TVEFSVCgweDE2KSB8CisJCQkJCQlSNjAwX1JPUV9JQjJfU1RBUlQoMHgyYikpKTsKKworCVJBREVPTl9XUklURShSNjAwX0NQX01FUV9USFJFU0hPTERTLCAoUjYwMF9NRVFfRU5EKDB4NDApIHwKKwkJCQkJICAgICAgUjYwMF9ST1FfRU5EKDB4NDApKSk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9UQV9DTlRMX0FVWCwgKFI2MDBfRElTQUJMRV9DVUJFX0FOSVNPIHwKKwkJCQkJUjYwMF9TWU5DX0dSQURJRU5UIHwKKwkJCQkJUjYwMF9TWU5DX1dBTEtFUiB8CisJCQkJCVI2MDBfU1lOQ19BTElHTkVSKSk7CisKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjY3MCkKKwkJUkFERU9OX1dSSVRFKFI2MDBfQVJCX0dERUNfUkRfQ05UTCwgMHgwMDAwMDAyMSk7CisKKwlzeF9kZWJ1Z18xID0gUkFERU9OX1JFQUQoUjYwMF9TWF9ERUJVR18xKTsKKwlzeF9kZWJ1Z18xIHw9IFI2MDBfU01YX0VWRU5UX1JFTEVBU0U7CisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+IENISVBfUjYwMCkpCisJCXN4X2RlYnVnXzEgfD0gUjYwMF9FTkFCTEVfTkVXX1NNWF9BRERSRVNTOworCVJBREVPTl9XUklURShSNjAwX1NYX0RFQlVHXzEsIHN4X2RlYnVnXzEpOworCisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1I2MDApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjMwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYxMCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MjApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzgwKSkKKwkJUkFERU9OX1dSSVRFKFI2MDBfREJfREVCVUcsIFI2MDBfUFJFWl9NVVNUX1dBSVRfRk9SX1BPU1RaX0RPTkUpOworCWVsc2UKKwkJUkFERU9OX1dSSVRFKFI2MDBfREJfREVCVUcsIDApOworCisJUkFERU9OX1dSSVRFKFI2MDBfREJfV0FURVJNQVJLUywgKFI2MDBfREVQVEhfRlJFRSg0KSB8CisJCQkJCSAgUjYwMF9ERVBUSF9GTFVTSCgxNikgfAorCQkJCQkgIFI2MDBfREVQVEhfUEVORElOR19GUkVFKDQpIHwKKwkJCQkJICBSNjAwX0RFUFRIX0NBQ0hFTElORV9GUkVFKDE2KSkpOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX01VTFRJX0NISVBfQ05UTCwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfVkdUX05VTV9JTlNUQU5DRVMsIDApOworCisJUkFERU9OX1dSSVRFKFI2MDBfU1BJX0NPTkZJR19DTlRMLCBSNjAwX0dQUl9XUklURV9QUklPUklUWSgwKSk7CisJUkFERU9OX1dSSVRFKFI2MDBfU1BJX0NPTkZJR19DTlRMXzEsIFI2MDBfVlRYX0RPTkVfREVMQVkoMCkpOworCisJc3FfbXNfZmlmb19zaXplcyA9IFJBREVPTl9SRUFEKFI2MDBfU1FfTVNfRklGT19TSVpFUyk7CisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjEwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYyMCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3ODApKSB7CisJCXNxX21zX2ZpZm9fc2l6ZXMgPSAoUjYwMF9DQUNIRV9GSUZPX1NJWkUoMHhhKSB8CisJCQkJICAgIFI2MDBfRkVUQ0hfRklGT19ISVdBVEVSKDB4YSkgfAorCQkJCSAgICBSNjAwX0RPTkVfRklGT19ISVdBVEVSKDB4ZTApIHwKKwkJCQkgICAgUjYwMF9BTFVfVVBEQVRFX0ZJRk9fSElXQVRFUigweDgpKTsKKwl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1I2MDApIHx8CisJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjMwKSkgeworCQlzcV9tc19maWZvX3NpemVzICY9IH5SNjAwX0RPTkVfRklGT19ISVdBVEVSKDB4ZmYpOworCQlzcV9tc19maWZvX3NpemVzIHw9IFI2MDBfRE9ORV9GSUZPX0hJV0FURVIoMHg0KTsKKwl9CisJUkFERU9OX1dSSVRFKFI2MDBfU1FfTVNfRklGT19TSVpFUywgc3FfbXNfZmlmb19zaXplcyk7CisKKwkvKiBTUV9DT05GSUcsIFNRX0dQUl9SRVNPVVJDRV9NR01ULCBTUV9USFJFQURfUkVTT1VSQ0VfTUdNVCwgU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVAorCSAqIHNob3VsZCBiZSBhZGp1c3RlZCBhcyBuZWVkZWQgYnkgdGhlIDJELzNEIGRyaXZlcnMuICBUaGlzIGp1c3Qgc2V0cyBkZWZhdWx0IHZhbHVlcworCSAqLworCXNxX2NvbmZpZyA9IFJBREVPTl9SRUFEKFI2MDBfU1FfQ09ORklHKTsKKwlzcV9jb25maWcgJj0gfihSNjAwX1BTX1BSSU8oMykgfAorCQkgICAgICAgUjYwMF9WU19QUklPKDMpIHwKKwkJICAgICAgIFI2MDBfR1NfUFJJTygzKSB8CisJCSAgICAgICBSNjAwX0VTX1BSSU8oMykpOworCXNxX2NvbmZpZyB8PSAoUjYwMF9EWDlfQ09OU1RTIHwKKwkJICAgICAgUjYwMF9WQ19FTkFCTEUgfAorCQkgICAgICBSNjAwX1BTX1BSSU8oMCkgfAorCQkgICAgICBSNjAwX1ZTX1BSSU8oMSkgfAorCQkgICAgICBSNjAwX0dTX1BSSU8oMikgfAorCQkgICAgICBSNjAwX0VTX1BSSU8oMykpOworCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjYwMCkgeworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8xID0gKFI2MDBfTlVNX1BTX0dQUlMoMTI0KSB8CisJCQkJCSAgUjYwMF9OVU1fVlNfR1BSUygxMjQpIHwKKwkJCQkJICBSNjAwX05VTV9DTEFVU0VfVEVNUF9HUFJTKDQpKTsKKwkJc3FfZ3ByX3Jlc291cmNlX21nbXRfMiA9IChSNjAwX05VTV9HU19HUFJTKDApIHwKKwkJCQkJICBSNjAwX05VTV9FU19HUFJTKDApKTsKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoUjYwMF9OVU1fUFNfVEhSRUFEUygxMzYpIHwKKwkJCQkJICAgUjYwMF9OVU1fVlNfVEhSRUFEUyg0OCkgfAorCQkJCQkgICBSNjAwX05VTV9HU19USFJFQURTKDQpIHwKKwkJCQkJICAgUjYwMF9OVU1fRVNfVEhSRUFEUyg0KSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSA9IChSNjAwX05VTV9QU19TVEFDS19FTlRSSUVTKDEyOCkgfAorCQkJCQkgICAgUjYwMF9OVU1fVlNfU1RBQ0tfRU5UUklFUygxMjgpKTsKKwkJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yID0gKFI2MDBfTlVNX0dTX1NUQUNLX0VOVFJJRVMoMCkgfAorCQkJCQkgICAgUjYwMF9OVU1fRVNfU1RBQ0tfRU5UUklFUygwKSk7CisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYxMCkgfHwKKwkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MjApIHx8CisJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzgwKSkgeworCQkvKiBubyB2ZXJ0ZXggY2FjaGUgKi8KKwkJc3FfY29uZmlnICY9IH5SNjAwX1ZDX0VOQUJMRTsKKworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8xID0gKFI2MDBfTlVNX1BTX0dQUlMoNDQpIHwKKwkJCQkJICBSNjAwX05VTV9WU19HUFJTKDQ0KSB8CisJCQkJCSAgUjYwMF9OVU1fQ0xBVVNFX1RFTVBfR1BSUygyKSk7CisJCXNxX2dwcl9yZXNvdXJjZV9tZ210XzIgPSAoUjYwMF9OVU1fR1NfR1BSUygxNykgfAorCQkJCQkgIFI2MDBfTlVNX0VTX0dQUlMoMTcpKTsKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoUjYwMF9OVU1fUFNfVEhSRUFEUyg3OSkgfAorCQkJCQkgICBSNjAwX05VTV9WU19USFJFQURTKDc4KSB8CisJCQkJCSAgIFI2MDBfTlVNX0dTX1RIUkVBRFMoNCkgfAorCQkJCQkgICBSNjAwX05VTV9FU19USFJFQURTKDMxKSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSA9IChSNjAwX05VTV9QU19TVEFDS19FTlRSSUVTKDQwKSB8CisJCQkJCSAgICBSNjAwX05VTV9WU19TVEFDS19FTlRSSUVTKDQwKSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMiA9IChSNjAwX05VTV9HU19TVEFDS19FTlRSSUVTKDMyKSB8CisJCQkJCSAgICBSNjAwX05VTV9FU19TVEFDS19FTlRSSUVTKDE2KSk7CisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYzMCkgfHwKKwkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MzUpKSB7CisJCXNxX2dwcl9yZXNvdXJjZV9tZ210XzEgPSAoUjYwMF9OVU1fUFNfR1BSUyg0NCkgfAorCQkJCQkgIFI2MDBfTlVNX1ZTX0dQUlMoNDQpIHwKKwkJCQkJICBSNjAwX05VTV9DTEFVU0VfVEVNUF9HUFJTKDIpKTsKKwkJc3FfZ3ByX3Jlc291cmNlX21nbXRfMiA9IChSNjAwX05VTV9HU19HUFJTKDE4KSB8CisJCQkJCSAgUjYwMF9OVU1fRVNfR1BSUygxOCkpOworCQlzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCA9IChSNjAwX05VTV9QU19USFJFQURTKDc5KSB8CisJCQkJCSAgIFI2MDBfTlVNX1ZTX1RIUkVBRFMoNzgpIHwKKwkJCQkJICAgUjYwMF9OVU1fR1NfVEhSRUFEUyg0KSB8CisJCQkJCSAgIFI2MDBfTlVNX0VTX1RIUkVBRFMoMzEpKTsKKwkJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8xID0gKFI2MDBfTlVNX1BTX1NUQUNLX0VOVFJJRVMoNDApIHwKKwkJCQkJICAgIFI2MDBfTlVNX1ZTX1NUQUNLX0VOVFJJRVMoNDApKTsKKwkJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yID0gKFI2MDBfTlVNX0dTX1NUQUNLX0VOVFJJRVMoMzIpIHwKKwkJCQkJICAgIFI2MDBfTlVNX0VTX1NUQUNLX0VOVFJJRVMoMTYpKTsKKwl9IGVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2NzApIHsKKwkJc3FfZ3ByX3Jlc291cmNlX21nbXRfMSA9IChSNjAwX05VTV9QU19HUFJTKDQ0KSB8CisJCQkJCSAgUjYwMF9OVU1fVlNfR1BSUyg0NCkgfAorCQkJCQkgIFI2MDBfTlVNX0NMQVVTRV9URU1QX0dQUlMoMikpOworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8yID0gKFI2MDBfTlVNX0dTX0dQUlMoMTcpIHwKKwkJCQkJICBSNjAwX05VTV9FU19HUFJTKDE3KSk7CisJCXNxX3RocmVhZF9yZXNvdXJjZV9tZ210ID0gKFI2MDBfTlVNX1BTX1RIUkVBRFMoNzkpIHwKKwkJCQkJICAgUjYwMF9OVU1fVlNfVEhSRUFEUyg3OCkgfAorCQkJCQkgICBSNjAwX05VTV9HU19USFJFQURTKDQpIHwKKwkJCQkJICAgUjYwMF9OVU1fRVNfVEhSRUFEUygzMSkpOworCQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzEgPSAoUjYwMF9OVU1fUFNfU1RBQ0tfRU5UUklFUyg2NCkgfAorCQkJCQkgICAgUjYwMF9OVU1fVlNfU1RBQ0tfRU5UUklFUyg2NCkpOworCQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzIgPSAoUjYwMF9OVU1fR1NfU1RBQ0tfRU5UUklFUyg2NCkgfAorCQkJCQkgICAgUjYwMF9OVU1fRVNfU1RBQ0tfRU5UUklFUyg2NCkpOworCX0KKworCVJBREVPTl9XUklURShSNjAwX1NRX0NPTkZJRywgc3FfY29uZmlnKTsKKwlSQURFT05fV1JJVEUoUjYwMF9TUV9HUFJfUkVTT1VSQ0VfTUdNVF8xLCAgc3FfZ3ByX3Jlc291cmNlX21nbXRfMSk7CisJUkFERU9OX1dSSVRFKFI2MDBfU1FfR1BSX1JFU09VUkNFX01HTVRfMiwgIHNxX2dwcl9yZXNvdXJjZV9tZ210XzIpOworCVJBREVPTl9XUklURShSNjAwX1NRX1RIUkVBRF9SRVNPVVJDRV9NR01ULCBzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCk7CisJUkFERU9OX1dSSVRFKFI2MDBfU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8xLCBzcV9zdGFja19yZXNvdXJjZV9tZ210XzEpOworCVJBREVPTl9XUklURShSNjAwX1NRX1NUQUNLX1JFU09VUkNFX01HTVRfMiwgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yKTsKKworCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYxMCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MjApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzgwKSkKKwkJUkFERU9OX1dSSVRFKFI2MDBfVkdUX0NBQ0hFX0lOVkFMSURBVElPTiwgUjYwMF9DQUNIRV9JTlZBTElEQVRJT04oUjYwMF9UQ19PTkxZKSk7CisJZWxzZQorCQlSQURFT05fV1JJVEUoUjYwMF9WR1RfQ0FDSEVfSU5WQUxJREFUSU9OLCBSNjAwX0NBQ0hFX0lOVkFMSURBVElPTihSNjAwX1ZDX0FORF9UQykpOworCisJUkFERU9OX1dSSVRFKFI2MDBfUEFfU0NfQUFfU0FNUExFX0xPQ1NfMlMsIChSNjAwX1MwX1goMHhjKSB8CisJCQkJCQkgICAgUjYwMF9TMF9ZKDB4NCkgfAorCQkJCQkJICAgIFI2MDBfUzFfWCgweDQpIHwKKwkJCQkJCSAgICBSNjAwX1MxX1koMHhjKSkpOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX0FBX1NBTVBMRV9MT0NTXzRTLCAoUjYwMF9TMF9YKDB4ZSkgfAorCQkJCQkJICAgIFI2MDBfUzBfWSgweGUpIHwKKwkJCQkJCSAgICBSNjAwX1MxX1goMHgyKSB8CisJCQkJCQkgICAgUjYwMF9TMV9ZKDB4MikgfAorCQkJCQkJICAgIFI2MDBfUzJfWCgweGEpIHwKKwkJCQkJCSAgICBSNjAwX1MyX1koMHg2KSB8CisJCQkJCQkgICAgUjYwMF9TM19YKDB4NikgfAorCQkJCQkJICAgIFI2MDBfUzNfWSgweGEpKSk7CisJUkFERU9OX1dSSVRFKFI2MDBfUEFfU0NfQUFfU0FNUExFX0xPQ1NfOFNfV0QwLCAoUjYwMF9TMF9YKDB4ZSkgfAorCQkJCQkJCVI2MDBfUzBfWSgweGIpIHwKKwkJCQkJCQlSNjAwX1MxX1goMHg0KSB8CisJCQkJCQkJUjYwMF9TMV9ZKDB4YykgfAorCQkJCQkJCVI2MDBfUzJfWCgweDEpIHwKKwkJCQkJCQlSNjAwX1MyX1koMHg2KSB8CisJCQkJCQkJUjYwMF9TM19YKDB4YSkgfAorCQkJCQkJCVI2MDBfUzNfWSgweGUpKSk7CisJUkFERU9OX1dSSVRFKFI2MDBfUEFfU0NfQUFfU0FNUExFX0xPQ1NfOFNfV0QxLCAoUjYwMF9TNF9YKDB4NikgfAorCQkJCQkJCVI2MDBfUzRfWSgweDEpIHwKKwkJCQkJCQlSNjAwX1M1X1goMHgwKSB8CisJCQkJCQkJUjYwMF9TNV9ZKDB4MCkgfAorCQkJCQkJCVI2MDBfUzZfWCgweGIpIHwKKwkJCQkJCQlSNjAwX1M2X1koMHg0KSB8CisJCQkJCQkJUjYwMF9TN19YKDB4NykgfAorCQkJCQkJCVI2MDBfUzdfWSgweDgpKSk7CisKKworCXN3aXRjaCAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSB7CisJY2FzZSBDSElQX1I2MDA6CisJY2FzZSBDSElQX1JWNjMwOgorCWNhc2UgQ0hJUF9SVjYzNToKKwkJZ3NfcHJpbV9idWZmZXJfZGVwdGggPSAwOworCQlicmVhazsKKwljYXNlIENISVBfUlY2MTA6CisJY2FzZSBDSElQX1JTNzgwOgorCWNhc2UgQ0hJUF9SVjYyMDoKKwkJZ3NfcHJpbV9idWZmZXJfZGVwdGggPSAzMjsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNjcwOgorCQlnc19wcmltX2J1ZmZlcl9kZXB0aCA9IDEyODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJbnVtX2dzX3ZlcnRzX3Blcl90aHJlYWQgPSBkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgKiAxNjsKKwl2Z3RfZ3NfcGVyX2VzID0gZ3NfcHJpbV9idWZmZXJfZGVwdGggKyBudW1fZ3NfdmVydHNfcGVyX3RocmVhZDsKKwkvKiBNYXggdmFsdWUgZm9yIHRoaXMgaXMgMjU2ICovCisJaWYgKHZndF9nc19wZXJfZXMgPiAyNTYpCisJCXZndF9nc19wZXJfZXMgPSAyNTY7CisKKwlSQURFT05fV1JJVEUoUjYwMF9WR1RfRVNfUEVSX0dTLCAxMjgpOworCVJBREVPTl9XUklURShSNjAwX1ZHVF9HU19QRVJfRVMsIHZndF9nc19wZXJfZXMpOworCVJBREVPTl9XUklURShSNjAwX1ZHVF9HU19QRVJfVlMsIDIpOworCVJBREVPTl9XUklURShSNjAwX1ZHVF9HU19WRVJURVhfUkVVU0UsIDE2KTsKKworCS8qIG1vcmUgZGVmYXVsdCB2YWx1ZXMuIDJELzNEIGRyaXZlciBzaG91bGQgYWRqdXN0IGFzIG5lZWRlZCAqLworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX0xJTkVfU1RJUFBMRV9TVEFURSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfVkdUX1NUUk1PVVRfRU4sIDApOworCVJBREVPTl9XUklURShSNjAwX1NYX01JU0MsIDApOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX01PREVfQ05UTCwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfUEFfU0NfQUFfQ09ORklHLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9QQV9TQ19MSU5FX1NUSVBQTEUsIDApOworCVJBREVPTl9XUklURShSNjAwX1NQSV9JTlBVVF9aLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9TUElfUFNfSU5fQ09OVFJPTF8wLCBSNjAwX05VTV9JTlRFUlAoMikpOworCVJBREVPTl9XUklURShSNjAwX0NCX0NPTE9SN19GUkFHLCAwKTsKKworCS8qIGNsZWFyIHJlbmRlciBidWZmZXIgYmFzZSBhZGRyZXNzZXMgKi8KKwlSQURFT05fV1JJVEUoUjYwMF9DQl9DT0xPUjBfQkFTRSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0JfQ09MT1IxX0JBU0UsIDApOworCVJBREVPTl9XUklURShSNjAwX0NCX0NPTE9SMl9CQVNFLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DQl9DT0xPUjNfQkFTRSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0JfQ09MT1I0X0JBU0UsIDApOworCVJBREVPTl9XUklURShSNjAwX0NCX0NPTE9SNV9CQVNFLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DQl9DT0xPUjZfQkFTRSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0JfQ09MT1I3X0JBU0UsIDApOworCisJc3dpdGNoIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spIHsKKwljYXNlIENISVBfUlY2MTA6CisJY2FzZSBDSElQX1JTNzgwOgorCWNhc2UgQ0hJUF9SVjYyMDoKKwkJdGNfY250bCA9IFI2MDBfVENfTDJfU0laRSg4KTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNjMwOgorCWNhc2UgQ0hJUF9SVjYzNToKKwkJdGNfY250bCA9IFI2MDBfVENfTDJfU0laRSg0KTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1I2MDA6CisJCXRjX2NudGwgPSBSNjAwX1RDX0wyX1NJWkUoMCkgfCBSNjAwX0wyX0RJU0FCTEVfTEFURV9ISVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRjX2NudGwgPSBSNjAwX1RDX0wyX1NJWkUoMCk7CisJCWJyZWFrOworCX0KKworCVJBREVPTl9XUklURShSNjAwX1RDX0NOVEwsIHRjX2NudGwpOworCisJaGRwX2hvc3RfcGF0aF9jbnRsID0gUkFERU9OX1JFQUQoUjYwMF9IRFBfSE9TVF9QQVRIX0NOVEwpOworCVJBREVPTl9XUklURShSNjAwX0hEUF9IT1NUX1BBVEhfQ05UTCwgaGRwX2hvc3RfcGF0aF9jbnRsKTsKKworCWFyYl9wb3AgPSBSQURFT05fUkVBRChSNjAwX0FSQl9QT1ApOworCWFyYl9wb3AgfD0gUjYwMF9FTkFCTEVfVEMxMjg7CisJUkFERU9OX1dSSVRFKFI2MDBfQVJCX1BPUCwgYXJiX3BvcCk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9QQV9TQ19NVUxUSV9DSElQX0NOVEwsIDApOworCVJBREVPTl9XUklURShSNjAwX1BBX0NMX0VOSEFOQ0UsIChSNjAwX0NMSVBfVlRYX1JFT1JERVJfRU5BIHwKKwkJCQkJICBSNjAwX05VTV9DTElQX1NFUSgzKSkpOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX0VOSEFOQ0UsIFI2MDBfRk9SQ0VfRU9WX01BWF9DTEtfQ05UKDQwOTUpKTsKKworfQorCitzdGF0aWMgdTMyIHI3MDBfZ2V0X3RpbGVfcGlwZV90b19iYWNrZW5kX21hcCh1MzIgbnVtX3RpbGVfcGlwZXMsCisJCQkJCSAgICAgdTMyIG51bV9iYWNrZW5kcywKKwkJCQkJICAgICB1MzIgYmFja2VuZF9kaXNhYmxlX21hc2spCit7CisJdTMyIGJhY2tlbmRfbWFwID0gMDsKKwl1MzIgZW5hYmxlZF9iYWNrZW5kc19tYXNrOworCXUzMiBlbmFibGVkX2JhY2tlbmRzX2NvdW50OworCXUzMiBjdXJfcGlwZTsKKwl1MzIgc3dpenpsZV9waXBlW1I3WFhfTUFYX1BJUEVTXTsKKwl1MzIgY3VyX2JhY2tlbmQ7CisJdTMyIGk7CisKKwlpZiAobnVtX3RpbGVfcGlwZXMgPiBSN1hYX01BWF9QSVBFUykKKwkJbnVtX3RpbGVfcGlwZXMgPSBSN1hYX01BWF9QSVBFUzsKKwlpZiAobnVtX3RpbGVfcGlwZXMgPCAxKQorCQludW1fdGlsZV9waXBlcyA9IDE7CisJaWYgKG51bV9iYWNrZW5kcyA+IFI3WFhfTUFYX0JBQ0tFTkRTKQorCQludW1fYmFja2VuZHMgPSBSN1hYX01BWF9CQUNLRU5EUzsKKwlpZiAobnVtX2JhY2tlbmRzIDwgMSkKKwkJbnVtX2JhY2tlbmRzID0gMTsKKworCWVuYWJsZWRfYmFja2VuZHNfbWFzayA9IDA7CisJZW5hYmxlZF9iYWNrZW5kc19jb3VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IFI3WFhfTUFYX0JBQ0tFTkRTOyArK2kpIHsKKwkJaWYgKCgoYmFja2VuZF9kaXNhYmxlX21hc2sgPj4gaSkgJiAxKSA9PSAwKSB7CisJCQllbmFibGVkX2JhY2tlbmRzX21hc2sgfD0gKDEgPDwgaSk7CisJCQkrK2VuYWJsZWRfYmFja2VuZHNfY291bnQ7CisJCX0KKwkJaWYgKGVuYWJsZWRfYmFja2VuZHNfY291bnQgPT0gbnVtX2JhY2tlbmRzKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGVuYWJsZWRfYmFja2VuZHNfY291bnQgPT0gMCkgeworCQllbmFibGVkX2JhY2tlbmRzX21hc2sgPSAxOworCQllbmFibGVkX2JhY2tlbmRzX2NvdW50ID0gMTsKKwl9CisKKwlpZiAoZW5hYmxlZF9iYWNrZW5kc19jb3VudCAhPSBudW1fYmFja2VuZHMpCisJCW51bV9iYWNrZW5kcyA9IGVuYWJsZWRfYmFja2VuZHNfY291bnQ7CisKKwltZW1zZXQoKHVpbnQ4X3QgKikmc3dpenpsZV9waXBlWzBdLCAwLCBzaXplb2YodTMyKSAqIFI3WFhfTUFYX1BJUEVTKTsKKwlzd2l0Y2ggKG51bV90aWxlX3BpcGVzKSB7CisJY2FzZSAxOgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlicmVhazsKKwljYXNlIDI6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDE7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJc3dpenpsZV9waXBlWzJdID0gMTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAyOworCQlzd2l6emxlX3BpcGVbMl0gPSAzOworCQlzd2l6emxlX3BpcGVbM10gPSAxOworCQlicmVhazsKKwljYXNlIDU6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDQ7CisJCXN3aXp6bGVfcGlwZVszXSA9IDE7CisJCXN3aXp6bGVfcGlwZVs0XSA9IDM7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJc3dpenpsZV9waXBlWzJdID0gNDsKKwkJc3dpenpsZV9waXBlWzNdID0gNTsKKwkJc3dpenpsZV9waXBlWzRdID0gMzsKKwkJc3dpenpsZV9waXBlWzVdID0gMTsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAyOworCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQlzd2l6emxlX3BpcGVbM10gPSA2OworCQlzd2l6emxlX3BpcGVbNF0gPSAzOworCQlzd2l6emxlX3BpcGVbNV0gPSAxOworCQlzd2l6emxlX3BpcGVbNl0gPSA1OworCQlicmVhazsKKwljYXNlIDg6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDQ7CisJCXN3aXp6bGVfcGlwZVszXSA9IDY7CisJCXN3aXp6bGVfcGlwZVs0XSA9IDM7CisJCXN3aXp6bGVfcGlwZVs1XSA9IDE7CisJCXN3aXp6bGVfcGlwZVs2XSA9IDc7CisJCXN3aXp6bGVfcGlwZVs3XSA9IDU7CisJCWJyZWFrOworCX0KKworCWN1cl9iYWNrZW5kID0gMDsKKwlmb3IgKGN1cl9waXBlID0gMDsgY3VyX3BpcGUgPCBudW1fdGlsZV9waXBlczsgKytjdXJfcGlwZSkgeworCQl3aGlsZSAoKCgxIDw8IGN1cl9iYWNrZW5kKSAmIGVuYWJsZWRfYmFja2VuZHNfbWFzaykgPT0gMCkKKwkJCWN1cl9iYWNrZW5kID0gKGN1cl9iYWNrZW5kICsgMSkgJSBSN1hYX01BWF9CQUNLRU5EUzsKKworCQliYWNrZW5kX21hcCB8PSAodTMyKSgoKGN1cl9iYWNrZW5kICYgMykgPDwgKHN3aXp6bGVfcGlwZVtjdXJfcGlwZV0gKiAyKSkpOworCisJCWN1cl9iYWNrZW5kID0gKGN1cl9iYWNrZW5kICsgMSkgJSBSN1hYX01BWF9CQUNLRU5EUzsKKwl9CisKKwlyZXR1cm4gYmFja2VuZF9tYXA7Cit9CisKK3N0YXRpYyB2b2lkIHI3MDBfZ2Z4X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQoreworCWludCBpLCBqLCBudW1fcWRfcGlwZXM7CisJdTMyIHN4X2RlYnVnXzE7CisJdTMyIHNteF9kY19jdGwwOworCXUzMiBudW1fZ3NfdmVydHNfcGVyX3RocmVhZDsKKwl1MzIgdmd0X2dzX3Blcl9lczsKKwl1MzIgZ3NfcHJpbV9idWZmZXJfZGVwdGggPSAwOworCXUzMiBzcV9tc19maWZvX3NpemVzOworCXUzMiBzcV9jb25maWc7CisJdTMyIHNxX3RocmVhZF9yZXNvdXJjZV9tZ210OworCXUzMiBoZHBfaG9zdF9wYXRoX2NudGw7CisJdTMyIHNxX2R5bl9ncHJfc2l6ZV9zaW1kX2FiXzA7CisJdTMyIGJhY2tlbmRfbWFwOworCXUzMiBnYl90aWxpbmdfY29uZmlnID0gMDsKKwl1MzIgY2NfcmJfYmFja2VuZF9kaXNhYmxlID0gMDsKKwl1MzIgY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnID0gMDsKKwl1MzIgbWNfYXJiX3JhbWNmZzsKKwl1MzIgZGJfZGVidWc0OworCisJLyogc2V0dXAgY2hpcCBzcGVjcyAqLworCXN3aXRjaCAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSB7CisJY2FzZSBDSElQX1JWNzcwOgorCQlkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgPSA0OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcyA9IDg7CisJCWRldl9wcml2LT5yNjAwX21heF9zaW1kcyA9IDEwOworCQlkZXZfcHJpdi0+cjYwMF9tYXhfYmFja2VuZHMgPSA0OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfZ3BycyA9IDI1NjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3RocmVhZHMgPSAyNDg7CisJCWRldl9wcml2LT5yNjAwX21heF9zdGFja19lbnRyaWVzID0gNTEyOworCQlkZXZfcHJpdi0+cjYwMF9tYXhfaHdfY29udGV4dHMgPSA4OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfZ3NfdGhyZWFkcyA9IDE2ICogMjsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9zaXplID0gMTI4OworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gMTY7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc214X3NpemUgPSAxMTI7CisJCWRldl9wcml2LT5yNjAwX3NxX251bV9jZl9pbnN0cyA9IDI7CisKKwkJZGV2X3ByaXYtPnI3MDBfc3hfbnVtX29mX3NldHMgPSA3OworCQlkZXZfcHJpdi0+cjcwMF9zY19wcmltX2ZpZm9fc2l6ZSA9IDB4Rjk7CisJCWRldl9wcml2LT5yNzAwX3NjX2hpel90aWxlX2ZpZm9fc2l6ZSA9IDB4MzA7CisJCWRldl9wcml2LT5yNzAwX3NjX2Vhcmx5el90aWxlX2ZpZm9fZml6ZSA9IDB4MTMwOworCQlicmVhazsKKwljYXNlIENISVBfUlY3MzA6CisJCWRldl9wcml2LT5yNjAwX21heF9waXBlcyA9IDI7CisJCWRldl9wcml2LT5yNjAwX21heF90aWxlX3BpcGVzID0gNDsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3NpbWRzID0gODsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X2JhY2tlbmRzID0gMjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X2dwcnMgPSAxMjg7CisJCWRldl9wcml2LT5yNjAwX21heF90aHJlYWRzID0gMjQ4OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfc3RhY2tfZW50cmllcyA9IDI1NjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X2h3X2NvbnRleHRzID0gODsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X2dzX3RocmVhZHMgPSAxNiAqIDI7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc2l6ZSA9IDI1NjsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSA9IDMyOworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3NteF9zaXplID0gMjI0OworCQlkZXZfcHJpdi0+cjYwMF9zcV9udW1fY2ZfaW5zdHMgPSAyOworCisJCWRldl9wcml2LT5yNzAwX3N4X251bV9vZl9zZXRzID0gNzsKKwkJZGV2X3ByaXYtPnI3MDBfc2NfcHJpbV9maWZvX3NpemUgPSAweGY5OworCQlkZXZfcHJpdi0+cjcwMF9zY19oaXpfdGlsZV9maWZvX3NpemUgPSAweDMwOworCQlkZXZfcHJpdi0+cjcwMF9zY19lYXJseXpfdGlsZV9maWZvX2ZpemUgPSAweDEzMDsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNzEwOgorCQlkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgPSAyOworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcyA9IDI7CisJCWRldl9wcml2LT5yNjAwX21heF9zaW1kcyA9IDI7CisJCWRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcyA9IDE7CisJCWRldl9wcml2LT5yNjAwX21heF9ncHJzID0gMjU2OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGhyZWFkcyA9IDE5MjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3N0YWNrX2VudHJpZXMgPSAyNTY7CisJCWRldl9wcml2LT5yNjAwX21heF9od19jb250ZXh0cyA9IDQ7CisJCWRldl9wcml2LT5yNjAwX21heF9nc190aHJlYWRzID0gOCAqIDI7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc2l6ZSA9IDEyODsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSA9IDE2OworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3NteF9zaXplID0gMTEyOworCQlkZXZfcHJpdi0+cjYwMF9zcV9udW1fY2ZfaW5zdHMgPSAxOworCisJCWRldl9wcml2LT5yNzAwX3N4X251bV9vZl9zZXRzID0gNzsKKwkJZGV2X3ByaXYtPnI3MDBfc2NfcHJpbV9maWZvX3NpemUgPSAweDQwOworCQlkZXZfcHJpdi0+cjcwMF9zY19oaXpfdGlsZV9maWZvX3NpemUgPSAweDMwOworCQlkZXZfcHJpdi0+cjcwMF9zY19lYXJseXpfdGlsZV9maWZvX2ZpemUgPSAweDEzMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogSW5pdGlhbGl6ZSBIRFAgKi8KKwlqID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlSQURFT05fV1JJVEUoKDB4MmMxNCArIGopLCAweDAwMDAwMDAwKTsKKwkJUkFERU9OX1dSSVRFKCgweDJjMTggKyBqKSwgMHgwMDAwMDAwMCk7CisJCVJBREVPTl9XUklURSgoMHgyYzFjICsgaiksIDB4MDAwMDAwMDApOworCQlSQURFT05fV1JJVEUoKDB4MmMyMCArIGopLCAweDAwMDAwMDAwKTsKKwkJUkFERU9OX1dSSVRFKCgweDJjMjQgKyBqKSwgMHgwMDAwMDAwMCk7CisJCWogKz0gMHgxODsKKwl9CisKKwlSQURFT05fV1JJVEUoUjYwMF9HUkJNX0NOVEwsIFI2MDBfR1JCTV9SRUFEX1RJTUVPVVQoMHhmZikpOworCisJLyogc2V0dXAgdGlsaW5nLCBzaW1kLCBwaXBlIGNvbmZpZyAqLworCW1jX2FyYl9yYW1jZmcgPSBSQURFT05fUkVBRChSNzAwX01DX0FSQl9SQU1DRkcpOworCisJc3dpdGNoIChkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcykgeworCWNhc2UgMToKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX1BJUEVfVElMSU5HKDApOworCQlicmVhazsKKwljYXNlIDI6CisJCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9QSVBFX1RJTElORygxKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfUElQRV9USUxJTkcoMik7CisJCWJyZWFrOworCWNhc2UgODoKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX1BJUEVfVElMSU5HKDMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjc3MCkKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0JBTktfVElMSU5HKDEpOworCWVsc2UKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0JBTktfVElMSU5HKChtY19hcmJfcmFtY2ZnID4+IFI3MDBfTk9PRkJBTktfU0hJRlQpICYgUjcwMF9OT09GQkFOS19NQVNLKTsKKworCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9HUk9VUF9TSVpFKDApOworCisJaWYgKCgobWNfYXJiX3JhbWNmZyA+PiBSNzAwX05PT0ZST1dTX1NISUZUKSAmIFI3MDBfTk9PRlJPV1NfTUFTSykgPiAzKSB7CisJCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9ST1dfVElMSU5HKDMpOworCQlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfU0FNUExFX1NQTElUKDMpOworCX0gZWxzZSB7CisJCWdiX3RpbGluZ19jb25maWcgfD0KKwkJCVI2MDBfUk9XX1RJTElORygoKG1jX2FyYl9yYW1jZmcgPj4gUjcwMF9OT09GUk9XU19TSElGVCkgJiBSNzAwX05PT0ZST1dTX01BU0spKTsKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PQorCQkJUjYwMF9TQU1QTEVfU1BMSVQoKChtY19hcmJfcmFtY2ZnID4+IFI3MDBfTk9PRlJPV1NfU0hJRlQpICYgUjcwMF9OT09GUk9XU19NQVNLKSk7CisJfQorCisJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0JBTktfU1dBUFMoMSk7CisKKwliYWNrZW5kX21hcCA9IHI3MDBfZ2V0X3RpbGVfcGlwZV90b19iYWNrZW5kX21hcChkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcywKKwkJCQkJCQlkZXZfcHJpdi0+cjYwMF9tYXhfYmFja2VuZHMsCisJCQkJCQkJKDB4ZmYgPDwgZGV2X3ByaXYtPnI2MDBfbWF4X2JhY2tlbmRzKSAmIDB4ZmYpOworCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9CQUNLRU5EX01BUChiYWNrZW5kX21hcCk7CisKKwljY19nY19zaGFkZXJfcGlwZV9jb25maWcgPQorCQlSNjAwX0lOQUNUSVZFX1FEX1BJUEVTKChSN1hYX01BWF9QSVBFU19NQVNLIDw8IGRldl9wcml2LT5yNjAwX21heF9waXBlcykgJiBSN1hYX01BWF9QSVBFU19NQVNLKTsKKwljY19nY19zaGFkZXJfcGlwZV9jb25maWcgfD0KKwkJUjYwMF9JTkFDVElWRV9TSU1EUygoUjdYWF9NQVhfU0lNRFNfTUFTSyA8PCBkZXZfcHJpdi0+cjYwMF9tYXhfc2ltZHMpICYgUjdYWF9NQVhfU0lNRFNfTUFTSyk7CisKKwljY19yYl9iYWNrZW5kX2Rpc2FibGUgPQorCQlSNjAwX0JBQ0tFTkRfRElTQUJMRSgoUjdYWF9NQVhfQkFDS0VORFNfTUFTSyA8PCBkZXZfcHJpdi0+cjYwMF9tYXhfYmFja2VuZHMpICYgUjdYWF9NQVhfQkFDS0VORFNfTUFTSyk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9HQl9USUxJTkdfQ09ORklHLCAgICAgIGdiX3RpbGluZ19jb25maWcpOworCVJBREVPTl9XUklURShSNjAwX0RDUF9USUxJTkdfQ09ORklHLCAgICAoZ2JfdGlsaW5nX2NvbmZpZyAmIDB4ZmZmZikpOworCVJBREVPTl9XUklURShSNjAwX0hEUF9USUxJTkdfQ09ORklHLCAgICAoZ2JfdGlsaW5nX2NvbmZpZyAmIDB4ZmZmZikpOworCisJUkFERU9OX1dSSVRFKFI2MDBfQ0NfUkJfQkFDS0VORF9ESVNBQkxFLCAgICAgIGNjX3JiX2JhY2tlbmRfZGlzYWJsZSk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0NfR0NfU0hBREVSX1BJUEVfQ09ORklHLCAgIGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyk7CisJUkFERU9OX1dSSVRFKFI2MDBfR0NfVVNFUl9TSEFERVJfUElQRV9DT05GSUcsIGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyk7CisKKwlSQURFT05fV1JJVEUoUjcwMF9DQ19TWVNfUkJfQkFDS0VORF9ESVNBQkxFLCBjY19yYl9iYWNrZW5kX2Rpc2FibGUpOworCVJBREVPTl9XUklURShSNzAwX0NHVFNfU1lTX1RDQ19ESVNBQkxFLCAwKTsKKwlSQURFT05fV1JJVEUoUjcwMF9DR1RTX1RDQ19ESVNBQkxFLCAwKTsKKwlSQURFT05fV1JJVEUoUjcwMF9DR1RTX1VTRVJfU1lTX1RDQ19ESVNBQkxFLCAwKTsKKwlSQURFT05fV1JJVEUoUjcwMF9DR1RTX1VTRVJfVENDX0RJU0FCTEUsIDApOworCisJbnVtX3FkX3BpcGVzID0KKwkJUjdYWF9NQVhfQkFDS0VORFMgLSByNjAwX2NvdW50X3BpcGVfYml0cyhjY19nY19zaGFkZXJfcGlwZV9jb25maWcgJiBSNjAwX0lOQUNUSVZFX1FEX1BJUEVTX01BU0spOworCVJBREVPTl9XUklURShSNjAwX1ZHVF9PVVRfREVBTExPQ19DTlRMLCAobnVtX3FkX3BpcGVzICogNCkgJiBSNjAwX0RFQUxMT0NfRElTVF9NQVNLKTsKKwlSQURFT05fV1JJVEUoUjYwMF9WR1RfVkVSVEVYX1JFVVNFX0JMT0NLX0NOVEwsICgobnVtX3FkX3BpcGVzICogNCkgLSAyKSAmIFI2MDBfVlRYX1JFVVNFX0RFUFRIX01BU0spOworCisJLyogc2V0IEhXIGRlZmF1bHRzIGZvciAzRCBlbmdpbmUgKi8KKwlSQURFT05fV1JJVEUoUjYwMF9DUF9RVUVVRV9USFJFU0hPTERTLCAoUjYwMF9ST1FfSUIxX1NUQVJUKDB4MTYpIHwKKwkJCQkJCVI2MDBfUk9RX0lCMl9TVEFSVCgweDJiKSkpOworCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVRX1RIUkVTSE9MRFMsIFI3MDBfU1RRX1NQTElUKDB4MzApKTsKKworCVJBREVPTl9XUklURShSNjAwX1RBX0NOVExfQVVYLCAoUjYwMF9ESVNBQkxFX0NVQkVfQU5JU08gfAorCQkJCQlSNjAwX1NZTkNfR1JBRElFTlQgfAorCQkJCQlSNjAwX1NZTkNfV0FMS0VSIHwKKwkJCQkJUjYwMF9TWU5DX0FMSUdORVIpKTsKKworCXN4X2RlYnVnXzEgPSBSQURFT05fUkVBRChSNzAwX1NYX0RFQlVHXzEpOworCXN4X2RlYnVnXzEgfD0gUjcwMF9FTkFCTEVfTkVXX1NNWF9BRERSRVNTOworCVJBREVPTl9XUklURShSNzAwX1NYX0RFQlVHXzEsIHN4X2RlYnVnXzEpOworCisJc214X2RjX2N0bDAgPSBSQURFT05fUkVBRChSNjAwX1NNWF9EQ19DVEwwKTsKKwlzbXhfZGNfY3RsMCAmPSB+UjcwMF9DQUNIRV9ERVBUSCgweDFmZik7CisJc214X2RjX2N0bDAgfD0gUjcwMF9DQUNIRV9ERVBUSCgoZGV2X3ByaXYtPnI3MDBfc3hfbnVtX29mX3NldHMgKiA2NCkgLSAxKTsKKwlSQURFT05fV1JJVEUoUjYwMF9TTVhfRENfQ1RMMCwgc214X2RjX2N0bDApOworCisJUkFERU9OX1dSSVRFKFI3MDBfU01YX0VWRU5UX0NUTCwgKFI3MDBfRVNfRkxVU0hfQ1RMKDQpIHwKKwkJCQkJICBSNzAwX0dTX0ZMVVNIX0NUTCg0KSB8CisJCQkJCSAgUjcwMF9BQ0tfRkxVU0hfQ1RMKDMpIHwKKwkJCQkJICBSNzAwX1NZTkNfRkxVU0hfQ1RMKSk7CisKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjc3MCkKKwkJUkFERU9OX1dSSVRFKFI3MDBfREJfREVCVUczLCBSNzAwX0RCX0NMS19PRkZfREVMQVkoMHgxZikpOworCWVsc2UgeworCQlkYl9kZWJ1ZzQgPSBSQURFT05fUkVBRChSVjcwMF9EQl9ERUJVRzQpOworCQlkYl9kZWJ1ZzQgfD0gUlY3MDBfRElTQUJMRV9USUxFX0NPVkVSRURfRk9SX1BTX0lURVI7CisJCVJBREVPTl9XUklURShSVjcwMF9EQl9ERUJVRzQsIGRiX2RlYnVnNCk7CisJfQorCisJUkFERU9OX1dSSVRFKFI2MDBfU1hfRVhQT1JUX0JVRkZFUl9TSVpFUywgKFI2MDBfQ09MT1JfQlVGRkVSX1NJWkUoKGRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc2l6ZSAvIDQpIC0gMSkgfAorCQkJCQkJICAgUjYwMF9QT1NJVElPTl9CVUZGRVJfU0laRSgoZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSAvIDQpIC0gMSkgfAorCQkJCQkJICAgUjYwMF9TTVhfQlVGRkVSX1NJWkUoKGRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc214X3NpemUgLyA0KSAtIDEpKSk7CisKKwlSQURFT05fV1JJVEUoUjcwMF9QQV9TQ19GSUZPX1NJWkVfUjdYWCwgKFI3MDBfU0NfUFJJTV9GSUZPX1NJWkUoZGV2X3ByaXYtPnI3MDBfc2NfcHJpbV9maWZvX3NpemUpIHwKKwkJCQkJCSBSNzAwX1NDX0hJWl9USUxFX0ZJRk9fU0laRShkZXZfcHJpdi0+cjcwMF9zY19oaXpfdGlsZV9maWZvX3NpemUpIHwKKwkJCQkJCSBSNzAwX1NDX0VBUkxZWl9USUxFX0ZJRk9fU0laRShkZXZfcHJpdi0+cjcwMF9zY19lYXJseXpfdGlsZV9maWZvX2ZpemUpKSk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9QQV9TQ19NVUxUSV9DSElQX0NOVEwsIDApOworCisJUkFERU9OX1dSSVRFKFI2MDBfVkdUX05VTV9JTlNUQU5DRVMsIDEpOworCisJUkFERU9OX1dSSVRFKFI2MDBfU1BJX0NPTkZJR19DTlRMLCBSNjAwX0dQUl9XUklURV9QUklPUklUWSgwKSk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9TUElfQ09ORklHX0NOVExfMSwgUjYwMF9WVFhfRE9ORV9ERUxBWSg0KSk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9QRVJGTU9OX0NOVEwsIDApOworCisJc3FfbXNfZmlmb19zaXplcyA9IChSNjAwX0NBQ0hFX0ZJRk9fU0laRSgxNiAqIGRldl9wcml2LT5yNjAwX3NxX251bV9jZl9pbnN0cykgfAorCQkJICAgIFI2MDBfRE9ORV9GSUZPX0hJV0FURVIoMHhlMCkgfAorCQkJICAgIFI2MDBfQUxVX1VQREFURV9GSUZPX0hJV0FURVIoMHg4KSk7CisJc3dpdGNoIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spIHsKKwljYXNlIENISVBfUlY3NzA6CisJCXNxX21zX2ZpZm9fc2l6ZXMgfD0gUjYwMF9GRVRDSF9GSUZPX0hJV0FURVIoMHgxKTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNzMwOgorCWNhc2UgQ0hJUF9SVjcxMDoKKwlkZWZhdWx0OgorCQlzcV9tc19maWZvX3NpemVzIHw9IFI2MDBfRkVUQ0hfRklGT19ISVdBVEVSKDB4NCk7CisJCWJyZWFrOworCX0KKwlSQURFT05fV1JJVEUoUjYwMF9TUV9NU19GSUZPX1NJWkVTLCBzcV9tc19maWZvX3NpemVzKTsKKworCS8qIFNRX0NPTkZJRywgU1FfR1BSX1JFU09VUkNFX01HTVQsIFNRX1RIUkVBRF9SRVNPVVJDRV9NR01ULCBTUV9TVEFDS19SRVNPVVJDRV9NR01UCisJICogc2hvdWxkIGJlIGFkanVzdGVkIGFzIG5lZWRlZCBieSB0aGUgMkQvM0QgZHJpdmVycy4gIFRoaXMganVzdCBzZXRzIGRlZmF1bHQgdmFsdWVzCisJICovCisJc3FfY29uZmlnID0gUkFERU9OX1JFQUQoUjYwMF9TUV9DT05GSUcpOworCXNxX2NvbmZpZyAmPSB+KFI2MDBfUFNfUFJJTygzKSB8CisJCSAgICAgICBSNjAwX1ZTX1BSSU8oMykgfAorCQkgICAgICAgUjYwMF9HU19QUklPKDMpIHwKKwkJICAgICAgIFI2MDBfRVNfUFJJTygzKSk7CisJc3FfY29uZmlnIHw9IChSNjAwX0RYOV9DT05TVFMgfAorCQkgICAgICBSNjAwX1ZDX0VOQUJMRSB8CisJCSAgICAgIFI2MDBfRVhQT1JUX1NSQ19DIHwKKwkJICAgICAgUjYwMF9QU19QUklPKDApIHwKKwkJICAgICAgUjYwMF9WU19QUklPKDEpIHwKKwkJICAgICAgUjYwMF9HU19QUklPKDIpIHwKKwkJICAgICAgUjYwMF9FU19QUklPKDMpKTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjcxMCkKKwkJLyogbm8gdmVydGV4IGNhY2hlICovCisJCXNxX2NvbmZpZyAmPSB+UjYwMF9WQ19FTkFCTEU7CisKKwlSQURFT05fV1JJVEUoUjYwMF9TUV9DT05GSUcsIHNxX2NvbmZpZyk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9TUV9HUFJfUkVTT1VSQ0VfTUdNVF8xLCAgKFI2MDBfTlVNX1BTX0dQUlMoKGRldl9wcml2LT5yNjAwX21heF9ncHJzICogMjQpLzY0KSB8CisJCQkJCQkgICAgUjYwMF9OVU1fVlNfR1BSUygoZGV2X3ByaXYtPnI2MDBfbWF4X2dwcnMgKiAyNCkvNjQpIHwKKwkJCQkJCSAgICBSNjAwX05VTV9DTEFVU0VfVEVNUF9HUFJTKCgoZGV2X3ByaXYtPnI2MDBfbWF4X2dwcnMgKiAyNCkvNjQpLzIpKSk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9TUV9HUFJfUkVTT1VSQ0VfTUdNVF8yLCAgKFI2MDBfTlVNX0dTX0dQUlMoKGRldl9wcml2LT5yNjAwX21heF9ncHJzICogNykvNjQpIHwKKwkJCQkJCSAgICBSNjAwX05VTV9FU19HUFJTKChkZXZfcHJpdi0+cjYwMF9tYXhfZ3BycyAqIDcpLzY0KSkpOworCisJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoUjYwMF9OVU1fUFNfVEhSRUFEUygoZGV2X3ByaXYtPnI2MDBfbWF4X3RocmVhZHMgKiA0KS84KSB8CisJCQkJICAgUjYwMF9OVU1fVlNfVEhSRUFEUygoZGV2X3ByaXYtPnI2MDBfbWF4X3RocmVhZHMgKiAyKS84KSB8CisJCQkJICAgUjYwMF9OVU1fRVNfVEhSRUFEUygoZGV2X3ByaXYtPnI2MDBfbWF4X3RocmVhZHMgKiAxKS84KSk7CisJaWYgKCgoZGV2X3ByaXYtPnI2MDBfbWF4X3RocmVhZHMgKiAxKSAvIDgpID4gZGV2X3ByaXYtPnI2MDBfbWF4X2dzX3RocmVhZHMpCisJCXNxX3RocmVhZF9yZXNvdXJjZV9tZ210IHw9IFI2MDBfTlVNX0dTX1RIUkVBRFMoZGV2X3ByaXYtPnI2MDBfbWF4X2dzX3RocmVhZHMpOworCWVsc2UKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgfD0gUjYwMF9OVU1fR1NfVEhSRUFEUygoZGV2X3ByaXYtPnI2MDBfbWF4X2dzX3RocmVhZHMgKiAxKS84KTsKKwlSQURFT05fV1JJVEUoUjYwMF9TUV9USFJFQURfUkVTT1VSQ0VfTUdNVCwgc3FfdGhyZWFkX3Jlc291cmNlX21nbXQpOworCisJUkFERU9OX1dSSVRFKFI2MDBfU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8xLCAoUjYwMF9OVU1fUFNfU1RBQ0tfRU5UUklFUygoZGV2X3ByaXYtPnI2MDBfbWF4X3N0YWNrX2VudHJpZXMgKiAxKS80KSB8CisJCQkJCQkgICAgIFI2MDBfTlVNX1ZTX1NUQUNLX0VOVFJJRVMoKGRldl9wcml2LT5yNjAwX21heF9zdGFja19lbnRyaWVzICogMSkvNCkpKTsKKworCVJBREVPTl9XUklURShSNjAwX1NRX1NUQUNLX1JFU09VUkNFX01HTVRfMiwgKFI2MDBfTlVNX0dTX1NUQUNLX0VOVFJJRVMoKGRldl9wcml2LT5yNjAwX21heF9zdGFja19lbnRyaWVzICogMSkvNCkgfAorCQkJCQkJICAgICBSNjAwX05VTV9FU19TVEFDS19FTlRSSUVTKChkZXZfcHJpdi0+cjYwMF9tYXhfc3RhY2tfZW50cmllcyAqIDEpLzQpKSk7CisKKwlzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wID0gKFI3MDBfU0lNREFfUklORzAoKGRldl9wcml2LT5yNjAwX21heF9ncHJzICogMzgpLzY0KSB8CisJCQkJICAgICBSNzAwX1NJTURBX1JJTkcxKChkZXZfcHJpdi0+cjYwMF9tYXhfZ3BycyAqIDM4KS82NCkgfAorCQkJCSAgICAgUjcwMF9TSU1EQl9SSU5HMCgoZGV2X3ByaXYtPnI2MDBfbWF4X2dwcnMgKiAzOCkvNjQpIHwKKwkJCQkgICAgIFI3MDBfU0lNREJfUklORzEoKGRldl9wcml2LT5yNjAwX21heF9ncHJzICogMzgpLzY0KSk7CisKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8wLCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8xLCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8yLCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8zLCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl80LCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl81LCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl82LCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl83LCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKworCVJBREVPTl9XUklURShSNzAwX1BBX1NDX0ZPUkNFX0VPVl9NQVhfQ05UUywgKFI3MDBfRk9SQ0VfRU9WX01BWF9DTEtfQ05UKDQwOTUpIHwKKwkJCQkJCSAgICAgUjcwMF9GT1JDRV9FT1ZfTUFYX1JFWl9DTlQoMjU1KSkpOworCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY3MTApCisJCVJBREVPTl9XUklURShSNjAwX1ZHVF9DQUNIRV9JTlZBTElEQVRJT04sIChSNjAwX0NBQ0hFX0lOVkFMSURBVElPTihSNjAwX1RDX09OTFkpIHwKKwkJCQkJCQkgICBSNzAwX0FVVE9fSU5WTERfRU4oUjcwMF9FU19BTkRfR1NfQVVUTykpKTsKKwllbHNlCisJCVJBREVPTl9XUklURShSNjAwX1ZHVF9DQUNIRV9JTlZBTElEQVRJT04sIChSNjAwX0NBQ0hFX0lOVkFMSURBVElPTihSNjAwX1ZDX0FORF9UQykgfAorCQkJCQkJCSAgIFI3MDBfQVVUT19JTlZMRF9FTihSNzAwX0VTX0FORF9HU19BVVRPKSkpOworCisJc3dpdGNoIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spIHsKKwljYXNlIENISVBfUlY3NzA6CisJY2FzZSBDSElQX1JWNzMwOgorCQlnc19wcmltX2J1ZmZlcl9kZXB0aCA9IDM4NDsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNzEwOgorCQlnc19wcmltX2J1ZmZlcl9kZXB0aCA9IDEyODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJbnVtX2dzX3ZlcnRzX3Blcl90aHJlYWQgPSBkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgKiAxNjsKKwl2Z3RfZ3NfcGVyX2VzID0gZ3NfcHJpbV9idWZmZXJfZGVwdGggKyBudW1fZ3NfdmVydHNfcGVyX3RocmVhZDsKKwkvKiBNYXggdmFsdWUgZm9yIHRoaXMgaXMgMjU2ICovCisJaWYgKHZndF9nc19wZXJfZXMgPiAyNTYpCisJCXZndF9nc19wZXJfZXMgPSAyNTY7CisKKwlSQURFT05fV1JJVEUoUjYwMF9WR1RfRVNfUEVSX0dTLCAxMjgpOworCVJBREVPTl9XUklURShSNjAwX1ZHVF9HU19QRVJfRVMsIHZndF9nc19wZXJfZXMpOworCVJBREVPTl9XUklURShSNjAwX1ZHVF9HU19QRVJfVlMsIDIpOworCisJLyogbW9yZSBkZWZhdWx0IHZhbHVlcy4gMkQvM0QgZHJpdmVyIHNob3VsZCBhZGp1c3QgYXMgbmVlZGVkICovCisJUkFERU9OX1dSSVRFKFI2MDBfVkdUX0dTX1ZFUlRFWF9SRVVTRSwgMTYpOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX0xJTkVfU1RJUFBMRV9TVEFURSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfVkdUX1NUUk1PVVRfRU4sIDApOworCVJBREVPTl9XUklURShSNjAwX1NYX01JU0MsIDApOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX01PREVfQ05UTCwgMCk7CisJUkFERU9OX1dSSVRFKFI3MDBfUEFfU0NfRURHRVJVTEUsIDB4YWFhYWFhYWEpOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX0FBX0NPTkZJRywgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfUEFfU0NfQ0xJUFJFQ1RfUlVMRSwgMHhmZmZmKTsKKwlSQURFT05fV1JJVEUoUjYwMF9QQV9TQ19MSU5FX1NUSVBQTEUsIDApOworCVJBREVPTl9XUklURShSNjAwX1NQSV9JTlBVVF9aLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9TUElfUFNfSU5fQ09OVFJPTF8wLCBSNjAwX05VTV9JTlRFUlAoMikpOworCVJBREVPTl9XUklURShSNjAwX0NCX0NPTE9SN19GUkFHLCAwKTsKKworCS8qIGNsZWFyIHJlbmRlciBidWZmZXIgYmFzZSBhZGRyZXNzZXMgKi8KKwlSQURFT05fV1JJVEUoUjYwMF9DQl9DT0xPUjBfQkFTRSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0JfQ09MT1IxX0JBU0UsIDApOworCVJBREVPTl9XUklURShSNjAwX0NCX0NPTE9SMl9CQVNFLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DQl9DT0xPUjNfQkFTRSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0JfQ09MT1I0X0JBU0UsIDApOworCVJBREVPTl9XUklURShSNjAwX0NCX0NPTE9SNV9CQVNFLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DQl9DT0xPUjZfQkFTRSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0JfQ09MT1I3X0JBU0UsIDApOworCisJUkFERU9OX1dSSVRFKFI3MDBfVENQX0NOVEwsIDApOworCisJaGRwX2hvc3RfcGF0aF9jbnRsID0gUkFERU9OX1JFQUQoUjYwMF9IRFBfSE9TVF9QQVRIX0NOVEwpOworCVJBREVPTl9XUklURShSNjAwX0hEUF9IT1NUX1BBVEhfQ05UTCwgaGRwX2hvc3RfcGF0aF9jbnRsKTsKKworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX01VTFRJX0NISVBfQ05UTCwgMCk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9QQV9DTF9FTkhBTkNFLCAoUjYwMF9DTElQX1ZUWF9SRU9SREVSX0VOQSB8CisJCQkJCSAgUjYwMF9OVU1fQ0xJUF9TRVEoMykpKTsKKworfQorCitzdGF0aWMgdm9pZCByNjAwX2NwX2luaXRfcmluZ19idWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX3JhZGVvbl9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXY7CisJdTMyIHJpbmdfc3RhcnQ7CisJdTY0IHJwdHJfYWRkcjsKKworCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SVjc3MCkpCisJCXI3MDBfZ2Z4X2luaXQoZGV2LCBkZXZfcHJpdik7CisJZWxzZQorCQlyNjAwX2dmeF9pbml0KGRldiwgZGV2X3ByaXYpOworCisJUkFERU9OX1dSSVRFKFI2MDBfR1JCTV9TT0ZUX1JFU0VULCBSNjAwX1NPRlRfUkVTRVRfQ1ApOworCVJBREVPTl9SRUFEKFI2MDBfR1JCTV9TT0ZUX1JFU0VUKTsKKwlEUk1fVURFTEFZKDE1MDAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9HUkJNX1NPRlRfUkVTRVQsIDApOworCisKKwkvKiBTZXQgcmluZyBidWZmZXIgc2l6ZSAqLworI2lmZGVmIF9fQklHX0VORElBTgorCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsCisJCSAgICAgUkFERU9OX0JVRl9TV0FQXzMyQklUIHwKKwkJICAgICBSQURFT05fUkJfTk9fVVBEQVRFIHwKKwkJICAgICAoZGV2X3ByaXYtPnJpbmcucnB0cl91cGRhdGVfbDJxdyA8PCA4KSB8CisJCSAgICAgZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3KTsKKyNlbHNlCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQ05UTCwKKwkJICAgICBSQURFT05fUkJfTk9fVVBEQVRFIHwKKwkJICAgICAoZGV2X3ByaXYtPnJpbmcucnB0cl91cGRhdGVfbDJxdyA8PCA4KSB8CisJCSAgICAgZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3KTsKKyNlbmRpZgorCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfU0VNX1dBSVRfVElNRVIsIDB4NCk7CisKKwkvKiBTZXQgdGhlIHdyaXRlIHBvaW50ZXIgZGVsYXkgKi8KKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9XUFRSX0RFTEFZLCAwKTsKKworI2lmZGVmIF9fQklHX0VORElBTgorCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsCisJCSAgICAgUkFERU9OX0JVRl9TV0FQXzMyQklUIHwKKwkJICAgICBSQURFT05fUkJfTk9fVVBEQVRFIHwKKwkJICAgICBSQURFT05fUkJfUlBUUl9XUl9FTkEgfAorCQkgICAgIChkZXZfcHJpdi0+cmluZy5ycHRyX3VwZGF0ZV9sMnF3IDw8IDgpIHwKKwkJICAgICBkZXZfcHJpdi0+cmluZy5zaXplX2wycXcpOworI2Vsc2UKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9DTlRMLAorCQkgICAgIFJBREVPTl9SQl9OT19VUERBVEUgfAorCQkgICAgIFJBREVPTl9SQl9SUFRSX1dSX0VOQSB8CisJCSAgICAgKGRldl9wcml2LT5yaW5nLnJwdHJfdXBkYXRlX2wycXcgPDwgOCkgfAorCQkgICAgIGRldl9wcml2LT5yaW5nLnNpemVfbDJxdyk7CisjZW5kaWYKKworCS8qIEluaXRpYWxpemUgdGhlIHJpbmcgYnVmZmVyJ3MgcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMgKi8KKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9SUFRSX1dSLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9XUFRSLCAwKTsKKwlTRVRfUklOR19IRUFEKGRldl9wcml2LCAwKTsKKwlkZXZfcHJpdi0+cmluZy50YWlsID0gMDsKKworI2lmIF9fT1NfSEFTX0FHUAorCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCXJwdHJfYWRkciA9IGRldl9wcml2LT5yaW5nX3JwdHItPm9mZnNldAorCQkJLSBkZXYtPmFncC0+YmFzZSArCisJCQlkZXZfcHJpdi0+Z2FydF92bV9zdGFydDsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJcnB0cl9hZGRyID0gZGV2X3ByaXYtPnJpbmdfcnB0ci0+b2Zmc2V0CisJCQktICgodW5zaWduZWQgbG9uZykgZGV2LT5zZy0+dmlydHVhbCkKKwkJCSsgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQ7CisJfQorCVJBREVPTl9XUklURShSNjAwX0NQX1JCX1JQVFJfQUREUiwKKwkJICAgICBycHRyX2FkZHIgJiAweGZmZmZmZmZmKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9SUFRSX0FERFJfSEksCisJCSAgICAgdXBwZXJfMzJfYml0cyhycHRyX2FkZHIpKTsKKworI2lmZGVmIF9fQklHX0VORElBTgorCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsCisJCSAgICAgUkFERU9OX0JVRl9TV0FQXzMyQklUIHwKKwkJICAgICAoZGV2X3ByaXYtPnJpbmcucnB0cl91cGRhdGVfbDJxdyA8PCA4KSB8CisJCSAgICAgZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3KTsKKyNlbHNlCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQ05UTCwKKwkJICAgICAoZGV2X3ByaXYtPnJpbmcucnB0cl91cGRhdGVfbDJxdyA8PCA4KSB8CisJCSAgICAgZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3KTsKKyNlbmRpZgorCisjaWYgX19PU19IQVNfQUdQCisJaWYgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJLyogWFhYICovCisJCXJhZGVvbl93cml0ZV9hZ3BfYmFzZShkZXZfcHJpdiwgZGV2LT5hZ3AtPmJhc2UpOworCisJCS8qIFhYWCAqLworCQlyYWRlb25fd3JpdGVfYWdwX2xvY2F0aW9uKGRldl9wcml2LAorCQkJICAgICAoKChkZXZfcHJpdi0+Z2FydF92bV9zdGFydCAtIDEgKworCQkJCWRldl9wcml2LT5nYXJ0X3NpemUpICYgMHhmZmZmMDAwMCkgfAorCQkJICAgICAgKGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ID4+IDE2KSkpOworCisJCXJpbmdfc3RhcnQgPSAoZGV2X3ByaXYtPmNwX3JpbmctPm9mZnNldAorCQkJICAgICAgLSBkZXYtPmFncC0+YmFzZQorCQkJICAgICAgKyBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CisJfSBlbHNlCisjZW5kaWYKKwkJcmluZ19zdGFydCA9IChkZXZfcHJpdi0+Y3BfcmluZy0+b2Zmc2V0CisJCQkgICAgICAtICh1bnNpZ25lZCBsb25nKWRldi0+c2ctPnZpcnR1YWwKKwkJCSAgICAgICsgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQpOworCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQkFTRSwgcmluZ19zdGFydCA+PiA4KTsKKworCVJBREVPTl9XUklURShSNjAwX0NQX01FX0NOVEwsIDB4ZmYpOworCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfREVCVUcsICgxIDw8IDI3KSB8ICgxIDw8IDI4KSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBzY3JhdGNoIHJlZ2lzdGVyIHBvaW50ZXIuICBUaGlzIHdpbGwgY2F1c2UKKwkgKiB0aGUgc2NyYXRjaCByZWdpc3RlciB2YWx1ZXMgdG8gYmUgd3JpdHRlbiBvdXQgdG8gbWVtb3J5CisJICogd2hlbmV2ZXIgdGhleSBhcmUgdXBkYXRlZC4KKwkgKgorCSAqIFdlIHNpbXBseSBwdXQgdGhpcyBiZWhpbmQgdGhlIHJpbmcgcmVhZCBwb2ludGVyLCB0aGlzIHdvcmtzCisJICogd2l0aCBQQ0kgR0FSVCBhcyB3ZWxsIGFzICh3aGF0ZXZlciBraW5kIG9mKSBBR1AgR0FSVAorCSAqLworCXsKKwkJdTY0IHNjcmF0Y2hfYWRkcjsKKworCQlzY3JhdGNoX2FkZHIgPSBSQURFT05fUkVBRChSNjAwX0NQX1JCX1JQVFJfQUREUik7CisJCXNjcmF0Y2hfYWRkciB8PSAoKHU2NClSQURFT05fUkVBRChSNjAwX0NQX1JCX1JQVFJfQUREUl9ISSkpIDw8IDMyOworCQlzY3JhdGNoX2FkZHIgKz0gUjYwMF9TQ1JBVENIX1JFR19PRkZTRVQ7CisJCXNjcmF0Y2hfYWRkciA+Pj0gODsKKwkJc2NyYXRjaF9hZGRyICY9IDB4ZmZmZmZmZmY7CisKKwkJUkFERU9OX1dSSVRFKFI2MDBfU0NSQVRDSF9BRERSLCAodWludDMyX3Qpc2NyYXRjaF9hZGRyKTsKKwl9CisKKwlSQURFT05fV1JJVEUoUjYwMF9TQ1JBVENIX1VNU0ssIDB4Nyk7CisKKwkvKiBUdXJuIG9uIGJ1cyBtYXN0ZXJpbmcgKi8KKwlyYWRlb25fZW5hYmxlX2JtKGRldl9wcml2KTsKKworCXJhZGVvbl93cml0ZV9yaW5nX3JwdHIoZGV2X3ByaXYsIFI2MDBfU0NSQVRDSE9GRigwKSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfTEFTVF9GUkFNRV9SRUcsIDApOworCisJcmFkZW9uX3dyaXRlX3JpbmdfcnB0cihkZXZfcHJpdiwgUjYwMF9TQ1JBVENIT0ZGKDEpLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9MQVNUX0RJU1BBVENIX1JFRywgMCk7CisKKwlyYWRlb25fd3JpdGVfcmluZ19ycHRyKGRldl9wcml2LCBSNjAwX1NDUkFUQ0hPRkYoMiksIDApOworCVJBREVPTl9XUklURShSNjAwX0xBU1RfQ0xFQVJfUkVHLCAwKTsKKworCS8qIHJlc2V0IHNhcmVhIGNvcGllcyBvZiB0aGVzZSAqLworCW1hc3Rlcl9wcml2ID0gZmlsZV9wcml2LT5tYXN0ZXItPmRyaXZlcl9wcml2OworCWlmIChtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdikgeworCQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9mcmFtZSA9IDA7CisJCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gMDsKKwkJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfY2xlYXIgPSAwOworCX0KKworCXI2MDBfZG9fd2FpdF9mb3JfaWRsZShkZXZfcHJpdik7CisKK30KKworaW50IHI2MDBfZG9fY2xlYW51cF9jcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJRFJNX0RFQlVHKCJcbiIpOworCisJLyogTWFrZSBzdXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkIGhlcmUgYmVjYXVzZSB0aGUgdW5pbnN0YWxsIGlvY3RsCisJICogbWF5IG5vdCBoYXZlIGJlZW4gY2FsbGVkIGZyb20gdXNlcnNwYWNlIGFuZCBhZnRlciBkZXZfcHJpdmF0ZQorCSAqIGlzIGZyZWVkLCBpdCdzIHRvbyBsYXRlLgorCSAqLworCWlmIChkZXYtPmlycV9lbmFibGVkKQorCQlkcm1faXJxX3VuaW5zdGFsbChkZXYpOworCisjaWYgX19PU19IQVNfQUdQCisJaWYgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJaWYgKGRldl9wcml2LT5jcF9yaW5nICE9IE5VTEwpIHsKKwkJCWRybV9jb3JlX2lvcmVtYXBmcmVlKGRldl9wcml2LT5jcF9yaW5nLCBkZXYpOworCQkJZGV2X3ByaXYtPmNwX3JpbmcgPSBOVUxMOworCQl9CisJCWlmIChkZXZfcHJpdi0+cmluZ19ycHRyICE9IE5VTEwpIHsKKwkJCWRybV9jb3JlX2lvcmVtYXBmcmVlKGRldl9wcml2LT5yaW5nX3JwdHIsIGRldik7CisJCQlkZXZfcHJpdi0+cmluZ19ycHRyID0gTlVMTDsKKwkJfQorCQlpZiAoZGV2LT5hZ3BfYnVmZmVyX21hcCAhPSBOVUxMKSB7CisJCQlkcm1fY29yZV9pb3JlbWFwZnJlZShkZXYtPmFncF9idWZmZXJfbWFwLCBkZXYpOworCQkJZGV2LT5hZ3BfYnVmZmVyX21hcCA9IE5VTEw7CisJCX0KKwl9IGVsc2UKKyNlbmRpZgorCXsKKworCQlpZiAoZGV2X3ByaXYtPmdhcnRfaW5mby5idXNfYWRkcikKKwkJCXI2MDBfcGFnZV90YWJsZV9jbGVhbnVwKGRldiwgJmRldl9wcml2LT5nYXJ0X2luZm8pOworCisJCWlmIChkZXZfcHJpdi0+Z2FydF9pbmZvLmdhcnRfdGFibGVfbG9jYXRpb24gPT0gRFJNX0FUSV9HQVJUX0ZCKSB7CisJCQlkcm1fY29yZV9pb3JlbWFwZnJlZSgmZGV2X3ByaXYtPmdhcnRfaW5mby5tYXBwaW5nLCBkZXYpOworCQkJZGV2X3ByaXYtPmdhcnRfaW5mby5hZGRyID0gTlVMTDsKKwkJfQorCX0KKwkvKiBvbmx5IGNsZWFyIHRvIHRoZSBzdGFydCBvZiBmbGFncyAqLworCW1lbXNldChkZXZfcHJpdiwgMCwgb2Zmc2V0b2YoZHJtX3JhZGVvbl9wcml2YXRlX3QsIGZsYWdzKSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHI2MDBfZG9faW5pdF9jcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBkcm1fcmFkZW9uX2luaXRfdCAqaW5pdCwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZmlsZV9wcml2LT5tYXN0ZXItPmRyaXZlcl9wcml2OworCisJRFJNX0RFQlVHKCJcbiIpOworCisJLyogaWYgd2UgcmVxdWlyZSBuZXcgbWVtb3J5IG1hcCBidXQgd2UgZG9uJ3QgaGF2ZSBpdCBmYWlsICovCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fTkVXX01FTU1BUCkgJiYgIWRldl9wcml2LT5uZXdfbWVtbWFwKSB7CisJCURSTV9FUlJPUigiQ2Fubm90IGluaXRpYWxpc2UgRFJNIG9uIHRoaXMgY2FyZFxuVGhpcyBjYXJkIHJlcXVpcmVzIGEgbmV3IFgub3JnIEREWCBmb3IgM0RcbiIpOworCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGluaXQtPmlzX3BjaSAmJiAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkpIHsKKwkJRFJNX0RFQlVHKCJGb3JjaW5nIEFHUCBjYXJkIHRvIFBDSSBtb2RlXG4iKTsKKwkJZGV2X3ByaXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOworCQkvKiBUaGUgd3JpdGViYWNrIHRlc3Qgc3VjY2VlZHMsIGJ1dCB3aGVuIHdyaXRlYmFjayBpcyBlbmFibGVkLAorCQkgKiB0aGUgcmluZyBidWZmZXIgcmVhZCBwdHIgdXBkYXRlIGZhaWxzIGFmdGVyIGZpcnN0IDEyOCBieXRlcy4KKwkJICovCisJCXJhZGVvbl9ub193YiA9IDE7CisJfSBlbHNlIGlmICghKGRldl9wcml2LT5mbGFncyAmIChSQURFT05fSVNfQUdQIHwgUkFERU9OX0lTX1BDSSB8IFJBREVPTl9JU19QQ0lFKSkKKwkJICYmICFpbml0LT5pc19wY2kpIHsKKwkJRFJNX0RFQlVHKCJSZXN0b3JpbmcgQUdQIGZsYWdcbiIpOworCQlkZXZfcHJpdi0+ZmxhZ3MgfD0gUkFERU9OX0lTX0FHUDsKKwl9CisKKwlkZXZfcHJpdi0+dXNlY190aW1lb3V0ID0gaW5pdC0+dXNlY190aW1lb3V0OworCWlmIChkZXZfcHJpdi0+dXNlY190aW1lb3V0IDwgMSB8fAorCSAgICBkZXZfcHJpdi0+dXNlY190aW1lb3V0ID4gUkFERU9OX01BWF9VU0VDX1RJTUVPVVQpIHsKKwkJRFJNX0RFQlVHKCJUSU1FT1VUIHByb2JsZW0hXG4iKTsKKwkJcjYwMF9kb19jbGVhbnVwX2NwKGRldik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEVuYWJsZSB2Ymxhbmsgb24gQ1JUQzEgZm9yIG9sZGVyIFggc2VydmVycworCSAqLworCWRldl9wcml2LT52YmxhbmtfY3J0YyA9IERSTV9SQURFT05fVkJMQU5LX0NSVEMxOworCisJZGV2X3ByaXYtPmNwX21vZGUgPSBpbml0LT5jcF9tb2RlOworCisJLyogV2UgZG9uJ3Qgc3VwcG9ydCBhbnl0aGluZyBvdGhlciB0aGFuIGJ1cy1tYXN0ZXJpbmcgcmluZyBtb2RlLAorCSAqIGJ1dCB0aGUgcmluZyBjYW4gYmUgaW4gZWl0aGVyIEFHUCBvciBQQ0kgc3BhY2UgZm9yIHRoZSByaW5nCisJICogcmVhZCBwb2ludGVyLgorCSAqLworCWlmICgoaW5pdC0+Y3BfbW9kZSAhPSBSQURFT05fQ1NRX1BSSUJNX0lORERJUykgJiYKKwkgICAgKGluaXQtPmNwX21vZGUgIT0gUkFERU9OX0NTUV9QUklCTV9JTkRCTSkpIHsKKwkJRFJNX0RFQlVHKCJCQUQgY3BfbW9kZSAoJXgpIVxuIiwgaW5pdC0+Y3BfbW9kZSk7CisJCXI2MDBfZG9fY2xlYW51cF9jcChkZXYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGluaXQtPmZiX2JwcCkgeworCWNhc2UgMTY6CisJCWRldl9wcml2LT5jb2xvcl9mbXQgPSBSQURFT05fQ09MT1JfRk9STUFUX1JHQjU2NTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwlkZWZhdWx0OgorCQlkZXZfcHJpdi0+Y29sb3JfZm10ID0gUkFERU9OX0NPTE9SX0ZPUk1BVF9BUkdCODg4ODsKKwkJYnJlYWs7CisJfQorCWRldl9wcml2LT5mcm9udF9vZmZzZXQgPSBpbml0LT5mcm9udF9vZmZzZXQ7CisJZGV2X3ByaXYtPmZyb250X3BpdGNoID0gaW5pdC0+ZnJvbnRfcGl0Y2g7CisJZGV2X3ByaXYtPmJhY2tfb2Zmc2V0ID0gaW5pdC0+YmFja19vZmZzZXQ7CisJZGV2X3ByaXYtPmJhY2tfcGl0Y2ggPSBpbml0LT5iYWNrX3BpdGNoOworCisJZGV2X3ByaXYtPnJpbmdfb2Zmc2V0ID0gaW5pdC0+cmluZ19vZmZzZXQ7CisJZGV2X3ByaXYtPnJpbmdfcnB0cl9vZmZzZXQgPSBpbml0LT5yaW5nX3JwdHJfb2Zmc2V0OworCWRldl9wcml2LT5idWZmZXJzX29mZnNldCA9IGluaXQtPmJ1ZmZlcnNfb2Zmc2V0OworCWRldl9wcml2LT5nYXJ0X3RleHR1cmVzX29mZnNldCA9IGluaXQtPmdhcnRfdGV4dHVyZXNfb2Zmc2V0OworCisJbWFzdGVyX3ByaXYtPnNhcmVhID0gZHJtX2dldHNhcmVhKGRldik7CisJaWYgKCFtYXN0ZXJfcHJpdi0+c2FyZWEpIHsKKwkJRFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBzYXJlYSFcbiIpOworCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X3ByaXYtPmNwX3JpbmcgPSBkcm1fY29yZV9maW5kbWFwKGRldiwgaW5pdC0+cmluZ19vZmZzZXQpOworCWlmICghZGV2X3ByaXYtPmNwX3JpbmcpIHsKKwkJRFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBjcCByaW5nIHJlZ2lvbiFcbiIpOworCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldl9wcml2LT5yaW5nX3JwdHIgPSBkcm1fY29yZV9maW5kbWFwKGRldiwgaW5pdC0+cmluZ19ycHRyX29mZnNldCk7CisJaWYgKCFkZXZfcHJpdi0+cmluZ19ycHRyKSB7CisJCURSTV9FUlJPUigiY291bGQgbm90IGZpbmQgcmluZyByZWFkIHBvaW50ZXIhXG4iKTsKKwkJcjYwMF9kb19jbGVhbnVwX2NwKGRldik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXYtPmFncF9idWZmZXJfdG9rZW4gPSBpbml0LT5idWZmZXJzX29mZnNldDsKKwlkZXYtPmFncF9idWZmZXJfbWFwID0gZHJtX2NvcmVfZmluZG1hcChkZXYsIGluaXQtPmJ1ZmZlcnNfb2Zmc2V0KTsKKwlpZiAoIWRldi0+YWdwX2J1ZmZlcl9tYXApIHsKKwkJRFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBkbWEgYnVmZmVyIHJlZ2lvbiFcbiIpOworCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGluaXQtPmdhcnRfdGV4dHVyZXNfb2Zmc2V0KSB7CisJCWRldl9wcml2LT5nYXJ0X3RleHR1cmVzID0KKwkJICAgIGRybV9jb3JlX2ZpbmRtYXAoZGV2LCBpbml0LT5nYXJ0X3RleHR1cmVzX29mZnNldCk7CisJCWlmICghZGV2X3ByaXYtPmdhcnRfdGV4dHVyZXMpIHsKKwkJCURSTV9FUlJPUigiY291bGQgbm90IGZpbmQgR0FSVCB0ZXh0dXJlIHJlZ2lvbiFcbiIpOworCQkJcjYwMF9kb19jbGVhbnVwX2NwKGRldik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworI2lmIF9fT1NfSEFTX0FHUAorCS8qIFhYWCAqLworCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCWRybV9jb3JlX2lvcmVtYXBfd2MoZGV2X3ByaXYtPmNwX3JpbmcsIGRldik7CisJCWRybV9jb3JlX2lvcmVtYXBfd2MoZGV2X3ByaXYtPnJpbmdfcnB0ciwgZGV2KTsKKwkJZHJtX2NvcmVfaW9yZW1hcF93YyhkZXYtPmFncF9idWZmZXJfbWFwLCBkZXYpOworCQlpZiAoIWRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUgfHwKKwkJICAgICFkZXZfcHJpdi0+cmluZ19ycHRyLT5oYW5kbGUgfHwKKwkJICAgICFkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUpIHsKKwkJCURSTV9FUlJPUigiY291bGQgbm90IGZpbmQgaW9yZW1hcCBhZ3AgcmVnaW9ucyFcbiIpOworCQkJcjYwMF9kb19jbGVhbnVwX2NwKGRldik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZQorI2VuZGlmCisJeworCQlkZXZfcHJpdi0+Y3BfcmluZy0+aGFuZGxlID0gKHZvaWQgKilkZXZfcHJpdi0+Y3BfcmluZy0+b2Zmc2V0OworCQlkZXZfcHJpdi0+cmluZ19ycHRyLT5oYW5kbGUgPQorCQkgICAgKHZvaWQgKilkZXZfcHJpdi0+cmluZ19ycHRyLT5vZmZzZXQ7CisJCWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSA9CisJCSAgICAodm9pZCAqKWRldi0+YWdwX2J1ZmZlcl9tYXAtPm9mZnNldDsKKworCQlEUk1fREVCVUcoImRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUgJXBcbiIsCisJCQkgIGRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUpOworCQlEUk1fREVCVUcoImRldl9wcml2LT5yaW5nX3JwdHItPmhhbmRsZSAlcFxuIiwKKwkJCSAgZGV2X3ByaXYtPnJpbmdfcnB0ci0+aGFuZGxlKTsKKwkJRFJNX0RFQlVHKCJkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgJXBcbiIsCisJCQkgIGRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSk7CisJfQorCisJZGV2X3ByaXYtPmZiX2xvY2F0aW9uID0gKHJhZGVvbl9yZWFkX2ZiX2xvY2F0aW9uKGRldl9wcml2KSAmIDB4ZmZmZikgPDwgMjQ7CisJZGV2X3ByaXYtPmZiX3NpemUgPQorCQkoKChyYWRlb25fcmVhZF9mYl9sb2NhdGlvbihkZXZfcHJpdikgJiAweGZmZmYwMDAwdSkgPDwgOCkgKyAweDEwMDAwMDApCisJCS0gZGV2X3ByaXYtPmZiX2xvY2F0aW9uOworCisJZGV2X3ByaXYtPmZyb250X3BpdGNoX29mZnNldCA9ICgoKGRldl9wcml2LT5mcm9udF9waXRjaCAvIDY0KSA8PCAyMikgfAorCQkJCQkoKGRldl9wcml2LT5mcm9udF9vZmZzZXQKKwkJCQkJICArIGRldl9wcml2LT5mYl9sb2NhdGlvbikgPj4gMTApKTsKKworCWRldl9wcml2LT5iYWNrX3BpdGNoX29mZnNldCA9ICgoKGRldl9wcml2LT5iYWNrX3BpdGNoIC8gNjQpIDw8IDIyKSB8CisJCQkJICAgICAgICgoZGV2X3ByaXYtPmJhY2tfb2Zmc2V0CisJCQkJCSArIGRldl9wcml2LT5mYl9sb2NhdGlvbikgPj4gMTApKTsKKworCWRldl9wcml2LT5kZXB0aF9waXRjaF9vZmZzZXQgPSAoKChkZXZfcHJpdi0+ZGVwdGhfcGl0Y2ggLyA2NCkgPDwgMjIpIHwKKwkJCQkJKChkZXZfcHJpdi0+ZGVwdGhfb2Zmc2V0CisJCQkJCSAgKyBkZXZfcHJpdi0+ZmJfbG9jYXRpb24pID4+IDEwKSk7CisKKwlkZXZfcHJpdi0+Z2FydF9zaXplID0gaW5pdC0+Z2FydF9zaXplOworCisJLyogTmV3IGxldCdzIHNldCB0aGUgbWVtb3J5IG1hcCAuLi4gKi8KKwlpZiAoZGV2X3ByaXYtPm5ld19tZW1tYXApIHsKKwkJdTMyIGJhc2UgPSAwOworCisJCURSTV9JTkZPKCJTZXR0aW5nIEdBUlQgbG9jYXRpb24gYmFzZWQgb24gbmV3IG1lbW9yeSBtYXBcbiIpOworCisJCS8qIElmIHVzaW5nIEFHUCwgdHJ5IHRvIGxvY2F0ZSB0aGUgQUdQIGFwZXJ0dXJlIGF0IHRoZSBzYW1lCisJCSAqIGxvY2F0aW9uIGluIHRoZSBjYXJkIGFuZCBvbiB0aGUgYnVzLCB0aG91Z2ggd2UgaGF2ZSB0bworCQkgKiBhbGlnbiBpdCBkb3duLgorCQkgKi8KKyNpZiBfX09TX0hBU19BR1AKKwkJLyogWFhYICovCisJCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCQliYXNlID0gZGV2LT5hZ3AtPmJhc2U7CisJCQkvKiBDaGVjayBpZiB2YWxpZCAqLworCQkJaWYgKChiYXNlICsgZGV2X3ByaXYtPmdhcnRfc2l6ZSAtIDEpID49IGRldl9wcml2LT5mYl9sb2NhdGlvbiAmJgorCQkJICAgIGJhc2UgPCAoZGV2X3ByaXYtPmZiX2xvY2F0aW9uICsgZGV2X3ByaXYtPmZiX3NpemUgLSAxKSkgeworCQkJCURSTV9JTkZPKCJDYW4ndCB1c2UgQUdQIGJhc2UgQDB4JTA4bHgsIHdvbid0IGZpdFxuIiwKKwkJCQkJIGRldi0+YWdwLT5iYXNlKTsKKwkJCQliYXNlID0gMDsKKwkJCX0KKwkJfQorI2VuZGlmCisJCS8qIElmIG5vdCBvciBpZiBBR1AgaXMgYXQgMCAoTWFjcyksIHRyeSB0byBwdXQgaXQgZWxzZXdoZXJlICovCisJCWlmIChiYXNlID09IDApIHsKKwkJCWJhc2UgPSBkZXZfcHJpdi0+ZmJfbG9jYXRpb24gKyBkZXZfcHJpdi0+ZmJfc2l6ZTsKKwkJCWlmIChiYXNlIDwgZGV2X3ByaXYtPmZiX2xvY2F0aW9uIHx8CisJCQkgICAgKChiYXNlICsgZGV2X3ByaXYtPmdhcnRfc2l6ZSkgJiAweGZmZmZmZmZmdWwpIDwgYmFzZSkKKwkJCQliYXNlID0gZGV2X3ByaXYtPmZiX2xvY2F0aW9uCisJCQkJCS0gZGV2X3ByaXYtPmdhcnRfc2l6ZTsKKwkJfQorCQlkZXZfcHJpdi0+Z2FydF92bV9zdGFydCA9IGJhc2UgJiAweGZmYzAwMDAwdTsKKwkJaWYgKGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ICE9IGJhc2UpCisJCQlEUk1fSU5GTygiR0FSVCBhbGlnbmVkIGRvd24gZnJvbSAweCUwOHggdG8gMHglMDh4XG4iLAorCQkJCSBiYXNlLCBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CisJfQorCisjaWYgX19PU19IQVNfQUdQCisJLyogWFhYICovCisJaWYgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApCisJCWRldl9wcml2LT5nYXJ0X2J1ZmZlcnNfb2Zmc2V0ID0gKGRldi0+YWdwX2J1ZmZlcl9tYXAtPm9mZnNldAorCQkJCQkJIC0gZGV2LT5hZ3AtPmJhc2UKKwkJCQkJCSArIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0KTsKKwllbHNlCisjZW5kaWYKKwkJZGV2X3ByaXYtPmdhcnRfYnVmZmVyc19vZmZzZXQgPSAoZGV2LT5hZ3BfYnVmZmVyX21hcC0+b2Zmc2V0CisJCQkJCQkgLSAodW5zaWduZWQgbG9uZylkZXYtPnNnLT52aXJ0dWFsCisJCQkJCQkgKyBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CisKKwlEUk1fREVCVUcoImZiIDB4JTA4eCBzaXplICVkXG4iLAorCQkgICh1bnNpZ25lZCBpbnQpIGRldl9wcml2LT5mYl9sb2NhdGlvbiwKKwkJICAodW5zaWduZWQgaW50KSBkZXZfcHJpdi0+ZmJfc2l6ZSk7CisJRFJNX0RFQlVHKCJkZXZfcHJpdi0+Z2FydF9zaXplICVkXG4iLCBkZXZfcHJpdi0+Z2FydF9zaXplKTsKKwlEUk1fREVCVUcoImRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0IDB4JTA4eFxuIiwKKwkJICAodW5zaWduZWQgaW50KSBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CisJRFJNX0RFQlVHKCJkZXZfcHJpdi0+Z2FydF9idWZmZXJzX29mZnNldCAweCUwOGx4XG4iLAorCQkgIGRldl9wcml2LT5nYXJ0X2J1ZmZlcnNfb2Zmc2V0KTsKKworCWRldl9wcml2LT5yaW5nLnN0YXJ0ID0gKHUzMiAqKSBkZXZfcHJpdi0+Y3BfcmluZy0+aGFuZGxlOworCWRldl9wcml2LT5yaW5nLmVuZCA9ICgodTMyICopIGRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUKKwkJCSAgICAgICsgaW5pdC0+cmluZ19zaXplIC8gc2l6ZW9mKHUzMikpOworCWRldl9wcml2LT5yaW5nLnNpemUgPSBpbml0LT5yaW5nX3NpemU7CisJZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3ID0gZHJtX29yZGVyKGluaXQtPnJpbmdfc2l6ZSAvIDgpOworCisJZGV2X3ByaXYtPnJpbmcucnB0cl91cGRhdGUgPSAvKiBpbml0LT5ycHRyX3VwZGF0ZSAqLyA0MDk2OworCWRldl9wcml2LT5yaW5nLnJwdHJfdXBkYXRlX2wycXcgPSBkcm1fb3JkZXIoLyogaW5pdC0+cnB0cl91cGRhdGUgKi8gNDA5NiAvIDgpOworCisJZGV2X3ByaXYtPnJpbmcuZmV0Y2hfc2l6ZSA9IC8qIGluaXQtPmZldGNoX3NpemUgKi8gMzI7CisJZGV2X3ByaXYtPnJpbmcuZmV0Y2hfc2l6ZV9sMm93ID0gZHJtX29yZGVyKC8qIGluaXQtPmZldGNoX3NpemUgKi8gMzIgLyAxNik7CisKKwlkZXZfcHJpdi0+cmluZy50YWlsX21hc2sgPSAoZGV2X3ByaXYtPnJpbmcuc2l6ZSAvIHNpemVvZih1MzIpKSAtIDE7CisKKwlkZXZfcHJpdi0+cmluZy5oaWdoX21hcmsgPSBSQURFT05fUklOR19ISUdIX01BUks7CisKKyNpZiBfX09TX0hBU19BR1AKKwlpZiAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQkvKiBYWFggdHVybiBvZmYgcGNpZSBnYXJ0ICovCisJfSBlbHNlCisjZW5kaWYKKwl7CisJCWRldl9wcml2LT5nYXJ0X2luZm8udGFibGVfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisJCS8qIGlmIHdlIGhhdmUgYW4gb2Zmc2V0IHNldCBmcm9tIHVzZXJzcGFjZSAqLworCQlpZiAoIWRldl9wcml2LT5wY2lnYXJ0X29mZnNldF9zZXQpIHsKKwkJCURSTV9FUlJPUigiTmVlZCBnYXJ0IG9mZnNldCBmcm9tIHVzZXJzcGFjZVxuIik7CisJCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJRFJNX0RFQlVHKCJVc2luZyBnYXJ0IG9mZnNldCAweCUwOGx4XG4iLCBkZXZfcHJpdi0+cGNpZ2FydF9vZmZzZXQpOworCisJCWRldl9wcml2LT5nYXJ0X2luZm8uYnVzX2FkZHIgPQorCQkJZGV2X3ByaXYtPnBjaWdhcnRfb2Zmc2V0ICsgZGV2X3ByaXYtPmZiX2xvY2F0aW9uOworCQlkZXZfcHJpdi0+Z2FydF9pbmZvLm1hcHBpbmcub2Zmc2V0ID0KKwkJCWRldl9wcml2LT5wY2lnYXJ0X29mZnNldCArIGRldl9wcml2LT5mYl9hcGVyX29mZnNldDsKKwkJZGV2X3ByaXYtPmdhcnRfaW5mby5tYXBwaW5nLnNpemUgPQorCQkJZGV2X3ByaXYtPmdhcnRfaW5mby50YWJsZV9zaXplOworCisJCWRybV9jb3JlX2lvcmVtYXBfd2MoJmRldl9wcml2LT5nYXJ0X2luZm8ubWFwcGluZywgZGV2KTsKKwkJaWYgKCFkZXZfcHJpdi0+Z2FydF9pbmZvLm1hcHBpbmcuaGFuZGxlKSB7CisJCQlEUk1fRVJST1IoImlvcmVtYXAgZmFpbGVkLlxuIik7CisJCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJZGV2X3ByaXYtPmdhcnRfaW5mby5hZGRyID0KKwkJCWRldl9wcml2LT5nYXJ0X2luZm8ubWFwcGluZy5oYW5kbGU7CisKKwkJRFJNX0RFQlVHKCJTZXR0aW5nIHBoeXNfcGNpX2dhcnQgdG8gJXAgJTA4bFhcbiIsCisJCQkgIGRldl9wcml2LT5nYXJ0X2luZm8uYWRkciwKKwkJCSAgZGV2X3ByaXYtPnBjaWdhcnRfb2Zmc2V0KTsKKworCQlpZiAoIXI2MDBfcGFnZV90YWJsZV9pbml0KGRldikpIHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXQgR0FSVCB0YWJsZVxuIik7CisJCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JWNzcwKSkKKwkJCXI3MDBfdm1faW5pdChkZXYpOworCQllbHNlCisJCQlyNjAwX3ZtX2luaXQoZGV2KTsKKwl9CisKKwlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlY3NzApKQorCQlyNzAwX2NwX2xvYWRfbWljcm9jb2RlKGRldl9wcml2KTsKKwllbHNlCisJCXI2MDBfY3BfbG9hZF9taWNyb2NvZGUoZGV2X3ByaXYpOworCisJcjYwMF9jcF9pbml0X3JpbmdfYnVmZmVyKGRldiwgZGV2X3ByaXYsIGZpbGVfcHJpdik7CisKKwlkZXZfcHJpdi0+bGFzdF9idWYgPSAwOworCisJcjYwMF9kb19lbmdpbmVfcmVzZXQoZGV2KTsKKwlyNjAwX3Rlc3Rfd3JpdGViYWNrKGRldl9wcml2KTsKKworCXJldHVybiAwOworfQorCitpbnQgcjYwMF9kb19yZXN1bWVfY3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCURSTV9ERUJVRygiXG4iKTsKKwlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlY3NzApKSB7CisJCXI3MDBfdm1faW5pdChkZXYpOworCQlyNzAwX2NwX2xvYWRfbWljcm9jb2RlKGRldl9wcml2KTsKKwl9IGVsc2UgeworCQlyNjAwX3ZtX2luaXQoZGV2KTsKKwkJcjYwMF9jcF9sb2FkX21pY3JvY29kZShkZXZfcHJpdik7CisJfQorCXI2MDBfY3BfaW5pdF9yaW5nX2J1ZmZlcihkZXYsIGRldl9wcml2LCBmaWxlX3ByaXYpOworCXI2MDBfZG9fZW5naW5lX3Jlc2V0KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyogV2FpdCBmb3IgdGhlIENQIHRvIGdvIGlkbGUuCisgKi8KK2ludCByNjAwX2RvX2NwX2lkbGUoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQoreworCVJJTkdfTE9DQUxTOworCURSTV9ERUJVRygiXG4iKTsKKworCUJFR0lOX1JJTkcoNSk7CisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX0VWRU5UX1dSSVRFLCAwKSk7CisJT1VUX1JJTkcoUjYwMF9DQUNIRV9GTFVTSF9BTkRfSU5WX0VWRU5UKTsKKwkvKiB3YWl0IGZvciAzRCBpZGxlIGNsZWFuICovCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05GSUdfUkVHLCAxKSk7CisJT1VUX1JJTkcoKFI2MDBfV0FJVF9VTlRJTCAtIFI2MDBfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSA+PiAyKTsKKwlPVVRfUklORyhSQURFT05fV0FJVF8zRF9JRExFIHwgUkFERU9OX1dBSVRfM0RfSURMRUNMRUFOKTsKKworCUFEVkFOQ0VfUklORygpOworCUNPTU1JVF9SSU5HKCk7CisKKwlyZXR1cm4gcjYwMF9kb193YWl0X2Zvcl9pZGxlKGRldl9wcml2KTsKK30KKworLyogU3RhcnQgdGhlIENvbW1hbmQgUHJvY2Vzc29yLgorICovCit2b2lkIHI2MDBfZG9fY3Bfc3RhcnQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQoreworCXUzMiBjcF9tZTsKKwlSSU5HX0xPQ0FMUzsKKwlEUk1fREVCVUcoIlxuIik7CisKKwlCRUdJTl9SSU5HKDcpOworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9NRV9JTklUSUFMSVpFLCA1KSk7CisJT1VUX1JJTkcoMHgwMDAwMDAwMSk7CisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA8IENISVBfUlY3NzApKQorCQlPVVRfUklORygweDAwMDAwMDAzKTsKKwllbHNlCisJCU9VVF9SSU5HKDB4MDAwMDAwMDApOworCU9VVF9SSU5HKChkZXZfcHJpdi0+cjYwMF9tYXhfaHdfY29udGV4dHMgLSAxKSk7CisJT1VUX1JJTkcoUjYwMF9NRV9JTklUSUFMSVpFX0RFVklDRV9JRCgxKSk7CisJT1VUX1JJTkcoMHgwMDAwMDAwMCk7CisJT1VUX1JJTkcoMHgwMDAwMDAwMCk7CisJQURWQU5DRV9SSU5HKCk7CisJQ09NTUlUX1JJTkcoKTsKKworCS8qIHNldCB0aGUgbXV4IGFuZCByZXNldCB0aGUgaGFsdCBiaXQgKi8KKwljcF9tZSA9IDB4ZmY7CisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfQ05UTCwgY3BfbWUpOworCisJZGV2X3ByaXYtPmNwX3J1bm5pbmcgPSAxOworCit9CisKK3ZvaWQgcjYwMF9kb19jcF9yZXNldChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJdTMyIGN1cl9yZWFkX3B0cjsKKwlEUk1fREVCVUcoIlxuIik7CisKKwljdXJfcmVhZF9wdHIgPSBSQURFT05fUkVBRChSNjAwX0NQX1JCX1JQVFIpOworCVJBREVPTl9XUklURShSNjAwX0NQX1JCX1dQVFIsIGN1cl9yZWFkX3B0cik7CisJU0VUX1JJTkdfSEVBRChkZXZfcHJpdiwgY3VyX3JlYWRfcHRyKTsKKwlkZXZfcHJpdi0+cmluZy50YWlsID0gY3VyX3JlYWRfcHRyOworfQorCit2b2lkIHI2MDBfZG9fY3Bfc3RvcChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJdWludDMyX3QgY3BfbWU7CisKKwlEUk1fREVCVUcoIlxuIik7CisKKwljcF9tZSA9IDB4ZmYgfCBSNjAwX0NQX01FX0hBTFQ7CisKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9DTlRMLCBjcF9tZSk7CisKKwlkZXZfcHJpdi0+Y3BfcnVubmluZyA9IDA7Cit9CisKK2ludCByNjAwX2NwX2Rpc3BhdGNoX2luZGlyZWN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2J1ZiAqYnVmLCBpbnQgc3RhcnQsIGludCBlbmQpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlSSU5HX0xPQ0FMUzsKKworCWlmIChzdGFydCAhPSBlbmQpIHsKKwkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAoZGV2X3ByaXYtPmdhcnRfYnVmZmVyc19vZmZzZXQKKwkJCQkJKyBidWYtPm9mZnNldCArIHN0YXJ0KTsKKwkJaW50IGR3b3JkcyA9IChlbmQgLSBzdGFydCArIDMpIC8gc2l6ZW9mKHUzMik7CisKKwkJRFJNX0RFQlVHKCJkd29yZHM6JWRcbiIsIGR3b3Jkcyk7CisJCURSTV9ERUJVRygib2Zmc2V0IDB4JWx4XG4iLCBvZmZzZXQpOworCisKKwkJLyogSW5kaXJlY3QgYnVmZmVyIGRhdGEgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2IGR3b3Jkcy4KKwkJICogcGFkIHRoZSBkYXRhIHdpdGggYSBUeXBlLTIgQ1AgcGFja2V0LgorCQkgKi8KKwkJd2hpbGUgKGR3b3JkcyAmIDB4ZikgeworCQkJdTMyICpkYXRhID0gKHUzMiAqKQorCQkJICAgICgoY2hhciAqKWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZQorCQkJICAgICArIGJ1Zi0+b2Zmc2V0ICsgc3RhcnQpOworCQkJZGF0YVtkd29yZHMrK10gPSBSQURFT05fQ1BfUEFDS0VUMjsKKwkJfQorCisJCS8qIEZpcmUgb2ZmIHRoZSBpbmRpcmVjdCBidWZmZXIgKi8KKwkJQkVHSU5fUklORyg0KTsKKwkJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX0lORElSRUNUX0JVRkZFUiwgMikpOworCQlPVVRfUklORygob2Zmc2V0ICYgMHhmZmZmZmZmYykpOworCQlPVVRfUklORygodXBwZXJfMzJfYml0cyhvZmZzZXQpICYgMHhmZikpOworCQlPVVRfUklORyhkd29yZHMpOworCQlBRFZBTkNFX1JJTkcoKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9taWNyb2NvZGUuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9taWNyb2NvZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzhjOGI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX21pY3JvY29kZS5oCkBAIC0wLDAgKzEsMjMyOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIoUykgQU5EL09SIElUUyBTVVBQTElFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgUjYwMF9NSUNST0NPREVfSAorI2RlZmluZSBSNjAwX01JQ1JPQ09ERV9ICisKK3N0YXRpYyBjb25zdCBpbnQgTUVfSlVNUF9UQUJMRV9TVEFSVCA9IDE3NjQ7CitzdGF0aWMgY29uc3QgaW50IE1FX0pVTVBfVEFCTEVfRU5EICAgPSAxNzkyOworCisjZGVmaW5lIFBGUF9VQ09ERV9TSVpFIDU3NgorI2RlZmluZSBQTTRfVUNPREVfU0laRSAxNzkyCisjZGVmaW5lIFI3MDBfUEZQX1VDT0RFX1NJWkUgODQ4CisjZGVmaW5lIFI3MDBfUE00X1VDT0RFX1NJWkUgMTM2MAorCitzdGF0aWMgY29uc3QgdTMyIFI2MDBfY3BfbWljcm9jb2RlW11bM10gPSB7CisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODQ2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDBmMDAsIDB4MDAyODE2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4OGQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMTggfSwKKyAgICB7IDB4MDA0MTIwMDAsIDB4MDA0MDQ4MTEsIDB4MDE5IH0sCisgICAgeyAweDAwNDIyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzEsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDkwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMTE2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIxMWEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyODFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTE0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZjLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIyMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDIwMDAwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIxMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjIwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwMzggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDM1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDAzNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA5LCAweDAwNDAxMjJkLCAweDA0NiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzZSB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDQwMWMxMSwgMHgwNDEgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODFhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjExYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2M3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODEyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxNDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwNGIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmODAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EyYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwNWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDVlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDA2MiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBiLCAweDAwNDAxMjJkLCAweDA2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MTYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMxNjI1LCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYTMsIDB4MDAwIH0sCisgICAgeyAweDNmZmZmYzAwLCAweDAwMjkwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDZkIH0sCisgICAgeyAweDAwMDAwMTAwLCAweDAwNDAxYzExLCAweDA3MCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmMGZmLCAweDAwMjgxYTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAyOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDE4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgzZmZmZmZmZiwgMHgwMDI4NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyZCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4MCB9LAorICAgIHsgMHgwMDAwMDAyZSwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwODcgfSwKKyAgICB7IDB4MDAwMDAwMmQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJlLCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA4NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZWQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWUxIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOGEgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4YzA0MDM2MjAsIDB4MDkwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA4ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOGQgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDhmIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA4ZiB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOTUgfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwOWQgfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOWIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDlhIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5YyB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOWMgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZjAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhNCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhNyB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBlMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDdmLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGRiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDI3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyOGMgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWUzMCwgMHgwMDAgfSwKKyAgICB7IDB4OTk4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxY2U0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNywgMHgxMjggfSwKKyAgICB7IDB4OWIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHg5YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzE0NmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDNjMDUsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDA3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGM1IH0sCisgICAgeyAweDAwZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg5ODAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwZDYgfSwKKyAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGEwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwZDQgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwY2YgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBjZSB9LAorICAgIHsgMHgwMDAwM2YwMCwgMHgwMDQwMGMxMSwgMHgwZDAgfSwKKyAgICB7IDB4MDAwMDFmMDAsIDB4MDA0MDBjMTEsIDB4MGQwIH0sCisgICAgeyAweDAwMDAwZjAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDM4MDAwOSwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4M2YwMDAwMDAsIDB4MDAyODBlMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDQ5NGEyMywgMHgwZDYgfSwKKyAgICB7IDB4MDAzODBmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDY4MDAwMDA3LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMjAyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMGZmMDAwMCwgMHgwMDI4NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJlLCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGUzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVlNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwZTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWVhIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIyMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAxMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZWYsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDBmMSB9LAorICAgIHsgMHgwMDAwMDAwYiwgMHgwMDIxMDIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGYxIH0sCisgICAgeyAweDAwMDAwNDAwLCAweDAwMjkyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmNiB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMDQgfSwKKyAgICB7IDB4MDAwMGEzMGYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MGZkIH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwNDA0ODExLCAweDEwNCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwNDA0ODExLCAweDEwNCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTAzIH0sCisgICAgeyAweDAwMDAwMGZmLCAweDAwNDA0ODExLCAweDEwNCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMmM0MDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIyNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzA0MjRhMjAsIDB4MTBkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMTAxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDExNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzEyMjQsIDB4MTEwIH0sCisgICAgeyAweGZmYmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTI3IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjBlMzAsIDB4MDAwIH0sCisgICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDdmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDA4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjEzIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDEyZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxOWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTUxIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MTQ2MSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE4ODIsIDB4MmE0IH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJjOSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTM4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxOWYgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNTEgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzA2ODFhMjAsIDB4MmE0IH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJjOSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTQ5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDBhMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxN2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MThkIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMWUyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MDQ4ZWIsIDB4MTg5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhNCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMzMDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAzMDI0MDksIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjhjIH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTczIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxNmYgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDE4NCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzgwNDJhLCAweDJlNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE2NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxODEgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4NDYwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MTlmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE4OCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwODExYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxZTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmJmZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDEwMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA2MjFlMjgsIDB4MTI4IH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwODIyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAyYzAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDA2MDBlMmQsIDB4MWFhIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwNjAwZTJkLCAweDFhYSB9LAorICAgIHsgMHgwMDAwYzAwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDFhNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDM5MDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAyZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNiMGQ2MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgyZmUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDE5ZiB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIxMDYyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MjIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEyNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjYyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFjZCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxYzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWQ2IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFjNSB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjgyYTJhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxYmUgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMzA0YTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzAxZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFkNiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZDIgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMTgxMSwgMHgyYTQgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZTUgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjgsIDB4MDAwIH0sCisgICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTAzLCAweDFmMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MjQsIDB4MWYyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxNGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjAwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDI0MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYjE0MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwOTAxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxOWYgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjk0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTQ2NSwgMHgyYTQgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmM5IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjA2IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxZmYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDQwZiwgMHgyMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNSB9LAorICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgyZmUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MThkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE4OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjhjIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyMWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjFjIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDJlNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWIyIH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDIzNSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwODAxMDEsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyM2EgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwNjAwNDExLCAweDJmZSB9LAorICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MTlmIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjY1IH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MjUzIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI0OCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI0YiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjExZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWM0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjUwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjUzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYWEgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNWIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI1YSB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDQwNDgxMSwgMHgyNWYgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDA0MDQ4MTEsIDB4MjVmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNWUgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA0MDQ4MTEsIDB4MjVmIH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJkMiB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjNmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwODgxYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4MjhjIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNzAwMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMzLCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDI3YiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM0LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2OTFjZTIsIDB4MTI4IH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyODYgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwNDAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHhjMDIyMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDM2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMxLCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGExMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2UzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2U0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MmM1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJjMiB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmMyIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyYzUgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyYzUgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmM1IH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmM1IH0sCisgICAgeyAweDAwMDAwMDJhLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJjNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZWQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjllIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJjNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyOWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWU0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJjNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyOTAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmM3IH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDgwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2ExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzgwOGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDg0MSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MzAxIH0sCisgICAgeyAweGZmZmZmZmVmLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweGMwNDg0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDQwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMwNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4YzAzMDRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwYTIyLCAweDMzNCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzNkIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNTEgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM1ZSB9LAorICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNTUgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwNDA0ODExLCAweDM0OSB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzQ5IH0sCisgICAgeyAweDAwMDAyMTA0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNSwgMHgwMDIwMzYyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwNDksIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2MCB9LAorICAgIHsgMHgwMDAwMDAzNSwgMHgwMDgwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzNzYgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM4MCB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzhjIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOTggfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM5OCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzlhIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOWYgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwODAwMDAwMCwgMHgwMDI5MGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA4MDAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4YzAyMjE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGE0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzgyIH0sCisgICAgeyAweDAwMDAyMTBlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzhlIH0sCisgICAgeyAweDAwMDAyMTA4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNWUgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNiOSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzYWIgfSwKKyAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4YmFiZWNhZmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNzAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2JlIH0sCisgICAgeyAweDhjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDQwMDAwMDAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzY2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDE4MDAsIDB4M2NmIH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNiwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZDIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDFjMDAsIDB4M2Q1IH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNywgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjBjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTQ4ZTgsIDB4MDAwIH0sCisgICAgeyAweGE1ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4M2ZkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweGMwMjEwMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZTIgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDQ4MTIyMCwgMHgzZWEgfSwKKyAgICB7IDB4YTc4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHgzZmQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDg4MywgMHgwMDAgfSwKKyAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4M2ZkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHhhOTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDA0MDBjMTEsIDB4M2U1IH0sCisgICAgeyAweGFiODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDQwMGMxMSwgMHgzZTUgfSwKKyAgICB7IDB4YWQ4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwNDAwYzExLCAweDNlNSB9LAorICAgIHsgMHhiMzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYzZmMsIDB4MDA0MDBjMTEsIDB4M2U1IH0sCisgICAgeyAweGFmODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDQwMGMxMSwgMHgzZTUgfSwKKyAgICB7IDB4YjE4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmMDAwLCAweDAwNDAwYzExLCAweDNlNSB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDE4MjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAxOGEwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMThjMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDE4ZjhlMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAxOGY4ODAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMThlMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDE4ZjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAxOGYzZmMsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDg2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4ODUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzAyLCAweDQyZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDNjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAyMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyODBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NDQgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNCwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDRkIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NDQ5IH0sCisgICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NDRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjgyNGYwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDI4MGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ1NCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDRlMDAwMDAsIDB4NDZkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ3YSB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDU5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmUwMDAwMCwgMHg0NmQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDdhIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ2ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0N2EgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDZkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ3YSB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDY4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHg0NmQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDdhIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4ZTAwMDAwLCAweDQ2ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0N2EgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ3NyB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDgwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzA4LCAweDQzYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDQwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NDhhIH0sCisgICAgeyAweDAwMDQwMDAwLCAweGMwNDk0YTIwLCAweDQ4YiB9LAorICAgIHsgMHhmZmZiZmZmZiwgMHhjMDI4NGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDQ5NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDkzIH0sCisgICAgeyAweGEwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2YiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGFlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NGE5IH0sCisgICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NGFjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRiMiB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRiOSB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGJiIH0sCisgICAgeyAweDAwMDAyMTgwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGViIH0sCisgICAgeyAweDAwMDAwMDM1LCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgxOGUwMGMxMSwgMHg0ZGEgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDhjMDQ4MDAsIDB4NGNlIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM2LCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGM4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTEgfSwKKyAgICB7IDB4MDAwMDAwMzUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM2LCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMzA0YSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZTAwMDAwMDAsIDB4YzA0ODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0ZjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBmZiwgMHgwMDI4MGUzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDRmNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMyLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyZSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZTAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJhLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHhmMWZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4YzAyMjBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMzLCAweDQwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHg4NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4OWQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDQwMjE0YTIwLCAweDAwMCB9LAorICAgIHsgMHg5NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTE2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIyMjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMTRhOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjExYTI0LCAweDAwMCB9LAorICAgIHsgMHgxMDAwMDAwMCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4ZWZmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDkzOGNlLCAweDYwMiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMzAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTQxIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDIwMDAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NDkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU1YiB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTQ5IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTViIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU1YiB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTU5IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NTU0IH0sCisgICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NTU3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAxYzEwLCAweDU1YiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDU1ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2ZCB9LAorICAgIHsgMHgwMDAwYTJiNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1NmIgfSwKKyAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1N2QgfSwKKyAgICB7IDB4MDAwMGEyYmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmM1LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NTdiIH0sCisgICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NThkIH0sCisgICAgeyAweDAwMDBhMmJmLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiZSwgMHgwMDYwNDQxMSwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJjNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU4YiB9LAorICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmM3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NTk5IH0sCisgICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHg4NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzMDRhLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NTlmIH0sCisgICAgeyAweGE0MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NWE0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDViNyB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDM2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDViYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YTQgfSwKKyAgICB7IDB4OTgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg1YmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2EsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVlMSB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzVlIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDA5ODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHg1ZGMgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjkxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZiLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjkxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmY3LCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM1ZSB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDE4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MTMgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDA0MDRjMTEsIDB4NWY5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgzOGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAzMDEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDY0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg2MTIgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjIyLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTEwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwNDAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjE0IH0sCisgICAgeyAweDlmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjE3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxOWYgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJhLCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAxMzMwNGVmLCAweDA1OWIwMjM5LCAweDAwMCB9LAorICAgIHsgMHgwMWIwMDE1OSwgMHgwNDI1MDU5YiwgMHgwMDAgfSwKKyAgICB7IDB4MDIxMjAxZjYsIDB4MDIzOTAxNDIsIDB4MDAwIH0sCisgICAgeyAweDAyMTAwMjJlLCAweDAyODkwMjJhLCAweDAwMCB9LAorICAgIHsgMHgwM2MyMDU5YiwgMHgwNTliMDU5YiwgMHgwMDAgfSwKKyAgICB7IDB4MDVjZDA1Y2UsIDB4MDMwODA1OWIsIDB4MDAwIH0sCisgICAgeyAweDA1OWIwNWEwLCAweDAzMDkwMzI5LCAweDAwMCB9LAorICAgIHsgMHgwMzEzMDI2YiwgMHgwMzJiMDMxZCwgMHgwMDAgfSwKKyAgICB7IDB4MDU5YjA1OWIsIDB4MDU5YjA1OWIsIDB4MDAwIH0sCisgICAgeyAweDA1OWIwNTJjLCAweDA1OWIwNTliLCAweDAwMCB9LAorICAgIHsgMHgwM2E1MDU5YiwgMHgwNGEyMDMyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDQ4MTA0MzMsIDB4MDQyMzA1OWIsIDB4MDAwIH0sCisgICAgeyAweDA0YmIwNGVkLCAweDA0MjcwNGM4LCAweDAwMCB9LAorICAgIHsgMHgwNDMzMDRmNCwgMHgwMzNhMDM2NSwgMHgwMDAgfSwKKyAgICB7IDB4MDU5YjA1OWIsIDB4MDU5YjA1OWIsIDB4MDAwIH0sCisgICAgeyAweDA1OWIwNTliLCAweDA1OWIwNTliLCAweDAwMCB9LAorICAgIHsgMHgwNTliMDU5YiwgMHgwNWI5MDVhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDU5YjA1OWIsIDB4MDAwNzA1OWIsIDB4MDAwIH0sCisgICAgeyAweDA1OWIwNTliLCAweDA1OWIwNTliLCAweDAwMCB9LAorICAgIHsgMHgwNTliMDU5YiwgMHgwNTliMDU5YiwgMHgwMDAgfSwKKyAgICB7IDB4MDNlMzAzZDgsIDB4MDNmMzAzZjEsIDB4MDAwIH0sCisgICAgeyAweDAzZjkwM2Y1LCAweDAzZjcwM2ZiLCAweDAwMCB9LAorICAgIHsgMHgwNDA3MDQwMywgMHgwNDBmMDQwYiwgMHgwMDAgfSwKKyAgICB7IDB4MDQxNzA0MTMsIDB4MDQxZjA0MWIsIDB4MDAwIH0sCisgICAgeyAweDA1OWIwNTliLCAweDA1OWIwNTliLCAweDAwMCB9LAorICAgIHsgMHgwNTliMDU5YiwgMHgwNTliMDU5YiwgMHgwMDAgfSwKKyAgICB7IDB4MDU5YjA1OWIsIDB4MDU5YjA1OWIsIDB4MDAwIH0sCisgICAgeyAweDAwMDIwNjAwLCAweDA2MTkwMDA2LCAweDAwMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBSNjAwX3BmcF9taWNyb2NvZGVbXSA9IHsKKzB4ZDQwMDcxLAorMHhkNDAwNzIsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweDgwMDAwMywKKzB4Y2EwNDAwLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4YzQxODM4LAorMHhjYTI0MDAsCisweGNhMjgwMCwKKzB4OTU4MWE4LAorMHhjNDFjM2EsCisweGMzYzAwMCwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweDdjNzQ0YiwKKzB4YzIwMDA1LAorMHg5OWMwMDAsCisweGM0MWMzYSwKKzB4N2M3NDRjLAorMHhjMGZmZjAsCisweDA0MmMwNCwKKzB4MzA5MDAyLAorMHg3ZDI1MDAsCisweDM1MTQwMiwKKzB4N2QzNTBiLAorMHgyNTU0MDMsCisweDdjZDU4MCwKKzB4MjU5YzAzLAorMHg5NWMwMDQsCisweGQ1MDAxYiwKKzB4N2VkZGMxLAorMHg3ZDlkODAsCisweGQ2ODAxYiwKKzB4ZDU4MDFiLAorMHhkNDQwMWUsCisweGQ1NDAxZSwKKzB4ZDY0MDFlLAorMHhkNjgwMWUsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHg5NzgzZDQsCisweGQ1YzAxZSwKKzB4Y2EwODAwLAorMHg4MDAwMWIsCisweGNhMGMwMCwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweDgwMDAwZCwKKzB4YzQxODM4LAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ODAwMDBkLAorMHhjNDE4MzgsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2ExODAwLAorMHhkNDQwMWUsCisweGQ1ODAxZSwKKzB4ODAwMDU0LAorMHhkNDAwNzMsCisweGQ0NDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4ZDQ4MDE5LAorMHhkNGMwMTgsCisweGQ1MDAxNywKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweGQ1MDAxZSwKKzB4ZTIwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTA4MDAsCisweGQ0ODA2MCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDIsCisweGQ0ODAxZSwKKzB4Y2EwODAwLAorMHhkNDgwNjEsCisweGQ0NDAxZSwKKzB4ODAwMDAyLAorMHhkNDgwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhkNDQwMWUsCisweGQ0ODAxNiwKKzB4ZDRjMDE2LAorMHhkNDgwMWUsCisweDgwMDFiOSwKKzB4ZDRjMDFlLAorMHhjNjA4M2UsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5NDgwMDQsCisweGNhMTQwMCwKKzB4ZTQyMGYzLAorMHhkNDIwMTMsCisweGQ1NjA2NSwKKzB4ZDRlMDFjLAorMHhkNTIwMWMsCisweGQ1NjAxYywKKzB4ODAwMDAyLAorMHgwNjIwMDEsCisweGM2MDgzZSwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk0ODNmNywKKzB4Y2ExNDAwLAorMHhlNDIwZjMsCisweDgwMDA3YSwKKzB4ZDQyMDEzLAorMHhjNjA4M2UsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5ODgzZWYsCisweGNhMTQwMCwKKzB4ZDQwMDY0LAorMHg4MDAwOGUsCisweDAwMDAwMCwKKzB4YzQxNDMyLAorMHhjNjE4M2UsCisweGM0MDgyZiwKKzB4OTU0MDA1LAorMHhjNDBjMzAsCisweGQ0NDAxZSwKKzB4ODAwMDAyLAorMHhlZTAwMWUsCisweDk1ODNmNSwKKzB4YzQxMDMxLAorMHhkNDQwMzMsCisweGQ1MjA2NSwKKzB4ZDRhMDFjLAorMHhkNGUwMWMsCisweGQ1MjAxYywKKzB4ZDQwMDczLAorMHhlNDAxNWUsCisweGQ0MDAxZSwKKzB4ODAwMWI5LAorMHgwNjIwMDEsCisweDBhMjAwMSwKKzB4ZDYwMDc0LAorMHhjNDA4MzYsCisweGM2MTA0MCwKKzB4OTg4MDA3LAorMHhjYzM4MzUsCisweDk1MDEwZiwKKzB4ZDQwMDFmLAorMHhkNDYwNjIsCisweDgwMDAwMiwKKzB4ZDQyMDYyLAorMHhjYzE0MzMsCisweDg0MDFiYywKKzB4ZDQwMDcwLAorMHhkNTQwMWUsCisweDgwMDAwMiwKKzB4ZWUwMDFlLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4ZDRjMDFhLAorMHg4NDAxYmMsCisweGQ1MDAxYSwKKzB4Y2MwNDQzLAorMHgzNTEwMWYsCisweDJjOTQwMSwKKzB4N2QwOThiLAorMHg5ODQwMDUsCisweDdkMTVjYiwKKzB4ZDQwMDFhLAorMHg4MDAxYjksCisweGQ0MDA2ZCwKKzB4MzQ0NDAxLAorMHhjYzBjNDQsCisweDk4NDAzYSwKKzB4Y2MyYzQ2LAorMHg5NTgwMDQsCisweGNjMDQ0NSwKKzB4ODAwMWI5LAorMHhkNDAwMWEsCisweGQ0YzAxYSwKKzB4MjgyODAxLAorMHg4NDAwZjMsCisweGNjMTAwMywKKzB4OTg4MDFiLAorMHgwNDM4MGMsCisweDg0MDBmMywKKzB4Y2MxMDAzLAorMHg5ODgwMTcsCisweDA0MzgwOCwKKzB4ODQwMGYzLAorMHhjYzEwMDMsCisweDk4ODAxMywKKzB4MDQzODA0LAorMHg4NDAwZjMsCisweGNjMTAwMywKKzB4OTg4MDE0LAorMHhjYzEwNDcsCisweDlhODAwOSwKKzB4Y2MxNDQ4LAorMHg5ODQwZGEsCisweGQ0MDA2ZCwKKzB4Y2MxODQ0LAorMHhkNTAwMWEsCisweGQ1NDAxYSwKKzB4ODAwMGNjLAorMHhkNTgwMWEsCisweDk2YzBkMywKKzB4ZDQwMDZkLAorMHg4MDAxYjksCisweGQ0MDA2ZSwKKzB4OWFjMDAzLAorMHhkNDAwNmQsCisweGQ0MDA2ZSwKKzB4ODAwMDAyLAorMHhlYzAwN2YsCisweDlhYzBjYSwKKzB4ZDQwMDZkLAorMHg4MDAxYjksCisweGQ0MDA2ZSwKKzB4Y2MxNDAzLAorMHhjYzE4MDMsCisweGNjMWMwMywKKzB4N2Q5MTAzLAorMHg3ZGQ1ODMsCisweDdkMTkwYywKKzB4MzVjYzFmLAorMHgzNTcwMWYsCisweDdjZjBjYiwKKzB4N2NkMDhiLAorMHg4ODAwMDAsCisweDdlOGU4YiwKKzB4OTVjMDA0LAorMHhkNDAwNmUsCisweDgwMDFiOSwKKzB4ZDQwMDFhLAorMHhkNGMwMWEsCisweGNjMDgwMywKKzB4Y2MwYzAzLAorMHhjYzEwMDMsCisweGNjMTQwMywKKzB4Y2MxODAzLAorMHhjYzFjMDMsCisweGNjMjQwMywKKzB4Y2MyODAzLAorMHgzNWM0MWYsCisweDM2YjAxZiwKKzB4N2M3MDRiLAorMHgzNGYwMWYsCisweDdjNzA0YiwKKzB4MzU3MDFmLAorMHg3YzcwNGIsCisweDdkODg4MSwKKzB4N2RjY2MxLAorMHg3ZTUxMDEsCisweDdlOTU0MSwKKzB4N2M5MDgyLAorMHg3Y2Q0YzIsCisweDdjODQ4YiwKKzB4OWFjMDAzLAorMHg3YzhjOGIsCisweDJjODgwMSwKKzB4OTg4MDljLAorMHhkNDAwNmQsCisweDk4NDA5YSwKKzB4ZDQwMDZlLAorMHhjYzA4NDcsCisweGNjMGM0OCwKKzB4Y2MxMDQ0LAorMHhkNDgwMWEsCisweGQ0YzAxYSwKKzB4ODAwMTA0LAorMHhkNTAwMWEsCisweGNjMDgzMiwKKzB4ZDQwMDMyLAorMHg5NDgyZDgsCisweGNhMGMwMCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDIsCisweGQ0MDAxZSwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGQ0NDAxZSwKKzB4Y2ExNDAwLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ZDUwMDFlLAorMHhkNTQwMWUsCisweGQ1NDAzNCwKKzB4ODAwMDAyLAorMHhlZTAwMWUsCisweDI4MDQwNCwKKzB4ZTIwMDFhLAorMHhlMjAwMWEsCisweGQ0NDAxYSwKKzB4Y2EzODAwLAorMHhjYzA4MDMsCisweGNjMGMwMywKKzB4Y2MwYzAzLAorMHhjYzBjMDMsCisweDk4ODJiYywKKzB4MDAwMDAwLAorMHg4NDAxYmMsCisweGQ3ODA2ZiwKKzB4ODAwMDAyLAorMHhlZTAwMWYsCisweGNhMDQwMCwKKzB4YzJmZjAwLAorMHhjYzA4MzQsCisweGMxM2ZmZiwKKzB4N2M3NGNiLAorMHg3Y2M5MGIsCisweDdkMDEwZiwKKzB4OTkwMmFmLAorMHg3YzczOGIsCisweDg0MDFiYywKKzB4ZDc4MDZmLAorMHg4MDAwMDIsCisweGVlMDAxZiwKKzB4Y2EwODAwLAorMHgyODE5MDAsCisweDdkODk4YiwKKzB4OTU4MDE0LAorMHgyODE0MDQsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhjYTFjMDAsCisweGNhMjQwMCwKKzB4ZTIwMDFmLAorMHhkNGMwMWEsCisweGQ1MDAxYSwKKzB4ZDU0MDFhLAorMHhjYzE4MDMsCisweGNjMmMwMywKKzB4Y2MyYzAzLAorMHhjYzJjMDMsCisweDdkYTU4YiwKKzB4N2Q5YzQ3LAorMHg5ODQyOTYsCisweDAwMDAwMCwKKzB4ODAwMTY0LAorMHhkNGMwMWEsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHg4MDAwMDIsCisweGVlMDAxZSwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGNhMDgwMCwKKzB4MjQ4YzA2LAorMHgwY2NjMDYsCisweDk4YzAwNiwKKzB4Y2MxMDQ5LAorMHg5OTAwMDQsCisweGQ0MDA3MSwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHg4MDAwMDIsCisweGVlMDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweDM0ZDAxOCwKKzB4MjUxMDAxLAorMHg5NTAwMWYsCisweGMxN2ZmZiwKKzB4Y2ExMDAwLAorMHhjYTE0MDAsCisweGNhMTgwMCwKKzB4ZDQ4MDFkLAorMHhkNGMwMWQsCisweDdkYjE4YiwKKzB4YzE0MjAyLAorMHhjMmMwMDEsCisweGQ1ODAxZCwKKzB4MzRkYzBlLAorMHg3ZDVkNGMsCisweDdmNzM0YywKKzB4ZDc0MDFlLAorMHhkNTAwMWUsCisweGQ1NDAxZSwKKzB4YzE0MjAwLAorMHhjMmMwMDAsCisweDA5OWMwMSwKKzB4MzFkYzEwLAorMHg3ZjVmNGMsCisweDdmNzM0YywKKzB4N2Q4MzgwLAorMHhkNTgwNmYsCisweGQ1ODA2NiwKKzB4ZDc0MDFlLAorMHhlYzAwNWUsCisweGM4MjQwMiwKKzB4ODAwMWI5LAorMHhkNjAwNzQsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweDgwMDAwMiwKKzB4ZWUwMDFlLAorMHg4MDAwMDIsCisweGVlMDAxZiwKKzB4ZDQwMDFmLAorMHg4MDAwMDIsCisweGQ0MDAxZiwKKzB4ZDQwMDFmLAorMHg4ODAwMDAsCisweGQ0MDAxZiwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAxMDE3NCwKKzB4MDIwMTdiLAorMHgwMzAwOTAsCisweDA0MDA4MCwKKzB4MDUwMDA1LAorMHgwNjAwNDAsCisweDA3MDAzMywKKzB4MDgwMTJmLAorMHgwOTAwNDcsCisweDBhMDAzNywKKzB4MTAwMWI3LAorMHgxNzAwYTQsCisweDIyMDEzZCwKKzB4MjMwMTRjLAorMHgyMDAwYjUsCisweDI0MDEyOCwKKzB4MjcwMDRlLAorMHgyODAwNmIsCisweDJhMDA2MSwKKzB4MmIwMDUzLAorMHgyZjAwNjYsCisweDMyMDA4OCwKKzB4MzQwMTgyLAorMHgzYzAxNTksCisweDNmMDA3MywKKzB4NDEwMThmLAorMHg0NDAxMzEsCisweDU1MDE3NiwKKzB4NTYwMTdkLAorMHg2MDAwMGMsCisweDYxMDAzNSwKKzB4NjIwMDM5LAorMHg2MzAwMzksCisweDY0MDAzOSwKKzB4NjUwMDM5LAorMHg2NjAwMzksCisweDY3MDAzOSwKKzB4NjgwMDNiLAorMHg2OTAwNDIsCisweDZhMDA0OSwKKzB4NmIwMDQ5LAorMHg2YzAwNDksCisweDZkMDA0OSwKKzB4NmUwMDQ5LAorMHg2ZjAwNDksCisweDczMDFiNywKKzB4MDAwMDA3LAorMHgwMDAwMDcsCisweDAwMDAwNywKKzB4MDAwMDA3LAorMHgwMDAwMDcsCisweDAwMDAwNywKKzB4MDAwMDA3LAorMHgwMDAwMDcsCisweDAwMDAwNywKKzB4MDAwMDA3LAorMHgwMDAwMDcsCisweDAwMDAwNywKKzB4MDAwMDA3LAorMHgwMDAwMDcsCisweDAwMDAwNywKKzB4MDAwMDA3LAorMHgwMDAwMDcsCisweDAwMDAwNywKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY2MTBfY3BfbWljcm9jb2RlW11bM10gPSB7CisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODQ2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjMxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDBmMDAsIDB4MDAyODE2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4OGQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMTggfSwKKyAgICB7IDB4MDA0MTIwMDAsIDB4MDA0MDQ4MTEsIDB4MDE5IH0sCisgICAgeyAweDAwNDIyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDkwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMTE2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIxMWEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyODFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTE0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZjLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIyMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDIwMDAwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIxMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjIwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwMzggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDM1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDAzNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA5LCAweDAwNDAxMjJkLCAweDA0NiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzZSB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDQwMWMxMSwgMHgwNDEgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODFhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjExYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2M3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODEyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxNDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwNGIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmODAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EyYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwNWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDVlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDA2MiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBiLCAweDAwNDAxMjJkLCAweDA2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MTYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMxNjI1LCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYTMsIDB4MDAwIH0sCisgICAgeyAweDNmZmZmYzAwLCAweDAwMjkwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDZkIH0sCisgICAgeyAweDAwMDAwMTAwLCAweDAwNDAxYzExLCAweDA3MCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmMGZmLCAweDAwMjgxYTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAyOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDE4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgzZmZmZmZmZiwgMHgwMDI4NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyOTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4MyB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4NCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwOGEgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjVjIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOGQgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4YzA0MDM2MjAsIDB4MDkzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOTAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5MiB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOTggfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwYTAgfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDlkIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5ZiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOWYgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZjAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhNyB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhYSB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBlMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDdmLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGUxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDI3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDBiMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWUzMCwgMHgwMDAgfSwKKyAgICB7IDB4OTk4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxY2U0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNywgMHgxMmYgfSwKKyAgICB7IDB4OWIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHg5YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzE0NmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDNjMDUsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDA3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGNiIH0sCisgICAgeyAweDAwZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg5ODAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwZGMgfSwKKyAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGEwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwZGEgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDUgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNCB9LAorICAgIHsgMHgwMDAwM2YwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKKyAgICB7IDB4MDAwMDFmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCisgICAgeyAweDAwMDAwZjAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDM4MDAwOSwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4M2YwMDAwMDAsIDB4MDAyODBlMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDQ5NGEyMywgMHgwZGMgfSwKKyAgICB7IDB4MDAzODBmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDY4MDAwMDA3LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMjAyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMGZmMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwODMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MGViIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2NSB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMjBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMTAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGVmLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwZjggfSwKKyAgICB7IDB4MDAwMDAwMGIsIDB4MDAyMTAyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmOCB9LAorICAgIHsgMHgwMDAwMDQwMCwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZmQgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTBiIH0sCisgICAgeyAweDAwMDBhMzBmLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNyB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwYSB9LAorICAgIHsgMHgwMDAwMDBmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDJjNDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTEyIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMjRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwNDI0YTIwLCAweDExNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDEwMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxMWIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxMjI0LCAweDExNyB9LAorICAgIHsgMHhmZmJmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEyZSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjIwZTMwLCAweDAwMCB9LAorICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMGUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDA3ZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY4YyB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHgxMzUgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MTNjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MTQ2MSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE4ODIsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTQ3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzA2ODFhMjAsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTU4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDBhMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOGYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMWUyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MDQ4ZWIsIDB4MTljIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMzMDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAzMDI0MDksIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgxODEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDE4NiB9LAorICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MTgyIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHgxOTcgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc4MDQyYSwgMHgyZmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDksIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNzQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTk0IH0sCisgICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDQ2MDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxOWIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDgxMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWUzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhmZmZiZmYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAxMDAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwNjIxZTI4LCAweDEyZiB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDgyMjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMmMwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwNjAwZTJkLCAweDFiZCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKKyAgICB7IDB4MDAwMGMwMDgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxYjkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgzOTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMmUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYjBkNjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMTA2MmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODIyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMjYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjI2MjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZTAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDgxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDgwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZDggfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjgwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MmEyYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MWQxIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDMwNGEyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMWUyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWU1IH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDE4MTEsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWY4IH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjI4LCAweDAwMCB9LAorICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUwMywgMHgyMDUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTI0LCAweDIwNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMTRjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDIwMDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAyNDA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjhjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmIxNDA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDkwMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDI5NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTFhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE0NjUsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxOSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDA0MGYsIDB4MjEzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDUgfSwKKyAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOWMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyMzIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDIzNiB9LAorICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDIzNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyMzMgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzEgfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDQwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjRjIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDA4MDEwMSwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDI1MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyN2MgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjExZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyNmEgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWMyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjVmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjYyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzQ3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNjcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNmEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJjMSB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcxIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNDA0ODExLCAweDI3NiB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3NSB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDQwNDgxMSwgMHgyNzYgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmU5IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyNTYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzA4ODFhMjAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3MDAwLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjIxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4MjkyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDY5MWNlMiwgMHgxMmYgfSwKKyAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDI5ZCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDA0MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweGMwMjIwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4YzA0MDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YTEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmQ5IH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZDkgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2OCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwODAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzODA4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAwODQxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzMTggfSwKKyAgICB7IDB4ZmZmZmZmZWYsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4YzA0ODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQ1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDQwMzA0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHhjMDMwNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzBhMjIsIDB4MzRiIH0sCisgICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzNTQgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2NCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwMiwgMHgzNmUgfSwKKyAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzZhIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZiB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWMwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgzNWYgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDQ5LCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNzAgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4Mzg2IH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYjEgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNiNSB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzljIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTggfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhOCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzkwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDgwMDAwMDAsIDB4MDAyOTBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwODAwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweGMwMjIxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5MiB9LAorICAgIHsgMHgwMDAwMjEwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5ZSB9LAorICAgIHsgMHgwMDAwMjEwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzYWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNjZSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzYzAgfSwKKyAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4YmFiZWNhZmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNzAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2QzIH0sCisgICAgeyAweDhjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDQwMDAwMDAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDE4MDAsIDB4M2U0IH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNiwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZTcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDFjMDAsIDB4M2VhIH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNywgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjBjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTQ4ZTgsIDB4MDAwIH0sCisgICAgeyAweGE1ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweGMwMjEwMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZjcgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDQ4MTIyMCwgMHgzZmYgfSwKKyAgICB7IDB4YTc4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDg4MywgMHgwMDAgfSwKKyAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHhhOTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGFiODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YWQ4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhiMzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYzZmMsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGFmODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YjE4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMTE4MjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDIxOGEwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAzMThjMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNDE4ZjhlMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDUxOGY4ODAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA2MThlMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNzE4ZjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDgxOGYzZmMsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDI5MGM0MCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4ODYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAorICAgIHsgMHg4NTAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMDIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDQ1IH0sCisgICAgeyAweDAwODAwMDAwLCAweGMwNDk0YTIwLCAweDQ0NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDIsIDB4NDRiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NTkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDIwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDI4MGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ2MSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI0LCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0NjYgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA1LCAweDY5MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjRmMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyODBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA0ZTAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJlMDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0ODYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGUwMDAwMCwgMHg0ODYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjEwYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0OTAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ5OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwOCwgMHg0NTkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHg0MDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDRhMyB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHhjMDQ5NGEyMCwgMHg0YTQgfSwKKyAgICB7IDB4ZmZmYmZmZmYsIDB4YzAyODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YjAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRhYyB9LAorICAgIHsgMHhhMDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YWEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjMyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjkyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRjNyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjZSB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGQwIH0sCisgICAgeyAweDAwMDAyMTgwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NTAwIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgxOGUwMGMxMSwgMHg0ZWYgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDhjMDQ4MDAsIDB4NGUzIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGM4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YWEgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTA1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweGI1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiNzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiYTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGJiMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YmMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmM2ZjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGZmLCAweDAwMjgwZTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTE5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MmUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmZlMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweGYxZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHhjMDIyMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4NDAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDg3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDlkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHg0MDIxNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4OTYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMjIyMywgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDE0YTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMWEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MTAwMDAwMDAsIDB4MDAyODFhMjYsIDB4MDAwIH0sCisgICAgeyAweGVmZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5MzhjZSwgMHg2N2IgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4NDAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDMwMCwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDU2NiB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAyMDAwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1N2MgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2ZSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTcyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1N2MgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU3YSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjkyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAxYzEwLCAweDU3YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDU3ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU4ZiB9LAorICAgIHsgMHgwMDAwYTJiNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMmM0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NThkIH0sCisgICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWEwIH0sCisgICAgeyAweDAwMDBhMmJiLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiYSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEyYzUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OWUgfSwKKyAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YjEgfSwKKyAgICB7IDB4MDAwMGEyYmYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJlLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwYTJjNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDVhZiB9LAorICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwYTJjNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDViZSB9LAorICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4ODUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMzA0YSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDEwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDVjNCB9LAorICAgIHsgMHhhNDAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDVjOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVkMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDA0MDM2MjEsIDB4NWUzIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDVlMyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDkyLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwOTMsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDMyLCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDM1LCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJjMiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJjIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJjIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdlMDAsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MDUgfSwKKyAgICB7IDB4MDAwMGEwOTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMxLCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTA5MywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmI2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYmEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM0LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJiZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmMyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMWZmLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MGUgfSwKKyAgICB7IDB4MDAwNGEwMDMsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDAzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYxMyB9LAorICAgIHsgMHgwMDA0YTAxMCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyYiB9LAorICAgIHsgMHgwMDA0YTAxMSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxMiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxMywgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNywgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDA2MmQsIDB4MDAwIH0sCisgICAgeyAweGZmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwZWUwMDAwMCwgMHg2M2QgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjNiIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAxMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjOSB9LAorICAgIHsgMHg5ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDY0MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4OTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDQ4MTEsIDB4NjJkIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDYyZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NWMgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDk4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDY1NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjkxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZiLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjkxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmY3LCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAxODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjhjIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwNDA0YzExLCAweDY3MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MzhjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMzAxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA2NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NjhiIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyMiwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDQwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhYzAwMDAwLCAweDY4ZCB9LAorICAgIHsgMHg5ZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhZTAwMDAwLCAweDY5MCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjkyIH0sCisgICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4Njk1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAxNDIwNTAyLCAweDA1YzAwMjUwLCAweDAwMCB9LAorICAgIHsgMHgwMWMzMDE2OCwgMHgwNDNmMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDIyNTAyMDksIDB4MDI1MDAxNTEsIDB4MDAwIH0sCisgICAgeyAweDAyMjMwMjQ1LCAweDAyYTAwMjQxLCAweDAwMCB9LAorICAgIHsgMHgwM2Q3MDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDY0OTA2NGEsIDB4MDMxZjA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWM1LCAweDAzMjAwMzQwLCAweDAwMCB9LAorICAgIHsgMHgwMzJhMDI4MiwgMHgwMzQyMDMzNCwgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNTUxLCAweDA1YzAwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwM2JhMDVjMCwgMHgwNGJiMDM0NCwgMHgwMDAgfSwKKyAgICB7IDB4MDQ5YTA0NTAsIDB4MDQzZDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA0ZDAwNWMwLCAweDA0NDEwNGRkLCAweDAwMCB9LAorICAgIHsgMHgwNDUwMDUwNywgMHgwMzUxMDM3NSwgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjMCwgMHgwNjNmMDVjNywgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDAwNzA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDNmODAzZWQsIDB4MDQwODA0MDYsIDB4MDAwIH0sCisgICAgeyAweDA0MGUwNDBhLCAweDA0MGMwNDEwLCAweDAwMCB9LAorICAgIHsgMHgwNDFjMDQxOCwgMHgwNDI0MDQyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDQyYzA0MjgsIDB4MDQzNDA0MzAsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDA0MzgwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDIwNjc5LCAweDA2OTcwMDA2LCAweDAwMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBSVjYxMF9wZnBfbWljcm9jb2RlW10gPSB7CisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweDdjMDM4YiwKKzB4ODAwMWI4LAorMHg3YzAzOGIsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjNDE4MzgsCisweGNhMjQwMCwKKzB4Y2EyODAwLAorMHg5NTgxYTgsCisweGM0MWMzYSwKKzB4YzNjMDAwLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4N2M3NDRiLAorMHhjMjAwMDUsCisweDk5YzAwMCwKKzB4YzQxYzNhLAorMHg3Yzc0NGMsCisweGMwZmZmMCwKKzB4MDQyYzA0LAorMHgzMDkwMDIsCisweDdkMjUwMCwKKzB4MzUxNDAyLAorMHg3ZDM1MGIsCisweDI1NTQwMywKKzB4N2NkNTgwLAorMHgyNTljMDMsCisweDk1YzAwNCwKKzB4ZDUwMDFiLAorMHg3ZWRkYzEsCisweDdkOWQ4MCwKKzB4ZDY4MDFiLAorMHhkNTgwMWIsCisweGQ0NDAxZSwKKzB4ZDU0MDFlLAorMHhkNjQwMWUsCisweGQ2ODAxZSwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweDk3ODNkMywKKzB4ZDVjMDFlLAorMHhjYTA4MDAsCisweDgwMDAxYSwKKzB4Y2EwYzAwLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ODAwMDBjLAorMHhjNDE4MzgsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHg4MDAwMGMsCisweGM0MTgzOCwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTE4MDAsCisweGQ0NDAxZSwKKzB4ZDU4MDFlLAorMHg4MDAwNTMsCisweGQ0MDA3NSwKKzB4ZDQ0MDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhkNDgwMTksCisweGQ0YzAxOCwKKzB4ZDUwMDE3LAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ZDUwMDFlLAorMHhlMjAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGNhMDgwMCwKKzB4ZDQ4MDYwLAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZDQ4MDFlLAorMHhjYTA4MDAsCisweGQ0ODA2MSwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGQ0ODAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGQ0NDAxZSwKKzB4ZDQ4MDE2LAorMHhkNGMwMTYsCisweGQ0ODAxZSwKKzB4ODAwMWI4LAorMHhkNGMwMWUsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk0ODAwNCwKKzB4Y2ExNDAwLAorMHhlNDIwZjMsCisweGQ0MjAxMywKKzB4ZDU2MDY1LAorMHhkNGUwMWMsCisweGQ1MjAxYywKKzB4ZDU2MDFjLAorMHg4MDAwMDAsCisweDA2MjAwMSwKKzB4YzYwODQzLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4OTQ4M2Y3LAorMHhjYTE0MDAsCisweGU0MjBmMywKKzB4ODAwMDc5LAorMHhkNDIwMTMsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk4ODNlZiwKKzB4Y2ExNDAwLAorMHhkNDAwNjQsCisweDgwMDA4ZCwKKzB4MDAwMDAwLAorMHhjNDE0MzIsCisweGM2MTg0MywKKzB4YzQwODJmLAorMHg5NTQwMDUsCisweGM0MGMzMCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4OTU4M2Y1LAorMHhjNDEwMzEsCisweGQ0NDAzMywKKzB4ZDUyMDY1LAorMHhkNGEwMWMsCisweGQ0ZTAxYywKKzB4ZDUyMDFjLAorMHhlNDAxNWUsCisweGQ0MDAxZSwKKzB4ODAwMDAwLAorMHgwNjIwMDEsCisweGNhMTgwMCwKKzB4MGEyMDAxLAorMHhkNjAwNzYsCisweGM0MDgzNiwKKzB4OTg4MDA3LAorMHhjNjEwNDUsCisweDk1MDExMCwKKzB4ZDQwMDFmLAorMHhkNDYwNjIsCisweDgwMDAwMCwKKzB4ZDQyMDYyLAorMHhjYzM4MzUsCisweGNjMTQzMywKKzB4ODQwMWJiLAorMHhkNDAwNzIsCisweGQ1NDAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGUyMDAxYSwKKzB4ODQwMWJiLAorMHhlMjAwMWEsCisweGNjMTA0YiwKKzB4Y2MwNDQ3LAorMHgyYzk0MDEsCisweDdkMDk4YiwKKzB4OTg0MDA1LAorMHg3ZDE1Y2IsCisweGQ0MDAxYSwKKzB4ODAwMWI4LAorMHhkNDAwNmQsCisweDM0NDQwMSwKKzB4Y2MwYzQ4LAorMHg5ODQwM2EsCisweGNjMmM0YSwKKzB4OTU4MDA0LAorMHhjYzA0NDksCisweDgwMDFiOCwKKzB4ZDQwMDFhLAorMHhkNGMwMWEsCisweDI4MjgwMSwKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxYiwKKzB4MDQzODBjLAorMHg4NDAwZjAsCisweGNjMTAwMywKKzB4OTg4MDE3LAorMHgwNDM4MDgsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMTMsCisweDA0MzgwNCwKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxNCwKKzB4Y2MxMDRjLAorMHg5YTgwMDksCisweGNjMTQ0ZCwKKzB4OTg0MGRjLAorMHhkNDAwNmQsCisweGNjMTg0OCwKKzB4ZDUwMDFhLAorMHhkNTQwMWEsCisweDgwMDBjOSwKKzB4ZDU4MDFhLAorMHg5NmMwZDUsCisweGQ0MDA2ZCwKKzB4ODAwMWI4LAorMHhkNDAwNmUsCisweDlhYzAwMywKKzB4ZDQwMDZkLAorMHhkNDAwNmUsCisweDgwMDAwMCwKKzB4ZWMwMDdmLAorMHg5YWMwY2MsCisweGQ0MDA2ZCwKKzB4ODAwMWI4LAorMHhkNDAwNmUsCisweGNjMTQwMywKKzB4Y2MxODAzLAorMHhjYzFjMDMsCisweDdkOTEwMywKKzB4N2RkNTgzLAorMHg3ZDE5MGMsCisweDM1Y2MxZiwKKzB4MzU3MDFmLAorMHg3Y2YwY2IsCisweDdjZDA4YiwKKzB4ODgwMDAwLAorMHg3ZThlOGIsCisweDk1YzAwNCwKKzB4ZDQwMDZlLAorMHg4MDAxYjgsCisweGQ0MDAxYSwKKzB4ZDRjMDFhLAorMHhjYzA4MDMsCisweGNjMGMwMywKKzB4Y2MxMDAzLAorMHhjYzE0MDMsCisweGNjMTgwMywKKzB4Y2MxYzAzLAorMHhjYzI0MDMsCisweGNjMjgwMywKKzB4MzVjNDFmLAorMHgzNmIwMWYsCisweDdjNzA0YiwKKzB4MzRmMDFmLAorMHg3YzcwNGIsCisweDM1NzAxZiwKKzB4N2M3MDRiLAorMHg3ZDg4ODEsCisweDdkY2NjMSwKKzB4N2U1MTAxLAorMHg3ZTk1NDEsCisweDdjOTA4MiwKKzB4N2NkNGMyLAorMHg3Yzg0OGIsCisweDlhYzAwMywKKzB4N2M4YzhiLAorMHgyYzg4MDEsCisweDk4ODA5ZSwKKzB4ZDQwMDZkLAorMHg5ODQwOWMsCisweGQ0MDA2ZSwKKzB4Y2MwODRjLAorMHhjYzBjNGQsCisweGNjMTA0OCwKKzB4ZDQ4MDFhLAorMHhkNGMwMWEsCisweDgwMDEwMSwKKzB4ZDUwMDFhLAorMHhjYzA4MzIsCisweGQ0MDAzMiwKKzB4OTQ4MmQ5LAorMHhjYTBjMDAsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhkNDAwMWUsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhkNDQwMWUsCisweGNhMTQwMCwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweGQ1MDAxZSwKKzB4ZDU0MDFlLAorMHhkNTQwMzQsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHgyODA0MDQsCisweGUyMDAxYSwKKzB4ZTIwMDFhLAorMHhkNDQwMWEsCisweGNhMzgwMCwKKzB4Y2MwODAzLAorMHhjYzBjMDMsCisweGNjMGMwMywKKzB4Y2MwYzAzLAorMHg5ODgyYmQsCisweDAwMDAwMCwKKzB4ODQwMWJiLAorMHhkN2EwNmYsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhjYTA0MDAsCisweGMyZmYwMCwKKzB4Y2MwODM0LAorMHhjMTNmZmYsCisweDdjNzRjYiwKKzB4N2NjOTBiLAorMHg3ZDAxMGYsCisweDk5MDJiMCwKKzB4N2M3MzhiLAorMHg4NDAxYmIsCisweGQ3YTA2ZiwKKzB4ODAwMDAwLAorMHhlZTAwMWYsCisweGNhMDgwMCwKKzB4MjgxOTAwLAorMHg3ZDg5OGIsCisweDk1ODAxNCwKKzB4MjgxNDA0LAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4Y2ExYzAwLAorMHhjYTI0MDAsCisweGUyMDAxZiwKKzB4ZDRjMDFhLAorMHhkNTAwMWEsCisweGQ1NDAxYSwKKzB4Y2MxODAzLAorMHhjYzJjMDMsCisweGNjMmMwMywKKzB4Y2MyYzAzLAorMHg3ZGE1OGIsCisweDdkOWM0NywKKzB4OTg0Mjk3LAorMHgwMDAwMDAsCisweDgwMDE2MSwKKzB4ZDRjMDFhLAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTA4MDAsCisweDI0OGMwNiwKKzB4MGNjYzA2LAorMHg5OGMwMDYsCisweGNjMTA0ZSwKKzB4OTkwMDA0LAorMHhkNDAwNzMsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHgzNGQwMTgsCisweDI1MTAwMSwKKzB4OTUwMDIxLAorMHhjMTdmZmYsCisweGNhMTAwMCwKKzB4Y2ExNDAwLAorMHhjYTE4MDAsCisweGQ0ODAxZCwKKzB4ZDRjMDFkLAorMHg3ZGIxOGIsCisweGMxNDIwMiwKKzB4YzJjMDAxLAorMHhkNTgwMWQsCisweDM0ZGMwZSwKKzB4N2Q1ZDRjLAorMHg3ZjczNGMsCisweGQ3NDAxZSwKKzB4ZDUwMDFlLAorMHhkNTQwMWUsCisweGMxNDIwMCwKKzB4YzJjMDAwLAorMHgwOTljMDEsCisweDMxZGMxMCwKKzB4N2Y1ZjRjLAorMHg3ZjczNGMsCisweDA0MjgwMiwKKzB4N2Q4MzgwLAorMHhkNWE4NmYsCisweGQ1ODA2NiwKKzB4ZDc0MDFlLAorMHhlYzAwNWUsCisweGM4MjQwMiwKKzB4YzgyNDAyLAorMHg4MDAxYjgsCisweGQ2MDA3NiwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhkNDAwMWYsCisweDgwMDAwMCwKKzB4ZDQwMDFmLAorMHhkNDAwMWYsCisweDg4MDAwMCwKKzB4ZDQwMDFmLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMTAxNzEsCisweDAyMDE3OCwKKzB4MDMwMDhmLAorMHgwNDAwN2YsCisweDA1MDAwMywKKzB4MDYwMDNmLAorMHgwNzAwMzIsCisweDA4MDEyYywKKzB4MDkwMDQ2LAorMHgwYTAwMzYsCisweDEwMDFiNiwKKzB4MTcwMGEyLAorMHgyMjAxM2EsCisweDIzMDE0OSwKKzB4MjAwMGI0LAorMHgyNDAxMjUsCisweDI3MDA0ZCwKKzB4MjgwMDZhLAorMHgyYTAwNjAsCisweDJiMDA1MiwKKzB4MmYwMDY1LAorMHgzMjAwODcsCisweDM0MDE3ZiwKKzB4M2MwMTU2LAorMHgzZjAwNzIsCisweDQxMDE4YywKKzB4NDQwMTJlLAorMHg1NTAxNzMsCisweDU2MDE3YSwKKzB4NjAwMDBiLAorMHg2MTAwMzQsCisweDYyMDAzOCwKKzB4NjMwMDM4LAorMHg2NDAwMzgsCisweDY1MDAzOCwKKzB4NjYwMDM4LAorMHg2NzAwMzgsCisweDY4MDAzYSwKKzB4NjkwMDQxLAorMHg2YTAwNDgsCisweDZiMDA0OCwKKzB4NmMwMDQ4LAorMHg2ZDAwNDgsCisweDZlMDA0OCwKKzB4NmYwMDQ4LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCit9OworCitzdGF0aWMgY29uc3QgdTMyIFJWNjIwX2NwX21pY3JvY29kZVtdWzNdID0geworICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjg0NjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMTAwMDAsIDB4YzAyOTQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwZjAwLCAweDAwMjgxNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDhkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDE4IH0sCisgICAgeyAweDAwNDEyMDAwLCAweDAwNDA0ODExLCAweDAxOSB9LAorICAgIHsgMHgwMDQyMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHg5MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjExNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMTFhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjgxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2ExNDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmYywgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHgyMDAwMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIyMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDM4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDAzNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwMzcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOSwgMHgwMDQwMTIyZCwgMHgwNDYgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwM2UgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA0MDFjMTEsIDB4MDQxIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDdmYzAwMDAwLCAweDAwMjgxYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNjNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgxMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMTQwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDRiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjkwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZjgwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMmMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMmIsIDB4MDAwIH0sCisgICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNjEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDVmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA1ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYiwgMHgwMDQwMTIyZCwgMHgwNmEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODE2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2EzLCAweDAwMCB9LAorICAgIHsgMHgzZmZmZmMwMCwgMHgwMDI5MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2ZCB9LAorICAgIHsgMHgwMDAwMDEwMCwgMHgwMDQwMWMxMSwgMHgwNzAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGYwLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjBmZiwgMHgwMDI4MWEzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGU2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAxOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4M2ZmZmZmZmYsIDB4MDAyODRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjkxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODMgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGE0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDhhIH0sCisgICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwOGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjY4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1YyB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDhkIH0sCisgICAgeyAweDAwMDAwMDEyLCAweGMwNDAzNjIwLCAweDA5MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDkwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5MiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOTIgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDk4IH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MGEwIH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDllIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5ZCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOWYgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCisgICAgeyAweDAwM2YwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjEwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYTcgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYWEgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjEwZTJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA3ZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwYjMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCisgICAgeyAweDk5ODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MWNlNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDcsIDB4MTJmIH0sCisgICAgeyAweDliMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4OWMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMxNDZmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAzYzA1LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBjYiB9LAorICAgIHsgMHgwMGY4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OTgwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4MGRjIH0sCisgICAgeyAweDAwMDAwMGYwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBhMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MGRhIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ1IH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDQgfSwKKyAgICB7IDB4MDAwMDNmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCisgICAgeyAweDAwMDAxZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAorICAgIHsgMHgwMDAwMGYwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAzODAwMDksIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDNmMDAwMDAwLCAweDAwMjgwZTJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDA0OTRhMjMsIDB4MGRjIH0sCisgICAgeyAweDAwMzgwZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg2ODAwMDAwNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTIwMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDBmZjAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDgwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDgzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZWEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjYyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDBlYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjUgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjIwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDEwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBlZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MGY4IH0sCisgICAgeyAweDAwMDAwMDBiLCAweDAwMjEwMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZjggfSwKKyAgICB7IDB4MDAwMDA0MDAsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGZkIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEwYiB9LAorICAgIHsgMHgwMDAwYTMwZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDQgfSwKKyAgICB7IDB4ZmZmZmZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDcgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMGEgfSwKKyAgICB7IDB4MDAwMDAwZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAyYzQwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDExMiB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDQwMjI0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDQyNGEyMCwgMHgxMTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjAxMDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTFiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMTIyNCwgMHgxMTcgfSwKKyAgICB7IDB4ZmZiZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMmUgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyMGUzMCwgMHgwMDAgfSwKKyAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDBlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwN2Y4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2OGMgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4MTM1IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDEzYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDE0NjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzQxODgyLCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE0NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwNjgxYTIwLCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE1OCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzAwYTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MThmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjFlMjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzA0OGViLCAweDE5YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4NDAzMzA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMzAyNDA5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MTgxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgxODYgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxODYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDE4MiB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4MTk3IH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3ODA0MmEsIDB4MmZiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODA5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTc0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE5NCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHg0NjAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTliIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzA4MTFhMjAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmYmZmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMTAwLCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDYyMWUyOCwgMHgxMmYgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA4MjIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDJjMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCisgICAgeyAweDAwMDBjMDA4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MWI5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4MzkwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDJlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2IwZDYzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAxMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjEwNjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgyMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTI2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYyNjI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWUwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA4MSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA4MCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFkYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWQ4IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODJhMmEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDFkMSB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAzMDRhMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDFlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFlNSB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAxODExLCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFmOCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyOCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyMywgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MDMsIDB4MjA1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUyNCwgMHgyMDUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDE0YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyMDAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMjQwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY4YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJiMTQwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA5MDE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyOTRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzQxNDY1LCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTkgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQ1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwNDBmLCAweDIxMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQ1IH0sCisgICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTljIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjMyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyMzYgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyMzYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjMzIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDJmYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjMxIH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDI0YyB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwODAxMDEsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyNTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjdjIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MjZhIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI1ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjExZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWM0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjY3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjZhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYzEgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MSB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzUgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlOSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjU2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwODgxYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNzAwMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJhLCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDI5MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2OTFjZTIsIDB4MTJmIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyOWQgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwNDAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHhjMDIyMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGExMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2UzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2U0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkOSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmQ5IH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjVmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDgwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2ExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzgwOGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDg0MSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MzE4IH0sCisgICAgeyAweGZmZmZmZmVmLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweGMwNDg0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDQwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMwNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4YzAzMDRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwYTIyLCAweDM0YiB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzU0IH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNjQgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDIsIDB4MzZlIH0sCisgICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2YSB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgzNWYgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVjMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MzVmIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAzNjI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA0OSwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzcwIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwODAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM4NiB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2IxIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYjUgfSwKKyAgICB7IDB4MDAwMDAwMjAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM5YyB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2E4IH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTggfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM5MCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDA4MDAwMDAwLCAweDAwMjkwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDgwMDAwLCAweDAwMjgxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHhjMDIyMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAzLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzOTIgfSwKKyAgICB7IDB4MDAwMDIxMGUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzOWUgfSwKKyAgICB7IDB4MDAwMDIxMDgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDgwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2FlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzY2UgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2MwIH0sCisgICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweGJhYmVjYWZlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTcwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNkMyB9LAorICAgIHsgMHg4YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4NDAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDgwMDAwMDAwLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHg0MDAwMDAwMCwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4M2UxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAxODAwLCAweDNlNCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHhjMDI4MWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjYsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4M2U3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAxYzAwLCAweDNlYSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHhjMDI4MWUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjcsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyODIwYzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDk0OGU4LCAweDAwMCB9LAorICAgIHsgMHhhNTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDQwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHhjMDIxMDIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2Y3IH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzA0ODEyMjAsIDB4M2ZmIH0sCisgICAgeyAweGE3ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ODMsIDB4MDAwIH0sCisgICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4YTk4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBjMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhhYjgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ZTAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGFkODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjg4MCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YjM4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmM2ZjLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhhZjgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGIxODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTQ4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4NDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFkMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDExODIwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAyMThhMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMzE4YzAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDQxOGY4ZTAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA1MThmODgwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNjE4ZTAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDcxOGYwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA4MThmM2ZjLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyOTBjNDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDg2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4ODUwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMTAyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ0NSB9LAorICAgIHsgMHgwMDgwMDAwMCwgMHhjMDQ5NGEyMCwgMHg0NDYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzAyLCAweDQ0YiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDU5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAyMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyODBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NjEgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNCwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDY2IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNSwgMHg2OTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyODI0ZjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjgwYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDZkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNGUwMDAwMCwgMHg0ODYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NzIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAyZTAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDdjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhlMDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDkwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0OTkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDgsIDB4NDU5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4NDAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDQwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YTMgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4YzA0OTRhMjAsIDB4NGE0IH0sCisgICAgeyAweGZmZmJmZmZmLCAweGMwMjg0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGIwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0YWMgfSwKKyAgICB7IDB4YTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZiLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGFhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0YzMgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDY5MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YzcgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0Y2UgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRkMCB9LAorICAgIHsgMHgwMDAwMjE4MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDMzM2UyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDUwMCB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MThlMDBjMTEsIDB4NGVmIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ4YzA0ODAwLCAweDRlMyB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyZCwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjODMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGFhIH0sCisgICAgeyAweDAwMDAwMDJjLCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyZCwgMHhjMDQwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDUwNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHhiNTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBjMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI5MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjg4MCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YmEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiYjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGJjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjNmYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBmZiwgMHgwMDI4MGUzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDUxOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTJlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZTAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHhmMWZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4YzAyMjBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJhLCAweDQwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHg4NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHg5ZDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4NDAyMTRhMjAsIDB4MDAwIH0sCisgICAgeyAweDk2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMTYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjIyMjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmMDAwLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjExZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjE2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAxNGE4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTFhMjQsIDB4MDAwIH0sCisgICAgeyAweDEwMDAwMDAwLCAweDAwMjgxYTI2LCAweDAwMCB9LAorICAgIHsgMHhlZmZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTM4Y2UsIDB4NjdiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDQwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAzMDAsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjExMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1NjYgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1OCwgMHgwMDMwMGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjhkIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMjAwMDAsIDB4MDAyOTRhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTdjIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NmUgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1OCwgMHgwMDMwMGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU3MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTdjIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1N2EgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDY5MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMWMxMCwgMHg1N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwZWUwMDAwMCwgMHg1N2UgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWM5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1OGYgfSwKKyAgICB7IDB4MDAwMGEyYjcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmI2LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwYTJjNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU4ZCB9LAorICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVhMCB9LAorICAgIHsgMHgwMDAwYTJiYiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYmEsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMmM1LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NTllIH0sCisgICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWIxIH0sCisgICAgeyAweDAwMDBhMmJmLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiZSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEyYzYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1YWYgfSwKKyAgICB7IDB4MDAwMGEyZDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmMzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJjMiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEyYzcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1YmUgfSwKKyAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDg1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDMwNGEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAxMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg1YzQgfSwKKyAgICB7IDB4YTQwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg1YzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAzNjIxLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1ZDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwNDAzNjIxLCAweDVlMyB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdlMDAsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg1ZTMgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTA5MiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMzEsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDkzLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDMzLCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiYSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJlLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAzNSwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYzIsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDM2LCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyYyB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyYyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZTAwLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjA1IH0sCisgICAgeyAweDAwMDBhMDkyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwOTMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMyLCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJiNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmJhLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYmUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM1LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJjMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDFmZiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjBlIH0sCisgICAgeyAweDAwMDRhMDAzLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwYTAwMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MTMgfSwKKyAgICB7IDB4MDAwNGEwMTAsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MmIgfSwKKyAgICB7IDB4MDAwNGEwMTEsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDExLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwMTIsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDEyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwMTMsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDEzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwMTQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwMTUsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDE1LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwMTYsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDE2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwMTcsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDE3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwODAwNjJkLCAweDAwMCB9LAorICAgIHsgMHhmZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGVlMDAwMDAsIDB4NjNkIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYzYiB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YzkgfSwKKyAgICB7IDB4OTgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2NDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNDA0ODExLCAweDYyZCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHg2MmQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjVjIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2ZSB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDA5ODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHg2NTYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmYiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmNywgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2ZSB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMTgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY4YyB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDQwNGMxMSwgMHg2NzIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDM4YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDMwMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwNjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDY4YiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MWEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjEyMjIsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmMDAwLCAweDAwMjgxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDA0MDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg2OGQgfSwKKyAgICB7IDB4OWYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg2OTAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhYzAwMDAwLCAweDY5MiB9LAorICAgIHsgMHg5ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhZTAwMDAwLCAweDY5NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAxMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMTQyMDUwMiwgMHgwNWMwMDI1MCwgMHgwMDAgfSwKKyAgICB7IDB4MDFjMzAxNjgsIDB4MDQzZjA1YzAsIDB4MDAwIH0sCisgICAgeyAweDAyMjUwMjA5LCAweDAyNTAwMTUxLCAweDAwMCB9LAorICAgIHsgMHgwMjIzMDI0NSwgMHgwMmEwMDI0MSwgMHgwMDAgfSwKKyAgICB7IDB4MDNkNzA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA2NDkwNjRhLCAweDAzMWYwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjNSwgMHgwMzIwMDM0MCwgMHgwMDAgfSwKKyAgICB7IDB4MDMyYTAyODIsIDB4MDM0MjAzMzQsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDU1MSwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDNiYTA1YzAsIDB4MDRiYjAzNDQsIDB4MDAwIH0sCisgICAgeyAweDA0OWEwNDUwLCAweDA0M2QwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNGQwMDVjMCwgMHgwNDQxMDRkZCwgMHgwMDAgfSwKKyAgICB7IDB4MDQ1MDA1MDcsIDB4MDM1MTAzNzUsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDYzZjA1YzcsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDAwMDcwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDAzZjgwM2VkLCAweDA0MDgwNDA2LCAweDAwMCB9LAorICAgIHsgMHgwNDBlMDQwYSwgMHgwNDBjMDQxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDQxYzA0MTgsIDB4MDQyNDA0MjAsIDB4MDAwIH0sCisgICAgeyAweDA0MmMwNDI4LCAweDA0MzQwNDMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjMCwgMHgwNDM4MDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAyMDY3OSwgMHgwNjk3MDAwNiwgMHgwMDAgfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY2MjBfcGZwX21pY3JvY29kZVtdID0geworMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHg3YzAzOGIsCisweDgwMDFiOCwKKzB4N2MwMzhiLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4YzQxODM4LAorMHhjYTI0MDAsCisweGNhMjgwMCwKKzB4OTU4MWE4LAorMHhjNDFjM2EsCisweGMzYzAwMCwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweDdjNzQ0YiwKKzB4YzIwMDA1LAorMHg5OWMwMDAsCisweGM0MWMzYSwKKzB4N2M3NDRjLAorMHhjMGZmZjAsCisweDA0MmMwNCwKKzB4MzA5MDAyLAorMHg3ZDI1MDAsCisweDM1MTQwMiwKKzB4N2QzNTBiLAorMHgyNTU0MDMsCisweDdjZDU4MCwKKzB4MjU5YzAzLAorMHg5NWMwMDQsCisweGQ1MDAxYiwKKzB4N2VkZGMxLAorMHg3ZDlkODAsCisweGQ2ODAxYiwKKzB4ZDU4MDFiLAorMHhkNDQwMWUsCisweGQ1NDAxZSwKKzB4ZDY0MDFlLAorMHhkNjgwMWUsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHg5NzgzZDMsCisweGQ1YzAxZSwKKzB4Y2EwODAwLAorMHg4MDAwMWEsCisweGNhMGMwMCwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweDgwMDAwYywKKzB4YzQxODM4LAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ODAwMDBjLAorMHhjNDE4MzgsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2ExODAwLAorMHhkNDQwMWUsCisweGQ1ODAxZSwKKzB4ODAwMDUzLAorMHhkNDAwNzUsCisweGQ0NDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4ZDQ4MDE5LAorMHhkNGMwMTgsCisweGQ1MDAxNywKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweGQ1MDAxZSwKKzB4ZTIwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTA4MDAsCisweGQ0ODA2MCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGQ0ODAxZSwKKzB4Y2EwODAwLAorMHhkNDgwNjEsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhkNDgwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhkNDQwMWUsCisweGQ0ODAxNiwKKzB4ZDRjMDE2LAorMHhkNDgwMWUsCisweDgwMDFiOCwKKzB4ZDRjMDFlLAorMHhjNjA4NDMsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5NDgwMDQsCisweGNhMTQwMCwKKzB4ZTQyMGYzLAorMHhkNDIwMTMsCisweGQ1NjA2NSwKKzB4ZDRlMDFjLAorMHhkNTIwMWMsCisweGQ1NjAxYywKKzB4ODAwMDAwLAorMHgwNjIwMDEsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk0ODNmNywKKzB4Y2ExNDAwLAorMHhlNDIwZjMsCisweDgwMDA3OSwKKzB4ZDQyMDEzLAorMHhjNjA4NDMsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5ODgzZWYsCisweGNhMTQwMCwKKzB4ZDQwMDY0LAorMHg4MDAwOGQsCisweDAwMDAwMCwKKzB4YzQxNDMyLAorMHhjNjE4NDMsCisweGM0MDgyZiwKKzB4OTU0MDA1LAorMHhjNDBjMzAsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweDk1ODNmNSwKKzB4YzQxMDMxLAorMHhkNDQwMzMsCisweGQ1MjA2NSwKKzB4ZDRhMDFjLAorMHhkNGUwMWMsCisweGQ1MjAxYywKKzB4ZTQwMTVlLAorMHhkNDAwMWUsCisweDgwMDAwMCwKKzB4MDYyMDAxLAorMHhjYTE4MDAsCisweDBhMjAwMSwKKzB4ZDYwMDc2LAorMHhjNDA4MzYsCisweDk4ODAwNywKKzB4YzYxMDQ1LAorMHg5NTAxMTAsCisweGQ0MDAxZiwKKzB4ZDQ2MDYyLAorMHg4MDAwMDAsCisweGQ0MjA2MiwKKzB4Y2MzODM1LAorMHhjYzE0MzMsCisweDg0MDFiYiwKKzB4ZDQwMDcyLAorMHhkNTQwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHhlMjAwMWEsCisweDg0MDFiYiwKKzB4ZTIwMDFhLAorMHhjYzEwNGIsCisweGNjMDQ0NywKKzB4MmM5NDAxLAorMHg3ZDA5OGIsCisweDk4NDAwNSwKKzB4N2QxNWNiLAorMHhkNDAwMWEsCisweDgwMDFiOCwKKzB4ZDQwMDZkLAorMHgzNDQ0MDEsCisweGNjMGM0OCwKKzB4OTg0MDNhLAorMHhjYzJjNGEsCisweDk1ODAwNCwKKzB4Y2MwNDQ5LAorMHg4MDAxYjgsCisweGQ0MDAxYSwKKzB4ZDRjMDFhLAorMHgyODI4MDEsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMWIsCisweDA0MzgwYywKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxNywKKzB4MDQzODA4LAorMHg4NDAwZjAsCisweGNjMTAwMywKKzB4OTg4MDEzLAorMHgwNDM4MDQsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMTQsCisweGNjMTA0YywKKzB4OWE4MDA5LAorMHhjYzE0NGQsCisweDk4NDBkYywKKzB4ZDQwMDZkLAorMHhjYzE4NDgsCisweGQ1MDAxYSwKKzB4ZDU0MDFhLAorMHg4MDAwYzksCisweGQ1ODAxYSwKKzB4OTZjMGQ1LAorMHhkNDAwNmQsCisweDgwMDFiOCwKKzB4ZDQwMDZlLAorMHg5YWMwMDMsCisweGQ0MDA2ZCwKKzB4ZDQwMDZlLAorMHg4MDAwMDAsCisweGVjMDA3ZiwKKzB4OWFjMGNjLAorMHhkNDAwNmQsCisweDgwMDFiOCwKKzB4ZDQwMDZlLAorMHhjYzE0MDMsCisweGNjMTgwMywKKzB4Y2MxYzAzLAorMHg3ZDkxMDMsCisweDdkZDU4MywKKzB4N2QxOTBjLAorMHgzNWNjMWYsCisweDM1NzAxZiwKKzB4N2NmMGNiLAorMHg3Y2QwOGIsCisweDg4MDAwMCwKKzB4N2U4ZThiLAorMHg5NWMwMDQsCisweGQ0MDA2ZSwKKzB4ODAwMWI4LAorMHhkNDAwMWEsCisweGQ0YzAxYSwKKzB4Y2MwODAzLAorMHhjYzBjMDMsCisweGNjMTAwMywKKzB4Y2MxNDAzLAorMHhjYzE4MDMsCisweGNjMWMwMywKKzB4Y2MyNDAzLAorMHhjYzI4MDMsCisweDM1YzQxZiwKKzB4MzZiMDFmLAorMHg3YzcwNGIsCisweDM0ZjAxZiwKKzB4N2M3MDRiLAorMHgzNTcwMWYsCisweDdjNzA0YiwKKzB4N2Q4ODgxLAorMHg3ZGNjYzEsCisweDdlNTEwMSwKKzB4N2U5NTQxLAorMHg3YzkwODIsCisweDdjZDRjMiwKKzB4N2M4NDhiLAorMHg5YWMwMDMsCisweDdjOGM4YiwKKzB4MmM4ODAxLAorMHg5ODgwOWUsCisweGQ0MDA2ZCwKKzB4OTg0MDljLAorMHhkNDAwNmUsCisweGNjMDg0YywKKzB4Y2MwYzRkLAorMHhjYzEwNDgsCisweGQ0ODAxYSwKKzB4ZDRjMDFhLAorMHg4MDAxMDEsCisweGQ1MDAxYSwKKzB4Y2MwODMyLAorMHhkNDAwMzIsCisweDk0ODJkOSwKKzB4Y2EwYzAwLAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZDQwMDFlLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4ZDQ0MDFlLAorMHhjYTE0MDAsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHhkNTAwMWUsCisweGQ1NDAxZSwKKzB4ZDU0MDM0LAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4MjgwNDA0LAorMHhlMjAwMWEsCisweGUyMDAxYSwKKzB4ZDQ0MDFhLAorMHhjYTM4MDAsCisweGNjMDgwMywKKzB4Y2MwYzAzLAorMHhjYzBjMDMsCisweGNjMGMwMywKKzB4OTg4MmJkLAorMHgwMDAwMDAsCisweDg0MDFiYiwKKzB4ZDdhMDZmLAorMHg4MDAwMDAsCisweGVlMDAxZiwKKzB4Y2EwNDAwLAorMHhjMmZmMDAsCisweGNjMDgzNCwKKzB4YzEzZmZmLAorMHg3Yzc0Y2IsCisweDdjYzkwYiwKKzB4N2QwMTBmLAorMHg5OTAyYjAsCisweDdjNzM4YiwKKzB4ODQwMWJiLAorMHhkN2EwNmYsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhjYTA4MDAsCisweDI4MTkwMCwKKzB4N2Q4OThiLAorMHg5NTgwMTQsCisweDI4MTQwNCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGNhMWMwMCwKKzB4Y2EyNDAwLAorMHhlMjAwMWYsCisweGQ0YzAxYSwKKzB4ZDUwMDFhLAorMHhkNTQwMWEsCisweGNjMTgwMywKKzB4Y2MyYzAzLAorMHhjYzJjMDMsCisweGNjMmMwMywKKzB4N2RhNThiLAorMHg3ZDljNDcsCisweDk4NDI5NywKKzB4MDAwMDAwLAorMHg4MDAxNjEsCisweGQ0YzAxYSwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2EwODAwLAorMHgyNDhjMDYsCisweDBjY2MwNiwKKzB4OThjMDA2LAorMHhjYzEwNGUsCisweDk5MDAwNCwKKzB4ZDQwMDczLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4MzRkMDE4LAorMHgyNTEwMDEsCisweDk1MDAyMSwKKzB4YzE3ZmZmLAorMHhjYTEwMDAsCisweGNhMTQwMCwKKzB4Y2ExODAwLAorMHhkNDgwMWQsCisweGQ0YzAxZCwKKzB4N2RiMThiLAorMHhjMTQyMDIsCisweGMyYzAwMSwKKzB4ZDU4MDFkLAorMHgzNGRjMGUsCisweDdkNWQ0YywKKzB4N2Y3MzRjLAorMHhkNzQwMWUsCisweGQ1MDAxZSwKKzB4ZDU0MDFlLAorMHhjMTQyMDAsCisweGMyYzAwMCwKKzB4MDk5YzAxLAorMHgzMWRjMTAsCisweDdmNWY0YywKKzB4N2Y3MzRjLAorMHgwNDI4MDIsCisweDdkODM4MCwKKzB4ZDVhODZmLAorMHhkNTgwNjYsCisweGQ3NDAxZSwKKzB4ZWMwMDVlLAorMHhjODI0MDIsCisweGM4MjQwMiwKKzB4ODAwMWI4LAorMHhkNjAwNzYsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHg4MDAwMDAsCisweGVlMDAxZiwKKzB4ZDQwMDFmLAorMHg4MDAwMDAsCisweGQ0MDAxZiwKKzB4ZDQwMDFmLAorMHg4ODAwMDAsCisweGQ0MDAxZiwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDEwMTcxLAorMHgwMjAxNzgsCisweDAzMDA4ZiwKKzB4MDQwMDdmLAorMHgwNTAwMDMsCisweDA2MDAzZiwKKzB4MDcwMDMyLAorMHgwODAxMmMsCisweDA5MDA0NiwKKzB4MGEwMDM2LAorMHgxMDAxYjYsCisweDE3MDBhMiwKKzB4MjIwMTNhLAorMHgyMzAxNDksCisweDIwMDBiNCwKKzB4MjQwMTI1LAorMHgyNzAwNGQsCisweDI4MDA2YSwKKzB4MmEwMDYwLAorMHgyYjAwNTIsCisweDJmMDA2NSwKKzB4MzIwMDg3LAorMHgzNDAxN2YsCisweDNjMDE1NiwKKzB4M2YwMDcyLAorMHg0MTAxOGMsCisweDQ0MDEyZSwKKzB4NTUwMTczLAorMHg1NjAxN2EsCisweDYwMDAwYiwKKzB4NjEwMDM0LAorMHg2MjAwMzgsCisweDYzMDAzOCwKKzB4NjQwMDM4LAorMHg2NTAwMzgsCisweDY2MDAzOCwKKzB4NjcwMDM4LAorMHg2ODAwM2EsCisweDY5MDA0MSwKKzB4NmEwMDQ4LAorMHg2YjAwNDgsCisweDZjMDA0OCwKKzB4NmQwMDQ4LAorMHg2ZTAwNDgsCisweDZmMDA0OCwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBSVjYzMF9jcF9taWNyb2NvZGVbXVszXSA9IHsKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4NDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MmUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMGYwMCwgMHgwMDI4MTYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHg4ZDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAxOCB9LAorICAgIHsgMHgwMDQxMjAwMCwgMHgwMDQwNDgxMSwgMHgwMTkgfSwKKyAgICB7IDB4MDA0MjIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhlMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4OTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIxMTYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjExYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMTQwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmMsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjIwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKKyAgICB7IDB4MjAwMDAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjEwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzOCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwMzUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDM3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDAzOSB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDksIDB4MDA0MDEyMmQsIDB4MDQ2IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDAzOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDNlIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwNDAxYzExLCAweDA0MSB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MWEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYzcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MTIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDE0MDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDA0YiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDI5MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhmZmY4MDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTJjMDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTJiLCAweDAwMCB9LAorICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDYxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA1ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwNWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDA2MiB9LAorICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGIsIDB4MDA0MDEyMmQsIDB4MDZhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDdmYzAwMDAwLCAweDAwMjgxNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzE2MjUsIDB4MDAwIH0sCisgICAgeyAweDgwMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNhMywgMHgwMDAgfSwKKyAgICB7IDB4M2ZmZmZjMDAsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNmQgfSwKKyAgICB7IDB4MDAwMDAxMDAsIDB4MDA0MDFjMTEsIDB4MDcwIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwZmYsIDB4MDAyODFhMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDI4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMTgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDNmZmZmZmZmLCAweDAwMjg0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDI5MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI1LCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDgzIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDg0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDA4YSB9LAorICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDhhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTkgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA4ZCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHhjMDQwMzYyMCwgMHgwOTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDkxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5MCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOTIgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA5OCB9LAorICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDBhMCB9LAorICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOWQgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5ZiB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDNmMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGE3IH0sCisgICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGFhIH0sCisgICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwN2YsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MjcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MGIzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjIxZTMwLCAweDAwMCB9LAorICAgIHsgMHg5OTgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTFjZTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA3LCAweDEyZiB9LAorICAgIHsgMHg5YjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDljMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMTQ2ZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwM2MwNSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwY2IgfSwKKyAgICB7IDB4MDBmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDk4MDAwMDAwLCAweDAwNDA0ODExLCAweDBkYyB9LAorICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwYTAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDBkYSB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNSB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ0IH0sCisgICAgeyAweDAwMDAzZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAorICAgIHsgMHgwMDAwMWYwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKKyAgICB7IDB4MDAwMDBmMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMzgwMDA5LCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgzZjAwMDAwMCwgMHgwMDI4MGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwNDk0YTIzLCAweDBkYyB9LAorICAgIHsgMHgwMDM4MGYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4NjgwMDAwMDcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyMDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwZmYwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA4MCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGVhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwZWIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjYyIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIyMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAxMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZWYsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDBmOCB9LAorICAgIHsgMHgwMDAwMDAwYiwgMHgwMDIxMDIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGY4IH0sCisgICAgeyAweDAwMDAwNDAwLCAweDAwMjkyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmZCB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMGEzMGYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA0IH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA3IH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTBhIH0sCisgICAgeyAweDAwMDAwMGZmLCAweDAwNDA0ODExLCAweDEwYiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMmM0MDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMTIgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIyNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzA0MjRhMjAsIDB4MTE0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMTAxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDExYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzEyMjQsIDB4MTE3IH0sCisgICAgeyAweGZmYmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTJlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjBlMzAsIDB4MDAwIH0sCisgICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDdmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDA4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4Njg5IH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDEzNSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgxM2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQxNDYxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTg4MiwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNDcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDY4MWEyMCwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNTggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMGEyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE4ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxZTI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDcwNDhlYiwgMHgxOWMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDQwMzMwNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDMwMjQwOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDE4MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MTg2IH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxODIgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDE5NyB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzgwNDJhLCAweDJmYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE3NCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxOTQgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4NDYwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE5YiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwODExYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxZTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmJmZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDEwMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA2MjFlMjgsIDB4MTJmIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwODIyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAyYzAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjAwZTJkLCAweDFiZCB9LAorICAgIHsgMHgwMDAwYzAwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDFiOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDM5MDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjAyZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNiMGQ2MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIxMDYyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MjIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEyNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjYyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFlMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFkOCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjgyYTJhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxZDEgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMzA0YTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzAxZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZTUgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMTgxMSwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZjggfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjgsIDB4MDAwIH0sCisgICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTAzLCAweDIwNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MjQsIDB4MjA1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxNGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjAwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDI0MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2ODkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYjE0MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwOTAxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjk0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTQ2NSwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjE5IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDQwZiwgMHgyMTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjJlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0MiB9LAorICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE5YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDIzMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MjM2IH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjM2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDIzMyB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgyZmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyZSB9LAorICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyNGMgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDgwMTAxLCAweDAwMjkyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjUxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDI3YyB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDI2YSB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjNDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI2NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmMxIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjAyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzEgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwNDA0ODExLCAweDI3NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4Mjc1IH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwNDA0ODExLCAweDI3NiB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTkgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDI1NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDg4MWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjJlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJiLCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDcwMDAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2U2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHgyOTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjkxY2UyLCAweDEyZiB9LAorICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjlkIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDQwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4YzAyMjBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHhjMDQwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhhMTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2M0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZDkgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkOSB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjY1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmE3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDA4MDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM4MDhjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4NDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDMxOCB9LAorICAgIHsgMHhmZmZmZmZlZiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmOGUwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHhjMDQ4NGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHg0MDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4NDAzMDRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweGMwMzA0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMGEyMiwgMHgzNGIgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM1NCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzY0IH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODAyLCAweDM2ZSB9LAorICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNmEgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MzVmIH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YmQgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZiB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMzYyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwNDksIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM3MCB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDgwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzODYgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNiMSB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2I1IH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOWMgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhOCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2E4IH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOTAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwODAwMDAwMCwgMHgwMDI5MGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA4MDAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4YzAyMjE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGE0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzkyIH0sCisgICAgeyAweDAwMDAyMTBlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzllIH0sCisgICAgeyAweDAwMDAyMTA4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNhZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2NlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNjMCB9LAorICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHhiYWJlY2FmZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZDMgfSwKKyAgICB7IDB4OGMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDQwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4NDAwMDAwMDAsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMTgwMCwgMHgzZTQgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI2LCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMWMwMCwgMHgzZWEgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI3LCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjgyMGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5NDhlOCwgMHgwMDAgfSwKKyAgICB7IDB4YTU4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHg0MDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4YzAyMTAyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNmNyB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwNDgxMjIwLCAweDNmZiB9LAorICAgIHsgMHhhNzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0ODgzLCAweDAwMCB9LAorICAgIHsgMHg4NDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFkMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweGE5ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYzAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YWI4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmOGUwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhhZDgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ODAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGIzODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjNmYywgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YWY4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhiMTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE0OCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAxMTgyMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMjE4YTAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDMxOGMwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA0MThmOGUwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNTE4Zjg4MCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDYxOGUwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA3MThmMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwODE4ZjNmYywgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjkwYzQwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg4NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDg1MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwMiwgMHg0NDggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ1NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMjAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjgwYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDVlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjQsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ2MyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDUsIDB4NjhmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjgyNGYwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDI4MGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDRlMDAwMDAsIDB4NDgzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDZmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmUwMDAwMCwgMHg0ODMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NzQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ4MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDgzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDdlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHg0ODMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4ZTAwMDAwLCAweDQ4MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ4ZCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDk2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzA4LCAweDQ1NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDQwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGEwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweGMwNDk0YTIwLCAweDRhMSB9LAorICAgIHsgMHhmZmZiZmZmZiwgMHhjMDI4NGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDRhZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGE5IH0sCisgICAgeyAweGEwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2YiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRhNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGMwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHg2OGYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGM0IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4YzAyOTQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGNiIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODEwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0Y2QgfSwKKyAgICB7IDB4MDAwMDIxODAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0ZmQgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDE4ZTAwYzExLCAweDRlYyB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOGMwNDgwMCwgMHg0ZTAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmQsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkwYzgzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRhNyB9LAorICAgIHsgMHgwMDAwMDAyYywgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmQsIDB4YzA0MDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MDIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4YjUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiNjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYzAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmOGUwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiOTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ODAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGJhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YmIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiYzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYzZmMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZmYsIDB4MDAyODBlMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1MTYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDUyYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmUwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDFmZmYsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4ZjFmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweGMwMjIwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYSwgMHg0MDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4OWQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDQwMjE0YTIwLCAweDAwMCB9LAorICAgIHsgMHg5NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTE2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIyMjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMTRhOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjExYTI0LCAweDAwMCB9LAorICAgIHsgMHgxMDAwMDAwMCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4ZWZmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDkzOGNlLCAweDY3OCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMzAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTYzIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDIwMDAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3OSB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZiIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTc5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NmYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3OSB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTc3IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHg2OGYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDFjMTAsIDB4NTc5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGVlMDAwMDAsIDB4NTdiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NThjIH0sCisgICAgeyAweDAwMDBhMmI3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEyYzQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OGEgfSwKKyAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1OWQgfSwKKyAgICB7IDB4MDAwMGEyYmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTJjNSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU5YiB9LAorICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVhZSB9LAorICAgIHsgMHgwMDAwYTJiZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDBhMmM2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWFjIH0sCisgICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJjMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYzIsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDBhMmM3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWJiIH0sCisgICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHg4NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzMDRhLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NWMxIH0sCisgICAgeyAweGE0MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NWM2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMzYyMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWNkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDQwMzYyMSwgMHg1ZTAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZTAwLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NWUwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwOTIsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDMxLCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTA5MywgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmI2LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYmEsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDM0LCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiZSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MjkgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MjkgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYwMiB9LAorICAgIHsgMHgwMDAwYTA5MiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzEsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDkzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYjYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMzLCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJiYSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmJlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNSwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM2LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAxZmYsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MjggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYwYiB9LAorICAgIHsgMHgwMDA0YTAwMywgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjEwIH0sCisgICAgeyAweDAwMDRhMDEwLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjI4IH0sCisgICAgeyAweDAwMDRhMDExLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDEyLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDEzLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDE0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDE1LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxNSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDE2LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDE3LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDgwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDYzYSB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MzggfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2M2UgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWM2IH0sCisgICAgeyAweDk4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NjNlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg5MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwNDgxMSwgMHg2MmEgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4NjJhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1OSB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwOTgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4NjUzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmIsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZjcsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDE4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2ODkgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDA0MDRjMTEsIDB4NjZmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgzOGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAzMDEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDY0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg2ODggfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjIyLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTEwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwNDAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjhhIH0sCisgICAgeyAweDlmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg2OGYgfSwKKyAgICB7IDB4OWUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg2OTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDE0MjA0ZmYsIDB4MDViZDAyNTAsIDB4MDAwIH0sCisgICAgeyAweDAxYzMwMTY4LCAweDA0M2YwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwMjI1MDIwOSwgMHgwMjUwMDE1MSwgMHgwMDAgfSwKKyAgICB7IDB4MDIyMzAyNDUsIDB4MDJhMDAyNDEsIDB4MDAwIH0sCisgICAgeyAweDAzZDcwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwNjQ2MDY0NywgMHgwMzFmMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YzIsIDB4MDMyMDAzNDAsIDB4MDAwIH0sCisgICAgeyAweDAzMmEwMjgyLCAweDAzNDIwMzM0LCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1NGUsIDB4MDViZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDAzYmEwNWJkLCAweDA0YjgwMzQ0LCAweDAwMCB9LAorICAgIHsgMHgwNDk3MDQ0ZCwgMHgwNDNkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDRjZDA1YmQsIDB4MDQ0MTA0ZGEsIDB4MDAwIH0sCisgICAgeyAweDA0NGQwNTA0LCAweDAzNTEwMzc1LCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWJkLCAweDA2M2MwNWM0LCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwMDA3MDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwM2Y4MDNlZCwgMHgwNDA4MDQwNiwgMHgwMDAgfSwKKyAgICB7IDB4MDQwZTA0MGEsIDB4MDQwYzA0MTAsIDB4MDAwIH0sCisgICAgeyAweDA0MWMwNDE4LCAweDA0MjQwNDIwLCAweDAwMCB9LAorICAgIHsgMHgwNDJjMDQyOCwgMHgwNDM0MDQzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDQzODA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMjA2NzYsIDB4MDY5NDAwMDYsIDB4MDAwIH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIFJWNjMwX3BmcF9taWNyb2NvZGVbXSA9IHsKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4N2MwMzhiLAorMHg4MDAxYjgsCisweDdjMDM4YiwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGM0MTgzOCwKKzB4Y2EyNDAwLAorMHhjYTI4MDAsCisweDk1ODFhOCwKKzB4YzQxYzNhLAorMHhjM2MwMDAsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHg3Yzc0NGIsCisweGMyMDAwNSwKKzB4OTljMDAwLAorMHhjNDFjM2EsCisweDdjNzQ0YywKKzB4YzBmZmYwLAorMHgwNDJjMDQsCisweDMwOTAwMiwKKzB4N2QyNTAwLAorMHgzNTE0MDIsCisweDdkMzUwYiwKKzB4MjU1NDAzLAorMHg3Y2Q1ODAsCisweDI1OWMwMywKKzB4OTVjMDA0LAorMHhkNTAwMWIsCisweDdlZGRjMSwKKzB4N2Q5ZDgwLAorMHhkNjgwMWIsCisweGQ1ODAxYiwKKzB4ZDQ0MDFlLAorMHhkNTQwMWUsCisweGQ2NDAxZSwKKzB4ZDY4MDFlLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4OTc4M2QzLAorMHhkNWMwMWUsCisweGNhMDgwMCwKKzB4ODAwMDFhLAorMHhjYTBjMDAsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHg4MDAwMGMsCisweGM0MTgzOCwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweDgwMDAwYywKKzB4YzQxODM4LAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGNhMTgwMCwKKzB4ZDQ0MDFlLAorMHhkNTgwMWUsCisweDgwMDA1MywKKzB4ZDQwMDc1LAorMHhkNDQwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGQ0ODAxOSwKKzB4ZDRjMDE4LAorMHhkNTAwMTcsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHhkNTAwMWUsCisweGUyMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2EwODAwLAorMHhkNDgwNjAsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhkNDgwMWUsCisweGNhMDgwMCwKKzB4ZDQ4MDYxLAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZDQ4MDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4ZDQ0MDFlLAorMHhkNDgwMTYsCisweGQ0YzAxNiwKKzB4ZDQ4MDFlLAorMHg4MDAxYjgsCisweGQ0YzAxZSwKKzB4YzYwODQzLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4OTQ4MDA0LAorMHhjYTE0MDAsCisweGU0MjBmMywKKzB4ZDQyMDEzLAorMHhkNTYwNjUsCisweGQ0ZTAxYywKKzB4ZDUyMDFjLAorMHhkNTYwMWMsCisweDgwMDAwMCwKKzB4MDYyMDAxLAorMHhjNjA4NDMsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5NDgzZjcsCisweGNhMTQwMCwKKzB4ZTQyMGYzLAorMHg4MDAwNzksCisweGQ0MjAxMywKKzB4YzYwODQzLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4OTg4M2VmLAorMHhjYTE0MDAsCisweGQ0MDA2NCwKKzB4ODAwMDhkLAorMHgwMDAwMDAsCisweGM0MTQzMiwKKzB4YzYxODQzLAorMHhjNDA4MmYsCisweDk1NDAwNSwKKzB4YzQwYzMwLAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHg5NTgzZjUsCisweGM0MTAzMSwKKzB4ZDQ0MDMzLAorMHhkNTIwNjUsCisweGQ0YTAxYywKKzB4ZDRlMDFjLAorMHhkNTIwMWMsCisweGU0MDE1ZSwKKzB4ZDQwMDFlLAorMHg4MDAwMDAsCisweDA2MjAwMSwKKzB4Y2ExODAwLAorMHgwYTIwMDEsCisweGQ2MDA3NiwKKzB4YzQwODM2LAorMHg5ODgwMDcsCisweGM2MTA0NSwKKzB4OTUwMTEwLAorMHhkNDAwMWYsCisweGQ0NjA2MiwKKzB4ODAwMDAwLAorMHhkNDIwNjIsCisweGNjMzgzNSwKKzB4Y2MxNDMzLAorMHg4NDAxYmIsCisweGQ0MDA3MiwKKzB4ZDU0MDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4ZTIwMDFhLAorMHg4NDAxYmIsCisweGUyMDAxYSwKKzB4Y2MxMDRiLAorMHhjYzA0NDcsCisweDJjOTQwMSwKKzB4N2QwOThiLAorMHg5ODQwMDUsCisweDdkMTVjYiwKKzB4ZDQwMDFhLAorMHg4MDAxYjgsCisweGQ0MDA2ZCwKKzB4MzQ0NDAxLAorMHhjYzBjNDgsCisweDk4NDAzYSwKKzB4Y2MyYzRhLAorMHg5NTgwMDQsCisweGNjMDQ0OSwKKzB4ODAwMWI4LAorMHhkNDAwMWEsCisweGQ0YzAxYSwKKzB4MjgyODAxLAorMHg4NDAwZjAsCisweGNjMTAwMywKKzB4OTg4MDFiLAorMHgwNDM4MGMsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMTcsCisweDA0MzgwOCwKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxMywKKzB4MDQzODA0LAorMHg4NDAwZjAsCisweGNjMTAwMywKKzB4OTg4MDE0LAorMHhjYzEwNGMsCisweDlhODAwOSwKKzB4Y2MxNDRkLAorMHg5ODQwZGMsCisweGQ0MDA2ZCwKKzB4Y2MxODQ4LAorMHhkNTAwMWEsCisweGQ1NDAxYSwKKzB4ODAwMGM5LAorMHhkNTgwMWEsCisweDk2YzBkNSwKKzB4ZDQwMDZkLAorMHg4MDAxYjgsCisweGQ0MDA2ZSwKKzB4OWFjMDAzLAorMHhkNDAwNmQsCisweGQ0MDA2ZSwKKzB4ODAwMDAwLAorMHhlYzAwN2YsCisweDlhYzBjYywKKzB4ZDQwMDZkLAorMHg4MDAxYjgsCisweGQ0MDA2ZSwKKzB4Y2MxNDAzLAorMHhjYzE4MDMsCisweGNjMWMwMywKKzB4N2Q5MTAzLAorMHg3ZGQ1ODMsCisweDdkMTkwYywKKzB4MzVjYzFmLAorMHgzNTcwMWYsCisweDdjZjBjYiwKKzB4N2NkMDhiLAorMHg4ODAwMDAsCisweDdlOGU4YiwKKzB4OTVjMDA0LAorMHhkNDAwNmUsCisweDgwMDFiOCwKKzB4ZDQwMDFhLAorMHhkNGMwMWEsCisweGNjMDgwMywKKzB4Y2MwYzAzLAorMHhjYzEwMDMsCisweGNjMTQwMywKKzB4Y2MxODAzLAorMHhjYzFjMDMsCisweGNjMjQwMywKKzB4Y2MyODAzLAorMHgzNWM0MWYsCisweDM2YjAxZiwKKzB4N2M3MDRiLAorMHgzNGYwMWYsCisweDdjNzA0YiwKKzB4MzU3MDFmLAorMHg3YzcwNGIsCisweDdkODg4MSwKKzB4N2RjY2MxLAorMHg3ZTUxMDEsCisweDdlOTU0MSwKKzB4N2M5MDgyLAorMHg3Y2Q0YzIsCisweDdjODQ4YiwKKzB4OWFjMDAzLAorMHg3YzhjOGIsCisweDJjODgwMSwKKzB4OTg4MDllLAorMHhkNDAwNmQsCisweDk4NDA5YywKKzB4ZDQwMDZlLAorMHhjYzA4NGMsCisweGNjMGM0ZCwKKzB4Y2MxMDQ4LAorMHhkNDgwMWEsCisweGQ0YzAxYSwKKzB4ODAwMTAxLAorMHhkNTAwMWEsCisweGNjMDgzMiwKKzB4ZDQwMDMyLAorMHg5NDgyZDksCisweGNhMGMwMCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGQ0MDAxZSwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGQ0NDAxZSwKKzB4Y2ExNDAwLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ZDUwMDFlLAorMHhkNTQwMWUsCisweGQ1NDAzNCwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweDI4MDQwNCwKKzB4ZTIwMDFhLAorMHhlMjAwMWEsCisweGQ0NDAxYSwKKzB4Y2EzODAwLAorMHhjYzA4MDMsCisweGNjMGMwMywKKzB4Y2MwYzAzLAorMHhjYzBjMDMsCisweDk4ODJiZCwKKzB4MDAwMDAwLAorMHg4NDAxYmIsCisweGQ3YTA2ZiwKKzB4ODAwMDAwLAorMHhlZTAwMWYsCisweGNhMDQwMCwKKzB4YzJmZjAwLAorMHhjYzA4MzQsCisweGMxM2ZmZiwKKzB4N2M3NGNiLAorMHg3Y2M5MGIsCisweDdkMDEwZiwKKzB4OTkwMmIwLAorMHg3YzczOGIsCisweDg0MDFiYiwKKzB4ZDdhMDZmLAorMHg4MDAwMDAsCisweGVlMDAxZiwKKzB4Y2EwODAwLAorMHgyODE5MDAsCisweDdkODk4YiwKKzB4OTU4MDE0LAorMHgyODE0MDQsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhjYTFjMDAsCisweGNhMjQwMCwKKzB4ZTIwMDFmLAorMHhkNGMwMWEsCisweGQ1MDAxYSwKKzB4ZDU0MDFhLAorMHhjYzE4MDMsCisweGNjMmMwMywKKzB4Y2MyYzAzLAorMHhjYzJjMDMsCisweDdkYTU4YiwKKzB4N2Q5YzQ3LAorMHg5ODQyOTcsCisweDAwMDAwMCwKKzB4ODAwMTYxLAorMHhkNGMwMWEsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGNhMDgwMCwKKzB4MjQ4YzA2LAorMHgwY2NjMDYsCisweDk4YzAwNiwKKzB4Y2MxMDRlLAorMHg5OTAwMDQsCisweGQ0MDA3MywKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweDM0ZDAxOCwKKzB4MjUxMDAxLAorMHg5NTAwMjEsCisweGMxN2ZmZiwKKzB4Y2ExMDAwLAorMHhjYTE0MDAsCisweGNhMTgwMCwKKzB4ZDQ4MDFkLAorMHhkNGMwMWQsCisweDdkYjE4YiwKKzB4YzE0MjAyLAorMHhjMmMwMDEsCisweGQ1ODAxZCwKKzB4MzRkYzBlLAorMHg3ZDVkNGMsCisweDdmNzM0YywKKzB4ZDc0MDFlLAorMHhkNTAwMWUsCisweGQ1NDAxZSwKKzB4YzE0MjAwLAorMHhjMmMwMDAsCisweDA5OWMwMSwKKzB4MzFkYzEwLAorMHg3ZjVmNGMsCisweDdmNzM0YywKKzB4MDQyODAyLAorMHg3ZDgzODAsCisweGQ1YTg2ZiwKKzB4ZDU4MDY2LAorMHhkNzQwMWUsCisweGVjMDA1ZSwKKzB4YzgyNDAyLAorMHhjODI0MDIsCisweDgwMDFiOCwKKzB4ZDYwMDc2LAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWYsCisweGQ0MDAxZiwKKzB4ODAwMDAwLAorMHhkNDAwMWYsCisweGQ0MDAxZiwKKzB4ODgwMDAwLAorMHhkNDAwMWYsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAxMDE3MSwKKzB4MDIwMTc4LAorMHgwMzAwOGYsCisweDA0MDA3ZiwKKzB4MDUwMDAzLAorMHgwNjAwM2YsCisweDA3MDAzMiwKKzB4MDgwMTJjLAorMHgwOTAwNDYsCisweDBhMDAzNiwKKzB4MTAwMWI2LAorMHgxNzAwYTIsCisweDIyMDEzYSwKKzB4MjMwMTQ5LAorMHgyMDAwYjQsCisweDI0MDEyNSwKKzB4MjcwMDRkLAorMHgyODAwNmEsCisweDJhMDA2MCwKKzB4MmIwMDUyLAorMHgyZjAwNjUsCisweDMyMDA4NywKKzB4MzQwMTdmLAorMHgzYzAxNTYsCisweDNmMDA3MiwKKzB4NDEwMThjLAorMHg0NDAxMmUsCisweDU1MDE3MywKKzB4NTYwMTdhLAorMHg2MDAwMGIsCisweDYxMDAzNCwKKzB4NjIwMDM4LAorMHg2MzAwMzgsCisweDY0MDAzOCwKKzB4NjUwMDM4LAorMHg2NjAwMzgsCisweDY3MDAzOCwKKzB4NjgwMDNhLAorMHg2OTAwNDEsCisweDZhMDA0OCwKKzB4NmIwMDQ4LAorMHg2YzAwNDgsCisweDZkMDA0OCwKKzB4NmUwMDQ4LAorMHg2ZjAwNDgsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY2MzVfY3BfbWljcm9jb2RlW11bM10gPSB7CisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODQ2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjJlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDBmMDAsIDB4MDAyODE2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4OGQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMTggfSwKKyAgICB7IDB4MDA0MTIwMDAsIDB4MDA0MDQ4MTEsIDB4MDE5IH0sCisgICAgeyAweDAwNDIyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDkwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMTE2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIxMWEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyODFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTE0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZjLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIyMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDIwMDAwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIxMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjIwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwMzggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDM1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDAzNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA5LCAweDAwNDAxMjJkLCAweDA0NiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzZSB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDQwMWMxMSwgMHgwNDEgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODFhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjExYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2M3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODEyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxNDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwNGIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmODAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EyYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwNWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDVlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDA2MiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBiLCAweDAwNDAxMjJkLCAweDA2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MTYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMxNjI1LCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYTMsIDB4MDAwIH0sCisgICAgeyAweDNmZmZmYzAwLCAweDAwMjkwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDZkIH0sCisgICAgeyAweDAwMDAwMTAwLCAweDAwNDAxYzExLCAweDA3MCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmMGZmLCAweDAwMjgxYTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAyOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDE4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgzZmZmZmZmZiwgMHgwMDI4NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyOTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4MyB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4NCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwOGEgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjU5IH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOGQgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4YzA0MDM2MjAsIDB4MDkzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOTAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5MiB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOTggfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwYTAgfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDlkIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5ZiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOWYgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZjAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhNyB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhYSB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBlMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDdmLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGUxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDI3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDBiMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWUzMCwgMHgwMDAgfSwKKyAgICB7IDB4OTk4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxY2U0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNywgMHgxMmYgfSwKKyAgICB7IDB4OWIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHg5YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzE0NmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDNjMDUsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDA3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGNiIH0sCisgICAgeyAweDAwZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg5ODAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwZGMgfSwKKyAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGEwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwZGEgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDUgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNCB9LAorICAgIHsgMHgwMDAwM2YwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKKyAgICB7IDB4MDAwMDFmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCisgICAgeyAweDAwMDAwZjAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDM4MDAwOSwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4M2YwMDAwMDAsIDB4MDAyODBlMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDQ5NGEyMywgMHgwZGMgfSwKKyAgICB7IDB4MDAzODBmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDY4MDAwMDA3LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMjAyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMGZmMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwODMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MGViIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2MiB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMjBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMTAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGVmLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwZjggfSwKKyAgICB7IDB4MDAwMDAwMGIsIDB4MDAyMTAyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmOCB9LAorICAgIHsgMHgwMDAwMDQwMCwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZmQgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTBiIH0sCisgICAgeyAweDAwMDBhMzBmLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNyB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwYSB9LAorICAgIHsgMHgwMDAwMDBmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDJjNDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTEyIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMjRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwNDI0YTIwLCAweDExNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDEwMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxMWIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxMjI0LCAweDExNyB9LAorICAgIHsgMHhmZmJmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEyZSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjIwZTMwLCAweDAwMCB9LAorICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMGUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDA3ZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY4OSB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHgxMzUgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MTNjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MTQ2MSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE4ODIsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTQ3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzA2ODFhMjAsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTU4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDBhMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOGYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMWUyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MDQ4ZWIsIDB4MTljIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMzMDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAzMDI0MDksIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgxODEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDE4NiB9LAorICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MTgyIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHgxOTcgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc4MDQyYSwgMHgyZmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDksIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNzQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTk0IH0sCisgICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDQ2MDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxOWIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDgxMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWUzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhmZmZiZmYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAxMDAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwNjIxZTI4LCAweDEyZiB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDgyMjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMmMwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwNjAwZTJkLCAweDFiZCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKKyAgICB7IDB4MDAwMGMwMDgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxYjkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgzOTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMmUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYjBkNjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMTA2MmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODIyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMjYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjI2MjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZTAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDgxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDgwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZDggfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjgwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MmEyYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MWQxIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDMwNGEyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMWUyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWU1IH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDE4MTEsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWY4IH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjI4LCAweDAwMCB9LAorICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUwMywgMHgyMDUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTI0LCAweDIwNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMTRjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDIwMDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAyNDA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4Njg5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmIxNDA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDkwMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDI5NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTFhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE0NjUsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxOSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDA0MGYsIDB4MjEzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDIgfSwKKyAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOWMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyMzIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDIzNiB9LAorICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDIzNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyMzMgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MmUgfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDQwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjRjIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDA4MDEwMSwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDI1MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyN2MgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjExZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyNmEgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWMyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjVmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjYyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzQ3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNjcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNmEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJjMSB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcxIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNDA0ODExLCAweDI3NiB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3NSB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDQwNDgxMSwgMHgyNzYgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmU5IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyNTYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzA4ODFhMjAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3MDAwLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjIxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4MjkyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDY5MWNlMiwgMHgxMmYgfSwKKyAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDI5ZCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDA0MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweGMwMjIwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4YzA0MDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YTEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmQ5IH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZDkgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NWMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwODAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzODA4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAwODQxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzMTggfSwKKyAgICB7IDB4ZmZmZmZmZWYsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4YzA0ODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDQwMzA0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHhjMDMwNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzBhMjIsIDB4MzRiIH0sCisgICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzNTQgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2NCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwMiwgMHgzNmUgfSwKKyAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzZhIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZiB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWJkIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgzNWYgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDQ5LCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNzAgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4Mzg2IH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYjEgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNiNSB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzljIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTggfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhOCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzkwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDgwMDAwMDAsIDB4MDAyOTBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwODAwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweGMwMjIxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5MiB9LAorICAgIHsgMHgwMDAwMjEwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5ZSB9LAorICAgIHsgMHgwMDAwMjEwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzYWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNjZSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzYzAgfSwKKyAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4YmFiZWNhZmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNzAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2QzIH0sCisgICAgeyAweDhjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDQwMDAwMDAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDE4MDAsIDB4M2U0IH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNiwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZTcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDFjMDAsIDB4M2VhIH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNywgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjBjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTQ4ZTgsIDB4MDAwIH0sCisgICAgeyAweGE1ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweGMwMjEwMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZjcgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDQ4MTIyMCwgMHgzZmYgfSwKKyAgICB7IDB4YTc4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDg4MywgMHgwMDAgfSwKKyAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHhhOTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGFiODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YWQ4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhiMzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYzZmMsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGFmODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YjE4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMTE4MjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDIxOGEwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAzMThjMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNDE4ZjhlMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDUxOGY4ODAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA2MThlMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNzE4ZjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDgxOGYzZmMsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDI5MGM0MCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4ODYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAorICAgIHsgMHg4NTAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDIsIDB4NDQ4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NTYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDIwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDI4MGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ1ZSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI0LCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0NjMgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA1LCAweDY4ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjRmMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyODBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA0ZTAwMDAwLCAweDQ4MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJlMDAwMDAsIDB4NDgzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0ODMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4NDgzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDgzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGUwMDAwMCwgMHg0ODMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjEwYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0OGQgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ5NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwOCwgMHg0NTYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHg0MDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDRhMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHhjMDQ5NGEyMCwgMHg0YTEgfSwKKyAgICB7IDB4ZmZmYmZmZmYsIDB4YzAyODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YWQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRhOSB9LAorICAgIHsgMHhhMDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YTcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjhmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRjNCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjYiB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGNkIH0sCisgICAgeyAweDAwMDAyMTgwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGZkIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgxOGUwMGMxMSwgMHg0ZWMgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDhjMDQ4MDAsIDB4NGUwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGM4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YTcgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTAyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweGI1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiNzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiYTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGJiMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YmMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmM2ZjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGZmLCAweDAwMjgwZTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTE2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmZlMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweGYxZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHhjMDIyMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4NDAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDg3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDlkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHg0MDIxNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4OTYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMjIyMywgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDE0YTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMWEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MTAwMDAwMDAsIDB4MDAyODFhMjYsIDB4MDAwIH0sCisgICAgeyAweGVmZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5MzhjZSwgMHg2NzggfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4NDAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDMwMCwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDU2MyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAyMDAwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1NzkgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2YiB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1NzkgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU3NyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjhmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAxYzEwLCAweDU3OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDU3YiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YzYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU4YyB9LAorICAgIHsgMHgwMDAwYTJiNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDBhMmM0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NThhIH0sCisgICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTlkIH0sCisgICAgeyAweDAwMDBhMmJiLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiYSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEyYzUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OWIgfSwKKyAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YWUgfSwKKyAgICB7IDB4MDAwMGEyYmYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJlLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTJjNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDVhYyB9LAorICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTJjNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDViYiB9LAorICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4ODUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMzA0YSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDEwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDVjMSB9LAorICAgIHsgMHhhNDAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDVjNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVjZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDA0MDM2MjEsIDB4NWUwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDVlMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDkyLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwOTMsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDMyLCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDM1LCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJjMiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjI5IH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjI5IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdlMDAsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MDIgfSwKKyAgICB7IDB4MDAwMGEwOTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMxLCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTA5MywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmI2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYmEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM0LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJiZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmMyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMWZmLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjI4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MGIgfSwKKyAgICB7IDB4MDAwNGEwMDMsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDBhMDAzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYxMCB9LAorICAgIHsgMHgwMDA0YTAxMCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyOCB9LAorICAgIHsgMHgwMDA0YTAxMSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxMiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxMywgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNywgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDA2MmQsIDB4MDAwIH0sCisgICAgeyAweGZmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwZWUwMDAwMCwgMHg2M2EgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjM4IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAxMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjNlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNiB9LAorICAgIHsgMHg5ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDYzZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4OTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDQ4MTEsIDB4NjJhIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDYyYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTkgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDk4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDY1MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjkxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZiLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjkxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmY3LCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAxODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4Njg5IH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwNDA0YzExLCAweDY2ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MzhjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMzAxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA2NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4Njg4IH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyMiwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDQwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhYzAwMDAwLCAweDY4YSB9LAorICAgIHsgMHg5ZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhZTAwMDAwLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjhmIH0sCisgICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjkyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAxNDIwNGZmLCAweDA1YmQwMjUwLCAweDAwMCB9LAorICAgIHsgMHgwMWMzMDE2OCwgMHgwNDNmMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDIyNTAyMDksIDB4MDI1MDAxNTEsIDB4MDAwIH0sCisgICAgeyAweDAyMjMwMjQ1LCAweDAyYTAwMjQxLCAweDAwMCB9LAorICAgIHsgMHgwM2Q3MDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDY0NjA2NDcsIDB4MDMxZjA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWMyLCAweDAzMjAwMzQwLCAweDAwMCB9LAorICAgIHsgMHgwMzJhMDI4MiwgMHgwMzQyMDMzNCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNTRlLCAweDA1YmQwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwM2JhMDViZCwgMHgwNGI4MDM0NCwgMHgwMDAgfSwKKyAgICB7IDB4MDQ5NzA0NGQsIDB4MDQzZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA0Y2QwNWJkLCAweDA0NDEwNGRhLCAweDAwMCB9LAorICAgIHsgMHgwNDRkMDUwNCwgMHgwMzUxMDM3NSwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwNjNjMDVjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDAwNzA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDNmODAzZWQsIDB4MDQwODA0MDYsIDB4MDAwIH0sCisgICAgeyAweDA0MGUwNDBhLCAweDA0MGMwNDEwLCAweDAwMCB9LAorICAgIHsgMHgwNDFjMDQxOCwgMHgwNDI0MDQyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDQyYzA0MjgsIDB4MDQzNDA0MzAsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWJkLCAweDA0MzgwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDIwNjc2LCAweDA2OTQwMDA2LCAweDAwMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBSVjYzNV9wZnBfbWljcm9jb2RlW10gPSB7CisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweDdjMDM4YiwKKzB4ODAwMWI4LAorMHg3YzAzOGIsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjNDE4MzgsCisweGNhMjQwMCwKKzB4Y2EyODAwLAorMHg5NTgxYTgsCisweGM0MWMzYSwKKzB4YzNjMDAwLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4N2M3NDRiLAorMHhjMjAwMDUsCisweDk5YzAwMCwKKzB4YzQxYzNhLAorMHg3Yzc0NGMsCisweGMwZmZmMCwKKzB4MDQyYzA0LAorMHgzMDkwMDIsCisweDdkMjUwMCwKKzB4MzUxNDAyLAorMHg3ZDM1MGIsCisweDI1NTQwMywKKzB4N2NkNTgwLAorMHgyNTljMDMsCisweDk1YzAwNCwKKzB4ZDUwMDFiLAorMHg3ZWRkYzEsCisweDdkOWQ4MCwKKzB4ZDY4MDFiLAorMHhkNTgwMWIsCisweGQ0NDAxZSwKKzB4ZDU0MDFlLAorMHhkNjQwMWUsCisweGQ2ODAxZSwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweDk3ODNkMywKKzB4ZDVjMDFlLAorMHhjYTA4MDAsCisweDgwMDAxYSwKKzB4Y2EwYzAwLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ODAwMDBjLAorMHhjNDE4MzgsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHg4MDAwMGMsCisweGM0MTgzOCwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTE4MDAsCisweGQ0NDAxZSwKKzB4ZDU4MDFlLAorMHg4MDAwNTMsCisweGQ0MDA3NSwKKzB4ZDQ0MDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhkNDgwMTksCisweGQ0YzAxOCwKKzB4ZDUwMDE3LAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ZDUwMDFlLAorMHhlMjAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGNhMDgwMCwKKzB4ZDQ4MDYwLAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZDQ4MDFlLAorMHhjYTA4MDAsCisweGQ0ODA2MSwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGQ0ODAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGQ0NDAxZSwKKzB4ZDQ4MDE2LAorMHhkNGMwMTYsCisweGQ0ODAxZSwKKzB4ODAwMWI4LAorMHhkNGMwMWUsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk0ODAwNCwKKzB4Y2ExNDAwLAorMHhlNDIwZjMsCisweGQ0MjAxMywKKzB4ZDU2MDY1LAorMHhkNGUwMWMsCisweGQ1MjAxYywKKzB4ZDU2MDFjLAorMHg4MDAwMDAsCisweDA2MjAwMSwKKzB4YzYwODQzLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4OTQ4M2Y3LAorMHhjYTE0MDAsCisweGU0MjBmMywKKzB4ODAwMDc5LAorMHhkNDIwMTMsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk4ODNlZiwKKzB4Y2ExNDAwLAorMHhkNDAwNjQsCisweDgwMDA4ZCwKKzB4MDAwMDAwLAorMHhjNDE0MzIsCisweGM2MTg0MywKKzB4YzQwODJmLAorMHg5NTQwMDUsCisweGM0MGMzMCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4OTU4M2Y1LAorMHhjNDEwMzEsCisweGQ0NDAzMywKKzB4ZDUyMDY1LAorMHhkNGEwMWMsCisweGQ0ZTAxYywKKzB4ZDUyMDFjLAorMHhlNDAxNWUsCisweGQ0MDAxZSwKKzB4ODAwMDAwLAorMHgwNjIwMDEsCisweGNhMTgwMCwKKzB4MGEyMDAxLAorMHhkNjAwNzYsCisweGM0MDgzNiwKKzB4OTg4MDA3LAorMHhjNjEwNDUsCisweDk1MDExMCwKKzB4ZDQwMDFmLAorMHhkNDYwNjIsCisweDgwMDAwMCwKKzB4ZDQyMDYyLAorMHhjYzM4MzUsCisweGNjMTQzMywKKzB4ODQwMWJiLAorMHhkNDAwNzIsCisweGQ1NDAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGUyMDAxYSwKKzB4ODQwMWJiLAorMHhlMjAwMWEsCisweGNjMTA0YiwKKzB4Y2MwNDQ3LAorMHgyYzk0MDEsCisweDdkMDk4YiwKKzB4OTg0MDA1LAorMHg3ZDE1Y2IsCisweGQ0MDAxYSwKKzB4ODAwMWI4LAorMHhkNDAwNmQsCisweDM0NDQwMSwKKzB4Y2MwYzQ4LAorMHg5ODQwM2EsCisweGNjMmM0YSwKKzB4OTU4MDA0LAorMHhjYzA0NDksCisweDgwMDFiOCwKKzB4ZDQwMDFhLAorMHhkNGMwMWEsCisweDI4MjgwMSwKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxYiwKKzB4MDQzODBjLAorMHg4NDAwZjAsCisweGNjMTAwMywKKzB4OTg4MDE3LAorMHgwNDM4MDgsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMTMsCisweDA0MzgwNCwKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxNCwKKzB4Y2MxMDRjLAorMHg5YTgwMDksCisweGNjMTQ0ZCwKKzB4OTg0MGRjLAorMHhkNDAwNmQsCisweGNjMTg0OCwKKzB4ZDUwMDFhLAorMHhkNTQwMWEsCisweDgwMDBjOSwKKzB4ZDU4MDFhLAorMHg5NmMwZDUsCisweGQ0MDA2ZCwKKzB4ODAwMWI4LAorMHhkNDAwNmUsCisweDlhYzAwMywKKzB4ZDQwMDZkLAorMHhkNDAwNmUsCisweDgwMDAwMCwKKzB4ZWMwMDdmLAorMHg5YWMwY2MsCisweGQ0MDA2ZCwKKzB4ODAwMWI4LAorMHhkNDAwNmUsCisweGNjMTQwMywKKzB4Y2MxODAzLAorMHhjYzFjMDMsCisweDdkOTEwMywKKzB4N2RkNTgzLAorMHg3ZDE5MGMsCisweDM1Y2MxZiwKKzB4MzU3MDFmLAorMHg3Y2YwY2IsCisweDdjZDA4YiwKKzB4ODgwMDAwLAorMHg3ZThlOGIsCisweDk1YzAwNCwKKzB4ZDQwMDZlLAorMHg4MDAxYjgsCisweGQ0MDAxYSwKKzB4ZDRjMDFhLAorMHhjYzA4MDMsCisweGNjMGMwMywKKzB4Y2MxMDAzLAorMHhjYzE0MDMsCisweGNjMTgwMywKKzB4Y2MxYzAzLAorMHhjYzI0MDMsCisweGNjMjgwMywKKzB4MzVjNDFmLAorMHgzNmIwMWYsCisweDdjNzA0YiwKKzB4MzRmMDFmLAorMHg3YzcwNGIsCisweDM1NzAxZiwKKzB4N2M3MDRiLAorMHg3ZDg4ODEsCisweDdkY2NjMSwKKzB4N2U1MTAxLAorMHg3ZTk1NDEsCisweDdjOTA4MiwKKzB4N2NkNGMyLAorMHg3Yzg0OGIsCisweDlhYzAwMywKKzB4N2M4YzhiLAorMHgyYzg4MDEsCisweDk4ODA5ZSwKKzB4ZDQwMDZkLAorMHg5ODQwOWMsCisweGQ0MDA2ZSwKKzB4Y2MwODRjLAorMHhjYzBjNGQsCisweGNjMTA0OCwKKzB4ZDQ4MDFhLAorMHhkNGMwMWEsCisweDgwMDEwMSwKKzB4ZDUwMDFhLAorMHhjYzA4MzIsCisweGQ0MDAzMiwKKzB4OTQ4MmQ5LAorMHhjYTBjMDAsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhkNDAwMWUsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhkNDQwMWUsCisweGNhMTQwMCwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweGQ1MDAxZSwKKzB4ZDU0MDFlLAorMHhkNTQwMzQsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHgyODA0MDQsCisweGUyMDAxYSwKKzB4ZTIwMDFhLAorMHhkNDQwMWEsCisweGNhMzgwMCwKKzB4Y2MwODAzLAorMHhjYzBjMDMsCisweGNjMGMwMywKKzB4Y2MwYzAzLAorMHg5ODgyYmQsCisweDAwMDAwMCwKKzB4ODQwMWJiLAorMHhkN2EwNmYsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhjYTA0MDAsCisweGMyZmYwMCwKKzB4Y2MwODM0LAorMHhjMTNmZmYsCisweDdjNzRjYiwKKzB4N2NjOTBiLAorMHg3ZDAxMGYsCisweDk5MDJiMCwKKzB4N2M3MzhiLAorMHg4NDAxYmIsCisweGQ3YTA2ZiwKKzB4ODAwMDAwLAorMHhlZTAwMWYsCisweGNhMDgwMCwKKzB4MjgxOTAwLAorMHg3ZDg5OGIsCisweDk1ODAxNCwKKzB4MjgxNDA0LAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4Y2ExYzAwLAorMHhjYTI0MDAsCisweGUyMDAxZiwKKzB4ZDRjMDFhLAorMHhkNTAwMWEsCisweGQ1NDAxYSwKKzB4Y2MxODAzLAorMHhjYzJjMDMsCisweGNjMmMwMywKKzB4Y2MyYzAzLAorMHg3ZGE1OGIsCisweDdkOWM0NywKKzB4OTg0Mjk3LAorMHgwMDAwMDAsCisweDgwMDE2MSwKKzB4ZDRjMDFhLAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTA4MDAsCisweDI0OGMwNiwKKzB4MGNjYzA2LAorMHg5OGMwMDYsCisweGNjMTA0ZSwKKzB4OTkwMDA0LAorMHhkNDAwNzMsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHgzNGQwMTgsCisweDI1MTAwMSwKKzB4OTUwMDIxLAorMHhjMTdmZmYsCisweGNhMTAwMCwKKzB4Y2ExNDAwLAorMHhjYTE4MDAsCisweGQ0ODAxZCwKKzB4ZDRjMDFkLAorMHg3ZGIxOGIsCisweGMxNDIwMiwKKzB4YzJjMDAxLAorMHhkNTgwMWQsCisweDM0ZGMwZSwKKzB4N2Q1ZDRjLAorMHg3ZjczNGMsCisweGQ3NDAxZSwKKzB4ZDUwMDFlLAorMHhkNTQwMWUsCisweGMxNDIwMCwKKzB4YzJjMDAwLAorMHgwOTljMDEsCisweDMxZGMxMCwKKzB4N2Y1ZjRjLAorMHg3ZjczNGMsCisweDA0MjgwMiwKKzB4N2Q4MzgwLAorMHhkNWE4NmYsCisweGQ1ODA2NiwKKzB4ZDc0MDFlLAorMHhlYzAwNWUsCisweGM4MjQwMiwKKzB4YzgyNDAyLAorMHg4MDAxYjgsCisweGQ2MDA3NiwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhkNDAwMWYsCisweDgwMDAwMCwKKzB4ZDQwMDFmLAorMHhkNDAwMWYsCisweDg4MDAwMCwKKzB4ZDQwMDFmLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMTAxNzEsCisweDAyMDE3OCwKKzB4MDMwMDhmLAorMHgwNDAwN2YsCisweDA1MDAwMywKKzB4MDYwMDNmLAorMHgwNzAwMzIsCisweDA4MDEyYywKKzB4MDkwMDQ2LAorMHgwYTAwMzYsCisweDEwMDFiNiwKKzB4MTcwMGEyLAorMHgyMjAxM2EsCisweDIzMDE0OSwKKzB4MjAwMGI0LAorMHgyNDAxMjUsCisweDI3MDA0ZCwKKzB4MjgwMDZhLAorMHgyYTAwNjAsCisweDJiMDA1MiwKKzB4MmYwMDY1LAorMHgzMjAwODcsCisweDM0MDE3ZiwKKzB4M2MwMTU2LAorMHgzZjAwNzIsCisweDQxMDE4YywKKzB4NDQwMTJlLAorMHg1NTAxNzMsCisweDU2MDE3YSwKKzB4NjAwMDBiLAorMHg2MTAwMzQsCisweDYyMDAzOCwKKzB4NjMwMDM4LAorMHg2NDAwMzgsCisweDY1MDAzOCwKKzB4NjYwMDM4LAorMHg2NzAwMzgsCisweDY4MDAzYSwKKzB4NjkwMDQxLAorMHg2YTAwNDgsCisweDZiMDA0OCwKKzB4NmMwMDQ4LAorMHg2ZDAwNDgsCisweDZlMDA0OCwKKzB4NmYwMDQ4LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCit9OworCitzdGF0aWMgY29uc3QgdTMyIFJWNjcwX2NwX21pY3JvY29kZVtdWzNdID0geworICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjg0NjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMTAwMDAsIDB4YzAyOTQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwZjAwLCAweDAwMjgxNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDhkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDE4IH0sCisgICAgeyAweDAwNDEyMDAwLCAweDAwNDA0ODExLCAweDAxOSB9LAorICAgIHsgMHgwMDQyMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHg5MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjExNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMTFhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjgxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2ExNDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmYywgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHgyMDAwMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIyMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDM4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDAzNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwMzcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOSwgMHgwMDQwMTIyZCwgMHgwNDYgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwM2UgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA0MDFjMTEsIDB4MDQxIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDdmYzAwMDAwLCAweDAwMjgxYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNjNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgxMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMTQwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDRiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjkwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZjgwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMmMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMmIsIDB4MDAwIH0sCisgICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNjEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDVmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA1ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYiwgMHgwMDQwMTIyZCwgMHgwNmEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODE2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2EzLCAweDAwMCB9LAorICAgIHsgMHgzZmZmZmMwMCwgMHgwMDI5MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2ZCB9LAorICAgIHsgMHgwMDAwMDEwMCwgMHgwMDQwMWMxMSwgMHgwNzAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGYwLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjBmZiwgMHgwMDI4MWEzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGU2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAxOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4M2ZmZmZmZmYsIDB4MDAyODRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjkxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODMgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGE0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDhhIH0sCisgICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwOGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjU5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0ZCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDhkIH0sCisgICAgeyAweDAwMDAwMDEyLCAweGMwNDAzNjIwLCAweDA5MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDkwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5MiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOTIgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDk4IH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MGEwIH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDllIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5ZCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOWYgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCisgICAgeyAweDAwM2YwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjEwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYTcgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYWEgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjEwZTJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA3ZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwYjMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCisgICAgeyAweDk5ODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MWNlNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDcsIDB4MTJmIH0sCisgICAgeyAweDliMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4OWMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMxNDZmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAzYzA1LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBjYiB9LAorICAgIHsgMHgwMGY4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OTgwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4MGRjIH0sCisgICAgeyAweDAwMDAwMGYwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBhMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MGRhIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ1IH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDQgfSwKKyAgICB7IDB4MDAwMDNmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCisgICAgeyAweDAwMDAxZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAorICAgIHsgMHgwMDAwMGYwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAzODAwMDksIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDNmMDAwMDAwLCAweDAwMjgwZTJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDA0OTRhMjMsIDB4MGRjIH0sCisgICAgeyAweDAwMzgwZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg2ODAwMDAwNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTIwMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDBmZjAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDgwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDgzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZWEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjUzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDBlYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTYgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjIwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDEwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBlZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MGY4IH0sCisgICAgeyAweDAwMDAwMDBiLCAweDAwMjEwMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZjggfSwKKyAgICB7IDB4MDAwMDA0MDAsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGZkIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEwYiB9LAorICAgIHsgMHgwMDAwYTMwZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDQgfSwKKyAgICB7IDB4ZmZmZmZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDcgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMGEgfSwKKyAgICB7IDB4MDAwMDAwZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAyYzQwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDExMiB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDQwMjI0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDQyNGEyMCwgMHgxMTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjAxMDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTFiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMTIyNCwgMHgxMTcgfSwKKyAgICB7IDB4ZmZiZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMmUgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyMGUzMCwgMHgwMDAgfSwKKyAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDBlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwN2Y4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2N2IgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4MTM1IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDEzYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDE0NjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzQxODgyLCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE0NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwNjgxYTIwLCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE1OCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzAwYTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MThmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjFlMjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzA0OGViLCAweDE5YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4NDAzMzA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMzAyNDA5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MTgxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgxODYgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxODYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDE4MiB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4MTk3IH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3ODA0MmEsIDB4MmZiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODA5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTc0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE5NCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHg0NjAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTliIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzA4MTFhMjAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmYmZmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMTAwLCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDYyMWUyOCwgMHgxMmYgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA4MjIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDJjMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCisgICAgeyAweDAwMDBjMDA4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MWI5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4MzkwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDJlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2IwZDYzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAxMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjEwNjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgyMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTI2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYyNjI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWUwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA4MSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA4MCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFkYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWQ4IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODJhMmEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDFkMSB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAzMDRhMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDFlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFlNSB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAxODExLCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFmOCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyOCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyMywgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MDMsIDB4MjA1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUyNCwgMHgyMDUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDE0YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyMDAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMjQwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY3YiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJiMTQwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA5MDE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyOTRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzQxNDY1LCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTkgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjM4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwNDBmLCAweDIxMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MjQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjM4IH0sCisgICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTljIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjMyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyMzYgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyMzYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjMzIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDJmYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjI0IH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDI0YyB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwODAxMDEsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyNTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjdjIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MjZhIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI1ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjExZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWM0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjY3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjZhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYzEgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MSB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzUgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlOSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjU2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwODgxYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MjQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNzAwMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJhLCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDI5MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2OTFjZTIsIDB4MTJmIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyOWQgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwNDAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHhjMDIyMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGExMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2UzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2U0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkOSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmQ5IH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjUwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDgwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2ExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzgwOGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDg0MSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MzE4IH0sCisgICAgeyAweGZmZmZmZmVmLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweGMwNDg0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzOCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDQwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMwNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4YzAzMDRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwYTIyLCAweDM0YiB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzU0IH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNjIgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODAyLCAweDM2YSB9LAorICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNjYgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWIzIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgzNWQgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDQ5LCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNmMgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzgyIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYWQgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhZiB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4Mzk4IH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTQgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhNCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzhjIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDgwMDAwMDAsIDB4MDAyOTBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwODAwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweGMwMjIxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM4ZSB9LAorICAgIHsgMHgwMDAwMjEwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5YSB9LAorICAgIHsgMHgwMDAwMjEwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzYWEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2M0IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNiOCB9LAorICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHhiYWJlY2FmZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNzAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2M5IH0sCisgICAgeyAweDhjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDQwMDAwMDAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZDcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDE4MDAsIDB4M2RhIH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNiwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDFjMDAsIDB4M2UwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNywgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjBjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTQ4ZTgsIDB4MDAwIH0sCisgICAgeyAweGE1ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDA4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweGMwMjEwMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZWQgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDQ4MTIyMCwgMHgzZjUgfSwKKyAgICB7IDB4YTc4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MDggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDg4MywgMHgwMDAgfSwKKyAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDA4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHhhOTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDA0MDBjMTEsIDB4M2YwIH0sCisgICAgeyAweGFiODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDQwMGMxMSwgMHgzZjAgfSwKKyAgICB7IDB4YWQ4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwNDAwYzExLCAweDNmMCB9LAorICAgIHsgMHhiMzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYzZmMsIDB4MDA0MDBjMTEsIDB4M2YwIH0sCisgICAgeyAweGFmODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDQwMGMxMSwgMHgzZjAgfSwKKyAgICB7IDB4YjE4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmMDAwLCAweDAwNDAwYzExLCAweDNmMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMTE4MjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDIxOGEwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAzMThjMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNDE4ZjhlMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDUxOGY4ODAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA2MThlMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNzE4ZjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDgxOGYzZmMsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDI5MGM0MCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4ODYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAorICAgIHsgMHg4NTAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDIsIDB4NDNlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDIwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDI4MGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ1NCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI0LCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0NTkgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA1LCAweDY4MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjRmMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyODBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NjAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA0ZTAwMDAwLCAweDQ3OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0ODYgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJlMDAwMDAsIDB4NDc5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDZhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0ODYgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3NCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4NDc5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGUwMDAwMCwgMHg0NzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjEwYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0ODMgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwOCwgMHg0NGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHg0MDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDQ5NiB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHhjMDQ5NGEyMCwgMHg0OTcgfSwKKyAgICB7IDB4ZmZmYmZmZmYsIDB4YzAyODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ5ZiB9LAorICAgIHsgMHhhMDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OWQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRiNiB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjgxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRiYSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjMSB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGMzIH0sCisgICAgeyAweDAwMDAyMTgwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGYzIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgxOGUwMGMxMSwgMHg0ZTIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDhjMDQ4MDAsIDB4NGQ2IH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGM4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OWQgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGY4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweGI1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiNzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiYTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGJiMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YmMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmM2ZjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGZmLCAweDAwMjgwZTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTBjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MjEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmZlMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweGYxZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHhjMDIyMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4NDAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDg3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDlkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHg0MDIxNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4OTYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMjIyMywgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDE0YTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMWEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MTAwMDAwMDAsIDB4MDAyODFhMjYsIDB4MDAwIH0sCisgICAgeyAweGVmZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5MzhjZSwgMHg2NmEgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4NDAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDMwMCwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDU1OSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAyMDAwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTYxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1NmYgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2MSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU2ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTY1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1NmYgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2ZCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjgxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAxYzEwLCAweDU2ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDU3MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YmMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU4MiB9LAorICAgIHsgMHgwMDAwYTJiNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDBhMmM0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NTgwIH0sCisgICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTkzIH0sCisgICAgeyAweDAwMDBhMmJiLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiYSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEyYzUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OTEgfSwKKyAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YTQgfSwKKyAgICB7IDB4MDAwMGEyYmYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJlLCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwYTJjNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDVhMiB9LAorICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwYTJjNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDViMSB9LAorICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4ODUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMzA0YSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDEwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDViNyB9LAorICAgIHsgMHhhNDAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDViYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVjMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDA0MDM2MjEsIDB4NWQ2IH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDVkNiB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDkyLCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwOTMsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDMyLCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDM1LCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJjMiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjFmIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjFmIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdlMDAsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg1ZjggfSwKKyAgICB7IDB4MDAwMGEwOTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMxLCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTA5MywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmI2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYmEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM0LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJiZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmMyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMWZmLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjFlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MDEgfSwKKyAgICB7IDB4MDAwNGEwMDMsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDBhMDAzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYwNiB9LAorICAgIHsgMHgwMDA0YTAxMCwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYxZSB9LAorICAgIHsgMHgwMDA0YTAxMSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxMiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxMywgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNCwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNywgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDA2MmQsIDB4MDAwIH0sCisgICAgeyAweGZmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwZWUwMDAwMCwgMHg2MzAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAxMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjM0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDViYyB9LAorICAgIHsgMHg5ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDYzNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4OTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDQ4MTEsIDB4NjIwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDYyMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NGQgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2YSB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDA5ODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHg2NDcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmYiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmNywgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmEgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDE4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2N2IgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDA0MDRjMTEsIDB4NjYxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgzOGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAzMDEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDY0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg2N2EgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjIyLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTEwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwNDAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjdjIH0sCisgICAgeyAweDlmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjdmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg2ODEgfSwKKyAgICB7IDB4OWUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg2ODQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMTQyMDRmNSwgMHgwNWIzMDI1MCwgMHgwMDAgfSwKKyAgICB7IDB4MDFjMzAxNjgsIDB4MDQzNTA1YjMsIDB4MDAwIH0sCisgICAgeyAweDAyMjUwMjA5LCAweDAyNTAwMTUxLCAweDAwMCB9LAorICAgIHsgMHgwMjIzMDI0NSwgMHgwMmEwMDI0MSwgMHgwMDAgfSwKKyAgICB7IDB4MDNjZDA1YjMsIDB4MDViMzA1YjMsIDB4MDAwIH0sCisgICAgeyAweDA2M2MwNjNkLCAweDAzMWYwNWIzLCAweDAwMCB9LAorICAgIHsgMHgwNWIzMDViOCwgMHgwMzIwMDM0MCwgMHgwMDAgfSwKKyAgICB7IDB4MDMyYTAyODIsIDB4MDM0MjAzMzQsIDB4MDAwIH0sCisgICAgeyAweDA1YjMwNWIzLCAweDA1YjMwNWIzLCAweDAwMCB9LAorICAgIHsgMHgwNWIzMDU0NCwgMHgwNWIzMDViMywgMHgwMDAgfSwKKyAgICB7IDB4MDNiMjA1YjMsIDB4MDRhZTAzNDQsIDB4MDAwIH0sCisgICAgeyAweDA0OGQwNDQzLCAweDA0MzMwNWIzLCAweDAwMCB9LAorICAgIHsgMHgwNGMzMDViMywgMHgwNDM3MDRkMCwgMHgwMDAgfSwKKyAgICB7IDB4MDQ0MzA0ZmEsIDB4MDM1MTAzNzEsIDB4MDAwIH0sCisgICAgeyAweDA1YjMwNWIzLCAweDA1YjMwNWIzLCAweDAwMCB9LAorICAgIHsgMHgwNWIzMDViMywgMHgwNWIzMDViMywgMHgwMDAgfSwKKyAgICB7IDB4MDViMzA1YjMsIDB4MDYzMjA1YmEsIDB4MDAwIH0sCisgICAgeyAweDA1YjMwNWIzLCAweDAwMDcwNWIzLCAweDAwMCB9LAorICAgIHsgMHgwNWIzMDViMywgMHgwNWIzMDViMywgMHgwMDAgfSwKKyAgICB7IDB4MDViMzA1YjMsIDB4MDViMzA1YjMsIDB4MDAwIH0sCisgICAgeyAweDAzZWUwM2UzLCAweDAzZmUwM2ZjLCAweDAwMCB9LAorICAgIHsgMHgwNDA0MDQwMCwgMHgwNDAyMDQwNiwgMHgwMDAgfSwKKyAgICB7IDB4MDQxMjA0MGUsIDB4MDQxYTA0MTYsIDB4MDAwIH0sCisgICAgeyAweDA0MjIwNDFlLCAweDA0MmEwNDI2LCAweDAwMCB9LAorICAgIHsgMHgwNWIzMDViMywgMHgwNDJlMDViMywgMHgwMDAgfSwKKyAgICB7IDB4MDViMzA1YjMsIDB4MDViMzA1YjMsIDB4MDAwIH0sCisgICAgeyAweDA1YjMwNWIzLCAweDA1YjMwNWIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAyMDY2OCwgMHgwNjg2MDAwNiwgMHgwMDAgfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY2NzBfcGZwX21pY3JvY29kZVtdID0geworMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHg3YzAzOGIsCisweDgwMDFiOCwKKzB4N2MwMzhiLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4YzQxODM4LAorMHhjYTI0MDAsCisweGNhMjgwMCwKKzB4OTU4MWE4LAorMHhjNDFjM2EsCisweGMzYzAwMCwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweDdjNzQ0YiwKKzB4YzIwMDA1LAorMHg5OWMwMDAsCisweGM0MWMzYSwKKzB4N2M3NDRjLAorMHhjMGZmZjAsCisweDA0MmMwNCwKKzB4MzA5MDAyLAorMHg3ZDI1MDAsCisweDM1MTQwMiwKKzB4N2QzNTBiLAorMHgyNTU0MDMsCisweDdjZDU4MCwKKzB4MjU5YzAzLAorMHg5NWMwMDQsCisweGQ1MDAxYiwKKzB4N2VkZGMxLAorMHg3ZDlkODAsCisweGQ2ODAxYiwKKzB4ZDU4MDFiLAorMHhkNDQwMWUsCisweGQ1NDAxZSwKKzB4ZDY0MDFlLAorMHhkNjgwMWUsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHg5NzgzZDMsCisweGQ1YzAxZSwKKzB4Y2EwODAwLAorMHg4MDAwMWEsCisweGNhMGMwMCwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweDgwMDAwYywKKzB4YzQxODM4LAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ODAwMDBjLAorMHhjNDE4MzgsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2ExODAwLAorMHhkNDQwMWUsCisweGQ1ODAxZSwKKzB4ODAwMDUzLAorMHhkNDAwNzUsCisweGQ0NDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4ZDQ4MDE5LAorMHhkNGMwMTgsCisweGQ1MDAxNywKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweGQ1MDAxZSwKKzB4ZTIwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTA4MDAsCisweGQ0ODA2MCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGQ0ODAxZSwKKzB4Y2EwODAwLAorMHhkNDgwNjEsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhkNDgwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhkNDQwMWUsCisweGQ0ODAxNiwKKzB4ZDRjMDE2LAorMHhkNDgwMWUsCisweDgwMDFiOCwKKzB4ZDRjMDFlLAorMHhjNjA4NDMsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5NDgwMDQsCisweGNhMTQwMCwKKzB4ZTQyMGYzLAorMHhkNDIwMTMsCisweGQ1NjA2NSwKKzB4ZDRlMDFjLAorMHhkNTIwMWMsCisweGQ1NjAxYywKKzB4ODAwMDAwLAorMHgwNjIwMDEsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk0ODNmNywKKzB4Y2ExNDAwLAorMHhlNDIwZjMsCisweDgwMDA3OSwKKzB4ZDQyMDEzLAorMHhjNjA4NDMsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5ODgzZWYsCisweGNhMTQwMCwKKzB4ZDQwMDY0LAorMHg4MDAwOGQsCisweDAwMDAwMCwKKzB4YzQxNDMyLAorMHhjNjE4NDMsCisweGM0MDgyZiwKKzB4OTU0MDA1LAorMHhjNDBjMzAsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweDk1ODNmNSwKKzB4YzQxMDMxLAorMHhkNDQwMzMsCisweGQ1MjA2NSwKKzB4ZDRhMDFjLAorMHhkNGUwMWMsCisweGQ1MjAxYywKKzB4ZTQwMTVlLAorMHhkNDAwMWUsCisweDgwMDAwMCwKKzB4MDYyMDAxLAorMHhjYTE4MDAsCisweDBhMjAwMSwKKzB4ZDYwMDc2LAorMHhjNDA4MzYsCisweDk4ODAwNywKKzB4YzYxMDQ1LAorMHg5NTAxMTAsCisweGQ0MDAxZiwKKzB4ZDQ2MDYyLAorMHg4MDAwMDAsCisweGQ0MjA2MiwKKzB4Y2MzODM1LAorMHhjYzE0MzMsCisweDg0MDFiYiwKKzB4ZDQwMDcyLAorMHhkNTQwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHhlMjAwMWEsCisweDg0MDFiYiwKKzB4ZTIwMDFhLAorMHhjYzEwNGIsCisweGNjMDQ0NywKKzB4MmM5NDAxLAorMHg3ZDA5OGIsCisweDk4NDAwNSwKKzB4N2QxNWNiLAorMHhkNDAwMWEsCisweDgwMDFiOCwKKzB4ZDQwMDZkLAorMHgzNDQ0MDEsCisweGNjMGM0OCwKKzB4OTg0MDNhLAorMHhjYzJjNGEsCisweDk1ODAwNCwKKzB4Y2MwNDQ5LAorMHg4MDAxYjgsCisweGQ0MDAxYSwKKzB4ZDRjMDFhLAorMHgyODI4MDEsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMWIsCisweDA0MzgwYywKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxNywKKzB4MDQzODA4LAorMHg4NDAwZjAsCisweGNjMTAwMywKKzB4OTg4MDEzLAorMHgwNDM4MDQsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMTQsCisweGNjMTA0YywKKzB4OWE4MDA5LAorMHhjYzE0NGQsCisweDk4NDBkYywKKzB4ZDQwMDZkLAorMHhjYzE4NDgsCisweGQ1MDAxYSwKKzB4ZDU0MDFhLAorMHg4MDAwYzksCisweGQ1ODAxYSwKKzB4OTZjMGQ1LAorMHhkNDAwNmQsCisweDgwMDFiOCwKKzB4ZDQwMDZlLAorMHg5YWMwMDMsCisweGQ0MDA2ZCwKKzB4ZDQwMDZlLAorMHg4MDAwMDAsCisweGVjMDA3ZiwKKzB4OWFjMGNjLAorMHhkNDAwNmQsCisweDgwMDFiOCwKKzB4ZDQwMDZlLAorMHhjYzE0MDMsCisweGNjMTgwMywKKzB4Y2MxYzAzLAorMHg3ZDkxMDMsCisweDdkZDU4MywKKzB4N2QxOTBjLAorMHgzNWNjMWYsCisweDM1NzAxZiwKKzB4N2NmMGNiLAorMHg3Y2QwOGIsCisweDg4MDAwMCwKKzB4N2U4ZThiLAorMHg5NWMwMDQsCisweGQ0MDA2ZSwKKzB4ODAwMWI4LAorMHhkNDAwMWEsCisweGQ0YzAxYSwKKzB4Y2MwODAzLAorMHhjYzBjMDMsCisweGNjMTAwMywKKzB4Y2MxNDAzLAorMHhjYzE4MDMsCisweGNjMWMwMywKKzB4Y2MyNDAzLAorMHhjYzI4MDMsCisweDM1YzQxZiwKKzB4MzZiMDFmLAorMHg3YzcwNGIsCisweDM0ZjAxZiwKKzB4N2M3MDRiLAorMHgzNTcwMWYsCisweDdjNzA0YiwKKzB4N2Q4ODgxLAorMHg3ZGNjYzEsCisweDdlNTEwMSwKKzB4N2U5NTQxLAorMHg3YzkwODIsCisweDdjZDRjMiwKKzB4N2M4NDhiLAorMHg5YWMwMDMsCisweDdjOGM4YiwKKzB4MmM4ODAxLAorMHg5ODgwOWUsCisweGQ0MDA2ZCwKKzB4OTg0MDljLAorMHhkNDAwNmUsCisweGNjMDg0YywKKzB4Y2MwYzRkLAorMHhjYzEwNDgsCisweGQ0ODAxYSwKKzB4ZDRjMDFhLAorMHg4MDAxMDEsCisweGQ1MDAxYSwKKzB4Y2MwODMyLAorMHhkNDAwMzIsCisweDk0ODJkOSwKKzB4Y2EwYzAwLAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZDQwMDFlLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4ZDQ0MDFlLAorMHhjYTE0MDAsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHhkNTAwMWUsCisweGQ1NDAxZSwKKzB4ZDU0MDM0LAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4MjgwNDA0LAorMHhlMjAwMWEsCisweGUyMDAxYSwKKzB4ZDQ0MDFhLAorMHhjYTM4MDAsCisweGNjMDgwMywKKzB4Y2MwYzAzLAorMHhjYzBjMDMsCisweGNjMGMwMywKKzB4OTg4MmJkLAorMHgwMDAwMDAsCisweDg0MDFiYiwKKzB4ZDdhMDZmLAorMHg4MDAwMDAsCisweGVlMDAxZiwKKzB4Y2EwNDAwLAorMHhjMmZmMDAsCisweGNjMDgzNCwKKzB4YzEzZmZmLAorMHg3Yzc0Y2IsCisweDdjYzkwYiwKKzB4N2QwMTBmLAorMHg5OTAyYjAsCisweDdjNzM4YiwKKzB4ODQwMWJiLAorMHhkN2EwNmYsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhjYTA4MDAsCisweDI4MTkwMCwKKzB4N2Q4OThiLAorMHg5NTgwMTQsCisweDI4MTQwNCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGNhMWMwMCwKKzB4Y2EyNDAwLAorMHhlMjAwMWYsCisweGQ0YzAxYSwKKzB4ZDUwMDFhLAorMHhkNTQwMWEsCisweGNjMTgwMywKKzB4Y2MyYzAzLAorMHhjYzJjMDMsCisweGNjMmMwMywKKzB4N2RhNThiLAorMHg3ZDljNDcsCisweDk4NDI5NywKKzB4MDAwMDAwLAorMHg4MDAxNjEsCisweGQ0YzAxYSwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2EwODAwLAorMHgyNDhjMDYsCisweDBjY2MwNiwKKzB4OThjMDA2LAorMHhjYzEwNGUsCisweDk5MDAwNCwKKzB4ZDQwMDczLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4MzRkMDE4LAorMHgyNTEwMDEsCisweDk1MDAyMSwKKzB4YzE3ZmZmLAorMHhjYTEwMDAsCisweGNhMTQwMCwKKzB4Y2ExODAwLAorMHhkNDgwMWQsCisweGQ0YzAxZCwKKzB4N2RiMThiLAorMHhjMTQyMDIsCisweGMyYzAwMSwKKzB4ZDU4MDFkLAorMHgzNGRjMGUsCisweDdkNWQ0YywKKzB4N2Y3MzRjLAorMHhkNzQwMWUsCisweGQ1MDAxZSwKKzB4ZDU0MDFlLAorMHhjMTQyMDAsCisweGMyYzAwMCwKKzB4MDk5YzAxLAorMHgzMWRjMTAsCisweDdmNWY0YywKKzB4N2Y3MzRjLAorMHgwNDI4MDIsCisweDdkODM4MCwKKzB4ZDVhODZmLAorMHhkNTgwNjYsCisweGQ3NDAxZSwKKzB4ZWMwMDVlLAorMHhjODI0MDIsCisweGM4MjQwMiwKKzB4ODAwMWI4LAorMHhkNjAwNzYsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHg4MDAwMDAsCisweGVlMDAxZiwKKzB4ZDQwMDFmLAorMHg4MDAwMDAsCisweGQ0MDAxZiwKKzB4ZDQwMDFmLAorMHg4ODAwMDAsCisweGQ0MDAxZiwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDEwMTcxLAorMHgwMjAxNzgsCisweDAzMDA4ZiwKKzB4MDQwMDdmLAorMHgwNTAwMDMsCisweDA2MDAzZiwKKzB4MDcwMDMyLAorMHgwODAxMmMsCisweDA5MDA0NiwKKzB4MGEwMDM2LAorMHgxMDAxYjYsCisweDE3MDBhMiwKKzB4MjIwMTNhLAorMHgyMzAxNDksCisweDIwMDBiNCwKKzB4MjQwMTI1LAorMHgyNzAwNGQsCisweDI4MDA2YSwKKzB4MmEwMDYwLAorMHgyYjAwNTIsCisweDJmMDA2NSwKKzB4MzIwMDg3LAorMHgzNDAxN2YsCisweDNjMDE1NiwKKzB4M2YwMDcyLAorMHg0MTAxOGMsCisweDQ0MDEyZSwKKzB4NTUwMTczLAorMHg1NjAxN2EsCisweDYwMDAwYiwKKzB4NjEwMDM0LAorMHg2MjAwMzgsCisweDYzMDAzOCwKKzB4NjQwMDM4LAorMHg2NTAwMzgsCisweDY2MDAzOCwKKzB4NjcwMDM4LAorMHg2ODAwM2EsCisweDY5MDA0MSwKKzB4NmEwMDQ4LAorMHg2YjAwNDgsCisweDZjMDA0OCwKKzB4NmQwMDQ4LAorMHg2ZTAwNDgsCisweDZmMDA0OCwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBSUzc4MF9jcF9taWNyb2NvZGVbXVszXSA9IHsKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4NDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWRlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMGYwMCwgMHgwMDI4MTYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHg4ZDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAxOCB9LAorICAgIHsgMHgwMDQxMjAwMCwgMHgwMDQwNDgxMSwgMHgwMTkgfSwKKyAgICB7IDB4MDA0MjIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhlMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4OTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIxMTYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjExYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMTQwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmMsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjIwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKKyAgICB7IDB4MjAwMDAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjEwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzOCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwMzUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDM3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDAzOSB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDksIDB4MDA0MDEyMmQsIDB4MDQ2IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDAzOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDNlIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwNDAxYzExLCAweDA0MSB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MWEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYzcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MTIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDE0MDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDA0YiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDI5MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhmZmY4MDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTJjMDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTJiLCAweDAwMCB9LAorICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDYxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA1ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwNWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDA2MiB9LAorICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGIsIDB4MDA0MDEyMmQsIDB4MDZhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDdmYzAwMDAwLCAweDAwMjgxNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzE2MjUsIDB4MDAwIH0sCisgICAgeyAweDgwMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNhMywgMHgwMDAgfSwKKyAgICB7IDB4M2ZmZmZjMDAsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNmQgfSwKKyAgICB7IDB4MDAwMDAxMDAsIDB4MDA0MDFjMTEsIDB4MDcwIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwZmYsIDB4MDAyODFhMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDI4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMTgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDNmZmZmZmZmLCAweDAwMjg0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDI5MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI1LCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDgzIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDg0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDA4YSB9LAorICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDhhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVmZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZjMgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA4ZCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHhjMDQwMzYyMCwgMHgwOTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDkxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5MCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOTIgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA5OCB9LAorICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDBhMCB9LAorICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOWQgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5ZiB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDNmMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGE3IH0sCisgICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGFhIH0sCisgICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwN2YsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MjcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MGIzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjIxZTMwLCAweDAwMCB9LAorICAgIHsgMHg5OTgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTFjZTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA3LCAweDEyZiB9LAorICAgIHsgMHg5YjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDljMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMTQ2ZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwM2MwNSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwY2IgfSwKKyAgICB7IDB4MDBmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDk4MDAwMDAwLCAweDAwNDA0ODExLCAweDBkYyB9LAorICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwYTAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDBkYSB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNSB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ0IH0sCisgICAgeyAweDAwMDAzZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAorICAgIHsgMHgwMDAwMWYwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKKyAgICB7IDB4MDAwMDBmMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMzgwMDA5LCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgzZjAwMDAwMCwgMHgwMDI4MGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwNDk0YTIzLCAweDBkYyB9LAorICAgIHsgMHgwMDM4MGYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4NjgwMDAwMDcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyMDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwZmYwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA4MCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGVhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVmOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwZWIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWZjIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIyMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAxMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZWYsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDBmOCB9LAorICAgIHsgMHgwMDAwMDAwYiwgMHgwMDIxMDIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGY4IH0sCisgICAgeyAweDAwMDAwNDAwLCAweDAwMjkyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmZCB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMGEzMGYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA0IH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA3IH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTBhIH0sCisgICAgeyAweDAwMDAwMGZmLCAweDAwNDA0ODExLCAweDEwYiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMmM0MDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMTIgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIyNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzA0MjRhMjAsIDB4MTE0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMTAxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDExYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzEyMjQsIDB4MTE3IH0sCisgICAgeyAweGZmYmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTJlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjBlMzAsIDB4MDAwIH0sCisgICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDdmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDA4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjIxIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDEzNSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjIyIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgxM2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQxNDYxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTg4MiwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNDcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDY4MWEyMCwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNTggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMGEyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE4ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxZTI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDcwNDhlYiwgMHgxOWMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDQwMzMwNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDMwMjQwOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDE4MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MTg2IH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxODIgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDE5NyB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzgwNDJhLCAweDJmYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE3NCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxOTQgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4NDYwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE5YiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwODExYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxZTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmJmZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDEwMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA2MjFlMjgsIDB4MTJmIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwODIyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAyYzAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjAwZTJkLCAweDFiZCB9LAorICAgIHsgMHgwMDAwYzAwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDFiOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDM5MDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjAyZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNiMGQ2MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIxMDYyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MjIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEyNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjYyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFlMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFkOCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjgyYTJhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxZDEgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMzA0YTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzAxZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZTUgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMTgxMSwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZjggfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjgsIDB4MDAwIH0sCisgICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTAzLCAweDIwNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MjQsIDB4MjA1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxNGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjAwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDI0MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MjEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYjE0MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwOTAxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjk0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTQ2NSwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjE5IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVkZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDQwZiwgMHgyMTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWQxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVkZSB9LAorICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE5YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDIzMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MjM2IH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjM2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDIzMyB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgyZmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVkMSB9LAorICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyNGMgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDgwMTAxLCAweDAwMjkyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjUxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDI3YyB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDI2YSB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjNDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI2NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmMxIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjAyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzEgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwNDA0ODExLCAweDI3NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4Mjc1IH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwNDA0ODExLCAweDI3NiB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTkgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDI1NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDg4MWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2MjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWQxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJiLCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDcwMDAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2U2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHgyOTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjkxY2UyLCAweDEyZiB9LAorICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjlkIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDQwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4YzAyMjBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHhjMDQwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhhMTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2M0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZDkgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkOSB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWZmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVmNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmE3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDA4MDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM4MDhjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4NDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDMxOCB9LAorICAgIHsgMHhmZmZmZmZlZiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmOGUwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4YzA0ODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWRlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDQwMzA0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHhjMDMwNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzBhMjIsIDB4MzU1IH0sCisgICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjIyIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzNWUgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2YyB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDIsIDB4Mzc0IH0sCisgICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM3MCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MzY3IH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YmEgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM2NyB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMzYyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwNDksIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM3NiB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDgwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOGMgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNiNyB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2I5IH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTIgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhZSB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2FlIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOTYgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwODAwMDAwMCwgMHgwMDI5MGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA4MDAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4YzAyMjE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGE0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4Mzk4IH0sCisgICAgeyAweDAwMDAyMTBlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2E0IH0sCisgICAgeyAweDAwMDAyMTA4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNiNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4Mzc0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzY2UgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2MyIH0sCisgICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweGJhYmVjYWZlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZDMgfSwKKyAgICB7IDB4OGMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDQwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4NDAwMDAwMDAsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMTgwMCwgMHgzZTQgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI2LCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMWMwMCwgMHgzZWEgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI3LCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjgyMGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5NDhlOCwgMHgwMDAgfSwKKyAgICB7IDB4YTU4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHg0MDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4YzAyMTAyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNmNyB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwNDgxMjIwLCAweDNmZiB9LAorICAgIHsgMHhhNzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0ODgzLCAweDAwMCB9LAorICAgIHsgMHg4NDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFkMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweGE5ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYzAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YWI4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmOGUwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhhZDgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ODAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGIzODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjNmYywgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YWY4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhiMTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE0OCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAxMTgyMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMjE4YTAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDMxOGMwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA0MThmOGUwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNTE4Zjg4MCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDYxOGUwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA3MThmMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwODE4ZjNmYywgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzMsIDB4YzAzMDBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAzNDQwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyOTBjNDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDg2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4ODUwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMTAyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ0NyB9LAorICAgIHsgMHgwMDgwMDAwMCwgMHhjMDQ5NGEyMCwgMHg0NDggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDQ1MCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzAyLCAweDQ1MCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDYxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAyMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4NDYxIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjAyMDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyODBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NjkgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNCwgMHg2MjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDZlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNSwgMHg2MjcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyODI0ZjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjgwYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNGUwMDAwMCwgMHg0OGUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDliIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0N2EgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAyZTAwMDAwLCAweDQ4ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OWIgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDhlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5YiB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDg0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0OGUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDliIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDQ4ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OWIgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhlMDAwMDAsIDB4NDhlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5YiB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDk4IH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0YTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDgsIDB4NDYxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4NDAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDQwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YWIgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4YzA0OTRhMjAsIDB4NGFjIH0sCisgICAgeyAweGZmZmJmZmZmLCAweGMwMjg0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGI4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0YjQgfSwKKyAgICB7IDB4YTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZiLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0Y2IgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDYyNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0Y2YgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NjIyIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0ZDYgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2MjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRkOCB9LAorICAgIHsgMHgwMDAwMjE4MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDMzM2UyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDUwOCB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MThlMDBjMTEsIDB4NGY3IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ4YzA0ODAwLCAweDRlYiB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyZCwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjODMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGIyIH0sCisgICAgeyAweDAwMDAwMDJjLCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyZCwgMHhjMDQwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDUwZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHhiNTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBjMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI5MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjg4MCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YmEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiYjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGJjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjNmYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBmZiwgMHgwMDI4MGUzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDUyMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTM2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZTAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHhmMWZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4YzAyMjBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJhLCAweDQwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHg4NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4OWQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDQwMjE0YTIwLCAweDAwMCB9LAorICAgIHsgMHg5NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTE2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIyMjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMTRhOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjExYTI0LCAweDAwMCB9LAorICAgIHsgMHgxMDAwMDAwMCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4ZWZmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDkzOGNlLCAweDYxMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMzAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTZjIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDIwMDAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NzQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU4MiB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTc0IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTgyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NzggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU4MiB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTgwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHg2MjcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDFjMTAsIDB4NTgyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGVlMDAwMDAsIDB4NTg0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTkyIH0sCisgICAgeyAweDAwMDBhMmI3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDI2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OTAgfSwKKyAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YTAgfSwKKyAgICB7IDB4MDAwMGEyYmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMjYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJjNSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU5ZSB9LAorICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVhZSB9LAorICAgIHsgMHgwMDAwYTJiZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM1LCAweDAwMjAyNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MjksIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmM2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWFjIH0sCisgICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJjMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM2LCAweDAwMjAyNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MjksIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmM3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWI4IH0sCisgICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHg4NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzMDRhLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NWJlIH0sCisgICAgeyAweGE0MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NWMzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDVkNiB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVkYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YzMgfSwKKyAgICB7IDB4OTgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg1ZGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNDA0ODExLCAweDVjZCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHg1Y2QgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWYzIH0sCisgICAgeyAweDAwMDFhMmE0LCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNzQgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwOTgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjIyIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4NWVkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmIsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZjcsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4Mzc0IH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAxODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjIxIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwNDA0YzExLCAweDYwNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MzhjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMzAxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA2NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NjIwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyMiwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDQwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhYzAwMDAwLCAweDYyMiB9LAorICAgIHsgMHg5ZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhZTAwMDAwLCAweDYyNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjI3IH0sCisgICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjJhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDE0MjA1MGEsIDB4MDViYTAyNTAsIDB4MDAwIH0sCisgICAgeyAweDAxYzMwMTY4LCAweDA0NDEwNWJhLCAweDAwMCB9LAorICAgIHsgMHgwMjI1MDIwOSwgMHgwMjUwMDE1MSwgMHgwMDAgfSwKKyAgICB7IDB4MDIyMzAyNDUsIDB4MDJhMDAyNDEsIDB4MDAwIH0sCisgICAgeyAweDAzZDcwNWJhLCAweDA1YmEwNWJhLCAweDAwMCB9LAorICAgIHsgMHgwNWUyMDVlMywgMHgwMzFmMDViYSwgMHgwMDAgfSwKKyAgICB7IDB4MDMyMDA1YmYsIDB4MDMyMDAzNGEsIDB4MDAwIH0sCisgICAgeyAweDAzMzQwMjgyLCAweDAzNGMwMzNlLCAweDAwMCB9LAorICAgIHsgMHgwNWJhMDViYSwgMHgwNWJhMDViYSwgMHgwMDAgfSwKKyAgICB7IDB4MDViYTA1NTcsIDB4MDViYTAzMmEsIDB4MDAwIH0sCisgICAgeyAweDAzYmMwNWJhLCAweDA0YzMwMzRlLCAweDAwMCB9LAorICAgIHsgMHgwNGEyMDQ1NSwgMHgwNDNmMDViYSwgMHgwMDAgfSwKKyAgICB7IDB4MDRkODA1YmEsIDB4MDQ0MzA0ZTUsIDB4MDAwIH0sCisgICAgeyAweDA0NTUwNTBmLCAweDAzNWIwMzdiLCAweDAwMCB9LAorICAgIHsgMHgwNWJhMDViYSwgMHgwNWJhMDViYSwgMHgwMDAgfSwKKyAgICB7IDB4MDViYTA1YmEsIDB4MDViYTA1YmEsIDB4MDAwIH0sCisgICAgeyAweDA1YmEwNWJhLCAweDA1ZDgwNWMxLCAweDAwMCB9LAorICAgIHsgMHgwNWJhMDViYSwgMHgwMDA3MDViYSwgMHgwMDAgfSwKKyAgICB7IDB4MDViYTA1YmEsIDB4MDViYTA1YmEsIDB4MDAwIH0sCisgICAgeyAweDA1YmEwNWJhLCAweDA1YmEwNWJhLCAweDAwMCB9LAorICAgIHsgMHgwM2Y4MDNlZCwgMHgwNDA4MDQwNiwgMHgwMDAgfSwKKyAgICB7IDB4MDQwZTA0MGEsIDB4MDQwYzA0MTAsIDB4MDAwIH0sCisgICAgeyAweDA0MWMwNDE4LCAweDA0MjQwNDIwLCAweDAwMCB9LAorICAgIHsgMHgwNDJjMDQyOCwgMHgwNDM0MDQzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDViYTA1YmEsIDB4MDQzYTA0MzgsIDB4MDAwIH0sCisgICAgeyAweDA1YmEwNWJhLCAweDA1YmEwNWJhLCAweDAwMCB9LAorICAgIHsgMHgwNWJhMDViYSwgMHgwNWJhMDViYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMjA2MGUsIDB4MDYyYzAwMDYsIDB4MDAwIH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIFJTNzgwX3BmcF9taWNyb2NvZGVbXSA9IHsKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4N2MwMzhiLAorMHg4MDAxZGIsCisweDdjMDM4YiwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGM0MTgzOCwKKzB4Y2EyNDAwLAorMHhjYTI4MDAsCisweDk1ODFjYiwKKzB4YzQxYzNhLAorMHhjM2MwMDAsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHg3Yzc0NGIsCisweGMyMDAwNSwKKzB4OTljMDAwLAorMHhjNDFjM2EsCisweDdjNzQ0YywKKzB4YzBmZmUwLAorMHgwNDJjMDgsCisweDMwOTAwMiwKKzB4N2QyNTAwLAorMHgzNTE0MDIsCisweDdkMzUwYiwKKzB4MjU1NDA3LAorMHg3Y2Q1ODAsCisweDI1OWMwNywKKzB4OTVjMDA0LAorMHhkNTAwMWIsCisweDdlZGRjMSwKKzB4N2Q5ZDgwLAorMHhkNjgwMWIsCisweGQ1ODAxYiwKKzB4ZDQ0MDFlLAorMHhkNTQwMWUsCisweGQ2NDAxZSwKKzB4ZDY4MDFlLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4OTc4M2QzLAorMHhkNWMwMWUsCisweGNhMDgwMCwKKzB4ODAwMDFhLAorMHhjYTBjMDAsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHg4MDAwMGMsCisweGM0MTgzOCwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweDgwMDAwYywKKzB4YzQxODM4LAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHg4MDAxZGIsCisweGQ0ODAyNCwKKzB4Y2EwODAwLAorMHg3YzAwYzAsCisweGM4MTQyNSwKKzB4YzgxODI0LAorMHg3Yzk0ODgsCisweDdjOTg4MCwKKzB4YzIwMDAzLAorMHhkNDAwNzUsCisweDdjNzQ0YywKKzB4ODAwMDY0LAorMHhkNDQwMWUsCisweGNhMTgwMCwKKzB4ZDQ0MDFlLAorMHhkNTgwMWUsCisweDgwMDA2MiwKKzB4ZDQwMDc1LAorMHhkNDQwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGQ0ODAxOSwKKzB4ZDRjMDE4LAorMHhkNTAwMTcsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHhkNTAwMWUsCisweGUyMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZDQwMDc1LAorMHhkNDQwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGQ0ODAxOSwKKzB4ZDRjMDE4LAorMHhkNTAwMTcsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHhkNTAwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2EwODAwLAorMHgyNDhjMDEsCisweGQ0ODA2MCwKKzB4OTRjMDAzLAorMHgwNDEwMDEsCisweDA0MTAwMiwKKzB4ZDUwMDI1LAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZDQ4MDFlLAorMHhjYTA4MDAsCisweGQ0ODA2MSwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGQ0ODAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGQ0NDAxZSwKKzB4ZDQ4MDE2LAorMHhkNGMwMTYsCisweGQ0ODAxZSwKKzB4ODAwMWRiLAorMHhkNGMwMWUsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk0ODAwNCwKKzB4Y2ExNDAwLAorMHhlNDIwZjMsCisweGQ0MjAxMywKKzB4ZDU2MDY1LAorMHhkNGUwMWMsCisweGQ1MjAxYywKKzB4ZDU2MDFjLAorMHg4MDAwMDAsCisweDA2MjAwMSwKKzB4YzYwODQzLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4OTQ4M2Y3LAorMHhjYTE0MDAsCisweGU0MjBmMywKKzB4ODAwMDljLAorMHhkNDIwMTMsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk4ODNlZiwKKzB4Y2ExNDAwLAorMHhkNDAwNjQsCisweDgwMDBiMCwKKzB4MDAwMDAwLAorMHhjNDE0MzIsCisweGM2MTg0MywKKzB4YzQwODJmLAorMHg5NTQwMDUsCisweGM0MGMzMCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4OTU4M2Y1LAorMHhjNDEwMzEsCisweGQ0NDAzMywKKzB4ZDUyMDY1LAorMHhkNGEwMWMsCisweGQ0ZTAxYywKKzB4ZDUyMDFjLAorMHhlNDAxNWUsCisweGQ0MDAxZSwKKzB4ODAwMDAwLAorMHgwNjIwMDEsCisweGNhMTgwMCwKKzB4MGEyMDAxLAorMHhkNjAwNzYsCisweGM0MDgzNiwKKzB4OTg4MDA3LAorMHhjNjEwNDUsCisweDk1MDExMCwKKzB4ZDQwMDFmLAorMHhkNDYwNjIsCisweDgwMDAwMCwKKzB4ZDQyMDYyLAorMHhjYzM4MzUsCisweGNjMTQzMywKKzB4ODQwMWRlLAorMHhkNDAwNzIsCisweGQ1NDAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGUyMDAxYSwKKzB4ODQwMWRlLAorMHhlMjAwMWEsCisweGNjMTA0YiwKKzB4Y2MwNDQ3LAorMHgyYzk0MDEsCisweDdkMDk4YiwKKzB4OTg0MDA1LAorMHg3ZDE1Y2IsCisweGQ0MDAxYSwKKzB4ODAwMWRiLAorMHhkNDAwNmQsCisweDM0NDQwMSwKKzB4Y2MwYzQ4LAorMHg5ODQwM2EsCisweGNjMmM0YSwKKzB4OTU4MDA0LAorMHhjYzA0NDksCisweDgwMDFkYiwKKzB4ZDQwMDFhLAorMHhkNGMwMWEsCisweDI4MjgwMSwKKzB4ODQwMTEzLAorMHhjYzEwMDMsCisweDk4ODAxYiwKKzB4MDQzODBjLAorMHg4NDAxMTMsCisweGNjMTAwMywKKzB4OTg4MDE3LAorMHgwNDM4MDgsCisweDg0MDExMywKKzB4Y2MxMDAzLAorMHg5ODgwMTMsCisweDA0MzgwNCwKKzB4ODQwMTEzLAorMHhjYzEwMDMsCisweDk4ODAxNCwKKzB4Y2MxMDRjLAorMHg5YTgwMDksCisweGNjMTQ0ZCwKKzB4OTg0MGRjLAorMHhkNDAwNmQsCisweGNjMTg0OCwKKzB4ZDUwMDFhLAorMHhkNTQwMWEsCisweDgwMDBlYywKKzB4ZDU4MDFhLAorMHg5NmMwZDUsCisweGQ0MDA2ZCwKKzB4ODAwMWRiLAorMHhkNDAwNmUsCisweDlhYzAwMywKKzB4ZDQwMDZkLAorMHhkNDAwNmUsCisweDgwMDAwMCwKKzB4ZWMwMDdmLAorMHg5YWMwY2MsCisweGQ0MDA2ZCwKKzB4ODAwMWRiLAorMHhkNDAwNmUsCisweGNjMTQwMywKKzB4Y2MxODAzLAorMHhjYzFjMDMsCisweDdkOTEwMywKKzB4N2RkNTgzLAorMHg3ZDE5MGMsCisweDM1Y2MxZiwKKzB4MzU3MDFmLAorMHg3Y2YwY2IsCisweDdjZDA4YiwKKzB4ODgwMDAwLAorMHg3ZThlOGIsCisweDk1YzAwNCwKKzB4ZDQwMDZlLAorMHg4MDAxZGIsCisweGQ0MDAxYSwKKzB4ZDRjMDFhLAorMHhjYzA4MDMsCisweGNjMGMwMywKKzB4Y2MxMDAzLAorMHhjYzE0MDMsCisweGNjMTgwMywKKzB4Y2MxYzAzLAorMHhjYzI0MDMsCisweGNjMjgwMywKKzB4MzVjNDFmLAorMHgzNmIwMWYsCisweDdjNzA0YiwKKzB4MzRmMDFmLAorMHg3YzcwNGIsCisweDM1NzAxZiwKKzB4N2M3MDRiLAorMHg3ZDg4ODEsCisweDdkY2NjMSwKKzB4N2U1MTAxLAorMHg3ZTk1NDEsCisweDdjOTA4MiwKKzB4N2NkNGMyLAorMHg3Yzg0OGIsCisweDlhYzAwMywKKzB4N2M4YzhiLAorMHgyYzg4MDEsCisweDk4ODA5ZSwKKzB4ZDQwMDZkLAorMHg5ODQwOWMsCisweGQ0MDA2ZSwKKzB4Y2MwODRjLAorMHhjYzBjNGQsCisweGNjMTA0OCwKKzB4ZDQ4MDFhLAorMHhkNGMwMWEsCisweDgwMDEyNCwKKzB4ZDUwMDFhLAorMHhjYzA4MzIsCisweGQ0MDAzMiwKKzB4OTQ4MmI2LAorMHhjYTBjMDAsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhkNDAwMWUsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhkNDQwMWUsCisweGNhMTQwMCwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweGQ1MDAxZSwKKzB4ZDU0MDFlLAorMHhkNTQwMzQsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHgyODA0MDQsCisweGUyMDAxYSwKKzB4ZTIwMDFhLAorMHhkNDQwMWEsCisweGNhMzgwMCwKKzB4Y2MwODAzLAorMHhjYzBjMDMsCisweGNjMGMwMywKKzB4Y2MwYzAzLAorMHg5ODgyOWEsCisweDAwMDAwMCwKKzB4ODQwMWRlLAorMHhkN2EwNmYsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhjYTA0MDAsCisweGMyZmYwMCwKKzB4Y2MwODM0LAorMHhjMTNmZmYsCisweDdjNzRjYiwKKzB4N2NjOTBiLAorMHg3ZDAxMGYsCisweDk5MDI4ZCwKKzB4N2M3MzhiLAorMHg4NDAxZGUsCisweGQ3YTA2ZiwKKzB4ODAwMDAwLAorMHhlZTAwMWYsCisweGNhMDgwMCwKKzB4MjgxOTAwLAorMHg3ZDg5OGIsCisweDk1ODAxNCwKKzB4MjgxNDA0LAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4Y2ExYzAwLAorMHhjYTI0MDAsCisweGUyMDAxZiwKKzB4ZDRjMDFhLAorMHhkNTAwMWEsCisweGQ1NDAxYSwKKzB4Y2MxODAzLAorMHhjYzJjMDMsCisweGNjMmMwMywKKzB4Y2MyYzAzLAorMHg3ZGE1OGIsCisweDdkOWM0NywKKzB4OTg0Mjc0LAorMHgwMDAwMDAsCisweDgwMDE4NCwKKzB4ZDRjMDFhLAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTA4MDAsCisweDI0OGMwNiwKKzB4MGNjYzA2LAorMHg5OGMwMDYsCisweGNjMTA0ZSwKKzB4OTkwMDA0LAorMHhkNDAwNzMsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHgzNGQwMTgsCisweDI1MTAwMSwKKzB4OTUwMDIxLAorMHhjMTdmZmYsCisweGNhMTAwMCwKKzB4Y2ExNDAwLAorMHhjYTE4MDAsCisweGQ0ODAxZCwKKzB4ZDRjMDFkLAorMHg3ZGIxOGIsCisweGMxNDIwMiwKKzB4YzJjMDAxLAorMHhkNTgwMWQsCisweDM0ZGMwZSwKKzB4N2Q1ZDRjLAorMHg3ZjczNGMsCisweGQ3NDAxZSwKKzB4ZDUwMDFlLAorMHhkNTQwMWUsCisweGMxNDIwMCwKKzB4YzJjMDAwLAorMHgwOTljMDEsCisweDMxZGMxMCwKKzB4N2Y1ZjRjLAorMHg3ZjczNGMsCisweDA0MjgwMiwKKzB4N2Q4MzgwLAorMHhkNWE4NmYsCisweGQ1ODA2NiwKKzB4ZDc0MDFlLAorMHhlYzAwNWUsCisweGM4MjQwMiwKKzB4YzgyNDAyLAorMHg4MDAxZGIsCisweGQ2MDA3NiwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhkNDAwMWYsCisweDgwMDAwMCwKKzB4ZDQwMDFmLAorMHhkNDAwMWYsCisweDg4MDAwMCwKKzB4ZDQwMDFmLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAxMDE5NCwKKzB4MDIwMTliLAorMHgwMzAwYjIsCisweDA0MDBhMiwKKzB4MDUwMDAzLAorMHgwNjAwM2YsCisweDA3MDAzMiwKKzB4MDgwMTRmLAorMHgwOTAwNDYsCisweDBhMDAzNiwKKzB4MTAwMWQ5LAorMHgxNzAwYzUsCisweDIyMDE1ZCwKKzB4MjMwMTZjLAorMHgyMDAwZDcsCisweDI0MDE0OCwKKzB4MjYwMDRkLAorMHgyNzAwNWMsCisweDI4MDA4ZCwKKzB4MjkwMDUxLAorMHgyYTAwN2UsCisweDJiMDA2MSwKKzB4MmYwMDg4LAorMHgzMjAwYWEsCisweDM0MDFhMiwKKzB4MzYwMDZmLAorMHgzYzAxNzksCisweDNmMDA5NSwKKzB4NDEwMWFmLAorMHg0NDAxNTEsCisweDU1MDE5NiwKKzB4NTYwMTlkLAorMHg2MDAwMGIsCisweDYxMDAzNCwKKzB4NjIwMDM4LAorMHg2MzAwMzgsCisweDY0MDAzOCwKKzB4NjUwMDM4LAorMHg2NjAwMzgsCisweDY3MDAzOCwKKzB4NjgwMDNhLAorMHg2OTAwNDEsCisweDZhMDA0OCwKKzB4NmIwMDQ4LAorMHg2YzAwNDgsCisweDZkMDA0OCwKKzB4NmUwMDQ4LAorMHg2ZjAwNDgsCisweDczMDFkOSwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY3NzBfY3BfbWljcm9jb2RlW10gPSB7CisweGNjMDAwM2VhLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHg4MDAwMDAwMSwKKzB4ZDA0MDAwN2YsCisweDgwMDAwMDAxLAorMHhjYzQwMDA0MSwKKzB4N2M0MGMwMDAsCisweGMwMTYwMDA0LAorMHgzMGQwM2ZmZiwKKzB4N2QxNTAwMGMsCisweGNjMTEwMDAwLAorMHgyOGQ4MDAxZSwKKzB4MzE5ODAwMDEsCisweDI4ZGMwMDFmLAorMHhjODIwMDAwNCwKKzB4OTVjMDAwMDYsCisweDdjNDI0MDAwLAorMHhjYzAwMDA2MiwKKzB4N2U1NjgwMGMsCisweGNjMjkwMDAwLAorMHhjODI0MDAwNCwKKzB4N2UyNjAwMGIsCisweDk1ODAwMDA2LAorMHg3YzQyYzAwMCwKKzB4Y2MwMDAwNjIsCisweDdlZDcwMDBjLAorMHhjYzMxMDAwMCwKKzB4YzgyYzAwMDQsCisweDdlMmUwMDBjLAorMHhjYzAwMDA2MiwKKzB4MzExMDNmZmYsCisweDgwMDAwMDAxLAorMHhjZTExMDAwMCwKKzB4N2M0MGMwMDAsCisweDgwMDAwMDAxLAorMHhjYzQwMDA0MCwKKzB4ODAwMDAwMDEsCisweGNjNDEyMjU3LAorMHg3YzQxODAwMCwKKzB4Y2M0MDAwNDUsCisweGNjNDAwMDQ4LAorMHhjYzQxMjI1YywKKzB4Y2M0MWExZmMsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGNjNDAwMDQ1LAorMHhjYzQwMDA0OCwKKzB4N2M0MGMwMDAsCisweGNjNDEyMjVjLAorMHhjYzQxYTFmYywKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4Y2MwMDAwNDUsCisweGNjMDAwMDQ4LAorMHhjYzQxMjI1YywKKzB4Y2M0MWExZmMsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDA0MGNhMWZkLAorMHhjMDEyMDAwMSwKKzB4Y2MwMDAwNDUsCisweGNjMDAwMDQ4LAorMHg3Y2QwYzAwYywKKzB4Y2M0MTIyNWMsCisweGNjNDFhMWZjLAorMHhkMDRkMDAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ODAwMDAwMDEsCisweGNjNDEyMjVkLAorMHg3YzQwODAwMCwKKzB4N2M0MGMwMDAsCisweGMwMmEwMDAyLAorMHg3YzQxMDAwMCwKKzB4N2QyOTAwMGMsCisweDMwOTQwMDAxLAorMHgzMDk4MDAwNiwKKzB4MzA5YzAzMDAsCisweDI5ZGMwMDA4LAorMHg3YzQyMDAwMCwKKzB4N2M0MjQwMDAsCisweDk1NDAwMDBmLAorMHhjMDJlMDAwNCwKKzB4MDVmMDIyNTgsCisweDdmMmYwMDBjLAorMHhjYzMxMDAwMCwKKzB4YzgyODAwMDQsCisweGNjYzEyMTY5LAorMHhjZDAxMjE2YSwKKzB4Y2U4MTIxNmIsCisweDBkYjQwMDAyLAorMHhjYzAxMjE2YywKKzB4OTc0MDAwMGUsCisweDBkYjQwMDAwLAorMHg4MDAwMDA3YiwKKzB4YzgzNDAwMGEsCisweDBkYjQwMDAyLAorMHg5NzQwMDAwOSwKKzB4MGRiNDAwMDAsCisweGMwMmUwMDA0LAorMHgwNWYwMjI1OCwKKzB4N2YyZjAwMGMsCisweGNjMzEwMDAwLAorMHhjODI4MDAwNCwKKzB4ODAwMDAwN2IsCisweGM4MzQwMDBhLAorMHg5NzQwMDAwNCwKKzB4N2UwMjgwMDAsCisweDgwMDAwMDdiLAorMHhjODM0MDAwYSwKKzB4MGRiNDAwMDQsCisweDk3NDBmZjhjLAorMHgwMDAwMDAwMCwKKzB4Y2UwMTIxNmQsCisweGNlNDEyMTZlLAorMHhjODI4MDAwMywKKzB4YzgzNDAwMGEsCisweDliNDAwMDA0LAorMHgwNDNjMDAwNSwKKzB4ODQwMDAyNmQsCisweGNjMDAwMDYyLAorMHgwZGY0MDAwMCwKKzB4OTc0MDAwMGIsCisweGM4MmMwM2U2LAorMHhjZTgxYTJiNywKKzB4YzAzMDAwMDYsCisweDdlZjM0MDI4LAorMHhjMDMwMDAyMCwKKzB4N2Y2YjgwMjAsCisweDdmYjNjMDI5LAorMHhjZjgxYTJjNCwKKzB4ODAwMDAwMDEsCisweGNmYzFhMmQxLAorMHgwZGY0MDAwMSwKKzB4OTc0MDAwMGIsCisweGM4MmMwM2U3LAorMHhjZTgxYTJiYiwKKzB4YzAzMDAwMDYsCisweDdlZjM0MDI4LAorMHhjMDMwMDAyMCwKKzB4N2Y2YjgwMjAsCisweDdmYjNjMDI5LAorMHhjZjgxYTJjNSwKKzB4ODAwMDAwMDEsCisweGNmYzFhMmQyLAorMHgwZGY0MDAwMiwKKzB4OTc0MDAwMGIsCisweGM4MmMwM2U4LAorMHhjZTgxYTJiZiwKKzB4YzAzMDAwMDYsCisweDdlZjM0MDI4LAorMHhjMDMwMDAyMCwKKzB4N2Y2YjgwMjAsCisweDdmYjNjMDI5LAorMHhjZjgxYTJjNiwKKzB4ODAwMDAwMDEsCisweGNmYzFhMmQzLAorMHhjODJjMDNlOSwKKzB4Y2U4MWEyYzMsCisweGMwMzAwMDA2LAorMHg3ZWYzNDAyOCwKKzB4YzAzMDAwMjAsCisweDdmNmI4MDIwLAorMHg3ZmIzYzAyOSwKKzB4Y2Y4MWEyYzcsCisweDgwMDAwMDAxLAorMHhjZmMxYTJkNCwKKzB4ODAwMDAwMDEsCisweGNjNDAwMDQyLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDI5MTQwMDFkLAorMHgzMTU0MDAwMSwKKzB4OTk0MDAwMGQsCisweDMxMTgxMDAwLAorMHhjODFjMDAxMSwKKzB4MDlkYzAwMDEsCisweDk1YzBmZmZmLAorMHhjODFjMDAxMSwKKzB4Y2NjMTIxMDAsCisweGNkMDEyMTAxLAorMHhjY2MxMjEwMiwKKzB4Y2QwMTIxMDMsCisweDA0MTgwMDA0LAorMHg4MDAwMDM5ZiwKKzB4Y2Q4MWEyYTQsCisweGMwMmEwMDA0LAorMHg5NTgwMDAwOCwKKzB4MzZhODIxYTMsCisweGNjMjkwMDAwLAorMHhjODI4MDAwNCwKKzB4YzgxYzAwMTEsCisweDBkZTQwMDQwLAorMHg5NjQwZmZmZiwKKzB4YzgxYzAwMTEsCisweGNjYzEyMTcwLAorMHhjZDAxMjE3MSwKKzB4YzgyMDAwMTIsCisweDk2MDAwMDAwLAorMHhjODIwMDAxMiwKKzB4ODAwMDAzOWYsCisweGNjMDAwMDY0LAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGNjMDAwMDQ1LAorMHhjYzAwMDA0OCwKKzB4NDBkNDAwMDMsCisweGNkNDEyMjVjLAorMHhjZDAxYTFmYywKKzB4YzAxYTAwMDEsCisweDA0MWNhMWZkLAorMHg3ZGQ5YzAwYywKKzB4N2M0MjAwMDAsCisweDA4Y2MwMDAxLAorMHgwNjI0MDAwMSwKKzB4MDYyODAwMDIsCisweGNlMWQwMDAwLAorMHhjZTVkMDAwMCwKKzB4OThjMGZmZmEsCisweGNlOWQwMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHg3YzQwYzAwMCwKKzB4MzBkMDAwMDEsCisweDI4Y2MwMDAxLAorMHg3YzQxNDAwMCwKKzB4OTUwMDAwMDYsCisweDdjNDE4MDAwLAorMHhjZDQxMjE2ZCwKKzB4Y2Q4MTIxNmUsCisweDgwMDAwMGYzLAorMHhjODFjMDAwMywKKzB4YzAyMjAwMDQsCisweDdlMTYwMDBjLAorMHhjYzIxMDAwMCwKKzB4YzgxYzAwMDQsCisweDdjNDI0MDAwLAorMHg5OGMwMDAwNCwKKzB4N2M0MjgwMDAsCisweDgwMDAwMDAxLAorMHhjZGU1MDAwMCwKKzB4Y2U0MTIxNjksCisweGNlODEyMTZhLAorMHhjZGMxMjE2YiwKKzB4ODAwMDAwMDEsCisweGNjMDEyMTZjLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4N2M0MWMwMDAsCisweDI4YTQwMDA4LAorMHgzMjY0MDBmZiwKKzB4MGU2ODAwM2MsCisweDk2ODAwMDBhLAorMHg3YzAyMDAwMCwKKzB4N2M0MjAwMDAsCisweDFlMzAwMDAzLAorMHhjYzAwMDA2YSwKKzB4OWIwMDAwMDMsCisweDQyMjAwMDA1LAorMHgwNDIwMDA0MCwKKzB4ODAwMDAxMTAsCisweDdjMDI0MDAwLAorMHg3ZTAyNDAwMCwKKzB4OWE0MDAwMDAsCisweDBhNjQwMDAxLAorMHgzMGVjMDAxMCwKKzB4OWFjMDAwMGEsCisweGNjMDAwMDYyLAorMHhjMDJhMDAwNCwKKzB4YzgyYzAwMjEsCisweDdlOTI4MDBjLAorMHhjYzAwMDA0MSwKKzB4Y2MyOTAwMDAsCisweGNlYzAwMDIxLAorMHg4MDAwMDEyMCwKKzB4YzgzMDAwMDQsCisweGNkMDEyMTZkLAorMHhjZDQxMjE2ZSwKKzB4YzgzMDAwMDMsCisweDdmMWYwMDBiLAorMHgzMGY0MDAwNywKKzB4Mjc3ODAwMDEsCisweDk3NDAwMDJhLAorMHgwN2I4MDEyNSwKKzB4OWY4MDAwMDAsCisweDAwMDAwMDAwLAorMHg4MDAwMDEzNSwKKzB4N2YxYjgwMDQsCisweDgwMDAwMTM5LAorMHg3ZjFiODAwNSwKKzB4ODAwMDAxM2QsCisweDdmMWI4MDAyLAorMHg4MDAwMDE0MSwKKzB4N2YxYjgwMDMsCisweDgwMDAwMTQ1LAorMHg3ZjFiODAwNywKKzB4ODAwMDAxNDksCisweDdmMWI4MDA2LAorMHg4MDAwMDE0ZSwKKzB4MjhhNDAwMDgsCisweDliODAwMDE5LAorMHgyOGE0MDAwOCwKKzB4ODAwMDAxNWUsCisweDMyNjQwMGZmLAorMHg5YjgwMDAxNSwKKzB4MjhhNDAwMDgsCisweDgwMDAwMTVlLAorMHgzMjY0MDBmZiwKKzB4OWI4MDAwMTEsCisweDI4YTQwMDA4LAorMHg4MDAwMDE1ZSwKKzB4MzI2NDAwZmYsCisweDliODAwMDBkLAorMHgyOGE0MDAwOCwKKzB4ODAwMDAxNWUsCisweDMyNjQwMGZmLAorMHg5YjgwMDAwOSwKKzB4MjhhNDAwMDgsCisweDgwMDAwMTVlLAorMHgzMjY0MDBmZiwKKzB4OWI4MDAwMDUsCisweDI4YTQwMDA4LAorMHg4MDAwMDE1ZSwKKzB4MzI2NDAwZmYsCisweDI4YTQwMDA4LAorMHgzMjY0MDBmZiwKKzB4MGU2ODAwM2MsCisweDlhODBmZWIxLAorMHgyOGVjMDAwOCwKKzB4N2M0MzQwMDAsCisweDdjNDM4MDAwLAorMHg3YzQzYzAwMCwKKzB4OTZjMDAwMDcsCisweGNjMDAwMDYyLAorMHhjZjQxMjE2OSwKKzB4Y2Y4MTIxNmEsCisweGNmYzEyMTZiLAorMHg4MDAwMDAwMSwKKzB4Y2MwMTIxNmMsCisweDgwMDAwMDAxLAorMHhjZmY1MDAwMCwKKzB4Y2MwMDAwNmIsCisweDg0MDAwM2EyLAorMHgwZTY4MDAzYywKKzB4OWE4MDAwMDQsCisweGM4MjgwMDE1LAorMHg4MDAwMDAwMSwKKzB4ZDA0MDAwN2YsCisweDk2ODBmZmFiLAorMHg3ZTAyNDAwMCwKKzB4ODQwMDAyM2IsCisweGMwMGUwMDAyLAorMHhjYzAwMDA0MSwKKzB4ODAwMDAyMzksCisweGNjYzEzMDRhLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGMwMWUwMDAxLAorMHgyOTI0MDAxMiwKKzB4YzAyMjAwMDIsCisweDk2NDAwMDA1LAorMHhjMDI2MDAwNCwKKzB4YzAyN2ZmZmIsCisweDdkMjUwMDBiLAorMHhjMDI2MDAwMCwKKzB4N2RkMjgwMGIsCisweDdlMTJjMDBiLAorMHg3ZDI1MDAwYywKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MxMjE2OSwKKzB4OWE4MDAwMGEsCisweGNkMDEyMTZhLAorMHhjZDQxMjE2YiwKKzB4OTZjMGZlODIsCisweGNkODEyMTZjLAorMHhjODMwMDAxOCwKKzB4OTcwMDAwMDAsCisweGM4MzAwMDE4LAorMHg4MDAwMDAwMSwKKzB4Y2MwMDAwMTgsCisweDg0MDAwM2EyLAorMHhjYzAwMDA3ZiwKKzB4YzgxNDAwMTMsCisweGM4MTgwMDE0LAorMHhjZDQxMjE2YiwKKzB4OTZjMGZlNzYsCisweGNkODEyMTZjLAorMHg4MDAwMDE4MiwKKzB4YzgzMDAwMTgsCisweGM4MGMwMDA4LAorMHg5OGMwMDAwMCwKKzB4YzgwYzAwMDgsCisweDdjNDEwMDAwLAorMHg5NTAwMDAwMiwKKzB4MDAwMDAwMDAsCisweDdjNDE0MDAwLAorMHhjODIwMDAwOSwKKzB4Y2M0MDAwNDMsCisweGNlMDFhMWY0LAorMHhjYzQwMDA0NCwKKzB4YzAwZTgwMDAsCisweDdjNDI0MDAwLAorMHg3YzQyODAwMCwKKzB4MmFhYzAwMWYsCisweDk2YzBmZTYzLAorMHhjMDM1ZjAwMCwKKzB4Y2U0MDAzZTIsCisweDMyNzgwMDAzLAorMHgyNjdjMDAwOCwKKzB4N2ZmN2MwMGIsCisweDdmZmJjMDBjLAorMHgyYTc4MDAxOCwKKzB4Y2ZjMDAzZTMsCisweGNmODAwM2U0LAorMHgyNmIwMDAwMiwKKzB4N2YzZjAwMDAsCisweGNmMDAwM2U1LAorMHg4MDAwMDMxZiwKKzB4N2M4MGMwMDAsCisweDdjNDBjMDAwLAorMHgyOGQwMDAwOCwKKzB4MzExMDAwMGYsCisweDk1MDAwMDBmLAorMHgyNTI4MDAwMSwKKzB4MDZhODAxYjMsCisweDllODAwMDAwLAorMHgwMDAwMDAwMCwKKzB4ODAwMDAxZDQsCisweGMwMTIwODAwLAorMHg4MDAwMDFlMiwKKzB4YzgxNDAwMGYsCisweDgwMDAwMWU5LAorMHhjODE0MDAxMCwKKzB4ODAwMDAxZjAsCisweGNjYzFhMmE0LAorMHg4MDAwMDFmOSwKKzB4YzgxNDAwMTEsCisweDMwZDAwMDNmLAorMHgwZDI4MDAxNSwKKzB4OWE4MDAwMTIsCisweDBkMjgwMDFlLAorMHg5YTgwMDAxZSwKKzB4MGQyODAwMjAsCisweDlhODAwMDIzLAorMHgwZDI0MDAwZiwKKzB4MGQyODAwMTAsCisweDdlNmE4MDBjLAorMHg5YTgwMDAyNiwKKzB4MGQyMDAwMDQsCisweDBkMjQwMDE0LAorMHgwZDI4MDAyOCwKKzB4N2U2MjQwMGMsCisweDdlYTY4MDBjLAorMHg5YTgwMDAyYSwKKzB4YzgxNDAwMTEsCisweDgwMDAwMDAxLAorMHhjY2MxYTJhNCwKKzB4YzAxMjA4MDAsCisweDdjNDE0MDAwLAorMHg3ZDBjYzAwYywKKzB4YzAxMjAwMDgsCisweDI5NTgwMDAzLAorMHgyOTVjMDAwYywKKzB4N2M0MjAwMDAsCisweDdkZDFjMDBiLAorMHgyNjIwMDAxNCwKKzB4N2UxZTQwMGMsCisweDdlNGU4MDBjLAorMHhjZTgxYTJhNCwKKzB4ODAwMDAwMDEsCisweGNkODFhMWZlLAorMHhjODE0MDAwZiwKKzB4MDQxMDIxMGUsCisweDk1NDAwMDAwLAorMHhjODE0MDAwZiwKKzB4ZDA1MTAwMDAsCisweDgwMDAwMDAxLAorMHhjY2MxYTJhNCwKKzB4YzgxNDAwMTAsCisweDA0MTAyMTA4LAorMHg5NTQwMDAwMCwKKzB4YzgxNDAwMTAsCisweGQwNTEwMDAwLAorMHg4MDAwMDAwMSwKKzB4Y2NjMWEyYTQsCisweGNjYzFhMmE0LAorMHgwNDEwMDAwMSwKKzB4Y2QwMDAwMTksCisweDg0MDAwM2EyLAorMHhjYzAwMDA3ZiwKKzB4YzgxMDAwMTksCisweDk5MDAwMDAwLAorMHhjODEwMDAxOSwKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHgwNDEwMjEwMCwKKzB4MDk1NDAwMDEsCisweDk1NDBmZmZmLAorMHhjODE0MDAxMSwKKzB4ZDA1MTAwMDAsCisweDgwMDAwMzlmLAorMHhjY2MxYTJhNCwKKzB4N2M0MGMwMDAsCisweGNjNDAwMDBkLAorMHg5NGMwZmRmZiwKKzB4Y2M0MDAwMGUsCisweDdjNDEwMDAwLAorMHg5NTAwMDAwNSwKKzB4MDhjYzAwMDEsCisweGM4MTQwMDA1LAorMHg5OTQwMDAxNCwKKzB4MDAwMDAwMDAsCisweDk4YzBmZmZiLAorMHg3YzQxMDAwMCwKKzB4ODAwMDAwMDIsCisweDdkMDA4MDAwLAorMHhjODE0MDAwNSwKKzB4N2M0MGMwMDAsCisweDk5NDAwMDBjLAorMHhjODE4MDAwYywKKzB4N2M0MTAwMDAsCisweDk1ODBmZGVlLAorMHhjODIwMDAwZSwKKzB4YzgxYzAwMGQsCisweDY2MjAwMDIwLAorMHg3ZTFlMDAyYywKKzB4MjUyNDAwMDIsCisweDdlNjI0MDIwLAorMHg4MDAwMDAwMSwKKzB4Y2NlNjAwMDAsCisweDdjNDEwMDAwLAorMHhjYzAwMDA2YywKKzB4Y2MwMDAwNmQsCisweGM4MTgwMDFmLAorMHhjODFjMDAxZSwKKzB4NjU5ODAwMjAsCisweDdkZDljMDJjLAorMHg3Y2Q0YzAwYywKKzB4Y2NkZTAwMDAsCisweDQ1ZGMwMDA0LAorMHhjODI4MDAxNywKKzB4OTY4MDAwMGYsCisweGMwMGUwMDAxLAorMHgyODY4MDAwOCwKKzB4MmFhYzAwMTYsCisweDMyYTgwMGZmLAorMHgwZWIwMDA0OSwKKzB4N2YyZjAwMGIsCisweDk3MDAwMDA2LAorMHgwMDAwMDAwMCwKKzB4YzgxNDAwMDUsCisweDdjNDBjMDAwLAorMHg4MDAwMDIyMywKKzB4N2M0MTAwMDAsCisweDgwMDAwMjI2LAorMHhkMDQwMDA3ZiwKKzB4ODQwMDAyM2IsCisweGNjMDAwMDQxLAorMHhjY2MxMzA0YSwKKzB4OTQwMDAwMDAsCisweGM4M2MwMDFhLAorMHgwNDNjMDAwNSwKKzB4Y2ZjMWEyYTQsCisweGMwMzYxZjkwLAorMHhjMDM4N2ZmZiwKKzB4N2MwM2MwMTAsCisweDdmN2I0MDBjLAorMHhjZjQxMjE3YywKKzB4Y2ZjMTIxN2QsCisweGNjMDEyMTdlLAorMHhjMDNhMDAwNCwKKzB4MDQzNDIxN2YsCisweDdmN2I0MDBjLAorMHhjYzM1MDAwMCwKKzB4YzgzYzAwMDQsCisweDJiZmMwMDFmLAorMHgwNDM4MDAyMCwKKzB4OTdjMDAwMDUsCisweGNjMDAwMDYyLAorMHg5YjgwMDAwMCwKKzB4MGJiODAwMDEsCisweDgwMDAwMjQ3LAorMHhjYzAwMDA3MSwKKzB4Y2MwMWExZjQsCisweDA0MzgwMDE2LAorMHhjMDM2MDAwMiwKKzB4Y2Y4MWEyYTQsCisweDg4MDAwMDAwLAorMHhjZjQxMjAxMCwKKzB4N2M0MGMwMDAsCisweDI4ZDAwMDFjLAorMHg5NTAwMDAwNSwKKzB4MDRkNDAwMDEsCisweGNkNDAwMDY1LAorMHg4MDAwMDAwMSwKKzB4Y2Q0MDAwNjgsCisweDA5NTQwMDAyLAorMHg4MDAwMDAwMSwKKzB4Y2Q0MDAwNjYsCisweDg0MDAwMjZjLAorMHhjODE4MDNlYSwKKzB4N2M0MGMwMDAsCisweDk5ODBmZDlkLAorMHhjODE0MDAxNiwKKzB4MDhkMDAwMDEsCisweDk5NDAwMDJiLAorMHhjZDAwMDA2OCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4MDQzYzAwMDUsCisweGNmYzFhMmE0LAorMHhjYzAxYTFmNCwKKzB4ODQwMDAzYTIsCisweGNjMDAwMDQ2LAorMHg4ODAwMDAwMCwKKzB4Y2MwMDAwN2YsCisweDg0MDAwMjdlLAorMHhjODE4MDNlYSwKKzB4N2M0MGMwMDAsCisweDk5ODBmZDhiLAorMHhjODE0MDAxNiwKKzB4MDhkMDAwMDEsCisweDk5NDAwMDE5LAorMHhjZDAwMDA2OCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4MDQzYzAwMjIsCisweGNmYzFhMmE0LAorMHg4NDAwMDNhMiwKKzB4Y2MwMDAwNDcsCisweDg4MDAwMDAwLAorMHhjYzAwMDA3ZiwKKzB4YzgxMDAwMTYsCisweDk5MDAwMDBkLAorMHhjYzQwMDA2NywKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHhjODE4MDNlYSwKKzB4OTk4MGZkNzcsCisweDdjNDBjMDAwLAorMHg5NGMwMDAwMywKKzB4YzgxMDAwMTYsCisweDk5MDAwMDA0LAorMHhjY2MwMDA2OCwKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHg4NDAwMDIzYiwKKzB4YzAxNDgwMDAsCisweGNjMDAwMDQxLAorMHhjZDQxMzA0YSwKKzB4YzAxNDgwMDAsCisweDk5MDAwMDAwLAorMHhjODEwMDAxNiwKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHhjMDEyMDAwMSwKKzB4N2M1MTQwMGMsCisweDgwMDAwMDAxLAorMHhkMDU1MDAwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweDI5MWMwMDFmLAorMHhjY2MwMDA0YSwKKzB4Y2QwMDAwNGIsCisweDk1YzAwMDAzLAorMHhjMDFjODAwMCwKKzB4Y2RjMTIwMTAsCisweGRkODMwMDAwLAorMHgwNTVjMjAwMCwKKzB4Y2MwMDAwNjIsCisweDgwMDAwMDAxLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDRjLAorMHhjZDAwMDA0ZCwKKzB4ZGQ4MzAwMDAsCisweDA1NWNhMDAwLAorMHg4MDAwMDAwMSwKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA0ZSwKKzB4Y2QwMDAwNGYsCisweGRkODMwMDAwLAorMHgwNTVjYzAwMCwKKzB4ODAwMDAwMDEsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNTAsCisweGNkMDAwMDUxLAorMHhkZDgzMDAwMCwKKzB4MDU1Y2Y4ZTAsCisweDgwMDAwMDAxLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDUyLAorMHhjZDAwMDA1MywKKzB4ZGQ4MzAwMDAsCisweDA1NWNmODgwLAorMHg4MDAwMDAwMSwKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA1NCwKKzB4Y2QwMDAwNTUsCisweGRkODMwMDAwLAorMHgwNTVjZTAwMCwKKzB4ODAwMDAwMDEsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNTYsCisweGNkMDAwMDU3LAorMHhkZDgzMDAwMCwKKzB4MDU1Y2YwMDAsCisweDgwMDAwMDAxLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDU4LAorMHhjZDAwMDA1OSwKKzB4ZGQ4MzAwMDAsCisweDA1NWNmM2ZjLAorMHg4MDAwMDAwMSwKKzB4ZDgxZjQxMDAsCisweGQwNDMyMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzYTAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2MwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNmOGUwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzZjg4MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2UwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNmMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzZjNmYywKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4YzgxNDAzZTAsCisweGNjNDMwMDAwLAorMHhjYzQzMDAwMCwKKzB4Y2M0MzAwMDAsCisweDdkNDVjMDAwLAorMHhjZGMzMDAwMCwKKzB4ZDA0MzAwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDdjNDBjMDAwLAorMHhjODEwMDNlMiwKKzB4YzgxNDAzZTUsCisweGM4MTgwM2UzLAorMHhjODFjMDNlNCwKKzB4Y2Q4MTIxNjksCisweGNkYzEyMTZhLAorMHhjY2MxMjE2YiwKKzB4Y2MwMTIxNmMsCisweDA0MjAwMDA0LAorMHg3ZGExODAwMCwKKzB4N2Q5NjQwMDIsCisweDk2NDBmY2Q3LAorMHhjZDgwMDNlMywKKzB4MzEyODAwMDMsCisweGMwMmRmMDAwLAorMHgyNTE4MDAwOCwKKzB4N2RhZDgwMGIsCisweDdkYTk4MDBjLAorMHg4MDAwMDAwMSwKKzB4Y2Q4MDAzZTMsCisweDMwOGNmZmZmLAorMHhkMDRkMDAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHgyOTI0MDAxOCwKKzB4MzI2NDAwMDEsCisweDlhNDAwMDEzLAorMHhjODE0MDAyMCwKKzB4MTU1ODAwMDIsCisweDk1ODBmZmZmLAorMHhjODE0MDAyMCwKKzB4Y2MwMDAwNmUsCisweGNjYzEyMTgwLAorMHhjZDAxMjE4ZCwKKzB4Y2M0MTIxODEsCisweDI5MTQwMDFmLAorMHgzNDU4ODAwMCwKKzB4Y2Q4MTIxOGMsCisweDk1NDBmY2I5LAorMHhjYzQxMjE4MiwKKzB4YzgxNDAwMjAsCisweDk5NDBmZmZmLAorMHhjODE0MDAyMCwKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweDdjNDFjMDAwLAorMHg2NWI0MDAyMCwKKzB4N2Y1NzQwMmMsCisweGQ0Mzc4MTAwLAorMHg0Nzc0MDAwNCwKKzB4ZDQzNzgxMDAsCisweDQ3NzQwMDA0LAorMHhkNDM3ODEwMCwKKzB4NDc3NDAwMDQsCisweDA5ZGMwMDA0LAorMHhkNDM3ODEwMCwKKzB4OTljMGZmZjgsCisweDQ3NzQwMDA0LAorMHgyOTI0MDAxZiwKKzB4YzAzODAwMTksCisweDk2NDBmY2ExLAorMHhjMDNlMDAwNCwKKzB4Y2Y4MTIxZjgsCisweDM3ZTAyMWY5LAorMHhjYzIxMDAwMCwKKzB4YzgyMDAwMDQsCisweDJhMjAwMDE4LAorMHgzMjIwMDAwMSwKKzB4OWEwMGZmZmIsCisweGNmODEyMWY4LAorMHg4MDAwMDAwMiwKKzB4N2M0MDgwMDAsCisweDdjNDBjMDAwLAorMHgyOGQwMDAxOCwKKzB4MzExMDAwMDEsCisweGMwMTYwMDgwLAorMHg5NTAwMDAwMywKKzB4YzAyYTAwMDQsCisweDdjZDRjMDBjLAorMHhjY2MxMjE3YywKKzB4Y2M0MTIxN2QsCisweGNjNDEyMTdlLAorMHg3YzQxODAwMCwKKzB4MWRiMDAwMDMsCisweDM2YTAyMTdmLAorMHg5YjAwMDAwMywKKzB4NDE5YzAwMDUsCisweDA0MWMwMDQwLAorMHg5OWMwMDAwMCwKKzB4MDlkYzAwMDEsCisweGNjMjEwMDAwLAorMHhjODI0MDAwNCwKKzB4MmE2YzAwMWYsCisweDQxOWMwMDA1LAorMHg5YWMwZmZmYSwKKzB4Y2M4MDAwNjIsCisweDgwMDAwMDAyLAorMHg3YzQwODAwMCwKKzB4N2M0MGMwMDAsCisweDA0ZDQwM2U2LAorMHg4MDAwMDAwMSwKKzB4Y2M1NDAwMDAsCisweDgwMDAwMzlmLAorMHhjYzQwMDNlYSwKKzB4YzAxYzgwMDAsCisweDA0NGNhMDAwLAorMHhjZGMxMjAxMCwKKzB4N2M0MTAwMDAsCisweGM4MTQwMDA5LAorMHgwNDE4MDAwMCwKKzB4MDQxYzAwMDgsCisweGNkODAwMDcxLAorMHgwOWRjMDAwMSwKKzB4MDU5ODAwMDEsCisweGNkMGQwMDAwLAorMHg5OWMwZmZmYywKKzB4Y2M4MDAwNjIsCisweDgwMDAwMzlmLAorMHhjZDQwMDA3MSwKKzB4YzAwZTAxMDAsCisweGNjMDAwMDQxLAorMHhjY2MxMzA0YSwKKzB4YzgzYzAwN2YsCisweGNjMDAwMDdmLAorMHg4MDAwMDAwMSwKKzB4Y2MwMDAwN2YsCisweGNjMDAwMDdmLAorMHg4ODAwMDAwMCwKKzB4Y2MwMDAwN2YsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMTAzMzMsCisweDAwMTAwMDA0LAorMHgwMDE3MDAwNiwKKzB4MDAyMTAwMDgsCisweDAwMjcwMDI4LAorMHgwMDI4MDAyMywKKzB4MDAyOTAwMjksCisweDAwMmEwMDI2LAorMHgwMDJiMDAyOSwKKzB4MDAyZDAwMzgsCisweDAwMmUwMDNmLAorMHgwMDJmMDA0YSwKKzB4MDAzNDAwNGMsCisweDAwMzYwMDMwLAorMHgwMDM5MDBhZiwKKzB4MDAzYTAwZDAsCisweDAwM2IwMGU1LAorMHgwMDNjMDBmZCwKKzB4MDAzZDAxNmMsCisweDAwM2YwMGFkLAorMHgwMDQxMDMzOCwKKzB4MDA0MzAzNmMsCisweDAwNDQwMThmLAorMHgwMDQ1MDBmZCwKKzB4MDA0NjAxYWQsCisweDAwNDcwMWFkLAorMHgwMDQ4MDIwMCwKKzB4MDA0OTAyMGUsCisweDAwNGEwMjU3LAorMHgwMDRiMDI4NCwKKzB4MDA1MjAyNjEsCisweDAwNTMwMjczLAorMHgwMDU0MDI4OSwKKzB4MDA1NzAyOWIsCisweDAwNjAwMjlmLAorMHgwMDYxMDJhZSwKKzB4MDA2MjAyYjgsCisweDAwNjMwMmMyLAorMHgwMDY0MDJjYywKKzB4MDA2NTAyZDYsCisweDAwNjYwMmUwLAorMHgwMDY3MDJlYSwKKzB4MDA2ODAyZjQsCisweDAwNjkwMmY4LAorMHgwMDZhMDJmYywKKzB4MDA2YjAzMDAsCisweDAwNmMwMzA0LAorMHgwMDZkMDMwOCwKKzB4MDA2ZTAzMGMsCisweDAwNmYwMzEwLAorMHgwMDcwMDMxNCwKKzB4MDA3MjAzODYsCisweDAwNzQwMzhjLAorMHgwMDc5MDM4YSwKKzB4MDA3YzAzMWUsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBSVjc3MF9wZnBfbWljcm9jb2RlW10gPSB7CisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweDgwMDAwMDAwLAorMHhkYzAzMDAwMCwKKzB4Y2M4MDAwNDAsCisweGQwNDAwMDQwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweDdlODI4MDBiLAorMHhjODE4MDAwZSwKKzB4MzE5ODAwMDEsCisweDdjNDI0MDAwLAorMHg5NTgwMDI1MiwKKzB4N2M0MjgwMDAsCisweGM4MWMwMDFjLAorMHhjMDM3YzAwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3Y2I0ODAwYiwKKzB4YzAzNjAwMDMsCisweDk5YzAwMDAwLAorMHhjODFjMDAxYywKKzB4N2NiNDgwMGMsCisweDI0ZDQwMDAyLAorMHg3ZDY1NDAwMCwKKzB4Y2Q0MDAwNDMsCisweGNlODAwMDQzLAorMHhjZDAwMDA0MywKKzB4Y2M4MDAwNDAsCisweGNlNDAwMDQwLAorMHhjZTgwMDA0MCwKKzB4Y2NjMDAwNDAsCisweGRjM2EwMDAwLAorMHg5NzgwZmZkZSwKKzB4Y2QwMDAwNDAsCisweDdjNDBjMDAwLAorMHg4MDAwMDAxOCwKKzB4N2M0MTAwMDAsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGM4MTgwMDBlLAorMHg4MDAwMDAwYywKKzB4MzE5ODAwMDIsCisweGQ0MDAwM2MwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGM4MTgwMDBlLAorMHgyODhjMDAwOCwKKzB4MzBjYzAwMGYsCisweDM0MTAwMDAxLAorMHg3ZDBkMDAwOCwKKzB4ODAwMDAwMGMsCisweDdkOTE4MDBiLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4ZDQwMDAzYzAsCisweGQ0MDAwZmMwLAorMHhkNDAwMGZhMiwKKzB4Y2M4MDAwNDAsCisweGQwNDAwMDQwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweDdlODI4MDBiLAorMHhjYzQwMDNmOSwKKzB4ODAwMDAyNjEsCisweGNjNDAwM2Y4LAorMHhjODIwMDNmOCwKKzB4YzgxYzAzZjksCisweGM4MTgwM2ZiLAorMHhjMDM3ZmZmZiwKKzB4N2M0MTQwMDAsCisweGNmNDFhMjllLAorMHg2NjIwMDAyMCwKKzB4N2RlMWMwMmMsCisweDdkNThjMDA4LAorMHg3Y2RjYzAyMCwKKzB4NjhkMDAwMjAsCisweGMwMzYwMDAzLAorMHhjYzAwMDA1NCwKKzB4N2NiNDgwMGMsCisweDgwMDAwMDZhLAorMHhjYzgwMDA0MCwKKzB4N2M0MTgwMDAsCisweGNkODFhMjllLAorMHhjYzgwMDA0MCwKKzB4Y2Q4MDAwNDAsCisweDgwMDAwMDY4LAorMHhjYzAwMDA1NCwKKzB4YzAxOWZmZmYsCisweGNjODAwMDQwLAorMHhjZDgxYTI5ZSwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4Y2NjMWExZmEsCisweGNkMDFhMWY5LAorMHhjZDQxYTI5ZCwKKzB4Y2NjMDAwNDAsCisweGNkMDAwMDQwLAorMHhjZDQwMDA0MCwKKzB4Y2M0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGNjMDAwMDU0LAorMHhjYzgwMDA0MCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4Y2NjMWExZmEsCisweGNkMDFhMWY5LAorMHhjZDQxYTI5ZCwKKzB4Y2NjMDAwNDAsCisweGNkMDAwMDQwLAorMHhjZDQwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweDdjNDBjMDAwLAorMHgzMGQwMDAwMSwKKzB4Y2NjMWEyOWYsCisweDk1MDAwMDAzLAorMHgwNDE0MDAwMSwKKzB4MDQxNDAwMDIsCisweGNkNDAwM2ZiLAorMHhjYzgwMDA0MCwKKzB4ODAwMDAwMDAsCisweGNjYzAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2M4MDAwNDAsCisweGNjYzFhMmEyLAorMHg4MDAwMDAwMCwKKzB4Y2NjMDAwNDAsCisweDdjNDBjMDAwLAorMHgyOGQ0MDAxZiwKKzB4Y2M4MDAwNDAsCisweDk1NDAwMDAzLAorMHg3YzQxMDAwMCwKKzB4Y2NjMDAwNTcsCisweDI5MTgwMDFmLAorMHhjY2MwMDA0MCwKKzB4OTU4MDAwMDMsCisweGNkMDAwMDQwLAorMHhjZDAwMDA1OCwKKzB4ODAwMDAyNjEsCisweGNjMDAwMDdmLAorMHhjODIwMDAxNywKKzB4YzgzMDAwMjIsCisweDlhMDAwMDA2LAorMHgwZTI4MDAwMSwKKzB4YzgyNDAwMWUsCisweDBhNjQwMDAxLAorMHhkNDAwMTI0MCwKKzB4Y2U0MDAwNDAsCisweGMwMzZjMDAwLAorMHg5NjgwMDAwNywKKzB4Mzc3NDc5MDAsCisweDA0MWMwMDAxLAorMHhjZjQwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNmMDAwM2ZhLAorMHg3YzAzMDAwMCwKKzB4Y2EwYzAwMTAsCisweDdjNDEwMDAwLAorMHg5NGMwMDAwNCwKKzB4N2M0MTQwMDAsCisweGQ0MjAwMmM0LAorMHhjZGUwMDA0NCwKKzB4OWIwMDAwMGIsCisweDdjNDE4MDAwLAorMHhjYzAwMDA0YiwKKzB4Y2RhMDAwNDksCisweGNkMjAwMDQxLAorMHhjZDYwMDA0MSwKKzB4Y2RhMDAwNDEsCisweDA2MjAwMDAxLAorMHhjZTAwMDA1NiwKKzB4ODAwMDAyNjEsCisweGNjMDAwMDdmLAorMHhjODI4MDAyMCwKKzB4YzgyYzAwMjEsCisweGNjMDAwMDYzLAorMHg3ZWVhNDAwMSwKKzB4NjU3NDAwMjAsCisweDdmNTM0MDJjLAorMHgyNjljMDAwMiwKKzB4N2RmNWMwMjAsCisweDY5ZjgwMDIwLAorMHhjZTgwMDA0YiwKKzB4Y2U2MDAwNDksCisweGNkZTAwMDQxLAorMHhjZmEwMDA0MSwKKzB4Y2U2MDAwNDEsCisweDI3MWMwMDAyLAorMHg3ZGY1YzAyMCwKKzB4NjlmODAwMjAsCisweDdkYjI0MDAxLAorMHhjZjAwMDA0YiwKKzB4Y2U2MDAwNDksCisweGNkZTAwMDQxLAorMHhjZmEwMDA0MSwKKzB4ODAwMDAwYmQsCisweGNlNjAwMDQxLAorMHhjODIwMDAxNywKKzB4YzgzMDAwMjIsCisweDlhMDAwMDA2LAorMHgwZTI4MDAwMSwKKzB4YzgyNDAwMWUsCisweDBhNjQwMDAxLAorMHhkNDAwMTI0MCwKKzB4Y2U0MDAwNDAsCisweGNhMGMwMDEwLAorMHg3YzQxMDAwMCwKKzB4OTRjMDAwMGIsCisweGMwMzZjMDAwLAorMHg5NjgwMDAwNywKKzB4Mzc3NDc5MDAsCisweDA0MWMwMDAxLAorMHhjZjQwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNmMDAwM2ZhLAorMHg3YzAzMDAwMCwKKzB4ODAwMDAwYjYsCisweDdjNDE0MDAwLAorMHhjYzAwMDA0OCwKKzB4ODAwMDAwZWYsCisweDAwMDAwMDAwLAorMHhjODIwMDAxNywKKzB4YzgxYzAwMjMsCisweDBlMjQwMDAyLAorMHg5OWMwMDAxNSwKKzB4N2M0MTgwMDAsCisweDBhMjAwMDAxLAorMHhjZTAwMDA1NiwKKzB4ZDQwMDA0NDAsCisweGNjMDAwMDQwLAorMHhjMDM2YzAwMCwKKzB4Y2ExNDAwMTMsCisweDk2NDAwMDA3LAorMHgzNzc0NzkwMCwKKzB4Y2Y0MDAwNDAsCisweGNjMDAwMDQwLAorMHhjODMwMDNmYSwKKzB4ODAwMDAxMDQsCisweGNmMDAwMDIyLAorMHhjYzAwMDAyMiwKKzB4OTU0MDAxNWQsCisweGNjMDAwMDdmLAorMHhjY2EwMDA0NiwKKzB4ODAwMDAwMDAsCisweGNjMjAwMDQ2LAorMHg4MDAwMDI2MSwKKzB4Y2MwMDAwNjQsCisweGM4MjAwMDE3LAorMHhjODEwMDAxZiwKKzB4OTYwMDAwMDUsCisweDA5MTAwMDAxLAorMHhkNDAwMDQ0MCwKKzB4Y2QwMDAwNDAsCisweGNkMDAwMDIyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweGM4MGMwMDI1LAorMHg5NGMwZmVlYiwKKzB4YzgxMDAwMDgsCisweGNkMDAwMDQwLAorMHhkNDAwMGZjMCwKKzB4ODAwMDAwMDAsCisweGQ0MDAwZmEyLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGNjYzAwM2ZkLAorMHhjZDAwMDNmYywKKzB4Y2NjMDAwNDIsCisweGNkMDAwMDQyLAorMHgyOTE0MDAxZiwKKzB4MjkxODAwMTAsCisweDMxOTgwMDA3LAorMHgzYjVjMDAwMSwKKzB4N2Q3NjAwMGIsCisweDk5ODAwMDA1LAorMHg3ZDVlNDAwYiwKKzB4Y2MwMDAwNDIsCisweDgwMDAwMjYxLAorMHhjYzAwMDA0ZCwKKzB4Mjk5ODAwMDEsCisweDI5MmMwMDA4LAorMHg5OTgwMDAzZCwKKzB4MzJlYzAwMDEsCisweDk2MDAwMDA0LAorMHgyOTMwMDAwYywKKzB4ODAwMDAyNjEsCisweGNjMDAwMDQyLAorMHgwNDE0MDAxMCwKKzB4Y2Q0MDAwNDIsCisweDMzMzAwMDAxLAorMHgzNDI4MDAwMSwKKzB4ODQwMDAxNWUsCisweGM4MTQwMDAzLAorMHg5YjQwMDAxYiwKKzB4MDQzODAwMGMsCisweDg0MDAwMTVlLAorMHhjODE0MDAwMywKKzB4OWI0MDAwMTcsCisweDA0MzgwMDA4LAorMHg4NDAwMDE1ZSwKKzB4YzgxNDAwMDMsCisweDliNDAwMDEzLAorMHgwNDM4MDAwNCwKKzB4ODQwMDAxNWUsCisweGM4MTQwMDAzLAorMHg5YjQwMDAxNSwKKzB4YzgwYzAzZmQsCisweDlhODAwMDA5LAorMHhjODEwMDNmYywKKzB4OWIwMDAxMTgsCisweGNjMDAwMDRkLAorMHgwNDE0MDAxMCwKKzB4Y2NjMDAwNDIsCisweGNkMDAwMDQyLAorMHg4MDAwMDEzNiwKKzB4Y2Q0MDAwNDIsCisweDk2YzAwMTExLAorMHhjYzAwMDA0ZCwKKzB4ODAwMDAyNjEsCisweGNjMDAwMDRlLAorMHg5YWMwMDAwMywKKzB4Y2MwMDAwNGQsCisweGNjMDAwMDRlLAorMHhkZjgzMDAwMCwKKzB4ODAwMDAwMDAsCisweGQ4MDMwMWZmLAorMHg5YWMwMDEwNywKKzB4Y2MwMDAwNGQsCisweDgwMDAwMjYxLAorMHhjYzAwMDA0ZSwKKzB4YzgxODAwMDMsCisweGM4MWMwMDAzLAorMHhjODIwMDAwMywKKzB4N2Q1ZDQwMDMsCisweDdkYTFjMDAzLAorMHg3ZDVkNDAwYywKKzB4MmExMDAwMWYsCisweDI5OWMwMDFmLAorMHg3ZDFkMDAwYiwKKzB4N2QxNzQwMGIsCisweDg4MDAwMDAwLAorMHg3ZTkyODAwYiwKKzB4OTY0MDAwMDQsCisweGNjMDAwMDRlLAorMHg4MDAwMDI2MSwKKzB4Y2MwMDAwNDIsCisweDA0MzgwMDA4LAorMHhjZjgwMDA0MiwKKzB4YzgwODAwMDMsCisweGM4MGMwMDAzLAorMHhjODEwMDAwMywKKzB4YzgxNDAwMDMsCisweGM4MTgwMDAzLAorMHhjODFjMDAwMywKKzB4YzgyNDAwMDMsCisweGM4MjgwMDAzLAorMHgyOWZjMDAxZiwKKzB4MmFiMDAwMWYsCisweDdmZjNjMDBiLAorMHgyOGYwMDAxZiwKKzB4N2ZmM2MwMGIsCisweDI5NzAwMDFmLAorMHg3ZmYzYzAwYiwKKzB4N2Q4ODgwMDEsCisweDdkY2NjMDAxLAorMHg3ZTUxMDAwMSwKKzB4N2U5NTQwMDEsCisweDdjOTA4MDAyLAorMHg3Y2Q0YzAwMiwKKzB4N2NiYzgwMGIsCisweDlhYzAwMDAzLAorMHg3YzhmNDAwYiwKKzB4MzhiNDAwMDEsCisweDliNDAwMGQ4LAorMHhjYzAwMDA0ZCwKKzB4OWJjMDAwZDYsCisweGNjMDAwMDRlLAorMHhjODBjMDNmZCwKKzB4YzgxMDAzZmMsCisweGNjYzAwMDQyLAorMHg4MDAwMDE2ZiwKKzB4Y2QwMDAwNDIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhjYzQwMDA0MCwKKzB4Y2M0MDAwNDAsCisweGNjNDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2NjMDAwNDAsCisweGNjYzAwMDBkLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwNDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4NjUxNDAwMjAsCisweDdkNGQ0MDJjLAorMHgyNDU4MDAwMiwKKzB4N2Q1OTgwMjAsCisweDdjNDFjMDAwLAorMHhjZDgwMDA0MiwKKzB4Njk5ODAwMjAsCisweGNkODAwMDQyLAorMHhjZGMwMDA0MiwKKzB4YzAyM2MwMDAsCisweDA1ZTQwMDAyLAorMHg3Y2EwODAwYiwKKzB4MjY2NDAwMTAsCisweDdjYTQ4MDBjLAorMHhjYzgwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNjYzAwMDQwLAorMHg5NWMwMDAwZSwKKzB4Y2QwMDAwNDAsCisweDA5ZGMwMDAxLAorMHhjODI4MDAwMywKKzB4OTY4MDAwMDgsCisweGNlODAwMDQwLAorMHhjODM0MDAxZCwKKzB4OTc0MDAwMDAsCisweGM4MzQwMDFkLAorMHgyNmE4MDAwOCwKKzB4ODQwMDAyNjQsCisweGNjMmIwMDAwLAorMHg5OWMwZmZmNywKKzB4MDlkYzAwMDEsCisweGRjM2EwMDAwLAorMHg5NzgwMDAwNCwKKzB4N2M0MTgwMDAsCisweDgwMDAwMWEzLAorMHgyNTk4MDAwMiwKKzB4YTAwMDAwMDAsCisweDdkODA4MDAwLAorMHhjODE4MDAxZCwKKzB4N2M0MGMwMDAsCisweDY0ZDAwMDA4LAorMHg5NTgwMDAwMCwKKzB4YzgxODAwMWQsCisweGNjMTMwMDAwLAorMHhjYzgwMDA0MCwKKzB4Y2NjMDAwNDAsCisweDgwMDAwMDAwLAorMHhjYzQwMDA0MCwKKzB4YzgxMDAwMWYsCisweDdjNDBjMDAwLAorMHhjYzgwMDA0MCwKKzB4N2NkMTQwMGMsCisweGNkNDAwMDQwLAorMHgwNTE4MDAwMSwKKzB4ODAwMDAwMDAsCisweGNkODAwMDIyLAorMHg3YzQwYzAwMCwKKzB4NjQ1MDAwMjAsCisweDg0MDAwMjY0LAorMHhjYzAwMDA2MSwKKzB4N2NkMGMwMmMsCisweGM4MjAwMDE3LAorMHhjOGQ2MDAwMCwKKzB4OTk0MDAwMDgsCisweDdjNDM4MDAwLAorMHhkZjgzMDAwMCwKKzB4Y2ZhMDAwNGYsCisweDg0MDAwMjY0LAorMHhjYzAwMDA2MiwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDdmLAorMHg4MDAwMDI2MSwKKzB4Y2MwMDAwNjIsCisweDg0MDAwMjY0LAorMHhjYzAwMDA2MSwKKzB4YzgyMDAwMTcsCisweDdjNDBjMDAwLAorMHhjMDM2ZmYwMCwKKzB4YzgxMDAwMGQsCisweGMwMzAzZmZmLAorMHg3Y2Y1NDAwYiwKKzB4N2Q1MTgwMGIsCisweDdkODE4MDBmLAorMHg5OTgwMDAwOCwKKzB4N2NmMzgwMGIsCisweGRmODMwMDAwLAorMHhjZmEwMDA0ZiwKKzB4ODQwMDAyNjQsCisweGNjMDAwMDYyLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwN2YsCisweDgwMDAwMjYxLAorMHhjYzAwMDA2MiwKKzB4ODQwMDAyNjQsCisweDdjNDBjMDAwLAorMHgyOGRjMDAwOCwKKzB4OTVjMDAwMTksCisweDMwZGMwMDEwLAorMHg3YzQxMDAwMCwKKzB4OTljMDAwMDQsCisweDY0NTQwMDIwLAorMHg4MDAwMDIwOSwKKzB4YzkxZDAwMDAsCisweDdkMTUwMDJjLAorMHhjOTFlMDAwMCwKKzB4N2M0MjAwMDAsCisweDdjNDI0MDAwLAorMHg3YzQxODAwMCwKKzB4N2RlNWMwMGIsCisweDdkZTI4MDA3LAorMHg5YTgwMDAwZSwKKzB4NDFhYzAwMDUsCisweDlhYzAwMDAwLAorMHgwYWVjMDAwMSwKKzB4MzBkYzAwMTAsCisweDk5YzAwMDA0LAorMHgwMDAwMDAwMCwKKzB4ODAwMDAyMGMsCisweGM5MWQwMDAwLAorMHg4MDAwMDIwYywKKzB4YzkxZTAwMDAsCisweGNjODAwMDQwLAorMHhjY2MwMDA0MCwKKzB4ZDA0MDAwNDAsCisweGM4MGMwMDI1LAorMHg5NGMwZmRlMywKKzB4YzgxMDAwMDgsCisweGNkMDAwMDQwLAorMHhkNDAwMGZjMCwKKzB4ODAwMDAwMDAsCisweGQ0MDAwZmEyLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGQ0MDAwM2MwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4N2M0MGMwMDAsCisweDMwZDAwMDA2LAorMHgwZDEwMDAwNiwKKzB4OTkwMDAwMDcsCisweGM4MTQwMDE1LAorMHg5OTQwMDAwNSwKKzB4Y2MwMDAwNTIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhjY2MwMDA0MCwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2M0ZDAwMDAsCisweGRjM2EwMDAwLAorMHg5NzgwZmRiYywKKzB4MDRjYzAwMDEsCisweDgwMDAwMjQzLAorMHhjYzRkMDAwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHgyOTI0MDAxOCwKKzB4MzI2NDAwMDEsCisweDk2NDAwMDBmLAorMHhjYzgwMDA0MCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHg3YzQxYzAwMCwKKzB4Y2NjMDAwNDMsCisweGNkMDAwMDQzLAorMHgzMWRjN2ZmZiwKKzB4Y2RjMDAwNDMsCisweGNjYzAwMDQwLAorMHhjZDAwMDA0MCwKKzB4Y2Q0MDAwNDAsCisweGNkODAwMDQwLAorMHg4MDAwMDAwMCwKKzB4Y2RjMDAwNDAsCisweGNjYzAwMDQwLAorMHhjZDAwMDA0MCwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDQwLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwN2YsCisweGNjMDAwMDdmLAorMHg4MDAwMDAwMCwKKzB4Y2MwMDAwN2YsCisweGNjMDAwMDdmLAorMHg4ODAwMDAwMCwKKzB4Y2MwMDAwN2YsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDMwMjIzLAorMHgwMDA0MDIyYiwKKzB4MDAwNTAwYTAsCisweDAwMDIwMDAzLAorMHgwMDA2MDAzYywKKzB4MDAwNzAwMjcsCisweDAwMDgwMTkyLAorMHgwMDA5MDA0NCwKKzB4MDAwYTAwMmQsCisweDAwMTAwMjVmLAorMHgwMDE3MDBmMSwKKzB4MDAyMjAxZDgsCisweDAwMjMwMWU5LAorMHgwMDI2MDA0YywKKzB4MDAyNzAwNWYsCisweDAwMjAwMTFiLAorMHgwMDI4MDA5MywKKzB4MDAyOTAwNGYsCisweDAwMmEwMDg0LAorMHgwMDJiMDA2NSwKKzB4MDAyZjAwOGUsCisweDAwMzIwMGQ5LAorMHgwMDM0MDIzMywKKzB4MDAzNjAwNzUsCisweDAwMzkwMTBiLAorMHgwMDNjMDFmZCwKKzB4MDAzZjAwYTAsCisweDAwNDEwMjQ4LAorMHgwMDQ0MDE5NSwKKzB4MDA0ODAxOWUsCisweDAwNDkwMWM2LAorMHgwMDRhMDFkMCwKKzB4MDA1NTAyMjYsCisweDAwNTYwMjJlLAorMHgwMDYwMDAwYSwKKzB4MDA2MTAwMmEsCisweDAwNjIwMDMwLAorMHgwMDYzMDAzMCwKKzB4MDA2NDAwMzAsCisweDAwNjUwMDMwLAorMHgwMDY2MDAzMCwKKzB4MDA2NzAwMzAsCisweDAwNjgwMDM3LAorMHgwMDY5MDAzZiwKKzB4MDA2YTAwNDcsCisweDAwNmIwMDQ3LAorMHgwMDZjMDA0NywKKzB4MDA2ZDAwNDcsCisweDAwNmUwMDQ3LAorMHgwMDZmMDA0NywKKzB4MDA3MDAwNDcsCisweDAwNzMwMjVmLAorMHgwMDdiMDI0MSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY3MzBfcGZwX21pY3JvY29kZVtdID0geworMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweDdlODI4MDBiLAorMHg4MDAwMDAwMCwKKzB4ZGMwMzAwMDAsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4YzgxODAwMGUsCisweDMxOTgwMDAxLAorMHg3YzQyNDAwMCwKKzB4OTU4MDAyM2EsCisweDdjNDI4MDAwLAorMHhjODFjMDAxYywKKzB4YzAzN2MwMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2NiNDgwMGIsCisweGMwMzYwMDAzLAorMHg5OWMwMDAwMCwKKzB4YzgxYzAwMWMsCisweDdjYjQ4MDBjLAorMHgyNGQ0MDAwMiwKKzB4N2Q2NTQwMDAsCisweGNkNDAwMDQzLAorMHhjZTgwMDA0MywKKzB4Y2QwMDAwNDMsCisweGNjODAwMDQwLAorMHhjZTQwMDA0MCwKKzB4Y2U4MDAwNDAsCisweGNjYzAwMDQwLAorMHhkYzNhMDAwMCwKKzB4OTc4MGZmZGUsCisweGNkMDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4ODAwMDAwMTgsCisweDdjNDEwMDAwLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjODE4MDAwZSwKKzB4ODAwMDAwMGMsCisweDMxOTgwMDAyLAorMHhkNDAwMDNjMCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjODE4MDAwZSwKKzB4Mjg4YzAwMDgsCisweDMwY2MwMDBmLAorMHgzNDEwMDAwMSwKKzB4N2QwZDAwMDgsCisweDgwMDAwMDBjLAorMHg3ZDkxODAwYiwKKzB4Y2M4MDAwNDAsCisweGQwNDAwMDQwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweDdlODI4MDBiLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGQ0MDAwM2MwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4Y2M0MDAzZjksCisweDgwMDAwMjQ5LAorMHhjYzQwMDNmOCwKKzB4YzAzN2ZmZmYsCisweDdjNDE0MDAwLAorMHhjZjQxYTI5ZSwKKzB4YzgyMDAzZjgsCisweGM4MWMwM2Y5LAorMHg2NjIwMDAyMCwKKzB4YzgxODAzZmIsCisweDdkZTFjMDJjLAorMHg3ZDU4YzAwOCwKKzB4N2NkY2MwMjAsCisweDY5MTAwMDIwLAorMHhjMDM2MDAwMywKKzB4Y2MwMDAwNTQsCisweDdjYjQ4MDBjLAorMHg4MDAwMDA2OSwKKzB4Y2M4MDAwNDAsCisweDdjNDE4MDAwLAorMHhjZDgxYTI5ZSwKKzB4Y2M4MDAwNDAsCisweDgwMDAwMDY3LAorMHhjZDgwMDA0MCwKKzB4YzAxOWZmZmYsCisweGNjODAwMDQwLAorMHhjZDgxYTI5ZSwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4Y2NjMWExZmEsCisweGNkMDFhMWY5LAorMHhjZDQxYTI5ZCwKKzB4Y2NjMDAwNDAsCisweGNkMDAwMDQwLAorMHhjZDQwMDA0MCwKKzB4Y2M0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGNjMDAwMDU0LAorMHhjYzgwMDA0MCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4Y2NjMWExZmEsCisweGNkMDFhMWY5LAorMHhjZDQxYTI5ZCwKKzB4Y2NjMDAwNDAsCisweGNkMDAwMDQwLAorMHhjZDQwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweDdjNDBjMDAwLAorMHgzMGQwMDAwMSwKKzB4Y2NjMWEyOWYsCisweDk1MDAwMDAzLAorMHgwNDE0MDAwMSwKKzB4MDQxNDAwMDIsCisweGNkNDAwM2ZiLAorMHhjYzgwMDA0MCwKKzB4ODAwMDAwMDAsCisweGNjYzAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2M4MDAwNDAsCisweGNjYzFhMmEyLAorMHg4MDAwMDAwMCwKKzB4Y2NjMDAwNDAsCisweDdjNDBjMDAwLAorMHgyOGQ0MDAxZiwKKzB4Y2M4MDAwNDAsCisweDk1NDAwMDAzLAorMHg3YzQxMDAwMCwKKzB4Y2NjMDAwNTcsCisweDI5MTgwMDFmLAorMHhjY2MwMDA0MCwKKzB4OTU4MDAwMDMsCisweGNkMDAwMDQwLAorMHhjZDAwMDA1OCwKKzB4ODAwMDAyNDksCisweGNjMDAwMDdmLAorMHhjODIwMDAxNywKKzB4YzgzMDAwMjIsCisweDlhMDAwMDA2LAorMHgwZTI4MDAwMSwKKzB4YzgyNDAwMWUsCisweDBhNjQwMDAxLAorMHhkNDAwMTI0MCwKKzB4Y2U0MDAwNDAsCisweGMwMzZjMDAwLAorMHg5NjgwMDAwNywKKzB4Mzc3NDc5MDAsCisweDA0MWMwMDAxLAorMHhjZjQwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNmMDAwM2ZhLAorMHg3YzAzMDAwMCwKKzB4Y2EwYzAwMTAsCisweDdjNDEwMDAwLAorMHg5NGMwMDAwNCwKKzB4N2M0MTQwMDAsCisweGQ0MjAwMmM0LAorMHhjZGUwMDA0NCwKKzB4OWIwMDAwMGIsCisweDdjNDE4MDAwLAorMHhjYzAwMDA0YiwKKzB4Y2RhMDAwNDksCisweGNkMjAwMDQxLAorMHhjZDYwMDA0MSwKKzB4Y2RhMDAwNDEsCisweDA2MjAwMDAxLAorMHhjZTAwMDA1NiwKKzB4ODAwMDAyNDksCisweGNjMDAwMDdmLAorMHhjODI4MDAyMCwKKzB4YzgyYzAwMjEsCisweGNjMDAwMDYzLAorMHg3ZWVhNDAwMSwKKzB4NjU3NDAwMjAsCisweDdmNTM0MDJjLAorMHgyNjljMDAwMiwKKzB4N2RmNWMwMjAsCisweDY5ZjgwMDIwLAorMHhjZTgwMDA0YiwKKzB4Y2U2MDAwNDksCisweGNkZTAwMDQxLAorMHhjZmEwMDA0MSwKKzB4Y2U2MDAwNDEsCisweDI3MWMwMDAyLAorMHg3ZGY1YzAyMCwKKzB4NjlmODAwMjAsCisweDdkYjI0MDAxLAorMHhjZjAwMDA0YiwKKzB4Y2U2MDAwNDksCisweGNkZTAwMDQxLAorMHhjZmEwMDA0MSwKKzB4ODAwMDAwYmMsCisweGNlNjAwMDQxLAorMHhjODIwMDAxNywKKzB4YzgzMDAwMjIsCisweDlhMDAwMDA2LAorMHgwZTI4MDAwMSwKKzB4YzgyNDAwMWUsCisweDBhNjQwMDAxLAorMHhkNDAwMTI0MCwKKzB4Y2U0MDAwNDAsCisweGNhMGMwMDEwLAorMHg3YzQxMDAwMCwKKzB4OTRjMDAwMGIsCisweGMwMzZjMDAwLAorMHg5NjgwMDAwNywKKzB4Mzc3NDc5MDAsCisweDA0MWMwMDAxLAorMHhjZjQwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNmMDAwM2ZhLAorMHg3YzAzMDAwMCwKKzB4ODAwMDAwYjUsCisweDdjNDE0MDAwLAorMHhjYzAwMDA0OCwKKzB4ODAwMDAwZWUsCisweDAwMDAwMDAwLAorMHhjODIwMDAxNywKKzB4YzgxYzAwMjMsCisweDBlMjQwMDAyLAorMHg5OWMwMDAxNSwKKzB4N2M0MTgwMDAsCisweDBhMjAwMDAxLAorMHhjZTAwMDA1NiwKKzB4ZDQwMDA0NDAsCisweGNjMDAwMDQwLAorMHhjMDM2YzAwMCwKKzB4Y2ExNDAwMTMsCisweDk2NDAwMDA3LAorMHgzNzc0NzkwMCwKKzB4Y2Y0MDAwNDAsCisweGNjMDAwMDQwLAorMHhjODMwMDNmYSwKKzB4ODAwMDAxMDMsCisweGNmMDAwMDIyLAorMHhjYzAwMDAyMiwKKzB4OTU0MDAxNDYsCisweGNjMDAwMDdmLAorMHhjY2EwMDA0NiwKKzB4ODAwMDAwMDAsCisweGNjMjAwMDQ2LAorMHg4MDAwMDI0OSwKKzB4Y2MwMDAwNjQsCisweGM4MjAwMDE3LAorMHhjODEwMDAxZiwKKzB4OTYwMDAwMDUsCisweDA5MTAwMDAxLAorMHhkNDAwMDQ0MCwKKzB4Y2QwMDAwNDAsCisweGNkMDAwMDIyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweGM4MGMwMDI1LAorMHg5NGMwZmVlYywKKzB4YzgxMDAwMDgsCisweGNkMDAwMDQwLAorMHhkNDAwMGZjMCwKKzB4ODAwMDAwMDAsCisweGQ0MDAwZmEyLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGNjYzAwM2ZkLAorMHhjZDAwMDNmYywKKzB4Y2NjMDAwNDIsCisweGNkMDAwMDQyLAorMHgyOTE0MDAxZiwKKzB4MjkxODAwMTAsCisweDMxOTgwMDA3LAorMHgzYjVjMDAwMSwKKzB4N2Q3NjAwMGIsCisweDk5ODAwMDA1LAorMHg3ZDVlNDAwYiwKKzB4Y2MwMDAwNDIsCisweDgwMDAwMjQ5LAorMHhjYzAwMDA0ZCwKKzB4Mjk5ODAwMDEsCisweDI5MmMwMDA4LAorMHg5OTgwMDAzZCwKKzB4MzJlYzAwMDEsCisweDk2MDAwMDA0LAorMHgyOTMwMDAwYywKKzB4ODAwMDAyNDksCisweGNjMDAwMDQyLAorMHgwNDE0MDAxMCwKKzB4Y2Q0MDAwNDIsCisweDMzMzAwMDAxLAorMHgzNDI4MDAwMSwKKzB4ODQwMDAxNWQsCisweGM4MTQwMDAzLAorMHg5YjQwMDAxYiwKKzB4MDQzODAwMGMsCisweDg0MDAwMTVkLAorMHhjODE0MDAwMywKKzB4OWI0MDAwMTcsCisweDA0MzgwMDA4LAorMHg4NDAwMDE1ZCwKKzB4YzgxNDAwMDMsCisweDliNDAwMDEzLAorMHgwNDM4MDAwNCwKKzB4ODQwMDAxNWQsCisweGM4MTQwMDAzLAorMHg5YjQwMDAxNSwKKzB4YzgwYzAzZmQsCisweDlhODAwMDA5LAorMHhjODEwMDNmYywKKzB4OWIwMDAxMDEsCisweGNjMDAwMDRkLAorMHgwNDE0MDAxMCwKKzB4Y2NjMDAwNDIsCisweGNkMDAwMDQyLAorMHg4MDAwMDEzNSwKKzB4Y2Q0MDAwNDIsCisweDk2YzAwMGZhLAorMHhjYzAwMDA0ZCwKKzB4ODAwMDAyNDksCisweGNjMDAwMDRlLAorMHg5YWMwMDAwMywKKzB4Y2MwMDAwNGQsCisweGNjMDAwMDRlLAorMHhkZjgzMDAwMCwKKzB4ODAwMDAwMDAsCisweGQ4MDMwMWZmLAorMHg5YWMwMDBmMCwKKzB4Y2MwMDAwNGQsCisweDgwMDAwMjQ5LAorMHhjYzAwMDA0ZSwKKzB4YzgxODAwMDMsCisweGM4MWMwMDAzLAorMHhjODIwMDAwMywKKzB4N2Q1ZDQwMDMsCisweDdkYTFjMDAzLAorMHg3ZDVkNDAwYywKKzB4MmExMDAwMWYsCisweDI5OWMwMDFmLAorMHg3ZDFkMDAwYiwKKzB4N2QxNzQwMGIsCisweDg4MDAwMDAwLAorMHg3ZTkyODAwYiwKKzB4OTY0MDAwMDQsCisweGNjMDAwMDRlLAorMHg4MDAwMDI0OSwKKzB4Y2MwMDAwNDIsCisweDA0MzgwMDA4LAorMHhjZjgwMDA0MiwKKzB4YzgwODAwMDMsCisweGM4MGMwMDAzLAorMHhjODEwMDAwMywKKzB4YzgxNDAwMDMsCisweGM4MTgwMDAzLAorMHhjODFjMDAwMywKKzB4YzgyNDAwMDMsCisweGM4MjgwMDAzLAorMHgyOWZjMDAxZiwKKzB4MmFiMDAwMWYsCisweDdmZjNjMDBiLAorMHgyOGYwMDAxZiwKKzB4N2ZmM2MwMGIsCisweDI5NzAwMDFmLAorMHg3ZmYzYzAwYiwKKzB4N2Q4ODgwMDEsCisweDdkY2NjMDAxLAorMHg3ZTUxMDAwMSwKKzB4N2U5NTQwMDEsCisweDdjOTA4MDAyLAorMHg3Y2Q0YzAwMiwKKzB4N2NiYzgwMGIsCisweDlhYzAwMDAzLAorMHg3YzhmNDAwYiwKKzB4MzhiNDAwMDEsCisweDliNDAwMGMxLAorMHhjYzAwMDA0ZCwKKzB4OWJjMDAwYmYsCisweGNjMDAwMDRlLAorMHhjODBjMDNmZCwKKzB4YzgxMDAzZmMsCisweGNjYzAwMDQyLAorMHg4MDAwMDE2ZSwKKzB4Y2QwMDAwNDIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhjYzQwMDA0MCwKKzB4Y2M0MDAwNDAsCisweGNjNDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2NjMDAwNDAsCisweGNjYzAwMDBkLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwNDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4NjUxNDAwMjAsCisweDdkNGQ0MDJjLAorMHgyNDU4MDAwMiwKKzB4N2Q1OTgwMjAsCisweDdjNDFjMDAwLAorMHhjZDgwMDA0MiwKKzB4Njk5ODAwMjAsCisweGNkODAwMDQyLAorMHhjZGMwMDA0MiwKKzB4YzAyM2MwMDAsCisweDA1ZTQwMDAyLAorMHg3Y2EwODAwYiwKKzB4MjY2NDAwMTAsCisweDdjYTQ4MDBjLAorMHhjYzgwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNjYzAwMDQwLAorMHg5NWMwMDAwZSwKKzB4Y2QwMDAwNDAsCisweDA5ZGMwMDAxLAorMHhjODI4MDAwMywKKzB4OTY4MDAwMDgsCisweGNlODAwMDQwLAorMHhjODM0MDAxZCwKKzB4OTc0MDAwMDAsCisweGM4MzQwMDFkLAorMHgyNmE4MDAwOCwKKzB4ODQwMDAyNGMsCisweGNjMmIwMDAwLAorMHg5OWMwZmZmNywKKzB4MDlkYzAwMDEsCisweGRjM2EwMDAwLAorMHg5NzgwMDAwNCwKKzB4N2M0MTgwMDAsCisweDgwMDAwMWEyLAorMHgyNTk4MDAwMiwKKzB4YTAwMDAwMDAsCisweDdkODA4MDAwLAorMHhjODE4MDAxZCwKKzB4N2M0MGMwMDAsCisweDY0ZDAwMDA4LAorMHg5NTgwMDAwMCwKKzB4YzgxODAwMWQsCisweGNjMTMwMDAwLAorMHhjYzgwMDA0MCwKKzB4Y2NjMDAwNDAsCisweDgwMDAwMDAwLAorMHhjYzQwMDA0MCwKKzB4YzgxMDAwMWYsCisweDdjNDBjMDAwLAorMHhjYzgwMDA0MCwKKzB4N2NkMTQwMGMsCisweGNkNDAwMDQwLAorMHgwNTE4MDAwMSwKKzB4ODAwMDAwMDAsCisweGNkODAwMDIyLAorMHg3YzQwYzAwMCwKKzB4NjQ1MDAwMjAsCisweDg0MDAwMjRjLAorMHhjYzAwMDA2MSwKKzB4N2NkMGMwMmMsCisweGM4MjAwMDE3LAorMHhjOGQ2MDAwMCwKKzB4OTk0MDAwMDgsCisweDdjNDM4MDAwLAorMHhkZjgzMDAwMCwKKzB4Y2ZhMDAwNGYsCisweDg0MDAwMjRjLAorMHhjYzAwMDA2MiwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDdmLAorMHg4MDAwMDI0OSwKKzB4Y2MwMDAwNjIsCisweDg0MDAwMjRjLAorMHhjYzAwMDA2MSwKKzB4YzgyMDAwMTcsCisweDdjNDBjMDAwLAorMHhjMDM2ZmYwMCwKKzB4YzgxMDAwMGQsCisweGMwMzAzZmZmLAorMHg3Y2Y1NDAwYiwKKzB4N2Q1MTgwMGIsCisweDdkODE4MDBmLAorMHg5OTgwMDAwOCwKKzB4N2NmMzgwMGIsCisweGRmODMwMDAwLAorMHhjZmEwMDA0ZiwKKzB4ODQwMDAyNGMsCisweGNjMDAwMDYyLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwN2YsCisweDgwMDAwMjQ5LAorMHhjYzAwMDA2MiwKKzB4ODQwMDAyNGMsCisweDdjNDBjMDAwLAorMHgyOGRjMDAwOCwKKzB4OTVjMDAwMTksCisweDMwZGMwMDEwLAorMHg3YzQxMDAwMCwKKzB4OTljMDAwMDQsCisweDY0NTQwMDIwLAorMHg4MDAwMDIwOCwKKzB4YzkxZDAwMDAsCisweDdkMTUwMDJjLAorMHhjOTFlMDAwMCwKKzB4N2M0MjAwMDAsCisweDdjNDI0MDAwLAorMHg3YzQxODAwMCwKKzB4N2RlNWMwMGIsCisweDdkZTI4MDA3LAorMHg5YTgwMDAwZSwKKzB4NDFhYzAwMDUsCisweDlhYzAwMDAwLAorMHgwYWVjMDAwMSwKKzB4MzBkYzAwMTAsCisweDk5YzAwMDA0LAorMHgwMDAwMDAwMCwKKzB4ODAwMDAyMGIsCisweGM5MWQwMDAwLAorMHg4MDAwMDIwYiwKKzB4YzkxZTAwMDAsCisweGNjODAwMDQwLAorMHhjY2MwMDA0MCwKKzB4ZDA0MDAwNDAsCisweGM4MGMwMDI1LAorMHg5NGMwZmRlNCwKKzB4YzgxMDAwMDgsCisweGNkMDAwMDQwLAorMHhkNDAwMGZjMCwKKzB4ODAwMDAwMDAsCisweGQ0MDAwZmEyLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGQ0MDAwM2MwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4N2M0MGMwMDAsCisweDMwZDAwMDA2LAorMHgwZDEwMDAwNiwKKzB4OTkwMDAwMDcsCisweGM4MTQwMDE1LAorMHg5OTQwMDAwNSwKKzB4Y2MwMDAwNTIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhjY2MwMDA0MCwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2M0ZDAwMDAsCisweGRjM2EwMDAwLAorMHg5NzgwZmRiZCwKKzB4MDRjYzAwMDEsCisweDgwMDAwMjQyLAorMHhjYzRkMDAwMCwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDdmLAorMHhjYzAwMDA3ZiwKKzB4ODAwMDAwMDAsCisweGNjMDAwMDdmLAorMHhjYzAwMDA3ZiwKKzB4ODgwMDAwMDAsCisweGNjMDAwMDdmLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAzMDIyMiwKKzB4MDAwNDAyMmEsCisweDAwMDUwMDlmLAorMHgwMDAyMDAwMywKKzB4MDAwNjAwM2MsCisweDAwMDcwMDI3LAorMHgwMDA4MDE5MSwKKzB4MDAwOTAwNDQsCisweDAwMGEwMDJkLAorMHgwMDEwMDI0NywKKzB4MDAxNzAwZjAsCisweDAwMjIwMWQ3LAorMHgwMDIzMDFlOCwKKzB4MDAyNjAwNGMsCisweDAwMjcwMDVmLAorMHgwMDIwMDExYSwKKzB4MDAyODAwOTIsCisweDAwMjkwMDRmLAorMHgwMDJhMDA4MywKKzB4MDAyYjAwNjQsCisweDAwMmYwMDhkLAorMHgwMDMyMDBkOCwKKzB4MDAzNDAyMzIsCisweDAwMzYwMDc0LAorMHgwMDM5MDEwYSwKKzB4MDAzYzAxZmMsCisweDAwM2YwMDlmLAorMHgwMDQxMDAwNSwKKzB4MDA0NDAxOTQsCisweDAwNDgwMTlkLAorMHgwMDQ5MDFjNSwKKzB4MDA0YTAxY2YsCisweDAwNTUwMjI1LAorMHgwMDU2MDIyZCwKKzB4MDA2MDAwMGEsCisweDAwNjEwMDJhLAorMHgwMDYyMDAzMCwKKzB4MDA2MzAwMzAsCisweDAwNjQwMDMwLAorMHgwMDY1MDAzMCwKKzB4MDA2NjAwMzAsCisweDAwNjcwMDMwLAorMHgwMDY4MDAzNywKKzB4MDA2OTAwM2YsCisweDAwNmEwMDQ3LAorMHgwMDZiMDA0NywKKzB4MDA2YzAwNDcsCisweDAwNmQwMDQ3LAorMHgwMDZlMDA0NywKKzB4MDA2ZjAwNDcsCisweDAwNzAwMDQ3LAorMHgwMDczMDI0NywKKzB4MDA3YjAyNDAsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCit9OworCitzdGF0aWMgY29uc3QgdTMyIFJWNzMwX2NwX21pY3JvY29kZVtdID0geworMHhjYzAwMDNlYSwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ODAwMDAwMDEsCisweGQwNDAwMDdmLAorMHg4MDAwMDAwMSwKKzB4Y2M0MDAwNDEsCisweDdjNDBjMDAwLAorMHhjMDE2MDAwNCwKKzB4MzBkMDNmZmYsCisweDdkMTUwMDBjLAorMHhjYzExMDAwMCwKKzB4MjhkODAwMWUsCisweDMxOTgwMDAxLAorMHgyOGRjMDAxZiwKKzB4YzgyMDAwMDQsCisweDk1YzAwMDA2LAorMHg3YzQyNDAwMCwKKzB4Y2MwMDAwNjIsCisweDdlNTY4MDBjLAorMHhjYzI5MDAwMCwKKzB4YzgyNDAwMDQsCisweDdlMjYwMDBiLAorMHg5NTgwMDAwNiwKKzB4N2M0MmMwMDAsCisweGNjMDAwMDYyLAorMHg3ZWQ3MDAwYywKKzB4Y2MzMTAwMDAsCisweGM4MmMwMDA0LAorMHg3ZTJlMDAwYywKKzB4Y2MwMDAwNjIsCisweDMxMTAzZmZmLAorMHg4MDAwMDAwMSwKKzB4Y2UxMTAwMDAsCisweDdjNDBjMDAwLAorMHg4MDAwMDAwMSwKKzB4Y2M0MDAwNDAsCisweDgwMDAwMDAxLAorMHhjYzQxMjI1NywKKzB4N2M0MTgwMDAsCisweGNjNDAwMDQ1LAorMHhjYzQwMDA0OCwKKzB4Y2M0MTIyNWMsCisweGNjNDFhMWZjLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhjYzQwMDA0NSwKKzB4Y2M0MDAwNDgsCisweDdjNDBjMDAwLAorMHhjYzQxMjI1YywKKzB4Y2M0MWExZmMsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGNjMDAwMDQ1LAorMHhjYzAwMDA0OCwKKzB4Y2M0MTIyNWMsCisweGNjNDFhMWZjLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHgwNDBjYTFmZCwKKzB4YzAxMjAwMDEsCisweGNjMDAwMDQ1LAorMHhjYzAwMDA0OCwKKzB4N2NkMGMwMGMsCisweGNjNDEyMjVjLAorMHhjYzQxYTFmYywKKzB4ZDA0ZDAwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDgwMDAwMDAxLAorMHhjYzQxMjI1ZCwKKzB4N2M0MDgwMDAsCisweDdjNDBjMDAwLAorMHhjMDJhMDAwMiwKKzB4N2M0MTAwMDAsCisweDdkMjkwMDBjLAorMHgzMDk0MDAwMSwKKzB4MzA5ODAwMDYsCisweDMwOWMwMzAwLAorMHgyOWRjMDAwOCwKKzB4N2M0MjAwMDAsCisweDdjNDI0MDAwLAorMHg5NTQwMDAwZiwKKzB4YzAyZTAwMDQsCisweDA1ZjAyMjU4LAorMHg3ZjJmMDAwYywKKzB4Y2MzMTAwMDAsCisweGM4MjgwMDA0LAorMHhjY2MxMjE2OSwKKzB4Y2QwMTIxNmEsCisweGNlODEyMTZiLAorMHgwZGI0MDAwMiwKKzB4Y2MwMTIxNmMsCisweDk3NDAwMDBlLAorMHgwZGI0MDAwMCwKKzB4ODAwMDAwN2IsCisweGM4MzQwMDBhLAorMHgwZGI0MDAwMiwKKzB4OTc0MDAwMDksCisweDBkYjQwMDAwLAorMHhjMDJlMDAwNCwKKzB4MDVmMDIyNTgsCisweDdmMmYwMDBjLAorMHhjYzMxMDAwMCwKKzB4YzgyODAwMDQsCisweDgwMDAwMDdiLAorMHhjODM0MDAwYSwKKzB4OTc0MDAwMDQsCisweDdlMDI4MDAwLAorMHg4MDAwMDA3YiwKKzB4YzgzNDAwMGEsCisweDBkYjQwMDA0LAorMHg5NzQwZmY4YywKKzB4MDAwMDAwMDAsCisweGNlMDEyMTZkLAorMHhjZTQxMjE2ZSwKKzB4YzgyODAwMDMsCisweGM4MzQwMDBhLAorMHg5YjQwMDAwNCwKKzB4MDQzYzAwMDUsCisweDg0MDAwMjZiLAorMHhjYzAwMDA2MiwKKzB4MGRmNDAwMDAsCisweDk3NDAwMDBiLAorMHhjODJjMDNlNiwKKzB4Y2U4MWEyYjcsCisweGMwMzAwMDA2LAorMHg3ZWYzNDAyOCwKKzB4YzAzMDAwMjAsCisweDdmNmI4MDIwLAorMHg3ZmIzYzAyOSwKKzB4Y2Y4MWEyYzQsCisweDgwMDAwMDAxLAorMHhjZmMxYTJkMSwKKzB4MGRmNDAwMDEsCisweDk3NDAwMDBiLAorMHhjODJjMDNlNywKKzB4Y2U4MWEyYmIsCisweGMwMzAwMDA2LAorMHg3ZWYzNDAyOCwKKzB4YzAzMDAwMjAsCisweDdmNmI4MDIwLAorMHg3ZmIzYzAyOSwKKzB4Y2Y4MWEyYzUsCisweDgwMDAwMDAxLAorMHhjZmMxYTJkMiwKKzB4MGRmNDAwMDIsCisweDk3NDAwMDBiLAorMHhjODJjMDNlOCwKKzB4Y2U4MWEyYmYsCisweGMwMzAwMDA2LAorMHg3ZWYzNDAyOCwKKzB4YzAzMDAwMjAsCisweDdmNmI4MDIwLAorMHg3ZmIzYzAyOSwKKzB4Y2Y4MWEyYzYsCisweDgwMDAwMDAxLAorMHhjZmMxYTJkMywKKzB4YzgyYzAzZTksCisweGNlODFhMmMzLAorMHhjMDMwMDAwNiwKKzB4N2VmMzQwMjgsCisweGMwMzAwMDIwLAorMHg3ZjZiODAyMCwKKzB4N2ZiM2MwMjksCisweGNmODFhMmM3LAorMHg4MDAwMDAwMSwKKzB4Y2ZjMWEyZDQsCisweDgwMDAwMDAxLAorMHhjYzQwMDA0MiwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHgyOTE0MDAxZCwKKzB4MzE1NDAwMDEsCisweDk5NDAwMDBjLAorMHgzMTE4MTAwMCwKKzB4YzgxYzAwMTEsCisweDk1YzAwMDAwLAorMHhjODFjMDAxMSwKKzB4Y2NjMTIxMDAsCisweGNkMDEyMTAxLAorMHhjY2MxMjEwMiwKKzB4Y2QwMTIxMDMsCisweDA0MTgwMDA0LAorMHg4MDAwMDM3YywKKzB4Y2Q4MWEyYTQsCisweGMwMmEwMDA0LAorMHg5NTgwMDAwOCwKKzB4MzZhODIxYTMsCisweGNjMjkwMDAwLAorMHhjODI4MDAwNCwKKzB4YzgxYzAwMTEsCisweDBkZTQwMDQwLAorMHg5NjQwZmZmZiwKKzB4YzgxYzAwMTEsCisweGNjYzEyMTcwLAorMHhjZDAxMjE3MSwKKzB4YzgyMDAwMTIsCisweDk2MDAwMDAwLAorMHhjODIwMDAxMiwKKzB4ODAwMDAzN2MsCisweGNjMDAwMDY0LAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGNjMDAwMDQ1LAorMHhjYzAwMDA0OCwKKzB4NDBkNDAwMDMsCisweGNkNDEyMjVjLAorMHhjZDAxYTFmYywKKzB4YzAxYTAwMDEsCisweDA0MWNhMWZkLAorMHg3ZGQ5YzAwYywKKzB4N2M0MjAwMDAsCisweDA4Y2MwMDAxLAorMHgwNjI0MDAwMSwKKzB4MDYyODAwMDIsCisweGNlMWQwMDAwLAorMHhjZTVkMDAwMCwKKzB4OThjMGZmZmEsCisweGNlOWQwMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHg3YzQwYzAwMCwKKzB4MzBkMDAwMDEsCisweDI4Y2MwMDAxLAorMHg3YzQxNDAwMCwKKzB4OTUwMDAwMDYsCisweDdjNDE4MDAwLAorMHhjZDQxMjE2ZCwKKzB4Y2Q4MTIxNmUsCisweDgwMDAwMGYyLAorMHhjODFjMDAwMywKKzB4YzAyMjAwMDQsCisweDdlMTYwMDBjLAorMHhjYzIxMDAwMCwKKzB4YzgxYzAwMDQsCisweDdjNDI0MDAwLAorMHg5OGMwMDAwNCwKKzB4N2M0MjgwMDAsCisweDgwMDAwMDAxLAorMHhjZGU1MDAwMCwKKzB4Y2U0MTIxNjksCisweGNlODEyMTZhLAorMHhjZGMxMjE2YiwKKzB4ODAwMDAwMDEsCisweGNjMDEyMTZjLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4N2M0MWMwMDAsCisweDI4YTQwMDA4LAorMHgzMjY0MDBmZiwKKzB4MGU2ODAwM2MsCisweDk2ODAwMDBhLAorMHg3YzAyMDAwMCwKKzB4N2M0MjAwMDAsCisweDFlMzAwMDAzLAorMHhjYzAwMDA2YSwKKzB4OWIwMDAwMDMsCisweDQyMjAwMDA1LAorMHgwNDIwMDA0MCwKKzB4ODAwMDAxMGYsCisweDdjMDI0MDAwLAorMHg3ZTAyNDAwMCwKKzB4OWE0MDAwMDAsCisweDBhNjQwMDAxLAorMHgzMGVjMDAxMCwKKzB4OWFjMDAwMGEsCisweGNjMDAwMDYyLAorMHhjMDJhMDAwNCwKKzB4YzgyYzAwMjEsCisweDdlOTI4MDBjLAorMHhjYzAwMDA0MSwKKzB4Y2MyOTAwMDAsCisweGNlYzAwMDIxLAorMHg4MDAwMDExZiwKKzB4YzgzMDAwMDQsCisweGNkMDEyMTZkLAorMHhjZDQxMjE2ZSwKKzB4YzgzMDAwMDMsCisweDdmMWYwMDBiLAorMHgzMGY0MDAwNywKKzB4Mjc3ODAwMDEsCisweDk3NDAwMDJhLAorMHgwN2I4MDEyNCwKKzB4OWY4MDAwMDAsCisweDAwMDAwMDAwLAorMHg4MDAwMDEzNCwKKzB4N2YxYjgwMDQsCisweDgwMDAwMTM4LAorMHg3ZjFiODAwNSwKKzB4ODAwMDAxM2MsCisweDdmMWI4MDAyLAorMHg4MDAwMDE0MCwKKzB4N2YxYjgwMDMsCisweDgwMDAwMTQ0LAorMHg3ZjFiODAwNywKKzB4ODAwMDAxNDgsCisweDdmMWI4MDA2LAorMHg4MDAwMDE0ZCwKKzB4MjhhNDAwMDgsCisweDliODAwMDE5LAorMHgyOGE0MDAwOCwKKzB4ODAwMDAxNWQsCisweDMyNjQwMGZmLAorMHg5YjgwMDAxNSwKKzB4MjhhNDAwMDgsCisweDgwMDAwMTVkLAorMHgzMjY0MDBmZiwKKzB4OWI4MDAwMTEsCisweDI4YTQwMDA4LAorMHg4MDAwMDE1ZCwKKzB4MzI2NDAwZmYsCisweDliODAwMDBkLAorMHgyOGE0MDAwOCwKKzB4ODAwMDAxNWQsCisweDMyNjQwMGZmLAorMHg5YjgwMDAwOSwKKzB4MjhhNDAwMDgsCisweDgwMDAwMTVkLAorMHgzMjY0MDBmZiwKKzB4OWI4MDAwMDUsCisweDI4YTQwMDA4LAorMHg4MDAwMDE1ZCwKKzB4MzI2NDAwZmYsCisweDI4YTQwMDA4LAorMHgzMjY0MDBmZiwKKzB4MGU2ODAwM2MsCisweDlhODBmZWIyLAorMHgyOGVjMDAwOCwKKzB4N2M0MzQwMDAsCisweDdjNDM4MDAwLAorMHg3YzQzYzAwMCwKKzB4OTZjMDAwMDcsCisweGNjMDAwMDYyLAorMHhjZjQxMjE2OSwKKzB4Y2Y4MTIxNmEsCisweGNmYzEyMTZiLAorMHg4MDAwMDAwMSwKKzB4Y2MwMTIxNmMsCisweDgwMDAwMDAxLAorMHhjZmY1MDAwMCwKKzB4Y2MwMDAwNmIsCisweDg0MDAwMzdmLAorMHgwZTY4MDAzYywKKzB4OWE4MDAwMDQsCisweGM4MjgwMDE1LAorMHg4MDAwMDAwMSwKKzB4ZDA0MDAwN2YsCisweDk2ODBmZmFiLAorMHg3ZTAyNDAwMCwKKzB4ODQwMDAyMzksCisweGMwMGUwMDAyLAorMHhjYzAwMDA0MSwKKzB4ODAwMDAyMzcsCisweGNjYzEzMDRhLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGMwMWUwMDAxLAorMHgyOTI0MDAxMiwKKzB4YzAyMjAwMDIsCisweDk2NDAwMDA1LAorMHhjMDI2MDAwNCwKKzB4YzAyN2ZmZmIsCisweDdkMjUwMDBiLAorMHhjMDI2MDAwMCwKKzB4N2RkMjgwMGIsCisweDdlMTJjMDBiLAorMHg3ZDI1MDAwYywKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MxMjE2OSwKKzB4OWE4MDAwMGEsCisweGNkMDEyMTZhLAorMHhjZDQxMjE2YiwKKzB4OTZjMGZlODMsCisweGNkODEyMTZjLAorMHhjODMwMDAxOCwKKzB4OTcwMDAwMDAsCisweGM4MzAwMDE4LAorMHg4MDAwMDAwMSwKKzB4Y2MwMDAwMTgsCisweDg0MDAwMzdmLAorMHhjYzAwMDA3ZiwKKzB4YzgxNDAwMTMsCisweGM4MTgwMDE0LAorMHhjZDQxMjE2YiwKKzB4OTZjMGZlNzcsCisweGNkODEyMTZjLAorMHg4MDAwMDE4MSwKKzB4YzgzMDAwMTgsCisweGM4MGMwMDA4LAorMHg5OGMwMDAwMCwKKzB4YzgwYzAwMDgsCisweDdjNDEwMDAwLAorMHg5NTAwMDAwMiwKKzB4MDAwMDAwMDAsCisweDdjNDE0MDAwLAorMHhjODIwMDAwOSwKKzB4Y2M0MDAwNDMsCisweGNlMDFhMWY0LAorMHhjYzQwMDA0NCwKKzB4YzAwZTgwMDAsCisweDdjNDI0MDAwLAorMHg3YzQyODAwMCwKKzB4MmFhYzAwMWYsCisweDk2YzBmZTY0LAorMHhjMDM1ZjAwMCwKKzB4Y2U0MDAzZTIsCisweDMyNzgwMDAzLAorMHgyNjdjMDAwOCwKKzB4N2ZmN2MwMGIsCisweDdmZmJjMDBjLAorMHgyYTc4MDAxOCwKKzB4Y2ZjMDAzZTMsCisweGNmODAwM2U0LAorMHgyNmIwMDAwMiwKKzB4N2YzZjAwMDAsCisweGNmMDAwM2U1LAorMHg4MDAwMDMxZCwKKzB4N2M4MGMwMDAsCisweDdjNDBjMDAwLAorMHgyOGQwMDAwOCwKKzB4MzExMDAwMGYsCisweDk1MDAwMDBmLAorMHgyNTI4MDAwMSwKKzB4MDZhODAxYjIsCisweDllODAwMDAwLAorMHgwMDAwMDAwMCwKKzB4ODAwMDAxZDMsCisweGMwMTIwODAwLAorMHg4MDAwMDFlMSwKKzB4YzgxNDAwMGYsCisweDgwMDAwMWU4LAorMHhjODE0MDAxMCwKKzB4ODAwMDAxZWYsCisweGNjYzFhMmE0LAorMHg4MDAwMDFmOCwKKzB4YzgxNDAwMTEsCisweDMwZDAwMDNmLAorMHgwZDI4MDAxNSwKKzB4OWE4MDAwMTIsCisweDBkMjgwMDFlLAorMHg5YTgwMDAxZSwKKzB4MGQyODAwMjAsCisweDlhODAwMDIzLAorMHgwZDI0MDAwZiwKKzB4MGQyODAwMTAsCisweDdlNmE4MDBjLAorMHg5YTgwMDAyNiwKKzB4MGQyMDAwMDQsCisweDBkMjQwMDE0LAorMHgwZDI4MDAyOCwKKzB4N2U2MjQwMGMsCisweDdlYTY4MDBjLAorMHg5YTgwMDAyYSwKKzB4YzgxNDAwMTEsCisweDgwMDAwMDAxLAorMHhjY2MxYTJhNCwKKzB4YzAxMjA4MDAsCisweDdjNDE0MDAwLAorMHg3ZDBjYzAwYywKKzB4YzAxMjAwMDgsCisweDI5NTgwMDAzLAorMHgyOTVjMDAwYywKKzB4N2M0MjAwMDAsCisweDdkZDFjMDBiLAorMHgyNjIwMDAxNCwKKzB4N2UxZTQwMGMsCisweDdlNGU4MDBjLAorMHhjZTgxYTJhNCwKKzB4ODAwMDAwMDEsCisweGNkODFhMWZlLAorMHhjODE0MDAwZiwKKzB4MDQxMDIxMGUsCisweDk1NDAwMDAwLAorMHhjODE0MDAwZiwKKzB4ZDA1MTAwMDAsCisweDgwMDAwMDAxLAorMHhjY2MxYTJhNCwKKzB4YzgxNDAwMTAsCisweDA0MTAyMTA4LAorMHg5NTQwMDAwMCwKKzB4YzgxNDAwMTAsCisweGQwNTEwMDAwLAorMHg4MDAwMDAwMSwKKzB4Y2NjMWEyYTQsCisweGNjYzFhMmE0LAorMHgwNDEwMDAwMSwKKzB4Y2QwMDAwMTksCisweDg0MDAwMzdmLAorMHhjYzAwMDA3ZiwKKzB4YzgxMDAwMTksCisweDk5MDAwMDAwLAorMHhjODEwMDAxOSwKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHgwNDEwMjEwMCwKKzB4OTU0MDAwMDAsCisweGM4MTQwMDExLAorMHhkMDUxMDAwMCwKKzB4ODAwMDAzN2MsCisweGNjYzFhMmE0LAorMHg3YzQwYzAwMCwKKzB4Y2M0MDAwMGQsCisweDk0YzBmZTAxLAorMHhjYzQwMDAwZSwKKzB4N2M0MTAwMDAsCisweDk1MDAwMDA1LAorMHgwOGNjMDAwMSwKKzB4YzgxNDAwMDUsCisweDk5NDAwMDE0LAorMHgwMDAwMDAwMCwKKzB4OThjMGZmZmIsCisweDdjNDEwMDAwLAorMHg4MDAwMDAwMiwKKzB4N2QwMDgwMDAsCisweGM4MTQwMDA1LAorMHg3YzQwYzAwMCwKKzB4OTk0MDAwMGMsCisweGM4MTgwMDBjLAorMHg3YzQxMDAwMCwKKzB4OTU4MGZkZjAsCisweGM4MjAwMDBlLAorMHhjODFjMDAwZCwKKzB4NjYyMDAwMjAsCisweDdlMWUwMDJjLAorMHgyNTI0MDAwMiwKKzB4N2U2MjQwMjAsCisweDgwMDAwMDAxLAorMHhjY2U2MDAwMCwKKzB4N2M0MTAwMDAsCisweGNjMDAwMDZjLAorMHhjYzAwMDA2ZCwKKzB4YzgxODAwMWYsCisweGM4MWMwMDFlLAorMHg2NTk4MDAyMCwKKzB4N2RkOWMwMmMsCisweDdjZDRjMDBjLAorMHhjY2RlMDAwMCwKKzB4NDVkYzAwMDQsCisweGM4MjgwMDE3LAorMHg5NjgwMDAwZiwKKzB4YzAwZTAwMDEsCisweDI4NjgwMDA4LAorMHgyYWFjMDAxNiwKKzB4MzJhODAwZmYsCisweDBlYjAwMDQ5LAorMHg3ZjJmMDAwYiwKKzB4OTcwMDAwMDYsCisweDAwMDAwMDAwLAorMHhjODE0MDAwNSwKKzB4N2M0MGMwMDAsCisweDgwMDAwMjIxLAorMHg3YzQxMDAwMCwKKzB4ODAwMDAyMjQsCisweGQwNDAwMDdmLAorMHg4NDAwMDIzOSwKKzB4Y2MwMDAwNDEsCisweGNjYzEzMDRhLAorMHg5NDAwMDAwMCwKKzB4YzgzYzAwMWEsCisweDA0M2MwMDA1LAorMHhjZmMxYTJhNCwKKzB4YzAzNjFmOTAsCisweGMwMzg3ZmZmLAorMHg3YzAzYzAxMCwKKzB4N2Y3YjQwMGMsCisweGNmNDEyMTdjLAorMHhjZmMxMjE3ZCwKKzB4Y2MwMTIxN2UsCisweGMwM2EwMDA0LAorMHgwNDM0MjE3ZiwKKzB4N2Y3YjQwMGMsCisweGNjMzUwMDAwLAorMHhjODNjMDAwNCwKKzB4MmJmYzAwMWYsCisweDA0MzgwMDIwLAorMHg5N2MwMDAwNSwKKzB4Y2MwMDAwNjIsCisweDliODAwMDAwLAorMHgwYmI4MDAwMSwKKzB4ODAwMDAyNDUsCisweGNjMDAwMDcxLAorMHhjYzAxYTFmNCwKKzB4MDQzODAwMTYsCisweGMwMzYwMDAyLAorMHhjZjgxYTJhNCwKKzB4ODgwMDAwMDAsCisweGNmNDEyMDEwLAorMHg3YzQwYzAwMCwKKzB4MjhkMDAwMWMsCisweDk1MDAwMDA1LAorMHgwNGQ0MDAwMSwKKzB4Y2Q0MDAwNjUsCisweDgwMDAwMDAxLAorMHhjZDQwMDA2OCwKKzB4MDk1NDAwMDIsCisweDgwMDAwMDAxLAorMHhjZDQwMDA2NiwKKzB4ODQwMDAyNmEsCisweGM4MTgwM2VhLAorMHg3YzQwYzAwMCwKKzB4OTk4MGZkOWYsCisweGM4MTQwMDE2LAorMHgwOGQwMDAwMSwKKzB4OTk0MDAwMmIsCisweGNkMDAwMDY4LAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHgwNDNjMDAwNSwKKzB4Y2ZjMWEyYTQsCisweGNjMDFhMWY0LAorMHg4NDAwMDM3ZiwKKzB4Y2MwMDAwNDYsCisweDg4MDAwMDAwLAorMHhjYzAwMDA3ZiwKKzB4ODQwMDAyN2MsCisweGM4MTgwM2VhLAorMHg3YzQwYzAwMCwKKzB4OTk4MGZkOGQsCisweGM4MTQwMDE2LAorMHgwOGQwMDAwMSwKKzB4OTk0MDAwMTksCisweGNkMDAwMDY4LAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHgwNDNjMDAyMiwKKzB4Y2ZjMWEyYTQsCisweDg0MDAwMzdmLAorMHhjYzAwMDA0NywKKzB4ODgwMDAwMDAsCisweGNjMDAwMDdmLAorMHhjODEwMDAxNiwKKzB4OTkwMDAwMGQsCisweGNjNDAwMDY3LAorMHg4MDAwMDAwMiwKKzB4N2M0MDgwMDAsCisweGM4MTgwM2VhLAorMHg5OTgwZmQ3OSwKKzB4N2M0MGMwMDAsCisweDk0YzAwMDAzLAorMHhjODEwMDAxNiwKKzB4OTkwMDAwMDQsCisweGNjYzAwMDY4LAorMHg4MDAwMDAwMiwKKzB4N2M0MDgwMDAsCisweDg0MDAwMjM5LAorMHhjMDE0ODAwMCwKKzB4Y2MwMDAwNDEsCisweGNkNDEzMDRhLAorMHhjMDE0ODAwMCwKKzB4OTkwMDAwMDAsCisweGM4MTAwMDE2LAorMHg4MDAwMDAwMiwKKzB4N2M0MDgwMDAsCisweGMwMTIwMDAxLAorMHg3YzUxNDAwYywKKzB4ODAwMDAwMDEsCisweGQwNTUwMDAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4MjkxYzAwMWYsCisweGNjYzAwMDRhLAorMHhjZDAwMDA0YiwKKzB4OTVjMDAwMDMsCisweGMwMWM4MDAwLAorMHhjZGMxMjAxMCwKKzB4ZGQ4MzAwMDAsCisweDA1NWMyMDAwLAorMHhjYzAwMDA2MiwKKzB4ODAwMDAwMDEsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNGMsCisweGNkMDAwMDRkLAorMHhkZDgzMDAwMCwKKzB4MDU1Y2EwMDAsCisweDgwMDAwMDAxLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDRlLAorMHhjZDAwMDA0ZiwKKzB4ZGQ4MzAwMDAsCisweDA1NWNjMDAwLAorMHg4MDAwMDAwMSwKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA1MCwKKzB4Y2QwMDAwNTEsCisweGRkODMwMDAwLAorMHgwNTVjZjhlMCwKKzB4ODAwMDAwMDEsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNTIsCisweGNkMDAwMDUzLAorMHhkZDgzMDAwMCwKKzB4MDU1Y2Y4ODAsCisweDgwMDAwMDAxLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDU0LAorMHhjZDAwMDA1NSwKKzB4ZGQ4MzAwMDAsCisweDA1NWNlMDAwLAorMHg4MDAwMDAwMSwKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA1NiwKKzB4Y2QwMDAwNTcsCisweGRkODMwMDAwLAorMHgwNTVjZjAwMCwKKzB4ODAwMDAwMDEsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNTgsCisweGNkMDAwMDU5LAorMHhkZDgzMDAwMCwKKzB4MDU1Y2YzZmMsCisweDgwMDAwMDAxLAorMHhkODFmNDEwMCwKKzB4ZDA0MzIwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNhMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzYzAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2Y4ZTAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNmODgwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzZTAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2YwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNmM2ZjLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhjODE0MDNlMCwKKzB4Y2M0MzAwMDAsCisweGNjNDMwMDAwLAorMHhjYzQzMDAwMCwKKzB4N2Q0NWMwMDAsCisweGNkYzMwMDAwLAorMHhkMDQzMDAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4N2M0MGMwMDAsCisweGM4MTAwM2UyLAorMHhjODE0MDNlNSwKKzB4YzgxODAzZTMsCisweGM4MWMwM2U0LAorMHhjZDgxMjE2OSwKKzB4Y2RjMTIxNmEsCisweGNjYzEyMTZiLAorMHhjYzAxMjE2YywKKzB4MDQyMDAwMDQsCisweDdkYTE4MDAwLAorMHg3ZDk2NDAwMiwKKzB4OTY0MGZjZDksCisweGNkODAwM2UzLAorMHgzMTI4MDAwMywKKzB4YzAyZGYwMDAsCisweDI1MTgwMDA4LAorMHg3ZGFkODAwYiwKKzB4N2RhOTgwMGMsCisweDgwMDAwMDAxLAorMHhjZDgwMDNlMywKKzB4MzA4Y2ZmZmYsCisweGQwNGQwMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhjODE0MDAyMCwKKzB4MTU1ODAwMDIsCisweDk1ODBmZmZmLAorMHhjODE0MDAyMCwKKzB4Y2MwMDAwNmUsCisweGNjNDEyMTgwLAorMHg3YzQwYzAwMCwKKzB4Y2NjMTIxOGQsCisweGNjNDEyMTgxLAorMHgyOGQwMDAxZiwKKzB4MzQ1ODgwMDAsCisweGNkODEyMThjLAorMHg5NTAwZmNiZiwKKzB4Y2M0MTIxODIsCisweGM4MTQwMDIwLAorMHg5OTQwZmZmZiwKKzB4YzgxNDAwMjAsCisweDgwMDAwMDAyLAorMHg3YzQwODAwMCwKKzB4N2M0MGMwMDAsCisweDI4ZDAwMDE4LAorMHgzMTEwMDAwMSwKKzB4YzAxNjAwODAsCisweDk1MDAwMDAzLAorMHhjMDJhMDAwNCwKKzB4N2NkNGMwMGMsCisweGNjYzEyMTdjLAorMHhjYzQxMjE3ZCwKKzB4Y2M0MTIxN2UsCisweDdjNDE4MDAwLAorMHgxZGIwMDAwMywKKzB4MzZhMDIxN2YsCisweDliMDAwMDAzLAorMHg0MTljMDAwNSwKKzB4MDQxYzAwNDAsCisweDk5YzAwMDAwLAorMHgwOWRjMDAwMSwKKzB4Y2MyMTAwMDAsCisweGM4MjQwMDA0LAorMHgyYTZjMDAxZiwKKzB4NDE5YzAwMDUsCisweDlhYzBmZmZhLAorMHhjYzgwMDA2MiwKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHg3YzQwYzAwMCwKKzB4MDRkNDAzZTYsCisweDgwMDAwMDAxLAorMHhjYzU0MDAwMCwKKzB4ODAwMDAzN2MsCisweGNjNDAwM2VhLAorMHhjMDFjODAwMCwKKzB4MDQ0Y2EwMDAsCisweGNkYzEyMDEwLAorMHg3YzQxMDAwMCwKKzB4YzgxNDAwMDksCisweDA0MTgwMDAwLAorMHgwNDFjMDAwOCwKKzB4Y2Q4MDAwNzEsCisweDA5ZGMwMDAxLAorMHgwNTk4MDAwMSwKKzB4Y2QwZDAwMDAsCisweDk5YzBmZmZjLAorMHhjYzgwMDA2MiwKKzB4ODAwMDAzN2MsCisweGNkNDAwMDcxLAorMHhjMDBlMDEwMCwKKzB4Y2MwMDAwNDEsCisweGNjYzEzMDRhLAorMHhjODNjMDA3ZiwKKzB4Y2MwMDAwN2YsCisweDgwMDAwMDAxLAorMHhjYzAwMDA3ZiwKKzB4Y2MwMDAwN2YsCisweDg4MDAwMDAwLAorMHhjYzAwMDA3ZiwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDEwMzMxLAorMHgwMDEwMDAwNCwKKzB4MDAxNzAwMDYsCisweDAwMjEwMDA4LAorMHgwMDI3MDAyOCwKKzB4MDAyODAwMjMsCisweDAwMjkwMDI5LAorMHgwMDJhMDAyNiwKKzB4MDAyYjAwMjksCisweDAwMmQwMDM4LAorMHgwMDJlMDAzZiwKKzB4MDAyZjAwNGEsCisweDAwMzQwMDRjLAorMHgwMDM2MDAzMCwKKzB4MDAzOTAwYWYsCisweDAwM2EwMGNmLAorMHgwMDNiMDBlNCwKKzB4MDAzYzAwZmMsCisweDAwM2QwMTZiLAorMHgwMDNmMDBhZCwKKzB4MDA0MTAzMzYsCisweDAwNDMwMzQ5LAorMHgwMDQ0MDE4ZSwKKzB4MDA0NTAwZmMsCisweDAwNDYwMWFjLAorMHgwMDQ3MDFhYywKKzB4MDA0ODAxZmUsCisweDAwNDkwMjBjLAorMHgwMDRhMDI1NSwKKzB4MDA0YjAyODIsCisweDAwNTIwMjVmLAorMHgwMDUzMDI3MSwKKzB4MDA1NDAyODcsCisweDAwNTcwMjk5LAorMHgwMDYwMDI5ZCwKKzB4MDA2MTAyYWMsCisweDAwNjIwMmI2LAorMHgwMDYzMDJjMCwKKzB4MDA2NDAyY2EsCisweDAwNjUwMmQ0LAorMHgwMDY2MDJkZSwKKzB4MDA2NzAyZTgsCisweDAwNjgwMmYyLAorMHgwMDY5MDJmNiwKKzB4MDA2YTAyZmEsCisweDAwNmIwMmZlLAorMHgwMDZjMDMwMiwKKzB4MDA2ZDAzMDYsCisweDAwNmUwMzBhLAorMHgwMDZmMDMwZSwKKzB4MDA3MDAzMTIsCisweDAwNzIwMzYzLAorMHgwMDc0MDM2OSwKKzB4MDA3OTAzNjcsCisweDAwN2MwMzFjLAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY3MTBfcGZwX21pY3JvY29kZVtdID0geworMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweDdlODI4MDBiLAorMHg4MDAwMDAwMCwKKzB4ZGMwMzAwMDAsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4YzgxODAwMGUsCisweDMxOTgwMDAxLAorMHg3YzQyNDAwMCwKKzB4OTU4MDAyM2EsCisweDdjNDI4MDAwLAorMHhjODFjMDAxYywKKzB4YzAzN2MwMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2NiNDgwMGIsCisweGMwMzYwMDAzLAorMHg5OWMwMDAwMCwKKzB4YzgxYzAwMWMsCisweDdjYjQ4MDBjLAorMHgyNGQ0MDAwMiwKKzB4N2Q2NTQwMDAsCisweGNkNDAwMDQzLAorMHhjZTgwMDA0MywKKzB4Y2QwMDAwNDMsCisweGNjODAwMDQwLAorMHhjZTQwMDA0MCwKKzB4Y2U4MDAwNDAsCisweGNjYzAwMDQwLAorMHhkYzNhMDAwMCwKKzB4OTc4MGZmZGUsCisweGNkMDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4ODAwMDAwMTgsCisweDdjNDEwMDAwLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjODE4MDAwZSwKKzB4ODAwMDAwMGMsCisweDMxOTgwMDAyLAorMHhkNDAwMDNjMCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjODE4MDAwZSwKKzB4Mjg4YzAwMDgsCisweDMwY2MwMDBmLAorMHgzNDEwMDAwMSwKKzB4N2QwZDAwMDgsCisweDgwMDAwMDBjLAorMHg3ZDkxODAwYiwKKzB4Y2M4MDAwNDAsCisweGQwNDAwMDQwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweDdlODI4MDBiLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGQ0MDAwM2MwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4Y2M0MDAzZjksCisweDgwMDAwMjQ5LAorMHhjYzQwMDNmOCwKKzB4YzAzN2ZmZmYsCisweDdjNDE0MDAwLAorMHhjZjQxYTI5ZSwKKzB4YzgyMDAzZjgsCisweGM4MWMwM2Y5LAorMHg2NjIwMDAyMCwKKzB4YzgxODAzZmIsCisweDdkZTFjMDJjLAorMHg3ZDU4YzAwOCwKKzB4N2NkY2MwMjAsCisweDY5MTAwMDIwLAorMHhjMDM2MDAwMywKKzB4Y2MwMDAwNTQsCisweDdjYjQ4MDBjLAorMHg4MDAwMDA2OSwKKzB4Y2M4MDAwNDAsCisweDdjNDE4MDAwLAorMHhjZDgxYTI5ZSwKKzB4Y2M4MDAwNDAsCisweDgwMDAwMDY3LAorMHhjZDgwMDA0MCwKKzB4YzAxOWZmZmYsCisweGNjODAwMDQwLAorMHhjZDgxYTI5ZSwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4Y2NjMWExZmEsCisweGNkMDFhMWY5LAorMHhjZDQxYTI5ZCwKKzB4Y2NjMDAwNDAsCisweGNkMDAwMDQwLAorMHhjZDQwMDA0MCwKKzB4Y2M0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGNjMDAwMDU0LAorMHhjYzgwMDA0MCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4Y2NjMWExZmEsCisweGNkMDFhMWY5LAorMHhjZDQxYTI5ZCwKKzB4Y2NjMDAwNDAsCisweGNkMDAwMDQwLAorMHhjZDQwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweDdjNDBjMDAwLAorMHgzMGQwMDAwMSwKKzB4Y2NjMWEyOWYsCisweDk1MDAwMDAzLAorMHgwNDE0MDAwMSwKKzB4MDQxNDAwMDIsCisweGNkNDAwM2ZiLAorMHhjYzgwMDA0MCwKKzB4ODAwMDAwMDAsCisweGNjYzAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2M4MDAwNDAsCisweGNjYzFhMmEyLAorMHg4MDAwMDAwMCwKKzB4Y2NjMDAwNDAsCisweDdjNDBjMDAwLAorMHgyOGQ0MDAxZiwKKzB4Y2M4MDAwNDAsCisweDk1NDAwMDAzLAorMHg3YzQxMDAwMCwKKzB4Y2NjMDAwNTcsCisweDI5MTgwMDFmLAorMHhjY2MwMDA0MCwKKzB4OTU4MDAwMDMsCisweGNkMDAwMDQwLAorMHhjZDAwMDA1OCwKKzB4ODAwMDAyNDksCisweGNjMDAwMDdmLAorMHhjODIwMDAxNywKKzB4YzgzMDAwMjIsCisweDlhMDAwMDA2LAorMHgwZTI4MDAwMSwKKzB4YzgyNDAwMWUsCisweDBhNjQwMDAxLAorMHhkNDAwMTI0MCwKKzB4Y2U0MDAwNDAsCisweGMwMzZjMDAwLAorMHg5NjgwMDAwNywKKzB4Mzc3NDc5MDAsCisweDA0MWMwMDAxLAorMHhjZjQwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNmMDAwM2ZhLAorMHg3YzAzMDAwMCwKKzB4Y2EwYzAwMTAsCisweDdjNDEwMDAwLAorMHg5NGMwMDAwNCwKKzB4N2M0MTQwMDAsCisweGQ0MjAwMmM0LAorMHhjZGUwMDA0NCwKKzB4OWIwMDAwMGIsCisweDdjNDE4MDAwLAorMHhjYzAwMDA0YiwKKzB4Y2RhMDAwNDksCisweGNkMjAwMDQxLAorMHhjZDYwMDA0MSwKKzB4Y2RhMDAwNDEsCisweDA2MjAwMDAxLAorMHhjZTAwMDA1NiwKKzB4ODAwMDAyNDksCisweGNjMDAwMDdmLAorMHhjODI4MDAyMCwKKzB4YzgyYzAwMjEsCisweGNjMDAwMDYzLAorMHg3ZWVhNDAwMSwKKzB4NjU3NDAwMjAsCisweDdmNTM0MDJjLAorMHgyNjljMDAwMiwKKzB4N2RmNWMwMjAsCisweDY5ZjgwMDIwLAorMHhjZTgwMDA0YiwKKzB4Y2U2MDAwNDksCisweGNkZTAwMDQxLAorMHhjZmEwMDA0MSwKKzB4Y2U2MDAwNDEsCisweDI3MWMwMDAyLAorMHg3ZGY1YzAyMCwKKzB4NjlmODAwMjAsCisweDdkYjI0MDAxLAorMHhjZjAwMDA0YiwKKzB4Y2U2MDAwNDksCisweGNkZTAwMDQxLAorMHhjZmEwMDA0MSwKKzB4ODAwMDAwYmMsCisweGNlNjAwMDQxLAorMHhjODIwMDAxNywKKzB4YzgzMDAwMjIsCisweDlhMDAwMDA2LAorMHgwZTI4MDAwMSwKKzB4YzgyNDAwMWUsCisweDBhNjQwMDAxLAorMHhkNDAwMTI0MCwKKzB4Y2U0MDAwNDAsCisweGNhMGMwMDEwLAorMHg3YzQxMDAwMCwKKzB4OTRjMDAwMGIsCisweGMwMzZjMDAwLAorMHg5NjgwMDAwNywKKzB4Mzc3NDc5MDAsCisweDA0MWMwMDAxLAorMHhjZjQwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNmMDAwM2ZhLAorMHg3YzAzMDAwMCwKKzB4ODAwMDAwYjUsCisweDdjNDE0MDAwLAorMHhjYzAwMDA0OCwKKzB4ODAwMDAwZWUsCisweDAwMDAwMDAwLAorMHhjODIwMDAxNywKKzB4YzgxYzAwMjMsCisweDBlMjQwMDAyLAorMHg5OWMwMDAxNSwKKzB4N2M0MTgwMDAsCisweDBhMjAwMDAxLAorMHhjZTAwMDA1NiwKKzB4ZDQwMDA0NDAsCisweGNjMDAwMDQwLAorMHhjMDM2YzAwMCwKKzB4Y2ExNDAwMTMsCisweDk2NDAwMDA3LAorMHgzNzc0NzkwMCwKKzB4Y2Y0MDAwNDAsCisweGNjMDAwMDQwLAorMHhjODMwMDNmYSwKKzB4ODAwMDAxMDMsCisweGNmMDAwMDIyLAorMHhjYzAwMDAyMiwKKzB4OTU0MDAxNDYsCisweGNjMDAwMDdmLAorMHhjY2EwMDA0NiwKKzB4ODAwMDAwMDAsCisweGNjMjAwMDQ2LAorMHg4MDAwMDI0OSwKKzB4Y2MwMDAwNjQsCisweGM4MjAwMDE3LAorMHhjODEwMDAxZiwKKzB4OTYwMDAwMDUsCisweDA5MTAwMDAxLAorMHhkNDAwMDQ0MCwKKzB4Y2QwMDAwNDAsCisweGNkMDAwMDIyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweGM4MGMwMDI1LAorMHg5NGMwZmVlYywKKzB4YzgxMDAwMDgsCisweGNkMDAwMDQwLAorMHhkNDAwMGZjMCwKKzB4ODAwMDAwMDAsCisweGQ0MDAwZmEyLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGNjYzAwM2ZkLAorMHhjZDAwMDNmYywKKzB4Y2NjMDAwNDIsCisweGNkMDAwMDQyLAorMHgyOTE0MDAxZiwKKzB4MjkxODAwMTAsCisweDMxOTgwMDA3LAorMHgzYjVjMDAwMSwKKzB4N2Q3NjAwMGIsCisweDk5ODAwMDA1LAorMHg3ZDVlNDAwYiwKKzB4Y2MwMDAwNDIsCisweDgwMDAwMjQ5LAorMHhjYzAwMDA0ZCwKKzB4Mjk5ODAwMDEsCisweDI5MmMwMDA4LAorMHg5OTgwMDAzZCwKKzB4MzJlYzAwMDEsCisweDk2MDAwMDA0LAorMHgyOTMwMDAwYywKKzB4ODAwMDAyNDksCisweGNjMDAwMDQyLAorMHgwNDE0MDAxMCwKKzB4Y2Q0MDAwNDIsCisweDMzMzAwMDAxLAorMHgzNDI4MDAwMSwKKzB4ODQwMDAxNWQsCisweGM4MTQwMDAzLAorMHg5YjQwMDAxYiwKKzB4MDQzODAwMGMsCisweDg0MDAwMTVkLAorMHhjODE0MDAwMywKKzB4OWI0MDAwMTcsCisweDA0MzgwMDA4LAorMHg4NDAwMDE1ZCwKKzB4YzgxNDAwMDMsCisweDliNDAwMDEzLAorMHgwNDM4MDAwNCwKKzB4ODQwMDAxNWQsCisweGM4MTQwMDAzLAorMHg5YjQwMDAxNSwKKzB4YzgwYzAzZmQsCisweDlhODAwMDA5LAorMHhjODEwMDNmYywKKzB4OWIwMDAxMDEsCisweGNjMDAwMDRkLAorMHgwNDE0MDAxMCwKKzB4Y2NjMDAwNDIsCisweGNkMDAwMDQyLAorMHg4MDAwMDEzNSwKKzB4Y2Q0MDAwNDIsCisweDk2YzAwMGZhLAorMHhjYzAwMDA0ZCwKKzB4ODAwMDAyNDksCisweGNjMDAwMDRlLAorMHg5YWMwMDAwMywKKzB4Y2MwMDAwNGQsCisweGNjMDAwMDRlLAorMHhkZjgzMDAwMCwKKzB4ODAwMDAwMDAsCisweGQ4MDMwMWZmLAorMHg5YWMwMDBmMCwKKzB4Y2MwMDAwNGQsCisweDgwMDAwMjQ5LAorMHhjYzAwMDA0ZSwKKzB4YzgxODAwMDMsCisweGM4MWMwMDAzLAorMHhjODIwMDAwMywKKzB4N2Q1ZDQwMDMsCisweDdkYTFjMDAzLAorMHg3ZDVkNDAwYywKKzB4MmExMDAwMWYsCisweDI5OWMwMDFmLAorMHg3ZDFkMDAwYiwKKzB4N2QxNzQwMGIsCisweDg4MDAwMDAwLAorMHg3ZTkyODAwYiwKKzB4OTY0MDAwMDQsCisweGNjMDAwMDRlLAorMHg4MDAwMDI0OSwKKzB4Y2MwMDAwNDIsCisweDA0MzgwMDA4LAorMHhjZjgwMDA0MiwKKzB4YzgwODAwMDMsCisweGM4MGMwMDAzLAorMHhjODEwMDAwMywKKzB4YzgxNDAwMDMsCisweGM4MTgwMDAzLAorMHhjODFjMDAwMywKKzB4YzgyNDAwMDMsCisweGM4MjgwMDAzLAorMHgyOWZjMDAxZiwKKzB4MmFiMDAwMWYsCisweDdmZjNjMDBiLAorMHgyOGYwMDAxZiwKKzB4N2ZmM2MwMGIsCisweDI5NzAwMDFmLAorMHg3ZmYzYzAwYiwKKzB4N2Q4ODgwMDEsCisweDdkY2NjMDAxLAorMHg3ZTUxMDAwMSwKKzB4N2U5NTQwMDEsCisweDdjOTA4MDAyLAorMHg3Y2Q0YzAwMiwKKzB4N2NiYzgwMGIsCisweDlhYzAwMDAzLAorMHg3YzhmNDAwYiwKKzB4MzhiNDAwMDEsCisweDliNDAwMGMxLAorMHhjYzAwMDA0ZCwKKzB4OWJjMDAwYmYsCisweGNjMDAwMDRlLAorMHhjODBjMDNmZCwKKzB4YzgxMDAzZmMsCisweGNjYzAwMDQyLAorMHg4MDAwMDE2ZSwKKzB4Y2QwMDAwNDIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhjYzQwMDA0MCwKKzB4Y2M0MDAwNDAsCisweGNjNDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2NjMDAwNDAsCisweGNjYzAwMDBkLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwNDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4NjUxNDAwMjAsCisweDdkNGQ0MDJjLAorMHgyNDU4MDAwMiwKKzB4N2Q1OTgwMjAsCisweDdjNDFjMDAwLAorMHhjZDgwMDA0MiwKKzB4Njk5ODAwMjAsCisweGNkODAwMDQyLAorMHhjZGMwMDA0MiwKKzB4YzAyM2MwMDAsCisweDA1ZTQwMDAyLAorMHg3Y2EwODAwYiwKKzB4MjY2NDAwMTAsCisweDdjYTQ4MDBjLAorMHhjYzgwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNjYzAwMDQwLAorMHg5NWMwMDAwZSwKKzB4Y2QwMDAwNDAsCisweDA5ZGMwMDAxLAorMHhjODI4MDAwMywKKzB4OTY4MDAwMDgsCisweGNlODAwMDQwLAorMHhjODM0MDAxZCwKKzB4OTc0MDAwMDAsCisweGM4MzQwMDFkLAorMHgyNmE4MDAwOCwKKzB4ODQwMDAyNGMsCisweGNjMmIwMDAwLAorMHg5OWMwZmZmNywKKzB4MDlkYzAwMDEsCisweGRjM2EwMDAwLAorMHg5NzgwMDAwNCwKKzB4N2M0MTgwMDAsCisweDgwMDAwMWEyLAorMHgyNTk4MDAwMiwKKzB4YTAwMDAwMDAsCisweDdkODA4MDAwLAorMHhjODE4MDAxZCwKKzB4N2M0MGMwMDAsCisweDY0ZDAwMDA4LAorMHg5NTgwMDAwMCwKKzB4YzgxODAwMWQsCisweGNjMTMwMDAwLAorMHhjYzgwMDA0MCwKKzB4Y2NjMDAwNDAsCisweDgwMDAwMDAwLAorMHhjYzQwMDA0MCwKKzB4YzgxMDAwMWYsCisweDdjNDBjMDAwLAorMHhjYzgwMDA0MCwKKzB4N2NkMTQwMGMsCisweGNkNDAwMDQwLAorMHgwNTE4MDAwMSwKKzB4ODAwMDAwMDAsCisweGNkODAwMDIyLAorMHg3YzQwYzAwMCwKKzB4NjQ1MDAwMjAsCisweDg0MDAwMjRjLAorMHhjYzAwMDA2MSwKKzB4N2NkMGMwMmMsCisweGM4MjAwMDE3LAorMHhjOGQ2MDAwMCwKKzB4OTk0MDAwMDgsCisweDdjNDM4MDAwLAorMHhkZjgzMDAwMCwKKzB4Y2ZhMDAwNGYsCisweDg0MDAwMjRjLAorMHhjYzAwMDA2MiwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDdmLAorMHg4MDAwMDI0OSwKKzB4Y2MwMDAwNjIsCisweDg0MDAwMjRjLAorMHhjYzAwMDA2MSwKKzB4YzgyMDAwMTcsCisweDdjNDBjMDAwLAorMHhjMDM2ZmYwMCwKKzB4YzgxMDAwMGQsCisweGMwMzAzZmZmLAorMHg3Y2Y1NDAwYiwKKzB4N2Q1MTgwMGIsCisweDdkODE4MDBmLAorMHg5OTgwMDAwOCwKKzB4N2NmMzgwMGIsCisweGRmODMwMDAwLAorMHhjZmEwMDA0ZiwKKzB4ODQwMDAyNGMsCisweGNjMDAwMDYyLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwN2YsCisweDgwMDAwMjQ5LAorMHhjYzAwMDA2MiwKKzB4ODQwMDAyNGMsCisweDdjNDBjMDAwLAorMHgyOGRjMDAwOCwKKzB4OTVjMDAwMTksCisweDMwZGMwMDEwLAorMHg3YzQxMDAwMCwKKzB4OTljMDAwMDQsCisweDY0NTQwMDIwLAorMHg4MDAwMDIwOCwKKzB4YzkxZDAwMDAsCisweDdkMTUwMDJjLAorMHhjOTFlMDAwMCwKKzB4N2M0MjAwMDAsCisweDdjNDI0MDAwLAorMHg3YzQxODAwMCwKKzB4N2RlNWMwMGIsCisweDdkZTI4MDA3LAorMHg5YTgwMDAwZSwKKzB4NDFhYzAwMDUsCisweDlhYzAwMDAwLAorMHgwYWVjMDAwMSwKKzB4MzBkYzAwMTAsCisweDk5YzAwMDA0LAorMHgwMDAwMDAwMCwKKzB4ODAwMDAyMGIsCisweGM5MWQwMDAwLAorMHg4MDAwMDIwYiwKKzB4YzkxZTAwMDAsCisweGNjODAwMDQwLAorMHhjY2MwMDA0MCwKKzB4ZDA0MDAwNDAsCisweGM4MGMwMDI1LAorMHg5NGMwZmRlNCwKKzB4YzgxMDAwMDgsCisweGNkMDAwMDQwLAorMHhkNDAwMGZjMCwKKzB4ODAwMDAwMDAsCisweGQ0MDAwZmEyLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGQ0MDAwM2MwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4N2M0MGMwMDAsCisweDMwZDAwMDA2LAorMHgwZDEwMDAwNiwKKzB4OTkwMDAwMDcsCisweGM4MTQwMDE1LAorMHg5OTQwMDAwNSwKKzB4Y2MwMDAwNTIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhjY2MwMDA0MCwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2M0ZDAwMDAsCisweGRjM2EwMDAwLAorMHg5NzgwZmRiZCwKKzB4MDRjYzAwMDEsCisweDgwMDAwMjQyLAorMHhjYzRkMDAwMCwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDdmLAorMHhjYzAwMDA3ZiwKKzB4ODAwMDAwMDAsCisweGNjMDAwMDdmLAorMHhjYzAwMDA3ZiwKKzB4ODgwMDAwMDAsCisweGNjMDAwMDdmLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAzMDIyMiwKKzB4MDAwNDAyMmEsCisweDAwMDUwMDlmLAorMHgwMDAyMDAwMywKKzB4MDAwNjAwM2MsCisweDAwMDcwMDI3LAorMHgwMDA4MDE5MSwKKzB4MDAwOTAwNDQsCisweDAwMGEwMDJkLAorMHgwMDEwMDI0NywKKzB4MDAxNzAwZjAsCisweDAwMjIwMWQ3LAorMHgwMDIzMDFlOCwKKzB4MDAyNjAwNGMsCisweDAwMjcwMDVmLAorMHgwMDIwMDExYSwKKzB4MDAyODAwOTIsCisweDAwMjkwMDRmLAorMHgwMDJhMDA4MywKKzB4MDAyYjAwNjQsCisweDAwMmYwMDhkLAorMHgwMDMyMDBkOCwKKzB4MDAzNDAyMzIsCisweDAwMzYwMDc0LAorMHgwMDM5MDEwYSwKKzB4MDAzYzAxZmMsCisweDAwM2YwMDlmLAorMHgwMDQxMDAwNSwKKzB4MDA0NDAxOTQsCisweDAwNDgwMTlkLAorMHgwMDQ5MDFjNSwKKzB4MDA0YTAxY2YsCisweDAwNTUwMjI1LAorMHgwMDU2MDIyZCwKKzB4MDA2MDAwMGEsCisweDAwNjEwMDJhLAorMHgwMDYyMDAzMCwKKzB4MDA2MzAwMzAsCisweDAwNjQwMDMwLAorMHgwMDY1MDAzMCwKKzB4MDA2NjAwMzAsCisweDAwNjcwMDMwLAorMHgwMDY4MDAzNywKKzB4MDA2OTAwM2YsCisweDAwNmEwMDQ3LAorMHgwMDZiMDA0NywKKzB4MDA2YzAwNDcsCisweDAwNmQwMDQ3LAorMHgwMDZlMDA0NywKKzB4MDA2ZjAwNDcsCisweDAwNzAwMDQ3LAorMHgwMDczMDI0NywKKzB4MDA3YjAyNDAsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCit9OworCitzdGF0aWMgY29uc3QgdTMyIFJWNzEwX2NwX21pY3JvY29kZVtdID0geworMHhjYzAwMDNlYSwKKzB4MDQwODAwMDMsCisweGNjODAwMDQzLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHg4MDAwMDAwMywKKzB4ZDA0MDAwN2YsCisweDgwMDAwMDAzLAorMHhjYzQwMDA0MSwKKzB4N2M0MGMwMDAsCisweGMwMTYwMDA0LAorMHgzMGQwM2ZmZiwKKzB4N2QxNTAwMGMsCisweGNjMTEwMDAwLAorMHgyOGQ4MDAxZSwKKzB4MzE5ODAwMDEsCisweDI4ZGMwMDFmLAorMHhjODIwMDAwNCwKKzB4OTVjMDAwMDYsCisweDdjNDI0MDAwLAorMHhjYzAwMDA2MiwKKzB4N2U1NjgwMGMsCisweGNjMjkwMDAwLAorMHhjODI0MDAwNCwKKzB4N2UyNjAwMGIsCisweDk1ODAwMDA2LAorMHg3YzQyYzAwMCwKKzB4Y2MwMDAwNjIsCisweDdlZDcwMDBjLAorMHhjYzMxMDAwMCwKKzB4YzgyYzAwMDQsCisweDdlMmUwMDBjLAorMHhjYzAwMDA2MiwKKzB4MzExMDNmZmYsCisweDgwMDAwMDAzLAorMHhjZTExMDAwMCwKKzB4N2M0MGMwMDAsCisweDgwMDAwMDAzLAorMHhjYzQwMDA0MCwKKzB4ODAwMDAwMDMsCisweGNjNDEyMjU3LAorMHg3YzQxODAwMCwKKzB4Y2M0MDAwNDUsCisweGNjNDAwMDQ4LAorMHhjYzQxMjI1YywKKzB4Y2M0MWExZmMsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGNjNDAwMDQ1LAorMHhjYzQwMDA0OCwKKzB4N2M0MGMwMDAsCisweGNjNDEyMjVjLAorMHhjYzQxYTFmYywKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4Y2MwMDAwNDUsCisweGNjMDAwMDQ4LAorMHhjYzQxMjI1YywKKzB4Y2M0MWExZmMsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDA0MGNhMWZkLAorMHhjMDEyMDAwMSwKKzB4Y2MwMDAwNDUsCisweGNjMDAwMDQ4LAorMHg3Y2QwYzAwYywKKzB4Y2M0MTIyNWMsCisweGNjNDFhMWZjLAorMHhkMDRkMDAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ODAwMDAwMDMsCisweGNjNDEyMjVkLAorMHg3YzQwODAwMCwKKzB4N2M0MGMwMDAsCisweGMwMmEwMDAyLAorMHg3YzQxMDAwMCwKKzB4N2QyOTAwMGMsCisweDMwOTQwMDAxLAorMHgzMDk4MDAwNiwKKzB4MzA5YzAzMDAsCisweDI5ZGMwMDA4LAorMHg3YzQyMDAwMCwKKzB4N2M0MjQwMDAsCisweDk1NDAwMDBmLAorMHhjMDJlMDAwNCwKKzB4MDVmMDIyNTgsCisweDdmMmYwMDBjLAorMHhjYzMxMDAwMCwKKzB4YzgyODAwMDQsCisweGNjYzEyMTY5LAorMHhjZDAxMjE2YSwKKzB4Y2U4MTIxNmIsCisweDBkYjQwMDAyLAorMHhjYzAxMjE2YywKKzB4OTc0MDAwMGUsCisweDBkYjQwMDAwLAorMHg4MDAwMDA3ZCwKKzB4YzgzNDAwMGEsCisweDBkYjQwMDAyLAorMHg5NzQwMDAwOSwKKzB4MGRiNDAwMDAsCisweGMwMmUwMDA0LAorMHgwNWYwMjI1OCwKKzB4N2YyZjAwMGMsCisweGNjMzEwMDAwLAorMHhjODI4MDAwNCwKKzB4ODAwMDAwN2QsCisweGM4MzQwMDBhLAorMHg5NzQwMDAwNCwKKzB4N2UwMjgwMDAsCisweDgwMDAwMDdkLAorMHhjODM0MDAwYSwKKzB4MGRiNDAwMDQsCisweDk3NDBmZjhjLAorMHgwMDAwMDAwMCwKKzB4Y2UwMTIxNmQsCisweGNlNDEyMTZlLAorMHhjODI4MDAwMywKKzB4YzgzNDAwMGEsCisweDliNDAwMDA0LAorMHgwNDNjMDAwNSwKKzB4ODQwMDAyNmQsCisweGNjMDAwMDYyLAorMHgwZGY0MDAwMCwKKzB4OTc0MDAwMGIsCisweGM4MmMwM2U2LAorMHhjZTgxYTJiNywKKzB4YzAzMDAwMDYsCisweDdlZjM0MDI4LAorMHhjMDMwMDAyMCwKKzB4N2Y2YjgwMjAsCisweDdmYjNjMDI5LAorMHhjZjgxYTJjNCwKKzB4ODAwMDAwMDMsCisweGNmYzFhMmQxLAorMHgwZGY0MDAwMSwKKzB4OTc0MDAwMGIsCisweGM4MmMwM2U3LAorMHhjZTgxYTJiYiwKKzB4YzAzMDAwMDYsCisweDdlZjM0MDI4LAorMHhjMDMwMDAyMCwKKzB4N2Y2YjgwMjAsCisweDdmYjNjMDI5LAorMHhjZjgxYTJjNSwKKzB4ODAwMDAwMDMsCisweGNmYzFhMmQyLAorMHgwZGY0MDAwMiwKKzB4OTc0MDAwMGIsCisweGM4MmMwM2U4LAorMHhjZTgxYTJiZiwKKzB4YzAzMDAwMDYsCisweDdlZjM0MDI4LAorMHhjMDMwMDAyMCwKKzB4N2Y2YjgwMjAsCisweDdmYjNjMDI5LAorMHhjZjgxYTJjNiwKKzB4ODAwMDAwMDMsCisweGNmYzFhMmQzLAorMHhjODJjMDNlOSwKKzB4Y2U4MWEyYzMsCisweGMwMzAwMDA2LAorMHg3ZWYzNDAyOCwKKzB4YzAzMDAwMjAsCisweDdmNmI4MDIwLAorMHg3ZmIzYzAyOSwKKzB4Y2Y4MWEyYzcsCisweDgwMDAwMDAzLAorMHhjZmMxYTJkNCwKKzB4ODAwMDAwMDMsCisweGNjNDAwMDQyLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDI5MTQwMDFkLAorMHgzMTU0MDAwMSwKKzB4OTk0MDAwMGMsCisweDMxMTgxMDAwLAorMHhjODFjMDAxMSwKKzB4OTVjMDAwMDAsCisweGM4MWMwMDExLAorMHhjY2MxMjEwMCwKKzB4Y2QwMTIxMDEsCisweGNjYzEyMTAyLAorMHhjZDAxMjEwMywKKzB4MDQxODAwMDQsCisweDgwMDAwMzdlLAorMHhjZDgxYTJhNCwKKzB4YzAyYTAwMDQsCisweDk1ODAwMDA4LAorMHgzNmE4MjFhMywKKzB4Y2MyOTAwMDAsCisweGM4MjgwMDA0LAorMHhjODFjMDAxMSwKKzB4MGRlNDAwNDAsCisweDk2NDBmZmZmLAorMHhjODFjMDAxMSwKKzB4Y2NjMTIxNzAsCisweGNkMDEyMTcxLAorMHhjODIwMDAxMiwKKzB4OTYwMDAwMDAsCisweGM4MjAwMDEyLAorMHg4MDAwMDM3ZSwKKzB4Y2MwMDAwNjQsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4Y2MwMDAwNDUsCisweGNjMDAwMDQ4LAorMHg0MGQ0MDAwMywKKzB4Y2Q0MTIyNWMsCisweGNkMDFhMWZjLAorMHhjMDFhMDAwMSwKKzB4MDQxY2ExZmQsCisweDdkZDljMDBjLAorMHg3YzQyMDAwMCwKKzB4MDhjYzAwMDEsCisweDA2MjQwMDAxLAorMHgwNjI4MDAwMiwKKzB4Y2UxZDAwMDAsCisweGNlNWQwMDAwLAorMHg5OGMwZmZmYSwKKzB4Y2U5ZDAwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDdjNDBjMDAwLAorMHgzMGQwMDAwMSwKKzB4MjhjYzAwMDEsCisweDdjNDE0MDAwLAorMHg5NTAwMDAwNiwKKzB4N2M0MTgwMDAsCisweGNkNDEyMTZkLAorMHhjZDgxMjE2ZSwKKzB4ODAwMDAwZjQsCisweGM4MWMwMDAzLAorMHhjMDIyMDAwNCwKKzB4N2UxNjAwMGMsCisweGNjMjEwMDAwLAorMHhjODFjMDAwNCwKKzB4N2M0MjQwMDAsCisweDk4YzAwMDA0LAorMHg3YzQyODAwMCwKKzB4ODAwMDAwMDMsCisweGNkZTUwMDAwLAorMHhjZTQxMjE2OSwKKzB4Y2U4MTIxNmEsCisweGNkYzEyMTZiLAorMHg4MDAwMDAwMywKKzB4Y2MwMTIxNmMsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHg3YzQxYzAwMCwKKzB4MjhhNDAwMDgsCisweDMyNjQwMGZmLAorMHgwZTY4MDAzYywKKzB4OTY4MDAwMGEsCisweDdjMDIwMDAwLAorMHg3YzQyMDAwMCwKKzB4MWUzMDAwMDMsCisweGNjMDAwMDZhLAorMHg5YjAwMDAwMywKKzB4NDIyMDAwMDUsCisweDA0MjAwMDQwLAorMHg4MDAwMDExMSwKKzB4N2MwMjQwMDAsCisweDdlMDI0MDAwLAorMHg5YTQwMDAwMCwKKzB4MGE2NDAwMDEsCisweDMwZWMwMDEwLAorMHg5YWMwMDAwYSwKKzB4Y2MwMDAwNjIsCisweGMwMmEwMDA0LAorMHhjODJjMDAyMSwKKzB4N2U5MjgwMGMsCisweGNjMDAwMDQxLAorMHhjYzI5MDAwMCwKKzB4Y2VjMDAwMjEsCisweDgwMDAwMTIxLAorMHhjODMwMDAwNCwKKzB4Y2QwMTIxNmQsCisweGNkNDEyMTZlLAorMHhjODMwMDAwMywKKzB4N2YxZjAwMGIsCisweDMwZjQwMDA3LAorMHgyNzc4MDAwMSwKKzB4OTc0MDAwMmEsCisweDA3YjgwMTI2LAorMHg5ZjgwMDAwMCwKKzB4MDAwMDAwMDAsCisweDgwMDAwMTM2LAorMHg3ZjFiODAwNCwKKzB4ODAwMDAxM2EsCisweDdmMWI4MDA1LAorMHg4MDAwMDEzZSwKKzB4N2YxYjgwMDIsCisweDgwMDAwMTQyLAorMHg3ZjFiODAwMywKKzB4ODAwMDAxNDYsCisweDdmMWI4MDA3LAorMHg4MDAwMDE0YSwKKzB4N2YxYjgwMDYsCisweDgwMDAwMTRmLAorMHgyOGE0MDAwOCwKKzB4OWI4MDAwMTksCisweDI4YTQwMDA4LAorMHg4MDAwMDE1ZiwKKzB4MzI2NDAwZmYsCisweDliODAwMDE1LAorMHgyOGE0MDAwOCwKKzB4ODAwMDAxNWYsCisweDMyNjQwMGZmLAorMHg5YjgwMDAxMSwKKzB4MjhhNDAwMDgsCisweDgwMDAwMTVmLAorMHgzMjY0MDBmZiwKKzB4OWI4MDAwMGQsCisweDI4YTQwMDA4LAorMHg4MDAwMDE1ZiwKKzB4MzI2NDAwZmYsCisweDliODAwMDA5LAorMHgyOGE0MDAwOCwKKzB4ODAwMDAxNWYsCisweDMyNjQwMGZmLAorMHg5YjgwMDAwNSwKKzB4MjhhNDAwMDgsCisweDgwMDAwMTVmLAorMHgzMjY0MDBmZiwKKzB4MjhhNDAwMDgsCisweDMyNjQwMGZmLAorMHgwZTY4MDAzYywKKzB4OWE4MGZlYjIsCisweDI4ZWMwMDA4LAorMHg3YzQzNDAwMCwKKzB4N2M0MzgwMDAsCisweDdjNDNjMDAwLAorMHg5NmMwMDAwNywKKzB4Y2MwMDAwNjIsCisweGNmNDEyMTY5LAorMHhjZjgxMjE2YSwKKzB4Y2ZjMTIxNmIsCisweDgwMDAwMDAzLAorMHhjYzAxMjE2YywKKzB4ODAwMDAwMDMsCisweGNmZjUwMDAwLAorMHhjYzAwMDA2YiwKKzB4ODQwMDAzODEsCisweDBlNjgwMDNjLAorMHg5YTgwMDAwNCwKKzB4YzgyODAwMTUsCisweDgwMDAwMDAzLAorMHhkMDQwMDA3ZiwKKzB4OTY4MGZmYWIsCisweDdlMDI0MDAwLAorMHg4NDAwMDIzYiwKKzB4YzAwZTAwMDIsCisweGNjMDAwMDQxLAorMHg4MDAwMDIzOSwKKzB4Y2NjMTMwNGEsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4YzAxZTAwMDEsCisweDI5MjQwMDEyLAorMHhjMDIyMDAwMiwKKzB4OTY0MDAwMDUsCisweGMwMjYwMDA0LAorMHhjMDI3ZmZmYiwKKzB4N2QyNTAwMGIsCisweGMwMjYwMDAwLAorMHg3ZGQyODAwYiwKKzB4N2UxMmMwMGIsCisweDdkMjUwMDBjLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzEyMTY5LAorMHg5YTgwMDAwYSwKKzB4Y2QwMTIxNmEsCisweGNkNDEyMTZiLAorMHg5NmMwZmU4MywKKzB4Y2Q4MTIxNmMsCisweGM4MzAwMDE4LAorMHg5NzAwMDAwMCwKKzB4YzgzMDAwMTgsCisweDgwMDAwMDAzLAorMHhjYzAwMDAxOCwKKzB4ODQwMDAzODEsCisweGNjMDAwMDdmLAorMHhjODE0MDAxMywKKzB4YzgxODAwMTQsCisweGNkNDEyMTZiLAorMHg5NmMwZmU3NywKKzB4Y2Q4MTIxNmMsCisweDgwMDAwMTgzLAorMHhjODMwMDAxOCwKKzB4YzgwYzAwMDgsCisweDk4YzAwMDAwLAorMHhjODBjMDAwOCwKKzB4N2M0MTAwMDAsCisweDk1MDAwMDAyLAorMHgwMDAwMDAwMCwKKzB4N2M0MTQwMDAsCisweGM4MjAwMDA5LAorMHhjYzQwMDA0MywKKzB4Y2UwMWExZjQsCisweGNjNDAwMDQ0LAorMHhjMDBlODAwMCwKKzB4N2M0MjQwMDAsCisweDdjNDI4MDAwLAorMHgyYWFjMDAxZiwKKzB4OTZjMGZlNjQsCisweGMwMzVmMDAwLAorMHhjZTQwMDNlMiwKKzB4MzI3ODAwMDMsCisweDI2N2MwMDA4LAorMHg3ZmY3YzAwYiwKKzB4N2ZmYmMwMGMsCisweDJhNzgwMDE4LAorMHhjZmMwMDNlMywKKzB4Y2Y4MDAzZTQsCisweDI2YjAwMDAyLAorMHg3ZjNmMDAwMCwKKzB4Y2YwMDAzZTUsCisweDgwMDAwMzFmLAorMHg3YzgwYzAwMCwKKzB4N2M0MGMwMDAsCisweDI4ZDAwMDA4LAorMHgzMTEwMDAwZiwKKzB4OTUwMDAwMGYsCisweDI1MjgwMDAxLAorMHgwNmE4MDFiNCwKKzB4OWU4MDAwMDAsCisweDAwMDAwMDAwLAorMHg4MDAwMDFkNSwKKzB4YzAxMjA4MDAsCisweDgwMDAwMWUzLAorMHhjODE0MDAwZiwKKzB4ODAwMDAxZWEsCisweGM4MTQwMDEwLAorMHg4MDAwMDFmMSwKKzB4Y2NjMWEyYTQsCisweDgwMDAwMWZhLAorMHhjODE0MDAxMSwKKzB4MzBkMDAwM2YsCisweDBkMjgwMDE1LAorMHg5YTgwMDAxMiwKKzB4MGQyODAwMWUsCisweDlhODAwMDFlLAorMHgwZDI4MDAyMCwKKzB4OWE4MDAwMjMsCisweDBkMjQwMDBmLAorMHgwZDI4MDAxMCwKKzB4N2U2YTgwMGMsCisweDlhODAwMDI2LAorMHgwZDIwMDAwNCwKKzB4MGQyNDAwMTQsCisweDBkMjgwMDI4LAorMHg3ZTYyNDAwYywKKzB4N2VhNjgwMGMsCisweDlhODAwMDJhLAorMHhjODE0MDAxMSwKKzB4ODAwMDAwMDMsCisweGNjYzFhMmE0LAorMHhjMDEyMDgwMCwKKzB4N2M0MTQwMDAsCisweDdkMGNjMDBjLAorMHhjMDEyMDAwOCwKKzB4Mjk1ODAwMDMsCisweDI5NWMwMDBjLAorMHg3YzQyMDAwMCwKKzB4N2RkMWMwMGIsCisweDI2MjAwMDE0LAorMHg3ZTFlNDAwYywKKzB4N2U0ZTgwMGMsCisweGNlODFhMmE0LAorMHg4MDAwMDAwMywKKzB4Y2Q4MWExZmUsCisweGM4MTQwMDBmLAorMHgwNDEwMjEwZSwKKzB4OTU0MDAwMDAsCisweGM4MTQwMDBmLAorMHhkMDUxMDAwMCwKKzB4ODAwMDAwMDMsCisweGNjYzFhMmE0LAorMHhjODE0MDAxMCwKKzB4MDQxMDIxMDgsCisweDk1NDAwMDAwLAorMHhjODE0MDAxMCwKKzB4ZDA1MTAwMDAsCisweDgwMDAwMDAzLAorMHhjY2MxYTJhNCwKKzB4Y2NjMWEyYTQsCisweDA0MTAwMDAxLAorMHhjZDAwMDAxOSwKKzB4ODQwMDAzODEsCisweGNjMDAwMDdmLAorMHhjODEwMDAxOSwKKzB4OTkwMDAwMDAsCisweGM4MTAwMDE5LAorMHg4MDAwMDAwNCwKKzB4N2M0MDgwMDAsCisweDA0MTAyMTAwLAorMHg5NTQwMDAwMCwKKzB4YzgxNDAwMTEsCisweGQwNTEwMDAwLAorMHg4MDAwMDM3ZSwKKzB4Y2NjMWEyYTQsCisweDdjNDBjMDAwLAorMHhjYzQwMDAwZCwKKzB4OTRjMGZlMDEsCisweGNjNDAwMDBlLAorMHg3YzQxMDAwMCwKKzB4OTUwMDAwMDUsCisweDA4Y2MwMDAxLAorMHhjODE0MDAwNSwKKzB4OTk0MDAwMTQsCisweDAwMDAwMDAwLAorMHg5OGMwZmZmYiwKKzB4N2M0MTAwMDAsCisweDgwMDAwMDA0LAorMHg3ZDAwODAwMCwKKzB4YzgxNDAwMDUsCisweDdjNDBjMDAwLAorMHg5OTQwMDAwYywKKzB4YzgxODAwMGMsCisweDdjNDEwMDAwLAorMHg5NTgwZmRmMCwKKzB4YzgyMDAwMGUsCisweGM4MWMwMDBkLAorMHg2NjIwMDAyMCwKKzB4N2UxZTAwMmMsCisweDI1MjQwMDAyLAorMHg3ZTYyNDAyMCwKKzB4ODAwMDAwMDMsCisweGNjZTYwMDAwLAorMHg3YzQxMDAwMCwKKzB4Y2MwMDAwNmMsCisweGNjMDAwMDZkLAorMHhjODE4MDAxZiwKKzB4YzgxYzAwMWUsCisweDY1OTgwMDIwLAorMHg3ZGQ5YzAyYywKKzB4N2NkNGMwMGMsCisweGNjZGUwMDAwLAorMHg0NWRjMDAwNCwKKzB4YzgyODAwMTcsCisweDk2ODAwMDBmLAorMHhjMDBlMDAwMSwKKzB4Mjg2ODAwMDgsCisweDJhYWMwMDE2LAorMHgzMmE4MDBmZiwKKzB4MGViMDAwNDksCisweDdmMmYwMDBiLAorMHg5NzAwMDAwNiwKKzB4MDAwMDAwMDAsCisweGM4MTQwMDA1LAorMHg3YzQwYzAwMCwKKzB4ODAwMDAyMjMsCisweDdjNDEwMDAwLAorMHg4MDAwMDIyNiwKKzB4ZDA0MDAwN2YsCisweDg0MDAwMjNiLAorMHhjYzAwMDA0MSwKKzB4Y2NjMTMwNGEsCisweDk0MDAwMDAwLAorMHhjODNjMDAxYSwKKzB4MDQzYzAwMDUsCisweGNmYzFhMmE0LAorMHhjMDM2MWY5MCwKKzB4YzAzODdmZmYsCisweDdjMDNjMDEwLAorMHg3ZjdiNDAwYywKKzB4Y2Y0MTIxN2MsCisweGNmYzEyMTdkLAorMHhjYzAxMjE3ZSwKKzB4YzAzYTAwMDQsCisweDA0MzQyMTdmLAorMHg3ZjdiNDAwYywKKzB4Y2MzNTAwMDAsCisweGM4M2MwMDA0LAorMHgyYmZjMDAxZiwKKzB4MDQzODAwMjAsCisweDk3YzAwMDA1LAorMHhjYzAwMDA2MiwKKzB4OWI4MDAwMDAsCisweDBiYjgwMDAxLAorMHg4MDAwMDI0NywKKzB4Y2MwMDAwNzEsCisweGNjMDFhMWY0LAorMHgwNDM4MDAxNiwKKzB4YzAzNjAwMDIsCisweGNmODFhMmE0LAorMHg4ODAwMDAwMCwKKzB4Y2Y0MTIwMTAsCisweDdjNDBjMDAwLAorMHgyOGQwMDAxYywKKzB4OTUwMDAwMDUsCisweDA0ZDQwMDAxLAorMHhjZDQwMDA2NSwKKzB4ODAwMDAwMDMsCisweGNkNDAwMDY4LAorMHgwOTU0MDAwMiwKKzB4ODAwMDAwMDMsCisweGNkNDAwMDY2LAorMHg4NDAwMDI2YywKKzB4YzgxODAzZWEsCisweDdjNDBjMDAwLAorMHg5OTgwZmQ5ZiwKKzB4YzgxNDAwMTYsCisweDA4ZDAwMDAxLAorMHg5OTQwMDAyYiwKKzB4Y2QwMDAwNjgsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDA0M2MwMDA1LAorMHhjZmMxYTJhNCwKKzB4Y2MwMWExZjQsCisweDg0MDAwMzgxLAorMHhjYzAwMDA0NiwKKzB4ODgwMDAwMDAsCisweGNjMDAwMDdmLAorMHg4NDAwMDI3ZSwKKzB4YzgxODAzZWEsCisweDdjNDBjMDAwLAorMHg5OTgwZmQ4ZCwKKzB4YzgxNDAwMTYsCisweDA4ZDAwMDAxLAorMHg5OTQwMDAxOSwKKzB4Y2QwMDAwNjgsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDA0M2MwMDIyLAorMHhjZmMxYTJhNCwKKzB4ODQwMDAzODEsCisweGNjMDAwMDQ3LAorMHg4ODAwMDAwMCwKKzB4Y2MwMDAwN2YsCisweGM4MTAwMDE2LAorMHg5OTAwMDAwZCwKKzB4Y2M0MDAwNjcsCisweDgwMDAwMDA0LAorMHg3YzQwODAwMCwKKzB4YzgxODAzZWEsCisweDk5ODBmZDc5LAorMHg3YzQwYzAwMCwKKzB4OTRjMDAwMDMsCisweGM4MTAwMDE2LAorMHg5OTAwMDAwNCwKKzB4Y2NjMDAwNjgsCisweDgwMDAwMDA0LAorMHg3YzQwODAwMCwKKzB4ODQwMDAyM2IsCisweGMwMTQ4MDAwLAorMHhjYzAwMDA0MSwKKzB4Y2Q0MTMwNGEsCisweGMwMTQ4MDAwLAorMHg5OTAwMDAwMCwKKzB4YzgxMDAwMTYsCisweDgwMDAwMDA0LAorMHg3YzQwODAwMCwKKzB4YzAxMjAwMDEsCisweDdjNTE0MDBjLAorMHg4MDAwMDAwMywKKzB4ZDA1NTAwMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHgyOTFjMDAxZiwKKzB4Y2NjMDAwNGEsCisweGNkMDAwMDRiLAorMHg5NWMwMDAwMywKKzB4YzAxYzgwMDAsCisweGNkYzEyMDEwLAorMHhkZDgzMDAwMCwKKzB4MDU1YzIwMDAsCisweGNjMDAwMDYyLAorMHg4MDAwMDAwMywKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA0YywKKzB4Y2QwMDAwNGQsCisweGRkODMwMDAwLAorMHgwNTVjYTAwMCwKKzB4ODAwMDAwMDMsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNGUsCisweGNkMDAwMDRmLAorMHhkZDgzMDAwMCwKKzB4MDU1Y2MwMDAsCisweDgwMDAwMDAzLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDUwLAorMHhjZDAwMDA1MSwKKzB4ZGQ4MzAwMDAsCisweDA1NWNmOGUwLAorMHg4MDAwMDAwMywKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA1MiwKKzB4Y2QwMDAwNTMsCisweGRkODMwMDAwLAorMHgwNTVjZjg4MCwKKzB4ODAwMDAwMDMsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNTQsCisweGNkMDAwMDU1LAorMHhkZDgzMDAwMCwKKzB4MDU1Y2UwMDAsCisweDgwMDAwMDAzLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDU2LAorMHhjZDAwMDA1NywKKzB4ZGQ4MzAwMDAsCisweDA1NWNmMDAwLAorMHg4MDAwMDAwMywKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA1OCwKKzB4Y2QwMDAwNTksCisweGRkODMwMDAwLAorMHgwNTVjZjNmYywKKzB4ODAwMDAwMDMsCisweGQ4MWY0MTAwLAorMHhkMDQzMjAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2EwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNjMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzZjhlMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2Y4ODAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNlMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzZjAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2YzZmMsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGM4MTQwM2UwLAorMHhjYzQzMDAwMCwKKzB4Y2M0MzAwMDAsCisweGNjNDMwMDAwLAorMHg3ZDQ1YzAwMCwKKzB4Y2RjMzAwMDAsCisweGQwNDMwMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHg3YzQwYzAwMCwKKzB4YzgxMDAzZTIsCisweGM4MTQwM2U1LAorMHhjODE4MDNlMywKKzB4YzgxYzAzZTQsCisweGNkODEyMTY5LAorMHhjZGMxMjE2YSwKKzB4Y2NjMTIxNmIsCisweGNjMDEyMTZjLAorMHgwNDIwMDAwNCwKKzB4N2RhMTgwMDAsCisweDdkOTY0MDAyLAorMHg5NjQwZmNkOSwKKzB4Y2Q4MDAzZTMsCisweDMxMjgwMDAzLAorMHhjMDJkZjAwMCwKKzB4MjUxODAwMDgsCisweDdkYWQ4MDBiLAorMHg3ZGE5ODAwYywKKzB4ODAwMDAwMDMsCisweGNkODAwM2UzLAorMHgzMDhjZmZmZiwKKzB4ZDA0ZDAwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGM4MTQwMDIwLAorMHgxNTU4MDAwMiwKKzB4OTU4MGZmZmYsCisweGM4MTQwMDIwLAorMHhjYzAwMDA2ZSwKKzB4Y2M0MTIxODAsCisweDdjNDBjMDAwLAorMHhjY2MxMjE4ZCwKKzB4Y2M0MTIxODEsCisweDI4ZDAwMDFmLAorMHgzNDU4ODAwMCwKKzB4Y2Q4MTIxOGMsCisweDk1MDBmY2JmLAorMHhjYzQxMjE4MiwKKzB4YzgxNDAwMjAsCisweDk5NDBmZmZmLAorMHhjODE0MDAyMCwKKzB4ODAwMDAwMDQsCisweDdjNDA4MDAwLAorMHg3YzQwYzAwMCwKKzB4MjhkMDAwMTgsCisweDMxMTAwMDAxLAorMHhjMDE2MDA4MCwKKzB4OTUwMDAwMDMsCisweGMwMmEwMDA0LAorMHg3Y2Q0YzAwYywKKzB4Y2NjMTIxN2MsCisweGNjNDEyMTdkLAorMHhjYzQxMjE3ZSwKKzB4N2M0MTgwMDAsCisweDFkYjAwMDAzLAorMHgzNmEwMjE3ZiwKKzB4OWIwMDAwMDMsCisweDQxOWMwMDA1LAorMHgwNDFjMDA0MCwKKzB4OTljMDAwMDAsCisweDA5ZGMwMDAxLAorMHhjYzIxMDAwMCwKKzB4YzgyNDAwMDQsCisweDJhNmMwMDFmLAorMHg0MTljMDAwNSwKKzB4OWFjMGZmZmEsCisweGNjODAwMDYyLAorMHg4MDAwMDAwNCwKKzB4N2M0MDgwMDAsCisweDdjNDBjMDAwLAorMHgwNGQ0MDNlNiwKKzB4ODAwMDAwMDMsCisweGNjNTQwMDAwLAorMHg4MDAwMDM3ZSwKKzB4Y2M0MDAzZWEsCisweGMwMWM4MDAwLAorMHgwNDRjYTAwMCwKKzB4Y2RjMTIwMTAsCisweDdjNDEwMDAwLAorMHhjODE0MDAwOSwKKzB4MDQxODAwMDAsCisweDA0MWMwMDA4LAorMHhjZDgwMDA3MSwKKzB4MDlkYzAwMDEsCisweDA1OTgwMDAxLAorMHhjZDBkMDAwMCwKKzB4OTljMGZmZmMsCisweGNjODAwMDYyLAorMHg4MDAwMDM3ZSwKKzB4Y2Q0MDAwNzEsCisweGMwMGUwMTAwLAorMHhjYzAwMDA0MSwKKzB4Y2NjMTMwNGEsCisweGM4M2MwMDdmLAorMHhjYzAwMDA3ZiwKKzB4ODAwMDAwMDMsCisweGNjMDAwMDdmLAorMHhjYzAwMDA3ZiwKKzB4ODgwMDAwMDAsCisweGNjMDAwMDdmLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDEwMzMzLAorMHgwMDEwMDAwNiwKKzB4MDAxNzAwMDgsCisweDAwMjEwMDBhLAorMHgwMDI3MDAyYSwKKzB4MDAyODAwMjUsCisweDAwMjkwMDJiLAorMHgwMDJhMDAyOCwKKzB4MDAyYjAwMmIsCisweDAwMmQwMDNhLAorMHgwMDJlMDA0MSwKKzB4MDAyZjAwNGMsCisweDAwMzQwMDRlLAorMHgwMDM2MDAzMiwKKzB4MDAzOTAwYjEsCisweDAwM2EwMGQxLAorMHgwMDNiMDBlNiwKKzB4MDAzYzAwZmUsCisweDAwM2QwMTZkLAorMHgwMDNmMDBhZiwKKzB4MDA0MTAzMzgsCisweDAwNDMwMzRiLAorMHgwMDQ0MDE5MCwKKzB4MDA0NTAwZmUsCisweDAwNDYwMWFlLAorMHgwMDQ3MDFhZSwKKzB4MDA0ODAyMDAsCisweDAwNDkwMjBlLAorMHgwMDRhMDI1NywKKzB4MDA0YjAyODQsCisweDAwNTIwMjYxLAorMHgwMDUzMDI3MywKKzB4MDA1NDAyODksCisweDAwNTcwMjliLAorMHgwMDYwMDI5ZiwKKzB4MDA2MTAyYWUsCisweDAwNjIwMmI4LAorMHgwMDYzMDJjMiwKKzB4MDA2NDAyY2MsCisweDAwNjUwMmQ2LAorMHgwMDY2MDJlMCwKKzB4MDA2NzAyZWEsCisweDAwNjgwMmY0LAorMHgwMDY5MDJmOCwKKzB4MDA2YTAyZmMsCisweDAwNmIwMzAwLAorMHgwMDZjMDMwNCwKKzB4MDA2ZDAzMDgsCisweDAwNmUwMzBjLAorMHgwMDZmMDMxMCwKKzB4MDA3MDAzMTQsCisweDAwNzIwMzY1LAorMHgwMDc0MDM2YiwKKzB4MDA3OTAzNjksCisweDAwN2MwMzFlLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMKaW5kZXggOTI5NjVkYi4uNzdhN2E0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jCkBAIC00Myw2ICs0Myw3OCBAQAogc3RhdGljIGludCByYWRlb25fZG9fY2xlYW51cF9jcChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBzdGF0aWMgdm9pZCByYWRlb25fZG9fY3Bfc3RhcnQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdik7CiAKK3UzMiByYWRlb25fcmVhZF9yaW5nX3JwdHIoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgb2ZmKQoreworCXUzMiB2YWw7CisKKwlpZiAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQl2YWwgPSBEUk1fUkVBRDMyKGRldl9wcml2LT5yaW5nX3JwdHIsIG9mZik7CisJfSBlbHNlIHsKKwkJdmFsID0gKigoKHZvbGF0aWxlIHUzMiAqKQorCQkJIGRldl9wcml2LT5yaW5nX3JwdHItPmhhbmRsZSkgKworCQkJKG9mZiAvIHNpemVvZih1MzIpKSk7CisJCXZhbCA9IGxlMzJfdG9fY3B1KHZhbCk7CisJfQorCXJldHVybiB2YWw7Cit9CisKK3UzMiByYWRlb25fZ2V0X3JpbmdfaGVhZChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJaWYgKGRldl9wcml2LT53cml0ZWJhY2tfd29ya3MpCisJCXJldHVybiByYWRlb25fcmVhZF9yaW5nX3JwdHIoZGV2X3ByaXYsIDApOworCWVsc2UgeworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQkJcmV0dXJuIFJBREVPTl9SRUFEKFI2MDBfQ1BfUkJfUlBUUik7CisJCWVsc2UKKwkJCXJldHVybiBSQURFT05fUkVBRChSQURFT05fQ1BfUkJfUlBUUik7CisJfQorfQorCit2b2lkIHJhZGVvbl93cml0ZV9yaW5nX3JwdHIoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgb2ZmLCB1MzIgdmFsKQoreworCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKQorCQlEUk1fV1JJVEUzMihkZXZfcHJpdi0+cmluZ19ycHRyLCBvZmYsIHZhbCk7CisJZWxzZQorCQkqKCgodm9sYXRpbGUgdTMyICopIGRldl9wcml2LT5yaW5nX3JwdHItPmhhbmRsZSkgKworCQkgIChvZmYgLyBzaXplb2YodTMyKSkpID0gY3B1X3RvX2xlMzIodmFsKTsKK30KKwordm9pZCByYWRlb25fc2V0X3JpbmdfaGVhZChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiB2YWwpCit7CisJcmFkZW9uX3dyaXRlX3JpbmdfcnB0cihkZXZfcHJpdiwgMCwgdmFsKTsKK30KKwordTMyIHJhZGVvbl9nZXRfc2NyYXRjaChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBpbmRleCkKK3sKKwlpZiAoZGV2X3ByaXYtPndyaXRlYmFja193b3JrcykgeworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQkJcmV0dXJuIHJhZGVvbl9yZWFkX3JpbmdfcnB0cihkZXZfcHJpdiwKKwkJCQkJCSAgICAgUjYwMF9TQ1JBVENIT0ZGKGluZGV4KSk7CisJCWVsc2UKKwkJCXJldHVybiByYWRlb25fcmVhZF9yaW5nX3JwdHIoZGV2X3ByaXYsCisJCQkJCQkgICAgIFJBREVPTl9TQ1JBVENIT0ZGKGluZGV4KSk7CisJfSBlbHNlIHsKKwkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJCXJldHVybiBSQURFT05fUkVBRChSNjAwX1NDUkFUQ0hfUkVHMCArIDQqaW5kZXgpOworCQllbHNlCisJCQlyZXR1cm4gUkFERU9OX1JFQUQoUkFERU9OX1NDUkFUQ0hfUkVHMCArIDQqaW5kZXgpOworCX0KK30KKwordTMyIFJBREVPTl9SRUFEX01NKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGFkZHIpCit7CisJdTMyIHJldDsKKworCWlmIChhZGRyIDwgMHgxMDAwMCkKKwkJcmV0ID0gRFJNX1JFQUQzMihkZXZfcHJpdi0+bW1pbywgYWRkcik7CisJZWxzZSB7CisJCURSTV9XUklURTMyKGRldl9wcml2LT5tbWlvLCBSQURFT05fTU1fSU5ERVgsIGFkZHIpOworCQlyZXQgPSBEUk1fUkVBRDMyKGRldl9wcml2LT5tbWlvLCBSQURFT05fTU1fREFUQSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHUzMiBSNTAwX1JFQURfTUNJTkQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCBpbnQgYWRkcikKIHsKIAl1MzIgcmV0OwpAQCAtNzAsMTEgKzE0MiwyMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB1MzIgUlM2MDBfUkVBRF9NQ0lORChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBhZGRyKQoreworCXUzMiByZXQ7CisJUkFERU9OX1dSSVRFKFJTNjAwX01DX0lOREVYLCAoKGFkZHIgJiBSUzYwMF9NQ19BRERSX01BU0spIHwKKwkJCQkgICAgICBSUzYwMF9NQ19JTkRfQ0lURl9BUkIwKSk7CisJcmV0ID0gUkFERU9OX1JFQUQoUlM2MDBfTUNfREFUQSk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHUzMiBJR1BfUkVBRF9NQ0lORChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBhZGRyKQogewogCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKIAkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQlyZXR1cm4gUlM2OTBfUkVBRF9NQ0lORChkZXZfcHJpdiwgYWRkcik7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzYwMCkKKwkJcmV0dXJuIFJTNjAwX1JFQURfTUNJTkQoZGV2X3ByaXYsIGFkZHIpOwogCWVsc2UKIAkJcmV0dXJuIFJTNDgwX1JFQURfTUNJTkQoZGV2X3ByaXYsIGFkZHIpOwogfQpAQCAtODIsMTEgKzE2NSwxNyBAQAogdTMyIHJhZGVvbl9yZWFkX2ZiX2xvY2F0aW9uKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAotCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNTE1KQorCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JWNzcwKQorCQlyZXR1cm4gUkFERU9OX1JFQUQoUjcwMF9NQ19WTV9GQl9MT0NBVElPTik7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyZXR1cm4gUkFERU9OX1JFQUQoUjYwMF9NQ19WTV9GQl9MT0NBVElPTik7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkKIAkJcmV0dXJuIFI1MDBfUkVBRF9NQ0lORChkZXZfcHJpdiwgUlY1MTVfTUNfRkJfTE9DQVRJT04pOwogCWVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAogCQkgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQlyZXR1cm4gUlM2OTBfUkVBRF9NQ0lORChkZXZfcHJpdiwgUlM2OTBfTUNfRkJfTE9DQVRJT04pOworCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2MDApCisJCXJldHVybiBSUzYwMF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzYwMF9NQ19GQl9MT0NBVElPTik7CiAJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPiBDSElQX1JWNTE1KQogCQlyZXR1cm4gUjUwMF9SRUFEX01DSU5EKGRldl9wcml2LCBSNTIwX01DX0ZCX0xPQ0FUSU9OKTsKIAllbHNlCkBAIC05NSw0MiArMTg0LDY2IEBACiAKIHN0YXRpYyB2b2lkIHJhZGVvbl93cml0ZV9mYl9sb2NhdGlvbihkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBmYl9sb2MpCiB7Ci0JaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY1MTUpCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlY3NzApCisJCVJBREVPTl9XUklURShSNzAwX01DX1ZNX0ZCX0xPQ0FUSU9OLCBmYl9sb2MpOworCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJUkFERU9OX1dSSVRFKFI2MDBfTUNfVk1fRkJfTE9DQVRJT04sIGZiX2xvYyk7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkKIAkJUjUwMF9XUklURV9NQ0lORChSVjUxNV9NQ19GQl9MT0NBVElPTiwgZmJfbG9jKTsKIAllbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKIAkJICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSkKIAkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfRkJfTE9DQVRJT04sIGZiX2xvYyk7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzYwMCkKKwkJUlM2MDBfV1JJVEVfTUNJTkQoUlM2MDBfTUNfRkJfTE9DQVRJT04sIGZiX2xvYyk7CiAJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPiBDSElQX1JWNTE1KQogCQlSNTAwX1dSSVRFX01DSU5EKFI1MjBfTUNfRkJfTE9DQVRJT04sIGZiX2xvYyk7CiAJZWxzZQogCQlSQURFT05fV1JJVEUoUkFERU9OX01DX0ZCX0xPQ0FUSU9OLCBmYl9sb2MpOwogfQogCi1zdGF0aWMgdm9pZCByYWRlb25fd3JpdGVfYWdwX2xvY2F0aW9uKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTMyIGFncF9sb2MpCit2b2lkIHJhZGVvbl93cml0ZV9hZ3BfbG9jYXRpb24oZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgYWdwX2xvYykKIHsKLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkKKwkvKlI2eHgvUjd4eDogQUdQX1RPUCBhbmQgQk9UIGFyZSBhY3R1YWxseSAxOCBiaXRzIGVhY2ggKi8KKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SVjc3MCkgeworCQlSQURFT05fV1JJVEUoUjcwMF9NQ19WTV9BR1BfQk9ULCBhZ3BfbG9jICYgMHhmZmZmKTsgLyogRklYIE1FICovCisJCVJBREVPTl9XUklURShSNzAwX01DX1ZNX0FHUF9UT1AsIChhZ3BfbG9jID4+IDE2KSAmIDB4ZmZmZik7CisJfSBlbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApIHsKKwkJUkFERU9OX1dSSVRFKFI2MDBfTUNfVk1fQUdQX0JPVCwgYWdwX2xvYyAmIDB4ZmZmZik7IC8qIEZJWCBNRSAqLworCQlSQURFT05fV1JJVEUoUjYwMF9NQ19WTV9BR1BfVE9QLCAoYWdwX2xvYyA+PiAxNikgJiAweGZmZmYpOworCX0gZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkKIAkJUjUwMF9XUklURV9NQ0lORChSVjUxNV9NQ19BR1BfTE9DQVRJT04sIGFncF9sb2MpOwogCWVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAogCQkgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQlSUzY5MF9XUklURV9NQ0lORChSUzY5MF9NQ19BR1BfTE9DQVRJT04sIGFncF9sb2MpOworCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2MDApCisJCVJTNjAwX1dSSVRFX01DSU5EKFJTNjAwX01DX0FHUF9MT0NBVElPTiwgYWdwX2xvYyk7CiAJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPiBDSElQX1JWNTE1KQogCQlSNTAwX1dSSVRFX01DSU5EKFI1MjBfTUNfQUdQX0xPQ0FUSU9OLCBhZ3BfbG9jKTsKIAllbHNlCiAJCVJBREVPTl9XUklURShSQURFT05fTUNfQUdQX0xPQ0FUSU9OLCBhZ3BfbG9jKTsKIH0KIAotc3RhdGljIHZvaWQgcmFkZW9uX3dyaXRlX2FncF9iYXNlKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTY0IGFncF9iYXNlKQordm9pZCByYWRlb25fd3JpdGVfYWdwX2Jhc2UoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCB1NjQgYWdwX2Jhc2UpCiB7CiAJdTMyIGFncF9iYXNlX2hpID0gdXBwZXJfMzJfYml0cyhhZ3BfYmFzZSk7CiAJdTMyIGFncF9iYXNlX2xvID0gYWdwX2Jhc2UgJiAweGZmZmZmZmZmOworCXUzMiByNnh4X2FncF9iYXNlID0gKGFncF9iYXNlID4+IDIyKSAmIDB4M2ZmZmY7CiAKLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkgeworCS8qIFI2eHgvUjd4eCBtdXN0IGJlIGFsaWduZWQgdG8gYSA0TUIgYm91bmRyeSAqLworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JWNzcwKQorCQlSQURFT05fV1JJVEUoUjcwMF9NQ19WTV9BR1BfQkFTRSwgcjZ4eF9hZ3BfYmFzZSk7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlSQURFT05fV1JJVEUoUjYwMF9NQ19WTV9BR1BfQkFTRSwgcjZ4eF9hZ3BfYmFzZSk7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkgewogCQlSNTAwX1dSSVRFX01DSU5EKFJWNTE1X01DX0FHUF9CQVNFLCBhZ3BfYmFzZV9sbyk7CiAJCVI1MDBfV1JJVEVfTUNJTkQoUlY1MTVfTUNfQUdQX0JBU0VfMiwgYWdwX2Jhc2VfaGkpOwogCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHx8CiAJCSAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpIHsKIAkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfQUdQX0JBU0UsIGFncF9iYXNlX2xvKTsKIAkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfQUdQX0JBU0VfMiwgYWdwX2Jhc2VfaGkpOworCX0gZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzYwMCkgeworCQlSUzYwMF9XUklURV9NQ0lORChSUzYwMF9BR1BfQkFTRSwgYWdwX2Jhc2VfbG8pOworCQlSUzYwMF9XUklURV9NQ0lORChSUzYwMF9BR1BfQkFTRV8yLCBhZ3BfYmFzZV9oaSk7CiAJfSBlbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+IENISVBfUlY1MTUpIHsKIAkJUjUwMF9XUklURV9NQ0lORChSNTIwX01DX0FHUF9CQVNFLCBhZ3BfYmFzZV9sbyk7CiAJCVI1MDBfV1JJVEVfTUNJTkQoUjUyMF9NQ19BR1BfQkFTRV8yLCBhZ3BfYmFzZV9oaSk7CkBAIC0xNDUsNiArMjU4LDI1IEBACiAJfQogfQogCit2b2lkIHJhZGVvbl9lbmFibGVfYm0oc3RydWN0IGRybV9yYWRlb25fcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJdTMyIHRtcDsKKwkvKiBUdXJuIG9uIGJ1cyBtYXN0ZXJpbmcgKi8KKwlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSkgeworCQkvKiByczYwMC9yczY5MC9yczc0MCAqLworCQl0bXAgPSBSQURFT05fUkVBRChSQURFT05fQlVTX0NOVEwpICYgflJTNjAwX0JVU19NQVNURVJfRElTOworCQlSQURFT05fV1JJVEUoUkFERU9OX0JVU19DTlRMLCB0bXApOworCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spIDw9IENISVBfUlYzNTApIHx8CisJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1I0MjApIHx8CisJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNDAwKSB8fAorCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzQ4MCkpIHsKKwkJLyogcjF4eCwgcjJ4eCwgcjMwMCwgcih2KTM1MCwgcjQyMC9yNDgxLCByczQwMC9yczQ4MCAqLworCQl0bXAgPSBSQURFT05fUkVBRChSQURFT05fQlVTX0NOVEwpICYgflJBREVPTl9CVVNfTUFTVEVSX0RJUzsKKwkJUkFERU9OX1dSSVRFKFJBREVPTl9CVVNfQ05UTCwgdG1wKTsKKwl9IC8qIFBDSUUgY2FyZHMgYXBwZWFycyB0byBub3QgbmVlZCB0aGlzICovCit9CisKIHN0YXRpYyBpbnQgUkFERU9OX1JFQURfUExMKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgYWRkcikKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMzAyLDcgKzQzNCw3IEBACiAKIAlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SVjUxNSkgewogCQlSQURFT05fV1JJVEVfUExMKFI1MDBfRFlOX1NDTEtfUFdNRU1fUElQRSwgKDEgfCAoKGdiX3BpcGVfc2VsID4+IDgpICYgMHhmKSA8PCA0KSk7Ci0JCVJBREVPTl9XUklURShSNTAwX1NVX1JFR19ERVNULCAoKDEgPDwgZGV2X3ByaXYtPm51bV9nYl9waXBlcykgLSAxKSk7CisJCVJBREVPTl9XUklURShSMzAwX1NVX1JFR19ERVNULCAoKDEgPDwgZGV2X3ByaXYtPm51bV9nYl9waXBlcykgLSAxKSk7CiAJfQogCVJBREVPTl9XUklURShSMzAwX0dCX1RJTEVfQ09ORklHLCBnYl90aWxlX2NvbmZpZyk7CiAJcmFkZW9uX2RvX3dhaXRfZm9yX2lkbGUoZGV2X3ByaXYpOwpAQCAtMzgyLDYgKzUxNCwxNCBAQAogCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsCiAJCQkJICAgICBSUzY5MF9jcF9taWNyb2NvZGVbaV1bMF0pOwogCQl9CisJfSBlbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjAwKSB7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJTNjAwIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUgsCisJCQkJICAgICBSUzYwMF9jcF9taWNyb2NvZGVbaV1bMV0pOworCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsCisJCQkJICAgICBSUzYwMF9jcF9taWNyb2NvZGVbaV1bMF0pOworCQl9CiAJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjUyMCkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY1MzApIHx8CkBAIC01NjIsNyArNzAyLDYgQEAKIHsKIAlzdHJ1Y3QgZHJtX3JhZGVvbl9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXY7CiAJdTMyIHJpbmdfc3RhcnQsIGN1cl9yZWFkX3B0cjsKLQl1MzIgdG1wOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIuIFdpdGggbmV3IG1lbW9yeSBtYXAsIHRoZSBmYiBsb2NhdGlvbgogCSAqIGlzIG5vdCBjaGFuZ2VkLCBpdCBzaG91bGQgaGF2ZSBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkIGFscmVhZHkuIFBhcnQKQEAgLTYxMSwxNyArNzUwLDEwIEBACiAJfSBlbHNlCiAjZW5kaWYKIAl7Ci0JCXN0cnVjdCBkcm1fc2dfbWVtICplbnRyeSA9IGRldi0+c2c7Ci0JCXVuc2lnbmVkIGxvbmcgdG1wX29mcywgcGFnZV9vZnM7Ci0KLQkJdG1wX29mcyA9IGRldl9wcml2LT5yaW5nX3JwdHItPm9mZnNldCAtCi0JCQkJKHVuc2lnbmVkIGxvbmcpZGV2LT5zZy0+dmlydHVhbDsKLQkJcGFnZV9vZnMgPSB0bXBfb2ZzID4+IFBBR0VfU0hJRlQ7Ci0KLQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9SQl9SUFRSX0FERFIsIGVudHJ5LT5idXNhZGRyW3BhZ2Vfb2ZzXSk7Ci0JCURSTV9ERUJVRygicmluZyBycHRyOiBvZmZzZXQ9MHglMDhseCBoYW5kbGU9MHglMDhseFxuIiwKLQkJCSAgKHVuc2lnbmVkIGxvbmcpZW50cnktPmJ1c2FkZHJbcGFnZV9vZnNdLAotCQkJICBlbnRyeS0+aGFuZGxlICsgdG1wX29mcyk7CisJCVJBREVPTl9XUklURShSQURFT05fQ1BfUkJfUlBUUl9BRERSLAorCQkJICAgICBkZXZfcHJpdi0+cmluZ19ycHRyLT5vZmZzZXQKKwkJCSAgICAgLSAoKHVuc2lnbmVkIGxvbmcpIGRldi0+c2ctPnZpcnR1YWwpCisJCQkgICAgICsgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQpOwogCX0KIAogCS8qIFNldCByaW5nIGJ1ZmZlciBzaXplICovCkBAIC02NDksMzQgKzc4MSwxNyBAQAogCVJBREVPTl9XUklURShSQURFT05fU0NSQVRDSF9BRERSLCBSQURFT05fUkVBRChSQURFT05fQ1BfUkJfUlBUUl9BRERSKQogCQkgICAgICsgUkFERU9OX1NDUkFUQ0hfUkVHX09GRlNFVCk7CiAKLQlkZXZfcHJpdi0+c2NyYXRjaCA9ICgoX192b2xhdGlsZV9fIHUzMiAqKQotCQkJICAgICBkZXZfcHJpdi0+cmluZ19ycHRyLT5oYW5kbGUgKwotCQkJICAgICAoUkFERU9OX1NDUkFUQ0hfUkVHX09GRlNFVCAvIHNpemVvZih1MzIpKSk7Ci0KIAlSQURFT05fV1JJVEUoUkFERU9OX1NDUkFUQ0hfVU1TSywgMHg3KTsKIAotCS8qIFR1cm4gb24gYnVzIG1hc3RlcmluZyAqLwotCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKLQkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKSB7Ci0JCS8qIHJzNjAwL3JzNjkwL3JzNzQwICovCi0JCXRtcCA9IFJBREVPTl9SRUFEKFJBREVPTl9CVVNfQ05UTCkgJiB+UlM2MDBfQlVTX01BU1RFUl9ESVM7Ci0JCVJBREVPTl9XUklURShSQURFT05fQlVTX0NOVEwsIHRtcCk7Ci0JfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPD0gQ0hJUF9SVjM1MCkgfHwKLQkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjQyMCkgfHwKLQkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM0MDApIHx8Ci0JCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNDgwKSkgewotCQkvKiByMXh4LCByMnh4LCByMzAwLCByKHYpMzUwLCByNDIwL3I0ODEsIHJzNDAwL3JzNDgwICovCi0JCXRtcCA9IFJBREVPTl9SRUFEKFJBREVPTl9CVVNfQ05UTCkgJiB+UkFERU9OX0JVU19NQVNURVJfRElTOwotCQlSQURFT05fV1JJVEUoUkFERU9OX0JVU19DTlRMLCB0bXApOwotCX0gLyogUENJRSBjYXJkcyBhcHBlYXJzIHRvIG5vdCBuZWVkIHRoaXMgKi8KKwlyYWRlb25fZW5hYmxlX2JtKGRldl9wcml2KTsKIAotCWRldl9wcml2LT5zY3JhdGNoWzBdID0gMDsKKwlyYWRlb25fd3JpdGVfcmluZ19ycHRyKGRldl9wcml2LCBSQURFT05fU0NSQVRDSE9GRigwKSwgMCk7CiAJUkFERU9OX1dSSVRFKFJBREVPTl9MQVNUX0ZSQU1FX1JFRywgMCk7CiAKLQlkZXZfcHJpdi0+c2NyYXRjaFsxXSA9IDA7CisJcmFkZW9uX3dyaXRlX3JpbmdfcnB0cihkZXZfcHJpdiwgUkFERU9OX1NDUkFUQ0hPRkYoMSksIDApOwogCVJBREVPTl9XUklURShSQURFT05fTEFTVF9ESVNQQVRDSF9SRUcsIDApOwogCi0JZGV2X3ByaXYtPnNjcmF0Y2hbMl0gPSAwOworCXJhZGVvbl93cml0ZV9yaW5nX3JwdHIoZGV2X3ByaXYsIFJBREVPTl9TQ1JBVENIT0ZGKDIpLCAwKTsKIAlSQURFT05fV1JJVEUoUkFERU9OX0xBU1RfQ0xFQVJfUkVHLCAwKTsKIAogCS8qIHJlc2V0IHNhcmVhIGNvcGllcyBvZiB0aGVzZSAqLwpAQCAtNzA4LDEyICs4MjMsMTUgQEAKIAkvKiBXcml0ZWJhY2sgZG9lc24ndCBzZWVtIHRvIHdvcmsgZXZlcnl3aGVyZSwgdGVzdCBpdCBoZXJlIGFuZCBwb3NzaWJseQogCSAqIGVuYWJsZSBpdCBpZiBpdCBhcHBlYXJzIHRvIHdvcmsKIAkgKi8KLQlEUk1fV1JJVEUzMihkZXZfcHJpdi0+cmluZ19ycHRyLCBSQURFT05fU0NSQVRDSE9GRigxKSwgMCk7CisJcmFkZW9uX3dyaXRlX3JpbmdfcnB0cihkZXZfcHJpdiwgUkFERU9OX1NDUkFUQ0hPRkYoMSksIDApOworCiAJUkFERU9OX1dSSVRFKFJBREVPTl9TQ1JBVENIX1JFRzEsIDB4ZGVhZGJlZWYpOwogCiAJZm9yICh0bXAgPSAwOyB0bXAgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0OyB0bXArKykgewotCQlpZiAoRFJNX1JFQUQzMihkZXZfcHJpdi0+cmluZ19ycHRyLCBSQURFT05fU0NSQVRDSE9GRigxKSkgPT0KLQkJICAgIDB4ZGVhZGJlZWYpCisJCXUzMiB2YWw7CisKKwkJdmFsID0gcmFkZW9uX3JlYWRfcmluZ19ycHRyKGRldl9wcml2LCBSQURFT05fU0NSQVRDSE9GRigxKSk7CisJCWlmICh2YWwgPT0gMHhkZWFkYmVlZikKIAkJCWJyZWFrOwogCQlEUk1fVURFTEFZKDEpOwogCX0KQEAgLTgwOSw2ICs5MjcsODIgQEAKIAl9CiB9CiAKKy8qIEVuYWJsZSBvciBkaXNhYmxlIElHUCBHQVJUIG9uIHRoZSBjaGlwICovCitzdGF0aWMgdm9pZCByczYwMF9zZXRfaWdwZ2FydChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBvbikKK3sKKwl1MzIgdGVtcDsKKwlpbnQgaTsKKworCWlmIChvbikgeworCQlEUk1fREVCVUcoInByb2dyYW1taW5nIGlncCBnYXJ0ICUwOFggJTA4bFggJTA4WFxuIiwKKwkJCSBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCwKKwkJCSAobG9uZylkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyLAorCQkJIGRldl9wcml2LT5nYXJ0X3NpemUpOworCisJCUlHUF9XUklURV9NQ0lORChSUzYwMF9NQ19QVDBfQ05UTCwgKFJTNjAwX0VGRkVDVElWRV9MMl9DQUNIRV9TSVpFKDYpIHwKKwkJCQkJCSAgICBSUzYwMF9FRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg2KSkpOworCisJCWZvciAoaSA9IDA7IGkgPCAxOTsgaSsrKQorCQkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DTElFTlQwX0NOVEwgKyBpLAorCQkJCQkoUlM2MDBfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUgfAorCQkJCQkgUlM2MDBfU1lTVEVNX0FDQ0VTU19NT0RFX0lOX1NZUyB8CisJCQkJCSBSUzYwMF9TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX1BBU1NUSFJPVUdIIHwKKwkJCQkJIFJTNjAwX0VGRkVDVElWRV9MMV9DQUNIRV9TSVpFKDMpIHwKKwkJCQkJIFJTNjAwX0VOQUJMRV9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKKwkJCQkJIFJTNjAwX0VGRkVDVElWRV9MMV9RVUVVRV9TSVpFKDMpKSk7CisKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DT05URVhUMF9DTlRMLCAoUlM2MDBfRU5BQkxFX1BBR0VfVEFCTEUgfAorCQkJCQkJCSAgICAgUlM2MDBfUEFHRV9UQUJMRV9UWVBFX0ZMQVQpKTsKKworCQkvKiBkaXNhYmxlIGFsbCBvdGhlciBjb250ZXh0cyAqLworCQlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKQorCQkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DT05URVhUMF9DTlRMICsgaSwgMCk7CisKKwkJLyogc2V0dXAgdGhlIHBhZ2UgdGFibGUgYXBlcnR1cmUgKi8KKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DT05URVhUMF9GTEFUX0JBU0VfQUREUiwKKwkJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyKTsKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DT05URVhUMF9GTEFUX1NUQVJUX0FERFIsCisJCQkJZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQpOworCQlJR1BfV1JJVEVfTUNJTkQoUlM2MDBfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfRU5EX0FERFIsCisJCQkJKGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ICsgZGV2X3ByaXYtPmdhcnRfc2l6ZSAtIDEpKTsKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DT05URVhUMF9ERUZBVUxUX1JFQURfQUREUiwgMCk7CisKKwkJLyogc2V0dXAgdGhlIHN5c3RlbSBhcGVydHVyZSAqLworCQlJR1BfV1JJVEVfTUNJTkQoUlM2MDBfTUNfUFQwX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwKKwkJCQlkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CisJCUlHUF9XUklURV9NQ0lORChSUzYwMF9NQ19QVDBfU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwKKwkJCQkoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgKyBkZXZfcHJpdi0+Z2FydF9zaXplIC0gMSkpOworCisJCS8qIGVuYWJsZSBwYWdlIHRhYmxlcyAqLworCQl0ZW1wID0gSUdQX1JFQURfTUNJTkQoZGV2X3ByaXYsIFJTNjAwX01DX1BUMF9DTlRMKTsKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DTlRMLCAodGVtcCB8IFJTNjAwX0VOQUJMRV9QVCkpOworCisJCXRlbXAgPSBJR1BfUkVBRF9NQ0lORChkZXZfcHJpdiwgUlM2MDBfTUNfQ05UTDEpOworCQlJR1BfV1JJVEVfTUNJTkQoUlM2MDBfTUNfQ05UTDEsICh0ZW1wIHwgUlM2MDBfRU5BQkxFX1BBR0VfVEFCTEVTKSk7CisKKwkJLyogaW52YWxpZGF0ZSB0aGUgY2FjaGUgKi8KKwkJdGVtcCA9IElHUF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzYwMF9NQ19QVDBfQ05UTCk7CisKKwkJdGVtcCAmPSB+KFJTNjAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgfCBSUzYwMF9JTlZBTElEQVRFX0wyX0NBQ0hFKTsKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DTlRMLCB0ZW1wKTsKKwkJdGVtcCA9IElHUF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzYwMF9NQ19QVDBfQ05UTCk7CisKKwkJdGVtcCB8PSBSUzYwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTIHwgUlM2MDBfSU5WQUxJREFURV9MMl9DQUNIRTsKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DTlRMLCB0ZW1wKTsKKwkJdGVtcCA9IElHUF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzYwMF9NQ19QVDBfQ05UTCk7CisKKwkJdGVtcCAmPSB+KFJTNjAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgfCBSUzYwMF9JTlZBTElEQVRFX0wyX0NBQ0hFKTsKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DTlRMLCB0ZW1wKTsKKwkJdGVtcCA9IElHUF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzYwMF9NQ19QVDBfQ05UTCk7CisKKwl9IGVsc2UgeworCQlJR1BfV1JJVEVfTUNJTkQoUlM2MDBfTUNfUFQwX0NOVEwsIDApOworCQl0ZW1wID0gSUdQX1JFQURfTUNJTkQoZGV2X3ByaXYsIFJTNjAwX01DX0NOVEwxKTsKKwkJdGVtcCAmPSB+UlM2MDBfRU5BQkxFX1BBR0VfVEFCTEVTOworCQlJR1BfV1JJVEVfTUNJTkQoUlM2MDBfTUNfQ05UTDEsIHRlbXApOworCX0KK30KKwogc3RhdGljIHZvaWQgcmFkZW9uX3NldF9wY2llZ2FydChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2LCBpbnQgb24pCiB7CiAJdTMyIHRtcCA9IFJBREVPTl9SRUFEX1BDSUUoZGV2X3ByaXYsIFJBREVPTl9QQ0lFX1RYX0dBUlRfQ05UTCk7CkBAIC04NTAsNiArMTA0NCwxMSBAQAogCQlyZXR1cm47CiAJfQogCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2MDApIHsKKwkJcnM2MDBfc2V0X2lncGdhcnQoZGV2X3ByaXYsIG9uKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgewogCQlyYWRlb25fc2V0X3BjaWVnYXJ0KGRldl9wcml2LCBvbik7CiAJCXJldHVybjsKQEAgLTg4MSw2ICsxMDgwLDQ2IEBACiAJfQogfQogCitzdGF0aWMgaW50IHJhZGVvbl9zZXR1cF9wY2lnYXJ0X3N1cmZhY2UoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQoreworCXN0cnVjdCBkcm1fYXRpX3BjaWdhcnRfaW5mbyAqZ2FydF9pbmZvID0gJmRldl9wcml2LT5nYXJ0X2luZm87CisJc3RydWN0IHJhZGVvbl92aXJ0X3N1cmZhY2UgKnZwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFJBREVPTl9NQVhfU1VSRkFDRVMgKiAyOyBpKyspIHsKKwkJaWYgKCFkZXZfcHJpdi0+dmlydF9zdXJmYWNlc1tpXS5maWxlX3ByaXYgfHwKKwkJICAgIGRldl9wcml2LT52aXJ0X3N1cmZhY2VzW2ldLmZpbGVfcHJpdiA9PSBQQ0lHQVJUX0ZJTEVfUFJJVikKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA+PSAyICogUkFERU9OX01BWF9TVVJGQUNFUykKKwkJcmV0dXJuIC1FTk9NRU07CisJdnAgPSAmZGV2X3ByaXYtPnZpcnRfc3VyZmFjZXNbaV07CisKKwlmb3IgKGkgPSAwOyBpIDwgUkFERU9OX01BWF9TVVJGQUNFUzsgaSsrKSB7CisJCXN0cnVjdCByYWRlb25fc3VyZmFjZSAqc3AgPSAmZGV2X3ByaXYtPnN1cmZhY2VzW2ldOworCQlpZiAoc3AtPnJlZmNvdW50KQorCQkJY29udGludWU7CisKKwkJdnAtPnN1cmZhY2VfaW5kZXggPSBpOworCQl2cC0+bG93ZXIgPSBnYXJ0X2luZm8tPmJ1c19hZGRyOworCQl2cC0+dXBwZXIgPSB2cC0+bG93ZXIgKyBnYXJ0X2luZm8tPnRhYmxlX3NpemU7CisJCXZwLT5mbGFncyA9IDA7CisJCXZwLT5maWxlX3ByaXYgPSBQQ0lHQVJUX0ZJTEVfUFJJVjsKKworCQlzcC0+cmVmY291bnQgPSAxOworCQlzcC0+bG93ZXIgPSB2cC0+bG93ZXI7CisJCXNwLT51cHBlciA9IHZwLT51cHBlcjsKKwkJc3AtPmZsYWdzID0gMDsKKworCQlSQURFT05fV1JJVEUoUkFERU9OX1NVUkZBQ0UwX0lORk8gKyAxNiAqIGksIHNwLT5mbGFncyk7CisJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRTBfTE9XRVJfQk9VTkQgKyAxNiAqIGksIHNwLT5sb3dlcik7CisJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRTBfVVBQRVJfQk9VTkQgKyAxNiAqIGksIHNwLT51cHBlcik7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRU5PTUVNOworfQorCiBzdGF0aWMgaW50IHJhZGVvbl9kb19pbml0X2NwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGRybV9yYWRlb25faW5pdF90ICppbml0LAogCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKQEAgLTEwNjIsMTEgKzEzMDEsMTIgQEAKIAl9IGVsc2UKICNlbmRpZgogCXsKLQkJZGV2X3ByaXYtPmNwX3JpbmctPmhhbmRsZSA9ICh2b2lkICopZGV2X3ByaXYtPmNwX3JpbmctPm9mZnNldDsKKwkJZGV2X3ByaXYtPmNwX3JpbmctPmhhbmRsZSA9CisJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWRldl9wcml2LT5jcF9yaW5nLT5vZmZzZXQ7CiAJCWRldl9wcml2LT5yaW5nX3JwdHItPmhhbmRsZSA9Ci0JCSAgICAodm9pZCAqKWRldl9wcml2LT5yaW5nX3JwdHItPm9mZnNldDsKKwkJCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpZGV2X3ByaXYtPnJpbmdfcnB0ci0+b2Zmc2V0OwogCQlkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgPQotCQkgICAgKHZvaWQgKilkZXYtPmFncF9idWZmZXJfbWFwLT5vZmZzZXQ7CisJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWRldi0+YWdwX2J1ZmZlcl9tYXAtPm9mZnNldDsKIAogCQlEUk1fREVCVUcoImRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUgJXBcbiIsCiAJCQkgIGRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUpOwpAQCAtMTE3MywxMSArMTQxMywxNCBAQAogCX0gZWxzZQogI2VuZGlmCiAJeworCQl1MzIgc2N0cmw7CisJCWludCByZXQ7CisKIAkJZGV2X3ByaXYtPmdhcnRfaW5mby50YWJsZV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAkJLyogaWYgd2UgaGF2ZSBhbiBvZmZzZXQgc2V0IGZyb20gdXNlcnNwYWNlICovCiAJCWlmIChkZXZfcHJpdi0+cGNpZ2FydF9vZmZzZXRfc2V0KSB7CiAJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyID0KLQkJCSAgICBkZXZfcHJpdi0+cGNpZ2FydF9vZmZzZXQgKyBkZXZfcHJpdi0+ZmJfbG9jYXRpb247CisJCQkJKHJlc291cmNlX3NpemVfdClkZXZfcHJpdi0+cGNpZ2FydF9vZmZzZXQgKyBkZXZfcHJpdi0+ZmJfbG9jYXRpb247CiAJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLm1hcHBpbmcub2Zmc2V0ID0KIAkJCSAgICBkZXZfcHJpdi0+cGNpZ2FydF9vZmZzZXQgKyBkZXZfcHJpdi0+ZmJfYXBlcl9vZmZzZXQ7CiAJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLm1hcHBpbmcuc2l6ZSA9CkBAIC0xMjE0LDEyICsxNDU3LDMxIEBACiAJCQl9CiAJCX0KIAotCQlpZiAoIWRybV9hdGlfcGNpZ2FydF9pbml0KGRldiwgJmRldl9wcml2LT5nYXJ0X2luZm8pKSB7CisJCXNjdHJsID0gUkFERU9OX1JFQUQoUkFERU9OX1NVUkZBQ0VfQ05UTCk7CisJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRV9DTlRMLCAwKTsKKwkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2MDApCisJCQlyZXQgPSByNjAwX3BhZ2VfdGFibGVfaW5pdChkZXYpOworCQllbHNlCisJCQlyZXQgPSBkcm1fYXRpX3BjaWdhcnRfaW5pdChkZXYsICZkZXZfcHJpdi0+Z2FydF9pbmZvKTsKKwkJUkFERU9OX1dSSVRFKFJBREVPTl9TVVJGQUNFX0NOVEwsIHNjdHJsKTsKKworCQlpZiAoIXJldCkgewogCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdCBQQ0kgR0FSVCFcbiIpOwogCQkJcmFkZW9uX2RvX2NsZWFudXBfY3AoZGV2KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKKwkJcmV0ID0gcmFkZW9uX3NldHVwX3BjaWdhcnRfc3VyZmFjZShkZXZfcHJpdik7CisJCWlmIChyZXQpIHsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldHVwIEdBUlQgc3VyZmFjZSFcbiIpOworCQkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2MDApCisJCQkJcjYwMF9wYWdlX3RhYmxlX2NsZWFudXAoZGV2LCAmZGV2X3ByaXYtPmdhcnRfaW5mbyk7CisJCQllbHNlCisJCQkJZHJtX2F0aV9wY2lnYXJ0X2NsZWFudXAoZGV2LCAmZGV2X3ByaXYtPmdhcnRfaW5mbyk7CisJCQlyYWRlb25fZG9fY2xlYW51cF9jcChkZXYpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCiAJCS8qIFR1cm4gb24gUENJIEdBUlQgKi8KIAkJcmFkZW9uX3NldF9wY2lnYXJ0KGRldl9wcml2LCAxKTsKIAl9CkBAIC0xMjY4LDE0ICsxNTMwLDE4IEBACiAJCWlmIChkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyKSB7CiAJCQkvKiBUdXJuIG9mZiBQQ0kgR0FSVCAqLwogCQkJcmFkZW9uX3NldF9wY2lnYXJ0KGRldl9wcml2LCAwKTsKLQkJCWlmICghZHJtX2F0aV9wY2lnYXJ0X2NsZWFudXAoZGV2LCAmZGV2X3ByaXYtPmdhcnRfaW5mbykpCi0JCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gY2xlYW51cCBQQ0kgR0FSVCFcbiIpOworCQkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2MDApCisJCQkJcjYwMF9wYWdlX3RhYmxlX2NsZWFudXAoZGV2LCAmZGV2X3ByaXYtPmdhcnRfaW5mbyk7CisJCQllbHNlIHsKKwkJCQlpZiAoIWRybV9hdGlfcGNpZ2FydF9jbGVhbnVwKGRldiwgJmRldl9wcml2LT5nYXJ0X2luZm8pKQorCQkJCQlEUk1fRVJST1IoImZhaWxlZCB0byBjbGVhbnVwIFBDSSBHQVJUIVxuIik7CisJCQl9CiAJCX0KIAogCQlpZiAoZGV2X3ByaXYtPmdhcnRfaW5mby5nYXJ0X3RhYmxlX2xvY2F0aW9uID09IERSTV9BVElfR0FSVF9GQikKIAkJewogCQkJZHJtX2NvcmVfaW9yZW1hcGZyZWUoJmRldl9wcml2LT5nYXJ0X2luZm8ubWFwcGluZywgZGV2KTsKLQkJCWRldl9wcml2LT5nYXJ0X2luZm8uYWRkciA9IDA7CisJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmFkZHIgPSBOVUxMOwogCQl9CiAJfQogCS8qIG9ubHkgY2xlYXIgdG8gdGhlIHN0YXJ0IG9mIGZsYWdzICovCkBAIC0xMzI2LDYgKzE1OTIsNyBAQAogCiBpbnQgcmFkZW9uX2NwX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fcmFkZW9uX2luaXRfdCAqaW5pdCA9IGRhdGE7CiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwpAQCAtMTMzOCw4ICsxNjA1LDEzIEBACiAJY2FzZSBSQURFT05fSU5JVF9SMjAwX0NQOgogCWNhc2UgUkFERU9OX0lOSVRfUjMwMF9DUDoKIAkJcmV0dXJuIHJhZGVvbl9kb19pbml0X2NwKGRldiwgaW5pdCwgZmlsZV9wcml2KTsKKwljYXNlIFJBREVPTl9JTklUX1I2MDBfQ1A6CisJCXJldHVybiByNjAwX2RvX2luaXRfY3AoZGV2LCBpbml0LCBmaWxlX3ByaXYpOwogCWNhc2UgUkFERU9OX0NMRUFOVVBfQ1A6Ci0JCXJldHVybiByYWRlb25fZG9fY2xlYW51cF9jcChkZXYpOworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQkJcmV0dXJuIHI2MDBfZG9fY2xlYW51cF9jcChkZXYpOworCQllbHNlCisJCQlyZXR1cm4gcmFkZW9uX2RvX2NsZWFudXBfY3AoZGV2KTsKIAl9CiAKIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzNjIsNyArMTYzNCwxMCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyYWRlb25fZG9fY3Bfc3RhcnQoZGV2X3ByaXYpOworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApCisJCXI2MDBfZG9fY3Bfc3RhcnQoZGV2X3ByaXYpOworCWVsc2UKKwkJcmFkZW9uX2RvX2NwX3N0YXJ0KGRldl9wcml2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM5Myw3ICsxNjY4LDEwIEBACiAJICogY29kZSBzbyB0aGF0IHRoZSBEUk0gaW9jdGwgd3JhcHBlciBjYW4gdHJ5IGFnYWluLgogCSAqLwogCWlmIChzdG9wLT5pZGxlKSB7Ci0JCXJldCA9IHJhZGVvbl9kb19jcF9pZGxlKGRldl9wcml2KTsKKwkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJCXJldCA9IHI2MDBfZG9fY3BfaWRsZShkZXZfcHJpdik7CisJCWVsc2UKKwkJCXJldCA9IHJhZGVvbl9kb19jcF9pZGxlKGRldl9wcml2KTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtMTQwMiwxMCArMTY4MCwxNiBAQAogCSAqIHdlIHdpbGwgZ2V0IHNvbWUgZHJvcHBlZCB0cmlhbmdsZXMgYXMgdGhleSB3b24ndCBiZSBmdWxseQogCSAqIHJlbmRlcmVkIGJlZm9yZSB0aGUgQ1AgaXMgc2h1dCBkb3duLgogCSAqLwotCXJhZGVvbl9kb19jcF9zdG9wKGRldl9wcml2KTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyNjAwX2RvX2NwX3N0b3AoZGV2X3ByaXYpOworCWVsc2UKKwkJcmFkZW9uX2RvX2NwX3N0b3AoZGV2X3ByaXYpOwogCiAJLyogUmVzZXQgdGhlIGVuZ2luZSAqLwotCXJhZGVvbl9kb19lbmdpbmVfcmVzZXQoZGV2KTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyNjAwX2RvX2VuZ2luZV9yZXNldChkZXYpOworCWVsc2UKKwkJcmFkZW9uX2RvX2VuZ2luZV9yZXNldChkZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDE4LDI5ICsxNzAyLDQ3IEBACiAJaWYgKGRldl9wcml2KSB7CiAJCWlmIChkZXZfcHJpdi0+Y3BfcnVubmluZykgewogCQkJLyogU3RvcCB0aGUgY3AgKi8KLQkJCXdoaWxlICgocmV0ID0gcmFkZW9uX2RvX2NwX2lkbGUoZGV2X3ByaXYpKSAhPSAwKSB7Ci0JCQkJRFJNX0RFQlVHKCJyYWRlb25fZG9fY3BfaWRsZSAlZFxuIiwgcmV0KTsKKwkJCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApIHsKKwkJCQl3aGlsZSAoKHJldCA9IHI2MDBfZG9fY3BfaWRsZShkZXZfcHJpdikpICE9IDApIHsKKwkJCQkJRFJNX0RFQlVHKCJyYWRlb25fZG9fY3BfaWRsZSAlZFxuIiwgcmV0KTsKICNpZmRlZiBfX2xpbnV4X18KLQkJCQlzY2hlZHVsZSgpOworCQkJCQlzY2hlZHVsZSgpOwogI2Vsc2UKLQkJCQl0c2xlZXAoJnJldCwgUFpFUk8sICJyZG5yZWwiLCAxKTsKKwkJCQkJdHNsZWVwKCZyZXQsIFBaRVJPLCAicmRucmVsIiwgMSk7CiAjZW5kaWYKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXdoaWxlICgocmV0ID0gcmFkZW9uX2RvX2NwX2lkbGUoZGV2X3ByaXYpKSAhPSAwKSB7CisJCQkJCURSTV9ERUJVRygicmFkZW9uX2RvX2NwX2lkbGUgJWRcbiIsIHJldCk7CisjaWZkZWYgX19saW51eF9fCisJCQkJCXNjaGVkdWxlKCk7CisjZWxzZQorCQkJCQl0c2xlZXAoJnJldCwgUFpFUk8sICJyZG5yZWwiLCAxKTsKKyNlbmRpZgorCQkJCX0KIAkJCX0KLQkJCXJhZGVvbl9kb19jcF9zdG9wKGRldl9wcml2KTsKLQkJCXJhZGVvbl9kb19lbmdpbmVfcmVzZXQoZGV2KTsKKwkJCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApIHsKKwkJCQlyNjAwX2RvX2NwX3N0b3AoZGV2X3ByaXYpOworCQkJCXI2MDBfZG9fZW5naW5lX3Jlc2V0KGRldik7CisJCQl9IGVsc2UgeworCQkJCXJhZGVvbl9kb19jcF9zdG9wKGRldl9wcml2KTsKKwkJCQlyYWRlb25fZG9fZW5naW5lX3Jlc2V0KGRldik7CisJCQl9CiAJCX0KIAotCQkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KLQkJaWYgKGRldl9wcml2LT5tbWlvKQkvKiByZW1vdmUgdGhpcyBhZnRlciBwZXJtYW5lbnQgYWRkbWFwcyAqLwotCQkJUkFERU9OX1dSSVRFKFJBREVPTl9HRU5fSU5UX0NOVEwsIDApOworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPCBDSElQX1I2MDApIHsKKwkJCS8qIERpc2FibGUgKmFsbCogaW50ZXJydXB0cyAqLworCQkJaWYgKGRldl9wcml2LT5tbWlvKQkvKiByZW1vdmUgdGhpcyBhZnRlciBwZXJtYW5lbnQgYWRkbWFwcyAqLworCQkJCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCAwKTsKIAotCQlpZiAoZGV2X3ByaXYtPm1taW8pIHsJLyogcmVtb3ZlIGFsbCBzdXJmYWNlcyAqLwotCQkJZm9yIChpID0gMDsgaSA8IFJBREVPTl9NQVhfU1VSRkFDRVM7IGkrKykgewotCQkJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRTBfSU5GTyArIDE2ICogaSwgMCk7Ci0JCQkJUkFERU9OX1dSSVRFKFJBREVPTl9TVVJGQUNFMF9MT1dFUl9CT1VORCArCi0JCQkJCSAgICAgMTYgKiBpLCAwKTsKLQkJCQlSQURFT05fV1JJVEUoUkFERU9OX1NVUkZBQ0UwX1VQUEVSX0JPVU5EICsKLQkJCQkJICAgICAxNiAqIGksIDApOworCQkJaWYgKGRldl9wcml2LT5tbWlvKSB7CS8qIHJlbW92ZSBhbGwgc3VyZmFjZXMgKi8KKwkJCQlmb3IgKGkgPSAwOyBpIDwgUkFERU9OX01BWF9TVVJGQUNFUzsgaSsrKSB7CisJCQkJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRTBfSU5GTyArIDE2ICogaSwgMCk7CisJCQkJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRTBfTE9XRVJfQk9VTkQgKworCQkJCQkJICAgICAxNiAqIGksIDApOworCQkJCQlSQURFT05fV1JJVEUoUkFERU9OX1NVUkZBQ0UwX1VQUEVSX0JPVU5EICsKKwkJCQkJCSAgICAgMTYgKiBpLCAwKTsKKwkJCQl9CiAJCQl9CiAJCX0KIApAQCAtMTQ0OSw3ICsxNzUxLDEwIEBACiAJCXJhZGVvbl9tZW1fdGFrZWRvd24oJihkZXZfcHJpdi0+ZmJfaGVhcCkpOwogCiAJCS8qIGRlYWxsb2NhdGUga2VybmVsIHJlc291cmNlcyAqLwotCQlyYWRlb25fZG9fY2xlYW51cF9jcChkZXYpOworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQkJcjYwMF9kb19jbGVhbnVwX2NwKGRldik7CisJCWVsc2UKKwkJCXJhZGVvbl9kb19jbGVhbnVwX2NwKGRldik7CiAJfQogfQogCkBAIC0xNDY3LDcgKzE3NzIsMTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmFkZW9uX2RvX2NwX3Jlc2V0KGRldl9wcml2KTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyNjAwX2RvX2NwX3Jlc2V0KGRldl9wcml2KTsKKwllbHNlCisJCXJhZGVvbl9kb19jcF9yZXNldChkZXZfcHJpdik7CiAKIAkvKiBUaGUgQ1AgaXMgbm8gbG9uZ2VyIHJ1bm5pbmcgYWZ0ZXIgYW4gZW5naW5lIHJlc2V0ICovCiAJZGV2X3ByaXYtPmNwX3J1bm5pbmcgPSAwOwpAQCAtMTQ4MiwyMyArMTc5MCwzNiBAQAogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKIAotCXJldHVybiByYWRlb25fZG9fY3BfaWRsZShkZXZfcHJpdik7CisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJcmV0dXJuIHI2MDBfZG9fY3BfaWRsZShkZXZfcHJpdik7CisJZWxzZQorCQlyZXR1cm4gcmFkZW9uX2RvX2NwX2lkbGUoZGV2X3ByaXYpOwogfQogCiAvKiBBZGRlZCBieSBDaGFybCBQLiBCb3RoYSB0byBjYWxsIHJhZGVvbl9kb19yZXN1bWVfY3AoKS4KICAqLwogaW50IHJhZGVvbl9jcF9yZXN1bWUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7Ci0JcmV0dXJuIHJhZGVvbl9kb19yZXN1bWVfY3AoZGV2LCBmaWxlX3ByaXYpOworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJRFJNX0RFQlVHKCJcbiIpOworCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJcmV0dXJuIHI2MDBfZG9fcmVzdW1lX2NwKGRldiwgZmlsZV9wcml2KTsKKwllbHNlCisJCXJldHVybiByYWRlb25fZG9fcmVzdW1lX2NwKGRldiwgZmlsZV9wcml2KTsKIH0KIAogaW50IHJhZGVvbl9lbmdpbmVfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlEUk1fREVCVUcoIlxuIik7CiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCi0JcmV0dXJuIHJhZGVvbl9kb19lbmdpbmVfcmVzZXQoZGV2KTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyZXR1cm4gcjYwMF9kb19lbmdpbmVfcmVzZXQoZGV2KTsKKwllbHNlCisJCXJldHVybiByYWRlb25fZG9fZW5naW5lX3Jlc2V0KGRldik7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE1NDgsNyArMTg2OSw3IEBACiAJc3RhcnQgPSBkZXZfcHJpdi0+bGFzdF9idWY7CiAKIAlmb3IgKHQgPSAwOyB0IDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dDsgdCsrKSB7Ci0JCXUzMiBkb25lX2FnZSA9IEdFVF9TQ1JBVENIKDEpOworCQl1MzIgZG9uZV9hZ2UgPSBHRVRfU0NSQVRDSChkZXZfcHJpdiwgMSk7CiAJCURSTV9ERUJVRygiZG9uZV9hZ2UgPSAlZFxuIiwgZG9uZV9hZ2UpOwogCQlmb3IgKGkgPSBzdGFydDsgaSA8IGRtYS0+YnVmX2NvdW50OyBpKyspIHsKIAkJCWJ1ZiA9IGRtYS0+YnVmbGlzdFtpXTsKQEAgLTE1ODIsOCArMTkwMyw5IEBACiAJc3RydWN0IGRybV9idWYgKmJ1ZjsKIAlpbnQgaSwgdDsKIAlpbnQgc3RhcnQ7Ci0JdTMyIGRvbmVfYWdlID0gRFJNX1JFQUQzMihkZXZfcHJpdi0+cmluZ19ycHRyLCBSQURFT05fU0NSQVRDSE9GRigxKSk7CisJdTMyIGRvbmVfYWdlOwogCisJZG9uZV9hZ2UgPSByYWRlb25fcmVhZF9yaW5nX3JwdHIoZGV2X3ByaXYsIFJBREVPTl9TQ1JBVENIT0ZGKDEpKTsKIAlpZiAoKytkZXZfcHJpdi0+bGFzdF9idWYgPj0gZG1hLT5idWZfY291bnQpCiAJCWRldl9wcml2LT5sYXN0X2J1ZiA9IDA7CiAKQEAgLTE4NTQsMyArMjE3Niw0MSBAQAogCWRldi0+ZGV2X3ByaXZhdGUgPSBOVUxMOwogCXJldHVybiAwOwogfQorCit2b2lkIHJhZGVvbl9jb21taXRfcmluZyhkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJaW50IGk7CisJdTMyICpyaW5nOworCWludCB0YWlsX2FsaWduZWQ7CisKKwkvKiBjaGVjayBpZiB0aGUgcmluZyBpcyBwYWRkZWQgb3V0IHRvIDE2LWR3b3JkIGFsaWdubWVudCAqLworCisJdGFpbF9hbGlnbmVkID0gZGV2X3ByaXYtPnJpbmcudGFpbCAmIDB4ZjsKKwlpZiAodGFpbF9hbGlnbmVkKSB7CisJCWludCBudW1fcDIgPSAxNiAtIHRhaWxfYWxpZ25lZDsKKworCQlyaW5nID0gZGV2X3ByaXYtPnJpbmcuc3RhcnQ7CisJCS8qIHBhZCB3aXRoIHNvbWUgQ1BfUEFDS0VUMiAqLworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3AyOyBpKyspCisJCQlyaW5nW2Rldl9wcml2LT5yaW5nLnRhaWwgKyBpXSA9IENQX1BBQ0tFVDIoKTsKKworCQlkZXZfcHJpdi0+cmluZy50YWlsICs9IGk7CisKKwkJZGV2X3ByaXYtPnJpbmcuc3BhY2UgLT0gbnVtX3AyICogc2l6ZW9mKHUzMik7CisJfQorCisJZGV2X3ByaXYtPnJpbmcudGFpbCAmPSBkZXZfcHJpdi0+cmluZy50YWlsX21hc2s7CisKKwlEUk1fTUVNT1JZQkFSUklFUigpOworCUdFVF9SSU5HX0hFQUQoIGRldl9wcml2ICk7CisKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKSB7CisJCVJBREVPTl9XUklURShSNjAwX0NQX1JCX1dQVFIsIGRldl9wcml2LT5yaW5nLnRhaWwpOworCQkvKiByZWFkIGZyb20gUENJIGJ1cyB0byBlbnN1cmUgY29ycmVjdCBwb3N0aW5nICovCisJCVJBREVPTl9SRUFEKFI2MDBfQ1BfUkJfUlBUUik7CisJfSBlbHNlIHsKKwkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9SQl9XUFRSLCBkZXZfcHJpdi0+cmluZy50YWlsKTsKKwkJLyogcmVhZCBmcm9tIFBDSSBidXMgdG8gZW5zdXJlIGNvcnJlY3QgcG9zdGluZyAqLworCQlSQURFT05fUkVBRChSQURFT05fQ1BfUkJfUlBUUik7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwppbmRleCBmZWYyMDc4Li4xM2E2MGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwpAQCAtNDEsMjMgKzQxLDE1IEBACiBNT0RVTEVfUEFSTV9ERVNDKG5vX3diLCAiRGlzYWJsZSBBR1Agd3JpdGViYWNrIGZvciBzY3JhdGNoIHJlZ2lzdGVycyIpOwogbW9kdWxlX3BhcmFtX25hbWVkKG5vX3diLCByYWRlb25fbm9fd2IsIGludCwgMDQ0NCk7CiAKLXN0YXRpYyBpbnQgZHJpX2xpYnJhcnlfbmFtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjaGFyICpidWYpCi17Ci0JZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgZmFtaWx5ID0gZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLOwotCi0JcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsCi0JCSAgICAgICAgKGZhbWlseSA8IENISVBfUjIwMCkgPyAicmFkZW9uIiA6Ci0JCSAgICAgICAgKChmYW1pbHkgPCBDSElQX1IzMDApID8gInIyMDAiIDoKLQkJICAgICAgICAicjMwMCIpKTsKLX0KLQogc3RhdGljIGludCByYWRlb25fc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAorCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApCisJCXJldHVybiAwOworCiAJLyogRGlzYWJsZSAqYWxsKiBpbnRlcnJ1cHRzICovCi0JaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2MDApCiAJCVJBREVPTl9XUklURShSNTAwX0R4TU9ERV9JTlRfTUFTSywgMCk7CiAJUkFERU9OX1dSSVRFKFJBREVPTl9HRU5fSU5UX0NOVEwsIDApOwogCXJldHVybiAwOwpAQCAtNjcsOCArNTksMTEgQEAKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJcmV0dXJuIDA7CisKIAkvKiBSZXN0b3JlIGludGVycnVwdCByZWdpc3RlcnMgKi8KLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzYwMCkKIAkJUkFERU9OX1dSSVRFKFI1MDBfRHhNT0RFX0lOVF9NQVNLLCBkZXZfcHJpdi0+cjUwMF9kaXNwX2lycV9yZWcpOwogCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCBkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWcpOwogCXJldHVybiAwOwpAQCAtOTUsNyArOTAsNiBAQAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSByYWRlb25fZ2V0X3ZibGFua19jb3VudGVyLAogCS5lbmFibGVfdmJsYW5rID0gcmFkZW9uX2VuYWJsZV92YmxhbmssCiAJLmRpc2FibGVfdmJsYW5rID0gcmFkZW9uX2Rpc2FibGVfdmJsYW5rLAotCS5kcmlfbGlicmFyeV9uYW1lID0gZHJpX2xpYnJhcnlfbmFtZSwKIAkubWFzdGVyX2NyZWF0ZSA9IHJhZGVvbl9tYXN0ZXJfY3JlYXRlLAogCS5tYXN0ZXJfZGVzdHJveSA9IHJhZGVvbl9tYXN0ZXJfZGVzdHJveSwKIAkuaXJxX3ByZWluc3RhbGwgPSByYWRlb25fZHJpdmVyX2lycV9wcmVpbnN0YWxsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAppbmRleCA0OTBiYzdjLi5lZDRkMjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaApAQCAtMTI2LDYgKzEyNiw3IEBACiAJQ0hJUF9SVjQxMCwKIAlDSElQX1JTNDAwLAogCUNISVBfUlM0ODAsCisJQ0hJUF9SUzYwMCwKIAlDSElQX1JTNjkwLAogCUNISVBfUlM3NDAsCiAJQ0hJUF9SVjUxNSwKQEAgLTEzNCw2ICsxMzUsMTYgQEAKIAlDSElQX1JWNTYwLAogCUNISVBfUlY1NzAsCiAJQ0hJUF9SNTgwLAorCUNISVBfUjYwMCwKKwlDSElQX1JWNjEwLAorCUNISVBfUlY2MzAsCisJQ0hJUF9SVjYyMCwKKwlDSElQX1JWNjM1LAorCUNISVBfUlY2NzAsCisJQ0hJUF9SUzc4MCwKKwlDSElQX1JWNzcwLAorCUNISVBfUlY3MzAsCisJQ0hJUF9SVjcxMCwKIAlDSElQX0xBU1QsCiB9OwogCkBAIC0xNjAsMTAgKzE3MSw2IEBACiAJUkFERU9OX0lTX0lHUEdBUlQgPSAweDAxMDAwMDAwVUwsCiB9OwogCi0jZGVmaW5lIEdFVF9SSU5HX0hFQUQoZGV2X3ByaXYpCShkZXZfcHJpdi0+d3JpdGViYWNrX3dvcmtzID8gXAotICAgICAgICBEUk1fUkVBRDMyKCAgKGRldl9wcml2KS0+cmluZ19ycHRyLCAwICkgOiBSQURFT05fUkVBRChSQURFT05fQ1BfUkJfUlBUUikpCi0jZGVmaW5lIFNFVF9SSU5HX0hFQUQoZGV2X3ByaXYsdmFsKQlEUk1fV1JJVEUzMiggKGRldl9wcml2KS0+cmluZ19ycHRyLCAwLCAodmFsKSApCi0KIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fZnJlZWxpc3QgewogCXVuc2lnbmVkIGludCBhZ2U7CiAJc3RydWN0IGRybV9idWYgKmJ1ZjsKQEAgLTIyMSwxMCArMjI4LDExIEBACiAJdTMyIHVwcGVyOwogCXUzMiBmbGFnczsKIAlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdjsKKyNkZWZpbmUgUENJR0FSVF9GSUxFX1BSSVYJKCh2b2lkICopIC0xTCkKIH07CiAKLSNkZWZpbmUgUkFERU9OX0ZMVVNIX0VNSVRFRAkoMSA8IDApCi0jZGVmaW5lIFJBREVPTl9QVVJHRV9FTUlURUQJKDEgPCAxKQorI2RlZmluZSBSQURFT05fRkxVU0hfRU1JVEVECSgxIDw8IDApCisjZGVmaW5lIFJBREVPTl9QVVJHRV9FTUlURUQJKDEgPDwgMSkKIAogc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgewogCWRybV9sb2NhbF9tYXBfdCAqc2FyZWE7CkBAIC0yNDgsNyArMjU2LDYgQEAKIAlkcm1fcmFkZW9uX2ZyZWVsaXN0X3QgKmhlYWQ7CiAJZHJtX3JhZGVvbl9mcmVlbGlzdF90ICp0YWlsOwogCWludCBsYXN0X2J1ZjsKLQl2b2xhdGlsZSB1MzIgKnNjcmF0Y2g7CiAJaW50IHdyaXRlYmFja193b3JrczsKIAogCWludCB1c2VjX3RpbWVvdXQ7CkBAIC0zMTYsMTEgKzMyMywzMSBAQAogCiAJLyogc3RhcnRpbmcgZnJvbSBoZXJlIG9uLCBkYXRhIGlzIHByZXNlcnZlZCBhY2Nyb3NzIGFuIG9wZW4gKi8KIAl1aW50MzJfdCBmbGFnczsJCS8qIHNlZSByYWRlb25fY2hpcF9mbGFncyAqLwotCXVuc2lnbmVkIGxvbmcgZmJfYXBlcl9vZmZzZXQ7CisJcmVzb3VyY2Vfc2l6ZV90IGZiX2FwZXJfb2Zmc2V0OwogCiAJaW50IG51bV9nYl9waXBlczsKIAlpbnQgdHJhY2tfZmx1c2g7CiAJZHJtX2xvY2FsX21hcF90ICptbWlvOworCisJLyogcjZ4eC9yN3h4IHBpcGUvc2hhZGVyIGNvbmZpZyAqLworCWludCByNjAwX21heF9waXBlczsKKwlpbnQgcjYwMF9tYXhfdGlsZV9waXBlczsKKwlpbnQgcjYwMF9tYXhfc2ltZHM7CisJaW50IHI2MDBfbWF4X2JhY2tlbmRzOworCWludCByNjAwX21heF9ncHJzOworCWludCByNjAwX21heF90aHJlYWRzOworCWludCByNjAwX21heF9zdGFja19lbnRyaWVzOworCWludCByNjAwX21heF9od19jb250ZXh0czsKKwlpbnQgcjYwMF9tYXhfZ3NfdGhyZWFkczsKKwlpbnQgcjYwMF9zeF9tYXhfZXhwb3J0X3NpemU7CisJaW50IHI2MDBfc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZTsKKwlpbnQgcjYwMF9zeF9tYXhfZXhwb3J0X3NteF9zaXplOworCWludCByNjAwX3NxX251bV9jZl9pbnN0czsKKwlpbnQgcjcwMF9zeF9udW1fb2Zfc2V0czsKKwlpbnQgcjcwMF9zY19wcmltX2ZpZm9fc2l6ZTsKKwlpbnQgcjcwMF9zY19oaXpfdGlsZV9maWZvX3NpemU7CisJaW50IHI3MDBfc2NfZWFybHl6X3RpbGVfZmlmb19maXplOworCiB9IGRybV9yYWRlb25fcHJpdmF0ZV90OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2J1Zl9wcml2IHsKQEAgLTMzOCw2ICszNjUsMTIgQEAKIGV4dGVybiBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgcmFkZW9uX2lvY3Rsc1tdOwogZXh0ZXJuIGludCByYWRlb25fbWF4X2lvY3RsOwogCitleHRlcm4gdTMyIHJhZGVvbl9nZXRfcmluZ19oZWFkKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdik7CitleHRlcm4gdm9pZCByYWRlb25fc2V0X3JpbmdfaGVhZChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiB2YWwpOworCisjZGVmaW5lIEdFVF9SSU5HX0hFQUQoZGV2X3ByaXYpCXJhZGVvbl9nZXRfcmluZ19oZWFkKGRldl9wcml2KQorI2RlZmluZSBTRVRfUklOR19IRUFEKGRldl9wcml2LCB2YWwpIHJhZGVvbl9zZXRfcmluZ19oZWFkKGRldl9wcml2LCB2YWwpCisKIC8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGhhcmR3YXJlIGFkZHJlc3MgaXMgaW5zaWRlIHRoZSBmcmFtZWJ1ZmZlciBvciB0aGUKICAqIEdBUlQgYXJlYS4KICAqLwpAQCAtMzY0LDYgKzM5Nyw5IEBACiBleHRlcm4gaW50IHJhZGVvbl9mdWxsc2NyZWVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpbnQgcmFkZW9uX2NwX2J1ZmZlcnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIHUzMiByYWRlb25fcmVhZF9mYl9sb2NhdGlvbihkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpOworZXh0ZXJuIHZvaWQgcmFkZW9uX3dyaXRlX2FncF9sb2NhdGlvbihkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBhZ3BfbG9jKTsKK2V4dGVybiB2b2lkIHJhZGVvbl93cml0ZV9hZ3BfYmFzZShkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHU2NCBhZ3BfYmFzZSk7CitleHRlcm4gdTMyIFJBREVPTl9SRUFEX01NKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGFkZHIpOwogCiBleHRlcm4gdm9pZCByYWRlb25fZnJlZWxpc3RfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIHN0cnVjdCBkcm1fYnVmICpyYWRlb25fZnJlZWxpc3RfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKQEAgLTM4Myw2ICs0MTksMTAgQEAKIGV4dGVybiB2b2lkIHJhZGVvbl9tZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgbWVtX2Jsb2NrICpoZWFwKTsKIAorZXh0ZXJuIHZvaWQgcmFkZW9uX2VuYWJsZV9ibShzdHJ1Y3QgZHJtX3JhZGVvbl9wcml2YXRlICpkZXZfcHJpdik7CitleHRlcm4gdTMyIHJhZGVvbl9yZWFkX3JpbmdfcnB0cihkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBvZmYpOworZXh0ZXJuIHZvaWQgcmFkZW9uX3dyaXRlX3JpbmdfcnB0cihkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBvZmYsIHUzMiB2YWwpOworCiAJCQkJLyogcmFkZW9uX2lycS5jICovCiBleHRlcm4gdm9pZCByYWRlb25faXJxX3NldF9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgbWFzaywgaW50IHN0YXRlKTsKIGV4dGVybiBpbnQgcmFkZW9uX2lycV9lbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKQEAgLTQyMyw2ICs0NjMsMjEgQEAKIAkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCiAJCQkgICAgIGRybV9yYWRlb25fa2NtZF9idWZmZXJfdCAqY21kYnVmKTsKIAorLyogcjYwMF9jcC5jICovCitleHRlcm4gaW50IHI2MDBfZG9fZW5naW5lX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCByNjAwX2RvX2NsZWFudXBfY3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IHI2MDBfZG9faW5pdF9jcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBkcm1fcmFkZW9uX2luaXRfdCAqaW5pdCwKKwkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiBpbnQgcjYwMF9kb19yZXN1bWVfY3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIGludCByNjAwX2RvX2NwX2lkbGUoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KTsKK2V4dGVybiB2b2lkIHI2MDBfZG9fY3Bfc3RhcnQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KTsKK2V4dGVybiB2b2lkIHI2MDBfZG9fY3BfcmVzZXQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KTsKK2V4dGVybiB2b2lkIHI2MDBfZG9fY3Bfc3RvcChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpOworZXh0ZXJuIGludCByNjAwX2NwX2Rpc3BhdGNoX2luZGlyZWN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZHJtX2J1ZiAqYnVmLCBpbnQgc3RhcnQsIGludCBlbmQpOworZXh0ZXJuIGludCByNjAwX3BhZ2VfdGFibGVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHI2MDBfcGFnZV90YWJsZV9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYXRpX3BjaWdhcnRfaW5mbyAqZ2FydF9pbmZvKTsKKwogLyogRmxhZ3MgZm9yIHN0YXRzLmJveGVzCiAgKi8KICNkZWZpbmUgUkFERU9OX0JPWF9ETUFfSURMRSAgICAgIDB4MQpAQCAtNDM0LDYgKzQ4OSw4IEBACiAvKiBSZWdpc3RlciBkZWZpbml0aW9ucywgcmVnaXN0ZXIgYWNjZXNzIG1hY3JvcyBhbmQgZHJtQWRkTWFwIGNvbnN0YW50cwogICogZm9yIFJhZGVvbiBrZXJuZWwgZHJpdmVyLgogICovCisjZGVmaW5lIFJBREVPTl9NTV9JTkRFWAkJICAgICAgICAweDAwMDAKKyNkZWZpbmUgUkFERU9OX01NX0RBVEEJCSAgICAgICAgMHgwMDA0CiAKICNkZWZpbmUgUkFERU9OX0FHUF9DT01NQU5ECQkweDBmNjAKICNkZWZpbmUgUkFERU9OX0FHUF9DT01NQU5EX1BDSV9DT05GSUcgICAweDAwNjAJLyogb2Zmc2V0IGluIFBDSSBjb25maWcgKi8KQEAgLTU1Niw2ICs2MTMsNTYgQEAKICNkZWZpbmUgUlM2OTBfTUNfQUdQX0JBU0UgICAgICAgICAgICAgICAweDEwMgogI2RlZmluZSBSUzY5MF9NQ19BR1BfQkFTRV8yICAgICAgICAgICAgIDB4MTAzCiAKKyNkZWZpbmUgUlM2MDBfTUNfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzAKKyMgICAgICAgZGVmaW5lIFJTNjAwX01DX0FERFJfTUFTSyAgICAgICAgICAgICAgIDB4ZmZmZgorIyAgICAgICBkZWZpbmUgUlM2MDBfTUNfSU5EX1NFUV9SQlNfMCAgICAgICAgICAgKDEgPDwgMTYpCisjICAgICAgIGRlZmluZSBSUzYwMF9NQ19JTkRfU0VRX1JCU18xICAgICAgICAgICAoMSA8PCAxNykKKyMgICAgICAgZGVmaW5lIFJTNjAwX01DX0lORF9TRVFfUkJTXzIgICAgICAgICAgICgxIDw8IDE4KQorIyAgICAgICBkZWZpbmUgUlM2MDBfTUNfSU5EX1NFUV9SQlNfMyAgICAgICAgICAgKDEgPDwgMTkpCisjICAgICAgIGRlZmluZSBSUzYwMF9NQ19JTkRfQUlDX1JCUyAgICAgICAgICAgICAoMSA8PCAyMCkKKyMgICAgICAgZGVmaW5lIFJTNjAwX01DX0lORF9DSVRGX0FSQjAgICAgICAgICAgICgxIDw8IDIxKQorIyAgICAgICBkZWZpbmUgUlM2MDBfTUNfSU5EX0NJVEZfQVJCMSAgICAgICAgICAgKDEgPDwgMjIpCisjICAgICAgIGRlZmluZSBSUzYwMF9NQ19JTkRfV1JfRU4gICAgICAgICAgICAgICAoMSA8PCAyMykKKyNkZWZpbmUgUlM2MDBfTUNfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzQKKworI2RlZmluZSBSUzYwMF9NQ19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwCisjICAgICAgIGRlZmluZSBSUzYwMF9NQ19JRExFICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBSUzYwMF9NQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgMHg0CisjZGVmaW5lIFJTNjAwX01DX0FHUF9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAweDUKKyNkZWZpbmUgUlM2MDBfQUdQX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NgorI2RlZmluZSBSUzYwMF9BR1BfQkFTRV8yICAgICAgICAgICAgICAgICAgICAgICAgMHg3CisjZGVmaW5lIFJTNjAwX01DX0NOVEwxICAgICAgICAgICAgICAgICAgICAgICAgICAweDkKKyMgICAgICAgZGVmaW5lIFJTNjAwX0VOQUJMRV9QQUdFX1RBQkxFUyAgICAgICAgICgxIDw8IDI2KQorI2RlZmluZSBSUzYwMF9NQ19QVDBfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAKKyMgICAgICAgZGVmaW5lIFJTNjAwX0VOQUJMRV9QVCAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSUzYwMF9FRkZFQ1RJVkVfTDJfQ0FDSEVfU0laRSh4KSAoKHgpIDw8IDE1KQorIyAgICAgICBkZWZpbmUgUlM2MDBfRUZGRUNUSVZFX0wyX1FVRVVFX1NJWkUoeCkgKCh4KSA8PCAyMSkKKyMgICAgICAgZGVmaW5lIFJTNjAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgICAgICgxIDw8IDI4KQorIyAgICAgICBkZWZpbmUgUlM2MDBfSU5WQUxJREFURV9MMl9DQUNIRSAgICAgICAgKDEgPDwgMjkpCisjZGVmaW5lIFJTNjAwX01DX1BUMF9DT05URVhUMF9DTlRMICAgICAgICAgICAgICAweDEwMgorIyAgICAgICBkZWZpbmUgUlM2MDBfRU5BQkxFX1BBR0VfVEFCTEUgICAgICAgICAgKDEgPDwgMCkKKyMgICAgICAgZGVmaW5lIFJTNjAwX1BBR0VfVEFCTEVfVFlQRV9GTEFUICAgICAgICgwIDw8IDEpCisjZGVmaW5lIFJTNjAwX01DX1BUMF9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIgICAweDExMgorI2RlZmluZSBSUzYwMF9NQ19QVDBfU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiAgMHgxMTQKKyNkZWZpbmUgUlM2MDBfTUNfUFQwX0NPTlRFWFQwX0RFRkFVTFRfUkVBRF9BRERSIDB4MTFjCisjZGVmaW5lIFJTNjAwX01DX1BUMF9DT05URVhUMF9GTEFUX0JBU0VfQUREUiAgICAweDEyYworI2RlZmluZSBSUzYwMF9NQ19QVDBfQ09OVEVYVDBfRkxBVF9TVEFSVF9BRERSICAgMHgxM2MKKyNkZWZpbmUgUlM2MDBfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfRU5EX0FERFIgICAgIDB4MTRjCisjZGVmaW5lIFJTNjAwX01DX1BUMF9DTElFTlQwX0NOVEwgICAgICAgICAgICAgICAweDE2YworIyAgICAgICBkZWZpbmUgUlM2MDBfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUgICAgICAgKDEgPDwgMCkKKyMgICAgICAgZGVmaW5lIFJTNjAwX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUgICAgICAgICAgICAgICgxIDw8IDEpCisjICAgICAgIGRlZmluZSBSUzYwMF9TWVNURU1fQUNDRVNTX01PREVfTUFTSyAgICAgICAgICAgICAgICAoMyA8PCA4KQorIyAgICAgICBkZWZpbmUgUlM2MDBfU1lTVEVNX0FDQ0VTU19NT0RFX1BBX09OTFkgICAgICAgICAgICAgKDAgPDwgOCkKKyMgICAgICAgZGVmaW5lIFJTNjAwX1NZU1RFTV9BQ0NFU1NfTU9ERV9VU0VfU1lTX01BUCAgICAgICAgICgxIDw8IDgpCisjICAgICAgIGRlZmluZSBSUzYwMF9TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTICAgICAgICAgICAgICAoMiA8PCA4KQorIyAgICAgICBkZWZpbmUgUlM2MDBfU1lTVEVNX0FDQ0VTU19NT0RFX05PVF9JTl9TWVMgICAgICAgICAgKDMgPDwgOCkKKyMgICAgICAgZGVmaW5lIFJTNjAwX1NZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9BQ0NFU1NfUEFTU1RIUk9VR0ggICAgICAgICgwIDw8IDEwKQorIyAgICAgICBkZWZpbmUgUlM2MDBfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTU19ERUZBVUxUX1BBR0UgICAgICAgKDEgPDwgMTApCisjICAgICAgIGRlZmluZSBSUzYwMF9FRkZFQ1RJVkVfTDFfQ0FDSEVfU0laRSh4KSAoKHgpIDw8IDExKQorIyAgICAgICBkZWZpbmUgUlM2MDBfRU5BQkxFX0ZSQUdNRU5UX1BST0NFU1NJTkcgKDEgPDwgMTQpCisjICAgICAgIGRlZmluZSBSUzYwMF9FRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSh4KSAoKHgpIDw8IDE1KQorIyAgICAgICBkZWZpbmUgUlM2MDBfSU5WQUxJREFURV9MMV9UTEIgICAgICAgICAgKDEgPDwgMjApCisKICNkZWZpbmUgUjUyMF9NQ19JTkRfSU5ERVggMHg3MAogI2RlZmluZSBSNTIwX01DX0lORF9XUl9FTiAoMSA8PCAyNCkKICNkZWZpbmUgUjUyMF9NQ19JTkRfREFUQSAgMHg3NApAQCAtNTgwLDcgKzY4Nyw2IEBACiAvKiBwaXBlIGNvbmZpZyByZWdzICovCiAjZGVmaW5lIFI0MDBfR0JfUElQRV9TRUxFQ1QgICAgICAgICAgICAgMHg0MDJjCiAjZGVmaW5lIFI1MDBfRFlOX1NDTEtfUFdNRU1fUElQRSAgICAgICAgMHgwMDBkIC8qIFBMTCAqLwotI2RlZmluZSBSNTAwX1NVX1JFR19ERVNUICAgICAgICAgICAgICAgIDB4NDJjOAogI2RlZmluZSBSMzAwX0dCX1RJTEVfQ09ORklHICAgICAgICAgICAgIDB4NDAxOAogIyAgICAgICBkZWZpbmUgUjMwMF9FTkFCTEVfVElMSU5HICAgICAgICgxIDw8IDApCiAjICAgICAgIGRlZmluZSBSMzAwX1BJUEVfQ09VTlRfUlYzNTAgICAgKDAgPDwgMSkKQEAgLTYzOSw5ICs3NDUsMjIgQEAKIAogI2RlZmluZSBSQURFT05fU0NSQVRDSE9GRiggeCApCQkoUkFERU9OX1NDUkFUQ0hfUkVHX09GRlNFVCArIDQqKHgpKQogCi0jZGVmaW5lIEdFVF9TQ1JBVENIKCB4ICkJKGRldl9wcml2LT53cml0ZWJhY2tfd29ya3MJCQlcCi0JCQkJPyBEUk1fUkVBRDMyKCBkZXZfcHJpdi0+cmluZ19ycHRyLCBSQURFT05fU0NSQVRDSE9GRih4KSApIFwKLQkJCQk6IFJBREVPTl9SRUFEKCBSQURFT05fU0NSQVRDSF9SRUcwICsgNCooeCkgKSApCitleHRlcm4gdTMyIHJhZGVvbl9nZXRfc2NyYXRjaChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBpbmRleCk7CisKKyNkZWZpbmUgR0VUX1NDUkFUQ0goZGV2X3ByaXYsIHgpIHJhZGVvbl9nZXRfc2NyYXRjaChkZXZfcHJpdiwgeCkKKworI2RlZmluZSBSNjAwX1NDUkFUQ0hfUkVHMAkJMHg4NTAwCisjZGVmaW5lIFI2MDBfU0NSQVRDSF9SRUcxCQkweDg1MDQKKyNkZWZpbmUgUjYwMF9TQ1JBVENIX1JFRzIJCTB4ODUwOAorI2RlZmluZSBSNjAwX1NDUkFUQ0hfUkVHMwkJMHg4NTBjCisjZGVmaW5lIFI2MDBfU0NSQVRDSF9SRUc0CQkweDg1MTAKKyNkZWZpbmUgUjYwMF9TQ1JBVENIX1JFRzUJCTB4ODUxNAorI2RlZmluZSBSNjAwX1NDUkFUQ0hfUkVHNgkJMHg4NTE4CisjZGVmaW5lIFI2MDBfU0NSQVRDSF9SRUc3CQkweDg1MWMKKyNkZWZpbmUgUjYwMF9TQ1JBVENIX1VNU0sJCTB4ODU0MAorI2RlZmluZSBSNjAwX1NDUkFUQ0hfQUREUgkJMHg4NTQ0CisKKyNkZWZpbmUgUjYwMF9TQ1JBVENIT0ZGKHgpCQkoUjYwMF9TQ1JBVENIX1JFR19PRkZTRVQgKyA0Kih4KSkKIAogI2RlZmluZSBSQURFT05fR0VOX0lOVF9DTlRMCQkweDAwNDAKICMJZGVmaW5lIFJBREVPTl9DUlRDX1ZCTEFOS19NQVNLCQkoMSA8PCAwKQpAQCAtOTIyLDYgKzEwNDEsNyBAQAogI2RlZmluZSBSQURFT05fQ1BfUkJfQ05UTAkJMHgwNzA0CiAjCWRlZmluZSBSQURFT05fQlVGX1NXQVBfMzJCSVQJCSgyIDw8IDE2KQogIwlkZWZpbmUgUkFERU9OX1JCX05PX1VQREFURQkJKDEgPDwgMjcpCisjCWRlZmluZSBSQURFT05fUkJfUlBUUl9XUl9FTkEJCSgxIDw8IDMxKQogI2RlZmluZSBSQURFT05fQ1BfUkJfUlBUUl9BRERSCQkweDA3MGMKICNkZWZpbmUgUkFERU9OX0NQX1JCX1JQVFIJCTB4MDcxMAogI2RlZmluZSBSQURFT05fQ1BfUkJfV1BUUgkJMHgwNzE0CkBAIC05ODMsNiArMTEwMywxNCBAQAogIwlkZWZpbmUgUkFERU9OX0NOVExfQklUQkxUX01VTFRJCQkweDAwMDA5QjAwCiAjCWRlZmluZSBSQURFT05fQ05UTF9TRVRfU0NJU1NPUlMJCTB4QzAwMDFFMDAKIAorIwlkZWZpbmUgUjYwMF9JVF9JTkRJUkVDVF9CVUZGRVIJCTB4MDAwMDMyMDAKKyMJZGVmaW5lIFI2MDBfSVRfTUVfSU5JVElBTElaRQkJMHgwMDAwNDQwMAorIwkgICAgICAgZGVmaW5lIFI2MDBfTUVfSU5JVElBTElaRV9ERVZJQ0VfSUQoeCkgKCh4KSA8PCAxNikKKyMJZGVmaW5lIFI2MDBfSVRfRVZFTlRfV1JJVEUJCTB4MDAwMDQ2MDAKKyMJZGVmaW5lIFI2MDBfSVRfU0VUX0NPTkZJR19SRUcJCTB4MDAwMDY4MDAKKyMJZGVmaW5lIFI2MDBfU0VUX0NPTkZJR19SRUdfT0ZGU0VUICAgICAgIDB4MDAwMDgwMDAKKyMJZGVmaW5lIFI2MDBfU0VUX0NPTkZJR19SRUdfRU5EICAgICAgICAgIDB4MDAwMGFjMDAKKwogI2RlZmluZSBSQURFT05fQ1BfUEFDS0VUX01BU0sJCTB4QzAwMDAwMDAKICNkZWZpbmUgUkFERU9OX0NQX1BBQ0tFVF9DT1VOVF9NQVNLCTB4M2ZmZjAwMDAKICNkZWZpbmUgUkFERU9OX0NQX1BBQ0tFVDBfUkVHX01BU0sJMHgwMDAwMDdmZgpAQCAtMTE4MSw2ICsxMzA5LDQyMiBAQAogI2RlZmluZSBSNTAwX0QxX1ZCTEFOS19JTlRFUlJVUFQgKDEgPDwgNCkKICNkZWZpbmUgUjUwMF9EMl9WQkxBTktfSU5URVJSVVBUICgxIDw8IDUpCiAKKy8qIFI2eHgvUjd4eCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUjYwMF9NQ19WTV9GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4MAorI2RlZmluZSBSNjAwX01DX1ZNX0FHUF9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMTg0CisjZGVmaW5lIFI2MDBfTUNfVk1fQUdQX0JPVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIxODgKKyNkZWZpbmUgUjYwMF9NQ19WTV9BR1BfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4YworI2RlZmluZSBSNjAwX01DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiAgICAgICAgICAgICAgICAgICAgMHgyMTkwCisjZGVmaW5lIFI2MDBfTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiAgICAgICAgICAgICAgICAgICAweDIxOTQKKyNkZWZpbmUgUjYwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfREVGQVVMVF9BRERSICAgICAgICAgICAgICAgIDB4MjE5OAorCisjZGVmaW5lIFI3MDBfTUNfVk1fRkJfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMjQKKyNkZWZpbmUgUjcwMF9NQ19WTV9BR1BfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAyOAorI2RlZmluZSBSNzAwX01DX1ZNX0FHUF9CT1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDJjCisjZGVmaW5lIFI3MDBfTUNfVk1fQUdQX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMzAKKyNkZWZpbmUgUjcwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIgICAgICAgICAgICAgICAgICAgIDB4MjAzNAorI2RlZmluZSBSNzAwX01DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIgICAgICAgICAgICAgICAgICAgMHgyMDM4CisjZGVmaW5lIFI3MDBfTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0RFRkFVTFRfQUREUiAgICAgICAgICAgICAgICAweDIwM2MKKworI2RlZmluZSBSNjAwX01DRF9SRF9BX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMTljCisjZGVmaW5lIFI2MDBfTUNEX1JEX0JfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIxYTAKKworI2RlZmluZSBSNjAwX01DRF9XUl9BX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMWE0CisjZGVmaW5lIFI2MDBfTUNEX1dSX0JfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIxYTgKKworI2RlZmluZSBSNjAwX01DRF9SRF9TWVNfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjAwCisjZGVmaW5lIFI2MDBfTUNEX1dSX1NZU19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMTQKKworI2RlZmluZSBSNjAwX01DRF9SRF9HRlhfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMWZjCisjZGVmaW5lIFI2MDBfTUNEX1JEX0hEUF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMDQKKyNkZWZpbmUgUjYwMF9NQ0RfUkRfUERNQV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIwOAorI2RlZmluZSBSNjAwX01DRF9SRF9TRU1fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjBjCisjZGVmaW5lIFI2MDBfTUNEX1dSX0dGWF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMTAKKyNkZWZpbmUgUjYwMF9NQ0RfV1JfSERQX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIxOAorI2RlZmluZSBSNjAwX01DRF9XUl9QRE1BX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjFjCisjZGVmaW5lIFI2MDBfTUNEX1dSX1NFTV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMjAKKworIyAgICAgICBkZWZpbmUgUjYwMF9NQ0RfTDFfVExCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfTUNEX0wxX0ZSQUdfUFJPQyAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjICAgICAgIGRlZmluZSBSNjAwX01DRF9MMV9TVFJJQ1RfT1JERVJJTkcgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQorCisjICAgICAgIGRlZmluZSBSNjAwX01DRF9TWVNURU1fQUNDRVNTX01PREVfTUFTSyAgICAgICAgICAgICAgICAoMyA8PCA2KQorIyAgICAgICBkZWZpbmUgUjYwMF9NQ0RfU1lTVEVNX0FDQ0VTU19NT0RFX1BBX09OTFkgICAgICAgICAgICAgKDAgPDwgNikKKyMgICAgICAgZGVmaW5lIFI2MDBfTUNEX1NZU1RFTV9BQ0NFU1NfTU9ERV9VU0VfU1lTX01BUCAgICAgICAgICgxIDw8IDYpCisjICAgICAgIGRlZmluZSBSNjAwX01DRF9TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTICAgICAgICAgICAgICAoMiA8PCA2KQorIyAgICAgICBkZWZpbmUgUjYwMF9NQ0RfU1lTVEVNX0FDQ0VTU19NT0RFX05PVF9JTl9TWVMgICAgICAgICAgKDMgPDwgNikKKworIyAgICAgICBkZWZpbmUgUjYwMF9NQ0RfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTU19QQVNTX1RIUlUgICAgKDAgPDwgOCkKKyMgICAgICAgZGVmaW5lIFI2MDBfTUNEX1NZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9BQ0NFU1NfREVGQVVMVF9QQUdFICgxIDw8IDgpCisKKyMgICAgICAgZGVmaW5lIFI2MDBfTUNEX1NFTUFQSE9SRV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEwKQorIyAgICAgICBkZWZpbmUgUjYwMF9NQ0RfV0FJVF9MMl9RVUVSWSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCisjICAgICAgIGRlZmluZSBSNjAwX01DRF9FRkZFQ1RJVkVfTDFfVExCX1NJWkUoeCkgICAgICAgICAgICAgICAoKHgpIDw8IDEyKQorIyAgICAgICBkZWZpbmUgUjYwMF9NQ0RfRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUoeCkgICAgICAgICAgICAgKCh4KSA8PCAxNSkKKworI2RlZmluZSBSNzAwX01DX1ZNX01EX0wxX1RMQjBfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNjU0CisjZGVmaW5lIFI3MDBfTUNfVk1fTURfTDFfVExCMV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI2NTgKKyNkZWZpbmUgUjcwMF9NQ19WTV9NRF9MMV9UTEIyX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjY1YworCisjZGVmaW5lIFI3MDBfTUNfVk1fTUJfTDFfVExCMF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMzQKKyNkZWZpbmUgUjcwMF9NQ19WTV9NQl9MMV9UTEIxX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIzOAorI2RlZmluZSBSNzAwX01DX1ZNX01CX0wxX1RMQjJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjNjCisjZGVmaW5lIFI3MDBfTUNfVk1fTUJfTDFfVExCM19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyNDAKKworIyAgICAgICBkZWZpbmUgUjcwMF9FTkFCTEVfTDFfVExCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI3MDBfRU5BQkxFX0wxX0ZSQUdNRU5UX1BST0NFU1NJTkcgICAgICAgICAgICAgICgxIDw8IDEpCisjICAgICAgIGRlZmluZSBSNzAwX1NZU1RFTV9BQ0NFU1NfTU9ERV9JTl9TWVMgICAgICAgICAgICAgICAgICAoMiA8PCAzKQorIyAgICAgICBkZWZpbmUgUjcwMF9TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX1BBU1NfVEhSVSAgKDAgPDwgNSkKKyMgICAgICAgZGVmaW5lIFI3MDBfRUZGRUNUSVZFX0wxX1RMQl9TSVpFKHgpICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTUpCisjICAgICAgIGRlZmluZSBSNzAwX0VGRkVDVElWRV9MMV9RVUVVRV9TSVpFKHgpICAgICAgICAgICAgICAgICAoKHgpIDw8IDE4KQorCisjZGVmaW5lIFI3MDBfTUNfQVJCX1JBTUNGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI3NjAKKyMgICAgICAgZGVmaW5lIFI3MDBfTk9PRkJBTktfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyMgICAgICAgZGVmaW5lIFI3MDBfTk9PRkJBTktfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MworIyAgICAgICBkZWZpbmUgUjcwMF9OT09GUkFOS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorIyAgICAgICBkZWZpbmUgUjcwMF9OT09GUkFOS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCisjICAgICAgIGRlZmluZSBSNzAwX05PT0ZST1dTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjICAgICAgIGRlZmluZSBSNzAwX05PT0ZST1dTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcKKyMgICAgICAgZGVmaW5lIFI3MDBfTk9PRkNPTFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyMgICAgICAgZGVmaW5lIFI3MDBfTk9PRkNPTFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MworIyAgICAgICBkZWZpbmUgUjcwMF9DSEFOU0laRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorIyAgICAgICBkZWZpbmUgUjcwMF9DSEFOU0laRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCisjICAgICAgIGRlZmluZSBSNzAwX0JVUlNUTEVOR1RIX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjICAgICAgIGRlZmluZSBSNzAwX0JVUlNUTEVOR1RIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgUjYwMF9SQU1DRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjQwOAorIyAgICAgICBkZWZpbmUgUjYwMF9OT09GQkFOS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorIyAgICAgICBkZWZpbmUgUjYwMF9OT09GQkFOS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCisjICAgICAgIGRlZmluZSBSNjAwX05PT0ZSQU5LX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjICAgICAgIGRlZmluZSBSNjAwX05PT0ZSQU5LX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyMgICAgICAgZGVmaW5lIFI2MDBfTk9PRlJPV1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyMgICAgICAgZGVmaW5lIFI2MDBfTk9PRlJPV1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NworIyAgICAgICBkZWZpbmUgUjYwMF9OT09GQ09MU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorIyAgICAgICBkZWZpbmUgUjYwMF9OT09GQ09MU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzCisjICAgICAgIGRlZmluZSBSNjAwX0NIQU5TSVpFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjICAgICAgIGRlZmluZSBSNjAwX0NIQU5TSVpFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyMgICAgICAgZGVmaW5lIFI2MDBfQlVSU1RMRU5HVEhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyMgICAgICAgZGVmaW5lIFI2MDBfQlVSU1RMRU5HVEhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQorCisjZGVmaW5lIFI2MDBfVk1fTDJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDAKKyMgICAgICAgZGVmaW5lIFI2MDBfVk1fTDJfQ0FDSEVfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1ZNX0wyX0ZSQUdfUFJPQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorIyAgICAgICBkZWZpbmUgUjYwMF9WTV9FTkFCTEVfUFRFX0NBQ0hFX0xSVV9XICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKKyMgICAgICAgZGVmaW5lIFI2MDBfVk1fTDJfQ05UTF9RVUVVRV9TSVpFKHgpICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTMpCisjICAgICAgIGRlZmluZSBSNzAwX1ZNX0wyX0NOVExfUVVFVUVfU0laRSh4KSAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE0KQorCisjZGVmaW5lIFI2MDBfVk1fTDJfQ05UTDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDQKKyMgICAgICAgZGVmaW5lIFI2MDBfVk1fTDJfQ05UTDJfSU5WQUxJREFURV9BTExfTDFfVExCUyAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1ZNX0wyX0NOVEwyX0lOVkFMSURBVEVfTDJfQ0FDSEUgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBSNjAwX1ZNX0wyX0NOVEwzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDA4CisjICAgICAgIGRlZmluZSBSNjAwX1ZNX0wyX0NOVEwzX0JBTktfU0VMRUNUXzAoeCkgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1ZNX0wyX0NOVEwzX0JBTktfU0VMRUNUXzEoeCkgICAgICAgICAgICAgICAoKHgpIDw8IDUpCisjICAgICAgIGRlZmluZSBSNjAwX1ZNX0wyX0NOVEwzX0NBQ0hFX1VQREFURV9NT0RFKHgpICAgICAgICAgICAoKHgpIDw8IDEwKQorIyAgICAgICBkZWZpbmUgUjcwMF9WTV9MMl9DTlRMM19CQU5LX1NFTEVDVCh4KSAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjcwMF9WTV9MMl9DTlRMM19DQUNIRV9VUERBVEVfTU9ERSh4KSAgICAgICAgICAgKCh4KSA8PCA2KQorCisjZGVmaW5lIFI2MDBfVk1fTDJfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MGMKKworI2RlZmluZSBSNjAwX1ZNX0NPTlRFWFQwX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDEwCisjICAgICAgIGRlZmluZSBSNjAwX1ZNX0VOQUJMRV9DT05URVhUICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9WTV9QQUdFX1RBQkxFX0RFUFRIX0ZMQVQgICAgICAgICAgICAgICAgICAgKDAgPDwgMSkKKworI2RlZmluZSBSNjAwX1ZNX0NPTlRFWFQwX0NOVEwyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDMwCisjZGVmaW5lIFI2MDBfVk1fQ09OVEVYVDBfUkVRVUVTVF9SRVNQT05TRSAgICAgICAgICAgICAgICAgICAgICAweDE0NzAKKyNkZWZpbmUgUjYwMF9WTV9DT05URVhUMF9JTlZBTElEQVRJT05fTE9XX0FERFIgICAgICAgICAgICAgICAgIDB4MTQ5MAorI2RlZmluZSBSNjAwX1ZNX0NPTlRFWFQwX0lOVkFMSURBVElPTl9ISUdIX0FERFIgICAgICAgICAgICAgICAgMHgxNGIwCisjZGVmaW5lIFI2MDBfVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAweDE1NzQKKyNkZWZpbmUgUjYwMF9WTV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFIgICAgICAgICAgICAgICAgIDB4MTU5NAorI2RlZmluZSBSNjAwX1ZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfRU5EX0FERFIgICAgICAgICAgICAgICAgICAgMHgxNWI0CisKKyNkZWZpbmUgUjcwMF9WTV9DT05URVhUMF9QQUdFX1RBQkxFX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgIDB4MTUzYworI2RlZmluZSBSNzAwX1ZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfU1RBUlRfQUREUiAgICAgICAgICAgICAgICAgMHgxNTVjCisjZGVmaW5lIFI3MDBfVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9FTkRfQUREUiAgICAgICAgICAgICAgICAgICAweDE1N2MKKworI2RlZmluZSBSNjAwX0hEUF9IT1NUX1BBVEhfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyYzAwCisKKyNkZWZpbmUgUjYwMF9HUkJNX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorIyAgICAgICBkZWZpbmUgUjYwMF9HUkJNX1JFQURfVElNRU9VVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorCisjZGVmaW5lIFI2MDBfR1JCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMTAKKyMgICAgICAgZGVmaW5lIFI2MDBfQ01ERklGT19BVkFJTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWYKKyMgICAgICAgZGVmaW5lIFI3MDBfQ01ERklGT19BVkFJTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZgorIyAgICAgICBkZWZpbmUgUjYwMF9HVUlfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIFI2MDBfR1JCTV9TVEFUVVMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMTQKKyNkZWZpbmUgUjYwMF9HUkJNX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAyMAorIyAgICAgICBkZWZpbmUgUjYwMF9TT0ZUX1JFU0VUX0NQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgUjYwMF9XQUlUX1VOVElMCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDQwCisKKyNkZWZpbmUgUjYwMF9DUF9TRU1fV0FJVF9USU1FUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODViYworI2RlZmluZSBSNjAwX0NQX01FX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NmQ4CisjICAgICAgIGRlZmluZSBSNjAwX0NQX01FX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOCkKKyNkZWZpbmUgUjYwMF9DUF9RVUVVRV9USFJFU0hPTERTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODc2MAorIyAgICAgICBkZWZpbmUgUjYwMF9ST1FfSUIxX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9ST1FfSUIyX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA4KQorI2RlZmluZSBSNjAwX0NQX01FUV9USFJFU0hPTERTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NzY0CisjICAgICAgIGRlZmluZSBSNzAwX1NUUV9TUExJVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX01FUV9FTkQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorIyAgICAgICBkZWZpbmUgUjYwMF9ST1FfRU5EKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyNCkKKyNkZWZpbmUgUjYwMF9DUF9QRVJGTU9OX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODdmYworI2RlZmluZSBSNjAwX0NQX1JCX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMTAwCisjZGVmaW5lIFI2MDBfQ1BfUkJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMxMDQKKyMgICAgICAgZGVmaW5lIFI2MDBfUkJfQlVGU1ooeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUkJfQkxLU1ooeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgOCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUkJfTk9fVVBEQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI3KQorIyAgICAgICBkZWZpbmUgUjYwMF9SQl9SUFRSX1dSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIFI2MDBfQ1BfUkJfUlBUUl9XUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMxMDgKKyNkZWZpbmUgUjYwMF9DUF9SQl9SUFRSX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzEwYworI2RlZmluZSBSNjAwX0NQX1JCX1JQVFJfQUREUl9ISSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMTEwCisjZGVmaW5lIFI2MDBfQ1BfUkJfV1BUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMxMTQKKyNkZWZpbmUgUjYwMF9DUF9SQl9XUFRSX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzExOAorI2RlZmluZSBSNjAwX0NQX1JCX1dQVFJfQUREUl9ISSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMTFjCisjZGVmaW5lIFI2MDBfQ1BfUkJfUlBUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg3MDAKKyNkZWZpbmUgUjYwMF9DUF9SQl9XUFRSX0RFTEFZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODcwNAorI2RlZmluZSBSNjAwX0NQX1BGUF9VQ09ERV9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMTUwCisjZGVmaW5lIFI2MDBfQ1BfUEZQX1VDT0RFX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMxNTQKKyNkZWZpbmUgUjYwMF9DUF9NRV9SQU1fUkFERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzE1OAorI2RlZmluZSBSNjAwX0NQX01FX1JBTV9XQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMTVjCisjZGVmaW5lIFI2MDBfQ1BfTUVfUkFNX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMxNjAKKyNkZWZpbmUgUjYwMF9DUF9ERUJVRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzFmYworCisjZGVmaW5lIFI2MDBfUEFfQ0xfRU5IQU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhhMTQKKyMgICAgICAgZGVmaW5lIFI2MDBfQ0xJUF9WVFhfUkVPUkRFUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX05VTV9DTElQX1NFUSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDEpCisjZGVmaW5lIFI2MDBfUEFfU0NfTElORV9TVElQUExFX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAweDhiMTAKKyNkZWZpbmUgUjYwMF9QQV9TQ19NVUxUSV9DSElQX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGIyMAorI2RlZmluZSBSNzAwX1BBX1NDX0ZPUkNFX0VPVl9NQVhfQ05UUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YjI0CisjICAgICAgIGRlZmluZSBSNzAwX0ZPUkNFX0VPVl9NQVhfQ0xLX0NOVCh4KSAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNzAwX0ZPUkNFX0VPVl9NQVhfUkVaX0NOVCh4KSAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorI2RlZmluZSBSNjAwX1BBX1NDX0FBX1NBTVBMRV9MT0NTXzJTICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YjQwCisjZGVmaW5lIFI2MDBfUEFfU0NfQUFfU0FNUExFX0xPQ1NfNFMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhiNDQKKyNkZWZpbmUgUjYwMF9QQV9TQ19BQV9TQU1QTEVfTE9DU184U19XRDAgICAgICAgICAgICAgICAgICAgICAgIDB4OGI0OAorI2RlZmluZSBSNjAwX1BBX1NDX0FBX1NBTVBMRV9MT0NTXzhTX1dEMSAgICAgICAgICAgICAgICAgICAgICAgMHg4YjRjCisjICAgICAgIGRlZmluZSBSNjAwX1MwX1goeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1MwX1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDQpCisjICAgICAgIGRlZmluZSBSNjAwX1MxX1goeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDgpCisjICAgICAgIGRlZmluZSBSNjAwX1MxX1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDEyKQorIyAgICAgICBkZWZpbmUgUjYwMF9TMl9YKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyMgICAgICAgZGVmaW5lIFI2MDBfUzJfWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjApCisjICAgICAgIGRlZmluZSBSNjAwX1MzX1goeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDI0KQorIyAgICAgICBkZWZpbmUgUjYwMF9TM19ZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyOCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUzRfWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUzRfWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgNCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUzVfWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgOCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUzVfWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTIpCisjICAgICAgIGRlZmluZSBSNjAwX1M2X1goeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorIyAgICAgICBkZWZpbmUgUjYwMF9TNl9ZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUzdfWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjQpCisjICAgICAgIGRlZmluZSBSNjAwX1M3X1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDI4KQorI2RlZmluZSBSNjAwX1BBX1NDX0ZJRk9fU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YmQwCisjICAgICAgIGRlZmluZSBSNjAwX1NDX1BSSU1fRklGT19TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1NDX0hJWl9USUxFX0ZJRk9fU0laRSh4KSAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDgpCisjICAgICAgIGRlZmluZSBSNjAwX1NDX0VBUkxZWl9USUxFX0ZJRk9fU0laRSh4KSAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorI2RlZmluZSBSNzAwX1BBX1NDX0ZJRk9fU0laRV9SN1hYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YmNjCisjICAgICAgIGRlZmluZSBSNzAwX1NDX1BSSU1fRklGT19TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNzAwX1NDX0hJWl9USUxFX0ZJRk9fU0laRSh4KSAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDEyKQorIyAgICAgICBkZWZpbmUgUjcwMF9TQ19FQVJMWVpfVElMRV9GSUZPX1NJWkUoeCkgICAgICAgICAgICAgICAgKCh4KSA8PCAyMCkKKyNkZWZpbmUgUjYwMF9QQV9TQ19FTkhBTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGJmMAorIyAgICAgICBkZWZpbmUgUjYwMF9GT1JDRV9FT1ZfTUFYX0NMS19DTlQoeCkgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9GT1JDRV9FT1ZfTUFYX1RJTEVfQ05UKHgpICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxMikKKyNkZWZpbmUgUjYwMF9QQV9TQ19DTElQUkVDVF9SVUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgyMGMKKyNkZWZpbmUgUjcwMF9QQV9TQ19FREdFUlVMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgyMzAKKyNkZWZpbmUgUjYwMF9QQV9TQ19MSU5FX1NUSVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhhMGMKKyNkZWZpbmUgUjYwMF9QQV9TQ19NT0RFX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhhNGMKKyNkZWZpbmUgUjYwMF9QQV9TQ19BQV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhjMDQKKworI2RlZmluZSBSNjAwX1NYX0VYUE9SVF9CVUZGRVJfU0laRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MDBjCisjICAgICAgIGRlZmluZSBSNjAwX0NPTE9SX0JVRkZFUl9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1BPU0lUSU9OX0JVRkZFUl9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDgpCisjICAgICAgIGRlZmluZSBSNjAwX1NNWF9CVUZGRVJfU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorI2RlZmluZSBSNjAwX1NYX0RFQlVHXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MDU0CisjICAgICAgIGRlZmluZSBSNjAwX1NNWF9FVkVOVF9SRUxFQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9FTkFCTEVfTkVXX1NNWF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTYpCisjZGVmaW5lIFI3MDBfU1hfREVCVUdfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkwNTgKKyMgICAgICAgZGVmaW5lIFI3MDBfRU5BQkxFX05FV19TTVhfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQorI2RlZmluZSBSNjAwX1NYX01JU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODM1MAorCisjZGVmaW5lIFI2MDBfREJfREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk4MzAKKyMgICAgICAgZGVmaW5lIFI2MDBfUFJFWl9NVVNUX1dBSVRfRk9SX1BPU1RaX0RPTkUgICAgICAgICAgICAgICgxIDw8IDMxKQorI2RlZmluZSBSNjAwX0RCX1dBVEVSTUFSS1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5ODM4CisjICAgICAgIGRlZmluZSBSNjAwX0RFUFRIX0ZSRUUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX0RFUFRIX0ZMVVNIKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDUpCisjICAgICAgIGRlZmluZSBSNjAwX0RFUFRIX1BFTkRJTkdfRlJFRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE1KQorIyAgICAgICBkZWZpbmUgUjYwMF9ERVBUSF9DQUNIRUxJTkVfRlJFRSh4KSAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyMCkKKyNkZWZpbmUgUjcwMF9EQl9ERUJVRzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OThiMAorIyAgICAgICBkZWZpbmUgUjcwMF9EQl9DTEtfT0ZGX0RFTEFZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxMSkKKyNkZWZpbmUgUlY3MDBfREJfREVCVUc0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OWI4YworIyAgICAgICBkZWZpbmUgUlY3MDBfRElTQUJMRV9USUxFX0NPVkVSRURfRk9SX1BTX0lURVIgICAgICAgICAgKDEgPDwgNikKKworI2RlZmluZSBSNjAwX1ZHVF9DQUNIRV9JTlZBTElEQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OGM0CisjICAgICAgIGRlZmluZSBSNjAwX0NBQ0hFX0lOVkFMSURBVElPTih4KSAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1ZDX09OTFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjICAgICAgIGRlZmluZSBSNjAwX1RDX09OTFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjICAgICAgIGRlZmluZSBSNjAwX1ZDX0FORF9UQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjICAgICAgIGRlZmluZSBSNzAwX0FVVE9fSU5WTERfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDYpCisjICAgICAgIGRlZmluZSBSNzAwX05PX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjICAgICAgIGRlZmluZSBSNzAwX0VTX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjICAgICAgIGRlZmluZSBSNzAwX0dTX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjICAgICAgIGRlZmluZSBSNzAwX0VTX0FORF9HU19BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFI2MDBfVkdUX0dTX1BFUl9FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4YzgKKyNkZWZpbmUgUjYwMF9WR1RfRVNfUEVSX0dTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhjYworI2RlZmluZSBSNjAwX1ZHVF9HU19QRVJfVlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OGU4CisjZGVmaW5lIFI2MDBfVkdUX0dTX1ZFUlRFWF9SRVVTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4ZDQKKyNkZWZpbmUgUjYwMF9WR1RfTlVNX0lOU1RBTkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODk3NAorI2RlZmluZSBSNjAwX1ZHVF9TVFJNT1VUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyOGFiMAorI2RlZmluZSBSNjAwX1ZHVF9FVkVOVF9JTklUSUFUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyOGE5MAorIyAgICAgICBkZWZpbmUgUjYwMF9DQUNIRV9GTFVTSF9BTkRfSU5WX0VWRU5UICAgICAgICAgICAgICAgICAgKDB4MTYgPDwgMCkKKyNkZWZpbmUgUjYwMF9WR1RfVkVSVEVYX1JFVVNFX0JMT0NLX0NOVEwgICAgICAgICAgICAgICAgICAgICAgIDB4MjhjNTgKKyMgICAgICAgZGVmaW5lIFI2MDBfVlRYX1JFVVNFX0RFUFRIX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4ZmYKKyNkZWZpbmUgUjYwMF9WR1RfT1VUX0RFQUxMT0NfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhjNWMKKyMgICAgICAgZGVmaW5lIFI2MDBfREVBTExPQ19ESVNUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2YKKworI2RlZmluZSBSNjAwX0NCX0NPTE9SMF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA0MAorI2RlZmluZSBSNjAwX0NCX0NPTE9SMV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA0NAorI2RlZmluZSBSNjAwX0NCX0NPTE9SMl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA0OAorI2RlZmluZSBSNjAwX0NCX0NPTE9SM19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA0YworI2RlZmluZSBSNjAwX0NCX0NPTE9SNF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA1MAorI2RlZmluZSBSNjAwX0NCX0NPTE9SNV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA1NAorI2RlZmluZSBSNjAwX0NCX0NPTE9SNl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA1OAorI2RlZmluZSBSNjAwX0NCX0NPTE9SN19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA1YworI2RlZmluZSBSNjAwX0NCX0NPTE9SN19GUkFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODBmYworCisjZGVmaW5lIFI2MDBfVENfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk2MDgKKyMgICAgICAgZGVmaW5lIFI2MDBfVENfTDJfU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgNSkKKyMgICAgICAgZGVmaW5lIFI2MDBfTDJfRElTQUJMRV9MQVRFX0hJVCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDkpCisKKyNkZWZpbmUgUjYwMF9BUkJfUE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjQxOAorIyAgICAgICBkZWZpbmUgUjYwMF9FTkFCTEVfVEMxMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCisjZGVmaW5lIFI2MDBfQVJCX0dERUNfUkRfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI0NmMKKworI2RlZmluZSBSNjAwX1RBX0NOVExfQVVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5NTA4CisjICAgICAgIGRlZmluZSBSNjAwX0RJU0FCTEVfQ1VCRV9XUkFQICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9ESVNBQkxFX0NVQkVfQU5JU08gICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyMgICAgICAgZGVmaW5lIFI3MDBfR0VUTE9EX1NFTEVDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMikKKyMgICAgICAgZGVmaW5lIFI2MDBfU1lOQ19HUkFESUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI0KQorIyAgICAgICBkZWZpbmUgUjYwMF9TWU5DX1dBTEtFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjUpCisjICAgICAgIGRlZmluZSBSNjAwX1NZTkNfQUxJR05FUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyNikKKyMgICAgICAgZGVmaW5lIFI2MDBfQklMSU5FQVJfUFJFQ0lTSU9OXzZfQklUICAgICAgICAgICAgICAgICAgICgwIDw8IDMxKQorIyAgICAgICBkZWZpbmUgUjYwMF9CSUxJTkVBUl9QUkVDSVNJT05fOF9CSVQgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisKKyNkZWZpbmUgUjcwMF9UQ1BfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTYxMAorCisjZGVmaW5lIFI2MDBfU01YX0RDX0NUTDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGEwMjAKKyMgICAgICAgZGVmaW5lIFI3MDBfVVNFX0hBU0hfRlVOQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSNzAwX0NBQ0hFX0RFUFRIKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDEpCisjICAgICAgIGRlZmluZSBSNzAwX0ZMVVNIX0FMTF9PTl9FVkVOVCAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKKyMgICAgICAgZGVmaW5lIFI3MDBfU1RBTExfT05fRVZFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDExKQorI2RlZmluZSBSNzAwX1NNWF9FVkVOVF9DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhMDJjCisjICAgICAgIGRlZmluZSBSNzAwX0VTX0ZMVVNIX0NUTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNzAwX0dTX0ZMVVNIX0NUTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDMpCisjICAgICAgIGRlZmluZSBSNzAwX0FDS19GTFVTSF9DVEwoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDYpCisjICAgICAgIGRlZmluZSBSNzAwX1NZTkNfRkxVU0hfQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorCisjZGVmaW5lIFI2MDBfU1FfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfVkNfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX0VYUE9SVF9TUkNfQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorIyAgICAgICBkZWZpbmUgUjYwMF9EWDlfQ09OU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyMgICAgICAgZGVmaW5lIFI2MDBfQUxVX0lOU1RfUFJFRkVSX1ZFQ1RPUiAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisjICAgICAgIGRlZmluZSBSNjAwX0RYMTBfQ0xBTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQorIyAgICAgICBkZWZpbmUgUjYwMF9DTEFVU0VfU0VRX1BSSU8oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA4KQorIyAgICAgICBkZWZpbmUgUjYwMF9QU19QUklPKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyNCkKKyMgICAgICAgZGVmaW5lIFI2MDBfVlNfUFJJTyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjYpCisjICAgICAgIGRlZmluZSBSNjAwX0dTX1BSSU8oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDI4KQorIyAgICAgICBkZWZpbmUgUjYwMF9FU19QUklPKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAzMCkKKyNkZWZpbmUgUjYwMF9TUV9HUFJfUkVTT1VSQ0VfTUdNVF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGMwNAorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fUFNfR1BSUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fVlNfR1BSUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyMgICAgICAgZGVmaW5lIFI3MDBfRFlOX0dQUl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI3KQorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fQ0xBVVNFX1RFTVBfR1BSUyh4KSAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyOCkKKyNkZWZpbmUgUjYwMF9TUV9HUFJfUkVTT1VSQ0VfTUdNVF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGMwOAorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fR1NfR1BSUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fRVNfR1BSUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyNkZWZpbmUgUjYwMF9TUV9USFJFQURfUkVTT1VSQ0VfTUdNVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGMwYworIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fUFNfVEhSRUFEUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fVlNfVEhSRUFEUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA4KQorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fR1NfVEhSRUFEUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyMgICAgICAgZGVmaW5lIFI2MDBfTlVNX0VTX1RIUkVBRFMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjQpCisjZGVmaW5lIFI2MDBfU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8xICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjMTAKKyMgICAgICAgZGVmaW5lIFI2MDBfTlVNX1BTX1NUQUNLX0VOVFJJRVMoeCkgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfTlVNX1ZTX1NUQUNLX0VOVFJJRVMoeCkgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisjZGVmaW5lIFI2MDBfU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8yICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjMTQKKyMgICAgICAgZGVmaW5lIFI2MDBfTlVNX0dTX1NUQUNLX0VOVFJJRVMoeCkgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfTlVNX0VTX1NUQUNLX0VOVFJJRVMoeCkgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisjZGVmaW5lIFI2MDBfU1FfTVNfRklGT19TSVpFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjZjAKKyMgICAgICAgZGVmaW5lIFI2MDBfQ0FDSEVfRklGT19TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfRkVUQ0hfRklGT19ISVdBVEVSKHgpICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgOCkKKyMgICAgICAgZGVmaW5lIFI2MDBfRE9ORV9GSUZPX0hJV0FURVIoeCkgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisjICAgICAgIGRlZmluZSBSNjAwX0FMVV9VUERBVEVfRklGT19ISVdBVEVSKHgpICAgICAgICAgICAgICAgICAoKHgpIDw8IDI0KQorI2RlZmluZSBSNzAwX1NRX0RZTl9HUFJfU0laRV9TSU1EX0FCXzAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ZGIwCisjICAgICAgIGRlZmluZSBSNzAwX1NJTURBX1JJTkcwKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNzAwX1NJTURBX1JJTkcxKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDgpCisjICAgICAgIGRlZmluZSBSNzAwX1NJTURCX1JJTkcwKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorIyAgICAgICBkZWZpbmUgUjcwMF9TSU1EQl9SSU5HMSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyNCkKKyNkZWZpbmUgUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGRiNAorI2RlZmluZSBSNzAwX1NRX0RZTl9HUFJfU0laRV9TSU1EX0FCXzIgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ZGI4CisjZGVmaW5lIFI3MDBfU1FfRFlOX0dQUl9TSVpFX1NJTURfQUJfMyAgICAgICAgICAgICAgICAgICAgICAgICAweDhkYmMKKyNkZWZpbmUgUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl80ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGRjMAorI2RlZmluZSBSNzAwX1NRX0RZTl9HUFJfU0laRV9TSU1EX0FCXzUgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ZGM0CisjZGVmaW5lIFI3MDBfU1FfRFlOX0dQUl9TSVpFX1NJTURfQUJfNiAgICAgICAgICAgICAgICAgICAgICAgICAweDhkYzgKKyNkZWZpbmUgUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl83ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGRjYworCisjZGVmaW5lIFI2MDBfU1BJX1BTX0lOX0NPTlRST0xfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4NmNjCisjICAgICAgIGRlZmluZSBSNjAwX05VTV9JTlRFUlAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1BPU0lUSU9OX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorIyAgICAgICBkZWZpbmUgUjYwMF9QT1NJVElPTl9DRU5UUk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKKyMgICAgICAgZGVmaW5lIFI2MDBfUE9TSVRJT05fQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTApCisjICAgICAgIGRlZmluZSBSNjAwX1BBUkFNX0dFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE1KQorIyAgICAgICBkZWZpbmUgUjYwMF9QQVJBTV9HRU5fQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxOSkKKyMgICAgICAgZGVmaW5lIFI2MDBfQkFSWUNfU0FNUExFX0NOVEwoeCkgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjYpCisjICAgICAgIGRlZmluZSBSNjAwX1BFUlNQX0dSQURJRU5UX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOCkKKyMgICAgICAgZGVmaW5lIFI2MDBfTElORUFSX0dSQURJRU5UX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI5KQorIyAgICAgICBkZWZpbmUgUjYwMF9QT1NJVElPTl9TQU1QTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCisjICAgICAgIGRlZmluZSBSNjAwX0JBUllDX0FUX1NBTVBMRV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgUjYwMF9TUElfUFNfSU5fQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjg2ZDAKKyMgICAgICAgZGVmaW5lIFI2MDBfR0VOX0lOREVYX1BJWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX0dFTl9JTkRFWF9QSVhfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDEpCisjICAgICAgIGRlZmluZSBSNjAwX0ZST05UX0ZBQ0VfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorIyAgICAgICBkZWZpbmUgUjYwMF9GUk9OVF9GQUNFX0NIQU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA5KQorIyAgICAgICBkZWZpbmUgUjYwMF9GUk9OVF9GQUNFX0FMTF9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCisjICAgICAgIGRlZmluZSBSNjAwX0ZST05UX0ZBQ0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDEyKQorIyAgICAgICBkZWZpbmUgUjYwMF9GT0dfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNykKKyMgICAgICAgZGVmaW5lIFI2MDBfRklYRURfUFRfUE9TSVRJT05fRU5BICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI0KQorIyAgICAgICBkZWZpbmUgUjYwMF9GSVhFRF9QVF9QT1NJVElPTl9BRERSKHgpICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyNSkKKyMgICAgICAgZGVmaW5lIFI3MDBfUE9TSVRJT05fVUxDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMwKQorI2RlZmluZSBSNjAwX1NQSV9JTlBVVF9aICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODZkOAorCisjZGVmaW5lIFI2MDBfU1BJX0NPTkZJR19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfR1BSX1dSSVRFX1BSSU9SSVRZKHgpICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfRElTQUJMRV9JTlRFUlBfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIFI2MDBfU1BJX0NPTkZJR19DTlRMXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxM2MKKyMgICAgICAgZGVmaW5lIFI2MDBfVlRYX0RPTkVfREVMQVkoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfSU5URVJQX09ORV9QUklNX1BFUl9ST1cgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisKKyNkZWZpbmUgUjYwMF9HQl9USUxJTkdfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OThmMAorIyAgICAgICBkZWZpbmUgUjYwMF9QSVBFX1RJTElORyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxKQorIyAgICAgICBkZWZpbmUgUjYwMF9CQU5LX1RJTElORyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA0KQorIyAgICAgICBkZWZpbmUgUjYwMF9HUk9VUF9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA2KQorIyAgICAgICBkZWZpbmUgUjYwMF9ST1dfVElMSU5HKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA4KQorIyAgICAgICBkZWZpbmUgUjYwMF9CQU5LX1NXQVBTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxMSkKKyMgICAgICAgZGVmaW5lIFI2MDBfU0FNUExFX1NQTElUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTQpCisjICAgICAgIGRlZmluZSBSNjAwX0JBQ0tFTkRfTUFQKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorI2RlZmluZSBSNjAwX0RDUF9USUxJTkdfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2Y2EwCisjZGVmaW5lIFI2MDBfSERQX1RJTElOR19DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJmM2MKKworI2RlZmluZSBSNjAwX0NDX1JCX0JBQ0tFTkRfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OGY0CisjZGVmaW5lIFI3MDBfQ0NfU1lTX1JCX0JBQ0tFTkRfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAweDNmODgKKyMgICAgICAgZGVmaW5lIFI2MDBfQkFDS0VORF9ESVNBQkxFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisKKyNkZWZpbmUgUjYwMF9DQ19HQ19TSEFERVJfUElQRV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODk1MAorI2RlZmluZSBSNjAwX0dDX1VTRVJfU0hBREVSX1BJUEVfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgMHg4OTU0CisjICAgICAgIGRlZmluZSBSNjAwX0lOQUNUSVZFX1FEX1BJUEVTKHgpICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDgpCisjICAgICAgIGRlZmluZSBSNjAwX0lOQUNUSVZFX1FEX1BJUEVTX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhmZiA8PCA4KQorIyAgICAgICBkZWZpbmUgUjYwMF9JTkFDVElWRV9TSU1EUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyMgICAgICAgZGVmaW5lIFI2MDBfSU5BQ1RJVkVfU0lNRFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweGZmIDw8IDE2KQorCisjZGVmaW5lIFI3MDBfQ0dUU19TWVNfVENDX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmOTAKKyNkZWZpbmUgUjcwMF9DR1RTX1VTRVJfU1lTX1RDQ19ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2Y5NAorI2RlZmluZSBSNzAwX0NHVFNfVENDX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQ4CisjZGVmaW5lIFI3MDBfQ0dUU19VU0VSX1RDQ19ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxNGMKKwogLyogQ29uc3RhbnRzICovCiAjZGVmaW5lIFJBREVPTl9NQVhfVVNFQ19USU1FT1VUCQkxMDAwMDAJLyogMTAwIG1zICovCiAKQEAgLTExOTAsNiArMTczNCwxMSBAQAogI2RlZmluZSBSQURFT05fTEFTVF9TV0lfUkVHCQlSQURFT05fU0NSQVRDSF9SRUczCiAjZGVmaW5lIFJBREVPTl9MQVNUX0RJU1BBVENICQkxCiAKKyNkZWZpbmUgUjYwMF9MQVNUX0ZSQU1FX1JFRwkJUjYwMF9TQ1JBVENIX1JFRzAKKyNkZWZpbmUgUjYwMF9MQVNUX0RJU1BBVENIX1JFRwkgICAgICAgIFI2MDBfU0NSQVRDSF9SRUcxCisjZGVmaW5lIFI2MDBfTEFTVF9DTEVBUl9SRUcJCVI2MDBfU0NSQVRDSF9SRUcyCisjZGVmaW5lIFI2MDBfTEFTVF9TV0lfUkVHCQlSNjAwX1NDUkFUQ0hfUkVHMworCiAjZGVmaW5lIFJBREVPTl9NQVhfVkJfQUdFCQkweDdmZmZmZmZmCiAjZGVmaW5lIFJBREVPTl9NQVhfVkJfVkVSVFMJCSgweGZmZmYpCiAKQEAgLTExOTgsNyArMTc0NywxNSBAQAogI2RlZmluZSBSQURFT05fUENJR0FSVF9UQUJMRV9TSVpFICAgICAgKDMyKjEwMjQpCiAKICNkZWZpbmUgUkFERU9OX1JFQUQocmVnKQlEUk1fUkVBRDMyKCAgZGV2X3ByaXYtPm1taW8sIChyZWcpICkKLSNkZWZpbmUgUkFERU9OX1dSSVRFKHJlZyx2YWwpCURSTV9XUklURTMyKCBkZXZfcHJpdi0+bW1pbywgKHJlZyksICh2YWwpICkKKyNkZWZpbmUgUkFERU9OX1dSSVRFKHJlZywgdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHJlZyA8IDB4MTAwMDApIHsJCQkJICAgICAgICAgICAgICAgIFwKKwkJRFJNX1dSSVRFMzIoZGV2X3ByaXYtPm1taW8sIChyZWcpLCAodmFsKSk7CQlcCisJfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJRFJNX1dSSVRFMzIoZGV2X3ByaXYtPm1taW8sIFJBREVPTl9NTV9JTkRFWCwgKHJlZykpOwlcCisJCURSTV9XUklURTMyKGRldl9wcml2LT5tbWlvLCBSQURFT05fTU1fREFUQSwgKHZhbCkpOwlcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCiAjZGVmaW5lIFJBREVPTl9SRUFEOChyZWcpCURSTV9SRUFEOCggIGRldl9wcml2LT5tbWlvLCAocmVnKSApCiAjZGVmaW5lIFJBREVPTl9XUklURTgocmVnLHZhbCkJRFJNX1dSSVRFOCggZGV2X3ByaXYtPm1taW8sIChyZWcpLCAodmFsKSApCiAKQEAgLTEyMzgsMTEgKzE3OTUsMTkgQEAKIAlSQURFT05fV1JJVEUoUlM2OTBfTUNfSU5ERVgsIFJTNjkwX01DX0lOREVYX1dSX0FDSyk7CVwKIH0gd2hpbGUgKDApCiAKKyNkZWZpbmUgUlM2MDBfV1JJVEVfTUNJTkQoYWRkciwgdmFsKQkJCQlcCitkbyB7CQkJCQkJCSAgICAgICAgXAorCVJBREVPTl9XUklURShSUzYwMF9NQ19JTkRFWCwgUlM2MDBfTUNfSU5EX1dSX0VOIHwgUlM2MDBfTUNfSU5EX0NJVEZfQVJCMCB8ICgoYWRkcikgJiBSUzYwMF9NQ19BRERSX01BU0spKTsgXAorCVJBREVPTl9XUklURShSUzYwMF9NQ19EQVRBLCB2YWwpOyAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKwogI2RlZmluZSBJR1BfV1JJVEVfTUNJTkQoYWRkciwgdmFsKQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwgICBcCiAJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSkgICAgICBcCiAJCVJTNjkwX1dSSVRFX01DSU5EKGFkZHIsIHZhbCk7CQkJCVwKKwllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjAwKSAgXAorCQlSUzYwMF9XUklURV9NQ0lORChhZGRyLCB2YWwpOwkJCQlcCiAJZWxzZQkJCQkJCQkJXAogCQlSUzQ4MF9XUklURV9NQ0lORChhZGRyLCB2YWwpOwkJCQlcCiB9IHdoaWxlICgwKQpAQCAtMTM0Niw3ICsxOTExLDExIEBACiAJc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZmlsZV9wcml2LT5tYXN0ZXItPmRyaXZlcl9wcml2OwlcCiAJZHJtX3JhZGVvbl9zYXJlYV90ICpzYXJlYV9wcml2ID0gbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXY7CVwKIAlpZiAoIHNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPj0gUkFERU9OX01BWF9WQl9BR0UgKSB7CQlcCi0JCWludCBfX3JldCA9IHJhZGVvbl9kb19jcF9pZGxlKCBkZXZfcHJpdiApOwkJXAorCQlpbnQgX19yZXQ7CQkJCQkJXAorCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKSBcCisJCQlfX3JldCA9IHI2MDBfZG9fY3BfaWRsZShkZXZfcHJpdik7CQlcCisJCWVsc2UJCQkJCQkJXAorCQkJX19yZXQgPSByYWRlb25fZG9fY3BfaWRsZShkZXZfcHJpdik7CQlcCiAJCWlmICggX19yZXQgKSByZXR1cm4gX19yZXQ7CQkJCVwKIAkJc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IDA7CQkJCVwKIAkJcmFkZW9uX2ZyZWVsaXN0X3Jlc2V0KCBkZXYgKTsJCQkJXApAQCAtMTM2OCwyMSArMTkzNyw0MCBAQAogCU9VVF9SSU5HKCBhZ2UgKTsJCQkJCQlcCiB9IHdoaWxlICgwKQogCisjZGVmaW5lIFI2MDBfRElTUEFUQ0hfQUdFKGFnZSkgZG8gewkJCQkJXAorCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9TRVRfQ09ORklHX1JFRywgMSkpOwkJXAorCU9VVF9SSU5HKChSNjAwX0xBU1RfRElTUEFUQ0hfUkVHIC0gUjYwMF9TRVRfQ09ORklHX1JFR19PRkZTRVQpID4+IDIpOyAgXAorCU9VVF9SSU5HKGFnZSk7CQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgUjYwMF9GUkFNRV9BR0UoYWdlKSBkbyB7CQkJCQlcCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05GSUdfUkVHLCAxKSk7CQlcCisJT1VUX1JJTkcoKFI2MDBfTEFTVF9GUkFNRV9SRUcgLSBSNjAwX1NFVF9DT05GSUdfUkVHX09GRlNFVCkgPj4gMik7ICBcCisJT1VUX1JJTkcoYWdlKTsJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBSNjAwX0NMRUFSX0FHRShhZ2UpIGRvIHsJCQkJCVwKKwlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfU0VUX0NPTkZJR19SRUcsIDEpKTsJCVwKKwlPVVRfUklORygoUjYwMF9MQVNUX0NMRUFSX1JFRyAtIFI2MDBfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSA+PiAyKTsgIFwKKwlPVVRfUklORyhhZ2UpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBSaW5nIGNvbnRyb2wKICAqLwogCiAjZGVmaW5lIFJBREVPTl9WRVJCT1NFCTAKIAotI2RlZmluZSBSSU5HX0xPQ0FMUwlpbnQgd3JpdGUsIF9ucjsgdW5zaWduZWQgaW50IG1hc2s7IHUzMiAqcmluZzsKKyNkZWZpbmUgUklOR19MT0NBTFMJaW50IHdyaXRlLCBfbnIsIF9hbGlnbl9ucjsgdW5zaWduZWQgaW50IG1hc2s7IHUzMiAqcmluZzsKIAogI2RlZmluZSBCRUdJTl9SSU5HKCBuICkgZG8gewkJCQkJCVwKIAlpZiAoIFJBREVPTl9WRVJCT1NFICkgewkJCQkJCVwKIAkJRFJNX0lORk8oICJCRUdJTl9SSU5HKCAlZCApXG4iLCAobikpOwkJCVwKIAl9CQkJCQkJCQlcCi0JaWYgKCBkZXZfcHJpdi0+cmluZy5zcGFjZSA8PSAobikgKiBzaXplb2YodTMyKSApIHsJCVwKKwlfYWxpZ25fbnIgPSAobiArIDB4ZikgJiB+MHhmOwkJCQkJXAorCWlmIChkZXZfcHJpdi0+cmluZy5zcGFjZSA8PSAoX2FsaWduX25yICogc2l6ZW9mKHUzMikpKSB7CVwKICAgICAgICAgICAgICAgICBDT01NSVRfUklORygpOwkJCQkJCVwKLQkJcmFkZW9uX3dhaXRfcmluZyggZGV2X3ByaXYsIChuKSAqIHNpemVvZih1MzIpICk7CVwKKwkJcmFkZW9uX3dhaXRfcmluZyggZGV2X3ByaXYsIF9hbGlnbl9uciAqIHNpemVvZih1MzIpKTsJXAogCX0JCQkJCQkJCVwKIAlfbnIgPSBuOyBkZXZfcHJpdi0+cmluZy5zcGFjZSAtPSAobikgKiBzaXplb2YodTMyKTsJCVwKIAlyaW5nID0gZGV2X3ByaXYtPnJpbmcuc3RhcnQ7CQkJCQlcCkBAIC0xMzk5LDE5ICsxOTg3LDE2IEBACiAJCURSTV9FUlJPUigJCQkJCQlcCiAJCQkiQURWQU5DRV9SSU5HKCk6IG1pc21hdGNoOiBucjogJXggd3JpdGU6ICV4IGxpbmU6ICVkXG4iLAlcCiAJCQkoKGRldl9wcml2LT5yaW5nLnRhaWwgKyBfbnIpICYgbWFzayksCQlcCi0JCQl3cml0ZSwgX19MSU5FX18pOwkJCQkJCVwKKwkJCXdyaXRlLCBfX0xJTkVfXyk7CQkJCVwKIAl9IGVsc2UJCQkJCQkJCVwKIAkJZGV2X3ByaXYtPnJpbmcudGFpbCA9IHdyaXRlOwkJCQlcCiB9IHdoaWxlICgwKQogCitleHRlcm4gdm9pZCByYWRlb25fY29tbWl0X3JpbmcoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KTsKKwogI2RlZmluZSBDT01NSVRfUklORygpIGRvIHsJCQkJCQlcCi0JLyogRmx1c2ggd3JpdGVzIHRvIHJpbmcgKi8JCQkJCVwKLQlEUk1fTUVNT1JZQkFSUklFUigpOwkJCQkJCVwKLQlHRVRfUklOR19IRUFEKCBkZXZfcHJpdiApOwkJCQkJXAotCVJBREVPTl9XUklURSggUkFERU9OX0NQX1JCX1dQVFIsIGRldl9wcml2LT5yaW5nLnRhaWwgKTsJCVwKLQkvKiByZWFkIGZyb20gUENJIGJ1cyB0byBlbnN1cmUgY29ycmVjdCBwb3N0aW5nICovCQlcCi0JUkFERU9OX1JFQUQoIFJBREVPTl9DUF9SQl9SUFRSICk7CQkJCVwKLX0gd2hpbGUgKDApCisJCXJhZGVvbl9jb21taXRfcmluZyhkZXZfcHJpdik7CQkJCVwKKwl9IHdoaWxlKDApCiAKICNkZWZpbmUgT1VUX1JJTkcoIHggKSBkbyB7CQkJCQkJXAogCWlmICggUkFERU9OX1ZFUkJPU0UgKSB7CQkJCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnEuYwppbmRleCA4Mjg5ZTE2Li45ODM2YzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnEuYwpAQCAtNjUsNyArNjUsNyBAQAogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkgeworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjAwKSB7CiAJCXN3aXRjaCAoY3J0YykgewogCQljYXNlIDA6CiAJCQlyNTAwX3ZibF9pcnFfc2V0X3N0YXRlKGRldiwgUjUwMF9EMU1PREVfSU5UX01BU0ssIDEpOwpAQCAtMTAwLDcgKzEwMCw3IEBACiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjkwKSB7CisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2MDApIHsKIAkJc3dpdGNoIChjcnRjKSB7CiAJCWNhc2UgMDoKIAkJCXI1MDBfdmJsX2lycV9zZXRfc3RhdGUoZGV2LCBSNTAwX0QxTU9ERV9JTlRfTUFTSywgMCk7CkBAIC0xMzUsNyArMTM1LDcgQEAKIAl1MzIgaXJxX21hc2sgPSBSQURFT05fU1dfSU5UX1RFU1Q7CiAKIAkqcjUwMF9kaXNwX2ludCA9IDA7Ci0JaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApIHsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzYwMCkgewogCQkvKiB2YmwgaW50ZXJydXB0cyBpbiBhIGRpZmZlcmVudCBwbGFjZSAqLwogCiAJCWlmIChpcnFzICYgUjUwMF9ESVNQTEFZX0lOVF9TVEFUVVMpIHsKQEAgLTIwMiw3ICsyMDIsNyBAQAogCQlEUk1fV0FLRVVQKCZkZXZfcHJpdi0+c3dpX3F1ZXVlKTsKIAogCS8qIFZCTEFOSyBpbnRlcnJ1cHQgKi8KLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkgeworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjAwKSB7CiAJCWlmIChyNTAwX2Rpc3BfaW50ICYgUjUwMF9EMV9WQkxBTktfSU5URVJSVVBUKQogCQkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKTsKIAkJaWYgKHI1MDBfZGlzcF9pbnQgJiBSNTAwX0QyX1ZCTEFOS19JTlRFUlJVUFQpCkBAIC0yNjUsNyArMjY1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApIHsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzYwMCkgewogCQlpZiAoY3J0YyA9PSAwKQogCQkJcmV0dXJuIFJBREVPTl9SRUFEKFI1MDBfRDFDUlRDX0ZSQU1FX0NPVU5UKTsKIAkJZWxzZQpAQCAtMzI3LDcgKzMyNyw3IEBACiAJdTMyIGR1bW15OwogCiAJLyogRGlzYWJsZSAqYWxsKiBpbnRlcnJ1cHRzICovCi0JaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2MDApCiAJCVJBREVPTl9XUklURShSNTAwX0R4TU9ERV9JTlRfTUFTSywgMCk7CiAJUkFERU9OX1dSSVRFKFJBREVPTl9HRU5fSU5UX0NOVEwsIDApOwogCkBAIC0zNTcsNyArMzU3LDcgQEAKIAlpZiAoIWRldl9wcml2KQogCQlyZXR1cm47CiAKLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzYwMCkKIAkJUkFERU9OX1dSSVRFKFI1MDBfRHhNT0RFX0lOVF9NQVNLLCAwKTsKIAkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KIAlSQURFT05fV1JJVEUoUkFERU9OX0dFTl9JTlRfQ05UTCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYwppbmRleCBlZjk0MGEwLi5mYTcyOGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3N0YXRlLmMKQEAgLTE1NTYsOSArMTU1NiwxNSBAQAogCWJ1Zl9wcml2LT5hZ2UgPSArK21hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoOwogCiAJLyogRW1pdCB0aGUgdmVydGV4IGJ1ZmZlciBhZ2UgKi8KLQlCRUdJTl9SSU5HKDIpOwotCVJBREVPTl9ESVNQQVRDSF9BR0UoYnVmX3ByaXYtPmFnZSk7Ci0JQURWQU5DRV9SSU5HKCk7CisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkgeworCQlCRUdJTl9SSU5HKDMpOworCQlSNjAwX0RJU1BBVENIX0FHRShidWZfcHJpdi0+YWdlKTsKKwkJQURWQU5DRV9SSU5HKCk7CisJfSBlbHNlIHsKKwkJQkVHSU5fUklORygyKTsKKwkJUkFERU9OX0RJU1BBVENIX0FHRShidWZfcHJpdi0+YWdlKTsKKwkJQURWQU5DRV9SSU5HKCk7CisJfQogCiAJYnVmLT5wZW5kaW5nID0gMTsKIAlidWYtPnVzZWQgPSAwOwpAQCAtMTk4MCw3ICsxOTg2LDcgQEAKIAogCS8qIGZpbmQgYSB2aXJ0dWFsIHN1cmZhY2UgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMiAqIFJBREVPTl9NQVhfU1VSRkFDRVM7IGkrKykKLQkJaWYgKGRldl9wcml2LT52aXJ0X3N1cmZhY2VzW2ldLmZpbGVfcHJpdiA9PSAwKQorCQlpZiAoZGV2X3ByaXYtPnZpcnRfc3VyZmFjZXNbaV0uZmlsZV9wcml2ID09IE5VTEwpCiAJCQlicmVhazsKIAlpZiAoaSA9PSAyICogUkFERU9OX01BWF9TVVJGQUNFUykgewogCQlyZXR1cm4gLTE7CkBAIC0yNDczLDI0ICsyNDc5LDI1IEBACiAKIAlidWYtPnVzZWQgPSBpbmRpcmVjdC0+ZW5kOwogCi0JLyogV2FpdCBmb3IgdGhlIDNEIHN0cmVhbSB0byBpZGxlIGJlZm9yZSB0aGUgaW5kaXJlY3QgYnVmZmVyCi0JICogY29udGFpbmluZyAyRCBhY2NlbGVyYXRpb24gY29tbWFuZHMgaXMgcHJvY2Vzc2VkLgotCSAqLwotCUJFR0lOX1JJTkcoMik7Ci0KLQlSQURFT05fV0FJVF9VTlRJTF8zRF9JRExFKCk7Ci0KLQlBRFZBTkNFX1JJTkcoKTsKLQogCS8qIERpc3BhdGNoIHRoZSBpbmRpcmVjdCBidWZmZXIgZnVsbCBvZiBjb21tYW5kcyBmcm9tIHRoZQogCSAqIFggc2VydmVyLiAgVGhpcyBpcyBpbnNlY3VyZSBhbmQgaXMgdGh1cyBvbmx5IGF2YWlsYWJsZSB0bwogCSAqIHByaXZpbGVnZWQgY2xpZW50cy4KIAkgKi8KLQlyYWRlb25fY3BfZGlzcGF0Y2hfaW5kaXJlY3QoZGV2LCBidWYsIGluZGlyZWN0LT5zdGFydCwgaW5kaXJlY3QtPmVuZCk7Ci0JaWYgKGluZGlyZWN0LT5kaXNjYXJkKSB7Ci0JCXJhZGVvbl9jcF9kaXNjYXJkX2J1ZmZlcihkZXYsIGZpbGVfcHJpdi0+bWFzdGVyLCBidWYpOworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApCisJCXI2MDBfY3BfZGlzcGF0Y2hfaW5kaXJlY3QoZGV2LCBidWYsIGluZGlyZWN0LT5zdGFydCwgaW5kaXJlY3QtPmVuZCk7CisJZWxzZSB7CisJCS8qIFdhaXQgZm9yIHRoZSAzRCBzdHJlYW0gdG8gaWRsZSBiZWZvcmUgdGhlIGluZGlyZWN0IGJ1ZmZlcgorCQkgKiBjb250YWluaW5nIDJEIGFjY2VsZXJhdGlvbiBjb21tYW5kcyBpcyBwcm9jZXNzZWQuCisJCSAqLworCQlCRUdJTl9SSU5HKDIpOworCQlSQURFT05fV0FJVF9VTlRJTF8zRF9JRExFKCk7CisJCUFEVkFOQ0VfUklORygpOworCQlyYWRlb25fY3BfZGlzcGF0Y2hfaW5kaXJlY3QoZGV2LCBidWYsIGluZGlyZWN0LT5zdGFydCwgaW5kaXJlY3QtPmVuZCk7CiAJfQogCisJaWYgKGluZGlyZWN0LT5kaXNjYXJkKQorCQlyYWRlb25fY3BfZGlzY2FyZF9idWZmZXIoZGV2LCBmaWxlX3ByaXYtPm1hc3RlciwgYnVmKTsKKwogCUNPTU1JVF9SSU5HKCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMDEwLDE0ICszMDE3LDE0IEBACiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BBUkFNX0xBU1RfRlJBTUU6CiAJCWRldl9wcml2LT5zdGF0cy5sYXN0X2ZyYW1lX3JlYWRzKys7Ci0JCXZhbHVlID0gR0VUX1NDUkFUQ0goMCk7CisJCXZhbHVlID0gR0VUX1NDUkFUQ0goZGV2X3ByaXYsIDApOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QQVJBTV9MQVNUX0RJU1BBVENIOgotCQl2YWx1ZSA9IEdFVF9TQ1JBVENIKDEpOworCQl2YWx1ZSA9IEdFVF9TQ1JBVENIKGRldl9wcml2LCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUEFSQU1fTEFTVF9DTEVBUjoKIAkJZGV2X3ByaXYtPnN0YXRzLmxhc3RfY2xlYXJfcmVhZHMrKzsKLQkJdmFsdWUgPSBHRVRfU0NSQVRDSCgyKTsKKwkJdmFsdWUgPSBHRVRfU0NSQVRDSChkZXZfcHJpdiwgMik7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BBUkFNX0lSUV9OUjoKIAkJdmFsdWUgPSBkcm1fZGV2X3RvX2lycShkZXYpOwpAQCAtMzA1Miw3ICszMDU5LDEwIEBACiAJY2FzZSBSQURFT05fUEFSQU1fU0NSQVRDSF9PRkZTRVQ6CiAJCWlmICghZGV2X3ByaXYtPndyaXRlYmFja193b3JrcykKIAkJCXJldHVybiAtRUlOVkFMOwotCQl2YWx1ZSA9IFJBREVPTl9TQ1JBVENIX1JFR19PRkZTRVQ7CisJCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApCisJCQl2YWx1ZSA9IFI2MDBfU0NSQVRDSF9SRUdfT0ZGU0VUOworCQllbHNlCisJCQl2YWx1ZSA9IFJBREVPTl9TQ1JBVENIX1JFR19PRkZTRVQ7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BBUkFNX0NBUkRfVFlQRToKIAkJaWYgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQpAQCAtMzE1NSw2ICszMTY1LDcgQEAKIAogdm9pZCByYWRlb25fZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogeworCXJhZGVvbl9zdXJmYWNlc19yZWxlYXNlKFBDSUdBUlRfRklMRV9QUklWLCBkZXYtPmRldl9wcml2YXRlKTsKIAlyYWRlb25fZG9fcmVsZWFzZShkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2F2YWdlL3NhdmFnZV9iY2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2JjaS5jCmluZGV4IGQ0NjViMmYuLjQ1NmNkMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2JjaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2JjaS5jCkBAIC01OTksOCArNTk5LDggQEAKIAkJCSAgICBkcm1fbXRycl9hZGQoZGV2X3ByaXYtPm10cnJbMl0uYmFzZSwKIAkJCQkJIGRldl9wcml2LT5tdHJyWzJdLnNpemUsIERSTV9NVFJSX1dDKTsKIAkJfSBlbHNlIHsKLQkJCURSTV9FUlJPUigic3RyYW5nZSBwY2lfcmVzb3VyY2VfbGVuICUwOGx4XG4iLAotCQkJCSAgZHJtX2dldF9yZXNvdXJjZV9sZW4oZGV2LCAwKSk7CisJCQlEUk1fRVJST1IoInN0cmFuZ2UgcGNpX3Jlc291cmNlX2xlbiAlMDhsbHhcbiIsCisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWRybV9nZXRfcmVzb3VyY2VfbGVuKGRldiwgMCkpOwogCQl9CiAJfSBlbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSBTM19TVVBFUlNBVkFHRSAmJgogCQkgICBkZXZfcHJpdi0+Y2hpcHNldCAhPSBTM19TQVZBR0UyMDAwKSB7CkBAIC02MjAsOCArNjIwLDggQEAKIAkJCSAgICBkcm1fbXRycl9hZGQoZGV2X3ByaXYtPm10cnJbMF0uYmFzZSwKIAkJCQkJIGRldl9wcml2LT5tdHJyWzBdLnNpemUsIERSTV9NVFJSX1dDKTsKIAkJfSBlbHNlIHsKLQkJCURSTV9FUlJPUigic3RyYW5nZSBwY2lfcmVzb3VyY2VfbGVuICUwOGx4XG4iLAotCQkJCSAgZHJtX2dldF9yZXNvdXJjZV9sZW4oZGV2LCAxKSk7CisJCQlEUk1fRVJST1IoInN0cmFuZ2UgcGNpX3Jlc291cmNlX2xlbiAlMDhsbHhcbiIsCisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWRybV9nZXRfcmVzb3VyY2VfbGVuKGRldiwgMSkpOwogCQl9CiAJfSBlbHNlIHsKIAkJbW1pb19iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChkZXYsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYwppbmRleCAwOTkzYjQ0Li5iYzJmNTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYwpAQCAtMjgsMTEgKzI4LDYgQEAKIAogI2luY2x1ZGUgImRybV9wY2lpZHMuaCIKIAotc3RhdGljIGludCBkcmlfbGlicmFyeV9uYW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJ1bmljaHJvbWUiKTsKLX0KLQogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0gewogCXZpYWRydl9QQ0lfSURTCiB9OwpAQCAtNTIsNyArNDcsNiBAQAogCS5pcnFfdW5pbnN0YWxsID0gdmlhX2RyaXZlcl9pcnFfdW5pbnN0YWxsLAogCS5pcnFfaGFuZGxlciA9IHZpYV9kcml2ZXJfaXJxX2hhbmRsZXIsCiAJLmRtYV9xdWllc2NlbnQgPSB2aWFfZHJpdmVyX2RtYV9xdWllc2NlbnQsCi0JLmRyaV9saWJyYXJ5X25hbWUgPSBkcmlfbGlicmFyeV9uYW1lLAogCS5yZWNsYWltX2J1ZmZlcnMgPSBkcm1fY29yZV9yZWNsYWltX2J1ZmZlcnMsCiAJLnJlY2xhaW1fYnVmZmVyc19sb2NrZWQgPSBOVUxMLAogCS5yZWNsYWltX2J1ZmZlcnNfaWRsZWxvY2tlZCA9IHZpYV9yZWNsYWltX2J1ZmZlcnNfbG9ja2VkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCmluZGV4IGI0ZWVhMDIuLjUxZmY5YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZworKysgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKQEAgLTM0MywxMiArMzQzLDEzIEBACiAJICB3aWxsIGJlIGNhbGxlZCBmc2Nwb3MuCiAKIGNvbmZpZyBTRU5TT1JTX0ZTQ0hNRAotCXRyaXN0YXRlICJGU0MgUG9zZWlkb24sIFNjeWxsYSwgSGVybWVzLCBIZWltZGFsbCBhbmQgSGVyYWNsZXMiCisJdHJpc3RhdGUgIkZ1aml0c3UgU2llbWVucyBDb21wdXRlcnMgc2Vuc29yIGNoaXBzIgogCWRlcGVuZHMgb24gWDg2ICYmIEkyQwogCWhlbHAKLQkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB2YXJpb3VzIEZ1aml0c3UgU2llbWVucwotCSAgQ29tcHV0ZXJzIHNlbnNvciBjaGlwcywgaW5jbHVkaW5nIHN1cHBvcnQgZm9yIHRoZSBpbnRlZ3JhdGVkCi0JICB3YXRjaGRvZy4KKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgZm9sbG93aW5nIEZ1aml0c3UKKwkgIFNpZW1lbnMgQ29tcHV0ZXJzIChGU0MpIHNlbnNvciBjaGlwczogUG9zZWlkb24sIFNjeWxsYSwgSGVybWVzLAorCSAgSGVpbWRhbGwsIEhlcmFjbGVzLCBIYWRlcyBhbmQgU3lsZXVzIGluY2x1ZGluZyBzdXBwb3J0IGZvciB0aGUKKwkgIGludGVncmF0ZWQgd2F0Y2hkb2cuCiAKIAkgIFRoaXMgaXMgYSBtZXJnZWQgZHJpdmVyIGZvciBGU0Mgc2Vuc29yIGNoaXBzIHJlcGxhY2luZyB0aGUgZnNjcG9zLAogCSAgZnNjc2N5IGFuZCBmc2NoZXIgZHJpdmVycyBhbmQgYWRkaW5nIHN1cHBvcnQgZm9yIHNldmVyYWwgb3RoZXIgRlNDCkBAIC02MzUsNiArNjM2LDIwIEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBwYzg3NDI3LgogCitjb25maWcgU0VOU09SU19QQ0Y4NTkxCisJdHJpc3RhdGUgIlBoaWxpcHMgUENGODU5MSBBREMvREFDIgorCWRlcGVuZHMgb24gSTJDCisJZGVmYXVsdCBuCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIFBoaWxpcHMgUENGODU5MSA0LWNoYW5uZWwKKwkgIEFEQywgMS1jaGFubmVsIERBQyBjaGlwcy4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgcGNmODU5MS4KKworCSAgVGhlc2UgZGV2aWNlcyBhcmUgaGFyZCB0byBkZXRlY3QgYW5kIHJhcmVseSBmb3VuZCBvbiBtYWluc3RyZWFtCisJICBoYXJkd2FyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBTRU5TT1JTX1NJUzU1OTUKIAl0cmlzdGF0ZSAiU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgQ29ycC4gU2lTNTU5NSIKIAlkZXBlbmRzIG9uIFBDSQpAQCAtODI3LDcgKzg0Miw3IEBACiAJICB3aWxsIGJlIGNhbGxlZCB3ODM2MjdoZi4KIAogY29uZmlnIFNFTlNPUlNfVzgzNjI3RUhGCi0JdHJpc3RhdGUgIldpbmJvbmQgVzgzNjI3RUhGL0RIRyIKKwl0cmlzdGF0ZSAiV2luYm9uZCBXODM2MjdFSEYvRUhHL0RIRywgVzgzNjY3SEciCiAJc2VsZWN0IEhXTU9OX1ZJRAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgaGFyZHdhcmUKQEAgLTgzOCw2ICs4NTMsOCBAQAogCSAgY2hpcCBzdWl0ZWQgZm9yIHNwZWNpZmljIEludGVsIHByb2Nlc3NvcnMgdGhhdCB1c2UgUEVDSSBzdWNoIGFzCiAJICB0aGUgQ29yZSAyIER1by4KIAorCSAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgVzgzNjY3SEcgY2hpcC4KKwogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgdzgzNjI3ZWhmLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL01ha2VmaWxlIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQppbmRleCAyZTgwZjM3Li5lMzMyZDYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKQEAgLTcwLDYgKzcwLDcgQEAKIG9iai0kKENPTkZJR19TRU5TT1JTX01BWDY2NTApCSs9IG1heDY2NTAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfUEM4NzM2MCkJKz0gcGM4NzM2MC5vCiBvYmotJChDT05GSUdfU0VOU09SU19QQzg3NDI3KQkrPSBwYzg3NDI3Lm8KK29iai0kKENPTkZJR19TRU5TT1JTX1BDRjg1OTEpCSs9IHBjZjg1OTEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfU0lTNTU5NSkJKz0gc2lzNTU5NS5vCiBvYmotJChDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3KSs9IHNtc2M0N2IzOTcubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEpCSs9IHNtc2M0N20xLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZHMxNjIxLmMgYi9kcml2ZXJzL2h3bW9uL2RzMTYyMS5jCmluZGV4IDc0MTUzODEuLjUzZjg4ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZHMxNjIxLmMKKysrIGIvZHJpdmVycy9od21vbi9kczE2MjEuYwpAQCAtODEsNzEgKzgxLDg0IEBACiAJdTggY29uZjsJCQkvKiBSZWdpc3RlciBlbmNvZGluZywgY29tYmluZWQgKi8KIH07CiAKLXN0YXRpYyBpbnQgZHMxNjIxX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCBkczE2MjFfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAotCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgdm9pZCBkczE2MjFfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci1zdGF0aWMgaW50IGRzMTYyMV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci1zdGF0aWMgc3RydWN0IGRzMTYyMV9kYXRhICpkczE2MjFfdXBkYXRlX2NsaWVudChzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgZHMxNjIxX2lkW10gPSB7Ci0JeyAiZHMxNjIxIiwgZHMxNjIxIH0sCi0JeyAiZHMxNjI1IiwgZHMxNjIxIH0sCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGRzMTYyMV9pZCk7Ci0KLS8qIFRoaXMgaXMgdGhlIGRyaXZlciB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkczE2MjFfZHJpdmVyID0gewotCS5jbGFzcwkJPSBJMkNfQ0xBU1NfSFdNT04sCi0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAiZHMxNjIxIiwKLQl9LAotCS5wcm9iZQkJPSBkczE2MjFfcHJvYmUsCi0JLnJlbW92ZQkJPSBkczE2MjFfcmVtb3ZlLAotCS5pZF90YWJsZQk9IGRzMTYyMV9pZCwKLQkuZGV0ZWN0CQk9IGRzMTYyMV9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCi19OwotCi0vKiBBbGwgcmVnaXN0ZXJzIGFyZSB3b3JkLXNpemVkLCBleGNlcHQgZm9yIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgorLyogVGVtcGVyYXR1cmUgcmVnaXN0ZXJzIGFyZSB3b3JkLXNpemVkLgogICAgRFMxNjIxIHVzZXMgYSBoaWdoLWJ5dGUgZmlyc3QgY29udmVudGlvbiwgd2hpY2ggaXMgZXhhY3RseSBvcHBvc2l0ZSB0bwogICAgdGhlIFNNQnVzIHN0YW5kYXJkLiAqLwotc3RhdGljIGludCBkczE2MjFfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCitzdGF0aWMgaW50IGRzMTYyMV9yZWFkX3RlbXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQogewotCWlmIChyZWcgPT0gRFMxNjIxX1JFR19DT05GKQotCQlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKLQllbHNlCi0JCXJldHVybiBzd2FiMTYoaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwgcmVnKSk7CisJaW50IHJldDsKKworCXJldCA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIHJlZyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIHN3YWIxNihyZXQpOwogfQogCi1zdGF0aWMgaW50IGRzMTYyMV93cml0ZV92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHUxNiB2YWx1ZSkKK3N0YXRpYyBpbnQgZHMxNjIxX3dyaXRlX3RlbXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1MTYgdmFsdWUpCiB7Ci0JaWYgKHJlZyA9PSBEUzE2MjFfUkVHX0NPTkYpCi0JCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7Ci0JZWxzZQotCQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIHJlZywgc3dhYjE2KHZhbHVlKSk7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCByZWcsIHN3YWIxNih2YWx1ZSkpOwogfQogCiBzdGF0aWMgdm9pZCBkczE2MjFfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlpbnQgcmVnID0gZHMxNjIxX3JlYWRfdmFsdWUoY2xpZW50LCBEUzE2MjFfUkVHX0NPTkYpOworCXU4IGNvbmYsIG5ld19jb25mOworCisJbmV3X2NvbmYgPSBjb25mID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMxNjIxX1JFR19DT05GKTsKIAkvKiBzd2l0Y2ggdG8gY29udGludW91cyBjb252ZXJzaW9uIG1vZGUgKi8KLQlyZWcgJj0gfiBEUzE2MjFfUkVHX0NPTkZJR18xU0hPVDsKKwluZXdfY29uZiAmPSB+RFMxNjIxX1JFR19DT05GSUdfMVNIT1Q7CiAKIAkvKiBzZXR1cCBvdXRwdXQgcG9sYXJpdHkgKi8KIAlpZiAocG9sYXJpdHkgPT0gMCkKLQkJcmVnICY9IH5EUzE2MjFfUkVHX0NPTkZJR19QT0xBUklUWTsKKwkJbmV3X2NvbmYgJj0gfkRTMTYyMV9SRUdfQ09ORklHX1BPTEFSSVRZOwogCWVsc2UgaWYgKHBvbGFyaXR5ID09IDEpCi0JCXJlZyB8PSBEUzE2MjFfUkVHX0NPTkZJR19QT0xBUklUWTsKKwkJbmV3X2NvbmYgfD0gRFMxNjIxX1JFR19DT05GSUdfUE9MQVJJVFk7CiAJCi0JZHMxNjIxX3dyaXRlX3ZhbHVlKGNsaWVudCwgRFMxNjIxX1JFR19DT05GLCByZWcpOworCWlmIChjb25mICE9IG5ld19jb25mKQorCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgRFMxNjIxX1JFR19DT05GLCBuZXdfY29uZik7CiAJCiAJLyogc3RhcnQgY29udmVyc2lvbiAqLwogCWkyY19zbWJ1c193cml0ZV9ieXRlKGNsaWVudCwgRFMxNjIxX0NPTV9TVEFSVCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZHMxNjIxX2RhdGEgKmRzMTYyMV91cGRhdGVfY2xpZW50KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBkczE2MjFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXU4IG5ld19jb25mOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFogKyBIWiAvIDIpCisJICAgIHx8ICFkYXRhLT52YWxpZCkgeworCQlpbnQgaTsKKworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlN0YXJ0aW5nIGRzMTYyMSB1cGRhdGVcbiIpOworCisJCWRhdGEtPmNvbmYgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzE2MjFfUkVHX0NPTkYpOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEtPnRlbXApOyBpKyspCisJCQlkYXRhLT50ZW1wW2ldID0gZHMxNjIxX3JlYWRfdGVtcChjbGllbnQsCisJCQkJCQkJIERTMTYyMV9SRUdfVEVNUFtpXSk7CisKKwkJLyogcmVzZXQgYWxhcm1zIGlmIG5lY2Vzc2FyeSAqLworCQluZXdfY29uZiA9IGRhdGEtPmNvbmY7CisJCWlmIChkYXRhLT50ZW1wWzBdID4gZGF0YS0+dGVtcFsxXSkJLyogaW5wdXQgPiBtaW4gKi8KKwkJCW5ld19jb25mICY9IH5EUzE2MjFfQUxBUk1fVEVNUF9MT1c7CisJCWlmIChkYXRhLT50ZW1wWzBdIDwgZGF0YS0+dGVtcFsyXSkJLyogaW5wdXQgPCBtYXggKi8KKwkJCW5ld19jb25mICY9IH5EUzE2MjFfQUxBUk1fVEVNUF9ISUdIOworCQlpZiAoZGF0YS0+Y29uZiAhPSBuZXdfY29uZikKKwkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzE2MjFfUkVHX0NPTkYsCisJCQkJCQkgIG5ld19jb25mKTsKKworCQlkYXRhLT5sYXN0X3VwZGF0ZWQgPSBqaWZmaWVzOworCQlkYXRhLT52YWxpZCA9IDE7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gZGF0YTsKK30KKwogc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLAogCQkJIGNoYXIgKmJ1ZikKIHsKQEAgLTE2MCwxMyArMTczLDEzIEBACiB7CiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRhKTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBkczE2MjFfZGF0YSAqZGF0YSA9IGRzMTYyMV91cGRhdGVfY2xpZW50KGRldik7CisJc3RydWN0IGRzMTYyMV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdTE2IHZhbCA9IExNNzVfVEVNUF9UT19SRUcoc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKSk7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcFthdHRyLT5pbmRleF0gPSB2YWw7Ci0JZHMxNjIxX3dyaXRlX3ZhbHVlKGNsaWVudCwgRFMxNjIxX1JFR19URU1QW2F0dHItPmluZGV4XSwKLQkJCSAgIGRhdGEtPnRlbXBbYXR0ci0+aW5kZXhdKTsKKwlkczE2MjFfd3JpdGVfdGVtcChjbGllbnQsIERTMTYyMV9SRUdfVEVNUFthdHRyLT5pbmRleF0sCisJCQkgIGRhdGEtPnRlbXBbYXR0ci0+aW5kZXhdKTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0yMjgsMTMgKzI0MSwxNCBAQAogCQkvKiBUaGUgTlZCIGJpdCBzaG91bGQgYmUgbG93IGlmIG5vIEVFUFJPTSB3cml0ZSBoYXMgYmVlbiAKIAkJICAgcmVxdWVzdGVkIGR1cmluZyB0aGUgbGF0ZXN0IDEwbXMsIHdoaWNoIGlzIGhpZ2hseSAKIAkJICAgaW1wcm9iYWJsZSBpbiBvdXIgY2FzZS4gKi8KLQkJY29uZiA9IGRzMTYyMV9yZWFkX3ZhbHVlKGNsaWVudCwgRFMxNjIxX1JFR19DT05GKTsKLQkJaWYgKGNvbmYgJiBEUzE2MjFfUkVHX0NPTkZJR19OVkIpCisJCWNvbmYgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzE2MjFfUkVHX0NPTkYpOworCQlpZiAoY29uZiA8IDAgfHwgY29uZiAmIERTMTYyMV9SRUdfQ09ORklHX05WQikKIAkJCXJldHVybiAtRU5PREVWOwogCQkvKiBUaGUgNyBsb3dlc3QgYml0cyBvZiBhIHRlbXBlcmF0dXJlIHNob3VsZCBhbHdheXMgYmUgMC4gKi8KIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoRFMxNjIxX1JFR19URU1QKTsgaSsrKSB7Ci0JCQl0ZW1wID0gZHMxNjIxX3JlYWRfdmFsdWUoY2xpZW50LCBEUzE2MjFfUkVHX1RFTVBbaV0pOwotCQkJaWYgKHRlbXAgJiAweDAwN2YpCisJCQl0ZW1wID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwKKwkJCQkJCQlEUzE2MjFfUkVHX1RFTVBbaV0pOworCQkJaWYgKHRlbXAgPCAwIHx8ICh0ZW1wICYgMHg3ZjAwKSkKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KQEAgLTI5NCw0NSArMzA4LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBkczE2MjFfaWRbXSA9IHsKKwl7ICJkczE2MjEiLCBkczE2MjEgfSwKKwl7ICJkczE2MjUiLCBkczE2MjEgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgZHMxNjIxX2lkKTsKIAotc3RhdGljIHN0cnVjdCBkczE2MjFfZGF0YSAqZHMxNjIxX3VwZGF0ZV9jbGllbnQoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGRzMTYyMV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JdTggbmV3X2NvbmY7Ci0KLQltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0KLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiArIEhaIC8gMikKLQkgICAgfHwgIWRhdGEtPnZhbGlkKSB7Ci0JCWludCBpOwotCi0JCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiU3RhcnRpbmcgZHMxNjIxIHVwZGF0ZVxuIik7Ci0KLQkJZGF0YS0+Y29uZiA9IGRzMTYyMV9yZWFkX3ZhbHVlKGNsaWVudCwgRFMxNjIxX1JFR19DT05GKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhLT50ZW1wKTsgaSsrKQotCQkJZGF0YS0+dGVtcFtpXSA9IGRzMTYyMV9yZWFkX3ZhbHVlKGNsaWVudCwKLQkJCQkJCQkgIERTMTYyMV9SRUdfVEVNUFtpXSk7Ci0KLQkJLyogcmVzZXQgYWxhcm1zIGlmIG5lY2Vzc2FyeSAqLwotCQluZXdfY29uZiA9IGRhdGEtPmNvbmY7Ci0JCWlmIChkYXRhLT50ZW1wWzBdID4gZGF0YS0+dGVtcFsxXSkJLyogaW5wdXQgPiBtaW4gKi8KLQkJCW5ld19jb25mICY9IH5EUzE2MjFfQUxBUk1fVEVNUF9MT1c7Ci0JCWlmIChkYXRhLT50ZW1wWzBdIDwgZGF0YS0+dGVtcFsyXSkJLyogaW5wdXQgPCBtYXggKi8KLQkJCW5ld19jb25mICY9IH5EUzE2MjFfQUxBUk1fVEVNUF9ISUdIOwotCQlpZiAoZGF0YS0+Y29uZiAhPSBuZXdfY29uZikKLQkJCWRzMTYyMV93cml0ZV92YWx1ZShjbGllbnQsIERTMTYyMV9SRUdfQ09ORiwKLQkJCQkJICAgbmV3X2NvbmYpOwotCi0JCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7Ci0JCWRhdGEtPnZhbGlkID0gMTsKLQl9Ci0KLQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQotCXJldHVybiBkYXRhOwotfQorLyogVGhpcyBpcyB0aGUgZHJpdmVyIHRoYXQgd2lsbCBiZSBpbnNlcnRlZCAqLworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRzMTYyMV9kcml2ZXIgPSB7CisJLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJkczE2MjEiLAorCX0sCisJLnByb2JlCQk9IGRzMTYyMV9wcm9iZSwKKwkucmVtb3ZlCQk9IGRzMTYyMV9yZW1vdmUsCisJLmlkX3RhYmxlCT0gZHMxNjIxX2lkLAorCS5kZXRlY3QJCT0gZHMxNjIxX2RldGVjdCwKKwkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKK307CiAKIHN0YXRpYyBpbnQgX19pbml0IGRzMTYyMV9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jIGIvZHJpdmVycy9od21vbi9mc2NobWQuYwppbmRleCBkMDdmNGVmLi5lYTk1NWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMKQEAgLTEsNiArMSw2IEBACiAvKiBmc2NobWQuYwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNywyMDA4IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgLSAyMDA5IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xOSw3ICsxOSw3IEBACiAKIC8qCiAgKiAgTWVyZ2VkIEZ1aml0c3UgU2llbWVucyBod21vbiBkcml2ZXIsIHN1cHBvcnRpbmcgdGhlIFBvc2VpZG9uLCBIZXJtZXMsCi0gKiAgU2N5bGxhLCBIZXJhY2xlcyBhbmQgSGVpbWRhbGwgY2hpcHMKKyAqICBTY3lsbGEsIEhlcmFjbGVzLCBIZWltZGFsbCwgSGFkZXMgYW5kIFN5bGV1cyBjaGlwcwogICoKICAqICBCYXNlZCBvbiB0aGUgb3JpZ2luYWwgMi40IGZzY3NjeSwgMi42IGZzY3BvcywgMi42IGZzY2hlciBhbmQgMi42CiAgKiAgKGNhbmRpZGF0ZSkgZnNjaG1kIGRyaXZlcnM6CkBAIC01Niw3ICs1Niw3IEBACiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIKIAlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7Ci1JMkNfQ0xJRU5UX0lOU01PRF81KGZzY3BvcywgZnNjaGVyLCBmc2NzY3ksIGZzY2hyYywgZnNjaG1kKTsKK0kyQ19DTElFTlRfSU5TTU9EXzcoZnNjcG9zLCBmc2NoZXIsIGZzY3NjeSwgZnNjaHJjLCBmc2NobWQsIGZzY2hkcywgZnNjc3lsKTsKIAogLyoKICAqIFRoZSBGU0NITUQgcmVnaXN0ZXJzIGFuZCBvdGhlciBkZWZpbmVzCkBAIC03NSw5ICs3NSwxMiBAQAogI2RlZmluZSBGU0NITURfQ09OVFJPTF9BTEVSVF9MRUQJMHgwMQogCiAvKiB3YXRjaGRvZyAqLwotI2RlZmluZSBGU0NITURfUkVHX1dET0dfUFJFU0VUCQkweDI4Ci0jZGVmaW5lIEZTQ0hNRF9SRUdfV0RPR19TVEFURQkJMHgyMwotI2RlZmluZSBGU0NITURfUkVHX1dET0dfQ09OVFJPTAkJMHgyMQorc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfV0RPR19DT05UUk9MWzddID0KKwl7IDB4MjEsIDB4MjEsIDB4MjEsIDB4MjEsIDB4MjEsIDB4MjgsIDB4MjggfTsKK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX1dET0dfU1RBVEVbN10gPQorCXsgMHgyMywgMHgyMywgMHgyMywgMHgyMywgMHgyMywgMHgyOSwgMHgyOSB9Oworc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfV0RPR19QUkVTRVRbN10gPQorCXsgMHgyOCwgMHgyOCwgMHgyOCwgMHgyOCwgMHgyOCwgMHgyYSwgMHgyYSB9OwogCiAjZGVmaW5lIEZTQ0hNRF9XRE9HX0NPTlRST0xfVFJJR0dFUgkweDEwCiAjZGVmaW5lIEZTQ0hNRF9XRE9HX0NPTlRST0xfU1RBUlRFRAkweDEwIC8qIHRoZSBzYW1lIGFzIHRyaWdnZXIgKi8KQEAgLTg3LDcwICs5MCw5NSBAQAogI2RlZmluZSBGU0NITURfV0RPR19TVEFURV9DQVJEUkVTRVQJMHgwMgogCiAvKiB2b2x0YWdlcywgd2VpcmQgb3JkZXIgaXMgdG8ga2VlcCB0aGUgc2FtZSBvcmRlciBhcyB0aGUgb2xkIGRyaXZlcnMgKi8KLXN0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX1ZPTFRbM10gPSB7IDB4NDUsIDB4NDIsIDB4NDggfTsKK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX1ZPTFRbN11bNl0gPSB7CisJeyAweDQ1LCAweDQyLCAweDQ4IH0sCQkJCS8qIHBvcyAqLworCXsgMHg0NSwgMHg0MiwgMHg0OCB9LAkJCQkvKiBoZXIgKi8KKwl7IDB4NDUsIDB4NDIsIDB4NDggfSwJCQkJLyogc2N5ICovCisJeyAweDQ1LCAweDQyLCAweDQ4IH0sCQkJCS8qIGhyYyAqLworCXsgMHg0NSwgMHg0MiwgMHg0OCB9LAkJCQkvKiBobWQgKi8KKwl7IDB4MjEsIDB4MjAsIDB4MjIgfSwJCQkJLyogaGRzICovCisJeyAweDIxLCAweDIwLCAweDIyLCAweDIzLCAweDI0LCAweDI1IH0sCQkvKiBzeWwgKi8KK307CisKK3N0YXRpYyBjb25zdCBpbnQgRlNDSE1EX05PX1ZPTFRfU0VOU09SU1s3XSA9IHsgMywgMywgMywgMywgMywgMywgNiB9OwogCiAvKiBtaW5pbXVtIHB3bSBhdCB3aGljaCB0aGUgZmFuIGlzIGRyaXZlbiAocHdtIGNhbiBieSBpbmNyZWFzZWQgZGVwZW5kaW5nIG9uCiAgICB0aGUgdGVtcC4gTm90aWNlIHRoYXQgZm9yIHRoZSBzY3kgc29tZSBmYW5zIHNoYXJlIHRoZXJlIG1pbmltdW0gc3BlZWQuCiAgICBBbHNvIG5vdGljZSB0aGF0IHdpdGggdGhlIHNjeSB0aGUgc2Vuc29yIG9yZGVyIGlzIGRpZmZlcmVudCB0aGFuIHdpdGggdGhlCiAgICBvdGhlciBjaGlwcywgdGhpcyBvcmRlciB3YXMgaW4gdGhlIDIuNCBkcml2ZXIgYW5kIGtlcHQgZm9yIGNvbnNpc3RlbmN5LiAqLwotc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfRkFOX01JTls1XVs2XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX0ZBTl9NSU5bN11bN10gPSB7CiAJeyAweDU1LCAweDY1IH0sCQkJCQkvKiBwb3MgKi8KIAl7IDB4NTUsIDB4NjUsIDB4YjUgfSwJCQkJLyogaGVyICovCiAJeyAweDY1LCAweDY1LCAweDU1LCAweGE1LCAweDU1LCAweGE1IH0sCQkvKiBzY3kgKi8KIAl7IDB4NTUsIDB4NjUsIDB4YTUsIDB4YjUgfSwJCQkvKiBocmMgKi8KIAl7IDB4NTUsIDB4NjUsIDB4YTUsIDB4YjUsIDB4YzUgfSwJCS8qIGhtZCAqLworCXsgMHg1NSwgMHg2NSwgMHhhNSwgMHhiNSwgMHhjNSB9LAkJLyogaGRzICovCisJeyAweDU0LCAweDY0LCAweDc0LCAweDg0LCAweDk0LCAweGE0LCAweGI0IH0sCS8qIHN5bCAqLwogfTsKIAogLyogYWN0dWFsIGZhbiBzcGVlZCAqLwotc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfRkFOX0FDVFs1XVs2XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX0ZBTl9BQ1RbN11bN10gPSB7CiAJeyAweDBlLCAweDZiLCAweGFiIH0sCQkJCS8qIHBvcyAqLwogCXsgMHgwZSwgMHg2YiwgMHhiYiB9LAkJCQkvKiBoZXIgKi8KIAl7IDB4NmIsIDB4NmMsIDB4MGUsIDB4YWIsIDB4NWMsIDB4YmIgfSwJCS8qIHNjeSAqLwogCXsgMHgwZSwgMHg2YiwgMHhhYiwgMHhiYiB9LAkJCS8qIGhyYyAqLwogCXsgMHg1YiwgMHg2YiwgMHhhYiwgMHhiYiwgMHhjYiB9LAkJLyogaG1kICovCisJeyAweDViLCAweDZiLCAweGFiLCAweGJiLCAweGNiIH0sCQkvKiBoZHMgKi8KKwl7IDB4NTcsIDB4NjcsIDB4NzcsIDB4ODcsIDB4OTcsIDB4YTcsIDB4YjcgfSwJLyogc3lsICovCiB9OwogCiAvKiBmYW4gc3RhdHVzIHJlZ2lzdGVycyAqLwotc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfRkFOX1NUQVRFWzVdWzZdID0geworc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfRkFOX1NUQVRFWzddWzddID0gewogCXsgMHgwZCwgMHg2MiwgMHhhMiB9LAkJCQkvKiBwb3MgKi8KIAl7IDB4MGQsIDB4NjIsIDB4YjIgfSwJCQkJLyogaGVyICovCiAJeyAweDYyLCAweDYxLCAweDBkLCAweGEyLCAweDUyLCAweGIyIH0sCQkvKiBzY3kgKi8KIAl7IDB4MGQsIDB4NjIsIDB4YTIsIDB4YjIgfSwJCQkvKiBocmMgKi8KIAl7IDB4NTIsIDB4NjIsIDB4YTIsIDB4YjIsIDB4YzIgfSwJCS8qIGhtZCAqLworCXsgMHg1MiwgMHg2MiwgMHhhMiwgMHhiMiwgMHhjMiB9LAkJLyogaGRzICovCisJeyAweDUwLCAweDYwLCAweDcwLCAweDgwLCAweDkwLCAweGEwLCAweGIwIH0sCS8qIHN5bCAqLwogfTsKIAogLyogZmFuIHJpcHBsZSAvIGRpdmlkZXIgcmVnaXN0ZXJzICovCi1zdGF0aWMgY29uc3QgdTggRlNDSE1EX1JFR19GQU5fUklQUExFWzVdWzZdID0geworc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfRkFOX1JJUFBMRVs3XVs3XSA9IHsKIAl7IDB4MGYsIDB4NmYsIDB4YWYgfSwJCQkJLyogcG9zICovCiAJeyAweDBmLCAweDZmLCAweGJmIH0sCQkJCS8qIGhlciAqLwogCXsgMHg2ZiwgMHg2ZiwgMHgwZiwgMHhhZiwgMHgwZiwgMHhiZiB9LAkJLyogc2N5ICovCiAJeyAweDBmLCAweDZmLCAweGFmLCAweGJmIH0sCQkJLyogaHJjICovCiAJeyAweDVmLCAweDZmLCAweGFmLCAweGJmLCAweGNmIH0sCQkvKiBobWQgKi8KKwl7IDB4NWYsIDB4NmYsIDB4YWYsIDB4YmYsIDB4Y2YgfSwJCS8qIGhkcyAqLworCXsgMHg1NiwgMHg2NiwgMHg3NiwgMHg4NiwgMHg5NiwgMHhhNiwgMHhiNiB9LAkvKiBzeWwgKi8KIH07CiAKLXN0YXRpYyBjb25zdCBpbnQgRlNDSE1EX05PX0ZBTl9TRU5TT1JTWzVdID0geyAzLCAzLCA2LCA0LCA1IH07CitzdGF0aWMgY29uc3QgaW50IEZTQ0hNRF9OT19GQU5fU0VOU09SU1s3XSA9IHsgMywgMywgNiwgNCwgNSwgNSwgNyB9OwogCiAvKiBGYW4gc3RhdHVzIHJlZ2lzdGVyIGJpdG1hc2tzICovCiAjZGVmaW5lIEZTQ0hNRF9GQU5fQUxBUk0JMHgwNCAvKiBjYWxsZWQgZmF1bHQgYnkgRlNDISAqLwotI2RlZmluZSBGU0NITURfRkFOX05PVF9QUkVTRU5UCTB4MDggLyogbm90IGRvY3VtZW50ZWQgKi8KKyNkZWZpbmUgRlNDSE1EX0ZBTl9OT1RfUFJFU0VOVAkweDA4CisjZGVmaW5lIEZTQ0hNRF9GQU5fRElTQUJMRUQJMHg4MAogCiAKIC8qIGFjdHVhbCB0ZW1wZXJhdHVyZSByZWdpc3RlcnMgKi8KLXN0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX1RFTVBfQUNUWzVdWzVdID0geworc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfVEVNUF9BQ1RbN11bMTFdID0gewogCXsgMHg2NCwgMHgzMiwgMHgzNSB9LAkJCQkvKiBwb3MgKi8KIAl7IDB4NjQsIDB4MzIsIDB4MzUgfSwJCQkJLyogaGVyICovCiAJeyAweDY0LCAweEQwLCAweDMyLCAweDM1IH0sCQkJLyogc2N5ICovCiAJeyAweDY0LCAweDMyLCAweDM1IH0sCQkJCS8qIGhyYyAqLwogCXsgMHg3MCwgMHg4MCwgMHg5MCwgMHhkMCwgMHhlMCB9LAkJLyogaG1kICovCisJeyAweDcwLCAweDgwLCAweDkwLCAweGQwLCAweGUwIH0sCQkvKiBoZHMgKi8KKwl7IDB4NTgsIDB4NjgsIDB4NzgsIDB4ODgsIDB4OTgsIDB4YTgsCQkvKiBzeWwgKi8KKwkgIDB4YjgsIDB4YzgsIDB4ZDgsIDB4ZTgsIDB4ZjggfSwKIH07CiAKIC8qIHRlbXBlcmF0dXJlIHN0YXRlIHJlZ2lzdGVycyAqLwotc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfVEVNUF9TVEFURVs1XVs1XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX1RFTVBfU1RBVEVbN11bMTFdID0gewogCXsgMHg3MSwgMHg4MSwgMHg5MSB9LAkJCQkvKiBwb3MgKi8KIAl7IDB4NzEsIDB4ODEsIDB4OTEgfSwJCQkJLyogaGVyICovCiAJeyAweDcxLCAweGQxLCAweDgxLCAweDkxIH0sCQkJLyogc2N5ICovCiAJeyAweDcxLCAweDgxLCAweDkxIH0sCQkJCS8qIGhyYyAqLwogCXsgMHg3MSwgMHg4MSwgMHg5MSwgMHhkMSwgMHhlMSB9LAkJLyogaG1kICovCisJeyAweDcxLCAweDgxLCAweDkxLCAweGQxLCAweGUxIH0sCQkvKiBoZHMgKi8KKwl7IDB4NTksIDB4NjksIDB4NzksIDB4ODksIDB4OTksIDB4YTksCQkvKiBzeWwgKi8KKwkgIDB4YjksIDB4YzksIDB4ZDksIDB4ZTksIDB4ZjkgfSwKIH07CiAKIC8qIHRlbXBlcmF0dXJlIGhpZ2ggbGltaXQgcmVnaXN0ZXJzLCBGU0MgZG9lcyBub3QgZG9jdW1lbnQgdGhlc2UuIFByb3ZlbiB0byBiZQpAQCAtMTU4LDI0ICsxODYsMzEgQEAKICAgIGluIHRoZSBmc2NzY3kgMi40IGRyaXZlci4gRlNDIGhhcyBjb25maXJtZWQgdGhhdCB0aGUgZnNjaG1kIGhhcyByZWdpc3RlcnMKICAgIGF0IHRoZXNlIGFkZHJlc3NlcywgYnV0IGRvZXNuJ3Qgd2FudCB0byBjb25maXJtIHRoZXkgYXJlIHRoZSBzYW1lIGFzIHdpdGgKICAgIHRoZSBmc2NoZXI/PyAqLwotc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfVEVNUF9MSU1JVFs1XVs1XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX1RFTVBfTElNSVRbN11bMTFdID0gewogCXsgMCwgMCwgMCB9LAkJCQkJLyogcG9zICovCiAJeyAweDc2LCAweDg2LCAweDk2IH0sCQkJCS8qIGhlciAqLwogCXsgMHg3NiwgMHhkNiwgMHg4NiwgMHg5NiB9LAkJCS8qIHNjeSAqLwogCXsgMHg3NiwgMHg4NiwgMHg5NiB9LAkJCQkvKiBocmMgKi8KIAl7IDB4NzYsIDB4ODYsIDB4OTYsIDB4ZDYsIDB4ZTYgfSwJCS8qIGhtZCAqLworCXsgMHg3NiwgMHg4NiwgMHg5NiwgMHhkNiwgMHhlNiB9LAkJLyogaGRzICovCisJeyAweDVhLCAweDZhLCAweDdhLCAweDhhLCAweDlhLCAweGFhLAkJLyogc3lsICovCisJICAweGJhLCAweGNhLCAweGRhLCAweGVhLCAweGZhIH0sCiB9OwogCiAvKiBUaGVzZSB3ZXJlIGZvdW5kIHRocm91Z2ggZXhwZXJpbWVudGluZyB3aXRoIGFuIGZzY2hlciwgY3VycmVudGx5IHRoZXkgYXJlCiAgICBub3QgdXNlZCwgYnV0IHdlIGtlZXAgdGhlbSBhcm91bmQgZm9yIGZ1dHVyZSByZWZlcmVuY2UuCisgICBPbiB0aGUgZnNjc3lsIEFVVE9QMSBsaXZlcyBhdCAweCNjIChzbyAweDVjIGZvciBmYW4xLCAweDZjIGZvciBmYW4yLCBldGMpLAorICAgQVVUT1AyIGxpdmVzIGF0IDB4I2UsIGFuZCAweCMxIGlzIGEgYml0bWFzayBkZWZpbmluZyB3aGljaCB0ZW1wcyBpbmZsdWVuY2UKKyAgIHRoZSBmYW4gc3BlZWQuCiBzdGF0aWMgY29uc3QgdTggRlNDSEVSX1JFR19URU1QX0FVVE9QMVtdID0JeyAweDczLCAweDgzLCAweDkzIH07CiBzdGF0aWMgY29uc3QgdTggRlNDSEVSX1JFR19URU1QX0FVVE9QMltdID0JeyAweDc1LCAweDg1LCAweDk1IH07ICovCiAKLXN0YXRpYyBjb25zdCBpbnQgRlNDSE1EX05PX1RFTVBfU0VOU09SU1s1XSA9IHsgMywgMywgNCwgMywgNSB9Oworc3RhdGljIGNvbnN0IGludCBGU0NITURfTk9fVEVNUF9TRU5TT1JTWzddID0geyAzLCAzLCA0LCAzLCA1LCA1LCAxMSB9OwogCiAvKiB0ZW1wIHN0YXR1cyByZWdpc3RlciBiaXRtYXNrcyAqLwogI2RlZmluZSBGU0NITURfVEVNUF9XT1JLSU5HCTB4MDEKICNkZWZpbmUgRlNDSE1EX1RFTVBfQUxFUlQJMHgwMgorI2RlZmluZSBGU0NITURfVEVNUF9ESVNBQkxFRAkweDgwCiAvKiB0aGVyZSBvbmx5IHJlYWxseSBpcyBhbiBhbGFybSBpZiB0aGUgc2Vuc29yIGlzIHdvcmtpbmcgYW5kIGFsZXJ0ID09IDEgKi8KICNkZWZpbmUgRlNDSE1EX1RFTVBfQUxBUk1fTUFTSyBcCiAJKEZTQ0hNRF9URU1QX1dPUktJTkcgfCBGU0NITURfVEVNUF9BTEVSVCkKQEAgLTIwMSw2ICsyMzYsOCBAQAogCXsgImZzY3NjeSIsIGZzY3NjeSB9LAogCXsgImZzY2hyYyIsIGZzY2hyYyB9LAogCXsgImZzY2htZCIsIGZzY2htZCB9LAorCXsgImZzY2hkcyIsIGZzY2hkcyB9LAorCXsgImZzY3N5bCIsIGZzY3N5bCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBmc2NobWRfaWQpOwpAQCAtMjQyLDE0ICsyNzksMTQgQEAKIAl1OCB3YXRjaGRvZ19jb250cm9sOyAgICAvKiB3YXRjaGRvZyBjb250cm9sIHJlZ2lzdGVyICovCiAJdTggd2F0Y2hkb2dfc3RhdGU7ICAgICAgLyogd2F0Y2hkb2cgc3RhdHVzIHJlZ2lzdGVyICovCiAJdTggd2F0Y2hkb2dfcHJlc2V0OyAgICAgLyogd2F0Y2hkb2cgY291bnRlciBwcmVzZXQgb24gdHJpZ2dlciB2YWwgKi8KLQl1OCB2b2x0WzNdOwkJLyogMTIsIDUsIGJhdHRlcnkgdm9sdGFnZSAqLwotCXU4IHRlbXBfYWN0WzVdOwkJLyogdGVtcGVyYXR1cmUgKi8KLQl1OCB0ZW1wX3N0YXR1c1s1XTsJLyogc3RhdHVzIG9mIHNlbnNvciAqLwotCXU4IHRlbXBfbWF4WzVdOwkJLyogaGlnaCB0ZW1wIGxpbWl0LCBub3RpY2U6IHVuZG9jdW1lbnRlZCEgKi8KLQl1OCBmYW5fYWN0WzZdOwkJLyogZmFucyByZXZvbHV0aW9ucyBwZXIgc2Vjb25kICovCi0JdTggZmFuX3N0YXR1c1s2XTsJLyogZmFuIHN0YXR1cyAqLwotCXU4IGZhbl9taW5bNl07CQkvKiBmYW4gbWluIHZhbHVlIGZvciBycHMgKi8KLQl1OCBmYW5fcmlwcGxlWzZdOwkvKiBkaXZpZGVyIGZvciBycHMgKi8KKwl1OCB2b2x0WzZdOwkJLyogdm9sdGFnZSAqLworCXU4IHRlbXBfYWN0WzExXTsJLyogdGVtcGVyYXR1cmUgKi8KKwl1OCB0ZW1wX3N0YXR1c1sxMV07CS8qIHN0YXR1cyBvZiBzZW5zb3IgKi8KKwl1OCB0ZW1wX21heFsxMV07CS8qIGhpZ2ggdGVtcCBsaW1pdCwgbm90aWNlOiB1bmRvY3VtZW50ZWQhICovCisJdTggZmFuX2FjdFs3XTsJCS8qIGZhbnMgcmV2b2x1dGlvbnMgcGVyIHNlY29uZCAqLworCXU4IGZhbl9zdGF0dXNbN107CS8qIGZhbiBzdGF0dXMgKi8KKwl1OCBmYW5fbWluWzddOwkJLyogZmFuIG1pbiB2YWx1ZSBmb3IgcnBzICovCisJdTggZmFuX3JpcHBsZVs3XTsJLyogZGl2aWRlciBmb3IgcnBzICovCiB9OwogCiAvKiBHbG9iYWwgdmFyaWFibGVzIHRvIGhvbGQgaW5mb3JtYXRpb24gcmVhZCBmcm9tIHNwZWNpYWwgRE1JIHRhYmxlcywgd2hpY2ggYXJlCkBAIC0yNTcsOCArMjk0LDggQEAKICAgIHByb3RlY3QgdGhlc2Ugd2l0aCBhIGxvY2sgYXMgdGhleSBhcmUgb25seSBtb2RpZmllZCBmcm9tIG91ciBhdHRhY2ggZnVuY3Rpb24KICAgIHdoaWNoIGFsd2F5cyBnZXRzIGNhbGxlZCB3aXRoIHRoZSBpMmMtY29yZSBsb2NrIGhlbGQgYW5kIG5ldmVyIGFjY2Vzc2VkCiAgICBiZWZvcmUgdGhlIGF0dGFjaCBmdW5jdGlvbiBpcyBkb25lIHdpdGggdGhlbS4gKi8KLXN0YXRpYyBpbnQgZG1pX211bHRbM10gPSB7IDQ5MCwgMjAwLCAxMDAgfTsKLXN0YXRpYyBpbnQgZG1pX29mZnNldFszXSA9IHsgMCwgMCwgMCB9Oworc3RhdGljIGludCBkbWlfbXVsdFs2XSA9IHsgNDkwLCAyMDAsIDEwMCwgMTAwLCAyMDAsIDEwMCB9Oworc3RhdGljIGludCBkbWlfb2Zmc2V0WzZdID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CiBzdGF0aWMgaW50IGRtaV92cmVmID0gLTE7CiAKIC8qIFNvbWV3aGF0IHVnbHkgOiggZ2xvYmFsIGRhdGEgcG9pbnRlciBsaXN0IHdpdGggYWxsIGZzY2htZCBkZXZpY2VzLCBzbyB0aGF0CkBAIC00NTAsMTAgKzQ4NywxMSBAQAogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCiB7CiAJaW50IGluZGV4ID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKLQlpbnQgdmFsID0gZnNjaG1kX3VwZGF0ZV9kZXZpY2UoZGV2KS0+ZmFuX21pbltpbmRleF07CisJc3RydWN0IGZzY2htZF9kYXRhICpkYXRhID0gZnNjaG1kX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlpbnQgdmFsID0gZGF0YS0+ZmFuX21pbltpbmRleF07CiAKLQkvKiAwID0gYWxsb3cgdHVybmluZyBvZmYsIDEtMjU1ID0gNTAtMTAwJSAqLwotCWlmICh2YWwpCisJLyogMCA9IGFsbG93IHR1cm5pbmcgb2ZmIChleGNlcHQgb24gdGhlIHN5bCksIDEtMjU1ID0gNTAtMTAwJSAqLworCWlmICh2YWwgfHwgZGF0YS0+a2luZCA9PSBmc2NzeWwgLSAxKQogCQl2YWwgPSB2YWwgLyAyICsgMTI4OwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7CkBAIC00NjYsOCArNTA0LDggQEAKIAlzdHJ1Y3QgZnNjaG1kX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAl1bnNpZ25lZCBsb25nIHYgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAotCS8qIHJlZ2lzdGVyOiAwID0gYWxsb3cgdHVybmluZyBvZmYsIDEtMjU1ID0gNTAtMTAwJSAqLwotCWlmICh2KSB7CisJLyogcmVnOiAwID0gYWxsb3cgdHVybmluZyBvZmYgKGV4Y2VwdCBvbiB0aGUgc3lsKSwgMS0yNTUgPSA1MC0xMDAlICovCisJaWYgKHYgfHwgZGF0YS0+a2luZCA9PSBmc2NzeWwgLSAxKSB7CiAJCXYgPSBTRU5TT1JTX0xJTUlUKHYsIDEyOCwgMjU1KTsKIAkJdiA9ICh2IC0gMTI4KSAqIDIgKyAxOwogCX0KQEAgLTUyMiwxMSArNTYwLDE1IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgREVWSUNFX0FUVFIoYWxlcnRfbGVkLCAwNjQ0LCBzaG93X2FsZXJ0X2xlZCwgc3RvcmVfYWxlcnRfbGVkKTsKKwogc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBmc2NobWRfYXR0cltdID0gewogCVNFTlNPUl9BVFRSKGluMF9pbnB1dCwgMDQ0NCwgc2hvd19pbl92YWx1ZSwgTlVMTCwgMCksCiAJU0VOU09SX0FUVFIoaW4xX2lucHV0LCAwNDQ0LCBzaG93X2luX3ZhbHVlLCBOVUxMLCAxKSwKIAlTRU5TT1JfQVRUUihpbjJfaW5wdXQsIDA0NDQsIHNob3dfaW5fdmFsdWUsIE5VTEwsIDIpLAotCVNFTlNPUl9BVFRSKGFsZXJ0X2xlZCwgMDY0NCwgc2hvd19hbGVydF9sZWQsIHN0b3JlX2FsZXJ0X2xlZCwgMCksCisJU0VOU09SX0FUVFIoaW4zX2lucHV0LCAwNDQ0LCBzaG93X2luX3ZhbHVlLCBOVUxMLCAzKSwKKwlTRU5TT1JfQVRUUihpbjRfaW5wdXQsIDA0NDQsIHNob3dfaW5fdmFsdWUsIE5VTEwsIDQpLAorCVNFTlNPUl9BVFRSKGluNV9pbnB1dCwgMDQ0NCwgc2hvd19pbl92YWx1ZSwgTlVMTCwgNSksCiB9OwogCiBzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIGZzY2htZF90ZW1wX2F0dHJbXSA9IHsKQEAgLTU1MCw2ICs1OTIsMzAgQEAKIAlTRU5TT1JfQVRUUih0ZW1wNV9tYXgsICAgMDY0NCwgc2hvd190ZW1wX21heCwgc3RvcmVfdGVtcF9tYXgsIDQpLAogCVNFTlNPUl9BVFRSKHRlbXA1X2ZhdWx0LCAwNDQ0LCBzaG93X3RlbXBfZmF1bHQsIE5VTEwsIDQpLAogCVNFTlNPUl9BVFRSKHRlbXA1X2FsYXJtLCAwNDQ0LCBzaG93X3RlbXBfYWxhcm0sIE5VTEwsIDQpLAorCVNFTlNPUl9BVFRSKHRlbXA2X2lucHV0LCAwNDQ0LCBzaG93X3RlbXBfdmFsdWUsIE5VTEwsIDUpLAorCVNFTlNPUl9BVFRSKHRlbXA2X21heCwgICAwNjQ0LCBzaG93X3RlbXBfbWF4LCBzdG9yZV90ZW1wX21heCwgNSksCisJU0VOU09SX0FUVFIodGVtcDZfZmF1bHQsIDA0NDQsIHNob3dfdGVtcF9mYXVsdCwgTlVMTCwgNSksCisJU0VOU09SX0FUVFIodGVtcDZfYWxhcm0sIDA0NDQsIHNob3dfdGVtcF9hbGFybSwgTlVMTCwgNSksCisJU0VOU09SX0FUVFIodGVtcDdfaW5wdXQsIDA0NDQsIHNob3dfdGVtcF92YWx1ZSwgTlVMTCwgNiksCisJU0VOU09SX0FUVFIodGVtcDdfbWF4LCAgIDA2NDQsIHNob3dfdGVtcF9tYXgsIHN0b3JlX3RlbXBfbWF4LCA2KSwKKwlTRU5TT1JfQVRUUih0ZW1wN19mYXVsdCwgMDQ0NCwgc2hvd190ZW1wX2ZhdWx0LCBOVUxMLCA2KSwKKwlTRU5TT1JfQVRUUih0ZW1wN19hbGFybSwgMDQ0NCwgc2hvd190ZW1wX2FsYXJtLCBOVUxMLCA2KSwKKwlTRU5TT1JfQVRUUih0ZW1wOF9pbnB1dCwgMDQ0NCwgc2hvd190ZW1wX3ZhbHVlLCBOVUxMLCA3KSwKKwlTRU5TT1JfQVRUUih0ZW1wOF9tYXgsICAgMDY0NCwgc2hvd190ZW1wX21heCwgc3RvcmVfdGVtcF9tYXgsIDcpLAorCVNFTlNPUl9BVFRSKHRlbXA4X2ZhdWx0LCAwNDQ0LCBzaG93X3RlbXBfZmF1bHQsIE5VTEwsIDcpLAorCVNFTlNPUl9BVFRSKHRlbXA4X2FsYXJtLCAwNDQ0LCBzaG93X3RlbXBfYWxhcm0sIE5VTEwsIDcpLAorCVNFTlNPUl9BVFRSKHRlbXA5X2lucHV0LCAwNDQ0LCBzaG93X3RlbXBfdmFsdWUsIE5VTEwsIDgpLAorCVNFTlNPUl9BVFRSKHRlbXA5X21heCwgICAwNjQ0LCBzaG93X3RlbXBfbWF4LCBzdG9yZV90ZW1wX21heCwgOCksCisJU0VOU09SX0FUVFIodGVtcDlfZmF1bHQsIDA0NDQsIHNob3dfdGVtcF9mYXVsdCwgTlVMTCwgOCksCisJU0VOU09SX0FUVFIodGVtcDlfYWxhcm0sIDA0NDQsIHNob3dfdGVtcF9hbGFybSwgTlVMTCwgOCksCisJU0VOU09SX0FUVFIodGVtcDEwX2lucHV0LCAwNDQ0LCBzaG93X3RlbXBfdmFsdWUsIE5VTEwsIDkpLAorCVNFTlNPUl9BVFRSKHRlbXAxMF9tYXgsICAgMDY0NCwgc2hvd190ZW1wX21heCwgc3RvcmVfdGVtcF9tYXgsIDkpLAorCVNFTlNPUl9BVFRSKHRlbXAxMF9mYXVsdCwgMDQ0NCwgc2hvd190ZW1wX2ZhdWx0LCBOVUxMLCA5KSwKKwlTRU5TT1JfQVRUUih0ZW1wMTBfYWxhcm0sIDA0NDQsIHNob3dfdGVtcF9hbGFybSwgTlVMTCwgOSksCisJU0VOU09SX0FUVFIodGVtcDExX2lucHV0LCAwNDQ0LCBzaG93X3RlbXBfdmFsdWUsIE5VTEwsIDEwKSwKKwlTRU5TT1JfQVRUUih0ZW1wMTFfbWF4LCAgIDA2NDQsIHNob3dfdGVtcF9tYXgsIHN0b3JlX3RlbXBfbWF4LCAxMCksCisJU0VOU09SX0FUVFIodGVtcDExX2ZhdWx0LCAwNDQ0LCBzaG93X3RlbXBfZmF1bHQsIE5VTEwsIDEwKSwKKwlTRU5TT1JfQVRUUih0ZW1wMTFfYWxhcm0sIDA0NDQsIHNob3dfdGVtcF9hbGFybSwgTlVMTCwgMTApLAogfTsKIAogc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBmc2NobWRfZmFuX2F0dHJbXSA9IHsKQEAgLTU4OSw2ICs2NTUsMTIgQEAKIAlTRU5TT1JfQVRUUihmYW42X2ZhdWx0LCAwNDQ0LCBzaG93X2Zhbl9mYXVsdCwgTlVMTCwgNSksCiAJU0VOU09SX0FUVFIocHdtNl9hdXRvX3BvaW50MV9wd20sIDA2NDQsIHNob3dfcHdtX2F1dG9fcG9pbnQxX3B3bSwKIAkJc3RvcmVfcHdtX2F1dG9fcG9pbnQxX3B3bSwgNSksCisJU0VOU09SX0FUVFIoZmFuN19pbnB1dCwgMDQ0NCwgc2hvd19mYW5fdmFsdWUsIE5VTEwsIDYpLAorCVNFTlNPUl9BVFRSKGZhbjdfZGl2LCAgIDA2NDQsIHNob3dfZmFuX2Rpdiwgc3RvcmVfZmFuX2RpdiwgNiksCisJU0VOU09SX0FUVFIoZmFuN19hbGFybSwgMDQ0NCwgc2hvd19mYW5fYWxhcm0sIE5VTEwsIDYpLAorCVNFTlNPUl9BVFRSKGZhbjdfZmF1bHQsIDA0NDQsIHNob3dfZmFuX2ZhdWx0LCBOVUxMLCA2KSwKKwlTRU5TT1JfQVRUUihwd203X2F1dG9fcG9pbnQxX3B3bSwgMDY0NCwgc2hvd19wd21fYXV0b19wb2ludDFfcHdtLAorCQlzdG9yZV9wd21fYXV0b19wb2ludDFfcHdtLCA2KSwKIH07CiAKIApAQCAtNjI0LDEwICs2OTYsMTEgQEAKIAlkYXRhLT53YXRjaGRvZ19wcmVzZXQgPSBESVZfUk9VTkRfVVAodGltZW91dCwgcmVzb2x1dGlvbik7CiAKIAkvKiBXcml0ZSBuZXcgdGltZW91dCB2YWx1ZSAqLwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZGF0YS0+Y2xpZW50LCBGU0NITURfUkVHX1dET0dfUFJFU0VULAotCQlkYXRhLT53YXRjaGRvZ19wcmVzZXQpOworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZGF0YS0+Y2xpZW50LAorCQlGU0NITURfUkVHX1dET0dfUFJFU0VUW2RhdGEtPmtpbmRdLCBkYXRhLT53YXRjaGRvZ19wcmVzZXQpOwogCS8qIFdyaXRlIG5ldyBjb250cm9sIHJlZ2lzdGVyLCBkbyBub3QgdHJpZ2dlciEgKi8KLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRhdGEtPmNsaWVudCwgRlNDSE1EX1JFR19XRE9HX0NPTlRST0wsCisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkYXRhLT5jbGllbnQsCisJCUZTQ0hNRF9SRUdfV0RPR19DT05UUk9MW2RhdGEtPmtpbmRdLAogCQlkYXRhLT53YXRjaGRvZ19jb250cm9sICYgfkZTQ0hNRF9XRE9HX0NPTlRST0xfVFJJR0dFUik7CiAKIAlyZXQgPSBkYXRhLT53YXRjaGRvZ19wcmVzZXQgKiByZXNvbHV0aW9uOwpAQCAtNjYyLDggKzczNSw5IEBACiAJfQogCiAJZGF0YS0+d2F0Y2hkb2dfY29udHJvbCB8PSBGU0NITURfV0RPR19DT05UUk9MX1RSSUdHRVI7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkYXRhLT5jbGllbnQsIEZTQ0hNRF9SRUdfV0RPR19DT05UUk9MLAotCQkJCQlkYXRhLT53YXRjaGRvZ19jb250cm9sKTsKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRhdGEtPmNsaWVudCwKKwkJCQkgIEZTQ0hNRF9SRUdfV0RPR19DT05UUk9MW2RhdGEtPmtpbmRdLAorCQkJCSAgZGF0YS0+d2F0Y2hkb2dfY29udHJvbCk7CiBsZWF2ZToKIAltdXRleF91bmxvY2soJmRhdGEtPndhdGNoZG9nX2xvY2spOwogCXJldHVybiByZXQ7CkBAIC02ODIsNyArNzU2LDggQEAKIAlkYXRhLT53YXRjaGRvZ19jb250cm9sICY9IH5GU0NITURfV0RPR19DT05UUk9MX1NUQVJURUQ7CiAJLyogRG9uJ3Qgc3RvcmUgdGhlIHN0b3AgZmxhZyBpbiBvdXIgd2F0Y2hkb2cgY29udHJvbCByZWdpc3RlciBjb3B5LCBhcwogCSAgIGl0cyBhIHdyaXRlIG9ubHkgYml0IChyZWFkIGFsd2F5cyByZXR1cm5zIDApICovCi0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkYXRhLT5jbGllbnQsIEZTQ0hNRF9SRUdfV0RPR19DT05UUk9MLAorCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZGF0YS0+Y2xpZW50LAorCQlGU0NITURfUkVHX1dET0dfQ09OVFJPTFtkYXRhLT5raW5kXSwKIAkJZGF0YS0+d2F0Y2hkb2dfY29udHJvbCB8IEZTQ0hNRF9XRE9HX0NPTlRST0xfU1RPUCk7CiBsZWF2ZToKIAltdXRleF91bmxvY2soJmRhdGEtPndhdGNoZG9nX2xvY2spOwpAQCAtODU2LDcgKzkzMSw3IEBACiAKIC8qIERNSSBkZWNvZGUgcm91dGluZSB0byByZWFkIHZvbHRhZ2Ugc2NhbGluZyBmYWN0b3JzIGZyb20gc3BlY2lhbCBETUkgdGFibGVzLAogICAgd2hpY2ggYXJlIGF2YWlsYWJsZSBvbiBGU0MgbWFjaGluZXMgd2l0aCBhbiBmc2NoZXIgb3IgbGF0ZXIgY2hpcC4gKi8KLXN0YXRpYyB2b2lkIGZzY2htZF9kbWlfZGVjb2RlKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICpoZWFkZXIpCitzdGF0aWMgdm9pZCBmc2NobWRfZG1pX2RlY29kZShjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqaGVhZGVyLCB2b2lkICpkdW1teSkKIHsKIAlpbnQgaSwgbXVsdFszXSA9IHsgMCB9LCBvZmZzZXRbM10gPSB7IDAgfSwgdnJlZiA9IDAsIGZvdW5kID0gMDsKIApAQCAtOTEyLDYgKzk4NywxNSBAQAogCQkJZG1pX211bHRbaV0gPSBtdWx0W2ldICogMTA7CiAJCQlkbWlfb2Zmc2V0W2ldID0gb2Zmc2V0W2ldICogMTA7CiAJCX0KKwkJLyogQWNjb3JkaW5nIHRvIHRoZSBkb2NzIHRoZXJlIHNob3VsZCBiZSBzZXBhcmF0ZSBkbWkgZW50cmllcworCQkgICBmb3IgdGhlIG11bHQncyBhbmQgb2Zmc2V0cyBvZiBpbjMtNSBvZiB0aGUgc3lsLCBidXQgb24KKwkJICAgbXkgdGVzdCBtYWNoaW5lIHRoZXNlIGFyZSBub3QgcHJlc2VudCAqLworCQlkbWlfbXVsdFszXSA9IGRtaV9tdWx0WzJdOworCQlkbWlfbXVsdFs0XSA9IGRtaV9tdWx0WzFdOworCQlkbWlfbXVsdFs1XSA9IGRtaV9tdWx0WzJdOworCQlkbWlfb2Zmc2V0WzNdID0gZG1pX29mZnNldFsyXTsKKwkJZG1pX29mZnNldFs0XSA9IGRtaV9vZmZzZXRbMV07CisJCWRtaV9vZmZzZXRbNV0gPSBkbWlfb2Zmc2V0WzJdOwogCQlkbWlfdnJlZiA9IHZyZWY7CiAJfQogfQpAQCAtOTIwLDggKzEwMDQsNiBAQAogCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7Ci0JY29uc3QgY2hhciAqIGNvbnN0IGNsaWVudF9uYW1lc1s1XSA9IHsgImZzY3BvcyIsICJmc2NoZXIiLCAiZnNjc2N5IiwKLQkJCQkJCSJmc2NocmMiLCAiZnNjaG1kIiB9OwogCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTk0OCwxMSArMTAzMCwxNSBAQAogCQkJa2luZCA9IGZzY2hyYzsKIAkJZWxzZSBpZiAoIXN0cmNtcChpZCwgIkhNRCIpKQogCQkJa2luZCA9IGZzY2htZDsKKwkJZWxzZSBpZiAoIXN0cmNtcChpZCwgIkhEUyIpKQorCQkJa2luZCA9IGZzY2hkczsKKwkJZWxzZSBpZiAoIXN0cmNtcChpZCwgIlNZTCIpKQorCQkJa2luZCA9IGZzY3N5bDsKIAkJZWxzZQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0Jc3RybGNweShpbmZvLT50eXBlLCBjbGllbnRfbmFtZXNba2luZCAtIDFdLCBJMkNfTkFNRV9TSVpFKTsKKwlzdHJsY3B5KGluZm8tPnR5cGUsIGZzY2htZF9pZFtraW5kIC0gMV0ubmFtZSwgSTJDX05BTUVfU0laRSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTk2MSw4ICsxMDQ3LDggQEAKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgZnNjaG1kX2RhdGEgKmRhdGE7Ci0JY29uc3QgY2hhciAqIGNvbnN0IG5hbWVzWzVdID0geyAiUG9zZWlkb24iLCAiSGVybWVzIiwgIlNjeWxsYSIsCi0JCQkJCSJIZXJhY2xlcyIsICJIZWltZGFsbCIgfTsKKwljb25zdCBjaGFyICogY29uc3QgbmFtZXNbN10gPSB7ICJQb3NlaWRvbiIsICJIZXJtZXMiLCAiU2N5bGxhIiwKKwkJCQkiSGVyYWNsZXMiLCAiSGVpbWRhbGwiLCAiSGFkZXMiLCAiU3lsZXVzIiB9OwogCWNvbnN0IGludCB3YXRjaGRvZ19taW5vcnNbXSA9IHsgV0FUQ0hET0dfTUlOT1IsIDIxMiwgMjEzLCAyMTQsIDIxNSB9OwogCWludCBpLCBlcnI7CiAJZW51bSBjaGlwcyBraW5kID0gaWQtPmRyaXZlcl9kYXRhOwpAQCAtOTkxLDcgKzEwNzcsNyBAQAogCiAJLyogUmVhZCB0aGUgc3BlY2lhbCBETUkgdGFibGUgZm9yIGZzY2hlciBhbmQgbmV3ZXIgY2hpcHMgKi8KIAlpZiAoKGtpbmQgPT0gZnNjaGVyIHx8IGtpbmQgPj0gZnNjaHJjKSAmJiBkbWlfdnJlZiA9PSAtMSkgewotCQlkbWlfd2Fsayhmc2NobWRfZG1pX2RlY29kZSk7CisJCWRtaV93YWxrKGZzY2htZF9kbWlfZGVjb2RlLCBOVUxMKTsKIAkJaWYgKGRtaV92cmVmID09IC0xKSB7CiAJCQlkZXZfd2FybigmY2xpZW50LT5kZXYsCiAJCQkJIkNvdWxkbid0IGdldCB2b2x0YWdlIHNjYWxpbmcgZmFjdG9ycyBmcm9tICIKQEAgLTEwMDAsMjEgKzEwODYsMjUgQEAKIAkJfQogCX0KIAorCS8qIGkyYyBraW5kIGdvZXMgZnJvbSAxLTYsIHdlIHdhbnQgZnJvbSAwLTUgdG8gYWRkcmVzcyBhcnJheXMgKi8KKwlkYXRhLT5raW5kID0ga2luZCAtIDE7CisKIAkvKiBSZWFkIGluIHNvbWUgbmV2ZXIgY2hhbmdpbmcgcmVnaXN0ZXJzICovCiAJZGF0YS0+cmV2aXNpb24gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBGU0NITURfUkVHX1JFVklTSU9OKTsKIAlkYXRhLT5nbG9iYWxfY29udHJvbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCiAJCQkJCUZTQ0hNRF9SRUdfQ09OVFJPTCk7CiAJZGF0YS0+d2F0Y2hkb2dfY29udHJvbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCUZTQ0hNRF9SRUdfV0RPR19DT05UUk9MKTsKKwkJCQkJRlNDSE1EX1JFR19XRE9HX0NPTlRST0xbZGF0YS0+a2luZF0pOwogCWRhdGEtPndhdGNoZG9nX3N0YXRlID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJRlNDSE1EX1JFR19XRE9HX1NUQVRFKTsKKwkJCQkJRlNDSE1EX1JFR19XRE9HX1NUQVRFW2RhdGEtPmtpbmRdKTsKIAlkYXRhLT53YXRjaGRvZ19wcmVzZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQlGU0NITURfUkVHX1dET0dfUFJFU0VUKTsKKwkJCQkJRlNDSE1EX1JFR19XRE9HX1BSRVNFVFtkYXRhLT5raW5kXSk7CiAKLQkvKiBpMmMga2luZCBnb2VzIGZyb20gMS01LCB3ZSB3YW50IGZyb20gMC00IHRvIGFkZHJlc3MgYXJyYXlzICovCi0JZGF0YS0+a2luZCA9IGtpbmQgLSAxOworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hbGVydF9sZWQpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9kZXRhY2g7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmc2NobWRfYXR0cik7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBGU0NITURfTk9fVk9MVF9TRU5TT1JTW2RhdGEtPmtpbmRdOyBpKyspIHsKIAkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwKIAkJCQkJJmZzY2htZF9hdHRyW2ldLmRldl9hdHRyKTsKIAkJaWYgKGVycikKQEAgLTEwMjcsNiArMTExNywxNiBAQAogCQkJCXNob3dfdGVtcF9tYXgpCiAJCQljb250aW51ZTsKIAorCQlpZiAoa2luZCA9PSBmc2NzeWwpIHsKKwkJCWlmIChpICUgNCA9PSAwKQorCQkJCWRhdGEtPnRlbXBfc3RhdHVzW2kgLyA0XSA9CisJCQkJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQlGU0NITURfUkVHX1RFTVBfU1RBVEUKKwkJCQkJCVtkYXRhLT5raW5kXVtpIC8gNF0pOworCQkJaWYgKGRhdGEtPnRlbXBfc3RhdHVzW2kgLyA0XSAmIEZTQ0hNRF9URU1QX0RJU0FCTEVEKQorCQkJCWNvbnRpbnVlOworCQl9CisKIAkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwKIAkJCQkJJmZzY2htZF90ZW1wX2F0dHJbaV0uZGV2X2F0dHIpOwogCQlpZiAoZXJyKQpAQCAtMTA0MCw2ICsxMTQwLDE2IEBACiAJCQkJCSJwd20zX2F1dG9fcG9pbnQxX3B3bSIpKQogCQkJY29udGludWU7CiAKKwkJaWYgKGtpbmQgPT0gZnNjc3lsKSB7CisJCQlpZiAoaSAlIDUgPT0gMCkKKwkJCQlkYXRhLT5mYW5fc3RhdHVzW2kgLyA1XSA9CisJCQkJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQlGU0NITURfUkVHX0ZBTl9TVEFURQorCQkJCQkJW2RhdGEtPmtpbmRdW2kgLyA1XSk7CisJCQlpZiAoZGF0YS0+ZmFuX3N0YXR1c1tpIC8gNV0gJiBGU0NITURfRkFOX0RJU0FCTEVEKQorCQkJCWNvbnRpbnVlOworCQl9CisKIAkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwKIAkJCQkJJmZzY2htZF9mYW5fYXR0cltpXS5kZXZfYXR0cik7CiAJCWlmIChlcnIpCkBAIC0xMTI2LDcgKzEyMzYsOCBAQAogCWlmIChkYXRhLT5od21vbl9kZXYpCiAJCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmc2NobWRfYXR0cik7IGkrKykKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYWxlcnRfbGVkKTsKKwlmb3IgKGkgPSAwOyBpIDwgKEZTQ0hNRF9OT19WT0xUX1NFTlNPUlNbZGF0YS0+a2luZF0pOyBpKyspCiAJCWRldmljZV9yZW1vdmVfZmlsZSgmY2xpZW50LT5kZXYsICZmc2NobWRfYXR0cltpXS5kZXZfYXR0cik7CiAJZm9yIChpID0gMDsgaSA8IChGU0NITURfTk9fVEVNUF9TRU5TT1JTW2RhdGEtPmtpbmRdICogNCk7IGkrKykKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZjbGllbnQtPmRldiwKQEAgLTExNzEsNyArMTI4Miw3IEBACiAJCQkJCWRhdGEtPnRlbXBfYWN0W2ldIDwgZGF0YS0+dGVtcF9tYXhbaV0pCiAJCQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsCiAJCQkJCUZTQ0hNRF9SRUdfVEVNUF9TVEFURVtkYXRhLT5raW5kXVtpXSwKLQkJCQkJRlNDSE1EX1RFTVBfQUxFUlQpOworCQkJCQlkYXRhLT50ZW1wX3N0YXR1c1tpXSk7CiAJCX0KIAogCQlmb3IgKGkgPSAwOyBpIDwgRlNDSE1EX05PX0ZBTl9TRU5TT1JTW2RhdGEtPmtpbmRdOyBpKyspIHsKQEAgLTExOTMsMTIgKzEzMDQsMTIgQEAKIAkJCQkJZGF0YS0+ZmFuX2FjdFtpXSkKIAkJCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKIAkJCQkJRlNDSE1EX1JFR19GQU5fU1RBVEVbZGF0YS0+a2luZF1baV0sCi0JCQkJCUZTQ0hNRF9GQU5fQUxBUk0pOworCQkJCQlkYXRhLT5mYW5fc3RhdHVzW2ldKTsKIAkJfQogCi0JCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBGU0NITURfTk9fVk9MVF9TRU5TT1JTW2RhdGEtPmtpbmRdOyBpKyspCiAJCQlkYXRhLT52b2x0W2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJCUZTQ0hNRF9SRUdfVk9MVFtpXSk7CisJCQkJCSAgICAgICBGU0NITURfUkVHX1ZPTFRbZGF0YS0+a2luZF1baV0pOwogCiAJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CiAJCWRhdGEtPnZhbGlkID0gMTsKQEAgLTEyMjAsOCArMTMzMSw4IEBACiB9CiAKIE1PRFVMRV9BVVRIT1IoIkhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkZTQyBQb3NlaWRvbiwgSGVybWVzLCBTY3lsbGEsIEhlcmFjbGVzIGFuZCAiCi0JCQkiSGVpbWRhbGwgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZTQyBQb3NlaWRvbiwgSGVybWVzLCBTY3lsbGEsIEhlcmFjbGVzLCBIZWltZGFsbCwgSGFkZXMgIgorCQkJImFuZCBTeWxldXMgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KGZzY2htZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaGRhcHMuYyBiL2RyaXZlcnMvaHdtb24vaGRhcHMuYwppbmRleCBhNGQ5MmQyLi5kMzYxMmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKKysrIGIvZHJpdmVycy9od21vbi9oZGFwcy5jCkBAIC02NSw2ICs2NSwxMCBAQAogI2RlZmluZSBIREFQU19JTlBVVF9GVVpaCTQJLyogaW5wdXQgZXZlbnQgdGhyZXNob2xkICovCiAjZGVmaW5lIEhEQVBTX0lOUFVUX0ZMQVQJNAogCisjZGVmaW5lIEhEQVBTX1hfQVhJUwkJKDEgPDwgMCkKKyNkZWZpbmUgSERBUFNfWV9BWElTCQkoMSA8PCAxKQorI2RlZmluZSBIREFQU19CT1RIX0FYRVMJCShIREFQU19YX0FYSVMgfCBIREFQU19ZX0FYSVMpCisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Owogc3RhdGljIHN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpoZGFwc19pZGV2Owogc3RhdGljIHVuc2lnbmVkIGludCBoZGFwc19pbnZlcnQ7CkBAIC0xODIsMTEgKzE4NiwxMSBAQAogCWttX2FjdGl2aXR5ID0gaW5iKEhEQVBTX1BPUlRfS01BQ1QpOwogCV9fZGV2aWNlX2NvbXBsZXRlKCk7CiAKLQkvKiBpZiBoZGFwc19pbnZlcnQgaXMgc2V0LCBuZWdhdGUgdGhlIHR3byB2YWx1ZXMgKi8KLQlpZiAoaGRhcHNfaW52ZXJ0KSB7CisJLyogaGRhcHNfaW52ZXJ0IGlzIGEgYml0dmVjdG9yIHRvIG5lZ2F0ZSB0aGUgYXhlcyAqLworCWlmIChoZGFwc19pbnZlcnQgJiBIREFQU19YX0FYSVMpCiAJCSp4ID0gLSp4OworCWlmIChoZGFwc19pbnZlcnQgJiBIREFQU19ZX0FYSVMpCiAJCSp5ID0gLSp5OwotCX0KIAogCXJldHVybiAwOwogfQpAQCAtNDM2LDcgKzQ0MCw4IEBACiB7CiAJaW50IGludmVydDsKIAotCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmaW52ZXJ0KSAhPSAxIHx8IChpbnZlcnQgIT0gMSAmJiBpbnZlcnQgIT0gMCkpCisJaWYgKHNzY2FuZihidWYsICIlZCIsICZpbnZlcnQpICE9IDEgfHwKKwkgICAgaW52ZXJ0IDwgMCB8fCBpbnZlcnQgPiBIREFQU19CT1RIX0FYRVMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaGRhcHNfaW52ZXJ0ID0gaW52ZXJ0OwpAQCAtNDgzLDU2ICs0ODgsNTIgQEAKIC8qIGhkYXBzX2RtaV9tYXRjaF9pbnZlcnQgLSBmb3VuZCBhbiBpbnZlcnRlZCBtYXRjaC4gKi8KIHN0YXRpYyBpbnQgX19pbml0IGhkYXBzX2RtaV9tYXRjaF9pbnZlcnQoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQogewotCWhkYXBzX2ludmVydCA9IDE7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiaGRhcHM6IGludmVydGluZyBheGlzIHJlYWRpbmdzLlxuIik7CisJaGRhcHNfaW52ZXJ0ID0gKHVuc2lnbmVkIGxvbmcpaWQtPmRyaXZlcl9kYXRhOworCXByaW50ayhLRVJOX0lORk8gImhkYXBzOiBpbnZlcnRpbmcgYXhpcyAoJXUpIHJlYWRpbmdzLlxuIiwKKwkgICAgICAgaGRhcHNfaW52ZXJ0KTsKIAlyZXR1cm4gaGRhcHNfZG1pX21hdGNoKGlkKTsKIH0KIAotI2RlZmluZSBIREFQU19ETUlfTUFUQ0hfTk9STUFMKHZlbmRvciwgbW9kZWwpIHsJCVwKKyNkZWZpbmUgSERBUFNfRE1JX01BVENIX0lOVkVSVCh2ZW5kb3IsIG1vZGVsLCBheGVzKSB7CVwKIAkuaWRlbnQgPSB2ZW5kb3IgIiAiIG1vZGVsLAkJCVwKLQkuY2FsbGJhY2sgPSBoZGFwc19kbWlfbWF0Y2gsCQkJXAorCS5jYWxsYmFjayA9IGhkYXBzX2RtaV9tYXRjaF9pbnZlcnQsCQlcCisJLmRyaXZlcl9kYXRhID0gKHZvaWQgKilheGVzLAkJCVwKIAkubWF0Y2hlcyA9IHsJCQkJCVwKIAkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsIHZlbmRvciksCVwKIAkJRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sIG1vZGVsKQlcCiAJfQkJCQkJCVwKIH0KIAotI2RlZmluZSBIREFQU19ETUlfTUFUQ0hfSU5WRVJUKHZlbmRvciwgbW9kZWwpIHsJCVwKLQkuaWRlbnQgPSB2ZW5kb3IgIiAiIG1vZGVsLAkJCVwKLQkuY2FsbGJhY2sgPSBoZGFwc19kbWlfbWF0Y2hfaW52ZXJ0LAkJXAotCS5tYXRjaGVzID0gewkJCQkJXAotCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgdmVuZG9yKSwJXAotCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfVkVSU0lPTiwgbW9kZWwpCVwKLQl9CQkJCQkJXAotfQorI2RlZmluZSBIREFQU19ETUlfTUFUQ0hfTk9STUFMKHZlbmRvciwgbW9kZWwpCQlcCisJSERBUFNfRE1JX01BVENIX0lOVkVSVCh2ZW5kb3IsIG1vZGVsLCAwKQogCiAvKiBOb3RlIHRoYXQgSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgVDQyIikgd291bGQgbWF0Y2gKICAgICJUaGlua1BhZCBUNDJwIiwgc28gdGhlIG9yZGVyIG9mIHRoZSBlbnRyaWVzIG1hdHRlcnMuCiAgICBJZiB5b3VyIFRoaW5rUGFkIGlzIG5vdCByZWNvZ25pemVkLCBwbGVhc2UgdXBkYXRlIHRvIGxhdGVzdAogICAgQklPUy4gVGhpcyBpcyBlc3BlY2lhbGx5IHRoZSBjYXNlIGZvciBzb21lIFI1MiBUaGlua1BhZHMuICovCiBzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0ZGF0YSBoZGFwc193aGl0ZWxpc3RbXSA9IHsKLQlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJJQk0iLCAiVGhpbmtQYWQgUjUwcCIpLAorCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIklCTSIsICJUaGlua1BhZCBSNTBwIiwgSERBUFNfQk9USF9BWEVTKSwKIAlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJJQk0iLCAiVGhpbmtQYWQgUjUwIiksCiAJSERBUFNfRE1JX01BVENIX05PUk1BTCgiSUJNIiwgIlRoaW5rUGFkIFI1MSIpLAogCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIklCTSIsICJUaGlua1BhZCBSNTIiKSwKLQlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgUjYxaSIpLAotCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBSNjEiKSwKLQlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJJQk0iLCAiVGhpbmtQYWQgVDQxcCIpLAorCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBSNjFpIiwgSERBUFNfQk9USF9BWEVTKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgUjYxIiwgSERBUFNfQk9USF9BWEVTKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJJQk0iLCAiVGhpbmtQYWQgVDQxcCIsIEhEQVBTX0JPVEhfQVhFUyksCiAJSERBUFNfRE1JX01BVENIX05PUk1BTCgiSUJNIiwgIlRoaW5rUGFkIFQ0MSIpLAotCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIklCTSIsICJUaGlua1BhZCBUNDJwIiksCisJSERBUFNfRE1JX01BVENIX0lOVkVSVCgiSUJNIiwgIlRoaW5rUGFkIFQ0MnAiLCBIREFQU19CT1RIX0FYRVMpLAogCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIklCTSIsICJUaGlua1BhZCBUNDIiKSwKIAlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJJQk0iLCAiVGhpbmtQYWQgVDQzIiksCi0JSERBUFNfRE1JX01BVENIX0lOVkVSVCgiTEVOT1ZPIiwgIlRoaW5rUGFkIFQ2MCIpLAotCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBUNjFwIiksCi0JSERBUFNfRE1JX01BVENIX0lOVkVSVCgiTEVOT1ZPIiwgIlRoaW5rUGFkIFQ2MSIpLAorCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBUNjAiLCBIREFQU19CT1RIX0FYRVMpLAorCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBUNjFwIiwgSERBUFNfQk9USF9BWEVTKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgVDYxIiwgSERBUFNfQk9USF9BWEVTKSwKIAlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJJQk0iLCAiVGhpbmtQYWQgWDQwIiksCi0JSERBUFNfRE1JX01BVENIX05PUk1BTCgiSUJNIiwgIlRoaW5rUGFkIFg0MSIpLAotCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBYNjAiKSwKLQlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgWDYxcyIpLAotCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBYNjEiKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJJQk0iLCAiVGhpbmtQYWQgWDQxIiwgSERBUFNfWV9BWElTKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgWDYwIiwgSERBUFNfQk9USF9BWEVTKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgWDYxcyIsIEhEQVBTX0JPVEhfQVhFUyksCisJSERBUFNfRE1JX01BVENIX0lOVkVSVCgiTEVOT1ZPIiwgIlRoaW5rUGFkIFg2MSIsIEhEQVBTX0JPVEhfQVhFUyksCiAJSERBUFNfRE1JX01BVENIX05PUk1BTCgiSUJNIiwgIlRoaW5rUGFkIFo2MG0iKSwKLQlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgWjYxbSIpLAotCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBaNjFwIiksCisJSERBUFNfRE1JX01BVENIX0lOVkVSVCgiTEVOT1ZPIiwgIlRoaW5rUGFkIFo2MW0iLCBIREFQU19CT1RIX0FYRVMpLAorCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBaNjFwIiwgSERBUFNfQk9USF9BWEVTKSwKIAl7IC5pZGVudCA9IE5VTEwgfQogfTsKIApAQCAtNjI3LDggKzYyOCw5IEBACiBtb2R1bGVfaW5pdChoZGFwc19pbml0KTsKIG1vZHVsZV9leGl0KGhkYXBzX2V4aXQpOwogCi1tb2R1bGVfcGFyYW1fbmFtZWQoaW52ZXJ0LCBoZGFwc19pbnZlcnQsIGJvb2wsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbnZlcnQsICJpbnZlcnQgZGF0YSBhbG9uZyBlYWNoIGF4aXMiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChpbnZlcnQsIGhkYXBzX2ludmVydCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW52ZXJ0LCAiaW52ZXJ0IGRhdGEgYWxvbmcgZWFjaCBheGlzLiAxIGludmVydCB4LWF4aXMsICIKKwkJICIyIGludmVydCB5LWF4aXMsIDMgaW52ZXJ0IGJvdGggYXhlcy4iKTsKIAogTU9EVUxFX0FVVEhPUigiUm9iZXJ0IExvdmUiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiSUJNIEhhcmQgRHJpdmUgQWN0aXZlIFByb3RlY3Rpb24gU3lzdGVtIChIREFQUykgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9wY2Y4NTkxLmMgYi9kcml2ZXJzL2h3bW9uL3BjZjg1OTEuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBkcml2ZXJzL2kyYy9jaGlwcy9wY2Y4NTkxLmMKcmVuYW1lIHRvIGRyaXZlcnMvaHdtb24vcGNmODU5MS5jCmluZGV4IDE2Y2UzZTEuLjFkN2ZmZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL3BjZjg1OTEuYworKysgYi9kcml2ZXJzL2h3bW9uL3BjZjg1OTEuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgQXVyZWxpZW4gSmFybm8gPGF1cmVsaWVuQGF1cmVsMzIubmV0PgotICAgIFBvcnRlZCB0byBMaW51eCAyLjYgYnkgQXVyZWxpZW4gSmFybm8gPGF1cmVsaWVuQGF1cmVsMzIubmV0PiB3aXRoIAorICAgIFBvcnRlZCB0byBMaW51eCAyLjYgYnkgQXVyZWxpZW4gSmFybm8gPGF1cmVsaWVuQGF1cmVsMzIubmV0PiB3aXRoCiAgICAgdGhlIGhlbHAgb2YgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNDEsMTMgKzQxLDEzIEBACiAJIiAzID0gdHdvIGRpZmZlcmVudGlhbCBpbnB1dHNcbiIpOwogCiAvKiBUaGUgUENGODU5MSBjb250cm9sIGJ5dGUKLSAgICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMCAgCisgICAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKICAgIHwgIDAgfEFPRUZ8ICAgQUlQICAgfCAgMCB8QUlOQ3wgIEFJQ0ggICB8ICovCiAKIC8qIEFuYWxvZyBPdXRwdXQgRW5hYmxlIEZsYWcgKGFuYWxvZyBvdXRwdXQgYWN0aXZlIGlmIDEpICovCiAjZGVmaW5lIFBDRjg1OTFfQ09OVFJPTF9BT0VGCQkweDQwCi0JCQkJCQotLyogQW5hbG9nIElucHV0IFByb2dyYW1taW5nIAorCisvKiBBbmFsb2cgSW5wdXQgUHJvZ3JhbW1pbmcKICAgIDB4MDAgPSBmb3VyIHNpbmdsZSBlbmRlZCBpbnB1dHMKICAgIDB4MTAgPSB0aHJlZSBkaWZmZXJlbnRpYWwgaW5wdXRzCiAgICAweDIwID0gc2luZ2xlIGVuZGVkIGFuZCBkaWZmZXJlbnRpYWwgbWl4ZWQKQEAgLTU4LDcgKzU4LDcgQEAKICNkZWZpbmUgUENGODU5MV9DT05UUk9MX0FJTkMJCTB4MDQKIAogLyogQ2hhbm5lbCBzZWxlY3Rpb24KLSAgIDB4MDAgPSBjaGFubmVsIDAgCisgICAweDAwID0gY2hhbm5lbCAwCiAgICAweDAxID0gY2hhbm5lbCAxCiAgICAweDAyID0gY2hhbm5lbCAyCiAgICAweDAzID0gY2hhbm5lbCAzICovCkBAIC0xMTQsNyArMTE0LDcgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKG91dDBfb3V0cHV0LCBTX0lXVVNSIHwgU19JUlVHTywgCitzdGF0aWMgREVWSUNFX0FUVFIob3V0MF9vdXRwdXQsIFNfSVdVU1IgfCBTX0lSVUdPLAogCQkgICBzaG93X291dDBfb3VwdXQsIHNldF9vdXQwX291dHB1dCk7CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfb3V0MF9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQpAQCAtMTM5LDcgKzEzOSw3IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIob3V0MF9lbmFibGUsIFNfSVdVU1IgfCBTX0lSVUdPLCAKK3N0YXRpYyBERVZJQ0VfQVRUUihvdXQwX2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sCiAJCSAgIHNob3dfb3V0MF9lbmFibGUsIHNldF9vdXQwX2VuYWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwY2Y4NTkxX2F0dHJpYnV0ZXNbXSA9IHsKQEAgLTE5Niw3ICsxOTYsNyBAQAogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGV4aXQ7CiAJfQotCQorCiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCkBAIC0yNDksOCArMjQ5LDggQEAKIAlkYXRhLT5hb3V0ID0gUENGODU5MV9JTklUX0FPVVQ7CiAKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgZGF0YS0+Y29udHJvbCwgZGF0YS0+YW91dCk7Ci0JCi0JLyogVGhlIGZpcnN0IGJ5dGUgdHJhbnNtaXR0ZWQgY29udGFpbnMgdGhlIGNvbnZlcnNpb24gY29kZSBvZiB0aGUgCisKKwkvKiBUaGUgZmlyc3QgYnl0ZSB0cmFuc21pdHRlZCBjb250YWlucyB0aGUgY29udmVyc2lvbiBjb2RlIG9mIHRoZQogCSAgIHByZXZpb3VzIHJlYWQgY3ljbGUuIEZMVVNIIElUISAqLwogCWkyY19zbWJ1c19yZWFkX2J5dGUoY2xpZW50KTsKIH0KQEAgLTI2Nyw4ICsyNjcsOCBAQAogCQlkYXRhLT5jb250cm9sID0gKGRhdGEtPmNvbnRyb2wgJiB+UENGODU5MV9DT05UUk9MX0FJQ0hfTUFTSykKIAkJCSAgICAgIHwgY2hhbm5lbDsKIAkJaTJjX3NtYnVzX3dyaXRlX2J5dGUoY2xpZW50LCBkYXRhLT5jb250cm9sKTsKLQkKLQkJLyogVGhlIGZpcnN0IGJ5dGUgdHJhbnNtaXR0ZWQgY29udGFpbnMgdGhlIGNvbnZlcnNpb24gY29kZSBvZiAKKworCQkvKiBUaGUgZmlyc3QgYnl0ZSB0cmFuc21pdHRlZCBjb250YWlucyB0aGUgY29udmVyc2lvbiBjb2RlIG9mCiAJCSAgIHRoZSBwcmV2aW91cyByZWFkIGN5Y2xlLiBGTFVTSCBJVCEgKi8KIAkJaTJjX3NtYnVzX3JlYWRfYnl0ZShjbGllbnQpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNjI3ZWhmLmMgYi9kcml2ZXJzL2h3bW9uL3c4MzYyN2VoZi5jCmluZGV4IGZlYWU3NDMuLmU2NGI0MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzNjI3ZWhmLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM2MjdlaGYuYwpAQCAtMzYsNiArMzYsNyBAQAogICAgIHc4MzYyN2VoZiAgIDEwICAgICAgNSAgICAgICA0ICAgICAgIDMgICAgICAweDg4NTAgMHg4OCAgICAweDVjYTMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODYwIDB4YTEKICAgICB3ODM2MjdkaGcgICAgOSAgICAgIDUgICAgICAgNCAgICAgICAzICAgICAgMHhhMDIwIDB4YzEgICAgMHg1Y2EzCisgICAgdzgzNjY3aGcgICAgIDkgICAgICA1ICAgICAgIDMgICAgICAgMyAgICAgIDB4YTUxMCAweGMxICAgIDB4NWNhMwogKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNTIsMTIgKzUzLDEzIEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSAibG03NS5oIgogCi1lbnVtIGtpbmRzIHsgdzgzNjI3ZWhmLCB3ODM2MjdkaGcgfTsKK2VudW0ga2luZHMgeyB3ODM2MjdlaGYsIHc4MzYyN2RoZywgdzgzNjY3aGcgfTsKIAogLyogdXNlZCB0byBzZXQgZGF0YS0+bmFtZSA9IHc4MzYyN2VoZl9kZXZpY2VfbmFtZXNbZGF0YS0+c2lvX2tpbmRdICovCiBzdGF0aWMgY29uc3QgY2hhciAqIHc4MzYyN2VoZl9kZXZpY2VfbmFtZXNbXSA9IHsKIAkidzgzNjI3ZWhmIiwKIAkidzgzNjI3ZGhnIiwKKwkidzgzNjY3aGciLAogfTsKIAogc3RhdGljIHVuc2lnbmVkIHNob3J0IGZvcmNlX2lkOwpAQCAtNzEsNiArNzMsNyBAQAogICovCiAKICNkZWZpbmUgVzgzNjI3RUhGX0xEX0hXTQkweDBiCisjZGVmaW5lIFc4MzY2N0hHX0xEX1ZJRCAJMHgwZAogCiAjZGVmaW5lIFNJT19SRUdfTERTRUwJCTB4MDcJLyogTG9naWNhbCBkZXZpY2Ugc2VsZWN0ICovCiAjZGVmaW5lIFNJT19SRUdfREVWSUQJCTB4MjAJLyogRGV2aWNlIElEICgyIGJ5dGVzKSAqLwpAQCAtODMsNiArODYsNyBAQAogI2RlZmluZSBTSU9fVzgzNjI3RUhGX0lECTB4ODg1MAogI2RlZmluZSBTSU9fVzgzNjI3RUhHX0lECTB4ODg2MAogI2RlZmluZSBTSU9fVzgzNjI3REhHX0lECTB4YTAyMAorI2RlZmluZSBTSU9fVzgzNjY3SEdfSUQgCTB4YTUxMAogI2RlZmluZSBTSU9fSURfTUFTSwkJMHhGRkYwCiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMjg5LDYgKzI5Myw3IEBACiAJdTggcHdtX21vZGVbNF07IC8qIDAtPkRDIHZhcmlhYmxlIHZvbHRhZ2UsIDEtPlBXTSB2YXJpYWJsZSBkdXR5IGN5Y2xlICovCiAJdTggcHdtX2VuYWJsZVs0XTsgLyogMS0+bWFudWFsCiAJCQkgICAgIDItPnRoZXJtYWwgY3J1aXNlIChhbHNvIGNhbGxlZCBTbWFydEZhbiBJKSAqLworCXU4IHB3bV9udW07CQkvKiBudW1iZXIgb2YgcHdtICovCiAJdTggcHdtWzRdOwogCXU4IHRhcmdldF90ZW1wWzRdOwogCXU4IHRvbGVyYW5jZVs0XTsKQEAgLTI5OCw2ICszMDMsOSBAQAogCiAJdTggdmlkOwogCXU4IHZybTsKKworCXU4IHRlbXAzX2Rpc2FibGU7CisJdTggaW42X3NraXA7CiB9OwogCiBzdHJ1Y3QgdzgzNjI3ZWhmX3Npb19kYXRhIHsKQEAgLTg2NiwyNSArODc0LDM3IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChpbnQpZGF0YS0+dGVtcF90eXBlW25yXSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3RlbXBbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3RlbXBfaW5wdXRbXSA9IHsKIAlTRU5TT1JfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wMSwgTlVMTCwgMCksCiAJU0VOU09SX0FUVFIodGVtcDJfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMCksCiAJU0VOU09SX0FUVFIodGVtcDNfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMSksCit9OworCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV90ZW1wX21heFtdID0gewogCVNFTlNPUl9BVFRSKHRlbXAxX21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcDFfbWF4LAogCQkgICAgc3RvcmVfdGVtcDFfbWF4LCAwKSwKIAlTRU5TT1JfQVRUUih0ZW1wMl9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXBfbWF4LAogCQkgICAgc3RvcmVfdGVtcF9tYXgsIDApLAogCVNFTlNPUl9BVFRSKHRlbXAzX21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcF9tYXgsCiAJCSAgICBzdG9yZV90ZW1wX21heCwgMSksCit9OworCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV90ZW1wX21heF9oeXN0W10gPSB7CiAJU0VOU09SX0FUVFIodGVtcDFfbWF4X2h5c3QsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXAxX21heF9oeXN0LAogCQkgICAgc3RvcmVfdGVtcDFfbWF4X2h5c3QsIDApLAogCVNFTlNPUl9BVFRSKHRlbXAyX21heF9oeXN0LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wX21heF9oeXN0LAogCQkgICAgc3RvcmVfdGVtcF9tYXhfaHlzdCwgMCksCiAJU0VOU09SX0FUVFIodGVtcDNfbWF4X2h5c3QsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXBfbWF4X2h5c3QsCiAJCSAgICBzdG9yZV90ZW1wX21heF9oeXN0LCAxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3RlbXBfYWxhcm1bXSA9IHsKIAlTRU5TT1JfQVRUUih0ZW1wMV9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNCksCiAJU0VOU09SX0FUVFIodGVtcDJfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDUpLAogCVNFTlNPUl9BVFRSKHRlbXAzX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAxMyksCit9OworCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV90ZW1wX3R5cGVbXSA9IHsKIAlTRU5TT1JfQVRUUih0ZW1wMV90eXBlLCBTX0lSVUdPLCBzaG93X3RlbXBfdHlwZSwgTlVMTCwgMCksCiAJU0VOU09SX0FUVFIodGVtcDJfdHlwZSwgU19JUlVHTywgc2hvd190ZW1wX3R5cGUsIE5VTEwsIDEpLAogCVNFTlNPUl9BVFRSKHRlbXAzX3R5cGUsIFNfSVJVR08sIHNob3dfdGVtcF90eXBlLCBOVUxMLCAyKSwKQEAgLTExODEsNiArMTIwMSw4IEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2RhX3NmM19hcnJheXNfZmFuNCk7IGkrKykKIAkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV9zZjNfYXJyYXlzX2ZhbjRbaV0uZGV2X2F0dHIpOwogCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5pbl9udW07IGkrKykgeworCQlpZiAoKGkgPT0gNikgJiYgZGF0YS0+aW42X3NraXApCisJCQljb250aW51ZTsKIAkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV9pbl9pbnB1dFtpXS5kZXZfYXR0cik7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfaW5fYWxhcm1baV0uZGV2X2F0dHIpOwogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc2RhX2luX21pbltpXS5kZXZfYXR0cik7CkBAIC0xMTkyLDE1ICsxMjE0LDIyIEBACiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfZmFuX2RpdltpXS5kZXZfYXR0cik7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfZmFuX21pbltpXS5kZXZfYXR0cik7CiAJfQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cHdtX251bTsgaSsrKSB7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfcHdtW2ldLmRldl9hdHRyKTsKIAkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV9wd21fbW9kZVtpXS5kZXZfYXR0cik7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfcHdtX2VuYWJsZVtpXS5kZXZfYXR0cik7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfdGFyZ2V0X3RlbXBbaV0uZGV2X2F0dHIpOwogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc2RhX3RvbGVyYW5jZVtpXS5kZXZfYXR0cik7CiAJfQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNkYV90ZW1wKTsgaSsrKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc2RhX3RlbXBbaV0uZGV2X2F0dHIpOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaWYgKChpID09IDIpICYmIGRhdGEtPnRlbXAzX2Rpc2FibGUpCisJCQljb250aW51ZTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV90ZW1wX2lucHV0W2ldLmRldl9hdHRyKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV90ZW1wX21heFtpXS5kZXZfYXR0cik7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfdGVtcF9tYXhfaHlzdFtpXS5kZXZfYXR0cik7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfdGVtcF9hbGFybVtpXS5kZXZfYXR0cik7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfdGVtcF90eXBlW2ldLmRldl9hdHRyKTsKKwl9CiAKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbmFtZSk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2NwdTBfdmlkKTsKQEAgLTEyMjIsNiArMTI1MSw4IEBACiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQl0bXAgPSB3ODM2MjdlaGZfcmVhZF92YWx1ZShkYXRhLAogCQkJCQkgICBXODM2MjdFSEZfUkVHX1RFTVBfQ09ORklHW2ldKTsKKwkJaWYgKChpID09IDEpICYmIGRhdGEtPnRlbXAzX2Rpc2FibGUpCisJCQljb250aW51ZTsKIAkJaWYgKHRtcCAmIDB4MDEpCiAJCQl3ODM2MjdlaGZfd3JpdGVfdmFsdWUoZGF0YSwKIAkJCQkJICAgICAgVzgzNjI3RUhGX1JFR19URU1QX0NPTkZJR1tpXSwKQEAgLTEyNzIsOCArMTMwMywxNyBAQAogCWRhdGEtPm5hbWUgPSB3ODM2MjdlaGZfZGV2aWNlX25hbWVzW3Npb19kYXRhLT5raW5kXTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKIAotCS8qIDYyN0VIRyBhbmQgNjI3RUhGIGhhdmUgMTAgdm9sdGFnZSBpbnB1dHM7IERIRyBoYXMgOSAqLwotCWRhdGEtPmluX251bSA9IChzaW9fZGF0YS0+a2luZCA9PSB3ODM2MjdkaGcpID8gOSA6IDEwOworCS8qIDYyN0VIRyBhbmQgNjI3RUhGIGhhdmUgMTAgdm9sdGFnZSBpbnB1dHM7IDYyN0RIRyBhbmQgNjY3SEcgaGF2ZSA5ICovCisJZGF0YS0+aW5fbnVtID0gKHNpb19kYXRhLT5raW5kID09IHc4MzYyN2VoZikgPyAxMCA6IDk7CisJLyogNjY3SEcgaGFzIDMgcHdtcyAqLworCWRhdGEtPnB3bV9udW0gPSAoc2lvX2RhdGEtPmtpbmQgPT0gdzgzNjY3aGcpID8gMyA6IDQ7CisKKwkvKiBDaGVjayB0ZW1wMyBjb25maWd1cmF0aW9uIGJpdCBmb3IgNjY3SEcgKi8KKwlpZiAoc2lvX2RhdGEtPmtpbmQgPT0gdzgzNjY3aGcpIHsKKwkJZGF0YS0+dGVtcDNfZGlzYWJsZSA9IHc4MzYyN2VoZl9yZWFkX3ZhbHVlKGRhdGEsCisJCQkJCVc4MzYyN0VIRl9SRUdfVEVNUF9DT05GSUdbMV0pICYgMHgwMTsKKwkJZGF0YS0+aW42X3NraXAgPSAhZGF0YS0+dGVtcDNfZGlzYWJsZTsKKwl9CiAKIAkvKiBJbml0aWFsaXplIHRoZSBjaGlwICovCiAJdzgzNjI3ZWhmX2luaXRfZGV2aWNlKGRhdGEpOwpAQCAtMTI4MSw0NCArMTMyMSw2NCBAQAogCWRhdGEtPnZybSA9IHZpZF93aGljaF92cm0oKTsKIAlzdXBlcmlvX2VudGVyKHNpb19kYXRhLT5zaW9yZWcpOwogCS8qIFJlYWQgVklEIHZhbHVlICovCi0Jc3VwZXJpb19zZWxlY3Qoc2lvX2RhdGEtPnNpb3JlZywgVzgzNjI3RUhGX0xEX0hXTSk7Ci0JaWYgKHN1cGVyaW9faW5iKHNpb19kYXRhLT5zaW9yZWcsIFNJT19SRUdfVklEX0NUUkwpICYgMHg4MCkgewotCQkvKiBTZXQgVklEIGlucHV0IHNlbnNpYmlsaXR5IGlmIG5lZWRlZC4gSW4gdGhlb3J5IHRoZSBCSU9TCi0JCSAgIHNob3VsZCBoYXZlIHNldCBpdCwgYnV0IGluIHByYWN0aWNlIGl0J3Mgbm90IGFsd2F5cyB0aGUKLQkJICAgY2FzZS4gV2Ugb25seSBkbyBpdCBmb3IgdGhlIFc4MzYyN0VIRi9FSEcgYmVjYXVzZSB0aGUKLQkJICAgVzgzNjI3REhHIGlzIG1vcmUgY29tcGxleCBpbiB0aGlzIHJlc3BlY3QuICovCi0JCWlmIChzaW9fZGF0YS0+a2luZCA9PSB3ODM2MjdlaGYpIHsKLQkJCWVuX3ZybTEwID0gc3VwZXJpb19pbmIoc2lvX2RhdGEtPnNpb3JlZywKLQkJCQkJICAgICAgIFNJT19SRUdfRU5fVlJNMTApOwotCQkJaWYgKChlbl92cm0xMCAmIDB4MDgpICYmIGRhdGEtPnZybSA9PSA5MCkgewotCQkJCWRldl93YXJuKGRldiwgIlNldHRpbmcgVklEIGlucHV0IHZvbHRhZ2UgdG8gIgotCQkJCQkgIlRUTFxuIik7Ci0JCQkJc3VwZXJpb19vdXRiKHNpb19kYXRhLT5zaW9yZWcsIFNJT19SRUdfRU5fVlJNMTAsCi0JCQkJCSAgICAgZW5fdnJtMTAgJiB+MHgwOCk7Ci0JCQl9IGVsc2UgaWYgKCEoZW5fdnJtMTAgJiAweDA4KSAmJiBkYXRhLT52cm0gPT0gMTAwKSB7Ci0JCQkJZGV2X3dhcm4oZGV2LCAiU2V0dGluZyBWSUQgaW5wdXQgdm9sdGFnZSB0byAiCi0JCQkJCSAiVlJNMTBcbiIpOwotCQkJCXN1cGVyaW9fb3V0YihzaW9fZGF0YS0+c2lvcmVnLCBTSU9fUkVHX0VOX1ZSTTEwLAotCQkJCQkgICAgIGVuX3ZybTEwIHwgMHgwOCk7Ci0JCQl9Ci0JCX0KLQotCQlkYXRhLT52aWQgPSBzdXBlcmlvX2luYihzaW9fZGF0YS0+c2lvcmVnLCBTSU9fUkVHX1ZJRF9EQVRBKTsKLQkJaWYgKHNpb19kYXRhLT5raW5kID09IHc4MzYyN2VoZikgLyogNiBWSUQgcGlucyBvbmx5ICovCi0JCQlkYXRhLT52aWQgJj0gMHgzZjsKLQorCWlmIChzaW9fZGF0YS0+a2luZCA9PSB3ODM2NjdoZykgeworCQkvKiBXODM2NjdIRyBoYXMgZGlmZmVyZW50IHBpbnMgZm9yIFZJRCBpbnB1dCBhbmQgb3V0cHV0LCBzbworCQl3ZSBjYW4gZ2V0IHRoZSBWSUQgaW5wdXQgdmFsdWVzIGRpcmVjdGx5IGF0IGxvZ2ljYWwgZGV2aWNlIEQKKwkJMHhlMy4gKi8KKwkJc3VwZXJpb19zZWxlY3Qoc2lvX2RhdGEtPnNpb3JlZywgVzgzNjY3SEdfTERfVklEKTsKKwkJZGF0YS0+dmlkID0gc3VwZXJpb19pbmIoc2lvX2RhdGEtPnNpb3JlZywgMHhlMyk7CiAJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9jcHUwX3ZpZCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGV4aXRfcmVsZWFzZTsKIAl9IGVsc2UgewotCQlkZXZfaW5mbyhkZXYsICJWSUQgcGlucyBpbiBvdXRwdXQgbW9kZSwgQ1BVIFZJRCBub3QgIgotCQkJICJhdmFpbGFibGVcbiIpOworCQlzdXBlcmlvX3NlbGVjdChzaW9fZGF0YS0+c2lvcmVnLCBXODM2MjdFSEZfTERfSFdNKTsKKwkJaWYgKHN1cGVyaW9faW5iKHNpb19kYXRhLT5zaW9yZWcsIFNJT19SRUdfVklEX0NUUkwpICYgMHg4MCkgeworCQkJLyogU2V0IFZJRCBpbnB1dCBzZW5zaWJpbGl0eSBpZiBuZWVkZWQuIEluIHRoZW9yeSB0aGUKKwkJCSAgIEJJT1Mgc2hvdWxkIGhhdmUgc2V0IGl0LCBidXQgaW4gcHJhY3RpY2UgaXQncyBub3QKKwkJCSAgIGFsd2F5cyB0aGUgY2FzZS4gV2Ugb25seSBkbyBpdCBmb3IgdGhlIFc4MzYyN0VIRi9FSEcKKwkJCSAgIGJlY2F1c2UgdGhlIFc4MzYyN0RIRyBpcyBtb3JlIGNvbXBsZXggaW4gdGhpcworCQkJICAgcmVzcGVjdC4gKi8KKwkJCWlmIChzaW9fZGF0YS0+a2luZCA9PSB3ODM2MjdlaGYpIHsKKwkJCQllbl92cm0xMCA9IHN1cGVyaW9faW5iKHNpb19kYXRhLT5zaW9yZWcsCisJCQkJCQkgICAgICAgU0lPX1JFR19FTl9WUk0xMCk7CisJCQkJaWYgKChlbl92cm0xMCAmIDB4MDgpICYmIGRhdGEtPnZybSA9PSA5MCkgeworCQkJCQlkZXZfd2FybihkZXYsICJTZXR0aW5nIFZJRCBpbnB1dCAiCisJCQkJCQkgInZvbHRhZ2UgdG8gVFRMXG4iKTsKKwkJCQkJc3VwZXJpb19vdXRiKHNpb19kYXRhLT5zaW9yZWcsCisJCQkJCQkgICAgIFNJT19SRUdfRU5fVlJNMTAsCisJCQkJCQkgICAgIGVuX3ZybTEwICYgfjB4MDgpOworCQkJCX0gZWxzZSBpZiAoIShlbl92cm0xMCAmIDB4MDgpCisJCQkJCSAgICYmIGRhdGEtPnZybSA9PSAxMDApIHsKKwkJCQkJZGV2X3dhcm4oZGV2LCAiU2V0dGluZyBWSUQgaW5wdXQgIgorCQkJCQkJICJ2b2x0YWdlIHRvIFZSTTEwXG4iKTsKKwkJCQkJc3VwZXJpb19vdXRiKHNpb19kYXRhLT5zaW9yZWcsCisJCQkJCQkgICAgIFNJT19SRUdfRU5fVlJNMTAsCisJCQkJCQkgICAgIGVuX3ZybTEwIHwgMHgwOCk7CisJCQkJfQorCQkJfQorCisJCQlkYXRhLT52aWQgPSBzdXBlcmlvX2luYihzaW9fZGF0YS0+c2lvcmVnLAorCQkJCQkJU0lPX1JFR19WSURfREFUQSk7CisJCQlpZiAoc2lvX2RhdGEtPmtpbmQgPT0gdzgzNjI3ZWhmKSAvKiA2IFZJRCBwaW5zIG9ubHkgKi8KKwkJCQlkYXRhLT52aWQgJj0gMHgzZjsKKworCQkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2NwdTBfdmlkKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBleGl0X3JlbGVhc2U7CisJCX0gZWxzZSB7CisJCQlkZXZfaW5mbyhkZXYsICJWSUQgcGlucyBpbiBvdXRwdXQgbW9kZSwgQ1BVIFZJRCBub3QgIgorCQkJCSAiYXZhaWxhYmxlXG4iKTsKKwkJfQogCX0KIAogCS8qIGZhbjQgYW5kIGZhbjUgc2hhcmUgc29tZSBwaW5zIHdpdGggdGhlIEdQSU8gYW5kIHNlcmlhbCBmbGFzaCAqLwotCi0JZmFuNXBpbiA9IHN1cGVyaW9faW5iKHNpb19kYXRhLT5zaW9yZWcsIDB4MjQpICYgMHgyOwotCWZhbjRwaW4gPSBzdXBlcmlvX2luYihzaW9fZGF0YS0+c2lvcmVnLCAweDI5KSAmIDB4NjsKKwlpZiAoc2lvX2RhdGEtPmtpbmQgPT0gdzgzNjY3aGcpIHsKKwkJZmFuNXBpbiA9IHN1cGVyaW9faW5iKHNpb19kYXRhLT5zaW9yZWcsIDB4MjcpICYgMHgyMDsKKwkJZmFuNHBpbiA9IHN1cGVyaW9faW5iKHNpb19kYXRhLT5zaW9yZWcsIDB4MjcpICYgMHg0MDsKKwl9IGVsc2UgeworCQlmYW41cGluID0gIShzdXBlcmlvX2luYihzaW9fZGF0YS0+c2lvcmVnLCAweDI0KSAmIDB4MDIpOworCQlmYW40cGluID0gIShzdXBlcmlvX2luYihzaW9fZGF0YS0+c2lvcmVnLCAweDI5KSAmIDB4MDYpOworCX0KIAlzdXBlcmlvX2V4aXQoc2lvX2RhdGEtPnNpb3JlZyk7CiAKIAkvKiBJdCBsb29rcyBsaWtlIGZhbjQgYW5kIGZhbjUgcGlucyBjYW4gYmUgYWx0ZXJuYXRpdmVseSB1c2VkCkBAIC0xMzI5LDkgKzEzODksOSBAQAogCiAJZGF0YS0+aGFzX2ZhbiA9IDB4MDc7IC8qIGZhbjEsIGZhbjIgYW5kIGZhbjMgKi8KIAlpID0gdzgzNjI3ZWhmX3JlYWRfdmFsdWUoZGF0YSwgVzgzNjI3RUhGX1JFR19GQU5ESVYxKTsKLQlpZiAoKGkgJiAoMSA8PCAyKSkgJiYgKCFmYW40cGluKSkKKwlpZiAoKGkgJiAoMSA8PCAyKSkgJiYgZmFuNHBpbikKIAkJZGF0YS0+aGFzX2ZhbiB8PSAoMSA8PCAzKTsKLQlpZiAoIShpICYgKDEgPDwgMSkpICYmICghZmFuNXBpbikpCisJaWYgKCEoaSAmICgxIDw8IDEpKSAmJiBmYW41cGluKQogCQlkYXRhLT5oYXNfZmFuIHw9ICgxIDw8IDQpOwogCiAJLyogUmVhZCBmYW4gY2xvY2sgZGl2aWRlcnMgaW1tZWRpYXRlbHkgKi8KQEAgLTEzNDQsMTQgKzE0MDQsMTYgQEAKIAkJCWdvdG8gZXhpdF9yZW1vdmU7CiAKIAkvKiBpZiBmYW40IGlzIGVuYWJsZWQgY3JlYXRlIHRoZSBzZjMgZmlsZXMgZm9yIGl0ICovCi0JaWYgKGRhdGEtPmhhc19mYW4gJiAoMSA8PCAzKSkKKwlpZiAoKGRhdGEtPmhhc19mYW4gJiAoMSA8PCAzKSkgJiYgZGF0YS0+cHdtX251bSA+PSA0KQogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZGFfc2YzX2FycmF5c19mYW40KTsgaSsrKSB7CiAJCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCiAJCQkJJnNkYV9zZjNfYXJyYXlzX2ZhbjRbaV0uZGV2X2F0dHIpKSkKIAkJCQlnb3RvIGV4aXRfcmVtb3ZlOwogCQl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+aW5fbnVtOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPmluX251bTsgaSsrKSB7CisJCWlmICgoaSA9PSA2KSAmJiBkYXRhLT5pbjZfc2tpcCkKKwkJCWNvbnRpbnVlOwogCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfaW5faW5wdXRbaV0uZGV2X2F0dHIpKQogCQkJfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCiAJCQkJJnNkYV9pbl9hbGFybVtpXS5kZXZfYXR0cikpCkBAIC0xMzYwLDYgKzE0MjIsNyBAQAogCQkJfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCiAJCQkJJnNkYV9pbl9tYXhbaV0uZGV2X2F0dHIpKSkKIAkJCWdvdG8gZXhpdF9yZW1vdmU7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewogCQlpZiAoZGF0YS0+aGFzX2ZhbiAmICgxIDw8IGkpKSB7CkBAIC0xMzcyLDcgKzE0MzUsNyBAQAogCQkJCXx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAogCQkJCQkmc2RhX2Zhbl9taW5baV0uZGV2X2F0dHIpKSkKIAkJCQlnb3RvIGV4aXRfcmVtb3ZlOwotCQkJaWYgKGkgPCA0ICYmIC8qIHc4MzYyN2VoZiBvbmx5IGhhcyA0IHB3bSAqLworCQkJaWYgKGkgPCBkYXRhLT5wd21fbnVtICYmCiAJCQkJKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAogCQkJCQkmc2RhX3B3bVtpXS5kZXZfYXR0cikpCiAJCQkJfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCkBAIC0xMzg3LDkgKzE0NTAsMjEgQEAKIAkJfQogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNkYV90ZW1wKTsgaSsrKQotCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfdGVtcFtpXS5kZXZfYXR0cikpKQorCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaWYgKChpID09IDIpICYmIGRhdGEtPnRlbXAzX2Rpc2FibGUpCisJCQljb250aW51ZTsKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZGFfdGVtcF9pbnB1dFtpXS5kZXZfYXR0cikpCisJCQl8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmc2RhX3RlbXBfbWF4W2ldLmRldl9hdHRyKSkKKwkJCXx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZGFfdGVtcF9tYXhfaHlzdFtpXS5kZXZfYXR0cikpCisJCQl8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmc2RhX3RlbXBfYWxhcm1baV0uZGV2X2F0dHIpKQorCQkJfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJJnNkYV90ZW1wX3R5cGVbaV0uZGV2X2F0dHIpKSkKIAkJCWdvdG8gZXhpdF9yZW1vdmU7CisJfQogCiAJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX25hbWUpOwogCWlmIChlcnIpCkBAIC0xNDQyLDYgKzE1MTcsNyBAQAogCXN0YXRpYyBjb25zdCBjaGFyIF9faW5pdGRhdGEgc2lvX25hbWVfVzgzNjI3RUhGW10gPSAiVzgzNjI3RUhGIjsKIAlzdGF0aWMgY29uc3QgY2hhciBfX2luaXRkYXRhIHNpb19uYW1lX1c4MzYyN0VIR1tdID0gIlc4MzYyN0VIRyI7CiAJc3RhdGljIGNvbnN0IGNoYXIgX19pbml0ZGF0YSBzaW9fbmFtZV9XODM2MjdESEdbXSA9ICJXODM2MjdESEciOworCXN0YXRpYyBjb25zdCBjaGFyIF9faW5pdGRhdGEgc2lvX25hbWVfVzgzNjY3SEdbXSA9ICJXODM2NjdIRyI7CiAKIAl1MTYgdmFsOwogCWNvbnN0IGNoYXIgKnNpb19uYW1lOwpAQCAtMTQ2Niw2ICsxNTQyLDEwIEBACiAJCXNpb19kYXRhLT5raW5kID0gdzgzNjI3ZGhnOwogCQlzaW9fbmFtZSA9IHNpb19uYW1lX1c4MzYyN0RIRzsKIAkJYnJlYWs7CisJY2FzZSBTSU9fVzgzNjY3SEdfSUQ6CisJCXNpb19kYXRhLT5raW5kID0gdzgzNjY3aGc7CisJCXNpb19uYW1lID0gc2lvX25hbWVfVzgzNjY3SEc7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmICh2YWwgIT0gMHhmZmZmKQogCQkJcHJfZGVidWcoRFJWTkFNRSAiOiB1bnN1cHBvcnRlZCBjaGlwIElEOiAweCUwNHhcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCmluZGV4IDIzMDIzOGQuLjEwNDExODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAKIC8qIEk4MDEgU01CdXMgYWRkcmVzcyBvZmZzZXRzICovCiAjZGVmaW5lIFNNQkhTVFNUUwkoMCArIGk4MDFfc21iYSkKQEAgLTYxNiwxMCArNjE3LDgxIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgaW5wdXRfYXBhbmVsX2luaXQodm9pZCkge30KICNlbmRpZgogCisjaWYgZGVmaW5lZCBDT05GSUdfU0VOU09SU19GU0NITUQgfHwgZGVmaW5lZCBDT05GSUdfU0VOU09SU19GU0NITURfTU9EVUxFCitzdHJ1Y3QgZG1pX29uYm9hcmRfZGV2aWNlX2luZm8geworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTggdHlwZTsKKwl1bnNpZ25lZCBzaG9ydCBpMmNfYWRkcjsKKwljb25zdCBjaGFyICppMmNfdHlwZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZG1pX29uYm9hcmRfZGV2aWNlX2luZm8gX19kZXZpbml0ZGF0YSBkbWlfZGV2aWNlc1tdID0geworCXsgIlN5bGV1cyIsIERNSV9ERVZfVFlQRV9PVEhFUiwgMHg3MywgImZzY3N5bCIgfSwKKwl7ICJIZXJtZXMiLCBETUlfREVWX1RZUEVfT1RIRVIsIDB4NzMsICJmc2NoZXIiIH0sCisJeyAiSGFkZXMiLCAgRE1JX0RFVl9UWVBFX09USEVSLCAweDczLCAiZnNjaGRzIiB9LAorfTsKKworc3RhdGljIHZvaWQgX19kZXZpbml0IGRtaV9jaGVja19vbmJvYXJkX2RldmljZSh1OCB0eXBlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkgICAgICAgc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCWludCBpOworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZG1pX2RldmljZXMpOyBpKyspIHsKKwkJLyogJiB+MHg4MCwgaWdub3JlIGVuYWJsZWQvZGlzYWJsZWQgYml0ICovCisJCWlmICgodHlwZSAmIH4weDgwKSAhPSBkbWlfZGV2aWNlc1tpXS50eXBlKQorCQkJY29udGludWU7CisJCWlmIChzdHJjbXAobmFtZSwgZG1pX2RldmljZXNbaV0ubmFtZSkpCisJCQljb250aW51ZTsKKworCQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKKwkJaW5mby5hZGRyID0gZG1pX2RldmljZXNbaV0uaTJjX2FkZHI7CisJCXN0cmxjcHkoaW5mby50eXBlLCBkbWlfZGV2aWNlc1tpXS5pMmNfdHlwZSwgSTJDX05BTUVfU0laRSk7CisJCWkyY19uZXdfZGV2aWNlKGFkYXAsICZpbmZvKTsKKwkJYnJlYWs7CisJfQorfQorCisvKiBXZSB1c2Ugb3VyIG93biBmdW5jdGlvbiB0byBjaGVjayBmb3Igb25ib2FyZCBkZXZpY2VzIGluc3RlYWQgb2YKKyAgIGRtaV9maW5kX2RldmljZSgpIGFzIHNvbWUgYnVnZ3kgQklPUydzIGhhdmUgdGhlIGRldmljZXMgd2UgYXJlIGludGVyZXN0ZWQKKyAgIGluIG1hcmtlZCBhcyBkaXNhYmxlZCAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IGRtaV9jaGVja19vbmJvYXJkX2RldmljZXMoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtLAorCQkJCQkJdm9pZCAqYWRhcCkKK3sKKwlpbnQgaSwgY291bnQ7CisKKwlpZiAoZG0tPnR5cGUgIT0gMTApCisJCXJldHVybjsKKworCWNvdW50ID0gKGRtLT5sZW5ndGggLSBzaXplb2Yoc3RydWN0IGRtaV9oZWFkZXIpKSAvIDI7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJY29uc3QgdTggKmQgPSAoY2hhciAqKShkbSArIDEpICsgKGkgKiAyKTsKKwkJY29uc3QgY2hhciAqbmFtZSA9ICgoY2hhciAqKSBkbSkgKyBkbS0+bGVuZ3RoOworCQl1OCB0eXBlID0gZFswXTsKKwkJdTggcyA9IGRbMV07CisKKwkJaWYgKCFzKQorCQkJY29udGludWU7CisJCXMtLTsKKwkJd2hpbGUgKHMgPiAwICYmIG5hbWVbMF0pIHsKKwkJCW5hbWUgKz0gc3RybGVuKG5hbWUpICsgMTsKKwkJCXMtLTsKKwkJfQorCQlpZiAobmFtZVswXSA9PSAwKSAvKiBCb2d1cyBzdHJpbmcgcmVmZXJlbmNlICovCisJCQljb250aW51ZTsKKworCQlkbWlfY2hlY2tfb25ib2FyZF9kZXZpY2UodHlwZSwgbmFtZSwgYWRhcCk7CisJfQorfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGk4MDFfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewogCXVuc2lnbmVkIGNoYXIgdGVtcDsKIAlpbnQgZXJyOworI2lmIGRlZmluZWQgQ09ORklHX1NFTlNPUlNfRlNDSE1EIHx8IGRlZmluZWQgQ09ORklHX1NFTlNPUlNfRlNDSE1EX01PRFVMRQorCWNvbnN0IGNoYXIgKnZlbmRvcjsKKyNlbmRpZgogCiAJSTgwMV9kZXYgPSBkZXY7CiAJaTgwMV9mZWF0dXJlcyA9IDA7CkBAIC03MTIsNiArNzg0LDExIEBACiAJCWkyY19uZXdfZGV2aWNlKCZpODAxX2FkYXB0ZXIsICZpbmZvKTsKIAl9CiAjZW5kaWYKKyNpZiBkZWZpbmVkIENPTkZJR19TRU5TT1JTX0ZTQ0hNRCB8fCBkZWZpbmVkIENPTkZJR19TRU5TT1JTX0ZTQ0hNRF9NT0RVTEUKKwl2ZW5kb3IgPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CT0FSRF9WRU5ET1IpOworCWlmICh2ZW5kb3IgJiYgIXN0cmNtcCh2ZW5kb3IsICJGVUpJVFNVIFNJRU1FTlMiKSkKKwkJZG1pX3dhbGsoZG1pX2NoZWNrX29uYm9hcmRfZGV2aWNlcywgJmk4MDFfYWRhcHRlcik7CisjZW5kaWYKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYwppbmRleCAyYjg0N2Q4Li4yNmJmMzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKQEAgLTcwLDcgKzcwLDcgQEAKIAkJLyogUmVhZCBhZ2FpbiB0byBhbGxvdyByZWdpc3RlciB0byBzdGFiaWxpc2UgKi8KIAkJaTJjLT5pbnRlcnJ1cHQgPSByZWFkYihpMmMtPmJhc2UgKyBNUENfSTJDX1NSKTsKIAkJd3JpdGViKDAsIGkyYy0+YmFzZSArIE1QQ19JMkNfU1IpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmkyYy0+cXVldWUpOworCQl3YWtlX3VwKCZpMmMtPnF1ZXVlKTsKIAl9CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTE1LDEzICsxMTUsMTAgQEAKIAkJd3JpdGViKDAsIGkyYy0+YmFzZSArIE1QQ19JMkNfU1IpOwogCX0gZWxzZSB7CiAJCS8qIEludGVycnVwdCBtb2RlICovCi0JCXJlc3VsdCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGkyYy0+cXVldWUsCisJCXJlc3VsdCA9IHdhaXRfZXZlbnRfdGltZW91dChpMmMtPnF1ZXVlLAogCQkJKGkyYy0+aW50ZXJydXB0ICYgQ1NSX01JRiksIHRpbWVvdXQpOwogCi0JCWlmICh1bmxpa2VseShyZXN1bHQgPCAwKSkgewotCQkJcHJfZGVidWcoIkkyQzogd2FpdCBpbnRlcnJ1cHRlZFxuIik7Ci0JCQl3cml0ZWNjcihpMmMsIDApOwotCQl9IGVsc2UgaWYgKHVubGlrZWx5KCEoaTJjLT5pbnRlcnJ1cHQgJiBDU1JfTUlGKSkpIHsKKwkJaWYgKHVubGlrZWx5KCEoaTJjLT5pbnRlcnJ1cHQgJiBDU1JfTUlGKSkpIHsKIAkJCXByX2RlYnVnKCJJMkM6IHdhaXQgdGltZW91dFxuIik7CiAJCQl3cml0ZWNjcihpMmMsIDApOwogCQkJcmVzdWx0ID0gLUVUSU1FRE9VVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL0tjb25maWcgYi9kcml2ZXJzL2kyYy9jaGlwcy9LY29uZmlnCmluZGV4IGM4MDMxMmMuLjhmOGM4MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvS2NvbmZpZwpAQCAtNjQsMTkgKzY0LDYgQEAKIAkgIFRoaXMgZHJpdmVyIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgZHJvcHBlZCBzb29uLiBVc2UKIAkgIGRyaXZlcnMvZ3Bpby9wY2E5NTN4LmMgaW5zdGVhZC4KIAotY29uZmlnIFNFTlNPUlNfUENGODU5MQotCXRyaXN0YXRlICJQaGlsaXBzIFBDRjg1OTEiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgUGhpbGlwcyBQQ0Y4NTkxIGNoaXBzLgotCi0JICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlZCBwY2Y4NTkxLgotCi0JICBUaGVzZSBkZXZpY2VzIGFyZSBoYXJkIHRvIGRldGVjdCBhbmQgcmFyZWx5IGZvdW5kIG9uIG1haW5zdHJlYW0KLQkgIGhhcmR3YXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIFNFTlNPUlNfTUFYNjg3NQogCXRyaXN0YXRlICJNYXhpbSBNQVg2ODc1IFBvd2VyIHN1cHBseSBzdXBlcnZpc29yIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9NYWtlZmlsZSBiL2RyaXZlcnMvaTJjL2NoaXBzL01ha2VmaWxlCmluZGV4IGQxNDJmMjMuLjU1YTM3NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL01ha2VmaWxlCkBAIC0xNSw3ICsxNSw2IEBACiBvYmotJChDT05GSUdfU0VOU09SU19QQ0E5NTM5KQkrPSBwY2E5NTM5Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1BDRjg1NzQpCSs9IHBjZjg1NzQubwogb2JqLSQoQ09ORklHX1BDRjg1NzUpCQkrPSBwY2Y4NTc1Lm8KLW9iai0kKENPTkZJR19TRU5TT1JTX1BDRjg1OTEpCSs9IHBjZjg1OTEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfVFNMMjU1MCkJKz0gdHNsMjU1MC5vCiAKIGlmZXEgKCQoQ09ORklHX0kyQ19ERUJVR19DSElQKSx5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYWxpbTE1eDMuYyBiL2RyaXZlcnMvaWRlL2FsaW0xNXgzLmMKaW5kZXggZDM1MTNiNi4uZDUxNjE2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYWxpbTE1eDMuYworKysgYi9kcml2ZXJzL2lkZS9hbGltMTV4My5jCkBAIC0xOTEsMTcgKzE5MSwxOCBAQAogLyoqCiAgKglhbGkxNXgzX2RtYV9zZXR1cAktCWJlZ2luIGEgRE1BIHBoYXNlCiAgKglAZHJpdmU6CXRhcmdldCBkZXZpY2UKKyAqCUBjbWQ6IGNvbW1hbmQKICAqCiAgKglSZXR1cm5zIDEgaWYgdGhlIERNQSBjYW5ub3QgYmUgcGVyZm9ybWVkLCB6ZXJvIG9uIHN1Y2Nlc3MuCiAgKi8KIAotc3RhdGljIGludCBhbGkxNXgzX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IGFsaTE1eDNfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZiAobTUyMjlfcmV2aXNpb24gPCAweEMyICYmIGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzaykgewotCQlpZiAocnFfZGF0YV9kaXIoZHJpdmUtPmh3aWYtPnJxKSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpCiAJCQlyZXR1cm4gMTsJLyogdHJ5IFBJTyBpbnN0ZWFkIG9mIERNQSAqLwogCX0KLQlyZXR1cm4gaWRlX2RtYV9zZXR1cChkcml2ZSk7CisJcmV0dXJuIGlkZV9kbWFfc2V0dXAoZHJpdmUsIGNtZCk7CiB9CiAKIC8qKgpAQCAtNTAzLDExICs1MDQsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgYWxpX2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gYWxpMTV4M19kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hdDkxX2lkZS5jIGIvZHJpdmVycy9pZGUvYXQ5MV9pZGUuYwppbmRleCAxYmI1MGY0Li4yNzU0NzEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hdDkxX2lkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2F0OTFfaWRlLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCXNldF9zbWNfdGltaW5ncyhjaGlwc2VsZWN0LCBjeWNsZSwgc2V0dXAsIHB1bHNlLCBkYXRhX2Zsb2F0LCB1c2VfaW9yZHkpOwogfQogCi1zdGF0aWMgdm9pZCBhdDkxX2lkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgYXQ5MV9pZGVfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkJdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKQEAgLTE1NiwxMSArMTU2LDExIEBACiAJbGVuKys7CiAKIAllbnRlcl8xNmJpdChjaGlwc2VsZWN0LCBtb2RlKTsKLQlfX2lkZV9tbV9pbnN3KCh2b2lkIF9faW9tZW0gKikgaW9fcG9ydHMtPmRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKKwlyZWFkc3coKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7CiAJbGVhdmVfMTZiaXQoY2hpcHNlbGVjdCwgbW9kZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0OTFfaWRlX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgYXQ5MV9pZGVfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJCSB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwpAQCAtMTcxLDcgKzE3MSw3IEBACiAJcGRiZygiY3MgJXUgYnVmICVwIGxlbiAlZFxuIiwgY2hpcHNlbGVjdCwgIGJ1ZiwgbGVuKTsKIAogCWVudGVyXzE2Yml0KGNoaXBzZWxlY3QsIG1vZGUpOwotCV9faWRlX21tX291dHN3KCh2b2lkIF9faW9tZW0gKikgaW9fcG9ydHMtPmRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKKwl3cml0ZXN3KCh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+ZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOwogCWxlYXZlXzE2Yml0KGNoaXBzZWxlY3QsIG1vZGUpOwogfQogCkBAIC0xODUsNTUgKzE4NSw1NSBAQAogCXdyaXRlYih2YWx1ZSwgKHZvaWQgX19pb21lbSAqKSBwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQgYXQ5MV9pZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCitzdGF0aWMgdm9pZCBhdDkxX2lkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7Ci0JdTggSElISSA9ICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgPyAweEUwIDogMHhFRjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOworCXU4IEhJSEkgPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgPyAweEUwIDogMHhFRjsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19GTEFHR0VEKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX0ZURkxBR19GTEFHR0VEKQogCQlISUhJID0gMHhGRjsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREFUQSkgeworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX0ZURkxBR19PVVRfREFUQSkgewogCQl1MTYgZGF0YSA9ICh0Zi0+aG9iX2RhdGEgPDwgOCkgfCB0Zi0+ZGF0YTsKIAogCQlhdDkxX2lkZV9vdXRwdXRfZGF0YShkcml2ZSwgTlVMTCwgJmRhdGEsIDIpOwogCX0KIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQogCQlpZGVfbW1fb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCiAJCWlkZV9tbV9vdXRiKHRmLT5ob2JfbnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKIAkJaWRlX21tX291dGIodGYtPmhvYl9sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKIAkJaWRlX21tX291dGIodGYtPmhvYl9sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKIAkJaWRlX21tX291dGIodGYtPmhvYl9sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKIAkJaWRlX21tX291dGIodGYtPmZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQogCQlpZGVfbW1fb3V0Yih0Zi0+bnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCiAJCWlkZV9tbV9vdXRiKHRmLT5sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCiAJCWlkZV9tbV9vdXRiKHRmLT5sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCiAJCWlkZV9tbV9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCiAJCWlkZV9tbV9vdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LCBpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogfQogCi1zdGF0aWMgdm9pZCBhdDkxX2lkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3N0YXRpYyB2b2lkIGF0OTFfaWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RBVEEpIHsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9GVEZMQUdfSU5fREFUQSkgewogCQl1MTYgZGF0YTsKIAogCQlhdDkxX2lkZV9pbnB1dF9kYXRhKGRyaXZlLCBOVUxMLCAmZGF0YSwgMik7CkBAIC0yNDQsMzEgKzI0NCwzMSBAQAogCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KIAlpZGVfbW1fb3V0YihBVEFfREVWQ1RMX09CUyAmIH4weDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKIAkJdGYtPmZlYXR1cmUgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKIAkJdGYtPm5zZWN0ICA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCiAJCXRmLT5sYmFsICAgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCiAJCXRmLT5sYmFtICAgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCiAJCXRmLT5sYmFoICAgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQogCQl0Zi0+ZGV2aWNlID0gaWRlX21tX2luYihpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKIAkJaWRlX21tX291dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCiAJCQl0Zi0+aG9iX2ZlYXR1cmUgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCiAJCQl0Zi0+aG9iX25zZWN0ICAgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKIAkJCXRmLT5ob2JfbGJhbCAgICA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCiAJCQl0Zi0+aG9iX2xiYW0gICAgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQogCQkJdGYtPmhvYl9sYmFoICAgID0gaWRlX21tX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMgYi9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMKaW5kZXggMTU0ZWMyYy4uZDNhOWQ2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYwpAQCAtODYsMTMgKzg2LDEzIEBACiAJY3RwLT5jdXJfcHRyID0gYXUxeHh4X2RkbWFfZ2V0X25leHRwdHJfdmlydChkcCk7CiB9CiAKLXN0YXRpYyB2b2lkIGF1MXh4eF9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgYXUxeHh4X2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJICAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWF1aWRlX2luc3coZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKIH0KIAotc3RhdGljIHZvaWQgYXUxeHh4X291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgYXUxeHh4X291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKIAkJCSAgICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJYXVpZGVfb3V0c3coZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKQEAgLTIwOSwyMyArMjA5LDE3IEBACiAgKi8KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERV9BVTFYWFhfTURNQTJfREJETUEKLXN0YXRpYyBpbnQgYXVpZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIGludCBhdWlkZV9idWlsZF9kbWF0YWJsZShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7Ci0JaW50IGksIGlzd3JpdGUsIGNvdW50ID0gMDsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7CiAJX2F1aWRlX2h3aWYgKmFod2lmID0gJmF1aWRlX2h3aWY7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgaSA9IGNtZC0+c2dfbmVudHMsIGNvdW50ID0gMDsKKwlpbnQgaXN3cml0ZSA9ICEhKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpOwogCi0JaXN3cml0ZSA9IChycV9kYXRhX2RpcihycSkgPT0gV1JJVEUpOwogCS8qIFNhdmUgZm9yIGludGVycnVwdCBjb250ZXh0ICovCiAJYWh3aWYtPmRyaXZlID0gZHJpdmU7CiAKLQlod2lmLT5zZ19uZW50cyA9IGkgPSBpZGVfYnVpbGRfc2dsaXN0KGRyaXZlLCBycSk7Ci0KLQlpZiAoIWkpCi0JCXJldHVybiAwOwotCiAJLyogZmlsbCB0aGUgZGVzY3JpcHRvcnMgKi8KIAlzZyA9IGh3aWYtPnNnX3RhYmxlOwogCXdoaWxlIChpICYmIHNnX2RtYV9sZW4oc2cpKSB7CkBAIC0yODYsMTIgKzI4MCw3IEBACiAKIHN0YXRpYyBpbnQgYXVpZGVfZG1hX2VuZChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCi0JaWYgKGh3aWYtPnNnX25lbnRzKSB7Ci0JCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKLQkJaHdpZi0+c2dfbmVudHMgPSAwOwotCX0KKwlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMwMSwxOSArMjkwLDEwIEBACiB9CiAKIAotc3RhdGljIHZvaWQgYXVpZGVfZG1hX2V4ZWNfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY29tbWFuZCkKK3N0YXRpYyBpbnQgYXVpZGVfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKLQkvKiBpc3N1ZSBjbWQgdG8gZHJpdmUgKi8KLQlpZGVfZXhlY3V0ZV9jb21tYW5kKGRyaXZlLCBjb21tYW5kLCAmaWRlX2RtYV9pbnRyLAotCQkJICAgICgyKldBSVRfQ01EKSwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBpbnQgYXVpZGVfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7Ci0KLQlpZiAoIWF1aWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlKSkgewotCQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7CisJaWYgKGF1aWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBjbWQpID09IDApIHsKKwkJaWRlX21hcF9zZyhkcml2ZSwgY21kKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0zNjksNyArMzQ5LDYgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgYXUxeHh4X2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBhdWlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBhdWlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBhdWlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBhdWlkZV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gYXVpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGF1aWRlX2RtYV90ZXN0X2lycSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2J1ZGRoYS5jIGIvZHJpdmVycy9pZGUvYnVkZGhhLmMKaW5kZXggYzVhM2M5ZS4uZDAyOGY4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYnVkZGhhLmMKKysrIGIvZHJpdmVycy9pZGUvYnVkZGhhLmMKQEAgLTE0Myw2ICsxNDMsMTEgQEAKIAlody0+Y2hpcHNldCA9IGlkZV9nZW5lcmljOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gYnVkZGhhX3BvcnRfaW5mbyA9IHsKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTU1JTyB8IElERV9IRkxBR19OT19ETUEsCisJLmlycV9mbGFncwkJPSBJUlFGX1NIQVJFRCwKK307CisKICAgICAvKgogICAgICAqICBQcm9iZSBmb3IgYSBCdWRkaGEgb3IgQ2F0d2Vhc2VsIElERSBpbnRlcmZhY2UKICAgICAgKi8KQEAgLTE3MiwxMCArMTc3LDYgQEAKIAkJCiAJCWJvYXJkID0gei0+cmVzb3VyY2Uuc3RhcnQ7CiAKLS8qCi0gKiBGSVhNRTogd2Ugbm93IGhhdmUgc2VsZWN0YWJsZSBtbWlvIHYvcyBpb21pbyB0cmFuc3BvcnRzLgotICovCi0KIAkJaWYodHlwZSAhPSBCT0FSRF9YU1VSRikgewogCQkJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oYm9hcmQrQlVEREhBX0JBU0UxLCAweDgwMCwgIklERSIpKQogCQkJCWNvbnRpbnVlOwpAQCAtMjI0LDcgKzIyNSw3IEBACiAJCQlod3NbaV0gPSAmaHdbaV07CiAJCX0KIAotCQlpZGVfaG9zdF9hZGQoTlVMTCwgaHdzLCBOVUxMKTsKKwkJaWRlX2hvc3RfYWRkKCZidWRkaGFfcG9ydF9pbmZvLCBod3MsIE5VTEwpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY21kNjR4LmMgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwppbmRleCBhZWVlMDM2Li5iZjBlM2Y0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jbWQ2NHguYworKysgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwpAQCAtMzc5LDExICszNzksMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgY21kNjR4X2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGNtZDY0eF9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gY21kNjR4X2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKQEAgLTM5MSwxMSArMzkxLDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIGNtZDY0Nl9yZXYxX2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGNtZDY0Nl8xX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBpZGVfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwpAQCAtNDAzLDExICs0MDMsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgY21kNjQ4X2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGNtZDY0OF9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gY21kNjQ4X2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2NzNTUzNi5jIGIvZHJpdmVycy9pZGUvY3M1NTM2LmMKaW5kZXggN2E2MmRiNy4uZDVkY2Y0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvY3M1NTM2LmMKKysrIGIvZHJpdmVycy9pZGUvY3M1NTM2LmMKQEAgLTIzMSwxMSArMjMxLDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIGNzNTUzNl9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gY3M1NTM2X2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBjczU1MzZfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9kZWxraW5fY2IuYyBiL2RyaXZlcnMvaWRlL2RlbGtpbl9jYi5jCmluZGV4IGJhY2IxMTkuLmYxNTNiOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2RlbGtpbl9jYi5jCisrKyBiL2RyaXZlcnMvaWRlL2RlbGtpbl9jYi5jCkBAIC02Niw2ICs2Niw3IEBACiAJLnBvcnRfb3BzCQk9ICZkZWxraW5fY2JfcG9ydF9vcHMsCiAJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX0lPXzMyQklUIHwgSURFX0hGTEFHX1VOTUFTS19JUlFTIHwKIAkJCQkgIElERV9IRkxBR19OT19ETUEsCisJLmlycV9mbGFncwkJPSBJUlFGX1NIQVJFRCwKIAkuaW5pdF9jaGlwc2V0CQk9IGRlbGtpbl9jYl9pbml0X2NoaXBzZXQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9kdGMyMjc4LmMgYi9kcml2ZXJzL2lkZS9kdGMyMjc4LmMKaW5kZXggNjg5YjJlNC4uYzZiMTM4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvZHRjMjI3OC5jCisrKyBiL2RyaXZlcnMvaWRlL2R0YzIyNzguYwpAQCAtMTAwLDcgKzEwMCw4IEBACiAJCQkJICBJREVfSEZMQUdfSU9fMzJCSVQgfAogCQkJCSAgLyogZGlzYWxsb3cgLT5pb18zMmJpdCBjaGFuZ2VzICovCiAJCQkJICBJREVfSEZMQUdfTk9fSU9fMzJCSVQgfAotCQkJCSAgSURFX0hGTEFHX05PX0RNQSwKKwkJCQkgIElERV9IRkxBR19OT19ETUEgfAorCQkJCSAgSURFX0hGTEFHX0RUQzIyNzgsCiAJLnBpb19tYXNrCQk9IEFUQV9QSU80LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvZmFsY29uaWRlLmMgYi9kcml2ZXJzL2lkZS9mYWxjb25pZGUuYwppbmRleCBhNjM4ZTk1Li5iMzY4YTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9mYWxjb25pZGUuYworKysgYi9kcml2ZXJzL2lkZS9mYWxjb25pZGUuYwpAQCAtNDAsMjkgKzQwLDQ4IEBACiAgICAgICogIHdoaWNoIGlzIHNoYXJlZCBiZXR3ZWVuIHNldmVyYWwgZHJpdmVycy4KICAgICAgKi8KIAotaW50IGZhbGNvbmlkZV9pbnRyX2xvY2s7Ci1FWFBPUlRfU1lNQk9MKGZhbGNvbmlkZV9pbnRyX2xvY2spOworc3RhdGljIGludCBmYWxjb25pZGVfaW50cl9sb2NrOwogCi1zdGF0aWMgdm9pZCBmYWxjb25pZGVfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKK3N0YXRpYyB2b2lkIGZhbGNvbmlkZV9yZWxlYXNlX2xvY2sodm9pZCkKK3sKKwlpZiAoZmFsY29uaWRlX2ludHJfbG9jayA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJ1Z1xuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCWZhbGNvbmlkZV9pbnRyX2xvY2sgPSAwOworCXN0ZG1hX3JlbGVhc2UoKTsKK30KKworc3RhdGljIHZvaWQgZmFsY29uaWRlX2dldF9sb2NrKGlycV9oYW5kbGVyX3QgaGFuZGxlciwgdm9pZCAqZGF0YSkKK3sKKwlpZiAoZmFsY29uaWRlX2ludHJfbG9jayA9PSAwKSB7CisJCWlmIChpbl9pbnRlcnJ1cHQoKSA+IDApCisJCQlwYW5pYygiRmFsY29uIElERSBoYXNuJ3QgU1QtRE1BIGxvY2sgaW4gaW50ZXJydXB0Iik7CisJCXN0ZG1hX2xvY2soaGFuZGxlciwgZGF0YSk7CisJCWZhbGNvbmlkZV9pbnRyX2xvY2sgPSAxOworCX0KK30KKworc3RhdGljIHZvaWQgZmFsY29uaWRlX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJCSB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyOwogCi0JaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzayAmJiBycSAmJiBycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMpCisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzayAmJiBjbWQgJiYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRlMpKQogCQlyZXR1cm4gaW5zdyhkYXRhX2FkZHIsIGJ1ZiwgKGxlbiArIDEpIC8gMik7CiAKLQlpbnN3X3N3YXB3KGRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKKwlyYXdfaW5zd19zd2FwdygodTE2ICopZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwogfQogCi1zdGF0aWMgdm9pZCBmYWxjb25pZGVfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCitzdGF0aWMgdm9pZCBmYWxjb25pZGVfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJCSAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyID0gZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcjsKIAotCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2sgJiYgcnEgJiYgcnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKQorCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2sgJiYgY21kICYmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZTKSkKIAkJcmV0dXJuIG91dHN3KGRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKIAotCW91dHN3X3N3YXB3KGRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKKwlyYXdfb3V0c3dfc3dhcHcoKHUxNiAqKWRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKIH0KIAogLyogQXRhcmkgaGFzIGEgYnl0ZS1zd2FwcGVkIElERSBpbnRlcmZhY2UgKi8KQEAgLTgxLDggKzEwMCwxMiBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGZhbGNvbmlkZV9wb3J0X2luZm8gPSB7CisJLmdldF9sb2NrCQk9IGZhbGNvbmlkZV9nZXRfbG9jaywKKwkucmVsZWFzZV9sb2NrCQk9IGZhbGNvbmlkZV9yZWxlYXNlX2xvY2ssCiAJLnRwX29wcwkJCT0gJmZhbGNvbmlkZV90cF9vcHMsCi0JLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX05PX0RNQSB8IElERV9IRkxBR19TRVJJQUxJWkUsCisJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX01NSU8gfCBJREVfSEZMQUdfU0VSSUFMSVpFIHwKKwkJCQkgIElERV9IRkxBR19OT19ETUEsCisJLmlycV9mbGFncwkJPSBJUlFGX1NIQVJFRCwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBmYWxjb25pZGVfc2V0dXBfcG9ydHMoaHdfcmVnc190ICpodykKQEAgLTEzMiw5ICsxNTUsOSBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlpZGVfZ2V0X2xvY2soTlVMTCwgTlVMTCk7CisJZmFsY29uaWRlX2dldF9sb2NrKE5VTEwsIE5VTEwpOwogCXJjID0gaWRlX2hvc3RfcmVnaXN0ZXIoaG9zdCwgJmZhbGNvbmlkZV9wb3J0X2luZm8sIGh3cyk7Ci0JaWRlX3JlbGVhc2VfbG9jaygpOworCWZhbGNvbmlkZV9yZWxlYXNlX2xvY2soKTsKIAogCWlmIChyYykKIAkJZ290byBlcnJfZnJlZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2dheWxlLmMgYi9kcml2ZXJzL2lkZS9nYXlsZS5jCmluZGV4IDU5YmQwYmUuLmRjNzc4MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2dheWxlLmMKKysrIGIvZHJpdmVycy9pZGUvZ2F5bGUuYwpAQCAtMTE4LDcgKzExOCw5IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBnYXlsZV9wb3J0X2luZm8gPSB7Ci0JLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX1NFUklBTElaRSB8IElERV9IRkxBR19OT19ETUEsCisJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX01NSU8gfCBJREVfSEZMQUdfU0VSSUFMSVpFIHwKKwkJCQkgIElERV9IRkxBR19OT19ETUEsCisJLmlycV9mbGFncwkJPSBJUlFGX1NIQVJFRCwKIH07CiAKICAgICAvKgpAQCAtMTYzLDkgKzE2NSw2IEBACiAJICAgIGlycXBvcnQgPSAodW5zaWduZWQgbG9uZylaVFdPX1ZBRERSKEdBWUxFX0lSUV8xMjAwKTsKIAkgICAgYWNrX2ludHIgPSBnYXlsZV9hY2tfaW50cl9hMTIwMDsKIAl9Ci0vKgotICogRklYTUU6IHdlIG5vdyBoYXZlIHNlbGVjdGFibGUgbW9kZXMgYmV0d2VlbiBtbWlvIHYvcyBpb21pbwotICovCiAKIAlyZXNfc3RhcnQgPSAoKHVuc2lnbmVkIGxvbmcpcGh5c19iYXNlKSAmIH4oR0FZTEVfTkVYVF9QT1JULTEpOwogCXJlc19uID0gR0FZTEVfSURFUkVHX1NJWkU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9ocHQzNjYuYyBiL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCmluZGV4IGQzYjNlODIuLmRiYWYxODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCisrKyBiL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCkBAIC0xNDE4LDExICsxNDE4LDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIGhwdDM3eF9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBocHQzNzRfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGhwdDM3NF9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CkBAIC0xNDMwLDExICsxNDMwLDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIGhwdDM3MF9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaHB0MzcwX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBocHQzNzBfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBocHQzNzBfZG1hX3RpbWVvdXQsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CkBAIC0xNDQyLDExICsxNDQyLDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIGhwdDM2eF9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBocHQzNjZfZG1hX2xvc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pY3NpZGUuYyBiL2RyaXZlcnMvaWRlL2ljc2lkZS5jCmluZGV4IDQxNWQ3ZTIuLjUxY2U0MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2ljc2lkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2ljc2lkZS5jCkBAIC0zMDcsMTUgKzMwNywxNCBAQAogCWVuYWJsZV9kbWEoZWMtPmRtYSk7CiB9CiAKLXN0YXRpYyBpbnQgaWNzaWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IGljc2lkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjID0gRUNBUkRfREVWKGh3aWYtPmRldik7CiAJc3RydWN0IGljc2lkZV9zdGF0ZSAqc3RhdGUgPSBlY2FyZF9nZXRfZHJ2ZGF0YShlYyk7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7CiAJdW5zaWduZWQgaW50IGRtYV9tb2RlOwogCi0JaWYgKHJxX2RhdGFfZGlyKHJxKSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkKIAkJZG1hX21vZGUgPSBETUFfTU9ERV9XUklURTsKIAllbHNlCiAJCWRtYV9tb2RlID0gRE1BX01PREVfUkVBRDsKQEAgLTMyNSw4ICszMjQsNiBAQAogCSAqLwogCUJVR19PTihkbWFfY2hhbm5lbF9hY3RpdmUoZWMtPmRtYSkpOwogCi0JaHdpZi0+c2dfbmVudHMgPSBpZGVfYnVpbGRfc2dsaXN0KGRyaXZlLCBycSk7Ci0KIAkvKgogCSAqIEVuc3VyZSB0aGF0IHdlIGhhdmUgdGhlIHJpZ2h0IGludGVycnVwdCByb3V0ZWQuCiAJICovCkBAIC0zNDYsNyArMzQzLDcgQEAKIAkgKiBUZWxsIHRoZSBETUEgZW5naW5lIGFib3V0IHRoZSBTRyB0YWJsZSBhbmQKIAkgKiBkYXRhIGRpcmVjdGlvbi4KIAkgKi8KLQlzZXRfZG1hX3NnKGVjLT5kbWEsIGh3aWYtPnNnX3RhYmxlLCBod2lmLT5zZ19uZW50cyk7CisJc2V0X2RtYV9zZyhlYy0+ZG1hLCBod2lmLT5zZ190YWJsZSwgY21kLT5zZ19uZW50cyk7CiAJc2V0X2RtYV9tb2RlKGVjLT5kbWEsIGRtYV9tb2RlKTsKIAogCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAxOwpAQCAtMzU0LDEyICszNTEsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpY3NpZGVfZG1hX2V4ZWNfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY21kKQotewotCS8qIGlzc3VlIGNtZCB0byBkcml2ZSAqLwotCWlkZV9leGVjdXRlX2NvbW1hbmQoZHJpdmUsIGNtZCwgaWRlX2RtYV9pbnRyLCAyICogV0FJVF9DTUQsIE5VTEwpOwotfQotCiBzdGF0aWMgaW50IGljc2lkZV9kbWFfdGVzdF9pcnEoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKQEAgLTM4Myw3ICszNzQsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBpY3NpZGVfdjZfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGljc2lkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpY3NpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWNzaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGljc2lkZV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gaWNzaWRlX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBpY3NpZGVfZG1hX3Rlc3RfaXJxLApAQCAtNDE5LDYgKzQwOSwxMCBAQAogCWh3LT5jaGlwc2V0ID0gaWRlX2Fjb3JuOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gaWNzaWRlX3Y1X3BvcnRfaW5mbyA9IHsKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTk9fRE1BLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQKIGljc2lkZV9yZWdpc3Rlcl92NShzdHJ1Y3QgaWNzaWRlX3N0YXRlICpzdGF0ZSwgc3RydWN0IGV4cGFuc2lvbl9jYXJkICplYykKIHsKQEAgLTQ0NSw3ICs0MzksNyBAQAogCiAJaWNzaWRlX3NldHVwX3BvcnRzKCZodywgYmFzZSwgJmljc2lkZV9jYXJkaW5mb192NSwgZWMpOwogCi0JaG9zdCA9IGlkZV9ob3N0X2FsbG9jKE5VTEwsIGh3cyk7CisJaG9zdCA9IGlkZV9ob3N0X2FsbG9jKCZpY3NpZGVfdjVfcG9ydF9pbmZvLCBod3MpOwogCWlmIChob3N0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC00NTMsNyArNDQ3LDcgQEAKIAogCWVjYXJkX3NldF9kcnZkYXRhKGVjLCBzdGF0ZSk7CiAKLQlyZXQgPSBpZGVfaG9zdF9yZWdpc3Rlcihob3N0LCBOVUxMLCBod3MpOworCXJldCA9IGlkZV9ob3N0X3JlZ2lzdGVyKGhvc3QsICZpY3NpZGVfdjVfcG9ydF9pbmZvLCBod3MpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2ZyZWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS00ZHJpdmVzLmMgYi9kcml2ZXJzL2lkZS9pZGUtNGRyaXZlcy5jCmluZGV4IDllODViMWUuLjc4YWNhNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS00ZHJpdmVzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLTRkcml2ZXMuYwpAQCAtMjMsNyArMjMsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gaWRlXzRkcml2ZXNfcG9ydF9pbmZvID0gewogCS5wb3J0X29wcwkJPSAmaWRlXzRkcml2ZXNfcG9ydF9vcHMsCi0JLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX1NFUklBTElaRSB8IElERV9IRkxBR19OT19ETUEsCisJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX1NFUklBTElaRSB8IElERV9IRkxBR19OT19ETUEgfAorCQkJCSAgSURFX0hGTEFHXzREUklWRVMsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpZGVfNGRyaXZlc19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jIGIvZHJpdmVycy9pZGUvaWRlLWFjcGkuYwppbmRleCA1YjcwNGYxLi4xMmY0MzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKQEAgLTMwNCw3ICszMDQsNyBAQAogCS8qIHNlbmQgYWxsIHRhc2tmaWxlIHJlZ2lzdGVycyAoMHgxZjEtMHgxZjcpICppbip0aGF0Km9yZGVyKiAqLwogCWZvciAoaXggPSAwOyBpeCA8IGd0Zl9jb3VudDsgaXgrKykgewogCQl1OCAqZ3RmID0gKHU4ICopKGd0Zl9hZGRyZXNzICsgaXggKiBSRUdTX1BFUl9HVEYpOwotCQlpZGVfdGFza190IHRhc2s7CisJCXN0cnVjdCBpZGVfY21kIGNtZDsKIAogCQlERUJQUklOVCgiKDB4MWYxLTFmNyk6ICIKIAkJCSAiaGV4OiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLApAQCAtMzE3LDExICszMTcsMTEgQEAKIAkJfQogCiAJCS8qIGNvbnZlcnQgR1RGIHRvIHRhc2tmaWxlICovCi0JCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKLQkJbWVtY3B5KCZ0YXNrLnRmX2FycmF5WzddLCBndGYsIFJFR1NfUEVSX0dURik7Ci0JCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCQltZW1jcHkoJmNtZC50Zl9hcnJheVs3XSwgZ3RmLCBSRUdTX1BFUl9HVEYpOworCQljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwogCi0JCWVyciA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisJCWVyciA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmY21kKTsKIAkJaWYgKGVycikgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaWRlX25vX2RhdGFfdGFza2ZpbGUgZmFpbGVkOiAldVxuIiwKIAkJCQkJX19mdW5jX18sIGVycik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtYXRhcGkuYyBiL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCmluZGV4IDZhZGM1YjQuLjJmYjVkMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCkBAIC0zMDIsMTYgKzMwMiwxNiBAQAogCiB2b2lkIGlkZV9yZWFkX2Jjb3VudF9hbmRfaXJlYXNvbihpZGVfZHJpdmVfdCAqZHJpdmUsIHUxNiAqYmNvdW50LCB1OCAqaXJlYXNvbikKIHsKLQlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fTEJBSCB8IElERV9URkxBR19JTl9MQkFNIHwKLQkJCUlERV9URkxBR19JTl9OU0VDVDsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19JTl9MQkFIIHwgSURFX1RGTEFHX0lOX0xCQU0gfAorCQkgICAgICAgSURFX1RGTEFHX0lOX05TRUNUOwogCi0JZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgJnRhc2spOworCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZjbWQpOwogCi0JKmJjb3VudCA9ICh0YXNrLnRmLmxiYWggPDwgOCkgfCB0YXNrLnRmLmxiYW07Ci0JKmlyZWFzb24gPSB0YXNrLnRmLm5zZWN0ICYgMzsKKwkqYmNvdW50ID0gKGNtZC50Zi5sYmFoIDw8IDgpIHwgY21kLnRmLmxiYW07CisJKmlyZWFzb24gPSBjbWQudGYubnNlY3QgJiAzOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKTsKIApAQCAtMzM2LDExICszMzYsNiBAQAogCXRpbWVvdXQgPSAoZHJpdmUtPm1lZGlhID09IGlkZV9mbG9wcHkpID8gV0FJVF9GTE9QUFlfQ01ECiAJCQkJCSAgICAgICA6IFdBSVRfVEFQRV9DTUQ7CiAKLQlpZiAocGMtPmZsYWdzICYgUENfRkxBR19USU1FRE9VVCkgewotCQlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUsIDApOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JfQotCiAJLyogQ2xlYXIgdGhlIGludGVycnVwdCAqLwogCXN0YXQgPSB0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCkBAIC0zNjIsNiArMzU3LDggQEAKIAogCS8qIE5vIG1vcmUgaW50ZXJydXB0cyAqLwogCWlmICgoc3RhdCAmIEFUQV9EUlEpID09IDApIHsKKwkJaW50IHVwdG9kYXRlOworCiAJCWRlYnVnX2xvZygiUGFja2V0IGNvbW1hbmQgY29tcGxldGVkLCAlZCBieXRlcyB0cmFuc2ZlcnJlZFxuIiwKIAkJCSAgcGMtPnhmZXJyZWQpOwogCkBAIC00MDAsNyArMzk3LDIyIEBACiAJCQlkc2MgPSAxOwogCiAJCS8qIENvbW1hbmQgZmluaXNoZWQgLSBDYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiAqLwotCQlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUsIGRzYyk7CisJCXVwdG9kYXRlID0gZHJpdmUtPnBjX2NhbGxiYWNrKGRyaXZlLCBkc2MpOworCisJCWlmICh1cHRvZGF0ZSA9PSAwKQorCQkJZHJpdmUtPmZhaWxlZF9wYyA9IE5VTEw7CisKKwkJaWYgKGJsa19zcGVjaWFsX3JlcXVlc3QocnEpKSB7CisJCQlycS0+ZXJyb3JzID0gMDsKKwkJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwgYmxrX3JxX2J5dGVzKHJxKSk7CisJCX0gZWxzZSB7CisJCQlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpID09IDAgJiYgdXB0b2RhdGUgPD0gMCkgeworCQkJCWlmIChycS0+ZXJyb3JzID09IDApCisJCQkJCXJxLT5lcnJvcnMgPSAtRUlPOworCQkJfQorCQkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCB1cHRvZGF0ZSA/IDAgOiAtRUlPLAorCQkJCQlpZGVfcnFfYnl0ZXMocnEpKTsKKwkJfQogCiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CkBAIC00NTgsNyArNDcwLDggQEAKIAogCQkvKiBGSVhNRTogZG9uJ3QgZG8gcGFydGlhbCBjb21wbGV0aW9ucyAqLwogCQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9mbG9wcHkpCi0JCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIDEsIGRvbmUgPj4gOSk7CisJCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIDAsCisJCQkJCWRvbmUgPyBkb25lIDogaWRlX3JxX2J5dGVzKHJxKSk7CiAJfSBlbHNlCiAJCXhmZXJmdW5jKGRyaXZlLCBOVUxMLCBwYy0+Y3VyX3BvcywgYmNvdW50KTsKIApAQCAtNDcwLDM5ICs0ODMsMzIgQEAKIAkJICBycS0+Y21kWzBdLCBiY291bnQpOwogbmV4dF9pcnE6CiAJLyogQW5kIHNldCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgYWdhaW4gKi8KLQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGlkZV9wY19pbnRyLCB0aW1lb3V0LCBOVUxMKTsKKwlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGlkZV9wY19pbnRyLCB0aW1lb3V0KTsKIAlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9wa3RjbWRfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIHUzMiB0Zl9mbGFncywgdTE2IGJjb3VudCkKK3N0YXRpYyB2b2lkIGlkZV9pbml0X3BhY2tldF9jbWQoc3RydWN0IGlkZV9jbWQgKmNtZCwgdTMyIHRmX2ZsYWdzLAorCQkJCXUxNiBiY291bnQsIHU4IGRtYSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JaWRlX3Rhc2tfdCB0YXNrOwotCXU4IGRtYSA9IGRyaXZlLT5kbWE7Ci0KLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19PVVRfTEJBSCB8IElERV9URkxBR19PVVRfTEJBTSB8Ci0JCQlJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCB0Zl9mbGFnczsKLQl0YXNrLnRmLmZlYXR1cmUgPSBkbWE7CQkvKiBVc2UgUElPL0RNQSAqLwotCXRhc2sudGYubGJhbSAgICA9IGJjb3VudCAmIDB4ZmY7Ci0JdGFzay50Zi5sYmFoICAgID0gKGJjb3VudCA+PiA4KSAmIDB4ZmY7Ci0KLQlpZGVfdGZfZHVtcChkcml2ZS0+bmFtZSwgJnRhc2sudGYpOwotCWh3aWYtPnRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKLQlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7Ci0JaHdpZi0+dHBfb3BzLT50Zl9sb2FkKGRyaXZlLCAmdGFzayk7CisJY21kLT5wcm90b2NvbCAgPSBkbWEgPyBBVEFQSV9QUk9UX0RNQSA6IEFUQVBJX1BST1RfUElPOworCWNtZC0+dGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9MQkFIIHwgSURFX1RGTEFHX09VVF9MQkFNIHwKKwkJCSBJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCB0Zl9mbGFnczsKKwljbWQtPnRmLmNvbW1hbmQgPSBBVEFfQ01EX1BBQ0tFVDsKKwljbWQtPnRmLmZlYXR1cmUgPSBkbWE7CQkvKiBVc2UgUElPL0RNQSAqLworCWNtZC0+dGYubGJhbSAgICA9IGJjb3VudCAmIDB4ZmY7CisJY21kLT50Zi5sYmFoICAgID0gKGJjb3VudCA+PiA4KSAmIDB4ZmY7CiB9CiAKIHN0YXRpYyB1OCBpZGVfcmVhZF9pcmVhc29uKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fTlNFQ1Q7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fTlNFQ1Q7CiAKLQlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmdGFzayk7CisJZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgJmNtZCk7CiAKLQlyZXR1cm4gdGFzay50Zi5uc2VjdCAmIDM7CisJcmV0dXJuIGNtZC50Zi5uc2VjdCAmIDM7CiB9CiAKIHN0YXRpYyB1OCBpZGVfd2FpdF9pcmVhc29uKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggaXJlYXNvbikKQEAgLTU5NywxMSArNjAzLDEzIEBACiAJCX0KIAl9CiAKKwlod2lmLT5leHBpcnkgPSBleHBpcnk7CisKIAkvKiBTZXQgdGhlIGludGVycnVwdCByb3V0aW5lICovCiAJaWRlX3NldF9oYW5kbGVyKGRyaXZlLAogCQkJKGRldl9pc19pZGVjZChkcml2ZSkgPyBkcml2ZS0+aXJxX2hhbmRsZXIKIAkJCQkJICAgICA6IGlkZV9wY19pbnRyKSwKLQkJCXRpbWVvdXQsIGV4cGlyeSk7CisJCQl0aW1lb3V0KTsKIAogCS8qIEJlZ2luIERNQSwgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKGRldl9pc19pZGVjZChkcml2ZSkpIHsKQEAgLTYyMSwyMyArNjI5LDMwIEBACiAJcmV0dXJuIGlkZV9zdGFydGVkOwogfQogCi1pZGVfc3RhcnRzdG9wX3QgaWRlX2lzc3VlX3BjKGlkZV9kcml2ZV90ICpkcml2ZSkKK2lkZV9zdGFydHN0b3BfdCBpZGVfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjOwogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgKmRtYV9vcHMgPSBod2lmLT5kbWFfb3BzOwogCWlkZV9leHBpcnlfdCAqZXhwaXJ5ID0gTlVMTDsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKIAl1bnNpZ25lZCBpbnQgdGltZW91dDsKIAl1MzIgdGZfZmxhZ3M7CiAJdTE2IGJjb3VudDsKKwl1OCBkcnFfaW50ID0gISEoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0RSUV9JTlRFUlJVUFQpOwogCiAJaWYgKGRldl9pc19pZGVjZChkcml2ZSkpIHsKIAkJdGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX05TRUNUIHwgSURFX1RGTEFHX09VVF9MQkFMOwotCQliY291bnQgPSBpZGVfY2RfZ2V0X3hmZXJsZW4oaHdpZi0+cnEpOworCQliY291bnQgPSBpZGVfY2RfZ2V0X3hmZXJsZW4ocnEpOwogCQlleHBpcnkgPSBpZGVfY2RfZXhwaXJ5OwogCQl0aW1lb3V0ID0gQVRBUElfV0FJVF9QQzsKIAotCQlpZiAoZHJpdmUtPmRtYSkKLQkJCWRyaXZlLT5kbWEgPSAhaHdpZi0+ZG1hX29wcy0+ZG1hX3NldHVwKGRyaXZlKTsKKwkJaWYgKGRyaXZlLT5kbWEpIHsKKwkJCWlmIChpZGVfYnVpbGRfc2dsaXN0KGRyaXZlLCBjbWQpKQorCQkJCWRyaXZlLT5kbWEgPSAhZG1hX29wcy0+ZG1hX3NldHVwKGRyaXZlLCBjbWQpOworCQkJZWxzZQorCQkJCWRyaXZlLT5kbWEgPSAwOworCQl9CiAJfSBlbHNlIHsKIAkJcGMgPSBkcml2ZS0+cGM7CiAKQEAgLTY1Niw4ICs2NzEsMTIgQEAKIAkJfQogCiAJCWlmICgocGMtPmZsYWdzICYgUENfRkxBR19ETUFfT0spICYmCi0JCSAgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSkKLQkJCWRyaXZlLT5kbWEgPSAhaHdpZi0+ZG1hX29wcy0+ZG1hX3NldHVwKGRyaXZlKTsKKwkJICAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpKSB7CisJCQlpZiAoaWRlX2J1aWxkX3NnbGlzdChkcml2ZSwgY21kKSkKKwkJCQlkcml2ZS0+ZG1hID0gIWRtYV9vcHMtPmRtYV9zZXR1cChkcml2ZSwgY21kKTsKKwkJCWVsc2UKKwkJCQlkcml2ZS0+ZG1hID0gMDsKKwkJfQogCiAJCWlmICghZHJpdmUtPmRtYSkKIAkJCXBjLT5mbGFncyAmPSB+UENfRkxBR19ETUFfT0s7CkBAIC02NjYsMTggKzY4NSwxOCBAQAogCQkJCQkJICAgICAgIDogV0FJVF9UQVBFX0NNRDsKIAl9CiAKLQlpZGVfcGt0Y21kX3RmX2xvYWQoZHJpdmUsIHRmX2ZsYWdzLCBiY291bnQpOworCWlkZV9pbml0X3BhY2tldF9jbWQoY21kLCB0Zl9mbGFncywgYmNvdW50LCBkcml2ZS0+ZG1hKTsKIAotCS8qIElzc3VlIHRoZSBwYWNrZXQgY29tbWFuZCAqLwotCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfRFJRX0lOVEVSUlVQVCkgeworCSh2b2lkKWRvX3J3X3Rhc2tmaWxlKGRyaXZlLCBjbWQpOworCisJaWYgKGRycV9pbnQpIHsKIAkJaWYgKGRyaXZlLT5kbWEpCiAJCQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKLQkJaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgQVRBX0NNRF9QQUNLRVQsIGlkZV90cmFuc2Zlcl9wYywKLQkJCQkgICAgdGltZW91dCwgZXhwaXJ5KTsKLQkJcmV0dXJuIGlkZV9zdGFydGVkOwotCX0gZWxzZSB7Ci0JCWlkZV9leGVjdXRlX3BrdF9jbWQoZHJpdmUpOwotCQlyZXR1cm4gaWRlX3RyYW5zZmVyX3BjKGRyaXZlKTsKKwkJaHdpZi0+ZXhwaXJ5ID0gZXhwaXJ5OwogCX0KKworCWlkZV9leGVjdXRlX2NvbW1hbmQoZHJpdmUsIGNtZCwgaWRlX3RyYW5zZmVyX3BjLCB0aW1lb3V0KTsKKworCXJldHVybiBkcnFfaW50ID8gaWRlX3N0YXJ0ZWQgOiBpZGVfdHJhbnNmZXJfcGMoZHJpdmUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2lzc3VlX3BjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKaW5kZXggMjE3N2NkMS4uM2Y2MzBlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKQEAgLTEwMCw4ICsxMDAsNyBAQAogewogCWludCBsb2cgPSAwOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiQ2FsbCAlcywgc2Vuc2Vfa2V5OiAweCV4XG4iLCBfX2Z1bmNfXywKLQkJICAgICAgc2Vuc2UtPnNlbnNlX2tleSk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAic2Vuc2Vfa2V5OiAweCV4Iiwgc2Vuc2UtPnNlbnNlX2tleSk7CiAKIAlpZiAoIXNlbnNlIHx8ICFycSB8fCAocnEtPmNtZF9mbGFncyAmIFJFUV9RVUlFVCkpCiAJCXJldHVybiAwOwpAQCAtMTUxLDEzICsxNTAsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGJpb19zZWN0b3JzOwogCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiQ2FsbCAlcywgZXJyb3JfY29kZTogMHgleCwgIgotCQkJInNlbnNlX2tleTogMHgleFxuIiwgX19mdW5jX18sIHNlbnNlLT5lcnJvcl9jb2RlLAotCQkJc2Vuc2UtPnNlbnNlX2tleSk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiZXJyb3JfY29kZTogMHgleCwgc2Vuc2Vfa2V5OiAweCV4IiwKKwkJCQkgICAgIHNlbnNlLT5lcnJvcl9jb2RlLCBzZW5zZS0+c2Vuc2Vfa2V5KTsKIAogCWlmIChmYWlsZWRfY29tbWFuZCkKLQkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiJXM6IGZhaWxlZCBjbWQ6IDB4JXhcbiIsCi0JCQkJX19mdW5jX18sIGZhaWxlZF9jb21tYW5kLT5jbWRbMF0pOworCQlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJmYWlsZWQgY21kOiAweCV4IiwKKwkJCQkJICAgICBmYWlsZWRfY29tbWFuZC0+Y21kWzBdKTsKIAogCWlmICghY2Ryb21fbG9nX3NlbnNlKGRyaXZlLCBmYWlsZWRfY29tbWFuZCwgc2Vuc2UpKQogCQlyZXR1cm47CkBAIC0yMTUsOSArMjEzLDkgQEAKIAkJCQkgICAgICBzdHJ1Y3QgcmVxdWVzdCAqZmFpbGVkX2NvbW1hbmQpCiB7CiAJc3RydWN0IGNkcm9tX2luZm8gKmluZm8JCT0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCXN0cnVjdCByZXF1ZXN0ICpycQkJPSAmaW5mby0+cmVxdWVzdF9zZW5zZV9yZXF1ZXN0OworCXN0cnVjdCByZXF1ZXN0ICpycQkJPSAmZHJpdmUtPnJlcXVlc3Rfc2Vuc2VfcnE7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiZW50ZXIiKTsKIAogCWlmIChzZW5zZSA9PSBOVUxMKQogCQlzZW5zZSA9ICZpbmZvLT5zZW5zZV9kYXRhOwpAQCAtMjM5LDggKzIzNyw4IEBACiAJcnEtPmJ1ZmZlciA9ICh2b2lkICopIGZhaWxlZF9jb21tYW5kOwogCiAJaWYgKGZhaWxlZF9jb21tYW5kKQotCQlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJmYWlsZWRfY21kOiAweCV4XG4iLAotCQkJICAgICAgZmFpbGVkX2NvbW1hbmQtPmNtZFswXSk7CisJCWlkZV9kZWJ1Z19sb2coSURFX0RCR19TRU5TRSwgImZhaWxlZF9jbWQ6IDB4JXgiLAorCQkJCQkgICAgIGZhaWxlZF9jb21tYW5kLT5jbWRbMF0pOwogCiAJZHJpdmUtPmh3aWYtPnJxID0gTlVMTDsKIApAQCAtMjUyLDkgKzI1MCw4IEBACiAJc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOwogCWludCBuc2VjdG9ycyA9IHJxLT5oYXJkX2N1cl9zZWN0b3JzOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzLCBjbWQ6IDB4JXgsIHVwdG9kYXRlOiAweCV4LCAiCi0JCSAgICAgICJuc2VjdG9yczogJWRcbiIsIF9fZnVuY19fLCBycS0+Y21kWzBdLCB1cHRvZGF0ZSwKLQkJICAgICAgbnNlY3RvcnMpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiY21kOiAweCV4LCB1cHRvZGF0ZTogMHgleCwgbnNlY3RvcnM6ICVkIiwKKwkJCQkgICAgcnEtPmNtZFswXSwgdXB0b2RhdGUsIG5zZWN0b3JzKTsKIAogCWlmIChibGtfc2Vuc2VfcmVxdWVzdChycSkgJiYgdXB0b2RhdGUpIHsKIAkJLyoKQEAgLTI3NSw4ICsyNzIsOCBAQAogCQkJICogbm93IGVuZCB0aGUgZmFpbGVkIHJlcXVlc3QKIAkJCSAqLwogCQkJaWYgKGJsa19mc19yZXF1ZXN0KGZhaWxlZCkpIHsKLQkJCQlpZiAoaWRlX2VuZF9kZXF1ZXVlZF9yZXF1ZXN0KGRyaXZlLCBmYWlsZWQsIDAsCi0JCQkJCQlmYWlsZWQtPmhhcmRfbnJfc2VjdG9ycykpCisJCQkJaWYgKGlkZV9lbmRfcnEoZHJpdmUsIGZhaWxlZCwgLUVJTywKKwkJCQkJCWZhaWxlZC0+aGFyZF9ucl9zZWN0b3JzIDw8IDkpKQogCQkJCQlCVUcoKTsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGJsa19lbmRfcmVxdWVzdChmYWlsZWQsIC1FSU8sCkBAIC0yOTUsMTAgKzI5MiwxMyBAQAogCWlmICghbnNlY3RvcnMpCiAJCW5zZWN0b3JzID0gMTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiRXhpdCAlcywgdXB0b2RhdGU6IDB4JXgsIG5zZWN0b3JzOiAlZFxuIiwKLQkJICAgICAgX19mdW5jX18sIHVwdG9kYXRlLCBuc2VjdG9ycyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJ1cHRvZGF0ZTogMHgleCwgbnNlY3RvcnM6ICVkIiwKKwkJCQkgICAgdXB0b2RhdGUsIG5zZWN0b3JzKTsKIAotCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgdXB0b2RhdGUsIG5zZWN0b3JzKTsKKwlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpID09IDAgJiYgdXB0b2RhdGUgPD0gMCAmJiBycS0+ZXJyb3JzID09IDApCisJCXJxLT5lcnJvcnMgPSAtRUlPOworCisJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCB1cHRvZGF0ZSA/IDAgOiAtRUlPLCBuc2VjdG9ycyA8PCA5KTsKIH0KIAogc3RhdGljIHZvaWQgaWRlX2R1bXBfc3RhdHVzX25vX3NlbnNlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgY2hhciAqbXNnLCB1OCBzdCkKQEAgLTMzOCw5ICszMzgsMTAgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAiJXM6IHN0YXQ6IDB4JXgsIGdvb2Rfc3RhdDogMHgleCwgIgotCQkgICAgICAicnEtPmNtZFswXTogMHgleCwgcnEtPmNtZF90eXBlOiAweCV4LCBlcnI6IDB4JXhcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBzdGF0LCBnb29kX3N0YXQsIHJxLT5jbWRbMF0sIHJxLT5jbWRfdHlwZSwgZXJyKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJzdGF0OiAweCV4LCBnb29kX3N0YXQ6IDB4JXgsIGNtZFswXTogMHgleCwgIgorCQkJCSAgInJxLT5jbWRfdHlwZTogMHgleCwgZXJyOiAweCV4IiwKKwkJCQkgIHN0YXQsIGdvb2Rfc3RhdCwgcnEtPmNtZFswXSwgcnEtPmNtZF90eXBlLAorCQkJCSAgZXJyKTsKIAogCWlmIChibGtfc2Vuc2VfcmVxdWVzdChycSkpIHsKIAkJLyoKQEAgLTUzMCw4ICs1MzEsNyBAQAogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlcywgaXJlYXNvbjogMHgleCwgcnc6IDB4JXhcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBpcmVhc29uLCBydyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJpcmVhc29uOiAweCV4LCBydzogMHgleCIsIGlyZWFzb24sIHJ3KTsKIAogCS8qCiAJICogaXJlYXNvbiA9PSAwOiB0aGUgZHJpdmUgd2FudHMgdG8gcmVjZWl2ZSBkYXRhIGZyb20gdXMKQEAgLTU3Miw3ICs1NzIsNyBAQAogICovCiBzdGF0aWMgaW50IGlkZV9jZF9jaGVja190cmFuc2Zlcl9zaXplKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGxlbikKIHsKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXMsIGxlbjogJWRcbiIsIF9fZnVuY19fLCBsZW4pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAibGVuOiAlZCIsIGxlbik7CiAKIAlpZiAoKGxlbiAlIFNFQ1RPUl9TSVpFKSA9PSAwKQogCQlyZXR1cm4gMDsKQEAgLTU5NCw4ICs1OTQsNyBAQAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfY2RfcHJlcGFyZV9yd19yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwKIAkJCQkJCSBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAiQ2FsbCAlczogcnEtPmNtZF9mbGFnczogMHgleFxuIiwgX19mdW5jX18sCi0JCSAgICAgIHJxLT5jbWRfZmxhZ3MpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgInJxLT5jbWRfZmxhZ3M6IDB4JXgiLCBycS0+Y21kX2ZsYWdzKTsKIAogCWlmIChycV9kYXRhX2RpcihycSkgPT0gUkVBRCkgewogCQl1bnNpZ25lZCBzaG9ydCBzZWN0b3JzX3Blcl9mcmFtZSA9CkBAIC02MzksNyArNjM4LDcgQEAKIHN0YXRpYyB2b2lkIGlkZV9jZF9yZXN0b3JlX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKIAlpZiAocnEtPmJ1ZmZlciAhPSBiaW9fZGF0YShycS0+YmlvKSkgewogCQlzZWN0b3JfdCBuID0KQEAgLTY1OCw4ICs2NTcsNyBAQAogCiBzdGF0aWMgdm9pZCBpZGVfY2RfcmVxdWVzdF9zZW5zZV9maXh1cChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXMsIHJxLT5jbWRbMF06IDB4JXhcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBycS0+Y21kWzBdKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgInJxLT5jbWRbMF06IDB4JXgiLCBycS0+Y21kWzBdKTsKIAogCS8qCiAJICogU29tZSBvZiB0aGUgdHJhaWxpbmcgcmVxdWVzdCBzZW5zZSBmaWVsZHMgYXJlIG9wdGlvbmFsLApAQCAtNjg2LDkgKzY4NCw5IEBACiAJaWYgKCFzZW5zZSkKIAkJc2Vuc2UgPSAmbG9jYWxfc2Vuc2U7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJDYWxsICVzLCBjbWRbMF06IDB4JXgsIHdyaXRlOiAweCV4LCAiCi0JCSAgICAgICJ0aW1lb3V0OiAlZCwgY21kX2ZsYWdzOiAweCV4XG4iLCBfX2Z1bmNfXywgY21kWzBdLCB3cml0ZSwKLQkJICAgICAgdGltZW91dCwgY21kX2ZsYWdzKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJjbWRbMF06IDB4JXgsIHdyaXRlOiAweCV4LCB0aW1lb3V0OiAlZCwgIgorCQkJCSAgImNtZF9mbGFnczogMHgleCIsCisJCQkJICBjbWRbMF0sIHdyaXRlLCB0aW1lb3V0LCBjbWRfZmxhZ3MpOwogCiAJLyogc3RhcnQgb2YgcmV0cnkgbG9vcCAqLwogCWRvIHsKQEAgLTc3Miw4ICs3NzAsOCBAQAogCXUxNiBsZW47CiAJdTggaXJlYXNvbjsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgIkNhbGwgJXMsIHJxLT5jbWRbMF06IDB4JXgsIHdyaXRlOiAweCV4XG4iLAotCQkgICAgICBfX2Z1bmNfXywgcnEtPmNtZFswXSwgd3JpdGUpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgImNtZFswXTogMHgleCwgd3JpdGU6IDB4JXgiLAorCQkJCSAgcnEtPmNtZFswXSwgd3JpdGUpOwogCiAJLyogY2hlY2sgZm9yIGVycm9ycyAqLwogCWRtYSA9IGRyaXZlLT5kbWE7CkBAIC03OTUsMTAgKzc5MywxMSBAQAogCQlpZiAoZG1hX2Vycm9yKQogCQkJcmV0dXJuIGlkZV9lcnJvcihkcml2ZSwgImRtYSBlcnJvciIsIHN0YXQpOwogCQlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpKSB7Ci0JCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIDEsIHJxLT5ucl9zZWN0b3JzKTsKKwkJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwgcnEtPm5yX3NlY3RvcnMKKwkJCQk/IChycS0+bnJfc2VjdG9ycyA8PCA5KSA6IGlkZV9ycV9ieXRlcyhycSkpOwogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCQl9IGVsc2UgaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfUEMgJiYgIXJxLT5iaW8pIHsKLQkJCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgMSwgMSk7CisJCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIDAsIDUxMik7CiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCX0KIAkJZ290byBlbmRfcmVxdWVzdDsKQEAgLTgxMCw4ICs4MDksOCBAQAogCWlmICh0aGlzbGVuID4gbGVuKQogCQl0aGlzbGVuID0gbGVuOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAiJXM6IERSUTogc3RhdDogMHgleCwgdGhpc2xlbjogJWRcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBzdGF0LCB0aGlzbGVuKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJEUlE6IHN0YXQ6IDB4JXgsIHRoaXNsZW46ICVkIiwKKwkJCQkgIHN0YXQsIHRoaXNsZW4pOwogCiAJLyogSWYgRFJRIGlzIGNsZWFyLCB0aGUgY29tbWFuZCBoYXMgY29tcGxldGVkLiAqLwogCWlmICgoc3RhdCAmIEFUQV9EUlEpID09IDApIHsKQEAgLTg3Niw4ICs4NzUsOSBAQAogCQl4ZmVyZnVuYyA9IGh3aWYtPnRwX29wcy0+aW5wdXRfZGF0YTsKIAl9CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICIlczogZGF0YSB0cmFuc2ZlciwgcnEtPmNtZF90eXBlOiAweCV4LCAiCi0JCSAgICAgICJpcmVhc29uOiAweCV4XG4iLCBfX2Z1bmNfXywgcnEtPmNtZF90eXBlLCBpcmVhc29uKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJkYXRhIHRyYW5zZmVyLCBycS0+Y21kX3R5cGU6IDB4JXgsICIKKwkJCQkgICJpcmVhc29uOiAweCV4IiwKKwkJCQkgIHJxLT5jbWRfdHlwZSwgaXJlYXNvbik7CiAKIAkvKiB0cmFuc2ZlciBkYXRhICovCiAJd2hpbGUgKHRoaXNsZW4gPiAwKSB7CkBAIC05NTksNyArOTU5LDggQEAKIAkJCWV4cGlyeSA9IGlkZV9jZF9leHBpcnk7CiAJfQogCi0JaWRlX3NldF9oYW5kbGVyKGRyaXZlLCBjZHJvbV9uZXdwY19pbnRyLCB0aW1lb3V0LCBleHBpcnkpOworCWh3aWYtPmV4cGlyeSA9IGV4cGlyeTsKKwlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGNkcm9tX25ld3BjX2ludHIsIHRpbWVvdXQpOwogCXJldHVybiBpZGVfc3RhcnRlZDsKIAogZW5kX3JlcXVlc3Q6CkBAIC05ODgsOSArOTg5LDkgQEAKIAl1bnNpZ25lZCBzaG9ydCBzZWN0b3JzX3Blcl9mcmFtZSA9CiAJCXF1ZXVlX2hhcmRzZWN0X3NpemUoZHJpdmUtPnF1ZXVlKSA+PiBTRUNUT1JfQklUUzsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgIkNhbGwgJXMsIHJxLT5jbWRbMF06IDB4JXgsIHdyaXRlOiAweCV4LCAiCi0JCSAgICAgICJzZWNzX3Blcl9mcmFtZTogJXVcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBycS0+Y21kWzBdLCB3cml0ZSwgc2VjdG9yc19wZXJfZnJhbWUpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgInJxLT5jbWRbMF06IDB4JXgsIHdyaXRlOiAweCV4LCAiCisJCQkJICAic2Vjc19wZXJfZnJhbWU6ICV1IiwKKwkJCQkgIHJxLT5jbWRbMF0sIHdyaXRlLCBzZWN0b3JzX3Blcl9mcmFtZSk7CiAKIAlpZiAod3JpdGUpIHsKIAkJLyogZGlzayBoYXMgYmVjb21lIHdyaXRlIHByb3RlY3RlZCAqLwpAQCAtMTAyNiw5ICsxMDI3LDggQEAKIHN0YXRpYyB2b2lkIGNkcm9tX2RvX2Jsb2NrX3BjKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAiQ2FsbCAlcywgcnEtPmNtZFswXTogMHgleCwgIgotCQkgICAgICAicnEtPmNtZF90eXBlOiAweCV4XG4iLCBfX2Z1bmNfXywgcnEtPmNtZFswXSwKLQkJICAgICAgcnEtPmNtZF90eXBlKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJycS0+Y21kWzBdOiAweCV4LCBycS0+Y21kX3R5cGU6IDB4JXgiLAorCQkJCSAgcnEtPmNtZFswXSwgcnEtPmNtZF90eXBlKTsKIAogCWlmIChibGtfcGNfcmVxdWVzdChycSkpCiAJCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX1FVSUVUOwpAQCAtMTA2NywxMCArMTA2NywxMyBAQAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfY2RfZG9fcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKIAkJCQkJc2VjdG9yX3QgYmxvY2spCiB7Ci0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAiQ2FsbCAlcywgcnEtPmNtZFswXTogMHgleCwgIgotCQkgICAgICAicnEtPmNtZF90eXBlOiAweCV4LCBibG9jazogJWxsdVxuIiwKLQkJICAgICAgX19mdW5jX18sIHJxLT5jbWRbMF0sIHJxLT5jbWRfdHlwZSwKLQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylibG9jayk7CisJc3RydWN0IGlkZV9jbWQgY21kOworCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAiY21kOiAweCV4LCBibG9jazogJWxsdSIsCisJCQkJICBycS0+Y21kWzBdLCAodW5zaWduZWQgbG9uZyBsb25nKWJsb2NrKTsKKworCWlmIChkcml2ZS0+ZGVidWdfbWFzayAmIElERV9EQkdfUlEpCisJCWJsa19kdW1wX3JxX2ZsYWdzKHJxLCAiaWRlX2NkX2RvX3JlcXVlc3QiKTsKIAogCWlmIChibGtfZnNfcmVxdWVzdChycSkpIHsKIAkJaWYgKGNkcm9tX3N0YXJ0X3J3KGRyaXZlLCBycSkgPT0gaWRlX3N0b3BwZWQpCkBAIC0xMDk0LDcgKzEwOTcsMTQgQEAKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KIAotCXJldHVybiBpZGVfaXNzdWVfcGMoZHJpdmUpOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisKKwlpZiAocnFfZGF0YV9kaXIocnEpKQorCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX1dSSVRFOworCisJY21kLnJxID0gcnE7CisKKwlyZXR1cm4gaWRlX2lzc3VlX3BjKGRyaXZlLCAmY21kKTsKIH0KIAogLyoKQEAgLTExMTksNyArMTEyOSw3IEBACiAJc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGkgPSAmaW5mby0+ZGV2aW5mbzsKIAl1bnNpZ25lZCBjaGFyIGNtZFtCTEtfTUFYX0NEQl07CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKIAltZW1zZXQoY21kLCAwLCBCTEtfTUFYX0NEQik7CiAJY21kWzBdID0gR1BDTURfVEVTVF9VTklUX1JFQURZOwpAQCAtMTE0Nyw3ICsxMTU3LDcgQEAKIAl1bnNpZ25lZCBsZW4gPSBzaXplb2YoY2FwYnVmKTsKIAl1MzIgYmxvY2tsZW47CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKIAltZW1zZXQoY21kLCAwLCBCTEtfTUFYX0NEQik7CiAJY21kWzBdID0gR1BDTURfUkVBRF9DRFZEX0NBUEFDSVRZOwpAQCAtMTE3OSw4ICsxMTg5LDggQEAKIAkqY2FwYWNpdHkgPSAxICsgYmUzMl90b19jcHUoY2FwYnVmLmxiYSk7CiAJKnNlY3RvcnNfcGVyX2ZyYW1lID0gYmxvY2tsZW4gPj4gU0VDVE9SX0JJVFM7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICIlczogY2FwOiAlbHUsIHNlY3RvcnNfcGVyX2ZyYW1lOiAlbHVcbiIsCi0JCSAgICAgIF9fZnVuY19fLCAqY2FwYWNpdHksICpzZWN0b3JzX3Blcl9mcmFtZSk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiY2FwOiAlbHUsIHNlY3RvcnNfcGVyX2ZyYW1lOiAlbHUiLAorCQkJCSAgICAgKmNhcGFjaXR5LCAqc2VjdG9yc19wZXJfZnJhbWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTkxLDcgKzEyMDEsNyBAQAogewogCXVuc2lnbmVkIGNoYXIgY21kW0JMS19NQVhfQ0RCXTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAogCW1lbXNldChjbWQsIDAsIEJMS19NQVhfQ0RCKTsKIApAQCAtMTIyMSw3ICsxMjMxLDcgQEAKIAlsb25nIGxhc3Rfd3JpdHRlbjsKIAl1bnNpZ25lZCBsb25nIHNlY3RvcnNfcGVyX2ZyYW1lID0gU0VDVE9SU19QRVJfRlJBTUU7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKIAlpZiAodG9jID09IE5VTEwpIHsKIAkJLyogdHJ5IHRvIGFsbG9jYXRlIHNwYWNlICovCkBAIC0xMzgzLDcgKzEzOTMsNyBAQAogCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7CiAJaW50IHN0YXQsIGF0dGVtcHRzID0gMywgc2l6ZSA9IEFUQVBJX0NBUEFCSUxJVElFU19QQUdFX1NJWkU7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKIAlpZiAoKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19GVUxMX0NBUFNfUEFHRSkgPT0gMCkKIAkJc2l6ZSAtPSBBVEFQSV9DQVBBQklMSVRJRVNfUEFHRV9QQURfU0laRTsKQEAgLTE0MDMsNyArMTQxMyw3IEBACiAJc3RydWN0IGNkcm9tX2luZm8gKmNkID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXUxNiBjdXJzcGVlZCwgbWF4c3BlZWQ7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKIAlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0xFX1NQRUVEX0ZJRUxEUykgewogCQljdXJzcGVlZCA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopJmJ1Zls4ICsgMTRdKTsKQEAgLTE0MTMsOCArMTQyMyw4IEBACiAJCW1heHNwZWVkID0gYmUxNl90b19jcHVwKChfX2JlMTYgKikmYnVmWzggKyA4XSk7CiAJfQogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiJXM6IGN1cnNwZWVkOiAldSwgbWF4c3BlZWQ6ICV1XG4iLAotCQkgICAgICBfX2Z1bmNfXywgY3Vyc3BlZWQsIG1heHNwZWVkKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJjdXJzcGVlZDogJXUsIG1heHNwZWVkOiAldSIsCisJCQkJICAgICBjdXJzcGVlZCwgbWF4c3BlZWQpOwogCiAJY2QtPmN1cnJlbnRfc3BlZWQgPSAoY3Vyc3BlZWQgKyAoMTc2LzIpKSAvIDE3NjsKIAljZC0+bWF4X3NwZWVkID0gKG1heHNwZWVkICsgKDE3Ni8yKSkgLyAxNzY7CkBAIC0xNDQ4LDcgKzE0NTgsNyBAQAogCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqZGV2aW5mbyA9ICZpbmZvLT5kZXZpbmZvOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiQ2FsbCAlcywgbnNsb3RzOiAlZFxuIiwgX19mdW5jX18sIG5zbG90cyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAibnNsb3RzOiAlZCIsIG5zbG90cyk7CiAKIAlkZXZpbmZvLT5vcHMgPSAmaWRlX2Nkcm9tX2RvcHM7CiAJZGV2aW5mby0+c3BlZWQgPSBpbmZvLT5jdXJyZW50X3NwZWVkOwpAQCAtMTQ3MSw5ICsxNDgxLDggQEAKIAltZWNodHlwZV90IG1lY2h0eXBlOwogCWludCBuc2xvdHMgPSAxOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiQ2FsbCAlcywgZHJpdmUtPm1lZGlhOiAweCV4LCAiCi0JCSAgICAgICJkcml2ZS0+YXRhcGlfZmxhZ3M6IDB4JWx4XG4iLCBfX2Z1bmNfXywgZHJpdmUtPm1lZGlhLAotCQkgICAgICBkcml2ZS0+YXRhcGlfZmxhZ3MpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgIm1lZGlhOiAweCV4LCBhdGFwaV9mbGFnczogMHglbHgiLAorCQkJCSAgICAgZHJpdmUtPm1lZGlhLCBkcml2ZS0+YXRhcGlfZmxhZ3MpOwogCiAJY2RpLT5tYXNrID0gKENEQ19DRF9SIHwgQ0RDX0NEX1JXIHwgQ0RDX0RWRCB8IENEQ19EVkRfUiB8CiAJCSAgICAgQ0RDX0RWRF9SQU0gfCBDRENfU0VMRUNUX0RJU0MgfCBDRENfUExBWV9BVURJTyB8CkBAIC0xNzU0LDcgKzE3NjMsNyBAQAogCWNoYXIgKmZ3X3JldiA9IChjaGFyICopJmlkW0FUQV9JRF9GV19SRVZdOwogCWludCBuc2xvdHM7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiZW50ZXIiKTsKIAogCWJsa19xdWV1ZV9wcmVwX3JxKGRyaXZlLT5xdWV1ZSwgaWRlX2Nkcm9tX3ByZXBfZm4pOwogCWJsa19xdWV1ZV9kbWFfYWxpZ25tZW50KGRyaXZlLT5xdWV1ZSwgMzEpOwpAQCAtMTc5Nyw3ICsxODA2LDcgQEAKIHsKIAlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAogCWlkZV9wcm9jX3VucmVnaXN0ZXJfZHJpdmVyKGRyaXZlLCBpbmZvLT5kcml2ZXIpOwogCWRldmljZV9kZWwoJmluZm8tPmRldik7CkBAIC0xODE1LDcgKzE4MjQsNyBAQAogCWlkZV9kcml2ZV90ICpkcml2ZSA9IGluZm8tPmRyaXZlOwogCXN0cnVjdCBnZW5kaXNrICpnID0gaW5mby0+ZGlzazsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAogCWtmcmVlKGluZm8tPnRvYyk7CiAJaWYgKGRldmluZm8tPmhhbmRsZSA9PSBkcml2ZSkKQEAgLTE4MzksNyArMTg0OCw2IEBACiAJLnJlbW92ZQkJCT0gaWRlX2NkX3JlbW92ZSwKIAkudmVyc2lvbgkJPSBJREVDRF9WRVJTSU9OLAogCS5kb19yZXF1ZXN0CQk9IGlkZV9jZF9kb19yZXF1ZXN0LAotCS5lbmRfcmVxdWVzdAkJPSBpZGVfZW5kX3JlcXVlc3QsCiAjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCiAJLnByb2NfZW50cmllcwkJPSBpZGVfY2RfcHJvY19lbnRyaWVzLAogCS5wcm9jX2RldnNldHMJCT0gaWRlX2NkX3Byb2NfZGV2c2V0cywKQEAgLTE5NzQsOSArMTk4Miw4IEBACiAJc3RydWN0IGdlbmRpc2sgKmc7CiAJc3RydWN0IHJlcXVlc3Rfc2Vuc2Ugc2Vuc2U7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJDYWxsICVzLCBkcml2ZS0+ZHJpdmVyX3JlcTogJXMsICIKLQkJICAgICAgImRyaXZlLT5tZWRpYTogMHgleFxuIiwgX19mdW5jX18sIGRyaXZlLT5kcml2ZXJfcmVxLAotCQkgICAgICBkcml2ZS0+bWVkaWEpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgImRyaXZlcl9yZXE6ICVzLCBtZWRpYTogMHgleCIsCisJCQkJICAgICBkcml2ZS0+ZHJpdmVyX3JlcSwgZHJpdmUtPm1lZGlhKTsKIAogCWlmICghc3Ryc3RyKCJpZGUtY2Ryb20iLCBkcml2ZS0+ZHJpdmVyX3JlcSkpCiAJCWdvdG8gZmFpbGVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkLmggYi9kcml2ZXJzL2lkZS9pZGUtY2QuaAppbmRleCBjODc4YmZjLi4xZDk3MTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2QuaAorKysgYi9kcml2ZXJzL2lkZS9pZGUtY2QuaApAQCAtMTEsNyArMTEsNyBAQAogI2RlZmluZSBJREVDRF9ERUJVR19MT0cJCTAKIAogI2lmIElERUNEX0RFQlVHX0xPRwotI2RlZmluZSBpZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKSBfX2lkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MpCisjZGVmaW5lIGlkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MuLi4pIF9faWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgIyMgYXJncykKICNlbHNlCiAjZGVmaW5lIGlkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlICgwKQogI2VuZGlmCkBAIC05MSw4ICs5MSw2IEBACiAJICAgb24gdGhpcyBkZXZpY2UuICovCiAJc3RydWN0IHJlcXVlc3Rfc2Vuc2Ugc2Vuc2VfZGF0YTsKIAotCXN0cnVjdCByZXF1ZXN0IHJlcXVlc3Rfc2Vuc2VfcmVxdWVzdDsKLQogCXU4IG1heF9zcGVlZDsJCS8qIE1heCBzcGVlZCBvZiB0aGUgZHJpdmUuICovCiAJdTggY3VycmVudF9zcGVlZDsJLyogQ3VycmVudCBzcGVlZCBvZiB0aGUgZHJpdmUuICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jcy5jIGIvZHJpdmVycy9pZGUvaWRlLWNzLmMKaW5kZXggZjUwMjEwZi4uOWU0N2YzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNzLmMKQEAgLTE1NCw2ICsxNTQsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGlkZWNzX3BvcnRfaW5mbyA9IHsKIAkucG9ydF9vcHMJCT0gJmlkZWNzX3BvcnRfb3BzLAogCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19OT19ETUEsCisJLmlycV9mbGFncwkJPSBJUlFGX1NIQVJFRCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaWRlX2hvc3QgKmlkZWNzX3JlZ2lzdGVyKHVuc2lnbmVkIGxvbmcgaW8sIHVuc2lnbmVkIGxvbmcgY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRldnNldHMuYyBiL2RyaXZlcnMvaWRlL2lkZS1kZXZzZXRzLmMKaW5kZXggN2MzOTUzNC4uNWJmOTU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRldnNldHMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZGV2c2V0cy5jCkBAIC0xODMsOCArMTgzLDYgQEAKIAllcnIgPSBzZXRmdW5jKGRyaXZlLCAqKGludCAqKSZycS0+Y21kWzFdKTsKIAlpZiAoZXJyKQogCQlycS0+ZXJyb3JzID0gZXJyOwotCWVsc2UKLQkJZXJyID0gMTsKLQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIGVyciwgMCk7CisJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCBlcnIsIGlkZV9ycV9ieXRlcyhycSkpOwogCXJldHVybiBpZGVfc3RvcHBlZDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMgYi9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCmluZGV4IDgwNjc2MGQuLmNhOTM0YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRpc2suYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgotI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtNTMsMzMgKzUyLDI2IEBACiAJQVRBX0NNRF9XUklURV9FWFQsCiB9OwogCi1zdGF0aWMgY29uc3QgdTggaWRlX2RhdGFfcGhhc2VzW10gPSB7Ci0JVEFTS0ZJTEVfTVVMVElfSU4sCi0JVEFTS0ZJTEVfTVVMVElfT1VULAotCVRBU0tGSUxFX0lOLAotCVRBU0tGSUxFX09VVCwKLQlUQVNLRklMRV9JTl9ETUEsCi0JVEFTS0ZJTEVfT1VUX0RNQSwKLX07Ci0KLXN0YXRpYyB2b2lkIGlkZV90Zl9zZXRfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaywgdTggZG1hKQorc3RhdGljIHZvaWQgaWRlX3RmX3NldF9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLCB1OCBkbWEpCiB7CiAJdTggaW5kZXgsIGxiYTQ4LCB3cml0ZTsKIAotCWxiYTQ4ID0gKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSA/IDIgOiAwOwotCXdyaXRlID0gKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKSA/IDEgOiAwOworCWxiYTQ4ID0gKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMiA6IDA7CisJd3JpdGUgPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkgPyAxIDogMDsKIAotCWlmIChkbWEpCisJaWYgKGRtYSkgeworCQljbWQtPnByb3RvY29sID0gQVRBX1BST1RfRE1BOwogCQlpbmRleCA9IDg7Ci0JZWxzZQotCQlpbmRleCA9IGRyaXZlLT5tdWx0X2NvdW50ID8gMCA6IDQ7CisJfSBlbHNlIHsKKwkJY21kLT5wcm90b2NvbCA9IEFUQV9QUk9UX1BJTzsKKwkJaWYgKGRyaXZlLT5tdWx0X2NvdW50KSB7CisJCQljbWQtPnRmX2ZsYWdzIHw9IElERV9URkxBR19NVUxUSV9QSU87CisJCQlpbmRleCA9IDA7CisJCX0gZWxzZQorCQkJaW5kZXggPSA0OworCX0KIAotCXRhc2stPnRmLmNvbW1hbmQgPSBpZGVfcndfY21kc1tpbmRleCArIGxiYTQ4ICsgd3JpdGVdOwotCi0JaWYgKGRtYSkKLQkJaW5kZXggPSA4OyAvKiBmaXh1cCBpbmRleCAqLwotCi0JdGFzay0+ZGF0YV9waGFzZSA9IGlkZV9kYXRhX3BoYXNlc1tpbmRleCAvIDIgKyB3cml0ZV07CisJY21kLT50Zi5jb21tYW5kID0gaWRlX3J3X2NtZHNbaW5kZXggKyBsYmE0OCArIHdyaXRlXTsKIH0KIAogLyoKQEAgLTkzLDggKzg1LDggQEAKIAl1MTYgbnNlY3RvcnMJCT0gKHUxNilycS0+bnJfc2VjdG9yczsKIAl1OCBsYmE0OAkJPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KTsKIAl1OCBkbWEJCQk9ICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKTsKLQlpZGVfdGFza190CQl0YXNrOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUJKnRmID0gJnRhc2sudGY7CisJc3RydWN0IGlkZV9jbWQJCWNtZDsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlCSp0ZiA9ICZjbWQudGY7CiAJaWRlX3N0YXJ0c3RvcF90CQlyYzsKIAogCWlmICgoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19MQkE0OF9ETUEpICYmIGxiYTQ4ICYmIGRtYSkgewpAQCAtMTA0LDEzICs5Niw4IEBACiAJCQlsYmE0OCA9IDA7CiAJfQogCi0JaWYgKCFkbWEpIHsKLQkJaWRlX2luaXRfc2dfY21kKGRyaXZlLCBycSk7Ci0JCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKLQl9Ci0KLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwogCiAJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBKSB7CiAJCWlmIChsYmE0OCkgewpAQCAtMTI5LDcgKzExNiw3IEBACiAJCQl0Zi0+bGJhbSAgID0gKHU4KShibG9jayA+PiAgOCk7CiAJCQl0Zi0+bGJhaCAgID0gKHU4KShibG9jayA+PiAxNik7CiAKLQkJCXRhc2sudGZfZmxhZ3MgfD0gKElERV9URkxBR19MQkE0OCB8IElERV9URkxBR19IT0IpOworCQkJY21kLnRmX2ZsYWdzIHw9IChJREVfVEZMQUdfTEJBNDggfCBJREVfVEZMQUdfSE9CKTsKIAkJfSBlbHNlIHsKIAkJCXRmLT5uc2VjdCAgPSBuc2VjdG9ycyAmIDB4ZmY7CiAJCQl0Zi0+bGJhbCAgID0gYmxvY2s7CkBAIC0xNTYsMjMgKzE0MywyNyBAQAogCQl0Zi0+ZGV2aWNlID0gaGVhZDsKIAl9CiAKKwljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX0ZTOworCiAJaWYgKHJxX2RhdGFfZGlyKHJxKSkKLQkJdGFzay50Zl9mbGFncyB8PSBJREVfVEZMQUdfV1JJVEU7CisJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfV1JJVEU7CiAKLQlpZGVfdGZfc2V0X2NtZChkcml2ZSwgJnRhc2ssIGRtYSk7Ci0JaWYgKCFkbWEpCi0JCWh3aWYtPmRhdGFfcGhhc2UgPSB0YXNrLmRhdGFfcGhhc2U7Ci0JdGFzay5ycSA9IHJxOworCWlkZV90Zl9zZXRfY21kKGRyaXZlLCAmY21kLCBkbWEpOworCWNtZC5ycSA9IHJxOwogCi0JcmMgPSBkb19yd190YXNrZmlsZShkcml2ZSwgJnRhc2spOworCWlmIChkbWEgPT0gMCkgeworCQlpZGVfaW5pdF9zZ19jbWQoJmNtZCwgbnNlY3RvcnMgPDwgOSk7CisJCWlkZV9tYXBfc2coZHJpdmUsICZjbWQpOworCX0KKworCXJjID0gZG9fcndfdGFza2ZpbGUoZHJpdmUsICZjbWQpOwogCiAJaWYgKHJjID09IGlkZV9zdG9wcGVkICYmIGRtYSkgewogCQkvKiBmYWxsYmFjayB0byBQSU8gKi8KLQkJdGFzay50Zl9mbGFncyB8PSBJREVfVEZMQUdfRE1BX1BJT19GQUxMQkFDSzsKLQkJaWRlX3RmX3NldF9jbWQoZHJpdmUsICZ0YXNrLCAwKTsKLQkJaHdpZi0+ZGF0YV9waGFzZSA9IHRhc2suZGF0YV9waGFzZTsKLQkJaWRlX2luaXRfc2dfY21kKGRyaXZlLCBycSk7Ci0JCXJjID0gZG9fcndfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKKwkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19ETUFfUElPX0ZBTExCQUNLOworCQlpZGVfdGZfc2V0X2NtZChkcml2ZSwgJmNtZCwgMCk7CisJCWlkZV9pbml0X3NnX2NtZCgmY21kLCBuc2VjdG9ycyA8PCA5KTsKKwkJcmMgPSBkb19yd190YXNrZmlsZShkcml2ZSwgJmNtZCk7CiAJfQogCiAJcmV0dXJuIHJjOwpAQCAtMTkzLDcgKzE4NCw5IEBACiAKIAlpZiAoIWJsa19mc19yZXF1ZXN0KHJxKSkgewogCQlibGtfZHVtcF9ycV9mbGFncyhycSwgImlkZV9kb19yd19kaXNrIC0gYmFkIGNvbW1hbmQiKTsKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKKwkJaWYgKHJxLT5lcnJvcnMgPT0gMCkKKwkJCXJxLT5lcnJvcnMgPSAtRUlPOworCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIC1FSU8sIGlkZV9ycV9ieXRlcyhycSkpOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCkBAIC0yMTYsMjIgKzIwOSwyMiBAQAogICovCiBzdGF0aWMgdTY0IGlkZWRpc2tfcmVhZF9uYXRpdmVfbWF4X2FkZHJlc3MoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgbGJhNDgpCiB7Ci0JaWRlX3Rhc2tfdCBhcmdzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmFyZ3MudGY7CisJc3RydWN0IGlkZV9jbWQgY21kOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC50ZjsKIAl1NjQgYWRkciA9IDA7CiAKLQkvKiBDcmVhdGUgSURFL0FUQSBjb21tYW5kIHJlcXVlc3Qgc3RydWN0dXJlICovCi0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CiAJaWYgKGxiYTQ4KQogCQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfUkVBRF9OQVRJVkVfTUFYX0VYVDsKIAllbHNlCiAJCXRmLT5jb21tYW5kID0gQVRBX0NNRF9SRUFEX05BVElWRV9NQVg7CiAJdGYtPmRldmljZSAgPSBBVEFfTEJBOwotCWFyZ3MudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKIAlpZiAobGJhNDgpCi0JCWFyZ3MudGZfZmxhZ3MgfD0gKElERV9URkxBR19MQkE0OCB8IElERV9URkxBR19IT0IpOwotCS8qIHN1Ym1pdCBjb21tYW5kIHJlcXVlc3QgKi8KLQlpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmFyZ3MpOworCQljbWQudGZfZmxhZ3MgfD0gKElERV9URkxBR19MQkE0OCB8IElERV9URkxBR19IT0IpOworCisJaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZjbWQpOwogCiAJLyogaWYgT0ssIGNvbXB1dGUgbWF4aW11bSBhZGRyZXNzIHZhbHVlICovCiAJaWYgKCh0Zi0+c3RhdHVzICYgMHgwMSkgPT0gMCkKQEAgLTI0NiwxMyArMjM5LDEzIEBACiAgKi8KIHN0YXRpYyB1NjQgaWRlZGlza19zZXRfbWF4X2FkZHJlc3MoaWRlX2RyaXZlX3QgKmRyaXZlLCB1NjQgYWRkcl9yZXEsIGludCBsYmE0OCkKIHsKLQlpZGVfdGFza190IGFyZ3M7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmYXJncy50ZjsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLnRmOwogCXU2NCBhZGRyX3NldCA9IDA7CiAKIAlhZGRyX3JlcS0tOwotCS8qIENyZWF0ZSBJREUvQVRBIGNvbW1hbmQgcmVxdWVzdCBzdHJ1Y3R1cmUgKi8KLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7CisKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCXRmLT5sYmFsICAgICA9IChhZGRyX3JlcSA+PiAgMCkgJiAweGZmOwogCXRmLT5sYmFtICAgICA9IChhZGRyX3JlcSA+Pj0gOCkgJiAweGZmOwogCXRmLT5sYmFoICAgICA9IChhZGRyX3JlcSA+Pj0gOCkgJiAweGZmOwpAQCAtMjY2LDExICsyNTksMTMgQEAKIAkJdGYtPmNvbW1hbmQgID0gQVRBX0NNRF9TRVRfTUFYOwogCX0KIAl0Zi0+ZGV2aWNlIHw9IEFUQV9MQkE7Ci0JYXJncy50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwogCWlmIChsYmE0OCkKLQkJYXJncy50Zl9mbGFncyB8PSAoSURFX1RGTEFHX0xCQTQ4IHwgSURFX1RGTEFHX0hPQik7Ci0JLyogc3VibWl0IGNvbW1hbmQgcmVxdWVzdCAqLwotCWlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmYXJncyk7CisJCWNtZC50Zl9mbGFncyB8PSAoSURFX1RGTEFHX0xCQTQ4IHwgSURFX1RGTEFHX0hPQik7CisKKwlpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmNtZCk7CisKIAkvKiBpZiBPSywgY29tcHV0ZSBtYXhpbXVtIGFkZHJlc3MgdmFsdWUgKi8KIAlpZiAoKHRmLT5zdGF0dXMgJiAweDAxKSA9PSAwKQogCQlhZGRyX3NldCA9IGlkZV9nZXRfbGJhX2FkZHIodGYsIGxiYTQ4KSArIDE7CkBAIC0zODksMjQgKzM4NCwyNCBAQAogc3RhdGljIHZvaWQgaWRlZGlza19wcmVwYXJlX2ZsdXNoKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJaWRlX2RyaXZlX3QgKmRyaXZlID0gcS0+cXVldWVkYXRhOwotCWlkZV90YXNrX3QgKnRhc2sgPSBrbWFsbG9jKHNpemVvZigqdGFzayksIEdGUF9BVE9NSUMpOworCXN0cnVjdCBpZGVfY21kICpjbWQgPSBrbWFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0FUT01JQyk7CiAKIAkvKiBGSVhNRTogbWFwIHN0cnVjdCBpZGVfdGFza2ZpbGUgb24gcnEtPmNtZFtdICovCi0JQlVHX09OKHRhc2sgPT0gTlVMTCk7CisJQlVHX09OKGNtZCA9PSBOVUxMKTsKIAotCW1lbXNldCh0YXNrLCAwLCBzaXplb2YoKnRhc2spKTsKKwltZW1zZXQoY21kLCAwLCBzaXplb2YoKmNtZCkpOwogCWlmIChhdGFfaWRfZmx1c2hfZXh0X2VuYWJsZWQoZHJpdmUtPmlkKSAmJgogCSAgICAoZHJpdmUtPmNhcGFjaXR5NjQgPj0gKDFVTCA8PCAyOCkpKQotCQl0YXNrLT50Zi5jb21tYW5kID0gQVRBX0NNRF9GTFVTSF9FWFQ7CisJCWNtZC0+dGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0hfRVhUOwogCWVsc2UKLQkJdGFzay0+dGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0g7Ci0JdGFzay0+dGZfZmxhZ3MJID0gSURFX1RGTEFHX09VVF9URiB8IElERV9URkxBR19PVVRfREVWSUNFIHwKLQkJCSAgIElERV9URkxBR19EWU47Ci0JdGFzay0+ZGF0YV9waGFzZSA9IFRBU0tGSUxFX05PX0RBVEE7CisJCWNtZC0+dGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0g7CisJY21kLT50Zl9mbGFncyA9IElERV9URkxBR19PVVRfVEYgfCBJREVfVEZMQUdfT1VUX0RFVklDRSB8CisJCQlJREVfVEZMQUdfRFlOOworCWNtZC0+cHJvdG9jb2wgPSBBVEFfUFJPVF9OT0RBVEE7CiAKIAlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9BVEFfVEFTS0ZJTEU7CiAJcnEtPmNtZF9mbGFncyB8PSBSRVFfU09GVEJBUlJJRVI7Ci0JcnEtPnNwZWNpYWwgPSB0YXNrOworCXJxLT5zcGVjaWFsID0gY21kOwogfQogCiBpZGVfZGV2c2V0X2dldChtdWx0Y291bnQsIG11bHRfY291bnQpOwpAQCAtNDU2LDE1ICs0NTEsMTUgQEAKIAogc3RhdGljIGludCBpZGVfZG9fc2V0ZmVhdHVyZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGZlYXR1cmUsIHU4IG5zZWN0KQogewotCWlkZV90YXNrX3QgdGFzazsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAKLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zi5mZWF0dXJlID0gZmVhdHVyZTsKLQl0YXNrLnRmLm5zZWN0ICAgPSBuc2VjdDsKLQl0YXNrLnRmLmNvbW1hbmQgPSBBVEFfQ01EX1NFVF9GRUFUVVJFUzsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC50Zi5mZWF0dXJlID0gZmVhdHVyZTsKKwljbWQudGYubnNlY3QgICA9IG5zZWN0OworCWNtZC50Zi5jb21tYW5kID0gQVRBX0NNRF9TRVRfRkVBVFVSRVM7CisJY21kLnRmX2ZsYWdzICAgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwogCi0JcmV0dXJuIGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisJcmV0dXJuIGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmY21kKTsKIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlX29yZGVyZWQoaWRlX2RyaXZlX3QgKmRyaXZlKQpAQCAtNTMxLDE1ICs1MjYsMTYgQEAKIAogc3RhdGljIGludCBkb19pZGVkaXNrX2ZsdXNoY2FjaGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV90YXNrX3QgYXJnczsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAKLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAlpZiAoYXRhX2lkX2ZsdXNoX2V4dF9lbmFibGVkKGRyaXZlLT5pZCkpCi0JCWFyZ3MudGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0hfRVhUOworCQljbWQudGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0hfRVhUOwogCWVsc2UKLQkJYXJncy50Zi5jb21tYW5kID0gQVRBX0NNRF9GTFVTSDsKLQlhcmdzLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKLQlyZXR1cm4gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZhcmdzKTsKKwkJY21kLnRmLmNvbW1hbmQgPSBBVEFfQ01EX0ZMVVNIOworCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisKKwlyZXR1cm4gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZjbWQpOwogfQogCiBpZGVfZGV2c2V0X2dldChhY291c3RpYywgYWNvdXN0aWMpOwpAQCAtNzExLDE3ICs3MDcsMTcgQEAKIHN0YXRpYyBpbnQgaWRlX2Rpc2tfc2V0X2Rvb3Jsb2NrKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGdlbmRpc2sgKmRpc2ssCiAJCQkJIGludCBvbikKIHsKLQlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCWludCByZXQ7CiAKIAlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfRE9PUkxPQ0tJTkcpID09IDApCiAJCXJldHVybiAwOwogCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCXRhc2sudGYuY29tbWFuZCA9IG9uID8gQVRBX0NNRF9NRURJQV9MT0NLIDogQVRBX0NNRF9NRURJQV9VTkxPQ0s7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQudGYuY29tbWFuZCA9IG9uID8gQVRBX0NNRF9NRURJQV9MT0NLIDogQVRBX0NNRF9NRURJQV9VTkxPQ0s7CisJY21kLnRmX2ZsYWdzICAgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwogCi0JcmV0ID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKKwlyZXQgPSBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmNtZCk7CiAKIAlpZiAocmV0KQogCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRE9PUkxPQ0tJTkc7CkBAIC03MzcsNiArNzMzLDUgQEAKIAkuaW5pdF9tZWRpYQk9IGlkZV9kaXNrX2luaXRfbWVkaWEsCiAJLnNldF9kb29ybG9jawk9IGlkZV9kaXNrX3NldF9kb29ybG9jaywKIAkuZG9fcmVxdWVzdAk9IGlkZV9kb19yd19kaXNrLAotCS5lbmRfcmVxdWVzdAk9IGlkZV9lbmRfcmVxdWVzdCwKIAkuaW9jdGwJCT0gaWRlX2Rpc2tfaW9jdGwsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRpc2tfcHJvYy5jIGIvZHJpdmVycy9pZGUvaWRlLWRpc2tfcHJvYy5jCmluZGV4IDFmODZkY2IuLmVhZWEzYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrX3Byb2MuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZGlza19wcm9jLmMKQEAgLTEsMzggKzEsMzggQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KLSNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogCiAjaW5jbHVkZSAiaWRlLWRpc2suaCIKIAogc3RhdGljIGludCBzbWFydF9lbmFibGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV90YXNrX3QgYXJnczsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZhcmdzLnRmOworCXN0cnVjdCBpZGVfY21kIGNtZDsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQudGY7CiAKLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAl0Zi0+ZmVhdHVyZSA9IEFUQV9TTUFSVF9FTkFCTEU7CiAJdGYtPmxiYW0gICAgPSBBVEFfU01BUlRfTEJBTV9QQVNTOwogCXRmLT5sYmFoICAgID0gQVRBX1NNQVJUX0xCQUhfUEFTUzsKIAl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfU01BUlQ7Ci0JYXJncy50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7Ci0JcmV0dXJuIGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmYXJncyk7CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKKworCXJldHVybiBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmNtZCk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X3NtYXJ0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCAqYnVmLCB1OCBzdWJfY21kKQogewotCWlkZV90YXNrX3QgYXJnczsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZhcmdzLnRmOworCXN0cnVjdCBpZGVfY21kIGNtZDsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQudGY7CiAKLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAl0Zi0+ZmVhdHVyZSA9IHN1Yl9jbWQ7CiAJdGYtPm5zZWN0ICAgPSAweDAxOwogCXRmLT5sYmFtICAgID0gQVRBX1NNQVJUX0xCQU1fUEFTUzsKIAl0Zi0+bGJhaCAgICA9IEFUQV9TTUFSVF9MQkFIX1BBU1M7CiAJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX1NNQVJUOwotCWFyZ3MudGZfZmxhZ3MJPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwotCWFyZ3MuZGF0YV9waGFzZQk9IFRBU0tGSUxFX0lOOwotCSh2b2lkKSBzbWFydF9lbmFibGUoZHJpdmUpOwotCXJldHVybiBpZGVfcmF3X3Rhc2tmaWxlKGRyaXZlLCAmYXJncywgYnVmLCAxKTsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCWNtZC5wcm90b2NvbCA9IEFUQV9QUk9UX1BJTzsKKworCXJldHVybiBpZGVfcmF3X3Rhc2tmaWxlKGRyaXZlLCAmY21kLCBidWYsIDEpOwogfQogCiBzdGF0aWMgaW50IHByb2NfaWRlZGlza19yZWFkX2NhY2hlCkBAIC02Nyw2ICs2Nyw4IEBACiAJaWRlX2RyaXZlX3QJKmRyaXZlID0gKGlkZV9kcml2ZV90ICopZGF0YTsKIAlpbnQJCWxlbiA9IDAsIGkgPSAwOwogCisJKHZvaWQpc21hcnRfZW5hYmxlKGRyaXZlKTsKKwogCWlmIChnZXRfc21hcnRfZGF0YShkcml2ZSwgcGFnZSwgc3ViX2NtZCkgPT0gMCkgewogCQl1bnNpZ25lZCBzaG9ydCAqdmFsID0gKHVuc2lnbmVkIHNob3J0ICopIHBhZ2U7CiAJCWNoYXIgKm91dCA9IChjaGFyICopdmFsICsgU0VDVE9SX1NJWkU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZG1hLXNmZi5jIGIvZHJpdmVycy9pZGUvaWRlLWRtYS1zZmYuYwppbmRleCAxMjNkMzkzLi43NWE5ZWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZG1hLXNmZi5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEtc2ZmLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogICoJTWF5IGFsc28gYmUgaW52b2tlZCBmcm9tIHRybTI5MC5jCiAgKi8KIAotaW50IGlkZV9idWlsZF9kbWF0YWJsZShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK2ludCBpZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlfX2xlMzIgKnRhYmxlID0gKF9fbGUzMiAqKWh3aWYtPmRtYXRhYmxlX2NwdTsKQEAgLTEyMCwxMSArMTIwLDcgQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCXU4IGlzX3RybTI5MCA9ICEhKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfVFJNMjkwKTsKIAotCWh3aWYtPnNnX25lbnRzID0gaWRlX2J1aWxkX3NnbGlzdChkcml2ZSwgcnEpOwotCWlmIChod2lmLT5zZ19uZW50cyA9PSAwKQotCQlyZXR1cm4gMDsKLQotCWZvcl9lYWNoX3NnKGh3aWYtPnNnX3RhYmxlLCBzZywgaHdpZi0+c2dfbmVudHMsIGkpIHsKKwlmb3JfZWFjaF9zZyhod2lmLT5zZ190YWJsZSwgc2csIGNtZC0+c2dfbmVudHMsIGkpIHsKIAkJdTMyIGN1cl9hZGRyLCBjdXJfbGVuLCB4Y291bnQsIGJjb3VudDsKIAogCQljdXJfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKQEAgLTE3OSw2ICsxNzUsNyBAQAogLyoqCiAgKglpZGVfZG1hX3NldHVwCS0JYmVnaW4gYSBETUEgcGhhc2UKICAqCUBkcml2ZTogdGFyZ2V0IGRldmljZQorICoJQGNtZDogY29tbWFuZAogICoKICAqCUJ1aWxkIGFuIElERSBETUEgUFJEIChJREUgc3BlYWsgZm9yIHNjYXR0ZXIgZ2F0aGVyIHRhYmxlKQogICoJYW5kIHRoZW4gc2V0IHVwIHRoZSBETUEgdHJhbnNmZXIgcmVnaXN0ZXJzIGZvciBhIGRldmljZQpAQCAtMTg5LDE3ICsxODYsMTYgQEAKICAqCWlzIHJldHVybmVkLgogICovCiAKLWludCBpZGVfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSkKK2ludCBpZGVfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7Ci0JdW5zaWduZWQgaW50IHJlYWRpbmcgPSBycV9kYXRhX2RpcihycSkgPyAwIDogQVRBX0RNQV9XUjsKIAl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKKwl1OCBydyA9IChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKSA/IDAgOiBBVEFfRE1BX1dSOwogCXU4IGRtYV9zdGF0OwogCiAJLyogZmFsbCBiYWNrIHRvIHBpbyEgKi8KLQlpZiAoIWlkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgcnEpKSB7Ci0JCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKKwlpZiAoaWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBjbWQpID09IDApIHsKKwkJaWRlX21hcF9zZyhkcml2ZSwgY21kKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0yMTIsOSArMjA4LDkgQEAKIAogCS8qIHNwZWNpZnkgci93ICovCiAJaWYgKG1taW8pCi0JCXdyaXRlYihyZWFkaW5nLCAodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpKTsKKwkJd3JpdGViKHJ3LCAodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpKTsKIAllbHNlCi0JCW91dGIocmVhZGluZywgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CisJCW91dGIocncsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpOwogCiAJLyogcmVhZCBETUEgc3RhdHVzIGZvciBJTlRSICYgRVJST1IgZmxhZ3MgKi8KIAlkbWFfc3RhdCA9IGh3aWYtPmRtYV9vcHMtPmRtYV9zZmZfcmVhZF9zdGF0dXMoaHdpZik7CkBAIC0yMjgsNyArMjI0LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfc2V0dXApOwogCiAvKioKLSAqCWRtYV90aW1lcl9leHBpcnkJLQloYW5kbGUgYSBETUEgdGltZW91dAorICoJaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5CS0JaGFuZGxlIGEgRE1BIHRpbWVvdXQKICAqCUBkcml2ZTogRHJpdmUgdGhhdCB0aW1lZCBvdXQKICAqCiAgKglBbiBJREUgRE1BIHRyYW5zZmVyIHRpbWVkIG91dC4gSW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yIHdlIGFzawpAQCAtMjQxLDcgKzIzNyw3IEBACiAgKglUaGlzIGNhbiBvY2N1ciBpZiBhbiBpbnRlcnJ1cHQgaXMgbG9zdCBvciBkdWUgdG8gaGFuZyBvciBidWdzLgogICovCiAKLXN0YXRpYyBpbnQgZG1hX3RpbWVyX2V4cGlyeShpZGVfZHJpdmVfdCAqZHJpdmUpCitpbnQgaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5KGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdTggZG1hX3N0YXQgPSBod2lmLT5kbWFfb3BzLT5kbWFfc2ZmX3JlYWRfc3RhdHVzKGh3aWYpOwpAQCAtMjY1LDE0ICsyNjEsNyBAQAogCiAJcmV0dXJuIDA7CS8qIFN0YXR1cyBpcyB1bmtub3duIC0tIHJlc2V0IHRoZSBidXMgKi8KIH0KLQotdm9pZCBpZGVfZG1hX2V4ZWNfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY29tbWFuZCkKLXsKLQkvKiBpc3N1ZSBjbWQgdG8gZHJpdmUgKi8KLQlpZGVfZXhlY3V0ZV9jb21tYW5kKGRyaXZlLCBjb21tYW5kLCAmaWRlX2RtYV9pbnRyLCAyICogV0FJVF9DTUQsCi0JCQkgICAgZG1hX3RpbWVyX2V4cGlyeSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZG1hX2V4ZWNfY21kKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSk7CiAKIHZvaWQgaWRlX2RtYV9zdGFydChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CkBAIC0zNDYsMTAgKzMzNSwxMCBAQAogY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHNmZl9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kbWEuYyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwppbmRleCBhODc4ZjQ3Li4zZGJmODBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRtYS5jCkBAIC05Niw5ICs5NiwxMyBAQAogCiAJaWYgKE9LX1NUQVQoc3RhdCwgRFJJVkVfUkVBRFksIGRyaXZlLT5iYWRfd3N0YXQgfCBBVEFfRFJRKSkgewogCQlpZiAoIWRtYV9zdGF0KSB7Ci0JCQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKKwkJCXN0cnVjdCBpZGVfY21kICpjbWQgPSAmaHdpZi0+Y21kOwogCi0JCQl0YXNrX2VuZF9yZXF1ZXN0KGRyaXZlLCBycSwgc3RhdCk7CisJCQlpZiAoKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRlMpID09IDApCisJCQkJaWRlX2ZpbmlzaF9jbWQoZHJpdmUsIGNtZCwgc3RhdCk7CisJCQllbHNlCisJCQkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCAwLAorCQkJCQkJY21kLT5ycS0+bnJfc2VjdG9ycyA8PCA5KTsKIAkJCXJldHVybiBpZGVfc3RvcHBlZDsKIAkJfQogCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlczogYmFkIERNQSBzdGF0dXMgKDB4JTAyeClcbiIsCkBAIC0xMDYsNyArMTEwLDYgQEAKIAl9CiAJcmV0dXJuIGlkZV9lcnJvcihkcml2ZSwgImRtYV9pbnRyIiwgc3RhdCk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZG1hX2ludHIpOwogCiBpbnQgaWRlX2RtYV9nb29kX2RyaXZlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKQEAgLTExNiw3ICsxMTksNyBAQAogLyoqCiAgKglpZGVfYnVpbGRfc2dsaXN0CS0JbWFwIElERSBzY2F0dGVyIGdhdGhlciBmb3IgRE1BIEkvTwogICoJQGRyaXZlOiB0aGUgZHJpdmUgdG8gYnVpbGQgdGhlIERNQSB0YWJsZSBmb3IKLSAqCUBycTogdGhlIHJlcXVlc3QgaG9sZGluZyB0aGUgc2cgbGlzdAorICoJQGNtZDogY29tbWFuZAogICoKICAqCVBlcmZvcm0gdGhlIERNQSBtYXBwaW5nIG1hZ2ljIG5lY2Vzc2FyeSB0byBhY2Nlc3MgdGhlIHNvdXJjZSBvcgogICoJdGFyZ2V0IGJ1ZmZlcnMgb2YgYSByZXF1ZXN0IHZpYSBETUEuICBUaGUgbG93ZXIgbGF5ZXJzIG9mIHRoZQpAQCAtMTI0LDI4ICsxMjcsMjkgQEAKICAqCW9wZXJhdGUgaW4gYSBwb3J0YWJsZSBmYXNoaW9uLgogICovCiAKLWludCBpZGVfYnVpbGRfc2dsaXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQoraW50IGlkZV9idWlsZF9zZ2xpc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gaHdpZi0+c2dfdGFibGU7CiAJaW50IGk7CiAKLQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7CisJaWRlX21hcF9zZyhkcml2ZSwgY21kKTsKIAotCWlmIChycV9kYXRhX2RpcihycSkgPT0gUkVBRCkKLQkJaHdpZi0+c2dfZG1hX2RpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkKKwkJY21kLT5zZ19kbWFfZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKIAllbHNlCi0JCWh3aWYtPnNnX2RtYV9kaXJlY3Rpb24gPSBETUFfVE9fREVWSUNFOworCQljbWQtPnNnX2RtYV9kaXJlY3Rpb24gPSBETUFfRlJPTV9ERVZJQ0U7CiAKLQlpID0gZG1hX21hcF9zZyhod2lmLT5kZXYsIHNnLCBod2lmLT5zZ19uZW50cywgaHdpZi0+c2dfZG1hX2RpcmVjdGlvbik7Ci0JaWYgKGkpIHsKLQkJaHdpZi0+b3JpZ19zZ19uZW50cyA9IGh3aWYtPnNnX25lbnRzOwotCQlod2lmLT5zZ19uZW50cyA9IGk7CisJaSA9IGRtYV9tYXBfc2coaHdpZi0+ZGV2LCBzZywgY21kLT5zZ19uZW50cywgY21kLT5zZ19kbWFfZGlyZWN0aW9uKTsKKwlpZiAoaSA9PSAwKQorCQlpZGVfbWFwX3NnKGRyaXZlLCBjbWQpOworCWVsc2UgeworCQljbWQtPm9yaWdfc2dfbmVudHMgPSBjbWQtPnNnX25lbnRzOworCQljbWQtPnNnX25lbnRzID0gaTsKIAl9CiAKIAlyZXR1cm4gaTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9idWlsZF9zZ2xpc3QpOwogCiAvKioKICAqCWlkZV9kZXN0cm95X2RtYXRhYmxlCS0JY2xlYW4gdXAgRE1BIG1hcHBpbmcKQEAgLTE2MSw5ICsxNjUsMTAgQEAKIHZvaWQgaWRlX2Rlc3Ryb3lfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2NtZCAqY21kID0gJmh3aWYtPmNtZDsKIAotCWRtYV91bm1hcF9zZyhod2lmLT5kZXYsIGh3aWYtPnNnX3RhYmxlLCBod2lmLT5vcmlnX3NnX25lbnRzLAotCQkgICAgIGh3aWYtPnNnX2RtYV9kaXJlY3Rpb24pOworCWRtYV91bm1hcF9zZyhod2lmLT5kZXYsIGh3aWYtPnNnX3RhYmxlLCBjbWQtPm9yaWdfc2dfbmVudHMsCisJCSAgICAgY21kLT5zZ19kbWFfZGlyZWN0aW9uKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kZXN0cm95X2RtYXRhYmxlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWVoLmMgYi9kcml2ZXJzL2lkZS9pZGUtZWguYwppbmRleCAxMjMxYjVlLi4xMTY2NDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZWguYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZWguYwpAQCAtMTIzLDggKzEyMywxOCBAQAogCiAJLyogcmV0cnkgb25seSAibm9ybWFsIiBJL086ICovCiAJaWYgKCFibGtfZnNfcmVxdWVzdChycSkpIHsKLQkJcnEtPmVycm9ycyA9IDE7Ci0JCWlkZV9lbmRfZHJpdmVfY21kKGRyaXZlLCBzdGF0LCBlcnIpOworCQlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9UQVNLRklMRSkgeworCQkJc3RydWN0IGlkZV9jbWQgKmNtZCA9IHJxLT5zcGVjaWFsOworCisJCQlpZiAoY21kKQorCQkJCWlkZV9jb21wbGV0ZV9jbWQoZHJpdmUsIGNtZCwgc3RhdCwgZXJyKTsKKwkJfSBlbHNlIGlmIChibGtfcG1fcmVxdWVzdChycSkpIHsKKwkJCXJxLT5lcnJvcnMgPSAxOworCQkJaWRlX2NvbXBsZXRlX3BtX3JxKGRyaXZlLCBycSk7CisJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJCX0KKwkJcnEtPmVycm9ycyA9IGVycjsKKwkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCBlcnIgPyAtRUlPIDogMCwgYmxrX3JxX2J5dGVzKHJxKSk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKQEAgLTEzNiw4ICsxNDYsMTEgQEAKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7CiAKLQlpZiAocnEgJiYgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkgJiYgcnEtPmNtZFswXSA9PSBSRVFfRFJJVkVfUkVTRVQpCi0JCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgZXJyID8gZXJyIDogMSwgMCk7CisJaWYgKHJxICYmIGJsa19zcGVjaWFsX3JlcXVlc3QocnEpICYmIHJxLT5jbWRbMF0gPT0gUkVRX0RSSVZFX1JFU0VUKSB7CisJCWlmIChlcnIgPD0gMCAmJiBycS0+ZXJyb3JzID09IDApCisJCQlycS0+ZXJyb3JzID0gLUVJTzsKKwkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCBlcnIgPyBlcnIgOiAwLCBpZGVfcnFfYnl0ZXMocnEpKTsKKwl9CiB9CiAKIC8qIG5lZWRlZCBiZWxvdyAqLwpAQCAtMTYyLDggKzE3NSw3IEBACiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBBVEFQSSByZXNldCBjb21wbGV0ZVxuIiwgZHJpdmUtPm5hbWUpOwogCWVsc2UgewogCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgaHdpZi0+cG9sbF90aW1lb3V0KSkgewotCQkJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmYXRhcGlfcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLAotCQkJCQlOVUxMKTsKKwkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmF0YXBpX3Jlc2V0X3BvbGxmdW5jLCBIWi8yMCk7CiAJCQkvKiBjb250aW51ZSBwb2xsaW5nICovCiAJCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiAJCX0KQEAgLTIyNSw3ICsyMzcsNyBAQAogCiAJaWYgKCFPS19TVEFUKHRtcCwgMCwgQVRBX0JVU1kpKSB7CiAJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBod2lmLT5wb2xsX3RpbWVvdXQpKSB7Ci0JCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZyZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOworCQkJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmcmVzZXRfcG9sbGZ1bmMsIEhaLzIwKTsKIAkJCS8qIGNvbnRpbnVlIHBvbGxpbmcgKi8KIAkJCXJldHVybiBpZGVfc3RhcnRlZDsKIAkJfQpAQCAtMzQyLDcgKzM1NCw3IEBACiAJCW5kZWxheSg0MDApOwogCQlod2lmLT5wb2xsX3RpbWVvdXQgPSBqaWZmaWVzICsgV0FJVF9XT1JTVENBU0U7CiAJCWh3aWYtPnBvbGxpbmcgPSAxOwotCQlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmF0YXBpX3Jlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7CisJCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmYXRhcGlfcmVzZXRfcG9sbGZ1bmMsIEhaLzIwKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiAJfQpAQCAtNDAyLDcgKzQxNCw3IEBACiAJdWRlbGF5KDEwKTsKIAlod2lmLT5wb2xsX3RpbWVvdXQgPSBqaWZmaWVzICsgV0FJVF9XT1JTVENBU0U7CiAJaHdpZi0+cG9sbGluZyA9IDE7Ci0JX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZyZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOworCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmcmVzZXRfcG9sbGZ1bmMsIEhaLzIwKTsKIAogCS8qCiAJICogU29tZSB3ZWlyZCBjb250cm9sbGVyIGxpa2UgcmVzZXR0aW5nIHRoZW1zZWx2ZXMgdG8gYSBzdHJhbmdlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKaW5kZXggMzE3ZWM2Mi4uN2FlNjYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwpAQCAtNjEsNTAgKzYxLDYgQEAKICAqLwogI2RlZmluZSBJREVGTE9QUFlfUENfREVMQVkJKEhaLzIwKQkvKiBkZWZhdWx0IGRlbGF5IGZvciBaSVAgMTAwICg1MG1zKSAqLwogCi0vKiBFcnJvciBjb2RlIHJldHVybmVkIGluIHJxLT5lcnJvcnMgdG8gdGhlIGhpZ2hlciBwYXJ0IG9mIHRoZSBkcml2ZXIuICovCi0jZGVmaW5lCUlERUZMT1BQWV9FUlJPUl9HRU5FUkFMCQkxMDEKLQotLyoKLSAqIFVzZWQgdG8gZmluaXNoIHNlcnZpY2luZyBhIHJlcXVlc3QuIEZvciByZWFkL3dyaXRlIHJlcXVlc3RzLCB3ZSB3aWxsIGNhbGwKLSAqIGlkZV9lbmRfcmVxdWVzdCB0byBwYXNzIHRvIHRoZSBuZXh0IGJ1ZmZlci4KLSAqLwotc3RhdGljIGludCBpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHVwdG9kYXRlLCBpbnQgbnNlY3MpCi17Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGRyaXZlLT5od2lmLT5ycTsKLQlpbnQgZXJyb3I7Ci0KLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKLQotCXN3aXRjaCAodXB0b2RhdGUpIHsKLQljYXNlIDA6Ci0JCWVycm9yID0gSURFRkxPUFBZX0VSUk9SX0dFTkVSQUw7Ci0JCWJyZWFrOwotCi0JY2FzZSAxOgotCQllcnJvciA9IDA7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZXJyb3IgPSB1cHRvZGF0ZTsKLQl9Ci0KLQlpZiAoZXJyb3IpCi0JCWZsb3BweS0+ZmFpbGVkX3BjID0gTlVMTDsKLQkvKiBXaHkgZG9lcyB0aGlzIGhhcHBlbj8gKi8KLQlpZiAoIXJxKQotCQlyZXR1cm4gMDsKLQlpZiAoIWJsa19zcGVjaWFsX3JlcXVlc3QocnEpKSB7Ci0JCS8qIG91ciByZWFsIGxvY2FsIGVuZCByZXF1ZXN0IGZ1bmN0aW9uICovCi0JCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgdXB0b2RhdGUsIG5zZWNzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJxLT5lcnJvcnMgPSBlcnJvcjsKLQkvKiBmaXhtZTogbmVlZCB0byBtb3ZlIHRoaXMgbG9jYWwgYWxzbyAqLwotCWlkZV9lbmRfZHJpdmVfY21kKGRyaXZlLCAwLCAwKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgaWRlZmxvcHB5X3VwZGF0ZV9idWZmZXJzKGlkZV9kcml2ZV90ICpkcml2ZSwKIAkJCQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKIHsKQEAgLTExMiwyMiArNjgsMjMgQEAKIAlzdHJ1Y3QgYmlvICpiaW8gPSBycS0+YmlvOwogCiAJd2hpbGUgKChiaW8gPSBycS0+YmlvKSAhPSBOVUxMKQotCQlpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAxLCAwKTsKKwkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCAwLCBpZGVfcnFfYnl0ZXMocnEpKTsKIH0KIAotc3RhdGljIHZvaWQgaWRlX2Zsb3BweV9jYWxsYmFjayhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBkc2MpCitzdGF0aWMgaW50IGlkZV9mbG9wcHlfY2FsbGJhY2soaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZHNjKQogewogCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IGRyaXZlLT5wYzsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBwYy0+cnE7CiAJaW50IHVwdG9kYXRlID0gcGMtPmVycm9yID8gMCA6IDE7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKLQlpZiAoZmxvcHB5LT5mYWlsZWRfcGMgPT0gcGMpCi0JCWZsb3BweS0+ZmFpbGVkX3BjID0gTlVMTDsKKwlpZiAoZHJpdmUtPmZhaWxlZF9wYyA9PSBwYykKKwkJZHJpdmUtPmZhaWxlZF9wYyA9IE5VTEw7CiAKIAlpZiAocGMtPmNbMF0gPT0gR1BDTURfUkVBRF8xMCB8fCBwYy0+Y1swXSA9PSBHUENNRF9XUklURV8xMCB8fAotCSAgICAocGMtPnJxICYmIGJsa19wY19yZXF1ZXN0KHBjLT5ycSkpKQorCSAgICAocnEgJiYgYmxrX3BjX3JlcXVlc3QocnEpKSkKIAkJdXB0b2RhdGUgPSAxOyAvKiBGSVhNRSAqLwogCWVsc2UgaWYgKHBjLT5jWzBdID09IEdQQ01EX1JFUVVFU1RfU0VOU0UpIHsKIAkJdTggKmJ1ZiA9IHBjLT5idWY7CkBAIC0xMzksMTkgKzk2LDIyIEBACiAJCQlmbG9wcHktPnByb2dyZXNzX2luZGljYXRpb24gPSBidWZbMTVdICYgMHg4MCA/CiAJCQkJKHUxNilnZXRfdW5hbGlnbmVkKCh1MTYgKikmYnVmWzE2XSkgOiAweDEwMDAwOwogCi0JCQlpZiAoZmxvcHB5LT5mYWlsZWRfcGMpCi0JCQkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAicGMgPSAleCwgIiwKLQkJCQkJICAgICAgZmxvcHB5LT5mYWlsZWRfcGMtPmNbMF0pOworCQkJaWYgKGRyaXZlLT5mYWlsZWRfcGMpCisJCQkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAicGMgPSAleCIsCisJCQkJCSAgICAgIGRyaXZlLT5mYWlsZWRfcGMtPmNbMF0pOwogCiAJCQlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJzZW5zZSBrZXkgPSAleCwgYXNjID0gJXgsIgotCQkJCSAgICAgICJhc2NxID0gJXhcbiIsIGZsb3BweS0+c2Vuc2Vfa2V5LAorCQkJCSAgICAgICJhc2NxID0gJXgiLCBmbG9wcHktPnNlbnNlX2tleSwKIAkJCQkgICAgICBmbG9wcHktPmFzYywgZmxvcHB5LT5hc2NxKTsKIAkJfSBlbHNlCiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJFcnJvciBpbiBSRVFVRVNUIFNFTlNFIGl0c2VsZiAtICIKIAkJCSAgICAgICAiQWJvcnRpbmcgcmVxdWVzdCFcbiIpOwogCX0KIAotCWlkZV9mbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIHVwdG9kYXRlLCAwKTsKKwlpZiAoYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpCisJCXJxLT5lcnJvcnMgPSB1cHRvZGF0ZSA/IDAgOiBJREVfRFJWX0VSUk9SX0dFTkVSQUw7CisKKwlyZXR1cm4gdXB0b2RhdGU7CiB9CiAKIHN0YXRpYyB2b2lkIGlkZV9mbG9wcHlfcmVwb3J0X2Vycm9yKHN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSwKQEAgLTE3MCwxNCArMTMwLDE1IEBACiAKIH0KIAotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVmbG9wcHlfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLAotCQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2Zsb3BweV9pc3N1ZV9wYyhpZGVfZHJpdmVfdCAqZHJpdmUsCisJCQkJCSAgIHN0cnVjdCBpZGVfY21kICpjbWQsCisJCQkJCSAgIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewogCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAotCWlmIChmbG9wcHktPmZhaWxlZF9wYyA9PSBOVUxMICYmCisJaWYgKGRyaXZlLT5mYWlsZWRfcGMgPT0gTlVMTCAmJgogCSAgICBwYy0+Y1swXSAhPSBHUENNRF9SRVFVRVNUX1NFTlNFKQotCQlmbG9wcHktPmZhaWxlZF9wYyA9IHBjOworCQlkcml2ZS0+ZmFpbGVkX3BjID0gcGM7CiAKIAkvKiBTZXQgdGhlIGN1cnJlbnQgcGFja2V0IGNvbW1hbmQgKi8KIAlkcml2ZS0+cGMgPSBwYzsKQEAgLTE4NiwxOCArMTQ3LDE4IEBACiAJCWlmICghKHBjLT5mbGFncyAmIFBDX0ZMQUdfU1VQUFJFU1NfRVJST1IpKQogCQkJaWRlX2Zsb3BweV9yZXBvcnRfZXJyb3IoZmxvcHB5LCBwYyk7CiAJCS8qIEdpdmluZyB1cCAqLwotCQlwYy0+ZXJyb3IgPSBJREVGTE9QUFlfRVJST1JfR0VORVJBTDsKKwkJcGMtPmVycm9yID0gSURFX0RSVl9FUlJPUl9HRU5FUkFMOwogCi0JCWZsb3BweS0+ZmFpbGVkX3BjID0gTlVMTDsKKwkJZHJpdmUtPmZhaWxlZF9wYyA9IE5VTEw7CiAJCWRyaXZlLT5wY19jYWxsYmFjayhkcml2ZSwgMCk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIiVzOiBSZXRyeSAjJWRcbiIsIF9fZnVuY19fLCBwYy0+cmV0cmllcyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJyZXRyeSAjJWQiLCBwYy0+cmV0cmllcyk7CiAKIAlwYy0+cmV0cmllcysrOwogCi0JcmV0dXJuIGlkZV9pc3N1ZV9wYyhkcml2ZSk7CisJcmV0dXJuIGlkZV9pc3N1ZV9wYyhkcml2ZSwgY21kKTsKIH0KIAogdm9pZCBpZGVfZmxvcHB5X2NyZWF0ZV9yZWFkX2NhcGFjaXR5X2NtZChzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKQEAgLTI0Miw4ICsyMDMsNyBAQAogCWludCBibG9ja3MgPSBycS0+bnJfc2VjdG9ycyAvIGZsb3BweS0+YnNfZmFjdG9yOwogCWludCBjbWQgPSBycV9kYXRhX2RpcihycSk7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIiVzOiBibG9jazogJWQsIGJsb2NrczogJWRcbiIsIF9fZnVuY19fLAotCQkgICAgICBibG9jaywgYmxvY2tzKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImJsb2NrOiAlZCwgYmxvY2tzOiAlZCIsIGJsb2NrLCBibG9ja3MpOwogCiAJaWRlX2luaXRfcGMocGMpOwogCXBjLT5jWzBdID0gY21kID09IFJFQUQgPyBHUENNRF9SRUFEXzEwIDogR1BDTURfV1JJVEVfMTA7CkBAIC0yODUsMzQgKzI0NSwzNCBAQAogewogCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICIlczogZGV2OiAlcywgY21kOiAweCV4LCBjbWRfdHlwZTogJXgsICIKLQkJICAgICAgImVycm9yczogJWRcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBycS0+cnFfZGlzayA/IHJxLT5ycV9kaXNrLT5kaXNrX25hbWUgOiAiPyIsCi0JCSAgICAgIHJxLT5jbWRbMF0sIHJxLT5jbWRfdHlwZSwgcnEtPmVycm9ycyk7Ci0KLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIiVzOiBzZWN0b3I6ICVsZCwgbnJfc2VjdG9yczogJWxkLCAiCi0JCSAgICAgICJjdXJyZW50X25yX3NlY3RvcnM6ICVkXG4iLAotCQkgICAgICBfX2Z1bmNfXywgKGxvbmcpcnEtPnNlY3RvciwgcnEtPm5yX3NlY3RvcnMsCi0JCSAgICAgIHJxLT5jdXJyZW50X25yX3NlY3RvcnMpOworCWlmIChkcml2ZS0+ZGVidWdfbWFzayAmIElERV9EQkdfUlEpCisJCWJsa19kdW1wX3JxX2ZsYWdzKHJxLCAocnEtPnJxX2Rpc2sKKwkJCQkJPyBycS0+cnFfZGlzay0+ZGlza19uYW1lCisJCQkJCTogImRldj8iKSk7CiAKIAlpZiAocnEtPmVycm9ycyA+PSBFUlJPUl9NQVgpIHsKLQkJaWYgKGZsb3BweS0+ZmFpbGVkX3BjKQotCQkJaWRlX2Zsb3BweV9yZXBvcnRfZXJyb3IoZmxvcHB5LCBmbG9wcHktPmZhaWxlZF9wYyk7Ci0JCWVsc2UKKwkJaWYgKGRyaXZlLT5mYWlsZWRfcGMpIHsKKwkJCWlkZV9mbG9wcHlfcmVwb3J0X2Vycm9yKGZsb3BweSwgZHJpdmUtPmZhaWxlZF9wYyk7CisJCQlkcml2ZS0+ZmFpbGVkX3BjID0gTlVMTDsKKwkJfSBlbHNlCiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogSS9PIGVycm9yXG4iLCBkcml2ZS0+bmFtZSk7CiAKLQkJaWRlX2Zsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKKwkJaWYgKGJsa19zcGVjaWFsX3JlcXVlc3QocnEpKSB7CisJCQlycS0+ZXJyb3JzID0gMDsKKwkJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwgYmxrX3JxX2J5dGVzKHJxKSk7CisJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJCX0gZWxzZQorCQkJZ290byBvdXRfZW5kOwogCX0KIAlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpKSB7CiAJCWlmICgoKGxvbmcpcnEtPnNlY3RvciAlIGZsb3BweS0+YnNfZmFjdG9yKSB8fAogCQkgICAgKHJxLT5ucl9zZWN0b3JzICUgZmxvcHB5LT5ic19mYWN0b3IpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogdW5zdXBwb3J0ZWQgci93IHJxIHNpemVcbiIsCiAJCQkJZHJpdmUtPm5hbWUpOwotCQkJaWRlX2Zsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7Ci0JCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJCQlnb3RvIG91dF9lbmQ7CiAJCX0KIAkJcGMgPSAmZmxvcHB5LT5xdWV1ZWRfcGM7CiAJCWlkZWZsb3BweV9jcmVhdGVfcndfY21kKGRyaXZlLCBwYywgcnEsICh1bnNpZ25lZCBsb25nKWJsb2NrKTsKQEAgLTMyMywyMSArMjgzLDMzIEBACiAJCWlkZWZsb3BweV9ibG9ja3BjX2NtZChmbG9wcHksIHBjLCBycSk7CiAJfSBlbHNlIHsKIAkJYmxrX2R1bXBfcnFfZmxhZ3MocnEsIFBGWCAidW5zdXBwb3J0ZWQgY29tbWFuZCBpbiBxdWV1ZSIpOwotCQlpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOworCQlnb3RvIG91dF9lbmQ7CiAJfQogCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKworCWlmIChycV9kYXRhX2RpcihycSkpCisJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfV1JJVEU7CisKKwljbWQucnEgPSBycTsKKwogCWlmIChibGtfZnNfcmVxdWVzdChycSkgfHwgcGMtPnJlcV94ZmVyKSB7Ci0JCWlkZV9pbml0X3NnX2NtZChkcml2ZSwgcnEpOwotCQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7CisJCWlkZV9pbml0X3NnX2NtZCgmY21kLCBycS0+bnJfc2VjdG9ycyA8PCA5KTsKKwkJaWRlX21hcF9zZyhkcml2ZSwgJmNtZCk7CiAJfQogCiAJcGMtPnNnID0gaHdpZi0+c2dfdGFibGU7Ci0JcGMtPnNnX2NudCA9IGh3aWYtPnNnX25lbnRzOworCXBjLT5zZ19jbnQgPSBjbWQuc2dfbmVudHM7CiAKIAlwYy0+cnEgPSBycTsKIAotCXJldHVybiBpZGVmbG9wcHlfaXNzdWVfcGMoZHJpdmUsIHBjKTsKKwlyZXR1cm4gaWRlX2Zsb3BweV9pc3N1ZV9wYyhkcml2ZSwgJmNtZCwgcGMpOworb3V0X2VuZDoKKwlkcml2ZS0+ZmFpbGVkX3BjID0gTlVMTDsKKwlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpID09IDAgJiYgcnEtPmVycm9ycyA9PSAwKQorCQlycS0+ZXJyb3JzID0gLUVJTzsKKwlpZGVfY29tcGxldGVfcnEoZHJpdmUsIC1FSU8sIGlkZV9ycV9ieXRlcyhycSkpOworCXJldHVybiBpZGVfc3RvcHBlZDsKIH0KIAogLyoKQEAgLTQzOCw4ICs0MTAsOSBAQAogCQlsZW5ndGggPSBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSZwYy5idWZbZGVzY19zdGFydCArIDZdKTsKIAogCQlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJEZXNjcmlwdG9yICVkOiAlZGtCLCAlZCBibG9ja3MsICIKLQkJCSAgICAgICIlZCBzZWN0b3Igc2l6ZVxuIiwKLQkJCSAgICAgIGksIGJsb2NrcyAqIGxlbmd0aCAvIDEwMjQsIGJsb2NrcywgbGVuZ3RoKTsKKwkJCQkJICAgICAiJWQgc2VjdG9yIHNpemUiLAorCQkJCQkgICAgIGksIGJsb2NrcyAqIGxlbmd0aCAvIDEwMjQsCisJCQkJCSAgICAgYmxvY2tzLCBsZW5ndGgpOwogCiAJCWlmIChpKQogCQkJY29udGludWU7CkBAIC00OTUsOCArNDY4LDggQEAKIAkJCQkiaW4gZHJpdmVcbiIsIGRyaXZlLT5uYW1lKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgIkRlc2NyaXB0b3IgMCBDb2RlOiAlZFxuIiwKLQkJCSAgICAgIHBjLmJ1ZltkZXNjX3N0YXJ0ICsgNF0gJiAweDAzKTsKKwkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiRGVzY3JpcHRvciAwIENvZGU6ICVkIiwKKwkJCQkJICAgICBwYy5idWZbZGVzY19zdGFydCArIDRdICYgMHgwMyk7CiAJfQogCiAJLyogQ2xpayEgZGlzayBkb2VzIG5vdCBzdXBwb3J0IGdldF9mbGV4aWJsZV9kaXNrX3BhZ2UgKi8KQEAgLTU3NSw2ICs1NDgsNSBAQAogCS5pbml0X21lZGlhCT0gaWRlX2Zsb3BweV9pbml0X21lZGlhLAogCS5zZXRfZG9vcmxvY2sJPSBpZGVfc2V0X21lZGlhX2xvY2ssCiAJLmRvX3JlcXVlc3QJPSBpZGVfZmxvcHB5X2RvX3JlcXVlc3QsCi0JLmVuZF9yZXF1ZXN0CT0gaWRlX2Zsb3BweV9lbmRfcmVxdWVzdCwKIAkuaW9jdGwJCT0gaWRlX2Zsb3BweV9pb2N0bCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZ2QuYyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5jCmluZGV4IDA0NzEwOTQuLjFhZWJkZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1nZC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5jCkBAIC0xNDUsMTEgKzE0NSw2IEBACiAJcmV0dXJuIGRyaXZlLT5kaXNrX29wcy0+ZG9fcmVxdWVzdChkcml2ZSwgcnEsIHNlY3Rvcik7CiB9CiAKLXN0YXRpYyBpbnQgaWRlX2dkX2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHVwdG9kYXRlLCBpbnQgbnJzZWNzKQotewotCXJldHVybiBkcml2ZS0+ZGlza19vcHMtPmVuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSwgbnJzZWNzKTsKLX0KLQogc3RhdGljIHN0cnVjdCBpZGVfZHJpdmVyIGlkZV9nZF9kcml2ZXIgPSB7CiAJLmdlbl9kcml2ZXIgPSB7CiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKQEAgLTE2Miw3ICsxNTcsNiBAQAogCS5zaHV0ZG93bgkJPSBpZGVfZ2Rfc2h1dGRvd24sCiAJLnZlcnNpb24JCT0gSURFX0dEX1ZFUlNJT04sCiAJLmRvX3JlcXVlc3QJCT0gaWRlX2dkX2RvX3JlcXVlc3QsCi0JLmVuZF9yZXF1ZXN0CQk9IGlkZV9nZF9lbmRfcmVxdWVzdCwKICNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKIAkucHJvY19lbnRyaWVzCQk9IGlkZV9kaXNrX3Byb2NfZW50cmllcywKIAkucHJvY19kZXZzZXRzCQk9IGlkZV9kaXNrX3Byb2NfZGV2c2V0cywKQEAgLTE4Miw3ICsxNzYsNyBAQAogCiAJZHJpdmUgPSBpZGtwLT5kcml2ZTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAogCWlka3AtPm9wZW5lcnMrKzsKIApAQCAtMjMyLDcgKzIyNiw3IEBACiAJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kcnZfZyhkaXNrLCBpZGVfZGlza19vYmopOwogCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJlbnRlciIpOwogCiAJaWYgKGlka3AtPm9wZW5lcnMgPT0gMSkKIAkJZHJpdmUtPmRpc2tfb3BzLT5mbHVzaChkcml2ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZ2QuaCBiL2RyaXZlcnMvaWRlL2lkZS1nZC5oCmluZGV4IGI2MDRiZGQuLjU1OTcwNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1nZC5oCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBJREVfR0RfREVCVUdfTE9HCTAKIAogI2lmIElERV9HRF9ERUJVR19MT0cKLSNkZWZpbmUgaWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikgX19pZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzKQorI2RlZmluZSBpZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKSBfX2lkZV9kZWJ1Z19sb2cobHZsLCBmbXQsICMjIGFyZ3MpCiAjZWxzZQogI2RlZmluZSBpZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgpAQCAtMjAsOCArMjAsNiBAQAogCXN0cnVjdCBkZXZpY2UJCWRldjsKIAl1bnNpZ25lZCBpbnQJCW9wZW5lcnM7CS8qIHByb3RlY3RlZCBieSBCS0wgZm9yIG5vdyAqLwogCi0JLyogTGFzdCBmYWlsZWQgcGFja2V0IGNvbW1hbmQgKi8KLQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpmYWlsZWRfcGM7CiAJLyogdXNlZCBmb3IgYmxrX3tmcyxwY31fcmVxdWVzdCgpIHJlcXVlc3RzICovCiAJc3RydWN0IGlkZV9hdGFwaV9wYyBxdWV1ZWRfcGM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1nZW5lcmljLmMgYi9kcml2ZXJzL2lkZS9pZGUtZ2VuZXJpYy5jCmluZGV4IDgxYTUyODIuLjlkMDNlODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1nZW5lcmljLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWdlbmVyaWMuYwpAQCAtMzIsNiArMzIsMTAgQEAKIG1vZHVsZV9wYXJhbShwcm9iZV9tYXNrLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhwcm9iZV9tYXNrLCAicHJvYmUgbWFzayBmb3IgbGVnYWN5IElTQSBJREUgcG9ydHMiKTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGlkZV9nZW5lcmljX3BvcnRfaW5mbyA9IHsKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTk9fRE1BLAorfTsKKwogc3RhdGljIHNzaXplX3Qgc3RvcmVfYWRkKHN0cnVjdCBjbGFzcyAqY2xzLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKQogewogCXVuc2lnbmVkIGludCBiYXNlLCBjdGw7CkBAIC00Niw3ICs1MCw3IEBACiAJaHcuaXJxID0gaXJxOwogCWh3LmNoaXBzZXQgPSBpZGVfZ2VuZXJpYzsKIAotCXJjID0gaWRlX2hvc3RfYWRkKE5VTEwsIGh3cywgTlVMTCk7CisJcmMgPSBpZGVfaG9zdF9hZGQoJmlkZV9nZW5lcmljX3BvcnRfaW5mbywgaHdzLCBOVUxMKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMTg0LDcgKzE4OCw3IEBACiAjZW5kaWYKIAkJCWh3LmNoaXBzZXQgPSBpZGVfZ2VuZXJpYzsKIAotCQkJcmMgPSBpZGVfaG9zdF9hZGQoTlVMTCwgaHdzLCBOVUxMKTsKKwkJCXJjID0gaWRlX2hvc3RfYWRkKCZpZGVfZ2VuZXJpY19wb3J0X2luZm8sIGh3cywgTlVMTCk7CiAJCQlpZiAocmMpIHsKIAkJCQlyZWxlYXNlX3JlZ2lvbihpb19hZGRyICsgMHgyMDYsIDEpOwogCQkJCXJlbGVhc2VfcmVnaW9uKGlvX2FkZHIsIDgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWg4MzAwLmMgYi9kcml2ZXJzL2lkZS9pZGUtaDgzMDAuYwppbmRleCA5MjcwZDMyLi5mZjgzMzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaDgzMDAuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaDgzMDAuYwpAQCAtNDQsNTMgKzQ0LDUzIEBACiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyB2b2lkIGg4MzAwX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgaDgzMDBfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOwotCXU4IEhJSEkgPSAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMHhFMCA6IDB4RUY7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLT50ZjsKKwl1OCBISUhJID0gKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMHhFMCA6IDB4RUY7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0ZMQUdHRUQpCiAJCUhJSEkgPSAweEZGOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9EQVRBKQorCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfT1VUX0RBVEEpCiAJCW1tX291dHcoKHRmLT5ob2JfZGF0YSA8PCA4KSB8IHRmLT5kYXRhLCBpb19wb3J0cy0+ZGF0YV9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQogCQlvdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKIAkJb3V0Yih0Zi0+aG9iX25zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUwpCiAJCW91dGIodGYtPmhvYl9sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKIAkJb3V0Yih0Zi0+aG9iX2xiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQogCQlvdXRiKHRmLT5ob2JfbGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCiAJCW91dGIodGYtPmZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQogCQlvdXRiKHRmLT5uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKIAkJb3V0Yih0Zi0+bGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQogCQlvdXRiKHRmLT5sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCiAJCW91dGIodGYtPmxiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkKIAkJb3V0YigodGYtPmRldmljZSAmIEhJSEkpIHwgZHJpdmUtPnNlbGVjdCwKIAkJICAgICBpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogfQogCi1zdGF0aWMgdm9pZCBoODMwMF90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3N0YXRpYyB2b2lkIGg4MzAwX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RBVEEpIHsKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0lOX0RBVEEpIHsKIAkJdTE2IGRhdGEgPSBtbV9pbncoaW9fcG9ydHMtPmRhdGFfYWRkcik7CiAKIAkJdGYtPmRhdGEgPSBkYXRhICYgMHhmZjsKQEAgLTEwMCwzMSArMTAwLDMxIEBACiAJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLwogCW91dGIoQVRBX0RFVkNUTF9PQlMgJiB+MHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCiAJCXRmLT5mZWF0dXJlID0gaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKIAkJdGYtPm5zZWN0ICA9IGluYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKIAkJdGYtPmxiYWwgICA9IGluYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQogCQl0Zi0+bGJhbSAgID0gaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCiAJCXRmLT5sYmFoICAgPSBpbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCiAJCXRmLT5kZXZpY2UgPSBpbmIoaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgeworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7CiAJCW91dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCiAJCQl0Zi0+aG9iX2ZlYXR1cmUgPSBpbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKIAkJCXRmLT5ob2JfbnNlY3QgICA9IGluYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCiAJCQl0Zi0+aG9iX2xiYWwgICAgPSBpbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCiAJCQl0Zi0+aG9iX2xiYW0gICAgPSBpbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCiAJCQl0Zi0+aG9iX2xiYWggICAgPSBpbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAJfQogfQpAQCAtMTQzLDEzICsxNDMsMTMgQEAKIAkJKmJwID0gYnN3YXAoKih2b2xhdGlsZSB1MTYgKilhZGRyKTsKIH0KIAotc3RhdGljIHZvaWQgaDgzMDBfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKK3N0YXRpYyB2b2lkIGg4MzAwX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJbW1faW5zdyhkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwogfQogCi1zdGF0aWMgdm9pZCBoODMwMF9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKK3N0YXRpYyB2b2lkIGg4MzAwX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKIAkJCSAgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAltbV9vdXRzdyhkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvLXN0ZC5jIGIvZHJpdmVycy9pZGUvaWRlLWlvLXN0ZC5jCmluZGV4IDQ1YjQzZGQuLjJkOWM2ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pby1zdGQuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW8tc3RkLmMKQEAgLTIsNiArMiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogCisjaWYgZGVmaW5lZChDT05GSUdfQVJNKSB8fCBkZWZpbmVkKENPTkZJR19NNjhLKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfUEFSSVNDKSB8fCBkZWZpbmVkKENPTkZJR19QUEMpIHx8IGRlZmluZWQoQ09ORklHX1NQQVJDKQorI2luY2x1ZGUgPGFzbS9pZGUuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KKyNlbmRpZgorCiAvKgogICoJQ29udmVudGlvbmFsIFBJTyBvcGVyYXRpb25zIGZvciBBVEEgZGV2aWNlcwogICovCkBAIC03NSwyNCArODIsMjQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9zZXRfaXJxKTsKIAotdm9pZCBpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCit2b2lkIGlkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLT50ZjsKIAl2b2lkICgqdGZfb3V0YikodTggYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KTsKIAl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKLQl1OCBISUhJID0gKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSA/IDB4RTAgOiAweEVGOworCXU4IEhJSEkgPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgPyAweEUwIDogMHhFRjsKIAogCWlmIChtbWlvKQogCQl0Zl9vdXRiID0gaWRlX21tX291dGI7CiAJZWxzZQogCQl0Zl9vdXRiID0gaWRlX291dGI7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0ZMQUdHRUQpCiAJCUhJSEkgPSAweEZGOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9EQVRBKSB7CisJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19PVVRfREFUQSkgewogCQl1MTYgZGF0YSA9ICh0Zi0+aG9iX2RhdGEgPDwgOCkgfCB0Zi0+ZGF0YTsKIAogCQlpZiAobW1pbykKQEAgLTEwMSwzOSArMTA4LDM5IEBACiAJCQlvdXR3KGRhdGEsIGlvX3BvcnRzLT5kYXRhX2FkZHIpOwogCX0KIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQogCQl0Zl9vdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKIAkJdGZfb3V0Yih0Zi0+aG9iX25zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUwpCiAJCXRmX291dGIodGYtPmhvYl9sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKIAkJdGZfb3V0Yih0Zi0+aG9iX2xiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQogCQl0Zl9vdXRiKHRmLT5ob2JfbGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCiAJCXRmX291dGIodGYtPmZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQogCQl0Zl9vdXRiKHRmLT5uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKIAkJdGZfb3V0Yih0Zi0+bGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQogCQl0Zl9vdXRiKHRmLT5sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCiAJCXRmX291dGIodGYtPmxiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkKIAkJdGZfb3V0YigodGYtPmRldmljZSAmIEhJSEkpIHwgZHJpdmUtPnNlbGVjdCwKIAkJCSBpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3RmX2xvYWQpOwogCi12b2lkIGlkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3ZvaWQgaWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCXZvaWQgKCp0Zl9vdXRiKSh1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOwogCXU4ICgqdGZfaW5iKSh1bnNpZ25lZCBsb25nIHBvcnQpOwogCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOwpAQCAtMTQ2LDcgKzE1Myw3IEBACiAJCXRmX2luYiAgPSBpZGVfaW5iOwogCX0KIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9EQVRBKSB7CisJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19JTl9EQVRBKSB7CiAJCXUxNiBkYXRhOwogCiAJCWlmIChtbWlvKQpAQCAtMTYxLDMxICsxNjgsMzEgQEAKIAkvKiBiZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGxvdyBvcmRlciBiaXRzICovCiAJdGZfb3V0YihBVEFfREVWQ1RMX09CUyAmIH4weDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKIAkJdGYtPmZlYXR1cmUgPSB0Zl9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQogCQl0Zi0+bnNlY3QgID0gdGZfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQogCQl0Zi0+bGJhbCAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCiAJCXRmLT5sYmFtICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKIAkJdGYtPmxiYWggICA9IHRmX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKIAkJdGYtPmRldmljZSA9IHRmX2luYihpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKIAkJdGZfb3V0YihBVEFfREVWQ1RMX09CUyB8IDB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKIAkJCXRmLT5ob2JfZmVhdHVyZSA9IHRmX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQogCQkJdGYtPmhvYl9uc2VjdCAgID0gdGZfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKIAkJCXRmLT5ob2JfbGJhbCAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKIAkJCXRmLT5ob2JfbGJhbSAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKIAkJCXRmLT5ob2JfbGJhaCAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAl9CiB9CkBAIC0yMTIsNyArMjE5LDcgQEAKICAqIHNvIGlmIGFuIG9kZCBsZW4gaXMgc3BlY2lmaWVkLCBiZSBzdXJlIHRoYXQgdGhlcmUncyBhdCBsZWFzdCBvbmUKICAqIGV4dHJhIGJ5dGUgYWxsb2NhdGVkIGZvciB0aGUgYnVmZmVyLgogICovCi12b2lkIGlkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB2b2lkICpidWYsCit2b2lkIGlkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwgdm9pZCAqYnVmLAogCQkgICAgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CkBAIC0yNTgsNyArMjY1LDcgQEAKIC8qCiAgKiBUaGlzIGlzIHVzZWQgZm9yIG1vc3QgUElPIGRhdGEgdHJhbnNmZXJzICp0byogdGhlIElERSBpbnRlcmZhY2UKICAqLwotdm9pZCBpZGVfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKmJ1ZiwKK3ZvaWQgaWRlX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwgdm9pZCAqYnVmLAogCQkgICAgIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW8uYwppbmRleCAyZTkyNDk3Li4xYWRjNWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW8uYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW8uYwpAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+Ci0jaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KQEAgLTU1LDI1ICs1NCw5IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotc3RhdGljIGludCBfX2lkZV9lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKLQkJCSAgICAgaW50IHVwdG9kYXRlLCB1bnNpZ25lZCBpbnQgbnJfYnl0ZXMsIGludCBkZXF1ZXVlKQoraW50IGlkZV9lbmRfcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBlcnJvciwKKwkgICAgICAgdW5zaWduZWQgaW50IG5yX2J5dGVzKQogewotCWludCByZXQgPSAxOwotCWludCBlcnJvciA9IDA7Ci0KLQlpZiAodXB0b2RhdGUgPD0gMCkKLQkJZXJyb3IgPSB1cHRvZGF0ZSA/IHVwdG9kYXRlIDogLUVJTzsKLQotCS8qCi0JICogaWYgZmFpbGZhc3QgaXMgc2V0IG9uIGEgcmVxdWVzdCwgb3ZlcnJpZGUgbnVtYmVyIG9mIHNlY3RvcnMgYW5kCi0JICogY29tcGxldGUgdGhlIHdob2xlIHJlcXVlc3QgcmlnaHQgbm93Ci0JICovCi0JaWYgKGJsa19ub3JldHJ5X3JlcXVlc3QocnEpICYmIGVycm9yKQotCQlucl9ieXRlcyA9IHJxLT5oYXJkX25yX3NlY3RvcnMgPDwgOTsKLQotCWlmICghYmxrX2ZzX3JlcXVlc3QocnEpICYmIGVycm9yICYmICFycS0+ZXJyb3JzKQotCQlycS0+ZXJyb3JzID0gLUVJTzsKLQogCS8qCiAJICogZGVjaWRlIHdoZXRoZXIgdG8gcmVlbmFibGUgRE1BIC0tIDMgaXMgYSByYW5kb20gbWFnaWMgZm9yIG5vdywKIAkgKiBpZiB3ZSBETUEgdGltZW91dCBtb3JlIHRoYW4gMyB0aW1lcywganVzdCBzdGF5IGluIFBJTwpAQCAtODQsMTI3ICs2Nyw4NiBAQAogCQlpZGVfZG1hX29uKGRyaXZlKTsKIAl9CiAKLQlpZiAoIWJsa19lbmRfcmVxdWVzdChycSwgZXJyb3IsIG5yX2J5dGVzKSkKLQkJcmV0ID0gMDsKLQotCWlmIChyZXQgPT0gMCAmJiBkZXF1ZXVlKQotCQlkcml2ZS0+aHdpZi0+cnEgPSBOVUxMOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gYmxrX2VuZF9yZXF1ZXN0KHJxLCBlcnJvciwgbnJfYnl0ZXMpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2VuZF9ycSk7CiAKLS8qKgotICoJaWRlX2VuZF9yZXF1ZXN0CQktCWNvbXBsZXRlIGFuIElERSBJL08KLSAqCUBkcml2ZTogSURFIGRldmljZSBmb3IgdGhlIEkvTwotICoJQHVwdG9kYXRlOgotICoJQG5yX3NlY3RvcnM6IG51bWJlciBvZiBzZWN0b3JzIGNvbXBsZXRlZAotICoKLSAqCVRoaXMgaXMgb3VyIGVuZF9yZXF1ZXN0IHdyYXBwZXIgZnVuY3Rpb24uIFdlIGNvbXBsZXRlIHRoZSBJL08KLSAqCXVwZGF0ZSByYW5kb20gbnVtYmVyIGlucHV0IGFuZCBkZXF1ZXVlIHRoZSByZXF1ZXN0LCB3aGljaCBpZgotICoJaXQgd2FzIHRhZ2dlZCBtYXkgYmUgb3V0IG9mIG9yZGVyLgotICovCi0KLWludCBpZGVfZW5kX3JlcXVlc3QgKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHVwdG9kYXRlLCBpbnQgbnJfc2VjdG9ycykKK3ZvaWQgaWRlX2NvbXBsZXRlX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsIHU4IHN0YXQsIHU4IGVycikKIHsKLQl1bnNpZ25lZCBpbnQgbnJfYnl0ZXMgPSBucl9zZWN0b3JzIDw8IDk7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC0+dGY7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gY21kLT5ycTsKKwl1OCB0Zl9jbWQgPSB0Zi0+Y29tbWFuZDsKIAotCWlmICghbnJfYnl0ZXMpIHsKLQkJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkKLQkJCW5yX2J5dGVzID0gcnEtPmRhdGFfbGVuOwotCQllbHNlCi0JCQlucl9ieXRlcyA9IHJxLT5oYXJkX2N1cl9zZWN0b3JzIDw8IDk7CisJdGYtPmVycm9yID0gZXJyOworCXRmLT5zdGF0dXMgPSBzdGF0OworCisJZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgY21kKTsKKworCWlmICgoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19DVVNUT01fSEFORExFUikgJiYKKwkgICAgdGZfY21kID09IEFUQV9DTURfSURMRUlNTUVESUFURSkgeworCQlpZiAodGYtPmxiYWwgIT0gMHhjNCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaGVhZCB1bmxvYWQgZmFpbGVkIVxuIiwKKwkJCSAgICAgICBkcml2ZS0+bmFtZSk7CisJCQlpZGVfdGZfZHVtcChkcml2ZS0+bmFtZSwgdGYpOworCQl9IGVsc2UKKwkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1BBUktFRDsKIAl9CiAKLQlyZXR1cm4gX19pZGVfZW5kX3JlcXVlc3QoZHJpdmUsIHJxLCB1cHRvZGF0ZSwgbnJfYnl0ZXMsIDEpOworCWlmIChycSAmJiBycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQVRBX1RBU0tGSUxFKQorCQltZW1jcHkocnEtPnNwZWNpYWwsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0RZTikKKwkJa2ZyZWUoY21kKTsKIH0KLUVYUE9SVF9TWU1CT0woaWRlX2VuZF9yZXF1ZXN0KTsKIAotLyoqCi0gKglpZGVfZW5kX2RlcXVldWVkX3JlcXVlc3QJLQljb21wbGV0ZSBhbiBJREUgSS9PCi0gKglAZHJpdmU6IElERSBkZXZpY2UgZm9yIHRoZSBJL08KLSAqCUB1cHRvZGF0ZToKLSAqCUBucl9zZWN0b3JzOiBudW1iZXIgb2Ygc2VjdG9ycyBjb21wbGV0ZWQKLSAqCi0gKglDb21wbGV0ZSBhbiBJL08gdGhhdCBpcyBubyBsb25nZXIgb24gdGhlIHJlcXVlc3QgcXVldWUuIFRoaXMKLSAqCXR5cGljYWxseSBvY2N1cnMgd2hlbiB3ZSBwdWxsIHRoZSByZXF1ZXN0IGFuZCBpc3N1ZSBhIFJFUVVFU1RfU0VOU0UuCi0gKglXZSBtdXN0IHN0aWxsIGZpbmlzaCB0aGUgb2xkIHJlcXVlc3QgYnV0IHdlIG11c3Qgbm90IHRhbXBlciB3aXRoIHRoZQotICoJcXVldWUgaW4gdGhlIG1lYW50aW1lLgotICoKLSAqCU5PVEU6IFRoaXMgcGF0aCBkb2VzIG5vdCBoYW5kbGUgYmFycmllciwgYnV0IGJhcnJpZXIgaXMgbm90IHN1cHBvcnRlZAotICoJb24gaWRlLWNkIGFueXdheS4KLSAqLwotCi1pbnQgaWRlX2VuZF9kZXF1ZXVlZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAotCQkJICAgICBpbnQgdXB0b2RhdGUsIGludCBucl9zZWN0b3JzKQorLyogb2Jzb2xldGUsIGJsa19ycV9ieXRlcygpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgKi8KK3Vuc2lnbmVkIGludCBpZGVfcnFfYnl0ZXMoc3RydWN0IHJlcXVlc3QgKnJxKQogewotCUJVR19PTighYmxrX3JxX3N0YXJ0ZWQocnEpKTsKLQotCXJldHVybiBfX2lkZV9lbmRfcmVxdWVzdChkcml2ZSwgcnEsIHVwdG9kYXRlLCBucl9zZWN0b3JzIDw8IDksIDApOworCWlmIChibGtfcGNfcmVxdWVzdChycSkpCisJCXJldHVybiBycS0+ZGF0YV9sZW47CisJZWxzZQorCQlyZXR1cm4gcnEtPmhhcmRfY3VyX3NlY3RvcnMgPDwgOTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9lbmRfZGVxdWV1ZWRfcmVxdWVzdCk7CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfcnFfYnl0ZXMpOwogCi0vKioKLSAqCWlkZV9lbmRfZHJpdmVfY21kCS0JZW5kIGFuIGV4cGxpY2l0IGRyaXZlIGNvbW1hbmQKLSAqCUBkcml2ZTogY29tbWFuZCAKLSAqCUBzdGF0OiBzdGF0dXMgYml0cwotICoJQGVycjogZXJyb3IgYml0cwotICoKLSAqCUNsZWFuIHVwIGFmdGVyIHN1Y2Nlc3MvZmFpbHVyZSBvZiBhbiBleHBsaWNpdCBkcml2ZSBjb21tYW5kLgotICoJVGhlc2UgZ2V0IHRocm93biBvbnRvIHRoZSBxdWV1ZSBzbyB0aGV5IGFyZSBzeW5jaHJvbml6ZWQgd2l0aAotICoJcmVhbCBJL08gb3BlcmF0aW9ucyBvbiB0aGUgZHJpdmUuCi0gKgotICoJSW4gTEJBNDggbW9kZSB3ZSBoYXZlIHRvIHJlYWQgdGhlIHJlZ2lzdGVyIHNldCB0d2ljZSB0byBnZXQKLSAqCWFsbCB0aGUgZXh0cmEgaW5mb3JtYXRpb24gb3V0LgotICovCi0gCi12b2lkIGlkZV9lbmRfZHJpdmVfY21kIChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHN0YXQsIHU4IGVycikKK2ludCBpZGVfY29tcGxldGVfcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZXJyb3IsIHVuc2lnbmVkIGludCBucl9ieXRlcykKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7CisJaW50IHJjOwogCi0JaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfVEFTS0ZJTEUpIHsKLQkJaWRlX3Rhc2tfdCAqdGFzayA9IChpZGVfdGFza190ICopcnEtPnNwZWNpYWw7CisJLyoKKwkgKiBpZiBmYWlsZmFzdCBpcyBzZXQgb24gYSByZXF1ZXN0LCBvdmVycmlkZSBudW1iZXIgb2Ygc2VjdG9ycworCSAqIGFuZCBjb21wbGV0ZSB0aGUgd2hvbGUgcmVxdWVzdCByaWdodCBub3cKKwkgKi8KKwlpZiAoYmxrX25vcmV0cnlfcmVxdWVzdChycSkgJiYgZXJyb3IgPD0gMCkKKwkJbnJfYnl0ZXMgPSBycS0+aGFyZF9ucl9zZWN0b3JzIDw8IDk7CiAKLQkJaWYgKHRhc2spIHsKLQkJCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCXJjID0gaWRlX2VuZF9ycShkcml2ZSwgcnEsIGVycm9yLCBucl9ieXRlcyk7CisJaWYgKHJjID09IDApCisJCWh3aWYtPnJxID0gTlVMTDsKIAotCQkJdGYtPmVycm9yID0gZXJyOwotCQkJdGYtPnN0YXR1cyA9IHN0YXQ7Ci0KLQkJCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsIHRhc2spOwotCi0JCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRFlOKQotCQkJCWtmcmVlKHRhc2spOwotCQl9Ci0JfSBlbHNlIGlmIChibGtfcG1fcmVxdWVzdChycSkpIHsKLQkJc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUgKnBtID0gcnEtPmRhdGE7Ci0KLQkJaWRlX2NvbXBsZXRlX3Bvd2VyX3N0ZXAoZHJpdmUsIHJxKTsKLQkJaWYgKHBtLT5wbV9zdGVwID09IElERV9QTV9DT01QTEVURUQpCi0JCQlpZGVfY29tcGxldGVfcG1fcmVxdWVzdChkcml2ZSwgcnEpOwotCQlyZXR1cm47Ci0JfQotCi0JaHdpZi0+cnEgPSBOVUxMOwotCi0JcnEtPmVycm9ycyA9IGVycjsKLQotCWlmICh1bmxpa2VseShibGtfZW5kX3JlcXVlc3QocnEsIChycS0+ZXJyb3JzID8gLUVJTyA6IDApLAotCQkJCSAgICAgYmxrX3JxX2J5dGVzKHJxKSkpKQotCQlCVUcoKTsKKwlyZXR1cm4gcmM7CiB9Ci1FWFBPUlRfU1lNQk9MKGlkZV9lbmRfZHJpdmVfY21kKTsKK0VYUE9SVF9TWU1CT0woaWRlX2NvbXBsZXRlX3JxKTsKIAogdm9pZCBpZGVfa2lsbF9ycShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlpZiAocnEtPnJxX2Rpc2spIHsKLQkJc3RydWN0IGlkZV9kcml2ZXIgKmRydjsKKwl1OCBkcnZfcmVxID0gYmxrX3NwZWNpYWxfcmVxdWVzdChycSkgJiYgcnEtPnJxX2Rpc2s7CisJdTggbWVkaWEgPSBkcml2ZS0+bWVkaWE7CiAKLQkJZHJ2ID0gKihzdHJ1Y3QgaWRlX2RyaXZlciAqKilycS0+cnFfZGlzay0+cHJpdmF0ZV9kYXRhOwotCQlkcnYtPmVuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKLQl9IGVsc2UKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKKwlkcml2ZS0+ZmFpbGVkX3BjID0gTlVMTDsKKworCWlmICgobWVkaWEgPT0gaWRlX2Zsb3BweSB8fCBtZWRpYSA9PSBpZGVfdGFwZSkgJiYgZHJ2X3JlcSkgeworCQlycS0+ZXJyb3JzID0gMDsKKwkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCAwLCBibGtfcnFfYnl0ZXMocnEpKTsKKwl9IGVsc2UgeworCQlpZiAobWVkaWEgPT0gaWRlX3RhcGUpCisJCQlycS0+ZXJyb3JzID0gSURFX0RSVl9FUlJPUl9HRU5FUkFMOworCQllbHNlIGlmIChibGtfZnNfcmVxdWVzdChycSkgPT0gMCAmJiBycS0+ZXJyb3JzID09IDApCisJCQlycS0+ZXJyb3JzID0gLUVJTzsKKwkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCAtRUlPLCBpZGVfcnFfYnl0ZXMocnEpKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGlkZV90Zl9zZXRfc3BlY2lmeV9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZikKQEAgLTIzMiwyMCArMTc0LDIwIEBACiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9kaXNrX3NwZWNpYWwoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXNwZWNpYWxfdCAqcyA9ICZkcml2ZS0+c3BlY2lhbDsKLQlpZGVfdGFza190IGFyZ3M7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCi0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOwotCWFyZ3MuZGF0YV9waGFzZSA9IFRBU0tGSUxFX05PX0RBVEE7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQucHJvdG9jb2wgPSBBVEFfUFJPVF9OT0RBVEE7CiAKIAlpZiAocy0+Yi5zZXRfZ2VvbWV0cnkpIHsKIAkJcy0+Yi5zZXRfZ2VvbWV0cnkgPSAwOwotCQlpZGVfdGZfc2V0X3NwZWNpZnlfY21kKGRyaXZlLCAmYXJncy50Zik7CisJCWlkZV90Zl9zZXRfc3BlY2lmeV9jbWQoZHJpdmUsICZjbWQudGYpOwogCX0gZWxzZSBpZiAocy0+Yi5yZWNhbGlicmF0ZSkgewogCQlzLT5iLnJlY2FsaWJyYXRlID0gMDsKLQkJaWRlX3RmX3NldF9yZXN0b3JlX2NtZChkcml2ZSwgJmFyZ3MudGYpOworCQlpZGVfdGZfc2V0X3Jlc3RvcmVfY21kKGRyaXZlLCAmY21kLnRmKTsKIAl9IGVsc2UgaWYgKHMtPmIuc2V0X211bHRtb2RlKSB7CiAJCXMtPmIuc2V0X211bHRtb2RlID0gMDsKLQkJaWRlX3RmX3NldF9zZXRtdWx0X2NtZChkcml2ZSwgJmFyZ3MudGYpOworCQlpZGVfdGZfc2V0X3NldG11bHRfY21kKGRyaXZlLCAmY21kLnRmKTsKIAl9IGVsc2UgaWYgKHMtPmFsbCkgewogCQlpbnQgc3BlY2lhbCA9IHMtPmFsbDsKIAkJcy0+YWxsID0gMDsKQEAgLTI1MywxMCArMTk1LDEwIEBACiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKLQlhcmdzLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRSB8Ci0JCQlJREVfVEZMQUdfQ1VTVE9NX0hBTkRMRVI7CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRSB8CisJCSAgICAgICBJREVfVEZMQUdfQ1VTVE9NX0hBTkRMRVI7CiAKLQlkb19yd190YXNrZmlsZShkcml2ZSwgJmFyZ3MpOworCWRvX3J3X3Rhc2tmaWxlKGRyaXZlLCAmY21kKTsKIAogCXJldHVybiBpZGVfc3RhcnRlZDsKIH0KQEAgLTI4NiwzMyArMjI4LDI5IEBACiAJcmV0dXJuIGlkZV9zdG9wcGVkOwogfQogCi12b2lkIGlkZV9tYXBfc2coaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit2b2lkIGlkZV9tYXBfc2coaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gaHdpZi0+c2dfdGFibGU7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gY21kLT5ycTsKIAogCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQVRBX1RBU0tGSUxFKSB7CiAJCXNnX2luaXRfb25lKHNnLCBycS0+YnVmZmVyLCBycS0+bnJfc2VjdG9ycyAqIFNFQ1RPUl9TSVpFKTsKLQkJaHdpZi0+c2dfbmVudHMgPSAxOworCQljbWQtPnNnX25lbnRzID0gMTsKIAl9IGVsc2UgaWYgKCFycS0+YmlvKSB7CiAJCXNnX2luaXRfb25lKHNnLCBycS0+ZGF0YSwgcnEtPmRhdGFfbGVuKTsKLQkJaHdpZi0+c2dfbmVudHMgPSAxOwotCX0gZWxzZSB7Ci0JCWh3aWYtPnNnX25lbnRzID0gYmxrX3JxX21hcF9zZyhkcml2ZS0+cXVldWUsIHJxLCBzZyk7Ci0JfQorCQljbWQtPnNnX25lbnRzID0gMTsKKwl9IGVsc2UKKwkJY21kLT5zZ19uZW50cyA9IGJsa19ycV9tYXBfc2coZHJpdmUtPnF1ZXVlLCBycSwgc2cpOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfbWFwX3NnKTsKIAotdm9pZCBpZGVfaW5pdF9zZ19jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit2b2lkIGlkZV9pbml0X3NnX2NtZChzdHJ1Y3QgaWRlX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgbnJfYnl0ZXMpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCi0JaHdpZi0+bnNlY3QgPSBod2lmLT5ubGVmdCA9IHJxLT5ucl9zZWN0b3JzOwotCWh3aWYtPmN1cnNnX29mcyA9IDA7Ci0JaHdpZi0+Y3Vyc2cgPSBOVUxMOworCWNtZC0+bmJ5dGVzID0gY21kLT5ubGVmdCA9IG5yX2J5dGVzOworCWNtZC0+Y3Vyc2dfb2ZzID0gMDsKKwljbWQtPmN1cnNnID0gTlVMTDsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2luaXRfc2dfY21kKTsKIAogLyoqCkBAIC0zMzAsMjQgKzI2OCwxNSBAQAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBleGVjdXRlX2RyaXZlX2NtZCAoaWRlX2RyaXZlX3QgKmRyaXZlLAogCQlzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWlkZV90YXNrX3QgKnRhc2sgPSBycS0+c3BlY2lhbDsKKwlzdHJ1Y3QgaWRlX2NtZCAqY21kID0gcnEtPnNwZWNpYWw7CiAKLQlpZiAodGFzaykgewotCQlod2lmLT5kYXRhX3BoYXNlID0gdGFzay0+ZGF0YV9waGFzZTsKLQotCQlzd2l0Y2ggKGh3aWYtPmRhdGFfcGhhc2UpIHsKLQkJY2FzZSBUQVNLRklMRV9NVUxUSV9PVVQ6Ci0JCWNhc2UgVEFTS0ZJTEVfT1VUOgotCQljYXNlIFRBU0tGSUxFX01VTFRJX0lOOgotCQljYXNlIFRBU0tGSUxFX0lOOgotCQkJaWRlX2luaXRfc2dfY21kKGRyaXZlLCBycSk7Ci0JCQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKKwlpZiAoY21kKSB7CisJCWlmIChjbWQtPnByb3RvY29sID09IEFUQV9QUk9UX1BJTykgeworCQkJaWRlX2luaXRfc2dfY21kKGNtZCwgcnEtPm5yX3NlY3RvcnMgPDwgOSk7CisJCQlpZGVfbWFwX3NnKGRyaXZlLCBjbWQpOwogCQl9CiAKLQkJcmV0dXJuIGRvX3J3X3Rhc2tmaWxlKGRyaXZlLCB0YXNrKTsKKwkJcmV0dXJuIGRvX3J3X3Rhc2tmaWxlKGRyaXZlLCBjbWQpOwogCX0KIAogIAkvKgpAQCAtMzU3LDggKzI4Niw4IEBACiAjaWZkZWYgREVCVUcKICAJcHJpbnRrKCIlczogRFJJVkVfQ01EIChudWxsKVxuIiwgZHJpdmUtPm5hbWUpOwogI2VuZGlmCi0JaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZiksCi0JCQkgIGlkZV9yZWFkX2Vycm9yKGRyaXZlKSk7CisJcnEtPmVycm9ycyA9IDA7CisJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCAwLCBibGtfcnFfYnl0ZXMocnEpKTsKIAogIAlyZXR1cm4gaWRlX3N0b3BwZWQ7CiB9CkBAIC0zNzYsOSArMzA1LDcgQEAKIAljYXNlIFJFUV9EUklWRV9SRVNFVDoKIAkJcmV0dXJuIGlkZV9kb19yZXNldChkcml2ZSk7CiAJZGVmYXVsdDoKLQkJYmxrX2R1bXBfcnFfZmxhZ3MocnEsICJpZGVfc3BlY2lhbF9ycSAtIGJhZCByZXF1ZXN0Iik7Ci0JCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKKwkJQlVHKCk7CiAJfQogfQogCkBAIC00MzgsNyArMzY1LDcgQEAKIAkJCXN0YXJ0c3RvcCA9IGlkZV9zdGFydF9wb3dlcl9zdGVwKGRyaXZlLCBycSk7CiAJCQlpZiAoc3RhcnRzdG9wID09IGlkZV9zdG9wcGVkICYmCiAJCQkgICAgcG0tPnBtX3N0ZXAgPT0gSURFX1BNX0NPTVBMRVRFRCkKLQkJCQlpZGVfY29tcGxldGVfcG1fcmVxdWVzdChkcml2ZSwgcnEpOworCQkJCWlkZV9jb21wbGV0ZV9wbV9ycShkcml2ZSwgcnEpOwogCQkJcmV0dXJuIHN0YXJ0c3RvcDsKIAkJfSBlbHNlIGlmICghcnEtPnJxX2Rpc2sgJiYgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpCiAJCQkvKgpAQCAtNTAxLDggKzQyOCw4IEBACiAJaWYgKGhvc3QtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0VSSUFMSVpFKSB7CiAJCXJjID0gdGVzdF9hbmRfc2V0X2JpdF9sb2NrKElERV9IT1NUX0JVU1ksICZob3N0LT5ob3N0X2J1c3kpOwogCQlpZiAocmMgPT0gMCkgewotCQkJLyogZm9yIGF0YXJpIG9ubHkgKi8KLQkJCWlkZV9nZXRfbG9jayhpZGVfaW50ciwgaHdpZik7CisJCQlpZiAoaG9zdC0+Z2V0X2xvY2spCisJCQkJaG9zdC0+Z2V0X2xvY2soaWRlX2ludHIsIGh3aWYpOwogCQl9CiAJfQogCXJldHVybiByYzsKQEAgLTUxMSw4ICs0MzgsOCBAQAogc3RhdGljIGlubGluZSB2b2lkIGlkZV91bmxvY2tfaG9zdChzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QpCiB7CiAJaWYgKGhvc3QtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0VSSUFMSVpFKSB7Ci0JCS8qIGZvciBhdGFyaSBvbmx5ICovCi0JCWlkZV9yZWxlYXNlX2xvY2soKTsKKwkJaWYgKGhvc3QtPnJlbGVhc2VfbG9jaykKKwkJCWhvc3QtPnJlbGVhc2VfbG9jaygpOwogCQljbGVhcl9iaXRfdW5sb2NrKElERV9IT1NUX0JVU1ksICZob3N0LT5ob3N0X2J1c3kpOwogCX0KIH0KQEAgLTcyNCw2ICs2NTEsNyBAQAogCQkJfQogCQl9CiAJCWh3aWYtPmhhbmRsZXIgPSBOVUxMOworCQlod2lmLT5leHBpcnkgPSBOVUxMOwogCQkvKgogCQkgKiBXZSBuZWVkIHRvIHNpbXVsYXRlIGEgcmVhbCBpbnRlcnJ1cHQgd2hlbiBpbnZva2luZwogCQkgKiB0aGUgaGFuZGxlcigpIGZ1bmN0aW9uLCB3aGljaCBtZWFucyB3ZSBuZWVkIHRvCkBAIC03MzksNyArNjY3LDggQEAKIAkJfSBlbHNlIGlmIChkcml2ZV9pc19yZWFkeShkcml2ZSkpIHsKIAkJCWlmIChkcml2ZS0+d2FpdGluZ19mb3JfZG1hKQogCQkJCWh3aWYtPmRtYV9vcHMtPmRtYV9sb3N0X2lycShkcml2ZSk7Ci0JCQkodm9pZClpZGVfYWNrX2ludHIoaHdpZik7CisJCQlpZiAoaHdpZi0+YWNrX2ludHIpCisJCQkJaHdpZi0+YWNrX2ludHIoaHdpZik7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbG9zdCBpbnRlcnJ1cHRcbiIsCiAJCQkJZHJpdmUtPm5hbWUpOwogCQkJc3RhcnRzdG9wID0gaGFuZGxlcihkcml2ZSk7CkBAIC04NDAsNiArNzY5LDcgQEAKIGlycXJldHVybl90IGlkZV9pbnRyIChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IChpZGVfaHdpZl90ICopZGV2X2lkOworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IGh3aWYtPmhvc3Q7CiAJaWRlX2RyaXZlX3QgKnVuaW5pdGlhbGl6ZWRfdmFyKGRyaXZlKTsKIAlpZGVfaGFuZGxlcl90ICpoYW5kbGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC04NDcsMTQgKzc3NywxNCBAQAogCWlycXJldHVybl90IGlycV9yZXQgPSBJUlFfTk9ORTsKIAlpbnQgcGx1Z19kZXZpY2UgPSAwOwogCi0JaWYgKGh3aWYtPmhvc3QtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0VSSUFMSVpFKSB7Ci0JCWlmIChod2lmICE9IGh3aWYtPmhvc3QtPmN1cl9wb3J0KQorCWlmIChob3N0LT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1NFUklBTElaRSkgeworCQlpZiAoaHdpZiAhPSBob3N0LT5jdXJfcG9ydCkKIAkJCWdvdG8gb3V0X2Vhcmx5OwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoIWlkZV9hY2tfaW50cihod2lmKSkKKwlpZiAoaHdpZi0+YWNrX2ludHIgJiYgaHdpZi0+YWNrX2ludHIoaHdpZikgPT0gMCkKIAkJZ290byBvdXQ7CiAKIAloYW5kbGVyID0gaHdpZi0+aGFuZGxlcjsKQEAgLTg3MSwyNyArODAxLDE5IEBACiAJCSAqCiAJCSAqIEZvciBQQ0ksIHdlIGNhbm5vdCB0ZWxsIHRoZSBkaWZmZXJlbmNlLAogCQkgKiBzbyBpbiB0aGF0IGNhc2Ugd2UganVzdCBpZ25vcmUgaXQgYW5kIGhvcGUgaXQgZ29lcyBhd2F5LgotCQkgKgotCQkgKiBGSVhNRTogdW5leHBlY3RlZF9pbnRyIHNob3VsZCBiZSBod2lmLT4gdGhlbiB3ZSBjYW4KLQkJICogcmVtb3ZlIGFsbCB0aGUgaWZkZWYgUENJIGNyYXAKIAkJICovCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFUENJCi0JCWlmIChod2lmLT5jaGlwc2V0ICE9IGlkZV9wY2kpCi0jZW5kaWYJLyogQ09ORklHX0JMS19ERVZfSURFUENJICovCi0JCXsKKwkJaWYgKChob3N0LT5pcnFfZmxhZ3MgJiBJUlFGX1NIQVJFRCkgPT0gMCkgewogCQkJLyoKIAkJCSAqIFByb2JhYmx5IG5vdCBhIHNoYXJlZCBQQ0kgaW50ZXJydXB0LAogCQkJICogc28gd2UgY2FuIHNhZmVseSB0cnkgdG8gZG8gc29tZXRoaW5nIGFib3V0IGl0OgogCQkJICovCiAJCQl1bmV4cGVjdGVkX2ludHIoaXJxLCBod2lmKTsKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVQQ0kKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBXaGFjayB0aGUgc3RhdHVzIHJlZ2lzdGVyLCBqdXN0IGluIGNhc2UKIAkJCSAqIHdlIGhhdmUgYSBsZWZ0b3ZlciBwZW5kaW5nIElSUS4KIAkJCSAqLwogCQkJKHZvaWQpaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKLSNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVQQ0kgKi8KIAkJfQogCQlnb3RvIG91dDsKIAl9CkBAIC05MDksNiArODMxLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlod2lmLT5oYW5kbGVyID0gTlVMTDsKKwlod2lmLT5leHBpcnkgPSBOVUxMOwogCWh3aWYtPnJlcV9nZW4rKzsKIAlkZWxfdGltZXIoJmh3aWYtPnRpbWVyKTsKIAlzcGluX3VubG9jaygmaHdpZi0+bG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW9jdGxzLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW9jdGxzLmMKaW5kZXggMWJlMjYzZS4uNzcwMTQyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvY3Rscy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pb2N0bHMuYwpAQCAtMTExLDEzICsxMTEsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpZGVfY21kX2lvY3RsKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgaWRlX2NtZF9pb2N0bChpZGVfZHJpdmVfdCAqZHJpdmUsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXU4ICpidWYgPSBOVUxMOwogCWludCBidWZzaXplID0gMCwgZXJyID0gMDsKIAl1OCBhcmdzWzRdLCB4ZmVyX3JhdGUgPSAwOwotCWlkZV90YXNrX3QgdGZhcmdzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRmYXJncy50ZjsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLnRmOwogCXUxNiAqaWQgPSBkcml2ZS0+aWQ7CiAKIAlpZiAoTlVMTCA9PSAodm9pZCAqKSBhcmcpIHsKQEAgLTEzNCwyNCArMTM0LDI0IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKGFyZ3MsICh2b2lkIF9fdXNlciAqKWFyZywgNCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JbWVtc2V0KCZ0ZmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAl0Zi0+ZmVhdHVyZSA9IGFyZ3NbMl07CiAJaWYgKGFyZ3NbMF0gPT0gQVRBX0NNRF9TTUFSVCkgewogCQl0Zi0+bnNlY3QgPSBhcmdzWzNdOwogCQl0Zi0+bGJhbCAgPSBhcmdzWzFdOwogCQl0Zi0+bGJhbSAgPSAweDRmOwogCQl0Zi0+bGJhaCAgPSAweGMyOwotCQl0ZmFyZ3MudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX1RGIHwgSURFX1RGTEFHX0lOX05TRUNUOworCQljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX1RGIHwgSURFX1RGTEFHX0lOX05TRUNUOwogCX0gZWxzZSB7CiAJCXRmLT5uc2VjdCA9IGFyZ3NbMV07Ci0JCXRmYXJncy50Zl9mbGFncyA9IElERV9URkxBR19PVVRfRkVBVFVSRSB8Ci0JCQkJICBJREVfVEZMQUdfT1VUX05TRUNUIHwgSURFX1RGTEFHX0lOX05TRUNUOworCQljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCBJREVfVEZMQUdfT1VUX05TRUNUIHwKKwkJCSAgICAgICBJREVfVEZMQUdfSU5fTlNFQ1Q7CiAJfQogCXRmLT5jb21tYW5kID0gYXJnc1swXTsKLQl0ZmFyZ3MuZGF0YV9waGFzZSA9IGFyZ3NbM10gPyBUQVNLRklMRV9JTiA6IFRBU0tGSUxFX05PX0RBVEE7CisJY21kLnByb3RvY29sID0gYXJnc1szXSA/IEFUQV9QUk9UX1BJTyA6IEFUQV9QUk9UX05PREFUQTsKIAogCWlmIChhcmdzWzNdKSB7Ci0JCXRmYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfSU9fMTZCSVQ7CisJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfSU9fMTZCSVQ7CiAJCWJ1ZnNpemUgPSBTRUNUT1JfU0laRSAqIGFyZ3NbM107CiAJCWJ1ZiA9IGt6YWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChidWYgPT0gTlVMTCkKQEAgLTE3Miw3ICsxNzIsNyBAQAogCQl9CiAJfQogCi0JZXJyID0gaWRlX3Jhd190YXNrZmlsZShkcml2ZSwgJnRmYXJncywgYnVmLCBhcmdzWzNdKTsKKwllcnIgPSBpZGVfcmF3X3Rhc2tmaWxlKGRyaXZlLCAmY21kLCBidWYsIGFyZ3NbM10pOwogCiAJYXJnc1swXSA9IHRmLT5zdGF0dXM7CiAJYXJnc1sxXSA9IHRmLT5lcnJvcjsKQEAgLTE5NCwyNSArMTk0LDI1IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBpZGVfdGFza19pb2N0bChpZGVfZHJpdmVfdCAqZHJpdmUsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGlkZV90YXNrX2lvY3RsKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJdm9pZCBfX3VzZXIgKnAgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IGVyciA9IDA7CiAJdTggYXJnc1s3XTsKLQlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKGFyZ3MsIHAsIDcpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQltZW1jcHkoJnRhc2sudGZfYXJyYXlbN10sICZhcmdzWzFdLCA2KTsKLQl0YXNrLnRmLmNvbW1hbmQgPSBhcmdzWzBdOwotCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJbWVtY3B5KCZjbWQudGZfYXJyYXlbN10sICZhcmdzWzFdLCA2KTsKKwljbWQudGYuY29tbWFuZCA9IGFyZ3NbMF07CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKIAotCWVyciA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisJZXJyID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZjbWQpOwogCi0JYXJnc1swXSA9IHRhc2sudGYuY29tbWFuZDsKLQltZW1jcHkoJmFyZ3NbMV0sICZ0YXNrLnRmX2FycmF5WzddLCA2KTsKKwlhcmdzWzBdID0gY21kLnRmLmNvbW1hbmQ7CisJbWVtY3B5KCZhcmdzWzFdLCAmY21kLnRmX2FycmF5WzddLCA2KTsKIAogCWlmIChjb3B5X3RvX3VzZXIocCwgYXJncywgNykpCiAJCWVyciA9IC1FRkFVTFQ7CkBAIC0yNjIsMTcgKzI2MiwxNyBAQAogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgfHwgIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCiAJCQlyZXR1cm4gLUVBQ0NFUzsKIAkJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKLQkJCXJldHVybiBpZGVfdGFza2ZpbGVfaW9jdGwoZHJpdmUsIGNtZCwgYXJnKTsKKwkJCXJldHVybiBpZGVfdGFza2ZpbGVfaW9jdGwoZHJpdmUsIGFyZyk7CiAJCXJldHVybiAtRU5PTVNHOwogI2VuZGlmCiAJY2FzZSBIRElPX0RSSVZFX0NNRDoKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQogCQkJcmV0dXJuIC1FQUNDRVM7Ci0JCXJldHVybiBpZGVfY21kX2lvY3RsKGRyaXZlLCBjbWQsIGFyZyk7CisJCXJldHVybiBpZGVfY21kX2lvY3RsKGRyaXZlLCBhcmcpOwogCWNhc2UgSERJT19EUklWRV9UQVNLOgogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCiAJCQlyZXR1cm4gLUVBQ0NFUzsKLQkJcmV0dXJuIGlkZV90YXNrX2lvY3RsKGRyaXZlLCBjbWQsIGFyZyk7CisJCXJldHVybiBpZGVfdGFza19pb2N0bChkcml2ZSwgYXJnKTsKIAljYXNlIEhESU9fRFJJVkVfUkVTRVQ6CiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRUFDQ0VTOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvcHMuYyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKaW5kZXggMzE3YzVkYS4uNTQwM2U0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvcHMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCkBAIC0zMSwxNSArMzEsMTUgQEAKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKLQlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCiAJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5zZWxlY3Rwcm9jKQogCQlwb3J0X29wcy0+c2VsZWN0cHJvYyhkcml2ZSk7CiAKLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19PVVRfREVWSUNFOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9ERVZJQ0U7CiAKLQlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9sb2FkKGRyaXZlLCAmdGFzayk7CisJZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfbG9hZChkcml2ZSwgJmNtZCk7CiB9CiAKIHZvaWQgU0VMRUNUX01BU0soaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgbWFzaykKQEAgLTUyLDE0ICs1MiwxNCBAQAogCiB1OCBpZGVfcmVhZF9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX3Rhc2tfdCB0YXNrOworCXN0cnVjdCBpZGVfY21kIGNtZDsKIAotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX0ZFQVRVUkU7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fRkVBVFVSRTsKIAotCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZ0YXNrKTsKKwlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmY21kKTsKIAotCXJldHVybiB0YXNrLnRmLmVycm9yOworCXJldHVybiBjbWQudGYuZXJyb3I7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9lcnJvcik7CiAKQEAgLTMyOSw3ICszMjksNyBAQAogCXUxNiAqaWQgPSBkcml2ZS0+aWQsIGk7CiAJaW50IGVycm9yID0gMDsKIAl1OCBzdGF0OwotCWlkZV90YXNrX3QgdGFzazsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUEKIAlpZiAoaHdpZi0+ZG1hX29wcykJLyogY2hlY2sgaWYgaG9zdCBzdXBwb3J0cyBETUEgKi8KQEAgLTM2MSwxMiArMzYxLDEyIEBACiAJdWRlbGF5KDEpOwogCXRwX29wcy0+c2V0X2lycShod2lmLCAwKTsKIAotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9GRUFUVVJFIHwgSURFX1RGTEFHX09VVF9OU0VDVDsKLQl0YXNrLnRmLmZlYXR1cmUgPSBTRVRGRUFUVVJFU19YRkVSOwotCXRhc2sudGYubnNlY3QgICA9IHNwZWVkOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9GRUFUVVJFIHwgSURFX1RGTEFHX09VVF9OU0VDVDsKKwljbWQudGYuZmVhdHVyZSA9IFNFVEZFQVRVUkVTX1hGRVI7CisJY21kLnRmLm5zZWN0ICAgPSBzcGVlZDsKIAotCXRwX29wcy0+dGZfbG9hZChkcml2ZSwgJnRhc2spOworCXRwX29wcy0+dGZfbG9hZChkcml2ZSwgJmNtZCk7CiAKIAl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX1NFVF9GRUFUVVJFUyk7CiAKQEAgLTQyNSwyNiArNDI1LDI1IEBACiAgKiBTZWUgYWxzbyBpZGVfZXhlY3V0ZV9jb21tYW5kCiAgKi8KIHZvaWQgX19pZGVfc2V0X2hhbmRsZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfaGFuZGxlcl90ICpoYW5kbGVyLAotCQkgICAgICAgdW5zaWduZWQgaW50IHRpbWVvdXQsIGlkZV9leHBpcnlfdCAqZXhwaXJ5KQorCQkgICAgICAgdW5zaWduZWQgaW50IHRpbWVvdXQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCiAJQlVHX09OKGh3aWYtPmhhbmRsZXIpOwogCWh3aWYtPmhhbmRsZXIJCT0gaGFuZGxlcjsKLQlod2lmLT5leHBpcnkJCT0gZXhwaXJ5OwogCWh3aWYtPnRpbWVyLmV4cGlyZXMJPSBqaWZmaWVzICsgdGltZW91dDsKIAlod2lmLT5yZXFfZ2VuX3RpbWVyCT0gaHdpZi0+cmVxX2dlbjsKIAlhZGRfdGltZXIoJmh3aWYtPnRpbWVyKTsKIH0KIAotdm9pZCBpZGVfc2V0X2hhbmRsZXIgKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwKLQkJICAgICAgdW5zaWduZWQgaW50IHRpbWVvdXQsIGlkZV9leHBpcnlfdCAqZXhwaXJ5KQordm9pZCBpZGVfc2V0X2hhbmRsZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfaGFuZGxlcl90ICpoYW5kbGVyLAorCQkgICAgIHVuc2lnbmVkIGludCB0aW1lb3V0KQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgaGFuZGxlciwgdGltZW91dCwgZXhwaXJ5KTsKKwlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgaGFuZGxlciwgdGltZW91dCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChpZGVfc2V0X2hhbmRsZXIpOwpAQCAtNDUyLDEwICs0NTEsOSBAQAogLyoqCiAgKglpZGVfZXhlY3V0ZV9jb21tYW5kCS0JZXhlY3V0ZSBhbiBJREUgY29tbWFuZAogICoJQGRyaXZlOiBJREUgZHJpdmUgdG8gaXNzdWUgdGhlIGNvbW1hbmQgYWdhaW5zdAotICoJQGNvbW1hbmQ6IGNvbW1hbmQgYnl0ZSB0byB3cml0ZQorICoJQGNtZDogY29tbWFuZAogICoJQGhhbmRsZXI6IGhhbmRsZXIgZm9yIG5leHQgcGhhc2UKICAqCUB0aW1lb3V0OiB0aW1lb3V0IGZvciBjb21tYW5kCi0gKglAZXhwaXJ5OiAgaGFuZGxlciB0byBydW4gb24gdGltZW91dAogICoKICAqCUhlbHBlciBmdW5jdGlvbiB0byBpc3N1ZSBhbiBJREUgY29tbWFuZC4gVGhpcyBoYW5kbGVzIHRoZQogICoJYXRvbWljaXR5IHJlcXVpcmVtZW50cywgY29tbWFuZCB0aW1pbmcgYW5kIGVuc3VyZXMgdGhhdCB0aGUKQEAgLTQ2MywxNSArNDYxLDE4IEBACiAgKglzaG91bGQgZ28gdmlhIHRoaXMgZnVuY3Rpb24gb3IgZG8gZXF1aXZhbGVudCBsb2NraW5nLgogICovCiAKLXZvaWQgaWRlX2V4ZWN1dGVfY29tbWFuZChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNtZCwgaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwKLQkJCSB1bnNpZ25lZCB0aW1lb3V0LCBpZGVfZXhwaXJ5X3QgKmV4cGlyeSkKK3ZvaWQgaWRlX2V4ZWN1dGVfY29tbWFuZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCisJCQkgaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwgdW5zaWduZWQgdGltZW91dCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGhhbmRsZXIsIHRpbWVvdXQsIGV4cGlyeSk7Ci0JaHdpZi0+dHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgY21kKTsKKwlpZiAoKGNtZC0+cHJvdG9jb2wgIT0gQVRBUElfUFJPVF9ETUEgJiYKKwkgICAgIGNtZC0+cHJvdG9jb2wgIT0gQVRBUElfUFJPVF9QSU8pIHx8CisJICAgIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfRFJRX0lOVEVSUlVQVCkpCisJCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCBoYW5kbGVyLCB0aW1lb3V0KTsKKwlod2lmLT50cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBjbWQtPnRmLmNvbW1hbmQpOwogCS8qCiAJICogRHJpdmUgdGFrZXMgNDAwblMgdG8gcmVzcG9uZCwgd2UgbXVzdCBhdm9pZCB0aGUgSVJRIGJlaW5nCiAJICogc2VydmljZWQgYmVmb3JlIHRoYXQuCkBAIC00ODEsMTkgKzQ4Miw2IEBACiAJbmRlbGF5KDQwMCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwogfQotRVhQT1JUX1NZTUJPTChpZGVfZXhlY3V0ZV9jb21tYW5kKTsKLQotdm9pZCBpZGVfZXhlY3V0ZV9wa3RfY21kKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JaHdpZi0+dHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0NNRF9QQUNLRVQpOwotCW5kZWxheSg0MDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9leGVjdXRlX3BrdF9jbWQpOwogCiAvKgogICogaWRlX3dhaXRfbm90X2J1c3koKSB3YWl0cyBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkZXZpY2Ugb24gdGhlIGh3aWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1saWIuYyBiL2RyaXZlcnMvaWRlL2lkZS1saWIuYwppbmRleCBmNmM2ODNkLi4yMTdiN2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtbGliLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWxpYi5jCkBAIC0zNCwxOSArMzQsMTkgQEAKIHN0YXRpYyB2b2lkIGlkZV9kdW1wX29wY29kZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOwotCWlkZV90YXNrX3QgKnRhc2sgPSBOVUxMOworCXN0cnVjdCBpZGVfY21kICpjbWQgPSBOVUxMOwogCiAJaWYgKCFycSkKIAkJcmV0dXJuOwogCiAJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfVEFTS0ZJTEUpCi0JCXRhc2sgPSBycS0+c3BlY2lhbDsKKwkJY21kID0gcnEtPnNwZWNpYWw7CiAKIAlwcmludGsoS0VSTl9FUlIgImlkZTogZmFpbGVkIG9wY29kZSB3YXM6ICIpOwotCWlmICh0YXNrID09IE5VTEwpCisJaWYgKGNtZCA9PSBOVUxMKQogCQlwcmludGsoS0VSTl9DT05UICJ1bmtub3duXG4iKTsKIAllbHNlCi0JCXByaW50ayhLRVJOX0NPTlQgIjB4JTAyeFxuIiwgdGFzay0+dGYuY29tbWFuZCk7CisJCXByaW50ayhLRVJOX0NPTlQgIjB4JTAyeFxuIiwgY21kLT50Zi5jb21tYW5kKTsKIH0KIAogdTY0IGlkZV9nZXRfbGJhX2FkZHIoc3RydWN0IGlkZV90YXNrZmlsZSAqdGYsIGludCBsYmE0OCkKQEAgLTY2LDE4ICs2NiwxOCBAQAogCiBzdGF0aWMgdm9pZCBpZGVfZHVtcF9zZWN0b3IoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV90YXNrX3QgdGFzazsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLnRmOworCXN0cnVjdCBpZGVfY21kIGNtZDsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQudGY7CiAJdTggbGJhNDggPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KTsKIAotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCWlmIChsYmE0OCkKLQkJdGFzay50Zl9mbGFncyA9IElERV9URkxBR19JTl9MQkEgfCBJREVfVEZMQUdfSU5fSE9CX0xCQSB8CisJCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19JTl9MQkEgfCBJREVfVEZMQUdfSU5fSE9CX0xCQSB8CiAJCQkJSURFX1RGTEFHX0xCQTQ4OwogCWVsc2UKLQkJdGFzay50Zl9mbGFncyA9IElERV9URkxBR19JTl9MQkEgfCBJREVfVEZMQUdfSU5fREVWSUNFOworCQljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fTEJBIHwgSURFX1RGTEFHX0lOX0RFVklDRTsKIAotCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZ0YXNrKTsKKwlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmY21kKTsKIAogCWlmIChsYmE0OCB8fCAodGYtPmRldmljZSAmIEFUQV9MQkEpKQogCQlwcmludGsoS0VSTl9DT05UICIsIExCQXNlY3Q9JWxsdSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcGFyay5jIGIvZHJpdmVycy9pZGUvaWRlLXBhcmsuYwppbmRleCBmMzBlNTIxLi45NDkwYjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcGFyay5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wYXJrLmMKQEAgLTEsNiArMSw1IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+Ci0jaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAKQEAgLTYzLDEwICs2MiwxMCBAQAogCiBpZGVfc3RhcnRzdG9wX3QgaWRlX2RvX3BhcmtfdW5wYXJrKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCWlkZV90YXNrX3QgdGFzazsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLnRmOworCXN0cnVjdCBpZGVfY21kIGNtZDsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQudGY7CiAKLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAlpZiAocnEtPmNtZFswXSA9PSBSRVFfUEFSS19IRUFEUykgewogCQlkcml2ZS0+c2xlZXAgPSAqKHVuc2lnbmVkIGxvbmcgKilycS0+c3BlY2lhbDsKIAkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfU0xFRVBJTkc7CkBAIC03NSwxNCArNzQsMTYgQEAKIAkJdGYtPmxiYWwgPSAweDRjOwogCQl0Zi0+bGJhbSA9IDB4NGU7CiAJCXRmLT5sYmFoID0gMHg1NTsKLQkJdGFzay50Zl9mbGFncyB8PSBJREVfVEZMQUdfQ1VTVE9NX0hBTkRMRVI7CisJCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CiAJfSBlbHNlCQkvKiBjbWQgPT0gUkVRX1VOUEFSS19IRUFEUyAqLwogCQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfQ0hLX1BPV0VSOwogCi0JdGFzay50Zl9mbGFncyB8PSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwotCXRhc2sucnEgPSBycTsKLQlkcml2ZS0+aHdpZi0+ZGF0YV9waGFzZSA9IHRhc2suZGF0YV9waGFzZSA9IFRBU0tGSUxFX05PX0RBVEE7Ci0JcmV0dXJuIGRvX3J3X3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19DVVNUT01fSEFORExFUjsKKwljbWQucHJvdG9jb2wgPSBBVEFfUFJPVF9OT0RBVEE7CisKKwljbWQucnEgPSBycTsKKworCXJldHVybiBkb19yd190YXNrZmlsZShkcml2ZSwgJmNtZCk7CiB9CiAKIHNzaXplX3QgaWRlX3Bhcmtfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXBtLmMgYi9kcml2ZXJzL2lkZS9pZGUtcG0uYwppbmRleCA2MDUzOGQ5Li5lYmYyZDIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcG0uYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcG0uYwpAQCAtMSw2ICsxLDUgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KLSNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogCiBpbnQgZ2VuZXJpY19pZGVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQogewpAQCAtOCw3ICs3LDcgQEAKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHJlcXVlc3QgKnJxOwogCXN0cnVjdCByZXF1ZXN0X3BtX3N0YXRlIHJxcG07Ci0JaWRlX3Rhc2tfdCBhcmdzOworCXN0cnVjdCBpZGVfY21kIGNtZDsKIAlpbnQgcmV0OwogCiAJLyogY2FsbCBBQ1BJIF9HVE0gb25seSBvbmNlICovCkBAIC0xNiwxMCArMTUsMTAgQEAKIAkJaWRlX2FjcGlfZ2V0X3RpbWluZyhod2lmKTsKIAogCW1lbXNldCgmcnFwbSwgMCwgc2l6ZW9mKHJxcG0pKTsKLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAlycSA9IGJsa19nZXRfcmVxdWVzdChkcml2ZS0+cXVldWUsIFJFQUQsIF9fR0ZQX1dBSVQpOwogCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1BNX1NVU1BFTkQ7Ci0JcnEtPnNwZWNpYWwgPSAmYXJnczsKKwlycS0+c3BlY2lhbCA9ICZjbWQ7CiAJcnEtPmRhdGEgPSAmcnFwbTsKIAlycXBtLnBtX3N0ZXAgPSBJREVfUE1fU1RBUlRfU1VTUEVORDsKIAlpZiAobWVzZy5ldmVudCA9PSBQTV9FVkVOVF9QUkVUSEFXKQpAQCAtNDIsNyArNDEsNyBAQAogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAJc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUgcnFwbTsKLQlpZGVfdGFza190IGFyZ3M7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCWludCBlcnI7CiAKIAkvKiBjYWxsIEFDUEkgX1BTMCAvIF9TVE0gb25seSBvbmNlICovCkBAIC01NCwxMSArNTMsMTEgQEAKIAlpZGVfYWNwaV9leGVjX3Rmcyhkcml2ZSk7CiAKIAltZW1zZXQoJnJxcG0sIDAsIHNpemVvZihycXBtKSk7Ci0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CiAJcnEgPSBibGtfZ2V0X3JlcXVlc3QoZHJpdmUtPnF1ZXVlLCBSRUFELCBfX0dGUF9XQUlUKTsKIAlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9QTV9SRVNVTUU7CiAJcnEtPmNtZF9mbGFncyB8PSBSRVFfUFJFRU1QVDsKLQlycS0+c3BlY2lhbCA9ICZhcmdzOworCXJxLT5zcGVjaWFsID0gJmNtZDsKIAlycS0+ZGF0YSA9ICZycXBtOwogCXJxcG0ucG1fc3RlcCA9IElERV9QTV9TVEFSVF9SRVNVTUU7CiAJcnFwbS5wbV9zdGF0ZSA9IFBNX0VWRU5UX09OOwpAQCAtMTA5LDkgKzEwOCw5IEBACiBpZGVfc3RhcnRzdG9wX3QgaWRlX3N0YXJ0X3Bvd2VyX3N0ZXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUgKnBtID0gcnEtPmRhdGE7Ci0JaWRlX3Rhc2tfdCAqYXJncyA9IHJxLT5zcGVjaWFsOworCXN0cnVjdCBpZGVfY21kICpjbWQgPSBycS0+c3BlY2lhbDsKIAotCW1lbXNldChhcmdzLCAwLCBzaXplb2YoKmFyZ3MpKTsKKwltZW1zZXQoY21kLCAwLCBzaXplb2YoKmNtZCkpOwogCiAJc3dpdGNoIChwbS0+cG1fc3RlcCkgewogCWNhc2UgSURFX1BNX0ZMVVNIX0NBQ0hFOgkvKiBTdXNwZW5kIHN0ZXAgMSAoZmx1c2ggY2FjaGUpICovCkBAIC0xMjQsMTIgKzEyMywxMiBAQAogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCQl9CiAJCWlmIChhdGFfaWRfZmx1c2hfZXh0X2VuYWJsZWQoZHJpdmUtPmlkKSkKLQkJCWFyZ3MtPnRmLmNvbW1hbmQgPSBBVEFfQ01EX0ZMVVNIX0VYVDsKKwkJCWNtZC0+dGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0hfRVhUOwogCQllbHNlCi0JCQlhcmdzLT50Zi5jb21tYW5kID0gQVRBX0NNRF9GTFVTSDsKKwkJCWNtZC0+dGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0g7CiAJCWdvdG8gb3V0X2RvX3RmOwogCWNhc2UgSURFX1BNX1NUQU5EQlk6CQkvKiBTdXNwZW5kIHN0ZXAgMiAoc3RhbmRieSkgKi8KLQkJYXJncy0+dGYuY29tbWFuZCA9IEFUQV9DTURfU1RBTkRCWU5PVzE7CisJCWNtZC0+dGYuY29tbWFuZCA9IEFUQV9DTURfU1RBTkRCWU5PVzE7CiAJCWdvdG8gb3V0X2RvX3RmOwogCWNhc2UgSURFX1BNX1JFU1RPUkVfUElPOgkvKiBSZXN1bWUgc3RlcCAxIChyZXN0b3JlIFBJTykgKi8KIAkJaWRlX3NldF9tYXhfcGlvKGRyaXZlKTsKQEAgLTE0Miw3ICsxNDEsNyBAQAogCQkJaWRlX2NvbXBsZXRlX3Bvd2VyX3N0ZXAoZHJpdmUsIHJxKTsKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCWNhc2UgSURFX1BNX0lETEU6CQkvKiBSZXN1bWUgc3RlcCAyIChpZGxlKSAqLwotCQlhcmdzLT50Zi5jb21tYW5kID0gQVRBX0NNRF9JRExFSU1NRURJQVRFOworCQljbWQtPnRmLmNvbW1hbmQgPSBBVEFfQ01EX0lETEVJTU1FRElBVEU7CiAJCWdvdG8gb3V0X2RvX3RmOwogCWNhc2UgSURFX1BNX1JFU1RPUkVfRE1BOgkvKiBSZXN1bWUgc3RlcCAzIChyZXN0b3JlIERNQSkgKi8KIAkJLyoKQEAgLTE2MCwyNyArMTU5LDM0IEBACiAJfQogCiAJcG0tPnBtX3N0ZXAgPSBJREVfUE1fQ09NUExFVEVEOworCiAJcmV0dXJuIGlkZV9zdG9wcGVkOwogCiBvdXRfZG9fdGY6Ci0JYXJncy0+dGZfZmxhZ3MJID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKLQlhcmdzLT5kYXRhX3BoYXNlID0gVEFTS0ZJTEVfTk9fREFUQTsKLQlyZXR1cm4gZG9fcndfdGFza2ZpbGUoZHJpdmUsIGFyZ3MpOworCWNtZC0+dGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCWNtZC0+cHJvdG9jb2wgPSBBVEFfUFJPVF9OT0RBVEE7CisKKwlyZXR1cm4gZG9fcndfdGFza2ZpbGUoZHJpdmUsIGNtZCk7CiB9CiAKIC8qKgotICoJaWRlX2NvbXBsZXRlX3BtX3JlcXVlc3QgLSBlbmQgdGhlIGN1cnJlbnQgUG93ZXIgTWFuYWdlbWVudCByZXF1ZXN0CisgKglpZGVfY29tcGxldGVfcG1fcnEgLSBlbmQgdGhlIGN1cnJlbnQgUG93ZXIgTWFuYWdlbWVudCByZXF1ZXN0CiAgKglAZHJpdmU6IHRhcmdldCBkcml2ZQogICoJQHJxOiByZXF1ZXN0CiAgKgogICoJVGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgdGhlIGN1cnJlbnQgUE0gcmVxdWVzdCBhbmQgc3RvcHMgdGhlIHF1ZXVlCiAgKglpZiBuZWNlc3NhcnkuCiAgKi8KLXZvaWQgaWRlX2NvbXBsZXRlX3BtX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit2b2lkIGlkZV9jb21wbGV0ZV9wbV9ycShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRyaXZlLT5xdWV1ZTsKKwlzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZSAqcG0gPSBycS0+ZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWRlX2NvbXBsZXRlX3Bvd2VyX3N0ZXAoZHJpdmUsIHJxKTsKKwlpZiAocG0tPnBtX3N0ZXAgIT0gSURFX1BNX0NPTVBMRVRFRCkKKwkJcmV0dXJuOworCiAjaWZkZWYgREVCVUdfUE0KIAlwcmludGsoIiVzOiBjb21wbGV0aW5nIFBNIHJlcXVlc3QsICVzXG4iLCBkcml2ZS0+bmFtZSwKIAkgICAgICAgYmxrX3BtX3N1c3BlbmRfcmVxdWVzdChycSkgPyAic3VzcGVuZCIgOiAicmVzdW1lIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcG5wLmMgYi9kcml2ZXJzL2lkZS9pZGUtcG5wLmMKaW5kZXggYmFjOWIzOS4uNmU4MGI3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXBucC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wbnAuYwpAQCAtMjcsNiArMjcsMTAgQEAKIAl7LmlkID0gIiJ9CiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gaWRlX3BucF9wb3J0X2luZm8gPSB7CisJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX05PX0RNQSwKK307CisKIHN0YXRpYyBpbnQgaWRlcG5wX3Byb2JlKHN0cnVjdCBwbnBfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IGlkZV9ob3N0ICpob3N0OwpAQCAtNjAsNyArNjQsNyBAQAogCWh3LmlycSA9IHBucF9pcnEoZGV2LCAwKTsKIAlody5jaGlwc2V0ID0gaWRlX2dlbmVyaWM7CiAKLQlyYyA9IGlkZV9ob3N0X2FkZChOVUxMLCBod3MsICZob3N0KTsKKwlyYyA9IGlkZV9ob3N0X2FkZCgmaWRlX3BucF9wb3J0X2luZm8sIGh3cywgJmhvc3QpOwogCWlmIChyYykKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKaW5kZXggOTc0MDY3MC4uNTQ4ODY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKQEAgLTIyOCwxNSArMjI4LDkgQEAKIAltW0FUQV9JRF9QUk9EX0xFTiAtIDFdID0gJ1wwJzsKIAogCWlmIChzdHJzdHIobSwgIkUgWCBBIEIgWSBUIEUgTiBFIFMgVCIpKQotCQlnb3RvIGVycl9taXNjOwotCi0JZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfUFJFU0VOVDsKLQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfREVBRDsKLQotCXJldHVybjsKLWVycl9taXNjOgotCWtmcmVlKGlkKTsKLQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfUFJFU0VOVDsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1BSRVNFTlQ7CisJZWxzZQorCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19QUkVTRU5UOwogfQogCiAvKioKQEAgLTI4OSwxMyArMjgzLDEzIEBACiAJICogaWRlbnRpZnkgY29tbWFuZCB0byBiZSBzdXJlIG9mIHJlcGx5CiAJICovCiAJaWYgKGNtZCA9PSBBVEFfQ01EX0lEX0FUQVBJKSB7Ci0JCWlkZV90YXNrX3QgdGFzazsKKwkJc3RydWN0IGlkZV9jbWQgY21kOwogCi0JCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKKwkJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAkJLyogZGlzYWJsZSBETUEgJiBvdmVybGFwICovCi0JCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX0ZFQVRVUkU7CisJCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19PVVRfRkVBVFVSRTsKIAotCQl0cF9vcHMtPnRmX2xvYWQoZHJpdmUsICZ0YXNrKTsKKwkJdHBfb3BzLT50Zl9sb2FkKGRyaXZlLCAmY21kKTsKIAl9CiAKIAkvKiBhc2sgZHJpdmUgZm9yIElEICovCkBAIC0zNDMsMTQgKzMzNywxNCBAQAogCiBzdGF0aWMgdTggaWRlX3JlYWRfZGV2aWNlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fREVWSUNFOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX0RFVklDRTsKIAotCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZ0YXNrKTsKKwlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmY21kKTsKIAotCXJldHVybiB0YXNrLnRmLmRldmljZTsKKwlyZXR1cm4gY21kLnRmLmRldmljZTsKIH0KIAogLyoqCkBAIC01MDUsOCArNDk5LDcgQEAKIAkJfQogCiAJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQotCQkJLyogZHJpdmUgbm90IGZvdW5kICovCi0JCQlyZXR1cm4gMDsKKwkJCWdvdG8gb3V0X2ZyZWU7CiAKIAkJLyogaWRlbnRpZmljYXRpb24gZmFpbGVkPyAqLwogCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfSURfUkVBRCkgPT0gMCkgewpAQCAtNTMwLDcgKzUyMyw3IEBACiAJfQogCiAJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCi0JCXJldHVybiAwOworCQlnb3RvIG91dF9mcmVlOwogCiAJLyogVGhlIGRyaXZlIHdhc24ndCBiZWluZyBoZWxwZnVsLiBBZGQgZ2VuZXJpYyBpbmZvIG9ubHkgKi8KIAlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfSURfUkVBRCkgPT0gMCkgewpAQCAtNTQzLDcgKzUzNiwxMCBAQAogCQlpZGVfZGlza19pbml0X211bHRfY291bnQoZHJpdmUpOwogCX0KIAotCXJldHVybiAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpOworCXJldHVybiAxOworb3V0X2ZyZWU6CisJa2ZyZWUoZHJpdmUtPmlkKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgaHdpZl9yZWxlYXNlX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC04NDEsMzQgKzgzNywxOSBAQAogc3RhdGljIGludCBpbml0X2lycSAoaWRlX2h3aWZfdCAqaHdpZikKIHsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlpcnFfaGFuZGxlcl90IGlycV9oYW5kbGVyOwotCWludCBzYSA9IDA7CisJc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gaHdpZi0+aG9zdDsKKwlpcnFfaGFuZGxlcl90IGlycV9oYW5kbGVyID0gaG9zdC0+aXJxX2hhbmRsZXI7CisJaW50IHNhID0gaG9zdC0+aXJxX2ZsYWdzOwogCi0JaXJxX2hhbmRsZXIgPSBod2lmLT5ob3N0LT5pcnFfaGFuZGxlcjsKIAlpZiAoaXJxX2hhbmRsZXIgPT0gTlVMTCkKIAkJaXJxX2hhbmRsZXIgPSBpZGVfaW50cjsKIAotI2lmIGRlZmluZWQoX19tYzY4MDAwX18pCi0Jc2EgPSBJUlFGX1NIQVJFRDsKLSNlbmRpZiAvKiBfX21jNjgwMDBfXyAqLwotCi0JaWYgKGh3aWYtPmNoaXBzZXQgPT0gaWRlX3BjaSkKLQkJc2EgPSBJUlFGX1NIQVJFRDsKLQogCWlmIChpb19wb3J0cy0+Y3RsX2FkZHIpCiAJCWh3aWYtPnRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKIAogCWlmIChyZXF1ZXN0X2lycShod2lmLT5pcnEsIGlycV9oYW5kbGVyLCBzYSwgaHdpZi0+bmFtZSwgaHdpZikpCiAJCWdvdG8gb3V0X3VwOwogCi0JaWYgKCFod2lmLT5ycXNpemUpIHsKLQkJaWYgKChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0xCQTQ4KSB8fAotCQkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fTEJBNDhfRE1BKSkKLQkJCWh3aWYtPnJxc2l6ZSA9IDI1NjsKLQkJZWxzZQotCQkJaHdpZi0+cnFzaXplID0gNjU1MzY7Ci0JfQotCiAjaWYgIWRlZmluZWQoX19tYzY4MDAwX18pCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgYXQgMHglMDNseC0weCUwM2x4LDB4JTAzbHggb24gaXJxICVkIiwgaHdpZi0+bmFtZSwKIAkJaW9fcG9ydHMtPmRhdGFfYWRkciwgaW9fcG9ydHMtPnN0YXR1c19hZGRyLApAQCAtMTA4MCw3ICsxMDYxLDcgQEAKIAkJaHdpZi0+dHBfb3BzID0gZC0+dHBfb3BzOwogCiAJLyogLT5zZXRfcGlvX21vZGUgZm9yIERUQzIyNzggaXMgY3VycmVudGx5IGxpbWl0ZWQgdG8gcG9ydCAwICovCi0JaWYgKGh3aWYtPmNoaXBzZXQgIT0gaWRlX2R0YzIyNzggfHwgaHdpZi0+Y2hhbm5lbCA9PSAwKQorCWlmICgoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19EVEMyMjc4KSA9PSAwIHx8IGh3aWYtPmNoYW5uZWwgPT0gMCkKIAkJaHdpZi0+cG9ydF9vcHMgPSBkLT5wb3J0X29wczsKIAogCWh3aWYtPnN3ZG1hX21hc2sgPSBkLT5zd2RtYV9tYXNrOwpAQCAtMTExNCw2ICsxMDk1LDEzIEBACiAKIAlpZiAoZC0+bWF4X3NlY3RvcnMpCiAJCWh3aWYtPnJxc2l6ZSA9IGQtPm1heF9zZWN0b3JzOworCWVsc2UgeworCQlpZiAoKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fTEJBNDgpIHx8CisJCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19MQkE0OF9ETUEpKQorCQkJaHdpZi0+cnFzaXplID0gMjU2OworCQllbHNlCisJCQlod2lmLT5ycXNpemUgPSA2NTUzNjsKKwl9CiAKIAkvKiBjYWxsIGNoaXBzZXQgc3BlY2lmaWMgcm91dGluZSBmb3IgZWFjaCBlbmFibGVkIHBvcnQgKi8KIAlpZiAoZC0+aW5pdF9od2lmKQpAQCAtMTMyNiw2ICsxMzE0LDggQEAKIAogCWlmIChkKSB7CiAJCWhvc3QtPmluaXRfY2hpcHNldCA9IGQtPmluaXRfY2hpcHNldDsKKwkJaG9zdC0+Z2V0X2xvY2sgICAgID0gZC0+Z2V0X2xvY2s7CisJCWhvc3QtPnJlbGVhc2VfbG9jayA9IGQtPnJlbGVhc2VfbG9jazsKIAkJaG9zdC0+aG9zdF9mbGFncyA9IGQtPmhvc3RfZmxhZ3M7CiAJfQogCkBAIC0xMzcyLDIwICsxMzYyLDE1IEBACiAJCWlkZV9pbml0X3BvcnRfaHcoaHdpZiwgaHdzW2ldKTsKIAkJaWRlX3BvcnRfYXBwbHlfcGFyYW1zKGh3aWYpOwogCi0JCWlmIChkID09IE5VTEwpIHsKLQkJCW1hdGUgPSBOVUxMOwotCQl9IGVsc2UgewotCQkJaWYgKChpICYgMSkgJiYgbWF0ZSkgewotCQkJCWh3aWYtPm1hdGUgPSBtYXRlOwotCQkJCW1hdGUtPm1hdGUgPSBod2lmOwotCQkJfQotCi0JCQltYXRlID0gKGkgJiAxKSA/IE5VTEwgOiBod2lmOwotCi0JCQlpZGVfaW5pdF9wb3J0KGh3aWYsIGkgJiAxLCBkKTsKLQkJCWlkZV9wb3J0X2NhYmxlX2RldGVjdChod2lmKTsKKwkJaWYgKChpICYgMSkgJiYgbWF0ZSkgeworCQkJaHdpZi0+bWF0ZSA9IG1hdGU7CisJCQltYXRlLT5tYXRlID0gaHdpZjsKIAkJfQogCisJCW1hdGUgPSAoaSAmIDEpID8gTlVMTCA6IGh3aWY7CisKKwkJaWRlX2luaXRfcG9ydChod2lmLCBpICYgMSwgZCk7CisJCWlkZV9wb3J0X2NhYmxlX2RldGVjdChod2lmKTsKIAkJaWRlX3BvcnRfaW5pdF9kZXZpY2VzKGh3aWYpOwogCX0KIApAQCAtMTM5Niw4ICsxMzgxLDggQEAKIAkJaWYgKGlkZV9wcm9iZV9wb3J0KGh3aWYpID09IDApCiAJCQlod2lmLT5wcmVzZW50ID0gMTsKIAotCQlpZiAoaHdpZi0+Y2hpcHNldCAhPSBpZGVfNGRyaXZlcyB8fCAhaHdpZi0+bWF0ZSB8fAotCQkgICAgIWh3aWYtPm1hdGUtPnByZXNlbnQpIHsKKwkJaWYgKChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHXzREUklWRVMpID09IDAgfHwKKwkJICAgIGh3aWYtPm1hdGUgPT0gTlVMTCB8fCBod2lmLT5tYXRlLT5wcmVzZW50ID09IDApIHsKIAkJCWlmIChpZGVfcmVnaXN0ZXJfcG9ydChod2lmKSkgewogCQkJCWlkZV9kaXNhYmxlX3BvcnQoaHdpZik7CiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2MuYwppbmRleCA0MTdjZGU1Li4xMGE4OGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKQEAgLTE5NCwyMCArMTk0LDIwIEBACiAKIHN0YXRpYyBpbnQgc2V0X3hmZXJfcmF0ZSAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQogewotCWlkZV90YXNrX3QgdGFzazsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAJaW50IGVycjsKIAogCWlmIChhcmcgPCBYRkVSX1BJT18wIHx8IGFyZyA+IFhGRVJfVURNQV82KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmLmNvbW1hbmQgPSBBVEFfQ01EX1NFVF9GRUFUVVJFUzsKLQl0YXNrLnRmLmZlYXR1cmUgPSBTRVRGRUFUVVJFU19YRkVSOwotCXRhc2sudGYubnNlY3QgICA9ICh1OClhcmc7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19PVVRfRkVBVFVSRSB8IElERV9URkxBR19PVVRfTlNFQ1QgfAotCQkJSURFX1RGTEFHX0lOX05TRUNUOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLnRmLmNvbW1hbmQgPSBBVEFfQ01EX1NFVF9GRUFUVVJFUzsKKwljbWQudGYuZmVhdHVyZSA9IFNFVEZFQVRVUkVTX1hGRVI7CisJY21kLnRmLm5zZWN0ICAgPSAodTgpYXJnOworCWNtZC50Zl9mbGFncyAgID0gSURFX1RGTEFHX09VVF9GRUFUVVJFIHwgSURFX1RGTEFHX09VVF9OU0VDVCB8CisJCQkgSURFX1RGTEFHX0lOX05TRUNUOwogCi0JZXJyID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKKwllcnIgPSBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmNtZCk7CiAKIAlpZiAoIWVycikgewogCQlpZGVfc2V0X3hmZXJfcmF0ZShkcml2ZSwgKHU4KSBhcmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXRhcGUuYyBiL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKaW5kZXggNGU2MTgxYy4uNjRkZmE3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXRhcGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCkBAIC0xNTIsMTEgKzE1Miw2IEBACiAjZGVmaW5lIElERVRBUEVfTFVfUkVURU5TSU9OX01BU0sJMgogI2RlZmluZSBJREVUQVBFX0xVX0VPVF9NQVNLCQk0CiAKLS8qIEVycm9yIGNvZGVzIHJldHVybmVkIGluIHJxLT5lcnJvcnMgdG8gdGhlIGhpZ2hlciBwYXJ0IG9mIHRoZSBkcml2ZXIuICovCi0jZGVmaW5lIElERVRBUEVfRVJST1JfR0VORVJBTAkJMTAxCi0jZGVmaW5lIElERVRBUEVfRVJST1JfRklMRU1BUksJCTEwMgotI2RlZmluZSBJREVUQVBFX0VSUk9SX0VPRAkJMTAzCi0KIC8qIFN0cnVjdHVyZXMgcmVsYXRlZCB0byB0aGUgU0VMRUNUIFNFTlNFIC8gTU9ERSBTRU5TRSBwYWNrZXQgY29tbWFuZHMuICovCiAjZGVmaW5lIElERVRBUEVfQkxPQ0tfREVTQ1JJUFRPUgkwCiAjZGVmaW5lIElERVRBUEVfQ0FQQUJJTElUSUVTX1BBR0UJMHgyYQpAQCAtMTcxLDE0ICsxNjYsNiBAQAogCXN0cnVjdCBnZW5kaXNrCQkqZGlzazsKIAlzdHJ1Y3QgZGV2aWNlCQlkZXY7CiAKLQkvKgotCSAqCWZhaWxlZF9wYyBwb2ludHMgdG8gdGhlIGxhc3QgZmFpbGVkIHBhY2tldCBjb21tYW5kLCBvciBjb250YWlucwotCSAqCU5VTEwgaWYgd2UgZG8gbm90IG5lZWQgdG8gcmV0cnkgYW55IHBhY2tldCBjb21tYW5kLiBUaGlzIGlzCi0JICoJcmVxdWlyZWQgc2luY2UgYW4gYWRkaXRpb25hbCBwYWNrZXQgY29tbWFuZCBpcyBuZWVkZWQgYmVmb3JlIHRoZQotCSAqCXJldHJ5LCB0byBnZXQgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gd2hhdCB3ZW50IHdyb25nLgotCSAqLwotCS8qIExhc3QgZmFpbGVkIHBhY2tldCBjb21tYW5kICovCi0Jc3RydWN0IGlkZV9hdGFwaV9wYyAqZmFpbGVkX3BjOwogCS8qIHVzZWQgYnkgUkVRX0lERVRBUEVfe1JFQUQsV1JJVEV9IHJlcXVlc3RzICovCiAJc3RydWN0IGlkZV9hdGFwaV9wYyBxdWV1ZWRfcGM7CiAKQEAgLTI0NSw5ICsyMzIsNiBAQAogCS8qIFdhc3RlZCBzcGFjZSBpbiBlYWNoIHN0YWdlICovCiAJaW50IGV4Y2Vzc19iaF9zaXplOwogCi0JLyogcHJvdGVjdHMgdGhlIGlkZS10YXBlIHF1ZXVlICovCi0Jc3BpbmxvY2tfdCBsb2NrOwotCiAJLyogTWVhc3VyZXMgYXZlcmFnZSB0YXBlIHNwZWVkICovCiAJdW5zaWduZWQgbG9uZyBhdmdfdGltZTsKIAlpbnQgYXZnX3NpemU7CkBAIC00MDAsNyArMzg0LDcgQEAKIHN0YXRpYyB2b2lkIGlkZXRhcGVfYW5hbHl6ZV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHU4ICpzZW5zZSkKIHsKIAlpZGV0YXBlX3RhcGVfdCAqdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IHRhcGUtPmZhaWxlZF9wYzsKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IGRyaXZlLT5mYWlsZWRfcGM7CiAKIAl0YXBlLT5zZW5zZV9rZXkgPSBzZW5zZVsyXSAmIDB4RjsKIAl0YXBlLT5hc2MgICAgICAgPSBzZW5zZVsxMl07CkBAIC00MzMsMTkgKzQxNywxOSBAQAogCQl9CiAJfQogCWlmIChwYy0+Y1swXSA9PSBSRUFEXzYgJiYgKHNlbnNlWzJdICYgMHg4MCkpIHsKLQkJcGMtPmVycm9yID0gSURFVEFQRV9FUlJPUl9GSUxFTUFSSzsKKwkJcGMtPmVycm9yID0gSURFX0RSVl9FUlJPUl9GSUxFTUFSSzsKIAkJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfQUJPUlQ7CiAJfQogCWlmIChwYy0+Y1swXSA9PSBXUklURV82KSB7CiAJCWlmICgoc2Vuc2VbMl0gJiAweDQwKSB8fCAodGFwZS0+c2Vuc2Vfa2V5ID09IDB4ZAogCQkgICAgICYmIHRhcGUtPmFzYyA9PSAweDAgJiYgdGFwZS0+YXNjcSA9PSAweDIpKSB7Ci0JCQlwYy0+ZXJyb3IgPSBJREVUQVBFX0VSUk9SX0VPRDsKKwkJCXBjLT5lcnJvciA9IElERV9EUlZfRVJST1JfRU9EOwogCQkJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfQUJPUlQ7CiAJCX0KIAl9CiAJaWYgKHBjLT5jWzBdID09IFJFQURfNiB8fCBwYy0+Y1swXSA9PSBXUklURV82KSB7CiAJCWlmICh0YXBlLT5zZW5zZV9rZXkgPT0gOCkgewotCQkJcGMtPmVycm9yID0gSURFVEFQRV9FUlJPUl9FT0Q7CisJCQlwYy0+ZXJyb3IgPSBJREVfRFJWX0VSUk9SX0VPRDsKIAkJCXBjLT5mbGFncyB8PSBQQ19GTEFHX0FCT1JUOwogCQl9CiAJCWlmICghKHBjLT5mbGFncyAmIFBDX0ZMQUdfQUJPUlQpICYmCkBAIC00NzcsNTIgKzQ2MSwyMyBAQAogCX0KIH0KIAotc3RhdGljIGludCBpZGV0YXBlX2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHVwdG9kYXRlLCBpbnQgbnJfc2VjdHMpCi17Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOwotCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVycm9yOwotCi0JZGVidWdfbG9nKERCR19QUk9DUywgIkVudGVyICVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlzd2l0Y2ggKHVwdG9kYXRlKSB7Ci0JY2FzZSAwOgllcnJvciA9IElERVRBUEVfRVJST1JfR0VORVJBTDsgYnJlYWs7Ci0JY2FzZSAxOiBlcnJvciA9IDA7IGJyZWFrOwotCWRlZmF1bHQ6IGVycm9yID0gdXB0b2RhdGU7Ci0JfQotCXJxLT5lcnJvcnMgPSBlcnJvcjsKLQlpZiAoZXJyb3IpCi0JCXRhcGUtPmZhaWxlZF9wYyA9IE5VTEw7Ci0KLQlpZiAoIWJsa19zcGVjaWFsX3JlcXVlc3QocnEpKSB7Ci0JCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgdXB0b2RhdGUsIG5yX3NlY3RzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRhcGUtPmxvY2ssIGZsYWdzKTsKLQotCWlkZV9lbmRfZHJpdmVfY21kKGRyaXZlLCAwLCAwKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhcGUtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgaWRlX3RhcGVfaGFuZGxlX2RzYyhpZGVfZHJpdmVfdCAqKTsKIAotc3RhdGljIHZvaWQgaWRlX3RhcGVfY2FsbGJhY2soaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZHNjKQorc3RhdGljIGludCBpZGVfdGFwZV9jYWxsYmFjayhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBkc2MpCiB7CiAJaWRldGFwZV90YXBlX3QgKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSBkcml2ZS0+cGM7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOwogCWludCB1cHRvZGF0ZSA9IHBjLT5lcnJvciA/IDAgOiAxOworCWludCBlcnIgPSB1cHRvZGF0ZSA/IDAgOiBJREVfRFJWX0VSUk9SX0dFTkVSQUw7CiAKIAlkZWJ1Z19sb2coREJHX1BST0NTLCAiRW50ZXIgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlmIChkc2MpCiAJCWlkZV90YXBlX2hhbmRsZV9kc2MoZHJpdmUpOwogCi0JaWYgKHRhcGUtPmZhaWxlZF9wYyA9PSBwYykKLQkJdGFwZS0+ZmFpbGVkX3BjID0gTlVMTDsKKwlpZiAoZHJpdmUtPmZhaWxlZF9wYyA9PSBwYykKKwkJZHJpdmUtPmZhaWxlZF9wYyA9IE5VTEw7CiAKIAlpZiAocGMtPmNbMF0gPT0gUkVRVUVTVF9TRU5TRSkgewogCQlpZiAodXB0b2RhdGUpCkBAIC01MzEsNyArNDg2LDYgQEAKIAkJCXByaW50ayhLRVJOX0VSUiAiaWRlLXRhcGU6IEVycm9yIGluIFJFUVVFU1QgU0VOU0UgIgogCQkJCQkiaXRzZWxmIC0gQWJvcnRpbmcgcmVxdWVzdCFcbiIpOwogCX0gZWxzZSBpZiAocGMtPmNbMF0gPT0gUkVBRF82IHx8IHBjLT5jWzBdID09IFdSSVRFXzYpIHsKLQkJc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOwogCQlpbnQgYmxvY2tzID0gcGMtPnhmZXJyZWQgLyB0YXBlLT5ibGtfc2l6ZTsKIAogCQl0YXBlLT5hdmdfc2l6ZSArPSBibG9ja3MgKiB0YXBlLT5ibGtfc2l6ZTsKQEAgLTU0Niw4ICs1MDAsMTAgQEAKIAkJdGFwZS0+Zmlyc3RfZnJhbWUgKz0gYmxvY2tzOwogCQlycS0+Y3VycmVudF9ucl9zZWN0b3JzIC09IGJsb2NrczsKIAotCQlpZiAocGMtPmVycm9yKQotCQkJdXB0b2RhdGUgPSBwYy0+ZXJyb3I7CisJCWlmIChwYy0+ZXJyb3IpIHsKKwkJCXVwdG9kYXRlID0gMDsKKwkJCWVyciA9IHBjLT5lcnJvcjsKKwkJfQogCX0gZWxzZSBpZiAocGMtPmNbMF0gPT0gUkVBRF9QT1NJVElPTiAmJiB1cHRvZGF0ZSkgewogCQl1OCAqcmVhZHBvcyA9IHBjLT5idWY7CiAKQEAgLTU2MSw2ICs1MTcsNyBAQAogCQkJCQkgInRvIHRoZSB0YXBlXG4iKTsKIAkJCWNsZWFyX2JpdChJREVfQUZMQUdfQUREUkVTU19WQUxJRCwgJmRyaXZlLT5hdGFwaV9mbGFncyk7CiAJCQl1cHRvZGF0ZSA9IDA7CisJCQllcnIgPSBJREVfRFJWX0VSUk9SX0dFTkVSQUw7CiAJCX0gZWxzZSB7CiAJCQlkZWJ1Z19sb2coREJHX1NFTlNFLCAiQmxvY2sgTG9jYXRpb24gLSAldVxuIiwKIAkJCQkJYmUzMl90b19jcHVwKChfX2JlMzIgKikmcmVhZHBvc1s0XSkpOwpAQCAtNTcxLDcgKzUyOCw5IEBACiAJCX0KIAl9CiAKLQlpZGV0YXBlX2VuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSwgMCk7CisJcnEtPmVycm9ycyA9IGVycjsKKworCXJldHVybiB1cHRvZGF0ZTsKIH0KIAogLyoKQEAgLTYyMSw3ICs1ODAsNyBAQAogICoKICAqIFRoZSBoYW5kbGluZyB3aWxsIGJlIGRvbmUgaW4gdGhyZWUgc3RhZ2VzOgogICoKLSAqIDEuIGlkZXRhcGVfaXNzdWVfcGMgd2lsbCBzZW5kIHRoZSBwYWNrZXQgY29tbWFuZCB0byB0aGUgZHJpdmUsIGFuZCB3aWxsIHNldAorICogMS4gaWRlX3RhcGVfaXNzdWVfcGMgd2lsbCBzZW5kIHRoZSBwYWNrZXQgY29tbWFuZCB0byB0aGUgZHJpdmUsIGFuZCB3aWxsIHNldAogICogdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIGlkZV9wY19pbnRyLgogICoKICAqIDIuIE9uIGVhY2ggaW50ZXJydXB0LCBpZGVfcGNfaW50ciB3aWxsIGJlIGNhbGxlZC4gVGhpcyBzdGVwIHdpbGwgYmUKQEAgLTY0OSw4ICs2MDgsOSBAQAogICogcmVxdWVzdC4KICAqLwogCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZXRhcGVfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLAotCQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX3RhcGVfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLAorCQkJCQkgc3RydWN0IGlkZV9jbWQgKmNtZCwKKwkJCQkJIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCkBAIC02NjAsOCArNjIwLDggQEAKIAkJCSJUd28gcmVxdWVzdCBzZW5zZSBpbiBzZXJpYWwgd2VyZSBpc3N1ZWRcbiIpOwogCX0KIAotCWlmICh0YXBlLT5mYWlsZWRfcGMgPT0gTlVMTCAmJiBwYy0+Y1swXSAhPSBSRVFVRVNUX1NFTlNFKQotCQl0YXBlLT5mYWlsZWRfcGMgPSBwYzsKKwlpZiAoZHJpdmUtPmZhaWxlZF9wYyA9PSBOVUxMICYmIHBjLT5jWzBdICE9IFJFUVVFU1RfU0VOU0UpCisJCWRyaXZlLT5mYWlsZWRfcGMgPSBwYzsKIAogCS8qIFNldCB0aGUgY3VycmVudCBwYWNrZXQgY29tbWFuZCAqLwogCWRyaXZlLT5wYyA9IHBjOwpAQCAtNjg1LDkgKzY0NSw5IEBACiAJCQkJCQl0YXBlLT5hc2NxKTsKIAkJCX0KIAkJCS8qIEdpdmluZyB1cCAqLwotCQkJcGMtPmVycm9yID0gSURFVEFQRV9FUlJPUl9HRU5FUkFMOworCQkJcGMtPmVycm9yID0gSURFX0RSVl9FUlJPUl9HRU5FUkFMOwogCQl9Ci0JCXRhcGUtPmZhaWxlZF9wYyA9IE5VTEw7CisJCWRyaXZlLT5mYWlsZWRfcGMgPSBOVUxMOwogCQlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUsIDApOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQpAQCAtNjk1LDcgKzY1NSw3IEBACiAKIAlwYy0+cmV0cmllcysrOwogCi0JcmV0dXJuIGlkZV9pc3N1ZV9wYyhkcml2ZSk7CisJcmV0dXJuIGlkZV9pc3N1ZV9wYyhkcml2ZSwgY21kKTsKIH0KIAogLyogQSBtb2RlIHNlbnNlIGNvbW1hbmQgaXMgdXNlZCB0byAic2Vuc2UiIHRhcGUgcGFyYW1ldGVycy4gKi8KQEAgLTc0Niw4ICs3MDYsOCBAQAogCQl9CiAJCXBjLT5lcnJvciA9IDA7CiAJfSBlbHNlIHsKLQkJcGMtPmVycm9yID0gSURFVEFQRV9FUlJPUl9HRU5FUkFMOwotCQl0YXBlLT5mYWlsZWRfcGMgPSBOVUxMOworCQlwYy0+ZXJyb3IgPSBJREVfRFJWX0VSUk9SX0dFTkVSQUw7CisJCWRyaXZlLT5mYWlsZWRfcGMgPSBOVUxMOwogCX0KIAlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUsIDApOwogCXJldHVybiBpZGVfc3RvcHBlZDsKQEAgLTc5MCw2ICs3NTAsNyBAQAogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gTlVMTDsKIAlzdHJ1Y3QgcmVxdWVzdCAqcG9zdHBvbmVkX3JxID0gdGFwZS0+cG9zdHBvbmVkX3JxOworCXN0cnVjdCBpZGVfY21kIGNtZDsKIAl1OCBzdGF0OwogCiAJZGVidWdfbG9nKERCR19TRU5TRSwgInNlY3RvcjogJWxsdSwgbnJfc2VjdG9yczogJWx1LCIKQEAgLTgwMSwxMyArNzYyLDE1IEBACiAJCS8qIFdlIGRvIG5vdCBzdXBwb3J0IGJ1ZmZlciBjYWNoZSBvcmlnaW5hdGVkIHJlcXVlc3RzLiAqLwogCQlwcmludGsoS0VSTl9OT1RJQ0UgImlkZS10YXBlOiAlczogVW5zdXBwb3J0ZWQgcmVxdWVzdCBpbiAiCiAJCQkicmVxdWVzdCBxdWV1ZSAoJWQpXG4iLCBkcml2ZS0+bmFtZSwgcnEtPmNtZF90eXBlKTsKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKKwkJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSA9PSAwICYmIHJxLT5lcnJvcnMgPT0gMCkKKwkJCXJxLT5lcnJvcnMgPSAtRUlPOworCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIC1FSU8sIGlkZV9ycV9ieXRlcyhycSkpOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCiAJLyogUmV0cnkgYSBmYWlsZWQgcGFja2V0IGNvbW1hbmQgKi8KLQlpZiAodGFwZS0+ZmFpbGVkX3BjICYmIGRyaXZlLT5wYy0+Y1swXSA9PSBSRVFVRVNUX1NFTlNFKSB7Ci0JCXBjID0gdGFwZS0+ZmFpbGVkX3BjOworCWlmIChkcml2ZS0+ZmFpbGVkX3BjICYmIGRyaXZlLT5wYy0+Y1swXSA9PSBSRVFVRVNUX1NFTlNFKSB7CisJCXBjID0gZHJpdmUtPmZhaWxlZF9wYzsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC04MTUsNyArNzc4LDkgQEAKIAkJaWYgKHJxICE9IHBvc3Rwb25lZF9ycSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJpZGUtdGFwZTogaWRlLXRhcGUuYyBidWcgLSAiCiAJCQkJCSJUd28gRFNDIHJlcXVlc3RzIHdlcmUgcXVldWVkXG4iKTsKLQkJCWlkZXRhcGVfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOworCQkJZHJpdmUtPmZhaWxlZF9wYyA9IE5VTEw7CisJCQlycS0+ZXJyb3JzID0gMDsKKwkJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwgYmxrX3JxX2J5dGVzKHJxKSk7CiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCX0KIApAQCAtODgxLDcgKzg0NiwxNCBAQAogCUJVRygpOwogCiBvdXQ6Ci0JcmV0dXJuIGlkZXRhcGVfaXNzdWVfcGMoZHJpdmUsIHBjKTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCisJaWYgKHJxX2RhdGFfZGlyKHJxKSkKKwkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19XUklURTsKKworCWNtZC5ycSA9IHJxOworCisJcmV0dXJuIGlkZV90YXBlX2lzc3VlX3BjKGRyaXZlLCAmY21kLCBwYyk7CiB9CiAKIC8qCkBAIC0xMjI2LDcgKzExOTgsNyBAQAogCiAJaWYgKHRhcGUtPm1lcmdlX2JoKQogCQlpZGV0YXBlX2luaXRfbWVyZ2VfYnVmZmVyKHRhcGUpOwotCWlmIChlcnJvcnMgPT0gSURFVEFQRV9FUlJPUl9HRU5FUkFMKQorCWlmIChlcnJvcnMgPT0gSURFX0RSVl9FUlJPUl9HRU5FUkFMKQogCQlyZXR1cm4gLUVJTzsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjE5Miw4ICsyMTY0LDYgQEAKIAlkcml2ZS0+cGNfdXBkYXRlX2J1ZmZlcnMgPSBpZGV0YXBlX3VwZGF0ZV9idWZmZXJzOwogCWRyaXZlLT5wY19pb19idWZmZXJzCSA9IGlkZV90YXBlX2lvX2J1ZmZlcnM7CiAKLQlzcGluX2xvY2tfaW5pdCgmdGFwZS0+bG9jayk7Ci0KIAlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19EU0NfT1ZFUkxBUDsKIAogCWlmIChkcml2ZS0+aHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19EU0MpIHsKQEAgLTIzMjUsNyArMjI5NSw2IEBACiAJLnJlbW92ZQkJCT0gaWRlX3RhcGVfcmVtb3ZlLAogCS52ZXJzaW9uCQk9IElERVRBUEVfVkVSU0lPTiwKIAkuZG9fcmVxdWVzdAkJPSBpZGV0YXBlX2RvX3JlcXVlc3QsCi0JLmVuZF9yZXF1ZXN0CQk9IGlkZXRhcGVfZW5kX3JlcXVlc3QsCiAjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCiAJLnByb2NfZW50cmllcwkJPSBpZGVfdGFwZV9wcm9jX2VudHJpZXMsCiAJLnByb2NfZGV2c2V0cwkJPSBpZGVfdGFwZV9wcm9jX2RldnNldHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCmluZGV4IDE2MTM4YmMuLjg0NTMyYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCkBAIC0zOSw4OCArMzksODYgQEAKIAogaW50IHRhc2tmaWxlX2xpYl9nZXRfaWRlbnRpZnkgKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggKmJ1ZikKIHsKLQlpZGVfdGFza190IGFyZ3M7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCi0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOwotCWFyZ3MudGYubnNlY3QgPSAweDAxOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLnRmLm5zZWN0ID0gMHgwMTsKIAlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQotCQlhcmdzLnRmLmNvbW1hbmQgPSBBVEFfQ01EX0lEX0FUQTsKKwkJY21kLnRmLmNvbW1hbmQgPSBBVEFfQ01EX0lEX0FUQTsKIAllbHNlCi0JCWFyZ3MudGYuY29tbWFuZCA9IEFUQV9DTURfSURfQVRBUEk7Ci0JYXJncy50Zl9mbGFncwk9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7Ci0JYXJncy5kYXRhX3BoYXNlCT0gVEFTS0ZJTEVfSU47Ci0JcmV0dXJuIGlkZV9yYXdfdGFza2ZpbGUoZHJpdmUsICZhcmdzLCBidWYsIDEpOworCQljbWQudGYuY29tbWFuZCA9IEFUQV9DTURfSURfQVRBUEk7CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKKwljbWQucHJvdG9jb2wgPSBBVEFfUFJPVF9QSU87CisKKwlyZXR1cm4gaWRlX3Jhd190YXNrZmlsZShkcml2ZSwgJmNtZCwgYnVmLCAxKTsKIH0KIAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCB0YXNrX25vX2RhdGFfaW50cihpZGVfZHJpdmVfdCAqKTsKLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgcHJlX3Rhc2tfb3V0X2ludHIoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Ci1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfaW5faW50cihpZGVfZHJpdmVfdCAqKTsKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgcHJlX3Rhc2tfb3V0X2ludHIoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfcGlvX2ludHIoaWRlX2RyaXZlX3QgKik7CiAKLWlkZV9zdGFydHN0b3BfdCBkb19yd190YXNrZmlsZSAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQoraWRlX3N0YXJ0c3RvcF90IGRvX3J3X3Rhc2tmaWxlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKm9yaWdfY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwlzdHJ1Y3QgaWRlX2NtZCAqY21kID0gJmh3aWYtPmNtZDsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCWlkZV9oYW5kbGVyX3QgKmhhbmRsZXIgPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7CiAJY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzICpkbWFfb3BzID0gaHdpZi0+ZG1hX29wczsKIAotCWlmICh0YXNrLT5kYXRhX3BoYXNlID09IFRBU0tGSUxFX01VTFRJX0lOIHx8Ci0JICAgIHRhc2stPmRhdGFfcGhhc2UgPT0gVEFTS0ZJTEVfTVVMVElfT1VUKSB7Ci0JCWlmICghZHJpdmUtPm11bHRfY291bnQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG11bHRpbW9kZSBub3Qgc2V0IVxuIiwKLQkJCQkJZHJpdmUtPm5hbWUpOwotCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCQl9CisJaWYgKG9yaWdfY21kLT5wcm90b2NvbCA9PSBBVEFfUFJPVF9QSU8gJiYKKwkgICAgKG9yaWdfY21kLT50Zl9mbGFncyAmIElERV9URkxBR19NVUxUSV9QSU8pICYmCisJICAgIGRyaXZlLT5tdWx0X2NvdW50ID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbXVsdGltb2RlIG5vdCBzZXQhXG4iLCBkcml2ZS0+bmFtZSk7CisJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKLQkJdGFzay0+dGZfZmxhZ3MgfD0gSURFX1RGTEFHX0ZMQUdHRURfU0VUX0lOX0ZMQUdTOworCWlmIChvcmlnX2NtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19GTEFHR0VEKQorCQlvcmlnX2NtZC0+ZnRmX2ZsYWdzIHw9IElERV9GVEZMQUdfU0VUX0lOX0ZMQUdTOwogCi0JbWVtY3B5KCZod2lmLT50YXNrLCB0YXNrLCBzaXplb2YoKnRhc2spKTsKKwltZW1jcHkoY21kLCBvcmlnX2NtZCwgc2l6ZW9mKCpjbWQpKTsKIAotCWlmICgodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRE1BX1BJT19GQUxMQkFDSykgPT0gMCkgeworCWlmICgoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19ETUFfUElPX0ZBTExCQUNLKSA9PSAwKSB7CiAJCWlkZV90Zl9kdW1wKGRyaXZlLT5uYW1lLCB0Zik7CiAJCXRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKIAkJU0VMRUNUX01BU0soZHJpdmUsIDApOwotCQl0cF9vcHMtPnRmX2xvYWQoZHJpdmUsIHRhc2spOworCQl0cF9vcHMtPnRmX2xvYWQoZHJpdmUsIGNtZCk7CiAJfQogCi0Jc3dpdGNoICh0YXNrLT5kYXRhX3BoYXNlKSB7Ci0JY2FzZSBUQVNLRklMRV9NVUxUSV9PVVQ6Ci0JY2FzZSBUQVNLRklMRV9PVVQ6Ci0JCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIHRmLT5jb21tYW5kKTsKLQkJbmRlbGF5KDQwMCk7CS8qIEZJWE1FICovCi0JCXJldHVybiBwcmVfdGFza19vdXRfaW50cihkcml2ZSwgdGFzay0+cnEpOwotCWNhc2UgVEFTS0ZJTEVfTVVMVElfSU46Ci0JY2FzZSBUQVNLRklMRV9JTjoKLQkJaGFuZGxlciA9IHRhc2tfaW5faW50cjsKKwlzd2l0Y2ggKGNtZC0+cHJvdG9jb2wpIHsKKwljYXNlIEFUQV9QUk9UX1BJTzoKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpIHsKKwkJCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIHRmLT5jb21tYW5kKTsKKwkJCW5kZWxheSg0MDApOwkvKiBGSVhNRSAqLworCQkJcmV0dXJuIHByZV90YXNrX291dF9pbnRyKGRyaXZlLCBjbWQpOworCQl9CisJCWhhbmRsZXIgPSB0YXNrX3Bpb19pbnRyOwogCQkvKiBmYWxsLXRocm91Z2ggKi8KLQljYXNlIFRBU0tGSUxFX05PX0RBVEE6CisJY2FzZSBBVEFfUFJPVF9OT0RBVEE6CiAJCWlmIChoYW5kbGVyID09IE5VTEwpCiAJCQloYW5kbGVyID0gdGFza19ub19kYXRhX2ludHI7Ci0JCWlkZV9leGVjdXRlX2NvbW1hbmQoZHJpdmUsIHRmLT5jb21tYW5kLCBoYW5kbGVyLAotCQkJCSAgICBXQUlUX1dPUlNUQ0FTRSwgTlVMTCk7CisJCWlkZV9leGVjdXRlX2NvbW1hbmQoZHJpdmUsIGNtZCwgaGFuZGxlciwgV0FJVF9XT1JTVENBU0UpOwogCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7Ci0JZGVmYXVsdDoKKwljYXNlIEFUQV9QUk9UX0RNQToKIAkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgPT0gMCB8fAotCQkgICAgZG1hX29wcy0+ZG1hX3NldHVwKGRyaXZlKSkKKwkJICAgIGlkZV9idWlsZF9zZ2xpc3QoZHJpdmUsIGNtZCkgPT0gMCB8fAorCQkgICAgZG1hX29wcy0+ZG1hX3NldHVwKGRyaXZlLCBjbWQpKQogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCQlkbWFfb3BzLT5kbWFfZXhlY19jbWQoZHJpdmUsIHRmLT5jb21tYW5kKTsKKwkJaHdpZi0+ZXhwaXJ5ID0gZG1hX29wcy0+ZG1hX3RpbWVyX2V4cGlyeTsKKwkJaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgY21kLCBpZGVfZG1hX2ludHIsIDIgKiBXQUlUX0NNRCk7CiAJCWRtYV9vcHMtPmRtYV9zdGFydChkcml2ZSk7CisJZGVmYXVsdDoKIAkJcmV0dXJuIGlkZV9zdGFydGVkOwogCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRvX3J3X3Rhc2tmaWxlKTsKIAotLyoKLSAqIEhhbmRsZXIgZm9yIGNvbW1hbmRzIHdpdGhvdXQgYSBkYXRhIHBoYXNlCi0gKi8KIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgdGFza19ub19kYXRhX2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlpZGVfdGFza190ICp0YXNrID0gJmh3aWYtPnRhc2s7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7Ci0JaW50IGN1c3RvbSA9ICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19DVVNUT01fSEFORExFUikgPyAxIDogMDsKKwlzdHJ1Y3QgaWRlX2NtZCAqY21kID0gJmh3aWYtPmNtZDsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOworCWludCBjdXN0b20gPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19DVVNUT01fSEFORExFUikgPyAxIDogMDsKIAlpbnQgcmV0cmllcyA9IChjdXN0b20gJiYgdGYtPmNvbW1hbmQgPT0gQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMpID8gNSA6IDE7CiAJdTggc3RhdDsKIApAQCAtMTQyLDI4ICsxNDAsMjYgQEAKIAkJfSBlbHNlIGlmIChjdXN0b20gJiYgdGYtPmNvbW1hbmQgPT0gQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMpIHsKIAkJCWlmICgoc3RhdCAmIChBVEFfRVJSIHwgQVRBX0RSUSkpID09IDApIHsKIAkJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNrX25vX2RhdGFfaW50ciwKLQkJCQkJCVdBSVRfV09SU1RDQVNFLCBOVUxMKTsKKwkJCQkJCVdBSVRfV09SU1RDQVNFKTsKIAkJCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiAJCQl9CiAJCX0KIAkJcmV0dXJuIGlkZV9lcnJvcihkcml2ZSwgInRhc2tfbm9fZGF0YV9pbnRyIiwgc3RhdCk7Ci0JCS8qIGNhbGxzIGlkZV9lbmRfZHJpdmVfY21kICovCiAJfQogCi0JaWYgKCFjdXN0b20pCi0JCWlkZV9lbmRfZHJpdmVfY21kKGRyaXZlLCBzdGF0LCBpZGVfcmVhZF9lcnJvcihkcml2ZSkpOwotCWVsc2UgaWYgKHRmLT5jb21tYW5kID09IEFUQV9DTURfSURMRUlNTUVESUFURSkgewotCQlod2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsIHRhc2spOwotCQlpZiAodGYtPmxiYWwgIT0gMHhjNCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaGVhZCB1bmxvYWQgZmFpbGVkIVxuIiwKLQkJCSAgICAgICBkcml2ZS0+bmFtZSk7Ci0JCQlpZGVfdGZfZHVtcChkcml2ZS0+bmFtZSwgdGYpOwotCQl9IGVsc2UKLQkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1BBUktFRDsKLQkJaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIHN0YXQsIGlkZV9yZWFkX2Vycm9yKGRyaXZlKSk7Ci0JfSBlbHNlIGlmICh0Zi0+Y29tbWFuZCA9PSBBVEFfQ01EX1NFVF9NVUxUSSkKKwlpZiAoY3VzdG9tICYmIHRmLT5jb21tYW5kID09IEFUQV9DTURfU0VUX01VTFRJKQogCQlkcml2ZS0+bXVsdF9jb3VudCA9IGRyaXZlLT5tdWx0X3JlcTsKIAorCWlmIChjdXN0b20gPT0gMCB8fCB0Zi0+Y29tbWFuZCA9PSBBVEFfQ01EX0lETEVJTU1FRElBVEUgfHwKKwkgICAgdGYtPmNvbW1hbmQgPT0gQVRBX0NNRF9DSEtfUE9XRVIpIHsKKwkJc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7CisKKwkJaWYgKGJsa19wbV9yZXF1ZXN0KHJxKSkKKwkJCWlkZV9jb21wbGV0ZV9wbV9ycShkcml2ZSwgcnEpOworCQllbHNlCisJCQlpZGVfZmluaXNoX2NtZChkcml2ZSwgY21kLCBzdGF0KTsKKwl9CisKIAlyZXR1cm4gaWRlX3N0b3BwZWQ7CiB9CiAKQEAgLTE5MiwxMiArMTg4LDEyIEBACiAJcmV0dXJuIHN0YXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9waW9fc2VjdG9yKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAotCQkJICAgdW5zaWduZWQgaW50IHdyaXRlKQorc3RhdGljIHZvaWQgaWRlX3Bpb19ieXRlcyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCisJCQkgIHVuc2lnbmVkIGludCB3cml0ZSwgdW5zaWduZWQgaW50IG5yX2J5dGVzKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gaHdpZi0+c2dfdGFibGU7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpjdXJzZyA9IGh3aWYtPmN1cnNnOworCXN0cnVjdCBzY2F0dGVybGlzdCAqY3Vyc2cgPSBjbWQtPmN1cnNnOwogCXN0cnVjdCBwYWdlICpwYWdlOwogI2lmZGVmIENPTkZJR19ISUdITUVNCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIwNSwxNCArMjAxLDE0IEBACiAJdW5zaWduZWQgaW50IG9mZnNldDsKIAl1OCAqYnVmOwogCi0JY3Vyc2cgPSBod2lmLT5jdXJzZzsKKwljdXJzZyA9IGNtZC0+Y3Vyc2c7CiAJaWYgKCFjdXJzZykgewogCQljdXJzZyA9IHNnOwotCQlod2lmLT5jdXJzZyA9IHNnOworCQljbWQtPmN1cnNnID0gc2c7CiAJfQogCiAJcGFnZSA9IHNnX3BhZ2UoY3Vyc2cpOwotCW9mZnNldCA9IGN1cnNnLT5vZmZzZXQgKyBod2lmLT5jdXJzZ19vZnMgKiBTRUNUT1JfU0laRTsKKwlvZmZzZXQgPSBjdXJzZy0+b2Zmc2V0ICsgY21kLT5jdXJzZ19vZnM7CiAKIAkvKiBnZXQgdGhlIGN1cnJlbnQgcGFnZSBhbmQgb2Zmc2V0ICovCiAJcGFnZSA9IG50aF9wYWdlKHBhZ2UsIChvZmZzZXQgPj4gUEFHRV9TSElGVCkpOwpAQCAtMjIzLDE5ICsyMTksMTkgQEAKICNlbmRpZgogCWJ1ZiA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX0JJT19TUkNfSVJRKSArIG9mZnNldDsKIAotCWh3aWYtPm5sZWZ0LS07Ci0JaHdpZi0+Y3Vyc2dfb2ZzKys7CisJY21kLT5ubGVmdCAtPSBucl9ieXRlczsKKwljbWQtPmN1cnNnX29mcyArPSBucl9ieXRlczsKIAotCWlmICgoaHdpZi0+Y3Vyc2dfb2ZzICogU0VDVE9SX1NJWkUpID09IGN1cnNnLT5sZW5ndGgpIHsKLQkJaHdpZi0+Y3Vyc2cgPSBzZ19uZXh0KGh3aWYtPmN1cnNnKTsKLQkJaHdpZi0+Y3Vyc2dfb2ZzID0gMDsKKwlpZiAoY21kLT5jdXJzZ19vZnMgPT0gY3Vyc2ctPmxlbmd0aCkgeworCQljbWQtPmN1cnNnID0gc2dfbmV4dChjbWQtPmN1cnNnKTsKKwkJY21kLT5jdXJzZ19vZnMgPSAwOwogCX0KIAogCS8qIGRvIHRoZSBhY3R1YWwgZGF0YSB0cmFuc2ZlciAqLwogCWlmICh3cml0ZSkKLQkJaHdpZi0+dHBfb3BzLT5vdXRwdXRfZGF0YShkcml2ZSwgcnEsIGJ1ZiwgU0VDVE9SX1NJWkUpOworCQlod2lmLT50cF9vcHMtPm91dHB1dF9kYXRhKGRyaXZlLCBjbWQsIGJ1ZiwgbnJfYnl0ZXMpOwogCWVsc2UKLQkJaHdpZi0+dHBfb3BzLT5pbnB1dF9kYXRhKGRyaXZlLCBycSwgYnVmLCBTRUNUT1JfU0laRSk7CisJCWh3aWYtPnRwX29wcy0+aW5wdXRfZGF0YShkcml2ZSwgY21kLCBidWYsIG5yX2J5dGVzKTsKIAogCWt1bm1hcF9hdG9taWMoYnVmLCBLTV9CSU9fU1JDX0lSUSk7CiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KQEAgLTI0MywxODggKzIzOSwxMzcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBpZGVfcGlvX211bHRpKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgaWRlX3Bpb19tdWx0aShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkgIHVuc2lnbmVkIGludCB3cml0ZSkKIHsKIAl1bnNpZ25lZCBpbnQgbnNlY3Q7CiAKLQluc2VjdCA9IG1pbl90KHVuc2lnbmVkIGludCwgZHJpdmUtPmh3aWYtPm5sZWZ0LCBkcml2ZS0+bXVsdF9jb3VudCk7CisJbnNlY3QgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNtZC0+bmxlZnQgPj4gOSwgZHJpdmUtPm11bHRfY291bnQpOwogCXdoaWxlIChuc2VjdC0tKQotCQlpZGVfcGlvX3NlY3Rvcihkcml2ZSwgcnEsIHdyaXRlKTsKKwkJaWRlX3Bpb19ieXRlcyhkcml2ZSwgY21kLCB3cml0ZSwgU0VDVE9SX1NJWkUpOwogfQogCi1zdGF0aWMgdm9pZCBpZGVfcGlvX2RhdGFibG9jayhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKLQkJCQkgICAgIHVuc2lnbmVkIGludCB3cml0ZSkKK3N0YXRpYyB2b2lkIGlkZV9waW9fZGF0YWJsb2NrKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB3cml0ZSkKIHsKIAl1OCBzYXZlZF9pb18zMmJpdCA9IGRyaXZlLT5pb18zMmJpdDsKIAotCWlmIChycS0+YmlvKQkvKiBmcyByZXF1ZXN0ICovCi0JCXJxLT5lcnJvcnMgPSAwOworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZTKQorCQljbWQtPnJxLT5lcnJvcnMgPSAwOwogCi0JaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfVEFTS0ZJTEUpIHsKLQkJaWRlX3Rhc2tfdCAqdGFzayA9IHJxLT5zcGVjaWFsOwotCi0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JT18xNkJJVCkKLQkJCWRyaXZlLT5pb18zMmJpdCA9IDA7Ci0JfQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lPXzE2QklUKQorCQlkcml2ZS0+aW9fMzJiaXQgPSAwOwogCiAJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOwogCi0Jc3dpdGNoIChkcml2ZS0+aHdpZi0+ZGF0YV9waGFzZSkgewotCWNhc2UgVEFTS0ZJTEVfTVVMVElfSU46Ci0JY2FzZSBUQVNLRklMRV9NVUxUSV9PVVQ6Ci0JCWlkZV9waW9fbXVsdGkoZHJpdmUsIHJxLCB3cml0ZSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWlkZV9waW9fc2VjdG9yKGRyaXZlLCBycSwgd3JpdGUpOwotCQlicmVhazsKLQl9CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTVVMVElfUElPKQorCQlpZGVfcGlvX211bHRpKGRyaXZlLCBjbWQsIHdyaXRlKTsKKwllbHNlCisJCWlkZV9waW9fYnl0ZXMoZHJpdmUsIGNtZCwgd3JpdGUsIFNFQ1RPUl9TSVpFKTsKIAogCWRyaXZlLT5pb18zMmJpdCA9IHNhdmVkX2lvXzMyYml0OwogfQogCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCi0JCQkJICBjb25zdCBjaGFyICpzLCB1OCBzdGF0KQorc3RhdGljIHZvaWQgaWRlX2Vycm9yX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7Ci0JaWYgKHJxLT5iaW8pIHsKLQkJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCQlpbnQgc2VjdG9ycyA9IGh3aWYtPm5zZWN0IC0gaHdpZi0+bmxlZnQ7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRlMpIHsKKwkJaW50IG5yX2J5dGVzID0gY21kLT5uYnl0ZXMgLSBjbWQtPm5sZWZ0OwogCi0JCXN3aXRjaCAoaHdpZi0+ZGF0YV9waGFzZSkgewotCQljYXNlIFRBU0tGSUxFX0lOOgotCQkJaWYgKGh3aWYtPm5sZWZ0KQotCQkJCWJyZWFrOwotCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgVEFTS0ZJTEVfT1VUOgotCQkJc2VjdG9ycy0tOwotCQkJYnJlYWs7Ci0JCWNhc2UgVEFTS0ZJTEVfTVVMVElfSU46Ci0JCQlpZiAoaHdpZi0+bmxlZnQpCi0JCQkJYnJlYWs7Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBUQVNLRklMRV9NVUxUSV9PVVQ6Ci0JCQlzZWN0b3JzIC09IGRyaXZlLT5tdWx0X2NvdW50OwotCQlkZWZhdWx0OgotCQkJYnJlYWs7CisJCWlmIChjbWQtPnByb3RvY29sID09IEFUQV9QUk9UX1BJTyAmJgorCQkgICAgKChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKSB8fCBjbWQtPm5sZWZ0ID09IDApKSB7CisJCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19NVUxUSV9QSU8pCisJCQkJbnJfYnl0ZXMgLT0gZHJpdmUtPm11bHRfY291bnQgPDwgOTsKKwkJCWVsc2UKKwkJCQlucl9ieXRlcyAtPSBTRUNUT1JfU0laRTsKIAkJfQogCi0JCWlmIChzZWN0b3JzID4gMCkgewotCQkJc3RydWN0IGlkZV9kcml2ZXIgKmRydjsKLQotCQkJZHJ2ID0gKihzdHJ1Y3QgaWRlX2RyaXZlciAqKilycS0+cnFfZGlzay0+cHJpdmF0ZV9kYXRhOwotCQkJZHJ2LT5lbmRfcmVxdWVzdChkcml2ZSwgMSwgc2VjdG9ycyk7Ci0JCX0KKwkJaWYgKG5yX2J5dGVzID4gMCkKKwkJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwgbnJfYnl0ZXMpOwogCX0KLQlyZXR1cm4gaWRlX2Vycm9yKGRyaXZlLCBzLCBzdGF0KTsKIH0KIAotdm9pZCB0YXNrX2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB1OCBzdGF0KQordm9pZCBpZGVfZmluaXNoX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsIHU4IHN0YXQpCiB7Ci0JaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfVEFTS0ZJTEUpIHsKLQkJdTggZXJyID0gaWRlX3JlYWRfZXJyb3IoZHJpdmUpOworCXN0cnVjdCByZXF1ZXN0ICpycSA9IGRyaXZlLT5od2lmLT5ycTsKKwl1OCBlcnIgPSBpZGVfcmVhZF9lcnJvcihkcml2ZSk7CiAKLQkJaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIHN0YXQsIGVycik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAocnEtPnJxX2Rpc2spIHsKLQkJc3RydWN0IGlkZV9kcml2ZXIgKmRydjsKLQotCQlkcnYgPSAqKHN0cnVjdCBpZGVfZHJpdmVyICoqKXJxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7OwotCQlkcnYtPmVuZF9yZXF1ZXN0KGRyaXZlLCAxLCBycS0+bnJfc2VjdG9ycyk7Ci0JfSBlbHNlCi0JCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgMSwgcnEtPm5yX3NlY3RvcnMpOworCWlkZV9jb21wbGV0ZV9jbWQoZHJpdmUsIGNtZCwgc3RhdCwgZXJyKTsKKwlycS0+ZXJyb3JzID0gZXJyOworCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgZXJyID8gLUVJTyA6IDAsIGJsa19ycV9ieXRlcyhycSkpOwogfQogCiAvKgotICogV2UgZ290IGFuIGludGVycnVwdCBvbiBhIHRhc2tfaW4gY2FzZSwgYnV0IG5vIGVycm9ycyBhbmQgbm8gRFJRLgotICoKLSAqIEl0IG1pZ2h0IGJlIGEgc3B1cmlvdXMgaXJxIChzaGFyZWQgaXJxKSwgYnV0IGl0IG1pZ2h0IGJlIGEKLSAqIGNvbW1hbmQgdGhhdCBoYWQgbm8gb3V0cHV0LgorICogSGFuZGxlciBmb3IgY29tbWFuZCB3aXRoIFBJTyBkYXRhIHBoYXNlLgogICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfaW5fdW5leHBlY3RlZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdTggc3RhdCkKLXsKLQkvKiBDb21tYW5kIGFsbCBkb25lPyAqLwotCWlmIChPS19TVEFUKHN0YXQsIEFUQV9EUkRZLCBBVEFfQlVTWSkpIHsKLQkJdGFza19lbmRfcmVxdWVzdChkcml2ZSwgcnEsIHN0YXQpOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JfQotCi0JLyogQXNzdW1lIGl0IHdhcyBhIHNwdXJpb3VzIGlycSAqLwotCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnRhc2tfaW5faW50ciwgV0FJVF9XT1JTVENBU0UsIE5VTEwpOwotCXJldHVybiBpZGVfc3RhcnRlZDsKLX0KLQotLyoKLSAqIEhhbmRsZXIgZm9yIGNvbW1hbmQgd2l0aCBQSU8gZGF0YS1pbiBwaGFzZSAoUmVhZC9SZWFkIE11bHRpcGxlKS4KLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCB0YXNrX2luX2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIGlkZV9zdGFydHN0b3BfdCB0YXNrX3Bpb19pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7CisJc3RydWN0IGlkZV9jbWQgKmNtZCA9ICZkcml2ZS0+aHdpZi0+Y21kOwogCXU4IHN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOworCXU4IHdyaXRlID0gISEoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSk7CiAKLQkvKiBFcnJvcj8gKi8KLQlpZiAoc3RhdCAmIEFUQV9FUlIpCi0JCXJldHVybiB0YXNrX2Vycm9yKGRyaXZlLCBycSwgX19mdW5jX18sIHN0YXQpOworCWlmICh3cml0ZSA9PSAwKSB7CisJCS8qIEVycm9yPyAqLworCQlpZiAoc3RhdCAmIEFUQV9FUlIpCisJCQlnb3RvIG91dF9lcnI7CiAKLQkvKiBEaWRuJ3Qgd2FudCBhbnkgZGF0YT8gT2RkLiAqLwotCWlmICgoc3RhdCAmIEFUQV9EUlEpID09IDApCi0JCXJldHVybiB0YXNrX2luX3VuZXhwZWN0ZWQoZHJpdmUsIHJxLCBzdGF0KTsKKwkJLyogRGlkbid0IHdhbnQgYW55IGRhdGE/IE9kZC4gKi8KKwkJaWYgKChzdGF0ICYgQVRBX0RSUSkgPT0gMCkgeworCQkJLyogQ29tbWFuZCBhbGwgZG9uZT8gKi8KKwkJCWlmIChPS19TVEFUKHN0YXQsIEFUQV9EUkRZLCBBVEFfQlVTWSkpCisJCQkJZ290byBvdXRfZW5kOwogCi0JaWRlX3Bpb19kYXRhYmxvY2soZHJpdmUsIHJxLCAwKTsKKwkJCS8qIEFzc3VtZSBpdCB3YXMgYSBzcHVyaW91cyBpcnEgKi8KKwkJCWdvdG8gb3V0X3dhaXQ7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIU9LX1NUQVQoc3RhdCwgRFJJVkVfUkVBRFksIGRyaXZlLT5iYWRfd3N0YXQpKQorCQkJZ290byBvdXRfZXJyOworCisJCS8qIERlYWwgd2l0aCB1bmV4cGVjdGVkIEFUQSBkYXRhIHBoYXNlLiAqLworCQlpZiAoKChzdGF0ICYgQVRBX0RSUSkgPT0gMCkgXiAoY21kLT5ubGVmdCA9PSAwKSkKKwkJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlpZiAod3JpdGUgJiYgY21kLT5ubGVmdCA9PSAwKQorCQlnb3RvIG91dF9lbmQ7CisKKwkvKiBTdGlsbCBkYXRhIGxlZnQgdG8gdHJhbnNmZXIuICovCisJaWRlX3Bpb19kYXRhYmxvY2soZHJpdmUsIGNtZCwgd3JpdGUpOwogCiAJLyogQXJlIHdlIGRvbmU/IENoZWNrIHN0YXR1cyBhbmQgZmluaXNoIHRyYW5zZmVyLiAqLwotCWlmICghaHdpZi0+bmxlZnQpIHsKKwlpZiAod3JpdGUgPT0gMCAmJiBjbWQtPm5sZWZ0ID09IDApIHsKIAkJc3RhdCA9IHdhaXRfZHJpdmVfbm90X2J1c3koZHJpdmUpOwogCQlpZiAoIU9LX1NUQVQoc3RhdCwgMCwgQkFEX1NUQVQpKQotCQkJcmV0dXJuIHRhc2tfZXJyb3IoZHJpdmUsIHJxLCBfX2Z1bmNfXywgc3RhdCk7Ci0JCXRhc2tfZW5kX3JlcXVlc3QoZHJpdmUsIHJxLCBzdGF0KTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOworCQkJZ290byBvdXRfZXJyOworCisJCWdvdG8gb3V0X2VuZDsKIAl9Ci0KK291dF93YWl0OgogCS8qIFN0aWxsIGRhdGEgbGVmdCB0byB0cmFuc2Zlci4gKi8KLQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNrX2luX2ludHIsIFdBSVRfV09SU1RDQVNFLCBOVUxMKTsKLQorCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnRhc2tfcGlvX2ludHIsIFdBSVRfV09SU1RDQVNFKTsKIAlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CitvdXRfZW5kOgorCWlmICgoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19GUykgPT0gMCkKKwkJaWRlX2ZpbmlzaF9jbWQoZHJpdmUsIGNtZCwgc3RhdCk7CisJZWxzZQorCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIDAsIGNtZC0+cnEtPm5yX3NlY3RvcnMgPDwgOSk7CisJcmV0dXJuIGlkZV9zdG9wcGVkOworb3V0X2VycjoKKwlpZGVfZXJyb3JfY21kKGRyaXZlLCBjbWQpOworCXJldHVybiBpZGVfZXJyb3IoZHJpdmUsIF9fZnVuY19fLCBzdGF0KTsKIH0KIAotLyoKLSAqIEhhbmRsZXIgZm9yIGNvbW1hbmQgd2l0aCBQSU8gZGF0YS1vdXQgcGhhc2UgKFdyaXRlL1dyaXRlIE11bHRpcGxlKS4KLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCB0YXNrX291dF9pbnRyIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGh3aWYtPnJxOwotCXU4IHN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCi0JaWYgKCFPS19TVEFUKHN0YXQsIERSSVZFX1JFQURZLCBkcml2ZS0+YmFkX3dzdGF0KSkKLQkJcmV0dXJuIHRhc2tfZXJyb3IoZHJpdmUsIHJxLCBfX2Z1bmNfXywgc3RhdCk7Ci0KLQkvKiBEZWFsIHdpdGggdW5leHBlY3RlZCBBVEEgZGF0YSBwaGFzZS4gKi8KLQlpZiAoKChzdGF0ICYgQVRBX0RSUSkgPT0gMCkgXiAhaHdpZi0+bmxlZnQpCi0JCXJldHVybiB0YXNrX2Vycm9yKGRyaXZlLCBycSwgX19mdW5jX18sIHN0YXQpOwotCi0JaWYgKCFod2lmLT5ubGVmdCkgewotCQl0YXNrX2VuZF9yZXF1ZXN0KGRyaXZlLCBycSwgc3RhdCk7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKLQl9Ci0KLQkvKiBTdGlsbCBkYXRhIGxlZnQgdG8gdHJhbnNmZXIuICovCi0JaWRlX3Bpb19kYXRhYmxvY2soZHJpdmUsIHJxLCAxKTsKLQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNrX291dF9pbnRyLCBXQUlUX1dPUlNUQ0FTRSwgTlVMTCk7Ci0KLQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7Ci19Ci0KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgcHJlX3Rhc2tfb3V0X2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHByZV90YXNrX291dF9pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSwKKwkJCQkJIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX3N0YXJ0c3RvcF90IHN0YXJ0c3RvcDsKIAogCWlmIChpZGVfd2FpdF9zdGF0KCZzdGFydHN0b3AsIGRyaXZlLCBBVEFfRFJRLAogCQkJICBkcml2ZS0+YmFkX3dzdGF0LCBXQUlUX0RSUSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gRFJRIGFmdGVyIGlzc3VpbmcgJXNXUklURSVzXG4iLAotCQkJZHJpdmUtPm5hbWUsIGRyaXZlLT5od2lmLT5kYXRhX3BoYXNlID8gIk1VTFQiIDogIiIsCisJCQlkcml2ZS0+bmFtZSwKKwkJCShjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX01VTFRJX1BJTykgPyAiTVVMVCIgOiAiIiwKIAkJCShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KSA/ICJfRVhUIiA6ICIiKTsKIAkJcmV0dXJuIHN0YXJ0c3RvcDsKIAl9CkBAIC00MzIsMTMgKzM3NywxNSBAQAogCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VTk1BU0spID09IDApCiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKLQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNrX291dF9pbnRyLCBXQUlUX1dPUlNUQ0FTRSwgTlVMTCk7Ci0JaWRlX3Bpb19kYXRhYmxvY2soZHJpdmUsIHJxLCAxKTsKKwlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNrX3Bpb19pbnRyLCBXQUlUX1dPUlNUQ0FTRSk7CisKKwlpZGVfcGlvX2RhdGFibG9jayhkcml2ZSwgY21kLCAxKTsKIAogCXJldHVybiBpZGVfc3RhcnRlZDsKIH0KIAotaW50IGlkZV9yYXdfdGFza2ZpbGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrLCB1OCAqYnVmLCB1MTYgbnNlY3QpCitpbnQgaWRlX3Jhd190YXNrZmlsZShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsIHU4ICpidWYsCisJCSAgICAgdTE2IG5zZWN0KQogewogCXN0cnVjdCByZXF1ZXN0ICpycTsKIAlpbnQgZXJyb3I7CkBAIC00NTYsMTEgKzQwMywxMSBAQAogCXJxLT5oYXJkX25yX3NlY3RvcnMgPSBycS0+bnJfc2VjdG9ycyA9IG5zZWN0OwogCXJxLT5oYXJkX2N1cl9zZWN0b3JzID0gcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyA9IG5zZWN0OwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKQogCQlycS0+Y21kX2ZsYWdzIHw9IFJFUV9SVzsKIAotCXJxLT5zcGVjaWFsID0gdGFzazsKLQl0YXNrLT5ycSA9IHJxOworCXJxLT5zcGVjaWFsID0gY21kOworCWNtZC0+cnEgPSBycTsKIAogCWVycm9yID0gYmxrX2V4ZWN1dGVfcnEoZHJpdmUtPnF1ZXVlLCBOVUxMLCBycSwgMCk7CiAJYmxrX3B1dF9yZXF1ZXN0KHJxKTsKQEAgLTQ3MCwxOSArNDE3LDE5IEBACiAKIEVYUE9SVF9TWU1CT0woaWRlX3Jhd190YXNrZmlsZSk7CiAKLWludCBpZGVfbm9fZGF0YV90YXNrZmlsZShpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCitpbnQgaWRlX25vX2RhdGFfdGFza2ZpbGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewotCXRhc2stPmRhdGFfcGhhc2UgPSBUQVNLRklMRV9OT19EQVRBOworCWNtZC0+cHJvdG9jb2wgPSBBVEFfUFJPVF9OT0RBVEE7CiAKLQlyZXR1cm4gaWRlX3Jhd190YXNrZmlsZShkcml2ZSwgdGFzaywgTlVMTCwgMCk7CisJcmV0dXJuIGlkZV9yYXdfdGFza2ZpbGUoZHJpdmUsIGNtZCwgTlVMTCwgMCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfbm9fZGF0YV90YXNrZmlsZSk7CiAKICNpZmRlZiBDT05GSUdfSURFX1RBU0tfSU9DVEwKLWludCBpZGVfdGFza2ZpbGVfaW9jdGwgKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitpbnQgaWRlX3Rhc2tmaWxlX2lvY3RsKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaWRlX3Rhc2tfcmVxdWVzdF90CSpyZXFfdGFzazsKLQlpZGVfdGFza190CQlhcmdzOworCXN0cnVjdCBpZGVfY21kCQljbWQ7CiAJdTggKm91dGJ1ZgkJPSBOVUxMOwogCXU4ICppbmJ1ZgkJPSBOVUxMOwogCXU4ICpkYXRhX2J1ZgkJPSBOVUxMOwpAQCAtNTM2LDUzICs0ODMsNjMgQEAKIAkJfQogCX0KIAotCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCi0JbWVtY3B5KCZhcmdzLnRmX2FycmF5WzBdLCByZXFfdGFzay0+aG9iX3BvcnRzLCBIRElPX0RSSVZFX0hPQl9IRFJfU0laRSAtIDIpOwotCW1lbWNweSgmYXJncy50Zl9hcnJheVs2XSwgcmVxX3Rhc2stPmlvX3BvcnRzLCBIRElPX0RSSVZFX1RBU0tfSERSX1NJWkUpOworCW1lbWNweSgmY21kLnRmX2FycmF5WzBdLCByZXFfdGFzay0+aG9iX3BvcnRzLAorCSAgICAgICBIRElPX0RSSVZFX0hPQl9IRFJfU0laRSAtIDIpOworCW1lbWNweSgmY21kLnRmX2FycmF5WzZdLCByZXFfdGFzay0+aW9fcG9ydHMsCisJICAgICAgIEhESU9fRFJJVkVfVEFTS19IRFJfU0laRSk7CiAKLQlhcmdzLmRhdGFfcGhhc2UgPSByZXFfdGFzay0+ZGF0YV9waGFzZTsKKwljbWQudGZfZmxhZ3MgICA9IElERV9URkxBR19JT18xNkJJVCB8IElERV9URkxBR19ERVZJQ0UgfAorCQkJIElERV9URkxBR19JTl9URjsKIAotCWFyZ3MudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU9fMTZCSVQgfCBJREVfVEZMQUdfREVWSUNFIHwKLQkJCUlERV9URkxBR19JTl9URjsKIAlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkE0OCkKLQkJYXJncy50Zl9mbGFncyB8PSAoSURFX1RGTEFHX0xCQTQ4IHwgSURFX1RGTEFHX0lOX0hPQik7CisJCWNtZC50Zl9mbGFncyB8PSAoSURFX1RGTEFHX0xCQTQ4IHwgSURFX1RGTEFHX0lOX0hPQik7CiAKIAlpZiAocmVxX3Rhc2stPm91dF9mbGFncy5hbGwpIHsKLQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfRkxBR0dFRDsKKwkJY21kLmZ0Zl9mbGFncyB8PSBJREVfRlRGTEFHX0ZMQUdHRUQ7CiAKIAkJaWYgKHJlcV90YXNrLT5vdXRfZmxhZ3MuYi5kYXRhKQotCQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0RBVEE7CisJCQljbWQuZnRmX2ZsYWdzIHw9IElERV9GVEZMQUdfT1VUX0RBVEE7CiAKIAkJaWYgKHJlcV90YXNrLT5vdXRfZmxhZ3MuYi5uc2VjdG9yX2hvYikKLQkJCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9IT0JfTlNFQ1Q7CisJCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9IT0JfTlNFQ1Q7CiAJCWlmIChyZXFfdGFzay0+b3V0X2ZsYWdzLmIuc2VjdG9yX2hvYikKLQkJCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9IT0JfTEJBTDsKKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0hPQl9MQkFMOwogCQlpZiAocmVxX3Rhc2stPm91dF9mbGFncy5iLmxjeWxfaG9iKQotCQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0hPQl9MQkFNOworCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfSE9CX0xCQU07CiAJCWlmIChyZXFfdGFzay0+b3V0X2ZsYWdzLmIuaGN5bF9ob2IpCi0JCQlhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfSE9CX0xCQUg7CisJCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9IT0JfTEJBSDsKIAogCQlpZiAocmVxX3Rhc2stPm91dF9mbGFncy5iLmVycm9yX2ZlYXR1cmUpCi0JCQlhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfRkVBVFVSRTsKKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0ZFQVRVUkU7CiAJCWlmIChyZXFfdGFzay0+b3V0X2ZsYWdzLmIubnNlY3RvcikKLQkJCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9OU0VDVDsKKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX05TRUNUOwogCQlpZiAocmVxX3Rhc2stPm91dF9mbGFncy5iLnNlY3RvcikKLQkJCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9MQkFMOworCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfTEJBTDsKIAkJaWYgKHJlcV90YXNrLT5vdXRfZmxhZ3MuYi5sY3lsKQotCQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0xCQU07CisJCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9MQkFNOwogCQlpZiAocmVxX3Rhc2stPm91dF9mbGFncy5iLmhjeWwpCi0JCQlhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfTEJBSDsKKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0xCQUg7CiAJfSBlbHNlIHsKLQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX1RGOwotCQlpZiAoYXJncy50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkKLQkJCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9IT0I7CisJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX1RGOworCQlpZiAoY21kLnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KQorCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfSE9COwogCX0KIAogCWlmIChyZXFfdGFzay0+aW5fZmxhZ3MuYi5kYXRhKQotCQlhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19JTl9EQVRBOworCQljbWQuZnRmX2ZsYWdzIHw9IElERV9GVEZMQUdfSU5fREFUQTsKIAotCXN3aXRjaChyZXFfdGFzay0+ZGF0YV9waGFzZSkgeworCWlmIChyZXFfdGFzay0+cmVxX2NtZCA9PSBJREVfRFJJVkVfVEFTS19SQVdfV1JJVEUpIHsKKwkJLyogZml4dXAgZGF0YSBwaGFzZSBpZiBuZWVkZWQgKi8KKwkJaWYgKHJlcV90YXNrLT5kYXRhX3BoYXNlID09IFRBU0tGSUxFX0lOX0RNQVEgfHwKKwkJICAgIHJlcV90YXNrLT5kYXRhX3BoYXNlID09IFRBU0tGSUxFX0lOX0RNQSkKKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfV1JJVEU7CisJfQorCisJY21kLnByb3RvY29sID0gQVRBX1BST1RfRE1BOworCisJc3dpdGNoIChyZXFfdGFzay0+ZGF0YV9waGFzZSkgewogCQljYXNlIFRBU0tGSUxFX01VTFRJX09VVDoKIAkJCWlmICghZHJpdmUtPm11bHRfY291bnQpIHsKIAkJCQkvKiAoaHMpOiBnaXZlIHVwIGlmIG11bHRjb3VudCBpcyBub3Qgc2V0ICovCkBAIC01OTIsMTEgKzU0OSwxNCBAQAogCQkJCWVyciA9IC1FUEVSTTsKIAkJCQlnb3RvIGFib3J0OwogCQkJfQorCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19NVUxUSV9QSU87CiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSBUQVNLRklMRV9PVVQ6CisJCQljbWQucHJvdG9jb2wgPSBBVEFfUFJPVF9QSU87CiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSBUQVNLRklMRV9PVVRfRE1BUToKIAkJY2FzZSBUQVNLRklMRV9PVVRfRE1BOgorCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19XUklURTsKIAkJCW5zZWN0ID0gdGFza291dCAvIFNFQ1RPUl9TSVpFOwogCQkJZGF0YV9idWYgPSBvdXRidWY7CiAJCQlicmVhazsKQEAgLTYwOSw4ICs1NjksMTAgQEAKIAkJCQllcnIgPSAtRVBFUk07CiAJCQkJZ290byBhYm9ydDsKIAkJCX0KKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfTVVMVElfUElPOwogCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCWNhc2UgVEFTS0ZJTEVfSU46CisJCQljbWQucHJvdG9jb2wgPSBBVEFfUFJPVF9QSU87CiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSBUQVNLRklMRV9JTl9ETUFROgogCQljYXNlIFRBU0tGSUxFX0lOX0RNQToKQEAgLTYxOCw2ICs1ODAsNyBAQAogCQkJZGF0YV9idWYgPSBpbmJ1ZjsKIAkJCWJyZWFrOwogCQljYXNlIFRBU0tGSUxFX05PX0RBVEE6CisJCQljbWQucHJvdG9jb2wgPSBBVEFfUFJPVF9OT0RBVEE7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVyciA9IC1FRkFVTFQ7CkBAIC02MjcsNyArNTkwLDcgQEAKIAlpZiAocmVxX3Rhc2stPnJlcV9jbWQgPT0gSURFX0RSSVZFX1RBU0tfTk9fREFUQSkKIAkJbnNlY3QgPSAwOwogCWVsc2UgaWYgKCFuc2VjdCkgewotCQluc2VjdCA9IChhcmdzLnRmLmhvYl9uc2VjdCA8PCA4KSB8IGFyZ3MudGYubnNlY3Q7CisJCW5zZWN0ID0gKGNtZC50Zi5ob2JfbnNlY3QgPDwgOCkgfCBjbWQudGYubnNlY3Q7CiAKIAkJaWYgKCFuc2VjdCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW4vb3V0IGNvbW1hbmQgd2l0aG91dCBkYXRhXG4iLApAQCAtNjM3LDE1ICs2MDAsMTQgQEAKIAkJfQogCX0KIAotCWlmIChyZXFfdGFzay0+cmVxX2NtZCA9PSBJREVfRFJJVkVfVEFTS19SQVdfV1JJVEUpCi0JCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX1dSSVRFOworCWVyciA9IGlkZV9yYXdfdGFza2ZpbGUoZHJpdmUsICZjbWQsIGRhdGFfYnVmLCBuc2VjdCk7CiAKLQllcnIgPSBpZGVfcmF3X3Rhc2tmaWxlKGRyaXZlLCAmYXJncywgZGF0YV9idWYsIG5zZWN0KTsKKwltZW1jcHkocmVxX3Rhc2stPmhvYl9wb3J0cywgJmNtZC50Zl9hcnJheVswXSwKKwkgICAgICAgSERJT19EUklWRV9IT0JfSERSX1NJWkUgLSAyKTsKKwltZW1jcHkocmVxX3Rhc2stPmlvX3BvcnRzLCAmY21kLnRmX2FycmF5WzZdLAorCSAgICAgICBIRElPX0RSSVZFX1RBU0tfSERSX1NJWkUpOwogCi0JbWVtY3B5KHJlcV90YXNrLT5ob2JfcG9ydHMsICZhcmdzLnRmX2FycmF5WzBdLCBIRElPX0RSSVZFX0hPQl9IRFJfU0laRSAtIDIpOwotCW1lbWNweShyZXFfdGFzay0+aW9fcG9ydHMsICZhcmdzLnRmX2FycmF5WzZdLCBIRElPX0RSSVZFX1RBU0tfSERSX1NJWkUpOwotCi0JaWYgKChhcmdzLnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZMQUdHRURfU0VUX0lOX0ZMQUdTKSAmJgorCWlmICgoY21kLmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfU0VUX0lOX0ZMQUdTKSAmJgogCSAgICByZXFfdGFzay0+aW5fZmxhZ3MuYWxsID09IDApIHsKIAkJcmVxX3Rhc2stPmluX2ZsYWdzLmFsbCA9IElERV9UQVNLRklMRV9TVERfSU5fRkxBR1M7CiAJCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlX2FybS5jIGIvZHJpdmVycy9pZGUvaWRlX2FybS5jCmluZGV4IGJkY2FjOTQuLmNmNjM4NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZV9hcm0uYworKysgYi9kcml2ZXJzL2lkZS9pZGVfYXJtLmMKQEAgLTE4LDYgKzE4LDEwIEBACiAjZGVmaW5lIElERV9BUk1fSU8JMHgxZjAKICNkZWZpbmUgSURFX0FSTV9JUlEJSVJRX0hBUkRESVNLCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBpZGVfYXJtX3BvcnRfaW5mbyA9IHsKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTk9fRE1BLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgaWRlX2FybV9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBiYXNlID0gSURFX0FSTV9JTywgY3RsID0gSURFX0FSTV9JTyArIDB4MjA2OwpAQCAtNDEsNyArNDUsNyBAQAogCWh3LmlycSA9IElERV9BUk1fSVJROwogCWh3LmNoaXBzZXQgPSBpZGVfZ2VuZXJpYzsKIAotCXJldHVybiBpZGVfaG9zdF9hZGQoTlVMTCwgaHdzLCBOVUxMKTsKKwlyZXR1cm4gaWRlX2hvc3RfYWRkKCZpZGVfYXJtX3BvcnRfaW5mbywgaHdzLCBOVUxMKTsKIH0KIAogbW9kdWxlX2luaXQoaWRlX2FybV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2l0ODIxeC5jIGIvZHJpdmVycy9pZGUvaXQ4MjF4LmMKaW5kZXggNmI5ZmM5NS4uMGQ0YWM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaXQ4MjF4LmMKKysrIGIvZHJpdmVycy9pZGUvaXQ4MjF4LmMKQEAgLTUwOCwxMCArNTA4LDEwIEBACiBzdGF0aWMgc3RydWN0IGlkZV9kbWFfb3BzIGl0ODIxeF9wYXNzX3Rocm91Z2hfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGl0ODIxeF9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gaXQ4MjF4X2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBpZGVfZG1hX3Rlc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9tYWNpZGUuYyBiL2RyaXZlcnMvaWRlL21hY2lkZS5jCmluZGV4IDNjNjAwNjQuLjRiMTcxOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL21hY2lkZS5jCisrKyBiL2RyaXZlcnMvaWRlL21hY2lkZS5jCkBAIC04MCw2ICs4MCwxMSBAQAogCWh3LT5jaGlwc2V0ID0gaWRlX2dlbmVyaWM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBtYWNpZGVfcG9ydF9pbmZvID0geworCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19NTUlPIHwgSURFX0hGTEFHX05PX0RNQSwKKwkuaXJxX2ZsYWdzCQk9IElSUUZfU0hBUkVELAorfTsKKwogc3RhdGljIGNvbnN0IGNoYXIgKm1hY19pZGVfbmFtZVtdID0KIAl7ICJRdWFkcmEiLCAiUG93ZXJib29rIiwgIlBvd2VyYm9vayBCYWJvb24iIH07CiAKQEAgLTEyMiw3ICsxMjcsNyBAQAogCiAJbWFjaWRlX3NldHVwX3BvcnRzKCZodywgYmFzZSwgaXJxLCBhY2tfaW50cik7CiAKLQlyZXR1cm4gaWRlX2hvc3RfYWRkKE5VTEwsIGh3cywgTlVMTCk7CisJcmV0dXJuIGlkZV9ob3N0X2FkZCgmbWFjaWRlX3BvcnRfaW5mbywgaHdzLCBOVUxMKTsKIH0KIAogbW9kdWxlX2luaXQobWFjaWRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbnM4NzQxNS5jIGIvZHJpdmVycy9pZGUvbnM4NzQxNS5jCmluZGV4IGVhNDhhM2UuLjdiNjVmZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL25zODc0MTUuYworKysgYi9kcml2ZXJzL2lkZS9uczg3NDE1LmMKQEAgLTYxLDEyICs2MSwxMiBAQAogCXJldHVybiBzdXBlcmlvX2lkZV9pbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7CiB9CiAKLXN0YXRpYyB2b2lkIHN1cGVyaW9fdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCitzdGF0aWMgdm9pZCBzdXBlcmlvX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmRyaXZlLT5od2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RBVEEpIHsKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0lOX0RBVEEpIHsKIAkJdTE2IGRhdGEgPSBpbncoaW9fcG9ydHMtPmRhdGFfYWRkcik7CiAKIAkJdGYtPmRhdGEgPSBkYXRhICYgMHhmZjsKQEAgLTc2LDMxICs3NiwzMSBAQAogCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KIAlvdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQogCQl0Zi0+ZmVhdHVyZSA9IGluYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCiAJCXRmLT5uc2VjdCAgPSBpbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCiAJCXRmLT5sYmFsICAgPSBpbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKIAkJdGYtPmxiYW0gICA9IGluYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQogCQl0Zi0+bGJhaCAgID0gaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQogCQl0Zi0+ZGV2aWNlID0gc3VwZXJpb19pZGVfaW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgewogCQlvdXRiKEFUQV9ERVZDVExfT0JTIHwgMHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQogCQkJdGYtPmhvYl9mZWF0dXJlID0gaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCiAJCQl0Zi0+aG9iX25zZWN0ICAgPSBpbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQogCQkJdGYtPmhvYl9sYmFsICAgID0gaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQogCQkJdGYtPmhvYl9sYmFtICAgID0gaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQogCQkJdGYtPmhvYl9sYmFoICAgID0gaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCX0KIH0KQEAgLTIxNiwxMSArMjE2LDExIEBACiAJcmV0dXJuIChkbWFfc3RhdCAmIDcpICE9IDQ7CiB9CiAKLXN0YXRpYyBpbnQgbnM4NzQxNV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIGludCBuczg3NDE1X2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJLyogc2VsZWN0IERNQSB4ZmVyICovCiAJbnM4NzQxNV9wcmVwYXJlX2RyaXZlKGRyaXZlLCAxKTsKLQlpZiAoIWlkZV9kbWFfc2V0dXAoZHJpdmUpKQorCWlmIChpZGVfZG1hX3NldHVwKGRyaXZlLCBjbWQpID09IDApCiAJCXJldHVybiAwOwogCS8qIERNQSBmYWlsZWQ6IHNlbGVjdCBQSU8geGZlciAqLwogCW5zODc0MTVfcHJlcGFyZV9kcml2ZShkcml2ZSwgMCk7CkBAIC0zMDEsMTEgKzMwMSwxMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBuczg3NDE1X2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gbnM4NzQxNV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBuczg3NDE1X2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBpZGVfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gc3VwZXJpb19kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BhbG1fYmszNzEwLmMgYi9kcml2ZXJzL2lkZS9wYWxtX2JrMzcxMC5jCmluZGV4IGYzOGFhYzcuLmM3YWNjYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BhbG1fYmszNzEwLmMKKysrIGIvZHJpdmVycy9pZGUvcGFsbV9iazM3MTAuYwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAJc3RydWN0IGNsayAqY2xrOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtLCAqaXJxOwogCXZvaWQgX19pb21lbSAqYmFzZTsKLQl1bnNpZ25lZCBsb25nIHJhdGU7CisJdW5zaWduZWQgbG9uZyByYXRlLCBtZW1fc2l6ZTsKIAlpbnQgaSwgcmM7CiAJaHdfcmVnc190IGh3LCAqaHdzW10gPSB7ICZodywgTlVMTCwgTlVMTCwgTlVMTCB9OwogCkBAIC0zNzQsMTMgKzM3NCwxOCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIG1lbS0+ZW5kIC0gbWVtLT5zdGFydCArIDEsCi0JCQkgICAgICAgInBhbG1fYmszNzEwIikgPT0gTlVMTCkgeworCW1lbV9zaXplID0gbWVtLT5lbmQgLSBtZW0tPnN0YXJ0ICsgMTsKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIG1lbV9zaXplLCAicGFsbV9iazM3MTAiKSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlcXVlc3QgbWVtb3J5IHJlZ2lvblxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JYmFzZSA9IElPX0FERFJFU1MobWVtLT5zdGFydCk7CisJYmFzZSA9IGlvcmVtYXAobWVtLT5zdGFydCwgbWVtX3NpemUpOworCWlmICghYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBtYXAgSU8gbWVtb3J5XG4iKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIG1lbV9zaXplKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJLyogQ29uZmlndXJlIHRoZSBQYWxtIENoaXAgY29udHJvbGxlciAqLwogCXBhbG1fYmszNzEwX2NoaXBpbml0KGJhc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGRjMjAyeHhfb2xkLmMgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYwppbmRleCBjYmE2NmViLi5mNzUzNmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYworKysgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYwpAQCAtMzMxLDExICszMzEsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgcGRjMjAyNDZfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gaWRlX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBwZGMyMDJ4eF9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBwZGMyMDJ4eF9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IHBkYzIwMnh4X2RtYV90aW1lb3V0LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwpAQCAtMzQzLDExICszNDMsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgcGRjMjAyNnhfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IHBkYzIwMnh4X2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBwZGMyMDJ4eF9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gcGRjMjAyeHhfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gcGRjMjAyeHhfZG1hX2xvc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBwZGMyMDJ4eF9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BtYWMuYyBiL2RyaXZlcnMvaWRlL3BtYWMuYwppbmRleCA3NDYyNWU4Li4yYmZjZmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wbWFjLmMKKysrIGIvZHJpdmVycy9pZGUvcG1hYy5jCkBAIC00MDQsNyArNDA0LDYgQEAKICNkZWZpbmUgSURFX1dBS0VVUF9ERUxBWQkoMSpIWikKIAogc3RhdGljIGludCBwbWFjX2lkZV9pbml0X2RtYShpZGVfaHdpZl90ICosIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICopOwotc3RhdGljIGludCBwbWFjX2lkZV9idWlsZF9kbWF0YWJsZShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSk7CiBzdGF0aWMgdm9pZCBwbWFjX2lkZV9zZWxlY3Rwcm9jKGlkZV9kcml2ZV90ICpkcml2ZSk7CiBzdGF0aWMgdm9pZCBwbWFjX2lkZV9rYXVhaV9zZWxlY3Rwcm9jKGlkZV9kcml2ZV90ICpkcml2ZSk7CiAKQEAgLTE0MjIsMTcgKzE0MjEsMTYgQEAKICAqIHBtYWNfaWRlX2J1aWxkX2RtYXRhYmxlIGJ1aWxkcyB0aGUgREJETUEgY29tbWFuZCBsaXN0CiAgKiBmb3IgYSB0cmFuc2ZlciBhbmQgc2V0cyB0aGUgREJETUEgY2hhbm5lbCB0byBwb2ludCB0byBpdC4KICAqLwotc3RhdGljIGludAotcG1hY19pZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCitzdGF0aWMgaW50IHBtYWNfaWRlX2J1aWxkX2RtYXRhYmxlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJcG1hY19pZGVfaHdpZl90ICpwbWlmID0KIAkJKHBtYWNfaWRlX2h3aWZfdCAqKWRldl9nZXRfZHJ2ZGF0YShod2lmLT5nZW5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgZGJkbWFfY21kICp0YWJsZTsKLQlpbnQgaSwgY291bnQgPSAwOwogCXZvbGF0aWxlIHN0cnVjdCBkYmRtYV9yZWdzIF9faW9tZW0gKmRtYSA9IHBtaWYtPmRtYV9yZWdzOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0JaW50IHdyID0gKHJxX2RhdGFfZGlyKHJxKSA9PSBXUklURSk7CisJaW50IHdyID0gISEoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSk7CisJaW50IGkgPSBjbWQtPnNnX25lbnRzLCBjb3VudCA9IDA7CiAKIAkvKiBETUEgdGFibGUgaXMgYWxyZWFkeSBhbGlnbmVkICovCiAJdGFibGUgPSAoc3RydWN0IGRiZG1hX2NtZCAqKSBwbWlmLT5kbWFfdGFibGVfY3B1OwpAQCAtMTQ0MiwxMSArMTQ0MCw2IEBACiAJd2hpbGUgKHJlYWRsKCZkbWEtPnN0YXR1cykgJiBSVU4pCiAJCXVkZWxheSgxKTsKIAotCWh3aWYtPnNnX25lbnRzID0gaSA9IGlkZV9idWlsZF9zZ2xpc3QoZHJpdmUsIHJxKTsKLQotCWlmICghaSkKLQkJcmV0dXJuIDA7Ci0KIAkvKiBCdWlsZCBEQkRNQSBjb21tYW5kcyBsaXN0ICovCiAJc2cgPSBod2lmLT5zZ190YWJsZTsKIAl3aGlsZSAoaSAmJiBzZ19kbWFfbGVuKHNnKSkgewpAQCAtMTUwOSwyMyArMTUwMiwyMiBAQAogICogUHJlcGFyZSBhIERNQSB0cmFuc2Zlci4gV2UgYnVpbGQgdGhlIERNQSB0YWJsZSwgYWRqdXN0IHRoZSB0aW1pbmdzIGZvcgogICogYSByZWFkIG9uIEtleUxhcmdvIEFUQS82NiBhbmQgbWFyayB1cyBhcyB3YWl0aW5nIGZvciBETUEgY29tcGxldGlvbgogICovCi1zdGF0aWMgaW50Ci1wbWFjX2lkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIGludCBwbWFjX2lkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlwbWFjX2lkZV9od2lmX3QgKnBtaWYgPQogCQkocG1hY19pZGVfaHdpZl90ICopZGV2X2dldF9kcnZkYXRhKGh3aWYtPmdlbmRldi5wYXJlbnQpOwotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGh3aWYtPnJxOwogCXU4IHVuaXQgPSBkcml2ZS0+ZG4gJiAxLCBhdGE0ID0gKHBtaWYtPmtpbmQgPT0gY29udHJvbGxlcl9rbF9hdGE0KTsKKwl1OCB3cml0ZSA9ICEhKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpOwogCi0JaWYgKCFwbWFjX2lkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgcnEpKSB7Ci0JCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKKwlpZiAocG1hY19pZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUsIGNtZCkgPT0gMCkgeworCQlpZGVfbWFwX3NnKGRyaXZlLCBjbWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAkvKiBBcHBsZSBhZGRzIDYwbnMgdG8gd3JEYXRhU2V0dXAgb24gcmVhZHMgKi8KIAlpZiAoYXRhNCAmJiAocG1pZi0+dGltaW5nc1t1bml0XSAmIFRSXzY2X1VETUFfRU4pKSB7Ci0JCXdyaXRlbChwbWlmLT50aW1pbmdzW3VuaXRdICsgKCFycV9kYXRhX2RpcihycSkgPyAweDAwODAwMDAwVUwgOiAwKSwKKwkJd3JpdGVsKHBtaWYtPnRpbWluZ3NbdW5pdF0gKyAod3JpdGUgPyAwIDogMHgwMDgwMDAwMFVMKSwKIAkJCVBNQUNfSURFX1JFRyhJREVfVElNSU5HX0NPTkZJRykpOwogCQkodm9pZClyZWFkbChQTUFDX0lERV9SRUcoSURFX1RJTUlOR19DT05GSUcpKTsKIAl9CkBAIC0xNTM1LDEzICsxNTI3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKLXBtYWNfaWRlX2RtYV9leGVjX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNvbW1hbmQpCi17Ci0JLyogaXNzdWUgY21kIHRvIGRyaXZlICovCi0JaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgY29tbWFuZCwgJmlkZV9kbWFfaW50ciwgMipXQUlUX0NNRCwgTlVMTCk7Ci19Ci0KIC8qCiAgKiBLaWNrIHRoZSBETUEgY29udHJvbGxlciBpbnRvIGxpZmUgYWZ0ZXIgdGhlIERNQSBjb21tYW5kIGhhcyBiZWVuIGlzc3VlZAogICogdG8gdGhlIGRyaXZlLgpAQCAtMTY2Miw3ICsxNjQ3LDYgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgcG1hY19kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gcG1hY19pZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gcG1hY19pZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gcG1hY19pZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gcG1hY19pZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IHBtYWNfaWRlX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBwbWFjX2lkZV9kbWFfdGVzdF9pcnEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9xNDBpZGUuYyBiL2RyaXZlcnMvaWRlL3E0MGlkZS5jCmluZGV4IDlmOWMwYjMuLjJhNDNhMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3E0MGlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL3E0MGlkZS5jCkBAIC03MiwyNiArNzIsMjYgQEAKIAlody0+Y2hpcHNldCA9IGlkZV9nZW5lcmljOwogfQogCi1zdGF0aWMgdm9pZCBxNDBpZGVfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKK3N0YXRpYyB2b2lkIHE0MGlkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKIAkJCSAgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciA9IGRyaXZlLT5od2lmLT5pb19wb3J0cy5kYXRhX2FkZHI7CiAKLQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrICYmIHJxICYmIHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9GUykKKwlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrICYmIGNtZCAmJiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19GUykpCiAJCXJldHVybiBpbnN3KGRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKIAotCWluc3dfc3dhcHcoZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOworCXJhd19pbnN3X3N3YXB3KCh1MTYgKilkYXRhX2FkZHIsIGJ1ZiwgKGxlbiArIDEpIC8gMik7CiB9CiAKLXN0YXRpYyB2b2lkIHE0MGlkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKK3N0YXRpYyB2b2lkIHE0MGlkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkgICAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyID0gZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcjsKIAotCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2sgJiYgcnEgJiYgcnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKQorCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2sgJiYgY21kICYmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZTKSkKIAkJcmV0dXJuIG91dHN3KGRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKIAotCW91dHN3X3N3YXB3KGRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKKwlyYXdfb3V0c3dfc3dhcHcoKHUxNiAqKWRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKIH0KIAogLyogUTQwIGhhcyBhIGJ5dGUtc3dhcHBlZCBJREUgaW50ZXJmYWNlICovCkBAIC0xMTEsNyArMTExLDggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIHE0MGlkZV9wb3J0X2luZm8gPSB7CiAJLnRwX29wcwkJCT0gJnE0MGlkZV90cF9vcHMsCi0JLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX05PX0RNQSwKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTU1JTyB8IElERV9IRkxBR19OT19ETUEsCisJLmlycV9mbGFncwkJPSBJUlFGX1NIQVJFRCwKIH07CiAKIC8qIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2MxMjAwLmMgYi9kcml2ZXJzL2lkZS9zYzEyMDAuYwppbmRleCBkYmRkMjk4Li4xYzNhODI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zYzEyMDAuYworKysgYi9kcml2ZXJzL2lkZS9zYzEyMDAuYwpAQCAtMjg2LDExICsyODYsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgc2MxMjAwX2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IHNjMTIwMF9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NjY19wYXRhLmMgYi9kcml2ZXJzL2lkZS9zY2NfcGF0YS5jCmluZGV4IDhkMjMxNGIuLjBjYzEzN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NjY19wYXRhLmMKKysrIGIvZHJpdmVycy9pZGUvc2NjX3BhdGEuYwpAQCAtMzAzLDggKzMwMyw5IEBACiB9CiAKIC8qKgotICoJc2NjX2lkZV9kbWFfc2V0dXAJLQliZWdpbiBhIERNQSBwaGFzZQorICoJc2NjX2RtYV9zZXR1cAktCWJlZ2luIGEgRE1BIHBoYXNlCiAgKglAZHJpdmU6IHRhcmdldCBkZXZpY2UKKyAqCUBjbWQ6IGNvbW1hbmQKICAqCiAgKglCdWlsZCBhbiBJREUgRE1BIFBSRCAoSURFIHNwZWFrIGZvciBzY2F0dGVyIGdhdGhlciB0YWJsZSkKICAqCWFuZCB0aGVuIHNldCB1cCB0aGUgRE1BIHRyYW5zZmVyIHJlZ2lzdGVycy4KQEAgLTMxMywyMSArMzE0LDE1IEBACiAgKglpcyByZXR1cm5lZC4KICAqLwogCi1zdGF0aWMgaW50IHNjY19kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIGludCBzY2NfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7Ci0JdW5zaWduZWQgaW50IHJlYWRpbmc7CisJdTMyIHJ3ID0gKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpID8gMCA6IEFUQV9ETUFfV1I7CiAJdTggZG1hX3N0YXQ7CiAKLQlpZiAocnFfZGF0YV9kaXIocnEpKQotCQlyZWFkaW5nID0gMDsKLQllbHNlCi0JCXJlYWRpbmcgPSAxIDw8IDM7Ci0KIAkvKiBmYWxsIGJhY2sgdG8gcGlvISAqLwotCWlmICghaWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBycSkpIHsKLQkJaWRlX21hcF9zZyhkcml2ZSwgcnEpOworCWlmIChpZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUsIGNtZCkgPT0gMCkgeworCQlpZGVfbWFwX3NnKGRyaXZlLCBjbWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTMzNSw3ICszMzAsNyBAQAogCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyA4KSwgaHdpZi0+ZG1hdGFibGVfZG1hKTsKIAogCS8qIHNwZWNpZnkgci93ICovCi0Jb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmRtYV9iYXNlLCByZWFkaW5nKTsKKwlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopaHdpZi0+ZG1hX2Jhc2UsIHJ3KTsKIAogCS8qIHJlYWQgRE1BIHN0YXR1cyBmb3IgSU5UUiAmIEVSUk9SIGZsYWdzICovCiAJZG1hX3N0YXQgPSBzY2NfZG1hX3NmZl9yZWFkX3N0YXR1cyhod2lmKTsKQEAgLTY2Niw1MiArNjYxLDUyIEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBzY2NfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCitzdGF0aWMgdm9pZCBzY2NfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmZHJpdmUtPmh3aWYtPmlvX3BvcnRzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOwotCXU4IEhJSEkgPSAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMHhFMCA6IDB4RUY7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLT50ZjsKKwl1OCBISUhJID0gKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMHhFMCA6IDB4RUY7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0ZMQUdHRUQpCiAJCUhJSEkgPSAweEZGOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9EQVRBKQorCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfT1VUX0RBVEEpCiAJCW91dF9iZTMyKCh2b2lkICopaW9fcG9ydHMtPmRhdGFfYWRkciwKIAkJCSAodGYtPmhvYl9kYXRhIDw8IDgpIHwgdGYtPmRhdGEpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCiAJCXNjY19pZGVfb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCiAJCXNjY19pZGVfb3V0Yih0Zi0+aG9iX25zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUwpCiAJCXNjY19pZGVfb3V0Yih0Zi0+aG9iX2xiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQogCQlzY2NfaWRlX291dGIodGYtPmhvYl9sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKIAkJc2NjX2lkZV9vdXRiKHRmLT5ob2JfbGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCiAJCXNjY19pZGVfb3V0Yih0Zi0+ZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCiAJCXNjY19pZGVfb3V0Yih0Zi0+bnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCiAJCXNjY19pZGVfb3V0Yih0Zi0+bGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQogCQlzY2NfaWRlX291dGIodGYtPmxiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKIAkJc2NjX2lkZV9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCiAJCXNjY19pZGVfb3V0YigodGYtPmRldmljZSAmIEhJSEkpIHwgZHJpdmUtPnNlbGVjdCwKIAkJCSAgICAgaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKIH0KIAotc3RhdGljIHZvaWQgc2NjX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgc2NjX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmRyaXZlLT5od2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RBVEEpIHsKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0lOX0RBVEEpIHsKIAkJdTE2IGRhdGEgPSAodTE2KWluX2JlMzIoKHZvaWQgKilpb19wb3J0cy0+ZGF0YV9hZGRyKTsKIAogCQl0Zi0+ZGF0YSA9IGRhdGEgJiAweGZmOwpAQCAtNzIxLDM2ICs3MTYsMzYgQEAKIAkvKiBiZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGxvdyBvcmRlciBiaXRzICovCiAJc2NjX2lkZV9vdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQogCQl0Zi0+ZmVhdHVyZSA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKIAkJdGYtPm5zZWN0ICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQogCQl0Zi0+bGJhbCAgID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKIAkJdGYtPmxiYW0gICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCiAJCXRmLT5sYmFoICAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKIAkJdGYtPmRldmljZSA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgewogCQlzY2NfaWRlX291dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCiAJCQl0Zi0+aG9iX2ZlYXR1cmUgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQogCQkJdGYtPmhvYl9uc2VjdCAgID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQogCQkJdGYtPmhvYl9sYmFsICAgID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCiAJCQl0Zi0+aG9iX2xiYW0gICAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKIAkJCXRmLT5ob2JfbGJhaCAgICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgc2NjX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCitzdGF0aWMgdm9pZCBzY2NfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyOwpAQCAtNzY2LDcgKzc2MSw3IEBACiAJCXNjY19pZGVfaW5zdyhkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7CiB9CiAKLXN0YXRpYyB2b2lkIHNjY19vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsICBzdHJ1Y3QgcmVxdWVzdCAqcnEsCitzdGF0aWMgdm9pZCBzY2Nfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCAgc3RydWN0IGlkZV9jbWQgKmNtZCwKIAkJCSAgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyOwpAQCAtODczLDMwICs4NjgsMjYgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgc2NjX2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBzY2NfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gc2NjX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBzY2NfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IHNjY19kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gc2NjX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IHNjY19kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKIAotI2RlZmluZSBERUNMQVJFX1NDQ19ERVYobmFtZV9zdHIpCQkJXAotICB7CQkJCQkJCVwKLSAgICAgIC5uYW1lCQk9IG5hbWVfc3RyLAkJCVwKLSAgICAgIC5pbml0X2lvcHMJPSBpbml0X2lvcHNfc2NjLAkJXAotICAgICAgLmluaXRfZG1hCQk9IHNjY19pbml0X2RtYSwJCQlcCi0gICAgICAuaW5pdF9od2lmCT0gaW5pdF9od2lmX3NjYywJCVwKLSAgICAgIC50cF9vcHMJCT0gJnNjY190cF9vcHMsCQlcCi0gICAgICAucG9ydF9vcHMJCT0gJnNjY19wb3J0X29wcywJCVwKLSAgICAgIC5kbWFfb3BzCQk9ICZzY2NfZG1hX29wcywJCQlcCi0gICAgICAuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUsCQlcCi0gICAgICAucGlvX21hc2sJCT0gQVRBX1BJTzQsCQkJXAotICB9Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBzY2NfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0gewotCS8qIDAgKi8gREVDTEFSRV9TQ0NfREVWKCJzY2NJREUiKSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBzY2NfY2hpcHNldCBfX2RldmluaXRkYXRhID0geworCS5uYW1lCQk9ICJzY2NJREUiLAorCS5pbml0X2lvcHMJPSBpbml0X2lvcHNfc2NjLAorCS5pbml0X2RtYQk9IHNjY19pbml0X2RtYSwKKwkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3NjYywKKwkudHBfb3BzCQk9ICZzY2NfdHBfb3BzLAorCS5wb3J0X29wcwk9ICZzY2NfcG9ydF9vcHMsCisJLmRtYV9vcHMJPSAmc2NjX2RtYV9vcHMsCisJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfU0lOR0xFLAorCS5pcnFfZmxhZ3MJPSBJUlFGX1NIQVJFRCwKKwkucGlvX21hc2sJPSBBVEFfUElPNCwKIH07CiAKIC8qKgpAQCAtOTEwLDcgKzkwMSw3IEBACiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNjY19pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7Ci0JcmV0dXJuIGluaXRfc2V0dXBfc2NjKGRldiwgJnNjY19jaGlwc2V0c1tpZC0+ZHJpdmVyX2RhdGFdKTsKKwlyZXR1cm4gaW5pdF9zZXR1cF9zY2MoZGV2LCAmc2NjX2NoaXBzZXQpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKaW5kZXggMjRiYzg4NC4uYTE5ZGJjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKKysrIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKQEAgLTU1OCw2ICs1NTgsOCBAQAogCiAJaG9zdC0+aG9zdF9wcml2ID0gcHJpdjsKIAorCWhvc3QtPmlycV9mbGFncyA9IElSUUZfU0hBUkVEOworCiAJcGNpX3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CiAKIAlyZXQgPSBkb19pZGVfc2V0dXBfcGNpX2RldmljZShkZXYsIGQsIDEpOwpAQCAtNjA2LDYgKzYwOCw4IEBACiAKIAlob3N0LT5ob3N0X3ByaXYgPSBwcml2OwogCisJaG9zdC0+aXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQ7CisKIAlwY2lfc2V0X2RydmRhdGEocGRldlswXSwgaG9zdCk7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXZbMV0sIGhvc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zZ2lpb2M0LmMgYi9kcml2ZXJzL2lkZS9zZ2lpb2M0LmMKaW5kZXggZmRiOWQ3MC4uYjEyZGU4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2dpaW9jNC5jCisrKyBiL2RyaXZlcnMvaWRlL3NnaWlvYzQuYwpAQCAtNDI0LDIwICs0MjQsMTMgQEAKIC8qIHwgVXBwZXIgMzIgYml0cyAtIFplcm8JICAgIHxFT0x8IDE1IHVudXNlZCAgICAgfCAxNiBCaXQgTGVuZ3RofCAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBDcmVhdGVzIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0LCBETUEgVGFibGUgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLXNnaWlvYzRfYnVpbGRfZG1hX3RhYmxlKGlkZV9kcml2ZV90ICogZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IGRkaXIpCitzdGF0aWMgaW50IHNnaWlvYzRfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1bnNpZ25lZCBpbnQgKnRhYmxlID0gaHdpZi0+ZG1hdGFibGVfY3B1OwotCXVuc2lnbmVkIGludCBjb3VudCA9IDAsIGkgPSAxOwotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMCwgaSA9IGNtZC0+c2dfbmVudHM7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IGh3aWYtPnNnX3RhYmxlOwogCi0JaHdpZi0+c2dfbmVudHMgPSBpID0gaWRlX2J1aWxkX3NnbGlzdChkcml2ZSwgcnEpOwotCi0JaWYgKCFpKQotCQlyZXR1cm4gMDsJLyogc2dsaXN0IG9mIGxlbmd0aCBaZXJvICovCi0KLQlzZyA9IGh3aWYtPnNnX3RhYmxlOwogCXdoaWxlIChpICYmIHNnX2RtYV9sZW4oc2cpKSB7CiAJCWRtYV9hZGRyX3QgY3VyX2FkZHI7CiAJCWludCBjdXJfbGVuOwpAQCAtNDkwLDI0ICs0ODMsMTggQEAKIAlyZXR1cm4gMDsJCS8qIHJldmVydCB0byBQSU8gZm9yIHRoaXMgcmVxdWVzdCAqLwogfQogCi1zdGF0aWMgaW50IHNnaWlvYzRfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyBpbnQgc2dpaW9jNF9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGRyaXZlLT5od2lmLT5ycTsKLQl1bnNpZ25lZCBpbnQgY291bnQgPSAwOwogCWludCBkZGlyOworCXU4IHdyaXRlID0gISEoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSk7CiAKLQlpZiAocnFfZGF0YV9kaXIocnEpKQotCQlkZGlyID0gUENJX0RNQV9UT0RFVklDRTsKLQllbHNlCi0JCWRkaXIgPSBQQ0lfRE1BX0ZST01ERVZJQ0U7Ci0KLQlpZiAoIShjb3VudCA9IHNnaWlvYzRfYnVpbGRfZG1hX3RhYmxlKGRyaXZlLCBycSwgZGRpcikpKSB7CisJaWYgKHNnaWlvYzRfYnVpbGRfZG1hdGFibGUoZHJpdmUsIGNtZCkgPT0gMCkgewogCQkvKiB0cnkgUElPIGluc3RlYWQgb2YgRE1BICovCi0JCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKKwkJaWRlX21hcF9zZyhkcml2ZSwgY21kKTsKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKHJxX2RhdGFfZGlyKHJxKSkKKwlpZiAod3JpdGUpCiAJCS8qIFdyaXRlcyBUTyB0aGUgSU9DNCBGUk9NIE1haW4gTWVtb3J5ICovCiAJCWRkaXIgPSBJT0M0X0RNQV9SRUFEOwogCWVsc2UKQEAgLTU1Nyw2ICs1NDQsNyBAQAogCS5wb3J0X29wcwkJPSAmc2dpaW9jNF9wb3J0X29wcywKIAkuZG1hX29wcwkJPSAmc2dpaW9jNF9kbWFfb3BzLAogCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19NTUlPLAorCS5pcnFfZmxhZ3MJCT0gSVJRRl9TSEFSRUQsCiAJLm13ZG1hX21hc2sJCT0gQVRBX01XRE1BMl9PTkxZLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2lpbWFnZS5jIGIvZHJpdmVycy9pZGUvc2lpbWFnZS5jCmluZGV4IDE4MTFhZTkuLjA3NWNiMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NpaW1hZ2UuYworKysgYi9kcml2ZXJzL2lkZS9zaWltYWdlLmMKQEAgLTcxMSwxMCArNzExLDEwIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHNpbF9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IHNpaW1hZ2VfZG1hX3Rlc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zbDgyYzEwNS5jIGIvZHJpdmVycy9pZGUvc2w4MmMxMDUuYwppbmRleCBkYmEyMTNjLi5kMjUxMzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zbDgyYzEwNS5jCisrKyBiL2RyaXZlcnMvaWRlL3NsODJjMTA1LmMKQEAgLTI5MywxMSArMjkzLDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHNsODJjMTA1X2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBzbDgyYzEwNV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gc2w4MmMxMDVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBzbDgyYzEwNV9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IHNsODJjMTA1X2RtYV90aW1lb3V0LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvdGM4NmMwMDEuYyBiL2RyaXZlcnMvaWRlL3RjODZjMDAxLmMKaW5kZXggODQxMDlmNS4uNDI3ZDRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdGM4NmMwMDEuYworKysgYi9kcml2ZXJzL2lkZS90Yzg2YzAwMS5jCkBAIC0xODIsMTEgKzE4MiwxMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyB0Yzg2YzAwMV9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gdGM4NmMwMDFfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGlkZV9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3RybTI5MC5jIGIvZHJpdmVycy9pZGUvdHJtMjkwLmMKaW5kZXggMWMwOWU1NC4uZWQxNDk2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdHJtMjkwLmMKKysrIGIvZHJpdmVycy9pZGUvdHJtMjkwLmMKQEAgLTE3NiwxOCArMTc2LDEyIEBACiAJdHJtMjkwX3ByZXBhcmVfZHJpdmUoZHJpdmUsICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHRybTI5MF9kbWFfZXhlY19jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjb21tYW5kKQotewotCWlkZV9leGVjdXRlX2NvbW1hbmQoZHJpdmUsIGNvbW1hbmQsICZpZGVfZG1hX2ludHIsIFdBSVRfQ01ELCBOVUxMKTsKLX0KLQotc3RhdGljIGludCB0cm0yOTBfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyBpbnQgdHJtMjkwX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGh3aWYtPnJxOwogCXVuc2lnbmVkIGludCBjb3VudCwgcnc7CiAKLQlpZiAocnFfZGF0YV9kaXIocnEpKSB7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpIHsKICNpZmRlZiBUUk0yOTBfTk9fRE1BX1dSSVRFUwogCQkvKiBhbHdheXMgdXNlIFBJTyBmb3Igd3JpdGVzICovCiAJCXRybTI5MF9wcmVwYXJlX2RyaXZlKGRyaXZlLCAwKTsJLyogc2VsZWN0IFBJTyB4ZmVyICovCkBAIC0xOTcsNyArMTkxLDkgQEAKIAl9IGVsc2UKIAkJcncgPSAyOwogCi0JaWYgKCEoY291bnQgPSBpZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUsIHJxKSkpIHsKKwljb3VudCA9IGlkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgY21kKTsKKwlpZiAoY291bnQgPT0gMCkgeworCQlpZGVfbWFwX3NnKGRyaXZlLCBjbWQpOwogCQkvKiB0cnkgUElPIGluc3RlYWQgb2YgRE1BICovCiAJCXRybTI5MF9wcmVwYXJlX2RyaXZlKGRyaXZlLCAwKTsgLyogc2VsZWN0IFBJTyB4ZmVyICovCiAJCXJldHVybiAxOwpAQCAtMzE0LDcgKzMxMCw2IEBACiBzdGF0aWMgc3RydWN0IGlkZV9kbWFfb3BzIHRybTI5MF9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gdHJtMjkwX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwIAkJPSB0cm0yOTBfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gdHJtMjkwX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0IAkJPSB0cm0yOTBfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IHRybTI5MF9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gdHJtMjkwX2RtYV90ZXN0X2lycSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3R4NDkzOGlkZS5jIGIvZHJpdmVycy9pZGUvdHg0OTM4aWRlLmMKaW5kZXggZDkwOTUzNC4uNjU3YTYxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdHg0OTM4aWRlLmMKKysrIGIvZHJpdmVycy9pZGUvdHg0OTM4aWRlLmMKQEAgLTE1LDYgKzE1LDggQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9pZGUuaD4KICNpbmNsdWRlIDxhc20vdHh4OS90eDQ5MzguaD4KIAogc3RhdGljIHZvaWQgdHg0OTM4aWRlX3R1bmVfZWJ1c2ModW5zaWduZWQgaW50IGVidXNfY2gsCkBAIC04MCw1NyArODIsNTcgQEAKIAlfX3Jhd193cml0ZWIodmFsdWUsICh2b2lkIF9faW9tZW0gKilwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQgdHg0OTM4aWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgdHg0OTM4aWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKLQl1OCBISUhJID0gdGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDggPyAweEUwIDogMHhFRjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOworCXU4IEhJSEkgPSBjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4ID8gMHhFMCA6IDB4RUY7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0ZMQUdHRUQpCiAJCUhJSEkgPSAweEZGOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9EQVRBKSB7CisJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19PVVRfREFUQSkgewogCQl1MTYgZGF0YSA9ICh0Zi0+aG9iX2RhdGEgPDwgOCkgfCB0Zi0+ZGF0YTsKIAogCQkvKiBubyBlbmRpYW4gc3dhcCAqLwogCQlfX3Jhd193cml0ZXcoZGF0YSwgKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIpOwogCX0KIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQogCQl0eDQ5MzhpZGVfb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCiAJCXR4NDkzOGlkZV9vdXRiKHRmLT5ob2JfbnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKIAkJdHg0OTM4aWRlX291dGIodGYtPmhvYl9sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKIAkJdHg0OTM4aWRlX291dGIodGYtPmhvYl9sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKIAkJdHg0OTM4aWRlX291dGIodGYtPmhvYl9sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKIAkJdHg0OTM4aWRlX291dGIodGYtPmZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQogCQl0eDQ5MzhpZGVfb3V0Yih0Zi0+bnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCiAJCXR4NDkzOGlkZV9vdXRiKHRmLT5sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCiAJCXR4NDkzOGlkZV9vdXRiKHRmLT5sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCiAJCXR4NDkzOGlkZV9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCiAJCXR4NDkzOGlkZV9vdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LAogCQkJICAgICAgIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiB9CiAKLXN0YXRpYyB2b2lkIHR4NDkzOGlkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3N0YXRpYyB2b2lkIHR4NDkzOGlkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLT50ZjsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9EQVRBKSB7CisJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19JTl9EQVRBKSB7CiAJCXUxNiBkYXRhOwogCiAJCS8qIG5vIGVuZGlhbiBzd2FwICovCkBAIC0xNDIsMzcgKzE0NCwzNyBAQAogCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KIAl0eDQ5MzhpZGVfb3V0YihBVEFfREVWQ1RMX09CUyAmIH4weDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKIAkJdGYtPmZlYXR1cmUgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKIAkJdGYtPm5zZWN0ICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCiAJCXRmLT5sYmFsICAgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCiAJCXRmLT5sYmFtICAgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCiAJCXRmLT5sYmFoICAgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQogCQl0Zi0+ZGV2aWNlID0gdHg0OTM4aWRlX2luYihpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKIAkJdHg0OTM4aWRlX291dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCiAJCQl0Zi0+aG9iX2ZlYXR1cmUgPQogCQkJCXR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKIAkJCXRmLT5ob2JfbnNlY3QgICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQogCQkJdGYtPmhvYl9sYmFsICAgID0gdHg0OTM4aWRlX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKIAkJCXRmLT5ob2JfbGJhbSAgICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCiAJCQl0Zi0+aG9iX2xiYWggICAgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgdHg0OTM4aWRlX2lucHV0X2RhdGFfc3dhcChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKK3N0YXRpYyB2b2lkIHR4NDkzOGlkZV9pbnB1dF9kYXRhX3N3YXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJCXZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBsb25nIHBvcnQgPSBkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyOwpAQCAtMTg0LDcgKzE4Niw3IEBACiAJX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWJ1Ziwgcm91bmR1cChsZW4sIDIpKTsKIH0KIAotc3RhdGljIHZvaWQgdHg0OTM4aWRlX291dHB1dF9kYXRhX3N3YXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCitzdGF0aWMgdm9pZCB0eDQ5MzhpZGVfb3V0cHV0X2RhdGFfc3dhcChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkJdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgcG9ydCA9IGRyaXZlLT5od2lmLT5pb19wb3J0cy5kYXRhX2FkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS90eDQ5MzlpZGUuYyBiL2RyaXZlcnMvaWRlL3R4NDkzOWlkZS5jCmluZGV4IDQwYjA4MTIuLmUwZTBhODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3R4NDkzOWlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL3R4NDkzOWlkZS5jCkBAIC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCisjaW5jbHVkZSA8YXNtL2lkZS5oPgorCiAjZGVmaW5lIE1PRE5BTUUJInR4NDkzOWlkZSIKIAogLyogQVRBIFNoYWRvdyBSZWdpc3RlcnMgKDgtYml0IGV4Y2VwdCBmb3IgRGF0YSB3aGljaCBpcyAxNi1iaXQpICovCkBAIC0yMzAsNyArMjMyLDcgQEAKIAogI2lmZGVmIF9fQklHX0VORElBTgogLyogY3VzdG9tIGlkZV9idWlsZF9kbWF0YWJsZSB0byBoYW5kbGUgc3dhcHBlZCBsYXlvdXQgKi8KLXN0YXRpYyBpbnQgdHg0OTM5aWRlX2J1aWxkX2RtYXRhYmxlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQorc3RhdGljIGludCB0eDQ5MzlpZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1MzIgKnRhYmxlID0gKHUzMiAqKWh3aWYtPmRtYXRhYmxlX2NwdTsKQEAgLTIzOCwxMSArMjQwLDcgQEAKIAlpbnQgaTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCi0JaHdpZi0+c2dfbmVudHMgPSBpZGVfYnVpbGRfc2dsaXN0KGRyaXZlLCBycSk7Ci0JaWYgKGh3aWYtPnNnX25lbnRzID09IDApCi0JCXJldHVybiAwOwotCi0JZm9yX2VhY2hfc2coaHdpZi0+c2dfdGFibGUsIHNnLCBod2lmLT5zZ19uZW50cywgaSkgeworCWZvcl9lYWNoX3NnKGh3aWYtPnNnX3RhYmxlLCBzZywgY21kLT5zZ19uZW50cywgaSkgewogCQl1MzIgY3VyX2FkZHIsIGN1cl9sZW4sIGJjb3VudDsKIAogCQljdXJfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKQEAgLTI4OSwyMyArMjg3LDE1IEBACiAjZGVmaW5lIHR4NDkzOWlkZV9idWlsZF9kbWF0YWJsZQlpZGVfYnVpbGRfZG1hdGFibGUKICNlbmRpZgogCi1zdGF0aWMgaW50IHR4NDkzOWlkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIGludCB0eDQ5MzlpZGVfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdm9pZCBfX2lvbWVtICpiYXNlID0gVFg0OTM5SURFX0JBU0UoaHdpZik7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7Ci0JdTggcmVhZGluZzsKLQlpbnQgbmVudDsKLQotCWlmIChycV9kYXRhX2RpcihycSkpCi0JCXJlYWRpbmcgPSAwOwotCWVsc2UKLQkJcmVhZGluZyA9IEFUQV9ETUFfV1I7CisJdTggcncgPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkgPyAwIDogQVRBX0RNQV9XUjsKIAogCS8qIGZhbGwgYmFjayB0byBQSU8hICovCi0JbmVudCA9IHR4NDkzOWlkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgcnEpOwotCWlmICghbmVudCkgewotCQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7CisJaWYgKHR4NDkzOWlkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgY21kKSA9PSAwKSB7CisJCWlkZV9tYXBfc2coZHJpdmUsIGNtZCk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMzEzLDcgKzMwMyw3IEBACiAJdHg0OTM5aWRlX3dyaXRlbChod2lmLT5kbWF0YWJsZV9kbWEsIGJhc2UsIFRYNDkzOUlERV9QUkRfUHRyKTsKIAogCS8qIHNwZWNpZnkgci93ICovCi0JdHg0OTM5aWRlX3dyaXRlYihyZWFkaW5nLCBiYXNlLCBUWDQ5MzlJREVfRE1BX0NtZCk7CisJdHg0OTM5aWRlX3dyaXRlYihydywgYmFzZSwgVFg0OTM5SURFX0RNQV9DbWQpOwogCiAJLyogY2xlYXIgSU5UUiAmIEVSUk9SIGZsYWdzICovCiAJdHg0OTM5aWRlX2NsZWFyX2RtYV9zdGF0dXMoYmFzZSk7CkBAIC0zMjIsNyArMzEyLDkgQEAKIAogCXR4NDkzOWlkZV93cml0ZXcoU0VDVE9SX1NJWkUgLyAyLCBiYXNlLCBkcml2ZS0+ZG4gPwogCQkJIFRYNDkzOUlERV9YZmVyX0NudF8yIDogVFg0OTM5SURFX1hmZXJfQ250XzEpOwotCXR4NDkzOWlkZV93cml0ZXcocnEtPm5yX3NlY3RvcnMsIGJhc2UsIFRYNDkzOUlERV9TZWNfQ250KTsKKworCXR4NDkzOWlkZV93cml0ZXcoY21kLT5ycS0+bnJfc2VjdG9ycywgYmFzZSwgVFg0OTM5SURFX1NlY19DbnQpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQzNyw3ICs0MjksNyBAQAogCXJldHVybiBpZGVfYWxsb2NhdGVfZG1hX2VuZ2luZShod2lmKTsKIH0KIAotc3RhdGljIHZvaWQgdHg0OTM5aWRlX3RmX2xvYWRfZml4dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgdHg0OTM5aWRlX3RmX2xvYWRfZml4dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSBUWDQ5MzlJREVfQkFTRShod2lmKTsKQEAgLTQ2NSw1OSArNDU3LDU5IEBACiAJX19yYXdfd3JpdGViKHZhbHVlLCAodm9pZCBfX2lvbWVtICopcG9ydCk7CiB9CiAKLXN0YXRpYyB2b2lkIHR4NDkzOWlkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3N0YXRpYyB2b2lkIHR4NDkzOWlkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7Ci0JdTggSElISSA9IHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4ID8gMHhFMCA6IDB4RUY7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLT50ZjsKKwl1OCBISUhJID0gY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCA/IDB4RTAgOiAweEVGOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZMQUdHRUQpCisJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19GTEFHR0VEKQogCQlISUhJID0gMHhGRjsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREFUQSkgeworCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfT1VUX0RBVEEpIHsKIAkJdTE2IGRhdGEgPSAodGYtPmhvYl9kYXRhIDw8IDgpIHwgdGYtPmRhdGE7CiAKIAkJLyogbm8gZW5kaWFuIHN3YXAgKi8KIAkJX19yYXdfd3JpdGV3KGRhdGEsICh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+ZGF0YV9hZGRyKTsKIAl9CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKIAkJdHg0OTM5aWRlX291dGIodGYtPmhvYl9mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQogCQl0eDQ5MzlpZGVfb3V0Yih0Zi0+aG9iX25zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUwpCiAJCXR4NDkzOWlkZV9vdXRiKHRmLT5ob2JfbGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQU0pCiAJCXR4NDkzOWlkZV9vdXRiKHRmLT5ob2JfbGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCiAJCXR4NDkzOWlkZV9vdXRiKHRmLT5ob2JfbGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCiAJCXR4NDkzOWlkZV9vdXRiKHRmLT5mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9OU0VDVCkKIAkJdHg0OTM5aWRlX291dGIodGYtPm5zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFMKQogCQl0eDQ5MzlpZGVfb3V0Yih0Zi0+bGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQogCQl0eDQ5MzlpZGVfb3V0Yih0Zi0+bGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFIKQogCQl0eDQ5MzlpZGVfb3V0Yih0Zi0+bGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkgeworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpIHsKIAkJdHg0OTM5aWRlX291dGIoKHRmLT5kZXZpY2UgJiBISUhJKSB8IGRyaXZlLT5zZWxlY3QsCiAJCQkgICAgICAgaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKLQkJdHg0OTM5aWRlX3RmX2xvYWRfZml4dXAoZHJpdmUsIHRhc2spOworCQl0eDQ5MzlpZGVfdGZfbG9hZF9maXh1cChkcml2ZSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCB0eDQ5MzlpZGVfdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCitzdGF0aWMgdm9pZCB0eDQ5MzlpZGVfdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC0+dGY7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREFUQSkgeworCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfSU5fREFUQSkgewogCQl1MTYgZGF0YTsKIAogCQkvKiBubyBlbmRpYW4gc3dhcCAqLwpAQCAtNTI5LDMyICs1MjEsMzIgQEAKIAkvKiBiZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGxvdyBvcmRlciBiaXRzICovCiAJdHg0OTM5aWRlX291dGIoQVRBX0RFVkNUTF9PQlMgJiB+MHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCiAJCXRmLT5mZWF0dXJlID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCiAJCXRmLT5uc2VjdCAgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQogCQl0Zi0+bGJhbCAgID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQogCQl0Zi0+bGJhbSAgID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQogCQl0Zi0+bGJhaCAgID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKIAkJdGYtPmRldmljZSA9IHR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgeworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7CiAJCXR4NDkzOWlkZV9vdXRiKEFUQV9ERVZDVExfT0JTIHwgMHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQogCQkJdGYtPmhvYl9mZWF0dXJlID0KIAkJCQl0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCiAJCQl0Zi0+aG9iX25zZWN0ICAgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKIAkJCXRmLT5ob2JfbGJhbCAgICA9IHR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCiAJCQl0Zi0+aG9iX2xiYW0gICAgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQogCQkJdGYtPmhvYl9sYmFoICAgID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAl9CiB9CkBAIC02MDEsMTEgKzU5MywxMiBAQAogCiAjZWxzZQkvKiBfX0xJVFRMRV9FTkRJQU4gKi8KIAotc3RhdGljIHZvaWQgdHg0OTM5aWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgdHg0OTM5aWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewotCWlkZV90Zl9sb2FkKGRyaXZlLCB0YXNrKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkKLQkJdHg0OTM5aWRlX3RmX2xvYWRfZml4dXAoZHJpdmUsIHRhc2spOworCWlkZV90Zl9sb2FkKGRyaXZlLCBjbWQpOworCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkKKwkJdHg0OTM5aWRlX3RmX2xvYWRfZml4dXAoZHJpdmUpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgdHg0OTM5aWRlX3RwX29wcyA9IHsKQEAgLTYzNCwxMSArNjI3LDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHR4NDkzOWlkZV9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gdHg0OTM5aWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IHR4NDkzOWlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSB0eDQ5MzlpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IHR4NDkzOWlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSB0eDQ5MzlpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2lucHV0LmMgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKaW5kZXggMTczMGQ3My4uZWMzZGIzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwpAQCAtOTAzLDggKzkwMyw2IEBACiAJaWYgKCFwcm9jX2J1c19pbnB1dF9kaXIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcHJvY19idXNfaW5wdXRfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwotCiAJZW50cnkgPSBwcm9jX2NyZWF0ZSgiZGV2aWNlcyIsIDAsIHByb2NfYnVzX2lucHV0X2RpciwKIAkJCSAgICAmaW5wdXRfZGV2aWNlc19maWxlb3BzKTsKIAlpZiAoIWVudHJ5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzaS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzaS5jCmluZGV4IGY0OTY5ZmUuLjY5ZTcxZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNpLmMKQEAgLTExOCw3ICsxMTgsNiBAQAogCQlyZXR1cm4gKDApOwogCiAJdW1faWRpX3Byb2NfZW50cnktPnJlYWRfcHJvYyA9IHVtX2lkaV9wcm9jX3JlYWQ7Ci0JdW1faWRpX3Byb2NfZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlyZXR1cm4gKDEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvY29yZS5jIGIvZHJpdmVycy9sZ3Vlc3QvY29yZS5jCmluZGV4IDYwMTU2ZGYuLjQ4NDVmYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L2NvcmUuYworKysgYi9kcml2ZXJzL2xndWVzdC9jb3JlLmMKQEAgLTE1Miw4ICsxNTIsOCBAQAogICogY29kZS4gIFdlIGhhdmUgdG8gY2hlY2sgdGhhdCB0aGUgcmFuZ2UgaXMgYmVsb3cgdGhlIHBmbl9saW1pdCB0aGUgTGF1bmNoZXIKICAqIGdhdmUgdXMuICBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IGFkZHIgKyBsZW4gZG9lc24ndCBnaXZlIHVzIGEgZmFsc2UKICAqIHBvc2l0aXZlIGJ5IG92ZXJmbG93aW5nLCB0b28uICovCi1pbnQgbGd1ZXN0X2FkZHJlc3Nfb2soY29uc3Qgc3RydWN0IGxndWVzdCAqbGcsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCitib29sIGxndWVzdF9hZGRyZXNzX29rKGNvbnN0IHN0cnVjdCBsZ3Vlc3QgKmxnLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbikKIHsKIAlyZXR1cm4gKGFkZHIrbGVuKSAvIFBBR0VfU0laRSA8IGxnLT5wZm5fbGltaXQgJiYgKGFkZHIrbGVuID49IGFkZHIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvaW50ZXJydXB0c19hbmRfdHJhcHMuYyBiL2RyaXZlcnMvbGd1ZXN0L2ludGVycnVwdHNfYW5kX3RyYXBzLmMKaW5kZXggNDE1ZmFiMC4uNmU5OWFkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QvaW50ZXJydXB0c19hbmRfdHJhcHMuYworKysgYi9kcml2ZXJzL2xndWVzdC9pbnRlcnJ1cHRzX2FuZF90cmFwcy5jCkBAIC0zNCw3ICszNCw3IEBACiB9CiAKIC8qIEFuIElEVCBlbnRyeSBjYW4ndCBiZSB1c2VkIHVubGVzcyB0aGUgInByZXNlbnQiIGJpdCBpcyBzZXQuICovCi1zdGF0aWMgaW50IGlkdF9wcmVzZW50KHUzMiBsbywgdTMyIGhpKQorc3RhdGljIGJvb2wgaWR0X3ByZXNlbnQodTMyIGxvLCB1MzIgaGkpCiB7CiAJcmV0dXJuIChoaSAmIDB4ODAwMCk7CiB9CkBAIC02MCw3ICs2MCw4IEBACiAgKiBXZSBzZXQgdXAgdGhlIHN0YWNrIGp1c3QgbGlrZSB0aGUgQ1BVIGRvZXMgZm9yIGEgcmVhbCBpbnRlcnJ1cHQsIHNvIGl0J3MKICAqIGlkZW50aWNhbCBmb3IgdGhlIEd1ZXN0IChhbmQgdGhlIHN0YW5kYXJkICJpcmV0IiBpbnN0cnVjdGlvbiB3aWxsIHVuZG8KICAqIGl0KS4gKi8KLXN0YXRpYyB2b2lkIHNldF9ndWVzdF9pbnRlcnJ1cHQoc3RydWN0IGxnX2NwdSAqY3B1LCB1MzIgbG8sIHUzMiBoaSwgaW50IGhhc19lcnIpCitzdGF0aWMgdm9pZCBzZXRfZ3Vlc3RfaW50ZXJydXB0KHN0cnVjdCBsZ19jcHUgKmNwdSwgdTMyIGxvLCB1MzIgaGksCisJCQkJYm9vbCBoYXNfZXJyKQogewogCXVuc2lnbmVkIGxvbmcgZ3N0YWNrLCBvcmlnc3RhY2s7CiAJdTMyIGVmbGFncywgc3MsIGlycV9lbmFibGU7CkBAIC0xODQsNyArMTg1LDcgQEAKIAkJLyogc2V0X2d1ZXN0X2ludGVycnVwdCgpIHRha2VzIHRoZSBpbnRlcnJ1cHQgZGVzY3JpcHRvciBhbmQgYQogCQkgKiBmbGFnIHRvIHNheSB3aGV0aGVyIHRoaXMgaW50ZXJydXB0IHB1c2hlcyBhbiBlcnJvciBjb2RlIG9udG8KIAkJICogdGhlIHN0YWNrIGFzIHdlbGw6IHZpcnR1YWwgaW50ZXJydXB0cyBuZXZlciBkby4gKi8KLQkJc2V0X2d1ZXN0X2ludGVycnVwdChjcHUsIGlkdC0+YSwgaWR0LT5iLCAwKTsKKwkJc2V0X2d1ZXN0X2ludGVycnVwdChjcHUsIGlkdC0+YSwgaWR0LT5iLCBmYWxzZSk7CiAJfQogCiAJLyogRXZlcnkgdGltZSB3ZSBkZWxpdmVyIGFuIGludGVycnVwdCwgd2UgdXBkYXRlIHRoZSB0aW1lc3RhbXAgaW4gdGhlCkBAIC0yNDQsMjYgKzI0NSwyNiBAQAogLypIOjIyMCBOb3cgd2UndmUgZ290IHRoZSByb3V0aW5lcyB0byBkZWxpdmVyIGludGVycnVwdHMsIGRlbGl2ZXJpbmcgdHJhcHMgbGlrZQogICogcGFnZSBmYXVsdCBpcyBlYXN5LiAgVGhlIG9ubHkgdHJpY2sgaXMgdGhhdCBJbnRlbCBkZWNpZGVkIHRoYXQgc29tZSB0cmFwcwogICogc2hvdWxkIGhhdmUgZXJyb3IgY29kZXM6ICovCi1zdGF0aWMgaW50IGhhc19lcnIodW5zaWduZWQgaW50IHRyYXApCitzdGF0aWMgYm9vbCBoYXNfZXJyKHVuc2lnbmVkIGludCB0cmFwKQogewogCXJldHVybiAodHJhcCA9PSA4IHx8ICh0cmFwID49IDEwICYmIHRyYXAgPD0gMTQpIHx8IHRyYXAgPT0gMTcpOwogfQogCiAvKiBkZWxpdmVyX3RyYXAoKSByZXR1cm5zIHRydWUgaWYgaXQgY291bGQgZGVsaXZlciB0aGUgdHJhcC4gKi8KLWludCBkZWxpdmVyX3RyYXAoc3RydWN0IGxnX2NwdSAqY3B1LCB1bnNpZ25lZCBpbnQgbnVtKQorYm9vbCBkZWxpdmVyX3RyYXAoc3RydWN0IGxnX2NwdSAqY3B1LCB1bnNpZ25lZCBpbnQgbnVtKQogewogCS8qIFRyYXAgbnVtYmVycyBhcmUgYWx3YXlzIDggYml0LCBidXQgd2Ugc2V0IGFuIGltcG9zc2libGUgdHJhcCBudW1iZXIKIAkgKiBmb3IgdHJhcHMgaW5zaWRlIHRoZSBTd2l0Y2hlciwgc28gY2hlY2sgdGhhdCBoZXJlLiAqLwogCWlmIChudW0gPj0gQVJSQVlfU0laRShjcHUtPmFyY2guaWR0KSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCS8qIEVhcmx5IG9uIHRoZSBHdWVzdCBoYXNuJ3Qgc2V0IHRoZSBJRFQgZW50cmllcyAob3IgbWF5YmUgaXQgcHV0IGEKIAkgKiBib2d1cyBvbmUgaW4pOiBpZiB3ZSBmYWlsIGhlcmUsIHRoZSBHdWVzdCB3aWxsIGJlIGtpbGxlZC4gKi8KIAlpZiAoIWlkdF9wcmVzZW50KGNwdS0+YXJjaC5pZHRbbnVtXS5hLCBjcHUtPmFyY2guaWR0W251bV0uYikpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAJc2V0X2d1ZXN0X2ludGVycnVwdChjcHUsIGNwdS0+YXJjaC5pZHRbbnVtXS5hLAogCQkJICAgIGNwdS0+YXJjaC5pZHRbbnVtXS5iLCBoYXNfZXJyKG51bSkpOwotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogfQogCiAvKkg6MjUwIEhlcmUncyB0aGUgaGFyZCBwYXJ0OiByZXR1cm5pbmcgdG8gdGhlIEhvc3QgZXZlcnkgdGltZSBhIHRyYXAgaGFwcGVucwpAQCAtMjc5LDE4ICsyODAsMTkgQEAKICAqCiAgKiBUaGlzIHJvdXRpbmUgaW5kaWNhdGVzIGlmIGEgcGFydGljdWxhciB0cmFwIG51bWJlciBjb3VsZCBiZSBkZWxpdmVyZWQKICAqIGRpcmVjdGx5LiAqLwotc3RhdGljIGludCBkaXJlY3RfdHJhcCh1bnNpZ25lZCBpbnQgbnVtKQorc3RhdGljIGJvb2wgZGlyZWN0X3RyYXAodW5zaWduZWQgaW50IG51bSkKIHsKIAkvKiBIYXJkd2FyZSBpbnRlcnJ1cHRzIGRvbid0IGdvIHRvIHRoZSBHdWVzdCBhdCBhbGwgKGV4Y2VwdCBzeXN0ZW0KIAkgKiBjYWxsKS4gKi8KIAlpZiAobnVtID49IEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUiAmJiAhY291bGRfYmVfc3lzY2FsbChudW0pKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJLyogVGhlIEhvc3QgbmVlZHMgdG8gc2VlIHBhZ2UgZmF1bHRzIChmb3Igc2hhZG93IHBhZ2luZyBhbmQgdG8gc2F2ZSB0aGUKIAkgKiBmYXVsdCBhZGRyZXNzKSwgZ2VuZXJhbCBwcm90ZWN0aW9uIGZhdWx0cyAoaW4vb3V0IGVtdWxhdGlvbikgYW5kCi0JICogZGV2aWNlIG5vdCBhdmFpbGFibGUgKFRTIGhhbmRsaW5nKSwgYW5kIG9mIGNvdXJzZSwgdGhlIGh5cGVyY2FsbAotCSAqIHRyYXAuICovCi0JcmV0dXJuIG51bSAhPSAxNCAmJiBudW0gIT0gMTMgJiYgbnVtICE9IDcgJiYgbnVtICE9IExHVUVTVF9UUkFQX0VOVFJZOworCSAqIGRldmljZSBub3QgYXZhaWxhYmxlIChUUyBoYW5kbGluZyksIGludmFsaWQgb3Bjb2RlIGZhdWx0IChrdm0gaGNhbGwpLAorCSAqIGFuZCBvZiBjb3Vyc2UsIHRoZSBoeXBlcmNhbGwgdHJhcC4gKi8KKwlyZXR1cm4gbnVtICE9IDE0ICYmIG51bSAhPSAxMyAmJiBudW0gIT0gNyAmJgorCQkJbnVtICE9IDYgJiYgbnVtICE9IExHVUVTVF9UUkFQX0VOVFJZOwogfQogLyo6Ki8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvbGcuaCBiL2RyaXZlcnMvbGd1ZXN0L2xnLmgKaW5kZXggZjJjNjQxZS4uYWM4YTRhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QvbGcuaAorKysgYi9kcml2ZXJzL2xndWVzdC9sZy5oCkBAIC0xMDksOCArMTA5LDggQEAKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggbGd1ZXN0X2xvY2s7CiAKIC8qIGNvcmUuYzogKi8KLWludCBsZ3Vlc3RfYWRkcmVzc19vayhjb25zdCBzdHJ1Y3QgbGd1ZXN0ICpsZywKLQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbik7Citib29sIGxndWVzdF9hZGRyZXNzX29rKGNvbnN0IHN0cnVjdCBsZ3Vlc3QgKmxnLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbik7CiB2b2lkIF9fbGdyZWFkKHN0cnVjdCBsZ19jcHUgKiwgdm9pZCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCk7CiB2b2lkIF9fbGd3cml0ZShzdHJ1Y3QgbGdfY3B1ICosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQpOwogCkBAIC0xNDAsNyArMTQwLDcgQEAKIAogLyogaW50ZXJydXB0c19hbmRfdHJhcHMuYzogKi8KIHZvaWQgbWF5YmVfZG9faW50ZXJydXB0KHN0cnVjdCBsZ19jcHUgKmNwdSk7Ci1pbnQgZGVsaXZlcl90cmFwKHN0cnVjdCBsZ19jcHUgKmNwdSwgdW5zaWduZWQgaW50IG51bSk7Citib29sIGRlbGl2ZXJfdHJhcChzdHJ1Y3QgbGdfY3B1ICpjcHUsIHVuc2lnbmVkIGludCBudW0pOwogdm9pZCBsb2FkX2d1ZXN0X2lkdF9lbnRyeShzdHJ1Y3QgbGdfY3B1ICpjcHUsIHVuc2lnbmVkIGludCBpLAogCQkJICB1MzIgbG93LCB1MzIgaGkpOwogdm9pZCBndWVzdF9zZXRfc3RhY2soc3RydWN0IGxnX2NwdSAqY3B1LCB1MzIgc2VnLCB1MzIgZXNwLCB1bnNpZ25lZCBpbnQgcGFnZXMpOwpAQCAtMTczLDcgKzE3Myw3IEBACiB2b2lkIGd1ZXN0X3NldF9wdGUoc3RydWN0IGxnX2NwdSAqY3B1LCB1bnNpZ25lZCBsb25nIGdwZ2RpciwKIAkJICAgdW5zaWduZWQgbG9uZyB2YWRkciwgcHRlX3QgdmFsKTsKIHZvaWQgbWFwX3N3aXRjaGVyX2luX2d1ZXN0KHN0cnVjdCBsZ19jcHUgKmNwdSwgc3RydWN0IGxndWVzdF9wYWdlcyAqcGFnZXMpOwotaW50IGRlbWFuZF9wYWdlKHN0cnVjdCBsZ19jcHUgKmNwdSwgdW5zaWduZWQgbG9uZyBjcjIsIGludCBlcnJjb2RlKTsKK2Jvb2wgZGVtYW5kX3BhZ2Uoc3RydWN0IGxnX2NwdSAqY3B1LCB1bnNpZ25lZCBsb25nIGNyMiwgaW50IGVycmNvZGUpOwogdm9pZCBwaW5fcGFnZShzdHJ1Y3QgbGdfY3B1ICpjcHUsIHVuc2lnbmVkIGxvbmcgdmFkZHIpOwogdW5zaWduZWQgbG9uZyBndWVzdF9wYShzdHJ1Y3QgbGdfY3B1ICpjcHUsIHVuc2lnbmVkIGxvbmcgdmFkZHIpOwogdm9pZCBwYWdlX3RhYmxlX2d1ZXN0X2RhdGFfaW5pdChzdHJ1Y3QgbGdfY3B1ICpjcHUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvbGd1ZXN0X2RldmljZS5jIGIvZHJpdmVycy9sZ3Vlc3QvbGd1ZXN0X2RldmljZS5jCmluZGV4IDgxMzI1MzMuLmRmNDRkOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L2xndWVzdF9kZXZpY2UuYworKysgYi9kcml2ZXJzL2xndWVzdC9sZ3Vlc3RfZGV2aWNlLmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCiAJLyogV2Ugc2V0IHRoZSBzdGF0dXMuICovCiAJdG9fbGdkZXYodmRldiktPmRlc2MtPnN0YXR1cyA9IHN0YXR1czsKLQloY2FsbChMSENBTExfTk9USUZZLCAobWF4X3Bmbjw8UEFHRV9TSElGVCkgKyBvZmZzZXQsIDAsIDApOworCWt2bV9oeXBlcmNhbGwxKExIQ0FMTF9OT1RJRlksIChtYXhfcGZuIDw8IFBBR0VfU0hJRlQpICsgb2Zmc2V0KTsKIH0KIAogc3RhdGljIHZvaWQgbGdfc2V0X3N0YXR1cyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgdTggc3RhdHVzKQpAQCAtMjA5LDcgKzIwOSw3IEBACiAJICogdmlydHF1ZXVlIHN0cnVjdHVyZS4gKi8KIAlzdHJ1Y3QgbGd1ZXN0X3ZxX2luZm8gKmx2cSA9IHZxLT5wcml2OwogCi0JaGNhbGwoTEhDQUxMX05PVElGWSwgbHZxLT5jb25maWcucGZuIDw8IFBBR0VfU0hJRlQsIDAsIDApOworCWt2bV9oeXBlcmNhbGwxKExIQ0FMTF9OT1RJRlksIGx2cS0+Y29uZmlnLnBmbiA8PCBQQUdFX1NISUZUKTsKIH0KIAogLyogQW4gZXh0ZXJuIGRlY2xhcmF0aW9uIGluc2lkZSBhIEMgZmlsZSBpcyBiYWQgZm9ybS4gIERvbid0IGRvIGl0LiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvcGFnZV90YWJsZXMuYyBiL2RyaXZlcnMvbGd1ZXN0L3BhZ2VfdGFibGVzLmMKaW5kZXggNTc2YTgzMS4uYTA1OWNmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QvcGFnZV90YWJsZXMuYworKysgYi9kcml2ZXJzL2xndWVzdC9wYWdlX3RhYmxlcy5jCkBAIC0xOTksNyArMTk5LDcgQEAKICAqCiAgKiBJZiB3ZSBmaXhlZCB1cCB0aGUgZmF1bHQgKGllLiB3ZSBtYXBwZWQgdGhlIGFkZHJlc3MpLCB0aGlzIHJvdXRpbmUgcmV0dXJucwogICogdHJ1ZS4gIE90aGVyd2lzZSwgaXQgd2FzIGEgcmVhbCBmYXVsdCBhbmQgd2UgbmVlZCB0byB0ZWxsIHRoZSBHdWVzdC4gKi8KLWludCBkZW1hbmRfcGFnZShzdHJ1Y3QgbGdfY3B1ICpjcHUsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBlcnJjb2RlKQorYm9vbCBkZW1hbmRfcGFnZShzdHJ1Y3QgbGdfY3B1ICpjcHUsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBlcnJjb2RlKQogewogCXBnZF90IGdwZ2Q7CiAJcGdkX3QgKnNwZ2Q7CkBAIC0yMTEsNyArMjExLDcgQEAKIAlncGdkID0gbGdyZWFkKGNwdSwgZ3BnZF9hZGRyKGNwdSwgdmFkZHIpLCBwZ2RfdCk7CiAJLyogVG9wbGV2ZWwgbm90IHByZXNlbnQ/ICBXZSBjYW4ndCBtYXAgaXQgaW4uICovCiAJaWYgKCEocGdkX2ZsYWdzKGdwZ2QpICYgX1BBR0VfUFJFU0VOVCkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBOb3cgbG9vayBhdCB0aGUgbWF0Y2hpbmcgc2hhZG93IGVudHJ5LiAqLwogCXNwZ2QgPSBzcGdkX2FkZHIoY3B1LCBjcHUtPmNwdV9wZ2QsIHZhZGRyKTsKQEAgLTIyMiw3ICsyMjIsNyBAQAogCQkgKiBzaW1wbGUgZm9yIHRoaXMgY29ybmVyIGNhc2UuICovCiAJCWlmICghcHRlcGFnZSkgewogCQkJa2lsbF9ndWVzdChjcHUsICJvdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgcHRlIHBhZ2UiKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCS8qIFdlIGNoZWNrIHRoYXQgdGhlIEd1ZXN0IHBnZCBpcyBPSy4gKi8KIAkJY2hlY2tfZ3BnZChjcHUsIGdwZ2QpOwpAQCAtMjM4LDE2ICsyMzgsMTYgQEAKIAogCS8qIElmIHRoaXMgcGFnZSBpc24ndCBpbiB0aGUgR3Vlc3QgcGFnZSB0YWJsZXMsIHdlIGNhbid0IHBhZ2UgaXQgaW4uICovCiAJaWYgKCEocHRlX2ZsYWdzKGdwdGUpICYgX1BBR0VfUFJFU0VOVCkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBDaGVjayB0aGV5J3JlIG5vdCB0cnlpbmcgdG8gd3JpdGUgdG8gYSBwYWdlIHRoZSBHdWVzdCB3YW50cwogCSAqIHJlYWQtb25seSAoYml0IDIgb2YgZXJyY29kZSA9PSB3cml0ZSkuICovCiAJaWYgKChlcnJjb2RlICYgMikgJiYgIShwdGVfZmxhZ3MoZ3B0ZSkgJiBfUEFHRV9SVykpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBVc2VyIGFjY2VzcyB0byBhIGtlcm5lbC1vbmx5IHBhZ2U/IChiaXQgMyA9PSB1c2VyIGFjY2VzcykgKi8KIAlpZiAoKGVycmNvZGUgJiA0KSAmJiAhKHB0ZV9mbGFncyhncHRlKSAmIF9QQUdFX1VTRVIpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJLyogQ2hlY2sgdGhhdCB0aGUgR3Vlc3QgUFRFIGZsYWdzIGFyZSBPSywgYW5kIHRoZSBwYWdlIG51bWJlciBpcyBiZWxvdwogCSAqIHRoZSBwZm5fbGltaXQgKGllLiBub3QgbWFwcGluZyB0aGUgTGF1bmNoZXIgYmluYXJ5KS4gKi8KQEAgLTI4Myw3ICsyODMsNyBAQAogCSAqIG1hbmlwdWxhdGVkLCB0aGUgcmVzdWx0IHJldHVybmVkIGFuZCB0aGUgY29kZSBjb21wbGV0ZS4gIEEgc21hbGwKIAkgKiBkZWxheSBhbmQgYSB0cmFjZSBvZiBhbGxpdGVyYXRpb24gYXJlIHRoZSBvbmx5IGluZGljYXRpb25zIHRoZSBHdWVzdAogCSAqIGhhcyB0aGF0IGEgcGFnZSBmYXVsdCBvY2N1cnJlZCBhdCBhbGwuICovCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qSDozNjAKQEAgLTI5Niw3ICsyOTYsNyBAQAogICoKICAqIFRoaXMgaXMgYSBxdWljayB2ZXJzaW9uIHdoaWNoIGFuc3dlcnMgdGhlIHF1ZXN0aW9uOiBpcyB0aGlzIHZpcnR1YWwgYWRkcmVzcwogICogbWFwcGVkIGJ5IHRoZSBzaGFkb3cgcGFnZSB0YWJsZXMsIGFuZCBpcyBpdCB3cml0YWJsZT8gKi8KLXN0YXRpYyBpbnQgcGFnZV93cml0YWJsZShzdHJ1Y3QgbGdfY3B1ICpjcHUsIHVuc2lnbmVkIGxvbmcgdmFkZHIpCitzdGF0aWMgYm9vbCBwYWdlX3dyaXRhYmxlKHN0cnVjdCBsZ19jcHUgKmNwdSwgdW5zaWduZWQgbG9uZyB2YWRkcikKIHsKIAlwZ2RfdCAqc3BnZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzA0LDcgKzMwNCw3IEBACiAJLyogTG9vayBhdCB0aGUgY3VycmVudCB0b3AgbGV2ZWwgZW50cnk6IGlzIGl0IHByZXNlbnQ/ICovCiAJc3BnZCA9IHNwZ2RfYWRkcihjcHUsIGNwdS0+Y3B1X3BnZCwgdmFkZHIpOwogCWlmICghKHBnZF9mbGFncygqc3BnZCkgJiBfUEFHRV9QUkVTRU5UKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCS8qIENoZWNrIHRoZSBmbGFncyBvbiB0aGUgcHRlIGVudHJ5IGl0c2VsZjogaXQgbXVzdCBiZSBwcmVzZW50IGFuZAogCSAqIHdyaXRhYmxlLiAqLwpAQCAtMzczLDggKzM3MywxMCBAQAogCS8qIEZpcnN0IHN0ZXA6IGdldCB0aGUgdG9wLWxldmVsIEd1ZXN0IHBhZ2UgdGFibGUgZW50cnkuICovCiAJZ3BnZCA9IGxncmVhZChjcHUsIGdwZ2RfYWRkcihjcHUsIHZhZGRyKSwgcGdkX3QpOwogCS8qIFRvcGxldmVsIG5vdCBwcmVzZW50PyAgV2UgY2FuJ3QgbWFwIGl0IGluLiAqLwotCWlmICghKHBnZF9mbGFncyhncGdkKSAmIF9QQUdFX1BSRVNFTlQpKQorCWlmICghKHBnZF9mbGFncyhncGdkKSAmIF9QQUdFX1BSRVNFTlQpKSB7CiAJCWtpbGxfZ3Vlc3QoY3B1LCAiQmFkIGFkZHJlc3MgJSNseCIsIHZhZGRyKTsKKwkJcmV0dXJuIC0xVUw7CisJfQogCiAJZ3B0ZSA9IGxncmVhZChjcHUsIGdwdGVfYWRkcihncGdkLCB2YWRkciksIHB0ZV90KTsKIAlpZiAoIShwdGVfZmxhZ3MoZ3B0ZSkgJiBfUEFHRV9QUkVTRU5UKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L3NlZ21lbnRzLmMgYi9kcml2ZXJzL2xndWVzdC9zZWdtZW50cy5jCmluZGV4IGVjNmFhM2YuLjRmMTU0MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L3NlZ21lbnRzLmMKKysrIGIvZHJpdmVycy9sZ3Vlc3Qvc2VnbWVudHMuYwpAQCAtNDUsNyArNDUsNyBAQAogICogIlRhc2sgU3RhdGUgU2VnbWVudCIgd2hpY2ggY29udHJvbHMgYWxsIGtpbmRzIG9mIGRlbGljYXRlIHRoaW5ncy4gIFRoZQogICogTEdVRVNUX0NTIGFuZCBMR1VFU1RfRFMgZW50cmllcyBhcmUgcmVzZXJ2ZWQgZm9yIHRoZSBTd2l0Y2hlciwgYW5kIHRoZQogICogdGhlIEd1ZXN0IGNhbid0IGJlIHRydXN0ZWQgdG8gZGVhbCB3aXRoIGRvdWJsZSBmYXVsdHMuICovCi1zdGF0aWMgaW50IGlnbm9yZWRfZ2R0KHVuc2lnbmVkIGludCBudW0pCitzdGF0aWMgYm9vbCBpZ25vcmVkX2dkdCh1bnNpZ25lZCBpbnQgbnVtKQogewogCXJldHVybiAobnVtID09IEdEVF9FTlRSWV9UU1MKIAkJfHwgbnVtID09IEdEVF9FTlRSWV9MR1VFU1RfQ1MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L3g4Ni9jb3JlLmMgYi9kcml2ZXJzL2xndWVzdC94ODYvY29yZS5jCmluZGV4IGJmNzk0MjMuLmE2YjcxNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L3g4Ni9jb3JlLmMKKysrIGIvZHJpdmVycy9sZ3Vlc3QveDg2L2NvcmUuYwpAQCAtMjkwLDYgKzI5MCw1NyBAQAogCXJldHVybiAxOwogfQogCisvKiBPdXIgaHlwZXJjYWxscyBtZWNoYW5pc20gdXNlZCB0byBiZSBiYXNlZCBvbiBkaXJlY3Qgc29mdHdhcmUgaW50ZXJydXB0cy4KKyAqIEFmdGVyIEFudGhvbnkncyAiUmVmYWN0b3IgaHlwZXJjYWxsIGluZnJhc3RydWN0dXJlIiBrdm0gcGF0Y2gsIHdlIGRlY2lkZWQgdG8KKyAqIGNoYW5nZSBvdmVyIHRvIHVzaW5nIGt2bSBoeXBlcmNhbGxzLgorICoKKyAqIEtWTV9IWVBFUkNBTEwgaXMgYWN0dWFsbHkgYSAidm1jYWxsIiBpbnN0cnVjdGlvbiwgd2hpY2ggZ2VuZXJhdGVzIGFuIGludmFsaWQKKyAqIG9wY29kZSBmYXVsdCAoZmF1bHQgNikgb24gbm9uLVZUIGNwdXMsIHNvIHRoZSBlYXNpZXN0IHNvbHV0aW9uIHNlZW1lZCB0byBiZQorICogYW4gKmVtdWxhdGlvbiBhcHByb2FjaCo6IGlmIHRoZSBmYXVsdCB3YXMgcmVhbGx5IHByb2R1Y2VkIGJ5IGFuIGh5cGVyY2FsbAorICogKGlzX2h5cGVyY2FsbCgpIGRvZXMgZXhhY3RseSB0aGlzIGNoZWNrKSwgd2UgY2FuIGp1c3QgY2FsbCB0aGUgY29ycmVzcG9uZGluZworICogaHlwZXJjYWxsIGhvc3QgaW1wbGVtZW50YXRpb24gZnVuY3Rpb24uCisgKgorICogQnV0IHRoZXNlIGludmFsaWQgb3Bjb2RlIGZhdWx0cyBhcmUgbm90YWJseSBzbG93ZXIgdGhhbiBzb2Z0d2FyZSBpbnRlcnJ1cHRzLgorICogU28gd2UgaW1wbGVtZW50ZWQgdGhlICpwYXRjaGluZyAob3IgcmV3cml0aW5nKSBhcHByb2FjaCo6IGV2ZXJ5IHRpbWUgd2UgaGl0CisgKiB0aGUgS1ZNX0hZUEVSQ0FMTCBvcGNvZGUgaW4gR3Vlc3QgY29kZSwgd2UgcGF0Y2ggaXQgdG8gdGhlIG9sZCAiaW50IDB4MWYiCisgKiBvcGNvZGUsIHNvIG5leHQgdGltZSB0aGUgR3Vlc3QgY2FsbHMgdGhpcyBoeXBlcmNhbGwgaXQgd2lsbCB1c2UgdGhlCisgKiBmYXN0ZXIgdHJhcCBtZWNoYW5pc20uCisgKgorICogTWF0aWFzIGV2ZW4gYmVuY2htYXJrZWQgaXQgdG8gY29udmluY2UgeW91OiB0aGlzIHNob3dzIHRoZSBhdmVyYWdlIGN5Y2xlCisgKiBjb3N0IG9mIGEgaHlwZXJjYWxsLiAgRm9yIGVhY2ggYWx0ZXJuYXRpdmUgc29sdXRpb24gbWVudGlvbmVkIGFib3ZlIHdlJ3ZlCisgKiBtYWRlIDUgcnVucyBvZiB0aGUgYmVuY2htYXJrOgorICoKKyAqIDEpIGRpcmVjdCBzb2Z0d2FyZSBpbnRlcnJ1cHQ6IDI5MTUsIDI3ODksIDI3NjQsIDI3MjEsIDI4OTgKKyAqIDIpIGVtdWxhdGlvbiB0ZWNobmlxdWU6IDM0MTAsIDM2ODEsIDM0NjYsIDMzOTIsIDM3ODAKKyAqIDMpIHBhdGNoaW5nIChyZXdyaXRlKSB0ZWNobmlxdWU6IDI5NzcsIDI5NzUsIDI4OTEsIDI2MzcsIDI4ODQKKyAqCisgKiBPbmUgdHdvLWxpbmUgZnVuY3Rpb24gaXMgd29ydGggYSAyMCUgaHlwZXJjYWxsIHNwZWVkIGJvb3N0IQorICovCitzdGF0aWMgdm9pZCByZXdyaXRlX2h5cGVyY2FsbChzdHJ1Y3QgbGdfY3B1ICpjcHUpCit7CisJLyogVGhpcyBhcmUgdGhlIG9wY29kZXMgd2UgdXNlIHRvIHBhdGNoIHRoZSBHdWVzdC4gIFRoZSBvcGNvZGUgZm9yICJpbnQKKwkgKiAkMHgxZiIgaXMgIjB4Y2QgMHgxZiIgYnV0IHZtY2FsbCBpbnN0cnVjdGlvbiBpcyAzIGJ5dGVzIGxvbmcsIHNvIHdlCisJICogY29tcGxldGUgdGhlIHNlcXVlbmNlIHdpdGggYSBOT1AgKDB4OTApLiAqLworCXU4IGluc25bM10gPSB7MHhjZCwgMHgxZiwgMHg5MH07CisKKwlfX2xnd3JpdGUoY3B1LCBndWVzdF9wYShjcHUsIGNwdS0+cmVncy0+ZWlwKSwgaW5zbiwgc2l6ZW9mKGluc24pKTsKK30KKworc3RhdGljIGJvb2wgaXNfaHlwZXJjYWxsKHN0cnVjdCBsZ19jcHUgKmNwdSkKK3sKKwl1OCBpbnNuWzNdOworCisJLyogVGhpcyBtdXN0IGJlIHRoZSBHdWVzdCBrZXJuZWwgdHJ5aW5nIHRvIGRvIHNvbWV0aGluZy4KKwkgKiBUaGUgYm90dG9tIHR3byBiaXRzIG9mIHRoZSBDUyBzZWdtZW50IHJlZ2lzdGVyIGFyZSB0aGUgcHJpdmlsZWdlCisJICogbGV2ZWwuICovCisJaWYgKChjcHUtPnJlZ3MtPmNzICYgMykgIT0gR1VFU1RfUEwpCisJCXJldHVybiBmYWxzZTsKKworCS8qIElzIGl0IGEgdm1jYWxsPyAqLworCV9fbGdyZWFkKGNwdSwgaW5zbiwgZ3Vlc3RfcGEoY3B1LCBjcHUtPnJlZ3MtPmVpcCksIHNpemVvZihpbnNuKSk7CisJcmV0dXJuIGluc25bMF0gPT0gMHgwZiAmJiBpbnNuWzFdID09IDB4MDEgJiYgaW5zblsyXSA9PSAweGMxOworfQorCiAvKkg6MDUwIE9uY2Ugd2UndmUgcmUtZW5hYmxlZCBpbnRlcnJ1cHRzLCB3ZSBsb29rIGF0IHdoeSB0aGUgR3Vlc3QgZXhpdGVkLiAqLwogdm9pZCBsZ3Vlc3RfYXJjaF9oYW5kbGVfdHJhcChzdHJ1Y3QgbGdfY3B1ICpjcHUpCiB7CkBAIC0zMzcsNyArMzg4LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSAzMiAuLi4gMjU1OgogCQkvKiBUaGVzZSB2YWx1ZXMgbWVhbiBhIHJlYWwgaW50ZXJydXB0IG9jY3VycmVkLCBpbiB3aGljaCBjYXNlCi0JCSAqIHRoZSBIb3N0IGhhbmRsZXIgaGFzIGFscmVhZHkgYmVlbiBydW4uICBXZSBqdXN0IGRvIGEKKwkJICogdGhlIEhvc3QgaGFuZGxlciBoYXMgYWxyZWFkeSBiZWVuIHJ1bi4gV2UganVzdCBkbyBhCiAJCSAqIGZyaWVuZGx5IGNoZWNrIGlmIGFub3RoZXIgcHJvY2VzcyBzaG91bGQgbm93IGJlIHJ1biwgdGhlbgogCQkgKiByZXR1cm4gdG8gcnVuIHRoZSBHdWVzdCBhZ2FpbiAqLwogCQljb25kX3Jlc2NoZWQoKTsKQEAgLTM0Nyw2ICszOTgsMTUgQEAKIAkJICogdXAgdGhlIHBvaW50ZXIgbm93IHRvIGluZGljYXRlIGEgaHlwZXJjYWxsIGlzIHBlbmRpbmcuICovCiAJCWNwdS0+aGNhbGwgPSAoc3RydWN0IGhjYWxsX2FyZ3MgKiljcHUtPnJlZ3M7CiAJCXJldHVybjsKKwljYXNlIDY6CisJCS8qIGt2bSBoeXBlcmNhbGxzIHRyaWdnZXIgYW4gaW52YWxpZCBvcGNvZGUgZmF1bHQgKDYpLgorCQkgKiBXZSBuZWVkIHRvIGNoZWNrIGlmIHJpbmcgPT0gR1VFU1RfUEwgYW5kCisJCSAqIGZhdWx0aW5nIGluc3RydWN0aW9uID09IHZtY2FsbC4gKi8KKwkJaWYgKGlzX2h5cGVyY2FsbChjcHUpKSB7CisJCQlyZXdyaXRlX2h5cGVyY2FsbChjcHUpOworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOwogCX0KIAogCS8qIFdlIGRpZG4ndCBoYW5kbGUgdGhlIHRyYXAsIHNvIGl0IG5lZWRzIHRvIGdvIHRvIHRoZSBHdWVzdC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYwppbmRleCA4MjYwN2FkLi5jMDYyMWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCkBAIC00OTgsOCArNDk4LDggQEAKICNkZWZpbmUgQlVJTERfU1RPUkVfRlVOQ19JTlQobmFtZSwgZGF0YSkJCQlcCiBzdGF0aWMgc3NpemVfdCBzdG9yZV8jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbikgXAogewkJCQkJCQkJXAotCXUzMiB2YWw7CQkJCQkJXAotCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJCVwKKwlpbnQgdmFsOwkJCQkJCVwKKwl2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwkJCVwKIAlpZiAodmFsIDwgMCB8fCB2YWwgPiAyNTUpCQkJCVwKIAkJcmV0dXJuIC1FSU5WQUw7CQkJCQlcCiAJcHJpbnRrKEtFUk5fSU5GTyAiU2V0dGluZyBzcGVjaWZpZWQgZmFuIHNwZWVkIHRvICVkXG4iLCB2YWwpOwlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL0tjb25maWcKaW5kZXggOTNlYTIwMS4uMjIzYzM2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvS2NvbmZpZwpAQCAtMTE3LDcgKzExNyw3IEBACiBjb25maWcgREFCCiAJYm9vbGVhbiAiREFCIGFkYXB0ZXJzIgogCS0tLWhlbHAtLS0KLQkgIEFsbG93IHNlbGVjdGluZyBzdXBwb3J0IGZvciBmb3IgRGlnaXRhbCBBdWRpbyBCcm9hZGNhc3RpbmcgKERBQikKKwkgIEFsbG93IHNlbGVjdGluZyBzdXBwb3J0IGZvciBEaWdpdGFsIEF1ZGlvIEJyb2FkY2FzdGluZyAoREFCKQogCSAgUmVjZWl2ZXIgYWRhcHRlcnMuCiAKIGlmIERBQgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vaXIta2V5bWFwcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vaXIta2V5bWFwcy5jCmluZGV4IGQ4MjI5YTAuLjNmZTE1OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleW1hcHMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1rZXltYXBzLmMKQEAgLTE1Myw2ICsxNTMsNjUgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hdmVybWVkaWFfbTEzNWEpOwogCisvKiBPbGRyaWNoIEplZGxpY2thIDxvbGRpdW0ucHJvQHNlem5hbS5jej4gKi8KK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYV9jYXJkYnVzW0lSX0tFWVRBQl9TSVpFXSA9IHsKKwlbMHgwMF0gPSBLRVlfUE9XRVIsCisJWzB4MDFdID0gS0VZX1RVTkVSLAkJLyogVFYvRk0gKi8KKwlbMHgwM10gPSBLRVlfVEVYVCwJCS8qIFRlbGV0ZXh0ICovCisJWzB4MDRdID0gS0VZX0VQRywKKwlbMHgwNV0gPSBLRVlfMSwKKwlbMHgwNl0gPSBLRVlfMiwKKwlbMHgwN10gPSBLRVlfMywKKwlbMHgwOF0gPSBLRVlfQVVESU8sCisJWzB4MDldID0gS0VZXzQsCisJWzB4MGFdID0gS0VZXzUsCisJWzB4MGJdID0gS0VZXzYsCisJWzB4MGNdID0gS0VZX1pPT00sCQkvKiBGdWxsIHNjcmVlbiAqLworCVsweDBkXSA9IEtFWV83LAorCVsweDBlXSA9IEtFWV84LAorCVsweDBmXSA9IEtFWV85LAorCVsweDEwXSA9IEtFWV9QQUdFVVAsCQkvKiAxNi1DSCBQUkVWICovCisJWzB4MTFdID0gS0VZXzAsCisJWzB4MTJdID0gS0VZX0lORk8sCisJWzB4MTNdID0gS0VZX0FHQUlOLAkJLyogQ0ggUlROIC0gY2hhbm5lbCByZXR1cm4gKi8KKwlbMHgxNF0gPSBLRVlfTVVURSwKKwlbMHgxNV0gPSBLRVlfRURJVCwJCS8qIEF1dG9zY2FuICovCisJWzB4MTddID0gS0VZX1NBVkUsCQkvKiBTY3JlZW5zaG90ICovCisJWzB4MThdID0gS0VZX1BMQVlQQVVTRSwKKwlbMHgxOV0gPSBLRVlfUkVDT1JELAorCVsweDFhXSA9IEtFWV9QTEFZLAorCVsweDFiXSA9IEtFWV9TVE9QLAorCVsweDFjXSA9IEtFWV9GQVNURk9SV0FSRCwKKwlbMHgxZF0gPSBLRVlfUkVXSU5ELAorCVsweDFlXSA9IEtFWV9WT0xVTUVET1dOLAorCVsweDFmXSA9IEtFWV9WT0xVTUVVUCwKKwlbMHgyMl0gPSBLRVlfU0xFRVAsCQkvKiBTbGVlcCAqLworCVsweDIzXSA9IEtFWV9aT09NLAkJLyogQXNwZWN0ICovCisJWzB4MjZdID0gS0VZX1NDUkVFTiwJCS8qIFBvcyAqLworCVsweDI3XSA9IEtFWV9BTkdMRSwJCS8qIFNpemUgKi8KKwlbMHgyOF0gPSBLRVlfU0VMRUNULAkJLyogU2VsZWN0ICovCisJWzB4MjldID0gS0VZX0JMVUUsCQkvKiBCbHVlL1BpY3R1cmUgKi8KKwlbMHgyYV0gPSBLRVlfQkFDS1NQQUNFLAkvKiBCYWNrICovCisJWzB4MmJdID0gS0VZX01FRElBLAkJLyogUElQIChQaWN0dXJlLWluLXBpY3R1cmUpICovCisJWzB4MmNdID0gS0VZX0RPV04sCisJWzB4MmVdID0gS0VZX0RPVCwKKwlbMHgyZl0gPSBLRVlfVFYsCQkvKiBMaXZlIFRWICovCisJWzB4MzJdID0gS0VZX0xFRlQsCisJWzB4MzNdID0gS0VZX0NMRUFSLAkJLyogQ2xlYXIgKi8KKwlbMHgzNV0gPSBLRVlfUkVELAkJLyogUmVkL1RWICovCisJWzB4MzZdID0gS0VZX1VQLAorCVsweDM3XSA9IEtFWV9IT01FLAkJLyogSG9tZSAqLworCVsweDM5XSA9IEtFWV9HUkVFTiwJCS8qIEdyZWVuL1ZpZGVvICovCisJWzB4M2RdID0gS0VZX1lFTExPVywJCS8qIFllbGxvdy9NdXNpYyAqLworCVsweDNlXSA9IEtFWV9PSywJCS8qIE9rICovCisJWzB4M2ZdID0gS0VZX1JJR0hULAorCVsweDQwXSA9IEtFWV9ORVhULAkJLyogTmV4dCAqLworCVsweDQxXSA9IEtFWV9QUkVWSU9VUywJLyogUHJldmlvdXMgKi8KKwlbMHg0Ml0gPSBLRVlfQ0hBTk5FTERPV04sCS8qIENoYW5uZWwgZG93biAqLworCVsweDQzXSA9IEtFWV9DSEFOTkVMVVAJLyogQ2hhbm5lbCB1cCAqLworfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2F2ZXJtZWRpYV9jYXJkYnVzKTsKKwogLyogQXR0aWxhIEtvbmRvcm9zIDxhdHRpbGEua29uZG9yb3NAY2hlbGxvLmh1PiAqLwogSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXBhY192aWV3Y29tcFtJUl9LRVlUQUJfU0laRV0gPSB7CiAKQEAgLTI0NTIsNiArMjUxMSw1NSBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2t3b3JsZF9wbHVzX3R2X2FuYWxvZyk7CiAKKy8qIEthaW9teSBUVm5QQyBVMgorICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CisgKi8KK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2thaW9teVtJUl9LRVlUQUJfU0laRV0gPSB7CisJWzB4NDNdID0gS0VZX1BPV0VSMiwKKwlbMHgwMV0gPSBLRVlfTElTVCwKKwlbMHgwYl0gPSBLRVlfWk9PTSwKKwlbMHgwM10gPSBLRVlfUE9XRVIsCisKKwlbMHgwNF0gPSBLRVlfMSwKKwlbMHgwOF0gPSBLRVlfMiwKKwlbMHgwMl0gPSBLRVlfMywKKworCVsweDBmXSA9IEtFWV80LAorCVsweDA1XSA9IEtFWV81LAorCVsweDA2XSA9IEtFWV82LAorCisJWzB4MGNdID0gS0VZXzcsCisJWzB4MGRdID0gS0VZXzgsCisJWzB4MGFdID0gS0VZXzksCisKKwlbMHgxMV0gPSBLRVlfMCwKKworCVsweDA5XSA9IEtFWV9DSEFOTkVMVVAsCisJWzB4MDddID0gS0VZX0NIQU5ORUxET1dOLAorCisJWzB4MGVdID0gS0VZX1ZPTFVNRVVQLAorCVsweDEzXSA9IEtFWV9WT0xVTUVET1dOLAorCisJWzB4MTBdID0gS0VZX0hPTUUsCisJWzB4MTJdID0gS0VZX0VOVEVSLAorCisJWzB4MTRdID0gS0VZX1JFQ09SRCwKKwlbMHgxNV0gPSBLRVlfU1RPUCwKKwlbMHgxNl0gPSBLRVlfUExBWSwKKwlbMHgxN10gPSBLRVlfTVVURSwKKworCVsweDE4XSA9IEtFWV9VUCwKKwlbMHgxOV0gPSBLRVlfRE9XTiwKKwlbMHgxYV0gPSBLRVlfTEVGVCwKKwlbMHgxYl0gPSBLRVlfUklHSFQsCisKKwlbMHgxY10gPSBLRVlfUkVELAorCVsweDFkXSA9IEtFWV9HUkVFTiwKKwlbMHgxZV0gPSBLRVlfWUVMTE9XLAorCVsweDFmXSA9IEtFWV9CTFVFLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2thaW9teSk7CisKIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYV9hMTZkW0lSX0tFWVRBQl9TSVpFXSA9IHsKIAlbMHgyMF0gPSBLRVlfTElTVCwKIAlbMHgwMF0gPSBLRVlfUE9XRVIsCkBAIC0yNjA0LDMgKzI3MTIsNDEgQEAKIH07CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2F0aV90dl93b25kZXJfaGRfNjAwKTsKKworLyogRFZCV29ybGQgcmVtb3RlcworICAgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBtZS5ieT4KKyAqLworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZG0xMTA1X25lY1tJUl9LRVlUQUJfU0laRV0gPSB7CisJWzB4MGFdID0gS0VZX1EsCQkvKnBvd2VyKi8KKwlbMHgwY10gPSBLRVlfTSwJCS8qbXV0ZSovCisJWzB4MTFdID0gS0VZXzEsCisJWzB4MTJdID0gS0VZXzIsCisJWzB4MTNdID0gS0VZXzMsCisJWzB4MTRdID0gS0VZXzQsCisJWzB4MTVdID0gS0VZXzUsCisJWzB4MTZdID0gS0VZXzYsCisJWzB4MTddID0gS0VZXzcsCisJWzB4MThdID0gS0VZXzgsCisJWzB4MTldID0gS0VZXzksCisJWzB4MTBdID0gS0VZXzAsCisJWzB4MWNdID0gS0VZX1BBR0VVUCwJLypjaCsqLworCVsweDBmXSA9IEtFWV9QQUdFRE9XTiwJLypjaC0qLworCVsweDFhXSA9IEtFWV9PLAkJLyp2b2wrKi8KKwlbMHgwZV0gPSBLRVlfWiwJCS8qdm9sLSovCisJWzB4MDRdID0gS0VZX1IsCQkvKnJlYyovCisJWzB4MDldID0gS0VZX0QsCQkvKmZhdiovCisJWzB4MDhdID0gS0VZX0JBQ0tTUEFDRSwJLypyZXdpbmQqLworCVsweDA3XSA9IEtFWV9BLAkJLypmYXN0Ki8KKwlbMHgwYl0gPSBLRVlfUCwJCS8qcGF1c2UqLworCVsweDAyXSA9IEtFWV9FU0MsCS8qY2FuY2VsKi8KKwlbMHgwM10gPSBLRVlfRywJCS8qdGFiKi8KKwlbMHgwMF0gPSBLRVlfVVAsCS8qdXAqLworCVsweDFmXSA9IEtFWV9FTlRFUiwJLypvayovCisJWzB4MDFdID0gS0VZX0RPV04sCS8qZG93biovCisJWzB4MDVdID0gS0VZX0MsCQkvKmNhcCovCisJWzB4MDZdID0gS0VZX1MsCQkvKnN0b3AqLworCVsweDQwXSA9IEtFWV9GLAkJLypmdWxsKi8KKwlbMHgxZV0gPSBLRVlfVywJCS8qdHZtb2RlKi8KKwlbMHgxYl0gPSBLRVlfQiwJCS8qcmVjYWxsKi8KK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19kbTExMDVfbmVjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfY29yZS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9jb3JlLmMKaW5kZXggZDU5OWQzNi4uOTgyZjAwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9jb3JlLmMKQEAgLTQ1Miw4ICs0NTIsNiBAQAogCUlORk8oKCJmb3VuZCBzYWE3MTQ2IEAgbWVtICVwIChyZXZpc2lvbiAlZCwgaXJxICVkKSAoMHglMDR4LDB4JTA0eCkuXG4iLCBkZXYtPm1lbSwgZGV2LT5yZXZpc2lvbiwgcGNpLT5pcnEsIHBjaS0+c3Vic3lzdGVtX3ZlbmRvciwgcGNpLT5zdWJzeXN0ZW1fZGV2aWNlKSk7CiAJZGV2LT5leHQgPSBleHQ7CiAKLQlwY2lfc2V0X2RydmRhdGEocGNpLCBkZXYpOwotCiAJbXV0ZXhfaW5pdCgmZGV2LT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5pbnRfc2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZkZXYtPnNsb2NrKTsKQEAgLTQ3Nyw4ICs0NzUsMTIgQEAKIAogCWlmIChleHQtPmF0dGFjaChkZXYsIHBjaV9leHQpKSB7CiAJCURFQl9EKCgiZXh0LT5hdHRhY2goKSBmYWlsZWQgZm9yICVwLiBza2lwcGluZyBkZXZpY2UuXG4iLGRldikpOwotCQlnb3RvIGVycl91bnByb2JlOworCQlnb3RvIGVycl9mcmVlX2kyYzsKIAl9CisJLyogVjRMIGV4dGVuc2lvbnMgd2lsbCBzZXQgdGhlIHBjaSBkcnZkYXRhIHRvIHRoZSB2NGwyX2RldmljZSBpbiB0aGUKKwkgICBhdHRhY2goKSBhYm92ZS4gU28gZm9yIHRob3NlIGNhcmRzIHRoYXQgZG8gbm90IHVzZSBWNEwgd2UgaGF2ZSB0bworCSAgIHNldCBpdCBleHBsaWNpdGx5LiAqLworCXBjaV9zZXRfZHJ2ZGF0YShwY2ksICZkZXYtPnY0bDJfZGV2KTsKIAogCUlOSVRfTElTVF9IRUFEKCZkZXYtPml0ZW0pOwogCWxpc3RfYWRkX3RhaWwoJmRldi0+aXRlbSwmc2FhNzE0Nl9kZXZpY2VzKTsKQEAgLTQ4OCw4ICs0OTAsNiBAQAogb3V0OgogCXJldHVybiBlcnI7CiAKLWVycl91bnByb2JlOgotCXBjaV9zZXRfZHJ2ZGF0YShwY2ksIE5VTEwpOwogZXJyX2ZyZWVfaTJjOgogCXBjaV9mcmVlX2NvbnNpc3RlbnQocGNpLCBTQUE3MTQ2X1JQU19NRU0sIGRldi0+ZF9pMmMuY3B1X2FkZHIsCiAJCQkgICAgZGV2LT5kX2kyYy5kbWFfaGFuZGxlKTsKQEAgLTUxNCw3ICs1MTQsOCBAQAogCiBzdGF0aWMgdm9pZCBzYWE3MTQ2X3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IHRvX3NhYTcxNDZfZGV2KHY0bDJfZGV2KTsKIAlzdHJ1Y3QgewogCQl2b2lkICphZGRyOwogCQlkbWFfYWRkcl90IGRtYTsKQEAgLTUyOCw2ICs1MjksOCBAQAogCURFQl9FRSgoImRldjolcFxuIixkZXYpKTsKIAogCWRldi0+ZXh0LT5kZXRhY2goZGV2KTsKKwkvKiBaZXJvIHRoZSBQQ0kgZHJ2ZGF0YSBhZnRlciB1c2UuICovCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJLyogc2h1dCBkb3duIGFsbCB2aWRlbyBkbWEgdHJhbnNmZXJzICovCiAJc2FhNzE0Nl93cml0ZShkZXYsIE1DMSwgMHgwMGZmMDAwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jCmluZGV4IGNmMDZmNGQuLjYyMGY2NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jCkBAIC0zMDgsMTQgKzMwOCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBsb25nIGZvcHNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotLyoKLQlERUJfRUUoKCJmaWxlOiVwLCBjbWQ6JWQsIGFyZzolbGlcbiIsIGZpbGUsIGNtZCwgYXJnKSk7Ci0qLwotCXJldHVybiB2aWRlb191c2VyY29weShmaWxlLCBjbWQsIGFyZywgc2FhNzE0Nl92aWRlb19kb19pb2N0bCk7Ci19Ci0KIHN0YXRpYyBpbnQgZm9wc19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpCiB7CiAJc3RydWN0IHNhYTcxNDZfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwpAQCAtNDI1LDcgKzQxNyw3IEBACiAJLndyaXRlCQk9IGZvcHNfd3JpdGUsCiAJLnBvbGwJCT0gZm9wc19wb2xsLAogCS5tbWFwCQk9IGZvcHNfbW1hcCwKLQkuaW9jdGwJCT0gZm9wc19pb2N0bCwKKwkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogfTsKIAogc3RhdGljIHZvaWQgdnZfY2FsbGJhY2soc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgc3RhdHVzKQpAQCAtNDUyLDE5ICs0NDQsMjIgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGRldmljZV90ZW1wbGF0ZSA9Ci17Ci0JLmZvcHMJCT0gJnZpZGVvX2ZvcHMsCi0JLm1pbm9yCQk9IC0xLAotfTsKLQogaW50IHNhYTcxNDZfdnZfaW5pdChzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldiwgc3RydWN0IHNhYTcxNDZfZXh0X3Z2ICpleHRfdnYpCiB7Ci0Jc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0ga3phbGxvYyAoc2l6ZW9mKHN0cnVjdCBzYWE3MTQ2X3Z2KSxHRlBfS0VSTkVMKTsKLQlpZiggTlVMTCA9PSB2diApIHsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnY7CisJaW50IGVycjsKKworCWVyciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPnBjaS0+ZGV2LCAmZGV2LT52NGwyX2Rldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXZ2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxNDZfdnYpLCBHRlBfS0VSTkVMKTsKKwlpZiAodnYgPT0gTlVMTCkgewogCQlFUlIoKCJvdXQgb2YgbWVtb3J5LiBhYm9ydGluZy5cbiIpKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJZXh0X3Z2LT5vcHMgPSBzYWE3MTQ2X3ZpZGVvX2lvY3RsX29wczsKKwlleHRfdnYtPmNvcmVfb3BzID0gJnNhYTcxNDZfdmlkZW9faW9jdGxfb3BzOwogCiAJREVCX0VFKCgiZGV2OiVwXG4iLGRldikpOwogCkBAIC01MDcsNiArNTAyLDcgQEAKIAogCURFQl9FRSgoImRldjolcFxuIixkZXYpKTsKIAorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOwogCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wY2ksIFNBQTcxNDZfQ0xJUFBJTkdfTUVNLCB2di0+ZF9jbGlwcGluZy5jcHVfYWRkciwgdnYtPmRfY2xpcHBpbmcuZG1hX2hhbmRsZSk7CiAJa2ZyZWUodnYpOwogCWRldi0+dnZfZGF0YSA9IE5VTEw7CkBAIC01MjEsNiArNTE3LDggQEAKIHsKIAlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkOworCWludCBlcnI7CisJaW50IGk7CiAKIAlERUJfRUUoKCJkZXY6JXAsIG5hbWU6JyVzJywgdHlwZTolZFxuIixkZXYsbmFtZSx0eXBlKSk7CiAKQEAgLTUyOSwxNiArNTI3LDIwIEBACiAJaWYgKHZmZCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbWNweSh2ZmQsICZkZXZpY2VfdGVtcGxhdGUsIHNpemVvZihzdHJ1Y3QgdmlkZW9fZGV2aWNlKSk7Ci0Jc3RybGNweSh2ZmQtPm5hbWUsIG5hbWUsIHNpemVvZih2ZmQtPm5hbWUpKTsKKwl2ZmQtPmZvcHMgPSAmdmlkZW9fZm9wczsKKwl2ZmQtPmlvY3RsX29wcyA9ICZkZXYtPmV4dF92dl9kYXRhLT5vcHM7CiAJdmZkLT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisJdmZkLT50dm5vcm1zID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5leHRfdnZfZGF0YS0+bnVtX3N0ZHM7IGkrKykKKwkJdmZkLT50dm5vcm1zIHw9IGRldi0+ZXh0X3Z2X2RhdGEtPnN0ZHNbaV0uaWQ7CisJc3RybGNweSh2ZmQtPm5hbWUsIG5hbWUsIHNpemVvZih2ZmQtPm5hbWUpKTsKIAl2aWRlb19zZXRfZHJ2ZGF0YSh2ZmQsIGRldik7CiAKLQkvLyBmaXhtZTogLTEgc2hvdWxkIGJlIGFuIGluc21vZCBwYXJhbWV0ZXIgKmZvciB0aGUgZXh0ZW5zaW9uKiAobGlrZSAidmlkZW9fbnIiKTsKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZmZCwgdHlwZSwgLTEpIDwgMCkgeworCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZmQsIHR5cGUsIC0xKTsKKwlpZiAoZXJyIDwgMCkgewogCQlFUlIoKCJjYW5ub3QgcmVnaXN0ZXIgdjRsMiBkZXZpY2UuIHNraXBwaW5nLlxuIikpOwogCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh2ZmQpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiBlcnI7CiAJfQogCiAJaWYoIFZGTF9UWVBFX0dSQUJCRVIgPT0gdHlwZSApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfaTJjLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2kyYy5jCmluZGV4IGMxMWRhNGQuLjdlOGY1NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9pMmMuYwpAQCAtMjkzLDcgKzI5Myw2IEBACiAJaW50IGkgPSAwLCBjb3VudCA9IDA7CiAJX19sZTMyICpidWZmZXIgPSBkZXYtPmRfaTJjLmNwdV9hZGRyOwogCWludCBlcnIgPSAwOwotCWludCBhZGRyZXNzX2VyciA9IDA7CiAJaW50IHNob3J0X2RlbGF5ID0gMDsKIAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+aTJjX2xvY2spKQpAQCAtMzMzLDE3ICszMzIsMTAgQEAKIAkJCQkgICBpMmMgYWRkcmVzcyBwcm9iaW5nLCBob3dldmVyLCBhbmQgYWRkcmVzcyBlcnJvcnMgaW5kaWNhdGUgdGhhdCBhCiAJCQkJICAgZGV2aWNlIGlzIHJlYWxseSAqbm90KiB0aGVyZS4gcmV0cnlpbmcgaW4gdGhhdCBjYXNlCiAJCQkJICAgaW5jcmVhc2VzIHRoZSB0aW1lIHRoZSBkZXZpY2UgbmVlZHMgdG8gcHJvYmUgZ3JlYXRseSwgc28KLQkJCQkgICBpdCBzaG91bGQgYmUgYXZvaWRlZC4gYmVjYXVzZSBvZiB0aGUgZmFjdCwgdGhhdCBvbmx5Ci0JCQkJICAgYW5hbG9nIGJhc2VkIGNhcmRzIHVzZSBpcnEgYmFzZWQgaTJjIHRyYW5zYWN0aW9ucyAoZm9yIGR2YgotCQkJCSAgIGNhcmRzLCB0aGlzIHNjcmV3ZXMgdXAgb3RoZXIgaW50ZXJydXB0IHNvdXJjZXMpLCB3ZSBiYWlsIG91dAotCQkJCSAgIGNvbXBsZXRlbHkgZm9yIGFuYWxvZyBjYXJkcyBhZnRlciBhbiBhZGRyZXNzIGVycm9yIGFuZCB0cnVzdAotCQkJCSAgIHRoZSBzYWE3MTQ2IGFkZHJlc3MgZXJyb3IgZGV0ZWN0aW9uLiAqLwotCQkJCWlmICggLUVSRU1PVEVJTyA9PSBlcnIgKSB7Ci0JCQkJCWlmKCAwICE9IChTQUE3MTQ2X1VTRV9JMkNfSVJRICYgZGV2LT5leHQtPmZsYWdzKSkgewotCQkJCQkJZ290byBvdXQ7Ci0JCQkJCX0KLQkJCQkJYWRkcmVzc19lcnIrKzsKLQkJCQl9CisJCQkJICAgaXQgc2hvdWxkIGJlIGF2b2lkZWQuIFNvIHdlIGJhaWwgb3V0IGluIGlycSBtb2RlIGFmdGVyIGFuCisJCQkJICAgYWRkcmVzcyBlcnJvciBhbmQgdHJ1c3QgdGhlIHNhYTcxNDYgYWRkcmVzcyBlcnJvciBkZXRlY3Rpb24uICovCisJCQkJaWYgKC1FUkVNT1RFSU8gPT0gZXJyICYmIDAgIT0gKFNBQTcxNDZfVVNFX0kyQ19JUlEgJiBkZXYtPmV4dC0+ZmxhZ3MpKQorCQkJCQlnb3RvIG91dDsKIAkJCQlERUJfSTJDKCgiZXJyb3Igd2hpbGUgc2VuZGluZyBtZXNzYWdlKHMpLiBzdGFydGluZyBhZ2Fpbi5cbiIpKTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTM1OCwxMCArMzUwLDkgQEAKIAogCX0gd2hpbGUgKGVyciAhPSBudW0gJiYgcmV0cmllcy0tKTsKIAotCS8qIGlmIGV2ZXJ5IHJldHJ5IGhhZCBhbiBhZGRyZXNzIGVycm9yLCBleGl0IHJpZ2h0IGF3YXkgKi8KLQlpZiAoYWRkcmVzc19lcnIgPT0gcmV0cmllcykgeworCS8qIHF1aXQgaWYgYW55IGVycm9yIG9jY3VycmVkICovCisJaWYgKGVyciAhPSBudW0pCiAJCWdvdG8gb3V0OwotCX0KIAogCS8qIGlmIGFueSB0aGluZ3MgaGFkIHRvIGJlIHJlYWQsIGdldCB0aGUgcmVzdWx0cyAqLwogCWlmICggMCAhPSBzYWE3MTQ2X2kyY19tc2dfY2xlYW51cChtc2dzLCBudW0sIGJ1ZmZlcikpIHsKQEAgLTM5MCw3ICszODEsOCBAQAogLyogdXRpbGl0eSBmdW5jdGlvbnMgKi8KIHN0YXRpYyBpbnQgc2FhNzE0Nl9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGFkYXB0ZXIsIHN0cnVjdCBpMmNfbXNnICptc2csIGludCBudW0pCiB7Ci0Jc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gdG9fc2FhNzE0Nl9kZXYodjRsMl9kZXYpOwogCiAJLyogdXNlIGhlbHBlciBmdW5jdGlvbiB0byB0cmFuc2ZlciBkYXRhICovCiAJcmV0dXJuIHNhYTcxNDZfaTJjX3RyYW5zZmVyKGRldiwgbXNnLCBudW0sIGFkYXB0ZXItPnJldHJpZXMpOwpAQCAtNDE3LDkgKzQwOSw4IEBACiAJZGV2LT5pMmNfYml0cmF0ZSA9IGJpdHJhdGU7CiAJc2FhNzE0Nl9pMmNfcmVzZXQoZGV2KTsKIAotCWlmKCBOVUxMICE9IGkyY19hZGFwdGVyICkgewotCQlCVUdfT04oIWkyY19hZGFwdGVyLT5jbGFzcyk7Ci0JCWkyY19zZXRfYWRhcGRhdGEoaTJjX2FkYXB0ZXIsZGV2KTsKKwlpZiAoaTJjX2FkYXB0ZXIpIHsKKwkJaTJjX3NldF9hZGFwZGF0YShpMmNfYWRhcHRlciwgJmRldi0+djRsMl9kZXYpOwogCQlpMmNfYWRhcHRlci0+ZGV2LnBhcmVudCAgICA9ICZkZXYtPnBjaS0+ZGV2OwogCQlpMmNfYWRhcHRlci0+YWxnbwkgICA9ICZzYWE3MTQ2X2FsZ287CiAJCWkyY19hZGFwdGVyLT5hbGdvX2RhdGEgICAgID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYwppbmRleCA0N2ZlZTA1Li41NTJkYWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPG1lZGlhL3NhYTcxNDZfdnYuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KIAogc3RhdGljIGludCBtYXhfbWVtb3J5ID0gMzI7CiAKQEAgLTk3LDE3MiArOTgsMTMgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBnX2ZtdChzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKLXsKLQlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7Ci0JREVCX0VFKCgiZGV2OiVwLCBmaDolcFxuIixkZXYsZmgpKTsKLQotCXN3aXRjaCAoZi0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQlmLT5mbXQucGl4ID0gZmgtPnZpZGVvX2ZtdDsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JCWYtPmZtdC53aW4gPSBmaC0+b3Yud2luOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6Ci0JewotCQlmLT5mbXQudmJpID0gZmgtPnZiaV9mbXQ7Ci0JCXJldHVybiAwOwotCX0KLQlkZWZhdWx0OgotCQlERUJfRCgoImludmFsaWQgZm9ybWF0IHR5cGUgJyVkJy5cbiIsZi0+dHlwZSkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgdHJ5X3dpbihzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgc3RydWN0IHY0bDJfd2luZG93ICp3aW4pCi17Ci0Jc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOwotCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKLQlpbnQgbWF4dywgbWF4aDsKLQotCURFQl9FRSgoImRldjolcFxuIixkZXYpKTsKLQotCWlmIChOVUxMID09IHZ2LT5vdl9mYi5iYXNlKSB7Ci0JCURFQl9EKCgibm8gZmIgYmFzZSBzZXQuXG4iKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAoTlVMTCA9PSB2di0+b3ZfZm10KSB7Ci0JCURFQl9EKCgibm8gZmIgZm10IHNldC5cbiIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmICh3aW4tPncud2lkdGggPCA0OCB8fCB3aW4tPncuaGVpZ2h0IDwgIDMyKSB7Ci0JCURFQl9EKCgibWluIHdpZHRoL2hlaWdodC4gKCVkLCVkKVxuIix3aW4tPncud2lkdGgsd2luLT53LmhlaWdodCkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKHdpbi0+Y2xpcGNvdW50ID4gMTYpIHsKLQkJREVCX0QoKCJjbGlwY291bnQgdG9vIGJpZy5cbiIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZmllbGQgPSB3aW4tPmZpZWxkOwotCW1heHcgID0gdnYtPnN0YW5kYXJkLT5oX21heF9vdXQ7Ci0JbWF4aCAgPSB2di0+c3RhbmRhcmQtPnZfbWF4X291dDsKLQotCWlmIChWNEwyX0ZJRUxEX0FOWSA9PSBmaWVsZCkgewotCQlmaWVsZCA9ICh3aW4tPncuaGVpZ2h0ID4gbWF4aC8yKQotCQkJPyBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQKLQkJCTogVjRMMl9GSUVMRF9UT1A7Ci0JCX0KLQlzd2l0Y2ggKGZpZWxkKSB7Ci0JY2FzZSBWNEwyX0ZJRUxEX1RPUDoKLQljYXNlIFY0TDJfRklFTERfQk9UVE9NOgotCWNhc2UgVjRMMl9GSUVMRF9BTFRFUk5BVEU6Ci0JCW1heGggPSBtYXhoIC8gMjsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6IHsKLQkJREVCX0QoKCJubyBrbm93biBmaWVsZCBtb2RlICclZCcuXG4iLGZpZWxkKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQl9Ci0KLQl3aW4tPmZpZWxkID0gZmllbGQ7Ci0JaWYgKHdpbi0+dy53aWR0aCA+IG1heHcpCi0JCXdpbi0+dy53aWR0aCA9IG1heHc7Ci0JaWYgKHdpbi0+dy5oZWlnaHQgPiBtYXhoKQotCQl3aW4tPncuaGVpZ2h0ID0gbWF4aDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHRyeV9mbXQoc3RydWN0IHNhYTcxNDZfZmggKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCi17Ci0Jc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKLQlpbnQgZXJyOwotCi0Jc3dpdGNoIChmLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JewotCQlzdHJ1Y3Qgc2FhNzE0Nl9mb3JtYXQgKmZtdDsKLQkJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOwotCQlpbnQgbWF4dywgbWF4aDsKLQkJaW50IGNhbGNfYnBsOwotCi0JCURFQl9FRSgoIlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogZGV2OiVwLCBmaDolcFxuIixkZXYsZmgpKTsKLQotCQlmbXQgPSBmb3JtYXRfYnlfZm91cmNjKGRldixmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKLQkJaWYgKE5VTEwgPT0gZm10KSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKLQkJbWF4dyAgPSB2di0+c3RhbmRhcmQtPmhfbWF4X291dDsKLQkJbWF4aCAgPSB2di0+c3RhbmRhcmQtPnZfbWF4X291dDsKLQotCQlpZiAoVjRMMl9GSUVMRF9BTlkgPT0gZmllbGQpIHsKLQkJCWZpZWxkID0gKGYtPmZtdC5waXguaGVpZ2h0ID4gbWF4aC8yKQotCQkJCT8gVjRMMl9GSUVMRF9JTlRFUkxBQ0VECi0JCQkJOiBWNEwyX0ZJRUxEX0JPVFRPTTsKLQkJfQotCQlzd2l0Y2ggKGZpZWxkKSB7Ci0JCWNhc2UgVjRMMl9GSUVMRF9BTFRFUk5BVEU6IHsKLQkJCXZ2LT5sYXN0X2ZpZWxkID0gVjRMMl9GSUVMRF9UT1A7Ci0JCQltYXhoID0gbWF4aCAvIDI7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFY0TDJfRklFTERfVE9QOgotCQljYXNlIFY0TDJfRklFTERfQk9UVE9NOgotCQkJdnYtPmxhc3RfZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7Ci0JCQltYXhoID0gbWF4aCAvIDI7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6Ci0JCQl2di0+bGFzdF9maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OiB7Ci0JCQlERUJfRCgoIm5vIGtub3duIGZpZWxkIG1vZGUgJyVkJy5cbiIsZmllbGQpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCX0KLQotCQlmLT5mbXQucGl4LmZpZWxkID0gZmllbGQ7Ci0JCWlmIChmLT5mbXQucGl4LndpZHRoID4gbWF4dykKLQkJCWYtPmZtdC5waXgud2lkdGggPSBtYXh3OwotCQlpZiAoZi0+Zm10LnBpeC5oZWlnaHQgPiBtYXhoKQotCQkJZi0+Zm10LnBpeC5oZWlnaHQgPSBtYXhoOwotCi0JCWNhbGNfYnBsID0gKGYtPmZtdC5waXgud2lkdGggKiBmbXQtPmRlcHRoKS84OwotCi0JCWlmIChmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA8IGNhbGNfYnBsKQotCQkJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBjYWxjX2JwbDsKLQotCQlpZiAoZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPiAoMipQQUdFX1NJWkUgKiBmbXQtPmRlcHRoKS84KSAvKiBhcmJpdHJhcnkgY29uc3RyYWludCAqLwotCQkJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBjYWxjX2JwbDsKLQotCQlmLT5mbXQucGl4LnNpemVpbWFnZSA9IGYtPmZtdC5waXguYnl0ZXNwZXJsaW5lICogZi0+Zm10LnBpeC5oZWlnaHQ7Ci0JCURFQl9EKCgidzolZCwgaDolZCwgYnl0ZXNwZXJsaW5lOiVkLCBzaXplaW1hZ2U6JWRcbiIsZi0+Zm10LnBpeC53aWR0aCxmLT5mbXQucGl4LmhlaWdodCxmLT5mbXQucGl4LmJ5dGVzcGVybGluZSxmLT5mbXQucGl4LnNpemVpbWFnZSkpOwotCi0JCXJldHVybiAwOwotCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQkJREVCX0VFKCgiVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOiBkZXY6JXAsIGZoOiVwXG4iLGRldixmaCkpOwotCQllcnIgPSB0cnlfd2luKGRldiwmZi0+Zm10Lndpbik7Ci0JCWlmICgwICE9IGVycikgewotCQkJcmV0dXJuIGVycjsKLQkJfQotCQlyZXR1cm4gMDsKLQlkZWZhdWx0OgotCQlERUJfRUUoKCJ1bmtub3duIGZvcm1hdCB0eXBlICclZCdcbiIsZi0+dHlwZSkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci19CitzdGF0aWMgaW50IHZpZGlvY190cnlfZm10X3ZpZF9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKTsKIAogaW50IHNhYTcxNDZfc3RhcnRfcHJldmlldyhzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgpCiB7CiAJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKKwlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10OwogCWludCByZXQgPSAwLCBlcnIgPSAwOwogCiAJREVCX0VFKCgiZGV2OiVwLCBmaDolcFxuIixkZXYsZmgpKTsKQEAgLTI5NCwxMiArMTM2LDEzIEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JZXJyID0gdHJ5X3dpbihkZXYsJmZoLT5vdi53aW4pOworCWZtdC5mbXQud2luID0gZmgtPm92LndpbjsKKwllcnIgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfb3ZlcmxheShOVUxMLCBmaCwgJmZtdCk7CiAJaWYgKDAgIT0gZXJyKSB7CiAJCXNhYTcxNDZfcmVzX2ZyZWUodnYtPnZpZGVvX2ZoLCBSRVNPVVJDRV9ETUExX0hQU3xSRVNPVVJDRV9ETUEyX0NMUCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQotCisJZmgtPm92LndpbiA9IGZtdC5mbXQud2luOwogCXZ2LT5vdl9kYXRhID0gJmZoLT5vdjsKIAogCURFQl9EKCgiJWR4JWQrJWQrJWQgJXMgZmllbGQ9JXNcbiIsCkBAIC0zNTUsNTggKzE5OCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzYWE3MTQ2X3N0b3BfcHJldmlldyk7CiAKLXN0YXRpYyBpbnQgc19mbXQoc3RydWN0IHNhYTcxNDZfZmggKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCi17Ci0Jc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKLQotCWludCBlcnI7Ci0KLQlzd2l0Y2ggKGYtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJREVCX0VFKCgiVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiBkZXY6JXAsIGZoOiVwXG4iLGRldixmaCkpOwotCQlpZiAoSVNfQ0FQVFVSRV9BQ1RJVkUoZmgpICE9IDApIHsKLQkJCURFQl9FRSgoInN0cmVhbWluZyBjYXB0dXJlIGlzIGFjdGl2ZVxuIikpOwotCQkJcmV0dXJuIC1FQlVTWTsKLQkJfQotCQllcnIgPSB0cnlfZm10KGZoLGYpOwotCQlpZiAoMCAhPSBlcnIpCi0JCQlyZXR1cm4gZXJyOwotCQlmaC0+dmlkZW9fZm10ID0gZi0+Zm10LnBpeDsKLQkJREVCX0VFKCgic2V0IHRvIHBpeGVsZm9ybWF0ICclNC40cydcbiIsKGNoYXIgKikmZmgtPnZpZGVvX2ZtdC5waXhlbGZvcm1hdCkpOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQkJREVCX0VFKCgiVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOiBkZXY6JXAsIGZoOiVwXG4iLGRldixmaCkpOwotCQllcnIgPSB0cnlfd2luKGRldiwmZi0+Zm10Lndpbik7Ci0JCWlmICgwICE9IGVycikKLQkJCXJldHVybiBlcnI7Ci0JCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0JCWZoLT5vdi53aW4gICAgPSBmLT5mbXQud2luOwotCQlmaC0+b3YubmNsaXBzID0gZi0+Zm10Lndpbi5jbGlwY291bnQ7Ci0JCWlmIChmaC0+b3YubmNsaXBzID4gMTYpCi0JCQlmaC0+b3YubmNsaXBzID0gMTY7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihmaC0+b3YuY2xpcHMsZi0+Zm10Lndpbi5jbGlwcyxzaXplb2Yoc3RydWN0IHY0bDJfY2xpcCkqZmgtPm92Lm5jbGlwcykpIHsKLQkJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0KLQkJLyogZmgtPm92LmZoIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB3ZSBoYXZlIHZhbGlkIG92ZXJsYXkgaW5mb3JtYXRpb25zLCB0b28gKi8KLQkJZmgtPm92LmZoID0gZmg7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCi0JCS8qIGNoZWNrIGlmIG91ciBjdXJyZW50IG92ZXJsYXkgaXMgYWN0aXZlICovCi0JCWlmIChJU19PVkVSTEFZX0FDVElWRShmaCkgIT0gMCkgewotCQkJc2FhNzE0Nl9zdG9wX3ByZXZpZXcoZmgpOwotCQkJc2FhNzE0Nl9zdGFydF9wcmV2aWV3KGZoKTsKLQkJfQotCQlyZXR1cm4gMDsKLQlkZWZhdWx0OgotCQlERUJfRCgoInVua25vd24gZm9ybWF0IHR5cGUgJyVkJ1xuIixmLT50eXBlKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogZGV2aWNlIGNvbnRyb2xzICovCiAKQEAgLTQxOSw2ICsyMTAsNyBAQAogCQkuc3RlcAkJPSAxLAogCQkuZGVmYXVsdF92YWx1ZQk9IDEyOCwKIAkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLmZsYWdzIAkJPSBWNEwyX0NUUkxfRkxBR19TTElERVIsCiAJfSx7CiAJCS5pZAkJPSBWNEwyX0NJRF9DT05UUkFTVCwKIAkJLm5hbWUJCT0gIkNvbnRyYXN0IiwKQEAgLTQyNyw2ICsyMTksNyBAQAogCQkuc3RlcAkJPSAxLAogCQkuZGVmYXVsdF92YWx1ZQk9IDY0LAogCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkuZmxhZ3MgCQk9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUiwKIAl9LHsKIAkJLmlkCQk9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCiAJCS5uYW1lCQk9ICJTYXR1cmF0aW9uIiwKQEAgLTQzNSwxNSArMjI4LDE2IEBACiAJCS5zdGVwCQk9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlCT0gNjQsCiAJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5mbGFncyAJCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSLAogCX0sewogCQkuaWQJCT0gVjRMMl9DSURfVkZMSVAsCi0JCS5uYW1lCQk9ICJWZXJ0aWNhbCBmbGlwIiwKKwkJLm5hbWUJCT0gIlZlcnRpY2FsIEZsaXAiLAogCQkubWluaW11bQk9IDAsCiAJCS5tYXhpbXVtCT0gMSwKIAkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKIAl9LHsKIAkJLmlkCQk9IFY0TDJfQ0lEX0hGTElQLAotCQkubmFtZQkJPSAiSG9yaXpvbnRhbCBmbGlwIiwKKwkJLm5hbWUJCT0gIkhvcml6b250YWwgRmxpcCIsCiAJCS5taW5pbXVtCT0gMCwKIAkJLm1heGltdW0JPSAxLAogCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLApAQCAtNDYzLDEzMiArMjU3LDYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBnZXRfY29udHJvbChzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmMpCi17Ci0Jc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKLQotCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCogY3RybDsKLQl1MzIgdmFsdWUgPSAwOwotCi0JY3RybCA9IGN0cmxfYnlfaWQoYy0+aWQpOwotCWlmIChOVUxMID09IGN0cmwpCi0JCXJldHVybiAtRUlOVkFMOwotCXN3aXRjaCAoYy0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCXZhbHVlID0gc2FhNzE0Nl9yZWFkKGRldiwgQkNTX0NUUkwpOwotCQljLT52YWx1ZSA9IDB4ZmYgJiAodmFsdWUgPj4gMjQpOwotCQlERUJfRCgoIlY0TDJfQ0lEX0JSSUdIVE5FU1M6ICVkXG4iLGMtPnZhbHVlKSk7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6Ci0JCXZhbHVlID0gc2FhNzE0Nl9yZWFkKGRldiwgQkNTX0NUUkwpOwotCQljLT52YWx1ZSA9IDB4N2YgJiAodmFsdWUgPj4gMTYpOwotCQlERUJfRCgoIlY0TDJfQ0lEX0NPTlRSQVNUOiAlZFxuIixjLT52YWx1ZSkpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JCXZhbHVlID0gc2FhNzE0Nl9yZWFkKGRldiwgQkNTX0NUUkwpOwotCQljLT52YWx1ZSA9IDB4N2YgJiAodmFsdWUgPj4gMCk7Ci0JCURFQl9EKCgiVjRMMl9DSURfU0FUVVJBVElPTjogJWRcbiIsYy0+dmFsdWUpKTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9WRkxJUDoKLQkJYy0+dmFsdWUgPSB2di0+dmZsaXA7Ci0JCURFQl9EKCgiVjRMMl9DSURfVkZMSVA6ICVkXG4iLGMtPnZhbHVlKSk7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfSEZMSVA6Ci0JCWMtPnZhbHVlID0gdnYtPmhmbGlwOwotCQlERUJfRCgoIlY0TDJfQ0lEX0hGTElQOiAlZFxuIixjLT52YWx1ZSkpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzZXRfY29udHJvbChzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmMpCi17Ci0Jc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKLQotCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCogY3RybDsKLQotCWN0cmwgPSBjdHJsX2J5X2lkKGMtPmlkKTsKLQlpZiAoTlVMTCA9PSBjdHJsKSB7Ci0JCURFQl9EKCgidW5rbm93biBjb250cm9sICVkXG4iLGMtPmlkKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0KLQlzd2l0Y2ggKGN0cmwtPnR5cGUpIHsKLQljYXNlIFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU46Ci0JY2FzZSBWNEwyX0NUUkxfVFlQRV9NRU5VOgotCWNhc2UgVjRMMl9DVFJMX1RZUEVfSU5URUdFUjoKLQkJaWYgKGMtPnZhbHVlIDwgY3RybC0+bWluaW11bSkKLQkJCWMtPnZhbHVlID0gY3RybC0+bWluaW11bTsKLQkJaWYgKGMtPnZhbHVlID4gY3RybC0+bWF4aW11bSkKLQkJCWMtPnZhbHVlID0gY3RybC0+bWF4aW11bTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogbm90aGluZyAqLzsKLQl9OwotCi0Jc3dpdGNoIChjLT5pZCkgewotCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzogewotCQl1MzIgdmFsdWUgPSBzYWE3MTQ2X3JlYWQoZGV2LCBCQ1NfQ1RSTCk7Ci0JCXZhbHVlICY9IDB4MDBmZmZmZmY7Ci0JCXZhbHVlIHw9IChjLT52YWx1ZSA8PCAyNCk7Ci0JCXNhYTcxNDZfd3JpdGUoZGV2LCBCQ1NfQ1RSTCwgdmFsdWUpOwotCQlzYWE3MTQ2X3dyaXRlKGRldiwgTUMyLCBNQVNLXzIyIHwgTUFTS18wNiApOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWNEwyX0NJRF9DT05UUkFTVDogewotCQl1MzIgdmFsdWUgPSBzYWE3MTQ2X3JlYWQoZGV2LCBCQ1NfQ1RSTCk7Ci0JCXZhbHVlICY9IDB4ZmYwMGZmZmY7Ci0JCXZhbHVlIHw9IChjLT52YWx1ZSA8PCAxNik7Ci0JCXNhYTcxNDZfd3JpdGUoZGV2LCBCQ1NfQ1RSTCwgdmFsdWUpOwotCQlzYWE3MTQ2X3dyaXRlKGRldiwgTUMyLCBNQVNLXzIyIHwgTUFTS18wNiApOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOiB7Ci0JCXUzMiB2YWx1ZSA9IHNhYTcxNDZfcmVhZChkZXYsIEJDU19DVFJMKTsKLQkJdmFsdWUgJj0gMHhmZmZmZmYwMDsKLQkJdmFsdWUgfD0gKGMtPnZhbHVlIDw8IDApOwotCQlzYWE3MTQ2X3dyaXRlKGRldiwgQkNTX0NUUkwsIHZhbHVlKTsKLQkJc2FhNzE0Nl93cml0ZShkZXYsIE1DMiwgTUFTS18yMiB8IE1BU0tfMDYgKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVjRMMl9DSURfSEZMSVA6Ci0JCS8qIGZpeG1lOiB3ZSBjYW4gc3VwcG9ydCBjaGFuZ2luZyBWRkxJUCBhbmQgSEZMSVAgaGVyZS4uLiAqLwotCQlpZiAoSVNfQ0FQVFVSRV9BQ1RJVkUoZmgpICE9IDApIHsKLQkJCURFQl9EKCgiVjRMMl9DSURfSEZMSVAgd2hpbGUgYWN0aXZlIGNhcHR1cmUuXG4iKSk7Ci0JCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQl2di0+aGZsaXAgPSBjLT52YWx1ZTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9WRkxJUDoKLQkJaWYgKElTX0NBUFRVUkVfQUNUSVZFKGZoKSAhPSAwKSB7Ci0JCQlERUJfRCgoIlY0TDJfQ0lEX1ZGTElQIHdoaWxlIGFjdGl2ZSBjYXB0dXJlLlxuIikpOwotCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJdnYtPnZmbGlwID0gYy0+dmFsdWU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6IHsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JfQotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQotCWlmIChJU19PVkVSTEFZX0FDVElWRShmaCkgIT0gMCkgewotCQlzYWE3MTQ2X3N0b3BfcHJldmlldyhmaCk7Ci0JCXNhYTcxNDZfc3RhcnRfcHJldmlldyhmaCk7Ci0JfQotCXJldHVybiAwOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBjb21tb24gcGFnZXRhYmxlIGZ1bmN0aW9ucyAqLwogCkBAIC04MjksMjMxICs0OTcsNDQ2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIF9ub3RfIGNhbGxlZCBkaXJlY3RseSwgYnV0IGZyb20KLSAqIHZpZGVvX2dlbmVyaWNfaW9jdGwgKGFuZCBtYXliZSBvdGhlcnMpLiAgdXNlcnNwYWNlCi0gKiBjb3B5aW5nIGlzIGRvbmUgYWxyZWFkeSwgYXJnIGlzIGEga2VybmVsIHBvaW50ZXIuCi0gKi8KLQotbG9uZyBzYWE3MTQ2X3ZpZGVvX2RvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKIHsKLQlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKworCXN0cmNweSgoY2hhciAqKWNhcC0+ZHJpdmVyLCAic2FhNzE0NiB2NGwyIik7CisJc3RybGNweSgoY2hhciAqKWNhcC0+Y2FyZCwgZGV2LT5leHQtPm5hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKKwlzcHJpbnRmKChjaGFyICopY2FwLT5idXNfaW5mbywgIlBDSTolcyIsIHBjaV9uYW1lKGRldi0+cGNpKSk7CisJY2FwLT52ZXJzaW9uID0gU0FBNzE0Nl9WRVJTSU9OX0NPREU7CisJY2FwLT5jYXBhYmlsaXRpZXMgPQorCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKKwkJVjRMMl9DQVBfVklERU9fT1ZFUkxBWSB8CisJCVY0TDJfQ0FQX1JFQURXUklURSB8CisJCVY0TDJfQ0FQX1NUUkVBTUlORzsKKwljYXAtPmNhcGFiaWxpdGllcyB8PSBkZXYtPmV4dF92dl9kYXRhLT5jYXBhYmlsaXRpZXM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZmJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKIAlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CiAKLQlsb25nIGVyciA9IDA7Ci0JaW50IHJlc3VsdCA9IDAsIGVlID0gMDsKKwkqZmIgPSB2di0+b3ZfZmI7CisJZmItPmNhcGFiaWxpdHkgPSBWNEwyX0ZCVUZfQ0FQX0xJU1RfQ0xJUFBJTkc7CisJcmV0dXJuIDA7Cit9CiAKLQlzdHJ1Y3Qgc2FhNzE0Nl91c2Vfb3BzICpvcHM7Ci0Jc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxOworc3RhdGljIGludCB2aWRpb2Nfc19mYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZiKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKKwlzdHJ1Y3Qgc2FhNzE0Nl9mb3JtYXQgKmZtdDsKIAotCS8qIGNoZWNrIGlmIGV4dGVuc2lvbiBoYW5kbGVzIHRoZSBjb21tYW5kICovCi0JZm9yKGVlID0gMDsgZGV2LT5leHRfdnZfZGF0YS0+aW9jdGxzW2VlXS5mbGFncyAhPSAwOyBlZSsrKSB7Ci0JCWlmKCBjbWQgPT0gZGV2LT5leHRfdnZfZGF0YS0+aW9jdGxzW2VlXS5jbWQgKQotCQkJYnJlYWs7Ci0JfQorCURFQl9FRSgoIlZJRElPQ19TX0ZCVUZcbiIpKTsKIAotCWlmKCAwICE9IChkZXYtPmV4dF92dl9kYXRhLT5pb2N0bHNbZWVdLmZsYWdzICYgU0FBNzE0Nl9FWENMVVNJVkUpICkgewotCQlERUJfRCgoImV4dGVuc2lvbiBoYW5kbGVzIGlvY3RsIGV4Y2x1c2l2ZS5cbiIpKTsKLQkJcmVzdWx0ID0gZGV2LT5leHRfdnZfZGF0YS0+aW9jdGwoZmgsIGNtZCwgYXJnKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0JaWYoIDAgIT0gKGRldi0+ZXh0X3Z2X2RhdGEtPmlvY3Rsc1tlZV0uZmxhZ3MgJiBTQUE3MTQ2X0JFRk9SRSkgKSB7Ci0JCURFQl9EKCgiZXh0ZW5zaW9uIGhhbmRsZXMgaW9jdGwgYmVmb3JlLlxuIikpOwotCQlyZXN1bHQgPSBkZXYtPmV4dF92dl9kYXRhLT5pb2N0bChmaCwgY21kLCBhcmcpOwotCQlpZiggLUVBR0FJTiAhPSByZXN1bHQgKSB7Ci0JCQlyZXR1cm4gcmVzdWx0OworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSAmJiAhY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCS8qIGNoZWNrIGFyZ3MgKi8KKwlmbXQgPSBmb3JtYXRfYnlfZm91cmNjKGRldiwgZmItPmZtdC5waXhlbGZvcm1hdCk7CisJaWYgKE5VTEwgPT0gZm10KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHBsYW5hciBmb3JtYXRzIGFyZSBub3QgYWxsb3dlZCBmb3Igb3ZlcmxheSB2aWRlbywgY2xpcHBpbmcgYW5kIHZpZGVvIGRtYSB3b3VsZCBjbGFzaCAqLworCWlmIChmbXQtPmZsYWdzICYgRk9STUFUX0lTX1BMQU5BUikKKwkJREVCX1MoKCJwbGFuYXIgcGl4ZWxmb3JtYXQgJyU0LjRzJyBub3QgYWxsb3dlZCBmb3Igb3ZlcmxheVxuIiwKKwkJCQkJKGNoYXIgKikmZm10LT5waXhlbGZvcm1hdCkpOworCisJLyogY2hlY2sgaWYgb3ZlcmxheSBpcyBydW5uaW5nICovCisJaWYgKElTX09WRVJMQVlfQUNUSVZFKGZoKSAhPSAwKSB7CisJCWlmICh2di0+dmlkZW9fZmggIT0gZmgpIHsKKwkJCURFQl9EKCgicmVmdXNpbmcgdG8gY2hhbmdlIGZyYW1lYnVmZmVyIGluZm9ybWF0aW9ucyB3aGlsZSBvdmVybGF5IGlzIGFjdGl2ZSBpbiBhbm90aGVyIG9wZW4uXG4iKSk7CisJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJfQogCi0JLyogZml4bWU6IGFkZCBoYW5kbGUgImFmdGVyIiBjYXNlIChpcyBpdCBzdGlsbCBuZWVkZWQ/KSAqLworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAKLQlzd2l0Y2ggKGZoLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6IHsKLQkJb3BzID0gJnNhYTcxNDZfdmlkZW9fdW9wczsKLQkJcSA9ICZmaC0+dmlkZW9fcTsKKwkvKiBvaywgYWNjZXB0IGl0ICovCisJdnYtPm92X2ZiID0gKmZiOworCXZ2LT5vdl9mbXQgPSBmbXQ7CisJaWYgKDAgPT0gdnYtPm92X2ZiLmZtdC5ieXRlc3BlcmxpbmUpCisJCXZ2LT5vdl9mYi5mbXQuYnl0ZXNwZXJsaW5lID0KKwkJCXZ2LT5vdl9mYi5mbXQud2lkdGggKiBmbXQtPmRlcHRoIC8gODsKKworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCit7CisJaWYgKGYtPmluZGV4ID49IE5VTV9GT1JNQVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJsY3B5KChjaGFyICopZi0+ZGVzY3JpcHRpb24sIGZvcm1hdHNbZi0+aW5kZXhdLm5hbWUsCisJCQlzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKKwlmLT5waXhlbGZvcm1hdCA9IGZvcm1hdHNbZi0+aW5kZXhdLnBpeGVsZm9ybWF0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmMpCit7CisJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsOworCisJaWYgKChjLT5pZCA8ICBWNEwyX0NJRF9CQVNFIHx8CisJICAgICBjLT5pZCA+PSBWNEwyX0NJRF9MQVNUUDEpICYmCisJICAgIChjLT5pZCA8ICBWNEwyX0NJRF9QUklWQVRFX0JBU0UgfHwKKwkgICAgIGMtPmlkID49IFY0TDJfQ0lEX1BSSVZBVEVfTEFTVFAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljdHJsID0gY3RybF9ieV9pZChjLT5pZCk7CisJaWYgKGN0cmwgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlERUJfRUUoKCJWSURJT0NfUVVFUllDVFJMOiBpZDolZFxuIiwgYy0+aWQpKTsKKwkqYyA9ICpjdHJsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKKwljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmw7CisJdTMyIHZhbHVlID0gMDsKKworCWN0cmwgPSBjdHJsX2J5X2lkKGMtPmlkKTsKKwlpZiAoTlVMTCA9PSBjdHJsKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzd2l0Y2ggKGMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQl2YWx1ZSA9IHNhYTcxNDZfcmVhZChkZXYsIEJDU19DVFJMKTsKKwkJYy0+dmFsdWUgPSAweGZmICYgKHZhbHVlID4+IDI0KTsKKwkJREVCX0QoKCJWNEwyX0NJRF9CUklHSFRORVNTOiAlZFxuIiwgYy0+dmFsdWUpKTsKIAkJYnJlYWs7Ci0JCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6IHsKLQkJb3BzID0gJnNhYTcxNDZfdmJpX3VvcHM7Ci0JCXEgPSAmZmgtPnZiaV9xOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCXZhbHVlID0gc2FhNzE0Nl9yZWFkKGRldiwgQkNTX0NUUkwpOworCQljLT52YWx1ZSA9IDB4N2YgJiAodmFsdWUgPj4gMTYpOworCQlERUJfRCgoIlY0TDJfQ0lEX0NPTlRSQVNUOiAlZFxuIiwgYy0+dmFsdWUpKTsKIAkJYnJlYWs7Ci0JCX0KKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCXZhbHVlID0gc2FhNzE0Nl9yZWFkKGRldiwgQkNTX0NUUkwpOworCQljLT52YWx1ZSA9IDB4N2YgJiAodmFsdWUgPj4gMCk7CisJCURFQl9EKCgiVjRMMl9DSURfU0FUVVJBVElPTjogJWRcbiIsIGMtPnZhbHVlKSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfVkZMSVA6CisJCWMtPnZhbHVlID0gdnYtPnZmbGlwOworCQlERUJfRCgoIlY0TDJfQ0lEX1ZGTElQOiAlZFxuIiwgYy0+dmFsdWUpKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJYy0+dmFsdWUgPSB2di0+aGZsaXA7CisJCURFQl9EKCgiVjRMMl9DSURfSEZMSVA6ICVkXG4iLCBjLT52YWx1ZSkpOworCQlicmVhazsKIAlkZWZhdWx0OgotCQlCVUcoKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY29udHJvbCAqYykKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CisJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsOworCisJY3RybCA9IGN0cmxfYnlfaWQoYy0+aWQpOworCWlmIChOVUxMID09IGN0cmwpIHsKKwkJREVCX0QoKCJ1bmtub3duIGNvbnRyb2wgJWRcbiIsIGMtPmlkKSk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfUVVFUllDQVA6Ci0JewotCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7Ci0JCW1lbXNldChjYXAsMCxzaXplb2YoKmNhcCkpOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAKLQkJREVCX0VFKCgiVklESU9DX1FVRVJZQ0FQXG4iKSk7Ci0KLQkJc3RyY3B5KChjaGFyICopY2FwLT5kcml2ZXIsICJzYWE3MTQ2IHY0bDIiKTsKLQkJc3RybGNweSgoY2hhciAqKWNhcC0+Y2FyZCwgZGV2LT5leHQtPm5hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKLQkJc3ByaW50ZigoY2hhciAqKWNhcC0+YnVzX2luZm8sIlBDSTolcyIsIHBjaV9uYW1lKGRldi0+cGNpKSk7Ci0JCWNhcC0+dmVyc2lvbiA9IFNBQTcxNDZfVkVSU0lPTl9DT0RFOwotCQljYXAtPmNhcGFiaWxpdGllcyA9Ci0JCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKLQkJCVY0TDJfQ0FQX1ZJREVPX09WRVJMQVkgfAotCQkJVjRMMl9DQVBfUkVBRFdSSVRFIHwKLQkJCVY0TDJfQ0FQX1NUUkVBTUlORzsKLQkJY2FwLT5jYXBhYmlsaXRpZXMgfD0gZGV2LT5leHRfdnZfZGF0YS0+Y2FwYWJpbGl0aWVzOwotCQlyZXR1cm4gMDsKKwlzd2l0Y2ggKGN0cmwtPnR5cGUpIHsKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU46CisJY2FzZSBWNEwyX0NUUkxfVFlQRV9NRU5VOgorCWNhc2UgVjRMMl9DVFJMX1RZUEVfSU5URUdFUjoKKwkJaWYgKGMtPnZhbHVlIDwgY3RybC0+bWluaW11bSkKKwkJCWMtPnZhbHVlID0gY3RybC0+bWluaW11bTsKKwkJaWYgKGMtPnZhbHVlID4gY3RybC0+bWF4aW11bSkKKwkJCWMtPnZhbHVlID0gY3RybC0+bWF4aW11bTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogbm90aGluZyAqLzsKIAl9Ci0JY2FzZSBWSURJT0NfR19GQlVGOgotCXsKLQkJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZiID0gYXJnOwogCi0JCURFQl9FRSgoIlZJRElPQ19HX0ZCVUZcbiIpKTsKLQotCQkqZmIgPSB2di0+b3ZfZmI7Ci0JCWZiLT5jYXBhYmlsaXR5ID0gVjRMMl9GQlVGX0NBUF9MSVNUX0NMSVBQSU5HOwotCQlyZXR1cm4gMDsKKwlzd2l0Y2ggKGMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOiB7CisJCXUzMiB2YWx1ZSA9IHNhYTcxNDZfcmVhZChkZXYsIEJDU19DVFJMKTsKKwkJdmFsdWUgJj0gMHgwMGZmZmZmZjsKKwkJdmFsdWUgfD0gKGMtPnZhbHVlIDw8IDI0KTsKKwkJc2FhNzE0Nl93cml0ZShkZXYsIEJDU19DVFJMLCB2YWx1ZSk7CisJCXNhYTcxNDZfd3JpdGUoZGV2LCBNQzIsIE1BU0tfMjIgfCBNQVNLXzA2KTsKKwkJYnJlYWs7CiAJfQotCWNhc2UgVklESU9DX1NfRkJVRjoKLQl7Ci0JCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYiA9IGFyZzsKLQkJc3RydWN0IHNhYTcxNDZfZm9ybWF0ICpmbXQ7Ci0KLQkJREVCX0VFKCgiVklESU9DX1NfRkJVRlxuIikpOwotCi0JCWlmKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pICYmCi0JCSAgICFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQotCQkvKiBjaGVjayBhcmdzICovCi0JCWZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZGV2LGZiLT5mbXQucGl4ZWxmb3JtYXQpOwotCQlpZiAoTlVMTCA9PSBmbXQpIHsKLQkJCXJldHVybiAtRUlOVkFMOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6IHsKKwkJdTMyIHZhbHVlID0gc2FhNzE0Nl9yZWFkKGRldiwgQkNTX0NUUkwpOworCQl2YWx1ZSAmPSAweGZmMDBmZmZmOworCQl2YWx1ZSB8PSAoYy0+dmFsdWUgPDwgMTYpOworCQlzYWE3MTQ2X3dyaXRlKGRldiwgQkNTX0NUUkwsIHZhbHVlKTsKKwkJc2FhNzE0Nl93cml0ZShkZXYsIE1DMiwgTUFTS18yMiB8IE1BU0tfMDYpOworCQlicmVhazsKKwl9CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOiB7CisJCXUzMiB2YWx1ZSA9IHNhYTcxNDZfcmVhZChkZXYsIEJDU19DVFJMKTsKKwkJdmFsdWUgJj0gMHhmZmZmZmYwMDsKKwkJdmFsdWUgfD0gKGMtPnZhbHVlIDw8IDApOworCQlzYWE3MTQ2X3dyaXRlKGRldiwgQkNTX0NUUkwsIHZhbHVlKTsKKwkJc2FhNzE0Nl93cml0ZShkZXYsIE1DMiwgTUFTS18yMiB8IE1BU0tfMDYpOworCQlicmVhazsKKwl9CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJLyogZml4bWU6IHdlIGNhbiBzdXBwb3J0IGNoYW5naW5nIFZGTElQIGFuZCBIRkxJUCBoZXJlLi4uICovCisJCWlmIChJU19DQVBUVVJFX0FDVElWRShmaCkgIT0gMCkgeworCQkJREVCX0QoKCJWNEwyX0NJRF9IRkxJUCB3aGlsZSBhY3RpdmUgY2FwdHVyZS5cbiIpKTsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJCXJldHVybiAtRUJVU1k7CiAJCX0KLQotCQkvKiBwbGFuYXIgZm9ybWF0cyBhcmUgbm90IGFsbG93ZWQgZm9yIG92ZXJsYXkgdmlkZW8sIGNsaXBwaW5nIGFuZCB2aWRlbyBkbWEgd291bGQgY2xhc2ggKi8KLQkJaWYgKDAgIT0gKGZtdC0+ZmxhZ3MgJiBGT1JNQVRfSVNfUExBTkFSKSkgewotCQkJREVCX1MoKCJwbGFuYXIgcGl4ZWxmb3JtYXQgJyU0LjRzJyBub3QgYWxsb3dlZCBmb3Igb3ZlcmxheVxuIiwoY2hhciAqKSZmbXQtPnBpeGVsZm9ybWF0KSk7CisJCXZ2LT5oZmxpcCA9IGMtPnZhbHVlOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCQlpZiAoSVNfQ0FQVFVSRV9BQ1RJVkUoZmgpICE9IDApIHsKKwkJCURFQl9EKCgiVjRMMl9DSURfVkZMSVAgd2hpbGUgYWN0aXZlIGNhcHR1cmUuXG4iKSk7CisJCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCQlyZXR1cm4gLUVCVVNZOwogCQl9Ci0KLQkJLyogY2hlY2sgaWYgb3ZlcmxheSBpcyBydW5uaW5nICovCi0JCWlmIChJU19PVkVSTEFZX0FDVElWRShmaCkgIT0gMCkgewotCQkJaWYgKHZ2LT52aWRlb19maCAhPSBmaCkgewotCQkJCURFQl9EKCgicmVmdXNpbmcgdG8gY2hhbmdlIGZyYW1lYnVmZmVyIGluZm9ybWF0aW9ucyB3aGlsZSBvdmVybGF5IGlzIGFjdGl2ZSBpbiBhbm90aGVyIG9wZW4uXG4iKSk7Ci0JCQkJcmV0dXJuIC1FQlVTWTsKLQkJCX0KLQkJfQotCi0JCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0KLQkJLyogb2ssIGFjY2VwdCBpdCAqLwotCQl2di0+b3ZfZmIgPSAqZmI7Ci0JCXZ2LT5vdl9mbXQgPSBmbXQ7Ci0JCWlmICgwID09IHZ2LT5vdl9mYi5mbXQuYnl0ZXNwZXJsaW5lKQotCQkJdnYtPm92X2ZiLmZtdC5ieXRlc3BlcmxpbmUgPQotCQkJCXZ2LT5vdl9mYi5mbXQud2lkdGgqZm10LT5kZXB0aC84OwotCisJCXZ2LT52ZmxpcCA9IGMtPnZhbHVlOworCQlicmVhazsKKwlkZWZhdWx0OgogCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0KLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQljYXNlIFZJRElPQ19FTlVNX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYgPSBhcmc7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCi0JCXN3aXRjaCAoZi0+dHlwZSkgewotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JCQlpZiAoZi0+aW5kZXggPj0gTlVNX0ZPUk1BVFMpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlzdHJsY3B5KChjaGFyICopZi0+ZGVzY3JpcHRpb24sIGZvcm1hdHNbZi0+aW5kZXhdLm5hbWUsCi0JCQkJCXNpemVvZihmLT5kZXNjcmlwdGlvbikpOwotCQkJZi0+cGl4ZWxmb3JtYXQgPSBmb3JtYXRzW2YtPmluZGV4XS5waXhlbGZvcm1hdDsKLQkJCWYtPmZsYWdzID0gMDsKLQkJCW1lbXNldChmLT5yZXNlcnZlZCwgMCwgc2l6ZW9mKGYtPnJlc2VydmVkKSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOworCWlmIChJU19PVkVSTEFZX0FDVElWRShmaCkgIT0gMCkgeworCQlzYWE3MTQ2X3N0b3BfcHJldmlldyhmaCk7CisJCXNhYTcxNDZfc3RhcnRfcHJldmlldyhmaCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX3Bhcm0oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKKworCXBhcm0tPnBhcm0uY2FwdHVyZS5yZWFkYnVmZmVycyA9IDE7CisJdjRsMl92aWRlb19zdGRfZnJhbWVfcGVyaW9kKHZ2LT5zdGFuZGFyZC0+aWQsCisJCQkJICAgICZwYXJtLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlmLT5mbXQucGl4ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+dmlkZW9fZm10OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZtdF92aWRfb3ZlcmxheShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlmLT5mbXQud2luID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+b3Yud2luOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZtdF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCWYtPmZtdC52YmkgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT52YmlfZm10OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOworCXN0cnVjdCBzYWE3MTQ2X2Zvcm1hdCAqZm10OworCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKKwlpbnQgbWF4dywgbWF4aDsKKwlpbnQgY2FsY19icGw7CisKKwlERUJfRUUoKCJWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6IGRldjolcCwgZmg6JXBcbiIsIGRldiwgZmgpKTsKKworCWZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZGV2LCBmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKwlpZiAoTlVMTCA9PSBmbXQpCisJCXJldHVybiAtRUlOVkFMOworCisJZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOworCW1heHcgID0gdnYtPnN0YW5kYXJkLT5oX21heF9vdXQ7CisJbWF4aCAgPSB2di0+c3RhbmRhcmQtPnZfbWF4X291dDsKKworCWlmIChWNEwyX0ZJRUxEX0FOWSA9PSBmaWVsZCkgeworCQlmaWVsZCA9IChmLT5mbXQucGl4LmhlaWdodCA+IG1heGggLyAyKQorCQkJPyBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQKKwkJCTogVjRMMl9GSUVMRF9CT1RUT007CisJfQorCXN3aXRjaCAoZmllbGQpIHsKKwljYXNlIFY0TDJfRklFTERfQUxURVJOQVRFOgorCQl2di0+bGFzdF9maWVsZCA9IFY0TDJfRklFTERfVE9QOworCQltYXhoID0gbWF4aCAvIDI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9GSUVMRF9UT1A6CisJY2FzZSBWNEwyX0ZJRUxEX0JPVFRPTToKKwkJdnYtPmxhc3RfZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJCW1heGggPSBtYXhoIC8gMjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6CisJCXZ2LT5sYXN0X2ZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERUJfRCgoIm5vIGtub3duIGZpZWxkIG1vZGUgJyVkJy5cbiIsIGZpZWxkKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWYtPmZtdC5waXguZmllbGQgPSBmaWVsZDsKKwlpZiAoZi0+Zm10LnBpeC53aWR0aCA+IG1heHcpCisJCWYtPmZtdC5waXgud2lkdGggPSBtYXh3OworCWlmIChmLT5mbXQucGl4LmhlaWdodCA+IG1heGgpCisJCWYtPmZtdC5waXguaGVpZ2h0ID0gbWF4aDsKKworCWNhbGNfYnBsID0gKGYtPmZtdC5waXgud2lkdGggKiBmbXQtPmRlcHRoKSAvIDg7CisKKwlpZiAoZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPCBjYWxjX2JwbCkKKwkJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBjYWxjX2JwbDsKKworCWlmIChmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA+ICgyICogUEFHRV9TSVpFICogZm10LT5kZXB0aCkgLyA4KSAvKiBhcmJpdHJhcnkgY29uc3RyYWludCAqLworCQlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGNhbGNfYnBsOworCisJZi0+Zm10LnBpeC5zaXplaW1hZ2UgPSBmLT5mbXQucGl4LmJ5dGVzcGVybGluZSAqIGYtPmZtdC5waXguaGVpZ2h0OworCURFQl9EKCgidzolZCwgaDolZCwgYnl0ZXNwZXJsaW5lOiVkLCBzaXplaW1hZ2U6JWRcbiIsIGYtPmZtdC5waXgud2lkdGgsCisJCQlmLT5mbXQucGl4LmhlaWdodCwgZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUsIGYtPmZtdC5waXguc2l6ZWltYWdlKSk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHZpZGlvY190cnlfZm10X3ZpZF9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKKwlzdHJ1Y3QgdjRsMl93aW5kb3cgKndpbiA9ICZmLT5mbXQud2luOworCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKKwlpbnQgbWF4dywgbWF4aDsKKworCURFQl9FRSgoImRldjolcFxuIiwgZGV2KSk7CisKKwlpZiAoTlVMTCA9PSB2di0+b3ZfZmIuYmFzZSkgeworCQlERUJfRCgoIm5vIGZiIGJhc2Ugc2V0LlxuIikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKE5VTEwgPT0gdnYtPm92X2ZtdCkgeworCQlERUJfRCgoIm5vIGZiIGZtdCBzZXQuXG4iKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAod2luLT53LndpZHRoIDwgNDggfHwgd2luLT53LmhlaWdodCA8IDMyKSB7CisJCURFQl9EKCgibWluIHdpZHRoL2hlaWdodC4gKCVkLCVkKVxuIiwgd2luLT53LndpZHRoLCB3aW4tPncuaGVpZ2h0KSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAod2luLT5jbGlwY291bnQgPiAxNikgeworCQlERUJfRCgoImNsaXBjb3VudCB0b28gYmlnLlxuIikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmaWVsZCA9IHdpbi0+ZmllbGQ7CisJbWF4dyAgPSB2di0+c3RhbmRhcmQtPmhfbWF4X291dDsKKwltYXhoICA9IHZ2LT5zdGFuZGFyZC0+dl9tYXhfb3V0OworCisJaWYgKFY0TDJfRklFTERfQU5ZID09IGZpZWxkKSB7CisJCWZpZWxkID0gKHdpbi0+dy5oZWlnaHQgPiBtYXhoIC8gMikKKwkJCT8gVjRMMl9GSUVMRF9JTlRFUkxBQ0VECisJCQk6IFY0TDJfRklFTERfVE9QOwogCQl9Ci0KLQkJREVCX0VFKCgiVklESU9DX0VOVU1fRk1UOiB0eXBlOiVkLCBpbmRleDolZFxuIixmLT50eXBlLGYtPmluZGV4KSk7Ci0JCXJldHVybiAwOworCXN3aXRjaCAoZmllbGQpIHsKKwljYXNlIFY0TDJfRklFTERfVE9QOgorCWNhc2UgVjRMMl9GSUVMRF9CT1RUT006CisJY2FzZSBWNEwyX0ZJRUxEX0FMVEVSTkFURToKKwkJbWF4aCA9IG1heGggLyAyOworCQlicmVhazsKKwljYXNlIFY0TDJfRklFTERfSU5URVJMQUNFRDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVCX0QoKCJubyBrbm93biBmaWVsZCBtb2RlICclZCcuXG4iLCBmaWVsZCkpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JY2FzZSBWSURJT0NfUVVFUllDVFJMOgotCXsKLQkJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsOwotCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmMgPSBhcmc7CiAKLQkJaWYgKChjLT5pZCA8ICBWNEwyX0NJRF9CQVNFIHx8Ci0JCSAgICAgYy0+aWQgPj0gVjRMMl9DSURfTEFTVFAxKSAmJgotCQkgICAgKGMtPmlkIDwgIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSB8fAotCQkgICAgIGMtPmlkID49IFY0TDJfQ0lEX1BSSVZBVEVfTEFTVFAxKSkKLQkJCXJldHVybiAtRUlOVkFMOworCXdpbi0+ZmllbGQgPSBmaWVsZDsKKwlpZiAod2luLT53LndpZHRoID4gbWF4dykKKwkJd2luLT53LndpZHRoID0gbWF4dzsKKwlpZiAod2luLT53LmhlaWdodCA+IG1heGgpCisJCXdpbi0+dy5oZWlnaHQgPSBtYXhoOwogCi0JCWN0cmwgPSBjdHJsX2J5X2lkKGMtPmlkKTsKLQkJaWYoIE5VTEwgPT0gY3RybCApIHsKLQkJCXJldHVybiAtRUlOVkFMOwotLyoKLQkJCWMtPmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQ7Ci0JCQlyZXR1cm4gMDsKLSovCi0JCX0KKwlyZXR1cm4gMDsKK30KIAotCQlERUJfRUUoKCJWSURJT0NfUVVFUllDVFJMOiBpZDolZFxuIixjLT5pZCkpOwotCQkqYyA9ICpjdHJsOwotCQlyZXR1cm4gMDsKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CisJaW50IGVycjsKKworCURFQl9FRSgoIlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogZGV2OiVwLCBmaDolcFxuIiwgZGV2LCBmaCkpOworCWlmIChJU19DQVBUVVJFX0FDVElWRShmaCkgIT0gMCkgeworCQlERUJfRUUoKCJzdHJlYW1pbmcgY2FwdHVyZSBpcyBhY3RpdmVcbiIpKTsKKwkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JY2FzZSBWSURJT0NfR19DVFJMOiB7Ci0JCURFQl9FRSgoIlZJRElPQ19HX0NUUkxcbiIpKTsKLQkJcmV0dXJuIGdldF9jb250cm9sKGZoLGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQl7Ci0JCURFQl9FRSgoIlZJRElPQ19TX0NUUkxcbiIpKTsKLQkJZXJyID0gc2V0X2NvbnRyb2woZmgsYXJnKTsKKwllcnIgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIGZoLCBmKTsKKwlpZiAoMCAhPSBlcnIpCiAJCXJldHVybiBlcnI7CisJZmgtPnZpZGVvX2ZtdCA9IGYtPmZtdC5waXg7CisJREVCX0VFKCgic2V0IHRvIHBpeGVsZm9ybWF0ICclNC40cydcbiIsIChjaGFyICopJmZoLT52aWRlb19mbXQucGl4ZWxmb3JtYXQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CisJaW50IGVycjsKKworCURFQl9FRSgoIlY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWTogZGV2OiVwLCBmaDolcFxuIiwgZGV2LCBmaCkpOworCWVyciA9IHZpZGlvY190cnlfZm10X3ZpZF9vdmVybGF5KGZpbGUsIGZoLCBmKTsKKwlpZiAoMCAhPSBlcnIpCisJCXJldHVybiBlcnI7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlmaC0+b3Yud2luICAgID0gZi0+Zm10LndpbjsKKwlmaC0+b3YubmNsaXBzID0gZi0+Zm10Lndpbi5jbGlwY291bnQ7CisJaWYgKGZoLT5vdi5uY2xpcHMgPiAxNikKKwkJZmgtPm92Lm5jbGlwcyA9IDE2OworCWlmIChjb3B5X2Zyb21fdXNlcihmaC0+b3YuY2xpcHMsIGYtPmZtdC53aW4uY2xpcHMsCisJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX2NsaXApICogZmgtPm92Lm5jbGlwcykpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlyZXR1cm4gLUVGQVVMVDsKIAl9Ci0JY2FzZSBWSURJT0NfR19QQVJNOgotCXsKLQkJc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybSA9IGFyZzsKLQkJaWYoIHBhcm0tPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICkgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJbWVtc2V0KCZwYXJtLT5wYXJtLmNhcHR1cmUsMCxzaXplb2Yoc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0pKTsKLQkJcGFybS0+cGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID0gMTsKLQkJLy8gZml4bWU6IG9ubHkgZm9yIFBBTCEKLQkJcGFybS0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5udW1lcmF0b3IgPSAxOwotCQlwYXJtLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lLmRlbm9taW5hdG9yID0gMjU7Ci0JCXJldHVybiAwOworCisJLyogZmgtPm92LmZoIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB3ZSBoYXZlIHZhbGlkIG92ZXJsYXkgaW5mb3JtYXRpb25zLCB0b28gKi8KKwlmaC0+b3YuZmggPSBmaDsKKworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCS8qIGNoZWNrIGlmIG91ciBjdXJyZW50IG92ZXJsYXkgaXMgYWN0aXZlICovCisJaWYgKElTX09WRVJMQVlfQUNUSVZFKGZoKSAhPSAwKSB7CisJCXNhYTcxNDZfc3RvcF9wcmV2aWV3KGZoKTsKKwkJc2FhNzE0Nl9zdGFydF9wcmV2aWV3KGZoKTsKIAl9Ci0JY2FzZSBWSURJT0NfR19GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7Ci0JCURFQl9FRSgoIlZJRElPQ19HX0ZNVFxuIikpOwotCQlyZXR1cm4gZ19mbXQoZmgsZik7Ci0JfQotCWNhc2UgVklESU9DX1NfRk1UOgotCXsKLQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOwotCQlERUJfRUUoKCJWSURJT0NfU19GTVRcbiIpKTsKLQkJcmV0dXJuIHNfZm10KGZoLGYpOwotCX0KLQljYXNlIFZJRElPQ19UUllfRk1UOgotCXsKLQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOwotCQlERUJfRUUoKCJWSURJT0NfVFJZX0ZNVFxuIikpOwotCQlyZXR1cm4gdHJ5X2ZtdChmaCxmKTsKLQl9Ci0JY2FzZSBWSURJT0NfR19TVEQ6Ci0JewotCQl2NGwyX3N0ZF9pZCAqaWQgPSBhcmc7Ci0JCURFQl9FRSgoIlZJRElPQ19HX1NURFxuIikpOwotCQkqaWQgPSB2di0+c3RhbmRhcmQtPmlkOwotCQlyZXR1cm4gMDsKLQl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdjRsMl9zdGRfaWQgKm5vcm0pCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOworCisJKm5vcm0gPSB2di0+c3RhbmRhcmQtPmlkOworCXJldHVybiAwOworfQorCiAJLyogdGhlIHNhYTcxNDYgc3VwZmhydHMgKHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgc2FhNzExMWEgZm9yIGV4YW1wbGUpCiAJICAgUEFMIC8gTlRTQyAvIFNFQ0FNLiBpZiB5b3VyIGhhcmR3YXJlIGRvZXMgbm90IChvciBkb2VzIG1vcmUpCiAJICAgLS0gb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBpbiB5b3VyIGV4dGVuc2lvbiAqLworLyoKIAljYXNlIFZJRElPQ19FTlVNU1REOgogCXsKIAkJc3RydWN0IHY0bDJfc3RhbmRhcmQgKmUgPSBhcmc7CkBAIC0xMDY2LDE2MyArOTQ5LDI0NiBAQAogCQl9CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQljYXNlIFZJRElPQ19TX1NURDoKLQl7Ci0JCXY0bDJfc3RkX2lkICppZCA9IGFyZzsKLQkJaW50IGZvdW5kID0gMDsKLQkJaW50IGk7CisJKi8KIAotCQlERUJfRUUoKCJWSURJT0NfU19TVERcbiIpKTsKK3N0YXRpYyBpbnQgdmlkaW9jX3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdjRsMl9zdGRfaWQgKmlkKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKKwlpbnQgZm91bmQgPSAwOworCWludCBlcnIsIGk7CiAKLQkJaWYgKCh2di0+dmlkZW9fc3RhdHVzICYgU1RBVFVTX0NBUFRVUkUpID09IFNUQVRVU19DQVBUVVJFKSB7Ci0JCQlERUJfRCgoImNhbm5vdCBjaGFuZ2UgdmlkZW8gc3RhbmRhcmQgd2hpbGUgc3RyZWFtaW5nIGNhcHR1cmUgaXMgYWN0aXZlXG4iKSk7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9CisJREVCX0VFKCgiVklESU9DX1NfU1REXG4iKSk7CiAKLQkJaWYgKCh2di0+dmlkZW9fc3RhdHVzICYgU1RBVFVTX09WRVJMQVkpICE9IDApIHsKLQkJCXZ2LT5vdl9zdXNwZW5kID0gdnYtPnZpZGVvX2ZoOwotCQkJZXJyID0gc2FhNzE0Nl9zdG9wX3ByZXZpZXcodnYtPnZpZGVvX2ZoKTsgLyogc2lkZSBlZmZlY3Q6IHZpZGVvX3N0YXR1cyBpcyBub3cgMCwgdmlkZW9fZmggaXMgTlVMTCAqLwotCQkJaWYgKDAgIT0gZXJyKSB7Ci0JCQkJREVCX0QoKCJzdXNwZW5kaW5nIHZpZGVvIGZhaWxlZC4gYWJvcnRpbmdcbiIpKTsKLQkJCQlyZXR1cm4gZXJyOwotCQkJfQotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQotCQlmb3IoaSA9IDA7IGkgPCBkZXYtPmV4dF92dl9kYXRhLT5udW1fc3RkczsgaSsrKQotCQkJaWYgKCppZCAmIGRldi0+ZXh0X3Z2X2RhdGEtPnN0ZHNbaV0uaWQpCi0JCQkJYnJlYWs7Ci0JCWlmIChpICE9IGRldi0+ZXh0X3Z2X2RhdGEtPm51bV9zdGRzKSB7Ci0JCQl2di0+c3RhbmRhcmQgPSAmZGV2LT5leHRfdnZfZGF0YS0+c3Rkc1tpXTsKLQkJCWlmKCBOVUxMICE9IGRldi0+ZXh0X3Z2X2RhdGEtPnN0ZF9jYWxsYmFjayApCi0JCQkJZGV2LT5leHRfdnZfZGF0YS0+c3RkX2NhbGxiYWNrKGRldiwgdnYtPnN0YW5kYXJkKTsKLQkJCWZvdW5kID0gMTsKLQkJfQotCi0JCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQotCQlpZiAodnYtPm92X3N1c3BlbmQgIT0gTlVMTCkgewotCQkJc2FhNzE0Nl9zdGFydF9wcmV2aWV3KHZ2LT5vdl9zdXNwZW5kKTsKLQkJCXZ2LT5vdl9zdXNwZW5kID0gTlVMTDsKLQkJfQotCi0JCWlmKCAwID09IGZvdW5kICkgewotCQkJREVCX0VFKCgiVklESU9DX1NfU1REOiBzdGFuZGFyZCBub3QgZm91bmQuXG4iKSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCURFQl9FRSgoIlZJRElPQ19TX1NURDogc2V0IHRvIHN0YW5kYXJkIHRvICclcydcbiIsdnYtPnN0YW5kYXJkLT5uYW1lKSk7Ci0JCXJldHVybiAwOworCWlmICgodnYtPnZpZGVvX3N0YXR1cyAmIFNUQVRVU19DQVBUVVJFKSA9PSBTVEFUVVNfQ0FQVFVSRSkgeworCQlERUJfRCgoImNhbm5vdCBjaGFuZ2UgdmlkZW8gc3RhbmRhcmQgd2hpbGUgc3RyZWFtaW5nIGNhcHR1cmUgaXMgYWN0aXZlXG4iKSk7CisJCXJldHVybiAtRUJVU1k7CiAJfQotCWNhc2UgVklESU9DX09WRVJMQVk6Ci0JewotCQlpbnQgb24gPSAqKGludCAqKWFyZzsKIAotCQlERUJfRCgoIlZJRElPQ19PVkVSTEFZIG9uOiVkXG4iLG9uKSk7Ci0JCWlmIChvbiAhPSAwKSB7Ci0JCQllcnIgPSBzYWE3MTQ2X3N0YXJ0X3ByZXZpZXcoZmgpOwotCQl9IGVsc2UgewotCQkJZXJyID0gc2FhNzE0Nl9zdG9wX3ByZXZpZXcoZmgpOwotCQl9Ci0JCXJldHVybiBlcnI7Ci0JfQotCWNhc2UgVklESU9DX1JFUUJVRlM6IHsKLQkJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJlcSA9IGFyZzsKLQkJREVCX0QoKCJWSURJT0NfUkVRQlVGUywgdHlwZTolZFxuIixyZXEtPnR5cGUpKTsKLQkJcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMocSxyZXEpOwotCX0KLQljYXNlIFZJRElPQ19RVUVSWUJVRjogewotCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiA9IGFyZzsKLQkJREVCX0QoKCJWSURJT0NfUVVFUllCVUYsIHR5cGU6JWQsIG9mZnNldDolZFxuIixidWYtPnR5cGUsYnVmLT5tLm9mZnNldCkpOwotCQlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYocSxidWYpOwotCX0KLQljYXNlIFZJRElPQ19RQlVGOiB7Ci0JCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOwotCQlpbnQgcmV0ID0gMDsKLQkJcmV0ID0gdmlkZW9idWZfcWJ1ZihxLGJ1Zik7Ci0JCURFQl9EKCgiVklESU9DX1FCVUY6IHJldDolZCwgaW5kZXg6JWRcbiIscmV0LGJ1Zi0+aW5kZXgpKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JY2FzZSBWSURJT0NfRFFCVUY6IHsKLQkJc3RydWN0IHY0bDJfYnVmZmVyICpidWYgPSBhcmc7Ci0JCWludCByZXQgPSAwOwotCQlyZXQgPSB2aWRlb2J1Zl9kcWJ1ZihxLGJ1ZixmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0JCURFQl9EKCgiVklESU9DX0RRQlVGOiByZXQ6JWQsIGluZGV4OiVkXG4iLHJldCxidWYtPmluZGV4KSk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCWNhc2UgVklESU9DX1NUUkVBTU9OOiB7Ci0JCWludCAqdHlwZSA9IGFyZzsKLQkJREVCX0QoKCJWSURJT0NfU1RSRUFNT04sIHR5cGU6JWRcbiIsKnR5cGUpKTsKLQotCQllcnIgPSB2aWRlb19iZWdpbihmaCk7Ci0JCWlmKCAwICE9IGVycikgewotCQkJcmV0dXJuIGVycjsKLQkJfQotCQllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vbihxKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JY2FzZSBWSURJT0NfU1RSRUFNT0ZGOiB7Ci0JCWludCAqdHlwZSA9IGFyZzsKLQotCQlERUJfRCgoIlZJRElPQ19TVFJFQU1PRkYsIHR5cGU6JWRcbiIsKnR5cGUpKTsKLQotCQkvKiB1Z2x5OiB3ZSBuZWVkIHRvIGNvcHkgc29tZSBjaGVja3MgZnJvbSB2aWRlb19lbmQoKSwKLQkJICAgYmVjYXVzZSB2aWRlb2J1Zl9zdHJlYW1vZmYoKSByZWxpZXMgb24gdGhlIGNhcHR1cmUgcnVubmluZy4KLQkJICAgY2hlY2sgYW5kIGZpeCB0aGlzICovCi0JCWlmICgodnYtPnZpZGVvX3N0YXR1cyAmIFNUQVRVU19DQVBUVVJFKSAhPSBTVEFUVVNfQ0FQVFVSRSkgewotCQkJREVCX1MoKCJub3QgY2FwdHVyaW5nLlxuIikpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlpZiAodnYtPnZpZGVvX2ZoICE9IGZoKSB7Ci0JCQlERUJfUygoImNhcHR1cmluZywgYnV0IGluIGFub3RoZXIgb3Blbi5cbiIpKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQotCQllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYocSk7CisJaWYgKCh2di0+dmlkZW9fc3RhdHVzICYgU1RBVFVTX09WRVJMQVkpICE9IDApIHsKKwkJdnYtPm92X3N1c3BlbmQgPSB2di0+dmlkZW9fZmg7CisJCWVyciA9IHNhYTcxNDZfc3RvcF9wcmV2aWV3KHZ2LT52aWRlb19maCk7IC8qIHNpZGUgZWZmZWN0OiB2aWRlb19zdGF0dXMgaXMgbm93IDAsIHZpZGVvX2ZoIGlzIE5VTEwgKi8KIAkJaWYgKDAgIT0gZXJyKSB7Ci0JCQlERUJfRCgoIndhcm5pbmc6IHZpZGVvYnVmX3N0cmVhbW9mZigpIGZhaWxlZC5cbiIpKTsKLQkJCXZpZGVvX2VuZChmaCwgZmlsZSk7Ci0JCX0gZWxzZSB7Ci0JCQllcnIgPSB2aWRlb19lbmQoZmgsIGZpbGUpOwotCQl9Ci0JCXJldHVybiBlcnI7Ci0JfQotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCWNhc2UgVklESU9DR01CVUY6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1ZiA9IGFyZzsKLQkJaW50IGk7Ci0KLQkJLyogZml4bWU6IG51bWJlciBvZiBjYXB0dXJlIGJ1ZmZlcnMgYW5kIHNpemVzIGZvciB2NGwgYXBwcyAqLwotCQlpbnQgZ2J1ZmZlcnMgPSAyOwotCQlpbnQgZ2J1ZnNpemUgPSA3NjgqNTc2KjQ7Ci0KLQkJREVCX0QoKCJWSURJT0NHTUJVRiBcbiIpKTsKLQotCQlxID0gJmZoLT52aWRlb19xOwotCQllcnIgPSB2aWRlb2J1Zl9tbWFwX3NldHVwKHEsZ2J1ZmZlcnMsZ2J1ZnNpemUsCi0JCQkJCSAgVjRMMl9NRU1PUllfTU1BUCk7Ci0JCWlmIChlcnIgPCAwKQorCQkJREVCX0QoKCJzdXNwZW5kaW5nIHZpZGVvIGZhaWxlZC4gYWJvcnRpbmdcbiIpKTsKIAkJCXJldHVybiBlcnI7CisJCX0KKwl9CiAKLQkJZ2J1ZmZlcnMgPSBlcnI7Ci0JCW1lbXNldChtYnVmLDAsc2l6ZW9mKCptYnVmKSk7Ci0JCW1idWYtPmZyYW1lcyA9IGdidWZmZXJzOwotCQltYnVmLT5zaXplICAgPSBnYnVmZmVycyAqIGdidWZzaXplOwotCQlmb3IgKGkgPSAwOyBpIDwgZ2J1ZmZlcnM7IGkrKykKLQkJCW1idWYtPm9mZnNldHNbaV0gPSBpICogZ2J1ZnNpemU7Ci0JCXJldHVybiAwOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5leHRfdnZfZGF0YS0+bnVtX3N0ZHM7IGkrKykKKwkJaWYgKCppZCAmIGRldi0+ZXh0X3Z2X2RhdGEtPnN0ZHNbaV0uaWQpCisJCQlicmVhazsKKwlpZiAoaSAhPSBkZXYtPmV4dF92dl9kYXRhLT5udW1fc3RkcykgeworCQl2di0+c3RhbmRhcmQgPSAmZGV2LT5leHRfdnZfZGF0YS0+c3Rkc1tpXTsKKwkJaWYgKE5VTEwgIT0gZGV2LT5leHRfdnZfZGF0YS0+c3RkX2NhbGxiYWNrKQorCQkJZGV2LT5leHRfdnZfZGF0YS0+c3RkX2NhbGxiYWNrKGRldiwgdnYtPnN0YW5kYXJkKTsKKwkJZm91bmQgPSAxOwogCX0KLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXJldHVybiB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChmaWxlLCBjbWQsIGFyZywKLQkJCQkJCSAgc2FhNzE0Nl92aWRlb19kb19pb2N0bCk7CisKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKKwlpZiAodnYtPm92X3N1c3BlbmQgIT0gTlVMTCkgeworCQlzYWE3MTQ2X3N0YXJ0X3ByZXZpZXcodnYtPm92X3N1c3BlbmQpOworCQl2di0+b3Zfc3VzcGVuZCA9IE5VTEw7CiAJfQorCisJaWYgKCFmb3VuZCkgeworCQlERUJfRUUoKCJWSURJT0NfU19TVEQ6IHN0YW5kYXJkIG5vdCBmb3VuZC5cbiIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJREVCX0VFKCgiVklESU9DX1NfU1REOiBzZXQgdG8gc3RhbmRhcmQgdG8gJyVzJ1xuIiwgdnYtPnN0YW5kYXJkLT5uYW1lKSk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdmlkaW9jX292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgb24pCit7CisJaW50IGVycjsKKworCURFQl9EKCgiVklESU9DX09WRVJMQVkgb246JWRcbiIsIG9uKSk7CisJaWYgKG9uKQorCQllcnIgPSBzYWE3MTQ2X3N0YXJ0X3ByZXZpZXcoZmgpOworCWVsc2UKKwkJZXJyID0gc2FhNzE0Nl9zdG9wX3ByZXZpZXcoZmgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpiKQoreworCXN0cnVjdCBzYWE3MTQ2X2ZoICpmaCA9IF9fZmg7CisKKwlpZiAoYi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiB2aWRlb2J1Zl9yZXFidWZzKCZmaC0+dmlkZW9fcSwgYik7CisJaWYgKGItPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKKwkJcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMoJmZoLT52YmlfcSwgYik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggPSBfX2ZoOworCisJaWYgKGJ1Zi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiB2aWRlb2J1Zl9xdWVyeWJ1ZigmZmgtPnZpZGVvX3EsIGJ1Zik7CisJaWYgKGJ1Zi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKQorCQlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoJmZoLT52YmlfcSwgYnVmKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHNhYTcxNDZfZmggKmZoID0gX19maDsKKworCWlmIChidWYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gdmlkZW9idWZfcWJ1ZigmZmgtPnZpZGVvX3EsIGJ1Zik7CisJaWYgKGJ1Zi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKQorCQlyZXR1cm4gdmlkZW9idWZfcWJ1ZigmZmgtPnZiaV9xLCBidWYpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHNhYTcxNDZfZmggKmZoID0gX19maDsKKworCWlmIChidWYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gdmlkZW9idWZfZHFidWYoJmZoLT52aWRlb19xLCBidWYsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwlpZiAoYnVmLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCisJCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZigmZmgtPnZiaV9xLCBidWYsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQoreworCXN0cnVjdCBzYWE3MTQ2X2ZoICpmaCA9IF9fZmg7CisJaW50IGVycjsKKworCURFQl9EKCgiVklESU9DX1NUUkVBTU9OLCB0eXBlOiVkXG4iLCB0eXBlKSk7CisKKwllcnIgPSB2aWRlb19iZWdpbihmaCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZiAodHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbigmZmgtPnZpZGVvX3EpOworCWlmICh0eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCisJCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbigmZmgtPnZiaV9xKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CisJaW50IGVycjsKKworCURFQl9EKCgiVklESU9DX1NUUkVBTU9GRiwgdHlwZTolZFxuIiwgdHlwZSkpOworCisJLyogdWdseTogd2UgbmVlZCB0byBjb3B5IHNvbWUgY2hlY2tzIGZyb20gdmlkZW9fZW5kKCksCisJICAgYmVjYXVzZSB2aWRlb2J1Zl9zdHJlYW1vZmYoKSByZWxpZXMgb24gdGhlIGNhcHR1cmUgcnVubmluZy4KKwkgICBjaGVjayBhbmQgZml4IHRoaXMgKi8KKwlpZiAoKHZ2LT52aWRlb19zdGF0dXMgJiBTVEFUVVNfQ0FQVFVSRSkgIT0gU1RBVFVTX0NBUFRVUkUpIHsKKwkJREVCX1MoKCJub3QgY2FwdHVyaW5nLlxuIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAodnYtPnZpZGVvX2ZoICE9IGZoKSB7CisJCURFQl9TKCgiY2FwdHVyaW5nLCBidXQgaW4gYW5vdGhlciBvcGVuLlxuIikpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWVyciA9IC1FSU5WQUw7CisJaWYgKHR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoJmZoLT52aWRlb19xKTsKKwllbHNlIGlmICh0eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCisJCWVyciA9IHZpZGVvYnVmX3N0cmVhbW9mZigmZmgtPnZiaV9xKTsKKwlpZiAoMCAhPSBlcnIpIHsKKwkJREVCX0QoKCJ3YXJuaW5nOiB2aWRlb2J1Zl9zdHJlYW1vZmYoKSBmYWlsZWQuXG4iKSk7CisJCXZpZGVvX2VuZChmaCwgZmlsZSk7CisJfSBlbHNlIHsKKwkJZXJyID0gdmlkZW9fZW5kKGZoLCBmaWxlKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jaGlwX2lkZW50KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKKworCWNoaXAtPmlkZW50ID0gVjRMMl9JREVOVF9OT05FOworCWNoaXAtPnJldmlzaW9uID0gMDsKKwlpZiAoY2hpcC0+bWF0Y2gudHlwZSA9PSBWNEwyX0NISVBfTUFUQ0hfSE9TVCAmJiAhY2hpcC0+bWF0Y2guYWRkcikgeworCQljaGlwLT5pZGVudCA9IFY0TDJfSURFTlRfU0FBNzE0NjsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycigmZGV2LT52NGwyX2RldiwgMCwKKwkJCWNvcmUsIGdfY2hpcF9pZGVudCwgY2hpcCk7Cit9CisKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKK3N0YXRpYyBpbnQgdmlkaW9jZ21idWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2aWRlb19tYnVmICptYnVmKQoreworCXN0cnVjdCBzYWE3MTQ2X2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxID0gJmZoLT52aWRlb19xOworCWludCBlcnIsIGk7CisKKwkvKiBmaXhtZTogbnVtYmVyIG9mIGNhcHR1cmUgYnVmZmVycyBhbmQgc2l6ZXMgZm9yIHY0bCBhcHBzICovCisJaW50IGdidWZmZXJzID0gMjsKKwlpbnQgZ2J1ZnNpemUgPSA3NjggKiA1NzYgKiA0OworCisJREVCX0QoKCJWSURJT0NHTUJVRiBcbiIpKTsKKworCXEgPSAmZmgtPnZpZGVvX3E7CisJZXJyID0gdmlkZW9idWZfbW1hcF9zZXR1cChxLCBnYnVmZmVycywgZ2J1ZnNpemUsCisJCQlWNEwyX01FTU9SWV9NTUFQKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWdidWZmZXJzID0gZXJyOworCW1lbXNldChtYnVmLCAwLCBzaXplb2YoKm1idWYpKTsKKwltYnVmLT5mcmFtZXMgPSBnYnVmZmVyczsKKwltYnVmLT5zaXplICAgPSBnYnVmZmVycyAqIGdidWZzaXplOworCWZvciAoaSA9IDA7IGkgPCBnYnVmZmVyczsgaSsrKQorCQltYnVmLT5vZmZzZXRzW2ldID0gaSAqIGdidWZzaXplOworCXJldHVybiAwOworfQorI2VuZGlmCisKK2NvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBzYWE3MTQ2X3ZpZGVvX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwICAgICAgICAgICAgID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCAgICAgPSB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9vdmVybGF5ID0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwICAgICAgICA9IHZpZGlvY19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwICAgICAgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCAgICAgICAgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9vdmVybGF5ICAgID0gdmlkaW9jX2dfZm10X3ZpZF9vdmVybGF5LAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfb3ZlcmxheSAgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfb3ZlcmxheSwKKwkudmlkaW9jX3NfZm10X3ZpZF9vdmVybGF5ICAgID0gdmlkaW9jX3NfZm10X3ZpZF9vdmVybGF5LAorCS52aWRpb2NfZ19mbXRfdmJpX2NhcCAgICAgICAgPSB2aWRpb2NfZ19mbXRfdmJpX2NhcCwKKwkudmlkaW9jX2dfY2hpcF9pZGVudCAgICAgICAgID0gdmlkaW9jX2dfY2hpcF9pZGVudCwKKworCS52aWRpb2Nfb3ZlcmxheSAJICAgICA9IHZpZGlvY19vdmVybGF5LAorCS52aWRpb2NfZ19mYnVmICAJICAgICA9IHZpZGlvY19nX2ZidWYsCisJLnZpZGlvY19zX2ZidWYgIAkgICAgID0gdmlkaW9jX3NfZmJ1ZiwKKwkudmlkaW9jX3JlcWJ1ZnMgICAgICAgICAgICAgID0gdmlkaW9jX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZiAgICAgICAgICAgICA9IHZpZGlvY19xdWVyeWJ1ZiwKKwkudmlkaW9jX3FidWYgICAgICAgICAgICAgICAgID0gdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZiAgICAgICAgICAgICAgICA9IHZpZGlvY19kcWJ1ZiwKKwkudmlkaW9jX2dfc3RkICAgICAgICAgICAgICAgID0gdmlkaW9jX2dfc3RkLAorCS52aWRpb2Nfc19zdGQgICAgICAgICAgICAgICAgPSB2aWRpb2Nfc19zdGQsCisJLnZpZGlvY19xdWVyeWN0cmwgICAgICAgICAgICA9IHZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19nX2N0cmwgICAgICAgICAgICAgICA9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgICAgICAgICAgICAgICA9IHZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19zdHJlYW1vbiAgICAgICAgICAgICA9IHZpZGlvY19zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZiAgICAgICAgICAgID0gdmlkaW9jX3N0cmVhbW9mZiwKKwkudmlkaW9jX2dfcGFybSAJCSAgICAgPSB2aWRpb2NfZ19wYXJtLAorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCS52aWRpb2NnbWJ1ZiAgICAgICAgICAgICAgICAgPSB2aWRpb2NnbWJ1ZiwKKyNlbmRpZgorfTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGJ1ZmZlciBoYW5kbGluZyBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL0tjb25maWcKaW5kZXggNmY5MmJlYS4uNTJjM2Y2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL0tjb25maWcKQEAgLTIxLDE2ICsyMSwxNyBAQAogCXRyaXN0YXRlCiAJZGVmYXVsdCBWSURFT19NRURJQSAmJiBJMkMKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9YQzUwMDAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwWFggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjkwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfVEVBNTc2MSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1RFQTU3NjcgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9UREE5ODg3IGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfWEMyMDI4IGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfWEM1MDAwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfTVQyMFhYIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBODI5MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1RFQTU3NjEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9URUE1NzY3IGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBOTg4NyBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX01DNDRTODAzIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAotbWVudWNvbmZpZyBNRURJQV9UVU5FUl9DVVNUT01JWkUKK21lbnVjb25maWcgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJYm9vbCAiQ3VzdG9taXplIGFuYWxvZyBhbmQgaHlicmlkIHR1bmVyIG1vZHVsZXMgdG8gYnVpbGQiCiAJZGVwZW5kcyBvbiBNRURJQV9UVU5FUgogCWRlZmF1bHQgbgpAQCAtNDMsMTMgKzQ0LDEzIEBACiAKIAkgIElmIHVuc3VyZSBzYXkgTi4KIAotaWYgTUVESUFfVFVORVJfQ1VTVE9NSVpFCitpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAogY29uZmlnIE1FRElBX1RVTkVSX1NJTVBMRQogCXRyaXN0YXRlICJTaW1wbGUgdHVuZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwogCXNlbGVjdCBNRURJQV9UVU5FUl9UREE5ODg3Ci0JZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlaRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdmFyaW91cyBzaW1wbGUgdHVuZXJzLgogCkBAIC01OCwyOCArNTksMjggQEAKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwogCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjdYCiAJc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxCi0JZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlaRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgUGhpbGlwcyBUREE4MjkwKzgyNzUoYSkgdHVuZXIuCiAKIGNvbmZpZyBNRURJQV9UVU5FUl9UREE4MjdYCiAJdHJpc3RhdGUgIlBoaWxpcHMgVERBODI3WCBzaWxpY29uIHR1bmVyIgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCi0JZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBEVkItVCBzaWxpY29uIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgdHVuZXIuCiAKIGNvbmZpZyBNRURJQV9UVU5FUl9UREExODI3MQogCXRyaXN0YXRlICJOWFAgVERBMTgyNzEgc2lsaWNvbiB0dW5lciIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIEEgc2lsaWNvbiB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIHR1bmVyLgogCiBjb25maWcgTUVESUFfVFVORVJfVERBOTg4NwogCXRyaXN0YXRlICJUREEgOTg4NS82LzcgYW5hbG9nIElGIGRlbW9kdWxhdG9yIgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCi0JZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlaRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgUGhpbGlwcyBUREE5ODg1LzYvNwogCSAgYW5hbG9nIElGIGRlbW9kdWxhdG9yLgpAQCAtODgsNjMgKzg5LDYzIEBACiAJdHJpc3RhdGUgIlRFQSA1NzYxIHJhZGlvIHR1bmVyIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBURUE1NzYxIHJhZGlvIHR1bmVyLgogCiBjb25maWcgTUVESUFfVFVORVJfVEVBNTc2NwogCXRyaXN0YXRlICJURUEgNTc2NyByYWRpbyB0dW5lciIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFRFQTU3NjcgcmFkaW8gdHVuZXIuCiAKIGNvbmZpZyBNRURJQV9UVU5FUl9NVDIwWFgKIAl0cmlzdGF0ZSAiTWljcm90dW5lIDIwMzIgLyAyMDUwIHR1bmVycyIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBNVDIwMzIgLyBNVDIwNTAgdHVuZXIuCiAKIGNvbmZpZyBNRURJQV9UVU5FUl9NVDIwNjAKIAl0cmlzdGF0ZSAiTWljcm90dW5lIE1UMjA2MCBzaWxpY29uIElGIHR1bmVyIgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCi0JZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBkcml2ZXIgZm9yIHRoZSBzaWxpY29uIElGIHR1bmVyIE1UMjA2MCBmcm9tIE1pY3JvdHVuZS4KIAogY29uZmlnIE1FRElBX1RVTkVSX01UMjI2NgogCXRyaXN0YXRlICJNaWNyb3R1bmUgTVQyMjY2IHNpbGljb24gdHVuZXIiCiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKLQlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBBIGRyaXZlciBmb3IgdGhlIHNpbGljb24gYmFzZWJhbmQgdHVuZXIgTVQyMjY2IGZyb20gTWljcm90dW5lLgogCiBjb25maWcgTUVESUFfVFVORVJfTVQyMTMxCiAJdHJpc3RhdGUgIk1pY3JvdHVuZSBNVDIxMzEgc2lsaWNvbiB0dW5lciIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIEEgZHJpdmVyIGZvciB0aGUgc2lsaWNvbiBiYXNlYmFuZCB0dW5lciBNVDIxMzEgZnJvbSBNaWNyb3R1bmUuCiAKIGNvbmZpZyBNRURJQV9UVU5FUl9RVDEwMTAKIAl0cmlzdGF0ZSAiUXVhbnRlayBRVDEwMTAgc2lsaWNvbiB0dW5lciIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIEEgZHJpdmVyIGZvciB0aGUgc2lsaWNvbiB0dW5lciBRVDEwMTAgZnJvbSBRdWFudGVrLgogCiBjb25maWcgTUVESUFfVFVORVJfWEMyMDI4CiAJdHJpc3RhdGUgIlhDZWl2ZSB4YzIwMjgveGMzMDI4IHR1bmVycyIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSB4YzIwMjgveGMzMDI4IHR1bmVycy4KIAogY29uZmlnIE1FRElBX1RVTkVSX1hDNTAwMAogCXRyaXN0YXRlICJYY2VpdmUgWEM1MDAwIHNpbGljb24gdHVuZXIiCiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKLQlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBBIGRyaXZlciBmb3IgdGhlIHNpbGljb24gdHVuZXIgWEM1MDAwIGZyb20gWGNlaXZlLgogCSAgVGhpcyBkZXZpY2UgaXMgb25seSB1c2VkIGluc2lkZSBhIFNpUCBjYWxsZWQgdG9ndGhlciB3aXRoIGEKQEAgLTE1MywxNSArMTU0LDIyIEBACiBjb25maWcgTUVESUFfVFVORVJfTVhMNTAwNVMKIAl0cmlzdGF0ZSAiTWF4TGluZWFyIE1TTDUwMDVTIHNpbGljb24gdHVuZXIiCiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKLQlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBBIGRyaXZlciBmb3IgdGhlIHNpbGljb24gdHVuZXIgTVhMNTAwNVMgZnJvbSBNYXhMaW5lYXIuCiAKIGNvbmZpZyBNRURJQV9UVU5FUl9NWEw1MDA3VAogCXRyaXN0YXRlICJNYXhMaW5lYXIgTXhMNTAwN1Qgc2lsaWNvbiB0dW5lciIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIEEgZHJpdmVyIGZvciB0aGUgc2lsaWNvbiB0dW5lciBNeEw1MDA3VCBmcm9tIE1heExpbmVhci4KIAotZW5kaWYgIyBNRURJQV9UVU5FUl9DVVNUT01JWkUKK2NvbmZpZyBNRURJQV9UVU5FUl9NQzQ0UzgwMworCXRyaXN0YXRlICJGcmVlc2NhbGUgTUM0NFM4MDMgTG93IFBvd2VyIENNT1MgQnJvYWRiYW5kIHR1bmVycyIKKwlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQworCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEZyZWVzY2FsZSBNQzQ0UzgwMyBiYXNlZCB0dW5lcnMKKworZW5kaWYgIyBNRURJQV9UVU5FUl9DVVNUT01JU0UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9NYWtlZmlsZQppbmRleCA0ZGZiZTViLi40MTMyYjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL01ha2VmaWxlCkBAIC0yMiw2ICsyMiw3IEBACiBvYmotJChDT05GSUdfTUVESUFfVFVORVJfTVQyMTMxKSArPSBtdDIxMzEubwogb2JqLSQoQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDVTKSArPSBteGw1MDA1cy5vCiBvYmotJChDT05GSUdfTUVESUFfVFVORVJfTVhMNTAwN1QpICs9IG14bDUwMDd0Lm8KK29iai0kKENPTkZJR19NRURJQV9UVU5FUl9NQzQ0UzgwMykgKz0gbWM0NHM4MDMubwogCiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbWM0NHM4MDMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tYzQ0czgwMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYzQ0ODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbWM0NHM4MDMuYwpAQCAtMCwwICsxLDM3MSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIEZyZWVzY2FsZSBNQzQ0UzgwMyBMb3cgUG93ZXIgQ01PUyBCcm9hZGJhbmQgVHVuZXIKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IEpvY2hlbiBGcmllZHJpY2ggPGpvY2hlbkBzY3JhbS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS49CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKworI2luY2x1ZGUgIm1jNDRzODAzLmgiCisjaW5jbHVkZSAibWM0NHM4MDNfcHJpdi5oIgorCisjZGVmaW5lIG1jX3ByaW50ayhsZXZlbCwgZm9ybWF0LCBhcmcuLi4pCVwKKwlwcmludGsobGV2ZWwgIm1jNDRzODAzOiAiIGZvcm1hdCAsICMjIGFyZykKKworLyogV3JpdGVzIGEgc2luZ2xlIHJlZ2lzdGVyICovCitzdGF0aWMgaW50IG1jNDRzODAzX3dyaXRlcmVnKHN0cnVjdCBtYzQ0czgwM19wcml2ICpwcml2LCB1MzIgdmFsKQoreworCXU4IGJ1ZlszXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gcHJpdi0+Y2ZnLT5pMmNfYWRkcmVzcywgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDMKKwl9OworCisJYnVmWzBdID0gKHZhbCAmIDB4ZmYwMDAwKSA+PiAxNjsKKwlidWZbMV0gPSAodmFsICYgMHhmZjAwKSA+PiA4OworCWJ1ZlsyXSA9ICh2YWwgJiAweGZmKTsKKworCWlmIChpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCAmbXNnLCAxKSAhPSAxKSB7CisJCW1jX3ByaW50ayhLRVJOX1dBUk5JTkcsICJJMkMgd3JpdGUgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCXJldHVybiAwOworfQorCisvKiBSZWFkcyBhIHNpbmdsZSByZWdpc3RlciAqLworc3RhdGljIGludCBtYzQ0czgwM19yZWFkcmVnKHN0cnVjdCBtYzQ0czgwM19wcml2ICpwcml2LCB1OCByZWcsIHUzMiAqdmFsKQoreworCXUzMiB3dmFsOworCXU4IGJ1ZlszXTsKKwlpbnQgcmV0OworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0geworCQl7IC5hZGRyID0gcHJpdi0+Y2ZnLT5pMmNfYWRkcmVzcywgLmZsYWdzID0gSTJDX01fUkQsCisJCSAgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDMgfSwKKwl9OworCisJd3ZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfREFUQVJFRywgTUM0NFM4MDNfQUREUikgfAorCSAgICAgICBNQzQ0UzgwM19SRUdfU00ocmVnLCBNQzQ0UzgwM19EKTsKKworCXJldCA9IG1jNDRzODAzX3dyaXRlcmVnKHByaXYsIHd2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgbXNnLCAxKSAhPSAxKSB7CisJCW1jX3ByaW50ayhLRVJOX1dBUk5JTkcsICJJMkMgcmVhZCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisKKwkqdmFsID0gKGJ1ZlswXSA8PCAxNikgfCAoYnVmWzFdIDw8IDgpIHwgYnVmWzJdOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWM0NHM4MDNfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgbWM0NHM4MDNfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCisJZmUtPnR1bmVyX3ByaXYgPSBOVUxMOworCWtmcmVlKHByaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWM0NHM4MDNfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgbWM0NHM4MDNfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCXUzMiB2YWw7CisJaW50IGVycjsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisKKy8qIFJlc2V0IGNoaXAgKi8KKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX1JFU0VULCBNQzQ0UzgwM19BRERSKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX1JTKTsKKworCWVyciA9IG1jNDRzODAzX3dyaXRlcmVnKHByaXYsIHZhbCk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisJdmFsID0gTUM0NFM4MDNfUkVHX1NNKE1DNDRTODAzX1JFR19SRVNFVCwgTUM0NFM4MDNfQUREUik7CisKKwllcnIgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB2YWwpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworLyogUG93ZXIgVXAgYW5kIFN0YXJ0IE9zYyAqLworCisJdmFsID0gTUM0NFM4MDNfUkVHX1NNKE1DNDRTODAzX1JFR19SRUZPU0MsIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMHhDMCwgTUM0NFM4MDNfUkVGT1NDKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX09TQ1NFTCk7CisKKwllcnIgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB2YWwpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfUE9XRVIsIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMHgyMDAsIE1DNDRTODAzX1BPV0VSKTsKKworCWVyciA9IG1jNDRzODAzX3dyaXRlcmVnKHByaXYsIHZhbCk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisJbXNsZWVwKDEwKTsKKworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfUkVGT1NDLCBNQzQ0UzgwM19BRERSKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDB4NDAsIE1DNDRTODAzX1JFRk9TQykgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19PU0NTRUwpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwltc2xlZXAoMjApOworCisvKiBTZXR1cCBNaXhlciAqLworCisJdmFsID0gTUM0NFM4MDNfUkVHX1NNKE1DNDRTODAzX1JFR19NSVhFUiwgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19UUklfU1RBVEUpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMHg3RiwgTUM0NFM4MDNfTUlYRVJfUkVTKTsKKworCWVyciA9IG1jNDRzODAzX3dyaXRlcmVnKHByaXYsIHZhbCk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisvKiBTZXR1cCBDaXJxdWl0IEFkanVzdCAqLworCisJdmFsID0gTUM0NFM4MDNfUkVHX1NNKE1DNDRTODAzX1JFR19DSVJDQURKLCBNQzQ0UzgwM19BRERSKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0cxKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0czKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDB4MywgTUM0NFM4MDNfQ0lSQ0FESl9SRVMpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfRzYpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00ocHJpdi0+Y2ZnLT5kaWdfb3V0LCBNQzQ0UzgwM19TMSkgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgweDMsIE1DNDRTODAzX0xQKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0NMUkYpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfQ0xJRik7CisKKwllcnIgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB2YWwpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfQ0lSQ0FESiwgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19HMSkgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19HMykgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgweDMsIE1DNDRTODAzX0NJUkNBREpfUkVTKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0c2KSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKHByaXYtPmNmZy0+ZGlnX291dCwgTUM0NFM4MDNfUzEpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMHgzLCBNQzQ0UzgwM19MUCk7CisKKwllcnIgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB2YWwpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworLyogU2V0dXAgRGlndHVuZSAqLworCisJdmFsID0gTUM0NFM4MDNfUkVHX1NNKE1DNDRTODAzX1JFR19ESUdUVU5FLCBNQzQ0UzgwM19BRERSKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDMsIE1DNDRTODAzX1hPRCk7CisKKwllcnIgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB2YWwpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworLyogU2V0dXAgQUdDICovCisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX0xOQUFHQywgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19BVDEpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfQVQyKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0FHQ19BTl9ESUcpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfQUdDX1JFQURfRU4pIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfTE5BMCk7CisKKwllcnIgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB2YWwpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisJcmV0dXJuIDA7CisKK2V4aXQ6CisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKworCW1jX3ByaW50ayhLRVJOX1dBUk5JTkcsICJJL08gRXJyb3JcbiIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbWM0NHM4MDNfc2V0X3BhcmFtcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgbWM0NHM4MDNfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCXUzMiByMSwgcjIsIG4xLCBuMiwgbG8xLCBsbzIsIGZyZXEsIHZhbDsKKwlpbnQgZXJyOworCisJcHJpdi0+ZnJlcXVlbmN5ID0gcGFyYW1zLT5mcmVxdWVuY3k7CisKKwlyMSA9IE1DNDRTODAzX09TQyAvIDEwMDAwMDA7CisJcjIgPSBNQzQ0UzgwM19PU0MgLyAgMTAwMDAwOworCisJbjEgPSAocGFyYW1zLT5mcmVxdWVuY3kgKyBNQzQ0UzgwM19JRjEgKyA1MDAwMDApIC8gMTAwMDAwMDsKKwlmcmVxID0gTUM0NFM4MDNfT1NDIC8gcjEgKiBuMTsKKwlsbzEgPSAoKDYwICogbjEpICsgKHIxIC8gMikpIC8gcjE7CisJZnJlcSA9IGZyZXEgLSBwYXJhbXMtPmZyZXF1ZW5jeTsKKworCW4yID0gKGZyZXEgLSBNQzQ0UzgwM19JRjIgKyA1MDAwMCkgLyAxMDAwMDA7CisJbG8yID0gKCg2MCAqIG4yKSArIChyMiAvIDIpKSAvIHIyOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfUkVGRElWLCBNQzQ0UzgwM19BRERSKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKHIxLTEsIE1DNDRTODAzX1IxKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKHIyLTEsIE1DNDRTODAzX1IyKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX1JFRkJVRl9FTik7CisKKwllcnIgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB2YWwpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfTE8xLCBNQzQ0UzgwM19BRERSKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKG4xLTIsIE1DNDRTODAzX0xPMSk7CisKKwllcnIgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB2YWwpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfTE8yLCBNQzQ0UzgwM19BRERSKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKG4yLTIsIE1DNDRTODAzX0xPMik7CisKKwllcnIgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB2YWwpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfRElHVFVORSwgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19EQSkgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTShsbzEsIE1DNDRTODAzX0xPX1JFRikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19BVCk7CisKKwllcnIgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB2YWwpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfRElHVFVORSwgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgyLCBNQzQ0UzgwM19EQSkgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTShsbzIsIE1DNDRTODAzX0xPX1JFRikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19BVCk7CisKKwllcnIgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB2YWwpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisKKwlyZXR1cm4gMDsKKworZXhpdDoKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCisJbWNfcHJpbnRrKEtFUk5fV0FSTklORywgIkkvTyBFcnJvclxuIik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBtYzQ0czgwM19nZXRfZnJlcXVlbmN5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmZyZXF1ZW5jeSkKK3sKKwlzdHJ1Y3QgbWM0NHM4MDNfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCSpmcmVxdWVuY3kgPSBwcml2LT5mcmVxdWVuY3k7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHZiX3R1bmVyX29wcyBtYzQ0czgwM190dW5lcl9vcHMgPSB7CisJLmluZm8gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJGcmVlc2NhbGUgTUM0NFM4MDMiLAorCQkuZnJlcXVlbmN5X21pbiAgPSAgIDQ4MDAwMDAwLAorCQkuZnJlcXVlbmN5X21heCAgPSAxMDAwMDAwMDAwLAorCQkuZnJlcXVlbmN5X3N0ZXAgPSAgICAgMTAwMDAwLAorCX0sCisKKwkucmVsZWFzZSAgICAgICA9IG1jNDRzODAzX3JlbGVhc2UsCisJLmluaXQgICAgICAgICAgPSBtYzQ0czgwM19pbml0LAorCS5zZXRfcGFyYW1zICAgID0gbWM0NHM4MDNfc2V0X3BhcmFtcywKKwkuZ2V0X2ZyZXF1ZW5jeSA9IG1jNDRzODAzX2dldF9mcmVxdWVuY3kKK307CisKKy8qIFRoaXMgZnVuY3Rpb25zIHRyaWVzIHRvIGlkZW50aWZ5IGEgTUM0NFM4MDMgdHVuZXIgYnkgcmVhZGluZyB0aGUgSUQKKyAgIHJlZ2lzdGVyLiBUaGlzIGlzIGhhc3R5LiAqLworc3RydWN0IGR2Yl9mcm9udGVuZCAqbWM0NHM4MDNfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCSBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgc3RydWN0IG1jNDRzODAzX2NvbmZpZyAqY2ZnKQoreworCXN0cnVjdCBtYzQ0czgwM19wcml2ICpwcml2OworCXUzMiByZWc7CisJdTggaWQ7CisJaW50IHJldDsKKworCXJlZyA9IDA7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1jNDRzODAzX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXByaXYtPmNmZyA9IGNmZzsKKwlwcml2LT5pMmMgPSBpMmM7CisJcHJpdi0+ZmUgID0gZmU7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOyAvKiBvcGVuIGkyY19nYXRlICovCisKKwlyZXQgPSBtYzQ0czgwM19yZWFkcmVnKHByaXYsIE1DNDRTODAzX1JFR19JRCwgJnJlZyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCWlkID0gTUM0NFM4MDNfUkVHX01TKHJlZywgTUM0NFM4MDNfSUQpOworCisJaWYgKGlkICE9IDB4MTQpIHsKKwkJbWNfcHJpbnRrKEtFUk5fRVJSLCAidW5zdXBwb3J0ZWQgSUQgIgorCQkgICAgICAgIigleCBzaG91bGQgYmUgMHgxNClcbiIsIGlkKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwltY19wcmludGsoS0VSTl9JTkZPLCAic3VjY2Vzc2Z1bGx5IGlkZW50aWZpZWQgKElEID0gJXgpXG4iLCBpZCk7CisJbWVtY3B5KCZmZS0+b3BzLnR1bmVyX29wcywgJm1jNDRzODAzX3R1bmVyX29wcywKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBkdmJfdHVuZXJfb3BzKSk7CisKKwlmZS0+dHVuZXJfcHJpdiA9IHByaXY7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOyAvKiBjbG9zZSBpMmNfZ2F0ZSAqLworCisJcmV0dXJuIGZlOworCitlcnJvcjoKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOyAvKiBjbG9zZSBpMmNfZ2F0ZSAqLworCisJa2ZyZWUocHJpdik7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKG1jNDRzODAzX2F0dGFjaCk7CisKK01PRFVMRV9BVVRIT1IoIkpvY2hlbiBGcmllZHJpY2giKTsKK01PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIE1DNDRTODAzIHNpbGljb24gdHVuZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbWM0NHM4MDMuaCBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tYzQ0czgwMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZjM4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbWM0NHM4MDMuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogIERyaXZlciBmb3IgRnJlZXNjYWxlIE1DNDRTODAzIExvdyBQb3dlciBDTU9TIEJyb2FkYmFuZCBUdW5lcgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgSm9jaGVuIEZyaWVkcmljaCA8am9jaGVuQHNjcmFtLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLj0KKyAqLworCisjaWZuZGVmIE1DNDRTODAzX0gKKyNkZWZpbmUgTUM0NFM4MDNfSAorCitzdHJ1Y3QgZHZiX2Zyb250ZW5kOworc3RydWN0IGkyY19hZGFwdGVyOworCitzdHJ1Y3QgbWM0NHM4MDNfY29uZmlnIHsKKwl1OCBpMmNfYWRkcmVzczsKKwl1OCBkaWdfb3V0OworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzKSB8fCBcCisgICAgKGRlZmluZWQoQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKm1jNDRzODAzX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBtYzQ0czgwM19jb25maWcgKmNmZyk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICptYzQ0czgwM19hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgbWM0NHM4MDNfY29uZmlnICpjZmcpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLyogQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL21jNDRzODAzX3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tYzQ0czgwM19wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhOTI3OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tYzQ0czgwM19wcml2LmgKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiAgRHJpdmVyIGZvciBGcmVlc2NhbGUgTUM0NFM4MDMgTG93IFBvd2VyIENNT1MgQnJvYWRiYW5kIFR1bmVyCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBKb2NoZW4gRnJpZWRyaWNoIDxqb2NoZW5Ac2NyYW0uZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuPQorICovCisKKyNpZm5kZWYgTUM0NFM4MDNfUFJJVl9ICisjZGVmaW5lIE1DNDRTODAzX1BSSVZfSAorCisvKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGluIHRoZSBkYXRhc2hlZXQKKyAgIGh0dHA6Ly93d3cuZnJlZXNjYWxlLmNvbS9maWxlcy9yZl9pZi9kb2MvZGF0YV9zaGVldC9NQzQ0UzgwMy5wZGYKKworICAgU1BJIG9yIEkyQyBBZGRyZXNzIDogMHhjMC0weGM2CisKKyAgIFJlZy5ObyB8IEZ1bmN0aW9uCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgMDAgfCBQb3dlciBEb3duCisgICAgICAgMDEgfCBSZWZlcmVuY2UgT3N6aWxsYXRvcgorICAgICAgIDAyIHwgUmVmZXJlbmNlIERpdmlkZXJzCisgICAgICAgMDMgfCBNaXhlciBhbmQgUmVmZXJlbmNlIEJ1ZmZlcgorICAgICAgIDA0IHwgUmVzZXQvU2VyaWFsIE91dAorICAgICAgIDA1IHwgTE8gMQorICAgICAgIDA2IHwgTE8gMgorICAgICAgIDA3IHwgQ2lyY3VpdCBBZGp1c3QKKyAgICAgICAwOCB8IFRlc3QKKyAgICAgICAwOSB8IERpZ2l0YWwgVHVuZQorICAgICAgIDBBIHwgTE5BIEFHQworICAgICAgIDBCIHwgRGF0YSBSZWdpc3RlciBBZGRyZXNzCisgICAgICAgMEMgfCBSZWd1bGF0b3IgVGVzdAorICAgICAgIDBEIHwgVkNPIFRlc3QKKyAgICAgICAwRSB8IExOQSBHYWluL0lucHV0IFBvd2VyCisgICAgICAgMEYgfCBJRCBCaXRzCisKKyovCisKKyNkZWZpbmUgTUM0NFM4MDNfT1NDIDI2MDAwMDAwCS8qIDI2IE1IeiAqLworI2RlZmluZSBNQzQ0UzgwM19JRjEgMTA4NjAwMDAwMCAvKiAxMDg2IE1IeiAqLworI2RlZmluZSBNQzQ0UzgwM19JRjIgMzYxMjUwMDAJLyogMzYuMTI1IE1IeiAqLworCisjZGVmaW5lIE1DNDRTODAzX1JFR19QT1dFUgkwCisjZGVmaW5lIE1DNDRTODAzX1JFR19SRUZPU0MJMQorI2RlZmluZSBNQzQ0UzgwM19SRUdfUkVGRElWCTIKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX01JWEVSCTMKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX1JFU0VUCTQKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX0xPMQk1CisjZGVmaW5lIE1DNDRTODAzX1JFR19MTzIJNgorI2RlZmluZSBNQzQ0UzgwM19SRUdfQ0lSQ0FESgk3CisjZGVmaW5lIE1DNDRTODAzX1JFR19URVNUCTgKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX0RJR1RVTkUJOQorI2RlZmluZSBNQzQ0UzgwM19SRUdfTE5BQUdDCTB4MEEKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX0RBVEFSRUcJMHgwQgorI2RlZmluZSBNQzQ0UzgwM19SRUdfUkVHVEVTVAkweDBDCisjZGVmaW5lIE1DNDRTODAzX1JFR19WQ09URVNUCTB4MEQKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX0xOQUdBSU4JMHgwRQorI2RlZmluZSBNQzQ0UzgwM19SRUdfSUQJCTB4MEYKKworLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTUM0NFM4MDNfQUREUgkJMHgwRgorI2RlZmluZSBNQzQ0UzgwM19BRERSX1MJCTAKKy8qIFJFR19QT1dFUiAqLworI2RlZmluZSBNQzQ0UzgwM19QT1dFUgkJMHhGRkZGRjAKKyNkZWZpbmUgTUM0NFM4MDNfUE9XRVJfUwk0CisvKiBSRUdfUkVGT1NDICovCisjZGVmaW5lIE1DNDRTODAzX1JFRk9TQwkJMHgxRkYwCisjZGVmaW5lIE1DNDRTODAzX1JFRk9TQ19TCTQKKyNkZWZpbmUgTUM0NFM4MDNfT1NDU0VMCQkweDIwMDAKKyNkZWZpbmUgTUM0NFM4MDNfT1NDU0VMX1MJMTMKKy8qIFJFR19SRUZESVYgKi8KKyNkZWZpbmUgTUM0NFM4MDNfUjIJCTB4MUZGMAorI2RlZmluZSBNQzQ0UzgwM19SMl9TCQk0CisjZGVmaW5lIE1DNDRTODAzX1JFRkJVRl9FTgkweDIwMDAKKyNkZWZpbmUgTUM0NFM4MDNfUkVGQlVGX0VOX1MJMTMKKyNkZWZpbmUgTUM0NFM4MDNfUjEJCTB4N0MwMDAKKyNkZWZpbmUgTUM0NFM4MDNfUjFfUwkJMTQKKy8qIFJFR19NSVhFUiAqLworI2RlZmluZSBNQzQ0UzgwM19SMwkJMHg3MAorI2RlZmluZSBNQzQ0UzgwM19SM19TCQk0CisjZGVmaW5lIE1DNDRTODAzX01VWDMJCTB4ODAKKyNkZWZpbmUgTUM0NFM4MDNfTVVYM19TCQk3CisjZGVmaW5lIE1DNDRTODAzX01VWDQJCTB4MTAwCisjZGVmaW5lIE1DNDRTODAzX01VWDRfUwkJOAorI2RlZmluZSBNQzQ0UzgwM19PU0NfU0NSCTB4MjAwCisjZGVmaW5lIE1DNDRTODAzX09TQ19TQ1JfUwk5CisjZGVmaW5lIE1DNDRTODAzX1RSSV9TVEFURQkweDQwMAorI2RlZmluZSBNQzQ0UzgwM19UUklfU1RBVEVfUwkxMAorI2RlZmluZSBNQzQ0UzgwM19CVUZfR0FJTgkweDgwMAorI2RlZmluZSBNQzQ0UzgwM19CVUZfR0FJTl9TCTExCisjZGVmaW5lIE1DNDRTODAzX0JVRl9JTwkJMHgxMDAwCisjZGVmaW5lIE1DNDRTODAzX0JVRl9JT19TCTEyCisjZGVmaW5lIE1DNDRTODAzX01JWEVSX1JFUwkweEZFMDAwCisjZGVmaW5lIE1DNDRTODAzX01JWEVSX1JFU19TCTEzCisvKiBSRUdfUkVTRVQgKi8KKyNkZWZpbmUgTUM0NFM4MDNfUlMJCTB4MTAKKyNkZWZpbmUgTUM0NFM4MDNfUlNfUwkJNAorI2RlZmluZSBNQzQ0UzgwM19TTwkJMHgyMAorI2RlZmluZSBNQzQ0UzgwM19TT19TCQk1CisvKiBSRUdfTE8xICovCisjZGVmaW5lIE1DNDRTODAzX0xPMQkJMHhGRkYwCisjZGVmaW5lIE1DNDRTODAzX0xPMV9TCQk0CisvKiBSRUdfTE8yICovCisjZGVmaW5lIE1DNDRTODAzX0xPMgkJMHg3RkZGMAorI2RlZmluZSBNQzQ0UzgwM19MTzJfUwkJNAorLyogUkVHX0NJUkNBREogKi8KKyNkZWZpbmUgTUM0NFM4MDNfRzEJCTB4MjAKKyNkZWZpbmUgTUM0NFM4MDNfRzFfUwkJNQorI2RlZmluZSBNQzQ0UzgwM19HMwkJMHg4MAorI2RlZmluZSBNQzQ0UzgwM19HM19TCQk3CisjZGVmaW5lIE1DNDRTODAzX0NJUkNBREpfUkVTCTB4MzAwCisjZGVmaW5lIE1DNDRTODAzX0NJUkNBREpfUkVTX1MJOAorI2RlZmluZSBNQzQ0UzgwM19HNgkJMHg0MDAKKyNkZWZpbmUgTUM0NFM4MDNfRzZfUwkJMTAKKyNkZWZpbmUgTUM0NFM4MDNfRzcJCTB4ODAwCisjZGVmaW5lIE1DNDRTODAzX0c3X1MJCTExCisjZGVmaW5lIE1DNDRTODAzX1MxCQkweDEwMDAKKyNkZWZpbmUgTUM0NFM4MDNfUzFfUwkJMTIKKyNkZWZpbmUgTUM0NFM4MDNfTFAJCTB4N0UwMDAKKyNkZWZpbmUgTUM0NFM4MDNfTFBfUwkJMTMKKyNkZWZpbmUgTUM0NFM4MDNfQ0xSRgkJMHg4MDAwMAorI2RlZmluZSBNQzQ0UzgwM19DTFJGX1MJCTE5CisjZGVmaW5lIE1DNDRTODAzX0NMSUYJCTB4MTAwMDAwCisjZGVmaW5lIE1DNDRTODAzX0NMSUZfUwkJMjAKKy8qIFJFR19URVNUICovCisvKiBSRUdfRElHVFVORSAqLworI2RlZmluZSBNQzQ0UzgwM19EQQkJMHhGMAorI2RlZmluZSBNQzQ0UzgwM19EQV9TCQk0CisjZGVmaW5lIE1DNDRTODAzX1hPRAkJMHgzMDAKKyNkZWZpbmUgTUM0NFM4MDNfWE9EX1MJCTgKKyNkZWZpbmUgTUM0NFM4MDNfUlNUCQkweDEwMDAwCisjZGVmaW5lIE1DNDRTODAzX1JTVF9TCQkxNgorI2RlZmluZSBNQzQ0UzgwM19MT19SRUYJCTB4MUZGRjAwCisjZGVmaW5lIE1DNDRTODAzX0xPX1JFRl9TCTgKKyNkZWZpbmUgTUM0NFM4MDNfQVQJCTB4MjAwMDAwCisjZGVmaW5lIE1DNDRTODAzX0FUX1MJCTIxCisjZGVmaW5lIE1DNDRTODAzX01UCQkweDQwMDAwMAorI2RlZmluZSBNQzQ0UzgwM19NVF9TCQkyMgorLyogUkVHX0xOQUFHQyAqLworI2RlZmluZSBNQzQ0UzgwM19HCQkweDNGMAorI2RlZmluZSBNQzQ0UzgwM19HX1MJCTQKKyNkZWZpbmUgTUM0NFM4MDNfQVQxCQkweDQwMAorI2RlZmluZSBNQzQ0UzgwM19BVDFfUwkJMTAKKyNkZWZpbmUgTUM0NFM4MDNfQVQyCQkweDgwMAorI2RlZmluZSBNQzQ0UzgwM19BVDJfUwkJMTEKKyNkZWZpbmUgTUM0NFM4MDNfSExfR1JfRU4JMHg4MDAwCisjZGVmaW5lIE1DNDRTODAzX0hMX0dSX0VOX1MJMTUKKyNkZWZpbmUgTUM0NFM4MDNfQUdDX0FOX0RJRwkweDEwMDAwCisjZGVmaW5lIE1DNDRTODAzX0FHQ19BTl9ESUdfUwkxNgorI2RlZmluZSBNQzQ0UzgwM19BVFRFTl9FTgkweDIwMDAwCisjZGVmaW5lIE1DNDRTODAzX0FUVEVOX0VOX1MJMTcKKyNkZWZpbmUgTUM0NFM4MDNfQUdDX1JFQURfRU4JMHg0MDAwMAorI2RlZmluZSBNQzQ0UzgwM19BR0NfUkVBRF9FTl9TCTE4CisjZGVmaW5lIE1DNDRTODAzX0xOQTAJCTB4ODAwMDAKKyNkZWZpbmUgTUM0NFM4MDNfTE5BMF9TCQkxOQorI2RlZmluZSBNQzQ0UzgwM19BR0NfU0VMCTB4MTAwMDAwCisjZGVmaW5lIE1DNDRTODAzX0FHQ19TRUxfUwkyMAorI2RlZmluZSBNQzQ0UzgwM19BVDAJCTB4MjAwMDAwCisjZGVmaW5lIE1DNDRTODAzX0FUMF9TCQkyMQorI2RlZmluZSBNQzQ0UzgwM19CCQkweEMwMDAwMAorI2RlZmluZSBNQzQ0UzgwM19CX1MJCTIyCisvKiBSRUdfREFUQVJFRyAqLworI2RlZmluZSBNQzQ0UzgwM19ECQkweEYwCisjZGVmaW5lIE1DNDRTODAzX0RfUwkJNAorLyogUkVHX1JFR1RFU1QgKi8KKy8qIFJFR19WQ09URVNUICovCisvKiBSRUdfTE5BR0FJTiAqLworI2RlZmluZSBNQzQ0UzgwM19JRl9QV1IJCTB4NzAwCisjZGVmaW5lIE1DNDRTODAzX0lGX1BXUl9TCTgKKyNkZWZpbmUgTUM0NFM4MDNfUkZfUFdSCQkweDM4MDAKKyNkZWZpbmUgTUM0NFM4MDNfUkZfUFdSX1MJMTEKKyNkZWZpbmUgTUM0NFM4MDNfTE5BX0dBSU4JMHhGQzAwMAorI2RlZmluZSBNQzQ0UzgwM19MTkFfR0FJTl9TCTE0CisvKiBSRUdfSUQgKi8KKyNkZWZpbmUgTUM0NFM4MDNfSUQJCTB4M0UwMAorI2RlZmluZSBNQzQ0UzgwM19JRF9TCQk5CisKKy8qIFNvbWUgbWFjcm9zIHRvIHJlYWQvd3JpdGUgZmllbGRzICovCisKKy8qIEZpcnN0IHNoaWZ0LCB0aGVuIG1hc2sgKi8KKyNkZWZpbmUgTUM0NFM4MDNfUkVHX1NNKF92YWwsIF9yZWcpCQkJCQlcCisJKCgoX3ZhbCkgPDwgX3JlZyMjX1MpICYgKF9yZWcpKQorCisvKiBGaXJzdCBtYXNrLCB0aGVuIHNoaWZ0ICovCisjZGVmaW5lIE1DNDRTODAzX1JFR19NUyhfdmFsLCBfcmVnKQkJCQkJXAorCSgoKF92YWwpICYgKF9yZWcpKSA+PiBfcmVnIyNfUykKKworc3RydWN0IG1jNDRzODAzX3ByaXYgeworCXN0cnVjdCBtYzQ0czgwM19jb25maWcgKmNmZzsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKKworCXUzMiBmcmVxdWVuY3k7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tdDIwNjAuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tdDIwNjAuYwppbmRleCAxMjIwNmQ3Li5jN2FiZTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXQyMDYwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL210MjA2MC5jCkBAIC0yNzgsNyArMjc4LDcgQEAKIAl3aGlsZSAoaSsrIDwgMTAgJiYgbXQyMDYwX3JlYWRyZWcocHJpdiwgUkVHX01JU0NfU1RBVCwgJmIpID09IDAgJiYgKGIgJiAoMSA8PCA2KSkgPT0gMCkKIAkJbXNsZWVwKDIwKTsKIAotCWlmIChpIDwgMTApIHsKKwlpZiAoaSA8PSAxMCkgewogCQltdDIwNjBfcmVhZHJlZyhwcml2LCBSRUdfRk1fRlJFUSwgJnByaXYtPmZtZnJlcSk7IC8vIG5vdyBmaW5kIG91dCwgd2hhdCBpcyBmbXJlcSB1c2VkIGZvciA6KQogCQlkcHJpbnRrKCJjYWxpYnJhdGlvbiB3YXMgc3VjY2Vzc2Z1bDogJWQiLCAoaW50KXByaXYtPmZtZnJlcSk7CiAJfSBlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXQyMHh4LmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXQyMHh4LmMKaW5kZXggMzViNzYzYS4uNDQ2MDhhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL210MjB4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tdDIweHguYwpAQCAtNiw3ICs2LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlICJ0dW5lci1pMmMuaCIKICNpbmNsdWRlICJtdDIweHguaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwNXMuYwppbmRleCAzMTUyMmQyLi4wODAzZGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwNXMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwNXMuYwpAQCAtNDAwMywxMiArNDAwMywxMSBAQAogCS8qIENoYW5nZSB0dW5lciBmb3IgbmV3IG1vZHVsYXRpb24gdHlwZSBpZiByZXFkICovCiAJaWYgKHJlcV9tb2RlICE9IHN0YXRlLT5jdXJyZW50X21vZGUpIHsKIAkJc3dpdGNoIChyZXFfbW9kZSkgewotCQljYXNlIFZTQl84OgotCQljYXNlIFFBTV82NDoKLQkJY2FzZSBRQU1fMjU2OgotCQljYXNlIFFBTV9BVVRPOgorCQljYXNlIE1YTF9BVFNDOgorCQljYXNlIE1YTF9RQU06CiAJCQlyZXFfYncgID0gTVhMNTAwNVNfQkFORFdJRFRIXzZNSFo7CiAJCQlicmVhazsKKwkJY2FzZSBNWExfRFZCVDoKIAkJZGVmYXVsdDoKIAkJCS8qIEFzc3VtZSBEVkItVCAqLwogCQkJc3dpdGNoIChwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGgpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA3dC5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDd0LmMKaW5kZXggM2VjMjg5NC4uMmQwMjY5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDd0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDd0LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIG14bDUwMDd0LmMgLSBkcml2ZXIgZm9yIHRoZSBNYXhMaW5lYXIgTXhMNTAwN1Qgc2lsaWNvbiB0dW5lcgogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggTWljaGFlbCBLcnVma3kgPG1rcnVma3lAbGludXh0di5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IE1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QGxpbnV4dHYub3JnPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC02NiwyMiArNjYsMTcgQEAKICNkZWZpbmUgTUh6IDEwMDAwMDAKIAogZW51bSBteGw1MDA3dF9tb2RlIHsKLQlNeExfTU9ERV9PVEFfRFZCVF9BVFNDICAgICAgICA9ICAgIDAsCi0JTXhMX01PREVfT1RBX05UU0NfUEFMX0dIICAgICAgPSAgICAxLAotCU14TF9NT0RFX09UQV9QQUxfSUIgICAgICAgICAgID0gICAgMiwKLQlNeExfTU9ERV9PVEFfUEFMX0RfU0VDQU1fS0wgICA9ICAgIDMsCi0JTXhMX01PREVfT1RBX0lTREJUICAgICAgICAgICAgPSAgICA0LAotCU14TF9NT0RFX0NBQkxFX0RJR0lUQUwgICAgICAgID0gMHgxMCwKLQlNeExfTU9ERV9DQUJMRV9OVFNDX1BBTF9HSCAgICA9IDB4MTEsCi0JTXhMX01PREVfQ0FCTEVfUEFMX0lCICAgICAgICAgPSAweDEyLAotCU14TF9NT0RFX0NBQkxFX1BBTF9EX1NFQ0FNX0tMID0gMHgxMywKLQlNeExfTU9ERV9DQUJMRV9TQ1RFNDAgICAgICAgICA9IDB4MTQsCisJTXhMX01PREVfSVNEQlQgICAgID0gICAgMCwKKwlNeExfTU9ERV9EVkJUICAgICAgPSAgICAxLAorCU14TF9NT0RFX0FUU0MgICAgICA9ICAgIDIsCisJTXhMX01PREVfQ0FCTEUgICAgID0gMHgxMCwKIH07CiAKIGVudW0gbXhsNTAwN3RfY2hpcF92ZXJzaW9uIHsKIAlNeExfVU5LTk9XTl9JRCAgICAgPSAweDAwLAogCU14TF81MDA3X1YxX0YxICAgICA9IDB4MTEsCiAJTXhMXzUwMDdfVjFfRjIgICAgID0gMHgxMiwKKwlNeExfNTAwN19WNCAgICAgICAgPSAweDE0LAogCU14TF81MDA3X1YyXzEwMF9GMSA9IDB4MjEsCiAJTXhMXzUwMDdfVjJfMTAwX0YyID0gMHgyMiwKIAlNeExfNTAwN19WMl8yMDBfRjEgPSAweDIzLApAQCAtOTYsNjcgKzkxLDYxIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBzdHJ1Y3QgcmVnX3BhaXJfdCBpbml0X3RhYltdID0gewotCXsgMHgwYiwgMHg0NCB9LCAvKiBYVEFMICovCi0JeyAweDBjLCAweDYwIH0sIC8qIElGICovCi0JeyAweDEwLCAweDAwIH0sIC8qIE1JU0MgKi8KLQl7IDB4MTIsIDB4Y2EgfSwgLyogSURBQyAqLwotCXsgMHgxNiwgMHg5MCB9LCAvKiBNT0RFICovCi0JeyAweDMyLCAweDM4IH0sIC8qIE1PREUgQW5hbG9nL0RpZ2l0YWwgKi8KLQl7IDB4ZDgsIDB4MTggfSwgLyogQ0xLX09VVF9FTkFCTEUgKi8KLQl7IDB4MmMsIDB4MzQgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4NGQsIDB4NDAgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4N2YsIDB4MDIgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4OWEsIDB4NTIgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4NDgsIDB4NWEgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4NzYsIDB4MWEgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4NmEsIDB4NDggfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4NjQsIDB4MjggfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4NjYsIDB4ZTYgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4MzUsIDB4MGUgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4N2UsIDB4MDEgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4ODMsIDB4MDAgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4MDQsIDB4MGIgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4MDUsIDB4MDEgfSwgLyogVE9QX01BU1RFUl9FTkFCTEUgKi8KKwl7IDB4MDIsIDB4MDYgfSwKKwl7IDB4MDMsIDB4NDggfSwKKwl7IDB4MDUsIDB4MDQgfSwKKwl7IDB4MDYsIDB4MTAgfSwKKwl7IDB4MmUsIDB4MTUgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4MzAsIDB4MTAgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4NDUsIDB4NTggfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4NDgsIDB4MTkgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4NTIsIDB4MDMgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4NTMsIDB4NDQgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4NmEsIDB4NGIgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4NzYsIDB4MDAgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4NzgsIDB4MTggfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4N2EsIDB4MTcgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4ODUsIDB4MDYgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4MDEsIDB4MDEgfSwgLyogVE9QX01BU1RFUl9FTkFCTEUgKi8KIAl7IDAsIDAgfQogfTsKIAogc3RhdGljIHN0cnVjdCByZWdfcGFpcl90IGluaXRfdGFiX2NhYmxlW10gPSB7Ci0JeyAweDBiLCAweDQ0IH0sIC8qIFhUQUwgKi8KLQl7IDB4MGMsIDB4NjAgfSwgLyogSUYgKi8KLQl7IDB4MTAsIDB4MDAgfSwgLyogTUlTQyAqLwotCXsgMHgxMiwgMHhjYSB9LCAvKiBJREFDICovCi0JeyAweDE2LCAweDkwIH0sIC8qIE1PREUgKi8KLQl7IDB4MzIsIDB4MzggfSwgLyogTU9ERSBBL0QgKi8KLQl7IDB4NzEsIDB4M2YgfSwgLyogVE9QMSAqLwotCXsgMHg3MiwgMHgzZiB9LCAvKiBUT1AyICovCi0JeyAweDc0LCAweDNmIH0sIC8qIFRPUDMgKi8KLQl7IDB4ZDgsIDB4MTggfSwgLyogQ0xLX09VVF9FTkFCTEUgKi8KLQl7IDB4MmMsIDB4MzQgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4NGQsIDB4NDAgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4N2YsIDB4MDIgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4OWEsIDB4NTIgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4NDgsIDB4NWEgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4NzYsIDB4MWEgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4NmEsIDB4NDggfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4NjQsIDB4MjggfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4NjYsIDB4ZTYgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4MzUsIDB4MGUgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4N2UsIDB4MDEgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4MDQsIDB4MGIgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4NjgsIDB4YjQgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4MzYsIDB4MDAgfSwgLyogT1ZFUlJJREUgKi8KLQl7IDB4MDUsIDB4MDEgfSwgLyogVE9QX01BU1RFUl9FTkFCTEUgKi8KKwl7IDB4MDIsIDB4MDYgfSwKKwl7IDB4MDMsIDB4NDggfSwKKwl7IDB4MDUsIDB4MDQgfSwKKwl7IDB4MDYsIDB4MTAgfSwKKwl7IDB4MDksIDB4M2YgfSwKKwl7IDB4MGEsIDB4M2YgfSwKKwl7IDB4MGIsIDB4M2YgfSwKKwl7IDB4MmUsIDB4MTUgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4MzAsIDB4MTAgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4NDUsIDB4NTggfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4NDgsIDB4MTkgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4NTIsIDB4MDMgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4NTMsIDB4NDQgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4NmEsIDB4NGIgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4NzYsIDB4MDAgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4NzgsIDB4MTggfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4N2EsIDB4MTcgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4ODUsIDB4MDYgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4MDEsIDB4MDEgfSwgLyogVE9QX01BU1RFUl9FTkFCTEUgKi8KIAl7IDAsIDAgfQogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IHJlZ19wYWlyX3QgcmVnX3BhaXJfcmZ0dW5lW10gPSB7Ci0JeyAweDExLCAweDAwIH0sIC8qIGFib3J0IHR1bmUgKi8KLQl7IDB4MTMsIDB4MTUgfSwKLQl7IDB4MTQsIDB4NDAgfSwKLQl7IDB4MTUsIDB4MGUgfSwKLQl7IDB4MTEsIDB4MDIgfSwgLyogc3RhcnQgdHVuZSAqLworCXsgMHgwZiwgMHgwMCB9LCAvKiBhYm9ydCB0dW5lICovCisJeyAweDBjLCAweDE1IH0sCisJeyAweDBkLCAweDQwIH0sCisJeyAweDBlLCAweDBlIH0sCisJeyAweDFmLCAweDg3IH0sIC8qIE9WRVJSSURFICovCisJeyAweDIwLCAweDFmIH0sIC8qIE9WRVJSSURFICovCisJeyAweDIxLCAweDg3IH0sIC8qIE9WRVJSSURFICovCisJeyAweDIyLCAweDFmIH0sIC8qIE9WRVJSSURFICovCisJeyAweDgwLCAweDAxIH0sIC8qIGZyZXEgZGVwZW5kZW50ICovCisJeyAweDBmLCAweDAxIH0sIC8qIHN0YXJ0IHR1bmUgKi8KIAl7IDAsIDAgfQogfTsKIApAQCAtMjI3LDYzICsyMTYsMjAgQEAKIAkJCQkgICBzMzIgaWZfZGlmZl9vdXRfbGV2ZWwpCiB7CiAJc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBNeExfTU9ERV9PVEFfRFZCVF9BVFNDOgotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDMyLCAweDBmLCAweDA2KTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgzNSwgMHhmZiwgMHgwZSk7CisJY2FzZSBNeExfTU9ERV9BVFNDOgorCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA2LCAweDFmLCAweDEyKTsKIAkJYnJlYWs7Ci0JY2FzZSBNeExfTU9ERV9PVEFfSVNEQlQ6Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MzIsIDB4MGYsIDB4MDYpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDM1LCAweGZmLCAweDEyKTsKKwljYXNlIE14TF9NT0RFX0RWQlQ6CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDYsIDB4MWYsIDB4MTEpOwogCQlicmVhazsKLQljYXNlIE14TF9NT0RFX09UQV9OVFNDX1BBTF9HSDoKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgxNiwgMHg3MCwgMHgwMCk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MzIsIDB4ZmYsIDB4ODUpOworCWNhc2UgTXhMX01PREVfSVNEQlQ6CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDYsIDB4MWYsIDB4MTApOwogCQlicmVhazsKLQljYXNlIE14TF9NT0RFX09UQV9QQUxfSUI6Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MTYsIDB4NzAsIDB4MTApOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDMyLCAweGZmLCAweDg1KTsKLQkJYnJlYWs7Ci0JY2FzZSBNeExfTU9ERV9PVEFfUEFMX0RfU0VDQU1fS0w6Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MTYsIDB4NzAsIDB4MjApOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDMyLCAweGZmLCAweDg1KTsKLQkJYnJlYWs7Ci0JY2FzZSBNeExfTU9ERV9DQUJMRV9ESUdJVEFMOgotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDcxLCAweGZmLCAweDAxKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHg3MiwgMHhmZiwKKwljYXNlIE14TF9NT0RFX0NBQkxFOgorCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDA5LCAweGZmLCAweGMxKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHgwYSwgMHhmZiwKIAkJCSAgICAgOCAtIGlmX2RpZmZfb3V0X2xldmVsKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHg3NCwgMHhmZiwgMHgxNyk7Ci0JCWJyZWFrOwotCWNhc2UgTXhMX01PREVfQ0FCTEVfTlRTQ19QQUxfR0g6Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MTYsIDB4NzAsIDB4MDApOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDMyLCAweGZmLCAweDg1KTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHg3MSwgMHhmZiwgMHgwMSk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzIsIDB4ZmYsCi0JCQkgICAgIDggLSBpZl9kaWZmX291dF9sZXZlbCk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzQsIDB4ZmYsIDB4MTcpOwotCQlicmVhazsKLQljYXNlIE14TF9NT0RFX0NBQkxFX1BBTF9JQjoKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgxNiwgMHg3MCwgMHgxMCk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MzIsIDB4ZmYsIDB4ODUpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDcxLCAweGZmLCAweDAxKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHg3MiwgMHhmZiwKLQkJCSAgICAgOCAtIGlmX2RpZmZfb3V0X2xldmVsKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHg3NCwgMHhmZiwgMHgxNyk7Ci0JCWJyZWFrOwotCWNhc2UgTXhMX01PREVfQ0FCTEVfUEFMX0RfU0VDQU1fS0w6Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MTYsIDB4NzAsIDB4MjApOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDMyLCAweGZmLCAweDg1KTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHg3MSwgMHhmZiwgMHgwMSk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzIsIDB4ZmYsCi0JCQkgICAgIDggLSBpZl9kaWZmX291dF9sZXZlbCk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzQsIDB4ZmYsIDB4MTcpOwotCQlicmVhazsKLQljYXNlIE14TF9NT0RFX0NBQkxFX1NDVEU0MDoKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHgzNiwgMHhmZiwgMHgwOCk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NjgsIDB4ZmYsIDB4YmMpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDcxLCAweGZmLCAweDAxKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHg3MiwgMHhmZiwKLQkJCSAgICAgOCAtIGlmX2RpZmZfb3V0X2xldmVsKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHg3NCwgMHhmZiwgMHgxNyk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4MGIsIDB4ZmYsIDB4MTcpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlteGxfZmFpbCgtRUlOVkFMKTsKQEAgLTMwMiw0MyArMjQ4LDQzIEBACiAJCXZhbCA9IDB4MDA7CiAJCWJyZWFrOwogCWNhc2UgTXhMX0lGXzRfNV9NSFo6Ci0JCXZhbCA9IDB4MjA7CisJCXZhbCA9IDB4MDI7CiAJCWJyZWFrOwogCWNhc2UgTXhMX0lGXzRfNTdfTUhaOgotCQl2YWwgPSAweDMwOworCQl2YWwgPSAweDAzOwogCQlicmVhazsKIAljYXNlIE14TF9JRl81X01IWjoKLQkJdmFsID0gMHg0MDsKKwkJdmFsID0gMHgwNDsKIAkJYnJlYWs7CiAJY2FzZSBNeExfSUZfNV8zOF9NSFo6Ci0JCXZhbCA9IDB4NTA7CisJCXZhbCA9IDB4MDU7CiAJCWJyZWFrOwogCWNhc2UgTXhMX0lGXzZfTUhaOgotCQl2YWwgPSAweDYwOworCQl2YWwgPSAweDA2OwogCQlicmVhazsKIAljYXNlIE14TF9JRl82XzI4X01IWjoKLQkJdmFsID0gMHg3MDsKKwkJdmFsID0gMHgwNzsKIAkJYnJlYWs7CiAJY2FzZSBNeExfSUZfOV8xOTE1X01IWjoKLQkJdmFsID0gMHg4MDsKKwkJdmFsID0gMHgwODsKIAkJYnJlYWs7CiAJY2FzZSBNeExfSUZfMzVfMjVfTUhaOgotCQl2YWwgPSAweDkwOworCQl2YWwgPSAweDA5OwogCQlicmVhazsKIAljYXNlIE14TF9JRl8zNl8xNV9NSFo6Ci0JCXZhbCA9IDB4YTA7CisJCXZhbCA9IDB4MGE7CiAJCWJyZWFrOwogCWNhc2UgTXhMX0lGXzQ0X01IWjoKLQkJdmFsID0gMHhiMDsKKwkJdmFsID0gMHgwYjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbXhsX2ZhaWwoLUVJTlZBTCk7CiAJCXJldHVybjsKIAl9Ci0Jc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwYywgMHhmMCwgdmFsKTsKKwlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAyLCAweDBmLCB2YWwpOwogCiAJLyogc2V0IGludmVydGVkIElGIG9yIG5vcm1hbCBJRiAqLwotCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MGMsIDB4MDgsIGludmVydF9pZiA/IDB4MDggOiAweDAwKTsKKwlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAyLCAweDEwLCBpbnZlcnRfaWYgPyAweDEwIDogMHgwMCk7CiAKIAlyZXR1cm47CiB9CkBAIC0zNDYsNTYgKzI5Miw2OCBAQAogc3RhdGljIHZvaWQgbXhsNTAwN3Rfc2V0X3h0YWxfZnJlcV9iaXRzKHN0cnVjdCBteGw1MDA3dF9zdGF0ZSAqc3RhdGUsCiAJCQkJCWVudW0gbXhsNTAwN3RfeHRhbF9mcmVxIHh0YWxfZnJlcSkKIHsKLQl1OCB2YWw7Ci0KIAlzd2l0Y2ggKHh0YWxfZnJlcSkgewogCWNhc2UgTXhMX1hUQUxfMTZfTUhaOgotCQl2YWwgPSAweDAwOyAvKiBzZWxlY3QgeHRhbCBmcmVxICYgUmVmIEZyZXEgKi8KKwkJLyogc2VsZWN0IHh0YWwgZnJlcSAmIHJlZiBmcmVxICovCisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4ZjAsIDB4MDApOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA1LCAweDBmLCAweDAwKTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfWFRBTF8yMF9NSFo6Ci0JCXZhbCA9IDB4MTE7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4ZjAsIDB4MTApOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA1LCAweDBmLCAweDAxKTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfWFRBTF8yMF8yNV9NSFo6Ci0JCXZhbCA9IDB4MjI7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4ZjAsIDB4MjApOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA1LCAweDBmLCAweDAyKTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfWFRBTF8yMF80OF9NSFo6Ci0JCXZhbCA9IDB4MzM7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4ZjAsIDB4MzApOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA1LCAweDBmLCAweDAzKTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfWFRBTF8yNF9NSFo6Ci0JCXZhbCA9IDB4NDQ7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4ZjAsIDB4NDApOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA1LCAweDBmLCAweDA0KTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfWFRBTF8yNV9NSFo6Ci0JCXZhbCA9IDB4NTU7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4ZjAsIDB4NTApOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA1LCAweDBmLCAweDA1KTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfWFRBTF8yNV8xNF9NSFo6Ci0JCXZhbCA9IDB4NjY7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4ZjAsIDB4NjApOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA1LCAweDBmLCAweDA2KTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfWFRBTF8yN19NSFo6Ci0JCXZhbCA9IDB4Nzc7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4ZjAsIDB4NzApOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA1LCAweDBmLCAweDA3KTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfWFRBTF8yOF84X01IWjoKLQkJdmFsID0gMHg4ODsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMywgMHhmMCwgMHg4MCk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDUsIDB4MGYsIDB4MDgpOwogCQlicmVhazsKIAljYXNlIE14TF9YVEFMXzMyX01IWjoKLQkJdmFsID0gMHg5OTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMywgMHhmMCwgMHg5MCk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDUsIDB4MGYsIDB4MDkpOwogCQlicmVhazsKIAljYXNlIE14TF9YVEFMXzQwX01IWjoKLQkJdmFsID0gMHhhYTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMywgMHhmMCwgMHhhMCk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDUsIDB4MGYsIDB4MGEpOwogCQlicmVhazsKIAljYXNlIE14TF9YVEFMXzQ0X01IWjoKLQkJdmFsID0gMHhiYjsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMywgMHhmMCwgMHhiMCk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDUsIDB4MGYsIDB4MGIpOwogCQlicmVhazsKIAljYXNlIE14TF9YVEFMXzQ4X01IWjoKLQkJdmFsID0gMHhjYzsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMywgMHhmMCwgMHhjMCk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDUsIDB4MGYsIDB4MGMpOwogCQlicmVhazsKIAljYXNlIE14TF9YVEFMXzQ5XzM4MTFfTUhaOgotCQl2YWwgPSAweGRkOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweGQwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCW14bF9mYWlsKC1FSU5WQUwpOwogCQlyZXR1cm47CiAJfQotCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MGIsIDB4ZmYsIHZhbCk7CiAKIAlyZXR1cm47CiB9CkBAIC00MTIsMTYgKzM3MCwxMSBAQAogCW14bDUwMDd0X3NldF9pZl9mcmVxX2JpdHMoc3RhdGUsIGNmZy0+aWZfZnJlcV9oeiwgY2ZnLT5pbnZlcnRfaWYpOwogCW14bDUwMDd0X3NldF94dGFsX2ZyZXFfYml0cyhzdGF0ZSwgY2ZnLT54dGFsX2ZyZXFfaHopOwogCi0Jc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgxMCwgMHg0MCwgY2ZnLT5sb29wX3RocnVfZW5hYmxlIDw8IDYpOworCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDQsIDB4MDEsIGNmZy0+bG9vcF90aHJ1X2VuYWJsZSk7CisJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMywgMHgwOCwgY2ZnLT5jbGtfb3V0X2VuYWJsZSA8PCAzKTsKKwlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweDA3LCBjZmctPmNsa19vdXRfYW1wKTsKIAotCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4ZDgsIDB4MDgsIGNmZy0+Y2xrX291dF9lbmFibGUgPDwgMyk7Ci0KLQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDEwLCAweDA3LCBjZmctPmNsa19vdXRfYW1wKTsKLQotCS8qIHNldCBJREFDIHRvIGF1dG9tYXRpYyBtb2RlIGNvbnRyb2wgYnkgQUdDICovCi0Jc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgxMiwgMHg4MCwgMHgwMCk7Ci0KLQlpZiAobW9kZSA+PSBNeExfTU9ERV9DQUJMRV9ESUdJVEFMKSB7CisJaWYgKG1vZGUgPj0gTXhMX01PREVfQ0FCTEUpIHsKIAkJY29weV9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIHN0YXRlLT50YWJfaW5pdF9jYWJsZSk7CiAJCXJldHVybiBzdGF0ZS0+dGFiX2luaXRfY2FibGU7CiAJfSBlbHNlCkBAIC00NDcsNyArNDAwLDcgQEAKIAkJCSAgICAgKiBhbmQgRElHX01PREVJTkRFWF9DU0YgKi8KIAkJYnJlYWs7CiAJY2FzZSBNeExfQldfN01IejoKLQkJdmFsID0gMHgyMTsKKwkJdmFsID0gMHgyYTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfQldfOE1IejoKIAkJdmFsID0gMHgzZjsKQEAgLTQ1Niw3ICs0MDksNyBAQAogCQlteGxfZmFpbCgtRUlOVkFMKTsKIAkJcmV0dXJuOwogCX0KLQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9yZnR1bmUsIDB4MTMsIDB4M2YsIHZhbCk7CisJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfcmZ0dW5lLCAweDBjLCAweDNmLCB2YWwpOwogCiAJcmV0dXJuOwogfQpAQCAtNDkzLDggKzQ0NiwxMSBAQAogCWlmICh0ZW1wID4gNzgxMikKIAkJZGlnX3JmX2ZyZXErKzsKIAotCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX3JmdHVuZSwgMHgxNCwgMHhmZiwgKHU4KWRpZ19yZl9mcmVxKTsKLQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9yZnR1bmUsIDB4MTUsIDB4ZmYsICh1OCkoZGlnX3JmX2ZyZXEgPj4gOCkpOworCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX3JmdHVuZSwgMHgwZCwgMHhmZiwgKHU4KSBkaWdfcmZfZnJlcSk7CisJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfcmZ0dW5lLCAweDBlLCAweGZmLCAodTgpIChkaWdfcmZfZnJlcSA+PiA4KSk7CisKKwlpZiAocmZfZnJlcSA+PSAzMzMwMDAwMDApCisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX3JmdHVuZSwgMHg4MCwgMHg0MCwgMHg0MCk7CiAKIAlyZXR1cm4gc3RhdGUtPnRhYl9yZnR1bmU7CiB9CkBAIC01NTEsOSArNTA3LDEwIEBACiBzdGF0aWMgaW50IG14bDUwMDd0X3NvZnRfcmVzZXQoc3RydWN0IG14bDUwMDd0X3N0YXRlICpzdGF0ZSkKIHsKIAl1OCBkID0gMHhmZjsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gc3RhdGUtPmkyY19wcm9wcy5hZGRyLCAuZmxhZ3MgPSAwLAotCQkJICAgICAgIC5idWYgPSAmZCwgLmxlbiA9IDEgfTsKLQorCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgPSBzdGF0ZS0+aTJjX3Byb3BzLmFkZHIsIC5mbGFncyA9IDAsCisJCS5idWYgPSAmZCwgLmxlbiA9IDEKKwl9OwogCWludCByZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyY19wcm9wcy5hZGFwLCAmbXNnLCAxKTsKIAogCWlmIChyZXQgIT0gMSkgewpAQCAtNTgwLDkgKzUzNyw2IEBACiAJaWYgKG14bF9mYWlsKHJldCkpCiAJCWdvdG8gZmFpbDsKIAltZGVsYXkoMSk7Ci0KLQlyZXQgPSBteGw1MDA3dF93cml0ZV9yZWcoc3RhdGUsIDB4MmMsIDB4MzUpOwotCW14bF9mYWlsKHJldCk7CiBmYWlsOgogCXJldHVybiByZXQ7CiB9CkBAIC02MTUsNyArNTY5LDcgQEAKIAkqcmZfbG9ja2VkID0gMDsKIAkqcmVmX2xvY2tlZCA9IDA7CiAKLQlyZXQgPSBteGw1MDA3dF9yZWFkX3JlZyhzdGF0ZSwgMHhjZiwgJmQpOworCXJldCA9IG14bDUwMDd0X3JlYWRfcmVnKHN0YXRlLCAweGQ4LCAmZCk7CiAJaWYgKG14bF9mYWlsKHJldCkpCiAJCWdvdG8gZmFpbDsKIApAQCAtNjI4LDM3ICs1ODIsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG14bDUwMDd0X2NoZWNrX3JmX2lucHV0X3Bvd2VyKHN0cnVjdCBteGw1MDA3dF9zdGF0ZSAqc3RhdGUsCi0JCQkJCSBzMzIgKnJmX2lucHV0X2xldmVsKQotewotCXU4IGQxLCBkMjsKLQlpbnQgcmV0OwotCi0JcmV0ID0gbXhsNTAwN3RfcmVhZF9yZWcoc3RhdGUsIDB4YjcsICZkMSk7Ci0JaWYgKG14bF9mYWlsKHJldCkpCi0JCWdvdG8gZmFpbDsKLQotCXJldCA9IG14bDUwMDd0X3JlYWRfcmVnKHN0YXRlLCAweGJmLCAmZDIpOwotCWlmIChteGxfZmFpbChyZXQpKQotCQlnb3RvIGZhaWw7Ci0KLQlkMiA9IGQyID4+IDQ7Ci0JaWYgKGQyID4gNykKLQkJZDIgKz0gMHhmMDsKLQotCSpyZl9pbnB1dF9sZXZlbCA9IChzMzIpKGQxICsgZDIgLSAxMTMpOwotZmFpbDoKLQlyZXR1cm4gcmV0OwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgbXhsNTAwN3RfZ2V0X3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpzdGF0dXMpCiB7CiAJc3RydWN0IG14bDUwMDd0X3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OwotCWludCByZl9sb2NrZWQsIHJlZl9sb2NrZWQ7Ci0JczMyIHJmX2lucHV0X2xldmVsID0gMDsKLQlpbnQgcmV0OworCWludCByZl9sb2NrZWQsIHJlZl9sb2NrZWQsIHJldDsKKworCSpzdGF0dXMgPSAwOwogCiAJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKIAkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKQEAgLTY2OSwxMCArNjAwLDggQEAKIAlteGxfZGVidWcoIiVzJXMiLCByZl9sb2NrZWQgPyAicmYgbG9ja2VkICIgOiAiIiwKIAkJICByZWZfbG9ja2VkID8gInJlZiBsb2NrZWQiIDogIiIpOwogCi0JcmV0ID0gbXhsNTAwN3RfY2hlY2tfcmZfaW5wdXRfcG93ZXIoc3RhdGUsICZyZl9pbnB1dF9sZXZlbCk7Ci0JaWYgKG14bF9mYWlsKHJldCkpCi0JCWdvdG8gZmFpbDsKLQlteGxfZGVidWcoInJmIGlucHV0IHBvd2VyOiAlZCIsIHJmX2lucHV0X2xldmVsKTsKKwlpZiAoKHJmX2xvY2tlZCkgfHwgKHJlZl9sb2NrZWQpKQorCQkqc3RhdHVzIHw9IFRVTkVSX1NUQVRVU19MT0NLRUQ7CiBmYWlsOgogCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CkBAIC02OTUsMTEgKzYyNCwxMSBAQAogCQlzd2l0Y2ggKHBhcmFtcy0+dS52c2IubW9kdWxhdGlvbikgewogCQljYXNlIFZTQl84OgogCQljYXNlIFZTQl8xNjoKLQkJCW1vZGUgPSBNeExfTU9ERV9PVEFfRFZCVF9BVFNDOworCQkJbW9kZSA9IE14TF9NT0RFX0FUU0M7CiAJCQlicmVhazsKIAkJY2FzZSBRQU1fNjQ6CiAJCWNhc2UgUUFNXzI1NjoKLQkJCW1vZGUgPSBNeExfTU9ERV9DQUJMRV9ESUdJVEFMOworCQkJbW9kZSA9IE14TF9NT0RFX0NBQkxFOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlteGxfZXJyKCJtb2R1bGF0aW9uIG5vdCBzZXQhIik7CkBAIC03MjEsNyArNjUwLDcgQEAKIAkJCW14bF9lcnIoImJhbmR3aWR0aCBub3Qgc2V0ISIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJbW9kZSA9IE14TF9NT0RFX09UQV9EVkJUX0FUU0M7CisJCW1vZGUgPSBNeExfTU9ERV9EVkJUOwogCX0gZWxzZSB7CiAJCW14bF9lcnIoIm1vZHVsYXRpb24gdHlwZSBub3Qgc3VwcG9ydGVkISIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTc1Miw5NiArNjgxLDIwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBteGw1MDA3dF9zZXRfYW5hbG9nX3BhcmFtcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKLQkJCQkgICAgICBzdHJ1Y3QgYW5hbG9nX3BhcmFtZXRlcnMgKnBhcmFtcykKLXsKLQlzdHJ1Y3QgbXhsNTAwN3Rfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7Ci0JZW51bSBteGw1MDA3dF9id19taHogYncgPSAwOyAvKiBGSVhNRSAqLwotCWVudW0gbXhsNTAwN3RfbW9kZSBjYmxfbW9kZTsKLQllbnVtIG14bDUwMDd0X21vZGUgb3RhX21vZGU7Ci0JY2hhciAqbW9kZV9uYW1lOwotCWludCByZXQ7Ci0JdTMyIGZyZXEgPSBwYXJhbXMtPmZyZXF1ZW5jeSAqIDYyNTAwOwotCi0jZGVmaW5lIGNhYmxlIDEKLQlpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9NTikgewotCQljYmxfbW9kZSA9IE14TF9NT0RFX0NBQkxFX05UU0NfUEFMX0dIOwotCQlvdGFfbW9kZSA9IE14TF9NT0RFX09UQV9OVFNDX1BBTF9HSDsKLQkJbW9kZV9uYW1lID0gIk1OIjsKLQl9IGVsc2UgaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfQikgewotCQljYmxfbW9kZSA9IE14TF9NT0RFX0NBQkxFX1BBTF9JQjsKLQkJb3RhX21vZGUgPSBNeExfTU9ERV9PVEFfUEFMX0lCOwotCQltb2RlX25hbWUgPSAiQiI7Ci0JfSBlbHNlIGlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX0dIKSB7Ci0JCWNibF9tb2RlID0gTXhMX01PREVfQ0FCTEVfTlRTQ19QQUxfR0g7Ci0JCW90YV9tb2RlID0gTXhMX01PREVfT1RBX05UU0NfUEFMX0dIOwotCQltb2RlX25hbWUgPSAiR0giOwotCX0gZWxzZSBpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9QQUxfSSkgewotCQljYmxfbW9kZSA9IE14TF9NT0RFX0NBQkxFX1BBTF9JQjsKLQkJb3RhX21vZGUgPSBNeExfTU9ERV9PVEFfUEFMX0lCOwotCQltb2RlX25hbWUgPSAiSSI7Ci0JfSBlbHNlIGlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX0RLKSB7Ci0JCWNibF9tb2RlID0gTXhMX01PREVfQ0FCTEVfUEFMX0RfU0VDQU1fS0w7Ci0JCW90YV9tb2RlID0gTXhMX01PREVfT1RBX1BBTF9EX1NFQ0FNX0tMOwotCQltb2RlX25hbWUgPSAiREsiOwotCX0gZWxzZSBpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9TRUNBTV9MKSB7Ci0JCWNibF9tb2RlID0gTXhMX01PREVfQ0FCTEVfUEFMX0RfU0VDQU1fS0w7Ci0JCW90YV9tb2RlID0gTXhMX01PREVfT1RBX1BBTF9EX1NFQ0FNX0tMOwotCQltb2RlX25hbWUgPSAiTCI7Ci0JfSBlbHNlIGlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0xDKSB7Ci0JCWNibF9tb2RlID0gTXhMX01PREVfQ0FCTEVfUEFMX0RfU0VDQU1fS0w7Ci0JCW90YV9tb2RlID0gTXhMX01PREVfT1RBX1BBTF9EX1NFQ0FNX0tMOwotCQltb2RlX25hbWUgPSAiTCciOwotCX0gZWxzZSB7Ci0JCW1vZGVfbmFtZSA9ICJ4eCI7Ci0JCS8qIEZJWE1FICovCi0JCWNibF9tb2RlID0gTXhMX01PREVfQ0FCTEVfTlRTQ19QQUxfR0g7Ci0JCW90YV9tb2RlID0gTXhMX01PREVfT1RBX05UU0NfUEFMX0dIOwotCX0KLQlteGxfZGVidWcoInNldHRpbmcgbXhsNTAwNyB0byBzeXN0ZW0gJXMiLCBtb2RlX25hbWUpOwotCi0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQotCW11dGV4X2xvY2soJnN0YXRlLT5sb2NrKTsKLQotCXJldCA9IG14bDUwMDd0X3R1bmVyX2luaXQoc3RhdGUsIGNhYmxlID8gY2JsX21vZGUgOiBvdGFfbW9kZSk7Ci0JaWYgKG14bF9mYWlsKHJldCkpCi0JCWdvdG8gZmFpbDsKLQotCXJldCA9IG14bDUwMDd0X3R1bmVyX3JmX3R1bmUoc3RhdGUsIGZyZXEsIGJ3KTsKLQlpZiAobXhsX2ZhaWwocmV0KSkKLQkJZ290byBmYWlsOwotCi0Jc3RhdGUtPmZyZXF1ZW5jeSA9IGZyZXE7Ci0Jc3RhdGUtPmJhbmR3aWR0aCA9IDA7Ci1mYWlsOgotCW11dGV4X3VubG9jaygmc3RhdGUtPmxvY2spOwotCi0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBteGw1MDA3dF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCXN0cnVjdCBteGw1MDA3dF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKIAlpbnQgcmV0OwotCXU4IGQ7CiAKIAlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQogCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwogCi0JcmV0ID0gbXhsNTAwN3RfcmVhZF9yZWcoc3RhdGUsIDB4MDUsICZkKTsKLQlpZiAobXhsX2ZhaWwocmV0KSkKLQkJZ290byBmYWlsOwotCi0JcmV0ID0gbXhsNTAwN3Rfd3JpdGVfcmVnKHN0YXRlLCAweDA1LCBkIHwgMHgwMSk7CisJLyogd2FrZSBmcm9tIHN0YW5kYnkgKi8KKwlyZXQgPSBteGw1MDA3dF93cml0ZV9yZWcoc3RhdGUsIDB4MDEsIDB4MDEpOwogCW14bF9mYWlsKHJldCk7Ci1mYWlsOgorCiAJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKIAkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIApAQCAtODUyLDE4ICs3MDUsMTYgQEAKIHsKIAlzdHJ1Y3QgbXhsNTAwN3Rfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CiAJaW50IHJldDsKLQl1OCBkOwogCiAJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKIAkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKIAotCXJldCA9IG14bDUwMDd0X3JlYWRfcmVnKHN0YXRlLCAweDA1LCAmZCk7Ci0JaWYgKG14bF9mYWlsKHJldCkpCi0JCWdvdG8gZmFpbDsKLQotCXJldCA9IG14bDUwMDd0X3dyaXRlX3JlZyhzdGF0ZSwgMHgwNSwgZCAmIH4weDAxKTsKKwkvKiBlbnRlciBzdGFuZGJ5IG1vZGUgKi8KKwlyZXQgPSBteGw1MDA3dF93cml0ZV9yZWcoc3RhdGUsIDB4MDEsIDB4MDApOwogCW14bF9mYWlsKHJldCk7Ci1mYWlsOgorCXJldCA9IG14bDUwMDd0X3dyaXRlX3JlZyhzdGF0ZSwgMHgwZiwgMHgwMCk7CisJbXhsX2ZhaWwocmV0KTsKKwogCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CiAKQEAgLTkxMSw3ICs3NjIsNiBAQAogCS5pbml0ICAgICAgICAgICAgICA9IG14bDUwMDd0X2luaXQsCiAJLnNsZWVwICAgICAgICAgICAgID0gbXhsNTAwN3Rfc2xlZXAsCiAJLnNldF9wYXJhbXMgICAgICAgID0gbXhsNTAwN3Rfc2V0X3BhcmFtcywKLQkuc2V0X2FuYWxvZ19wYXJhbXMgPSBteGw1MDA3dF9zZXRfYW5hbG9nX3BhcmFtcywKIAkuZ2V0X3N0YXR1cyAgICAgICAgPSBteGw1MDA3dF9nZXRfc3RhdHVzLAogCS5nZXRfZnJlcXVlbmN5ICAgICA9IG14bDUwMDd0X2dldF9mcmVxdWVuY3ksCiAJLmdldF9iYW5kd2lkdGggICAgID0gbXhsNTAwN3RfZ2V0X2JhbmR3aWR0aCwKQEAgLTkyNCw3ICs3NzQsNyBAQAogCWludCByZXQ7CiAJdTggaWQ7CiAKLQlyZXQgPSBteGw1MDA3dF9yZWFkX3JlZyhzdGF0ZSwgMHhkMywgJmlkKTsKKwlyZXQgPSBteGw1MDA3dF9yZWFkX3JlZyhzdGF0ZSwgMHhkOSwgJmlkKTsKIAlpZiAobXhsX2ZhaWwocmV0KSkKIAkJZ290byBmYWlsOwogCkBAIC05NDcsOCArNzk3LDEyIEBACiAJY2FzZSBNeExfNTAwN19WMl8yMDBfRjI6CiAJCW5hbWUgPSAiTXhMNTAwNy52Mi4yMDAuZjIiOwogCQlicmVhazsKKwljYXNlIE14TF81MDA3X1Y0OgorCQluYW1lID0gIk14TDUwMDdULnY0IjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbmFtZSA9ICJNeEw1MDA3VCI7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB1bmtub3duIHJldiAoJTAyeClcbiIsIF9fZnVuY19fLCBpZCk7CiAJCWlkID0gTXhMX1VOS05PV05fSUQ7CiAJfQogCXN0YXRlLT5jaGlwX2lkID0gaWQ7CkBAIC05NzUsNyArODI5LDcgQEAKIAltdXRleF9sb2NrKCZteGw1MDA3dF9saXN0X211dGV4KTsKIAlpbnN0YW5jZSA9IGh5YnJpZF90dW5lcl9yZXF1ZXN0X3N0YXRlKHN0cnVjdCBteGw1MDA3dF9zdGF0ZSwgc3RhdGUsCiAJCQkJCSAgICAgIGh5YnJpZF90dW5lcl9pbnN0YW5jZV9saXN0LAotCQkJCQkgICAgICBpMmMsIGFkZHIsICJteGw1MDA3Iik7CisJCQkJCSAgICAgIGkyYywgYWRkciwgIm14bDUwMDd0Iik7CiAJc3dpdGNoIChpbnN0YW5jZSkgewogCWNhc2UgMDoKIAkJZ290byBmYWlsOwpAQCAtMTAxOCw3ICs4NzIsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXhMaW5lYXIgTXhMNTAwN1QgU2lsaWNvbiBJQyB0dW5lciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QGxpbnV4dHYub3JnPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1ZFUlNJT04oIjAuMSIpOworTU9EVUxFX1ZFUlNJT04oIjAuMiIpOwogCiAvKgogICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtY29tbW9uLmMKaW5kZXggNmZiNWI0NS4uZmM3NmMzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1jb21tb24uYwpAQCAtNDkwLDkgKzQ5MCw5IEBACiAJCXRkYV9kYmcoInNtID0gJWQsIHNtX2x0ID0gJWQsIHNtX3h0ID0gJWRcbiIsIHNtLCBzbV9sdCwgc21feHQpOwogCiAJcmVnc1tSX0VQM10gICY9IH4weGUwOyAvKiBjbGVhciBzbSwgc21fbHQsIHNtX3h0ICovCi0JcmVnc1tSX0VQM10gIHw9IHNtICAgID8gKDEgPDwgNykgOiAwIHwKLQkJCXNtX2x0ID8gKDEgPDwgNikgOiAwIHwKLQkJCXNtX3h0ID8gKDEgPDwgNSkgOiAwOworCXJlZ3NbUl9FUDNdICB8PSAoc20gICAgPyAoMSA8PCA3KSA6IDApIHwKKwkJCShzbV9sdCA/ICgxIDw8IDYpIDogMCkgfAorCQkJKHNtX3h0ID8gKDEgPDwgNSkgOiAwKTsKIAogCXJldHVybiB0ZGExODI3MV93cml0ZV9yZWdzKGZlLCBSX0VQMywgMSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtZmUuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jCmluZGV4IDFiNDhiNWQuLmIxMDkzNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jCkBAIC04MTgsNiArODE4LDM4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgdGRhMTgyNzFfYWdjKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCB0ZGExODI3MV9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKHByaXYtPmNvbmZpZykgeworCWNhc2UgMDoKKwkJLyogbm8gTE5BICovCisJCXRkYV9kYmcoIm5vIGFnYyBjb25maWd1cmF0aW9uIHByb3ZpZGVkXG4iKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQkvKiBzd2l0Y2ggd2l0aCBHUElPIG9mIHNhYTcxM3ggKi8KKwkJdGRhX2RiZygiaW52b2tpbmcgY2FsbGJhY2tcbiIpOworCQlpZiAoZmUtPmNhbGxiYWNrKQorCQkJcmV0ID0gZmUtPmNhbGxiYWNrKHByaXYtPmkyY19wcm9wcy5hZGFwLT5hbGdvX2RhdGEsCisJCQkJCSAgIERWQl9GUk9OVEVORF9DT01QT05FTlRfVFVORVIsCisJCQkJCSAgIFREQTE4MjcxX0NBTExCQUNLX0NNRF9BR0NfRU5BQkxFLAorCQkJCQkgICBwcml2LT5tb2RlKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCWNhc2UgMjoKKwlkZWZhdWx0OgorCQkvKiBuL2EgLSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCAqLworCQl0ZGFfZXJyKCJ1bnN1cHBvcnRlZCBjb25maWd1cmF0aW9uOiAlZFxuIiwgcHJpdi0+Y29uZmlnKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgdGRhMTgyNzFfdHVuZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCSBzdHJ1Y3QgdGRhMTgyNzFfc3RkX21hcF9pdGVtICptYXAsIHUzMiBmcmVxLCB1MzIgYncpCiB7CkBAIC04MjcsNiArODU5LDEwIEBACiAJdGRhX2RiZygiZnJlcSA9ICVkLCBpZmMgPSAlZCwgYncgPSAlZCwgYWdjX21vZGUgPSAlZCwgc3RkID0gJWRcbiIsCiAJCWZyZXEsIG1hcC0+aWZfZnJlcSwgYncsIG1hcC0+YWdjX21vZGUsIG1hcC0+c3RkKTsKIAorCXJldCA9IHRkYTE4MjcxX2FnYyhmZSk7CisJaWYgKHRkYV9mYWlsKHJldCkpCisJCXRkYV93YXJuKCJmYWlsZWQgdG8gY29uZmlndXJlIGFnY1xuIik7CisKIAlyZXQgPSB0ZGExODI3MV9pbml0KGZlKTsKIAlpZiAodGRhX2ZhaWwocmV0KSkKIAkJZ290byBmYWlsOwpAQCAtMTE1OSw2ICsxMTk1LDcgQEAKIAkJLyogbmV3IHR1bmVyIGluc3RhbmNlICovCiAJCXByaXYtPmdhdGUgPSAoY2ZnKSA/IGNmZy0+Z2F0ZSA6IFREQTE4MjcxX0dBVEVfQVVUTzsKIAkJcHJpdi0+cm9sZSA9IChjZmcpID8gY2ZnLT5yb2xlIDogVERBMTgyNzFfTUFTVEVSOworCQlwcml2LT5jb25maWcgPSAoY2ZnKSA/IGNmZy0+Y29uZmlnIDogMDsKIAkJcHJpdi0+Y2FsX2luaXRpYWxpemVkID0gZmFsc2U7CiAJCW11dGV4X2luaXQoJnByaXYtPmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLXByaXYuaAppbmRleCA4MWE3MzkzLi43NGJlYjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtcHJpdi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1wcml2LmgKQEAgLTkxLDExICs5MSw2IEBACiAJVERBMTgyNzFfQ0FMX1BMTCwKIH07CiAKLWVudW0gdGRhMTgyNzFfbW9kZSB7Ci0JVERBMTgyNzFfQU5BTE9HLAotCVREQTE4MjcxX0RJR0lUQUwsCi19OwotCiBzdHJ1Y3QgdGRhMTgyNzFfbWFwX2xheW91dDsKIAogZW51bSB0ZGExODI3MV92ZXIgewpAQCAtMTE0LDYgKzEwOSw3IEBACiAJZW51bSB0ZGExODI3MV9pMmNfZ2F0ZSBnYXRlOwogCWVudW0gdGRhMTgyNzFfdmVyIGlkOwogCisJdW5zaWduZWQgaW50IGNvbmZpZzsgLyogaW50ZXJmYWNlIHRvIHNhYTcxM3ggLyB0ZGE4Mjl4ICovCiAJdW5zaWduZWQgaW50IHRtX3JmY2FsOwogCXVuc2lnbmVkIGludCBjYWxfaW5pdGlhbGl6ZWQ6MTsKIAl1bnNpZ25lZCBpbnQgc21hbGxfaTJjOjE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEuaCBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS5oCmluZGV4IDdkYjk4MzEuLjUzYTk4OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS5oCkBAIC03OSw2ICs3OSwxNiBAQAogCiAJLyogc29tZSBpMmMgcHJvdmlkZXJzIGNhbnQgd3JpdGUgYWxsIDM5IHJlZ2lzdGVycyBhdCBvbmNlICovCiAJdW5zaWduZWQgaW50IHNtYWxsX2kyYzoxOworCisJLyogaW50ZXJmYWNlIHRvIHNhYTcxM3ggLyB0ZGE4Mjl4ICovCisJdW5zaWduZWQgaW50IGNvbmZpZzsKK307CisKKyNkZWZpbmUgVERBMTgyNzFfQ0FMTEJBQ0tfQ01EX0FHQ19FTkFCTEUgMAorCitlbnVtIHRkYTE4MjcxX21vZGUgeworCVREQTE4MjcxX0FOQUxPRyA9IDAsCisJVERBMTgyNzFfRElHSVRBTCwKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19NRURJQV9UVU5FUl9UREExODI3MSkgfHwgKGRlZmluZWQoQ09ORklHX01FRElBX1RVTkVSX1REQTE4MjcxX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyN3guYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4Mjd4LmMKaW5kZXggZjRkOTMxZi4uMzZhN2JjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyN3guYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI3eC5jCkBAIC0xMzIsMTEgKzEzMiwzMSBAQAogCXsgLmxvbWF4ID0gICAgICAgICAwLCAuc3BkID0gMCwgLmJzID0gMCwgLmJwID0gMCwgLmNwID0gMCwgLmdjMyA9IDAsIC5kaXYxcDUgPSAwfQogfTsKIAorc3RhdGljIGludCB0dW5lcl90cmFuc2ZlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCSAgc3RydWN0IGkyY19tc2cgKm1zZywKKwkJCSAgY29uc3QgaW50IHNpemUpCit7CisJaW50IHJjOworCXN0cnVjdCB0ZGE4Mjd4X3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisJcmMgPSBpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsIG1zZywgc2l6ZSk7CisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKworCWlmIChyYyA+PSAwICYmIHJjICE9IHNpemUpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgaW50IHRkYTgyN3hvX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkgICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCiB7CiAJc3RydWN0IHRkYTgyN3hfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OwogCXU4IGJ1ZlsxNF07CisJaW50IHJjOwogCiAJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHByaXYtPmkyY19hZGRyLCAuZmxhZ3MgPSAwLAogCQkJICAgICAgIC5idWYgPSBidWYsIC5sZW4gPSBzaXplb2YoYnVmKSB9OwpAQCAtMTgzLDI3ICsyMDMsMjkgQEAKIAlidWZbMTNdID0gMHg0MDsKIAogCW1zZy5sZW4gPSAxNDsKLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCWlmIChpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpIHsKLQkJcHJpbnRrKCIlczogY291bGQgbm90IHdyaXRlIHRvIHR1bmVyIGF0IGFkZHI6IDB4JTAyeFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBwcml2LT5pMmNfYWRkciA8PCAxKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQorCXJjID0gdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOworCiAJbXNsZWVwKDUwMCk7CiAJLyogY29ycmVjdCBDUCB2YWx1ZSAqLwogCWJ1ZlswXSA9IDB4MzA7CiAJYnVmWzFdID0gMHg1MCArIHRkYTgyN3hfdGFibGVbaV0uY3A7CiAJbXNnLmxlbiA9IDI7CiAKLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJcmMgPSB0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBlcnI7CiAKIAlwcml2LT5mcmVxdWVuY3kgPSBwYXJhbXMtPmZyZXF1ZW5jeTsKIAlwcml2LT5iYW5kd2lkdGggPSAoZmUtPm9wcy5pbmZvLnR5cGUgPT0gRkVfT0ZETSkgPyBwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGggOiAwOwogCiAJcmV0dXJuIDA7CisKK2VycjoKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3Qgd3JpdGUgdG8gdHVuZXIgYXQgYWRkcjogMHglMDJ4XG4iLAorCSAgICAgICBfX2Z1bmNfXywgcHJpdi0+aTJjX2FkZHIgPDwgMSk7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHRkYTgyN3hvX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQpAQCAtMjE0LDkgKzIzNiw3IEBACiAJCQkgICAgICAgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IHNpemVvZihidWYpIH07CiAKIAlkcHJpbnRrKCIlczpcbiIsIF9fZnVuY19fKTsKLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJaWYgKHByaXYtPmNmZyAmJiBwcml2LT5jZmctPnNsZWVwKQogCQlwcml2LT5jZmctPnNsZWVwKGZlKTsKQEAgLTI2Niw0NCArMjg2LDQ0IEBACiAKIAltc2cuYnVmID0gdHVuZXJfcmVnOwogCW1zZy5sZW4gPSA4OwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJbXNnLmJ1ZiA9IHJlZzI7CiAJbXNnLmxlbiA9IDI7CiAJcmVnMlswXSA9IDB4ODA7CiAJcmVnMlsxXSA9IDA7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAlyZWcyWzBdID0gMHg2MDsKIAlyZWcyWzFdID0gMHhiZjsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCXJlZzJbMF0gPSAweDMwOwogCXJlZzJbMV0gPSB0dW5lcl9yZWdbNF0gKyAweDgwOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJbXNsZWVwKDEpOwogCXJlZzJbMF0gPSAweDMwOwogCXJlZzJbMV0gPSB0dW5lcl9yZWdbNF0gKyA0OwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJbXNsZWVwKDEpOwogCXJlZzJbMF0gPSAweDMwOwogCXJlZzJbMV0gPSB0dW5lcl9yZWdbNF07Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAltc2xlZXAoNTUwKTsKIAlyZWcyWzBdID0gMHgzMDsKIAlyZWcyWzFdID0gKHR1bmVyX3JlZ1s0XSAmIDB4ZmMpICsgdGRhODI3eF90YWJsZVtpXS5jcDsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCXJlZzJbMF0gPSAweDYwOwogCXJlZzJbMV0gPSAweDNmOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJcmVnMlswXSA9IDB4ODA7CiAJcmVnMlsxXSA9IDB4MDg7ICAgLyogVnN5bmMgZW4gKi8KLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCXByaXYtPmZyZXF1ZW5jeSA9IHBhcmFtcy0+ZnJlcXVlbmN5OwogCkBAIC0zMTcsNyArMzM3LDcgQEAKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gcHJpdi0+aTJjX2FkZHIsIC5mbGFncyA9IDAsCiAJCQkgICAgICAgLmJ1ZiA9IGRhdGEsIC5sZW4gPSAyfTsKIAotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTMzMSw3ICszNTEsNyBAQAogCXU4ICBnYzM7CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHRkYTgyN3hhX2RhdGEgdGRhODI3eGFfZHZidFtdID0geworc3RhdGljIHN0cnVjdCB0ZGE4Mjd4YV9kYXRhIHRkYTgyN3hhX2R2YnRbXSA9IHsKIAl7IC5sb21heCA9ICA1Njg3NTAwMCwgLnN2Y28gPSAzLCAuc3BkID0gNCwgLnNjciA9IDAsIC5zYnMgPSAwLCAuZ2MzID0gMX0sCiAJeyAubG9tYXggPSAgNjcyNTAwMDAsIC5zdmNvID0gMCwgLnNwZCA9IDMsIC5zY3IgPSAwLCAuc2JzID0gMCwgLmdjMyA9IDF9LAogCXsgLmxvbWF4ID0gIDgxMjUwMDAwLCAuc3ZjbyA9IDEsIC5zcGQgPSAzLCAuc2NyID0gMCwgLnNicyA9IDAsIC5nYzMgPSAxfSwKQEAgLTM2MSw2ICszODEsMzYgQEAKIAl7IC5sb21heCA9ICAgICAgICAgMCwgLnN2Y28gPSAwLCAuc3BkID0gMCwgLnNjciA9IDAsIC5zYnMgPSAwLCAuZ2MzID0gMH0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdGRhODI3eGFfZGF0YSB0ZGE4Mjd4YV9kdmJjW10gPSB7CisJeyAubG9tYXggPSAgNTAxMjUwMDAsIC5zdmNvID0gMiwgLnNwZCA9IDQsIC5zY3IgPSAyLCAuc2JzID0gMCwgLmdjMyA9IDN9LAorCXsgLmxvbWF4ID0gIDU4NTAwMDAwLCAuc3ZjbyA9IDMsIC5zcGQgPSA0LCAuc2NyID0gMiwgLnNicyA9IDAsIC5nYzMgPSAzfSwKKwl7IC5sb21heCA9ICA2OTI1MDAwMCwgLnN2Y28gPSAwLCAuc3BkID0gMywgLnNjciA9IDIsIC5zYnMgPSAwLCAuZ2MzID0gM30sCisJeyAubG9tYXggPSAgODM2MjUwMDAsIC5zdmNvID0gMSwgLnNwZCA9IDMsIC5zY3IgPSAyLCAuc2JzID0gMCwgLmdjMyA9IDN9LAorCXsgLmxvbWF4ID0gIDk3NTAwMDAwLCAuc3ZjbyA9IDIsIC5zcGQgPSAzLCAuc2NyID0gMiwgLnNicyA9IDAsIC5nYzMgPSAzfSwKKwl7IC5sb21heCA9IDEwMDI1MDAwMCwgLnN2Y28gPSAyLCAuc3BkID0gMywgLnNjciA9IDIsIC5zYnMgPSAxLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAxMTcwMDAwMDAsIC5zdmNvID0gMywgLnNwZCA9IDMsIC5zY3IgPSAyLCAuc2JzID0gMSwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gMTM4NTAwMDAwLCAuc3ZjbyA9IDAsIC5zcGQgPSAyLCAuc2NyID0gMiwgLnNicyA9IDEsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDE2NzI1MDAwMCwgLnN2Y28gPSAxLCAuc3BkID0gMiwgLnNjciA9IDIsIC5zYnMgPSAxLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAxODcwMDAwMDAsIC5zdmNvID0gMiwgLnNwZCA9IDIsIC5zY3IgPSAyLCAuc2JzID0gMSwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gMjAwNTAwMDAwLCAuc3ZjbyA9IDIsIC5zcGQgPSAyLCAuc2NyID0gMiwgLnNicyA9IDIsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDIzNDAwMDAwMCwgLnN2Y28gPSAzLCAuc3BkID0gMiwgLnNjciA9IDIsIC5zYnMgPSAyLCAuZ2MzID0gM30sCisJeyAubG9tYXggPSAyNzcwMDAwMDAsIC5zdmNvID0gMCwgLnNwZCA9IDEsIC5zY3IgPSAyLCAuc2JzID0gMiwgLmdjMyA9IDN9LAorCXsgLmxvbWF4ID0gMzI1MDAwMDAwLCAuc3ZjbyA9IDEsIC5zcGQgPSAxLCAuc2NyID0gMiwgLnNicyA9IDIsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDMzNDUwMDAwMCwgLnN2Y28gPSAxLCAuc3BkID0gMSwgLnNjciA9IDIsIC5zYnMgPSAzLCAuZ2MzID0gM30sCisJeyAubG9tYXggPSA0MDEwMDAwMDAsIC5zdmNvID0gMiwgLnNwZCA9IDEsIC5zY3IgPSAyLCAuc2JzID0gMywgLmdjMyA9IDN9LAorCXsgLmxvbWF4ID0gNDY4MDAwMDAwLCAuc3ZjbyA9IDMsIC5zcGQgPSAxLCAuc2NyID0gMiwgLnNicyA9IDMsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDUzNTAwMDAwMCwgLnN2Y28gPSAwLCAuc3BkID0gMCwgLnNjciA9IDEsIC5zYnMgPSAzLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSA1NTQwMDAwMDAsIC5zdmNvID0gMCwgLnNwZCA9IDAsIC5zY3IgPSAyLCAuc2JzID0gMywgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gNjM4MDAwMDAwLCAuc3ZjbyA9IDEsIC5zcGQgPSAwLCAuc2NyID0gMSwgLnNicyA9IDQsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDY2OTAwMDAwMCwgLnN2Y28gPSAxLCAuc3BkID0gMCwgLnNjciA9IDIsIC5zYnMgPSA0LCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSA3MjAwMDAwMDAsIC5zdmNvID0gMiwgLnNwZCA9IDAsIC5zY3IgPSAxLCAuc2JzID0gNCwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gODAyMDAwMDAwLCAuc3ZjbyA9IDIsIC5zcGQgPSAwLCAuc2NyID0gMiwgLnNicyA9IDQsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDgzNTAwMDAwMCwgLnN2Y28gPSAzLCAuc3BkID0gMCwgLnNjciA9IDEsIC5zYnMgPSA0LCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSA4ODUwMDAwMDAsIC5zdmNvID0gMywgLnNwZCA9IDAsIC5zY3IgPSAxLCAuc2JzID0gNCwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gOTExMDAwMDAwLCAuc3ZjbyA9IDMsIC5zcGQgPSAwLCAuc2NyID0gMiwgLnNicyA9IDQsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9ICAgICAgICAgMCwgLnN2Y28gPSAwLCAuc3BkID0gMCwgLnNjciA9IDAsIC5zYnMgPSAwLCAuZ2MzID0gMH0KK307CisKIHN0YXRpYyBzdHJ1Y3QgdGRhODI3eGFfZGF0YSB0ZGE4Mjd4YV9hbmFsb2dbXSA9IHsKIAl7IC5sb21heCA9ICA1Njg3NTAwMCwgLnN2Y28gPSAzLCAuc3BkID0gNCwgLnNjciA9IDAsIC5zYnMgPSAwLCAuZ2MzID0gM30sCiAJeyAubG9tYXggPSAgNjcyNTAwMDAsIC5zdmNvID0gMCwgLnNwZCA9IDMsIC5zY3IgPSAwLCAuc2JzID0gMCwgLmdjMyA9IDN9LApAQCAtMzk4LDEzICs0NDgsOCBAQAogCQkJICAgICAgIC5idWYgPSBidWYsIC5sZW4gPSBzaXplb2YoYnVmKSB9OwogCiAJZHByaW50aygiJXM6XG4iLCBfX2Z1bmNfXyk7Ci0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKIAotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7Ci0KLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCWlmIChwcml2LT5jZmcgJiYgcHJpdi0+Y2ZnLT5zbGVlcCkKIAkJcHJpdi0+Y2ZnLT5zbGVlcChmZSk7CkBAIC00NTUsNyArNTAwLDcgQEAKIAkJYnVmWzFdID0gaGlnaCA/IDAgOiAxOwogCQlpZiAocHJpdi0+Y2ZnLT5jb25maWcgPT0gMikKIAkJCWJ1ZlsxXSA9IGhpZ2ggPyAxIDogMDsKLQkJaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwkJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCQlicmVhazsKIAljYXNlIDM6IC8qIHN3aXRjaCB3aXRoIEdQSU8gb2Ygc2FhNzEzeCAqLwogCQlpZiAoZmUtPmNhbGxiYWNrKQpAQCAtNDY5LDEyICs1MTQsMTMgQEAKIAkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgdGRhODI3eF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJc3RydWN0IHRkYTgyN3hhX2RhdGEgKmZyZXF1ZW5jeV9tYXAgPSB0ZGE4Mjd4YV9kdmJ0OwogCXU4IGJ1ZlsxMV07CiAKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gcHJpdi0+aTJjX2FkZHIsIC5mbGFncyA9IDAsCiAJCQkgICAgICAgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IHNpemVvZihidWYpIH07CiAKLQlpbnQgaSwgdHVuZXJfZnJlcSwgaWZfZnJlcTsKKwlpbnQgaSwgdHVuZXJfZnJlcSwgaWZfZnJlcSwgcmM7CiAJdTMyIE47CiAKIAlkcHJpbnRrKCIlczpcbiIsIF9fZnVuY19fKTsKQEAgLTQ5NSw1NiArNTQxLDU4IEBACiAJfQogCXR1bmVyX2ZyZXEgPSBwYXJhbXMtPmZyZXF1ZW5jeSArIGlmX2ZyZXE7CiAKKwlpZiAoZmUtPm9wcy5pbmZvLnR5cGUgPT0gRkVfUUFNKSB7CisJCWRwcmludGsoIiVzIHNlbGVjdCB0ZGE4Mjd4YV9kdmJjXG4iLCBfX2Z1bmNfXyk7CisJCWZyZXF1ZW5jeV9tYXAgPSB0ZGE4Mjd4YV9kdmJjOworCX0KKwogCWkgPSAwOwotCXdoaWxlICh0ZGE4Mjd4YV9kdmJ0W2ldLmxvbWF4IDwgdHVuZXJfZnJlcSkgewotCQlpZih0ZGE4Mjd4YV9kdmJ0W2kgKyAxXS5sb21heCA9PSAwKQorCXdoaWxlIChmcmVxdWVuY3lfbWFwW2ldLmxvbWF4IDwgdHVuZXJfZnJlcSkgeworCQlpZiAoZnJlcXVlbmN5X21hcFtpICsgMV0ubG9tYXggPT0gMCkKIAkJCWJyZWFrOwogCQlpKys7CiAJfQogCi0JTiA9ICgodHVuZXJfZnJlcSArIDMxMjUwKSAvIDYyNTAwKSA8PCB0ZGE4Mjd4YV9kdmJ0W2ldLnNwZDsKKwlOID0gKCh0dW5lcl9mcmVxICsgMzEyNTApIC8gNjI1MDApIDw8IGZyZXF1ZW5jeV9tYXBbaV0uc3BkOwogCWJ1ZlswXSA9IDA7ICAgICAgICAgICAgLy8gc3ViYWRkcmVzcwogCWJ1ZlsxXSA9IE4gPj4gODsKIAlidWZbMl0gPSBOICYgMHhmZjsKIAlidWZbM10gPSAwOwogCWJ1Zls0XSA9IDB4MTY7Ci0JYnVmWzVdID0gKHRkYTgyN3hhX2R2YnRbaV0uc3BkIDw8IDUpICsgKHRkYTgyN3hhX2R2YnRbaV0uc3ZjbyA8PCAzKSArCi0JCQl0ZGE4Mjd4YV9kdmJ0W2ldLnNiczsKLQlidWZbNl0gPSAweDRiICsgKHRkYTgyN3hhX2R2YnRbaV0uZ2MzIDw8IDQpOworCWJ1Zls1XSA9IChmcmVxdWVuY3lfbWFwW2ldLnNwZCA8PCA1KSArIChmcmVxdWVuY3lfbWFwW2ldLnN2Y28gPDwgMykgKworCQkJZnJlcXVlbmN5X21hcFtpXS5zYnM7CisJYnVmWzZdID0gMHg0YiArIChmcmVxdWVuY3lfbWFwW2ldLmdjMyA8PCA0KTsKIAlidWZbN10gPSAweDFjOwogCWJ1Zls4XSA9IDB4MDY7CiAJYnVmWzldID0gMHgyNDsKIAlidWZbMTBdID0gMHgwMDsKIAltc2cubGVuID0gMTE7Ci0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpZiAoaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxKSB7Ci0JCXByaW50aygiJXM6IGNvdWxkIG5vdCB3cml0ZSB0byB0dW5lciBhdCBhZGRyOiAweCUwMnhcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgcHJpdi0+aTJjX2FkZHIgPDwgMSk7Ci0JCXJldHVybiAtRUlPOwotCX0KKwlyYyA9IHR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycjsKKwogCWJ1ZlswXSA9IDB4OTA7CiAJYnVmWzFdID0gMHhmZjsKIAlidWZbMl0gPSAweDYwOwogCWJ1ZlszXSA9IDB4MDA7CiAJYnVmWzRdID0gMHg1OTsgIC8vIGxwc2VsLCBmb3IgNk1IeiArIDIKIAltc2cubGVuID0gNTsKLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJcmMgPSB0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBlcnI7CiAKIAlidWZbMF0gPSAweGEwOwogCWJ1ZlsxXSA9IDB4NDA7CiAJbXNnLmxlbiA9IDI7Ci0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXJjID0gdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOwogCiAJbXNsZWVwKDExKTsKIAltc2cuZmxhZ3MgPSBJMkNfTV9SRDsKLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJcmMgPSB0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBlcnI7CiAJbXNnLmZsYWdzID0gMDsKIAogCWJ1ZlsxXSA+Pj0gNDsKQEAgLTU1Myw0OSArNjAxLDU1IEBACiAJCXRkYTgyN3hhX2xuYV9nYWluKGZlLCAwLCBOVUxMKTsKIAkJYnVmWzBdID0gMHg2MDsKIAkJYnVmWzFdID0gMHgwYzsKLQkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJCXJjID0gdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOworCQlpZiAocmMgPCAwKQorCQkJZ290byBlcnI7CiAJfQogCiAJYnVmWzBdID0gMHhjMDsKIAlidWZbMV0gPSAweDk5OyAgICAvLyBscHNlbCwgZm9yIDZNSHogKyAyCi0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXJjID0gdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOwogCiAJYnVmWzBdID0gMHg2MDsKIAlidWZbMV0gPSAweDNjOwotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwlyYyA9IHR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycjsKIAogCS8qIGNvcnJlY3QgQ1AgdmFsdWUgKi8KIAlidWZbMF0gPSAweDMwOwotCWJ1ZlsxXSA9IDB4MTAgKyB0ZGE4Mjd4YV9kdmJ0W2ldLnNjcjsKLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJYnVmWzFdID0gMHgxMCArIGZyZXF1ZW5jeV9tYXBbaV0uc2NyOworCXJjID0gdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOwogCiAJbXNsZWVwKDE2Myk7CiAJYnVmWzBdID0gMHhjMDsKIAlidWZbMV0gPSAweDM5OyAgLy8gbHBzZWwsIGZvciA2TUh6ICsgMgotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwlyYyA9IHR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycjsKIAogCW1zbGVlcCgzKTsKIAkvKiBmcmVlemUgQUdDMSAqLwogCWJ1ZlswXSA9IDB4NTA7Ci0JYnVmWzFdID0gMHg0ZiArICh0ZGE4Mjd4YV9kdmJ0W2ldLmdjMyA8PCA0KTsKLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJYnVmWzFdID0gMHg0ZiArIChmcmVxdWVuY3lfbWFwW2ldLmdjMyA8PCA0KTsKKwlyYyA9IHR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycjsKIAogCXByaXYtPmZyZXF1ZW5jeSA9IHBhcmFtcy0+ZnJlcXVlbmN5OwogCXByaXYtPmJhbmR3aWR0aCA9IChmZS0+b3BzLmluZm8udHlwZSA9PSBGRV9PRkRNKSA/IHBhcmFtcy0+dS5vZmRtLmJhbmR3aWR0aCA6IDA7CiAKKwogCXJldHVybiAwOworCitlcnI6CisJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IHdyaXRlIHRvIHR1bmVyIGF0IGFkZHI6IDB4JTAyeFxuIiwKKwkgICAgICAgX19mdW5jX18sIHByaXYtPmkyY19hZGRyIDw8IDEpOworCXJldHVybiByYzsKIH0KIAogCkBAIC02NDMsNyArNjk3LDcgQEAKIAl0dW5lcl9yZWdbOV0gPSAweDIwOwogCXR1bmVyX3JlZ1sxMF0gPSAweDAwOwogCW1zZy5sZW4gPSAxMTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCXR1bmVyX3JlZ1swXSA9IDB4OTA7CiAJdHVuZXJfcmVnWzFdID0gMHhmZjsKQEAgLTY1MSwxOSArNzA1LDE5IEBACiAJdHVuZXJfcmVnWzNdID0gMDsKIAl0dW5lcl9yZWdbNF0gPSAweDk5ICsgKHByaXYtPmxwc2VsIDw8IDEpOwogCW1zZy5sZW4gPSA1OwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJdHVuZXJfcmVnWzBdID0gMHhhMDsKIAl0dW5lcl9yZWdbMV0gPSAweGMwOwogCW1zZy5sZW4gPSAyOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJdHVuZXJfcmVnWzBdID0gMHgzMDsKIAl0dW5lcl9yZWdbMV0gPSAweDEwICsgdGRhODI3eGFfYW5hbG9nW2ldLnNjcjsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCW1zZy5mbGFncyA9IEkyQ19NX1JEOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCW1zZy5mbGFncyA9IDA7CiAJdHVuZXJfcmVnWzFdID4+PSA0OwogCWRwcmludGsoIkFHQzIgZ2FpbiBpczogJWRcbiIsIHR1bmVyX3JlZ1sxXSk7CkBAIC02NzMsMjQgKzcyNywyNCBAQAogCW1zbGVlcCgxMDApOwogCXR1bmVyX3JlZ1swXSA9IDB4NjA7CiAJdHVuZXJfcmVnWzFdID0gMHgzYzsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCW1zbGVlcCgxNjMpOwogCXR1bmVyX3JlZ1swXSA9IDB4NTA7CiAJdHVuZXJfcmVnWzFdID0gMHg4ZiArICh0ZGE4Mjd4YV9hbmFsb2dbaV0uZ2MzIDw8IDQpOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJdHVuZXJfcmVnWzBdID0gMHg4MDsKIAl0dW5lcl9yZWdbMV0gPSAweDI4OwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJdHVuZXJfcmVnWzBdID0gMHhiMDsKIAl0dW5lcl9yZWdbMV0gPSAweDAxOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJdHVuZXJfcmVnWzBdID0gMHhjMDsKIAl0dW5lcl9yZWdbMV0gPSAweDE5ICsgKHByaXYtPmxwc2VsIDw8IDEpOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJcHJpdi0+ZnJlcXVlbmN5ID0gcGFyYW1zLT5mcmVxdWVuY3k7CiAKQEAgLTcwMyw3ICs3NTcsNyBAQAogCXVuc2lnbmVkIGNoYXIgZGF0YVtdID0gezB4ODAsIDB4MmN9OwogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkciA9IHByaXYtPmkyY19hZGRyLCAuZmxhZ3MgPSAwLAogCQkJICAgICAgLmJ1ZiA9IGRhdGEsIC5sZW4gPSAyfTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC03OTIsMTYgKzg0NiwxOSBAQAogfTsKIAogc3RhdGljIGludCB0ZGE4Mjd4X3Byb2JlX3ZlcnNpb24oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCi17CXU4IGRhdGE7Cit7CisJdTggZGF0YTsKKwlpbnQgcmM7CiAJc3RydWN0IHRkYTgyN3hfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OwogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBwcml2LT5pMmNfYWRkciwgLmZsYWdzID0gSTJDX01fUkQsCiAJCQkgICAgICAgLmJ1ZiA9ICZkYXRhLCAubGVuID0gMSB9OwotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaWYgKGkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSkgeworCisJcmMgPSB0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CisKKwlpZiAocmMgPCAwKSB7CiAJCXByaW50aygiJXM6IGNvdWxkIG5vdCByZWFkIGZyb20gdHVuZXIgYXQgYWRkcjogMHglMDJ4XG4iLAogCQkgICAgICAgX19mdW5jX18sIG1zZy5hZGRyIDw8IDEpOwotCQlyZXR1cm4gLUVJTzsKKwkJcmV0dXJuIHJjOwogCX0KIAlpZiAoKGRhdGEgJiAweDNjKSA9PSAwKSB7CiAJCWRwcmludGsoInRkYTgyN3ggdHVuZXIgZm91bmRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyOTAuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4MjkwLmMKaW5kZXggNGI4NjYyZS4uMDY0ZDE0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyOTAuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI5MC5jCkBAIC0yMiw3ICsyMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSAidHVuZXItaTJjLmgiCiAjaW5jbHVkZSAidGRhODI5MC5oIgogI2luY2x1ZGUgInRkYTgyN3guaCIKQEAgLTU2Niw4ICs1NjYsMTEgQEAKIAl1OCBkYXRhOwogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSAmZGF0YSwgLmxlbiA9IDEgfTsKIAotCWlmIChOVUxMID09IGFuYWxvZ19vcHMtPmkyY19nYXRlX2N0cmwpCisJaWYgKCFhbmFsb2dfb3BzLT5pMmNfZ2F0ZV9jdHJsKSB7CisJCXByaW50ayhLRVJOX0VSUiAidGRhODI5MDogbm8gZ2F0ZSBjb250cm9sIHdlcmUgcHJvdmlkZWQhXG4iKTsKKwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlhbmFsb2dfb3BzLT5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKIApAQCAtNjE1LDExICs2MTgsMTMgQEAKIAogCWlmIChyZXQgIT0gMSkgewogCQl0dW5lcl93YXJuKCJ0dW5lciBhY2Nlc3MgZmFpbGVkIVxuIik7CisJCWFuYWxvZ19vcHMtPmkyY19nYXRlX2N0cmwoZmUsIDApOwogCQlyZXR1cm4gLUVSRU1PVEVJTzsKIAl9CiAKIAlpZiAoKGRhdGEgPT0gMHg4MykgfHwgKGRhdGEgPT0gMHg4NCkpIHsKIAkJcHJpdi0+dmVyIHw9IFREQTE4MjcxOworCQl0ZGE4Mjl4X3RkYTE4MjcxX2NvbmZpZy5jb25maWcgPSBwcml2LT5jZmcuY29uZmlnOwogCQlkdmJfYXR0YWNoKHRkYTE4MjcxX2F0dGFjaCwgZmUsIHByaXYtPnRkYTgyN3hfYWRkciwKIAkJCSAgIHByaXYtPmkyY19wcm9wcy5hZGFwLCAmdGRhODI5eF90ZGExODI3MV9jb25maWcpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGVhNTc2MS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RlYTU3NjEuYwppbmRleCBiMjNkYWRlLi42MGVkODcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGVhNTc2MS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZWE1NzYxLmMKQEAgLTksNyArOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KICNpbmNsdWRlICJ0dW5lci1pMmMuaCIKICNpbmNsdWRlICJ0ZWE1NzYxLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGVhNTc2Ny5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RlYTU3NjcuYwppbmRleCAxZjU2NDYzLi4yMjNhMjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGVhNTc2Ny5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZWE1NzY3LmMKQEAgLTEyLDcgKzEyLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlICJ0dW5lci1pMmMuaCIKICNpbmNsdWRlICJ0ZWE1NzY3LmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuYwppbmRleCA0OTNjZTkzLi5iNTQ1OTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5jCkBAIC03MzksNyArNzM5LDEwIEBACiAJZHByaW50aygxLCAiJXMoKSBmcmVxdWVuY3k9JWQgKGluIHVuaXRzIG9mIDYyLjVraHopXG4iLAogCQlfX2Z1bmNfXywgcGFyYW1zLT5mcmVxdWVuY3kpOwogCi0JcHJpdi0+cmZfbW9kZSA9IFhDX1JGX01PREVfQ0FCTEU7IC8qIEZpeCBtZTogaXQgY291bGQgYmUgYWlyLiAqLworCS8qIEZpeCBtZTogaXQgY291bGQgYmUgYWlyLiAqLworCXByaXYtPnJmX21vZGUgPSBwYXJhbXMtPm1vZGU7CisJaWYgKHBhcmFtcy0+bW9kZSA+IFhDX1JGX01PREVfQ0FCTEUpCisJCXByaXYtPnJmX21vZGUgPSBYQ19SRl9NT0RFX0NBQkxFOwogCiAJLyogcGFyYW1zLT5mcmVxdWVuY3kgaXMgaW4gdW5pdHMgb2YgNjIuNWtoeiAqLwogCXByaXYtPmZyZXFfaHogPSBwYXJhbXMtPmZyZXF1ZW5jeSAqIDYyNTAwOwpAQCAtOTcwLDggKzk3Myw2IEBACiAJY2FzZSAxOgogCQkvKiBuZXcgdHVuZXIgaW5zdGFuY2UgKi8KIAkJcHJpdi0+YmFuZHdpZHRoID0gQkFORFdJRFRIXzZfTUhaOwotCQlwcml2LT5pZl9raHogPSBjZmctPmlmX2toejsKLQogCQlmZS0+dHVuZXJfcHJpdiA9IHByaXY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC05ODAsNiArOTgxLDEzIEBACiAJCWJyZWFrOwogCX0KIAorCWlmIChwcml2LT5pZl9raHogPT0gMCkgeworCQkvKiBJZiB0aGUgSUYgaGFzbid0IGJlZW4gc2V0IHlldCwgdXNlIHRoZSB2YWx1ZSBwcm92aWRlZCBieQorCQkgICB0aGUgY2FsbGVyIChvY2N1cnMgaW4gaHlicmlkIGRldmljZXMgd2hlcmUgdGhlIGFuYWxvZworCQkgICBjYWxsIHRvIHhjNTAwMF9hdHRhY2ggb2NjdXJzIGJlZm9yZSB0aGUgZGlnaXRhbCBzaWRlKSAqLworCQlwcml2LT5pZl9raHogPSBjZmctPmlmX2toejsKKwl9CisKIAkvKiBDaGVjayBpZiBmaXJtd2FyZSBoYXMgYmVlbiBsb2FkZWQuIEl0IGlzIHBvc3NpYmxlIHRoYXQgYW5vdGhlcgogCSAgIGluc3RhbmNlIG9mIHRoZSBkcml2ZXIgaGFzIGxvYWRlZCB0aGUgZmlybXdhcmUuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL0tjb25maWcKaW5kZXggYThjNjI0OS4uOWU1NzgxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvS2NvbmZpZwpAQCAtMTMsNyArMTMsNyBAQAogCXNlbGVjdCBEVkJfVFVORVJfSVREMTAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfSVNMNjQyMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfQ1gyNDEyMyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfVFVORVJfQ1gyNDExMyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHRoZSBkaWdpdGFsIFRWIHJlY2VpdmVyIGNoaXAgbWFkZSBieSBCMkMyIEluYy4gaW5jbHVkZWQgaW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL01ha2VmaWxlCmluZGV4IGQ5ZGIwNjYuLmI5N2NmNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9NYWtlZmlsZQpAQCAtMiw3ICsyLDYgQEAKIAlmbGV4Y29wLXNyYW0ubyBmbGV4Y29wLWVlcHJvbS5vIGZsZXhjb3AtbWlzYy5vIGZsZXhjb3AtaHctZmlsdGVyLm8KIG9iai0kKENPTkZJR19EVkJfQjJDMl9GTEVYQ09QKSArPSBiMmMyLWZsZXhjb3AubwogCi0KIGlmbmVxICgkKENPTkZJR19EVkJfQjJDMl9GTEVYQ09QX1BDSSksKQogYjJjMi1mbGV4Y29wLW9ianMgKz0gZmxleGNvcC1kbWEubwogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1jb21tb24uaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1jb21tb24uaAppbmRleCA4Y2UwNjMzLi4zZTFjNDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtY29tbW9uLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWNvbW1vbi5oCkBAIC0yOCwxMSArMjgsMTQgQEAKIAogLyogU3RlYWwgZnJvbSB1c2IuaCAqLwogI3VuZGVmIGVycgotI2RlZmluZSBlcnIoZm9ybWF0LCAgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgICAgIEZDX0xPR19QUkVGSVggIjogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKKyNkZWZpbmUgZXJyKGZvcm1hdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fRVJSIEZDX0xPR19QUkVGSVggIjogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKICN1bmRlZiBpbmZvCi0jZGVmaW5lIGluZm8oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gICAgRkNfTE9HX1BSRUZJWCAiOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQorI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fSU5GTyBGQ19MT0dfUFJFRklYICI6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCiAjdW5kZWYgd2FybgotI2RlZmluZSB3YXJuKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HIEZDX0xPR19QUkVGSVggIjogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKKyNkZWZpbmUgd2Fybihmb3JtYXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX1dBUk5JTkcgRkNfTE9HX1BSRUZJWCAiOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQogCiBzdHJ1Y3QgZmxleGNvcF9kbWEgewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwpAQCAtOTEsMTYgKzk0LDE0IEBACiAJaW50IGZ1bGx0c19zdHJlYW1pbmdfc3RhdGU7CiAKIAkvKiBidXMgc3BlY2lmaWMgY2FsbGJhY2tzICovCi0JZmxleGNvcF9pYmlfdmFsdWUgKCpyZWFkX2liaV9yZWcpICAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICosIGZsZXhjb3BfaWJpX3JlZ2lzdGVyKTsKLQlpbnQgICAgICAgICAgICAgICAoKndyaXRlX2liaV9yZWcpIChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKiwgZmxleGNvcF9pYmlfcmVnaXN0ZXIsIGZsZXhjb3BfaWJpX3ZhbHVlKTsKLQotCi0JaW50ICgqaTJjX3JlcXVlc3QpIChzdHJ1Y3QgZmxleGNvcF9pMmNfYWRhcHRlciosCisJZmxleGNvcF9pYmlfdmFsdWUoKnJlYWRfaWJpX3JlZykgKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqLAorCQkJZmxleGNvcF9pYmlfcmVnaXN0ZXIpOworCWludCAoKndyaXRlX2liaV9yZWcpIChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKiwKKwkJCWZsZXhjb3BfaWJpX3JlZ2lzdGVyLCBmbGV4Y29wX2liaV92YWx1ZSk7CisJaW50ICgqaTJjX3JlcXVlc3QpIChzdHJ1Y3QgZmxleGNvcF9pMmNfYWRhcHRlciAqLAogCQlmbGV4Y29wX2FjY2Vzc19vcF90LCB1OCBjaGlwYWRkciwgdTggYWRkciwgdTggKmJ1ZiwgdTE2IGxlbik7Ci0JaW50ICgqc3RyZWFtX2NvbnRyb2wpIChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UqLCBpbnQpOwotCisJaW50ICgqc3RyZWFtX2NvbnRyb2wpIChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKiwgaW50KTsKIAlpbnQgKCpnZXRfbWFjX2FkZHIpIChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBpbnQgZXh0ZW5kZWQpOwotCiAJdm9pZCAqYnVzX3NwZWNpZmljOwogfTsKIApAQCAtMTExLDIyICsxMTIsMjggQEAKIHZvaWQgZmxleGNvcF9wYXNzX2RteF9wYWNrZXRzKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHU4ICpidWYsIHUzMiBubyk7CiAKIHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmxleGNvcF9kZXZpY2Vfa21hbGxvYyhzaXplX3QgYnVzX3NwZWNpZmljX2xlbik7Ci12b2lkIGZsZXhjb3BfZGV2aWNlX2tmcmVlKHN0cnVjdCBmbGV4Y29wX2RldmljZSopOwordm9pZCBmbGV4Y29wX2RldmljZV9rZnJlZShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKik7CiAKLWludCAgZmxleGNvcF9kZXZpY2VfaW5pdGlhbGl6ZShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UqKTsKK2ludCBmbGV4Y29wX2RldmljZV9pbml0aWFsaXplKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqKTsKIHZvaWQgZmxleGNvcF9kZXZpY2VfZXhpdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjKTsKLQogdm9pZCBmbGV4Y29wX3Jlc2V0X2Jsb2NrXzMwMChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjKTsKIAogLyogZnJvbSBmbGV4Y29wLWRtYS5jICovCi1pbnQgZmxleGNvcF9kbWFfYWxsb2NhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBmbGV4Y29wX2RtYSAqZG1hLCB1MzIgc2l6ZSk7CitpbnQgZmxleGNvcF9kbWFfYWxsb2NhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCXN0cnVjdCBmbGV4Y29wX2RtYSAqZG1hLCB1MzIgc2l6ZSk7CiB2b2lkIGZsZXhjb3BfZG1hX2ZyZWUoc3RydWN0IGZsZXhjb3BfZG1hICpkbWEpOwogCi1pbnQgZmxleGNvcF9kbWFfY29udHJvbF90aW1lcl9pcnEoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9kbWFfaW5kZXhfdCBubywgaW50IG9ub2ZmKTsKLWludCBmbGV4Y29wX2RtYV9jb250cm9sX3NpemVfaXJxKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfZG1hX2luZGV4X3Qgbm8sIGludCBvbm9mZik7Ci1pbnQgZmxleGNvcF9kbWFfY29uZmlnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHN0cnVjdCBmbGV4Y29wX2RtYSAqZG1hLCBmbGV4Y29wX2RtYV9pbmRleF90IGRtYV9pZHgpOwotaW50IGZsZXhjb3BfZG1hX3hmZXJfY29udHJvbChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2RtYV9pbmRleF90IGRtYV9pZHgsIGZsZXhjb3BfZG1hX2FkZHJfaW5kZXhfdCBpbmRleCwgaW50IG9ub2ZmKTsKLWludCBmbGV4Y29wX2RtYV9jb25maWdfdGltZXIoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9kbWFfaW5kZXhfdCBkbWFfaWR4LCB1OCBjeWNsZXMpOworaW50IGZsZXhjb3BfZG1hX2NvbnRyb2xfdGltZXJfaXJxKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWZsZXhjb3BfZG1hX2luZGV4X3Qgbm8sIGludCBvbm9mZik7CitpbnQgZmxleGNvcF9kbWFfY29udHJvbF9zaXplX2lycShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX2RtYV9pbmRleF90IG5vLCBpbnQgb25vZmYpOworaW50IGZsZXhjb3BfZG1hX2NvbmZpZyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBzdHJ1Y3QgZmxleGNvcF9kbWEgKmRtYSwKKwkJZmxleGNvcF9kbWFfaW5kZXhfdCBkbWFfaWR4KTsKK2ludCBmbGV4Y29wX2RtYV94ZmVyX2NvbnRyb2woc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9kbWFfaW5kZXhfdCBkbWFfaWR4LCBmbGV4Y29wX2RtYV9hZGRyX2luZGV4X3QgaW5kZXgsCisJCWludCBvbm9mZik7CitpbnQgZmxleGNvcF9kbWFfY29uZmlnX3RpbWVyKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWZsZXhjb3BfZG1hX2luZGV4X3QgZG1hX2lkeCwgdTggY3ljbGVzKTsKIAogLyogZnJvbSBmbGV4Y29wLWVlcHJvbS5jICovCiAvKiB0aGUgUENJIHBhcnQgdXNlcyB0aGlzIGNhbGwgdG8gZ2V0IHRoZSBNQUMgYWRkcmVzcywgdGhlIFVTQiBwYXJ0IGhhcyBpdHMgb3duICovCkBAIC0xNDEsMTMgKzE0OCwxNSBAQAogCXU4IGNoaXBhZGRyLCB1OCBhZGRyLCB1OCAqYnVmLCB1MTYgbGVuKTsKIAogLyogZnJvbSBmbGV4Y29wLXNyYW0uYyAqLwotaW50IGZsZXhjb3Bfc3JhbV9zZXRfZGVzdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX3NyYW1fZGVzdF90IGRlc3QsIGZsZXhjb3Bfc3JhbV9kZXN0X3RhcmdldF90IHRhcmdldCk7CitpbnQgZmxleGNvcF9zcmFtX3NldF9kZXN0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3Bfc3JhbV9kZXN0X3QgZGVzdCwKKwlmbGV4Y29wX3NyYW1fZGVzdF90YXJnZXRfdCB0YXJnZXQpOwogdm9pZCBmbGV4Y29wX3dhbl9zZXRfc3BlZWQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF93YW5fc3BlZWRfdCBzKTsKLXZvaWQgZmxleGNvcF9zcmFtX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IHVzYl93YW4sIGludCBzcmFtZG1hLCBpbnQgbWF4aW11bWZpbGwpOwordm9pZCBmbGV4Y29wX3NyYW1fY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlpbnQgdXNiX3dhbiwgaW50IHNyYW1kbWEsIGludCBtYXhpbXVtZmlsbCk7CiAKIC8qIGdsb2JhbCBwcm90b3R5cGVzIGZvciB0aGUgZmxleGNvcC1jaGlwICovCiAvKiBmcm9tIGZsZXhjb3AtZmUtdHVuZXIuYyAqLwotaW50IGZsZXhjb3BfZnJvbnRlbmRfaW5pdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmNhcmQpOworaW50IGZsZXhjb3BfZnJvbnRlbmRfaW5pdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjKTsKIHZvaWQgZmxleGNvcF9mcm9udGVuZF9leGl0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpOwogCiAvKiBmcm9tIGZsZXhjb3AtaTJjLmMgKi8KQEAgLTE1OSwxMSArMTY4LDE0IEBACiAKIC8qIGZyb20gZmxleGNvcC1taXNjLmMgKi8KIHZvaWQgZmxleGNvcF9kZXRlcm1pbmVfcmV2aXNpb24oc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyk7Ci12b2lkIGZsZXhjb3BfZGV2aWNlX25hbWUoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyxjb25zdCBjaGFyICpwcmVmaXgsY29uc3QgY2hhciAqc3VmZml4KTsKLXZvaWQgZmxleGNvcF9kdW1wX3JlZyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2liaV9yZWdpc3RlciByZWcsIGludCBudW0pOwordm9pZCBmbGV4Y29wX2RldmljZV9uYW1lKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqc3VmZml4KTsKK3ZvaWQgZmxleGNvcF9kdW1wX3JlZyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX2liaV9yZWdpc3RlciByZWcsIGludCBudW0pOwogCiAvKiBmcm9tIGZsZXhjb3AtaHctZmlsdGVyLmMgKi8KLWludCBmbGV4Y29wX3BpZF9mZWVkX2NvbnRyb2woc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkLCBpbnQgb25vZmYpOworaW50IGZsZXhjb3BfcGlkX2ZlZWRfY29udHJvbChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQsIGludCBvbm9mZik7CiB2b2lkIGZsZXhjb3BfaHdfZmlsdGVyX2luaXQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyk7CiAKIHZvaWQgZmxleGNvcF9zbWNfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBpbnQgb25vZmYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWRtYS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWRtYS5jCmluZGV4IDI2ZjAwMTEuLjI4ODFlMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1kbWEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZG1hLmMKQEAgLTEsMTMgKzEsMTIgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaW51eCBkcml2ZXIgdGhlIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQotICoKLSAqIGZsZXhjb3AtZG1hLmMgLSBtZXRob2RzIGZvciBjb25maWd1cmluZyBhbmQgY29udHJvbGxpbmcgdGhlIERNQSBvZiB0aGUgRmxleENvcC4KLSAqCi0gKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisgKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQorICogZmxleGNvcC1kbWEuYyAtIGNvbmZpZ3VyaW5nIGFuZCBjb250cm9sbGluZyB0aGUgRE1BIG9mIHRoZSBGbGV4Q29wCisgKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24KICAqLwogI2luY2x1ZGUgImZsZXhjb3AuaCIKIAotaW50IGZsZXhjb3BfZG1hX2FsbG9jYXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgZmxleGNvcF9kbWEgKmRtYSwgdTMyIHNpemUpCitpbnQgZmxleGNvcF9kbWFfYWxsb2NhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCXN0cnVjdCBmbGV4Y29wX2RtYSAqZG1hLCB1MzIgc2l6ZSkKIHsKIAl1OCAqdGNwdTsKIAlkbWFfYWRkcl90IHRkbWEgPSAwOwpAQCAtMzIsNyArMzEsOCBAQAogCiB2b2lkIGZsZXhjb3BfZG1hX2ZyZWUoc3RydWN0IGZsZXhjb3BfZG1hICpkbWEpCiB7Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChkbWEtPnBkZXYsIGRtYS0+c2l6ZSoyLGRtYS0+Y3B1X2FkZHIwLCBkbWEtPmRtYV9hZGRyMCk7CisJcGNpX2ZyZWVfY29uc2lzdGVudChkbWEtPnBkZXYsIGRtYS0+c2l6ZSoyLAorCQkJZG1hLT5jcHVfYWRkcjAsIGRtYS0+ZG1hX2FkZHIwKTsKIAltZW1zZXQoZG1hLDAsc2l6ZW9mKHN0cnVjdCBmbGV4Y29wX2RtYSkpOwogfQogRVhQT1JUX1NZTUJPTChmbGV4Y29wX2RtYV9mcmVlKTsKQEAgLTQ0LDggKzQ0LDggQEAKIAlmbGV4Y29wX2liaV92YWx1ZSB2MHgwLHYweDQsdjB4YzsKIAl2MHgwLnJhdyA9IHYweDQucmF3ID0gdjB4Yy5yYXcgPSAwOwogCi0JdjB4MC5kbWFfMHgwLmRtYV9hZGRyZXNzMCAgICAgICAgPSBkbWEtPmRtYV9hZGRyMCA+PiAyOwotCXYweGMuZG1hXzB4Yy5kbWFfYWRkcmVzczEgICAgICAgID0gZG1hLT5kbWFfYWRkcjEgPj4gMjsKKwl2MHgwLmRtYV8weDAuZG1hX2FkZHJlc3MwID0gZG1hLT5kbWFfYWRkcjAgPj4gMjsKKwl2MHhjLmRtYV8weGMuZG1hX2FkZHJlc3MxID0gZG1hLT5kbWFfYWRkcjEgPj4gMjsKIAl2MHg0LmRtYV8weDRfd3JpdGUuZG1hX2FkZHJfc2l6ZSA9IGRtYS0+c2l6ZSAvIDQ7CiAKIAlpZiAoKGRtYV9pZHggJiBGQ19ETUFfMSkgPT0gZG1hX2lkeCkgewpAQCAtNTcsNyArNTcsOCBAQAogCQlmYy0+d3JpdGVfaWJpX3JlZyhmYyxkbWEyXzAxNCx2MHg0KTsKIAkJZmMtPndyaXRlX2liaV9yZWcoZmMsZG1hMl8wMWMsdjB4Yyk7CiAJfSBlbHNlIHsKLQkJZXJyKCJlaXRoZXIgRE1BMSBvciBETUEyIGNhbiBiZSBjb25maWd1cmVkIGF0IHRoZSB3aXRoaW4gb25lIGZsZXhjb3BfZG1hX2NvbmZpZyBjYWxsLiIpOworCQllcnIoImVpdGhlciBETUExIG9yIERNQTIgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aGluIG9uZSAiCisJCQkiZmxleGNvcF9kbWFfY29uZmlnIGNhbGwuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODEsNyArODIsOCBAQAogCQlyMHgwID0gZG1hMl8wMTA7CiAJCXIweGMgPSBkbWEyXzAxYzsKIAl9IGVsc2UgewotCQllcnIoImVpdGhlciB0cmFuc2ZlciBETUExIG9yIERNQTIgY2FuIGJlIHN0YXJ0ZWQgd2l0aGluIG9uZSBmbGV4Y29wX2RtYV94ZmVyX2NvbnRyb2wgY2FsbC4iKTsKKwkJZXJyKCJlaXRoZXIgdHJhbnNmZXIgRE1BMSBvciBETUEyIGNhbiBiZSBzdGFydGVkIHdpdGhpbiBvbmUgIgorCQkJImZsZXhjb3BfZG1hX3hmZXJfY29udHJvbCBjYWxsLiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE1NCw4ICsxNTYsNyBAQAogCiAvKiAxIGN5Y2xlcyA9IDEuOTcgbXNlYyAqLwogaW50IGZsZXhjb3BfZG1hX2NvbmZpZ190aW1lcihzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAotCQlmbGV4Y29wX2RtYV9pbmRleF90IGRtYV9pZHgsCi0JCXU4IGN5Y2xlcykKKwkJZmxleGNvcF9kbWFfaW5kZXhfdCBkbWFfaWR4LCB1OCBjeWNsZXMpCiB7CiAJZmxleGNvcF9pYmlfcmVnaXN0ZXIgciA9IChkbWFfaWR4ICYgRkNfRE1BXzEpID8gZG1hMV8wMDQgOiBkbWEyXzAxNDsKIAlmbGV4Y29wX2liaV92YWx1ZSB2ID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1lZXByb20uYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1lZXByb20uYwppbmRleCA4YThhZThhLi5hMjUzNzNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZWVwcm9tLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWVlcHJvbS5jCkBAIC0xLDkgKzEsNyBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpbnV4IGRyaXZlciB0aGUgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCi0gKgotICogZmxleGNvcC1lZXByb20uYyAtIGVlcHJvbSBhY2Nlc3MgbWV0aG9kcyAoY3VycmVudGx5IG9ubHkgTUFDIGFkZHJlc3MgcmVhZGluZyBpcyB1c2VkKQotICoKLSAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4KKyAqIExpbnV4IGRyaXZlciBmb3IgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCisgKiBmbGV4Y29wLWVlcHJvbS5jIC0gZWVwcm9tIGFjY2VzcyBtZXRob2RzIChjdXJyZW50bHkgb25seSBNQUMgYWRkcmVzcyByZWFkaW5nKQorICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCiAgKi8KICNpbmNsdWRlICJmbGV4Y29wLmgiCiAKQEAgLTE0LDE3ICsxMiwxNyBAQAogCXJldHVybiBmbGV4X2kyY193cml0ZShhZGFwdGVyLCAweDIwMDAwMDAwLCAweDUwLCBhZGRyLCBidWYsIGxlbik7CiB9CiAKLXN0YXRpYyBpbnQgZWVwcm9tX2xyY193cml0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIHUzMiBsZW4sIHU4ICp3YnVmLCB1OCAqcmJ1ZiwgaW50IHJldHJpZXMpCitzdGF0aWMgaW50IGVlcHJvbV9scmNfd3JpdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLAorCQl1MzIgbGVuLCB1OCAqd2J1ZiwgdTggKnJidWYsIGludCByZXRyaWVzKQogewotCWludCBpOworaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgcmV0cmllczsgaSsrKSB7Ci0JCWlmIChlZXByb21fd3JpdGUoYWRhcHRlciwgYWRkciwgd2J1ZiwgbGVuKSA9PSBsZW4pIHsKLQkJCWlmIChlZXByb21fbHJjX3JlYWQoYWRhcHRlciwgYWRkciwgbGVuLCByYnVmLCByZXRyaWVzKSA9PSAxKQotCQkJCXJldHVybiAxOworZm9yIChpID0gMDsgaSA8IHJldHJpZXM7IGkrKykgeworCWlmIChlZXByb21fd3JpdGUoYWRhcHRlciwgYWRkciwgd2J1ZiwgbGVuKSA9PSBsZW4pIHsKKwkJaWYgKGVlcHJvbV9scmNfcmVhZChhZGFwdGVyLCBhZGRyLCBsZW4sIHJidWYsIHJldHJpZXMpID09IDEpCisJCQlyZXR1cm4gMTsKIAkJfQogCX0KLQogCXJldHVybiAwOwogfQogCkBAIC0zOSwxMiArMzcsMTAgQEAKIAkJcmV0dXJuIDA7CiAKIAltZW1jcHkod2J1Ziwga2V5LCBsZW4pOwotCiAJd2J1ZlsxNl0gPSAwOwogCXdidWZbMTddID0gMDsKIAl3YnVmWzE4XSA9IDA7CiAJd2J1ZlsxOV0gPSBjYWxjX2xyYyh3YnVmLCAxOSk7Ci0KIAlyZXR1cm4gZWVwcm9tX2xyY193cml0ZShhZGFwdGVyLCAweDNlNCwgMjAsIHdidWYsIHJidWYsIDQpOwogfQogCkBAIC01OSw3ICs1NSw2IEBACiAJCXJldHVybiAwOwogCiAJbWVtY3B5KGtleSwgYnVmLCBsZW4pOwotCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTc0LDkgKzY5LDcgQEAKIAkJdG1wWzNdID0gbWFjWzVdOwogCQl0bXBbNF0gPSBtYWNbNl07CiAJCXRtcFs1XSA9IG1hY1s3XTsKLQogCX0gZWxzZSB7Ci0KIAkJdG1wWzBdID0gbWFjWzBdOwogCQl0bXBbMV0gPSBtYWNbMV07CiAJCXRtcFsyXSA9IG1hY1syXTsKQEAgLTkwLDExICs4MywxMSBAQAogCiAJaWYgKGVlcHJvbV93cml0ZShhZGFwdGVyLCAweDNmOCwgdG1wLCA4KSA9PSA4KQogCQlyZXR1cm4gMTsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZsZXhjb3BfZWVwcm9tX3JlYWQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgdTE2IGFkZHIsIHU4ICpidWYsIHUxNiBsZW4pCitzdGF0aWMgaW50IGZsZXhjb3BfZWVwcm9tX3JlYWQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJdTE2IGFkZHIsIHU4ICpidWYsIHUxNiBsZW4pCiB7CiAJcmV0dXJuIGZjLT5pMmNfcmVxdWVzdChmYyxGQ19SRUFELEZDX0kyQ19QT1JUX0VFUFJPTSwweDUwLGFkZHIsYnVmLGxlbik7CiB9CkBAIC0xMTAsNyArMTAzLDggQEAKIAlyZXR1cm4gc3VtOwogfQogCi1zdGF0aWMgaW50IGZsZXhjb3BfZWVwcm9tX3JlcXVlc3Qoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9hY2Nlc3Nfb3BfdCBvcCwgdTE2IGFkZHIsIHU4ICpidWYsIHUxNiBsZW4sIGludCByZXRyaWVzKQorc3RhdGljIGludCBmbGV4Y29wX2VlcHJvbV9yZXF1ZXN0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJZmxleGNvcF9hY2Nlc3Nfb3BfdCBvcCwgdTE2IGFkZHIsIHU4ICpidWYsIHUxNiBsZW4sIGludCByZXRyaWVzKQogewogCWludCBpLHJldCA9IDA7CiAJdTggY2hpcGFkZHIgPSAgMHg1MCB8ICgoYWRkciA+PiA4KSAmIDMpOwpAQCAtMTIzLDcgKzExNyw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBmbGV4Y29wX2VlcHJvbV9scmNfcmVhZChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCB1MTYgYWRkciwgdTggKmJ1ZiwgdTE2IGxlbiwgaW50IHJldHJpZXMpCitzdGF0aWMgaW50IGZsZXhjb3BfZWVwcm9tX2xyY19yZWFkKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHUxNiBhZGRyLAorCQl1OCAqYnVmLCB1MTYgbGVuLCBpbnQgcmV0cmllcykKIHsKIAlpbnQgcmV0ID0gZmxleGNvcF9lZXByb21fcmVxdWVzdChmYywgRkNfUkVBRCwgYWRkciwgYnVmLCBsZW4sIHJldHJpZXMpOwogCWlmIChyZXQgPT0gMCkKQEAgLTEzMyw4ICsxMjgsNyBAQAogfQogCiAvKiBKSidzIGNvbW1lbnQgYWJvdXQgZXh0ZW5kZWQgPT0gMTogaXQgaXMgbm90IHByZXNlbnRseSB1c2VkIGFueXdoZXJlIGJ1dCB3YXMKLSAqIGFkZGVkIHRvIHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb25zIGZvciBwb3NzaWJsZSBzdXBwb3J0IG9mIEVVSTY0Ci0gKi8KKyAqIGFkZGVkIHRvIHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb25zIGZvciBwb3NzaWJsZSBzdXBwb3J0IG9mIEVVSTY0ICovCiBpbnQgZmxleGNvcF9lZXByb21fY2hlY2tfbWFjX2FkZHIoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IGV4dGVuZGVkKQogewogCXU4IGJ1Zls4XTsKQEAgLTE0MiwxMiArMTM2LDkgQEAKIAogCWlmICgocmV0ID0gZmxleGNvcF9lZXByb21fbHJjX3JlYWQoZmMsMHgzZjgsYnVmLDgsNCkpID09IDApIHsKIAkJaWYgKGV4dGVuZGVkICE9IDApIHsKLQkJCWVycigiVE9ETzogZXh0ZW5kZWQgKEVVSTY0KSBNQUMgYWRkcmVzc2VzIGFyZW4ndCBjb21wbGV0ZWx5IHN1cHBvcnRlZCB5ZXQiKTsKKwkJCWVycigiVE9ETzogZXh0ZW5kZWQgKEVVSTY0KSBNQUMgYWRkcmVzc2VzIGFyZW4ndCAiCisJCQkJImNvbXBsZXRlbHkgc3VwcG9ydGVkIHlldCIpOwogCQkJcmV0ID0gLUVJTlZBTDsKLS8qCQkJbWVtY3B5KGZjLT5kdmJfYWRhcHRlci5wcm9wb3NlZF9tYWMsYnVmLDMpOwotCQkJbWFjWzNdID0gMHhmZTsKLQkJCW1hY1s0XSA9IDB4ZmY7Ci0JCQltZW1jcHkoJmZjLT5kdmJfYWRhcHRlci5wcm9wb3NlZF9tYWNbM10sJmJ1Zls1XSwzKTsgKi8KIAkJfSBlbHNlCiAJCQltZW1jcHkoZmMtPmR2Yl9hZGFwdGVyLnByb3Bvc2VkX21hYyxidWYsNik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWZlLXR1bmVyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZmUtdHVuZXIuYwppbmRleCA1Y2RlZDM3Li5mN2FmYWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZmUtdHVuZXIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZmUtdHVuZXIuYwpAQCAtNTkyLDE0ICs1OTIsMTQgQEAKIAkJZmMtPmZlX3NsZWVwID0gb3BzLT5zbGVlcDsKIAkJb3BzLT5zbGVlcCA9IGZsZXhjb3Bfc2xlZXA7CiAKLQkJZmMtPmRldl90eXBlID0gRkNfU0tZOworCQlmYy0+ZGV2X3R5cGUgPSBGQ19TS1lfUkVWMjY7CiAJCWdvdG8gZmVfZm91bmQ7CiAJfQogCiAJLyogdHJ5IHRoZSBhaXIgZHZiLXQgKG10MzUyL1NhbXN1bmcgdGR0YzkyNTFkaDAoPz8pKSAqLwogCWZjLT5mZSA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmc2Ftc3VuZ190ZHRjOTI1MWRoMF9jb25maWcsIGkyYyk7CiAJaWYgKGZjLT5mZSAhPSBOVUxMKSB7Ci0JCWZjLT5kZXZfdHlwZSA9IEZDX0FJUl9EVkI7CisJCWZjLT5kZXZfdHlwZSA9IEZDX0FJUl9EVkJUOwogCQlmYy0+ZmUtPm9wcy50dW5lcl9vcHMuY2FsY19yZWdzID0gc2Ftc3VuZ190ZHRjOTI1MWRoMF9jYWxjX3JlZ3M7CiAJCWdvdG8gZmVfZm91bmQ7CiAJfQpAQCAtNjUzLDcgKzY1Myw3IEBACiAJCWZjLT5mZV9zbGVlcCAgICAgICAgICAgICAgICA9IG9wcy0+c2xlZXA7CiAJCW9wcy0+c2xlZXAgICAgICAgICAgICAgICAgICA9IGZsZXhjb3Bfc2xlZXA7CiAKLQkJZmMtPmRldl90eXBlICAgICAgICAgICAgICAgID0gRkNfU0tZX09MRDsKKwkJZmMtPmRldl90eXBlICAgICAgICAgICAgICAgID0gRkNfU0tZX1JFVjIzOwogCQlnb3RvIGZlX2ZvdW5kOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWh3LWZpbHRlci5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWh3LWZpbHRlci5jCmluZGV4IDQ1MTk3NGIuLjc3ZTQ1NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1ody1maWx0ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtaHctZmlsdGVyLmMKQEAgLTEsMzMgKzEsMzAgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaW51eCBkcml2ZXIgdGhlIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQotICoKLSAqIGZsZXhjb3AtaHctZmlsdGVyLmMgLSBwaWQgYW5kIG1hYyBhZGRyZXNzIGZpbHRlcmluZyBhbmQgY29ycmVzcG9uZGluZyBjb250cm9sIGZ1bmN0aW9ucy4KLSAqCi0gKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisgKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQorICogZmxleGNvcC1ody1maWx0ZXIuYyAtIHBpZCBhbmQgbWFjIGFkZHJlc3MgZmlsdGVyaW5nIGFuZCBjb250cm9sIGZ1bmN0aW9ucworICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCiAgKi8KICNpbmNsdWRlICJmbGV4Y29wLmgiCiAKIHN0YXRpYyB2b2lkIGZsZXhjb3BfcmN2X2RhdGFfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBpbnQgb25vZmYpCiB7Ci0JZmxleGNvcF9zZXRfaWJpX3ZhbHVlKGN0cmxfMjA4LFJjdl9EYXRhX3NpZyxvbm9mZik7Ci0KLQlkZWJfdHMoInJjdl9kYXRhIGlzIG5vdzogJyVzJ1xuIixvbm9mZiA/ICJvbiIgOiAib2ZmIik7CisJZmxleGNvcF9zZXRfaWJpX3ZhbHVlKGN0cmxfMjA4LCBSY3ZfRGF0YV9zaWcsIG9ub2ZmKTsKKwlkZWJfdHMoInJjdl9kYXRhIGlzIG5vdzogJyVzJ1xuIiwgb25vZmYgPyAib24iIDogIm9mZiIpOwogfQogCiB2b2lkIGZsZXhjb3Bfc21jX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IG9ub2ZmKQogewotCWZsZXhjb3Bfc2V0X2liaV92YWx1ZShjdHJsXzIwOCxTTUNfRW5hYmxlX3NpZyxvbm9mZik7CisJZmxleGNvcF9zZXRfaWJpX3ZhbHVlKGN0cmxfMjA4LCBTTUNfRW5hYmxlX3NpZywgb25vZmYpOwogfQogCiBzdGF0aWMgdm9pZCBmbGV4Y29wX251bGxfZmlsdGVyX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IG9ub2ZmKQogewotCWZsZXhjb3Bfc2V0X2liaV92YWx1ZShjdHJsXzIwOCxOdWxsX2ZpbHRlcl9zaWcsb25vZmYpOworCWZsZXhjb3Bfc2V0X2liaV92YWx1ZShjdHJsXzIwOCwgTnVsbF9maWx0ZXJfc2lnLCBvbm9mZik7CiB9CiAKIHZvaWQgZmxleGNvcF9zZXRfbWFjX2ZpbHRlcihzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCB1OCBtYWNbNl0pCiB7Ci0JZmxleGNvcF9pYmlfdmFsdWUgdjQxOCx2NDFjOwotCXY0MWMgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLG1hY19hZGRyZXNzXzQxYyk7CisJZmxleGNvcF9pYmlfdmFsdWUgdjQxOCwgdjQxYzsKKwl2NDFjID0gZmMtPnJlYWRfaWJpX3JlZyhmYywgbWFjX2FkZHJlc3NfNDFjKTsKIAogCXY0MTgubWFjX2FkZHJlc3NfNDE4Lk1BQzEgPSBtYWNbMF07CiAJdjQxOC5tYWNfYWRkcmVzc180MTguTUFDMiA9IG1hY1sxXTsKQEAgLTM2LDI3ICszMywyOCBAQAogCXY0MWMubWFjX2FkZHJlc3NfNDFjLk1BQzcgPSBtYWNbNF07CiAJdjQxYy5tYWNfYWRkcmVzc180MWMuTUFDOCA9IG1hY1s1XTsKIAotCWZjLT53cml0ZV9pYmlfcmVnKGZjLG1hY19hZGRyZXNzXzQxOCx2NDE4KTsKLQlmYy0+d3JpdGVfaWJpX3JlZyhmYyxtYWNfYWRkcmVzc180MWMsdjQxYyk7CisJZmMtPndyaXRlX2liaV9yZWcoZmMsIG1hY19hZGRyZXNzXzQxOCwgdjQxOCk7CisJZmMtPndyaXRlX2liaV9yZWcoZmMsIG1hY19hZGRyZXNzXzQxYywgdjQxYyk7CiB9CiAKIHZvaWQgZmxleGNvcF9tYWNfZmlsdGVyX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IG9ub2ZmKQogewotCWZsZXhjb3Bfc2V0X2liaV92YWx1ZShjdHJsXzIwOCxNQUNfZmlsdGVyX01vZGVfc2lnLG9ub2ZmKTsKKwlmbGV4Y29wX3NldF9pYmlfdmFsdWUoY3RybF8yMDgsIE1BQ19maWx0ZXJfTW9kZV9zaWcsIG9ub2ZmKTsKIH0KIAotc3RhdGljIHZvaWQgZmxleGNvcF9waWRfZ3JvdXBfZmlsdGVyKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHUxNiBwaWQsIHUxNiBtYXNrKQorc3RhdGljIHZvaWQgZmxleGNvcF9waWRfZ3JvdXBfZmlsdGVyKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCXUxNiBwaWQsIHUxNiBtYXNrKQogewogCS8qIGluZGV4X3JlZ18zMTAuZXh0cmFfaW5kZXhfcmVnIG5lZWQgdG8gMCBvciA3IHRvIHdvcmsgKi8KIAlmbGV4Y29wX2liaV92YWx1ZSB2MzBjOwogCXYzMGMucGlkX2ZpbHRlcl8zMGNfZXh0X2luZF8wXzcuR3JvdXBfUElEID0gcGlkOwogCXYzMGMucGlkX2ZpbHRlcl8zMGNfZXh0X2luZF8wXzcuR3JvdXBfbWFzayA9IG1hc2s7Ci0JZmMtPndyaXRlX2liaV9yZWcoZmMscGlkX2ZpbHRlcl8zMGMsdjMwYyk7CisJZmMtPndyaXRlX2liaV9yZWcoZmMsIHBpZF9maWx0ZXJfMzBjLCB2MzBjKTsKIH0KIAogc3RhdGljIHZvaWQgZmxleGNvcF9waWRfZ3JvdXBfZmlsdGVyX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IG9ub2ZmKQogewotCWZsZXhjb3Bfc2V0X2liaV92YWx1ZShjdHJsXzIwOCxNYXNrX2ZpbHRlcl9zaWcsb25vZmYpOworCWZsZXhjb3Bfc2V0X2liaV92YWx1ZShjdHJsXzIwOCwgTWFza19maWx0ZXJfc2lnLCBvbm9mZik7CiB9CiAKIC8qIHRoaXMgZmFuY3kgZGVmaW5lIHJlZHVjZXMgdGhlIGNvZGUgc2l6ZSBvZiB0aGUgcXVpdGUgc2ltaWxhciBQSUQgY29udHJvbGxpbmcgb2YKQEAgLTY1LDkxICs2MywxMTIgQEAKIAogI2RlZmluZSBwaWRfY3RybCh2cmVnbmFtZSxmaWVsZCxlbmFibGVmaWVsZCx0cmFuc19maWVsZCx0cmFuc3ZhbCkgXAogCWZsZXhjb3BfaWJpX3ZhbHVlIHZwaWQgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLCB2cmVnbmFtZSksIFwKLQkJCQkJICB2MjA4ID0gZmMtPnJlYWRfaWJpX3JlZyhmYywgY3RybF8yMDgpOyBcCi1cCi0JdnBpZC52cmVnbmFtZS5maWVsZCA9IG9ub2ZmID8gcGlkIDogMHgxZmZmOyBcCi0JdnBpZC52cmVnbmFtZS50cmFuc19maWVsZCA9IHRyYW5zdmFsOyBcCi0JdjIwOC5jdHJsXzIwOC5lbmFibGVmaWVsZCA9IG9ub2ZmOyBcCi1cCi0JZmMtPndyaXRlX2liaV9yZWcoZmMsdnJlZ25hbWUsdnBpZCk7IFwKLQlmYy0+d3JpdGVfaWJpX3JlZyhmYyxjdHJsXzIwOCx2MjA4KTsKK3YyMDggPSBmYy0+cmVhZF9pYmlfcmVnKGZjLCBjdHJsXzIwOCk7IFwKK3ZwaWQudnJlZ25hbWUuZmllbGQgPSBvbm9mZiA/IHBpZCA6IDB4MWZmZjsgXAordnBpZC52cmVnbmFtZS50cmFuc19maWVsZCA9IHRyYW5zdmFsOyBcCit2MjA4LmN0cmxfMjA4LmVuYWJsZWZpZWxkID0gb25vZmY7IFwKK2ZjLT53cml0ZV9pYmlfcmVnKGZjLCB2cmVnbmFtZSwgdnBpZCk7IFwKK2ZjLT53cml0ZV9pYmlfcmVnKGZjLCBjdHJsXzIwOCwgdjIwOCk7CiAKLXN0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX1N0cmVhbTFfUElEX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgdTE2IHBpZCwgaW50IG9ub2ZmKQorc3RhdGljIHZvaWQgZmxleGNvcF9waWRfU3RyZWFtMV9QSURfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQl1MTYgcGlkLCBpbnQgb25vZmYpCiB7Ci0JcGlkX2N0cmwocGlkX2ZpbHRlcl8zMDAsU3RyZWFtMV9QSUQsU3RyZWFtMV9maWx0ZXJfc2lnLFN0cmVhbTFfdHJhbnMsMCk7CisJcGlkX2N0cmwocGlkX2ZpbHRlcl8zMDAsIFN0cmVhbTFfUElELCBTdHJlYW0xX2ZpbHRlcl9zaWcsCisJCQlTdHJlYW0xX3RyYW5zLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgZmxleGNvcF9waWRfU3RyZWFtMl9QSURfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCB1MTYgcGlkLCBpbnQgb25vZmYpCitzdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9TdHJlYW0yX1BJRF9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCXUxNiBwaWQsIGludCBvbm9mZikKIHsKLQlwaWRfY3RybChwaWRfZmlsdGVyXzMwMCxTdHJlYW0yX1BJRCxTdHJlYW0yX2ZpbHRlcl9zaWcsU3RyZWFtMl90cmFucywwKTsKKwlwaWRfY3RybChwaWRfZmlsdGVyXzMwMCwgU3RyZWFtMl9QSUQsIFN0cmVhbTJfZmlsdGVyX3NpZywKKwkJCVN0cmVhbTJfdHJhbnMsIDApOwogfQogCi1zdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9QQ1JfUElEX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgdTE2IHBpZCwgaW50IG9ub2ZmKQorc3RhdGljIHZvaWQgZmxleGNvcF9waWRfUENSX1BJRF9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCXUxNiBwaWQsIGludCBvbm9mZikKIHsKLQlwaWRfY3RybChwaWRfZmlsdGVyXzMwNCxQQ1JfUElELFBDUl9maWx0ZXJfc2lnLFBDUl90cmFucywwKTsKKwlwaWRfY3RybChwaWRfZmlsdGVyXzMwNCwgUENSX1BJRCwgUENSX2ZpbHRlcl9zaWcsIFBDUl90cmFucywgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX1BNVF9QSURfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCB1MTYgcGlkLCBpbnQgb25vZmYpCitzdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9QTVRfUElEX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJdTE2IHBpZCwgaW50IG9ub2ZmKQogewotCXBpZF9jdHJsKHBpZF9maWx0ZXJfMzA0LFBNVF9QSUQsUE1UX2ZpbHRlcl9zaWcsUE1UX3RyYW5zLDApOworCXBpZF9jdHJsKHBpZF9maWx0ZXJfMzA0LCBQTVRfUElELCBQTVRfZmlsdGVyX3NpZywgUE1UX3RyYW5zLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgZmxleGNvcF9waWRfRU1NX1BJRF9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHUxNiBwaWQsIGludCBvbm9mZikKK3N0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX0VNTV9QSURfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQl1MTYgcGlkLCBpbnQgb25vZmYpCiB7Ci0JcGlkX2N0cmwocGlkX2ZpbHRlcl8zMDgsRU1NX1BJRCxFTU1fZmlsdGVyX3NpZyxFTU1fdHJhbnMsMCk7CisJcGlkX2N0cmwocGlkX2ZpbHRlcl8zMDgsIEVNTV9QSUQsIEVNTV9maWx0ZXJfc2lnLCBFTU1fdHJhbnMsIDApOwogfQogCi1zdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9FQ01fUElEX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgdTE2IHBpZCwgaW50IG9ub2ZmKQorc3RhdGljIHZvaWQgZmxleGNvcF9waWRfRUNNX1BJRF9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCXUxNiBwaWQsIGludCBvbm9mZikKIHsKLQlwaWRfY3RybChwaWRfZmlsdGVyXzMwOCxFQ01fUElELEVDTV9maWx0ZXJfc2lnLEVDTV90cmFucywwKTsKKwlwaWRfY3RybChwaWRfZmlsdGVyXzMwOCwgRUNNX1BJRCwgRUNNX2ZpbHRlcl9zaWcsIEVDTV90cmFucywgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX2NvbnRyb2woc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IGluZGV4LCB1MTYgcGlkLGludCBvbm9mZikKK3N0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX2NvbnRyb2woc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJaW50IGluZGV4LCB1MTYgcGlkLCBpbnQgb25vZmYpCiB7CiAJaWYgKHBpZCA9PSAweDIwMDApCiAJCXJldHVybjsKIAotCWRlYl90cygic2V0dGluZyBwaWQ6ICU1ZCAlMDR4IGF0IGluZGV4ICVkICclcydcbiIscGlkLHBpZCxpbmRleCxvbm9mZiA/ICJvbiIgOiAib2ZmIik7CisJZGViX3RzKCJzZXR0aW5nIHBpZDogJTVkICUwNHggYXQgaW5kZXggJWQgJyVzJ1xuIiwKKwkJCXBpZCwgcGlkLCBpbmRleCwgb25vZmYgPyAib24iIDogIm9mZiIpOwogCiAJLyogV2UgY291bGQgdXNlIGJpdCBtYWdpYyBoZXJlIHRvIHJlZHVjZSBzb3VyY2UgY29kZSBzaXplLgogCSAqIEkgZGVjaWRlZCBhZ2FpbnN0IGl0LCBidXQgdG8gdXNlIHRoZSByZWFsIHJlZ2lzdGVyIG5hbWVzICovCiAJc3dpdGNoIChpbmRleCkgewotCQljYXNlIDA6IGZsZXhjb3BfcGlkX1N0cmVhbTFfUElEX2N0cmwoZmMscGlkLG9ub2ZmKTsgYnJlYWs7Ci0JCWNhc2UgMTogZmxleGNvcF9waWRfU3RyZWFtMl9QSURfY3RybChmYyxwaWQsb25vZmYpOyBicmVhazsKLQkJY2FzZSAyOiBmbGV4Y29wX3BpZF9QQ1JfUElEX2N0cmwoZmMscGlkLG9ub2ZmKTsgYnJlYWs7Ci0JCWNhc2UgMzogZmxleGNvcF9waWRfUE1UX1BJRF9jdHJsKGZjLHBpZCxvbm9mZik7IGJyZWFrOwotCQljYXNlIDQ6IGZsZXhjb3BfcGlkX0VNTV9QSURfY3RybChmYyxwaWQsb25vZmYpOyBicmVhazsKLQkJY2FzZSA1OglmbGV4Y29wX3BpZF9FQ01fUElEX2N0cmwoZmMscGlkLG9ub2ZmKTsgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlpZiAoZmMtPmhhc18zMl9od19waWRfZmlsdGVyICYmIGluZGV4IDwgMzgpIHsKLQkJCQlmbGV4Y29wX2liaV92YWx1ZSB2cGlkLHZpZDsKKwljYXNlIDA6CisJCWZsZXhjb3BfcGlkX1N0cmVhbTFfUElEX2N0cmwoZmMsIHBpZCwgb25vZmYpOworCQlicmVhazsKKwljYXNlIDE6CisJCWZsZXhjb3BfcGlkX1N0cmVhbTJfUElEX2N0cmwoZmMsIHBpZCwgb25vZmYpOworCQlicmVhazsKKwljYXNlIDI6CisJCWZsZXhjb3BfcGlkX1BDUl9QSURfY3RybChmYywgcGlkLCBvbm9mZik7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJZmxleGNvcF9waWRfUE1UX1BJRF9jdHJsKGZjLCBwaWQsIG9ub2ZmKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlmbGV4Y29wX3BpZF9FTU1fUElEX2N0cmwoZmMsIHBpZCwgb25vZmYpOworCQlicmVhazsKKwljYXNlIDU6CisJCWZsZXhjb3BfcGlkX0VDTV9QSURfY3RybChmYywgcGlkLCBvbm9mZik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChmYy0+aGFzXzMyX2h3X3BpZF9maWx0ZXIgJiYgaW5kZXggPCAzOCkgeworCQkJZmxleGNvcF9pYmlfdmFsdWUgdnBpZCwgdmlkOwogCi0JCQkJLyogc2V0IHRoZSBpbmRleCAqLwotCQkJCXZpZCA9IGZjLT5yZWFkX2liaV9yZWcoZmMsaW5kZXhfcmVnXzMxMCk7Ci0JCQkJdmlkLmluZGV4X3JlZ18zMTAuaW5kZXhfcmVnID0gaW5kZXggLSA2OwotCQkJCWZjLT53cml0ZV9pYmlfcmVnKGZjLGluZGV4X3JlZ18zMTAsIHZpZCk7CisJCQkvKiBzZXQgdGhlIGluZGV4ICovCisJCQl2aWQgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLCBpbmRleF9yZWdfMzEwKTsKKwkJCXZpZC5pbmRleF9yZWdfMzEwLmluZGV4X3JlZyA9IGluZGV4IC0gNjsKKwkJCWZjLT53cml0ZV9pYmlfcmVnKGZjLCBpbmRleF9yZWdfMzEwLCB2aWQpOwogCi0JCQkJdnBpZCA9IGZjLT5yZWFkX2liaV9yZWcoZmMscGlkX25fcmVnXzMxNCk7Ci0JCQkJdnBpZC5waWRfbl9yZWdfMzE0LlBJRCA9IG9ub2ZmID8gcGlkIDogMHgxZmZmOwotCQkJCXZwaWQucGlkX25fcmVnXzMxNC5QSURfZW5hYmxlX2JpdCA9IG9ub2ZmOwotCQkJCWZjLT53cml0ZV9pYmlfcmVnKGZjLHBpZF9uX3JlZ18zMTQsIHZwaWQpOwotCQkJfQotCQkJYnJlYWs7CisJCQl2cGlkID0gZmMtPnJlYWRfaWJpX3JlZyhmYywgcGlkX25fcmVnXzMxNCk7CisJCQl2cGlkLnBpZF9uX3JlZ18zMTQuUElEID0gb25vZmYgPyBwaWQgOiAweDFmZmY7CisJCQl2cGlkLnBpZF9uX3JlZ18zMTQuUElEX2VuYWJsZV9iaXQgPSBvbm9mZjsKKwkJCWZjLT53cml0ZV9pYmlfcmVnKGZjLCBwaWRfbl9yZWdfMzE0LCB2cGlkKTsKKwkJfQorCQlicmVhazsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgZmxleGNvcF90b2dnbGVfZnVsbHRzX3N0cmVhbWluZyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLGludCBvbm9mZikKK3N0YXRpYyBpbnQgZmxleGNvcF90b2dnbGVfZnVsbHRzX3N0cmVhbWluZyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBpbnQgb25vZmYpCiB7CiAJaWYgKGZjLT5mdWxsdHNfc3RyZWFtaW5nX3N0YXRlICE9IG9ub2ZmKSB7CiAJCWRlYl90cygiJXMgZnVsbCBUUyB0cmFuc2ZlclxuIixvbm9mZiA/ICJlbmFibGluZyIgOiAiZGlzYWJsaW5nIik7CiAJCWZsZXhjb3BfcGlkX2dyb3VwX2ZpbHRlcihmYywgMCwgMHgxZmUwICogKCFvbm9mZikpOwotCQlmbGV4Y29wX3BpZF9ncm91cF9maWx0ZXJfY3RybChmYyxvbm9mZik7CisJCWZsZXhjb3BfcGlkX2dyb3VwX2ZpbHRlcl9jdHJsKGZjLCBvbm9mZik7CiAJCWZjLT5mdWxsdHNfc3RyZWFtaW5nX3N0YXRlID0gb25vZmY7CiAJfQogCXJldHVybiAwOwogfQogCi1pbnQgZmxleGNvcF9waWRfZmVlZF9jb250cm9sKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZCwgaW50IG9ub2ZmKQoraW50IGZsZXhjb3BfcGlkX2ZlZWRfY29udHJvbChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQsIGludCBvbm9mZikKIHsKIAlpbnQgbWF4X3BpZF9maWx0ZXIgPSA2ICsgZmMtPmhhc18zMl9od19waWRfZmlsdGVyKjMyOwogCkBAIC0xNjQsMjQgKzE4MywyNSBAQAogCSAqICAgLSBvciB0aGUgcmVxdWVzdGVkIHBpZCBpcyAweDIwMDAgKi8KIAogCWlmICghZmMtPnBpZF9maWx0ZXJpbmcgJiYgZmMtPmZlZWRjb3VudCA9PSBvbm9mZikKLQkJZmxleGNvcF90b2dnbGVfZnVsbHRzX3N0cmVhbWluZyhmYyxvbm9mZik7CisJCWZsZXhjb3BfdG9nZ2xlX2Z1bGx0c19zdHJlYW1pbmcoZmMsIG9ub2ZmKTsKIAogCWlmIChmYy0+cGlkX2ZpbHRlcmluZykgewotCQlmbGV4Y29wX3BpZF9jb250cm9sKGZjLGR2YmRteGZlZWQtPmluZGV4LGR2YmRteGZlZWQtPnBpZCxvbm9mZik7CisJCWZsZXhjb3BfcGlkX2NvbnRyb2wgXAorCQkJKGZjLCBkdmJkbXhmZWVkLT5pbmRleCwgZHZiZG14ZmVlZC0+cGlkLCBvbm9mZik7CiAKIAkJaWYgKGZjLT5leHRyYV9mZWVkY291bnQgPiAwKQotCQkJZmxleGNvcF90b2dnbGVfZnVsbHRzX3N0cmVhbWluZyhmYywxKTsKKwkJCWZsZXhjb3BfdG9nZ2xlX2Z1bGx0c19zdHJlYW1pbmcoZmMsIDEpOwogCQllbHNlIGlmIChkdmJkbXhmZWVkLT5waWQgPT0gMHgyMDAwKQotCQkJZmxleGNvcF90b2dnbGVfZnVsbHRzX3N0cmVhbWluZyhmYyxvbm9mZik7CisJCQlmbGV4Y29wX3RvZ2dsZV9mdWxsdHNfc3RyZWFtaW5nKGZjLCBvbm9mZik7CiAJCWVsc2UKLQkJCWZsZXhjb3BfdG9nZ2xlX2Z1bGx0c19zdHJlYW1pbmcoZmMsMCk7CisJCQlmbGV4Y29wX3RvZ2dsZV9mdWxsdHNfc3RyZWFtaW5nKGZjLCAwKTsKIAl9CiAKIAkvKiBpZiBpdCB3YXMgdGhlIGZpcnN0IG9yIGxhc3QgZmVlZCByZXF1ZXN0IGNoYW5nZSB0aGUgc3RyZWFtLXN0YXR1cyAqLwogCWlmIChmYy0+ZmVlZGNvdW50ID09IG9ub2ZmKSB7Ci0JCWZsZXhjb3BfcmN2X2RhdGFfY3RybChmYyxvbm9mZik7CisJCWZsZXhjb3BfcmN2X2RhdGFfY3RybChmYywgb25vZmYpOwogCQlpZiAoZmMtPnN0cmVhbV9jb250cm9sKSAvKiBkZXZpY2Ugc3BlY2lmaWMgc3RyZWFtIGNvbnRyb2wgKi8KLQkJCWZjLT5zdHJlYW1fY29udHJvbChmYyxvbm9mZik7CisJCQlmYy0+c3RyZWFtX2NvbnRyb2woZmMsIG9ub2ZmKTsKIAogCQkvKiBmZWVkaW5nIHN0b3BwZWQgLT4gcmVzZXQgdGhlIGZsZXhjb3AgZmlsdGVyKi8KIAkJaWYgKG9ub2ZmID09IDApIHsKQEAgLTE4OSw3ICsyMDksNiBAQAogCQkJZmxleGNvcF9od19maWx0ZXJfaW5pdChmYyk7CiAJCX0KIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZmxleGNvcF9waWRfZmVlZF9jb250cm9sKTsKQEAgLTE5OSwxNSArMjE4LDE1IEBACiAJaW50IGk7CiAJZmxleGNvcF9pYmlfdmFsdWUgdjsKIAlmb3IgKGkgPSAwOyBpIDwgNiArIDMyKmZjLT5oYXNfMzJfaHdfcGlkX2ZpbHRlcjsgaSsrKQotCQlmbGV4Y29wX3BpZF9jb250cm9sKGZjLGksMHgxZmZmLDApOworCQlmbGV4Y29wX3BpZF9jb250cm9sKGZjLCBpLCAweDFmZmYsIDApOwogCiAJZmxleGNvcF9waWRfZ3JvdXBfZmlsdGVyKGZjLCAwLCAweDFmZTApOwotCWZsZXhjb3BfcGlkX2dyb3VwX2ZpbHRlcl9jdHJsKGZjLDApOworCWZsZXhjb3BfcGlkX2dyb3VwX2ZpbHRlcl9jdHJsKGZjLCAwKTsKIAotCXYgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLHBpZF9maWx0ZXJfMzA4KTsKKwl2ID0gZmMtPnJlYWRfaWJpX3JlZyhmYywgcGlkX2ZpbHRlcl8zMDgpOwogCXYucGlkX2ZpbHRlcl8zMDguRU1NX2ZpbHRlcl80ID0gMTsKIAl2LnBpZF9maWx0ZXJfMzA4LkVNTV9maWx0ZXJfNiA9IDA7Ci0JZmMtPndyaXRlX2liaV9yZWcoZmMscGlkX2ZpbHRlcl8zMDgsdik7CisJZmMtPndyaXRlX2liaV9yZWcoZmMsIHBpZF9maWx0ZXJfMzA4LCB2KTsKIAogCWZsZXhjb3BfbnVsbF9maWx0ZXJfY3RybChmYywgMSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtaTJjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtaTJjLmMKaW5kZXggZjEzNzgzZi4uZTJiZWQ1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1pMmMuYwpAQCAtMSwxNyArMSwxNCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpbnV4IGRyaXZlciB0aGUgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCi0gKgorICogTGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKICAqIGZsZXhjb3AtaTJjLmMgLSBmbGV4Y29wIGludGVybmFsIDJXaXJlIGJ1cyAoSTJDKSBhbmQgZHZiIGkyYyBpbml0aWFsaXphdGlvbgotICoKLSAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4KKyAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbgogICovCiAjaW5jbHVkZSAiZmxleGNvcC5oIgogCiAjZGVmaW5lIEZDX01BWF9JMkNfUkVUUklFUyAxMDAwMDAKIAotLyogI2RlZmluZSBEVU1QX0kyQ19NRVNTQUdFUyAqLwotCi1zdGF0aWMgaW50IGZsZXhjb3BfaTJjX29wZXJhdGlvbihzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2liaV92YWx1ZSAqcjEwMCkKK3N0YXRpYyBpbnQgZmxleGNvcF9pMmNfb3BlcmF0aW9uKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWZsZXhjb3BfaWJpX3ZhbHVlICpyMTAwKQogewogCWludCBpOwogCWZsZXhjb3BfaWJpX3ZhbHVlIHI7CkBAIC0yNiw3ICsyMyw3IEBACiAJCXIgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLCB0d19zbV9jXzEwMCk7CiAKIAkJaWYgKCFyLnR3X3NtX2NfMTAwLm5vX2Jhc2VfYWRkcl9hY2tfZXJyb3IpIHsKLQkJCWlmIChyLnR3X3NtX2NfMTAwLnN0X2RvbmUpIHsgIC8qICYmICFyLnR3X3NtX2NfMTAwLndvcmtpbmdfc3RhcnQgKi8KKwkJCWlmIChyLnR3X3NtX2NfMTAwLnN0X2RvbmUpIHsKIAkJCQkqcjEwMCA9IHI7CiAJCQkJZGViX2kyYygiaTJjIHN1Y2Nlc3NcbiIpOwogCQkJCXJldHVybiAwOwpAQCAtMzYsMTcgKzMzLDMxIEBACiAJCQlyZXR1cm4gLUVSRU1PVEVJTzsKIAkJfQogCX0KLQlkZWJfaTJjKCJ0cmllZCAlZCB0aW1lcyBpMmMgb3BlcmF0aW9uLCBuZXZlciBmaW5pc2hlZCBvciB0b28gbWFueSBhY2sgZXJyb3JzLlxuIixpKTsKKwlkZWJfaTJjKCJ0cmllZCAlZCB0aW1lcyBpMmMgb3BlcmF0aW9uLCAiCisJCQkibmV2ZXIgZmluaXNoZWQgb3IgdG9vIG1hbnkgYWNrIGVycm9ycy5cbiIsIGkpOwogCXJldHVybiAtRVJFTU9URUlPOwogfQogCiBzdGF0aWMgaW50IGZsZXhjb3BfaTJjX3JlYWQ0KHN0cnVjdCBmbGV4Y29wX2kyY19hZGFwdGVyICppMmMsCi0JZmxleGNvcF9pYmlfdmFsdWUgcjEwMCwgdTggKmJ1ZikKKwkJZmxleGNvcF9pYmlfdmFsdWUgcjEwMCwgdTggKmJ1ZikKIHsKIAlmbGV4Y29wX2liaV92YWx1ZSByMTA0OwotCWludCBsZW4gPSByMTAwLnR3X3NtX2NfMTAwLnRvdGFsX2J5dGVzLCAvKiByZW1lbWJlciB0b3RhbF9ieXRlcyBpcyBidWZsZW4tMSAqLworCWludCBsZW4gPSByMTAwLnR3X3NtX2NfMTAwLnRvdGFsX2J5dGVzLAorCQkvKiByZW1lbWJlciB0b3RhbF9ieXRlcyBpcyBidWZsZW4tMSAqLwogCQlyZXQ7CiAKKwkvKiB3b3JrLWFyb3VuZCB0byBoYXZlIENhYmxlU3RhcjIgYW5kIFNreVN0YXIyIHJldiAyLjcgd29yaworCSAqIGNvcnJlY3RseToKKwkgKgorCSAqIHRoZSBJVEQxMDAwIGlzIGJlaGluZCBhbiBpMmMtZ2F0ZSB3aGljaCBjbG9zZXMgYXV0b21hdGljYWxseQorCSAqIGFmdGVyIGFuIGkyYy10cmFuc2FjdGlvbiB0aGUgU1RWMDI5NyBuZWVkcyAyIGNvbnNlY3V0aXZlIHJlYWRzCisJICogb25lIHdpdGggbm9fYmFzZV9hZGRyID0gMCBhbmQgb25lIHdpdGggMQorCSAqCisJICogdGhvc2UgdHdvIHdvcmstYXJvdW5kcyBhcmUgY29uZmxpY3Rpbjogd2UgY2hlY2sgZm9yIHRoZSBjYXJkCisJICogdHlwZSwgaXQgaXMgc2V0IHdoZW4gcHJvYmluZyB0aGUgSVREMTAwMCAqLworCWlmIChpMmMtPmZjLT5kZXZfdHlwZSA9PSBGQ19TS1lfUkVWMjcpCisJCXIxMDAudHdfc21fY18xMDAubm9fYmFzZV9hZGRyX2Fja19lcnJvciA9IGkyYy0+bm9fYmFzZV9hZGRyOworCiAJcmV0ID0gZmxleGNvcF9pMmNfb3BlcmF0aW9uKGkyYy0+ZmMsICZyMTAwKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZGViX2kyYygiUmV0cnlpbmcgb3BlcmF0aW9uXG4iKTsKQEAgLTY5LDExICs4MCwxMSBAQAogCQlpZiAobGVuID4gMSkgYnVmWzJdID0gcjEwNC50d19zbV9jXzEwNC5kYXRhM19yZWc7CiAJCWlmIChsZW4gPiAyKSBidWZbM10gPSByMTA0LnR3X3NtX2NfMTA0LmRhdGE0X3JlZzsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmbGV4Y29wX2kyY193cml0ZTQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9pYmlfdmFsdWUgcjEwMCwgdTggKmJ1ZikKK3N0YXRpYyBpbnQgZmxleGNvcF9pMmNfd3JpdGU0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWZsZXhjb3BfaWJpX3ZhbHVlIHIxMDAsIHU4ICpidWYpCiB7CiAJZmxleGNvcF9pYmlfdmFsdWUgcjEwNDsKIAlpbnQgbGVuID0gcjEwMC50d19zbV9jXzEwMC50b3RhbF9ieXRlczsgLyogcmVtZW1iZXIgdG90YWxfYnl0ZXMgaXMgYnVmbGVuLTEgKi8KQEAgLTgxLDcgKzkyLDYgQEAKIAogCS8qIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBieXRlLCBvdGhlcndpc2Ugd2Ugd291bGRuJ3QgYmUgaGVyZSAqLwogCXIxMDAudHdfc21fY18xMDAuZGF0YTFfcmVnID0gYnVmWzBdOwotCiAJcjEwNC50d19zbV9jXzEwNC5kYXRhMl9yZWcgPSBsZW4gPiAwID8gYnVmWzFdIDogMDsKIAlyMTA0LnR3X3NtX2NfMTA0LmRhdGEzX3JlZyA9IGxlbiA+IDEgPyBidWZbMl0gOiAwOwogCXIxMDQudHdfc21fY18xMDQuZGF0YTRfcmVnID0gbGVuID4gMiA/IGJ1ZlszXSA6IDA7CkBAIC05NCw3ICsxMDQsNyBAQAogfQogCiBpbnQgZmxleGNvcF9pMmNfcmVxdWVzdChzdHJ1Y3QgZmxleGNvcF9pMmNfYWRhcHRlciAqaTJjLAotCWZsZXhjb3BfYWNjZXNzX29wX3Qgb3AsIHU4IGNoaXBhZGRyLCB1OCBhZGRyLCB1OCAqYnVmLCB1MTYgbGVuKQorCQlmbGV4Y29wX2FjY2Vzc19vcF90IG9wLCB1OCBjaGlwYWRkciwgdTggYWRkciwgdTggKmJ1ZiwgdTE2IGxlbikKIHsKIAlpbnQgcmV0OwogCkBAIC0xMTcsNyArMTI3LDYgQEAKIAkJcHJpbnRrKCJyZCgiKTsKIAllbHNlCiAJCXByaW50aygid3IoIik7Ci0KIAlwcmludGsoIiUwMngpOiAlMDJ4ICIsIGNoaXBhZGRyLCBhZGRyKTsKICNlbmRpZgogCkBAIC0xNjMsNyArMTcyLDggQEAKIEVYUE9SVF9TWU1CT0woZmxleGNvcF9pMmNfcmVxdWVzdCk7CiAKIC8qIG1hc3RlciB4ZmVyIGNhbGxiYWNrIGZvciBkZW1vZHVsYXRvciAqLwotc3RhdGljIGludCBmbGV4Y29wX21hc3Rlcl94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHN0cnVjdCBpMmNfbXNnIG1zZ3NbXSwgaW50IG51bSkKK3N0YXRpYyBpbnQgZmxleGNvcF9tYXN0ZXJfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQlzdHJ1Y3QgaTJjX21zZyBtc2dzW10sIGludCBudW0pCiB7CiAJc3RydWN0IGZsZXhjb3BfaTJjX2FkYXB0ZXIgKmkyYyA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXApOwogCWludCBpLCByZXQgPSAwOwpAQCAtMTgyLDEyICsxOTIsMTMgQEAKIAkJLyogcmVhZGluZyAqLwogCQlpZiAoaSsxIDwgbnVtICYmIChtc2dzW2krMV0uZmxhZ3MgPT0gSTJDX01fUkQpKSB7CiAJCQlyZXQgPSBpMmMtPmZjLT5pMmNfcmVxdWVzdChpMmMsIEZDX1JFQUQsIG1zZ3NbaV0uYWRkciwKLQkJCQltc2dzW2ldLmJ1ZlswXSwgbXNnc1tpKzFdLmJ1ZiwgbXNnc1tpKzFdLmxlbik7CisJCQkJCW1zZ3NbaV0uYnVmWzBdLCBtc2dzW2krMV0uYnVmLAorCQkJCQltc2dzW2krMV0ubGVuKTsKIAkJCWkrKzsgLyogc2tpcCB0aGUgZm9sbG93aW5nIG1lc3NhZ2UgKi8KIAkJfSBlbHNlIC8qIHdyaXRpbmcgKi8KIAkJCXJldCA9IGkyYy0+ZmMtPmkyY19yZXF1ZXN0KGkyYywgRkNfV1JJVEUsIG1zZ3NbaV0uYWRkciwKLQkJCQltc2dzW2ldLmJ1ZlswXSwgJm1zZ3NbaV0uYnVmWzFdLAotCQkJCW1zZ3NbaV0ubGVuIC0gMSk7CisJCQkJCW1zZ3NbaV0uYnVmWzBdLCAmbXNnc1tpXS5idWZbMV0sCisJCQkJCW1zZ3NbaV0ubGVuIC0gMSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQllcnIoImkyYyBtYXN0ZXJfeGZlciBmYWlsZWQiKTsKIAkJCWJyZWFrOwpAQCAtMjE0LDIzICsyMjUsMjEgQEAKIGludCBmbGV4Y29wX2kyY19pbml0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpCiB7CiAJaW50IHJldDsKLQogCW11dGV4X2luaXQoJmZjLT5pMmNfbXV0ZXgpOwogCiAJZmMtPmZjX2kyY19hZGFwWzBdLmZjID0gZmM7CiAJZmMtPmZjX2kyY19hZGFwWzFdLmZjID0gZmM7CiAJZmMtPmZjX2kyY19hZGFwWzJdLmZjID0gZmM7Ci0KIAlmYy0+ZmNfaTJjX2FkYXBbMF0ucG9ydCA9IEZDX0kyQ19QT1JUX0RFTU9EOwogCWZjLT5mY19pMmNfYWRhcFsxXS5wb3J0ID0gRkNfSTJDX1BPUlRfRUVQUk9NOwogCWZjLT5mY19pMmNfYWRhcFsyXS5wb3J0ID0gRkNfSTJDX1BPUlRfVFVORVI7CiAKIAlzdHJsY3B5KGZjLT5mY19pMmNfYWRhcFswXS5pMmNfYWRhcC5uYW1lLCAiQjJDMiBGbGV4Q29wIEkyQyB0byBkZW1vZCIsCi0JCXNpemVvZihmYy0+ZmNfaTJjX2FkYXBbMF0uaTJjX2FkYXAubmFtZSkpOworCQkJc2l6ZW9mKGZjLT5mY19pMmNfYWRhcFswXS5pMmNfYWRhcC5uYW1lKSk7CiAJc3RybGNweShmYy0+ZmNfaTJjX2FkYXBbMV0uaTJjX2FkYXAubmFtZSwgIkIyQzIgRmxleENvcCBJMkMgdG8gZWVwcm9tIiwKLQkJc2l6ZW9mKGZjLT5mY19pMmNfYWRhcFsxXS5pMmNfYWRhcC5uYW1lKSk7CisJCQlzaXplb2YoZmMtPmZjX2kyY19hZGFwWzFdLmkyY19hZGFwLm5hbWUpKTsKIAlzdHJsY3B5KGZjLT5mY19pMmNfYWRhcFsyXS5pMmNfYWRhcC5uYW1lLCAiQjJDMiBGbGV4Q29wIEkyQyB0byB0dW5lciIsCi0JCXNpemVvZihmYy0+ZmNfaTJjX2FkYXBbMl0uaTJjX2FkYXAubmFtZSkpOworCQkJc2l6ZW9mKGZjLT5mY19pMmNfYWRhcFsyXS5pMmNfYWRhcC5uYW1lKSk7CiAKIAlpMmNfc2V0X2FkYXBkYXRhKCZmYy0+ZmNfaTJjX2FkYXBbMF0uaTJjX2FkYXAsICZmYy0+ZmNfaTJjX2FkYXBbMF0pOwogCWkyY19zZXRfYWRhcGRhdGEoJmZjLT5mY19pMmNfYWRhcFsxXS5pMmNfYWRhcCwgJmZjLT5mY19pMmNfYWRhcFsxXSk7CkBAIC0yNjgsNyArMjc3LDYgQEAKIAlpMmNfZGVsX2FkYXB0ZXIoJmZjLT5mY19pMmNfYWRhcFsxXS5pMmNfYWRhcCk7CiBhZGFwXzFfZmFpbGVkOgogCWkyY19kZWxfYWRhcHRlcigmZmMtPmZjX2kyY19hZGFwWzBdLmkyY19hZGFwKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI3OSw2ICsyODcsNSBAQAogCQlpMmNfZGVsX2FkYXB0ZXIoJmZjLT5mY19pMmNfYWRhcFsxXS5pMmNfYWRhcCk7CiAJCWkyY19kZWxfYWRhcHRlcigmZmMtPmZjX2kyY19hZGFwWzBdLmkyY19hZGFwKTsKIAl9Ci0KIAlmYy0+aW5pdF9zdGF0ZSAmPSB+RkNfU1RBVEVfSTJDX0lOSVQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtbWlzYy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLW1pc2MuYwppbmRleCA5M2QyMGU1Li5lNTY2MjdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtbWlzYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1taXNjLmMKQEAgLTEsOSArMSw3IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGludXggZHJpdmVyIHRoZSBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKLSAqCi0gKiBmbGV4Y29wLW1pc2MuYyAtIG1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zLgotICoKLSAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4KKyAqIExpbnV4IGRyaXZlciBmb3IgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCisgKiBmbGV4Y29wLW1pc2MuYyAtIG1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zCisgKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24KICAqLwogI2luY2x1ZGUgImZsZXhjb3AuaCIKIApAQCAtMTIsMzkgKzEwLDQzIEBACiAJZmxleGNvcF9pYmlfdmFsdWUgdiA9IGZjLT5yZWFkX2liaV9yZWcoZmMsbWlzY18yMDQpOwogCiAJc3dpdGNoICh2Lm1pc2NfMjA0LlJldl9OX3NpZ19yZXZpc2lvbl9oaSkgewotCQljYXNlIDB4MjoKLQkJCWRlYl9pbmZvKCJmb3VuZCBhIEZsZXhDb3BJSS5cbiIpOwotCQkJZmMtPnJldiA9IEZMRVhDT1BfSUk7Ci0JCQlicmVhazsKLQkJY2FzZSAweDM6Ci0JCQlkZWJfaW5mbygiZm91bmQgYSBGbGV4Q29wSUliLlxuIik7Ci0JCQlmYy0+cmV2ID0gRkxFWENPUF9JSUI7Ci0JCQlicmVhazsKLQkJY2FzZSAweDA6Ci0JCQlkZWJfaW5mbygiZm91bmQgYSBGbGV4Q29wSUlJLlxuIik7Ci0JCQlmYy0+cmV2ID0gRkxFWENPUF9JSUk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVycigidW5rb3duIEZsZXhDb3AgUmV2aXNpb246ICV4LiBQbGVhc2UgcmVwb3J0IHRoZSBsaW51eC1kdmJAbGludXh0di5vcmcuIix2Lm1pc2NfMjA0LlJldl9OX3NpZ19yZXZpc2lvbl9oaSk7Ci0JCQlicmVhazsKKwljYXNlIDB4MjoKKwkJZGViX2luZm8oImZvdW5kIGEgRmxleENvcElJLlxuIik7CisJCWZjLT5yZXYgPSBGTEVYQ09QX0lJOworCQlicmVhazsKKwljYXNlIDB4MzoKKwkJZGViX2luZm8oImZvdW5kIGEgRmxleENvcElJYi5cbiIpOworCQlmYy0+cmV2ID0gRkxFWENPUF9JSUI7CisJCWJyZWFrOworCWNhc2UgMHgwOgorCQlkZWJfaW5mbygiZm91bmQgYSBGbGV4Q29wSUlJLlxuIik7CisJCWZjLT5yZXYgPSBGTEVYQ09QX0lJSTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyKCJ1bmtub3duIEZsZXhDb3AgUmV2aXNpb246ICV4LiBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gIgorCQkJCSJsaW51eC1kdmJAbGludXh0di5vcmcuIiwKKwkJCQl2Lm1pc2NfMjA0LlJldl9OX3NpZ19yZXZpc2lvbl9oaSk7CisJCWJyZWFrOwogCX0KIAogCWlmICgoZmMtPmhhc18zMl9od19waWRfZmlsdGVyID0gdi5taXNjXzIwNC5SZXZfTl9zaWdfY2FwcykpCi0JCWRlYl9pbmZvKCJ0aGlzIEZsZXhDb3AgaGFzIHRoZSBhZGRpdGlvbmFsIDMyIGhhcmR3YXJlIHBpZCBmaWx0ZXIuXG4iKTsKKwkJZGViX2luZm8oInRoaXMgRmxleENvcCBoYXMgIgorCQkJCSJ0aGUgYWRkaXRpb25hbCAzMiBoYXJkd2FyZSBwaWQgZmlsdGVyLlxuIik7CiAJZWxzZQotCQlkZWJfaW5mbygidGhpcyBGbGV4Q29wIGhhcyBvbmx5IHRoZSA2IGJhc2ljIG1haW4gaGFyZHdhcmUgcGlkIGZpbHRlci5cbiIpOworCQlkZWJfaW5mbygidGhpcyBGbGV4Q29wIGhhcyAiCisJCQkJInRoZSA2IGJhc2ljIG1haW4gaGFyZHdhcmUgcGlkIGZpbHRlci5cbiIpOwogCS8qIGJ1cyBwYXJ0cyBoYXZlIHRvIGRlY2lkZSBpZiBodyBwaWQgZmlsdGVyaW5nIGlzIHVzZWQgb3Igbm90LiAqLwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqZmxleGNvcF9yZXZpc2lvbl9uYW1lc1tdID0gewotCSJVbmtvd24gY2hpcCIsCisJIlVua25vd24gY2hpcCIsCiAJIkZsZXhDb3BJSSIsCiAJIkZsZXhDb3BJSWIiLAogCSJGbGV4Q29wSUlJIiwKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpmbGV4Y29wX2RldmljZV9uYW1lc1tdID0gewotCSJVbmtvd24gZGV2aWNlIiwKKwkiVW5rbm93biBkZXZpY2UiLAogCSJBaXIyUEMvQWlyU3RhciAyIERWQi1UIiwKIAkiQWlyMlBDL0FpclN0YXIgMiBBVFNDIDFzdCBnZW5lcmF0aW9uIiwKIAkiQWlyMlBDL0FpclN0YXIgMiBBVFNDIDJuZCBnZW5lcmF0aW9uIiwKQEAgLTYxLDIxICs2MywyMyBAQAogCSJQQ0kiLAogfTsKIAotdm9pZCBmbGV4Y29wX2RldmljZV9uYW1lKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsY29uc3QgY2hhciAqcHJlZml4LGNvbnN0Ci0JCWNoYXIgKnN1ZmZpeCkKK3ZvaWQgZmxleGNvcF9kZXZpY2VfbmFtZShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQljb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKIHsKLQlpbmZvKCIlcyAnJXMnIGF0IHRoZSAnJXMnIGJ1cyBjb250cm9sbGVkIGJ5IGEgJyVzJyAlcyIscHJlZml4LAotCQkJZmxleGNvcF9kZXZpY2VfbmFtZXNbZmMtPmRldl90eXBlXSxmbGV4Y29wX2J1c19uYW1lc1tmYy0+YnVzX3R5cGVdLAotCQkJZmxleGNvcF9yZXZpc2lvbl9uYW1lc1tmYy0+cmV2XSxzdWZmaXgpOworCWluZm8oIiVzICclcycgYXQgdGhlICclcycgYnVzIGNvbnRyb2xsZWQgYnkgYSAnJXMnICVzIiwKKwkJCXByZWZpeCwJZmxleGNvcF9kZXZpY2VfbmFtZXNbZmMtPmRldl90eXBlXSwKKwkJCWZsZXhjb3BfYnVzX25hbWVzW2ZjLT5idXNfdHlwZV0sCisJCQlmbGV4Y29wX3JldmlzaW9uX25hbWVzW2ZjLT5yZXZdLCBzdWZmaXgpOwogfQogCi12b2lkIGZsZXhjb3BfZHVtcF9yZWcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9pYmlfcmVnaXN0ZXIgcmVnLCBpbnQgbnVtKQordm9pZCBmbGV4Y29wX2R1bXBfcmVnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWZsZXhjb3BfaWJpX3JlZ2lzdGVyIHJlZywgaW50IG51bSkKIHsKIAlmbGV4Y29wX2liaV92YWx1ZSB2OwogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewotCQl2ID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxyZWcrNCppKTsKLQkJZGViX3JkdW1wKCIweCUwM3g6ICUwOHgsICIscmVnKzQqaSwgdi5yYXcpOworCQl2ID0gZmMtPnJlYWRfaWJpX3JlZyhmYywgcmVnKzQqaSk7CisJCWRlYl9yZHVtcCgiMHglMDN4OiAlMDh4LCAiLCByZWcrNCppLCB2LnJhdyk7CiAJfQogCWRlYl9yZHVtcCgiXG4iKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1wY2kuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1wY2kuYwppbmRleCA3NmUzN2ZkLi4yMjdjMDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcGNpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXBjaS5jCkBAIC0xLDkgKzEsNyBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpbnV4IGRyaXZlciB0aGUgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCi0gKgotICogZmxleGNvcC1wY2kuYyAtIGNvdmVycyB0aGUgUENJIHBhcnQgaW5jbHVkaW5nIERNQSB0cmFuc2ZlcnMuCi0gKgotICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICogTGludXggZHJpdmVyIHRoZSBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKKyAqIGZsZXhjb3AtcGNpLmMgLSBjb3ZlcnMgdGhlIFBDSSBwYXJ0IGluY2x1ZGluZyBETUEgdHJhbnNmZXJzCisgKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24KICAqLwogCiAjZGVmaW5lIEZDX0xPR19QUkVGSVggImZsZXhjb3AtcGNpIgpAQCAtMTEsNyArOSw4IEBACiAKIHN0YXRpYyBpbnQgZW5hYmxlX3BpZF9maWx0ZXJpbmcgPSAxOwogbW9kdWxlX3BhcmFtKGVuYWJsZV9waWRfZmlsdGVyaW5nLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhlbmFibGVfcGlkX2ZpbHRlcmluZywgImVuYWJsZSBoYXJkd2FyZSBwaWQgZmlsdGVyaW5nOiBzdXBwb3J0ZWQgdmFsdWVzOiAwIChmdWxsdHMpLCAxIik7CitNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZV9waWRfZmlsdGVyaW5nLAorCSJlbmFibGUgaGFyZHdhcmUgcGlkIGZpbHRlcmluZzogc3VwcG9ydGVkIHZhbHVlczogMCAoZnVsbHRzKSwgMSIpOwogCiBzdGF0aWMgaW50IGlycV9jaGtfaW50diA9IDEwMDsKIG1vZHVsZV9wYXJhbShpcnFfY2hrX2ludHYsIGludCwgMDY0NCk7CkBAIC0yNiwxNyArMjUsMTcgQEAKICNkZWZpbmUgREVCU1RBVFVTICIgKGRlYnVnZ2luZyBpcyBub3QgZW5hYmxlZCkiCiAjZW5kaWYKIAotI2RlZmluZSBkZWJfaW5mbyhhcmdzLi4uKSAgZHByaW50aygweDAxLGFyZ3MpCi0jZGVmaW5lIGRlYl9yZWcoYXJncy4uLikgICBkcHJpbnRrKDB4MDIsYXJncykKLSNkZWZpbmUgZGViX3RzKGFyZ3MuLi4pICAgIGRwcmludGsoMHgwNCxhcmdzKQotI2RlZmluZSBkZWJfaXJxKGFyZ3MuLi4pICAgZHByaW50aygweDA4LGFyZ3MpCi0jZGVmaW5lIGRlYl9jaGsoYXJncy4uLikgICBkcHJpbnRrKDB4MTAsYXJncykKKyNkZWZpbmUgZGViX2luZm8oYXJncy4uLikgZHByaW50aygweDAxLCBhcmdzKQorI2RlZmluZSBkZWJfcmVnKGFyZ3MuLi4pIGRwcmludGsoMHgwMiwgYXJncykKKyNkZWZpbmUgZGViX3RzKGFyZ3MuLi4pIGRwcmludGsoMHgwNCwgYXJncykKKyNkZWZpbmUgZGViX2lycShhcmdzLi4uKSBkcHJpbnRrKDB4MDgsIGFyZ3MpCisjZGVmaW5lIGRlYl9jaGsoYXJncy4uLikgZHByaW50aygweDEwLCBhcmdzKQogCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywKIAkic2V0IGRlYnVnIGxldmVsICgxPWluZm8sMj1yZWdzLDQ9VFMsOD1pcnFkbWEsMTY9Y2hlY2sgKHwtYWJsZSkpLiIKLQkgREVCU1RBVFVTKTsKKwlERUJTVEFUVVMpOwogCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjEiCiAjZGVmaW5lIERSSVZFUl9OQU1FICJUZWNobmlzYXQvQjJDMiBGbGV4Q29wIElJL0lJYi9JSUkgRGlnaXRhbCBUViBQQ0kgRHJpdmVyIgpAQCAtNTEsMzAgKzUwLDMwIEBACiAKIAl2b2lkIF9faW9tZW0gKmlvX21lbTsKIAl1MzIgaXJxOwotLyogYnVmZmVyc2l6ZSAoYXQgbGVhc3QgZm9yIERNQTEsIG5lZWQgdG8gYmUgJSAxODggPT0gMCwKLSAqIHRoaXMgbG9naWMgaXMgcmVxdWlyZWQgKi8KKwkvKiBidWZmZXJzaXplIChhdCBsZWFzdCBmb3IgRE1BMSwgbmVlZCB0byBiZSAlIDE4OCA9PSAwLAorCSAqIHRoaXMgbG9naWMgaXMgcmVxdWlyZWQgKi8KICNkZWZpbmUgRkNfREVGQVVMVF9ETUExX0JVRlNJWkUgKDEyODAgKiAxODgpCiAjZGVmaW5lIEZDX0RFRkFVTFRfRE1BMl9CVUZTSVpFICgxMCAqIDE4OCkKIAlzdHJ1Y3QgZmxleGNvcF9kbWEgZG1hWzJdOwogCiAJaW50IGFjdGl2ZV9kbWExX2FkZHI7IC8qIDAgPSBhZGRyMCBvZiBkbWExOyAxID0gYWRkcjEgb2YgZG1hMSAqLwotCXUzMiBsYXN0X2RtYTFfY3VyX3BvczsgLyogcG9zaXRpb24gb2YgdGhlIHBvaW50ZXIgbGFzdCB0aW1lIHRoZSB0aW1lci9wYWNrZXQgaXJxIG9jY3VyZWQgKi8KKwl1MzIgbGFzdF9kbWExX2N1cl9wb3M7CisJLyogcG9zaXRpb24gb2YgdGhlIHBvaW50ZXIgbGFzdCB0aW1lIHRoZSB0aW1lci9wYWNrZXQgaXJxIG9jY3VyZWQgKi8KIAlpbnQgY291bnQ7CiAJaW50IGNvdW50X3ByZXY7CiAJaW50IHN0cmVhbV9wcm9ibGVtOwogCiAJc3BpbmxvY2tfdCBpcnFfbG9jazsKLQogCXVuc2lnbmVkIGxvbmcgbGFzdF9pcnE7CiAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGlycV9jaGVja193b3JrOwotCiAJc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmY19kZXY7CiB9OwogCi1zdGF0aWMgaW50IGxhc3R3cmVnLGxhc3R3dmFsLGxhc3RycmVnLGxhc3RydmFsOworc3RhdGljIGludCBsYXN0d3JlZywgbGFzdHd2YWwsIGxhc3RycmVnLCBsYXN0cnZhbDsKIAotc3RhdGljIGZsZXhjb3BfaWJpX3ZhbHVlIGZsZXhjb3BfcGNpX3JlYWRfaWJpX3JlZyAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9pYmlfcmVnaXN0ZXIgcikKK3N0YXRpYyBmbGV4Y29wX2liaV92YWx1ZSBmbGV4Y29wX3BjaV9yZWFkX2liaV9yZWcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9pYmlfcmVnaXN0ZXIgcikKIHsKIAlzdHJ1Y3QgZmxleGNvcF9wY2kgKmZjX3BjaSA9IGZjLT5idXNfc3BlY2lmaWM7CiAJZmxleGNvcF9pYmlfdmFsdWUgdjsKQEAgLTgyLDE5ICs4MSwyMCBAQAogCiAJaWYgKGxhc3RycmVnICE9IHIgfHwgbGFzdHJ2YWwgIT0gdi5yYXcpIHsKIAkJbGFzdHJyZWcgPSByOyBsYXN0cnZhbCA9IHYucmF3OwotCQlkZWJfcmVnKCJuZXcgcmQ6ICUzeDogJTA4eFxuIixyLHYucmF3KTsKKwkJZGViX3JlZygibmV3IHJkOiAlM3g6ICUwOHhcbiIsIHIsIHYucmF3KTsKIAl9CiAKIAlyZXR1cm4gdjsKIH0KIAotc3RhdGljIGludCBmbGV4Y29wX3BjaV93cml0ZV9pYmlfcmVnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfaWJpX3JlZ2lzdGVyIHIsIGZsZXhjb3BfaWJpX3ZhbHVlIHYpCitzdGF0aWMgaW50IGZsZXhjb3BfcGNpX3dyaXRlX2liaV9yZWcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9pYmlfcmVnaXN0ZXIgciwgZmxleGNvcF9pYmlfdmFsdWUgdikKIHsKIAlzdHJ1Y3QgZmxleGNvcF9wY2kgKmZjX3BjaSA9IGZjLT5idXNfc3BlY2lmaWM7CiAKIAlpZiAobGFzdHdyZWcgIT0gciB8fCBsYXN0d3ZhbCAhPSB2LnJhdykgewogCQlsYXN0d3JlZyA9IHI7IGxhc3R3dmFsID0gdi5yYXc7Ci0JCWRlYl9yZWcoIm5ldyB3cjogJTN4OiAlMDh4XG4iLHIsdi5yYXcpOworCQlkZWJfcmVnKCJuZXcgd3I6ICUzeDogJTA4eFxuIiwgciwgdi5yYXcpOwogCX0KIAogCXdyaXRlbCh2LnJhdywgZmNfcGNpLT5pb19tZW0gKyByKTsKQEAgLTExMywxNSArMTEzLDE2IEBACiAJCQlkZWJfY2hrKCJubyBJUlEgc2luY2UgdGhlIGxhc3QgY2hlY2tcbiIpOwogCQkJaWYgKGZjX3BjaS0+c3RyZWFtX3Byb2JsZW0rKyA9PSAzKSB7CiAJCQkJc3RydWN0IGR2Yl9kZW11eF9mZWVkICpmZWVkOworCQkJCWRlYl9pbmZvKCJmbGV4Y29wLXBjaTogc3RyZWFtIHByb2JsZW0sIHJlc2V0dGluZyBwaWQgZmlsdGVyXG4iKTsKIAogCQkJCXNwaW5fbG9ja19pcnEoJmZjLT5kZW11eC5sb2NrKTsKIAkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZlZWQsICZmYy0+ZGVtdXguZmVlZF9saXN0LAotCQkJCQlsaXN0X2hlYWQpIHsKKwkJCQkJCWxpc3RfaGVhZCkgewogCQkJCQlmbGV4Y29wX3BpZF9mZWVkX2NvbnRyb2woZmMsIGZlZWQsIDApOwogCQkJCX0KIAogCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZmVlZCwgJmZjLT5kZW11eC5mZWVkX2xpc3QsCi0JCQkJCWxpc3RfaGVhZCkgeworCQkJCQkJbGlzdF9oZWFkKSB7CiAJCQkJCWZsZXhjb3BfcGlkX2ZlZWRfY29udHJvbChmYywgZmVlZCwgMSk7CiAJCQkJfQogCQkJCXNwaW5fdW5sb2NrX2lycSgmZmMtPmRlbXV4LmxvY2spOwpAQCAtMTQ5LDExICsxNTAsMTAgQEAKIAlmbGV4Y29wX2liaV92YWx1ZSB2OwogCWlycXJldHVybl90IHJldCA9IElSUV9IQU5ETEVEOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZjX3BjaS0+aXJxX2xvY2ssZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZmY19wY2ktPmlycV9sb2NrLCBmbGFncyk7CisJdiA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIGlycV8yMGMpOwogCi0JdiA9IGZjLT5yZWFkX2liaV9yZWcoZmMsaXJxXzIwYyk7Ci0KLSAgIC8qIGVycm9ycyAqLworCS8qIGVycm9ycyAqLwogCWlmICh2LmlycV8yMGMuRGF0YV9yZWNlaXZlcl9lcnJvcikKIAkJZGViX2NoaygiZGF0YSByZWNlaXZlciBlcnJvclxuIik7CiAJaWYgKHYuaXJxXzIwYy5Db250aW51aXR5X2Vycm9yX2ZsYWcpCkBAIC0xNjQsMjQgKzE2NCwyOSBAQAogCQlkZWJfY2hrKCJUcmFuc3BvcnQgZXJyb3JcbiIpOwogCiAJaWYgKChmY19wY2ktPmNvdW50ICUgMTAwMCkgPT0gMCkKLQkJZGViX2NoaygiJWQgdmFsaWQgaXJxIHRvb2sgcGxhY2Ugc28gZmFyXG4iLGZjX3BjaS0+Y291bnQpOworCQlkZWJfY2hrKCIlZCB2YWxpZCBpcnEgdG9vayBwbGFjZSBzbyBmYXJcbiIsIGZjX3BjaS0+Y291bnQpOwogCiAJaWYgKHYuaXJxXzIwYy5ETUExX0lSUV9TdGF0dXMgPT0gMSkgewogCQlpZiAoZmNfcGNpLT5hY3RpdmVfZG1hMV9hZGRyID09IDApCi0JCQlmbGV4Y29wX3Bhc3NfZG14X3BhY2tldHMoZmNfcGNpLT5mY19kZXYsZmNfcGNpLT5kbWFbMF0uY3B1X2FkZHIwLGZjX3BjaS0+ZG1hWzBdLnNpemUgLyAxODgpOworCQkJZmxleGNvcF9wYXNzX2RteF9wYWNrZXRzKGZjX3BjaS0+ZmNfZGV2LAorCQkJCQlmY19wY2ktPmRtYVswXS5jcHVfYWRkcjAsCisJCQkJCWZjX3BjaS0+ZG1hWzBdLnNpemUgLyAxODgpOwogCQllbHNlCi0JCQlmbGV4Y29wX3Bhc3NfZG14X3BhY2tldHMoZmNfcGNpLT5mY19kZXYsZmNfcGNpLT5kbWFbMF0uY3B1X2FkZHIxLGZjX3BjaS0+ZG1hWzBdLnNpemUgLyAxODgpOworCQkJZmxleGNvcF9wYXNzX2RteF9wYWNrZXRzKGZjX3BjaS0+ZmNfZGV2LAorCQkJCQlmY19wY2ktPmRtYVswXS5jcHVfYWRkcjEsCisJCQkJCWZjX3BjaS0+ZG1hWzBdLnNpemUgLyAxODgpOwogCiAJCWRlYl9pcnEoInBhZ2UgY2hhbmdlIHRvIHBhZ2U6ICVkXG4iLCFmY19wY2ktPmFjdGl2ZV9kbWExX2FkZHIpOwogCQlmY19wY2ktPmFjdGl2ZV9kbWExX2FkZHIgPSAhZmNfcGNpLT5hY3RpdmVfZG1hMV9hZGRyOwotCX0gZWxzZSBpZiAodi5pcnFfMjBjLkRNQTFfVGltZXJfU3RhdHVzID09IDEpIHsKIAkJLyogZm9yIHRoZSB0aW1lciBJUlEgd2Ugb25seSBjYW4gdXNlIGJ1ZmZlciBkbXggZmVlZGluZywgYmVjYXVzZSB3ZSBkb24ndCBoYXZlCiAJCSAqIGNvbXBsZXRlIFRTIHBhY2tldHMgd2hlbiByZWFkaW5nIGZyb20gdGhlIERNQSBtZW1vcnkgKi8KKwl9IGVsc2UgaWYgKHYuaXJxXzIwYy5ETUExX1RpbWVyX1N0YXR1cyA9PSAxKSB7CiAJCWRtYV9hZGRyX3QgY3VyX2FkZHIgPQogCQkJZmMtPnJlYWRfaWJpX3JlZyhmYyxkbWExXzAwOCkuZG1hXzB4OC5kbWFfY3VyX2FkZHIgPDwgMjsKIAkJdTMyIGN1cl9wb3MgPSBjdXJfYWRkciAtIGZjX3BjaS0+ZG1hWzBdLmRtYV9hZGRyMDsKIAotCQlkZWJfaXJxKCIldSBpcnE6ICUwOHggY3VyX2FkZHI6ICVsbHg6IGN1cl9wb3M6ICUwOHgsIGxhc3RfY3VyX3BvczogJTA4eCAiLAorCQlkZWJfaXJxKCIldSBpcnE6ICUwOHggY3VyX2FkZHI6ICVsbHg6IGN1cl9wb3M6ICUwOHgsICIKKwkJCSJsYXN0X2N1cl9wb3M6ICUwOHggIiwKIAkJCQlqaWZmaWVzX3RvX3VzZWNzKGppZmZpZXMgLSBmY19wY2ktPmxhc3RfaXJxKSwKIAkJCQl2LnJhdywgKHVuc2lnbmVkIGxvbmcgbG9uZyljdXJfYWRkciwgY3VyX3BvcywKIAkJCQlmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zKTsKQEAgLTE5MSwzMCArMTk2LDM2IEBACiAJCSAqIHBhc3MgdGhlIGRhdGEgZnJvbSBsYXN0X2N1cl9wb3MgdG8gdGhlIGJ1ZmZlciBlbmQgdG8gdGhlIGRlbXV4CiAJCSAqLwogCQlpZiAoY3VyX3BvcyA8IGZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MpIHsKLQkJCWRlYl9pcnEoIiBlbmQgd2FzIHJlYWNoZWQ6IHBhc3NpbmcgJWQgYnl0ZXMgIiwoZmNfcGNpLT5kbWFbMF0uc2l6ZSoyIC0gMSkgLSBmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zKTsKKwkJCWRlYl9pcnEoIiBlbmQgd2FzIHJlYWNoZWQ6IHBhc3NpbmcgJWQgYnl0ZXMgIiwKKwkJCQkoZmNfcGNpLT5kbWFbMF0uc2l6ZSoyIC0gMSkgLQorCQkJCWZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MpOwogCQkJZmxleGNvcF9wYXNzX2RteF9kYXRhKGZjX3BjaS0+ZmNfZGV2LAotCQkJCQlmY19wY2ktPmRtYVswXS5jcHVfYWRkcjAgKyBmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zLAotCQkJCQkoZmNfcGNpLT5kbWFbMF0uc2l6ZSoyKSAtIGZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MpOworCQkJCWZjX3BjaS0+ZG1hWzBdLmNwdV9hZGRyMCArCisJCQkJCWZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MsCisJCQkJKGZjX3BjaS0+ZG1hWzBdLnNpemUqMikgLQorCQkJCQlmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zKTsKIAkJCWZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MgPSAwOwogCQl9CiAKIAkJaWYgKGN1cl9wb3MgPiBmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zKSB7Ci0JCQlkZWJfaXJxKCIgcGFzc2luZyAlZCBieXRlcyAiLGN1cl9wb3MgLSBmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zKTsKKwkJCWRlYl9pcnEoIiBwYXNzaW5nICVkIGJ5dGVzICIsCisJCQkJY3VyX3BvcyAtIGZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MpOwogCQkJZmxleGNvcF9wYXNzX2RteF9kYXRhKGZjX3BjaS0+ZmNfZGV2LAotCQkJCQlmY19wY2ktPmRtYVswXS5jcHVfYWRkcjAgKyBmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zLAotCQkJCQljdXJfcG9zIC0gZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3Bvcyk7CisJCQkJZmNfcGNpLT5kbWFbMF0uY3B1X2FkZHIwICsKKwkJCQkJZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3BvcywKKwkJCQljdXJfcG9zIC0gZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3Bvcyk7CiAJCX0KIAkJZGViX2lycSgiXG4iKTsKIAogCQlmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zID0gY3VyX3BvczsKIAkJZmNfcGNpLT5jb3VudCsrOwogCX0gZWxzZSB7Ci0JCWRlYl9pcnEoImlzciBmb3IgZmxleGNvcCBjYWxsZWQsIGFwcGFyZW50bHkgd2l0aG91dCByZWFzb24gKCUwOHgpXG4iLHYucmF3KTsKKwkJZGViX2lycSgiaXNyIGZvciBmbGV4Y29wIGNhbGxlZCwgIgorCQkJImFwcGFyZW50bHkgd2l0aG91dCByZWFzb24gKCUwOHgpXG4iLCB2LnJhdyk7CiAJCXJldCA9IElSUV9OT05FOwogCX0KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZjX3BjaS0+aXJxX2xvY2ssZmxhZ3MpOwotCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmNfcGNpLT5pcnFfbG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIyMiw1MiArMjMzLDQ4IEBACiB7CiAJc3RydWN0IGZsZXhjb3BfcGNpICpmY19wY2kgPSBmYy0+YnVzX3NwZWNpZmljOwogCWlmIChvbm9mZikgewotCQlmbGV4Y29wX2RtYV9jb25maWcoZmMsJmZjX3BjaS0+ZG1hWzBdLEZDX0RNQV8xKTsKLQkJZmxleGNvcF9kbWFfY29uZmlnKGZjLCZmY19wY2ktPmRtYVsxXSxGQ19ETUFfMik7Ci0KLQkJZmxleGNvcF9kbWFfY29uZmlnX3RpbWVyKGZjLEZDX0RNQV8xLDApOwotCi0JCWZsZXhjb3BfZG1hX3hmZXJfY29udHJvbChmYyxGQ19ETUFfMSxGQ19ETUFfU1VCQUREUl8wIHwgRkNfRE1BX1NVQkFERFJfMSwxKTsKKwkJZmxleGNvcF9kbWFfY29uZmlnKGZjLCAmZmNfcGNpLT5kbWFbMF0sIEZDX0RNQV8xKTsKKwkJZmxleGNvcF9kbWFfY29uZmlnKGZjLCAmZmNfcGNpLT5kbWFbMV0sIEZDX0RNQV8yKTsKKwkJZmxleGNvcF9kbWFfY29uZmlnX3RpbWVyKGZjLCBGQ19ETUFfMSwgMCk7CisJCWZsZXhjb3BfZG1hX3hmZXJfY29udHJvbChmYywgRkNfRE1BXzEsCisJCQkJRkNfRE1BX1NVQkFERFJfMCB8IEZDX0RNQV9TVUJBRERSXzEsIDEpOwogCQlkZWJfaXJxKCJETUEgeGZlciBlbmFibGVkXG4iKTsKIAogCQlmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zID0gMDsKLQkJZmxleGNvcF9kbWFfY29udHJvbF90aW1lcl9pcnEoZmMsRkNfRE1BXzEsMSk7CisJCWZsZXhjb3BfZG1hX2NvbnRyb2xfdGltZXJfaXJxKGZjLCBGQ19ETUFfMSwgMSk7CiAJCWRlYl9pcnEoIklSUSBlbmFibGVkXG4iKTsKLQogCQlmY19wY2ktPmNvdW50X3ByZXYgPSBmY19wY2ktPmNvdW50OwotCi0vLwkJZmNfcGNpLT5hY3RpdmVfZG1hMV9hZGRyID0gMDsKLS8vCQlmbGV4Y29wX2RtYV9jb250cm9sX3NpemVfaXJxKGZjLEZDX0RNQV8xLDEpOwotCiAJfSBlbHNlIHsKLQkJZmxleGNvcF9kbWFfY29udHJvbF90aW1lcl9pcnEoZmMsRkNfRE1BXzEsMCk7CisJCWZsZXhjb3BfZG1hX2NvbnRyb2xfdGltZXJfaXJxKGZjLCBGQ19ETUFfMSwgMCk7CiAJCWRlYl9pcnEoIklSUSBkaXNhYmxlZFxuIik7CiAKLS8vCQlmbGV4Y29wX2RtYV9jb250cm9sX3NpemVfaXJxKGZjLEZDX0RNQV8xLDApOwotCi0JCWZsZXhjb3BfZG1hX3hmZXJfY29udHJvbChmYyxGQ19ETUFfMSxGQ19ETUFfU1VCQUREUl8wIHwgRkNfRE1BX1NVQkFERFJfMSwwKTsKKwkJZmxleGNvcF9kbWFfeGZlcl9jb250cm9sKGZjLCBGQ19ETUFfMSwKKwkJCSBGQ19ETUFfU1VCQUREUl8wIHwgRkNfRE1BX1NVQkFERFJfMSwgMCk7CiAJCWRlYl9pcnEoIkRNQSB4ZmVyIGRpc2FibGVkXG4iKTsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBmbGV4Y29wX3BjaV9kbWFfaW5pdChzdHJ1Y3QgZmxleGNvcF9wY2kgKmZjX3BjaSkKIHsKIAlpbnQgcmV0OwotCWlmICgocmV0ID0gZmxleGNvcF9kbWFfYWxsb2NhdGUoZmNfcGNpLT5wZGV2LCZmY19wY2ktPmRtYVswXSxGQ19ERUZBVUxUX0RNQTFfQlVGU0laRSkpICE9IDApCisJcmV0ID0gZmxleGNvcF9kbWFfYWxsb2NhdGUoZmNfcGNpLT5wZGV2LCAmZmNfcGNpLT5kbWFbMF0sCisJCQlGQ19ERUZBVUxUX0RNQTFfQlVGU0laRSk7CisJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKChyZXQgPSBmbGV4Y29wX2RtYV9hbGxvY2F0ZShmY19wY2ktPnBkZXYsJmZjX3BjaS0+ZG1hWzFdLEZDX0RFRkFVTFRfRE1BMl9CVUZTSVpFKSkgIT0gMCkgeworCXJldCA9IGZsZXhjb3BfZG1hX2FsbG9jYXRlKGZjX3BjaS0+cGRldiwgJmZjX3BjaS0+ZG1hWzFdLAorCQkJRkNfREVGQVVMVF9ETUEyX0JVRlNJWkUpOworCWlmIChyZXQgIT0gMCkgewogCQlmbGV4Y29wX2RtYV9mcmVlKCZmY19wY2ktPmRtYVswXSk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JZmxleGNvcF9zcmFtX3NldF9kZXN0KGZjX3BjaS0+ZmNfZGV2LEZDX1NSQU1fREVTVF9NRURJQSB8IEZDX1NSQU1fREVTVF9ORVQsIEZDX1NSQU1fREVTVF9UQVJHRVRfRE1BMSk7Ci0JZmxleGNvcF9zcmFtX3NldF9kZXN0KGZjX3BjaS0+ZmNfZGV2LEZDX1NSQU1fREVTVF9DQU8gICB8IEZDX1NSQU1fREVTVF9DQUksIEZDX1NSQU1fREVTVF9UQVJHRVRfRE1BMik7Ci0KKwlmbGV4Y29wX3NyYW1fc2V0X2Rlc3QoZmNfcGNpLT5mY19kZXYsIEZDX1NSQU1fREVTVF9NRURJQSB8CisJCQlGQ19TUkFNX0RFU1RfTkVULCBGQ19TUkFNX0RFU1RfVEFSR0VUX0RNQTEpOworCWZsZXhjb3Bfc3JhbV9zZXRfZGVzdChmY19wY2ktPmZjX2RldiwgRkNfU1JBTV9ERVNUX0NBTyB8CisJCQlGQ19TUkFNX0RFU1RfQ0FJLCBGQ19TUkFNX0RFU1RfVEFSR0VUX0RNQTIpOwogCWZjX3BjaS0+aW5pdF9zdGF0ZSB8PSBGQ19QQ0lfRE1BX0lOSVQ7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yOTAsMTIgKzI5Nyw4IEBACiAKIAlpZiAoKHJldCA9IHBjaV9lbmFibGVfZGV2aWNlKGZjX3BjaS0+cGRldikpICE9IDApCiAJCXJldHVybiByZXQ7Ci0KIAlwY2lfc2V0X21hc3RlcihmY19wY2ktPnBkZXYpOwogCi0JLyogZW5hYmxlIGludGVycnVwdHMgKi8KLQkvLyBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4NmMsIDB4ODAwMCk7Ci0KIAlpZiAoKHJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZmNfcGNpLT5wZGV2LCBEUklWRVJfTkFNRSkpICE9IDApCiAJCWdvdG8gZXJyX3BjaV9kaXNhYmxlX2RldmljZTsKIApAQCAtMzM4LDggKzM0MSw4IEBACiAJZmNfcGNpLT5pbml0X3N0YXRlICY9IH5GQ19QQ0lfSU5JVDsKIH0KIAotCi1zdGF0aWMgaW50IGZsZXhjb3BfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQorc3RhdGljIGludCBmbGV4Y29wX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjOwogCXN0cnVjdCBmbGV4Y29wX3BjaSAqZmNfcGNpOwpAQCAtMzUwLDcgKzM1Myw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotLyogZ2VuZXJhbCBmbGV4Y29wIGluaXQgKi8KKwkvKiBnZW5lcmFsIGZsZXhjb3AgaW5pdCAqLwogCWZjX3BjaSA9IGZjLT5idXNfc3BlY2lmaWM7CiAJZmNfcGNpLT5mY19kZXYgPSBmYzsKIApAQCAtMzU4LDcgKzM2MSw2IEBACiAJZmMtPndyaXRlX2liaV9yZWcgPSBmbGV4Y29wX3BjaV93cml0ZV9pYmlfcmVnOwogCWZjLT5pMmNfcmVxdWVzdCA9IGZsZXhjb3BfaTJjX3JlcXVlc3Q7CiAJZmMtPmdldF9tYWNfYWRkciA9IGZsZXhjb3BfZWVwcm9tX2NoZWNrX21hY19hZGRyOwotCiAJZmMtPnN0cmVhbV9jb250cm9sID0gZmxleGNvcF9wY2lfc3RyZWFtX2NvbnRyb2w7CiAKIAlpZiAoZW5hYmxlX3BpZF9maWx0ZXJpbmcpCkBAIC0zNjgsMjkgKzM3MCwyOSBAQAogCiAJZmMtPnBpZF9maWx0ZXJpbmcgPSBlbmFibGVfcGlkX2ZpbHRlcmluZzsKIAlmYy0+YnVzX3R5cGUgPSBGQ19QQ0k7Ci0KIAlmYy0+ZGV2ID0gJnBkZXYtPmRldjsKIAlmYy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAotLyogYnVzIHNwZWNpZmljIHBhcnQgKi8KKwkvKiBidXMgc3BlY2lmaWMgcGFydCAqLwogCWZjX3BjaS0+cGRldiA9IHBkZXY7CiAJaWYgKChyZXQgPSBmbGV4Y29wX3BjaV9pbml0KGZjX3BjaSkpICE9IDApCiAJCWdvdG8gZXJyX2tmcmVlOwogCi0vKiBpbml0IGZsZXhjb3AgKi8KKwkvKiBpbml0IGZsZXhjb3AgKi8KIAlpZiAoKHJldCA9IGZsZXhjb3BfZGV2aWNlX2luaXRpYWxpemUoZmMpKSAhPSAwKQogCQlnb3RvIGVycl9wY2lfZXhpdDsKIAotLyogaW5pdCBkbWEgKi8KKwkvKiBpbml0IGRtYSAqLwogCWlmICgocmV0ID0gZmxleGNvcF9wY2lfZG1hX2luaXQoZmNfcGNpKSkgIT0gMCkKIAkJZ290byBlcnJfZmNfZXhpdDsKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZmY19wY2ktPmlycV9jaGVja193b3JrLCBmbGV4Y29wX3BjaV9pcnFfY2hlY2tfd29yayk7CiAKLQkJaWYgKGlycV9jaGtfaW50diA+IDApCi0JCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmZjX3BjaS0+aXJxX2NoZWNrX3dvcmssCi0JCW1zZWNzX3RvX2ppZmZpZXMoaXJxX2Noa19pbnR2IDwgMTAwID8gMTAwIDogaXJxX2Noa19pbnR2KSk7Ci0KKwlpZiAoaXJxX2Noa19pbnR2ID4gMCkKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZmY19wY2ktPmlycV9jaGVja193b3JrLAorCQkJCW1zZWNzX3RvX2ppZmZpZXMoaXJxX2Noa19pbnR2IDwgMTAwID8KKwkJCQkJMTAwIDoKKwkJCQkJaXJxX2Noa19pbnR2KSk7CiAJcmV0dXJuIHJldDsKIAogZXJyX2ZjX2V4aXQ6CkBAIC00MjAsNyArNDIyLDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGZsZXhjb3BfcGNpX3RibFtdID0gewogCXsgUENJX0RFVklDRSgweDEzZDAsIDB4MjEwMykgfSwKLS8qCXsgUENJX0RFVklDRSgweDEzZDAsIDB4MjIwMCkgfSwgPyAqLwogCXsgfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1yZWcuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1yZWcuaAppbmRleCA3NTk5ZmNjLi5kYzQ1MjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcmVnLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXJlZy5oCkBAIC0xLDE0ICsxLDExIEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGludXggZHJpdmVyIHRoZSBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKLSAqCisgKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQogICogZmxleGNvcC1yZWcuaCAtIHJlZ2lzdGVyIGFic3RyYWN0aW9uIGZvciBGbGV4Q29wSUksIEZsZXhDb3BJSWIgYW5kIEZsZXhDb3BJSUkKLSAqCi0gKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisgKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24KICAqLwogI2lmbmRlZiBfX0ZMRVhDT1BfUkVHX0hfXwogI2RlZmluZSBfX0ZMRVhDT1BfUkVHX0hfXwogCi0KIHR5cGVkZWYgZW51bSB7CiAJRkxFWENPUF9VTksgPSAwLAogCUZMRVhDT1BfSUksCkBAIC0xOCwxMyArMTUsMTMgQEAKIAogdHlwZWRlZiBlbnVtIHsKIAlGQ19VTksgPSAwLAotCUZDX0FJUl9EVkIsCisJRkNfQ0FCTEUsCisJRkNfQUlSX0RWQlQsCiAJRkNfQUlSX0FUU0MxLAogCUZDX0FJUl9BVFNDMiwKLQlGQ19TS1ksCi0JRkNfU0tZX09MRCwKLQlGQ19DQUJMRSwKIAlGQ19BSVJfQVRTQzMsCisJRkNfU0tZX1JFVjIzLAorCUZDX1NLWV9SRVYyNiwKIAlGQ19TS1lfUkVWMjcsCiAJRkNfU0tZX1JFVjI4LAogfSBmbGV4Y29wX2RldmljZV90eXBlX3Q7CkBAIC0zNiwxMiArMzMsMTIgQEAKIAogLyogRmxleENvcCBJQkkgUmVnaXN0ZXJzICovCiAjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCi0JI2luY2x1ZGUgImZsZXhjb3BfaWJpX3ZhbHVlX2xlLmgiCisjaW5jbHVkZSAiZmxleGNvcF9pYmlfdmFsdWVfbGUuaCIKICNlbHNlCiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0JI2luY2x1ZGUgImZsZXhjb3BfaWJpX3ZhbHVlX2JlLmgiCisjaW5jbHVkZSAiZmxleGNvcF9pYmlfdmFsdWVfYmUuaCIKICNlbHNlCi0JI2Vycm9yIG5vIGVuZGlhbiBkZWZpbmVkCisjZXJyb3Igbm8gZW5kaWFuIGRlZmluZWQKICNlbmRpZgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1zcmFtLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3Atc3JhbS5jCmluZGV4IGNkYTY5NTIuLmYyMTk5ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1zcmFtLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXNyYW0uYwpAQCAtMSw0NSArMSw0MyBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpbnV4IGRyaXZlciB0aGUgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCi0gKgotICogZmxleGNvcC1zcmFtLmMgLSBmdW5jdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHRoZSBTUkFNLgotICoKLSAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4KKyAqIExpbnV4IGRyaXZlciBmb3IgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCisgKiBmbGV4Y29wLXNyYW0uYyAtIGZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgdGhlIFNSQU0KKyAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbgogICovCiAjaW5jbHVkZSAiZmxleGNvcC5oIgogCi1zdGF0aWMgdm9pZCBmbGV4Y29wX3NyYW1fc2V0X2NoaXAgKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3Bfc3JhbV90eXBlX3QgdHlwZSkKK3N0YXRpYyB2b2lkIGZsZXhjb3Bfc3JhbV9zZXRfY2hpcChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX3NyYW1fdHlwZV90IHR5cGUpCiB7Ci0JZmxleGNvcF9zZXRfaWJpX3ZhbHVlKHdhbl9jdHJsX3JlZ183MWMsc3JhbV9jaGlwLHR5cGUpOworCWZsZXhjb3Bfc2V0X2liaV92YWx1ZSh3YW5fY3RybF9yZWdfNzFjLCBzcmFtX2NoaXAsIHR5cGUpOwogfQogCiBpbnQgZmxleGNvcF9zcmFtX2luaXQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYykKIHsKIAlzd2l0Y2ggKGZjLT5yZXYpIHsKLQkJY2FzZSBGTEVYQ09QX0lJOgotCQljYXNlIEZMRVhDT1BfSUlCOgotCQkJZmxleGNvcF9zcmFtX3NldF9jaGlwKGZjLEZDX1NSQU1fMV8zMktCKTsKLQkJCWJyZWFrOwotCQljYXNlIEZMRVhDT1BfSUlJOgotCQkJZmxleGNvcF9zcmFtX3NldF9jaGlwKGZjLEZDX1NSQU1fMV80OEtCKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBGTEVYQ09QX0lJOgorCWNhc2UgRkxFWENPUF9JSUI6CisJCWZsZXhjb3Bfc3JhbV9zZXRfY2hpcChmYywgRkNfU1JBTV8xXzMyS0IpOworCQlicmVhazsKKwljYXNlIEZMRVhDT1BfSUlJOgorCQlmbGV4Y29wX3NyYW1fc2V0X2NoaXAoZmMsIEZDX1NSQU1fMV80OEtCKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwogfQogCi1pbnQgZmxleGNvcF9zcmFtX3NldF9kZXN0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3Bfc3JhbV9kZXN0X3QgZGVzdCwgZmxleGNvcF9zcmFtX2Rlc3RfdGFyZ2V0X3QgdGFyZ2V0KQoraW50IGZsZXhjb3Bfc3JhbV9zZXRfZGVzdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX3NyYW1fZGVzdF90IGRlc3QsCisJCSBmbGV4Y29wX3NyYW1fZGVzdF90YXJnZXRfdCB0YXJnZXQpCiB7CiAJZmxleGNvcF9pYmlfdmFsdWUgdjsKLQotCXYgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLHNyYW1fZGVzdF9yZWdfNzE0KTsKKwl2ID0gZmMtPnJlYWRfaWJpX3JlZyhmYywgc3JhbV9kZXN0X3JlZ183MTQpOwogCiAJaWYgKGZjLT5yZXYgIT0gRkxFWENPUF9JSUkgJiYgdGFyZ2V0ID09IEZDX1NSQU1fREVTVF9UQVJHRVRfRkMzX0NBKSB7CiAJCWVycigiU1JBTSBkZXN0aW5hdGlvbiB0YXJnZXQgdG8gYXZhaWxhYmxlIG9uIEZsZXhDb3BJSShiKVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQotCWRlYl9zcmFtKCJzcmFtIGRlc3Q6ICV4IHRhcmdldDogJXhcbiIsZGVzdCwgdGFyZ2V0KTsKKwlkZWJfc3JhbSgic3JhbSBkZXN0OiAleCB0YXJnZXQ6ICV4XG4iLCBkZXN0LCB0YXJnZXQpOwogCiAJaWYgKGRlc3QgJiBGQ19TUkFNX0RFU1RfTkVUKQogCQl2LnNyYW1fZGVzdF9yZWdfNzE0Lk5FVF9EZXN0ID0gdGFyZ2V0OwpAQCAtMTU0LDE0ICsxNTIsMTIgQEAKIAkJZWxzZQogCQkJYmFuayA9IDB4MTAwMDAwMDA7CiAJfQotCiAJZmxleF9zcmFtX3dyaXRlKGFkYXB0ZXIsIGJhbmssIGFkZHIgJiAweDdmZmYsIGJ1ZiwgbGVuKTsKIH0KIAogc3RhdGljIHZvaWQgc3JhbV9yZWFkX2NodW5rKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTggKmJ1ZiwgdTE2IGxlbikKIHsKIAl1MzIgYmFuazsKLQogCWJhbmsgPSAwOwogCiAJaWYgKGFkYXB0ZXItPmR3X3NyYW1fdHlwZSA9PSAweDIwMDAwKSB7CkBAIC0xNzQsMjYgKzE3MCwyMiBAQAogCQllbHNlCiAJCQliYW5rID0gMHgxMDAwMDAwMDsKIAl9Ci0KIAlmbGV4X3NyYW1fcmVhZChhZGFwdGVyLCBiYW5rLCBhZGRyICYgMHg3ZmZmLCBidWYsIGxlbik7CiB9CiAKIHN0YXRpYyB2b2lkIHNyYW1fcmVhZChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIHU4ICpidWYsIHUzMiBsZW4pCiB7CiAJdTMyIGxlbmd0aDsKLQogCXdoaWxlIChsZW4gIT0gMCkgewogCQlsZW5ndGggPSBsZW47Ci0KLQkJLy8gY2hlY2sgaWYgdGhlIGFkZHJlc3MgcmFuZ2UgYmVsb25ncyB0byB0aGUgc2FtZQotCQkvLyAzMksgbWVtb3J5IGNoaXAuIElmIG5vdCwgdGhlIGRhdGEgaXMgcmVhZCBmcm9tCi0JCS8vIG9uZSBjaGlwIGF0IGEgdGltZS4KKwkJLyogY2hlY2sgaWYgdGhlIGFkZHJlc3MgcmFuZ2UgYmVsb25ncyB0byB0aGUgc2FtZQorCQkgKiAzMksgbWVtb3J5IGNoaXAuIElmIG5vdCwgdGhlIGRhdGEgaXMgcmVhZAorCQkgKiBmcm9tIG9uZSBjaGlwIGF0IGEgdGltZSAqLwogCQlpZiAoKGFkZHIgPj4gMHgwZikgIT0gKChhZGRyICsgbGVuIC0gMSkgPj4gMHgwZikpIHsKIAkJCWxlbmd0aCA9ICgoKGFkZHIgPj4gMHgwZikgKyAxKSA8PCAweDBmKSAtIGFkZHI7CiAJCX0KIAogCQlzcmFtX3JlYWRfY2h1bmsoYWRhcHRlciwgYWRkciwgYnVmLCBsZW5ndGgpOwotCiAJCWFkZHIgPSBhZGRyICsgbGVuZ3RoOwogCQlidWYgPSBidWYgKyBsZW5ndGg7CiAJCWxlbiA9IGxlbiAtIGxlbmd0aDsKQEAgLTIwMywxOSArMTk1LDE3IEBACiBzdGF0aWMgdm9pZCBzcmFtX3dyaXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTggKmJ1ZiwgdTMyIGxlbikKIHsKIAl1MzIgbGVuZ3RoOwotCiAJd2hpbGUgKGxlbiAhPSAwKSB7CiAJCWxlbmd0aCA9IGxlbjsKIAotCQkvLyBjaGVjayBpZiB0aGUgYWRkcmVzcyByYW5nZSBiZWxvbmdzIHRvIHRoZSBzYW1lCi0JCS8vIDMySyBtZW1vcnkgY2hpcC4gSWYgbm90LCB0aGUgZGF0YSBpcyB3cml0dGVuIHRvCi0JCS8vIG9uZSBjaGlwIGF0IGEgdGltZS4KKwkJLyogY2hlY2sgaWYgdGhlIGFkZHJlc3MgcmFuZ2UgYmVsb25ncyB0byB0aGUgc2FtZQorCQkgKiAzMksgbWVtb3J5IGNoaXAuIElmIG5vdCwgdGhlIGRhdGEgaXMKKwkJICogd3JpdHRlbiB0byBvbmUgY2hpcCBhdCBhIHRpbWUgKi8KIAkJaWYgKChhZGRyID4+IDB4MGYpICE9ICgoYWRkciArIGxlbiAtIDEpID4+IDB4MGYpKSB7CiAJCQlsZW5ndGggPSAoKChhZGRyID4+IDB4MGYpICsgMSkgPDwgMHgwZikgLSBhZGRyOwogCQl9CiAKIAkJc3JhbV93cml0ZV9jaHVuayhhZGFwdGVyLCBhZGRyLCBidWYsIGxlbmd0aCk7Ci0KIAkJYWRkciA9IGFkZHIgKyBsZW5ndGg7CiAJCWJ1ZiA9IGJ1ZiArIGxlbmd0aDsKIAkJbGVuID0gbGVuIC0gbGVuZ3RoOwpAQCAtMjI0LDM5ICsyMTQsMjkgQEAKIAogc3RhdGljIHZvaWQgc3JhbV9zZXRfc2l6ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIG1hc2spCiB7Ci0Jd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4NzFjLCAobWFzayB8ICh+MHgzMDAwMCAmIHJlYWRfcmVnX2R3KGFkYXB0ZXIsIDB4NzFjKSkpKTsKKwl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHg3MWMsCisJCQkobWFzayB8ICh+MHgzMDAwMCAmIHJlYWRfcmVnX2R3KGFkYXB0ZXIsIDB4NzFjKSkpKTsKIH0KIAogc3RhdGljIHZvaWQgc3JhbV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewogCXUzMiB0bXA7Ci0KIAl0bXAgPSByZWFkX3JlZ19kdyhhZGFwdGVyLCAweDcxYyk7Ci0KIAl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHg3MWMsIDEpOwogCiAJaWYgKHJlYWRfcmVnX2R3KGFkYXB0ZXIsIDB4NzFjKSAhPSAwKSB7CiAJCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDcxYywgdG1wKTsKLQogCQlhZGFwdGVyLT5kd19zcmFtX3R5cGUgPSB0bXAgJiAweDMwMDAwOwotCiAJCWRkcHJpbnRrKCIlczogZHdfc3JhbV90eXBlID0gJXhcbiIsIF9fZnVuY19fLCBhZGFwdGVyLT5kd19zcmFtX3R5cGUpOwotCiAJfSBlbHNlIHsKLQogCQlhZGFwdGVyLT5kd19zcmFtX3R5cGUgPSAweDEwMDAwOwotCiAJCWRkcHJpbnRrKCIlczogZHdfc3JhbV90eXBlID0gJXhcbiIsIF9fZnVuY19fLCBhZGFwdGVyLT5kd19zcmFtX3R5cGUpOwogCX0KLQotCS8qIHJldHVybiB2YWx1ZSBpcyBuZXZlciB1c2VkPyAqLwotLyoJcmV0dXJuIGFkYXB0ZXItPmR3X3NyYW1fdHlwZTsgKi8KIH0KIAogc3RhdGljIGludCBzcmFtX3Rlc3RfbG9jYXRpb24oc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBtYXNrLCB1MzIgYWRkcikKIHsKIAl1OCB0bXAxLCB0bXAyOwotCiAJZHByaW50aygiJXM6IG1hc2sgPSAleCwgYWRkciA9ICV4XG4iLCBfX2Z1bmNfXywgbWFzaywgYWRkcik7CiAKIAlzcmFtX3NldF9zaXplKGFkYXB0ZXIsIG1hc2spOwpAQCAtMjY5LDcgKzI0OSw2IEBACiAJc3JhbV93cml0ZShhZGFwdGVyLCBhZGRyICsgNCwgJnRtcDEsIDEpOwogCiAJdG1wMiA9IDA7Ci0KIAltZGVsYXkoMjApOwogCiAJc3JhbV9yZWFkKGFkYXB0ZXIsIGFkZHIsICZ0bXAyLCAxKTsKQEAgLTI4Nyw3ICsyNjYsNiBAQAogCXNyYW1fd3JpdGUoYWRhcHRlciwgYWRkciArIDQsICZ0bXAxLCAxKTsKIAogCXRtcDIgPSAwOwotCiAJbWRlbGF5KDIwKTsKIAogCXNyYW1fcmVhZChhZGFwdGVyLCBhZGRyLCAmdG1wMiwgMSk7CkBAIC0yOTcsMjYgKzI3NSwyNCBAQAogCiAJaWYgKHRtcDIgIT0gMHg1YSkKIAkJcmV0dXJuIDA7Ci0KIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHUzMiBzcmFtX2xlbmd0aChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpZiAoYWRhcHRlci0+ZHdfc3JhbV90eXBlID09IDB4MTAwMDApCi0JCXJldHVybiAzMjc2ODsJLy8gIDMySworCQlyZXR1cm4gMzI3Njg7IC8qIDMySyAqLwogCWlmIChhZGFwdGVyLT5kd19zcmFtX3R5cGUgPT0gMHgwMDAwMCkKLQkJcmV0dXJuIDY1NTM2OwkvLyAgNjRLCisJCXJldHVybiA2NTUzNjsgLyogNjRLICovCiAJaWYgKGFkYXB0ZXItPmR3X3NyYW1fdHlwZSA9PSAweDIwMDAwKQotCQlyZXR1cm4gMTMxMDcyOwkvLyAxMjhLCi0KLQlyZXR1cm4gMzI3Njg7CQkvLyAzMksKKwkJcmV0dXJuIDEzMTA3MjsgLyogMTI4SyAqLworCXJldHVybiAzMjc2ODsgLyogMzJLICovCiB9CiAKIC8qIEZsZXhjb3BJSSBjYW4gd29yayB3aXRoIDMySywgNjRLIG9yIDEyOEsgb2YgZXh0ZXJuYWwgU1JBTSBtZW1vcnkuCi0gICAgLSBmb3IgMTI4SyB0aGVyZSBhcmUgNHgzMksgY2hpcHMgYXQgYmFuayAwLDEsMiwzLgotICAgIC0gZm9yICA2NEsgdGhlcmUgYXJlIDJ4MzJLIGNoaXBzIGF0IGJhbmsgMSwyLgotICAgIC0gZm9yICAzMksgdGhlcmUgaXMgb25lIDMySyBjaGlwIGF0IGJhbmsgMC4KKyAgIC0gZm9yIDEyOEsgdGhlcmUgYXJlIDR4MzJLIGNoaXBzIGF0IGJhbmsgMCwxLDIsMy4KKyAgIC0gZm9yICA2NEsgdGhlcmUgYXJlIDJ4MzJLIGNoaXBzIGF0IGJhbmsgMSwyLgorICAgLSBmb3IgIDMySyB0aGVyZSBpcyBvbmUgMzJLIGNoaXAgYXQgYmFuayAwLgogCiAgICBGbGV4Q29wIHdvcmtzIG9ubHkgd2l0aCBvbmUgYmFuayBhdCBhIHRpbWUuIFRoZSBiYW5rIGlzIHNlbGVjdGVkCiAgICBieSBiaXRzIDI4LTI5IG9mIHRoZSAweDcwMCByZWdpc3Rlci4KQEAgLTMyNCwyNCArMzAwLDE4IEBACiAgICBiYW5rIDAgY292ZXJzIGFkZHJlc3NlcyAweDAwMDAwLTB4MDdmZmYKICAgIGJhbmsgMSBjb3ZlcnMgYWRkcmVzc2VzIDB4MDgwMDAtMHgwZmZmZgogICAgYmFuayAyIGNvdmVycyBhZGRyZXNzZXMgMHgxMDAwMC0weDE3ZmZmCi0gICBiYW5rIDMgY292ZXJzIGFkZHJlc3NlcyAweDE4MDAwLTB4MWZmZmYKLSovCisgICBiYW5rIDMgY292ZXJzIGFkZHJlc3NlcyAweDE4MDAwLTB4MWZmZmYgKi8KIAogc3RhdGljIGludCBmbGV4Y29wX3NyYW1fZGV0ZWN0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpCiB7Ci0JZmxleGNvcF9pYmlfdmFsdWUgcjIwOCxyNzFjXzAsdnI3MWNfMTsKLQorCWZsZXhjb3BfaWJpX3ZhbHVlIHIyMDgsIHI3MWNfMCwgdnI3MWNfMTsKIAlyMjA4ID0gZmMtPnJlYWRfaWJpX3JlZyhmYywgY3RybF8yMDgpOwogCWZjLT53cml0ZV9pYmlfcmVnKGZjLCBjdHJsXzIwOCwgaWJpX3plcm8pOwogCiAJcjcxY18wID0gZmMtPnJlYWRfaWJpX3JlZyhmYywgd2FuX2N0cmxfcmVnXzcxYyk7Ci0KIAl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHg3MWMsIDEpOwotCiAJdG1wMyA9IHJlYWRfcmVnX2R3KGFkYXB0ZXIsIDB4NzFjKTsKLQogCWRwcmludGsoIiVzOiB0bXAzID0gJXhcbiIsIF9fZnVuY19fLCB0bXAzKTsKLQogCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDcxYywgdG1wMik7CiAKIAkvLyBjaGVjayBmb3IgaW50ZXJuYWwgU1JBTSA/Pz8KQEAgLTM1MCw5ICszMjAsNyBAQAogCQlzcmFtX3NldF9zaXplKGFkYXB0ZXIsIDB4MTAwMDApOwogCQlzcmFtX2luaXQoYWRhcHRlcik7CiAJCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDIwOCwgdG1wKTsKLQogCQlkcHJpbnRrKCIlczogc3JhbSBzaXplID0gMzJLXG4iLCBfX2Z1bmNfXyk7Ci0KIAkJcmV0dXJuIDMyOwogCX0KIApAQCAtMzYwLDkgKzMyOCw3IEBACiAJCXNyYW1fc2V0X3NpemUoYWRhcHRlciwgMHgyMDAwMCk7CiAJCXNyYW1faW5pdChhZGFwdGVyKTsKIAkJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MjA4LCB0bXApOwotCiAJCWRwcmludGsoIiVzOiBzcmFtIHNpemUgPSAxMjhLXG4iLCBfX2Z1bmNfXyk7Ci0KIAkJcmV0dXJuIDEyODsKIAl9CiAKQEAgLTM3MCw5ICszMzYsNyBAQAogCQlzcmFtX3NldF9zaXplKGFkYXB0ZXIsIDB4MDAwMDApOwogCQlzcmFtX2luaXQoYWRhcHRlcik7CiAJCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDIwOCwgdG1wKTsKLQogCQlkcHJpbnRrKCIlczogc3JhbSBzaXplID0gNjRLXG4iLCBfX2Z1bmNfXyk7Ci0KIAkJcmV0dXJuIDY0OwogCX0KIApAQCAtMzgwLDE4ICszNDQsMTQgQEAKIAkJc3JhbV9zZXRfc2l6ZShhZGFwdGVyLCAweDEwMDAwKTsKIAkJc3JhbV9pbml0KGFkYXB0ZXIpOwogCQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgyMDgsIHRtcCk7Ci0KIAkJZHByaW50aygiJXM6IHNyYW0gc2l6ZSA9IDMyS1xuIiwgX19mdW5jX18pOwotCiAJCXJldHVybiAzMjsKIAl9CiAKIAlzcmFtX3NldF9zaXplKGFkYXB0ZXIsIDB4MTAwMDApOwogCXNyYW1faW5pdChhZGFwdGVyKTsKIAl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgyMDgsIHRtcCk7Ci0KIAlkcHJpbnRrKCIlczogU1JBTSBkZXRlY3Rpb24gZmFpbGVkLiBTZXQgdG8gMzJLIFxuIiwgX19mdW5jX18pOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC11c2IuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC11c2IuYwppbmRleCBhZTBkNzZhLi5iZWRjZmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtdXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXVzYi5jCkBAIC0xLDExICsxLDggQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaW51eCBkcml2ZXIgdGhlIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQotICoKLSAqIGZsZXhjb3AtdXNiLmMgLSBjb3ZlcnMgdGhlIFVTQiBwYXJ0LgotICoKLSAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4KKyAqIExpbnV4IGRyaXZlciBmb3IgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCisgKiBmbGV4Y29wLXVzYi5jIC0gY292ZXJzIHRoZSBVU0IgcGFydAorICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCiAgKi8KLQogI2RlZmluZSBGQ19MT0dfUFJFRklYICJmbGV4Y29wX3VzYiIKICNpbmNsdWRlICJmbGV4Y29wLXVzYi5oIgogI2luY2x1ZGUgImZsZXhjb3AtY29tbW9uLmgiCkBAIC0xOCw0MiArMTUsNDcgQEAKIC8qIGRlYnVnICovCiAjaWZkZWYgQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1BfREVCVUcKICNkZWZpbmUgZHByaW50ayhsZXZlbCxhcmdzLi4uKSBcCi0JICAgIGRvIHsgaWYgKChkZWJ1ZyAmIGxldmVsKSkgeyBwcmludGsoYXJncyk7IH0gfSB3aGlsZSAoMCkKLSNkZWZpbmUgZGVidWdfZHVtcChiLGwsbWV0aG9kKSB7XAorCWRvIHsgaWYgKChkZWJ1ZyAmIGxldmVsKSkgcHJpbnRrKGFyZ3MpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGRlYnVnX2R1bXAoYiwgbCwgbWV0aG9kKSBkbyB7XAogCWludCBpOyBcCi0JZm9yIChpID0gMDsgaSA8IGw7IGkrKykgbWV0aG9kKCIlMDJ4ICIsIGJbaV0pOyBcCi0JbWV0aG9kKCJcbiIpO1wKLX0KKwlmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSBcCisJCW1ldGhvZCgiJTAyeCAiLCBiW2ldKTsgXAorCW1ldGhvZCgiXG4iKTsgXAorfSB3aGlsZSAoMCkKIAogI2RlZmluZSBERUJTVEFUVVMgIiIKICNlbHNlCi0jZGVmaW5lIGRwcmludGsobGV2ZWwsYXJncy4uLikKLSNkZWZpbmUgZGVidWdfZHVtcChiLGwsbWV0aG9kKQorI2RlZmluZSBkcHJpbnRrKGxldmVsLCBhcmdzLi4uKQorI2RlZmluZSBkZWJ1Z19kdW1wKGIsIGwsIG1ldGhvZCkKICNkZWZpbmUgREVCU1RBVFVTICIgKGRlYnVnZ2luZyBpcyBub3QgZW5hYmxlZCkiCiAjZW5kaWYKIAogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsICgxPWluZm8sdHM9MixjdHJsPTQsaTJjPTgsdjhtZW09MTYgKG9yLWFibGUpKS4iIERFQlNUQVRVUyk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnZ2luZyBsZXZlbCAoMT1pbmZvLHRzPTIsIgorCQkiY3RybD00LGkyYz04LHY4bWVtPTE2IChvci1hYmxlKSkuIiBERUJTVEFUVVMpOwogI3VuZGVmIERFQlNUQVRVUwogCi0jZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pIGRwcmludGsoMHgwMSxhcmdzKQotI2RlZmluZSBkZWJfdHMoYXJncy4uLikgICBkcHJpbnRrKDB4MDIsYXJncykKLSNkZWZpbmUgZGViX2N0cmwoYXJncy4uLikgZHByaW50aygweDA0LGFyZ3MpCi0jZGVmaW5lIGRlYl9pMmMoYXJncy4uLikgIGRwcmludGsoMHgwOCxhcmdzKQotI2RlZmluZSBkZWJfdjgoYXJncy4uLikgICBkcHJpbnRrKDB4MTAsYXJncykKKyNkZWZpbmUgZGViX2luZm8oYXJncy4uLikgZHByaW50aygweDAxLCBhcmdzKQorI2RlZmluZSBkZWJfdHMoYXJncy4uLikgZHByaW50aygweDAyLCBhcmdzKQorI2RlZmluZSBkZWJfY3RybChhcmdzLi4uKSBkcHJpbnRrKDB4MDQsIGFyZ3MpCisjZGVmaW5lIGRlYl9pMmMoYXJncy4uLikgZHByaW50aygweDA4LCBhcmdzKQorI2RlZmluZSBkZWJfdjgoYXJncy4uLikgZHByaW50aygweDEwLCBhcmdzKQogCiAvKiBKTFAgMTExNzAwOiB3ZSB3aWxsIGluY2x1ZGUgdGhlIDEgYml0IGdhcCBiZXR3ZWVuIHRoZSB1cHBlciBhbmQgbG93ZXIgMyBiaXRzCiAgKiBpbiB0aGUgSUJJIGFkZHJlc3MsIHRvIG1ha2UgdGhlIFY4IGNvZGUgc2ltcGxlci4KLSAqIFBDSSBBRERSRVNTIEZPUk1BVDogMHg3MUMgLT4gMDAwMCAwMTExIDAwMDEgMTEwMCAodGhlc2UgYXJlIHRoZSBzaXggYml0cyB1c2VkKQorICogUENJIEFERFJFU1MgRk9STUFUOiAweDcxQyAtPiAwMDAwIDAxMTEgMDAwMSAxMTAwICh0aGUgc2l4IGJpdHMgdXNlZCkKICAqICAgICAgICAgICAgICAgICAgaW4gZ2VuZXJhbDogMDAwMCAwSEhIIDAwMEwgTEwwMAogICogSUJJIEFERFJFU1MgRk9STUFUOiAgICAgICAgICAgICAgICAgICAgUkhISCBCTExMCiAgKgogICogd2hlcmUgUiBpcyB0aGUgcmVhZCgxKS93cml0ZSgwKSBiaXQsIEIgaXMgdGhlIGJ1c3kgYml0CiAgKiBhbmQgSEhIIGFuZCBMTEwgYXJlIHRoZSB0d28gc2V0cyBvZiB0aHJlZSBiaXRzIGZyb20gdGhlIFBDSSBhZGRyZXNzLgogICovCi0jZGVmaW5lIEIyQzJfRkxFWF9QQ0lPRkZTRVRfVE9fSU5URVJOQUxBRERSKHVzUENJKSAodTgpICgoKHVzUENJID4+IDIpICYgMHgwNykgKyAoKHVzUENJID4+IDQpICYgMHg3MCkpCi0jZGVmaW5lIEIyQzJfRkxFWF9JTlRFUk5BTEFERFJfVE9fUENJT0ZGU0VUKHVjQWRkcikgKHUxNikgKCgodWNBZGRyICYgMHgwNykgPDwgMikgKyAoKHVjQWRkciAmIDB4NzApIDw8IDQpKQorI2RlZmluZSBCMkMyX0ZMRVhfUENJT0ZGU0VUX1RPX0lOVEVSTkFMQUREUih1c1BDSSkgKHU4KSBcCisJKCgodXNQQ0kgPj4gMikgJiAweDA3KSArICgodXNQQ0kgPj4gNCkgJiAweDcwKSkKKyNkZWZpbmUgQjJDMl9GTEVYX0lOVEVSTkFMQUREUl9UT19QQ0lPRkZTRVQodWNBZGRyKSAodTE2KSBcCisJKCgodWNBZGRyICYgMHgwNykgPDwgMikgKyAoKHVjQWRkciAmIDB4NzApIDw8IDQpKQogCiAvKgogICogREtUIDAyMDIyOApAQCAtNjksMTIgKzcxLDEzIEBACiAJc3RydWN0IGZsZXhjb3BfdXNiICpmY191c2IgPSBmYy0+YnVzX3NwZWNpZmljOwogCXU4IHJlcXVlc3QgPSByZWFkID8gQjJDMl9VU0JfUkVBRF9SRUcgOiBCMkMyX1VTQl9XUklURV9SRUc7CiAJdTggcmVxdWVzdF90eXBlID0gKHJlYWQgPyBVU0JfRElSX0lOIDogVVNCX0RJUl9PVVQpIHwgVVNCX1RZUEVfVkVORE9SOwotCXU4IHdBZGRyZXNzID0gQjJDMl9GTEVYX1BDSU9GRlNFVF9UT19JTlRFUk5BTEFERFIod1JlZ09mZnNQQ0kpIHwgKHJlYWQgPyAweDgwIDogMCk7CisJdTggd0FkZHJlc3MgPSBCMkMyX0ZMRVhfUENJT0ZGU0VUX1RPX0lOVEVSTkFMQUREUih3UmVnT2Zmc1BDSSkgfAorCQkocmVhZCA/IDB4ODAgOiAwKTsKIAogCWludCBsZW4gPSB1c2JfY29udHJvbF9tc2coZmNfdXNiLT51ZGV2LAogCQkJcmVhZCA/IEIyQzJfVVNCX0NUUkxfUElQRV9JTiA6IEIyQzJfVVNCX0NUUkxfUElQRV9PVVQsCiAJCQlyZXF1ZXN0LAotCQkJcmVxdWVzdF90eXBlLCAgLyogMHhjMCByZWFkIG9yIDB4NDAgd3JpdGUqLworCQkJcmVxdWVzdF90eXBlLCAvKiAweGMwIHJlYWQgb3IgMHg0MCB3cml0ZSAqLwogCQkJd0FkZHJlc3MsCiAJCQkwLAogCQkJdmFsLApAQCAtODIsNTUgKzg1LDQ5IEBACiAJCQlCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9SRFcgKiBIWik7CiAKIAlpZiAobGVuICE9IHNpemVvZih1MzIpKSB7Ci0JCWVycigiZXJyb3Igd2hpbGUgJXMgZHdvcmQgZnJvbSAlZCAoJWQpLiIscmVhZCA/ICJyZWFkaW5nIiA6ICJ3cml0aW5nIiwKLQkJCXdBZGRyZXNzLHdSZWdPZmZzUENJKTsKKwkJZXJyKCJlcnJvciB3aGlsZSAlcyBkd29yZCBmcm9tICVkICglZCkuIiwgcmVhZCA/ICJyZWFkaW5nIiA6CisJCQkJIndyaXRpbmciLCB3QWRkcmVzcywgd1JlZ09mZnNQQ0kpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcmV0dXJuIDA7CiB9Ci0KIC8qCiAgKiBES1QgMDEwODE3IC0gYWRkIHN1cHBvcnQgZm9yIFY4IG1lbW9yeSByZWFkL3dyaXRlIGFuZCBmbGFzaCB1cGRhdGUKICAqLwogc3RhdGljIGludCBmbGV4Y29wX3VzYl92OF9tZW1vcnlfcmVxKHN0cnVjdCBmbGV4Y29wX3VzYiAqZmNfdXNiLAogCQlmbGV4Y29wX3VzYl9yZXF1ZXN0X3QgcmVxLCB1OCBwYWdlLCB1MTYgd0FkZHJlc3MsCi0JCXU4ICpwYkJ1ZmZlcix1MzIgYnVmbGVuKQorCQl1OCAqcGJCdWZmZXIsIHUzMiBidWZsZW4pCiB7Ci0vLwl1OCBkd1JlcXVlc3RUeXBlOwogCXU4IHJlcXVlc3RfdHlwZSA9IFVTQl9UWVBFX1ZFTkRPUjsKIAl1MTYgd0luZGV4OwotCWludCBuV2FpdFRpbWUscGlwZSxsZW47Ci0KKwlpbnQgbldhaXRUaW1lLCBwaXBlLCBsZW47CiAJd0luZGV4ID0gcGFnZSA8PCA4OwogCiAJc3dpdGNoIChyZXEpIHsKLQkJY2FzZSBCMkMyX1VTQl9SRUFEX1Y4X01FTToKLQkJCW5XYWl0VGltZSA9IEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1Y4UkVBRDsKLQkJCXJlcXVlc3RfdHlwZSB8PSBVU0JfRElSX0lOOwotLy8JCQlkd1JlcXVlc3RUeXBlID0gKHU4KSBSVFlQRV9SRUFEX1Y4X01FTU9SWTsKLQkJCXBpcGUgPSBCMkMyX1VTQl9DVFJMX1BJUEVfSU47CisJY2FzZSBCMkMyX1VTQl9SRUFEX1Y4X01FTToKKwkJbldhaXRUaW1lID0gQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fVjhSRUFEOworCQlyZXF1ZXN0X3R5cGUgfD0gVVNCX0RJUl9JTjsKKwkJcGlwZSA9IEIyQzJfVVNCX0NUUkxfUElQRV9JTjsKIAkJYnJlYWs7Ci0JCWNhc2UgQjJDMl9VU0JfV1JJVEVfVjhfTUVNOgotCQkJd0luZGV4IHw9IHBiQnVmZmVyWzBdOwotCQkJcmVxdWVzdF90eXBlIHw9IFVTQl9ESVJfT1VUOwotCQkJbldhaXRUaW1lID0gQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fVjhXUklURTsKLS8vCQkJZHdSZXF1ZXN0VHlwZSA9ICh1OCkgUlRZUEVfV1JJVEVfVjhfTUVNT1JZOwotCQkJcGlwZSA9IEIyQzJfVVNCX0NUUkxfUElQRV9PVVQ7CisJY2FzZSBCMkMyX1VTQl9XUklURV9WOF9NRU06CisJCXdJbmRleCB8PSBwYkJ1ZmZlclswXTsKKwkJcmVxdWVzdF90eXBlIHw9IFVTQl9ESVJfT1VUOworCQluV2FpdFRpbWUgPSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9WOFdSSVRFOworCQlwaXBlID0gQjJDMl9VU0JfQ1RSTF9QSVBFX09VVDsKIAkJYnJlYWs7Ci0JCWNhc2UgQjJDMl9VU0JfRkxBU0hfQkxPQ0s6Ci0JCQlyZXF1ZXN0X3R5cGUgfD0gVVNCX0RJUl9PVVQ7Ci0JCQluV2FpdFRpbWUgPSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9WOEZMQVNIOwotLy8JCQlkd1JlcXVlc3RUeXBlID0gKHU4KSBSVFlQRV9XUklURV9WOF9GTEFTSDsKLQkJCXBpcGUgPSBCMkMyX1VTQl9DVFJMX1BJUEVfT1VUOworCWNhc2UgQjJDMl9VU0JfRkxBU0hfQkxPQ0s6CisJCXJlcXVlc3RfdHlwZSB8PSBVU0JfRElSX09VVDsKKwkJbldhaXRUaW1lID0gQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fVjhGTEFTSDsKKwkJcGlwZSA9IEIyQzJfVVNCX0NUUkxfUElQRV9PVVQ7CiAJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZGViX2luZm8oInVuc3VwcG9ydGVkIHJlcXVlc3QgZm9yIHY4X21lbV9yZXEgJXguXG4iLHJlcSk7CisJZGVmYXVsdDoKKwkJZGViX2luZm8oInVuc3VwcG9ydGVkIHJlcXVlc3QgZm9yIHY4X21lbV9yZXEgJXguXG4iLCByZXEpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JZGViX3Y4KCJ2OG1lbTogJTAyeCAlMDJ4ICUwNHggJTA0eCwgbGVuOiAlZFxuIixyZXF1ZXN0X3R5cGUscmVxLAotCQkJd0FkZHJlc3Msd0luZGV4LGJ1Zmxlbik7CisJZGViX3Y4KCJ2OG1lbTogJTAyeCAlMDJ4ICUwNHggJTA0eCwgbGVuOiAlZFxuIiwgcmVxdWVzdF90eXBlLCByZXEsCisJCQl3QWRkcmVzcywgd0luZGV4LCBidWZsZW4pOwogCi0JbGVuID0gdXNiX2NvbnRyb2xfbXNnKGZjX3VzYi0+dWRldixwaXBlLAorCWxlbiA9IHVzYl9jb250cm9sX21zZyhmY191c2ItPnVkZXYsIHBpcGUsCiAJCQlyZXEsCiAJCQlyZXF1ZXN0X3R5cGUsCiAJCQl3QWRkcmVzcywKQEAgLTEzOSwzOSArMTM2LDUzIEBACiAJCQlidWZsZW4sCiAJCQluV2FpdFRpbWUgKiBIWik7CiAKLQlkZWJ1Z19kdW1wKHBiQnVmZmVyLGxlbixkZWJfdjgpOwotCisJZGVidWdfZHVtcChwYkJ1ZmZlciwgbGVuLCBkZWJfdjgpOwogCXJldHVybiBsZW4gPT0gYnVmbGVuID8gMCA6IC1FSU87CiB9CiAKICNkZWZpbmUgYnl0ZXNfbGVmdF90b19yZWFkX29uX3BhZ2UocGFkZHIsYnVmbGVuKSBcCi0JCQkoKFY4X01FTU9SWV9QQUdFX1NJWkUgLSAocGFkZHIgJiBWOF9NRU1PUllfUEFHRV9NQVNLKSkgPiBidWZsZW4gXAotCQkJPyBidWZsZW4gOiAoVjhfTUVNT1JZX1BBR0VfU0laRSAtIChwYWRkciAmIFY4X01FTU9SWV9QQUdFX01BU0spKSkKKwkoKFY4X01FTU9SWV9QQUdFX1NJWkUgLSAocGFkZHIgJiBWOF9NRU1PUllfUEFHRV9NQVNLKSkgPiBidWZsZW4gXAorCSA/IGJ1ZmxlbiA6IChWOF9NRU1PUllfUEFHRV9TSVpFIC0gKHBhZGRyICYgVjhfTUVNT1JZX1BBR0VfTUFTSykpKQogCi1zdGF0aWMgaW50IGZsZXhjb3BfdXNiX21lbW9yeV9yZXEoc3RydWN0IGZsZXhjb3BfdXNiICpmY191c2IsZmxleGNvcF91c2JfcmVxdWVzdF90IHJlcSwKLQkJZmxleGNvcF91c2JfbWVtX3BhZ2VfdCBwYWdlX3N0YXJ0LCB1MzIgYWRkciwgaW50IGV4dGVuZGVkLCB1OCAqYnVmLCB1MzIgbGVuKQorc3RhdGljIGludCBmbGV4Y29wX3VzYl9tZW1vcnlfcmVxKHN0cnVjdCBmbGV4Y29wX3VzYiAqZmNfdXNiLAorCQlmbGV4Y29wX3VzYl9yZXF1ZXN0X3QgcmVxLCBmbGV4Y29wX3VzYl9tZW1fcGFnZV90IHBhZ2Vfc3RhcnQsCisJCXUzMiBhZGRyLCBpbnQgZXh0ZW5kZWQsIHU4ICpidWYsIHUzMiBsZW4pCiB7CiAJaW50IGkscmV0ID0gMDsKIAl1MTYgd01heDsKIAl1MzIgcGFnZWNodW5rID0gMDsKIAogCXN3aXRjaChyZXEpIHsKLQkJY2FzZSBCMkMyX1VTQl9SRUFEX1Y4X01FTTogIHdNYXggPSBVU0JfTUVNX1JFQURfTUFYOyBicmVhazsKLQkJY2FzZSBCMkMyX1VTQl9XUklURV9WOF9NRU06CXdNYXggPSBVU0JfTUVNX1dSSVRFX01BWDsgYnJlYWs7Ci0JCWNhc2UgQjJDMl9VU0JfRkxBU0hfQkxPQ0s6ICB3TWF4ID0gVVNCX0ZMQVNIX01BWDsgYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIEIyQzJfVVNCX1JFQURfVjhfTUVNOgorCQl3TWF4ID0gVVNCX01FTV9SRUFEX01BWDsKKwkJYnJlYWs7CisJY2FzZSBCMkMyX1VTQl9XUklURV9WOF9NRU06CisJCXdNYXggPSBVU0JfTUVNX1dSSVRFX01BWDsKKwkJYnJlYWs7CisJY2FzZSBCMkMyX1VTQl9GTEFTSF9CTE9DSzoKKwkJd01heCA9IFVTQl9GTEFTSF9NQVg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAl9CiAJZm9yIChpID0gMDsgaSA8IGxlbjspIHsKLQkJcGFnZWNodW5rID0gd01heCA8IGJ5dGVzX2xlZnRfdG9fcmVhZF9vbl9wYWdlKGFkZHIsbGVuKSA/IHdNYXggOiBieXRlc19sZWZ0X3RvX3JlYWRfb25fcGFnZShhZGRyLGxlbik7Ci0JCWRlYl9pbmZvKCIleFxuIiwoYWRkciAmIFY4X01FTU9SWV9QQUdFX01BU0spIHwgKFY4X01FTU9SWV9FWFRFTkRFRCpleHRlbmRlZCkpOwotCQlpZiAoKHJldCA9IGZsZXhjb3BfdXNiX3Y4X21lbW9yeV9yZXEoZmNfdXNiLHJlcSwKLQkJCQlwYWdlX3N0YXJ0ICsgKGFkZHIgLyBWOF9NRU1PUllfUEFHRV9TSVpFKSwgLyogYWN0dWFsIHBhZ2UgKi8KLQkJCQkoYWRkciAmIFY4X01FTU9SWV9QQUdFX01BU0spIHwgKFY4X01FTU9SWV9FWFRFTkRFRCpleHRlbmRlZCksCi0JCQkJJmJ1ZltpXSxwYWdlY2h1bmspKSA8IDApCi0JCQlyZXR1cm4gcmV0OworCQlwYWdlY2h1bmsgPQorCQkJd01heCA8IGJ5dGVzX2xlZnRfdG9fcmVhZF9vbl9wYWdlKGFkZHIsIGxlbikgPworCQkJCXdNYXggOgorCQkJCWJ5dGVzX2xlZnRfdG9fcmVhZF9vbl9wYWdlKGFkZHIsIGxlbik7CisJCWRlYl9pbmZvKCIleFxuIiwKKwkJCShhZGRyICYgVjhfTUVNT1JZX1BBR0VfTUFTSykgfAorCQkJCShWOF9NRU1PUllfRVhURU5ERUQqZXh0ZW5kZWQpKTsKIAorCQlyZXQgPSBmbGV4Y29wX3VzYl92OF9tZW1vcnlfcmVxKGZjX3VzYiwgcmVxLAorCQkJcGFnZV9zdGFydCArIChhZGRyIC8gVjhfTUVNT1JZX1BBR0VfU0laRSksCisJCQkoYWRkciAmIFY4X01FTU9SWV9QQUdFX01BU0spIHwKKwkJCQkoVjhfTUVNT1JZX0VYVEVOREVEKmV4dGVuZGVkKSwKKwkJCSZidWZbaV0sIHBhZ2VjaHVuayk7CisKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OwogCQlhZGRyICs9IHBhZ2VjaHVuazsKIAkJbGVuIC09IHBhZ2VjaHVuazsKIAl9CkBAIC0xODAsOCArMTkxLDkgQEAKIAogc3RhdGljIGludCBmbGV4Y29wX3VzYl9nZXRfbWFjX2FkZHIoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IGV4dGVuZGVkKQogewotCXJldHVybiBmbGV4Y29wX3VzYl9tZW1vcnlfcmVxKGZjLT5idXNfc3BlY2lmaWMsQjJDMl9VU0JfUkVBRF9WOF9NRU0sCi0JCQlWOF9NRU1PUllfUEFHRV9GTEFTSCwweDFmMDEwLDEsZmMtPmR2Yl9hZGFwdGVyLnByb3Bvc2VkX21hYyw2KTsKKwlyZXR1cm4gZmxleGNvcF91c2JfbWVtb3J5X3JlcShmYy0+YnVzX3NwZWNpZmljLCBCMkMyX1VTQl9SRUFEX1Y4X01FTSwKKwkJVjhfTUVNT1JZX1BBR0VfRkxBU0gsIDB4MWYwMTAsIDEsCisJCWZjLT5kdmJfYWRhcHRlci5wcm9wb3NlZF9tYWMsIDYpOwogfQogCiAjaWYgMApAQCAtMTkxLDExICsyMDMsOCBAQAogewogCXUxNiB3VmFsdWU7CiAJdTggcmVxdWVzdF90eXBlID0gKHNldCA/IFVTQl9ESVJfT1VUIDogVVNCX0RJUl9JTikgfCBVU0JfVFlQRV9WRU5ET1I7Ci0vLwl1OCBkd1JlcXVlc3RUeXBlID0gKHU4KSBSVFlQRV9HRU5FUklDLAogCWludCBuV2FpdFRpbWUgPSAyLAotCQlwaXBlID0gc2V0ID8gQjJDMl9VU0JfQ1RSTF9QSVBFX09VVCA6IEIyQzJfVVNCX0NUUkxfUElQRV9JTiwKLQkJbGVuOwotCisJICAgIHBpcGUgPSBzZXQgPyBCMkMyX1VTQl9DVFJMX1BJUEVfT1VUIDogQjJDMl9VU0JfQ1RSTF9QSVBFX0lOLCBsZW47CiAJd1ZhbHVlID0gKGZ1bmMgPDwgOCkgfCBleHRyYTsKIAogCWxlbiA9IHVzYl9jb250cm9sX21zZyhmY191c2ItPnVkZXYscGlwZSwKQEAgLTIxOCwzNiArMjI3LDM1IEBACiAJc3RydWN0IGZsZXhjb3BfdXNiICpmY191c2IgPSBpMmMtPmZjLT5idXNfc3BlY2lmaWM7CiAJdTE2IHdWYWx1ZSwgd0luZGV4OwogCWludCBuV2FpdFRpbWUscGlwZSxsZW47Ci0vLwl1OCBkd1JlcXVlc3RUeXBlOwogCXU4IHJlcXVlc3RfdHlwZSA9IFVTQl9UWVBFX1ZFTkRPUjsKIAogCXN3aXRjaCAoZnVuYykgewotCQljYXNlIFVTQl9GVU5DX0kyQ19XUklURToKLQkJY2FzZSBVU0JfRlVOQ19JMkNfTVVMVElXUklURToKLQkJY2FzZSBVU0JfRlVOQ19JMkNfUkVQRUFUV1JJVEU6CisJY2FzZSBVU0JfRlVOQ19JMkNfV1JJVEU6CisJY2FzZSBVU0JfRlVOQ19JMkNfTVVMVElXUklURToKKwljYXNlIFVTQl9GVU5DX0kyQ19SRVBFQVRXUklURToKIAkJLyogREtUIDAyMDIwOCAtIGFkZCB0aGlzIHRvIHN1cHBvcnQgc3BlY2lhbCBjYXNlIG9mIERpU0VxQyAqLwotCQljYXNlIFVTQl9GVU5DX0kyQ19DSEVDS1dSSVRFOgotCQkJcGlwZSA9IEIyQzJfVVNCX0NUUkxfUElQRV9PVVQ7Ci0JCQluV2FpdFRpbWUgPSAyOwotLy8JCQlkd1JlcXVlc3RUeXBlID0gKHU4KSBSVFlQRV9HRU5FUklDOwotCQkJcmVxdWVzdF90eXBlIHw9IFVTQl9ESVJfT1VUOworCWNhc2UgVVNCX0ZVTkNfSTJDX0NIRUNLV1JJVEU6CisJCXBpcGUgPSBCMkMyX1VTQl9DVFJMX1BJUEVfT1VUOworCQluV2FpdFRpbWUgPSAyOworCQlyZXF1ZXN0X3R5cGUgfD0gVVNCX0RJUl9PVVQ7CiAJCWJyZWFrOwotCQljYXNlIFVTQl9GVU5DX0kyQ19SRUFEOgotCQljYXNlIFVTQl9GVU5DX0kyQ19SRVBFQVRSRUFEOgotCQkJcGlwZSA9IEIyQzJfVVNCX0NUUkxfUElQRV9JTjsKLQkJCW5XYWl0VGltZSA9IDI7Ci0vLwkJCWR3UmVxdWVzdFR5cGUgPSAodTgpIFJUWVBFX0dFTkVSSUM7Ci0JCQlyZXF1ZXN0X3R5cGUgfD0gVVNCX0RJUl9JTjsKKwljYXNlIFVTQl9GVU5DX0kyQ19SRUFEOgorCWNhc2UgVVNCX0ZVTkNfSTJDX1JFUEVBVFJFQUQ6CisJCXBpcGUgPSBCMkMyX1VTQl9DVFJMX1BJUEVfSU47CisJCW5XYWl0VGltZSA9IDI7CisJCXJlcXVlc3RfdHlwZSB8PSBVU0JfRElSX0lOOwogCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRlYl9pbmZvKCJ1bnN1cHBvcnRlZCBmdW5jdGlvbiBmb3IgaTJjX3JlcSAleFxuIixmdW5jKTsKLQkJCXJldHVybiAtRUlOVkFMOworCWRlZmF1bHQ6CisJCWRlYl9pbmZvKCJ1bnN1cHBvcnRlZCBmdW5jdGlvbiBmb3IgaTJjX3JlcSAleFxuIiwgZnVuYyk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAl3VmFsdWUgPSAoZnVuYyA8PCA4KSB8IChpMmMtPnBvcnQgPDwgNCk7CiAJd0luZGV4ID0gKGNoaXBhZGRyIDw8IDggKSB8IGFkZHI7CiAKLQlkZWJfaTJjKCJpMmMgJTJkOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIixmdW5jLHJlcXVlc3RfdHlwZSxyZXEsCi0JCXdWYWx1ZSAmIDB4ZmYsIHdWYWx1ZSA+PiA4LCB3SW5kZXggJiAweGZmLCB3SW5kZXggPj4gOCk7CisJZGViX2kyYygiaTJjICUyZDogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJCQlmdW5jLCByZXF1ZXN0X3R5cGUsIHJlcSwKKwkJCXdWYWx1ZSAmIDB4ZmYsIHdWYWx1ZSA+PiA4LAorCQkJd0luZGV4ICYgMHhmZiwgd0luZGV4ID4+IDgpOwogCiAJbGVuID0gdXNiX2NvbnRyb2xfbXNnKGZjX3VzYi0+dWRldixwaXBlLAogCQkJcmVxLApAQCAtMjU3LDQ0ICsyNjUsNDkgQEAKIAkJCWJ1ZiwKIAkJCWJ1ZmxlbiwKIAkJCW5XYWl0VGltZSAqIEhaKTsKLQogCXJldHVybiBsZW4gPT0gYnVmbGVuID8gMCA6IC1FUkVNT1RFSU87CiB9CiAKLS8qIGFjdHVhbCBidXMgc3BlY2lmaWMgYWNjZXNzIGZ1bmN0aW9ucywgbWFrZSBzdXJlIHByb3RvdHlwZSBhcmUvd2lsbCBiZSBlcXVhbCB0byBwY2kgKi8KLXN0YXRpYyBmbGV4Y29wX2liaV92YWx1ZSBmbGV4Y29wX3VzYl9yZWFkX2liaV9yZWcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9pYmlfcmVnaXN0ZXIgcmVnKQorLyogYWN0dWFsIGJ1cyBzcGVjaWZpYyBhY2Nlc3MgZnVuY3Rpb25zLAorICAgbWFrZSBzdXJlIHByb3RvdHlwZSBhcmUvd2lsbCBiZSBlcXVhbCB0byBwY2kgKi8KK3N0YXRpYyBmbGV4Y29wX2liaV92YWx1ZSBmbGV4Y29wX3VzYl9yZWFkX2liaV9yZWcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwlmbGV4Y29wX2liaV9yZWdpc3RlciByZWcpCiB7CiAJZmxleGNvcF9pYmlfdmFsdWUgdmFsOwogCXZhbC5yYXcgPSAwOwotCWZsZXhjb3BfdXNiX3JlYWR3cml0ZV9kdyhmYyxyZWcsICZ2YWwucmF3LCAxKTsKKwlmbGV4Y29wX3VzYl9yZWFkd3JpdGVfZHcoZmMsIHJlZywgJnZhbC5yYXcsIDEpOwogCXJldHVybiB2YWw7CiB9CiAKLXN0YXRpYyBpbnQgZmxleGNvcF91c2Jfd3JpdGVfaWJpX3JlZyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2liaV9yZWdpc3RlciByZWcsIGZsZXhjb3BfaWJpX3ZhbHVlIHZhbCkKK3N0YXRpYyBpbnQgZmxleGNvcF91c2Jfd3JpdGVfaWJpX3JlZyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX2liaV9yZWdpc3RlciByZWcsIGZsZXhjb3BfaWJpX3ZhbHVlIHZhbCkKIHsKLQlyZXR1cm4gZmxleGNvcF91c2JfcmVhZHdyaXRlX2R3KGZjLHJlZywgJnZhbC5yYXcsIDApOworCXJldHVybiBmbGV4Y29wX3VzYl9yZWFkd3JpdGVfZHcoZmMsIHJlZywgJnZhbC5yYXcsIDApOwogfQogCiBzdGF0aWMgaW50IGZsZXhjb3BfdXNiX2kyY19yZXF1ZXN0KHN0cnVjdCBmbGV4Y29wX2kyY19hZGFwdGVyICppMmMsCi0JZmxleGNvcF9hY2Nlc3Nfb3BfdCBvcCwgdTggY2hpcGFkZHIsIHU4IGFkZHIsIHU4ICpidWYsIHUxNiBsZW4pCisJCWZsZXhjb3BfYWNjZXNzX29wX3Qgb3AsIHU4IGNoaXBhZGRyLCB1OCBhZGRyLCB1OCAqYnVmLCB1MTYgbGVuKQogewogCWlmIChvcCA9PSBGQ19SRUFEKQogCQlyZXR1cm4gZmxleGNvcF91c2JfaTJjX3JlcShpMmMsIEIyQzJfVVNCX0kyQ19SRVFVRVNULAotCQkJVVNCX0ZVTkNfSTJDX1JFQUQsIGNoaXBhZGRyLCBhZGRyLCBidWYsIGxlbik7CisJCQkJVVNCX0ZVTkNfSTJDX1JFQUQsIGNoaXBhZGRyLCBhZGRyLCBidWYsIGxlbik7CiAJZWxzZQogCQlyZXR1cm4gZmxleGNvcF91c2JfaTJjX3JlcShpMmMsIEIyQzJfVVNCX0kyQ19SRVFVRVNULAotCQkJVVNCX0ZVTkNfSTJDX1dSSVRFLCBjaGlwYWRkciwgYWRkciwgYnVmLCBsZW4pOworCQkJCVVTQl9GVU5DX0kyQ19XUklURSwgY2hpcGFkZHIsIGFkZHIsIGJ1ZiwgbGVuKTsKIH0KIAotc3RhdGljIHZvaWQgZmxleGNvcF91c2JfcHJvY2Vzc19mcmFtZShzdHJ1Y3QgZmxleGNvcF91c2IgKmZjX3VzYiwgdTggKmJ1ZmZlciwgaW50IGJ1ZmZlcl9sZW5ndGgpCitzdGF0aWMgdm9pZCBmbGV4Y29wX3VzYl9wcm9jZXNzX2ZyYW1lKHN0cnVjdCBmbGV4Y29wX3VzYiAqZmNfdXNiLAorCXU4ICpidWZmZXIsIGludCBidWZmZXJfbGVuZ3RoKQogewogCXU4ICpiOwogCWludCBsOwogCi0JZGViX3RzKCJ0bXBfYnVmZmVyX2xlbmd0aD0lZCwgYnVmZmVyX2xlbmd0aD0lZFxuIiwgZmNfdXNiLT50bXBfYnVmZmVyX2xlbmd0aCwgYnVmZmVyX2xlbmd0aCk7CisJZGViX3RzKCJ0bXBfYnVmZmVyX2xlbmd0aD0lZCwgYnVmZmVyX2xlbmd0aD0lZFxuIiwKKwkJZmNfdXNiLT50bXBfYnVmZmVyX2xlbmd0aCwgYnVmZmVyX2xlbmd0aCk7CiAKIAlpZiAoZmNfdXNiLT50bXBfYnVmZmVyX2xlbmd0aCA+IDApIHsKLQkJbWVtY3B5KGZjX3VzYi0+dG1wX2J1ZmZlcitmY191c2ItPnRtcF9idWZmZXJfbGVuZ3RoLCBidWZmZXIsIGJ1ZmZlcl9sZW5ndGgpOworCQltZW1jcHkoZmNfdXNiLT50bXBfYnVmZmVyK2ZjX3VzYi0+dG1wX2J1ZmZlcl9sZW5ndGgsIGJ1ZmZlciwKKwkJCQlidWZmZXJfbGVuZ3RoKTsKIAkJZmNfdXNiLT50bXBfYnVmZmVyX2xlbmd0aCArPSBidWZmZXJfbGVuZ3RoOwogCQliID0gZmNfdXNiLT50bXBfYnVmZmVyOwogCQlsID0gZmNfdXNiLT50bXBfYnVmZmVyX2xlbmd0aDsKQEAgLTMwNCwyMyArMzE3LDI2IEBACiAJfQogCiAJd2hpbGUgKGwgPj0gMTkwKSB7Ci0JCWlmICgqYiA9PSAweGZmKQorCQlpZiAoKmIgPT0gMHhmZikgewogCQkJc3dpdGNoICgqKGIrMSkgJiAweDAzKSB7Ci0JCQkJY2FzZSAweDAxOiAvKiBtZWRpYSBwYWNrZXQgKi8KLQkJCQkJaWYgKCAqKGIrMikgPT0gMHg0NyApCi0JCQkJCQlmbGV4Y29wX3Bhc3NfZG14X3BhY2tldHMoZmNfdXNiLT5mY19kZXYsIGIrMiwgMSk7Ci0JCQkJCWVsc2UKLQkJCQkJCWRlYl90cygibm90IHRzIHBhY2tldCAlMDJ4ICUwMnggJTAyeCAlMDJ4IFxuIiwgKihiKzIpLCAqKGIrMyksICooYis0KSwgKihiKzUpICk7Ci0KLQkJCQkJYiArPSAxOTA7Ci0JCQkJCWwgLT0gMTkwOworCQkJY2FzZSAweDAxOiAvKiBtZWRpYSBwYWNrZXQgKi8KKwkJCQlpZiAoKihiKzIpID09IDB4NDcpCisJCQkJCWZsZXhjb3BfcGFzc19kbXhfcGFja2V0cygKKwkJCQkJCQlmY191c2ItPmZjX2RldiwgYisyLCAxKTsKKwkJCQllbHNlCisJCQkJCWRlYl90cygKKwkJCQkJIm5vdCB0cyBwYWNrZXQgJTAyeCAlMDJ4ICUwMnggJTAyeCBcbiIsCisJCQkJCQkqKGIrMiksICooYiszKSwKKwkJCQkJCSooYis0KSwgKihiKzUpKTsKKwkJCQliICs9IDE5MDsKKwkJCQlsIC09IDE5MDsKIAkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQlkZWJfdHMoIndyb25nIHBhY2tldCB0eXBlXG4iKTsKLQkJCQkJbCA9IDA7CisJCQlkZWZhdWx0OgorCQkJCWRlYl90cygid3JvbmcgcGFja2V0IHR5cGVcbiIpOworCQkJCWwgPSAwOwogCQkJCWJyZWFrOwogCQkJfQotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCWRlYl90cygid3JvbmcgaGVhZGVyXG4iKTsKIAkJCWwgPSAwOwogCQl9CkBAIC0zMzcsMjMgKzM1MywyNiBAQAogCWludCBpOwogCiAJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDApCi0JCWRlYl90cygidXJiIGNvbXBsZXRlZCwgYnVmc2l6ZTogJWQgYWN0bGVuOyAlZFxuIix1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCWRlYl90cygidXJiIGNvbXBsZXRlZCwgYnVmc2l6ZTogJWQgYWN0bGVuOyAlZFxuIiwKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAogCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKIAkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzIDwgMCkgewotCQkJZXJyKCJpc28gZnJhbWUgZGVzY3JpcHRvciAlZCBoYXMgYW4gZXJyb3I6ICVkXG4iLGksdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpOworCQkJZXJyKCJpc28gZnJhbWUgZGVzY3JpcHRvciAlZCBoYXMgYW4gZXJyb3I6ICVkXG4iLCBpLAorCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKTsKIAkJfSBlbHNlCiAJCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoID4gMCkgewotCQkJCWRlYl90cygicGFzc2VkICVkIGJ5dGVzIHRvIHRoZSBkZW11eFxuIix1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgpOworCQkJCWRlYl90cygicGFzc2VkICVkIGJ5dGVzIHRvIHRoZSBkZW11eFxuIiwKKwkJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoKTsKIAogCQkJCWZsZXhjb3BfdXNiX3Byb2Nlc3NfZnJhbWUoZmNfdXNiLAotCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0LAorCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciArCisJCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCwKIAkJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoKTsKLQkJfQorCQkJfQogCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyA9IDA7CiAJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA9IDA7CiAJfQotCiAJdXNiX3N1Ym1pdF91cmIodXJiLEdGUF9BVE9NSUMpOwogfQogCkBAIC0zNzQsMzUgKzM5Myw0NyBAQAogCQl9CiAKIAlpZiAoZmNfdXNiLT5pc29fYnVmZmVyICE9IE5VTEwpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoTlVMTCxmY191c2ItPmJ1ZmZlcl9zaXplLCBmY191c2ItPmlzb19idWZmZXIsIGZjX3VzYi0+ZG1hX2FkZHIpOworCQlwY2lfZnJlZV9jb25zaXN0ZW50KE5VTEwsCisJCQlmY191c2ItPmJ1ZmZlcl9zaXplLCBmY191c2ItPmlzb19idWZmZXIsCisJCQlmY191c2ItPmRtYV9hZGRyKTsKIH0KIAogc3RhdGljIGludCBmbGV4Y29wX3VzYl90cmFuc2Zlcl9pbml0KHN0cnVjdCBmbGV4Y29wX3VzYiAqZmNfdXNiKQogewotCXUxNiBmcmFtZV9zaXplID0gbGUxNl90b19jcHUoZmNfdXNiLT51aW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzBdLmRlc2Mud01heFBhY2tldFNpemUpOwotCWludCBidWZzaXplID0gQjJDMl9VU0JfTlVNX0lTT19VUkIgKiBCMkMyX1VTQl9GUkFNRVNfUEVSX0lTTyAqIGZyYW1lX3NpemUsaSxqLHJldDsKKwl1MTYgZnJhbWVfc2l6ZSA9IGxlMTZfdG9fY3B1KAorCQlmY191c2ItPnVpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbMF0uZGVzYy53TWF4UGFja2V0U2l6ZSk7CisJaW50IGJ1ZnNpemUgPSBCMkMyX1VTQl9OVU1fSVNPX1VSQiAqIEIyQzJfVVNCX0ZSQU1FU19QRVJfSVNPICoKKwkJZnJhbWVfc2l6ZSwgaSwgaiwgcmV0OwogCWludCBidWZmZXJfb2Zmc2V0ID0gMDsKIAotCWRlYl90cygiY3JlYXRpbmcgJWQgaXNvLXVyYnMgd2l0aCAlZCBmcmFtZXMgZWFjaCBvZiAlZCBieXRlcyBzaXplID0gJWQuXG4iLAotCQkJQjJDMl9VU0JfTlVNX0lTT19VUkIsIEIyQzJfVVNCX0ZSQU1FU19QRVJfSVNPLCBmcmFtZV9zaXplLGJ1ZnNpemUpOworCWRlYl90cygiY3JlYXRpbmcgJWQgaXNvLXVyYnMgd2l0aCAlZCBmcmFtZXMgIgorCQkJImVhY2ggb2YgJWQgYnl0ZXMgc2l6ZSA9ICVkLlxuIiwgQjJDMl9VU0JfTlVNX0lTT19VUkIsCisJCQlCMkMyX1VTQl9GUkFNRVNfUEVSX0lTTywgZnJhbWVfc2l6ZSwgYnVmc2l6ZSk7CiAKLQlmY191c2ItPmlzb19idWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChOVUxMLGJ1ZnNpemUsJmZjX3VzYi0+ZG1hX2FkZHIpOworCWZjX3VzYi0+aXNvX2J1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KE5VTEwsCisJCQlidWZzaXplLCAmZmNfdXNiLT5kbWFfYWRkcik7CiAJaWYgKGZjX3VzYi0+aXNvX2J1ZmZlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKKwogCW1lbXNldChmY191c2ItPmlzb19idWZmZXIsIDAsIGJ1ZnNpemUpOwogCWZjX3VzYi0+YnVmZmVyX3NpemUgPSBidWZzaXplOwogCiAJLyogY3JlYXRpbmcgaXNvIHVyYnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQjJDMl9VU0JfTlVNX0lTT19VUkI7IGkrKykKLQkJaWYgKCEoZmNfdXNiLT5pc29fdXJiW2ldID0gdXNiX2FsbG9jX3VyYihCMkMyX1VTQl9GUkFNRVNfUEVSX0lTTyxHRlBfQVRPTUlDKSkpIHsKKwlmb3IgKGkgPSAwOyBpIDwgQjJDMl9VU0JfTlVNX0lTT19VUkI7IGkrKykgeworCQlmY191c2ItPmlzb191cmJbaV0gPSB1c2JfYWxsb2NfdXJiKEIyQzJfVVNCX0ZSQU1FU19QRVJfSVNPLAorCQkJR0ZQX0FUT01JQyk7CisJCWlmIChmY191c2ItPmlzb191cmJbaV0gPT0gTlVMTCkgewogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gdXJiX2Vycm9yOwogCQl9CisJfQorCiAJLyogaW5pdGlhbGlzaW5nIGFuZCBzdWJtaXR0aW5nIGlzbyB1cmJzICovCiAJZm9yIChpID0gMDsgaSA8IEIyQzJfVVNCX05VTV9JU09fVVJCOyBpKyspIHsKIAkJaW50IGZyYW1lX29mZnNldCA9IDA7CiAJCXN0cnVjdCB1cmIgKnVyYiA9IGZjX3VzYi0+aXNvX3VyYltpXTsKLQkJZGViX3RzKCJpbml0aWFsaXppbmcgYW5kIHN1Ym1pdHRpbmcgdXJiIG5vLiAlZCAoYnVmX29mZnNldDogJWQpLlxuIixpLGJ1ZmZlcl9vZmZzZXQpOworCQlkZWJfdHMoImluaXRpYWxpemluZyBhbmQgc3VibWl0dGluZyB1cmIgbm8uICVkICIKKwkJCSIoYnVmX29mZnNldDogJWQpLlxuIiwgaSwgYnVmZmVyX29mZnNldCk7CiAKIAkJdXJiLT5kZXYgPSBmY191c2ItPnVkZXY7CiAJCXVyYi0+Y29udGV4dCA9IGZjX3VzYjsKQEAgLTQxNiwyNiArNDQ3LDI2IEBACiAKIAkJYnVmZmVyX29mZnNldCArPSBmcmFtZV9zaXplICogQjJDMl9VU0JfRlJBTUVTX1BFUl9JU087CiAJCWZvciAoaiA9IDA7IGogPCBCMkMyX1VTQl9GUkFNRVNfUEVSX0lTTzsgaisrKSB7Ci0JCQlkZWJfdHMoInVyYiBubzogJWQsIGZyYW1lOiAlZCwgZnJhbWVfb2Zmc2V0OiAlZFxuIixpLGosZnJhbWVfb2Zmc2V0KTsKKwkJCWRlYl90cygidXJiIG5vOiAlZCwgZnJhbWU6ICVkLCBmcmFtZV9vZmZzZXQ6ICVkXG4iLAorCQkJCQlpLCBqLCBmcmFtZV9vZmZzZXQpOwogCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5vZmZzZXQgPSBmcmFtZV9vZmZzZXQ7CiAJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLmxlbmd0aCA9IGZyYW1lX3NpemU7CiAJCQlmcmFtZV9vZmZzZXQgKz0gZnJhbWVfc2l6ZTsKIAkJfQogCiAJCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIoZmNfdXNiLT5pc29fdXJiW2ldLEdGUF9BVE9NSUMpKSkgewotCQkJZXJyKCJzdWJtaXR0aW5nIHVyYiAlZCBmYWlsZWQgd2l0aCAlZC4iLGkscmV0KTsKKwkJCWVycigic3VibWl0dGluZyB1cmIgJWQgZmFpbGVkIHdpdGggJWQuIiwgaSwgcmV0KTsKIAkJCWdvdG8gdXJiX2Vycm9yOwogCQl9CiAJCWRlYl90cygic3VibWl0dGVkIHVyYiBuby4gJWQuXG4iLGkpOwogCX0KIAotLyogU1JBTSAqLwotCi0JZmxleGNvcF9zcmFtX3NldF9kZXN0KGZjX3VzYi0+ZmNfZGV2LEZDX1NSQU1fREVTVF9NRURJQSB8IEZDX1NSQU1fREVTVF9ORVQgfAotCQkJRkNfU1JBTV9ERVNUX0NBTyB8IEZDX1NSQU1fREVTVF9DQUksIEZDX1NSQU1fREVTVF9UQVJHRVRfV0FOX1VTQik7Ci0JZmxleGNvcF93YW5fc2V0X3NwZWVkKGZjX3VzYi0+ZmNfZGV2LEZDX1dBTl9TUEVFRF84TUJJVFMpOwotCWZsZXhjb3Bfc3JhbV9jdHJsKGZjX3VzYi0+ZmNfZGV2LDEsMSwxKTsKLQorCS8qIFNSQU0gKi8KKwlmbGV4Y29wX3NyYW1fc2V0X2Rlc3QoZmNfdXNiLT5mY19kZXYsIEZDX1NSQU1fREVTVF9NRURJQSB8CisJCQlGQ19TUkFNX0RFU1RfTkVUIHwgRkNfU1JBTV9ERVNUX0NBTyB8IEZDX1NSQU1fREVTVF9DQUksCisJCQlGQ19TUkFNX0RFU1RfVEFSR0VUX1dBTl9VU0IpOworCWZsZXhjb3Bfd2FuX3NldF9zcGVlZChmY191c2ItPmZjX2RldiwgRkNfV0FOX1NQRUVEXzhNQklUUyk7CisJZmxleGNvcF9zcmFtX2N0cmwoZmNfdXNiLT5mY19kZXYsIDEsIDEsIDEpOwogCXJldHVybiAwOwogCiB1cmJfZXJyb3I6CkBAIC00NDgsMjAgKzQ3OSwyMCBAQAogCS8qIHVzZSB0aGUgYWx0ZXJuYXRlIHNldHRpbmcgd2l0aCB0aGUgbGFyZ2VzIGJ1ZmZlciAqLwogCXVzYl9zZXRfaW50ZXJmYWNlKGZjX3VzYi0+dWRldiwwLDEpOwogCXN3aXRjaCAoZmNfdXNiLT51ZGV2LT5zcGVlZCkgewotCQljYXNlIFVTQl9TUEVFRF9MT1c6Ci0JCQllcnIoImNhbm5vdCBoYW5kbGUgVVNCIHNwZWVkIGJlY2F1c2UgaXQgaXMgdG8gc0xPVy4iKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQkJYnJlYWs7Ci0JCWNhc2UgVVNCX1NQRUVEX0ZVTEw6Ci0JCQlpbmZvKCJydW5uaW5nIGF0IEZVTEwgc3BlZWQuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBVU0JfU1BFRURfSElHSDoKLQkJCWluZm8oInJ1bm5pbmcgYXQgSElHSCBzcGVlZC4iKTsKLQkJCWJyZWFrOwotCQljYXNlIFVTQl9TUEVFRF9VTktOT1dOOiAvKiBmYWxsIHRocm91Z2ggKi8KLQkJZGVmYXVsdDoKLQkJCWVycigiY2Fubm90IGhhbmRsZSBVU0Igc3BlZWQgYmVjYXVzZSBpdCBpcyB1bmtvd24uIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKKwljYXNlIFVTQl9TUEVFRF9MT1c6CisJCWVycigiY2Fubm90IGhhbmRsZSBVU0Igc3BlZWQgYmVjYXVzZSBpdCBpcyB0b28gc2xvdy4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CisJCWluZm8oInJ1bm5pbmcgYXQgRlVMTCBzcGVlZC4iKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfSElHSDoKKwkJaW5mbygicnVubmluZyBhdCBISUdIIHNwZWVkLiIpOworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9VTktOT1dOOiAvKiBmYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQllcnIoImNhbm5vdCBoYW5kbGUgVVNCIHNwZWVkIGJlY2F1c2UgaXQgaXMgdW5rbm93bi4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXVzYl9zZXRfaW50ZmRhdGEoZmNfdXNiLT51aW50ZiwgZmNfdXNiKTsKIAlyZXR1cm4gMDsKQEAgLTQ4NSw3ICs1MTYsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLS8qIGdlbmVyYWwgZmxleGNvcCBpbml0ICovCisJLyogZ2VuZXJhbCBmbGV4Y29wIGluaXQgKi8KIAlmY191c2IgPSBmYy0+YnVzX3NwZWNpZmljOwogCWZjX3VzYi0+ZmNfZGV2ID0gZmM7CiAKQEAgLTUwMiwyMSArNTMzLDIxIEBACiAJZmMtPmRldiA9ICZ1ZGV2LT5kZXY7CiAJZmMtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKLS8qIGJ1cyBzcGVjaWZpYyBwYXJ0ICovCisJLyogYnVzIHNwZWNpZmljIHBhcnQgKi8KIAlmY191c2ItPnVkZXYgPSB1ZGV2OwogCWZjX3VzYi0+dWludGYgPSBpbnRmOwogCWlmICgocmV0ID0gZmxleGNvcF91c2JfaW5pdChmY191c2IpKSAhPSAwKQogCQlnb3RvIGVycl9rZnJlZTsKIAotLyogaW5pdCBmbGV4Y29wICovCisJLyogaW5pdCBmbGV4Y29wICovCiAJaWYgKChyZXQgPSBmbGV4Y29wX2RldmljZV9pbml0aWFsaXplKGZjKSkgIT0gMCkKIAkJZ290byBlcnJfdXNiX2V4aXQ7CiAKLS8qIHhmZXIgaW5pdCAqLworCS8qIHhmZXIgaW5pdCAqLwogCWlmICgocmV0ID0gZmxleGNvcF91c2JfdHJhbnNmZXJfaW5pdChmY191c2IpKSAhPSAwKQogCQlnb3RvIGVycl9mY19leGl0OwogCi0JaW5mbygiJXMgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIGFuZCBjb25uZWN0ZWQuIixEUklWRVJfTkFNRSk7CisJaW5mbygiJXMgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIGFuZCBjb25uZWN0ZWQuIiwgRFJJVkVSX05BTUUpOwogCXJldHVybiAwOwogCiBlcnJfZmNfZXhpdDoKQEAgLTUzNSwxMiArNTY2LDEyIEBACiAJZmxleGNvcF9kZXZpY2VfZXhpdChmY191c2ItPmZjX2Rldik7CiAJZmxleGNvcF91c2JfZXhpdChmY191c2IpOwogCWZsZXhjb3BfZGV2aWNlX2tmcmVlKGZjX3VzYi0+ZmNfZGV2KTsKLQlpbmZvKCIlcyBzdWNjZXNzZnVsbHkgZGVpbml0aWFsaXplZCBhbmQgZGlzY29ubmVjdGVkLiIsRFJJVkVSX05BTUUpOworCWluZm8oIiVzIHN1Y2Nlc3NmdWxseSBkZWluaXRpYWxpemVkIGFuZCBkaXNjb25uZWN0ZWQuIiwgRFJJVkVSX05BTUUpOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZmxleGNvcF91c2JfdGFibGUgW10gPSB7Ci0JICAgIHsgVVNCX0RFVklDRSgweDBhZjcsIDB4MDEwMSkgfSwKLQkgICAgeyB9CisJeyBVU0JfREVWSUNFKDB4MGFmNywgMHgwMTAxKSB9LAorCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHVzYiwgZmxleGNvcF91c2JfdGFibGUpOwogCkBAIC01NTcsMTAgKzU4OCw5IEBACiB7CiAJaW50IHJlc3VsdDsKIAlpZiAoKHJlc3VsdCA9IHVzYl9yZWdpc3RlcigmZmxleGNvcF91c2JfZHJpdmVyKSkpIHsKLQkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiAoJWQpIixyZXN1bHQpOworCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuICglZCkiLCByZXN1bHQpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtdXNiLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtdXNiLmgKaW5kZXggNjMwZTY0Ny4uOTI1MjlhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXVzYi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC11c2IuaApAQCAtMSwxNSArMSwyMCBAQAorLyoKKyAqIExpbnV4IGRyaXZlciBmb3IgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCisgKiBmbGV4Y29wLXVzYi5oIC0gaGVhZGVyIGZpbGUgZm9yIHRoZSBVU0IgcGFydAorICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCisgKi8KICNpZm5kZWYgX19GTEVYQ09QX1VTQl9IX0lOQ0xVREVEX18KICNkZWZpbmUgX19GTEVYQ09QX1VTQl9IX0lOQ0xVREVEX18KIAogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogCiAvKiB0cmFuc2ZlciBwYXJhbWV0ZXJzICovCi0jZGVmaW5lIEIyQzJfVVNCX0ZSQU1FU19QRVJfSVNPCQk0Ci0jZGVmaW5lIEIyQzJfVVNCX05VTV9JU09fVVJCCQk0CisjZGVmaW5lIEIyQzJfVVNCX0ZSQU1FU19QRVJfSVNPIDQKKyNkZWZpbmUgQjJDMl9VU0JfTlVNX0lTT19VUkIgNAogCi0jZGVmaW5lIEIyQzJfVVNCX0NUUkxfUElQRV9JTgkJdXNiX3JjdmN0cmxwaXBlKGZjX3VzYi0+dWRldiwwKQotI2RlZmluZSBCMkMyX1VTQl9DVFJMX1BJUEVfT1VUCQl1c2Jfc25kY3RybHBpcGUoZmNfdXNiLT51ZGV2LDApCi0jZGVmaW5lIEIyQzJfVVNCX0RBVEFfUElQRQkJCXVzYl9yY3Zpc29jcGlwZShmY191c2ItPnVkZXYsMHg4MSkKKyNkZWZpbmUgQjJDMl9VU0JfQ1RSTF9QSVBFX0lOIHVzYl9yY3ZjdHJscGlwZShmY191c2ItPnVkZXYsIDApCisjZGVmaW5lIEIyQzJfVVNCX0NUUkxfUElQRV9PVVQgdXNiX3NuZGN0cmxwaXBlKGZjX3VzYi0+dWRldiwgMCkKKyNkZWZpbmUgQjJDMl9VU0JfREFUQV9QSVBFIHVzYl9yY3Zpc29jcGlwZShmY191c2ItPnVkZXYsIDB4ODEpCiAKIHN0cnVjdCBmbGV4Y29wX3VzYiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CkBAIC0xOCw4ICsyMyw4IEBACiAJdTggKmlzb19idWZmZXI7CiAJaW50IGJ1ZmZlcl9zaXplOwogCWRtYV9hZGRyX3QgZG1hX2FkZHI7Ci0Jc3RydWN0IHVyYiAqaXNvX3VyYltCMkMyX1VTQl9OVU1fSVNPX1VSQl07CiAKKwlzdHJ1Y3QgdXJiICppc29fdXJiW0IyQzJfVVNCX05VTV9JU09fVVJCXTsKIAlzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjX2RldjsKIAogCXU4IHRtcF9idWZmZXJbMTAyMysxOTBdOwpAQCAtMzAsMTQgKzM1LDYgQEAKIC8qIHJlcXVlc3QgdHlwZXMgVE9ETyBXaGF0IGlzIGl0cyB1c2U/Ki8KIHR5cGVkZWYgZW51bSB7CiAKLS8qIHNvbWV0aGluZyBpcyB3cm9uZyB3aXRoIHRoaXMgcGFydAotCVJUWVBFX1JFQURfRFcgICAgICAgICA9ICgxIDw8IDYpLAotCVJUWVBFX1dSSVRFX0RXXzEgICAgICA9ICgzIDw8IDYpLAotCVJUWVBFX1JFQURfVjhfTUVNT1JZICA9ICg2IDw8IDYpLAotCVJUWVBFX1dSSVRFX1Y4X01FTU9SWSA9ICg3IDw8IDYpLAotCVJUWVBFX1dSSVRFX1Y4X0ZMQVNIICA9ICg4IDw8IDYpLAotCVJUWVBFX0dFTkVSSUMgICAgICAgICA9ICg5IDw8IDYpLAotKi8KIH0gZmxleGNvcF91c2JfcmVxdWVzdF90eXBlX3Q7CiAjZW5kaWYKIApAQCAtNDcsNyArNDQsNiBAQAogCUIyQzJfVVNCX1JFQURfVjhfTUVNICA9IDB4MDUsCiAJQjJDMl9VU0JfUkVBRF9SRUcgICAgID0gMHgwOCwKIAlCMkMyX1VTQl9XUklURV9SRUcgICAgPSAweDBBLAotLyoJQjJDMl9VU0JfV1JJVEVSRUdMTyAgID0gMHgwQSwgKi8KIAlCMkMyX1VTQl9XUklURVJFR0hJICAgPSAweDBCLAogCUIyQzJfVVNCX0ZMQVNIX0JMT0NLICA9IDB4MTAsCiAJQjJDMl9VU0JfSTJDX1JFUVVFU1QgID0gMHgxMSwKQEAgLTYyLDE1ICs1OCwxMyBAQAogCVVTQl9GVU5DX0kyQ19SRVBFQVRXUklURSA9IDB4MDQsCiAJVVNCX0ZVTkNfR0VUX0RFU0NSSVBUT1IgID0gMHgwNSwKIAlVU0JfRlVOQ19JMkNfUkVQRUFUUkVBRCAgPSAweDA2LAotLyogREtUIDAyMDIwOCAtIGFkZCB0aGlzIHRvIHN1cHBvcnQgc3BlY2lhbCBjYXNlIG9mIERpU0VxQyAqLworCS8qIERLVCAwMjAyMDggLSBhZGQgdGhpcyB0byBzdXBwb3J0IHNwZWNpYWwgY2FzZSBvZiBEaVNFcUMgKi8KIAlVU0JfRlVOQ19JMkNfQ0hFQ0tXUklURSAgPSAweDA3LAogCVVTQl9GVU5DX0kyQ19DSEVDS1JFU1VMVCA9IDB4MDgsCiB9IGZsZXhjb3BfdXNiX2kyY19mdW5jdGlvbl90OwogCi0vKgotICogZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3IgVVRJTElUWSByZXF1ZXN0IDB4MTIKLSAqIERLVCAwMjAzMDQgLSBuZXcgdXRpbGl0eSBmdW5jdGlvbgotICovCisvKiBmdW5jdGlvbiBkZWZpbml0aW9uIGZvciBVVElMSVRZIHJlcXVlc3QgMHgxMgorICogREtUIDAyMDMwNCAtIG5ldyB1dGlsaXR5IGZ1bmN0aW9uICovCiB0eXBlZGVmIGVudW0gewogCVVUSUxJVFlfU0VUX0ZJTFRFUiAgICAgICAgICA9IDB4MDEsCiAJVVRJTElUWV9EQVRBX0VOQUJMRSAgICAgICAgID0gMHgwMiwKQEAgLTg0LDcgKzc4LDcgQEAKIAlVVElMSVRZX0RBVEFfUkVTRVQgICAgICAgICAgPSAweDBBLAogCVVUSUxJVFlfR0VUX0RBVEFfU1RBVFVTICAgICA9IDB4MTAsCiAJVVRJTElUWV9HRVRfVjhfUkVHICAgICAgICAgID0gMHgxMSwKLS8qIERLVCAwMjAzMjYgLSBhZGQgZnVuY3Rpb24gZm9yIHYxLjE0ICovCisJLyogREtUIDAyMDMyNiAtIGFkZCBmdW5jdGlvbiBmb3IgdjEuMTQgKi8KIAlVVElMSVRZX1NSQU1fV1JJVEUgICAgICAgICAgPSAweDEyLAogCVVUSUxJVFlfU1JBTV9SRUFEICAgICAgICAgICA9IDB4MTMsCiAJVVRJTElUWV9TUkFNX1RFU1RGSUxMICAgICAgID0gMHgxNCwKQEAgLTkyLDEzICs4NiwxMyBAQAogCVVUSUxJVFlfU1JBTV9URVNUVkVSSUZZICAgICA9IDB4MTYsCiB9IGZsZXhjb3BfdXNiX3V0aWxpdHlfZnVuY3Rpb25fdDsKIAotI2RlZmluZSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9SVyAgMSpIWiAgICAgICAvKiAxIHMgKi8KLSNkZWZpbmUgQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fUkRXIDMqSFogICAgICAgLyogMyBzICovCi0jZGVmaW5lIEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1dEVyAxKkhaICAgICAgIC8qIDEgcyAqLworI2RlZmluZSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9SVyAoMSpIWikKKyNkZWZpbmUgQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fUkRXICgzKkhaKQorI2RlZmluZSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9XRFcgKDEqSFopCiAKLSNkZWZpbmUgQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fVjhSRUFEICAgMypIWiAgLyogMyBzICovCi0jZGVmaW5lIEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1Y4V1JJVEUgIDMqSFogIC8qIDMgcyAqLwotI2RlZmluZSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9WOEZMQVNIICAzKkhaICAvKiAzIHMgKi8KKyNkZWZpbmUgQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fVjhSRUFEICgzKkhaKQorI2RlZmluZSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9WOFdSSVRFICgzKkhaKQorI2RlZmluZSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9WOEZMQVNIICgzKkhaKQogCiB0eXBlZGVmIGVudW0gewogCVY4X01FTU9SWV9QQUdFX0RWQl9DSSA9IDB4MjAsCkBAIC0xMDcsMTMgKzEwMSwxMSBAQAogCVY4X01FTU9SWV9QQUdFX0ZMQVNIICA9IDB4ODAKIH0gZmxleGNvcF91c2JfbWVtX3BhZ2VfdDsKIAotI2RlZmluZSBWOF9NRU1PUllfRVhURU5ERUQgICAgICAoMSA8PCAxNSkKLQotI2RlZmluZSBVU0JfTUVNX1JFQURfTUFYICAgICAgICAgICAgICAgIDMyCi0jZGVmaW5lIFVTQl9NRU1fV1JJVEVfTUFYICAgICAgICAgICAgICAgMQotI2RlZmluZSBVU0JfRkxBU0hfTUFYICAgICAgICAgICAgICAgICAgIDgKLQotI2RlZmluZSBWOF9NRU1PUllfUEFHRV9TSVpFICAgICAweDgwMDAgICAgICAvLyAzMksKLSNkZWZpbmUgVjhfTUVNT1JZX1BBR0VfTUFTSyAgICAgMHg3RkZGCisjZGVmaW5lIFY4X01FTU9SWV9FWFRFTkRFRCAoMSA8PCAxNSkKKyNkZWZpbmUgVVNCX01FTV9SRUFEX01BWCAgIDMyCisjZGVmaW5lIFVTQl9NRU1fV1JJVEVfTUFYICAgMQorI2RlZmluZSBVU0JfRkxBU0hfTUFYICAgICAgIDgKKyNkZWZpbmUgVjhfTUVNT1JZX1BBR0VfU0laRSAweDgwMDAgLyogMzJLICovCisjZGVmaW5lIFY4X01FTU9SWV9QQUdFX01BU0sgMHg3RkZGCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AuYwppbmRleCA5MTA2ODk1Li4yZGYxYjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AuYwpAQCAtMSwyMiArMSwyMCBAQAogLyoKLSAqIGZsZXhjb3AuYyAtIGRyaXZlciBmb3IgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTUgUGF0cmljayBCb2V0dGNoZXIgPHBhdHJpY2suYm9ldHRjaGVyQGRlc3kuZGU+Ci0gKgotICogYmFzZWQgb24gdGhlIHNreXN0YXIyLWRyaXZlcgotICogQ29weXJpZ2h0IChDKSAyMDAzIFZhZGltIENhdGFuYSwgc2t5c3RhckBtb2xkb3ZhLmNjCisgKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQorICogZmxleGNvcC5jIC0gbWFpbiBtb2R1bGUgcGFydAorICogQ29weXJpZ2h0IChDKSAyMDA0LTkgUGF0cmljayBCb2V0dGNoZXIgPHBhdHJpY2suYm9ldHRjaGVyQGRlc3kuZGU+CisgKiBiYXNlZCBvbiBza3lzdGFyMi1kcml2ZXIgQ29weXJpZ2h0IChDKSAyMDAzIFZhZGltIENhdGFuYSwgc2t5c3RhckBtb2xkb3ZhLmNjCiAgKgogICogQWNrbm93bGVkZ2VtZW50czoKLSAqICAgICBKb2huIEp1cnJpdXMgZnJvbSBCQlRJLCBJbmMuIGZvciBleHRlbnNpdmUgc3VwcG9ydCB3aXRoCi0gKiAgICAgICAgIGNvZGUgZXhhbXBsZXMgYW5kIGRhdGEgYm9va3MKLSAqCi0gKiAgICAgQmphcm5lIFN0ZWluc2JvLCBiamFybmUgYXQgc3RlaW5zYm8uY29tIChzb21lIGlkZWFzIGZvciByZXdyaXRpbmcpCisgKiAgIEpvaG4gSnVycml1cyBmcm9tIEJCVEksIEluYy4gZm9yIGV4dGVuc2l2ZSBzdXBwb3J0CisgKiAgICAgICAgICAgICAgICAgICAgd2l0aCBjb2RlIGV4YW1wbGVzIGFuZCBkYXRhIGJvb2tzCisgKiAgIEJqYXJuZSBTdGVpbnNibywgYmphcm5lIGF0IHN0ZWluc2JvLmNvbSAoc29tZSBpZGVhcyBmb3IgcmV3cml0aW5nKQogICoKICAqIENvbnRyaWJ1dGlvbnMgdG8gdGhlIHNreXN0YXIyLWRyaXZlciBoYXZlIGJlZW4gZG9uZSBieQotICogICAgIFZpbmNlbnpvIERpIE1hc3NhLCBoYXdrLml0IGF0IHRpc2NhbGluZXQuaXQgKHNldmVyYWwgRGlTRXFDIGZpeGVzKQotICogICAgIFJvYmVydG8gUmFndXNhLCByLnJhZ3VzYSBhdCBsaWJlcm8uaXQgKHBvbGlzaGluZywgcmVzdHlsaW5nIHRoZSBjb2RlKQotICogICAgIE5pa2xhcyBQZWluZWNrZSwgcGVpbmVja2UgYXQgZ2R2LnVuaS1oYW5ub3Zlci5kZSAoaGFyZHdhcmUgcGlkL21hYyBmaWx0ZXJpbmcpCi0gKgorICogICBWaW5jZW56byBEaSBNYXNzYSwgaGF3ay5pdCBhdCB0aXNjYWxpbmV0Lml0IChzZXZlcmFsIERpU0VxQyBmaXhlcykKKyAqICAgUm9iZXJ0byBSYWd1c2EsIHIucmFndXNhIGF0IGxpYmVyby5pdCAocG9saXNoaW5nLCByZXN0eWxpbmcgdGhlIGNvZGUpCisgKiAgIFV3ZSBCdWdsYSwgdXdlLmJ1Z2xhIGF0IGdteC5kZSAoZG9pbmcgdGVzdHMsIHJlc3R5bGluZyBjb2RlLCB3cml0aW5nIGRvY3UpCisgKiAgIE5pa2xhcyBQZWluZWNrZSwgcGVpbmVja2UgYXQgZ2R2LnVuaS1oYW5ub3Zlci5kZSAoaGFyZHdhcmUgcGlkL21hYworICogICAgICAgICAgICAgICBmaWx0ZXJpbmcpCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC00Niw3ICs0NCwxMCBAQAogCiBpbnQgYjJjMl9mbGV4Y29wX2RlYnVnOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBiMmMyX2ZsZXhjb3BfZGVidWcsICBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1ZyBsZXZlbCAoMT1pbmZvLDI9dHVuZXIsND1pMmMsOD10cywxNj1zcmFtLDMyPXJlZyAofC1hYmxlKSkuIiBERUJTVEFUVVMpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywKKwkJInNldCBkZWJ1ZyBsZXZlbCAoMT1pbmZvLDI9dHVuZXIsND1pMmMsOD10cywiCisJCSIxNj1zcmFtLDMyPXJlZyAofC1hYmxlKSkuIgorCQlERUJTVEFUVVMpOwogI3VuZGVmIERFQlNUQVRVUwogCiBEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKQEAgLTU3LDM3ICs1OCwzNiBAQAogc3RhdGljIGludCBmbGV4Y29wX2R2Yl9zdGFydF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZCkKIHsKIAlzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjID0gZHZiZG14ZmVlZC0+ZGVtdXgtPnByaXY7Ci0JcmV0dXJuIGZsZXhjb3BfcGlkX2ZlZWRfY29udHJvbChmYyxkdmJkbXhmZWVkLDEpOworCXJldHVybiBmbGV4Y29wX3BpZF9mZWVkX2NvbnRyb2woZmMsIGR2YmRteGZlZWQsIDEpOwogfQogCiBzdGF0aWMgaW50IGZsZXhjb3BfZHZiX3N0b3BfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQpCiB7CiAJc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyA9IGR2YmRteGZlZWQtPmRlbXV4LT5wcml2OwotCXJldHVybiBmbGV4Y29wX3BpZF9mZWVkX2NvbnRyb2woZmMsZHZiZG14ZmVlZCwwKTsKKwlyZXR1cm4gZmxleGNvcF9waWRfZmVlZF9jb250cm9sKGZjLCBkdmJkbXhmZWVkLCAwKTsKIH0KIAogc3RhdGljIGludCBmbGV4Y29wX2R2Yl9pbml0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpCiB7CiAJaW50IHJldCA9IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyKCZmYy0+ZHZiX2FkYXB0ZXIsCi0JCQkJICAgICAgICJGbGV4Q29wIERpZ2l0YWwgVFYgZGV2aWNlIiwgZmMtPm93bmVyLAotCQkJCSAgICAgICBmYy0+ZGV2LCBhZGFwdGVyX25yKTsKKwkJCSJGbGV4Q29wIERpZ2l0YWwgVFYgZGV2aWNlIiwgZmMtPm93bmVyLAorCQkJZmMtPmRldiwgYWRhcHRlcl9ucik7CiAJaWYgKHJldCA8IDApIHsKIAkJZXJyKCJlcnJvciByZWdpc3RlcmluZyBEVkIgYWRhcHRlciIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAlmYy0+ZHZiX2FkYXB0ZXIucHJpdiA9IGZjOwogCi0JZmMtPmRlbXV4LmRteC5jYXBhYmlsaXRpZXMgPSAoRE1YX1RTX0ZJTFRFUklORyB8IERNWF9TRUNUSU9OX0ZJTFRFUklORyB8IERNWF9NRU1PUllfQkFTRURfRklMVEVSSU5HKTsKKwlmYy0+ZGVtdXguZG14LmNhcGFiaWxpdGllcyA9IChETVhfVFNfRklMVEVSSU5HIHwgRE1YX1NFQ1RJT05fRklMVEVSSU5HCisJCQl8IERNWF9NRU1PUllfQkFTRURfRklMVEVSSU5HKTsKIAlmYy0+ZGVtdXgucHJpdiA9IGZjOwotCiAJZmMtPmRlbXV4LmZpbHRlcm51bSA9IGZjLT5kZW11eC5mZWVkbnVtID0gRkNfTUFYX0ZFRUQ7Ci0KIAlmYy0+ZGVtdXguc3RhcnRfZmVlZCA9IGZsZXhjb3BfZHZiX3N0YXJ0X2ZlZWQ7CiAJZmMtPmRlbXV4LnN0b3BfZmVlZCA9IGZsZXhjb3BfZHZiX3N0b3BfZmVlZDsKIAlmYy0+ZGVtdXgud3JpdGVfdG9fZGVjb2RlciA9IE5VTEw7CiAKIAlpZiAoKHJldCA9IGR2Yl9kbXhfaW5pdCgmZmMtPmRlbXV4KSkgPCAwKSB7Ci0JCWVycigiZHZiX2RteCBmYWlsZWQ6IGVycm9yICVkIixyZXQpOworCQllcnIoImR2Yl9kbXggZmFpbGVkOiBlcnJvciAlZCIsIHJldCk7CiAJCWdvdG8gZXJyX2RteDsKIAl9CiAKQEAgLTk3LDIzICs5NywyMyBAQAogCWZjLT5kbXhkZXYuZGVtdXggPSAmZmMtPmRlbXV4LmRteDsKIAlmYy0+ZG14ZGV2LmNhcGFiaWxpdGllcyA9IDA7CiAJaWYgKChyZXQgPSBkdmJfZG14ZGV2X2luaXQoJmZjLT5kbXhkZXYsICZmYy0+ZHZiX2FkYXB0ZXIpKSA8IDApIHsKLQkJZXJyKCJkdmJfZG14ZGV2X2luaXQgZmFpbGVkOiBlcnJvciAlZCIscmV0KTsKKwkJZXJyKCJkdmJfZG14ZGV2X2luaXQgZmFpbGVkOiBlcnJvciAlZCIsIHJldCk7CiAJCWdvdG8gZXJyX2RteF9kZXY7CiAJfQogCiAJaWYgKChyZXQgPSBmYy0+ZGVtdXguZG14LmFkZF9mcm9udGVuZCgmZmMtPmRlbXV4LmRteCwgJmZjLT5od19mcm9udGVuZCkpIDwgMCkgewotCQllcnIoImFkZGluZyBod19mcm9udGVuZCB0byBkbXggZmFpbGVkOiBlcnJvciAlZCIscmV0KTsKKwkJZXJyKCJhZGRpbmcgaHdfZnJvbnRlbmQgdG8gZG14IGZhaWxlZDogZXJyb3IgJWQiLCByZXQpOwogCQlnb3RvIGVycl9kbXhfYWRkX2h3X2Zyb250ZW5kOwogCX0KIAogCWZjLT5tZW1fZnJvbnRlbmQuc291cmNlID0gRE1YX01FTU9SWV9GRTsKIAlpZiAoKHJldCA9IGZjLT5kZW11eC5kbXguYWRkX2Zyb250ZW5kKCZmYy0+ZGVtdXguZG14LCAmZmMtPm1lbV9mcm9udGVuZCkpIDwgMCkgewotCQllcnIoImFkZGluZyBtZW1fZnJvbnRlbmQgdG8gZG14IGZhaWxlZDogZXJyb3IgJWQiLHJldCk7CisJCWVycigiYWRkaW5nIG1lbV9mcm9udGVuZCB0byBkbXggZmFpbGVkOiBlcnJvciAlZCIsIHJldCk7CiAJCWdvdG8gZXJyX2RteF9hZGRfbWVtX2Zyb250ZW5kOwogCX0KIAogCWlmICgocmV0ID0gZmMtPmRlbXV4LmRteC5jb25uZWN0X2Zyb250ZW5kKCZmYy0+ZGVtdXguZG14LCAmZmMtPmh3X2Zyb250ZW5kKSkgPCAwKSB7Ci0JCWVycigiY29ubmVjdCBmcm9udGVuZCBmYWlsZWQ6IGVycm9yICVkIixyZXQpOworCQllcnIoImNvbm5lY3QgZnJvbnRlbmQgZmFpbGVkOiBlcnJvciAlZCIsIHJldCk7CiAJCWdvdG8gZXJyX2Nvbm5lY3RfZnJvbnRlbmQ7CiAJfQogCkBAIC0xMjMsOSArMTIzLDkgQEAKIAlyZXR1cm4gMDsKIAogZXJyX2Nvbm5lY3RfZnJvbnRlbmQ6Ci0JZmMtPmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmZjLT5kZW11eC5kbXgsJmZjLT5tZW1fZnJvbnRlbmQpOworCWZjLT5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZmYy0+ZGVtdXguZG14LCAmZmMtPm1lbV9mcm9udGVuZCk7CiBlcnJfZG14X2FkZF9tZW1fZnJvbnRlbmQ6Ci0JZmMtPmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmZjLT5kZW11eC5kbXgsJmZjLT5od19mcm9udGVuZCk7CisJZmMtPmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmZjLT5kZW11eC5kbXgsICZmYy0+aHdfZnJvbnRlbmQpOwogZXJyX2RteF9hZGRfaHdfZnJvbnRlbmQ6CiAJZHZiX2RteGRldl9yZWxlYXNlKCZmYy0+ZG14ZGV2KTsKIGVycl9kbXhfZGV2OgpAQCAtMTQxLDEyICsxNDEsMTMgQEAKIAkJZHZiX25ldF9yZWxlYXNlKCZmYy0+ZHZibmV0KTsKIAogCQlmYy0+ZGVtdXguZG14LmNsb3NlKCZmYy0+ZGVtdXguZG14KTsKLQkJZmMtPmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmZjLT5kZW11eC5kbXgsJmZjLT5tZW1fZnJvbnRlbmQpOwotCQlmYy0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZmMtPmRlbXV4LmRteCwmZmMtPmh3X2Zyb250ZW5kKTsKKwkJZmMtPmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmZjLT5kZW11eC5kbXgsCisJCQkmZmMtPm1lbV9mcm9udGVuZCk7CisJCWZjLT5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZmYy0+ZGVtdXguZG14LAorCQkJJmZjLT5od19mcm9udGVuZCk7CiAJCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZmMtPmRteGRldik7CiAJCWR2Yl9kbXhfcmVsZWFzZSgmZmMtPmRlbXV4KTsKIAkJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmZmMtPmR2Yl9hZGFwdGVyKTsKLQogCQlkZWJfaW5mbygiZGVpbml0aWFsaXplZCBkdmIgc3R1ZmZcbiIpOwogCX0KIAlmYy0+aW5pdF9zdGF0ZSAmPSB+RkNfU1RBVEVfRFZCX0lOSVQ7CkBAIC0xNjgsOSArMTY5LDkgQEAKIAogc3RhdGljIHZvaWQgZmxleGNvcF9yZXNldChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjKQogewotCWZsZXhjb3BfaWJpX3ZhbHVlIHYyMTAsdjIwNDsKKwlmbGV4Y29wX2liaV92YWx1ZSB2MjEwLCB2MjA0OwogCi0vKiByZXNldCB0aGUgZmxleGNvcCBpdHNlbGYgKi8KKwkvKiByZXNldCB0aGUgZmxleGNvcCBpdHNlbGYgKi8KIAlmYy0+d3JpdGVfaWJpX3JlZyhmYyxjdHJsXzIwOCxpYmlfemVybyk7CiAKIAl2MjEwLnJhdyA9IDA7CkBAIC0xODMsMTMgKzE4NCwxMSBAQAogCXYyMTAuc3dfcmVzZXRfMjEwLnJlc2V0X2Jsb2NrXzYwMCA9IDE7CiAJdjIxMC5zd19yZXNldF8yMTAucmVzZXRfYmxvY2tfNzAwID0gMTsKIAl2MjEwLnN3X3Jlc2V0XzIxMC5CbG9ja19yZXNldF9lbmFibGUgPSAweGIyOwotCiAJdjIxMC5zd19yZXNldF8yMTAuU3BlY2lhbF9jb250cm9scyA9IDB4YzI1OTsKLQogCWZjLT53cml0ZV9pYmlfcmVnKGZjLHN3X3Jlc2V0XzIxMCx2MjEwKTsKIAltc2xlZXAoMSk7CiAKLS8qIHJlc2V0IHRoZSBwZXJpcGhpY2FsIGRldmljZXMgKi8KKwkvKiByZXNldCB0aGUgcGVyaXBoaWNhbCBkZXZpY2VzICovCiAKIAl2MjA0ID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxtaXNjXzIwNCk7CiAJdjIwNC5taXNjXzIwNC5QZXJfcmVzZXRfc2lnID0gMDsKQEAgLTIwMSwyNSArMjAwLDI0IEBACiAKIHZvaWQgZmxleGNvcF9yZXNldF9ibG9ja18zMDAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYykKIHsKLQlmbGV4Y29wX2liaV92YWx1ZSB2MjA4X3NhdmUgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLGN0cmxfMjA4KSwKLQkJCQkJICB2MjEwID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxzd19yZXNldF8yMTApOworCWZsZXhjb3BfaWJpX3ZhbHVlIHYyMDhfc2F2ZSA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIGN0cmxfMjA4KSwKKwkJCSAgdjIxMCA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIHN3X3Jlc2V0XzIxMCk7CiAKLQlkZWJfcmR1bXAoIjIwODogJTA4eCwgMjEwOiAlMDh4XG4iLHYyMDhfc2F2ZS5yYXcsdjIxMC5yYXcpOwotCisJZGViX3JkdW1wKCIyMDg6ICUwOHgsIDIxMDogJTA4eFxuIiwgdjIwOF9zYXZlLnJhdywgdjIxMC5yYXcpOwogCWZjLT53cml0ZV9pYmlfcmVnKGZjLGN0cmxfMjA4LGliaV96ZXJvKTsKIAogCXYyMTAuc3dfcmVzZXRfMjEwLnJlc2V0X2Jsb2NrXzMwMCA9IDE7CiAJdjIxMC5zd19yZXNldF8yMTAuQmxvY2tfcmVzZXRfZW5hYmxlID0gMHhiMjsKIAogCWZjLT53cml0ZV9pYmlfcmVnKGZjLHN3X3Jlc2V0XzIxMCx2MjEwKTsKLQl1ZGVsYXkoMTAwMCk7CiAJZmMtPndyaXRlX2liaV9yZWcoZmMsY3RybF8yMDgsdjIwOF9zYXZlKTsKIH0KIAogc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmbGV4Y29wX2RldmljZV9rbWFsbG9jKHNpemVfdCBidXNfc3BlY2lmaWNfbGVuKQogewogCXZvaWQgKmJ1czsKLQlzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZsZXhjb3BfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmbGV4Y29wX2RldmljZSksCisJCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFmYykgewogCQllcnIoIm5vIG1lbW9yeSIpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTI1NCw3ICsyNTIsNiBAQAogCWZsZXhjb3BfZGV0ZXJtaW5lX3JldmlzaW9uKGZjKTsKIAlmbGV4Y29wX3NyYW1faW5pdChmYyk7CiAJZmxleGNvcF9od19maWx0ZXJfaW5pdChmYyk7Ci0KIAlmbGV4Y29wX3NtY19jdHJsKGZjLCAwKTsKIAogCWlmICgocmV0ID0gZmxleGNvcF9kdmJfaW5pdChmYykpKQpAQCAtMjc5LDcgKzI3Niw2IEBACiAJCWdvdG8gZXJyb3I7CiAKIAlmbGV4Y29wX2RldmljZV9uYW1lKGZjLCJpbml0aWFsaXphdGlvbiBvZiIsImNvbXBsZXRlIik7Ci0KIAlyZXR1cm4gMDsKIAogZXJyb3I6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5oCmluZGV4IDBjZWJlMWQuLjg5N2IxMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5oCkBAIC0xLDkgKzEsNyBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpbnV4IGRyaXZlciB0aGUgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCi0gKgotICogZmxleGNvcC5oIC0gcHJpdmF0ZSBoZWFkZXIgZmlsZSBmb3IgYWxsIGZsZXhjb3AtY2hpcC1zb3VyY2UgZmlsZXMuCi0gKgotICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICogTGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKKyAqIGZsZXhjb3AuaCAtIHByaXZhdGUgaGVhZGVyIGZpbGUgZm9yIGFsbCBmbGV4Y29wLWNoaXAtc291cmNlIGZpbGVzCisgKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24KICAqLwogI2lmbmRlZiBfX0ZMRVhDT1BfSF9fCiAjZGVmaW5lIF9fRkxFWENPUF9IX19fCkBAIC0yMSwxMSArMTksMTEgQEAKICNkZWZpbmUgZHByaW50ayhsZXZlbCxhcmdzLi4uKQogI2VuZGlmCiAKLSNkZWZpbmUgZGViX2luZm8oYXJncy4uLikgIGRwcmludGsoMHgwMSxhcmdzKQotI2RlZmluZSBkZWJfdHVuZXIoYXJncy4uLikgZHByaW50aygweDAyLGFyZ3MpCi0jZGVmaW5lIGRlYl9pMmMoYXJncy4uLikgICBkcHJpbnRrKDB4MDQsYXJncykKLSNkZWZpbmUgZGViX3RzKGFyZ3MuLi4pICAgIGRwcmludGsoMHgwOCxhcmdzKQotI2RlZmluZSBkZWJfc3JhbShhcmdzLi4uKSAgZHByaW50aygweDEwLGFyZ3MpCi0jZGVmaW5lIGRlYl9yZHVtcChhcmdzLi4uKSAgZHByaW50aygweDIwLGFyZ3MpCisjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pIGRwcmludGsoMHgwMSwgYXJncykKKyNkZWZpbmUgZGViX3R1bmVyKGFyZ3MuLi4pIGRwcmludGsoMHgwMiwgYXJncykKKyNkZWZpbmUgZGViX2kyYyhhcmdzLi4uKSBkcHJpbnRrKDB4MDQsIGFyZ3MpCisjZGVmaW5lIGRlYl90cyhhcmdzLi4uKSBkcHJpbnRrKDB4MDgsIGFyZ3MpCisjZGVmaW5lIGRlYl9zcmFtKGFyZ3MuLi4pIGRwcmludGsoMHgxMCwgYXJncykKKyNkZWZpbmUgZGViX3JkdW1wKGFyZ3MuLi4pIGRwcmludGsoMHgyMCwgYXJncykKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3BfaWJpX3ZhbHVlX2JlLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3BfaWJpX3ZhbHVlX2JlLmgKaW5kZXggZWQ5YTY3NS4uOGY2NGJkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wX2liaV92YWx1ZV9iZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcF9pYmlfdmFsdWVfYmUuaApAQCAtMSwxMCArMSw3IEBACi0vKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQotICoKKy8qIExpbnV4IGRyaXZlciBmb3IgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCiAgKiByZWdpc3RlciBkZXNjcmlwdGlvbnMKLSAqCi0gKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisgKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24KICAqLwotCiAvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IHRoaW5ncyBoZXJlLiAqLwogI2lmbmRlZiBfX0ZMRVhDT1BfSUJJX1ZBTFVFX0lOQ0xVREVEX18KICNkZWZpbmUgX19GTEVYQ09QX0lCSV9WQUxVRV9JTkNMVURFRF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3BfaWJpX3ZhbHVlX2xlLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3BfaWJpX3ZhbHVlX2xlLmgKaW5kZXggNDlmMjMxNS4uYzc1ODMwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wX2liaV92YWx1ZV9sZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcF9pYmlfdmFsdWVfbGUuaApAQCAtMSwxMCArMSw3IEBACi0vKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQotICoKKy8qIExpbnV4IGRyaXZlciBmb3IgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCiAgKiByZWdpc3RlciBkZXNjcmlwdGlvbnMKLSAqCi0gKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisgKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24KICAqLwotCiAvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQsIGRvIG5vdCBlZGl0IHRoaW5ncyBoZXJlLiAqLwogI2lmbmRlZiBfX0ZMRVhDT1BfSUJJX1ZBTFVFX0lOQ0xVREVEX18KICNkZWZpbmUgX19GTEVYQ09QX0lCSV9WQUxVRV9JTkNMVURFRF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvS2NvbmZpZwppbmRleCAyN2VkYjBlLi44NjY4ZTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L0tjb25maWcKQEAgLTgsNyArOCw3IEBACiAJc2VsZWN0IERWQl9PUjUxMjExIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9MR0RUMzMwWCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfWkwxMDM1MyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFBDSSBjYXJkcyBiYXNlZCBvbiB0aGUgQnQ4eHggUENJIGJyaWRnZS4gRXhhbXBsZXMgYXJlCiAJICB0aGUgTmVidWxhIGNhcmRzLCB0aGUgUGlubmFjbGUgUENUViBjYXJkcywgdGhlIFR3aW5oYW4gRFNUIGNhcmRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NhLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY2EuYwppbmRleCAwMjU4NDUxLi40NjAxYjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY2EuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY2EuYwpAQCAtNTUyLDE2ICs1NTIsMTkgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IGRzdF9jYV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBpb2N0bF9hcmcpCitzdGF0aWMgbG9uZyBkc3RfY2FfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgaW9jdGxfYXJnKQogewotCXN0cnVjdCBkdmJfZGV2aWNlKiBkdmJkZXYgPSAoc3RydWN0IGR2Yl9kZXZpY2UqKSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRzdF9zdGF0ZSogc3RhdGUgPSAoc3RydWN0IGRzdF9zdGF0ZSopIGR2YmRldi0+cHJpdjsKKwlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2OworCXN0cnVjdCBkc3Rfc3RhdGUgKnN0YXRlOwogCXN0cnVjdCBjYV9zbG90X2luZm8gKnBfY2Ffc2xvdF9pbmZvOwogCXN0cnVjdCBjYV9jYXBzICpwX2NhX2NhcHM7CiAJc3RydWN0IGNhX21zZyAqcF9jYV9tZXNzYWdlOwogCXZvaWQgX191c2VyICphcmcgPSAodm9pZCBfX3VzZXIgKilpb2N0bF9hcmc7CiAJaW50IHJlc3VsdCA9IDA7CiAKKwlsb2NrX2tlcm5lbCgpOworCWR2YmRldiA9IChzdHJ1Y3QgZHZiX2RldmljZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdGF0ZSA9IChzdHJ1Y3QgZHN0X3N0YXRlICopZHZiZGV2LT5wcml2OwogCXBfY2FfbWVzc2FnZSA9IGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgY2FfbXNnKSwgR0ZQX0tFUk5FTCk7CiAJcF9jYV9zbG90X2luZm8gPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGNhX3Nsb3RfaW5mbyksIEdGUF9LRVJORUwpOwogCXBfY2FfY2FwcyA9IGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgY2FfY2FwcyksIEdGUF9LRVJORUwpOwpAQCAtNjQ3LDYgKzY1MCw3IEBACiAJa2ZyZWUgKHBfY2Ffc2xvdF9pbmZvKTsKIAlrZnJlZSAocF9jYV9jYXBzKTsKIAorCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC02ODIsOSArNjg2LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHN0X2NhX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkc3RfY2FfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKLQkuaW9jdGwgPSBkc3RfY2FfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsID0gZHN0X2NhX2lvY3RsLAogCS5vcGVuID0gZHN0X2NhX29wZW4sCiAJLnJlbGVhc2UgPSBkc3RfY2FfcmVsZWFzZSwKIAkucmVhZCA9IGRzdF9jYV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYwppbmRleCA0ODc2MmEyLi5iMTg1N2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYwpAQCAtODE0LDcgKzgxNCw3IEBACiAKIAltdXRleF9pbml0KCZjYXJkLT5sb2NrKTsKIAljYXJkLT5idHR2X25yID0gc3ViLT5jb3JlLT5ucjsKLQlzdHJuY3B5KGNhcmQtPmNhcmRfbmFtZSwgc3ViLT5jb3JlLT5uYW1lLCBzaXplb2Yoc3ViLT5jb3JlLT5uYW1lKSk7CisJc3RybGNweShjYXJkLT5jYXJkX25hbWUsIHN1Yi0+Y29yZS0+djRsMl9kZXYubmFtZSwgc2l6ZW9mKGNhcmQtPmNhcmRfbmFtZSkpOwogCWNhcmQtPmkyY19hZGFwdGVyID0gJnN1Yi0+Y29yZS0+aTJjX2FkYXA7CiAKIAlzd2l0Y2goc3ViLT5jb3JlLT50eXBlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9LY29uZmlnCmluZGV4IDQzZjRkNDQuLmRlM2VlYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9LY29uZmlnCkBAIC04LDYgKzgsNyBAQAogCXNlbGVjdCBEVkJfU1RCNjAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfQ1gyNDExNiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfU0kyMVhYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IFZJREVPX0lSCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgY2FyZHMgYmFzZWQgb24gdGhlIFNETUMgRE0xMTA1IFBDSSBjaGlwIGxpa2UKIAkgIER2YldvcmxkIDIwMDIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYwppbmRleCBmNDhmNzNhLi41YjIwY2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jCkBAIC0xNTYsNDYgKzE1NiwxMiBAQAogCiBEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKIAotc3RhdGljIHUxNiBpcl9jb2Rlc19kbTExMDVfbmVjWzEyOF0gPSB7Ci0JWzB4MGFdID0gS0VZX1EsCQkvKnBvd2VyKi8KLQlbMHgwY10gPSBLRVlfTSwJCS8qbXV0ZSovCi0JWzB4MTFdID0gS0VZXzEsCi0JWzB4MTJdID0gS0VZXzIsCi0JWzB4MTNdID0gS0VZXzMsCi0JWzB4MTRdID0gS0VZXzQsCi0JWzB4MTVdID0gS0VZXzUsCi0JWzB4MTZdID0gS0VZXzYsCi0JWzB4MTddID0gS0VZXzcsCi0JWzB4MThdID0gS0VZXzgsCi0JWzB4MTldID0gS0VZXzksCi0JWzB4MTBdID0gS0VZXzAsCi0JWzB4MWNdID0gS0VZX1BBR0VVUCwJLypjaCsqLwotCVsweDBmXSA9IEtFWV9QQUdFRE9XTiwJLypjaC0qLwotCVsweDFhXSA9IEtFWV9PLAkJLyp2b2wrKi8KLQlbMHgwZV0gPSBLRVlfWiwJCS8qdm9sLSovCi0JWzB4MDRdID0gS0VZX1IsCQkvKnJlYyovCi0JWzB4MDldID0gS0VZX0QsCQkvKmZhdiovCi0JWzB4MDhdID0gS0VZX0JBQ0tTUEFDRSwJLypyZXdpbmQqLwotCVsweDA3XSA9IEtFWV9BLAkJLypmYXN0Ki8KLQlbMHgwYl0gPSBLRVlfUCwJCS8qcGF1c2UqLwotCVsweDAyXSA9IEtFWV9FU0MsCS8qY2FuY2VsKi8KLQlbMHgwM10gPSBLRVlfRywJCS8qdGFiKi8KLQlbMHgwMF0gPSBLRVlfVVAsCS8qdXAqLwotCVsweDFmXSA9IEtFWV9FTlRFUiwJLypvayovCi0JWzB4MDFdID0gS0VZX0RPV04sCS8qZG93biovCi0JWzB4MDVdID0gS0VZX0MsCQkvKmNhcCovCi0JWzB4MDZdID0gS0VZX1MsCQkvKnN0b3AqLwotCVsweDQwXSA9IEtFWV9GLAkJLypmdWxsKi8KLQlbMHgxZV0gPSBLRVlfVywJCS8qdHZtb2RlKi8KLQlbMHgxYl0gPSBLRVlfQiwJCS8qcmVjYWxsKi8KLX07Ci0KIC8qIGluZnJhcmVkIHJlbW90ZSBjb250cm9sICovCiBzdHJ1Y3QgaW5mcmFyZWQgewotCXUxNglrZXlfbWFwWzEyOF07CiAJc3RydWN0IGlucHV0X2RldgkqaW5wdXRfZGV2OworCXN0cnVjdCBpcl9pbnB1dF9zdGF0ZQlpcjsKIAljaGFyCQkJaW5wdXRfcGh5c1szMl07Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0CWlyX3Rhc2tsZXQ7CisJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CiAJdTMyCQkJaXJfY29tbWFuZDsKIH07CiAKQEAgLTIyMCwxMCArMTg2LDE0IEBACiAJLyogaTJjICovCiAJc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwOwogCisJLyogaXJxICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisKIAkvKiBkbWEgKi8KIAlkbWFfYWRkcl90IGRtYV9hZGRyOwogCXVuc2lnbmVkIGNoYXIgKnRzX2J1ZjsKIAl1MzIgd3JwOworCXUzMiBuZXh0d3JwOwogCXUzMiBidWZmZXJfc2l6ZTsKIAl1bnNpZ25lZCBpbnQJUGFja2V0RXJyb3JDb3VudDsKIAl1bnNpZ25lZCBpbnQgZG1hcnN0OwpAQCAtMjMzLDggKzIwMyw2IEBACiAKICNkZWZpbmUgZG1faW9fbWVtKHJlZykJKCh1bnNpZ25lZCBsb25nKSgmZG0xMTA1ZHZiLT5pb19tZW1bcmVnXSkpCiAKLXN0YXRpYyBzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmJfbG9jYWw7Ci0KIHN0YXRpYyBpbnQgZG0xMTA1X2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCiAJCQkgICAgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0pCiB7CkBAIC00MDcsMzggKzM3NSw2MSBAQAogCXJldHVybiAwOwogfQogCi0vKiBpciB0YXNrbGV0ICovCi1zdGF0aWMgdm9pZCBkbTExMDVfZW1pdF9rZXkodW5zaWduZWQgbG9uZyBwYXJtKQorLyogaXIgd29yayBoYW5kbGVyICovCitzdGF0aWMgdm9pZCBkbTExMDVfZW1pdF9rZXkoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBpbmZyYXJlZCAqaXIgPSAoc3RydWN0IGluZnJhcmVkICopIHBhcm07CisJc3RydWN0IGluZnJhcmVkICppciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW5mcmFyZWQsIHdvcmspOwogCXUzMiBpcmNvbSA9IGlyLT5pcl9jb21tYW5kOwogCXU4IGRhdGE7Ci0JdTE2IGtleWNvZGU7CisKKwlpZiAoaXJfZGVidWcpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWNlaXZlZCBieXRlIDB4JTA0eFxuIiwgX19mdW5jX18sIGlyY29tKTsKIAogCWRhdGEgPSAoaXJjb20gPj4gOCkgJiAweDdmOwogCi0JaW5wdXRfZXZlbnQoaXItPmlucHV0X2RldiwgRVZfTVNDLCBNU0NfUkFXLCAoMHgwMDAwZjggPDwgMTYpIHwgZGF0YSk7Ci0JaW5wdXRfZXZlbnQoaXItPmlucHV0X2RldiwgRVZfTVNDLCBNU0NfU0NBTiwgZGF0YSk7Ci0Ja2V5Y29kZSA9IGlyLT5rZXlfbWFwW2RhdGFdOworCWlyX2lucHV0X2tleWRvd24oaXItPmlucHV0X2RldiwgJmlyLT5pciwgZGF0YSwgZGF0YSk7CisJaXJfaW5wdXRfbm9rZXkoaXItPmlucHV0X2RldiwgJmlyLT5pcik7Cit9CiAKLQlpZiAoIWtleWNvZGUpCi0JCXJldHVybjsKKy8qIHdvcmsgaGFuZGxlciAqLworc3RhdGljIHZvaWQgZG0xMTA1X2RteF9idWZmZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YiA9CisJCQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkbTExMDVkdmIsIHdvcmspOworCXVuc2lnbmVkIGludCBuYnBhY2tldHM7CisJdTMyIG9sZHdycCA9IGRtMTEwNWR2Yi0+d3JwOworCXUzMiBuZXh0d3JwID0gZG0xMTA1ZHZiLT5uZXh0d3JwOwogCi0JaW5wdXRfZXZlbnQoaXItPmlucHV0X2RldiwgRVZfS0VZLCBrZXljb2RlLCAxKTsKLQlpbnB1dF9zeW5jKGlyLT5pbnB1dF9kZXYpOwotCWlucHV0X2V2ZW50KGlyLT5pbnB1dF9kZXYsIEVWX0tFWSwga2V5Y29kZSwgMCk7Ci0JaW5wdXRfc3luYyhpci0+aW5wdXRfZGV2KTsKKwlpZiAoISgoZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwXSA9PSAweDQ3KSAmJgorCQkJKGRtMTEwNWR2Yi0+dHNfYnVmW29sZHdycCArIDE4OF0gPT0gMHg0NykgJiYKKwkJCShkbTExMDVkdmItPnRzX2J1ZltvbGR3cnAgKyAxODggKiAyXSA9PSAweDQ3KSkpIHsKKwkJZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50Kys7CisJCS8qIGJhZCBwYWNrZXQgZm91bmQgKi8KKwkJaWYgKChkbTExMDVkdmItPlBhY2tldEVycm9yQ291bnQgPj0gMikgJiYKKwkJCQkoZG0xMTA1ZHZiLT5kbWFyc3QgPT0gMCkpIHsKKwkJCW91dGIoMSwgZG1faW9fbWVtKERNMTEwNV9SU1QpKTsKKwkJCWRtMTEwNWR2Yi0+d3JwID0gMDsKKwkJCWRtMTEwNWR2Yi0+UGFja2V0RXJyb3JDb3VudCA9IDA7CisJCQlkbTExMDVkdmItPmRtYXJzdCA9IDA7CisJCQlyZXR1cm47CisJCX0KKwl9CiAKKwlpZiAobmV4dHdycCA8IG9sZHdycCkgeworCQltZW1jcHkoZG0xMTA1ZHZiLT50c19idWYgKyBkbTExMDVkdmItPmJ1ZmZlcl9zaXplLAorCQkJCQkJZG0xMTA1ZHZiLT50c19idWYsIG5leHR3cnApOworCQluYnBhY2tldHMgPSAoKGRtMTEwNWR2Yi0+YnVmZmVyX3NpemUgLSBvbGR3cnApICsgbmV4dHdycCkgLyAxODg7CisJfSBlbHNlCisJCW5icGFja2V0cyA9IChuZXh0d3JwIC0gb2xkd3JwKSAvIDE4ODsKKworCWRtMTEwNWR2Yi0+d3JwID0gbmV4dHdycDsKKwlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoJmRtMTEwNWR2Yi0+ZGVtdXgsCisJCQkJCSZkbTExMDVkdmItPnRzX2J1ZltvbGR3cnBdLCBuYnBhY2tldHMpOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZG0xMTA1ZHZiX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiID0gZGV2X2lkOwotCXVuc2lnbmVkIGludCBwaWVjZTsKLQl1bnNpZ25lZCBpbnQgbmJwYWNrZXRzOwotCXUzMiBjb21tYW5kOwotCXUzMiBuZXh0d3JwOwotCXUzMiBvbGR3cnA7CiAKIAkvKiBSZWFkLVdyaXRlIElOU1RTIEFjaydzIEludGVycnVwdCBmb3IgRE0xMTA1IGNoaXAgMTYuMDMuMjAwOCAqLwogCXVuc2lnbmVkIGludCBpbnRzdHMgPSBpbmIoZG1faW9fbWVtKERNMTEwNV9JTlRTVFMpKTsKQEAgLTQ0Nyw3MSArNDM4LDI1IEBACiAJc3dpdGNoIChpbnRzdHMpIHsKIAljYXNlIElOVFNUU19UU0lSUToKIAljYXNlIChJTlRTVFNfVFNJUlEgfCBJTlRTVFNfSVIpOgotCQluZXh0d3JwID0gaW5sKGRtX2lvX21lbShETTExMDVfV1JQKSkgLQotCQkJaW5sKGRtX2lvX21lbShETTExMDVfU1RBRFIpKSA7Ci0JCW9sZHdycCA9IGRtMTEwNWR2Yi0+d3JwOwotCQlzcGluX2xvY2soJmRtMTEwNWR2Yi0+bG9jayk7Ci0JCWlmICghKChkbTExMDVkdmItPnRzX2J1ZltvbGR3cnBdID09IDB4NDcpICYmCi0JCQkJKGRtMTEwNWR2Yi0+dHNfYnVmW29sZHdycCArIDE4OF0gPT0gMHg0NykgJiYKLQkJCQkoZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwICsgMTg4ICogMl0gPT0gMHg0NykpKSB7Ci0JCQlkbTExMDVkdmItPlBhY2tldEVycm9yQ291bnQrKzsKLQkJCS8qIGJhZCBwYWNrZXQgZm91bmQgKi8KLQkJCWlmICgoZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50ID49IDIpICYmCi0JCQkJCShkbTExMDVkdmItPmRtYXJzdCA9PSAwKSkgewotCQkJCW91dGIoMSwgZG1faW9fbWVtKERNMTEwNV9SU1QpKTsKLQkJCQlkbTExMDVkdmItPndycCA9IDA7Ci0JCQkJZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50ID0gMDsKLQkJCQlkbTExMDVkdmItPmRtYXJzdCA9IDA7Ci0JCQkJc3Bpbl91bmxvY2soJmRtMTEwNWR2Yi0+bG9jayk7Ci0JCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCQkJfQotCQl9Ci0JCWlmIChuZXh0d3JwIDwgb2xkd3JwKSB7Ci0JCQlwaWVjZSA9IGRtMTEwNWR2Yi0+YnVmZmVyX3NpemUgLSBvbGR3cnA7Ci0JCQltZW1jcHkoZG0xMTA1ZHZiLT50c19idWYgKyBkbTExMDVkdmItPmJ1ZmZlcl9zaXplLCBkbTExMDVkdmItPnRzX2J1ZiwgbmV4dHdycCk7Ci0JCQluYnBhY2tldHMgPSAocGllY2UgKyBuZXh0d3JwKS8xODg7Ci0JCX0gZWxzZQl7Ci0JCQluYnBhY2tldHMgPSAobmV4dHdycCAtIG9sZHdycCkvMTg4OwotCQl9Ci0JCWR2Yl9kbXhfc3dmaWx0ZXJfcGFja2V0cygmZG0xMTA1ZHZiLT5kZW11eCwgJmRtMTEwNWR2Yi0+dHNfYnVmW29sZHdycF0sIG5icGFja2V0cyk7Ci0JCWRtMTEwNWR2Yi0+d3JwID0gbmV4dHdycDsKLQkJc3Bpbl91bmxvY2soJmRtMTEwNWR2Yi0+bG9jayk7CisJCWRtMTEwNWR2Yi0+bmV4dHdycCA9IGlubChkbV9pb19tZW0oRE0xMTA1X1dSUCkpIC0KKwkJCQkJaW5sKGRtX2lvX21lbShETTExMDVfU1RBRFIpKTsKKwkJc2NoZWR1bGVfd29yaygmZG0xMTA1ZHZiLT53b3JrKTsKIAkJYnJlYWs7CiAJY2FzZSBJTlRTVFNfSVI6Ci0JCWNvbW1hbmQgPSBpbmwoZG1faW9fbWVtKERNMTEwNV9JUkNPREUpKTsKLQkJaWYgKGlyX2RlYnVnKQotCQkJcHJpbnRrKCJkbTExMDU6IHJlY2VpdmVkIGJ5dGUgMHglMDR4XG4iLCBjb21tYW5kKTsKLQotCQlkbTExMDVkdmItPmlyLmlyX2NvbW1hbmQgPSBjb21tYW5kOwotCQl0YXNrbGV0X3NjaGVkdWxlKCZkbTExMDVkdmItPmlyLmlyX3Rhc2tsZXQpOworCQlkbTExMDVkdmItPmlyLmlyX2NvbW1hbmQgPSBpbmwoZG1faW9fbWVtKERNMTEwNV9JUkNPREUpKTsKKwkJc2NoZWR1bGVfd29yaygmZG0xMTA1ZHZiLT5pci53b3JrKTsKIAkJYnJlYWs7CiAJfQorCiAJcmV0dXJuIElSUV9IQU5ETEVEOwotCi0KLX0KLQotLyogcmVnaXN0ZXIgd2l0aCBpbnB1dCBsYXllciAqLwotc3RhdGljIHZvaWQgaW5wdXRfcmVnaXN0ZXJfa2V5cyhzdHJ1Y3QgaW5mcmFyZWQgKmlyKQotewotCWludCBpOwotCi0JbWVtc2V0KGlyLT5pbnB1dF9kZXYtPmtleWJpdCwgMCwgc2l6ZW9mKGlyLT5pbnB1dF9kZXYtPmtleWJpdCkpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXItPmtleV9tYXApOyBpKyspCi0JCQlzZXRfYml0KGlyLT5rZXlfbWFwW2ldLCBpci0+aW5wdXRfZGV2LT5rZXliaXQpOwotCi0JaXItPmlucHV0X2Rldi0+a2V5Y29kZSA9IGlyLT5rZXlfbWFwOwotCWlyLT5pbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKGlyLT5rZXlfbWFwWzBdKTsKLQlpci0+aW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShpci0+a2V5X21hcCk7CiB9CiAKIGludCBfX2RldmluaXQgZG0xMTA1X2lyX2luaXQoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1KQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKLQlpbnQgZXJyOwotCi0JZG0xMTA1ZHZiX2xvY2FsID0gZG0xMTA1OworCUlSX0tFWVRBQl9UWVBFICppcl9jb2RlcyA9IGlyX2NvZGVzX2RtMTEwNV9uZWM7CisJaW50IGlyX3R5cGUgPSBJUl9UWVBFX09USEVSOworCWludCBlcnIgPSAtRU5PTUVNOwogCiAJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCFpbnB1dF9kZXYpCkBAIC01MjEsMTIgKzQ2NiwxMSBAQAogCXNucHJpbnRmKGRtMTEwNS0+aXIuaW5wdXRfcGh5cywgc2l6ZW9mKGRtMTEwNS0+aXIuaW5wdXRfcGh5cyksCiAJCSJwY2ktJXMvaXIwIiwgcGNpX25hbWUoZG0xMTA1LT5wZGV2KSk7CiAKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSk7CisJaXJfaW5wdXRfaW5pdChpbnB1dF9kZXYsICZkbTExMDUtPmlyLmlyLCBpcl90eXBlLCBpcl9jb2Rlcyk7CiAJaW5wdXRfZGV2LT5uYW1lID0gIkRWQiBvbi1jYXJkIElSIHJlY2VpdmVyIjsKLQogCWlucHV0X2Rldi0+cGh5cyA9IGRtMTEwNS0+aXIuaW5wdXRfcGh5czsKIAlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfUENJOwotCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDI7CisJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMTsKIAlpZiAoZG0xMTA1LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yKSB7CiAJCWlucHV0X2Rldi0+aWQudmVuZG9yID0gZG0xMTA1LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yOwogCQlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSBkbTExMDUtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7CkBAIC01MzQsMjUgKzQ3OCwyMiBAQAogCQlpbnB1dF9kZXYtPmlkLnZlbmRvciA9IGRtMTEwNS0+cGRldi0+dmVuZG9yOwogCQlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSBkbTExMDUtPnBkZXYtPmRldmljZTsKIAl9CisKIAlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmZG0xMTA1LT5wZGV2LT5kZXY7Ci0JLyogaW5pdGlhbCBrZXltYXAgKi8KLQltZW1jcHkoZG0xMTA1LT5pci5rZXlfbWFwLCBpcl9jb2Rlc19kbTExMDVfbmVjLCBzaXplb2YgZG0xMTA1LT5pci5rZXlfbWFwKTsKLQlpbnB1dF9yZWdpc3Rlcl9rZXlzKCZkbTExMDUtPmlyKTsKKworCUlOSVRfV09SSygmZG0xMTA1LT5pci53b3JrLCBkbTExMDVfZW1pdF9rZXkpOworCiAJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CiAJaWYgKGVycikgewogCQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwogCQlyZXR1cm4gZXJyOwogCX0KIAotCXRhc2tsZXRfaW5pdCgmZG0xMTA1LT5pci5pcl90YXNrbGV0LCBkbTExMDVfZW1pdF9rZXksICh1bnNpZ25lZCBsb25nKSAmZG0xMTA1LT5pcik7Ci0KIAlyZXR1cm4gMDsKIH0KIAotCiB2b2lkIF9fZGV2ZXhpdCBkbTExMDVfaXJfZXhpdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDUpCiB7Ci0JdGFza2xldF9raWxsKCZkbTExMDUtPmlyLmlyX3Rhc2tsZXQpOwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRtMTEwNS0+aXIuaW5wdXRfZGV2KTsKIAogfQpAQCAtNzEwLDcgKzY1MSw3IEBACiAKIAlkbTExMDVkdmIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG0xMTA1ZHZiKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkbTExMDVkdmIpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVOT01FTTsKIAogCWRtMTEwNWR2Yi0+cGRldiA9IHBkZXY7CiAJZG0xMTA1ZHZiLT5idWZmZXJfc2l6ZSA9IDUgKiBETTExMDVfRE1BX0JZVEVTOwpAQCAtNzQwLDEzICs2ODEsOSBAQAogCXNwaW5fbG9ja19pbml0KCZkbTExMDVkdmItPmxvY2spOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkbTExMDVkdmIpOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBkbTExMDVkdmJfaXJxLCBJUlFGX1NIQVJFRCwgRFJJVkVSX05BTUUsIGRtMTEwNWR2Yik7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyX3BjaV9pb3VubWFwOwotCiAJcmV0ID0gZG0xMTA1ZHZiX2h3X2luaXQoZG0xMTA1ZHZiKTsKIAlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJfZnJlZV9pcnE7CisJCWdvdG8gZXJyX3BjaV9pb3VubWFwOwogCiAJLyogaTJjICovCiAJaTJjX3NldF9hZGFwZGF0YSgmZG0xMTA1ZHZiLT5pMmNfYWRhcCwgZG0xMTA1ZHZiKTsKQEAgLTgxMyw4ICs3NTAsMTUgQEAKIAogCWR2Yl9uZXRfaW5pdChkdmJfYWRhcHRlciwgJmRtMTEwNWR2Yi0+ZHZibmV0LCBkbXgpOwogCWRtMTEwNV9pcl9pbml0KGRtMTEwNWR2Yik7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKKworCUlOSVRfV09SSygmZG0xMTA1ZHZiLT53b3JrLCBkbTExMDVfZG14X2J1ZmZlcik7CisKKwlyZXQgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIGRtMTEwNWR2Yl9pcnEsIElSUUZfU0hBUkVELAorCQkJCQkJRFJJVkVSX05BTUUsIGRtMTEwNWR2Yik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2ZyZWVfaXJxOworCisJcmV0dXJuIDA7CiAKIGVycl9kaXNjb25uZWN0X2Zyb250ZW5kOgogCWRteC0+ZGlzY29ubmVjdF9mcm9udGVuZChkbXgpOwpAQCAtODQzLDcgKzc4Nyw3IEBACiBlcnJfa2ZyZWU6CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKGRtMTEwNWR2Yik7Ci0JZ290byBvdXQ7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZleGl0IGRtMTEwNV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jCmluZGV4IDA2OWQ4NDcuLmMzNWZiYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jCkBAIC0xMDI0LDcgKzEwMjQsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9kZW11eF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX2RlbXV4X2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLnJlYWQgPSBkdmJfZGVtdXhfcmVhZCwKIAkuaW9jdGwgPSBkdmJfZGVtdXhfaW9jdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfY2FfZW41MDIyMS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2NhX2VuNTAyMjEuYwppbmRleCA3ZTNhZWFhLi5jYjIyZGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfY2FfZW41MDIyMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9jYV9lbjUwMjIxLmMKQEAgLTE2MDcsNyArMTYwNyw3IEBACiBFWFBPUlRfU1lNQk9MKGR2Yl9jYV9lbjUwMjIxX2luaXQpOwogCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9jYV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX2NhX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLnJlYWQgPSBkdmJfY2FfZW41MDIyMV9pb19yZWFkLAogCS53cml0ZSA9IGR2Yl9jYV9lbjUwMjIxX2lvX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCA4ZGNiM2ZiLi5lYmM3ODE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwpAQCAtMTg3NSw3ICsxODc1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfZnJvbnRlbmRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9mcm9udGVuZF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuaW9jdGwJCT0gZHZiX2dlbmVyaWNfaW9jdGwsCiAJLnBvbGwJCT0gZHZiX2Zyb250ZW5kX3BvbGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKaW5kZXggZjZiYTg0Ni4uODI4MGY4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYwpAQCAtMTQ1OSw3ICsxNDU5LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfbmV0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfbmV0X2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlvY3RsID0gZHZiX25ldF9pb2N0bCwKIAkub3BlbiA9CWR2Yl9nZW5lcmljX29wZW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jCmluZGV4IDZhMzI2ODAuLmE0NTRlZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jCkBAIC0yMjgsOCArMjI4LDggQEAKIAlkdmJkZXYtPmZvcHMgPSBkdmJkZXZmb3BzOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZkdmJkZXYtPndhaXRfcXVldWUpOwogCi0JbWVtY3B5KGR2YmRldi0+Zm9wcywgdGVtcGxhdGUtPmZvcHMsIHNpemVvZihzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zKSk7Ci0JZHZiZGV2LT5mb3BzLT5vd25lciA9IGFkYXAtPm1vZHVsZTsKKwltZW1jcHkoZHZiZGV2Zm9wcywgdGVtcGxhdGUtPmZvcHMsIHNpemVvZihzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zKSk7CisJZHZiZGV2Zm9wcy0+b3duZXIgPSBhZGFwLT5tb2R1bGU7CiAKIAlsaXN0X2FkZF90YWlsICgmZHZiZGV2LT5saXN0X2hlYWQsICZhZGFwLT5kZXZpY2VfbGlzdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKaW5kZXggZGNhNDljZi4uNzk5MjczMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKQEAgLTcxLDcgKzcxLDcgQEAKIAogc3RydWN0IGR2Yl9kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9oZWFkOwotCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHM7CisJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wczsKIAlzdHJ1Y3QgZHZiX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJaW50IHR5cGU7CiAJaW50IG1pbm9yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCmluZGV4IDQ5ZjdiMjAuLjYxMDNjYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKQEAgLTI1LDcgKzI1LDcgQEAKIAlkZXBlbmRzIG9uIERWQl9VU0IKIAlzZWxlY3QgRFZCX0RJQjMwMDBNQwogCXNlbGVjdCBEVkJfUExMIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBBVmVyTWVkaWEgQXZlclRWIERWQi1UIFVTQiAyLjAgKEE4MDApIHJlY2VpdmVyLgogCkBAIC0zNCw3ICszNCw3IEBACiAJZGVwZW5kcyBvbiBEVkJfVVNCCiAJc2VsZWN0IERWQl9QTEwgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0RJQjMwMDBNQgotCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFVTQiAxLjEgYW5kIDIuMCBEVkItVCByZWNlaXZlcnMgYmFzZWQgb24gcmVmZXJlbmNlIGRlc2lnbnMgbWFkZSBieQogCSAgRGlCY29tICg8aHR0cDovL3d3dy5kaWJjb20uZnI+KSBlcXVpcHBlZCB3aXRoIGEgRGlCMzAwME0tQiBkZW1vZHVsYXRvci4KQEAgLTU1LDcgKzU1LDcgQEAKIAl0cmlzdGF0ZSAiRGlCY29tIFVTQiBEVkItVCBkZXZpY2VzIChiYXNlZCBvbiB0aGUgRGlCMzAwME0tQy9QKSAoc2VlIGhlbHAgZm9yIGRldmljZSBsaXN0KSIKIAlkZXBlbmRzIG9uIERWQl9VU0IKIAlzZWxlY3QgRFZCX0RJQjMwMDBNQwotCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFVTQjIuMCBEVkItVCByZWNlaXZlcnMgYmFzZWQgb24gcmVmZXJlbmNlIGRlc2lnbnMgbWFkZSBieQogCSAgRGlCY29tICg8aHR0cDovL3d3dy5kaWJjb20uZnI+KSBlcXVpcHBlZCB3aXRoIGEgRGlCMzAwME0tQy9QIGRlbW9kdWxhdG9yLgpAQCAtNjksMTUgKzY5LDE3IEBACiBjb25maWcgRFZCX1VTQl9ESUIwNzAwCiAJdHJpc3RhdGUgIkRpQmNvbSBEaUIwNzAwIFVTQiBEVkIgZGV2aWNlcyAoc2VlIGhlbHAgZm9yIHN1cHBvcnRlZCBkZXZpY2VzKSIKIAlkZXBlbmRzIG9uIERWQl9VU0IKLQlzZWxlY3QgRFZCX0RJQjcwMDBQCi0Jc2VsZWN0IERWQl9ESUI3MDAwTQotCXNlbGVjdCBEVkJfRElCMzAwME1DCisJc2VsZWN0IERWQl9ESUI3MDAwUCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfRElCNzAwME0gaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0RJQjMwMDBNQyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfUzVIMTQxMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBEVkJfVFVORVJfRElCMDA3MAotCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIyNjYgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9YQzUwMDAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBEVkJfTEdEVDMzMDUgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1RVTkVSX0RJQjAwNzAgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfTVQyMjY2IGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfWEMyMDI4IGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfWEM1MDAwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfTVhMNTAwN1QgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFVTQjIuMC8xLjEgRFZCIHJlY2VpdmVycyBiYXNlZCBvbiB0aGUgRGlCMDcwMCBVU0IgYnJpZGdlLiBUaGUKIAkgIFVTQiBicmlkZ2UgaXMgYWxzbyBwcmVzZW50IGluIGRldmljZXMgaGF2aW5nIHRoZSBEaUI3NzAwIERWQi1ULVVTQgpAQCAtOTUsNyArOTcsOCBAQAogCWRlcGVuZHMgb24gRFZCX1VTQgogCXNlbGVjdCBEVkJfUExMIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9ESUIzMDAwTUMKLQlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX01UMzUyIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBIYW5mVGVrIFVNVC0wMTAgVVNCMi4wIHN0aWNrLXNpemVkIERWQi1UIHJlY2VpdmVyLgogCkBAIC0xMDgsMTAgKzExMSwxMSBAQAogCXNlbGVjdCBEVkJfTVQzNTIgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1pMMTAzNTMgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0RJQjcwMDBQIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9MR1M4R0w1IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9UVU5FUl9ESUIwMDcwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1hDMjAyOCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDVTIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfWEMyMDI4IGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfTVhMNTAwNVMgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgQ29uZXhhbnQgVVNCMi4wIGh5YnJpZCByZWZlcmVuY2UgZGVzaWduLgogCSAgQ3VycmVudGx5LCBvbmx5IERWQiBhbmQgQVRTQyBtb2RlcyBhcmUgc3VwcG9ydGVkLCBhbmFsb2cgbW9kZQpAQCAtMTI1LDggKzEyOSw4IEBACiAJZGVwZW5kcyBvbiBEVkJfVVNCCiAJc2VsZWN0IERWQl9NVDM1MiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfVERBMTAwNFggaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgTUVESUFfVFVORVJfUVQxMDEwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfVERBODI3WCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX1FUMTAxMCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1REQTgyN1ggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgTVNJIE1lZ2EgU2t5IDU4MCBVU0IyLjAgRFZCLVQgcmVjZWl2ZXIuCiAJICBDdXJyZW50bHksIG9ubHkgZGV2aWNlcyB3aXRoIGEgcHJvZHVjdCBpZCBvZgpAQCAtMTM3LDcgKzE0MSw3IEBACiAJdHJpc3RhdGUgIkdlbmVzeXMgTG9naWMgR0w4NjEgVVNCMi4wIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCiAJc2VsZWN0IERWQl9aTDEwMzUzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1FUMTAxMCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX1FUMTAxMCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBNU0kgTWVnYXNreSA1ODAgKDU1ODAxKSBEVkItVCBVU0IyLjAKIAkgIHJlY2VpdmVyIHdpdGggVVNCIElEIDBkYjA6NTU4MS4KQEAgLTE0Niw3ICsxNTAsNyBAQAogCXRyaXN0YXRlICJBbGNvciBNaWNybyBBVTY2MTAgVVNCMi4wIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCiAJc2VsZWN0IERWQl9aTDEwMzUzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1FUMTAxMCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX1FUMTAxMCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBTaWdtYXRlayBEVkItMTEwIERWQi1UIFVTQjIuMCByZWNlaXZlci4KIApAQCAtMTk5LDcgKzIwMyw3IEBACiAJZGVwZW5kcyBvbiBEVkJfVVNCCiAJc2VsZWN0IERWQl9ESUIzMDAwTUMKIAlzZWxlY3QgRFZCX1BMTCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgSGF1cHBhdWdlIFdpblRWLU5PVkEtVCB1c2IyIERWQi1UIFVTQjIuMCByZWNlaXZlci4KIApAQCAtMjM1LDggKzIzOSw4IEBACiBjb25maWcgRFZCX1VTQl9BRjkwMDUKIAl0cmlzdGF0ZSAiQWZhdGVjaCBBRjkwMDUgRFZCLVQgVVNCMS4xIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBEVkJfVVNCICYmIEVYUEVSSU1FTlRBTAotCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9RVDEwMTAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9RVDEwMTAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgQWZhdGVjaCBBRjkwMDUgYmFzZWQgRFZCLVQgVVNCMS4xIHJlY2VpdmVyCiAJICBhbmQgdGhlIFRlcnJhVGVjIENpbmVyZ3kgVCBVU0IgWEUgKFJldi4xKQpAQCAtMjg0LDcgKzI4OCw3IEBACiAJdHJpc3RhdGUgIkFNRSBEVFYtNTEwMCBVU0IyLjAgRFZCLVQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIERWQl9VU0IKIAlzZWxlY3QgRFZCX1pMMTAzNTMgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgTUVESUFfVFVORVJfUVQxMDEwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfUVQxMDEwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEFNRSBEVFYtNTEwMCBVU0IyLjAgRFZCLVQgcmVjZWl2ZXIuCiAKQEAgLTI5Myw5ICsyOTcsMTggQEAKIAlkZXBlbmRzIG9uIERWQl9VU0IgJiYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IERWQl9BRjkwMTMKIAlzZWxlY3QgRFZCX1BMTCAgICAgICAgICAgICAgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwICAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9RVDEwMTAgICBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfTVhMNTAwNVMgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgICBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1FUMTAxMCAgIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBMTgyNzEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NWEw1MDA1UyBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX01DNDRTODAzIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEFmYXRlY2ggQUY5MDE1IGJhc2VkIERWQi1UIFVTQjIuMCByZWNlaXZlcgorCitjb25maWcgRFZCX1VTQl9DRTYyMzAKKwl0cmlzdGF0ZSAiSW50ZWwgQ0U2MjMwIERWQi1UIFVTQjIuMCBzdXBwb3J0IgorCWRlcGVuZHMgb24gRFZCX1VTQiAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgRFZCX1pMMTAzNTMKKwlzZWxlY3QgTUVESUFfVFVORVJfTVhMNTAwNVMgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgSW50ZWwgQ0U2MjMwIERWQi1UIFVTQjIuMCByZWNlaXZlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUKaW5kZXggMzEyMmI3Yy4uZjkyNzM0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlCkBAIC03Niw2ICs3Niw4IEBACiBkdmItdXNiLWNpbmVyZ3lUMi1vYmpzID0gY2luZXJneVQyLWNvcmUubyBjaW5lcmd5VDItZmUubwogb2JqLSQoQ09ORklHX0RWQl9VU0JfQ0lORVJHWV9UMikgKz0gZHZiLXVzYi1jaW5lcmd5VDIubwogCitkdmItdXNiLWNlNjIzMC1vYmpzID0gY2U2MjMwLm8KK29iai0kKENPTkZJR19EVkJfVVNCX0NFNjIzMCkgKz0gZHZiLXVzYi1jZTYyMzAubwogCiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS8gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvCiAjIGR1ZSB0byB0dW5lci14YzMwMjgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jCmluZGV4IDZhOTdhNDAuLmYwYmE4YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYwpAQCAtMjcsOSArMjcsNyBAQAogI2luY2x1ZGUgInF0MTAxMC5oIgogI2luY2x1ZGUgInRkYTE4MjcxLmgiCiAjaW5jbHVkZSAibXhsNTAwNXMuaCIKLSNpZiAwCi0jaW5jbHVkZSAibWM0NHM4MHguaCIKLSNlbmRpZgorI2luY2x1ZGUgIm1jNDRzODAzLmgiCiAKIHN0YXRpYyBpbnQgZHZiX3VzYl9hZjkwMTVfZGVidWc7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGR2Yl91c2JfYWY5MDE1X2RlYnVnLCBpbnQsIDA2NDQpOwpAQCAtMzcsOSArMzUsNiBAQAogc3RhdGljIGludCBkdmJfdXNiX2FmOTAxNV9yZW1vdGU7CiBtb2R1bGVfcGFyYW1fbmFtZWQocmVtb3RlLCBkdmJfdXNiX2FmOTAxNV9yZW1vdGUsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJlbW90ZSwgInNlbGVjdCByZW1vdGUiKTsKLXN0YXRpYyBpbnQgZHZiX3VzYl9hZjkwMTVfZHVhbF9tb2RlOwotbW9kdWxlX3BhcmFtX25hbWVkKGR1YWxfbW9kZSwgZHZiX3VzYl9hZjkwMTVfZHVhbF9tb2RlLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkdWFsX21vZGUsICJlbmFibGUgZHVhbCBtb2RlIik7CiBEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKIAogc3RhdGljIERFRklORV9NVVRFWChhZjkwMTVfdXNiX211dGV4KTsKQEAgLTI4Myw2ICsyNzgsMjEgQEAKIAkJCXJlcS5kYXRhID0gJm1zZ1tpKzFdLmJ1ZlswXTsKIAkJCXJldCA9IGFmOTAxNV9jdHJsX21zZyhkLCAmcmVxKTsKIAkJCWkgKz0gMjsKKwkJfSBlbHNlIGlmIChtc2dbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWlmIChtc2dbaV0uYWRkciA9PQorCQkJCWFmOTAxNV9hZjkwMTNfY29uZmlnWzBdLmRlbW9kX2FkZHJlc3MpCisJCQkJZ290byBlcnJvcjsKKwkJCWVsc2UKKwkJCQlyZXEuY21kID0gUkVBRF9JMkM7CisJCQlyZXEuaTJjX2FkZHIgPSBtc2dbaV0uYWRkcjsKKwkJCXJlcS5hZGRyID0gYWRkcjsKKwkJCXJlcS5tYm94ID0gbWJveDsKKwkJCXJlcS5hZGRyX2xlbiA9IGFkZHJfbGVuOworCQkJcmVxLmRhdGFfbGVuID0gbXNnW2ldLmxlbjsKKwkJCXJlcS5kYXRhID0gJm1zZ1tpXS5idWZbMF07CisJCQlyZXQgPSBhZjkwMTVfY3RybF9tc2coZCwgJnJlcSk7CisJCQlpICs9IDE7CiAJCX0gZWxzZSB7CiAJCQlpZiAobXNnW2ldLmFkZHIgPT0KIAkJCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1swXS5kZW1vZF9hZGRyZXNzKQpAQCAtNzQ4LDYgKzc1OCwxNiBAQAogCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9CiAJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9kaWdpdHRyYWRlKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgQUY5MDE1X1JFTU9URV9BVkVSTUVESUFfS1M6CisJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcCA9CisJCQkJICBhZjkwMTVfcmNfa2V5c19hdmVybWVkaWE7CisJCQkJYWY5MDE1X3Byb3BlcnRpZXNbaV0ucmNfa2V5X21hcF9zaXplID0KKwkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhKTsKKwkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlID0KKwkJCQkgIGFmOTAxNV9pcl90YWJsZV9hdmVybWVkaWFfa3M7CisJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KKwkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2F2ZXJtZWRpYV9rcyk7CisJCQkJYnJlYWs7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpKSB7CkBAIC04MzYsOSArODU2LDYgQEAKIAkJZ290byBlcnJvcjsKIAlhZjkwMTVfY29uZmlnLmR1YWxfbW9kZSA9IHZhbDsKIAlkZWJfaW5mbygiJXM6IFRTIG1vZGU6JWRcbiIsIF9fZnVuY19fLCBhZjkwMTVfY29uZmlnLmR1YWxfbW9kZSk7Ci0JLyogZGlzYWJsZSBkdWFsIG1vZGUgYnkgZGVmYXVsdCBiZWNhdXNlIGl0IGlzIGJ1Z2d5ICovCi0JaWYgKCFkdmJfdXNiX2FmOTAxNV9kdWFsX21vZGUpCi0JCWFmOTAxNV9jb25maWcuZHVhbF9tb2RlID0gMDsKIAogCS8qIFNldCBhZGFwdGVyMCBidWZmZXIgc2l6ZSBhY2NvcmRpbmcgdG8gVVNCIHBvcnQgc3BlZWQsIGFkYXB0ZXIxIGJ1ZmZlcgogCSAgIHNpemUgY2FuIGJlIHN0YXRpYyBiZWNhdXNlIGl0IGlzIGVuYWJsZWQgb25seSBVU0IyLjAgKi8KQEAgLTkzNSw3ICs5NTIsNiBAQAogCQlzd2l0Y2ggKHZhbCkgewogCQljYXNlIEFGOTAxM19UVU5FUl9FTlY3N0gxMUQ1OgogCQljYXNlIEFGOTAxM19UVU5FUl9NVDIwNjA6Ci0JCWNhc2UgQUY5MDEzX1RVTkVSX01DNDRTODAzOgogCQljYXNlIEFGOTAxM19UVU5FUl9RVDEwMTA6CiAJCWNhc2UgQUY5MDEzX1RVTkVSX1VOS05PV046CiAJCWNhc2UgQUY5MDEzX1RVTkVSX01UMjA2MF8yOgpAQCAtOTQ4LDYgKzk2NCwxMCBAQAogCQljYXNlIEFGOTAxM19UVU5FUl9NWEw1MDA1UjoKIAkJCWFmOTAxNV9hZjkwMTNfY29uZmlnW2ldLnJmX3NwZWNfaW52ID0gMDsKIAkJCWJyZWFrOworCQljYXNlIEFGOTAxM19UVU5FUl9NQzQ0UzgwMzoKKwkJCWFmOTAxNV9hZjkwMTNfY29uZmlnW2ldLmdwaW9bMV0gPSBBRjkwMTNfR1BJT19MTzsKKwkJCWFmOTAxNV9hZjkwMTNfY29uZmlnW2ldLnJmX3NwZWNfaW52ID0gMTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJd2FybigidHVuZXIgaWQ6JWQgbm90IHN1cHBvcnRlZCwgcGxlYXNlIHJlcG9ydCEiLCB2YWwpOwogCQkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMTM1LDYgKzExNTUsMTEgQEAKIAkuQWdjTWFzdGVyQnl0ZSAgID0gMHgwMCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbWM0NHM4MDNfY29uZmlnIGFmOTAxNV9tYzQ0czgwM19jb25maWcgPSB7CisJLmkyY19hZGRyZXNzID0gMHhjMCwKKwkuZGlnX291dCA9IDEsCit9OworCiBzdGF0aWMgaW50IGFmOTAxNV90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKIAlzdHJ1Y3QgYWY5MDE1X3N0YXRlICpzdGF0ZSA9IGFkYXAtPmRldi0+cHJpdjsKQEAgLTExNzksMTUgKzEyMDQsOCBAQAogCQkJRFZCX1BMTF9UREE2NjVYKSA9PSBOVUxMID8gLUVOT0RFViA6IDA7CiAJCWJyZWFrOwogCWNhc2UgQUY5MDEzX1RVTkVSX01DNDRTODAzOgotI2lmIDAKLQkJcmV0ID0gZHZiX2F0dGFjaChtYzQ0czgweF9hdHRhY2gsIGFkYXAtPmZlLCBpMmNfYWRhcCkKLQkJCT09IE5VTEwgPyAtRU5PREVWIDogMDsKLSNlbHNlCi0JCXJldCA9IC1FTk9ERVY7Ci0JCWluZm8oIkZyZWVzY2FsZSBNQzQ0UzgwMyB0dW5lciBmb3VuZCBidXQgbm8gZHJpdmVyIGZvciB0aGF0IiBcCi0JCQkidHVuZXIuIExvb2sgYXQgdGhlIExpbnV4dHYub3JnIGZvciB0dW5lciBkcml2ZXIiIFwKLQkJCSJzdGF0dXMuIik7Ci0jZW5kaWYKKwkJcmV0ID0gZHZiX2F0dGFjaChtYzQ0czgwM19hdHRhY2gsIGFkYXAtPmZlLCBpMmNfYWRhcCwKKwkJCSZhZjkwMTVfbWM0NHM4MDNfY29uZmlnKSA9PSBOVUxMID8gLUVOT0RFViA6IDA7CiAJCWJyZWFrOwogCWNhc2UgQUY5MDEzX1RVTkVSX1VOS05PV046CiAJZGVmYXVsdDoKQEAgLTEyMTgsNiArMTIzNiw3IEBACiAJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9BVkVSTUVESUEsIFVTQl9QSURfQVZFUk1FRElBX0EzMDkpfSwKIC8qIDE1ICove1VTQl9ERVZJQ0UoVVNCX1ZJRF9NU0lfMiwgICAgIFVTQl9QSURfTVNJX0RJR0lfVk9YX01JTklfSUlJKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9LV09STERfMiwgIFVTQl9QSURfS1dPUkxEXzM5NVUpfSwKKwl7VVNCX0RFVklDRShVU0JfVklEX0tXT1JMRF8yLCAgVVNCX1BJRF9LV09STERfMzk1VV8yKX0sCiAJezB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBhZjkwMTVfdXNiX3RhYmxlKTsKQEAgLTE0MTcsNyArMTQzNiw4IEBACiAJCQl7CiAJCQkJLm5hbWUgPSAiS1dvcmxkIFVTQiBEVkItVCBUViBTdGljayBJSSAiIFwKIAkJCQkJIihWUy1EVkItVCAzOTVVKSIsCi0JCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzE2XSwgTlVMTH0sCisJCQkJLmNvbGRfaWRzID0geyZhZjkwMTVfdXNiX3RhYmxlWzE2XSwKKwkJCQkJICAgICAmYWY5MDE1X3VzYl90YWJsZVsxN10sIE5VTEx9LAogCQkJCS53YXJtX2lkcyA9IHtOVUxMfSwKIAkJCX0sCiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oCmluZGV4IDIxYzc3ODIuLjAwZTI1NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuaApAQCAtMTI0LDYgKzEyNCw3IEBACiAJQUY5MDE1X1JFTU9URV9NU0lfRElHSVZPWF9NSU5JX0lJX1YzLAogCUFGOTAxNV9SRU1PVEVfTVlHSUNUVl9VNzE4LAogCUFGOTAxNV9SRU1PVEVfRElHSVRUUkFERV9EVkJfVCwKKwlBRjkwMTVfUkVNT1RFX0FWRVJNRURJQV9LUywKIH07CiAKIC8qIExlYWR0ZWsgV2luRmFzdCBEVFYgRG9uZ2xlIEdvbGQgKi8KQEAgLTU5Nyw2ICs1OTgsMzYgQEAKIAkweDAzLCAweGZjLCAweDAzLCAweGZjLCAweDBlLCAweDA1LCAweDAwLAogfTsKIAorc3RhdGljIHU4IGFmOTAxNV9pcl90YWJsZV9hdmVybWVkaWFfa3NbXSA9IHsKKwkweDA1LCAweGZhLCAweDAxLCAweGZlLCAweDEyLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MDIsIDB4ZmQsIDB4MGUsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgwMywgMHhmYywgMHgwZCwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDA0LCAweGZiLCAweDJlLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MDUsIDB4ZmEsIDB4MmQsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgwNiwgMHhmOSwgMHgxMCwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDA3LCAweGY4LCAweDBmLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MDgsIDB4ZjcsIDB4M2QsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgwOSwgMHhmNiwgMHgxZSwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDBhLCAweGY1LCAweDFmLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MGIsIDB4ZjQsIDB4MjAsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgwYywgMHhmMywgMHgyMSwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDBkLCAweGYyLCAweDIyLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MGUsIDB4ZjEsIDB4MjMsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgwZiwgMHhmMCwgMHgyNCwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDEwLCAweGVmLCAweDI1LCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MTEsIDB4ZWUsIDB4MjYsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgxMiwgMHhlZCwgMHgyNywgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDEzLCAweGVjLCAweDA0LCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MTUsIDB4ZWEsIDB4MGEsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgxNiwgMHhlOSwgMHgxMSwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDE3LCAweGU4LCAweDE1LCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MTgsIDB4ZTcsIDB4MTYsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgxYywgMHhlMywgMHgwNSwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDFkLCAweGUyLCAweDA5LCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4NGQsIDB4YjIsIDB4M2YsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHg1NiwgMHhhOSwgMHgzZSwgMHgwNSwgMHgwMAorfTsKKwogLyogRGlnaXR0cmFkZSBEVkItVCBVU0IgU3RpY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9yY19rZXkgYWY5MDE1X3JjX2tleXNfZGlnaXR0cmFkZVtdID0gewogCXsgMHgwMSwgMHgwZiwgS0VZX0xBU1QgfSwJLyogUkVUVVJOICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NlNjIzMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jZTYyMzAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODYyODIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jZTYyMzAuYwpAQCAtMCwwICsxLDMyOCBAQAorLyoKKyAqIERWQiBVU0IgTGludXggZHJpdmVyIGZvciBJbnRlbCBDRTYyMzAgRFZCLVQgVVNCMi4wIHJlY2VpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY2U2MjMwLmgiCisjaW5jbHVkZSAiemwxMDM1My5oIgorI2luY2x1ZGUgIm14bDUwMDVzLmgiCisKKy8qIGRlYnVnICovCitzdGF0aWMgaW50IGR2Yl91c2JfY2U2MjMwX2RlYnVnOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBkdmJfdXNiX2NlNjIzMF9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsIiBEVkJfVVNCX0RFQlVHX1NUQVRVUyk7CitEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKKworc3RhdGljIHN0cnVjdCB6bDEwMzUzX2NvbmZpZyBjZTYyMzBfemwxMDM1M19jb25maWc7CisKK3N0YXRpYyBpbnQgY2U2MjMwX3J3X3VkZXYoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdCByZXFfdCAqcmVxKQoreworCWludCByZXQ7CisJdW5zaWduZWQgaW50IHBpcGU7CisJdTggcmVxdWVzdDsKKwl1OCByZXF1ZXN0dHlwZTsKKwl1MTYgdmFsdWU7CisJdTE2IGluZGV4OworCXU4IGJ1ZltyZXEtPmRhdGFfbGVuXTsKKworCXJlcXVlc3QgPSByZXEtPmNtZDsKKwl2YWx1ZSA9IHJlcS0+dmFsdWU7CisJaW5kZXggPSByZXEtPmluZGV4OworCisJc3dpdGNoIChyZXEtPmNtZCkgeworCWNhc2UgSTJDX1JFQUQ6CisJY2FzZSBERU1PRF9SRUFEOgorCWNhc2UgUkVHX1JFQUQ6CisJCXJlcXVlc3R0eXBlID0gKFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4pOworCQlicmVhazsKKwljYXNlIEkyQ19XUklURToKKwljYXNlIERFTU9EX1dSSVRFOgorCWNhc2UgUkVHX1dSSVRFOgorCQlyZXF1ZXN0dHlwZSA9IChVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycigidW5rbm93biBjb21tYW5kOiUwMngiLCByZXEtPmNtZCk7CisJCXJldCA9IC1FUEVSTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAocmVxdWVzdHR5cGUgPT0gKFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUKSkgeworCQkvKiB3cml0ZSAqLworCQltZW1jcHkoYnVmLCByZXEtPmRhdGEsIHJlcS0+ZGF0YV9sZW4pOworCQlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApOworCX0gZWxzZSB7CisJCS8qIHJlYWQgKi8KKwkJcGlwZSA9IHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKTsKKwl9CisKKwltc2xlZXAoMSk7IC8qIGF2b2lkIEkyQyBlcnJvcnMgKi8KKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCBwaXBlLCByZXF1ZXN0LCByZXF1ZXN0dHlwZSwgdmFsdWUsIGluZGV4LAorCQkJCWJ1Ziwgc2l6ZW9mKGJ1ZiksIENFNjIzMF9VU0JfVElNRU9VVCk7CisKKwljZTYyMzBfZGVidWdfZHVtcChyZXF1ZXN0LCByZXF1ZXN0dHlwZSwgdmFsdWUsIGluZGV4LCBidWYsCisJCXJlcS0+ZGF0YV9sZW4sIGRlYl94ZmVyKTsKKworCWlmIChyZXQgPCAwKQorCQlkZWJfaW5mbygiJXM6IHVzYl9jb250cm9sX21zZyBmYWlsZWQ6JWRcbiIsIF9fZnVuY19fLCByZXQpOworCWVsc2UKKwkJcmV0ID0gMDsKKworCS8qIHJlYWQgcmVxdWVzdCwgY29weSByZXR1cm5lZCBkYXRhIHRvIHJldHVybiBidWYgKi8KKwlpZiAoIXJldCAmJiByZXF1ZXN0dHlwZSA9PSAoVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTikpCisJCW1lbWNweShyZXEtPmRhdGEsIGJ1ZiwgcmVxLT5kYXRhX2xlbik7CisKK2Vycm9yOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2U2MjMwX2N0cmxfbXNnKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgc3RydWN0IHJlcV90ICpyZXEpCit7CisJcmV0dXJuIGNlNjIzMF9yd191ZGV2KGQtPnVkZXYsIHJlcSk7Cit9CisKKy8qIEkyQyAqLworc3RhdGljIGludCBjZTYyMzBfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyBtc2dbXSwKKwkJCSAgIGludCBudW0pCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKKwlpbnQgaSA9IDA7CisJc3RydWN0IHJlcV90IHJlcTsKKwlpbnQgcmV0ID0gMDsKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKCZyZXEpKTsKKworCWlmIChudW0gPiAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmQtPmkyY19tdXRleCkgPCAwKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXdoaWxlIChpIDwgbnVtKSB7CisJCWlmIChudW0gPiBpICsgMSAmJiAobXNnW2krMV0uZmxhZ3MgJiBJMkNfTV9SRCkpIHsKKwkJCWlmIChtc2dbaV0uYWRkciA9PQorCQkJCWNlNjIzMF96bDEwMzUzX2NvbmZpZy5kZW1vZF9hZGRyZXNzKSB7CisJCQkJcmVxLmNtZCA9IERFTU9EX1JFQUQ7CisJCQkJcmVxLnZhbHVlID0gbXNnW2ldLmFkZHIgPj4gMTsKKwkJCQlyZXEuaW5kZXggPSBtc2dbaV0uYnVmWzBdOworCQkJCXJlcS5kYXRhX2xlbiA9IG1zZ1tpKzFdLmxlbjsKKwkJCQlyZXEuZGF0YSA9ICZtc2dbaSsxXS5idWZbMF07CisJCQkJcmV0ID0gY2U2MjMwX2N0cmxfbXNnKGQsICZyZXEpOworCQkJfSBlbHNlIHsKKwkJCQllcnIoImkyYyByZWFkIG5vdCBpbXBsZW1lbnRlZCIpOworCQkJCXJldCA9IC1FUEVSTTsKKwkJCX0KKwkJCWkgKz0gMjsKKwkJfSBlbHNlIHsKKwkJCWlmIChtc2dbaV0uYWRkciA9PQorCQkJCWNlNjIzMF96bDEwMzUzX2NvbmZpZy5kZW1vZF9hZGRyZXNzKSB7CisJCQkJcmVxLmNtZCA9IERFTU9EX1dSSVRFOworCQkJCXJlcS52YWx1ZSA9IG1zZ1tpXS5hZGRyID4+IDE7CisJCQkJcmVxLmluZGV4ID0gbXNnW2ldLmJ1ZlswXTsKKwkJCQlyZXEuZGF0YV9sZW4gPSBtc2dbaV0ubGVuLTE7CisJCQkJcmVxLmRhdGEgPSAmbXNnW2ldLmJ1ZlsxXTsKKwkJCQlyZXQgPSBjZTYyMzBfY3RybF9tc2coZCwgJnJlcSk7CisJCQl9IGVsc2UgeworCQkJCXJlcS5jbWQgPSBJMkNfV1JJVEU7CisJCQkJcmVxLnZhbHVlID0gMHgyMDAwICsgKG1zZ1tpXS5hZGRyID4+IDEpOworCQkJCXJlcS5pbmRleCA9IDB4MDAwMDsKKwkJCQlyZXEuZGF0YV9sZW4gPSBtc2dbaV0ubGVuOworCQkJCXJlcS5kYXRhID0gJm1zZ1tpXS5idWZbMF07CisJCQkJcmV0ID0gY2U2MjMwX2N0cmxfbXNnKGQsICZyZXEpOworCQkJfQorCQkJaSArPSAxOworCQl9CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisKKwltdXRleF91bmxvY2soJmQtPmkyY19tdXRleCk7CisJcmV0dXJuIHJldCA/IHJldCA6IGk7Cit9CisKK3N0YXRpYyB1MzIgY2U2MjMwX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDOworfQorCitzdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gY2U2MjMwX2kyY19hbGdvID0geworCS5tYXN0ZXJfeGZlciAgID0gY2U2MjMwX2kyY194ZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gY2U2MjMwX2kyY19mdW5jLAorfTsKKworLyogQ2FsbGJhY2tzIGZvciBEVkIgVVNCICovCitzdGF0aWMgc3RydWN0IHpsMTAzNTNfY29uZmlnIGNlNjIzMF96bDEwMzUzX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MWUsCisJLmFkY19jbG9jayA9IDQ1MDAwMCwKKwkuaWYyID0gNDU3MDAsCisJLm5vX3R1bmVyID0gMSwKKwkucGFyYWxsZWxfdHMgPSAxLAorCS5jbG9ja19jdGxfMSA9IDB4MzQsCisJLnBsbF8wID0gMHgwZSwKK307CisKK3N0YXRpYyBpbnQgY2U2MjMwX3psMTAzNTNfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJZGViX2luZm8oIiVzOlxuIiwgX19mdW5jX18pOworCWFkYXAtPmZlID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwgJmNlNjIzMF96bDEwMzUzX2NvbmZpZywKKwkJJmFkYXAtPmRldi0+aTJjX2FkYXApOworCWlmIChhZGFwLT5mZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBteGw1MDA1c19jb25maWcgY2U2MjMwX214bDUwMDNzX2NvbmZpZyA9IHsKKwkuaTJjX2FkZHJlc3MgICAgID0gMHhjNiwKKwkuaWZfZnJlcSAgICAgICAgID0gSUZfRlJFUV80NTcwMDAwSFosCisJLnh0YWxfZnJlcSAgICAgICA9IENSWVNUQUxfRlJFUV8xNjAwMDAwMEhaLAorCS5hZ2NfbW9kZSAgICAgICAgPSBNWExfU0lOR0xFX0FHQywKKwkudHJhY2tpbmdfZmlsdGVyID0gTVhMX1RGX0RFRkFVTFQsCisJLnJzc2lfZW5hYmxlICAgICA9IE1YTF9SU1NJX0VOQUJMRSwKKwkuY2FwX3NlbGVjdCAgICAgID0gTVhMX0NBUF9TRUxfRU5BQkxFLAorCS5kaXZfb3V0ICAgICAgICAgPSBNWExfRElWX09VVF80LAorCS5jbG9ja19vdXQgICAgICAgPSBNWExfQ0xPQ0tfT1VUX0RJU0FCTEUsCisJLm91dHB1dF9sb2FkICAgICA9IE1YTDUwMDVTX0lGX09VVFBVVF9MT0FEXzIwMF9PSE0sCisJLnRvcAkJID0gTVhMNTAwNVNfVE9QXzI1UDIsCisJLm1vZF9tb2RlICAgICAgICA9IE1YTF9ESUdJVEFMX01PREUsCisJLmlmX21vZGUgICAgICAgICA9IE1YTF9aRVJPX0lGLAorCS5BZ2NNYXN0ZXJCeXRlICAgPSAweDAwLAorfTsKKworc3RhdGljIGludCBjZTYyMzBfbXhsNTAwM3NfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJaW50IHJldDsKKwlkZWJfaW5mbygiJXM6XG4iLCBfX2Z1bmNfXyk7CisJcmV0ID0gZHZiX2F0dGFjaChteGw1MDA1c19hdHRhY2gsIGFkYXAtPmZlLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwKKwkJCSZjZTYyMzBfbXhsNTAwM3NfY29uZmlnKSA9PSBOVUxMID8gLUVOT0RFViA6IDA7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjZTYyMzBfcG93ZXJfY3RybChzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIGludCBvbm9mZikKK3sKKwlpbnQgcmV0OworCWRlYl9pbmZvKCIlczogb25vZmY6JWRcbiIsIF9fZnVuY19fLCBvbm9mZik7CisKKwkvKiBJbnRlcmZhY2VOdW1iZXIgMSAvIEFsdGVybmF0ZVNldHRpbmcgMCAgICAgaWRsZQorCSAgIEludGVyZmFjZU51bWJlciAxIC8gQWx0ZXJuYXRlU2V0dGluZyAxICAgICBzdHJlYW1pbmcgKi8KKwlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShkLT51ZGV2LCAxLCBvbm9mZik7CisJaWYgKHJldCkKKwkJZXJyKCJ1c2Jfc2V0X2ludGVyZmFjZSBmYWlsZWQgd2l0aCBlcnJvcjolZCIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBEVkIgVVNCIERyaXZlciBzdHVmZiAqLworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGNlNjIzMF9wcm9wZXJ0aWVzOworCitzdGF0aWMgaW50IGNlNjIzMF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBOVUxMOworCisJZGViX2luZm8oIiVzOiBpbnRlcmZhY2U6JWRcbiIsIF9fZnVuY19fLAorCQlpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKworCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyID09IDEpIHsKKwkJcmV0ID0gZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCAmY2U2MjMwX3Byb3BlcnRpZXMsIFRISVNfTU9EVUxFLAorCQkJJmQsIGFkYXB0ZXJfbnIpOworCQlpZiAocmV0KQorCQkJZXJyKCJpbml0IGZhaWxlZCB3aXRoIGVycm9yOiVkXG4iLCByZXQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjZTYyMzBfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9JTlRFTCwgVVNCX1BJRF9JTlRFTF9DRTk1MDApIH0sCisJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGNlNjIzMF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBjZTYyMzBfcHJvcGVydGllcyA9IHsKKwkuY2FwcyA9IERWQl9VU0JfSVNfQU5fSTJDX0FEQVBURVIsCisKKwkudXNiX2N0cmwgPSBERVZJQ0VfU1BFQ0lGSUMsCisJLm5vX3JlY29ubmVjdCA9IDEsCisKKwkuc2l6ZV9vZl9wcml2ID0gMCwKKworCS5udW1fYWRhcHRlcnMgPSAxLAorCS5hZGFwdGVyID0geworCQl7CisJCQkuZnJvbnRlbmRfYXR0YWNoICA9IGNlNjIzMF96bDEwMzUzX2Zyb250ZW5kX2F0dGFjaCwKKwkJCS50dW5lcl9hdHRhY2ggICAgID0gY2U2MjMwX214bDUwMDNzX3R1bmVyX2F0dGFjaCwKKwkJCS5zdHJlYW0gPSB7CisJCQkJLnR5cGUgPSBVU0JfQlVMSywKKwkJCQkuY291bnQgPSA2LAorCQkJCS5lbmRwb2ludCA9IDB4ODIsCisJCQkJLnUgPSB7CisJCQkJCS5idWxrID0geworCQkJCQkJLmJ1ZmZlcnNpemUgPSA1MTIsCisJCQkJCX0KKwkJCQl9CisJCQl9LAorCQl9CisJfSwKKworCS5wb3dlcl9jdHJsID0gY2U2MjMwX3Bvd2VyX2N0cmwsCisKKwkuaTJjX2FsZ28gPSAmY2U2MjMwX2kyY19hbGdvLAorCisJLm51bV9kZXZpY2VfZGVzY3MgPSAxLAorCS5kZXZpY2VzID0geworCQl7CisJCQkubmFtZSA9ICJJbnRlbCBDRTk1MDAgcmVmZXJlbmNlIGRlc2lnbiIsCisJCQkuY29sZF9pZHMgPSB7TlVMTH0sCisJCQkud2FybV9pZHMgPSB7JmNlNjIzMF90YWJsZVswXSwgTlVMTH0sCisJCX0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGNlNjIzMF9kcml2ZXIgPSB7CisJLm5hbWUgICAgICAgPSAiZHZiX3VzYl9jZTYyMzAiLAorCS5wcm9iZSAgICAgID0gY2U2MjMwX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZHZiX3VzYl9kZXZpY2VfZXhpdCwKKwkuaWRfdGFibGUgICA9IGNlNjIzMF90YWJsZSwKK307CisKKy8qIG1vZHVsZSBzdHVmZiAqLworc3RhdGljIGludCBfX2luaXQgY2U2MjMwX21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKwlkZWJfaW5mbygiJXM6XG4iLCBfX2Z1bmNfXyk7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZjZTYyMzBfZHJpdmVyKTsKKwlpZiAocmV0KQorCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQgd2l0aCBlcnJvcjolZCIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY2U2MjMwX21vZHVsZV9leGl0KHZvaWQpCit7CisJZGViX2luZm8oIiVzOlxuIiwgX19mdW5jX18pOworCS8qIGRlcmVnaXN0ZXIgdGhpcyBkcml2ZXIgZnJvbSB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXVzYl9kZXJlZ2lzdGVyKCZjZTYyMzBfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY2U2MjMwX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGNlNjIzMF9tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEludGVsIENFNjIzMCBEVkItVCBVU0IyLjAiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NlNjIzMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YzQyNDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NlNjIzMC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBEVkIgVVNCIExpbnV4IGRyaXZlciBmb3IgSW50ZWwgQ0U2MjMwIERWQi1UIFVTQjIuMCByZWNlaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfRFZCX1VTQl9DRTYyMzBfSF8KKyNkZWZpbmUgX0RWQl9VU0JfQ0U2MjMwX0hfCisKKyNkZWZpbmUgRFZCX1VTQl9MT0dfUFJFRklYICJjZTYyMzAiCisjaW5jbHVkZSAiZHZiLXVzYi5oIgorCisjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pIGRwcmludGsoZHZiX3VzYl9jZTYyMzBfZGVidWcsIDB4MDEsIGFyZ3MpCisjZGVmaW5lIGRlYl9yYyhhcmdzLi4uKSAgIGRwcmludGsoZHZiX3VzYl9jZTYyMzBfZGVidWcsIDB4MDIsIGFyZ3MpCisjZGVmaW5lIGRlYl94ZmVyKGFyZ3MuLi4pIGRwcmludGsoZHZiX3VzYl9jZTYyMzBfZGVidWcsIDB4MDQsIGFyZ3MpCisjZGVmaW5lIGRlYl9yZWcoYXJncy4uLikgIGRwcmludGsoZHZiX3VzYl9jZTYyMzBfZGVidWcsIDB4MDgsIGFyZ3MpCisjZGVmaW5lIGRlYl9pMmMoYXJncy4uLikgIGRwcmludGsoZHZiX3VzYl9jZTYyMzBfZGVidWcsIDB4MTAsIGFyZ3MpCisjZGVmaW5lIGRlYl9mdyhhcmdzLi4uKSAgIGRwcmludGsoZHZiX3VzYl9jZTYyMzBfZGVidWcsIDB4MjAsIGFyZ3MpCisKKyNkZWZpbmUgY2U2MjMwX2RlYnVnX2R1bXAociwgdCwgdiwgaSwgYiwgbCwgZnVuYykgeyBcCisJaW50IGxvb3BfOyBcCisJZnVuYygiJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IiwgXAorCQl0LCByLCB2ICYgMHhmZiwgdiA+PiA4LCBpICYgMHhmZiwgaSA+PiA4LCBsICYgMHhmZiwgbCA+PiA4KTsgXAorCWlmICh0ID09IChVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCkpIFwKKwkJZnVuYygiID4+PiAiKTsgXAorCWVsc2UgXAorCQlmdW5jKCIgPDw8ICIpOyBcCisJZm9yIChsb29wXyA9IDA7IGxvb3BfIDwgbDsgbG9vcF8rKykgXAorCQlmdW5jKCIlMDJ4ICIsIGJbbG9vcF9dKTsgXAorCWZ1bmMoIlxuIik7XAorfQorCisjZGVmaW5lIENFNjIzMF9VU0JfVElNRU9VVCAxMDAwCisKK3N0cnVjdCByZXFfdCB7CisJdTggIGNtZDsgICAgICAgLyogWzFdICovCisJdTE2IHZhbHVlOyAgICAgLyogWzJ8M10gKi8KKwl1MTYgaW5kZXg7ICAgICAvKiBbNHw1XSAqLworCXUxNiBkYXRhX2xlbjsgIC8qIFs2fDddICovCisJdTggICpkYXRhOworfTsKKworZW51bSBjZTYyMzBfY21kIHsKKwlDT05GSUdfUkVBRCAgICAgICAgICA9IDB4ZDAsIC8qIHJkIDAgKHVuY2xlYXIpICovCisJVU5LTk9XTl9XUklURSAgICAgICAgPSAweGM3LCAvKiB3ciA3ICh1bmNsZWFyKSAqLworCUkyQ19SRUFEICAgICAgICAgICAgID0gMHhkOSwgLyogcmQgOSAodW5jbGVhcikgKi8KKwlJMkNfV1JJVEUgICAgICAgICAgICA9IDB4Y2EsIC8qIHdyIGEgKi8KKwlERU1PRF9SRUFEICAgICAgICAgICA9IDB4ZGIsIC8qIHJkIGIgKi8KKwlERU1PRF9XUklURSAgICAgICAgICA9IDB4Y2MsIC8qIHdyIGMgKi8KKwlSRUdfUkVBRCAgICAgICAgICAgICA9IDB4ZGUsIC8qIHJkIGUgKi8KKwlSRUdfV1JJVEUgICAgICAgICAgICA9IDB4Y2YsIC8qIHdyIGYgKi8KK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMKaW5kZXggMjAwYjIxNS4uZGI3ZjdmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jCkBAIC0xNTgsNiArMTU4LDEwIEBACiAJCQkJZXJyKCJpMmMgcmVhZCBlcnJvciAoc3RhdHVzID0gJWQpXG4iLCByZXN1bHQpOwogCQkJCWJyZWFrOwogCQkJfQorCisJCQlkZWJfZGF0YSgiPDw8ICIpOworCQkJZGVidWdfZHVtcChtc2dbaV0uYnVmLCBtc2dbaV0ubGVuLCBkZWJfZGF0YSk7CisKIAkJfSBlbHNlIHsKIAkJCS8qIFdyaXRlIHJlcXVlc3QgKi8KIAkJCWJ1ZlswXSA9IFJFUVVFU1RfTkVXX0kyQ19XUklURTsKQEAgLTE2OSw2ICsxNzMsOSBAQAogCQkJLyogVGhlIEFjdHVhbCBpMmMgcGF5bG9hZCAqLwogCQkJbWVtY3B5KCZidWZbNF0sIG1zZ1tpXS5idWYsIG1zZ1tpXS5sZW4pOwogCisJCQlkZWJfZGF0YSgiPj4+ICIpOworCQkJZGVidWdfZHVtcChidWYsIG1zZ1tpXS5sZW4gKyA0LCBkZWJfZGF0YSk7CisKIAkJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhkLT51ZGV2LAogCQkJCQkJIHVzYl9zbmRjdHJscGlwZShkLT51ZGV2LCAwKSwKIAkJCQkJCSBSRVFVRVNUX05FV19JMkNfV1JJVEUsCkBAIC0yMTEsNyArMjE4LDggQEAKIAogCQkJLyogc3BlY2lhbCB0aGluZyBpbiB0aGUgY3VycmVudCBmaXJtd2FyZTogd2hlbiBsZW5ndGggaXMgemVybyB0aGUgcmVhZC1mYWlsZWQgKi8KIAkJCWlmICgobGVuID0gZGliMDcwMF9jdHJsX3JkKGQsIGJ1ZiwgbXNnW2ldLmxlbiArIDIsIG1zZ1tpKzFdLmJ1ZiwgbXNnW2krMV0ubGVuKSkgPD0gMCkgewotCQkJCWRlYl9pbmZvKCJJMkMgcmVhZCBmYWlsZWQgb24gYWRkcmVzcyAleFxuIiwgbXNnW2ldLmFkZHIpOworCQkJCWRlYl9pbmZvKCJJMkMgcmVhZCBmYWlsZWQgb24gYWRkcmVzcyAweCUwMnhcbiIsCisJCQkJCSBtc2dbaV0uYWRkcik7CiAJCQkJYnJlYWs7CiAJCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCmluZGV4IDYzNWQzMGEuLjhkZGJhZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwpAQCAtMTcsNiArMTcsOCBAQAogI2luY2x1ZGUgInhjNTAwMC5oIgogI2luY2x1ZGUgInM1aDE0MTEuaCIKICNpbmNsdWRlICJkaWIwMDcwLmgiCisjaW5jbHVkZSAibGdkdDMzMDUuaCIKKyNpbmNsdWRlICJteGw1MDA3dC5oIgogCiBzdGF0aWMgaW50IGZvcmNlX2xuYV9hY3RpdmF0aW9uOwogbW9kdWxlX3BhcmFtKGZvcmNlX2xuYV9hY3RpdmF0aW9uLCBpbnQsIDA2NDQpOwpAQCAtMjYyLDcgKzI2NCwxMiBAQAogCQltc2xlZXAoMTApOwogCQlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzEwLCBHUElPX09VVCwgMSk7CiAJCW1zbGVlcCgxMCk7Ci0JCWRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwxLDE4LHN0azc3MDBkX2RpYjcwMDBwX210MjI2Nl9jb25maWcpOworCQlpZiAoZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAxLCAxOCwKKwkJCQkJICAgICBzdGs3NzAwZF9kaWI3MDAwcF9tdDIyNjZfY29uZmlnKQorCQkgICAgIT0gMCkgeworCQkJZXJyKCIlczogZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uIGZhaWxlZC4gIENhbm5vdCBjb250aW51ZVxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KIAl9CiAKIAlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goZGliNzAwMHBfYXR0YWNoLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwweDgwKyhhZGFwLT5pZCA8PCAxKSwKQEAgLTI4NCw3ICsyOTEsMTIgQEAKIAkJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8xMCwgR1BJT19PVVQsIDEpOwogCQltc2xlZXAoMTApOwogCQlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzAsIEdQSU9fT1VULCAxKTsKLQkJZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLDIsMTgsc3RrNzcwMGRfZGliNzAwMHBfbXQyMjY2X2NvbmZpZyk7CisJCWlmIChkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oJmFkYXAtPmRldi0+aTJjX2FkYXAsIDIsIDE4LAorCQkJCQkgICAgIHN0azc3MDBkX2RpYjcwMDBwX210MjI2Nl9jb25maWcpCisJCSAgICAhPSAwKSB7CisJCQllcnIoIiVzOiBkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24gZmFpbGVkLiAgQ2Fubm90IGNvbnRpbnVlXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQogCX0KIAogCWFkYXAtPmZlID0gZHZiX2F0dGFjaChkaWI3MDAwcF9hdHRhY2gsICZhZGFwLT5kZXYtPmkyY19hZGFwLDB4ODArKGFkYXAtPmlkIDw8IDEpLApAQCAtNDIxLDggKzQzMywxMiBAQAogCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMCwgR1BJT19PVVQsIDEpOwogCW1zbGVlcCgxMCk7CiAKLQlkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oJmFkYXAtPmRldi0+aTJjX2FkYXAsIDEsIDE4LAotCQkmc3RrNzcwMHBoX2RpYjc3MDBfeGMzMDI4X2NvbmZpZyk7CisJaWYgKGRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMSwgMTgsCisJCQkJICAgICAmc3RrNzcwMHBoX2RpYjc3MDBfeGMzMDI4X2NvbmZpZykgIT0gMCkgeworCQllcnIoIiVzOiBkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24gZmFpbGVkLiAgQ2Fubm90IGNvbnRpbnVlXG4iLAorCQkgICAgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goZGliNzAwMHBfYXR0YWNoLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMHg4MCwKIAkJJnN0azc3MDBwaF9kaWI3NzAwX3hjMzAyOF9jb25maWcpOwpAQCAtMTE4Nyw4ICsxMjAzLDEyIEBACiAJbXNsZWVwKDEwKTsKIAlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzAsIEdQSU9fT1VULCAxKTsKIAotCWRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMSwgMTgsCi0JCSZkaWI3MDcwcF9kaWI3MDAwcF9jb25maWcpOworCWlmIChkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oJmFkYXAtPmRldi0+aTJjX2FkYXAsIDEsIDE4LAorCQkJCSAgICAgJmRpYjcwNzBwX2RpYjcwMDBwX2NvbmZpZykgIT0gMCkgeworCQllcnIoIiVzOiBkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24gZmFpbGVkLiAgQ2Fubm90IGNvbnRpbnVlXG4iLAorCQkgICAgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goZGliNzAwMHBfYXR0YWNoLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMHg4MCwKIAkJJmRpYjcwNzBwX2RpYjcwMDBwX2NvbmZpZyk7CkBAIC0xMjQ0LDcgKzEyNjQsMTIgQEAKIAltc2xlZXAoMTApOwogCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMCwgR1BJT19PVVQsIDEpOwogCi0JZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAyLCAxOCwgc3RrNzA3MHBkX2RpYjcwMDBwX2NvbmZpZyk7CisJaWYgKGRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMiwgMTgsCisJCQkJICAgICBzdGs3MDcwcGRfZGliNzAwMHBfY29uZmlnKSAhPSAwKSB7CisJCWVycigiJXM6IGRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbiBmYWlsZWQuICBDYW5ub3QgY29udGludWVcbiIsCisJCSAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KIAogCWFkYXAtPmZlID0gZHZiX2F0dGFjaChkaWI3MDAwcF9hdHRhY2gsICZhZGFwLT5kZXYtPmkyY19hZGFwLCAweDgwLCAmc3RrNzA3MHBkX2RpYjcwMDBwX2NvbmZpZ1swXSk7CiAJcmV0dXJuIGFkYXAtPmZlID09IE5VTEwgPyAtRU5PREVWIDogMDsKQEAgLTEzNDcsNiArMTM3Miw3MiBAQAogCQk9PSBOVUxMID8gLUVOT0RFViA6IDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbGdkdDMzMDVfY29uZmlnIGhjd19sZ2R0MzMwNV9jb25maWcgPSB7CisJLmkyY19hZGRyICAgICAgICAgICA9IDB4MGUsCisJLm1wZWdfbW9kZSAgICAgICAgICA9IExHRFQzMzA1X01QRUdfUEFSQUxMRUwsCisJLnRwY2xrX2VkZ2UgICAgICAgICA9IExHRFQzMzA1X1RQQ0xLX0ZBTExJTkdfRURHRSwKKwkudHB2YWxpZF9wb2xhcml0eSAgID0gTEdEVDMzMDVfVFBfVkFMSURfTE9XLAorCS5kZW55X2kyY19ycHRyICAgICAgPSAwLAorCS5zcGVjdHJhbF9pbnZlcnNpb24gPSAxLAorCS5xYW1faWZfa2h6ICAgICAgICAgPSA2MDAwLAorCS52c2JfaWZfa2h6ICAgICAgICAgPSA2MDAwLAorCS51c3JlZl84dnNiICAgICAgICAgPSAweDA1MDAsCit9OworCitzdGF0aWMgc3RydWN0IG14bDUwMDd0X2NvbmZpZyBoY3dfbXhsNTAwN3RfY29uZmlnID0geworCS54dGFsX2ZyZXFfaHogPSBNeExfWFRBTF8yNV9NSFosCisJLmlmX2ZyZXFfaHogPSBNeExfSUZfNl9NSFosCisJLmludmVydF9pZiA9IDEsCit9OworCisvKiBUSUdFUi1BVFNDIG1hcDoKKyAgIEdQSU8wICAtIExOQV9DVFIgIChIOiBMTkEgcG93ZXIgZW5hYmxlZCwgTDogTE5BIHBvd2VyIGRpc2FibGVkKQorICAgR1BJTzEgIC0gQU5UX1NFTCAgKEg6IFZQQSwgTDogTUNYKQorICAgR1BJTzQgIC0gU0NMMgorICAgR1BJTzYgIC0gRU5fVFVORVIKKyAgIEdQSU83ICAtIFNEQTIKKyAgIEdQSU8xMCAtIERFTV9SU1QKKworICAgTVhMIGlzIGJlaGluZCBMRydzIGkyYyByZXBlYXRlci4gIExHIGlzIG9uIFNDTDIvU0RBMiBncGlvcyBvbiB0aGUgRElCCisgKi8KK3N0YXRpYyBpbnQgbGdkdDMzMDVfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IGRpYjA3MDBfc3RhdGUgKnN0ID0gYWRhcC0+ZGV2LT5wcml2OworCisJLyogTWFrZSB1c2Ugb2YgdGhlIG5ldyBpMmMgZnVuY3Rpb25zIGZyb20gRlcgMS4yMCAqLworCXN0LT5md191c2VfbmV3X2kyY19hcGkgPSAxOworCisJc3QtPmRpc2FibGVfc3RyZWFtaW5nX21hc3Rlcl9tb2RlID0gMTsKKworCS8qIGZlIHBvd2VyIGVuYWJsZSAqLworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPNiwgR1BJT19PVVQsIDApOworCW1zbGVlcCgzMCk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU82LCBHUElPX09VVCwgMSk7CisJbXNsZWVwKDMwKTsKKworCS8qIGRlbW9kIHJlc2V0ICovCisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8xMCwgR1BJT19PVVQsIDEpOworCW1zbGVlcCgzMCk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8xMCwgR1BJT19PVVQsIDApOworCW1zbGVlcCgzMCk7CisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8xMCwgR1BJT19PVVQsIDEpOworCW1zbGVlcCgzMCk7CisKKwlhZGFwLT5mZSA9IGR2Yl9hdHRhY2gobGdkdDMzMDVfYXR0YWNoLAorCQkJICAgICAgJmhjd19sZ2R0MzMwNV9jb25maWcsCisJCQkgICAgICAmYWRhcC0+ZGV2LT5pMmNfYWRhcCk7CisKKwlyZXR1cm4gYWRhcC0+ZmUgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOworfQorCitzdGF0aWMgaW50IG14bDUwMDd0X3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCXJldHVybiBkdmJfYXR0YWNoKG14bDUwMDd0X2F0dGFjaCwgYWRhcC0+ZmUsCisJCQkgICZhZGFwLT5kZXYtPmkyY19hZGFwLCAweDYwLAorCQkJICAmaGN3X214bDUwMDd0X2NvbmZpZykgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOworfQorCisKIC8qIERWQi1VU0IgYW5kIFVTQiBzdHVmZiBmb2xsb3dzICovCiBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkaWIwNzAwX3VzYl9pZF90YWJsZVtdID0gewogLyogMCAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9ESUJDT00sICAgIFVTQl9QSURfRElCQ09NX1NUSzc3MDBQKSB9LApAQCAtMTM5Niw2ICsxNDg3LDEyIEBACiAJeyBVU0JfREVWSUNFKFVTQl9WSURfVEVSUkFURUMsCVVTQl9QSURfVEVSUkFURUNfQ0lORVJHWV9UX0VYUFJFU1MpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WSURfVEVSUkFURUMsCiAJCQlVU0JfUElEX1RFUlJBVEVDX0NJTkVSR1lfRFRfWFNfRElWRVJTSVRZXzIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfU09OWSwJVVNCX1BJRF9TT05ZX1BMQVlUVikgfSwKKy8qIDQ1ICoveyBVU0JfREVWSUNFKFVTQl9WSURfWVVBTiwgICAgICBVU0JfUElEX1lVQU5fUEQzNzhTKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX0hBVVBQQVVHRSwgVVNCX1BJRF9IQVVQUEFVR0VfVElHRVJfQVRTQykgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9IQVVQUEFVR0UsIFVTQl9QSURfSEFVUFBBVUdFX1RJR0VSX0FUU0NfQjIxMCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9ZVUFOLAlVU0JfUElEX1lVQU5fTUM3NzApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfRUxHQVRPLAlVU0JfUElEX0VMR0FUT19FWUVUVl9EVFQpIH0sCiAJeyAwIH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRpYjA3MDBfdXNiX2lkX3RhYmxlKTsKQEAgLTE1OTUsNyArMTY5Miw3IEBACiAJCQl9LAogCQl9LAogCi0JCS5udW1fZGV2aWNlX2Rlc2NzID0gOSwKKwkJLm51bV9kZXZpY2VfZGVzY3MgPSAxMSwKIAkJLmRldmljZXMgPSB7CiAJCQl7ICAgIkRpQmNvbSBTVEs3MDcwUCByZWZlcmVuY2UgZGVzaWduIiwKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVsxNV0sIE5VTEwgfSwKQEAgLTE2MzMsNiArMTczMCwxNCBAQAogCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzMzXSwgTlVMTCB9LAogCQkJCXsgTlVMTCB9LAogCQkJfSwKKwkJCXsgICAiRWxnYXRvIEV5ZVRWIERUVCIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNDldLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAorCQkJeyAgICJZdWFuIFBEMzc4UyIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNDVdLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAogCQl9LAogCiAJCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKQEAgLTE2NjEsNyArMTc2Niw3IEBACiAJCQl9CiAJCX0sCiAKLQkJLm51bV9kZXZpY2VfZGVzY3MgPSA1LAorCQkubnVtX2RldmljZV9kZXNjcyA9IDYsCiAJCS5kZXZpY2VzID0gewogCQkJeyAgICJEaUJjb20gU1RLNzA3MFBEIHJlZmVyZW5jZSBkZXNpZ24iLAogCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzE3XSwgTlVMTCB9LApAQCAtMTY4Miw4ICsxNzg3LDE2IEBACiAJCQl7ICAiVGVycmF0ZWMgQ2luZXJneSBEVCBVU0IgWFMgRGl2ZXJzaXR5IiwKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs0M10sIE5VTEwgfSwKIAkJCQl7IE5VTEwgfSwKKwkJCX0sCisJCQl7ICAiU29ueSBQbGF5VFYiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzQ0XSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAogCQkJfQotCQl9CisJCX0sCisJCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKKwkJLnJjX2tleV9tYXAgICAgICAgPSBkaWIwNzAwX3JjX2tleXMsCisJCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShkaWIwNzAwX3JjX2tleXMpLAorCQkucmNfcXVlcnkgICAgICAgICA9IGRpYjA3MDBfcmNfcXVlcnkKIAl9LCB7IERJQjA3MDBfREVGQVVMVF9ERVZJQ0VfUFJPUEVSVElFUywKIAogCQkubnVtX2FkYXB0ZXJzID0gMSwKQEAgLTE2OTksNyArMTgxMiw3IEBACiAJCQl9LAogCQl9LAogCi0JCS5udW1fZGV2aWNlX2Rlc2NzID0gNSwKKwkJLm51bV9kZXZpY2VfZGVzY3MgPSA3LAogCQkuZGV2aWNlcyA9IHsKIAkJCXsgICAiVGVycmF0ZWMgQ2luZXJneSBIVCBVU0IgWEUiLAogCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzI3XSwgTlVMTCB9LApAQCAtMTcyNSw2ICsxODM4LDEwIEBACiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMzldLCBOVUxMIH0sCiAJCQkJeyBOVUxMIH0sCiAJCQl9LAorCQkJeyAgICJZVUFOIEhpZ2gtVGVjaCBNQzc3MCIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNDhdLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAogCQl9LAogCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCiAJCS5yY19rZXlfbWFwICAgICAgID0gZGliMDcwMF9yY19rZXlzLApAQCAtMTc1OSw2ICsxODc2LDMxIEBACiAJCS5yY19rZXlfbWFwICAgICAgID0gZGliMDcwMF9yY19rZXlzLAogCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoZGliMDcwMF9yY19rZXlzKSwKIAkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5CisJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCisJCS5udW1fYWRhcHRlcnMgPSAxLAorCQkuYWRhcHRlciA9IHsKKwkJCXsKKwkJCQkuZnJvbnRlbmRfYXR0YWNoICA9IGxnZHQzMzA1X2Zyb250ZW5kX2F0dGFjaCwKKwkJCQkudHVuZXJfYXR0YWNoICAgICA9IG14bDUwMDd0X3R1bmVyX2F0dGFjaCwKKworCQkJCURJQjA3MDBfREVGQVVMVF9TVFJFQU1JTkdfQ09ORklHKDB4MDIpLAorCisJCQkJLnNpemVfb2ZfcHJpdiA9IHNpemVvZihzdHJ1Y3QKKwkJCQkJCWRpYjA3MDBfYWRhcHRlcl9zdGF0ZSksCisJCQl9LAorCQl9LAorCisJCS5udW1fZGV2aWNlX2Rlc2NzID0gMiwKKwkJLmRldmljZXMgPSB7CisJCQl7ICAgIkhhdXBwYXVnZSBBVFNDIE1pbmlDYXJkIChCMjAwKSIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNDZdLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAorCQkJeyAgICJIYXVwcGF1Z2UgQVRTQyBNaW5pQ2FyZCAoQjIxMCkiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzQ3XSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKKwkJfSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCmluZGV4IDBkYjBjMDYuLmRjN2VhMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKQEAgLTI3LDEyICsyNywxNCBAQAogI2RlZmluZSBVU0JfVklEX0RJQkNPTQkJCQkweDEwYjgKICNkZWZpbmUgVVNCX1ZJRF9EUE9TSAkJCQkweDE0OTgKICNkZWZpbmUgVVNCX1ZJRF9EVklDTwkJCQkweDBmZTkKKyNkZWZpbmUgVVNCX1ZJRF9FTEdBVE8JCQkJMHgwZmQ5CiAjZGVmaW5lIFVTQl9WSURfRU1QSUEJCQkJMHhlYjFhCiAjZGVmaW5lIFVTQl9WSURfR0VOUElYCQkJCTB4MDljMAogI2RlZmluZSBVU0JfVklEX0dSQU5EVEVDCQkJMHg1MDMyCiAjZGVmaW5lIFVTQl9WSURfSEFORlRFSwkJCQkweDE1ZjQKICNkZWZpbmUgVVNCX1ZJRF9IQVVQUEFVR0UJCQkweDIwNDAKICNkZWZpbmUgVVNCX1ZJRF9IWVBFUl9QQUxURUsJCQkweDEwMjUKKyNkZWZpbmUgVVNCX1ZJRF9JTlRFTAkJCQkweDgwODYKICNkZWZpbmUgVVNCX1ZJRF9LV09STEQJCQkJMHhlYjJhCiAjZGVmaW5lIFVTQl9WSURfS1dPUkxEXzIJCQkweDFiODAKICNkZWZpbmUgVVNCX1ZJRF9LWUUJCQkJMHgwNDU4CkBAIC00OCw2ICs1MCw3IEBACiAjZGVmaW5lIFVTQl9WSURfVEVSUkFURUMJCQkweDBjY2QKICNkZWZpbmUgVVNCX1ZJRF9URUxFU1RBUgkJCTB4MTBiOQogI2RlZmluZSBVU0JfVklEX1ZJU0lPTlBMVVMJCQkweDEzZDMKKyNkZWZpbmUgVVNCX1ZJRF9TT05ZCQkJCTB4MTQxNQogI2RlZmluZSBVU0JfVklEX1RXSU5IQU4JCQkJMHgxODIyCiAjZGVmaW5lIFVTQl9WSURfVUxUSU1BX0VMRUNUUk9OSUMJCTB4MDVkOAogI2RlZmluZSBVU0JfVklEX1VOSVdJTEwJCQkJMHgxNTg0CkBAIC05NSw4ICs5OCwxMCBAQAogI2RlZmluZSBVU0JfUElEX1VOSVdJTExfU1RLNzcwMFAJCQkweDYwMDMKICNkZWZpbmUgVVNCX1BJRF9HUkFORFRFQ19EVkJUX1VTQl9DT0xECQkJMHgwZmEwCiAjZGVmaW5lIFVTQl9QSURfR1JBTkRURUNfRFZCVF9VU0JfV0FSTQkJCTB4MGZhMQorI2RlZmluZSBVU0JfUElEX0lOVEVMX0NFOTUwMAkJCQkweDk1MDAKICNkZWZpbmUgVVNCX1BJRF9LV09STERfMzk5VQkJCQkweGUzOTkKICNkZWZpbmUgVVNCX1BJRF9LV09STERfMzk1VQkJCQkweGUzOTYKKyNkZWZpbmUgVVNCX1BJRF9LV09STERfMzk1VV8yCQkJCTB4ZTM5YgogI2RlZmluZSBVU0JfUElEX0tXT1JMRF9QQzE2MF8yVAkJCQkweGMxNjAKICNkZWZpbmUgVVNCX1BJRF9LV09STERfVlNUUkVBTV9DT0xECQkJMHgxN2RlCiAjZGVmaW5lIFVTQl9QSURfS1dPUkxEX1ZTVFJFQU1fV0FSTQkJCTB4MTdkZgpAQCAtMTQ5LDYgKzE1NCw4IEBACiAjZGVmaW5lIFVTQl9QSURfSEFVUFBBVUdFX01ZVFZfVAkJCTB4NzA4MAogI2RlZmluZSBVU0JfUElEX0hBVVBQQVVHRV9OT1ZBX1REX1NUSUNLCQkJMHg5NTgwCiAjZGVmaW5lIFVTQl9QSURfSEFVUFBBVUdFX05PVkFfVERfU1RJQ0tfNTIwMDkJCTB4NTIwMAorI2RlZmluZSBVU0JfUElEX0hBVVBQQVVHRV9USUdFUl9BVFNDCQkJMHhiMjAwCisjZGVmaW5lIFVTQl9QSURfSEFVUFBBVUdFX1RJR0VSX0FUU0NfQjIxMAkJMHhiMjEwCiAjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX0VYUFJFU1MJCQkweGI1NjgKICNkZWZpbmUgVVNCX1BJRF9BVkVSTUVESUFfVk9MQVIJCQkJMHhhODA3CiAjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX1ZPTEFSXzIJCQkweGI4MDgKQEAgLTIzMiw5ICsyMzksMTMgQEAKICNkZWZpbmUgVVNCX1BJRF9BU1VTX1UzMTAwCQkJCTB4MTczZgogI2RlZmluZSBVU0JfUElEX1lVQU5fRUMzNzJTCQkJCTB4MWVkYwogI2RlZmluZSBVU0JfUElEX1lVQU5fU1RLNzcwMFBICQkJCTB4MWYwOAorI2RlZmluZSBVU0JfUElEX1lVQU5fUEQzNzhTCQkJCTB4MmVkYworI2RlZmluZSBVU0JfUElEX1lVQU5fTUM3NzAJCQkJMHgwODcxCiAjZGVmaW5lIFVTQl9QSURfRFcyMTAyCQkJCQkweDIxMDIKICNkZWZpbmUgVVNCX1BJRF9YVEVOU0lPTlNfWERfMzgwCQkJMHgwMzgxCiAjZGVmaW5lIFVTQl9QSURfVEVMRVNUQVJfU1RBUlNUSUNLXzIJCQkweDgwMDAKICNkZWZpbmUgVVNCX1BJRF9NU0lfRElHSV9WT1hfTUlOSV9JSUkgICAgICAgICAgICAgICAgICAgMHg4ODA3CisjZGVmaW5lIFVTQl9QSURfU09OWV9QTEFZVFYJCQkJMHgwMDAzCisjZGVmaW5lIFVTQl9QSURfRUxHQVRPX0VZRVRWX0RUVAkJCTB4MDAyMQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLmgKaW5kZXggYjFkZTBmNy4uMmQ1MzUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLmgKQEAgLTIyMyw3ICsyMjMsNyBAQAogCWludCBnZW5lcmljX2J1bGtfY3RybF9lbmRwb2ludDsKIAogCWludCBudW1fZGV2aWNlX2Rlc2NzOwotCXN0cnVjdCBkdmJfdXNiX2RldmljZV9kZXNjcmlwdGlvbiBkZXZpY2VzWzldOworCXN0cnVjdCBkdmJfdXNiX2RldmljZV9kZXNjcmlwdGlvbiBkZXZpY2VzWzExXTsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKaW5kZXggMzI1MjZmMS4uMTJmNzczMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIAkJc3VidW5pdF90eXBlID0gZGF0YVsxXSA+PiAzOwogCQlzdWJ1bml0X2lkID0gZGF0YVsxXSAmIDc7CiAJCW9wID0gc3VidW5pdF90eXBlID09IDB4MWUgfHwgc3VidW5pdF9pZCA9PSA1ID8gfjAgOiBkYXRhWzJdOwotCQlwcmludGsoS0VSTl9JTkZPICIlc3N1PSV4LiV4IGw9JWQ6ICUtOHMgLSAlc1xuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXNzdT0leC4leCBsPSV6dTogJS04cyAtICVzXG4iLAogCQkgICAgICAgcHJlZml4LCBzdWJ1bml0X3R5cGUsIHN1YnVuaXRfaWQsIGxlbmd0aCwKIAkJICAgICAgIGRlYnVnX2ZjcF9jdHlwZShkYXRhWzBdKSwKIAkJICAgICAgIGRlYnVnX2ZjcF9vcGNvZGUob3AsIGRhdGEsIGxlbmd0aCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZwppbmRleCAwMDI2OTU2Li5hMjA2Y2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZwpAQCAtMSwxNyArMSwyMSBAQAotbWVudSAiQ3VzdG9taXNlIERWQiBGcm9udGVuZHMiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRQotCiBjb25maWcgRFZCX0ZFX0NVU1RPTUlTRQogCWJvb2wgIkN1c3RvbWlzZSB0aGUgZnJvbnRlbmQgbW9kdWxlcyB0byBidWlsZCIKKwlkZXBlbmRzIG9uIERWQl9DT1JFCiAJZGVmYXVsdCBOCiAJaGVscAotCSAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gZGVzZWxlY3QgZnJvbnRlbmQgZHJpdmVycyB1bm5lY2Vzc2FyeQotCSAgZm9yIHRoZWlyIGhhcmR3YXJlIGZyb20gdGhlIGJ1aWxkLiBVc2UgdGhpcyBvcHRpb24gd2l0aCBjYXJlCi0JICBhcyBkZXNlbGVjdGluZyBmcm9udGVuZHMgd2hpY2ggYXJlIGluIGZhY3QgbmVjZXNzYXJ5IHdpbGwgcmVzdWx0Ci0JICBpbiBEVkIgZGV2aWNlcyB3aGljaCBjYW5ub3QgYmUgdHVuZWQgZHVlIHRvIGxhY2sgb2YgZHJpdmVyIHN1cHBvcnQuCisJICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBzZWxlY3QvZGVzZWxlY3QgZnJvbnRlbmQgZHJpdmVycyBmb3IgdGhlaXIKKwkgIGhhcmR3YXJlIGZyb20gdGhlIGJ1aWxkLgorCisJICBVc2UgdGhpcyBvcHRpb24gd2l0aCBjYXJlIGFzIGRlc2VsZWN0aW5nIGZyb250ZW5kcyB3aGljaCBhcmUgaW4gZmFjdAorCSAgbmVjZXNzYXJ5IHdpbGwgcmVzdWx0IGluIERWQiBkZXZpY2VzIHdoaWNoIGNhbm5vdCBiZSB0dW5lZCBkdWUgdG8gbGFjaworCSAgb2YgZHJpdmVyIHN1cHBvcnQuCiAKIAkgIElmIHVuc3VyZSBzYXkgTi4KIAoraWYgRFZCX0ZFX0NVU1RPTUlTRQorCittZW51ICJDdXN0b21pc2UgRFZCIEZyb250ZW5kcyIKKwogY29tbWVudCAiTXVsdGlzdGFuZGFyZCAoc2F0ZWxsaXRlKSBmcm9udGVuZHMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQogCkBAIC01NSw2ICs1OSwxMyBAQAogCWhlbHAKIAkgIEEgRFZCLVMgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAorY29uZmlnIERWQl9aTDEwMDM2CisJdHJpc3RhdGUgIlphcmxpbmsgWkwxMDAzNiBzaWxpY29uIHR1bmVyIgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwloZWxwCisJICBBIERWQi1TIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCisKIGNvbmZpZyBEVkJfUzVIMTQyMAogCXRyaXN0YXRlICJTYW1zdW5nIFM1SDE0MjAgYmFzZWQiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKQEAgLTgzLDYgKzk0LDIwIEBACiAJaGVscAogCSAgQSBEVkItUyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCitjb25maWcgRFZCX1NUVjYxMTAKKwl0cmlzdGF0ZSAiU1QgU1RWNjExMCBzaWxpY29uIHR1bmVyIgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwkgIGhlbHAKKwkgIEEgRFZCLVMgc2lsaWNvbiB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIHR1bmVyLgorCitjb25maWcgRFZCX1NUVjA5MDAKKwl0cmlzdGF0ZSAiU1QgU1RWMDkwMCBiYXNlZCIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgQSBEVkItUy9TMiBkZW1vZHVsYXRvci4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCisKIGNvbmZpZyBEVkJfVERBODA4MwogCXRyaXN0YXRlICJQaGlsaXBzIFREQTgwODMgYmFzZWQiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKQEAgLTI4OCw2ICszMTMsMTMgQEAKIAloZWxwCiAJICBBIERWQi1UIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKK2NvbmZpZyBEVkJfQUY5MDEzCisJdHJpc3RhdGUgIkFmYXRlY2ggQUY5MDEzIGRlbW9kdWxhdG9yIgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwloZWxwCisJICBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KKwogY29tbWVudCAiRFZCLUMgKGNhYmxlKSBmcm9udGVuZHMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQogCkBAIC0zODcsNiArNDE5LDE0IEBACiAJICBBbiBBVFNDIDhWU0IgYW5kIFFBTTY0LzI1NiB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQKIAkgIHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAorY29uZmlnIERWQl9MR0RUMzMwNQorCXRyaXN0YXRlICJMRyBFbGVjdHJvbmljcyBMR0RUMzMwNSBiYXNlZCIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgQW4gQVRTQyA4VlNCIGFuZCBRQU02NC8yNTYgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50CisJICB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCisKIGNvbmZpZyBEVkJfUzVIMTQwOQogCXRyaXN0YXRlICJTYW1zdW5nIFM1SDE0MDkgYmFzZWQiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKQEAgLTM5Nyw3ICs0MzcsNyBAQAogCiBjb25maWcgRFZCX0FVODUyMgogCXRyaXN0YXRlICJBdXZpdGVrIEFVODUyMiBiYXNlZCIKLQlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDICYmIFZJREVPX1Y0TDIKIAlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIEFuIEFUU0MgOFZTQiBhbmQgUUFNNjQvMjU2IHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudApAQCAtNDQ2LDExICs0ODYsMTEgQEAKIAlkZXBlbmRzIG9uIERWQl9DT1JFCiAKIGNvbmZpZyBEVkJfTE5CUDIxCi0JdHJpc3RhdGUgIkxOQlAyMSBTRUMgY29udHJvbGxlciIKKwl0cmlzdGF0ZSAiTE5CUDIxL0xOQkgyNCBTRUMgY29udHJvbGxlcnMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKIAlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKLQkgIEFuIFNFQyBjb250cm9sIGNoaXAuCisJICBBbiBTRUMgY29udHJvbCBjaGlwcy4KIAogY29uZmlnIERWQl9JU0w2NDA1CiAJdHJpc3RhdGUgIklTTDY0MDUgU0VDIGNvbnRyb2xsZXIiCkBAIC00NzgsMTEgKzUxOCw2IEBACiBjb25maWcgRFZCX0RVTU1ZX0ZFCiAJdHJpc3RhdGUgIkR1bW15IGZyb250ZW5kIGRyaXZlciIKIAlkZWZhdWx0IG4KLQotY29uZmlnIERWQl9BRjkwMTMKLQl0cmlzdGF0ZSAiQWZhdGVjaCBBRjkwMTMgZGVtb2R1bGF0b3IiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKLQlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQotCWhlbHAKLQkgIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogZW5kbWVudQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCmluZGV4IGFmN2JkZjAuLjY1YTMzNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKQEAgLTcsNiArNyw4IEBACiAKIHM5MjEtb2JqcyA6PSBzOTIxX21vZHVsZS5vIHM5MjFfY29yZS5vCiBzdGIwODk5LW9ianMgPSBzdGIwODk5X2Rydi5vIHN0YjA4OTlfYWxnby5vCitzdHYwOTAwLW9ianMgPSBzdHYwOTAwX2NvcmUubyBzdHYwOTAwX3N3Lm8KK2F1ODUyMi1vYmpzID0gYXU4NTIyX2RpZy5vIGF1ODUyMl9kZWNvZGVyLm8KIAogb2JqLSQoQ09ORklHX0RWQl9QTEwpICs9IGR2Yi1wbGwubwogb2JqLSQoQ09ORklHX0RWQl9TVFYwMjk5KSArPSBzdHYwMjk5Lm8KQEAgLTI4LDYgKzMwLDcgQEAKIG9iai0kKENPTkZJR19EVkJfU1A4ODdYKSArPSBzcDg4N3gubwogb2JqLSQoQ09ORklHX0RWQl9OWFQ2MDAwKSArPSBueHQ2MDAwLm8KIG9iai0kKENPTkZJR19EVkJfTVQzNTIpICs9IG10MzUyLm8KK29iai0kKENPTkZJR19EVkJfWkwxMDAzNikgKz0gemwxMDAzNi5vCiBvYmotJChDT05GSUdfRFZCX1pMMTAzNTMpICs9IHpsMTAzNTMubwogb2JqLSQoQ09ORklHX0RWQl9DWDIyNzAyKSArPSBjeDIyNzAyLm8KIG9iai0kKENPTkZJR19EVkJfRFJYMzk3WEQpICs9IGRyeDM5N3hELm8KQEAgLTQxLDYgKzQ0LDcgQEAKIG9iai0kKENPTkZJR19EVkJfUzVIMTQyMCkgKz0gczVoMTQyMC5vCiBvYmotJChDT05GSUdfRFZCX0xHRFQzMzBYKSArPSBsZ2R0MzMweC5vCiBvYmotJChDT05GSUdfRFZCX0xHRFQzMzA0KSArPSBsZ2R0MzMwNC5vCitvYmotJChDT05GSUdfRFZCX0xHRFQzMzA1KSArPSBsZ2R0MzMwNS5vCiBvYmotJChDT05GSUdfRFZCX0NYMjQxMjMpICs9IGN4MjQxMjMubwogb2JqLSQoQ09ORklHX0RWQl9MTkJQMjEpICs9IGxuYnAyMS5vCiBvYmotJChDT05GSUdfRFZCX0lTTDY0MDUpICs9IGlzbDY0MDUubwpAQCAtNjQsNCArNjgsNiBAQAogb2JqLSQoQ09ORklHX0RWQl9TVFYwMjg4KSArPSBzdHYwMjg4Lm8KIG9iai0kKENPTkZJR19EVkJfU1RCNjAwMCkgKz0gc3RiNjAwMC5vCiBvYmotJChDT05GSUdfRFZCX1M5MjEpICs9IHM5MjEubworb2JqLSQoQ09ORklHX0RWQl9TVFY2MTEwKSArPSBzdHY2MTEwLm8KK29iai0kKENPTkZJR19EVkJfU1RWMDkwMCkgKz0gc3R2MDkwMC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjIuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjIuaAppbmRleCA3Yjk0ZjU1Li41NjVkY2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMi5oCkBAIC03NCw2ICs3NCwyMiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19EVkJfQVU4NTIyICovCiAKKy8qIE90aGVyIG1vZGVzIG1heSBuZWVkIHRvIGJlIGFkZGVkIGxhdGVyICovCitlbnVtIGF1ODUyMl92aWRlb19pbnB1dCB7CisJQVU4NTIyX0NPTVBPU0lURV9DSDEgPSAxLAorCUFVODUyMl9DT01QT1NJVEVfQ0gyLAorCUFVODUyMl9DT01QT1NJVEVfQ0gzLAorCUFVODUyMl9DT01QT1NJVEVfQ0g0LAorCUFVODUyMl9DT01QT1NJVEVfQ0g0X1NJRiwKKwlBVTg1MjJfU1ZJREVPX0NIMTMsCisJQVU4NTIyX1NWSURFT19DSDI0LAorfTsKKworZW51bSBhdTg1MjJfYXVkaW9faW5wdXQgeworCUFVODUyMl9BVURJT19OT05FLAorCUFVODUyMl9BVURJT19TSUYsCit9OworCiAjZW5kaWYgLyogX19BVTg1MjJfSF9fICovCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyX2RlY29kZXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGVjb2Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2M2UxNTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyX2RlY29kZXIuYwpAQCAtMCwwICsxLDgzNSBAQAorLyoKKyAqIEF1dml0ZWsgQVU4NTIyIFFBTS84VlNCIGRlbW9kdWxhdG9yIGRyaXZlciBhbmQgdmlkZW8gZGVjb2RlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBEZXZpbiBIZWl0bXVlbGxlciA8ZGhlaXRtdWVsbGVyQGxpbnV4dHYub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggQXV2aXRlayBJbnRlcm5hdGlvbmFsLCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIEFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICovCisKKy8qIERldmVsb3BlciBub3RlczoKKyAqCisgKiBWQkkgc3VwcG9ydCBpcyBub3QgeWV0IHdvcmtpbmcKKyAqIFNhdHVyYXRpb24gYW5kIGh1ZSBzZXR0aW5nIGFyZSBub3QgeWV0IHdvcmtpbmcKKyAqIEVub3VnaCBpcyBpbXBsZW1lbnRlZCBoZXJlIGZvciBDVkJTIGFuZCBTLVZpZGVvIGlucHV0cywgYnV0IHRoZSBhY3R1YWwKKyAqICBhbmFsb2cgZGVtb2R1bGF0b3IgY29kZSBpc24ndCBpbXBsZW1lbnRlZCAobm90IG5lZWRlZCBmb3IgeGM1MDAwIHNpbmNlIGl0CisgKiAgaGFzIGl0cyBvd24gZGVtb2R1bGF0b3IgYW5kIG91dHB1dHMgQ1ZCUykKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlICJhdTg1MjIuaCIKKyNpbmNsdWRlICJhdTg1MjJfcHJpdi5oIgorCitNT0RVTEVfQVVUSE9SKCJEZXZpbiBIZWl0bXVlbGxlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IGF1ODUyMl9hbmFsb2dfZGVidWc7CisKKworbW9kdWxlX3BhcmFtX25hbWVkKGFuYWxvZ19kZWJ1ZywgYXU4NTIyX2FuYWxvZ19kZWJ1ZywgaW50LCAwNjQ0KTsKKworTU9EVUxFX1BBUk1fREVTQyhhbmFsb2dfZGVidWcsCisJCSAiQW5hbG9nIGRlYnVnZ2luZyBtZXNzYWdlcyBbMD1PZmYgKGRlZmF1bHQpIDE9T25dIik7CisKK3N0cnVjdCBhdTg1MjJfcmVnaXN0ZXJfY29uZmlnIHsKKwl1MTYgcmVnX25hbWU7CisJdTggcmVnX3ZhbFs4XTsKK307CisKKworLyogVmlkZW8gRGVjb2RlciBGaWx0ZXIgQ29lZmZpY2llbnRzCisgICBUaGUgdmFsdWVzIGFyZSBhcyBmb2xsb3dzIGZyb20gbGVmdCB0byByaWdodAorICAgMD0iQVRWIFJGIiAxPSJBVFYgUkYxMyIgMj0iQ1ZCUyIgMz0iUy1WaWRlbyIgND0iUEFMIiA1PUNWQlMxMyIgNj0iU1ZpZGVvMTMiCisqLworc3RydWN0IGF1ODUyMl9yZWdpc3Rlcl9jb25maWcgZmlsdGVyX2NvZWZbXSA9IHsKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTAsIHsweDI1LCAweDAwLCAweDI1LCAweDI1LCAweDAwLCAweDAwLCAweDAwfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxMSwgezB4MjAsIDB4MDAsIDB4MjAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDEyLCB7MHgwMywgMHgwMCwgMHgwMywgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTMsIHsweGU2LCAweDAwLCAweGU2LCAweGU2LCAweDAwLCAweDAwLCAweDAwfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxNCwgezB4NDAsIDB4MDAsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDE1LCB7MHgxYiwgMHgwMCwgMHgxYiwgMHgxYiwgMHgwMCwgMHgwMCwgMHgwMH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTYsIHsweGMwLCAweDAwLCAweGMwLCAweDA0LCAweDAwLCAweDAwLCAweDAwfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxNywgezB4MDQsIDB4MDAsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDE4LCB7MHg4YywgMHgwMCwgMHg4YywgMHg4YywgMHgwMCwgMHgwMCwgMHgwMH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTksIHsweGEwLCAweDQwLCAweGEwLCAweGEwLCAweDQwLCAweDQwLCAweDQwfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxQSwgezB4MjEsIDB4MDksIDB4MjEsIDB4MjEsIDB4MDksIDB4MDksIDB4MDl9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDFCLCB7MHg2YywgMHgzOCwgMHg2YywgMHg2YywgMHgzOCwgMHgzOCwgMHgzOH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUMsIHsweDAzLCAweGZmLCAweDAzLCAweDAzLCAweGZmLCAweGZmLCAweGZmfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxRCwgezB4YmYsIDB4YzcsIDB4YmYsIDB4YmYsIDB4YzcsIDB4YzcsIDB4Yzd9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDFFLCB7MHhhMCwgMHhkZiwgMHhhMCwgMHhhMCwgMHhkZiwgMHhkZiwgMHhkZn0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUYsIHsweDEwLCAweDA2LCAweDEwLCAweDEwLCAweDA2LCAweDA2LCAweDA2fSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQyMCwgezB4YWUsIDB4MzAsIDB4YWUsIDB4YWUsIDB4MzAsIDB4MzAsIDB4MzB9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDIxLCB7MHhjNCwgMHgwMSwgMHhjNCwgMHhjNCwgMHgwMSwgMHgwMSwgMHgwMX0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjIsIHsweDU0LCAweGRkLCAweDU0LCAweDU0LCAweGRkLCAweGRkLCAweGRkfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQyMywgezB4ZDAsIDB4YWYsIDB4ZDAsIDB4ZDAsIDB4YWYsIDB4YWYsIDB4YWZ9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDI0LCB7MHgxYywgMHhmNywgMHgxYywgMHgxYywgMHhmNywgMHhmNywgMHhmN30gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjUsIHsweDc2LCAweGRiLCAweDc2LCAweDc2LCAweGRiLCAweGRiLCAweGRifSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQyNiwgezB4NjEsIDB4YzAsIDB4NjEsIDB4NjEsIDB4YzAsIDB4YzAsIDB4YzB9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDI3LCB7MHhkMSwgMHgyZiwgMHhkMSwgMHhkMSwgMHgyZiwgMHgyZiwgMHgyZn0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjgsIHsweDg0LCAweGQ4LCAweDg0LCAweDg0LCAweGQ4LCAweGQ4LCAweGQ4fSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQyOSwgezB4MDYsIDB4ZmIsIDB4MDYsIDB4MDYsIDB4ZmIsIDB4ZmIsIDB4ZmJ9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDJBLCB7MHgyMSwgMHhkNSwgMHgyMSwgMHgyMSwgMHhkNSwgMHhkNSwgMHhkNX0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MkIsIHsweDBhLCAweDNlLCAweDBhLCAweDBhLCAweDNlLCAweDNlLCAweDNlfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQyQywgezB4ZTYsIDB4MTUsIDB4ZTYsIDB4ZTYsIDB4MTUsIDB4MTUsIDB4MTV9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDJELCB7MHgwMSwgMHgzNCwgMHgwMSwgMHgwMSwgMHgzNCwgMHgzNCwgMHgzNH0gfSwKKworfTsKKyNkZWZpbmUgTlVNX0ZJTFRFUl9DT0VGIChzaXplb2YoZmlsdGVyX2NvZWYpXAorCQkJIC8gc2l6ZW9mKHN0cnVjdCBhdTg1MjJfcmVnaXN0ZXJfY29uZmlnKSkKKworCisvKiBSZWdpc3RlcnMgMHgwNjBiIHRocm91Z2ggMHgwNjUyIGFyZSB0aGUgTFAgRmlsdGVyIGNvZWZmaWNpZW50cworICAgVGhlIHZhbHVlcyBhcmUgYXMgZm9sbG93cyBmcm9tIGxlZnQgdG8gcmlnaHQKKyAgIDA9IlNJRiIgMT0iQVRWUkYvQVRWUkYxMyIKKyAgIE5vdGU6IHRoZSAiQVRWUkYvQVRWUkYxMyIgbW9kZSBoYXMgbmV2ZXIgYmVlbiB0ZXN0ZWQKKyovCitzdHJ1Y3QgYXU4NTIyX3JlZ2lzdGVyX2NvbmZpZyBscGZpbHRlcl9jb2VmW10gPSB7CisJezB4MDYwYiwgezB4MjEsIDB4MGJ9IH0sCisJezB4MDYwYywgezB4YWQsIDB4YWR9IH0sCisJezB4MDYwZCwgezB4NzAsIDB4ZjB9IH0sCisJezB4MDYwZSwgezB4ZWEsIDB4ZTl9IH0sCisJezB4MDYwZiwgezB4ZGQsIDB4ZGR9IH0sCisJezB4MDYxMCwgezB4MDgsIDB4NjR9IH0sCisJezB4MDYxMSwgezB4NjAsIDB4NjB9IH0sCisJezB4MDYxMiwgezB4ZjgsIDB4YjJ9IH0sCisJezB4MDYxMywgezB4MDEsIDB4MDJ9IH0sCisJezB4MDYxNCwgezB4ZTQsIDB4YjR9IH0sCisJezB4MDYxNSwgezB4MTksIDB4MDJ9IH0sCisJezB4MDYxNiwgezB4YWUsIDB4MmV9IH0sCisJezB4MDYxNywgezB4ZWUsIDB4YzV9IH0sCisJezB4MDYxOCwgezB4NTYsIDB4NTZ9IH0sCisJezB4MDYxOSwgezB4MzAsIDB4NTh9IH0sCisJezB4MDYxYSwgezB4ZjksIDB4Zjh9IH0sCisJezB4MDYxYiwgezB4MjQsIDB4NjR9IH0sCisJezB4MDYxYywgezB4MDcsIDB4MDd9IH0sCisJezB4MDYxZCwgezB4MzAsIDB4MzB9IH0sCisJezB4MDYxZSwgezB4YTksIDB4ZWR9IH0sCisJezB4MDYxZiwgezB4MDksIDB4MGJ9IH0sCisJezB4MDYyMCwgezB4NDIsIDB4YzJ9IH0sCisJezB4MDYyMSwgezB4MWQsIDB4MmF9IH0sCisJezB4MDYyMiwgezB4ZDYsIDB4NTZ9IH0sCisJezB4MDYyMywgezB4OTUsIDB4OGJ9IH0sCisJezB4MDYyNCwgezB4MmIsIDB4MmJ9IH0sCisJezB4MDYyNSwgezB4MzAsIDB4MjR9IH0sCisJezB4MDYyNiwgezB4M2UsIDB4M2V9IH0sCisJezB4MDYyNywgezB4NjIsIDB4ZTJ9IH0sCisJezB4MDYyOCwgezB4ZTksIDB4ZjV9IH0sCisJezB4MDYyOSwgezB4OTksIDB4MTl9IH0sCisJezB4MDYyYSwgezB4ZDQsIDB4MTF9IH0sCisJezB4MDYyYiwgezB4MDMsIDB4MDR9IH0sCisJezB4MDYyYywgezB4YjUsIDB4ODV9IH0sCisJezB4MDYyZCwgezB4MWUsIDB4MjB9IH0sCisJezB4MDYyZSwgezB4MmEsIDB4ZWF9IH0sCisJezB4MDYyZiwgezB4ZDcsIDB4ZDJ9IH0sCisJezB4MDYzMCwgezB4MTUsIDB4MTV9IH0sCisJezB4MDYzMSwgezB4YTMsIDB4YTl9IH0sCisJezB4MDYzMiwgezB4MWYsIDB4MWZ9IH0sCisJezB4MDYzMywgezB4ZjksIDB4ZDF9IH0sCisJezB4MDYzNCwgezB4YzAsIDB4YzN9IH0sCisJezB4MDYzNSwgezB4NGQsIDB4OGR9IH0sCisJezB4MDYzNiwgezB4MjEsIDB4MzF9IH0sCisJezB4MDYzNywgezB4ODMsIDB4ODN9IH0sCisJezB4MDYzOCwgezB4MDgsIDB4OGN9IH0sCisJezB4MDYzOSwgezB4MTksIDB4MTl9IH0sCisJezB4MDYzYSwgezB4NDUsIDB4YTV9IH0sCisJezB4MDYzYiwgezB4ZWYsIDB4ZWN9IH0sCisJezB4MDYzYywgezB4OGEsIDB4OGF9IH0sCisJezB4MDYzZCwgezB4ZjQsIDB4ZjZ9IH0sCisJezB4MDYzZSwgezB4OGYsIDB4OGZ9IH0sCisJezB4MDYzZiwgezB4NDQsIDB4MGN9IH0sCisJezB4MDY0MCwgezB4ZWYsIDB4ZjB9IH0sCisJezB4MDY0MSwgezB4NjYsIDB4NjZ9IH0sCisJezB4MDY0MiwgezB4Y2MsIDB4ZDJ9IH0sCisJezB4MDY0MywgezB4NDEsIDB4NDF9IH0sCisJezB4MDY0NCwgezB4NjMsIDB4OTN9IH0sCisJezB4MDY0NSwgezB4OGUsIDB4OGV9IH0sCisJezB4MDY0NiwgezB4YTIsIDB4NDJ9IH0sCisJezB4MDY0NywgezB4N2IsIDB4N2J9IH0sCisJezB4MDY0OCwgezB4MDQsIDB4MDR9IH0sCisJezB4MDY0OSwgezB4MDAsIDB4MDB9IH0sCisJezB4MDY0YSwgezB4NDAsIDB4NDB9IH0sCisJezB4MDY0YiwgezB4OGMsIDB4OTh9IH0sCisJezB4MDY0YywgezB4MDAsIDB4MDB9IH0sCisJezB4MDY0ZCwgezB4NjMsIDB4YzN9IH0sCisJezB4MDY0ZSwgezB4MDQsIDB4MDR9IH0sCisJezB4MDY0ZiwgezB4MjAsIDB4MjB9IH0sCisJezB4MDY1MCwgezB4MDAsIDB4MDB9IH0sCisJezB4MDY1MSwgezB4NDAsIDB4NDB9IH0sCisJezB4MDY1MiwgezB4MDEsIDB4MDF9IH0sCit9OworI2RlZmluZSBOVU1fTFBGSUxURVJfQ09FRiAoc2l6ZW9mKGxwZmlsdGVyX2NvZWYpXAorCQkJICAgLyBzaXplb2Yoc3RydWN0IGF1ODUyMl9yZWdpc3Rlcl9jb25maWcpKQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhdTg1MjJfc3RhdGUgKnRvX3N0YXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGF1ODUyMl9zdGF0ZSwgc2QpOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF92Ymkoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUsIGludCBhdWRfaW5wdXQpCit7CisJaW50IGk7CisKKwkvKiBUaGVzZSBhcmUgc2V0IHRvIHplcm8gcmVnYXJkbGVzcyBvZiB3aGF0IG1vZGUgd2UncmUgaW4gKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQklfQ1RSTF9IX1JFRzAxN0gsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1ZCSV9DVFJMX0xfUkVHMDE4SCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVkJJX1VTRVJfVE9UQUxfQklUU19SRUcwMTlILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQklfVVNFUl9UVU5JVF9IX1JFRzAxQUgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX1RVTklUX0xfUkVHMDFCSCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVkJJX1VTRVJfVEhSRVNIMV9SRUcwMUNILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQklfVVNFUl9GUkFNRV9QQVQyX1JFRzAxRUgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX0ZSQU1FX1BBVDFfUkVHMDFGSCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVkJJX1VTRVJfRlJBTUVfUEFUMF9SRUcwMjBILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQklfVVNFUl9GUkFNRV9NQVNLMl9SRUcwMjFILAorCQkJMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVkJJX1VTRVJfRlJBTUVfTUFTSzFfUkVHMDIySCwKKwkJCTB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX0ZSQU1FX01BU0swX1JFRzAyM0gsCisJCQkweDAwKTsKKworCS8qIFNldHVwIHRoZSBWQkkgcmVnaXN0ZXJzICovCisJZm9yIChpID0gMHgzMDsgaSA8IDB4NjA7IGkrKykKKwkJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBpLCAweDQwKTsKKworCS8qIEZvciBzb21lIHJlYXNvbiwgZXZlcnkgcmVnaXN0ZXIgaXMgMHg0MCBleGNlcHQgcmVnaXN0ZXIgMHg0NAorCSAgIChjb25maXJtZWQgdmlhIHRoZSBIVlItOTUwcSBVU0IgY2FwdHVyZSkgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIDB4NDQsIDB4NjApOworCisJLyogRW5hYmxlIFZCSSAod2UgYWx3YXlzIGRvIHRoaXMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB1c2VyIGlzCisJICAgdmlld2luZyBjbG9zZWQgY2FwdGlvbiBpbmZvKSAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1ZCSV9DVFJMX0hfUkVHMDE3SCwKKwkJCUFVODUyMl9UVkRFQ19WQklfQ1RSTF9IX1JFRzAxN0hfQ0NPTik7CisKK30KKworc3RhdGljIHZvaWQgc2V0dXBfZGVjb2Rlcl9kZWZhdWx0cyhzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSwgdTggaW5wdXRfbW9kZSkKK3sKKwlpbnQgaTsKKwlpbnQgZmlsdGVyX2NvZWZfdHlwZTsKKworCS8qIFByb3ZpZGUgcmVhc29uYWJsZSBkZWZhdWx0cyBmb3IgcGljdHVyZSB0dW5pbmcgdmFsdWVzICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfU0hBUlBORVNTUkVHMDA5SCwgMHgwNyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQlJJR0hUTkVTU19SRUcwMEFILCAweGVkKTsKKwlzdGF0ZS0+YnJpZ2h0bmVzcyA9IDB4ZWQgLSAxMjg7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09OVFJBU1RfUkVHMDBCSCwgMHg3OSk7CisJc3RhdGUtPmNvbnRyYXN0ID0gMHg3OTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19TQVRVUkFUSU9OX0NCX1JFRzAwQ0gsIDB4ODApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1NBVFVSQVRJT05fQ1JfUkVHMDBESCwgMHg4MCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfSFVFX0hfUkVHMDBFSCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfSFVFX0xfUkVHMDBGSCwgMHgwMCk7CisKKwkvKiBPdGhlciBkZWNvZGVyIHJlZ2lzdGVycyAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0lOVF9NQVNLX1JFRzAxMEgsIDB4MDApOworCisJaWYgKGlucHV0X21vZGUgPT0gMHgyMykgeworCQkvKiBTLVZpZGVvIGlucHV0IG1hcHBpbmcgKi8KKwkJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVklERU9fTU9ERV9SRUcwMTFILCAweDA0KTsKKwl9IGVsc2UgeworCQkvKiBBbGwgb3RoZXIgbW9kZXMgKENWQlMvQVRWUkYgZXRjLikgKi8KKwkJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVklERU9fTU9ERV9SRUcwMTFILCAweDAwKTsKKwl9CisKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19QR0FfUkVHMDEySCwKKwkJCUFVODUyMl9UVkRFQ19QR0FfUkVHMDEySF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT01CX01PREVfUkVHMDE1SCwKKwkJCUFVODUyMl9UVkRFQ19DT01CX01PREVfUkVHMDE1SF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFRF9EQkdfTU9ERV9SRUcwNjBILAorCQkJQVU4NTIyX1RWREVEX0RCR19NT0RFX1JFRzA2MEhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfRk9STUFUX0NUUkwxX1JFRzA2MUgsCisJCQlBVTg1MjJfVFZERUNfRk9STUFUX0NUUkwxX1JFRzA2MUhfQ1ZCUzEzKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19GT1JNQVRfQ1RSTDJfUkVHMDYySCwKKwkJCUFVODUyMl9UVkRFQ19GT1JNQVRfQ1RSTDJfUkVHMDYySF9DVkJTMTMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1ZDUl9ERVRfTExJTV9SRUcwNjNILAorCQkJQVU4NTIyX1RWREVDX1ZDUl9ERVRfTExJTV9SRUcwNjNIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1ZDUl9ERVRfSExJTV9SRUcwNjRILAorCQkJQVU4NTIyX1RWREVDX1ZDUl9ERVRfSExJTV9SRUcwNjRIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTUJfVkRJRl9USFIxX1JFRzA2NUgsCisJCQlBVTg1MjJfVFZERUNfQ09NQl9WRElGX1RIUjFfUkVHMDY1SF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT01CX1ZESUZfVEhSMl9SRUcwNjZILAorCQkJQVU4NTIyX1RWREVDX0NPTUJfVkRJRl9USFIyX1JFRzA2NkhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9WRElGX1RIUjNfUkVHMDY3SCwKKwkJCUFVODUyMl9UVkRFQ19DT01CX1ZESUZfVEhSM19SRUcwNjdIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTUJfTk9UQ0hfVEhSX1JFRzA2OEgsCisJCQlBVTg1MjJfVFZERUNfQ09NQl9OT1RDSF9USFJfUkVHMDY4SF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT01CX0hESUZfVEhSMV9SRUcwNjlILAorCQkJQVU4NTIyX1RWREVDX0NPTUJfSERJRl9USFIxX1JFRzA2OUhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9IRElGX1RIUjJfUkVHMDZBSCwKKwkJCUFVODUyMl9UVkRFQ19DT01CX0hESUZfVEhSMl9SRUcwNkFIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTUJfSERJRl9USFIzX1JFRzA2QkgsCisJCQlBVTg1MjJfVFZERUNfQ09NQl9IRElGX1RIUjNfUkVHMDZCSF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT01CX0RDRElGX1RIUjFfUkVHMDZDSCwKKwkJCUFVODUyMl9UVkRFQ19DT01CX0RDRElGX1RIUjFfUkVHMDZDSF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT01CX0RDRElGX1RIUjJfUkVHMDZESCwKKwkJCUFVODUyMl9UVkRFQ19DT01CX0RDRElGX1RIUjJfUkVHMDZESF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT01CX0RDRElGX1RIUjNfUkVHMDZFSCwKKwkJCUFVODUyMl9UVkRFQ19DT01CX0RDRElGX1RIUjNfUkVHMDZFSF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19VVl9TRVBfVEhSX1JFRzA2RkgsCisJCQlBVTg1MjJfVFZERUNfVVZfU0VQX1RIUl9SRUcwNkZIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTUJfRENfVEhSMV9OVFNDX1JFRzA3MEgsCisJCQlBVTg1MjJfVFZERUNfQ09NQl9EQ19USFIxX05UU0NfUkVHMDcwSF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUcwNzFILCBBVTg1MjJfUkVHMDcxSF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUcwNzJILCBBVTg1MjJfUkVHMDcySF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT01CX0RDX1RIUjJfTlRTQ19SRUcwNzNILAorCQkJQVU4NTIyX1RWREVDX0NPTUJfRENfVEhSMl9OVFNDX1JFRzA3M0hfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHMDc0SCwgQVU4NTIyX1JFRzA3NEhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHMDc1SCwgQVU4NTIyX1JFRzA3NUhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfRENBR0NfQ1RSTF9SRUcwNzdILAorCQkJQVU4NTIyX1RWREVDX0RDQUdDX0NUUkxfUkVHMDc3SF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19QSUNfU1RBUlRfQURKX1JFRzA3OEgsCisJCQlBVTg1MjJfVFZERUNfUElDX1NUQVJUX0FESl9SRUcwNzhIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0FHQ19ISUdIX0xJTUlUX1JFRzA3OUgsCisJCQlBVTg1MjJfVFZERUNfQUdDX0hJR0hfTElNSVRfUkVHMDc5SF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19NQUNST1ZJU0lPTl9TWU5DX1RIUl9SRUcwN0FILAorCQkJQVU4NTIyX1RWREVDX01BQ1JPVklTSU9OX1NZTkNfVEhSX1JFRzA3QUhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfSU5UUlBfQ1RSTF9SRUcwN0JILAorCQkJQVU4NTIyX1RWREVDX0lOVFJQX0NUUkxfUkVHMDdCSF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19BR0NfTE9XX0xJTUlUX1JFRzBFNEgsCisJCQlBVTg1MjJfVFZERUNfQUdDX0xPV19MSU1JVF9SRUcwRTRIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RPUkVHQUFHQ19SRUcwRTVILAorCQkJQVU4NTIyX1RPUkVHQUFHQ19SRUcwRTVIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1JFRzAxNkgsIEFVODUyMl9SRUcwMTZIX0NWQlMpOworCisJc2V0dXBfdmJpKHN0YXRlLCAwKTsKKworCWlmIChpbnB1dF9tb2RlID09IEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfU1ZJREVPX0NIMTMgfHwKKwkgICAgaW5wdXRfbW9kZSA9PSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX1NWSURFT19DSDI0KSB7CisJCS8qIERlc3BpdGUgd2hhdCB0aGUgdGFibGUgc2F5cywgZm9yIHRoZSBIVlItOTUwcSB3ZSBzdGlsbCBuZWVkCisJCSAgIHRvIGJlIGluIENWQlMgbW9kZSBmb3IgdGhlIFMtVmlkZW8gaW5wdXQgKHJlYXNvbiB1a25vd24pLiAqLworCQkvKiBmaWx0ZXJfY29lZl90eXBlID0gMzsgKi8KKwkJZmlsdGVyX2NvZWZfdHlwZSA9IDU7CisJfSBlbHNlIHsKKwkJZmlsdGVyX2NvZWZfdHlwZSA9IDU7CisJfQorCisJLyogTG9hZCB0aGUgVmlkZW8gRGVjb2RlciBGaWx0ZXIgQ29lZmZpY2llbnRzICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9GSUxURVJfQ09FRjsgaSsrKSB7CisJCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgZmlsdGVyX2NvZWZbaV0ucmVnX25hbWUsCisJCQkJZmlsdGVyX2NvZWZbaV0ucmVnX3ZhbFtmaWx0ZXJfY29lZl90eXBlXSk7CisJfQorCisJLyogSXQncyBub3QgY2xlYXIgd2hhdCB0aGVzZSByZWdpc3RlcnMgYXJlIGZvciwgYnV0IHRoZXkgYXJlIGFsd2F5cworCSAgIHNldCB0byB0aGUgc2FtZSB2YWx1ZSByZWdhcmRsZXNzIG9mIHdoYXQgbW9kZSB3ZSdyZSBpbiAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1JFRzQyRUgsIDB4ODcpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1JFRzQyRkgsIDB4YTIpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1JFRzQzMEgsIDB4YmYpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1JFRzQzMUgsIDB4Y2IpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1JFRzQzMkgsIDB4YTEpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1JFRzQzM0gsIDB4NDEpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1JFRzQzNEgsIDB4ODgpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1JFRzQzNUgsIDB4YzIpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1JFRzQzNkgsIDB4M2MpOworfQorCitzdGF0aWMgdm9pZCBhdTg1MjJfc2V0dXBfY3Zic19tb2RlKHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlKQoreworCS8qIGhlcmUgd2UncmUgZ29pbmcgdG8gdHJ5IHRoZSBwcmUtcHJvZ3JhbW1lZCByb3V0ZSAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX01PRFVMRV9DTE9DS19DT05UUk9MX1JFRzBBM0gsCisJCQlBVTg1MjJfTU9EVUxFX0NMT0NLX0NPTlRST0xfUkVHMEEzSF9DVkJTKTsKKworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1BHQV9DT05UUk9MX1JFRzA4MkgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0NMQU1QSU5HX0NPTlRST0xfUkVHMDgzSCwgMHgwZSk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUEdBX0NPTlRST0xfUkVHMDgySCwgMHgxMCk7CisKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUgsCisJCQlBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0NWQlNfQ0gxKTsKKworCXNldHVwX2RlY29kZXJfZGVmYXVsdHMoc3RhdGUsIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfQ1ZCU19DSDEpOworCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SCwKKwkJCUFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRIX0NWQlMpOworfQorCitzdGF0aWMgdm9pZCBhdTg1MjJfc2V0dXBfY3Zic190dW5lcl9tb2RlKHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlKQoreworCS8qIGhlcmUgd2UncmUgZ29pbmcgdG8gdHJ5IHRoZSBwcmUtcHJvZ3JhbW1lZCByb3V0ZSAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX01PRFVMRV9DTE9DS19DT05UUk9MX1JFRzBBM0gsCisJCQlBVTg1MjJfTU9EVUxFX0NMT0NLX0NPTlRST0xfUkVHMEEzSF9DVkJTKTsKKworCS8qIEl0J3Mgbm90IGNsZWFyIHdoeSB0aGV5IHR1cm4gb2ZmIHRoZSBQR0EgYmVmb3JlIGVuYWJsaW5nIHRoZSBjbGFtcAorCSAgIGNvbnRyb2wsIGJ1dCB0aGUgV2luZG93cyB0cmFjZSBkb2VzIGl0IHNvIHdlIHdpbGwgdG9vLi4uICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUEdBX0NPTlRST0xfUkVHMDgySCwgMHgwMCk7CisKKwkvKiBFbmFibGUgY2xhbXBpbmcgY29udHJvbCAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0NMQU1QSU5HX0NPTlRST0xfUkVHMDgzSCwgMHgwZSk7CisKKwkvKiBUdXJuIG9uIHRoZSBQR0EgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9QR0FfQ09OVFJPTF9SRUcwODJILCAweDEwKTsKKworCS8qIFNldCBpbnB1dCBtb2RlIHRvIENWQlMgb24gY2hhbm5lbCA0IHdpdGggU0lGIGF1ZGlvIGlucHV0IGVuYWJsZWQgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUgsCisJCQlBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0NWQlNfQ0g0X1NJRik7CisKKwlzZXR1cF9kZWNvZGVyX2RlZmF1bHRzKHN0YXRlLAorCQkJICAgICAgIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfQ1ZCU19DSDRfU0lGKTsKKworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEgsCisJCQlBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SF9DVkJTKTsKK30KKworc3RhdGljIHZvaWQgYXU4NTIyX3NldHVwX3N2aWRlb19tb2RlKHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlKQoreworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX01PRFVMRV9DTE9DS19DT05UUk9MX1JFRzBBM0gsCisJCQlBVTg1MjJfTU9EVUxFX0NMT0NLX0NPTlRST0xfUkVHMEEzSF9TVklERU8pOworCisJLyogU2V0IGlucHV0IHRvIFkgb24gQ2hhbm5lMSwgQyBvbiBDaGFubmVsIDMgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUgsCisJCQlBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX1NWSURFT19DSDEzKTsKKworCS8qIERpc2FibGUgY2xhbXBpbmcgY29udHJvbCAocmVxdWlyZWQgZm9yIFMtdmlkZW8pICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQ0xBTVBJTkdfQ09OVFJPTF9SRUcwODNILCAweDAwKTsKKworCXNldHVwX2RlY29kZXJfZGVmYXVsdHMoc3RhdGUsCisJCQkgICAgICAgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9TVklERU9fQ0gxMyk7CisKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRILAorCQkJQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfQ1ZCUyk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkIGRpc2FibGVfYXVkaW9faW5wdXQoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUpCit7CisJLyogVGhpcyBjYW4gcHJvYmFibHkgYmUgb3B0aW1pemVkICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX0xfUkVHMEYySCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX1JfUkVHMEYzSCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX1JFRzBGNEgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0kyQ19DT05UUk9MX1JFRzFfUkVHMDkxSCwgMHg4MCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfSTJDX0NPTlRST0xfUkVHMF9SRUcwOTBILCAweDg0KTsKKworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0VOQV9VU0JfUkVHMTAxSCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX0xfUkVHMEYySCwgMHg3Rik7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX1JfUkVHMEYzSCwgMHg3Rik7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHMEY5SCwgQVU4NTIyX1JFRzBGOUhfQVVESU8pOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX01PREVfUkVHMEYxSCwgMHg0MCk7CisKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9HUElPX0RBVEFfUkVHMEUySCwgMHgxMSk7CisJbXNsZWVwKDUpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0dQSU9fREFUQV9SRUcwRTJILCAweDAwKTsKKworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUgsIDB4MDQpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPRlJFUV9SRUc2MDZILCAweDAzKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9JMlNfQ1RSTF8yX1JFRzExMkgsIDB4MDIpOworCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SCwKKwkJCUFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRIX0NWQlMpOworfQorCisvKiAwPWRpc2FibGUsIDE9U0lGICovCitzdGF0aWMgdm9pZCBzZXRfYXVkaW9faW5wdXQoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUsIGludCBhdWRfaW5wdXQpCit7CisJaW50IGk7CisKKwkvKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggc2V0dGluZworCSAgIHRoZSBpbnB1dCByb3V0aW5nIHZpYSByZWdpc3RlciAweDgxICovCisKKwlpZiAoYXVkX2lucHV0ID09IEFVODUyMl9BVURJT19OT05FKSB7CisJCWRpc2FibGVfYXVkaW9faW5wdXQoc3RhdGUpOworCQlyZXR1cm47CisJfQorCisJaWYgKGF1ZF9pbnB1dCAhPSBBVTg1MjJfQVVESU9fU0lGKSB7CisJCS8qIFRoZSBjYWxsZXIgYXNrZWQgZm9yIGEgbW9kZSB3ZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCAqLworCQlwcmludGsoS0VSTl9FUlIgIlVuc3VwcG9ydGVkIGF1ZGlvIG1vZGUgcmVxdWVzdGVkISBtb2RlPSVkXG4iLAorCQkgICAgICAgYXVkX2lucHV0KTsKKwkJcmV0dXJuOworCX0KKworCS8qIExvYWQgdGhlIEF1ZGlvIERlY29kZXIgRmlsdGVyIENvZWZmaWNpZW50cyAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fTFBGSUxURVJfQ09FRjsgaSsrKSB7CisJCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgbHBmaWx0ZXJfY29lZltpXS5yZWdfbmFtZSwKKwkJCQlscGZpbHRlcl9jb2VmW2ldLnJlZ192YWxbMF0pOworCX0KKworCS8qIFNldHVwIGF1ZGlvICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX0xfUkVHMEYySCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX1JfUkVHMEYzSCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX1JFRzBGNEgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0kyQ19DT05UUk9MX1JFRzFfUkVHMDkxSCwgMHg4MCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfSTJDX0NPTlRST0xfUkVHMF9SRUcwOTBILCAweDg0KTsKKwltc2xlZXAoMTUwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRILCAweDAwKTsKKwltc2xlZXAoMSk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SCwgMHg5ZCk7CisJbXNsZWVwKDUwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT19WT0xVTUVfTF9SRUcwRjJILCAweDdGKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT19WT0xVTUVfUl9SRUcwRjNILCAweDdGKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT19WT0xVTUVfUkVHMEY0SCwgMHhmZik7CisJbXNsZWVwKDgwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT19WT0xVTUVfTF9SRUcwRjJILCAweDdGKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT19WT0xVTUVfUl9SRUcwRjNILCAweDdGKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUcwRjlILCBBVTg1MjJfUkVHMEY5SF9BVURJTyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fTU9ERV9SRUcwRjFILCAweDgyKTsKKwltc2xlZXAoNzApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUgsIDB4MDkpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPRlJFUV9SRUc2MDZILCAweDAzKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9JMlNfQ1RSTF8yX1JFRzExMkgsIDB4YzIpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGF1ODUyMl9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXN0YXRlLT5icmlnaHRuZXNzID0gY3RybC0+dmFsdWU7CisJCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0JSSUdIVE5FU1NfUkVHMDBBSCwKKwkJCQljdHJsLT52YWx1ZSAtIDEyOCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCXN0YXRlLT5jb250cmFzdCA9IGN0cmwtPnZhbHVlOworCQlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT05UUkFTVF9SRUcwMEJILAorCQkJCWN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCWNhc2UgVjRMMl9DSURfSFVFOgorCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQkvKiBOb3QgeWV0IGltcGxlbWVudGVkICovCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXU4NTIyX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJLyogTm90ZSB0aGF0IHdlIGFyZSB1c2luZyB2YWx1ZXMgY2FjaGVkIGluIHRoZSBzdGF0ZSBzdHJ1Y3R1cmUgaW5zdGVhZAorCSAgIG9mIHJlYWRpbmcgdGhlIHJlZ2lzdGVycyBkdWUgdG8gaXNzdWVzIHdpdGggaTJjIHJlYWRzIG5vdCB3b3JraW5nCisJICAgcHJvcGVybHkvY29uc2lzdGVudGx5IHlldCBvbiB0aGUgSFZSLTk1MHEgKi8KKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCWN0cmwtPnZhbHVlID0gc3RhdGUtPmJyaWdodG5lc3M7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCWN0cmwtPnZhbHVlID0gc3RhdGUtPmNvbnRyYXN0OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgorCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgorCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCS8qIE5vdCB5ZXQgc3VwcG9ydGVkICovCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgYXU4NTIyX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN3aXRjaCAoZm10LT50eXBlKSB7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1ODUyMl9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzd2l0Y2ggKGZtdC0+dHlwZSkgeworCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgorCQkvKiBOb3QgeWV0IGltcGxlbWVudGVkICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworc3RhdGljIGludCBhdTg1MjJfZ19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwlpZiAoIXY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KGNsaWVudCwgJnJlZy0+bWF0Y2gpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJcmVnLT52YWwgPSBhdTg1MjJfcmVhZHJlZyhzdGF0ZSwgcmVnLT5yZWcgJiAweGZmZmYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1ODUyMl9zX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LCAmcmVnLT5tYXRjaCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIHJlZy0+cmVnLCByZWctPnZhbCAmIDB4ZmYpOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgYXU4NTIyX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCit7CisJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwlpZiAoZW5hYmxlKSB7CisJCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEgsCisJCQkJMHgwMSk7CisJCW1zbGVlcCgxKTsKKwkJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SCwKKwkJCQlBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SF9DVkJTKTsKKwl9IGVsc2UgeworCQkvKiBUaGlzIGRvZXMgbm90IGNvbXBsZXRlbHkgcG93ZXIgZG93biB0aGUgZGV2aWNlCisJCSAgIChpdCBvbmx5IHJlZHVjZXMgaXQgZnJvbSBhcm91bmQgMTQwbWEgdG8gODBtYSkgKi8KKwkJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SCwKKwkJCQkxIDw8IDUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTg1MjJfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDI1NSwgMSwKKwkJCQkJICAgIEFVODUyMl9UVkRFQ19DT05UUkFTVF9SRUcwMEJIX0NWQlMpOworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAyNTUsIDEsIDEyOCk7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCWNhc2UgVjRMMl9DSURfSFVFOgorCQkvKiBOb3QgeWV0IGltcGxlbWVudGVkICovCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcWMtPnR5cGUgPSAwOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGF1ODUyMl9yZXNldChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgdmFsKQoreworCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCAweGE0LCAxIDw8IDUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXU4NTIyX3NfdmlkZW9fcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCSAgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwlhdTg1MjJfcmVzZXQoc2QsIDApOworCisJLyogSmFtIG9wZW4gdGhlIGkyYyBnYXRlIHRvIHRoZSB0dW5lci4gIFdlIGRvIHRoaXMgaGVyZSB0byBoYW5kbGUgdGhlCisJICAgY2FzZSB3aGVyZSB0aGUgdXNlciB3ZW50IGludG8gZGlnaXRhbCBtb2RlIChjYXVzaW5nIHRoZSBnYXRlIHRvIGJlCisJICAgY2xvc2VkKSwgYW5kIHRoZW4gY2FtZSBiYWNrIHRvIGFuYWxvZyBtb2RlICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCAweDEwNiwgMSk7CisKKwlpZiAocm91dGUtPmlucHV0ID09IEFVODUyMl9DT01QT1NJVEVfQ0gxKSB7CisJCWF1ODUyMl9zZXR1cF9jdmJzX21vZGUoc3RhdGUpOworCX0gZWxzZSBpZiAocm91dGUtPmlucHV0ID09IEFVODUyMl9TVklERU9fQ0gxMykgeworCQlhdTg1MjJfc2V0dXBfc3ZpZGVvX21vZGUoc3RhdGUpOworCX0gZWxzZSBpZiAocm91dGUtPmlucHV0ID09IEFVODUyMl9DT01QT1NJVEVfQ0g0X1NJRikgeworCQlhdTg1MjJfc2V0dXBfY3Zic190dW5lcl9tb2RlKHN0YXRlKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgImF1ODUyMiBtb2RlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1ODUyMl9zX2F1ZGlvX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQoreworCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXNldF9hdWRpb19pbnB1dChzdGF0ZSwgcm91dGUtPmlucHV0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTg1MjJfZ190dW5lcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCit7CisJaW50IHZhbCA9IDA7CisJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJdTggbG9ja19zdGF0dXM7CisKKwkvKiBJbnRlcnJvZ2F0ZSB0aGUgZGVjb2RlciB0byBzZWUgaWYgd2UgYXJlIGdldHRpbmcgYSByZWFsIHNpZ25hbCAqLworCWxvY2tfc3RhdHVzID0gYXU4NTIyX3JlYWRyZWcoc3RhdGUsIDB4MDApOworCWlmIChsb2NrX3N0YXR1cyA9PSAweGEyKQorCQl2dC0+c2lnbmFsID0gMHgwMTsKKwllbHNlCisJCXZ0LT5zaWduYWwgPSAweDAwOworCisJdnQtPmNhcGFiaWxpdHkgfD0KKwkJVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwgVjRMMl9UVU5FUl9DQVBfTEFORzEgfAorCQlWNEwyX1RVTkVSX0NBUF9MQU5HMiB8IFY0TDJfVFVORVJfQ0FQX1NBUDsKKworCXZhbCA9IFY0TDJfVFVORVJfU1VCX01PTk87CisJdnQtPnJ4c3ViY2hhbnMgPSB2YWw7CisJdnQtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1ODUyMl9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBzdGF0ZS0+aWQsIHN0YXRlLT5yZXYpOworfQorCitzdGF0aWMgaW50IGF1ODUyMl9sb2dfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJLyogRklYTUU6IEFkZCBzb21lIHN0YXR1cyBpbmZvIGhlcmUgKi8KKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBhdTg1MjJfY29yZV9vcHMgPSB7CisJLmxvZ19zdGF0dXMgPSBhdTg1MjJfbG9nX3N0YXR1cywKKwkuZ19jaGlwX2lkZW50ID0gYXU4NTIyX2dfY2hpcF9pZGVudCwKKwkuZ19jdHJsID0gYXU4NTIyX2dfY3RybCwKKwkuc19jdHJsID0gYXU4NTIyX3NfY3RybCwKKwkucXVlcnljdHJsID0gYXU4NTIyX3F1ZXJ5Y3RybCwKKwkucmVzZXQgPSBhdTg1MjJfcmVzZXQsCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS5nX3JlZ2lzdGVyID0gYXU4NTIyX2dfcmVnaXN0ZXIsCisJLnNfcmVnaXN0ZXIgPSBhdTg1MjJfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgYXU4NTIyX3R1bmVyX29wcyA9IHsKKwkuZ190dW5lciA9IGF1ODUyMl9nX3R1bmVyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9hdWRpb19vcHMgYXU4NTIyX2F1ZGlvX29wcyA9IHsKKwkuc19yb3V0aW5nID0gYXU4NTIyX3NfYXVkaW9fcm91dGluZywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIGF1ODUyMl92aWRlb19vcHMgPSB7CisJLnNfcm91dGluZyA9IGF1ODUyMl9zX3ZpZGVvX3JvdXRpbmcsCisJLmdfZm10ID0gYXU4NTIyX2dfZm10LAorCS5zX2ZtdCA9IGF1ODUyMl9zX2ZtdCwKKwkuc19zdHJlYW0gPSBhdTg1MjJfc19zdHJlYW0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBhdTg1MjJfb3BzID0geworCS5jb3JlID0gJmF1ODUyMl9jb3JlX29wcywKKwkudHVuZXIgPSAmYXU4NTIyX3R1bmVyX29wcywKKwkuYXVkaW8gPSAmYXU4NTIyX2F1ZGlvX29wcywKKwkudmlkZW8gPSAmYXU4NTIyX3ZpZGVvX29wcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgYXU4NTIyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqZGlkKQoreworCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJaW50IGluc3RhbmNlOworCXN0cnVjdCBhdTg1MjJfY29uZmlnICpkZW1vZF9jb25maWc7CisKKwkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCisJCQkJICAgICBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKSB7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCisJaW5zdGFuY2UgPSBhdTg1MjJfZ2V0X3N0YXRlKCZzdGF0ZSwgY2xpZW50LT5hZGFwdGVyLCBjbGllbnQtPmFkZHIpOworCXN3aXRjaCAoaW5zdGFuY2UpIHsKKwljYXNlIDA6CisJCXByaW50ayhLRVJOX0VSUiAiYXU4NTIyX2RlY29kZXIgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwljYXNlIDE6CisJCS8qIG5ldyBkZW1vZCBpbnN0YW5jZSAqLworCQlwcmludGsoS0VSTl9JTkZPICJhdTg1MjJfZGVjb2RlciBjcmVhdGluZyBuZXcgaW5zdGFuY2UuLi5cbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBleGlzdGluZyBkZW1vZCBpbnN0YW5jZSAqLworCQlwcmludGsoS0VSTl9JTkZPICJhdTg1MjJfZGVjb2RlciBhdHRhY2ggZXhpc3RpbmcgaW5zdGFuY2UuXG4iKTsKKwkJYnJlYWs7CisJfQorCisJZGVtb2RfY29uZmlnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGF1ODUyMl9jb25maWcpLCBHRlBfS0VSTkVMKTsKKwlkZW1vZF9jb25maWctPmRlbW9kX2FkZHJlc3MgPSAweDhlID4+IDE7CisKKwlzdGF0ZS0+Y29uZmlnID0gZGVtb2RfY29uZmlnOworCXN0YXRlLT5pMmMgPSBjbGllbnQtPmFkYXB0ZXI7CisKKwlzZCA9ICZzdGF0ZS0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJmF1ODUyMl9vcHMpOworCisJc3RhdGUtPmMgPSBjbGllbnQ7CisJc3RhdGUtPnZpZF9pbnB1dCA9IEFVODUyMl9DT01QT1NJVEVfQ0gxOworCXN0YXRlLT5hdWRfaW5wdXQgPSBBVTg1MjJfQVVESU9fTk9ORTsKKwlzdGF0ZS0+aWQgPSA4NTIyOworCXN0YXRlLT5yZXYgPSAwOworCisJLyogSmFtIG9wZW4gdGhlIGkyYyBnYXRlIHRvIHRoZSB0dW5lciAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgMHgxMDYsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXU4NTIyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJYXU4NTIyX3JlbGVhc2Vfc3RhdGUodG9fc3RhdGUoc2QpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGF1ODUyMl9pZFtdID0geworCXsiYXU4NTIyIiwgMH0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhdTg1MjJfaWQpOworCitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAiYXU4NTIyIiwKKwkucHJvYmUgPSBhdTg1MjJfcHJvYmUsCisJLnJlbW92ZSA9IGF1ODUyMl9yZW1vdmUsCisJLmlkX3RhYmxlID0gYXU4NTIyX2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGlnLmMKc2ltaWxhcml0eSBpbmRleCA5MSUKcmVuYW1lIGZyb20gZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMi5jCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyX2RpZy5jCmluZGV4IGVhYmY5YTYuLjM1NzMxMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyX2RpZy5jCkBAIC0yNywzNSArMjcsMjUgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgogI2luY2x1ZGUgImF1ODUyMi5oIgotCi1zdHJ1Y3QgYXU4NTIyX3N0YXRlIHsKLQotCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOwotCi0JLyogY29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLwotCWNvbnN0IHN0cnVjdCBhdTg1MjJfY29uZmlnICpjb25maWc7Ci0KLQlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOwotCi0JdTMyIGN1cnJlbnRfZnJlcXVlbmN5OwotCWZlX21vZHVsYXRpb25fdCBjdXJyZW50X21vZHVsYXRpb247Ci0KLQl1MzIgZmVfc3RhdHVzOwotCXVuc2lnbmVkIGludCBsZWRfc3RhdGU7Ci19OworI2luY2x1ZGUgImF1ODUyMl9wcml2LmgiCiAKIHN0YXRpYyBpbnQgZGVidWc7CiAKLSNkZWZpbmUgZHByaW50ayhhcmcuLi4pIGRvIHsJCVwKLQlpZiAoZGVidWcpIAkJCVwKLQkJIHByaW50ayhhcmcpOyAJCVwKKy8qIERlc3BpdGUgdGhlIG5hbWUgImh5YnJpZF90dW5lciIsIHRoZSBmcmFtZXdvcmsgd29ya3MganVzdCBhcyB3ZWxsIGZvcgorICAgaHlicmlkIGRlbW9kdWxhdG9ycyBhcyB3ZWxsLi4uICovCitzdGF0aWMgTElTVF9IRUFEKGh5YnJpZF90dW5lcl9pbnN0YW5jZV9saXN0KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoYXU4NTIyX2xpc3RfbXV0ZXgpOworCisjZGVmaW5lIGRwcmludGsoYXJnLi4uKVwKKwlkbyB7IGlmIChkZWJ1ZylcCisJCXByaW50ayhhcmcpO1wKIAl9IHdoaWxlICgwKQogCiAvKiAxNiBiaXQgcmVnaXN0ZXJzLCA4IGJpdCB2YWx1ZXMgKi8KLXN0YXRpYyBpbnQgYXU4NTIyX3dyaXRlcmVnKHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlLCB1MTYgcmVnLCB1OCBkYXRhKQoraW50IGF1ODUyMl93cml0ZXJlZyhzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSwgdTE2IHJlZywgdTggZGF0YSkKIHsKIAlpbnQgcmV0OwotCXU4IGJ1ZiBbXSA9IHsgcmVnID4+IDgsIHJlZyAmIDB4ZmYsIGRhdGEgfTsKKwl1OCBidWZbXSA9IHsgKHJlZyA+PiA4KSB8IDB4ODAsIHJlZyAmIDB4ZmYsIGRhdGEgfTsKIAogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLAogCQkJICAgICAgIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAzIH07CkBAIC02OSwxMyArNTksMTMgQEAKIAlyZXR1cm4gKHJldCAhPSAxKSA/IC0xIDogMDsKIH0KIAotc3RhdGljIHU4IGF1ODUyMl9yZWFkcmVnKHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlLCB1MTYgcmVnKQordTggYXU4NTIyX3JlYWRyZWcoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUsIHUxNiByZWcpCiB7CiAJaW50IHJldDsKLQl1OCBiMCBbXSA9IHsgcmVnID4+IDgsIHJlZyAmIDB4ZmYgfTsKLQl1OCBiMSBbXSA9IHsgMCB9OworCXU4IGIwW10gPSB7IChyZWcgPj4gOCkgfCAweDQwLCByZWcgJiAweGZmIH07CisJdTggYjFbXSA9IHsgMCB9OwogCi0Jc3RydWN0IGkyY19tc2cgbXNnIFtdID0geworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0gewogCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gMCwKIAkJICAuYnVmID0gYjAsIC5sZW4gPSAyIH0sCiAJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSBJMkNfTV9SRCwKQEAgLTUyOCw3ICs1MTgsNyBAQAogCiAvKiBSZXNldCB0aGUgZGVtb2QgaGFyZHdhcmUgYW5kIHJlc2V0IGFsbCBvZiB0aGUgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKICAgIHRvIGEgZGVmYXVsdCBzdGF0ZS4gKi8KLXN0YXRpYyBpbnQgYXU4NTIyX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCitpbnQgYXU4NTIyX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CkBAIC02MjQsNyArNjE0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhdTg1MjJfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCitpbnQgYXU4NTIyX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwpAQCAtNjMyLDYgKzYyMiw5IEBACiAJLyogdHVybiBvZmYgbGVkICovCiAJYXU4NTIyX2xlZF9jdHJsKHN0YXRlLCAwKTsKIAorCS8qIFBvd2VyIGRvd24gdGhlIGNoaXAgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIDB4YTQsIDEgPDwgNSk7CisKIAlzdGF0ZS0+Y3VycmVudF9mcmVxdWVuY3kgPSAwOwogCiAJcmV0dXJuIDA7CkBAIC03OTgsMjMgKzc5MSw1OCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgYXU4NTIyX29wczsKKworaW50IGF1ODUyMl9nZXRfc3RhdGUoc3RydWN0IGF1ODUyMl9zdGF0ZSAqKnN0YXRlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKKwkJICAgICB1OCBjbGllbnRfYWRkcmVzcykKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmYXU4NTIyX2xpc3RfbXV0ZXgpOworCXJldCA9IGh5YnJpZF90dW5lcl9yZXF1ZXN0X3N0YXRlKHN0cnVjdCBhdTg1MjJfc3RhdGUsICgqc3RhdGUpLAorCQkJCQkgaHlicmlkX3R1bmVyX2luc3RhbmNlX2xpc3QsCisJCQkJCSBpMmMsIGNsaWVudF9hZGRyZXNzLCAiYXU4NTIyIik7CisJbXV0ZXhfdW5sb2NrKCZhdTg1MjJfbGlzdF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGF1ODUyMl9yZWxlYXNlX3N0YXRlKHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlKQoreworCW11dGV4X2xvY2soJmF1ODUyMl9saXN0X211dGV4KTsKKwlpZiAoc3RhdGUgIT0gTlVMTCkKKwkJaHlicmlkX3R1bmVyX3JlbGVhc2Vfc3RhdGUoc3RhdGUpOworCW11dGV4X3VubG9jaygmYXU4NTIyX2xpc3RfbXV0ZXgpOworfQorCisKIHN0YXRpYyB2b2lkIGF1ODUyMl9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7Ci0Ja2ZyZWUoc3RhdGUpOworCWF1ODUyMl9yZWxlYXNlX3N0YXRlKHN0YXRlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGF1ODUyMl9vcHM7Ci0KIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmF1ODUyMl9hdHRhY2goY29uc3Qgc3RydWN0IGF1ODUyMl9jb25maWcgKmNvbmZpZywKIAkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKIAlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSA9IE5VTEw7CisJaW50IGluc3RhbmNlOwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KLQlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdTg1MjJfc3RhdGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc3RhdGUgPT0gTlVMTCkKLQkJZ290byBlcnJvcjsKKwlpbnN0YW5jZSA9IGF1ODUyMl9nZXRfc3RhdGUoJnN0YXRlLCBpMmMsIGNvbmZpZy0+ZGVtb2RfYWRkcmVzcyk7CisJc3dpdGNoIChpbnN0YW5jZSkgeworCWNhc2UgMDoKKwkJZHByaW50aygiJXMgc3RhdGUgYWxsb2NhdGlvbiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkvKiBuZXcgZGVtb2QgaW5zdGFuY2UgKi8KKwkJZHByaW50aygiJXMgdXNpbmcgbmV3IGluc3RhbmNlXG4iLCBfX2Z1bmNfXyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGV4aXN0aW5nIGRlbW9kIGluc3RhbmNlICovCisJCWRwcmludGsoIiVzIHVzaW5nIGV4aXN0aW5nIGluc3RhbmNlXG4iLCBfX2Z1bmNfXyk7CisJCWJyZWFrOworCX0KIAogCS8qIHNldHVwIHRoZSBzdGF0ZSAqLwogCXN0YXRlLT5jb25maWcgPSBjb25maWc7CkBAIC04MzYsNyArODY0LDcgQEAKIAlyZXR1cm4gJnN0YXRlLT5mcm9udGVuZDsKIAogZXJyb3I6Ci0Ja2ZyZWUoc3RhdGUpOworCWF1ODUyMl9yZWxlYXNlX3N0YXRlKHN0YXRlKTsKIAlyZXR1cm4gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0woYXU4NTIyX2F0dGFjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyX3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMjhmMmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyX3ByaXYuaApAQCAtMCwwICsxLDQxMiBAQAorLyoKKyAgICBBdXZpdGVrIEFVODUyMiBRQU0vOFZTQiBkZW1vZHVsYXRvciBkcml2ZXIKKworICAgIENvcHlyaWdodCAoQykgMjAwOCBTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA4IERldmluIEhlaXRtdWVsbGVyIDxkaGVpdG11ZWxsZXJAbGludXh0di5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggQXV2aXRlayBJbnRlcm5hdGlvbmFsLCBMdGQuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorI2luY2x1ZGUgImF1ODUyMi5oIgorI2luY2x1ZGUgInR1bmVyLWkyYy5oIgorCitzdHJ1Y3QgYXU4NTIyX3N0YXRlIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqYzsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKKworCS8qIFVzZWQgZm9yIHNoYXJpbmcgb2YgdGhlIHN0YXRlIGJldHdlZW4gYW5hbG9nIGFuZCBkaWdpdGFsIG1vZGUgKi8KKwlzdHJ1Y3QgdHVuZXJfaTJjX3Byb3BzIGkyY19wcm9wczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGh5YnJpZF90dW5lcl9pbnN0YW5jZV9saXN0OworCisJLyogY29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLworCWNvbnN0IHN0cnVjdCBhdTg1MjJfY29uZmlnICpjb25maWc7CisKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOworCisJdTMyIGN1cnJlbnRfZnJlcXVlbmN5OworCWZlX21vZHVsYXRpb25fdCBjdXJyZW50X21vZHVsYXRpb247CisKKwl1MzIgZmVfc3RhdHVzOworCXVuc2lnbmVkIGludCBsZWRfc3RhdGU7CisKKwkvKiBBbmFsb2cgc2V0dGluZ3MgKi8KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CisJdjRsMl9zdGRfaWQgc3RkOworCWludCB2aWRfaW5wdXQ7CisJaW50IGF1ZF9pbnB1dDsKKwl1MzIgaWQ7CisJdTMyIHJldjsKKwl1OCBicmlnaHRuZXNzOworCXU4IGNvbnRyYXN0OworfTsKKworLyogVGhlc2UgYXJlIHJvdXRpbmVzIHNoYXJlZCBieSBib3RoIHRoZSBWU0IvUUFNIGRlbW9kdWxhdG9yIGFuZCB0aGUgYW5hbG9nCisgICBkZWNvZGVyICovCitpbnQgYXU4NTIyX3dyaXRlcmVnKHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlLCB1MTYgcmVnLCB1OCBkYXRhKTsKK3U4IGF1ODUyMl9yZWFkcmVnKHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlLCB1MTYgcmVnKTsKK2ludCBhdTg1MjJfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSk7CitpbnQgYXU4NTIyX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKTsKKworaW50IGF1ODUyMl9nZXRfc3RhdGUoc3RydWN0IGF1ODUyMl9zdGF0ZSAqKnN0YXRlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKKwkJICAgICB1OCBjbGllbnRfYWRkcmVzcyk7Cit2b2lkIGF1ODUyMl9yZWxlYXNlX3N0YXRlKHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlKTsKKworLyogUkVHSVNURVJTICovCisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUgJCQkweDA4MQorI2RlZmluZSBBVTg1MjJfUEdBX0NPTlRST0xfUkVHMDgySAkJCTB4MDgyCisjZGVmaW5lIEFVODUyMl9DTEFNUElOR19DT05UUk9MX1JFRzA4M0gJCQkweDA4MworCisjZGVmaW5lIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNICQkweDBBMworI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SAkJMHgwQTQKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUgJCTB4MEE1CisjZGVmaW5lIEFVODUyMl9BR0NfQ09OVFJPTF9SQU5HRV9SRUcwQTZICQkweDBBNgorI2RlZmluZSBBVTg1MjJfU1lTVEVNX0dBSU5fQ09OVFJPTF9SRUcwQTdICQkweDBBNworI2RlZmluZSBBVTg1MjJfVFVORVJfQUdDX1JGX1NUT1BfUkVHMEE4SCAgCQkweDBBOAorI2RlZmluZSBBVTg1MjJfVFVORVJfQUdDX1JGX1NUQVJUX1JFRzBBOUgJCTB4MEE5CisjZGVmaW5lIEFVODUyMl9UVU5FUl9SRl9BR0NfREVGQVVMVF9SRUcwQUFICQkweDBBQQorI2RlZmluZSBBVTg1MjJfVFVORVJfQUdDX0lGX1NUT1BfUkVHMEFCSAkJMHgwQUIKKyNkZWZpbmUgQVU4NTIyX1RVTkVSX0FHQ19JRl9TVEFSVF9SRUcwQUNICQkweDBBQworI2RlZmluZSBBVTg1MjJfVFVORVJfQUdDX0lGX0RFRkFVTFRfUkVHMEFESAkJMHgwQUQKKyNkZWZpbmUgQVU4NTIyX1RVTkVSX0FHQ19TVEVQX1JFRzBBRUgJCQkweDBBRQorI2RlZmluZSBBVTg1MjJfVFVORVJfR0FJTl9TVEVQX1JFRzBBRkgJCQkweDBBRgorCisvKiBSZWNlaXZlciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR1RIUkQxX1JFRzBCMEgJCQkweDBCMAorI2RlZmluZSBBVTg1MjJfRlJNUkVHQUdDMUhfUkVHMEIxSCAJCQkweDBCMQorI2RlZmluZSBBVTg1MjJfRlJNUkVHU0hJRlQxX1JFRzBCMkggCQkJMHgwQjIKKyNkZWZpbmUgQVU4NTIyX1RPUkVHQUdDMV9SRUcwQjNIIAkJCTB4MEIzCisjZGVmaW5lIEFVODUyMl9UT1JFR0FTSElGVDFfUkVHMEI0SCAJCQkweDBCNAorI2RlZmluZSBBVTg1MjJfRlJNUkVHQkJIX1JFRzBCNUgJCQkweDBCNQorI2RlZmluZSBBVTg1MjJfRlJNUkVHQkJNX1JFRzBCNkggCQkJMHgwQjYKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0JCTF9SRUcwQjdIICAgICAJCQkweDBCNworLyogMHhCOCBUTyAweEQ3IGFyZSB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cyAqLworI2RlZmluZSBBVTg1MjJfRlJNUkVHVEhSRDJfUkVHMEQ4SCAJCQkweDBEOAorI2RlZmluZSBBVTg1MjJfRlJNUkVHQUdDMkhfUkVHMEQ5SCAJCQkweDBEOQorI2RlZmluZSBBVTg1MjJfVE9SRUdBR0MyX1JFRzBEQUggCQkJMHgwREEKKyNkZWZpbmUgQVU4NTIyX1RPUkVHU0hJRlQyX1JFRzBEQkggCQkJMHgwREIKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR1BJTE9USF9SRUcwRENICQkJMHgwREMKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR1BJTE9UTV9SRUcwRERICQkJMHgwREQKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR1BJTE9UTF9SRUcwREVICQkJMHgwREUKKyNkZWZpbmUgQVU4NTIyX1RPUkVHRlJFUV9SRUcwREZICQkJMHgwREYKKworI2RlZmluZSBBVTg1MjJfUlhfUEdBX1JGT1VUX1JFRzBFQkgJCQkweDBFQgorI2RlZmluZSBBVTg1MjJfUlhfUEdBX0lGT1VUX1JFRzBFQ0gJCQkweDBFQworI2RlZmluZSBBVTg1MjJfUlhfUEdBX1BHQU9VVF9SRUcwRURICQkJMHgwRUQKKworI2RlZmluZSBBVTg1MjJfQ0hJUF9NT0RFX1JFRzBGRUgJCQkweDBGRQorCisvKiBJMkMgYnVzIGNvbnRyb2wgcmVnaXN0ZXJzICovCisjZGVmaW5lIEFVODUyMl9JMkNfQ09OVFJPTF9SRUcwX1JFRzA5MEggICAgCQkweDA5MAorI2RlZmluZSBBVTg1MjJfSTJDX0NPTlRST0xfUkVHMV9SRUcwOTFIICAgIAkJMHgwOTEKKyNkZWZpbmUgQVU4NTIyX0kyQ19TVEFUVVNfUkVHMDkySCAgICAgICAgICAJCTB4MDkyCisjZGVmaW5lIEFVODUyMl9JMkNfV1JfREFUQTBfUkVHMDkzSAkJCTB4MDkzCisjZGVmaW5lIEFVODUyMl9JMkNfV1JfREFUQTFfUkVHMDk0SAkJCTB4MDk0CisjZGVmaW5lIEFVODUyMl9JMkNfV1JfREFUQTJfUkVHMDk1SAkJCTB4MDk1CisjZGVmaW5lIEFVODUyMl9JMkNfV1JfREFUQTNfUkVHMDk2SAkJCTB4MDk2CisjZGVmaW5lIEFVODUyMl9JMkNfV1JfREFUQTRfUkVHMDk3SAkJCTB4MDk3CisjZGVmaW5lIEFVODUyMl9JMkNfV1JfREFUQTVfUkVHMDk4SAkJCTB4MDk4CisjZGVmaW5lIEFVODUyMl9JMkNfV1JfREFUQTZfUkVHMDk5SAkJCTB4MDk5CisjZGVmaW5lIEFVODUyMl9JMkNfV1JfREFUQTdfUkVHMDlBSAkJCTB4MDlBCisjZGVmaW5lIEFVODUyMl9JMkNfUkRfREFUQTBfUkVHMDlCSAkJCTB4MDlCCisjZGVmaW5lIEFVODUyMl9JMkNfUkRfREFUQTFfUkVHMDlDSAkJCTB4MDlDCisjZGVmaW5lIEFVODUyMl9JMkNfUkRfREFUQTJfUkVHMDlESAkJCTB4MDlECisjZGVmaW5lIEFVODUyMl9JMkNfUkRfREFUQTNfUkVHMDlFSAkJCTB4MDlFCisjZGVmaW5lIEFVODUyMl9JMkNfUkRfREFUQTRfUkVHMDlGSAkJCTB4MDlGCisjZGVmaW5lIEFVODUyMl9JMkNfUkRfREFUQTVfUkVHMEEwSAkJCTB4MEEwCisjZGVmaW5lIEFVODUyMl9JMkNfUkRfREFUQTZfUkVHMEExSAkJCTB4MEExCisjZGVmaW5lIEFVODUyMl9JMkNfUkRfREFUQTdfUkVHMEEySAkJCTB4MEEyCisKKyNkZWZpbmUgQVU4NTIyX0VOQV9VU0JfUkVHMTAxSAkJCQkweDEwMQorCisjZGVmaW5lIEFVODUyMl9JMlNfQ1RSTF8wX1JFRzExMEggIAkJCTB4MTEwCisjZGVmaW5lIEFVODUyMl9JMlNfQ1RSTF8xX1JFRzExMUggCQkJMHgxMTEKKyNkZWZpbmUgQVU4NTIyX0kyU19DVFJMXzJfUkVHMTEySCAJCQkweDExMgorCisjZGVmaW5lIEFVODUyMl9GUk1SRUdGRkVDT05UUk9MX1JFRzEyMUggICAgCQkweDEyMQorI2RlZmluZSBBVTg1MjJfRlJNUkVHREZFQ09OVFJPTF9SRUcxMjJIICAgIAkJMHgxMjIKKworI2RlZmluZSBBVTg1MjJfQ0FSUkZSRVFPRkZTRVQwX1JFRzIwMUggCQkJMHgyMDEKKyNkZWZpbmUgQVU4NTIyX0NBUlJGUkVRT0ZGU0VUMV9SRUcyMDJICQkJMHgyMDIKKworI2RlZmluZSBBVTg1MjJfREVDSU1BVElPTl9HQUlOX1JFRzIxQUgJCQkweDIxQQorI2RlZmluZSBBVTg1MjJfRlJNUkVHSUZTTFBfUkVHMjFCSCAJCQkweDIxQgorI2RlZmluZSBBVTg1MjJfRlJNUkVHVEhSREwyX1JFRzIxQ0ggCQkJMHgyMUMKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR1NURVAzREJfUkVHMjFESCAJCQkweDIxRAorI2RlZmluZSBBVTg1MjJfREFHQ19HQUlOX0FESlVTVE1FTlRfUkVHMjFFSAkJMHgyMUUKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR1BMTE1PREVfUkVHMjFGSCAJCQkweDIxRgorI2RlZmluZSBBVTg1MjJfRlJNUkVHQ1NUSFJEX1JFRzIyMEggCQkJMHgyMjAKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0NSTE9DS0RNQVhfUkVHMjIxSCAJCTB4MjIxCisjZGVmaW5lIEFVODUyMl9GUk1SRUdDUlBFUklPRE1BU0tfUkVHMjIySCAJCTB4MjIyCisjZGVmaW5lIEFVODUyMl9GUk1SRUdDUkxPQ0swVEhIX1JFRzIyM0ggCQkweDIyMworI2RlZmluZSBBVTg1MjJfRlJNUkVHQ1JMT0NLMVRISF9SRUcyMjRIIAkJMHgyMjQKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0NSTE9DSzBUSExfUkVHMjI1SCAJCTB4MjI1CisjZGVmaW5lIEFVODUyMl9GUk1SRUdDUkxPQ0sxVEhMX1JFRzIyNkggCQkweDIyNgorI2RlZmluZSBBVV9GUk1SRUdQTExBQ1FQSEFTRVNDTF9SRUcyMjdICQkJMHgyMjcKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0ZSRVFGQkNUUkxfUkVHMjI4SCAJCTB4MjI4CisKKy8qIEFuYWxvZyBUViBEZWNvZGVyICovCisjZGVmaW5lIEFVODUyMl9UVkRFQ19TVEFUVVNfUkVHMDAwSAkJCTB4MDAwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19JTlRfU1RBVFVTX1JFRzAwMUgJCQkweDAwMQorI2RlZmluZSBBVTg1MjJfVFZERUNfTUFDUk9WSVNJT05fU1RBVFVTX1JFRzAwMkggCTB4MDAyCisjZGVmaW5lIEFVODUyMl9UVkRFQ19TSEFSUE5FU1NSRUcwMDlICQkJMHgwMDkKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0JSSUdIVE5FU1NfUkVHMDBBSAkJCTB4MDBBCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT05UUkFTVF9SRUcwMEJICQkJMHgwMEIKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1NBVFVSQVRJT05fQ0JfUkVHMDBDSAkJMHgwMEMKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1NBVFVSQVRJT05fQ1JfUkVHMDBESAkJMHgwMEQKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0hVRV9IX1JFRzAwRUgJCQkweDAwRQorI2RlZmluZSBBVTg1MjJfVFZERUNfSFVFX0xfUkVHMDBGSCAgICAgICAgICAgICAgICAgICAJMHgwMEYKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0lOVF9NQVNLX1JFRzAxMEgJCQkweDAxMAorI2RlZmluZSBBVTg1MjJfVklERU9fTU9ERV9SRUcwMTFICQkJMHgwMTEKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1BHQV9SRUcwMTJICQkJMHgwMTIKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfTU9ERV9SRUcwMTVICQkJMHgwMTUKKyNkZWZpbmUgQVU4NTIyX1JFRzAxNkggICAgICAgICAgICAgICAgICAgICAgICAgICAgCTB4MDE2CisjZGVmaW5lIEFVODUyMl9UVkRFRF9EQkdfTU9ERV9SRUcwNjBICQkJMHgwNjAKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0ZPUk1BVF9DVFJMMV9SRUcwNjFICQkweDA2MQorI2RlZmluZSBBVTg1MjJfVFZERUNfRk9STUFUX0NUUkwyX1JFRzA2MkgJCTB4MDYyCisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQ1JfREVUX0xMSU1fUkVHMDYzSAkJMHgwNjMKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZDUl9ERVRfSExJTV9SRUcwNjRICQkweDA2NAorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9WRElGX1RIUjFfUkVHMDY1SAkJMHgwNjUKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfVkRJRl9USFIyX1JFRzA2NkgJCTB4MDY2CisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX1ZESUZfVEhSM19SRUcwNjdICQkweDA2NworI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9OT1RDSF9USFJfUkVHMDY4SAkJMHgwNjgKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfSERJRl9USFIxX1JFRzA2OUggICAJCTB4MDY5CisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0hESUZfVEhSMl9SRUcwNkFICQkweDA2QQorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9IRElGX1RIUjNfUkVHMDZCSCAgIAkJMHgwNkIKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSMV9SRUcwNkNIICAJCTB4MDZDCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0RDRElGX1RIUjJfUkVHMDZESCAJCTB4MDZECisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0RDRElGX1RIUjNfUkVHMDZFSCAgICAgICAJMHgwNkUKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1VWX1NFUF9USFJfUkVHMDZGSCAgCQkweDA2RgorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9EQ19USFIxX05UU0NfUkVHMDcwSAkJMHgwNzAKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfRENfVEhSMl9OVFNDX1JFRzA3M0gJCTB4MDczCisjZGVmaW5lIEFVODUyMl9UVkRFQ19EQ0FHQ19DVFJMX1JFRzA3N0gJCQkweDA3NworI2RlZmluZSBBVTg1MjJfVFZERUNfUElDX1NUQVJUX0FESl9SRUcwNzhICQkweDA3OAorI2RlZmluZSBBVTg1MjJfVFZERUNfQUdDX0hJR0hfTElNSVRfUkVHMDc5SAkJMHgwNzkKKyNkZWZpbmUgQVU4NTIyX1RWREVDX01BQ1JPVklTSU9OX1NZTkNfVEhSX1JFRzA3QUgJMHgwN0EKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0lOVFJQX0NUUkxfUkVHMDdCSAkJCTB4MDdCCisjZGVmaW5lIEFVODUyMl9UVkRFQ19QTExfU1RBVFVTX1JFRzA3RUgJCQkweDA3RQorI2RlZmluZSBBVTg1MjJfVFZERUNfRlNDX0ZSRVFfUkVHMDdGSAkJCTB4MDdGCisKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0FHQ19MT1dfTElNSVRfUkVHMEU0SAkJMHgwRTQKKyNkZWZpbmUgQVU4NTIyX1RPUkVHQUFHQ19SRUcwRTVICQkJMHgwRTUKKworI2RlZmluZSBBVTg1MjJfVFZERUNfQ0hST01BX0FHQ19SRUc0MDFICQkweDQwMQorI2RlZmluZSBBVTg1MjJfVFZERUNfQ0hST01BX1NGVF9SRUc0MDJICQkweDQwMgorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQxMCAgICAgCQkweDQxMAorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQxMSAgICAgCQkweDQxMQorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQxMiAgICAgCQkweDQxMgorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQxMyAgICAgCQkweDQxMworI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQxNCAgICAgCQkweDQxNAorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQxNSAgICAgCQkweDQxNQorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQxNiAgICAgCQkweDQxNgorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQxNyAgICAgCQkweDQxNworI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQxOCAgICAgCQkweDQxOAorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQxOSAgICAgCQkweDQxOQorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQxQSAgICAgCQkweDQxQQorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQxQiAgICAgCQkweDQxQgorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQxQyAgICAgCQkweDQxQworI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQxRCAgICAgCQkweDQxRAorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQxRSAgICAgCQkweDQxRQorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQxRiAgICAgCQkweDQxRgorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQyMCAgICAgCQkweDQyMAorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQyMSAgICAgCQkweDQyMQorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQyMiAgICAgCQkweDQyMgorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQyMyAgICAgCQkweDQyMworI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQyNCAgICAgCQkweDQyNAorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQyNSAgICAgCQkweDQyNQorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQyNiAgICAgCQkweDQyNgorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQyNyAgICAgCQkweDQyNworI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQyOCAgICAgCQkweDQyOAorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQyOSAgICAgCQkweDQyOQorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQyQSAgICAgCQkweDQyQQorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQyQiAgICAgCQkweDQyQgorI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQyQyAgICAgCQkweDQyQworI2RlZmluZSBBVTg1MjJfRklMVEVSX0NPRUZfUjQyRCAgICAgCQkweDQyRAorCisvKiBWQkkgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9SWF9GSUZPX0NPTlRBSU5fUkVHMDA0SCAgCTB4MDA0CisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfVFhfRklGT19DT05UQUlOX1JFRzAwNUggIAkweDAwNQorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1JYX0ZJRk9fUkVBRF9SRUcwMDZIICAgICAgCTB4MDA2CisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfRklGT19TVEFUVVNfUkVHMDA3SCAgICAgICAJMHgwMDcKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9DVFJMX0hfUkVHMDE3SAkJCTB4MDE3CisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfQ1RSTF9MX1JFRzAxOEgJCQkweDAxOAorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1VTRVJfVE9UQUxfQklUU19SRUcwMTlICTB4MDE5CisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfVVNFUl9UVU5JVF9IX1JFRzAxQUgJCTB4MDFBCisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfVVNFUl9UVU5JVF9MX1JFRzAxQkgJCTB4MDFCCisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfVVNFUl9USFJFU0gxX1JFRzAxQ0gJCTB4MDFDCisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfVVNFUl9GUkFNRV9QQVQyX1JFRzAxRUgJMHgwMUUKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX0ZSQU1FX1BBVDFfUkVHMDFGSCAgIAkweDAxRgorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1VTRVJfRlJBTUVfUEFUMF9SRUcwMjBIICAgCTB4MDIwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfVVNFUl9GUkFNRV9NQVNLMl9SRUcwMjFIIAkweDAyMQorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1VTRVJfRlJBTUVfTUFTSzFfUkVHMDIySCAgCTB4MDIyCisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfVVNFUl9GUkFNRV9NQVNLMF9SRUcwMjNICTB4MDIzCisKKyNkZWZpbmUgQVU4NTIyX1JFRzA3MUgJCQkJCTB4MDcxCisjZGVmaW5lIEFVODUyMl9SRUcwNzJICQkJCQkweDA3MgorI2RlZmluZSBBVTg1MjJfUkVHMDc0SAkJCQkJMHgwNzQKKyNkZWZpbmUgQVU4NTIyX1JFRzA3NUgJCQkJCTB4MDc1CisKKy8qIERpZ2l0YWwgRGVtb2R1bGF0b3IgUmVnaXN0ZXJzICovCisjZGVmaW5lIEFVODUyMl9GUkFNRV9DT1VOVDBfUkVHMDg0SAkJCTB4MDg0CisjZGVmaW5lIEFVODUyMl9SU19TVEFUVVNfRzBfUkVHMDg1SAkJCTB4MDg1CisjZGVmaW5lIEFVODUyMl9SU19TVEFUVVNfQjBfUkVHMDg2SAkJCTB4MDg2CisjZGVmaW5lIEFVODUyMl9SU19TVEFUVVNfRV9SRUcwODdICQkJMHgwODcKKyNkZWZpbmUgQVU4NTIyX0RFTU9EVUxBVElPTl9TVEFUVVNfUkVHMDg4SAkJMHgwODgKKyNkZWZpbmUgQVU4NTIyX1RPUkVHVFJFU1RBVFVTX1JFRzBFNkgJCQkweDBFNgorI2RlZmluZSBBVTg1MjJfVFNQT1JUX0NPTlRST0xfUkVHMTBCSAkJCTB4MTBCCisjZGVmaW5lIEFVODUyMl9UU1RIRVNfUkVHMTBDSAkJCQkweDEwQworI2RlZmluZSBBVTg1MjJfRlJNUkVHREZFS0VFUF9SRUczMDFICQkJMHgzMDEKKyNkZWZpbmUgQVU4NTIyX0RGRV9BVkVSQUdFX1JFRzMwMkgJCQkweDMwMgorI2RlZmluZSBBVTg1MjJfRlJNUkVHRVFMRVJSV0lOX1JFRzMwM0gJCQkweDMwMworI2RlZmluZSBBVTg1MjJfRlJNUkVHRkZFS0VFUF9SRUczMDRICQkJMHgzMDQKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0RGRUNPTlRST0wxX1JFRzMwNUgJCTB4MzA1CisjZGVmaW5lIEFVODUyMl9GUk1SRUdFUUxFUlJMT1dfUkVHMzA2SAkJCTB4MzA2CisKKyNkZWZpbmUgQVU4NTIyX1JFRzQyRUgJCQkJMHg0MkUKKyNkZWZpbmUgQVU4NTIyX1JFRzQyRkgJCQkJMHg0MkYKKyNkZWZpbmUgQVU4NTIyX1JFRzQzMEgJCQkJMHg0MzAKKyNkZWZpbmUgQVU4NTIyX1JFRzQzMUgJCQkJMHg0MzEKKyNkZWZpbmUgQVU4NTIyX1JFRzQzMkgJCQkJMHg0MzIKKyNkZWZpbmUgQVU4NTIyX1JFRzQzM0gJCQkJMHg0MzMKKyNkZWZpbmUgQVU4NTIyX1JFRzQzNEgJCQkJMHg0MzQKKyNkZWZpbmUgQVU4NTIyX1JFRzQzNUgJCQkJMHg0MzUKKyNkZWZpbmUgQVU4NTIyX1JFRzQzNkgJCQkJMHg0MzYKKworLyogR1BJTyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVU4NTIyX0dQSU9fQ09OVFJPTF9SRUcwRTBICQkJMHgwRTAKKyNkZWZpbmUgQVU4NTIyX0dQSU9fU1RBVFVTX1JFRzBFMUgJCQkweDBFMQorI2RlZmluZSBBVTg1MjJfR1BJT19EQVRBX1JFRzBFMkgJCQkweDBFMgorCisvKiBBdWRpbyBDb250cm9sIFJlZ2lzdGVycyAqLworI2RlZmluZSBBVTg1MjJfQVVESU9BR0NfUkVHMEVFSCAJCQkweDBFRQorI2RlZmluZSBBVTg1MjJfQVVESU9fU1RBVFVTX1JFRzBGMEggCQkJMHgwRjAKKyNkZWZpbmUgQVU4NTIyX0FVRElPX01PREVfUkVHMEYxSCAJCQkweDBGMQorI2RlZmluZSBBVTg1MjJfQVVESU9fVk9MVU1FX0xfUkVHMEYySCAJCQkweDBGMgorI2RlZmluZSBBVTg1MjJfQVVESU9fVk9MVU1FX1JfUkVHMEYzSCAJCQkweDBGMworI2RlZmluZSBBVTg1MjJfQVVESU9fVk9MVU1FX1JFRzBGNEggCQkJMHgwRjQKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0FVUEhBU0VfUkVHMEY3SCAJCQkweDBGNworI2RlZmluZSBBVTg1MjJfUkVHMEY5SAkJCQkJMHgwRjkKKworI2RlZmluZSBBVTg1MjJfQVVESU9BR0MyX1JFRzYwNUggCQkJMHg2MDUKKyNkZWZpbmUgQVU4NTIyX0FVRElPRlJFUV9SRUc2MDZIIAkJCTB4NjA2CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfQVRTQyAgICAgICAgICAgICAgIAkweEM0CisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfQVRWUkYJCQkweEM0CisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfQVRWUkYxMwkJCTB4QzQKKyNkZWZpbmUgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9KODNCNjQgICAgICAgICAgICAgCTB4QzQKKyNkZWZpbmUgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9KODNCMjU2ICAgICAgICAgICAgCTB4QzQKKyNkZWZpbmUgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9DVkJTICAgICAgICAgICAgICAgCTB4MjAKKyNkZWZpbmUgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9DVkJTX0NIMQkJCTB4QTIKKyNkZWZpbmUgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9DVkJTX0NIMgkJCTB4QTAKKyNkZWZpbmUgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9DVkJTX0NIMwkJCTB4NjkKKyNkZWZpbmUgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9DVkJTX0NINAkJCTB4NjgKKyNkZWZpbmUgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9DVkJTX0NINF9TSUYgICAgICAgIAkweDI4CisvKiBDSDEgQVMgWSxDSDMgQVMgQyAqLworI2RlZmluZSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX1NWSURFT19DSDEzICAgICAgICAJMHgyMworLyogQ0gyIEFTIFksQ0g0IEFTIEMgKi8KKyNkZWZpbmUgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9TVklERU9fQ0gyNCAgICAgICAgCTB4MjAKKyNkZWZpbmUgQVU4NTIyX01PRFVMRV9DTE9DS19DT05UUk9MX1JFRzBBM0hfQVRTQyAgICAgICAgCTB4MEMKKyNkZWZpbmUgQVU4NTIyX01PRFVMRV9DTE9DS19DT05UUk9MX1JFRzBBM0hfSjgzQjY0ICAgICAgCTB4MDkKKyNkZWZpbmUgQVU4NTIyX01PRFVMRV9DTE9DS19DT05UUk9MX1JFRzBBM0hfSjgzQjI1NiAgICAJCTB4MDkKKyNkZWZpbmUgQVU4NTIyX01PRFVMRV9DTE9DS19DT05UUk9MX1JFRzBBM0hfQ1ZCUyAgICAgICAgCTB4MTIKKyNkZWZpbmUgQVU4NTIyX01PRFVMRV9DTE9DS19DT05UUk9MX1JFRzBBM0hfQVRWUkYgICAgICAgCTB4MUEKKyNkZWZpbmUgQVU4NTIyX01PRFVMRV9DTE9DS19DT05UUk9MX1JFRzBBM0hfQVRWUkYxMwkJMHgxQQorI2RlZmluZSBBVTg1MjJfTU9EVUxFX0NMT0NLX0NPTlRST0xfUkVHMEEzSF9TVklERU8JCTB4MDIKKworI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SF9DTEVBUgkJMHgwMAorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SF9TVklERU8JCTB4OUMKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfQ1ZCUyAgICAgCTB4OUQKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfQVRTQwkJMHhFOAorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SF9KODNCMjU2IAkJMHhDQQorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SF9KODNCNjQgIAkJMHhDQQorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SF9BVFZSRiAgIAkJMHhERAorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SF9BVFZSRjEzCQkweERECisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRIX1BBTAkJMHhERAorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SF9GTQkJMHhERAorCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX0FUU0MJCTB4ODAKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUhfSjgzQjI1NiAJCTB4ODAKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUhfSjgzQjY0ICAJCTB4ODAKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUhfRE9OR0xFX0FUU0MJMHg0MAorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9ET05HTEVfSjgzQjI1NgkweDQwCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX0RPTkdMRV9KODNCNjQJMHg0MAorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9ET05HTEVfQ0xFQVIJMHgwMAorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9BVFZSRgkJMHgwMQorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9BVFZSRjEzCQkweDAxCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX1NWSURFTyAgCQkweDA0CisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX0NWQlMJCTB4MDEKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUhfUFdNICAgICAJCTB4MDMKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUhfSUlTICAgICAgCTB4MDkKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUhfUEFMCQkweDAxCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX0ZNCQkweDAxCisKKy8qIFNUSUxMIE5FRUQgVE8gQkUgUkVGQUNUT1JFRCBAQEBAQEBAQEBAQEBAQCAqLworI2RlZmluZSBBVTg1MjJfVFZERUNfQ09OVFJBU1RfUkVHMDBCSF9DVkJTCQkJMHg3OQorI2RlZmluZSBBVTg1MjJfVFZERUNfU0FUVVJBVElPTl9DQl9SRUcwMENIX0NWQlMJCQkweDgwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19TQVRVUkFUSU9OX0NSX1JFRzAwREhfQ1ZCUwkJCTB4ODAKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0hVRV9IX1JFRzAwRUhfQ1ZCUwkJCQkweDAwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19IVUVfTF9SRUcwMEZIX0NWQlMJCQkJMHgwMAorI2RlZmluZSBBVTg1MjJfVFZERUNfUEdBX1JFRzAxMkhfQ1ZCUwkJCQkweDBGCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX01PREVfUkVHMDE1SF9DVkJTCQkJMHgwMAorI2RlZmluZSBBVTg1MjJfUkVHMDE2SF9DVkJTCQkJCQkweDAwCisjZGVmaW5lIEFVODUyMl9UVkRFRF9EQkdfTU9ERV9SRUcwNjBIX0NWQlMJCQkweDAwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19GT1JNQVRfQ1RSTDFfUkVHMDYxSF9DVkJTCQkJMHgwQgorI2RlZmluZSBBVTg1MjJfVFZERUNfRk9STUFUX0NUUkwxX1JFRzA2MUhfQ1ZCUzEzCQkweDAzCisjZGVmaW5lIEFVODUyMl9UVkRFQ19GT1JNQVRfQ1RSTDJfUkVHMDYySF9DVkJTMTMJCTB4MDAKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZDUl9ERVRfTExJTV9SRUcwNjNIX0NWQlMJCQkweDE5CisjZGVmaW5lIEFVODUyMl9SRUcwRjlIX0FVRElPCQkJCQkweDIwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQ1JfREVUX0hMSU1fUkVHMDY0SF9DVkJTCQkJMHhBNworI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9WRElGX1RIUjFfUkVHMDY1SF9DVkJTCQkweDBBCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX1ZESUZfVEhSMl9SRUcwNjZIX0NWQlMJCTB4MzIKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfVkRJRl9USFIzX1JFRzA2N0hfQ1ZCUwkJMHgxOQorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9OT1RDSF9USFJfUkVHMDY4SF9DVkJTCQkweDIzCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0hESUZfVEhSMV9SRUcwNjlIX0NWQlMJCTB4NDEKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfSERJRl9USFIyX1JFRzA2QUhfQ1ZCUwkJMHgwQQorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9IRElGX1RIUjNfUkVHMDZCSF9DVkJTCQkweDMyCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0RDRElGX1RIUjFfUkVHMDZDSF9DVkJTCQkweDM0CisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0RDRElGX1RIUjJfUkVHMDZESF9DVkJTCQkweDA1CisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0RDRElGX1RIUjNfUkVHMDZFSF9DVkJTCQkweDZFCisjZGVmaW5lIEFVODUyMl9UVkRFQ19VVl9TRVBfVEhSX1JFRzA2RkhfQ1ZCUwkJCTB4MEYKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfRENfVEhSMV9OVFNDX1JFRzA3MEhfQ1ZCUwkJMHg4MAorI2RlZmluZSBBVTg1MjJfUkVHMDcxSF9DVkJTCQkJCQkweDE4CisjZGVmaW5lIEFVODUyMl9SRUcwNzJIX0NWQlMJCQkJCTB4MzAKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfRENfVEhSMl9OVFNDX1JFRzA3M0hfQ1ZCUwkJMHhGMAorI2RlZmluZSBBVTg1MjJfUkVHMDc0SF9DVkJTCQkJCQkweDgwCisjZGVmaW5lIEFVODUyMl9SRUcwNzVIX0NWQlMJCQkJCTB4RjAKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0RDQUdDX0NUUkxfUkVHMDc3SF9DVkJTCQkJMHhGQgorI2RlZmluZSBBVTg1MjJfVFZERUNfUElDX1NUQVJUX0FESl9SRUcwNzhIX0NWQlMJCQkweDA0CisjZGVmaW5lIEFVODUyMl9UVkRFQ19BR0NfSElHSF9MSU1JVF9SRUcwNzlIX0NWQlMJCTB4MDAKKyNkZWZpbmUgQVU4NTIyX1RWREVDX01BQ1JPVklTSU9OX1NZTkNfVEhSX1JFRzA3QUhfQ1ZCUwkJMHgwMAorI2RlZmluZSBBVTg1MjJfVFZERUNfSU5UUlBfQ1RSTF9SRUcwN0JIX0NWQlMJCQkweEVFCisjZGVmaW5lIEFVODUyMl9UVkRFQ19BR0NfTE9XX0xJTUlUX1JFRzBFNEhfQ1ZCUwkJCTB4RkUKKyNkZWZpbmUgQVU4NTIyX1RPUkVHQUFHQ19SRUcwRTVIX0NWQlMJCQkJMHgwMAorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJNkFfUkVHMDM1SF9DVkJTCQkJCTB4NDAKKworLyogRW5hYmxlcyBDbG9zZWQgY2FwdGlvbmluZyAqLworI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX0NUUkxfSF9SRUcwMTdIX0NDT04JCQkweDIxCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTMuYwppbmRleCBmNmU3YjAzLi5lNGZkNTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEzLmMKQEAgLTU1OSw3ICs1NTksNyBAQAogCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgY3gyNDExM19zdGF0ZSksIEdGUF9LRVJORUwpOwogCWludCByYzsKIAlpZiAoc3RhdGUgPT0gTlVMTCkgewotCQllcnIoIlVuYWJsZSB0byBrbWFsbG9jXG4iKTsKKwkJZXJyKCJVbmFibGUgdG8ga3phbGxvY1xuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExNi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuYwppbmRleCAyOGFkNjA5Li45YjlmNTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExNi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmMKQEAgLTE1LDYgKzE1LDkgQEAKIAlTZXB0ZW1iZXIsIDl0aCAyMDA4CiAJICAgIEZpeGVkIGxvY2tpbmcgb24gaGlnaCBzeW1ib2wgcmF0ZXMgKD4zMDAwMCkuCiAJICAgIEltcGxlbWVudCBNUEVHIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlci4KKwlKYW51YXJ5LCAxN3RoIDIwMDkKKwkgICAgRmlsbCBzZXRfdm9sdGFnZSB3aXRoIGFjdHVhbGx5IGNvbnRyb2wgdm9sdGFnZSBjb2RlLgorCSAgICBDb3JyZWN0IHNldCB0b25lIHRvIG5vdCBhZmZlY3Qgdm9sdGFnZS4KIAogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE0Niw3ICsxNDksNyBAQAogCUNNRF9HRVRBR0MgICAgICA9IDB4MTksCiAJQ01EX0xOQkNPTkZJRyAgID0gMHgyMCwKIAlDTURfTE5CU0VORCAgICAgPSAweDIxLCAvKiBGb3JtZXJseSBDTURfU0VORF9ESVNFUUMgKi8KLQlDTURfU0VUX1RPTkVQUkUgPSAweDIyLAorCUNNRF9MTkJEQ0xFVkVMICA9IDB4MjIsCiAJQ01EX1NFVF9UT05FICAgID0gMHgyMywKIAlDTURfVVBERldWRVJTICAgPSAweDM1LAogCUNNRF9UVU5FUlNMRUVQICA9IDB4MzYsCkBAIC02NjcsMTYgKzY3MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDExNl9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKLQlmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCi17Ci0JLyogVGhlIGlzbDY0MjEgbW9kdWxlIHdpbGwgb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBpbiB0aGUgZm9wcy4gKi8KLQlkcHJpbnRrKCIlcygpIFRoaXMgc2hvdWxkIG5ldmVyIGFwcGVhciBpZiB0aGUgaXNsNjQyMSBtb2R1bGUgIgotCQkiaXMgbG9hZGVkIGNvcnJlY3RseVxuIiwgX19mdW5jX18pOwotCi0JcmV0dXJuIC1FT1BOT1RTVVBQOwotfQotCiBzdGF0aWMgaW50IGN4MjQxMTZfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0dXMpCiB7CiAJc3RydWN0IGN4MjQxMTZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CkBAIC04MzcsNiArODMwLDM0IEBACiAJcmV0dXJuIC1FVElNRURPVVQ7IC8qIC1FQlVTWSA/ICovCiB9CiAKK3N0YXRpYyBpbnQgY3gyNDExNl9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwlmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCit7CisJc3RydWN0IGN4MjQxMTZfY21kIGNtZDsKKwlpbnQgcmV0OworCisJZHByaW50aygiJXM6ICVzXG4iLCBfX2Z1bmNfXywKKwkJdm9sdGFnZSA9PSBTRUNfVk9MVEFHRV8xMyA/ICJTRUNfVk9MVEFHRV8xMyIgOgorCQl2b2x0YWdlID09IFNFQ19WT0xUQUdFXzE4ID8gIlNFQ19WT0xUQUdFXzE4IiA6ICI/PyIpOworCisJLyogV2FpdCBmb3IgTE5CIHJlYWR5ICovCisJcmV0ID0gY3gyNDExNl93YWl0X2Zvcl9sbmIoZmUpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFdhaXQgZm9yIHZvbHRhZ2UvbWluIHJlcGVhdCBkZWxheSAqLworCW1zbGVlcCgxMDApOworCisJY21kLmFyZ3NbMHgwMF0gPSBDTURfTE5CRENMRVZFTDsKKwljbWQuYXJnc1sweDAxXSA9ICh2b2x0YWdlID09IFNFQ19WT0xUQUdFXzE4ID8gMHgwMSA6IDB4MDApOworCWNtZC5sZW4gPSAweDAyOworCisJLyogTWluIGRlbGF5IHRpbWUgYmVmb3JlIERpU0VxQyBzZW5kICovCisJbXNsZWVwKDE1KTsKKworCXJldHVybiBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKK30KKwogc3RhdGljIGludCBjeDI0MTE2X3NldF90b25lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCWZlX3NlY190b25lX21vZGVfdCB0b25lKQogewpAQCAtODU3LDE0ICs4NzgsNiBAQAogCS8qIE1pbiBkZWxheSB0aW1lIGFmdGVyIERpU0VxQyBzZW5kICovCiAJbXNsZWVwKDE1KTsgLyogWFhYIGRldGVybWluZSBpcyBGVyBkb2VzIHRoaXMsIHNlZSBzZW5kX2Rpc2VxYy9idXJzdCAqLwogCi0JLyogVGhpcyBpcyBhbHdheXMgZG9uZSBiZWZvcmUgdGhlIHRvbmUgaXMgc2V0ICovCi0JY21kLmFyZ3NbMHgwMF0gPSBDTURfU0VUX1RPTkVQUkU7Ci0JY21kLmFyZ3NbMHgwMV0gPSAweDAwOwotCWNtZC5sZW4gPSAweDAyOwotCXJldCA9IGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOwotCWlmIChyZXQgIT0gMCkKLQkJcmV0dXJuIHJldDsKLQogCS8qIE5vdyB3ZSBzZXQgdGhlIHRvbmUgKi8KIAljbWQuYXJnc1sweDAwXSA9IENNRF9TRVRfVE9ORTsKIAljbWQuYXJnc1sweDAxXSA9IDB4MDA7CkBAIC0xMDk5LDEzICsxMTEyLDEwIEBACiAJZHByaW50aygiJXNcbiIsIF9fZnVuY19fKTsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCi0Jc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3gyNDExNl9zdGF0ZSksIEdGUF9LRVJORUwpOworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGN4MjQxMTZfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3RhdGUgPT0gTlVMTCkKIAkJZ290byBlcnJvcjE7CiAKLQkvKiBzZXR1cCB0aGUgc3RhdGUgKi8KLQltZW1zZXQoc3RhdGUsIDAsIHNpemVvZihzdHJ1Y3QgY3gyNDExNl9zdGF0ZSkpOwotCiAJc3RhdGUtPmNvbmZpZyA9IGNvbmZpZzsKIAlzdGF0ZS0+aTJjID0gaTJjOwogCkBAIC0xMTU0LDcgKzExNjQsMTIgQEAKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXR1cm4gY3gyNDExNl9kaXNlcWNfaW5pdChmZSk7CisJcmV0ID0gY3gyNDExNl9kaXNlcWNfaW5pdChmZSk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJLyogSFZSLTQwMDAgbmVlZHMgdGhpcyAqLworCXJldHVybiBjeDI0MTE2X3NldF92b2x0YWdlKGZlLCBTRUNfVk9MVEFHRV8xMyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYwppbmRleCAxYThjMzZmLi4wNTkyZjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKQEAgLTEwNjksMTMgKzEwNjksMTMgQEAKIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmN4MjQxMjNfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTIzX2NvbmZpZyAqY29uZmlnLAogCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwogCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9CiAJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjeDI0MTIzX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAKIAlkcHJpbnRrKCJcbiIpOwotCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCiAJaWYgKHN0YXRlID09IE5VTEwpIHsKLQkJZXJyKCJVbmFibGUgdG8ga21hbGxvY1xuIik7CisJCWVycigiVW5hYmxlIHRvIGt6YWxsb2NcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmgKaW5kZXggMjFmMmM1MS4uOTY3MGY1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5oCkBAIC01OCw2ICs1OCw0IEBACiB9CiAjZW5kaWYKIAotZXh0ZXJuIHZvaWQgZGliMDA3MF9jdHJsX2FnY19maWx0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCB1aW50OF90IG9wZW4pOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWMuaAppbmRleCA0MTQyZWQ3Li5kNzVmZmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1jLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYy5oCkBAIC0zOSwyMCArMzksNDQgQEAKICNkZWZpbmUgREVGQVVMVF9ESUIzMDAwTUNfSTJDX0FERFJFU1MgMTYKICNkZWZpbmUgREVGQVVMVF9ESUIzMDAwUF9JMkNfQUREUkVTUyAgMjQKIAotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9ESUIzMDAwTUMpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfRElCMzAwME1DX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQotZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKiBkaWIzMDAwbWNfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGkyY19hZGRyLCBzdHJ1Y3QgZGliMzAwMG1jX2NvbmZpZyAqY2ZnKTsKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfRElCMzAwME1DKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0RJQjMwMDBNQ19NT0RVTEUpICYmIFwKKwkJCQkgICAgICBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqZGliMzAwMG1jX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQkJCQkgICAgIHU4IGkyY19hZGRyLAorCQkJCQkgICAgIHN0cnVjdCBkaWIzMDAwbWNfY29uZmlnICpjZmcpOworZXh0ZXJuIGludCBkaWIzMDAwbWNfaTJjX2VudW1lcmF0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAorCQkJCSAgICAgaW50IG5vX29mX2RlbW9kcywgdTggZGVmYXVsdF9hZGRyLAorCQkJCSAgICAgc3RydWN0IGRpYjMwMDBtY19jb25maWcgY2ZnW10pOworZXh0ZXJuCitzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRpYjMwMDBtY19nZXRfdHVuZXJfaTJjX21hc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZCwKKwkJCQkJCSAgIGludCBnYXRpbmcpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqIGRpYjMwMDBtY19hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgdTggaTJjX2FkZHIsIHN0cnVjdCBkaWIzMDAwbWNfY29uZmlnICpjZmcpCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWIzMDAwbWNfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGkyY19hZGRyLAorCQkJCSAgICAgIHN0cnVjdCBkaWIzMDAwbWNfY29uZmlnICpjZmcpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUKK2ludCBkaWIzMDAwbWNfaTJjX2VudW1lcmF0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAorCQkJICAgICAgaW50IG5vX29mX2RlbW9kcywgdTggZGVmYXVsdF9hZGRyLAorCQkJICAgICAgc3RydWN0IGRpYjMwMDBtY19jb25maWcgY2ZnW10pCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBpMmNfYWRhcHRlciAqZGliMzAwMG1jX2dldF90dW5lcl9pMmNfbWFzdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRlbW9kLAorCQkJCQkJICAgaW50IGdhdGluZykKIHsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gTlVMTDsKIH0KICNlbmRpZiAvLyBDT05GSUdfRFZCX0RJQjMwMDBNQwogCi1leHRlcm4gaW50IGRpYjMwMDBtY19pMmNfZW51bWVyYXRpb24oc3RydWN0IGkyY19hZGFwdGVyICppMmMsIGludCBub19vZl9kZW1vZHMsIHU4IGRlZmF1bHRfYWRkciwgc3RydWN0IGRpYjMwMDBtY19jb25maWcgY2ZnW10pOwotCi1leHRlcm4gc3RydWN0IGkyY19hZGFwdGVyICogZGliMzAwMG1jX2dldF90dW5lcl9pMmNfbWFzdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRlbW9kLCBpbnQgZ2F0aW5nKTsKLQogZXh0ZXJuIGludCBkaWIzMDAwbWNfcGlkX2NvbnRyb2woc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBpbmRleCwgaW50IHBpZCxpbnQgb25vZmYpOwogZXh0ZXJuIGludCBkaWIzMDAwbWNfcGlkX3BhcnNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgb25vZmYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMG0uaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwbS5oCmluZGV4IDU5N2U5Y2MuLjExMzgxOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwbS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwbS5oCkBAIC0zOCw4ICszOCwzMiBAQAogCiAjZGVmaW5lIERFRkFVTFRfRElCNzAwME1fSTJDX0FERFJFU1MgMTgKIAotZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKiBkaWI3MDAwbV9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgdTggaTJjX2FkZHIsIHN0cnVjdCBkaWI3MDAwbV9jb25maWcgKmNmZyk7Ci1leHRlcm4gc3RydWN0IGkyY19hZGFwdGVyICogZGliNzAwMG1fZ2V0X2kyY19tYXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCBlbnVtIGRpYngwMDBfaTJjX2ludGVyZmFjZSwgaW50KTsKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfRElCNzAwME0pIHx8IChkZWZpbmVkKENPTkZJR19EVkJfRElCNzAwME1fTU9EVUxFKSAmJiBcCisJCQkJICAgICBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqZGliNzAwMG1fYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCisJCQkJCSAgICB1OCBpMmNfYWRkciwKKwkJCQkJICAgIHN0cnVjdCBkaWI3MDAwbV9jb25maWcgKmNmZyk7CitleHRlcm4gc3RydWN0IGkyY19hZGFwdGVyICpkaWI3MDAwbV9nZXRfaTJjX21hc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICosCisJCQkJCQkgICBlbnVtIGRpYngwMDBfaTJjX2ludGVyZmFjZSwKKwkJCQkJCSAgIGludCk7CisjZWxzZQorc3RhdGljIGlubGluZQorc3RydWN0IGR2Yl9mcm9udGVuZCAqZGliNzAwMG1fYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCisJCQkJICAgICB1OCBpMmNfYWRkciwgc3RydWN0IGRpYjcwMDBtX2NvbmZpZyAqY2ZnKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRpYjcwMDBtX2dldF9pMmNfbWFzdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRlbW9kLAorCQkJCQkgICAgZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UgaW50ZiwKKwkJCQkJICAgIGludCBnYXRpbmcpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKIAogLyogVE9ETwogZXh0ZXJuIElOVCBkaWI3MDAwbV9zZXRfZ3BpbyhzdHJ1Y3QgZGliRGVtb2QgKmRlbW9kLCBVQ0hBUiBudW0sIFVDSEFSIGRpciwgVUNIQVIgdmFsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBwLmgKaW5kZXggYWFiODExMi4uMDJhNGM4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBwLmgKQEAgLTM3LDcgKzM3LDggQEAKIAogI2RlZmluZSBERUZBVUxUX0RJQjcwMDBQX0kyQ19BRERSRVNTIDE4CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfRElCNzAwMFApIHx8IChkZWZpbmVkKENPTkZJR19EVkJfRElCNzAwMFBfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0RJQjcwMDBQKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0RJQjcwMDBQX01PRFVMRSkgJiYgXAorCQkJCSAgICAgZGVmaW5lZChNT0RVTEUpKQogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjcwMDBwX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAogCQkJCQkgICAgdTggaTJjX2FkZHIsCiAJCQkJCSAgICBzdHJ1Y3QgZGliNzAwMHBfY29uZmlnICpjZmcpOwpAQCAtNDksMTAgKzUwLDExIEBACiAJCQkJICAgIHN0cnVjdCBkaWI3MDAwcF9jb25maWcgY2ZnW10pOwogZXh0ZXJuIGludCBkaWI3MDAwcF9zZXRfZ3BpbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHU4IG51bSwgdTggZGlyLCB1OCB2YWwpOwogZXh0ZXJuIGludCBkaWI3MDAwcF9zZXRfd2JkX3JlZihzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHUxNiB2YWx1ZSk7CitleHRlcm4gaW50IGRpYjcwMDBwY19kZXRlY3Rpb24oc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCk7CiAjZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWI3MDAwcF9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKLQkJCQkJCSAgIHU4IGkyY19hZGRyLAotCQkJCQkJICAgc3RydWN0IGRpYjcwMDBwX2NvbmZpZyAqY2ZnKQorc3RhdGljIGlubGluZQorc3RydWN0IGR2Yl9mcm9udGVuZCAqZGliNzAwMHBfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGkyY19hZGRyLAorCQkJCSAgICAgc3RydWN0IGRpYjcwMDBwX2NvbmZpZyAqY2ZnKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwpAQCAtNjAsMzYgKzYyLDM5IEBACiAKIHN0YXRpYyBpbmxpbmUKIHN0cnVjdCBpMmNfYWRhcHRlciAqZGliNzAwMHBfZ2V0X2kyY19tYXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCi0JCQkJCSAgICBlbnVtIGRpYngwMDBfaTJjX2ludGVyZmFjZSBpLCBpbnQgeCkKKwkJCQkJICAgIGVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlIGksCisJCQkJCSAgICBpbnQgeCkKIHsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGlubGluZQotaW50IGRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKLQkJCQkgICAgaW50IG5vX29mX2RlbW9kcywgdTggZGVmYXVsdF9hZGRyLAotCQkJCSAgICBzdHJ1Y3QgZGliNzAwMHBfY29uZmlnIGNmZ1tdKQorc3RhdGljIGlubGluZSBpbnQgZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAorCQkJCQkgICBpbnQgbm9fb2ZfZGVtb2RzLCB1OCBkZWZhdWx0X2FkZHIsCisJCQkJCSAgIHN0cnVjdCBkaWI3MDAwcF9jb25maWcgY2ZnW10pCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBpbmxpbmUKLWludCBkaWI3MDAwcF9zZXRfZ3BpbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggbnVtLCB1OCBkaXIsIHU4IHZhbCkKK3N0YXRpYyBpbmxpbmUgaW50IGRpYjcwMDBwX3NldF9ncGlvKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSAgICB1OCBudW0sIHU4IGRpciwgdTggdmFsKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiAtRU5PREVWOwogfQogCi1zdGF0aWMgaW5saW5lCi1pbnQgZGliNzAwMHBfc2V0X3diZF9yZWYoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGRpYjcwMDBwX3NldF93YmRfcmVmKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgdmFsdWUpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRpYjcwMDBwY19kZXRlY3Rpb24oc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCkKIHsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KICNlbmRpZgogCi1leHRlcm4gaW50IGRpYjcwMDBwY19kZXRlY3Rpb24oc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCk7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yl9kdW1teV9mZS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yl9kdW1teV9mZS5oCmluZGV4IDgyMTBmMTkuLjFmY2I5ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmJfZHVtbXlfZmUuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiX2R1bW15X2ZlLmgKQEAgLTI1LDggKzI1LDI3IEBACiAjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CiAjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCiAKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfRFVNTVlfRkUpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfRFVNTVlfRkVfTU9EVUxFKSAmJiBcCitkZWZpbmVkKE1PRFVMRSkpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogZHZiX2R1bW15X2ZlX29mZG1fYXR0YWNoKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGR2Yl9kdW1teV9mZV9xcHNrX2F0dGFjaCh2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBkdmJfZHVtbXlfZmVfcWFtX2F0dGFjaCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmR2Yl9kdW1teV9mZV9vZmRtX2F0dGFjaCh2b2lkKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkdmJfZHVtbXlfZmVfcXBza19hdHRhY2godm9pZCkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqZHZiX2R1bW15X2ZlX3FhbV9hdHRhY2godm9pZCkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBDT05GSUdfRFZCX0RVTU1ZX0ZFICovCiAKICNlbmRpZiAvLyBEVkJfRFVNTVlfRkVfSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2l0ZDEwMDBfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2l0ZDEwMDBfcHJpdi5oCmluZGV4IDhjZGM1NGUuLjA4Y2E4NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9pdGQxMDAwX3ByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvaXRkMTAwMF9wcml2LmgKQEAgLTMxLDcgKzMxLDcgQEAKIAkvKiB1Z2x5IHdvcmthcm91bmQgZm9yIGZsZXhjb3AncyBpbmNhcGFibGUgaTJjLWNvbnRyb2xsZXIKIAkgKiBGSVhNRSwgaWYgcG9zc2libGUKIAkgKi8KLQl1OCBzaGFkb3dbMjU1XTsKKwl1OCBzaGFkb3dbMjU2XTsKIH07CiAKIGVudW0gaXRkMTAwMF9yZWdpc3RlciB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNC5jCmluZGV4IDNiYjBjNDMuLmViNzJhOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNC5jCkBAIC0zNjMsNyArMzYzLDYgQEAKIAogCXN0cnVjdCBsZ2R0MzMwNF9zdGF0ZSAqc3RhdGU7CiAJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGdkdDMzMDRfc3RhdGUpLCBHRlBfS0VSTkVMKTsKLQltZW1zZXQoc3RhdGUsIDB4MCwgc2l6ZW9mKHN0cnVjdCBsZ2R0MzMwNF9zdGF0ZSkpOwogCXN0YXRlLT5hZGRyID0gY29uZmlnLT5pMmNfYWRkcmVzczsKIAlzdGF0ZS0+aTJjID0gaTJjOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MmQwNTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDUuYwpAQCAtMCwwICsxLDEwODcgQEAKKy8qCisgKiAgICBTdXBwb3J0IGZvciBMR0RUMzMwNSAtIFZTQi9RQU0KKyAqCisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgTWljaGFlbCBLcnVma3kgPG1rcnVma3lAbGludXh0di5vcmc+CisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KKyNpbmNsdWRlICJkdmJfbWF0aC5oIgorI2luY2x1ZGUgImxnZHQzMzA1LmgiCisKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnIGxldmVsIChpbmZvPTEsIHJlZz0yIChvci1hYmxlKSkiKTsKKworI2RlZmluZSBEQkdfSU5GTyAxCisjZGVmaW5lIERCR19SRUcgIDIKKworI2RlZmluZSBsZ19wcmludGsoa2VybiwgZm10LCBhcmcuLi4pCQkJCQlcCisJcHJpbnRrKGtlcm4gIiVzOiAiIGZtdCwgX19mdW5jX18sICMjYXJnKQorCisjZGVmaW5lIGxnX2luZm8oZm10LCBhcmcuLi4pCXByaW50ayhLRVJOX0lORk8gImxnZHQzMzA1OiAiIGZtdCwgIyNhcmcpCisjZGVmaW5lIGxnX3dhcm4oZm10LCBhcmcuLi4pCWxnX3ByaW50ayhLRVJOX1dBUk5JTkcsICAgICAgIGZtdCwgIyNhcmcpCisjZGVmaW5lIGxnX2VycihmbXQsIGFyZy4uLikJbGdfcHJpbnRrKEtFUk5fRVJSLCAgICAgICAgICAgZm10LCAjI2FyZykKKyNkZWZpbmUgbGdfZGJnKGZtdCwgYXJnLi4uKSBpZiAoZGVidWcgJiBEQkdfSU5GTykJCQlcCisJCQkJbGdfcHJpbnRrKEtFUk5fREVCVUcsICAgICAgICAgZm10LCAjI2FyZykKKyNkZWZpbmUgbGdfcmVnKGZtdCwgYXJnLi4uKSBpZiAoZGVidWcgJiBEQkdfUkVHKQkJCVwKKwkJCQlsZ19wcmludGsoS0VSTl9ERUJVRywgICAgICAgICBmbXQsICMjYXJnKQorCisjZGVmaW5lIGxnX2ZhaWwocmV0KQkJCQkJCQlcCisoewkJCQkJCQkJCVwKKwlpbnQgX19yZXQ7CQkJCQkJCVwKKwlfX3JldCA9IChyZXQgPCAwKTsJCQkJCQlcCisJaWYgKF9fcmV0KQkJCQkJCQlcCisJCWxnX2VycigiZXJyb3IgJWQgb24gbGluZSAlZFxuIiwJcmV0LCBfX0xJTkVfXyk7CQlcCisJX19yZXQ7CQkJCQkJCQlcCit9KQorCitzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgeworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXA7CisJY29uc3Qgc3RydWN0IGxnZHQzMzA1X2NvbmZpZyAqY2ZnOworCisJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKKworCWZlX21vZHVsYXRpb25fdCBjdXJyZW50X21vZHVsYXRpb247CisJdTMyIGN1cnJlbnRfZnJlcXVlbmN5OworCXUzMiBzbnI7Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBMR0RUMzMwNV9HRU5fQ1RSTF8xICAgICAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBMR0RUMzMwNV9HRU5fQ1RSTF8yICAgICAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBMR0RUMzMwNV9HRU5fQ1RSTF8zICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBMR0RUMzMwNV9HRU5fU1RBVFVTICAgICAgICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBMR0RUMzMwNV9HRU5fQ09OVFJPTCAgICAgICAgICAgICAgICAgIDB4MDAwNworI2RlZmluZSBMR0RUMzMwNV9HRU5fQ1RSTF80ICAgICAgICAgICAgICAgICAgIDB4MDAwYQorI2RlZmluZSBMR0RUMzMwNV9ER1RMX0FHQ19SRUZfMSAgICAgICAgICAgICAgIDB4MDAxMgorI2RlZmluZSBMR0RUMzMwNV9ER1RMX0FHQ19SRUZfMiAgICAgICAgICAgICAgIDB4MDAxMworI2RlZmluZSBMR0RUMzMwNV9DUl9DVFJfRlJFUV8xICAgICAgICAgICAgICAgIDB4MDEwNgorI2RlZmluZSBMR0RUMzMwNV9DUl9DVFJfRlJFUV8yICAgICAgICAgICAgICAgIDB4MDEwNworI2RlZmluZSBMR0RUMzMwNV9DUl9DVFJfRlJFUV8zICAgICAgICAgICAgICAgIDB4MDEwOAorI2RlZmluZSBMR0RUMzMwNV9DUl9DVFJfRlJFUV80ICAgICAgICAgICAgICAgIDB4MDEwOQorI2RlZmluZSBMR0RUMzMwNV9DUl9NU0VfMSAgICAgICAgICAgICAgICAgICAgIDB4MDExYgorI2RlZmluZSBMR0RUMzMwNV9DUl9NU0VfMiAgICAgICAgICAgICAgICAgICAgIDB4MDExYworI2RlZmluZSBMR0RUMzMwNV9DUl9MT0NLX1NUQVRVUyAgICAgICAgICAgICAgIDB4MDExZAorI2RlZmluZSBMR0RUMzMwNV9DUl9DVFJMXzcgICAgICAgICAgICAgICAgICAgIDB4MDEyNgorI2RlZmluZSBMR0RUMzMwNV9BR0NfUE9XRVJfUkVGXzEgICAgICAgICAgICAgIDB4MDMwMAorI2RlZmluZSBMR0RUMzMwNV9BR0NfUE9XRVJfUkVGXzIgICAgICAgICAgICAgIDB4MDMwMQorI2RlZmluZSBMR0RUMzMwNV9BR0NfREVMQVlfUFRfMSAgICAgICAgICAgICAgIDB4MDMwMgorI2RlZmluZSBMR0RUMzMwNV9BR0NfREVMQVlfUFRfMiAgICAgICAgICAgICAgIDB4MDMwMworI2RlZmluZSBMR0RUMzMwNV9SRkFHQ19MT09QX0ZMVFJfQldfMSAgICAgICAgIDB4MDMwNgorI2RlZmluZSBMR0RUMzMwNV9SRkFHQ19MT09QX0ZMVFJfQldfMiAgICAgICAgIDB4MDMwNworI2RlZmluZSBMR0RUMzMwNV9JRkJXXzEgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwOAorI2RlZmluZSBMR0RUMzMwNV9JRkJXXzIgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwOQorI2RlZmluZSBMR0RUMzMwNV9BR0NfQ1RSTF8xICAgICAgICAgICAgICAgICAgIDB4MDMwYworI2RlZmluZSBMR0RUMzMwNV9BR0NfQ1RSTF80ICAgICAgICAgICAgICAgICAgIDB4MDMxNAorI2RlZmluZSBMR0RUMzMwNV9FUV9NU0VfMSAgICAgICAgICAgICAgICAgICAgIDB4MDQxMworI2RlZmluZSBMR0RUMzMwNV9FUV9NU0VfMiAgICAgICAgICAgICAgICAgICAgIDB4MDQxNAorI2RlZmluZSBMR0RUMzMwNV9FUV9NU0VfMyAgICAgICAgICAgICAgICAgICAgIDB4MDQxNQorI2RlZmluZSBMR0RUMzMwNV9QVF9NU0VfMSAgICAgICAgICAgICAgICAgICAgIDB4MDQxNworI2RlZmluZSBMR0RUMzMwNV9QVF9NU0VfMiAgICAgICAgICAgICAgICAgICAgIDB4MDQxOAorI2RlZmluZSBMR0RUMzMwNV9QVF9NU0VfMyAgICAgICAgICAgICAgICAgICAgIDB4MDQxOQorI2RlZmluZSBMR0RUMzMwNV9GRUNfQkxPQ0tfQ1RSTCAgICAgICAgICAgICAgIDB4MDUwNAorI2RlZmluZSBMR0RUMzMwNV9GRUNfTE9DS19TVEFUVVMgICAgICAgICAgICAgIDB4MDUwYQorI2RlZmluZSBMR0RUMzMwNV9GRUNfUEtUX0VSUl8xICAgICAgICAgICAgICAgIDB4MDUwYworI2RlZmluZSBMR0RUMzMwNV9GRUNfUEtUX0VSUl8yICAgICAgICAgICAgICAgIDB4MDUwZAorI2RlZmluZSBMR0RUMzMwNV9UUF9DVFJMXzEgICAgICAgICAgICAgICAgICAgIDB4MDUwZQorI2RlZmluZSBMR0RUMzMwNV9CRVJUX1BFUklPRCAgICAgICAgICAgICAgICAgIDB4MDgwMQorI2RlZmluZSBMR0RUMzMwNV9CRVJUX0VSUk9SX0NPVU5UXzEgICAgICAgICAgIDB4MDgwYQorI2RlZmluZSBMR0RUMzMwNV9CRVJUX0VSUk9SX0NPVU5UXzIgICAgICAgICAgIDB4MDgwYgorI2RlZmluZSBMR0RUMzMwNV9CRVJUX0VSUk9SX0NPVU5UXzMgICAgICAgICAgIDB4MDgwYworI2RlZmluZSBMR0RUMzMwNV9CRVJUX0VSUk9SX0NPVU5UXzQgICAgICAgICAgIDB4MDgwZAorCitzdGF0aWMgaW50IGxnZHQzMzA1X3dyaXRlX3JlZyhzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLCB1MTYgcmVnLCB1OCB2YWwpCit7CisJaW50IHJldDsKKwl1OCBidWZbXSA9IHsgcmVnID4+IDgsIHJlZyAmIDB4ZmYsIHZhbCB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgPSBzdGF0ZS0+Y2ZnLT5pMmNfYWRkciwgLmZsYWdzID0gMCwKKwkJLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDMsCisJfTsKKworCWxnX3JlZygicmVnOiAweCUwNHgsIHZhbDogMHglMDJ4XG4iLCByZWcsIHZhbCk7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyY19hZGFwLCAmbXNnLCAxKTsKKworCWlmIChyZXQgIT0gMSkgeworCQlsZ19lcnIoImVycm9yIChhZGRyICUwMnggJTAyeCA8LSAlMDJ4LCBlcnIgPSAlaSlcbiIsCisJCSAgICAgICBtc2cuYnVmWzBdLCBtc2cuYnVmWzFdLCBtc2cuYnVmWzJdLCByZXQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCWVsc2UKKwkJCXJldHVybiAtRVJFTU9URUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9yZWFkX3JlZyhzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLCB1MTYgcmVnLCB1OCAqdmFsKQoreworCWludCByZXQ7CisJdTggcmVnX2J1ZltdID0geyByZWcgPj4gOCwgcmVnICYgMHhmZiB9OworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0geworCQl7IC5hZGRyID0gc3RhdGUtPmNmZy0+aTJjX2FkZHIsCisJCSAgLmZsYWdzID0gMCwgLmJ1ZiA9IHJlZ19idWYsIC5sZW4gPSAyIH0sCisJCXsgLmFkZHIgPSBzdGF0ZS0+Y2ZnLT5pMmNfYWRkciwKKwkJICAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9IHZhbCwgLmxlbiA9IDEgfSwKKwl9OworCisJbGdfcmVnKCJyZWc6IDB4JTA0eFxuIiwgcmVnKTsKKworCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjX2FkYXAsIG1zZywgMik7CisKKwlpZiAocmV0ICE9IDIpIHsKKwkJbGdfZXJyKCJlcnJvciAoYWRkciAlMDJ4IHJlZyAlMDR4IGVycm9yIChyZXQgPT0gJWkpXG4iLAorCQkgICAgICAgc3RhdGUtPmNmZy0+aTJjX2FkZHIsIHJlZywgcmV0KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQllbHNlCisJCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgcmVhZF9yZWcoc3RhdGUsIHJlZykJCQkJCQlcCisoewkJCQkJCQkJCVwKKwl1OCBfX3ZhbDsJCQkJCQkJXAorCWludCByZXQgPSBsZ2R0MzMwNV9yZWFkX3JlZyhzdGF0ZSwgcmVnLCAmX192YWwpOwkJXAorCWlmIChsZ19mYWlsKHJldCkpCQkJCQkJXAorCQlfX3ZhbCA9IDA7CQkJCQkJXAorCV9fdmFsOwkJCQkJCQkJXAorfSkKKworc3RhdGljIGludCBsZ2R0MzMwNV9zZXRfcmVnX2JpdChzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLAorCQkJCXUxNiByZWcsIGludCBiaXQsIGludCBvbm9mZikKK3sKKwl1OCB2YWw7CisJaW50IHJldDsKKworCWxnX3JlZygicmVnOiAweCUwNHgsIGJpdDogJWQsIGxldmVsOiAlZFxuIiwgcmVnLCBiaXQsIG9ub2ZmKTsKKworCXJldCA9IGxnZHQzMzA1X3JlYWRfcmVnKHN0YXRlLCByZWcsICZ2YWwpOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCXZhbCAmPSB+KDEgPDwgYml0KTsKKwl2YWwgfD0gKG9ub2ZmICYgMSkgPDwgYml0OworCisJcmV0ID0gbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCByZWcsIHZhbCk7CitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBsZ2R0MzMwNV9yZWcgeworCXUxNiByZWc7CisJdTggdmFsOworfTsKKworc3RhdGljIGludCBsZ2R0MzMwNV93cml0ZV9yZWdzKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkgICAgICAgc3RydWN0IGxnZHQzMzA1X3JlZyAqcmVncywgaW50IGxlbikKK3sKKwlpbnQgaSwgcmV0OworCisJbGdfcmVnKCJ3cml0aW5nICVkIHJlZ2lzdGVycy4uLlxuIiwgbGVuKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW4gLSAxOyBpKyspIHsKKwkJcmV0ID0gbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCByZWdzW2ldLnJlZywgcmVnc1tpXS52YWwpOworCQlpZiAobGdfZmFpbChyZXQpKQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGxnZHQzMzA1X3NvZnRfcmVzZXQoc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgcmV0OworCisJbGdfZGJnKCJcbiIpOworCisJcmV0ID0gbGdkdDMzMDVfc2V0X3JlZ19iaXQoc3RhdGUsIExHRFQzMzA1X0dFTl9DVFJMXzMsIDAsIDApOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCW1zbGVlcCgyMCk7CisJcmV0ID0gbGdkdDMzMDVfc2V0X3JlZ19iaXQoc3RhdGUsIExHRFQzMzA1X0dFTl9DVFJMXzMsIDAsIDEpOworZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBsZ2R0MzMwNV9tcGVnX21vZGUoc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwKKwkJCQkgICAgIGVudW0gbGdkdDMzMDVfbXBlZ19tb2RlIG1vZGUpCit7CisJbGdfZGJnKCIoJWQpXG4iLCBtb2RlKTsKKwlyZXR1cm4gbGdkdDMzMDVfc2V0X3JlZ19iaXQoc3RhdGUsIExHRFQzMzA1X1RQX0NUUkxfMSwgNSwgbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfbXBlZ19tb2RlX3BvbGFyaXR5KHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkJICAgICAgIGVudW0gbGdkdDMzMDVfdHBfY2xvY2tfZWRnZSBlZGdlLAorCQkJCSAgICAgICBlbnVtIGxnZHQzMzA1X3RwX3ZhbGlkX3BvbGFyaXR5IHZhbGlkKQoreworCXU4IHZhbDsKKwlpbnQgcmV0OworCisJbGdfZGJnKCJlZGdlID0gJWQsIHZhbGlkID0gJWRcbiIsIGVkZ2UsIHZhbGlkKTsKKworCXJldCA9IGxnZHQzMzA1X3JlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9UUF9DVFJMXzEsICZ2YWwpOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCXZhbCAmPSB+MHgwOTsKKworCWlmIChlZGdlKQorCQl2YWwgfD0gMHgwODsKKwlpZiAodmFsaWQpCisJCXZhbCB8PSAweDAxOworCisJcmV0ID0gbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9UUF9DVFJMXzEsIHZhbCk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJcmV0ID0gbGdkdDMzMDVfc29mdF9yZXNldChzdGF0ZSk7CitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfc2V0X21vZHVsYXRpb24oc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwKKwkJCQkgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtKQoreworCXU4IG9wZXJtb2RlOworCWludCByZXQ7CisKKwlsZ19kYmcoIlxuIik7CisKKwlyZXQgPSBsZ2R0MzMwNV9yZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfR0VOX0NUUkxfMSwgJm9wZXJtb2RlKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwlvcGVybW9kZSAmPSB+MHgwMzsKKworCXN3aXRjaCAocGFyYW0tPnUudnNiLm1vZHVsYXRpb24pIHsKKwljYXNlIFZTQl84OgorCQlvcGVybW9kZSB8PSAweDAzOworCQlicmVhazsKKwljYXNlIFFBTV82NDoKKwkJb3Blcm1vZGUgfD0gMHgwMDsKKwkJYnJlYWs7CisJY2FzZSBRQU1fMjU2OgorCQlvcGVybW9kZSB8PSAweDAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0ID0gbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9HRU5fQ1RSTF8xLCBvcGVybW9kZSk7CitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfc2V0X2ZpbHRlcl9leHRlbnNpb24oc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwKKwkJCQkJIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW0pCit7CisJaW50IHZhbDsKKworCXN3aXRjaCAocGFyYW0tPnUudnNiLm1vZHVsYXRpb24pIHsKKwljYXNlIFZTQl84OgorCQl2YWwgPSAwOworCQlicmVhazsKKwljYXNlIFFBTV82NDoKKwljYXNlIFFBTV8yNTY6CisJCXZhbCA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlsZ19kYmcoInZhbCA9ICVkXG4iLCB2YWwpOworCisJcmV0dXJuIGxnZHQzMzA1X3NldF9yZWdfYml0KHN0YXRlLCAweDA0M2YsIDIsIHZhbCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGxnZHQzMzA1X3Bhc3NiYW5kX2RpZ2l0YWxfYWdjKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkJCSBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtKQoreworCXUxNiBhZ2NfcmVmOworCisJc3dpdGNoIChwYXJhbS0+dS52c2IubW9kdWxhdGlvbikgeworCWNhc2UgVlNCXzg6CisJCWFnY19yZWYgPSAweDMyYzQ7CisJCWJyZWFrOworCWNhc2UgUUFNXzY0OgorCQlhZ2NfcmVmID0gMHgyYTAwOworCQlicmVhazsKKwljYXNlIFFBTV8yNTY6CisJCWFnY19yZWYgPSAweDJhODA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxnX2RiZygiYWdjIHJlZjogMHglMDR4XG4iLCBhZ2NfcmVmKTsKKworCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfREdUTF9BR0NfUkVGXzEsIGFnY19yZWYgPj4gOCk7CisJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9ER1RMX0FHQ19SRUZfMiwgYWdjX3JlZiAmIDB4ZmYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfcmZhZ2NfbG9vcChzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLAorCQkJICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW0pCit7CisJdTE2IGlmYncsIHJmYncsIGFnY2RlbGF5OworCisJc3dpdGNoIChwYXJhbS0+dS52c2IubW9kdWxhdGlvbikgeworCWNhc2UgVlNCXzg6CisJCWFnY2RlbGF5ID0gMHgwNGMwOworCQlyZmJ3ICAgICA9IDB4ODAwMDsKKwkJaWZidyAgICAgPSAweDgwMDA7CisJCWJyZWFrOworCWNhc2UgUUFNXzY0OgorCWNhc2UgUUFNXzI1NjoKKwkJYWdjZGVsYXkgPSAweDA0NmI7CisJCXJmYncgICAgID0gMHg4ODg5OworCQlpZmJ3ICAgICA9IDB4ODg4ODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHN0YXRlLT5jZmctPnJmX2FnY19sb29wKSB7CisJCWxnX2RiZygiYWdjZGVsYXk6IDB4JTA0eCwgcmZidzogMHglMDR4XG4iLCBhZ2NkZWxheSwgcmZidyk7CisKKwkJLyogcmYgYWdjIGxvb3AgZmlsdGVyIGJhbmR3aWR0aCAqLworCQlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0FHQ19ERUxBWV9QVF8xLAorCQkJCSAgIGFnY2RlbGF5ID4+IDgpOworCQlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0FHQ19ERUxBWV9QVF8yLAorCQkJCSAgIGFnY2RlbGF5ICYgMHhmZik7CisKKwkJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9SRkFHQ19MT09QX0ZMVFJfQldfMSwKKwkJCQkgICByZmJ3ID4+IDgpOworCQlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X1JGQUdDX0xPT1BfRkxUUl9CV18yLAorCQkJCSAgIHJmYncgJiAweGZmKTsKKwl9IGVsc2UgeworCQlsZ19kYmcoImlmYnc6IDB4JTA0eFxuIiwgaWZidyk7CisKKwkJLyogaWYgYWdjIGxvb3AgZmlsdGVyIGJhbmR3aWR0aCAqLworCQlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0lGQldfMSwgaWZidyA+PiA4KTsKKwkJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9JRkJXXzIsIGlmYncgJiAweGZmKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9hZ2Nfc2V0dXAoc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW0pCit7CisJaW50IGxvY2tkdGVuLCBhY3FlbjsKKworCXN3aXRjaCAocGFyYW0tPnUudnNiLm1vZHVsYXRpb24pIHsKKwljYXNlIFZTQl84OgorCQlsb2NrZHRlbiA9IDA7CisJCWFjcWVuID0gMDsKKwkJYnJlYWs7CisJY2FzZSBRQU1fNjQ6CisJY2FzZSBRQU1fMjU2OgorCQlsb2NrZHRlbiA9IDE7CisJCWFjcWVuID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbGdfZGJnKCJsb2NrZHRlbiA9ICVkLCBhY3FlbiA9ICVkXG4iLCBsb2NrZHRlbiwgYWNxZW4pOworCisJLyogY29udHJvbCBhZ2MgZnVuY3Rpb24gKi8KKwlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0FHQ19DVFJMXzQsIDB4ZTEgfCBsb2NrZHRlbiA8PCAxKTsKKwlsZ2R0MzMwNV9zZXRfcmVnX2JpdChzdGF0ZSwgTEdEVDMzMDVfQUdDX0NUUkxfMSwgMiwgYWNxZW4pOworCisJcmV0dXJuIGxnZHQzMzA1X3JmYWdjX2xvb3Aoc3RhdGUsIHBhcmFtKTsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9zZXRfYWdjX3Bvd2VyX3JlZihzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLAorCQkJCSAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW0pCit7CisJdTE2IHVzcmVmID0gMDsKKworCXN3aXRjaCAocGFyYW0tPnUudnNiLm1vZHVsYXRpb24pIHsKKwljYXNlIFZTQl84OgorCQlpZiAoc3RhdGUtPmNmZy0+dXNyZWZfOHZzYikKKwkJCXVzcmVmID0gc3RhdGUtPmNmZy0+dXNyZWZfOHZzYjsKKwkJYnJlYWs7CisJY2FzZSBRQU1fNjQ6CisJCWlmIChzdGF0ZS0+Y2ZnLT51c3JlZl9xYW02NCkKKwkJCXVzcmVmID0gc3RhdGUtPmNmZy0+dXNyZWZfcWFtNjQ7CisJCWJyZWFrOworCWNhc2UgUUFNXzI1NjoKKwkJaWYgKHN0YXRlLT5jZmctPnVzcmVmX3FhbTI1NikKKwkJCXVzcmVmID0gc3RhdGUtPmNmZy0+dXNyZWZfcWFtMjU2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodXNyZWYpIHsKKwkJbGdfZGJnKCJzZXQgbWFudWFsIG1vZGU6IDB4JTA0eFxuIiwgdXNyZWYpOworCisJCWxnZHQzMzA1X3NldF9yZWdfYml0KHN0YXRlLCBMR0RUMzMwNV9BR0NfQ1RSTF8xLCAzLCAxKTsKKworCQlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0FHQ19QT1dFUl9SRUZfMSwKKwkJCQkgICAweGZmICYgKHVzcmVmID4+IDgpKTsKKwkJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9BR0NfUE9XRVJfUkVGXzIsCisJCQkJICAgMHhmZiAmICh1c3JlZiA+PiAwKSk7CisJfQorCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBsZ2R0MzMwNV9zcGVjdHJhbF9pbnZlcnNpb24oc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwKKwkJCQkgICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbSwKKwkJCQkgICAgICAgaW50IGludmVyc2lvbikKK3sKKwlpbnQgcmV0OworCisJbGdfZGJnKCIoJWQpXG4iLCBpbnZlcnNpb24pOworCisJc3dpdGNoIChwYXJhbS0+dS52c2IubW9kdWxhdGlvbikgeworCWNhc2UgVlNCXzg6CisJCXJldCA9IGxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfQ1JfQ1RSTF83LAorCQkJCQkgaW52ZXJzaW9uID8gMHhmOSA6IDB4NzkpOworCQlicmVhazsKKwljYXNlIFFBTV82NDoKKwljYXNlIFFBTV8yNTY6CisJCXJldCA9IGxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfRkVDX0JMT0NLX0NUUkwsCisJCQkJCSBpbnZlcnNpb24gPyAweGZkIDogMHhmZik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfc2V0X2lmKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtKQoreworCXUxNiBpZl9mcmVxX2toejsKKwl1OCBuY28xLCBuY28yLCBuY28zLCBuY280OworCXU2NCBuY287CisKKwlzd2l0Y2ggKHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJY2FzZSBWU0JfODoKKwkJaWZfZnJlcV9raHogPSBzdGF0ZS0+Y2ZnLT52c2JfaWZfa2h6OworCQlicmVhazsKKwljYXNlIFFBTV82NDoKKwljYXNlIFFBTV8yNTY6CisJCWlmX2ZyZXFfa2h6ID0gc3RhdGUtPmNmZy0+cWFtX2lmX2toejsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbmNvID0gaWZfZnJlcV9raHogLyAxMDsKKworI2RlZmluZSBMR0RUMzMwNV82NEJJVF9ESVZJU0lPTl9FTkFCTEVEIDAKKwkvKiBGSVhNRTogNjRiaXQgZGl2aXNpb24gZGlzYWJsZWQgdG8gYXZvaWQgbGlua2luZyBlcnJvcjoKKwkgKiBXQVJOSU5HOiAiX191ZGl2ZGkzIiBbbGdkdDMzMDUua29dIHVuZGVmaW5lZCEKKwkgKi8KKwlzd2l0Y2ggKHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJY2FzZSBWU0JfODoKKyNpZiBMR0RUMzMwNV82NEJJVF9ESVZJU0lPTl9FTkFCTEVECisJCW5jbyA8PD0gMjQ7CisJCW5jbyAvPSA2MjU7CisjZWxzZQorCQluY28gKj0gKCgxIDw8IDI0KSAvIDYyNSk7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBRQU1fNjQ6CisJY2FzZSBRQU1fMjU2OgorI2lmIExHRFQzMzA1XzY0QklUX0RJVklTSU9OX0VOQUJMRUQKKwkJbmNvIDw8PSAyODsKKwkJbmNvIC89IDYyNTsKKyNlbHNlCisJCW5jbyAqPSAoKDEgPDwgMjgpIC8gNjI1KTsKKyNlbmRpZgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwluY28xID0gKG5jbyA+PiAyNCkgJiAweDNmOworCW5jbzEgfD0gMHg0MDsKKwluY28yID0gKG5jbyA+PiAxNikgJiAweGZmOworCW5jbzMgPSAobmNvID4+IDgpICYgMHhmZjsKKwluY280ID0gbmNvICYgMHhmZjsKKworCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfMSwgbmNvMSk7CisJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9DUl9DVFJfRlJFUV8yLCBuY28yKTsKKwlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0NSX0NUUl9GUkVRXzMsIG5jbzMpOworCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfNCwgbmNvNCk7CisKKwlsZ19kYmcoIiVkIEtIeiAtPiBbJTAyeCUwMnglMDJ4JTAyeF1cbiIsCisJICAgICAgIGlmX2ZyZXFfa2h6LCBuY28xLCBuY28yLCBuY28zLCBuY280KTsKKworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBsZ2R0MzMwNV9pMmNfZ2F0ZV9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWlmIChzdGF0ZS0+Y2ZnLT5kZW55X2kyY19ycHRyKQorCQlyZXR1cm4gMDsKKworCWxnX2RiZygiKCVkKVxuIiwgZW5hYmxlKTsKKworCXJldHVybiBsZ2R0MzMwNV9zZXRfcmVnX2JpdChzdGF0ZSwgTEdEVDMzMDVfR0VOX0NUUkxfMiwgNSwKKwkJCQkgICAgZW5hYmxlID8gMCA6IDEpOworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCBnZW5fY3RybF8zLCBnZW5fY3RybF80OworCisJbGdfZGJnKCJcbiIpOworCisJZ2VuX2N0cmxfMyA9IHJlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9HRU5fQ1RSTF8zKTsKKwlnZW5fY3RybF80ID0gcmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X0dFTl9DVFJMXzQpOworCisJLyogaG9sZCBpbiBzb2Z0d2FyZSByZXNldCB3aGlsZSBzbGVlcGluZyAqLworCWdlbl9jdHJsXzMgJj0gfjB4MDE7CisJLyogdHJpc3RhdGUgdGhlIElGLUFHQyBwaW4gKi8KKwlnZW5fY3RybF8zIHw9ICAweDAyOworCS8qIHRyaXN0YXRlIHRoZSBSRi1BR0MgcGluICovCisJZ2VuX2N0cmxfMyB8PSAgMHgwNDsKKworCS8qIGRpc2FibGUgdnNiL3FhbSBtb2R1bGUgKi8KKwlnZW5fY3RybF80ICY9IH4weDAxOworCS8qIGRpc2FibGUgYWRjIG1vZHVsZSAqLworCWdlbl9jdHJsXzQgJj0gfjB4MDI7CisKKwlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0dFTl9DVFJMXzMsIGdlbl9jdHJsXzMpOworCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfR0VOX0NUUkxfNCwgZ2VuX2N0cmxfNCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgcmV0OworCisJc3RhdGljIHN0cnVjdCBsZ2R0MzMwNV9yZWcgbGdkdDMzMDVfaW5pdF9kYXRhW10gPSB7CisJCXsgLnJlZyA9IExHRFQzMzA1X0dFTl9DVFJMXzEsCisJCSAgLnZhbCA9IDB4MDMsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0dFTl9DVFJMXzIsCisJCSAgLnZhbCA9IDB4YjAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0dFTl9DVFJMXzMsCisJCSAgLnZhbCA9IDB4MDEsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0dFTl9DT05UUk9MLAorCQkgIC52YWwgPSAweDZmLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9HRU5fQ1RSTF80LAorCQkgIC52YWwgPSAweDAzLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9ER1RMX0FHQ19SRUZfMSwKKwkJICAudmFsID0gMHgzMiwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfREdUTF9BR0NfUkVGXzIsCisJCSAgLnZhbCA9IDB4YzQsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0NSX0NUUl9GUkVRXzEsCisJCSAgLnZhbCA9IDB4MDAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0NSX0NUUl9GUkVRXzIsCisJCSAgLnZhbCA9IDB4MDAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0NSX0NUUl9GUkVRXzMsCisJCSAgLnZhbCA9IDB4MDAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0NSX0NUUl9GUkVRXzQsCisJCSAgLnZhbCA9IDB4MDAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0NSX0NUUkxfNywKKwkJICAudmFsID0gMHg3OSwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfQUdDX1BPV0VSX1JFRl8xLAorCQkgIC52YWwgPSAweDMyLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9BR0NfUE9XRVJfUkVGXzIsCisJCSAgLnZhbCA9IDB4YzQsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0FHQ19ERUxBWV9QVF8xLAorCQkgIC52YWwgPSAweDBkLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9BR0NfREVMQVlfUFRfMiwKKwkJICAudmFsID0gMHgzMCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfUkZBR0NfTE9PUF9GTFRSX0JXXzEsCisJCSAgLnZhbCA9IDB4ODAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X1JGQUdDX0xPT1BfRkxUUl9CV18yLAorCQkgIC52YWwgPSAweDAwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9JRkJXXzEsCisJCSAgLnZhbCA9IDB4ODAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0lGQldfMiwKKwkJICAudmFsID0gMHgwMCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfQUdDX0NUUkxfMSwKKwkJICAudmFsID0gMHgzMCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfQUdDX0NUUkxfNCwKKwkJICAudmFsID0gMHg2MSwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfRkVDX0JMT0NLX0NUUkwsCisJCSAgLnZhbCA9IDB4ZmYsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X1RQX0NUUkxfMSwKKwkJICAudmFsID0gMHgxYiwgfSwKKwl9OworCisJbGdfZGJnKCJcbiIpOworCisJcmV0ID0gbGdkdDMzMDVfd3JpdGVfcmVncyhzdGF0ZSwgbGdkdDMzMDVfaW5pdF9kYXRhLAorCQkJCSAgQVJSQVlfU0laRShsZ2R0MzMwNV9pbml0X2RhdGEpKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSBsZ2R0MzMwNV9zb2Z0X3Jlc2V0KHN0YXRlKTsKK2ZhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9zZXRfcGFyYW1ldGVycyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtKQoreworCXN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgcmV0OworCisJbGdfZGJnKCIoJWQsICVkKVxuIiwgcGFyYW0tPmZyZXF1ZW5jeSwgcGFyYW0tPnUudnNiLm1vZHVsYXRpb24pOworCisJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpIHsKKwkJcmV0ID0gZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyhmZSwgcGFyYW0pOworCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKwkJaWYgKGxnX2ZhaWwocmV0KSkKKwkJCWdvdG8gZmFpbDsKKwkJc3RhdGUtPmN1cnJlbnRfZnJlcXVlbmN5ID0gcGFyYW0tPmZyZXF1ZW5jeTsKKwl9CisKKwlyZXQgPSBsZ2R0MzMwNV9zZXRfbW9kdWxhdGlvbihzdGF0ZSwgcGFyYW0pOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCXJldCA9IGxnZHQzMzA1X3Bhc3NiYW5kX2RpZ2l0YWxfYWdjKHN0YXRlLCBwYXJhbSk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCXJldCA9IGxnZHQzMzA1X3NldF9hZ2NfcG93ZXJfcmVmKHN0YXRlLCBwYXJhbSk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCXJldCA9IGxnZHQzMzA1X2FnY19zZXR1cChzdGF0ZSwgcGFyYW0pOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCS8qIGxvdyBpZiAqLworCXJldCA9IGxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfR0VOX0NPTlRST0wsIDB4MmYpOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKwlyZXQgPSBsZ2R0MzMwNV9zZXRfcmVnX2JpdChzdGF0ZSwgTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfMSwgNiwgMSk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJcmV0ID0gbGdkdDMzMDVfc2V0X2lmKHN0YXRlLCBwYXJhbSk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCXJldCA9IGxnZHQzMzA1X3NwZWN0cmFsX2ludmVyc2lvbihzdGF0ZSwgcGFyYW0sCisJCQkJCSAgc3RhdGUtPmNmZy0+c3BlY3RyYWxfaW52ZXJzaW9uCisJCQkJCSAgPyAxIDogMCk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJcmV0ID0gbGdkdDMzMDVfc2V0X2ZpbHRlcl9leHRlbnNpb24oc3RhdGUsIHBhcmFtKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwlzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uID0gcGFyYW0tPnUudnNiLm1vZHVsYXRpb247CisKKwlyZXQgPSBsZ2R0MzMwNV9tcGVnX21vZGUoc3RhdGUsIHN0YXRlLT5jZmctPm1wZWdfbW9kZSk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJLyogbGdkdDMzMDVfbXBlZ19tb2RlX3BvbGFyaXR5IGNhbGxzIGxnZHQzMzA1X3NvZnRfcmVzZXQgKi8KKwlyZXQgPSBsZ2R0MzMwNV9tcGVnX21vZGVfcG9sYXJpdHkoc3RhdGUsCisJCQkJCSAgc3RhdGUtPmNmZy0+dHBjbGtfZWRnZSwKKwkJCQkJICBzdGF0ZS0+Y2ZnLT50cHZhbGlkX3BvbGFyaXR5KTsKK2ZhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW0pCit7CisJc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJbGdfZGJnKCJcbiIpOworCisJcGFyYW0tPnUudnNiLm1vZHVsYXRpb24gPSBzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uOworCXBhcmFtLT5mcmVxdWVuY3kgPSBzdGF0ZS0+Y3VycmVudF9mcmVxdWVuY3k7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGxnZHQzMzA1X3JlYWRfY3JfbG9ja19zdGF0dXMoc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwKKwkJCQkJaW50ICpsb2NrZWQpCit7CisJdTggdmFsOworCWludCByZXQ7CisJY2hhciAqY3JfbG9ja19zdGF0ZSA9ICIiOworCisJKmxvY2tlZCA9IDA7CisKKwlyZXQgPSBsZ2R0MzMwNV9yZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfQ1JfTE9DS19TVEFUVVMsICZ2YWwpOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCXN3aXRjaCAoc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbikgeworCWNhc2UgUUFNXzI1NjoKKwljYXNlIFFBTV82NDoKKwkJaWYgKHZhbCAmICgxIDw8IDEpKQorCQkJKmxvY2tlZCA9IDE7CisKKwkJc3dpdGNoICh2YWwgJiAweDA3KSB7CisJCWNhc2UgMDoKKwkJCWNyX2xvY2tfc3RhdGUgPSAiUUFNIFVOTE9DSyI7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJY3JfbG9ja19zdGF0ZSA9ICJRQU0gMXN0TG9jayI7CisJCQlicmVhazsKKwkJY2FzZSA2OgorCQkJY3JfbG9ja19zdGF0ZSA9ICJRQU0gMm5kTG9jayI7CisJCQlicmVhazsKKwkJY2FzZSA3OgorCQkJY3JfbG9ja19zdGF0ZSA9ICJRQU0gRmluYWxMb2NrIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY3JfbG9ja19zdGF0ZSA9ICJDTE9DS1FBTS1JTlZBTElEISI7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFZTQl84OgorCQlpZiAodmFsICYgKDEgPDwgNykpIHsKKwkJCSpsb2NrZWQgPSAxOworCQkJY3JfbG9ja19zdGF0ZSA9ICJDTE9DS1ZTQiI7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisJbGdfZGJnKCIoJWQpICVzXG4iLCAqbG9ja2VkLCBjcl9sb2NrX3N0YXRlKTsKK2ZhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9yZWFkX2ZlY19sb2NrX3N0YXR1cyhzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLAorCQkJCQkgaW50ICpsb2NrZWQpCit7CisJdTggdmFsOworCWludCByZXQsIG1wZWdfbG9jaywgZmVjX2xvY2ssIHZpdGVyYmlfbG9jazsKKworCSpsb2NrZWQgPSAwOworCisJc3dpdGNoIChzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uKSB7CisJY2FzZSBRQU1fMjU2OgorCWNhc2UgUUFNXzY0OgorCQlyZXQgPSBsZ2R0MzMwNV9yZWFkX3JlZyhzdGF0ZSwKKwkJCQkJTEdEVDMzMDVfRkVDX0xPQ0tfU1RBVFVTLCAmdmFsKTsKKwkJaWYgKGxnX2ZhaWwocmV0KSkKKwkJCWdvdG8gZmFpbDsKKworCQltcGVnX2xvY2sgICAgPSAodmFsICYgKDEgPDwgMCkpID8gMSA6IDA7CisJCWZlY19sb2NrICAgICA9ICh2YWwgJiAoMSA8PCAyKSkgPyAxIDogMDsKKwkJdml0ZXJiaV9sb2NrID0gKHZhbCAmICgxIDw8IDMpKSA/IDEgOiAwOworCisJCSpsb2NrZWQgPSBtcGVnX2xvY2sgJiYgZmVjX2xvY2sgJiYgdml0ZXJiaV9sb2NrOworCisJCWxnX2RiZygiKCVkKSAlcyVzJXNcbiIsICpsb2NrZWQsCisJCSAgICAgICBtcGVnX2xvY2sgICAgPyAibXBlZyBsb2NrICAiICA6ICIiLAorCQkgICAgICAgZmVjX2xvY2sgICAgID8gImZlYyBsb2NrICAiICAgOiAiIiwKKwkJICAgICAgIHZpdGVyYmlfbG9jayA/ICJ2aXRlcmJpIGxvY2siIDogIiIpOworCQlicmVhazsKKwljYXNlIFZTQl84OgorCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQoreworCXN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1OCB2YWw7CisJaW50IHJldCwgc2lnbmFsLCBpbmxvY2ssIG5vZmVjZXJyLCBzbnJnb29kLAorCQljcl9sb2NrLCBmZWNfbG9jaywgc3luY19sb2NrOworCisJKnN0YXR1cyA9IDA7CisKKwlyZXQgPSBsZ2R0MzMwNV9yZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfR0VOX1NUQVRVUywgJnZhbCk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJc2lnbmFsICAgID0gKHZhbCAmICgxIDw8IDQpKSA/IDEgOiAwOworCWlubG9jayAgICA9ICh2YWwgJiAoMSA8PCAzKSkgPyAwIDogMTsKKwlzeW5jX2xvY2sgPSAodmFsICYgKDEgPDwgMikpID8gMSA6IDA7CisJbm9mZWNlcnIgID0gKHZhbCAmICgxIDw8IDEpKSA/IDEgOiAwOworCXNucmdvb2QgICA9ICh2YWwgJiAoMSA8PCAwKSkgPyAxIDogMDsKKworCWxnX2RiZygiJXMlcyVzJXMlc1xuIiwKKwkgICAgICAgc2lnbmFsICAgID8gIlNJR05BTEVYSVNUICIgOiAiIiwKKwkgICAgICAgaW5sb2NrICAgID8gIklOTE9DSyAiICAgICAgOiAiIiwKKwkgICAgICAgc3luY19sb2NrID8gIlNZTkNMT0NLICIgICAgOiAiIiwKKwkgICAgICAgbm9mZWNlcnIgID8gIk5PRkVDRVJSICIgICAgOiAiIiwKKwkgICAgICAgc25yZ29vZCAgID8gIlNOUkdPT0QgIiAgICAgOiAiIik7CisKKwlyZXQgPSBsZ2R0MzMwNV9yZWFkX2NyX2xvY2tfc3RhdHVzKHN0YXRlLCAmY3JfbG9jayk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJaWYgKHNpZ25hbCkKKwkJKnN0YXR1cyB8PSBGRV9IQVNfU0lHTkFMOworCWlmIChjcl9sb2NrKQorCQkqc3RhdHVzIHw9IEZFX0hBU19DQVJSSUVSOworCWlmIChub2ZlY2VycikKKwkJKnN0YXR1cyB8PSBGRV9IQVNfVklURVJCSTsKKwlpZiAoc3luY19sb2NrKQorCQkqc3RhdHVzIHw9IEZFX0hBU19TWU5DOworCisJc3dpdGNoIChzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uKSB7CisJY2FzZSBRQU1fMjU2OgorCWNhc2UgUUFNXzY0OgorCQlyZXQgPSBsZ2R0MzMwNV9yZWFkX2ZlY19sb2NrX3N0YXR1cyhzdGF0ZSwgJmZlY19sb2NrKTsKKwkJaWYgKGxnX2ZhaWwocmV0KSkKKwkJCWdvdG8gZmFpbDsKKworCQlpZiAoZmVjX2xvY2spCisJCQkqc3RhdHVzIHw9IEZFX0hBU19MT0NLOworCQlicmVhazsKKwljYXNlIFZTQl84OgorCQlpZiAoaW5sb2NrKQorCQkJKnN0YXR1cyB8PSBGRV9IQVNfTE9DSzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBib3Jyb3dlZCBmcm9tIGxnZHQzMzB4LmMgKi8KK3N0YXRpYyB1MzIgY2FsY3VsYXRlX3Nucih1MzIgbXNlLCB1MzIgYykKK3sKKwlpZiAobXNlID09IDApIC8qIG5vIHNpZ25hbCAqLworCQlyZXR1cm4gMDsKKworCW1zZSA9IGludGxvZzEwKG1zZSk7CisJaWYgKG1zZSA+IGMpIHsKKwkJLyogTmVnYXRpdmUgU05SLCB3aGljaCBpcyBwb3NzaWJsZSwgYnV0IHJlYWxpc3RpY2x5IHRoZQorCQlkZW1vZCB3aWxsIGxvc2UgbG9jayBiZWZvcmUgdGhlIHNpZ25hbCBnZXRzIHRoaXMgYmFkLiAgVGhlCisJCUFQSSBvbmx5IGFsbG93cyBmb3IgdW5zaWduZWQgdmFsdWVzLCBzbyBqdXN0IHJldHVybiAwICovCisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTAqKGMgLSBtc2UpOworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKK3sKKwlzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTMyIG5vaXNlOwkvKiBub2lzZSB2YWx1ZSAqLworCXUzMiBjOwkJLyogcGVyLW1vZHVsYXRpb24gU05SIGNhbGN1bGF0aW9uIGNvbnN0YW50ICovCisKKwlzd2l0Y2ggKHN0YXRlLT5jdXJyZW50X21vZHVsYXRpb24pIHsKKwljYXNlIFZTQl84OgorI2lmZGVmIFVTRV9QVE1TRQorCQkvKiBVc2UgUGhhc2UgVHJhY2tlciBNZWFuLVNxdWFyZSBFcnJvciBSZWdpc3RlciAqLworCQkvKiBTTlIgZm9yIHJhbmdlcyBmcm9tIC0xMy4xMSB0byArNDQuMDggKi8KKwkJbm9pc2UgPQkoKHJlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9QVF9NU0VfMSkgJiAweDA3KSA8PCAxNikgfAorCQkJKHJlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9QVF9NU0VfMikgPDwgOCkgfAorCQkJKHJlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9QVF9NU0VfMykgJiAweGZmKTsKKwkJYyA9IDczOTU3OTk0OyAvKiBsb2cxMCgyNSozMl4yKSoyXjI0ICovCisjZWxzZQorCQkvKiBVc2UgRXF1YWxpemVyIE1lYW4tU3F1YXJlIEVycm9yIFJlZ2lzdGVyICovCisJCS8qIFNOUiBmb3IgcmFuZ2VzIGZyb20gLTE2LjEyIHRvICs0NC4wOCAqLworCQlub2lzZSA9CSgocmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X0VRX01TRV8xKSAmIDB4MGYpIDw8IDE2KSB8CisJCQkocmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X0VRX01TRV8yKSA8PCA4KSB8CisJCQkocmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X0VRX01TRV8zKSAmIDB4ZmYpOworCQljID0gNzM5NTc5OTQ7IC8qIGxvZzEwKDI1KjMyXjIpKjJeMjQgKi8KKyNlbmRpZgorCQlicmVhazsKKwljYXNlIFFBTV82NDoKKwljYXNlIFFBTV8yNTY6CisJCW5vaXNlID0gKHJlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9DUl9NU0VfMSkgPDwgOCkgfAorCQkJKHJlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9DUl9NU0VfMikgJiAweGZmKTsKKworCQljID0gKHN0YXRlLT5jdXJyZW50X21vZHVsYXRpb24gPT0gUUFNXzY0KSA/CisJCQk5NzkzOTgzNyA6IDk4MDI2MDY2OworCQkvKiBsb2cxMCg2ODgxMjgpKjJeMjQgYW5kIGxvZzEwKDY5NjMyMCkqMl4yNCAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc3RhdGUtPnNuciA9IGNhbGN1bGF0ZV9zbnIobm9pc2UsIGMpOworCS8qIHJlcG9ydCBTTlIgaW4gZEIgKiAxMCAqLworCSpzbnIgPSAoc3RhdGUtPnNuciAvICgoMSA8PCAyNCkgLyAxMCkpOworCWxnX2RiZygibm9pc2UgPSAweCUwOHgsIHNuciA9ICVkLiUwMmQgZEJcbiIsIG5vaXNlLAorCSAgICAgICBzdGF0ZS0+c25yID4+IDI0LCAoKChzdGF0ZS0+c25yID4+IDgpICYgMHhmZmZmKSAqIDEwMCkgPj4gMTYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCSB1MTYgKnN0cmVuZ3RoKQoreworCS8qIGJvcnJvd2VkIGZyb20gbGdkdDMzMHguYworCSAqCisJICogQ2FsY3VsYXRlIHN0cmVuZ3RoIGZyb20gU05SIHVwIHRvIDM1ZEIKKwkgKiBFdmVuIHRob3VnaCB0aGUgU05SIGNhbiBnbyBoaWdoZXIgdGhhbiAzNWRCLAorCSAqIHRoZXJlIGlzIHNvbWUgY29tZm9ydCBmYWN0b3IgaW4gaGF2aW5nIGEgcmFuZ2Ugb2YKKwkgKiBzdHJvbmcgc2lnbmFscyB0aGF0IGNhbiBzaG93IGF0IDEwMCUKKwkgKi8KKwlzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTE2IHNucjsKKwlpbnQgcmV0OworCisJKnN0cmVuZ3RoID0gMDsKKworCXJldCA9IGZlLT5vcHMucmVhZF9zbnIoZmUsICZzbnIpOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKwkvKiBSYXRoZXIgdGhhbiB1c2UgdGhlIDguOCB2YWx1ZSBzbnIsIHVzZSBzdGF0ZS0+c25yIHdoaWNoIGlzIDguMjQgKi8KKwkvKiBzY2FsZSB0aGUgcmFuZ2UgMCAtIDM1KjJeMjQgaW50byAwIC0gNjU1MzUgKi8KKwlpZiAoc3RhdGUtPnNuciA+PSA4OTYwICogMHgxMDAwMCkKKwkJKnN0cmVuZ3RoID0gMHhmZmZmOworCWVsc2UKKwkJKnN0cmVuZ3RoID0gc3RhdGUtPnNuciAvIDg5NjA7CitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGxnZHQzMzA1X3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKK3sKKwkqYmVyID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKnVjYmxvY2tzKQoreworCXN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCSp1Y2Jsb2NrcyA9CisJCShyZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfRkVDX1BLVF9FUlJfMSkgPDwgOCkgfAorCQkocmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X0ZFQ19QS1RfRVJSXzIpICYgMHhmZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9nZXRfdHVuZV9zZXR0aW5ncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3R1bmVfc2V0dGluZ3MKKwkJCQkJKmZlX3R1bmVfc2V0dGluZ3MpCit7CisJZmVfdHVuZV9zZXR0aW5ncy0+bWluX2RlbGF5X21zID0gNTAwOworCWxnX2RiZygiXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGdkdDMzMDVfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJbGdfZGJnKCJcbiIpOworCWtmcmVlKHN0YXRlKTsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGxnZHQzMzA1X29wczsKKworc3RydWN0IGR2Yl9mcm9udGVuZCAqbGdkdDMzMDVfYXR0YWNoKGNvbnN0IHN0cnVjdCBsZ2R0MzMwNV9jb25maWcgKmNvbmZpZywKKwkJCQkgICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXApCit7CisJc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSA9IE5VTEw7CisJaW50IHJldDsKKwl1OCB2YWw7CisKKwlsZ19kYmcoIiglZC0lMDR4KVxuIiwKKwkgICAgICAgaTJjX2FkYXAgPyBpMmNfYWRhcHRlcl9pZChpMmNfYWRhcCkgOiAwLAorCSAgICAgICBjb25maWcgPyBjb25maWctPmkyY19hZGRyIDogMCk7CisKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdGF0ZSA9PSBOVUxMKQorCQlnb3RvIGZhaWw7CisKKwlzdGF0ZS0+Y2ZnID0gY29uZmlnOworCXN0YXRlLT5pMmNfYWRhcCA9IGkyY19hZGFwOworCisJbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmbGdkdDMzMDVfb3BzLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwlzdGF0ZS0+ZnJvbnRlbmQuZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOworCisJLyogdmVyaWZ5IHRoYXQgd2UncmUgdGFsa2luZyB0byBhIGxnIGR0MzMwNSAqLworCXJldCA9IGxnZHQzMzA1X3JlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9HRU5fQ1RSTF8yLCAmdmFsKTsKKwlpZiAoKGxnX2ZhaWwocmV0KSkgfCAodmFsID09IDApKQorCQlnb3RvIGZhaWw7CisJcmV0ID0gbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCAweDA4MDgsIDB4ODApOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKwlyZXQgPSBsZ2R0MzMwNV9yZWFkX3JlZyhzdGF0ZSwgMHgwODA4LCAmdmFsKTsKKwlpZiAoKGxnX2ZhaWwocmV0KSkgfCAodmFsICE9IDB4ODApKQorCQlnb3RvIGZhaWw7CisJcmV0ID0gbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCAweDA4MDgsIDB4MDApOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCXN0YXRlLT5jdXJyZW50X2ZyZXF1ZW5jeSA9IC0xOworCXN0YXRlLT5jdXJyZW50X21vZHVsYXRpb24gPSAtMTsKKworCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOworZmFpbDoKKwlsZ193YXJuKCJ1bmFibGUgdG8gZGV0ZWN0IExHRFQzMzA1IGhhcmR3YXJlXG4iKTsKKwlrZnJlZShzdGF0ZSk7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKGxnZHQzMzA1X2F0dGFjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBsZ2R0MzMwNV9vcHMgPSB7CisJLmluZm8gPSB7CisJCS5uYW1lID0gIkxHIEVsZWN0cm9uaWNzIExHRFQzMzA1IFZTQi9RQU0gRnJvbnRlbmQiLAorCQkudHlwZSAgICAgICAgICAgICAgID0gRkVfQVRTQywKKwkJLmZyZXF1ZW5jeV9taW4gICAgICA9IDU0MDAwMDAwLAorCQkuZnJlcXVlbmN5X21heCAgICAgID0gODU4MDAwMDAwLAorCQkuZnJlcXVlbmN5X3N0ZXBzaXplID0gNjI1MDAsCisJCS5jYXBzID0gRkVfQ0FOX1FBTV82NCB8IEZFX0NBTl9RQU1fMjU2IHwgRkVfQ0FOXzhWU0IKKwl9LAorCS5pMmNfZ2F0ZV9jdHJsICAgICAgICA9IGxnZHQzMzA1X2kyY19nYXRlX2N0cmwsCisJLmluaXQgICAgICAgICAgICAgICAgID0gbGdkdDMzMDVfaW5pdCwKKwkuc2xlZXAgICAgICAgICAgICAgICAgPSBsZ2R0MzMwNV9zbGVlcCwKKwkuc2V0X2Zyb250ZW5kICAgICAgICAgPSBsZ2R0MzMwNV9zZXRfcGFyYW1ldGVycywKKwkuZ2V0X2Zyb250ZW5kICAgICAgICAgPSBsZ2R0MzMwNV9nZXRfZnJvbnRlbmQsCisJLmdldF90dW5lX3NldHRpbmdzICAgID0gbGdkdDMzMDVfZ2V0X3R1bmVfc2V0dGluZ3MsCisJLnJlYWRfc3RhdHVzICAgICAgICAgID0gbGdkdDMzMDVfcmVhZF9zdGF0dXMsCisJLnJlYWRfYmVyICAgICAgICAgICAgID0gbGdkdDMzMDVfcmVhZF9iZXIsCisJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0gbGdkdDMzMDVfcmVhZF9zaWduYWxfc3RyZW5ndGgsCisJLnJlYWRfc25yICAgICAgICAgICAgID0gbGdkdDMzMDVfcmVhZF9zbnIsCisJLnJlYWRfdWNibG9ja3MgICAgICAgID0gbGdkdDMzMDVfcmVhZF91Y2Jsb2NrcywKKwkucmVsZWFzZSAgICAgICAgICAgICAgPSBsZ2R0MzMwNV9yZWxlYXNlLAorfTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJMRyBFbGVjdHJvbmljcyBMR0RUMzMwNSBBVFNDL1FBTS1CIERlbW9kdWxhdG9yIERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBLcnVma3kgPG1rcnVma3lAbGludXh0di5vcmc+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTigiMC4xIik7CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBjLWJhc2ljLW9mZnNldDogOAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDUuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYTZlNTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDUuaApAQCAtMCwwICsxLDg1IEBACisvKgorICogICAgU3VwcG9ydCBmb3IgTEdEVDMzMDUgLSBWU0IvUUFNCisgKgorICogICAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IE1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QGxpbnV4dHYub3JnPgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9MR0RUMzMwNV9IXworI2RlZmluZSBfTEdEVDMzMDVfSF8KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorCisKK2VudW0gbGdkdDMzMDVfbXBlZ19tb2RlIHsKKwlMR0RUMzMwNV9NUEVHX1BBUkFMTEVMID0gMCwKKwlMR0RUMzMwNV9NUEVHX1NFUklBTCA9IDEsCit9OworCitlbnVtIGxnZHQzMzA1X3RwX2Nsb2NrX2VkZ2UgeworCUxHRFQzMzA1X1RQQ0xLX1JJU0lOR19FREdFID0gMCwKKwlMR0RUMzMwNV9UUENMS19GQUxMSU5HX0VER0UgPSAxLAorfTsKKworZW51bSBsZ2R0MzMwNV90cF92YWxpZF9wb2xhcml0eSB7CisJTEdEVDMzMDVfVFBfVkFMSURfTE9XID0gMCwKKwlMR0RUMzMwNV9UUF9WQUxJRF9ISUdIID0gMSwKK307CisKK3N0cnVjdCBsZ2R0MzMwNV9jb25maWcgeworCXU4IGkyY19hZGRyOworCisJLyogdXNlciBkZWZpbmVkIElGIGZyZXF1ZW5jeSBpbiBLSHogKi8KKwl1MTYgcWFtX2lmX2toejsKKwl1MTYgdnNiX2lmX2toejsKKworCS8qIEFHQyBQb3dlciByZWZlcmVuY2UgLSBkZWZhdWx0cyBhcmUgdXNlZCBpZiBsZWZ0IHVuc2V0ICovCisJdTE2IHVzcmVmXzh2c2I7ICAgLyogZGVmYXVsdDogMHgzMmM0ICovCisJdTE2IHVzcmVmX3FhbTY0OyAgLyogZGVmYXVsdDogMHg1NDAwICovCisJdTE2IHVzcmVmX3FhbTI1NjsgLyogZGVmYXVsdDogMHgyYTgwICovCisKKwkvKiBkaXNhYmxlIGkyYyByZXBlYXRlciAtIDA6cmVwZWF0ZXIgZW5hYmxlZCAxOnJlcGVhdGVyIGRpc2FibGVkICovCisJaW50IGRlbnlfaTJjX3JwdHI6MTsKKworCS8qIHNwZWN0cmFsIGludmVyc2lvbiAtIDA6ZGlzYWJsZWQgMTplbmFibGVkICovCisJaW50IHNwZWN0cmFsX2ludmVyc2lvbjoxOworCisJLyogdXNlIFJGIEFHQyBsb29wIC0gMDpkaXNhYmxlZCAxOmVuYWJsZWQgKi8KKwlpbnQgcmZfYWdjX2xvb3A6MTsKKworCWVudW0gbGdkdDMzMDVfbXBlZ19tb2RlIG1wZWdfbW9kZTsKKwllbnVtIGxnZHQzMzA1X3RwX2Nsb2NrX2VkZ2UgdHBjbGtfZWRnZTsKKwllbnVtIGxnZHQzMzA1X3RwX3ZhbGlkX3BvbGFyaXR5IHRwdmFsaWRfcG9sYXJpdHk7Cit9OworCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0xHRFQzMzA1KSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0xHRFQzMzA1X01PRFVMRSkgJiYgXAorCQkJCSAgICAgZGVmaW5lZChNT0RVTEUpKQorZXh0ZXJuCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpsZ2R0MzMwNV9hdHRhY2goY29uc3Qgc3RydWN0IGxnZHQzMzA1X2NvbmZpZyAqY29uZmlnLAorCQkJCSAgICAgc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCk7CisjZWxzZQorc3RhdGljIGlubGluZQorc3RydWN0IGR2Yl9mcm9udGVuZCAqbGdkdDMzMDVfYXR0YWNoKGNvbnN0IHN0cnVjdCBsZ2R0MzMwNV9jb25maWcgKmNvbmZpZywKKwkJCQkgICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXApCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLyogQ09ORklHX0RWQl9MR0RUMzMwNSAqLworCisjZW5kaWYgLyogX0xHRFQzMzA1X0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5iaDI0LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5iaDI0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA1OWIxNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJoMjQuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogbG5iaDI0LmggLSBkcml2ZXIgZm9yIGxuYiBzdXBwbHkgYW5kIGNvbnRyb2wgaWMgbG5iaDI0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5ldFVQIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9MTkJIMjRfSAorI2RlZmluZSBfTE5CSDI0X0gKKworLyogc3lzdGVtIHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgTE5CSDI0X09MRgkweDAxCisjZGVmaW5lIExOQkgyNF9PVEYJMHgwMgorI2RlZmluZSBMTkJIMjRfRU4JMHgwNAorI2RlZmluZSBMTkJIMjRfVlNFTAkweDA4CisjZGVmaW5lIExOQkgyNF9MTEMJMHgxMAorI2RlZmluZSBMTkJIMjRfVEVOCTB4MjAKKyNkZWZpbmUgTE5CSDI0X1RUWAkweDQwCisjZGVmaW5lIExOQkgyNF9QQ0wJMHg4MAorCisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfTE5CUDIxKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0xOQlAyMV9NT0RVTEUpIFwKKwkJCQkJCQkmJiBkZWZpbmVkKE1PRFVMRSkpCisvKiBvdmVycmlkZV9zZXQgYW5kIG92ZXJyaWRlX2NsZWFyIGNvbnRyb2wgd2hpY2gKKyAgIHN5c3RlbSByZWdpc3RlciBiaXRzIChhYm92ZSkgdG8gYWx3YXlzIHNldCAmIGNsZWFyICovCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqbG5iaDI0X2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggb3ZlcnJpZGVfc2V0LAorCQkJCXU4IG92ZXJyaWRlX2NsZWFyLCB1OCBpMmNfYWRkcik7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpsbmJoMjRfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1OCBvdmVycmlkZV9zZXQsCisJCQkJdTggb3ZlcnJpZGVfY2xlYXIsIHU4IGkyY19hZGRyKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5jCmluZGV4IDc2ZjkzNWQuLjFkY2M1NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5icDIxLmMKQEAgLTEsNyArMSw4IEBACiAvKgotICogbG5icDIxLmggLSBkcml2ZXIgZm9yIGxuYiBzdXBwbHkgYW5kIGNvbnRyb2wgaWMgbG5icDIxCisgKiBsbmJwMjEuYyAtIGRyaXZlciBmb3IgbG5iIHN1cHBseSBhbmQgY29udHJvbCBpYyBsbmJwMjEKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xpdmVyIEVuZHJpc3MKKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG5ldHVwLnJ1PgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0zMywxOCArMzQsMjEgQEAKIAogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgogI2luY2x1ZGUgImxuYnAyMS5oIgorI2luY2x1ZGUgImxuYmgyNC5oIgogCiBzdHJ1Y3QgbG5icDIxIHsKIAl1OAkJCWNvbmZpZzsKIAl1OAkJCW92ZXJyaWRlX29yOwogCXU4CQkJb3ZlcnJpZGVfYW5kOwogCXN0cnVjdCBpMmNfYWRhcHRlcgkqaTJjOworCXU4CQkJaTJjX2FkZHI7CiB9OwogCi1zdGF0aWMgaW50IGxuYnAyMV9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQorc3RhdGljIGludCBsbmJwMjFfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCWZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKIHsKIAlzdHJ1Y3QgbG5icDIxICpsbmJwMjEgPSAoc3RydWN0IGxuYnAyMSAqKSBmZS0+c2VjX3ByaXY7Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0gewkuYWRkciA9IDB4MDgsIC5mbGFncyA9IDAsCisJc3RydWN0IGkyY19tc2cgbXNnID0gewkuYWRkciA9IGxuYnAyMS0+aTJjX2FkZHIsIC5mbGFncyA9IDAsCiAJCQkJLmJ1ZiA9ICZsbmJwMjEtPmNvbmZpZywKIAkJCQkubGVuID0gc2l6ZW9mKGxuYnAyMS0+Y29uZmlnKSB9OwogCkBAIC03Miw3ICs3Niw3IEBACiBzdGF0aWMgaW50IGxuYnAyMV9lbmFibGVfaGlnaF9sbmJfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGxuYnAyMSAqbG5icDIxID0gKHN0cnVjdCBsbmJwMjEgKikgZmUtPnNlY19wcml2OwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsJLmFkZHIgPSAweDA4LCAuZmxhZ3MgPSAwLAorCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsJLmFkZHIgPSBsbmJwMjEtPmkyY19hZGRyLCAuZmxhZ3MgPSAwLAogCQkJCS5idWYgPSAmbG5icDIxLT5jb25maWcsCiAJCQkJLmxlbiA9IHNpemVvZihsbmJwMjEtPmNvbmZpZykgfTsKIApAQCAtOTcsMTUgKzEwMSwxOCBAQAogCWZlLT5zZWNfcHJpdiA9IE5VTEw7CiB9CiAKLXN0cnVjdCBkdmJfZnJvbnRlbmQgKmxuYnAyMV9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1OCBvdmVycmlkZV9zZXQsIHU4IG92ZXJyaWRlX2NsZWFyKQorc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmxuYngyeF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IG92ZXJyaWRlX3NldCwKKwkJCQl1OCBvdmVycmlkZV9jbGVhciwgdTggaTJjX2FkZHIsIHU4IGNvbmZpZykKIHsKIAlzdHJ1Y3QgbG5icDIxICpsbmJwMjEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbG5icDIxKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFsbmJwMjEpCiAJCXJldHVybiBOVUxMOwogCiAJLyogZGVmYXVsdCBjb25maWd1cmF0aW9uICovCi0JbG5icDIxLT5jb25maWcgPSBMTkJQMjFfSVNFTDsKKwlsbmJwMjEtPmNvbmZpZyA9IGNvbmZpZzsKIAlsbmJwMjEtPmkyYyA9IGkyYzsKKwlsbmJwMjEtPmkyY19hZGRyID0gaTJjX2FkZHI7CiAJZmUtPnNlY19wcml2ID0gbG5icDIxOwogCiAJLyogYml0cyB3aGljaCBzaG91bGQgYmUgZm9yY2VkIHRvICcxJyAqLwpAQCAtMTI2LDExICsxMzMsMjkgQEAKIAkvKiBvdmVycmlkZSBmcm9udGVuZCBvcHMgKi8KIAlmZS0+b3BzLnNldF92b2x0YWdlID0gbG5icDIxX3NldF92b2x0YWdlOwogCWZlLT5vcHMuZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2UgPSBsbmJwMjFfZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2U7CisJcHJpbnRrKEtFUk5fSU5GTyAiTE5CeDJ4IGF0dGFjaGVkIG9uIGFkZHI9JXgiLCBsbmJwMjEtPmkyY19hZGRyKTsKIAogCXJldHVybiBmZTsKIH0KKworc3RydWN0IGR2Yl9mcm9udGVuZCAqbG5iaDI0X2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggb3ZlcnJpZGVfc2V0LAorCQkJCXU4IG92ZXJyaWRlX2NsZWFyLCB1OCBpMmNfYWRkcikKK3sKKwlyZXR1cm4gbG5ieDJ4X2F0dGFjaChmZSwgaTJjLCBvdmVycmlkZV9zZXQsIG92ZXJyaWRlX2NsZWFyLAorCQkJCQkJCWkyY19hZGRyLCBMTkJIMjRfVFRYKTsKK30KK0VYUE9SVF9TWU1CT0wobG5iaDI0X2F0dGFjaCk7CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmxuYnAyMV9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IG92ZXJyaWRlX3NldCwKKwkJCQl1OCBvdmVycmlkZV9jbGVhcikKK3sKKwlyZXR1cm4gbG5ieDJ4X2F0dGFjaChmZSwgaTJjLCBvdmVycmlkZV9zZXQsIG92ZXJyaWRlX2NsZWFyLAorCQkJCQkJCTB4MDgsIExOQlAyMV9JU0VMKTsKK30KIEVYUE9SVF9TWU1CT0wobG5icDIxX2F0dGFjaCk7CiAKLU1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBsbmIgc3VwcGx5IGFuZCBjb250cm9sIGljIGxuYnAyMSIpOwotTU9EVUxFX0FVVEhPUigiT2xpdmVyIEVuZHJpc3MiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBsbmIgc3VwcGx5IGFuZCBjb250cm9sIGljIGxuYnAyMSwgbG5iaDI0Iik7CitNT0RVTEVfQVVUSE9SKCJPbGl2ZXIgRW5kcmlzcywgSWdvciBNLiBMaXBsaWFuaW4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuaAppbmRleCA4ZmUwOTRiLi5mY2RmMWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5icDIxLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5oCkBAIC0yOCwyNiArMjgsNDggQEAKICNkZWZpbmUgX0xOQlAyMV9ICiAKIC8qIHN5c3RlbSByZWdpc3RlciBiaXRzICovCisvKiBbUk9dIDA9T0s7IDE9b3ZlciBjdXJyZW50IGxpbWl0IGZsYWcgKi8KICNkZWZpbmUgTE5CUDIxX09MRgkweDAxCisvKiBbUk9dIDA9T0s7IDE9b3ZlciB0ZW1wZXJhdHVyZSBmbGFnICgxNTAgQykgKi8KICNkZWZpbmUgTE5CUDIxX09URgkweDAyCisvKiBbUlddIDA9ZGlzYWJsZSBMTkIgcG93ZXIsIGVuYWJsZSBsb29wdGhyb3VnaAorCTE9ZW5hYmxlIExOQiBwb3dlciwgZGlzYWJsZSBsb29wdGhyb3VnaCAqLwogI2RlZmluZSBMTkJQMjFfRU4JMHgwNAorLyogW1JXXSAwPWxvdyB2b2x0YWdlICgxMy8xNFYsIHZlcnQgcG9sKQorCTE9aGlnaCB2b2x0YWdlICgxOC8xOVYsaG9yaXogcG9sKSAqLwogI2RlZmluZSBMTkJQMjFfVlNFTAkweDA4CisvKiBbUlddIGluY3JlYXNlIExOQiB2b2x0YWdlIGJ5IDFWOgorCTA9MTMvMThWOyAxPTE0LzE5ViAqLwogI2RlZmluZSBMTkJQMjFfTExDCTB4MTAKKy8qIFtSV10gMD10b25lIGNvbnRyb2xsZWQgYnkgRFNRSU4gcGluCisJMT10b25lIGVuYWJsZSwgZGlzYWJsZSBEU1FJTiAqLwogI2RlZmluZSBMTkJQMjFfVEVOCTB4MjAKKy8qIFtSV10gY3VycmVudCBsaW1pdCBzZWxlY3Q6CisJMDpJb3V0PTUwMC02NTBtQSBJc2M9MzAwbUEKKwkxOklvdXQ9NDAwLTU1MG1BIElzYz0yMDBtQSAqLwogI2RlZmluZSBMTkJQMjFfSVNFTAkweDQwCisvKiBbUlddIHNob3J0LWNpcmN1aXQgcHJvdGVjdDoKKwkwPXB1bHNlZCAoZHluYW1pYykgY3VyciBsaW1pdGluZworCTE9c3RhdGljIGN1cnIgbGltaXRpbmcgKi8KICNkZWZpbmUgTE5CUDIxX1BDTAkweDgwCiAKICNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KIAotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9MTkJQMjEpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfTE5CUDIxX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQotLyogb3ZlcnJpZGVfc2V0IGFuZCBvdmVycmlkZV9jbGVhciBjb250cm9sIHdoaWNoIHN5c3RlbSByZWdpc3RlciBiaXRzIChhYm92ZSkgdG8gYWx3YXlzIHNldCAmIGNsZWFyICovCi1leHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqbG5icDIxX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IG92ZXJyaWRlX3NldCwgdTggb3ZlcnJpZGVfY2xlYXIpOworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9MTkJQMjEpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfTE5CUDIxX01PRFVMRSkgXAorCQkJCQkJCSYmIGRlZmluZWQoTU9EVUxFKSkKKy8qIG92ZXJyaWRlX3NldCBhbmQgb3ZlcnJpZGVfY2xlYXIgY29udHJvbCB3aGljaAorIHN5c3RlbSByZWdpc3RlciBiaXRzIChhYm92ZSkgdG8gYWx3YXlzIHNldCAmIGNsZWFyICovCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqbG5icDIxX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggb3ZlcnJpZGVfc2V0LAorCQkJCXU4IG92ZXJyaWRlX2NsZWFyKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmxuYnAyMV9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1OCBvdmVycmlkZV9zZXQsIHU4IG92ZXJyaWRlX2NsZWFyKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpsbmJwMjFfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1OCBvdmVycmlkZV9zZXQsCisJCQkJdTggb3ZlcnJpZGVfY2xlYXIpCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CiB9Ci0jZW5kaWYgLy8gQ09ORklHX0RWQl9MTkJQMjEKKyNlbmRpZgogCi0jZW5kaWYgLy8gX0xOQlAyMV9ICisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zOTIxX21vZHVsZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M5MjFfbW9kdWxlLmMKaW5kZXggODkyYWY4Yy4uM2Y1YTBlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M5MjFfbW9kdWxlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M5MjFfbW9kdWxlLmMKQEAgLTE2OSw3ICsxNjksNiBAQAogCiAJc3RydWN0IHM5MjFfc3RhdGUgKnN0YXRlOwogCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHM5MjFfc3RhdGUpLCBHRlBfS0VSTkVMKTsKLQltZW1zZXQoc3RhdGUsIDB4MCwgc2l6ZW9mKHN0cnVjdCBzOTIxX3N0YXRlKSk7CiAKIAlzdGF0ZS0+YWRkciA9IGNvbmZpZy0+aTJjX2FkZHJlc3M7CiAJc3RhdGUtPmkyYyA9IGkyYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MTAwX2NmZy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjYxMDBfY2ZnLmgKaW5kZXggZDMxMzM0MC4uNjMxNGQxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjYxMDBfY2ZnLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjYxMDBfY2ZnLmgKQEAgLTM2LDcgKzM2LDYgQEAKIAkJCXJldHVybiBlcnI7CiAJCX0KIAkJKmZyZXF1ZW5jeSA9IHRfc3RhdGUuZnJlcXVlbmN5OwotCQlwcmludGsoIiVzOiBGcmVxdWVuY3k9JWRcbiIsIF9fZnVuY19fLCB0X3N0YXRlLmZyZXF1ZW5jeSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNTksNyArNTgsNiBAQAogCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KLQlwcmludGsoIiVzOiBGcmVxdWVuY3k9JWRcbiIsIF9fZnVuY19fLCB0X3N0YXRlLmZyZXF1ZW5jeSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgxLDcgKzc5LDYgQEAKIAkJfQogCQkqYmFuZHdpZHRoID0gdF9zdGF0ZS5iYW5kd2lkdGg7CiAJfQotCXByaW50aygiJXM6IEJhbmR3aWR0aD0lZFxuIiwgX19mdW5jX18sIHRfc3RhdGUuYmFuZHdpZHRoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAzLDYgKzEwMCw1IEBACiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQotCXByaW50aygiJXM6IEJhbmR3aWR0aD0lZFxuIiwgX19mdW5jX18sIHRfc3RhdGUuYmFuZHdpZHRoKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMTMzMmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBzdHYwOTAwLmgKKyAqCisgKiBEcml2ZXIgZm9yIFNUIFNUVjA5MDAgc2F0ZWxsaXRlIGRlbW9kdWxhdG9yIElDLgorICoKKyAqIENvcHlyaWdodCAoQykgU1QgTWljcm9lbGVjdHJvbmljcy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZXRVUCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBTVFYwOTAwX0gKKyNkZWZpbmUgU1RWMDkwMF9ICisKKyNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKworc3RydWN0IHN0djA5MDBfY29uZmlnIHsKKwl1OCBkZW1vZF9hZGRyZXNzOworCXUzMiB4dGFsOworCXU4IGNsa21vZGU7LyogMCBmb3IgQ0xLSSwgIDIgZm9yIFhUQUxJICovCisKKwl1OCBkaXNlcWNfbW9kZTsKKworCXU4IHBhdGgxX21vZGU7CisJdTggcGF0aDJfbW9kZTsKKworCXU4IHR1bjFfbWFkZHJlc3M7LyogMCwgMSwgMiwgMyBmb3IgMHhjMCwgMHhjMiwgMHhjNCwgMHhjNiAqLworCXU4IHR1bjJfbWFkZHJlc3M7CisJdTggdHVuMV9hZGM7LyogMSBmb3Igc3R2NjExMCwgMiBmb3Igc3RiNjEwMCAqLworCXU4IHR1bjJfYWRjOworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9TVFYwOTAwKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX1NUVjA5MDBfTU9EVUxFKSBcCisJCQkJCQkJJiYgZGVmaW5lZChNT0RVTEUpKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnN0djA5MDBfYXR0YWNoKGNvbnN0IHN0cnVjdCBzdHYwOTAwX2NvbmZpZyAqY29uZmlnLAorCQkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgaW50IGRlbW9kKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnN0djA5MDBfYXR0YWNoKGNvbnN0IHN0cnVjdCBzdHYwOTAwX2NvbmZpZyAqY29uZmlnLAorCQkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgaW50IGRlbW9kKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ5OWJjZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX2NvcmUuYwpAQCAtMCwwICsxLDE5NDkgQEAKKy8qCisgKiBzdHYwOTAwX2NvcmUuYworICoKKyAqIERyaXZlciBmb3IgU1QgU1RWMDkwMCBzYXRlbGxpdGUgZGVtb2R1bGF0b3IgSUMuCisgKgorICogQ29weXJpZ2h0IChDKSBTVCBNaWNyb2VsZWN0cm9uaWNzLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5ldFVQIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCisjaW5jbHVkZSAic3R2MDkwMC5oIgorI2luY2x1ZGUgInN0djA5MDBfcmVnLmgiCisjaW5jbHVkZSAic3R2MDkwMF9wcml2LmgiCisjaW5jbHVkZSAic3R2MDkwMF9pbml0LmgiCisKK3N0YXRpYyBpbnQgc3R2ZGVidWcgPSAxOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBzdHZkZWJ1ZywgaW50LCAwNjQ0KTsKKworLyogaW50ZXJuYWwgcGFyYW1zIG5vZGUgKi8KK3N0cnVjdCBzdHYwOTAwX2lub2RlIHsKKwkvKiBwb2ludGVyIGZvciBpbnRlcm5hbCBwYXJhbXMsIG9uZSBmb3IgZWFjaCBwYWlyIG9mIGRlbW9kcyAqLworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsCQkqaW50ZXJuYWw7CisJc3RydWN0IHN0djA5MDBfaW5vZGUJCSpuZXh0X2lub2RlOworfTsKKworLyogZmlyc3QgaW50ZXJuYWwgcGFyYW1zICovCitzdGF0aWMgc3RydWN0IHN0djA5MDBfaW5vZGUgKnN0djA5MDBfZmlyc3RfaW5vZGU7CisKKy8qIGZpbmQgY2hpcCBieSBpMmMgYWRhcHRlciBhbmQgaTJjIGFkZHJlc3MgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3R2MDkwMF9pbm9kZSAqZmluZF9pbm9kZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQkJCQkJCXU4IGkyY19hZGRyKQoreworCXN0cnVjdCBzdHYwOTAwX2lub2RlICp0ZW1wX2NoaXAgPSBzdHYwOTAwX2ZpcnN0X2lub2RlOworCisJaWYgKHRlbXBfY2hpcCAhPSBOVUxMKSB7CisJCS8qCisJCSBTZWFyY2ggb2YgdGhlIGxhc3Qgc3R2MDkwMCBjaGlwIG9yCisJCSBmaW5kIGl0IGJ5IGkyYyBhZGFwdGVyIGFuZCBpMmMgYWRkcmVzcyAqLworCQl3aGlsZSAoKHRlbXBfY2hpcCAhPSBOVUxMKSAmJgorCQkJKCh0ZW1wX2NoaXAtPmludGVybmFsLT5pMmNfYWRhcCAhPSBpMmNfYWRhcCkgfHwKKwkJCSh0ZW1wX2NoaXAtPmludGVybmFsLT5pMmNfYWRkciAhPSBpMmNfYWRkcikpKQorCisJCQl0ZW1wX2NoaXAgPSB0ZW1wX2NoaXAtPm5leHRfaW5vZGU7CisKKwl9CisKKwlyZXR1cm4gdGVtcF9jaGlwOworfQorCisvKiBkZWFsbG9jYXRpbmcgY2hpcCAqLworc3RhdGljIHZvaWQgcmVtb3ZlX2lub2RlKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRlcm5hbCkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9pbm9kZSAqcHJldl9ub2RlID0gc3R2MDkwMF9maXJzdF9pbm9kZTsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbm9kZSAqZGVsX25vZGUgPSBmaW5kX2lub2RlKGludGVybmFsLT5pMmNfYWRhcCwKKwkJCQkJCWludGVybmFsLT5pMmNfYWRkcik7CisKKwlpZiAoZGVsX25vZGUgIT0gTlVMTCkgeworCQlpZiAoZGVsX25vZGUgPT0gc3R2MDkwMF9maXJzdF9pbm9kZSkgeworCQkJc3R2MDkwMF9maXJzdF9pbm9kZSA9IGRlbF9ub2RlLT5uZXh0X2lub2RlOworCQl9IGVsc2UgeworCQkJd2hpbGUgKHByZXZfbm9kZS0+bmV4dF9pbm9kZSAhPSBkZWxfbm9kZSkKKwkJCQlwcmV2X25vZGUgPSBwcmV2X25vZGUtPm5leHRfaW5vZGU7CisKKwkJCWlmIChkZWxfbm9kZS0+bmV4dF9pbm9kZSA9PSBOVUxMKQorCQkJCXByZXZfbm9kZS0+bmV4dF9pbm9kZSA9IE5VTEw7CisJCQllbHNlCisJCQkJcHJldl9ub2RlLT5uZXh0X2lub2RlID0KKwkJCQkJcHJldl9ub2RlLT5uZXh0X2lub2RlLT5uZXh0X2lub2RlOworCQl9CisKKwkJa2ZyZWUoZGVsX25vZGUpOworCX0KK30KKworLyogYWxsb2NhdGluZyBuZXcgY2hpcCAqLworc3RhdGljIHN0cnVjdCBzdHYwOTAwX2lub2RlICphcHBlbmRfaW50ZXJuYWwoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludGVybmFsKQoreworCXN0cnVjdCBzdHYwOTAwX2lub2RlICpuZXdfbm9kZSA9IHN0djA5MDBfZmlyc3RfaW5vZGU7CisKKwlpZiAobmV3X25vZGUgPT0gTlVMTCkgeworCQluZXdfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHYwOTAwX2lub2RlKSwgR0ZQX0tFUk5FTCk7CisJCXN0djA5MDBfZmlyc3RfaW5vZGUgPSBuZXdfbm9kZTsKKwl9IGVsc2UgeworCQl3aGlsZSAobmV3X25vZGUtPm5leHRfaW5vZGUgIT0gTlVMTCkKKwkJCW5ld19ub2RlID0gbmV3X25vZGUtPm5leHRfaW5vZGU7CisKKwkJbmV3X25vZGUtPm5leHRfaW5vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3R2MDkwMF9pbm9kZSksIEdGUF9LRVJORUwpOworCQlpZiAobmV3X25vZGUtPm5leHRfaW5vZGUgIT0gTlVMTCkKKwkJCW5ld19ub2RlID0gbmV3X25vZGUtPm5leHRfaW5vZGU7CisJCWVsc2UKKwkJCW5ld19ub2RlID0gTlVMTDsKKwl9CisKKwlpZiAobmV3X25vZGUgIT0gTlVMTCkgeworCQluZXdfbm9kZS0+aW50ZXJuYWwgPSBpbnRlcm5hbDsKKwkJbmV3X25vZGUtPm5leHRfaW5vZGUgPSBOVUxMOworCX0KKworCXJldHVybiBuZXdfbm9kZTsKK30KKworczMyIGdlMmNvbXAoczMyIGEsIHMzMiB3aWR0aCkKK3sKKwlpZiAod2lkdGggPT0gMzIpCisJCXJldHVybiBhOworCWVsc2UKKwkJcmV0dXJuIChhID49ICgxIDw8ICh3aWR0aCAtIDEpKSkgPyAoYSAtICgxIDw8IHdpZHRoKSkgOiBhOworfQorCit2b2lkIHN0djA5MDBfd3JpdGVfcmVnKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywgdTE2IHJlZ19hZGRyLAorCQkJCQkJCQl1OCByZWdfZGF0YSkKK3sKKwl1OCBkYXRhWzNdOworCWludCByZXQ7CisJc3RydWN0IGkyY19tc2cgaTJjbXNnID0geworCQkuYWRkciAgPSBpX3BhcmFtcy0+aTJjX2FkZHIsCisJCS5mbGFncyA9IDAsCisJCS5sZW4gICA9IDMsCisJCS5idWYgICA9IGRhdGEsCisJfTsKKworCWRhdGFbMF0gPSBNU0IocmVnX2FkZHIpOworCWRhdGFbMV0gPSBMU0IocmVnX2FkZHIpOworCWRhdGFbMl0gPSByZWdfZGF0YTsKKworCXJldCA9IGkyY190cmFuc2ZlcihpX3BhcmFtcy0+aTJjX2FkYXAsICZpMmNtc2csIDEpOworCWlmIChyZXQgIT0gMSkKKwkJZHByaW50ayhLRVJOX0VSUiAiJXM6IGkyYyBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJldCk7Cit9CisKK3U4IHN0djA5MDBfcmVhZF9yZWcoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLCB1MTYgcmVnX2FkZHIpCit7CisJdTggZGF0YVsyXTsKKwlpbnQgcmV0OworCXN0cnVjdCBpMmNfbXNnIGkyY21zZyA9IHsKKwkJLmFkZHIgID0gaV9wYXJhbXMtPmkyY19hZGRyLAorCQkuZmxhZ3MgPSAwLAorCQkubGVuICAgPSAyLAorCQkuYnVmICAgPSBkYXRhLAorCX07CisKKwlkYXRhWzBdID0gTVNCKHJlZ19hZGRyKTsKKwlkYXRhWzFdID0gTFNCKHJlZ19hZGRyKTsKKworCXJldCA9IGkyY190cmFuc2ZlcihpX3BhcmFtcy0+aTJjX2FkYXAsICZpMmNtc2csIDEpOworCWlmIChyZXQgIT0gMSkKKwkJZHByaW50ayhLRVJOX0VSUiAiJXM6IGkyYyBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJldCk7CisKKwlpMmNtc2cuZmxhZ3MgPSBJMkNfTV9SRDsKKwlpMmNtc2cubGVuID0gMTsKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaV9wYXJhbXMtPmkyY19hZGFwLCAmaTJjbXNnLCAxKTsKKwlpZiAocmV0ICE9IDEpCisJCWRwcmludGsoS0VSTl9FUlIgIiVzOiBpMmMgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXQpOworCisJcmV0dXJuIGRhdGFbMF07Cit9CisKK3ZvaWQgZXh0cmFjdF9tYXNrX3Bvcyh1MzIgbGFiZWwsIHU4ICptYXNrLCB1OCAqcG9zKQoreworCXU4IHBvc2l0aW9uID0gMCwgaSA9IDA7CisKKwkoKm1hc2spID0gbGFiZWwgJiAweGZmOworCisJd2hpbGUgKChwb3NpdGlvbiA9PSAwKSAmJiAoaSA8IDgpKSB7CisJCXBvc2l0aW9uID0gKCgqbWFzaykgPj4gaSkgJiAweDAxOworCQlpKys7CisJfQorCisJKCpwb3MpID0gKGkgLSAxKTsKK30KKwordm9pZCBzdHYwOTAwX3dyaXRlX2JpdHMoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLCB1MzIgbGFiZWwsIHU4IHZhbCkKK3sKKwl1OCByZWcsIG1hc2ssIHBvczsKKworCXJlZyA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIChsYWJlbCA+PiAxNikgJiAweGZmZmYpOworCWV4dHJhY3RfbWFza19wb3MobGFiZWwsICZtYXNrLCAmcG9zKTsKKworCXZhbCA9IG1hc2sgJiAodmFsIDw8IHBvcyk7CisKKwlyZWcgPSAocmVnICYgKH5tYXNrKSkgfCB2YWw7CisJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIChsYWJlbCA+PiAxNikgJiAweGZmZmYsIHJlZyk7CisKK30KKwordTggc3R2MDkwMF9nZXRfYml0cyhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsIHUzMiBsYWJlbCkKK3sKKwl1OCB2YWwgPSAweGZmOworCXU4IG1hc2ssIHBvczsKKworCWV4dHJhY3RfbWFza19wb3MobGFiZWwsICZtYXNrLCAmcG9zKTsKKworCXZhbCA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIGxhYmVsID4+IDE2KTsKKwl2YWwgPSAodmFsICYgbWFzaykgPj4gcG9zOworCisJcmV0dXJuIHZhbDsKK30KKworZW51bSBmZV9zdHYwOTAwX2Vycm9yIHN0djA5MDBfaW5pdGlhbGl6ZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMpCit7CisJczMyIGk7CisJZW51bSBmZV9zdHYwOTAwX2Vycm9yIGVycm9yOworCisJaWYgKGlfcGFyYW1zICE9IE5VTEwpIHsKKwkJaV9wYXJhbXMtPmNoaXBfaWQgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9NSUQpOworCQlpZiAoaV9wYXJhbXMtPmVycnMgPT0gU1RWMDkwMF9OT19FUlJPUikgeworCQkJLypTdGFydHVwIHNlcXVlbmNlKi8KKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4NWMpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHg1Yyk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE5SQ0ZHLCAweDZjKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTlJDRkcsIDB4NmYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0kyQ1JQVCwgMHgyNCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfSTJDUlBULCAweDI0KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9OQ09BUlNFLCAweDEzKTsKKwkJCW1zbGVlcCgzKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9JMkNDRkcsIDB4MDgpOworCisJCQlzd2l0Y2ggKGlfcGFyYW1zLT5jbGttb2RlKSB7CisJCQljYXNlIDA6CisJCQljYXNlIDI6CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1NZTlRDVFJMLCAweDIwCisJCQkJCQl8IGlfcGFyYW1zLT5jbGttb2RlKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogcHJlc2VydmUgU0VMT1NDSSBiaXQgKi8KKwkJCQlpID0gMHgwMiAmIHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1NZTlRDVFJMKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfU1lOVENUUkwsIDB4MjAgfCBpKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJbXNsZWVwKDMpOworCQkJZm9yIChpID0gMDsgaSA8IDE4MjsgaSsrKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBTVFYwOTAwX0luaXRWYWxbaV1bMF0sIFNUVjA5MDBfSW5pdFZhbFtpXVsxXSk7CisKKwkJCWlmIChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9NSUQpID49IDB4MjApIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfVFNHRU5FUkFMLCAweDBjKTsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFNUVjA5MDBfQ3V0MjBfQWRkT25WYWxbaV1bMF0sIFNUVjA5MDBfQ3V0MjBfQWRkT25WYWxbaV1bMV0pOworCQkJfQorCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRlNQWUNGRywgMHg2Yyk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRlNQWUNGRywgMHg2Yyk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfVFNUUkVTMCwgMHg4MCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfVFNUUkVTMCwgMHgwMCk7CisJCX0KKwkJZXJyb3IgPSBpX3BhcmFtcy0+ZXJyczsKKwl9IGVsc2UKKwkJZXJyb3IgPSBTVFYwOTAwX0lOVkFMSURfSEFORExFOworCisJcmV0dXJuIGVycm9yOworCit9CisKK3UzMiBzdHYwOTAwX2dldF9tY2xrX2ZyZXEoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLCB1MzIgZXh0X2NsaykKK3sKKwl1MzIgbWNsayA9IDkwMDAwMDAwLCBkaXYgPSAwLCBhZF9kaXYgPSAwOworCisJZGl2ID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfTV9ESVYpOworCWFkX2RpdiA9ICgoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfU0VMWDFSQVRJTykgPT0gMSkgPyA0IDogNik7CisKKwltY2xrID0gKGRpdiArIDEpICogZXh0X2NsayAvIGFkX2RpdjsKKworCWRwcmludGsoS0VSTl9JTkZPICIlczogQ2FsY3VsYXRlZCBNY2xrID0gJWRcbiIsIF9fZnVuY19fLCBtY2xrKTsKKworCXJldHVybiBtY2xrOworfQorCitlbnVtIGZlX3N0djA5MDBfZXJyb3Igc3R2MDkwMF9zZXRfbWNsayhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsIHUzMiBtY2xrKQoreworCWVudW0gZmVfc3R2MDkwMF9lcnJvciBlcnJvciA9IFNUVjA5MDBfTk9fRVJST1I7CisJdTMyIG1fZGl2LCBjbGtfc2VsOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzOiBNY2xrIHNldCB0byAlZCwgUXVhcnR6ID0gJWRcbiIsIF9fZnVuY19fLCBtY2xrLAorCQkJaV9wYXJhbXMtPnF1YXJ0eik7CisKKwlpZiAoaV9wYXJhbXMgPT0gTlVMTCkKKwkJZXJyb3IgPSBTVFYwOTAwX0lOVkFMSURfSEFORExFOworCWVsc2UgeworCQlpZiAoaV9wYXJhbXMtPmVycnMpCisJCQllcnJvciA9IFNUVjA5MDBfSTJDX0VSUk9SOworCQllbHNlIHsKKwkJCWNsa19zZWwgPSAoKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1NFTFgxUkFUSU8pID09IDEpID8gNCA6IDYpOworCQkJbV9kaXYgPSAoKGNsa19zZWwgKiBtY2xrKSAvIGlfcGFyYW1zLT5xdWFydHopIC0gMTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfTV9ESVYsIG1fZGl2KTsKKwkJCWlfcGFyYW1zLT5tY2xrID0gc3R2MDkwMF9nZXRfbWNsa19mcmVxKGlfcGFyYW1zLAorCQkJCQkJCWlfcGFyYW1zLT5xdWFydHopOworCisJCQkvKlNldCB0aGUgRGlzZXFDIGZyZXF1ZW5jeSB0byAyMktIeiAqLworCQkJLyoKKwkJCQlGb3JtdWxhOgorCQkJCURpc2VxQ19UWF9GcmVxPSBNYXN0ZXJDbG9jay8oMzIqRjIyVFhfUmVnKQorCQkJCURpc2VxQ19SWF9GcmVxPSBNYXN0ZXJDbG9jay8oMzIqRjIyUlhfUmVnKQorCQkJKi8KKwkJCW1fZGl2ID0gaV9wYXJhbXMtPm1jbGsgLyA3MDQwMDA7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRjIyVFgsIG1fZGl2KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9GMjJSWCwgbV9kaXYpOworCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRjIyVFgsIG1fZGl2KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9GMjJSWCwgbV9kaXYpOworCisJCQlpZiAoKGlfcGFyYW1zLT5lcnJzKSkKKwkJCQllcnJvciA9IFNUVjA5MDBfSTJDX0VSUk9SOworCQl9CisJfQorCisJcmV0dXJuIGVycm9yOworfQorCit1MzIgc3R2MDkwMF9nZXRfZXJyX2NvdW50KHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywgaW50IGNudHIsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJdTMyIGxzYiwgbXNiLCBoc2IsIGVycl92YWw7CisJczMyIGVycjFmaWVsZF9oc2IsIGVycjFmaWVsZF9tc2IsIGVycjFmaWVsZF9sc2I7CisJczMyIGVycjJmaWVsZF9oc2IsIGVycjJmaWVsZF9tc2IsIGVycjJmaWVsZF9sc2I7CisKKwlkbWRfcmVnKGVycjFmaWVsZF9oc2IsIEYwOTAwX1AxX0VSUl9DTlQxMiwgRjA5MDBfUDJfRVJSX0NOVDEyKTsKKwlkbWRfcmVnKGVycjFmaWVsZF9tc2IsIEYwOTAwX1AxX0VSUl9DTlQxMSwgRjA5MDBfUDJfRVJSX0NOVDExKTsKKwlkbWRfcmVnKGVycjFmaWVsZF9sc2IsIEYwOTAwX1AxX0VSUl9DTlQxMCwgRjA5MDBfUDJfRVJSX0NOVDEwKTsKKworCWRtZF9yZWcoZXJyMmZpZWxkX2hzYiwgRjA5MDBfUDFfRVJSX0NOVDIyLCBGMDkwMF9QMl9FUlJfQ05UMjIpOworCWRtZF9yZWcoZXJyMmZpZWxkX21zYiwgRjA5MDBfUDFfRVJSX0NOVDIxLCBGMDkwMF9QMl9FUlJfQ05UMjEpOworCWRtZF9yZWcoZXJyMmZpZWxkX2xzYiwgRjA5MDBfUDFfRVJSX0NOVDIwLCBGMDkwMF9QMl9FUlJfQ05UMjApOworCisJc3dpdGNoIChjbnRyKSB7CisJY2FzZSAwOgorCWRlZmF1bHQ6CisJCWhzYiA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGVycjFmaWVsZF9oc2IpOworCQltc2IgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBlcnIxZmllbGRfbXNiKTsKKwkJbHNiID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgZXJyMWZpZWxkX2xzYik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJaHNiID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgZXJyMmZpZWxkX2hzYik7CisJCW1zYiA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGVycjJmaWVsZF9tc2IpOworCQlsc2IgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBlcnIyZmllbGRfbHNiKTsKKwkJYnJlYWs7CisJfQorCisJZXJyX3ZhbCA9IChoc2IgPDwgMTYpICsgKG1zYiA8PCA4KSArIChsc2IpOworCisJcmV0dXJuIGVycl92YWw7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9pMmNfZ2F0ZV9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kID0gc3RhdGUtPmRlbW9kOworCisJdTMyIGZpMmM7CisKKwlkbWRfcmVnKGZpMmMsIEYwOTAwX1AxX0kyQ1RfT04sIEYwOTAwX1AyX0kyQ1RfT04pOworCWlmIChlbmFibGUpCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgZmkyYywgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3R2MDkwMF9zZXRfdHNfcGFyYWxsZWxfc2VyaWFsKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2Nsb2NrX3R5cGUgcGF0aDFfdHMsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9jbG9ja190eXBlIHBhdGgyX3RzKQoreworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQlzd2l0Y2ggKHBhdGgxX3RzKSB7CisJCWNhc2UgU1RWMDkwMF9QQVJBTExFTF9QVU5DVF9DTE9DSzoKKwkJY2FzZSBTVFYwOTAwX0RWQkNJX0NMT0NLOgorCQkJc3dpdGNoIChwYXRoMl90cykgeworCQkJY2FzZSBTVFYwOTAwX1NFUklBTF9QVU5DVF9DTE9DSzoKKwkJCWNhc2UgU1RWMDkwMF9TRVJJQUxfQ09OVF9DTE9DSzoKKwkJCWRlZmF1bHQ6CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1RTR0VORVJBTCwKKwkJCQkJCQkweDAwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1RWMDkwMF9QQVJBTExFTF9QVU5DVF9DTE9DSzoKKwkJCWNhc2UgU1RWMDkwMF9EVkJDSV9DTE9DSzoKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfVFNHRU5FUkFMLAorCQkJCQkJCTB4MDYpOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywKKwkJCQkJCUYwOTAwX1AxX1RTRklGT19NQU5TUEVFRCwgMyk7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLAorCQkJCQkJRjA5MDBfUDJfVFNGSUZPX01BTlNQRUVELCAwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywKKwkJCQkJCVIwOTAwX1AxX1RTU1BFRUQsIDB4MTQpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLAorCQkJCQkJUjA5MDBfUDJfVFNTUEVFRCwgMHgyOCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX1NFUklBTF9QVU5DVF9DTE9DSzoKKwkJY2FzZSBTVFYwOTAwX1NFUklBTF9DT05UX0NMT0NLOgorCQlkZWZhdWx0OgorCQkJc3dpdGNoIChwYXRoMl90cykgeworCQkJY2FzZSBTVFYwOTAwX1NFUklBTF9QVU5DVF9DTE9DSzoKKwkJCWNhc2UgU1RWMDkwMF9TRVJJQUxfQ09OVF9DTE9DSzoKKwkJCWRlZmF1bHQ6CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCQlSMDkwMF9UU0dFTkVSQUwsIDB4MEMpOworCQkJCWJyZWFrOworCQkJY2FzZSBTVFYwOTAwX1BBUkFMTEVMX1BVTkNUX0NMT0NLOgorCQkJY2FzZSBTVFYwOTAwX0RWQkNJX0NMT0NLOgorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLAorCQkJCQkJUjA5MDBfVFNHRU5FUkFMLCAweDBBKTsKKwkJCQlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IDB4MGFcbiIsIF9fZnVuY19fKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChwYXRoMV90cykgeworCQljYXNlIFNUVjA5MDBfUEFSQUxMRUxfUFVOQ1RfQ0xPQ0s6CisJCWNhc2UgU1RWMDkwMF9EVkJDSV9DTE9DSzoKKwkJCXN3aXRjaCAocGF0aDJfdHMpIHsKKwkJCWNhc2UgU1RWMDkwMF9TRVJJQUxfUFVOQ1RfQ0xPQ0s6CisJCQljYXNlIFNUVjA5MDBfU0VSSUFMX0NPTlRfQ0xPQ0s6CisJCQlkZWZhdWx0OgorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9UU0dFTkVSQUwxWCwKKwkJCQkJCQkweDEwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1RWMDkwMF9QQVJBTExFTF9QVU5DVF9DTE9DSzoKKwkJCWNhc2UgU1RWMDkwMF9EVkJDSV9DTE9DSzoKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfVFNHRU5FUkFMMVgsCisJCQkJCQkJMHgxNik7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLAorCQkJCQkJRjA5MDBfUDFfVFNGSUZPX01BTlNQRUVELCAzKTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsCisJCQkJCQlGMDkwMF9QMl9UU0ZJRk9fTUFOU1BFRUQsIDApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UU1NQRUVELAorCQkJCQkJCTB4MTQpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UU1NQRUVELAorCQkJCQkJCTB4MjgpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX1NFUklBTF9QVU5DVF9DTE9DSzoKKwkJY2FzZSBTVFYwOTAwX1NFUklBTF9DT05UX0NMT0NLOgorCQlkZWZhdWx0OgorCQkJc3dpdGNoIChwYXRoMl90cykgeworCQkJY2FzZSBTVFYwOTAwX1NFUklBTF9QVU5DVF9DTE9DSzoKKwkJCWNhc2UgU1RWMDkwMF9TRVJJQUxfQ09OVF9DTE9DSzoKKwkJCWRlZmF1bHQ6CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1RTR0VORVJBTDFYLAorCQkJCQkJCTB4MTQpOworCQkJCWJyZWFrOworCQkJY2FzZSBTVFYwOTAwX1BBUkFMTEVMX1BVTkNUX0NMT0NLOgorCQkJY2FzZSBTVFYwOTAwX0RWQkNJX0NMT0NLOgorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9UU0dFTkVSQUwxWCwKKwkJCQkJCQkweDEyKTsKKwkJCQlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IDB4MTJcbiIsIF9fZnVuY19fKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzd2l0Y2ggKHBhdGgxX3RzKSB7CisJY2FzZSBTVFYwOTAwX1BBUkFMTEVMX1BVTkNUX0NMT0NLOgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1RTRklGT19TRVJJQUwsIDB4MDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1RTRklGT19EVkJDSSwgMHgwMCk7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9EVkJDSV9DTE9DSzoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9UU0ZJRk9fU0VSSUFMLCAweDAwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9UU0ZJRk9fRFZCQ0ksIDB4MDEpOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfU0VSSUFMX1BVTkNUX0NMT0NLOgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1RTRklGT19TRVJJQUwsIDB4MDEpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1RTRklGT19EVkJDSSwgMHgwMCk7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9TRVJJQUxfQ09OVF9DTE9DSzoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9UU0ZJRk9fU0VSSUFMLCAweDAxKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9UU0ZJRk9fRFZCQ0ksIDB4MDEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKHBhdGgyX3RzKSB7CisJY2FzZSBTVFYwOTAwX1BBUkFMTEVMX1BVTkNUX0NMT0NLOgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1RTRklGT19TRVJJQUwsIDB4MDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1RTRklGT19EVkJDSSwgMHgwMCk7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9EVkJDSV9DTE9DSzoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9UU0ZJRk9fU0VSSUFMLCAweDAwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9UU0ZJRk9fRFZCQ0ksIDB4MDEpOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfU0VSSUFMX1BVTkNUX0NMT0NLOgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1RTRklGT19TRVJJQUwsIDB4MDEpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1RTRklGT19EVkJDSSwgMHgwMCk7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9TRVJJQUxfQ09OVF9DTE9DSzoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9UU0ZJRk9fU0VSSUFMLCAweDAxKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9UU0ZJRk9fRFZCQ0ksIDB4MDEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1JTVF9IV0FSRSwgMSk7CisJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9SU1RfSFdBUkUsIDApOworCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfUlNUX0hXQVJFLCAxKTsKKwlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1JTVF9IV0FSRSwgMCk7Cit9CisKK3ZvaWQgc3R2MDkwMF9zZXRfdHVuZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiBmcmVxdWVuY3ksCisJCQkJCQkJdTMyIGJhbmR3aWR0aCkKK3sKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyAqZnJvbnRlbmRfb3BzID0gTlVMTDsKKwlzdHJ1Y3QgZHZiX3R1bmVyX29wcyAqdHVuZXJfb3BzID0gTlVMTDsKKworCWlmICgmZmUtPm9wcykKKwkJZnJvbnRlbmRfb3BzID0gJmZlLT5vcHM7CisKKwlpZiAoJmZyb250ZW5kX29wcy0+dHVuZXJfb3BzKQorCQl0dW5lcl9vcHMgPSAmZnJvbnRlbmRfb3BzLT50dW5lcl9vcHM7CisKKwlpZiAodHVuZXJfb3BzLT5zZXRfZnJlcXVlbmN5KSB7CisJCWlmICgodHVuZXJfb3BzLT5zZXRfZnJlcXVlbmN5KGZlLCBmcmVxdWVuY3kpKSA8IDApCisJCQlkcHJpbnRrKCIlczogSW52YWxpZCBwYXJhbWV0ZXJcbiIsIF9fZnVuY19fKTsKKwkJZWxzZQorCQkJZHByaW50aygiJXM6IEZyZXF1ZW5jeT0lZFxuIiwgX19mdW5jX18sIGZyZXF1ZW5jeSk7CisKKwl9CisKKwlpZiAodHVuZXJfb3BzLT5zZXRfYmFuZHdpZHRoKSB7CisJCWlmICgodHVuZXJfb3BzLT5zZXRfYmFuZHdpZHRoKGZlLCBiYW5kd2lkdGgpKSA8IDApCisJCQlkcHJpbnRrKCIlczogSW52YWxpZCBwYXJhbWV0ZXJcbiIsIF9fZnVuY19fKTsKKwkJZWxzZQorCQkJZHByaW50aygiJXM6IEJhbmR3aWR0aD0lZFxuIiwgX19mdW5jX18sIGJhbmR3aWR0aCk7CisKKwl9Cit9CisKK3ZvaWQgc3R2MDkwMF9zZXRfYmFuZHdpZHRoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgYmFuZHdpZHRoKQoreworCXN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzICpmcm9udGVuZF9vcHMgPSBOVUxMOworCXN0cnVjdCBkdmJfdHVuZXJfb3BzICp0dW5lcl9vcHMgPSBOVUxMOworCisJaWYgKCZmZS0+b3BzKQorCQlmcm9udGVuZF9vcHMgPSAmZmUtPm9wczsKKworCWlmICgmZnJvbnRlbmRfb3BzLT50dW5lcl9vcHMpCisJCXR1bmVyX29wcyA9ICZmcm9udGVuZF9vcHMtPnR1bmVyX29wczsKKworCWlmICh0dW5lcl9vcHMtPnNldF9iYW5kd2lkdGgpIHsKKwkJaWYgKCh0dW5lcl9vcHMtPnNldF9iYW5kd2lkdGgoZmUsIGJhbmR3aWR0aCkpIDwgMCkKKwkJCWRwcmludGsoIiVzOiBJbnZhbGlkIHBhcmFtZXRlclxuIiwgX19mdW5jX18pOworCQllbHNlCisJCQlkcHJpbnRrKCIlczogQmFuZHdpZHRoPSVkXG4iLCBfX2Z1bmNfXywgYmFuZHdpZHRoKTsKKworCX0KK30KKworc3RhdGljIHMzMiBzdHYwOTAwX2dldF9yZl9sZXZlbChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJY29uc3Qgc3RydWN0IHN0djA5MDBfdGFibGUgKmxvb2t1cCwKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXMzMiBhZ2NfZ2FpbiA9IDAsCisJCWltaW4sCisJCWltYXgsCisJCWksCisJCXJmX2x2bCA9IDA7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmICgobG9va3VwICE9IE5VTEwpICYmIGxvb2t1cC0+c2l6ZSkgeworCQlzd2l0Y2ggKGRlbW9kKSB7CisJCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCQlkZWZhdWx0OgorCQkJYWdjX2dhaW4gPSBNQUtFV09SRChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9BR0NJUV9WQUxVRTEpLAorCQkJCQkJc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfQUdDSVFfVkFMVUUwKSk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCQlhZ2NfZ2FpbiA9IE1BS0VXT1JEKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0FHQ0lRX1ZBTFVFMSksCisJCQkJCQlzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9BR0NJUV9WQUxVRTApKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaW1pbiA9IDA7CisJCWltYXggPSBsb29rdXAtPnNpemUgLSAxOworCQlpZiAoSU5SQU5HRShsb29rdXAtPnRhYmxlW2ltaW5dLnJlZ3ZhbCwgYWdjX2dhaW4sIGxvb2t1cC0+dGFibGVbaW1heF0ucmVndmFsKSkgeworCQkJd2hpbGUgKChpbWF4IC0gaW1pbikgPiAxKSB7CisJCQkJaSA9IChpbWF4ICsgaW1pbikgPj4gMTsKKworCQkJCWlmIChJTlJBTkdFKGxvb2t1cC0+dGFibGVbaW1pbl0ucmVndmFsLCBhZ2NfZ2FpbiwgbG9va3VwLT50YWJsZVtpXS5yZWd2YWwpKQorCQkJCQlpbWF4ID0gaTsKKwkJCQllbHNlCisJCQkJCWltaW4gPSBpOworCQkJfQorCisJCQlyZl9sdmwgPSAoKChzMzIpYWdjX2dhaW4gLSBsb29rdXAtPnRhYmxlW2ltaW5dLnJlZ3ZhbCkKKwkJCQkJKiAobG9va3VwLT50YWJsZVtpbWF4XS5yZWFsdmFsIC0gbG9va3VwLT50YWJsZVtpbWluXS5yZWFsdmFsKQorCQkJCQkvIChsb29rdXAtPnRhYmxlW2ltYXhdLnJlZ3ZhbCAtIGxvb2t1cC0+dGFibGVbaW1pbl0ucmVndmFsKSkKKwkJCQkJKyBsb29rdXAtPnRhYmxlW2ltaW5dLnJlYWx2YWw7CisJCX0gZWxzZSBpZiAoYWdjX2dhaW4gPiBsb29rdXAtPnRhYmxlWzBdLnJlZ3ZhbCkKKwkJCXJmX2x2bCA9IDU7CisJCWVsc2UgaWYgKGFnY19nYWluIDwgbG9va3VwLT50YWJsZVtsb29rdXAtPnNpemUtMV0ucmVndmFsKQorCQkJcmZfbHZsID0gLTEwMDsKKworCX0KKworCWRwcmludGsoS0VSTl9JTkZPICIlczogUkZMZXZlbCA9ICVkXG4iLCBfX2Z1bmNfXywgcmZfbHZsKTsKKworCXJldHVybiByZl9sdmw7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzdHJlbmd0aCkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50ZXJuYWwgPSBzdGF0ZS0+aW50ZXJuYWw7CisJczMyIHJmbGV2ZWwgPSBzdHYwOTAwX2dldF9yZl9sZXZlbChpbnRlcm5hbCwgJnN0djA5MDBfcmYsCisJCQkJCQkJCXN0YXRlLT5kZW1vZCk7CisKKwkqc3RyZW5ndGggPSAocmZsZXZlbCArIDEwMCkgKiAoMTYzODMgLyAxMDUpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHMzMiBzdHYwOTAwX2NhcnJfZ2V0X3F1YWxpdHkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCWNvbnN0IHN0cnVjdCBzdHYwOTAwX3RhYmxlICpsb29rdXApCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QgPSBzdGF0ZS0+ZGVtb2Q7CisKKwlzMzIgY19uID0gLTEwMCwKKwkJcmVndmFsLCBpbWluLCBpbWF4LAorCQlpLAorCQlsb2NrX2ZsYWdfZmllbGQsCisJCW5vaXNlX2ZpZWxkMSwKKwkJbm9pc2VfZmllbGQwOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlkbWRfcmVnKGxvY2tfZmxhZ19maWVsZCwgRjA5MDBfUDFfTE9DS19ERUZJTklUSUYsCisJCQkJCUYwOTAwX1AyX0xPQ0tfREVGSU5JVElGKTsKKwlpZiAoc3R2MDkwMF9nZXRfc3RhbmRhcmQoZmUsIGRlbW9kKSA9PSBTVFYwOTAwX0RWQlMyX1NUQU5EQVJEKSB7CisJCWRtZF9yZWcobm9pc2VfZmllbGQxLCBGMDkwMF9QMV9OT1NQTEhUX05PUk1FRDEsCisJCQkJCUYwOTAwX1AyX05PU1BMSFRfTk9STUVEMSk7CisJCWRtZF9yZWcobm9pc2VfZmllbGQwLCBGMDkwMF9QMV9OT1NQTEhUX05PUk1FRDAsCisJCQkJCUYwOTAwX1AyX05PU1BMSFRfTk9STUVEMCk7CisJfSBlbHNlIHsKKwkJZG1kX3JlZyhub2lzZV9maWVsZDEsIEYwOTAwX1AxX05PU0RBVEFUX05PUk1FRDEsCisJCQkJCUYwOTAwX1AyX05PU0RBVEFUX05PUk1FRDEpOworCQlkbWRfcmVnKG5vaXNlX2ZpZWxkMCwgRjA5MDBfUDFfTk9TREFUQVRfTk9STUVEMCwKKwkJCQkJRjA5MDBfUDJfTk9TREFUQVRfTk9STUVEMCk7CisJfQorCisJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGxvY2tfZmxhZ19maWVsZCkpIHsKKwkJaWYgKChsb29rdXAgIT0gTlVMTCkgJiYgbG9va3VwLT5zaXplKSB7CisJCQlyZWd2YWwgPSAwOworCQkJbXNsZWVwKDUpOworCQkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJCQlyZWd2YWwgKz0gTUFLRVdPUkQoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywKKwkJCQkJCQkJbm9pc2VfZmllbGQxKSwKKwkJCQkJCXN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsCisJCQkJCQkJCW5vaXNlX2ZpZWxkMCkpOworCQkJCW1zbGVlcCgxKTsKKwkJCX0KKworCQkJcmVndmFsIC89IDE2OworCQkJaW1pbiA9IDA7CisJCQlpbWF4ID0gbG9va3VwLT5zaXplIC0gMTsKKwkJCWlmIChJTlJBTkdFKGxvb2t1cC0+dGFibGVbaW1pbl0ucmVndmFsLAorCQkJCQlyZWd2YWwsCisJCQkJCWxvb2t1cC0+dGFibGVbaW1heF0ucmVndmFsKSkgeworCQkJCXdoaWxlICgoaW1heCAtIGltaW4pID4gMSkgeworCQkJCQlpID0gKGltYXggKyBpbWluKSA+PiAxOworCQkJCQlpZiAoSU5SQU5HRShsb29rdXAtPnRhYmxlW2ltaW5dLnJlZ3ZhbCwKKwkJCQkJCSAgICByZWd2YWwsCisJCQkJCQkgICAgbG9va3VwLT50YWJsZVtpXS5yZWd2YWwpKQorCQkJCQkJaW1heCA9IGk7CisJCQkJCWVsc2UKKwkJCQkJCWltaW4gPSBpOworCQkJCX0KKworCQkJCWNfbiA9ICgocmVndmFsIC0gbG9va3VwLT50YWJsZVtpbWluXS5yZWd2YWwpCisJCQkJCQkqIChsb29rdXAtPnRhYmxlW2ltYXhdLnJlYWx2YWwKKwkJCQkJCS0gbG9va3VwLT50YWJsZVtpbWluXS5yZWFsdmFsKQorCQkJCQkJLyAobG9va3VwLT50YWJsZVtpbWF4XS5yZWd2YWwKKwkJCQkJCS0gbG9va3VwLT50YWJsZVtpbWluXS5yZWd2YWwpKQorCQkJCQkJKyBsb29rdXAtPnRhYmxlW2ltaW5dLnJlYWx2YWw7CisJCQl9IGVsc2UgaWYgKHJlZ3ZhbCA8IGxvb2t1cC0+dGFibGVbaW1pbl0ucmVndmFsKQorCQkJCWNfbiA9IDEwMDA7CisJCX0KKwl9CisKKwlyZXR1cm4gY19uOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQoreworCSpzbnIgPSBzdHYwOTAwX2NhcnJfZ2V0X3F1YWxpdHkoZmUsCisJCQkoY29uc3Qgc3RydWN0IHN0djA5MDBfdGFibGUgKikmc3R2MDkwMF9zMl9jbik7CisJKnNuciArPSAzMDsKKwkqc25yICo9ICgxNjM4MyAvIDEwMzApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgc3R2MDkwMF9nZXRfYmVyKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXUzMiBiZXIgPSAxMDAwMDAwMCwgaTsKKwlzMzIgZG1kX3N0YXRlX3JlZzsKKwlzMzIgZGVtb2Rfc3RhdGU7CisJczMyIHZzdGF0dXNfcmVnOworCXMzMiBwcnZpdF9maWVsZDsKKwlzMzIgcGRlbF9zdGF0dXNfcmVnOworCXMzMiBwZGVsX2xvY2tfZmllbGQ7CisKKwlkbWRfcmVnKGRtZF9zdGF0ZV9yZWcsIEYwOTAwX1AxX0hFQURFUl9NT0RFLCBGMDkwMF9QMl9IRUFERVJfTU9ERSk7CisJZG1kX3JlZyh2c3RhdHVzX3JlZywgUjA5MDBfUDFfVlNUQVRVU1ZJVCwgUjA5MDBfUDJfVlNUQVRVU1ZJVCk7CisJZG1kX3JlZyhwcnZpdF9maWVsZCwgRjA5MDBfUDFfUFJGVklULCBGMDkwMF9QMl9QUkZWSVQpOworCWRtZF9yZWcocGRlbF9zdGF0dXNfcmVnLCBSMDkwMF9QMV9QREVMU1RBVFVTMSwgUjA5MDBfUDJfUERFTFNUQVRVUzEpOworCWRtZF9yZWcocGRlbF9sb2NrX2ZpZWxkLCBGMDkwMF9QMV9QS1RERUxJTl9MT0NLLAorCQkJCUYwOTAwX1AyX1BLVERFTElOX0xPQ0spOworCisJZGVtb2Rfc3RhdGUgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBkbWRfc3RhdGVfcmVnKTsKKworCXN3aXRjaCAoZGVtb2Rfc3RhdGUpIHsKKwljYXNlIFNUVjA5MDBfU0VBUkNIOgorCWNhc2UgU1RWMDkwMF9QTEhfREVURUNURUQ6CisJZGVmYXVsdDoKKwkJYmVyID0gMTAwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9EVkJTX0ZPVU5EOgorCQliZXIgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCQltc2xlZXAoNSk7CisJCQliZXIgKz0gc3R2MDkwMF9nZXRfZXJyX2NvdW50KGlfcGFyYW1zLCAwLCBkZW1vZCk7CisJCX0KKworCQliZXIgLz0gNTsKKwkJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHBydml0X2ZpZWxkKSkgeworCQkJYmVyICo9IDk3NjY7CisJCQliZXIgPSBiZXIgPj4gMTM7CisJCX0KKworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfRFZCUzJfRk9VTkQ6CisJCWJlciA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJCW1zbGVlcCg1KTsKKwkJCWJlciArPSBzdHYwOTAwX2dldF9lcnJfY291bnQoaV9wYXJhbXMsIDAsIGRlbW9kKTsKKwkJfQorCisJCWJlciAvPSA1OworCQlpZiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgcGRlbF9sb2NrX2ZpZWxkKSkgeworCQkJYmVyICo9IDk3NjY7CisJCQliZXIgPSBiZXIgPj4gMTM7CisJCX0KKworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gYmVyOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmVyKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRlcm5hbCA9IHN0YXRlLT5pbnRlcm5hbDsKKworCSpiZXIgPSBzdHYwOTAwX2dldF9iZXIoaW50ZXJuYWwsIHN0YXRlLT5kZW1vZCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHN0djA5MDBfZ2V0X2RlbW9kX2xvY2soc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCwgczMyIHRpbWVfb3V0KQoreworCXMzMiB0aW1lciA9IDAsCisJCWxvY2sgPSAwLAorCQloZWFkZXJfZmllbGQsCisJCWxvY2tfZmllbGQ7CisKKwllbnVtIGZlX3N0djA5MDBfc2VhcmNoX3N0YXRlCWRtZF9zdGF0ZTsKKworCWRtZF9yZWcoaGVhZGVyX2ZpZWxkLCBGMDkwMF9QMV9IRUFERVJfTU9ERSwgRjA5MDBfUDJfSEVBREVSX01PREUpOworCWRtZF9yZWcobG9ja19maWVsZCwgRjA5MDBfUDFfTE9DS19ERUZJTklUSUYsIEYwOTAwX1AyX0xPQ0tfREVGSU5JVElGKTsKKwl3aGlsZSAoKHRpbWVyIDwgdGltZV9vdXQpICYmIChsb2NrID09IDApKSB7CisJCWRtZF9zdGF0ZSA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGhlYWRlcl9maWVsZCk7CisJCWRwcmludGsoIkRlbW9kIFN0YXRlID0gJWRcbiIsIGRtZF9zdGF0ZSk7CisJCXN3aXRjaCAoZG1kX3N0YXRlKSB7CisJCWNhc2UgU1RWMDkwMF9TRUFSQ0g6CisJCWNhc2UgU1RWMDkwMF9QTEhfREVURUNURUQ6CisJCWRlZmF1bHQ6CisJCQlsb2NrID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRFZCUzJfRk9VTkQ6CisJCWNhc2UgU1RWMDkwMF9EVkJTX0ZPVU5EOgorCQkJbG9jayA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGxvY2tfZmllbGQpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAobG9jayA9PSAwKQorCQkJbXNsZWVwKDEwKTsKKworCQl0aW1lciArPSAxMDsKKwl9CisKKwlpZiAobG9jaykKKwkJZHByaW50aygiREVNT0QgTE9DSyBPS1xuIik7CisJZWxzZQorCQlkcHJpbnRrKCJERU1PRCBMT0NLIEZBSUxcbiIpOworCisJcmV0dXJuIGxvY2s7Cit9CisKK3ZvaWQgc3R2MDkwMF9zdG9wX2FsbF9zMl9tb2Rjb2Qoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIHJlZ2ZsaXN0LAorCWk7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCWRtZF9yZWcocmVnZmxpc3QsIFIwOTAwX1AxX01PRENPRExTVDAsIFIwOTAwX1AyX01PRENPRExTVDApOworCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCByZWdmbGlzdCArIGksIDB4ZmYpOworfQorCit2b2lkIHN0djA5MDBfYWN0aXZhdGVfczJfbW9kY29kZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwl1MzIgbWF0eXBlLAorCW1vZF9jb2RlLAorCWZtb2QsCisJcmVnX2luZGV4LAorCWZpZWxkX2luZGV4OworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPD0gMHgxMSkgeworCQltc2xlZXAoNSk7CisKKwkJc3dpdGNoIChkZW1vZCkgeworCQljYXNlIFNUVjA5MDBfREVNT0RfMToKKwkJZGVmYXVsdDoKKwkJCW1vZF9jb2RlID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywKKwkJCQkJCQlSMDkwMF9QMV9QTEhNT0RDT0QpOworCQkJbWF0eXBlID0gbW9kX2NvZGUgJiAweDM7CisJCQltb2RfY29kZSA9IChtb2RfY29kZSAmIDB4N2YpID4+IDI7CisKKwkJCXJlZ19pbmRleCA9IFIwOTAwX1AxX01PRENPRExTVEYgLSBtb2RfY29kZSAvIDI7CisJCQlmaWVsZF9pbmRleCA9IG1vZF9jb2RlICUgMjsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJCW1vZF9jb2RlID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywKKwkJCQkJCQlSMDkwMF9QMl9QTEhNT0RDT0QpOworCQkJbWF0eXBlID0gbW9kX2NvZGUgJiAweDM7CisJCQltb2RfY29kZSA9IChtb2RfY29kZSAmIDB4N2YpID4+IDI7CisKKwkJCXJlZ19pbmRleCA9IFIwOTAwX1AyX01PRENPRExTVEYgLSBtb2RfY29kZSAvIDI7CisJCQlmaWVsZF9pbmRleCA9IG1vZF9jb2RlICUgMjsKKwkJCWJyZWFrOworCQl9CisKKworCQlzd2l0Y2ggKG1hdHlwZSkgeworCQljYXNlIDA6CisJCWRlZmF1bHQ6CisJCQlmbW9kID0gMTQ7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZm1vZCA9IDEzOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWZtb2QgPSAxMTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlmbW9kID0gNzsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKChJTlJBTkdFKFNUVjA5MDBfUVBTS18xMiwgbW9kX2NvZGUsIFNUVjA5MDBfOFBTS185MTApKQorCQkJCQkJCSYmIChtYXR5cGUgPD0gMSkpIHsKKwkJCWlmIChmaWVsZF9pbmRleCA9PSAwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCByZWdfaW5kZXgsCisJCQkJCQkJMHhmMCB8IGZtb2QpOworCQkJZWxzZQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCByZWdfaW5kZXgsCisJCQkJCQkJKGZtb2QgPDwgNCkgfCAweGYpOworCQl9CisJfSBlbHNlIGlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDEyKSB7CisJCXN3aXRjaCAoZGVtb2QpIHsKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJCWRlZmF1bHQ6CisJCQlmb3IgKHJlZ19pbmRleCA9IDA7IHJlZ19pbmRleCA8IDc7IHJlZ19pbmRleCsrKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9NT0RDT0RMU1QwICsgcmVnX2luZGV4LCAweGZmKTsKKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX01PRENPRExTVEUsIDB4ZmYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX01PRENPRExTVEYsIDB4Y2YpOworCQkJZm9yIChyZWdfaW5kZXggPSAwOyByZWdfaW5kZXggPCA4OyByZWdfaW5kZXgrKykKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfTU9EQ09ETFNUNyArIHJlZ19pbmRleCwgMHhjYyk7CisKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJCWZvciAocmVnX2luZGV4ID0gMDsgcmVnX2luZGV4IDwgNzsgcmVnX2luZGV4KyspCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX01PRENPRExTVDAgKyByZWdfaW5kZXgsIDB4ZmYpOworCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfTU9EQ09ETFNURSwgMHhmZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfTU9EQ09ETFNURiwgMHhjZik7CisJCQlmb3IgKHJlZ19pbmRleCA9IDA7IHJlZ19pbmRleCA8IDg7IHJlZ19pbmRleCsrKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9NT0RDT0RMU1Q3ICsgcmVnX2luZGV4LCAweGNjKTsKKworCQkJYnJlYWs7CisJCX0KKworCX0KK30KKwordm9pZCBzdHYwOTAwX2FjdGl2YXRlX3MyX21vZGNvZGVfc2luZ2xlKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwl1MzIgcmVnX2luZGV4OworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX01PRENPRExTVDAsIDB4ZmYpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfTU9EQ09ETFNUMSwgMHhmMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9NT0RDT0RMU1RGLCAweDBmKTsKKwkJZm9yIChyZWdfaW5kZXggPSAwOyByZWdfaW5kZXggPCAxMzsgcmVnX2luZGV4KyspCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywKKwkJCQkJUjA5MDBfUDFfTU9EQ09ETFNUMiArIHJlZ19pbmRleCwgMCk7CisKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9NT0RDT0RMU1QwLCAweGZmKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX01PRENPRExTVDEsIDB4ZjApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfTU9EQ09ETFNURiwgMHgwZik7CisJCWZvciAocmVnX2luZGV4ID0gMDsgcmVnX2luZGV4IDwgMTM7IHJlZ19pbmRleCsrKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCVIwOTAwX1AyX01PRENPRExTVDIgKyByZWdfaW5kZXgsIDApOworCisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGVudW0gZHZiZmVfYWxnbyBzdHYwOTAwX2Zyb250ZW5kX2FsZ28oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJcmV0dXJuIERWQkZFX0FMR09fQ1VTVE9NOworfQorCitzdGF0aWMgaW50IHN0YjA5MDBfc2V0X3Byb3BlcnR5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCXN0cnVjdCBkdHZfcHJvcGVydHkgKnR2cCkKK3sKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXMoLi4pXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGIwOTAwX2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQlzdHJ1Y3QgZHR2X3Byb3BlcnR5ICp0dnApCit7CisJZHByaW50ayhLRVJOX0lORk8gIiVzKC4uKVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc3R2MDkwMF9zdGFydF9zZWFyY2goc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9JMkNfREVNT0RfTU9ERSwgMHgxZik7CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID09IDB4MTApCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ09SUkVMRVhQLCAweGFhKTsKKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPCAweDIwKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkhEUiwgMHg1NSk7CisKKwkJaWYgKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlIDw9IDUwMDAwMDApIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJDRkcsIDB4NDQpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUlVQMSwgMHgwZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSVVAwLCAweGZmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJMT1cxLCAweGYwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJMT1cwLCAweDAwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9SVENTMiwgMHg2OCk7CisJCX0gZWxzZSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSQ0ZHLCAweGM0KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9SVENTMiwgMHg0NCk7CisJCX0KKworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDEsIDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDAsIDApOworCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRVFVQUxDRkcsIDB4NDEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0ZGRUNGRywgMHg0MSk7CisKKwkJCWlmICgoaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZCA9PSBTVFYwOTAwX1NFQVJDSF9EVkJTMSkgfHwgKGlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQgPT0gU1RWMDkwMF9TRUFSQ0hfRFNTKSB8fCAoaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZCA9PSBTVFYwOTAwX0FVVE9fU0VBUkNIKSkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9WSVRTQ0FMRSwgMHg4Mik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1ZBVlNSVklULCAweDApOworCQkJfQorCQl9CisKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUlNURVAsIDB4MDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HVEhSSVNFLCAweGUwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR1RIRkFMTCwgMHhjMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfU0NBTl9FTkFCTEUsIDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0NGUl9BVVRPU0NBTiwgMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfUzFTMl9TRVFVRU5USUFMLCAwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1JUQywgMHg4OCk7CisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUgPCAyMDAwMDAwKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsIDB4MzkpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJIRFIsIDB4NDApOworCQkJfQorCisJCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUgPCAxMDAwMDAwMCkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLCAweDRjKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSSERSLCAweDIwKTsKKwkJCX0gZWxzZSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsIDB4NGIpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJIRFIsIDB4MjApOworCQkJfQorCisJCX0gZWxzZSB7CisJCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUgPCAxMDAwMDAwMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwgMHhlZik7CisJCQllbHNlCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsIDB4ZWQpOworCQl9CisKKwkJc3dpdGNoIChpX3BhcmFtcy0+ZG1kMV9zcmNoX2FsZ28pIHsKKwkJY2FzZSBTVFYwOTAwX1dBUk1fU1RBUlQ6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDFmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MTgpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9DT0xEX1NUQVJUOgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDE1KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9JMkNfREVNT0RfTU9ERSwgMHgxZik7CisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA9PSAweDEwKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NPUlJFTEVYUCwgMHhhYSk7CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkIDwgMHgyMCkKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJIRFIsIDB4NTUpOworCisJCWlmIChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSA8PSA1MDAwMDAwKSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSQ0ZHLCAweDQ0KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJVUDEsIDB4MGYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUlVQMCwgMHhmZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSTE9XMSwgMHhmMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSTE9XMCwgMHgwMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfUlRDUzIsIDB4NjgpOworCQl9IGVsc2UgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkNGRywgMHhjNCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfUlRDUzIsIDB4NDQpOworCQl9CisKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQxLCAwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQwLCAwKTsKKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0VRVUFMQ0ZHLCAweDQxKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9GRkVDRkcsIDB4NDEpOworCQkJaWYgKChpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCA9PSBTVFYwOTAwX1NFQVJDSF9EVkJTMSkgfHwgKGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkID09IFNUVjA5MDBfU0VBUkNIX0RTUykgfHwgKGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkID09IFNUVjA5MDBfQVVUT19TRUFSQ0gpKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1ZJVFNDQUxFLCAweDgyKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVkFWU1JWSVQsIDB4MCk7CisJCQl9CisJCX0KKworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSU1RFUCwgMHgwMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdUSFJJU0UsIDB4ZTApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HVEhGQUxMLCAweGMwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9TQ0FOX0VOQUJMRSwgMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfQ0ZSX0FVVE9TQ0FOLCAwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9TMVMyX1NFUVVFTlRJQUwsIDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfUlRDLCAweDg4KTsKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSA8IDIwMDAwMDApIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwgMHgzOSk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkhEUiwgMHg0MCk7CisJCQl9CisKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSA8IDEwMDAwMDAwKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsIDB4NGMpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJIRFIsIDB4MjApOworCQkJfSBlbHNlIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwgMHg0Yik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkhEUiwgMHgyMCk7CisJCQl9CisKKwkJfSBlbHNlIHsKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSA8IDEwMDAwMDAwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRLCAweGVmKTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwgMHhlZCk7CisJCX0KKworCQlzd2l0Y2ggKGlfcGFyYW1zLT5kbWQyX3NyY2hfYWxnbykgeworCQljYXNlIFNUVjA5MDBfV0FSTV9TVEFSVDoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MWYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxOCk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0NPTERfU1RBUlQ6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDFmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MTUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWJyZWFrOworCX0KK30KKwordTggc3R2MDkwMF9nZXRfb3B0aW1fY2Fycl9sb29wKHMzMiBzcmF0ZSwgZW51bSBmZV9zdHYwOTAwX21vZGNvZGUgbW9kY29kZSwKKwkJCQkJCQlzMzIgcGlsb3QsIHU4IGNoaXBfaWQpCit7CisJdTggYWNsY192YWx1ZSA9IDB4Mjk7CisJczMyCWk7CisJY29uc3Qgc3RydWN0IHN0djA5MDBfY2FyX2xvb3Bfb3B0aW0gKmNhcl9sb29wX3MyOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoY2hpcF9pZCA8PSAweDEyKQorCQljYXJfbG9vcF9zMiA9IEZFX1NUVjA5MDBfUzJDYXJMb29wOworCWVsc2UgaWYgKGNoaXBfaWQgPT0gMHgyMCkKKwkJY2FyX2xvb3BfczIgPSBGRV9TVFYwOTAwX1MyQ2FyTG9vcEN1dDIwOworCWVsc2UKKwkJY2FyX2xvb3BfczIgPSBGRV9TVFYwOTAwX1MyQ2FyTG9vcDsKKworCWlmIChtb2Rjb2RlIDwgU1RWMDkwMF9RUFNLXzEyKSB7CisJCWkgPSAwOworCQl3aGlsZSAoKGkgPCAzKSAmJiAobW9kY29kZSAhPSBGRV9TVFYwOTAwX1MyTG93UVBDYXJMb29wQ3V0MjBbaV0ubW9kY29kZSkpCisJCQlpKys7CisKKwkJaWYgKGkgPj0gMykKKwkJCWkgPSAyOworCX0gZWxzZSB7CisJCWkgPSAwOworCQl3aGlsZSAoKGkgPCAxNCkgJiYgKG1vZGNvZGUgIT0gY2FyX2xvb3BfczJbaV0ubW9kY29kZSkpCisJCQlpKys7CisKKwkJaWYgKGkgPj0gMTQpIHsKKwkJCWkgPSAwOworCQkJd2hpbGUgKChpIDwgMTEpICYmIChtb2Rjb2RlICE9IEZFX1NUVjA5MDBfUzJBUFNLQ2FyTG9vcEN1dDIwW2ldLm1vZGNvZGUpKQorCQkJCWkrKzsKKworCQkJaWYgKGkgPj0gMTEpCisJCQkJaSA9IDEwOworCQl9CisJfQorCisJaWYgKG1vZGNvZGUgPD0gU1RWMDkwMF9RUFNLXzI1KSB7CisJCWlmIChwaWxvdCkgeworCQkJaWYgKHNyYXRlIDw9IDMwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJMb3dRUENhckxvb3BDdXQyMFtpXS5jYXJfbG9vcF9waWxvdHNfb25fMjsKKwkJCWVsc2UgaWYgKHNyYXRlIDw9IDcwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJMb3dRUENhckxvb3BDdXQyMFtpXS5jYXJfbG9vcF9waWxvdHNfb25fNTsKKwkJCWVsc2UgaWYgKHNyYXRlIDw9IDE1MDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyTG93UVBDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzEwOworCQkJZWxzZSBpZiAoc3JhdGUgPD0gMjUwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJMb3dRUENhckxvb3BDdXQyMFtpXS5jYXJfbG9vcF9waWxvdHNfb25fMjA7CisJCQllbHNlCisJCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJMb3dRUENhckxvb3BDdXQyMFtpXS5jYXJfbG9vcF9waWxvdHNfb25fMzA7CisJCX0gZWxzZSB7CisJCQlpZiAoc3JhdGUgPD0gMzAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkxvd1FQQ2FyTG9vcEN1dDIwW2ldLmNhcl9sb29wX3BpbG90c19vZmZfMjsKKwkJCWVsc2UgaWYgKHNyYXRlIDw9IDcwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJMb3dRUENhckxvb3BDdXQyMFtpXS5jYXJfbG9vcF9waWxvdHNfb2ZmXzU7CisJCQllbHNlIGlmIChzcmF0ZSA8PSAxNTAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkxvd1FQQ2FyTG9vcEN1dDIwW2ldLmNhcl9sb29wX3BpbG90c19vZmZfMTA7CisJCQllbHNlIGlmIChzcmF0ZSA8PSAyNTAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkxvd1FQQ2FyTG9vcEN1dDIwW2ldLmNhcl9sb29wX3BpbG90c19vZmZfMjA7CisJCQllbHNlCisJCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJMb3dRUENhckxvb3BDdXQyMFtpXS5jYXJfbG9vcF9waWxvdHNfb2ZmXzMwOworCQl9CisKKwl9IGVsc2UgaWYgKG1vZGNvZGUgPD0gU1RWMDkwMF84UFNLXzkxMCkgeworCQlpZiAocGlsb3QpIHsKKwkJCWlmIChzcmF0ZSA8PSAzMDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBjYXJfbG9vcF9zMltpXS5jYXJfbG9vcF9waWxvdHNfb25fMjsKKwkJCWVsc2UgaWYgKHNyYXRlIDw9IDcwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IGNhcl9sb29wX3MyW2ldLmNhcl9sb29wX3BpbG90c19vbl81OworCQkJZWxzZSBpZiAoc3JhdGUgPD0gMTUwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IGNhcl9sb29wX3MyW2ldLmNhcl9sb29wX3BpbG90c19vbl8xMDsKKwkJCWVsc2UgaWYgKHNyYXRlIDw9IDI1MDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBjYXJfbG9vcF9zMltpXS5jYXJfbG9vcF9waWxvdHNfb25fMjA7CisJCQllbHNlCisJCQkJYWNsY192YWx1ZSA9IGNhcl9sb29wX3MyW2ldLmNhcl9sb29wX3BpbG90c19vbl8zMDsKKwkJfSBlbHNlIHsKKwkJCWlmIChzcmF0ZSA8PSAzMDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBjYXJfbG9vcF9zMltpXS5jYXJfbG9vcF9waWxvdHNfb2ZmXzI7CisJCQllbHNlIGlmIChzcmF0ZSA8PSA3MDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBjYXJfbG9vcF9zMltpXS5jYXJfbG9vcF9waWxvdHNfb2ZmXzU7CisJCQllbHNlIGlmIChzcmF0ZSA8PSAxNTAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gY2FyX2xvb3BfczJbaV0uY2FyX2xvb3BfcGlsb3RzX29mZl8xMDsKKwkJCWVsc2UgaWYgKHNyYXRlIDw9IDI1MDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBjYXJfbG9vcF9zMltpXS5jYXJfbG9vcF9waWxvdHNfb2ZmXzIwOworCQkJZWxzZQorCQkJCWFjbGNfdmFsdWUgPSBjYXJfbG9vcF9zMltpXS5jYXJfbG9vcF9waWxvdHNfb2ZmXzMwOworCQl9CisKKwl9IGVsc2UgeworCQlpZiAoc3JhdGUgPD0gMzAwMDAwMCkKKwkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyQVBTS0Nhckxvb3BDdXQyMFtpXS5jYXJfbG9vcF9waWxvdHNfb25fMjsKKwkJZWxzZSBpZiAoc3JhdGUgPD0gNzAwMDAwMCkKKwkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyQVBTS0Nhckxvb3BDdXQyMFtpXS5jYXJfbG9vcF9waWxvdHNfb25fNTsKKwkJZWxzZSBpZiAoc3JhdGUgPD0gMTUwMDAwMDApCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkFQU0tDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzEwOworCQllbHNlIGlmIChzcmF0ZSA8PSAyNTAwMDAwMCkKKwkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyQVBTS0Nhckxvb3BDdXQyMFtpXS5jYXJfbG9vcF9waWxvdHNfb25fMjA7CisJCWVsc2UKKwkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyQVBTS0Nhckxvb3BDdXQyMFtpXS5jYXJfbG9vcF9waWxvdHNfb25fMzA7CisJfQorCisJcmV0dXJuIGFjbGNfdmFsdWU7Cit9CisKK3U4IHN0djA5MDBfZ2V0X29wdGltX3Nob3J0X2NhcnJfbG9vcChzMzIgc3JhdGUsIGVudW0gZmVfc3R2MDkwMF9tb2R1bGF0aW9uIG1vZHVsYXRpb24sIHU4IGNoaXBfaWQpCit7CisJczMyIG1vZF9pbmRleCA9IDA7CisKKwl1OCBhY2xjX3ZhbHVlID0gMHgwYjsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJc3dpdGNoIChtb2R1bGF0aW9uKSB7CisJY2FzZSBTVFYwOTAwX1FQU0s6CisJZGVmYXVsdDoKKwkJbW9kX2luZGV4ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwXzhQU0s6CisJCW1vZF9pbmRleCA9IDE7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF8xNkFQU0s6CisJCW1vZF9pbmRleCA9IDI7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF8zMkFQU0s6CisJCW1vZF9pbmRleCA9IDM7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoY2hpcF9pZCkgeworCWNhc2UgMHgyMDoKKwkJaWYgKHNyYXRlIDw9IDMwMDAwMDApCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMlNob3J0Q2FyTG9vcFttb2RfaW5kZXhdLmNhcl9sb29wX2N1dDIwXzI7CisJCWVsc2UgaWYgKHNyYXRlIDw9IDcwMDAwMDApCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMlNob3J0Q2FyTG9vcFttb2RfaW5kZXhdLmNhcl9sb29wX2N1dDIwXzU7CisJCWVsc2UgaWYgKHNyYXRlIDw9IDE1MDAwMDAwKQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJTaG9ydENhckxvb3BbbW9kX2luZGV4XS5jYXJfbG9vcF9jdXQyMF8xMDsKKwkJZWxzZSBpZiAoc3JhdGUgPD0gMjUwMDAwMDApCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMlNob3J0Q2FyTG9vcFttb2RfaW5kZXhdLmNhcl9sb29wX2N1dDIwXzIwOworCQllbHNlCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMlNob3J0Q2FyTG9vcFttb2RfaW5kZXhdLmNhcl9sb29wX2N1dDIwXzMwOworCisJCWJyZWFrOworCWNhc2UgMHgxMjoKKwlkZWZhdWx0OgorCQlpZiAoc3JhdGUgPD0gMzAwMDAwMCkKKwkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyU2hvcnRDYXJMb29wW21vZF9pbmRleF0uY2FyX2xvb3BfY3V0MTJfMjsKKwkJZWxzZSBpZiAoc3JhdGUgPD0gNzAwMDAwMCkKKwkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyU2hvcnRDYXJMb29wW21vZF9pbmRleF0uY2FyX2xvb3BfY3V0MTJfNTsKKwkJZWxzZSBpZiAoc3JhdGUgPD0gMTUwMDAwMDApCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMlNob3J0Q2FyTG9vcFttb2RfaW5kZXhdLmNhcl9sb29wX2N1dDEyXzEwOworCQllbHNlIGlmIChzcmF0ZSA8PSAyNTAwMDAwMCkKKwkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyU2hvcnRDYXJMb29wW21vZF9pbmRleF0uY2FyX2xvb3BfY3V0MTJfMjA7CisJCWVsc2UKKwkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyU2hvcnRDYXJMb29wW21vZF9pbmRleF0uY2FyX2xvb3BfY3V0MTJfMzA7CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGFjbGNfdmFsdWU7Cit9CisKK3N0YXRpYyBlbnVtIGZlX3N0djA5MDBfZXJyb3Igc3R2MDkwMF9zdF9kdmJzMl9zaW5nbGUoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbW9kZSBMRFBDX01vZGUsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJZW51bSBmZV9zdHYwOTAwX2Vycm9yIGVycm9yID0gU1RWMDkwMF9OT19FUlJPUjsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJc3dpdGNoIChMRFBDX01vZGUpIHsKKwljYXNlIFNUVjA5MDBfRFVBTDoKKwlkZWZhdWx0OgorCQlpZiAoKGlfcGFyYW1zLT5kZW1vZF9tb2RlICE9IFNUVjA5MDBfRFVBTCkKKwkJCXx8IChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9EREVNT0QpICE9IDEpKSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfR0VOQ0ZHLCAweDFkKTsKKworCQkJaV9wYXJhbXMtPmRlbW9kX21vZGUgPSBTVFYwOTAwX0RVQUw7CisKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfRlJFU0ZFQywgMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX0ZSRVNGRUMsIDApOworCQl9CisKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX1NJTkdMRToKKwkJaWYgKGRlbW9kID09IFNUVjA5MDBfREVNT0RfMikKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9HRU5DRkcsIDB4MDYpOworCQllbHNlCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfR0VOQ0ZHLCAweDA0KTsKKworCQlpX3BhcmFtcy0+ZGVtb2RfbW9kZSA9IFNUVjA5MDBfU0lOR0xFOworCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfRlJFU0ZFQywgMSk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfRlJFU0ZFQywgMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfQUxHT1NXUlNULCAxKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9BTEdPU1dSU1QsIDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0FMR09TV1JTVCwgMSk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfQUxHT1NXUlNULCAwKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgZW51bSBmZV9zdHYwOTAwX2Vycm9yIHN0djA5MDBfaW5pdF9pbnRlcm5hbChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJc3RydWN0IHN0djA5MDBfaW5pdF9wYXJhbXMgKnBfaW5pdCkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwllbnVtIGZlX3N0djA5MDBfZXJyb3IgZXJyb3IgPSBTVFYwOTAwX05PX0VSUk9SOworCWVudW0gZmVfc3R2MDkwMF9lcnJvciBkZW1vZEVycm9yID0gU1RWMDkwMF9OT19FUlJPUjsKKwlpbnQgc2Vsb3NjaTsKKworCXN0cnVjdCBzdHYwOTAwX2lub2RlICp0ZW1wX2ludCA9IGZpbmRfaW5vZGUoc3RhdGUtPmkyY19hZGFwLAorCQkJCQkJc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcyk7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmICh0ZW1wX2ludCAhPSBOVUxMKSB7CisJCXN0YXRlLT5pbnRlcm5hbCA9IHRlbXBfaW50LT5pbnRlcm5hbDsKKwkJKHN0YXRlLT5pbnRlcm5hbC0+ZG1kc191c2VkKSsrOworCQlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZpbmQgSW50ZXJuYWwgU3RydWN0dXJlIVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gU1RWMDkwMF9OT19FUlJPUjsKKwl9IGVsc2UgeworCQlzdGF0ZS0+aW50ZXJuYWwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCksIEdGUF9LRVJORUwpOworCQl0ZW1wX2ludCA9IGFwcGVuZF9pbnRlcm5hbChzdGF0ZS0+aW50ZXJuYWwpOworCQlzdGF0ZS0+aW50ZXJuYWwtPmRtZHNfdXNlZCA9IDE7CisJCXN0YXRlLT5pbnRlcm5hbC0+aTJjX2FkYXAgPSBzdGF0ZS0+aTJjX2FkYXA7CisJCXN0YXRlLT5pbnRlcm5hbC0+aTJjX2FkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzOworCQlzdGF0ZS0+aW50ZXJuYWwtPmNsa21vZGUgPSBzdGF0ZS0+Y29uZmlnLT5jbGttb2RlOworCQlzdGF0ZS0+aW50ZXJuYWwtPmVycnMgPSBTVFYwOTAwX05PX0VSUk9SOworCQlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENyZWF0ZSBOZXcgSW50ZXJuYWwgU3RydWN0dXJlIVxuIiwgX19mdW5jX18pOworCX0KKworCWlmIChzdGF0ZS0+aW50ZXJuYWwgIT0gTlVMTCkgeworCQlkZW1vZEVycm9yID0gc3R2MDkwMF9pbml0aWFsaXplKHN0YXRlLT5pbnRlcm5hbCk7CisJCWlmIChkZW1vZEVycm9yID09IFNUVjA5MDBfTk9fRVJST1IpIHsKKwkJCQllcnJvciA9IFNUVjA5MDBfTk9fRVJST1I7CisJCX0gZWxzZSB7CisJCQlpZiAoZGVtb2RFcnJvciA9PSBTVFYwOTAwX0lOVkFMSURfSEFORExFKQorCQkJCWVycm9yID0gU1RWMDkwMF9JTlZBTElEX0hBTkRMRTsKKwkJCWVsc2UKKwkJCQllcnJvciA9IFNUVjA5MDBfSTJDX0VSUk9SOworCQl9CisKKwkJaWYgKHN0YXRlLT5pbnRlcm5hbCAhPSBOVUxMKSB7CisJCQlpZiAoZXJyb3IgPT0gU1RWMDkwMF9OT19FUlJPUikgeworCQkJCXN0YXRlLT5pbnRlcm5hbC0+ZGVtb2RfbW9kZSA9IHBfaW5pdC0+ZGVtb2RfbW9kZTsKKworCQkJCXN0djA5MDBfc3RfZHZiczJfc2luZ2xlKHN0YXRlLT5pbnRlcm5hbCwgc3RhdGUtPmludGVybmFsLT5kZW1vZF9tb2RlLCBTVFYwOTAwX0RFTU9EXzEpOworCisJCQkJc3RhdGUtPmludGVybmFsLT5jaGlwX2lkID0gc3R2MDkwMF9yZWFkX3JlZyhzdGF0ZS0+aW50ZXJuYWwsIFIwOTAwX01JRCk7CisJCQkJc3RhdGUtPmludGVybmFsLT5yb2xsb2ZmID0gcF9pbml0LT5yb2xsb2ZmOworCQkJCXN0YXRlLT5pbnRlcm5hbC0+cXVhcnR6ID0gcF9pbml0LT5kbWRfcmVmX2NsazsKKworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhzdGF0ZS0+aW50ZXJuYWwsIEYwOTAwX1AxX1JPTExPRkZfQ09OVFJPTCwgcF9pbml0LT5yb2xsb2ZmKTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoc3RhdGUtPmludGVybmFsLCBGMDkwMF9QMl9ST0xMT0ZGX0NPTlRST0wsIHBfaW5pdC0+cm9sbG9mZik7CisKKwkJCQlzdHYwOTAwX3NldF90c19wYXJhbGxlbF9zZXJpYWwoc3RhdGUtPmludGVybmFsLCBwX2luaXQtPnBhdGgxX3RzX2Nsb2NrLCBwX2luaXQtPnBhdGgyX3RzX2Nsb2NrKTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoc3RhdGUtPmludGVybmFsLCBGMDkwMF9QMV9UVU5fTUFERFJFU1MsIHBfaW5pdC0+dHVuMV9tYWRkcmVzcyk7CisJCQkJc3dpdGNoIChwX2luaXQtPnR1bmVyMV9hZGMpIHsKKwkJCQljYXNlIDE6CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKHN0YXRlLT5pbnRlcm5hbCwgUjA5MDBfVFNUVE5SMSwgMHgyNik7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhzdGF0ZS0+aW50ZXJuYWwsIEYwOTAwX1AyX1RVTl9NQUREUkVTUywgcF9pbml0LT50dW4yX21hZGRyZXNzKTsKKwkJCQlzd2l0Y2ggKHBfaW5pdC0+dHVuZXIyX2FkYykgeworCQkJCWNhc2UgMToKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoc3RhdGUtPmludGVybmFsLCBSMDkwMF9UU1RUTlIzLCAweDI2KTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKHN0YXRlLT5pbnRlcm5hbCwgRjA5MDBfUDFfVFVOX0lRU1dBUCwgcF9pbml0LT50dW4xX2lxX2ludmVyc2lvbik7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKHN0YXRlLT5pbnRlcm5hbCwgRjA5MDBfUDJfVFVOX0lRU1dBUCwgcF9pbml0LT50dW4yX2lxX2ludmVyc2lvbik7CisJCQkJc3R2MDkwMF9zZXRfbWNsayhzdGF0ZS0+aW50ZXJuYWwsIDEzNTAwMDAwMCk7CisJCQkJbXNsZWVwKDMpOworCisJCQkJc3dpdGNoIChzdGF0ZS0+aW50ZXJuYWwtPmNsa21vZGUpIHsKKwkJCQljYXNlIDA6CisJCQkJY2FzZSAyOgorCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhzdGF0ZS0+aW50ZXJuYWwsIFIwOTAwX1NZTlRDVFJMLCAweDIwIHwgc3RhdGUtPmludGVybmFsLT5jbGttb2RlKTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJc2Vsb3NjaSA9IDB4MDIgJiBzdHYwOTAwX3JlYWRfcmVnKHN0YXRlLT5pbnRlcm5hbCwgUjA5MDBfU1lOVENUUkwpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhzdGF0ZS0+aW50ZXJuYWwsIFIwOTAwX1NZTlRDVFJMLCAweDIwIHwgc2Vsb3NjaSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQltc2xlZXAoMyk7CisKKwkJCQlzdGF0ZS0+aW50ZXJuYWwtPm1jbGsgPSBzdHYwOTAwX2dldF9tY2xrX2ZyZXEoc3RhdGUtPmludGVybmFsLCBzdGF0ZS0+aW50ZXJuYWwtPnF1YXJ0eik7CisJCQkJaWYgKHN0YXRlLT5pbnRlcm5hbC0+ZXJycykKKwkJCQkJZXJyb3IgPSBTVFYwOTAwX0kyQ19FUlJPUjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWVycm9yID0gU1RWMDkwMF9JTlZBTElEX0hBTkRMRTsKKwkJfQorCX0KKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBzdHYwOTAwX3N0YXR1cyhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9zdGF0ZSBkZW1vZF9zdGF0ZTsKKwlzMzIgbW9kZV9maWVsZCwgZGVsaW5fZmllbGQsIGxvY2tfZmllbGQsIGZpZm9fZmllbGQsIGxvY2tlZHZpdF9maWVsZDsKKwlpbnQgbG9ja2VkID0gRkFMU0U7CisKKwlkbWRfcmVnKG1vZGVfZmllbGQsIEYwOTAwX1AxX0hFQURFUl9NT0RFLCBGMDkwMF9QMl9IRUFERVJfTU9ERSk7CisJZG1kX3JlZyhsb2NrX2ZpZWxkLCBGMDkwMF9QMV9MT0NLX0RFRklOSVRJRiwgRjA5MDBfUDJfTE9DS19ERUZJTklUSUYpOworCWRtZF9yZWcoZGVsaW5fZmllbGQsIEYwOTAwX1AxX1BLVERFTElOX0xPQ0ssIEYwOTAwX1AyX1BLVERFTElOX0xPQ0spOworCWRtZF9yZWcoZmlmb19maWVsZCwgRjA5MDBfUDFfVFNGSUZPX0xJTkVPSywgRjA5MDBfUDJfVFNGSUZPX0xJTkVPSyk7CisJZG1kX3JlZyhsb2NrZWR2aXRfZmllbGQsIEYwOTAwX1AxX0xPQ0tFRFZJVCwgRjA5MDBfUDJfTE9DS0VEVklUKTsKKworCWRlbW9kX3N0YXRlID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgbW9kZV9maWVsZCk7CisJc3dpdGNoIChkZW1vZF9zdGF0ZSkgeworCWNhc2UgU1RWMDkwMF9TRUFSQ0g6CisJY2FzZSBTVFYwOTAwX1BMSF9ERVRFQ1RFRDoKKwlkZWZhdWx0OgorCQlsb2NrZWQgPSBGQUxTRTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RWQlMyX0ZPVU5EOgorCQlsb2NrZWQgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBsb2NrX2ZpZWxkKSAmJgorCQkJCXN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGRlbGluX2ZpZWxkKSAmJgorCQkJCXN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGZpZm9fZmllbGQpOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfRFZCU19GT1VORDoKKwkJbG9ja2VkID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgbG9ja19maWVsZCkgJiYKKwkJCQlzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBsb2NrZWR2aXRfZmllbGQpICYmCisJCQkJc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgZmlmb19maWVsZCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBsb2NrZWQ7Cit9CisKK3N0YXRpYyBlbnVtIGR2YmZlX3NlYXJjaCBzdHYwOTAwX3NlYXJjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOworCisJc3RydWN0IHN0djA5MDBfc2VhcmNoX3BhcmFtcyBwX3NlYXJjaDsKKwlzdHJ1Y3Qgc3R2MDkwMF9zaWduYWxfaW5mbyBwX3Jlc3VsdDsKKworCWVudW0gZmVfc3R2MDkwMF9lcnJvciBlcnJvciA9IFNUVjA5MDBfTk9fRVJST1I7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIsIF9fZnVuY19fKTsKKworCXBfcmVzdWx0LmxvY2tlZCA9IEZBTFNFOworCXBfc2VhcmNoLnBhdGggPSBzdGF0ZS0+ZGVtb2Q7CisJcF9zZWFyY2guZnJlcXVlbmN5ID0gYy0+ZnJlcXVlbmN5OworCXBfc2VhcmNoLnN5bWJvbF9yYXRlID0gYy0+c3ltYm9sX3JhdGU7CisJcF9zZWFyY2guc2VhcmNoX3JhbmdlID0gMTAwMDAwMDA7CisJcF9zZWFyY2guZmVjID0gU1RWMDkwMF9GRUNfVU5LTk9XTjsKKwlwX3NlYXJjaC5zdGFuZGFyZCA9IFNUVjA5MDBfQVVUT19TRUFSQ0g7CisJcF9zZWFyY2guaXFfaW52ZXJzaW9uID0gU1RWMDkwMF9JUV9BVVRPOworCXBfc2VhcmNoLnNlYXJjaF9hbGdvID0gU1RWMDkwMF9CTElORF9TRUFSQ0g7CisKKwlpZiAoKElOUkFOR0UoMTAwMDAwLCBwX3NlYXJjaC5zeW1ib2xfcmF0ZSwgNzAwMDAwMDApKSAmJgorCQkJKElOUkFOR0UoMTAwMDAwLCBwX3NlYXJjaC5zZWFyY2hfcmFuZ2UsIDUwMDAwMDAwKSkpIHsKKwkJc3dpdGNoIChwX3NlYXJjaC5wYXRoKSB7CisJCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCQlkZWZhdWx0OgorCQkJaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZCA9IHBfc2VhcmNoLnN0YW5kYXJkOworCQkJaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUgPSBwX3NlYXJjaC5zeW1ib2xfcmF0ZTsKKwkJCWlfcGFyYW1zLT5kbWQxX3NyY2hfcmFuZ2UgPSBwX3NlYXJjaC5zZWFyY2hfcmFuZ2U7CisJCQlpX3BhcmFtcy0+dHVuZXIxX2ZyZXEgPSBwX3NlYXJjaC5mcmVxdWVuY3k7CisJCQlpX3BhcmFtcy0+ZG1kMV9zcmNoX2FsZ28gPSBwX3NlYXJjaC5zZWFyY2hfYWxnbzsKKwkJCWlfcGFyYW1zLT5kbWQxX3NyY2hfaXFfaW52ID0gcF9zZWFyY2guaXFfaW52ZXJzaW9uOworCQkJaV9wYXJhbXMtPmRtZDFfZmVjID0gcF9zZWFyY2guZmVjOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCQlpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCA9IHBfc2VhcmNoLnN0YW5kYXJkOworCQkJaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPSBwX3NlYXJjaC5zeW1ib2xfcmF0ZTsKKwkJCWlfcGFyYW1zLT5kbWQyX3NyY2hfcmFuZ2UgPSBwX3NlYXJjaC5zZWFyY2hfcmFuZ2U7CisJCQlpX3BhcmFtcy0+dHVuZXIyX2ZyZXEgPSBwX3NlYXJjaC5mcmVxdWVuY3k7CisJCQlpX3BhcmFtcy0+ZG1kMl9zcmNoX2FsZ28gPSBwX3NlYXJjaC5zZWFyY2hfYWxnbzsKKwkJCWlfcGFyYW1zLT5kbWQyX3NyY2hfaXFfaW52ID0gcF9zZWFyY2guaXFfaW52ZXJzaW9uOworCQkJaV9wYXJhbXMtPmRtZDJfZmVjID0gcF9zZWFyY2guZmVjOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoKHN0djA5MDBfYWxnbyhmZSkgPT0gU1RWMDkwMF9SQU5HRU9LKSAmJgorCQkJCQkoaV9wYXJhbXMtPmVycnMgPT0gU1RWMDkwMF9OT19FUlJPUikpIHsKKwkJCXN3aXRjaCAocF9zZWFyY2gucGF0aCkgeworCQkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJCQlkZWZhdWx0OgorCQkJCXBfcmVzdWx0LmxvY2tlZCA9IGlfcGFyYW1zLT5kbWQxX3JzbHRzLmxvY2tlZDsKKwkJCQlwX3Jlc3VsdC5zdGFuZGFyZCA9IGlfcGFyYW1zLT5kbWQxX3JzbHRzLnN0YW5kYXJkOworCQkJCXBfcmVzdWx0LmZyZXF1ZW5jeSA9IGlfcGFyYW1zLT5kbWQxX3JzbHRzLmZyZXF1ZW5jeTsKKwkJCQlwX3Jlc3VsdC5zeW1ib2xfcmF0ZSA9IGlfcGFyYW1zLT5kbWQxX3JzbHRzLnN5bWJvbF9yYXRlOworCQkJCXBfcmVzdWx0LmZlYyA9IGlfcGFyYW1zLT5kbWQxX3JzbHRzLmZlYzsKKwkJCQlwX3Jlc3VsdC5tb2Rjb2RlID0gaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kY29kZTsKKwkJCQlwX3Jlc3VsdC5waWxvdCA9IGlfcGFyYW1zLT5kbWQxX3JzbHRzLnBpbG90OworCQkJCXBfcmVzdWx0LmZyYW1lX2xlbmd0aCA9IGlfcGFyYW1zLT5kbWQxX3JzbHRzLmZyYW1lX2xlbmd0aDsKKwkJCQlwX3Jlc3VsdC5zcGVjdHJ1bSA9IGlfcGFyYW1zLT5kbWQxX3JzbHRzLnNwZWN0cnVtOworCQkJCXBfcmVzdWx0LnJvbGxvZmYgPSBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5yb2xsb2ZmOworCQkJCXBfcmVzdWx0Lm1vZHVsYXRpb24gPSBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2R1bGF0aW9uOworCQkJCWJyZWFrOworCQkJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCQkJcF9yZXN1bHQubG9ja2VkID0gaV9wYXJhbXMtPmRtZDJfcnNsdHMubG9ja2VkOworCQkJCXBfcmVzdWx0LnN0YW5kYXJkID0gaV9wYXJhbXMtPmRtZDJfcnNsdHMuc3RhbmRhcmQ7CisJCQkJcF9yZXN1bHQuZnJlcXVlbmN5ID0gaV9wYXJhbXMtPmRtZDJfcnNsdHMuZnJlcXVlbmN5OworCQkJCXBfcmVzdWx0LnN5bWJvbF9yYXRlID0gaV9wYXJhbXMtPmRtZDJfcnNsdHMuc3ltYm9sX3JhdGU7CisJCQkJcF9yZXN1bHQuZmVjID0gaV9wYXJhbXMtPmRtZDJfcnNsdHMuZmVjOworCQkJCXBfcmVzdWx0Lm1vZGNvZGUgPSBpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2Rjb2RlOworCQkJCXBfcmVzdWx0LnBpbG90ID0gaV9wYXJhbXMtPmRtZDJfcnNsdHMucGlsb3Q7CisJCQkJcF9yZXN1bHQuZnJhbWVfbGVuZ3RoID0gaV9wYXJhbXMtPmRtZDJfcnNsdHMuZnJhbWVfbGVuZ3RoOworCQkJCXBfcmVzdWx0LnNwZWN0cnVtID0gaV9wYXJhbXMtPmRtZDJfcnNsdHMuc3BlY3RydW07CisJCQkJcF9yZXN1bHQucm9sbG9mZiA9IGlfcGFyYW1zLT5kbWQyX3JzbHRzLnJvbGxvZmY7CisJCQkJcF9yZXN1bHQubW9kdWxhdGlvbiA9IGlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZHVsYXRpb247CisJCQkJYnJlYWs7CisJCQl9CisKKwkJfSBlbHNlIHsKKwkJCXBfcmVzdWx0LmxvY2tlZCA9IEZBTFNFOworCQkJc3dpdGNoIChwX3NlYXJjaC5wYXRoKSB7CisJCQljYXNlIFNUVjA5MDBfREVNT0RfMToKKwkJCQlzd2l0Y2ggKGlfcGFyYW1zLT5kbWQxX2VycikgeworCQkJCWNhc2UgU1RWMDkwMF9JMkNfRVJST1I6CisJCQkJCWVycm9yID0gU1RWMDkwMF9JMkNfRVJST1I7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU1RWMDkwMF9OT19FUlJPUjoKKwkJCQlkZWZhdWx0OgorCQkJCQllcnJvciA9IFNUVjA5MDBfU0VBUkNIX0ZBSUxFRDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCQkJc3dpdGNoIChpX3BhcmFtcy0+ZG1kMl9lcnIpIHsKKwkJCQljYXNlIFNUVjA5MDBfSTJDX0VSUk9SOgorCQkJCQllcnJvciA9IFNUVjA5MDBfSTJDX0VSUk9SOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNUVjA5MDBfTk9fRVJST1I6CisJCQkJZGVmYXVsdDoKKwkJCQkJZXJyb3IgPSBTVFYwOTAwX1NFQVJDSF9GQUlMRUQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJfSBlbHNlCisJCWVycm9yID0gU1RWMDkwMF9CQURfUEFSQU1FVEVSOworCisJaWYgKChwX3Jlc3VsdC5sb2NrZWQgPT0gVFJVRSkgJiYgKGVycm9yID09IFNUVjA5MDBfTk9fRVJST1IpKSB7CisJCWRwcmludGsoS0VSTl9JTkZPICJTZWFyY2ggU3VjY2Vzc1xuIik7CisJCXJldHVybiBEVkJGRV9BTEdPX1NFQVJDSF9TVUNDRVNTOworCX0gZWxzZSB7CisJCWRwcmludGsoS0VSTl9JTkZPICJTZWFyY2ggRmFpbFxuIik7CisJCXJldHVybiBEVkJGRV9BTEdPX1NFQVJDSF9GQUlMRUQ7CisJfQorCisJcmV0dXJuIERWQkZFX0FMR09fU0VBUkNIX0VSUk9SOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGVudW0gZmVfc3RhdHVzICpzdGF0dXMpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlkcHJpbnRrKCIlczogIiwgX19mdW5jX18pOworCisJaWYgKChzdHYwOTAwX3N0YXR1cyhzdGF0ZS0+aW50ZXJuYWwsIHN0YXRlLT5kZW1vZCkpID09IFRSVUUpIHsKKwkJZHByaW50aygiREVNT0QgTE9DSyBPS1xuIik7CisJCSpzdGF0dXMgPSBGRV9IQVNfQ0FSUklFUgorCQkJfCBGRV9IQVNfVklURVJCSQorCQkJfCBGRV9IQVNfU1lOQworCQkJfCBGRV9IQVNfTE9DSzsKKwl9IGVsc2UKKwkJZHByaW50aygiREVNT0QgTE9DSyBGQUlMXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfdHJhY2soc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9zdG9wX3RzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgc3RvcF90cykKK3sKKworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kID0gc3RhdGUtPmRlbW9kOworCXMzMiByc3RfZmllbGQ7CisKKwlkbWRfcmVnKHJzdF9maWVsZCwgRjA5MDBfUDFfUlNUX0hXQVJFLCBGMDkwMF9QMl9SU1RfSFdBUkUpOworCisJaWYgKHN0b3BfdHMgPT0gVFJVRSkKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCByc3RfZmllbGQsIDEpOworCWVsc2UKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCByc3RfZmllbGQsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9kaXNlcWNfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKwlzMzIgbW9kZV9maWVsZCwgcmVzZXRfZmllbGQ7CisKKwlkbWRfcmVnKG1vZGVfZmllbGQsIEYwOTAwX1AxX0RJU1RYX01PREUsIEYwOTAwX1AyX0RJU1RYX01PREUpOworCWRtZF9yZWcocmVzZXRfZmllbGQsIEYwOTAwX1AxX0RJU0VRQ19SRVNFVCwgRjA5MDBfUDJfRElTRVFDX1JFU0VUKTsKKworCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgbW9kZV9maWVsZCwgc3RhdGUtPmNvbmZpZy0+ZGlzZXFjX21vZGUpOworCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgcmVzZXRfZmllbGQsIDEpOworCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgcmVzZXRfZmllbGQsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJc3R2MDkwMF9zdG9wX3RzKGZlLCAxKTsKKwlzdHYwOTAwX2Rpc2VxY19pbml0KGZlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfZGlzZXFjX3NlbmQoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zICwgdTggKkRhdGEsCisJCQkJdTMyIE5iRGF0YSwgZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzMzIgaSA9IDA7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9ESVNfUFJFQ0hBUkdFLCAxKTsKKwkJd2hpbGUgKGkgPCBOYkRhdGEpIHsKKwkJCXdoaWxlIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9GSUZPX0ZVTEwpKQorCQkJCTsvKiBjaGVja3BhdGNoIGNvbXBsYWlucyAqLworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RJU1RYREFUQSwgRGF0YVtpXSk7CisJCQlpKys7CisJCX0KKworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RJU19QUkVDSEFSR0UsIDApOworCQlpID0gMDsKKwkJd2hpbGUgKChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9UWF9JRExFKSAhPSAxKSAmJiAoaSA8IDEwKSkgeworCQkJbXNsZWVwKDEwKTsKKwkJCWkrKzsKKwkJfQorCisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RJU19QUkVDSEFSR0UsIDEpOworCisJCXdoaWxlIChpIDwgTmJEYXRhKSB7CisJCQl3aGlsZSAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRklGT19GVUxMKSkKKwkJCQk7LyogY2hlY2twYXRjaCBjb21wbGFpbnMgKi8KKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ESVNUWERBVEEsIERhdGFbaV0pOworCQkJaSsrOworCQl9CisKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9ESVNfUFJFQ0hBUkdFLCAwKTsKKwkJaSA9IDA7CisJCXdoaWxlICgoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfVFhfSURMRSkgIT0gMSkgJiYgKGkgPCAxMCkpIHsKKwkJCW1zbGVlcCgxMCk7CisJCQlpKys7CisJCX0KKworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHYwOTAwX3NlbmRfbWFzdGVyX2NtZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJc3RydWN0IGR2Yl9kaXNlcWNfbWFzdGVyX2NtZCAqY21kKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJcmV0dXJuIHN0djA5MDBfZGlzZXFjX3NlbmQoc3RhdGUtPmludGVybmFsLAorCQkJCWNtZC0+bXNnLAorCQkJCWNtZC0+bXNnX2xlbiwKKwkJCQlzdGF0ZS0+ZGVtb2QpOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfc2VuZF9idXJzdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX21pbmlfY21kX3QgYnVyc3QpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QgPSBzdGF0ZS0+ZGVtb2Q7CisJczMyIG1vZGVfZmllbGQ7CisJdTMyIGRpc2VxY19maWZvOworCisJZG1kX3JlZyhtb2RlX2ZpZWxkLCBGMDkwMF9QMV9ESVNUWF9NT0RFLCBGMDkwMF9QMl9ESVNUWF9NT0RFKTsKKwlkbWRfcmVnKGRpc2VxY19maWZvLCBSMDkwMF9QMV9ESVNUWERBVEEsIFIwOTAwX1AyX0RJU1RYREFUQSk7CisKKwlzd2l0Y2ggKGJ1cnN0KSB7CisJY2FzZSBTRUNfTUlOSV9BOgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIG1vZGVfZmllbGQsIDMpOy8qIFVubW9kdWxhdGVkICovCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBkaXNlcWNfZmlmbywgMHgwMCk7CisJCWJyZWFrOworCWNhc2UgU0VDX01JTklfQjoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBtb2RlX2ZpZWxkLCAyKTsvKiBNb2R1bGF0ZWQgKi8KKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIGRpc2VxY19maWZvLCAweGZmKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9yZWN2X3NsYXZlX3JlcGx5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCXN0cnVjdCBkdmJfZGlzZXFjX3NsYXZlX3JlcGx5ICpyZXBseSkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJczMyIGkgPSAwOworCisJc3dpdGNoIChzdGF0ZS0+ZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlyZXBseS0+bXNnX2xlbiA9IDA7CisKKwkJd2hpbGUgKChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9SWF9FTkQpICE9IDEpICYmIChpIDwgMTApKSB7CisJCQltc2xlZXAoMTApOworCQkJaSsrOworCQl9CisKKwkJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1JYX0VORCkpIHsKKwkJCXJlcGx5LT5tc2dfbGVuID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRklGT19CWVRFTkJSKTsKKworCQkJZm9yIChpID0gMDsgaSA8IHJlcGx5LT5tc2dfbGVuOyBpKyspCisJCQkJcmVwbHktPm1zZ1tpXSA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RJU1JYREFUQSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCXJlcGx5LT5tc2dfbGVuID0gMDsKKworCQl3aGlsZSAoKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1JYX0VORCkgIT0gMSkgJiYgKGkgPCAxMCkpIHsKKwkJCW1zbGVlcCgxMCk7CisJCQlpKys7CisJCX0KKworCQlpZiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfUlhfRU5EKSkgeworCQkJcmVwbHktPm1zZ19sZW4gPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9GSUZPX0JZVEVOQlIpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgcmVwbHktPm1zZ19sZW47IGkrKykKKwkJCQlyZXBseS0+bXNnW2ldID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRElTUlhEQVRBKTsKKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHYwOTAwX3NldF90b25lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKwlzMzIgbW9kZV9maWVsZCwgcmVzZXRfZmllbGQ7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzXG4iLCBfX2Z1bmNfXywgKCh0b25lID09IDApID8gIk9mZiIgOiAiT24iKSk7CisKKwlkbWRfcmVnKG1vZGVfZmllbGQsIEYwOTAwX1AxX0RJU1RYX01PREUsIEYwOTAwX1AyX0RJU1RYX01PREUpOworCWRtZF9yZWcocmVzZXRfZmllbGQsIEYwOTAwX1AxX0RJU0VRQ19SRVNFVCwgRjA5MDBfUDJfRElTRVFDX1JFU0VUKTsKKworCWlmICh0b25lKSB7CisJCS8qU2V0IHRoZSBEaXNlcUMgbW9kZSB0byAyMktoeiBjb250aW51ZXMgdG9uZSovCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgbW9kZV9maWVsZCwgMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgcmVzZXRfZmllbGQsIDEpOworCQkvKnJlbGVhc2UgRGlzZXFDIHJlc2V0IHRvIGVuYWJsZSB0aGUgMjJLSHogdG9uZSovCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgcmVzZXRfZmllbGQsIDApOworCX0gZWxzZSB7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgbW9kZV9maWVsZCwgMCk7CisJCS8qbWFpbnRhaW4gdGhlIERpc2VxQyByZXNldCB0byBkaXNhYmxlIHRoZSAyMktIeiB0b25lKi8KKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCByZXNldF9maWVsZCwgMSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN0djA5MDBfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKCgtLShzdGF0ZS0+aW50ZXJuYWwtPmRtZHNfdXNlZCkpIDw9IDApIHsKKworCQlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFjdHVhbGx5IHJlbW92aW5nXG4iLCBfX2Z1bmNfXyk7CisKKwkJcmVtb3ZlX2lub2RlKHN0YXRlLT5pbnRlcm5hbCk7CisJCWtmcmVlKHN0YXRlLT5pbnRlcm5hbCk7CisJfQorCisJa2ZyZWUoc3RhdGUpOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgc3R2MDkwMF9vcHMgPSB7CisKKwkuaW5mbyA9IHsKKwkJLm5hbWUJCQk9ICJTVFYwOTAwIGZyb250ZW5kIiwKKwkJLnR5cGUJCQk9IEZFX1FQU0ssCisJCS5mcmVxdWVuY3lfbWluCQk9IDk1MDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXgJCT0gMjE1MDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwc2l6ZQk9IDEyNSwKKwkJLmZyZXF1ZW5jeV90b2xlcmFuY2UJPSAwLAorCQkuc3ltYm9sX3JhdGVfbWluCT0gMTAwMDAwMCwKKwkJLnN5bWJvbF9yYXRlX21heAk9IDQ1MDAwMDAwLAorCQkuc3ltYm9sX3JhdGVfdG9sZXJhbmNlCT0gNTAwLAorCQkuY2FwcwkJCT0gRkVfQ0FOX0ZFQ18xXzIgfCBGRV9DQU5fRkVDXzJfMyB8CisJCQkJCSAgRkVfQ0FOX0ZFQ18zXzQgfCBGRV9DQU5fRkVDXzVfNiB8CisJCQkJCSAgRkVfQ0FOX0ZFQ183XzggfCBGRV9DQU5fUVBTSyAgICB8CisJCQkJCSAgRkVfQ0FOXzJHX01PRFVMQVRJT04gfAorCQkJCQkgIEZFX0NBTl9GRUNfQVVUTworCX0sCisJLnJlbGVhc2UJCQk9IHN0djA5MDBfcmVsZWFzZSwKKwkuaW5pdAkJCQk9IHN0djA5MDBfaW5pdCwKKwkuZ2V0X2Zyb250ZW5kX2FsZ28JCT0gc3R2MDkwMF9mcm9udGVuZF9hbGdvLAorCS5pMmNfZ2F0ZV9jdHJsCQkJPSBzdHYwOTAwX2kyY19nYXRlX2N0cmwsCisJLmRpc2VxY19zZW5kX21hc3Rlcl9jbWQJCT0gc3R2MDkwMF9zZW5kX21hc3Rlcl9jbWQsCisJLmRpc2VxY19zZW5kX2J1cnN0CQk9IHN0djA5MDBfc2VuZF9idXJzdCwKKwkuZGlzZXFjX3JlY3Zfc2xhdmVfcmVwbHkJPSBzdHYwOTAwX3JlY3Zfc2xhdmVfcmVwbHksCisJLnNldF90b25lCQkJPSBzdHYwOTAwX3NldF90b25lLAorCS5zZXRfcHJvcGVydHkJCQk9IHN0YjA5MDBfc2V0X3Byb3BlcnR5LAorCS5nZXRfcHJvcGVydHkJCQk9IHN0YjA5MDBfZ2V0X3Byb3BlcnR5LAorCS5zZWFyY2gJCQkJPSBzdHYwOTAwX3NlYXJjaCwKKwkudHJhY2sJCQkJPSBzdHYwOTAwX3RyYWNrLAorCS5yZWFkX3N0YXR1cwkJCT0gc3R2MDkwMF9yZWFkX3N0YXR1cywKKwkucmVhZF9iZXIJCQk9IHN0djA5MDBfcmVhZF9iZXIsCisJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoCQk9IHN0djA5MDBfcmVhZF9zaWduYWxfc3RyZW5ndGgsCisJLnJlYWRfc25yCQkJPSBzdHYwOTAwX3JlYWRfc25yLAorfTsKKworc3RydWN0IGR2Yl9mcm9udGVuZCAqc3R2MDkwMF9hdHRhY2goY29uc3Qgc3RydWN0IHN0djA5MDBfY29uZmlnICpjb25maWcsCisJCQkJCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAorCQkJCQlpbnQgZGVtb2QpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gTlVMTDsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbml0X3BhcmFtcyBpbml0X3BhcmFtczsKKwllbnVtIGZlX3N0djA5MDBfZXJyb3IgZXJyX3N0djA5MDA7CisKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHYwOTAwX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlID09IE5VTEwpCisJCWdvdG8gZXJyb3I7CisKKwlzdGF0ZS0+ZGVtb2QJCT0gZGVtb2Q7CisJc3RhdGUtPmNvbmZpZwkJPSBjb25maWc7CisJc3RhdGUtPmkyY19hZGFwCQk9IGkyYzsKKworCW1lbWNweSgmc3RhdGUtPmZyb250ZW5kLm9wcywgJnN0djA5MDBfb3BzLAorCQkJc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJc3RhdGUtPmZyb250ZW5kLmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCQlpbml0X3BhcmFtcy5kbWRfcmVmX2NsayAgCT0gY29uZmlnLT54dGFsOworCQlpbml0X3BhcmFtcy5kZW1vZF9tb2RlCQk9IFNUVjA5MDBfRFVBTDsKKwkJaW5pdF9wYXJhbXMucm9sbG9mZgkJPSBTVFYwOTAwXzM1OworCQlpbml0X3BhcmFtcy5wYXRoMV90c19jbG9jawk9IGNvbmZpZy0+cGF0aDFfbW9kZTsKKwkJaW5pdF9wYXJhbXMudHVuMV9tYWRkcmVzcwk9IGNvbmZpZy0+dHVuMV9tYWRkcmVzczsKKwkJaW5pdF9wYXJhbXMudHVuMV9pcV9pbnZlcnNpb24JPSBTVFYwOTAwX0lRX05PUk1BTDsKKwkJaW5pdF9wYXJhbXMudHVuZXIxX2FkYwkJPSBjb25maWctPnR1bjFfYWRjOworCQlpbml0X3BhcmFtcy5wYXRoMl90c19jbG9jawk9IGNvbmZpZy0+cGF0aDJfbW9kZTsKKwkJaW5pdF9wYXJhbXMudHVuMl9tYWRkcmVzcwk9IGNvbmZpZy0+dHVuMl9tYWRkcmVzczsKKwkJaW5pdF9wYXJhbXMudHVuZXIyX2FkYwkJPSBjb25maWctPnR1bjJfYWRjOworCQlpbml0X3BhcmFtcy50dW4yX2lxX2ludmVyc2lvbgk9IFNUVjA5MDBfSVFfU1dBUFBFRDsKKworCQllcnJfc3R2MDkwMCA9IHN0djA5MDBfaW5pdF9pbnRlcm5hbCgmc3RhdGUtPmZyb250ZW5kLAorCQkJCQkJCSZpbml0X3BhcmFtcyk7CisKKwkJaWYgKGVycl9zdHYwOTAwKQorCQkJZ290byBlcnJvcjsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIGVycm9yOworCQlicmVhazsKKwl9CisKKwlkcHJpbnRrKCIlczogQXR0YWNoaW5nIFNUVjA5MDAgZGVtb2R1bGF0b3IoJWQpIFxuIiwgX19mdW5jX18sIGRlbW9kKTsKKwlyZXR1cm4gJnN0YXRlLT5mcm9udGVuZDsKKworZXJyb3I6CisJZHByaW50aygiJXM6IEZhaWxlZCB0byBhdHRhY2ggU1RWMDkwMCBkZW1vZHVsYXRvciglZCkgXG4iLAorCQlfX2Z1bmNfXywgZGVtb2QpOworCWtmcmVlKHN0YXRlKTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woc3R2MDkwMF9hdHRhY2gpOworCitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiU2V0IGRlYnVnIik7CisKK01PRFVMRV9BVVRIT1IoIklnb3IgTS4gTGlwbGlhbmluIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNUIFNUVjA5MDAgZnJvbnRlbmQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX2luaXQuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX2luaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjM4OGI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfaW5pdC5oCkBAIC0wLDAgKzEsNDQxIEBACisvKgorICogc3R2MDkwMF9pbml0LmgKKyAqCisgKiBEcml2ZXIgZm9yIFNUIFNUVjA5MDAgc2F0ZWxsaXRlIGRlbW9kdWxhdG9yIElDLgorICoKKyAqIENvcHlyaWdodCAoQykgU1QgTWljcm9lbGVjdHJvbmljcy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZXRVUCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBTVFYwOTAwX0lOSVRfSAorI2RlZmluZSBTVFYwOTAwX0lOSVRfSAorCisjaW5jbHVkZSAic3R2MDkwMF9wcml2LmgiCisKKy8qIERWQlMyIEMvTiBMb29rLVVwIHRhYmxlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0djA5MDBfdGFibGUgc3R2MDkwMF9zMl9jbiA9IHsKKwk1NSwKKwl7CisJCXsgLTMwLAkxMzM0OCB9LCAvKkMvTj0tM2RCKi8KKwkJeyAtMjAsCTEyNjQwIH0sIC8qQy9OPS0yZEIqLworCQl7IC0xMCwJMTE4ODMgfSwgLypDL049LTFkQiovCisJCXsgMCwJMTExMDEgfSwgLypDL049LTBkQiovCisJCXsgNSwJMTA3MTggfSwgLypDL049MC41ZEIqLworCQl7IDEwLAkxMDMzOSB9LCAvKkMvTj0xLjBkQiovCisJCXsgMTUsCTk5NDcgfSwgLypDL049MS41ZEIqLworCQl7IDIwLAk5NTUyIH0sIC8qQy9OPTIuMGRCKi8KKwkJeyAyNSwJOTE4MyB9LCAvKkMvTj0yLjVkQiovCisJCXsgMzAsCTg3OTkgfSwgLypDL049My4wZEIqLworCQl7IDM1LAk4NDIyIH0sIC8qQy9OPTMuNWRCKi8KKwkJeyA0MCwJODA2MiB9LCAvKkMvTj00LjBkQiovCisJCXsgNDUsCTc3MDcgfSwgLypDL049NC41ZEIqLworCQl7IDUwLAk3MzUzIH0sIC8qQy9OPTUuMGRCKi8KKwkJeyA1NSwJNzAyNSB9LCAvKkMvTj01LjVkQiovCisJCXsgNjAsCTY2ODQgfSwgLypDL049Ni4wZEIqLworCQl7IDY1LAk2MzMxIH0sIC8qQy9OPTYuNWRCKi8KKwkJeyA3MCwJNjAzNiB9LCAvKkMvTj03LjBkQiovCisJCXsgNzUsCTU3MjcgfSwgLypDL049Ny41ZEIqLworCQl7IDgwLAk1NDM3IH0sIC8qQy9OPTguMGRCKi8KKwkJeyA4NSwJNTE2NCB9LCAvKkMvTj04LjVkQiovCisJCXsgOTAsCTQ5MDIgfSwgLypDL049OS4wZEIqLworCQl7IDk1LAk0NjUzIH0sIC8qQy9OPTkuNWRCKi8KKwkJeyAxMDAsCTQ0MDggfSwgLypDL049MTAuMGRCKi8KKwkJeyAxMDUsCTQxODcgfSwgLypDL049MTAuNWRCKi8KKwkJeyAxMTAsCTM5NjEgfSwgLypDL049MTEuMGRCKi8KKwkJeyAxMTUsCTM3NTEgfSwgLypDL049MTEuNWRCKi8KKwkJeyAxMjAsCTM1NTggfSwgLypDL049MTIuMGRCKi8KKwkJeyAxMjUsCTMzNjggfSwgLypDL049MTIuNWRCKi8KKwkJeyAxMzAsCTMxOTEgfSwgLypDL049MTMuMGRCKi8KKwkJeyAxMzUsCTMwMTcgfSwgLypDL049MTMuNWRCKi8KKwkJeyAxNDAsCTI4NjIgfSwgLypDL049MTQuMGRCKi8KKwkJeyAxNDUsCTI3MTAgfSwgLypDL049MTQuNWRCKi8KKwkJeyAxNTAsCTI1NjUgfSwgLypDL049MTUuMGRCKi8KKwkJeyAxNjAsCTIzMDAgfSwgLypDL049MTYuMGRCKi8KKwkJeyAxNzAsCTIwNTggfSwgLypDL049MTcuMGRCKi8KKwkJeyAxODAsCTE4NDkgfSwgLypDL049MTguMGRCKi8KKwkJeyAxOTAsCTE2NjMgfSwgLypDL049MTkuMGRCKi8KKwkJeyAyMDAsCTE0OTUgfSwgLypDL049MjAuMGRCKi8KKwkJeyAyMTAsCTEzNDkgfSwgLypDL049MjEuMGRCKi8KKwkJeyAyMjAsCTEyMjIgfSwgLypDL049MjIuMGRCKi8KKwkJeyAyMzAsCTExMTAgfSwgLypDL049MjMuMGRCKi8KKwkJeyAyNDAsCTEwMTEgfSwgLypDL049MjQuMGRCKi8KKwkJeyAyNTAsCTkyNSB9LCAvKkMvTj0yNS4wZEIqLworCQl7IDI2MCwJODUzIH0sIC8qQy9OPTI2LjBkQiovCisJCXsgMjcwLAk3ODkgfSwgLypDL049MjcuMGRCKi8KKwkJeyAyODAsCTczNCB9LCAvKkMvTj0yOC4wZEIqLworCQl7IDI5MCwJNjkwIH0sIC8qQy9OPTI5LjBkQiovCisJCXsgMzAwLAk2NTAgfSwgLypDL049MzAuMGRCKi8KKwkJeyAzMTAsCTYxOSB9LCAvKkMvTj0zMS4wZEIqLworCQl7IDMyMCwJNTkzIH0sIC8qQy9OPTMyLjBkQiovCisJCXsgMzMwLAk1NzEgfSwgLypDL049MzMuMGRCKi8KKwkJeyA0MDAsCTQ5OCB9LCAvKkMvTj00MC4wZEIqLworCQl7IDQ1MCwJNDg0IH0sIC8qQy9OPTQ1LjBkQiovCisJCXsgNTAwLAk0ODEgfSAgLypDL049NTAuMGRCKi8KKwl9Cit9OworCisvKiBSRiBsZXZlbCBDL04gTG9vay1VcCB0YWJsZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzdHYwOTAwX3RhYmxlIHN0djA5MDBfcmYgPSB7CisJMTQsCisJeworCQl7IC01LCAweENBQTEgfSwgLyotNWRCbSovCisJCXsgLTEwLCAweEMyMjkgfSwgLyotMTBkQm0qLworCQl7IC0xNSwgMHhCQjA4IH0sIC8qLTE1ZEJtKi8KKwkJeyAtMjAsIDB4QjRCQyB9LCAvKi0yMGRCbSovCisJCXsgLTI1LCAweEFENUEgfSwgLyotMjVkQm0qLworCQl7IC0zMCwgMHhBMjk4IH0sIC8qLTMwZEJtKi8KKwkJeyAtMzUsIDB4OThBOCB9LCAvKi0zNWRCbSovCisJCXsgLTQwLCAweDgzODkgfSwgLyotNDBkQm0qLworCQl7IC00NSwgMHg1OUJFIH0sIC8qLTQ1ZEJtKi8KKwkJeyAtNTAsIDB4M0ExNCB9LCAvKi01MGRCbSovCisJCXsgLTU1LCAweDJEMTEgfSwgLyotNTVkQm0qLworCQl7IC02MCwgMHgyMTBEIH0sIC8qLTYwZEJtKi8KKwkJeyAtNjUsIDB4QTE0RiB9LCAvKi02NWRCbSovCisJCXsgLTcwLCAweDdBQSB9CS8qLTcwZEJtKi8KKwl9Cit9OworCitzdHJ1Y3Qgc3R2MDkwMF9jYXJfbG9vcF9vcHRpbSB7CisJZW51bSBmZV9zdHYwOTAwX21vZGNvZGUgbW9kY29kZTsKKwl1OCBjYXJfbG9vcF9waWxvdHNfb25fMjsKKwl1OCBjYXJfbG9vcF9waWxvdHNfb2ZmXzI7CisJdTggY2FyX2xvb3BfcGlsb3RzX29uXzU7CisJdTggY2FyX2xvb3BfcGlsb3RzX29mZl81OworCXU4IGNhcl9sb29wX3BpbG90c19vbl8xMDsKKwl1OCBjYXJfbG9vcF9waWxvdHNfb2ZmXzEwOworCXU4IGNhcl9sb29wX3BpbG90c19vbl8yMDsKKwl1OCBjYXJfbG9vcF9waWxvdHNfb2ZmXzIwOworCXU4IGNhcl9sb29wX3BpbG90c19vbl8zMDsKKwl1OCBjYXJfbG9vcF9waWxvdHNfb2ZmXzMwOworCit9OworCitzdHJ1Y3Qgc3R2MDkwMF9zaG9ydF9mcmFtZXNfY2FyX2xvb3Bfb3B0aW0geworCWVudW0gZmVfc3R2MDkwMF9tb2R1bGF0aW9uIG1vZHVsYXRpb247CisJdTggY2FyX2xvb3BfY3V0MTJfMjsgICAgLyogQ3V0IDEuMiwgICBTUjw9M21zcHMgICAgICovCisJdTggY2FyX2xvb3BfY3V0MjBfMjsgICAgLyogQ3V0IDIuMCwgICBTUjwzbXNwcyAgICAgICovCisJdTggY2FyX2xvb3BfY3V0MTJfNTsgICAgLyogQ3V0IDEuMiwgICAzPFNSPD03bXNwcyAgICovCisJdTggY2FyX2xvb3BfY3V0MjBfNTsgICAgLyogQ3V0IDIuMCwgICAzPFNSPD03bXNwcyAgICovCisJdTggY2FyX2xvb3BfY3V0MTJfMTA7ICAgLyogQ3V0IDEuMiwgICA3PFNSPD0xNW1zcHMgICovCisJdTggY2FyX2xvb3BfY3V0MjBfMTA7ICAgLyogQ3V0IDIuMCwgICA3PFNSPD0xNW1zcHMgICovCisJdTggY2FyX2xvb3BfY3V0MTJfMjA7ICAgLyogQ3V0IDEuMiwgICAxMDxTUjw9MjVtc3BzICovCisJdTggY2FyX2xvb3BfY3V0MjBfMjA7ICAgLyogQ3V0IDIuMCwgICAxMDxTUjw9MjVtc3BzICovCisJdTggY2FyX2xvb3BfY3V0MTJfMzA7ICAgLyogQ3V0IDEuMiwgICAyNTxTUjw9NDVtc3BzICovCisJdTggY2FyX2xvb3BfY3V0MjBfMzA7ICAgLyogQ3V0IDIuMCwgICAxMDxTUjw9NDVtc3BzICovCisKK307CisKKy8qIEN1dCAxLnggVHJhY2tpbmcgY2FycmllciBsb29wIGNhcnJpZXIgUVBTSyAxLzIgdG8gOFBTSyA5LzEwIGxvbmcgRnJhbWUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3R2MDkwMF9jYXJfbG9vcF9vcHRpbQlGRV9TVFYwOTAwX1MyQ2FyTG9vcFsxNF0gPSB7CisJLypNb2Rjb2QJCTJNUG9uIAkyTVBvZmYJNU1Qb24gCTVNUG9mZgkxME1Qb24gCTEwTVBvZmYJMjBNUG9uIAkyME1Qb2ZmCTMwTVBvbiAJMzBNUG9mZiAqLworCXsgU1RWMDkwMF9RUFNLXzEyLAkweDFDLAkweDBELAkweDFCLAkweDJDLAkweDNBLAkweDFDLAkweDJBLAkweDNCLAkweDJBLAkweDFCIH0sCisJeyBTVFYwOTAwX1FQU0tfMzUsCTB4MkMsCTB4MEQsCTB4MkIsCTB4MkMsCTB4M0EsCTB4MEMsCTB4M0EsCTB4MkIsCTB4MkEsCTB4MEIgfSwKKwl7IFNUVjA5MDBfUVBTS18yMywJMHgyQywJMHgwRCwJMHgyQiwJMHgyQywJMHgwQiwJMHgwQywJMHgzQSwJMHgxQiwJMHgyQSwJMHgzQSB9LAorCXsgU1RWMDkwMF9RUFNLXzM0LAkweDNDLAkweDBELAkweDNCLAkweDFDLAkweDBCLAkweDNCLAkweDNBLAkweDBCLAkweDJBLAkweDNBIH0sCisJeyBTVFYwOTAwX1FQU0tfNDUsCTB4M0MsCTB4MEQsCTB4M0IsCTB4MUMsCTB4MEIsCTB4M0IsCTB4M0EsCTB4MEIsCTB4MkEsCTB4M0EgfSwKKwl7IFNUVjA5MDBfUVBTS181NiwJMHgwRCwJMHgwRCwJMHgzQiwJMHgxQywJMHgwQiwJMHgzQiwJMHgzQSwJMHgwQiwJMHgyQSwJMHgzQSB9LAorCXsgU1RWMDkwMF9RUFNLXzg5LAkweDBELAkweDBELAkweDNCLAkweDFDLAkweDFCLAkweDNCLAkweDNBLAkweDBCLAkweDJBLAkweDNBIH0sCisJeyBTVFYwOTAwX1FQU0tfOTEwLAkweDFELAkweDBELAkweDNCLAkweDFDLAkweDFCLAkweDNCLAkweDNBLAkweDBCLAkweDJBLAkweDNBIH0sCisJeyBTVFYwOTAwXzhQU0tfMzUsCTB4MjksCTB4M0IsCTB4MDksCTB4MkIsCTB4MzgsCTB4MEIsCTB4MTgsCTB4MUEsCTB4MDgsCTB4MEEgfSwKKwl7IFNUVjA5MDBfOFBTS18yMywJMHgwQSwJMHgzQiwJMHgyOSwJMHgyQiwJMHgxOSwJMHgwQiwJMHgzOCwJMHgxQSwJMHgxOCwJMHgwQSB9LAorCXsgU1RWMDkwMF84UFNLXzM0LAkweDNBLAkweDNCLAkweDJBLAkweDJCLAkweDM5LAkweDBCLAkweDE5LAkweDFBLAkweDM4LAkweDBBIH0sCisJeyBTVFYwOTAwXzhQU0tfNTYsCTB4MUIsCTB4M0IsCTB4MEIsCTB4MkIsCTB4MUEsCTB4MEIsCTB4MzksCTB4MUEsCTB4MTksCTB4MEEgfSwKKwl7IFNUVjA5MDBfOFBTS184OSwJMHgzQiwJMHgzQiwJMHgwQiwJMHgyQiwJMHgyQSwJMHgwQiwJMHgzOSwJMHgxQSwJMHgyOSwJMHgzOSB9LAorCXsgU1RWMDkwMF84UFNLXzkxMCwJMHgzQiwJMHgzQiwgCTB4MEIsCTB4MkIsIAkweDJBLAkweDBCLAkweDM5LAkweDFBLAkweDI5LAkweDM5IH0KK307CisKKworLyogQ3V0IDIuMCBUcmFja2luZyBjYXJyaWVyIGxvb3AgY2FycmllciBRUFNLIDEvMiB0byA4UFNLIDkvMTAgbG9uZyBGcmFtZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzdHYwOTAwX2Nhcl9sb29wX29wdGltCUZFX1NUVjA5MDBfUzJDYXJMb29wQ3V0MjBbMTRdCT0geworCS8qIE1vZGNvZAkJMk1Qb24gCTJNUG9mZgk1TVBvbiAJNU1Qb2ZmCTEwTVBvbiAJMTBNUG9mZgkyME1Qb24gCTIwTVBvZmYJMzBNUG9uIAkzME1Qb2ZmICovCisJeyBTVFYwOTAwX1FQU0tfMTIsCTB4MUYsCTB4M0YsCTB4MUUsCTB4M0YsCTB4M0QsCTB4MUYsCTB4M0QsCTB4M0UsCTB4M0QsCTB4MUUgfSwKKwl7IFNUVjA5MDBfUVBTS18zNSwJMHgyRiwJMHgzRiwJMHgyRSwJMHgyRiwJMHgzRCwJMHgwRiwJMHgwRSwJMHgyRSwJMHgzRCwJMHgwRSB9LAorCXsgU1RWMDkwMF9RUFNLXzIzLAkweDJGLAkweDNGLAkweDJFLAkweDJGLAkweDBFLAkweDBGLAkweDBFLAkweDFFLAkweDNELAkweDNEIH0sCisJeyBTVFYwOTAwX1FQU0tfMzQsCTB4M0YsCTB4M0YsCTB4M0UsCTB4MUYsCTB4MEUsCTB4M0UsCTB4MEUsCTB4MUUsCTB4M0QsCTB4M0QgfSwKKwl7IFNUVjA5MDBfUVBTS180NSwJMHgzRiwJMHgzRiwJMHgzRSwJMHgxRiwJMHgwRSwJMHgzRSwJMHgwRSwJMHgxRSwJMHgzRCwJMHgzRCB9LAorCXsgU1RWMDkwMF9RUFNLXzU2LAkweDNGLAkweDNGLAkweDNFLAkweDFGLAkweDBFLAkweDNFLAkweDBFLAkweDFFLAkweDNELAkweDNEIH0sCisJeyBTVFYwOTAwX1FQU0tfODksCTB4M0YsCTB4M0YsCTB4M0UsCTB4MUYsCTB4MUUsCTB4M0UsCTB4MEUsCTB4MUUsCTB4M0QsCTB4M0QgfSwKKwl7IFNUVjA5MDBfUVBTS185MTAsCTB4M0YsCTB4M0YsCTB4M0UsCTB4MUYsCTB4MUUsCTB4M0UsCTB4MEUsCTB4MUUsCTB4M0QsCTB4M0QgfSwKKwl7IFNUVjA5MDBfOFBTS18zNSwJMHgzYywJMHgwYywJMHgxYywJMHgzYiwJMHgwYywJMHgzYiwJMHgyYiwJMHgyYiwJMHgxYiwJMHgyYiB9LAorCXsgU1RWMDkwMF84UFNLXzIzLAkweDFkLAkweDBjLAkweDNjLAkweDBjLAkweDJjLAkweDNiLAkweDBjLAkweDJiLAkweDJiLAkweDJiIH0sCisJeyBTVFYwOTAwXzhQU0tfMzQsCTB4MGUsCTB4MWMsCTB4M2QsCTB4MGMsCTB4MGQsCTB4M2IsCTB4MmMsCTB4M2IsCTB4MGMsCTB4MmIgfSwKKwl7IFNUVjA5MDBfOFBTS181NiwJMHgyZSwJMHgzZSwJMHgxZSwJMHgyZSwJMHgyZCwJMHgxZSwJMHgzYywJMHgyZCwJMHgyYywJMHgxZCB9LAorCXsgU1RWMDkwMF84UFNLXzg5LAkweDNlLAkweDNlLAkweDFlLAkweDJlLAkweDNkLAkweDFlLAkweDBkLAkweDJkLAkweDNjLAkweDFkIH0sCisJeyBTVFYwOTAwXzhQU0tfOTEwLAkweDNlLAkweDNlLCAJMHgxZSwJMHgyZSwgCTB4M2QsCTB4MWUsCTB4MWQsCTB4MmQsCTB4MGQsCTB4MWQgfQorfTsKKworCisKKy8qIEN1dCAyLjAgVHJhY2tpbmcgY2FycmllciBsb29wIGNhcnJpZXIgMTZBUFNLIDIvMyB0byAzMkFQU0sgOS8xMCBsb25nIEZyYW1lICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0djA5MDBfY2FyX2xvb3Bfb3B0aW0gRkVfU1RWMDkwMF9TMkFQU0tDYXJMb29wQ3V0MjBbMTFdID0geworCS8qIE1vZGNvZAkJMk1Qb24gCTJNUG9mZgk1TVBvbiAJNU1Qb2ZmCTEwTVBvbiAJMTBNUG9mZgkyME1Qb24gCTIwTVBvZmYJMzBNUG9uIAkzME1Qb2ZmICovCisJeyBTVFYwOTAwXzE2QVBTS18yMywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgxRCwJMHgwQywJMHgzQywJMHgwQywJMHgyQywJMHgwQyB9LAorCXsgU1RWMDkwMF8xNkFQU0tfMzQsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEUsCTB4MEMsCTB4MkQsCTB4MEMsCTB4MUQsCTB4MEMgfSwKKwl7IFNUVjA5MDBfMTZBUFNLXzQ1LAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDFFLAkweDBDLAkweDNELAkweDBDLAkweDJELAkweDBDIH0sCisJeyBTVFYwOTAwXzE2QVBTS181NiwJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgxRSwJMHgwQywJMHgzRCwJMHgwQywJMHgyRCwJMHgwQyB9LAorCXsgU1RWMDkwMF8xNkFQU0tfODksCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MkUsCTB4MEMsCTB4MEUsCTB4MEMsCTB4M0QsCTB4MEMgfSwKKwl7IFNUVjA5MDBfMTZBUFNLXzkxMCwJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgyRSwJMHgwQywJMHgwRSwJMHgwQywJMHgzRCwJMHgwQyB9LAorCXsgU1RWMDkwMF8zMkFQU0tfMzQsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMgfSwKKwl7IFNUVjA5MDBfMzJBUFNLXzQ1LAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDIH0sCisJeyBTVFYwOTAwXzMyQVBTS181NiwJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQyB9LAorCXsgU1RWMDkwMF8zMkFQU0tfODksCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMgfSwKKwl7IFNUVjA5MDBfMzJBUFNLXzkxMCwJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQyB9Cit9OworCisKKy8qIEN1dCAyLjAgVHJhY2tpbmcgY2FycmllciBsb29wIGNhcnJpZXIgUVBTSyAxLzQgdG8gUVBTSyAyLzUgbG9uZyBGcmFtZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzdHYwOTAwX2Nhcl9sb29wX29wdGltIEZFX1NUVjA5MDBfUzJMb3dRUENhckxvb3BDdXQyMFszXSA9IHsKKwkvKiBNb2Rjb2QJCTJNUG9uIAkyTVBvZmYJNU1Qb24gCTVNUG9mZgkxME1Qb24gCTEwTVBvZmYJMjBNUG9uIAkyME1Qb2ZmCTMwTVBvbiAJMzBNUG9mZiAqLworCXsgU1RWMDkwMF9RUFNLXzE0LAkweDBGLAkweDNGLAkweDBFLAkweDNGLAkweDJELAkweDJGLAkweDJELAkweDFGLAkweDNELAkweDNFIH0sCisJeyBTVFYwOTAwX1FQU0tfMTMsCTB4MEYsCTB4M0YsCTB4MEUsCTB4M0YsCTB4MkQsCTB4MkYsCTB4M0QsCTB4MEYsCTB4M0QsCTB4MkUgfSwKKwl7IFNUVjA5MDBfUVBTS18yNSwJMHgxRiwJMHgzRiwJMHgxRSwJMHgzRiwJMHgzRCwJMHgxRiwJMHgzRCwJMHgzRSwJMHgzRCwJMHgyRSB9Cit9OworCisKKy8qIEN1dCAyLjAgVHJhY2tpbmcgY2FycmllciBsb29wIGNhcnJpZXIgIHNob3J0IEZyYW1lLCBjdXQgMS4yIGFuZCAyLjAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3R2MDkwMF9zaG9ydF9mcmFtZXNfY2FyX2xvb3Bfb3B0aW0gRkVfU1RWMDkwMF9TMlNob3J0Q2FyTG9vcFs0XQk9IHsKKwkvKk1vZAkyTV9jdXQxLjIgMk1fY3V0Mi4wIDVNX2N1dDEuMiA1TV9jdXQyLjAgMTBNX2N1dDEuMiAxME1fY3V0Mi4wIDIwTV9jdXQxLjIgMjBNX2N1dDIuMCAzME1fY3V0MS4yIDMwTV9jdXQyLjAgKi8KKwl7IFNUVjA5MDBfUVBTSywJCTB4M0MsCTB4MkYsCTB4MkIsCTB4MkUsCTB4MEIsCTB4MEUsCTB4M0EsCTB4MEUsCTB4MkEsCTB4M0QgfSwKKwl7IFNUVjA5MDBfOFBTSywJCTB4MEIsCTB4M0UsCTB4MkEsCTB4MEUsCTB4MEEsCTB4MkQsCTB4MTksCTB4MEQsCTB4MDksCTB4M0MgfSwKKwl7IFNUVjA5MDBfMTZBUFNLLAkweDFCLAkweDFFLAkweDFCLAkweDFFLAkweDFCLAkweDFFLAkweDNBLAkweDNELAkweDJBLAkweDJEIH0sCisJeyBTVFYwOTAwXzMyQVBTSywJMHgxQiwJMHgxRSwJMHgxQiwJMHgxRSwJMHgxQiwJMHgxRSwJMHgzQSwJMHgzRCwJMHgyQSwJMHgyRCB9Cit9OworCitzdGF0aWMgY29uc3QgdTE2IFNUVjA5MDBfSW5pdFZhbFsxODJdWzJdID0geworCXsgUjA5MDBfT1VUQ0ZHCQksIDB4MDAJfSwKKwl7IFIwOTAwX01PREVDRkcJCSwgMHhmZgl9LAorCXsgUjA5MDBfQUdDUkYxQ0ZHCSwgMHgxMQl9LAorCXsgUjA5MDBfQUdDUkYyQ0ZHCSwgMHgxMwl9LAorCXsgUjA5MDBfVFNHRU5FUkFMMVgJLCAweDE0CX0sCisJeyBSMDkwMF9UU1RUTlIyCQksIDB4MjEJfSwKKwl7IFIwOTAwX1RTVFROUjQJCSwgMHgyMQl9LAorCXsgUjA5MDBfUDJfRElTVFhDVEwJLCAweDIyCX0sCisJeyBSMDkwMF9QMl9GMjJUWAksIDB4YzAJfSwKKwl7IFIwOTAwX1AyX0YyMlJYCSwgMHhjMAl9LAorCXsgUjA5MDBfUDJfRElTUlhDVEwJLCAweDAwCX0sCisJeyBSMDkwMF9QMl9UTlJTVEVQUwksIDB4ODcJfSwKKwl7IFIwOTAwX1AyX1ROUkdBSU4JLCAweDA5CX0sCisJeyBSMDkwMF9QMl9ETURDRkdNRAksIDB4RjkJfSwKKwl7IFIwOTAwX1AyX0RFTU9ECSwgMHgwOAl9LAorCXsgUjA5MDBfUDJfRE1EQ0ZHMwksIDB4YzQJfSwKKwl7IFIwOTAwX1AyX0NBUkZSRVEJLCAweGVkCX0sCisJeyBSMDkwMF9QMl9UTlJDRkcyCSwgMHgwMgl9LAorCXsgUjA5MDBfUDJfVE5SQ0ZHMwksIDB4MDIJfSwKKwl7IFIwOTAwX1AyX0xEVAkJLCAweGQwCX0sCisJeyBSMDkwMF9QMl9MRFQyCQksIDB4YjgJfSwKKwl7IFIwOTAwX1AyX1RNR0NGRwksIDB4ZDIJfSwKKwl7IFIwOTAwX1AyX1RNR1RIUklTRQksIDB4MjAJfSwKKwl7IFIwOTAwX1AyX1RNR1RIRkFMTAksIDB4MDAJfSwKKwl7IFIwOTAwX1AyX0ZFQ1NQWQksIDB4ODgJfSwKKwl7IFIwOTAwX1AyX0ZTUFlEQVRBCSwgMHgzYQl9LAorCXsgUjA5MDBfUDJfRkJFUkNQVDQJLCAweDAwCX0sCisJeyBSMDkwMF9QMl9GU1BZQkVSCSwgMHgxMAl9LAorCXsgUjA5MDBfUDJfRVJSQ1RSTDEJLCAweDM1CX0sCisJeyBSMDkwMF9QMl9FUlJDVFJMMgksIDB4YzEJfSwKKwl7IFIwOTAwX1AyX0NGUklDRkcJLCAweGY4CX0sCisJeyBSMDkwMF9QMl9OT1NDRkcJLCAweDFjCX0sCisJeyBSMDkwMF9QMl9ETURUME0JLCAweDIwCX0sCisJeyBSMDkwMF9QMl9DT1JSRUxNQU5UCSwgMHg3MAl9LAorCXsgUjA5MDBfUDJfQ09SUkVMQUJTCSwgMHg4OAl9LAorCXsgUjA5MDBfUDJfQUdDMk8JLCAweDViCX0sCisJeyBSMDkwMF9QMl9BR0MyUkVGCSwgMHgzOAl9LAorCXsgUjA5MDBfUDJfQ0FSQ0ZHCSwgMHhlNAl9LAorCXsgUjA5MDBfUDJfQUNMQwkJLCAweDFBCX0sCisJeyBSMDkwMF9QMl9CQ0xDCQksIDB4MDkJfSwKKwl7IFIwOTAwX1AyX0NBUkhEUgksIDB4MDgJfSwKKwl7IFIwOTAwX1AyX0tSRUZUTUcJLCAweGMxCX0sCisJeyBSMDkwMF9QMl9TRlJVUFJBVElPCSwgMHhmMAl9LAorCXsgUjA5MDBfUDJfU0ZSTE9XUkFUSU8JLCAweDcwCX0sCisJeyBSMDkwMF9QMl9TRlJTVEVQCSwgMHg1OAl9LAorCXsgUjA5MDBfUDJfVE1HQ0ZHMgksIDB4MDEJfSwKKwl7IFIwOTAwX1AyX0NBUjJDRkcJLCAweDI2CX0sCisJeyBSMDkwMF9QMl9CQ0xDMlMyUQksIDB4ODYJfSwKKwl7IFIwOTAwX1AyX0JDTEMyUzI4CSwgMHg4Ngl9LAorCXsgUjA5MDBfUDJfU01BUENPRUY3CSwgMHg3Nwl9LAorCXsgUjA5MDBfUDJfU01BUENPRUY2CSwgMHg4NQl9LAorCXsgUjA5MDBfUDJfU01BUENPRUY1CSwgMHg3Nwl9LAorCXsgUjA5MDBfUDJfVFNDRkdMCSwgMHgyMAl9LAorCXsgUjA5MDBfUDJfRE1EQ0ZHMgksIDB4M2IJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVDAJLCAweGZmCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1QxCSwgMHhmZgl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNUMgksIDB4ZmYJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVDMJLCAweGZmCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1Q0CSwgMHhmZgl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNUNQksIDB4ZmYJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVDYJLCAweGZmCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1Q3CSwgMHhjYwl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNUOAksIDB4Y2MJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVDkJLCAweGNjCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1RBCSwgMHhjYwl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNUQgksIDB4Y2MJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVEMJLCAweGNjCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1RECSwgMHhjYwl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNURQksIDB4Y2MJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVEYJLCAweGNmCX0sCisJeyBSMDkwMF9QMV9ESVNUWENUTAksIDB4MjIJfSwKKwl7IFIwOTAwX1AxX0YyMlRYCSwgMHhjMAl9LAorCXsgUjA5MDBfUDFfRjIyUlgJLCAweGMwCX0sCisJeyBSMDkwMF9QMV9ESVNSWENUTAksIDB4MDAJfSwKKwl7IFIwOTAwX1AxX1ROUlNURVBTCSwgMHg4Nwl9LAorCXsgUjA5MDBfUDFfVE5SR0FJTgksIDB4MDkJfSwKKwl7IFIwOTAwX1AxX0RNRENGR01ECSwgMHhmOQl9LAorCXsgUjA5MDBfUDFfREVNT0QJLCAweDA4CX0sCisJeyBSMDkwMF9QMV9ETURDRkczCSwgMHhjNAl9LAorCXsgUjA5MDBfUDFfRE1EVDBNCSwgMHgyMAl9LAorCXsgUjA5MDBfUDFfQ0FSRlJFUQksIDB4ZWQJfSwKKwl7IFIwOTAwX1AxX1ROUkNGRzIJLCAweDgyCX0sCisJeyBSMDkwMF9QMV9UTlJDRkczCSwgMHgwMgl9LAorCXsgUjA5MDBfUDFfTERUCQksIDB4ZDAJfSwKKwl7IFIwOTAwX1AxX0xEVDIJCSwgMHhiOAl9LAorCXsgUjA5MDBfUDFfVE1HQ0ZHCSwgMHhkMgl9LAorCXsgUjA5MDBfUDFfVE1HVEhSSVNFCSwgMHgyMAl9LAorCXsgUjA5MDBfUDFfVE1HVEhGQUxMCSwgMHgwMAl9LAorCXsgUjA5MDBfUDFfU0ZSVVBSQVRJTwksIDB4ZjAJfSwKKwl7IFIwOTAwX1AxX1NGUkxPV1JBVElPCSwgMHg3MAl9LAorCXsgUjA5MDBfUDFfVFNDRkdMCSwgMHgyMAl9LAorCXsgUjA5MDBfUDFfRkVDU1BZCSwgMHg4OAl9LAorCXsgUjA5MDBfUDFfRlNQWURBVEEJLCAweDNhCX0sCisJeyBSMDkwMF9QMV9GQkVSQ1BUNAksIDB4MDAJfSwKKwl7IFIwOTAwX1AxX0ZTUFlCRVIJLCAweDEwCX0sCisJeyBSMDkwMF9QMV9FUlJDVFJMMQksIDB4MzUJfSwKKwl7IFIwOTAwX1AxX0VSUkNUUkwyCSwgMHhjMQl9LAorCXsgUjA5MDBfUDFfQ0ZSSUNGRwksIDB4ZjgJfSwKKwl7IFIwOTAwX1AxX05PU0NGRwksIDB4MWMJfSwKKwl7IFIwOTAwX1AxX0NPUlJFTE1BTlQJLCAweDcwCX0sCisJeyBSMDkwMF9QMV9DT1JSRUxBQlMJLCAweDg4CX0sCisJeyBSMDkwMF9QMV9BR0MyTwksIDB4NWIJfSwKKwl7IFIwOTAwX1AxX0FHQzJSRUYJLCAweDM4CX0sCisJeyBSMDkwMF9QMV9DQVJDRkcJLCAweGU0CX0sCisJeyBSMDkwMF9QMV9BQ0xDCQksIDB4MUEJfSwKKwl7IFIwOTAwX1AxX0JDTEMJCSwgMHgwOQl9LAorCXsgUjA5MDBfUDFfQ0FSSERSCSwgMHgwOAl9LAorCXsgUjA5MDBfUDFfS1JFRlRNRwksIDB4YzEJfSwKKwl7IFIwOTAwX1AxX1NGUlNURVAJLCAweDU4CX0sCisJeyBSMDkwMF9QMV9UTUdDRkcyCSwgMHgwMQl9LAorCXsgUjA5MDBfUDFfQ0FSMkNGRwksIDB4MjYJfSwKKwl7IFIwOTAwX1AxX0JDTEMyUzJRCSwgMHg4Ngl9LAorCXsgUjA5MDBfUDFfQkNMQzJTMjgJLCAweDg2CX0sCisJeyBSMDkwMF9QMV9TTUFQQ09FRjcJLCAweDc3CX0sCisJeyBSMDkwMF9QMV9TTUFQQ09FRjYJLCAweDg1CX0sCisJeyBSMDkwMF9QMV9TTUFQQ09FRjUJLCAweDc3CX0sCisJeyBSMDkwMF9QMV9ETURDRkcyCSwgMHgzYgl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNUMAksIDB4ZmYJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVDEJLCAweGZmCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1QyCSwgMHhmZgl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNUMwksIDB4ZmYJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVDQJLCAweGZmCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1Q1CSwgMHhmZgl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNUNgksIDB4ZmYJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVDcJLCAweGNjCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1Q4CSwgMHhjYwl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNUOQksIDB4Y2MJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVEEJLCAweGNjCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1RCCSwgMHhjYwl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNUQwksIDB4Y2MJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVEQJLCAweGNjCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1RFCSwgMHhjYwl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNURgksIDB4Y2YJfSwKKwl7IFIwOTAwX0dFTkNGRwkJLCAweDFkCX0sCisJeyBSMDkwMF9OQklURVJfTkY0CSwgMHgzNwl9LAorCXsgUjA5MDBfTkJJVEVSX05GNQksIDB4MjkJfSwKKwl7IFIwOTAwX05CSVRFUl9ORjYJLCAweDM3CX0sCisJeyBSMDkwMF9OQklURVJfTkY3CSwgMHgzMwl9LAorCXsgUjA5MDBfTkJJVEVSX05GOAksIDB4MzEJfSwKKwl7IFIwOTAwX05CSVRFUl9ORjkJLCAweDJmCX0sCisJeyBSMDkwMF9OQklURVJfTkYxMAksIDB4MzkJfSwKKwl7IFIwOTAwX05CSVRFUl9ORjExCSwgMHgzYQl9LAorCXsgUjA5MDBfTkJJVEVSX05GMTIJLCAweDI5CX0sCisJeyBSMDkwMF9OQklURVJfTkYxMwksIDB4MzcJfSwKKwl7IFIwOTAwX05CSVRFUl9ORjE0CSwgMHgzMwl9LAorCXsgUjA5MDBfTkJJVEVSX05GMTUJLCAweDJmCX0sCisJeyBSMDkwMF9OQklURVJfTkYxNgksIDB4MzkJfSwKKwl7IFIwOTAwX05CSVRFUl9ORjE3CSwgMHgzYQl9LAorCXsgUjA5MDBfTkJJVEVSTk9FUlIJLCAweDA0CX0sCisJeyBSMDkwMF9HQUlOTExSX05GNAksIDB4MEMJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkY1CSwgMHgwRgl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjYJLCAweDExCX0sCisJeyBSMDkwMF9HQUlOTExSX05GNwksIDB4MTQJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkY4CSwgMHgxNwl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjkJLCAweDE5CX0sCisJeyBSMDkwMF9HQUlOTExSX05GMTAJLCAweDIwCX0sCisJeyBSMDkwMF9HQUlOTExSX05GMTEJLCAweDIxCX0sCisJeyBSMDkwMF9HQUlOTExSX05GMTIJLCAweDBECX0sCisJeyBSMDkwMF9HQUlOTExSX05GMTMJLCAweDBGCX0sCisJeyBSMDkwMF9HQUlOTExSX05GMTQJLCAweDEzCX0sCisJeyBSMDkwMF9HQUlOTExSX05GMTUJLCAweDFBCX0sCisJeyBSMDkwMF9HQUlOTExSX05GMTYJLCAweDFGCX0sCisJeyBSMDkwMF9HQUlOTExSX05GMTcJLCAweDIxCX0sCisJeyBSMDkwMF9SQ0NGR0gJCSwgMHgyMAl9LAorCXsgUjA5MDBfUDFfRkVDTQkJLCAweDAxCX0sIC8qZGlzYWJsZSBEU1MgbW9kZXMqLworCXsgUjA5MDBfUDJfRkVDTQkJLCAweDAxCX0sIC8qZGlzYWJsZSBEU1MgbW9kZXMqLworCXsgUjA5MDBfUDFfUFJWSVQJLCAweDJGCX0sIC8qZGlzYWJsZSBwdW5jdHVyZSByYXRlIDYvNyovCisJeyBSMDkwMF9QMl9QUlZJVAksIDB4MkYJfSwgLypkaXNhYmxlIHB1bmN0dXJlIHJhdGUgNi83Ki8KKwl7IFIwOTAwX1NUUk9VVDFDRkcJLCAweDRjCX0sCisJeyBSMDkwMF9TVFJPVVQyQ0ZHCSwgMHg0Ywl9LAorCXsgUjA5MDBfQ0xLT1VUMUNGRwksIDB4NTAJfSwKKwl7IFIwOTAwX0NMS09VVDJDRkcJLCAweDUwCX0sCisJeyBSMDkwMF9EUE4xQ0ZHCQksIDB4NGEJfSwKKwl7IFIwOTAwX0RQTjJDRkcJCSwgMHg0YQl9LAorCXsgUjA5MDBfREFUQTcxQ0ZHCSwgMHg1Mgl9LAorCXsgUjA5MDBfREFUQTcyQ0ZHCSwgMHg1Mgl9LAorCXsgUjA5MDBfUDFfVFNDRkdNCSwgMHhjMAl9LAorCXsgUjA5MDBfUDJfVFNDRkdNCSwgMHhjMAl9LAorCXsgUjA5MDBfUDFfVFNDRkdICSwgMHhlMAl9LCAvKiBEVkItQ0kgdGltaW5ncyAqLworCXsgUjA5MDBfUDJfVFNDRkdICSwgMHhlMAl9LCAvKiBEVkItQ0kgdGltaW5ncyAqLworCXsgUjA5MDBfUDFfVFNTUEVFRAksIDB4NDAJfSwKKwl7IFIwOTAwX1AyX1RTU1BFRUQJLCAweDQwCX0sCit9OworCitzdGF0aWMgY29uc3QgdTE2IFNUVjA5MDBfQ3V0MjBfQWRkT25WYWxbMzJdWzJdID0geworCXsgUjA5MDBfUDJfRE1EQ0ZHMwksIDB4ZTgJfSwKKwl7IFIwOTAwX1AyX0RNRENGRzQJLCAweDEwCX0sCisJeyBSMDkwMF9QMl9DQVJGUkVRCSwgMHgzOAl9LAorCXsgUjA5MDBfUDJfQ0FSSERSCSwgMHgyMAl9LAorCXsgUjA5MDBfUDJfS1JFRlRNRwksIDB4NWEJfSwKKwl7IFIwOTAwX1AyX1NNQVBDT0VGNwksIDB4MDYJfSwKKwl7IFIwOTAwX1AyX1NNQVBDT0VGNgksIDB4MDAJfSwKKwl7IFIwOTAwX1AyX1NNQVBDT0VGNQksIDB4MDQJfSwKKwl7IFIwOTAwX1AyX05PU0NGRwksIDB4MGMJfSwKKwl7IFIwOTAwX1AxX0RNRENGRzMJLCAweGU4CX0sCisJeyBSMDkwMF9QMV9ETURDRkc0CSwgMHgxMAl9LAorCXsgUjA5MDBfUDFfQ0FSRlJFUQksIDB4MzgJfSwKKwl7IFIwOTAwX1AxX0NBUkhEUgksIDB4MjAJfSwKKwl7IFIwOTAwX1AxX0tSRUZUTUcJLCAweDVhCX0sCisJeyBSMDkwMF9QMV9TTUFQQ09FRjcJLCAweDA2CX0sCisJeyBSMDkwMF9QMV9TTUFQQ09FRjYJLCAweDAwCX0sCisJeyBSMDkwMF9QMV9TTUFQQ09FRjUJLCAweDA0CX0sCisJeyBSMDkwMF9QMV9OT1NDRkcJLCAweDBjCX0sCisJeyBSMDkwMF9HQUlOTExSX05GNAksIDB4MjEJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkY1CSwgMHgyMQl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjYJLCAweDIwCX0sCisJeyBSMDkwMF9HQUlOTExSX05GNwksIDB4MUYJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkY4CSwgMHgxRQl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjkJLCAweDFFCX0sCisJeyBSMDkwMF9HQUlOTExSX05GMTAJLCAweDFECX0sCisJeyBSMDkwMF9HQUlOTExSX05GMTEJLCAweDFCCX0sCisJeyBSMDkwMF9HQUlOTExSX05GMTIJLCAweDIwCX0sCisJeyBSMDkwMF9HQUlOTExSX05GMTMJLCAweDIwCX0sCisJeyBSMDkwMF9HQUlOTExSX05GMTQJLCAweDIwCX0sCisJeyBSMDkwMF9HQUlOTExSX05GMTUJLCAweDIwCX0sCisJeyBSMDkwMF9HQUlOTExSX05GMTYJLCAweDIwCX0sCisJeyBSMDkwMF9HQUlOTExSX05GMTcJLCAweDIxCX0KKworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9wcml2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYyZDVhZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3ByaXYuaApAQCAtMCwwICsxLDQzMCBAQAorLyoKKyAqIHN0djA5MDBfcHJpdi5oCisgKgorICogRHJpdmVyIGZvciBTVCBTVFYwOTAwIHNhdGVsbGl0ZSBkZW1vZHVsYXRvciBJQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIFNUIE1pY3JvZWxlY3Ryb25pY3MuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbmV0dXAucnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgU1RWMDkwMF9QUklWX0gKKyNkZWZpbmUgU1RWMDkwMF9QUklWX0gKKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCisjZGVmaW5lIEFCUyhYKSAoKFgpIDwgMCA/ICgtMSAqIChYKSkgOiAoWCkpCisjZGVmaW5lIElOUkFOR0UoWCwgWSwgWikgKCgoKFgpIDw9IChZKSkgJiYgKChZKSA8PSAoWikpKSBcCisJCXx8ICgoKFopIDw9IChZKSkgJiYgKChZKSA8PSAoWCkpKSA/IDEgOiAwKQorCisjaWZuZGVmIE1BS0VXT1JECisjZGVmaW5lIE1BS0VXT1JEKFgsIFkpICgoKFgpIDw8IDgpICsgKFkpKQorI2VuZGlmCisKKyNkZWZpbmUgTFNCKFgpICgoKFgpICYgMHhGRikpCisjZGVmaW5lIE1TQihZKSAoKChZKSA+PiA4KSAmIDB4RkYpCisKKyNpZm5kZWYgVFJVRQorI2RlZmluZSBUUlVFICgxID09IDEpCisjZW5kaWYKKyNpZm5kZWYgRkFMU0UKKyNkZWZpbmUgRkFMU0UgKCFUUlVFKQorI2VuZGlmCisKKyNkZWZpbmUJZG1kX3JlZyhhLCBiLCBjKSBcCisJZG8geyBcCisJCWEgPSAwOyBcCisJCXN3aXRjaCAoZGVtb2QpIHsgXAorCQljYXNlIFNUVjA5MDBfREVNT0RfMTogXAorCQlkZWZhdWx0OiBcCisJCQlhID0gYjsgXAorCQkJYnJlYWs7IFwKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzI6IFwKKwkJCWEgPSBjOyBcCisJCQlicmVhazsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGRtZF9jaG9vc2UoYSwgYikJKGRlbW9kID0gU1RWMDkwMF9ERU1PRF8yID8gYiA6IGEpKQorCitzdGF0aWMgaW50IHN0dmRlYnVnOworCisjZGVmaW5lIGRwcmludGsoYXJncy4uLikgXAorCWRvIHsgXAorCQlpZiAoc3R2ZGVidWcpIFwKKwkJCXByaW50ayhLRVJOX0RFQlVHIGFyZ3MpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBTVFYwOTAwX01BWExPT0tVUFNJWkUgNTAwCisjZGVmaW5lIFNUVjA5MDBfQkxJTkRfU0VBUkNIX0FHQzJfVEggNzAwCisKKy8qIE9uZSBwb2ludCBvZiB0aGUgbG9va3VwIHRhYmxlICovCitzdHJ1Y3Qgc3R2MDAwX2xvb2twb2ludCB7CisJczMyIHJlYWx2YWw7LyogcmVhbCB2YWx1ZSAqLworCXMzMiByZWd2YWw7LyogYmluYXJ5IHZhbHVlICovCit9OworCisvKiBMb29rdXAgdGFibGUgZGVmaW5pdGlvbiAqLworc3RydWN0IHN0djA5MDBfdGFibGV7CisJczMyIHNpemU7LyogU2l6ZSBvZiB0aGUgbG9va3VwIHRhYmxlICovCisJc3RydWN0IHN0djAwMF9sb29rcG9pbnQgdGFibGVbU1RWMDkwMF9NQVhMT09LVVBTSVpFXTsvKiBMb29rdXAgdGFibGUgKi8KK307CisKK2VudW0gZmVfc3R2MDkwMF9lcnJvciB7CisJU1RWMDkwMF9OT19FUlJPUiA9IDAsCisJU1RWMDkwMF9JTlZBTElEX0hBTkRMRSwKKwlTVFYwOTAwX0JBRF9QQVJBTUVURVIsCisJU1RWMDkwMF9JMkNfRVJST1IsCisJU1RWMDkwMF9TRUFSQ0hfRkFJTEVELAorfTsKKworZW51bSBmZV9zdHYwOTAwX2Nsb2NrX3R5cGUgeworCVNUVjA5MDBfVVNFX1JFR0lTVEVSU19ERUZBVUxULAorCVNUVjA5MDBfU0VSSUFMX1BVTkNUX0NMT0NLLC8qU2VyaWFsIHB1bmN0dXJlZCBjbG9jayAqLworCVNUVjA5MDBfU0VSSUFMX0NPTlRfQ0xPQ0ssLypTZXJpYWwgY29udGludWVzIGNsb2NrICovCisJU1RWMDkwMF9QQVJBTExFTF9QVU5DVF9DTE9DSywvKlBhcmFsbGVsIHB1bmN0dXJlZCBjbG9jayAqLworCVNUVjA5MDBfRFZCQ0lfQ0xPQ0svKlBhcmFsbGVsIGNvbnRpbnVlcyBjbG9jayA6IERWQkNJICovCit9OworCitlbnVtIGZlX3N0djA5MDBfc2VhcmNoX3N0YXRlIHsKKwlTVFYwOTAwX1NFQVJDSCA9IDAsCisJU1RWMDkwMF9QTEhfREVURUNURUQsCisJU1RWMDkwMF9EVkJTMl9GT1VORCwKKwlTVFYwOTAwX0RWQlNfRk9VTkQKKworfTsKKworZW51bSBmZV9zdHYwOTAwX2xkcGNfc3RhdGUgeworCVNUVjA5MDBfUEFUSDFfT0ZGX1BBVEgyX09GRiA9IDAsCisJU1RWMDkwMF9QQVRIMV9PTl9QQVRIMl9PRkYgPSAxLAorCVNUVjA5MDBfUEFUSDFfT0ZGX1BBVEgyX09OID0gMiwKKwlTVFYwOTAwX1BBVEgxX09OX1BBVEgyX09OID0gMworfTsKKworZW51bSBmZV9zdHYwOTAwX3NpZ25hbF90eXBlIHsKKwlTVFYwOTAwX05PQUdDMSA9IDAsCisJU1RWMDkwMF9BR0MxT0ssCisJU1RWMDkwMF9OT1RJTUlORywKKwlTVFYwOTAwX0FOQUxPR0NBUlJJRVIsCisJU1RWMDkwMF9USU1JTkdPSywKKwlTVFYwOTAwX05PQUdDMiwKKwlTVFYwOTAwX0FHQzJPSywKKwlTVFYwOTAwX05PQ0FSUklFUiwKKwlTVFYwOTAwX0NBUlJJRVJPSywKKwlTVFYwOTAwX05PREFUQSwKKwlTVFYwOTAwX0RBVEFPSywKKwlTVFYwOTAwX09VVE9GUkFOR0UsCisJU1RWMDkwMF9SQU5HRU9LCit9OworCitlbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIHsKKwlTVFYwOTAwX0RFTU9EXzEsCisJU1RWMDkwMF9ERU1PRF8yCit9OworCitlbnVtIGZlX3N0djA5MDBfdHJhY2tpbmdfc3RhbmRhcmQgeworCVNUVjA5MDBfRFZCUzFfU1RBTkRBUkQsLyogRm91bmQgU3RhbmRhcmQqLworCVNUVjA5MDBfRFZCUzJfU1RBTkRBUkQsCisJU1RWMDkwMF9EU1NfU1RBTkRBUkQsCisJU1RWMDkwMF9UVVJCT0NPREVfU1RBTkRBUkQsCisJU1RWMDkwMF9VTktOT1dOX1NUQU5EQVJECit9OworCitlbnVtIGZlX3N0djA5MDBfc2VhcmNoX3N0YW5kYXJkIHsKKwlTVFYwOTAwX0FVVE9fU0VBUkNILAorCVNUVjA5MDBfU0VBUkNIX0RWQlMxLC8qIFNlYXJjaCBTdGFuZGFyZCovCisJU1RWMDkwMF9TRUFSQ0hfRFZCUzIsCisJU1RWMDkwMF9TRUFSQ0hfRFNTLAorCVNUVjA5MDBfU0VBUkNIX1RVUkJPQ09ERQorfTsKKworZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9hbGdvIHsKKwlTVFYwOTAwX0JMSU5EX1NFQVJDSCwvKiBvZmZzZXQgZnJlcSBhbmQgU1IgYXJlIFVua25vd24gKi8KKwlTVFYwOTAwX0NPTERfU1RBUlQsLyogb25seSB0aGUgU1IgaXMga25vd24gKi8KKwlTVFYwOTAwX1dBUk1fU1RBUlQvKiBvZmZzZXQgZnJlcSBhbmQgU1IgYXJlIGtub3duICovCit9OworCitlbnVtIGZlX3N0djA5MDBfbW9kdWxhdGlvbiB7CisJU1RWMDkwMF9RUFNLLAorCVNUVjA5MDBfOFBTSywKKwlTVFYwOTAwXzE2QVBTSywKKwlTVFYwOTAwXzMyQVBTSywKKwlTVFYwOTAwX1VOS05PV04KK307CisKK2VudW0gZmVfc3R2MDkwMF9tb2Rjb2RlIHsKKwlTVFYwOTAwX0RVTU1ZX1BMRiwKKwlTVFYwOTAwX1FQU0tfMTQsCisJU1RWMDkwMF9RUFNLXzEzLAorCVNUVjA5MDBfUVBTS18yNSwKKwlTVFYwOTAwX1FQU0tfMTIsCisJU1RWMDkwMF9RUFNLXzM1LAorCVNUVjA5MDBfUVBTS18yMywKKwlTVFYwOTAwX1FQU0tfMzQsCisJU1RWMDkwMF9RUFNLXzQ1LAorCVNUVjA5MDBfUVBTS181NiwKKwlTVFYwOTAwX1FQU0tfODksCisJU1RWMDkwMF9RUFNLXzkxMCwKKwlTVFYwOTAwXzhQU0tfMzUsCisJU1RWMDkwMF84UFNLXzIzLAorCVNUVjA5MDBfOFBTS18zNCwKKwlTVFYwOTAwXzhQU0tfNTYsCisJU1RWMDkwMF84UFNLXzg5LAorCVNUVjA5MDBfOFBTS185MTAsCisJU1RWMDkwMF8xNkFQU0tfMjMsCisJU1RWMDkwMF8xNkFQU0tfMzQsCisJU1RWMDkwMF8xNkFQU0tfNDUsCisJU1RWMDkwMF8xNkFQU0tfNTYsCisJU1RWMDkwMF8xNkFQU0tfODksCisJU1RWMDkwMF8xNkFQU0tfOTEwLAorCVNUVjA5MDBfMzJBUFNLXzM0LAorCVNUVjA5MDBfMzJBUFNLXzQ1LAorCVNUVjA5MDBfMzJBUFNLXzU2LAorCVNUVjA5MDBfMzJBUFNLXzg5LAorCVNUVjA5MDBfMzJBUFNLXzkxMCwKKwlTVFYwOTAwX01PRENPREVfVU5LTk9XTgorfTsKKworZW51bSBmZV9zdHYwOTAwX2ZlYyB7LypEVkJTMSwgRFNTIGFuZCB0dXJibyBjb2RlIHB1bmN0dXJlIHJhdGUqLworCVNUVjA5MDBfRkVDXzFfMiA9IDAsCisJU1RWMDkwMF9GRUNfMl8zLAorCVNUVjA5MDBfRkVDXzNfNCwKKwlTVFYwOTAwX0ZFQ180XzUsLypmb3IgdHVyYm8gY29kZSBvbmx5Ki8KKwlTVFYwOTAwX0ZFQ181XzYsCisJU1RWMDkwMF9GRUNfNl83LC8qZm9yIERTUyBvbmx5ICovCisJU1RWMDkwMF9GRUNfN184LAorCVNUVjA5MDBfRkVDXzhfOSwvKmZvciB0dXJibyBjb2RlIG9ubHkqLworCVNUVjA5MDBfRkVDX1VOS05PV04KK307CisKK2VudW0gZmVfc3R2MDkwMF9mcmFtZV9sZW5ndGggeworCVNUVjA5MDBfTE9OR19GUkFNRSwKKwlTVFYwOTAwX1NIT1JUX0ZSQU1FCit9OworCitlbnVtIGZlX3N0djA5MDBfcGlsb3QgeworCVNUVjA5MDBfUElMT1RTX09GRiwKKwlTVFYwOTAwX1BJTE9UU19PTgorfTsKKworZW51bSBmZV9zdHYwOTAwX3JvbGxvZmYgeworCVNUVjA5MDBfMzUsCisJU1RWMDkwMF8yNSwKKwlTVFYwOTAwXzIwCit9OworCitlbnVtIGZlX3N0djA5MDBfc2VhcmNoX2lxIHsKKwlTVFYwOTAwX0lRX0FVVE8sCisJU1RWMDkwMF9JUV9BVVRPX05PUk1BTF9GSVJTVCwKKwlTVFYwOTAwX0lRX0ZPUkNFX05PUk1BTCwKKwlTVFYwOTAwX0lRX0ZPUkNFX1NXQVBQRUQKK307CisKK2VudW0gc3R2MDkwMF9pcV9pbnZlcnNpb24geworCVNUVjA5MDBfSVFfTk9STUFMLAorCVNUVjA5MDBfSVFfU1dBUFBFRAorfTsKKworZW51bSBmZV9zdHYwOTAwX2Rpc2VxY19tb2RlIHsKKwlTVFYwOTAwXzIyS0haX0NvbnRpbnVlcyA9IDAsCisJU1RWMDkwMF9ESVNFUUNfMl8zX1BXTSA9IDIsCisJU1RWMDkwMF9ESVNFUUNfM18zX1BXTSA9IDMsCisJU1RWMDkwMF9ESVNFUUNfMl8zX0VOVkVMT1AgPSA0LAorCVNUVjA5MDBfRElTRVFDXzNfM19FTlZFTE9QID0gNQorfTsKKworZW51bSBmZV9zdHYwOTAwX2RlbW9kX21vZGUgeworCVNUVjA5MDBfU0lOR0xFID0gMCwKKwlTVFYwOTAwX0RVQUwKK307CisKK3N0cnVjdCBzdHYwOTAwX2luaXRfcGFyYW1zeworCXUzMglkbWRfcmVmX2NsazsvKiBSZWZyZW5jZSxJbnB1dCBjbG9jayBmb3IgdGhlIGRlbW9kIGluIEh6ICovCisKKwkvKiBEZW1vZHVsYXRvciBUeXBlIChzaW5nbGUgZGVtb2Qgb3IgZHVhbCBkZW1vZCkgKi8KKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbW9kZQlkZW1vZF9tb2RlOworCWVudW0gZmVfc3R2MDkwMF9yb2xsb2ZmCQlyb2xsb2ZmOworCWVudW0gZmVfc3R2MDkwMF9jbG9ja190eXBlCXBhdGgxX3RzX2Nsb2NrOworCisJdTgJdHVuMV9tYWRkcmVzczsKKwlpbnQJdHVuZXIxX2FkYzsKKworCS8qIElRIGZyb20gdGhlIHR1bmVyMSB0byB0aGUgZGVtb2QgKi8KKwllbnVtIHN0djA5MDBfaXFfaW52ZXJzaW9uCXR1bjFfaXFfaW52ZXJzaW9uOworCWVudW0gZmVfc3R2MDkwMF9jbG9ja190eXBlCXBhdGgyX3RzX2Nsb2NrOworCisJdTgJdHVuMl9tYWRkcmVzczsKKwlpbnQJdHVuZXIyX2FkYzsKKworCS8qIElRIGZyb20gdGhlIHR1bmVyMiB0byB0aGUgZGVtb2QgKi8KKwllbnVtIHN0djA5MDBfaXFfaW52ZXJzaW9uCXR1bjJfaXFfaW52ZXJzaW9uOworfTsKKworc3RydWN0IHN0djA5MDBfc2VhcmNoX3BhcmFtcyB7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bQlwYXRoOy8qIFBhdGggVXNlZCBkZW1vZDEgb3IgMiAqLworCisJdTMyCWZyZXF1ZW5jeTsvKiBUcmFuc3BvbmRlciBmcmVxdWVuY3kgKGluIEtIeikgKi8KKwl1MzIJc3ltYm9sX3JhdGU7LyogVHJhbnNwb25kZXIgc3ltYm9sIHJhdGUgIChpbiBiZHMpKi8KKwl1MzIJc2VhcmNoX3JhbmdlOy8qIFJhbmdlIG9mIHRoZSBzZWFyY2ggKGluIEh6KSAqLworCisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9zdGFuZGFyZAlzdGFuZGFyZDsKKwllbnVtIGZlX3N0djA5MDBfbW9kdWxhdGlvbgltb2R1bGF0aW9uOworCWVudW0gZmVfc3R2MDkwMF9mZWMJCWZlYzsKKwllbnVtIGZlX3N0djA5MDBfbW9kY29kZQkJbW9kY29kZTsKKwllbnVtIGZlX3N0djA5MDBfc2VhcmNoX2lxCWlxX2ludmVyc2lvbjsKKwllbnVtIGZlX3N0djA5MDBfc2VhcmNoX2FsZ28Jc2VhcmNoX2FsZ287CisKK307CisKK3N0cnVjdCBzdHYwOTAwX3NpZ25hbF9pbmZvIHsKKwlpbnQJbG9ja2VkOy8qIFRyYW5zcG9uZGVyIGxvY2tlZCAqLworCXUzMglmcmVxdWVuY3k7LyogVHJhbnNwb25kZXIgZnJlcXVlbmN5IChpbiBLSHopICovCisJdTMyCXN5bWJvbF9yYXRlOy8qIFRyYW5zcG9uZGVyIHN5bWJvbCByYXRlICAoaW4gTWJkcykgKi8KKworCWVudW0gZmVfc3R2MDkwMF90cmFja2luZ19zdGFuZGFyZAlzdGFuZGFyZDsKKwllbnVtIGZlX3N0djA5MDBfZmVjCQkJZmVjOworCWVudW0gZmVfc3R2MDkwMF9tb2Rjb2RlCQkJbW9kY29kZTsKKwllbnVtIGZlX3N0djA5MDBfbW9kdWxhdGlvbgkJbW9kdWxhdGlvbjsKKwllbnVtIGZlX3N0djA5MDBfcGlsb3QJCQlwaWxvdDsKKwllbnVtIGZlX3N0djA5MDBfZnJhbWVfbGVuZ3RoCQlmcmFtZV9sZW5ndGg7CisJZW51bSBzdHYwOTAwX2lxX2ludmVyc2lvbgkJc3BlY3RydW07CisJZW51bSBmZV9zdHYwOTAwX3JvbGxvZmYJCQlyb2xsb2ZmOworCisJczMyIFBvd2VyOy8qIFBvd2VyIG9mIHRoZSBSRiBzaWduYWwgKGRCbSkgKi8KKwlzMzIgQ19OOy8qIENhcnJpZXIgdG8gbm9pc2UgcmF0aW8gKGRCIHgxMCkqLworCXUzMiBCRVI7LyogQml0IGVycm9yIHJhdGUgKHgxMF43KSAqLworCit9OworCitzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbHsKKwlzMzIJcXVhcnR6OworCXMzMgltY2xrOworCS8qIG1hbnVhbCBSb2xsT2ZmIGZvciBEVkJTMS9EU1Mgb25seSAqLworCWVudW0gZmVfc3R2MDkwMF9yb2xsb2ZmCQlyb2xsb2ZmOworCS8qIERlbW9kdWxhdG9yIHVzZSBmb3Igc2luZ2xlIGRlbW9kIG9yIGZvciBkdWFsIGRlbW9kKSAqLworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9tb2RlCWRlbW9kX21vZGU7CisKKwkvKkRlbW9kIDEqLworCXMzMgl0dW5lcjFfZnJlcTsKKwlzMzIJdHVuZXIxX2J3OworCXMzMglkbWQxX3N5bWJvbF9yYXRlOworCXMzMglkbWQxX3NyY2hfcmFuZ2U7CisKKwkvKiBhbGdvcml0aG0gZm9yIHNlYXJjaCBCbGluZCwgQ29sZCBvciBXYXJtKi8KKwllbnVtIGZlX3N0djA5MDBfc2VhcmNoX2FsZ28JZG1kMV9zcmNoX2FsZ287CisJLyogc2VhcmNoIHN0YW5kYXJkOiBBdXRvLCBEVkJTMS9EU1Mgb25seSBvciBEVkJTMiBvbmx5Ki8KKwllbnVtIGZlX3N0djA5MDBfc2VhcmNoX3N0YW5kYXJkCWRtZDFfc3JjaF9zdGFuZGFyZDsKKwkvKiBpbnZlcnNpb24gc2VhcmNoIDogYXV0bywgYXV0byBub3JtYSBmaXJzdCwgbm9ybWFsIG9yIGludmVydGVkICovCisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9pcQlkbWQxX3NyY2hfaXFfaW52OworCWVudW0gZmVfc3R2MDkwMF9tb2Rjb2RlCQlkbWQxX21vZGNvZGU7CisJZW51bSBmZV9zdHYwOTAwX21vZHVsYXRpb24JZG1kMV9tb2R1bGF0aW9uOworCWVudW0gZmVfc3R2MDkwMF9mZWMJCWRtZDFfZmVjOworCisJc3RydWN0IHN0djA5MDBfc2lnbmFsX2luZm8JZG1kMV9yc2x0czsKKwllbnVtIGZlX3N0djA5MDBfc2lnbmFsX3R5cGUJZG1kMV9zdGF0ZTsKKworCWVudW0gZmVfc3R2MDkwMF9lcnJvcgkJZG1kMV9lcnI7CisKKwkvKkRlbW9kIDIqLworCXMzMgl0dW5lcjJfZnJlcTsKKwlzMzIJdHVuZXIyX2J3OworCXMzMglkbWQyX3N5bWJvbF9yYXRlOworCXMzMglkbWQyX3NyY2hfcmFuZ2U7CisKKwllbnVtIGZlX3N0djA5MDBfc2VhcmNoX2FsZ28JZG1kMl9zcmNoX2FsZ287CisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9zdGFuZGFyZAlkbWQyX3NyY2hfc3RuZHJkOworCS8qIGludmVyc2lvbiBzZWFyY2ggOiBhdXRvLCBhdXRvIG5vcm1hbCBmaXJzdCwgbm9ybWFsIG9yIGludmVydGVkICovCisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9pcQlkbWQyX3NyY2hfaXFfaW52OworCWVudW0gZmVfc3R2MDkwMF9tb2Rjb2RlCQlkbWQyX21vZGNvZGU7CisJZW51bSBmZV9zdHYwOTAwX21vZHVsYXRpb24JZG1kMl9tb2R1bGF0aW9uOworCWVudW0gZmVfc3R2MDkwMF9mZWMJCWRtZDJfZmVjOworCisJLyogcmVzdWx0cyBvZiB0aGUgc2VhcmNoKi8KKwlzdHJ1Y3Qgc3R2MDkwMF9zaWduYWxfaW5mbwlkbWQyX3JzbHRzOworCS8qIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNlYXJjaCBhbGdvcml0aG0gKi8KKwllbnVtIGZlX3N0djA5MDBfc2lnbmFsX3R5cGUJZG1kMl9zdGF0ZTsKKworCWVudW0gZmVfc3R2MDkwMF9lcnJvcgkJZG1kMl9lcnI7CisKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIJKmkyY19hZGFwOworCXU4CQkJaTJjX2FkZHI7CisJdTgJCQljbGttb2RlOy8qIDAgZm9yIENMS0ksIDIgZm9yIFhUQUxJICovCisJdTgJCQljaGlwX2lkOworCWVudW0gZmVfc3R2MDkwMF9lcnJvcgllcnJzOworCWludCBkbWRzX3VzZWQ7Cit9OworCisvKiBzdGF0ZSBmb3IgZWFjaCBkZW1vZCAqLworc3RydWN0IHN0djA5MDBfc3RhdGUgeworCS8qIHBvaW50ZXIgZm9yIGludGVybmFsIHBhcmFtcywgb25lIGZvciBlYWNoIHBhaXIgb2YgZGVtb2RzICovCisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwJCSppbnRlcm5hbDsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIJCSppMmNfYWRhcDsKKwljb25zdCBzdHJ1Y3Qgc3R2MDkwMF9jb25maWcJKmNvbmZpZzsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kCQlmcm9udGVuZDsKKwlpbnQgZGVtb2Q7Cit9OworCitleHRlcm4gczMyIGdlMmNvbXAoczMyIGEsIHMzMiB3aWR0aCk7CisKK2V4dGVybiB2b2lkIHN0djA5MDBfd3JpdGVfcmVnKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQl1MTYgcmVnX2FkZHIsIHU4IHJlZ19kYXRhKTsKKworZXh0ZXJuIHU4IHN0djA5MDBfcmVhZF9yZWcoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCXUxNiByZWdfYWRkcik7CisKK2V4dGVybiB2b2lkIHN0djA5MDBfd3JpdGVfYml0cyhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJdTMyIGxhYmVsLCB1OCB2YWwpOworCitleHRlcm4gdTggc3R2MDkwMF9nZXRfYml0cyhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJdTMyIGxhYmVsKTsKKworZXh0ZXJuIGludCBzdHYwOTAwX2dldF9kZW1vZF9sb2NrKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kLCBzMzIgdGltZV9vdXQpOworZXh0ZXJuIGludCBzdHYwOTAwX2NoZWNrX3NpZ25hbF9wcmVzZW5jZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCk7CisKK2V4dGVybiBlbnVtIGZlX3N0djA5MDBfc2lnbmFsX3R5cGUgc3R2MDkwMF9hbGdvKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKTsKKworZXh0ZXJuIHZvaWQgc3R2MDkwMF9zZXRfdHVuZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiBmcmVxdWVuY3ksCisJCQkJdTMyIGJhbmR3aWR0aCk7CitleHRlcm4gdm9pZCBzdHYwOTAwX3NldF9iYW5kd2lkdGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiBiYW5kd2lkdGgpOworCitleHRlcm4gdm9pZCBzdHYwOTAwX3N0YXJ0X3NlYXJjaChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCk7CisKK2V4dGVybiB1OCBzdHYwOTAwX2dldF9vcHRpbV9jYXJyX2xvb3AoczMyIHNyYXRlLAorCQkJCWVudW0gZmVfc3R2MDkwMF9tb2Rjb2RlIG1vZGNvZGUsCisJCQkJczMyIHBpbG90LCB1OCBjaGlwX2lkKTsKKworZXh0ZXJuIHU4IHN0djA5MDBfZ2V0X29wdGltX3Nob3J0X2NhcnJfbG9vcChzMzIgc3JhdGUsCisJCQkJZW51bSBmZV9zdHYwOTAwX21vZHVsYXRpb24gbW9kdWxhdGlvbiwKKwkJCQl1OCBjaGlwX2lkKTsKKworZXh0ZXJuIHZvaWQgc3R2MDkwMF9zdG9wX2FsbF9zMl9tb2Rjb2Qoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpOworCitleHRlcm4gdm9pZCBzdHYwOTAwX2FjdGl2YXRlX3MyX21vZGNvZGUoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpOworCitleHRlcm4gdm9pZCBzdHYwOTAwX2FjdGl2YXRlX3MyX21vZGNvZGVfc2luZ2xlKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKTsKKworZXh0ZXJuIGVudW0gZmVfc3R2MDkwMF90cmFja2luZ19zdGFuZGFyZCBzdHYwOTAwX2dldF9zdGFuZGFyZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9yZWcuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NGY5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9yZWcuaApAQCAtMCwwICsxLDM3ODcgQEAKKy8qCisgKiBzdHYwOTAwX3JlZy5oCisgKgorICogRHJpdmVyIGZvciBTVCBTVFYwOTAwIHNhdGVsbGl0ZSBkZW1vZHVsYXRvciBJQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIFNUIE1pY3JvZWxlY3Ryb25pY3MuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbmV0dXAucnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgU1RWMDkwMF9SRUdfSAorI2RlZmluZSBTVFYwOTAwX1JFR19ICisKKy8qTUlEKi8KKyNkZWZpbmUgUjA5MDBfTUlEICAweGYxMDAKKyNkZWZpbmUgRjA5MDBfTUNISVBfSURFTlQgIDB4ZjEwMDAwZjAKKyNkZWZpbmUgRjA5MDBfTVJFTEVBU0UgIDB4ZjEwMDAwMGYKKworLypEQUNSMSovCisjZGVmaW5lIFIwOTAwX0RBQ1IxICAweGYxMTMKKyNkZWZpbmUgRjA5MDBfREFDX01PREUgIDB4ZjExMzAwZTAKKyNkZWZpbmUgRjA5MDBfREFDX1ZBTFVFMSAgMHhmMTEzMDAwZgorCisvKkRBQ1IyKi8KKyNkZWZpbmUgUjA5MDBfREFDUjIgIDB4ZjExNAorI2RlZmluZSBGMDkwMF9EQUNfVkFMVUUwICAweGYxMTQwMGZmCisKKy8qT1VUQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfT1VUQ0ZHICAweGYxMWMKKyNkZWZpbmUgRjA5MDBfSU5WX0RBVEE2ICAweGYxMWMwMDgwCisjZGVmaW5lIEYwOTAwX09VVFNFUlJTMV9IWiAgMHhmMTFjMDA0MAorI2RlZmluZSBGMDkwMF9PVVRTRVJSUzJfSFogIDB4ZjExYzAwMjAKKyNkZWZpbmUgRjA5MDBfT1VUU0VSUlMzX0haICAweGYxMWMwMDEwCisjZGVmaW5lIEYwOTAwX09VVFBBUlJTM19IWiAgMHhmMTFjMDAwOAorI2RlZmluZSBGMDkwMF9PVVRIWjNfQ09OVFJPTCAgMHhmMTFjMDAwNworCisvKk1PREVDRkcqLworI2RlZmluZSBSMDkwMF9NT0RFQ0ZHICAweGYxMWQKKyNkZWZpbmUgRjA5MDBfRkVDU1BZX1NFTF8yICAweGYxMWQwMDIwCisjZGVmaW5lIEYwOTAwX0hXQVJFX1NFTF8yICAweGYxMWQwMDEwCisjZGVmaW5lIEYwOTAwX1BLVERFTF9TRUxfMiAgMHhmMTFkMDAwOAorI2RlZmluZSBGMDkwMF9ESVNFUUNfU0VMXzIgIDB4ZjExZDAwMDQKKyNkZWZpbmUgRjA5MDBfVklUX1NFTF8yICAweGYxMWQwMDAyCisjZGVmaW5lIEYwOTAwX0RFTU9EX1NFTF8yICAweGYxMWQwMDAxCisKKy8qSVJRU1RBVFVTMyovCisjZGVmaW5lIFIwOTAwX0lSUVNUQVRVUzMgIDB4ZjEyMAorI2RlZmluZSBGMDkwMF9TUExMX0xPQ0sgIDB4ZjEyMDAwMjAKKyNkZWZpbmUgRjA5MDBfU1NUUkVBTV9MQ0tfMyAgMHhmMTIwMDAxMAorI2RlZmluZSBGMDkwMF9TU1RSRUFNX0xDS18yICAweGYxMjAwMDA4CisjZGVmaW5lIEYwOTAwX1NTVFJFQU1fTENLXzEgIDB4ZjEyMDAwMDQKKyNkZWZpbmUgRjA5MDBfU0RWQlMxX1BSRl8yICAweGYxMjAwMDAyCisjZGVmaW5lIEYwOTAwX1NEVkJTMV9QUkZfMSAgMHhmMTIwMDAwMQorCisvKklSUVNUQVRVUzIqLworI2RlZmluZSBSMDkwMF9JUlFTVEFUVVMyICAweGYxMjEKKyNkZWZpbmUgRjA5MDBfU1NQWV9FTkRTSU1fMyAgMHhmMTIxMDA4MAorI2RlZmluZSBGMDkwMF9TU1BZX0VORFNJTV8yICAweGYxMjEwMDQwCisjZGVmaW5lIEYwOTAwX1NTUFlfRU5EU0lNXzEgIDB4ZjEyMTAwMjAKKyNkZWZpbmUgRjA5MDBfU1BLVERFTF9FUlJPUl8yICAweGYxMjEwMDEwCisjZGVmaW5lIEYwOTAwX1NQS1RERUxfTE9DS0JfMiAgMHhmMTIxMDAwOAorI2RlZmluZSBGMDkwMF9TUEtUREVMX0xPQ0tfMiAgMHhmMTIxMDAwNAorI2RlZmluZSBGMDkwMF9TUEtUREVMX0VSUk9SXzEgIDB4ZjEyMTAwMDIKKyNkZWZpbmUgRjA5MDBfU1BLVERFTF9MT0NLQl8xICAweGYxMjEwMDAxCisKKy8qSVJRU1RBVFVTMSovCisjZGVmaW5lIFIwOTAwX0lSUVNUQVRVUzEgIDB4ZjEyMgorI2RlZmluZSBGMDkwMF9TUEtUREVMX0xPQ0tfMSAgMHhmMTIyMDA4MAorI2RlZmluZSBGMDkwMF9TRVhUUElOQjIgIDB4ZjEyMjAwNDAKKyNkZWZpbmUgRjA5MDBfU0VYVFBJTjIgIDB4ZjEyMjAwMjAKKyNkZWZpbmUgRjA5MDBfU0VYVFBJTkIxICAweGYxMjIwMDEwCisjZGVmaW5lIEYwOTAwX1NFWFRQSU4xICAweGYxMjIwMDA4CisjZGVmaW5lIEYwOTAwX1NERU1PRF9MT0NLQl8yICAweGYxMjIwMDA0CisjZGVmaW5lIEYwOTAwX1NERU1PRF9MT0NLXzIgIDB4ZjEyMjAwMDIKKyNkZWZpbmUgRjA5MDBfU0RFTU9EX0lSUV8yICAweGYxMjIwMDAxCisKKy8qSVJRU1RBVFVTMCovCisjZGVmaW5lIFIwOTAwX0lSUVNUQVRVUzAgIDB4ZjEyMworI2RlZmluZSBGMDkwMF9TREVNT0RfTE9DS0JfMSAgMHhmMTIzMDA4MAorI2RlZmluZSBGMDkwMF9TREVNT0RfTE9DS18xICAweGYxMjMwMDQwCisjZGVmaW5lIEYwOTAwX1NERU1PRF9JUlFfMSAgMHhmMTIzMDAyMAorI2RlZmluZSBGMDkwMF9TQkNIX0VSUkZMQUcgIDB4ZjEyMzAwMTAKKyNkZWZpbmUgRjA5MDBfU0RJU0VRQzJSWF9JUlEgIDB4ZjEyMzAwMDgKKyNkZWZpbmUgRjA5MDBfU0RJU0VRQzJUWF9JUlEgIDB4ZjEyMzAwMDQKKyNkZWZpbmUgRjA5MDBfU0RJU0VRQzFSWF9JUlEgIDB4ZjEyMzAwMDIKKyNkZWZpbmUgRjA5MDBfU0RJU0VRQzFUWF9JUlEgIDB4ZjEyMzAwMDEKKworLypJUlFNQVNLMyovCisjZGVmaW5lIFIwOTAwX0lSUU1BU0szICAweGYxMjQKKyNkZWZpbmUgRjA5MDBfTVBMTF9MT0NLICAweGYxMjQwMDIwCisjZGVmaW5lIEYwOTAwX01TVFJFQU1fTENLXzMgIDB4ZjEyNDAwMTAKKyNkZWZpbmUgRjA5MDBfTVNUUkVBTV9MQ0tfMiAgMHhmMTI0MDAwOAorI2RlZmluZSBGMDkwMF9NU1RSRUFNX0xDS18xICAweGYxMjQwMDA0CisjZGVmaW5lIEYwOTAwX01EVkJTMV9QUkZfMiAgMHhmMTI0MDAwMgorI2RlZmluZSBGMDkwMF9NRFZCUzFfUFJGXzEgIDB4ZjEyNDAwMDEKKworLypJUlFNQVNLMiovCisjZGVmaW5lIFIwOTAwX0lSUU1BU0syICAweGYxMjUKKyNkZWZpbmUgRjA5MDBfTVNQWV9FTkRTSU1fMyAgMHhmMTI1MDA4MAorI2RlZmluZSBGMDkwMF9NU1BZX0VORFNJTV8yICAweGYxMjUwMDQwCisjZGVmaW5lIEYwOTAwX01TUFlfRU5EU0lNXzEgIDB4ZjEyNTAwMjAKKyNkZWZpbmUgRjA5MDBfTVBLVERFTF9FUlJPUl8yICAweGYxMjUwMDEwCisjZGVmaW5lIEYwOTAwX01QS1RERUxfTE9DS0JfMiAgMHhmMTI1MDAwOAorI2RlZmluZSBGMDkwMF9NUEtUREVMX0xPQ0tfMiAgMHhmMTI1MDAwNAorI2RlZmluZSBGMDkwMF9NUEtUREVMX0VSUk9SXzEgIDB4ZjEyNTAwMDIKKyNkZWZpbmUgRjA5MDBfTVBLVERFTF9MT0NLQl8xICAweGYxMjUwMDAxCisKKy8qSVJRTUFTSzEqLworI2RlZmluZSBSMDkwMF9JUlFNQVNLMSAgMHhmMTI2CisjZGVmaW5lIEYwOTAwX01QS1RERUxfTE9DS18xICAweGYxMjYwMDgwCisjZGVmaW5lIEYwOTAwX01FWFRQSU5CMiAgMHhmMTI2MDA0MAorI2RlZmluZSBGMDkwMF9NRVhUUElOMiAgMHhmMTI2MDAyMAorI2RlZmluZSBGMDkwMF9NRVhUUElOQjEgIDB4ZjEyNjAwMTAKKyNkZWZpbmUgRjA5MDBfTUVYVFBJTjEgIDB4ZjEyNjAwMDgKKyNkZWZpbmUgRjA5MDBfTURFTU9EX0xPQ0tCXzIgIDB4ZjEyNjAwMDQKKyNkZWZpbmUgRjA5MDBfTURFTU9EX0xPQ0tfMiAgMHhmMTI2MDAwMgorI2RlZmluZSBGMDkwMF9NREVNT0RfSVJRXzIgIDB4ZjEyNjAwMDEKKworLypJUlFNQVNLMCovCisjZGVmaW5lIFIwOTAwX0lSUU1BU0swICAweGYxMjcKKyNkZWZpbmUgRjA5MDBfTURFTU9EX0xPQ0tCXzEgIDB4ZjEyNzAwODAKKyNkZWZpbmUgRjA5MDBfTURFTU9EX0xPQ0tfMSAgMHhmMTI3MDA0MAorI2RlZmluZSBGMDkwMF9NREVNT0RfSVJRXzEgIDB4ZjEyNzAwMjAKKyNkZWZpbmUgRjA5MDBfTUJDSF9FUlJGTEFHICAweGYxMjcwMDEwCisjZGVmaW5lIEYwOTAwX01ESVNFUUMyUlhfSVJRICAweGYxMjcwMDA4CisjZGVmaW5lIEYwOTAwX01ESVNFUUMyVFhfSVJRICAweGYxMjcwMDA0CisjZGVmaW5lIEYwOTAwX01ESVNFUUMxUlhfSVJRICAweGYxMjcwMDAyCisjZGVmaW5lIEYwOTAwX01ESVNFUUMxVFhfSVJRICAweGYxMjcwMDAxCisKKy8qSTJDQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfSTJDQ0ZHICAweGYxMjkKKyNkZWZpbmUgRjA5MDBfSTJDMl9GQVNUTU9ERSAgMHhmMTI5MDA4MAorI2RlZmluZSBGMDkwMF9TVEFUVVNfV1IyICAweGYxMjkwMDQwCisjZGVmaW5lIEYwOTAwX0kyQzJBRERSX0lOQyAgMHhmMTI5MDAzMAorI2RlZmluZSBGMDkwMF9JMkNfRkFTVE1PREUgIDB4ZjEyOTAwMDgKKyNkZWZpbmUgRjA5MDBfU1RBVFVTX1dSICAweGYxMjkwMDA0CisjZGVmaW5lIEYwOTAwX0kyQ0FERFJfSU5DICAweGYxMjkwMDAzCisKKy8qUDFfSTJDUlBUKi8KKyNkZWZpbmUgUjA5MDBfUDFfSTJDUlBUICAweGYxMmEKKyNkZWZpbmUgRjA5MDBfUDFfSTJDVF9PTiAgMHhmMTJhMDA4MAorI2RlZmluZSBGMDkwMF9QMV9FTkFSUFRfTEVWRUwgIDB4ZjEyYTAwNzAKKyNkZWZpbmUgRjA5MDBfUDFfU0NMVF9ERUxBWSAgMHhmMTJhMDAwOAorI2RlZmluZSBGMDkwMF9QMV9TVE9QX0VOQUJMRSAgMHhmMTJhMDAwNAorI2RlZmluZSBGMDkwMF9QMV9TVE9QX1NEQVQyU0RBICAweGYxMmEwMDAyCisKKy8qUDJfSTJDUlBUKi8KKyNkZWZpbmUgUjA5MDBfUDJfSTJDUlBUICAweGYxMmIKKyNkZWZpbmUgRjA5MDBfUDJfSTJDVF9PTiAgMHhmMTJiMDA4MAorI2RlZmluZSBGMDkwMF9QMl9FTkFSUFRfTEVWRUwgIDB4ZjEyYjAwNzAKKyNkZWZpbmUgRjA5MDBfUDJfU0NMVF9ERUxBWSAgMHhmMTJiMDAwOAorI2RlZmluZSBGMDkwMF9QMl9TVE9QX0VOQUJMRSAgMHhmMTJiMDAwNAorI2RlZmluZSBGMDkwMF9QMl9TVE9QX1NEQVQyU0RBICAweGYxMmIwMDAyCisKKy8qQ0xLSTJDRkcqLworI2RlZmluZSBSMDkwMF9DTEtJMkNGRyAgMHhmMTQwCisjZGVmaW5lIEYwOTAwX0NMS0kyX09QRCAgMHhmMTQwMDA4MAorI2RlZmluZSBGMDkwMF9DTEtJMl9DT05GSUcgIDB4ZjE0MDAwN2UKKyNkZWZpbmUgRjA5MDBfQ0xLSTJfWE9SICAweGYxNDAwMDAxCisKKy8qR1BJTzFDRkcqLworI2RlZmluZSBSMDkwMF9HUElPMUNGRyAgMHhmMTQxCisjZGVmaW5lIEYwOTAwX0dQSU8xX09QRCAgMHhmMTQxMDA4MAorI2RlZmluZSBGMDkwMF9HUElPMV9DT05GSUcgIDB4ZjE0MTAwN2UKKyNkZWZpbmUgRjA5MDBfR1BJTzFfWE9SICAweGYxNDEwMDAxCisKKy8qR1BJTzJDRkcqLworI2RlZmluZSBSMDkwMF9HUElPMkNGRyAgMHhmMTQyCisjZGVmaW5lIEYwOTAwX0dQSU8yX09QRCAgMHhmMTQyMDA4MAorI2RlZmluZSBGMDkwMF9HUElPMl9DT05GSUcgIDB4ZjE0MjAwN2UKKyNkZWZpbmUgRjA5MDBfR1BJTzJfWE9SICAweGYxNDIwMDAxCisKKy8qR1BJTzNDRkcqLworI2RlZmluZSBSMDkwMF9HUElPM0NGRyAgMHhmMTQzCisjZGVmaW5lIEYwOTAwX0dQSU8zX09QRCAgMHhmMTQzMDA4MAorI2RlZmluZSBGMDkwMF9HUElPM19DT05GSUcgIDB4ZjE0MzAwN2UKKyNkZWZpbmUgRjA5MDBfR1BJTzNfWE9SICAweGYxNDMwMDAxCisKKy8qR1BJTzRDRkcqLworI2RlZmluZSBSMDkwMF9HUElPNENGRyAgMHhmMTQ0CisjZGVmaW5lIEYwOTAwX0dQSU80X09QRCAgMHhmMTQ0MDA4MAorI2RlZmluZSBGMDkwMF9HUElPNF9DT05GSUcgIDB4ZjE0NDAwN2UKKyNkZWZpbmUgRjA5MDBfR1BJTzRfWE9SICAweGYxNDQwMDAxCisKKy8qR1BJTzVDRkcqLworI2RlZmluZSBSMDkwMF9HUElPNUNGRyAgMHhmMTQ1CisjZGVmaW5lIEYwOTAwX0dQSU81X09QRCAgMHhmMTQ1MDA4MAorI2RlZmluZSBGMDkwMF9HUElPNV9DT05GSUcgIDB4ZjE0NTAwN2UKKyNkZWZpbmUgRjA5MDBfR1BJTzVfWE9SICAweGYxNDUwMDAxCisKKy8qR1BJTzZDRkcqLworI2RlZmluZSBSMDkwMF9HUElPNkNGRyAgMHhmMTQ2CisjZGVmaW5lIEYwOTAwX0dQSU82X09QRCAgMHhmMTQ2MDA4MAorI2RlZmluZSBGMDkwMF9HUElPNl9DT05GSUcgIDB4ZjE0NjAwN2UKKyNkZWZpbmUgRjA5MDBfR1BJTzZfWE9SICAweGYxNDYwMDAxCisKKy8qR1BJTzdDRkcqLworI2RlZmluZSBSMDkwMF9HUElPN0NGRyAgMHhmMTQ3CisjZGVmaW5lIEYwOTAwX0dQSU83X09QRCAgMHhmMTQ3MDA4MAorI2RlZmluZSBGMDkwMF9HUElPN19DT05GSUcgIDB4ZjE0NzAwN2UKKyNkZWZpbmUgRjA5MDBfR1BJTzdfWE9SICAweGYxNDcwMDAxCisKKy8qR1BJTzhDRkcqLworI2RlZmluZSBSMDkwMF9HUElPOENGRyAgMHhmMTQ4CisjZGVmaW5lIEYwOTAwX0dQSU84X09QRCAgMHhmMTQ4MDA4MAorI2RlZmluZSBGMDkwMF9HUElPOF9DT05GSUcgIDB4ZjE0ODAwN2UKKyNkZWZpbmUgRjA5MDBfR1BJTzhfWE9SICAweGYxNDgwMDAxCisKKy8qR1BJTzlDRkcqLworI2RlZmluZSBSMDkwMF9HUElPOUNGRyAgMHhmMTQ5CisjZGVmaW5lIEYwOTAwX0dQSU85X09QRCAgMHhmMTQ5MDA4MAorI2RlZmluZSBGMDkwMF9HUElPOV9DT05GSUcgIDB4ZjE0OTAwN2UKKyNkZWZpbmUgRjA5MDBfR1BJTzlfWE9SICAweGYxNDkwMDAxCisKKy8qR1BJTzEwQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzEwQ0ZHICAweGYxNGEKKyNkZWZpbmUgRjA5MDBfR1BJTzEwX09QRCAgMHhmMTRhMDA4MAorI2RlZmluZSBGMDkwMF9HUElPMTBfQ09ORklHICAweGYxNGEwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU8xMF9YT1IgIDB4ZjE0YTAwMDEKKworLypHUElPMTFDRkcqLworI2RlZmluZSBSMDkwMF9HUElPMTFDRkcgIDB4ZjE0YgorI2RlZmluZSBGMDkwMF9HUElPMTFfT1BEICAweGYxNGIwMDgwCisjZGVmaW5lIEYwOTAwX0dQSU8xMV9DT05GSUcgIDB4ZjE0YjAwN2UKKyNkZWZpbmUgRjA5MDBfR1BJTzExX1hPUiAgMHhmMTRiMDAwMQorCisvKkdQSU8xMkNGRyovCisjZGVmaW5lIFIwOTAwX0dQSU8xMkNGRyAgMHhmMTRjCisjZGVmaW5lIEYwOTAwX0dQSU8xMl9PUEQgIDB4ZjE0YzAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzEyX0NPTkZJRyAgMHhmMTRjMDA3ZQorI2RlZmluZSBGMDkwMF9HUElPMTJfWE9SICAweGYxNGMwMDAxCisKKy8qR1BJTzEzQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzEzQ0ZHICAweGYxNGQKKyNkZWZpbmUgRjA5MDBfR1BJTzEzX09QRCAgMHhmMTRkMDA4MAorI2RlZmluZSBGMDkwMF9HUElPMTNfQ09ORklHICAweGYxNGQwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU8xM19YT1IgIDB4ZjE0ZDAwMDEKKworLypDUzBDRkcqLworI2RlZmluZSBSMDkwMF9DUzBDRkcgIDB4ZjE0ZQorI2RlZmluZSBGMDkwMF9DUzBfT1BEICAweGYxNGUwMDgwCisjZGVmaW5lIEYwOTAwX0NTMF9DT05GSUcgIDB4ZjE0ZTAwN2UKKyNkZWZpbmUgRjA5MDBfQ1MwX1hPUiAgMHhmMTRlMDAwMQorCisvKkNTMUNGRyovCisjZGVmaW5lIFIwOTAwX0NTMUNGRyAgMHhmMTRmCisjZGVmaW5lIEYwOTAwX0NTMV9PUEQgIDB4ZjE0ZjAwODAKKyNkZWZpbmUgRjA5MDBfQ1MxX0NPTkZJRyAgMHhmMTRmMDA3ZQorI2RlZmluZSBGMDkwMF9DUzFfWE9SICAweGYxNGYwMDAxCisKKy8qU1REQllDRkcqLworI2RlZmluZSBSMDkwMF9TVERCWUNGRyAgMHhmMTUwCisjZGVmaW5lIEYwOTAwX1NUREJZX09QRCAgMHhmMTUwMDA4MAorI2RlZmluZSBGMDkwMF9TVERCWV9DT05GSUcgIDB4ZjE1MDAwN2UKKyNkZWZpbmUgRjA5MDBfU1RCRFlfWE9SICAweGYxNTAwMDAxCisKKy8qRElSQ0xLQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfRElSQ0xLQ0ZHICAweGYxNTEKKyNkZWZpbmUgRjA5MDBfRElSQ0xLX09QRCAgMHhmMTUxMDA4MAorI2RlZmluZSBGMDkwMF9ESVJDTEtfQ09ORklHICAweGYxNTEwMDdlCisjZGVmaW5lIEYwOTAwX0RJUkNMS19YT1IgIDB4ZjE1MTAwMDEKKworLypBR0NSRjFDRkcqLworI2RlZmluZSBSMDkwMF9BR0NSRjFDRkcgIDB4ZjE1MgorI2RlZmluZSBGMDkwMF9BR0NSRjFfT1BEICAweGYxNTIwMDgwCisjZGVmaW5lIEYwOTAwX0FHQ1JGMV9DT05GSUcgIDB4ZjE1MjAwN2UKKyNkZWZpbmUgRjA5MDBfQUdDUkYxX1hPUiAgMHhmMTUyMDAwMQorCisvKlNEQVQxQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfU0RBVDFDRkcgIDB4ZjE1MworI2RlZmluZSBGMDkwMF9TREFUMV9PUEQgIDB4ZjE1MzAwODAKKyNkZWZpbmUgRjA5MDBfU0RBVDFfQ09ORklHICAweGYxNTMwMDdlCisjZGVmaW5lIEYwOTAwX1NEQVQxX1hPUiAgMHhmMTUzMDAwMQorCisvKlNDTFQxQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfU0NMVDFDRkcgIDB4ZjE1NAorI2RlZmluZSBGMDkwMF9TQ0xUMV9PUEQgIDB4ZjE1NDAwODAKKyNkZWZpbmUgRjA5MDBfU0NMVDFfQ09ORklHICAweGYxNTQwMDdlCisjZGVmaW5lIEYwOTAwX1NDTFQxX1hPUiAgMHhmMTU0MDAwMQorCisvKkRJU0VRQ08xQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfRElTRVFDTzFDRkcgIDB4ZjE1NQorI2RlZmluZSBGMDkwMF9ESVNFUUNPMV9PUEQgIDB4ZjE1NTAwODAKKyNkZWZpbmUgRjA5MDBfRElTRVFDTzFfQ09ORklHICAweGYxNTUwMDdlCisjZGVmaW5lIEYwOTAwX0RJU0VRQzFfWE9SICAweGYxNTUwMDAxCisKKy8qQUdDUkYyQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfQUdDUkYyQ0ZHICAweGYxNTYKKyNkZWZpbmUgRjA5MDBfQUdDUkYyX09QRCAgMHhmMTU2MDA4MAorI2RlZmluZSBGMDkwMF9BR0NSRjJfQ09ORklHICAweGYxNTYwMDdlCisjZGVmaW5lIEYwOTAwX0FHQ1JGMl9YT1IgIDB4ZjE1NjAwMDEKKworLypTREFUMkNGRyovCisjZGVmaW5lIFIwOTAwX1NEQVQyQ0ZHICAweGYxNTcKKyNkZWZpbmUgRjA5MDBfU0RBVDJfT1BEICAweGYxNTcwMDgwCisjZGVmaW5lIEYwOTAwX1NEQVQyX0NPTkZJRyAgMHhmMTU3MDA3ZQorI2RlZmluZSBGMDkwMF9TREFUMl9YT1IgIDB4ZjE1NzAwMDEKKworLypTQ0xUMkNGRyovCisjZGVmaW5lIFIwOTAwX1NDTFQyQ0ZHICAweGYxNTgKKyNkZWZpbmUgRjA5MDBfU0NMVDJfT1BEICAweGYxNTgwMDgwCisjZGVmaW5lIEYwOTAwX1NDTFQyX0NPTkZJRyAgMHhmMTU4MDA3ZQorI2RlZmluZSBGMDkwMF9TQ0xUMl9YT1IgIDB4ZjE1ODAwMDEKKworLypESVNFUUNPMkNGRyovCisjZGVmaW5lIFIwOTAwX0RJU0VRQ08yQ0ZHICAweGYxNTkKKyNkZWZpbmUgRjA5MDBfRElTRVFDTzJfT1BEICAweGYxNTkwMDgwCisjZGVmaW5lIEYwOTAwX0RJU0VRQ08yX0NPTkZJRyAgMHhmMTU5MDA3ZQorI2RlZmluZSBGMDkwMF9ESVNFUUMyX1hPUiAgMHhmMTU5MDAwMQorCisvKkNMS09VVDI3Q0ZHKi8KKyNkZWZpbmUgUjA5MDBfQ0xLT1VUMjdDRkcgIDB4ZjE1YQorI2RlZmluZSBGMDkwMF9DTEtPVVQyN19PUEQgIDB4ZjE1YTAwODAKKyNkZWZpbmUgRjA5MDBfQ0xLT1VUMjdfQ09ORklHICAweGYxNWEwMDdlCisjZGVmaW5lIEYwOTAwX0NMS09VVDI3X1hPUiAgMHhmMTVhMDAwMQorCisvKkVSUk9SMUNGRyovCisjZGVmaW5lIFIwOTAwX0VSUk9SMUNGRyAgMHhmMTViCisjZGVmaW5lIEYwOTAwX0VSUk9SMV9PUEQgIDB4ZjE1YjAwODAKKyNkZWZpbmUgRjA5MDBfRVJST1IxX0NPTkZJRyAgMHhmMTViMDA3ZQorI2RlZmluZSBGMDkwMF9FUlJPUjFfWE9SICAweGYxNWIwMDAxCisKKy8qRFBOMUNGRyovCisjZGVmaW5lIFIwOTAwX0RQTjFDRkcgIDB4ZjE1YworI2RlZmluZSBGMDkwMF9EUE4xX09QRCAgMHhmMTVjMDA4MAorI2RlZmluZSBGMDkwMF9EUE4xX0NPTkZJRyAgMHhmMTVjMDA3ZQorI2RlZmluZSBGMDkwMF9EUE4xX1hPUiAgMHhmMTVjMDAwMQorCisvKlNUUk9VVDFDRkcqLworI2RlZmluZSBSMDkwMF9TVFJPVVQxQ0ZHICAweGYxNWQKKyNkZWZpbmUgRjA5MDBfU1RST1VUMV9PUEQgIDB4ZjE1ZDAwODAKKyNkZWZpbmUgRjA5MDBfU1RST1VUMV9DT05GSUcgIDB4ZjE1ZDAwN2UKKyNkZWZpbmUgRjA5MDBfU1RST1VUMV9YT1IgIDB4ZjE1ZDAwMDEKKworLypDTEtPVVQxQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfQ0xLT1VUMUNGRyAgMHhmMTVlCisjZGVmaW5lIEYwOTAwX0NMS09VVDFfT1BEICAweGYxNWUwMDgwCisjZGVmaW5lIEYwOTAwX0NMS09VVDFfQ09ORklHICAweGYxNWUwMDdlCisjZGVmaW5lIEYwOTAwX0NMS09VVDFfWE9SICAweGYxNWUwMDAxCisKKy8qREFUQTcxQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfREFUQTcxQ0ZHICAweGYxNWYKKyNkZWZpbmUgRjA5MDBfREFUQTcxX09QRCAgMHhmMTVmMDA4MAorI2RlZmluZSBGMDkwMF9EQVRBNzFfQ09ORklHICAweGYxNWYwMDdlCisjZGVmaW5lIEYwOTAwX0RBVEE3MV9YT1IgIDB4ZjE1ZjAwMDEKKworLypFUlJPUjJDRkcqLworI2RlZmluZSBSMDkwMF9FUlJPUjJDRkcgIDB4ZjE2MAorI2RlZmluZSBGMDkwMF9FUlJPUjJfT1BEICAweGYxNjAwMDgwCisjZGVmaW5lIEYwOTAwX0VSUk9SMl9DT05GSUcgIDB4ZjE2MDAwN2UKKyNkZWZpbmUgRjA5MDBfRVJST1IyX1hPUiAgMHhmMTYwMDAwMQorCisvKkRQTjJDRkcqLworI2RlZmluZSBSMDkwMF9EUE4yQ0ZHICAweGYxNjEKKyNkZWZpbmUgRjA5MDBfRFBOMl9PUEQgIDB4ZjE2MTAwODAKKyNkZWZpbmUgRjA5MDBfRFBOMl9DT05GSUcgIDB4ZjE2MTAwN2UKKyNkZWZpbmUgRjA5MDBfRFBOMl9YT1IgIDB4ZjE2MTAwMDEKKworLypTVFJPVVQyQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfU1RST1VUMkNGRyAgMHhmMTYyCisjZGVmaW5lIEYwOTAwX1NUUk9VVDJfT1BEICAweGYxNjIwMDgwCisjZGVmaW5lIEYwOTAwX1NUUk9VVDJfQ09ORklHICAweGYxNjIwMDdlCisjZGVmaW5lIEYwOTAwX1NUUk9VVDJfWE9SICAweGYxNjIwMDAxCisKKy8qQ0xLT1VUMkNGRyovCisjZGVmaW5lIFIwOTAwX0NMS09VVDJDRkcgIDB4ZjE2MworI2RlZmluZSBGMDkwMF9DTEtPVVQyX09QRCAgMHhmMTYzMDA4MAorI2RlZmluZSBGMDkwMF9DTEtPVVQyX0NPTkZJRyAgMHhmMTYzMDA3ZQorI2RlZmluZSBGMDkwMF9DTEtPVVQyX1hPUiAgMHhmMTYzMDAwMQorCisvKkRBVEE3MkNGRyovCisjZGVmaW5lIFIwOTAwX0RBVEE3MkNGRyAgMHhmMTY0CisjZGVmaW5lIEYwOTAwX0RBVEE3Ml9PUEQgIDB4ZjE2NDAwODAKKyNkZWZpbmUgRjA5MDBfREFUQTcyX0NPTkZJRyAgMHhmMTY0MDA3ZQorI2RlZmluZSBGMDkwMF9EQVRBNzJfWE9SICAweGYxNjQwMDAxCisKKy8qRVJST1IzQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfRVJST1IzQ0ZHICAweGYxNjUKKyNkZWZpbmUgRjA5MDBfRVJST1IzX09QRCAgMHhmMTY1MDA4MAorI2RlZmluZSBGMDkwMF9FUlJPUjNfQ09ORklHICAweGYxNjUwMDdlCisjZGVmaW5lIEYwOTAwX0VSUk9SM19YT1IgIDB4ZjE2NTAwMDEKKworLypEUE4zQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfRFBOM0NGRyAgMHhmMTY2CisjZGVmaW5lIEYwOTAwX0RQTjNfT1BEICAweGYxNjYwMDgwCisjZGVmaW5lIEYwOTAwX0RQTjNfQ09ORklHICAweGYxNjYwMDdlCisjZGVmaW5lIEYwOTAwX0RQTjNfWE9SICAweGYxNjYwMDAxCisKKy8qU1RST1VUM0NGRyovCisjZGVmaW5lIFIwOTAwX1NUUk9VVDNDRkcgIDB4ZjE2NworI2RlZmluZSBGMDkwMF9TVFJPVVQzX09QRCAgMHhmMTY3MDA4MAorI2RlZmluZSBGMDkwMF9TVFJPVVQzX0NPTkZJRyAgMHhmMTY3MDA3ZQorI2RlZmluZSBGMDkwMF9TVFJPVVQzX1hPUiAgMHhmMTY3MDAwMQorCisvKkNMS09VVDNDRkcqLworI2RlZmluZSBSMDkwMF9DTEtPVVQzQ0ZHICAweGYxNjgKKyNkZWZpbmUgRjA5MDBfQ0xLT1VUM19PUEQgIDB4ZjE2ODAwODAKKyNkZWZpbmUgRjA5MDBfQ0xLT1VUM19DT05GSUcgIDB4ZjE2ODAwN2UKKyNkZWZpbmUgRjA5MDBfQ0xLT1VUM19YT1IgIDB4ZjE2ODAwMDEKKworLypEQVRBNzNDRkcqLworI2RlZmluZSBSMDkwMF9EQVRBNzNDRkcgIDB4ZjE2OQorI2RlZmluZSBGMDkwMF9EQVRBNzNfT1BEICAweGYxNjkwMDgwCisjZGVmaW5lIEYwOTAwX0RBVEE3M19DT05GSUcgIDB4ZjE2OTAwN2UKKyNkZWZpbmUgRjA5MDBfREFUQTczX1hPUiAgMHhmMTY5MDAwMQorCisvKkZTS1RGQzIqLworI2RlZmluZSBSMDkwMF9GU0tURkMyICAweGYxNzAKKyNkZWZpbmUgRjA5MDBfRlNLVF9LTU9EICAweGYxNzAwMGZjCisjZGVmaW5lIEYwOTAwX0ZTS1RfQ0FSMiAgMHhmMTcwMDAwMworCisvKkZTS1RGQzEqLworI2RlZmluZSBSMDkwMF9GU0tURkMxICAweGYxNzEKKyNkZWZpbmUgRjA5MDBfRlNLVF9DQVIxICAweGYxNzEwMGZmCisKKy8qRlNLVEZDMCovCisjZGVmaW5lIFIwOTAwX0ZTS1RGQzAgIDB4ZjE3MgorI2RlZmluZSBGMDkwMF9GU0tUX0NBUjAgIDB4ZjE3MjAwZmYKKworLypGU0tUREVMVEFGMSovCisjZGVmaW5lIFIwOTAwX0ZTS1RERUxUQUYxICAweGYxNzMKKyNkZWZpbmUgRjA5MDBfRlNLVF9ERUxUQUYxICAweGYxNzMwMDBmCisKKy8qRlNLVERFTFRBRjAqLworI2RlZmluZSBSMDkwMF9GU0tUREVMVEFGMCAgMHhmMTc0CisjZGVmaW5lIEYwOTAwX0ZTS1RfREVMVEFGMCAgMHhmMTc0MDBmZgorCisvKkZTS1RDVFJMKi8KKyNkZWZpbmUgUjA5MDBfRlNLVENUUkwgIDB4ZjE3NQorI2RlZmluZSBGMDkwMF9GU0tUX0VOX1NHTiAgMHhmMTc1MDA0MAorI2RlZmluZSBGMDkwMF9GU0tUX01PRF9TR04gIDB4ZjE3NTAwMjAKKyNkZWZpbmUgRjA5MDBfRlNLVF9NT0RfRU4gIDB4ZjE3NTAwMWMKKyNkZWZpbmUgRjA5MDBfRlNLVF9EQUNNT0RFICAweGYxNzUwMDAzCisKKy8qRlNLUkZDMiovCisjZGVmaW5lIFIwOTAwX0ZTS1JGQzIgIDB4ZjE3NgorI2RlZmluZSBGMDkwMF9GU0tSX0RFVFNHTiAgMHhmMTc2MDA0MAorI2RlZmluZSBGMDkwMF9GU0tSX09VVFNHTiAgMHhmMTc2MDAyMAorI2RlZmluZSBGMDkwMF9GU0tSX0tBR0MgIDB4ZjE3NjAwMWMKKyNkZWZpbmUgRjA5MDBfRlNLUl9DQVIyICAweGYxNzYwMDAzCisKKy8qRlNLUkZDMSovCisjZGVmaW5lIFIwOTAwX0ZTS1JGQzEgIDB4ZjE3NworI2RlZmluZSBGMDkwMF9GU0tSX0NBUjEgIDB4ZjE3NzAwZmYKKworLypGU0tSRkMwKi8KKyNkZWZpbmUgUjA5MDBfRlNLUkZDMCAgMHhmMTc4CisjZGVmaW5lIEYwOTAwX0ZTS1JfQ0FSMCAgMHhmMTc4MDBmZgorCisvKkZTS1JLMSovCisjZGVmaW5lIFIwOTAwX0ZTS1JLMSAgMHhmMTc5CisjZGVmaW5lIEYwOTAwX0ZTS1JfSzFfRVhQICAweGYxNzkwMGUwCisjZGVmaW5lIEYwOTAwX0ZTS1JfSzFfTUFOVCAgMHhmMTc5MDAxZgorCisvKkZTS1JLMiovCisjZGVmaW5lIFIwOTAwX0ZTS1JLMiAgMHhmMTdhCisjZGVmaW5lIEYwOTAwX0ZTS1JfSzJfRVhQICAweGYxN2EwMGUwCisjZGVmaW5lIEYwOTAwX0ZTS1JfSzJfTUFOVCAgMHhmMTdhMDAxZgorCisvKkZTS1JBR0NSKi8KKyNkZWZpbmUgUjA5MDBfRlNLUkFHQ1IgIDB4ZjE3YgorI2RlZmluZSBGMDkwMF9GU0tSX09VVENUTCAgMHhmMTdiMDBjMAorI2RlZmluZSBGMDkwMF9GU0tSX0FHQ19SRUYgIDB4ZjE3YjAwM2YKKworLypGU0tSQUdDKi8KKyNkZWZpbmUgUjA5MDBfRlNLUkFHQyAgMHhmMTdjCisjZGVmaW5lIEYwOTAwX0ZTS1JfQUdDX0FDQ1UgIDB4ZjE3YzAwZmYKKworLypGU0tSQUxQSEEqLworI2RlZmluZSBSMDkwMF9GU0tSQUxQSEEgIDB4ZjE3ZAorI2RlZmluZSBGMDkwMF9GU0tSX0FMUEhBX0VYUCAgMHhmMTdkMDAxYworI2RlZmluZSBGMDkwMF9GU0tSX0FMUEhBX00gIDB4ZjE3ZDAwMDMKKworLypGU0tSUExUSDEqLworI2RlZmluZSBSMDkwMF9GU0tSUExUSDEgIDB4ZjE3ZQorI2RlZmluZSBGMDkwMF9GU0tSX0JFVEEgIDB4ZjE3ZTAwZjAKKyNkZWZpbmUgRjA5MDBfRlNLUl9QTExfVFJFU0gxICAweGYxN2UwMDBmCisKKy8qRlNLUlBMVEgwKi8KKyNkZWZpbmUgUjA5MDBfRlNLUlBMVEgwICAweGYxN2YKKyNkZWZpbmUgRjA5MDBfRlNLUl9QTExfVFJFU0gwICAweGYxN2YwMGZmCisKKy8qRlNLUkRGMSovCisjZGVmaW5lIFIwOTAwX0ZTS1JERjEgIDB4ZjE4MAorI2RlZmluZSBGMDkwMF9GU0tSX09VVCAgMHhmMTgwMDA4MAorI2RlZmluZSBGMDkwMF9GU0tSX0RFTFRBRjEgIDB4ZjE4MDAwMWYKKworLypGU0tSREYwKi8KKyNkZWZpbmUgUjA5MDBfRlNLUkRGMCAgMHhmMTgxCisjZGVmaW5lIEYwOTAwX0ZTS1JfREVMVEFGMCAgMHhmMTgxMDBmZgorCisvKkZTS1JTVEVQUCovCisjZGVmaW5lIFIwOTAwX0ZTS1JTVEVQUCAgMHhmMTgyCisjZGVmaW5lIEYwOTAwX0ZTS1JfU1RFUF9QTFVTICAweGYxODIwMGZmCisKKy8qRlNLUlNURVBNKi8KKyNkZWZpbmUgUjA5MDBfRlNLUlNURVBNICAweGYxODMKKyNkZWZpbmUgRjA5MDBfRlNLUl9TVEVQX01JTlVTICAweGYxODMwMGZmCisKKy8qRlNLUkRFVDEqLworI2RlZmluZSBSMDkwMF9GU0tSREVUMSAgMHhmMTg0CisjZGVmaW5lIEYwOTAwX0ZTS1JfREVURUNUICAweGYxODQwMDgwCisjZGVmaW5lIEYwOTAwX0ZTS1JfQ0FSREVUX0FDQ1UxICAweGYxODQwMDBmCisKKy8qRlNLUkRFVDAqLworI2RlZmluZSBSMDkwMF9GU0tSREVUMCAgMHhmMTg1CisjZGVmaW5lIEYwOTAwX0ZTS1JfQ0FSREVUX0FDQ1UwICAweGYxODUwMGZmCisKKy8qRlNLUkRUSDEqLworI2RlZmluZSBSMDkwMF9GU0tSRFRIMSAgMHhmMTg2CisjZGVmaW5lIEYwOTAwX0ZTS1JfQ0FSTE9TU19USFJFU0gxICAweGYxODYwMGYwCisjZGVmaW5lIEYwOTAwX0ZTS1JfQ0FSREVUX1RIUkVTSDEgIDB4ZjE4NjAwMGYKKworLypGU0tSRFRIMCovCisjZGVmaW5lIFIwOTAwX0ZTS1JEVEgwICAweGYxODcKKyNkZWZpbmUgRjA5MDBfRlNLUl9DQVJERVRfVEhSRVNIMCAgMHhmMTg3MDBmZgorCisvKkZTS1JMT1NTKi8KKyNkZWZpbmUgUjA5MDBfRlNLUkxPU1MgIDB4ZjE4OAorI2RlZmluZSBGMDkwMF9GU0tSX0NBUkxPU1NfVEhSRVNIMCAgMHhmMTg4MDBmZgorCisvKlAyX0RJU1RYQ1RMKi8KKyNkZWZpbmUgUjA5MDBfUDJfRElTVFhDVEwgIDB4ZjE5MAorI2RlZmluZSBGMDkwMF9QMl9USU1fT0ZGICAweGYxOTAwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0RJU0VRQ19SRVNFVCAgMHhmMTkwMDA0MAorI2RlZmluZSBGMDkwMF9QMl9USU1fQ01EICAweGYxOTAwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0RJU19QUkVDSEFSR0UgIDB4ZjE5MDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfRElTVFhfTU9ERSAgMHhmMTkwMDAwNworCisvKlAyX0RJU1JYQ1RMKi8KKyNkZWZpbmUgUjA5MDBfUDJfRElTUlhDVEwgIDB4ZjE5MQorI2RlZmluZSBGMDkwMF9QMl9SRUNFSVZFUl9PTiAgMHhmMTkxMDA4MAorI2RlZmluZSBGMDkwMF9QMl9JR05PX1NIT1JUMjJLICAweGYxOTEwMDQwCisjZGVmaW5lIEYwOTAwX1AyX09ORUNISVBfVFJYICAweGYxOTEwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0VYVF9FTlZFTE9QICAweGYxOTEwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1BJTl9TRUxFQ1QgIDB4ZjE5MTAwMGMKKyNkZWZpbmUgRjA5MDBfUDJfSVJRX1JYRU5EICAweGYxOTEwMDAyCisjZGVmaW5lIEYwOTAwX1AyX0lSUV80TkJZVEVTICAweGYxOTEwMDAxCisKKy8qUDJfRElTUlhfU1QwKi8KKyNkZWZpbmUgUjA5MDBfUDJfRElTUlhfU1QwICAweGYxOTQKKyNkZWZpbmUgRjA5MDBfUDJfUlhfRU5EICAweGYxOTQwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1JYX0FDVElWRSAgMHhmMTk0MDA0MAorI2RlZmluZSBGMDkwMF9QMl9TSE9SVF8yMktIWiAgMHhmMTk0MDAyMAorI2RlZmluZSBGMDkwMF9QMl9DT05UX1RPTkUgIDB4ZjE5NDAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfRklGT180QlJFQURZICAweGYxOTQwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0ZJRk9fRU1QVFkgIDB4ZjE5NDAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfQUJPUlRfRElTUlggIDB4ZjE5NDAwMDEKKworLypQMl9ESVNSWF9TVDEqLworI2RlZmluZSBSMDkwMF9QMl9ESVNSWF9TVDEgIDB4ZjE5NQorI2RlZmluZSBGMDkwMF9QMl9SWF9GQUlMICAweGYxOTUwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0ZJRk9fUEFSSVRZRkFJTCAgMHhmMTk1MDA0MAorI2RlZmluZSBGMDkwMF9QMl9SWF9OT05CWVRFICAweGYxOTUwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0ZJRk9fT1ZFUkZMT1cgIDB4ZjE5NTAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfRklGT19CWVRFTkJSICAweGYxOTUwMDBmCisKKy8qUDJfRElTUlhEQVRBKi8KKyNkZWZpbmUgUjA5MDBfUDJfRElTUlhEQVRBICAweGYxOTYKKyNkZWZpbmUgRjA5MDBfUDJfRElTUlhfREFUQSAgMHhmMTk2MDBmZgorCisvKlAyX0RJU1RYREFUQSovCisjZGVmaW5lIFIwOTAwX1AyX0RJU1RYREFUQSAgMHhmMTk3CisjZGVmaW5lIEYwOTAwX1AyX0RJU0VRQ19GSUZPICAweGYxOTcwMGZmCisKKy8qUDJfRElTVFhTVEFUVVMqLworI2RlZmluZSBSMDkwMF9QMl9ESVNUWFNUQVRVUyAgMHhmMTk4CisjZGVmaW5lIEYwOTAwX1AyX1RYX0ZBSUwgIDB4ZjE5ODAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRklGT19GVUxMICAweGYxOTgwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1RYX0lETEUgIDB4ZjE5ODAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfR0FQX0JVUlNUICAweGYxOTgwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1RYRklGT19CWVRFUyAgMHhmMTk4MDAwZgorCisvKlAyX0YyMlRYKi8KKyNkZWZpbmUgUjA5MDBfUDJfRjIyVFggIDB4ZjE5OQorI2RlZmluZSBGMDkwMF9QMl9GMjJfUkVHICAweGYxOTkwMGZmCisKKy8qUDJfRjIyUlgqLworI2RlZmluZSBSMDkwMF9QMl9GMjJSWCAgMHhmMTlhCisjZGVmaW5lIEYwOTAwX1AyX0YyMlJYX1JFRyAgMHhmMTlhMDBmZgorCisvKlAyX0FDUlBSRVNDKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUNSUFJFU0MgIDB4ZjE5YworI2RlZmluZSBGMDkwMF9QMl9BQ1JfQ09ERlJEWSAgMHhmMTljMDAwOAorI2RlZmluZSBGMDkwMF9QMl9BQ1JfUFJFU0MgIDB4ZjE5YzAwMDcKKworLypQMl9BQ1JESVYqLworI2RlZmluZSBSMDkwMF9QMl9BQ1JESVYgIDB4ZjE5ZAorI2RlZmluZSBGMDkwMF9QMl9BQ1JfRElWICAweGYxOWQwMGZmCisKKy8qUDFfRElTVFhDVEwqLworI2RlZmluZSBSMDkwMF9QMV9ESVNUWENUTCAgMHhmMWEwCisjZGVmaW5lIEYwOTAwX1AxX1RJTV9PRkYgIDB4ZjFhMDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfRElTRVFDX1JFU0VUICAweGYxYTAwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1RJTV9DTUQgIDB4ZjFhMDAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1BSRUNIQVJHRSAgMHhmMWEwMDAwOAorI2RlZmluZSBGMDkwMF9QMV9ESVNUWF9NT0RFICAweGYxYTAwMDA3CisKKy8qUDFfRElTUlhDVEwqLworI2RlZmluZSBSMDkwMF9QMV9ESVNSWENUTCAgMHhmMWExCisjZGVmaW5lIEYwOTAwX1AxX1JFQ0VJVkVSX09OICAweGYxYTEwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0lHTk9fU0hPUlQyMksgIDB4ZjFhMTAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfT05FQ0hJUF9UUlggIDB4ZjFhMTAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfRVhUX0VOVkVMT1AgIDB4ZjFhMTAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfUElOX1NFTEVDVCAgMHhmMWExMDAwYworI2RlZmluZSBGMDkwMF9QMV9JUlFfUlhFTkQgIDB4ZjFhMTAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfSVJRXzROQllURVMgIDB4ZjFhMTAwMDEKKworLypQMV9ESVNSWF9TVDAqLworI2RlZmluZSBSMDkwMF9QMV9ESVNSWF9TVDAgIDB4ZjFhNAorI2RlZmluZSBGMDkwMF9QMV9SWF9FTkQgIDB4ZjFhNDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfUlhfQUNUSVZFICAweGYxYTQwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1NIT1JUXzIyS0haICAweGYxYTQwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0NPTlRfVE9ORSAgMHhmMWE0MDAxMAorI2RlZmluZSBGMDkwMF9QMV9GSUZPXzRCUkVBRFkgIDB4ZjFhNDAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfRklGT19FTVBUWSAgMHhmMWE0MDAwNAorI2RlZmluZSBGMDkwMF9QMV9BQk9SVF9ESVNSWCAgMHhmMWE0MDAwMQorCisvKlAxX0RJU1JYX1NUMSovCisjZGVmaW5lIFIwOTAwX1AxX0RJU1JYX1NUMSAgMHhmMWE1CisjZGVmaW5lIEYwOTAwX1AxX1JYX0ZBSUwgIDB4ZjFhNTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfRklGT19QQVJJVFlGQUlMICAweGYxYTUwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1JYX05PTkJZVEUgIDB4ZjFhNTAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfRklGT19PVkVSRkxPVyAgMHhmMWE1MDAxMAorI2RlZmluZSBGMDkwMF9QMV9GSUZPX0JZVEVOQlIgIDB4ZjFhNTAwMGYKKworLypQMV9ESVNSWERBVEEqLworI2RlZmluZSBSMDkwMF9QMV9ESVNSWERBVEEgIDB4ZjFhNgorI2RlZmluZSBGMDkwMF9QMV9ESVNSWF9EQVRBICAweGYxYTYwMGZmCisKKy8qUDFfRElTVFhEQVRBKi8KKyNkZWZpbmUgUjA5MDBfUDFfRElTVFhEQVRBICAweGYxYTcKKyNkZWZpbmUgRjA5MDBfUDFfRElTRVFDX0ZJRk8gIDB4ZjFhNzAwZmYKKworLypQMV9ESVNUWFNUQVRVUyovCisjZGVmaW5lIFIwOTAwX1AxX0RJU1RYU1RBVFVTICAweGYxYTgKKyNkZWZpbmUgRjA5MDBfUDFfVFhfRkFJTCAgMHhmMWE4MDA4MAorI2RlZmluZSBGMDkwMF9QMV9GSUZPX0ZVTEwgIDB4ZjFhODAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfVFhfSURMRSAgMHhmMWE4MDAyMAorI2RlZmluZSBGMDkwMF9QMV9HQVBfQlVSU1QgIDB4ZjFhODAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfVFhGSUZPX0JZVEVTICAweGYxYTgwMDBmCisKKy8qUDFfRjIyVFgqLworI2RlZmluZSBSMDkwMF9QMV9GMjJUWCAgMHhmMWE5CisjZGVmaW5lIEYwOTAwX1AxX0YyMl9SRUcgIDB4ZjFhOTAwZmYKKworLypQMV9GMjJSWCovCisjZGVmaW5lIFIwOTAwX1AxX0YyMlJYICAweGYxYWEKKyNkZWZpbmUgRjA5MDBfUDFfRjIyUlhfUkVHICAweGYxYWEwMGZmCisKKy8qUDFfQUNSUFJFU0MqLworI2RlZmluZSBSMDkwMF9QMV9BQ1JQUkVTQyAgMHhmMWFjCisjZGVmaW5lIEYwOTAwX1AxX0FDUl9DT0RGUkRZICAweGYxYWMwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0FDUl9QUkVTQyAgMHhmMWFjMDAwNworCisvKlAxX0FDUkRJViovCisjZGVmaW5lIFIwOTAwX1AxX0FDUkRJViAgMHhmMWFkCisjZGVmaW5lIEYwOTAwX1AxX0FDUl9ESVYgIDB4ZjFhZDAwZmYKKworLypOQ09BUlNFKi8KKyNkZWZpbmUgUjA5MDBfTkNPQVJTRSAgMHhmMWIzCisjZGVmaW5lIEYwOTAwX01fRElWICAweGYxYjMwMGZmCisKKy8qU1lOVENUUkwqLworI2RlZmluZSBSMDkwMF9TWU5UQ1RSTCAgMHhmMWI2CisjZGVmaW5lIEYwOTAwX1NUQU5EQlkgIDB4ZjFiNjAwODAKKyNkZWZpbmUgRjA5MDBfQllQQVNTUExMQ09SRSAgMHhmMWI2MDA0MAorI2RlZmluZSBGMDkwMF9TRUxYMVJBVElPICAweGYxYjYwMDIwCisjZGVmaW5lIEYwOTAwX0kyQ19UVUQgIDB4ZjFiNjAwMTAKKyNkZWZpbmUgRjA5MDBfU1RPUF9QTEwgIDB4ZjFiNjAwMDgKKyNkZWZpbmUgRjA5MDBfQllQQVNTUExMRlNLICAweGYxYjYwMDA0CisjZGVmaW5lIEYwOTAwX1NFTE9TQ0kgIDB4ZjFiNjAwMDIKKyNkZWZpbmUgRjA5MDBfQllQQVNTUExMQURDICAweGYxYjYwMDAxCisKKy8qRklMVENUUkwqLworI2RlZmluZSBSMDkwMF9GSUxUQ1RSTCAgMHhmMWI3CisjZGVmaW5lIEYwOTAwX0lOVl9DTEsxMzUgIDB4ZjFiNzAwODAKKyNkZWZpbmUgRjA5MDBfUEVSTV9CWVBESVMgIDB4ZjFiNzAwNDAKKyNkZWZpbmUgRjA5MDBfU0VMX0ZTS0NLRElWICAweGYxYjcwMDA0CisjZGVmaW5lIEYwOTAwX0lOVl9DTEtGU0sgIDB4ZjFiNzAwMDIKKyNkZWZpbmUgRjA5MDBfQllQQVNTX0FQUExJICAweGYxYjcwMDAxCisKKy8qUExMU1RBVCovCisjZGVmaW5lIFIwOTAwX1BMTFNUQVQgIDB4ZjFiOAorI2RlZmluZSBGMDkwMF9BQ01fU0VMICAweGYxYjgwMDgwCisjZGVmaW5lIEYwOTAwX0RUVl9TRUwgIDB4ZjFiODAwNDAKKyNkZWZpbmUgRjA5MDBfUExMTE9DSyAgMHhmMWI4MDAwMQorCisvKlNUT1BDTEsxKi8KKyNkZWZpbmUgUjA5MDBfU1RPUENMSzEgIDB4ZjFjMgorI2RlZmluZSBGMDkwMF9TVE9QX0NMS1BLRFQyICAweGYxYzIwMDQwCisjZGVmaW5lIEYwOTAwX1NUT1BfQ0xLUEtEVDEgIDB4ZjFjMjAwMjAKKyNkZWZpbmUgRjA5MDBfU1RPUF9DTEtGRUMgIDB4ZjFjMjAwMTAKKyNkZWZpbmUgRjA5MDBfU1RPUF9DTEtBRENJMiAgMHhmMWMyMDAwOAorI2RlZmluZSBGMDkwMF9JTlZfQ0xLQURDSTIgIDB4ZjFjMjAwMDQKKyNkZWZpbmUgRjA5MDBfU1RPUF9DTEtBRENJMSAgMHhmMWMyMDAwMgorI2RlZmluZSBGMDkwMF9JTlZfQ0xLQURDSTEgIDB4ZjFjMjAwMDEKKworLypTVE9QQ0xLMiovCisjZGVmaW5lIFIwOTAwX1NUT1BDTEsyICAweGYxYzMKKyNkZWZpbmUgRjA5MDBfU1RPUF9DTEtTQU1QMiAgMHhmMWMzMDAxMAorI2RlZmluZSBGMDkwMF9TVE9QX0NMS1NBTVAxICAweGYxYzMwMDA4CisjZGVmaW5lIEYwOTAwX1NUT1BfQ0xLVklUMiAgMHhmMWMzMDAwNAorI2RlZmluZSBGMDkwMF9TVE9QX0NMS1ZJVDEgIDB4ZjFjMzAwMDIKKyNkZWZpbmUgRjA5MDBfU1RPUF9DTEtUUyAgMHhmMWMzMDAwMQorCisvKlRTVFROUjAqLworI2RlZmluZSBSMDkwMF9UU1RUTlIwICAweGYxZGYKKyNkZWZpbmUgRjA5MDBfU0VMX0ZTSyAgMHhmMWRmMDA4MAorI2RlZmluZSBGMDkwMF9GU0tfUE9OICAweGYxZGYwMDA0CisjZGVmaW5lIEYwOTAwX0ZTS19PUEVOTE9PUCAgMHhmMWRmMDAwMgorCisvKlRTVFROUjEqLworI2RlZmluZSBSMDkwMF9UU1RUTlIxICAweGYxZTAKKyNkZWZpbmUgRjA5MDBfQllQQVNTX0FEQzEgIDB4ZjFlMDAwODAKKyNkZWZpbmUgRjA5MDBfSU5WQURDMV9DS09VVCAgMHhmMWUwMDA0MAorI2RlZmluZSBGMDkwMF9TRUxJUVNSQzEgIDB4ZjFlMDAwMzAKKyNkZWZpbmUgRjA5MDBfQURDMV9QT04gIDB4ZjFlMDAwMDIKKyNkZWZpbmUgRjA5MDBfQURDMV9JTk1PREUgIDB4ZjFlMDAwMDEKKworLypUU1RUTlIyKi8KKyNkZWZpbmUgUjA5MDBfVFNUVE5SMiAgMHhmMWUxCisjZGVmaW5lIEYwOTAwX0RJU0VRQzFfUE9OICAweGYxZTEwMDIwCisjZGVmaW5lIEYwOTAwX0RJU0VRQzFfVEVTVCAgMHhmMWUxMDAxZgorCisvKlRTVFROUjMqLworI2RlZmluZSBSMDkwMF9UU1RUTlIzICAweGYxZTIKKyNkZWZpbmUgRjA5MDBfQllQQVNTX0FEQzIgIDB4ZjFlMjAwODAKKyNkZWZpbmUgRjA5MDBfSU5WQURDMl9DS09VVCAgMHhmMWUyMDA0MAorI2RlZmluZSBGMDkwMF9TRUxJUVNSQzIgIDB4ZjFlMjAwMzAKKyNkZWZpbmUgRjA5MDBfQURDMl9QT04gIDB4ZjFlMjAwMDIKKyNkZWZpbmUgRjA5MDBfQURDMl9JTk1PREUgIDB4ZjFlMjAwMDEKKworLypUU1RUTlI0Ki8KKyNkZWZpbmUgUjA5MDBfVFNUVE5SNCAgMHhmMWUzCisjZGVmaW5lIEYwOTAwX0RJU0VRQzJfUE9OICAweGYxZTMwMDIwCisjZGVmaW5lIEYwOTAwX0RJU0VRQzJfVEVTVCAgMHhmMWUzMDAxZgorCisvKlAyX0lRQ09OU1QqLworI2RlZmluZSBSMDkwMF9QMl9JUUNPTlNUICAweGYyMDAKKyNkZWZpbmUgRjA5MDBfUDJfQ09OU1RFTF9TRUxFQ1QgIDB4ZjIwMDAwNjAKKyNkZWZpbmUgRjA5MDBfUDJfSVFTWU1CX1NFTCAgMHhmMjAwMDAxZgorCisvKlAyX05PU0NGRyovCisjZGVmaW5lIFIwOTAwX1AyX05PU0NGRyAgMHhmMjAxCisjZGVmaW5lIEYwOTAwX1AyX0RVTU1ZUExfTk9TREFUQSAgMHhmMjAxMDAyMAorI2RlZmluZSBGMDkwMF9QMl9OT1NQTEhfQkVUQSAgMHhmMjAxMDAxOAorI2RlZmluZSBGMDkwMF9QMl9OT1NEQVRBX0JFVEEgIDB4ZjIwMTAwMDcKKworLypQMl9JU1lNQiovCisjZGVmaW5lIFIwOTAwX1AyX0lTWU1CICAweGYyMDIKKyNkZWZpbmUgRjA5MDBfUDJfSV9TWU1CT0wgIDB4ZjIwMjAxZmYKKworLypQMl9RU1lNQiovCisjZGVmaW5lIFIwOTAwX1AyX1FTWU1CICAweGYyMDMKKyNkZWZpbmUgRjA5MDBfUDJfUV9TWU1CT0wgIDB4ZjIwMzAxZmYKKworLypQMl9BR0MxQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUdDMUNGRyAgMHhmMjA0CisjZGVmaW5lIEYwOTAwX1AyX0RDX0ZST1pFTiAgMHhmMjA0MDA4MAorI2RlZmluZSBGMDkwMF9QMl9EQ19DT1JSRUNUICAweGYyMDQwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0FNTV9GUk9aRU4gIDB4ZjIwNDAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfQU1NX0NPUlJFQ1QgIDB4ZjIwNDAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfUVVBRF9GUk9aRU4gIDB4ZjIwNDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfUVVBRF9DT1JSRUNUICAweGYyMDQwMDA0CisjZGVmaW5lIEYwOTAwX1AyX0RDQ09NUF9TTE9XICAweGYyMDQwMDAyCisjZGVmaW5lIEYwOTAwX1AyX0lRTUlTTV9TTE9XICAweGYyMDQwMDAxCisKKy8qUDJfQUdDMUNOKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUdDMUNOICAweGYyMDYKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMV9MT0NLRUQgIDB4ZjIwNjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMV9PVkVSRkxPVyAgMHhmMjA2MDA0MAorI2RlZmluZSBGMDkwMF9QMl9BR0MxX05PU0xPV0xLICAweGYyMDYwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0FHQzFfTUlOUE9XRVIgIDB4ZjIwNjAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfQUdDT1VUX0ZBU1QgIDB4ZjIwNjAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfQUdDSVFfQkVUQSAgMHhmMjA2MDAwNworCisvKlAyX0FHQzFSRUYqLworI2RlZmluZSBSMDkwMF9QMl9BR0MxUkVGICAweGYyMDcKKyNkZWZpbmUgRjA5MDBfUDJfQUdDSVFfUkVGICAweGYyMDcwMGZmCisKKy8qUDJfSURDQ09NUCovCisjZGVmaW5lIFIwOTAwX1AyX0lEQ0NPTVAgIDB4ZjIwOAorI2RlZmluZSBGMDkwMF9QMl9JQVZFUkFHRV9BREogIDB4ZjIwODAxZmYKKworLypQMl9RRENDT01QKi8KKyNkZWZpbmUgUjA5MDBfUDJfUURDQ09NUCAgMHhmMjA5CisjZGVmaW5lIEYwOTAwX1AyX1FBVkVSQUdFX0FESiAgMHhmMjA5MDFmZgorCisvKlAyX1BPV0VSSSovCisjZGVmaW5lIFIwOTAwX1AyX1BPV0VSSSAgMHhmMjBhCisjZGVmaW5lIEYwOTAwX1AyX1BPV0VSX0kgIDB4ZjIwYTAwZmYKKworLypQMl9QT1dFUlEqLworI2RlZmluZSBSMDkwMF9QMl9QT1dFUlEgIDB4ZjIwYgorI2RlZmluZSBGMDkwMF9QMl9QT1dFUl9RICAweGYyMGIwMGZmCisKKy8qUDJfQUdDMUFNTSovCisjZGVmaW5lIFIwOTAwX1AyX0FHQzFBTU0gIDB4ZjIwYworI2RlZmluZSBGMDkwMF9QMl9BTU1fVkFMVUUgIDB4ZjIwYzAwZmYKKworLypQMl9BR0MxUVVBRCovCisjZGVmaW5lIFIwOTAwX1AyX0FHQzFRVUFEICAweGYyMGQKKyNkZWZpbmUgRjA5MDBfUDJfUVVBRF9WQUxVRSAgMHhmMjBkMDFmZgorCisvKlAyX0FHQ0lRSU4xKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUdDSVFJTjEgIDB4ZjIwZQorI2RlZmluZSBGMDkwMF9QMl9BR0NJUV9WQUxVRTEgIDB4ZjIwZTAwZmYKKworLypQMl9BR0NJUUlOMCovCisjZGVmaW5lIFIwOTAwX1AyX0FHQ0lRSU4wICAweGYyMGYKKyNkZWZpbmUgRjA5MDBfUDJfQUdDSVFfVkFMVUUwICAweGYyMGYwMGZmCisKKy8qUDJfREVNT0QqLworI2RlZmluZSBSMDkwMF9QMl9ERU1PRCAgMHhmMjEwCisjZGVmaW5lIEYwOTAwX1AyX0RFTU9EX1NUT1AgIDB4ZjIxMDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfU1BFQ0lOVl9DT05UUk9MICAweGYyMTAwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0ZPUkNFX0VOQVNBTVAgIDB4ZjIxMDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfTUFOVUFMX1JPTExPRkYgIDB4ZjIxMDAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfUk9MTE9GRl9DT05UUk9MICAweGYyMTAwMDAzCisKKy8qUDJfRE1ETU9EQ09EKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1ETU9EQ09EICAweGYyMTEKKyNkZWZpbmUgRjA5MDBfUDJfTUFOVUFMX01PRENPRCAgMHhmMjExMDA4MAorI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9NT0RDT0QgIDB4ZjIxMTAwN2MKKyNkZWZpbmUgRjA5MDBfUDJfREVNT0RfVFlQRSAgMHhmMjExMDAwMworCisvKlAyX0RTVEFUVVMqLworI2RlZmluZSBSMDkwMF9QMl9EU1RBVFVTICAweGYyMTIKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSX0xPQ0sgIDB4ZjIxMjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfVE1HTE9DS19RVUFMSVRZICAweGYyMTIwMDYwCisjZGVmaW5lIEYwOTAwX1AyX1NEVkJTMV9FTkFCTEUgIDB4ZjIxMjAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfTE9DS19ERUZJTklUSUYgIDB4ZjIxMjAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfVElNSU5HX0lTX0xPQ0tFRCAgMHhmMjEyMDAwNAorI2RlZmluZSBGMDkwMF9QMl9DT0FSU0VfVE1HTE9DSyAgMHhmMjEyMDAwMgorI2RlZmluZSBGMDkwMF9QMl9DT0FSU0VfQ0FSTE9DSyAgMHhmMjEyMDAwMQorCisvKlAyX0RTVEFUVVMyKi8KKyNkZWZpbmUgUjA5MDBfUDJfRFNUQVRVUzIgIDB4ZjIxMworI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9ERUxPQ0sgIDB4ZjIxMzAwODAKKyNkZWZpbmUgRjA5MDBfUDJfREVNT0RfVElNRU9VVCAgMHhmMjEzMDA0MAorI2RlZmluZSBGMDkwMF9QMl9NT0RDT0RSUV9TWU5DVEFHICAweGYyMTMwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1BPTFlQSF9TQVRFVkVOVCAgMHhmMjEzMDAxMAorI2RlZmluZSBGMDkwMF9QMl9BR0MxX05PU0lHTkFMQUNLICAweGYyMTMwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0FHQzJfT1ZFUkZMT1cgIDB4ZjIxMzAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSX09WRVJGTE9XICAweGYyMTMwMDAyCisjZGVmaW5lIEYwOTAwX1AyX0dBTU1BX09WRVJVTkRFUiAgMHhmMjEzMDAwMQorCisvKlAyX0RNRENGR01EKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EQ0ZHTUQgIDB4ZjIxNAorI2RlZmluZSBGMDkwMF9QMl9EVkJTMl9FTkFCTEUgIDB4ZjIxNDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRFZCUzFfRU5BQkxFICAweGYyMTQwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0NGUl9BVVRPU0NBTiAgMHhmMjE0MDAyMAorI2RlZmluZSBGMDkwMF9QMl9TQ0FOX0VOQUJMRSAgMHhmMjE0MDAxMAorI2RlZmluZSBGMDkwMF9QMl9UVU5fQVVUT1NDQU4gIDB4ZjIxNDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfTk9GT1JDRV9SRUxPQ0sgIDB4ZjIxNDAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1JORyAgMHhmMjE0MDAwMworCisvKlAyX0RNRENGRzIqLworI2RlZmluZSBSMDkwMF9QMl9ETURDRkcyICAweGYyMTUKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMV9XQUlUTE9DSyAgMHhmMjE1MDA4MAorI2RlZmluZSBGMDkwMF9QMl9TMVMyX1NFUVVFTlRJQUwgIDB4ZjIxNTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfT1ZFUkZMT1dfVElNRU9VVCAgMHhmMjE1MDAyMAorI2RlZmluZSBGMDkwMF9QMl9TQ0FORkFJTF9USU1FT1VUICAweGYyMTUwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0RNRFRPVVRfQkFDSyAgMHhmMjE1MDAwOAorI2RlZmluZSBGMDkwMF9QMl9DQVJMT0NLX1MxRU5BQkxFICAweGYyMTUwMDA0CisjZGVmaW5lIEYwOTAwX1AyX0NPQVJTRV9MSzNNT0RFICAweGYyMTUwMDAyCisjZGVmaW5lIEYwOTAwX1AyX0NPQVJTRV9MSzJNT0RFICAweGYyMTUwMDAxCisKKy8qUDJfRE1ESVNUQVRFKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1ESVNUQVRFICAweGYyMTYKKyNkZWZpbmUgRjA5MDBfUDJfSTJDX05PUkVTRVRETU9ERSAgMHhmMjE2MDA4MAorI2RlZmluZSBGMDkwMF9QMl9GT1JDRV9FVEFQRUQgIDB4ZjIxNjAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfU0RNRFJTVF9ESVJDTEsgIDB4ZjIxNjAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfSTJDX0RFTU9EX01PREUgIDB4ZjIxNjAwMWYKKworLypQMl9ETURUME0qLworI2RlZmluZSBSMDkwMF9QMl9ETURUME0gIDB4ZjIxNworI2RlZmluZSBGMDkwMF9QMl9ETURUMF9NSU4gIDB4ZjIxNzAwZmYKKworLypQMl9ETURTVEFURSovCisjZGVmaW5lIFIwOTAwX1AyX0RNRFNUQVRFICAweGYyMWIKKyNkZWZpbmUgRjA5MDBfUDJfREVNT0RfTE9DS0VEICAweGYyMWIwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0hFQURFUl9NT0RFICAweGYyMWIwMDYwCisjZGVmaW5lIEYwOTAwX1AyX0RFTU9EX01PREUgIDB4ZjIxYjAwMWYKKworLypQMl9ETURGTFlXKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1ERkxZVyAgMHhmMjFjCisjZGVmaW5lIEYwOTAwX1AyX0kyQ19JUlFWQUwgIDB4ZjIxYzAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRkxZV0hFRUxfQ1BUICAweGYyMWMwMDBmCisKKy8qUDJfRFNUQVRVUzMqLworI2RlZmluZSBSMDkwMF9QMl9EU1RBVFVTMyAgMHhmMjFkCisjZGVmaW5lIEYwOTAwX1AyX0NGUl9aSUdaQUcgIDB4ZjIxZDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfREVNT0RfQ0ZHTU9ERSAgMHhmMjFkMDA2MAorI2RlZmluZSBGMDkwMF9QMl9HQU1NQV9MT1dCQVVEUkFURSAgMHhmMjFkMDAxMAorI2RlZmluZSBGMDkwMF9QMl9SRUxPQ0tfTU9ERSAgMHhmMjFkMDAwOAorI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9GQUlMICAweGYyMWQwMDA0CisjZGVmaW5lIEYwOTAwX1AyX0VUQVBFMUFfRFZCWE1FTSAgMHhmMjFkMDAwMworCisvKlAyX0RNRENGRzMqLworI2RlZmluZSBSMDkwMF9QMl9ETURDRkczICAweGYyMWUKKyNkZWZpbmUgRjA5MDBfUDJfRFZCUzFfVE1HV0FJVCAgMHhmMjFlMDA4MAorI2RlZmluZSBGMDkwMF9QMl9OT19CV0NFTlRFUklORyAgMHhmMjFlMDA0MAorI2RlZmluZSBGMDkwMF9QMl9JTlZfU0VRU1JDSCAgMHhmMjFlMDAyMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfU0ZSVVBMT1dfVFJLICAweGYyMWUwMDEwCisjZGVmaW5lIEYwOTAwX1AyX05PU1RPUF9GSUZPRlVMTCAgMHhmMjFlMDAwOAorI2RlZmluZSBGMDkwMF9QMl9MT0NLVElNRV9NT0RFICAweGYyMWUwMDA3CisKKy8qUDJfRE1EQ0ZHNCovCisjZGVmaW5lIFIwOTAwX1AyX0RNRENGRzQgIDB4ZjIxZgorI2RlZmluZSBGMDkwMF9QMl9UVU5FUl9OUkVMQVVOQ0ggIDB4ZjIxZjAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfRElTX0NMS0VOQUJMRSAgMHhmMjFmMDAwNAorI2RlZmluZSBGMDkwMF9QMl9ESVNfSERSRElWTE9DSyAgMHhmMjFmMDAwMgorI2RlZmluZSBGMDkwMF9QMl9OT19UTlJXQklOSVQgIDB4ZjIxZjAwMDEKKworLypQMl9DT1JSRUxNQU5UKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ09SUkVMTUFOVCAgMHhmMjIwCisjZGVmaW5lIEYwOTAwX1AyX0NPUlJFTF9NQU5UICAweGYyMjAwMGZmCisKKy8qUDJfQ09SUkVMQUJTKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ09SUkVMQUJTICAweGYyMjEKKyNkZWZpbmUgRjA5MDBfUDJfQ09SUkVMX0FCUyAgMHhmMjIxMDBmZgorCisvKlAyX0NPUlJFTEVYUCovCisjZGVmaW5lIFIwOTAwX1AyX0NPUlJFTEVYUCAgMHhmMjIyCisjZGVmaW5lIEYwOTAwX1AyX0NPUlJFTF9BQlNFWFAgIDB4ZjIyMjAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfQ09SUkVMX0VYUCAgMHhmMjIyMDAwZgorCisvKlAyX1BMSE1PRENPRCovCisjZGVmaW5lIFIwOTAwX1AyX1BMSE1PRENPRCAgMHhmMjI0CisjZGVmaW5lIEYwOTAwX1AyX1NQRUNJTlZfREVNT0QgIDB4ZjIyNDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfUExIX01PRENPRCAgMHhmMjI0MDA3YworI2RlZmluZSBGMDkwMF9QMl9QTEhfVFlQRSAgMHhmMjI0MDAwMworCisvKlAyX0FHQ0szMiovCisjZGVmaW5lIFIwOTAwX1AyX0FHQ0szMiAgMHhmMjJiCisjZGVmaW5lIEYwOTAwX1AyX1IzQURKT0ZGXzMyQVBTSyAgMHhmMjJiMDA4MAorI2RlZmluZSBGMDkwMF9QMl9SMkFESk9GRl8zMkFQU0sgIDB4ZjIyYjAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfUjFBREpPRkZfMzJBUFNLICAweGYyMmIwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1JBREpfMzJBUFNLICAweGYyMmIwMDFmCisKKy8qUDJfQUdDMk8qLworI2RlZmluZSBSMDkwMF9QMl9BR0MyTyAgMHhmMjJjCisjZGVmaW5lIEYwOTAwX1AyX0FHQzJSRUZfQURKVVNUSU5HICAweGYyMmMwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0FHQzJfQ09BUlNFRkFTVCAgMHhmMjJjMDA0MAorI2RlZmluZSBGMDkwMF9QMl9BR0MyX0xLU1FSVCAgMHhmMjJjMDAyMAorI2RlZmluZSBGMDkwMF9QMl9BR0MyX0xLTU9ERSAgMHhmMjJjMDAxMAorI2RlZmluZSBGMDkwMF9QMl9BR0MyX0xLRVFVQSAgMHhmMjJjMDAwOAorI2RlZmluZSBGMDkwMF9QMl9BR0MyX0NPRUYgIDB4ZjIyYzAwMDcKKworLypQMl9BR0MyUkVGKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUdDMlJFRiAgMHhmMjJkCisjZGVmaW5lIEYwOTAwX1AyX0FHQzJfUkVGICAweGYyMmQwMGZmCisKKy8qUDJfQUdDMUFESiovCisjZGVmaW5lIFIwOTAwX1AyX0FHQzFBREogIDB4ZjIyZQorI2RlZmluZSBGMDkwMF9QMl9BR0MxQURKX01BTlVBTCAgMHhmMjJlMDA4MAorI2RlZmluZSBGMDkwMF9QMl9BR0MxX0FESlVTVEVEICAweGYyMmUwMTdmCisKKy8qUDJfQUdDMkkxKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUdDMkkxICAweGYyMzYKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMl9JTlRFR1JBVE9SMSAgMHhmMjM2MDBmZgorCisvKlAyX0FHQzJJMCovCisjZGVmaW5lIFIwOTAwX1AyX0FHQzJJMCAgMHhmMjM3CisjZGVmaW5lIEYwOTAwX1AyX0FHQzJfSU5URUdSQVRPUjAgIDB4ZjIzNzAwZmYKKworLypQMl9DQVJDRkcqLworI2RlZmluZSBSMDkwMF9QMl9DQVJDRkcgIDB4ZjIzOAorI2RlZmluZSBGMDkwMF9QMl9DRlJVUExPV19BVVRPICAweGYyMzgwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0NGUlVQTE9XX1RFU1QgIDB4ZjIzODAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfRU5fQ0FSMkNFTlRFUiAgMHhmMjM4MDAyMAorI2RlZmluZSBGMDkwMF9QMl9DQVJIRFJfTk9ESVY4ICAweGYyMzgwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0kyQ19ST1RBICAweGYyMzgwMDA4CisjZGVmaW5lIEYwOTAwX1AyX1JPVEFPTiAgMHhmMjM4MDAwNAorI2RlZmluZSBGMDkwMF9QMl9QSF9ERVRfQUxHTyAgMHhmMjM4MDAwMworCisvKlAyX0FDTEMqLworI2RlZmluZSBSMDkwMF9QMl9BQ0xDICAweGYyMzkKKyNkZWZpbmUgRjA5MDBfUDJfU1RPUF9TMkFMUEhBICAweGYyMzkwMGMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUl9BTFBIQV9NQU5UICAweGYyMzkwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUl9BTFBIQV9FWFAgIDB4ZjIzOTAwMGYKKworLypQMl9CQ0xDKi8KKyNkZWZpbmUgUjA5MDBfUDJfQkNMQyAgMHhmMjNhCisjZGVmaW5lIEYwOTAwX1AyX1NUT1BfUzJCRVRBICAweGYyM2EwMGMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUl9CRVRBX01BTlQgIDB4ZjIzYTAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSX0JFVEFfRVhQICAweGYyM2EwMDBmCisKKy8qUDJfQ0FSRlJFUSovCisjZGVmaW5lIFIwOTAwX1AyX0NBUkZSRVEgIDB4ZjIzZAorI2RlZmluZSBGMDkwMF9QMl9LQ19DT0FSU0VfRVhQICAweGYyM2QwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0JFVEFfRlJFUSAgMHhmMjNkMDAwZgorCisvKlAyX0NBUkhEUiovCisjZGVmaW5lIFIwOTAwX1AyX0NBUkhEUiAgMHhmMjNlCisjZGVmaW5lIEYwOTAwX1AyX0tfRlJFUV9IRFIgIDB4ZjIzZTAwZmYKKworLypQMl9MRFQqLworI2RlZmluZSBSMDkwMF9QMl9MRFQgIDB4ZjIzZgorI2RlZmluZSBGMDkwMF9QMl9DQVJMT0NLX1RIUkVTICAweGYyM2YwMWZmCisKKy8qUDJfTERUMiovCisjZGVmaW5lIFIwOTAwX1AyX0xEVDIgIDB4ZjI0MAorI2RlZmluZSBGMDkwMF9QMl9DQVJMT0NLX1RIUkVTMiAgMHhmMjQwMDFmZgorCisvKlAyX0NGUklDRkcqLworI2RlZmluZSBSMDkwMF9QMl9DRlJJQ0ZHICAweGYyNDEKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSSU5JVF9VTlZBTFJORyAgMHhmMjQxMDA4MAorI2RlZmluZSBGMDkwMF9QMl9DRlJJTklUX0xVTlZBTENQVCAgMHhmMjQxMDA0MAorI2RlZmluZSBGMDkwMF9QMl9DRlJJTklUX0FCT1JUREJMICAweGYyNDEwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0NGUklOSVRfQUJPUlRQUkVEICAweGYyNDEwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0NGUklOSVRfVU5WQUxTS0lQICAweGYyNDEwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0NGUklOSVRfQ1NUSU5DICAweGYyNDEwMDA0CisjZGVmaW5lIEYwOTAwX1AyX05FR19DRlJTVEVQICAweGYyNDEwMDAxCisKKy8qUDJfQ0ZSVVAxKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0ZSVVAxICAweGYyNDIKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSX1VQMSAgMHhmMjQyMDFmZgorCisvKlAyX0NGUlVQMCovCisjZGVmaW5lIFIwOTAwX1AyX0NGUlVQMCAgMHhmMjQzCisjZGVmaW5lIEYwOTAwX1AyX0NGUl9VUDAgIDB4ZjI0MzAwZmYKKworLypQMl9DRlJMT1cxKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0ZSTE9XMSAgMHhmMjQ2CisjZGVmaW5lIEYwOTAwX1AyX0NGUl9MT1cxICAweGYyNDYwMWZmCisKKy8qUDJfQ0ZSTE9XMCovCisjZGVmaW5lIFIwOTAwX1AyX0NGUkxPVzAgIDB4ZjI0NworI2RlZmluZSBGMDkwMF9QMl9DRlJfTE9XMCAgMHhmMjQ3MDBmZgorCisvKlAyX0NGUklOSVQxKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0ZSSU5JVDEgIDB4ZjI0OAorI2RlZmluZSBGMDkwMF9QMl9DRlJfSU5JVDEgIDB4ZjI0ODAxZmYKKworLypQMl9DRlJJTklUMCovCisjZGVmaW5lIFIwOTAwX1AyX0NGUklOSVQwICAweGYyNDkKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSX0lOSVQwICAweGYyNDkwMGZmCisKKy8qUDJfQ0ZSSU5DMSovCisjZGVmaW5lIFIwOTAwX1AyX0NGUklOQzEgIDB4ZjI0YQorI2RlZmluZSBGMDkwMF9QMl9NQU5VQUxfQ0ZSSU5DICAweGYyNGEwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0NGUl9JTkMxICAweGYyNGEwMTdmCisKKy8qUDJfQ0ZSSU5DMCovCisjZGVmaW5lIFIwOTAwX1AyX0NGUklOQzAgIDB4ZjI0YgorI2RlZmluZSBGMDkwMF9QMl9DRlJfSU5DMCAgMHhmMjRiMDBmMAorCisvKlAyX0NGUjIqLworI2RlZmluZSBSMDkwMF9QMl9DRlIyICAweGYyNGMKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSX0ZSRVEyICAweGYyNGMwMWZmCisKKy8qUDJfQ0ZSMSovCisjZGVmaW5lIFIwOTAwX1AyX0NGUjEgIDB4ZjI0ZAorI2RlZmluZSBGMDkwMF9QMl9DQVJfRlJFUTEgIDB4ZjI0ZDAwZmYKKworLypQMl9DRlIwKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0ZSMCAgMHhmMjRlCisjZGVmaW5lIEYwOTAwX1AyX0NBUl9GUkVRMCAgMHhmMjRlMDBmZgorCisvKlAyX0xESSovCisjZGVmaW5lIFIwOTAwX1AyX0xESSAgMHhmMjRmCisjZGVmaW5lIEYwOTAwX1AyX0xPQ0tfREVUX0lOVEVHUiAgMHhmMjRmMDFmZgorCisvKlAyX1RNR0NGRyovCisjZGVmaW5lIFIwOTAwX1AyX1RNR0NGRyAgMHhmMjUwCisjZGVmaW5lIEYwOTAwX1AyX1RNR0xPQ0tfQkVUQSAgMHhmMjUwMDBjMAorI2RlZmluZSBGMDkwMF9QMl9OT1RNR19HUk9VUERFTEFZICAweGYyNTAwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0RPX1RJTUlOR19DT1JSICAweGYyNTAwMDEwCisjZGVmaW5lIEYwOTAwX1AyX01BTlVBTF9TQ0FOICAweGYyNTAwMDBjCisjZGVmaW5lIEYwOTAwX1AyX1RNR19NSU5GUkVRICAweGYyNTAwMDAzCisKKy8qUDJfUlRDKi8KKyNkZWZpbmUgUjA5MDBfUDJfUlRDICAweGYyNTEKKyNkZWZpbmUgRjA5MDBfUDJfVE1HQUxQSEFfRVhQICAweGYyNTEwMGYwCisjZGVmaW5lIEYwOTAwX1AyX1RNR0JFVEFfRVhQICAweGYyNTEwMDBmCisKKy8qUDJfUlRDUzIqLworI2RlZmluZSBSMDkwMF9QMl9SVENTMiAgMHhmMjUyCisjZGVmaW5lIEYwOTAwX1AyX1RNR0FMUEhBUzJfRVhQICAweGYyNTIwMGYwCisjZGVmaW5lIEYwOTAwX1AyX1RNR0JFVEFTMl9FWFAgIDB4ZjI1MjAwMGYKKworLypQMl9UTUdUSFJJU0UqLworI2RlZmluZSBSMDkwMF9QMl9UTUdUSFJJU0UgIDB4ZjI1MworI2RlZmluZSBGMDkwMF9QMl9UTUdMT0NLX1RIUklTRSAgMHhmMjUzMDBmZgorCisvKlAyX1RNR1RIRkFMTCovCisjZGVmaW5lIFIwOTAwX1AyX1RNR1RIRkFMTCAgMHhmMjU0CisjZGVmaW5lIEYwOTAwX1AyX1RNR0xPQ0tfVEhGQUxMICAweGYyNTQwMGZmCisKKy8qUDJfU0ZSVVBSQVRJTyovCisjZGVmaW5lIFIwOTAwX1AyX1NGUlVQUkFUSU8gIDB4ZjI1NQorI2RlZmluZSBGMDkwMF9QMl9TRlJfVVBSQVRJTyAgMHhmMjU1MDBmZgorCisvKlAyX1NGUkxPV1JBVElPKi8KKyNkZWZpbmUgUjA5MDBfUDJfU0ZSTE9XUkFUSU8gIDB4ZjI1NgorI2RlZmluZSBGMDkwMF9QMl9TRlJfTE9XUkFUSU8gIDB4ZjI1NjAwZmYKKworLypQMl9LUkVGVE1HKi8KKyNkZWZpbmUgUjA5MDBfUDJfS1JFRlRNRyAgMHhmMjU4CisjZGVmaW5lIEYwOTAwX1AyX0tSRUZfVE1HICAweGYyNTgwMGZmCisKKy8qUDJfU0ZSU1RFUCovCisjZGVmaW5lIFIwOTAwX1AyX1NGUlNURVAgIDB4ZjI1OQorI2RlZmluZSBGMDkwMF9QMl9TRlJfU0NBTlNURVAgIDB4ZjI1OTAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfU0ZSX0NFTlRFUlNURVAgIDB4ZjI1OTAwMGYKKworLypQMl9UTUdDRkcyKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE1HQ0ZHMiAgMHhmMjVhCisjZGVmaW5lIEYwOTAwX1AyX0RJU19BVVRPU0FNUCAgMHhmMjVhMDAwOAorI2RlZmluZSBGMDkwMF9QMl9TQ0FOSU5JVF9RVUFSVCAgMHhmMjVhMDAwNAorI2RlZmluZSBGMDkwMF9QMl9OT1RNR19EVkJTMURFUkFUICAweGYyNWEwMDAyCisjZGVmaW5lIEYwOTAwX1AyX1NGUlJBVElPX0ZJTkUgIDB4ZjI1YTAwMDEKKworLypQMl9TRlJJTklUMSovCisjZGVmaW5lIFIwOTAwX1AyX1NGUklOSVQxICAweGYyNWUKKyNkZWZpbmUgRjA5MDBfUDJfU0ZSX0lOSVQxICAweGYyNWUwMGZmCisKKy8qUDJfU0ZSSU5JVDAqLworI2RlZmluZSBSMDkwMF9QMl9TRlJJTklUMCAgMHhmMjVmCisjZGVmaW5lIEYwOTAwX1AyX1NGUl9JTklUMCAgMHhmMjVmMDBmZgorCisvKlAyX1NGUlVQMSovCisjZGVmaW5lIFIwOTAwX1AyX1NGUlVQMSAgMHhmMjYwCisjZGVmaW5lIEYwOTAwX1AyX0FVVE9fR1VQICAweGYyNjAwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1NZTUJfRlJFUV9VUDEgIDB4ZjI2MDAwN2YKKworLypQMl9TRlJVUDAqLworI2RlZmluZSBSMDkwMF9QMl9TRlJVUDAgIDB4ZjI2MQorI2RlZmluZSBGMDkwMF9QMl9TWU1CX0ZSRVFfVVAwICAweGYyNjEwMGZmCisKKy8qUDJfU0ZSTE9XMSovCisjZGVmaW5lIFIwOTAwX1AyX1NGUkxPVzEgIDB4ZjI2MgorI2RlZmluZSBGMDkwMF9QMl9BVVRPX0dMT1cgIDB4ZjI2MjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfU1lNQl9GUkVRX0xPVzEgIDB4ZjI2MjAwN2YKKworLypQMl9TRlJMT1cwKi8KKyNkZWZpbmUgUjA5MDBfUDJfU0ZSTE9XMCAgMHhmMjYzCisjZGVmaW5lIEYwOTAwX1AyX1NZTUJfRlJFUV9MT1cwICAweGYyNjMwMGZmCisKKy8qUDJfU0ZSMyovCisjZGVmaW5lIFIwOTAwX1AyX1NGUjMgIDB4ZjI2NAorI2RlZmluZSBGMDkwMF9QMl9TWU1CX0ZSRVEzICAweGYyNjQwMGZmCisKKy8qUDJfU0ZSMiovCisjZGVmaW5lIFIwOTAwX1AyX1NGUjIgIDB4ZjI2NQorI2RlZmluZSBGMDkwMF9QMl9TWU1CX0ZSRVEyICAweGYyNjUwMGZmCisKKy8qUDJfU0ZSMSovCisjZGVmaW5lIFIwOTAwX1AyX1NGUjEgIDB4ZjI2NgorI2RlZmluZSBGMDkwMF9QMl9TWU1CX0ZSRVExICAweGYyNjYwMGZmCisKKy8qUDJfU0ZSMCovCisjZGVmaW5lIFIwOTAwX1AyX1NGUjAgIDB4ZjI2NworI2RlZmluZSBGMDkwMF9QMl9TWU1CX0ZSRVEwICAweGYyNjcwMGZmCisKKy8qUDJfVE1HUkVHMiovCisjZGVmaW5lIFIwOTAwX1AyX1RNR1JFRzIgIDB4ZjI2OAorI2RlZmluZSBGMDkwMF9QMl9UTUdSRUcyICAweGYyNjgwMGZmCisKKy8qUDJfVE1HUkVHMSovCisjZGVmaW5lIFIwOTAwX1AyX1RNR1JFRzEgIDB4ZjI2OQorI2RlZmluZSBGMDkwMF9QMl9UTUdSRUcxICAweGYyNjkwMGZmCisKKy8qUDJfVE1HUkVHMCovCisjZGVmaW5lIFIwOTAwX1AyX1RNR1JFRzAgIDB4ZjI2YQorI2RlZmluZSBGMDkwMF9QMl9UTUdSRUcwICAweGYyNmEwMGZmCisKKy8qUDJfVE1HTE9DSzEqLworI2RlZmluZSBSMDkwMF9QMl9UTUdMT0NLMSAgMHhmMjZiCisjZGVmaW5lIEYwOTAwX1AyX1RNR0xPQ0tfTEVWRUwxICAweGYyNmIwMWZmCisKKy8qUDJfVE1HTE9DSzAqLworI2RlZmluZSBSMDkwMF9QMl9UTUdMT0NLMCAgMHhmMjZjCisjZGVmaW5lIEYwOTAwX1AyX1RNR0xPQ0tfTEVWRUwwICAweGYyNmMwMGZmCisKKy8qUDJfVE1HT0JTKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE1HT0JTICAweGYyNmQKKyNkZWZpbmUgRjA5MDBfUDJfUk9MTE9GRl9TVEFUVVMgIDB4ZjI2ZDAwYzAKKyNkZWZpbmUgRjA5MDBfUDJfU0NBTl9TSUdOICAweGYyNmQwMDMwCisjZGVmaW5lIEYwOTAwX1AyX1RNR19TQ0FOTklORyAgMHhmMjZkMDAwOAorI2RlZmluZSBGMDkwMF9QMl9DSENFTlRFUklOR19NT0RFICAweGYyNmQwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1RNR19TQ0FORkFJTCAgMHhmMjZkMDAwMgorCisvKlAyX0VRVUFMQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQUxDRkcgIDB4ZjI2ZgorI2RlZmluZSBGMDkwMF9QMl9OT1RNR19ORUdBTFdBSVQgIDB4ZjI2ZjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQUxfT04gIDB4ZjI2ZjAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfU0VMX0VRVUFMQ09SICAweGYyNmYwMDM4CisjZGVmaW5lIEYwOTAwX1AyX01VX0VRVUFMREZFICAweGYyNmYwMDA3CisKKy8qUDJfRVFVQUkxKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQUkxICAweGYyNzAKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NJMSAgMHhmMjcwMDFmZgorCisvKlAyX0VRVUFRMSovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFRMSAgMHhmMjcxCisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDUTEgIDB4ZjI3MTAxZmYKKworLypQMl9FUVVBSTIqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBSTIgIDB4ZjI3MgorI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ0kyICAweGYyNzIwMWZmCisKKy8qUDJfRVFVQVEyKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQVEyICAweGYyNzMKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NRMiAgMHhmMjczMDFmZgorCisvKlAyX0VRVUFJMyovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFJMyAgMHhmMjc0CisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDSTMgIDB4ZjI3NDAxZmYKKworLypQMl9FUVVBUTMqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBUTMgIDB4ZjI3NQorI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ1EzICAweGYyNzUwMWZmCisKKy8qUDJfRVFVQUk0Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQUk0ICAweGYyNzYKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NJNCAgMHhmMjc2MDFmZgorCisvKlAyX0VRVUFRNCovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFRNCAgMHhmMjc3CisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDUTQgIDB4ZjI3NzAxZmYKKworLypQMl9FUVVBSTUqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBSTUgIDB4ZjI3OAorI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ0k1ICAweGYyNzgwMWZmCisKKy8qUDJfRVFVQVE1Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQVE1ICAweGYyNzkKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NRNSAgMHhmMjc5MDFmZgorCisvKlAyX0VRVUFJNiovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFJNiAgMHhmMjdhCisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDSTYgIDB4ZjI3YTAxZmYKKworLypQMl9FUVVBUTYqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBUTYgIDB4ZjI3YgorI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ1E2ICAweGYyN2IwMWZmCisKKy8qUDJfRVFVQUk3Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQUk3ICAweGYyN2MKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NJNyAgMHhmMjdjMDFmZgorCisvKlAyX0VRVUFRNyovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFRNyAgMHhmMjdkCisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDUTcgIDB4ZjI3ZDAxZmYKKworLypQMl9FUVVBSTgqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBSTggIDB4ZjI3ZQorI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ0k4ICAweGYyN2UwMWZmCisKKy8qUDJfRVFVQVE4Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQVE4ICAweGYyN2YKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NROCAgMHhmMjdmMDFmZgorCisvKlAyX05OT1NEQVRBVDEqLworI2RlZmluZSBSMDkwMF9QMl9OTk9TREFUQVQxICAweGYyODAKKyNkZWZpbmUgRjA5MDBfUDJfTk9TREFUQVRfTk9STUVEMSAgMHhmMjgwMDBmZgorCisvKlAyX05OT1NEQVRBVDAqLworI2RlZmluZSBSMDkwMF9QMl9OTk9TREFUQVQwICAweGYyODEKKyNkZWZpbmUgRjA5MDBfUDJfTk9TREFUQVRfTk9STUVEMCAgMHhmMjgxMDBmZgorCisvKlAyX05OT1NEQVRBMSovCisjZGVmaW5lIFIwOTAwX1AyX05OT1NEQVRBMSAgMHhmMjgyCisjZGVmaW5lIEYwOTAwX1AyX05PU0RBVEFfTk9STUVEMSAgMHhmMjgyMDBmZgorCisvKlAyX05OT1NEQVRBMCovCisjZGVmaW5lIFIwOTAwX1AyX05OT1NEQVRBMCAgMHhmMjgzCisjZGVmaW5lIEYwOTAwX1AyX05PU0RBVEFfTk9STUVEMCAgMHhmMjgzMDBmZgorCisvKlAyX05OT1NQTEhUMSovCisjZGVmaW5lIFIwOTAwX1AyX05OT1NQTEhUMSAgMHhmMjg0CisjZGVmaW5lIEYwOTAwX1AyX05PU1BMSFRfTk9STUVEMSAgMHhmMjg0MDBmZgorCisvKlAyX05OT1NQTEhUMCovCisjZGVmaW5lIFIwOTAwX1AyX05OT1NQTEhUMCAgMHhmMjg1CisjZGVmaW5lIEYwOTAwX1AyX05PU1BMSFRfTk9STUVEMCAgMHhmMjg1MDBmZgorCisvKlAyX05OT1NQTEgxKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk5PU1BMSDEgIDB4ZjI4NgorI2RlZmluZSBGMDkwMF9QMl9OT1NQTEhfTk9STUVEMSAgMHhmMjg2MDBmZgorCisvKlAyX05OT1NQTEgwKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk5PU1BMSDAgIDB4ZjI4NworI2RlZmluZSBGMDkwMF9QMl9OT1NQTEhfTk9STUVEMCAgMHhmMjg3MDBmZgorCisvKlAyX05PU0RBVEFUMSovCisjZGVmaW5lIFIwOTAwX1AyX05PU0RBVEFUMSAgMHhmMjg4CisjZGVmaW5lIEYwOTAwX1AyX05PU0RBVEFUX1VOTk9STUVEMSAgMHhmMjg4MDBmZgorCisvKlAyX05PU0RBVEFUMCovCisjZGVmaW5lIFIwOTAwX1AyX05PU0RBVEFUMCAgMHhmMjg5CisjZGVmaW5lIEYwOTAwX1AyX05PU0RBVEFUX1VOTk9STUVEMCAgMHhmMjg5MDBmZgorCisvKlAyX05PU0RBVEExKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk9TREFUQTEgIDB4ZjI4YQorI2RlZmluZSBGMDkwMF9QMl9OT1NEQVRBX1VOTk9STUVEMSAgMHhmMjhhMDBmZgorCisvKlAyX05PU0RBVEEwKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk9TREFUQTAgIDB4ZjI4YgorI2RlZmluZSBGMDkwMF9QMl9OT1NEQVRBX1VOTk9STUVEMCAgMHhmMjhiMDBmZgorCisvKlAyX05PU1BMSFQxKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk9TUExIVDEgIDB4ZjI4YworI2RlZmluZSBGMDkwMF9QMl9OT1NQTEhUX1VOTk9STUVEMSAgMHhmMjhjMDBmZgorCisvKlAyX05PU1BMSFQwKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk9TUExIVDAgIDB4ZjI4ZAorI2RlZmluZSBGMDkwMF9QMl9OT1NQTEhUX1VOTk9STUVEMCAgMHhmMjhkMDBmZgorCisvKlAyX05PU1BMSDEqLworI2RlZmluZSBSMDkwMF9QMl9OT1NQTEgxICAweGYyOGUKKyNkZWZpbmUgRjA5MDBfUDJfTk9TUExIX1VOTk9STUVEMSAgMHhmMjhlMDBmZgorCisvKlAyX05PU1BMSDAqLworI2RlZmluZSBSMDkwMF9QMl9OT1NQTEgwICAweGYyOGYKKyNkZWZpbmUgRjA5MDBfUDJfTk9TUExIX1VOTk9STUVEMCAgMHhmMjhmMDBmZgorCisvKlAyX0NBUjJDRkcqLworI2RlZmluZSBSMDkwMF9QMl9DQVIyQ0ZHICAweGYyOTAKKyNkZWZpbmUgRjA5MDBfUDJfREVTQ1JBTUJfT0ZGICAweGYyOTAwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1BONF9TRUxFQ1QgIDB4ZjI5MDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSMl9TVE9QRFZCUzEgIDB4ZjI5MDAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfU1RPUF9DRlIyVVBEQVRFICAweGYyOTAwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1NUT1BfTkNPMlVQREFURSAgMHhmMjkwMDAwOAorI2RlZmluZSBGMDkwMF9QMl9ST1RBMk9OICAweGYyOTAwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1BIX0RFVF9BTEdPMiAgMHhmMjkwMDAwMworCisvKlAyX0FDTEMyKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUNMQzIgIDB4ZjI5MQorI2RlZmluZSBGMDkwMF9QMl9DQVIyX1BVTkNUX0FERVJBVCAgMHhmMjkxMDA0MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyX0FMUEhBX01BTlQgIDB4ZjI5MTAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMl9BTFBIQV9FWFAgIDB4ZjI5MTAwMGYKKworLypQMl9CQ0xDMiovCisjZGVmaW5lIFIwOTAwX1AyX0JDTEMyICAweGYyOTIKKyNkZWZpbmUgRjA5MDBfUDJfRFZCUzJfTklQICAweGYyOTIwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJfUFVOQ1RfQkRFUkFUICAweGYyOTIwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJfQkVUQV9NQU5UICAweGYyOTIwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJfQkVUQV9FWFAgIDB4ZjI5MjAwMGYKKworLypQMl9DRlIyMiovCisjZGVmaW5lIFIwOTAwX1AyX0NGUjIyICAweGYyOTMKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMl9GUkVRMiAgMHhmMjkzMDFmZgorCisvKlAyX0NGUjIxKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0ZSMjEgIDB4ZjI5NAorI2RlZmluZSBGMDkwMF9QMl9DQVIyX0ZSRVExICAweGYyOTQwMGZmCisKKy8qUDJfQ0ZSMjAqLworI2RlZmluZSBSMDkwMF9QMl9DRlIyMCAgMHhmMjk1CisjZGVmaW5lIEYwOTAwX1AyX0NBUjJfRlJFUTAgIDB4ZjI5NTAwZmYKKworLypQMl9BQ0xDMlMyUSovCisjZGVmaW5lIFIwOTAwX1AyX0FDTEMyUzJRICAweGYyOTcKKyNkZWZpbmUgRjA5MDBfUDJfRU5BQl9TUFNLU1lNQiAgMHhmMjk3MDA4MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfUUFERVJBVCAgMHhmMjk3MDA0MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfUV9BTFBIX00gIDB4ZjI5NzAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyX1FfQUxQSF9FICAweGYyOTcwMDBmCisKKy8qUDJfQUNMQzJTMjgqLworI2RlZmluZSBSMDkwMF9QMl9BQ0xDMlMyOCAgMHhmMjk4CisjZGVmaW5lIEYwOTAwX1AyX09MREkzUV9NT0RFICAweGYyOTgwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl84QURFUkFUICAweGYyOTgwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl84X0FMUEhfTSAgMHhmMjk4MDAzMAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfOF9BTFBIX0UgIDB4ZjI5ODAwMGYKKworLypQMl9BQ0xDMlMyMTZBKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUNMQzJTMjE2QSAgMHhmMjk5CisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl8xNkFERVJBVCAgMHhmMjk5MDA0MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfMTZBX0FMUEhfTSAgMHhmMjk5MDAzMAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfMTZBX0FMUEhfRSAgMHhmMjk5MDAwZgorCisvKlAyX0FDTEMyUzIzMkEqLworI2RlZmluZSBSMDkwMF9QMl9BQ0xDMlMyMzJBICAweGYyOWEKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzMyQURFUkFUICAweGYyOWEwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl8zMkFfQUxQSF9NICAweGYyOWEwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl8zMkFfQUxQSF9FICAweGYyOWEwMDBmCisKKy8qUDJfQkNMQzJTMlEqLworI2RlZmluZSBSMDkwMF9QMl9CQ0xDMlMyUSAgMHhmMjljCisjZGVmaW5lIEYwOTAwX1AyX0RWQlMyUzJRX05JUCAgMHhmMjljMDA4MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfUUJERVJBVCAgMHhmMjljMDA0MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfUV9CRVRBX00gIDB4ZjI5YzAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyX1FfQkVUQV9FICAweGYyOWMwMDBmCisKKy8qUDJfQkNMQzJTMjgqLworI2RlZmluZSBSMDkwMF9QMl9CQ0xDMlMyOCAgMHhmMjlkCisjZGVmaW5lIEYwOTAwX1AyX0RWQlMyUzI4X05JUCAgMHhmMjlkMDA4MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfOEJERVJBVCAgMHhmMjlkMDA0MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfOF9CRVRBX00gIDB4ZjI5ZDAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzhfQkVUQV9FICAweGYyOWQwMDBmCisKKy8qUDJfQkNMQzJTMjE2QSovCisjZGVmaW5lIFIwOTAwX1AyX0JDTEMyUzIxNkEgIDB4ZjI5ZQorI2RlZmluZSBGMDkwMF9QMl9EVkJTMlMyMTZBX05JUCAgMHhmMjllMDA4MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfMTZCREVSQVQgIDB4ZjI5ZTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzE2QV9CRVRBX00gIDB4ZjI5ZTAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzE2QV9CRVRBX0UgIDB4ZjI5ZTAwMGYKKworLypQMl9CQ0xDMlMyMzJBKi8KKyNkZWZpbmUgUjA5MDBfUDJfQkNMQzJTMjMyQSAgMHhmMjlmCisjZGVmaW5lIEYwOTAwX1AyX0RWQlMyUzIzMkFfTklQICAweGYyOWYwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl8zMkJERVJBVCAgMHhmMjlmMDA0MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfMzJBX0JFVEFfTSAgMHhmMjlmMDAzMAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfMzJBX0JFVEFfRSAgMHhmMjlmMDAwZgorCisvKlAyX1BMUk9PVDIqLworI2RlZmluZSBSMDkwMF9QMl9QTFJPT1QyICAweGYyYWMKKyNkZWZpbmUgRjA5MDBfUDJfU0hPUlRGUl9ESVNBQkxFICAweGYyYWMwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0xPTkdGUl9ESVNBQkxFICAweGYyYWMwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0RVTU1ZUExfRElTQUJMRSAgMHhmMmFjMDAyMAorI2RlZmluZSBGMDkwMF9QMl9TSE9SVEZSX0FWT0lEICAweGYyYWMwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1BMU0NSQU1CX01PREUgIDB4ZjJhYzAwMGMKKyNkZWZpbmUgRjA5MDBfUDJfUExTQ1JBTUJfUk9PVDIgIDB4ZjJhYzAwMDMKKworLypQMl9QTFJPT1QxKi8KKyNkZWZpbmUgUjA5MDBfUDJfUExST09UMSAgMHhmMmFkCisjZGVmaW5lIEYwOTAwX1AyX1BMU0NSQU1CX1JPT1QxICAweGYyYWQwMGZmCisKKy8qUDJfUExST09UMCovCisjZGVmaW5lIFIwOTAwX1AyX1BMUk9PVDAgIDB4ZjJhZQorI2RlZmluZSBGMDkwMF9QMl9QTFNDUkFNQl9ST09UMCAgMHhmMmFlMDBmZgorCisvKlAyX01PRENPRExTVDAqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1QwICAweGYyYjAKKyNkZWZpbmUgRjA5MDBfUDJfRU5fVE9LRU4zMSAgMHhmMmIwMDA4MAorI2RlZmluZSBGMDkwMF9QMl9TWU5DVEFHX1NFTEVDVCAgMHhmMmIwMDA0MAorI2RlZmluZSBGMDkwMF9QMl9NT0RDT0RSUV9NT0RFICAweGYyYjAwMDMwCisKKy8qUDJfTU9EQ09ETFNUMSovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVDEgIDB4ZjJiMQorI2RlZmluZSBGMDkwMF9QMl9ESVNfTU9EQ09EMjkgIDB4ZjJiMTAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzMyUFNLXzlfMTAgIDB4ZjJiMTAwMGYKKworLypQMl9NT0RDT0RMU1QyKi8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNUMiAgMHhmMmIyCisjZGVmaW5lIEYwOTAwX1AyX0RJU18zMlBTS184XzkgIDB4ZjJiMjAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzMyUFNLXzVfNiAgMHhmMmIyMDAwZgorCisvKlAyX01PRENPRExTVDMqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1QzICAweGYyYjMKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzMyUFNLXzRfNSAgMHhmMmIzMDBmMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfMzJQU0tfM180ICAweGYyYjMwMDBmCisKKy8qUDJfTU9EQ09ETFNUNCovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVDQgIDB4ZjJiNAorI2RlZmluZSBGMDkwMF9QMl9ESVNfMTZQU0tfOV8xMCAgMHhmMmI0MDBmMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfMTZQU0tfOF85ICAweGYyYjQwMDBmCisKKy8qUDJfTU9EQ09ETFNUNSovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVDUgIDB4ZjJiNQorI2RlZmluZSBGMDkwMF9QMl9ESVNfMTZQU0tfNV82ICAweGYyYjUwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU18xNlBTS180XzUgIDB4ZjJiNTAwMGYKKworLypQMl9NT0RDT0RMU1Q2Ki8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNUNiAgMHhmMmI2CisjZGVmaW5lIEYwOTAwX1AyX0RJU18xNlBTS18zXzQgIDB4ZjJiNjAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzE2UFNLXzJfMyAgMHhmMmI2MDAwZgorCisvKlAyX01PRENPRExTVDcqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1Q3ICAweGYyYjcKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzhQXzlfMTAgIDB4ZjJiNzAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzhQXzhfOSAgMHhmMmI3MDAwZgorCisvKlAyX01PRENPRExTVDgqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1Q4ICAweGYyYjgKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzhQXzVfNiAgMHhmMmI4MDBmMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfOFBfM180ICAweGYyYjgwMDBmCisKKy8qUDJfTU9EQ09ETFNUOSovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVDkgIDB4ZjJiOQorI2RlZmluZSBGMDkwMF9QMl9ESVNfOFBfMl8zICAweGYyYjkwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU184UF8zXzUgIDB4ZjJiOTAwMGYKKworLypQMl9NT0RDT0RMU1RBKi8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNUQSAgMHhmMmJhCisjZGVmaW5lIEYwOTAwX1AyX0RJU19RUF85XzEwICAweGYyYmEwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU19RUF84XzkgIDB4ZjJiYTAwMGYKKworLypQMl9NT0RDT0RMU1RCKi8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNUQiAgMHhmMmJiCisjZGVmaW5lIEYwOTAwX1AyX0RJU19RUF81XzYgIDB4ZjJiYjAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1FQXzRfNSAgMHhmMmJiMDAwZgorCisvKlAyX01PRENPRExTVEMqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1RDICAweGYyYmMKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1FQXzNfNCAgMHhmMmJjMDBmMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfUVBfMl8zICAweGYyYmMwMDBmCisKKy8qUDJfTU9EQ09ETFNURCovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVEQgIDB4ZjJiZAorI2RlZmluZSBGMDkwMF9QMl9ESVNfUVBfM181ICAweGYyYmQwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU19RUF8xXzIgIDB4ZjJiZDAwMGYKKworLypQMl9NT0RDT0RMU1RFKi8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNURSAgMHhmMmJlCisjZGVmaW5lIEYwOTAwX1AyX0RJU19RUF8yXzUgIDB4ZjJiZTAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1FQXzFfMyAgMHhmMmJlMDAwZgorCisvKlAyX01PRENPRExTVEYqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1RGICAweGYyYmYKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1FQXzFfNCAgMHhmMmJmMDBmMAorI2RlZmluZSBGMDkwMF9QMl9EREVNT0RfU0VUICAweGYyYmYwMDAyCisjZGVmaW5lIEYwOTAwX1AyX0RERU1PRF9NQVNLICAweGYyYmYwMDAxCisKKy8qUDJfRE1EUkVTQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EUkVTQ0ZHICAweGYyYzYKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX1JFU0VUICAweGYyYzYwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19OT0lTRVNRUiAgMHhmMmM2MDAxMAorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfU1RSQUxMICAweGYyYzYwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19ORVdPTkxZICAweGYyYzYwMDA0CisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19OT1NUT1JFICAweGYyYzYwMDAyCisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19BR0MyTUVNICAweGYyYzYwMDAxCisKKy8qUDJfRE1EUkVTQURSKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EUkVTQURSICAweGYyYzcKKyNkZWZpbmUgRjA5MDBfUDJfU1VTUF9QUkVEQ0FOQUwgIDB4ZjJjNzAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX1ZBTElEQ0ZSICAweGYyYzcwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19NRU1GVUxMICAweGYyYzcwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19SRVNOQlIgIDB4ZjJjNzAwMGYKKworLypQMl9ETURSRVNEQVRBNyovCisjZGVmaW5lIFIwOTAwX1AyX0RNRFJFU0RBVEE3ICAweGYyYzgKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX0RBVEE3ICAweGYyYzgwMGZmCisKKy8qUDJfRE1EUkVTREFUQTYqLworI2RlZmluZSBSMDkwMF9QMl9ETURSRVNEQVRBNiAgMHhmMmM5CisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19EQVRBNiAgMHhmMmM5MDBmZgorCisvKlAyX0RNRFJFU0RBVEE1Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EUkVTREFUQTUgIDB4ZjJjYQorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfREFUQTUgIDB4ZjJjYTAwZmYKKworLypQMl9ETURSRVNEQVRBNCovCisjZGVmaW5lIFIwOTAwX1AyX0RNRFJFU0RBVEE0ICAweGYyY2IKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX0RBVEE0ICAweGYyY2IwMGZmCisKKy8qUDJfRE1EUkVTREFUQTMqLworI2RlZmluZSBSMDkwMF9QMl9ETURSRVNEQVRBMyAgMHhmMmNjCisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19EQVRBMyAgMHhmMmNjMDBmZgorCisvKlAyX0RNRFJFU0RBVEEyKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EUkVTREFUQTIgIDB4ZjJjZAorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfREFUQTIgIDB4ZjJjZDAwZmYKKworLypQMl9ETURSRVNEQVRBMSovCisjZGVmaW5lIFIwOTAwX1AyX0RNRFJFU0RBVEExICAweGYyY2UKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX0RBVEExICAweGYyY2UwMGZmCisKKy8qUDJfRE1EUkVTREFUQTAqLworI2RlZmluZSBSMDkwMF9QMl9ETURSRVNEQVRBMCAgMHhmMmNmCisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19EQVRBMCAgMHhmMmNmMDBmZgorCisvKlAyX0ZGRUkxKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkZFSTEgIDB4ZjJkMAorI2RlZmluZSBGMDkwMF9QMl9GRkVfQUNDSTEgIDB4ZjJkMDAxZmYKKworLypQMl9GRkVRMSovCisjZGVmaW5lIFIwOTAwX1AyX0ZGRVExICAweGYyZDEKKyNkZWZpbmUgRjA5MDBfUDJfRkZFX0FDQ1ExICAweGYyZDEwMWZmCisKKy8qUDJfRkZFSTIqLworI2RlZmluZSBSMDkwMF9QMl9GRkVJMiAgMHhmMmQyCisjZGVmaW5lIEYwOTAwX1AyX0ZGRV9BQ0NJMiAgMHhmMmQyMDFmZgorCisvKlAyX0ZGRVEyKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkZFUTIgIDB4ZjJkMworI2RlZmluZSBGMDkwMF9QMl9GRkVfQUNDUTIgIDB4ZjJkMzAxZmYKKworLypQMl9GRkVJMyovCisjZGVmaW5lIFIwOTAwX1AyX0ZGRUkzICAweGYyZDQKKyNkZWZpbmUgRjA5MDBfUDJfRkZFX0FDQ0kzICAweGYyZDQwMWZmCisKKy8qUDJfRkZFUTMqLworI2RlZmluZSBSMDkwMF9QMl9GRkVRMyAgMHhmMmQ1CisjZGVmaW5lIEYwOTAwX1AyX0ZGRV9BQ0NRMyAgMHhmMmQ1MDFmZgorCisvKlAyX0ZGRUk0Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRkZFSTQgIDB4ZjJkNgorI2RlZmluZSBGMDkwMF9QMl9GRkVfQUNDSTQgIDB4ZjJkNjAxZmYKKworLypQMl9GRkVRNCovCisjZGVmaW5lIFIwOTAwX1AyX0ZGRVE0ICAweGYyZDcKKyNkZWZpbmUgRjA5MDBfUDJfRkZFX0FDQ1E0ICAweGYyZDcwMWZmCisKKy8qUDJfRkZFQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkZFQ0ZHICAweGYyZDgKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQUxGRkVfT04gIDB4ZjJkODAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQUxfVVNFRFNZTUIgIDB4ZjJkODAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfTVVfRVFVQUxGRkUgIDB4ZjJkODAwMDcKKworLypQMl9UTlJDRkcqLworI2RlZmluZSBSMDkwMF9QMl9UTlJDRkcgIDB4ZjJlMAorI2RlZmluZSBGMDkwMF9QMl9UVU5fQUNLRkFJTCAgMHhmMmUwMDA4MAorI2RlZmluZSBGMDkwMF9QMl9UVU5fVFlQRSAgMHhmMmUwMDA3MAorI2RlZmluZSBGMDkwMF9QMl9UVU5fU0VDU1RPUCAgMHhmMmUwMDAwOAorI2RlZmluZSBGMDkwMF9QMl9UVU5fVkNPU1JDSCAgMHhmMmUwMDAwNAorI2RlZmluZSBGMDkwMF9QMl9UVU5fTUFERFJFU1MgIDB4ZjJlMDAwMDMKKworLypQMl9UTlJDRkcyKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE5SQ0ZHMiAgMHhmMmUxCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9JUVNXQVAgIDB4ZjJlMTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjExMF9TVEVQMk1IWiAgMHhmMmUxMDA0MAorI2RlZmluZSBGMDkwMF9QMl9TVEI2MTIwX0RCTEkyQyAgMHhmMmUxMDAyMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfRkNDSyAgMHhmMmUxMDAxMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfTFBFTiAgMHhmMmUxMDAwOAorI2RlZmluZSBGMDkwMF9QMl9ESVNfQldDQUxDICAweGYyZTEwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1NIT1JUX1dBSVRTVEFURVMgIDB4ZjJlMTAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzJCV0FHQzEgIDB4ZjJlMTAwMDEKKworLypQMl9UTlJYVEFMKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE5SWFRBTCAgMHhmMmU0CisjZGVmaW5lIEYwOTAwX1AyX1RVTl9NQ0xLREVDSU1BTCAgMHhmMmU0MDBlMAorI2RlZmluZSBGMDkwMF9QMl9UVU5fWFRBTEZSRVEgIDB4ZjJlNDAwMWYKKworLypQMl9UTlJTVEVQUyovCisjZGVmaW5lIFIwOTAwX1AyX1ROUlNURVBTICAweGYyZTcKKyNkZWZpbmUgRjA5MDBfUDJfVFVORVJfQlcxUDYgIDB4ZjJlNzAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQldJTkNfT0ZGU0VUICAweGYyZTcwMDcwCisjZGVmaW5lIEYwOTAwX1AyX1NPRlRTVEVQX1JORyAgMHhmMmU3MDAwOAorI2RlZmluZSBGMDkwMF9QMl9UVU5fQldPRkZTRVQgIDB4ZjJlNzAxMDcKKworLypQMl9UTlJHQUlOKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE5SR0FJTiAgMHhmMmU4CisjZGVmaW5lIEYwOTAwX1AyX1RVTl9LRElWRU4gIDB4ZjJlODAwYzAKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNlgwMF9PQ0sgIDB4ZjJlODAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX0dBSU4gIDB4ZjJlODAwMGYKKworLypQMl9UTlJSRjEqLworI2RlZmluZSBSMDkwMF9QMl9UTlJSRjEgIDB4ZjJlOQorI2RlZmluZSBGMDkwMF9QMl9UVU5fUkZGUkVRMiAgMHhmMmU5MDBmZgorCisvKlAyX1ROUlJGMCovCisjZGVmaW5lIFIwOTAwX1AyX1ROUlJGMCAgMHhmMmVhCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9SRkZSRVExICAweGYyZWEwMGZmCisKKy8qUDJfVE5SQlcqLworI2RlZmluZSBSMDkwMF9QMl9UTlJCVyAgMHhmMmViCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9SRkZSRVEwICAweGYyZWIwMGMwCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9CVyAgMHhmMmViMDAzZgorCisvKlAyX1ROUkFESiovCisjZGVmaW5lIFIwOTAwX1AyX1ROUkFESiAgMHhmMmVjCisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxWDBfUkNMSyAgMHhmMmVjMDA4MAorI2RlZmluZSBGMDkwMF9QMl9TVEI2MVgwX0NBTFRJTUUgIDB4ZjJlYzAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNlgwMF9ETEIgIDB4ZjJlYzAwMzgKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjAwMF9GQ0wgIDB4ZjJlYzAwMDcKKworLypQMl9UTlJDVEwyKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE5SQ1RMMiAgMHhmMmVkCisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxWDBfTENQMV9SQ0NLT0ZGICAweGYyZWQwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxWDBfTENQMCAgMHhmMmVkMDA0MAorI2RlZmluZSBGMDkwMF9QMl9TVEI2MVgwX1hUT1VUX1JGT1VUUyAgMHhmMmVkMDAyMAorI2RlZmluZSBGMDkwMF9QMl9TVEI2MVgwX1hUT05fTUNLRFYgIDB4ZjJlZDAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjFYMF9DQUxPRkZfRENPRkYgIDB4ZjJlZDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjExMF9MUFQgIDB4ZjJlZDAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjExMF9SWCAgMHhmMmVkMDAwMgorI2RlZmluZSBGMDkwMF9QMl9TVEI2MTEwX1NZTiAgMHhmMmVkMDAwMQorCisvKlAyX1ROUkNGRzMqLworI2RlZmluZSBSMDkwMF9QMl9UTlJDRkczICAweGYyZWUKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjEyMF9ESVNDVFJMMSAgMHhmMmVlMDA4MAorI2RlZmluZSBGMDkwMF9QMl9TVEI2MTIwX0lOVk9SREVSICAweGYyZWUwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxMjBfRU5DVFJMNiAgMHhmMmVlMDAyMAorI2RlZmluZSBGMDkwMF9QMl9UVU5fUExMRlJFUSAgMHhmMmVlMDAxYworI2RlZmluZSBGMDkwMF9QMl9UVU5fSTJDRlJFUV9NT0RFICAweGYyZWUwMDAzCisKKy8qUDJfVE5STEFVTkNIKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE5STEFVTkNIICAweGYyZjAKKworLypQMl9UTlJMRCovCisjZGVmaW5lIFIwOTAwX1AyX1ROUkxEICAweGYyZjAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOTERfVkNPSU5HICAweGYyZjAwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9SRUcxRkFJTCAgMHhmMmYwMDA0MAorI2RlZmluZSBGMDkwMF9QMl9UVU5fUkVHMkZBSUwgIDB4ZjJmMDAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1JFRzNGQUlMICAweGYyZjAwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9SRUc0RkFJTCAgMHhmMmYwMDAwOAorI2RlZmluZSBGMDkwMF9QMl9UVU5fUkVHNUZBSUwgIDB4ZjJmMDAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX0JXSU5HICAweGYyZjAwMDAyCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9MT0NLRUQgIDB4ZjJmMDAwMDEKKworLypQMl9UTlJPQlNMKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE5ST0JTTCAgMHhmMmY2CisjZGVmaW5lIEYwOTAwX1AyX1RVTl9JMkNBQk9SVEVEICAweGYyZjYwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9MUEVOICAweGYyZjYwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9GQ0NLICAweGYyZjYwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9JMkNMT0NLRUQgIDB4ZjJmNjAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1BST0dET05FICAweGYyZjYwMDBjCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9SRlJFU1RFMSAgMHhmMmY2MDAwMworCisvKlAyX1ROUlJFU1RFKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE5SUkVTVEUgIDB4ZjJmNworI2RlZmluZSBGMDkwMF9QMl9UVU5fUkZSRVNURTAgIDB4ZjJmNzAwZmYKKworLypQMl9TTUFQQ09FRjcqLworI2RlZmluZSBSMDkwMF9QMl9TTUFQQ09FRjcgIDB4ZjMwMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfUVNDQUxFICAweGYzMDAwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1NNQVBDT0VGX1FfTExSMTIgIDB4ZjMwMDAxN2YKKworLypQMl9TTUFQQ09FRjYqLworI2RlZmluZSBSMDkwMF9QMl9TTUFQQ09FRjYgIDB4ZjMwMQorI2RlZmluZSBGMDkwMF9QMl9ESVNfTkVXU0NBTEUgIDB4ZjMwMTAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfQURKXzhQU0tMTFIxICAweGYzMDEwMDA0CisjZGVmaW5lIEYwOTAwX1AyX09MRF84UFNLTExSMSAgMHhmMzAxMDAwMgorI2RlZmluZSBGMDkwMF9QMl9ESVNfQUI4UFNLICAweGYzMDEwMDAxCisKKy8qUDJfU01BUENPRUY1Ki8KKyNkZWZpbmUgUjA5MDBfUDJfU01BUENPRUY1ICAweGYzMDIKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzhTQ0FMRSAgMHhmMzAyMDA4MAorI2RlZmluZSBGMDkwMF9QMl9TTUFQQ09FRl84UF9MTFIyMyAgMHhmMzAyMDE3ZgorCisvKlAyX0RNRFBMSFNUQVQqLworI2RlZmluZSBSMDkwMF9QMl9ETURQTEhTVEFUICAweGYzMjAKKyNkZWZpbmUgRjA5MDBfUDJfUExIX1NUQVRJU1RJQyAgMHhmMzIwMDBmZgorCisvKlAyX0xPQ0tUSU1FMyovCisjZGVmaW5lIFIwOTAwX1AyX0xPQ0tUSU1FMyAgMHhmMzIyCisjZGVmaW5lIEYwOTAwX1AyX0RFTU9EX0xPQ0tUSU1FMyAgMHhmMzIyMDBmZgorCisvKlAyX0xPQ0tUSU1FMiovCisjZGVmaW5lIFIwOTAwX1AyX0xPQ0tUSU1FMiAgMHhmMzIzCisjZGVmaW5lIEYwOTAwX1AyX0RFTU9EX0xPQ0tUSU1FMiAgMHhmMzIzMDBmZgorCisvKlAyX0xPQ0tUSU1FMSovCisjZGVmaW5lIFIwOTAwX1AyX0xPQ0tUSU1FMSAgMHhmMzI0CisjZGVmaW5lIEYwOTAwX1AyX0RFTU9EX0xPQ0tUSU1FMSAgMHhmMzI0MDBmZgorCisvKlAyX0xPQ0tUSU1FMCovCisjZGVmaW5lIFIwOTAwX1AyX0xPQ0tUSU1FMCAgMHhmMzI1CisjZGVmaW5lIEYwOTAwX1AyX0RFTU9EX0xPQ0tUSU1FMCAgMHhmMzI1MDBmZgorCisvKlAyX1ZJVFNDQUxFKi8KKyNkZWZpbmUgUjA5MDBfUDJfVklUU0NBTEUgIDB4ZjMzMgorI2RlZmluZSBGMDkwMF9QMl9OVlRIX05PU1JBTkdFICAweGYzMzIwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1ZFUlJPUl9NQVhNT0RFICAweGYzMzIwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0tESVZfTU9ERSAgMHhmMzMyMDAzMAorI2RlZmluZSBGMDkwMF9QMl9OU0xPV1NOX0xPQ0tFRCAgMHhmMzMyMDAwOAorI2RlZmluZSBGMDkwMF9QMl9ERUxPQ0tfUFJGTE9TUyAgMHhmMzMyMDAwNAorI2RlZmluZSBGMDkwMF9QMl9ESVNfUlNGTE9DSyAgMHhmMzMyMDAwMgorCisvKlAyX0ZFQ00qLworI2RlZmluZSBSMDkwMF9QMl9GRUNNICAweGYzMzMKKyNkZWZpbmUgRjA5MDBfUDJfRFNTX0RWQiAgMHhmMzMzMDA4MAorI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9CWVBBU1MgIDB4ZjMzMzAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ01QX1NMT1dNT0RFICAweGYzMzMwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0RTU19TUkNIICAweGYzMzMwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0RJRkZfTU9ERVZJVCAgMHhmMzMzMDAwNAorI2RlZmluZSBGMDkwMF9QMl9TWU5DVklUICAweGYzMzMwMDAyCisjZGVmaW5lIEYwOTAwX1AyX0lRSU5WICAweGYzMzMwMDAxCisKKy8qUDJfVlRIMTIqLworI2RlZmluZSBSMDkwMF9QMl9WVEgxMiAgMHhmMzM0CisjZGVmaW5lIEYwOTAwX1AyX1ZUSDEyICAweGYzMzQwMGZmCisKKy8qUDJfVlRIMjMqLworI2RlZmluZSBSMDkwMF9QMl9WVEgyMyAgMHhmMzM1CisjZGVmaW5lIEYwOTAwX1AyX1ZUSDIzICAweGYzMzUwMGZmCisKKy8qUDJfVlRIMzQqLworI2RlZmluZSBSMDkwMF9QMl9WVEgzNCAgMHhmMzM2CisjZGVmaW5lIEYwOTAwX1AyX1ZUSDM0ICAweGYzMzYwMGZmCisKKy8qUDJfVlRINTYqLworI2RlZmluZSBSMDkwMF9QMl9WVEg1NiAgMHhmMzM3CisjZGVmaW5lIEYwOTAwX1AyX1ZUSDU2ICAweGYzMzcwMGZmCisKKy8qUDJfVlRINjcqLworI2RlZmluZSBSMDkwMF9QMl9WVEg2NyAgMHhmMzM4CisjZGVmaW5lIEYwOTAwX1AyX1ZUSDY3ICAweGYzMzgwMGZmCisKKy8qUDJfVlRINzgqLworI2RlZmluZSBSMDkwMF9QMl9WVEg3OCAgMHhmMzM5CisjZGVmaW5lIEYwOTAwX1AyX1ZUSDc4ICAweGYzMzkwMGZmCisKKy8qUDJfVklUQ1VSUFVOKi8KKyNkZWZpbmUgUjA5MDBfUDJfVklUQ1VSUFVOICAweGYzM2EKKyNkZWZpbmUgRjA5MDBfUDJfVklUX01BUFBJTkcgIDB4ZjMzYTAwZTAKKyNkZWZpbmUgRjA5MDBfUDJfVklUX0NVUlBVTiAgMHhmMzNhMDAxZgorCisvKlAyX1ZFUlJPUiovCisjZGVmaW5lIFIwOTAwX1AyX1ZFUlJPUiAgMHhmMzNiCisjZGVmaW5lIEYwOTAwX1AyX1JFR0VSUl9WSVQgIDB4ZjMzYjAwZmYKKworLypQMl9QUlZJVCovCisjZGVmaW5lIFIwOTAwX1AyX1BSVklUICAweGYzM2MKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1ZUSExPQ0sgIDB4ZjMzYzAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfRTdfOFZJVCAgMHhmMzNjMDAyMAorI2RlZmluZSBGMDkwMF9QMl9FNl83VklUICAweGYzM2MwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0U1XzZWSVQgIDB4ZjMzYzAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfRTNfNFZJVCAgMHhmMzNjMDAwNAorI2RlZmluZSBGMDkwMF9QMl9FMl8zVklUICAweGYzM2MwMDAyCisjZGVmaW5lIEYwOTAwX1AyX0UxXzJWSVQgIDB4ZjMzYzAwMDEKKworLypQMl9WQVZTUlZJVCovCisjZGVmaW5lIFIwOTAwX1AyX1ZBVlNSVklUICAweGYzM2QKKyNkZWZpbmUgRjA5MDBfUDJfQU1WSVQgIDB4ZjMzZDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRlJPWkVOVklUICAweGYzM2QwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1NOVklUICAweGYzM2QwMDMwCisjZGVmaW5lIEYwOTAwX1AyX1RPVlZJVCAgMHhmMzNkMDAwYworI2RlZmluZSBGMDkwMF9QMl9IWVBWSVQgIDB4ZjMzZDAwMDMKKworLypQMl9WU1RBVFVTVklUKi8KKyNkZWZpbmUgUjA5MDBfUDJfVlNUQVRVU1ZJVCAgMHhmMzNlCisjZGVmaW5lIEYwOTAwX1AyX1ZJVEVSQklfT04gIDB4ZjMzZTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRU5EX0xPT1BWSVQgIDB4ZjMzZTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfVklURVJCSV9ERVBSRiAgMHhmMzNlMDAyMAorI2RlZmluZSBGMDkwMF9QMl9QUkZWSVQgIDB4ZjMzZTAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfTE9DS0VEVklUICAweGYzM2UwMDA4CisjZGVmaW5lIEYwOTAwX1AyX1ZJVEVSQklfREVMT0NLICAweGYzM2UwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1ZJVF9ERU1PRFNFTCAgMHhmMzNlMDAwMgorI2RlZmluZSBGMDkwMF9QMl9WSVRFUkJJX0NPTVBPVVQgIDB4ZjMzZTAwMDEKKworLypQMl9WVEhJTlVTRSovCisjZGVmaW5lIFIwOTAwX1AyX1ZUSElOVVNFICAweGYzM2YKKyNkZWZpbmUgRjA5MDBfUDJfVklUX0lOVVNFICAweGYzM2YwMGZmCisKKy8qUDJfS0RJVjEyKi8KKyNkZWZpbmUgUjA5MDBfUDJfS0RJVjEyICAweGYzNDAKKyNkZWZpbmUgRjA5MDBfUDJfS0RJVjEyX01BTlVBTCAgMHhmMzQwMDA4MAorI2RlZmluZSBGMDkwMF9QMl9LX0RJVklERVJfMTIgIDB4ZjM0MDAwN2YKKworLypQMl9LRElWMjMqLworI2RlZmluZSBSMDkwMF9QMl9LRElWMjMgIDB4ZjM0MQorI2RlZmluZSBGMDkwMF9QMl9LRElWMjNfTUFOVUFMICAweGYzNDEwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0tfRElWSURFUl8yMyAgMHhmMzQxMDA3ZgorCisvKlAyX0tESVYzNCovCisjZGVmaW5lIFIwOTAwX1AyX0tESVYzNCAgMHhmMzQyCisjZGVmaW5lIEYwOTAwX1AyX0tESVYzNF9NQU5VQUwgIDB4ZjM0MjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfS19ESVZJREVSXzM0ICAweGYzNDIwMDdmCisKKy8qUDJfS0RJVjU2Ki8KKyNkZWZpbmUgUjA5MDBfUDJfS0RJVjU2ICAweGYzNDMKKyNkZWZpbmUgRjA5MDBfUDJfS0RJVjU2X01BTlVBTCAgMHhmMzQzMDA4MAorI2RlZmluZSBGMDkwMF9QMl9LX0RJVklERVJfNTYgIDB4ZjM0MzAwN2YKKworLypQMl9LRElWNjcqLworI2RlZmluZSBSMDkwMF9QMl9LRElWNjcgIDB4ZjM0NAorI2RlZmluZSBGMDkwMF9QMl9LRElWNjdfTUFOVUFMICAweGYzNDQwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0tfRElWSURFUl82NyAgMHhmMzQ0MDA3ZgorCisvKlAyX0tESVY3OCovCisjZGVmaW5lIFIwOTAwX1AyX0tESVY3OCAgMHhmMzQ1CisjZGVmaW5lIEYwOTAwX1AyX0tESVY3OF9NQU5VQUwgIDB4ZjM0NTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfS19ESVZJREVSXzc4ICAweGYzNDUwMDdmCisKKy8qUDJfUERFTENUUkwxKi8KKyNkZWZpbmUgUjA5MDBfUDJfUERFTENUUkwxICAweGYzNTAKKyNkZWZpbmUgRjA5MDBfUDJfSU5WX01JU01BU0sgIDB4ZjM1MDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRk9SQ0VfQUNDRVBURUQgIDB4ZjM1MDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfRklMVEVSX0VOICAweGYzNTAwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0ZPUkNFX1BLVERFTElOVVNFICAweGYzNTAwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0hZU1RFTiAgMHhmMzUwMDAwOAorI2RlZmluZSBGMDkwMF9QMl9IWVNUU1dSU1QgIDB4ZjM1MDAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfRU5fTUlTMDAgIDB4ZjM1MDAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfQUxHT1NXUlNUICAweGYzNTAwMDAxCisKKy8qUDJfUERFTENUUkwyKi8KKyNkZWZpbmUgUjA5MDBfUDJfUERFTENUUkwyICAweGYzNTEKKyNkZWZpbmUgRjA5MDBfUDJfRk9SQ0VfQ09OVElOVU9VUyAgMHhmMzUxMDA4MAorI2RlZmluZSBGMDkwMF9QMl9SRVNFVF9VUEtPX0NPVU5UICAweGYzNTEwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1VTRVJfUEtUREVMSU5fTkIgIDB4ZjM1MTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfRk9SQ0VfTE9DS0VEICAweGYzNTEwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0RBVEFfVU5CQlNDUkFNICAweGYzNTEwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0ZPUkNFX0xPTkdQS1QgIDB4ZjM1MTAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfRlJBTUVfTU9ERSAgMHhmMzUxMDAwMgorCisvKlAyX0hZU1RUSFJFU0gqLworI2RlZmluZSBSMDkwMF9QMl9IWVNUVEhSRVNIICAweGYzNTQKKyNkZWZpbmUgRjA5MDBfUDJfVU5MQ0tfVEhSRVNIICAweGYzNTQwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RFTElOX0xDS19USFJFU0ggIDB4ZjM1NDAwMGYKKworLypQMl9JU0lFTlRSWSovCisjZGVmaW5lIFIwOTAwX1AyX0lTSUVOVFJZICAweGYzNWUKKyNkZWZpbmUgRjA5MDBfUDJfSVNJX0VOVFJZICAweGYzNWUwMGZmCisKKy8qUDJfSVNJQklURU5BKi8KKyNkZWZpbmUgUjA5MDBfUDJfSVNJQklURU5BICAweGYzNWYKKyNkZWZpbmUgRjA5MDBfUDJfSVNJX0JJVF9FTiAgMHhmMzVmMDBmZgorCisvKlAyX01BVFNUUjEqLworI2RlZmluZSBSMDkwMF9QMl9NQVRTVFIxICAweGYzNjAKKyNkZWZpbmUgRjA5MDBfUDJfTUFUWVBFX0NVUlJFTlQxICAweGYzNjAwMGZmCisKKy8qUDJfTUFUU1RSMCovCisjZGVmaW5lIFIwOTAwX1AyX01BVFNUUjAgIDB4ZjM2MQorI2RlZmluZSBGMDkwMF9QMl9NQVRZUEVfQ1VSUkVOVDAgIDB4ZjM2MTAwZmYKKworLypQMl9VUExTVFIxKi8KKyNkZWZpbmUgUjA5MDBfUDJfVVBMU1RSMSAgMHhmMzYyCisjZGVmaW5lIEYwOTAwX1AyX1VQTF9DVVJSRU5UMSAgMHhmMzYyMDBmZgorCisvKlAyX1VQTFNUUjAqLworI2RlZmluZSBSMDkwMF9QMl9VUExTVFIwICAweGYzNjMKKyNkZWZpbmUgRjA5MDBfUDJfVVBMX0NVUlJFTlQwICAweGYzNjMwMGZmCisKKy8qUDJfREZMU1RSMSovCisjZGVmaW5lIFIwOTAwX1AyX0RGTFNUUjEgIDB4ZjM2NAorI2RlZmluZSBGMDkwMF9QMl9ERkxfQ1VSUkVOVDEgIDB4ZjM2NDAwZmYKKworLypQMl9ERkxTVFIwKi8KKyNkZWZpbmUgUjA5MDBfUDJfREZMU1RSMCAgMHhmMzY1CisjZGVmaW5lIEYwOTAwX1AyX0RGTF9DVVJSRU5UMCAgMHhmMzY1MDBmZgorCisvKlAyX1NZTkNTVFIqLworI2RlZmluZSBSMDkwMF9QMl9TWU5DU1RSICAweGYzNjYKKyNkZWZpbmUgRjA5MDBfUDJfU1lOQ19DVVJSRU5UICAweGYzNjYwMGZmCisKKy8qUDJfU1lOQ0RTVFIxKi8KKyNkZWZpbmUgUjA5MDBfUDJfU1lOQ0RTVFIxICAweGYzNjcKKyNkZWZpbmUgRjA5MDBfUDJfU1lOQ0RfQ1VSUkVOVDEgIDB4ZjM2NzAwZmYKKworLypQMl9TWU5DRFNUUjAqLworI2RlZmluZSBSMDkwMF9QMl9TWU5DRFNUUjAgIDB4ZjM2OAorI2RlZmluZSBGMDkwMF9QMl9TWU5DRF9DVVJSRU5UMCAgMHhmMzY4MDBmZgorCisvKlAyX1BERUxTVEFUVVMxKi8KKyNkZWZpbmUgUjA5MDBfUDJfUERFTFNUQVRVUzEgIDB4ZjM2OQorI2RlZmluZSBGMDkwMF9QMl9QS1RERUxJTl9ERUxPQ0sgIDB4ZjM2OTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfU1lOQ0RVUERGTF9CQURERkwgIDB4ZjM2OTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ09OVElOVU9VU19TVFJFQU0gIDB4ZjM2OTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfVU5BQ0NFUFRFRF9TVFJFQU0gIDB4ZjM2OTAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfQkNIX0VSUk9SX0ZMQUcgIDB4ZjM2OTAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfQkJIQ1JDS08gIDB4ZjM2OTAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfUEtUREVMSU5fTE9DSyAgMHhmMzY5MDAwMgorI2RlZmluZSBGMDkwMF9QMl9GSVJTVF9MT0NLICAweGYzNjkwMDAxCisKKy8qUDJfUERFTFNUQVRVUzIqLworI2RlZmluZSBSMDkwMF9QMl9QREVMU1RBVFVTMiAgMHhmMzZhCisjZGVmaW5lIEYwOTAwX1AyX1BLVERFTF9ERU1PRFNFTCAgMHhmMzZhMDA4MAorI2RlZmluZSBGMDkwMF9QMl9GUkFNRV9NT0RDT0QgIDB4ZjM2YTAwN2MKKyNkZWZpbmUgRjA5MDBfUDJfRlJBTUVfVFlQRSAgMHhmMzZhMDAwMworCisvKlAyX0JCRkNSQ0tPMSovCisjZGVmaW5lIFIwOTAwX1AyX0JCRkNSQ0tPMSAgMHhmMzZiCisjZGVmaW5lIEYwOTAwX1AyX0JCSENSQ19LT0NOVDEgIDB4ZjM2YjAwZmYKKworLypQMl9CQkZDUkNLTzAqLworI2RlZmluZSBSMDkwMF9QMl9CQkZDUkNLTzAgIDB4ZjM2YworI2RlZmluZSBGMDkwMF9QMl9CQkhDUkNfS09DTlQwICAweGYzNmMwMGZmCisKKy8qUDJfVVBDUkNLTzEqLworI2RlZmluZSBSMDkwMF9QMl9VUENSQ0tPMSAgMHhmMzZkCisjZGVmaW5lIEYwOTAwX1AyX1BLVENSQ19LT0NOVDEgIDB4ZjM2ZDAwZmYKKworLypQMl9VUENSQ0tPMCovCisjZGVmaW5lIFIwOTAwX1AyX1VQQ1JDS08wICAweGYzNmUKKyNkZWZpbmUgRjA5MDBfUDJfUEtUQ1JDX0tPQ05UMCAgMHhmMzZlMDBmZgorCisvKlAyX1RTU1RBVEVNKi8KKyNkZWZpbmUgUjA5MDBfUDJfVFNTVEFURU0gIDB4ZjM3MAorI2RlZmluZSBGMDkwMF9QMl9UU0RJTF9PTiAgMHhmMzcwMDA4MAorI2RlZmluZSBGMDkwMF9QMl9UU1NLSVBSU19PTiAgMHhmMzcwMDA0MAorI2RlZmluZSBGMDkwMF9QMl9UU1JTX09OICAweGYzNzAwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1RTREVTQ1JBTUJfT04gIDB4ZjM3MDAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGUkFNRV9NT0RFICAweGYzNzAwMDA4CisjZGVmaW5lIEYwOTAwX1AyX1RTX0RJU0FCTEUgIDB4ZjM3MDAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfVFNBQ01fTU9ERSAgMHhmMzcwMDAwMgorI2RlZmluZSBGMDkwMF9QMl9UU09VVF9OT1NZTkMgIDB4ZjM3MDAwMDEKKworLypQMl9UU0NGR0gqLworI2RlZmluZSBSMDkwMF9QMl9UU0NGR0ggIDB4ZjM3MgorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fRFZCQ0kgIDB4ZjM3MjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX1NFUklBTCAgMHhmMzcyMDA0MAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fVEVJVVBEQVRFICAweGYzNzIwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19EVVRZNTAgIDB4ZjM3MjAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0hTR05MT1VUICAweGYzNzIwMDA4CisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19FUlJNT0RFICAweGYzNzIwMDA2CisjZGVmaW5lIEYwOTAwX1AyX1JTVF9IV0FSRSAgMHhmMzcyMDAwMQorCisvKlAyX1RTQ0ZHTSovCisjZGVmaW5lIFIwOTAwX1AyX1RTQ0ZHTSAgMHhmMzczCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19NQU5TUEVFRCAgMHhmMzczMDBjMAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fUEVSTURBVEEgIDB4ZjM3MzAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX05PTkVXU0dOTCAgMHhmMzczMDAxMAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fQklUU1BFRUQgIDB4ZjM3MzAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfTlBEX1NQRUNEVkJTMiAgMHhmMzczMDAwNAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fU1RPUENLRElTICAweGYzNzMwMDAyCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19JTlZEQVRBICAweGYzNzMwMDAxCisKKy8qUDJfVFNDRkdMKi8KKyNkZWZpbmUgUjA5MDBfUDJfVFNDRkdMICAweGYzNzQKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0JDTEtERUwxQ0sgIDB4ZjM3NDAwYzAKKyNkZWZpbmUgRjA5MDBfUDJfQkNIRVJST1JfTU9ERSAgMHhmMzc0MDAzMAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fTlNHTkwyREFUQSAgMHhmMzc0MDAwOAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fRU1CSU5EVkIgIDB4ZjM3NDAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0RQVU5BQ1QgIDB4ZjM3NDAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX05QRE9GRiAgMHhmMzc0MDAwMQorCisvKlAyX1RTSU5TREVMSCovCisjZGVmaW5lIFIwOTAwX1AyX1RTSU5TREVMSCAgMHhmMzc2CisjZGVmaW5lIEYwOTAwX1AyX1RTREVMX1NZTkNCWVRFICAweGYzNzYwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1RTREVMX1hYSEVBREVSICAweGYzNzYwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1RTREVMX0JCSEVBREVSICAweGYzNzYwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1RTREVMX0RBVEFGSUVMRCAgMHhmMzc2MDAxMAorI2RlZmluZSBGMDkwMF9QMl9UU0lOU0RFTF9JU0NSICAweGYzNzYwMDA4CisjZGVmaW5lIEYwOTAwX1AyX1RTSU5TREVMX05QRCAgMHhmMzc2MDAwNAorI2RlZmluZSBGMDkwMF9QMl9UU0lOU0RFTF9SU1BBUklUWSAgMHhmMzc2MDAwMgorI2RlZmluZSBGMDkwMF9QMl9UU0lOU0RFTF9DUkM4ICAweGYzNzYwMDAxCisKKy8qUDJfVFNTUEVFRCovCisjZGVmaW5lIFIwOTAwX1AyX1RTU1BFRUQgIDB4ZjM4MAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fT1VUU1BFRUQgIDB4ZjM4MDAwZmYKKworLypQMl9UU1NUQVRVUyovCisjZGVmaW5lIFIwOTAwX1AyX1RTU1RBVFVTICAweGYzODEKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0xJTkVPSyAgMHhmMzgxMDA4MAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fRVJST1IgIDB4ZjM4MTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0RBVEE3ICAweGYzODEwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19OT1NZTkMgIDB4ZjM4MTAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfSVNDUl9JTklUSUFMSVpFRCAgMHhmMzgxMDAwOAorI2RlZmluZSBGMDkwMF9QMl9JU0NSX1VQREFURUQgIDB4ZjM4MTAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfU09GRklGT19VTlJFR1VMICAweGYzODEwMDAyCisjZGVmaW5lIEYwOTAwX1AyX0RJTF9SRUFEWSAgMHhmMzgxMDAwMQorCisvKlAyX1RTU1RBVFVTMiovCisjZGVmaW5lIFIwOTAwX1AyX1RTU1RBVFVTMiAgMHhmMzgyCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19ERU1PRFNFTCAgMHhmMzgyMDA4MAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9TUEVFRF9TVE9SRSAgMHhmMzgyMDA0MAorI2RlZmluZSBGMDkwMF9QMl9ESUxYWF9SRVNFVCAgMHhmMzgyMDAyMAorI2RlZmluZSBGMDkwMF9QMl9UU1NFUklBTF9JTVBPUyAgMHhmMzgyMDAxMAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fTElORU5PSyAgMHhmMzgyMDAwOAorI2RlZmluZSBGMDkwMF9QMl9CSVRTUEVFRF9FVkVOVCAgMHhmMzgyMDAwNAorI2RlZmluZSBGMDkwMF9QMl9TQ1JBTUJERVRFQ1QgIDB4ZjM4MjAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfVUxEVFY2N19GQUxTRUxPQ0sgIDB4ZjM4MjAwMDEKKworLypQMl9UU0JJVFJBVEUxKi8KKyNkZWZpbmUgUjA5MDBfUDJfVFNCSVRSQVRFMSAgMHhmMzgzCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19CSVRSQVRFMSAgMHhmMzgzMDBmZgorCisvKlAyX1RTQklUUkFURTAqLworI2RlZmluZSBSMDkwMF9QMl9UU0JJVFJBVEUwICAweGYzODQKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0JJVFJBVEUwICAweGYzODQwMGZmCisKKy8qUDJfRVJSQ1RSTDEqLworI2RlZmluZSBSMDkwMF9QMl9FUlJDVFJMMSAgMHhmMzk4CisjZGVmaW5lIEYwOTAwX1AyX0VSUl9TT1VSQ0UxICAweGYzOTgwMGYwCisjZGVmaW5lIEYwOTAwX1AyX05VTV9FVkVOVDEgIDB4ZjM5ODAwMDcKKworLypQMl9FUlJDTlQxMiovCisjZGVmaW5lIFIwOTAwX1AyX0VSUkNOVDEyICAweGYzOTkKKyNkZWZpbmUgRjA5MDBfUDJfRVJSQ05UMV9PTERWQUxVRSAgMHhmMzk5MDA4MAorI2RlZmluZSBGMDkwMF9QMl9FUlJfQ05UMTIgIDB4ZjM5OTAwN2YKKworLypQMl9FUlJDTlQxMSovCisjZGVmaW5lIFIwOTAwX1AyX0VSUkNOVDExICAweGYzOWEKKyNkZWZpbmUgRjA5MDBfUDJfRVJSX0NOVDExICAweGYzOWEwMGZmCisKKy8qUDJfRVJSQ05UMTAqLworI2RlZmluZSBSMDkwMF9QMl9FUlJDTlQxMCAgMHhmMzliCisjZGVmaW5lIEYwOTAwX1AyX0VSUl9DTlQxMCAgMHhmMzliMDBmZgorCisvKlAyX0VSUkNUUkwyKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVJSQ1RSTDIgIDB4ZjM5YworI2RlZmluZSBGMDkwMF9QMl9FUlJfU09VUkNFMiAgMHhmMzljMDBmMAorI2RlZmluZSBGMDkwMF9QMl9OVU1fRVZFTlQyICAweGYzOWMwMDA3CisKKy8qUDJfRVJSQ05UMjIqLworI2RlZmluZSBSMDkwMF9QMl9FUlJDTlQyMiAgMHhmMzlkCisjZGVmaW5lIEYwOTAwX1AyX0VSUkNOVDJfT0xEVkFMVUUgIDB4ZjM5ZDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRVJSX0NOVDIyICAweGYzOWQwMDdmCisKKy8qUDJfRVJSQ05UMjEqLworI2RlZmluZSBSMDkwMF9QMl9FUlJDTlQyMSAgMHhmMzllCisjZGVmaW5lIEYwOTAwX1AyX0VSUl9DTlQyMSAgMHhmMzllMDBmZgorCisvKlAyX0VSUkNOVDIwKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVJSQ05UMjAgIDB4ZjM5ZgorI2RlZmluZSBGMDkwMF9QMl9FUlJfQ05UMjAgIDB4ZjM5ZjAwZmYKKworLypQMl9GRUNTUFkqLworI2RlZmluZSBSMDkwMF9QMl9GRUNTUFkgIDB4ZjNhMAorI2RlZmluZSBGMDkwMF9QMl9TUFlfRU5BQkxFICAweGYzYTAwMDgwCisjZGVmaW5lIEYwOTAwX1AyX05PX1NZTkNCWVRFICAweGYzYTAwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1NFUklBTF9NT0RFICAweGYzYTAwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1VOVVNVQUxfUEFDS0VUICAweGYzYTAwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0JFUl9QQUNLTU9ERSAgMHhmM2EwMDAwOAorI2RlZmluZSBGMDkwMF9QMl9CRVJNRVRFUl9MTU9ERSAgMHhmM2EwMDAwMgorI2RlZmluZSBGMDkwMF9QMl9CRVJNRVRFUl9SRVNFVCAgMHhmM2EwMDAwMQorCisvKlAyX0ZTUFlDRkcqLworI2RlZmluZSBSMDkwMF9QMl9GU1BZQ0ZHICAweGYzYTEKKyNkZWZpbmUgRjA5MDBfUDJfRkVDU1BZX0lOUFVUICAweGYzYTEwMGMwCisjZGVmaW5lIEYwOTAwX1AyX1JTVF9PTl9FUlJPUiAgMHhmM2ExMDAyMAorI2RlZmluZSBGMDkwMF9QMl9PTkVfU0hPVCAgMHhmM2ExMDAxMAorI2RlZmluZSBGMDkwMF9QMl9JMkNfTU9ERSAgMHhmM2ExMDAwYworI2RlZmluZSBGMDkwMF9QMl9TUFlfSFlTVEVSRVNJUyAgMHhmM2ExMDAwMworCisvKlAyX0ZTUFlEQVRBKi8KKyNkZWZpbmUgUjA5MDBfUDJfRlNQWURBVEEgIDB4ZjNhMgorI2RlZmluZSBGMDkwMF9QMl9TUFlfU1RVRkZJTkcgIDB4ZjNhMjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfTk9FUlJPUl9QS1RKSVRURVIgIDB4ZjNhMjAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfU1BZX0NOVUxMUEtUICAweGYzYTIwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1NQWV9PVVREQVRBX01PREUgIDB4ZjNhMjAwMWYKKworLypQMl9GU1BZT1VUKi8KKyNkZWZpbmUgUjA5MDBfUDJfRlNQWU9VVCAgMHhmM2EzCisjZGVmaW5lIEYwOTAwX1AyX0ZTUFlfRElSRUNUICAweGYzYTMwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1NQWV9PVVREQVRBX0JVUyAgMHhmM2EzMDAzOAorI2RlZmluZSBGMDkwMF9QMl9TVFVGRl9NT0RFICAweGYzYTMwMDA3CisKKy8qUDJfRlNUQVRVUyovCisjZGVmaW5lIFIwOTAwX1AyX0ZTVEFUVVMgIDB4ZjNhNAorI2RlZmluZSBGMDkwMF9QMl9TUFlfRU5EU0lNICAweGYzYTQwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1ZBTElEX1NJTSAgMHhmM2E0MDA0MAorI2RlZmluZSBGMDkwMF9QMl9GT1VORF9TSUdOQUwgIDB4ZjNhNDAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfRFNTX1NZTkNCWVRFICAweGYzYTQwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1JFU1VMVF9TVEFURSAgMHhmM2E0MDAwZgorCisvKlAyX0ZCRVJDUFQ0Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRkJFUkNQVDQgIDB4ZjNhOAorI2RlZmluZSBGMDkwMF9QMl9GQkVSTUVURVJfQ1BUNCAgMHhmM2E4MDBmZgorCisvKlAyX0ZCRVJDUFQzKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkJFUkNQVDMgIDB4ZjNhOQorI2RlZmluZSBGMDkwMF9QMl9GQkVSTUVURVJfQ1BUMyAgMHhmM2E5MDBmZgorCisvKlAyX0ZCRVJDUFQyKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkJFUkNQVDIgIDB4ZjNhYQorI2RlZmluZSBGMDkwMF9QMl9GQkVSTUVURVJfQ1BUMiAgMHhmM2FhMDBmZgorCisvKlAyX0ZCRVJDUFQxKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkJFUkNQVDEgIDB4ZjNhYgorI2RlZmluZSBGMDkwMF9QMl9GQkVSTUVURVJfQ1BUMSAgMHhmM2FiMDBmZgorCisvKlAyX0ZCRVJDUFQwKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkJFUkNQVDAgIDB4ZjNhYworI2RlZmluZSBGMDkwMF9QMl9GQkVSTUVURVJfQ1BUMCAgMHhmM2FjMDBmZgorCisvKlAyX0ZCRVJFUlIyKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkJFUkVSUjIgIDB4ZjNhZAorI2RlZmluZSBGMDkwMF9QMl9GQkVSTUVURVJfRVJSMiAgMHhmM2FkMDBmZgorCisvKlAyX0ZCRVJFUlIxKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkJFUkVSUjEgIDB4ZjNhZQorI2RlZmluZSBGMDkwMF9QMl9GQkVSTUVURVJfRVJSMSAgMHhmM2FlMDBmZgorCisvKlAyX0ZCRVJFUlIwKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkJFUkVSUjAgIDB4ZjNhZgorI2RlZmluZSBGMDkwMF9QMl9GQkVSTUVURVJfRVJSMCAgMHhmM2FmMDBmZgorCisvKlAyX0ZTUFlCRVIqLworI2RlZmluZSBSMDkwMF9QMl9GU1BZQkVSICAweGYzYjIKKyNkZWZpbmUgRjA5MDBfUDJfRlNQWU9CU19YT1JSRUFEICAweGYzYjIwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0ZTUFlCRVJfT0JTTU9ERSAgMHhmM2IyMDAyMAorI2RlZmluZSBGMDkwMF9QMl9GU1BZQkVSX1NZTkNCWVRFICAweGYzYjIwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0ZTUFlCRVJfVU5TWU5DICAweGYzYjIwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0ZTUFlCRVJfQ1RJTUUgIDB4ZjNiMjAwMDcKKworLypQMV9JUUNPTlNUKi8KKyNkZWZpbmUgUjA5MDBfUDFfSVFDT05TVCAgMHhmNDAwCisjZGVmaW5lIEYwOTAwX1AxX0NPTlNURUxfU0VMRUNUICAweGY0MDAwMDYwCisjZGVmaW5lIEYwOTAwX1AxX0lRU1lNQl9TRUwgIDB4ZjQwMDAwMWYKKworLypQMV9OT1NDRkcqLworI2RlZmluZSBSMDkwMF9QMV9OT1NDRkcgIDB4ZjQwMQorI2RlZmluZSBGMDkwMF9QMV9EVU1NWVBMX05PU0RBVEEgIDB4ZjQwMTAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfTk9TUExIX0JFVEEgIDB4ZjQwMTAwMTgKKyNkZWZpbmUgRjA5MDBfUDFfTk9TREFUQV9CRVRBICAweGY0MDEwMDA3CisKKy8qUDFfSVNZTUIqLworI2RlZmluZSBSMDkwMF9QMV9JU1lNQiAgMHhmNDAyCisjZGVmaW5lIEYwOTAwX1AxX0lfU1lNQk9MICAweGY0MDIwMWZmCisKKy8qUDFfUVNZTUIqLworI2RlZmluZSBSMDkwMF9QMV9RU1lNQiAgMHhmNDAzCisjZGVmaW5lIEYwOTAwX1AxX1FfU1lNQk9MICAweGY0MDMwMWZmCisKKy8qUDFfQUdDMUNGRyovCisjZGVmaW5lIFIwOTAwX1AxX0FHQzFDRkcgIDB4ZjQwNAorI2RlZmluZSBGMDkwMF9QMV9EQ19GUk9aRU4gIDB4ZjQwNDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfRENfQ09SUkVDVCAgMHhmNDA0MDA0MAorI2RlZmluZSBGMDkwMF9QMV9BTU1fRlJPWkVOICAweGY0MDQwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0FNTV9DT1JSRUNUICAweGY0MDQwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1FVQURfRlJPWkVOICAweGY0MDQwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1FVQURfQ09SUkVDVCAgMHhmNDA0MDAwNAorI2RlZmluZSBGMDkwMF9QMV9EQ0NPTVBfU0xPVyAgMHhmNDA0MDAwMgorI2RlZmluZSBGMDkwMF9QMV9JUU1JU01fU0xPVyAgMHhmNDA0MDAwMQorCisvKlAxX0FHQzFDTiovCisjZGVmaW5lIFIwOTAwX1AxX0FHQzFDTiAgMHhmNDA2CisjZGVmaW5lIEYwOTAwX1AxX0FHQzFfTE9DS0VEICAweGY0MDYwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0FHQzFfT1ZFUkZMT1cgIDB4ZjQwNjAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMV9OT1NMT1dMSyAgMHhmNDA2MDAyMAorI2RlZmluZSBGMDkwMF9QMV9BR0MxX01JTlBPV0VSICAweGY0MDYwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0FHQ09VVF9GQVNUICAweGY0MDYwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0FHQ0lRX0JFVEEgIDB4ZjQwNjAwMDcKKworLypQMV9BR0MxUkVGKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUdDMVJFRiAgMHhmNDA3CisjZGVmaW5lIEYwOTAwX1AxX0FHQ0lRX1JFRiAgMHhmNDA3MDBmZgorCisvKlAxX0lEQ0NPTVAqLworI2RlZmluZSBSMDkwMF9QMV9JRENDT01QICAweGY0MDgKKyNkZWZpbmUgRjA5MDBfUDFfSUFWRVJBR0VfQURKICAweGY0MDgwMWZmCisKKy8qUDFfUURDQ09NUCovCisjZGVmaW5lIFIwOTAwX1AxX1FEQ0NPTVAgIDB4ZjQwOQorI2RlZmluZSBGMDkwMF9QMV9RQVZFUkFHRV9BREogIDB4ZjQwOTAxZmYKKworLypQMV9QT1dFUkkqLworI2RlZmluZSBSMDkwMF9QMV9QT1dFUkkgIDB4ZjQwYQorI2RlZmluZSBGMDkwMF9QMV9QT1dFUl9JICAweGY0MGEwMGZmCisKKy8qUDFfUE9XRVJRKi8KKyNkZWZpbmUgUjA5MDBfUDFfUE9XRVJRICAweGY0MGIKKyNkZWZpbmUgRjA5MDBfUDFfUE9XRVJfUSAgMHhmNDBiMDBmZgorCisvKlAxX0FHQzFBTU0qLworI2RlZmluZSBSMDkwMF9QMV9BR0MxQU1NICAweGY0MGMKKyNkZWZpbmUgRjA5MDBfUDFfQU1NX1ZBTFVFICAweGY0MGMwMGZmCisKKy8qUDFfQUdDMVFVQUQqLworI2RlZmluZSBSMDkwMF9QMV9BR0MxUVVBRCAgMHhmNDBkCisjZGVmaW5lIEYwOTAwX1AxX1FVQURfVkFMVUUgIDB4ZjQwZDAxZmYKKworLypQMV9BR0NJUUlOMSovCisjZGVmaW5lIFIwOTAwX1AxX0FHQ0lRSU4xICAweGY0MGUKKyNkZWZpbmUgRjA5MDBfUDFfQUdDSVFfVkFMVUUxICAweGY0MGUwMGZmCisKKy8qUDFfQUdDSVFJTjAqLworI2RlZmluZSBSMDkwMF9QMV9BR0NJUUlOMCAgMHhmNDBmCisjZGVmaW5lIEYwOTAwX1AxX0FHQ0lRX1ZBTFVFMCAgMHhmNDBmMDBmZgorCisvKlAxX0RFTU9EKi8KKyNkZWZpbmUgUjA5MDBfUDFfREVNT0QgIDB4ZjQxMAorI2RlZmluZSBGMDkwMF9QMV9ERU1PRF9TVE9QICAweGY0MTAwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1NQRUNJTlZfQ09OVFJPTCAgMHhmNDEwMDAzMAorI2RlZmluZSBGMDkwMF9QMV9GT1JDRV9FTkFTQU1QICAweGY0MTAwMDA4CisjZGVmaW5lIEYwOTAwX1AxX01BTlVBTF9ST0xMT0ZGICAweGY0MTAwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1JPTExPRkZfQ09OVFJPTCAgMHhmNDEwMDAwMworCisvKlAxX0RNRE1PRENPRCovCisjZGVmaW5lIFIwOTAwX1AxX0RNRE1PRENPRCAgMHhmNDExCisjZGVmaW5lIEYwOTAwX1AxX01BTlVBTF9NT0RDT0QgIDB4ZjQxMTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfTU9EQ09EICAweGY0MTEwMDdjCisjZGVmaW5lIEYwOTAwX1AxX0RFTU9EX1RZUEUgIDB4ZjQxMTAwMDMKKworLypQMV9EU1RBVFVTKi8KKyNkZWZpbmUgUjA5MDBfUDFfRFNUQVRVUyAgMHhmNDEyCisjZGVmaW5lIEYwOTAwX1AxX0NBUl9MT0NLICAweGY0MTIwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1RNR0xPQ0tfUVVBTElUWSAgMHhmNDEyMDA2MAorI2RlZmluZSBGMDkwMF9QMV9TRFZCUzFfRU5BQkxFICAweGY0MTIwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0xPQ0tfREVGSU5JVElGICAweGY0MTIwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1RJTUlOR19JU19MT0NLRUQgIDB4ZjQxMjAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfQ09BUlNFX1RNR0xPQ0sgIDB4ZjQxMjAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfQ09BUlNFX0NBUkxPQ0sgIDB4ZjQxMjAwMDEKKworLypQMV9EU1RBVFVTMiovCisjZGVmaW5lIFIwOTAwX1AxX0RTVEFUVVMyICAweGY0MTMKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfREVMT0NLICAweGY0MTMwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0RFTU9EX1RJTUVPVVQgIDB4ZjQxMzAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfTU9EQ09EUlFfU1lOQ1RBRyAgMHhmNDEzMDAyMAorI2RlZmluZSBGMDkwMF9QMV9QT0xZUEhfU0FURVZFTlQgIDB4ZjQxMzAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMV9OT1NJR05BTEFDSyAgMHhmNDEzMDAwOAorI2RlZmluZSBGMDkwMF9QMV9BR0MyX09WRVJGTE9XICAweGY0MTMwMDA0CisjZGVmaW5lIEYwOTAwX1AxX0NGUl9PVkVSRkxPVyAgMHhmNDEzMDAwMgorI2RlZmluZSBGMDkwMF9QMV9HQU1NQV9PVkVSVU5ERVIgIDB4ZjQxMzAwMDEKKworLypQMV9ETURDRkdNRCovCisjZGVmaW5lIFIwOTAwX1AxX0RNRENGR01EICAweGY0MTQKKyNkZWZpbmUgRjA5MDBfUDFfRFZCUzJfRU5BQkxFICAweGY0MTQwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0RWQlMxX0VOQUJMRSAgMHhmNDE0MDA0MAorI2RlZmluZSBGMDkwMF9QMV9DRlJfQVVUT1NDQU4gIDB4ZjQxNDAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfU0NBTl9FTkFCTEUgIDB4ZjQxNDAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0FVVE9TQ0FOICAweGY0MTQwMDA4CisjZGVmaW5lIEYwOTAwX1AxX05PRk9SQ0VfUkVMT0NLICAweGY0MTQwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1RVTl9STkcgIDB4ZjQxNDAwMDMKKworLypQMV9ETURDRkcyKi8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EQ0ZHMiAgMHhmNDE1CisjZGVmaW5lIEYwOTAwX1AxX0FHQzFfV0FJVExPQ0sgIDB4ZjQxNTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfUzFTMl9TRVFVRU5USUFMICAweGY0MTUwMDQwCisjZGVmaW5lIEYwOTAwX1AxX09WRVJGTE9XX1RJTUVPVVQgIDB4ZjQxNTAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfU0NBTkZBSUxfVElNRU9VVCAgMHhmNDE1MDAxMAorI2RlZmluZSBGMDkwMF9QMV9ETURUT1VUX0JBQ0sgIDB4ZjQxNTAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSTE9DS19TMUVOQUJMRSAgMHhmNDE1MDAwNAorI2RlZmluZSBGMDkwMF9QMV9DT0FSU0VfTEszTU9ERSAgMHhmNDE1MDAwMgorI2RlZmluZSBGMDkwMF9QMV9DT0FSU0VfTEsyTU9ERSAgMHhmNDE1MDAwMQorCisvKlAxX0RNRElTVEFURSovCisjZGVmaW5lIFIwOTAwX1AxX0RNRElTVEFURSAgMHhmNDE2CisjZGVmaW5lIEYwOTAwX1AxX0kyQ19OT1JFU0VURE1PREUgIDB4ZjQxNjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfRk9SQ0VfRVRBUEVEICAweGY0MTYwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1NETURSU1RfRElSQ0xLICAweGY0MTYwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0kyQ19ERU1PRF9NT0RFICAweGY0MTYwMDFmCisKKy8qUDFfRE1EVDBNKi8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EVDBNICAweGY0MTcKKyNkZWZpbmUgRjA5MDBfUDFfRE1EVDBfTUlOICAweGY0MTcwMGZmCisKKy8qUDFfRE1EU1RBVEUqLworI2RlZmluZSBSMDkwMF9QMV9ETURTVEFURSAgMHhmNDFiCisjZGVmaW5lIEYwOTAwX1AxX0RFTU9EX0xPQ0tFRCAgMHhmNDFiMDA4MAorI2RlZmluZSBGMDkwMF9QMV9IRUFERVJfTU9ERSAgMHhmNDFiMDA2MAorI2RlZmluZSBGMDkwMF9QMV9ERU1PRF9NT0RFICAweGY0MWIwMDFmCisKKy8qUDFfRE1ERkxZVyovCisjZGVmaW5lIFIwOTAwX1AxX0RNREZMWVcgIDB4ZjQxYworI2RlZmluZSBGMDkwMF9QMV9JMkNfSVJRVkFMICAweGY0MWMwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0ZMWVdIRUVMX0NQVCAgMHhmNDFjMDAwZgorCisvKlAxX0RTVEFUVVMzKi8KKyNkZWZpbmUgUjA5MDBfUDFfRFNUQVRVUzMgIDB4ZjQxZAorI2RlZmluZSBGMDkwMF9QMV9DRlJfWklHWkFHICAweGY0MWQwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0RFTU9EX0NGR01PREUgIDB4ZjQxZDAwNjAKKyNkZWZpbmUgRjA5MDBfUDFfR0FNTUFfTE9XQkFVRFJBVEUgIDB4ZjQxZDAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfUkVMT0NLX01PREUgIDB4ZjQxZDAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfRkFJTCAgMHhmNDFkMDAwNAorI2RlZmluZSBGMDkwMF9QMV9FVEFQRTFBX0RWQlhNRU0gIDB4ZjQxZDAwMDMKKworLypQMV9ETURDRkczKi8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EQ0ZHMyAgMHhmNDFlCisjZGVmaW5lIEYwOTAwX1AxX0RWQlMxX1RNR1dBSVQgIDB4ZjQxZTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfTk9fQldDRU5URVJJTkcgIDB4ZjQxZTAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfSU5WX1NFUVNSQ0ggIDB4ZjQxZTAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1NGUlVQTE9XX1RSSyAgMHhmNDFlMDAxMAorI2RlZmluZSBGMDkwMF9QMV9OT1NUT1BfRklGT0ZVTEwgIDB4ZjQxZTAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfTE9DS1RJTUVfTU9ERSAgMHhmNDFlMDAwNworCisvKlAxX0RNRENGRzQqLworI2RlZmluZSBSMDkwMF9QMV9ETURDRkc0ICAweGY0MWYKKyNkZWZpbmUgRjA5MDBfUDFfVFVORVJfTlJFTEFVTkNIICAweGY0MWYwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0RJU19DTEtFTkFCTEUgIDB4ZjQxZjAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfRElTX0hEUkRJVkxPQ0sgIDB4ZjQxZjAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfTk9fVE5SV0JJTklUICAweGY0MWYwMDAxCisKKy8qUDFfQ09SUkVMTUFOVCovCisjZGVmaW5lIFIwOTAwX1AxX0NPUlJFTE1BTlQgIDB4ZjQyMAorI2RlZmluZSBGMDkwMF9QMV9DT1JSRUxfTUFOVCAgMHhmNDIwMDBmZgorCisvKlAxX0NPUlJFTEFCUyovCisjZGVmaW5lIFIwOTAwX1AxX0NPUlJFTEFCUyAgMHhmNDIxCisjZGVmaW5lIEYwOTAwX1AxX0NPUlJFTF9BQlMgIDB4ZjQyMTAwZmYKKworLypQMV9DT1JSRUxFWFAqLworI2RlZmluZSBSMDkwMF9QMV9DT1JSRUxFWFAgIDB4ZjQyMgorI2RlZmluZSBGMDkwMF9QMV9DT1JSRUxfQUJTRVhQICAweGY0MjIwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0NPUlJFTF9FWFAgIDB4ZjQyMjAwMGYKKworLypQMV9QTEhNT0RDT0QqLworI2RlZmluZSBSMDkwMF9QMV9QTEhNT0RDT0QgIDB4ZjQyNAorI2RlZmluZSBGMDkwMF9QMV9TUEVDSU5WX0RFTU9EICAweGY0MjQwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1BMSF9NT0RDT0QgIDB4ZjQyNDAwN2MKKyNkZWZpbmUgRjA5MDBfUDFfUExIX1RZUEUgIDB4ZjQyNDAwMDMKKworLypQMV9BR0NLMzIqLworI2RlZmluZSBSMDkwMF9QMV9BR0NLMzIgIDB4ZjQyYgorI2RlZmluZSBGMDkwMF9QMV9SM0FESk9GRl8zMkFQU0sgIDB4ZjQyYjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfUjJBREpPRkZfMzJBUFNLICAweGY0MmIwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1IxQURKT0ZGXzMyQVBTSyAgMHhmNDJiMDAyMAorI2RlZmluZSBGMDkwMF9QMV9SQURKXzMyQVBTSyAgMHhmNDJiMDAxZgorCisvKlAxX0FHQzJPKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUdDMk8gIDB4ZjQyYworI2RlZmluZSBGMDkwMF9QMV9BR0MyUkVGX0FESlVTVElORyAgMHhmNDJjMDA4MAorI2RlZmluZSBGMDkwMF9QMV9BR0MyX0NPQVJTRUZBU1QgIDB4ZjQyYzAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMl9MS1NRUlQgIDB4ZjQyYzAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMl9MS01PREUgIDB4ZjQyYzAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMl9MS0VRVUEgIDB4ZjQyYzAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMl9DT0VGICAweGY0MmMwMDA3CisKKy8qUDFfQUdDMlJFRiovCisjZGVmaW5lIFIwOTAwX1AxX0FHQzJSRUYgIDB4ZjQyZAorI2RlZmluZSBGMDkwMF9QMV9BR0MyX1JFRiAgMHhmNDJkMDBmZgorCisvKlAxX0FHQzFBREoqLworI2RlZmluZSBSMDkwMF9QMV9BR0MxQURKICAweGY0MmUKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMUFESl9NQU5VQUwgIDB4ZjQyZTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMV9BREpVU1RFRCAgMHhmNDJlMDE3ZgorCisvKlAxX0FHQzJJMSovCisjZGVmaW5lIFIwOTAwX1AxX0FHQzJJMSAgMHhmNDM2CisjZGVmaW5lIEYwOTAwX1AxX0FHQzJfSU5URUdSQVRPUjEgIDB4ZjQzNjAwZmYKKworLypQMV9BR0MySTAqLworI2RlZmluZSBSMDkwMF9QMV9BR0MySTAgIDB4ZjQzNworI2RlZmluZSBGMDkwMF9QMV9BR0MyX0lOVEVHUkFUT1IwICAweGY0MzcwMGZmCisKKy8qUDFfQ0FSQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0FSQ0ZHICAweGY0MzgKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSVVBMT1dfQVVUTyAgMHhmNDM4MDA4MAorI2RlZmluZSBGMDkwMF9QMV9DRlJVUExPV19URVNUICAweGY0MzgwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0VOX0NBUjJDRU5URVIgIDB4ZjQzODAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSSERSX05PRElWOCAgMHhmNDM4MDAxMAorI2RlZmluZSBGMDkwMF9QMV9JMkNfUk9UQSAgMHhmNDM4MDAwOAorI2RlZmluZSBGMDkwMF9QMV9ST1RBT04gIDB4ZjQzODAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfUEhfREVUX0FMR08gIDB4ZjQzODAwMDMKKworLypQMV9BQ0xDKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUNMQyAgMHhmNDM5CisjZGVmaW5lIEYwOTAwX1AxX1NUT1BfUzJBTFBIQSAgMHhmNDM5MDBjMAorI2RlZmluZSBGMDkwMF9QMV9DQVJfQUxQSEFfTUFOVCAgMHhmNDM5MDAzMAorI2RlZmluZSBGMDkwMF9QMV9DQVJfQUxQSEFfRVhQICAweGY0MzkwMDBmCisKKy8qUDFfQkNMQyovCisjZGVmaW5lIFIwOTAwX1AxX0JDTEMgIDB4ZjQzYQorI2RlZmluZSBGMDkwMF9QMV9TVE9QX1MyQkVUQSAgMHhmNDNhMDBjMAorI2RlZmluZSBGMDkwMF9QMV9DQVJfQkVUQV9NQU5UICAweGY0M2EwMDMwCisjZGVmaW5lIEYwOTAwX1AxX0NBUl9CRVRBX0VYUCAgMHhmNDNhMDAwZgorCisvKlAxX0NBUkZSRVEqLworI2RlZmluZSBSMDkwMF9QMV9DQVJGUkVRICAweGY0M2QKKyNkZWZpbmUgRjA5MDBfUDFfS0NfQ09BUlNFX0VYUCAgMHhmNDNkMDBmMAorI2RlZmluZSBGMDkwMF9QMV9CRVRBX0ZSRVEgIDB4ZjQzZDAwMGYKKworLypQMV9DQVJIRFIqLworI2RlZmluZSBSMDkwMF9QMV9DQVJIRFIgIDB4ZjQzZQorI2RlZmluZSBGMDkwMF9QMV9LX0ZSRVFfSERSICAweGY0M2UwMGZmCisKKy8qUDFfTERUKi8KKyNkZWZpbmUgUjA5MDBfUDFfTERUICAweGY0M2YKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSTE9DS19USFJFUyAgMHhmNDNmMDFmZgorCisvKlAxX0xEVDIqLworI2RlZmluZSBSMDkwMF9QMV9MRFQyICAweGY0NDAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSTE9DS19USFJFUzIgIDB4ZjQ0MDAxZmYKKworLypQMV9DRlJJQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSSUNGRyAgMHhmNDQxCisjZGVmaW5lIEYwOTAwX1AxX0NGUklOSVRfVU5WQUxSTkcgIDB4ZjQ0MTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSSU5JVF9MVU5WQUxDUFQgIDB4ZjQ0MTAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSSU5JVF9BQk9SVERCTCAgMHhmNDQxMDAyMAorI2RlZmluZSBGMDkwMF9QMV9DRlJJTklUX0FCT1JUUFJFRCAgMHhmNDQxMDAxMAorI2RlZmluZSBGMDkwMF9QMV9DRlJJTklUX1VOVkFMU0tJUCAgMHhmNDQxMDAwOAorI2RlZmluZSBGMDkwMF9QMV9DRlJJTklUX0NTVElOQyAgMHhmNDQxMDAwNAorI2RlZmluZSBGMDkwMF9QMV9ORUdfQ0ZSU1RFUCAgMHhmNDQxMDAwMQorCisvKlAxX0NGUlVQMSovCisjZGVmaW5lIFIwOTAwX1AxX0NGUlVQMSAgMHhmNDQyCisjZGVmaW5lIEYwOTAwX1AxX0NGUl9VUDEgIDB4ZjQ0MjAxZmYKKworLypQMV9DRlJVUDAqLworI2RlZmluZSBSMDkwMF9QMV9DRlJVUDAgIDB4ZjQ0MworI2RlZmluZSBGMDkwMF9QMV9DRlJfVVAwICAweGY0NDMwMGZmCisKKy8qUDFfQ0ZSTE9XMSovCisjZGVmaW5lIFIwOTAwX1AxX0NGUkxPVzEgIDB4ZjQ0NgorI2RlZmluZSBGMDkwMF9QMV9DRlJfTE9XMSAgMHhmNDQ2MDFmZgorCisvKlAxX0NGUkxPVzAqLworI2RlZmluZSBSMDkwMF9QMV9DRlJMT1cwICAweGY0NDcKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSX0xPVzAgIDB4ZjQ0NzAwZmYKKworLypQMV9DRlJJTklUMSovCisjZGVmaW5lIFIwOTAwX1AxX0NGUklOSVQxICAweGY0NDgKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSX0lOSVQxICAweGY0NDgwMWZmCisKKy8qUDFfQ0ZSSU5JVDAqLworI2RlZmluZSBSMDkwMF9QMV9DRlJJTklUMCAgMHhmNDQ5CisjZGVmaW5lIEYwOTAwX1AxX0NGUl9JTklUMCAgMHhmNDQ5MDBmZgorCisvKlAxX0NGUklOQzEqLworI2RlZmluZSBSMDkwMF9QMV9DRlJJTkMxICAweGY0NGEKKyNkZWZpbmUgRjA5MDBfUDFfTUFOVUFMX0NGUklOQyAgMHhmNDRhMDA4MAorI2RlZmluZSBGMDkwMF9QMV9DRlJfSU5DMSAgMHhmNDRhMDE3ZgorCisvKlAxX0NGUklOQzAqLworI2RlZmluZSBSMDkwMF9QMV9DRlJJTkMwICAweGY0NGIKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSX0lOQzAgIDB4ZjQ0YjAwZjAKKworLypQMV9DRlIyKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSMiAgMHhmNDRjCisjZGVmaW5lIEYwOTAwX1AxX0NBUl9GUkVRMiAgMHhmNDRjMDFmZgorCisvKlAxX0NGUjEqLworI2RlZmluZSBSMDkwMF9QMV9DRlIxICAweGY0NGQKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSX0ZSRVExICAweGY0NGQwMGZmCisKKy8qUDFfQ0ZSMCovCisjZGVmaW5lIFIwOTAwX1AxX0NGUjAgIDB4ZjQ0ZQorI2RlZmluZSBGMDkwMF9QMV9DQVJfRlJFUTAgIDB4ZjQ0ZTAwZmYKKworLypQMV9MREkqLworI2RlZmluZSBSMDkwMF9QMV9MREkgIDB4ZjQ0ZgorI2RlZmluZSBGMDkwMF9QMV9MT0NLX0RFVF9JTlRFR1IgIDB4ZjQ0ZjAxZmYKKworLypQMV9UTUdDRkcqLworI2RlZmluZSBSMDkwMF9QMV9UTUdDRkcgIDB4ZjQ1MAorI2RlZmluZSBGMDkwMF9QMV9UTUdMT0NLX0JFVEEgIDB4ZjQ1MDAwYzAKKyNkZWZpbmUgRjA5MDBfUDFfTk9UTUdfR1JPVVBERUxBWSAgMHhmNDUwMDAyMAorI2RlZmluZSBGMDkwMF9QMV9ET19USU1JTkdfQ09SUiAgMHhmNDUwMDAxMAorI2RlZmluZSBGMDkwMF9QMV9NQU5VQUxfU0NBTiAgMHhmNDUwMDAwYworI2RlZmluZSBGMDkwMF9QMV9UTUdfTUlORlJFUSAgMHhmNDUwMDAwMworCisvKlAxX1JUQyovCisjZGVmaW5lIFIwOTAwX1AxX1JUQyAgMHhmNDUxCisjZGVmaW5lIEYwOTAwX1AxX1RNR0FMUEhBX0VYUCAgMHhmNDUxMDBmMAorI2RlZmluZSBGMDkwMF9QMV9UTUdCRVRBX0VYUCAgMHhmNDUxMDAwZgorCisvKlAxX1JUQ1MyKi8KKyNkZWZpbmUgUjA5MDBfUDFfUlRDUzIgIDB4ZjQ1MgorI2RlZmluZSBGMDkwMF9QMV9UTUdBTFBIQVMyX0VYUCAgMHhmNDUyMDBmMAorI2RlZmluZSBGMDkwMF9QMV9UTUdCRVRBUzJfRVhQICAweGY0NTIwMDBmCisKKy8qUDFfVE1HVEhSSVNFKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE1HVEhSSVNFICAweGY0NTMKKyNkZWZpbmUgRjA5MDBfUDFfVE1HTE9DS19USFJJU0UgIDB4ZjQ1MzAwZmYKKworLypQMV9UTUdUSEZBTEwqLworI2RlZmluZSBSMDkwMF9QMV9UTUdUSEZBTEwgIDB4ZjQ1NAorI2RlZmluZSBGMDkwMF9QMV9UTUdMT0NLX1RIRkFMTCAgMHhmNDU0MDBmZgorCisvKlAxX1NGUlVQUkFUSU8qLworI2RlZmluZSBSMDkwMF9QMV9TRlJVUFJBVElPICAweGY0NTUKKyNkZWZpbmUgRjA5MDBfUDFfU0ZSX1VQUkFUSU8gIDB4ZjQ1NTAwZmYKKworLypQMV9TRlJMT1dSQVRJTyovCisjZGVmaW5lIFIwOTAwX1AxX1NGUkxPV1JBVElPICAweGY0NTYKKyNkZWZpbmUgRjA5MDBfUDFfU0ZSX0xPV1JBVElPICAweGY0NTYwMGZmCisKKy8qUDFfS1JFRlRNRyovCisjZGVmaW5lIFIwOTAwX1AxX0tSRUZUTUcgIDB4ZjQ1OAorI2RlZmluZSBGMDkwMF9QMV9LUkVGX1RNRyAgMHhmNDU4MDBmZgorCisvKlAxX1NGUlNURVAqLworI2RlZmluZSBSMDkwMF9QMV9TRlJTVEVQICAweGY0NTkKKyNkZWZpbmUgRjA5MDBfUDFfU0ZSX1NDQU5TVEVQICAweGY0NTkwMGYwCisjZGVmaW5lIEYwOTAwX1AxX1NGUl9DRU5URVJTVEVQICAweGY0NTkwMDBmCisKKy8qUDFfVE1HQ0ZHMiovCisjZGVmaW5lIFIwOTAwX1AxX1RNR0NGRzIgIDB4ZjQ1YQorI2RlZmluZSBGMDkwMF9QMV9ESVNfQVVUT1NBTVAgIDB4ZjQ1YTAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfU0NBTklOSVRfUVVBUlQgIDB4ZjQ1YTAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfTk9UTUdfRFZCUzFERVJBVCAgMHhmNDVhMDAwMgorI2RlZmluZSBGMDkwMF9QMV9TRlJSQVRJT19GSU5FICAweGY0NWEwMDAxCisKKy8qUDFfU0ZSSU5JVDEqLworI2RlZmluZSBSMDkwMF9QMV9TRlJJTklUMSAgMHhmNDVlCisjZGVmaW5lIEYwOTAwX1AxX1NGUl9JTklUMSAgMHhmNDVlMDBmZgorCisvKlAxX1NGUklOSVQwKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSSU5JVDAgIDB4ZjQ1ZgorI2RlZmluZSBGMDkwMF9QMV9TRlJfSU5JVDAgIDB4ZjQ1ZjAwZmYKKworLypQMV9TRlJVUDEqLworI2RlZmluZSBSMDkwMF9QMV9TRlJVUDEgIDB4ZjQ2MAorI2RlZmluZSBGMDkwMF9QMV9BVVRPX0dVUCAgMHhmNDYwMDA4MAorI2RlZmluZSBGMDkwMF9QMV9TWU1CX0ZSRVFfVVAxICAweGY0NjAwMDdmCisKKy8qUDFfU0ZSVVAwKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSVVAwICAweGY0NjEKKyNkZWZpbmUgRjA5MDBfUDFfU1lNQl9GUkVRX1VQMCAgMHhmNDYxMDBmZgorCisvKlAxX1NGUkxPVzEqLworI2RlZmluZSBSMDkwMF9QMV9TRlJMT1cxICAweGY0NjIKKyNkZWZpbmUgRjA5MDBfUDFfQVVUT19HTE9XICAweGY0NjIwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1NZTUJfRlJFUV9MT1cxICAweGY0NjIwMDdmCisKKy8qUDFfU0ZSTE9XMCovCisjZGVmaW5lIFIwOTAwX1AxX1NGUkxPVzAgIDB4ZjQ2MworI2RlZmluZSBGMDkwMF9QMV9TWU1CX0ZSRVFfTE9XMCAgMHhmNDYzMDBmZgorCisvKlAxX1NGUjMqLworI2RlZmluZSBSMDkwMF9QMV9TRlIzICAweGY0NjQKKyNkZWZpbmUgRjA5MDBfUDFfU1lNQl9GUkVRMyAgMHhmNDY0MDBmZgorCisvKlAxX1NGUjIqLworI2RlZmluZSBSMDkwMF9QMV9TRlIyICAweGY0NjUKKyNkZWZpbmUgRjA5MDBfUDFfU1lNQl9GUkVRMiAgMHhmNDY1MDBmZgorCisvKlAxX1NGUjEqLworI2RlZmluZSBSMDkwMF9QMV9TRlIxICAweGY0NjYKKyNkZWZpbmUgRjA5MDBfUDFfU1lNQl9GUkVRMSAgMHhmNDY2MDBmZgorCisvKlAxX1NGUjAqLworI2RlZmluZSBSMDkwMF9QMV9TRlIwICAweGY0NjcKKyNkZWZpbmUgRjA5MDBfUDFfU1lNQl9GUkVRMCAgMHhmNDY3MDBmZgorCisvKlAxX1RNR1JFRzIqLworI2RlZmluZSBSMDkwMF9QMV9UTUdSRUcyICAweGY0NjgKKyNkZWZpbmUgRjA5MDBfUDFfVE1HUkVHMiAgMHhmNDY4MDBmZgorCisvKlAxX1RNR1JFRzEqLworI2RlZmluZSBSMDkwMF9QMV9UTUdSRUcxICAweGY0NjkKKyNkZWZpbmUgRjA5MDBfUDFfVE1HUkVHMSAgMHhmNDY5MDBmZgorCisvKlAxX1RNR1JFRzAqLworI2RlZmluZSBSMDkwMF9QMV9UTUdSRUcwICAweGY0NmEKKyNkZWZpbmUgRjA5MDBfUDFfVE1HUkVHMCAgMHhmNDZhMDBmZgorCisvKlAxX1RNR0xPQ0sxKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE1HTE9DSzEgIDB4ZjQ2YgorI2RlZmluZSBGMDkwMF9QMV9UTUdMT0NLX0xFVkVMMSAgMHhmNDZiMDFmZgorCisvKlAxX1RNR0xPQ0swKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE1HTE9DSzAgIDB4ZjQ2YworI2RlZmluZSBGMDkwMF9QMV9UTUdMT0NLX0xFVkVMMCAgMHhmNDZjMDBmZgorCisvKlAxX1RNR09CUyovCisjZGVmaW5lIFIwOTAwX1AxX1RNR09CUyAgMHhmNDZkCisjZGVmaW5lIEYwOTAwX1AxX1JPTExPRkZfU1RBVFVTICAweGY0NmQwMGMwCisjZGVmaW5lIEYwOTAwX1AxX1NDQU5fU0lHTiAgMHhmNDZkMDAzMAorI2RlZmluZSBGMDkwMF9QMV9UTUdfU0NBTk5JTkcgIDB4ZjQ2ZDAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfQ0hDRU5URVJJTkdfTU9ERSAgMHhmNDZkMDAwNAorI2RlZmluZSBGMDkwMF9QMV9UTUdfU0NBTkZBSUwgIDB4ZjQ2ZDAwMDIKKworLypQMV9FUVVBTENGRyovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFMQ0ZHICAweGY0NmYKKyNkZWZpbmUgRjA5MDBfUDFfTk9UTUdfTkVHQUxXQUlUICAweGY0NmYwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0VRVUFMX09OICAweGY0NmYwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1NFTF9FUVVBTENPUiAgMHhmNDZmMDAzOAorI2RlZmluZSBGMDkwMF9QMV9NVV9FUVVBTERGRSAgMHhmNDZmMDAwNworCisvKlAxX0VRVUFJMSovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFJMSAgMHhmNDcwCisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDSTEgIDB4ZjQ3MDAxZmYKKworLypQMV9FUVVBUTEqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBUTEgIDB4ZjQ3MQorI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ1ExICAweGY0NzEwMWZmCisKKy8qUDFfRVFVQUkyKi8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQUkyICAweGY0NzIKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NJMiAgMHhmNDcyMDFmZgorCisvKlAxX0VRVUFRMiovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFRMiAgMHhmNDczCisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDUTIgIDB4ZjQ3MzAxZmYKKworLypQMV9FUVVBSTMqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBSTMgIDB4ZjQ3NAorI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ0kzICAweGY0NzQwMWZmCisKKy8qUDFfRVFVQVEzKi8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQVEzICAweGY0NzUKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NRMyAgMHhmNDc1MDFmZgorCisvKlAxX0VRVUFJNCovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFJNCAgMHhmNDc2CisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDSTQgIDB4ZjQ3NjAxZmYKKworLypQMV9FUVVBUTQqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBUTQgIDB4ZjQ3NworI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ1E0ICAweGY0NzcwMWZmCisKKy8qUDFfRVFVQUk1Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQUk1ICAweGY0NzgKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NJNSAgMHhmNDc4MDFmZgorCisvKlAxX0VRVUFRNSovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFRNSAgMHhmNDc5CisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDUTUgIDB4ZjQ3OTAxZmYKKworLypQMV9FUVVBSTYqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBSTYgIDB4ZjQ3YQorI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ0k2ICAweGY0N2EwMWZmCisKKy8qUDFfRVFVQVE2Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQVE2ICAweGY0N2IKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NRNiAgMHhmNDdiMDFmZgorCisvKlAxX0VRVUFJNyovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFJNyAgMHhmNDdjCisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDSTcgIDB4ZjQ3YzAxZmYKKworLypQMV9FUVVBUTcqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBUTcgIDB4ZjQ3ZAorI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ1E3ICAweGY0N2QwMWZmCisKKy8qUDFfRVFVQUk4Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQUk4ICAweGY0N2UKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NJOCAgMHhmNDdlMDFmZgorCisvKlAxX0VRVUFROCovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFROCAgMHhmNDdmCisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDUTggIDB4ZjQ3ZjAxZmYKKworLypQMV9OTk9TREFUQVQxKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk5PU0RBVEFUMSAgMHhmNDgwCisjZGVmaW5lIEYwOTAwX1AxX05PU0RBVEFUX05PUk1FRDEgIDB4ZjQ4MDAwZmYKKworLypQMV9OTk9TREFUQVQwKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk5PU0RBVEFUMCAgMHhmNDgxCisjZGVmaW5lIEYwOTAwX1AxX05PU0RBVEFUX05PUk1FRDAgIDB4ZjQ4MTAwZmYKKworLypQMV9OTk9TREFUQTEqLworI2RlZmluZSBSMDkwMF9QMV9OTk9TREFUQTEgIDB4ZjQ4MgorI2RlZmluZSBGMDkwMF9QMV9OT1NEQVRBX05PUk1FRDEgIDB4ZjQ4MjAwZmYKKworLypQMV9OTk9TREFUQTAqLworI2RlZmluZSBSMDkwMF9QMV9OTk9TREFUQTAgIDB4ZjQ4MworI2RlZmluZSBGMDkwMF9QMV9OT1NEQVRBX05PUk1FRDAgIDB4ZjQ4MzAwZmYKKworLypQMV9OTk9TUExIVDEqLworI2RlZmluZSBSMDkwMF9QMV9OTk9TUExIVDEgIDB4ZjQ4NAorI2RlZmluZSBGMDkwMF9QMV9OT1NQTEhUX05PUk1FRDEgIDB4ZjQ4NDAwZmYKKworLypQMV9OTk9TUExIVDAqLworI2RlZmluZSBSMDkwMF9QMV9OTk9TUExIVDAgIDB4ZjQ4NQorI2RlZmluZSBGMDkwMF9QMV9OT1NQTEhUX05PUk1FRDAgIDB4ZjQ4NTAwZmYKKworLypQMV9OTk9TUExIMSovCisjZGVmaW5lIFIwOTAwX1AxX05OT1NQTEgxICAweGY0ODYKKyNkZWZpbmUgRjA5MDBfUDFfTk9TUExIX05PUk1FRDEgIDB4ZjQ4NjAwZmYKKworLypQMV9OTk9TUExIMCovCisjZGVmaW5lIFIwOTAwX1AxX05OT1NQTEgwICAweGY0ODcKKyNkZWZpbmUgRjA5MDBfUDFfTk9TUExIX05PUk1FRDAgIDB4ZjQ4NzAwZmYKKworLypQMV9OT1NEQVRBVDEqLworI2RlZmluZSBSMDkwMF9QMV9OT1NEQVRBVDEgIDB4ZjQ4OAorI2RlZmluZSBGMDkwMF9QMV9OT1NEQVRBVF9VTk5PUk1FRDEgIDB4ZjQ4ODAwZmYKKworLypQMV9OT1NEQVRBVDAqLworI2RlZmluZSBSMDkwMF9QMV9OT1NEQVRBVDAgIDB4ZjQ4OQorI2RlZmluZSBGMDkwMF9QMV9OT1NEQVRBVF9VTk5PUk1FRDAgIDB4ZjQ4OTAwZmYKKworLypQMV9OT1NEQVRBMSovCisjZGVmaW5lIFIwOTAwX1AxX05PU0RBVEExICAweGY0OGEKKyNkZWZpbmUgRjA5MDBfUDFfTk9TREFUQV9VTk5PUk1FRDEgIDB4ZjQ4YTAwZmYKKworLypQMV9OT1NEQVRBMCovCisjZGVmaW5lIFIwOTAwX1AxX05PU0RBVEEwICAweGY0OGIKKyNkZWZpbmUgRjA5MDBfUDFfTk9TREFUQV9VTk5PUk1FRDAgIDB4ZjQ4YjAwZmYKKworLypQMV9OT1NQTEhUMSovCisjZGVmaW5lIFIwOTAwX1AxX05PU1BMSFQxICAweGY0OGMKKyNkZWZpbmUgRjA5MDBfUDFfTk9TUExIVF9VTk5PUk1FRDEgIDB4ZjQ4YzAwZmYKKworLypQMV9OT1NQTEhUMCovCisjZGVmaW5lIFIwOTAwX1AxX05PU1BMSFQwICAweGY0OGQKKyNkZWZpbmUgRjA5MDBfUDFfTk9TUExIVF9VTk5PUk1FRDAgIDB4ZjQ4ZDAwZmYKKworLypQMV9OT1NQTEgxKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk9TUExIMSAgMHhmNDhlCisjZGVmaW5lIEYwOTAwX1AxX05PU1BMSF9VTk5PUk1FRDEgIDB4ZjQ4ZTAwZmYKKworLypQMV9OT1NQTEgwKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk9TUExIMCAgMHhmNDhmCisjZGVmaW5lIEYwOTAwX1AxX05PU1BMSF9VTk5PUk1FRDAgIDB4ZjQ4ZjAwZmYKKworLypQMV9DQVIyQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0FSMkNGRyAgMHhmNDkwCisjZGVmaW5lIEYwOTAwX1AxX0RFU0NSQU1CX09GRiAgMHhmNDkwMDA4MAorI2RlZmluZSBGMDkwMF9QMV9QTjRfU0VMRUNUICAweGY0OTAwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NGUjJfU1RPUERWQlMxICAweGY0OTAwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1NUT1BfQ0ZSMlVQREFURSAgMHhmNDkwMDAxMAorI2RlZmluZSBGMDkwMF9QMV9TVE9QX05DTzJVUERBVEUgIDB4ZjQ5MDAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfUk9UQTJPTiAgMHhmNDkwMDAwNAorI2RlZmluZSBGMDkwMF9QMV9QSF9ERVRfQUxHTzIgIDB4ZjQ5MDAwMDMKKworLypQMV9BQ0xDMiovCisjZGVmaW5lIFIwOTAwX1AxX0FDTEMyICAweGY0OTEKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMl9QVU5DVF9BREVSQVQgIDB4ZjQ5MTAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMl9BTFBIQV9NQU5UICAweGY0OTEwMDMwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJfQUxQSEFfRVhQICAweGY0OTEwMDBmCisKKy8qUDFfQkNMQzIqLworI2RlZmluZSBSMDkwMF9QMV9CQ0xDMiAgMHhmNDkyCisjZGVmaW5lIEYwOTAwX1AxX0RWQlMyX05JUCAgMHhmNDkyMDA4MAorI2RlZmluZSBGMDkwMF9QMV9DQVIyX1BVTkNUX0JERVJBVCAgMHhmNDkyMDA0MAorI2RlZmluZSBGMDkwMF9QMV9DQVIyX0JFVEFfTUFOVCAgMHhmNDkyMDAzMAorI2RlZmluZSBGMDkwMF9QMV9DQVIyX0JFVEFfRVhQICAweGY0OTIwMDBmCisKKy8qUDFfQ0ZSMjIqLworI2RlZmluZSBSMDkwMF9QMV9DRlIyMiAgMHhmNDkzCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJfRlJFUTIgIDB4ZjQ5MzAxZmYKKworLypQMV9DRlIyMSovCisjZGVmaW5lIFIwOTAwX1AxX0NGUjIxICAweGY0OTQKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMl9GUkVRMSAgMHhmNDk0MDBmZgorCisvKlAxX0NGUjIwKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSMjAgIDB4ZjQ5NQorI2RlZmluZSBGMDkwMF9QMV9DQVIyX0ZSRVEwICAweGY0OTUwMGZmCisKKy8qUDFfQUNMQzJTMlEqLworI2RlZmluZSBSMDkwMF9QMV9BQ0xDMlMyUSAgMHhmNDk3CisjZGVmaW5lIEYwOTAwX1AxX0VOQUJfU1BTS1NZTUIgIDB4ZjQ5NzAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyX1FBREVSQVQgIDB4ZjQ5NzAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyX1FfQUxQSF9NICAweGY0OTcwMDMwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl9RX0FMUEhfRSAgMHhmNDk3MDAwZgorCisvKlAxX0FDTEMyUzI4Ki8KKyNkZWZpbmUgUjA5MDBfUDFfQUNMQzJTMjggIDB4ZjQ5OAorI2RlZmluZSBGMDkwMF9QMV9PTERJM1FfTU9ERSAgMHhmNDk4MDA4MAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfOEFERVJBVCAgMHhmNDk4MDA0MAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfOF9BTFBIX00gIDB4ZjQ5ODAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzhfQUxQSF9FICAweGY0OTgwMDBmCisKKy8qUDFfQUNMQzJTMjE2QSovCisjZGVmaW5lIFIwOTAwX1AxX0FDTEMyUzIxNkEgIDB4ZjQ5OQorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfMTZBREVSQVQgIDB4ZjQ5OTAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzE2QV9BTFBIX00gIDB4ZjQ5OTAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzE2QV9BTFBIX0UgIDB4ZjQ5OTAwMGYKKworLypQMV9BQ0xDMlMyMzJBKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUNMQzJTMjMyQSAgMHhmNDlhCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl8zMkFERVJBVCAgMHhmNDlhMDA0MAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfMzJBX0FMUEhfTSAgMHhmNDlhMDAzMAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfMzJBX0FMUEhfRSAgMHhmNDlhMDAwZgorCisvKlAxX0JDTEMyUzJRKi8KKyNkZWZpbmUgUjA5MDBfUDFfQkNMQzJTMlEgIDB4ZjQ5YworI2RlZmluZSBGMDkwMF9QMV9EVkJTMlMyUV9OSVAgIDB4ZjQ5YzAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyX1FCREVSQVQgIDB4ZjQ5YzAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyX1FfQkVUQV9NICAweGY0OWMwMDMwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl9RX0JFVEFfRSAgMHhmNDljMDAwZgorCisvKlAxX0JDTEMyUzI4Ki8KKyNkZWZpbmUgUjA5MDBfUDFfQkNMQzJTMjggIDB4ZjQ5ZAorI2RlZmluZSBGMDkwMF9QMV9EVkJTMlMyOF9OSVAgIDB4ZjQ5ZDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzhCREVSQVQgIDB4ZjQ5ZDAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzhfQkVUQV9NICAweGY0OWQwMDMwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl84X0JFVEFfRSAgMHhmNDlkMDAwZgorCisvKlAxX0JDTEMyUzIxNkEqLworI2RlZmluZSBSMDkwMF9QMV9CQ0xDMlMyMTZBICAweGY0OWUKKyNkZWZpbmUgRjA5MDBfUDFfRFZCUzJTMjE2QV9OSVAgIDB4ZjQ5ZTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzE2QkRFUkFUICAweGY0OWUwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl8xNkFfQkVUQV9NICAweGY0OWUwMDMwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl8xNkFfQkVUQV9FICAweGY0OWUwMDBmCisKKy8qUDFfQkNMQzJTMjMyQSovCisjZGVmaW5lIFIwOTAwX1AxX0JDTEMyUzIzMkEgIDB4ZjQ5ZgorI2RlZmluZSBGMDkwMF9QMV9EVkJTMlMyMzJBX05JUCAgMHhmNDlmMDA4MAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfMzJCREVSQVQgIDB4ZjQ5ZjAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzMyQV9CRVRBX00gIDB4ZjQ5ZjAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzMyQV9CRVRBX0UgIDB4ZjQ5ZjAwMGYKKworLypQMV9QTFJPT1QyKi8KKyNkZWZpbmUgUjA5MDBfUDFfUExST09UMiAgMHhmNGFjCisjZGVmaW5lIEYwOTAwX1AxX1NIT1JURlJfRElTQUJMRSAgMHhmNGFjMDA4MAorI2RlZmluZSBGMDkwMF9QMV9MT05HRlJfRElTQUJMRSAgMHhmNGFjMDA0MAorI2RlZmluZSBGMDkwMF9QMV9EVU1NWVBMX0RJU0FCTEUgIDB4ZjRhYzAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfU0hPUlRGUl9BVk9JRCAgMHhmNGFjMDAxMAorI2RlZmluZSBGMDkwMF9QMV9QTFNDUkFNQl9NT0RFICAweGY0YWMwMDBjCisjZGVmaW5lIEYwOTAwX1AxX1BMU0NSQU1CX1JPT1QyICAweGY0YWMwMDAzCisKKy8qUDFfUExST09UMSovCisjZGVmaW5lIFIwOTAwX1AxX1BMUk9PVDEgIDB4ZjRhZAorI2RlZmluZSBGMDkwMF9QMV9QTFNDUkFNQl9ST09UMSAgMHhmNGFkMDBmZgorCisvKlAxX1BMUk9PVDAqLworI2RlZmluZSBSMDkwMF9QMV9QTFJPT1QwICAweGY0YWUKKyNkZWZpbmUgRjA5MDBfUDFfUExTQ1JBTUJfUk9PVDAgIDB4ZjRhZTAwZmYKKworLypQMV9NT0RDT0RMU1QwKi8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNUMCAgMHhmNGIwCisjZGVmaW5lIEYwOTAwX1AxX0VOX1RPS0VOMzEgIDB4ZjRiMDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfU1lOQ1RBR19TRUxFQ1QgIDB4ZjRiMDAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfTU9EQ09EUlFfTU9ERSAgMHhmNGIwMDAzMAorCisvKlAxX01PRENPRExTVDEqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1QxICAweGY0YjEKKyNkZWZpbmUgRjA5MDBfUDFfRElTX01PRENPRDI5ICAweGY0YjEwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RJU18zMlBTS185XzEwICAweGY0YjEwMDBmCisKKy8qUDFfTU9EQ09ETFNUMiovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVDIgIDB4ZjRiMgorI2RlZmluZSBGMDkwMF9QMV9ESVNfMzJQU0tfOF85ICAweGY0YjIwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RJU18zMlBTS181XzYgIDB4ZjRiMjAwMGYKKworLypQMV9NT0RDT0RMU1QzKi8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNUMyAgMHhmNGIzCisjZGVmaW5lIEYwOTAwX1AxX0RJU18zMlBTS180XzUgIDB4ZjRiMzAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzMyUFNLXzNfNCAgMHhmNGIzMDAwZgorCisvKlAxX01PRENPRExTVDQqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1Q0ICAweGY0YjQKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzE2UFNLXzlfMTAgIDB4ZjRiNDAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzE2UFNLXzhfOSAgMHhmNGI0MDAwZgorCisvKlAxX01PRENPRExTVDUqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1Q1ICAweGY0YjUKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzE2UFNLXzVfNiAgMHhmNGI1MDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfMTZQU0tfNF81ICAweGY0YjUwMDBmCisKKy8qUDFfTU9EQ09ETFNUNiovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVDYgIDB4ZjRiNgorI2RlZmluZSBGMDkwMF9QMV9ESVNfMTZQU0tfM180ICAweGY0YjYwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RJU18xNlBTS18yXzMgIDB4ZjRiNjAwMGYKKworLypQMV9NT0RDT0RMU1Q3Ki8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNUNyAgMHhmNGI3CisjZGVmaW5lIEYwOTAwX1AxX0RJU184UF85XzEwICAweGY0YjcwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RJU184UF84XzkgIDB4ZjRiNzAwMGYKKworLypQMV9NT0RDT0RMU1Q4Ki8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNUOCAgMHhmNGI4CisjZGVmaW5lIEYwOTAwX1AxX0RJU184UF81XzYgIDB4ZjRiODAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzhQXzNfNCAgMHhmNGI4MDAwZgorCisvKlAxX01PRENPRExTVDkqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1Q5ICAweGY0YjkKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzhQXzJfMyAgMHhmNGI5MDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfOFBfM181ICAweGY0YjkwMDBmCisKKy8qUDFfTU9EQ09ETFNUQSovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVEEgIDB4ZjRiYQorI2RlZmluZSBGMDkwMF9QMV9ESVNfUVBfOV8xMCAgMHhmNGJhMDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfUVBfOF85ICAweGY0YmEwMDBmCisKKy8qUDFfTU9EQ09ETFNUQiovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVEIgIDB4ZjRiYgorI2RlZmluZSBGMDkwMF9QMV9ESVNfUVBfNV82ICAweGY0YmIwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RJU19RUF80XzUgIDB4ZjRiYjAwMGYKKworLypQMV9NT0RDT0RMU1RDKi8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNUQyAgMHhmNGJjCisjZGVmaW5lIEYwOTAwX1AxX0RJU19RUF8zXzQgIDB4ZjRiYzAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1FQXzJfMyAgMHhmNGJjMDAwZgorCisvKlAxX01PRENPRExTVEQqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1REICAweGY0YmQKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1FQXzNfNSAgMHhmNGJkMDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfUVBfMV8yICAweGY0YmQwMDBmCisKKy8qUDFfTU9EQ09ETFNURSovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVEUgIDB4ZjRiZQorI2RlZmluZSBGMDkwMF9QMV9ESVNfUVBfMl81ICAweGY0YmUwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RJU19RUF8xXzMgIDB4ZjRiZTAwMGYKKworLypQMV9NT0RDT0RMU1RGKi8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNURiAgMHhmNGJmCisjZGVmaW5lIEYwOTAwX1AxX0RJU19RUF8xXzQgIDB4ZjRiZjAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRERFTU9EX1NFVCAgMHhmNGJmMDAwMgorI2RlZmluZSBGMDkwMF9QMV9EREVNT0RfTUFTSyAgMHhmNGJmMDAwMQorCisvKlAxX0RNRFJFU0NGRyovCisjZGVmaW5lIFIwOTAwX1AxX0RNRFJFU0NGRyAgMHhmNGM2CisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19SRVNFVCAgMHhmNGM2MDA4MAorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfTk9JU0VTUVIgIDB4ZjRjNjAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX1NUUkFMTCAgMHhmNGM2MDAwOAorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfTkVXT05MWSAgMHhmNGM2MDAwNAorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfTk9TVE9SRSAgMHhmNGM2MDAwMgorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfQUdDMk1FTSAgMHhmNGM2MDAwMQorCisvKlAxX0RNRFJFU0FEUiovCisjZGVmaW5lIFIwOTAwX1AxX0RNRFJFU0FEUiAgMHhmNGM3CisjZGVmaW5lIEYwOTAwX1AxX1NVU1BfUFJFRENBTkFMICAweGY0YzcwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19WQUxJRENGUiAgMHhmNGM3MDA0MAorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfTUVNRlVMTCAgMHhmNGM3MDAzMAorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfUkVTTkJSICAweGY0YzcwMDBmCisKKy8qUDFfRE1EUkVTREFUQTcqLworI2RlZmluZSBSMDkwMF9QMV9ETURSRVNEQVRBNyAgMHhmNGM4CisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19EQVRBNyAgMHhmNGM4MDBmZgorCisvKlAxX0RNRFJFU0RBVEE2Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EUkVTREFUQTYgIDB4ZjRjOQorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfREFUQTYgIDB4ZjRjOTAwZmYKKworLypQMV9ETURSRVNEQVRBNSovCisjZGVmaW5lIFIwOTAwX1AxX0RNRFJFU0RBVEE1ICAweGY0Y2EKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX0RBVEE1ICAweGY0Y2EwMGZmCisKKy8qUDFfRE1EUkVTREFUQTQqLworI2RlZmluZSBSMDkwMF9QMV9ETURSRVNEQVRBNCAgMHhmNGNiCisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19EQVRBNCAgMHhmNGNiMDBmZgorCisvKlAxX0RNRFJFU0RBVEEzKi8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EUkVTREFUQTMgIDB4ZjRjYworI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfREFUQTMgIDB4ZjRjYzAwZmYKKworLypQMV9ETURSRVNEQVRBMiovCisjZGVmaW5lIFIwOTAwX1AxX0RNRFJFU0RBVEEyICAweGY0Y2QKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX0RBVEEyICAweGY0Y2QwMGZmCisKKy8qUDFfRE1EUkVTREFUQTEqLworI2RlZmluZSBSMDkwMF9QMV9ETURSRVNEQVRBMSAgMHhmNGNlCisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19EQVRBMSAgMHhmNGNlMDBmZgorCisvKlAxX0RNRFJFU0RBVEEwKi8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EUkVTREFUQTAgIDB4ZjRjZgorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfREFUQTAgIDB4ZjRjZjAwZmYKKworLypQMV9GRkVJMSovCisjZGVmaW5lIFIwOTAwX1AxX0ZGRUkxICAweGY0ZDAKKyNkZWZpbmUgRjA5MDBfUDFfRkZFX0FDQ0kxICAweGY0ZDAwMWZmCisKKy8qUDFfRkZFUTEqLworI2RlZmluZSBSMDkwMF9QMV9GRkVRMSAgMHhmNGQxCisjZGVmaW5lIEYwOTAwX1AxX0ZGRV9BQ0NRMSAgMHhmNGQxMDFmZgorCisvKlAxX0ZGRUkyKi8KKyNkZWZpbmUgUjA5MDBfUDFfRkZFSTIgIDB4ZjRkMgorI2RlZmluZSBGMDkwMF9QMV9GRkVfQUNDSTIgIDB4ZjRkMjAxZmYKKworLypQMV9GRkVRMiovCisjZGVmaW5lIFIwOTAwX1AxX0ZGRVEyICAweGY0ZDMKKyNkZWZpbmUgRjA5MDBfUDFfRkZFX0FDQ1EyICAweGY0ZDMwMWZmCisKKy8qUDFfRkZFSTMqLworI2RlZmluZSBSMDkwMF9QMV9GRkVJMyAgMHhmNGQ0CisjZGVmaW5lIEYwOTAwX1AxX0ZGRV9BQ0NJMyAgMHhmNGQ0MDFmZgorCisvKlAxX0ZGRVEzKi8KKyNkZWZpbmUgUjA5MDBfUDFfRkZFUTMgIDB4ZjRkNQorI2RlZmluZSBGMDkwMF9QMV9GRkVfQUNDUTMgIDB4ZjRkNTAxZmYKKworLypQMV9GRkVJNCovCisjZGVmaW5lIFIwOTAwX1AxX0ZGRUk0ICAweGY0ZDYKKyNkZWZpbmUgRjA5MDBfUDFfRkZFX0FDQ0k0ICAweGY0ZDYwMWZmCisKKy8qUDFfRkZFUTQqLworI2RlZmluZSBSMDkwMF9QMV9GRkVRNCAgMHhmNGQ3CisjZGVmaW5lIEYwOTAwX1AxX0ZGRV9BQ0NRNCAgMHhmNGQ3MDFmZgorCisvKlAxX0ZGRUNGRyovCisjZGVmaW5lIFIwOTAwX1AxX0ZGRUNGRyAgMHhmNGQ4CisjZGVmaW5lIEYwOTAwX1AxX0VRVUFMRkZFX09OICAweGY0ZDgwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0VRVUFMX1VTRURTWU1CICAweGY0ZDgwMDMwCisjZGVmaW5lIEYwOTAwX1AxX01VX0VRVUFMRkZFICAweGY0ZDgwMDA3CisKKy8qUDFfVE5SQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE5SQ0ZHICAweGY0ZTAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0FDS0ZBSUwgIDB4ZjRlMDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1RZUEUgIDB4ZjRlMDAwNzAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1NFQ1NUT1AgIDB4ZjRlMDAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1ZDT1NSQ0ggIDB4ZjRlMDAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX01BRERSRVNTICAweGY0ZTAwMDAzCisKKy8qUDFfVE5SQ0ZHMiovCisjZGVmaW5lIFIwOTAwX1AxX1ROUkNGRzIgIDB4ZjRlMQorI2RlZmluZSBGMDkwMF9QMV9UVU5fSVFTV0FQICAweGY0ZTEwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxMTBfU1RFUDJNSFogIDB4ZjRlMTAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjEyMF9EQkxJMkMgIDB4ZjRlMTAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTX0ZDQ0sgIDB4ZjRlMTAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfRElTX0xQRU4gIDB4ZjRlMTAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfRElTX0JXQ0FMQyAgMHhmNGUxMDAwNAorI2RlZmluZSBGMDkwMF9QMV9TSE9SVF9XQUlUU1RBVEVTICAweGY0ZTEwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0RJU18yQldBR0MxICAweGY0ZTEwMDAxCisKKy8qUDFfVE5SWFRBTCovCisjZGVmaW5lIFIwOTAwX1AxX1ROUlhUQUwgIDB4ZjRlNAorI2RlZmluZSBGMDkwMF9QMV9UVU5fTUNMS0RFQ0lNQUwgIDB4ZjRlNDAwZTAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1hUQUxGUkVRICAweGY0ZTQwMDFmCisKKy8qUDFfVE5SU1RFUFMqLworI2RlZmluZSBSMDkwMF9QMV9UTlJTVEVQUyAgMHhmNGU3CisjZGVmaW5lIEYwOTAwX1AxX1RVTkVSX0JXMVA2ICAweGY0ZTcwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0JXSU5DX09GRlNFVCAgMHhmNGU3MDA3MAorI2RlZmluZSBGMDkwMF9QMV9TT0ZUU1RFUF9STkcgIDB4ZjRlNzAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0JXT0ZGU0VUICAweGY0ZTcwMTA3CisKKy8qUDFfVE5SR0FJTiovCisjZGVmaW5lIFIwOTAwX1AxX1ROUkdBSU4gIDB4ZjRlOAorI2RlZmluZSBGMDkwMF9QMV9UVU5fS0RJVkVOICAweGY0ZTgwMGMwCisjZGVmaW5lIEYwOTAwX1AxX1NUQjZYMDBfT0NLICAweGY0ZTgwMDMwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9HQUlOICAweGY0ZTgwMDBmCisKKy8qUDFfVE5SUkYxKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE5SUkYxICAweGY0ZTkKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1JGRlJFUTIgIDB4ZjRlOTAwZmYKKworLypQMV9UTlJSRjAqLworI2RlZmluZSBSMDkwMF9QMV9UTlJSRjAgIDB4ZjRlYQorI2RlZmluZSBGMDkwMF9QMV9UVU5fUkZGUkVRMSAgMHhmNGVhMDBmZgorCisvKlAxX1ROUkJXKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE5SQlcgIDB4ZjRlYgorI2RlZmluZSBGMDkwMF9QMV9UVU5fUkZGUkVRMCAgMHhmNGViMDBjMAorI2RlZmluZSBGMDkwMF9QMV9UVU5fQlcgIDB4ZjRlYjAwM2YKKworLypQMV9UTlJBREoqLworI2RlZmluZSBSMDkwMF9QMV9UTlJBREogIDB4ZjRlYworI2RlZmluZSBGMDkwMF9QMV9TVEI2MVgwX1JDTEsgIDB4ZjRlYzAwODAKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjFYMF9DQUxUSU1FICAweGY0ZWMwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1NUQjZYMDBfRExCICAweGY0ZWMwMDM4CisjZGVmaW5lIEYwOTAwX1AxX1NUQjYwMDBfRkNMICAweGY0ZWMwMDA3CisKKy8qUDFfVE5SQ1RMMiovCisjZGVmaW5lIFIwOTAwX1AxX1ROUkNUTDIgIDB4ZjRlZAorI2RlZmluZSBGMDkwMF9QMV9TVEI2MVgwX0xDUDFfUkNDS09GRiAgMHhmNGVkMDA4MAorI2RlZmluZSBGMDkwMF9QMV9TVEI2MVgwX0xDUDAgIDB4ZjRlZDAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjFYMF9YVE9VVF9SRk9VVFMgIDB4ZjRlZDAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjFYMF9YVE9OX01DS0RWICAweGY0ZWQwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxWDBfQ0FMT0ZGX0RDT0ZGICAweGY0ZWQwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxMTBfTFBUICAweGY0ZWQwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxMTBfUlggIDB4ZjRlZDAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjExMF9TWU4gIDB4ZjRlZDAwMDEKKworLypQMV9UTlJDRkczKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE5SQ0ZHMyAgMHhmNGVlCisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxMjBfRElTQ1RSTDEgIDB4ZjRlZTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjEyMF9JTlZPUkRFUiAgMHhmNGVlMDA0MAorI2RlZmluZSBGMDkwMF9QMV9TVEI2MTIwX0VOQ1RSTDYgIDB4ZjRlZTAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1BMTEZSRVEgIDB4ZjRlZTAwMWMKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0kyQ0ZSRVFfTU9ERSAgMHhmNGVlMDAwMworCisvKlAxX1ROUkxBVU5DSCovCisjZGVmaW5lIFIwOTAwX1AxX1ROUkxBVU5DSCAgMHhmNGYwCisKKy8qUDFfVE5STEQqLworI2RlZmluZSBSMDkwMF9QMV9UTlJMRCAgMHhmNGYwCisjZGVmaW5lIEYwOTAwX1AxX1RVTkxEX1ZDT0lORyAgMHhmNGYwMDA4MAorI2RlZmluZSBGMDkwMF9QMV9UVU5fUkVHMUZBSUwgIDB4ZjRmMDAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1JFRzJGQUlMICAweGY0ZjAwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRUczRkFJTCAgMHhmNGYwMDAxMAorI2RlZmluZSBGMDkwMF9QMV9UVU5fUkVHNEZBSUwgIDB4ZjRmMDAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1JFRzVGQUlMICAweGY0ZjAwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1RVTl9CV0lORyAgMHhmNGYwMDAwMgorI2RlZmluZSBGMDkwMF9QMV9UVU5fTE9DS0VEICAweGY0ZjAwMDAxCisKKy8qUDFfVE5ST0JTTCovCisjZGVmaW5lIFIwOTAwX1AxX1ROUk9CU0wgIDB4ZjRmNgorI2RlZmluZSBGMDkwMF9QMV9UVU5fSTJDQUJPUlRFRCAgMHhmNGY2MDA4MAorI2RlZmluZSBGMDkwMF9QMV9UVU5fTFBFTiAgMHhmNGY2MDA0MAorI2RlZmluZSBGMDkwMF9QMV9UVU5fRkNDSyAgMHhmNGY2MDAyMAorI2RlZmluZSBGMDkwMF9QMV9UVU5fSTJDTE9DS0VEICAweGY0ZjYwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9QUk9HRE9ORSAgMHhmNGY2MDAwYworI2RlZmluZSBGMDkwMF9QMV9UVU5fUkZSRVNURTEgIDB4ZjRmNjAwMDMKKworLypQMV9UTlJSRVNURSovCisjZGVmaW5lIFIwOTAwX1AxX1ROUlJFU1RFICAweGY0ZjcKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1JGUkVTVEUwICAweGY0ZjcwMGZmCisKKy8qUDFfU01BUENPRUY3Ki8KKyNkZWZpbmUgUjA5MDBfUDFfU01BUENPRUY3ICAweGY1MDAKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1FTQ0FMRSAgMHhmNTAwMDA4MAorI2RlZmluZSBGMDkwMF9QMV9TTUFQQ09FRl9RX0xMUjEyICAweGY1MDAwMTdmCisKKy8qUDFfU01BUENPRUY2Ki8KKyNkZWZpbmUgUjA5MDBfUDFfU01BUENPRUY2ICAweGY1MDEKKyNkZWZpbmUgRjA5MDBfUDFfRElTX05FV1NDQUxFICAweGY1MDEwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0FESl84UFNLTExSMSAgMHhmNTAxMDAwNAorI2RlZmluZSBGMDkwMF9QMV9PTERfOFBTS0xMUjEgIDB4ZjUwMTAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfRElTX0FCOFBTSyAgMHhmNTAxMDAwMQorCisvKlAxX1NNQVBDT0VGNSovCisjZGVmaW5lIFIwOTAwX1AxX1NNQVBDT0VGNSAgMHhmNTAyCisjZGVmaW5lIEYwOTAwX1AxX0RJU184U0NBTEUgIDB4ZjUwMjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfU01BUENPRUZfOFBfTExSMjMgIDB4ZjUwMjAxN2YKKworLypQMV9ETURQTEhTVEFUKi8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EUExIU1RBVCAgMHhmNTIwCisjZGVmaW5lIEYwOTAwX1AxX1BMSF9TVEFUSVNUSUMgIDB4ZjUyMDAwZmYKKworLypQMV9MT0NLVElNRTMqLworI2RlZmluZSBSMDkwMF9QMV9MT0NLVElNRTMgIDB4ZjUyMgorI2RlZmluZSBGMDkwMF9QMV9ERU1PRF9MT0NLVElNRTMgIDB4ZjUyMjAwZmYKKworLypQMV9MT0NLVElNRTIqLworI2RlZmluZSBSMDkwMF9QMV9MT0NLVElNRTIgIDB4ZjUyMworI2RlZmluZSBGMDkwMF9QMV9ERU1PRF9MT0NLVElNRTIgIDB4ZjUyMzAwZmYKKworLypQMV9MT0NLVElNRTEqLworI2RlZmluZSBSMDkwMF9QMV9MT0NLVElNRTEgIDB4ZjUyNAorI2RlZmluZSBGMDkwMF9QMV9ERU1PRF9MT0NLVElNRTEgIDB4ZjUyNDAwZmYKKworLypQMV9MT0NLVElNRTAqLworI2RlZmluZSBSMDkwMF9QMV9MT0NLVElNRTAgIDB4ZjUyNQorI2RlZmluZSBGMDkwMF9QMV9ERU1PRF9MT0NLVElNRTAgIDB4ZjUyNTAwZmYKKworLypQMV9WSVRTQ0FMRSovCisjZGVmaW5lIFIwOTAwX1AxX1ZJVFNDQUxFICAweGY1MzIKKyNkZWZpbmUgRjA5MDBfUDFfTlZUSF9OT1NSQU5HRSAgMHhmNTMyMDA4MAorI2RlZmluZSBGMDkwMF9QMV9WRVJST1JfTUFYTU9ERSAgMHhmNTMyMDA0MAorI2RlZmluZSBGMDkwMF9QMV9LRElWX01PREUgIDB4ZjUzMjAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfTlNMT1dTTl9MT0NLRUQgIDB4ZjUzMjAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfREVMT0NLX1BSRkxPU1MgIDB4ZjUzMjAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1JTRkxPQ0sgIDB4ZjUzMjAwMDIKKworLypQMV9GRUNNKi8KKyNkZWZpbmUgUjA5MDBfUDFfRkVDTSAgMHhmNTMzCisjZGVmaW5lIEYwOTAwX1AxX0RTU19EVkIgIDB4ZjUzMzAwODAKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfQllQQVNTICAweGY1MzMwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NNUF9TTE9XTU9ERSAgMHhmNTMzMDAyMAorI2RlZmluZSBGMDkwMF9QMV9EU1NfU1JDSCAgMHhmNTMzMDAxMAorI2RlZmluZSBGMDkwMF9QMV9ESUZGX01PREVWSVQgIDB4ZjUzMzAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfU1lOQ1ZJVCAgMHhmNTMzMDAwMgorI2RlZmluZSBGMDkwMF9QMV9JUUlOViAgMHhmNTMzMDAwMQorCisvKlAxX1ZUSDEyKi8KKyNkZWZpbmUgUjA5MDBfUDFfVlRIMTIgIDB4ZjUzNAorI2RlZmluZSBGMDkwMF9QMV9WVEgxMiAgMHhmNTM0MDBmZgorCisvKlAxX1ZUSDIzKi8KKyNkZWZpbmUgUjA5MDBfUDFfVlRIMjMgIDB4ZjUzNQorI2RlZmluZSBGMDkwMF9QMV9WVEgyMyAgMHhmNTM1MDBmZgorCisvKlAxX1ZUSDM0Ki8KKyNkZWZpbmUgUjA5MDBfUDFfVlRIMzQgIDB4ZjUzNgorI2RlZmluZSBGMDkwMF9QMV9WVEgzNCAgMHhmNTM2MDBmZgorCisvKlAxX1ZUSDU2Ki8KKyNkZWZpbmUgUjA5MDBfUDFfVlRINTYgIDB4ZjUzNworI2RlZmluZSBGMDkwMF9QMV9WVEg1NiAgMHhmNTM3MDBmZgorCisvKlAxX1ZUSDY3Ki8KKyNkZWZpbmUgUjA5MDBfUDFfVlRINjcgIDB4ZjUzOAorI2RlZmluZSBGMDkwMF9QMV9WVEg2NyAgMHhmNTM4MDBmZgorCisvKlAxX1ZUSDc4Ki8KKyNkZWZpbmUgUjA5MDBfUDFfVlRINzggIDB4ZjUzOQorI2RlZmluZSBGMDkwMF9QMV9WVEg3OCAgMHhmNTM5MDBmZgorCisvKlAxX1ZJVENVUlBVTiovCisjZGVmaW5lIFIwOTAwX1AxX1ZJVENVUlBVTiAgMHhmNTNhCisjZGVmaW5lIEYwOTAwX1AxX1ZJVF9NQVBQSU5HICAweGY1M2EwMGUwCisjZGVmaW5lIEYwOTAwX1AxX1ZJVF9DVVJQVU4gIDB4ZjUzYTAwMWYKKworLypQMV9WRVJST1IqLworI2RlZmluZSBSMDkwMF9QMV9WRVJST1IgIDB4ZjUzYgorI2RlZmluZSBGMDkwMF9QMV9SRUdFUlJfVklUICAweGY1M2IwMGZmCisKKy8qUDFfUFJWSVQqLworI2RlZmluZSBSMDkwMF9QMV9QUlZJVCAgMHhmNTNjCisjZGVmaW5lIEYwOTAwX1AxX0RJU19WVEhMT0NLICAweGY1M2MwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0U3XzhWSVQgIDB4ZjUzYzAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfRTZfN1ZJVCAgMHhmNTNjMDAxMAorI2RlZmluZSBGMDkwMF9QMV9FNV82VklUICAweGY1M2MwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0UzXzRWSVQgIDB4ZjUzYzAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfRTJfM1ZJVCAgMHhmNTNjMDAwMgorI2RlZmluZSBGMDkwMF9QMV9FMV8yVklUICAweGY1M2MwMDAxCisKKy8qUDFfVkFWU1JWSVQqLworI2RlZmluZSBSMDkwMF9QMV9WQVZTUlZJVCAgMHhmNTNkCisjZGVmaW5lIEYwOTAwX1AxX0FNVklUICAweGY1M2QwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0ZST1pFTlZJVCAgMHhmNTNkMDA0MAorI2RlZmluZSBGMDkwMF9QMV9TTlZJVCAgMHhmNTNkMDAzMAorI2RlZmluZSBGMDkwMF9QMV9UT1ZWSVQgIDB4ZjUzZDAwMGMKKyNkZWZpbmUgRjA5MDBfUDFfSFlQVklUICAweGY1M2QwMDAzCisKKy8qUDFfVlNUQVRVU1ZJVCovCisjZGVmaW5lIFIwOTAwX1AxX1ZTVEFUVVNWSVQgIDB4ZjUzZQorI2RlZmluZSBGMDkwMF9QMV9WSVRFUkJJX09OICAweGY1M2UwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0VORF9MT09QVklUICAweGY1M2UwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1ZJVEVSQklfREVQUkYgIDB4ZjUzZTAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfUFJGVklUICAweGY1M2UwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0xPQ0tFRFZJVCAgMHhmNTNlMDAwOAorI2RlZmluZSBGMDkwMF9QMV9WSVRFUkJJX0RFTE9DSyAgMHhmNTNlMDAwNAorI2RlZmluZSBGMDkwMF9QMV9WSVRfREVNT0RTRUwgIDB4ZjUzZTAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfVklURVJCSV9DT01QT1VUICAweGY1M2UwMDAxCisKKy8qUDFfVlRISU5VU0UqLworI2RlZmluZSBSMDkwMF9QMV9WVEhJTlVTRSAgMHhmNTNmCisjZGVmaW5lIEYwOTAwX1AxX1ZJVF9JTlVTRSAgMHhmNTNmMDBmZgorCisvKlAxX0tESVYxMiovCisjZGVmaW5lIFIwOTAwX1AxX0tESVYxMiAgMHhmNTQwCisjZGVmaW5lIEYwOTAwX1AxX0tESVYxMl9NQU5VQUwgIDB4ZjU0MDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfS19ESVZJREVSXzEyICAweGY1NDAwMDdmCisKKy8qUDFfS0RJVjIzKi8KKyNkZWZpbmUgUjA5MDBfUDFfS0RJVjIzICAweGY1NDEKKyNkZWZpbmUgRjA5MDBfUDFfS0RJVjIzX01BTlVBTCAgMHhmNTQxMDA4MAorI2RlZmluZSBGMDkwMF9QMV9LX0RJVklERVJfMjMgIDB4ZjU0MTAwN2YKKworLypQMV9LRElWMzQqLworI2RlZmluZSBSMDkwMF9QMV9LRElWMzQgIDB4ZjU0MgorI2RlZmluZSBGMDkwMF9QMV9LRElWMzRfTUFOVUFMICAweGY1NDIwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0tfRElWSURFUl8zNCAgMHhmNTQyMDA3ZgorCisvKlAxX0tESVY1NiovCisjZGVmaW5lIFIwOTAwX1AxX0tESVY1NiAgMHhmNTQzCisjZGVmaW5lIEYwOTAwX1AxX0tESVY1Nl9NQU5VQUwgIDB4ZjU0MzAwODAKKyNkZWZpbmUgRjA5MDBfUDFfS19ESVZJREVSXzU2ICAweGY1NDMwMDdmCisKKy8qUDFfS0RJVjY3Ki8KKyNkZWZpbmUgUjA5MDBfUDFfS0RJVjY3ICAweGY1NDQKKyNkZWZpbmUgRjA5MDBfUDFfS0RJVjY3X01BTlVBTCAgMHhmNTQ0MDA4MAorI2RlZmluZSBGMDkwMF9QMV9LX0RJVklERVJfNjcgIDB4ZjU0NDAwN2YKKworLypQMV9LRElWNzgqLworI2RlZmluZSBSMDkwMF9QMV9LRElWNzggIDB4ZjU0NQorI2RlZmluZSBGMDkwMF9QMV9LRElWNzhfTUFOVUFMICAweGY1NDUwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0tfRElWSURFUl83OCAgMHhmNTQ1MDA3ZgorCisvKlAxX1BERUxDVFJMMSovCisjZGVmaW5lIFIwOTAwX1AxX1BERUxDVFJMMSAgMHhmNTUwCisjZGVmaW5lIEYwOTAwX1AxX0lOVl9NSVNNQVNLICAweGY1NTAwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0ZPUkNFX0FDQ0VQVEVEICAweGY1NTAwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0ZJTFRFUl9FTiAgMHhmNTUwMDAyMAorI2RlZmluZSBGMDkwMF9QMV9GT1JDRV9QS1RERUxJTlVTRSAgMHhmNTUwMDAxMAorI2RlZmluZSBGMDkwMF9QMV9IWVNURU4gIDB4ZjU1MDAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfSFlTVFNXUlNUICAweGY1NTAwMDA0CisjZGVmaW5lIEYwOTAwX1AxX0VOX01JUzAwICAweGY1NTAwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0FMR09TV1JTVCAgMHhmNTUwMDAwMQorCisvKlAxX1BERUxDVFJMMiovCisjZGVmaW5lIFIwOTAwX1AxX1BERUxDVFJMMiAgMHhmNTUxCisjZGVmaW5lIEYwOTAwX1AxX0ZPUkNFX0NPTlRJTlVPVVMgIDB4ZjU1MTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfUkVTRVRfVVBLT19DT1VOVCAgMHhmNTUxMDA0MAorI2RlZmluZSBGMDkwMF9QMV9VU0VSX1BLVERFTElOX05CICAweGY1NTEwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0ZPUkNFX0xPQ0tFRCAgMHhmNTUxMDAxMAorI2RlZmluZSBGMDkwMF9QMV9EQVRBX1VOQkJTQ1JBTSAgMHhmNTUxMDAwOAorI2RlZmluZSBGMDkwMF9QMV9GT1JDRV9MT05HUEtUICAweGY1NTEwMDA0CisjZGVmaW5lIEYwOTAwX1AxX0ZSQU1FX01PREUgIDB4ZjU1MTAwMDIKKworLypQMV9IWVNUVEhSRVNIKi8KKyNkZWZpbmUgUjA5MDBfUDFfSFlTVFRIUkVTSCAgMHhmNTU0CisjZGVmaW5lIEYwOTAwX1AxX1VOTENLX1RIUkVTSCAgMHhmNTU0MDBmMAorI2RlZmluZSBGMDkwMF9QMV9ERUxJTl9MQ0tfVEhSRVNIICAweGY1NTQwMDBmCisKKy8qUDFfSVNJRU5UUlkqLworI2RlZmluZSBSMDkwMF9QMV9JU0lFTlRSWSAgMHhmNTVlCisjZGVmaW5lIEYwOTAwX1AxX0lTSV9FTlRSWSAgMHhmNTVlMDBmZgorCisvKlAxX0lTSUJJVEVOQSovCisjZGVmaW5lIFIwOTAwX1AxX0lTSUJJVEVOQSAgMHhmNTVmCisjZGVmaW5lIEYwOTAwX1AxX0lTSV9CSVRfRU4gIDB4ZjU1ZjAwZmYKKworLypQMV9NQVRTVFIxKi8KKyNkZWZpbmUgUjA5MDBfUDFfTUFUU1RSMSAgMHhmNTYwCisjZGVmaW5lIEYwOTAwX1AxX01BVFlQRV9DVVJSRU5UMSAgMHhmNTYwMDBmZgorCisvKlAxX01BVFNUUjAqLworI2RlZmluZSBSMDkwMF9QMV9NQVRTVFIwICAweGY1NjEKKyNkZWZpbmUgRjA5MDBfUDFfTUFUWVBFX0NVUlJFTlQwICAweGY1NjEwMGZmCisKKy8qUDFfVVBMU1RSMSovCisjZGVmaW5lIFIwOTAwX1AxX1VQTFNUUjEgIDB4ZjU2MgorI2RlZmluZSBGMDkwMF9QMV9VUExfQ1VSUkVOVDEgIDB4ZjU2MjAwZmYKKworLypQMV9VUExTVFIwKi8KKyNkZWZpbmUgUjA5MDBfUDFfVVBMU1RSMCAgMHhmNTYzCisjZGVmaW5lIEYwOTAwX1AxX1VQTF9DVVJSRU5UMCAgMHhmNTYzMDBmZgorCisvKlAxX0RGTFNUUjEqLworI2RlZmluZSBSMDkwMF9QMV9ERkxTVFIxICAweGY1NjQKKyNkZWZpbmUgRjA5MDBfUDFfREZMX0NVUlJFTlQxICAweGY1NjQwMGZmCisKKy8qUDFfREZMU1RSMCovCisjZGVmaW5lIFIwOTAwX1AxX0RGTFNUUjAgIDB4ZjU2NQorI2RlZmluZSBGMDkwMF9QMV9ERkxfQ1VSUkVOVDAgIDB4ZjU2NTAwZmYKKworLypQMV9TWU5DU1RSKi8KKyNkZWZpbmUgUjA5MDBfUDFfU1lOQ1NUUiAgMHhmNTY2CisjZGVmaW5lIEYwOTAwX1AxX1NZTkNfQ1VSUkVOVCAgMHhmNTY2MDBmZgorCisvKlAxX1NZTkNEU1RSMSovCisjZGVmaW5lIFIwOTAwX1AxX1NZTkNEU1RSMSAgMHhmNTY3CisjZGVmaW5lIEYwOTAwX1AxX1NZTkNEX0NVUlJFTlQxICAweGY1NjcwMGZmCisKKy8qUDFfU1lOQ0RTVFIwKi8KKyNkZWZpbmUgUjA5MDBfUDFfU1lOQ0RTVFIwICAweGY1NjgKKyNkZWZpbmUgRjA5MDBfUDFfU1lOQ0RfQ1VSUkVOVDAgIDB4ZjU2ODAwZmYKKworLypQMV9QREVMU1RBVFVTMSovCisjZGVmaW5lIFIwOTAwX1AxX1BERUxTVEFUVVMxICAweGY1NjkKKyNkZWZpbmUgRjA5MDBfUDFfUEtUREVMSU5fREVMT0NLICAweGY1NjkwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1NZTkNEVVBERkxfQkFEREZMICAweGY1NjkwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NPTlRJTlVPVVNfU1RSRUFNICAweGY1NjkwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1VOQUNDRVBURURfU1RSRUFNICAweGY1NjkwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0JDSF9FUlJPUl9GTEFHICAweGY1NjkwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0JCSENSQ0tPICAweGY1NjkwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1BLVERFTElOX0xPQ0sgIDB4ZjU2OTAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfRklSU1RfTE9DSyAgMHhmNTY5MDAwMQorCisvKlAxX1BERUxTVEFUVVMyKi8KKyNkZWZpbmUgUjA5MDBfUDFfUERFTFNUQVRVUzIgIDB4ZjU2YQorI2RlZmluZSBGMDkwMF9QMV9QS1RERUxfREVNT0RTRUwgIDB4ZjU2YTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfRlJBTUVfTU9EQ09EICAweGY1NmEwMDdjCisjZGVmaW5lIEYwOTAwX1AxX0ZSQU1FX1RZUEUgIDB4ZjU2YTAwMDMKKworLypQMV9CQkZDUkNLTzEqLworI2RlZmluZSBSMDkwMF9QMV9CQkZDUkNLTzEgIDB4ZjU2YgorI2RlZmluZSBGMDkwMF9QMV9CQkhDUkNfS09DTlQxICAweGY1NmIwMGZmCisKKy8qUDFfQkJGQ1JDS08wKi8KKyNkZWZpbmUgUjA5MDBfUDFfQkJGQ1JDS08wICAweGY1NmMKKyNkZWZpbmUgRjA5MDBfUDFfQkJIQ1JDX0tPQ05UMCAgMHhmNTZjMDBmZgorCisvKlAxX1VQQ1JDS08xKi8KKyNkZWZpbmUgUjA5MDBfUDFfVVBDUkNLTzEgIDB4ZjU2ZAorI2RlZmluZSBGMDkwMF9QMV9QS1RDUkNfS09DTlQxICAweGY1NmQwMGZmCisKKy8qUDFfVVBDUkNLTzAqLworI2RlZmluZSBSMDkwMF9QMV9VUENSQ0tPMCAgMHhmNTZlCisjZGVmaW5lIEYwOTAwX1AxX1BLVENSQ19LT0NOVDAgIDB4ZjU2ZTAwZmYKKworLypQMV9UU1NUQVRFTSovCisjZGVmaW5lIFIwOTAwX1AxX1RTU1RBVEVNICAweGY1NzAKKyNkZWZpbmUgRjA5MDBfUDFfVFNESUxfT04gIDB4ZjU3MDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfVFNTS0lQUlNfT04gIDB4ZjU3MDAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfVFNSU19PTiAgMHhmNTcwMDAyMAorI2RlZmluZSBGMDkwMF9QMV9UU0RFU0NSQU1CX09OICAweGY1NzAwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1RTRlJBTUVfTU9ERSAgMHhmNTcwMDAwOAorI2RlZmluZSBGMDkwMF9QMV9UU19ESVNBQkxFICAweGY1NzAwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1RTQUNNX01PREUgIDB4ZjU3MDAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfVFNPVVRfTk9TWU5DICAweGY1NzAwMDAxCisKKy8qUDFfVFNDRkdIKi8KKyNkZWZpbmUgUjA5MDBfUDFfVFNDRkdIICAweGY1NzIKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0RWQkNJICAweGY1NzIwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19TRVJJQUwgIDB4ZjU3MjAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX1RFSVVQREFURSAgMHhmNTcyMDAyMAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fRFVUWTUwICAweGY1NzIwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19IU0dOTE9VVCAgMHhmNTcyMDAwOAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fRVJSTU9ERSAgMHhmNTcyMDAwNgorI2RlZmluZSBGMDkwMF9QMV9SU1RfSFdBUkUgIDB4ZjU3MjAwMDEKKworLypQMV9UU0NGR00qLworI2RlZmluZSBSMDkwMF9QMV9UU0NGR00gIDB4ZjU3MworI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fTUFOU1BFRUQgIDB4ZjU3MzAwYzAKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX1BFUk1EQVRBICAweGY1NzMwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19OT05FV1NHTkwgIDB4ZjU3MzAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0JJVFNQRUVEICAweGY1NzMwMDA4CisjZGVmaW5lIEYwOTAwX1AxX05QRF9TUEVDRFZCUzIgIDB4ZjU3MzAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX1NUT1BDS0RJUyAgMHhmNTczMDAwMgorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fSU5WREFUQSAgMHhmNTczMDAwMQorCisvKlAxX1RTQ0ZHTCovCisjZGVmaW5lIFIwOTAwX1AxX1RTQ0ZHTCAgMHhmNTc0CisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19CQ0xLREVMMUNLICAweGY1NzQwMGMwCisjZGVmaW5lIEYwOTAwX1AxX0JDSEVSUk9SX01PREUgIDB4ZjU3NDAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX05TR05MMkRBVEEgIDB4ZjU3NDAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0VNQklORFZCICAweGY1NzQwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19EUFVOQUNUICAweGY1NzQwMDAyCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19OUERPRkYgIDB4ZjU3NDAwMDEKKworLypQMV9UU0lOU0RFTEgqLworI2RlZmluZSBSMDkwMF9QMV9UU0lOU0RFTEggIDB4ZjU3NgorI2RlZmluZSBGMDkwMF9QMV9UU0RFTF9TWU5DQllURSAgMHhmNTc2MDA4MAorI2RlZmluZSBGMDkwMF9QMV9UU0RFTF9YWEhFQURFUiAgMHhmNTc2MDA0MAorI2RlZmluZSBGMDkwMF9QMV9UU0RFTF9CQkhFQURFUiAgMHhmNTc2MDAyMAorI2RlZmluZSBGMDkwMF9QMV9UU0RFTF9EQVRBRklFTEQgIDB4ZjU3NjAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfVFNJTlNERUxfSVNDUiAgMHhmNTc2MDAwOAorI2RlZmluZSBGMDkwMF9QMV9UU0lOU0RFTF9OUEQgIDB4ZjU3NjAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfVFNJTlNERUxfUlNQQVJJVFkgIDB4ZjU3NjAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfVFNJTlNERUxfQ1JDOCAgMHhmNTc2MDAwMQorCisvKlAxX1RTU1BFRUQqLworI2RlZmluZSBSMDkwMF9QMV9UU1NQRUVEICAweGY1ODAKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX09VVFNQRUVEICAweGY1ODAwMGZmCisKKy8qUDFfVFNTVEFUVVMqLworI2RlZmluZSBSMDkwMF9QMV9UU1NUQVRVUyAgMHhmNTgxCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19MSU5FT0sgIDB4ZjU4MTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0VSUk9SICAweGY1ODEwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19EQVRBNyAgMHhmNTgxMDAyMAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fTk9TWU5DICAweGY1ODEwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0lTQ1JfSU5JVElBTElaRUQgIDB4ZjU4MTAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfSVNDUl9VUERBVEVEICAweGY1ODEwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1NPRkZJRk9fVU5SRUdVTCAgMHhmNTgxMDAwMgorI2RlZmluZSBGMDkwMF9QMV9ESUxfUkVBRFkgIDB4ZjU4MTAwMDEKKworLypQMV9UU1NUQVRVUzIqLworI2RlZmluZSBSMDkwMF9QMV9UU1NUQVRVUzIgIDB4ZjU4MgorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fREVNT0RTRUwgIDB4ZjU4MjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPU1BFRURfU1RPUkUgIDB4ZjU4MjAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfRElMWFhfUkVTRVQgIDB4ZjU4MjAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfVFNTRVJJQUxfSU1QT1MgIDB4ZjU4MjAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0xJTkVOT0sgIDB4ZjU4MjAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfQklUU1BFRURfRVZFTlQgIDB4ZjU4MjAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfU0NSQU1CREVURUNUICAweGY1ODIwMDAyCisjZGVmaW5lIEYwOTAwX1AxX1VMRFRWNjdfRkFMU0VMT0NLICAweGY1ODIwMDAxCisKKy8qUDFfVFNCSVRSQVRFMSovCisjZGVmaW5lIFIwOTAwX1AxX1RTQklUUkFURTEgIDB4ZjU4MworI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fQklUUkFURTEgIDB4ZjU4MzAwZmYKKworLypQMV9UU0JJVFJBVEUwKi8KKyNkZWZpbmUgUjA5MDBfUDFfVFNCSVRSQVRFMCAgMHhmNTg0CisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19CSVRSQVRFMCAgMHhmNTg0MDBmZgorCisvKlAxX0VSUkNUUkwxKi8KKyNkZWZpbmUgUjA5MDBfUDFfRVJSQ1RSTDEgIDB4ZjU5OAorI2RlZmluZSBGMDkwMF9QMV9FUlJfU09VUkNFMSAgMHhmNTk4MDBmMAorI2RlZmluZSBGMDkwMF9QMV9OVU1fRVZFTlQxICAweGY1OTgwMDA3CisKKy8qUDFfRVJSQ05UMTIqLworI2RlZmluZSBSMDkwMF9QMV9FUlJDTlQxMiAgMHhmNTk5CisjZGVmaW5lIEYwOTAwX1AxX0VSUkNOVDFfT0xEVkFMVUUgIDB4ZjU5OTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfRVJSX0NOVDEyICAweGY1OTkwMDdmCisKKy8qUDFfRVJSQ05UMTEqLworI2RlZmluZSBSMDkwMF9QMV9FUlJDTlQxMSAgMHhmNTlhCisjZGVmaW5lIEYwOTAwX1AxX0VSUl9DTlQxMSAgMHhmNTlhMDBmZgorCisvKlAxX0VSUkNOVDEwKi8KKyNkZWZpbmUgUjA5MDBfUDFfRVJSQ05UMTAgIDB4ZjU5YgorI2RlZmluZSBGMDkwMF9QMV9FUlJfQ05UMTAgIDB4ZjU5YjAwZmYKKworLypQMV9FUlJDVFJMMiovCisjZGVmaW5lIFIwOTAwX1AxX0VSUkNUUkwyICAweGY1OWMKKyNkZWZpbmUgRjA5MDBfUDFfRVJSX1NPVVJDRTIgIDB4ZjU5YzAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfTlVNX0VWRU5UMiAgMHhmNTljMDAwNworCisvKlAxX0VSUkNOVDIyKi8KKyNkZWZpbmUgUjA5MDBfUDFfRVJSQ05UMjIgIDB4ZjU5ZAorI2RlZmluZSBGMDkwMF9QMV9FUlJDTlQyX09MRFZBTFVFICAweGY1OWQwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0VSUl9DTlQyMiAgMHhmNTlkMDA3ZgorCisvKlAxX0VSUkNOVDIxKi8KKyNkZWZpbmUgUjA5MDBfUDFfRVJSQ05UMjEgIDB4ZjU5ZQorI2RlZmluZSBGMDkwMF9QMV9FUlJfQ05UMjEgIDB4ZjU5ZTAwZmYKKworLypQMV9FUlJDTlQyMCovCisjZGVmaW5lIFIwOTAwX1AxX0VSUkNOVDIwICAweGY1OWYKKyNkZWZpbmUgRjA5MDBfUDFfRVJSX0NOVDIwICAweGY1OWYwMGZmCisKKy8qUDFfRkVDU1BZKi8KKyNkZWZpbmUgUjA5MDBfUDFfRkVDU1BZICAweGY1YTAKKyNkZWZpbmUgRjA5MDBfUDFfU1BZX0VOQUJMRSAgMHhmNWEwMDA4MAorI2RlZmluZSBGMDkwMF9QMV9OT19TWU5DQllURSAgMHhmNWEwMDA0MAorI2RlZmluZSBGMDkwMF9QMV9TRVJJQUxfTU9ERSAgMHhmNWEwMDAyMAorI2RlZmluZSBGMDkwMF9QMV9VTlVTVUFMX1BBQ0tFVCAgMHhmNWEwMDAxMAorI2RlZmluZSBGMDkwMF9QMV9CRVJfUEFDS01PREUgIDB4ZjVhMDAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfQkVSTUVURVJfTE1PREUgIDB4ZjVhMDAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfQkVSTUVURVJfUkVTRVQgIDB4ZjVhMDAwMDEKKworLypQMV9GU1BZQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDFfRlNQWUNGRyAgMHhmNWExCisjZGVmaW5lIEYwOTAwX1AxX0ZFQ1NQWV9JTlBVVCAgMHhmNWExMDBjMAorI2RlZmluZSBGMDkwMF9QMV9SU1RfT05fRVJST1IgIDB4ZjVhMTAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfT05FX1NIT1QgIDB4ZjVhMTAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfSTJDX01PREUgIDB4ZjVhMTAwMGMKKyNkZWZpbmUgRjA5MDBfUDFfU1BZX0hZU1RFUkVTSVMgIDB4ZjVhMTAwMDMKKworLypQMV9GU1BZREFUQSovCisjZGVmaW5lIFIwOTAwX1AxX0ZTUFlEQVRBICAweGY1YTIKKyNkZWZpbmUgRjA5MDBfUDFfU1BZX1NUVUZGSU5HICAweGY1YTIwMDgwCisjZGVmaW5lIEYwOTAwX1AxX05PRVJST1JfUEtUSklUVEVSICAweGY1YTIwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1NQWV9DTlVMTFBLVCAgMHhmNWEyMDAyMAorI2RlZmluZSBGMDkwMF9QMV9TUFlfT1VUREFUQV9NT0RFICAweGY1YTIwMDFmCisKKy8qUDFfRlNQWU9VVCovCisjZGVmaW5lIFIwOTAwX1AxX0ZTUFlPVVQgIDB4ZjVhMworI2RlZmluZSBGMDkwMF9QMV9GU1BZX0RJUkVDVCAgMHhmNWEzMDA4MAorI2RlZmluZSBGMDkwMF9QMV9TUFlfT1VUREFUQV9CVVMgIDB4ZjVhMzAwMzgKKyNkZWZpbmUgRjA5MDBfUDFfU1RVRkZfTU9ERSAgMHhmNWEzMDAwNworCisvKlAxX0ZTVEFUVVMqLworI2RlZmluZSBSMDkwMF9QMV9GU1RBVFVTICAweGY1YTQKKyNkZWZpbmUgRjA5MDBfUDFfU1BZX0VORFNJTSAgMHhmNWE0MDA4MAorI2RlZmluZSBGMDkwMF9QMV9WQUxJRF9TSU0gIDB4ZjVhNDAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfRk9VTkRfU0lHTkFMICAweGY1YTQwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0RTU19TWU5DQllURSAgMHhmNWE0MDAxMAorI2RlZmluZSBGMDkwMF9QMV9SRVNVTFRfU1RBVEUgIDB4ZjVhNDAwMGYKKworLypQMV9GQkVSQ1BUNCovCisjZGVmaW5lIFIwOTAwX1AxX0ZCRVJDUFQ0ICAweGY1YTgKKyNkZWZpbmUgRjA5MDBfUDFfRkJFUk1FVEVSX0NQVDQgIDB4ZjVhODAwZmYKKworLypQMV9GQkVSQ1BUMyovCisjZGVmaW5lIFIwOTAwX1AxX0ZCRVJDUFQzICAweGY1YTkKKyNkZWZpbmUgRjA5MDBfUDFfRkJFUk1FVEVSX0NQVDMgIDB4ZjVhOTAwZmYKKworLypQMV9GQkVSQ1BUMiovCisjZGVmaW5lIFIwOTAwX1AxX0ZCRVJDUFQyICAweGY1YWEKKyNkZWZpbmUgRjA5MDBfUDFfRkJFUk1FVEVSX0NQVDIgIDB4ZjVhYTAwZmYKKworLypQMV9GQkVSQ1BUMSovCisjZGVmaW5lIFIwOTAwX1AxX0ZCRVJDUFQxICAweGY1YWIKKyNkZWZpbmUgRjA5MDBfUDFfRkJFUk1FVEVSX0NQVDEgIDB4ZjVhYjAwZmYKKworLypQMV9GQkVSQ1BUMCovCisjZGVmaW5lIFIwOTAwX1AxX0ZCRVJDUFQwICAweGY1YWMKKyNkZWZpbmUgRjA5MDBfUDFfRkJFUk1FVEVSX0NQVDAgIDB4ZjVhYzAwZmYKKworLypQMV9GQkVSRVJSMiovCisjZGVmaW5lIFIwOTAwX1AxX0ZCRVJFUlIyICAweGY1YWQKKyNkZWZpbmUgRjA5MDBfUDFfRkJFUk1FVEVSX0VSUjIgIDB4ZjVhZDAwZmYKKworLypQMV9GQkVSRVJSMSovCisjZGVmaW5lIFIwOTAwX1AxX0ZCRVJFUlIxICAweGY1YWUKKyNkZWZpbmUgRjA5MDBfUDFfRkJFUk1FVEVSX0VSUjEgIDB4ZjVhZTAwZmYKKworLypQMV9GQkVSRVJSMCovCisjZGVmaW5lIFIwOTAwX1AxX0ZCRVJFUlIwICAweGY1YWYKKyNkZWZpbmUgRjA5MDBfUDFfRkJFUk1FVEVSX0VSUjAgIDB4ZjVhZjAwZmYKKworLypQMV9GU1BZQkVSKi8KKyNkZWZpbmUgUjA5MDBfUDFfRlNQWUJFUiAgMHhmNWIyCisjZGVmaW5lIEYwOTAwX1AxX0ZTUFlPQlNfWE9SUkVBRCAgMHhmNWIyMDA0MAorI2RlZmluZSBGMDkwMF9QMV9GU1BZQkVSX09CU01PREUgIDB4ZjViMjAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfRlNQWUJFUl9TWU5DQllURSAgMHhmNWIyMDAxMAorI2RlZmluZSBGMDkwMF9QMV9GU1BZQkVSX1VOU1lOQyAgMHhmNWIyMDAwOAorI2RlZmluZSBGMDkwMF9QMV9GU1BZQkVSX0NUSU1FICAweGY1YjIwMDA3CisKKy8qUkNDRkdIKi8KKyNkZWZpbmUgUjA5MDBfUkNDRkdIICAweGY2MDAKKyNkZWZpbmUgRjA5MDBfVFNSQ0ZJRk9fRFZCQ0kgIDB4ZjYwMDAwODAKKyNkZWZpbmUgRjA5MDBfVFNSQ0ZJRk9fU0VSSUFMICAweGY2MDAwMDQwCisjZGVmaW5lIEYwOTAwX1RTUkNGSUZPX0RJU0FCTEUgIDB4ZjYwMDAwMjAKKyNkZWZpbmUgRjA5MDBfVFNGSUZPXzJUT1JDICAweGY2MDAwMDEwCisjZGVmaW5lIEYwOTAwX1RTUkNGSUZPX0hTR05MT1VUICAweGY2MDAwMDA4CisjZGVmaW5lIEYwOTAwX1RTUkNGSUZPX0VSUk1PREUgIDB4ZjYwMDAwMDYKKworLypUU0dFTkVSQUwqLworI2RlZmluZSBSMDkwMF9UU0dFTkVSQUwgIDB4ZjYzMAorI2RlZmluZSBGMDkwMF9UU0ZJRk9fQkNMSzFBTEwgIDB4ZjYzMDAwMjAKKyNkZWZpbmUgRjA5MDBfTVVYU1RSRUFNX09VVE1PREUgIDB4ZjYzMDAwMDgKKyNkZWZpbmUgRjA5MDBfVFNGSUZPX1BFUk1QQVJBTCAgMHhmNjMwMDAwNgorI2RlZmluZSBGMDkwMF9SU1RfUkVFRFNPTE8gIDB4ZjYzMDAwMDEKKworLypUU0dFTkVSQUwxWCovCisjZGVmaW5lIFIwOTAwX1RTR0VORVJBTDFYICAweGY2NzAKKyNkZWZpbmUgRjA5MDBfVFNGSUZPMVhfQkNMSzFBTEwgIDB4ZjY3MDAwMjAKKyNkZWZpbmUgRjA5MDBfTVVYU1RSRUFNMVhfT1VUTU9ERSAgMHhmNjcwMDAwOAorI2RlZmluZSBGMDkwMF9UU0ZJRk8xWF9QRVJNUEFSQUwgIDB4ZjY3MDAwMDYKKyNkZWZpbmUgRjA5MDBfUlNUMVhfUkVFRFNPTE8gIDB4ZjY3MDAwMDEKKworLypOQklURVJfTkY0Ki8KKyNkZWZpbmUgUjA5MDBfTkJJVEVSX05GNCAgMHhmYTAzCisjZGVmaW5lIEYwOTAwX05CSVRFUl9ORl9RUF8xXzIgIDB4ZmEwMzAwZmYKKworLypOQklURVJfTkY1Ki8KKyNkZWZpbmUgUjA5MDBfTkJJVEVSX05GNSAgMHhmYTA0CisjZGVmaW5lIEYwOTAwX05CSVRFUl9ORl9RUF8zXzUgIDB4ZmEwNDAwZmYKKworLypOQklURVJfTkY2Ki8KKyNkZWZpbmUgUjA5MDBfTkJJVEVSX05GNiAgMHhmYTA1CisjZGVmaW5lIEYwOTAwX05CSVRFUl9ORl9RUF8yXzMgIDB4ZmEwNTAwZmYKKworLypOQklURVJfTkY3Ki8KKyNkZWZpbmUgUjA5MDBfTkJJVEVSX05GNyAgMHhmYTA2CisjZGVmaW5lIEYwOTAwX05CSVRFUl9ORl9RUF8zXzQgIDB4ZmEwNjAwZmYKKworLypOQklURVJfTkY4Ki8KKyNkZWZpbmUgUjA5MDBfTkJJVEVSX05GOCAgMHhmYTA3CisjZGVmaW5lIEYwOTAwX05CSVRFUl9ORl9RUF80XzUgIDB4ZmEwNzAwZmYKKworLypOQklURVJfTkY5Ki8KKyNkZWZpbmUgUjA5MDBfTkJJVEVSX05GOSAgMHhmYTA4CisjZGVmaW5lIEYwOTAwX05CSVRFUl9ORl9RUF81XzYgIDB4ZmEwODAwZmYKKworLypOQklURVJfTkYxMCovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjEwICAweGZhMDkKKyNkZWZpbmUgRjA5MDBfTkJJVEVSX05GX1FQXzhfOSAgMHhmYTA5MDBmZgorCisvKk5CSVRFUl9ORjExKi8KKyNkZWZpbmUgUjA5MDBfTkJJVEVSX05GMTEgIDB4ZmEwYQorI2RlZmluZSBGMDkwMF9OQklURVJfTkZfUVBfOV8xMCAgMHhmYTBhMDBmZgorCisvKk5CSVRFUl9ORjEyKi8KKyNkZWZpbmUgUjA5MDBfTkJJVEVSX05GMTIgIDB4ZmEwYgorI2RlZmluZSBGMDkwMF9OQklURVJfTkZfOFBfM181ICAweGZhMGIwMGZmCisKKy8qTkJJVEVSX05GMTMqLworI2RlZmluZSBSMDkwMF9OQklURVJfTkYxMyAgMHhmYTBjCisjZGVmaW5lIEYwOTAwX05CSVRFUl9ORl84UF8yXzMgIDB4ZmEwYzAwZmYKKworLypOQklURVJfTkYxNCovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjE0ICAweGZhMGQKKyNkZWZpbmUgRjA5MDBfTkJJVEVSX05GXzhQXzNfNCAgMHhmYTBkMDBmZgorCisvKk5CSVRFUl9ORjE1Ki8KKyNkZWZpbmUgUjA5MDBfTkJJVEVSX05GMTUgIDB4ZmEwZQorI2RlZmluZSBGMDkwMF9OQklURVJfTkZfOFBfNV82ICAweGZhMGUwMGZmCisKKy8qTkJJVEVSX05GMTYqLworI2RlZmluZSBSMDkwMF9OQklURVJfTkYxNiAgMHhmYTBmCisjZGVmaW5lIEYwOTAwX05CSVRFUl9ORl84UF84XzkgIDB4ZmEwZjAwZmYKKworLypOQklURVJfTkYxNyovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjE3ICAweGZhMTAKKyNkZWZpbmUgRjA5MDBfTkJJVEVSX05GXzhQXzlfMTAgIDB4ZmExMDAwZmYKKworLypOQklURVJOT0VSUiovCisjZGVmaW5lIFIwOTAwX05CSVRFUk5PRVJSICAweGZhM2YKKyNkZWZpbmUgRjA5MDBfTkJJVEVSX1NUT1BfQ1JJVCAgMHhmYTNmMDAwZgorCisvKkdBSU5MTFJfTkY0Ki8KKyNkZWZpbmUgUjA5MDBfR0FJTkxMUl9ORjQgIDB4ZmE0MworI2RlZmluZSBGMDkwMF9HQUlOTExSX05GX1FQXzFfMiAgMHhmYTQzMDA3ZgorCisvKkdBSU5MTFJfTkY1Ki8KKyNkZWZpbmUgUjA5MDBfR0FJTkxMUl9ORjUgIDB4ZmE0NAorI2RlZmluZSBGMDkwMF9HQUlOTExSX05GX1FQXzNfNSAgMHhmYTQ0MDA3ZgorCisvKkdBSU5MTFJfTkY2Ki8KKyNkZWZpbmUgUjA5MDBfR0FJTkxMUl9ORjYgIDB4ZmE0NQorI2RlZmluZSBGMDkwMF9HQUlOTExSX05GX1FQXzJfMyAgMHhmYTQ1MDA3ZgorCisvKkdBSU5MTFJfTkY3Ki8KKyNkZWZpbmUgUjA5MDBfR0FJTkxMUl9ORjcgIDB4ZmE0NgorI2RlZmluZSBGMDkwMF9HQUlOTExSX05GX1FQXzNfNCAgMHhmYTQ2MDA3ZgorCisvKkdBSU5MTFJfTkY4Ki8KKyNkZWZpbmUgUjA5MDBfR0FJTkxMUl9ORjggIDB4ZmE0NworI2RlZmluZSBGMDkwMF9HQUlOTExSX05GX1FQXzRfNSAgMHhmYTQ3MDA3ZgorCisvKkdBSU5MTFJfTkY5Ki8KKyNkZWZpbmUgUjA5MDBfR0FJTkxMUl9ORjkgIDB4ZmE0OAorI2RlZmluZSBGMDkwMF9HQUlOTExSX05GX1FQXzVfNiAgMHhmYTQ4MDA3ZgorCisvKkdBSU5MTFJfTkYxMCovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkYxMCAgMHhmYTQ5CisjZGVmaW5lIEYwOTAwX0dBSU5MTFJfTkZfUVBfOF85ICAweGZhNDkwMDdmCisKKy8qR0FJTkxMUl9ORjExKi8KKyNkZWZpbmUgUjA5MDBfR0FJTkxMUl9ORjExICAweGZhNGEKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl9RUF85XzEwICAweGZhNGEwMDdmCisKKy8qR0FJTkxMUl9ORjEyKi8KKyNkZWZpbmUgUjA5MDBfR0FJTkxMUl9ORjEyICAweGZhNGIKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl84UF8zXzUgIDB4ZmE0YjAwN2YKKworLypHQUlOTExSX05GMTMqLworI2RlZmluZSBSMDkwMF9HQUlOTExSX05GMTMgIDB4ZmE0YworI2RlZmluZSBGMDkwMF9HQUlOTExSX05GXzhQXzJfMyAgMHhmYTRjMDA3ZgorCisvKkdBSU5MTFJfTkYxNCovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkYxNCAgMHhmYTRkCisjZGVmaW5lIEYwOTAwX0dBSU5MTFJfTkZfOFBfM180ICAweGZhNGQwMDdmCisKKy8qR0FJTkxMUl9ORjE1Ki8KKyNkZWZpbmUgUjA5MDBfR0FJTkxMUl9ORjE1ICAweGZhNGUKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl84UF81XzYgIDB4ZmE0ZTAwN2YKKworLypHQUlOTExSX05GMTYqLworI2RlZmluZSBSMDkwMF9HQUlOTExSX05GMTYgIDB4ZmE0ZgorI2RlZmluZSBGMDkwMF9HQUlOTExSX05GXzhQXzhfOSAgMHhmYTRmMDA3ZgorCisvKkdBSU5MTFJfTkYxNyovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkYxNyAgMHhmYTUwCisjZGVmaW5lIEYwOTAwX0dBSU5MTFJfTkZfOFBfOV8xMCAgMHhmYTUwMDA3ZgorCisvKkNGR0VYVCovCisjZGVmaW5lIFIwOTAwX0NGR0VYVCAgMHhmYTgwCisjZGVmaW5lIEYwOTAwX1NUQUdNT0RFICAweGZhODAwMDgwCisjZGVmaW5lIEYwOTAwX0JZUEJDSCAgMHhmYTgwMDA0MAorI2RlZmluZSBGMDkwMF9CWVBMRFBDICAweGZhODAwMDIwCisjZGVmaW5lIEYwOTAwX0xEUENNT0RFICAweGZhODAwMDEwCisjZGVmaW5lIEYwOTAwX0lOVkxMUlNJR04gIDB4ZmE4MDAwMDgKKyNkZWZpbmUgRjA5MDBfU0hPUlRNVUxUICAweGZhODAwMDA0CisjZGVmaW5lIEYwOTAwX0VYVEVSTlRYICAweGZhODAwMDAxCisKKy8qR0VOQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfR0VOQ0ZHICAweGZhODYKKyNkZWZpbmUgRjA5MDBfQlJPQURDQVNUICAweGZhODYwMDEwCisjZGVmaW5lIEYwOTAwX05PU0hGUkQyICAweGZhODYwMDA4CisjZGVmaW5lIEYwOTAwX0JDSEVSUkZMQUcgIDB4ZmE4NjAwMDQKKyNkZWZpbmUgRjA5MDBfUFJJT1JJVFkgIDB4ZmE4NjAwMDIKKyNkZWZpbmUgRjA5MDBfRERFTU9EICAweGZhODYwMDAxCisKKy8qTERQQ0VSUjEqLworI2RlZmluZSBSMDkwMF9MRFBDRVJSMSAgMHhmYTk2CisjZGVmaW5lIEYwOTAwX0xEUENfRVJST1JTX0NPVU5URVIxICAweGZhOTYwMGZmCisKKy8qTERQQ0VSUjAqLworI2RlZmluZSBSMDkwMF9MRFBDRVJSMCAgMHhmYTk3CisjZGVmaW5lIEYwOTAwX0xEUENfRVJST1JTX0NPVU5URVIwICAweGZhOTcwMGZmCisKKy8qQkNIRVJSKi8KKyNkZWZpbmUgUjA5MDBfQkNIRVJSICAweGZhOTgKKyNkZWZpbmUgRjA5MDBfRVJST1JGTEFHICAweGZhOTgwMDEwCisjZGVmaW5lIEYwOTAwX0JDSF9FUlJPUlNfQ09VTlRFUiAgMHhmYTk4MDAwZgorCisvKlRTVFJFUzAqLworI2RlZmluZSBSMDkwMF9UU1RSRVMwICAweGZmMTEKKyNkZWZpbmUgRjA5MDBfRlJFU0ZFQyAgMHhmZjExMDA4MAorI2RlZmluZSBGMDkwMF9GUkVTVFMgIDB4ZmYxMTAwNDAKKyNkZWZpbmUgRjA5MDBfRlJFU1ZJVDEgIDB4ZmYxMTAwMjAKKyNkZWZpbmUgRjA5MDBfRlJFU1ZJVDIgIDB4ZmYxMTAwMTAKKyNkZWZpbmUgRjA5MDBfRlJFU1NZTTEgIDB4ZmYxMTAwMDgKKyNkZWZpbmUgRjA5MDBfRlJFU1NZTTIgIDB4ZmYxMTAwMDQKKyNkZWZpbmUgRjA5MDBfRlJFU01BUyAgMHhmZjExMDAwMgorI2RlZmluZSBGMDkwMF9GUkVTSU5UICAweGZmMTEwMDAxCisKKy8qUDJfVFNURElTUlgqLworI2RlZmluZSBSMDkwMF9QMl9UU1RESVNSWCAgMHhmZjY1CisjZGVmaW5lIEYwOTAwX1AyX0VOX0RJU1JYICAweGZmNjUwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1RTVF9DVVJSU1JDICAweGZmNjUwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0lOX0RJR1NJR05BTCAgMHhmZjY1MDAyMAorI2RlZmluZSBGMDkwMF9QMl9ISVpfQ1VSUkVOVFNSQyAgMHhmZjY1MDAxMAorI2RlZmluZSBGMDkwMF9UU1RfUDJfUElOX1NFTEVDVCAgMHhmZjY1MDAwOAorI2RlZmluZSBGMDkwMF9QMl9UU1RfRElTUlggIDB4ZmY2NTAwMDcKKworLypQMV9UU1RESVNSWCovCisjZGVmaW5lIFIwOTAwX1AxX1RTVERJU1JYICAweGZmNjcKKyNkZWZpbmUgRjA5MDBfUDFfRU5fRElTUlggIDB4ZmY2NzAwODAKKyNkZWZpbmUgRjA5MDBfUDFfVFNUX0NVUlJTUkMgIDB4ZmY2NzAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfSU5fRElHU0lHTkFMICAweGZmNjcwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0hJWl9DVVJSRU5UU1JDICAweGZmNjcwMDEwCisjZGVmaW5lIEYwOTAwX1RTVF9QMV9QSU5fU0VMRUNUICAweGZmNjcwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1RTVF9ESVNSWCAgMHhmZjY3MDAwNworCisjZGVmaW5lIFNUVjA5MDBfTkJSRUdTCQk2ODQKKyNkZWZpbmUgU1RWMDkwMF9OQkZJRUxEUwkJMTcwMgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfc3cuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3N3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVhMzE1MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3N3LmMKQEAgLTAsMCArMSwyODQ3IEBACisvKgorICogc3R2MDkwMF9zdy5jCisgKgorICogRHJpdmVyIGZvciBTVCBTVFYwOTAwIHNhdGVsbGl0ZSBkZW1vZHVsYXRvciBJQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIFNUIE1pY3JvZWxlY3Ryb25pY3MuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbmV0dXAucnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJzdHYwOTAwLmgiCisjaW5jbHVkZSAic3R2MDkwMF9yZWcuaCIKKyNpbmNsdWRlICJzdHYwOTAwX3ByaXYuaCIKKworaW50IHN0djA5MDBfY2hlY2tfc2lnbmFsX3ByZXNlbmNlKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzMzIgY2Fycl9vZmZzZXQsCisJYWdjMl9pbnRlZ3IsCisJbWF4X2NhcnJpZXI7CisKKwlpbnQgbm9fc2lnbmFsOworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCWNhcnJfb2Zmc2V0ID0gKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUjIpIDw8IDgpCisJCQkJCQl8IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsCisJCQkJCQlSMDkwMF9QMV9DRlIxKTsKKwkJY2Fycl9vZmZzZXQgPSBnZTJjb21wKGNhcnJfb2Zmc2V0LCAxNik7CisJCWFnYzJfaW50ZWdyID0gKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJJMSkgPDwgOCkKKwkJCQkJCXwgc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywKKwkJCQkJCVIwOTAwX1AxX0FHQzJJMCk7CisJCW1heF9jYXJyaWVyID0gaV9wYXJhbXMtPmRtZDFfc3JjaF9yYW5nZSAvIDEwMDA7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQljYXJyX29mZnNldCA9IChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlIyKSA8PCA4KQorCQkJCQkJfCBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLAorCQkJCQkJUjA5MDBfUDJfQ0ZSMSk7CisJCWNhcnJfb2Zmc2V0ID0gZ2UyY29tcChjYXJyX29mZnNldCwgMTYpOworCQlhZ2MyX2ludGVnciA9IChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BR0MySTEpIDw8IDgpCisJCQkJCQl8IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsCisJCQkJCQlSMDkwMF9QMl9BR0MySTApOworCQltYXhfY2FycmllciA9IGlfcGFyYW1zLT5kbWQyX3NyY2hfcmFuZ2UgLyAxMDAwOworCQlicmVhazsKKwl9CisKKwltYXhfY2FycmllciArPSAobWF4X2NhcnJpZXIgLyAxMCk7CisJbWF4X2NhcnJpZXIgPSA2NTUzNiAqIChtYXhfY2FycmllciAvIDIpOworCW1heF9jYXJyaWVyIC89IGlfcGFyYW1zLT5tY2xrIC8gMTAwMDsKKwlpZiAobWF4X2NhcnJpZXIgPiAweDQwMDApCisJCW1heF9jYXJyaWVyID0gMHg0MDAwOworCisJaWYgKChhZ2MyX2ludGVnciA+IDB4MjAwMCkKKwkJCXx8IChjYXJyX29mZnNldCA+ICsgMiptYXhfY2FycmllcikKKwkJCXx8IChjYXJyX29mZnNldCA8IC0yKm1heF9jYXJyaWVyKSkKKwkJbm9fc2lnbmFsID0gVFJVRTsKKwllbHNlCisJCW5vX3NpZ25hbCA9IEZBTFNFOworCisJcmV0dXJuIG5vX3NpZ25hbDsKK30KKworc3RhdGljIHZvaWQgc3R2MDkwMF9nZXRfc3dfbG9vcF9wYXJhbXMoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCXMzMiAqZnJlcXVlbmN5X2luYywgczMyICpzd190aW1lb3V0LAorCQkJCXMzMiAqc3RlcHMsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzMzIgdGltZW91dCwgZnJlcV9pbmMsIG1heF9zdGVwcywgc3JhdGUsIG1heF9jYXJyaWVyOworCisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9zdGFuZGFyZAlzdGFuZGFyZDsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlzcmF0ZSA9IGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlOworCQltYXhfY2FycmllciA9IGlfcGFyYW1zLT5kbWQxX3NyY2hfcmFuZ2UgLyAxMDAwOworCQltYXhfY2FycmllciArPSBtYXhfY2FycmllciAvIDEwOworCQlzdGFuZGFyZCA9IGlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQ7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlzcmF0ZSA9IGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlOworCQltYXhfY2FycmllciA9IGlfcGFyYW1zLT5kbWQyX3NyY2hfcmFuZ2UgLyAxMDAwOworCQltYXhfY2FycmllciArPSBtYXhfY2FycmllciAvIDEwOworCQlzdGFuZGFyZCA9IGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkOworCQlicmVhazsKKwl9CisKKwltYXhfY2FycmllciA9IDY1NTM2ICogKG1heF9jYXJyaWVyIC8gMik7CisJbWF4X2NhcnJpZXIgLz0gaV9wYXJhbXMtPm1jbGsgLyAxMDAwOworCisJaWYgKG1heF9jYXJyaWVyID4gMHg0MDAwKQorCQltYXhfY2FycmllciA9IDB4NDAwMDsKKworCWZyZXFfaW5jID0gc3JhdGU7CisJZnJlcV9pbmMgLz0gaV9wYXJhbXMtPm1jbGsgPj4gMTA7CisJZnJlcV9pbmMgPSBmcmVxX2luYyA8PCA2OworCisJc3dpdGNoIChzdGFuZGFyZCkgeworCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFZCUzE6CisJY2FzZSBTVFYwOTAwX1NFQVJDSF9EU1M6CisJCWZyZXFfaW5jICo9IDM7CisJCXRpbWVvdXQgPSAyMDsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX1NFQVJDSF9EVkJTMjoKKwkJZnJlcV9pbmMgKj0gNDsKKwkJdGltZW91dCA9IDI1OworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfQVVUT19TRUFSQ0g6CisJZGVmYXVsdDoKKwkJZnJlcV9pbmMgKj0gMzsKKwkJdGltZW91dCA9IDI1OworCQlicmVhazsKKwl9CisKKwlmcmVxX2luYyAvPSAxMDA7CisKKwlpZiAoKGZyZXFfaW5jID4gbWF4X2NhcnJpZXIpIHx8IChmcmVxX2luYyA8IDApKQorCQlmcmVxX2luYyA9IG1heF9jYXJyaWVyIC8gMjsKKworCXRpbWVvdXQgKj0gMjc1MDA7CisKKwlpZiAoc3JhdGUgPiAwKQorCQl0aW1lb3V0IC89IHNyYXRlIC8gMTAwMDsKKworCWlmICgodGltZW91dCA+IDEwMCkgfHwgKHRpbWVvdXQgPCAwKSkKKwkJdGltZW91dCA9IDEwMDsKKworCW1heF9zdGVwcyA9IChtYXhfY2FycmllciAvIGZyZXFfaW5jKSArIDE7CisKKwlpZiAoKG1heF9zdGVwcyA+IDEwMCkgfHwgKG1heF9zdGVwcyA8IDApKSB7CisJCW1heF9zdGVwcyA9ICAxMDA7CisJCWZyZXFfaW5jID0gbWF4X2NhcnJpZXIgLyBtYXhfc3RlcHM7CisJfQorCisJKmZyZXF1ZW5jeV9pbmMgPSBmcmVxX2luYzsKKwkqc3dfdGltZW91dCA9IHRpbWVvdXQ7CisJKnN0ZXBzID0gbWF4X3N0ZXBzOworCit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9zZWFyY2hfY2Fycl9zd19sb29wKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQlzMzIgRnJlcUluY3IsIHMzMiBUaW1lb3V0LCBpbnQgemlnemFnLAorCQkJCXMzMiBNYXhTdGVwLCBlbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCWludAlub19zaWduYWwsCisJCWxvY2sgPSBGQUxTRTsKKwlzMzIJc3RlcENwdCwKKwkJZnJlcU9mZnNldCwKKwkJbWF4X2NhcnJpZXI7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJbWF4X2NhcnJpZXIgPSBpX3BhcmFtcy0+ZG1kMV9zcmNoX3JhbmdlIC8gMTAwMDsKKwkJbWF4X2NhcnJpZXIgKz0gKG1heF9jYXJyaWVyIC8gMTApOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJbWF4X2NhcnJpZXIgPSBpX3BhcmFtcy0+ZG1kMl9zcmNoX3JhbmdlIC8gMTAwMDsKKwkJbWF4X2NhcnJpZXIgKz0gKG1heF9jYXJyaWVyIC8gMTApOworCQlicmVhazsKKwl9CisKKwltYXhfY2FycmllciA9IDY1NTM2ICogKG1heF9jYXJyaWVyIC8gMik7CisJbWF4X2NhcnJpZXIgLz0gaV9wYXJhbXMtPm1jbGsgLyAxMDAwOworCisJaWYgKG1heF9jYXJyaWVyID4gMHg0MDAwKQorCQltYXhfY2FycmllciA9IDB4NDAwMDsKKworCWlmICh6aWd6YWcgPT0gVFJVRSkKKwkJZnJlcU9mZnNldCA9IDA7CisJZWxzZQorCQlmcmVxT2Zmc2V0ID0gLW1heF9jYXJyaWVyICsgRnJlcUluY3I7CisKKwlzdGVwQ3B0ID0gMDsKKworCWRvIHsKKwkJc3dpdGNoIChkZW1vZCkgeworCQljYXNlIFNUVjA5MDBfREVNT0RfMToKKwkJZGVmYXVsdDoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MUMpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQxLAorCQkJCQkoZnJlcU9mZnNldCAvIDI1NikgJiAweEZGKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMCwKKwkJCQkJIGZyZXFPZmZzZXQgJiAweEZGKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MTgpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9BTEdPU1dSU1QsIDEpOworCisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPT0gMHgxMikgeworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywKKwkJCQkJCUYwOTAwX1AxX1JTVF9IV0FSRSwgMSk7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLAorCQkJCQkJRjA5MDBfUDFfUlNUX0hXQVJFLCAwKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MUMpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQxLAorCQkJCQkoZnJlcU9mZnNldCAvIDI1NikgJiAweEZGKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMCwKKwkJCQkJZnJlcU9mZnNldCAmIDB4RkYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxOCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0FMR09TV1JTVCwgMSk7CisKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA9PSAweDEyKSB7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLAorCQkJCQkJRjA5MDBfUDJfUlNUX0hXQVJFLCAxKTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsCisJCQkJCQlGMDkwMF9QMl9SU1RfSFdBUkUsIDApOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQlpZiAoemlnemFnID09IFRSVUUpIHsKKwkJCWlmIChmcmVxT2Zmc2V0ID49IDApCisJCQkJZnJlcU9mZnNldCA9IC1mcmVxT2Zmc2V0IC0gMiAqIEZyZXFJbmNyOworCQkJZWxzZQorCQkJCWZyZXFPZmZzZXQgPSAtZnJlcU9mZnNldDsKKwkJfSBlbHNlCisJCQlmcmVxT2Zmc2V0ICs9ICsgMiAqIEZyZXFJbmNyOworCisJCXN0ZXBDcHQrKzsKKwkJbG9jayA9IHN0djA5MDBfZ2V0X2RlbW9kX2xvY2soaV9wYXJhbXMsIGRlbW9kLCBUaW1lb3V0KTsKKwkJbm9fc2lnbmFsID0gc3R2MDkwMF9jaGVja19zaWduYWxfcHJlc2VuY2UoaV9wYXJhbXMsIGRlbW9kKTsKKworCX0gd2hpbGUgKChsb2NrID09IEZBTFNFKQorCQkJJiYgKG5vX3NpZ25hbCA9PSBGQUxTRSkKKwkJCSYmICgoZnJlcU9mZnNldCAtIEZyZXFJbmNyKSA8ICBtYXhfY2FycmllcikKKwkJCSYmICgoZnJlcU9mZnNldCArIEZyZXFJbmNyKSA+IC1tYXhfY2FycmllcikKKwkJCSYmIChzdGVwQ3B0IDwgTWF4U3RlcCkpOworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfQUxHT1NXUlNULCAwKTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfQUxHT1NXUlNULCAwKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGxvY2s7Cit9CisKK2ludCBzdHYwOTAwX3N3X2FsZ28oc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJaW50IGxvY2sgPSBGQUxTRTsKKworCWludCBub19zaWduYWwsCisJemlnemFnOworCXMzMiBkdmJzMl9mbHlfd2hlZWw7CisKKwlzMzIgZnJlcUluY3JlbWVudCwgc29mdFN0ZXBUaW1lb3V0LCB0cmlhbENvdW50ZXIsIG1heF9zdGVwczsKKworCXN0djA5MDBfZ2V0X3N3X2xvb3BfcGFyYW1zKGlfcGFyYW1zLCAmZnJlcUluY3JlbWVudCwgJnNvZnRTdGVwVGltZW91dCwKKwkJCQkJJm1heF9zdGVwcywgZGVtb2QpOworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlzd2l0Y2ggKGlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQpIHsKKwkJY2FzZSBTVFYwOTAwX1NFQVJDSF9EVkJTMToKKwkJY2FzZSBTVFYwOTAwX1NFQVJDSF9EU1M6CisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwKKwkJCQkJCTB4M0IpOworCQkJZWxzZQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLAorCQkJCQkJMHhlZik7CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURDRkdNRCwgMHg0OSk7CisJCQl6aWd6YWcgPSBGQUxTRTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMyOgorCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTEFCUywKKwkJCQkJCTB4NzkpOworCQkJZWxzZQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DT1JSRUxBQlMsCisJCQkJCQkweDY4KTsKKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRENGR01ELAorCQkJCQkJMHg4OSk7CisKKwkJCXppZ3phZyA9IFRSVUU7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0FVVE9fU0VBUkNIOgorCQlkZWZhdWx0OgorCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwKKwkJCQkJCQkweDNCKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ09SUkVMQUJTLAorCQkJCQkJCTB4NzkpOworCQkJfSBlbHNlIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwKKwkJCQkJCQkweGVmKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ09SUkVMQUJTLAorCQkJCQkJCTB4NjgpOworCQkJfQorCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1EQ0ZHTUQsCisJCQkJCQkJMHhjOSk7CisJCQl6aWd6YWcgPSBGQUxTRTsKKwkJCWJyZWFrOworCQl9CisKKwkJdHJpYWxDb3VudGVyID0gMDsKKwkJZG8geworCQkJbG9jayA9IHN0djA5MDBfc2VhcmNoX2NhcnJfc3dfbG9vcChpX3BhcmFtcywKKwkJCQkJCQlmcmVxSW5jcmVtZW50LAorCQkJCQkJCXNvZnRTdGVwVGltZW91dCwKKwkJCQkJCQl6aWd6YWcsCisJCQkJCQkJbWF4X3N0ZXBzLAorCQkJCQkJCWRlbW9kKTsKKwkJCW5vX3NpZ25hbCA9IHN0djA5MDBfY2hlY2tfc2lnbmFsX3ByZXNlbmNlKGlfcGFyYW1zLAorCQkJCQkJCQlkZW1vZCk7CisJCQl0cmlhbENvdW50ZXIrKzsKKwkJCWlmICgobG9jayA9PSBUUlVFKQorCQkJCQl8fCAobm9fc2lnbmFsID09IFRSVUUpCisJCQkJCXx8ICh0cmlhbENvdW50ZXIgPT0gMikpIHsKKworCQkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLAorCQkJCQkJCVIwOTAwX1AxX0NBUkZSRVEsCisJCQkJCQkJMHg0OSk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLAorCQkJCQkJCVIwOTAwX1AxX0NPUlJFTEFCUywKKwkJCQkJCQkweDllKTsKKwkJCQl9IGVsc2UgeworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywKKwkJCQkJCQlSMDkwMF9QMV9DQVJGUkVRLAorCQkJCQkJCTB4ZWQpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywKKwkJCQkJCQlSMDkwMF9QMV9DT1JSRUxBQlMsCisJCQkJCQkJMHg4OCk7CisJCQkJfQorCisJCQkJaWYgKChsb2NrID09IFRSVUUpICYmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9IRUFERVJfTU9ERSkgPT0gU1RWMDkwMF9EVkJTMl9GT1VORCkpIHsKKwkJCQkJbXNsZWVwKHNvZnRTdGVwVGltZW91dCk7CisJCQkJCWR2YnMyX2ZseV93aGVlbCA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0ZMWVdIRUVMX0NQVCk7CisKKwkJCQkJaWYgKGR2YnMyX2ZseV93aGVlbCA8IDB4ZCkgeworCQkJCQkJbXNsZWVwKHNvZnRTdGVwVGltZW91dCk7CisJCQkJCQlkdmJzMl9mbHlfd2hlZWwgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9GTFlXSEVFTF9DUFQpOworCQkJCQl9CisKKwkJCQkJaWYgKGR2YnMyX2ZseV93aGVlbCA8IDB4ZCkgeworCQkJCQkJbG9jayA9IEZBTFNFOworCisJCQkJCQlpZiAodHJpYWxDb3VudGVyIDwgMikgeworCQkJCQkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKQorCQkJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ09SUkVMQUJTLCAweDc5KTsKKwkJCQkJCQllbHNlCisJCQkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DT1JSRUxBQlMsIDB4NjgpOworCisJCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRENGR01ELCAweDg5KTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQl9IHdoaWxlICgobG9jayA9PSBGQUxTRSkKKwkJCSYmICh0cmlhbENvdW50ZXIgPCAyKQorCQkJJiYgKG5vX3NpZ25hbCA9PSBGQUxTRSkpOworCisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlzd2l0Y2ggKGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkKSB7CisJCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFZCUzE6CisJCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFNTOgorCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsCisJCQkJCQkweDNiKTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwKKwkJCQkJCTB4ZWYpOworCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1EQ0ZHTUQsCisJCQkJCQkweDQ5KTsKKwkJCXppZ3phZyA9IEZBTFNFOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFZCUzI6CisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ09SUkVMQUJTLAorCQkJCQkJMHg3OSk7CisJCQllbHNlCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NPUlJFTEFCUywKKwkJCQkJCTB4NjgpOworCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1EQ0ZHTUQsIDB4ODkpOworCQkJemlnemFnID0gVFJVRTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfQVVUT19TRUFSQ0g6CisJCWRlZmF1bHQ6CisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRLAorCQkJCQkJMHgzYik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NPUlJFTEFCUywKKwkJCQkJCTB4NzkpOworCQkJfSBlbHNlIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwKKwkJCQkJCTB4ZWYpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DT1JSRUxBQlMsCisJCQkJCQkweDY4KTsKKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRENGR01ELCAweGM5KTsKKworCQkJemlnemFnID0gRkFMU0U7CisJCQlicmVhazsKKwkJfQorCisJCXRyaWFsQ291bnRlciA9IDA7CisKKwkJZG8geworCQkJbG9jayA9IHN0djA5MDBfc2VhcmNoX2NhcnJfc3dfbG9vcChpX3BhcmFtcywKKwkJCQkJCQlmcmVxSW5jcmVtZW50LAorCQkJCQkJCXNvZnRTdGVwVGltZW91dCwKKwkJCQkJCQl6aWd6YWcsCisJCQkJCQkJbWF4X3N0ZXBzLAorCQkJCQkJCWRlbW9kKTsKKwkJCW5vX3NpZ25hbCA9IHN0djA5MDBfY2hlY2tfc2lnbmFsX3ByZXNlbmNlKGlfcGFyYW1zLAorCQkJCQkJCQlkZW1vZCk7CisJCQl0cmlhbENvdW50ZXIrKzsKKwkJCWlmICgobG9jayA9PSBUUlVFKQorCQkJCQl8fCAobm9fc2lnbmFsID09IFRSVUUpCisJCQkJCXx8ICh0cmlhbENvdW50ZXIgPT0gMikpIHsKKwkJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywKKwkJCQkJCQlSMDkwMF9QMl9DQVJGUkVRLAorCQkJCQkJCTB4NDkpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywKKwkJCQkJCQlSMDkwMF9QMl9DT1JSRUxBQlMsCisJCQkJCQkJMHg5ZSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCQkJUjA5MDBfUDJfQ0FSRlJFUSwKKwkJCQkJCQkweGVkKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCQkJUjA5MDBfUDJfQ09SUkVMQUJTLAorCQkJCQkJCTB4ODgpOworCQkJCX0KKworCQkJCWlmICgobG9jayA9PSBUUlVFKSAmJiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfSEVBREVSX01PREUpID09IFNUVjA5MDBfRFZCUzJfRk9VTkQpKSB7CisJCQkJCW1zbGVlcChzb2Z0U3RlcFRpbWVvdXQpOworCQkJCQlkdmJzMl9mbHlfd2hlZWwgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9GTFlXSEVFTF9DUFQpOworCQkJCQlpZiAoZHZiczJfZmx5X3doZWVsIDwgMHhkKSB7CisJCQkJCQltc2xlZXAoc29mdFN0ZXBUaW1lb3V0KTsKKwkJCQkJCWR2YnMyX2ZseV93aGVlbCA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0ZMWVdIRUVMX0NQVCk7CisJCQkJCX0KKworCQkJCQlpZiAoZHZiczJfZmx5X3doZWVsIDwgMHhkKSB7CisJCQkJCQlsb2NrID0gRkFMU0U7CisJCQkJCQlpZiAodHJpYWxDb3VudGVyIDwgMikgeworCQkJCQkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKQorCQkJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ09SUkVMQUJTLCAweDc5KTsKKwkJCQkJCQllbHNlCisJCQkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DT1JSRUxBQlMsIDB4NjgpOworCisJCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRENGR01ELCAweDg5KTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQl9IHdoaWxlICgobG9jayA9PSBGQUxTRSkgJiYgKHRyaWFsQ291bnRlciA8IDIpICYmIChub19zaWduYWwgPT0gRkFMU0UpKTsKKworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbG9jazsKK30KKworc3RhdGljIHUzMiBzdHYwOTAwX2dldF9zeW1ib2xfcmF0ZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCXUzMiBtY2xrLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXMzMiBzZnJfZmllbGQzLCBzZnJfZmllbGQyLCBzZnJfZmllbGQxLCBzZnJfZmllbGQwLAorCXJlbTEsIHJlbTIsIGludHZhbDEsIGludHZhbDIsIHNyYXRlOworCisJZG1kX3JlZyhzZnJfZmllbGQzLCBGMDkwMF9QMV9TWU1CX0ZSRVEzLCBGMDkwMF9QMl9TWU1CX0ZSRVEzKTsKKwlkbWRfcmVnKHNmcl9maWVsZDIsIEYwOTAwX1AxX1NZTUJfRlJFUTIsIEYwOTAwX1AyX1NZTUJfRlJFUTIpOworCWRtZF9yZWcoc2ZyX2ZpZWxkMSwgRjA5MDBfUDFfU1lNQl9GUkVRMSwgRjA5MDBfUDJfU1lNQl9GUkVRMSk7CisJZG1kX3JlZyhzZnJfZmllbGQwLCBGMDkwMF9QMV9TWU1CX0ZSRVEwLCBGMDkwMF9QMl9TWU1CX0ZSRVEwKTsKKworCXNyYXRlID0gKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHNmcl9maWVsZDMpIDw8IDI0KSArCisJCShzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBzZnJfZmllbGQyKSA8PCAxNikgKworCQkoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgc2ZyX2ZpZWxkMSkgPDwgOCkgKworCQkoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgc2ZyX2ZpZWxkMCkpOworCWRwcmludGsoImxvY2s6IHNyYXRlPSVkIHIwPTB4JXggcjE9MHgleCByMj0weCV4IHIzPTB4JXggXG4iLAorCQlzcmF0ZSwgc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgc2ZyX2ZpZWxkMCksCisJCXN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHNmcl9maWVsZDEpLAorCQlzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBzZnJfZmllbGQyKSwKKwkJc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgc2ZyX2ZpZWxkMykpOworCisJaW50dmFsMSA9IChtY2xrKSA+PiAxNjsKKwlpbnR2YWwyID0gKHNyYXRlKSA+PiAxNjsKKworCXJlbTEgPSAobWNsaykgJSAweDEwMDAwOworCXJlbTIgPSAoc3JhdGUpICUgMHgxMDAwMDsKKwlzcmF0ZSA9CShpbnR2YWwxICogaW50dmFsMikgKworCQkoKGludHZhbDEgKiByZW0yKSA+PiAxNikgKworCQkoKGludHZhbDIgKiByZW0xKSA+PiAxNik7CisKKwlyZXR1cm4gc3JhdGU7Cit9CisKK3N0YXRpYyB2b2lkIHN0djA5MDBfc2V0X3N5bWJvbF9yYXRlKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJdTMyIG1jbGssIHUzMiBzcmF0ZSwKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzMzIgc2ZyX2luaXRfcmVnOworCXUzMiBzeW1iOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzOiBNY2xrICVkLCBTUiAlZCwgRG1kICVkXG4iLCBfX2Z1bmNfXywgbWNsaywKKwkJCQkJCQlzcmF0ZSwgZGVtb2QpOworCisJZG1kX3JlZyhzZnJfaW5pdF9yZWcsIFIwOTAwX1AxX1NGUklOSVQxLCBSMDkwMF9QMl9TRlJJTklUMSk7CisKKwlpZiAoc3JhdGUgPiA2MDAwMDAwMCkgeworCQlzeW1iID0gc3JhdGUgPDwgNDsKKwkJc3ltYiAvPSAobWNsayA+PiAxMik7CisJfSBlbHNlIGlmIChzcmF0ZSA+IDYwMDAwMDApIHsKKwkJc3ltYiA9IHNyYXRlIDw8IDY7CisJCXN5bWIgLz0gKG1jbGsgPj4gMTApOworCX0gZWxzZSB7CisJCXN5bWIgPSBzcmF0ZSA8PCA5OworCQlzeW1iIC89IChtY2xrID4+IDcpOworCX0KKworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBzZnJfaW5pdF9yZWcsIChzeW1iID4+IDgpICYgMHg3Rik7CisJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHNmcl9pbml0X3JlZyArIDEsIChzeW1iICYgMHhGRikpOworfQorCitzdGF0aWMgdm9pZCBzdHYwOTAwX3NldF9tYXhfc3ltYm9sX3JhdGUoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQl1MzIgbWNsaywgdTMyIHNyYXRlLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXMzMiBzZnJfbWF4X3JlZzsKKwl1MzIgc3ltYjsKKworCWRtZF9yZWcoc2ZyX21heF9yZWcsIFIwOTAwX1AxX1NGUlVQMSwgUjA5MDBfUDJfU0ZSVVAxKTsKKworCXNyYXRlID0gMTA1ICogKHNyYXRlIC8gMTAwKTsKKworCWlmIChzcmF0ZSA+IDYwMDAwMDAwKSB7CisJCXN5bWIgPSBzcmF0ZSA8PCA0OworCQlzeW1iIC89IChtY2xrID4+IDEyKTsKKwl9IGVsc2UgaWYgKHNyYXRlID4gNjAwMDAwMCkgeworCQlzeW1iID0gc3JhdGUgPDwgNjsKKwkJc3ltYiAvPSAobWNsayA+PiAxMCk7CisJfSBlbHNlIHsKKwkJc3ltYiA9IHNyYXRlIDw8IDk7CisJCXN5bWIgLz0gKG1jbGsgPj4gNyk7CisJfQorCisJaWYgKHN5bWIgPCAweDdmZmYpIHsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHNmcl9tYXhfcmVnLCAoc3ltYiA+PiA4KSAmIDB4N0YpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgc2ZyX21heF9yZWcgKyAxLCAoc3ltYiAmIDB4RkYpKTsKKwl9IGVsc2UgeworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgc2ZyX21heF9yZWcsIDB4N0YpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgc2ZyX21heF9yZWcgKyAxLCAweEZGKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0djA5MDBfc2V0X21pbl9zeW1ib2xfcmF0ZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCXUzMiBtY2xrLCB1MzIgc3JhdGUsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIHNmcl9taW5fcmVnOworCXUzMglzeW1iOworCisJZG1kX3JlZyhzZnJfbWluX3JlZywgUjA5MDBfUDFfU0ZSTE9XMSwgUjA5MDBfUDJfU0ZSTE9XMSk7CisKKwlzcmF0ZSA9IDk1ICogKHNyYXRlIC8gMTAwKTsKKwlpZiAoc3JhdGUgPiA2MDAwMDAwMCkgeworCQlzeW1iID0gc3JhdGUgPDwgNDsKKwkJc3ltYiAvPSAobWNsayA+PiAxMik7CisKKwl9IGVsc2UgaWYgKHNyYXRlID4gNjAwMDAwMCkgeworCQlzeW1iID0gc3JhdGUgPDwgNjsKKwkJc3ltYiAvPSAobWNsayA+PiAxMCk7CisKKwl9IGVsc2UgeworCQlzeW1iID0gc3JhdGUgPDwgOTsKKwkJc3ltYiAvPSAobWNsayA+PiA3KTsKKwl9CisKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgc2ZyX21pbl9yZWcsIChzeW1iID4+IDgpICYgMHhGRik7CisJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHNmcl9taW5fcmVnICsgMSwgKHN5bWIgJiAweEZGKSk7Cit9CisKK3N0YXRpYyBzMzIgc3R2MDkwMF9nZXRfdGltaW5nX29mZnN0KHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJdTMyIHNyYXRlLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXMzMiB0bWdyZWcsCisJdGltaW5nb2Zmc2V0OworCisJZG1kX3JlZyh0bWdyZWcsIFIwOTAwX1AxX1RNR1JFRzIsIFIwOTAwX1AyX1RNR1JFRzIpOworCisJdGltaW5nb2Zmc2V0ID0gKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIHRtZ3JlZykgPDwgMTYpICsKKwkJICAgICAgIChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCB0bWdyZWcgKyAxKSA8PCA4KSArCisJCSAgICAgICAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgdG1ncmVnICsgMikpOworCisJdGltaW5nb2Zmc2V0ID0gZ2UyY29tcCh0aW1pbmdvZmZzZXQsIDI0KTsKKworCisJaWYgKHRpbWluZ29mZnNldCA9PSAwKQorCQl0aW1pbmdvZmZzZXQgPSAxOworCisJdGltaW5nb2Zmc2V0ID0gKChzMzIpc3JhdGUgKiAxMCkgLyAoKHMzMikweDEwMDAwMDAgLyB0aW1pbmdvZmZzZXQpOworCXRpbWluZ29mZnNldCAvPSAzMjA7CisKKwlyZXR1cm4gdGltaW5nb2Zmc2V0OworfQorCitzdGF0aWMgdm9pZCBzdHYwOTAwX3NldF9kdmJzMl9yb2xsb2ZmKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzMzIgcm9sbG9mZiwgbWFuX2ZsZCwgbWF0c3RyX3JlZywgcm9sbG9mZl9jdGxfZmxkOworCisJZG1kX3JlZyhtYW5fZmxkLCBGMDkwMF9QMV9NQU5VQUxfUk9MTE9GRiwgRjA5MDBfUDJfTUFOVUFMX1JPTExPRkYpOworCWRtZF9yZWcobWF0c3RyX3JlZywgUjA5MDBfUDFfTUFUU1RSMSwgUjA5MDBfUDJfTUFUU1RSMSk7CisJZG1kX3JlZyhyb2xsb2ZmX2N0bF9mbGQsIEYwOTAwX1AxX1JPTExPRkZfQ09OVFJPTCwKKwkJCQlGMDkwMF9QMl9ST0xMT0ZGX0NPTlRST0wpOworCisJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID09IDB4MTApIHsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBtYW5fZmxkLCAxKTsKKwkJcm9sbG9mZiA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIG1hdHN0cl9yZWcpICYgMHgwMzsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCByb2xsb2ZmX2N0bF9mbGQsIHJvbGxvZmYpOworCX0gZWxzZQorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIG1hbl9mbGQsIDApOworfQorCitzdGF0aWMgdTMyIHN0djA5MDBfY2Fycmllcl93aWR0aCh1MzIgc3JhdGUsIGVudW0gZmVfc3R2MDkwMF9yb2xsb2ZmIHJvKQoreworCXUzMiByb2xsb2ZmOworCisJc3dpdGNoIChybykgeworCWNhc2UgU1RWMDkwMF8yMDoKKwkJcm9sbG9mZiA9IDIwOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfMjU6CisJCXJvbGxvZmYgPSAyNTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwXzM1OgorCWRlZmF1bHQ6CisJCXJvbGxvZmYgPSAzNTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHNyYXRlICArIChzcmF0ZSAqIHJvbGxvZmYpIC8gMTAwOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfY2hlY2tfdGltaW5nX2xvY2soc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJaW50IHRpbWluZ0xvY2sgPSBGQUxTRTsKKwlzMzIgaSwKKwl0aW1pbmdjcHQgPSAwOworCXU4IGNhckZyZXEsCisJdG1nVEhoaWdoLAorCXRtZ1RITG93OworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCWNhckZyZXEgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRKTsKKwkJdG1nVEhoaWdoID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HVEhSSVNFKTsKKwkJdG1nVEhMb3cgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdUSEZBTEwpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HVEhSSVNFLCAweDIwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR1RIRkFMTCwgMHgwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9DRlJfQVVUT1NDQU4sIDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfUlRDLCAweDgwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1JUQ1MyLCAweDQwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsIDB4MCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMSwgMHgwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQwLCAweDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUdDMlJFRiwgMHg2NSk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MTgpOworCQltc2xlZXAoNyk7CisKKwkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJCWlmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9UTUdMT0NLX1FVQUxJVFkpID49IDIpCisJCQkJdGltaW5nY3B0Kys7CisKKwkJCW1zbGVlcCgxKTsKKwkJfQorCisJCWlmICh0aW1pbmdjcHQgPj0gMykKKwkJCXRpbWluZ0xvY2sgPSBUUlVFOworCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BR0MyUkVGLCAweDM4KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1JUQywgMHg4OCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9SVENTMiwgMHg2OCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLCBjYXJGcmVxKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR1RIUklTRSwgdG1nVEhoaWdoKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR1RIRkFMTCwgdG1nVEhMb3cpOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJY2FyRnJlcSA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEpOworCQl0bWdUSGhpZ2ggPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdUSFJJU0UpOworCQl0bWdUSExvdyA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR1RIRkFMTCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdUSFJJU0UsIDB4MjApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HVEhGQUxMLCAwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9DRlJfQVVUT1NDQU4sIDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfUlRDLCAweDgwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1JUQ1MyLCAweDQwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsIDB4MCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMSwgMHgwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQwLCAweDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUdDMlJFRiwgMHg2NSk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MTgpOworCQltc2xlZXAoNSk7CisJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQlpZiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfVE1HTE9DS19RVUFMSVRZKSA+PSAyKQorCQkJCXRpbWluZ2NwdCsrOworCisJCQltc2xlZXAoMSk7CisJCX0KKworCQlpZiAodGltaW5nY3B0ID49IDMpCisJCQl0aW1pbmdMb2NrID0gVFJVRTsKKworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUdDMlJFRiwgMHgzOCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9SVEMsIDB4ODgpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfUlRDUzIsIDB4NjgpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwgY2FyRnJlcSk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdUSFJJU0UsIHRtZ1RIaGlnaCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdUSEZBTEwsIHRtZ1RITG93KTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuCXRpbWluZ0xvY2s7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9nZXRfZGVtb2RfY29sZF9sb2NrKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQlzMzIgZGVtb2RfdGltZW91dCkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKworCWludCBsb2NrID0gRkFMU0U7CisJczMyIHNyYXRlLCBzZWFyY2hfcmFuZ2UsIGxvY2t0aW1lb3V0LAorCQljdXJyaWVyX3N0ZXAsIG5iX3N0ZXBzLCBjdXJyZW50X3N0ZXAsCisJCWRpcmVjdGlvbiwgdHVuZXJfZnJlcSwgdGltZW91dDsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlzcmF0ZSA9IGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlOworCQlzZWFyY2hfcmFuZ2UgPSBpX3BhcmFtcy0+ZG1kMV9zcmNoX3JhbmdlOworCQlicmVhazsKKworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlzcmF0ZSA9IGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlOworCQlzZWFyY2hfcmFuZ2UgPSBpX3BhcmFtcy0+ZG1kMl9zcmNoX3JhbmdlOworCQlicmVhazsKKwl9CisKKwlpZiAoc3JhdGUgPj0gMTAwMDAwMDApCisJCWxvY2t0aW1lb3V0ID0gZGVtb2RfdGltZW91dCAvIDM7CisJZWxzZQorCQlsb2NrdGltZW91dCA9IGRlbW9kX3RpbWVvdXQgLyAyOworCisJbG9jayA9IHN0djA5MDBfZ2V0X2RlbW9kX2xvY2soaV9wYXJhbXMsIGRlbW9kLCBsb2NrdGltZW91dCk7CisKKwlpZiAobG9jayA9PSBGQUxTRSkgeworCQlpZiAoc3JhdGUgPj0gMTAwMDAwMDApIHsKKwkJCWlmIChzdHYwOTAwX2NoZWNrX3RpbWluZ19sb2NrKGlfcGFyYW1zLCBkZW1vZCkgPT0gVFJVRSkgeworCQkJCXN3aXRjaCAoZGVtb2QpIHsKKwkJCQljYXNlIFNUVjA5MDBfREVNT0RfMToKKwkJCQlkZWZhdWx0OgorCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDFmKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxNSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDFmKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxNSk7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCWxvY2sgPSBzdHYwOTAwX2dldF9kZW1vZF9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgZGVtb2RfdGltZW91dCk7CisJCQl9IGVsc2UKKwkJCQlsb2NrID0gRkFMU0U7CisJCX0gZWxzZSB7CisJCQlpZiAoc3JhdGUgPD0gNDAwMDAwMCkKKwkJCQljdXJyaWVyX3N0ZXAgPSAxMDAwOworCQkJZWxzZSBpZiAoc3JhdGUgPD0gNzAwMDAwMCkKKwkJCQljdXJyaWVyX3N0ZXAgPSAyMDAwOworCQkJZWxzZSBpZiAoc3JhdGUgPD0gMTAwMDAwMDApCisJCQkJY3Vycmllcl9zdGVwID0gMzAwMDsKKwkJCWVsc2UKKwkJCQljdXJyaWVyX3N0ZXAgPSA1MDAwOworCisJCQluYl9zdGVwcyA9ICgoc2VhcmNoX3JhbmdlIC8gMTAwMCkgLyBjdXJyaWVyX3N0ZXApOworCQkJbmJfc3RlcHMgLz0gMjsKKwkJCW5iX3N0ZXBzID0gKDIgKiAobmJfc3RlcHMgKyAxKSk7CisJCQlpZiAobmJfc3RlcHMgPCAwKQorCQkJCW5iX3N0ZXBzID0gMjsKKwkJCWVsc2UgaWYgKG5iX3N0ZXBzID4gMTIpCisJCQkJbmJfc3RlcHMgPSAxMjsKKworCQkJY3VycmVudF9zdGVwID0gMTsKKwkJCWRpcmVjdGlvbiA9IDE7CisJCQl0aW1lb3V0ID0gKGRlbW9kX3RpbWVvdXQgLyAzKTsKKwkJCWlmICh0aW1lb3V0ID4gMTAwMCkKKwkJCQl0aW1lb3V0ID0gMTAwMDsKKworCQkJc3dpdGNoIChkZW1vZCkgeworCQkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJCQlkZWZhdWx0OgorCQkJCWlmIChsb2NrID09IEZBTFNFKSB7CisJCQkJCXR1bmVyX2ZyZXEgPSBpX3BhcmFtcy0+dHVuZXIxX2ZyZXE7CisJCQkJCWlfcGFyYW1zLT50dW5lcjFfYncgPSBzdHYwOTAwX2NhcnJpZXJfd2lkdGgoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUsIGlfcGFyYW1zLT5yb2xsb2ZmKSArIGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlOworCisJCQkJCXdoaWxlICgoY3VycmVudF9zdGVwIDw9IG5iX3N0ZXBzKSAmJiAobG9jayA9PSBGQUxTRSkpIHsKKworCQkJCQkJaWYgKGRpcmVjdGlvbiA+IDApCisJCQkJCQkJdHVuZXJfZnJlcSArPSAoY3VycmVudF9zdGVwICogY3Vycmllcl9zdGVwKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQl0dW5lcl9mcmVxIC09IChjdXJyZW50X3N0ZXAgKiBjdXJyaWVyX3N0ZXApOworCisJCQkJCQlzdHYwOTAwX3NldF90dW5lcihmZSwgdHVuZXJfZnJlcSwgaV9wYXJhbXMtPnR1bmVyMV9idyk7CisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDFDKTsKKwkJCQkJCWlmIChpX3BhcmFtcy0+ZG1kMV9zcmNoX3N0YW5kYXJkID09IFNUVjA5MDBfU0VBUkNIX0RWQlMyKSB7CisJCQkJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMV9FTkFCTEUsIDApOworCQkJCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzJfRU5BQkxFLCAwKTsKKwkJCQkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMxX0VOQUJMRSwgMSk7CisJCQkJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMl9FTkFCTEUsIDEpOworCQkJCQkJfQorCisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDEsIDApOworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQwLCAwKTsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MUYpOworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxNSk7CisJCQkJCQlsb2NrID0gc3R2MDkwMF9nZXRfZGVtb2RfbG9jayhpX3BhcmFtcywgZGVtb2QsIHRpbWVvdXQpOworCQkJCQkJZGlyZWN0aW9uICo9IC0xOworCQkJCQkJY3VycmVudF9zdGVwKys7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJCQlpZiAobG9jayA9PSBGQUxTRSkgeworCQkJCQl0dW5lcl9mcmVxID0gaV9wYXJhbXMtPnR1bmVyMl9mcmVxOworCQkJCQlpX3BhcmFtcy0+dHVuZXIyX2J3ID0gc3R2MDkwMF9jYXJyaWVyX3dpZHRoKHNyYXRlLCBpX3BhcmFtcy0+cm9sbG9mZikgKyBzcmF0ZTsKKworCQkJCQl3aGlsZSAoKGN1cnJlbnRfc3RlcCA8PSBuYl9zdGVwcykgJiYgKGxvY2sgPT0gRkFMU0UpKSB7CisKKwkJCQkJCWlmIChkaXJlY3Rpb24gPiAwKQorCQkJCQkJCXR1bmVyX2ZyZXEgKz0gKGN1cnJlbnRfc3RlcCAqIGN1cnJpZXJfc3RlcCk7CisJCQkJCQllbHNlCisJCQkJCQkJdHVuZXJfZnJlcSAtPSAoY3VycmVudF9zdGVwICogY3Vycmllcl9zdGVwKTsKKworCQkJCQkJc3R2MDkwMF9zZXRfdHVuZXIoZmUsIHR1bmVyX2ZyZXEsIGlfcGFyYW1zLT50dW5lcjJfYncpOworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxQyk7CisJCQkJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQgPT0gU1RWMDkwMF9TRUFSQ0hfRFZCUzIpIHsKKwkJCQkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMxX0VOQUJMRSwgMCk7CisJCQkJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMl9FTkFCTEUsIDApOworCQkJCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCQkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMyX0VOQUJMRSwgMSk7CisJCQkJCQl9CisKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMSwgMCk7CisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDAsIDApOworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxRik7CisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDE1KTsKKwkJCQkJCWxvY2sgPSBzdHYwOTAwX2dldF9kZW1vZF9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgdGltZW91dCk7CisJCQkJCQlkaXJlY3Rpb24gKj0gLTE7CisJCQkJCQljdXJyZW50X3N0ZXArKzsKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybglsb2NrOworfQorCitzdGF0aWMgdm9pZCBzdHYwOTAwX2dldF9sb2NrX3RpbWVvdXQoczMyICpkZW1vZF90aW1lb3V0LCBzMzIgKmZlY190aW1lb3V0LAorCQkJCQlzMzIgc3JhdGUsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfYWxnbyBhbGdvKQoreworCXN3aXRjaCAoYWxnbykgeworCWNhc2UgU1RWMDkwMF9CTElORF9TRUFSQ0g6CisJCWlmIChzcmF0ZSA8PSAxNTAwMDAwKSB7CisJCQkoKmRlbW9kX3RpbWVvdXQpID0gMTUwMDsKKwkJCSgqZmVjX3RpbWVvdXQpID0gNDAwOworCQl9IGVsc2UgaWYgKHNyYXRlIDw9IDUwMDAwMDApIHsKKwkJCSgqZGVtb2RfdGltZW91dCkgPSAxMDAwOworCQkJKCpmZWNfdGltZW91dCkgPSAzMDA7CisJCX0gZWxzZSB7CisJCQkoKmRlbW9kX3RpbWVvdXQpID0gNzAwOworCQkJKCpmZWNfdGltZW91dCkgPSAxMDA7CisJCX0KKworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfQ09MRF9TVEFSVDoKKwljYXNlIFNUVjA5MDBfV0FSTV9TVEFSVDoKKwlkZWZhdWx0OgorCQlpZiAoc3JhdGUgPD0gMTAwMDAwMCkgeworCQkJKCpkZW1vZF90aW1lb3V0KSA9IDMwMDA7CisJCQkoKmZlY190aW1lb3V0KSA9IDE3MDA7CisJCX0gZWxzZSBpZiAoc3JhdGUgPD0gMjAwMDAwMCkgeworCQkJKCpkZW1vZF90aW1lb3V0KSA9IDI1MDA7CisJCQkoKmZlY190aW1lb3V0KSA9IDExMDA7CisJCX0gZWxzZSBpZiAoc3JhdGUgPD0gNTAwMDAwMCkgeworCQkJKCpkZW1vZF90aW1lb3V0KSA9IDEwMDA7CisJCQkoKmZlY190aW1lb3V0KSA9IDU1MDsKKwkJfSBlbHNlIGlmIChzcmF0ZSA8PSAxMDAwMDAwMCkgeworCQkJKCpkZW1vZF90aW1lb3V0KSA9IDcwMDsKKwkJCSgqZmVjX3RpbWVvdXQpID0gMjUwOworCQl9IGVsc2UgaWYgKHNyYXRlIDw9IDIwMDAwMDAwKSB7CisJCQkoKmRlbW9kX3RpbWVvdXQpID0gNDAwOworCQkJKCpmZWNfdGltZW91dCkgPSAxMzA7CisJCX0KKworCQllbHNlIHsKKwkJCSgqZGVtb2RfdGltZW91dCkgPSAzMDA7CisJCQkoKmZlY190aW1lb3V0KSA9IDEwMDsKKwkJfQorCisJCWJyZWFrOworCisJfQorCisJaWYgKGFsZ28gPT0gU1RWMDkwMF9XQVJNX1NUQVJUKQorCQkoKmRlbW9kX3RpbWVvdXQpIC89IDI7Cit9CisKK3N0YXRpYyB2b2lkIHN0djA5MDBfc2V0X3ZpdGVyYmlfdHJhY3Eoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCisJczMyIHZ0aF9yZWc7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCWRtZF9yZWcodnRoX3JlZywgUjA5MDBfUDFfVlRIMTIsIFIwOTAwX1AyX1ZUSDEyKTsKKworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCB2dGhfcmVnKyssIDB4ZDApOworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCB2dGhfcmVnKyssIDB4N2QpOworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCB2dGhfcmVnKyssIDB4NTMpOworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCB2dGhfcmVnKyssIDB4MkYpOworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCB2dGhfcmVnKyssIDB4MjQpOworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCB2dGhfcmVnKyssIDB4MUYpOworfQorCitzdGF0aWMgdm9pZCBzdHYwOTAwX3NldF92aXRlcmJpX3N0YW5kYXJkKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkgICBlbnVtIGZlX3N0djA5MDBfc2VhcmNoX3N0YW5kYXJkIFN0YW5kYXJkLAorCQkJCSAgIGVudW0gZmVfc3R2MDkwMF9mZWMgUHVuY3R1cmVSYXRlLAorCQkJCSAgIGVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisKKwlzMzIgZmVjbVJlZywKKwlwcnZpdFJlZzsKKworCWRwcmludGsoS0VSTl9JTkZPICIlczogVml0ZXJiaVN0YW5kYXJkID0gIiwgX19mdW5jX18pOworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCWZlY21SZWcgPSBSMDkwMF9QMV9GRUNNOworCQlwcnZpdFJlZyA9IFIwOTAwX1AxX1BSVklUOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJZmVjbVJlZyA9IFIwOTAwX1AyX0ZFQ007CisJCXBydml0UmVnID0gUjA5MDBfUDJfUFJWSVQ7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoU3RhbmRhcmQpIHsKKwljYXNlIFNUVjA5MDBfQVVUT19TRUFSQ0g6CisJCWRwcmludGsoIkF1dG9cbiIpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgZmVjbVJlZywgMHgxMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBwcnZpdFJlZywgMHgzRik7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFZCUzE6CisJCWRwcmludGsoIkRWQlMxXG4iKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIGZlY21SZWcsIDB4MDApOworCQlzd2l0Y2ggKFB1bmN0dXJlUmF0ZSkgeworCQljYXNlIFNUVjA5MDBfRkVDX1VOS05PV046CisJCWRlZmF1bHQ6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcHJ2aXRSZWcsIDB4MkYpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9GRUNfMV8yOgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHBydml0UmVnLCAweDAxKTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRkVDXzJfMzoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBwcnZpdFJlZywgMHgwMik7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0ZFQ18zXzQ6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcHJ2aXRSZWcsIDB4MDQpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9GRUNfNV82OgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHBydml0UmVnLCAweDA4KTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRkVDXzdfODoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBwcnZpdFJlZywgMHgyMCk7CisJCQlicmVhazsKKwkJfQorCisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFNTOgorCQlkcHJpbnRrKCJEU1NcbiIpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgZmVjbVJlZywgMHg4MCk7CisJCXN3aXRjaCAoUHVuY3R1cmVSYXRlKSB7CisJCWNhc2UgU1RWMDkwMF9GRUNfVU5LTk9XTjoKKwkJZGVmYXVsdDoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBwcnZpdFJlZywgMHgxMyk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0ZFQ18xXzI6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcHJ2aXRSZWcsIDB4MDEpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9GRUNfMl8zOgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHBydml0UmVnLCAweDAyKTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRkVDXzZfNzoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBwcnZpdFJlZywgMHgxMCk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0djA5MDBfdHJhY2tfb3B0aW1pemF0aW9uKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kID0gc3RhdGUtPmRlbW9kOworCisJczMyIHNyYXRlLCBwaWxvdHMsIGFjbGMsIGZyZXExLCBmcmVxMCwKKwkJaSA9IDAsIHRpbWVkLCB0aW1lZiwgYmxpbmRUdW5TdyA9IDA7CisKKwllbnVtIGZlX3N0djA5MDBfcm9sbG9mZiByb2xsb2ZmOworCWVudW0gZmVfc3R2MDkwMF9tb2Rjb2RlIGZvdW5kTW9kY29kOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzcmF0ZSA9IHN0djA5MDBfZ2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgZGVtb2QpOworCXNyYXRlICs9IHN0djA5MDBfZ2V0X3RpbWluZ19vZmZzdChpX3BhcmFtcywgc3JhdGUsIGRlbW9kKTsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlzd2l0Y2ggKGlfcGFyYW1zLT5kbWQxX3JzbHRzLnN0YW5kYXJkKSB7CisJCWNhc2UgU1RWMDkwMF9EVkJTMV9TVEFOREFSRDoKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMV9zcmNoX3N0YW5kYXJkID09IFNUVjA5MDBfQVVUT19TRUFSQ0gpIHsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMxX0VOQUJMRSwgMSk7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMl9FTkFCTEUsIDApOworCQkJfQorCisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1JPTExPRkZfQ09OVFJPTCwgaV9wYXJhbXMtPnJvbGxvZmYpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9NQU5VQUxfUk9MTE9GRiwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRVJSQ1RSTDEsIDB4NzUpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9EU1NfU1RBTkRBUkQ6CisJCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZCA9PSBTVFYwOTAwX0FVVE9fU0VBUkNIKSB7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMV9FTkFCTEUsIDEpOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzJfRU5BQkxFLCAwKTsKKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9ST0xMT0ZGX0NPTlRST0wsIGlfcGFyYW1zLT5yb2xsb2ZmKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfTUFOVUFMX1JPTExPRkYsIDEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0VSUkNUUkwxLCAweDc1KTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRFZCUzJfU1RBTkRBUkQ6CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMxX0VOQUJMRSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMyX0VOQUJMRSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQywgMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQkNMQywgMCk7CisJCQlpZiAoaV9wYXJhbXMtPmRtZDFfcnNsdHMuZnJhbWVfbGVuZ3RoID09IFNUVjA5MDBfTE9OR19GUkFNRSkgeworCQkJCWZvdW5kTW9kY29kID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfREVNT0RfTU9EQ09EKTsKKwkJCQlwaWxvdHMgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9ERU1PRF9UWVBFKSAmIDB4MDE7CisJCQkJYWNsYyA9IHN0djA5MDBfZ2V0X29wdGltX2NhcnJfbG9vcChzcmF0ZSwgZm91bmRNb2Rjb2QsIHBpbG90cywgaV9wYXJhbXMtPmNoaXBfaWQpOworCQkJCWlmIChmb3VuZE1vZGNvZCA8PSBTVFYwOTAwX1FQU0tfOTEwKQorCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQzJTMlEsIGFjbGMpOworCQkJCWVsc2UgaWYgKGZvdW5kTW9kY29kIDw9IFNUVjA5MDBfOFBTS185MTApIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMyUzJRLCAweDJhKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMyUzI4LCBhY2xjKTsKKwkJCQl9CisKKwkJCQlpZiAoKGlfcGFyYW1zLT5kZW1vZF9tb2RlID09IFNUVjA5MDBfU0lOR0xFKSAmJiAoZm91bmRNb2Rjb2QgPiBTVFYwOTAwXzhQU0tfOTEwKSkgeworCQkJCQlpZiAoZm91bmRNb2Rjb2QgPD0gU1RWMDkwMF8xNkFQU0tfOTEwKSB7CisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQzJTMlEsIDB4MmEpOworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMyUzIxNkEsIGFjbGMpOworCQkJCQl9IGVsc2UgaWYgKGZvdW5kTW9kY29kIDw9IFNUVjA5MDBfMzJBUFNLXzkxMCkgeworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMyUzJRLCAweDJhKTsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyMzJBLCBhY2xjKTsKKwkJCQkJfQorCQkJCX0KKworCQkJfSBlbHNlIHsKKwkJCQlhY2xjID0gc3R2MDkwMF9nZXRfb3B0aW1fc2hvcnRfY2Fycl9sb29wKHNyYXRlLCBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2R1bGF0aW9uLCBpX3BhcmFtcy0+Y2hpcF9pZCk7CisJCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZHVsYXRpb24gPT0gU1RWMDkwMF9RUFNLKQorCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQzJTMlEsIGFjbGMpOworCisJCQkJZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kdWxhdGlvbiA9PSBTVFYwOTAwXzhQU0spIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMyUzJRLCAweDJhKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMyUzI4LCBhY2xjKTsKKwkJCQl9IGVsc2UgaWYgKGlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZHVsYXRpb24gPT0gU1RWMDkwMF8xNkFQU0spIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMyUzJRLCAweDJhKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMyUzIxNkEsIGFjbGMpOworCQkJCX0gZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kdWxhdGlvbiA9PSBTVFYwOTAwXzMyQVBTSykgeworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQzJTMlEsIDB4MmEpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQzJTMjMyQSwgYWNsYyk7CisJCQkJfQorCisJCQl9CisKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA8PSAweDExKSB7CisJCQkJaWYgKGlfcGFyYW1zLT5kZW1vZF9tb2RlICE9IFNUVjA5MDBfU0lOR0xFKQorCQkJCQlzdHYwOTAwX2FjdGl2YXRlX3MyX21vZGNvZGUoaV9wYXJhbXMsIGRlbW9kKTsKKworCQkJfQorCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRVJSQ1RSTDEsIDB4NjcpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9VTktOT1dOX1NUQU5EQVJEOgorCQlkZWZhdWx0OgorCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMV9FTkFCTEUsIDEpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMl9FTkFCTEUsIDEpOworCQkJYnJlYWs7CisJCX0KKworCQlmcmVxMSA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUjIpOworCQlmcmVxMCA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUjEpOworCQlyb2xsb2ZmID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfUk9MTE9GRl9TVEFUVVMpOworCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSU1RFUCwgMHgwMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1NDQU5fRU5BQkxFLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfQ0ZSX0FVVE9TQ0FOLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdDRkcyLCAweDAxKTsKKwkJCXN0djA5MDBfc2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgc3JhdGUsIGRlbW9kKTsKKwkJCXN0djA5MDBfc2V0X21heF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIHNyYXRlLCBkZW1vZCk7CisJCQlzdHYwOTAwX3NldF9taW5fc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBzcmF0ZSwgZGVtb2QpOworCQkJYmxpbmRUdW5TdyA9IDE7CisJCX0KKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJaWYgKChpX3BhcmFtcy0+ZG1kMV9zcmNoX3N0YW5kYXJkID09IFNUVjA5MDBfU0VBUkNIX0RWQlMxKSB8fCAoaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZCA9PSBTVFYwOTAwX1NFQVJDSF9EU1MpIHx8IChpX3BhcmFtcy0+ZG1kMV9zcmNoX3N0YW5kYXJkID09IFNUVjA5MDBfQVVUT19TRUFSQ0gpKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1ZBVlNSVklULCAweDBhKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVklUU0NBTEUsIDB4MCk7CisJCQl9CisJCX0KKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPCAweDIwKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkhEUiwgMHgwOCk7CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID09IDB4MTApCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ09SUkVMRVhQLCAweDBBKTsKKworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUdDMlJFRiwgMHgzOCk7CisKKwkJaWYgKChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB8fCAoYmxpbmRUdW5TdyA9PSAxKSB8fCAoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUgPCAxMDAwMDAwMCkpIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMSwgZnJlcTEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQwLCBmcmVxMCk7CisJCQlpX3BhcmFtcy0+dHVuZXIxX2J3ID0gc3R2MDkwMF9jYXJyaWVyX3dpZHRoKHNyYXRlLCBpX3BhcmFtcy0+cm9sbG9mZikgKyAxMDAwMDAwMDsKKworCQkJaWYgKChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB8fCAoYmxpbmRUdW5TdyA9PSAxKSkgeworCQkJCWlmIChpX3BhcmFtcy0+ZG1kMV9zcmNoX2FsZ28gIT0gU1RWMDkwMF9XQVJNX1NUQVJUKQorCQkJCQlzdHYwOTAwX3NldF9iYW5kd2lkdGgoZmUsIGlfcGFyYW1zLT50dW5lcjFfYncpOworCQkJfQorCisJCQlpZiAoKGlfcGFyYW1zLT5kbWQxX3NyY2hfYWxnbyA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkgfHwgKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlIDwgMTAwMDAwMDApKQorCQkJCW1zbGVlcCg1MCk7CisJCQllbHNlCisJCQkJbXNsZWVwKDUpOworCisJCQlzdHYwOTAwX2dldF9sb2NrX3RpbWVvdXQoJnRpbWVkLCAmdGltZWYsIHNyYXRlLCBTVFYwOTAwX1dBUk1fU1RBUlQpOworCisJCQlpZiAoc3R2MDkwMF9nZXRfZGVtb2RfbG9jayhpX3BhcmFtcywgZGVtb2QsIHRpbWVkIC8gMikgPT0gRkFMU0UpIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDFGKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDEsIGZyZXExKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDAsIGZyZXEwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDE4KTsKKwkJCQlpID0gMDsKKwkJCQl3aGlsZSAoKHN0djA5MDBfZ2V0X2RlbW9kX2xvY2soaV9wYXJhbXMsIGRlbW9kLCB0aW1lZCAvIDIpID09IEZBTFNFKSAmJiAoaSA8PSAyKSkgeworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDFGKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQxLCBmcmVxMSk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMCwgZnJlcTApOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDE4KTsKKwkJCQkJaSsrOworCQkJCX0KKwkJCX0KKworCQl9CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwgMHg0OSk7CisKKwkJaWYgKChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zdGFuZGFyZCA9PSBTVFYwOTAwX0RWQlMxX1NUQU5EQVJEKSB8fCAoaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3RhbmRhcmQgPT0gU1RWMDkwMF9EU1NfU1RBTkRBUkQpKQorCQkJc3R2MDkwMF9zZXRfdml0ZXJiaV90cmFjcShpX3BhcmFtcywgZGVtb2QpOworCisJCWJyZWFrOworCisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCXN3aXRjaCAoaV9wYXJhbXMtPmRtZDJfcnNsdHMuc3RhbmRhcmQpIHsKKwkJY2FzZSBTVFYwOTAwX0RWQlMxX1NUQU5EQVJEOgorCisJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQgPT0gU1RWMDkwMF9BVVRPX1NFQVJDSCkgeworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMyX0VOQUJMRSwgMCk7CisJCQl9CisKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfUk9MTE9GRl9DT05UUk9MLCBpX3BhcmFtcy0+cm9sbG9mZik7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX01BTlVBTF9ST0xMT0ZGLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9FUlJDVFJMMSwgMHg3NSk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RTU19TVEFOREFSRDoKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCA9PSBTVFYwOTAwX0FVVE9fU0VBUkNIKSB7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMV9FTkFCTEUsIDEpOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzJfRU5BQkxFLCAwKTsKKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9ST0xMT0ZGX0NPTlRST0wsIGlfcGFyYW1zLT5yb2xsb2ZmKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfTUFOVUFMX1JPTExPRkYsIDEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0VSUkNUUkwxLCAweDc1KTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRFZCUzJfU1RBTkRBUkQ6CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMxX0VOQUJMRSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMyX0VOQUJMRSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQywgMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQkNMQywgMCk7CisJCQlpZiAoaV9wYXJhbXMtPmRtZDJfcnNsdHMuZnJhbWVfbGVuZ3RoID09IFNUVjA5MDBfTE9OR19GUkFNRSkgeworCQkJCWZvdW5kTW9kY29kID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfREVNT0RfTU9EQ09EKTsKKwkJCQlwaWxvdHMgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9ERU1PRF9UWVBFKSAmIDB4MDE7CisJCQkJYWNsYyA9IHN0djA5MDBfZ2V0X29wdGltX2NhcnJfbG9vcChzcmF0ZSwgZm91bmRNb2Rjb2QsIHBpbG90cywgaV9wYXJhbXMtPmNoaXBfaWQpOworCQkJCWlmIChmb3VuZE1vZGNvZCA8PSBTVFYwOTAwX1FQU0tfOTEwKQorCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQzJTMlEsIGFjbGMpOworCQkJCWVsc2UgaWYgKGZvdW5kTW9kY29kIDw9IFNUVjA5MDBfOFBTS185MTApIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMyUzJRLCAweDJhKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMyUzI4LCBhY2xjKTsKKwkJCQl9CisKKwkJCQlpZiAoKGlfcGFyYW1zLT5kZW1vZF9tb2RlID09IFNUVjA5MDBfU0lOR0xFKSAmJiAoZm91bmRNb2Rjb2QgPiBTVFYwOTAwXzhQU0tfOTEwKSkgeworCQkJCQlpZiAoZm91bmRNb2Rjb2QgPD0gU1RWMDkwMF8xNkFQU0tfOTEwKSB7CisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQzJTMlEsIDB4MmEpOworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMyUzIxNkEsIGFjbGMpOworCQkJCQl9IGVsc2UgaWYgKGZvdW5kTW9kY29kIDw9IFNUVjA5MDBfMzJBUFNLXzkxMCkgeworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMyUzJRLCAweDJhKTsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyMzJBLCBhY2xjKTsKKwkJCQkJfQorCisJCQkJfQorCisJCQl9IGVsc2UgeworCQkJCWFjbGMgPSBzdHYwOTAwX2dldF9vcHRpbV9zaG9ydF9jYXJyX2xvb3Aoc3JhdGUsCisJCQkJCQkJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2R1bGF0aW9uLAorCQkJCQkJCQkJaV9wYXJhbXMtPmNoaXBfaWQpOworCisJCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZHVsYXRpb24gPT0gU1RWMDkwMF9RUFNLKQorCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQzJTMlEsIGFjbGMpOworCisJCQkJZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kdWxhdGlvbiA9PSBTVFYwOTAwXzhQU0spIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMyUzJRLCAweDJhKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMyUzI4LCBhY2xjKTsKKwkJCQl9IGVsc2UgaWYgKGlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZHVsYXRpb24gPT0gU1RWMDkwMF8xNkFQU0spIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMyUzJRLCAweDJhKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMyUzIxNkEsIGFjbGMpOworCQkJCX0gZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kdWxhdGlvbiA9PSBTVFYwOTAwXzMyQVBTSykgeworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQzJTMlEsIDB4MmEpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQzJTMjMyQSwgYWNsYyk7CisJCQkJfQorCQkJfQorCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRVJSQ1RSTDEsIDB4NjcpOworCisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX1VOS05PV05fU1RBTkRBUkQ6CisJCWRlZmF1bHQ6CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMxX0VOQUJMRSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMyX0VOQUJMRSwgMSk7CisJCQlicmVhazsKKwkJfQorCisJCWZyZXExID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSMik7CisJCWZyZXEwID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSMSk7CisJCXJvbGxvZmYgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9ST0xMT0ZGX1NUQVRVUyk7CisJCWlmIChpX3BhcmFtcy0+ZG1kMl9zcmNoX2FsZ28gPT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJTVEVQLCAweDAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfU0NBTl9FTkFCTEUsIDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9DRlJfQVVUT1NDQU4sIDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR0NGRzIsIDB4MDEpOworCQkJc3R2MDkwMF9zZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBzcmF0ZSwgZGVtb2QpOworCQkJc3R2MDkwMF9zZXRfbWF4X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgc3JhdGUsIGRlbW9kKTsKKwkJCXN0djA5MDBfc2V0X21pbl9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIHNyYXRlLCBkZW1vZCk7CisJCQlibGluZFR1blN3ID0gMTsKKwkJfQorCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQlpZiAoKGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkID09IFNUVjA5MDBfU0VBUkNIX0RWQlMxKSB8fCAoaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQgPT0gU1RWMDkwMF9TRUFSQ0hfRFNTKSB8fCAoaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQgPT0gU1RWMDkwMF9BVVRPX1NFQVJDSCkpIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVkFWU1JWSVQsIDB4MGEpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9WSVRTQ0FMRSwgMHgwKTsKKwkJCX0KKwkJfQorCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA8IDB4MjApCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSSERSLCAweDA4KTsKKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPT0gMHgxMCkKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DT1JSRUxFWFAsIDB4MGEpOworCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BR0MyUkVGLCAweDM4KTsKKwkJaWYgKChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB8fCAoYmxpbmRUdW5TdyA9PSAxKSB8fCAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPCAxMDAwMDAwMCkpIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMSwgZnJlcTEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQwLCBmcmVxMCk7CisJCQlpX3BhcmFtcy0+dHVuZXIyX2J3ID0gc3R2MDkwMF9jYXJyaWVyX3dpZHRoKHNyYXRlLCBpX3BhcmFtcy0+cm9sbG9mZikgKyAxMDAwMDAwMDsKKworCQkJaWYgKChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB8fCAoYmxpbmRUdW5TdyA9PSAxKSkgeworCQkJCWlmIChpX3BhcmFtcy0+ZG1kMl9zcmNoX2FsZ28gIT0gU1RWMDkwMF9XQVJNX1NUQVJUKQorCQkJCQlzdHYwOTAwX3NldF9iYW5kd2lkdGgoZmUsIGlfcGFyYW1zLT50dW5lcjJfYncpOworCQkJfQorCisJCQlpZiAoKGlfcGFyYW1zLT5kbWQyX3NyY2hfYWxnbyA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkgfHwgKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlIDwgMTAwMDAwMDApKQorCQkJCW1zbGVlcCg1MCk7CisJCQllbHNlCisJCQkJbXNsZWVwKDUpOworCisJCQlzdHYwOTAwX2dldF9sb2NrX3RpbWVvdXQoJnRpbWVkLCAmdGltZWYsIHNyYXRlLCBTVFYwOTAwX1dBUk1fU1RBUlQpOworCQkJaWYgKHN0djA5MDBfZ2V0X2RlbW9kX2xvY2soaV9wYXJhbXMsIGRlbW9kLCB0aW1lZCAvIDIpID09IEZBTFNFKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxRik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQxLCBmcmVxMSk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQwLCBmcmVxMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxOCk7CisJCQkJaSA9IDA7CisJCQkJd2hpbGUgKChzdHYwOTAwX2dldF9kZW1vZF9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgdGltZWQgLyAyKSA9PSBGQUxTRSkgJiYgKGkgPD0gMikpIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxRik7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMSwgZnJlcTEpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDAsIGZyZXEwKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxOCk7CisJCQkJCWkrKzsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRLCAweDQ5KTsKKworCQlpZiAoKGlfcGFyYW1zLT5kbWQyX3JzbHRzLnN0YW5kYXJkID09IFNUVjA5MDBfRFZCUzFfU1RBTkRBUkQpIHx8IChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zdGFuZGFyZCA9PSBTVFYwOTAwX0RTU19TVEFOREFSRCkpCisJCQlzdHYwOTAwX3NldF92aXRlcmJpX3RyYWNxKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IHN0djA5MDBfZ2V0X2ZlY19sb2NrKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywgZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCwgczMyIHRpbWVfb3V0KQoreworCXMzMiB0aW1lciA9IDAsIGxvY2sgPSAwLCBoZWFkZXJfZmllbGQsIHBrdGRlbGluX2ZpZWxkLCBsb2NrX3ZpdF9maWVsZDsKKworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfc3RhdGUgZG1kX3N0YXRlOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlkbWRfcmVnKGhlYWRlcl9maWVsZCwgRjA5MDBfUDFfSEVBREVSX01PREUsIEYwOTAwX1AyX0hFQURFUl9NT0RFKTsKKwlkbWRfcmVnKHBrdGRlbGluX2ZpZWxkLCBGMDkwMF9QMV9QS1RERUxJTl9MT0NLLCBGMDkwMF9QMl9QS1RERUxJTl9MT0NLKTsKKwlkbWRfcmVnKGxvY2tfdml0X2ZpZWxkLCBGMDkwMF9QMV9MT0NLRURWSVQsIEYwOTAwX1AyX0xPQ0tFRFZJVCk7CisKKwlkbWRfc3RhdGUgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBoZWFkZXJfZmllbGQpOworCisJd2hpbGUgKCh0aW1lciA8IHRpbWVfb3V0KSAmJiAobG9jayA9PSAwKSkgeworCQlzd2l0Y2ggKGRtZF9zdGF0ZSkgeworCQljYXNlIFNUVjA5MDBfU0VBUkNIOgorCQljYXNlIFNUVjA5MDBfUExIX0RFVEVDVEVEOgorCQlkZWZhdWx0OgorCQkJbG9jayA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RWQlMyX0ZPVU5EOgorCQkJbG9jayA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHBrdGRlbGluX2ZpZWxkKTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRFZCU19GT1VORDoKKwkJCWxvY2sgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBsb2NrX3ZpdF9maWVsZCk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChsb2NrID09IDApIHsKKwkJCW1zbGVlcCgxMCk7CisJCQl0aW1lciArPSAxMDsKKwkJfQorCX0KKworCWlmIChsb2NrKQorCQlkcHJpbnRrKCJERU1PRCBGRUMgTE9DSyBPS1xuIik7CisJZWxzZQorCQlkcHJpbnRrKCJERU1PRCBGRUMgTE9DSyBGQUlMXG4iKTsKKworCXJldHVybiBsb2NrOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfd2FpdF9mb3JfbG9jayhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCwKKwkJCQlzMzIgZG1kX3RpbWVvdXQsIHMzMiBmZWNfdGltZW91dCkKK3sKKworCXMzMiB0aW1lciA9IDAsIGxvY2sgPSAwLCBzdHJfbWVyZ19yc3RfZmxkLCBzdHJfbWVyZ19sb2NrX2ZsZDsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJZG1kX3JlZyhzdHJfbWVyZ19yc3RfZmxkLCBGMDkwMF9QMV9SU1RfSFdBUkUsIEYwOTAwX1AyX1JTVF9IV0FSRSk7CisJZG1kX3JlZyhzdHJfbWVyZ19sb2NrX2ZsZCwgRjA5MDBfUDFfVFNGSUZPX0xJTkVPSywgRjA5MDBfUDJfVFNGSUZPX0xJTkVPSyk7CisKKwlsb2NrID0gc3R2MDkwMF9nZXRfZGVtb2RfbG9jayhpX3BhcmFtcywgZGVtb2QsIGRtZF90aW1lb3V0KTsKKworCWlmIChsb2NrKQorCQlsb2NrID0gbG9jayAmJiBzdHYwOTAwX2dldF9mZWNfbG9jayhpX3BhcmFtcywgZGVtb2QsIGZlY190aW1lb3V0KTsKKworCWlmIChsb2NrKSB7CisJCWxvY2sgPSAwOworCisJCWRwcmludGsoS0VSTl9JTkZPICIlczogVGltZXIgPSAlZCwgdGltZV9vdXQgPSAlZFxuIiwgX19mdW5jX18sIHRpbWVyLCBmZWNfdGltZW91dCk7CisKKwkJd2hpbGUgKCh0aW1lciA8IGZlY190aW1lb3V0KSAmJiAobG9jayA9PSAwKSkgeworCQkJbG9jayA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHN0cl9tZXJnX2xvY2tfZmxkKTsKKwkJCW1zbGVlcCgxKTsKKwkJCXRpbWVyKys7CisJCX0KKwl9CisKKwlpZiAobG9jaykKKwkJZHByaW50ayhLRVJOX0lORk8gIiVzOiBERU1PRCBMT0NLIE9LXG4iLCBfX2Z1bmNfXyk7CisJZWxzZQorCQlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERFTU9EIExPQ0sgRkFJTFxuIiwgX19mdW5jX18pOworCisJaWYgKGxvY2spCisJCXJldHVybiBUUlVFOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOworfQorCitlbnVtIGZlX3N0djA5MDBfdHJhY2tpbmdfc3RhbmRhcmQgc3R2MDkwMF9nZXRfc3RhbmRhcmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwllbnVtIGZlX3N0djA5MDBfdHJhY2tpbmdfc3RhbmRhcmQgZm5kX3N0YW5kYXJkOworCXMzMiBzdGF0ZV9maWVsZCwKKwlkc3NfZHZiX2ZpZWxkOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlkbWRfcmVnKHN0YXRlX2ZpZWxkLCBGMDkwMF9QMV9IRUFERVJfTU9ERSwgRjA5MDBfUDJfSEVBREVSX01PREUpOworCWRtZF9yZWcoZHNzX2R2Yl9maWVsZCwgRjA5MDBfUDFfRFNTX0RWQiwgRjA5MDBfUDJfRFNTX0RWQik7CisKKwlpZiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgc3RhdGVfZmllbGQpID09IDIpCisJCWZuZF9zdGFuZGFyZCA9IFNUVjA5MDBfRFZCUzJfU1RBTkRBUkQ7CisKKwllbHNlIGlmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBzdGF0ZV9maWVsZCkgPT0gMykgeworCQlpZiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgZHNzX2R2Yl9maWVsZCkgPT0gMSkKKwkJCWZuZF9zdGFuZGFyZCA9IFNUVjA5MDBfRFNTX1NUQU5EQVJEOworCQllbHNlCisJCQlmbmRfc3RhbmRhcmQgPSBTVFYwOTAwX0RWQlMxX1NUQU5EQVJEOworCX0gZWxzZQorCQlmbmRfc3RhbmRhcmQgPSBTVFYwOTAwX1VOS05PV05fU1RBTkRBUkQ7CisKKwlyZXR1cm4gZm5kX3N0YW5kYXJkOworfQorCitzdGF0aWMgczMyIHN0djA5MDBfZ2V0X2NhcnJfZnJlcShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsIHUzMiBtY2xrLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXMzMiBjZnJfZmllbGQyLCBjZnJfZmllbGQxLCBjZnJfZmllbGQwLAorCQlkZXJvdCwgcmVtMSwgcmVtMiwgaW50dmFsMSwgaW50dmFsMjsKKworCWRtZF9yZWcoY2ZyX2ZpZWxkMiwgRjA5MDBfUDFfQ0FSX0ZSRVEyLCBGMDkwMF9QMl9DQVJfRlJFUTIpOworCWRtZF9yZWcoY2ZyX2ZpZWxkMSwgRjA5MDBfUDFfQ0FSX0ZSRVExLCBGMDkwMF9QMl9DQVJfRlJFUTEpOworCWRtZF9yZWcoY2ZyX2ZpZWxkMCwgRjA5MDBfUDFfQ0FSX0ZSRVEwLCBGMDkwMF9QMl9DQVJfRlJFUTApOworCisJZGVyb3QgPSAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgY2ZyX2ZpZWxkMikgPDwgMTYpICsKKwkJKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGNmcl9maWVsZDEpIDw8IDgpICsKKwkJKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGNmcl9maWVsZDApKTsKKworCWRlcm90ID0gZ2UyY29tcChkZXJvdCwgMjQpOworCWludHZhbDEgPSBtY2xrID4+IDEyOworCWludHZhbDIgPSBkZXJvdCA+PiAxMjsKKwlyZW0xID0gbWNsayAlIDB4MTAwMDsKKwlyZW0yID0gZGVyb3QgJSAweDEwMDA7CisJZGVyb3QgPSAoaW50dmFsMSAqIGludHZhbDIpICsKKwkJKChpbnR2YWwxICogcmVtMikgPj4gMTIpICsKKwkJKChpbnR2YWwyICogcmVtMSkgPj4gMTIpOworCisJcmV0dXJuIGRlcm90OworfQorCitzdGF0aWMgdTMyIHN0djA5MDBfZ2V0X3R1bmVyX2ZyZXEoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMJKmZyb250ZW5kX29wcyA9IE5VTEw7CisJc3RydWN0IGR2Yl90dW5lcl9vcHMgKnR1bmVyX29wcyA9IE5VTEw7CisJdTMyIGZyZXF1ZW5jeSA9IDA7CisKKwlpZiAoJmZlLT5vcHMpCisJCWZyb250ZW5kX29wcyA9ICZmZS0+b3BzOworCisJaWYgKCZmcm9udGVuZF9vcHMtPnR1bmVyX29wcykKKwkJdHVuZXJfb3BzID0gJmZyb250ZW5kX29wcy0+dHVuZXJfb3BzOworCisJaWYgKHR1bmVyX29wcy0+Z2V0X2ZyZXF1ZW5jeSkgeworCQlpZiAoKHR1bmVyX29wcy0+Z2V0X2ZyZXF1ZW5jeShmZSwgJmZyZXF1ZW5jeSkpIDwgMCkKKwkJCWRwcmludGsoIiVzOiBJbnZhbGlkIHBhcmFtZXRlclxuIiwgX19mdW5jX18pOworCQllbHNlCisJCQlkcHJpbnRrKCIlczogRnJlcXVlbmN5PSVkXG4iLCBfX2Z1bmNfXywgZnJlcXVlbmN5KTsKKworCX0KKworCXJldHVybiBmcmVxdWVuY3k7Cit9CisKK3N0YXRpYyBlbnVtIGZlX3N0djA5MDBfZmVjIHN0djA5MDBfZ2V0X3ZpdF9mZWMoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzMzIgcmF0ZV9mbGQsIHZpdF9jdXJwdW5fZmxkOworCWVudW0gZmVfc3R2MDkwMF9mZWMgcHJhdGU7CisKKwlkbWRfcmVnKHZpdF9jdXJwdW5fZmxkLCBGMDkwMF9QMV9WSVRfQ1VSUFVOLCBGMDkwMF9QMl9WSVRfQ1VSUFVOKTsKKwlyYXRlX2ZsZCA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHZpdF9jdXJwdW5fZmxkKTsKKworCXN3aXRjaCAocmF0ZV9mbGQpIHsKKwljYXNlIDEzOgorCQlwcmF0ZSA9IFNUVjA5MDBfRkVDXzFfMjsKKwkJYnJlYWs7CisJY2FzZSAxODoKKwkJcHJhdGUgPSBTVFYwOTAwX0ZFQ18yXzM7CisJCWJyZWFrOworCWNhc2UgMjE6CisJCXByYXRlID0gU1RWMDkwMF9GRUNfM180OworCQlicmVhazsKKwljYXNlIDI0OgorCQlwcmF0ZSA9IFNUVjA5MDBfRkVDXzVfNjsKKwkJYnJlYWs7CisJY2FzZSAyNToKKwkJcHJhdGUgPSBTVFYwOTAwX0ZFQ182Xzc7CisJCWJyZWFrOworCWNhc2UgMjY6CisJCXByYXRlID0gU1RWMDkwMF9GRUNfN184OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmF0ZSA9IFNUVjA5MDBfRkVDX1VOS05PV047CisJCWJyZWFrOworCX0KKworCXJldHVybiBwcmF0ZTsKK30KKworc3RhdGljIGVudW0gZmVfc3R2MDkwMF9zaWduYWxfdHlwZSBzdHYwOTAwX2dldF9zaWduYWxfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kID0gc3RhdGUtPmRlbW9kOworCWVudW0gZmVfc3R2MDkwMF9zaWduYWxfdHlwZSByYW5nZSA9IFNUVjA5MDBfT1VUT0ZSQU5HRTsKKwlzMzIgb2Zmc2V0RnJlcSwKKwlzcmF0ZV9vZmZzZXQsCisJaSA9IDA7CisKKwl1OCB0aW1pbmc7CisKKwltc2xlZXAoNSk7CisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCWlmIChpX3BhcmFtcy0+ZG1kMV9zcmNoX2FsZ28gPT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpIHsKKwkJCXRpbWluZyA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR1JFRzIpOworCQkJaSA9IDA7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSU1RFUCwgMHg1Yyk7CisKKwkJCXdoaWxlICgoaSA8PSA1MCkgJiYgKHRpbWluZyAhPSAwKSAmJiAodGltaW5nICE9IDB4RkYpKSB7CisJCQkJdGltaW5nID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HUkVHMik7CisJCQkJbXNsZWVwKDUpOworCQkJCWkgKz0gNTsKKwkJCX0KKwkJfQorCisJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLnN0YW5kYXJkID0gc3R2MDkwMF9nZXRfc3RhbmRhcmQoZmUsIGRlbW9kKTsKKwkJaV9wYXJhbXMtPmRtZDFfcnNsdHMuZnJlcXVlbmN5ID0gc3R2MDkwMF9nZXRfdHVuZXJfZnJlcShmZSk7CisJCW9mZnNldEZyZXEgPSBzdHYwOTAwX2dldF9jYXJyX2ZyZXEoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBkZW1vZCkgLyAxMDAwOworCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5mcmVxdWVuY3kgKz0gb2Zmc2V0RnJlcTsKKwkJaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3ltYm9sX3JhdGUgPSBzdHYwOTAwX2dldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGRlbW9kKTsKKwkJc3JhdGVfb2Zmc2V0ID0gc3R2MDkwMF9nZXRfdGltaW5nX29mZnN0KGlfcGFyYW1zLCBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zeW1ib2xfcmF0ZSwgZGVtb2QpOworCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zeW1ib2xfcmF0ZSArPSBzcmF0ZV9vZmZzZXQ7CisJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLmZlYyA9IHN0djA5MDBfZ2V0X3ZpdF9mZWMoaV9wYXJhbXMsIGRlbW9kKTsKKwkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kY29kZSA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RFTU9EX01PRENPRCk7CisJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLnBpbG90ID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfREVNT0RfVFlQRSkgJiAweDAxOworCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5mcmFtZV9sZW5ndGggPSAoKHUzMilzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9ERU1PRF9UWVBFKSkgPj4gMTsKKwkJaV9wYXJhbXMtPmRtZDFfcnNsdHMucm9sbG9mZiA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1JPTExPRkZfU1RBVFVTKTsKKwkJc3dpdGNoIChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zdGFuZGFyZCkgeworCQljYXNlIFNUVjA5MDBfRFZCUzJfU1RBTkRBUkQ6CisJCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zcGVjdHJ1bSA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1NQRUNJTlZfREVNT0QpOworCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZGNvZGUgPD0gU1RWMDkwMF9RUFNLXzkxMCkKKwkJCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2R1bGF0aW9uID0gU1RWMDkwMF9RUFNLOworCQkJZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kY29kZSA8PSBTVFYwOTAwXzhQU0tfOTEwKQorCQkJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZHVsYXRpb24gPSBTVFYwOTAwXzhQU0s7CisJCQllbHNlIGlmIChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2Rjb2RlIDw9IFNUVjA5MDBfMTZBUFNLXzkxMCkKKwkJCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2R1bGF0aW9uID0gU1RWMDkwMF8xNkFQU0s7CisJCQllbHNlIGlmIChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2Rjb2RlIDw9IFNUVjA5MDBfMzJBUFNLXzkxMCkKKwkJCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2R1bGF0aW9uID0gU1RWMDkwMF8zMkFQU0s7CisJCQllbHNlCisJCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kdWxhdGlvbiA9IFNUVjA5MDBfVU5LTk9XTjsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRFZCUzFfU1RBTkRBUkQ6CisJCWNhc2UgU1RWMDkwMF9EU1NfU1RBTkRBUkQ6CisJCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zcGVjdHJ1bSA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0lRSU5WKTsKKwkJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZHVsYXRpb24gPSBTVFYwOTAwX1FQU0s7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKChpX3BhcmFtcy0+ZG1kMV9zcmNoX2FsZ28gPT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpIHx8IChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSA8IDEwMDAwMDAwKSkgeworCQkJb2Zmc2V0RnJlcSA9CWlfcGFyYW1zLT5kbWQxX3JzbHRzLmZyZXF1ZW5jeSAtIGlfcGFyYW1zLT50dW5lcjFfZnJlcTsKKwkJCWlfcGFyYW1zLT50dW5lcjFfZnJlcSA9IHN0djA5MDBfZ2V0X3R1bmVyX2ZyZXEoZmUpOworCQkJaWYgKEFCUyhvZmZzZXRGcmVxKSA8PSAoKGlfcGFyYW1zLT5kbWQxX3NyY2hfcmFuZ2UgLyAyMDAwKSArIDUwMCkpCisJCQkJcmFuZ2UgPSBTVFYwOTAwX1JBTkdFT0s7CisJCQllbHNlCisJCQkJaWYgKEFCUyhvZmZzZXRGcmVxKSA8PSAoc3R2MDkwMF9jYXJyaWVyX3dpZHRoKGlfcGFyYW1zLT5kbWQxX3JzbHRzLnN5bWJvbF9yYXRlLCBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5yb2xsb2ZmKSAvIDIwMDApKQorCQkJCQlyYW5nZSA9IFNUVjA5MDBfUkFOR0VPSzsKKwkJCQllbHNlCisJCQkJCXJhbmdlID0gU1RWMDkwMF9PVVRPRlJBTkdFOworCisJCX0gZWxzZSB7CisJCQlpZiAoQUJTKG9mZnNldEZyZXEpIDw9ICgoaV9wYXJhbXMtPmRtZDFfc3JjaF9yYW5nZSAvIDIwMDApICsgNTAwKSkKKwkJCQlyYW5nZSA9IFNUVjA5MDBfUkFOR0VPSzsKKwkJCWVsc2UKKwkJCQlyYW5nZSA9IFNUVjA5MDBfT1VUT0ZSQU5HRTsKKwkJfQorCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJaWYgKGlfcGFyYW1zLT5kbWQyX3NyY2hfYWxnbyA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkgeworCQkJdGltaW5nID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HUkVHMik7CisJCQlpID0gMDsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJTVEVQLCAweDVjKTsKKworCQkJd2hpbGUgKChpIDw9IDUwKSAmJiAodGltaW5nICE9IDApICYmICh0aW1pbmcgIT0gMHhmZikpIHsKKwkJCQl0aW1pbmcgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdSRUcyKTsKKwkJCQltc2xlZXAoNSk7CisJCQkJaSArPSA1OworCQkJfQorCQl9CisKKwkJaV9wYXJhbXMtPmRtZDJfcnNsdHMuc3RhbmRhcmQgPSBzdHYwOTAwX2dldF9zdGFuZGFyZChmZSwgZGVtb2QpOworCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5mcmVxdWVuY3kgPSBzdHYwOTAwX2dldF90dW5lcl9mcmVxKGZlKTsKKwkJb2Zmc2V0RnJlcSA9IHN0djA5MDBfZ2V0X2NhcnJfZnJlcShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGRlbW9kKSAvIDEwMDA7CisJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLmZyZXF1ZW5jeSArPSBvZmZzZXRGcmVxOworCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zeW1ib2xfcmF0ZSA9IHN0djA5MDBfZ2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgZGVtb2QpOworCQlzcmF0ZV9vZmZzZXQgPSBzdHYwOTAwX2dldF90aW1pbmdfb2Zmc3QoaV9wYXJhbXMsIGlfcGFyYW1zLT5kbWQyX3JzbHRzLnN5bWJvbF9yYXRlLCBkZW1vZCk7CisJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLnN5bWJvbF9yYXRlICs9IHNyYXRlX29mZnNldDsKKwkJaV9wYXJhbXMtPmRtZDJfcnNsdHMuZmVjID0gc3R2MDkwMF9nZXRfdml0X2ZlYyhpX3BhcmFtcywgZGVtb2QpOworCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2Rjb2RlID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfREVNT0RfTU9EQ09EKTsKKwkJaV9wYXJhbXMtPmRtZDJfcnNsdHMucGlsb3QgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9ERU1PRF9UWVBFKSAmIDB4MDE7CisJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLmZyYW1lX2xlbmd0aCA9ICgodTMyKXN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RFTU9EX1RZUEUpKSA+PiAxOworCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5yb2xsb2ZmID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfUk9MTE9GRl9TVEFUVVMpOworCQlzd2l0Y2ggKGlfcGFyYW1zLT5kbWQyX3JzbHRzLnN0YW5kYXJkKSB7CisJCWNhc2UgU1RWMDkwMF9EVkJTMl9TVEFOREFSRDoKKwkJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLnNwZWN0cnVtID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfU1BFQ0lOVl9ERU1PRCk7CisJCQlpZiAoaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kY29kZSA8PSBTVFYwOTAwX1FQU0tfOTEwKQorCQkJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZHVsYXRpb24gPSBTVFYwOTAwX1FQU0s7CisJCQllbHNlIGlmIChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2Rjb2RlIDw9IFNUVjA5MDBfOFBTS185MTApCisJCQkJaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kdWxhdGlvbiA9IFNUVjA5MDBfOFBTSzsKKwkJCWVsc2UgaWYgKGlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZGNvZGUgPD0gU1RWMDkwMF8xNkFQU0tfOTEwKQorCQkJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZHVsYXRpb24gPSBTVFYwOTAwXzE2QVBTSzsKKwkJCWVsc2UgaWYgKGlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZGNvZGUgPD0gU1RWMDkwMF8zMkFQU0tfOTEwKQorCQkJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZHVsYXRpb24gPSBTVFYwOTAwXzMyQVBTSzsKKwkJCWVsc2UKKwkJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2R1bGF0aW9uID0gU1RWMDkwMF9VTktOT1dOOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9EVkJTMV9TVEFOREFSRDoKKwkJY2FzZSBTVFYwOTAwX0RTU19TVEFOREFSRDoKKwkJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLnNwZWN0cnVtID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfSVFJTlYpOworCQkJaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kdWxhdGlvbiA9IFNUVjA5MDBfUVBTSzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlpZiAoKGlfcGFyYW1zLT5kbWQyX3NyY2hfYWxnbyA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkgfHwgKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlIDwgMTAwMDAwMDApKSB7CisJCQlvZmZzZXRGcmVxID0JaV9wYXJhbXMtPmRtZDJfcnNsdHMuZnJlcXVlbmN5IC0gaV9wYXJhbXMtPnR1bmVyMl9mcmVxOworCQkJaV9wYXJhbXMtPnR1bmVyMl9mcmVxID0gc3R2MDkwMF9nZXRfdHVuZXJfZnJlcShmZSk7CisKKwkJCWlmIChBQlMob2Zmc2V0RnJlcSkgPD0gKChpX3BhcmFtcy0+ZG1kMl9zcmNoX3JhbmdlIC8gMjAwMCkgKyA1MDApKQorCQkJCXJhbmdlID0gU1RWMDkwMF9SQU5HRU9LOworCQkJZWxzZQorCQkJCWlmIChBQlMob2Zmc2V0RnJlcSkgPD0gKHN0djA5MDBfY2Fycmllcl93aWR0aChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zeW1ib2xfcmF0ZSwgaV9wYXJhbXMtPmRtZDJfcnNsdHMucm9sbG9mZikgLyAyMDAwKSkKKwkJCQkJcmFuZ2UgPSBTVFYwOTAwX1JBTkdFT0s7CisJCQkJZWxzZQorCQkJCQlyYW5nZSA9IFNUVjA5MDBfT1VUT0ZSQU5HRTsKKwkJfSBlbHNlIHsKKwkJCWlmIChBQlMob2Zmc2V0RnJlcSkgPD0gKChpX3BhcmFtcy0+ZG1kMl9zcmNoX3JhbmdlIC8gMjAwMCkgKyA1MDApKQorCQkJCXJhbmdlID0gU1RWMDkwMF9SQU5HRU9LOworCQkJZWxzZQorCQkJCXJhbmdlID0gU1RWMDkwMF9PVVRPRlJBTkdFOworCQl9CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJhbmdlOworfQorCitzdGF0aWMgZW51bSBmZV9zdHYwOTAwX3NpZ25hbF90eXBlIHN0djA5MDBfZHZiczFfYWNxX3dvcmthcm91bmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QgPSBzdGF0ZS0+ZGVtb2Q7CisKKwlzMzIgc3JhdGUsIGRlbW9kX3RpbWVvdXQsCisJCWZlY190aW1lb3V0LCBmcmVxMSwgZnJlcTA7CisJZW51bSBmZV9zdHYwOTAwX3NpZ25hbF90eXBlIHNpZ25hbF90eXBlID0gU1RWMDkwMF9OT0RBVEE7OworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLmxvY2tlZCA9IEZBTFNFOworCQlpZiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfSEVBREVSX01PREUpID09IFNUVjA5MDBfRFZCU19GT1VORCkgeworCQkJc3JhdGUgPSBzdHYwOTAwX2dldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGRlbW9kKTsKKwkJCXNyYXRlICs9IHN0djA5MDBfZ2V0X3RpbWluZ19vZmZzdChpX3BhcmFtcywgc3JhdGUsIGRlbW9kKTsKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMV9zcmNoX2FsZ28gPT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpCisJCQkJc3R2MDkwMF9zZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBzcmF0ZSwgZGVtb2QpOworCisJCQlzdHYwOTAwX2dldF9sb2NrX3RpbWVvdXQoJmRlbW9kX3RpbWVvdXQsICZmZWNfdGltZW91dCwgc3JhdGUsIFNUVjA5MDBfV0FSTV9TVEFSVCk7CisJCQlmcmVxMSA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUjIpOworCQkJZnJlcTAgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlIxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfQ0ZSX0FVVE9TQ0FOLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfU1BFQ0lOVl9DT05UUk9MLCBTVFYwOTAwX0lRX0ZPUkNFX1NXQVBQRUQpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxQyk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDEsIGZyZXExKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMCwgZnJlcTApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxOCk7CisJCQlpZiAoc3R2MDkwMF93YWl0X2Zvcl9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgZGVtb2RfdGltZW91dCwgZmVjX3RpbWVvdXQpID09IFRSVUUpIHsKKwkJCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5sb2NrZWQgPSBUUlVFOworCQkJCXNpZ25hbF90eXBlID0gc3R2MDkwMF9nZXRfc2lnbmFsX3BhcmFtcyhmZSk7CisJCQkJc3R2MDkwMF90cmFja19vcHRpbWl6YXRpb24oZmUpOworCQkJfSBlbHNlIHsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1NQRUNJTlZfQ09OVFJPTCwgU1RWMDkwMF9JUV9GT1JDRV9OT1JNQUwpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MWMpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMSwgZnJlcTEpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMCwgZnJlcTApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MTgpOworCQkJCWlmIChzdHYwOTAwX3dhaXRfZm9yX2xvY2soaV9wYXJhbXMsIGRlbW9kLCBkZW1vZF90aW1lb3V0LCBmZWNfdGltZW91dCkgPT0gVFJVRSkgeworCQkJCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5sb2NrZWQgPSBUUlVFOworCQkJCQlzaWduYWxfdHlwZSA9IHN0djA5MDBfZ2V0X3NpZ25hbF9wYXJhbXMoZmUpOworCQkJCQlzdHYwOTAwX3RyYWNrX29wdGltaXphdGlvbihmZSk7CisJCQkJfQorCisJCQl9CisKKwkJfSBlbHNlCisJCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5sb2NrZWQgPSBGQUxTRTsKKworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJaV9wYXJhbXMtPmRtZDJfcnNsdHMubG9ja2VkID0gRkFMU0U7CisJCWlmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9IRUFERVJfTU9ERSkgPT0gU1RWMDkwMF9EVkJTX0ZPVU5EKSB7CisJCQlzcmF0ZSA9IHN0djA5MDBfZ2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgZGVtb2QpOworCQkJc3JhdGUgKz0gc3R2MDkwMF9nZXRfdGltaW5nX29mZnN0KGlfcGFyYW1zLCBzcmF0ZSwgZGVtb2QpOworCisJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKQorCQkJCXN0djA5MDBfc2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgc3JhdGUsIGRlbW9kKTsKKworCQkJc3R2MDkwMF9nZXRfbG9ja190aW1lb3V0KCZkZW1vZF90aW1lb3V0LCAmZmVjX3RpbWVvdXQsIHNyYXRlLCBTVFYwOTAwX1dBUk1fU1RBUlQpOworCQkJZnJlcTEgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlIyKTsKKwkJCWZyZXEwID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0NGUl9BVVRPU0NBTiwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1NQRUNJTlZfQ09OVFJPTCwgU1RWMDkwMF9JUV9GT1JDRV9TV0FQUEVEKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MUMpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQxLCBmcmVxMSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDAsIGZyZXEwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MTgpOworCisJCQlpZiAoc3R2MDkwMF93YWl0X2Zvcl9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgZGVtb2RfdGltZW91dCwgZmVjX3RpbWVvdXQpID09IFRSVUUpIHsKKwkJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5sb2NrZWQgPSBUUlVFOworCQkJCXNpZ25hbF90eXBlID0gc3R2MDkwMF9nZXRfc2lnbmFsX3BhcmFtcyhmZSk7CisJCQkJc3R2MDkwMF90cmFja19vcHRpbWl6YXRpb24oZmUpOworCQkJfSBlbHNlIHsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1NQRUNJTlZfQ09OVFJPTCwgU1RWMDkwMF9JUV9GT1JDRV9OT1JNQUwpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MWMpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMSwgZnJlcTEpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMCwgZnJlcTApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MTgpOworCisJCQkJaWYgKHN0djA5MDBfd2FpdF9mb3JfbG9jayhpX3BhcmFtcywgZGVtb2QsIGRlbW9kX3RpbWVvdXQsIGZlY190aW1lb3V0KSA9PSBUUlVFKSB7CisJCQkJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLmxvY2tlZCA9IFRSVUU7CisJCQkJCXNpZ25hbF90eXBlID0gc3R2MDkwMF9nZXRfc2lnbmFsX3BhcmFtcyhmZSk7CisJCQkJCXN0djA5MDBfdHJhY2tfb3B0aW1pemF0aW9uKGZlKTsKKwkJCQl9CisKKwkJCX0KKworCQl9IGVsc2UKKwkJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLmxvY2tlZCA9IEZBTFNFOworCisJCWJyZWFrOworCX0KKworCXJldHVybiBzaWduYWxfdHlwZTsKK30KKworc3RhdGljIHUxNiBzdHYwOTAwX2JsaW5kX2NoZWNrX2FnYzJfbWluX2xldmVsKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwl1MzIgbWluYWdjMmxldmVsID0gMHhmZmZmLAorCQlhZ2MybGV2ZWwsCisJCWluaXRfZnJlcSwgZnJlcV9zdGVwOworCisJczMyIGksIGosIG5iX3N0ZXBzLCBkaXJlY3Rpb247CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUdDMlJFRiwgMHgzOCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfU0NBTl9FTkFCTEUsIDEpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0NGUl9BVVRPU0NBTiwgMSk7CisKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUlVQMSwgMHg4Myk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJVUDAsIDB4YzApOworCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJMT1cxLCAweDgyKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUkxPVzAsIDB4YTApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1EVDBNLCAweDApOworCisJCXN0djA5MDBfc2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgMTAwMDAwMCwgZGVtb2QpOworCQluYl9zdGVwcyA9IC0xICsgKGlfcGFyYW1zLT5kbWQxX3NyY2hfcmFuZ2UgLyAxMDAwMDAwKTsKKwkJbmJfc3RlcHMgLz0gMjsKKwkJbmJfc3RlcHMgPSAoMiAqIG5iX3N0ZXBzKSArIDE7CisKKwkJaWYgKG5iX3N0ZXBzIDwgMCkKKwkJCW5iX3N0ZXBzID0gMTsKKworCQlkaXJlY3Rpb24gPSAxOworCisJCWZyZXFfc3RlcCA9ICgxMDAwMDAwIDw8IDgpIC8gKGlfcGFyYW1zLT5tY2xrID4+IDgpOworCisJCWluaXRfZnJlcSA9IDA7CisKKwkJZm9yIChpID0gMDsgaSA8IG5iX3N0ZXBzOyBpKyspIHsKKwkJCWlmIChkaXJlY3Rpb24gPiAwKQorCQkJCWluaXRfZnJlcSA9IGluaXRfZnJlcSArIChmcmVxX3N0ZXAgKiBpKTsKKwkJCWVsc2UKKwkJCQlpbml0X2ZyZXEgPSBpbml0X2ZyZXEgLSAoZnJlcV9zdGVwICogaSk7CisKKwkJCWRpcmVjdGlvbiAqPSAtMTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4NUMpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQxLCAoaW5pdF9mcmVxID4+IDgpICYgMHhmZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDAsIGluaXRfZnJlcSAgJiAweGZmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4NTgpOworCQkJbXNsZWVwKDEwKTsKKwkJCWFnYzJsZXZlbCA9IDA7CisKKwkJCWZvciAoaiA9IDA7IGogPCAxMDsgaisrKQorCQkJCWFnYzJsZXZlbCArPSAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUdDMkkxKSA8PCA4KQorCQkJCQkJfCBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BR0MySTApOworCisJCQlhZ2MybGV2ZWwgLz0gMTA7CisKKwkJCWlmIChhZ2MybGV2ZWwgPCBtaW5hZ2MybGV2ZWwpCisJCQkJbWluYWdjMmxldmVsID0gYWdjMmxldmVsOworCQl9CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUdDMlJFRiwgMHgzOCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfU0NBTl9FTkFCTEUsIDEpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0NGUl9BVVRPU0NBTiwgMSk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJVUDEsIDB4ODMpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSVVAwLCAweGMwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUkxPVzEsIDB4ODIpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSTE9XMCwgMHhhMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURUME0sIDB4MCk7CisJCXN0djA5MDBfc2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgMTAwMDAwMCwgZGVtb2QpOworCQluYl9zdGVwcyA9IC0xICsgKGlfcGFyYW1zLT5kbWQyX3NyY2hfcmFuZ2UgLyAxMDAwMDAwKTsKKwkJbmJfc3RlcHMgLz0gMjsKKwkJbmJfc3RlcHMgPSAoMiAqIG5iX3N0ZXBzKSArIDE7CisKKwkJaWYgKG5iX3N0ZXBzIDwgMCkKKwkJCW5iX3N0ZXBzID0gMTsKKworCQlkaXJlY3Rpb24gPSAxOworCQlmcmVxX3N0ZXAgPSAoMTAwMDAwMCA8PCA4KSAvIChpX3BhcmFtcy0+bWNsayA+PiA4KTsKKwkJaW5pdF9mcmVxID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IG5iX3N0ZXBzOyBpKyspIHsKKwkJCWlmIChkaXJlY3Rpb24gPiAwKQorCQkJCWluaXRfZnJlcSA9IGluaXRfZnJlcSArIChmcmVxX3N0ZXAgKiBpKTsKKwkJCWVsc2UKKwkJCQlpbml0X2ZyZXEgPSBpbml0X2ZyZXEgLSAoZnJlcV9zdGVwICogaSk7CisKKwkJCWRpcmVjdGlvbiAqPSAtMTsKKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHg1Qyk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDEsIChpbml0X2ZyZXEgPj4gOCkgJiAweGZmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMCwgaW5pdF9mcmVxICAmIDB4ZmYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHg1OCk7CisKKwkJCW1zbGVlcCgxMCk7CisJCQlhZ2MybGV2ZWwgPSAwOworCQkJZm9yIChqID0gMDsgaiA8IDEwOyBqKyspCisJCQkJYWdjMmxldmVsICs9IChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BR0MySTEpIDw8IDgpCisJCQkJCQl8IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FHQzJJMCk7CisKKwkJCWFnYzJsZXZlbCAvPSAxMDsKKworCQkJaWYgKGFnYzJsZXZlbCA8IG1pbmFnYzJsZXZlbCkKKwkJCQltaW5hZ2MybGV2ZWwgPSBhZ2MybGV2ZWw7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuICh1MTYpbWluYWdjMmxldmVsOworfQorCitzdGF0aWMgdTMyIHN0djA5MDBfc2VhcmNoX3NyYXRlX2NvYXJzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKwlpbnQgdGltaW5nTG9jayA9IEZBTFNFOworCXMzMiBpLCB0aW1pbmdjcHQgPSAwLAorCQlkaXJlY3Rpb24gPSAxLAorCQluYl9zdGVwcywKKwkJY3VycmVudF9zdGVwID0gMCwKKwkJdHVuZXJfZnJlcTsKKworCXUzMiBjb2Fyc2Vfc3JhdGUgPSAwLCBhZ2MyX2ludGVnciA9IDAsIGN1cnJpZXJfc3RlcCA9IDEyMDA7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9JMkNfREVNT0RfTU9ERSwgMHgxRik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdDRkcsIDB4MTIpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HVEhSSVNFLCAweGYwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR1RIRkFMTCwgMHhlMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfU0NBTl9FTkFCTEUsIDEpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0NGUl9BVVRPU0NBTiwgMSk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJVUDEsIDB4ODMpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSVVAwLCAweGMwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUkxPVzEsIDB4ODIpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSTE9XMCwgMHhhMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURUME0sIDB4MCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BR0MyUkVGLCAweDUwKTsKKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsIDB4NmEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUlNURVAsIDB4OTUpOworCQl9IGVsc2UgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsIDB4ZWQpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUlNURVAsIDB4NzMpOworCQl9CisKKwkJaWYgKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlIDw9IDIwMDAwMDApCisJCQljdXJyaWVyX3N0ZXAgPSAxMDAwOworCQllbHNlIGlmIChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSA8PSA1MDAwMDAwKQorCQkJY3Vycmllcl9zdGVwID0gMjAwMDsKKwkJZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUgPD0gMTIwMDAwMDApCisJCQljdXJyaWVyX3N0ZXAgPSAzMDAwOworCQllbHNlCisJCQljdXJyaWVyX3N0ZXAgPSA1MDAwOworCisJCW5iX3N0ZXBzID0gLTEgKyAoKGlfcGFyYW1zLT5kbWQxX3NyY2hfcmFuZ2UgLyAxMDAwKSAvIGN1cnJpZXJfc3RlcCk7CisJCW5iX3N0ZXBzIC89IDI7CisJCW5iX3N0ZXBzID0gKDIgKiBuYl9zdGVwcykgKyAxOworCisJCWlmIChuYl9zdGVwcyA8IDApCisJCQluYl9zdGVwcyA9IDE7CisKKwkJZWxzZSBpZiAobmJfc3RlcHMgPiAxMCkgeworCQkJbmJfc3RlcHMgPSAxMTsKKwkJCWN1cnJpZXJfc3RlcCA9IChpX3BhcmFtcy0+ZG1kMV9zcmNoX3JhbmdlIC8gMTAwMCkgLyAxMDsKKwkJfQorCisJCWN1cnJlbnRfc3RlcCA9IDA7CisKKwkJZGlyZWN0aW9uID0gMTsKKwkJdHVuZXJfZnJlcSA9IGlfcGFyYW1zLT50dW5lcjFfZnJlcTsKKworCQl3aGlsZSAoKHRpbWluZ0xvY2sgPT0gRkFMU0UpICYmIChjdXJyZW50X3N0ZXAgPCBuYl9zdGVwcykpIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4NUYpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9JMkNfREVNT0RfTU9ERSwgMHgwKTsKKworCQkJbXNsZWVwKDUwKTsKKworCQkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJCQlpZiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfVE1HTE9DS19RVUFMSVRZKSA+PSAyKQorCQkJCQl0aW1pbmdjcHQrKzsKKworCQkJCWFnYzJfaW50ZWdyICs9IChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BR0MySTEpIDw8IDgpIHwgc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUdDMkkwKTsKKworCQkJfQorCisJCQlhZ2MyX2ludGVnciAvPSAxMDsKKwkJCWNvYXJzZV9zcmF0ZSA9IHN0djA5MDBfZ2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgZGVtb2QpOworCQkJY3VycmVudF9zdGVwKys7CisJCQlkaXJlY3Rpb24gKj0gLTE7CisKKwkJCWRwcmludGsoImxvY2s6IEkyQ19ERU1PRF9NT0RFX0ZJRUxEID0wLiBTZWFyY2ggc3RhcnRlZC4gdHVuZXIgZnJlcT0lZCBhZ2MyPTB4JXggc3JhdGVfY29hcnNlPSVkIHRtZ19jcHQ9JWRcbiIsIHR1bmVyX2ZyZXEsIGFnYzJfaW50ZWdyLCBjb2Fyc2Vfc3JhdGUsIHRpbWluZ2NwdCk7CisKKwkJCWlmICgodGltaW5nY3B0ID49IDUpICYmIChhZ2MyX2ludGVnciA8IDB4MUYwMCkgJiYgKGNvYXJzZV9zcmF0ZSA8IDU1MDAwMDAwKSAmJiAoY29hcnNlX3NyYXRlID4gODUwMDAwKSkgeworCQkJCXRpbWluZ0xvY2sgPSBUUlVFOworCQkJfQorCisJCQllbHNlIGlmIChjdXJyZW50X3N0ZXAgPCBuYl9zdGVwcykgeworCQkJCWlmIChkaXJlY3Rpb24gPiAwKQorCQkJCQl0dW5lcl9mcmVxICs9IChjdXJyZW50X3N0ZXAgKiBjdXJyaWVyX3N0ZXApOworCQkJCWVsc2UKKwkJCQkJdHVuZXJfZnJlcSAtPSAoY3VycmVudF9zdGVwICogY3Vycmllcl9zdGVwKTsKKworCQkJCXN0djA5MDBfc2V0X3R1bmVyKGZlLCB0dW5lcl9mcmVxLCBpX3BhcmFtcy0+dHVuZXIxX2J3KTsKKwkJCX0KKwkJfQorCisJCWlmICh0aW1pbmdMb2NrID09IEZBTFNFKQorCQkJY29hcnNlX3NyYXRlID0gMDsKKwkJZWxzZQorCQkJY29hcnNlX3NyYXRlID0gc3R2MDkwMF9nZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBkZW1vZCk7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0kyQ19ERU1PRF9NT0RFLCAweDFGKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR0NGRywgMHgxMik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdUSFJJU0UsIDB4ZjApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HVEhGQUxMLCAweGUwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9TQ0FOX0VOQUJMRSwgMSk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfQ0ZSX0FVVE9TQ0FOLCAxKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUlVQMSwgMHg4Myk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJVUDAsIDB4YzApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSTE9XMSwgMHg4Mik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJMT1cwLCAweGEwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRFQwTSwgMHgwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FHQzJSRUYsIDB4NTApOworCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwgMHg2YSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSU1RFUCwgMHg5NSk7CisJCX0gZWxzZSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwgMHhlZCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSU1RFUCwgMHg3Myk7CisJCX0KKworCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPD0gMjAwMDAwMCkKKwkJCWN1cnJpZXJfc3RlcCA9IDEwMDA7CisJCWVsc2UgaWYgKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlIDw9IDUwMDAwMDApCisJCQljdXJyaWVyX3N0ZXAgPSAyMDAwOworCQllbHNlIGlmIChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSA8PSAxMjAwMDAwMCkKKwkJCWN1cnJpZXJfc3RlcCA9IDMwMDA7CisJCWVsc2UKKwkJCWN1cnJpZXJfc3RlcCA9IDUwMDA7CisKKworCQluYl9zdGVwcyA9IC0xICsgKChpX3BhcmFtcy0+ZG1kMl9zcmNoX3JhbmdlIC8gMTAwMCkgLyBjdXJyaWVyX3N0ZXApOworCQluYl9zdGVwcyAvPSAyOworCQluYl9zdGVwcyA9ICgyICogbmJfc3RlcHMpICsgMTsKKworCQlpZiAobmJfc3RlcHMgPCAwKQorCQkJbmJfc3RlcHMgPSAxOworCQllbHNlIGlmIChuYl9zdGVwcyA+IDEwKSB7CisJCQluYl9zdGVwcyA9IDExOworCQkJY3Vycmllcl9zdGVwID0gKGlfcGFyYW1zLT5kbWQyX3NyY2hfcmFuZ2UgLyAxMDAwKSAvIDEwOworCQl9CisKKwkJY3VycmVudF9zdGVwID0gMDsKKwkJZGlyZWN0aW9uID0gMTsKKwkJdHVuZXJfZnJlcSA9IGlfcGFyYW1zLT50dW5lcjJfZnJlcTsKKworCQl3aGlsZSAoKHRpbWluZ0xvY2sgPT0gRkFMU0UpICYmIChjdXJyZW50X3N0ZXAgPCBuYl9zdGVwcykpIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4NUYpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9JMkNfREVNT0RfTU9ERSwgMHgwKTsKKworCQkJbXNsZWVwKDUwKTsKKwkJCXRpbWluZ2NwdCA9IDA7CisKKwkJCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKSB7CisJCQkJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1RNR0xPQ0tfUVVBTElUWSkgPj0gMikKKwkJCQkJdGltaW5nY3B0Kys7CisJCQkJYWdjMl9pbnRlZ3IgKz0gKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FHQzJJMSkgPDwgOCkKKwkJCQkJCQkJfCBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BR0MySTApOworCQkJfQorCisJCQlhZ2MyX2ludGVnciAvPSAyMDsKKwkJCWNvYXJzZV9zcmF0ZSA9IHN0djA5MDBfZ2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgZGVtb2QpOworCQkJaWYgKCh0aW1pbmdjcHQgPj0gMTApICYmIChhZ2MyX2ludGVnciA8IDB4MUYwMCkgJiYgKGNvYXJzZV9zcmF0ZSA8IDU1MDAwMDAwKSAmJiAoY29hcnNlX3NyYXRlID4gODUwMDAwKSkKKwkJCQl0aW1pbmdMb2NrID0gVFJVRTsKKwkJCWVsc2UgeworCQkJCWN1cnJlbnRfc3RlcCsrOworCQkJCWRpcmVjdGlvbiAqPSAtMTsKKworCQkJCWlmIChkaXJlY3Rpb24gPiAwKQorCQkJCQl0dW5lcl9mcmVxICs9IChjdXJyZW50X3N0ZXAgKiBjdXJyaWVyX3N0ZXApOworCQkJCWVsc2UKKwkJCQkJdHVuZXJfZnJlcSAtPSAoY3VycmVudF9zdGVwICogY3Vycmllcl9zdGVwKTsKKworCQkJCXN0djA5MDBfc2V0X3R1bmVyKGZlLCB0dW5lcl9mcmVxLCBpX3BhcmFtcy0+dHVuZXIyX2J3KTsKKwkJCX0KKwkJfQorCisJCWlmICh0aW1pbmdMb2NrID09IEZBTFNFKQorCQkJY29hcnNlX3NyYXRlID0gMDsKKwkJZWxzZQorCQkJY29hcnNlX3NyYXRlID0gc3R2MDkwMF9nZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBkZW1vZCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBjb2Fyc2Vfc3JhdGU7Cit9CisKK3N0YXRpYyB1MzIgc3R2MDkwMF9zZWFyY2hfc3JhdGVfZmluZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKwl1MzIgY29hcnNlX3NyYXRlLAorCWNvYXJzZV9mcmVxLAorCXN5bWI7CisKKwljb2Fyc2Vfc3JhdGUgPSBzdHYwOTAwX2dldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGRlbW9kKTsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQljb2Fyc2VfZnJlcSA9IChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlIyKSA8PCA4KQorCQkJCQkJfCBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlIxKTsKKwkJc3ltYiA9IDEzICogKGNvYXJzZV9zcmF0ZSAvIDEwKTsKKworCQlpZiAoc3ltYiA8IGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlKQorCQkJY29hcnNlX3NyYXRlID0gMDsKKwkJZWxzZSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDFGKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdDRkcyLCAweDAxKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdUSFJJU0UsIDB4MjApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR1RIRkFMTCwgMHgwMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HQ0ZHLCAweGQyKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfQ0ZSX0FVVE9TQ0FOLCAwKTsKKworCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsIDB4NDkpOworCQkJZWxzZQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLCAweGVkKTsKKworCQkJaWYgKGNvYXJzZV9zcmF0ZSA+IDMwMDAwMDApIHsKKwkJCQlzeW1iID0gMTMgKiAoY29hcnNlX3NyYXRlIC8gMTApOworCQkJCXN5bWIgPSAoc3ltYiAvIDEwMDApICogNjU1MzY7CisJCQkJc3ltYiAvPSAoaV9wYXJhbXMtPm1jbGsgLyAxMDAwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSVVAxLCAoc3ltYiA+PiA4KSAmIDB4N0YpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJVUDAsIChzeW1iICYgMHhGRikpOworCisJCQkJc3ltYiA9IDEwICogKGNvYXJzZV9zcmF0ZSAvIDEzKTsKKwkJCQlzeW1iID0gKHN5bWIgLyAxMDAwKSAqIDY1NTM2OworCQkJCXN5bWIgLz0gKGlfcGFyYW1zLT5tY2xrIC8gMTAwMCk7CisKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSTE9XMSwgKHN5bWIgPj4gOCkgJiAweDdGKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSTE9XMCwgKHN5bWIgJiAweEZGKSk7CisKKwkJCQlzeW1iID0gKGNvYXJzZV9zcmF0ZSAvIDEwMDApICogNjU1MzY7CisJCQkJc3ltYiAvPSAoaV9wYXJhbXMtPm1jbGsgLyAxMDAwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSSU5JVDEsIChzeW1iID4+IDgpICYgMHhGRik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUklOSVQwLCAoc3ltYiAmIDB4RkYpKTsKKwkJCX0gZWxzZSB7CisJCQkJc3ltYiA9IDEzICogKGNvYXJzZV9zcmF0ZSAvIDEwKTsKKwkJCQlzeW1iID0gKHN5bWIgLyAxMDApICogNjU1MzY7CisJCQkJc3ltYiAvPSAoaV9wYXJhbXMtPm1jbGsgLyAxMDApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJVUDEsIChzeW1iID4+IDgpICYgMHg3Rik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUlVQMCwgKHN5bWIgJiAweEZGKSk7CisKKwkJCQlzeW1iID0gMTAgKiAoY29hcnNlX3NyYXRlIC8gMTQpOworCQkJCXN5bWIgPSAoc3ltYiAvIDEwMCkgKiA2NTUzNjsKKwkJCQlzeW1iIC89IChpX3BhcmFtcy0+bWNsayAvIDEwMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUkxPVzEsIChzeW1iID4+IDgpICYgMHg3Rik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUkxPVzAsIChzeW1iICYgMHhGRikpOworCisJCQkJc3ltYiA9IChjb2Fyc2Vfc3JhdGUgLyAxMDApICogNjU1MzY7CisJCQkJc3ltYiAvPSAoaV9wYXJhbXMtPm1jbGsgLyAxMDApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJJTklUMSwgKHN5bWIgPj4gOCkgJiAweEZGKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSSU5JVDAsIChzeW1iICYgMHhGRikpOworCQkJfQorCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1EVDBNLCAweDIwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMSwgKGNvYXJzZV9mcmVxID4+IDgpICYgMHhmZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDAsIGNvYXJzZV9mcmVxICAmIDB4ZmYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxNSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCWNvYXJzZV9mcmVxID0gKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUjIpIDw8IDgpCisJCQkJCQl8IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUjEpOworCisJCXN5bWIgPSAxMyAqIChjb2Fyc2Vfc3JhdGUgLyAxMCk7CisKKwkJaWYgKHN5bWIgPCBpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSkKKwkJCWNvYXJzZV9zcmF0ZSA9IDA7CisJCWVsc2UgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxRik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HQ0ZHMiwgMHgwMSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HVEhSSVNFLCAweDIwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdUSEZBTEwsIDB4MDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR0NGRywgMHhkMik7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0NGUl9BVVRPU0NBTiwgMCk7CisKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRLCAweDQ5KTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwgMHhlZCk7CisKKwkJCWlmIChjb2Fyc2Vfc3JhdGUgPiAzMDAwMDAwKSB7CisJCQkJc3ltYiA9IDEzICogKGNvYXJzZV9zcmF0ZSAvIDEwKTsKKwkJCQlzeW1iID0gKHN5bWIgLyAxMDAwKSAqIDY1NTM2OworCQkJCXN5bWIgLz0gKGlfcGFyYW1zLT5tY2xrIC8gMTAwMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUlVQMSwgKHN5bWIgPj4gOCkgJiAweDdGKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSVVAwLCAoc3ltYiAmIDB4RkYpKTsKKworCQkJCXN5bWIgPSAxMCAqIChjb2Fyc2Vfc3JhdGUgLyAxMyk7CisJCQkJc3ltYiA9IChzeW1iIC8gMTAwMCkgKiA2NTUzNjsKKwkJCQlzeW1iIC89IChpX3BhcmFtcy0+bWNsayAvIDEwMDApOworCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUkxPVzEsIChzeW1iID4+IDgpICYgMHg3Rik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUkxPVzAsIChzeW1iICYgMHhGRikpOworCisJCQkJc3ltYiA9IChjb2Fyc2Vfc3JhdGUgLyAxMDAwKSAqIDY1NTM2OworCQkJCXN5bWIgLz0gKGlfcGFyYW1zLT5tY2xrIC8gMTAwMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUklOSVQxLCAoc3ltYiA+PiA4KSAmIDB4RkYpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJJTklUMCwgKHN5bWIgJiAweEZGKSk7CisJCQl9IGVsc2UgeworCQkJCXN5bWIgPSAxMyAqIChjb2Fyc2Vfc3JhdGUgLyAxMCk7CisJCQkJc3ltYiA9IChzeW1iIC8gMTAwKSAqIDY1NTM2OworCQkJCXN5bWIgLz0gKGlfcGFyYW1zLT5tY2xrIC8gMTAwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSVVAxLCAoc3ltYiA+PiA4KSAmIDB4N0YpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJVUDAsIChzeW1iICYgMHhGRikpOworCisJCQkJc3ltYiA9IDEwICogKGNvYXJzZV9zcmF0ZSAvIDE0KTsKKwkJCQlzeW1iID0gKHN5bWIgLyAxMDApICogNjU1MzY7CisJCQkJc3ltYiAvPSAoaV9wYXJhbXMtPm1jbGsgLyAxMDApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJMT1cxLCAoc3ltYiA+PiA4KSAmIDB4N0YpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJMT1cwLCAoc3ltYiAmIDB4RkYpKTsKKworCQkJCXN5bWIgPSAoY29hcnNlX3NyYXRlIC8gMTAwKSAqIDY1NTM2OworCQkJCXN5bWIgLz0gKGlfcGFyYW1zLT5tY2xrIC8gMTAwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSSU5JVDEsIChzeW1iID4+IDgpICYgMHhGRik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUklOSVQwLCAoc3ltYiAmIDB4RkYpKTsKKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRFQwTSwgMHgyMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDEsIChjb2Fyc2VfZnJlcSA+PiA4KSAmIDB4ZmYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQwLCBjb2Fyc2VfZnJlcSAgJiAweGZmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MTUpOworCQl9CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNvYXJzZV9zcmF0ZTsKK30KKworc3RhdGljIGludCBzdHYwOTAwX2JsaW5kX3NlYXJjaF9hbGdvKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kID0gc3RhdGUtPmRlbW9kOworCXU4IGtfcmVmX3RtZywga19yZWZfdG1nX21heCwga19yZWZfdG1nX21pbjsKKwl1MzIgY29hcnNlX3NyYXRlOworCWludCBsb2NrID0gRkFMU0UsIGNvYXJzZV9mYWlsID0gRkFMU0U7CisJczMyIGRlbW9kX3RpbWVvdXQgPSA1MDAsIGZlY190aW1lb3V0ID0gNTAsIGtyZWZfdG1nX3JlZywgZmFpbF9jcHQsIGksIGFnYzJfb3ZlcmZsb3c7CisJdTE2IGFnYzJfaW50ZWdyOworCXU4IGRzdGF0dXMyOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPCAweDIwKSB7CisJCWtfcmVmX3RtZ19tYXggPSAyMzM7CisJCWtfcmVmX3RtZ19taW4gPSAxNDM7CisJfSBlbHNlIHsKKwkJa19yZWZfdG1nX21heCA9IDEyMDsKKwkJa19yZWZfdG1nX21pbiA9IDMwOworCX0KKworCWFnYzJfaW50ZWdyID0gc3R2MDkwMF9ibGluZF9jaGVja19hZ2MyX21pbl9sZXZlbChpX3BhcmFtcywgZGVtb2QpOworCisJaWYgKGFnYzJfaW50ZWdyID4gU1RWMDkwMF9CTElORF9TRUFSQ0hfQUdDMl9USCkgeworCQlsb2NrID0gRkFMU0U7CisKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGRlbW9kKSB7CisJCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCQlkZWZhdWx0OgorCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID09IDB4MTApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTEVYUCwgMHhBQSk7CisKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA8IDB4MjApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkhEUiwgMHg1NSk7CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJDRkcsIDB4QzQpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1JUQ1MyLCAweDQ0KTsKKworCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRVFVQUxDRkcsIDB4NDEpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9GRkVDRkcsIDB4NDEpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9WSVRTQ0FMRSwgMHg4Mik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1ZBVlNSVklULCAweDApOworCQkJfQorCisJCQlrcmVmX3RtZ19yZWcgPSBSMDkwMF9QMV9LUkVGVE1HOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID09IDB4MTApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NPUlJFTEVYUCwgMHhBQSk7CisKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA8IDB4MjApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkhEUiwgMHg1NSk7CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJDRkcsIDB4QzQpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1JUQ1MyLCAweDQ0KTsKKworCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRVFVQUxDRkcsIDB4NDEpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9GRkVDRkcsIDB4NDEpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9WSVRTQ0FMRSwgMHg4Mik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1ZBVlNSVklULCAweDApOworCQkJfQorCisJCQlrcmVmX3RtZ19yZWcgPSBSMDkwMF9QMl9LUkVGVE1HOworCQkJYnJlYWs7CisJCX0KKworCQlrX3JlZl90bWcgPSBrX3JlZl90bWdfbWF4OworCisJCWRvIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBrcmVmX3RtZ19yZWcsIGtfcmVmX3RtZyk7CisJCQlpZiAoc3R2MDkwMF9zZWFyY2hfc3JhdGVfY29hcnNlKGZlKSAhPSAwKSB7CisJCQkJY29hcnNlX3NyYXRlID0gc3R2MDkwMF9zZWFyY2hfc3JhdGVfZmluZShmZSk7CisKKwkJCQlpZiAoY29hcnNlX3NyYXRlICE9IDApIHsKKwkJCQkJc3R2MDkwMF9nZXRfbG9ja190aW1lb3V0KCZkZW1vZF90aW1lb3V0LCAmZmVjX3RpbWVvdXQsIGNvYXJzZV9zcmF0ZSwgU1RWMDkwMF9CTElORF9TRUFSQ0gpOworCQkJCQlsb2NrID0gc3R2MDkwMF9nZXRfZGVtb2RfbG9jayhpX3BhcmFtcywgZGVtb2QsIGRlbW9kX3RpbWVvdXQpOworCQkJCX0gZWxzZQorCQkJCQlsb2NrID0gRkFMU0U7CisJCQl9IGVsc2UgeworCQkJCWZhaWxfY3B0ID0gMDsKKwkJCQlhZ2MyX292ZXJmbG93ID0gMDsKKworCQkJCXN3aXRjaCAoZGVtb2QpIHsKKwkJCQljYXNlIFNUVjA5MDBfREVNT0RfMToKKwkJCQlkZWZhdWx0OgorCQkJCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQkJCQkJYWdjMl9pbnRlZ3IgPSAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUdDMkkxKSA8PCA4KQorCQkJCQkJCQl8IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJJMCk7CisKKwkJCQkJCWlmIChhZ2MyX2ludGVnciA+PSAweGZmMDApCisJCQkJCQkJYWdjMl9vdmVyZmxvdysrOworCisJCQkJCQlkc3RhdHVzMiA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RTVEFUVVMyKTsKKworCQkJCQkJaWYgKCgoZHN0YXR1czIgJiAweDEpID09IDB4MSkgJiYgKChkc3RhdHVzMiA+PiA3KSA9PSAxKSkKKwkJCQkJCQlmYWlsX2NwdCsrOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQkJCQkJYWdjMl9pbnRlZ3IgPSAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUdDMkkxKSA8PCA4KQorCQkJCQkJCQl8IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FHQzJJMCk7CisKKwkJCQkJCWlmIChhZ2MyX2ludGVnciA+PSAweGZmMDApCisJCQkJCQkJYWdjMl9vdmVyZmxvdysrOworCisJCQkJCQlkc3RhdHVzMiA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RTVEFUVVMyKTsKKworCQkJCQkJaWYgKCgoZHN0YXR1czIgJiAweDEpID09IDB4MSkgJiYgKChkc3RhdHVzMiA+PiA3KSA9PSAxKSkKKwkJCQkJCQlmYWlsX2NwdCsrOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCWlmICgoZmFpbF9jcHQgPiA3KSB8fCAoYWdjMl9vdmVyZmxvdyA+IDcpKQorCQkJCQljb2Fyc2VfZmFpbCA9IFRSVUU7CisKKwkJCQlsb2NrID0gRkFMU0U7CisJCQl9CisJCQlrX3JlZl90bWcgLT0gMzA7CisJCX0gd2hpbGUgKChrX3JlZl90bWcgPj0ga19yZWZfdG1nX21pbikgJiYgKGxvY2sgPT0gRkFMU0UpICYmIChjb2Fyc2VfZmFpbCA9PSBGQUxTRSkpOworCX0KKworCXJldHVybiBsb2NrOworfQorCitzdGF0aWMgdm9pZCBzdHYwOTAwX3NldF92aXRlcmJpX2FjcShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIHZ0aF9yZWc7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCWRtZF9yZWcodnRoX3JlZywgUjA5MDBfUDFfVlRIMTIsIFIwOTAwX1AyX1ZUSDEyKTsKKworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCB2dGhfcmVnKyssIDB4OTYpOworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCB2dGhfcmVnKyssIDB4NjQpOworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCB2dGhfcmVnKyssIDB4MzYpOworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCB2dGhfcmVnKyssIDB4MjMpOworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCB2dGhfcmVnKyssIDB4MUUpOworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCB2dGhfcmVnKyssIDB4MTkpOworfQorCitzdGF0aWMgdm9pZCBzdHYwOTAwX3NldF9zZWFyY2hfc3RhbmRhcmQoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCisJaW50IHNzdG5kcmQ7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCXNzdG5kcmQgPSBpX3BhcmFtcy0+ZG1kMV9zcmNoX3N0YW5kYXJkOworCWlmIChkZW1vZCA9PSAxKQorCQlzc3RuZHJkID0gaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQ7CisKKwlzd2l0Y2ggKHNzdG5kcmQpIHsKKwljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMxOgorCQlkcHJpbnRrKCJTZWFyY2ggU3RhbmRhcmQgPSBEVkJTMVxuIik7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFNTOgorCQlkcHJpbnRrKCJTZWFyY2ggU3RhbmRhcmQgPSBEU1NcbiIpOworCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFZCUzI6CisJCWJyZWFrOworCQlkcHJpbnRrKCJTZWFyY2ggU3RhbmRhcmQgPSBEVkJTMlxuIik7CisJY2FzZSBTVFYwOTAwX0FVVE9fU0VBUkNIOgorCWRlZmF1bHQ6CisJCWRwcmludGsoIlNlYXJjaCBTdGFuZGFyZCA9IEFVVE9cbiIpOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJc3dpdGNoIChpX3BhcmFtcy0+ZG1kMV9zcmNoX3N0YW5kYXJkKSB7CisJCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFZCUzE6CisJCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFNTOgorCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMV9FTkFCTEUsIDEpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMl9FTkFCTEUsIDApOworCisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1NUT1BfQ0xLVklUMSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQywgMHgxYSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQkNMQywgMHgwOSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSMkNGRywgMHgyMik7CisKKwkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfYWNxKGlfcGFyYW1zLCBkZW1vZCk7CisJCQlzdHYwOTAwX3NldF92aXRlcmJpX3N0YW5kYXJkKGlfcGFyYW1zLAorCQkJCQkJaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZCwKKwkJCQkJCWlfcGFyYW1zLT5kbWQxX2ZlYywgZGVtb2QpOworCisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX1NFQVJDSF9EVkJTMjoKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzFfRU5BQkxFLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzJfRU5BQkxFLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzJfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfU1RPUF9DTEtWSVQxLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDLCAweDFhKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9CQ0xDLCAweDA5KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVIyQ0ZHLCAweDI2KTsKKwkJCWlmIChpX3BhcmFtcy0+ZGVtb2RfbW9kZSAhPSBTVFYwOTAwX1NJTkdMRSkgeworCQkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA8PSAweDExKQorCQkJCQlzdHYwOTAwX3N0b3BfYWxsX3MyX21vZGNvZChpX3BhcmFtcywgZGVtb2QpOworCQkJCWVsc2UKKwkJCQkJc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJCX0gZWxzZQorCQkJCXN0djA5MDBfYWN0aXZhdGVfczJfbW9kY29kZV9zaW5nbGUoaV9wYXJhbXMsIGRlbW9kKTsKKworCQkJc3R2MDkwMF9zZXRfdml0ZXJiaV90cmFjcShpX3BhcmFtcywgZGVtb2QpOworCisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0FVVE9fU0VBUkNIOgorCQlkZWZhdWx0OgorCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMV9FTkFCTEUsIDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMl9FTkFCTEUsIDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMV9FTkFCTEUsIDEpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMl9FTkFCTEUsIDEpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9TVE9QX0NMS1ZJVDEsIDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMsIDB4MWEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0JDTEMsIDB4MDkpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUjJDRkcsIDB4MjYpOworCQkJaWYgKGlfcGFyYW1zLT5kZW1vZF9tb2RlICE9IFNUVjA5MDBfU0lOR0xFKSB7CisJCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkIDw9IDB4MTEpCisJCQkJCXN0djA5MDBfc3RvcF9hbGxfczJfbW9kY29kKGlfcGFyYW1zLCBkZW1vZCk7CisJCQkJZWxzZQorCQkJCQlzdHYwOTAwX2FjdGl2YXRlX3MyX21vZGNvZGUoaV9wYXJhbXMsIGRlbW9kKTsKKworCQkJfSBlbHNlCisJCQkJc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlX3NpbmdsZShpX3BhcmFtcywgZGVtb2QpOworCisJCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUgPj0gMjAwMDAwMCkKKwkJCQlzdHYwOTAwX3NldF92aXRlcmJpX2FjcShpX3BhcmFtcywgZGVtb2QpOworCQkJZWxzZQorCQkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfdHJhY3EoaV9wYXJhbXMsIGRlbW9kKTsKKworCQkJc3R2MDkwMF9zZXRfdml0ZXJiaV9zdGFuZGFyZChpX3BhcmFtcywgaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZCwgaV9wYXJhbXMtPmRtZDFfZmVjLCBkZW1vZCk7CisKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlzd2l0Y2ggKGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkKSB7CisJCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFZCUzE6CisJCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFNTOgorCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMV9FTkFCTEUsIDEpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMl9FTkFCTEUsIDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9TVE9QX0NMS1ZJVDIsIDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMsIDB4MWEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0JDTEMsIDB4MDkpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUjJDRkcsIDB4MjIpOworCQkJc3R2MDkwMF9zZXRfdml0ZXJiaV9hY3EoaV9wYXJhbXMsIGRlbW9kKTsKKwkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfc3RhbmRhcmQoaV9wYXJhbXMsIGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkLCBpX3BhcmFtcy0+ZG1kMl9mZWMsIGRlbW9kKTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMyOgorCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMV9FTkFCTEUsIDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMl9FTkFCTEUsIDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMV9FTkFCTEUsIDEpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMl9FTkFCTEUsIDEpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9TVE9QX0NMS1ZJVDIsIDEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMsIDB4MWEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0JDTEMsIDB4MDkpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUjJDRkcsIDB4MjYpOworCQkJaWYgKGlfcGFyYW1zLT5kZW1vZF9tb2RlICE9IFNUVjA5MDBfU0lOR0xFKQorCQkJCXN0djA5MDBfYWN0aXZhdGVfczJfbW9kY29kZShpX3BhcmFtcywgZGVtb2QpOworCQkJZWxzZQorCQkJCXN0djA5MDBfYWN0aXZhdGVfczJfbW9kY29kZV9zaW5nbGUoaV9wYXJhbXMsIGRlbW9kKTsKKworCQkJc3R2MDkwMF9zZXRfdml0ZXJiaV90cmFjcShpX3BhcmFtcywgZGVtb2QpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9BVVRPX1NFQVJDSDoKKwkJZGVmYXVsdDoKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzFfRU5BQkxFLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzJfRU5BQkxFLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzJfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfU1RPUF9DTEtWSVQyLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDLCAweDFhKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9CQ0xDLCAweDA5KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVIyQ0ZHLCAweDI2KTsKKwkJCWlmIChpX3BhcmFtcy0+ZGVtb2RfbW9kZSAhPSBTVFYwOTAwX1NJTkdMRSkKKwkJCQlzdHYwOTAwX2FjdGl2YXRlX3MyX21vZGNvZGUoaV9wYXJhbXMsIGRlbW9kKTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX2FjdGl2YXRlX3MyX21vZGNvZGVfc2luZ2xlKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSA+PSAyMDAwMDAwKQorCQkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfYWNxKGlfcGFyYW1zLCBkZW1vZCk7CisJCQllbHNlCisJCQkJc3R2MDkwMF9zZXRfdml0ZXJiaV90cmFjcShpX3BhcmFtcywgZGVtb2QpOworCisJCQlzdHYwOTAwX3NldF92aXRlcmJpX3N0YW5kYXJkKGlfcGFyYW1zLCBpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCwgaV9wYXJhbXMtPmRtZDJfZmVjLCBkZW1vZCk7CisKKwkJCWJyZWFrOworCQl9CisKKwkJYnJlYWs7CisJfQorfQorCitlbnVtIGZlX3N0djA5MDBfc2lnbmFsX3R5cGUgc3R2MDkwMF9hbGdvKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kID0gc3RhdGUtPmRlbW9kOworCisJczMyIGRlbW9kX3RpbWVvdXQgPSA1MDAsIGZlY190aW1lb3V0ID0gNTAsIHN0cmVhbV9tZXJnZXJfZmllbGQ7CisKKwlpbnQgbG9jayA9IEZBTFNFLCBsb3dfc3IgPSBGQUxTRTsKKworCWVudW0gZmVfc3R2MDkwMF9zaWduYWxfdHlwZSBzaWduYWxfdHlwZSA9IFNUVjA5MDBfTk9DQVJSSUVSOworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfYWxnbyBhbGdvOworCWludCBub19zaWduYWwgPSBGQUxTRTsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCWFsZ28gPSBpX3BhcmFtcy0+ZG1kMV9zcmNoX2FsZ287CisKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9SU1RfSFdBUkUsIDEpOworCQlzdHJlYW1fbWVyZ2VyX2ZpZWxkID0gRjA5MDBfUDFfUlNUX0hXQVJFOworCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4NUMpOworCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTEFCUywgMHg5ZSk7CisJCWVsc2UKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DT1JSRUxBQlMsIDB4ODgpOworCisJCXN0djA5MDBfZ2V0X2xvY2tfdGltZW91dCgmZGVtb2RfdGltZW91dCwgJmZlY190aW1lb3V0LCBpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSwgaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvKTsKKworCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKSB7CisJCQlpX3BhcmFtcy0+dHVuZXIxX2J3ID0gMiAqIDM2MDAwMDAwOworCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HQ0ZHMiwgMHgwMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ09SUkVMTUFOVCwgMHg3MCk7CisKKwkJCXN0djA5MDBfc2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgMTAwMDAwMCwgZGVtb2QpOworCQl9IGVsc2UgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRFQwTSwgMHgyMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HQ0ZHLCAweGQyKTsKKworCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlIDwgMjAwMDAwMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ09SUkVMTUFOVCwgMHg2Myk7CisJCQllbHNlCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTE1BTlQsIDB4NzApOworCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUdDMlJFRiwgMHgzOCk7CisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9LUkVGVE1HLCAweDVhKTsKKworCQkJCWlmIChpX3BhcmFtcy0+ZG1kMV9zcmNoX2FsZ28gPT0gU1RWMDkwMF9DT0xEX1NUQVJUKQorCQkJCQlpX3BhcmFtcy0+dHVuZXIxX2J3ID0gKDE1ICogKHN0djA5MDBfY2Fycmllcl93aWR0aChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSwgaV9wYXJhbXMtPnJvbGxvZmYpICsgMTAwMDAwMDApKSAvIDEwOworCQkJCWVsc2UgaWYgKGlfcGFyYW1zLT5kbWQxX3NyY2hfYWxnbyA9PSBTVFYwOTAwX1dBUk1fU1RBUlQpCisJCQkJCWlfcGFyYW1zLT50dW5lcjFfYncgPSBzdHYwOTAwX2NhcnJpZXJfd2lkdGgoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUsIGlfcGFyYW1zLT5yb2xsb2ZmKSArIDEwMDAwMDAwOworCQkJfSBlbHNlIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfS1JFRlRNRywgMHhjMSk7CisJCQkJaV9wYXJhbXMtPnR1bmVyMV9idyA9ICgxNSAqIChzdHYwOTAwX2NhcnJpZXJfd2lkdGgoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUsIGlfcGFyYW1zLT5yb2xsb2ZmKSArIDEwMDAwMDAwKSkgLyAxMDsKKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR0NGRzIsIDB4MDEpOworCisJCQlzdHYwOTAwX3NldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlLCBkZW1vZCk7CisJCQlzdHYwOTAwX3NldF9tYXhfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSwgZGVtb2QpOworCQkJc3R2MDkwMF9zZXRfbWluX3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUsIGRlbW9kKTsKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSA+PSAxMDAwMDAwMCkKKwkJCQlsb3dfc3IgPSBGQUxTRTsKKwkJCWVsc2UKKwkJCQlsb3dfc3IgPSBUUlVFOworCisJCX0KKworCQlzdHYwOTAwX3NldF90dW5lcihmZSwgaV9wYXJhbXMtPnR1bmVyMV9mcmVxLCBpX3BhcmFtcy0+dHVuZXIxX2J3KTsKKworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1NQRUNJTlZfQ09OVFJPTCwgaV9wYXJhbXMtPmRtZDFfc3JjaF9pcV9pbnYpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX01BTlVBTF9ST0xMT0ZGLCAxKTsKKworCQlzdHYwOTAwX3NldF9zZWFyY2hfc3RhbmRhcmQoaV9wYXJhbXMsIGRlbW9kKTsKKworCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvICE9IFNUVjA5MDBfQkxJTkRfU0VBUkNIKQorCQkJc3R2MDkwMF9zdGFydF9zZWFyY2goaV9wYXJhbXMsIGRlbW9kKTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCWFsZ28gPSBpX3BhcmFtcy0+ZG1kMl9zcmNoX2FsZ287CisKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9SU1RfSFdBUkUsIDEpOworCisJCXN0cmVhbV9tZXJnZXJfZmllbGQgPSBGMDkwMF9QMl9SU1RfSFdBUkU7CisKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHg1Qyk7CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ09SUkVMQUJTLCAweDllKTsKKwkJZWxzZQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NPUlJFTEFCUywgMHg4OCk7CisKKwkJc3R2MDkwMF9nZXRfbG9ja190aW1lb3V0KCZkZW1vZF90aW1lb3V0LCAmZmVjX3RpbWVvdXQsIGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlLCBpX3BhcmFtcy0+ZG1kMl9zcmNoX2FsZ28pOworCisJCWlmIChpX3BhcmFtcy0+ZG1kMl9zcmNoX2FsZ28gPT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpIHsKKwkJCWlfcGFyYW1zLT50dW5lcjJfYncgPSAyICogMzYwMDAwMDA7CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdDRkcyLCAweDAwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DT1JSRUxNQU5ULCAweDcwKTsKKworCQkJc3R2MDkwMF9zZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCAxMDAwMDAwLCBkZW1vZCk7CisJCX0gZWxzZSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1EVDBNLCAweDIwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdDRkcsIDB4ZDIpOworCisJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPCAyMDAwMDAwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DT1JSRUxNQU5ULCAweDYzKTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ09SUkVMTUFOVCwgMHg3MCk7CisKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSA+PSAxMDAwMDAwMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUdDMlJFRiwgMHgzOCk7CisJCQllbHNlCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FHQzJSRUYsIDB4NjApOworCisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9LUkVGVE1HLCAweDVhKTsKKworCQkJCWlmIChpX3BhcmFtcy0+ZG1kMl9zcmNoX2FsZ28gPT0gU1RWMDkwMF9DT0xEX1NUQVJUKQorCQkJCQlpX3BhcmFtcy0+dHVuZXIyX2J3ID0gKDE1ICogKHN0djA5MDBfY2Fycmllcl93aWR0aChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSwKKwkJCQkJCQlpX3BhcmFtcy0+cm9sbG9mZikgKyAxMDAwMDAwMCkpIC8gMTA7CisJCQkJZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvID09IFNUVjA5MDBfV0FSTV9TVEFSVCkKKwkJCQkJaV9wYXJhbXMtPnR1bmVyMl9idyA9IHN0djA5MDBfY2Fycmllcl93aWR0aChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSwKKwkJCQkJCQlpX3BhcmFtcy0+cm9sbG9mZikgKyAxMDAwMDAwMDsKKwkJCX0gZWxzZSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0tSRUZUTUcsIDB4YzEpOworCQkJCWlfcGFyYW1zLT50dW5lcjJfYncgPSAoMTUgKiAoc3R2MDkwMF9jYXJyaWVyX3dpZHRoKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlLAorCQkJCQkJCQkJaV9wYXJhbXMtPnJvbGxvZmYpICsgMTAwMDAwMDApKSAvIDEwOworCQkJfQorCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HQ0ZHMiwgMHgwMSk7CisKKwkJCXN0djA5MDBfc2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUsIGRlbW9kKTsKKwkJCXN0djA5MDBfc2V0X21heF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlLCBkZW1vZCk7CisJCQlzdHYwOTAwX3NldF9taW5fc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSwgZGVtb2QpOworCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlID49IDEwMDAwMDAwKQorCQkJCWxvd19zciA9IEZBTFNFOworCQkJZWxzZQorCQkJCWxvd19zciA9IFRSVUU7CisKKwkJfQorCisJCXN0djA5MDBfc2V0X3R1bmVyKGZlLCBpX3BhcmFtcy0+dHVuZXIyX2ZyZXEsIGlfcGFyYW1zLT50dW5lcjJfYncpOworCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfU1BFQ0lOVl9DT05UUk9MLCBpX3BhcmFtcy0+ZG1kMl9zcmNoX2lxX2ludik7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfTUFOVUFMX1JPTExPRkYsIDEpOworCisJCXN0djA5MDBfc2V0X3NlYXJjaF9zdGFuZGFyZChpX3BhcmFtcywgZGVtb2QpOworCisJCWlmIChpX3BhcmFtcy0+ZG1kMl9zcmNoX2FsZ28gIT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpCisJCQlzdHYwOTAwX3N0YXJ0X3NlYXJjaChpX3BhcmFtcywgZGVtb2QpOworCQlicmVhazsKKwl9CisKKwlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPT0gMHgxMikgeworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHN0cmVhbV9tZXJnZXJfZmllbGQsIDApOworCQltc2xlZXAoMyk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgc3RyZWFtX21lcmdlcl9maWVsZCwgMSk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgc3RyZWFtX21lcmdlcl9maWVsZCwgMCk7CisJfQorCisJaWYgKGFsZ28gPT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpCisJCWxvY2sgPSBzdHYwOTAwX2JsaW5kX3NlYXJjaF9hbGdvKGZlKTsKKwllbHNlIGlmIChhbGdvID09IFNUVjA5MDBfQ09MRF9TVEFSVCkKKwkJbG9jayA9IHN0djA5MDBfZ2V0X2RlbW9kX2NvbGRfbG9jayhmZSwgZGVtb2RfdGltZW91dCk7CisJZWxzZSBpZiAoYWxnbyA9PSBTVFYwOTAwX1dBUk1fU1RBUlQpCisJCWxvY2sgPSBzdHYwOTAwX2dldF9kZW1vZF9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgZGVtb2RfdGltZW91dCk7CisKKwlpZiAoKGxvY2sgPT0gRkFMU0UpICYmIChhbGdvID09IFNUVjA5MDBfQ09MRF9TVEFSVCkpIHsKKwkJaWYgKGxvd19zciA9PSBGQUxTRSkgeworCQkJaWYgKHN0djA5MDBfY2hlY2tfdGltaW5nX2xvY2soaV9wYXJhbXMsIGRlbW9kKSA9PSBUUlVFKQorCQkJCWxvY2sgPSBzdHYwOTAwX3N3X2FsZ28oaV9wYXJhbXMsIGRlbW9kKTsKKwkJfQorCX0KKworCWlmIChsb2NrID09IFRSVUUpCisJCXNpZ25hbF90eXBlID0gc3R2MDkwMF9nZXRfc2lnbmFsX3BhcmFtcyhmZSk7CisKKwlpZiAoKGxvY2sgPT0gVFJVRSkgJiYgKHNpZ25hbF90eXBlID09IFNUVjA5MDBfUkFOR0VPSykpIHsKKwkJc3R2MDkwMF90cmFja19vcHRpbWl6YXRpb24oZmUpOworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPD0gMHgxMSkgeworCQkJaWYgKChzdHYwOTAwX2dldF9zdGFuZGFyZChmZSwgU1RWMDkwMF9ERU1PRF8xKSA9PSBTVFYwOTAwX0RWQlMxX1NUQU5EQVJEKSAmJiAoc3R2MDkwMF9nZXRfc3RhbmRhcmQoZmUsIFNUVjA5MDBfREVNT0RfMikgPT0gU1RWMDkwMF9EVkJTMV9TVEFOREFSRCkpIHsKKwkJCQltc2xlZXAoMjApOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgc3RyZWFtX21lcmdlcl9maWVsZCwgMCk7CisJCQl9IGVsc2UgeworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgc3RyZWFtX21lcmdlcl9maWVsZCwgMCk7CisJCQkJbXNsZWVwKDMpOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgc3RyZWFtX21lcmdlcl9maWVsZCwgMSk7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBzdHJlYW1fbWVyZ2VyX2ZpZWxkLCAwKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChpX3BhcmFtcy0+Y2hpcF9pZCA9PSAweDIwKSB7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHN0cmVhbV9tZXJnZXJfZmllbGQsIDApOworCQkJbXNsZWVwKDMpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBzdHJlYW1fbWVyZ2VyX2ZpZWxkLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgc3RyZWFtX21lcmdlcl9maWVsZCwgMCk7CisJCX0KKworCQlpZiAoc3R2MDkwMF93YWl0X2Zvcl9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgZmVjX3RpbWVvdXQsIGZlY190aW1lb3V0KSA9PSBUUlVFKSB7CisJCQlsb2NrID0gVFJVRTsKKwkJCXN3aXRjaCAoZGVtb2QpIHsKKwkJCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCQkJZGVmYXVsdDoKKwkJCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5sb2NrZWQgPSBUUlVFOworCQkJCWlmIChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zdGFuZGFyZCA9PSBTVFYwOTAwX0RWQlMyX1NUQU5EQVJEKSB7CisJCQkJCXN0djA5MDBfc2V0X2R2YnMyX3JvbGxvZmYoaV9wYXJhbXMsIGRlbW9kKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1BERUxDVFJMMiwgMHg0MCk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9QREVMQ1RSTDIsIDApOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRVJSQ1RSTDEsIDB4NjcpOworCQkJCX0gZWxzZSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9FUlJDVFJMMSwgMHg3NSk7CisJCQkJfQorCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0ZCRVJDUFQ0LCAwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRVJSQ1RSTDIsIDB4YzEpOworCQkJCWJyZWFrOworCQkJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCQkJaV9wYXJhbXMtPmRtZDJfcnNsdHMubG9ja2VkID0gVFJVRTsKKworCQkJCWlmIChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zdGFuZGFyZCA9PSBTVFYwOTAwX0RWQlMyX1NUQU5EQVJEKSB7CisJCQkJCXN0djA5MDBfc2V0X2R2YnMyX3JvbGxvZmYoaV9wYXJhbXMsIGRlbW9kKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1BERUxDVFJMMiwgMHg2MCk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9QREVMQ1RSTDIsIDB4MjApOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRVJSQ1RSTDEsIDB4NjcpOworCQkJCX0gZWxzZSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9FUlJDVFJMMSwgMHg3NSk7CisJCQkJfQorCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0ZCRVJDUFQ0LCAwKTsKKworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9FUlJDVFJMMiwgMHhjMSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlsb2NrID0gRkFMU0U7CisJCQlzaWduYWxfdHlwZSA9IFNUVjA5MDBfTk9EQVRBOworCQkJbm9fc2lnbmFsID0gc3R2MDkwMF9jaGVja19zaWduYWxfcHJlc2VuY2UoaV9wYXJhbXMsIGRlbW9kKTsKKworCQkJc3dpdGNoIChkZW1vZCkgeworCQkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJCQlkZWZhdWx0OgorCQkJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLmxvY2tlZCA9IEZBTFNFOworCQkJCWJyZWFrOworCQkJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCQkJaV9wYXJhbXMtPmRtZDJfcnNsdHMubG9ja2VkID0gRkFMU0U7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoKHNpZ25hbF90eXBlID09IFNUVjA5MDBfTk9EQVRBKSAmJiAobm9fc2lnbmFsID09IEZBTFNFKSkgeworCQlzd2l0Y2ggKGRlbW9kKSB7CisJCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCQlkZWZhdWx0OgorCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkIDw9IDB4MTEpIHsKKwkJCQlpZiAoKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0hFQURFUl9NT0RFKSA9PSBTVFYwOTAwX0RWQlNfRk9VTkQpICYmCisJCQkJCQkoaV9wYXJhbXMtPmRtZDFfc3JjaF9pcV9pbnYgPD0gU1RWMDkwMF9JUV9BVVRPX05PUk1BTF9GSVJTVCkpCisJCQkJCXNpZ25hbF90eXBlID0gc3R2MDkwMF9kdmJzMV9hY3Ffd29ya2Fyb3VuZChmZSk7CisJCQl9IGVsc2UKKwkJCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5sb2NrZWQgPSBGQUxTRTsKKworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkIDw9IDB4MTEpIHsKKwkJCQlpZiAoKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0hFQURFUl9NT0RFKSA9PSBTVFYwOTAwX0RWQlNfRk9VTkQpICYmCisJCQkJCQkoaV9wYXJhbXMtPmRtZDJfc3JjaF9pcV9pbnYgPD0gU1RWMDkwMF9JUV9BVVRPX05PUk1BTF9GSVJTVCkpCisJCQkJCXNpZ25hbF90eXBlID0gc3R2MDkwMF9kdmJzMV9hY3Ffd29ya2Fyb3VuZChmZSk7CisJCQl9IGVsc2UKKwkJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5sb2NrZWQgPSBGQUxTRTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHNpZ25hbF90eXBlOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGVmYWM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTAuYwpAQCAtMCwwICsxLDQ1NiBAQAorLyoKKyAqIHN0djYxMTAuYworICoKKyAqIERyaXZlciBmb3IgU1QgU1RWNjExMCBzYXRlbGxpdGUgdHVuZXIgSUMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5ldFVQIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSAic3R2NjExMC5oIgorCitzdGF0aWMgaW50IGRlYnVnOworCitzdHJ1Y3Qgc3R2NjExMF9wcml2IHsKKwlpbnQgaTJjX2FkZHJlc3M7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisKKwl1MzIgbWNsazsKKwl1OCByZWdzWzhdOworfTsKKworI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGRlYnVnKSBcCisJCQlwcmludGsoS0VSTl9ERUJVRyBhcmdzKTsgXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyBzMzIgYWJzc3ViKHMzMiBhLCBzMzIgYikKK3sKKwlpZiAoYSA+IGIpCisJCXJldHVybiBhIC0gYjsKKwllbHNlCisJCXJldHVybiBiIC0gYTsKK307CisKK3N0YXRpYyBpbnQgc3R2NjExMF9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCWtmcmVlKGZlLT50dW5lcl9wcml2KTsKKwlmZS0+dHVuZXJfcHJpdiA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2NjExMF93cml0ZV9yZWdzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCBidWZbXSwKKwkJCQkJCQlpbnQgc3RhcnQsIGludCBsZW4pCit7CisJc3RydWN0IHN0djYxMTBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCWludCByYzsKKwl1OCBjbWRidWZbbGVuICsgMV07CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkcgk9IHByaXYtPmkyY19hZGRyZXNzLAorCQkuZmxhZ3MJPSAwLAorCQkuYnVmCT0gY21kYnVmLAorCQkubGVuCT0gbGVuICsgMQorCX07CisKKwlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKHN0YXJ0ICsgbGVuID4gOCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1jcHkoJmNtZGJ1ZlsxXSwgYnVmLCBsZW4pOworCWNtZGJ1ZlswXSA9IHN0YXJ0OworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKworCXJjID0gaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgJm1zZywgMSk7CisJaWYgKHJjICE9IDEpCisJCWRwcmludGsoIiVzOiBpMmMgZXJyb3JcbiIsIF9fZnVuY19fKTsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHY2MTEwX3JlYWRfcmVncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggcmVnc1tdLAorCQkJCQkJCWludCBzdGFydCwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc3R2NjExMF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJaW50IHJjOworCXU4IHJlZ1tdID0geyBzdGFydCB9OworCXN0cnVjdCBpMmNfbXNnIG1zZ193ciA9IHsKKwkJLmFkZHIJPSBwcml2LT5pMmNfYWRkcmVzcywKKwkJLmZsYWdzCT0gMCwKKwkJLmJ1Zgk9IHJlZywKKwkJLmxlbgk9IDEsCisJfTsKKworCXN0cnVjdCBpMmNfbXNnIG1zZ19yZCA9IHsKKwkJLmFkZHIJPSBwcml2LT5pMmNfYWRkcmVzcywKKwkJLmZsYWdzCT0gSTJDX01fUkQsCisJCS5idWYJPSByZWdzLAorCQkubGVuCT0gbGVuLAorCX07CisJLyogd3JpdGUgc3ViYWRkciAqLworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisKKwlyYyA9IGkyY190cmFuc2Zlcihwcml2LT5pMmMsICZtc2dfd3IsIDEpOworCWlmIChyYyAhPSAxKQorCQlkcHJpbnRrKCIlczogaTJjIGVycm9yXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCS8qIHJlYWQgcmVnaXN0ZXJzICovCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKworCXJjID0gaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgJm1zZ19yZCwgMSk7CisJaWYgKHJjICE9IDEpCisJCWRwcmludGsoIiVzOiBpMmMgZXJyb3JcbiIsIF9fZnVuY19fKTsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisKKwltZW1jcHkoJnByaXYtPnJlZ3Nbc3RhcnRdLCByZWdzLCBsZW4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2NjExMF9yZWFkX3JlZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IHN0YXJ0KQoreworCXU4IGJ1ZltdID0geyAwIH07CisJc3R2NjExMF9yZWFkX3JlZ3MoZmUsIGJ1Ziwgc3RhcnQsIDEpOworCisJcmV0dXJuIGJ1ZlswXTsKK30KKworc3RhdGljIGludCBzdHY2MTEwX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXU4IHJlZ1tdID0geyAwIH07CisJc3R2NjExMF93cml0ZV9yZWdzKGZlLCByZWcsIDAsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgY2Fycmllcl93aWR0aCh1MzIgc3ltYm9sX3JhdGUsIGZlX3JvbGxvZmZfdCByb2xsb2ZmKQoreworCXUzMiBybGY7CisKKwlzd2l0Y2ggKHJvbGxvZmYpIHsKKwljYXNlIFJPTExPRkZfMjA6CisJCXJsZiA9IDIwOworCQlicmVhazsKKwljYXNlIFJPTExPRkZfMjU6CisJCXJsZiA9IDI1OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlybGYgPSAzNTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHN5bWJvbF9yYXRlICArICgoc3ltYm9sX3JhdGUgKiBybGYpIC8gMTAwKTsKK30KKworc3RhdGljIGludCBzdHY2MTEwX3NldF9iYW5kd2lkdGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiBiYW5kd2lkdGgpCit7CisJc3RydWN0IHN0djYxMTBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCXU4IHI4LCByZXQgPSAweDA0OworCWludCBpOworCisJaWYgKChiYW5kd2lkdGggLyAyKSA+IDM2MDAwMDAwKSAvKkJXLzIgbWF4PTMxKzU9MzYgbWh6IGZvciByOD0zMSovCisJCXI4ID0gMzE7CisJZWxzZSBpZiAoKGJhbmR3aWR0aCAvIDIpIDwgNTAwMDAwMCkgLyogQlcvMiBtaW49NU1oeiBmb3IgRj0wICovCisJCXI4ID0gMDsKKwllbHNlIC8qaWYgNSA8IEJXLzIgPCAzNiovCisJCXI4ID0gKGJhbmR3aWR0aCAvIDIpIC8gMTAwMDAwMCAtIDU7CisKKwkvKiBjdHJsMywgUkNDTEtPRkYgPSAwIEFjdGl2YXRlIHRoZSBjYWxpYnJhdGlvbiBDbG9jayAqLworCS8qIGN0cmwzLCBDRiA9IHI4IFNldCB0aGUgTFBGIHZhbHVlICovCisJcHJpdi0+cmVnc1tSU1RWNjExMF9DVFJMM10gJj0gfigoMSA8PCA2KSB8IDB4MWYpOworCXByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDNdIHw9IChyOCAmIDB4MWYpOworCXN0djYxMTBfd3JpdGVfcmVncyhmZSwgJnByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDNdLCBSU1RWNjExMF9DVFJMMywgMSk7CisJLyogc3RhdDEsIENBTFJDU1RSVCA9IDEgU3RhcnQgTFBGIGF1dG8gY2FsaWJyYXRpb24qLworCXByaXYtPnJlZ3NbUlNUVjYxMTBfU1RBVDFdIHw9IDB4MDI7CisJc3R2NjExMF93cml0ZV9yZWdzKGZlLCAmcHJpdi0+cmVnc1tSU1RWNjExMF9TVEFUMV0sIFJTVFY2MTEwX1NUQVQxLCAxKTsKKworCWkgPSAwOworCS8qIFdhaXQgZm9yIENBTFJDU1RSVCA9PSAwICovCisJd2hpbGUgKChpIDwgMTApICYmIChyZXQgIT0gMCkpIHsKKwkJcmV0ID0gKChzdHY2MTEwX3JlYWRfcmVnKGZlLCBSU1RWNjExMF9TVEFUMSkpICYgMHgwMik7CisJCW1kZWxheSgxKTsJLyogd2FpdCBmb3IgTFBGIGF1dG8gY2FsaWJyYXRpb24gKi8KKwkJaSsrOworCX0KKworCS8qIFJDQ0xLT0ZGID0gMSBjYWxpYnJhdGlvbiBkb25lLCBkZXNhY3RpdmF0ZSB0aGUgY2FsaWJyYXRpb24gQ2xvY2sgKi8KKwlwcml2LT5yZWdzW1JTVFY2MTEwX0NUUkwzXSB8PSAoMSA8PCA2KTsKKwlzdHY2MTEwX3dyaXRlX3JlZ3MoZmUsICZwcml2LT5yZWdzW1JTVFY2MTEwX0NUUkwzXSwgUlNUVjYxMTBfQ1RSTDMsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djYxMTBfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc3R2NjExMF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJdTggYnVmMFtdID0geyAweDA3LCAweDExLCAweGRjLCAweDg1LCAweDE3LCAweDAxLCAweGU2LCAweDFlIH07CisKKwltZW1jcHkocHJpdi0+cmVncywgYnVmMCwgOCk7CisJLyogSyA9IChSZWZlcmVuY2UgLyAxMDAwMDAwKSAtIDE2ICovCisJcHJpdi0+cmVnc1tSU1RWNjExMF9DVFJMMV0gJj0gfigweDFmIDw8IDMpOworCXByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDFdIHw9CisJCQkJKCgoKHByaXYtPm1jbGsgLyAxMDAwMDAwKSAtIDE2KSAmIDB4MWYpIDw8IDMpOworCisJc3R2NjExMF93cml0ZV9yZWdzKGZlLCAmcHJpdi0+cmVnc1tSU1RWNjExMF9DVFJMMV0sIFJTVFY2MTEwX0NUUkwxLCA4KTsKKwltc2xlZXAoMSk7CisJc3R2NjExMF9zZXRfYmFuZHdpZHRoKGZlLCA3MjAwMDAwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHY2MTEwX2dldF9mcmVxdWVuY3koc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqZnJlcXVlbmN5KQoreworCXN0cnVjdCBzdHY2MTEwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwl1MzIgbmJzdGVwcywgZGl2aWRlciwgcHNkMiwgZnJlcTsKKwl1OCByZWdzW10gPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKworCXN0djYxMTBfcmVhZF9yZWdzKGZlLCByZWdzLCAwLCA4KTsKKwkvKk4qLworCWRpdmlkZXIgPSAocHJpdi0+cmVnc1tSU1RWNjExMF9UVU5JTkcyXSAmIDB4MGYpIDw8IDg7CisJZGl2aWRlciArPSBwcml2LT5yZWdzW1JTVFY2MTEwX1RVTklORzFdOworCisJLypSKi8KKwluYnN0ZXBzICA9IChwcml2LT5yZWdzW1JTVFY2MTEwX1RVTklORzJdID4+IDYpICYgMzsKKwkvKnAqLworCXBzZDIgID0gKHByaXYtPnJlZ3NbUlNUVjYxMTBfVFVOSU5HMl0gPj4gNCkgJiAxOworCisJZnJlcSA9IGRpdmlkZXIgKiAocHJpdi0+bWNsayAvIDEwMDApOworCWZyZXEgLz0gKDEgPDwgKG5ic3RlcHMgKyBwc2QyKSk7CisJZnJlcSAvPSA0OworCisJKmZyZXF1ZW5jeSA9IGZyZXE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHY2MTEwX3NldF9mcmVxdWVuY3koc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiBmcmVxdWVuY3kpCit7CisJc3RydWN0IHN0djYxMTBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOworCXU4IHJldCA9IDB4MDQ7CisJdTMyIGRpdmlkZXIsIHJlZiwgcCwgcHJlc2MsIGksIHJlc3VsdF9mcmVxLCB2Y29fZnJlcTsKKwlzMzIgcF9jYWxjLCBwX2NhbGNfb3B0ID0gMTAwMCwgcl9kaXYsIHJfZGl2X29wdCA9IDAsIHBfdmFsOworCXMzMiBzcmF0ZTsgdTggZ2FpbjsKKworCWRwcmludGsoIiVzLCBmcmVxPSVkIGtIeiwgbWNsaz0lZCBIelxuIiwgX19mdW5jX18sCisJCQkJCQlmcmVxdWVuY3ksIHByaXYtPm1jbGspOworCisJLyogSyA9IChSZWZlcmVuY2UgLyAxMDAwMDAwKSAtIDE2ICovCisJcHJpdi0+cmVnc1tSU1RWNjExMF9DVFJMMV0gJj0gfigweDFmIDw8IDMpOworCXByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDFdIHw9CisJCQkJKCgoKHByaXYtPm1jbGsgLyAxMDAwMDAwKSAtIDE2KSAmIDB4MWYpIDw8IDMpOworCisJLyogQkJfR0FJTiA9IGRiLzIgKi8KKwlpZiAoZmUtPm9wcy5zZXRfcHJvcGVydHkgJiYgZmUtPm9wcy5nZXRfcHJvcGVydHkpIHsKKwkJc3JhdGUgPSBjLT5zeW1ib2xfcmF0ZTsKKwkJZHByaW50aygiJXM6IEdldCBGcm9udGVuZCBwYXJhbWV0ZXJzOiBzcmF0ZT0lZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgc3JhdGUpOworCX0gZWxzZQorCQlzcmF0ZSA9IDE1MDAwMDAwOworCisJaWYgKHNyYXRlID49IDE1MDAwMDAwKQorCQlnYWluID0gMzsgLyogKzYgZEIgKi8KKwllbHNlIGlmIChzcmF0ZSA+PSA1MDAwMDAwKQorCQlnYWluID0gMzsgLyogKzYgZEIgKi8KKwllbHNlCisJCWdhaW4gPSAzOyAvKiArNiBkQiAqLworCisJcHJpdi0+cmVnc1tSU1RWNjExMF9DVFJMMl0gJj0gfjB4MGY7CisJcHJpdi0+cmVnc1tSU1RWNjExMF9DVFJMMl0gfD0gKGdhaW4gJiAweDBmKTsKKworCWlmIChmcmVxdWVuY3kgPD0gMTAyMzAwMCkgeworCQlwID0gMTsKKwkJcHJlc2MgPSAwOworCX0gZWxzZSBpZiAoZnJlcXVlbmN5IDw9IDEzMDAwMDApIHsKKwkJcCA9IDE7CisJCXByZXNjID0gMTsKKwl9IGVsc2UgaWYgKGZyZXF1ZW5jeSA8PSAyMDQ2MDAwKSB7CisJCXAgPSAwOworCQlwcmVzYyA9IDA7CisJfSBlbHNlIHsKKwkJcCA9IDA7CisJCXByZXNjID0gMTsKKwl9CisJLyogRElWNFNFTCA9IHAqLworCXByaXYtPnJlZ3NbUlNUVjYxMTBfVFVOSU5HMl0gJj0gfigxIDw8IDQpOworCXByaXYtPnJlZ3NbUlNUVjYxMTBfVFVOSU5HMl0gfD0gKHAgPDwgNCk7CisKKwkvKiBQUkVTQzMyT04gPSBwcmVzYyAqLworCXByaXYtPnJlZ3NbUlNUVjYxMTBfVFVOSU5HMl0gJj0gfigxIDw8IDUpOworCXByaXYtPnJlZ3NbUlNUVjYxMTBfVFVOSU5HMl0gfD0gKHByZXNjIDw8IDUpOworCisJcF92YWwgPSAoaW50KSgxIDw8IChwICsgMSkpICogMTA7LyogUCA9IDIgb3IgUCA9IDQgKi8KKwlmb3IgKHJfZGl2ID0gMDsgcl9kaXYgPD0gMzsgcl9kaXYrKykgeworCQlwX2NhbGMgPSAocHJpdi0+bWNsayAvIDEwMDAwMCk7CisJCXBfY2FsYyAvPSAoMSA8PCAocl9kaXYgKyAxKSk7CisJCWlmICgoYWJzc3ViKHBfY2FsYywgcF92YWwpKSA8IChhYnNzdWIocF9jYWxjX29wdCwgcF92YWwpKSkKKwkJCXJfZGl2X29wdCA9IHJfZGl2OworCisJCXBfY2FsY19vcHQgPSAocHJpdi0+bWNsayAvIDEwMDAwMCk7CisJCXBfY2FsY19vcHQgLz0gKDEgPDwgKHJfZGl2X29wdCArIDEpKTsKKwl9CisKKwlyZWYgPSBwcml2LT5tY2xrIC8gKCgxIDw8IChyX2Rpdl9vcHQgKyAxKSkgICogKDEgPDwgKHAgKyAxKSkpOworCWRpdmlkZXIgPSAoKChmcmVxdWVuY3kgKiAxMDAwKSArIChyZWYgPj4gMSkpIC8gcmVmKTsKKworCS8qIFJESVYgPSByX2Rpdl9vcHQgKi8KKwlwcml2LT5yZWdzW1JTVFY2MTEwX1RVTklORzJdICY9IH4oMyA8PCA2KTsKKwlwcml2LT5yZWdzW1JTVFY2MTEwX1RVTklORzJdIHw9ICgoKHJfZGl2X29wdCkgJiAzKSA8PCA2KTsKKworCS8qIE5ESVZfTVNCID0gTVNCKGRpdmlkZXIpICovCisJcHJpdi0+cmVnc1tSU1RWNjExMF9UVU5JTkcyXSAmPSB+MHgwZjsKKwlwcml2LT5yZWdzW1JTVFY2MTEwX1RVTklORzJdIHw9ICgoKGRpdmlkZXIpID4+IDgpICYgMHgwZik7CisKKwkvKiBORElWX0xTQiwgTFNCKGRpdmlkZXIpICovCisJcHJpdi0+cmVnc1tSU1RWNjExMF9UVU5JTkcxXSA9IChkaXZpZGVyICYgMHhmZik7CisKKwkvKiBDQUxWQ09TVFJUID0gMSBWQ08gQXV0byBDYWxpYnJhdGlvbiAqLworCXByaXYtPnJlZ3NbUlNUVjYxMTBfU1RBVDFdIHw9IDB4MDQ7CisJc3R2NjExMF93cml0ZV9yZWdzKGZlLCAmcHJpdi0+cmVnc1tSU1RWNjExMF9DVFJMMV0sCisJCQkJCQlSU1RWNjExMF9DVFJMMSwgOCk7CisKKwlpID0gMDsKKwkvKiBXYWl0IGZvciBDQUxWQ09TVFJUID09IDAgKi8KKwl3aGlsZSAoKGkgPCAxMCkgJiYgKHJldCAhPSAwKSkgeworCQlyZXQgPSAoKHN0djYxMTBfcmVhZF9yZWcoZmUsIFJTVFY2MTEwX1NUQVQxKSkgJiAweDA0KTsKKwkJbXNsZWVwKDEpOyAvKiB3YWl0IGZvciBWQ08gYXV0byBjYWxpYnJhdGlvbiAqLworCQlpKys7CisJfQorCisJcmV0ID0gc3R2NjExMF9yZWFkX3JlZyhmZSwgUlNUVjYxMTBfU1RBVDEpOworCXN0djYxMTBfZ2V0X2ZyZXF1ZW5jeShmZSwgJnJlc3VsdF9mcmVxKTsKKworCXZjb19mcmVxID0gZGl2aWRlciAqICgocHJpdi0+bWNsayAvIDEwMDApIC8gKCgxIDw8IChyX2Rpdl9vcHQgKyAxKSkpKTsKKwlkcHJpbnRrKCIlcywgc3RhdDE9JXgsIGxvX2ZyZXE9JWQga0h6LCB2Y29fZnJlYz0lZCBrSHpcbiIsIF9fZnVuY19fLAorCQkJCQkJcmV0LCByZXN1bHRfZnJlcSwgdmNvX2ZyZXEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2NjExMF9zZXRfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCit7CisJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CisJdTMyIGJhbmR3aWR0aCA9IGNhcnJpZXJfd2lkdGgoYy0+c3ltYm9sX3JhdGUsIGMtPnJvbGxvZmYpOworCisJc3R2NjExMF9zZXRfZnJlcXVlbmN5KGZlLCBjLT5mcmVxdWVuY3kpOworCXN0djYxMTBfc2V0X2JhbmR3aWR0aChmZSwgYmFuZHdpZHRoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djYxMTBfZ2V0X2JhbmR3aWR0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiYW5kd2lkdGgpCit7CisJc3RydWN0IHN0djYxMTBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCXU4IHI4ID0gMDsKKwl1OCByZWdzW10gPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKwlzdHY2MTEwX3JlYWRfcmVncyhmZSwgcmVncywgMCwgOCk7CisKKwkvKiBDRiAqLworCXI4ID0gcHJpdi0+cmVnc1tSU1RWNjExMF9DVFJMM10gJiAweDFmOworCSpiYW5kd2lkdGggPSAocjggKyA1KSAqIDIwMDAwMDA7LyogeDIgZm9yIFpJRiB0dW5lciBCVy8yID0gRis1IE1oeiAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX3R1bmVyX29wcyBzdHY2MTEwX3R1bmVyX29wcyA9IHsKKwkuaW5mbyA9IHsKKwkJLm5hbWUgPSAiU1QgU1RWNjExMCIsCisJCS5mcmVxdWVuY3lfbWluID0gOTUwMDAwLAorCQkuZnJlcXVlbmN5X21heCA9IDIxNTAwMDAsCisJCS5mcmVxdWVuY3lfc3RlcCA9IDEwMDAsCisJfSwKKwkuaW5pdCA9IHN0djYxMTBfaW5pdCwKKwkucmVsZWFzZSA9IHN0djYxMTBfcmVsZWFzZSwKKwkuc2xlZXAgPSBzdHY2MTEwX3NsZWVwLAorCS5zZXRfcGFyYW1zID0gc3R2NjExMF9zZXRfcGFyYW1zLAorCS5nZXRfZnJlcXVlbmN5ID0gc3R2NjExMF9nZXRfZnJlcXVlbmN5LAorCS5zZXRfZnJlcXVlbmN5ID0gc3R2NjExMF9zZXRfZnJlcXVlbmN5LAorCS5nZXRfYmFuZHdpZHRoID0gc3R2NjExMF9nZXRfYmFuZHdpZHRoLAorCS5zZXRfYmFuZHdpZHRoID0gc3R2NjExMF9zZXRfYmFuZHdpZHRoLAorCit9OworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdHY2MTEwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJY29uc3Qgc3RydWN0IHN0djYxMTBfY29uZmlnICpjb25maWcsCisJCQkJCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCXN0cnVjdCBzdHY2MTEwX3ByaXYgKnByaXYgPSBOVUxMOworCXU4IHJlZzBbXSA9IHsgMHgwMCwgMHgwNywgMHgxMSwgMHhkYywgMHg4NSwgMHgxNywgMHgwMSwgMHhlNiwgMHgxZSB9OworCisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CisJCXsKKwkJCS5hZGRyID0gY29uZmlnLT5pMmNfYWRkcmVzcywKKwkJCS5mbGFncyA9IDAsCisJCQkuYnVmID0gcmVnMCwKKwkJCS5sZW4gPSA5CisJCX0KKwl9OworCWludCByZXQ7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKGkyYywgbXNnLCAxKTsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisKKwlpZiAocmV0ICE9IDEpCisJCXJldHVybiBOVUxMOworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHY2MTEwX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXByaXYtPmkyY19hZGRyZXNzID0gY29uZmlnLT5pMmNfYWRkcmVzczsKKwlwcml2LT5pMmMgPSBpMmM7CisJcHJpdi0+bWNsayA9IGNvbmZpZy0+bWNsazsKKworCW1lbWNweSgmcHJpdi0+cmVncywgJnJlZzBbMV0sIDgpOworCisJbWVtY3B5KCZmZS0+b3BzLnR1bmVyX29wcywgJnN0djYxMTBfdHVuZXJfb3BzLAorCQkJCXNpemVvZihzdHJ1Y3QgZHZiX3R1bmVyX29wcykpOworCWZlLT50dW5lcl9wcml2ID0gcHJpdjsKKwlwcmludGsoS0VSTl9JTkZPICJTVFY2MTEwIGF0dGFjaGVkIG9uIGFkZHI9JXghXG4iLCBwcml2LT5pMmNfYWRkcmVzcyk7CisKKwlyZXR1cm4gZmU7Cit9CitFWFBPUlRfU1lNQk9MKHN0djYxMTBfYXR0YWNoKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDpvZmYpLiIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNUIFNUVjYxMTAgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJJZ29yIE0uIExpcGxpYW5pbiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwMzE0ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEwLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIHN0djYxMTAuaAorICoKKyAqIERyaXZlciBmb3IgU1QgU1RWNjExMCBzYXRlbGxpdGUgdHVuZXIgSUMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5ldFVQIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fRFZCX1NUVjYxMTBfSF9fCisjZGVmaW5lIF9fRFZCX1NUVjYxMTBfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKworLyogcmVnaXN0ZXJzICovCisjZGVmaW5lIFJTVFY2MTEwX0NUUkwxCQkwCisjZGVmaW5lIFJTVFY2MTEwX0NUUkwyCQkxCisjZGVmaW5lIFJTVFY2MTEwX1RVTklORzEJMgorI2RlZmluZSBSU1RWNjExMF9UVU5JTkcyCTMKKyNkZWZpbmUgUlNUVjYxMTBfQ1RSTDMJCTQKKyNkZWZpbmUgUlNUVjYxMTBfU1RBVDEJCTUKKyNkZWZpbmUgUlNUVjYxMTBfU1RBVDIJCTYKKyNkZWZpbmUgUlNUVjYxMTBfU1RBVDMJCTcKKworc3RydWN0IHN0djYxMTBfY29uZmlnIHsKKwl1OCBpMmNfYWRkcmVzczsKKwl1MzIgbWNsazsKKwlpbnQgaXFfd2lyaW5nOworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9TVFY2MTEwKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX1NUVjYxMTBfTU9EVUxFKSBcCisJCQkJCQkJJiYgZGVmaW5lZChNT0RVTEUpKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnN0djYxMTBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQljb25zdCBzdHJ1Y3Qgc3R2NjExMF9jb25maWcgKmNvbmZpZywKKwkJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqc3R2NjExMF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCWNvbnN0IHN0cnVjdCBzdHY2MTEwX2NvbmZpZyAqY29uZmlnLAorCQkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmMKaW5kZXggMTQ2NWZmNy4uNDk4MWNlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCWlmIChyZXQgIT0gMikgewogCQlkcHJpbnRrKCIlczogZXJyb3IgcmVnPTB4JXgsIHJldD0laVxuIiwgX19mdW5jX18sIHJlZywKIAkJCXJldCk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJZHByaW50aygiJXM6IHN1Y2Nlc3MgcmVnPTB4JXgsIGRhdGE9MHgleCwgcmV0PSVpXG4iLCBfX2Z1bmNfXywKQEAgLTQ4MSwxNiArNDgxLDE4IEBACiBzdGF0aWMgaW50IHRkYTEwMDQ2X2Z3dXBsb2FkKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQogewogCXN0cnVjdCB0ZGExMDA0eF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQlpbnQgcmV0OworCWludCByZXQsIGNvbmZjNDsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCiAJLyogcmVzZXQgKyB3YWtlIHVwIGNoaXAgKi8KIAlpZiAoc3RhdGUtPmNvbmZpZy0+eHRhbF9mcmVxID09IFREQTEwMDQ2X1hUQUxfNE0pIHsKLQkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDRYX0NPTkZDNCwgMCk7CisJCWNvbmZjNCA9IDA7CiAJfSBlbHNlIHsKIAkJZHByaW50aygiJXM6IDE2TUh6IFh0YWwsIHJlZHVjaW5nIEkyQyBzcGVlZFxuIiwgX19mdW5jX18pOwotCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNFhfQ09ORkM0LCAweDgwKTsKKwkJY29uZmM0ID0gMHg4MDsKIAl9CisJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDRYX0NPTkZDNCwgY29uZmM0KTsKKwogCXRkYTEwMDR4X3dyaXRlX21hc2soc3RhdGUsIFREQTEwMDQ2SF9DT05GX1RSSVNUQVRFMSwgMSwgMCk7CiAJLyogc2V0IEdQSU8gMSBhbmQgMyAqLwogCWlmIChzdGF0ZS0+Y29uZmlnLT5ncGlvX2NvbmZpZyAhPSBUREExMDA0Nl9HUFRSSSkgewpAQCAtNTA4LDEzICs1MTAsMjkgQEAKIAlpZiAodGRhMTAwNHhfY2hlY2tfdXBsb2FkX29rKHN0YXRlKSA9PSAwKQogCQlyZXR1cm4gMDsKIAorCS8qCisJICAgRm9yIGkyYyBub3JtYWwgd29yaywgd2UgbmVlZCB0byBzbG93IGRvd24gdGhlIGJ1cyBzcGVlZC4KKwkgICBIb3dldmVyLCB0aGUgc2xvdyBkb3duIGJyZWFrcyB0aGUgZWVwcm9tIGZpcm13YXJlIGxvYWQuCisJICAgU28sIHVzZSBub3JtYWwgc3BlZWQgZm9yIGVlcHJvbSBib290aW5nIGFuZCB0aGVuIHJlc3RvcmUgdGhlCisJICAgaTJjIHNwZWVkIGFmdGVyIHRoYXQuIFRlc3RlZCB3aXRoIE1TSSBUViBAbnl3YXJlIEEvRCBib2FyZCwKKwkgICB0aGF0IGNvbWVzIHdpdGggZmlybXdhcmUgdmVyc2lvbiAyOSBpbnNpZGUgdGhlaXIgZWVwcm9tLgorCisJICAgSXQgc2hvdWxkIGFsc28gYmUgbm90aWNlZCB0aGF0IG5vIG90aGVyIEkyQyB0cmFuc2ZlciBzaG91bGQKKwkgICBiZSBpbiBjb3Vyc2Ugd2hpbGUgYm9vdGluZyBmcm9tIGVlcHJvbSwgb3RoZXJ3aXNlLCB0ZGExMDA0NgorCSAgIGdvZXMgaW50byBhbiBpbnN0YWJsZSBzdGF0ZS4gU28sIHByb3BlciBsb2NraW5nIGFyZSBuZWVkZWQKKwkgICBhdCB0aGUgaTJjIGJ1cyBtYXN0ZXIuCisJICovCiAJcHJpbnRrKEtFUk5fSU5GTyAidGRhMTAwNHg6IHRyeWluZyB0byBib290IGZyb20gZWVwcm9tXG4iKTsKLQl0ZGExMDA0eF93cml0ZV9tYXNrKHN0YXRlLCBUREExMDA0WF9DT05GQzQsIDQsIDQpOworCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0WF9DT05GQzQsIDQpOwogCW1zbGVlcCgzMDApOwotCS8qIGRvbid0IHJlLXVwbG9hZCB1bmxlc3MgbmVjZXNzYXJ5ICovCisJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDRYX0NPTkZDNCwgY29uZmM0KTsKKworCS8qIENoZWNrcyBpZiBlZXByb20gZmlybXdhcmUgd2VudCB3aXRob3V0IHRyb3VibGVzICovCiAJaWYgKHRkYTEwMDR4X2NoZWNrX3VwbG9hZF9vayhzdGF0ZSkgPT0gMCkKIAkJcmV0dXJuIDA7CiAKKwkvKiBlZXByb20gZmlybXdhcmUgZGlkbid0IHdvcmsuIExvYWQgb25lIG1hbnVhbGx5LiAqLworCiAJaWYgKHN0YXRlLT5jb25maWctPnJlcXVlc3RfZmlybXdhcmUgIT0gTlVMTCkgewogCQkvKiByZXF1ZXN0IHRoZSBmaXJtd2FyZSwgdGhpcyB3aWxsIGJsb2NrIHVudGlsIHNvbWVvbmUgdXBsb2FkcyBpdCAqLwogCQlwcmludGsoS0VSTl9JTkZPICJ0ZGExMDA0eDogd2FpdGluZyBmb3IgZmlybXdhcmUgdXBsb2FkLi4uXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMmEwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzNi5jCkBAIC0wLDAgKzEsNTE5IEBACisvKioKKyAqIERyaXZlciBmb3IgWmFybGluayB6bDEwMDM2IERWQi1TIHNpbGljb24gdHVuZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGlubyBSZWljaGFyZHQKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IE1hdHRoaWFzIFNjaHdhcnpvdHQgPHp6YW1AZ2VudG9vLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKioKKyAqIFRoZSBkYXRhIHNoZWV0IGZvciB0aGlzIHR1bmVyIGNhbiBiZSBmb3VuZCBhdDoKKyAqICAgIGh0dHA6Ly93d3cubWNtaWxrLmRlL3Byb2plY3RzL2R2Yi1jYXJkL2RhdGFzaGVldHMvWkwxMDAzNi5wZGYKKyAqCisgKiBUaGlzIG9uZSBpcyB3b3JraW5nOiAoYXQgbXkgQXZlcm1lZGlhIERWQi1TIFBybykKKyAqIC0gemwxMDAzNiAoNDBwaW4sIEZUQSkKKyAqCisgKiBBIGRyaXZlciBmb3IgemwxMDAzOCBzaG91bGQgYmUgdmVyeSBzaW1pbGFyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2luY2x1ZGUgInpsMTAwMzYuaCIKKworc3RhdGljIGludCB6bDEwMDM2X2RlYnVnOworI2RlZmluZSBkcHJpbnRrKGxldmVsLCBhcmdzLi4uKSBcCisJZG8geyBpZiAoemwxMDAzNl9kZWJ1ZyAmIGxldmVsKSBwcmludGsoS0VSTl9ERUJVRyAiemwxMDAzNjogIiBhcmdzKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgZGViX2luZm8oYXJncy4uLikgIGRwcmludGsoMHgwMSwgYXJncykKKyNkZWZpbmUgZGViX2kyYyhhcmdzLi4uKSAgZHByaW50aygweDAyLCBhcmdzKQorCitzdHJ1Y3QgemwxMDAzNl9zdGF0ZSB7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisJY29uc3Qgc3RydWN0IHpsMTAwMzZfY29uZmlnICpjb25maWc7CisJdTMyIGZyZXF1ZW5jeTsKKwl1OCBiciwgYmY7Cit9OworCisKKy8qIFRoaXMgZHJpdmVyIGFzc3VtZXMgdGhlIHR1bmVyIGlzIGRyaXZlbiBieSBhIDEwLjExMU1IeiBDcmlzdGFsICovCisjZGVmaW5lIF9YVEFMIDEwMTExCisKKy8qIFNvbWUgb2YgdGhlIHBvc3NpYmxlIGRpdmlkZXJzOgorICogICA2NCwgKHdyaXRlIDB4MDUgdG8gcmVnKSwgZnJlcSBzdGVwIHNpemUgICAxNThrSHoKKyAqICAgMTAsICh3cml0ZSAweDBhIHRvIHJlZyksIGZyZXEgc3RlcCBzaXplIDEuMDExa0h6ICh1c2VkIGhlcmUpCisgKiAgICA1LCAod3JpdGUgMHgwOSB0byByZWcpLCBmcmVxIHN0ZXAgc2l6ZSAyLjAyMmtIegorICovCisKKyNkZWZpbmUgX1JESVYgMTAKKyNkZWZpbmUgX1JESVZfUkVHIDB4MGEKKyNkZWZpbmUgX0ZSICAgKF9YVEFML19SRElWKQorCisjZGVmaW5lIFNUQVRVU19QT1IgMHg4MCAvKiBQb3dlciBvbiBSZXNldCAqLworI2RlZmluZSBTVEFUVVNfRkwgIDB4NDAgLyogRnJlcXVlbmN5ICYgUGhhc2UgTG9jayAqLworCisvKiByZWFkL3dyaXRlIGZvciB6bDEwMDM2IGFuZCB6bDEwMDM4ICovCisKK3N0YXRpYyBpbnQgemwxMDAzNl9yZWFkX3N0YXR1c19yZWcoc3RydWN0IHpsMTAwMzZfc3RhdGUgKnN0YXRlKQoreworCXU4IHN0YXR1czsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbMV0gPSB7CisJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT50dW5lcl9hZGRyZXNzLCAuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJICAuYnVmID0gJnN0YXR1cywgLmxlbiA9IHNpemVvZihzdGF0dXMpIH0sCisJfTsKKworCWlmIChpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgbXNnLCAxKSAhPSAxKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGkyYyByZWFkIGZhaWxlZCBhdCBhZGRyPSUwMnhcbiIsCisJCQlfX2Z1bmNfXywgc3RhdGUtPmNvbmZpZy0+dHVuZXJfYWRkcmVzcyk7CisJCXJldHVybiAtRUlPOworCX0KKworCWRlYl9pMmMoIlIoc3RhdHVzKTogJTAyeCAgW0ZMPSVkXVxuIiwgc3RhdHVzLAorCQkoc3RhdHVzICYgU1RBVFVTX0ZMKSA/IDEgOiAwKTsKKwlpZiAoc3RhdHVzICYgU1RBVFVTX1BPUikKKwkJZGViX2luZm8oIiVzOiBQb3dlci1Pbi1SZXNldCBiaXQgZW5hYmxlZCAtICIKKwkJCSJuZWVkIHRvIGluaXRpYWxpemUgdGhlIHR1bmVyXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHpsMTAwMzZfd3JpdGUoc3RydWN0IHpsMTAwMzZfc3RhdGUgKnN0YXRlLCB1OCBidWZbXSwgdTggY291bnQpCit7CisJc3RydWN0IGkyY19tc2cgbXNnWzFdID0geworCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+dHVuZXJfYWRkcmVzcywgLmZsYWdzID0gMCwKKwkJICAuYnVmID0gYnVmLCAubGVuID0gY291bnQgfSwKKwl9OworCXU4IHJlZyA9IDA7CisJaW50IHJldDsKKworCWlmICh6bDEwMDM2X2RlYnVnICYgMHgwMikgeworCQkvKiBldmVyeSA4Yml0LXZhbHVlIHNhdGlzaWZlcyB0aGlzIQorCQkgKiBzbyBvbmx5IGNoZWNrIGZvciBkZWJ1ZyBsb2cgKi8KKwkJaWYgKChidWZbMF0gJiAweDgwKSA9PSAweDAwKQorCQkJcmVnID0gMjsKKwkJZWxzZSBpZiAoKGJ1ZlswXSAmIDB4YzApID09IDB4ODApCisJCQlyZWcgPSA0OworCQllbHNlIGlmICgoYnVmWzBdICYgMHhmMCkgPT0gMHhjMCkKKwkJCXJlZyA9IDY7CisJCWVsc2UgaWYgKChidWZbMF0gJiAweGYwKSA9PSAweGQwKQorCQkJcmVnID0gODsKKwkJZWxzZSBpZiAoKGJ1ZlswXSAmIDB4ZjApID09IDB4ZTApCisJCQlyZWcgPSAxMDsKKwkJZWxzZSBpZiAoKGJ1ZlswXSAmIDB4ZjApID09IDB4ZjApCisJCQlyZWcgPSAxMjsKKworCQlkZWJfaTJjKCJXKCVkKToiLCByZWcpOworCQl7CisJCQlpbnQgaTsKKwkJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorCQkJCXByaW50ayhLRVJOX0NPTlQgIiAlMDJ4IiwgYnVmW2ldKTsKKwkJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisJCX0KKwl9CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgbXNnLCAxKTsKKwlpZiAocmV0ICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaTJjIGVycm9yLCByZXQ9JWRcbiIsIF9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bDEwMDM2X3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHpsMTAwMzZfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisKKwlmZS0+dHVuZXJfcHJpdiA9IE5VTEw7CisJa2ZyZWUoc3RhdGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemwxMDAzNl9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgemwxMDAzNl9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwl1OCBidWZbXSA9IHsgMHhmMCwgMHg4MCB9OyAvKiByZWdzIDEyLzEzICovCisJaW50IHJldDsKKworCWRlYl9pbmZvKCIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsgLyogb3BlbiBpMmNfZ2F0ZSAqLworCisJcmV0ID0gemwxMDAzNl93cml0ZShzdGF0ZSwgYnVmLCBzaXplb2YoYnVmKSk7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOyAvKiBjbG9zZSBpMmNfZ2F0ZSAqLworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiByZWdpc3RlciBtYXAgb2YgdGhlIFpMMTAwMzYvWkwxMDAzOAorICoKKyAqIHJlZ1tkZWZhdWx0XSBjb250ZW50CisgKiAgMlsweDAwXTogICAwIHwgTjE0IHwgTjEzIHwgTjEyIHwgTjExIHwgTjEwIHwgIE45IHwgIE44CisgKiAgM1sweDAwXTogIE43IHwgIE42IHwgIE41IHwgIE40IHwgIE4zIHwgIE4yIHwgIE4xIHwgIE4wCisgKiAgNFsweDgwXTogICAxIHwgICAwIHwgUkZHIHwgQkExIHwgQkEwIHwgQkcxIHwgQkcwIHwgTEVOCisgKiAgNVsweDAwXTogIFAwIHwgIEMxIHwgIEMwIHwgIFI0IHwgIFIzIHwgIFIyIHwgIFIxIHwgIFIwCisgKiAgNlsweGMwXTogICAxIHwgICAxIHwgICAwIHwgICAwIHwgUlNEIHwgICAwIHwgICAwIHwgICAwCisgKiAgN1sweDIwXTogIFAxIHwgQkY2IHwgQkY1IHwgQkY0IHwgQkYzIHwgQkYyIHwgQkYxIHwgICAwCisgKiAgOFsweGRiXTogICAxIHwgICAxIHwgICAwIHwgICAxIHwgICAwIHwgIENDIHwgICAxIHwgICAxCisgKiAgOVsweDMwXTogVlNEIHwgIFYyIHwgIFYxIHwgIFYwIHwgIFMzIHwgIFMyIHwgIFMxIHwgIFMwCisgKiAxMFsweGUxXTogICAxIHwgICAxIHwgICAxIHwgICAwIHwgICAwIHwgTFMyIHwgTFMxIHwgTFMwCisgKiAxMVsweGY1XTogIFdTIHwgV0gyIHwgV0gxIHwgV0gwIHwgV0wyIHwgV0wxIHwgV0wwIHwgV1JFCisgKiAxMlsweGYwXTogICAxIHwgICAxIHwgICAxIHwgICAxIHwgICAwIHwgICAwIHwgICAwIHwgICAwCisgKiAxM1sweDI4XTogIFBEIHwgQlI0IHwgQlIzIHwgQlIyIHwgQlIxIHwgQlIwIHwgQ0xSIHwgIFRMCisgKi8KKworc3RhdGljIGludCB6bDEwMDM2X3NldF9mcmVxdWVuY3koc3RydWN0IHpsMTAwMzZfc3RhdGUgKnN0YXRlLCB1MzIgZnJlcXVlbmN5KQoreworCXU4IGJ1ZlsyXTsKKwl1MzIgZGl2LCBmb2Zmc2V0OworCisJZGl2ID0gKGZyZXF1ZW5jeSArIF9GUi8yKSAvIF9GUjsKKwlzdGF0ZS0+ZnJlcXVlbmN5ID0gZGl2ICogX0ZSOworCisJZm9mZnNldCA9IGZyZXF1ZW5jeSAtIHN0YXRlLT5mcmVxdWVuY3k7CisKKwlidWZbMF0gPSAoZGl2ID4+IDgpICYgMHg3ZjsKKwlidWZbMV0gPSAoZGl2ID4+IDApICYgMHhmZjsKKworCWRlYl9pbmZvKCIlczogZnRvZG89JXUgZnByaXY9JXUgZmVycj0lZCBkaXY9JXVcbiIsIF9fZnVuY19fLAorCQlmcmVxdWVuY3ksIHN0YXRlLT5mcmVxdWVuY3ksIGZvZmZzZXQsIGRpdik7CisKKwlyZXR1cm4gemwxMDAzNl93cml0ZShzdGF0ZSwgYnVmLCBzaXplb2YoYnVmKSk7Cit9CisKK3N0YXRpYyBpbnQgemwxMDAzNl9zZXRfYmFuZHdpZHRoKHN0cnVjdCB6bDEwMDM2X3N0YXRlICpzdGF0ZSwgdTMyIGZidykKK3sKKwkvKiBmYncgaXMgbWVhc3VyZWQgaW4ga0h6ICovCisJdTggYnIsIGJmOworCWludCByZXQ7CisJdTggYnVmX2JmW10gPSB7CisJCTB4YzAsIDB4MDAsIC8qICAgNi83OiByc2Q9MCBiZj0wICovCisJfTsKKwl1OCBidWZfYnJbXSA9IHsKKwkJMHhmMCwgMHgwMCwgLyogMTIvMTM6IGJyPTB4YSBjbHI9MCB0bD0wKi8KKwl9OworCXU4IHpsMTAwMzZfcnNkX29mZltdID0geyAweGM4IH07IC8qIHNldCBSU0Q9MSAqLworCisJLyogZW5zdXJlIGNvcnJlY3QgdmFsdWVzICovCisJaWYgKGZidyA+IDM1MDAwKQorCQlmYncgPSAzNTAwMDsKKwlpZiAoZmJ3IDwgIDgwMDApCisJCWZidyA9ICA4MDAwOworCisjZGVmaW5lIF9CUl9NQVhJTVVNIChfWFRBTC81NzUpIC8qIF9YVEFMIC8gNTc1a0h6ID0gMTcgKi8KKworCS8qIDw9IDI4LDgyIE1IeiAqLworCWlmIChmYncgPD0gMjg4MjApIHsKKwkJYnIgPSBfQlJfTUFYSU1VTTsKKwl9IGVsc2UgeworCQkvKioKKwkJICogIGYoYncpPTM0LDZNSHogZih4dGFsKT0xMC4xMTFNSHoKKwkJICogIGJyID0gKDEwMTExLzM0NjAwKSAqIDYzICogMS9LID0gMTQ7CisJCSAqLworCQliciA9ICgoX1hUQUwgKiAyMSAqIDEwMDApIC8gKGZidyAqIDQxOSkpOworCX0KKworCS8qIGVuc3VyZSBjb3JyZWN0IHZhbHVlcyAqLworCWlmIChiciA8IDQpCisJCWJyID0gNDsKKwlpZiAoYnIgPiBfQlJfTUFYSU1VTSkKKwkJYnIgPSBfQlJfTUFYSU1VTTsKKworCS8qCisJICogayA9IDEuMjU3CisJICogYmYgPSBmYncvX1hUQUwgKiBiciAqIGsgLSAxICovCisKKwliZiA9IChmYncgKiBiciAqIDEyNTcpIC8gKF9YVEFMICogMTAwMCkgLSAxOworCisJLyogZW5zdXJlIGNvcnJlY3QgdmFsdWVzICovCisJaWYgKGJmID4gNjIpCisJCWJmID0gNjI7CisKKwlidWZfYmZbMV0gPSAoYmYgPDwgMSkgJiAweDdlOworCWJ1Zl9iclsxXSA9IChiciA8PCAyKSAmIDB4N2M7CisJZGViX2luZm8oIiVzOiBCVz0lZCBicj0ldSBiZj0ldVxuIiwgX19mdW5jX18sIGZidywgYnIsIGJmKTsKKworCWlmIChiciAhPSBzdGF0ZS0+YnIpIHsKKwkJcmV0ID0gemwxMDAzNl93cml0ZShzdGF0ZSwgYnVmX2JyLCBzaXplb2YoYnVmX2JyKSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoYmYgIT0gc3RhdGUtPmJmKSB7CisJCXJldCA9IHpsMTAwMzZfd3JpdGUoc3RhdGUsIGJ1Zl9iZiwgc2l6ZW9mKGJ1Zl9iZikpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJLyogdGltZSA9IGJyLygzMiogZnh0YWwpICovCisJCS8qIG1pbmltYWwgc2xlZXAgdGltZSB0byBiZSBjYWxjdWxhdGVkCisJCSAqIG1heGltdW0gYnIgaXMgNjMgLT4gbWF4IHRpbWUgPSAyIC8xMCBNSHogPSAyZS03ICovCisJCW1zbGVlcCgxKTsKKworCQlyZXQgPSB6bDEwMDM2X3dyaXRlKHN0YXRlLCB6bDEwMDM2X3JzZF9vZmYsCisJCQlzaXplb2YoemwxMDAzNl9yc2Rfb2ZmKSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlzdGF0ZS0+YnIgPSBicjsKKwlzdGF0ZS0+YmYgPSBiZjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsMTAwMzZfc2V0X2dhaW5fcGFyYW1zKHN0cnVjdCB6bDEwMDM2X3N0YXRlICpzdGF0ZSwKKwlpbnQgYykKK3sKKwl1OCBidWZbMl07CisJdTggcmZnLCBiYSwgYmc7CisKKwkvKiBkZWZhdWx0IHZhbHVlcyAqLworCXJmZyA9IDA7IC8qIGVuYWJsZSB3aGVuIHVzaW5nIGFuIGxuYSAqLworCWJhID0gMTsKKwliZyA9IDE7CisKKwkvKiByZWcgNCAqLworCWJ1ZlswXSA9IDB4ODAgfCAoKHJmZyA8PCA1KSAmIDB4MjApCisJCXwgKChiYSAgPDwgMykgJiAweDE4KSB8ICgoYmcgIDw8IDEpICYgMHgwNik7CisKKwlpZiAoIXN0YXRlLT5jb25maWctPnJmX2xvb3BfZW5hYmxlKQorCQlidWZbMF0gfD0gMHgwMTsKKworCS8qIFAwPTAgKi8KKwlidWZbMV0gPSBfUkRJVl9SRUcgfCAoKGMgPDwgNSkgJiAweDYwKTsKKworCWRlYl9pbmZvKCIlczogYz0ldSByZmc9JXUgYmE9JXUgYmc9JXVcbiIsIF9fZnVuY19fLCBjLCByZmcsIGJhLCBiZyk7CisJcmV0dXJuIHpsMTAwMzZfd3JpdGUoc3RhdGUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworfQorCitzdGF0aWMgaW50IHpsMTAwMzZfc2V0X3BhcmFtcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCit7CisJc3RydWN0IHpsMTAwMzZfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJaW50IHJldCA9IDA7CisJdTMyIGZyZXF1ZW5jeSA9IHBhcmFtcy0+ZnJlcXVlbmN5OworCXUzMiBmYnc7CisJaW50IGk7CisJdTggYzsKKworCS8qIGVuc3VyZSBjb3JyZWN0IHZhbHVlcworCSAqIG1heWJlIHJlZHVuZGFudCBhcyBjb3JlIGFscmVhZHkgY2hlY2tzIHRoaXMgKi8KKwlpZiAoKGZyZXF1ZW5jeSA8IGZlLT5vcHMuaW5mby5mcmVxdWVuY3lfbWluKQorCXx8ICAoZnJlcXVlbmN5ID4gZmUtPm9wcy5pbmZvLmZyZXF1ZW5jeV9tYXgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qKgorCSAqIGFscGhhID0gMS4zNSBmb3IgZHZiLXMKKwkgKiBmQlcgPSAoYWxwaGEqc3ltYm9scmF0ZSkvKDIqMC44KQorCSAqIDEuMzUgLyAoMiowLjgpID0gMjcgLyAzMgorCSAqLworCWZidyA9ICgyNyAqIHBhcmFtcy0+dS5xcHNrLnN5bWJvbF9yYXRlKSAvIDMyOworCisJLyogc2NhbGUgdG8ga0h6ICovCisJZmJ3IC89IDEwMDA7CisKKwkvKiBBZGQgc2FmZSBtYXJnaW4gb2YgM01IeiAqLworCWZidyArPSAzMDAwOworCisJLyogc2V0dGluZyB0aGUgY2hhcmdlIHB1bXAgLSBndWVzc2VkIHZhbHVlcyAqLworCWlmIChmcmVxdWVuY3kgPCA5NTAwMDApCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UgaWYgKGZyZXF1ZW5jeSA8IDEyNTAwMDApCisJCWMgPSAwOworCWVsc2UgaWYgKGZyZXF1ZW5jeSA8IDE3NTAwMDApCisJCWMgPSAxOworCWVsc2UgaWYgKGZyZXF1ZW5jeSA8IDIxNzUwMDApCisJCWMgPSAyOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOyAvKiBvcGVuIGkyY19nYXRlICovCisKKwlyZXQgPSB6bDEwMDM2X3NldF9nYWluX3BhcmFtcyhzdGF0ZSwgYyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlyZXQgPSB6bDEwMDM2X3NldF9mcmVxdWVuY3koc3RhdGUsIHBhcmFtcy0+ZnJlcXVlbmN5KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjsKKworCXJldCA9IHpsMTAwMzZfc2V0X2JhbmR3aWR0aChzdGF0ZSwgZmJ3KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjsKKworCS8qIHdhaXQgZm9yIHR1bmVyIGxvY2sgLSBubyBpZGVhIGlmIHRoaXMgaXMgcmVhbGx5IG5lZWRlZCAqLworCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKSB7CisJCXJldCA9IHpsMTAwMzZfcmVhZF9zdGF0dXNfcmVnKHN0YXRlKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycm9yOworCisJCS8qIGNoZWNrIEZyZXF1ZW5jeSAmIFBoYXNlIExvY2sgQml0ICovCisJCWlmIChyZXQgJiBTVEFUVVNfRkwpCisJCQlicmVhazsKKworCQltc2xlZXAoMTApOworCX0KKworZXJyb3I6CisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsgLyogY2xvc2UgaTJjX2dhdGUgKi8KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgemwxMDAzNl9nZXRfZnJlcXVlbmN5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmZyZXF1ZW5jeSkKK3sKKwlzdHJ1Y3QgemwxMDAzNl9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKworCSpmcmVxdWVuY3kgPSBzdGF0ZS0+ZnJlcXVlbmN5OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemwxMDAzNl9pbml0X3JlZ3Moc3RydWN0IHpsMTAwMzZfc3RhdGUgKnN0YXRlKQoreworCWludCByZXQ7CisJaW50IGk7CisKKwkvKiBjb3VsZCBhbHNvIGJlIG9uZSBibG9jayBmcm9tIHJlZyAyIHRvIDEzIGFuZCBhZGRpdGlvbmFsIDEwLzExICovCisJdTggemwxMDAzNl9pbml0X3RhYltdWzJdID0geworCQl7IDB4MDQsIDB4MDAgfSwJCS8qICAgMi8zOiBkaXY9MHg0MDAgLSBhcmJpdHJhcnkgdmFsdWUgKi8KKwkJeyAweDhiLCBfUkRJVl9SRUcgfSwJLyogICA0LzU6IHJmZz0wIGJhPTEgYmc9MSBsZW49PyAqLworCQkJCQkvKiAgICAgICAgcDA9MCBjPTAgcj1fUkRJVl9SRUcgKi8KKwkJeyAweGMwLCAweDIwIH0sCQkvKiAgIDYvNzogcnNkPTAgYmY9MHgxMCAqLworCQl7IDB4ZDMsIDB4NDAgfSwJCS8qICAgOC85OiBmcm9tIGRhdGFzaGVldCAqLworCQl7IDB4ZTMsIDB4NWIgfSwJCS8qIDEwLzExOiBsb2NrIHdpbmRvdyBsZXZlbCAqLworCQl7IDB4ZjAsIDB4MjggfSwJCS8qIDEyLzEzOiBicj0weGEgY2xyPTAgdGw9MCovCisJCXsgMHhlMywgMHhmOSB9LAkJLyogMTAvMTE6IHVubG9jayB3aW5kb3cgbGV2ZWwgKi8KKwl9OworCisJLyogaW52YWxpZCB2YWx1ZXMgdG8gdHJpZ2dlciB3cml0aW5nICovCisJc3RhdGUtPmJyID0gMHhmZjsKKwlzdGF0ZS0+YmYgPSAweGZmOworCisJaWYgKCFzdGF0ZS0+Y29uZmlnLT5yZl9sb29wX2VuYWJsZSkKKwkJemwxMDAzNl9pbml0X3RhYlsxXVsyXSB8PSAweDAxOworCisJZGViX2luZm8oIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh6bDEwMDM2X2luaXRfdGFiKTsgaSsrKSB7CisJCXJldCA9IHpsMTAwMzZfd3JpdGUoc3RhdGUsIHpsMTAwMzZfaW5pdF90YWJbaV0sIDIpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemwxMDAzNl9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCB6bDEwMDM2X3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCWludCByZXQgPSAwOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsgLyogb3BlbiBpMmNfZ2F0ZSAqLworCisJcmV0ID0gemwxMDAzNl9yZWFkX3N0YXR1c19yZWcoc3RhdGUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogT25seSBpbml0IGlmIFBvd2VyLW9uLVJlc2V0IGJpdCBpcyBzZXQ/ICovCisJcmV0ID0gemwxMDAzNl9pbml0X3JlZ3Moc3RhdGUpOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsgLyogY2xvc2UgaTJjX2dhdGUgKi8KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX3R1bmVyX29wcyB6bDEwMDM2X3R1bmVyX29wcyA9IHsKKwkuaW5mbyA9IHsKKwkJLm5hbWUgPSAiWmFybGluayBaTDEwMDM2IiwKKwkJLmZyZXF1ZW5jeV9taW4gPSA5NTAwMDAsCisJCS5mcmVxdWVuY3lfbWF4ID0gMjE3NTAwMAorCX0sCisJLmluaXQgPSB6bDEwMDM2X2luaXQsCisJLnJlbGVhc2UgPSB6bDEwMDM2X3JlbGVhc2UsCisJLnNsZWVwID0gemwxMDAzNl9zbGVlcCwKKwkuc2V0X3BhcmFtcyA9IHpsMTAwMzZfc2V0X3BhcmFtcywKKwkuZ2V0X2ZyZXF1ZW5jeSA9IHpsMTAwMzZfZ2V0X2ZyZXF1ZW5jeSwKK307CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKnpsMTAwMzZfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgemwxMDAzNl9jb25maWcgKmNvbmZpZywKKwkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCit7CisJc3RydWN0IHpsMTAwMzZfc3RhdGUgKnN0YXRlID0gTlVMTDsKKwlpbnQgcmV0OworCisJaWYgKE5VTEwgPT0gY29uZmlnKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIGNvbmZpZyBzcGVjaWZpZWQiLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgemwxMDAzNl9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IHN0YXRlKQorCQlyZXR1cm4gTlVMTDsKKworCXN0YXRlLT5jb25maWcgPSBjb25maWc7CisJc3RhdGUtPmkyYyA9IGkyYzsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7IC8qIG9wZW4gaTJjX2dhdGUgKi8KKworCXJldCA9IHpsMTAwMzZfcmVhZF9zdGF0dXNfcmVnKHN0YXRlKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBObyB6bDEwMDM2IGZvdW5kXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcmV0ID0gemwxMDAzNl9pbml0X3JlZ3Moc3RhdGUpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHR1bmVyIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKKwkJCV9fZnVuY19fKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOyAvKiBjbG9zZSBpMmNfZ2F0ZSAqLworCisJZmUtPnR1bmVyX3ByaXYgPSBzdGF0ZTsKKworCW1lbWNweSgmZmUtPm9wcy50dW5lcl9vcHMsICZ6bDEwMDM2X3R1bmVyX29wcywKKwkJc2l6ZW9mKHN0cnVjdCBkdmJfdHVuZXJfb3BzKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHR1bmVyIGluaXRpYWxpemF0aW9uICglcyBhZGRyPTB4JTAyeCkgb2tcbiIsCisJCV9fZnVuY19fLCBmZS0+b3BzLnR1bmVyX29wcy5pbmZvLm5hbWUsIGNvbmZpZy0+dHVuZXJfYWRkcmVzcyk7CisKKwlyZXR1cm4gZmU7CisKK2Vycm9yOgorCXpsMTAwMzZfcmVsZWFzZShmZSk7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKHpsMTAwMzZfYXR0YWNoKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCB6bDEwMDM2X2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDpvZmYpLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEVkIgWkwxMDAzNiBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlRpbm8gUmVpY2hhcmR0Iik7CitNT0RVTEVfQVVUSE9SKCJNYXR0aGlhcyBTY2h3YXJ6b3R0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzNi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAwMzYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODRiOGY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAwMzYuaApAQCAtMCwwICsxLDUzIEBACisvKioKKyAqIERyaXZlciBmb3IgWmFybGluayBaTDEwMDM2IERWQi1TIHNpbGljb24gdHVuZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGlubyBSZWljaGFyZHQKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IE1hdHRoaWFzIFNjaHdhcnpvdHQgPHp6YW1AZ2VudG9vLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIERWQl9aTDEwMDM2X0gKKyNkZWZpbmUgRFZCX1pMMTAwMzZfSAorCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisKKy8qKgorICogQXR0YWNoIGEgemwxMDAzNiB0dW5lciB0byB0aGUgc3VwcGxpZWQgZnJvbnRlbmQgc3RydWN0dXJlLgorICoKKyAqIEBwYXJhbSBmZSBGcm9udGVuZCB0byBhdHRhY2ggdG8uCisgKiBAcGFyYW0gY29uZmlnIHpsMTAwMzZfY29uZmlnIHN0cnVjdHVyZQorICogQHJldHVybiBGRSBwb2ludGVyIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KKyAqLworCitzdHJ1Y3QgemwxMDAzNl9jb25maWcgeworCXU4IHR1bmVyX2FkZHJlc3M7CisJaW50IHJmX2xvb3BfZW5hYmxlOworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9aTDEwMDM2KSB8fCBcCisJKGRlZmluZWQoQ09ORklHX0RWQl9aTDEwMDM2X01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnpsMTAwMzZfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCWNvbnN0IHN0cnVjdCB6bDEwMDM2X2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICp6bDEwMDM2X2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwljb25zdCBzdHJ1Y3QgemwxMDAzNl9jb25maWcgKmNvbmZpZywgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIERWQl9aTDEwMDM2X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5jCmluZGV4IGIxNTBlZDMuLjE0OGI2ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuYwpAQCAtNTcyLDYgKzU3MiwxMCBAQAogCQl6bDEwMzUzX2R1bXBfcmVncyhmZSk7CiAJaWYgKHN0YXRlLT5jb25maWcucGFyYWxsZWxfdHMpCiAJCXpsMTAzNTNfcmVzZXRfYXR0YWNoWzJdICY9IH4weDIwOworCWlmIChzdGF0ZS0+Y29uZmlnLmNsb2NrX2N0bF8xKQorCQl6bDEwMzUzX3Jlc2V0X2F0dGFjaFszXSA9IHN0YXRlLT5jb25maWcuY2xvY2tfY3RsXzE7CisJaWYgKHN0YXRlLT5jb25maWcucGxsXzApCisJCXpsMTAzNTNfcmVzZXRfYXR0YWNoWzRdID0gc3RhdGUtPmNvbmZpZy5wbGxfMDsKIAogCS8qIERvIGEgImhhcmQiIHJlc2V0IGlmIG5vdCBhbHJlYWR5IGRvbmUgKi8KIAlpZiAoemwxMDM1M19yZWFkX3JlZ2lzdGVyKHN0YXRlLCAweDUwKSAhPSB6bDEwMzUzX3Jlc2V0X2F0dGFjaFsxXSB8fApAQCAtNjE0LDYgKzYxOCw3IEBACiAJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogewogCXN0cnVjdCB6bDEwMzUzX3N0YXRlICpzdGF0ZSA9IE5VTEw7CisJaW50IGlkOwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KIAlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB6bDEwMzUzX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CkBAIC02MjUsNyArNjMwLDggQEAKIAltZW1jcHkoJnN0YXRlLT5jb25maWcsIGNvbmZpZywgc2l6ZW9mKHN0cnVjdCB6bDEwMzUzX2NvbmZpZykpOwogCiAJLyogY2hlY2sgaWYgdGhlIGRlbW9kIGlzIHRoZXJlICovCi0JaWYgKHpsMTAzNTNfcmVhZF9yZWdpc3RlcihzdGF0ZSwgQ0hJUF9JRCkgIT0gSURfWkwxMDM1MykKKwlpZCA9IHpsMTAzNTNfcmVhZF9yZWdpc3RlcihzdGF0ZSwgQ0hJUF9JRCk7CisJaWYgKChpZCAhPSBJRF9aTDEwMzUzKSAmJiAoaWQgIT0gSURfQ0U2MjMwKSAmJiAoaWQgIT0gSURfQ0U2MjMxKSkKIAkJZ290byBlcnJvcjsKIAogCS8qIGNyZWF0ZSBkdmJfZnJvbnRlbmQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5oCmluZGV4IDIyODdiYWMuLjZlM2NhOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuaApAQCAtNDEsNiArNDEsMTAgQEAKIAogCS8qIHNldCBpZiBpMmNfZ2F0ZV9jdHJsIGRpc2FibGUgaXMgcmVxdWlyZWQgKi8KIAl1OCBkaXNhYmxlX2kyY19nYXRlX2N0cmw6MTsKKworCS8qIGNsb2NrIGNvbnRyb2wgcmVnaXN0ZXJzICgweDUxLTB4NTQpICovCisJdTggY2xvY2tfY3RsXzE7ICAvKiBkZWZhdWx0OiAweDQ2ICovCisJdTggcGxsXzA7ICAgICAgICAvKiBkZWZhdWx0OiAweDE1ICovCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfRFZCX1pMMTAzNTMpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfWkwxMDM1M19NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzX3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzX3ByaXYuaAppbmRleCAwNTVmZjFmLi5lMGRkMWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1M19wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTNfcHJpdi5oCkBAIC0yMiw3ICsyMiw5IEBACiAjaWZuZGVmIF9aTDEwMzUzX1BSSVZfCiAjZGVmaW5lIF9aTDEwMzUzX1BSSVZfCiAKLSNkZWZpbmUgSURfWkwxMDM1MwkweDE0CisjZGVmaW5lIElEX1pMMTAzNTMJMHgxNCAvKiBaYXJsaW5rIFpMMTAzNTMgKi8KKyNkZWZpbmUgSURfQ0U2MjMwCTB4MTggLyogSW50ZWwgQ0U2MjMwICovCisjZGVmaW5lIElEX0NFNjIzMQkweDE5IC8qIEludGVsIENFNjIzMSAqLwogCiAjZGVmaW5lIG1zYih4KSAoKCh4KSA+PiA4KSAmIDB4ZmYpCiAjZGVmaW5lIGxzYih4KSAoKHgpICYgMHhmZikKQEAgLTUwLDYgKzUyLDEwIEBACiAJVFBTX1JFQ0VJVkVEXzAgICAgID0gMHgxRSwKIAlUUFNfQ1VSUkVOVF8xICAgICAgPSAweDFGLAogCVRQU19DVVJSRU5UXzAgICAgICA9IDB4MjAsCisJQ0xPQ0tfQ1RMXzAgICAgICAgID0gMHg1MSwKKwlDTE9DS19DVExfMSAgICAgICAgPSAweDUyLAorCVBMTF8wICAgICAgICAgICAgICA9IDB4NTMsCisJUExMXzEgICAgICAgICAgICAgID0gMHg1NCwKIAlSRVNFVCAgICAgICAgICAgICAgPSAweDU1LAogCUFHQ19UQVJHRVQgICAgICAgICA9IDB4NTYsCiAJTUNMS19SQVRJTyAgICAgICAgID0gMHg1QywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9wbHV0bzIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9wbHV0bzIuYwppbmRleCBkMTAxYjMwLi5lZTg5NjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvcGx1dG8yLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL3BsdXRvMi5jCkBAIC0xMTYsNiArMTE2LDcgQEAKIAogCS8qIGlycSAqLwogCXVuc2lnbmVkIGludCBvdmVyZmxvdzsKKwl1bnNpZ25lZCBpbnQgZGVhZDsKIAogCS8qIGRtYSAqLwogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CkBAIC0zMzYsOCArMzM3LDEwIEBACiAJCXJldHVybiBJUlFfTk9ORTsKIAogCWlmICh0c2NyID09IDB4ZmZmZmZmZmYpIHsKLQkJLy8gRklYTUU6IG1heWJlIHJlY292ZXIgc29tZWhvdwotCQlkZXZfZXJyKCZwbHV0by0+cGRldi0+ZGV2LCAiY2FyZCBodW5nIHVwIDooXG4iKTsKKwkJaWYgKHBsdXRvLT5kZWFkID09IDApCisJCQlkZXZfZXJyKCZwbHV0by0+cGRldi0+ZGV2LCAiY2FyZCBoYXMgaHVuZyBvciBiZWVuIGVqZWN0ZWQuXG4iKTsKKwkJLyogSXQncyBkZWFkIEppbSAqLworCQlwbHV0by0+ZGVhZCA9IDE7CiAJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vTWFrZWZpbGUKaW5kZXggZWUwNzM3YS4uYmNmOTNmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vTWFrZWZpbGUKQEAgLTEsNiArMSw4IEBACi1zbXMxeHh4LW9ianMgOj0gc21zY29yZWFwaS5vIHNtc3VzYi5vIHNtc2R2Yi5vIHNtcy1jYXJkcy5vCitzbXMxeHh4LW9ianMgOj0gc21zY29yZWFwaS5vIHNtcy1jYXJkcy5vCiAKIG9iai0kKENPTkZJR19EVkJfU0lBTk9fU01TMVhYWCkgKz0gc21zMXh4eC5vCitvYmotJChDT05GSUdfRFZCX1NJQU5PX1NNUzFYWFgpICs9IHNtc3VzYi5vCitvYmotJChDT05GSUdfRFZCX1NJQU5PX1NNUzFYWFgpICs9IHNtc2R2Yi5vCiAKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMKaW5kZXggNDMwN2U0ZS4uNjNlNGQwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMKQEAgLTE5LDUwICsxOSw5IEBACiAKICNpbmNsdWRlICJzbXMtY2FyZHMuaCIKIAotc3RydWN0IHVzYl9kZXZpY2VfaWQgc21zdXNiX2lkX3RhYmxlW10gPSB7Ci0jaWZkZWYgQ09ORklHX0RWQl9TSUFOT19TTVMxWFhYX1NNU19JRFMKLQl7IFVTQl9ERVZJQ0UoMHgxODdmLCAweDAwMTApLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX1NJQU5PX1NURUxMQVIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxODdmLCAweDAxMDApLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX1NJQU5PX1NURUxMQVIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxODdmLCAweDAyMDApLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX1NJQU5PX05PVkFfQSB9LAotCXsgVVNCX0RFVklDRSgweDE4N2YsIDB4MDIwMSksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fTk9WQV9CIH0sCi0JeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMzAwKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19WRUdBIH0sCi0jZW5kaWYKLQl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDE3MDApLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9DQVRBTU9VTlQgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDE4MDApLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9PS0VNT19BIH0sCi0JeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgxODAxKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfT0tFTU9fQiB9LAotCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MjAwMCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEIH0sCi0JeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgyMDA5KSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkRfUjIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDIwMGEpLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRCB9LAotCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MjAxMCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEIH0sCi0JeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgyMDE5KSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkQgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1MDApLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCi0JeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTEwKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAotCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTUyMCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1MzApLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCi0JeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTgwKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAotCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTU5MCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKLQl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCi19OwotTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHNtc3VzYl9pZF90YWJsZSk7CitzdGF0aWMgaW50IHNtc19kYmc7Cittb2R1bGVfcGFyYW1fbmFtZWQoY2FyZHNfZGJnLCBzbXNfZGJnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhjYXJkc19kYmcsICJzZXQgZGVidWcgbGV2ZWwgKGluZm89MSwgYWR2PTIgKG9yLWFibGUpKSIpOwogCiBzdGF0aWMgc3RydWN0IHNtc19ib2FyZCBzbXNfYm9hcmRzW10gPSB7CiAJW1NNU19CT0FSRF9VTktOT1dOXSA9IHsKQEAgLTExNSw2ICs3NCw3IEBACiAJCS50eXBlCT0gU01TX05PVkFfQjAsCiAJCS5md1tERVZJQ0VfTU9ERV9EVkJUX0JEQV0gPSAic21zMXh4eC1oY3ctNTV4eHgtZHZidC0wMi5mdyIsCiAJCS5sbmFfY3RybCAgPSAyOSwKKwkJLnJmX3N3aXRjaCA9IDE3LAogCX0sCiAJW1NNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEX1IyXSA9IHsKIAkJLm5hbWUJPSAiSGF1cHBhdWdlIFdpblRWIE1pbmlDYXJkIiwKQEAgLTEzMCw2ICs5MCw3IEBACiAKIAlyZXR1cm4gJnNtc19ib2FyZHNbaWRdOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zX2dldF9ib2FyZCk7CiAKIHN0YXRpYyBpbnQgc21zX3NldF9ncGlvKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCBpbnQgcGluLCBpbnQgZW5hYmxlKQogewpAQCAtMTgyLDYgKzE0Myw3IEBACiAJfQogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zX2JvYXJkX3NldHVwKTsKIAogaW50IHNtc19ib2FyZF9wb3dlcihzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwgaW50IG9ub2ZmKQogewpAQCAtMTk3LDEyICsxNTksMTMgQEAKIAljYXNlIFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEX1IyOgogCWNhc2UgU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkQ6CiAJCS8qIExOQSAqLwotCQlzbXNfc2V0X2dwaW8oY29yZWRldiwKLQkJCSAgICAgYm9hcmQtPmxuYV9jdHJsLCBvbm9mZiA/IDEgOiAwKTsKKwkJaWYgKCFvbm9mZikKKwkJCXNtc19zZXRfZ3Bpbyhjb3JlZGV2LCBib2FyZC0+bG5hX2N0cmwsIDApOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNfYm9hcmRfcG93ZXIpOwogCiBpbnQgc21zX2JvYXJkX2xlZF9mZWVkYmFjayhzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwgaW50IGxlZCkKIHsKQEAgLTIyNSwzICsxODgsNDAgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNfYm9hcmRfbGVkX2ZlZWRiYWNrKTsKKworaW50IHNtc19ib2FyZF9sbmFfY29udHJvbChzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwgaW50IG9ub2ZmKQoreworCWludCBib2FyZF9pZCA9IHNtc2NvcmVfZ2V0X2JvYXJkX2lkKGNvcmVkZXYpOworCXN0cnVjdCBzbXNfYm9hcmQgKmJvYXJkID0gc21zX2dldF9ib2FyZChib2FyZF9pZCk7CisKKwlzbXNfZGVidWcoIiVzOiBMTkEgJXMiLCBfX2Z1bmNfXywgb25vZmYgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKworCXN3aXRjaCAoYm9hcmRfaWQpIHsKKwljYXNlIFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEX1IyOgorCWNhc2UgU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkQ6CisJCXNtc19zZXRfZ3Bpbyhjb3JlZGV2LAorCQkJICAgICBib2FyZC0+cmZfc3dpdGNoLCBvbm9mZiA/IDEgOiAwKTsKKwkJcmV0dXJuIHNtc19zZXRfZ3Bpbyhjb3JlZGV2LAorCQkJCSAgICBib2FyZC0+bG5hX2N0cmwsIG9ub2ZmID8gMSA6IDApOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc19ib2FyZF9sbmFfY29udHJvbCk7CisKK2ludCBzbXNfYm9hcmRfbG9hZF9tb2R1bGVzKGludCBpZCkKK3sKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9DQVRBTU9VTlQ6CisJY2FzZSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9PS0VNT19BOgorCWNhc2UgU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfT0tFTU9fQjoKKwljYXNlIFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU06CisJCXJlcXVlc3RfbW9kdWxlKCJzbXNkdmIiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogZG8gbm90aGluZyAqLworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNfYm9hcmRfbG9hZF9tb2R1bGVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmgKaW5kZXggOGUwZmU5Zi4uNjRkNzRjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmgKQEAgLTQwLDcgKzQwLDcgQEAKIAljaGFyICpuYW1lLCAqZndbREVWSUNFX01PREVfTUFYXTsKIAogCS8qIGdwaW9zICovCi0JaW50IGxlZF9wb3dlciwgbGVkX2hpLCBsZWRfbG8sIGxuYV9jdHJsOworCWludCBsZWRfcG93ZXIsIGxlZF9oaSwgbGVkX2xvLCBsbmFfY3RybCwgcmZfc3dpdGNoOwogfTsKIAogc3RydWN0IHNtc19ib2FyZCAqc21zX2dldF9ib2FyZChpbnQgaWQpOwpAQCAtNTIsNyArNTIsOCBAQAogI2RlZmluZSBTTVNfTEVEX0hJICAyCiBpbnQgc21zX2JvYXJkX2xlZF9mZWVkYmFjayhzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwgaW50IGxlZCk7CiBpbnQgc21zX2JvYXJkX3Bvd2VyKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCBpbnQgb25vZmYpOworaW50IHNtc19ib2FyZF9sbmFfY29udHJvbChzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwgaW50IG9ub2ZmKTsKIAotZXh0ZXJuIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHNtc3VzYl9pZF90YWJsZVtdOworZXh0ZXJuIGludCBzbXNfYm9hcmRfbG9hZF9tb2R1bGVzKGludCBpZCk7CiAKICNlbmRpZiAvKiBfX1NNU19DQVJEU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYwppbmRleCBjZjYxM2YyLi43YmQ0ZDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqICBUaGlzIGZpbGUgY29udGFpbnMgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBpbnRlcmZhY2UgdG8gc21zIGNvcmUgY29tcG9uZW50CiAgKgotICogIGF1dGhvcjogQW5hdG9seSBHcmVlbmJsYXQKKyAqICBhdXRob3I6IFVyaSBTaGtvbG5pawogICoKICAqICBDb3B5cmlnaHQgKGMpLCAyMDA1LTIwMDggU2lhbm8gTW9iaWxlIFNpbGljb24sIEluYy4KICAqCkBAIC0zNCw4ICszNCw4IEBACiAjaW5jbHVkZSAic21zY29yZWFwaS5oIgogI2luY2x1ZGUgInNtcy1jYXJkcy5oIgogCi1pbnQgc21zX2RlYnVnOwotbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBzbXNfZGVidWcsIGludCwgMDY0NCk7CitzdGF0aWMgaW50IHNtc19kYmc7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIHNtc19kYmcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnIGxldmVsIChpbmZvPTEsIGFkdj0yIChvci1hYmxlKSkiKTsKIAogc3RydWN0IHNtc2NvcmVfZGV2aWNlX25vdGlmeWVlX3QgewpAQCAtMTA1LDExICsxMDUsMTMgQEAKIAkJY29yZS0+bGVkX3N0YXRlID0gbGVkOwogCXJldHVybiBjb3JlLT5sZWRfc3RhdGU7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNjb3JlX3NldF9ib2FyZF9pZCk7CiAKIGludCBzbXNjb3JlX2dldF9ib2FyZF9pZChzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZSkKIHsKIAlyZXR1cm4gY29yZS0+Ym9hcmRfaWQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNjb3JlX2dldF9ib2FyZF9pZCk7CiAKIHN0cnVjdCBzbXNjb3JlX3JlZ2lzdHJ5X2VudHJ5X3QgewogCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CkBAIC0xNzAsNiArMTcyLDcgQEAKIAogCXJldHVybiBkZWZhdWx0X21vZGU7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNjb3JlX3JlZ2lzdHJ5X2dldG1vZGUpOwogCiBzdGF0aWMgZW51bSBzbXNfZGV2aWNlX3R5cGVfc3Qgc21zY29yZV9yZWdpc3RyeV9nZXR0eXBlKGNoYXIgKmRldnBhdGgpCiB7CkBAIC0yNjEsNiArMjY0LDcgQEAKIAogCXJldHVybiByYzsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfcmVnaXN0ZXJfaG90cGx1Zyk7CiAKIC8qKgogICogdW5yZWdpc3RlciBhIGNsaWVudCBjYWxsYmFjayB0aGF0IGNhbGxlZCB3aGVuIGRldmljZSBwbHVnZ2VkIGluL3VucGx1Z2dlZApAQCAtMjg5LDYgKzI5Myw3IEBACiAKIAlrbXV0ZXhfdW5sb2NrKCZnX3Ntc2NvcmVfZGV2aWNlc2xvY2spOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY29yZV91bnJlZ2lzdGVyX2hvdHBsdWcpOwogCiBzdGF0aWMgdm9pZCBzbXNjb3JlX25vdGlmeV9jbGllbnRzKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2KQogewpAQCAtNDMyLDYgKzQzNyw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfcmVnaXN0ZXJfZGV2aWNlKTsKIAogLyoqCiAgKiBzZXRzIGluaXRpYWwgZGV2aWNlIG1vZGUgYW5kIG5vdGlmaWVzIGNsaWVudCBob3RwbHVncyB0aGF0IGRldmljZSBpcyByZWFkeQpAQCAtNDYwLDYgKzQ2Niw3IEBACiAKIAlyZXR1cm4gcmM7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNjb3JlX3N0YXJ0X2RldmljZSk7CiAKIHN0YXRpYyBpbnQgc21zY29yZV9zZW5kcmVxdWVzdF9hbmRfd2FpdChzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwKIAkJCQkJdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKQEAgLTY4OCw2ICs2OTUsNyBAQAogCiAJc21zX2luZm8oImRldmljZSAlcCBkZXN0cm95ZWQiLCBjb3JlZGV2KTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfdW5yZWdpc3Rlcl9kZXZpY2UpOwogCiBzdGF0aWMgaW50IHNtc2NvcmVfZGV0ZWN0X21vZGUoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYpCiB7CkBAIC03MzIsNyArNzQwLDcgQEAKIAkvKkRWQkgqLwogCXsibm9uZSIsICJkdmJfbm92YV8xMm1oei5pbnAiLCAiZHZiX25vdmFfMTJtaHpfYjAuaW5wIiwgIm5vbmUifSwKIAkvKlRETUIqLwotCXsibm9uZSIsICJ0ZG1iX25vdmFfMTJtaHouaW5wIiwgIm5vbmUiLCAibm9uZSJ9LAorCXsibm9uZSIsICJ0ZG1iX25vdmFfMTJtaHouaW5wIiwgInRkbWJfbm92YV8xMm1oel9iMC5pbnAiLCAibm9uZSJ9LAogCS8qREFCSVAqLwogCXsibm9uZSIsICJub25lIiwgIm5vbmUiLCAibm9uZSJ9LAogCS8qQkRBKi8KQEAgLTg3OSw2ICs4ODcsNyBAQAogewogCXJldHVybiBjb3JlZGV2LT5tb2RlOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY29yZV9nZXRfZGV2aWNlX21vZGUpOwogCiAvKioKICAqIGZpbmQgY2xpZW50IGJ5IHJlc3BvbnNlIGlkICYgdHlwZSB3aXRoaW4gdGhlIGNsaWVudHMgbGlzdC4KQEAgLTEwMDYsNiArMTAxNSw3IEBACiAJCXNtc2NvcmVfcHV0YnVmZmVyKGNvcmVkZXYsIGNiKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNjb3JlX29ucmVzcG9uc2UpOwogCiAvKioKICAqIHJldHVybiBwb2ludGVyIHRvIG5leHQgZnJlZSBidWZmZXIgZGVzY3JpcHRvciBmcm9tIGNvcmUgcG9vbApAQCAtMTAzMSw2ICsxMDQxLDcgQEAKIAogCXJldHVybiBjYjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfZ2V0YnVmZmVyKTsKIAogLyoqCiAgKiByZXR1cm4gYnVmZmVyIGRlc2NyaXB0b3IgdG8gYSBwb29sCkBAIC0xMDQ1LDYgKzEwNTYsNyBAQAogewogCWxpc3RfYWRkX2xvY2tlZCgmY2ItPmVudHJ5LCAmY29yZWRldi0+YnVmZmVycywgJmNvcmVkZXYtPmJ1ZmZlcnNsb2NrKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfcHV0YnVmZmVyKTsKIAogc3RhdGljIGludCBzbXNjb3JlX3ZhbGlkYXRlX2NsaWVudChzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwKIAkJCQkgICBzdHJ1Y3Qgc21zY29yZV9jbGllbnRfdCAqY2xpZW50LApAQCAtMTEyNCw2ICsxMTM2LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY29yZV9yZWdpc3Rlcl9jbGllbnQpOwogCiAvKioKICAqIGZyZWVzIHNtc2NsaWVudCBvYmplY3QgYW5kIGFsbCBzdWJjbGllbnRzIGFzc29jaWF0ZWQgd2l0aCBpdApAQCAtMTE1NCw2ICsxMTY3LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvcmVkZXYtPmNsaWVudHNsb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNjb3JlX3VucmVnaXN0ZXJfY2xpZW50KTsKIAogLyoqCiAgKiB2ZXJpZmllcyB0aGF0IHNvdXJjZSBpZCBpcyBub3QgdGFrZW4gYnkgYW5vdGhlciBjbGllbnQsCkBAIC0xMTkzLDYgKzEyMDcsNyBAQAogCiAJcmV0dXJuIGNvcmVkZXYtPnNlbmRyZXF1ZXN0X2hhbmRsZXIoY29yZWRldi0+Y29udGV4dCwgYnVmZmVyLCBzaXplKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NsaWVudF9zZW5kcmVxdWVzdCk7CiAKIAogaW50IHNtc2NvcmVfY29uZmlndXJlX2dwaW8oc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsIHUzMiBwaW4sCkBAIC0xMjc2LDEyICsxMjkxLDEyIEBACiAJSU5JVF9MSVNUX0hFQUQoJmdfc21zY29yZV9yZWdpc3RyeSk7CiAJa211dGV4X2luaXQoJmdfc21zY29yZV9yZWdpc3RyeWxvY2spOwogCi0JLyogVVNCIFJlZ2lzdGVyICovCi0JcmMgPSBzbXN1c2JfcmVnaXN0ZXIoKTsKIAotCS8qIERWQiBSZWdpc3RlciAqLwotCXJjID0gc21zZHZiX3JlZ2lzdGVyKCk7CiAKKworCisKKwlyZXR1cm4gcmM7CiAJc21zX2RlYnVnKCJyYyAlZCIsIHJjKTsKIAogCXJldHVybiByYzsKQEAgLTEyOTAsNiArMTMwNSwxMCBAQAogc3RhdGljIHZvaWQgX19leGl0IHNtc2NvcmVfbW9kdWxlX2V4aXQodm9pZCkKIHsKIAorCisKKworCiAJa211dGV4X2xvY2soJmdfc21zY29yZV9kZXZpY2VzbG9jayk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZnX3Ntc2NvcmVfbm90aWZ5ZWVzKSkgewogCQlzdHJ1Y3Qgc21zY29yZV9kZXZpY2Vfbm90aWZ5ZWVfdCAqbm90aWZ5ZWUgPQpAQCAtMTMxMiwxOCArMTMzMSwxMiBAQAogCX0KIAlrbXV0ZXhfdW5sb2NrKCZnX3Ntc2NvcmVfcmVnaXN0cnlsb2NrKTsKIAotCS8qIERWQiBVblJlZ2lzdGVyICovCi0Jc21zZHZiX3VucmVnaXN0ZXIoKTsKLQotCS8qIFVucmVnaXN0ZXIgVVNCICovCi0Jc21zdXNiX3VucmVnaXN0ZXIoKTsKLQogCXNtc19kZWJ1ZygiIik7CiB9CiAKIG1vZHVsZV9pbml0KHNtc2NvcmVfbW9kdWxlX2luaXQpOwogbW9kdWxlX2V4aXQoc21zY29yZV9tb2R1bGVfZXhpdCk7CiAKLU1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB0aGUgU2lhbm8gU01TMVhYWCBVU0IgZG9uZ2xlIik7Ci1NT0RVTEVfQVVUSE9SKCJTaWFubyBNb2JpbGUgU2lsaWNvbiwsLCAoZG9yb25jQHNpYW5vLW1zLmNvbSkiKTsKK01PRFVMRV9ERVNDUklQVElPTigiU2lhbm8gTURUViBDb3JlIG1vZHVsZSIpOworTU9EVUxFX0FVVEhPUigiU2lhbm8gTW9iaWxlIFNpbGljb24sIEluYy4gKHVyaXNAc2lhbm8tbXMuY29tKSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oCmluZGV4IDc2MGUyMzMuLjU0OGRlOTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oCkBAIC0yOSwxMyArMjksMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSAiZG14ZGV2LmgiCiAjaW5jbHVkZSAiZHZiZGV2LmgiCiAjaW5jbHVkZSAiZHZiX2RlbXV4LmgiCiAjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCiAKLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjZGVmaW5lIGttdXRleF9pbml0KF9wXykgbXV0ZXhfaW5pdChfcF8pCiAjZGVmaW5lIGttdXRleF9sb2NrKF9wXykgbXV0ZXhfbG9jayhfcF8pCkBAIC0zNjksMjcgKzM2OSw2IEBACiAJdTggb3V0cHV0ZHJpdmluZzsKIH07CiAKLXN0cnVjdCBzbXNkdmJfY2xpZW50X3QgewotCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7Ci0KLQlzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdAkqY29yZWRldjsKLQlzdHJ1Y3Qgc21zY29yZV9jbGllbnRfdAkqc21zY2xpZW50OwotCi0Jc3RydWN0IGR2Yl9hZGFwdGVyCWFkYXB0ZXI7Ci0Jc3RydWN0IGR2Yl9kZW11eAlkZW11eDsKLQlzdHJ1Y3QgZG14ZGV2CQlkbXhkZXY7Ci0Jc3RydWN0IGR2Yl9mcm9udGVuZAlmcm9udGVuZDsKLQotCWZlX3N0YXR1c190CQlmZV9zdGF0dXM7Ci0JaW50CQkJZmVfYmVyLCBmZV9zbnIsIGZlX3VuYywgZmVfc2lnbmFsX3N0cmVuZ3RoOwotCi0Jc3RydWN0IGNvbXBsZXRpb24JdHVuZV9kb25lLCBzdGF0X2RvbmU7Ci0KLQkvKiB0b2RvOiBzYXZlIGZyZXEvYmFuZCBpbnN0ZWFkIHdob2xlIHN0cnVjdCAqLwotCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyBmZV9wYXJhbXM7Ci0KLX07Ci0KIGV4dGVybiB2b2lkIHNtc2NvcmVfcmVnaXN0cnlfc2V0bW9kZShjaGFyICpkZXZwYXRoLCBpbnQgbW9kZSk7CiBleHRlcm4gaW50IHNtc2NvcmVfcmVnaXN0cnlfZ2V0bW9kZShjaGFyICpkZXZwYXRoKTsKIApAQCAtNDE4LDYgKzM5NywxMyBAQAogZXh0ZXJuIHZvaWQgc21zY29yZV9vbnJlc3BvbnNlKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LAogCQkJICAgICAgIHN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90ICpjYik7CiAKK2V4dGVybiBpbnQgc21zY29yZV9nZXRfY29tbW9uX2J1ZmZlcl9zaXplKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2KTsKK2V4dGVybiBpbnQgc21zY29yZV9tYXBfY29tbW9uX2J1ZmZlcihzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwKKwkJCQkgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CitleHRlcm4gaW50IHNtc2NvcmVfZ2V0X2Z3X2ZpbGVuYW1lKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LAorCQkJCSAgIGludCBtb2RlLCBjaGFyICpmaWxlbmFtZSk7CitleHRlcm4gaW50IHNtc2NvcmVfc2VuZF9md19maWxlKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LAorCQkJCXU4ICp1ZndidWYsIGludCBzaXplKTsKIAogZXh0ZXJuCiBzdHJ1Y3Qgc21zY29yZV9idWZmZXJfdCAqc21zY29yZV9nZXRidWZmZXIoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYpOwpAQCAtNDMzLDE4ICs0MTksOSBAQAogCiBpbnQgc21zY29yZV9sZWRfc3RhdGUoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmUsIGludCBsZWQpOwogCi0vKiBzbXNkdmIuYyAqLwotaW50IHNtc2R2Yl9yZWdpc3Rlcih2b2lkKTsKLXZvaWQgc21zZHZiX3VucmVnaXN0ZXIodm9pZCk7Ci0KLS8qIHNtc3VzYi5jICovCi1pbnQgc21zdXNiX3JlZ2lzdGVyKHZvaWQpOwotdm9pZCBzbXN1c2JfdW5yZWdpc3Rlcih2b2lkKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLWV4dGVybiBpbnQgc21zX2RlYnVnOwotCiAjZGVmaW5lIERCR19JTkZPIDEKICNkZWZpbmUgREJHX0FEViAgMgogCkBAIC00NTIsNyArNDI5LDcgQEAKIAlwcmludGsoa2VybiAiJXM6ICIgZm10ICJcbiIsIF9fZnVuY19fLCAjI2FyZykKIAogI2RlZmluZSBkcHJpbnRrKGtlcm4sIGx2bCwgZm10LCBhcmcuLi4pIGRvIHtcCi0JaWYgKHNtc19kZWJ1ZyAmIGx2bCkgXAorCWlmIChzbXNfZGJnICYgbHZsKSBcCiAJCXNtc19wcmludGsoa2VybiwgZm10LCAjI2FyZyk7IH0gd2hpbGUgKDApCiAKICNkZWZpbmUgc21zX2xvZyhmbXQsIGFyZy4uLikgc21zX3ByaW50ayhLRVJOX0lORk8sIGZtdCwgIyNhcmcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNkdmIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2R2Yi5jCmluZGV4IDJkYTk1M2EuLmJhMDgwYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2R2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2R2Yi5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBEcml2ZXIgZm9yIHRoZSBTaWFubyBTTVMxeHh4IFVTQiBkb25nbGUKICAqCi0gKiAgYXV0aG9yOiBBbmF0b2x5IEdyZWVuYmxhdAorICogIEF1dGhvcjogVXJpIFNoa29sbmkKICAqCiAgKiAgQ29weXJpZ2h0IChjKSwgMjAwNS0yMDA4IFNpYW5vIE1vYmlsZSBTaWxpY29uLCBJbmMuCiAgKgpAQCAtMjcsOSArMjcsMzMgQEAKIAogRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CiAKK3N0cnVjdCBzbXNkdmJfY2xpZW50X3QgeworCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CisKKwlzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldjsKKwlzdHJ1Y3Qgc21zY29yZV9jbGllbnRfdCAqc21zY2xpZW50OworCisJc3RydWN0IGR2Yl9hZGFwdGVyICAgICAgYWRhcHRlcjsKKwlzdHJ1Y3QgZHZiX2RlbXV4ICAgICAgICBkZW11eDsKKwlzdHJ1Y3QgZG14ZGV2ICAgICAgICAgICBkbXhkZXY7CisJc3RydWN0IGR2Yl9mcm9udGVuZCAgICAgZnJvbnRlbmQ7CisKKwlmZV9zdGF0dXNfdCAgICAgICAgICAgICBmZV9zdGF0dXM7CisJaW50ICAgICAgICAgICAgICAgICAgICAgZmVfYmVyLCBmZV9zbnIsIGZlX3VuYywgZmVfc2lnbmFsX3N0cmVuZ3RoOworCisJc3RydWN0IGNvbXBsZXRpb24gICAgICAgdHVuZV9kb25lLCBzdGF0X2RvbmU7CisKKwkvKiB0b2RvOiBzYXZlIGZyZXEvYmFuZCBpbnN0ZWFkIHdob2xlIHN0cnVjdCAqLworCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyBmZV9wYXJhbXM7Cit9OworCiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBnX3Ntc2R2Yl9jbGllbnRzOwogc3RhdGljIHN0cnVjdCBtdXRleCBnX3Ntc2R2Yl9jbGllbnRzbG9jazsKIAorc3RhdGljIGludCBzbXNfZGJnOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBzbXNfZGJnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1ZyBsZXZlbCAoaW5mbz0xLCBhZHY9MiAob3ItYWJsZSkpIik7CisKIHN0YXRpYyBpbnQgc21zZHZiX29ucmVzcG9uc2Uodm9pZCAqY29udGV4dCwgc3RydWN0IHNtc2NvcmVfYnVmZmVyX3QgKmNiKQogewogCXN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKmNsaWVudCA9IChzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICopIGNvbnRleHQ7CkBAIC0yNjIsNiArMjg2LDcgQEAKIAkJc3RydWN0IFNtc01zZ0hkcl9TVAlNc2c7CiAJCXUzMgkJRGF0YVszXTsKIAl9IE1zZzsKKwlpbnQgcmV0OwogCiAJTXNnLk1zZy5tc2dTcmNJZCAgPSBEVkJUX0JEQV9DT05UUk9MX01TR19JRDsKIAlNc2cuTXNnLm1zZ0RzdElkICA9IEhJRl9UQVNLOwpAQCAtMjgyLDYgKzMwNywyNCBAQAogCWRlZmF1bHQ6IHJldHVybiAtRUlOVkFMOwogCX0KIAorCS8qIERpc2FibGUgTE5BLCBpZiBhbnkuIEFuIGVycm9yIGlzIHJldHVybmVkIGlmIG5vIExOQSBpcyBwcmVzZW50ICovCisJcmV0ID0gc21zX2JvYXJkX2xuYV9jb250cm9sKGNsaWVudC0+Y29yZWRldiwgMCk7CisJaWYgKHJldCA9PSAwKSB7CisJCWZlX3N0YXR1c190IHN0YXR1czsKKworCQkvKiB0dW5lIHdpdGggTE5BIG9mZiBhdCBmaXJzdCAqLworCQlyZXQgPSBzbXNkdmJfc2VuZHJlcXVlc3RfYW5kX3dhaXQoY2xpZW50LCAmTXNnLCBzaXplb2YoTXNnKSwKKwkJCQkJCSAgJmNsaWVudC0+dHVuZV9kb25lKTsKKworCQlzbXNkdmJfcmVhZF9zdGF0dXMoZmUsICZzdGF0dXMpOworCisJCWlmIChzdGF0dXMgJiBGRV9IQVNfTE9DSykKKwkJCXJldHVybiByZXQ7CisKKwkJLyogcHJldmlvdXMgdHVuZSBkaWRudCBsb2NrIC0gZW5hYmxlIExOQSBhbmQgdHVuZSBhZ2FpbiAqLworCQlzbXNfYm9hcmRfbG5hX2NvbnRyb2woY2xpZW50LT5jb3JlZGV2LCAxKTsKKwl9CisKIAlyZXR1cm4gc21zZHZiX3NlbmRyZXF1ZXN0X2FuZF93YWl0KGNsaWVudCwgJk1zZywgc2l6ZW9mKE1zZyksCiAJCQkJCSAgICZjbGllbnQtPnR1bmVfZG9uZSk7CiB9CkBAIC0zMjksNyArMzcyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIHNtc2R2Yl9mZV9vcHMgPSB7CiAJLmluZm8gPSB7Ci0JCS5uYW1lCQkJPSAiU2lhbm8gTW9iaWxlIERpZ2l0YWwgU01TMXh4eCIsCisJCS5uYW1lCQkJPSAiU2lhbm8gTW9iaWxlIERpZ2l0YWwgTURUViBSZWNlaXZlciIsCiAJCS50eXBlCQkJPSBGRV9PRkRNLAogCQkuZnJlcXVlbmN5X21pbgkJPSA0NDI1MDAwMCwKIAkJLmZyZXF1ZW5jeV9tYXgJCT0gODY3MjUwMDAwLApAQCAtMzcxLDcgKzQxNCw3IEBACiAJaWYgKCFhcnJpdmFsKQogCQlyZXR1cm4gMDsKIAotCWlmIChzbXNjb3JlX2dldF9kZXZpY2VfbW9kZShjb3JlZGV2KSAhPSA0KSB7CisJaWYgKHNtc2NvcmVfZ2V0X2RldmljZV9tb2RlKGNvcmVkZXYpICE9IERFVklDRV9NT0RFX0RWQlRfQkRBKSB7CiAJCXNtc19lcnIoIlNNUyBEZXZpY2UgbW9kZSBpcyBub3Qgc2V0IGZvciAiCiAJCQkiRFZCIG9wZXJhdGlvbi4iKTsKIAkJcmV0dXJuIDA7CkBAIC00NzMsNyArNTE2LDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBzbXNkdmJfcmVnaXN0ZXIodm9pZCkKK2ludCBzbXNkdmJfbW9kdWxlX2luaXQodm9pZCkKIHsKIAlpbnQgcmM7CiAKQEAgLTQ4Nyw3ICs1MzAsNyBAQAogCXJldHVybiByYzsKIH0KIAotdm9pZCBzbXNkdmJfdW5yZWdpc3Rlcih2b2lkKQordm9pZCBzbXNkdmJfbW9kdWxlX2V4aXQodm9pZCkKIHsKIAlzbXNjb3JlX3VucmVnaXN0ZXJfaG90cGx1ZyhzbXNkdmJfaG90cGx1Zyk7CiAKQEAgLTQ5OSwzICs1NDIsMTAgQEAKIAogCWttdXRleF91bmxvY2soJmdfc21zZHZiX2NsaWVudHNsb2NrKTsKIH0KKworbW9kdWxlX2luaXQoc21zZHZiX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KHNtc2R2Yl9tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU01TIERWQiBzdWJzeXN0ZW0gYWRhcHRhdGlvbiBtb2R1bGUiKTsKK01PRFVMRV9BVVRIT1IoIlNpYW5vIE1vYmlsZSBTaWxpY29uLCBJTkMuICh1cmlzQHNpYW5vLW1zLmNvbSkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMKaW5kZXggNWQ3Y2EzNC4uNzFjNjVmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMKQEAgLTI3LDYgKzI3LDEwIEBACiAjaW5jbHVkZSAic21zY29yZWFwaS5oIgogI2luY2x1ZGUgInNtcy1jYXJkcy5oIgogCitzdGF0aWMgaW50IHNtc19kYmc7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIHNtc19kYmcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnIGxldmVsIChpbmZvPTEsIGFkdj0yIChvci1hYmxlKSkiKTsKKwogI2RlZmluZSBVU0IxX0JVRkZFUl9TSVpFCQkweDEwMDAKICNkZWZpbmUgVVNCMl9CVUZGRVJfU0laRQkJMHg0MDAwCiAKQEAgLTQyNCw2ICs0MjgsNyBAQAogCiAJcmMgPSBzbXN1c2JfaW5pdF9kZXZpY2UoaW50ZiwgaWQtPmRyaXZlcl9pbmZvKTsKIAlzbXNfaW5mbygicmMgJWQiLCByYyk7CisJc21zX2JvYXJkX2xvYWRfbW9kdWxlcyhpZC0+ZHJpdmVyX2luZm8pOwogCXJldHVybiByYzsKIH0KIApAQCAtNDM2LDcgKzQ0MSw3IEBACiB7CiAJc3RydWN0IHNtc3VzYl9kZXZpY2VfdCAqZGV2ID0KIAkJKHN0cnVjdCBzbXN1c2JfZGV2aWNlX3QgKil1c2JfZ2V0X2ludGZkYXRhKGludGYpOwotCXByaW50ayhLRVJOX0lORk8gIiVzICBFbnRlcmluZyBzdGF0dXMgJWQuXG4iLCBfX2Z1bmNfXywgbXNnLmV2ZW50KTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogRW50ZXJpbmcgc3RhdHVzICVkLlxuIiwgX19mdW5jX18sIG1zZy5ldmVudCk7CiAJc21zdXNiX3N0b3Bfc3RyZWFtaW5nKGRldik7CiAJcmV0dXJuIDA7CiB9CkBAIC00NDgsNyArNDUzLDcgQEAKIAkJKHN0cnVjdCBzbXN1c2JfZGV2aWNlX3QgKil1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzICBFbnRlcmluZy5cbiIsIF9fZnVuY19fKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogRW50ZXJpbmcuXG4iLCBfX2Z1bmNfXyk7CiAJdXNiX2NsZWFyX2hhbHQodWRldiwgdXNiX3JjdmJ1bGtwaXBlKHVkZXYsIDB4ODEpKTsKIAl1c2JfY2xlYXJfaGFsdCh1ZGV2LCB1c2JfcmN2YnVsa3BpcGUodWRldiwgMHgwMikpOwogCkBAIC00NjMsOSArNDY4LDggQEAKIAkJCQkgICAgICAgaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuCiAJCQkJICAgICAgIGJJbnRlcmZhY2VOdW1iZXIsIDApOwogCQlpZiAocmMgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgICAgIiVzIHVzYl9zZXRfaW50ZXJmYWNlIGZhaWxlZCwgcmMgJWRcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIHJjKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzIHVzYl9zZXRfaW50ZXJmYWNlIGZhaWxlZCwgIgorCQkJICAgICAgICJyYyAlZFxuIiwgX19mdW5jX18sIHJjKTsKIAkJCXJldHVybiByYzsKIAkJfQogCX0KQEAgLTQ3NCw4ICs0NzgsNTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RydWN0IHVzYl9kZXZpY2VfaWQgc21zdXNiX2lkX3RhYmxlW10gPSB7CisjaWZkZWYgQ09ORklHX0RWQl9TSUFOT19TTVMxWFhYX1NNU19JRFMKKwl7IFVTQl9ERVZJQ0UoMHgxODdmLCAweDAwMTApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX1NJQU5PX1NURUxMQVIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxODdmLCAweDAxMDApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX1NJQU5PX1NURUxMQVIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxODdmLCAweDAyMDApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX1NJQU5PX05PVkFfQSB9LAorCXsgVVNCX0RFVklDRSgweDE4N2YsIDB4MDIwMSksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fTk9WQV9CIH0sCisJeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMzAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19WRUdBIH0sCisjZW5kaWYKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDE3MDApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9DQVRBTU9VTlQgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDE4MDApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9PS0VNT19BIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgxODAxKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfT0tFTU9fQiB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MjAwMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgyMDA5KSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkRfUjIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDIwMGEpLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRCB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MjAxMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgyMDExKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkQgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDIwMTkpLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRCB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTUwMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1MTApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTIwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTUzMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1ODApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTkwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgc21zdXNiX2lkX3RhYmxlKTsKKwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNtc3VzYl9kcml2ZXIgPSB7Ci0JLm5hbWUJCQk9ICJzbXMxeHh4IiwKKwkubmFtZQkJCT0gInNtc3VzYiIsCiAJLnByb2JlCQkJPSBzbXN1c2JfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJCT0gc21zdXNiX2Rpc2Nvbm5lY3QsCiAJLmlkX3RhYmxlCQk9IHNtc3VzYl9pZF90YWJsZSwKQEAgLTQ4NCw3ICs1MzUsNyBAQAogCS5yZXN1bWUJCQk9IHNtc3VzYl9yZXN1bWUsCiB9OwogCi1pbnQgc21zdXNiX3JlZ2lzdGVyKHZvaWQpCitpbnQgc21zdXNiX21vZHVsZV9pbml0KHZvaWQpCiB7CiAJaW50IHJjID0gdXNiX3JlZ2lzdGVyKCZzbXN1c2JfZHJpdmVyKTsKIAlpZiAocmMpCkBAIC00OTUsMTAgKzU0NiwxNiBAQAogCXJldHVybiByYzsKIH0KIAotdm9pZCBzbXN1c2JfdW5yZWdpc3Rlcih2b2lkKQordm9pZCBzbXN1c2JfbW9kdWxlX2V4aXQodm9pZCkKIHsKIAlzbXNfZGVidWcoIiIpOwogCS8qIFJlZ3VsYXIgVVNCIENsZWFudXAgKi8KIAl1c2JfZGVyZWdpc3Rlcigmc21zdXNiX2RyaXZlcik7CiB9CiAKK21vZHVsZV9pbml0KHNtc3VzYl9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChzbXN1c2JfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgdGhlIFNpYW5vIFNNUzFYWFggVVNCIGRvbmdsZSIpOworTU9EVUxFX0FVVEhPUigiU2lhbm8gTW9iaWxlIFNpbGljb24sIElOQy4gKHVyaXNAc2lhbm8tbXMuY29tKSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcKaW5kZXggYWIwYmNkMi4uNzcyOTkwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnCkBAIC0xMDgsNyArMTA4LDcgQEAKIAlzZWxlY3QgRFZCX1NUQjYxMDAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0xOQlAyMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfVERBMTAwMjMgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgTUVESUFfVFVORVJfVERBODI3WCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX1REQTgyN1ggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCXNlbGVjdCBWSURFT19JUgogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHNpbXBsZSBTQUE3MTQ2IGJhc2VkIERWQiBjYXJkcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYwppbmRleCBhYTFmZjUyLi40NjI0Y2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYwpAQCAtNzI1LDcgKzcyNSw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX29zZF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX29zZF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuaW9jdGwJCT0gZHZiX2dlbmVyaWNfaW9jdGwsCiAJLm9wZW4JCT0gZHZiX2dlbmVyaWNfb3BlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9hdi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMKaW5kZXggYmRjNjJhYy4uZTRkMDkwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMKQEAgLTE0NTYsNyArMTQ1Niw3IEBACiAgKiBkcml2ZXIgcmVnaXN0cmF0aW9uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfdmlkZW9fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl92aWRlb19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkud3JpdGUJCT0gZHZiX3ZpZGVvX3dyaXRlLAogCS5pb2N0bAkJPSBkdmJfZ2VuZXJpY19pb2N0bCwKQEAgLTE0NzQsNyArMTQ3NCw3IEBACiAJLmtlcm5lbF9pb2N0bAk9IGR2Yl92aWRlb19pb2N0bCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9hdWRpb19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX2F1ZGlvX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS53cml0ZQkJPSBkdmJfYXVkaW9fd3JpdGUsCiAJLmlvY3RsCQk9IGR2Yl9nZW5lcmljX2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2NhLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfY2EuYwppbmRleCAyNjExMzVkLi5jN2E2NWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfY2EuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfY2EuYwpAQCAtMzQ1LDcgKzM0NSw3IEBACiAJcmV0dXJuIGNpX2xsX3JlYWQoJmF2NzExMC0+Y2lfcmJ1ZmZlciwgZmlsZSwgYnVmLCBjb3VudCwgcHBvcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9jYV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX2NhX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5yZWFkCQk9IGR2Yl9jYV9yZWFkLAogCS53cml0ZQkJPSBkdmJfY2Ffd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfdjRsLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfdjRsLmMKaW5kZXggYzViOWM3MC4uMjIxMGNmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX3Y0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF92NGwuYwpAQCAtMzE2LDI1MyArMzE2LDI2MSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgbG9uZyBhdjcxMTBfaW9jdGwoc3RydWN0IHNhYTcxNDZfZmggKmZoLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfdHVuZXIgKnQpCiB7Ci0Jc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwKikgZGV2LT5leHRfcHJpdjsKLQlkcHJpbnRrKDQsICJzYWE3MTQ2X2RldjogJXBcbiIsIGRldik7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKilkZXYtPmV4dF9wcml2OworCXUxNiBzdGVyZW9fZGV0OworCXM4IHN0ZXJlbzsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfR19UVU5FUjoKLQl7Ci0JCXN0cnVjdCB2NGwyX3R1bmVyICp0ID0gYXJnOwotCQl1MTYgc3RlcmVvX2RldDsKLQkJczggc3RlcmVvOworCWRwcmludGsoMiwgIlZJRElPQ19HX1RVTkVSOiAlZFxuIiwgdC0+aW5kZXgpOwogCi0JCWRwcmludGsoMiwgIlZJRElPQ19HX1RVTkVSOiAlZFxuIiwgdC0+aW5kZXgpOworCWlmICghYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MgfHwgdC0+aW5kZXggIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKCFhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyB8fCB0LT5pbmRleCAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJbWVtc2V0KHQsIDAsIHNpemVvZigqdCkpOworCXN0cmNweSgoY2hhciAqKXQtPm5hbWUsICJUZWxldmlzaW9uIik7CiAKLQkJbWVtc2V0KHQsIDAsIHNpemVvZigqdCkpOwotCQlzdHJjcHkoKGNoYXIgKil0LT5uYW1lLCAiVGVsZXZpc2lvbiIpOworCXQtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKKwl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTk9STSB8IFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8CisJCVY0TDJfVFVORVJfQ0FQX0xBTkcxIHwgVjRMMl9UVU5FUl9DQVBfTEFORzIgfCBWNEwyX1RVTkVSX0NBUF9TQVA7CisJdC0+cmFuZ2Vsb3cgPSA3NzI7CS8qIDQ4LjI1IE1IWiAvIDYyLjUga0h6ID0gNzcyLCBzZWUgZmkxMjE2bWsyLXNwZWNzLCBwYWdlIDIgKi8KKwl0LT5yYW5nZWhpZ2ggPSAxMzY4NDsJLyogODU1LjI1IE1IeiAvIDYyLjUga0h6ID0gMTM2ODQgKi8KKwkvKiBGSVhNRTogYWRkIHRoZSByZWFsIHNpZ25hbCBzdHJlbmd0aCBoZXJlICovCisJdC0+c2lnbmFsID0gMHhmZmZmOworCXQtPmFmYyA9IDA7CiAKLQkJdC0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwotCQl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTk9STSB8IFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8Ci0JCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyIHwgVjRMMl9UVU5FUl9DQVBfU0FQOwotCQl0LT5yYW5nZWxvdyA9IDc3MjsJLyogNDguMjUgTUhaIC8gNjIuNSBrSHogPSA3NzIsIHNlZSBmaTEyMTZtazItc3BlY3MsIHBhZ2UgMiAqLwotCQl0LT5yYW5nZWhpZ2ggPSAxMzY4NDsJLyogODU1LjI1IE1IeiAvIDYyLjUga0h6ID0gMTM2ODQgKi8KLQkJLyogRklYTUU6IGFkZCB0aGUgcmVhbCBzaWduYWwgc3RyZW5ndGggaGVyZSAqLwotCQl0LT5zaWduYWwgPSAweGZmZmY7Ci0JCXQtPmFmYyA9IDA7CisJLyogRklYTUU6IHN0YW5kYXJkIC8gc3RlcmVvIGRldGVjdGlvbiBpcyBzdGlsbCBicm9rZW4gKi8KKwltc3BfcmVhZHJlZyhhdjcxMTAsIE1TUF9SRF9ERU0sIDB4MDA3ZSwgJnN0ZXJlb19kZXQpOworCWRwcmludGsoMSwgIlZJRElPQ19HX1RVTkVSOiBtc3AzNDAwIFRWIHN0YW5kYXJkIGRldGVjdGlvbjogMHglMDR4XG4iLCBzdGVyZW9fZGV0KTsKKwltc3BfcmVhZHJlZyhhdjcxMTAsIE1TUF9SRF9EU1AsIDB4MDAxOCwgJnN0ZXJlb19kZXQpOworCWRwcmludGsoMSwgIlZJRElPQ19HX1RVTkVSOiBtc3AzNDAwIHN0ZXJlbyBkZXRlY3Rpb246IDB4JTA0eFxuIiwgc3RlcmVvX2RldCk7CisJc3RlcmVvID0gKHM4KShzdGVyZW9fZGV0ID4+IDgpOworCWlmIChzdGVyZW8gPiAweDEwKSB7CisJCS8qIHN0ZXJlbyAqLworCQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPIHwgVjRMMl9UVU5FUl9TVUJfTU9OTzsKKwkJdC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CisJfSBlbHNlIGlmIChzdGVyZW8gPCAtMHgxMCkgeworCQkvKiBiaWxpbmd1YWwgKi8KKwkJdC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX0xBTkcxIHwgVjRMMl9UVU5FUl9TVUJfTEFORzI7CisJCXQtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTEFORzE7CisJfSBlbHNlIC8qIG1vbm8gKi8KKwkJdC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CiAKLQkJLy8gRklYTUU6IHN0YW5kYXJkIC8gc3RlcmVvIGRldGVjdGlvbiBpcyBzdGlsbCBicm9rZW4KLQkJbXNwX3JlYWRyZWcoYXY3MTEwLCBNU1BfUkRfREVNLCAweDAwN2UsICZzdGVyZW9fZGV0KTsKLQkJZHByaW50aygxLCAiVklESU9DX0dfVFVORVI6IG1zcDM0MDAgVFYgc3RhbmRhcmQgZGV0ZWN0aW9uOiAweCUwNHhcbiIsIHN0ZXJlb19kZXQpOwotCQltc3BfcmVhZHJlZyhhdjcxMTAsIE1TUF9SRF9EU1AsIDB4MDAxOCwgJnN0ZXJlb19kZXQpOwotCQlkcHJpbnRrKDEsICJWSURJT0NfR19UVU5FUjogbXNwMzQwMCBzdGVyZW8gZGV0ZWN0aW9uOiAweCUwNHhcbiIsIHN0ZXJlb19kZXQpOwotCQlzdGVyZW8gPSAoczgpKHN0ZXJlb19kZXQgPj4gOCk7Ci0JCWlmIChzdGVyZW8gPiAweDEwKSB7Ci0JCQkvKiBzdGVyZW8gKi8KLQkJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU8gfCBWNEwyX1RVTkVSX1NVQl9NT05POwotCQkJdC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87Ci0JCX0KLQkJZWxzZSBpZiAoc3RlcmVvIDwgLTB4MTApIHsKLQkJCS8qIGJpbGluZ3VhbCAqLwotCQkJdC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX0xBTkcxIHwgVjRMMl9UVU5FUl9TVUJfTEFORzI7Ci0JCQl0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxOwotCQl9Ci0JCWVsc2UgLyogbW9ubyAqLwotCQkJdC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CisJcmV0dXJuIDA7Cit9CiAKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX1NfVFVORVI6Ci0JewotCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCA9IGFyZzsKLQkJdTE2IGZtX21hdHJpeCwgc3JjOwotCQlkcHJpbnRrKDIsICJWSURJT0NfU19UVU5FUjogJWRcbiIsIHQtPmluZGV4KTsKK3N0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl90dW5lciAqdCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKWRldi0+ZXh0X3ByaXY7CisJdTE2IGZtX21hdHJpeCwgc3JjOworCWRwcmludGsoMiwgIlZJRElPQ19TX1RVTkVSOiAlZFxuIiwgdC0+aW5kZXgpOwogCi0JCWlmICghYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MgfHwgYXY3MTEwLT5jdXJyZW50X2lucHV0ICE9IDEpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzIHx8IGF2NzExMC0+Y3VycmVudF9pbnB1dCAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlzd2l0Y2ggKHQtPmF1ZG1vZGUpIHsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgotCQkJZHByaW50aygyLCAiVklESU9DX1NfVFVORVI6IFY0TDJfVFVORVJfTU9ERV9TVEVSRU9cbiIpOwotCQkJZm1fbWF0cml4ID0gMHgzMDAxOyAvLyBzdGVyZW8KLQkJCXNyYyA9IDB4MDAyMDsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMjoKLQkJCWRwcmludGsoMiwgIlZJRElPQ19TX1RVTkVSOiBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzJcbiIpOwotCQkJZm1fbWF0cml4ID0gMHgzMDAwOyAvLyBiaWxpbmd1YWwKLQkJCXNyYyA9IDB4MDAyMDsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKLQkJCWRwcmludGsoMiwgIlZJRElPQ19TX1RVTkVSOiBWNEwyX1RVTkVSX01PREVfTEFORzFcbiIpOwotCQkJZm1fbWF0cml4ID0gMHgzMDAwOyAvLyBtb25vCi0JCQlzcmMgPSAweDAwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzI6Ci0JCQlkcHJpbnRrKDIsICJWSURJT0NfU19UVU5FUjogVjRMMl9UVU5FUl9NT0RFX0xBTkcyXG4iKTsKLQkJCWZtX21hdHJpeCA9IDB4MzAwMDsgLy8gbW9ubwotCQkJc3JjID0gMHgwMDEwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6IC8qIGNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86ICovCi0JCQlkcHJpbnRrKDIsICJWSURJT0NfU19UVU5FUjogVERBOTg0MF9TRVRfTU9OT1xuIik7Ci0JCQlmbV9tYXRyaXggPSAweDMwMDA7IC8vIG1vbm8KLQkJCXNyYyA9IDB4MDAzMDsKLQkJCWJyZWFrOwotCQl9Ci0JCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwZSwgZm1fbWF0cml4KTsKLQkJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDA4LCBzcmMpOwotCQltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMDksIHNyYyk7Ci0JCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwYSwgc3JjKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX0dfRlJFUVVFTkNZOgotCXsKLQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOwotCi0JCWRwcmludGsoMiwgIlZJRElPQ19HX0ZSRVE6IGZyZXE6MHglMDh4LlxuIiwgZi0+ZnJlcXVlbmN5KTsKLQotCQlpZiAoIWF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzIHx8IGF2NzExMC0+Y3VycmVudF9pbnB1dCAhPSAxKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOwotCQlmLT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7Ci0JCWYtPmZyZXF1ZW5jeSA9CWF2NzExMC0+Y3VycmVudF9mcmVxOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7Ci0KLQkJZHByaW50aygyLCAiVklESU9DX1NfRlJFUVVFTkNZOiBmcmVxOjB4JTA4eC5cbiIsIGYtPmZyZXF1ZW5jeSk7Ci0KLQkJaWYgKCFhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyB8fCBhdjcxMTAtPmN1cnJlbnRfaW5wdXQgIT0gMSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmIChWNEwyX1RVTkVSX0FOQUxPR19UViAhPSBmLT50eXBlKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDAwLCAweGZmZTApOyAvLyBmYXN0IG11dGUKLQkJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDA3LCAweGZmZTApOwotCi0JCS8qIHR1bmUgaW4gZGVzaXJlZCBmcmVxdWVuY3kgKi8KLQkJaWYgKGF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzICYgQU5BTE9HX1RVTkVSX1ZFUzE4MjApIHsKLQkJCXZlczE4MjBfc2V0X3R2X2ZyZXEoZGV2LCBmLT5mcmVxdWVuY3kpOwotCQl9IGVsc2UgaWYgKGF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzICYgQU5BTE9HX1RVTkVSX1NUVjAyOTcpIHsKLQkJCXN0djAyOTdfc2V0X3R2X2ZyZXEoZGV2LCBmLT5mcmVxdWVuY3kpOwotCQl9Ci0JCWF2NzExMC0+Y3VycmVudF9mcmVxID0gZi0+ZnJlcXVlbmN5OwotCi0JCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAxNSwgMHgwMDNmKTsgLy8gc3RhcnQgc3RlcmVvIGRldGVjdGlvbgotCQltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMTUsIDB4MDAwMCk7Ci0JCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwMCwgMHg0ZjAwKTsgLy8gbG91ZHNwZWFrZXIgKyBoZWFkcGhvbmUKLQkJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDA3LCAweDRmMDApOyAvLyBTQ0FSVCAxIHZvbHVtZQotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfRU5VTUlOUFVUOgotCXsKLQkJc3RydWN0IHY0bDJfaW5wdXQgKmkgPSBhcmc7Ci0KLQkJZHByaW50aygyLCAiVklESU9DX0VOVU1JTlBVVDogJWRcbiIsIGktPmluZGV4KTsKLQotCQlpZiAoYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MpIHsKLQkJCWlmIChpLT5pbmRleCA8IDAgfHwgaS0+aW5kZXggPj0gNCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfSBlbHNlIHsKLQkJCWlmIChpLT5pbmRleCAhPSAwKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbWVtY3B5KGksICZpbnB1dHNbaS0+aW5kZXhdLCBzaXplb2Yoc3RydWN0IHY0bDJfaW5wdXQpKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfR19JTlBVVDoKLQl7Ci0JCWludCAqaW5wdXQgPSAoaW50ICopYXJnOwotCQkqaW5wdXQgPSBhdjcxMTAtPmN1cnJlbnRfaW5wdXQ7Ci0JCWRwcmludGsoMiwgIlZJRElPQ19HX0lOUFVUOiAlZFxuIiwgKmlucHV0KTsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX1NfSU5QVVQ6Ci0JewotCQlpbnQgaW5wdXQgPSAqKGludCAqKWFyZzsKLQotCQlkcHJpbnRrKDIsICJWSURJT0NfU19JTlBVVDogJWRcbiIsIGlucHV0KTsKLQotCQlpZiAoIWF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzKQotCQkJcmV0dXJuIDA7Ci0KLQkJaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSA0KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJYXY3MTEwLT5jdXJyZW50X2lucHV0ID0gaW5wdXQ7Ci0JCXJldHVybiBhdjcxMTBfZHZiX2Nfc3dpdGNoKGZoKTsKLQl9Ci0JY2FzZSBWSURJT0NfR19BVURJTzoKLQl7Ci0JCXN0cnVjdCB2NGwyX2F1ZGlvICphID0gYXJnOwotCi0JCWRwcmludGsoMiwgIlZJRElPQ19HX0FVRElPOiAlZFxuIiwgYS0+aW5kZXgpOwotCQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQltZW1jcHkoYSwgJm1zcDM0MDBfdjRsMl9hdWRpbywgc2l6ZW9mKHN0cnVjdCB2NGwyX2F1ZGlvKSk7CisJc3dpdGNoICh0LT5hdWRtb2RlKSB7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgorCQlkcHJpbnRrKDIsICJWSURJT0NfU19UVU5FUjogVjRMMl9UVU5FUl9NT0RFX1NURVJFT1xuIik7CisJCWZtX21hdHJpeCA9IDB4MzAwMTsgLyogc3RlcmVvICovCisJCXNyYyA9IDB4MDAyMDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzI6CisJCWRwcmludGsoMiwgIlZJRElPQ19TX1RVTkVSOiBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzJcbiIpOworCQlmbV9tYXRyaXggPSAweDMwMDA7IC8qIGJpbGluZ3VhbCAqLworCQlzcmMgPSAweDAwMjA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgorCQlkcHJpbnRrKDIsICJWSURJT0NfU19UVU5FUjogVjRMMl9UVU5FUl9NT0RFX0xBTkcxXG4iKTsKKwkJZm1fbWF0cml4ID0gMHgzMDAwOyAvKiBtb25vICovCisJCXNyYyA9IDB4MDAwMDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzI6CisJCWRwcmludGsoMiwgIlZJRElPQ19TX1RVTkVSOiBWNEwyX1RVTkVSX01PREVfTEFORzJcbiIpOworCQlmbV9tYXRyaXggPSAweDMwMDA7IC8qIG1vbm8gKi8KKwkJc3JjID0gMHgwMDEwOworCQlicmVhazsKKwlkZWZhdWx0OiAvKiBjYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POiAqLworCQlkcHJpbnRrKDIsICJWSURJT0NfU19UVU5FUjogVERBOTg0MF9TRVRfTU9OT1xuIik7CisJCWZtX21hdHJpeCA9IDB4MzAwMDsgLyogbW9ubyAqLworCQlzcmMgPSAweDAwMzA7CiAJCWJyZWFrOwogCX0KLQljYXNlIFZJRElPQ19TX0FVRElPOgotCXsKLQkJc3RydWN0IHY0bDJfYXVkaW8gKmEgPSBhcmc7Ci0JCWRwcmludGsoMiwgIlZJRElPQ19TX0FVRElPOiAlZFxuIiwgYS0+aW5kZXgpOwotCQlicmVhazsKKwltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMGUsIGZtX21hdHJpeCk7CisJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDA4LCBzcmMpOworCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwOSwgc3JjKTsKKwltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMGEsIHNyYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopZGV2LT5leHRfcHJpdjsKKworCWRwcmludGsoMiwgIlZJRElPQ19HX0ZSRVE6IGZyZXE6MHglMDh4LlxuIiwgZi0+ZnJlcXVlbmN5KTsKKworCWlmICghYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MgfHwgYXY3MTEwLT5jdXJyZW50X2lucHV0ICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOworCWYtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKKwlmLT5mcmVxdWVuY3kgPQlhdjcxMTAtPmN1cnJlbnRfZnJlcTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKilkZXYtPmV4dF9wcml2OworCisJZHByaW50aygyLCAiVklESU9DX1NfRlJFUVVFTkNZOiBmcmVxOjB4JTA4eC5cbiIsIGYtPmZyZXF1ZW5jeSk7CisKKwlpZiAoIWF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzIHx8IGF2NzExMC0+Y3VycmVudF9pbnB1dCAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChWNEwyX1RVTkVSX0FOQUxPR19UViAhPSBmLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwMCwgMHhmZmUwKTsgLyogZmFzdCBtdXRlICovCisJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDA3LCAweGZmZTApOworCisJLyogdHVuZSBpbiBkZXNpcmVkIGZyZXF1ZW5jeSAqLworCWlmIChhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyAmIEFOQUxPR19UVU5FUl9WRVMxODIwKQorCQl2ZXMxODIwX3NldF90dl9mcmVxKGRldiwgZi0+ZnJlcXVlbmN5KTsKKwllbHNlIGlmIChhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyAmIEFOQUxPR19UVU5FUl9TVFYwMjk3KQorCQlzdHYwMjk3X3NldF90dl9mcmVxKGRldiwgZi0+ZnJlcXVlbmN5KTsKKwlhdjcxMTAtPmN1cnJlbnRfZnJlcSA9IGYtPmZyZXF1ZW5jeTsKKworCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAxNSwgMHgwMDNmKTsgLyogc3RhcnQgc3RlcmVvIGRldGVjdGlvbiAqLworCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAxNSwgMHgwMDAwKTsKKwltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMDAsIDB4NGYwMCk7IC8qIGxvdWRzcGVha2VyICsgaGVhZHBob25lICovCisJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDA3LCAweDRmMDApOyAvKiBTQ0FSVCAxIHZvbHVtZSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfaW5wdXQgKmkpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKilkZXYtPmV4dF9wcml2OworCisJZHByaW50aygyLCAiVklESU9DX0VOVU1JTlBVVDogJWRcbiIsIGktPmluZGV4KTsKKworCWlmIChhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncykgeworCQlpZiAoaS0+aW5kZXggPCAwIHx8IGktPmluZGV4ID49IDQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlpZiAoaS0+aW5kZXggIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOwogCX0KLQljYXNlIFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQOgotCXsKLQkJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXAgKmNhcCA9IGFyZzsKLQkJZHByaW50aygyLCAiVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVBcbiIpOwotCQltZW1zZXQoY2FwLCAwLCBzaXplb2YgKmNhcCk7Ci0JCWlmIChGV19WRVJTSU9OKGF2NzExMC0+YXJtX2FwcCkgPj0gMHgyNjIzKSB7Ci0JCQljYXAtPnNlcnZpY2Vfc2V0ID0gVjRMMl9TTElDRURfV1NTXzYyNTsKLQkJCWNhcC0+c2VydmljZV9saW5lc1swXVsyM10gPSBWNEwyX1NMSUNFRF9XU1NfNjI1OwotCQl9Ci0JCWJyZWFrOworCisJbWVtY3B5KGksICZpbnB1dHNbaS0+aW5kZXhdLCBzaXplb2Yoc3RydWN0IHY0bDJfaW5wdXQpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50ICppbnB1dCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKWRldi0+ZXh0X3ByaXY7CisKKwkqaW5wdXQgPSBhdjcxMTAtPmN1cnJlbnRfaW5wdXQ7CisJZHByaW50aygyLCAiVklESU9DX0dfSU5QVVQ6ICVkXG4iLCAqaW5wdXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IGlucHV0KQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopZGV2LT5leHRfcHJpdjsKKworCWRwcmludGsoMiwgIlZJRElPQ19TX0lOUFVUOiAlZFxuIiwgaW5wdXQpOworCisJaWYgKCFhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncykKKwkJcmV0dXJuIDA7CisKKwlpZiAoaW5wdXQgPCAwIHx8IGlucHV0ID49IDQpCisJCXJldHVybiAtRUlOVkFMOworCisJYXY3MTEwLT5jdXJyZW50X2lucHV0ID0gaW5wdXQ7CisJcmV0dXJuIGF2NzExMF9kdmJfY19zd2l0Y2goZmgpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJZHByaW50aygyLCAiVklESU9DX0dfQVVESU86ICVkXG4iLCBhLT5pbmRleCk7CisJaWYgKGEtPmluZGV4ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCW1lbWNweShhLCAmbXNwMzQwMF92NGwyX2F1ZGlvLCBzaXplb2Yoc3RydWN0IHY0bDJfYXVkaW8pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWRwcmludGsoMiwgIlZJRElPQ19TX0FVRElPOiAlZFxuIiwgYS0+aW5kZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX3NsaWNlZF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQkJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXAgKmNhcCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKWRldi0+ZXh0X3ByaXY7CisKKwlkcHJpbnRrKDIsICJWSURJT0NfR19TTElDRURfVkJJX0NBUFxuIik7CisJaWYgKGNhcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfT1VUUFVUKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoRldfVkVSU0lPTihhdjcxMTAtPmFybV9hcHApID49IDB4MjYyMykgeworCQljYXAtPnNlcnZpY2Vfc2V0ID0gVjRMMl9TTElDRURfV1NTXzYyNTsKKwkJY2FwLT5zZXJ2aWNlX2xpbmVzWzBdWzIzXSA9IFY0TDJfU0xJQ0VEX1dTU182MjU7CiAJfQotCWNhc2UgVklESU9DX0dfRk1UOgotCXsKLQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOwotCQlkcHJpbnRrKDIsICJWSURJT0NfR19GTVQ6XG4iKTsKLQkJaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX09VVFBVVCB8fAotCQkgICAgRldfVkVSU0lPTihhdjcxMTAtPmFybV9hcHApIDwgMHgyNjIzKQotCQkJcmV0dXJuIC1FQUdBSU47IC8qIGhhbmRsZWQgYnkgY29yZSBkcml2ZXIgKi8KLQkJbWVtc2V0KCZmLT5mbXQuc2xpY2VkLCAwLCBzaXplb2YgZi0+Zm10LnNsaWNlZCk7Ci0JCWlmIChhdjcxMTAtPndzc01vZGUpIHsKLQkJCWYtPmZtdC5zbGljZWQuc2VydmljZV9zZXQgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OwotCQkJZi0+Zm10LnNsaWNlZC5zZXJ2aWNlX2xpbmVzWzBdWzIzXSA9IFY0TDJfU0xJQ0VEX1dTU182MjU7Ci0JCQlmLT5mbXQuc2xpY2VkLmlvX3NpemUgPSBzaXplb2YgKHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSk7Ci0JCX0KLQkJYnJlYWs7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3NsaWNlZF92Ymlfb3V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopZGV2LT5leHRfcHJpdjsKKworCWRwcmludGsoMiwgIlZJRElPQ19HX0ZNVDpcbiIpOworCWlmIChGV19WRVJTSU9OKGF2NzExMC0+YXJtX2FwcCkgPCAweDI2MjMpCisJCXJldHVybiAtRUlOVkFMOworCW1lbXNldCgmZi0+Zm10LnNsaWNlZCwgMCwgc2l6ZW9mIGYtPmZtdC5zbGljZWQpOworCWlmIChhdjcxMTAtPndzc01vZGUpIHsKKwkJZi0+Zm10LnNsaWNlZC5zZXJ2aWNlX3NldCA9IFY0TDJfU0xJQ0VEX1dTU182MjU7CisJCWYtPmZtdC5zbGljZWQuc2VydmljZV9saW5lc1swXVsyM10gPSBWNEwyX1NMSUNFRF9XU1NfNjI1OworCQlmLT5mbXQuc2xpY2VkLmlvX3NpemUgPSBzaXplb2Yoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhKTsKIAl9Ci0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7Ci0JCWRwcmludGsoMiwgIlZJRElPQ19TX0ZNVFxuIik7Ci0JCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQgfHwKLQkJICAgIEZXX1ZFUlNJT04oYXY3MTEwLT5hcm1fYXBwKSA8IDB4MjYyMykKLQkJCXJldHVybiAtRUFHQUlOOyAvKiBoYW5kbGVkIGJ5IGNvcmUgZHJpdmVyICovCi0JCWlmIChmLT5mbXQuc2xpY2VkLnNlcnZpY2Vfc2V0ICE9IFY0TDJfU0xJQ0VEX1dTU182MjUgJiYKLQkJICAgIGYtPmZtdC5zbGljZWQuc2VydmljZV9saW5lc1swXVsyM10gIT0gVjRMMl9TTElDRURfV1NTXzYyNSkgewotCQkJbWVtc2V0KCZmLT5mbXQuc2xpY2VkLCAwLCBzaXplb2YgZi0+Zm10LnNsaWNlZCk7Ci0JCQkvKiBXU1MgY29udHJvbGxlZCBieSBmaXJtd2FyZSAqLwotCQkJYXY3MTEwLT53c3NNb2RlID0gMDsKLQkJCWF2NzExMC0+d3NzRGF0YSA9IDA7Ci0JCQlyZXR1cm4gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfRU5DT0RFUiwKLQkJCQkJICAgICBTZXRXU1NDb25maWcsIDEsIDApOwotCQl9IGVsc2UgewotCQkJbWVtc2V0KCZmLT5mbXQuc2xpY2VkLCAwLCBzaXplb2YgZi0+Zm10LnNsaWNlZCk7Ci0JCQlmLT5mbXQuc2xpY2VkLnNlcnZpY2Vfc2V0ID0gVjRMMl9TTElDRURfV1NTXzYyNTsKLQkJCWYtPmZtdC5zbGljZWQuc2VydmljZV9saW5lc1swXVsyM10gPSBWNEwyX1NMSUNFRF9XU1NfNjI1OwotCQkJZi0+Zm10LnNsaWNlZC5pb19zaXplID0gc2l6ZW9mIChzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEpOwotCQkJLyogV1NTIGNvbnRyb2xsZWQgYnkgdXNlcnNwYWNlICovCi0JCQlhdjcxMTAtPndzc01vZGUgPSAxOwotCQkJYXY3MTEwLT53c3NEYXRhID0gMDsKLQkJfQotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKCJubyBzdWNoIGlvY3RsXG4iKTsKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfc2xpY2VkX3ZiaV9vdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKilkZXYtPmV4dF9wcml2OworCisJZHByaW50aygyLCAiVklESU9DX1NfRk1UXG4iKTsKKwlpZiAoRldfVkVSU0lPTihhdjcxMTAtPmFybV9hcHApIDwgMHgyNjIzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZi0+Zm10LnNsaWNlZC5zZXJ2aWNlX3NldCAhPSBWNEwyX1NMSUNFRF9XU1NfNjI1ICYmCisJICAgIGYtPmZtdC5zbGljZWQuc2VydmljZV9saW5lc1swXVsyM10gIT0gVjRMMl9TTElDRURfV1NTXzYyNSkgeworCQltZW1zZXQoJmYtPmZtdC5zbGljZWQsIDAsIHNpemVvZihmLT5mbXQuc2xpY2VkKSk7CisJCS8qIFdTUyBjb250cm9sbGVkIGJ5IGZpcm13YXJlICovCisJCWF2NzExMC0+d3NzTW9kZSA9IDA7CisJCWF2NzExMC0+d3NzRGF0YSA9IDA7CisJCXJldHVybiBhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9FTkNPREVSLAorCQkJCSAgICAgU2V0V1NTQ29uZmlnLCAxLCAwKTsKKwl9IGVsc2UgeworCQltZW1zZXQoJmYtPmZtdC5zbGljZWQsIDAsIHNpemVvZihmLT5mbXQuc2xpY2VkKSk7CisJCWYtPmZtdC5zbGljZWQuc2VydmljZV9zZXQgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OworCQlmLT5mbXQuc2xpY2VkLnNlcnZpY2VfbGluZXNbMF1bMjNdID0gVjRMMl9TTElDRURfV1NTXzYyNTsKKwkJZi0+Zm10LnNsaWNlZC5pb19zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSk7CisJCS8qIFdTUyBjb250cm9sbGVkIGJ5IHVzZXJzcGFjZSAqLworCQlhdjcxMTAtPndzc01vZGUgPSAxOworCQlhdjcxMTAtPndzc0RhdGEgPSAwOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTYwOSwyMiArNjE3LDYgQEAKICAqIElOSVRJQUxJWkFUSU9OCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbl9pb2N0bHMgaW9jdGxzW10gPSB7Ci0JeyBWSURJT0NfRU5VTUlOUFVULAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX0dfSU5QVVQsCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfU19JTlBVVCwJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19HX0ZSRVFVRU5DWSwJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19TX0ZSRVFVRU5DWSwJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19HX1RVTkVSLAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfVFVORVIsCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfR19BVURJTywJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19TX0FVRElPLAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVAsIFNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfR19GTVQsCQlTQUE3MTQ2X0JFRk9SRSB9LAotCXsgVklESU9DX1NfRk1ULAkJU0FBNzE0Nl9CRUZPUkUgfSwKLQl7IDAsIDAgfQotfTsKLQogc3RhdGljIHU4IHNhYTcxMTNfaW5pdF9yZWdzW10gPSB7CiAJMHgwMiwgMHhkMCwKIAkweDAzLCAweDIzLApAQCAtNzg4LDIwICs3ODAsMzQgQEAKIGludCBhdjcxMTBfaW5pdF92NGwoc3RydWN0IGF2NzExMCAqYXY3MTEwKQogewogCXN0cnVjdCBzYWE3MTQ2X2RldiogZGV2ID0gYXY3MTEwLT5kZXY7CisJc3RydWN0IHNhYTcxNDZfZXh0X3Z2ICp2dl9kYXRhOwogCWludCByZXQ7CiAKIAkvKiBzcGVjaWFsIGNhc2UgRFZCLUM6IHRoZXNlIGNhcmRzIGhhdmUgYW4gYW5hbG9nIHR1bmVyCiAJICAgcGx1cyBuZWVkIHNvbWUgc3BlY2lhbCBoYW5kbGluZywgc28gd2UgaGF2ZSBzZXBhcmF0ZQogCSAgIHNhYTcxNDZfZXh0X3Z2IGRhdGEgZm9yIHRoZXNlLi4uICovCiAJaWYgKGF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzKQotCQlyZXQgPSBzYWE3MTQ2X3Z2X2luaXQoZGV2LCAmYXY3MTEwX3Z2X2RhdGFfYyk7CisJCXZ2X2RhdGEgPSAmYXY3MTEwX3Z2X2RhdGFfYzsKIAllbHNlCi0JCXJldCA9IHNhYTcxNDZfdnZfaW5pdChkZXYsICZhdjcxMTBfdnZfZGF0YV9zdCk7CisJCXZ2X2RhdGEgPSAmYXY3MTEwX3Z2X2RhdGFfc3Q7CisJcmV0ID0gc2FhNzE0Nl92dl9pbml0KGRldiwgdnZfZGF0YSk7CiAKIAlpZiAocmV0KSB7CiAJCUVSUigoImNhbm5vdCBpbml0IGNhcHR1cmUgZGV2aWNlLiBza2lwcGluZy5cbiIpKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQorCXZ2X2RhdGEtPm9wcy52aWRpb2NfZW51bV9pbnB1dCA9IHZpZGlvY19lbnVtX2lucHV0OworCXZ2X2RhdGEtPm9wcy52aWRpb2NfZ19pbnB1dCA9IHZpZGlvY19nX2lucHV0OworCXZ2X2RhdGEtPm9wcy52aWRpb2Nfc19pbnB1dCA9IHZpZGlvY19zX2lucHV0OworCXZ2X2RhdGEtPm9wcy52aWRpb2NfZ190dW5lciA9IHZpZGlvY19nX3R1bmVyOworCXZ2X2RhdGEtPm9wcy52aWRpb2Nfc190dW5lciA9IHZpZGlvY19zX3R1bmVyOworCXZ2X2RhdGEtPm9wcy52aWRpb2NfZ19mcmVxdWVuY3kgPSB2aWRpb2NfZ19mcmVxdWVuY3k7CisJdnZfZGF0YS0+b3BzLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IHZpZGlvY19zX2ZyZXF1ZW5jeTsKKwl2dl9kYXRhLT5vcHMudmlkaW9jX2dfYXVkaW8gPSB2aWRpb2NfZ19hdWRpbzsKKwl2dl9kYXRhLT5vcHMudmlkaW9jX3NfYXVkaW8gPSB2aWRpb2Nfc19hdWRpbzsKKwl2dl9kYXRhLT5vcHMudmlkaW9jX2dfc2xpY2VkX3ZiaV9jYXAgPSB2aWRpb2NfZ19zbGljZWRfdmJpX2NhcDsKKwl2dl9kYXRhLT5vcHMudmlkaW9jX2dfZm10X3NsaWNlZF92Ymlfb3V0ID0gdmlkaW9jX2dfZm10X3NsaWNlZF92Ymlfb3V0OworCXZ2X2RhdGEtPm9wcy52aWRpb2Nfc19mbXRfc2xpY2VkX3ZiaV9vdXQgPSB2aWRpb2Nfc19mbXRfc2xpY2VkX3ZiaV9vdXQ7CiAKIAlpZiAoc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJmF2NzExMC0+djRsX2RldiwgZGV2LCAiYXY3MTEwIiwgVkZMX1RZUEVfR1JBQkJFUikpIHsKIAkJRVJSKCgiY2Fubm90IHJlZ2lzdGVyIGNhcHR1cmUgZGV2aWNlLiBza2lwcGluZy5cbiIpKTsKQEAgLTkwMCw5ICs5MDYsNiBAQAogCS5udW1fc3Rkcwk9IEFSUkFZX1NJWkUoc3RhbmRhcmQpLAogCS5zdGRfY2FsbGJhY2sJPSAmc3RkX2NhbGxiYWNrLAogCi0JLmlvY3RscwkJPSAmaW9jdGxzWzBdLAotCS5pb2N0bAkJPSBhdjcxMTBfaW9jdGwsCi0KIAkudmJpX2ZvcHMub3Blbgk9IGF2NzExMF92YmlfcmVzZXQsCiAJLnZiaV9mb3BzLnJlbGVhc2UgPSBhdjcxMTBfdmJpX3Jlc2V0LAogCS52YmlfZm9wcy53cml0ZQk9IGF2NzExMF92Ymlfd3JpdGUsCkBAIC05MTgsOSArOTIxLDYgQEAKIAkubnVtX3N0ZHMJPSBBUlJBWV9TSVpFKHN0YW5kYXJkKSwKIAkuc3RkX2NhbGxiYWNrCT0gJnN0ZF9jYWxsYmFjaywKIAotCS5pb2N0bHMJCT0gJmlvY3Rsc1swXSwKLQkuaW9jdGwJCT0gYXY3MTEwX2lvY3RsLAotCiAJLnZiaV9mb3BzLm9wZW4JPSBhdjcxMTBfdmJpX3Jlc2V0LAogCS52YmlfZm9wcy5yZWxlYXNlID0gYXY3MTEwX3ZiaV9yZXNldCwKIAkudmJpX2ZvcHMud3JpdGUJPSBhdjcxMTBfdmJpX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYwppbmRleCA0MTgyMTIxLi44NTVmZTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYwpAQCAtMTQwNCw2ICsxNDA0LDQxIEBACiAJcmV0dXJuIGVycjsKIH0KIAorI2RlZmluZSBLTkMxX0lOUFVUUyAyCitzdGF0aWMgc3RydWN0IHY0bDJfaW5wdXQga25jMV9pbnB1dHNbS05DMV9JTlBVVFNdID0geworCXswLCAiQ29tcG9zaXRlIiwgVjRMMl9JTlBVVF9UWVBFX1RVTkVSLCAxLCAwLCBWNEwyX1NURF9QQUxfQkcgfCBWNEwyX1NURF9OVFNDX00sIDB9LAorCXsxLCAiUy1WaWRlbyIsIFY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsIDIsIDAsIFY0TDJfU1REX1BBTF9CRyB8IFY0TDJfU1REX05UU0NfTSwgMH0sCit9OworCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfaW5wdXQgKmkpCit7CisJZHByaW50aygxLCAiVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsIGktPmluZGV4KTsKKwlpZiAoaS0+aW5kZXggPCAwIHx8IGktPmluZGV4ID49IEtOQzFfSU5QVVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltZW1jcHkoaSwgJmtuYzFfaW5wdXRzW2ktPmluZGV4XSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgKmkpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGJ1ZGdldF9hdiAqYnVkZ2V0X2F2ID0gKHN0cnVjdCBidWRnZXRfYXYgKilkZXYtPmV4dF9wcml2OworCisJKmkgPSBidWRnZXRfYXYtPmN1cl9pbnB1dDsKKworCWRwcmludGsoMSwgIlZJRElPQ19HX0lOUFVUICVkLlxuIiwgKmkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IGlucHV0KQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBidWRnZXRfYXYgKmJ1ZGdldF9hdiA9IChzdHJ1Y3QgYnVkZ2V0X2F2ICopZGV2LT5leHRfcHJpdjsKKworCWRwcmludGsoMSwgIlZJRElPQ19TX0lOUFVUICVkLlxuIiwgaW5wdXQpOworCXJldHVybiBzYWE3MTEzX3NldGlucHV0KGJ1ZGdldF9hdiwgaW5wdXQpOworfQorCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0X3Z2IHZ2X2RhdGE7CiAKIHN0YXRpYyBpbnQgYnVkZ2V0X2F2X2F0dGFjaChzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgc3RydWN0IHNhYTcxNDZfcGNpX2V4dGVuc2lvbl9kYXRhICppbmZvKQpAQCAtMTQ0Miw2ICsxNDc3LDkgQEAKIAkJCUVSUigoImNhbm5vdCBpbml0IHZ2IHN1YnN5c3RlbS5cbiIpKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KKwkJdnZfZGF0YS5vcHMudmlkaW9jX2VudW1faW5wdXQgPSB2aWRpb2NfZW51bV9pbnB1dDsKKwkJdnZfZGF0YS5vcHMudmlkaW9jX2dfaW5wdXQgPSB2aWRpb2NfZ19pbnB1dDsKKwkJdnZfZGF0YS5vcHMudmlkaW9jX3NfaW5wdXQgPSB2aWRpb2Nfc19pbnB1dDsKIAogCQlpZiAoKGVyciA9IHNhYTcxNDZfcmVnaXN0ZXJfZGV2aWNlKCZidWRnZXRfYXYtPnZkLCBkZXYsICJrbmMxIiwgVkZMX1RZUEVfR1JBQkJFUikpKSB7CiAJCQkvKiBmaXhtZTogcHJvcGVyIGNsZWFudXAgaGVyZSAqLwpAQCAtMTQ4MCw1NCArMTUxOCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgS05DMV9JTlBVVFMgMgotc3RhdGljIHN0cnVjdCB2NGwyX2lucHV0IGtuYzFfaW5wdXRzW0tOQzFfSU5QVVRTXSA9IHsKLQl7MCwgIkNvbXBvc2l0ZSIsIFY0TDJfSU5QVVRfVFlQRV9UVU5FUiwgMSwgMCwgVjRMMl9TVERfUEFMX0JHIHwgVjRMMl9TVERfTlRTQ19NLCAwfSwKLQl7MSwgIlMtVmlkZW8iLCBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLCAyLCAwLCBWNEwyX1NURF9QQUxfQkcgfCBWNEwyX1NURF9OVFNDX00sIDB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbl9pb2N0bHMgaW9jdGxzW10gPSB7Ci0Je1ZJRElPQ19FTlVNSU5QVVQsIFNBQTcxNDZfRVhDTFVTSVZFfSwKLQl7VklESU9DX0dfSU5QVVQsIFNBQTcxNDZfRVhDTFVTSVZFfSwKLQl7VklESU9DX1NfSU5QVVQsIFNBQTcxNDZfRVhDTFVTSVZFfSwKLQl7MCwgMH0KLX07Ci0KLXN0YXRpYyBsb25nIGF2X2lvY3RsKHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgYnVkZ2V0X2F2ICpidWRnZXRfYXYgPSAoc3RydWN0IGJ1ZGdldF9hdiAqKSBkZXYtPmV4dF9wcml2OwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ19FTlVNSU5QVVQ6ewotCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaSA9IGFyZzsKLQotCQlkcHJpbnRrKDEsICJWSURJT0NfRU5VTUlOUFVUICVkLlxuIiwgaS0+aW5kZXgpOwotCQlpZiAoaS0+aW5kZXggPCAwIHx8IGktPmluZGV4ID49IEtOQzFfSU5QVVRTKSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQltZW1jcHkoaSwgJmtuYzFfaW5wdXRzW2ktPmluZGV4XSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSk7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19HX0lOUFVUOnsKLQkJaW50ICppbnB1dCA9IChpbnQgKikgYXJnOwotCi0JCSppbnB1dCA9IGJ1ZGdldF9hdi0+Y3VyX2lucHV0OwotCi0JCWRwcmludGsoMSwgIlZJRElPQ19HX0lOUFVUICVkLlxuIiwgKmlucHV0KTsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX1NfSU5QVVQ6ewotCQlpbnQgaW5wdXQgPSAqKGludCAqKSBhcmc7Ci0JCWRwcmludGsoMSwgIlZJRElPQ19TX0lOUFVUICVkLlxuIiwgaW5wdXQpOwotCQlyZXR1cm4gc2FhNzExM19zZXRpbnB1dChidWRnZXRfYXYsIGlucHV0KTsKLQl9Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9zdGFuZGFyZCBzdGFuZGFyZFtdID0gewogCXsubmFtZSA9ICJQQUwiLC5pZCA9IFY0TDJfU1REX1BBTCwKIAkgLnZfb2Zmc2V0ID0gMHgxNywudl9maWVsZCA9IDI4OCwKQEAgLTE1NDYsOCArMTUzNiw2IEBACiAJLmZsYWdzID0gMCwKIAkuc3RkcyA9ICZzdGFuZGFyZFswXSwKIAkubnVtX3N0ZHMgPSBBUlJBWV9TSVpFKHN0YW5kYXJkKSwKLQkuaW9jdGxzID0gJmlvY3Rsc1swXSwKLQkuaW9jdGwgPSBhdl9pb2N0bCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb24gYnVkZ2V0X2V4dGVuc2lvbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKaW5kZXggYmNiYzVkNC4uMzcxYTcxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMKQEAgLTEwNzYsNiArMTA3NiwxMCBAQAogCS5kZWx0YWYgPSAweGE1MTEsCiB9OwogCitzdGF0aWMgc3RydWN0IHRkYTgyN3hfY29uZmlnIHRkYTgyN3hfY29uZmlnID0geworCS5jb25maWcgPSAwLAorfTsKKwogLyogVFQgUzItMzIwMCBEVkItUyAoU1RCMDg5OSkgSW5pdHRhYiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzdGIwODk5X3MxX3JlZyB0dDMyMDBfc3RiMDg5OV9zMV9pbml0XzFbXSA9IHsKIApAQCAtMTQxNCw3ICsxNDE4LDcgQEAKIAljYXNlIDB4MTAxYTogLyogVFQgQnVkZ2V0LUMtMTUwMSAocGhpbGlwcyB0ZGExMDAyMy9waGlsaXBzIHRkYTgyNzRBKSAqLwogCQlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDIzX2F0dGFjaCwgJnRkYTEwMDIzX2NvbmZpZywgJmJ1ZGdldF9jaS0+YnVkZ2V0LmkyY19hZGFwLCAweDQ4KTsKIAkJaWYgKGJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCkgewotCQkJaWYgKGR2Yl9hdHRhY2godGRhODI3eF9hdHRhY2gsIGJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCwgMHg2MSwgJmJ1ZGdldF9jaS0+YnVkZ2V0LmkyY19hZGFwLCBOVUxMKSA9PSBOVUxMKSB7CisJCQlpZiAoZHZiX2F0dGFjaCh0ZGE4Mjd4X2F0dGFjaCwgYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kLCAweDYxLCAmYnVkZ2V0X2NpLT5idWRnZXQuaTJjX2FkYXAsICZ0ZGE4Mjd4X2NvbmZpZykgPT0gTlVMTCkgewogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IE5vIHRkYTgyN3ggZm91bmQhXG4iLCBfX2Z1bmNfXyk7CiAJCQkJZHZiX2Zyb250ZW5kX2RldGFjaChidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQpOwogCQkJCWJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vZHNicjEwMC5jCmluZGV4IDIwMTRlYmMuLmNjNTRlZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vZHNicjEwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vZHNicjEwMC5jCkBAIC0zOTAsOSArMzkwLDExIEBACiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdikKIHsKKwlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwogCXN0cmxjcHkodi0+ZHJpdmVyLCAiZHNicjEwMCIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJELUxpbmsgUi0xMDAgVVNCIEZNIFJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiVVNCIik7CisJdXNiX21ha2VfcGF0aChyYWRpby0+dXNiZGV2LCB2LT5idXNfaW5mbywgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CiAJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CiAJcmV0dXJuIDA7CkBAIC00NTAsNyArNDUyLDEwIEBACiAJaWYgKHJhZGlvLT5yZW1vdmVkKQogCQlyZXR1cm4gLUVJTzsKIAorCW11dGV4X2xvY2soJnJhZGlvLT5sb2NrKTsKIAlyYWRpby0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKKwltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKKwogCXJldHZhbCA9IGRzYnIxMDBfc2V0ZnJlcShyYWRpbywgcmFkaW8tPmN1cmZyZXEpOwogCWlmIChyZXR2YWwgPCAwKQogCQlkZXZfd2FybigmcmFkaW8tPnVzYmRldi0+ZGV2LCAiU2V0IGZyZXF1ZW5jeSBmYWlsZWRcbiIpOwpAQCAtNjAxLDcgKzYwNiwxMCBAQAogCWlmICghcmFkaW8pCiAJCXJldHVybiAtRU5PREVWOwogCisJbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOwogCXJhZGlvLT51c2VycyA9IDA7CisJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CisKIAlpZiAoIXJhZGlvLT5yZW1vdmVkKSB7CiAJCXJldHZhbCA9IGRzYnIxMDBfc3RvcChyYWRpbyk7CiAJCWlmIChyZXR2YWwgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYWltc2xhYi5jCmluZGV4IGJmYTEzYjguLmFjODJlMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYWltc2xhYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYWltc2xhYi5jCkBAIC0zMiwxNCArMzIsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YQkJCSovCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCi0jaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyCQkqLwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBrZXJuZWwgcmFkaW8gc3RydWN0cwkJKi8KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4JLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPCSovCisjaW5jbHVkZSA8bGludXgvaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CS8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTwkqLwotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMCwyKQorTU9EVUxFX0FVVEhPUigiTS5LaXJrd29vZCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFJhZGlvVHJhY2svUmFkaW9SZXZlYWwgcmFkaW8gY2FyZC4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2lmbmRlZiBDT05GSUdfUkFESU9fUlRSQUNLX1BPUlQKICNkZWZpbmUgQ09ORklHX1JBRElPX1JUUkFDS19QT1JUIC0xCkBAIC00Nyw4NiArNDgsOTUgQEAKIAogc3RhdGljIGludCBpbyA9IENPTkZJR19SQURJT19SVFJBQ0tfUE9SVDsKIHN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKLXN0YXRpYyBzdHJ1Y3QgbXV0ZXggbG9jazsKIAotc3RydWN0IHJ0X2RldmljZQorbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBSYWRpb1RyYWNrIGNhcmQgKDB4MjBmIG9yIDB4MzBmKSIpOworbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOworCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMikKKworc3RydWN0IHJ0cmFjawogewotCXVuc2lnbmVkIGxvbmcgaW5fdXNlOworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CiAJaW50IHBvcnQ7CiAJaW50IGN1cnZvbDsKIAl1bnNpZ25lZCBsb25nIGN1cmZyZXE7CiAJaW50IG11dGVkOworCWludCBpbzsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcnRyYWNrIHJ0cmFja19jYXJkOwogCiAvKiBsb2NhbCB0aGluZ3MgKi8KIAogc3RhdGljIHZvaWQgc2xlZXBfZGVsYXkobG9uZyBuKQogewogCS8qIFNsZWVwIG5pY2VseSBmb3IgJ24nIHVTICovCi0JaW50IGQ9bi9tc2Vjc190b19qaWZmaWVzKDEwMDApOwotCWlmKCFkKQorCWludCBkID0gbiAvIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCk7CisJaWYgKCFkKQogCQl1ZGVsYXkobik7CiAJZWxzZQogCQltc2xlZXAoamlmZmllc190b19tc2VjcyhkKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0X2RlY3ZvbCh2b2lkKQorc3RhdGljIHZvaWQgcnRfZGVjdm9sKHN0cnVjdCBydHJhY2sgKnJ0KQogewotCW91dGIoMHg1OCwgaW8pOwkJLyogdm9sdW1lIGRvd24gKyBzaWdzdHIgKyBvbgkqLworCW91dGIoMHg1OCwgcnQtPmlvKTsJCS8qIHZvbHVtZSBkb3duICsgc2lnc3RyICsgb24JKi8KIAlzbGVlcF9kZWxheSgxMDAwMDApOwotCW91dGIoMHhkOCwgaW8pOwkJLyogdm9sdW1lIHN0ZWFkeSArIHNpZ3N0ciArIG9uCSovCisJb3V0YigweGQ4LCBydC0+aW8pOwkJLyogdm9sdW1lIHN0ZWFkeSArIHNpZ3N0ciArIG9uCSovCiB9CiAKLXN0YXRpYyB2b2lkIHJ0X2luY3ZvbCh2b2lkKQorc3RhdGljIHZvaWQgcnRfaW5jdm9sKHN0cnVjdCBydHJhY2sgKnJ0KQogewotCW91dGIoMHg5OCwgaW8pOwkJLyogdm9sdW1lIHVwICsgc2lnc3RyICsgb24JKi8KKwlvdXRiKDB4OTgsIHJ0LT5pbyk7CQkvKiB2b2x1bWUgdXAgKyBzaWdzdHIgKyBvbgkqLwogCXNsZWVwX2RlbGF5KDEwMDAwMCk7Ci0Jb3V0YigweGQ4LCBpbyk7CQkvKiB2b2x1bWUgc3RlYWR5ICsgc2lnc3RyICsgb24JKi8KKwlvdXRiKDB4ZDgsIHJ0LT5pbyk7CQkvKiB2b2x1bWUgc3RlYWR5ICsgc2lnc3RyICsgb24JKi8KIH0KIAotc3RhdGljIHZvaWQgcnRfbXV0ZShzdHJ1Y3QgcnRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBydF9tdXRlKHN0cnVjdCBydHJhY2sgKnJ0KQogewotCWRldi0+bXV0ZWQgPSAxOwotCW11dGV4X2xvY2soJmxvY2spOwotCW91dGIoMHhkMCwgaW8pOwkJCS8qIHZvbHVtZSBzdGVhZHksIG9mZgkJKi8KLQltdXRleF91bmxvY2soJmxvY2spOworCXJ0LT5tdXRlZCA9IDE7CisJbXV0ZXhfbG9jaygmcnQtPmxvY2spOworCW91dGIoMHhkMCwgcnQtPmlvKTsJCS8qIHZvbHVtZSBzdGVhZHksIG9mZgkJKi8KKwltdXRleF91bmxvY2soJnJ0LT5sb2NrKTsKIH0KIAotc3RhdGljIGludCBydF9zZXR2b2woc3RydWN0IHJ0X2RldmljZSAqZGV2LCBpbnQgdm9sKQorc3RhdGljIGludCBydF9zZXR2b2woc3RydWN0IHJ0cmFjayAqcnQsIGludCB2b2wpCiB7CiAJaW50IGk7CiAKLQltdXRleF9sb2NrKCZsb2NrKTsKKwltdXRleF9sb2NrKCZydC0+bG9jayk7CiAKLQlpZih2b2wgPT0gZGV2LT5jdXJ2b2wpIHsJLyogcmVxdWVzdGVkIHZvbHVtZSA9IGN1cnJlbnQgKi8KLQkJaWYgKGRldi0+bXV0ZWQpIHsJLyogdXNlciBpcyB1bm11dGluZyB0aGUgY2FyZCAgKi8KLQkJCWRldi0+bXV0ZWQgPSAwOwotCQkJb3V0YiAoMHhkOCwgaW8pOwkvKiBlbmFibGUgY2FyZCAqLworCWlmICh2b2wgPT0gcnQtPmN1cnZvbCkgewkvKiByZXF1ZXN0ZWQgdm9sdW1lID0gY3VycmVudCAqLworCQlpZiAocnQtPm11dGVkKSB7CS8qIHVzZXIgaXMgdW5tdXRpbmcgdGhlIGNhcmQgICovCisJCQlydC0+bXV0ZWQgPSAwOworCQkJb3V0YigweGQ4LCBydC0+aW8pOwkvKiBlbmFibGUgY2FyZCAqLwogCQl9Ci0JCW11dGV4X3VubG9jaygmbG9jayk7CisJCW11dGV4X3VubG9jaygmcnQtPmxvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZih2b2wgPT0gMCkgewkJCS8qIHZvbHVtZSA9IDAgbWVhbnMgbXV0ZSB0aGUgY2FyZCAqLwotCQlvdXRiKDB4NDgsIGlvKTsJCS8qIHZvbHVtZSBkb3duIGJ1dCBzdGlsbCAib24iCSovCisJaWYgKHZvbCA9PSAwKSB7CQkJLyogdm9sdW1lID0gMCBtZWFucyBtdXRlIHRoZSBjYXJkICovCisJCW91dGIoMHg0OCwgcnQtPmlvKTsJLyogdm9sdW1lIGRvd24gYnV0IHN0aWxsICJvbiIJKi8KIAkJc2xlZXBfZGVsYXkoMjAwMDAwMCk7CS8qIG1ha2Ugc3VyZSBpdCdzIHRvdGFsbHkgZG93bgkqLwotCQlvdXRiKDB4ZDAsIGlvKTsJCS8qIHZvbHVtZSBzdGVhZHksIG9mZgkJKi8KLQkJZGV2LT5jdXJ2b2wgPSAwOwkvKiB0cmFjayB0aGUgdm9sdW1lIHN0YXRlIQkqLwotCQltdXRleF91bmxvY2soJmxvY2spOworCQlvdXRiKDB4ZDAsIHJ0LT5pbyk7CS8qIHZvbHVtZSBzdGVhZHksIG9mZgkJKi8KKwkJcnQtPmN1cnZvbCA9IDA7CQkvKiB0cmFjayB0aGUgdm9sdW1lIHN0YXRlIQkqLworCQltdXRleF91bmxvY2soJnJ0LT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JZGV2LT5tdXRlZCA9IDA7Ci0JaWYodm9sID4gZGV2LT5jdXJ2b2wpCi0JCWZvcihpID0gZGV2LT5jdXJ2b2w7IGkgPCB2b2w7IGkrKykKLQkJCXJ0X2luY3ZvbCgpOworCXJ0LT5tdXRlZCA9IDA7CisJaWYgKHZvbCA+IHJ0LT5jdXJ2b2wpCisJCWZvciAoaSA9IHJ0LT5jdXJ2b2w7IGkgPCB2b2w7IGkrKykKKwkJCXJ0X2luY3ZvbChydCk7CiAJZWxzZQotCQlmb3IoaSA9IGRldi0+Y3Vydm9sOyBpID4gdm9sOyBpLS0pCi0JCQlydF9kZWN2b2woKTsKKwkJZm9yIChpID0gcnQtPmN1cnZvbDsgaSA+IHZvbDsgaS0tKQorCQkJcnRfZGVjdm9sKHJ0KTsKIAotCWRldi0+Y3Vydm9sID0gdm9sOwotCW11dGV4X3VubG9jaygmbG9jayk7CisJcnQtPmN1cnZvbCA9IHZvbDsKKwltdXRleF91bmxvY2soJnJ0LT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM1LDE1NSArMTQ1LDEzNyBAQAogICogYW5kIGJpdCA0ICgrMTYpIGlzIHRvIGtlZXAgdGhlIHNpZ25hbCBzdHJlbmd0aCBtZXRlciBlbmFibGVkCiAgKi8KIAotc3RhdGljIHZvaWQgc2VuZF8wX2J5dGUoaW50IHBvcnQsIHN0cnVjdCBydF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHNlbmRfMF9ieXRlKHN0cnVjdCBydHJhY2sgKnJ0KQogewotCWlmICgoZGV2LT5jdXJ2b2wgPT0gMCkgfHwgKGRldi0+bXV0ZWQpKSB7Ci0JCW91dGJfcCgxMjgrNjQrMTYrICAxLCBwb3J0KTsgICAvKiB3ci1lbmFibGUgKyBkYXRhIGxvdyAqLwotCQlvdXRiX3AoMTI4KzY0KzE2KzIrMSwgcG9ydCk7ICAgLyogY2xvY2sgKi8KKwlpZiAocnQtPmN1cnZvbCA9PSAwIHx8IHJ0LT5tdXRlZCkgeworCQlvdXRiX3AoMTI4KzY0KzE2KyAgMSwgcnQtPmlvKTsgICAvKiB3ci1lbmFibGUgKyBkYXRhIGxvdyAqLworCQlvdXRiX3AoMTI4KzY0KzE2KzIrMSwgcnQtPmlvKTsgICAvKiBjbG9jayAqLwogCX0KIAllbHNlIHsKLQkJb3V0Yl9wKDEyOCs2NCsxNis4KyAgMSwgcG9ydCk7ICAvKiBvbiArIHdyLWVuYWJsZSArIGRhdGEgbG93ICovCi0JCW91dGJfcCgxMjgrNjQrMTYrOCsyKzEsIHBvcnQpOyAgLyogY2xvY2sgKi8KKwkJb3V0Yl9wKDEyOCs2NCsxNis4KyAgMSwgcnQtPmlvKTsgIC8qIG9uICsgd3ItZW5hYmxlICsgZGF0YSBsb3cgKi8KKwkJb3V0Yl9wKDEyOCs2NCsxNis4KzIrMSwgcnQtPmlvKTsgIC8qIGNsb2NrICovCiAJfQogCXNsZWVwX2RlbGF5KDEwMDApOwogfQogCi1zdGF0aWMgdm9pZCBzZW5kXzFfYnl0ZShpbnQgcG9ydCwgc3RydWN0IHJ0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgc2VuZF8xX2J5dGUoc3RydWN0IHJ0cmFjayAqcnQpCiB7Ci0JaWYgKChkZXYtPmN1cnZvbCA9PSAwKSB8fCAoZGV2LT5tdXRlZCkpIHsKLQkJb3V0Yl9wKDEyOCs2NCsxNis0ICArMSwgcG9ydCk7ICAgLyogd3ItZW5hYmxlK2RhdGEgaGlnaCAqLwotCQlvdXRiX3AoMTI4KzY0KzE2KzQrMisxLCBwb3J0KTsgICAvKiBjbG9jayAqLworCWlmIChydC0+Y3Vydm9sID09IDAgfHwgcnQtPm11dGVkKSB7CisJCW91dGJfcCgxMjgrNjQrMTYrNCAgKzEsIHJ0LT5pbyk7ICAgLyogd3ItZW5hYmxlK2RhdGEgaGlnaCAqLworCQlvdXRiX3AoMTI4KzY0KzE2KzQrMisxLCBydC0+aW8pOyAgIC8qIGNsb2NrICovCiAJfQogCWVsc2UgewotCQlvdXRiX3AoMTI4KzY0KzE2KzgrNCAgKzEsIHBvcnQpOyAvKiBvbit3ci1lbmFibGUrZGF0YSBoaWdoICovCi0JCW91dGJfcCgxMjgrNjQrMTYrOCs0KzIrMSwgcG9ydCk7IC8qIGNsb2NrICovCisJCW91dGJfcCgxMjgrNjQrMTYrOCs0ICArMSwgcnQtPmlvKTsgLyogb24rd3ItZW5hYmxlK2RhdGEgaGlnaCAqLworCQlvdXRiX3AoMTI4KzY0KzE2KzgrNCsyKzEsIHJ0LT5pbyk7IC8qIGNsb2NrICovCiAJfQogCiAJc2xlZXBfZGVsYXkoMTAwMCk7CiB9CiAKLXN0YXRpYyBpbnQgcnRfc2V0ZnJlcShzdHJ1Y3QgcnRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZnJlcSkKK3N0YXRpYyBpbnQgcnRfc2V0ZnJlcShzdHJ1Y3QgcnRyYWNrICpydCwgdW5zaWduZWQgbG9uZyBmcmVxKQogewogCWludCBpOwogCi0JLyogYWRhcHRlZCBmcm9tIHJhZGlvLWF6dGVjaC5jICovCisJbXV0ZXhfbG9jaygmcnQtPmxvY2spOwkJCS8qIFN0b3Agb3RoZXIgb3BzIGludGVyZmVyaW5nICovCisKKwlydC0+Y3VyZnJlcSA9IGZyZXE7CiAKIAkvKiBub3cgdXNlcyBWSURFT19UVU5FUl9MT1cgZm9yIGZpbmUgdHVuaW5nICovCiAKIAlmcmVxICs9IDE3MTIwMDsJCQkvKiBBZGQgMTAuNyBNSHogSUYgCQkqLwogCWZyZXEgLz0gODAwOwkJCS8qIENvbnZlcnQgdG8gNTAga0h6IHVuaXRzCSovCiAKLQltdXRleF9sb2NrKCZsb2NrKTsJCQkvKiBTdG9wIG90aGVyIG9wcyBpbnRlcmZlcmluZyAqLwotCi0Jc2VuZF8wX2J5dGUgKGlvLCBkZXYpOwkJLyogIDA6IExTQiBvZiBmcmVxdWVuY3kJCSovCisJc2VuZF8wX2J5dGUocnQpOwkJLyogIDA6IExTQiBvZiBmcmVxdWVuY3kJCSovCiAKIAlmb3IgKGkgPSAwOyBpIDwgMTM7IGkrKykJLyogICA6IGZyZXF1ZW5jeSBiaXRzICgxLTEzKQkqLwogCQlpZiAoZnJlcSAmICgxIDw8IGkpKQotCQkJc2VuZF8xX2J5dGUgKGlvLCBkZXYpOworCQkJc2VuZF8xX2J5dGUocnQpOwogCQllbHNlCi0JCQlzZW5kXzBfYnl0ZSAoaW8sIGRldik7CisJCQlzZW5kXzBfYnl0ZShydCk7CiAKLQlzZW5kXzBfYnl0ZSAoaW8sIGRldik7CQkvKiAxNDogdGVzdCBiaXQgLSBhbHdheXMgMCAgICAqLwotCXNlbmRfMF9ieXRlIChpbywgZGV2KTsJCS8qIDE1OiB0ZXN0IGJpdCAtIGFsd2F5cyAwICAgICovCisJc2VuZF8wX2J5dGUocnQpOwkJLyogMTQ6IHRlc3QgYml0IC0gYWx3YXlzIDAgICAgKi8KKwlzZW5kXzBfYnl0ZShydCk7CQkvKiAxNTogdGVzdCBiaXQgLSBhbHdheXMgMCAgICAqLwogCi0Jc2VuZF8wX2J5dGUgKGlvLCBkZXYpOwkJLyogMTY6IGJhbmQgZGF0YSAwIC0gYWx3YXlzIDAgKi8KLQlzZW5kXzBfYnl0ZSAoaW8sIGRldik7CQkvKiAxNzogYmFuZCBkYXRhIDEgLSBhbHdheXMgMCAqLwotCXNlbmRfMF9ieXRlIChpbywgZGV2KTsJCS8qIDE4OiBiYW5kIGRhdGEgMiAtIGFsd2F5cyAwICovCi0Jc2VuZF8wX2J5dGUgKGlvLCBkZXYpOwkJLyogMTk6IHRpbWUgYmFzZSAtIGFsd2F5cyAwICAgKi8KKwlzZW5kXzBfYnl0ZShydCk7CQkvKiAxNjogYmFuZCBkYXRhIDAgLSBhbHdheXMgMCAqLworCXNlbmRfMF9ieXRlKHJ0KTsJCS8qIDE3OiBiYW5kIGRhdGEgMSAtIGFsd2F5cyAwICovCisJc2VuZF8wX2J5dGUocnQpOwkJLyogMTg6IGJhbmQgZGF0YSAyIC0gYWx3YXlzIDAgKi8KKwlzZW5kXzBfYnl0ZShydCk7CQkvKiAxOTogdGltZSBiYXNlIC0gYWx3YXlzIDAgICAqLwogCi0Jc2VuZF8wX2J5dGUgKGlvLCBkZXYpOwkJLyogMjA6IHNwYWNpbmcgKDAgPSAyNSBrSHopICAgKi8KLQlzZW5kXzFfYnl0ZSAoaW8sIGRldik7CQkvKiAyMTogc3BhY2luZyAoMSA9IDI1IGtIeikgICAqLwotCXNlbmRfMF9ieXRlIChpbywgZGV2KTsJCS8qIDIyOiBzcGFjaW5nICgwID0gMjUga0h6KSAgICovCi0Jc2VuZF8xX2J5dGUgKGlvLCBkZXYpOwkJLyogMjM6IEFNL0ZNIChGTSA9IDEsIGFsd2F5cykgKi8KKwlzZW5kXzBfYnl0ZShydCk7CQkvKiAyMDogc3BhY2luZyAoMCA9IDI1IGtIeikgICAqLworCXNlbmRfMV9ieXRlKHJ0KTsJCS8qIDIxOiBzcGFjaW5nICgxID0gMjUga0h6KSAgICovCisJc2VuZF8wX2J5dGUocnQpOwkJLyogMjI6IHNwYWNpbmcgKDAgPSAyNSBrSHopICAgKi8KKwlzZW5kXzFfYnl0ZShydCk7CQkvKiAyMzogQU0vRk0gKEZNID0gMSwgYWx3YXlzKSAqLwogCi0JaWYgKChkZXYtPmN1cnZvbCA9PSAwKSB8fCAoZGV2LT5tdXRlZCkpCi0JCW91dGIgKDB4ZDAsIGlvKTsJLyogdm9sdW1lIHN0ZWFkeSArIHNpZ3N0ciAqLworCWlmIChydC0+Y3Vydm9sID09IDAgfHwgcnQtPm11dGVkKQorCQlvdXRiKDB4ZDAsIHJ0LT5pbyk7CS8qIHZvbHVtZSBzdGVhZHkgKyBzaWdzdHIgKi8KIAllbHNlCi0JCW91dGIgKDB4ZDgsIGlvKTsJLyogdm9sdW1lIHN0ZWFkeSArIHNpZ3N0ciArIG9uICovCisJCW91dGIoMHhkOCwgcnQtPmlvKTsJLyogdm9sdW1lIHN0ZWFkeSArIHNpZ3N0ciArIG9uICovCiAKLQltdXRleF91bmxvY2soJmxvY2spOworCW11dGV4X3VubG9jaygmcnQtPmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnRfZ2V0c2lnc3RyKHN0cnVjdCBydF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcnRfZ2V0c2lnc3RyKHN0cnVjdCBydHJhY2sgKnJ0KQogewotCWlmIChpbmIoaW8pICYgMikJLyogYml0IHNldCA9IG5vIHNpZ25hbCBwcmVzZW50CSovCi0JCXJldHVybiAwOwotCXJldHVybiAxOwkJLyogc2lnbmFsIHByZXNlbnQJCSovCi19CisJaW50IHNpZyA9IDE7CiAKLXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKLQl7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9LHsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCi0JCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAweGZmLAotCQkuc3RlcCAgICAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMHhmZiwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCX0KLX07CisJbXV0ZXhfbG9jaygmcnQtPmxvY2spOworCWlmIChpbmIocnQtPmlvKSAmIDIpCS8qIGJpdCBzZXQgPSBubyBzaWduYWwgcHJlc2VudAkqLworCQlzaWcgPSAwOworCW11dGV4X3VubG9jaygmcnQtPmxvY2spOworCXJldHVybiBzaWc7Cit9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdikKIHsKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLWFpbXNsYWIiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiUmFkaW9UcmFjayIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIklTQSIpOworCXN0cmxjcHkodi0+YnVzX2luZm8sICJJU0EiLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKIAl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKLQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHJ0cmFjayAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCXYtPnJhbmdlbG93ID0gKDg3KjE2MDAwKTsKLQl2LT5yYW5nZWhpZ2ggPSAoMTA4KjE2MDAwKTsKKwl2LT5yYW5nZWxvdyA9IDg3ICogMTYwMDA7CisJdi0+cmFuZ2VoaWdoID0gMTA4ICogMTYwMDA7CiAJdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CiAJdi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKIAl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0Jdi0+c2lnbmFsID0gMHhmZmZmKnJ0X2dldHNpZ3N0cihydCk7CisJdi0+c2lnbmFsID0gMHhmZmZmICogcnRfZ2V0c2lnc3RyKHJ0KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0JaWYgKHYtPmluZGV4ID4gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHYtPmluZGV4ID8gLUVJTlZBTCA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBydHJhY2sgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotCXJ0LT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwotCXJ0X3NldGZyZXEocnQsIHJ0LT5jdXJmcmVxKTsKKwlydF9zZXRmcmVxKHJ0LCBmLT5mcmVxdWVuY3kpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcnRyYWNrICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSBydC0+Y3VyZnJlcTsKQEAgLTI5MywxNCArMjg1LDExIEBACiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKLQkJCQkJCXNpemVvZigqcWMpKTsKLQkJCXJldHVybiAwOwotCQl9CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMSk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMHhmZiwgMSwgMHhmZik7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMzA4LDE0ICsyOTcsMTQgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHJ0cmFjayAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKIAkJY3RybC0+dmFsdWUgPSBydC0+bXV0ZWQ7CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQljdHJsLT52YWx1ZSA9IHJ0LT5jdXJ2b2wgKiA2NTU0OworCQljdHJsLT52YWx1ZSA9IHJ0LT5jdXJ2b2w7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTMyNCwzMyArMzEzLDIyIEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBydHJhY2sgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWlmIChjdHJsLT52YWx1ZSkKIAkJCXJ0X211dGUocnQpOwogCQllbHNlCi0JCQlydF9zZXR2b2wocnQscnQtPmN1cnZvbCk7CisJCQlydF9zZXR2b2wocnQsIHJ0LT5jdXJ2b2wpOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJcnRfc2V0dm9sKHJ0LGN0cmwtPnZhbHVlKTsKKwkJcnRfc2V0dm9sKHJ0LCBjdHJsLT52YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWlmIChhLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKIHsKIAkqaSA9IDA7CkBAIC0zNTksMzYgKzMzNywzOCBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCA9IDA7CisJc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCBydHJhY2tfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBydF9kZXZpY2UgcnRyYWNrX3VuaXQ7Ci0KLXN0YXRpYyBpbnQgcnRyYWNrX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBydHJhY2tfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmcnRyYWNrX3VuaXQuaW5fdXNlKSA/IC1FQlVTWSA6IDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnRyYWNrX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCWNsZWFyX2JpdCgwLCAmcnRyYWNrX3VuaXQuaW5fdXNlKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBydHJhY2tfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gcnRyYWNrX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHJ0cmFja19leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSBydHJhY2tfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBydHJhY2tfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogfTsKIApAQCAtNDA3LDY0ICszODcsNjkgQEAKIAkudmlkaW9jX3NfY3RybCAgICAgID0gdmlkaW9jX3NfY3RybCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHJ0cmFja19yYWRpbyA9IHsKLQkubmFtZQkJPSAiUmFkaW9UcmFjayByYWRpbyIsCi0JLmZvcHMgICAgICAgICAgID0gJnJ0cmFja19mb3BzLAotCS5pb2N0bF9vcHMgCT0gJnJ0cmFja19pb2N0bF9vcHMsCi0JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IHJ0cmFja19pbml0KHZvaWQpCiB7Ci0JaWYoaW89PS0xKQotCXsKLQkJcHJpbnRrKEtFUk5fRVJSICJZb3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weD8/P1xuIik7CisJc3RydWN0IHJ0cmFjayAqcnQgPSAmcnRyYWNrX2NhcmQ7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZydC0+djRsMl9kZXY7CisJaW50IHJlczsKKworCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJydHJhY2siLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKKwlydC0+aW8gPSBpbzsKKworCWlmIChydC0+aW8gPT0gLTEpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJ5b3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weDIwZiBvciAweDMwZlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICghcmVxdWVzdF9yZWdpb24oaW8sIDIsICJydHJhY2siKSkKLQl7Ci0JCXByaW50ayhLRVJOX0VSUiAicnRyYWNrOiBwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIGlvKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHJ0LT5pbywgMiwgInJ0cmFjayIpKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAicG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBydC0+aW8pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCXZpZGVvX3NldF9kcnZkYXRhKCZydHJhY2tfcmFkaW8sICZydHJhY2tfdW5pdCk7CisJcmVzID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgdjRsMl9kZXYpOworCWlmIChyZXMgPCAwKSB7CisJCXJlbGVhc2VfcmVnaW9uKHJ0LT5pbywgMik7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKKwkJcmV0dXJuIHJlczsKKwl9CiAKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZydHJhY2tfcmFkaW8sIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7Ci0JCXJlbGVhc2VfcmVnaW9uKGlvLCAyKTsKKwlzdHJsY3B5KHJ0LT52ZGV2Lm5hbWUsIHY0bDJfZGV2LT5uYW1lLCBzaXplb2YocnQtPnZkZXYubmFtZSkpOworCXJ0LT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJcnQtPnZkZXYuZm9wcyA9ICZydHJhY2tfZm9wczsKKwlydC0+dmRldi5pb2N0bF9vcHMgPSAmcnRyYWNrX2lvY3RsX29wczsKKwlydC0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJdmlkZW9fc2V0X2RydmRhdGEoJnJ0LT52ZGV2LCBydCk7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZydC0+dmRldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKKwkJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmcnQtPnY0bDJfZGV2KTsKKwkJcmVsZWFzZV9yZWdpb24ocnQtPmlvLCAyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXByaW50ayhLRVJOX0lORk8gIkFJTVNsYWIgUmFkaW9UcmFjay9SYWRpb1JldmVhbCBjYXJkIGRyaXZlci5cbiIpOworCXY0bDJfaW5mbyh2NGwyX2RldiwgIkFJTVNsYWIgUmFkaW9UcmFjay9SYWRpb1JldmVhbCBjYXJkIGRyaXZlci5cbiIpOwogCiAJLyogU2V0IHVwIHRoZSBJL08gbG9ja2luZyAqLwogCi0JbXV0ZXhfaW5pdCgmbG9jayk7CisJbXV0ZXhfaW5pdCgmcnQtPmxvY2spOwogCiAJLyogbXV0ZSBjYXJkIC0gcHJldmVudHMgbm9pc3kgYm9vdHVwcyAqLwogCiAJLyogdGhpcyBlbnN1cmVzIHRoYXQgdGhlIHZvbHVtZSBpcyBhbGwgdGhlIHdheSBkb3duICAqLwotCW91dGIoMHg0OCwgaW8pOwkJLyogdm9sdW1lIGRvd24gYnV0IHN0aWxsICJvbiIJKi8KKwlvdXRiKDB4NDgsIHJ0LT5pbyk7CQkvKiB2b2x1bWUgZG93biBidXQgc3RpbGwgIm9uIgkqLwogCXNsZWVwX2RlbGF5KDIwMDAwMDApOwkvKiBtYWtlIHN1cmUgaXQncyB0b3RhbGx5IGRvd24JKi8KLQlvdXRiKDB4YzAsIGlvKTsJCS8qIHN0ZWFkeSB2b2x1bWUsIG11dGUgY2FyZAkqLwotCXJ0cmFja191bml0LmN1cnZvbCA9IDA7CisJb3V0YigweGMwLCBydC0+aW8pOwkJLyogc3RlYWR5IHZvbHVtZSwgbXV0ZSBjYXJkCSovCiAKIAlyZXR1cm4gMDsKIH0KIAotTU9EVUxFX0FVVEhPUigiTS5LaXJrd29vZCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFJhZGlvVHJhY2svUmFkaW9SZXZlYWwgcmFkaW8gY2FyZC4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBSYWRpb1RyYWNrIGNhcmQgKDB4MjBmIG9yIDB4MzBmKSIpOwotbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9ydHJhY2tfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgcnRyYWNrX2V4aXQodm9pZCkKIHsKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmcnRyYWNrX3JhZGlvKTsKLQlyZWxlYXNlX3JlZ2lvbihpbywyKTsKKwlzdHJ1Y3QgcnRyYWNrICpydCA9ICZydHJhY2tfY2FyZDsKKworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZydC0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmcnQtPnY0bDJfZGV2KTsKKwlyZWxlYXNlX3JlZ2lvbihydC0+aW8sIDIpOwogfQogCiBtb2R1bGVfaW5pdChydHJhY2tfaW5pdCk7Ci1tb2R1bGVfZXhpdChjbGVhbnVwX3J0cmFja19tb2R1bGUpOworbW9kdWxlX2V4aXQocnRyYWNrX2V4aXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWF6dGVjaC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1henRlY2guYwppbmRleCA1NjA0ZTg4Li40OTI5OWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWF6dGVjaC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYXp0ZWNoLmMKQEAgLTI5LDMzICsyOSwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIEluaXRkYXRhCQkJKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24JCSovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogdWRlbGF5CQkJKi8KLSNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIJCSovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLwotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KKyNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDIpCi0KLXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKLQl7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9LHsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCi0JCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAweGZmLAotCQkuc3RlcCAgICAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMHhmZiwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCX0KLX07CitNT0RVTEVfQVVUSE9SKCJSdXNzZWxsIEtyb2xsLCBRdWF5IEx1LCBEb25hbGQgU29uZywgSmFzb24gTGV3aXMsIFNjb3R0IE1jR3JhdGgsIFdpbGxpYW0gTWNHcmF0aCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIEF6dGVjaCByYWRpbyBjYXJkLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAvKiBhY2NlcHRhYmxlIHBvcnRzOiAweDM1MCAoSlAzIHNob3J0ZWQpLCAweDM1OCAoSlAzIG9wZW4pICovCiAKQEAgLTY2LDU1ICs0OCw2NCBAQAogc3RhdGljIGludCBpbyA9IENPTkZJR19SQURJT19BWlRFQ0hfUE9SVDsKIHN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKIHN0YXRpYyBpbnQgcmFkaW9fd2FpdF90aW1lID0gMTAwMDsKLXN0YXRpYyBzdHJ1Y3QgbXV0ZXggbG9jazsKIAotc3RydWN0IGF6X2RldmljZQorbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBBenRlY2ggY2FyZCAoMHgzNTAgb3IgMHgzNTgpIik7CisKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAyKQorCitzdHJ1Y3QgYXp0ZWNoCiB7Ci0JdW5zaWduZWQgbG9uZyBpbl91c2U7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKKwlpbnQgaW87CiAJaW50IGN1cnZvbDsKIAl1bnNpZ25lZCBsb25nIGN1cmZyZXE7CiAJaW50IHN0ZXJlbzsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgYXp0ZWNoIGF6dGVjaF9jYXJkOworCiBzdGF0aWMgaW50IHZvbGNvbnZlcnQoaW50IGxldmVsKQogewotCWxldmVsPj49MTQ7CQkvKiBNYXAgMTZiaXRzIGRvd24gdG8gMiBiaXQgKi8KLQlsZXZlbCY9MzsKKwlsZXZlbCA+Pj0gMTQ7CQkvKiBNYXAgMTZiaXRzIGRvd24gdG8gMiBiaXQgKi8KKwlsZXZlbCAmPSAzOwogCiAJLyogY29udmVydCB0byBjYXJkLWZyaWVuZGx5IHZhbHVlcyAqLwotCXN3aXRjaCAobGV2ZWwpCi0JewotCQljYXNlIDA6Ci0JCQlyZXR1cm4gMDsKLQkJY2FzZSAxOgotCQkJcmV0dXJuIDE7Ci0JCWNhc2UgMjoKLQkJCXJldHVybiA0OwotCQljYXNlIDM6Ci0JCQlyZXR1cm4gNTsKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gMDsKKwljYXNlIDE6CisJCXJldHVybiAxOworCWNhc2UgMjoKKwkJcmV0dXJuIDQ7CisJY2FzZSAzOgorCQlyZXR1cm4gNTsKIAl9CiAJcmV0dXJuIDA7CS8qIFF1aWV0ZW4gZ2NjICovCiB9CiAKLXN0YXRpYyB2b2lkIHNlbmRfMF9ieXRlIChzdHJ1Y3QgYXpfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBzZW5kXzBfYnl0ZShzdHJ1Y3QgYXp0ZWNoICpheikKIHsKIAl1ZGVsYXkocmFkaW9fd2FpdF90aW1lKTsKLQlvdXRiX3AoMit2b2xjb252ZXJ0KGRldi0+Y3Vydm9sKSwgaW8pOwotCW91dGJfcCg2NCsyK3ZvbGNvbnZlcnQoZGV2LT5jdXJ2b2wpLCBpbyk7CisJb3V0Yl9wKDIgKyB2b2xjb252ZXJ0KGF6LT5jdXJ2b2wpLCBhei0+aW8pOworCW91dGJfcCg2NCArIDIgKyB2b2xjb252ZXJ0KGF6LT5jdXJ2b2wpLCBhei0+aW8pOwogfQogCi1zdGF0aWMgdm9pZCBzZW5kXzFfYnl0ZSAoc3RydWN0IGF6X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgc2VuZF8xX2J5dGUoc3RydWN0IGF6dGVjaCAqYXopCiB7CiAJdWRlbGF5IChyYWRpb193YWl0X3RpbWUpOwotCW91dGJfcCgxMjgrMit2b2xjb252ZXJ0KGRldi0+Y3Vydm9sKSwgaW8pOwotCW91dGJfcCgxMjgrNjQrMit2b2xjb252ZXJ0KGRldi0+Y3Vydm9sKSwgaW8pOworCW91dGJfcCgxMjggKyAyICsgdm9sY29udmVydChhei0+Y3Vydm9sKSwgYXotPmlvKTsKKwlvdXRiX3AoMTI4ICsgNjQgKyAyICsgdm9sY29udmVydChhei0+Y3Vydm9sKSwgYXotPmlvKTsKIH0KIAotc3RhdGljIGludCBhel9zZXR2b2woc3RydWN0IGF6X2RldmljZSAqZGV2LCBpbnQgdm9sKQorc3RhdGljIGludCBhel9zZXR2b2woc3RydWN0IGF6dGVjaCAqYXosIGludCB2b2wpCiB7Ci0JbXV0ZXhfbG9jaygmbG9jayk7Ci0Jb3V0YiAodm9sY29udmVydCh2b2wpLCBpbyk7Ci0JbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwltdXRleF9sb2NrKCZhei0+bG9jayk7CisJb3V0Yih2b2xjb252ZXJ0KHZvbCksIGF6LT5pbyk7CisJbXV0ZXhfdW5sb2NrKCZhei0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNiwxMTYgKzExNywxMTAgQEAKICAqCiAgKi8KIAotc3RhdGljIGludCBhel9nZXRzaWdzdHIoc3RydWN0IGF6X2RldmljZSAqZGV2KQorc3RhdGljIGludCBhel9nZXRzaWdzdHIoc3RydWN0IGF6dGVjaCAqYXopCiB7Ci0JaWYgKGluYihpbykgJiAyKQkvKiBiaXQgc2V0ID0gbm8gc2lnbmFsIHByZXNlbnQgKi8KLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIDE7CQkvKiBzaWduYWwgcHJlc2VudCAqLworCWludCBzaWcgPSAxOworCisJbXV0ZXhfbG9jaygmYXotPmxvY2spOworCWlmIChpbmIoYXotPmlvKSAmIDIpCS8qIGJpdCBzZXQgPSBubyBzaWduYWwgcHJlc2VudCAqLworCQlzaWcgPSAwOworCW11dGV4X3VubG9jaygmYXotPmxvY2spOworCXJldHVybiBzaWc7CiB9CiAKLXN0YXRpYyBpbnQgYXpfZ2V0c3RlcmVvKHN0cnVjdCBhel9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYXpfZ2V0c3RlcmVvKHN0cnVjdCBhenRlY2ggKmF6KQogewotCWlmIChpbmIoaW8pICYgMSkgCS8qIGJpdCBzZXQgPSBtb25vICovCi0JCXJldHVybiAwOwotCXJldHVybiAxOwkJLyogc3RlcmVvICovCisJaW50IHN0ZXJlbyA9IDE7CisKKwltdXRleF9sb2NrKCZhei0+bG9jayk7CisJaWYgKGluYihhei0+aW8pICYgMSkgCS8qIGJpdCBzZXQgPSBtb25vICovCisJCXN0ZXJlbyA9IDA7CisJbXV0ZXhfdW5sb2NrKCZhei0+bG9jayk7CisJcmV0dXJuIHN0ZXJlbzsKIH0KIAotc3RhdGljIGludCBhel9zZXRmcmVxKHN0cnVjdCBhel9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmcmVxdWVuY3kpCitzdGF0aWMgaW50IGF6X3NldGZyZXEoc3RydWN0IGF6dGVjaCAqYXosIHVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5KQogewogCWludCAgaTsKIAorCW11dGV4X2xvY2soJmF6LT5sb2NrKTsKKworCWF6LT5jdXJmcmVxID0gZnJlcXVlbmN5OwogCWZyZXF1ZW5jeSArPSAxNzEyMDA7CQkvKiBBZGQgMTAuNyBNSHogSUYJCSovCiAJZnJlcXVlbmN5IC89IDgwMDsJCS8qIENvbnZlcnQgdG8gNTAga0h6IHVuaXRzCSovCiAKLQltdXRleF9sb2NrKCZsb2NrKTsKLQotCXNlbmRfMF9ieXRlIChkZXYpOwkJLyogIDA6IExTQiBvZiBmcmVxdWVuY3kgICAgICAgKi8KKwlzZW5kXzBfYnl0ZShheik7CQkvKiAgMDogTFNCIG9mIGZyZXF1ZW5jeSAgICAgICAqLwogCiAJZm9yIChpID0gMDsgaSA8IDEzOyBpKyspCS8qICAgOiBmcmVxdWVuY3kgYml0cyAoMS0xMykgICovCiAJCWlmIChmcmVxdWVuY3kgJiAoMSA8PCBpKSkKLQkJCXNlbmRfMV9ieXRlIChkZXYpOworCQkJc2VuZF8xX2J5dGUoYXopOwogCQllbHNlCi0JCQlzZW5kXzBfYnl0ZSAoZGV2KTsKKwkJCXNlbmRfMF9ieXRlKGF6KTsKIAotCXNlbmRfMF9ieXRlIChkZXYpOwkJLyogMTQ6IHRlc3QgYml0IC0gYWx3YXlzIDAgICAgKi8KLQlzZW5kXzBfYnl0ZSAoZGV2KTsJCS8qIDE1OiB0ZXN0IGJpdCAtIGFsd2F5cyAwICAgICovCi0Jc2VuZF8wX2J5dGUgKGRldik7CQkvKiAxNjogYmFuZCBkYXRhIDAgLSBhbHdheXMgMCAqLwotCWlmIChkZXYtPnN0ZXJlbykJCS8qIDE3OiBzdGVyZW8gKDEgdG8gZW5hYmxlKSAgICovCi0JCXNlbmRfMV9ieXRlIChkZXYpOworCXNlbmRfMF9ieXRlKGF6KTsJCS8qIDE0OiB0ZXN0IGJpdCAtIGFsd2F5cyAwICAgICovCisJc2VuZF8wX2J5dGUoYXopOwkJLyogMTU6IHRlc3QgYml0IC0gYWx3YXlzIDAgICAgKi8KKwlzZW5kXzBfYnl0ZShheik7CQkvKiAxNjogYmFuZCBkYXRhIDAgLSBhbHdheXMgMCAqLworCWlmIChhei0+c3RlcmVvKQkJLyogMTc6IHN0ZXJlbyAoMSB0byBlbmFibGUpICAgKi8KKwkJc2VuZF8xX2J5dGUoYXopOwogCWVsc2UKLQkJc2VuZF8wX2J5dGUgKGRldik7CisJCXNlbmRfMF9ieXRlKGF6KTsKIAotCXNlbmRfMV9ieXRlIChkZXYpOwkJLyogMTg6IGJhbmQgZGF0YSAxIC0gdW5rbm93biAgKi8KLQlzZW5kXzBfYnl0ZSAoZGV2KTsJCS8qIDE5OiB0aW1lIGJhc2UgLSBhbHdheXMgMCAgICovCi0Jc2VuZF8wX2J5dGUgKGRldik7CQkvKiAyMDogc3BhY2luZyAoMCA9IDI1IGtIeikgICAqLwotCXNlbmRfMV9ieXRlIChkZXYpOwkJLyogMjE6IHNwYWNpbmcgKDEgPSAyNSBrSHopICAgKi8KLQlzZW5kXzBfYnl0ZSAoZGV2KTsJCS8qIDIyOiBzcGFjaW5nICgwID0gMjUga0h6KSAgICovCi0Jc2VuZF8xX2J5dGUgKGRldik7CQkvKiAyMzogQU0vRk0gKEZNID0gMSwgYWx3YXlzKSAqLworCXNlbmRfMV9ieXRlKGF6KTsJCS8qIDE4OiBiYW5kIGRhdGEgMSAtIHVua25vd24gICovCisJc2VuZF8wX2J5dGUoYXopOwkJLyogMTk6IHRpbWUgYmFzZSAtIGFsd2F5cyAwICAgKi8KKwlzZW5kXzBfYnl0ZShheik7CQkvKiAyMDogc3BhY2luZyAoMCA9IDI1IGtIeikgICAqLworCXNlbmRfMV9ieXRlKGF6KTsJCS8qIDIxOiBzcGFjaW5nICgxID0gMjUga0h6KSAgICovCisJc2VuZF8wX2J5dGUoYXopOwkJLyogMjI6IHNwYWNpbmcgKDAgPSAyNSBrSHopICAgKi8KKwlzZW5kXzFfYnl0ZShheik7CQkvKiAyMzogQU0vRk0gKEZNID0gMSwgYWx3YXlzKSAqLwogCiAJLyogbGF0Y2ggZnJlcXVlbmN5ICovCiAKLQl1ZGVsYXkgKHJhZGlvX3dhaXRfdGltZSk7Ci0Jb3V0Yl9wKDEyOCs2NCt2b2xjb252ZXJ0KGRldi0+Y3Vydm9sKSwgaW8pOworCXVkZWxheShyYWRpb193YWl0X3RpbWUpOworCW91dGJfcCgxMjggKyA2NCArIHZvbGNvbnZlcnQoYXotPmN1cnZvbCksIGF6LT5pbyk7CiAKLQltdXRleF91bmxvY2soJmxvY2spOworCW11dGV4X3VubG9jaygmYXotPmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCiB7Ci0Jc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1henRlY2giLCBzaXplb2YgKHYtPmRyaXZlcikpOwotCXN0cmxjcHkodi0+Y2FyZCwgIkF6dGVjaCBSYWRpbyIsIHNpemVvZiAodi0+Y2FyZCkpOwotCXNwcmludGYodi0+YnVzX2luZm8sIklTQSIpOworCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tYXp0ZWNoIiwgc2l6ZW9mKHYtPmRyaXZlcikpOworCXN0cmxjcHkodi0+Y2FyZCwgIkF6dGVjaCBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7CisJc3RybGNweSh2LT5idXNfaW5mbywgIklTQSIsIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlzdHJ1Y3QgYXpfZGV2aWNlICpheiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGF6dGVjaCAqYXogPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCi0Jdi0+cmFuZ2Vsb3c9KDg3KjE2MDAwKTsKLQl2LT5yYW5nZWhpZ2g9KDEwOCoxNjAwMCk7Ci0Jdi0+cnhzdWJjaGFucyA9VjRMMl9UVU5FUl9TVUJfTU9OT3xWNEwyX1RVTkVSX1NVQl9TVEVSRU87Ci0Jdi0+Y2FwYWJpbGl0eT1WNEwyX1RVTkVSX0NBUF9MT1c7Ci0JaWYoYXpfZ2V0c3RlcmVvKGF6KSkKKwl2LT5yYW5nZWxvdyA9IDg3ICogMTYwMDA7CisJdi0+cmFuZ2VoaWdoID0gMTA4ICogMTYwMDA7CisJdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8gfCBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJdi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKKwlpZiAoYXpfZ2V0c3RlcmVvKGF6KSkKIAkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CiAJZWxzZQogCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0Jdi0+c2lnbmFsPTB4RkZGRiphel9nZXRzaWdzdHIoYXopOworCXYtPnNpZ25hbCA9IDB4RkZGRiAqIGF6X2dldHNpZ3N0cihheik7CiAKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0JaWYgKHYtPmluZGV4ID4gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkgICBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoYS0+aW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKLQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCXJldHVybiAwOworCXJldHVybiB2LT5pbmRleCA/IC1FSU5WQUwgOiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCkBAIC0yNDYsMTEzICsyMzEsMTA3IEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQogewotCWlmIChpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOworCXJldHVybiBpID8gLUVJTlZBTCA6IDA7CiB9CiAKLQotc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgc3RydWN0IHY0bDJfYXVkaW8gKmEpCiB7Ci0JaWYgKGEtPmluZGV4ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgYXpfZGV2aWNlICpheiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGF6dGVjaCAqYXogPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0JYXotPmN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7Ci0JYXpfc2V0ZnJlcShheiwgYXotPmN1cmZyZXEpOworCWF6X3NldGZyZXEoYXosIGYtPmZyZXF1ZW5jeSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5IChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgYXpfZGV2aWNlICpheiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGF6dGVjaCAqYXogPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gYXotPmN1cmZyZXE7Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKLQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKLQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCi0JCQkJCQlzaXplb2YoKnFjKSk7Ci0JCQlyZXR1cm4gKDApOwotCQl9CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMSk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMHhmZiwgMSwgMHhmZik7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2N0cmwgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGF6X2RldmljZSAqYXogPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBhenRlY2ggKmF6ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQkJaWYgKGF6LT5jdXJ2b2w9PTApCi0JCQkJY3RybC0+dmFsdWU9MTsKLQkJCWVsc2UKLQkJCQljdHJsLT52YWx1ZT0wOwotCQkJcmV0dXJuICgwKTsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCQljdHJsLT52YWx1ZT1hei0+Y3Vydm9sICogNjU1NDsKLQkJCXJldHVybiAoMCk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAoYXotPmN1cnZvbCA9PSAwKQorCQkJY3RybC0+dmFsdWUgPSAxOworCQllbHNlCisJCQljdHJsLT52YWx1ZSA9IDA7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQljdHJsLT52YWx1ZSA9IGF6LT5jdXJ2b2wgKiA2NTU0OworCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgYXpfZGV2aWNlICpheiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGF6dGVjaCAqYXogPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCQlpZiAoY3RybC0+dmFsdWUpIHsKLQkJCQlhel9zZXR2b2woYXosMCk7Ci0JCQl9IGVsc2UgewotCQkJCWF6X3NldHZvbChheixhei0+Y3Vydm9sKTsKLQkJCX0KLQkJCXJldHVybiAoMCk7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQkJYXpfc2V0dm9sKGF6LGN0cmwtPnZhbHVlKTsKLQkJCXJldHVybiAoMCk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAoY3RybC0+dmFsdWUpCisJCQlhel9zZXR2b2woYXosIDApOworCQllbHNlCisJCQlhel9zZXR2b2woYXosIGF6LT5jdXJ2b2wpOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJYXpfc2V0dm9sKGF6LCBjdHJsLT52YWx1ZSk7CisJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIHN0cnVjdCBhel9kZXZpY2UgYXp0ZWNoX3VuaXQ7Ci0KLXN0YXRpYyBpbnQgYXp0ZWNoX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBhenRlY2hfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmYXp0ZWNoX3VuaXQuaW5fdXNlKSA/IC1FQlVTWSA6IDA7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXp0ZWNoX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBhenRlY2hfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQljbGVhcl9iaXQoMCwgJmF6dGVjaF91bml0LmluX3VzZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgYXp0ZWNoX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IGF6dGVjaF9leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSBhenRlY2hfZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gYXp0ZWNoX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gYXp0ZWNoX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKIH07CiAKQEAgLTM3MSw1NyArMzUwLDYwIEBACiAJLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBhenRlY2hfcmFkaW8gPSB7Ci0JLm5hbWUJCT0gIkF6dGVjaCByYWRpbyIsCi0JLmZvcHMgICAgICAgICAgID0gJmF6dGVjaF9mb3BzLAotCS5pb2N0bF9vcHMgCT0gJmF6dGVjaF9pb2N0bF9vcHMsCi0JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKLX07Ci0KLW1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZyxhenRlY2hfcmFkaW8uZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCJhY3RpdmF0ZXMgZGVidWcgaW5mbyIpOwotCiBzdGF0aWMgaW50IF9faW5pdCBhenRlY2hfaW5pdCh2b2lkKQogewotCWlmKGlvPT0tMSkKLQl7Ci0JCXByaW50ayhLRVJOX0VSUiAiWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHg/Pz9cbiIpOworCXN0cnVjdCBhenRlY2ggKmF6ID0gJmF6dGVjaF9jYXJkOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmYXotPnY0bDJfZGV2OworCWludCByZXM7CisKKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAiYXp0ZWNoIiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CisJYXotPmlvID0gaW87CisKKwlpZiAoYXotPmlvID09IC0xKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAieW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHgzNTAgb3IgMHgzNThcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLCAyLCAiYXp0ZWNoIikpCi0JewotCQlwcmludGsoS0VSTl9FUlIgImF6dGVjaDogcG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBpbyk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihhei0+aW8sIDIsICJhenRlY2giKSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgInBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwgYXotPmlvKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQltdXRleF9pbml0KCZsb2NrKTsKLQl2aWRlb19zZXRfZHJ2ZGF0YSgmYXp0ZWNoX3JhZGlvLCAmYXp0ZWNoX3VuaXQpOworCXJlcyA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsIHY0bDJfZGV2KTsKKwlpZiAocmVzIDwgMCkgeworCQlyZWxlYXNlX3JlZ2lvbihhei0+aW8sIDIpOworCQl2NGwyX2Vycih2NGwyX2RldiwgIkNvdWxkIG5vdCByZWdpc3RlciB2NGwyX2RldmljZVxuIik7CisJCXJldHVybiByZXM7CisJfQogCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmYXp0ZWNoX3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewotCQlyZWxlYXNlX3JlZ2lvbihpbywyKTsKKwltdXRleF9pbml0KCZhei0+bG9jayk7CisJc3RybGNweShhei0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKGF6LT52ZGV2Lm5hbWUpKTsKKwlhei0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCWF6LT52ZGV2LmZvcHMgPSAmYXp0ZWNoX2ZvcHM7CisJYXotPnZkZXYuaW9jdGxfb3BzID0gJmF6dGVjaF9pb2N0bF9vcHM7CisJYXotPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCXZpZGVvX3NldF9kcnZkYXRhKCZhei0+dmRldiwgYXopOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmYXotPnZkZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOworCQlyZWxlYXNlX3JlZ2lvbihhei0+aW8sIDIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJBenRlY2ggcmFkaW8gY2FyZCBkcml2ZXIgdjEuMDAvMTk5OTAyMjQgcmtyb2xsQGV4cGxvaXRzLm9yZ1xuIik7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiQXp0ZWNoIHJhZGlvIGNhcmQgZHJpdmVyIHYxLjAwLzE5OTkwMjI0IHJrcm9sbEBleHBsb2l0cy5vcmdcbiIpOwogCS8qIG11dGUgY2FyZCAtIHByZXZlbnRzIG5vaXN5IGJvb3R1cHMgKi8KLQlvdXRiICgwLCBpbyk7CisJb3V0YigwLCBhei0+aW8pOwogCXJldHVybiAwOwogfQogCi1NT0RVTEVfQVVUSE9SKCJSdXNzZWxsIEtyb2xsLCBRdWF5IEx1LCBEb25hbGQgU29uZywgSmFzb24gTGV3aXMsIFNjb3R0IE1jR3JhdGgsIFdpbGxpYW0gTWNHcmF0aCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIEF6dGVjaCByYWRpbyBjYXJkLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIEF6dGVjaCBjYXJkICgweDM1MCBvciAweDM1OCkiKTsKLQotc3RhdGljIHZvaWQgX19leGl0IGF6dGVjaF9jbGVhbnVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgYXp0ZWNoX2V4aXQodm9pZCkKIHsKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmYXp0ZWNoX3JhZGlvKTsKLQlyZWxlYXNlX3JlZ2lvbihpbywyKTsKKwlzdHJ1Y3QgYXp0ZWNoICpheiA9ICZhenRlY2hfY2FyZDsKKworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZhei0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmYXotPnY0bDJfZGV2KTsKKwlyZWxlYXNlX3JlZ2lvbihhei0+aW8sIDIpOwogfQogCiBtb2R1bGVfaW5pdChhenRlY2hfaW5pdCk7Ci1tb2R1bGVfZXhpdChhenRlY2hfY2xlYW51cCk7Cittb2R1bGVfZXhpdChhenRlY2hfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMKaW5kZXggY2IzMDc1YS4uZDMwZmMwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYwpAQCAtMzUsMzMzICszNSwzMTggQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YQkJCSovCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCi0jaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyCQkqLwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBWNEwyIEFQSSBkZWZzCQkqLwotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisKK01PRFVMRV9BVVRIT1IoIkZyZWQgR2xlYXNvbiwgUnVzc2VsbCBLcm9sbCwgUXVheSBMdSwgRG9uYWxkIFNvbmcsIEphc29uIExld2lzLCBTY290dCBNY0dyYXRoLCBXaWxsaWFtIE1jR3JhdGgiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBBRFMgQ2FkZXQgQU0vRk0vUkRTIHJhZGlvIGNhcmQuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgaW8gPSAtMTsJCS8qIGRlZmF1bHQgdG8gaXNhcG5wIGFjdGl2YXRpb24gKi8KK3N0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKKworbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIENhZGV0IGNhcmQgKDB4MzMwLDB4MzMyLDB4MzM0LDB4MzM2LDB4MzM4LDB4MzNhLDB4MzNjLDB4MzNlKSIpOworbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOworCisjZGVmaW5lIENBREVUX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMywgMykKIAogI2RlZmluZSBSRFNfQlVGRkVSIDI1NgogI2RlZmluZSBSRFNfUlhfRkxBRyAxCiAjZGVmaW5lIE1CU19SWF9GTEFHIDIKIAotI2RlZmluZSBDQURFVF9WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMywzKQotCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7Ci0JewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS5uYW1lICAgICAgICAgID0gIk11dGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JfSx7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAotCQkubmFtZSAgICAgICAgICA9ICJWb2x1bWUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMHhmZiwKLQkJLnN0ZXAgICAgICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDB4ZmYsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQl9CitzdHJ1Y3QgY2FkZXQgeworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJaW50IGlvOworCWludCB1c2VyczsKKwlpbnQgY3VydHVuZXI7CisJaW50IHR1bmVzdGF0OworCWludCBzaWdzdHJlbmd0aDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCByZWFkX3F1ZXVlOworCXN0cnVjdCB0aW1lcl9saXN0IHJlYWR0aW1lcjsKKwlfX3U4IHJkc2luLCByZHNvdXQsIHJkc3N0YXQ7CisJdW5zaWduZWQgY2hhciByZHNidWZbUkRTX0JVRkZFUl07CisJc3RydWN0IG11dGV4IGxvY2s7CisJaW50IHJlYWRpbmc7CiB9OwogCi1zdGF0aWMgaW50IGlvPS0xOwkJLyogZGVmYXVsdCB0byBpc2FwbnAgYWN0aXZhdGlvbiAqLwotc3RhdGljIGludCByYWRpb19uciA9IC0xOwotc3RhdGljIGludCB1c2VyczsKLXN0YXRpYyBpbnQgY3VydHVuZXI7Ci1zdGF0aWMgaW50IHR1bmVzdGF0Owotc3RhdGljIGludCBzaWdzdHJlbmd0aDsKLXN0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCByZWFkX3F1ZXVlOwotc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IHJlYWR0aW1lcjsKLXN0YXRpYyBfX3U4IHJkc2luLCByZHNvdXQsIHJkc3N0YXQ7Ci1zdGF0aWMgdW5zaWduZWQgY2hhciByZHNidWZbUkRTX0JVRkZFUl07Ci1zdGF0aWMgc3BpbmxvY2tfdCBjYWRldF9pb19sb2NrOwotCi1zdGF0aWMgaW50IGNhZGV0X3Byb2JlKHZvaWQpOworc3RhdGljIHN0cnVjdCBjYWRldCBjYWRldF9jYXJkOwogCiAvKgogICogU2lnbmFsIFN0cmVuZ3RoIFRocmVzaG9sZCBWYWx1ZXMKICAqIFRoZSBWNEwgQVBJIHNwZWMgZG9lcyBub3QgZGVmaW5lIGFueSBwYXJ0aWN1bGFyIHVuaXQgZm9yIHRoZSBzaWduYWwKICAqIHN0cmVuZ3RoIHZhbHVlLiAgVGhlc2UgdmFsdWVzIGFyZSBpbiBtaWNyb3ZvbHRzIG9mIFJGIGF0IHRoZSB0dW5lcidzIGlucHV0LgogICovCi1zdGF0aWMgX191MTYgc2lndGFibGVbMl1bNF09e3s1LDEwLDMwLDE1MH0sezI4LDQwLDYzLDEwMDB9fTsKK3N0YXRpYyBfX3UxNiBzaWd0YWJsZVsyXVs0XSA9IHsKKwl7ICA1LCAxMCwgMzAsICAxNTAgfSwKKwl7IDI4LCA0MCwgNjMsIDEwMDAgfQorfTsKIAogCi1zdGF0aWMgaW50Ci1jYWRldF9nZXRzdGVyZW8odm9pZCkKK3N0YXRpYyBpbnQgY2FkZXRfZ2V0c3RlcmVvKHN0cnVjdCBjYWRldCAqZGV2KQogewogCWludCByZXQgPSBWNEwyX1RVTkVSX1NVQl9NT05POwotCWlmKGN1cnR1bmVyICE9IDApCS8qIE9ubHkgRk0gaGFzIHN0ZXJlbyBjYXBhYmlsaXR5ISAqLworCisJaWYgKGRldi0+Y3VydHVuZXIgIT0gMCkJLyogT25seSBGTSBoYXMgc3RlcmVvIGNhcGFiaWxpdHkhICovCiAJCXJldHVybiBWNEwyX1RVTkVSX1NVQl9NT05POwogCi0Jc3Bpbl9sb2NrKCZjYWRldF9pb19sb2NrKTsKLQlvdXRiKDcsaW8pOyAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLwotCWlmKCAoaW5iKGlvKzEpICYgMHg0MCkgPT0gMCkKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCW91dGIoNywgZGV2LT5pbyk7ICAgICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCisJaWYgKChpbmIoZGV2LT5pbyArIDEpICYgMHg0MCkgPT0gMCkKIAkJcmV0ID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwotCXNwaW5fdW5sb2NrKCZjYWRldF9pb19sb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHVuc2lnbmVkCi1jYWRldF9nZXR0dW5lKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgY2FkZXRfZ2V0dHVuZShzdHJ1Y3QgY2FkZXQgKmRldikKIHsKLQlpbnQgY3Vydm9sLGk7Ci0JdW5zaWduZWQgZmlmbz0wOworCWludCBjdXJ2b2wsIGk7CisJdW5zaWduZWQgZmlmbyA9IDA7CiAKIAkvKgogCSAqIFByZXBhcmUgZm9yIHJlYWQKIAkgKi8KIAotCXNwaW5fbG9jaygmY2FkZXRfaW9fbG9jayk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAotCW91dGIoNyxpbyk7ICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCi0JY3Vydm9sPWluYihpbysxKTsgLyogU2F2ZSBjdXJyZW50IHZvbHVtZS9tdXRlIHNldHRpbmcgKi8KLQlvdXRiKDB4MDAsaW8rMSk7ICAvKiBFbnN1cmUgV1JJVEUtRU5BQkxFIGlzIExPVyAqLwotCXR1bmVzdGF0PTB4ZmZmZjsKKwlvdXRiKDcsIGRldi0+aW8pOyAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLworCWN1cnZvbCA9IGluYihkZXYtPmlvICsgMSk7IC8qIFNhdmUgY3VycmVudCB2b2x1bWUvbXV0ZSBzZXR0aW5nICovCisJb3V0YigweDAwLCBkZXYtPmlvICsgMSk7ICAvKiBFbnN1cmUgV1JJVEUtRU5BQkxFIGlzIExPVyAqLworCWRldi0+dHVuZXN0YXQgPSAweGZmZmY7CiAKIAkvKgogCSAqIFJlYWQgdGhlIHNoaWZ0IHJlZ2lzdGVyCiAJICovCi0JZm9yKGk9MDtpPDI1O2krKykgewotCQlmaWZvPShmaWZvPDwxKXwoKGluYihpbysxKT4+NykmMHgwMSk7Ci0JCWlmKGk8MjQpIHsKLQkJCW91dGIoMHgwMSxpbysxKTsKLQkJCXR1bmVzdGF0Jj1pbmIoaW8rMSk7Ci0JCQlvdXRiKDB4MDAsaW8rMSk7CisJZm9yIChpID0gMDsgaSA8IDI1OyBpKyspIHsKKwkJZmlmbyA9IChmaWZvIDw8IDEpIHwgKChpbmIoZGV2LT5pbyArIDEpID4+IDcpICYgMHgwMSk7CisJCWlmIChpIDwgMjQpIHsKKwkJCW91dGIoMHgwMSwgZGV2LT5pbyArIDEpOworCQkJZGV2LT50dW5lc3RhdCAmPSBpbmIoZGV2LT5pbyArIDEpOworCQkJb3V0YigweDAwLCBkZXYtPmlvICsgMSk7CiAJCX0KIAl9CiAKIAkvKgogCSAqIFJlc3RvcmUgdm9sdW1lL211dGUgc2V0dGluZwogCSAqLwotCW91dGIoY3Vydm9sLGlvKzEpOwotCXNwaW5fdW5sb2NrKCZjYWRldF9pb19sb2NrKTsKKwlvdXRiKGN1cnZvbCwgZGV2LT5pbyArIDEpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAogCXJldHVybiBmaWZvOwogfQogCi1zdGF0aWMgdW5zaWduZWQKLWNhZGV0X2dldGZyZXEodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBjYWRldF9nZXRmcmVxKHN0cnVjdCBjYWRldCAqZGV2KQogewogCWludCBpOwotCXVuc2lnbmVkIGZyZXE9MCx0ZXN0LGZpZm89MDsKKwl1bnNpZ25lZCBmcmVxID0gMCwgdGVzdCwgZmlmbyA9IDA7CiAKIAkvKgogCSAqIFJlYWQgY3VycmVudCB0dW5pbmcKIAkgKi8KLQlmaWZvPWNhZGV0X2dldHR1bmUoKTsKKwlmaWZvID0gY2FkZXRfZ2V0dHVuZShkZXYpOwogCiAJLyoKIAkgKiBDb252ZXJ0IHRvIGFjdHVhbCBmcmVxdWVuY3kKIAkgKi8KLQlpZihjdXJ0dW5lcj09MCkgeyAgICAvKiBGTSAqLwotCQl0ZXN0PTEyNTAwOwotCQlmb3IoaT0wO2k8MTQ7aSsrKSB7Ci0JCQlpZigoZmlmbyYweDAxKSE9MCkgewotCQkJCWZyZXErPXRlc3Q7Ci0JCQl9Ci0JCQl0ZXN0PXRlc3Q8PDE7Ci0JCQlmaWZvPWZpZm8+PjE7CisJaWYgKGRldi0+Y3VydHVuZXIgPT0gMCkgeyAgICAvKiBGTSAqLworCQl0ZXN0ID0gMTI1MDA7CisJCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKSB7CisJCQlpZiAoKGZpZm8gJiAweDAxKSAhPSAwKQorCQkJCWZyZXEgKz0gdGVzdDsKKwkJCXRlc3QgPSB0ZXN0IDw8IDE7CisJCQlmaWZvID0gZmlmbyA+PiAxOwogCQl9Ci0JCWZyZXEtPTEwNzAwMDAwOyAgICAgICAgICAgLyogSUYgZnJlcXVlbmN5IGlzIDEwLjcgTUh6ICovCi0JCWZyZXE9KGZyZXEqMTYpLzEwMDAwMDA7ICAgLyogTWFrZSBpdCAxLzE2IE1IeiAqLworCQlmcmVxIC09IDEwNzAwMDAwOyAgICAgICAgICAgLyogSUYgZnJlcXVlbmN5IGlzIDEwLjcgTUh6ICovCisJCWZyZXEgPSAoZnJlcSAqIDE2KSAvIDEwMDAwMDA7ICAgLyogTWFrZSBpdCAxLzE2IE1IeiAqLwogCX0KLQlpZihjdXJ0dW5lcj09MSkgeyAgICAvKiBBTSAqLwotCQlmcmVxPSgoZmlmbyYweDdmZmYpLTIwMTApKjE2OwotCX0KKwlpZiAoZGV2LT5jdXJ0dW5lciA9PSAxKSAgICAvKiBBTSAqLworCQlmcmVxID0gKChmaWZvICYgMHg3ZmZmKSAtIDIwMTApICogMTY7CiAKIAlyZXR1cm4gZnJlcTsKIH0KIAotc3RhdGljIHZvaWQKLWNhZGV0X3NldHR1bmUodW5zaWduZWQgZmlmbykKK3N0YXRpYyB2b2lkIGNhZGV0X3NldHR1bmUoc3RydWN0IGNhZGV0ICpkZXYsIHVuc2lnbmVkIGZpZm8pCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgdGVzdDsKIAotCXNwaW5fbG9jaygmY2FkZXRfaW9fbG9jayk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAotCW91dGIoNyxpbyk7ICAgICAgICAgICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCisJb3V0Yig3LCBkZXYtPmlvKTsgICAgICAgICAgICAgICAgLyogU2VsZWN0IHR1bmVyIGNvbnRyb2wgKi8KIAkvKgogCSAqIFdyaXRlIHRoZSBzaGlmdCByZWdpc3RlcgogCSAqLwotCXRlc3Q9MDsKLQl0ZXN0PShmaWZvPj4yMykmMHgwMjsgICAgICAvKiBBbGlnbiBkYXRhIGZvciBTRE8gKi8KLQl0ZXN0fD0weDFjOyAgICAgICAgICAgICAgICAvKiBTRE09MSwgU1dFPTEsIFNFTj0xLCBTQ0s9MCAqLwotCW91dGIoNyxpbyk7ICAgICAgICAgICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCi0Jb3V0Yih0ZXN0LGlvKzEpOyAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBmb3Igd3JpdGUgKi8KLQlmb3IoaT0wO2k8MjU7aSsrKSB7Ci0JCXRlc3R8PTB4MDE7ICAgICAgICAgICAgICAvKiBUb2dnbGUgU0NLIEhpZ2ggKi8KLQkJb3V0Yih0ZXN0LGlvKzEpOwotCQl0ZXN0Jj0weGZlOyAgICAgICAgICAgICAgLyogVG9nZ2xlIFNDSyBMb3cgKi8KLQkJb3V0Yih0ZXN0LGlvKzEpOwotCQlmaWZvPWZpZm88PDE7ICAgICAgICAgICAgLyogUHJlcGFyZSB0aGUgbmV4dCBiaXQgKi8KLQkJdGVzdD0weDFjfCgoZmlmbz4+MjMpJjB4MDIpOwotCQlvdXRiKHRlc3QsaW8rMSk7CisJdGVzdCA9IDA7CisJdGVzdCA9IChmaWZvID4+IDIzKSAmIDB4MDI7ICAgICAgLyogQWxpZ24gZGF0YSBmb3IgU0RPICovCisJdGVzdCB8PSAweDFjOyAgICAgICAgICAgICAgICAvKiBTRE09MSwgU1dFPTEsIFNFTj0xLCBTQ0s9MCAqLworCW91dGIoNywgZGV2LT5pbyk7ICAgICAgICAgICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCisJb3V0Yih0ZXN0LCBkZXYtPmlvICsgMSk7ICAgICAgICAgICAvKiBJbml0aWFsaXplIGZvciB3cml0ZSAqLworCWZvciAoaSA9IDA7IGkgPCAyNTsgaSsrKSB7CisJCXRlc3QgfD0gMHgwMTsgICAgICAgICAgICAgIC8qIFRvZ2dsZSBTQ0sgSGlnaCAqLworCQlvdXRiKHRlc3QsIGRldi0+aW8gKyAxKTsKKwkJdGVzdCAmPSAweGZlOyAgICAgICAgICAgICAgLyogVG9nZ2xlIFNDSyBMb3cgKi8KKwkJb3V0Yih0ZXN0LCBkZXYtPmlvICsgMSk7CisJCWZpZm8gPSBmaWZvIDw8IDE7ICAgICAgICAgICAgLyogUHJlcGFyZSB0aGUgbmV4dCBiaXQgKi8KKwkJdGVzdCA9IDB4MWMgfCAoKGZpZm8gPj4gMjMpICYgMHgwMik7CisJCW91dGIodGVzdCwgZGV2LT5pbyArIDEpOwogCX0KLQlzcGluX3VubG9jaygmY2FkZXRfaW9fbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogfQogCi1zdGF0aWMgdm9pZAotY2FkZXRfc2V0ZnJlcSh1bnNpZ25lZCBmcmVxKQorc3RhdGljIHZvaWQgY2FkZXRfc2V0ZnJlcShzdHJ1Y3QgY2FkZXQgKmRldiwgdW5zaWduZWQgZnJlcSkKIHsKIAl1bnNpZ25lZCBmaWZvOwotCWludCBpLGosdGVzdDsKKwlpbnQgaSwgaiwgdGVzdDsKIAlpbnQgY3Vydm9sOwogCiAJLyoKIAkgKiBGb3JtdWxhdGUgYSBmaWZvIGNvbW1hbmQKIAkgKi8KLQlmaWZvPTA7Ci0JaWYoY3VydHVuZXI9PTApIHsgICAgLyogRk0gKi8KLQkJdGVzdD0xMDI0MDA7Ci0JCWZyZXE9KGZyZXEqMTAwMCkvMTY7ICAgICAgIC8qIE1ha2UgaXQga0h6ICovCi0JCWZyZXErPTEwNzAwOyAgICAgICAgICAgICAgIC8qIElGIGlzIDEwNzAwIGtIeiAqLwotCQlmb3IoaT0wO2k8MTQ7aSsrKSB7Ci0JCQlmaWZvPWZpZm88PDE7Ci0JCQlpZihmcmVxPj10ZXN0KSB7Ci0JCQkJZmlmb3w9MHgwMTsKLQkJCQlmcmVxLT10ZXN0OworCWZpZm8gPSAwOworCWlmIChkZXYtPmN1cnR1bmVyID09IDApIHsgICAgLyogRk0gKi8KKwkJdGVzdCA9IDEwMjQwMDsKKwkJZnJlcSA9IChmcmVxICogMTAwMCkgLyAxNjsgICAgICAgLyogTWFrZSBpdCBrSHogKi8KKwkJZnJlcSArPSAxMDcwMDsgICAgICAgICAgICAgICAvKiBJRiBpcyAxMDcwMCBrSHogKi8KKwkJZm9yIChpID0gMDsgaSA8IDE0OyBpKyspIHsKKwkJCWZpZm8gPSBmaWZvIDw8IDE7CisJCQlpZiAoZnJlcSA+PSB0ZXN0KSB7CisJCQkJZmlmbyB8PSAweDAxOworCQkJCWZyZXEgLT0gdGVzdDsKIAkJCX0KLQkJCXRlc3Q9dGVzdD4+MTsKKwkJCXRlc3QgPSB0ZXN0ID4+IDE7CiAJCX0KIAl9Ci0JaWYoY3VydHVuZXI9PTEpIHsgICAgLyogQU0gKi8KLQkJZmlmbz0oZnJlcS8xNikrMjAxMDsgICAgICAgICAgICAvKiBNYWtlIGl0IGtIeiAqLwotCQlmaWZvfD0weDEwMDAwMDsgICAgICAgICAgICAvKiBTZWxlY3QgQU0gQmFuZCAqLworCWlmIChkZXYtPmN1cnR1bmVyID09IDEpIHsgICAgLyogQU0gKi8KKwkJZmlmbyA9IChmcmVxIC8gMTYpICsgMjAxMDsgICAgICAgICAgICAvKiBNYWtlIGl0IGtIeiAqLworCQlmaWZvIHw9IDB4MTAwMDAwOyAgICAgICAgICAgIC8qIFNlbGVjdCBBTSBCYW5kICovCiAJfQogCiAJLyoKIAkgKiBTYXZlIGN1cnJlbnQgdm9sdW1lL211dGUgc2V0dGluZwogCSAqLwogCi0Jc3Bpbl9sb2NrKCZjYWRldF9pb19sb2NrKTsKLQlvdXRiKDcsaW8pOyAgICAgICAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLwotCWN1cnZvbD1pbmIoaW8rMSk7Ci0Jc3Bpbl91bmxvY2soJmNhZGV0X2lvX2xvY2spOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJb3V0Yig3LCBkZXYtPmlvKTsgICAgICAgICAgICAgICAgLyogU2VsZWN0IHR1bmVyIGNvbnRyb2wgKi8KKwljdXJ2b2wgPSBpbmIoZGV2LT5pbyArIDEpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAogCS8qCiAJICogVHVuZSB0aGUgY2FyZAogCSAqLwotCWZvcihqPTM7aj4tMTtqLS0pIHsKLQkJY2FkZXRfc2V0dHVuZShmaWZvfChqPDwxNikpOworCWZvciAoaiA9IDM7IGogPiAtMTsgai0tKSB7CisJCWNhZGV0X3NldHR1bmUoZGV2LCBmaWZvIHwgKGogPDwgMTYpKTsKIAotCQlzcGluX2xvY2soJmNhZGV0X2lvX2xvY2spOwotCQlvdXRiKDcsaW8pOyAgICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCi0JCW91dGIoY3Vydm9sLGlvKzEpOwotCQlzcGluX3VubG9jaygmY2FkZXRfaW9fbG9jayk7CisJCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJCW91dGIoNywgZGV2LT5pbyk7ICAgICAgICAgLyogU2VsZWN0IHR1bmVyIGNvbnRyb2wgKi8KKwkJb3V0YihjdXJ2b2wsIGRldi0+aW8gKyAxKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCiAJCW1zbGVlcCgxMDApOwogCi0JCWNhZGV0X2dldHR1bmUoKTsKLQkJaWYoKHR1bmVzdGF0ICYgMHg0MCkgPT0gMCkgeyAgIC8qIFR1bmVkICovCi0JCQlzaWdzdHJlbmd0aD1zaWd0YWJsZVtjdXJ0dW5lcl1bal07CisJCWNhZGV0X2dldHR1bmUoZGV2KTsKKwkJaWYgKChkZXYtPnR1bmVzdGF0ICYgMHg0MCkgPT0gMCkgeyAgIC8qIFR1bmVkICovCisJCQlkZXYtPnNpZ3N0cmVuZ3RoID0gc2lndGFibGVbZGV2LT5jdXJ0dW5lcl1bal07CiAJCQlyZXR1cm47CiAJCX0KIAl9Ci0Jc2lnc3RyZW5ndGg9MDsKKwlkZXYtPnNpZ3N0cmVuZ3RoID0gMDsKIH0KIAogCi1zdGF0aWMgaW50Ci1jYWRldF9nZXR2b2wodm9pZCkKK3N0YXRpYyBpbnQgY2FkZXRfZ2V0dm9sKHN0cnVjdCBjYWRldCAqZGV2KQogewogCWludCByZXQgPSAwOwogCi0Jc3Bpbl9sb2NrKCZjYWRldF9pb19sb2NrKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCi0Jb3V0Yig3LGlvKTsgICAgICAgICAgICAgICAgLyogU2VsZWN0IHR1bmVyIGNvbnRyb2wgKi8KLQlpZigoaW5iKGlvICsgMSkgJiAweDIwKSAhPSAwKQorCW91dGIoNywgZGV2LT5pbyk7ICAgICAgICAgICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCisJaWYgKChpbmIoZGV2LT5pbyArIDEpICYgMHgyMCkgIT0gMCkKIAkJcmV0ID0gMHhmZmZmOwogCi0Jc3Bpbl91bmxvY2soJmNhZGV0X2lvX2xvY2spOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCiAKLXN0YXRpYyB2b2lkCi1jYWRldF9zZXR2b2woaW50IHZvbCkKK3N0YXRpYyB2b2lkIGNhZGV0X3NldHZvbChzdHJ1Y3QgY2FkZXQgKmRldiwgaW50IHZvbCkKIHsKLQlzcGluX2xvY2soJmNhZGV0X2lvX2xvY2spOwotCW91dGIoNyxpbyk7ICAgICAgICAgICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCi0JaWYodm9sPjApCi0JCW91dGIoMHgyMCxpbysxKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCW91dGIoNywgZGV2LT5pbyk7ICAgICAgICAgICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCisJaWYgKHZvbCA+IDApCisJCW91dGIoMHgyMCwgZGV2LT5pbyArIDEpOwogCWVsc2UKLQkJb3V0YigweDAwLGlvKzEpOwotCXNwaW5fdW5sb2NrKCZjYWRldF9pb19sb2NrKTsKKwkJb3V0YigweDAwLCBkZXYtPmlvICsgMSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogfQogCi1zdGF0aWMgdm9pZAotY2FkZXRfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBjYWRldF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQkvKgotCSAqIFNlcnZpY2UgdGhlIFJEUyBmaWZvCi0JICovCisJc3RydWN0IGNhZGV0ICpkZXYgPSAodm9pZCAqKWRhdGE7CiAKLQlpZihzcGluX3RyeWxvY2soJmNhZGV0X2lvX2xvY2spKQotCXsKLQkJb3V0YigweDMsaW8pOyAgICAgICAvKiBTZWxlY3QgUkRTIERlY29kZXIgQ29udHJvbCAqLwotCQlpZigoaW5iKGlvKzEpJjB4MjApIT0wKSB7CisJLyogU2VydmljZSB0aGUgUkRTIGZpZm8gKi8KKwlpZiAobXV0ZXhfdHJ5bG9jaygmZGV2LT5sb2NrKSkgeworCQlvdXRiKDB4MywgZGV2LT5pbyk7ICAgICAgIC8qIFNlbGVjdCBSRFMgRGVjb2RlciBDb250cm9sICovCisJCWlmICgoaW5iKGRldi0+aW8gKyAxKSAmIDB4MjApICE9IDApCiAJCQlwcmludGsoS0VSTl9DUklUICJjYWRldDogUkRTIGZpZm8gb3ZlcmZsb3dcbiIpOwotCQl9Ci0JCW91dGIoMHg4MCxpbyk7ICAgICAgLyogU2VsZWN0IFJEUyBmaWZvICovCi0JCXdoaWxlKChpbmIoaW8pJjB4ODApIT0wKSB7Ci0JCQlyZHNidWZbcmRzaW5dPWluYihpbysxKTsKLQkJCWlmKHJkc2luPT1yZHNvdXQpCisJCW91dGIoMHg4MCwgZGV2LT5pbyk7ICAgICAgLyogU2VsZWN0IFJEUyBmaWZvICovCisJCXdoaWxlICgoaW5iKGRldi0+aW8pICYgMHg4MCkgIT0gMCkgeworCQkJZGV2LT5yZHNidWZbZGV2LT5yZHNpbl0gPSBpbmIoZGV2LT5pbyArIDEpOworCQkJaWYgKGRldi0+cmRzaW4gPT0gZGV2LT5yZHNvdXQpCiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2FkZXQ6IFJEUyBidWZmZXIgb3ZlcmZsb3dcbiIpOwogCQkJZWxzZQotCQkJCXJkc2luKys7CisJCQkJZGV2LT5yZHNpbisrOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCZjYWRldF9pb19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCX0KIAogCS8qCiAJICogU2VydmljZSBwZW5kaW5nIHJlYWQKIAkgKi8KLQlpZiggcmRzaW4hPXJkc291dCkKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZyZWFkX3F1ZXVlKTsKKwlpZiAoZGV2LT5yZHNpbiAhPSBkZXYtPnJkc291dCkKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPnJlYWRfcXVldWUpOwogCiAJLyoKIAkgKiBDbGVhbiB1cCBhbmQgZXhpdAogCSAqLwotCWluaXRfdGltZXIoJnJlYWR0aW1lcik7Ci0JcmVhZHRpbWVyLmZ1bmN0aW9uPWNhZGV0X2hhbmRsZXI7Ci0JcmVhZHRpbWVyLmRhdGE9KHVuc2lnbmVkIGxvbmcpMDsKLQlyZWFkdGltZXIuZXhwaXJlcz1qaWZmaWVzK21zZWNzX3RvX2ppZmZpZXMoNTApOwotCWFkZF90aW1lcigmcmVhZHRpbWVyKTsKKwlpbml0X3RpbWVyKCZkZXYtPnJlYWR0aW1lcik7CisJZGV2LT5yZWFkdGltZXIuZnVuY3Rpb24gPSBjYWRldF9oYW5kbGVyOworCWRldi0+cmVhZHRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykwOworCWRldi0+cmVhZHRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MCk7CisJYWRkX3RpbWVyKCZkZXYtPnJlYWR0aW1lcik7CiB9CiAKIAotCi1zdGF0aWMgc3NpemVfdAotY2FkZXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorc3RhdGljIHNzaXplX3QgY2FkZXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCWludCBpPTA7CisJc3RydWN0IGNhZGV0ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXVuc2lnbmVkIGNoYXIgcmVhZGJ1ZltSRFNfQlVGRkVSXTsKKwlpbnQgaSA9IDA7CiAKLQlpZihyZHNzdGF0PT0wKSB7Ci0JCXNwaW5fbG9jaygmY2FkZXRfaW9fbG9jayk7Ci0JCXJkc3N0YXQ9MTsKLQkJb3V0YigweDgwLGlvKTsgICAgICAgIC8qIFNlbGVjdCBSRFMgZmlmbyAqLwotCQlzcGluX3VubG9jaygmY2FkZXRfaW9fbG9jayk7Ci0JCWluaXRfdGltZXIoJnJlYWR0aW1lcik7Ci0JCXJlYWR0aW1lci5mdW5jdGlvbj1jYWRldF9oYW5kbGVyOwotCQlyZWFkdGltZXIuZGF0YT0odW5zaWduZWQgbG9uZykwOwotCQlyZWFkdGltZXIuZXhwaXJlcz1qaWZmaWVzK21zZWNzX3RvX2ppZmZpZXMoNTApOwotCQlhZGRfdGltZXIoJnJlYWR0aW1lcik7CisJaWYgKGRldi0+cmRzc3RhdCA9PSAwKSB7CisJCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJCWRldi0+cmRzc3RhdCA9IDE7CisJCW91dGIoMHg4MCwgZGV2LT5pbyk7ICAgICAgICAvKiBTZWxlY3QgUkRTIGZpZm8gKi8KKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlpbml0X3RpbWVyKCZkZXYtPnJlYWR0aW1lcik7CisJCWRldi0+cmVhZHRpbWVyLmZ1bmN0aW9uID0gY2FkZXRfaGFuZGxlcjsKKwkJZGV2LT5yZWFkdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldjsKKwkJZGV2LT5yZWFkdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwKTsKKwkJYWRkX3RpbWVyKCZkZXYtPnJlYWR0aW1lcik7CiAJfQotCWlmKHJkc2luPT1yZHNvdXQpIHsKKwlpZiAoZGV2LT5yZHNpbiA9PSBkZXYtPnJkc291dCkgewogCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCiAJCQlyZXR1cm4gLUVXT1VMREJMT0NLOwotCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZyZWFkX3F1ZXVlKTsKKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmZGV2LT5yZWFkX3F1ZXVlKTsKIAl9Ci0Jd2hpbGUoIGk8Y291bnQgJiYgcmRzaW4hPXJkc291dCkKLQkJcmVhZGJ1ZltpKytdPXJkc2J1ZltyZHNvdXQrK107CisJd2hpbGUgKGkgPCBjb3VudCAmJiBkZXYtPnJkc2luICE9IGRldi0+cmRzb3V0KQorCQlyZWFkYnVmW2krK10gPSBkZXYtPnJkc2J1ZltkZXYtPnJkc291dCsrXTsKIAotCWlmIChjb3B5X3RvX3VzZXIoZGF0YSxyZWFkYnVmLGkpKQorCWlmIChjb3B5X3RvX3VzZXIoZGF0YSwgcmVhZGJ1ZiwgaSkpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiBpOwogfQpAQCAtMzcwLDM4ICszNTUsNDAgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCiB7Ci0Jdi0+Y2FwYWJpbGl0aWVzID0KLQkJVjRMMl9DQVBfVFVORVIgfAotCQlWNEwyX0NBUF9SRUFEV1JJVEU7CisJc3RybGNweSh2LT5kcml2ZXIsICJBRFMgQ2FkZXQiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CisJc3RybGNweSh2LT5jYXJkLCAiQURTIENhZGV0Iiwgc2l6ZW9mKHYtPmNhcmQpKTsKKwlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7CiAJdi0+dmVyc2lvbiA9IENBREVUX1ZFUlNJT047Ci0Jc3RyY3B5KHYtPmRyaXZlciwgIkFEUyBDYWRldCIpOwotCXN0cmNweSh2LT5jYXJkLCAiQURTIENhZGV0Iik7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTyB8IFY0TDJfQ0FQX1JFQURXUklURTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKKwlzdHJ1Y3QgY2FkZXQgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlzd2l0Y2ggKHYtPmluZGV4KSB7CiAJY2FzZSAwOgotCQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAkJdi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX1NURVJFTzsKIAkJdi0+cmFuZ2Vsb3cgPSAxNDAwOyAgICAgLyogODcuNSBNSHogKi8KIAkJdi0+cmFuZ2VoaWdoID0gMTcyODsgICAgLyogMTA4LjAgTUh6ICovCi0JCXYtPnJ4c3ViY2hhbnM9Y2FkZXRfZ2V0c3RlcmVvKCk7Ci0JCXN3aXRjaCAodi0+cnhzdWJjaGFucyl7CisJCXYtPnJ4c3ViY2hhbnMgPSBjYWRldF9nZXRzdGVyZW8oZGV2KTsKKwkJc3dpdGNoICh2LT5yeHN1YmNoYW5zKSB7CiAJCWNhc2UgVjRMMl9UVU5FUl9TVUJfTU9OTzoKIAkJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKIAkJCWJyZWFrOwogCQljYXNlIFY0TDJfVFVORVJfU1VCX1NURVJFTzoKIAkJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6IDsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgMToKLQkJc3RyY3B5KHYtPm5hbWUsICJBTSIpOworCQlzdHJsY3B5KHYtPm5hbWUsICJBTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CiAJCXYtPnJhbmdlbG93ID0gODMyMDsgICAgICAvKiA1MjAga0h6ICovCiAJCXYtPnJhbmdlaGlnaCA9IDI2NDAwOyAgICAvKiAxNjUwIGtIeiAqLwpAQCAtNDExLDI1ICszOTgsMjkgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0Jdi0+c2lnbmFsID0gc2lnc3RyZW5ndGg7IC8qIFdlIG1pZ2h0IG5lZWQgdG8gbW9kaWZ5IHNjYWxpbmcgb2YgdGhpcyAqLworCXYtPnNpZ25hbCA9IGRldi0+c2lnc3RyZW5ndGg7IC8qIFdlIG1pZ2h0IG5lZWQgdG8gbW9kaWZ5IHNjYWxpbmcgb2YgdGhpcyAqLwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmKCh2LT5pbmRleCAhPSAwKSYmKHYtPmluZGV4ICE9IDEpKQorCXN0cnVjdCBjYWRldCAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCWlmICh2LT5pbmRleCAhPSAwICYmIHYtPmluZGV4ICE9IDEpCiAJCXJldHVybiAtRUlOVkFMOwotCWN1cnR1bmVyID0gdi0+aW5kZXg7CisJZGV2LT5jdXJ0dW5lciA9IHYtPmluZGV4OwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0JZi0+dHVuZXIgPSBjdXJ0dW5lcjsKKwlzdHJ1Y3QgY2FkZXQgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlmLT50dW5lciA9IGRldi0+Y3VydHVuZXI7CiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0JZi0+ZnJlcXVlbmN5ID0gY2FkZXRfZ2V0ZnJlcSgpOworCWYtPmZyZXF1ZW5jeSA9IGNhZGV0X2dldGZyZXEoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDM3LDI3ICs0MjgsMjYgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKKwlzdHJ1Y3QgY2FkZXQgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlpZiAoZi0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZigoY3VydHVuZXI9PTApJiYoKGYtPmZyZXF1ZW5jeTwxNDAwKXx8KGYtPmZyZXF1ZW5jeT4xNzI4KSkpCisJaWYgKGRldi0+Y3VydHVuZXIgPT0gMCAmJiAoZi0+ZnJlcXVlbmN5IDwgMTQwMCB8fCBmLT5mcmVxdWVuY3kgPiAxNzI4KSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYoKGN1cnR1bmVyPT0xKSYmKChmLT5mcmVxdWVuY3k8ODMyMCl8fChmLT5mcmVxdWVuY3k+MjY0MDApKSkKKwlpZiAoZGV2LT5jdXJ0dW5lciA9PSAxICYmIChmLT5mcmVxdWVuY3kgPCA4MzIwIHx8IGYtPmZyZXF1ZW5jeSA+IDI2NDAwKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JY2FkZXRfc2V0ZnJlcShmLT5mcmVxdWVuY3kpOworCWNhZGV0X3NldGZyZXEoZGV2LCBmLT5mcmVxdWVuY3kpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7Ci0JCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAotCQkJCQkJc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAweGZmLCAxLCAweGZmKTsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC00NjUsMTIgKzQ1NSwxNCBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3dpdGNoIChjdHJsLT5pZCl7CisJc3RydWN0IGNhZGV0ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURTogLyogVE9ETzogSGFuZGxlIHRoaXMgY29ycmVjdGx5ICovCi0JCWN0cmwtPnZhbHVlID0gKGNhZGV0X2dldHZvbCgpID09IDApOworCQljdHJsLT52YWx1ZSA9IChjYWRldF9nZXR2b2woZGV2KSA9PSAwKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCWN0cmwtPnZhbHVlID0gY2FkZXRfZ2V0dm9sKCk7CisJCWN0cmwtPnZhbHVlID0gY2FkZXRfZ2V0dm9sKGRldik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDgxLDE1ICs0NzMsMTcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogeworCXN0cnVjdCBjYWRldCAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwogCXN3aXRjaCAoY3RybC0+aWQpewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURTogLyogVE9ETzogSGFuZGxlIHRoaXMgY29ycmVjdGx5ICovCiAJCWlmIChjdHJsLT52YWx1ZSkKLQkJCWNhZGV0X3NldHZvbCgwKTsKKwkJCWNhZGV0X3NldHZvbChkZXYsIDApOwogCQllbHNlCi0JCQljYWRldF9zZXR2b2woMHhmZmZmKTsKKwkJCWNhZGV0X3NldHZvbChkZXYsIDB4ZmZmZik7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQljYWRldF9zZXR2b2woY3RybC0+dmFsdWUpOworCQljYWRldF9zZXR2b2woZGV2LCBjdHJsLT52YWx1ZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDk3LDE2ICs0OTEsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWlmIChhLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKLQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCiB7CiAJKmkgPSAwOwpAQCAtNTE1LDQzICs0OTksNTIgQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCA9IDA7CisJc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCiB7Ci0JaWYgKGEtPmluZGV4ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBhLT5pbmRleCA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IGNhZGV0X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGNhZGV0ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJZGV2LT51c2VycysrOworCWlmICgxID09IGRldi0+dXNlcnMpCisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+cmVhZF9xdWV1ZSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWNhZGV0X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGNhZGV0X3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JdXNlcnMrKzsKLQlpZiAoMSA9PSB1c2VycykgaW5pdF93YWl0cXVldWVfaGVhZCgmcmVhZF9xdWV1ZSk7Ci0JcmV0dXJuIDA7Ci19CisJc3RydWN0IGNhZGV0ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi1zdGF0aWMgaW50Ci1jYWRldF9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXVzZXJzLS07Ci0JaWYgKDAgPT0gdXNlcnMpewotCQlkZWxfdGltZXJfc3luYygmcmVhZHRpbWVyKTsKLQkJcmRzc3RhdD0wOworCWRldi0+dXNlcnMtLTsKKwlpZiAoMCA9PSBkZXYtPnVzZXJzKSB7CisJCWRlbF90aW1lcl9zeW5jKCZkZXYtPnJlYWR0aW1lcik7CisJCWRldi0+cmRzc3RhdCA9IDA7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1jYWRldF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCitzdGF0aWMgdW5zaWduZWQgaW50IGNhZGV0X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKIHsKLQlwb2xsX3dhaXQoZmlsZSwmcmVhZF9xdWV1ZSx3YWl0KTsKLQlpZihyZHNpbiAhPSByZHNvdXQpCisJc3RydWN0IGNhZGV0ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJcG9sbF93YWl0KGZpbGUsICZkZXYtPnJlYWRfcXVldWUsIHdhaXQpOworCWlmIChkZXYtPnJkc2luICE9IGRldi0+cmRzb3V0KQogCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKIAlyZXR1cm4gMDsKIH0KQEAgLTU4MSwxMyArNTc0LDYgQEAKIAkudmlkaW9jX3NfaW5wdXQgICAgID0gdmlkaW9jX3NfaW5wdXQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBjYWRldF9yYWRpbyA9IHsKLQkubmFtZQkJPSAiQ2FkZXQgcmFkaW8iLAotCS5mb3BzICAgICAgICAgICA9ICZjYWRldF9mb3BzLAotCS5pb2N0bF9vcHMgCT0gJmNhZGV0X2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQogI2lmZGVmIENPTkZJR19QTlAKIAogc3RhdGljIHN0cnVjdCBwbnBfZGV2aWNlX2lkIGNhZGV0X3BucF9kZXZpY2VzW10gPSB7CkBAIC01OTgsNyArNTg0LDcgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwbnAsIGNhZGV0X3BucF9kZXZpY2VzKTsKIAotc3RhdGljIGludCBjYWRldF9wbnBfcHJvYmUoc3RydWN0IHBucF9kZXYgKiBkZXYsIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICpkZXZfaWQpCitzdGF0aWMgaW50IGNhZGV0X3BucF9wcm9iZShzdHJ1Y3QgcG5wX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCAqZGV2X2lkKQogewogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTYwNiwxMyArNTkyLDEyIEBACiAJaWYgKGlvID4gMCkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCWlmICghcG5wX3BvcnRfdmFsaWQoZGV2LCAwKSkgeworCWlmICghcG5wX3BvcnRfdmFsaWQoZGV2LCAwKSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCiAJaW8gPSBwbnBfcG9ydF9zdGFydChkZXYsIDApOwogCi0JcHJpbnRrICgicmFkaW8tY2FkZXQ6IFBuUCByZXBvcnRzIGRldmljZSBhdCAlI3hcbiIsIGlvKTsKKwlwcmludGsoS0VSTl9JTkZPICJyYWRpby1jYWRldDogUG5QIHJlcG9ydHMgZGV2aWNlIGF0ICUjeFxuIiwgaW8pOwogCiAJcmV0dXJuIGlvOwogfQpAQCAtNjI4LDIzICs2MTMsMjMgQEAKIHN0YXRpYyBzdHJ1Y3QgcG5wX2RyaXZlciBjYWRldF9wbnBfZHJpdmVyOwogI2VuZGlmCiAKLXN0YXRpYyBpbnQgY2FkZXRfcHJvYmUodm9pZCkKK3N0YXRpYyB2b2lkIGNhZGV0X3Byb2JlKHN0cnVjdCBjYWRldCAqZGV2KQogewotCXN0YXRpYyBpbnQgaW92YWxzWzhdPXsweDMzMCwweDMzMiwweDMzNCwweDMzNiwweDMzOCwweDMzYSwweDMzYywweDMzZX07CisJc3RhdGljIGludCBpb3ZhbHNbOF0gPSB7IDB4MzMwLCAweDMzMiwgMHgzMzQsIDB4MzM2LCAweDMzOCwgMHgzM2EsIDB4MzNjLCAweDMzZSB9OwogCWludCBpOwogCi0JZm9yKGk9MDtpPDg7aSsrKSB7Ci0JCWlvPWlvdmFsc1tpXTsKLQkJaWYgKHJlcXVlc3RfcmVnaW9uKGlvLCAyLCAiY2FkZXQtcHJvYmUiKSkgewotCQkJY2FkZXRfc2V0ZnJlcSgxNDEwKTsKLQkJCWlmKGNhZGV0X2dldGZyZXEoKT09MTQxMCkgewotCQkJCXJlbGVhc2VfcmVnaW9uKGlvLCAyKTsKLQkJCQlyZXR1cm4gaW87CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlkZXYtPmlvID0gaW92YWxzW2ldOworCQlpZiAocmVxdWVzdF9yZWdpb24oZGV2LT5pbywgMiwgImNhZGV0LXByb2JlIikpIHsKKwkJCWNhZGV0X3NldGZyZXEoZGV2LCAxNDEwKTsKKwkJCWlmIChjYWRldF9nZXRmcmVxKGRldikgPT0gMTQxMCkgeworCQkJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW8sIDIpOworCQkJCXJldHVybjsKIAkJCX0KLQkJCXJlbGVhc2VfcmVnaW9uKGlvLCAyKTsKKwkJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW8sIDIpOwogCQl9CiAJfQotCXJldHVybiAtMTsKKwlkZXYtPmlvID0gLTE7CiB9CiAKIC8qCkBAIC02NTQsNTkgKzYzOSw2OSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBjYWRldF9pbml0KHZvaWQpCiB7Ci0Jc3Bpbl9sb2NrX2luaXQoJmNhZGV0X2lvX2xvY2spOworCXN0cnVjdCBjYWRldCAqZGV2ID0gJmNhZGV0X2NhcmQ7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZkZXYtPnY0bDJfZGV2OworCWludCByZXM7CiAKLQkvKgotCSAqCUlmIGEgcHJvYmUgd2FzIHJlcXVlc3RlZCB0aGVuIHByb2JlIElTQVBuUCBmaXJzdCAoc2FmZXN0KQotCSAqLworCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJjYWRldCIsIHNpemVvZih2NGwyX2Rldi0+bmFtZSkpOworCW11dGV4X2luaXQoJmRldi0+bG9jayk7CisKKwkvKiBJZiBhIHByb2JlIHdhcyByZXF1ZXN0ZWQgdGhlbiBwcm9iZSBJU0FQblAgZmlyc3QgKHNhZmVzdCkgKi8KIAlpZiAoaW8gPCAwKQogCQlwbnBfcmVnaXN0ZXJfZHJpdmVyKCZjYWRldF9wbnBfZHJpdmVyKTsKLQkvKgotCSAqCUlmIHRoYXQgZmFpbHMgdGhlbiBwcm9iZSB1bnNhZmVseSBpZiBwcm9iZSBpcyByZXF1ZXN0ZWQKLQkgKi8KLQlpZihpbyA8IDApCi0JCWlvID0gY2FkZXRfcHJvYmUgKCk7CisJZGV2LT5pbyA9IGlvOwogCi0JLyoKLQkgKglFbHNlIHdlIGJhaWwgb3V0Ci0JICovCisJLyogSWYgdGhhdCBmYWlscyB0aGVuIHByb2JlIHVuc2FmZWx5IGlmIHByb2JlIGlzIHJlcXVlc3RlZCAqLworCWlmIChkZXYtPmlvIDwgMCkKKwkJY2FkZXRfcHJvYmUoZGV2KTsKIAotCWlmKGlvIDwgMCkgeworCS8qIEVsc2Ugd2UgYmFpbCBvdXQgKi8KKwlpZiAoZGV2LT5pbyA8IDApIHsKICNpZmRlZiBNT0RVTEUKLQkJcHJpbnRrKEtFUk5fRVJSICJZb3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weD8/P1xuIik7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAieW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHgzMzAsIDB4MzMyLCAweDMzNCxcbiIpOworCQl2NGwyX2Vycih2NGwyX2RldiwgIjB4MzM2LCAweDMzOCwgMHgzM2EsIDB4MzNjIG9yIDB4MzNlXG4iKTsKICNlbmRpZgogCQlnb3RvIGZhaWw7CiAJfQotCWlmICghcmVxdWVzdF9yZWdpb24oaW8sMiwiY2FkZXQiKSkKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGRldi0+aW8sIDIsICJjYWRldCIpKQogCQlnb3RvIGZhaWw7Ci0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmY2FkZXRfcmFkaW8sIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7Ci0JCXJlbGVhc2VfcmVnaW9uKGlvLDIpOworCisJcmVzID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgdjRsMl9kZXYpOworCWlmIChyZXMgPCAwKSB7CisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW8sIDIpOworCQl2NGwyX2Vycih2NGwyX2RldiwgImNvdWxkIG5vdCByZWdpc3RlciB2NGwyX2RldmljZVxuIik7CiAJCWdvdG8gZmFpbDsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiQURTIENhZGV0IFJhZGlvIENhcmQgYXQgMHgleFxuIixpbyk7CisKKwlzdHJsY3B5KGRldi0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKGRldi0+dmRldi5uYW1lKSk7CisJZGV2LT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJZGV2LT52ZGV2LmZvcHMgPSAmY2FkZXRfZm9wczsKKwlkZXYtPnZkZXYuaW9jdGxfb3BzID0gJmNhZGV0X2lvY3RsX29wczsKKwlkZXYtPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCXZpZGVvX3NldF9kcnZkYXRhKCZkZXYtPnZkZXYsIGRldik7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnZkZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOworCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvLCAyKTsKKwkJZ290byBmYWlsOworCX0KKwl2NGwyX2luZm8odjRsMl9kZXYsICJBRFMgQ2FkZXQgUmFkaW8gQ2FyZCBhdCAweCV4XG4iLCBkZXYtPmlvKTsKIAlyZXR1cm4gMDsKIGZhaWw6CiAJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZjYWRldF9wbnBfZHJpdmVyKTsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLQotCi1NT0RVTEVfQVVUSE9SKCJGcmVkIEdsZWFzb24sIFJ1c3NlbGwgS3JvbGwsIFF1YXkgTHUsIERvbmFsZCBTb25nLCBKYXNvbiBMZXdpcywgU2NvdHQgTWNHcmF0aCwgV2lsbGlhbSBNY0dyYXRoIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgQURTIENhZGV0IEFNL0ZNL1JEUyByYWRpbyBjYXJkLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgQ2FkZXQgY2FyZCAoMHgzMzAsMHgzMzIsMHgzMzQsMHgzMzYsMHgzMzgsMHgzM2EsMHgzM2MsMHgzM2UpIik7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjYWRldF9jbGVhbnVwX21vZHVsZSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGNhZGV0X2V4aXQodm9pZCkKIHsKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmY2FkZXRfcmFkaW8pOwotCXJlbGVhc2VfcmVnaW9uKGlvLDIpOworCXN0cnVjdCBjYWRldCAqZGV2ID0gJmNhZGV0X2NhcmQ7CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKKwlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvLCAyKTsKIAlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJmNhZGV0X3BucF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChjYWRldF9pbml0KTsKLW1vZHVsZV9leGl0KGNhZGV0X2NsZWFudXBfbW9kdWxlKTsKK21vZHVsZV9leGl0KGNhZGV0X2V4aXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay1wY2kuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLXBjaS5jCmluZGV4IDBjOTZiZjguLjA5MjY1ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLXBjaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLXBjaS5jCkBAIC00NSwzNCArNDUsMjUgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLQogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDIpCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAotc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0gewotCXsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMSwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCX0sewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKLQkJLm5hbWUgICAgICAgICAgPSAiVm9sdW1lIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDY1NTM1LAotCQkuc3RlcCAgICAgICAgICA9IDY1NTM1LAotCQkuZGVmYXVsdF92YWx1ZSA9IDB4ZmYsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQl9Ci19OworTU9EVUxFX0FVVEhPUigiVmxhZGltaXIgU2hlYm9yZGFldiA8dnNoZWJvcmRhZXZAbWFpbC5ydT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVGhlIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgdGhlIEdlbXRlayBQQ0kgUmFkaW8gQ2FyZCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KK3N0YXRpYyBpbnQgbnJfcmFkaW8gPSAtMTsKK3N0YXRpYyBpbnQgbXggPSAxOworCittb2R1bGVfcGFyYW0obXgsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyhteCwgInNpbmdsZSBkaWdpdDogMSAtIHR1cm4gb2ZmIHRoZSB0dXJuZXIgdXBvbiBtb2R1bGUgZXhpdCAoZGVmYXVsdCksIDAgLSBkbyBub3QiKTsKK21vZHVsZV9wYXJhbShucl9yYWRpbywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobnJfcmFkaW8sICJ2aWRlbzRsaW51eCBkZXZpY2UgbnVtYmVyIHRvIHVzZSIpOworCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMikKIAogI2lmbmRlZiBQQ0lfVkVORE9SX0lEX0dFTVRFSwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0dFTVRFSyAweDUwNDYKQEAgLTkwLDggKzgxLDExIEBACiAjZGVmaW5lIEdFTVRFS19QQ0lfUkFOR0VfSElHSCAoMTA4KjE2MDAwKQogI2VuZGlmCiAKLXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvZGV2Oworc3RydWN0IGdlbXRla19wY2kgeworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJc3RydWN0IG11dGV4IGxvY2s7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAKIAl1MzIgaW9iYXNlOwogCXUzMiBsZW5ndGg7CkBAIC0xMDAsMTE2ICs5NCwxMzMgQEAKIAl1OCAgbXV0ZTsKIH07CiAKLXN0YXRpYyBpbnQgbnJfcmFkaW8gPSAtMTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGluX3VzZTsKLQotc3RhdGljIGlubGluZSB1OCBnZW10ZWtfcGNpX291dCggdTE2IHZhbHVlLCB1MzIgcG9ydCApCitzdGF0aWMgaW5saW5lIHN0cnVjdCBnZW10ZWtfcGNpICp0b19nZW10ZWtfcGNpKHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCiB7Ci0Jb3V0dyggdmFsdWUsIHBvcnQgKTsKKwlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3QgZ2VtdGVrX3BjaSwgdjRsMl9kZXYpOworfQorCitzdGF0aWMgaW5saW5lIHU4IGdlbXRla19wY2lfb3V0KHUxNiB2YWx1ZSwgdTMyIHBvcnQpCit7CisJb3V0dyh2YWx1ZSwgcG9ydCk7CiAKIAlyZXR1cm4gKHU4KXZhbHVlOwogfQogCi0jZGVmaW5lIF9iMCggdiApICooKHU4ICopJnYpCi1zdGF0aWMgdm9pZCBfX2dlbXRla19wY2lfY21kKCB1MTYgdmFsdWUsIHUzMiBwb3J0LCB1OCAqbGFzdF9ieXRlLCBpbnQga2VlcCApCi17Ci0JcmVnaXN0ZXIgdTggYnl0ZSA9ICpsYXN0X2J5dGU7CisjZGVmaW5lIF9iMCh2KSAoKigodTggKikmdikpCiAKLQlpZiAoICF2YWx1ZSApIHsKLQkJaWYgKCAha2VlcCApCitzdGF0aWMgdm9pZCBfX2dlbXRla19wY2lfY21kKHUxNiB2YWx1ZSwgdTMyIHBvcnQsIHU4ICpsYXN0X2J5dGUsIGludCBrZWVwKQoreworCXU4IGJ5dGUgPSAqbGFzdF9ieXRlOworCisJaWYgKCF2YWx1ZSkgeworCQlpZiAoIWtlZXApCiAJCQl2YWx1ZSA9ICh1MTYpcG9ydDsKIAkJYnl0ZSAmPSAweGZkOwogCX0gZWxzZQogCQlieXRlIHw9IDI7CiAKLQlfYjAoIHZhbHVlICkgPSBieXRlOwotCW91dHcoIHZhbHVlLCBwb3J0ICk7CisJX2IwKHZhbHVlKSA9IGJ5dGU7CisJb3V0dyh2YWx1ZSwgcG9ydCk7CiAJYnl0ZSB8PSAxOwotCV9iMCggdmFsdWUgKSA9IGJ5dGU7Ci0Jb3V0dyggdmFsdWUsIHBvcnQgKTsKKwlfYjAodmFsdWUpID0gYnl0ZTsKKwlvdXR3KHZhbHVlLCBwb3J0KTsKIAlieXRlICY9IDB4ZmU7Ci0JX2IwKCB2YWx1ZSApID0gYnl0ZTsKLQlvdXR3KCB2YWx1ZSwgcG9ydCApOworCV9iMCh2YWx1ZSkgPSBieXRlOworCW91dHcodmFsdWUsIHBvcnQpOwogCiAJKmxhc3RfYnl0ZSA9IGJ5dGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBnZW10ZWtfcGNpX25pbCggdTMyIHBvcnQsIHU4ICpsYXN0X2J5dGUgKQorc3RhdGljIGlubGluZSB2b2lkIGdlbXRla19wY2lfbmlsKHUzMiBwb3J0LCB1OCAqbGFzdF9ieXRlKQogewotCV9fZ2VtdGVrX3BjaV9jbWQoIDB4MDAsIHBvcnQsIGxhc3RfYnl0ZSwgZmFsc2UgKTsKKwlfX2dlbXRla19wY2lfY21kKDB4MDAsIHBvcnQsIGxhc3RfYnl0ZSwgZmFsc2UpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2VtdGVrX3BjaV9jbWQoIHUxNiBjbWQsIHUzMiBwb3J0LCB1OCAqbGFzdF9ieXRlICkKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW10ZWtfcGNpX2NtZCh1MTYgY21kLCB1MzIgcG9ydCwgdTggKmxhc3RfYnl0ZSkKIHsKLQlfX2dlbXRla19wY2lfY21kKCBjbWQsIHBvcnQsIGxhc3RfYnl0ZSwgdHJ1ZSApOworCV9fZ2VtdGVrX3BjaV9jbWQoY21kLCBwb3J0LCBsYXN0X2J5dGUsIHRydWUpOwogfQogCi1zdGF0aWMgdm9pZCBnZW10ZWtfcGNpX3NldGZyZXF1ZW5jeSggc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCwgdW5zaWduZWQgbG9uZyBmcmVxdWVuY3kgKQorc3RhdGljIHZvaWQgZ2VtdGVrX3BjaV9zZXRmcmVxdWVuY3koc3RydWN0IGdlbXRla19wY2kgKmNhcmQsIHVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5KQogewotCXJlZ2lzdGVyIGludCBpOwotCXJlZ2lzdGVyIHUzMiB2YWx1ZSA9IGZyZXF1ZW5jeSAvIDIwMCArIDg1NjsKLQlyZWdpc3RlciB1MTYgbWFzayA9IDB4ODAwMDsKKwlpbnQgaTsKKwl1MzIgdmFsdWUgPSBmcmVxdWVuY3kgLyAyMDAgKyA4NTY7CisJdTE2IG1hc2sgPSAweDgwMDA7CiAJdTggbGFzdF9ieXRlOwogCXUzMiBwb3J0ID0gY2FyZC0+aW9iYXNlOwogCi0JbGFzdF9ieXRlID0gZ2VtdGVrX3BjaV9vdXQoIDB4MDYsIHBvcnQgKTsKKwltdXRleF9sb2NrKCZjYXJkLT5sb2NrKTsKKwljYXJkLT5jdXJyZW50X2ZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTsKKwlsYXN0X2J5dGUgPSBnZW10ZWtfcGNpX291dCgweDA2LCBwb3J0KTsKIAogCWkgPSAwOwogCWRvIHsKLQkJZ2VtdGVrX3BjaV9uaWwoIHBvcnQsICZsYXN0X2J5dGUgKTsKKwkJZ2VtdGVrX3BjaV9uaWwocG9ydCwgJmxhc3RfYnl0ZSk7CiAJCWkrKzsKLQl9IHdoaWxlICggaSA8IDkgKTsKKwl9IHdoaWxlIChpIDwgOSk7CiAKIAlpID0gMDsKIAlkbyB7Ci0JCWdlbXRla19wY2lfY21kKCB2YWx1ZSAmIG1hc2ssIHBvcnQsICZsYXN0X2J5dGUgKTsKKwkJZ2VtdGVrX3BjaV9jbWQodmFsdWUgJiBtYXNrLCBwb3J0LCAmbGFzdF9ieXRlKTsKIAkJbWFzayA+Pj0gMTsKIAkJaSsrOwotCX0gd2hpbGUgKCBpIDwgMTYgKTsKKwl9IHdoaWxlIChpIDwgMTYpOwogCi0Jb3V0dyggMHgxMCwgcG9ydCApOworCW91dHcoMHgxMCwgcG9ydCk7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5sb2NrKTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2VtdGVrX3BjaV9tdXRlKCBzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICpjYXJkICkKK3N0YXRpYyB2b2lkIGdlbXRla19wY2lfbXV0ZShzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZCkKIHsKLQlvdXRiKCAweDFmLCBjYXJkLT5pb2Jhc2UgKTsKKwltdXRleF9sb2NrKCZjYXJkLT5sb2NrKTsKKwlvdXRiKDB4MWYsIGNhcmQtPmlvYmFzZSk7CiAJY2FyZC0+bXV0ZSA9IHRydWU7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGdlbXRla19wY2lfdW5tdXRlKCBzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICpjYXJkICkKK3N0YXRpYyB2b2lkIGdlbXRla19wY2lfdW5tdXRlKHN0cnVjdCBnZW10ZWtfcGNpICpjYXJkKQogewotCWlmICggY2FyZC0+bXV0ZSApIHsKLQkJZ2VtdGVrX3BjaV9zZXRmcmVxdWVuY3koIGNhcmQsIGNhcmQtPmN1cnJlbnRfZnJlcXVlbmN5ICk7CisJbXV0ZXhfbG9jaygmY2FyZC0+bG9jayk7CisJaWYgKGNhcmQtPm11dGUpIHsKKwkJZ2VtdGVrX3BjaV9zZXRmcmVxdWVuY3koY2FyZCwgY2FyZC0+Y3VycmVudF9mcmVxdWVuY3kpOwogCQljYXJkLT5tdXRlID0gZmFsc2U7CiAJfQorCW11dGV4X3VubG9jaygmY2FyZC0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdlbXRla19wY2lfZ2V0c2lnbmFsKCBzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICpjYXJkICkKK3N0YXRpYyBpbnQgZ2VtdGVrX3BjaV9nZXRzaWduYWwoc3RydWN0IGdlbXRla19wY2kgKmNhcmQpCiB7Ci0JcmV0dXJuICggaW5iKCBjYXJkLT5pb2Jhc2UgKSAmIDB4MDggKSA/IDAgOiAxOworCWludCBzaWc7CisKKwltdXRleF9sb2NrKCZjYXJkLT5sb2NrKTsKKwlzaWcgPSAoaW5iKGNhcmQtPmlvYmFzZSkgJiAweDA4KSA/IDAgOiAxOworCW11dGV4X3VubG9jaygmY2FyZC0+bG9jayk7CisJcmV0dXJuIHNpZzsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCiB7CisJc3RydWN0IGdlbXRla19wY2kgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1nZW10ZWstcGNpIiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIkdlbVRlayBQQ0kgUmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOwotCXNwcmludGYodi0+YnVzX2luZm8sICJJU0EiKTsKKwlzbnByaW50Zih2LT5idXNfaW5mbywgc2l6ZW9mKHYtPmJ1c19pbmZvKSwgIlBDSTolcyIsIHBjaV9uYW1lKGNhcmQtPnBkZXYpKTsKIAl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKLQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJdi0+cmFuZ2Vsb3cgPSBHRU1URUtfUENJX1JBTkdFX0xPVzsKIAl2LT5yYW5nZWhpZ2ggPSBHRU1URUtfUENJX1JBTkdFX0hJR0g7CkBAIC0yMjMsMjEgKzIzNCwxOCBAQAogc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0JaWYgKHYtPmluZGV4ID4gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHYtPmluZGV4ID8gLUVJTlZBTCA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGdlbXRla19wY2kgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0JaWYgKCAoZi0+ZnJlcXVlbmN5IDwgR0VNVEVLX1BDSV9SQU5HRV9MT1cpIHx8Ci0JCQkoZi0+ZnJlcXVlbmN5ID4gR0VNVEVLX1BDSV9SQU5HRV9ISUdIKSApCisJaWYgKGYtPmZyZXF1ZW5jeSA8IEdFTVRFS19QQ0lfUkFOR0VfTE9XIHx8CisJICAgIGYtPmZyZXF1ZW5jeSA+IEdFTVRFS19QQ0lfUkFOR0VfSElHSCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZ2VtdGVrX3BjaV9zZXRmcmVxdWVuY3koY2FyZCwgZi0+ZnJlcXVlbmN5KTsKLQljYXJkLT5jdXJyZW50X2ZyZXF1ZW5jeSA9IGYtPmZyZXF1ZW5jeTsKIAljYXJkLT5tdXRlID0gZmFsc2U7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNDUsNyArMjUzLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGdlbXRla19wY2kgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gY2FyZC0+Y3VycmVudF9mcmVxdWVuY3k7CkBAIC0yNTUsMTMgKzI2MywxMSBAQAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7Ci0JCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAotCQkJCQkJc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNjU1MzUsIDY1NTM1KTsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yNjksNyArMjc1LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMjg4LDcgKzI5NCw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGdlbXRla19wY2kgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTMwNywxNyArMzEzLDYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JaWYgKGEtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQogewogCSppID0gMDsKQEAgLTMyNiwxNyArMzIxLDIyIEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQogewotCWlmIChpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBpID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWEtPmluZGV4ID0gMDsKKwlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCiB7Ci0JaWYgKGEtPmluZGV4ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOworCXJldHVybiBhLT5pbmRleCA/IC1FSU5WQUwgOiAwOwogfQogCiBlbnVtIHsKQEAgLTM1NCwyNSArMzU0LDIyIEBACiAJeyAwIH0KIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoIHBjaSwgZ2VtdGVrX3BjaV9pZCApOworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGdlbXRla19wY2lfaWQpOwogCi1zdGF0aWMgaW50IG14ID0gMTsKLQotc3RhdGljIGludCBnZW10ZWtfcGNpX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBnZW10ZWtfcGNpX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmluX3VzZSkgPyAtRUJVU1kgOiAwOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdlbXRla19wY2lfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGdlbXRla19wY2lfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQljbGVhcl9iaXQoMCwgJmluX3VzZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgZ2VtdGVrX3BjaV9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSBnZW10ZWtfcGNpX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IGdlbXRla19wY2lfZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gZ2VtdGVrX3BjaV9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IGdlbXRla19wY2lfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogfTsKIApAQCAtMzkxLDEwOCArMzg4LDEwMCBAQAogCS52aWRpb2Nfc19jdHJsICAgICAgPSB2aWRpb2Nfc19jdHJsLAogfTsKIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgdmRldl90ZW1wbGF0ZSA9IHsKLQkubmFtZSAgICAgICAgICAJPSAiR2VtdGVrIFBDSSBSYWRpbyIsCi0JLmZvcHMgICAgICAgICAgCT0gJmdlbXRla19wY2lfZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZnZW10ZWtfcGNpX2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQotc3RhdGljIGludCBfX2RldmluaXQgZ2VtdGVrX3BjaV9wcm9iZSggc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQgKQorc3RhdGljIGludCBfX2RldmluaXQgZ2VtdGVrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKLQlzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICpjYXJkOwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldnJhZGlvOworCXN0cnVjdCBnZW10ZWtfcGNpICpjYXJkOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXY7CisJaW50IHJlczsKIAotCWlmICggKGNhcmQgPSBremFsbG9jKCBzaXplb2YoIHN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKSwgR0ZQX0tFUk5FTCApKSA9PSBOVUxMICkgewotCQlwcmludGsoIEtFUk5fRVJSICJnZW10ZWtfcGNpOiBvdXQgb2YgbWVtb3J5XG4iICk7CisJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnZW10ZWtfcGNpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNhcmQgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaWYgKCBwY2lfZW5hYmxlX2RldmljZSggcGNpX2RldiApICkKKwl2NGwyX2RldiA9ICZjYXJkLT52NGwyX2RldjsKKwltdXRleF9pbml0KCZjYXJkLT5sb2NrKTsKKwljYXJkLT5wZGV2ID0gcGRldjsKKworCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJnZW10ZWtfcGNpIiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CisKKwlyZXMgPSB2NGwyX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2LCB2NGwyX2Rldik7CisJaWYgKHJlcyA8IDApIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOworCQlrZnJlZShjYXJkKTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCiAJCWdvdG8gZXJyX3BjaTsKIAotCWNhcmQtPmlvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydCggcGNpX2RldiwgMCApOwotCWNhcmQtPmxlbmd0aCA9IHBjaV9yZXNvdXJjZV9sZW4oIHBjaV9kZXYsIDAgKTsKKwljYXJkLT5pb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJY2FyZC0+bGVuZ3RoID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKIAotCWlmICggcmVxdWVzdF9yZWdpb24oIGNhcmQtPmlvYmFzZSwgY2FyZC0+bGVuZ3RoLCBjYXJkX25hbWVzW3BjaV9pZC0+ZHJpdmVyX2RhdGFdICkgPT0gTlVMTCApIHsKLQkJcHJpbnRrKCBLRVJOX0VSUiAiZ2VtdGVrX3BjaTogaS9vIHBvcnQgYWxyZWFkeSBpbiB1c2VcbiIgKTsKKwlpZiAocmVxdWVzdF9yZWdpb24oY2FyZC0+aW9iYXNlLCBjYXJkLT5sZW5ndGgsIGNhcmRfbmFtZXNbcGNpX2lkLT5kcml2ZXJfZGF0YV0pID09IE5VTEwpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJpL28gcG9ydCBhbHJlYWR5IGluIHVzZVxuIik7CiAJCWdvdG8gZXJyX3BjaTsKIAl9CiAKLQlwY2lfc2V0X2RydmRhdGEoIHBjaV9kZXYsIGNhcmQgKTsKKwlzdHJsY3B5KGNhcmQtPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZihjYXJkLT52ZGV2Lm5hbWUpKTsKKwljYXJkLT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJY2FyZC0+dmRldi5mb3BzID0gJmdlbXRla19wY2lfZm9wczsKKwljYXJkLT52ZGV2LmlvY3RsX29wcyA9ICZnZW10ZWtfcGNpX2lvY3RsX29wczsKKwljYXJkLT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmY2FyZC0+dmRldiwgY2FyZCk7CiAKLQlpZiAoIChkZXZyYWRpbyA9IGttYWxsb2MoIHNpemVvZiggc3RydWN0IHZpZGVvX2RldmljZSApLCBHRlBfS0VSTkVMICkpID09IE5VTEwgKSB7Ci0JCXByaW50ayggS0VSTl9FUlIgImdlbXRla19wY2k6IG91dCBvZiBtZW1vcnlcbiIgKTsKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZjYXJkLT52ZGV2LCBWRkxfVFlQRV9SQURJTywgbnJfcmFkaW8pIDwgMCkKIAkJZ290byBlcnJfdmlkZW87Ci0JfQotCSpkZXZyYWRpbyA9IHZkZXZfdGVtcGxhdGU7CiAKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGRldnJhZGlvLCBWRkxfVFlQRV9SQURJTywgbnJfcmFkaW8pIDwgMCkgewotCQlrZnJlZSggZGV2cmFkaW8gKTsKLQkJZ290byBlcnJfdmlkZW87Ci0JfQorCWdlbXRla19wY2lfbXV0ZShjYXJkKTsKIAotCWNhcmQtPnZpZGVvZGV2ID0gZGV2cmFkaW87Ci0JdmlkZW9fc2V0X2RydmRhdGEoZGV2cmFkaW8sIGNhcmQpOwotCWdlbXRla19wY2lfbXV0ZSggY2FyZCApOwotCi0JcHJpbnRrKCBLRVJOX0lORk8gIkdlbXRlayBQQ0kgUmFkaW8gKHJldi4gJWQpIGZvdW5kIGF0IDB4JTA0eC0weCUwNHguXG4iLAotCQlwY2lfZGV2LT5yZXZpc2lvbiwgY2FyZC0+aW9iYXNlLCBjYXJkLT5pb2Jhc2UgKyBjYXJkLT5sZW5ndGggLSAxICk7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiR2VtdGVrIFBDSSBSYWRpbyAocmV2LiAlZCkgZm91bmQgYXQgMHglMDR4LTB4JTA0eC5cbiIsCisJCXBkZXYtPnJldmlzaW9uLCBjYXJkLT5pb2Jhc2UsIGNhcmQtPmlvYmFzZSArIGNhcmQtPmxlbmd0aCAtIDEpOwogCiAJcmV0dXJuIDA7CiAKIGVycl92aWRlbzoKLQlyZWxlYXNlX3JlZ2lvbiggY2FyZC0+aW9iYXNlLCBjYXJkLT5sZW5ndGggKTsKKwlyZWxlYXNlX3JlZ2lvbihjYXJkLT5pb2Jhc2UsIGNhcmQtPmxlbmd0aCk7CiAKIGVycl9wY2k6Ci0Ja2ZyZWUoIGNhcmQgKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKKwlrZnJlZShjYXJkKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZleGl0IGdlbXRla19wY2lfcmVtb3ZlKCBzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiApCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZ2VtdGVrX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCA9IHBjaV9nZXRfZHJ2ZGF0YSggcGNpX2RldiApOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IGdlbXRla19wY2kgKmNhcmQgPSB0b19nZW10ZWtfcGNpKHY0bDJfZGV2KTsKIAotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCBjYXJkLT52aWRlb2RldiApOwotCWtmcmVlKCBjYXJkLT52aWRlb2RldiApOworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZjYXJkLT52ZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKIAotCXJlbGVhc2VfcmVnaW9uKCBjYXJkLT5pb2Jhc2UsIGNhcmQtPmxlbmd0aCApOworCXJlbGVhc2VfcmVnaW9uKGNhcmQtPmlvYmFzZSwgY2FyZC0+bGVuZ3RoKTsKIAotCWlmICggbXggKQotCQlnZW10ZWtfcGNpX211dGUoIGNhcmQgKTsKKwlpZiAobXgpCisJCWdlbXRla19wY2lfbXV0ZShjYXJkKTsKIAotCWtmcmVlKCBjYXJkICk7Ci0KLQlwY2lfc2V0X2RydmRhdGEoIHBjaV9kZXYsIE5VTEwgKTsKKwlrZnJlZShjYXJkKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGdlbXRla19wY2lfZHJpdmVyID0KLXsKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBnZW10ZWtfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiZ2VtdGVrX3BjaSIsCiAJLmlkX3RhYmxlCT0gZ2VtdGVrX3BjaV9pZCwKIAkucHJvYmUJCT0gZ2VtdGVrX3BjaV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGdlbXRla19wY2lfcmVtb3ZlKSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGdlbXRla19wY2lfaW5pdF9tb2R1bGUoIHZvaWQgKQorc3RhdGljIGludCBfX2luaXQgZ2VtdGVrX3BjaV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoICZnZW10ZWtfcGNpX2RyaXZlciApOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZnZW10ZWtfcGNpX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBnZW10ZWtfcGNpX2NsZWFudXBfbW9kdWxlKCB2b2lkICkKK3N0YXRpYyB2b2lkIF9fZXhpdCBnZW10ZWtfcGNpX2V4aXQodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmdlbXRla19wY2lfZHJpdmVyKTsKIH0KIAotTU9EVUxFX0FVVEhPUiggIlZsYWRpbWlyIFNoZWJvcmRhZXYgPHZzaGVib3JkYWV2QG1haWwucnU+IiApOwotTU9EVUxFX0RFU0NSSVBUSU9OKCAiVGhlIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgdGhlIEdlbXRlayBQQ0kgUmFkaW8gQ2FyZCIgKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX3BhcmFtKG14LCBib29sLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoIG14LCAic2luZ2xlIGRpZ2l0OiAxIC0gdHVybiBvZmYgdGhlIHR1cm5lciB1cG9uIG1vZHVsZSBleGl0IChkZWZhdWx0KSwgMCAtIGRvIG5vdCIgKTsKLW1vZHVsZV9wYXJhbShucl9yYWRpbywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoIG5yX3JhZGlvLCAidmlkZW80bGludXggZGV2aWNlIG51bWJlciB0byB1c2UiKTsKLQotbW9kdWxlX2luaXQoIGdlbXRla19wY2lfaW5pdF9tb2R1bGUgKTsKLW1vZHVsZV9leGl0KCBnZW10ZWtfcGNpX2NsZWFudXBfbW9kdWxlICk7Ci0KK21vZHVsZV9pbml0KGdlbXRla19wY2lfaW5pdCk7Cittb2R1bGVfZXhpdChnZW10ZWtfcGNpX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWsuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLmMKaW5kZXggMmI2OGJlNy4uMTUwNDY0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWsuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay5jCkBAIC0yMCwxNiArMjAsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YQkJCSovCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCi0jaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyCQkqLwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBrZXJuZWwgcmFkaW8gc3RydWN0cwkJKi8KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgkvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8JKi8KLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDAsMykKLSNkZWZpbmUgUkFESU9fQkFOTkVSICJHZW1UZWsgUmFkaW8gY2FyZCBkcml2ZXI6IHYwLjAuMyIKKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLworI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMykKIAogLyoKICAqIE1vZHVsZSBpbmZvLgpAQCAtNTcsNyArNTUsNiBAQAogc3RhdGljIGludCBrZWVwbXV0ZWQJPSAxOwogc3RhdGljIGludCBpbml0bXV0ZQk9IDE7CiBzdGF0aWMgaW50IHJhZGlvX25yCT0gLTE7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbl91c2U7CiAKIG1vZHVsZV9wYXJhbShpbywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaW8sICJGb3JjZSBJL08gcG9ydCBmb3IgdGhlIEdlbVRlayBSYWRpbyBjYXJkIGlmIGF1dG9tYXRpYyAiCkBAIC0xMTIsMTIgKzEwOSwxOSBAQAogI2RlZmluZSBTSE9SVF9ERUxBWSA1CQkvKiB1c2VjICovCiAjZGVmaW5lIExPTkdfREVMQVkgNzUJCS8qIHVzZWMgKi8KIAotc3RydWN0IGdlbXRla19kZXZpY2Ugeworc3RydWN0IGdlbXRlayB7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIAl1bnNpZ25lZCBsb25nIGxhc3RmcmVxOwogCWludCBtdXRlZDsKKwlpbnQgdmVyaWZpZWQ7CisJaW50IGlvOwogCXUzMiBidTI2MTRkYXRhOwogfTsKIAorc3RhdGljIHN0cnVjdCBnZW10ZWsgZ2VtdGVrX2NhcmQ7CisKICNkZWZpbmUgQlUyNjE0X0ZSRVFfQklUUyAJMTYgLyogRDAuLkQxNSwgRnJlcXVlbmN5IGRhdGEJCSovCiAjZGVmaW5lIEJVMjYxNF9QT1JUX0JJVFMJMyAvKiBQMC4uUDIsIE91dHB1dCBwb3J0IGNvbnRyb2wgZGF0YQkqLwogI2RlZmluZSBCVTI2MTRfVk9JRF9CSVRTCTQgLyogdW51c2VkIAkJCQkqLwpAQCAtMTUzLDEwICsxNTcsNiBAQAogI2RlZmluZSBCVTI2MTRfRk1VTl9NQVNLCU1LTUFTSyhGTVVOKQogI2RlZmluZSBCVTI2MTRfVEVTVF9NQVNLCU1LTUFTSyhURVNUKQogCi1zdGF0aWMgc3RydWN0IGdlbXRla19kZXZpY2UgZ2VtdGVrX3VuaXQ7Ci0KLXN0YXRpYyBzcGlubG9ja190IGxvY2s7Ci0KIC8qCiAgKiBTZXQgZGF0YSB3aGljaCB3aWxsIGJlIHNlbnQgdG8gQlUyNjE0RlMuCiAgKi8KQEAgLTE2NiwzMyArMTY2LDMzIEBACiAvKgogICogVHJhbnNtaXQgc2V0dGluZ3MgdG8gQlUyNjE0RlMgb3ZlciBHZW1UZWsgSUMuCiAgKi8KLXN0YXRpYyB2b2lkIGdlbXRla19idTI2MTRfdHJhbnNtaXQoc3RydWN0IGdlbXRla19kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGdlbXRla19idTI2MTRfdHJhbnNtaXQoc3RydWN0IGdlbXRlayAqZ3QpCiB7CiAJaW50IGksIGJpdCwgcSwgbXV0ZTsKIAotCXNwaW5fbG9jaygmbG9jayk7CisJbXV0ZXhfbG9jaygmZ3QtPmxvY2spOwogCi0JbXV0ZSA9IGRldi0+bXV0ZWQgPyBHRU1URUtfTVQgOiAweDAwOworCW11dGUgPSBndC0+bXV0ZWQgPyBHRU1URUtfTVQgOiAweDAwOwogCi0Jb3V0Yl9wKG11dGUgfCBHRU1URUtfREEgfCBHRU1URUtfQ0ssIGlvKTsKKwlvdXRiX3AobXV0ZSB8IEdFTVRFS19EQSB8IEdFTVRFS19DSywgZ3QtPmlvKTsKIAl1ZGVsYXkoU0hPUlRfREVMQVkpOwotCW91dGJfcChtdXRlIHwgR0VNVEVLX0NFIHwgR0VNVEVLX0RBIHwgR0VNVEVLX0NLLCBpbyk7CisJb3V0Yl9wKG11dGUgfCBHRU1URUtfQ0UgfCBHRU1URUtfREEgfCBHRU1URUtfQ0ssIGd0LT5pbyk7CiAJdWRlbGF5KExPTkdfREVMQVkpOwogCi0JZm9yIChpID0gMCwgcSA9IGRldi0+YnUyNjE0ZGF0YTsgaSA8IDMyOyBpKyssIHEgPj49IDEpIHsKLQkgICAgYml0ID0gKHEgJiAxKSA/IEdFTVRFS19EQSA6IDA7Ci0JICAgIG91dGJfcChtdXRlIHwgR0VNVEVLX0NFIHwgYml0LCBpbyk7Ci0JICAgIHVkZWxheShTSE9SVF9ERUxBWSk7Ci0JICAgIG91dGJfcChtdXRlIHwgR0VNVEVLX0NFIHwgYml0IHwgR0VNVEVLX0NLLCBpbyk7Ci0JICAgIHVkZWxheShTSE9SVF9ERUxBWSk7CisJZm9yIChpID0gMCwgcSA9IGd0LT5idTI2MTRkYXRhOyBpIDwgMzI7IGkrKywgcSA+Pj0gMSkgeworCQliaXQgPSAocSAmIDEpID8gR0VNVEVLX0RBIDogMDsKKwkJb3V0Yl9wKG11dGUgfCBHRU1URUtfQ0UgfCBiaXQsIGd0LT5pbyk7CisJCXVkZWxheShTSE9SVF9ERUxBWSk7CisJCW91dGJfcChtdXRlIHwgR0VNVEVLX0NFIHwgYml0IHwgR0VNVEVLX0NLLCBndC0+aW8pOworCQl1ZGVsYXkoU0hPUlRfREVMQVkpOwogCX0KIAotCW91dGJfcChtdXRlIHwgR0VNVEVLX0RBIHwgR0VNVEVLX0NLLCBpbyk7CisJb3V0Yl9wKG11dGUgfCBHRU1URUtfREEgfCBHRU1URUtfQ0ssIGd0LT5pbyk7CiAJdWRlbGF5KFNIT1JUX0RFTEFZKTsKLQlvdXRiX3AobXV0ZSB8IEdFTVRFS19DRSB8IEdFTVRFS19EQSB8IEdFTVRFS19DSywgaW8pOworCW91dGJfcChtdXRlIHwgR0VNVEVLX0NFIHwgR0VNVEVLX0RBIHwgR0VNVEVLX0NLLCBndC0+aW8pOwogCXVkZWxheShMT05HX0RFTEFZKTsKIAotCXNwaW5fdW5sb2NrKCZsb2NrKTsKKwltdXRleF91bmxvY2soJmd0LT5sb2NrKTsKIH0KIAogLyoKQEAgLTIwNiwxMDcgKzIwNiwxMDkgQEAKIC8qCiAgKiBTZXQgRk0tZnJlcXVlbmN5LgogICovCi1zdGF0aWMgdm9pZCBnZW10ZWtfc2V0ZnJlcShzdHJ1Y3QgZ2VtdGVrX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZyZXEpCitzdGF0aWMgdm9pZCBnZW10ZWtfc2V0ZnJlcShzdHJ1Y3QgZ2VtdGVrICpndCwgdW5zaWduZWQgbG9uZyBmcmVxKQogewotCi0JaWYgKGtlZXBtdXRlZCAmJiBoYXJkbXV0ZSAmJiBkZXYtPm11dGVkKQorCWlmIChrZWVwbXV0ZWQgJiYgaGFyZG11dGUgJiYgZ3QtPm11dGVkKQogCQlyZXR1cm47CiAKLQlpZiAoZnJlcSA8IEdFTVRFS19MT1dGUkVRKQotCQlmcmVxID0gR0VNVEVLX0xPV0ZSRVE7Ci0JZWxzZSBpZiAoZnJlcSA+IEdFTVRFS19ISUdIRlJFUSkKLQkJZnJlcSA9IEdFTVRFS19ISUdIRlJFUTsKKwlmcmVxID0gY2xhbXBfdmFsKGZyZXEsIEdFTVRFS19MT1dGUkVRLCBHRU1URUtfSElHSEZSRVEpOwogCi0JZGV2LT5sYXN0ZnJlcSA9IGZyZXE7Ci0JZGV2LT5tdXRlZCA9IDA7CisJZ3QtPmxhc3RmcmVxID0gZnJlcTsKKwlndC0+bXV0ZWQgPSAwOwogCi0JZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfUE9SVCwgMCk7Ci0JZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfRk1FUywgMCk7Ci0JZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfU1dJTiwgMCk7CS8qIEZNLW1vZGUJKi8KLQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9TV0FMLCAwKTsKLQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9GTVVOLCAxKTsJLyogR1QgYml0IHNldAkqLwotCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X1RFU1QsIDApOworCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfUE9SVCwgMCk7CisJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9GTUVTLCAwKTsKKwlnZW10ZWtfYnUyNjE0X3NldChndCwgQlUyNjE0X1NXSU4sIDApOwkvKiBGTS1tb2RlCSovCisJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9TV0FMLCAwKTsKKwlnZW10ZWtfYnUyNjE0X3NldChndCwgQlUyNjE0X0ZNVU4sIDEpOwkvKiBHVCBiaXQgc2V0CSovCisJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9URVNULCAwKTsKIAotCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X1NUREYsIEdFTVRFS19TVERGXzNfMTI1X0tIWik7Ci0JZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfRlJFUSwgZ2VtdGVrX2NvbnZmcmVxKGZyZXEpKTsKKwlnZW10ZWtfYnUyNjE0X3NldChndCwgQlUyNjE0X1NUREYsIEdFTVRFS19TVERGXzNfMTI1X0tIWik7CisJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9GUkVRLCBnZW10ZWtfY29udmZyZXEoZnJlcSkpOwogCi0JZ2VtdGVrX2J1MjYxNF90cmFuc21pdChkZXYpOworCWdlbXRla19idTI2MTRfdHJhbnNtaXQoZ3QpOwogfQogCiAvKgogICogU2V0IG11dGUgZmxhZy4KICAqLwotc3RhdGljIHZvaWQgZ2VtdGVrX211dGUoc3RydWN0IGdlbXRla19kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGdlbXRla19tdXRlKHN0cnVjdCBnZW10ZWsgKmd0KQogewogCWludCBpOwotCWRldi0+bXV0ZWQgPSAxOworCisJZ3QtPm11dGVkID0gMTsKIAogCWlmIChoYXJkbXV0ZSkgewogCQkvKiBUdXJuIG9mZiBQTEwsIGRpc2FibGUgZGF0YSBvdXRwdXQgKi8KLQkJZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfUE9SVCwgMCk7Ci0JCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X0ZNRVMsIDApOwkvKiBDVCBiaXQgb2ZmCSovCi0JCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X1NXSU4sIDApOwkvKiBGTS1tb2RlCSovCi0JCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X1NXQUwsIDApOwotCQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9GTVVOLCAwKTsJLyogR1QgYml0IG9mZgkqLwotCQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9URVNULCAwKTsKLQkJZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfU1RERiwgR0VNVEVLX1BMTF9PRkYpOwotCQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9GUkVRLCAwKTsKLQkJZ2VtdGVrX2J1MjYxNF90cmFuc21pdChkZXYpOwotCX0gZWxzZSB7Ci0JCXNwaW5fbG9jaygmbG9jayk7Ci0KLQkJLyogUmVhZCBidXMgY29udGVudHMgKENFLCBDSyBhbmQgREEpLiAqLwotCQlpID0gaW5iX3AoaW8pOwotCQkvKiBXcml0ZSBpdCBiYWNrIHdpdGggbXV0ZSBmbGFnIHNldC4gKi8KLQkJb3V0Yl9wKChpID4+IDUpIHwgR0VNVEVLX01ULCBpbyk7Ci0JCXVkZWxheShTSE9SVF9ERUxBWSk7Ci0KLQkJc3Bpbl91bmxvY2soJmxvY2spOworCQlnZW10ZWtfYnUyNjE0X3NldChndCwgQlUyNjE0X1BPUlQsIDApOworCQlnZW10ZWtfYnUyNjE0X3NldChndCwgQlUyNjE0X0ZNRVMsIDApOwkvKiBDVCBiaXQgb2ZmCSovCisJCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfU1dJTiwgMCk7CS8qIEZNLW1vZGUJKi8KKwkJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9TV0FMLCAwKTsKKwkJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9GTVVOLCAwKTsJLyogR1QgYml0IG9mZgkqLworCQlnZW10ZWtfYnUyNjE0X3NldChndCwgQlUyNjE0X1RFU1QsIDApOworCQlnZW10ZWtfYnUyNjE0X3NldChndCwgQlUyNjE0X1NUREYsIEdFTVRFS19QTExfT0ZGKTsKKwkJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9GUkVRLCAwKTsKKwkJZ2VtdGVrX2J1MjYxNF90cmFuc21pdChndCk7CisJCXJldHVybjsKIAl9CisKKwltdXRleF9sb2NrKCZndC0+bG9jayk7CisKKwkvKiBSZWFkIGJ1cyBjb250ZW50cyAoQ0UsIENLIGFuZCBEQSkuICovCisJaSA9IGluYl9wKGd0LT5pbyk7CisJLyogV3JpdGUgaXQgYmFjayB3aXRoIG11dGUgZmxhZyBzZXQuICovCisJb3V0Yl9wKChpID4+IDUpIHwgR0VNVEVLX01ULCBndC0+aW8pOworCXVkZWxheShTSE9SVF9ERUxBWSk7CisKKwltdXRleF91bmxvY2soJmd0LT5sb2NrKTsKIH0KIAogLyoKICAqIFVuc2V0IG11dGUgZmxhZy4KICAqLwotc3RhdGljIHZvaWQgZ2VtdGVrX3VubXV0ZShzdHJ1Y3QgZ2VtdGVrX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgZ2VtdGVrX3VubXV0ZShzdHJ1Y3QgZ2VtdGVrICpndCkKIHsKIAlpbnQgaTsKLQlkZXYtPm11dGVkID0gMDsKIAorCWd0LT5tdXRlZCA9IDA7CiAJaWYgKGhhcmRtdXRlKSB7CiAJCS8qIFR1cm4gUExMIGJhY2sgb24uICovCi0JCWdlbXRla19zZXRmcmVxKGRldiwgZGV2LT5sYXN0ZnJlcSk7Ci0JfSBlbHNlIHsKLQkJc3Bpbl9sb2NrKCZsb2NrKTsKLQotCQlpID0gaW5iX3AoaW8pOwotCQlvdXRiX3AoaSA+PiA1LCBpbyk7Ci0JCXVkZWxheShTSE9SVF9ERUxBWSk7Ci0KLQkJc3Bpbl91bmxvY2soJmxvY2spOworCQlnZW10ZWtfc2V0ZnJlcShndCwgZ3QtPmxhc3RmcmVxKTsKKwkJcmV0dXJuOwogCX0KKwltdXRleF9sb2NrKCZndC0+bG9jayk7CisKKwlpID0gaW5iX3AoZ3QtPmlvKTsKKwlvdXRiX3AoaSA+PiA1LCBndC0+aW8pOworCXVkZWxheShTSE9SVF9ERUxBWSk7CisKKwltdXRleF91bmxvY2soJmd0LT5sb2NrKTsKIH0KIAogLyoKICAqIEdldCBzaWduYWwgc3RyZW5ndGggKD0gc3RlcmVvIHN0YXR1cykuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdlbXRla19nZXRzaWdzdHIodm9pZCkKK3N0YXRpYyBpbmxpbmUgaW50IGdlbXRla19nZXRzaWdzdHIoc3RydWN0IGdlbXRlayAqZ3QpCiB7Ci0JcmV0dXJuIGluYl9wKGlvKSAmIEdFTVRFS19OUyA/IDAgOiAxOworCWludCBzaWc7CisKKwltdXRleF9sb2NrKCZndC0+bG9jayk7CisJc2lnID0gaW5iX3AoZ3QtPmlvKSAmIEdFTVRFS19OUyA/IDAgOiAxOworCW11dGV4X3VubG9jaygmZ3QtPmxvY2spOworCXJldHVybiBzaWc7CiB9CiAKIC8qCiAgKiBDaGVjayBpZiByZXF1ZXN0ZWQgY2FyZCBhY3RzIGxpa2UgR2VtVGVrIFJhZGlvIGNhcmQuCiAgKi8KLXN0YXRpYyBpbnQgZ2VtdGVrX3ZlcmlmeShpbnQgcG9ydCkKK3N0YXRpYyBpbnQgZ2VtdGVrX3ZlcmlmeShzdHJ1Y3QgZ2VtdGVrICpndCwgaW50IHBvcnQpCiB7Ci0Jc3RhdGljIGludCB2ZXJpZmllZCA9IC0xOwogCWludCBpLCBxOwogCi0JaWYgKHZlcmlmaWVkID09IHBvcnQpCisJaWYgKGd0LT52ZXJpZmllZCA9PSBwb3J0KQogCQlyZXR1cm4gMTsKIAotCXNwaW5fbG9jaygmbG9jayk7CisJbXV0ZXhfbG9jaygmZ3QtPmxvY2spOwogCiAJcSA9IGluYl9wKHBvcnQpOwkvKiBSZWFkIGJ1cyBjb250ZW50cyBiZWZvcmUgcHJvYmluZy4gKi8KIAkvKiBUcnkgdG8gdHVybiBvbiBDRSwgQ0sgYW5kIERBIHJlc3BlY3RpdmVseSBhbmQgY2hlY2sgaWYgY2FyZCByZXNwb25kcwpAQCAtMzE2LDE1ICszMTgsMTUgQEAKIAkJdWRlbGF5KFNIT1JUX0RFTEFZKTsKIAogCQlpZiAoKGluYl9wKHBvcnQpICYgKH5HRU1URUtfTlMpKSAhPSAoMHgxNyB8ICgxIDw8IChpICsgNSkpKSkgewotCQkJc3Bpbl91bmxvY2soJmxvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZndC0+bG9jayk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAlvdXRiX3AocSA+PiA1LCBwb3J0KTsJLyogV3JpdGUgYnVzIGNvbnRlbnRzIGJhY2suICovCiAJdWRlbGF5KFNIT1JUX0RFTEFZKTsKIAotCXNwaW5fdW5sb2NrKCZsb2NrKTsKLQl2ZXJpZmllZCA9IHBvcnQ7CisJbXV0ZXhfdW5sb2NrKCZndC0+bG9jayk7CisJZ3QtPnZlcmlmaWVkID0gcG9ydDsKIAogCXJldHVybiAxOwogfQpAQCAtMzMyLDgzICszMzQsNjEgQEAKIC8qCiAgKiBBdXRvbWF0aWMgcHJvYmluZyBmb3IgY2FyZC4KICAqLwotc3RhdGljIGludCBnZW10ZWtfcHJvYmUodm9pZCkKK3N0YXRpYyBpbnQgZ2VtdGVrX3Byb2JlKHN0cnVjdCBnZW10ZWsgKmd0KQogeworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmZ3QtPnY0bDJfZGV2OwogCWludCBpb3BvcnRzW10gPSB7IDB4MjBjLCAweDMwYywgMHgyNGMsIDB4MzRjLCAweDI0OCwgMHgyOGMgfTsKIAlpbnQgaTsKIAogCWlmICghcHJvYmUpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQXV0b21hdGljIGRldmljZSBwcm9iaW5nIGRpc2FibGVkLlxuIik7CisJCXY0bDJfaW5mbyh2NGwyX2RldiwgIkF1dG9tYXRpYyBkZXZpY2UgcHJvYmluZyBkaXNhYmxlZC5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiQXV0b21hdGljIGRldmljZSBwcm9iaW5nIGVuYWJsZWQuXG4iKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJBdXRvbWF0aWMgZGV2aWNlIHByb2JpbmcgZW5hYmxlZC5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW9wb3J0cyk7ICsraSkgewotCQlwcmludGsoS0VSTl9JTkZPICJUcnlpbmcgSS9PIHBvcnQgMHgleC4uLlxuIiwgaW9wb3J0c1tpXSk7CisJCXY0bDJfaW5mbyh2NGwyX2RldiwgIlRyeWluZyBJL08gcG9ydCAweCV4Li4uXG4iLCBpb3BvcnRzW2ldKTsKIAogCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvcG9ydHNbaV0sIDEsICJnZW10ZWstcHJvYmUiKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSS9PIHBvcnQgMHgleCBidXN5IVxuIiwKKwkJCXY0bDJfd2Fybih2NGwyX2RldiwgIkkvTyBwb3J0IDB4JXggYnVzeSFcbiIsCiAJCQkgICAgICAgaW9wb3J0c1tpXSk7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChnZW10ZWtfdmVyaWZ5KGlvcG9ydHNbaV0pKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJDYXJkIGZvdW5kIGZyb20gSS9PIHBvcnQgIgorCQlpZiAoZ2VtdGVrX3ZlcmlmeShndCwgaW9wb3J0c1tpXSkpIHsKKwkJCXY0bDJfaW5mbyh2NGwyX2RldiwgIkNhcmQgZm91bmQgZnJvbSBJL08gcG9ydCAiCiAJCQkgICAgICAgIjB4JXghXG4iLCBpb3BvcnRzW2ldKTsKIAogCQkJcmVsZWFzZV9yZWdpb24oaW9wb3J0c1tpXSwgMSk7Ci0KLQkJCWlvID0gaW9wb3J0c1tpXTsKLQkJCXJldHVybiBpbzsKKwkJCWd0LT5pbyA9IGlvcG9ydHNbaV07CisJCQlyZXR1cm4gZ3QtPmlvOwogCQl9CiAKIAkJcmVsZWFzZV9yZWdpb24oaW9wb3J0c1tpXSwgMSk7CiAJfQogCi0JcHJpbnRrKEtFUk5fRVJSICJBdXRvbWF0aWMgcHJvYmluZyBmYWlsZWQhXG4iKTsKLQorCXY0bDJfZXJyKHY0bDJfZGV2LCAiQXV0b21hdGljIHByb2JpbmcgZmFpbGVkIVxuIik7CiAJcmV0dXJuIC0xOwogfQogCiAvKgogICogVmlkZW8gNCBMaW51eCBzdHVmZi4KICAqLwotCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7Ci0JewotCQkuaWQgPSBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkubmFtZSA9ICJNdXRlIiwKLQkJLm1pbmltdW0gPSAwLAotCQkubWF4aW11bSA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMSwKLQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCX0sIHsKLQkJLmlkID0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAotCQkubmFtZSA9ICJWb2x1bWUiLAotCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gNjU1MzUsCi0JCS5zdGVwID0gNjU1MzUsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMHhmZiwKLQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgZ2VtdGVrX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBnZW10ZWtfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmaW5fdXNlKSA/IC1FQlVTWSA6IDA7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2VtdGVrX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBnZW10ZWtfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQljbGVhcl9iaXQoMCwgJmluX3VzZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgZ2VtdGVrX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IGdlbXRla19leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZQk9IGdlbXRla19leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbgkJPSBnZW10ZWtfb3BlbiwKKwkucmVsZWFzZQk9IGdlbXRla19yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiB9OwogCkBAIC00MTcsMjMgKzM5NywyNSBAQAogewogCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tZ2VtdGVrIiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIkdlbVRlayIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIklTQSIpOworCXN0cmxjcHkodi0+YnVzX2luZm8sICJJU0EiLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKIAl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKLQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKKwlzdHJ1Y3QgZ2VtdGVrICpndCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJdi0+cmFuZ2Vsb3cgPSBHRU1URUtfTE9XRlJFUTsKIAl2LT5yYW5nZWhpZ2ggPSBHRU1URUtfSElHSEZSRVE7CiAJdi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVyB8IFY0TDJfVFVORVJfQ0FQX1NURVJFTzsKLQl2LT5zaWduYWwgPSAweGZmZmYgKiBnZW10ZWtfZ2V0c2lnc3RyKCk7CisJdi0+c2lnbmFsID0gMHhmZmZmICogZ2VtdGVrX2dldHNpZ3N0cihndCk7CiAJaWYgKHYtPnNpZ25hbCkgewogCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAkJdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKQEAgLTQ0MSw2NSArNDIzLDU2IEBACiAJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKIAkJdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCisJcmV0dXJuICh2LT5pbmRleCAhPSAwKSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3QgZ2VtdGVrICpndCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlpZiAoZi0+dHVuZXIgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CisJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJZi0+ZnJlcXVlbmN5ID0gZ3QtPmxhc3RmcmVxOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICAgIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgZ2VtdGVrX2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBnZW10ZWsgKmd0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotCWdlbXRla19zZXRmcmVxKHJ0LCBmLT5mcmVxdWVuY3kpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJICAgICAgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQotewotCXN0cnVjdCBnZW10ZWtfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLQlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQlmLT5mcmVxdWVuY3kgPSBydC0+bGFzdGZyZXE7CisJaWYgKGYtPnR1bmVyICE9IDAgfHwgZi0+dHlwZSAhPSBWNEwyX1RVTkVSX1JBRElPKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlnZW10ZWtfc2V0ZnJlcShndCwgZi0+ZnJlcXVlbmN5KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7ICsraSkgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwgc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAwKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBnZW10ZWtfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGdlbXRlayAqZ3QgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJY3RybC0+dmFsdWUgPSBydC0+bXV0ZWQ7Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQlpZiAocnQtPm11dGVkKQotCQkJY3RybC0+dmFsdWUgPSAwOwotCQllbHNlCi0JCQljdHJsLT52YWx1ZSA9IDY1NTM1OworCQljdHJsLT52YWx1ZSA9IGd0LT5tdXRlZDsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwpAQCAtNTA4LDM1ICs0ODEsMTkgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBnZW10ZWtfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGdlbXRlayAqZ3QgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKIAkJaWYgKGN0cmwtPnZhbHVlKQotCQkJZ2VtdGVrX211dGUocnQpOworCQkJZ2VtdGVrX211dGUoZ3QpOwogCQllbHNlCi0JCQlnZW10ZWtfdW5tdXRlKHJ0KTsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCWlmIChjdHJsLT52YWx1ZSkKLQkJCWdlbXRla191bm11dGUocnQpOwotCQllbHNlCi0JCQlnZW10ZWtfbXV0ZShydCk7CisJCQlnZW10ZWtfdW5tdXRlKGd0KTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoYS0+aW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKLQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCiB7CiAJKmkgPSAwOwpAQCAtNTQ1LDE2ICs1MDIsMjAgQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIChpICE9IDApID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWEtPmluZGV4ID0gMDsKKwlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYXVkaW8gKmEpCiB7Ci0JaWYgKGEtPmluZGV4ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOworCXJldHVybiAoYS0+aW5kZXggIT0gMCkgPyAtRUlOVkFMIDogMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBnZW10ZWtfaW9jdGxfb3BzID0gewpAQCAtNTcyLDYyICs1MzMsNzMgQEAKIAkudmlkaW9jX3NfY3RybAkJPSB2aWRpb2Nfc19jdHJsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBnZW10ZWtfcmFkaW8gPSB7Ci0JLm5hbWUJCT0gIkdlbVRlayBSYWRpbyBjYXJkIiwKLQkuZm9wcwkJPSAmZ2VtdGVrX2ZvcHMsCi0JLmlvY3RsX29wcyAJPSAmZ2VtdGVrX2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQogLyoKICAqIEluaXRpYWxpemF0aW9uIC8gY2xlYW51cCByZWxhdGVkIHN0dWZmLgogICovCiAKLS8qCi0gKiBJbml0aWxpemUgY2FyZC4KLSAqLwogc3RhdGljIGludCBfX2luaXQgZ2VtdGVrX2luaXQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPIFJBRElPX0JBTk5FUiAiXG4iKTsKKwlzdHJ1Y3QgZ2VtdGVrICpndCA9ICZnZW10ZWtfY2FyZDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJmd0LT52NGwyX2RldjsKKwlpbnQgcmVzOwogCi0Jc3Bpbl9sb2NrX2luaXQoJmxvY2spOworCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJnZW10ZWsiLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKIAotCWdlbXRla19wcm9iZSgpOwotCWlmIChpbykgewotCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLCAxLCAiZ2VtdGVrIikpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiSS9PIHBvcnQgMHgleCBhbHJlYWR5IGluIHVzZS5cbiIsIGlvKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJHZW1UZWsgUmFkaW8gY2FyZCBkcml2ZXI6IHYwLjAuM1xuIik7CisKKwltdXRleF9pbml0KCZndC0+bG9jayk7CisKKwlndC0+dmVyaWZpZWQgPSAtMTsKKwlndC0+aW8gPSBpbzsKKwlnZW10ZWtfcHJvYmUoZ3QpOworCWlmIChndC0+aW8pIHsKKwkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihndC0+aW8sIDEsICJnZW10ZWsiKSkgeworCQkJdjRsMl9lcnIodjRsMl9kZXYsICJJL08gcG9ydCAweCV4IGFscmVhZHkgaW4gdXNlLlxuIiwgZ3QtPmlvKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAotCQlpZiAoIWdlbXRla192ZXJpZnkoaW8pKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FyZCBhdCBJL08gcG9ydCAweCV4IGRvZXMgbm90ICIKKwkJaWYgKCFnZW10ZWtfdmVyaWZ5KGd0LCBndC0+aW8pKQorCQkJdjRsMl93YXJuKHY0bDJfZGV2LCAiQ2FyZCBhdCBJL08gcG9ydCAweCV4IGRvZXMgbm90ICIKIAkJCSAgICAgICAicmVzcG9uZCBwcm9wZXJseSwgY2hlY2sgeW91ciAiCi0JCQkgICAgICAgImNvbmZpZ3VyYXRpb24uXG4iLCBpbyk7CisJCQkgICAgICAgImNvbmZpZ3VyYXRpb24uXG4iLCBndC0+aW8pOwogCQllbHNlCi0JCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyBJL08gcG9ydCAweCV4LlxuIiwgaW8pOworCQkJdjRsMl9pbmZvKHY0bDJfZGV2LCAiVXNpbmcgSS9PIHBvcnQgMHgleC5cbiIsIGd0LT5pbyk7CiAJfSBlbHNlIGlmIChwcm9iZSkgewotCQlwcmludGsoS0VSTl9FUlIgIkF1dG9tYXRpYyBwcm9iaW5nIGZhaWxlZCBhbmQgbm8gIgorCQl2NGwyX2Vycih2NGwyX2RldiwgIkF1dG9tYXRpYyBwcm9iaW5nIGZhaWxlZCBhbmQgbm8gIgogCQkgICAgICAgImZpeGVkIEkvTyBwb3J0IGRlZmluZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJBdXRvbWF0aWMgcHJvYmluZyBkaXNhYmxlZCBidXQgbm8gZml4ZWQgIgorCQl2NGwyX2Vycih2NGwyX2RldiwgIkF1dG9tYXRpYyBwcm9iaW5nIGRpc2FibGVkIGJ1dCBubyBmaXhlZCAiCiAJCSAgICAgICAiSS9PIHBvcnQgZGVmaW5lZC4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JdmlkZW9fc2V0X2RydmRhdGEoJmdlbXRla19yYWRpbywgJmdlbXRla191bml0KTsKKwlyZXMgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCB2NGwyX2Rldik7CisJaWYgKHJlcyA8IDApIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOworCQlyZWxlYXNlX3JlZ2lvbihndC0+aW8sIDEpOworCQlyZXR1cm4gcmVzOworCX0KIAotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmdlbXRla19yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJcmVsZWFzZV9yZWdpb24oaW8sIDEpOworCXN0cmxjcHkoZ3QtPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZihndC0+dmRldi5uYW1lKSk7CisJZ3QtPnZkZXYudjRsMl9kZXYgPSB2NGwyX2RldjsKKwlndC0+dmRldi5mb3BzID0gJmdlbXRla19mb3BzOworCWd0LT52ZGV2LmlvY3RsX29wcyA9ICZnZW10ZWtfaW9jdGxfb3BzOworCWd0LT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmZ3QtPnZkZXYsIGd0KTsKKworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmd0LT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgeworCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKKwkJcmVsZWFzZV9yZWdpb24oZ3QtPmlvLCAxKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAkvKiBTZXQgZGVmYXVsdHMgKi8KLQlnZW10ZWtfdW5pdC5sYXN0ZnJlcSA9IEdFTVRFS19MT1dGUkVROwotCWdlbXRla191bml0LmJ1MjYxNGRhdGEgPSAwOworCWd0LT5sYXN0ZnJlcSA9IEdFTVRFS19MT1dGUkVROworCWd0LT5idTI2MTRkYXRhID0gMDsKIAogCWlmIChpbml0bXV0ZSkKLQkJZ2VtdGVrX211dGUoJmdlbXRla191bml0KTsKKwkJZ2VtdGVrX211dGUoZ3QpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02MzcsMTUgKzYwOSwxOSBAQAogICovCiBzdGF0aWMgdm9pZCBfX2V4aXQgZ2VtdGVrX2V4aXQodm9pZCkKIHsKKwlzdHJ1Y3QgZ2VtdGVrICpndCA9ICZnZW10ZWtfY2FyZDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJmd0LT52NGwyX2RldjsKKwogCWlmIChzaHV0ZG93bikgewogCQloYXJkbXV0ZSA9IDE7CS8qIFR1cm4gb2ZmIFBMTCAqLwotCQlnZW10ZWtfbXV0ZSgmZ2VtdGVrX3VuaXQpOworCQlnZW10ZWtfbXV0ZShndCk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTW9kdWxlIHVubG9hZGVkIGJ1dCBjYXJkIG5vdCBtdXRlZCFcbiIpOworCQl2NGwyX2luZm8odjRsMl9kZXYsICJNb2R1bGUgdW5sb2FkZWQgYnV0IGNhcmQgbm90IG11dGVkIVxuIik7CiAJfQogCi0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmdlbXRla19yYWRpbyk7Ci0JcmVsZWFzZV9yZWdpb24oaW8sIDEpOworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZndC0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZ3QtPnY0bDJfZGV2KTsKKwlyZWxlYXNlX3JlZ2lvbihndC0+aW8sIDEpOwogfQogCiBtb2R1bGVfaW5pdChnZW10ZWtfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1hZXN0cm8uYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWFlc3Ryby5jCmluZGV4IGJhM2ExM2EuLjAxYTZkMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWFlc3Ryby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWFlc3Ryby5jCkBAIC0yMiwyNyArMjIsMjIgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDAsNikKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjAuMDYiCitNT0RVTEVfQVVUSE9SKCJBZGFtIFRsYWxrYSwgYXRsa2FAcGcuZ2RhLnBsIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJhZGlvIGRyaXZlciBmb3IgdGhlIE1hZXN0cm8gUENJIHNvdW5kIGNhcmQgcmFkaW8uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKLQl7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9Ci19Oworc3RhdGljIGludCByYWRpb19uciA9IC0xOworbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOworCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgNikKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjAuMDYiCiAKICNkZWZpbmUgR1BJT19EQVRBCTB4NjAgICAvKiBwb3J0IG9mZnNldCBmcm9tIEVTU19JT19CQVNFICovCiAKQEAgLTcyLDYyICs2NywyNyBAQAogCiAjZGVmaW5lIEJJVFMyRlJFUSh4KQkoKHgpICogRlJFUV9TVEVQIC0gRlJFUV9JRikKIAotc3RhdGljIGludCByYWRpb19uciA9IC0xOwotbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOworc3RydWN0IG1hZXN0cm8geworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJc3RydWN0IG11dGV4IGxvY2s7CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGluX3VzZTsKKwl1MTYJaW87CS8qIGJhc2Ugb2YgTWFlc3RybyBjYXJkIHJhZGlvIGlvIChHUElPX0RBVEEpKi8KKwl1MTYJbXV0ZWQ7CS8qIFZJREVPX0FVRElPX01VVEUgKi8KKwl1MTYJc3RlcmVvOwkvKiBWSURFT19UVU5FUl9TVEVSRU9fT04gKi8KKwl1MTYJdHVuZWQ7CS8qIHNpZ25hbCBzdHJlbmd0aCAoMCBvciAweGZmZmYpICovCit9OwogCi1zdGF0aWMgaW50IG1hZXN0cm9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwotCi1zdGF0aWMgaW50IG1hZXN0cm9fZXhjbHVzaXZlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtYWVzdHJvICp0b19tYWVzdHJvKHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCiB7Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmluX3VzZSkgPyAtRUJVU1kgOiAwOworCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBtYWVzdHJvLCB2NGwyX2Rldik7CiB9CiAKLXN0YXRpYyBpbnQgbWFlc3Ryb19leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyB1MzIgcmFkaW9fYml0c19nZXQoc3RydWN0IG1hZXN0cm8gKmRldikKIHsKLQljbGVhcl9iaXQoMCwgJmluX3VzZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG1hZXN0cm9fcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKLQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1hZXN0cm9fcl9wY2lfdGJsW10gPSB7Ci0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfRVNTLCBQQ0lfREVWSUNFX0lEX0VTU19FU1MxOTY4KSwKLQkJLmNsYXNzID0gUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwKLQkJLmNsYXNzX21hc2sgPSAweGZmZmYwMCB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0VTUywgUENJX0RFVklDRV9JRF9FU1NfRVNTMTk3OCksCi0JCS5jbGFzcyA9IFBDSV9DTEFTU19NVUxUSU1FRElBX0FVRElPIDw8IDgsCi0JCS5jbGFzc19tYXNrID0gMHhmZmZmMDAgfSwKLQl7IDAgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBtYWVzdHJvX3JfcGNpX3RibCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYWVzdHJvX3JfZHJpdmVyID0gewotCS5uYW1lCQk9ICJtYWVzdHJvX3JhZGlvIiwKLQkuaWRfdGFibGUJPSBtYWVzdHJvX3JfcGNpX3RibCwKLQkucHJvYmUJCT0gbWFlc3Ryb19wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1hZXN0cm9fcmVtb3ZlKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgbWFlc3Ryb19mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSBtYWVzdHJvX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IG1hZXN0cm9fZXhjbHVzaXZlX3JlbGVhc2UsCi0JLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKLX07Ci0KLXN0cnVjdCByYWRpb19kZXZpY2UgewotCXUxNglpbywJLyogYmFzZSBvZiBNYWVzdHJvIGNhcmQgcmFkaW8gaW8gKEdQSU9fREFUQSkqLwotCQltdXRlZCwJLyogVklERU9fQVVESU9fTVVURSAqLwotCQlzdGVyZW8sCS8qIFZJREVPX1RVTkVSX1NURVJFT19PTiAqLwotCQl0dW5lZDsJLyogc2lnbmFsIHN0cmVuZ3RoICgwIG9yIDB4ZmZmZikgKi8KLX07Ci0KLXN0YXRpYyB1MzIgcmFkaW9fYml0c19nZXQoc3RydWN0IHJhZGlvX2RldmljZSAqZGV2KQotewotCXJlZ2lzdGVyIHUxNiBpbz1kZXYtPmlvLCBsLCByZGF0YTsKLQlyZWdpc3RlciB1MzIgZGF0YT0wOworCXUxNiBpbyA9IGRldi0+aW8sIGwsIHJkYXRhOworCXUzMiBkYXRhID0gMDsKIAl1MTYgb21hc2s7CiAKIAlvbWFzayA9IGludyhpbyArIElPX01BU0spOwpAQCAtMTM1LDI1ICs5NSwyMyBAQAogCW91dHcoMCwgaW8pOwogCXVkZWxheSgxNik7CiAKLQlmb3IgKGw9MjQ7bC0tOykgeworCWZvciAobCA9IDI0OyBsLS07KSB7CiAJCW91dHcoU1RSX0NMSywgaW8pOwkJLyogSEkgc3RhdGUgKi8KIAkJdWRlbGF5KDIpOwotCQlpZighbCkKKwkJaWYgKCFsKQogCQkJZGV2LT50dW5lZCA9IGludyhpbykgJiBTVFJfTU9TVCA/IDAgOiAweGZmZmY7CiAJCW91dHcoMCwgaW8pOwkJCS8qIExPIHN0YXRlICovCiAJCXVkZWxheSgyKTsKIAkJZGF0YSA8PD0gMTsJCQkvKiBzaGlmdCBkYXRhICovCiAJCXJkYXRhID0gaW53KGlvKTsKLQkJaWYoIWwpCi0JCQlkZXYtPnN0ZXJlbyA9ICByZGF0YSAmIFNUUl9NT1NUID8KLQkJCTAgOiAxOwotCQllbHNlCi0JCQlpZihyZGF0YSAmIFNUUl9EQVRBKQotCQkJCWRhdGErKzsKKwkJaWYgKCFsKQorCQkJZGV2LT5zdGVyZW8gPSAocmRhdGEgJiBTVFJfTU9TVCkgPyAgMCA6IDE7CisJCWVsc2UgaWYgKHJkYXRhICYgU1RSX0RBVEEpCisJCQlkYXRhKys7CiAJCXVkZWxheSgyKTsKIAl9CiAKLQlpZihkZXYtPm11dGVkKQorCWlmIChkZXYtPm11dGVkKQogCQlvdXR3KFNUUl9XUkVOLCBpbyk7CiAKIAl1ZGVsYXkoNCk7CkBAIC0xNjIsMTggKzEyMCwxOCBAQAogCXJldHVybiBkYXRhICYgMHgzZmZlOwogfQogCi1zdGF0aWMgdm9pZCByYWRpb19iaXRzX3NldChzdHJ1Y3QgcmFkaW9fZGV2aWNlICpkZXYsIHUzMiBkYXRhKQorc3RhdGljIHZvaWQgcmFkaW9fYml0c19zZXQoc3RydWN0IG1hZXN0cm8gKmRldiwgdTMyIGRhdGEpCiB7Ci0JcmVnaXN0ZXIgdTE2IGlvPWRldi0+aW8sIGwsIGJpdHM7CisJdTE2IGlvID0gZGV2LT5pbywgbCwgYml0czsKIAl1MTYgb21hc2ssIG9kaXI7CiAKIAlvbWFzayA9IGludyhpbyArIElPX01BU0spOwotCW9kaXIgID0gKGludyhpbyArIElPX0RJUikgJiB+U1RSX0RBVEEpIHwgKFNUUl9DTEsgfCBTVFJfV1JFTik7CisJb2RpciA9IChpbncoaW8gKyBJT19ESVIpICYgflNUUl9EQVRBKSB8IChTVFJfQ0xLIHwgU1RSX1dSRU4pOwogCW91dHcob2RpciB8IFNUUl9EQVRBLCBpbyArIElPX0RJUik7CiAJb3V0dyh+KFNUUl9EQVRBIHwgU1RSX0NMSyB8IFNUUl9XUkVOKSwgaW8gKyBJT19NQVNLKTsKIAl1ZGVsYXkoMTYpOwotCWZvciAobD0yNTtsO2wtLSkgewotCQliaXRzID0gKChkYXRhID4+IDE4KSAmIFNUUl9EQVRBKSB8IFNUUl9XUkVOIDsKKwlmb3IgKGwgPSAyNTsgbDsgbC0tKSB7CisJCWJpdHMgPSAoKGRhdGEgPj4gMTgpICYgU1RSX0RBVEEpIHwgU1RSX1dSRU47CiAJCWRhdGEgPDw9IDE7CQkJLyogc2hpZnQgZGF0YSAqLwogCQlvdXR3KGJpdHMsIGlvKTsJCQkvKiBzdGFydCBzdHJvYmUgKi8KIAkJdWRlbGF5KDIpOwpAQCAtMTgzLDcgKzE0MSw3IEBACiAJCXVkZWxheSg0KTsKIAl9CiAKLQlpZighZGV2LT5tdXRlZCkKKwlpZiAoIWRldi0+bXV0ZWQpCiAJCW91dHcoMCwgaW8pOwogCiAJdWRlbGF5KDQpOwpAQCAtMTk1LDc4ICsxNTMsNzkgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdikKIHsKKwlzdHJ1Y3QgbWFlc3RybyAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwogCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tbWFlc3RybyIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJNYWVzdHJvIFJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiUENJIik7CisJc25wcmludGYodi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbyksICJQQ0k6JXMiLCBwY2lfbmFtZShkZXYtPnBkZXYpKTsKIAl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKLQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgbWFlc3RybyAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JKHZvaWQpcmFkaW9fYml0c19nZXQoY2FyZCk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlyYWRpb19iaXRzX2dldChkZXYpOwogCi0Jc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAl2LT5yYW5nZWxvdyA9IEZSRVFfTE87CiAJdi0+cmFuZ2VoaWdoID0gRlJFUV9ISTsKLQl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OT3xWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8gfCBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CiAJdi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKLQlpZihjYXJkLT5zdGVyZW8pCisJaWYgKGRldi0+c3RlcmVvKQogCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAllbHNlCiAJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKLQl2LT5zaWduYWwgPSBjYXJkLT50dW5lZDsKKwl2LT5zaWduYWwgPSBkZXYtPnR1bmVkOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0JaWYgKHYtPmluZGV4ID4gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHYtPmluZGV4ID8gLUVJTlZBTCA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IG1hZXN0cm8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAoZi0+ZnJlcXVlbmN5IDwgRlJFUV9MTyB8fCBmLT5mcmVxdWVuY3kgPiBGUkVRX0hJKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyYWRpb19iaXRzX3NldChjYXJkLCBGUkVRMkJJVFMoZi0+ZnJlcXVlbmN5KSk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlyYWRpb19iaXRzX3NldChkZXYsIEZSRVEyQklUUyhmLT5mcmVxdWVuY3kpKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IG1hZXN0cm8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQlmLT5mcmVxdWVuY3kgPSBCSVRTMkZSRVEocmFkaW9fYml0c19nZXQoY2FyZCkpOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJZi0+ZnJlcXVlbmN5ID0gQklUUzJGUkVRKHJhZGlvX2JpdHNfZ2V0KGRldikpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKLQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKLQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCi0JCQkJCQlzaXplb2YoKnFjKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTI3NCwxMSArMjMzLDExIEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IG1hZXN0cm8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQljdHJsLT52YWx1ZSA9IGNhcmQtPm11dGVkOworCQljdHJsLT52YWx1ZSA9IGRldi0+bXV0ZWQ7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTI4NywzNCArMjQ2LDI2IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JcmVnaXN0ZXIgdTE2IGlvID0gY2FyZC0+aW87Ci0JcmVnaXN0ZXIgdTE2IG9tYXNrID0gaW53KGlvICsgSU9fTUFTSyk7CisJc3RydWN0IG1hZXN0cm8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJdTE2IGlvID0gZGV2LT5pbzsKKwl1MTYgb21hc2s7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCQlvbWFzayA9IGludyhpbyArIElPX01BU0spOwogCQlvdXR3KH5TVFJfV1JFTiwgaW8gKyBJT19NQVNLKTsKLQkJb3V0dygoY2FyZC0+bXV0ZWQgPSBjdHJsLT52YWx1ZSApID8KLQkJCQlTVFJfV1JFTiA6IDAsIGlvKTsKKwkJZGV2LT5tdXRlZCA9IGN0cmwtPnZhbHVlOworCQlvdXR3KGRldi0+bXV0ZWQgPyBTVFJfV1JFTiA6IDAsIGlvKTsKIAkJdWRlbGF5KDQpOwogCQlvdXR3KG9tYXNrLCBpbyArIElPX01BU0spOwogCQltc2xlZXAoMTI1KTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWlmIChhLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKIHsKIAkqaSA9IDA7CkBAIC0zMjMsMjAgKzI3NCw1NyBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCA9IDA7CisJc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCBtYWVzdHJvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MTYgX19kZXZpbml0IHJhZGlvX3Bvd2VyX29uKHN0cnVjdCByYWRpb19kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbWFlc3Ryb19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIG1hZXN0cm9fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgICAgICAgID0gbWFlc3Ryb19vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IG1hZXN0cm9fcmVsZWFzZSwKKwkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBtYWVzdHJvX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwICAgID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZ190dW5lciAgICAgPSB2aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIgICAgID0gdmlkaW9jX3NfdHVuZXIsCisJLnZpZGlvY19nX2F1ZGlvICAgICA9IHZpZGlvY19nX2F1ZGlvLAorCS52aWRpb2Nfc19hdWRpbyAgICAgPSB2aWRpb2Nfc19hdWRpbywKKwkudmlkaW9jX2dfaW5wdXQgICAgID0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0ICAgICA9IHZpZGlvY19zX2lucHV0LAorCS52aWRpb2NfZ19mcmVxdWVuY3kgPSB2aWRpb2NfZ19mcmVxdWVuY3ksCisJLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3F1ZXJ5Y3RybCAgID0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybCAgICAgID0gdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCAgICAgID0gdmlkaW9jX3NfY3RybCwKK307CisKK3N0YXRpYyB1MTYgX19kZXZpbml0IHJhZGlvX3Bvd2VyX29uKHN0cnVjdCBtYWVzdHJvICpkZXYpCiB7CiAJcmVnaXN0ZXIgdTE2IGlvID0gZGV2LT5pbzsKIAlyZWdpc3RlciB1MzIgb2ZyZXE7CkBAIC0zNjAsMzMgKzM0OCwxMSBAQAogCXJldHVybiAob2ZyZXEgPT0gcmFkaW9fYml0c19nZXQoZGV2KSk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgbWFlc3Ryb19pb2N0bF9vcHMgPSB7Ci0JLnZpZGlvY19xdWVyeWNhcCAgICA9IHZpZGlvY19xdWVyeWNhcCwKLQkudmlkaW9jX2dfdHVuZXIgICAgID0gdmlkaW9jX2dfdHVuZXIsCi0JLnZpZGlvY19zX3R1bmVyICAgICA9IHZpZGlvY19zX3R1bmVyLAotCS52aWRpb2NfZ19hdWRpbyAgICAgPSB2aWRpb2NfZ19hdWRpbywKLQkudmlkaW9jX3NfYXVkaW8gICAgID0gdmlkaW9jX3NfYXVkaW8sCi0JLnZpZGlvY19nX2lucHV0ICAgICA9IHZpZGlvY19nX2lucHV0LAotCS52aWRpb2Nfc19pbnB1dCAgICAgPSB2aWRpb2Nfc19pbnB1dCwKLQkudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5LAotCS52aWRpb2Nfc19mcmVxdWVuY3kgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCi0JLnZpZGlvY19xdWVyeWN0cmwgICA9IHZpZGlvY19xdWVyeWN0cmwsCi0JLnZpZGlvY19nX2N0cmwgICAgICA9IHZpZGlvY19nX2N0cmwsCi0JLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCi19OwotCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBtYWVzdHJvX3JhZGlvID0gewotCS5uYW1lICAgICAgICAgICA9ICJNYWVzdHJvIHJhZGlvIiwKLQkuZm9wcyAgICAgICAgICAgPSAmbWFlc3Ryb19mb3BzLAotCS5pb2N0bF9vcHMgCT0gJm1hZXN0cm9faW9jdGxfb3BzLAotCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCi19OwotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtYWVzdHJvX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqcmFkaW9fdW5pdDsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICptYWVzdHJvX3JhZGlvX2luc3Q7CisJc3RydWN0IG1hZXN0cm8gKmRldjsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2OwogCWludCByZXR2YWw7CiAKIAlyZXR2YWwgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKQEAgLTM5Nyw0NiArMzYzLDUzIEBACiAKIAlyZXR2YWwgPSAtRU5PTUVNOwogCi0JcmFkaW9fdW5pdCA9IGt6YWxsb2Moc2l6ZW9mKCpyYWRpb191bml0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJhZGlvX3VuaXQgPT0gTlVMTCkgeworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGV2ID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAibm90IGVub3VnaCBtZW1vcnlcbiIpOwogCQlnb3RvIGVycjsKIAl9CiAKLQlyYWRpb191bml0LT5pbyA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSArIEdQSU9fREFUQTsKKwl2NGwyX2RldiA9ICZkZXYtPnY0bDJfZGV2OworCW11dGV4X2luaXQoJmRldi0+bG9jayk7CisJZGV2LT5wZGV2ID0gcGRldjsKIAotCW1hZXN0cm9fcmFkaW9faW5zdCA9IHZpZGVvX2RldmljZV9hbGxvYygpOwotCWlmIChtYWVzdHJvX3JhZGlvX2luc3QgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJub3QgZW5vdWdoIG1lbW9yeVxuIik7CisJc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgIm1hZXN0cm8iLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKKworCXJldHZhbCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsIHY0bDJfZGV2KTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgIkNvdWxkIG5vdCByZWdpc3RlciB2NGwyX2RldmljZVxuIik7CiAJCWdvdG8gZXJyZnI7CiAJfQogCi0JbWVtY3B5KG1hZXN0cm9fcmFkaW9faW5zdCwgJm1hZXN0cm9fcmFkaW8sIHNpemVvZihtYWVzdHJvX3JhZGlvKSk7Ci0JdmlkZW9fc2V0X2RydmRhdGEobWFlc3Ryb19yYWRpb19pbnN0LCByYWRpb191bml0KTsKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgbWFlc3Ryb19yYWRpb19pbnN0KTsKKwlkZXYtPmlvID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApICsgR1BJT19EQVRBOwogCi0JcmV0dmFsID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKG1hZXN0cm9fcmFkaW9faW5zdCwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKTsKKwlzdHJsY3B5KGRldi0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKGRldi0+dmRldi5uYW1lKSk7CisJZGV2LT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJZGV2LT52ZGV2LmZvcHMgPSAmbWFlc3Ryb19mb3BzOworCWRldi0+dmRldi5pb2N0bF9vcHMgPSAmbWFlc3Ryb19pb2N0bF9vcHM7CisJZGV2LT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmZGV2LT52ZGV2LCBkZXYpOworCisJcmV0dmFsID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnZkZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucik7CiAJaWYgKHJldHZhbCkgewotCQlwcmludGsoS0VSTl9FUlIgImNhbid0IHJlZ2lzdGVyIHZpZGVvIGRldmljZSFcbiIpOworCQl2NGwyX2Vycih2NGwyX2RldiwgImNhbid0IHJlZ2lzdGVyIHZpZGVvIGRldmljZSFcbiIpOwogCQlnb3RvIGVycmZyMTsKIAl9CiAKLQlpZiAoIXJhZGlvX3Bvd2VyX29uKHJhZGlvX3VuaXQpKSB7CisJaWYgKCFyYWRpb19wb3dlcl9vbihkZXYpKSB7CiAJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gZXJydW5yOwogCX0KIAotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ2ZXJzaW9uICIgRFJJVkVSX1ZFUlNJT04gIiB0aW1lICIgX19USU1FX18gIiAgIgotCQkgX19EQVRFX18gIlxuIik7Ci0JZGV2X2luZm8oJnBkZXYtPmRldiwgInJhZGlvIGNoaXAgaW5pdGlhbGl6ZWRcbiIpOworCXY0bDJfaW5mbyh2NGwyX2RldiwgInZlcnNpb24gIiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKIAogCXJldHVybiAwOwogZXJydW5yOgotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKG1hZXN0cm9fcmFkaW9faW5zdCk7CisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldik7CiBlcnJmcjE6Ci0JdmlkZW9fZGV2aWNlX3JlbGVhc2UobWFlc3Ryb19yYWRpb19pbnN0KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKIGVycmZyOgotCWtmcmVlKHJhZGlvX3VuaXQpOworCWtmcmVlKGRldik7CiBlcnI6CiAJcmV0dXJuIHJldHZhbDsKIApAQCAtNDQ0LDExICs0MTcsMzEgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IG1hZXN0cm9fcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgbWFlc3RybyAqZGV2ID0gdG9fbWFlc3Rybyh2NGwyX2Rldik7CiAKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh2ZGV2KTsKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKIH0KIAorc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1hZXN0cm9fcl9wY2lfdGJsW10gPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfRVNTLCBQQ0lfREVWSUNFX0lEX0VTU19FU1MxOTY4KSwKKwkJLmNsYXNzID0gUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwKKwkJLmNsYXNzX21hc2sgPSAweGZmZmYwMCB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0VTUywgUENJX0RFVklDRV9JRF9FU1NfRVNTMTk3OCksCisJCS5jbGFzcyA9IFBDSV9DTEFTU19NVUxUSU1FRElBX0FVRElPIDw8IDgsCisJCS5jbGFzc19tYXNrID0gMHhmZmZmMDAgfSwKKwl7IDAgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBtYWVzdHJvX3JfcGNpX3RibCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYWVzdHJvX3JfZHJpdmVyID0geworCS5uYW1lCQk9ICJtYWVzdHJvX3JhZGlvIiwKKwkuaWRfdGFibGUJPSBtYWVzdHJvX3JfcGNpX3RibCwKKwkucHJvYmUJCT0gbWFlc3Ryb19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1hZXN0cm9fcmVtb3ZlKSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IG1hZXN0cm9fcmFkaW9faW5pdCh2b2lkKQogewogCWludCByZXR2YWwgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZtYWVzdHJvX3JfZHJpdmVyKTsKQEAgLTQ2Niw3ICs0NTksMyBAQAogCiBtb2R1bGVfaW5pdChtYWVzdHJvX3JhZGlvX2luaXQpOwogbW9kdWxlX2V4aXQobWFlc3Ryb19yYWRpb19leGl0KTsKLQotTU9EVUxFX0FVVEhPUigiQWRhbSBUbGFsa2EsIGF0bGthQHBnLmdkYS5wbCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJSYWRpbyBkcml2ZXIgZm9yIHRoZSBNYWVzdHJvIFBDSSBzb3VuZCBjYXJkIHJhZGlvLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYXhpcmFkaW8uYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWF4aXJhZGlvLmMKaW5kZXggYzVkYzAwYS4uMjYwNmYwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYXhpcmFkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1heGlyYWRpby5jCkBAIC0zNywzOCArMzcsMzIgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAorTU9EVUxFX0FVVEhPUigiRGltaXRyb21hbm9sYWtpcyBBcG9zdG9sb3MsIGFwZGltQGdyZWNpYW4ubmV0Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJhZGlvIGRyaXZlciBmb3IgdGhlIEd1aWxsZW1vdCBNYXhpIFJhZGlvIEZNMjAwMCByYWRpby4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCByYWRpb19uciA9IC0xOworbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOworCitzdGF0aWMgaW50IGRlYnVnOworCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiYWN0aXZhdGVzIGRlYnVnIGluZm8iKTsKKwogI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMC43NyIKIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCw3LDcpCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgNywgNykKIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgbWF4aXJhZGlvX3JhZGlvOwotCi0jZGVmaW5lIGRwcmludGsobnVtLCBmbXQsIGFyZy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJaWYgKG1heGlyYWRpb19yYWRpby5kZWJ1ZyA+PSBudW0pICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10LCAgICAgICAgICAgICAgICAgICAgICBcCi0JCQkJbWF4aXJhZGlvX3JhZGlvLm5hbWUsICMjIGFyZyk7IH0gd2hpbGUgKDApCi0KLXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKLQl7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9Ci19OworI2RlZmluZSBkcHJpbnRrKGRldiwgbnVtLCBmbXQsIGFyZy4uLikgXAorCXY0bDJfZGJnKG51bSwgZGVidWcsICZkZXYtPnY0bDJfZGV2LCBmbXQsICMjIGFyZykKIAogI2lmbmRlZiBQQ0lfVkVORE9SX0lEX0dVSUxMRU1PVAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0dVSUxMRU1PVCAweDUwNDYKQEAgLTgwLDkwICs3NCw3MCBAQAogCiAKIC8qIFRFQTU3NTcgcGluIG1hcHBpbmdzICovCi1zdGF0aWMgY29uc3QgaW50IGNsayA9IDEsIGRhdGEgPSAyLCB3cmVuID0gNCwgbW9fc3QgPSA4LCBwb3dlciA9IDE2IDsKK3N0YXRpYyBjb25zdCBpbnQgY2xrID0gMSwgZGF0YSA9IDIsIHdyZW4gPSA0LCBtb19zdCA9IDgsIHBvd2VyID0gMTY7CiAKLXN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKLW1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5fdXNlOwotCi0jZGVmaW5lIEZSRVFfTE8JCSA1MCoxNjAwMAotI2RlZmluZSBGUkVRX0hJCQkxNTAqMTYwMDAKKyNkZWZpbmUgRlJFUV9MTwkJKDUwICogMTYwMDApCisjZGVmaW5lIEZSRVFfSEkJCSgxNTAgKiAxNjAwMCkKIAogI2RlZmluZSBGUkVRX0lGICAgICAgICAgMTcxMjAwIC8qIDEwLjcqMTYwMDAgICAqLwogI2RlZmluZSBGUkVRX1NURVAgICAgICAgMjAwICAgIC8qIDEyLjUqMTYgICAgICAqLwogCiAvKiAoeD09Zm1oeioxNioxMDAwKSAtPiBiaXRzICovCi0jZGVmaW5lIEZSRVEyQklUUyh4KQkoKCggKHVuc2lnbmVkIGludCkoeCkrRlJFUV9JRisoRlJFUV9TVEVQPDwxKSkgXAotCQkJLyhGUkVRX1NURVA8PDIpKTw8MikKKyNkZWZpbmUgRlJFUTJCSVRTKHgpIFwKKyAgKCgoKHVuc2lnbmVkIGludCkoeCkgKyBGUkVRX0lGICsgKEZSRVFfU1RFUCA8PCAxKSkgLyAoRlJFUV9TVEVQIDw8IDIpKSA8PCAyKQogCiAjZGVmaW5lIEJJVFMyRlJFUSh4KQkoKHgpICogRlJFUV9TVEVQIC0gRlJFUV9JRikKIAogCi1zdGF0aWMgaW50IG1heGlyYWRpb19leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0cnVjdCBtYXhpcmFkaW8KIHsKLQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmaW5fdXNlKSA/IC1FQlVTWSA6IDA7Ci19CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAotc3RhdGljIGludCBtYXhpcmFkaW9fZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JY2xlYXJfYml0KDAsICZpbl91c2UpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIG1heGlyYWRpb19mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSBtYXhpcmFkaW9fZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gbWF4aXJhZGlvX2V4Y2x1c2l2ZV9yZWxlYXNlLAotCS5pb2N0bCAgICAgICAgICA9IHZpZGVvX2lvY3RsMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmFkaW9fZGV2aWNlCi17Ci0JX191MTYJaW8sCS8qIGJhc2Ugb2YgcmFkaW8gaW8gKi8KLQkJbXV0ZWQsCS8qIFZJREVPX0FVRElPX01VVEUgKi8KLQkJc3RlcmVvLAkvKiBWSURFT19UVU5FUl9TVEVSRU9fT04gKi8KLQkJdHVuZWQ7CS8qIHNpZ25hbCBzdHJlbmd0aCAoMCBvciAweGZmZmYpICovCisJdTE2CWlvOwkvKiBiYXNlIG9mIHJhZGlvIGlvICovCisJdTE2CW11dGVkOwkvKiBWSURFT19BVURJT19NVVRFICovCisJdTE2CXN0ZXJlbzsJLyogVklERU9fVFVORVJfU1RFUkVPX09OICovCisJdTE2CXR1bmVkOwkvKiBzaWduYWwgc3RyZW5ndGggKDAgb3IgMHhmZmZmKSAqLwogCiAJdW5zaWduZWQgbG9uZyBmcmVxOwogCiAJc3RydWN0IG11dGV4IGxvY2s7Ci19IHJhZGlvX3VuaXQgPSB7Ci0JLm11dGVkID0xLAotCS5mcmVxID0gRlJFUV9MTywKIH07CiAKLXN0YXRpYyB2b2lkIG91dGJpdCh1bnNpZ25lZCBsb25nIGJpdCwgX191MTYgaW8pCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtYXhpcmFkaW8gKnRvX21heGlyYWRpbyhzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQogewotCWlmIChiaXQgIT0gMCkKLQkJewotCQkJb3V0YiggIHBvd2VyfHdyZW58ZGF0YSAgICAgLGlvKTsgdWRlbGF5KDQpOwotCQkJb3V0YiggIHBvd2VyfHdyZW58ZGF0YXxjbGsgLGlvKTsgdWRlbGF5KDQpOwotCQkJb3V0YiggIHBvd2VyfHdyZW58ZGF0YSAgICAgLGlvKTsgdWRlbGF5KDQpOwotCQl9Ci0JZWxzZQotCQl7Ci0JCQlvdXRiKCAgcG93ZXJ8d3JlbiAgICAgICAgICAsaW8pOyB1ZGVsYXkoNCk7Ci0JCQlvdXRiKCAgcG93ZXJ8d3JlbnxjbGsgICAgICAsaW8pOyB1ZGVsYXkoNCk7Ci0JCQlvdXRiKCAgcG93ZXJ8d3JlbiAgICAgICAgICAsaW8pOyB1ZGVsYXkoNCk7Ci0JCX0KKwlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3QgbWF4aXJhZGlvLCB2NGwyX2Rldik7CiB9CiAKLXN0YXRpYyB2b2lkIHR1cm5fcG93ZXIoX191MTYgaW8sIGludCBwKQorc3RhdGljIHZvaWQgb3V0Yml0KHVuc2lnbmVkIGxvbmcgYml0LCB1MTYgaW8pCit7CisJaW50IHZhbCA9IHBvd2VyIHwgd3JlbiB8IChiaXQgPyBkYXRhIDogMCk7CisKKwlvdXRiKHZhbCwgaW8pOworCXVkZWxheSg0KTsKKwlvdXRiKHZhbCB8IGNsaywgaW8pOworCXVkZWxheSg0KTsKKwlvdXRiKHZhbCwgaW8pOworCXVkZWxheSg0KTsKK30KKworc3RhdGljIHZvaWQgdHVybl9wb3dlcihzdHJ1Y3QgbWF4aXJhZGlvICpkZXYsIGludCBwKQogewogCWlmIChwICE9IDApIHsKLQkJZHByaW50aygxLCAiUmFkaW8gcG93ZXJlZCBvblxuIik7Ci0JCW91dGIocG93ZXIsIGlvKTsKKwkJZHByaW50ayhkZXYsIDEsICJSYWRpbyBwb3dlcmVkIG9uXG4iKTsKKwkJb3V0Yihwb3dlciwgZGV2LT5pbyk7CiAJfSBlbHNlIHsKLQkJZHByaW50aygxLCAiUmFkaW8gcG93ZXJlZCBvZmZcbiIpOwotCQlvdXRiKDAsaW8pOworCQlkcHJpbnRrKGRldiwgMSwgIlJhZGlvIHBvd2VyZWQgb2ZmXG4iKTsKKwkJb3V0YigwLCBkZXYtPmlvKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9mcmVxKF9fdTE2IGlvLCBfX3UzMiBmcmVxKQorc3RhdGljIHZvaWQgc2V0X2ZyZXEoc3RydWN0IG1heGlyYWRpbyAqZGV2LCB1MzIgZnJlcSkKIHsKIAl1bnNpZ25lZCBsb25nIGludCBzaTsKIAlpbnQgYmw7CisJaW50IGlvID0gZGV2LT5pbzsKIAlpbnQgdmFsID0gRlJFUTJCSVRTKGZyZXEpOwogCiAJLyogVEVBNTc1NyBzaGlmdCByZWdpc3RlciBiaXRzIChzZWUgcGRmKSAqLwpAQCAtMTg4LDE0ICsxNjIsMTQgQEAKIAkJc2kgPj49IDE7CiAJfQogCi0JZHByaW50aygxLCAiUmFkaW8gZnJlcSBzZXQgdG8gJWQuJTAyZCBNSHpcbiIsCisJZHByaW50ayhkZXYsIDEsICJSYWRpbyBmcmVxIHNldCB0byAlZC4lMDJkIE1IelxuIiwKIAkJCQlmcmVxIC8gMTYwMDAsCiAJCQkJZnJlcSAlIDE2MDAwICogMTAwIC8gMTYwMDApOwogCi0JdHVybl9wb3dlcihpbywgMSk7CisJdHVybl9wb3dlcihkZXYsIDEpOwogfQogCi1zdGF0aWMgaW50IGdldF9zdGVyZW8oX191MTYgaW8pCitzdGF0aWMgaW50IGdldF9zdGVyZW8odTE2IGlvKQogewogCW91dGIocG93ZXIsaW8pOwogCXVkZWxheSg0KTsKQEAgLTIwMyw3ICsxNzcsNyBAQAogCXJldHVybiAhKGluYihpbykgJiBtb19zdCk7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X3R1bmUoX191MTYgaW8pCitzdGF0aWMgaW50IGdldF90dW5lKHUxNiBpbykKIHsKIAlvdXRiKHBvd2VyK2Nsayxpbyk7CiAJdWRlbGF5KDQpOwpAQCAtMjEyLDk1ICsxODYsODQgQEAKIH0KIAogCi1zdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAogCQkJICAgIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCiB7Ci0Jc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1tYXhpcmFkaW8iLCBzaXplb2YgKHYtPmRyaXZlcikpOwotCXN0cmxjcHkodi0+Y2FyZCwgIk1heGkgUmFkaW8gRk0yMDAwIHJhZGlvIiwgc2l6ZW9mICh2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywiSVNBIik7Ci0Jdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJc3RydWN0IG1heGlyYWRpbyAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAorCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tbWF4aXJhZGlvIiwgc2l6ZW9mKHYtPmRyaXZlcikpOworCXN0cmxjcHkodi0+Y2FyZCwgIk1heGkgUmFkaW8gRk0yMDAwIHJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKKwlzbnByaW50Zih2LT5idXNfaW5mbywgc2l6ZW9mKHYtPmJ1c19pbmZvKSwgIlBDSTolcyIsIHBjaV9uYW1lKGRldi0+cGRldikpOworCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgIHN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBtYXhpcmFkaW8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1lbXNldCh2LDAsc2l6ZW9mKCp2KSk7Ci0Jc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCi0Jdi0+cmFuZ2Vsb3c9RlJFUV9MTzsKLQl2LT5yYW5nZWhpZ2g9RlJFUV9ISTsKLQl2LT5yeHN1YmNoYW5zID1WNEwyX1RVTkVSX1NVQl9NT05PfFY0TDJfVFVORVJfU1VCX1NURVJFTzsKLQl2LT5jYXBhYmlsaXR5PVY0TDJfVFVORVJfQ0FQX0xPVzsKLQlpZihnZXRfc3RlcmVvKGNhcmQtPmlvKSkKKwl2LT5yYW5nZWxvdyA9IEZSRVFfTE87CisJdi0+cmFuZ2VoaWdoID0gRlJFUV9ISTsKKwl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTyB8IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKKwl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XOworCWlmIChnZXRfc3RlcmVvKGRldi0+aW8pKQogCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAllbHNlCiAJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKLQl2LT5zaWduYWw9MHhmZmZmKmdldF90dW5lKGNhcmQtPmlvKTsKKwl2LT5zaWduYWwgPSAweGZmZmYgKiBnZXRfdHVuZShkZXYtPmlvKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2Nfc190dW5lciAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0JaWYgKHYtPmluZGV4ID4gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkgICBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoYS0+aW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0cmNweShhLT5uYW1lLCAiRk0iKTsKLQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCXJldHVybiAwOworCXJldHVybiB2LT5pbmRleCA/IC1FSU5WQUwgOiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCiB7CiAJKmkgPSAwOwotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQogewotCWlmIChpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKIH0KIAotCi1zdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KKwlhLT5pbmRleCA9IDA7CisJc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5IChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKworc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCXJldHVybiBhLT5pbmRleCA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IG1heGlyYWRpbyAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmIChmLT5mcmVxdWVuY3kgPCBGUkVRX0xPIHx8IGYtPmZyZXF1ZW5jeSA+IEZSRVFfSEkpIHsKLQkJZHByaW50aygxLCAicmFkaW8gZnJlcSAoJWQuJTAyZCBNSHopIG91dCBvZiByYW5nZSAoJWQtJWQpXG4iLAorCQlkcHJpbnRrKGRldiwgMSwgInJhZGlvIGZyZXEgKCVkLiUwMmQgTUh6KSBvdXQgb2YgcmFuZ2UgKCVkLSVkKVxuIiwKIAkJCQkJZi0+ZnJlcXVlbmN5IC8gMTYwMDAsCiAJCQkJCWYtPmZyZXF1ZW5jeSAlIDE2MDAwICogMTAwIC8gMTYwMDAsCiAJCQkJCUZSRVFfTE8gLyAxNjAwMCwgRlJFUV9ISSAvIDE2MDAwKTsKQEAgLTMwOCw3NSArMjcxLDkxIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWNhcmQtPmZyZXEgPSBmLT5mcmVxdWVuY3k7Ci0Jc2V0X2ZyZXEoY2FyZC0+aW8sIGNhcmQtPmZyZXEpOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJZGV2LT5mcmVxID0gZi0+ZnJlcXVlbmN5OworCXNldF9mcmVxKGRldiwgZGV2LT5mcmVxKTsKIAltc2xlZXAoMTI1KTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3kgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgICAgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBtYXhpcmFkaW8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQlmLT5mcmVxdWVuY3kgPSBjYXJkLT5mcmVxOworCWYtPmZyZXF1ZW5jeSA9IGRldi0+ZnJlcTsKIAotCWRwcmludGsoNCwgInJhZGlvIGZyZXEgaXMgJWQuJTAyZCBNSHoiLAorCWRwcmludGsoZGV2LCA0LCAicmFkaW8gZnJlcSBpcyAlZC4lMDJkIE1IeiIsCiAJCQkJZi0+ZnJlcXVlbmN5IC8gMTYwMDAsCiAJCQkJZi0+ZnJlcXVlbmN5ICUgMTYwMDAgKiAxMDAgLyAxNjAwMCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7Ci0JCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLCBzaXplb2YoKnFjKSk7Ci0JCQlyZXR1cm4gKDApOwotCQl9CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMSk7CiAJfQotCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgbWF4aXJhZGlvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCQljdHJsLT52YWx1ZT1jYXJkLT5tdXRlZDsKLQkJCXJldHVybiAoMCk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQljdHJsLT52YWx1ZSA9IGRldi0+bXV0ZWQ7CisJCXJldHVybiAwOwogCX0KIAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19zX2N0cmwgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQorc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBtYXhpcmFkaW8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJCWNhcmQtPm11dGVkID0gY3RybC0+dmFsdWU7Ci0JCQlpZihjYXJkLT5tdXRlZCkKLQkJCQl0dXJuX3Bvd2VyKGNhcmQtPmlvLCAwKTsKLQkJCWVsc2UKLQkJCQlzZXRfZnJlcShjYXJkLT5pbywgY2FyZC0+ZnJlcSk7Ci0JCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJCWRldi0+bXV0ZWQgPSBjdHJsLT52YWx1ZTsKKwkJaWYgKGRldi0+bXV0ZWQpCisJCQl0dXJuX3Bvd2VyKGRldiwgMCk7CisJCWVsc2UKKwkJCXNldF9mcmVxKGRldiwgZGV2LT5mcmVxKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlyZXR1cm4gMDsKIAl9CiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGludCBtYXhpcmFkaW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXhpcmFkaW9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBtYXhpcmFkaW9fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgICAgICAgID0gbWF4aXJhZGlvX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gbWF4aXJhZGlvX3JlbGVhc2UsCisJLmlvY3RsICAgICAgICAgID0gdmlkZW9faW9jdGwyLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBtYXhpcmFkaW9faW9jdGxfb3BzID0gewogCS52aWRpb2NfcXVlcnljYXAgICAgPSB2aWRpb2NfcXVlcnljYXAsCiAJLnZpZGlvY19nX3R1bmVyICAgICA9IHZpZGlvY19nX3R1bmVyLApAQCAtMzkyLDYwICszNzEsODQgQEAKIAkudmlkaW9jX3NfY3RybCAgICAgID0gdmlkaW9jX3NfY3RybCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIG1heGlyYWRpb19yYWRpbyA9IHsKLQkubmFtZQkJPSAiTWF4aSBSYWRpbyBGTTIwMDAgcmFkaW8iLAotCS5mb3BzICAgICAgICAgICA9ICZtYXhpcmFkaW9fZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZtYXhpcmFkaW9faW9jdGxfb3BzLAotCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCi19OwotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtYXhpcmFkaW9faW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7Ci0JaWYoIXJlcXVlc3RfcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwKKwlzdHJ1Y3QgbWF4aXJhZGlvICpkZXY7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldjsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm90IGVub3VnaCBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl2NGwyX2RldiA9ICZkZXYtPnY0bDJfZGV2OworCW11dGV4X2luaXQoJmRldi0+bG9jayk7CisJZGV2LT5wZGV2ID0gcGRldjsKKwlkZXYtPm11dGVkID0gMTsKKwlkZXYtPmZyZXEgPSBGUkVRX0xPOworCisJc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgIm1heGlyYWRpbyIsIHNpemVvZih2NGwyX2Rldi0+bmFtZSkpOworCisJcmV0dmFsID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldiwgdjRsMl9kZXYpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKKwkJZ290byBlcnJmcjsKKwl9CisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwKIAkJCSAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCksICJNYXhpIFJhZGlvIEZNIDIwMDAiKSkgewotCQlwcmludGsoS0VSTl9FUlIgInJhZGlvLW1heGlyYWRpbzogY2FuJ3QgcmVzZXJ2ZSBJL08gcG9ydHNcbiIpOworCQl2NGwyX2Vycih2NGwyX2RldiwgImNhbid0IHJlc2VydmUgSS9PIHBvcnRzXG4iKTsKIAkJZ290byBlcnJfb3V0OwogCX0KIAogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKIAkJZ290byBlcnJfb3V0X2ZyZWVfcmVnaW9uOwogCi0JcmFkaW9fdW5pdC5pbyA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLQltdXRleF9pbml0KCZyYWRpb191bml0LmxvY2spOwotCXZpZGVvX3NldF9kcnZkYXRhKCZtYXhpcmFkaW9fcmFkaW8sICZyYWRpb191bml0KTsKKwlkZXYtPmlvID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCXN0cmxjcHkoZGV2LT52ZGV2Lm5hbWUsIHY0bDJfZGV2LT5uYW1lLCBzaXplb2YoZGV2LT52ZGV2Lm5hbWUpKTsKKwlkZXYtPnZkZXYudjRsMl9kZXYgPSB2NGwyX2RldjsKKwlkZXYtPnZkZXYuZm9wcyA9ICZtYXhpcmFkaW9fZm9wczsKKwlkZXYtPnZkZXYuaW9jdGxfb3BzID0gJm1heGlyYWRpb19pb2N0bF9vcHM7CisJZGV2LT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmZGV2LT52ZGV2LCBkZXYpOwogCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmbWF4aXJhZGlvX3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewotCQlwcmludGsoInJhZGlvLW1heGlyYWRpbzogY2FuJ3QgcmVnaXN0ZXIgZGV2aWNlISIpOworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJjYW4ndCByZWdpc3RlciBkZXZpY2UhIik7CiAJCWdvdG8gZXJyX291dF9mcmVlX3JlZ2lvbjsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJyYWRpby1tYXhpcmFkaW86IHZlcnNpb24gIgotCSAgICAgICBEUklWRVJfVkVSU0lPTgotCSAgICAgICAiIHRpbWUgIgotCSAgICAgICBfX1RJTUVfXyAiICAiCi0JICAgICAgIF9fREFURV9fCi0JICAgICAgICJcbiIpOworCXY0bDJfaW5mbyh2NGwyX2RldiwgInZlcnNpb24gIiBEUklWRVJfVkVSU0lPTgorCQkJIiB0aW1lICIgX19USU1FX18gIiAgIiBfX0RBVEVfXyAiXG4iKTsKIAotCXByaW50ayhLRVJOX0lORk8gInJhZGlvLW1heGlyYWRpbzogZm91bmQgR3VpbGxlbW90IE1BWEkgUmFkaW8gZGV2aWNlIChpbyA9IDB4JXgpXG4iLAotCSAgICAgICByYWRpb191bml0LmlvKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJmb3VuZCBHdWlsbGVtb3QgTUFYSSBSYWRpbyBkZXZpY2UgKGlvID0gMHgleClcbiIsCisJICAgICAgIGRldi0+aW8pOwogCXJldHVybiAwOwogCiBlcnJfb3V0X2ZyZWVfcmVnaW9uOgogCXJlbGVhc2VfcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7CiBlcnJfb3V0OgorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOworZXJyZnI6CisJa2ZyZWUoZGV2KTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZleGl0IG1heGlyYWRpb19yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZtYXhpcmFkaW9fcmFkaW8pOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IG1heGlyYWRpbyAqZGV2ID0gdG9fbWF4aXJhZGlvKHY0bDJfZGV2KTsKKworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOwogCXJlbGVhc2VfcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtYXhpcmFkaW9fcGNpX3RibFtdID0gewogCXsgUENJX1ZFTkRPUl9JRF9HVUlMTEVNT1QsIFBDSV9ERVZJQ0VfSURfR1VJTExFTU9UX01BWElSQURJTywKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKLQl7IDAsfQorCXsgMCB9CiB9OwogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbWF4aXJhZGlvX3BjaV90YmwpOwpAQCAtNDY5LDEwICs0NzIsMyBAQAogCiBtb2R1bGVfaW5pdChtYXhpcmFkaW9fcmFkaW9faW5pdCk7CiBtb2R1bGVfZXhpdChtYXhpcmFkaW9fcmFkaW9fZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIkRpbWl0cm9tYW5vbGFraXMgQXBvc3RvbG9zLCBhcGRpbUBncmVjaWFuLm5ldCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJSYWRpbyBkcml2ZXIgZm9yIHRoZSBHdWlsbGVtb3QgTWF4aSBSYWRpbyBGTTIwMDAgcmFkaW8uIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZyxtYXhpcmFkaW9fcmFkaW8uZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCJhY3RpdmF0ZXMgZGVidWcgaW5mbyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tcjgwMC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tcjgwMC5jCmluZGV4IGZkZmM3YmYuLmRlZDI1YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbXI4MDAuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1yODAwLmMKQEAgLTIyLDcgKzIyLDcgQEAKICAqLwogCiAvKgotICogQmlnIHRoYW5rcyB0byBhdXRob3JzIG9mIGRzYnIxMDAuYyBhbmQgcmFkaW8tc2k0NzB4LmMKKyAqIEJpZyB0aGFua3MgdG8gYXV0aG9ycyBhbmQgY29udHJpYnV0b3JzIG9mIGRzYnIxMDAuYyBhbmQgcmFkaW8tc2k0NzB4LmMKICAqCiAgKiBXaGVuIHdvcmsgd2FzIGxvb2tlZCBwcmV0dHkgZ29vZCwgaSBkaXNjb3ZlciB0aGlzOgogICogaHR0cDovL2F2LXVzYnJhZGlvLnNvdXJjZWZvcmdlLm5ldC9pbmRleC5waHAKQEAgLTMwLDE4ICszMCwyMyBAQAogICogTGF0ZXN0IHJlbGVhc2Ugb2YgdGhlaXJzIHByb2plY3Qgd2FzIGluIDIwMDUuCiAgKiBQcm9iYWJseSwgdGhpcyBkcml2ZXIgY291bGQgYmUgaW1wcm92ZWQgdHJvdWdoIHVzaW5nIHRoZWlyCiAgKiBhY2hpZXZlbWVudHMgKHNwZWNpZmljYXRpb25zIGdpdmVuKS4KLSAqIFNvLCB3ZSBoYXZlIHNtdGggdG8gYmVnaW4gd2l0aC4KKyAqIEFsc28sIEZhaWRvbiBMaWFtYm90aXMgPHBhcmF2b2lkQGRlYmlhbi5vcmc+IHdyb3RlIG5pY2UgZHJpdmVyIGZvciB0aGlzIHJhZGlvCisgKiBpbiAyMDA3LiBIZSBhbGxvd2VkIHRvIHVzZSBoaXMgZHJpdmVyIHRvIGltcHJvdmUgY3VycmVudCBtcjgwMCByYWRpbyBkcml2ZXIuCisgKiBodHRwOi8va2VybmVsdHJhcC5vcmcvbWFpbGFyY2hpdmUvbGludXgtdXNiLWRldmVsLzIwMDcvMTAvMTEvMzQyNDkyCiAgKgotICogSGlzdG9yeToKICAqIFZlcnNpb24gMC4wMToJRmlyc3Qgd29ya2luZyB2ZXJzaW9uLgogICogCQkJSXQncyByZXF1aXJlZCB0byBibGFja2xpc3QgQXZlck1lZGlhIFVTQiBSYWRpbwogICogCQkJaW4gdXNiaGlkL2hpZC1xdWlya3MuYworICogVmVyc2lvbiAwLjEwOglBIGxvdCBvZiBjbGVhbnVwcyBhbmQgZml4ZXM6IHVucGx1Z2luZyB0aGUgZGV2aWNlLAorICogCQkJZmV3IG11dGV4IGxvY2tzIHdlcmUgYWRkZWQsIGNvZGluc3R5bGUgaXNzdWVzLCBldGMuCisgKiAJCQlBZGRlZCBzdGVyZW8gc3VwcG9ydC4gVGhhbmtzIHRvCisgKiAJCQlEb3VnbGFzIFNjaGlsbGluZyBMYW5kZ3JhZiA8ZG91Z3NsYW5kQGdtYWlsLmNvbT4gYW5kCisgKiAJCQlEYXZpZCBFbGxpbmdzd29ydGggPGRhdmlkQGlkZW50ZC5keW5kbnMub3JnPgorICogCQkJZm9yIGRpc2N1c3Npb24sIGhlbHAgYW5kIHN1cHBvcnQuCiAgKgogICogTWFueSB0aGluZ3MgdG8gZG86CiAgKiAJLSBDb3JyZWN0IHBvd2VyIG1hbmFnbWVudCBvZiBkZXZpY2UgKHN1c3BlbmQgJiByZXN1bWUpCi0gKiAJLSBNYWtlIHg4NiBpbmRlcGVuZGFuY2UgKGxpdHRsZS1lbmRpYW4gYW5kIGJpZy1lbmRpYW4gc3R1ZmYpCiAgKiAJLSBBZGQgY29kZSBmb3Igc2Nhbm5pbmcgYW5kIHNtb290aCB0dW5pbmcKLSAqIAktIENoZWNrZWQgYW5kIGFkZCBzdGVyZW8mbW9ubyBzdHVmZgogICogCS0gQWRkIGNvZGUgZm9yIHNlbnNpdGl2aXR5IHZhbHVlCiAgKiAJLSBDb3JyZWN0IG1pc3Rha2VzCiAgKiAJLSBJbiBKYXBhbiBhbm90aGVyIEZSRVFfTUlOIGFuZCBGUkVRX01BWApAQCAtNjIsOCArNjcsOCBAQAogLyogZHJpdmVyIGFuZCBtb2R1bGUgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiQWxleGV5IEtsaW1vdiA8a2xpbW92LmxpbnV4QGdtYWlsLmNvbT4iCiAjZGVmaW5lIERSSVZFUl9ERVNDICJBdmVyTWVkaWEgTVIgODAwIFVTQiBGTSByYWRpbyBkcml2ZXIiCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjAxIgotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDEpCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjEwIgorI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDEsIDApCiAKIE1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwpAQCAtODcsNiArOTIsMjIgQEAKICNkZWZpbmUgRlJFUV9NQVggMTA4LjAKICNkZWZpbmUgRlJFUV9NVUwgMTYwMDAKIAorLyoKKyAqIENvbW1hbmRzIHRoYXQgZGV2aWNlIHNob3VsZCB1bmRlcnN0YW5kCisgKiBMaXN0IGlzbnQgZnVsbCBhbmQgd2lsbCBiZSB1cGRhdGVkIHdpdGggaW1wbGVtZW50YXRpb24gb2YgbmV3IGZ1bmN0aW9ucworICovCisjZGVmaW5lIEFNUkFESU9fU0VUX0ZSRVEJMHhhNAorI2RlZmluZSBBTVJBRElPX1NFVF9NVVRFCTB4YWIKKyNkZWZpbmUgQU1SQURJT19TRVRfTU9OTwkweGFlCisKKy8qIENvbWZvcnRhYmxlIGRlZmluZXMgZm9yIGFtcmFkaW9fc2V0X211dGUgKi8KKyNkZWZpbmUgQU1SQURJT19TVEFSVAkJMHgwMAorI2RlZmluZSBBTVJBRElPX1NUT1AJCTB4MDEKKworLyogQ29tZm9ydGFibGUgZGVmaW5lcyBmb3IgYW1yYWRpb19zZXRfc3RlcmVvICovCisjZGVmaW5lIFdBTlRfU1RFUkVPCQkweDAwCisjZGVmaW5lIFdBTlRfTU9OTwkJMHgwMQorCiAvKiBtb2R1bGUgcGFyYW1ldGVyICovCiBzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7CiBtb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CkBAIC0xNjksNDAgKzE5MCw4IEBACiAJLnN1cHBvcnRzX2F1dG9zdXNwZW5kCT0gMCwKIH07CiAKLS8qIHN3aXRjaCBvbiByYWRpby4gU2VuZCA4IGJ5dGVzIHRvIGRldmljZS4gKi8KLXN0YXRpYyBpbnQgYW1yYWRpb19zdGFydChzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvKQotewotCWludCByZXR2YWw7Ci0JaW50IHNpemU7Ci0KLQltdXRleF9sb2NrKCZyYWRpby0+bG9jayk7Ci0KLQlyYWRpby0+YnVmZmVyWzBdID0gMHgwMDsKLQlyYWRpby0+YnVmZmVyWzFdID0gMHg1NTsKLQlyYWRpby0+YnVmZmVyWzJdID0gMHhhYTsKLQlyYWRpby0+YnVmZmVyWzNdID0gMHgwMDsKLQlyYWRpby0+YnVmZmVyWzRdID0gMHhhYjsKLQlyYWRpby0+YnVmZmVyWzVdID0gMHgwMDsKLQlyYWRpby0+YnVmZmVyWzZdID0gMHgwMDsKLQlyYWRpby0+YnVmZmVyWzddID0gMHgwMDsKLQotCXJldHZhbCA9IHVzYl9idWxrX21zZyhyYWRpby0+dXNiZGV2LCB1c2Jfc25kaW50cGlwZShyYWRpby0+dXNiZGV2LCAyKSwKLQkJKHZvaWQgKikgKHJhZGlvLT5idWZmZXIpLCBCVUZGRVJfTEVOR1RILCAmc2l6ZSwgVVNCX1RJTUVPVVQpOwotCi0JaWYgKHJldHZhbCkgewotCQltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlyYWRpby0+bXV0ZWQgPSAwOwotCi0JbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKiBzd2l0Y2ggb2ZmIHJhZGlvICovCi1zdGF0aWMgaW50IGFtcmFkaW9fc3RvcChzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvKQorLyogc3dpdGNoIG9uL29mZiB0aGUgcmFkaW8uIFNlbmQgOCBieXRlcyB0byBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgYW1yYWRpb19zZXRfbXV0ZShzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvLCBjaGFyIGFyZ3VtZW50KQogewogCWludCByZXR2YWw7CiAJaW50IHNpemU7CkBAIC0yMTcsMjAgKzIwNiwyMCBAQAogCXJhZGlvLT5idWZmZXJbMV0gPSAweDU1OwogCXJhZGlvLT5idWZmZXJbMl0gPSAweGFhOwogCXJhZGlvLT5idWZmZXJbM10gPSAweDAwOwotCXJhZGlvLT5idWZmZXJbNF0gPSAweGFiOwotCXJhZGlvLT5idWZmZXJbNV0gPSAweDAxOworCXJhZGlvLT5idWZmZXJbNF0gPSBBTVJBRElPX1NFVF9NVVRFOworCXJhZGlvLT5idWZmZXJbNV0gPSBhcmd1bWVudDsKIAlyYWRpby0+YnVmZmVyWzZdID0gMHgwMDsKIAlyYWRpby0+YnVmZmVyWzddID0gMHgwMDsKIAogCXJldHZhbCA9IHVzYl9idWxrX21zZyhyYWRpby0+dXNiZGV2LCB1c2Jfc25kaW50cGlwZShyYWRpby0+dXNiZGV2LCAyKSwKIAkJKHZvaWQgKikgKHJhZGlvLT5idWZmZXIpLCBCVUZGRVJfTEVOR1RILCAmc2l6ZSwgVVNCX1RJTUVPVVQpOwogCi0JaWYgKHJldHZhbCkgeworCWlmIChyZXR2YWwgPCAwIHx8IHNpemUgIT0gQlVGRkVSX0xFTkdUSCkgewogCQltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlyYWRpby0+bXV0ZWQgPSAxOworCXJhZGlvLT5tdXRlZCA9IGFyZ3VtZW50OwogCiAJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CiAKQEAgLTI0Miw3ICsyMzEsNyBAQAogewogCWludCByZXR2YWw7CiAJaW50IHNpemU7Ci0JdW5zaWduZWQgc2hvcnQgZnJlcV9zZW5kID0gMHgxMyArIChmcmVxID4+IDMpIC8gMjU7CisJdW5zaWduZWQgc2hvcnQgZnJlcV9zZW5kID0gMHgxMCArIChmcmVxID4+IDMpIC8gMjU7CiAKIAkvKiBzYWZldHkgY2hlY2sgKi8KIAlpZiAocmFkaW8tPnJlbW92ZWQpCkBAIC0yNTQsNyArMjQzLDcgQEAKIAlyYWRpby0+YnVmZmVyWzFdID0gMHg1NTsKIAlyYWRpby0+YnVmZmVyWzJdID0gMHhhYTsKIAlyYWRpby0+YnVmZmVyWzNdID0gMHgwMzsKLQlyYWRpby0+YnVmZmVyWzRdID0gMHhhNDsKKwlyYWRpby0+YnVmZmVyWzRdID0gQU1SQURJT19TRVRfRlJFUTsKIAlyYWRpby0+YnVmZmVyWzVdID0gMHgwMDsKIAlyYWRpby0+YnVmZmVyWzZdID0gMHgwMDsKIAlyYWRpby0+YnVmZmVyWzddID0gMHgwODsKQEAgLTI2Miw3ICsyNTEsNyBAQAogCXJldHZhbCA9IHVzYl9idWxrX21zZyhyYWRpby0+dXNiZGV2LCB1c2Jfc25kaW50cGlwZShyYWRpby0+dXNiZGV2LCAyKSwKIAkJKHZvaWQgKikgKHJhZGlvLT5idWZmZXIpLCBCVUZGRVJfTEVOR1RILCAmc2l6ZSwgVVNCX1RJTUVPVVQpOwogCi0JaWYgKHJldHZhbCkgeworCWlmIChyZXR2YWwgPCAwIHx8IHNpemUgIT0gQlVGRkVSX0xFTkdUSCkgewogCQltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CkBAIC0yNzksMjQgKzI2OCw1NyBAQAogCXJldHZhbCA9IHVzYl9idWxrX21zZyhyYWRpby0+dXNiZGV2LCB1c2Jfc25kaW50cGlwZShyYWRpby0+dXNiZGV2LCAyKSwKIAkJKHZvaWQgKikgKHJhZGlvLT5idWZmZXIpLCBCVUZGRVJfTEVOR1RILCAmc2l6ZSwgVVNCX1RJTUVPVVQpOwogCi0JaWYgKHJldHZhbCkgeworCWlmIChyZXR2YWwgPCAwIHx8IHNpemUgIT0gQlVGRkVSX0xFTkdUSCkgewogCQltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlyYWRpby0+c3RlcmVvID0gMDsKLQogCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KIAotLyogVVNCIHN1YnN5c3RlbSBpbnRlcmZhY2UgYmVnaW5zIGhlcmUgKi8KK3N0YXRpYyBpbnQgYW1yYWRpb19zZXRfc3RlcmVvKHN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8sIGNoYXIgYXJndW1lbnQpCit7CisJaW50IHJldHZhbDsKKwlpbnQgc2l6ZTsKIAotLyogaGFuZGxlIHVucGx1Z2dpbmcgb2YgdGhlIGRldmljZSwgcmVsZWFzZSBkYXRhIHN0cnVjdHVyZXMKLWlmIG5vdGhpbmcga2VlcHMgdXMgZnJvbSBkb2luZyBpdC4gIElmIHNvbWV0aGluZyBpcyBzdGlsbAota2VlcGluZyB1cyBidXN5LCB0aGUgcmVsZWFzZSBjYWxsYmFjayBvZiB2NGwgd2lsbCB0YWtlIGNhcmUKLW9mIHJlbGVhc2luZyBpdC4gKi8KKwkvKiBzYWZldHkgY2hlY2sgKi8KKwlpZiAocmFkaW8tPnJlbW92ZWQpCisJCXJldHVybiAtRUlPOworCisJbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOworCisJcmFkaW8tPmJ1ZmZlclswXSA9IDB4MDA7CisJcmFkaW8tPmJ1ZmZlclsxXSA9IDB4NTU7CisJcmFkaW8tPmJ1ZmZlclsyXSA9IDB4YWE7CisJcmFkaW8tPmJ1ZmZlclszXSA9IDB4MDA7CisJcmFkaW8tPmJ1ZmZlcls0XSA9IEFNUkFESU9fU0VUX01PTk87CisJcmFkaW8tPmJ1ZmZlcls1XSA9IGFyZ3VtZW50OworCXJhZGlvLT5idWZmZXJbNl0gPSAweDAwOworCXJhZGlvLT5idWZmZXJbN10gPSAweDAwOworCisJcmV0dmFsID0gdXNiX2J1bGtfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9zbmRpbnRwaXBlKHJhZGlvLT51c2JkZXYsIDIpLAorCQkodm9pZCAqKSAocmFkaW8tPmJ1ZmZlciksIEJVRkZFUl9MRU5HVEgsICZzaXplLCBVU0JfVElNRU9VVCk7CisKKwlpZiAocmV0dmFsIDwgMCB8fCBzaXplICE9IEJVRkZFUl9MRU5HVEgpIHsKKwkJcmFkaW8tPnN0ZXJlbyA9IC0xOworCQltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlyYWRpby0+c3RlcmVvID0gMTsKKworCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyogSGFuZGxlIHVucGx1Z2dpbmcgdGhlIGRldmljZS4KKyAqIFdlIGNhbGwgdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UgaW4gYW55IGNhc2UuCisgKiBUaGUgbGFzdCBmdW5jdGlvbiBjYWxsZWQgaW4gdGhpcyBwcm9jZWR1cmUgaXMKKyAqIHVzYl9hbXJhZGlvX2RldmljZV9yZWxlYXNlLgorICovCiBzdGF0aWMgdm9pZCB1c2JfYW1yYWRpb19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwpAQCAtMzEzLDkgKzMzNSwxMSBAQAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCiB7CisJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLW1yODAwIiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIkF2ZXJNZWRpYSBNUiA4MDAgVVNCIEZNIFJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiVVNCIik7CisJdXNiX21ha2VfcGF0aChyYWRpby0+dXNiZGV2LCB2LT5idXNfaW5mbywgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CiAJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CiAJcmV0dXJuIDA7CkBAIC0zMjYsNiArMzUwLDcgQEAKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKIAlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJaW50IHJldHZhbDsKIAogCS8qIHNhZmV0eSBjaGVjayAqLwogCWlmIChyYWRpby0+cmVtb3ZlZCkKQEAgLTMzNyw3ICszNjIsMTYgQEAKIC8qIFRPRE86IEFkZCBmdW5jdGlvbiB3aGljaCBsb29rIGlzIHNpZ25hbCBzdGVyZW8gb3Igbm90CiAgKiAJYW1yYWRpb19nZXRzdGF0KHJhZGlvKTsKICAqLwotCXJhZGlvLT5zdGVyZW8gPSAtMTsKKworLyogd2UgY2FsbCBhbXJhZGlvX3NldF9zdGVyZW8gdG8gc2V0IHJhZGlvLT5zdGVyZW8KKyAqIEhvbmVzdGx5LCBhbXJhZGlvX2dldHN0YXQgc2hvdWxkIGNvdmVyIHRoaXMgaW4gZnV0dXJlIGFuZAorICogYW1yYWRpb19zZXRfc3RlcmVvIHNob3VsZG4ndCBiZSBoZXJlCisgKi8KKwlyZXR2YWwgPSBhbXJhZGlvX3NldF9zdGVyZW8ocmFkaW8sIFdBTlRfU1RFUkVPKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJYW1yYWRpb19kZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCisJCQkic2V0IHN0ZXJlbyBmYWlsZWRcbiIpOworCiAJc3RyY3B5KHYtPm5hbWUsICJGTSIpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCXYtPnJhbmdlbG93ID0gRlJFUV9NSU4gKiBGUkVRX01VTDsKQEAgLTM1OCw2ICszOTIsNyBAQAogCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewogCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlpbnQgcmV0dmFsOwogCiAJLyogc2FmZXR5IGNoZWNrICovCiAJaWYgKHJhZGlvLT5yZW1vdmVkKQpAQCAtMzY1LDYgKzQwMCwyNSBAQAogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBtb25vL3N0ZXJlbyBzZWxlY3RvciAqLworCXN3aXRjaCAodi0+YXVkbW9kZSkgeworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86CisJCXJldHZhbCA9IGFtcmFkaW9fc2V0X3N0ZXJlbyhyYWRpbywgV0FOVF9NT05PKTsKKwkJaWYgKHJldHZhbCA8IDApCisJCQlhbXJhZGlvX2Rldl93YXJuKCZyYWRpby0+dmlkZW9kZXYtPmRldiwKKwkJCQkic2V0IG1vbm8gZmFpbGVkXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgorCQlyZXR2YWwgPSBhbXJhZGlvX3NldF9zdGVyZW8ocmFkaW8sIFdBTlRfU1RFUkVPKTsKKwkJaWYgKHJldHZhbCA8IDApCisJCQlhbXJhZGlvX2Rldl93YXJuKCZyYWRpby0+dmlkZW9kZXYtPmRldiwKKwkJCQkic2V0IHN0ZXJlbyBmYWlsZWRcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzczLDEzICs0MjcsMTggQEAKIAkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7CiAJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCWludCByZXR2YWw7CiAKIAkvKiBzYWZldHkgY2hlY2sgKi8KIAlpZiAocmFkaW8tPnJlbW92ZWQpCiAJCXJldHVybiAtRUlPOwogCisJbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOwogCXJhZGlvLT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwotCWlmIChhbXJhZGlvX3NldGZyZXEocmFkaW8sIHJhZGlvLT5jdXJmcmVxKSA8IDApCisJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CisKKwlyZXR2YWwgPSBhbXJhZGlvX3NldGZyZXEocmFkaW8sIHJhZGlvLT5jdXJmcmVxKTsKKwlpZiAocmV0dmFsIDwgMCkKIAkJYW1yYWRpb19kZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCiAJCQkic2V0IGZyZXF1ZW5jeSBmYWlsZWRcbiIpOwogCXJldHVybiAwOwpAQCAtNDM4LDYgKzQ5Nyw3IEBACiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKIAlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJaW50IHJldHZhbDsKIAogCS8qIHNhZmV0eSBjaGVjayAqLwogCWlmIChyYWRpby0+cmVtb3ZlZCkKQEAgLTQ0NiwxMyArNTA2LDE1IEBACiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKIAkJaWYgKGN0cmwtPnZhbHVlKSB7Ci0JCQlpZiAoYW1yYWRpb19zdG9wKHJhZGlvKSA8IDApIHsKKwkJCXJldHZhbCA9IGFtcmFkaW9fc2V0X211dGUocmFkaW8sIEFNUkFESU9fU1RPUCk7CisJCQlpZiAocmV0dmFsIDwgMCkgewogCQkJCWFtcmFkaW9fZGV2X3dhcm4oJnJhZGlvLT52aWRlb2Rldi0+ZGV2LAogCQkJCQkiYW1yYWRpb19zdG9wIGZhaWxlZFxuIik7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCQl9IGVsc2UgewotCQkJaWYgKGFtcmFkaW9fc3RhcnQocmFkaW8pIDwgMCkgeworCQkJcmV0dmFsID0gYW1yYWRpb19zZXRfbXV0ZShyYWRpbywgQU1SQURJT19TVEFSVCk7CisJCQlpZiAocmV0dmFsIDwgMCkgewogCQkJCWFtcmFkaW9fZGV2X3dhcm4oJnJhZGlvLT52aWRlb2Rldi0+ZGV2LAogCQkJCQkiYW1yYWRpb19zdGFydCBmYWlsZWRcbiIpOwogCQkJCXJldHVybiAtMTsKQEAgLTUwMywyMCArNTY1LDI5IEBACiBzdGF0aWMgaW50IHVzYl9hbXJhZGlvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCWludCByZXR2YWw7CiAKIAlsb2NrX2tlcm5lbCgpOwogCiAJcmFkaW8tPnVzZXJzID0gMTsKIAlyYWRpby0+bXV0ZWQgPSAxOwogCi0JaWYgKGFtcmFkaW9fc3RhcnQocmFkaW8pIDwgMCkgeworCXJldHZhbCA9IGFtcmFkaW9fc2V0X211dGUocmFkaW8sIEFNUkFESU9fU1RBUlQpOworCWlmIChyZXR2YWwgPCAwKSB7CiAJCWFtcmFkaW9fZGV2X3dhcm4oJnJhZGlvLT52aWRlb2Rldi0+ZGV2LAogCQkJInJhZGlvIGRpZCBub3Qgc3RhcnQgdXAgcHJvcGVybHlcbiIpOwogCQlyYWRpby0+dXNlcnMgPSAwOwogCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUlPOwogCX0KLQlpZiAoYW1yYWRpb19zZXRmcmVxKHJhZGlvLCByYWRpby0+Y3VyZnJlcSkgPCAwKQorCisJcmV0dmFsID0gYW1yYWRpb19zZXRfc3RlcmVvKHJhZGlvLCBXQU5UX1NURVJFTyk7CisJaWYgKHJldHZhbCA8IDApCisJCWFtcmFkaW9fZGV2X3dhcm4oJnJhZGlvLT52aWRlb2Rldi0+ZGV2LAorCQkJInNldCBzdGVyZW8gZmFpbGVkXG4iKTsKKworCXJldHZhbCA9IGFtcmFkaW9fc2V0ZnJlcShyYWRpbywgcmFkaW8tPmN1cmZyZXEpOworCWlmIChyZXR2YWwgPCAwKQogCQlhbXJhZGlvX2Rldl93YXJuKCZyYWRpby0+dmlkZW9kZXYtPmRldiwKIAkJCSJzZXQgZnJlcXVlbmN5IGZhaWxlZFxuIik7CiAKQEAgLTUzMywxMCArNjA0LDEyIEBACiAJaWYgKCFyYWRpbykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwltdXRleF9sb2NrKCZyYWRpby0+bG9jayk7CiAJcmFkaW8tPnVzZXJzID0gMDsKKwltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKIAogCWlmICghcmFkaW8tPnJlbW92ZWQpIHsKLQkJcmV0dmFsID0gYW1yYWRpb19zdG9wKHJhZGlvKTsKKwkJcmV0dmFsID0gYW1yYWRpb19zZXRfbXV0ZShyYWRpbywgQU1SQURJT19TVE9QKTsKIAkJaWYgKHJldHZhbCA8IDApCiAJCQlhbXJhZGlvX2Rldl93YXJuKCZyYWRpby0+dmlkZW9kZXYtPmRldiwKIAkJCQkiYW1yYWRpb19zdG9wIGZhaWxlZFxuIik7CkBAIC01NDksOCArNjIyLDEwIEBACiBzdGF0aWMgaW50IHVzYl9hbXJhZGlvX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewogCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWludCByZXR2YWw7CiAKLQlpZiAoYW1yYWRpb19zdG9wKHJhZGlvKSA8IDApCisJcmV0dmFsID0gYW1yYWRpb19zZXRfbXV0ZShyYWRpbywgQU1SQURJT19TVE9QKTsKKwlpZiAocmV0dmFsIDwgMCkKIAkJZGV2X3dhcm4oJmludGYtPmRldiwgImFtcmFkaW9fc3RvcCBmYWlsZWRcbiIpOwogCiAJZGV2X2luZm8oJmludGYtPmRldiwgImdvaW5nIGludG8gc3VzcGVuZC4uXG4iKTsKQEAgLTU2Miw4ICs2MzcsMTAgQEAKIHN0YXRpYyBpbnQgdXNiX2FtcmFkaW9fcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWludCByZXR2YWw7CiAKLQlpZiAoYW1yYWRpb19zdGFydChyYWRpbykgPCAwKQorCXJldHZhbCA9IGFtcmFkaW9fc2V0X211dGUocmFkaW8sIEFNUkFESU9fU1RBUlQpOworCWlmIChyZXR2YWwgPCAwKQogCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAiYW1yYWRpb19zdGFydCBmYWlsZWRcbiIpOwogCiAJZGV2X2luZm8oJmludGYtPmRldiwgImNvbWluZyBvdXQgb2Ygc3VzcGVuZC4uXG4iKTsKQEAgLTYxNCwyOCArNjkxLDMyIEBACiAJLnJlbGVhc2UJPSB1c2JfYW1yYWRpb19kZXZpY2VfcmVsZWFzZSwKIH07CiAKLS8qIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgcHJlc2VudCBhbmQgcmVnaXN0ZXIgd2l0aCB2NGwgYW5kCi11c2IgaWYgaXQgaXMgKi8KKy8qIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMgcHJlc2VudCBhbmQgcmVnaXN0ZXIgd2l0aCB2NGwgYW5kIHVzYiBpZiBpdCBpcyAqLwogc3RhdGljIGludCB1c2JfYW1yYWRpb19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbzsKKwlpbnQgcmV0dmFsOwogCiAJcmFkaW8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYW1yYWRpb19kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAotCWlmICghKHJhZGlvKSkKKwlpZiAoIXJhZGlvKSB7CisJCWRldl9lcnIoJmludGYtPmRldiwgImttYWxsb2MgZm9yIGFtcmFkaW9fZGV2aWNlIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAogCXJhZGlvLT5idWZmZXIgPSBrbWFsbG9jKEJVRkZFUl9MRU5HVEgsIEdGUF9LRVJORUwpOwogCi0JaWYgKCEocmFkaW8tPmJ1ZmZlcikpIHsKKwlpZiAoIXJhZGlvLT5idWZmZXIpIHsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAia21hbGxvYyBmb3IgcmFkaW8tPmJ1ZmZlciBmYWlsZWRcbiIpOwogCQlrZnJlZShyYWRpbyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCXJhZGlvLT52aWRlb2RldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOwogCi0JaWYgKCEocmFkaW8tPnZpZGVvZGV2KSkgeworCWlmICghcmFkaW8tPnZpZGVvZGV2KSB7CisJCWRldl9lcnIoJmludGYtPmRldiwgInZpZGVvX2RldmljZV9hbGxvYyBmYWlsZWRcbiIpOwogCQlrZnJlZShyYWRpby0+YnVmZmVyKTsKIAkJa2ZyZWUocmFkaW8pOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTY0OCwxMiArNzI5LDE0IEBACiAJcmFkaW8tPnVzZXJzID0gMDsKIAlyYWRpby0+dXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAlyYWRpby0+Y3VyZnJlcSA9IDk1LjE2ICogRlJFUV9NVUw7CisJcmFkaW8tPnN0ZXJlbyA9IC0xOwogCiAJbXV0ZXhfaW5pdCgmcmFkaW8tPmxvY2spOwogCiAJdmlkZW9fc2V0X2RydmRhdGEocmFkaW8tPnZpZGVvZGV2LCByYWRpbyk7Ci0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikpIHsKLQkJZGV2X3dhcm4oJmludGYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciB2aWRlbyBkZXZpY2VcbiIpOworCXJldHZhbCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShyYWRpby0+dmlkZW9kZXYsCVZGTF9UWVBFX1JBRElPLAlyYWRpb19ucik7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIHZpZGVvIGRldmljZVxuIik7CiAJCXZpZGVvX2RldmljZV9yZWxlYXNlKHJhZGlvLT52aWRlb2Rldik7CiAJCWtmcmVlKHJhZGlvLT5idWZmZXIpOwogCQlrZnJlZShyYWRpbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXJ0cmFjazIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tcnRyYWNrMi5jCmluZGV4IDI1ODcyMjcuLmQxZTZiMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tcnRyYWNrMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tcnRyYWNrMi5jCkBAIC0xMywzNCArMTMsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YQkJCSovCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCi0jaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyCQkqLwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBrZXJuZWwgcmFkaW8gc3RydWN0cwkJKi8KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMCwyKQorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7Ci0JewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS5uYW1lICAgICAgICAgID0gIk11dGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JfSx7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAotCQkubmFtZSAgICAgICAgICA9ICJWb2x1bWUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gNjU1MzUsCi0JCS5zdGVwICAgICAgICAgID0gNjU1MzUsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMHhmZiwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCX0KLX07CitNT0RVTEVfQVVUSE9SKCJCZW4gUGZhZmYiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBSYWRpb1RyYWNrIElJIHJhZGlvIGNhcmQuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNpZm5kZWYgQ09ORklHX1JBRElPX1JUUkFDSzJfUE9SVAogI2RlZmluZSBDT05GSUdfUkFESU9fUlRSQUNLMl9QT1JUIC0xCkBAIC00OCw3OSArMzAsODggQEAKIAogc3RhdGljIGludCBpbyA9IENPTkZJR19SQURJT19SVFJBQ0syX1BPUlQ7CiBzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Ci1zdGF0aWMgc3BpbmxvY2tfdCBsb2NrOwogCi1zdHJ1Y3QgcnRfZGV2aWNlCittb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFJhZGlvVHJhY2sgY2FyZCAoMHgyMGMgb3IgMHgzMGMpIik7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CisKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAyKQorCitzdHJ1Y3QgcnRyYWNrMgogewotCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwotCWludCBwb3J0OworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJaW50IGlvOwogCXVuc2lnbmVkIGxvbmcgY3VyZnJlcTsKIAlpbnQgbXV0ZWQ7CisJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCitzdGF0aWMgc3RydWN0IHJ0cmFjazIgcnRyYWNrMl9jYXJkOworCiAKIC8qIGxvY2FsIHRoaW5ncyAqLwogCi1zdGF0aWMgdm9pZCBydF9tdXRlKHN0cnVjdCBydF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHJ0X211dGUoc3RydWN0IHJ0cmFjazIgKmRldikKIHsKLQlpZihkZXYtPm11dGVkKQorCWlmIChkZXYtPm11dGVkKQogCQlyZXR1cm47Ci0Jc3Bpbl9sb2NrKCZsb2NrKTsKLQlvdXRiKDEsIGlvKTsKLQlzcGluX3VubG9jaygmbG9jayk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlvdXRiKDEsIGRldi0+aW8pOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlkZXYtPm11dGVkID0gMTsKIH0KIAotc3RhdGljIHZvaWQgcnRfdW5tdXRlKHN0cnVjdCBydF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHJ0X3VubXV0ZShzdHJ1Y3QgcnRyYWNrMiAqZGV2KQogewogCWlmKGRldi0+bXV0ZWQgPT0gMCkKIAkJcmV0dXJuOwotCXNwaW5fbG9jaygmbG9jayk7Ci0Jb3V0YigwLCBpbyk7Ci0Jc3Bpbl91bmxvY2soJmxvY2spOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJb3V0YigwLCBkZXYtPmlvKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJZGV2LT5tdXRlZCA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIHplcm8odm9pZCkKK3N0YXRpYyB2b2lkIHplcm8oc3RydWN0IHJ0cmFjazIgKmRldikKIHsKLQlvdXRiX3AoMSwgaW8pOwotCW91dGJfcCgzLCBpbyk7Ci0Jb3V0Yl9wKDEsIGlvKTsKKwlvdXRiX3AoMSwgZGV2LT5pbyk7CisJb3V0Yl9wKDMsIGRldi0+aW8pOworCW91dGJfcCgxLCBkZXYtPmlvKTsKIH0KIAotc3RhdGljIHZvaWQgb25lKHZvaWQpCitzdGF0aWMgdm9pZCBvbmUoc3RydWN0IHJ0cmFjazIgKmRldikKIHsKLQlvdXRiX3AoNSwgaW8pOwotCW91dGJfcCg3LCBpbyk7Ci0Jb3V0Yl9wKDUsIGlvKTsKKwlvdXRiX3AoNSwgZGV2LT5pbyk7CisJb3V0Yl9wKDcsIGRldi0+aW8pOworCW91dGJfcCg1LCBkZXYtPmlvKTsKIH0KIAotc3RhdGljIGludCBydF9zZXRmcmVxKHN0cnVjdCBydF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmcmVxKQorc3RhdGljIGludCBydF9zZXRmcmVxKHN0cnVjdCBydHJhY2syICpkZXYsIHVuc2lnbmVkIGxvbmcgZnJlcSkKIHsKIAlpbnQgaTsKIAorCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJZGV2LT5jdXJmcmVxID0gZnJlcTsKIAlmcmVxID0gZnJlcSAvIDIwMCArIDg1NjsKIAotCXNwaW5fbG9jaygmbG9jayk7Ci0KLQlvdXRiX3AoMHhjOCwgaW8pOwotCW91dGJfcCgweGM5LCBpbyk7Ci0Jb3V0Yl9wKDB4YzksIGlvKTsKKwlvdXRiX3AoMHhjOCwgZGV2LT5pbyk7CisJb3V0Yl9wKDB4YzksIGRldi0+aW8pOworCW91dGJfcCgweGM5LCBkZXYtPmlvKTsKIAogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQotCQl6ZXJvICgpOworCQl6ZXJvKGRldik7CiAKIAlmb3IgKGkgPSAxNDsgaSA+PSAwOyBpLS0pCiAJCWlmIChmcmVxICYgKDEgPDwgaSkpCi0JCQlvbmUgKCk7CisJCQlvbmUoZGV2KTsKIAkJZWxzZQotCQkJemVybyAoKTsKKwkJCXplcm8oZGV2KTsKIAotCW91dGJfcCgweGM4LCBpbyk7CisJb3V0Yl9wKDB4YzgsIGRldi0+aW8pOwogCWlmICghZGV2LT5tdXRlZCkKLQkJb3V0Yl9wKDAsIGlvKTsKKwkJb3V0Yl9wKDAsIGRldi0+aW8pOwogCi0Jc3Bpbl91bmxvY2soJmxvY2spOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI5LDYxICsxMjAsNjEgQEAKIHsKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLXJ0cmFjazIiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiUmFkaW9UcmFjayBJSSIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIklTQSIpOworCXN0cmxjcHkodi0+YnVzX2luZm8sICJJU0EiLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKIAl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKLQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHYtPmluZGV4ID8gLUVJTlZBTCA6IDA7CiB9CiAKLXN0YXRpYyBpbnQgcnRfZ2V0c2lnc3RyKHN0cnVjdCBydF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcnRfZ2V0c2lnc3RyKHN0cnVjdCBydHJhY2syICpkZXYpCiB7Ci0JaWYgKGluYihpbykgJiAyKQkvKiBiaXQgc2V0ID0gbm8gc2lnbmFsIHByZXNlbnQJKi8KLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIDE7CQkvKiBzaWduYWwgcHJlc2VudAkJKi8KKwlpbnQgc2lnID0gMTsKKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJaWYgKGluYihkZXYtPmlvKSAmIDIpCS8qIGJpdCBzZXQgPSBubyBzaWduYWwgcHJlc2VudAkqLworCQlzaWcgPSAwOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwlyZXR1cm4gc2lnOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcnRyYWNrMiAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCXYtPnJhbmdlbG93ID0gKDg4KjE2MDAwKTsKLQl2LT5yYW5nZWhpZ2ggPSAoMTA4KjE2MDAwKTsKKwl2LT5yYW5nZWxvdyA9IDg4ICogMTYwMDA7CisJdi0+cmFuZ2VoaWdoID0gMTA4ICogMTYwMDA7CiAJdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CiAJdi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKIAl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0Jdi0+c2lnbmFsID0gMHhGRkZGKnJ0X2dldHNpZ3N0cihydCk7CisJdi0+c2lnbmFsID0gMHhGRkZGICogcnRfZ2V0c2lnc3RyKHJ0KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcnRyYWNrMiAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0JcnQtPmN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7Ci0JcnRfc2V0ZnJlcShydCwgcnQtPmN1cmZyZXEpOworCXJ0X3NldGZyZXEocnQsIGYtPmZyZXF1ZW5jeSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHJ0cmFjazIgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IHJ0LT5jdXJmcmVxOwpAQCAtMTkzLDE0ICsxODQsMTEgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKLQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKLQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCi0JCQkJCQlzaXplb2YoKnFjKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSwgNjU1MzUpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTIwOCw3ICsxOTYsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBydHJhY2syICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMjI3LDcgKzIxNSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHJ0cmFjazIgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0yNDYsMTcgKzIzNCw2IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JaWYgKGEtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQogewogCSppID0gMDsKQEAgLTI2NSwzNiArMjQyLDM4IEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQogewotCWlmIChpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBpID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCBydHJhY2syX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnRfZGV2aWNlIHJ0cmFjazJfdW5pdDsKLQotc3RhdGljIGludCBydHJhY2syX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBydHJhY2syX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJnJ0cmFjazJfdW5pdC5pbl91c2UpID8gLUVCVVNZIDogMDsKLX0KLQotc3RhdGljIGludCBydHJhY2syX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCWNsZWFyX2JpdCgwLCAmcnRyYWNrMl91bml0LmluX3VzZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgcnRyYWNrMl9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSBydHJhY2syX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHJ0cmFjazJfZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gcnRyYWNrMl9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IHJ0cmFjazJfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogfTsKIApAQCAtMzEzLDYyICsyOTIsNjEgQEAKIAkudmlkaW9jX3NfaW5wdXQgICAgID0gdmlkaW9jX3NfaW5wdXQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBydHJhY2syX3JhZGlvID0gewotCS5uYW1lCQk9ICJSYWRpb1RyYWNrIElJIHJhZGlvIiwKLQkuZm9wcyAgICAgICAgICAgPSAmcnRyYWNrMl9mb3BzLAotCS5pb2N0bF9vcHMgCT0gJnJ0cmFjazJfaW9jdGxfb3BzLAotCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCi19OwotCiBzdGF0aWMgaW50IF9faW5pdCBydHJhY2syX2luaXQodm9pZCkKIHsKLQlpZihpbz09LTEpCi0JewotCQlwcmludGsoS0VSTl9FUlIgIllvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4MjBjIG9yIGlvPTB4MzBjXG4iKTsKKwlzdHJ1Y3QgcnRyYWNrMiAqZGV2ID0gJnJ0cmFjazJfY2FyZDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJmRldi0+djRsMl9kZXY7CisJaW50IHJlczsKKworCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJydHJhY2syIiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CisJZGV2LT5pbyA9IGlvOworCWlmIChkZXYtPmlvID09IC0xKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHgyMGMgb3IgaW89MHgzMGNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbywgNCwgInJ0cmFjazIiKSkKLQl7Ci0JCXByaW50ayhLRVJOX0VSUiAicnRyYWNrMjogcG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBpbyk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihkZXYtPmlvLCA0LCAicnRyYWNrMiIpKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAicG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBkZXYtPmlvKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQl2aWRlb19zZXRfZHJ2ZGF0YSgmcnRyYWNrMl9yYWRpbywgJnJ0cmFjazJfdW5pdCk7CisJcmVzID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgdjRsMl9kZXYpOworCWlmIChyZXMgPCAwKSB7CisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW8sIDQpOworCQl2NGwyX2Vycih2NGwyX2RldiwgIkNvdWxkIG5vdCByZWdpc3RlciB2NGwyX2RldmljZVxuIik7CisJCXJldHVybiByZXM7CisJfQogCi0Jc3Bpbl9sb2NrX2luaXQoJmxvY2spOwotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnJ0cmFjazJfcmFkaW8sIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7Ci0JCXJlbGVhc2VfcmVnaW9uKGlvLCA0KTsKKwlzdHJsY3B5KGRldi0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKGRldi0+dmRldi5uYW1lKSk7CisJZGV2LT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJZGV2LT52ZGV2LmZvcHMgPSAmcnRyYWNrMl9mb3BzOworCWRldi0+dmRldi5pb2N0bF9vcHMgPSAmcnRyYWNrMl9pb2N0bF9vcHM7CisJZGV2LT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmZGV2LT52ZGV2LCBkZXYpOworCisJbXV0ZXhfaW5pdCgmZGV2LT5sb2NrKTsKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnZkZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOworCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvLCA0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiQUlNU2xhYiBSYWRpb3RyYWNrIElJIGNhcmQgZHJpdmVyLlxuIik7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiQUlNU2xhYiBSYWRpb3RyYWNrIElJIGNhcmQgZHJpdmVyLlxuIik7CiAKIAkvKiBtdXRlIGNhcmQgLSBwcmV2ZW50cyBub2lzeSBib290dXBzICovCi0Jb3V0YigxLCBpbyk7Ci0JcnRyYWNrMl91bml0Lm11dGVkID0gMTsKKwlvdXRiKDEsIGRldi0+aW8pOworCWRldi0+bXV0ZWQgPSAxOwogCiAJcmV0dXJuIDA7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIkJlbiBQZmFmZiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFJhZGlvVHJhY2sgSUkgcmFkaW8gY2FyZC4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBSYWRpb1RyYWNrIGNhcmQgKDB4MjBjIG9yIDB4MzBjKSIpOwotbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgcnRyYWNrMl9jbGVhbnVwX21vZHVsZSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHJ0cmFjazJfZXhpdCh2b2lkKQogewotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZydHJhY2syX3JhZGlvKTsKLQlyZWxlYXNlX3JlZ2lvbihpbyw0KTsKKwlzdHJ1Y3QgcnRyYWNrMiAqZGV2ID0gJnJ0cmFjazJfY2FyZDsKKworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOworCXJlbGVhc2VfcmVnaW9uKGRldi0+aW8sIDQpOwogfQogCiBtb2R1bGVfaW5pdChydHJhY2syX2luaXQpOwotbW9kdWxlX2V4aXQocnRyYWNrMl9jbGVhbnVwX21vZHVsZSk7Ci0KLS8qCi0gIExvY2FsIHZhcmlhYmxlczoKLSAgY29tcGlsZS1jb21tYW5kOiAibW1ha2UiCi0gIEVuZDoKLSovCittb2R1bGVfZXhpdChydHJhY2syX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1pLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbWkuYwppbmRleCBkMzU4ZTQ4Li5mNDc4NGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbWkuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbWkuYwpAQCAtMjIsMTEzICsyMiwxMDkgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YQkJCSovCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLwotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2lzYXBucC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5IHRvL2Zyb20gdXNlcgkJKi8KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBrZXJuZWwgcmFkaW8gc3RydWN0cwkJKi8KKyNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMCwyKQotCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7Ci0JewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS5uYW1lICAgICAgICAgID0gIk11dGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JfQotfTsKLQotc3RydWN0IGZtaV9kZXZpY2UKLXsKLQl1bnNpZ25lZCBsb25nIGluX3VzZTsKLQlpbnQgcG9ydDsKLQlpbnQgY3Vydm9sOyAvKiAxIG9yIDAgKi8KLQl1bnNpZ25lZCBsb25nIGN1cmZyZXE7IC8qIGZyZXEgaW4ga0h6ICovCi0JX191MzIgZmxhZ3M7Ci19OworTU9EVUxFX0FVVEhPUigiUGV0ciBWYW5kcm92ZWMsIHZhbmRyb3ZlQHZjLmN2dXQuY3ogYW5kIE0uIEtpcmt3b29kIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgU0YxNk1JIHJhZGlvLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgaW50IGlvID0gLTE7CiBzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Ci1zdGF0aWMgc3RydWN0IHBucF9kZXYgKmRldiA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IG11dGV4IGxvY2s7CisKK21vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgU0YxNk1JIGNhcmQgKDB4Mjg0IG9yIDB4Mzg0KSIpOworbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOworCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMikKKworc3RydWN0IGZtaQoreworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJaW50IGlvOworCWludCBjdXJ2b2w7IC8qIDEgb3IgMCAqLworCXVuc2lnbmVkIGxvbmcgY3VyZnJlcTsgLyogZnJlcSBpbiBrSHogKi8KKwlfX3UzMiBmbGFnczsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZm1pIGZtaV9jYXJkOworc3RhdGljIHN0cnVjdCBwbnBfZGV2ICpkZXY7CiAKIC8qIGZyZXEgaXMgaW4gMS8xNiBrSHogdG8gaW50ZXJuYWwgbnVtYmVyLCBodyBwcmVjaXNpb24gaXMgNTAga0h6ICovCiAvKiBJdCBpcyBvbmx5IHVzZWZ1bCB0byBnaXZlIGZyZXEgaW4gaW50ZXJ2YWxsIG9mIDgwMCAoPTAuMDVNaHopLAogICogb3RoZXIgYml0cyB3aWxsIGJlIHRydW5jYXRlZCwgZS5nIDkyLjc0MDAwMTYgLT4gOTIuNywgYnV0CiAgKiA5Mi43NDAwMDE3IC0+IDkyLjc1CiAgKi8KLSNkZWZpbmUgUlNGMTZfRU5DT0RFKHgpCSgoeCkvODAwKzIxNCkKLSNkZWZpbmUgUlNGMTZfTUlORlJFUSA4NyoxNjAwMAotI2RlZmluZSBSU0YxNl9NQVhGUkVRIDEwOCoxNjAwMAorI2RlZmluZSBSU0YxNl9FTkNPREUoeCkJKCh4KSAvIDgwMCArIDIxNCkKKyNkZWZpbmUgUlNGMTZfTUlORlJFUSAoODcgKiAxNjAwMCkKKyNkZWZpbmUgUlNGMTZfTUFYRlJFUSAoMTA4ICogMTYwMDApCiAKLXN0YXRpYyB2b2lkIG91dGJpdHMoaW50IGJpdHMsIHVuc2lnbmVkIGludCBkYXRhLCBpbnQgcG9ydCkKK3N0YXRpYyB2b2lkIG91dGJpdHMoaW50IGJpdHMsIHVuc2lnbmVkIGludCBkYXRhLCBpbnQgaW8pCiB7Ci0Jd2hpbGUoYml0cy0tKSB7Ci0JCWlmKGRhdGEgJiAxKSB7Ci0JCQlvdXRiKDUsIHBvcnQpOworCXdoaWxlIChiaXRzLS0pIHsKKwkJaWYgKGRhdGEgJiAxKSB7CisJCQlvdXRiKDUsIGlvKTsKIAkJCXVkZWxheSg2KTsKLQkJCW91dGIoNywgcG9ydCk7CisJCQlvdXRiKDcsIGlvKTsKIAkJCXVkZWxheSg2KTsKIAkJfSBlbHNlIHsKLQkJCW91dGIoMSwgcG9ydCk7CisJCQlvdXRiKDEsIGlvKTsKIAkJCXVkZWxheSg2KTsKLQkJCW91dGIoMywgcG9ydCk7CisJCQlvdXRiKDMsIGlvKTsKIAkJCXVkZWxheSg2KTsKIAkJfQotCQlkYXRhPj49MTsKKwkJZGF0YSA+Pj0gMTsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmbWlfbXV0ZShpbnQgcG9ydCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbWlfbXV0ZShzdHJ1Y3QgZm1pICpmbWkpCiB7Ci0JbXV0ZXhfbG9jaygmbG9jayk7Ci0Jb3V0YigweDAwLCBwb3J0KTsKLQltdXRleF91bmxvY2soJmxvY2spOworCW11dGV4X2xvY2soJmZtaS0+bG9jayk7CisJb3V0YigweDAwLCBmbWktPmlvKTsKKwltdXRleF91bmxvY2soJmZtaS0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmbWlfdW5tdXRlKGludCBwb3J0KQorc3RhdGljIGlubGluZSB2b2lkIGZtaV91bm11dGUoc3RydWN0IGZtaSAqZm1pKQogewotCW11dGV4X2xvY2soJmxvY2spOwotCW91dGIoMHgwOCwgcG9ydCk7Ci0JbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwltdXRleF9sb2NrKCZmbWktPmxvY2spOworCW91dGIoMHgwOCwgZm1pLT5pbyk7CisJbXV0ZXhfdW5sb2NrKCZmbWktPmxvY2spOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmbWlfc2V0ZnJlcShzdHJ1Y3QgZm1pX2RldmljZSAqZGV2KQorc3RhdGljIGlubGluZSBpbnQgZm1pX3NldGZyZXEoc3RydWN0IGZtaSAqZm1pLCB1bnNpZ25lZCBsb25nIGZyZXEpCiB7Ci0JaW50IG15cG9ydCA9IGRldi0+cG9ydDsKLQl1bnNpZ25lZCBsb25nIGZyZXEgPSBkZXYtPmN1cmZyZXE7CisJbXV0ZXhfbG9jaygmZm1pLT5sb2NrKTsKKwlmbWktPmN1cmZyZXEgPSBmcmVxOwogCi0JbXV0ZXhfbG9jaygmbG9jayk7Ci0KLQlvdXRiaXRzKDE2LCBSU0YxNl9FTkNPREUoZnJlcSksIG15cG9ydCk7Ci0Jb3V0Yml0cyg4LCAweEMwLCBteXBvcnQpOworCW91dGJpdHMoMTYsIFJTRjE2X0VOQ09ERShmcmVxKSwgZm1pLT5pbyk7CisJb3V0Yml0cyg4LCAweEMwLCBmbWktPmlvKTsKIAltc2xlZXAoMTQzKTsJCS8qIHdhcyBzY2hlZHVsZV90aW1lb3V0KEhaLzcpICovCi0JbXV0ZXhfdW5sb2NrKCZsb2NrKTsKLQlpZiAoZGV2LT5jdXJ2b2wpIGZtaV91bm11dGUobXlwb3J0KTsKKwltdXRleF91bmxvY2soJmZtaS0+bG9jayk7CisJaWYgKGZtaS0+Y3Vydm9sKQorCQlmbWlfdW5tdXRlKGZtaSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZtaV9nZXRzaWdzdHIoc3RydWN0IGZtaV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbmxpbmUgaW50IGZtaV9nZXRzaWdzdHIoc3RydWN0IGZtaSAqZm1pKQogewogCWludCB2YWw7CiAJaW50IHJlczsKLQlpbnQgbXlwb3J0ID0gZGV2LT5wb3J0OwogCi0KLQltdXRleF9sb2NrKCZsb2NrKTsKLQl2YWwgPSBkZXYtPmN1cnZvbCA/IDB4MDggOiAweDAwOwkvKiB1bm11dGUvbXV0ZSAqLwotCW91dGIodmFsLCBteXBvcnQpOwotCW91dGIodmFsIHwgMHgxMCwgbXlwb3J0KTsKKwltdXRleF9sb2NrKCZmbWktPmxvY2spOworCXZhbCA9IGZtaS0+Y3Vydm9sID8gMHgwOCA6IDB4MDA7CS8qIHVubXV0ZS9tdXRlICovCisJb3V0Yih2YWwsIGZtaS0+aW8pOworCW91dGIodmFsIHwgMHgxMCwgZm1pLT5pbyk7CiAJbXNsZWVwKDE0Myk7IAkJLyogd2FzIHNjaGVkdWxlX3RpbWVvdXQoSFovNykgKi8KLQlyZXMgPSAoaW50KWluYihteXBvcnQrMSk7Ci0Jb3V0Yih2YWwsIG15cG9ydCk7CisJcmVzID0gKGludClpbmIoZm1pLT5pbyArIDEpOworCW91dGIodmFsLCBmbWktPmlvKTsKIAotCW11dGV4X3VubG9jaygmbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZmbWktPmxvY2spOwogCXJldHVybiAocmVzICYgMikgPyAwIDogMHhGRkZGOwogfQogCkBAIC0xMzcsOSArMTMzLDkgQEAKIHsKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLXNmMTZmbWkiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiU0YxNi1GTXggcmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOwotCXNwcmludGYodi0+YnVzX2luZm8sICJJU0EiKTsKKwlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ3LDE4ICsxNDMsMTggQEAKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7CiAJaW50IG11bHQ7Ci0Jc3RydWN0IGZtaV9kZXZpY2UgKmZtaSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGZtaSAqZm1pID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAltdWx0ID0gKGZtaS0+ZmxhZ3MgJiBWNEwyX1RVTkVSX0NBUF9MT1cpID8gMSA6IDEwMDA7Ci0Jdi0+cmFuZ2Vsb3cgPSBSU0YxNl9NSU5GUkVRL211bHQ7Ci0Jdi0+cmFuZ2VoaWdoID0gUlNGMTZfTUFYRlJFUS9tdWx0OworCXYtPnJhbmdlbG93ID0gUlNGMTZfTUlORlJFUSAvIG11bHQ7CisJdi0+cmFuZ2VoaWdoID0gUlNGMTZfTUFYRlJFUSAvIG11bHQ7CiAJdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8gfCBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCXYtPmNhcGFiaWxpdHkgPSBmbWktPmZsYWdzJlY0TDJfVFVORVJfQ0FQX0xPVzsKKwl2LT5jYXBhYmlsaXR5ID0gZm1pLT5mbGFncyAmIFY0TDJfVFVORVJfQ0FQX0xPVzsKIAl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAl2LT5zaWduYWwgPSBmbWlfZ2V0c2lnc3RyKGZtaSk7CiAJcmV0dXJuIDA7CkBAIC0xNjcsMzIgKzE2MywyOSBAQAogc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0JaWYgKHYtPmluZGV4ID4gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHYtPmluZGV4ID8gLUVJTlZBTCA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IGZtaV9kZXZpY2UgKmZtaSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGZtaSAqZm1pID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICghKGZtaS0+ZmxhZ3MgJiBWNEwyX1RVTkVSX0NBUF9MT1cpKQogCQlmLT5mcmVxdWVuY3kgKj0gMTAwMDsKIAlpZiAoZi0+ZnJlcXVlbmN5IDwgUlNGMTZfTUlORlJFUSB8fAotCQkJZi0+ZnJlcXVlbmN5ID4gUlNGMTZfTUFYRlJFUSApCisJCQlmLT5mcmVxdWVuY3kgPiBSU0YxNl9NQVhGUkVRKQogCQlyZXR1cm4gLUVJTlZBTDsKLQkvKnJvdW5kaW5nIGluIHN0ZXBzIG9mIDgwMCB0byBtYXRjaCB0aCBmcmVxCi0JdGhhdCB3aWxsIGJlIHVzZWQgKi8KLQlmbWktPmN1cmZyZXEgPSAoZi0+ZnJlcXVlbmN5LzgwMCkqODAwOwotCWZtaV9zZXRmcmVxKGZtaSk7CisJLyogcm91bmRpbmcgaW4gc3RlcHMgb2YgODAwIHRvIG1hdGNoIHRoZSBmcmVxCisJICAgdGhhdCB3aWxsIGJlIHVzZWQgKi8KKwlmbWlfc2V0ZnJlcShmbWksIChmLT5mcmVxdWVuY3kgLyA4MDApICogODAwKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgZm1pX2RldmljZSAqZm1pID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZm1pICpmbWkgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gZm1pLT5jdXJmcmVxOwpAQCAtMjA0LDE0ICsxOTcsOSBAQAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKLQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKLQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCi0JCQkJCQlzaXplb2YoKnFjKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTIxOSw3ICsyMDcsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBmbWlfZGV2aWNlICpmbWkgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBmbWkgKmZtaSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMjMyLDMxICsyMjAsMjAgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgZm1pX2RldmljZSAqZm1pID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZm1pICpmbWkgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKIAkJaWYgKGN0cmwtPnZhbHVlKQotCQkJZm1pX211dGUoZm1pLT5wb3J0KTsKKwkJCWZtaV9tdXRlKGZtaSk7CiAJCWVsc2UKLQkJCWZtaV91bm11dGUoZm1pLT5wb3J0KTsKKwkJCWZtaV91bm11dGUoZm1pKTsKIAkJZm1pLT5jdXJ2b2wgPSBjdHJsLT52YWx1ZTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoYS0+aW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKLQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCiB7CiAJKmkgPSAwOwpAQCAtMjY1LDM2ICsyNDIsMzggQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgZm1pX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZm1pX2RldmljZSBmbWlfdW5pdDsKLQotc3RhdGljIGludCBmbWlfZXhjbHVzaXZlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGZtaV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZmbWlfdW5pdC5pbl91c2UpID8gLUVCVVNZIDogMDsKLX0KLQotc3RhdGljIGludCBmbWlfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JY2xlYXJfYml0KDAsICZmbWlfdW5pdC5pbl91c2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIGZtaV9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSBmbWlfZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gZm1pX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IGZtaV9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IGZtaV9yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiB9OwogCkBAIC0zMTMsMTMgKzI5Miw2IEBACiAJLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBmbWlfcmFkaW8gPSB7Ci0JLm5hbWUJCT0gIlNGMTZGTXggcmFkaW8iLAotCS5mb3BzICAgICAgICAgICA9ICZmbWlfZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZmbWlfaW9jdGxfb3BzLAotCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCi19OwotCiAvKiBsYWRpczogdGhpcyBpcyBteSBjYXJkLiBkb2VzIGFueSBvdGhlciB0eXBlcyBleGlzdD8gKi8KIHN0YXRpYyBzdHJ1Y3QgaXNhcG5wX2RldmljZV9pZCBpZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJewlJU0FQTlBfQU5ZX0lELCBJU0FQTlBfQU5ZX0lELApAQCAtMzQ0LDcgKzMxNiw3IEBACiAJaWYgKHBucF9kZXZpY2VfYXR0YWNoKGRldikgPCAwKQogCQlyZXR1cm4gLUVBR0FJTjsKIAlpZiAocG5wX2FjdGl2YXRlX2RldihkZXYpIDwgMCkgewotCQlwcmludGsgKCJyYWRpby1zZjE2Zm1pOiBQblAgY29uZmlndXJlIGZhaWxlZCAob3V0IG9mIHJlc291cmNlcz8pXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJyYWRpby1zZjE2Zm1pOiBQblAgY29uZmlndXJlIGZhaWxlZCAob3V0IG9mIHJlc291cmNlcz8pXG4iKTsKIAkJcG5wX2RldmljZV9kZXRhY2goZGV2KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMzU0LDU5ICszMjYsNzIgQEAKIAl9CiAKIAlpID0gcG5wX3BvcnRfc3RhcnQoZGV2LCAwKTsKLQlwcmludGsgKCJyYWRpby1zZjE2Zm1pOiBQblAgcmVwb3J0cyBjYXJkIGF0ICUjeFxuIiwgaSk7CisJcHJpbnRrKEtFUk5fSU5GTyAicmFkaW8tc2YxNmZtaTogUG5QIHJlcG9ydHMgY2FyZCBhdCAlI3hcbiIsIGkpOwogCiAJcmV0dXJuIGk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGZtaV9pbml0KHZvaWQpCiB7CisJc3RydWN0IGZtaSAqZm1pID0gJmZtaV9jYXJkOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmZm1pLT52NGwyX2RldjsKKwlpbnQgcmVzOworCiAJaWYgKGlvIDwgMCkKIAkJaW8gPSBpc2FwbnBfZm1pX3Byb2JlKCk7Ci0JaWYgKGlvIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgInJhZGlvLXNmMTZmbWk6IE5vIFBuUCBjYXJkIGZvdW5kLlxuIik7Ci0JCXJldHVybiBpbzsKKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAic2YxNmZtaSIsIHNpemVvZih2NGwyX2Rldi0+bmFtZSkpOworCWZtaS0+aW8gPSBpbzsKKwlpZiAoZm1pLT5pbyA8IDApIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJObyBQblAgY2FyZCBmb3VuZC5cbiIpOworCQlyZXR1cm4gZm1pLT5pbzsKIAl9CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbywgMiwgInJhZGlvLXNmMTZmbWkiKSkgewotCQlwcmludGsoS0VSTl9FUlIgInJhZGlvLXNmMTZmbWk6IHBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwgaW8pOworCQl2NGwyX2Vycih2NGwyX2RldiwgInBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwgZm1pLT5pbyk7CiAJCXBucF9kZXZpY2VfZGV0YWNoKGRldik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JZm1pX3VuaXQucG9ydCA9IGlvOwotCWZtaV91bml0LmN1cnZvbCA9IDA7Ci0JZm1pX3VuaXQuY3VyZnJlcSA9IDA7Ci0JZm1pX3VuaXQuZmxhZ3MgPSBWNEwyX1RVTkVSX0NBUF9MT1c7Ci0JdmlkZW9fc2V0X2RydmRhdGEoJmZtaV9yYWRpbywgJmZtaV91bml0KTsKKwlyZXMgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCB2NGwyX2Rldik7CisJaWYgKHJlcyA8IDApIHsKKwkJcmVsZWFzZV9yZWdpb24oZm1pLT5pbywgMik7CisJCXBucF9kZXZpY2VfZGV0YWNoKGRldik7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKKwkJcmV0dXJuIHJlczsKKwl9CiAKLQltdXRleF9pbml0KCZsb2NrKTsKKwlmbWktPmZsYWdzID0gVjRMMl9UVU5FUl9DQVBfTE9XOworCXN0cmxjcHkoZm1pLT52ZGV2Lm5hbWUsIHY0bDJfZGV2LT5uYW1lLCBzaXplb2YoZm1pLT52ZGV2Lm5hbWUpKTsKKwlmbWktPnZkZXYudjRsMl9kZXYgPSB2NGwyX2RldjsKKwlmbWktPnZkZXYuZm9wcyA9ICZmbWlfZm9wczsKKwlmbWktPnZkZXYuaW9jdGxfb3BzID0gJmZtaV9pb2N0bF9vcHM7CisJZm1pLT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmZm1pLT52ZGV2LCBmbWkpOwogCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZm1pX3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewotCQlyZWxlYXNlX3JlZ2lvbihpbywgMik7CisJbXV0ZXhfaW5pdCgmZm1pLT5sb2NrKTsKKworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmZtaS0+dmRldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKKwkJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CisJCXJlbGVhc2VfcmVnaW9uKGZtaS0+aW8sIDIpOworCQlwbnBfZGV2aWNlX2RldGFjaChkZXYpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJTRjE2Rk14IHJhZGlvIGNhcmQgZHJpdmVyIGF0IDB4JXhcbiIsIGlvKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJjYXJkIGRyaXZlciBhdCAweCV4XG4iLCBmbWktPmlvKTsKIAkvKiBtdXRlIGNhcmQgLSBwcmV2ZW50cyBub2lzeSBib290dXBzICovCi0JZm1pX211dGUoaW8pOworCWZtaV9tdXRlKGZtaSk7CiAJcmV0dXJuIDA7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIlBldHIgVmFuZHJvdmVjLCB2YW5kcm92ZUB2Yy5jdnV0LmN6IGFuZCBNLiBLaXJrd29vZCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFNGMTZNSSByYWRpby4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBTRjE2TUkgY2FyZCAoMHgyODQgb3IgMHgzODQpIik7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBmbWlfY2xlYW51cF9tb2R1bGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBmbWlfZXhpdCh2b2lkKQogewotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZmbWlfcmFkaW8pOwotCXJlbGVhc2VfcmVnaW9uKGlvLCAyKTsKKwlzdHJ1Y3QgZm1pICpmbWkgPSAmZm1pX2NhcmQ7CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZm1pLT52ZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZmbWktPnY0bDJfZGV2KTsKKwlyZWxlYXNlX3JlZ2lvbihmbWktPmlvLCAyKTsKIAlpZiAoZGV2KQogCQlwbnBfZGV2aWNlX2RldGFjaChkZXYpOwogfQogCiBtb2R1bGVfaW5pdChmbWlfaW5pdCk7Ci1tb2R1bGVfZXhpdChmbWlfY2xlYW51cF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZm1pX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jCmluZGV4IDkyZjE3YTMuLjBiYTlkODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMKQEAgLTE4LDQwICsxOCwyOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIEluaXRkYXRhCQkJKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24JCSovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogdWRlbGF5CQkJKi8KLSNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIJCSovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLwotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgbXV0ZXggbG9jazsKLQogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCisjaW5jbHVkZSA8bGludXgvaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisKK01PRFVMRV9BVVRIT1IoIlppZ2xpbyBGcmVkaWFubywgZnJlZGR5NzdAYW5nZWxmaXJlLmNvbSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFNGMTZGTVIyIHJhZGlvLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IGlvID0gMHgzODQ7CitzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7CisKK21vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgU0YxNkZNUjIgY2FyZCAoc2hvdWxkIGJlIDB4Mzg0LCBpZiBkbyBub3Qgd29yayB0cnkgMHgyODQpIik7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CisKICNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDAsMikKIAogI2RlZmluZSBBVURfVk9MX0lOREVYIDEKIAotc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0gewotCXsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMSwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCX0sCi0JW0FVRF9WT0xfSU5ERVhdID0gewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKLQkJLm5hbWUgICAgICAgICAgPSAiVm9sdW1lIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDE1LAotCQkuc3RlcCAgICAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMCwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCX0KLX07Ci0KICN1bmRlZiBERUJVRwogLy8jZGVmaW5lIERFQlVHIDEKIApAQCAtNjIsMTU2ICs1MCwxNjAgQEAKICNlbmRpZgogCiAvKiB0aGlzIHNob3VsZCBiZSBzdGF0aWMgdmFycyBmb3IgbW9kdWxlIHNpemUgKi8KLXN0cnVjdCBmbXIyX2RldmljZQorc3RydWN0IGZtcjIKIHsKLQl1bnNpZ25lZCBsb25nIGluX3VzZTsKLQlpbnQgcG9ydDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OworCXN0cnVjdCBtdXRleCBsb2NrOworCWludCBpbzsKIAlpbnQgY3Vydm9sOyAvKiAwLTE1ICovCiAJaW50IG11dGU7CiAJaW50IHN0ZXJlbzsgLyogY2FyZCBpcyBwcm9kdWNpbmcgc3RlcmVvIGF1ZGlvICovCiAJdW5zaWduZWQgbG9uZyBjdXJmcmVxOyAvKiBmcmVxIGluIGtIeiAqLwogCWludCBjYXJkX3R5cGU7Ci0JX191MzIgZmxhZ3M7CisJdTMyIGZsYWdzOwogfTsKIAotc3RhdGljIGludCBpbyA9IDB4Mzg0Owotc3RhdGljIGludCByYWRpb19uciA9IC0xOworc3RhdGljIHN0cnVjdCBmbXIyIGZtcjJfY2FyZDsKIAogLyogaHcgcHJlY2lzaW9uIGlzIDEyLjUga0h6CiAgKiBJdCBpcyBvbmx5IHVzZWZ1bCB0byBnaXZlIGZyZXEgaW4gaW50ZXJ2YWxsIG9mIDIwMCAoPTAuMDEyNU1oeiksCiAgKiBvdGhlciBiaXRzIHdpbGwgYmUgdHJ1bmNhdGVkCiAgKi8KLSNkZWZpbmUgUlNGMTZfRU5DT0RFKHgpCSgoeCkvMjAwKzg1NikKLSNkZWZpbmUgUlNGMTZfTUlORlJFUSA4NyoxNjAwMAotI2RlZmluZSBSU0YxNl9NQVhGUkVRIDEwOCoxNjAwMAorI2RlZmluZSBSU0YxNl9FTkNPREUoeCkJKCh4KSAvIDIwMCArIDg1NikKKyNkZWZpbmUgUlNGMTZfTUlORlJFUSAoODcgKiAxNjAwMCkKKyNkZWZpbmUgUlNGMTZfTUFYRlJFUSAoMTA4ICogMTYwMDApCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB3YWl0KGludCBuLGludCBwb3J0KQorc3RhdGljIGlubGluZSB2b2lkIHdhaXQoaW50IG4sIGludCBpbykKIHsKLQlmb3IgKDtuOy0tbikgaW5iKHBvcnQpOworCWZvciAoOyBuOyAtLW4pCisJCWluYihpbyk7CiB9CiAKLXN0YXRpYyB2b2lkIG91dGJpdHMoaW50IGJpdHMsIHVuc2lnbmVkIGludCBkYXRhLCBpbnQgbldhaXQsIGludCBwb3J0KQorc3RhdGljIHZvaWQgb3V0Yml0cyhpbnQgYml0cywgdW5zaWduZWQgaW50IGRhdGEsIGludCBuV2FpdCwgaW50IGlvKQogewogCWludCBiaXQ7Ci0JZm9yKDstLWJpdHM+PTA7KSB7Ci0JCWJpdCA9IChkYXRhPj5iaXRzKSAmIDE7Ci0JCW91dGIoYml0LHBvcnQpOwotCQl3YWl0KG5XYWl0LHBvcnQpOwotCQlvdXRiKGJpdHwyLHBvcnQpOwotCQl3YWl0KG5XYWl0LHBvcnQpOwotCQlvdXRiKGJpdCxwb3J0KTsKLQkJd2FpdChuV2FpdCxwb3J0KTsKKworCWZvciAoOyAtLWJpdHMgPj0gMDspIHsKKwkJYml0ID0gKGRhdGEgPj4gYml0cykgJiAxOworCQlvdXRiKGJpdCwgaW8pOworCQl3YWl0KG5XYWl0LCBpbyk7CisJCW91dGIoYml0IHwgMiwgaW8pOworCQl3YWl0KG5XYWl0LCBpbyk7CisJCW91dGIoYml0LCBpbyk7CisJCXdhaXQobldhaXQsIGlvKTsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmbXIyX211dGUoaW50IHBvcnQpCitzdGF0aWMgaW5saW5lIHZvaWQgZm1yMl9tdXRlKGludCBpbykKIHsKLQlvdXRiKDB4MDAsIHBvcnQpOwotCXdhaXQoNCxwb3J0KTsKKwlvdXRiKDB4MDAsIGlvKTsKKwl3YWl0KDQsIGlvKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZtcjJfdW5tdXRlKGludCBwb3J0KQorc3RhdGljIGlubGluZSB2b2lkIGZtcjJfdW5tdXRlKGludCBpbykKIHsKLQlvdXRiKDB4MDQsIHBvcnQpOwotCXdhaXQoNCxwb3J0KTsKKwlvdXRiKDB4MDQsIGlvKTsKKwl3YWl0KDQsIGlvKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZm1yMl9zdGVyZW9fbW9kZShpbnQgcG9ydCkKK3N0YXRpYyBpbmxpbmUgaW50IGZtcjJfc3RlcmVvX21vZGUoaW50IGlvKQogewotCWludCBuID0gaW5iKHBvcnQpOwotCW91dGIoNixwb3J0KTsKLQlpbmIocG9ydCk7Ci0JbiA9ICgobj4+MykmMSleMTsKKwlpbnQgbiA9IGluYihpbyk7CisKKwlvdXRiKDYsIGlvKTsKKwlpbmIoaW8pOworCW4gPSAoKG4gPj4gMykgJiAxKSBeIDE7CiAJZGVidWdfcHJpbnQoKEtFUk5fREVCVUcgInN0ZXJlbzogJWRcbiIsIG4pKTsKIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIGludCBmbXIyX3Byb2R1Y3RfaW5mbyhzdHJ1Y3QgZm1yMl9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZm1yMl9wcm9kdWN0X2luZm8oc3RydWN0IGZtcjIgKmRldikKIHsKLQlpbnQgbiA9IGluYihkZXYtPnBvcnQpOworCWludCBuID0gaW5iKGRldi0+aW8pOworCiAJbiAmPSAweEMxOwotCWlmIChuID09IDApCi0JeworCWlmIChuID09IDApIHsKIAkJLyogdGhpcyBzaG91bGQgc3VwcG9ydCB2b2x1bWUgc2V0ICovCiAJCWRldi0+Y2FyZF90eXBlID0gMTI7CiAJCXJldHVybiAwOwogCX0KIAkvKiBub3Qgdm9sdW1lIChtaW5lIGlzIDExKSAqLwotCWRldi0+Y2FyZF90eXBlID0gKG49PTEyOCk/MTE6MDsKKwlkZXYtPmNhcmRfdHlwZSA9IChuID09IDEyOCkgPyAxMSA6IDA7CiAJcmV0dXJuIG47CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZtcjJfZ2V0c2lnc3RyKHN0cnVjdCBmbXIyX2RldmljZSAqZGV2KQorc3RhdGljIGlubGluZSBpbnQgZm1yMl9nZXRzaWdzdHIoc3RydWN0IGZtcjIgKmRldikKIHsKLQkvKiAhISEgd29yayBvbmx5IGlmIHNjYW5uaW5nIGZyZXEgKi8KLQlpbnQgcG9ydCA9IGRldi0+cG9ydCwgcmVzID0gMHhmZmZmOwotCW91dGIoNSxwb3J0KTsKLQl3YWl0KDQscG9ydCk7Ci0JaWYgKCEoaW5iKHBvcnQpJjEpKSByZXMgPSAwOworCS8qICEhISB3b3JrcyBvbmx5IGlmIHNjYW5uaW5nIGZyZXEgKi8KKwlpbnQgcmVzID0gMHhmZmZmOworCisJb3V0Yig1LCBkZXYtPmlvKTsKKwl3YWl0KDQsIGRldi0+aW8pOworCWlmICghKGluYihkZXYtPmlvKSAmIDEpKQorCQlyZXMgPSAwOwogCWRlYnVnX3ByaW50KChLRVJOX0RFQlVHICJzaWduYWw6ICVkXG4iLCByZXMpKTsKIAlyZXR1cm4gcmVzOwogfQogCiAvKiBzZXQgZnJlcXVlbmN5IGFuZCB1bm11dGUgY2FyZCAqLwotc3RhdGljIGludCBmbXIyX3NldGZyZXEoc3RydWN0IGZtcjJfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGZtcjJfc2V0ZnJlcShzdHJ1Y3QgZm1yMiAqZGV2KQogewotCWludCBwb3J0ID0gZGV2LT5wb3J0OwogCXVuc2lnbmVkIGxvbmcgZnJlcSA9IGRldi0+Y3VyZnJlcTsKIAotCWZtcjJfbXV0ZShwb3J0KTsKKwlmbXIyX211dGUoZGV2LT5pbyk7CiAKIAkvKiAweDQyIGZvciBtb25vIG91dHB1dAogCSAqIDB4MTAyIGZvcndhcmQgc2Nhbm5pbmcKIAkgKiAweDE4MiBzY2Fuc2lvbmUgYXZhbnRpCiAJICovCi0Jb3V0Yml0cyg5LDB4MiwzLHBvcnQpOwotCW91dGJpdHMoMTYsUlNGMTZfRU5DT0RFKGZyZXEpLDIscG9ydCk7CisJb3V0Yml0cyg5LCAweDIsIDMsIGRldi0+aW8pOworCW91dGJpdHMoMTYsIFJTRjE2X0VOQ09ERShmcmVxKSwgMiwgZGV2LT5pbyk7CiAKLQlmbXIyX3VubXV0ZShwb3J0KTsKKwlmbXIyX3VubXV0ZShkZXYtPmlvKTsKIAogCS8qIHdhaXQgMC4xMSBzZWMgKi8KIAltc2xlZXAoMTEwKTsKIAogCS8qIE5PVEUgaWYgbXV0ZSB0aGlzIHN0b3AgcmFkaW8KIAkgICB5b3UgbXVzdCBzZXQgZnJlcSBvbiB1bm11dGUgKi8KLQlkZXYtPnN0ZXJlbyA9IGZtcjJfc3RlcmVvX21vZGUocG9ydCk7CisJZGV2LT5zdGVyZW8gPSBmbXIyX3N0ZXJlb19tb2RlKGRldi0+aW8pOwogCXJldHVybiAwOwogfQogCiAvKiAhISEgbm90IHRlc3RlZCwgaW4gbXkgY2FyZCB0aGlzIGRvZXMndCB3b3JrICEhISAqLwotc3RhdGljIGludCBmbXIyX3NldHZvbHVtZShzdHJ1Y3QgZm1yMl9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZm1yMl9zZXR2b2x1bWUoc3RydWN0IGZtcjIgKmRldikKIHsKIAlpbnQgdm9sWzE2XSA9IHsgMHgwMjEsIDB4MDg0LCAweDA5MCwgMHgxMDQsCiAJCQkweDExMCwgMHgyMDQsIDB4MjEwLCAweDQwMiwKIAkJCTB4NDA0LCAweDQwOCwgMHg0MTAsIDB4ODAxLAogCQkJMHg4MDIsIDB4ODA0LCAweDgwOCwgMHg4MTAgfTsKLQlpbnQgaSwgYSwgcG9ydCA9IGRldi0+cG9ydDsKKwlpbnQgaSwgYTsKIAlpbnQgbiA9IHZvbFtkZXYtPmN1cnZvbCAmIDB4MGZdOwogCiAJaWYgKGRldi0+Y2FyZF90eXBlICE9IDExKQogCQlyZXR1cm4gMTsKIAogCWZvciAoaSA9IDEyOyAtLWkgPj0gMDsgKSB7Ci0JCWEgPSAoKG4gPj4gaSkgJiAxKSA8PCA2OyAvKiBpZiAoYT0wKSBhPSAwOyBlbHNlIGE9IDB4NDA7ICovCi0JCW91dGIoYSB8IDQsIHBvcnQpOwotCQl3YWl0KDQsIHBvcnQpOwotCQlvdXRiKGEgfCAweDI0LCBwb3J0KTsKLQkJd2FpdCg0LCBwb3J0KTsKLQkJb3V0YihhIHwgNCwgcG9ydCk7Ci0JCXdhaXQoNCwgcG9ydCk7CisJCWEgPSAoKG4gPj4gaSkgJiAxKSA8PCA2OyAvKiBpZiAoYT09MCkgYSA9IDA7IGVsc2UgYSA9IDB4NDA7ICovCisJCW91dGIoYSB8IDQsIGRldi0+aW8pOworCQl3YWl0KDQsIGRldi0+aW8pOworCQlvdXRiKGEgfCAweDI0LCBkZXYtPmlvKTsKKwkJd2FpdCg0LCBkZXYtPmlvKTsKKwkJb3V0YihhIHwgNCwgZGV2LT5pbyk7CisJCXdhaXQoNCwgZGV2LT5pbyk7CiAJfQogCWZvciAoaSA9IDY7IC0taSA+PSAwOyApIHsKIAkJYSA9ICgoMHgxOCA+PiBpKSAmIDEpIDw8IDY7Ci0JCW91dGIoYSB8IDQsIHBvcnQpOwotCQl3YWl0KDQscG9ydCk7Ci0JCW91dGIoYSB8IDB4MjQsIHBvcnQpOwotCQl3YWl0KDQscG9ydCk7Ci0JCW91dGIoYXw0LCBwb3J0KTsKLQkJd2FpdCg0LHBvcnQpOworCQlvdXRiKGEgfCA0LCBkZXYtPmlvKTsKKwkJd2FpdCg0LCBkZXYtPmlvKTsKKwkJb3V0YihhIHwgMHgyNCwgZGV2LT5pbyk7CisJCXdhaXQoNCwgZGV2LT5pbyk7CisJCW91dGIoYSB8IDQsIGRldi0+aW8pOworCQl3YWl0KDQsIGRldi0+aW8pOwogCX0KLQl3YWl0KDQsIHBvcnQpOwotCW91dGIoMHgxNCwgcG9ydCk7Ci0KKwl3YWl0KDQsIGRldi0+aW8pOworCW91dGIoMHgxNCwgZGV2LT5pbyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyMCw5ICsyMTIsOSBAQAogewogCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tc2YxNmZtcjIiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiU0YxNi1GTVIyIHJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiSVNBIik7CisJc3RybGNweSh2LT5idXNfaW5mbywgIklTQSIsIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzMCw1NCArMjIyLDUyIEBACiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewogCWludCBtdWx0OwotCXN0cnVjdCBmbXIyX2RldmljZSAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGZtcjIgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCiAJbXVsdCA9IChmbXIyLT5mbGFncyAmIFY0TDJfVFVORVJfQ0FQX0xPVykgPyAxIDogMTAwMDsKLQl2LT5yYW5nZWxvdyA9IFJTRjE2X01JTkZSRVEvbXVsdDsKLQl2LT5yYW5nZWhpZ2ggPSBSU0YxNl9NQVhGUkVRL211bHQ7CisJdi0+cmFuZ2Vsb3cgPSBSU0YxNl9NSU5GUkVRIC8gbXVsdDsKKwl2LT5yYW5nZWhpZ2ggPSBSU0YxNl9NQVhGUkVRIC8gbXVsdDsKIAl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTyB8IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CiAJdi0+Y2FwYWJpbGl0eSA9IGZtcjItPmZsYWdzJlY0TDJfVFVORVJfQ0FQX0xPVzsKIAl2LT5hdWRtb2RlID0gZm1yMi0+c3RlcmVvID8gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKIAkJCQlWNEwyX1RVTkVSX01PREVfTU9OTzsKLQltdXRleF9sb2NrKCZsb2NrKTsKKwltdXRleF9sb2NrKCZmbXIyLT5sb2NrKTsKIAl2LT5zaWduYWwgPSBmbXIyX2dldHNpZ3N0cihmbXIyKTsKLQltdXRleF91bmxvY2soJmxvY2spOworCW11dGV4X3VubG9jaygmZm1yMi0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOworCXJldHVybiB2LT5pbmRleCA/IC1FSU5WQUwgOiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBmbXIyX2RldmljZSAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGZtcjIgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKCEoZm1yMi0+ZmxhZ3MgJiBWNEwyX1RVTkVSX0NBUF9MT1cpKQogCQlmLT5mcmVxdWVuY3kgKj0gMTAwMDsKIAlpZiAoZi0+ZnJlcXVlbmN5IDwgUlNGMTZfTUlORlJFUSB8fAotCQkJZi0+ZnJlcXVlbmN5ID4gUlNGMTZfTUFYRlJFUSApCisJCQlmLT5mcmVxdWVuY3kgPiBSU0YxNl9NQVhGUkVRKQogCQlyZXR1cm4gLUVJTlZBTDsKLQkvKnJvdW5kaW5nIGluIHN0ZXBzIG9mIDIwMCB0byBtYXRjaCB0aCBmcmVxCi0JdGhhdCB3aWxsIGJlIHVzZWQgKi8KLQlmbXIyLT5jdXJmcmVxID0gKGYtPmZyZXF1ZW5jeS8yMDApKjIwMDsKKwkvKiByb3VuZGluZyBpbiBzdGVwcyBvZiAyMDAgdG8gbWF0Y2ggdGhlIGZyZXEKKwkgICB0aGF0IHdpbGwgYmUgdXNlZCAqLworCWZtcjItPmN1cmZyZXEgPSAoZi0+ZnJlcXVlbmN5IC8gMjAwKSAqIDIwMDsKIAogCS8qIHNldCBjYXJkIGZyZXEgKGlmIG5vdCBtdXRlZCkgKi8KIAlpZiAoZm1yMi0+Y3Vydm9sICYmICFmbXIyLT5tdXRlKSB7Ci0JCW11dGV4X2xvY2soJmxvY2spOworCQltdXRleF9sb2NrKCZmbXIyLT5sb2NrKTsKIAkJZm1yMl9zZXRmcmVxKGZtcjIpOwotCQltdXRleF91bmxvY2soJmxvY2spOworCQltdXRleF91bmxvY2soJmZtcjItPmxvY2spOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTI4NSw3ICsyNzUsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgZm1yMl9kZXZpY2UgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBmbXIyICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IGZtcjItPmN1cmZyZXE7CkBAIC0yOTcsMTMgKzI4NywxNiBAQAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCWludCBpOworCXN0cnVjdCBmbXIyICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7Ci0JCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICZyYWRpb19xY3RybFtpXSwgc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJLyogT25seSBjYXJkX3R5cGUgPT0gMTEgaW1wbGVtZW50cyB2b2x1bWUgKi8KKwkJaWYgKGZtcjItPmNhcmRfdHlwZSA9PSAxMSkKKwkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMTUsIDEsIDApOworCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDApOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTMxMSw3ICszMDQsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBmbXIyX2RldmljZSAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGZtcjIgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTMyNywxOCArMzIwLDE0IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGZtcjJfZGV2aWNlICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZm1yMiAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCQlmbXIyLT5tdXRlID0gY3RybC0+dmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQlpZiAoY3RybC0+dmFsdWUgPiByYWRpb19xY3RybFtBVURfVk9MX0lOREVYXS5tYXhpbXVtKQotCQkJZm1yMi0+Y3Vydm9sID0gcmFkaW9fcWN0cmxbQVVEX1ZPTF9JTkRFWF0ubWF4aW11bTsKLQkJZWxzZQotCQkJZm1yMi0+Y3Vydm9sID0gY3RybC0+dmFsdWU7Ci0KKwkJZm1yMi0+Y3Vydm9sID0gY3RybC0+dmFsdWU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzUxLDI1ICszNDAsMTQgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIm11dGVcbiIpOwogI2VuZGlmCiAKLQltdXRleF9sb2NrKCZsb2NrKTsKKwltdXRleF9sb2NrKCZmbXIyLT5sb2NrKTsKIAlpZiAoZm1yMi0+Y3Vydm9sICYmICFmbXIyLT5tdXRlKSB7CiAJCWZtcjJfc2V0dm9sdW1lKGZtcjIpOwogCQkvKiBTZXQgZnJlcXVlbmN5IGFuZCB1bm11dGUgY2FyZCAqLwogCQlmbXIyX3NldGZyZXEoZm1yMik7CiAJfSBlbHNlCi0JCWZtcjJfbXV0ZShmbXIyLT5wb3J0KTsKLQltdXRleF91bmxvY2soJmxvY2spOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoYS0+aW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKLQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCQlmbXIyX211dGUoZm1yMi0+aW8pOworCW11dGV4X3VubG9jaygmZm1yMi0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM4MSwzNiArMzU5LDM4IEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQogewotCWlmIChpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBpID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWEtPmluZGV4ID0gMDsKKwlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCiB7Ci0JaWYgKGEtPmluZGV4ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBhLT5pbmRleCA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IGZtcjJfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmbXIyX2RldmljZSBmbXIyX3VuaXQ7Ci0KLXN0YXRpYyBpbnQgZm1yMl9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgZm1yMl9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZmbXIyX3VuaXQuaW5fdXNlKSA/IC1FQlVTWSA6IDA7Ci19Ci0KLXN0YXRpYyBpbnQgZm1yMl9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQljbGVhcl9iaXQoMCwgJmZtcjJfdW5pdC5pbl91c2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIGZtcjJfZm9wcyA9IHsKIAkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSBmbXIyX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IGZtcjJfZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gZm1yMl9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IGZtcjJfcmVsZWFzZSwKIAkuaW9jdGwgICAgICAgICAgPSB2aWRlb19pb2N0bDIsCiB9OwogCkBAIC00MjksNjcgKzQwOSw2NCBAQAogCS52aWRpb2Nfc19jdHJsICAgICAgPSB2aWRpb2Nfc19jdHJsLAogfTsKIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgZm1yMl9yYWRpbyA9IHsKLQkubmFtZQkJPSAiU0YxNkZNUjIgcmFkaW8iLAotCS5mb3BzCQk9ICZmbXIyX2ZvcHMsCi0JLmlvY3RsX29wcyAJPSAmZm1yMl9pb2N0bF9vcHMsCi0JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IGZtcjJfaW5pdCh2b2lkKQogewotCWZtcjJfdW5pdC5wb3J0ID0gaW87Ci0JZm1yMl91bml0LmN1cnZvbCA9IDA7Ci0JZm1yMl91bml0Lm11dGUgPSAwOwotCWZtcjJfdW5pdC5jdXJmcmVxID0gMDsKLQlmbXIyX3VuaXQuc3RlcmVvID0gMTsKLQlmbXIyX3VuaXQuZmxhZ3MgPSBWNEwyX1RVTkVSX0NBUF9MT1c7Ci0JZm1yMl91bml0LmNhcmRfdHlwZSA9IDA7Ci0JdmlkZW9fc2V0X2RydmRhdGEoJmZtcjJfcmFkaW8sICZmbXIyX3VuaXQpOworCXN0cnVjdCBmbXIyICpmbXIyID0gJmZtcjJfY2FyZDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJmZtcjItPnY0bDJfZGV2OworCWludCByZXM7CiAKLQltdXRleF9pbml0KCZsb2NrKTsKKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAic2YxNmZtcjIiLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKKwlmbXIyLT5pbyA9IGlvOworCWZtcjItPnN0ZXJlbyA9IDE7CisJZm1yMi0+ZmxhZ3MgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CisJbXV0ZXhfaW5pdCgmZm1yMi0+bG9jayk7CiAKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLCAyLCAic2YxNmZtcjIiKSkgewotCQlwcmludGsoS0VSTl9FUlIgInJhZGlvLXNmMTZmbXIyOiByZXF1ZXN0X3JlZ2lvbiBmYWlsZWQhXG4iKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGZtcjItPmlvLCAyLCAic2YxNmZtcjIiKSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgInJlcXVlc3RfcmVnaW9uIGZhaWxlZCFcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmZtcjJfcmFkaW8sIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7Ci0JCXJlbGVhc2VfcmVnaW9uKGlvLCAyKTsKKwlyZXMgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCB2NGwyX2Rldik7CisJaWYgKHJlcyA8IDApIHsKKwkJcmVsZWFzZV9yZWdpb24oZm1yMi0+aW8sIDIpOworCQl2NGwyX2Vycih2NGwyX2RldiwgIkNvdWxkIG5vdCByZWdpc3RlciB2NGwyX2RldmljZVxuIik7CisJCXJldHVybiByZXM7CisJfQorCisJc3RybGNweShmbXIyLT52ZGV2Lm5hbWUsIHY0bDJfZGV2LT5uYW1lLCBzaXplb2YoZm1yMi0+dmRldi5uYW1lKSk7CisJZm1yMi0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCWZtcjItPnZkZXYuZm9wcyA9ICZmbXIyX2ZvcHM7CisJZm1yMi0+dmRldi5pb2N0bF9vcHMgPSAmZm1yMl9pb2N0bF9vcHM7CisJZm1yMi0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJdmlkZW9fc2V0X2RydmRhdGEoJmZtcjItPnZkZXYsIGZtcjIpOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZm1yMi0+dmRldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKKwkJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CisJCXJlbGVhc2VfcmVnaW9uKGZtcjItPmlvLCAyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiU0YxNkZNUjIgcmFkaW8gY2FyZCBkcml2ZXIgYXQgMHgleC5cbiIsIGlvKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJTRjE2Rk1SMiByYWRpbyBjYXJkIGRyaXZlciBhdCAweCV4LlxuIiwgZm1yMi0+aW8pOwogCS8qIG11dGUgY2FyZCAtIHByZXZlbnRzIG5vaXN5IGJvb3R1cHMgKi8KLQltdXRleF9sb2NrKCZsb2NrKTsKLQlmbXIyX211dGUoaW8pOwotCWZtcjJfcHJvZHVjdF9pbmZvKCZmbXIyX3VuaXQpOwotCW11dGV4X3VubG9jaygmbG9jayk7Ci0JZGVidWdfcHJpbnQoKEtFUk5fREVCVUcgImNhcmRfdHlwZSAlZFxuIiwgZm1yMl91bml0LmNhcmRfdHlwZSkpOwotCi0JLyogT25seSBjYXJkX3R5cGUgPT0gMTEgaW1wbGVtZW50cyB2b2x1bWUgKi8KLQlpZiAoZm1yMl91bml0LmNhcmRfdHlwZSAhPSAxMSkKLQkJcmFkaW9fcWN0cmxbQVVEX1ZPTF9JTkRFWF0ubWF4aW11bSA9IDE7Ci0KKwltdXRleF9sb2NrKCZmbXIyLT5sb2NrKTsKKwlmbXIyX211dGUoZm1yMi0+aW8pOworCWZtcjJfcHJvZHVjdF9pbmZvKGZtcjIpOworCW11dGV4X3VubG9jaygmZm1yMi0+bG9jayk7CisJZGVidWdfcHJpbnQoKEtFUk5fREVCVUcgImNhcmRfdHlwZSAlZFxuIiwgZm1yMi0+Y2FyZF90eXBlKSk7CiAJcmV0dXJuIDA7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIlppZ2xpbyBGcmVkaWFubywgZnJlZGR5NzdAYW5nZWxmaXJlLmNvbSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFNGMTZGTVIyIHJhZGlvLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFNGMTZGTVIyIGNhcmQgKHNob3VsZCBiZSAweDM4NCwgaWYgZG8gbm90IHdvcmsgdHJ5IDB4Mjg0KSIpOwotbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZm1yMl9jbGVhbnVwX21vZHVsZSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGZtcjJfZXhpdCh2b2lkKQogewotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZmbXIyX3JhZGlvKTsKLQlyZWxlYXNlX3JlZ2lvbihpbywyKTsKKwlzdHJ1Y3QgZm1yMiAqZm1yMiA9ICZmbXIyX2NhcmQ7CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZm1yMi0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZm1yMi0+djRsMl9kZXYpOworCXJlbGVhc2VfcmVnaW9uKGZtcjItPmlvLCAyKTsKIH0KIAogbW9kdWxlX2luaXQoZm1yMl9pbml0KTsKLW1vZHVsZV9leGl0KGZtcjJfY2xlYW51cF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZm1yMl9leGl0KTsKIAogI2lmbmRlZiBNT0RVTEUKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MHguYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzB4LmMKaW5kZXggNGRmZWQ2YS4uNzEzZTI0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MHguYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jCkBAIC01LDggKzUsOSBAQAogICogICAtIFNpbGljb24gTGFicyBVU0IgRk0gUmFkaW8gUmVmZXJlbmNlIERlc2lnbgogICogICAtIEFEUy9UZWNoIEZNIFJhZGlvIFJlY2VpdmVyIChmb3JtZXJseSBJbnN0YW50IEZNIE11c2ljKSAoUkRYLTE1NS1FRikKICAqICAgLSBLV29ybGQgVVNCIEZNIFJhZGlvIFNuYXBNdXNpYyBNb2JpbGUgNzAwIChGTTcwMCkKKyAqICAgLSBTYW5laSBFbGVjdHJpYywgSW5jLiBGTSBVU0IgUmFkaW8gKHNvbGQgYXMgRGVhbEV4dHJlbWUuY29tIFBDZWFyKQogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDggVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PgorICogIENvcHlyaWdodCAoYykgMjAwOSBUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yOSw3ICszMCw3IEBACiAgKiAyMDA4LTAxLTEyCVRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KICAqCQlWZXJzaW9uIDEuMC4wCiAgKgkJLSBGaXJzdCB3b3JraW5nIHZlcnNpb24KLSAqIDIwMDgtMDEtMTMgICBUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+CisgKiAyMDA4LTAxLTEzCVRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KICAqCQlWZXJzaW9uIDEuMC4xCiAgKgkJLSBJbXByb3ZlZCBlcnJvciBoYW5kbGluZywgZXZlcnkgZnVuY3Rpb24gbm93IHJldHVybnMgZXJybm8KICAqCQktIEltcHJvdmVkIG11bHRpIHVzZXIgYWNjZXNzIChzdGFydC9tdXRlL3N0b3ApCkBAIC0xMDQsNiArMTA1LDcgQEAKICAqIDIwMDktMDEtMzEJUmljayBCcm9uc29uIDxyaWNrQGVmbi5vcmc+CiAgKgkJVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PgogICoJCS0gYWRkIExFRCBzdGF0dXMgb3V0cHV0CisgKgkJLSBnZXQgSFcvU1cgdmVyc2lvbiBmcm9tIHNjcmF0Y2hwYWQKICAqCiAgKiBUb0RvOgogICogLSBhZGQgZmlybXdhcmUgZG93bmxvYWQvdXBkYXRlIHN1cHBvcnQKQEAgLTExNCwxMCArMTE2LDEwIEBACiAvKiBkcml2ZXIgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PiIKICNkZWZpbmUgRFJJVkVSX05BTUUgInJhZGlvLXNpNDcweCIKLSNkZWZpbmUgRFJJVkVSX0tFUk5FTF9WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDEsIDAsIDgpCisjZGVmaW5lIERSSVZFUl9LRVJORUxfVkVSU0lPTiBLRVJORUxfVkVSU0lPTigxLCAwLCA5KQogI2RlZmluZSBEUklWRVJfQ0FSRCAiU2lsaWNvbiBMYWJzIFNpNDcweCBGTSBSYWRpbyBSZWNlaXZlciIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiByYWRpbyBkcml2ZXIgZm9yIFNpNDcweCBGTSBSYWRpbyBSZWNlaXZlcnMiCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxLjAuOCIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuMC45IgogCiAKIC8qIGtlcm5lbCBpbmNsdWRlcyAqLwpAQCAtMTQ1LDcgKzE0Nyw3IEBACiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDA2ZTEsIDB4YTE1NSwgVVNCX0NMQVNTX0hJRCwgMCwgMCkgfSwKIAkvKiBLV29ybGQgVVNCIEZNIFJhZGlvIFNuYXBNdXNpYyBNb2JpbGUgNzAwIChGTTcwMCkgKi8KIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MWI4MCwgMHhkNzAwLCBVU0JfQ0xBU1NfSElELCAwLCAwKSB9LAotCS8qIERlYWxFeHRyZW1lIFVTQiBSYWRpbyAqLworCS8qIFNhbmVpIEVsZWN0cmljLCBJbmMuIEZNIFVTQiBSYWRpbyAoc29sZCBhcyBEZWFsRXh0cmVtZS5jb20gUENlYXIpICovCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDEwYzUsIDB4ODE5YSwgVVNCX0NMQVNTX0hJRCwgMCwgMCkgfSwKIAkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogCXsgfQpAQCAtMzQ1LDcgKzM0Nyw3IEBACiAKIC8qIFJlcG9ydCAxOTogc3RyZWFtICovCiAjZGVmaW5lIFNUUkVBTV9SRVBPUlRfU0laRQkzCi0jZGVmaW5lCVNUUkVBTV9SRVBPUlQJCTE5CisjZGVmaW5lIFNUUkVBTV9SRVBPUlQJCTE5CiAKIC8qIFJlcG9ydCAyMDogc2NyYXRjaCAqLwogI2RlZmluZSBTQ1JBVENIX1BBR0VfU0laRQk2MwpAQCAtMzUzLDkgKzM1NSwxMyBAQAogI2RlZmluZSBTQ1JBVENIX1JFUE9SVAkJMjAKIAogLyogUmVwb3J0cyAxOS0yMjogZmxhc2ggdXBncmFkZSBvZiB0aGUgQzgwNTFGMzIxICovCisjZGVmaW5lIFdSSVRFX1JFUE9SVF9TSVpFCTQKICNkZWZpbmUgV1JJVEVfUkVQT1JUCQkxOQorI2RlZmluZSBGTEFTSF9SRVBPUlRfU0laRQk2NAogI2RlZmluZSBGTEFTSF9SRVBPUlQJCTIwCisjZGVmaW5lIENSQ19SRVBPUlRfU0laRQkJMwogI2RlZmluZSBDUkNfUkVQT1JUCQkyMQorI2RlZmluZSBSRVNQT05TRV9SRVBPUlRfU0laRQkyCiAjZGVmaW5lIFJFU1BPTlNFX1JFUE9SVAkJMjIKIAogLyogUmVwb3J0IDIzOiBjdXJyZW50bHkgdW51c2VkLCBidXQgY2FuIGFjY2VwdCA2MCBieXRlIHJlcG9ydHMgb24gdGhlIEhJRCAqLwpAQCAtNDE0LDcgKzQyMCw3IEBACiAKIC8qIGJvb3Rsb2FkZXIgY29tbWFuZHMgKi8KICNkZWZpbmUgR0VUX1NXX1ZFUlNJT05fQ09NTUFORAkweDAwCi0jZGVmaW5lCVNFVF9QQUdFX0NPTU1BTkQJMHgwMQorI2RlZmluZSBTRVRfUEFHRV9DT01NQU5ECTB4MDEKICNkZWZpbmUgRVJBU0VfUEFHRV9DT01NQU5ECTB4MDIKICNkZWZpbmUgV1JJVEVfUEFHRV9DT01NQU5ECTB4MDMKICNkZWZpbmUgQ1JDX09OX1BBR0VfQ09NTUFORAkweDA0CkBAIC00MjgsMTIgKzQzNCw2IEBACiAjZGVmaW5lIENPTU1BTkRfRkFJTEVECQkweDAyCiAjZGVmaW5lIENPTU1BTkRfUEVORElORwkJMHgwMwogCi0vKiBidWZmZXIgc2l6ZXMgKi8KLSNkZWZpbmUgQ09NTUFORF9CVUZGRVJfU0laRQk0Ci0jZGVmaW5lIFJFU1BPTlNFX0JVRkZFUl9TSVpFCTIKLSNkZWZpbmUgRkxBU0hfQlVGRkVSX1NJWkUJNjQKLSNkZWZpbmUgQ1JDX0JVRkZFUl9TSVpFCQkzCi0KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ2NSw2ICs0NjUsMTAgQEAKIAl1bnNpZ25lZCBpbnQgYnVmX3NpemU7CiAJdW5zaWduZWQgaW50IHJkX2luZGV4OwogCXVuc2lnbmVkIGludCB3cl9pbmRleDsKKworCS8qIHNjcmF0Y2ggcGFnZSAqLworCXVuc2lnbmVkIGNoYXIgc29mdHdhcmVfdmVyc2lvbjsKKwl1bnNpZ25lZCBjaGFyIGhhcmR3YXJlX3ZlcnNpb247CiB9OwogCiAKQEAgLTQ4MCw3ICs0ODQsNyBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogR2VuZXJhbCBEcml2ZXIgRnVuY3Rpb25zCisgKiBHZW5lcmFsIERyaXZlciBGdW5jdGlvbnMgLSBSRUdJU1RFUl9SRVBPUlRzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCkBAIC01NjYsNjAgKzU3MCw2IEBACiAKIAogLyoKLSAqIHNpNDcweF9nZXRfYWxsX3JlZ2lzdGVycyAtIHJlYWQgZW50aXJlIHJlZ2lzdGVycwotICovCi1zdGF0aWMgaW50IHNpNDcweF9nZXRfYWxsX3JlZ2lzdGVycyhzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8pCi17Ci0JdW5zaWduZWQgY2hhciBidWZbRU5USVJFX1JFUE9SVF9TSVpFXTsKLQlpbnQgcmV0dmFsOwotCXVuc2lnbmVkIGNoYXIgcmVnbnI7Ci0KLQlidWZbMF0gPSBFTlRJUkVfUkVQT1JUOwotCi0JcmV0dmFsID0gc2k0NzB4X2dldF9yZXBvcnQocmFkaW8sICh2b2lkICopICZidWYsIHNpemVvZihidWYpKTsKLQotCWlmIChyZXR2YWwgPj0gMCkKLQkJZm9yIChyZWduciA9IDA7IHJlZ25yIDwgUkFESU9fUkVHSVNURVJfTlVNOyByZWducisrKQotCQkJcmFkaW8tPnJlZ2lzdGVyc1tyZWducl0gPSBnZXRfdW5hbGlnbmVkX2JlMTYoCi0JCQkJJmJ1ZltyZWduciAqIFJBRElPX1JFR0lTVEVSX1NJWkUgKyAxXSk7Ci0KLQlyZXR1cm4gKHJldHZhbCA8IDApID8gLUVJTlZBTCA6IDA7Ci19Ci0KLQotLyoKLSAqIHNpNDcweF9nZXRfcmRzX3JlZ2lzdGVycyAtIHJlYWQgcmRzIHJlZ2lzdGVycwotICovCi1zdGF0aWMgaW50IHNpNDcweF9nZXRfcmRzX3JlZ2lzdGVycyhzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8pCi17Ci0JdW5zaWduZWQgY2hhciBidWZbUkRTX1JFUE9SVF9TSVpFXTsKLQlpbnQgcmV0dmFsOwotCWludCBzaXplOwotCXVuc2lnbmVkIGNoYXIgcmVnbnI7Ci0KLQlidWZbMF0gPSBSRFNfUkVQT1JUOwotCi0JcmV0dmFsID0gdXNiX2ludGVycnVwdF9tc2cocmFkaW8tPnVzYmRldiwKLQkJdXNiX3JjdmludHBpcGUocmFkaW8tPnVzYmRldiwgMSksCi0JCSh2b2lkICopICZidWYsIHNpemVvZihidWYpLCAmc2l6ZSwgdXNiX3RpbWVvdXQpOwotCWlmIChzaXplICE9IHNpemVvZihidWYpKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FICI6IHNpNDcweF9nZXRfcmRzX3JlZ2lzdGVyczogIgotCQkJInJldHVybiBzaXplIGRpZmZlcnM6ICVkICE9ICV6dVxuIiwgc2l6ZSwgc2l6ZW9mKGJ1ZikpOwotCWlmIChyZXR2YWwgPCAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FICI6IHNpNDcweF9nZXRfcmRzX3JlZ2lzdGVyczogIgotCQkJInVzYl9pbnRlcnJ1cHRfbXNnIHJldHVybmVkICVkXG4iLCByZXR2YWwpOwotCi0JaWYgKHJldHZhbCA+PSAwKQotCQlmb3IgKHJlZ25yID0gMDsgcmVnbnIgPCBSRFNfUkVHSVNURVJfTlVNOyByZWducisrKQotCQkJcmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJICsgcmVnbnJdID0KLQkJCQlnZXRfdW5hbGlnbmVkX2JlMTYoCi0JCQkJJmJ1ZltyZWduciAqIFJBRElPX1JFR0lTVEVSX1NJWkUgKyAxXSk7Ci0KLQlyZXR1cm4gKHJldHZhbCA8IDApID8gLUVJTlZBTCA6IDA7Ci19Ci0KLQotLyoKICAqIHNpNDcweF9zZXRfY2hhbiAtIHNldCB0aGUgY2hhbm5lbAogICovCiBzdGF0aWMgaW50IHNpNDcweF9zZXRfY2hhbihzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8sIHVuc2lnbmVkIHNob3J0IGNoYW4pCkBAIC04ODcsNiArODM3LDcwIEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHZW5lcmFsIERyaXZlciBGdW5jdGlvbnMgLSBFTlRJUkVfUkVQT1JUCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBzaTQ3MHhfZ2V0X2FsbF9yZWdpc3RlcnMgLSByZWFkIGVudGlyZSByZWdpc3RlcnMKKyAqLworc3RhdGljIGludCBzaTQ3MHhfZ2V0X2FsbF9yZWdpc3RlcnMoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvKQoreworCXVuc2lnbmVkIGNoYXIgYnVmW0VOVElSRV9SRVBPUlRfU0laRV07CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBjaGFyIHJlZ25yOworCisJYnVmWzBdID0gRU5USVJFX1JFUE9SVDsKKworCXJldHZhbCA9IHNpNDcweF9nZXRfcmVwb3J0KHJhZGlvLCAodm9pZCAqKSAmYnVmLCBzaXplb2YoYnVmKSk7CisKKwlpZiAocmV0dmFsID49IDApCisJCWZvciAocmVnbnIgPSAwOyByZWduciA8IFJBRElPX1JFR0lTVEVSX05VTTsgcmVnbnIrKykKKwkJCXJhZGlvLT5yZWdpc3RlcnNbcmVnbnJdID0gZ2V0X3VuYWxpZ25lZF9iZTE2KAorCQkJCSZidWZbcmVnbnIgKiBSQURJT19SRUdJU1RFUl9TSVpFICsgMV0pOworCisJcmV0dXJuIChyZXR2YWwgPCAwKSA/IC1FSU5WQUwgOiAwOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHZW5lcmFsIERyaXZlciBGdW5jdGlvbnMgLSBSRFNfUkVQT1JUCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBzaTQ3MHhfZ2V0X3Jkc19yZWdpc3RlcnMgLSByZWFkIHJkcyByZWdpc3RlcnMKKyAqLworc3RhdGljIGludCBzaTQ3MHhfZ2V0X3Jkc19yZWdpc3RlcnMoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvKQoreworCXVuc2lnbmVkIGNoYXIgYnVmW1JEU19SRVBPUlRfU0laRV07CisJaW50IHJldHZhbDsKKwlpbnQgc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIHJlZ25yOworCisJYnVmWzBdID0gUkRTX1JFUE9SVDsKKworCXJldHZhbCA9IHVzYl9pbnRlcnJ1cHRfbXNnKHJhZGlvLT51c2JkZXYsCisJCXVzYl9yY3ZpbnRwaXBlKHJhZGlvLT51c2JkZXYsIDEpLAorCQkodm9pZCAqKSAmYnVmLCBzaXplb2YoYnVmKSwgJnNpemUsIHVzYl90aW1lb3V0KTsKKwlpZiAoc2l6ZSAhPSBzaXplb2YoYnVmKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRSAiOiBzaTQ3MHhfZ2V0X3Jkc19yZWdpc3RlcnM6ICIKKwkJCSJyZXR1cm4gc2l6ZSBkaWZmZXJzOiAlZCAhPSAlenVcbiIsIHNpemUsIHNpemVvZihidWYpKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRSAiOiBzaTQ3MHhfZ2V0X3Jkc19yZWdpc3RlcnM6ICIKKwkJCSJ1c2JfaW50ZXJydXB0X21zZyByZXR1cm5lZCAlZFxuIiwgcmV0dmFsKTsKKworCWlmIChyZXR2YWwgPj0gMCkKKwkJZm9yIChyZWduciA9IDA7IHJlZ25yIDwgUkRTX1JFR0lTVEVSX05VTTsgcmVnbnIrKykKKwkJCXJhZGlvLT5yZWdpc3RlcnNbU1RBVFVTUlNTSSArIHJlZ25yXSA9CisJCQkJZ2V0X3VuYWxpZ25lZF9iZTE2KAorCQkJCSZidWZbcmVnbnIgKiBSQURJT19SRUdJU1RFUl9TSVpFICsgMV0pOworCisJcmV0dXJuIChyZXR2YWwgPCAwKSA/IC1FSU5WQUwgOiAwOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBHZW5lcmFsIERyaXZlciBGdW5jdGlvbnMgLSBMRURfUkVQT1JUCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTkxMSw2ICs5MjUsMzUgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdlbmVyYWwgRHJpdmVyIEZ1bmN0aW9ucyAtIFNDUkFUQ0hfUkVQT1JUCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBzaTQ3MHhfZ2V0X3NjcmF0Y2hfdmVyc2lvbnMgLSBnZXRzIHRoZSBzY3JhdGNoIHBhZ2UgYW5kIHZlcnNpb24gaW5mb3MKKyAqLworc3RhdGljIGludCBzaTQ3MHhfZ2V0X3NjcmF0Y2hfcGFnZV92ZXJzaW9ucyhzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8pCit7CisJdW5zaWduZWQgY2hhciBidWZbU0NSQVRDSF9SRVBPUlRfU0laRV07CisJaW50IHJldHZhbDsKKworCWJ1ZlswXSA9IFNDUkFUQ0hfUkVQT1JUOworCisJcmV0dmFsID0gc2k0NzB4X2dldF9yZXBvcnQocmFkaW8sICh2b2lkICopICZidWYsIHNpemVvZihidWYpKTsKKworCWlmIChyZXR2YWwgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FICI6IHNpNDcweF9nZXRfc2NyYXRjaDogIgorCQkJInNpNDcweF9nZXRfcmVwb3J0IHJldHVybmVkICVkXG4iLCByZXR2YWwpOworCWVsc2UgeworCQlyYWRpby0+c29mdHdhcmVfdmVyc2lvbiA9IGJ1ZlsxXTsKKwkJcmFkaW8tPmhhcmR3YXJlX3ZlcnNpb24gPSBidWZbMl07CisJfQorCisJcmV0dXJuIChyZXR2YWwgPCAwKSA/IC1FSU5WQUwgOiAwOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSRFMgRHJpdmVyIEZ1bmN0aW9ucwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0xMTI0LDYgKzExNjcsNyBAQAogCX0KIAogCWlmIChyYWRpby0+dXNlcnMgPT0gMSkgeworCQkvKiBzdGFydCByYWRpbyAqLwogCQlyZXR2YWwgPSBzaTQ3MHhfc3RhcnQocmFkaW8pOwogCQlpZiAocmV0dmFsIDwgMCkKIAkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShyYWRpby0+aW50Zik7CkBAIC0xMTY1LDYgKzEyMDksNyBAQAogCQkvKiBjYW5jZWwgcmVhZCBwcm9jZXNzZXMgKi8KIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZyYWRpby0+cmVhZF9xdWV1ZSk7CiAKKwkJLyogc3RvcCByYWRpbyAqLwogCQlyZXR2YWwgPSBzaTQ3MHhfc3RvcChyYWRpbyk7CiAJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShyYWRpby0+aW50Zik7CiAJfQpAQCAtMTIyNiw5ICsxMjcxLDExIEBACiBzdGF0aWMgaW50IHNpNDcweF92aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcGFiaWxpdHkpCiB7CisJc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwogCXN0cmxjcHkoY2FwYWJpbGl0eS0+ZHJpdmVyLCBEUklWRVJfTkFNRSwgc2l6ZW9mKGNhcGFiaWxpdHktPmRyaXZlcikpOwogCXN0cmxjcHkoY2FwYWJpbGl0eS0+Y2FyZCwgRFJJVkVSX0NBUkQsIHNpemVvZihjYXBhYmlsaXR5LT5jYXJkKSk7Ci0Jc3ByaW50ZihjYXBhYmlsaXR5LT5idXNfaW5mbywgIlVTQiIpOworCXVzYl9tYWtlX3BhdGgocmFkaW8tPnVzYmRldiwgY2FwYWJpbGl0eS0+YnVzX2luZm8sIHNpemVvZihjYXBhYmlsaXR5LT5idXNfaW5mbykpOwogCWNhcGFiaWxpdHktPnZlcnNpb24gPSBEUklWRVJfS0VSTkVMX1ZFUlNJT047CiAJY2FwYWJpbGl0eS0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfSFdfRlJFUV9TRUVLIHwKIAkJVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKQEAgLTE2MzYsNyArMTY4Myw3IEBACiAJCQlzaXplb2Yoc2k0NzB4X3ZpZGRldl90ZW1wbGF0ZSkpOwogCXZpZGVvX3NldF9kcnZkYXRhKHJhZGlvLT52aWRlb2RldiwgcmFkaW8pOwogCi0JLyogc2hvdyBzb21lIGluZm9zIGFib3V0IHRoZSBzcGVjaWZpYyBkZXZpY2UgKi8KKwkvKiBzaG93IHNvbWUgaW5mb3MgYWJvdXQgdGhlIHNwZWNpZmljIHNpNDcweCBkZXZpY2UgKi8KIAlpZiAoc2k0NzB4X2dldF9hbGxfcmVnaXN0ZXJzKHJhZGlvKSA8IDApIHsKIAkJcmV0dmFsID0gLUVJTzsKIAkJZ290byBlcnJfYWxsOwpAQCAtMTY0NCw3ICsxNjkxLDE2IEBACiAJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiBEZXZpY2VJRD0weCU0LjRoeCBDaGlwSUQ9MHglNC40aHhcbiIsCiAJCQlyYWRpby0+cmVnaXN0ZXJzW0RFVklDRUlEXSwgcmFkaW8tPnJlZ2lzdGVyc1tDSElQSURdKTsKIAotCS8qIGNoZWNrIGlmIGZpcm13YXJlIGlzIGN1cnJlbnQgKi8KKwkvKiBnZXQgc29mdHdhcmUgYW5kIGhhcmR3YXJlIHZlcnNpb25zICovCisJaWYgKHNpNDcweF9nZXRfc2NyYXRjaF9wYWdlX3ZlcnNpb25zKHJhZGlvKSA8IDApIHsKKwkJcmV0dmFsID0gLUVJTzsKKwkJZ290byBlcnJfYWxsOworCX0KKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FCisJCQkiOiBzb2Z0d2FyZSB2ZXJzaW9uICVkLCBoYXJkd2FyZSB2ZXJzaW9uICVkXG4iLAorCQkJcmFkaW8tPnNvZnR3YXJlX3ZlcnNpb24sIHJhZGlvLT5oYXJkd2FyZV92ZXJzaW9uKTsKKworCS8qIGNoZWNrIGlmIGRldmljZSBhbmQgZmlybXdhcmUgaXMgY3VycmVudCAqLwogCWlmICgocmFkaW8tPnJlZ2lzdGVyc1tDSElQSURdICYgQ0hJUElEX0ZJUk1XQVJFKQogCQkJPCBSQURJT19TV19WRVJTSU9OX0NVUlJFTlQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQpAQCAtMTY1Nyw3ICsxNzEzLDcgQEAKIAkJCSI6IElmIHlvdSBoYXZlIHNvbWUgdHJvdWJsZSB1c2luZyB0aGlzIGRyaXZlcixcbiIpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCiAJCQkiOiBwbGVhc2UgcmVwb3J0IHRvIFY0TCBNTCBhdCAiCi0JCQkidmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tXG4iKTsKKwkJCSJsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmdcbiIpOwogCX0KIAogCS8qIHNldCBpbml0aWFsIGZyZXF1ZW5jeSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10ZXJyYXRlYy5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10ZXJyYXRlYy5jCmluZGV4IDA3OThkNzEuLjViMDA3ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVycmF0ZWMuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlcnJhdGVjLmMKQEAgLTI3LDE2ICsyNywyOSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgkvKiBNb2R1bGVzIAkJCSovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJKi8KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiB1ZGVsYXkJCQkqLwotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5IHRvL2Zyb20gdXNlcgkJKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLQorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDAsMikKKyNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKworTU9EVUxFX0FVVEhPUigiUi5PRkZFUk1BTk5TICYgb3RoZXJzIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgVGVycmFUZWMgQWN0aXZlUmFkaW8gU3RhbmRhbG9uZSByYWRpbyBjYXJkLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjaWZuZGVmIENPTkZJR19SQURJT19URVJSQVRFQ19QT1JUCisjZGVmaW5lIENPTkZJR19SQURJT19URVJSQVRFQ19QT1JUIDB4NTkwCisjZW5kaWYKKworc3RhdGljIGludCBpbyA9IENPTkZJR19SQURJT19URVJSQVRFQ19QT1JUOworc3RhdGljIGludCByYWRpb19uciA9IC0xOworCittb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFRlcnJhVGVjIEFjdGl2ZVJhZGlvIGNhcmQgKDB4NTkwIG9yIDB4NTkxKSIpOworbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOworCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMikKIAogc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0gewogCXsKQEAgLTU3LDEzICs3MCw2IEBACiAJfQogfTsKIAotI2lmbmRlZiBDT05GSUdfUkFESU9fVEVSUkFURUNfUE9SVAotI2RlZmluZSBDT05GSUdfUkFESU9fVEVSUkFURUNfUE9SVCAweDU5MAotI2VuZGlmCi0KLS8qKioqKioqKioqKioqKioqIHRoaXMgb25lcyBhcmUgZm9yIHRoZSB0ZXJyYXRlYyAqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBCQVNFUE9SVCAJMHg1OTAKLSNkZWZpbmUgVk9MUE9SVCAJMHg1OTEKICNkZWZpbmUgV1JUX0RJUyAJMHgwMAogI2RlZmluZSBDTEtfT0ZGCQkweDAwCiAjZGVmaW5lIElJQ19EQVRBCTB4MDEKQEAgLTcxLDEzOCArNzcsMTI0IEBACiAjZGVmaW5lIERBVEEJCTB4MDQKICNkZWZpbmUgQ0xLX09OIAkJMHgwOAogI2RlZmluZSBXUlRfRU4JCTB4MTAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IGlvID0gQ09ORklHX1JBRElPX1RFUlJBVEVDX1BPUlQ7Ci1zdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Ci1zdGF0aWMgc3BpbmxvY2tfdCBsb2NrOwotCi1zdHJ1Y3QgdHRfZGV2aWNlCitzdHJ1Y3QgdGVycmF0ZWMKIHsKLQl1bnNpZ25lZCBsb25nIGluX3VzZTsKLQlpbnQgcG9ydDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OworCWludCBpbzsKIAlpbnQgY3Vydm9sOwogCXVuc2lnbmVkIGxvbmcgY3VyZnJlcTsKIAlpbnQgbXV0ZWQ7CisJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCitzdGF0aWMgc3RydWN0IHRlcnJhdGVjIHRlcnJhdGVjX2NhcmQ7CiAKIC8qIGxvY2FsIHRoaW5ncyAqLwogCi1zdGF0aWMgdm9pZCBjYXJkV3JpdGVWb2woaW50IHZvbHVtZSkKK3N0YXRpYyB2b2lkIHR0X3dyaXRlX3ZvbChzdHJ1Y3QgdGVycmF0ZWMgKnR0LCBpbnQgdm9sdW1lKQogewogCWludCBpOwotCXZvbHVtZSA9IHZvbHVtZSsodm9sdW1lICogMzIpOyAvLyBjaGFuZ2UgYm90aCBjaGFubmVscwotCXNwaW5fbG9jaygmbG9jayk7Ci0JZm9yIChpPTA7aTw4O2krKykKLQl7Ci0JCWlmICh2b2x1bWUgJiAoMHg4MD4+aSkpCi0JCQlvdXRiKDB4ODAsIFZPTFBPUlQpOwotCQllbHNlIG91dGIoMHgwMCwgVk9MUE9SVCk7CisKKwl2b2x1bWUgPSB2b2x1bWUgKyAodm9sdW1lICogMzIpOyAvKiBjaGFuZ2UgYm90aCBjaGFubmVscyAqLworCW11dGV4X2xvY2soJnR0LT5sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmICh2b2x1bWUgJiAoMHg4MCA+PiBpKSkKKwkJCW91dGIoMHg4MCwgdHQtPmlvICsgMSk7CisJCWVsc2UKKwkJCW91dGIoMHgwMCwgdHQtPmlvICsgMSk7CiAJfQotCXNwaW5fdW5sb2NrKCZsb2NrKTsKKwltdXRleF91bmxvY2soJnR0LT5sb2NrKTsKIH0KIAogCiAKLXN0YXRpYyB2b2lkIHR0X211dGUoc3RydWN0IHR0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgdHRfbXV0ZShzdHJ1Y3QgdGVycmF0ZWMgKnR0KQogewotCWRldi0+bXV0ZWQgPSAxOwotCWNhcmRXcml0ZVZvbCgwKTsKKwl0dC0+bXV0ZWQgPSAxOworCXR0X3dyaXRlX3ZvbCh0dCwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgdHRfc2V0dm9sKHN0cnVjdCB0dF9kZXZpY2UgKmRldiwgaW50IHZvbCkKK3N0YXRpYyBpbnQgdHRfc2V0dm9sKHN0cnVjdCB0ZXJyYXRlYyAqdHQsIGludCB2b2wpCiB7Ci0KLS8vCXByaW50ayhLRVJOX0VSUiAic2V0dm9sIGNhbGxlZCwgdm9sID0gJWRcbiIsIHZvbCk7Ci0KLQlpZih2b2wgPT0gZGV2LT5jdXJ2b2wpIHsJLyogcmVxdWVzdGVkIHZvbHVtZSA9IGN1cnJlbnQgKi8KLQkJaWYgKGRldi0+bXV0ZWQpIHsJLyogdXNlciBpcyB1bm11dGluZyB0aGUgY2FyZCAgKi8KLQkJCWRldi0+bXV0ZWQgPSAwOwotCQkJY2FyZFdyaXRlVm9sKHZvbCk7CS8qIGVuYWJsZSBjYXJkICovCisJaWYgKHZvbCA9PSB0dC0+Y3Vydm9sKSB7CS8qIHJlcXVlc3RlZCB2b2x1bWUgPSBjdXJyZW50ICovCisJCWlmICh0dC0+bXV0ZWQpIHsJLyogdXNlciBpcyB1bm11dGluZyB0aGUgY2FyZCAgKi8KKwkJCXR0LT5tdXRlZCA9IDA7CisJCQl0dF93cml0ZV92b2wodHQsIHZvbCk7CS8qIGVuYWJsZSBjYXJkICovCiAJCX0KLQogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZih2b2wgPT0gMCkgewkJCS8qIHZvbHVtZSA9IDAgbWVhbnMgbXV0ZSB0aGUgY2FyZCAqLwotCQljYXJkV3JpdGVWb2woMCk7CS8qICJ0dXJuIG9mZiBjYXJkIiBieSBzZXR0aW5nIHZvbCB0byAwICovCi0JCWRldi0+Y3Vydm9sID0gdm9sOwkvKiB0cmFjayB0aGUgdm9sdW1lIHN0YXRlIQkqLworCWlmICh2b2wgPT0gMCkgewkJCS8qIHZvbHVtZSA9IDAgbWVhbnMgbXV0ZSB0aGUgY2FyZCAqLworCQl0dF93cml0ZV92b2wodHQsIDApOwkvKiAidHVybiBvZmYgY2FyZCIgYnkgc2V0dGluZyB2b2wgdG8gMCAqLworCQl0dC0+Y3Vydm9sID0gdm9sOwkvKiB0cmFjayB0aGUgdm9sdW1lIHN0YXRlIQkqLwogCQlyZXR1cm4gMDsKIAl9CiAKLQlkZXYtPm11dGVkID0gMDsKLQotCWNhcmRXcml0ZVZvbCh2b2wpOwotCi0JZGV2LT5jdXJ2b2wgPSB2b2w7Ci0KKwl0dC0+bXV0ZWQgPSAwOworCXR0X3dyaXRlX3ZvbCh0dCwgdm9sKTsKKwl0dC0+Y3Vydm9sID0gdm9sOwogCXJldHVybiAwOwotCiB9CiAKIAogLyogdGhpcyBpcyB0aGUgd29yc3QgcGFydCBpbiB0aGlzIGRyaXZlciAqLwogLyogbWFueSBtb3JlIG9yIGxlc3Mgc3RyYW5nZSB0aGluZ3MgYXJlIGdvaW5nIG9uIGhlcmUsIGJ1dCBoZXksIGl0IHdvcmtzIDopICovCiAKLXN0YXRpYyBpbnQgdHRfc2V0ZnJlcShzdHJ1Y3QgdHRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZnJlcTEpCitzdGF0aWMgaW50IHR0X3NldGZyZXEoc3RydWN0IHRlcnJhdGVjICp0dCwgdW5zaWduZWQgbG9uZyBmcmVxMSkKIHsKIAlpbnQgZnJlcTsKIAlpbnQgaTsKIAlpbnQgcDsKIAlpbnQgIHRlbXA7CiAJbG9uZyByZXN0OwotCiAJdW5zaWduZWQgY2hhciBidWZmZXJbMjVdOwkJLyogd2UgaGF2ZSB0byBiaXQgc2hpZnQgMjUgcmVnaXN0ZXJzICovCi0JZnJlcSA9IGZyZXExLzE2MDsJCQkvKiBjb252ZXJ0IHRoZSBmcmVxLiB0byBhIG5pY2UgdG8gaGFuZGxlIHZhbHVlICovCi0JZm9yKGk9MjQ7aT4tMTtpLS0pCi0JCWJ1ZmZlcltpXT0wOwogCi0JcmVzdCA9IGZyZXEqMTArMTA3MDA7CQkvKiBpIG9uY2UgaGFkIHVuZGVyc3Rvb2Qgd2hhdCBpcyBnb2luZyBvbiBoZXJlICovCisJbXV0ZXhfbG9jaygmdHQtPmxvY2spOworCisJdHQtPmN1cmZyZXEgPSBmcmVxMTsKKworCWZyZXEgPSBmcmVxMSAvIDE2MDsJCQkvKiBjb252ZXJ0IHRoZSBmcmVxLiB0byBhIG5pY2UgdG8gaGFuZGxlIHZhbHVlICovCisJbWVtc2V0KGJ1ZmZlciwgMCwgc2l6ZW9mKGJ1ZmZlcikpOworCisJcmVzdCA9IGZyZXEgKiAxMCArIDEwNzAwOwkvKiBJIG9uY2UgaGFkIHVuZGVyc3Rvb2Qgd2hhdCBpcyBnb2luZyBvbiBoZXJlICovCiAJCQkJCS8qIG1heWJlIHNvbWUgd2lzZSBndXkgKGZyaWVkaGVsbT8pIGNhbiBjb21tZW50IHRoaXMgc3R1ZmYgKi8KLQlpPTEzOwotCXA9MTA7Ci0JdGVtcD0xMDI0MDA7Ci0Jd2hpbGUgKHJlc3QhPTApCi0JewotCQlpZiAocmVzdCV0ZW1wICA9PSByZXN0KQorCWkgPSAxMzsKKwlwID0gMTA7CisJdGVtcCA9IDEwMjQwMDsKKwl3aGlsZSAocmVzdCAhPSAwKSB7CisJCWlmIChyZXN0ICUgdGVtcCAgPT0gcmVzdCkKIAkJCWJ1ZmZlcltpXSA9IDA7Ci0JCWVsc2UKLQkJeworCQllbHNlIHsKIAkJCWJ1ZmZlcltpXSA9IDE7Ci0JCQlyZXN0ID0gcmVzdC10ZW1wOworCQkJcmVzdCA9IHJlc3QgLSB0ZW1wOwogCQl9CiAJCWktLTsKIAkJcC0tOwotCQl0ZW1wID0gdGVtcC8yOworCQl0ZW1wID0gdGVtcCAvIDI7CiAJfQogCi0Jc3Bpbl9sb2NrKCZsb2NrKTsKLQotCWZvciAoaT0yNDtpPi0xO2ktLSkJCQkvKiBiaXQgc2hpZnQgdGhlIHZhbHVlcyB0byB0aGUgcmFkaW9jYXJkICovCi0JewotCQlpZiAoYnVmZmVyW2ldPT0xKQotCQl7Ci0JCQlvdXRiKFdSVF9FTnxEQVRBLCBCQVNFUE9SVCk7Ci0JCQlvdXRiKFdSVF9FTnxEQVRBfENMS19PTiAgLCBCQVNFUE9SVCk7Ci0JCQlvdXRiKFdSVF9FTnxEQVRBLCBCQVNFUE9SVCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlvdXRiKFdSVF9FTnwweDAwLCBCQVNFUE9SVCk7Ci0JCQlvdXRiKFdSVF9FTnwweDAwfENMS19PTiAgLCBCQVNFUE9SVCk7CisJZm9yIChpID0gMjQ7IGkgPiAtMTsgaS0tKSB7CS8qIGJpdCBzaGlmdCB0aGUgdmFsdWVzIHRvIHRoZSByYWRpb2NhcmQgKi8KKwkJaWYgKGJ1ZmZlcltpXSA9PSAxKSB7CisJCQlvdXRiKFdSVF9FTiB8IERBVEEsIHR0LT5pbyk7CisJCQlvdXRiKFdSVF9FTiB8IERBVEEgfCBDTEtfT04sIHR0LT5pbyk7CisJCQlvdXRiKFdSVF9FTiB8IERBVEEsIHR0LT5pbyk7CisJCX0gZWxzZSB7CisJCQlvdXRiKFdSVF9FTiB8IDB4MDAsIHR0LT5pbyk7CisJCQlvdXRiKFdSVF9FTiB8IDB4MDAgfCBDTEtfT04sIHR0LT5pbyk7CiAJCX0KIAl9Ci0Jb3V0YigweDAwLCBCQVNFUE9SVCk7CisJb3V0YigweDAwLCB0dC0+aW8pOwogCi0Jc3Bpbl91bmxvY2soJmxvY2spOworCW11dGV4X3VubG9jaygmdHQtPmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdHRfZ2V0c2lnc3RyKHN0cnVjdCB0dF9kZXZpY2UgKmRldikJCS8qIFRPRE8gKi8KK3N0YXRpYyBpbnQgdHRfZ2V0c2lnc3RyKHN0cnVjdCB0ZXJyYXRlYyAqdHQpCiB7Ci0JaWYgKGluYihpbykgJiAyKQkvKiBiaXQgc2V0ID0gbm8gc2lnbmFsIHByZXNlbnQJKi8KKwlpZiAoaW5iKHR0LT5pbykgJiAyKQkvKiBiaXQgc2V0ID0gbm8gc2lnbmFsIHByZXNlbnQJKi8KIAkJcmV0dXJuIDA7CiAJcmV0dXJuIDE7CQkvKiBzaWduYWwgcHJlc2VudAkJKi8KIH0KQEAgLTIxMiw1MyArMjA0LDUwIEBACiB7CiAJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby10ZXJyYXRlYyIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJBY3RpdmVSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIklTQSIpOworCXN0cmxjcHkodi0+YnVzX2luZm8sICJJU0EiLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKIAl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKLQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlzdHJ1Y3QgdHRfZGV2aWNlICp0dCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHRlcnJhdGVjICp0dCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0Jdi0+cmFuZ2Vsb3cgPSAoODcqMTYwMDApOwotCXYtPnJhbmdlaGlnaCA9ICgxMDgqMTYwMDApOworCXYtPnJhbmdlbG93ID0gODcgKiAxNjAwMDsKKwl2LT5yYW5nZWhpZ2ggPSAxMDggKiAxNjAwMDsKIAl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XOwogCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKLQl2LT5zaWduYWwgPSAweEZGRkYqdHRfZ2V0c2lnc3RyKHR0KTsKKwl2LT5zaWduYWwgPSAweEZGRkYgKiB0dF9nZXRzaWdzdHIodHQpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlpZiAodi0+aW5kZXggPiAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gdi0+aW5kZXggPyAtRUlOVkFMIDogMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdHRfZGV2aWNlICp0dCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHRlcnJhdGVjICp0dCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQl0dC0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKLQl0dF9zZXRmcmVxKHR0LCB0dC0+Y3VyZnJlcSk7CisJdHRfc2V0ZnJlcSh0dCwgZi0+ZnJlcXVlbmN5KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdHRfZGV2aWNlICp0dCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHRlcnJhdGVjICp0dCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSB0dC0+Y3VyZnJlcTsKQEAgLTI3Miw4ICsyNjEsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKIAkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKLQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCi0JCQkJCQlzaXplb2YoKnFjKSk7CisJCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLCBzaXplb2YoKnFjKSk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KQEAgLTI4Myw3ICsyNzEsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB0dF9kZXZpY2UgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdGVycmF0ZWMgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0zMDIsNyArMjkwLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdHRfZGV2aWNlICp0dCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHRlcnJhdGVjICp0dCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzE4LDE3ICszMDYsNiBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoYS0+aW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKLQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCiB7CiAJKmkgPSAwOwpAQCAtMzM3LDM2ICszMTQsMzggQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdGVycmF0ZWNfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB0dF9kZXZpY2UgdGVycmF0ZWNfdW5pdDsKLQotc3RhdGljIGludCB0ZXJyYXRlY19leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgdGVycmF0ZWNfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmdGVycmF0ZWNfdW5pdC5pbl91c2UpID8gLUVCVVNZIDogMDsKLX0KLQotc3RhdGljIGludCB0ZXJyYXRlY19leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQljbGVhcl9iaXQoMCwgJnRlcnJhdGVjX3VuaXQuaW5fdXNlKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB0ZXJyYXRlY19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSB0ZXJyYXRlY19leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSB0ZXJyYXRlY19leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSB0ZXJyYXRlY19vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IHRlcnJhdGVjX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKIH07CiAKQEAgLTM4NSw2MCArMzY0LDYzIEBACiAJLnZpZGlvY19zX2lucHV0ICAgICA9IHZpZGlvY19zX2lucHV0LAogfTsKIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgdGVycmF0ZWNfcmFkaW8gPSB7Ci0JLm5hbWUJCT0gIlRlcnJhVGVjIEFjdGl2ZVJhZGlvIiwKLQkuZm9wcyAgICAgICAgICAgPSAmdGVycmF0ZWNfZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZ0ZXJyYXRlY19pb2N0bF9vcHMsCi0JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IHRlcnJhdGVjX2luaXQodm9pZCkKIHsKLQlpZihpbz09LTEpCi0JewotCQlwcmludGsoS0VSTl9FUlIgIllvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4Pz8/XG4iKTsKKwlzdHJ1Y3QgdGVycmF0ZWMgKnR0ID0gJnRlcnJhdGVjX2NhcmQ7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZ0dC0+djRsMl9kZXY7CisJaW50IHJlczsKKworCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJ0ZXJyYXRlYyIsIHNpemVvZih2NGwyX2Rldi0+bmFtZSkpOworCXR0LT5pbyA9IGlvOworCWlmICh0dC0+aW8gPT0gLTEpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJ5b3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weDU5MCBvciAweDU5MVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLCAyLCAidGVycmF0ZWMiKSkKLQl7Ci0JCXByaW50ayhLRVJOX0VSUiAiVGVycmFUZWM6IHBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwgaW8pOworCWlmICghcmVxdWVzdF9yZWdpb24odHQtPmlvLCAyLCAidGVycmF0ZWMiKSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgInBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwgaW8pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCXZpZGVvX3NldF9kcnZkYXRhKCZ0ZXJyYXRlY19yYWRpbywgJnRlcnJhdGVjX3VuaXQpOworCXJlcyA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsIHY0bDJfZGV2KTsKKwlpZiAocmVzIDwgMCkgeworCQlyZWxlYXNlX3JlZ2lvbih0dC0+aW8sIDIpOworCQl2NGwyX2Vycih2NGwyX2RldiwgIkNvdWxkIG5vdCByZWdpc3RlciB2NGwyX2RldmljZVxuIik7CisJCXJldHVybiByZXM7CisJfQogCi0Jc3Bpbl9sb2NrX2luaXQoJmxvY2spOworCXN0cmxjcHkodHQtPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZih0dC0+dmRldi5uYW1lKSk7CisJdHQtPnZkZXYudjRsMl9kZXYgPSB2NGwyX2RldjsKKwl0dC0+dmRldi5mb3BzID0gJnRlcnJhdGVjX2ZvcHM7CisJdHQtPnZkZXYuaW9jdGxfb3BzID0gJnRlcnJhdGVjX2lvY3RsX29wczsKKwl0dC0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJdmlkZW9fc2V0X2RydmRhdGEoJnR0LT52ZGV2LCB0dCk7CiAKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ0ZXJyYXRlY19yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJcmVsZWFzZV9yZWdpb24oaW8sMik7CisJbXV0ZXhfaW5pdCgmdHQtPmxvY2spOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmdHQtPnZkZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnR0LT52NGwyX2Rldik7CisJCXJlbGVhc2VfcmVnaW9uKHR0LT5pbywgMik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIlRFUlJBVEVDIEFjdGl2UmFkaW8gU3RhbmRhbG9uZSBjYXJkIGRyaXZlci5cbiIpOworCXY0bDJfaW5mbyh2NGwyX2RldiwgIlRFUlJBVEVDIEFjdGl2UmFkaW8gU3RhbmRhbG9uZSBjYXJkIGRyaXZlci5cbiIpOwogCiAJLyogbXV0ZSBjYXJkIC0gcHJldmVudHMgbm9pc3kgYm9vdHVwcyAqLwotCi0JLyogdGhpcyBlbnN1cmVzIHRoYXQgdGhlIHZvbHVtZSBpcyBhbGwgdGhlIHdheSBkb3duICAqLwotCWNhcmRXcml0ZVZvbCgwKTsKLQl0ZXJyYXRlY191bml0LmN1cnZvbCA9IDA7Ci0KKwl0dF93cml0ZV92b2wodHQsIDApOwogCXJldHVybiAwOwogfQogCi1NT0RVTEVfQVVUSE9SKCJSLk9GRkVSTUFOTlMgJiBvdGhlcnMiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBUZXJyYVRlYyBBY3RpdmVSYWRpbyBTdGFuZGFsb25lIHJhZGlvIGNhcmQuIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1tb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFRlcnJhVGVjIEFjdGl2ZVJhZGlvIGNhcmQgKDB4NTkwIG9yIDB4NTkxKSIpOwotbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgdGVycmF0ZWNfY2xlYW51cF9tb2R1bGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCB0ZXJyYXRlY19leGl0KHZvaWQpCiB7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnRlcnJhdGVjX3JhZGlvKTsKLQlyZWxlYXNlX3JlZ2lvbihpbywyKTsKLQlwcmludGsoS0VSTl9JTkZPICJURVJSQVRFQyBBY3RpdlJhZGlvIFN0YW5kYWxvbmUgY2FyZCBkcml2ZXIgdW5sb2FkZWQuXG4iKTsKKwlzdHJ1Y3QgdGVycmF0ZWMgKnR0ID0gJnRlcnJhdGVjX2NhcmQ7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZ0dC0+djRsMl9kZXY7CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmdHQtPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnR0LT52NGwyX2Rldik7CisJcmVsZWFzZV9yZWdpb24odHQtPmlvLCAyKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJURVJSQVRFQyBBY3RpdlJhZGlvIFN0YW5kYWxvbmUgY2FyZCBkcml2ZXIgdW5sb2FkZWQuXG4iKTsKIH0KIAogbW9kdWxlX2luaXQodGVycmF0ZWNfaW5pdCk7Ci1tb2R1bGVfZXhpdCh0ZXJyYXRlY19jbGVhbnVwX21vZHVsZSk7Cittb2R1bGVfZXhpdCh0ZXJyYXRlY19leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10cnVzdC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10cnVzdC5jCmluZGV4IGJkZjljYjYuLmQxYmU2NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHJ1c3QuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRydXN0LmMKQEAgLTE5LDQ5ICsxOSwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDAsMikKLQotc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0gewotCXsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMSwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCX0sewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKLQkJLm5hbWUgICAgICAgICAgPSAiVm9sdW1lIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDY1NTM1LAotCQkuc3RlcCAgICAgICAgICA9IDIwNDgsCi0JCS5kZWZhdWx0X3ZhbHVlID0gNjU1MzUsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQl9LHsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19CQVNTLAotCQkubmFtZSAgICAgICAgICA9ICJCYXNzIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDY1NTM1LAotCQkuc3RlcCAgICAgICAgICA9IDQzNzAsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMzI3NjgsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQl9LHsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19UUkVCTEUsCi0JCS5uYW1lICAgICAgICAgID0gIlRyZWJsZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKLQkJLnN0ZXAgICAgICAgICAgPSA0MzcwLAotCQkuZGVmYXVsdF92YWx1ZSA9IDMyNzY4LAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JfSwKLX07CitNT0RVTEVfQVVUSE9SKCJFcmljIExhbW1lcnRzLCBSdXNzZWxsIEtyb2xsLCBRdWF5IEx1LCBEb25hbGQgU29uZywgSmFzb24gTGV3aXMsIFNjb3R0IE1jR3JhdGgsIFdpbGxpYW0gTWNHcmF0aCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFRydXN0IEZNIFJhZGlvIGNhcmQuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIC8qIGFjY2VwdGFibGUgcG9ydHM6IDB4MzUwIChKUDMgc2hvcnRlZCksIDB4MzU4IChKUDMgb3BlbikgKi8KIApAQCAtNzEsMjYgKzM3LDQxIEBACiAKIHN0YXRpYyBpbnQgaW8gPSBDT05GSUdfUkFESU9fVFJVU1RfUE9SVDsKIHN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKLXN0YXRpYyBpbnQgaW92YWwgPSAweGY7Ci1zdGF0aWMgX191MTYgY3Vydm9sOwotc3RhdGljIF9fdTE2IGN1cmJhc3M7Ci1zdGF0aWMgX191MTYgY3VydHJlYmxlOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgY3VyZnJlcTsKLXN0YXRpYyBpbnQgY3Vyc3RlcmVvOwotc3RhdGljIGludCBjdXJtdXRlOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5fdXNlOworCittb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFRydXN0IEZNIFJhZGlvIGNhcmQgKDB4MzUwIG9yIDB4MzU4KSIpOworbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOworCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMikKKworc3RydWN0IHRydXN0IHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OworCWludCBpbzsKKwlpbnQgaW92YWw7CisJX191MTYgY3Vydm9sOworCV9fdTE2IGN1cmJhc3M7CisJX191MTYgY3VydHJlYmxlOworCWludCBtdXRlZDsKKwl1bnNpZ25lZCBsb25nIGN1cmZyZXE7CisJaW50IGN1cnN0ZXJlbzsKKwlpbnQgY3VybXV0ZTsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJ1c3QgdHJ1c3RfY2FyZDsKIAogLyogaTJjIGFkZHJlc3NlcyAqLwogI2RlZmluZSBUREE3MzE4X0FERFIgMHg4OAogI2RlZmluZSBUU0E2MDYwVF9BRERSIDB4YzQKIAotI2RlZmluZSBUUl9ERUxBWSBkbyB7IGluYihpbyk7IGluYihpbyk7IGluYihpbyk7IH0gd2hpbGUoMCkKLSNkZWZpbmUgVFJfU0VUX1NDTCBvdXRiKGlvdmFsIHw9IDIsIGlvKQotI2RlZmluZSBUUl9DTFJfU0NMIG91dGIoaW92YWwgJj0gMHhmZCwgaW8pCi0jZGVmaW5lIFRSX1NFVF9TREEgb3V0Yihpb3ZhbCB8PSAxLCBpbykKLSNkZWZpbmUgVFJfQ0xSX1NEQSBvdXRiKGlvdmFsICY9IDB4ZmUsIGlvKQorI2RlZmluZSBUUl9ERUxBWSBkbyB7IGluYih0ci0+aW8pOyBpbmIodHItPmlvKTsgaW5iKHRyLT5pbyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFRSX1NFVF9TQ0wgb3V0Yih0ci0+aW92YWwgfD0gMiwgdHItPmlvKQorI2RlZmluZSBUUl9DTFJfU0NMIG91dGIodHItPmlvdmFsICY9IDB4ZmQsIHRyLT5pbykKKyNkZWZpbmUgVFJfU0VUX1NEQSBvdXRiKHRyLT5pb3ZhbCB8PSAxLCB0ci0+aW8pCisjZGVmaW5lIFRSX0NMUl9TREEgb3V0Yih0ci0+aW92YWwgJj0gMHhmZSwgdHItPmlvKQogCi1zdGF0aWMgdm9pZCB3cml0ZV9pMmMoaW50IG4sIC4uLikKK3N0YXRpYyB2b2lkIHdyaXRlX2kyYyhzdHJ1Y3QgdHJ1c3QgKnRyLCBpbnQgbiwgLi4uKQogewogCXVuc2lnbmVkIGNoYXIgdmFsLCBtYXNrOwogCXZhX2xpc3QgYXJnczsKQEAgLTEzNiw2MiArMTE3LDc3IEBACiAJdmFfZW5kKGFyZ3MpOwogfQogCi1zdGF0aWMgdm9pZCB0cl9zZXR2b2woX191MTYgdm9sKQorc3RhdGljIHZvaWQgdHJfc2V0dm9sKHN0cnVjdCB0cnVzdCAqdHIsIF9fdTE2IHZvbCkKIHsKLQljdXJ2b2wgPSB2b2wgLyAyMDQ4OwotCXdyaXRlX2kyYygyLCBUREE3MzE4X0FERFIsIGN1cnZvbCBeIDB4MWYpOworCW11dGV4X2xvY2soJnRyLT5sb2NrKTsKKwl0ci0+Y3Vydm9sID0gdm9sIC8gMjA0ODsKKwl3cml0ZV9pMmModHIsIDIsIFREQTczMThfQUREUiwgdHItPmN1cnZvbCBeIDB4MWYpOworCW11dGV4X3VubG9jaygmdHItPmxvY2spOwogfQogCiBzdGF0aWMgaW50IGJhc3N0cmVibGUyY2hpcFsxNV0gPSB7CiAJMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4CiB9OwogCi1zdGF0aWMgdm9pZCB0cl9zZXRiYXNzKF9fdTE2IGJhc3MpCitzdGF0aWMgdm9pZCB0cl9zZXRiYXNzKHN0cnVjdCB0cnVzdCAqdHIsIF9fdTE2IGJhc3MpCiB7Ci0JY3VyYmFzcyA9IGJhc3MgLyA0MzcwOwotCXdyaXRlX2kyYygyLCBUREE3MzE4X0FERFIsIDB4NjAgfCBiYXNzdHJlYmxlMmNoaXBbY3VyYmFzc10pOworCW11dGV4X2xvY2soJnRyLT5sb2NrKTsKKwl0ci0+Y3VyYmFzcyA9IGJhc3MgLyA0MzcwOworCXdyaXRlX2kyYyh0ciwgMiwgVERBNzMxOF9BRERSLCAweDYwIHwgYmFzc3RyZWJsZTJjaGlwW3RyLT5jdXJiYXNzXSk7CisJbXV0ZXhfdW5sb2NrKCZ0ci0+bG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIHRyX3NldHRyZWJsZShfX3UxNiB0cmVibGUpCitzdGF0aWMgdm9pZCB0cl9zZXR0cmVibGUoc3RydWN0IHRydXN0ICp0ciwgX191MTYgdHJlYmxlKQogewotCWN1cnRyZWJsZSA9IHRyZWJsZSAvIDQzNzA7Ci0Jd3JpdGVfaTJjKDIsIFREQTczMThfQUREUiwgMHg3MCB8IGJhc3N0cmVibGUyY2hpcFtjdXJ0cmVibGVdKTsKKwltdXRleF9sb2NrKCZ0ci0+bG9jayk7CisJdHItPmN1cnRyZWJsZSA9IHRyZWJsZSAvIDQzNzA7CisJd3JpdGVfaTJjKHRyLCAyLCBUREE3MzE4X0FERFIsIDB4NzAgfCBiYXNzdHJlYmxlMmNoaXBbdHItPmN1cnRyZWJsZV0pOworCW11dGV4X3VubG9jaygmdHItPmxvY2spOwogfQogCi1zdGF0aWMgdm9pZCB0cl9zZXRzdGVyZW8oaW50IHN0ZXJlbykKK3N0YXRpYyB2b2lkIHRyX3NldHN0ZXJlbyhzdHJ1Y3QgdHJ1c3QgKnRyLCBpbnQgc3RlcmVvKQogewotCWN1cnN0ZXJlbyA9ICEhc3RlcmVvOwotCWlvdmFsID0gKGlvdmFsICYgMHhmYikgfCAoIWN1cnN0ZXJlbyA8PCAyKTsKLQlvdXRiKGlvdmFsLCBpbyk7CisJbXV0ZXhfbG9jaygmdHItPmxvY2spOworCXRyLT5jdXJzdGVyZW8gPSAhIXN0ZXJlbzsKKwl0ci0+aW92YWwgPSAodHItPmlvdmFsICYgMHhmYikgfCAoIXRyLT5jdXJzdGVyZW8gPDwgMik7CisJb3V0Yih0ci0+aW92YWwsIHRyLT5pbyk7CisJbXV0ZXhfdW5sb2NrKCZ0ci0+bG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIHRyX3NldG11dGUoaW50IG11dGUpCitzdGF0aWMgdm9pZCB0cl9zZXRtdXRlKHN0cnVjdCB0cnVzdCAqdHIsIGludCBtdXRlKQogewotCWN1cm11dGUgPSAhIW11dGU7Ci0JaW92YWwgPSAoaW92YWwgJiAweGY3KSB8IChjdXJtdXRlIDw8IDMpOwotCW91dGIoaW92YWwsIGlvKTsKKwltdXRleF9sb2NrKCZ0ci0+bG9jayk7CisJdHItPmN1cm11dGUgPSAhIW11dGU7CisJdHItPmlvdmFsID0gKHRyLT5pb3ZhbCAmIDB4ZjcpIHwgKHRyLT5jdXJtdXRlIDw8IDMpOworCW91dGIodHItPmlvdmFsLCB0ci0+aW8pOworCW11dGV4X3VubG9jaygmdHItPmxvY2spOwogfQogCi1zdGF0aWMgaW50IHRyX2dldHNpZ3N0cih2b2lkKQorc3RhdGljIGludCB0cl9nZXRzaWdzdHIoc3RydWN0IHRydXN0ICp0cikKIHsKIAlpbnQgaSwgdjsKIAotCWZvcihpID0gMCwgdiA9IDA7IGkgPCAxMDA7IGkrKykgdiB8PSBpbmIoaW8pOwotCXJldHVybiAodiAmIDEpPyAwIDogMHhmZmZmOworCW11dGV4X2xvY2soJnRyLT5sb2NrKTsKKwlmb3IgKGkgPSAwLCB2ID0gMDsgaSA8IDEwMDsgaSsrKQorCQl2IHw9IGluYih0ci0+aW8pOworCW11dGV4X3VubG9jaygmdHItPmxvY2spOworCXJldHVybiAodiAmIDEpID8gMCA6IDB4ZmZmZjsKIH0KIAotc3RhdGljIGludCB0cl9nZXRzdGVyZW8odm9pZCkKK3N0YXRpYyBpbnQgdHJfZ2V0c3RlcmVvKHN0cnVjdCB0cnVzdCAqdHIpCiB7CiAJLyogZG9uJ3Qga25vdyBob3cgdG8gZGV0ZXJtaW5lIGl0LCBqdXN0IHJldHVybiB0aGUgc2V0dGluZyAqLwotCXJldHVybiBjdXJzdGVyZW87CisJcmV0dXJuIHRyLT5jdXJzdGVyZW87CiB9CiAKLXN0YXRpYyB2b2lkIHRyX3NldGZyZXEodW5zaWduZWQgbG9uZyBmKQorc3RhdGljIHZvaWQgdHJfc2V0ZnJlcShzdHJ1Y3QgdHJ1c3QgKnRyLCB1bnNpZ25lZCBsb25nIGYpCiB7CisJbXV0ZXhfbG9jaygmdHItPmxvY2spOworCXRyLT5jdXJmcmVxID0gZjsKIAlmIC89IDE2MDsJLyogQ29udmVydCB0byAxMCBrSHogdW5pdHMJKi8KLQlmICs9IDEwNzA7CS8qIEFkZCAxMC43IE1IeiBJRgkJCSovCi0KLQl3cml0ZV9pMmMoNSwgVFNBNjA2MFRfQUREUiwgKGYgPDwgMSkgfCAxLCBmID4+IDcsIDB4NjAgfCAoKGYgPj4gMTUpICYgMSksIDApOworCWYgKz0gMTA3MDsJLyogQWRkIDEwLjcgTUh6IElGCQkqLworCXdyaXRlX2kyYyh0ciwgNSwgVFNBNjA2MFRfQUREUiwgKGYgPDwgMSkgfCAxLCBmID4+IDcsIDB4NjAgfCAoKGYgPj4gMTUpICYgMSksIDApOworCW11dGV4X3VubG9jaygmdHItPmxvY2spOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKQEAgLTE5OSw2OCArMTk1LDc1IEBACiB7CiAJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby10cnVzdCIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJUcnVzdCBGTSBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIklTQSIpOworCXN0cmxjcHkodi0+YnVzX2luZm8sICJJU0EiLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKIAl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKLQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogeworCXN0cnVjdCB0cnVzdCAqdHIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCXYtPnJhbmdlbG93ID0gKDg3LjUqMTYwMDApOwotCXYtPnJhbmdlaGlnaCA9ICgxMDgqMTYwMDApOwotCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PfFY0TDJfVFVORVJfU1VCX1NURVJFTzsKKwl2LT5yYW5nZWxvdyA9IDg3LjUgKiAxNjAwMDsKKwl2LT5yYW5nZWhpZ2ggPSAxMDggKiAxNjAwMDsKKwl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTyB8IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKIAl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XOwotCWlmICh0cl9nZXRzdGVyZW8oKSkKKwlpZiAodHJfZ2V0c3RlcmVvKHRyKSkKIAkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CiAJZWxzZQogCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0Jdi0+c2lnbmFsID0gdHJfZ2V0c2lnc3RyKCk7CisJdi0+c2lnbmFsID0gdHJfZ2V0c2lnc3RyKHRyKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlpZiAodi0+aW5kZXggPiAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3QgdHJ1c3QgKnRyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAorCWlmICh2LT5pbmRleCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJdHJfc2V0c3RlcmVvKHRyLCB2LT5hdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9TVEVSRU8pOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0JY3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKLQl0cl9zZXRmcmVxKGN1cmZyZXEpOworCXN0cnVjdCB0cnVzdCAqdHIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJdHJfc2V0ZnJlcSh0ciwgZi0+ZnJlcXVlbmN5KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogeworCXN0cnVjdCB0cnVzdCAqdHIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0JZi0+ZnJlcXVlbmN5ID0gY3VyZnJlcTsKKwlmLT5mcmVxdWVuY3kgPSB0ci0+Y3VyZnJlcTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKLQkJCQkJCXNpemVvZigqcWMpKTsKLQkJCXJldHVybiAwOwotCQl9CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMSk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDIwNDgsIDY1NTM1KTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CisJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDQzNzAsIDMyNzY4KTsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yNjgsMTggKzI3MSwyMCBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CisJc3RydWN0IHRydXN0ICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQljdHJsLT52YWx1ZSA9IGN1cm11dGU7CisJCWN0cmwtPnZhbHVlID0gdHItPmN1cm11dGU7CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQljdHJsLT52YWx1ZSA9IGN1cnZvbCAqIDIwNDg7CisJCWN0cmwtPnZhbHVlID0gdHItPmN1cnZvbCAqIDIwNDg7CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQkJY3RybC0+dmFsdWUgPSBjdXJiYXNzICogNDM3MDsKKwkJY3RybC0+dmFsdWUgPSB0ci0+Y3VyYmFzcyAqIDQzNzA7CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQljdHJsLT52YWx1ZSA9IGN1cnRyZWJsZSAqIDQzNzA7CisJCWN0cmwtPnZhbHVlID0gdHItPmN1cnRyZWJsZSAqIDQzNzA7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTI4OCwzNCArMjkzLDI1IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKKwlzdHJ1Y3QgdHJ1c3QgKnRyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCXRyX3NldG11dGUoY3RybC0+dmFsdWUpOworCQl0cl9zZXRtdXRlKHRyLCBjdHJsLT52YWx1ZSk7CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQl0cl9zZXR2b2woY3RybC0+dmFsdWUpOworCQl0cl9zZXR2b2wodHIsIGN0cmwtPnZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgotCQl0cl9zZXRiYXNzKGN0cmwtPnZhbHVlKTsKKwkJdHJfc2V0YmFzcyh0ciwgY3RybC0+dmFsdWUpOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJdHJfc2V0dHJlYmxlKGN0cmwtPnZhbHVlKTsKKwkJdHJfc2V0dHJlYmxlKHRyLCBjdHJsLT52YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoYS0+aW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKLQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCiB7CiAJKmkgPSAwOwpAQCAtMzI0LDM0ICszMjAsMzggQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCA9IDA7CisJc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCiB7Ci0JaWYgKGEtPmluZGV4ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBhLT5pbmRleCA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHRydXN0X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdHJ1c3RfZXhjbHVzaXZlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHRydXN0X3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmluX3VzZSkgPyAtRUJVU1kgOiAwOwotfQotCi1zdGF0aWMgaW50IHRydXN0X2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCWNsZWFyX2JpdCgwLCAmaW5fdXNlKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB0cnVzdF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSB0cnVzdF9leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSB0cnVzdF9leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSB0cnVzdF9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IHRydXN0X3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKIH07CiAKQEAgLTM3MCw1OSArMzcwLDcyIEBACiAJLnZpZGlvY19zX2lucHV0ICAgICA9IHZpZGlvY19zX2lucHV0LAogfTsKIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgdHJ1c3RfcmFkaW8gPSB7Ci0JLm5hbWUJCT0gIlRydXN0IEZNIFJhZGlvIiwKLQkuZm9wcyAgICAgICAgICAgPSAmdHJ1c3RfZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZ0cnVzdF9pb2N0bF9vcHMsCi0JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IHRydXN0X2luaXQodm9pZCkKIHsKLQlpZihpbyA9PSAtMSkgewotCQlwcmludGsoS0VSTl9FUlIgIllvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4Pz8/XG4iKTsKKwlzdHJ1Y3QgdHJ1c3QgKnRyID0gJnRydXN0X2NhcmQ7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZ0ci0+djRsMl9kZXY7CisJaW50IHJlczsKKworCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJ0cnVzdCIsIHNpemVvZih2NGwyX2Rldi0+bmFtZSkpOworCXRyLT5pbyA9IGlvOworCXRyLT5pb3ZhbCA9IDB4ZjsKKwltdXRleF9pbml0KCZ0ci0+bG9jayk7CisKKwlpZiAodHItPmlvID09IC0xKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHgweDM1MCBvciAweDM1OFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlpZighcmVxdWVzdF9yZWdpb24oaW8sIDIsICJUcnVzdCBGTSBSYWRpbyIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidHJ1c3Q6IHBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwgaW8pOworCWlmICghcmVxdWVzdF9yZWdpb24odHItPmlvLCAyLCAiVHJ1c3QgRk0gUmFkaW8iKSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgInBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwgdHItPmlvKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmdHJ1c3RfcmFkaW8sIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7Ci0JCXJlbGVhc2VfcmVnaW9uKGlvLCAyKTsKKworCXJlcyA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsIHY0bDJfZGV2KTsKKwlpZiAocmVzIDwgMCkgeworCQlyZWxlYXNlX3JlZ2lvbih0ci0+aW8sIDIpOworCQl2NGwyX2Vycih2NGwyX2RldiwgIkNvdWxkIG5vdCByZWdpc3RlciB2NGwyX2RldmljZVxuIik7CisJCXJldHVybiByZXM7CisJfQorCisJc3RybGNweSh0ci0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKHRyLT52ZGV2Lm5hbWUpKTsKKwl0ci0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCXRyLT52ZGV2LmZvcHMgPSAmdHJ1c3RfZm9wczsKKwl0ci0+dmRldi5pb2N0bF9vcHMgPSAmdHJ1c3RfaW9jdGxfb3BzOworCXRyLT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmdHItPnZkZXYsIHRyKTsKKworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnRyLT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgeworCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKKwkJcmVsZWFzZV9yZWdpb24odHItPmlvLCAyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiVHJ1c3QgRk0gUmFkaW8gY2FyZCBkcml2ZXIgdjEuMC5cbiIpOworCXY0bDJfaW5mbyh2NGwyX2RldiwgIlRydXN0IEZNIFJhZGlvIGNhcmQgZHJpdmVyIHYxLjAuXG4iKTsKIAotCXdyaXRlX2kyYygyLCBUREE3MzE4X0FERFIsIDB4ODApOwkvKiBzcGVha2VyIGF0dC4gTEYgPSAwIGRCICovCi0Jd3JpdGVfaTJjKDIsIFREQTczMThfQUREUiwgMHhhMCk7CS8qIHNwZWFrZXIgYXR0LiBSRiA9IDAgZEIgKi8KLQl3cml0ZV9pMmMoMiwgVERBNzMxOF9BRERSLCAweGMwKTsJLyogc3BlYWtlciBhdHQuIExSID0gMCBkQiAqLwotCXdyaXRlX2kyYygyLCBUREE3MzE4X0FERFIsIDB4ZTApOwkvKiBzcGVha2VyIGF0dC4gUlIgPSAwIGRCICovCi0Jd3JpdGVfaTJjKDIsIFREQTczMThfQUREUiwgMHg0MCk7CS8qIHN0ZXJlbyAxIGlucHV0LCBnYWluID0gMTguNzUgZEIgKi8KKwl3cml0ZV9pMmModHIsIDIsIFREQTczMThfQUREUiwgMHg4MCk7CS8qIHNwZWFrZXIgYXR0LiBMRiA9IDAgZEIgKi8KKwl3cml0ZV9pMmModHIsIDIsIFREQTczMThfQUREUiwgMHhhMCk7CS8qIHNwZWFrZXIgYXR0LiBSRiA9IDAgZEIgKi8KKwl3cml0ZV9pMmModHIsIDIsIFREQTczMThfQUREUiwgMHhjMCk7CS8qIHNwZWFrZXIgYXR0LiBMUiA9IDAgZEIgKi8KKwl3cml0ZV9pMmModHIsIDIsIFREQTczMThfQUREUiwgMHhlMCk7CS8qIHNwZWFrZXIgYXR0LiBSUiA9IDAgZEIgKi8KKwl3cml0ZV9pMmModHIsIDIsIFREQTczMThfQUREUiwgMHg0MCk7CS8qIHN0ZXJlbyAxIGlucHV0LCBnYWluID0gMTguNzUgZEIgKi8KIAotCXRyX3NldHZvbCgweDgwMDApOwotCXRyX3NldGJhc3MoMHg4MDAwKTsKLQl0cl9zZXR0cmVibGUoMHg4MDAwKTsKLQl0cl9zZXRzdGVyZW8oMSk7CisJdHJfc2V0dm9sKHRyLCAweGZmZmYpOworCXRyX3NldGJhc3ModHIsIDB4ODAwMCk7CisJdHJfc2V0dHJlYmxlKHRyLCAweDgwMDApOworCXRyX3NldHN0ZXJlbyh0ciwgMSk7CiAKIAkvKiBtdXRlIGNhcmQgLSBwcmV2ZW50cyBub2lzeSBib290dXBzICovCi0JdHJfc2V0bXV0ZSgxKTsKKwl0cl9zZXRtdXRlKHRyLCAxKTsKIAogCXJldHVybiAwOwogfQogCi1NT0RVTEVfQVVUSE9SKCJFcmljIExhbW1lcnRzLCBSdXNzZWxsIEtyb2xsLCBRdWF5IEx1LCBEb25hbGQgU29uZywgSmFzb24gTGV3aXMsIFNjb3R0IE1jR3JhdGgsIFdpbGxpYW0gTWNHcmF0aCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFRydXN0IEZNIFJhZGlvIGNhcmQuIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgVHJ1c3QgRk0gUmFkaW8gY2FyZCAoMHgzNTAgb3IgMHgzNTgpIik7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX3RydXN0X21vZHVsZSh2b2lkKQogewotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZ0cnVzdF9yYWRpbyk7Ci0JcmVsZWFzZV9yZWdpb24oaW8sIDIpOworCXN0cnVjdCB0cnVzdCAqdHIgPSAmdHJ1c3RfY2FyZDsKKworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZ0ci0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdHItPnY0bDJfZGV2KTsKKwlyZWxlYXNlX3JlZ2lvbih0ci0+aW8sIDIpOwogfQogCiBtb2R1bGVfaW5pdCh0cnVzdF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHlwaG9vbi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10eXBob29uLmMKaW5kZXggNWMzYjMxOS4uOTJkOTIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10eXBob29uLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10eXBob29uLmMKQEAgLTM0LDM3ICszNCwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgkvKiBNb2R1bGVzICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YSAgICAgICAgICAgICAgICAgICAgICAgKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24JCSAgKi8KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CS8qIHJhZGlvIGNhcmQgc3RhdHVzIHJlcG9ydAkgICovCi0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG91dGIsIG91dGJfcCAgICAgICAgICAgICAgICAgICAqLwotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyICAgICAgICAgICAgICAqLworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzICAgICAgICAgICAqLwotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4JCS8qIG91dGIsIG91dGJfcCAgICAgICAgICAgICAgICAgICAqLworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDEsMSkKLSNkZWZpbmUgQkFOTkVSICJUeXBob29uIFJhZGlvIENhcmQgZHJpdmVyIHYwLjEuMVxuIgotCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7Ci0JewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS5uYW1lICAgICAgICAgID0gIk11dGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JfSx7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAotCQkubmFtZSAgICAgICAgICA9ICJWb2x1bWUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gNjU1MzUsCi0JCS5zdGVwICAgICAgICAgID0gMTw8MTQsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMHhmZiwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCX0KLX07Ci0KK01PRFVMRV9BVVRIT1IoIkRyLiBIZW5yaWsgU2VpZGVsIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgVHlwaG9vbiByYWRpbyBjYXJkIChhLmsuYS4gRWNvUmFkaW8pLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjaWZuZGVmIENPTkZJR19SQURJT19UWVBIT09OX1BPUlQKICNkZWZpbmUgQ09ORklHX1JBRElPX1RZUEhPT05fUE9SVCAtMQpAQCAtNzQsMTMgKzUyLDI2IEBACiAjZGVmaW5lIENPTkZJR19SQURJT19UWVBIT09OX01VVEVGUkVRIDAKICNlbmRpZgogCi0jaWZuZGVmIENPTkZJR19QUk9DX0ZTCi0jdW5kZWYgQ09ORklHX1JBRElPX1RZUEhPT05fUFJPQ19GUwotI2VuZGlmCitzdGF0aWMgaW50IGlvID0gQ09ORklHX1JBRElPX1RZUEhPT05fUE9SVDsKK3N0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKIAotc3RydWN0IHR5cGhvb25fZGV2aWNlIHsKLQl1bnNpZ25lZCBsb25nIGluX3VzZTsKLQlpbnQgaW9iYXNlOworbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBUeXBob29uIGNhcmQgKDB4MzE2IG9yIDB4MzM2KSIpOworCittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG11dGVmcmVxID0gQ09ORklHX1JBRElPX1RZUEhPT05fTVVURUZSRVE7Cittb2R1bGVfcGFyYW0obXV0ZWZyZXEsIHVsb25nLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobXV0ZWZyZXEsICJGcmVxdWVuY3kgdXNlZCB3aGVuIG11dGluZyB0aGUgY2FyZCAoaW4ga0h6KSIpOworCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMSwgMSkKKworI2RlZmluZSBCQU5ORVIgIlR5cGhvb24gUmFkaW8gQ2FyZCBkcml2ZXIgdjAuMS4xXG4iCisKK3N0cnVjdCB0eXBob29uIHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OworCWludCBpbzsKIAlpbnQgY3Vydm9sOwogCWludCBtdXRlZDsKIAl1bnNpZ25lZCBsb25nIGN1cmZyZXE7CkBAIC04OCwyNSArNzksMTkgQEAKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CiAKLXN0YXRpYyB2b2lkIHR5cGhvb25fc2V0dm9sX2dlbmVyaWMoc3RydWN0IHR5cGhvb25fZGV2aWNlICpkZXYsIGludCB2b2wpOwotc3RhdGljIGludCB0eXBob29uX3NldGZyZXFfZ2VuZXJpYyhzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKmRldiwKLQkJCQkgICB1bnNpZ25lZCBsb25nIGZyZXF1ZW5jeSk7Ci1zdGF0aWMgaW50IHR5cGhvb25fc2V0ZnJlcShzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmcmVxdWVuY3kpOwotc3RhdGljIHZvaWQgdHlwaG9vbl9tdXRlKHN0cnVjdCB0eXBob29uX2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIHR5cGhvb25fdW5tdXRlKHN0cnVjdCB0eXBob29uX2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgdHlwaG9vbl9zZXR2b2woc3RydWN0IHR5cGhvb25fZGV2aWNlICpkZXYsIGludCB2b2wpOworc3RhdGljIHN0cnVjdCB0eXBob29uIHR5cGhvb25fY2FyZDsKIAotc3RhdGljIHZvaWQgdHlwaG9vbl9zZXR2b2xfZ2VuZXJpYyhzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKmRldiwgaW50IHZvbCkKK3N0YXRpYyB2b2lkIHR5cGhvb25fc2V0dm9sX2dlbmVyaWMoc3RydWN0IHR5cGhvb24gKmRldiwgaW50IHZvbCkKIHsKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCXZvbCA+Pj0gMTQ7CQkJCS8qIE1hcCAxNiBiaXQgdG8gMiBiaXQgKi8KIAl2b2wgJj0gMzsKLQlvdXRiX3Aodm9sIC8gMiwgZGV2LT5pb2Jhc2UpOwkJLyogU2V0IHRoZSB2b2x1bWUsIGhpZ2ggYml0LiAqLwotCW91dGJfcCh2b2wgJSAyLCBkZXYtPmlvYmFzZSArIDIpOwkvKiBTZXQgdGhlIHZvbHVtZSwgbG93IGJpdC4gKi8KKwlvdXRiX3Aodm9sIC8gMiwgZGV2LT5pbyk7CQkvKiBTZXQgdGhlIHZvbHVtZSwgaGlnaCBiaXQuICovCisJb3V0Yl9wKHZvbCAlIDIsIGRldi0+aW8gKyAyKTsJLyogU2V0IHRoZSB2b2x1bWUsIGxvdyBiaXQuICovCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogfQogCi1zdGF0aWMgaW50IHR5cGhvb25fc2V0ZnJlcV9nZW5lcmljKHN0cnVjdCB0eXBob29uX2RldmljZSAqZGV2LAorc3RhdGljIGludCB0eXBob29uX3NldGZyZXFfZ2VuZXJpYyhzdHJ1Y3QgdHlwaG9vbiAqZGV2LAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5KQogewogCXVuc2lnbmVkIGxvbmcgb3V0dmFsOwpAQCAtMTMwLDIyICsxMTUsMjIgQEAKIAlvdXR2YWwgLT0gKDEwICogeCAqIHggKyAxMDQzMykgLyAyMDg2NjsKIAlvdXR2YWwgKz0gNCAqIHggLSAxMTUwNTsKIAotCW91dGJfcCgob3V0dmFsID4+IDgpICYgMHgwMSwgZGV2LT5pb2Jhc2UgKyA0KTsKLQlvdXRiX3Aob3V0dmFsID4+IDksIGRldi0+aW9iYXNlICsgNik7Ci0Jb3V0Yl9wKG91dHZhbCAmIDB4ZmYsIGRldi0+aW9iYXNlICsgOCk7CisJb3V0Yl9wKChvdXR2YWwgPj4gOCkgJiAweDAxLCBkZXYtPmlvICsgNCk7CisJb3V0Yl9wKG91dHZhbCA+PiA5LCBkZXYtPmlvICsgNik7CisJb3V0Yl9wKG91dHZhbCAmIDB4ZmYsIGRldi0+aW8gKyA4KTsKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0eXBob29uX3NldGZyZXEoc3RydWN0IHR5cGhvb25fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5KQorc3RhdGljIGludCB0eXBob29uX3NldGZyZXEoc3RydWN0IHR5cGhvb24gKmRldiwgdW5zaWduZWQgbG9uZyBmcmVxdWVuY3kpCiB7CiAJdHlwaG9vbl9zZXRmcmVxX2dlbmVyaWMoZGV2LCBmcmVxdWVuY3kpOwogCWRldi0+Y3VyZnJlcSA9IGZyZXF1ZW5jeTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdHlwaG9vbl9tdXRlKHN0cnVjdCB0eXBob29uX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgdHlwaG9vbl9tdXRlKHN0cnVjdCB0eXBob29uICpkZXYpCiB7CiAJaWYgKGRldi0+bXV0ZWQgPT0gMSkKIAkJcmV0dXJuOwpAQCAtMTU0LDcgKzEzOSw3IEBACiAJZGV2LT5tdXRlZCA9IDE7CiB9CiAKLXN0YXRpYyB2b2lkIHR5cGhvb25fdW5tdXRlKHN0cnVjdCB0eXBob29uX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgdHlwaG9vbl91bm11dGUoc3RydWN0IHR5cGhvb24gKmRldikKIHsKIAlpZiAoZGV2LT5tdXRlZCA9PSAwKQogCQlyZXR1cm47CkBAIC0xNjMsNyArMTQ4LDcgQEAKIAlkZXYtPm11dGVkID0gMDsKIH0KIAotc3RhdGljIGludCB0eXBob29uX3NldHZvbChzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKmRldiwgaW50IHZvbCkKK3N0YXRpYyBpbnQgdHlwaG9vbl9zZXR2b2woc3RydWN0IHR5cGhvb24gKmRldiwgaW50IHZvbCkKIHsKIAlpZiAoZGV2LT5tdXRlZCAmJiB2b2wgIT0gMCkgewkvKiB1c2VyIGlzIHVubXV0aW5nIHRoZSBjYXJkICovCiAJCWRldi0+Y3Vydm9sID0gdm9sOwpAQCAtMTg4LDkgKzE3Myw5IEBACiB7CiAJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby10eXBob29uIiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIlR5cGhvb24gUmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOwotCXNwcmludGYodi0+YnVzX2luZm8sICJJU0EiKTsKKwlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjAwLDEwICsxODUsMTAgQEAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0Jdi0+cmFuZ2Vsb3cgPSAoODcuNSoxNjAwMCk7Ci0Jdi0+cmFuZ2VoaWdoID0gKDEwOCoxNjAwMCk7CisJdi0+cmFuZ2Vsb3cgPSA4Ny41ICogMTYwMDA7CisJdi0+cmFuZ2VoaWdoID0gMTA4ICogMTYwMDA7CiAJdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CiAJdi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKIAl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CkBAIC0yMTQsNDQgKzE5OSwzNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0JaWYgKHYtPmluZGV4ID4gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHYtPmluZGV4ID8gLUVJTlZBTCA6IDA7Cit9CiAKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJc3RydWN0IHR5cGhvb24gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKKwlmLT5mcmVxdWVuY3kgPSBkZXYtPmN1cmZyZXE7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHR5cGhvb25fZGV2aWNlICp0eXBob29uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdHlwaG9vbiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotCXR5cGhvb24tPmN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7Ci0JdHlwaG9vbl9zZXRmcmVxKHR5cGhvb24sIHR5cGhvb24tPmN1cmZyZXEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQotewotCXN0cnVjdCB0eXBob29uX2RldmljZSAqdHlwaG9vbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLQlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQlmLT5mcmVxdWVuY3kgPSB0eXBob29uLT5jdXJmcmVxOwotCisJZGV2LT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OworCXR5cGhvb25fc2V0ZnJlcShkZXYsIGRldi0+Y3VyZnJlcSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7Ci0JCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAotCQkJCQkJc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgMTYzODQsIDY1NTM1KTsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yNTksMTQgKzIzNywxNCBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB0eXBob29uX2RldmljZSAqdHlwaG9vbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHR5cGhvb24gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQljdHJsLT52YWx1ZSA9IHR5cGhvb24tPm11dGVkOworCQljdHJsLT52YWx1ZSA9IGRldi0+bXV0ZWQ7CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQljdHJsLT52YWx1ZSA9IHR5cGhvb24tPmN1cnZvbDsKKwkJY3RybC0+dmFsdWUgPSBkZXYtPmN1cnZvbDsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwpAQCAtMjc1LDMzICsyNTMsMjIgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHR5cGhvb25fZGV2aWNlICp0eXBob29uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdHlwaG9vbiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWlmIChjdHJsLT52YWx1ZSkKLQkJCXR5cGhvb25fbXV0ZSh0eXBob29uKTsKKwkJCXR5cGhvb25fbXV0ZShkZXYpOwogCQllbHNlCi0JCQl0eXBob29uX3VubXV0ZSh0eXBob29uKTsKKwkJCXR5cGhvb25fdW5tdXRlKGRldik7CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQl0eXBob29uX3NldHZvbCh0eXBob29uLCBjdHJsLT52YWx1ZSk7CisJCXR5cGhvb25fc2V0dm9sKGRldiwgY3RybC0+dmFsdWUpOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWlmIChhLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKIHsKIAkqaSA9IDA7CkBAIC0zMTAsNDUgKzI3Nyw2MiBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCA9IDA7CisJc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfbG9nX3N0YXR1cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgdHlwaG9vbiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJmRldi0+djRsMl9kZXY7CisKKwl2NGwyX2luZm8odjRsMl9kZXYsIEJBTk5FUik7CisjaWZkZWYgTU9EVUxFCisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiTG9hZCB0eXBlOiBEcml2ZXIgbG9hZGVkIGFzIGEgbW9kdWxlXG5cbiIpOworI2Vsc2UKKwl2NGwyX2luZm8odjRsMl9kZXYsICJMb2FkIHR5cGU6IERyaXZlciBjb21waWxlZCBpbnRvIGtlcm5lbFxuXG4iKTsKKyNlbmRpZgorCXY0bDJfaW5mbyh2NGwyX2RldiwgImZyZXF1ZW5jeSA9ICVsdSBrSHpcbiIsIGRldi0+Y3VyZnJlcSA+PiA0KTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJ2b2x1bWUgPSAlZFxuIiwgZGV2LT5jdXJ2b2wpOworCXY0bDJfaW5mbyh2NGwyX2RldiwgIm11dGUgPSAlc1xuIiwgZGV2LT5tdXRlZCA/ICAib24iIDogIm9mZiIpOworCXY0bDJfaW5mbyh2NGwyX2RldiwgImlvID0gMHgleFxuIiwgZGV2LT5pbyk7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAibXV0ZSBmcmVxdWVuY3kgPSAlbHUga0h6XG4iLCBkZXYtPm11dGVmcmVxID4+IDQpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHR5cGhvb25fZGV2aWNlIHR5cGhvb25fdW5pdCA9CitzdGF0aWMgaW50IHR5cGhvb25fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQkuaW9iYXNlCQk9IENPTkZJR19SQURJT19UWVBIT09OX1BPUlQsCi0JLmN1cmZyZXEJPSBDT05GSUdfUkFESU9fVFlQSE9PTl9NVVRFRlJFUSwKLQkubXV0ZWZyZXEJPSBDT05GSUdfUkFESU9fVFlQSE9PTl9NVVRFRlJFUSwKLX07Ci0KLXN0YXRpYyBpbnQgdHlwaG9vbl9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmdHlwaG9vbl91bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHR5cGhvb25fZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHR5cGhvb25fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQljbGVhcl9iaXQoMCwgJnR5cGhvb25fdW5pdC5pbl91c2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHR5cGhvb25fZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gdHlwaG9vbl9leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSB0eXBob29uX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IHR5cGhvb25fb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSB0eXBob29uX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdHlwaG9vbl9pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19sb2dfc3RhdHVzICA9IHZpZGlvY19sb2dfc3RhdHVzLAogCS52aWRpb2NfcXVlcnljYXAgICAgPSB2aWRpb2NfcXVlcnljYXAsCiAJLnZpZGlvY19nX3R1bmVyICAgICA9IHZpZGlvY19nX3R1bmVyLAogCS52aWRpb2Nfc190dW5lciAgICAgPSB2aWRpb2Nfc190dW5lciwKQEAgLTM2MywxMjUgKzM0Nyw3MiBAQAogCS52aWRpb2Nfc19jdHJsICAgICAgPSB2aWRpb2Nfc19jdHJsLAogfTsKIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgdHlwaG9vbl9yYWRpbyA9IHsKLQkubmFtZQkJPSAiVHlwaG9vbiBSYWRpbyIsCi0JLmZvcHMgICAgICAgICAgID0gJnR5cGhvb25fZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZ0eXBob29uX2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQotI2lmZGVmIENPTkZJR19SQURJT19UWVBIT09OX1BST0NfRlMKLQotc3RhdGljIGludCB0eXBob29uX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci0JI2lmZGVmIE1PRFVMRQotCSAgICAjZGVmaW5lIE1PRFVMRVBST0NTVFJJTkcgIkRyaXZlciBsb2FkZWQgYXMgYSBtb2R1bGUiCi0JI2Vsc2UKLQkgICAgI2RlZmluZSBNT0RVTEVQUk9DU1RSSU5HICJEcml2ZXIgY29tcGlsZWQgaW50byBrZXJuZWwiCi0JI2VuZGlmCi0KLQlzZXFfcHV0cyhtLCBCQU5ORVIpOwotCXNlcV9wdXRzKG0sICJMb2FkIHR5cGU6ICIgTU9EVUxFUFJPQ1NUUklORyAiXG5cbiIpOwotCXNlcV9wcmludGYobSwgImZyZXF1ZW5jeSA9ICVsdSBrSHpcbiIsCi0JCXR5cGhvb25fdW5pdC5jdXJmcmVxID4+IDQpOwotCXNlcV9wcmludGYobSwgInZvbHVtZSA9ICVkXG4iLCB0eXBob29uX3VuaXQuY3Vydm9sKTsKLQlzZXFfcHJpbnRmKG0sICJtdXRlID0gJXNcbiIsIHR5cGhvb25fdW5pdC5tdXRlZCA/Ci0JCSJvbiIgOiAib2ZmIik7Ci0Jc2VxX3ByaW50ZihtLCAiaW9iYXNlID0gMHgleFxuIiwgdHlwaG9vbl91bml0LmlvYmFzZSk7Ci0Jc2VxX3ByaW50ZihtLCAibXV0ZSBmcmVxdWVuY3kgPSAlbHUga0h6XG4iLAotCQl0eXBob29uX3VuaXQubXV0ZWZyZXEgPj4gNCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdHlwaG9vbl9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHR5cGhvb25fcHJvY19zaG93LCBOVUxMKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHlwaG9vbl9wcm9jX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IHR5cGhvb25fcHJvY19vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCi19OwotI2VuZGlmIC8qIENPTkZJR19SQURJT19UWVBIT09OX1BST0NfRlMgKi8KLQotTU9EVUxFX0FVVEhPUigiRHIuIEhlbnJpayBTZWlkZWwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBUeXBob29uIHJhZGlvIGNhcmQgKGEuay5hLiBFY29SYWRpbykuIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLXN0YXRpYyBpbnQgaW8gPSAtMTsKLXN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKLQotbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBUeXBob29uIGNhcmQgKDB4MzE2IG9yIDB4MzM2KSIpOwotbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwotCi0jaWZkZWYgTU9EVUxFCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBtdXRlZnJlcTsKLW1vZHVsZV9wYXJhbShtdXRlZnJlcSwgdWxvbmcsIDApOwotTU9EVUxFX1BBUk1fREVTQyhtdXRlZnJlcSwgIkZyZXF1ZW5jeSB1c2VkIHdoZW4gbXV0aW5nIHRoZSBjYXJkIChpbiBrSHopIik7Ci0jZW5kaWYKLQogc3RhdGljIGludCBfX2luaXQgdHlwaG9vbl9pbml0KHZvaWQpCiB7Ci0jaWZkZWYgTU9EVUxFCi0JaWYgKGlvID09IC0xKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicmFkaW8tdHlwaG9vbjogWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHgzMTYgb3IgaW89MHgzMzZcbiIpOworCXN0cnVjdCB0eXBob29uICpkZXYgPSAmdHlwaG9vbl9jYXJkOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmZGV2LT52NGwyX2RldjsKKwlpbnQgcmVzOworCisJc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgInR5cGhvb24iLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKKwlkZXYtPmlvID0gaW87CisJZGV2LT5jdXJmcmVxID0gZGV2LT5tdXRlZnJlcSA9IG11dGVmcmVxOworCisJaWYgKGRldi0+aW8gPT0gLTEpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJZb3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weDMxNiBvciBpbz0weDMzNlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQl0eXBob29uX3VuaXQuaW9iYXNlID0gaW87CiAKLQlpZiAobXV0ZWZyZXEgPCA4NzAwMCB8fCBtdXRlZnJlcSA+IDEwODUwMCkgewotCQlwcmludGsoS0VSTl9FUlIgInJhZGlvLXR5cGhvb246IFlvdSBtdXN0IHNldCBhIGZyZXF1ZW5jeSAoaW4ga0h6KSB1c2VkIHdoZW4gbXV0aW5nIHRoZSBjYXJkLFxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAicmFkaW8tdHlwaG9vbjogZS5nLiB3aXRoIFwibXV0ZWZyZXE9ODc1MDBcIiAoODcwMDAgPD0gbXV0ZWZyZXEgPD0gMTA4NTAwKVxuIik7CisJaWYgKGRldi0+bXV0ZWZyZXEgPCA4NzAwMCB8fCBkZXYtPm11dGVmcmVxID4gMTA4NTAwKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiWW91IG11c3Qgc2V0IGEgZnJlcXVlbmN5IChpbiBrSHopIHVzZWQgd2hlbiBtdXRpbmcgdGhlIGNhcmQsXG4iKTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJlLmcuIHdpdGggXCJtdXRlZnJlcT04NzUwMFwiICg4NzAwMCA8PSBtdXRlZnJlcSA8PSAxMDg1MDApXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXR5cGhvb25fdW5pdC5tdXRlZnJlcSA9IG11dGVmcmVxOwotI2VuZGlmIC8qIE1PRFVMRSAqLwogCi0JcHJpbnRrKEtFUk5fSU5GTyBCQU5ORVIpOwotCW11dGV4X2luaXQoJnR5cGhvb25fdW5pdC5sb2NrKTsKLQlpbyA9IHR5cGhvb25fdW5pdC5pb2Jhc2U7Ci0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbywgOCwgInR5cGhvb24iKSkgewotCQlwcmludGsoS0VSTl9FUlIgInJhZGlvLXR5cGhvb246IHBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwKLQkJICAgICAgIHR5cGhvb25fdW5pdC5pb2Jhc2UpOworCW11dGV4X2luaXQoJmRldi0+bG9jayk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihkZXYtPmlvLCA4LCAidHlwaG9vbiIpKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAicG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLAorCQkgICAgICAgZGV2LT5pbyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JdmlkZW9fc2V0X2RydmRhdGEoJnR5cGhvb25fcmFkaW8sICZ0eXBob29uX3VuaXQpOwotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnR5cGhvb25fcmFkaW8sIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7Ci0JCXJlbGVhc2VfcmVnaW9uKGlvLCA4KTsKKwlyZXMgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCB2NGwyX2Rldik7CisJaWYgKHJlcyA8IDApIHsKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pbywgOCk7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKKwkJcmV0dXJuIHJlczsKKwl9CisJdjRsMl9pbmZvKHY0bDJfZGV2LCBCQU5ORVIpOworCisJc3RybGNweShkZXYtPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZihkZXYtPnZkZXYubmFtZSkpOworCWRldi0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCWRldi0+dmRldi5mb3BzID0gJnR5cGhvb25fZm9wczsKKwlkZXYtPnZkZXYuaW9jdGxfb3BzID0gJnR5cGhvb25faW9jdGxfb3BzOworCWRldi0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJdmlkZW9fc2V0X2RydmRhdGEoJmRldi0+dmRldiwgZGV2KTsKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnZkZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOworCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvLCA4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXByaW50ayhLRVJOX0lORk8gInJhZGlvLXR5cGhvb246IHBvcnQgMHgleC5cbiIsIHR5cGhvb25fdW5pdC5pb2Jhc2UpOwotCXByaW50ayhLRVJOX0lORk8gInJhZGlvLXR5cGhvb246IG11dGUgZnJlcXVlbmN5IGlzICVsdSBrSHouXG4iLAotCSAgICAgICB0eXBob29uX3VuaXQubXV0ZWZyZXEpOwotCXR5cGhvb25fdW5pdC5tdXRlZnJlcSA8PD0gNDsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJwb3J0IDB4JXguXG4iLCBkZXYtPmlvKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJtdXRlIGZyZXF1ZW5jeSBpcyAlbHUga0h6LlxuIiwgZGV2LT5tdXRlZnJlcSk7CisJZGV2LT5tdXRlZnJlcSA8PD0gNDsKIAogCS8qIG11dGUgY2FyZCAtIHByZXZlbnRzIG5vaXN5IGJvb3R1cHMgKi8KLQl0eXBob29uX211dGUoJnR5cGhvb25fdW5pdCk7Ci0KLSNpZmRlZiBDT05GSUdfUkFESU9fVFlQSE9PTl9QUk9DX0ZTCi0JaWYgKCFwcm9jX2NyZWF0ZSgiZHJpdmVyL3JhZGlvLXR5cGhvb24iLCAwLCBOVUxMLCAmdHlwaG9vbl9wcm9jX2ZvcHMpKQotCQlwcmludGsoS0VSTl9FUlIgInJhZGlvLXR5cGhvb246IHJlZ2lzdGVyaW5nIC9wcm9jL2RyaXZlci9yYWRpby10eXBob29uIGZhaWxlZFxuIik7Ci0jZW5kaWYKKwl0eXBob29uX211dGUoZGV2KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgdHlwaG9vbl9jbGVhbnVwX21vZHVsZSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHR5cGhvb25fZXhpdCh2b2lkKQogeworCXN0cnVjdCB0eXBob29uICpkZXYgPSAmdHlwaG9vbl9jYXJkOwogCi0jaWZkZWYgQ09ORklHX1JBRElPX1RZUEhPT05fUFJPQ19GUwotCXJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmFkaW8tdHlwaG9vbiIsIE5VTEwpOwotI2VuZGlmCi0KLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmdHlwaG9vbl9yYWRpbyk7Ci0JcmVsZWFzZV9yZWdpb24oaW8sIDgpOworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOworCXJlbGVhc2VfcmVnaW9uKGRldi0+aW8sIDgpOwogfQogCiBtb2R1bGVfaW5pdCh0eXBob29uX2luaXQpOwotbW9kdWxlX2V4aXQodHlwaG9vbl9jbGVhbnVwX21vZHVsZSk7Cittb2R1bGVfZXhpdCh0eXBob29uX2V4aXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXpvbHRyaXguYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jCmluZGV4IGQyYWMxN2UuLjFmODVmMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jCkBAIC0zMywzMyArMzMsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YSAgICAgICAgICAgICAgICAgICAgICAgKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24JCSAgKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiB1ZGVsYXksIG1zbGVlcCAgICAgICAgICAgICAgICAgKi8KLSNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG91dGIsIG91dGJfcCAgICAgICAgICAgICAgICAgICAqLwotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyICAgICAgICAgICAgICAqLwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBrZXJuZWwgcmFkaW8gc3RydWN0cyAgICAgICAgICAgKi8KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KKyNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wICAgICAgICAgICAgICAgICAgICovCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMCwyKQotCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7Ci0JewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS5uYW1lICAgICAgICAgID0gIk11dGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JfSx7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAotCQkubmFtZSAgICAgICAgICA9ICJWb2x1bWUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gNjU1MzUsCi0JCS5zdGVwICAgICAgICAgID0gNDA5NiwKLQkJLmRlZmF1bHRfdmFsdWUgPSAweGZmLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JfQotfTsKK01PRFVMRV9BVVRIT1IoIkMudmFuIFNjaGFpayIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFpvbHRyaXggUmFkaW8gUGx1cy4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2lmbmRlZiBDT05GSUdfUkFESU9fWk9MVFJJWF9QT1JUCiAjZGVmaW5lIENPTkZJR19SQURJT19aT0xUUklYX1BPUlQgLTEKQEAgLTY4LDkgKzUxLDE2IEBACiBzdGF0aWMgaW50IGlvID0gQ09ORklHX1JBRElPX1pPTFRSSVhfUE9SVDsKIHN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKIAotc3RydWN0IHpvbF9kZXZpY2UgewotCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwotCWludCBwb3J0OworbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBab2x0cml4IFJhZGlvIFBsdXMgKDB4MjBjIG9yIDB4MzBjKSIpOworbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOworCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMikKKworc3RydWN0IHpvbHRyaXggeworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJaW50IGlvOwogCWludCBjdXJ2b2w7CiAJdW5zaWduZWQgbG9uZyBjdXJmcmVxOwogCWludCBtdXRlZDsKQEAgLTc4LDE2MSArNjgsMTU4IEBACiAJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCi1zdGF0aWMgaW50IHpvbF9zZXR2b2woc3RydWN0IHpvbF9kZXZpY2UgKmRldiwgaW50IHZvbCkKK3N0YXRpYyBzdHJ1Y3Qgem9sdHJpeCB6b2x0cml4X2NhcmQ7CisKK3N0YXRpYyBpbnQgem9sX3NldHZvbChzdHJ1Y3Qgem9sdHJpeCAqem9sLCBpbnQgdm9sKQogewotCWRldi0+Y3Vydm9sID0gdm9sOwotCWlmIChkZXYtPm11dGVkKQorCXpvbC0+Y3Vydm9sID0gdm9sOworCWlmICh6b2wtPm11dGVkKQogCQlyZXR1cm4gMDsKIAotCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJbXV0ZXhfbG9jaygmem9sLT5sb2NrKTsKIAlpZiAodm9sID09IDApIHsKLQkJb3V0YigwLCBpbyk7Ci0JCW91dGIoMCwgaW8pOwotCQlpbmIoaW8gKyAzKTsgICAgLyogWm9sdHJpeCBuZWVkcyB0byBiZSByZWFkIHRvIGNvbmZpcm0gKi8KLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlvdXRiKDAsIHpvbC0+aW8pOworCQlvdXRiKDAsIHpvbC0+aW8pOworCQlpbmIoem9sLT5pbyArIDMpOyAgICAvKiBab2x0cml4IG5lZWRzIHRvIGJlIHJlYWQgdG8gY29uZmlybSAqLworCQltdXRleF91bmxvY2soJnpvbC0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KIAotCW91dGIoZGV2LT5jdXJ2b2wtMSwgaW8pOworCW91dGIoem9sLT5jdXJ2b2wtMSwgem9sLT5pbyk7CiAJbXNsZWVwKDEwKTsKLQlpbmIoaW8gKyAyKTsKLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJaW5iKHpvbC0+aW8gKyAyKTsKKwltdXRleF91bmxvY2soJnpvbC0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHpvbF9tdXRlKHN0cnVjdCB6b2xfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCB6b2xfbXV0ZShzdHJ1Y3Qgem9sdHJpeCAqem9sKQogewotCWRldi0+bXV0ZWQgPSAxOwotCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0Jb3V0YigwLCBpbyk7Ci0Jb3V0YigwLCBpbyk7Ci0JaW5iKGlvICsgMyk7ICAgICAgICAgICAgLyogWm9sdHJpeCBuZWVkcyB0byBiZSByZWFkIHRvIGNvbmZpcm0gKi8KLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJem9sLT5tdXRlZCA9IDE7CisJbXV0ZXhfbG9jaygmem9sLT5sb2NrKTsKKwlvdXRiKDAsIHpvbC0+aW8pOworCW91dGIoMCwgem9sLT5pbyk7CisJaW5iKHpvbC0+aW8gKyAzKTsgICAgICAgICAgICAvKiBab2x0cml4IG5lZWRzIHRvIGJlIHJlYWQgdG8gY29uZmlybSAqLworCW11dGV4X3VubG9jaygmem9sLT5sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgem9sX3VubXV0ZShzdHJ1Y3Qgem9sX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgem9sX3VubXV0ZShzdHJ1Y3Qgem9sdHJpeCAqem9sKQogewotCWRldi0+bXV0ZWQgPSAwOwotCXpvbF9zZXR2b2woZGV2LCBkZXYtPmN1cnZvbCk7CisJem9sLT5tdXRlZCA9IDA7CisJem9sX3NldHZvbCh6b2wsIHpvbC0+Y3Vydm9sKTsKIH0KIAotc3RhdGljIGludCB6b2xfc2V0ZnJlcShzdHJ1Y3Qgem9sX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZyZXEpCitzdGF0aWMgaW50IHpvbF9zZXRmcmVxKHN0cnVjdCB6b2x0cml4ICp6b2wsIHVuc2lnbmVkIGxvbmcgZnJlcSkKIHsKIAkvKiB0dW5lcyB0aGUgcmFkaW8gdG8gdGhlIGRlc2lyZWQgZnJlcXVlbmN5ICovCisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZ6b2wtPnY0bDJfZGV2OwogCXVuc2lnbmVkIGxvbmcgbG9uZyBiaXRtYXNrLCBmLCBtOwotCXVuc2lnbmVkIGludCBzdGVyZW8gPSBkZXYtPnN0ZXJlbzsKKwl1bnNpZ25lZCBpbnQgc3RlcmVvID0gem9sLT5zdGVyZW87CiAJaW50IGk7CiAKIAlpZiAoZnJlcSA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInpvbHRyaXg6IHJlY2VpdmVkIHplcm8gZnJlcS4gRmFpbGVkIHRvIHNldC5cbiIpOworCQl2NGwyX3dhcm4odjRsMl9kZXYsICJjYW5ub3Qgc2V0IGEgZnJlcXVlbmN5IG9mIDAuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJbSA9IChmcmVxIC8gMTYwIC0gODgwMCkgKiAyOwotCWYgPSAodW5zaWduZWQgbG9uZyBsb25nKSBtICsgMHg0ZDFjOworCWYgPSAodW5zaWduZWQgbG9uZyBsb25nKW0gKyAweDRkMWM7CiAKIAliaXRtYXNrID0gMHhjNDgwNDAyYzEwMDgwMDAwdWxsOwogCWkgPSA0NTsKIAotCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJbXV0ZXhfbG9jaygmem9sLT5sb2NrKTsKIAotCW91dGIoMCwgaW8pOwotCW91dGIoMCwgaW8pOwotCWluYihpbyArIDMpOyAgICAgICAgICAgIC8qIFpvbHRyaXggbmVlZHMgdG8gYmUgcmVhZCB0byBjb25maXJtICovCisJem9sLT5jdXJmcmVxID0gZnJlcTsKIAotCW91dGIoMHg0MCwgaW8pOwotCW91dGIoMHhjMCwgaW8pOworCW91dGIoMCwgem9sLT5pbyk7CisJb3V0YigwLCB6b2wtPmlvKTsKKwlpbmIoem9sLT5pbyArIDMpOyAgICAgICAgICAgIC8qIFpvbHRyaXggbmVlZHMgdG8gYmUgcmVhZCB0byBjb25maXJtICovCiAKLQliaXRtYXNrID0gKGJpdG1hc2sgXiAoKGYgJiAweGZmKSA8PCA0NykgXiAoKGYgJiAweGZmMDApIDw8IDMwKSBeICggc3RlcmVvIDw8IDMxKSk7CisJb3V0YigweDQwLCB6b2wtPmlvKTsKKwlvdXRiKDB4YzAsIHpvbC0+aW8pOworCisJYml0bWFzayA9IChiaXRtYXNrIF4gKChmICYgMHhmZikgPDwgNDcpIF4gKChmICYgMHhmZjAwKSA8PCAzMCkgXiAoc3RlcmVvIDw8IDMxKSk7CiAJd2hpbGUgKGktLSkgewogCQlpZiAoKGJpdG1hc2sgJiAweDgwMDAwMDAwMDAwMDAwMDB1bGwpICE9IDApIHsKLQkJCW91dGIoMHg4MCwgaW8pOworCQkJb3V0YigweDgwLCB6b2wtPmlvKTsKIAkJCXVkZWxheSg1MCk7Ci0JCQlvdXRiKDB4MDAsIGlvKTsKKwkJCW91dGIoMHgwMCwgem9sLT5pbyk7CiAJCQl1ZGVsYXkoNTApOwotCQkJb3V0YigweDgwLCBpbyk7CisJCQlvdXRiKDB4ODAsIHpvbC0+aW8pOwogCQkJdWRlbGF5KDUwKTsKIAkJfSBlbHNlIHsKLQkJCW91dGIoMHhjMCwgaW8pOworCQkJb3V0YigweGMwLCB6b2wtPmlvKTsKIAkJCXVkZWxheSg1MCk7Ci0JCQlvdXRiKDB4NDAsIGlvKTsKKwkJCW91dGIoMHg0MCwgem9sLT5pbyk7CiAJCQl1ZGVsYXkoNTApOwotCQkJb3V0YigweGMwLCBpbyk7CisJCQlvdXRiKDB4YzAsIHpvbC0+aW8pOwogCQkJdWRlbGF5KDUwKTsKIAkJfQogCQliaXRtYXNrICo9IDI7CiAJfQogCS8qIHRlcm1pbmF0aW9uIHNlcXVlbmNlICovCi0Jb3V0YigweDgwLCBpbyk7Ci0Jb3V0YigweGMwLCBpbyk7Ci0Jb3V0YigweDQwLCBpbyk7CisJb3V0YigweDgwLCB6b2wtPmlvKTsKKwlvdXRiKDB4YzAsIHpvbC0+aW8pOworCW91dGIoMHg0MCwgem9sLT5pbyk7CiAJdWRlbGF5KDEwMDApOwotCWluYihpbysyKTsKKwlpbmIoem9sLT5pbyArIDIpOwogCiAJdWRlbGF5KDEwMDApOwogCi0JaWYgKGRldi0+bXV0ZWQpCi0JewotCQlvdXRiKDAsIGlvKTsKLQkJb3V0YigwLCBpbyk7Ci0JCWluYihpbyArIDMpOworCWlmICh6b2wtPm11dGVkKSB7CisJCW91dGIoMCwgem9sLT5pbyk7CisJCW91dGIoMCwgem9sLT5pbyk7CisJCWluYih6b2wtPmlvICsgMyk7CiAJCXVkZWxheSgxMDAwKTsKIAl9CiAKLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ6b2wtPmxvY2spOwogCi0JaWYoIWRldi0+bXV0ZWQpCi0JewotCQl6b2xfc2V0dm9sKGRldiwgZGV2LT5jdXJ2b2wpOwotCX0KKwlpZiAoIXpvbC0+bXV0ZWQpCisJCXpvbF9zZXR2b2woem9sLCB6b2wtPmN1cnZvbCk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIEdldCBzaWduYWwgc3RyZW5ndGggKi8KLQotc3RhdGljIGludCB6b2xfZ2V0c2lnc3RyKHN0cnVjdCB6b2xfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHpvbF9nZXRzaWdzdHIoc3RydWN0IHpvbHRyaXggKnpvbCkKIHsKIAlpbnQgYSwgYjsKIAotCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0Jb3V0YigweDAwLCBpbyk7ICAgICAgICAgLyogVGhpcyBzdHVmZiBJIGZvdW5kIHRvIGRvIG5vdGhpbmcgKi8KLQlvdXRiKGRldi0+Y3Vydm9sLCBpbyk7CisJbXV0ZXhfbG9jaygmem9sLT5sb2NrKTsKKwlvdXRiKDB4MDAsIHpvbC0+aW8pOyAgICAgICAgIC8qIFRoaXMgc3R1ZmYgSSBmb3VuZCB0byBkbyBub3RoaW5nICovCisJb3V0Yih6b2wtPmN1cnZvbCwgem9sLT5pbyk7CiAJbXNsZWVwKDIwKTsKIAotCWEgPSBpbmIoaW8pOworCWEgPSBpbmIoem9sLT5pbyk7CiAJbXNsZWVwKDEwKTsKLQliID0gaW5iKGlvKTsKKwliID0gaW5iKHpvbC0+aW8pOwogCi0JbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCW11dGV4X3VubG9jaygmem9sLT5sb2NrKTsKIAogCWlmIChhICE9IGIpCi0JCXJldHVybiAoMCk7CisJCXJldHVybiAwOwogCi0JaWYgKChhID09IDB4Y2YpIHx8IChhID09IDB4ZGYpICAvKiBJIGZvdW5kIHRoaXMgb3V0IGJ5IHBsYXlpbmcgKi8KLQkJfHwgKGEgPT0gMHhlZikpICAgICAgIC8qIHdpdGggYSBiaW5hcnkgc2Nhbm5lciBvbiB0aGUgY2FyZCBpbyAqLwotCQlyZXR1cm4gKDEpOwotCXJldHVybiAoMCk7CisJLyogSSBmb3VuZCB0aGlzIG91dCBieSBwbGF5aW5nIHdpdGggYSBiaW5hcnkgc2Nhbm5lciBvbiB0aGUgY2FyZCBpbyAqLworCXJldHVybiBhID09IDB4Y2YgfHwgYSA9PSAweGRmIHx8IGEgPT0gMHhlZjsKIH0KIAotc3RhdGljIGludCB6b2xfaXNfc3RlcmVvIChzdHJ1Y3Qgem9sX2RldmljZSAqZGV2KQorc3RhdGljIGludCB6b2xfaXNfc3RlcmVvKHN0cnVjdCB6b2x0cml4ICp6b2wpCiB7CiAJaW50IHgxLCB4MjsKIAotCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJbXV0ZXhfbG9jaygmem9sLT5sb2NrKTsKIAotCW91dGIoMHgwMCwgaW8pOwotCW91dGIoZGV2LT5jdXJ2b2wsIGlvKTsKKwlvdXRiKDB4MDAsIHpvbC0+aW8pOworCW91dGIoem9sLT5jdXJ2b2wsIHpvbC0+aW8pOwogCW1zbGVlcCgyMCk7CiAKLQl4MSA9IGluYihpbyk7CisJeDEgPSBpbmIoem9sLT5pbyk7CiAJbXNsZWVwKDEwKTsKLQl4MiA9IGluYihpbyk7CisJeDIgPSBpbmIoem9sLT5pbyk7CiAKLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ6b2wtPmxvY2spOwogCi0JaWYgKCh4MSA9PSB4MikgJiYgKHgxID09IDB4Y2YpKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4geDEgPT0geDIgJiYgeDEgPT0gMHhjZjsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LApAQCAtMjQwLDU5ICsyMjcsNTQgQEAKIHsKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLXpvbHRyaXgiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiWm9sdHJpeCBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIklTQSIpOworCXN0cmxjcHkodi0+YnVzX2luZm8sICJJU0EiLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKIAl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKLQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlzdHJ1Y3Qgem9sX2RldmljZSAqem9sID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3Qgem9sdHJpeCAqem9sID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQl2LT5yYW5nZWxvdyA9ICg4OCoxNjAwMCk7Ci0Jdi0+cmFuZ2VoaWdoID0gKDEwOCoxNjAwMCk7Ci0Jdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk98VjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCXYtPnJhbmdlbG93ID0gODggKiAxNjAwMDsKKwl2LT5yYW5nZWhpZ2ggPSAxMDggKiAxNjAwMDsKKwl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTyB8IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKIAl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XOwogCWlmICh6b2xfaXNfc3RlcmVvKHpvbCkpCiAJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCWVsc2UKIAkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwotCXYtPnNpZ25hbCA9IDB4RkZGRip6b2xfZ2V0c2lnc3RyKHpvbCk7CisJdi0+c2lnbmFsID0gMHhGRkZGICogem9sX2dldHNpZ3N0cih6b2wpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlpZiAodi0+aW5kZXggPiAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gdi0+aW5kZXggPyAtRUlOVkFMIDogMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3Qgem9sX2RldmljZSAqem9sID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3Qgem9sdHJpeCAqem9sID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotCXpvbC0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKLQlpZiAoem9sX3NldGZyZXEoem9sLCB6b2wtPmN1cmZyZXEpICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiem9sdHJpeDogU2V0IGZyZXF1ZW5jeSBmYWlsZWQuXG4iKTsKKwlpZiAoem9sX3NldGZyZXEoem9sLCBmLT5mcmVxdWVuY3kpICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3Qgem9sX2RldmljZSAqem9sID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3Qgem9sdHJpeCAqem9sID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IHpvbC0+Y3VyZnJlcTsKQEAgLTMwMiwxNCArMjg0LDExIEBACiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKLQkJCQkJCXNpemVvZigqcWMpKTsKLQkJCXJldHVybiAwOwotCQl9CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMSk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDQwOTYsIDY1NTM1KTsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0zMTcsNyArMjk2LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB6b2xfZGV2aWNlICp6b2wgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB6b2x0cml4ICp6b2wgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTMzMyw3ICszMTIsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHpvbF9kZXZpY2UgKnpvbCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHpvbHRyaXggKnpvbCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzQxLDQzICszMjAsMzAgQEAKIAkJCXpvbF9tdXRlKHpvbCk7CiAJCWVsc2UgewogCQkJem9sX3VubXV0ZSh6b2wpOwotCQkJem9sX3NldHZvbCh6b2wsem9sLT5jdXJ2b2wpOworCQkJem9sX3NldHZvbCh6b2wsIHpvbC0+Y3Vydm9sKTsKIAkJfQogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJem9sX3NldHZvbCh6b2wsY3RybC0+dmFsdWUvNDA5Nik7CisJCXpvbF9zZXR2b2woem9sLCBjdHJsLT52YWx1ZSAvIDQwOTYpOwogCQlyZXR1cm4gMDsKIAl9CiAJem9sLT5zdGVyZW8gPSAxOwotCWlmICh6b2xfc2V0ZnJlcSh6b2wsIHpvbC0+Y3VyZnJlcSkgIT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJ6b2x0cml4OiBTZXQgZnJlcXVlbmN5IGZhaWxlZC5cbiIpOworCWlmICh6b2xfc2V0ZnJlcSh6b2wsIHpvbC0+Y3VyZnJlcSkgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogI2lmIDAKIC8qIEZJWE1FOiBJbXBsZW1lbnQgc3RlcmVvL21vbm8gc3dpdGNoIG9uIFY0TDIgKi8KLQkJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfU1RFUkVPKSB7Ci0JCQkJem9sLT5zdGVyZW8gPSAxOwotCQkJCXpvbF9zZXRmcmVxKHpvbCwgem9sLT5jdXJmcmVxKTsKLQkJCX0KLQkJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTU9OTykgewotCQkJCXpvbC0+c3RlcmVvID0gMDsKLQkJCQl6b2xfc2V0ZnJlcSh6b2wsIHpvbC0+Y3VyZnJlcSk7Ci0JCQl9CisJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9TVEVSRU8pIHsKKwkJem9sLT5zdGVyZW8gPSAxOworCQl6b2xfc2V0ZnJlcSh6b2wsIHpvbC0+Y3VyZnJlcSk7CisJfQorCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfTU9OTykgeworCQl6b2wtPnN0ZXJlbyA9IDA7CisJCXpvbF9zZXRmcmVxKHpvbCwgem9sLT5jdXJmcmVxKTsKKwl9CiAjZW5kaWYKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JaWYgKGEtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQogewogCSppID0gMDsKQEAgLTM4NiwzNyArMzUyLDM5IEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQogewotCWlmIChpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBpID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWEtPmluZGV4ID0gMDsKKwlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCiB7Ci0JaWYgKGEtPmluZGV4ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBhLT5pbmRleCA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHpvbHRyaXhfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB6b2xfZGV2aWNlIHpvbHRyaXhfdW5pdDsKLQotc3RhdGljIGludCB6b2x0cml4X2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCB6b2x0cml4X3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJnpvbHRyaXhfdW5pdC5pbl91c2UpID8gLUVCVVNZIDogMDsKLX0KLQotc3RhdGljIGludCB6b2x0cml4X2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCWNsZWFyX2JpdCgwLCAmem9sdHJpeF91bml0LmluX3VzZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgem9sdHJpeF9mb3BzID0KIHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gem9sdHJpeF9leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSB6b2x0cml4X2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IHpvbHRyaXhfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSB6b2x0cml4X3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKIH07CiAKQEAgLTQzNSw2NyArNDAzLDc1IEBACiAJLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB6b2x0cml4X3JhZGlvID0gewotCS5uYW1lCQk9ICJab2x0cml4IFJhZGlvIFBsdXMiLAotCS5mb3BzICAgICAgICAgICA9ICZ6b2x0cml4X2ZvcHMsCi0JLmlvY3RsX29wcyAJPSAmem9sdHJpeF9pb2N0bF9vcHMsCi0JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IHpvbHRyaXhfaW5pdCh2b2lkKQogewotCWlmIChpbyA9PSAtMSkgewotCQlwcmludGsoS0VSTl9FUlIgIllvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4Pz8/XG4iKTsKKwlzdHJ1Y3Qgem9sdHJpeCAqem9sID0gJnpvbHRyaXhfY2FyZDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJnpvbC0+djRsMl9kZXY7CisJaW50IHJlczsKKworCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJ6b2x0cml4Iiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CisJem9sLT5pbyA9IGlvOworCWlmICh6b2wtPmlvID09IC0xKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHgyMGMgb3IgMHgzMGNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWYgKChpbyAhPSAweDIwYykgJiYgKGlvICE9IDB4MzBjKSkgewotCQlwcmludGsoS0VSTl9FUlIgInpvbHRyaXg6IGludmFsaWQgcG9ydCwgdHJ5IDB4MjBjIG9yIDB4MzBjXG4iKTsKKwlpZiAoem9sLT5pbyAhPSAweDIwYyAmJiB6b2wtPmlvICE9IDB4MzBjKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiaW52YWxpZCBwb3J0LCB0cnkgMHgyMGMgb3IgMHgzMGNcbiIpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIAotCXZpZGVvX3NldF9kcnZkYXRhKCZ6b2x0cml4X3JhZGlvLCAmem9sdHJpeF91bml0KTsKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLCAyLCAiem9sdHJpeCIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiem9sdHJpeDogcG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBpbyk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbih6b2wtPmlvLCAyLCAiem9sdHJpeCIpKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAicG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCB6b2wtPmlvKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ6b2x0cml4X3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewotCQlyZWxlYXNlX3JlZ2lvbihpbywgMik7CisJcmVzID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgdjRsMl9kZXYpOworCWlmIChyZXMgPCAwKSB7CisJCXJlbGVhc2VfcmVnaW9uKHpvbC0+aW8sIDIpOworCQl2NGwyX2Vycih2NGwyX2RldiwgIkNvdWxkIG5vdCByZWdpc3RlciB2NGwyX2RldmljZVxuIik7CisJCXJldHVybiByZXM7CisJfQorCisJc3RybGNweSh6b2wtPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZih6b2wtPnZkZXYubmFtZSkpOworCXpvbC0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCXpvbC0+dmRldi5mb3BzID0gJnpvbHRyaXhfZm9wczsKKwl6b2wtPnZkZXYuaW9jdGxfb3BzID0gJnpvbHRyaXhfaW9jdGxfb3BzOworCXpvbC0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJdmlkZW9fc2V0X2RydmRhdGEoJnpvbC0+dmRldiwgem9sKTsKKworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnpvbC0+dmRldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKKwkJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CisJCXJlbGVhc2VfcmVnaW9uKHpvbC0+aW8sIDIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiWm9sdHJpeCBSYWRpbyBQbHVzIGNhcmQgZHJpdmVyLlxuIik7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiWm9sdHJpeCBSYWRpbyBQbHVzIGNhcmQgZHJpdmVyLlxuIik7CiAKLQltdXRleF9pbml0KCZ6b2x0cml4X3VuaXQubG9jayk7CisJbXV0ZXhfaW5pdCgmem9sLT5sb2NrKTsKIAogCS8qIG11dGUgY2FyZCAtIHByZXZlbnRzIG5vaXN5IGJvb3R1cHMgKi8KIAogCS8qIHRoaXMgZW5zdXJlcyB0aGF0IHRoZSB2b2x1bWUgaXMgYWxsIHRoZSB3YXkgZG93biAgKi8KIAotCW91dGIoMCwgaW8pOwotCW91dGIoMCwgaW8pOworCW91dGIoMCwgem9sLT5pbyk7CisJb3V0YigwLCB6b2wtPmlvKTsKIAltc2xlZXAoMjApOwotCWluYihpbyArIDMpOworCWluYih6b2wtPmlvICsgMyk7CiAKLQl6b2x0cml4X3VuaXQuY3Vydm9sID0gMDsKLQl6b2x0cml4X3VuaXQuc3RlcmVvID0gMTsKKwl6b2wtPmN1cnZvbCA9IDA7CisJem9sLT5zdGVyZW8gPSAxOwogCiAJcmV0dXJuIDA7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIkMudmFuIFNjaGFpayIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFpvbHRyaXggUmFkaW8gUGx1cy4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBab2x0cml4IFJhZGlvIFBsdXMgKDB4MjBjIG9yIDB4MzBjKSIpOwotbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgem9sdHJpeF9jbGVhbnVwX21vZHVsZSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHpvbHRyaXhfZXhpdCh2b2lkKQogewotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZ6b2x0cml4X3JhZGlvKTsKLQlyZWxlYXNlX3JlZ2lvbihpbywgMik7CisJc3RydWN0IHpvbHRyaXggKnpvbCA9ICZ6b2x0cml4X2NhcmQ7CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmem9sLT52ZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ6b2wtPnY0bDJfZGV2KTsKKwlyZWxlYXNlX3JlZ2lvbih6b2wtPmlvLCAyKTsKIH0KIAogbW9kdWxlX2luaXQoem9sdHJpeF9pbml0KTsKLW1vZHVsZV9leGl0KHpvbHRyaXhfY2xlYW51cF9tb2R1bGUpOworbW9kdWxlX2V4aXQoem9sdHJpeF9leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCmluZGV4IDE5Y2YzYjguLjc2YmFkNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKQEAgLTI0OSwxMSArMjQ5LDI1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2cDI3c21weC4KIAorY29tbWVudCAiUkRTIGRlY29kZXJzIgorCitjb25maWcgVklERU9fU0FBNjU4OAorCXRyaXN0YXRlICJTQUE2NTg4IFJhZGlvIENoaXAgUkRTIGRlY29kZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCisKKwloZWxwCisJICBTdXBwb3J0IGZvciB0aGlzIFJhZGlvIERhdGEgU3lzdGVtIChSRFMpIGRlY29kZXIuIFRoaXMgYWxsb3dzCisJICBzZWVpbmcgcmFkaW8gc3RhdGlvbiBpZGVudGlmaWNhdGlvbiB0cmFuc21pdHRlZCB1c2luZyB0aGlzCisJICBzdGFuZGFyZC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FhNjU4OC4KKwogY29tbWVudCAiVmlkZW8gZGVjb2RlcnMiCiAKIGNvbmZpZyBWSURFT19CVDgxOQogCXRyaXN0YXRlICJCVDgxOUEgVmlkZW9TdHJlYW0gZGVjb2RlciIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIEJUODE5QSB2aWRlbyBkZWNvZGVyLgogCkBAIC0yNjIsNyArMjc2LDcgQEAKIAogY29uZmlnIFZJREVPX0JUODU2CiAJdHJpc3RhdGUgIkJUODU2IFZpZGVvU3RyZWFtIGRlY29kZXIiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQworCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciBCVDg1NiB2aWRlbyBkZWNvZGVyLgogCkBAIC0yNzEsNyArMjg1LDcgQEAKIAogY29uZmlnIFZJREVPX0JUODY2CiAJdHJpc3RhdGUgIkJUODY2IFZpZGVvU3RyZWFtIGRlY29kZXIiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQworCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciBCVDg2NiB2aWRlbyBkZWNvZGVyLgogCkBAIC0yODAsNyArMjk0LDcgQEAKIAogY29uZmlnIFZJREVPX0tTMDEyNwogCXRyaXN0YXRlICJLUzAxMjcgdmlkZW8gZGVjb2RlciIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIEtTMDEyNyB2aWRlbyBkZWNvZGVyLgogCkBAIC0zMDcsMzggKzMyMSwxOCBAQAogCiBjb25maWcgVklERU9fU0FBNzExMAogCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxMTAgdmlkZW8gZGVjb2RlciIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFNBQTcxMTAgdmlkZW8gZGVjb2RlcnMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTcxMTAuCiAKLWNvbmZpZyBWSURFT19TQUE3MTExCi0JdHJpc3RhdGUgIlBoaWxpcHMgU0FBNzExMSB2aWRlbyBkZWNvZGVyIgotCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKLQktLS1oZWxwLS0tCi0JICBTdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBTQUE3MTEgdmlkZW8gZGVjb2Rlci4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FhNzExMS4KLQotY29uZmlnIFZJREVPX1NBQTcxMTQKLQl0cmlzdGF0ZSAiUGhpbGlwcyBTQUE3MTE0IHZpZGVvIGRlY29kZXIiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQwotCS0tLWhlbHAtLS0KLQkgIFN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFNBQTcxMTQgdmlkZW8gZGVjb2Rlci4gVGhpcyBkcml2ZXIKLQkgIGlzIHVzZWQgb25seSBvbiBab3JhbiBkcml2ZXIgYW5kIHNob3VsZCBiZSBtb3ZlZCBzb29uIHRvCi0JICBTQUE3MTF4IG1vZHVsZS4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FhNzExNC4KLQogY29uZmlnIFZJREVPX1NBQTcxMVgKLQl0cmlzdGF0ZSAiUGhpbGlwcyBTQUE3MTEzLzQvNSB2aWRlbyBkZWNvZGVycyIKKwl0cmlzdGF0ZSAiUGhpbGlwcyBTQUE3MTExLzMvNC81IHZpZGVvIGRlY29kZXJzIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKIAktLS1oZWxwLS0tCi0JICBTdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBTQUE3MTEzLzQvNSB2aWRlbyBkZWNvZGVycy4KKwkgIFN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFNBQTcxMTEvMy80LzUgdmlkZW8gZGVjb2RlcnMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTcxMTUuCkBAIC0zODMsNyArMzc3LDcgQEAKIAogY29uZmlnIFZJREVPX1ZQWDMyMjAKIAl0cmlzdGF0ZSAidnB4MzIyMGEsIHZweDMyMTZiICYgdnB4MzIxNGMgdmlkZW8gZGVjb2RlcnMiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQworCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciBWUFgzMjJ4IHZpZGVvIGRlY29kZXJzLgogCkBAIC00MjEsNyArNDE1LDcgQEAKIAogY29uZmlnIFZJREVPX1NBQTcxODUKIAl0cmlzdGF0ZSAiUGhpbGlwcyBTQUE3MTg1IHZpZGVvIGVuY29kZXIiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQworCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBTQUE3MTg1IHZpZGVvIGVuY29kZXIuCiAKQEAgLTQzMCw3ICs0MjQsNyBAQAogCiBjb25maWcgVklERU9fQURWNzE3MAogCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRFY3MTcwIHZpZGVvIGVuY29kZXIiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQworCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciB0aGUgQW5hbG9nIERldmljZXMgQURWNzE3MCB2aWRlbyBlbmNvZGVyIGRyaXZlcgogCkBAIC00MzksNyArNDMzLDcgQEAKIAogY29uZmlnIFZJREVPX0FEVjcxNzUKIAl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURWNzE3NSB2aWRlbyBlbmNvZGVyIgotCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgdGhlIEFuYWxvZyBEZXZpY2VzIEFEVjcxNzUgdmlkZW8gZW5jb2RlciBkcml2ZXIKIApAQCAtNDg3LDE4ICs0ODEsNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvS2NvbmZpZyIKIAotY29uZmlnIFZJREVPX1NBQTY1ODgKLQl0cmlzdGF0ZSAiU0FBNjU4OCBSYWRpbyBDaGlwIFJEUyBkZWNvZGVyIHN1cHBvcnQgb24gQlQ4NDggY2FyZHMiCi0JZGVwZW5kcyBvbiBJMkMgJiYgVklERU9fQlQ4NDgKLQotCWhlbHAKLQkgIFN1cHBvcnQgZm9yICBSYWRpbyBEYXRhIFN5c3RlbSAoUkRTKSBkZWNvZGVyLiBUaGlzIGFsbG93cyBzZWVpbmcKLQkgIHJhZGlvIHN0YXRpb24gaWRlbnRpZmljYXRpb24gdHJhbnNtaXR0ZWQgdXNpbmcgdGhpcyBzdGFuZGFyZC4KLQkgIEN1cnJlbnRseSwgaXQgd29ya3Mgb25seSB3aXRoIGJ0OHg4IGNoaXBzLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE2NTg4LgotCiBjb25maWcgVklERU9fUE1TCiAJdHJpc3RhdGUgIk1lZGlhdmlzaW9uIFBybyBNb3ZpZSBTdHVkaW8gVmlkZW8gRm9yIExpbnV4IgogCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDEKQEAgLTYwMiw3ICs1ODQsNiBAQAogY29uZmlnIFZJREVPX1ZJTk8KIAl0cmlzdGF0ZSAiU0dJIFZpbm8gVmlkZW8gRm9yIExpbnV4IChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gSTJDICYmIFNHSV9JUDIyICYmIEVYUEVSSU1FTlRBTCAmJiBWSURFT19WNEwyCi0Jc2VsZWN0IEkyQ19BTEdPX1NHSQogCXNlbGVjdCBWSURFT19TQUE3MTkxIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBidWlsZCBpbiBzdXBwb3J0IGZvciB0aGUgVmlubyB2aWRlbyBpbnB1dCBzeXN0ZW0gZm91bmQKQEAgLTYzOSw3ICs2MjAsNyBAQAogCWRlcGVuZHMgb24gUENJICYmIFZJREVPX1Y0TDEgJiYgSTJDCiAJc2VsZWN0IFZJREVPX1NBQTcxNDZfVlYKIAlzZWxlY3QgVklERU9fVFVORVIKLQlzZWxlY3QgVklERU9fU0FBNzExNSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19TQUE3MTFYIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJc2VsZWN0IFZJREVPX1REQTk4NDAgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlzZWxlY3QgVklERU9fVEVBNjQxNUMgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlzZWxlY3QgVklERU9fVEVBNjQyMCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwpAQCAtNzI4LDEzICs3MDksNiBAQAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTVQ5TTAwMSBjYW1lcmFzIGZyb20gTWljcm9uLCBtb25vY2hyb21lCiAJICBhbmQgY29sb3VyIG1vZGVscy4KIAotY29uZmlnIE1UOU0wMDFfUENBOTUzNl9TV0lUQ0gKLQlib29sICJwY2E5NTM2IGRhdGF3aWR0aCBzd2l0Y2ggZm9yIG10OW0wMDEiCi0JZGVwZW5kcyBvbiBTT0NfQ0FNRVJBX01UOU0wMDEgJiYgR0VORVJJQ19HUElPCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91ciBNVDlNMDAxIGNhbWVyYSB1c2VzIGEgUENBOTUzNiBJMkMgR1BJTwotCSAgZXh0ZW5kZXIgdG8gc3dpdGNoIGJldHdlZW4gOCBhbmQgMTAgYml0IGRhdGF3aWR0aCBtb2RlcwotCiBjb25maWcgU09DX0NBTUVSQV9NVDlNMTExCiAJdHJpc3RhdGUgIm10OW0xMTEgYW5kIG10OW0xMTIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNPQ19DQU1FUkEgJiYgSTJDCkBAIC03NTQsMTMgKzcyOCw2IEBACiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTVQ5VjAyMiBjYW1lcmFzIGZyb20gTWljcm9uCiAKLWNvbmZpZyBNVDlWMDIyX1BDQTk1MzZfU1dJVENICi0JYm9vbCAicGNhOTUzNiBkYXRhd2lkdGggc3dpdGNoIGZvciBtdDl2MDIyIgotCWRlcGVuZHMgb24gU09DX0NBTUVSQV9NVDlWMDIyICYmIEdFTkVSSUNfR1BJTwotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdXIgTVQ5VjAyMiBjYW1lcmEgdXNlcyBhIFBDQTk1MzYgSTJDIEdQSU8KLQkgIGV4dGVuZGVyIHRvIHN3aXRjaCBiZXR3ZWVuIDggYW5kIDEwIGJpdCBkYXRhd2lkdGggbW9kZXMKLQogY29uZmlnIFNPQ19DQU1FUkFfVFc5OTEwCiAJdHJpc3RhdGUgInR3OTkxMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gU09DX0NBTUVSQSAmJiBJMkMKQEAgLTc3OSw2ICs3NDYsMTMgQEAKIAloZWxwCiAJICBUaGlzIGlzIGEgb3Y3NzJ4IGNhbWVyYSBkcml2ZXIKIAorY29uZmlnIFZJREVPX01YMworCXRyaXN0YXRlICJpLk1YM3ggQ2FtZXJhIFNlbnNvciBJbnRlcmZhY2UgZHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fREVWICYmIE1YM19JUFUgJiYgU09DX0NBTUVSQQorCXNlbGVjdCBWSURFT0JVRl9ETUFfQ09OVElHCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHY0bDIgZHJpdmVyIGZvciB0aGUgaS5NWDN4IENhbWVyYSBTZW5zb3IgSW50ZXJmYWNlCisKIGNvbmZpZyBWSURFT19QWEEyN3gKIAl0cmlzdGF0ZSAiUFhBMjd4IFF1aWNrIENhcHR1cmUgSW50ZXJmYWNlIGRyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBQWEEyN3ggJiYgU09DX0NBTUVSQQpAQCAtODE3LDYgKzc5MSw4IEBACiAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9LY29uZmlnIgorCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCmluZGV4IDcyZjZkMDMuLmI5MDQ2NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQpAQCAtMzAsNyArMzAsNiBAQAogb2JqLSQoQ09ORklHX1ZJREVPX1RWQVVESU8pICs9IHR2YXVkaW8ubwogb2JqLSQoQ09ORklHX1ZJREVPX1REQTc0MzIpICs9IHRkYTc0MzIubwogb2JqLSQoQ09ORklHX1ZJREVPX1REQTk4NzUpICs9IHRkYTk4NzUubwotb2JqLSQoQ09ORklHX1NPVU5EX1RWTUlYRVIpICs9IHR2bWl4ZXIubwogCiBvYmotJChDT05GSUdfVklERU9fU0FBNjU4OCkgKz0gc2FhNjU4OC5vCiBvYmotJChDT05GSUdfVklERU9fU0FBNTI0NkEpICs9IHNhYTUyNDZhLm8KQEAgLTQzLDggKzQyLDYgQEAKIG9iai0kKENPTkZJR19WSURFT19URUE2NDE1QykgKz0gdGVhNjQxNWMubwogb2JqLSQoQ09ORklHX1ZJREVPX1RFQTY0MjApICs9IHRlYTY0MjAubwogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMTApICs9IHNhYTcxMTAubwotb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMTEpICs9IHNhYTcxMTEubwotb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMTQpICs9IHNhYTcxMTQubwogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMVgpICs9IHNhYTcxMTUubwogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxN1gpICs9IHNhYTcxN3gubwogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMjcpICs9IHNhYTcxMjcubwpAQCAtMTIyLDYgKzExOSw4IEBACiBvYmotJChDT05GSUdfVVNCX1pDMDMwMSkgICAgICAgICs9IHpjMDMwMS8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0EpICAgICAgICAgKz0gZ3NwY2EvCiAKK29iai0kKENPTkZJR19WSURFT19IRFBWUikJKz0gaGRwdnIvCisKIG9iai0kKENPTkZJR19VU0JfSUJNQ0FNKSAgICAgICAgKz0gdXNidmlkZW8vCiBvYmotJChDT05GSUdfVVNCX0tPTklDQVdDKSAgICAgICs9IHVzYnZpZGVvLwogb2JqLSQoQ09ORklHX1VTQl9WSUNBTSkgICAgICAgICArPSB1c2J2aWRlby8KQEAgLTEzNCwxMCArMTMzLDExIEBACiBvYmotJChDT05GSUdfVklERU9fVklWSSkgKz0gdml2aS5vCiBvYmotJChDT05GSUdfVklERU9fQ1gyMzg4NSkgKz0gY3gyMzg4NS8KIAotb2JqLSQoQ09ORklHX1ZJREVPX1BYQTI3eCkJKz0gcHhhX2NhbWVyYS5vCitvYmotJChDT05GSUdfVklERU9fTVgzKQkJCSs9IG14M19jYW1lcmEubworb2JqLSQoQ09ORklHX1ZJREVPX1BYQTI3eCkJCSs9IHB4YV9jYW1lcmEubwogb2JqLSQoQ09ORklHX1ZJREVPX1NIX01PQklMRV9DRVUpCSs9IHNoX21vYmlsZV9jZXVfY2FtZXJhLm8KIG9iai0kKENPTkZJR19WSURFT19PTUFQMikJCSs9IG9tYXAyY2FtLm8KLW9iai0kKENPTkZJR19TT0NfQ0FNRVJBKQkrPSBzb2NfY2FtZXJhLm8KK29iai0kKENPTkZJR19TT0NfQ0FNRVJBKQkJKz0gc29jX2NhbWVyYS5vCiBvYmotJChDT05GSUdfU09DX0NBTUVSQV9NVDlNMDAxKQkrPSBtdDltMDAxLm8KIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX01UOU0xMTEpCSs9IG10OW0xMTEubwogb2JqLSQoQ09ORklHX1NPQ19DQU1FUkFfTVQ5VDAzMSkJKz0gbXQ5dDAzMS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3MC5jCmluZGV4IGUwZWI0ZjMuLjg3M2MzMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3MC5jCkBAIC0zNCwxNSArMzQsMTYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQW5hbG9nIERldmljZXMgQURWNzE3MCB2aWRlbyBlbmNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTWF4aW0gWWV2dHl1c2hraW4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CkBAIC01MCwzOCArNTEsNDMgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCBhZHY3MTcwIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJdW5zaWduZWQgY2hhciByZWdbMTI4XTsKIAotCWludCBub3JtOworCXY0bDJfc3RkX2lkIG5vcm07CiAJaW50IGlucHV0OwotCWludCBlbmFibGU7Ci0JaW50IGJyaWdodDsKLQlpbnQgY29udHJhc3Q7Ci0JaW50IGh1ZTsKLQlpbnQgc2F0OwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgYWR2NzE3MCAqdG9fYWR2NzE3MChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBhZHY3MTcwLCBzZCk7Cit9CisKIHN0YXRpYyBjaGFyICppbnB1dHNbXSA9IHsgInBhc3NfdGhyb3VnaCIsICJwbGF5X2JhY2siIH07Ci1zdGF0aWMgY2hhciAqbm9ybXNbXSA9IHsgIlBBTCIsICJOVFNDIiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIGludCBhZHY3MTcwX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBhZHY3MTcwX3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggdmFsdWUpCiB7Ci0Jc3RydWN0IGFkdjcxNzAgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IGFkdjcxNzAgKmVuY29kZXIgPSB0b19hZHY3MTcwKHNkKTsKIAogCWVuY29kZXItPnJlZ1tyZWddID0gdmFsdWU7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYWR2NzE3MF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKK3N0YXRpYyBpbmxpbmUgaW50IGFkdjcxNzBfcmVhZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CiB9CiAKLXN0YXRpYyBpbnQgYWR2NzE3MF93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorc3RhdGljIGludCBhZHY3MTcwX3dyaXRlX2Jsb2NrKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCSAgICAgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBhZHY3MTcwICplbmNvZGVyID0gdG9fYWR2NzE3MChzZCk7CiAJaW50IHJldCA9IC0xOwogCXU4IHJlZzsKIApAQCAtODksNyArOTUsNiBAQAogCSAqIHRoZSBhZGFwdGVyIHVuZGVyc3RhbmRzIHJhdyBJMkMgKi8KIAlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7CiAJCS8qIGRvIHJhdyBJMkMsIG5vdCBzbWJ1cyBjb21wYXRpYmxlICovCi0JCXN0cnVjdCBhZHY3MTcwICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJCXU4IGJsb2NrX2RhdGFbMzJdOwogCQlpbnQgYmxvY2tfbGVuOwogCkBAIC0xMTAsNyArMTE1LDcgQEAKIAkJLyogZG8gc29tZSBzbG93IEkyQyBlbXVsYXRpb24ga2luZCBvZiB0aGluZyAqLwogCQl3aGlsZSAobGVuID49IDIpIHsKIAkJCXJlZyA9ICpkYXRhKys7Ci0JCQlyZXQgPSBhZHY3MTcwX3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKTsKKwkJCXJldCA9IGFkdjcxNzBfd3JpdGUoc2QsIHJlZywgKmRhdGErKyk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJCWxlbiAtPSAyOwpAQCAtMTI4LDIwMyArMTMzLDE2MSBAQAogI2RlZmluZSBUUjFQTEFZCSAgICAweDAwCiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGluaXRfTlRTQ1tdID0gewotCTB4MDAsIDB4MTAsCQkvLyBNUjAKLQkweDAxLCAweDIwLAkJLy8gTVIxCi0JMHgwMiwgMHgwZSwJCS8vIE1SMiBSVEMgY29udHJvbDogYml0cyAyIGFuZCAxCi0JMHgwMywgMHg4MCwJCS8vIE1SMwotCTB4MDQsIDB4MzAsCQkvLyBNUjQKLQkweDA1LCAweDAwLAkJLy8gUmVzZXJ2ZWQKLQkweDA2LCAweDAwLAkJLy8gUmVzZXJ2ZWQKLQkweDA3LCBUUjBNT0RFLAkJLy8gVE0wCi0JMHgwOCwgVFIxQ0FQVCwJCS8vIFRNMQotCTB4MDksIDB4MTYsCQkvLyBGc2MwCi0JMHgwYSwgMHg3YywJCS8vIEZzYzEKLQkweDBiLCAweGYwLAkJLy8gRnNjMgotCTB4MGMsIDB4MjEsCQkvLyBGc2MzCi0JMHgwZCwgMHgwMCwJCS8vIFN1YmNhcnJpZXIgUGhhc2UKLQkweDBlLCAweDAwLAkJLy8gQ2xvc2VkIENhcHQuIEV4dCAwCi0JMHgwZiwgMHgwMCwJCS8vIENsb3NlZCBDYXB0LiBFeHQgMQotCTB4MTAsIDB4MDAsCQkvLyBDbG9zZWQgQ2FwdC4gMAotCTB4MTEsIDB4MDAsCQkvLyBDbG9zZWQgQ2FwdC4gMQotCTB4MTIsIDB4MDAsCQkvLyBQZWRlc3RhbCBDdGwgMAotCTB4MTMsIDB4MDAsCQkvLyBQZWRlc3RhbCBDdGwgMQotCTB4MTQsIDB4MDAsCQkvLyBQZWRlc3RhbCBDdGwgMgotCTB4MTUsIDB4MDAsCQkvLyBQZWRlc3RhbCBDdGwgMwotCTB4MTYsIDB4MDAsCQkvLyBDR01TX1dTU18wCi0JMHgxNywgMHgwMCwJCS8vIENHTVNfV1NTXzEKLQkweDE4LCAweDAwLAkJLy8gQ0dNU19XU1NfMgotCTB4MTksIDB4MDAsCQkvLyBUZWxldGV4dCBDdGwKKwkweDAwLCAweDEwLAkJLyogTVIwICovCisJMHgwMSwgMHgyMCwJCS8qIE1SMSAqLworCTB4MDIsIDB4MGUsCQkvKiBNUjIgUlRDIGNvbnRyb2w6IGJpdHMgMiBhbmQgMSAqLworCTB4MDMsIDB4ODAsCQkvKiBNUjMgKi8KKwkweDA0LCAweDMwLAkJLyogTVI0ICovCisJMHgwNSwgMHgwMCwJCS8qIFJlc2VydmVkICovCisJMHgwNiwgMHgwMCwJCS8qIFJlc2VydmVkICovCisJMHgwNywgVFIwTU9ERSwJCS8qIFRNMCAqLworCTB4MDgsIFRSMUNBUFQsCQkvKiBUTTEgKi8KKwkweDA5LCAweDE2LAkJLyogRnNjMCAqLworCTB4MGEsIDB4N2MsCQkvKiBGc2MxICovCisJMHgwYiwgMHhmMCwJCS8qIEZzYzIgKi8KKwkweDBjLCAweDIxLAkJLyogRnNjMyAqLworCTB4MGQsIDB4MDAsCQkvKiBTdWJjYXJyaWVyIFBoYXNlICovCisJMHgwZSwgMHgwMCwJCS8qIENsb3NlZCBDYXB0LiBFeHQgMCAqLworCTB4MGYsIDB4MDAsCQkvKiBDbG9zZWQgQ2FwdC4gRXh0IDEgKi8KKwkweDEwLCAweDAwLAkJLyogQ2xvc2VkIENhcHQuIDAgKi8KKwkweDExLCAweDAwLAkJLyogQ2xvc2VkIENhcHQuIDEgKi8KKwkweDEyLCAweDAwLAkJLyogUGVkZXN0YWwgQ3RsIDAgKi8KKwkweDEzLCAweDAwLAkJLyogUGVkZXN0YWwgQ3RsIDEgKi8KKwkweDE0LCAweDAwLAkJLyogUGVkZXN0YWwgQ3RsIDIgKi8KKwkweDE1LCAweDAwLAkJLyogUGVkZXN0YWwgQ3RsIDMgKi8KKwkweDE2LCAweDAwLAkJLyogQ0dNU19XU1NfMCAqLworCTB4MTcsIDB4MDAsCQkvKiBDR01TX1dTU18xICovCisJMHgxOCwgMHgwMCwJCS8qIENHTVNfV1NTXzIgKi8KKwkweDE5LCAweDAwLAkJLyogVGVsZXRleHQgQ3RsICovCiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpbml0X1BBTFtdID0gewotCTB4MDAsIDB4NzEsCQkvLyBNUjAKLQkweDAxLCAweDIwLAkJLy8gTVIxCi0JMHgwMiwgMHgwZSwJCS8vIE1SMiBSVEMgY29udHJvbDogYml0cyAyIGFuZCAxCi0JMHgwMywgMHg4MCwJCS8vIE1SMwotCTB4MDQsIDB4MzAsCQkvLyBNUjQKLQkweDA1LCAweDAwLAkJLy8gUmVzZXJ2ZWQKLQkweDA2LCAweDAwLAkJLy8gUmVzZXJ2ZWQKLQkweDA3LCBUUjBNT0RFLAkJLy8gVE0wCi0JMHgwOCwgVFIxQ0FQVCwJCS8vIFRNMQotCTB4MDksIDB4Y2IsCQkvLyBGc2MwCi0JMHgwYSwgMHg4YSwJCS8vIEZzYzEKLQkweDBiLCAweDA5LAkJLy8gRnNjMgotCTB4MGMsIDB4MmEsCQkvLyBGc2MzCi0JMHgwZCwgMHgwMCwJCS8vIFN1YmNhcnJpZXIgUGhhc2UKLQkweDBlLCAweDAwLAkJLy8gQ2xvc2VkIENhcHQuIEV4dCAwCi0JMHgwZiwgMHgwMCwJCS8vIENsb3NlZCBDYXB0LiBFeHQgMQotCTB4MTAsIDB4MDAsCQkvLyBDbG9zZWQgQ2FwdC4gMAotCTB4MTEsIDB4MDAsCQkvLyBDbG9zZWQgQ2FwdC4gMQotCTB4MTIsIDB4MDAsCQkvLyBQZWRlc3RhbCBDdGwgMAotCTB4MTMsIDB4MDAsCQkvLyBQZWRlc3RhbCBDdGwgMQotCTB4MTQsIDB4MDAsCQkvLyBQZWRlc3RhbCBDdGwgMgotCTB4MTUsIDB4MDAsCQkvLyBQZWRlc3RhbCBDdGwgMwotCTB4MTYsIDB4MDAsCQkvLyBDR01TX1dTU18wCi0JMHgxNywgMHgwMCwJCS8vIENHTVNfV1NTXzEKLQkweDE4LCAweDAwLAkJLy8gQ0dNU19XU1NfMgotCTB4MTksIDB4MDAsCQkvLyBUZWxldGV4dCBDdGwKKwkweDAwLCAweDcxLAkJLyogTVIwICovCisJMHgwMSwgMHgyMCwJCS8qIE1SMSAqLworCTB4MDIsIDB4MGUsCQkvKiBNUjIgUlRDIGNvbnRyb2w6IGJpdHMgMiBhbmQgMSAqLworCTB4MDMsIDB4ODAsCQkvKiBNUjMgKi8KKwkweDA0LCAweDMwLAkJLyogTVI0ICovCisJMHgwNSwgMHgwMCwJCS8qIFJlc2VydmVkICovCisJMHgwNiwgMHgwMCwJCS8qIFJlc2VydmVkICovCisJMHgwNywgVFIwTU9ERSwJCS8qIFRNMCAqLworCTB4MDgsIFRSMUNBUFQsCQkvKiBUTTEgKi8KKwkweDA5LCAweGNiLAkJLyogRnNjMCAqLworCTB4MGEsIDB4OGEsCQkvKiBGc2MxICovCisJMHgwYiwgMHgwOSwJCS8qIEZzYzIgKi8KKwkweDBjLCAweDJhLAkJLyogRnNjMyAqLworCTB4MGQsIDB4MDAsCQkvKiBTdWJjYXJyaWVyIFBoYXNlICovCisJMHgwZSwgMHgwMCwJCS8qIENsb3NlZCBDYXB0LiBFeHQgMCAqLworCTB4MGYsIDB4MDAsCQkvKiBDbG9zZWQgQ2FwdC4gRXh0IDEgKi8KKwkweDEwLCAweDAwLAkJLyogQ2xvc2VkIENhcHQuIDAgKi8KKwkweDExLCAweDAwLAkJLyogQ2xvc2VkIENhcHQuIDEgKi8KKwkweDEyLCAweDAwLAkJLyogUGVkZXN0YWwgQ3RsIDAgKi8KKwkweDEzLCAweDAwLAkJLyogUGVkZXN0YWwgQ3RsIDEgKi8KKwkweDE0LCAweDAwLAkJLyogUGVkZXN0YWwgQ3RsIDIgKi8KKwkweDE1LCAweDAwLAkJLyogUGVkZXN0YWwgQ3RsIDMgKi8KKwkweDE2LCAweDAwLAkJLyogQ0dNU19XU1NfMCAqLworCTB4MTcsIDB4MDAsCQkvKiBDR01TX1dTU18xICovCisJMHgxOCwgMHgwMCwJCS8qIENHTVNfV1NTXzIgKi8KKwkweDE5LCAweDAwLAkJLyogVGVsZXRleHQgQ3RsICovCiB9OwogCiAKLXN0YXRpYyBpbnQgYWR2NzE3MF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBhZHY3MTcwX3Nfc3RkX291dHB1dChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCiB7Ci0Jc3RydWN0IGFkdjcxNzAgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgYWR2NzE3MCAqZW5jb2RlciA9IHRvX2FkdjcxNzAoc2QpOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIDA6Ci0jaWYgMAotCQkvKiBUaGlzIGlzIGp1c3QgZm9yIHRlc3RpbmchISEgKi8KLQkJYWR2NzE3MF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLAotCQkJCSAgICBzaXplb2YoaW5pdF9jb21tb24pKTsKLQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwotCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0jZW5kaWYKLQkJYnJlYWs7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic2V0IG5vcm0gJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGQpOwogCi0JY2FzZSBFTkNPREVSX0dFVF9DQVBBQklMSVRJRVM6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fZW5jb2Rlcl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7Ci0KLQkJY2FwLT5mbGFncyA9IFZJREVPX0VOQ09ERVJfUEFMIHwKLQkJCSAgICAgVklERU9fRU5DT0RFUl9OVFNDOwotCQljYXAtPmlucHV0cyA9IDI7Ci0JCWNhcC0+b3V0cHV0cyA9IDE7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfTk9STToKLQl7Ci0JCWludCBpYXJnID0gKihpbnQgKikgYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBub3JtICVkXG4iLCBpYXJnKTsKLQotCQlzd2l0Y2ggKGlhcmcpIHsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQlhZHY3MTcwX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9OVFNDLAotCQkJCQkgICAgc2l6ZW9mKGluaXRfTlRTQykpOwotCQkJaWYgKGVuY29kZXItPmlucHV0ID09IDApCi0JCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDIsIDB4MGUpOwkvLyBFbmFibGUgZ2VubG9jawotCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwotCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCWFkdjcxNzBfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X1BBTCwKLQkJCQkJICAgIHNpemVvZihpbml0X1BBTCkpOwotCQkJaWYgKGVuY29kZXItPmlucHV0ID09IDApCi0JCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDIsIDB4MGUpOwkvLyBFbmFibGUgZ2VubG9jawotCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwotCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImlsbGVnYWwgbm9ybTogJWRcbiIsIGlhcmcpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gJXNcbiIsIG5vcm1zW2lhcmddKTsKLQkJZW5jb2Rlci0+bm9ybSA9IGlhcmc7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfSU5QVVQ6Ci0JewotCQlpbnQgaWFyZyA9ICooaW50ICopIGFyZzsKLQotCQkvKiBSSjogKmlhcmcgPSAwOiBpbnB1dCBpcyBmcm9tIGRlY29kZXIKLQkJICppYXJnID0gMTogaW5wdXQgaXMgZnJvbSBaUjM2MDYwCi0JCSAqaWFyZyA9IDI6IGNvbG9yIGJhciAqLwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBpbnB1dCBmcm9tICVzXG4iLAotCQkJaWFyZyA9PSAwID8gImRlY29kZXIiIDogIlpSMzYwNjAiKTsKLQotCQlzd2l0Y2ggKGlhcmcpIHsKLQkJY2FzZSAwOgotCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDEsIDB4MjApOwotCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDgsIFRSMUNBUFQpOwkvKiBUUjEgKi8KLQkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDAyLCAweDBlKTsJLy8gRW5hYmxlIGdlbmxvY2sKLQkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKLQkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJCS8qIHVkZWxheSgxMCk7ICovCi0JCQlicmVhazsKLQotCQljYXNlIDE6Ci0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwMSwgMHgwMCk7Ci0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwOCwgVFIxUExBWSk7CS8qIFRSMSAqLwotCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDIsIDB4MDgpOwotCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwotCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQkJLyogdWRlbGF5KDEwKTsgKi8KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbGxlZ2FsIGlucHV0OiAlZFxuIiwgaWFyZyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byAlc1xuIiwgaW5wdXRzW2lhcmddKTsKLQkJZW5jb2Rlci0+aW5wdXQgPSBpYXJnOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfU0VUX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAoKmlhcmcgIT0gMCkgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX0VOQUJMRV9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJZW5jb2Rlci0+ZW5hYmxlID0gISEqaWFyZzsKLQkJYnJlYWs7Ci0JfQotCi0JZGVmYXVsdDoKKwlpZiAoc3RkICYgVjRMMl9TVERfTlRTQykgeworCQlhZHY3MTcwX3dyaXRlX2Jsb2NrKHNkLCBpbml0X05UU0MsIHNpemVvZihpbml0X05UU0MpKTsKKwkJaWYgKGVuY29kZXItPmlucHV0ID09IDApCisJCQlhZHY3MTcwX3dyaXRlKHNkLCAweDAyLCAweDBlKTsJLyogRW5hYmxlIGdlbmxvY2sgKi8KKwkJYWR2NzE3MF93cml0ZShzZCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CisJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUpOworCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfUEFMKSB7CisJCWFkdjcxNzBfd3JpdGVfYmxvY2soc2QsIGluaXRfUEFMLCBzaXplb2YoaW5pdF9QQUwpKTsKKwkJaWYgKGVuY29kZXItPmlucHV0ID09IDApCisJCQlhZHY3MTcwX3dyaXRlKHNkLCAweDAyLCAweDBlKTsJLyogRW5hYmxlIGdlbmxvY2sgKi8KKwkJYWR2NzE3MF93cml0ZShzZCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CisJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUpOworCX0gZWxzZSB7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImlsbGVnYWwgbm9ybTogJWxseFxuIiwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXN0ZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQorCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInN3aXRjaGVkIHRvICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpc3RkKTsKKwllbmNvZGVyLT5ub3JtID0gc3RkOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGFkdjcxNzBfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQoreworCXN0cnVjdCBhZHY3MTcwICplbmNvZGVyID0gdG9fYWR2NzE3MChzZCk7CisKKwkvKiBSSjogcm91dGUtPmlucHV0ID0gMDogaW5wdXQgaXMgZnJvbSBkZWNvZGVyCisJICAgcm91dGUtPmlucHV0ID0gMTogaW5wdXQgaXMgZnJvbSBaUjM2MDYwCisJICAgcm91dGUtPmlucHV0ID0gMjogY29sb3IgYmFyICovCisKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzZXQgaW5wdXQgZnJvbSAlc1xuIiwKKwkJCXJvdXRlLT5pbnB1dCA9PSAwID8gImRlY29kZXIiIDogIlpSMzYwNjAiKTsKKworCXN3aXRjaCAocm91dGUtPmlucHV0KSB7CisJY2FzZSAwOgorCQlhZHY3MTcwX3dyaXRlKHNkLCAweDAxLCAweDIwKTsKKwkJYWR2NzE3MF93cml0ZShzZCwgMHgwOCwgVFIxQ0FQVCk7CS8qIFRSMSAqLworCQlhZHY3MTcwX3dyaXRlKHNkLCAweDAyLCAweDBlKTsJLyogRW5hYmxlIGdlbmxvY2sgKi8KKwkJYWR2NzE3MF93cml0ZShzZCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CisJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUpOworCQkvKiB1ZGVsYXkoMTApOyAqLworCQlicmVhazsKKworCWNhc2UgMToKKwkJYWR2NzE3MF93cml0ZShzZCwgMHgwMSwgMHgwMCk7CisJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDgsIFRSMVBMQVkpOwkvKiBUUjEgKi8KKwkJYWR2NzE3MF93cml0ZShzZCwgMHgwMiwgMHgwOCk7CisJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOworCQlhZHY3MTcwX3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFKTsKKwkJLyogdWRlbGF5KDEwKTsgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpbGxlZ2FsIGlucHV0OiAlZFxuIiwgcm91dGUtPmlucHV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInN3aXRjaGVkIHRvICVzXG4iLCBpbnB1dHNbcm91dGUtPmlucHV0XSk7CisJZW5jb2Rlci0+aW5wdXQgPSByb3V0ZS0+aW5wdXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWR2NzE3MF9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9BRFY3MTcwLCAwKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQkweGQ0ID4+IDEsIDB4ZDYgPj4gMSwJLyogYWR2NzE3MCBJRHMgKi8KLQkweDU0ID4+IDEsIDB4NTYgPj4gMSwJLyogYWR2NzE3MSBJRHMgKi8KLQlJMkNfQ0xJRU5UX0VORAorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBhZHY3MTcwX2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBhZHY3MTcwX2dfY2hpcF9pZGVudCwKIH07CiAKLUkyQ19DTElFTlRfSU5TTU9EOworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgYWR2NzE3MF92aWRlb19vcHMgPSB7CisJLnNfc3RkX291dHB1dCA9IGFkdjcxNzBfc19zdGRfb3V0cHV0LAorCS5zX3JvdXRpbmcgPSBhZHY3MTcwX3Nfcm91dGluZywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGFkdjcxNzBfb3BzID0geworCS5jb3JlID0gJmFkdjcxNzBfY29yZV9vcHMsCisJLnZpZGVvID0gJmFkdjcxNzBfdmlkZW9fb3BzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBhZHY3MTcwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IGFkdjcxNzAgKmVuY29kZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAlpbnQgaTsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KQEAgLTMzNywyNiArMzAwLDI5IEBACiAJZW5jb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZHY3MTcwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVuY29kZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JZW5jb2Rlci0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKKwlzZCA9ICZlbmNvZGVyLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmYWR2NzE3MF9vcHMpOworCWVuY29kZXItPm5vcm0gPSBWNEwyX1NURF9OVFNDOwogCWVuY29kZXItPmlucHV0ID0gMDsKLQllbmNvZGVyLT5lbmFibGUgPSAxOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGVuY29kZXIpOwogCi0JaSA9IGFkdjcxNzBfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X05UU0MsIHNpemVvZihpbml0X05UU0MpKTsKKwlpID0gYWR2NzE3MF93cml0ZV9ibG9jayhzZCwgaW5pdF9OVFNDLCBzaXplb2YoaW5pdF9OVFNDKSk7CiAJaWYgKGkgPj0gMCkgewotCQlpID0gYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwotCQlpID0gYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQlpID0gYWR2NzE3MF9yZWFkKGNsaWVudCwgMHgxMik7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInJldmlzaW9uICVkXG4iLCBpICYgMSk7CisJCWkgPSBhZHY3MTcwX3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKKwkJaSA9IGFkdjcxNzBfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUpOworCQlpID0gYWR2NzE3MF9yZWFkKHNkLCAweDEyKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAicmV2aXNpb24gJWRcbiIsIGkgJiAxKTsKIAl9CiAJaWYgKGkgPCAwKQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IGVycm9yIDB4JXhcbiIsIGkpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpbml0IGVycm9yIDB4JXhcbiIsIGkpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFkdjcxNzBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Ja2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19hZHY3MTcwKHNkKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM3MSw4ICszMzcsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAiYWR2NzE3MCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0FEVjcxNzAsCi0JLmNvbW1hbmQgPSBhZHY3MTcwX2NvbW1hbmQsCiAJLnByb2JlID0gYWR2NzE3MF9wcm9iZSwKIAkucmVtb3ZlID0gYWR2NzE3MF9yZW1vdmUsCiAJLmlkX3RhYmxlID0gYWR2NzE3MF9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3NS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTc1LmMKaW5kZXggNjAwOGU4NC4uZmYxMjEwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTc1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTc1LmMKQEAgLTMwLDE1ICszMCwxOSBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJBbmFsb2cgRGV2aWNlcyBBRFY3MTc1IHZpZGVvIGVuY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJEYXZlIFBlcmtzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKyNkZWZpbmUgICBJMkNfQURWNzE3NSAgICAgICAgMHhkNAorI2RlZmluZSAgIEkyQ19BRFY3MTc2ICAgICAgICAweDU0CisKKwogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwpAQCAtNDYsMzYgKzUwLDM4IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3QgYWR2NzE3NSB7Ci0JaW50IG5vcm07CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOworCXY0bDJfc3RkX2lkIG5vcm07CiAJaW50IGlucHV0OwotCWludCBlbmFibGU7Ci0JaW50IGJyaWdodDsKLQlpbnQgY29udHJhc3Q7Ci0JaW50IGh1ZTsKLQlpbnQgc2F0OwogfTsKIAotI2RlZmluZSAgIEkyQ19BRFY3MTc1ICAgICAgICAweGQ0Ci0jZGVmaW5lICAgSTJDX0FEVjcxNzYgICAgICAgIDB4NTQKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFkdjcxNzUgKnRvX2FkdjcxNzUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgYWR2NzE3NSwgc2QpOworfQogCiBzdGF0aWMgY2hhciAqaW5wdXRzW10gPSB7ICJwYXNzX3Rocm91Z2giLCAicGxheV9iYWNrIiwgImNvbG9yX2JhciIgfTsKLXN0YXRpYyBjaGFyICpub3Jtc1tdID0geyAiUEFMIiwgIk5UU0MiLCAiU0VDQU0tPlBBTCAobWF5IG5vdCB3b3JrISkiIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGFkdjcxNzVfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGFkdjcxNzVfd3JpdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhZHY3MTc1X3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQorc3RhdGljIGlubGluZSBpbnQgYWR2NzE3NV9yZWFkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZykKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIH0KIAotc3RhdGljIGludCBhZHY3MTc1X3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCitzdGF0aWMgaW50IGFkdjcxNzVfd3JpdGVfYmxvY2soc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJICAgICBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJaW50IHJldCA9IC0xOwogCXU4IHJlZzsKIApAQCAtMTAzLDcgKzEwOSw3IEBACiAJCS8qIGRvIHNvbWUgc2xvdyBJMkMgZW11bGF0aW9uIGtpbmQgb2YgdGhpbmcgKi8KIAkJd2hpbGUgKGxlbiA+PSAyKSB7CiAJCQlyZWcgPSAqZGF0YSsrOwotCQkJcmV0ID0gYWR2NzE3NV93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKyk7CisJCQlyZXQgPSBhZHY3MTc1X3dyaXRlKHNkLCByZWcsICpkYXRhKyspOwogCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCQlsZW4gLT0gMjsKQEAgLTExMywxOCArMTE5LDE4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgc2V0X3N1YmNhcnJpZXJfZnJlcShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcGFzc190aHJvdWdoKQorc3RhdGljIHZvaWQgc2V0X3N1YmNhcnJpZXJfZnJlcShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgcGFzc190aHJvdWdoKQogewogCS8qIGZvciBzb21lIHJlYXNvbiBwYXNzX3Rocm91Z2ggTlRTQyBuZWVkcwogCSAqIGEgZGlmZmVyZW50IHN1Yi1jYXJyaWVyIGZyZXEgdG8gcmVtYWluIHN0YWJsZS4gKi8KIAlpZiAocGFzc190aHJvdWdoKQotCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwMiwgMHgwMCk7CisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDIsIDB4MDApOwogCWVsc2UKLQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDIsIDB4NTUpOworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDAyLCAweDU1KTsKIAotCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDAzLCAweDU1KTsKLQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNCwgMHg1NSk7Ci0JYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDUsIDB4MjUpOworCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDMsIDB4NTUpOworCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDQsIDB4NTUpOworCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDUsIDB4MjUpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTg0LDE4MCArMTkwLDE0NCBAQAogCTB4MDYsIDB4MWEsCQkvKiBzdWJjLiBwaGFzZSAqLwogfTsKIAotc3RhdGljIGludCBhZHY3MTc1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGFkdjcxNzVfaW5pdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgdmFsKQogewotCXN0cnVjdCBhZHY3MTc1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJLyogVGhpcyBpcyBqdXN0IGZvciB0ZXN0aW5nISEhICovCisJYWR2NzE3NV93cml0ZV9ibG9jayhzZCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOworCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOworCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUpOworCXJldHVybiAwOworfQogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIDA6Ci0JCS8qIFRoaXMgaXMganVzdCBmb3IgdGVzdGluZyEhISAqLwotCQlhZHY3MTc1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sCi0JCQkJICAgIHNpemVvZihpbml0X2NvbW1vbikpOwotCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJYnJlYWs7CitzdGF0aWMgaW50IGFkdjcxNzVfc19zdGRfb3V0cHV0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZCkKK3sKKwlzdHJ1Y3QgYWR2NzE3NSAqZW5jb2RlciA9IHRvX2FkdjcxNzUoc2QpOwogCi0JY2FzZSBFTkNPREVSX0dFVF9DQVBBQklMSVRJRVM6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fZW5jb2Rlcl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7Ci0KLQkJY2FwLT5mbGFncyA9IFZJREVPX0VOQ09ERVJfUEFMIHwKLQkJCSAgICAgVklERU9fRU5DT0RFUl9OVFNDIHwKLQkJCSAgICAgVklERU9fRU5DT0RFUl9TRUNBTTsgLyogd2VsbCwgaGFja3kgKi8KLQkJY2FwLT5pbnB1dHMgPSAyOwotCQljYXAtPm91dHB1dHMgPSAxOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfU0VUX05PUk06Ci0JewotCQlpbnQgaWFyZyA9ICooaW50ICopIGFyZzsKLQotCQlzd2l0Y2ggKGlhcmcpIHsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQlhZHY3MTc1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLAotCQkJCQkgICAgc2l6ZW9mKGluaXRfbnRzYykpOwotCQkJaWYgKGVuY29kZXItPmlucHV0ID09IDApCi0JCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MGQsIDB4NGYpOwkvLyBFbmFibGUgZ2VubG9jawotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCWFkdjcxNzVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X3BhbCwKLQkJCQkJICAgIHNpemVvZihpbml0X3BhbCkpOwotCQkJaWYgKGVuY29kZXItPmlucHV0ID09IDApCi0JCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MGQsIDB4NGYpOwkvLyBFbmFibGUgZ2VubG9jawotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgkvLyBXQVJOSU5HISBBRFY3MTc2IGRvZXMgbm90IHN1cHBvcnQgU0VDQU0uCi0JCQkvKiBUaGlzIGlzIGFuIGF0dGVtcHQgdG8gY29udmVydAotCQkJICogU0VDQU0tPlBBTCAodHlwaWNhbGx5IGl0IGRvZXMgbm90IHdvcmsKLQkJCSAqIGR1ZSB0byBnZW5sb2NrOiB3aGVuIGRlY29kZXIgaXMgaW4gU0VDQU0KLQkJCSAqIGFuZCBlbmNvZGVyIGluIGluIFBBTCB0aGUgc3ViY2FycmllciBjYW4KLQkJCSAqIG5vdCBiZSBzeW5jcm9uaXplZCB3aXRoIGhvcml6b250YWwKLQkJCSAqIHF1ZW5jeSkgKi8KLQkJCWFkdjcxNzVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X3BhbCwKLQkJCQkJICAgIHNpemVvZihpbml0X3BhbCkpOwotCQkJaWYgKGVuY29kZXItPmlucHV0ID09IDApCi0JCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MGQsIDB4NDkpOwkvLyBEaXNhYmxlIGdlbmxvY2sKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaWxsZWdhbCBub3JtOiAlZFxuIiwgaWFyZyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byAlc1xuIiwgbm9ybXNbaWFyZ10pOwotCQllbmNvZGVyLT5ub3JtID0gaWFyZzsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9JTlBVVDoKLQl7Ci0JCWludCBpYXJnID0gKihpbnQgKikgYXJnOwotCi0JCS8qIFJKOiAqaWFyZyA9IDA6IGlucHV0IGlzIGZyb20gU0FBNzExMAotCQkgKmlhcmcgPSAxOiBpbnB1dCBpcyBmcm9tIFpSMzYwNjAKLQkJICppYXJnID0gMjogY29sb3IgYmFyICovCi0KLQkJc3dpdGNoIChpYXJnKSB7Ci0JCWNhc2UgMDoKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDAxLCAweDAwKTsKLQotCQkJaWYgKGVuY29kZXItPm5vcm0gPT0gVklERU9fTU9ERV9OVFNDKQotCQkJCXNldF9zdWJjYXJyaWVyX2ZyZXEoY2xpZW50LCAxKTsKLQotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MGMsIFRSMUNBUFQpOwkvKiBUUjEgKi8KLQkJCWlmIChlbmNvZGVyLT5ub3JtID09IFZJREVPX01PREVfU0VDQU0pCi0JCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MGQsIDB4NDkpOwkvLyBEaXNhYmxlIGdlbmxvY2sKLQkJCWVsc2UKLQkJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwZCwgMHg0Zik7CS8vIEVuYWJsZSBnZW5sb2NrCi0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQkvL3VkZWxheSgxMCk7Ci0JCQlicmVhazsKLQotCQljYXNlIDE6Ci0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwMSwgMHgwMCk7Ci0KLQkJCWlmIChlbmNvZGVyLT5ub3JtID09IFZJREVPX01PREVfTlRTQykKLQkJCQlzZXRfc3ViY2Fycmllcl9mcmVxKGNsaWVudCwgMCk7Ci0KLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDBjLCBUUjFQTEFZKTsJLyogVFIxICovCi0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwZCwgMHg0OSk7Ci0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQkvKiB1ZGVsYXkoMTApOyAqLwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAyOgotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDEsIDB4ODApOwotCi0JCQlpZiAoZW5jb2Rlci0+bm9ybSA9PSBWSURFT19NT0RFX05UU0MpCi0JCQkJc2V0X3N1YmNhcnJpZXJfZnJlcShjbGllbnQsIDApOwotCi0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwZCwgMHg0OSk7Ci0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQkvKiB1ZGVsYXkoMTApOyAqLwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImlsbGVnYWwgaW5wdXQ6ICVkXG4iLCBpYXJnKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvICVzXG4iLCBpbnB1dHNbaWFyZ10pOwotCQllbmNvZGVyLT5pbnB1dCA9IGlhcmc7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCi0JCWlmICgqaWFyZyAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9FTkFCTEVfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCWVuY29kZXItPmVuYWJsZSA9ICEhKmlhcmc7Ci0JCWJyZWFrOwotCX0KLQotCWRlZmF1bHQ6CisJaWYgKHN0ZCAmIFY0TDJfU1REX05UU0MpIHsKKwkJYWR2NzE3NV93cml0ZV9ibG9jayhzZCwgaW5pdF9udHNjLCBzaXplb2YoaW5pdF9udHNjKSk7CisJCWlmIChlbmNvZGVyLT5pbnB1dCA9PSAwKQorCQkJYWR2NzE3NV93cml0ZShzZCwgMHgwZCwgMHg0Zik7CS8qIEVuYWJsZSBnZW5sb2NrICovCisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFKTsKKwl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTCkgeworCQlhZHY3MTc1X3dyaXRlX2Jsb2NrKHNkLCBpbml0X3BhbCwgc2l6ZW9mKGluaXRfcGFsKSk7CisJCWlmIChlbmNvZGVyLT5pbnB1dCA9PSAwKQorCQkJYWR2NzE3NV93cml0ZShzZCwgMHgwZCwgMHg0Zik7CS8qIEVuYWJsZSBnZW5sb2NrICovCisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFKTsKKwl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1NFQ0FNKSB7CisJCS8qIFRoaXMgaXMgYW4gYXR0ZW1wdCB0byBjb252ZXJ0CisJCSAqIFNFQ0FNLT5QQUwgKHR5cGljYWxseSBpdCBkb2VzIG5vdCB3b3JrCisJCSAqIGR1ZSB0byBnZW5sb2NrOiB3aGVuIGRlY29kZXIgaXMgaW4gU0VDQU0KKwkJICogYW5kIGVuY29kZXIgaW4gaW4gUEFMIHRoZSBzdWJjYXJyaWVyIGNhbgorCQkgKiBub3QgYmUgc3luY3Jvbml6ZWQgd2l0aCBob3Jpem9udGFsCisJCSAqIHF1ZW5jeSkgKi8KKwkJYWR2NzE3NV93cml0ZV9ibG9jayhzZCwgaW5pdF9wYWwsIHNpemVvZihpbml0X3BhbCkpOworCQlpZiAoZW5jb2Rlci0+aW5wdXQgPT0gMCkKKwkJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MGQsIDB4NDkpOwkvKiBEaXNhYmxlIGdlbmxvY2sgKi8KKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUpOworCX0gZWxzZSB7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImlsbGVnYWwgbm9ybTogJWxseFxuIiwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXN0ZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQorCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInN3aXRjaGVkIHRvICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpc3RkKTsKKwllbmNvZGVyLT5ub3JtID0gc3RkOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGFkdjcxNzVfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQoreworCXN0cnVjdCBhZHY3MTc1ICplbmNvZGVyID0gdG9fYWR2NzE3NShzZCk7CisKKwkvKiBSSjogcm91dGUtPmlucHV0ID0gMDogaW5wdXQgaXMgZnJvbSBkZWNvZGVyCisJICAgcm91dGUtPmlucHV0ID0gMTogaW5wdXQgaXMgZnJvbSBaUjM2MDYwCisJICAgcm91dGUtPmlucHV0ID0gMjogY29sb3IgYmFyICovCisKKwlzd2l0Y2ggKHJvdXRlLT5pbnB1dCkgeworCWNhc2UgMDoKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwMSwgMHgwMCk7CisKKwkJaWYgKGVuY29kZXItPm5vcm0gJiBWNEwyX1NURF9OVFNDKQorCQkJc2V0X3N1YmNhcnJpZXJfZnJlcShzZCwgMSk7CisKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwYywgVFIxQ0FQVCk7CS8qIFRSMSAqLworCQlpZiAoZW5jb2Rlci0+bm9ybSAmIFY0TDJfU1REX1NFQ0FNKQorCQkJYWR2NzE3NV93cml0ZShzZCwgMHgwZCwgMHg0OSk7CS8qIERpc2FibGUgZ2VubG9jayAqLworCQllbHNlCisJCQlhZHY3MTc1X3dyaXRlKHNkLCAweDBkLCAweDRmKTsJLyogRW5hYmxlIGdlbmxvY2sgKi8KKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUpOworCQkvKnVkZWxheSgxMCk7Ki8KKwkJYnJlYWs7CisKKwljYXNlIDE6CisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDEsIDB4MDApOworCisJCWlmIChlbmNvZGVyLT5ub3JtICYgVjRMMl9TVERfTlRTQykKKwkJCXNldF9zdWJjYXJyaWVyX2ZyZXEoc2QsIDApOworCisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MGMsIFRSMVBMQVkpOwkvKiBUUjEgKi8KKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwZCwgMHg0OSk7CisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFKTsKKwkJLyogdWRlbGF5KDEwKTsgKi8KKwkJYnJlYWs7CisKKwljYXNlIDI6CisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDEsIDB4ODApOworCisJCWlmIChlbmNvZGVyLT5ub3JtICYgVjRMMl9TVERfTlRTQykKKwkJCXNldF9zdWJjYXJyaWVyX2ZyZXEoc2QsIDApOworCisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MGQsIDB4NDkpOworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJCS8qIHVkZWxheSgxMCk7ICovCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaWxsZWdhbCBpbnB1dDogJWRcbiIsIHJvdXRlLT5pbnB1dCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzd2l0Y2hlZCB0byAlc1xuIiwgaW5wdXRzW3JvdXRlLT5pbnB1dF0pOworCWVuY29kZXItPmlucHV0ID0gcm91dGUtPmlucHV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkdjcxNzVfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfQURWNzE3NSwgMCk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qCi0gKiBHZW5lcmljIGkyYyBwcm9iZQotICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwotICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCUkyQ19BRFY3MTc1ID4+IDEsIChJMkNfQURWNzE3NSA+PiAxKSArIDEsCi0JSTJDX0FEVjcxNzYgPj4gMSwgKEkyQ19BRFY3MTc2ID4+IDEpICsgMSwKLQlJMkNfQ0xJRU5UX0VORAorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBhZHY3MTc1X2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBhZHY3MTc1X2dfY2hpcF9pZGVudCwKKwkuaW5pdCA9IGFkdjcxNzVfaW5pdCwKIH07CiAKLUkyQ19DTElFTlRfSU5TTU9EOworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgYWR2NzE3NV92aWRlb19vcHMgPSB7CisJLnNfc3RkX291dHB1dCA9IGFkdjcxNzVfc19zdGRfb3V0cHV0LAorCS5zX3JvdXRpbmcgPSBhZHY3MTc1X3Nfcm91dGluZywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGFkdjcxNzVfb3BzID0geworCS5jb3JlID0gJmFkdjcxNzVfY29yZV9vcHMsCisJLnZpZGVvID0gJmFkdjcxNzVfdmlkZW9fb3BzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBhZHY3MTc1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGk7CiAJc3RydWN0IGFkdjcxNzUgKmVuY29kZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKQEAgLTM2OSwyNiArMzM5LDI5IEBACiAJZW5jb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZHY3MTc1KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVuY29kZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JZW5jb2Rlci0+bm9ybSA9IFZJREVPX01PREVfUEFMOworCXNkID0gJmVuY29kZXItPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZhZHY3MTc1X29wcyk7CisJZW5jb2Rlci0+bm9ybSA9IFY0TDJfU1REX05UU0M7CiAJZW5jb2Rlci0+aW5wdXQgPSAwOwotCWVuY29kZXItPmVuYWJsZSA9IDE7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZW5jb2Rlcik7CiAKLQlpID0gYWR2NzE3NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKKwlpID0gYWR2NzE3NV93cml0ZV9ibG9jayhzZCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOwogCWlmIChpID49IDApIHsKLQkJaSA9IGFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKLQkJaSA9IGFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJaSA9IGFkdjcxNzVfcmVhZChjbGllbnQsIDB4MTIpOwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJyZXZpc2lvbiAlZFxuIiwgaSAmIDEpOworCQlpID0gYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CisJCWkgPSBhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFKTsKKwkJaSA9IGFkdjcxNzVfcmVhZChzZCwgMHgxMik7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInJldmlzaW9uICVkXG4iLCBpICYgMSk7CiAJfQogCWlmIChpIDwgMCkKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaW5pdCBlcnJvciAweCV4XG4iLCBpKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaW5pdCBlcnJvciAweCV4XG4iLCBpKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhZHY3MTc1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fYWR2NzE3NShzZCkpOwogCXJldHVybiAwOwogfQogCkBAIC00MDMsOCArMzc2LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gImFkdjcxNzUiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9BRFY3MTc1LAotCS5jb21tYW5kID0gYWR2NzE3NV9jb21tYW5kLAogCS5wcm9iZSA9IGFkdjcxNzVfcHJvYmUsCiAJLnJlbW92ZSA9IGFkdjcxNzVfcmVtb3ZlLAogCS5pZF90YWJsZSA9IGFkdjcxNzVfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvS2NvbmZpZwppbmRleCAwMThmNzJiLi4wNWNkZjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L0tjb25maWcKQEAgLTEsMTMgKzEsMTMgQEAKIAogY29uZmlnIFZJREVPX0FVMDgyOAogCXRyaXN0YXRlICJBdXZpdGVrIEFVMDgyOCBzdXBwb3J0IgotCWRlcGVuZHMgb24gSTJDICYmIElOUFVUICYmIERWQl9DT1JFICYmIFVTQgorCWRlcGVuZHMgb24gSTJDICYmIElOUFVUICYmIERWQl9DT1JFICYmIFVTQiAmJiBWSURFT19WNEwyCiAJc2VsZWN0IEkyQ19BTEdPQklUCiAJc2VsZWN0IFZJREVPX1RWRUVQUk9NCi0Jc2VsZWN0IERWQl9BVTg1MjIgaWYgIURWQl9GRV9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfWEM1MDAwIGlmICFEVkJfRkVfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDdUIGlmICFEVkJfRkVfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxIGlmICFEVkJfRkVfQ1VTVE9NSVpFCisJc2VsZWN0IERWQl9BVTg1MjIgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfWEM1MDAwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfTVhMNTAwN1QgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREExODI3MSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgQXV2aXRlaydzIFVTQiBkZXZpY2UuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvTWFrZWZpbGUKaW5kZXggY2QyYzU4Mi4uNGQyNjIzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACi1hdTA4Mjgtb2Jqcwk6PSBhdTA4MjgtY29yZS5vIGF1MDgyOC1pMmMubyBhdTA4MjgtY2FyZHMubyBhdTA4MjgtZHZiLm8KK2F1MDgyOC1vYmpzCTo9IGF1MDgyOC1jb3JlLm8gYXUwODI4LWkyYy5vIGF1MDgyOC1jYXJkcy5vIGF1MDgyOC1kdmIubyBhdTA4MjgtdmlkZW8ubwogCiBvYmotJChDT05GSUdfVklERU9fQVUwODI4KSArPSBhdTA4MjgubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jYXJkcy5jCmluZGV4IGQ2MDEyM2IuLjFhYWJhYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jYXJkcy5jCkBAIC0yMSwyNSArMjEsODkgQEAKIAogI2luY2x1ZGUgImF1MDgyOC5oIgogI2luY2x1ZGUgImF1MDgyOC1jYXJkcy5oIgorI2luY2x1ZGUgImF1ODUyMi5oIgorI2luY2x1ZGUgIm1lZGlhL3R1bmVyLmgiCisjaW5jbHVkZSAibWVkaWEvdjRsMi1jb21tb24uaCIKKwordm9pZCBodnI5NTBxX2NzNTM0MF9hdWRpbyh2b2lkICpwcml2LCBpbnQgZW5hYmxlKQoreworCS8qIEJlY2F1c2UgdGhlIEhWUi05NTBxIHNoYXJlcyBhbiBpMnMgYnVzIGJldHdlZW4gdGhlIGNzNTM0MCBhbmQgdGhlCisJICAgYXU4NTIyLCB3ZSBuZWVkIHRvIGhvbGQgY3M1MzQwIGluIHJlc2V0IHdoZW4gdXNpbmcgdGhlIGF1ODUyMiAqLworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBwcml2OworCWlmIChlbmFibGUgPT0gMSkKKwkJYXUwODI4X3NldChkZXYsIFJFR18wMDAsIDB4MTApOworCWVsc2UKKwkJYXUwODI4X2NsZWFyKGRldiwgUkVHXzAwMCwgMHgxMCk7Cit9CiAKIHN0cnVjdCBhdTA4MjhfYm9hcmQgYXUwODI4X2JvYXJkc1tdID0gewogCVtBVTA4MjhfQk9BUkRfVU5LTk9XTl0gPSB7CiAJCS5uYW1lCT0gIlVua25vd24gYm9hcmQiLAorCQkudHVuZXJfdHlwZSA9IFVOU0VULAorCQkudHVuZXJfYWRkciA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI4NTBdID0gewogCQkubmFtZQk9ICJIYXVwcGF1Z2UgSFZSODUwIiwKKwkJLnR1bmVyX3R5cGUgPSBUVU5FUl9YQzUwMDAsCisJCS50dW5lcl9hZGRyID0gMHg2MSwKKwkJLmlucHV0ID0geworCQkJeworCQkJCS50eXBlID0gQVUwODI4X1ZNVVhfVEVMRVZJU0lPTiwKKwkJCQkudm11eCA9IEFVODUyMl9DT01QT1NJVEVfQ0g0X1NJRiwKKwkJCQkuYW11eCA9IEFVODUyMl9BVURJT19TSUYsCisJCQl9LAorCQkJeworCQkJCS50eXBlID0gQVUwODI4X1ZNVVhfQ09NUE9TSVRFLAorCQkJCS52bXV4ID0gQVU4NTIyX0NPTVBPU0lURV9DSDEsCisJCQkJLmFtdXggPSBBVTg1MjJfQVVESU9fTk9ORSwKKwkJCQkuYXVkaW9fc2V0dXAgPSBodnI5NTBxX2NzNTM0MF9hdWRpbywKKwkJCX0sCisJCQl7CisJCQkJLnR5cGUgPSBBVTA4MjhfVk1VWF9TVklERU8sCisJCQkJLnZtdXggPSBBVTg1MjJfU1ZJREVPX0NIMTMsCisJCQkJLmFtdXggPSBBVTg1MjJfQVVESU9fTk9ORSwKKwkJCQkuYXVkaW9fc2V0dXAgPSBodnI5NTBxX2NzNTM0MF9hdWRpbywKKwkJCX0sCisJCX0sCiAJfSwKIAlbQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI5NTBRXSA9IHsKIAkJLm5hbWUJPSAiSGF1cHBhdWdlIEhWUjk1MFEiLAorCQkudHVuZXJfdHlwZSA9IFRVTkVSX1hDNTAwMCwKKwkJLnR1bmVyX2FkZHIgPSAweDYxLAorCQkuaW5wdXQgPSB7CisJCQl7CisJCQkJLnR5cGUgPSBBVTA4MjhfVk1VWF9URUxFVklTSU9OLAorCQkJCS52bXV4ID0gQVU4NTIyX0NPTVBPU0lURV9DSDRfU0lGLAorCQkJCS5hbXV4ID0gQVU4NTIyX0FVRElPX1NJRiwKKwkJCX0sCisJCQl7CisJCQkJLnR5cGUgPSBBVTA4MjhfVk1VWF9DT01QT1NJVEUsCisJCQkJLnZtdXggPSBBVTg1MjJfQ09NUE9TSVRFX0NIMSwKKwkJCQkuYW11eCA9IEFVODUyMl9BVURJT19OT05FLAorCQkJCS5hdWRpb19zZXR1cCA9IGh2cjk1MHFfY3M1MzQwX2F1ZGlvLAorCQkJfSwKKwkJCXsKKwkJCQkudHlwZSA9IEFVMDgyOF9WTVVYX1NWSURFTywKKwkJCQkudm11eCA9IEFVODUyMl9TVklERU9fQ0gxMywKKwkJCQkuYW11eCA9IEFVODUyMl9BVURJT19OT05FLAorCQkJCS5hdWRpb19zZXR1cCA9IGh2cjk1MHFfY3M1MzQwX2F1ZGlvLAorCQkJfSwKKwkJfSwKIAl9LAogCVtBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFFfTVhMXSA9IHsKIAkJLm5hbWUJPSAiSGF1cHBhdWdlIEhWUjk1MFEgcmV2IHh4RjgiLAorCQkudHVuZXJfdHlwZSA9IFVOU0VULAorCQkudHVuZXJfYWRkciA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQVUwODI4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFY3XSA9IHsKIAkJLm5hbWUJPSAiRFZpQ08gRnVzaW9uSERUViBVU0IiLAorCQkudHVuZXJfdHlwZSA9IFVOU0VULAorCQkudHVuZXJfYWRkciA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9XT09EQlVSWV0gPSB7CiAJCS5uYW1lID0gIkhhdXBwYXVnZSBXb29kYnVyeSIsCisJCS50dW5lcl90eXBlID0gVU5TRVQsCisJCS50dW5lcl9hZGRyID0gQUREUl9VTlNFVCwKIAl9LAogfTsKIApAQCAtNTIsNyArMTE2LDcgQEAKIAogCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCXN3aXRjaCAoZGV2LT5ib2FyZCkgeworCXN3aXRjaCAoZGV2LT5ib2FyZG5yKSB7CiAJY2FzZSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjg1MDoKIAljYXNlIEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUToKIAljYXNlIEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUV9NWEw6CkBAIC04MSwxNyArMTQ1LDE4IEBACiAJc3RydWN0IHR2ZWVwcm9tIHR2OwogCiAJdHZlZXByb21faGF1cHBhdWdlX2FuYWxvZygmZGV2LT5pMmNfY2xpZW50LCAmdHYsIGVlcHJvbV9kYXRhKTsKKwlkZXYtPmJvYXJkLnR1bmVyX3R5cGUgPSB0di50dW5lcl90eXBlOwogCiAJLyogTWFrZSBzdXJlIHdlIHN1cHBvcnQgdGhlIGJvYXJkIG1vZGVsICovCiAJc3dpdGNoICh0di5tb2RlbCkgewogCWNhc2UgNzIwMDA6IC8qIFdpblRWLUhWUjk1MHEgKFJldGFpbCwgSVIsIEFUU0MvUUFNICovCi0JY2FzZSA3MjAwMTogLyogV2luVFYtSFZSOTUwcSAoUmV0YWlsLCBJUiwgQVRTQy9RQU0gYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLwotCWNhc2UgNzIyMTE6IC8qIFdpblRWLUhWUjk1MHEgKE9FTSwgSVIsIEFUU0MvUUFNIGFuZCBiYXNpYyBhbmFsb2cgdmlkZW8gKi8KLQljYXNlIDcyMjIxOiAvKiBXaW5UVi1IVlI5NTBxIChPRU0sIElSLCBBVFNDL1FBTSBhbmQgYmFzaWMgYW5hbG9nIHZpZGVvICovCi0JY2FzZSA3MjIzMTogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBJUiwgQVRTQy9RQU0gYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLwotCWNhc2UgNzIyNDE6IC8qIFdpblRWLUhWUjk1MHEgKE9FTSwgTm8gSVIsIEFUU0MvUUFNIGFuZCBiYXNpYyBhbmFsb2cgdmlkZW8gKi8KLQljYXNlIDcyMjUxOiAvKiBXaW5UVi1IVlI5NTBxIChSZXRhaWwsIElSLCBBVFNDL1FBTSBhbmQgYmFzaWMgYW5hbG9nIHZpZGVvICovCi0JY2FzZSA3MjMwMTogLyogV2luVFYtSFZSODUwIChSZXRhaWwsIElSLCBBVFNDIGFuZCBiYXNpYyBhbmFsb2cgdmlkZW8gKi8KKwljYXNlIDcyMDAxOiAvKiBXaW5UVi1IVlI5NTBxIChSZXRhaWwsIElSLCBBVFNDL1FBTSBhbmQgYW5hbG9nIHZpZGVvICovCisJY2FzZSA3MjIxMTogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBJUiwgQVRTQy9RQU0gYW5kIGFuYWxvZyB2aWRlbyAqLworCWNhc2UgNzIyMjE6IC8qIFdpblRWLUhWUjk1MHEgKE9FTSwgSVIsIEFUU0MvUUFNIGFuZCBhbmFsb2cgdmlkZW8gKi8KKwljYXNlIDcyMjMxOiAvKiBXaW5UVi1IVlI5NTBxIChPRU0sIElSLCBBVFNDL1FBTSBhbmQgYW5hbG9nIHZpZGVvICovCisJY2FzZSA3MjI0MTogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBObyBJUiwgQVRTQy9RQU0gYW5kIGFuYWxvZyB2aWRlbyAqLworCWNhc2UgNzIyNTE6IC8qIFdpblRWLUhWUjk1MHEgKFJldGFpbCwgSVIsIEFUU0MvUUFNIGFuZCBhbmFsb2cgdmlkZW8gKi8KKwljYXNlIDcyMzAxOiAvKiBXaW5UVi1IVlI4NTAgKFJldGFpbCwgSVIsIEFUU0MgYW5kIGFuYWxvZyB2aWRlbyAqLwogCWNhc2UgNzI1MDA6IC8qIFdpblRWLUhWUjk1MHEgKE9FTSwgTm8gSVIsIEFUU0MvUUFNICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xMDcsMTUgKzE3MiwyMSBAQAogdm9pZCBhdTA4MjhfY2FyZF9zZXR1cChzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KQogewogCXN0YXRpYyB1OCBlZXByb21bMjU2XTsKKwlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJdW5zaWduZWQgaW50IG1vZGVfbWFzayA9IFRfQU5BTE9HX1RWIHwKKwkJCQkgVF9ESUdJVEFMX1RWOwogCiAJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCisJbWVtY3B5KCZkZXYtPmJvYXJkLCAmYXUwODI4X2JvYXJkc1tkZXYtPmJvYXJkbnJdLCBzaXplb2YoZGV2LT5ib2FyZCkpOworCiAJaWYgKGRldi0+aTJjX3JjID09IDApIHsKIAkJZGV2LT5pMmNfY2xpZW50LmFkZHIgPSAweGEwID4+IDE7CiAJCXR2ZWVwcm9tX3JlYWQoJmRldi0+aTJjX2NsaWVudCwgZWVwcm9tLCBzaXplb2YoZWVwcm9tKSk7CiAJfQogCi0Jc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJc3dpdGNoIChkZXYtPmJvYXJkbnIpIHsKIAljYXNlIEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSODUwOgogCWNhc2UgQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI5NTBROgogCWNhc2UgQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI5NTBRX01YTDoKQEAgLTEyNCw2ICsxOTUsMzIgQEAKIAkJCWhhdXBwYXVnZV9lZXByb20oZGV2LCBlZXByb20rMHhhMCk7CiAJCWJyZWFrOwogCX0KKworCWlmIChBVVZJX0lOUFVUKDApLnR5cGUgIT0gQVUwODI4X1ZNVVhfVU5ERUZJTkVEKSB7CisJCS8qIExvYWQgdGhlIGFuYWxvZyBkZW1vZHVsYXRvciBkcml2ZXIgKG5vdGUgdGhpcyB3b3VsZCBuZWVkIHRvCisJCSAgIGJlIGFic3RyYWN0ZWQgb3V0IGlmIHdlIGV2ZXIgbmVlZCB0byBzdXBwb3J0IGEgZGlmZmVyZW50CisJCSAgIGRlbW9kKSAqLworCQlzZCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+aTJjX2FkYXAsICJhdTg1MjIiLCAiYXU4NTIyIiwKKwkJCQkJIDB4OGUgPj4gMSk7CisJCWlmIChzZCA9PSBOVUxMKQorCQkJcHJpbnRrKEtFUk5fRVJSICJhbmFsb2cgc3ViZGV2IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCX0KKworCS8qIFNldHVwIHR1bmVycyAqLworCWlmIChkZXYtPmJvYXJkLnR1bmVyX3R5cGUgIT0gVFVORVJfQUJTRU5UKSB7CisJCS8qIExvYWQgdGhlIHR1bmVyIG1vZHVsZSwgd2hpY2ggZG9lcyB0aGUgYXR0YWNoICovCisJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT5pMmNfYWRhcCwgInR1bmVyIiwgInR1bmVyIiwKKwkJCQkJIGRldi0+Ym9hcmQudHVuZXJfYWRkcik7CisJCWlmIChzZCA9PSBOVUxMKQorCQkJcHJpbnRrKEtFUk5fRVJSICJ0dW5lciBzdWJkZXYgcmVnaXN0cmF0aW9uIGZhaWxcbiIpOworCisJCXR1bl9zZXR1cC5tb2RlX21hc2sgICAgICA9IG1vZGVfbWFzazsKKwkJdHVuX3NldHVwLnR5cGUgICAgICAgICAgID0gZGV2LT5ib2FyZC50dW5lcl90eXBlOworCQl0dW5fc2V0dXAuYWRkciAgICAgICAgICAgPSBkZXYtPmJvYXJkLnR1bmVyX2FkZHI7CisJCXR1bl9zZXR1cC50dW5lcl9jYWxsYmFjayA9IGF1MDgyOF90dW5lcl9jYWxsYmFjazsKKwkJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIHR1bmVyLCBzX3R5cGVfYWRkciwKKwkJCQkgICAgICZ0dW5fc2V0dXApOworCX0KIH0KIAogLyoKQEAgLTEzNSw3ICsyMzIsNyBAQAogewogCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCXN3aXRjaCAoZGV2LT5ib2FyZCkgeworCXN3aXRjaCAoZGV2LT5ib2FyZG5yKSB7CiAJY2FzZSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjg1MDoKIAljYXNlIEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUToKIAljYXNlIEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUV9NWEw6CkBAIC0xNDQsMjEgKzI0MSwyMyBAQAogCQkgKiA0IC0gQ1M1MzQwCiAJCSAqIDUgLSBBVTg1MjIgRGVtb2R1bGF0b3IKIAkJICogNiAtIGVlcHJvbSBXL1AKKwkJICogNyAtIHBvd2VyIHN1cHBseQogCQkgKiA5IC0gWEM1MDAwIFR1bmVyCiAJCSAqLwogCiAJCS8qIEludG8gcmVzZXQgKi8KIAkJYXUwODI4X3dyaXRlKGRldiwgUkVHXzAwMywgMHgwMik7Ci0JCWF1MDgyOF93cml0ZShkZXYsIFJFR18wMDIsIDB4ODggfCAweDIwKTsKKwkJYXUwODI4X3dyaXRlKGRldiwgUkVHXzAwMiwgMHg4MCB8IDB4MjAgfCAweDEwKTsKIAkJYXUwODI4X3dyaXRlKGRldiwgUkVHXzAwMSwgMHgwKTsKIAkJYXUwODI4X3dyaXRlKGRldiwgUkVHXzAwMCwgMHgwKTsKIAkJbXNsZWVwKDEwMCk7CiAKLQkJLyogT3V0IG9mIHJlc2V0ICovCisJCS8qIE91dCBvZiByZXNldCAobGVhdmUgdGhlIGNzNTM0MCBpbiByZXNldCB1bnRpbCBuZWVkZWQpICovCiAJCWF1MDgyOF93cml0ZShkZXYsIFJFR18wMDMsIDB4MDIpOwogCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMDAxLCAweDAyKTsKLQkJYXUwODI4X3dyaXRlKGRldiwgUkVHXzAwMiwgMHg4OCB8IDB4MjApOwotCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMDAwLCAweDg4IHwgMHgyMCB8IDB4NDApOworCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMDAyLCAweDgwIHwgMHgyMCB8IDB4MTApOworCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMDAwLCAweDgwIHwgMHg0MCB8IDB4MjApOworCiAJCW1zbGVlcCgyNTApOwogCQlicmVhazsKIAljYXNlIEFVMDgyOF9CT0FSRF9EVklDT19GVVNJT05IRFRWNzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY29yZS5jCmluZGV4IDU3NjVlODYuLjhjNzYxZDE2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY29yZS5jCkBAIC0zNiw2ICszNiw4IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGF1MDgyOF9kZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMiKTsKIAorc3RhdGljIGF0b21pY190IGF1MDgyOF9pbnN0YW5jZSA9IEFUT01JQ19JTklUKDApOworCiAjZGVmaW5lIF9BVTA4MjhfQlVMS1BJUEUgMHgwMwogI2RlZmluZSBfQlVMS1BJUEVTSVpFIDB4ZmZmZgogCkBAIC01MSwxMyArNTMsMTMgQEAKIHUzMiBhdTA4MjhfcmVhZHJlZyhzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LCB1MTYgcmVnKQogewogCXJlY3ZfY29udHJvbF9tc2coZGV2LCBDTURfUkVRVUVTVF9JTiwgMCwgcmVnLCBkZXYtPmN0cmxtc2csIDEpOwotCWRwcmludGsoOCwgIiVzKDB4JXgpID0gMHgleFxuIiwgX19mdW5jX18sIHJlZywgZGV2LT5jdHJsbXNnWzBdKTsKKwlkcHJpbnRrKDgsICIlcygweCUwNHgpID0gMHglMDJ4XG4iLCBfX2Z1bmNfXywgcmVnLCBkZXYtPmN0cmxtc2dbMF0pOwogCXJldHVybiBkZXYtPmN0cmxtc2dbMF07CiB9CiAKIHUzMiBhdTA4Mjhfd3JpdGVyZWcoc3RydWN0IGF1MDgyOF9kZXYgKmRldiwgdTE2IHJlZywgdTMyIHZhbCkKIHsKLQlkcHJpbnRrKDgsICIlcygweCV4LCAweCV4KVxuIiwgX19mdW5jX18sIHJlZywgdmFsKTsKKwlkcHJpbnRrKDgsICIlcygweCUwNHgsIDB4JTAyeClcbiIsIF9fZnVuY19fLCByZWcsIHZhbCk7CiAJcmV0dXJuIHNlbmRfY29udHJvbF9tc2coZGV2LCBDTURfUkVRVUVTVF9PVVQsIHZhbCwgcmVnLAogCQkJCWRldi0+Y3RybG1zZywgMCk7CiB9CkBAIC0xNDYsOSArMTQ4LDE0IEBACiAJLyogRGlnaXRhbCBUViAqLwogCWF1MDgyOF9kdmJfdW5yZWdpc3RlcihkZXYpOwogCisJaWYgKEFVVklfSU5QVVQoMCkudHlwZSAhPSBBVTA4MjhfVk1VWF9VTkRFRklORUQpCisJCWF1MDgyOF9hbmFsb2dfdW5yZWdpc3RlcihkZXYpOworCiAJLyogSTJDICovCiAJYXUwODI4X2kyY191bnJlZ2lzdGVyKGRldik7CiAKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKKwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKIAogCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwpAQCAtMTYyLDcgKzE2OSw3IEBACiBzdGF0aWMgaW50IGF1MDgyOF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKIAljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7Ci0JaW50IGlmbnVtOworCWludCBpZm51bSwgcmV0dmFsLCBpOwogCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKIApAQCAtMTg1LDEwICsxOTIsMjIgQEAKIAltdXRleF9pbml0KCZkZXYtPm11dGV4KTsKIAltdXRleF9pbml0KCZkZXYtPmR2Yi5sb2NrKTsKIAlkZXYtPnVzYmRldiA9IHVzYmRldjsKLQlkZXYtPmJvYXJkID0gaWQtPmRyaXZlcl9pbmZvOworCWRldi0+Ym9hcmRuciA9IGlkLT5kcml2ZXJfaW5mbzsKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOwogCisJLyogQ3JlYXRlIHRoZSB2NGwyX2RldmljZSAqLworCWkgPSBhdG9taWNfaW5jX3JldHVybigmYXUwODI4X2luc3RhbmNlKSAtIDE7CisJc25wcmludGYoZGV2LT52NGwyX2Rldi5uYW1lLCBzaXplb2YoZGV2LT52NGwyX2Rldi5uYW1lKSwgIiVzLSUwM2QiLAorCQkgImF1MDgyOCIsIGkpOworCXJldHZhbCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPnVzYmRldi0+ZGV2LCAmZGV2LT52NGwyX2Rldik7CisJaWYgKHJldHZhbCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdjRsMl9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlrZnJlZShkZXYpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKIAkvKiBQb3dlciBVcCB0aGUgYnJpZGdlICovCiAJYXUwODI4X3dyaXRlKGRldiwgUkVHXzYwMCwgMSA8PCA0KTsKIApAQCAtMjAxLDEyICsyMjAsMTUgQEAKIAkvKiBTZXR1cCAqLwogCWF1MDgyOF9jYXJkX3NldHVwKGRldik7CiAKKwkvKiBBbmFsb2cgVFYgKi8KKwlpZiAoQVVWSV9JTlBVVCgwKS50eXBlICE9IEFVMDgyOF9WTVVYX1VOREVGSU5FRCkKKwkJYXUwODI4X2FuYWxvZ19yZWdpc3RlcihkZXYsIGludGVyZmFjZSk7CisKIAkvKiBEaWdpdGFsIFRWICovCiAJYXUwODI4X2R2Yl9yZWdpc3RlcihkZXYpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiUmVnaXN0ZXJlZCBkZXZpY2UgQVUwODI4IFslc11cbiIsCi0JCWF1MDgyOF9ib2FyZHNbZGV2LT5ib2FyZF0ubmFtZSA9PSBOVUxMID8gIlVuc2V0IiA6Ci0JCWF1MDgyOF9ib2FyZHNbZGV2LT5ib2FyZF0ubmFtZSk7CisJCWRldi0+Ym9hcmQubmFtZSA9PSBOVUxMID8gIlVuc2V0IiA6IGRldi0+Ym9hcmQubmFtZSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1kdmIuYwppbmRleCBhODgyY2Y1Li4xNGJhZmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWR2Yi5jCkBAIC0zNzgsNyArMzc4LDcgQEAKIAlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBpbml0IGZyb250ZW5kICovCi0Jc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJc3dpdGNoIChkZXYtPmJvYXJkbnIpIHsKIAljYXNlIEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSODUwOgogCWNhc2UgQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI5NTBROgogCQlkdmItPmZyb250ZW5kID0gZHZiX2F0dGFjaChhdTg1MjJfYXR0YWNoLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWkyYy5jCmluZGV4IGQ2MThmYmEuLmY5YTk1OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtaTJjLmMKQEAgLTE0MCwxMyArMTQwLDM5IEBACiAJZHByaW50ayg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJYXUwODI4X3dyaXRlKGRldiwgUkVHXzJGRiwgMHgwMSk7Ci0JYXUwODI4X3dyaXRlKGRldiwgUkVHXzIwMiwgMHgwNyk7CisKKwkvKiBGSVhNRTogVGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggaTJjIGNvbW11bmljYXRpb25zIHdpdGggeGM1MDAwIHRoYXQKKwkgICByZXF1aXJlcyB1cyB0byBzbG93IGRvd24gdGhlIGkyYyBjbG9jayB1bnRpbCB3ZSBoYXZlIGEgYmV0dGVyCisJICAgc3RyYXRlZ3kgKHN1Y2ggYXMgdXNpbmcgdGhlIHNlY29uZGFyeSBpMmMgYnVzIHRvIGRvIGZpcm13YXJlCisJICAgbG9hZGluZyAqLworCWlmICgobXNnLT5hZGRyIDw8IDEpID09IDB4YzIpCisJCWF1MDgyOF93cml0ZShkZXYsIFJFR18yMDIsIDB4NDApOworCWVsc2UKKwkJYXUwODI4X3dyaXRlKGRldiwgUkVHXzIwMiwgMHgwNyk7CiAKIAkvKiBIYXJkd2FyZSBuZWVkcyA4IGJpdCBhZGRyZXNzZXMgKi8KIAlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMjAzLCBtc2ctPmFkZHIgPDwgMSk7CiAKIAlkcHJpbnRrKDQsICJTRU5EOiAlMDJ4XG4iLCBtc2ctPmFkZHIpOwogCisJLyogRGVhbCB3aXRoIGkyY19zY2FuICovCisJaWYgKG1zZy0+bGVuID09IDApIHsKKwkJLyogVGhlIGFuYWxvZyB0dW5lciBkZXRlY3Rpb24gY29kZSBtYWtlcyB1c2Ugb2YgdGhlIFNNQlVTX1FVSUNLCisJCSAgIG1lc3NhZ2UgKHdoaWNoIGludm9sdmVzIGEgemVybyBsZW5ndGggaTJjIHdyaXRlKS4gIFRvIGF2b2lkCisJCSAgIGNoZWNraW5nIHRoZSBzdGF0dXMgcmVnaXN0ZXIgd2hlbiB3ZSBkaWRuJ3Qgc3Ryb2JlIG91dCBhbnkKKwkJICAgYWN0dWFsIGJ5dGVzIHRvIHRoZSBidXMsIGp1c3QgZG8gYSByZWFkIGNoZWNrLiAgVGhpcyBpcworCQkgICBjb25zaXN0ZW50IHdpdGggaG93IEkgc2F3IGkyYyBkZXZpY2UgY2hlY2tpbmcgZG9uZSBpbiB0aGUKKwkJICAgVVNCIHRyYWNlIG9mIHRoZSBXaW5kb3dzIGRyaXZlciAqLworCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMjAwLCAweDIwKTsKKwkJaWYgKCFpMmNfd2FpdF9kb25lKGkyY19hZGFwKSkKKwkJCXJldHVybiAtRUlPOworCisJCWlmIChpMmNfd2FpdF9yZWFkX2FjayhpMmNfYWRhcCkpCisJCQlyZXR1cm4gLUVJTzsKKworCQlyZXR1cm4gMDsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgbXNnLT5sZW47KSB7CiAKIAkJZHByaW50ayg0LCAiICUwMnhcbiIsIG1zZy0+YnVmW2ldKTsKQEAgLTE5MSw3ICsyMTcsMTUgQEAKIAlkcHJpbnRrKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMkZGLCAweDAxKTsKLQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMjAyLCAweDA3KTsKKworCS8qIEZJWE1FOiBUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCBpMmMgY29tbXVuaWNhdGlvbnMgd2l0aCB4YzUwMDAgdGhhdAorCSAgIHJlcXVpcmVzIHVzIHRvIHNsb3cgZG93biB0aGUgaTJjIGNsb2NrIHVudGlsIHdlIGhhdmUgYSBiZXR0ZXIKKwkgICBzdHJhdGVneSAoc3VjaCBhcyB1c2luZyB0aGUgc2Vjb25kYXJ5IGkyYyBidXMgdG8gZG8gZmlybXdhcmUKKwkgICBsb2FkaW5nICovCisJaWYgKChtc2ctPmFkZHIgPDwgMSkgPT0gMHhjMikKKwkJYXUwODI4X3dyaXRlKGRldiwgUkVHXzIwMiwgMHg0MCk7CisJZWxzZQorCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMjAyLCAweDA3KTsKIAogCS8qIEhhcmR3YXJlIG5lZWRzIDggYml0IGFkZHJlc3NlcyAqLwogCWF1MDgyOF93cml0ZShkZXYsIFJFR18yMDMsIG1zZy0+YWRkciA8PCAxKTsKQEAgLTI2NSwzMyArMjk5LDYgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50IGF0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlkcHJpbnRrKDEsICIlcyBpMmMgYXR0YWNoIFthZGRyPTB4JXgsY2xpZW50PSVzXVxuIiwKLQkJY2xpZW50LT5kcml2ZXItPmRyaXZlci5uYW1lLCBjbGllbnQtPmFkZHIsIGNsaWVudC0+bmFtZSk7Ci0KLQlpZiAoIWNsaWVudC0+ZHJpdmVyLT5jb21tYW5kKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRldGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlkcHJpbnRrKDEsICJpMmMgZGV0YWNoIFtjbGllbnQ9JXNdXG4iLCBjbGllbnQtPm5hbWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgYXUwODI4X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGF1MDgyOF9kZXYgKmRldiwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlpZiAoZGV2LT5pMmNfcmMgIT0gMCkKLQkJcmV0dXJuOwotCi0JaTJjX2NsaWVudHNfY29tbWFuZCgmZGV2LT5pMmNfYWRhcCwgY21kLCBhcmcpOwotfQotCiBzdGF0aWMgdTMyIGF1MDgyOF9mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKIHsKIAlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfRU1VTCB8IEkyQ19GVU5DX0kyQzsKQEAgLTMwOSw5ICszMTYsNiBAQAogCS5vd25lciAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAogCS5pZCAgICAgICAgICAgICAgICA9IEkyQ19IV19CX0FVMDgyOCwKIAkuYWxnbyAgICAgICAgICAgICAgPSAmYXUwODI4X2kyY19hbGdvX3RlbXBsYXRlLAotCS5jbGFzcyAgICAgICAgICAgICA9IEkyQ19DTEFTU19UVl9BTkFMT0csCi0JLmNsaWVudF9yZWdpc3RlciAgID0gYXR0YWNoX2luZm9ybSwKLQkuY2xpZW50X3VucmVnaXN0ZXIgPSBkZXRhY2hfaW5mb3JtLAogfTsKIAogc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGF1MDgyOF9pMmNfY2xpZW50X3RlbXBsYXRlID0gewpAQCAtMzU2LDkgKzM2MCw5IEBACiAJc3RybGNweShkZXYtPmkyY19hZGFwLm5hbWUsIERSSVZFUl9OQU1FLAogCQlzaXplb2YoZGV2LT5pMmNfYWRhcC5uYW1lKSk7CiAKLQlkZXYtPmkyY19hbGdvLmRhdGEgPSBkZXY7CisJZGV2LT5pMmNfYWRhcC5hbGdvID0gJmRldi0+aTJjX2FsZ287CiAJZGV2LT5pMmNfYWRhcC5hbGdvX2RhdGEgPSBkZXY7Ci0JaTJjX3NldF9hZGFwZGF0YSgmZGV2LT5pMmNfYWRhcCwgZGV2KTsKKwlpMmNfc2V0X2FkYXBkYXRhKCZkZXYtPmkyY19hZGFwLCAmZGV2LT52NGwyX2Rldik7CiAJaTJjX2FkZF9hZGFwdGVyKCZkZXYtPmkyY19hZGFwKTsKIAogCWRldi0+aTJjX2NsaWVudC5hZGFwdGVyID0gJmRldi0+aTJjX2FkYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtcmVnLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtcmVnLmgKaW5kZXggMWU4N2ZhMGM2Li5iMTVlNGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtcmVnLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LXJlZy5oCkBAIC0yNyw2ICsyNyw5IEBACiAjZGVmaW5lIFJFR18wMDIgMHgwMDIKICNkZWZpbmUgUkVHXzAwMyAweDAwMwogCisjZGVmaW5lIEFVMDgyOF9TRU5TT1JDVFJMXzEwMCAweDEwMAorI2RlZmluZSBBVTA4MjhfU0VOU09SQ1RSTF9WQklfMTAzIDB4MTAzCisKICNkZWZpbmUgUkVHXzIwMCAweDIwMAogI2RlZmluZSBSRUdfMjAxIDB4MjAxCiAjZGVmaW5lIFJFR18yMDIgMHgyMDIKQEAgLTM1LDQgKzM4LDcgQEAKICNkZWZpbmUgUkVHXzIwOSAweDIwOQogI2RlZmluZSBSRUdfMkZGIDB4MmZmCiAKKy8qIEF1ZGlvIHJlZ2lzdGVycyAqLworI2RlZmluZSBBVTA4MjhfQVVESU9DVFJMXzUwQyAweDUwQworCiAjZGVmaW5lIFJFR182MDAgMHg2MDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LXZpZGVvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdhZDQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC12aWRlby5jCkBAIC0wLDAgKzEsMTcxMiBAQAorLyoKKyAqIEF1dml0ZWsgQVUwODI4IFVTQiBCcmlkZ2UgKEFuYWxvZyB2aWRlbyBzdXBwb3J0KQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBEZXZpbiBIZWl0bXVlbGxlciA8ZGhlaXRtdWVsbGVyQGxpbnV4dHYub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggQXV2aXRlayBJbnRlcm5hdGlvbmFsLCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIEFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICovCisKKy8qIERldmVsb3BlciBOb3RlczoKKyAqCisgKiBWQkkgc3VwcG9ydCBpcyBub3QgeWV0IHdvcmtpbmcKKyAqIFRoZSBoYXJkd2FyZSBzY2FsZXIgc3VwcG9ydGVkIGlzIHVuaW1wbGVtZW50ZWQKKyAqIEFDOTcgYXVkaW8gc3VwcG9ydCBpcyB1bmltcGxlbWVudGVkIChvbmx5IGkycyBhdWRpbyBtb2RlKQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KKyNpbmNsdWRlICJhdTA4MjguaCIKKyNpbmNsdWRlICJhdTA4MjgtcmVnLmgiCisKK3N0YXRpYyBMSVNUX0hFQUQoYXUwODI4X2Rldmxpc3QpOworc3RhdGljIERFRklORV9NVVRFWChhdTA4Mjhfc3lzZnNfbG9jayk7CisKKyNkZWZpbmUgQVUwODI4X1ZFUlNJT05fQ09ERSBLRVJORUxfVkVSU0lPTigwLCAwLCAxKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlWaWRlb2J1ZiBvcGVyYXRpb25zCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdW5zaWduZWQgaW50IGlzb2NfZGVidWc7Cittb2R1bGVfcGFyYW0oaXNvY19kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaXNvY19kZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbaXNvYyB0cmFuc2ZlcnNdIik7CisKKyNkZWZpbmUgYXUwODI4X2lzb2NkYmcoZm10LCBhcmcuLi4pIFwKK2RvIHtcCisJaWYgKGlzb2NfZGVidWcpIHsgXAorCQlwcmludGsoS0VSTl9JTkZPICJhdTA4MjggJXMgOiJmbXQsIFwKKwkJICAgICAgIF9fZnVuY19fICwgIyNhcmcpOwkgICBcCisJfSBcCisgIH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmludF9lcnJfc3RhdHVzKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsCisJCQkJICAgIGludCBwYWNrZXQsIGludCBzdGF0dXMpCit7CisJY2hhciAqZXJybXNnID0gIlVua25vd24iOworCisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIC1FTk9FTlQ6CisJCWVycm1zZyA9ICJ1bmxpbmtlZCBzeW5jaHJvbnVvdXNseSI7CisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJCWVycm1zZyA9ICJ1bmxpbmtlZCBhc3luY2hyb251b3VzbHkiOworCQlicmVhazsKKwljYXNlIC1FTk9TUjoKKwkJZXJybXNnID0gIkJ1ZmZlciBlcnJvciAob3ZlcnJ1bikiOworCQlicmVhazsKKwljYXNlIC1FUElQRToKKwkJZXJybXNnID0gIlN0YWxsZWQgKGRldmljZSBub3QgcmVzcG9uZGluZykiOworCQlicmVhazsKKwljYXNlIC1FT1ZFUkZMT1c6CisJCWVycm1zZyA9ICJCYWJibGUgKGJhZCBjYWJsZT8pIjsKKwkJYnJlYWs7CisJY2FzZSAtRVBST1RPOgorCQllcnJtc2cgPSAiQml0LXN0dWZmIGVycm9yIChiYWQgY2FibGU/KSI7CisJCWJyZWFrOworCWNhc2UgLUVJTFNFUToKKwkJZXJybXNnID0gIkNSQy9UaW1lb3V0IChjb3VsZCBiZSBhbnl0aGluZykiOworCQlicmVhazsKKwljYXNlIC1FVElNRToKKwkJZXJybXNnID0gIkRldmljZSBkb2VzIG5vdCByZXNwb25kIjsKKwkJYnJlYWs7CisJfQorCWlmIChwYWNrZXQgPCAwKSB7CisJCWF1MDgyOF9pc29jZGJnKCJVUkIgc3RhdHVzICVkIFslc10uXG4iLAlzdGF0dXMsIGVycm1zZyk7CisJfSBlbHNlIHsKKwkJYXUwODI4X2lzb2NkYmcoIlVSQiBwYWNrZXQgJWQsIHN0YXR1cyAlZCBbJXNdLlxuIiwKKwkJCSAgICAgICBwYWNrZXQsIHN0YXR1cywgZXJybXNnKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfZGV2KHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpCit7CisJaWYgKGRldi0+ZGV2X3N0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgeworCQlwcmludGsoS0VSTl9JTkZPICJ2NGwyIGlvY3RsOiBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoZGV2LT5kZXZfc3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkgeworCQlwcmludGsoS0VSTl9JTkZPICJ2NGwyIGlvY3RsOiBkZXZpY2UgaXMgbWlzY29uZmlndXJlZDsgIgorCQkgICAgICAgImNsb3NlIGFuZCBvcGVuIGl0IGFnYWluXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCisvKgorICogSVJRIGNhbGxiYWNrLCBjYWxsZWQgYnkgVVJCIGNhbGxiYWNrCisgKi8KK3N0YXRpYyB2b2lkIGF1MDgyOF9pcnFfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBhdTA4MjhfZG1hcXVldWUgICpkbWFfcSA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gY29udGFpbmVyX29mKGRtYV9xLCBzdHJ1Y3QgYXUwODI4X2RldiwgdmlkcSk7CisJaW50IHJjLCBpOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDogICAgICAgICAgICAgLyogc3VjY2VzcyAqLworCWNhc2UgLUVUSU1FRE9VVDogICAgLyogTkFLICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6ICAgLyoga2lsbCAqLworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCWF1MDgyOF9pc29jZGJnKCJhdTA4MjhfaXJxX2NhbGxiYWNrIGNhbGxlZDogc3RhdHVzIGtpbGxcbiIpOworCQlyZXR1cm47CisJZGVmYXVsdDogICAgICAgICAgICAvKiB1bmtub3duIGVycm9yICovCisJCWF1MDgyOF9pc29jZGJnKCJ1cmIgY29tcGxldGl0aW9uIGVycm9yICVkLlxuIiwgdXJiLT5zdGF0dXMpOworCQlicmVhazsKKwl9CisKKwkvKiBDb3B5IGRhdGEgZnJvbSBVUkIgKi8KKwlzcGluX2xvY2soJmRldi0+c2xvY2spOworCXJjID0gZGV2LT5pc29jX2N0bC5pc29jX2NvcHkoZGV2LCB1cmIpOworCXNwaW5fdW5sb2NrKCZkZXYtPnNsb2NrKTsKKworCS8qIFJlc2V0IHVyYiBidWZmZXJzICovCisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyA9IDA7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA9IDA7CisJfQorCXVyYi0+c3RhdHVzID0gMDsKKworCXVyYi0+c3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJYXUwODI4X2lzb2NkYmcoInVyYiByZXN1Ym1pdCBmYWlsZWQgKGVycm9yPSVpKVxuIiwKKwkJCSAgICAgICB1cmItPnN0YXR1cyk7CisJfQorfQorCisvKgorICogU3RvcCBhbmQgRGVhbGxvY2F0ZSBVUkJzCisgKi8KK3ZvaWQgYXUwODI4X3VuaW5pdF9pc29jKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpCit7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBpOworCisJYXUwODI4X2lzb2NkYmcoImF1MDgyODogY2FsbGVkIGF1MDgyOF91bmluaXRfaXNvY1xuIik7CisKKwlkZXYtPmlzb2NfY3RsLm5maWVsZHMgPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5pc29jX2N0bC5udW1fYnVmczsgaSsrKSB7CisJCXVyYiA9IGRldi0+aXNvY19jdGwudXJiW2ldOworCQlpZiAodXJiKSB7CisJCQlpZiAoIWlycXNfZGlzYWJsZWQoKSkKKwkJCQl1c2Jfa2lsbF91cmIodXJiKTsKKwkJCWVsc2UKKwkJCQl1c2JfdW5saW5rX3VyYih1cmIpOworCisJCQlpZiAoZGV2LT5pc29jX2N0bC50cmFuc2Zlcl9idWZmZXJbaV0pIHsKKwkJCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LT51c2JkZXYsCisJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQkJZGV2LT5pc29jX2N0bC50cmFuc2Zlcl9idWZmZXJbaV0sCisJCQkJCXVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJCX0KKwkJCXVzYl9mcmVlX3VyYih1cmIpOworCQkJZGV2LT5pc29jX2N0bC51cmJbaV0gPSBOVUxMOworCQl9CisJCWRldi0+aXNvY19jdGwudHJhbnNmZXJfYnVmZmVyW2ldID0gTlVMTDsKKwl9CisKKwlrZnJlZShkZXYtPmlzb2NfY3RsLnVyYik7CisJa2ZyZWUoZGV2LT5pc29jX2N0bC50cmFuc2Zlcl9idWZmZXIpOworCisJZGV2LT5pc29jX2N0bC51cmIgPSBOVUxMOworCWRldi0+aXNvY19jdGwudHJhbnNmZXJfYnVmZmVyID0gTlVMTDsKKwlkZXYtPmlzb2NfY3RsLm51bV9idWZzID0gMDsKK30KKworLyoKKyAqIEFsbG9jYXRlIFVSQnMgYW5kIHN0YXJ0IElSUQorICovCitpbnQgYXUwODI4X2luaXRfaXNvYyhzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LCBpbnQgbWF4X3BhY2tldHMsCisJCSAgICAgaW50IG51bV9idWZzLCBpbnQgbWF4X3BrdF9zaXplLAorCQkgICAgIGludCAoKmlzb2NfY29weSkgKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsIHN0cnVjdCB1cmIgKnVyYikpCit7CisJc3RydWN0IGF1MDgyOF9kbWFxdWV1ZSAqZG1hX3EgPSAmZGV2LT52aWRxOworCWludCBpOworCWludCBzYl9zaXplLCBwaXBlOworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgaiwgazsKKwlpbnQgcmM7CisKKwlhdTA4MjhfaXNvY2RiZygiYXUwODI4OiBjYWxsZWQgYXUwODI4X3ByZXBhcmVfaXNvY1xuIik7CisKKwkvKiBEZS1hbGxvY2F0ZXMgYWxsIHBlbmRpbmcgc3R1ZmYgKi8KKwlhdTA4MjhfdW5pbml0X2lzb2MoZGV2KTsKKworCWRldi0+aXNvY19jdGwuaXNvY19jb3B5ID0gaXNvY19jb3B5OworCWRldi0+aXNvY19jdGwubnVtX2J1ZnMgPSBudW1fYnVmczsKKworCWRldi0+aXNvY19jdGwudXJiID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSpudW1fYnVmcywgIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5pc29jX2N0bC51cmIpIHsKKwkJYXUwODI4X2lzb2NkYmcoImNhbm5vdCBhbGxvYyBtZW1vcnkgZm9yIHVzYiBidWZmZXJzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2LT5pc29jX2N0bC50cmFuc2Zlcl9idWZmZXIgPSBremFsbG9jKHNpemVvZih2b2lkICopKm51bV9idWZzLAorCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+aXNvY19jdGwudHJhbnNmZXJfYnVmZmVyKSB7CisJCWF1MDgyOF9pc29jZGJnKCJjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB1c2IgdHJhbnNmZXJcbiIpOworCQlrZnJlZShkZXYtPmlzb2NfY3RsLnVyYik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRldi0+aXNvY19jdGwubWF4X3BrdF9zaXplID0gbWF4X3BrdF9zaXplOworCWRldi0+aXNvY19jdGwuYnVmID0gTlVMTDsKKworCXNiX3NpemUgPSBtYXhfcGFja2V0cyAqIGRldi0+aXNvY19jdGwubWF4X3BrdF9zaXplOworCisJLyogYWxsb2NhdGUgdXJicyBhbmQgdHJhbnNmZXIgYnVmZmVycyAqLworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmlzb2NfY3RsLm51bV9idWZzOyBpKyspIHsKKwkJdXJiID0gdXNiX2FsbG9jX3VyYihtYXhfcGFja2V0cywgR0ZQX0tFUk5FTCk7CisJCWlmICghdXJiKSB7CisJCQlhdTA4MjhfaXNvY2RiZygiY2Fubm90IGFsbG9jIGlzb2NfY3RsLnVyYiAlaVxuIiwgaSk7CisJCQlhdTA4MjhfdW5pbml0X2lzb2MoZGV2KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWRldi0+aXNvY19jdGwudXJiW2ldID0gdXJiOworCisJCWRldi0+aXNvY19jdGwudHJhbnNmZXJfYnVmZmVyW2ldID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYtPnVzYmRldiwKKwkJCXNiX3NpemUsIEdGUF9LRVJORUwsICZ1cmItPnRyYW5zZmVyX2RtYSk7CisJCWlmICghZGV2LT5pc29jX2N0bC50cmFuc2Zlcl9idWZmZXJbaV0pIHsKKwkJCXByaW50aygidW5hYmxlIHRvIGFsbG9jYXRlICVpIGJ5dGVzIGZvciB0cmFuc2ZlciIKKwkJCQkJIiBidWZmZXIgJWklc1xuIiwKKwkJCQkJc2Jfc2l6ZSwgaSwKKwkJCQkJaW5faW50ZXJydXB0KCkgPyAiIHdoaWxlIGluIGludCIgOiAiIik7CisJCQlhdTA4MjhfdW5pbml0X2lzb2MoZGV2KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbXNldChkZXYtPmlzb2NfY3RsLnRyYW5zZmVyX2J1ZmZlcltpXSwgMCwgc2Jfc2l6ZSk7CisKKwkJcGlwZSA9IHVzYl9yY3Zpc29jcGlwZShkZXYtPnVzYmRldiwKKwkJCQkgICAgICAgZGV2LT5pc29jX2luX2VuZHBvaW50YWRkciksCisKKwkJdXNiX2ZpbGxfaW50X3VyYih1cmIsIGRldi0+dXNiZGV2LCBwaXBlLAorCQkJCSBkZXYtPmlzb2NfY3RsLnRyYW5zZmVyX2J1ZmZlcltpXSwgc2Jfc2l6ZSwKKwkJCQkgYXUwODI4X2lycV9jYWxsYmFjaywgZG1hX3EsIDEpOworCisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBtYXhfcGFja2V0czsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUCB8IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCisJCWsgPSAwOworCQlmb3IgKGogPSAwOyBqIDwgbWF4X3BhY2tldHM7IGorKykgeworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5vZmZzZXQgPSBrOworCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPQorCQkJCQkJZGV2LT5pc29jX2N0bC5tYXhfcGt0X3NpemU7CisJCQlrICs9IGRldi0+aXNvY19jdGwubWF4X3BrdF9zaXplOworCQl9CisJfQorCisJaW5pdF93YWl0cXVldWVfaGVhZCgmZG1hX3EtPndxKTsKKworCS8qIHN1Ym1pdCB1cmJzIGFuZCBlbmFibGVzIElSUSAqLworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmlzb2NfY3RsLm51bV9idWZzOyBpKyspIHsKKwkJcmMgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmlzb2NfY3RsLnVyYltpXSwgR0ZQX0FUT01JQyk7CisJCWlmIChyYykgeworCQkJYXUwODI4X2lzb2NkYmcoInN1Ym1pdCBvZiB1cmIgJWkgZmFpbGVkIChlcnJvcj0laSlcbiIsCisJCQkJICAgICAgIGksIHJjKTsKKwkJCWF1MDgyOF91bmluaXRfaXNvYyhkZXYpOworCQkJcmV0dXJuIHJjOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBbm5vdW5jZXMgdGhhdCBhIGJ1ZmZlciB3ZXJlIGZpbGxlZCBhbmQgcmVxdWVzdCB0aGUgbmV4dAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYnVmZmVyX2ZpbGxlZChzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LAorCQkJCSAgc3RydWN0IGF1MDgyOF9kbWFxdWV1ZSAqZG1hX3EsCisJCQkJICBzdHJ1Y3QgYXUwODI4X2J1ZmZlciAqYnVmKQoreworCS8qIEFkdmljZSB0aGF0IGJ1ZmZlciB3YXMgZmlsbGVkICovCisJYXUwODI4X2lzb2NkYmcoIlslcC8lZF0gd2FrZXVwXG4iLCBidWYsIGJ1Zi0+dmIuaSk7CisKKwlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfRE9ORTsKKwlidWYtPnZiLmZpZWxkX2NvdW50Kys7CisJZG9fZ2V0dGltZW9mZGF5KCZidWYtPnZiLnRzKTsKKworCWRldi0+aXNvY19jdGwuYnVmID0gTlVMTDsKKworCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKKwl3YWtlX3VwKCZidWYtPnZiLmRvbmUpOworfQorCisvKgorICogSWRlbnRpZnkgdGhlIGJ1ZmZlciBoZWFkZXIgdHlwZSBhbmQgcHJvcGVybHkgaGFuZGxlcworICovCitzdGF0aWMgdm9pZCBhdTA4MjhfY29weV92aWRlbyhzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LAorCQkJICAgICAgc3RydWN0IGF1MDgyOF9kbWFxdWV1ZSAgKmRtYV9xLAorCQkJICAgICAgc3RydWN0IGF1MDgyOF9idWZmZXIgKmJ1ZiwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKnAsCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwl2b2lkICpmaWVsZHN0YXJ0LCAqc3RhcnR3cml0ZSwgKnN0YXJ0cmVhZDsKKwlpbnQgIGxpbmVzZG9uZSwgY3VycmxpbmVkb25lLCBvZmZzZXQsIGxlbmNvcHksIHJlbWFpbjsKKwlpbnQgYnl0ZXNwZXJsaW5lID0gZGV2LT53aWR0aCA8PCAxOyAvKiBBc3N1bWVzIDE2LWJpdCBkZXB0aCBAQEBAICovCisKKwlpZiAoZG1hX3EtPnBvcyArIGxlbiA+IGJ1Zi0+dmIuc2l6ZSkKKwkJbGVuID0gYnVmLT52Yi5zaXplIC0gZG1hX3EtPnBvczsKKworCXN0YXJ0cmVhZCA9IHA7CisJcmVtYWluID0gbGVuOworCisJLyogSW50ZXJsYWNlcyBmcmFtZSAqLworCWlmIChidWYtPnRvcF9maWVsZCkKKwkJZmllbGRzdGFydCA9IG91dHA7CisJZWxzZQorCQlmaWVsZHN0YXJ0ID0gb3V0cCArIGJ5dGVzcGVybGluZTsKKworCWxpbmVzZG9uZSA9IGRtYV9xLT5wb3MgLyBieXRlc3BlcmxpbmU7CisJY3VycmxpbmVkb25lID0gZG1hX3EtPnBvcyAlIGJ5dGVzcGVybGluZTsKKwlvZmZzZXQgPSBsaW5lc2RvbmUgKiBieXRlc3BlcmxpbmUgKiAyICsgY3VycmxpbmVkb25lOworCXN0YXJ0d3JpdGUgPSBmaWVsZHN0YXJ0ICsgb2Zmc2V0OworCWxlbmNvcHkgPSBieXRlc3BlcmxpbmUgLSBjdXJybGluZWRvbmU7CisJbGVuY29weSA9IGxlbmNvcHkgPiByZW1haW4gPyByZW1haW4gOiBsZW5jb3B5OworCisJaWYgKChjaGFyICopc3RhcnR3cml0ZSArIGxlbmNvcHkgPiAoY2hhciAqKW91dHAgKyBidWYtPnZiLnNpemUpIHsKKwkJYXUwODI4X2lzb2NkYmcoIk92ZXJmbG93IG9mICV6aSBieXRlcyBwYXN0IGJ1ZmZlciBlbmQgKDEpXG4iLAorCQkJICAgICAgICgoY2hhciAqKXN0YXJ0d3JpdGUgKyBsZW5jb3B5KSAtCisJCQkgICAgICAgKChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSkpOworCQlyZW1haW4gPSAoY2hhciAqKW91dHAgKyBidWYtPnZiLnNpemUgLSAoY2hhciAqKXN0YXJ0d3JpdGU7CisJCWxlbmNvcHkgPSByZW1haW47CisJfQorCWlmIChsZW5jb3B5IDw9IDApCisJCXJldHVybjsKKwltZW1jcHkoc3RhcnR3cml0ZSwgc3RhcnRyZWFkLCBsZW5jb3B5KTsKKworCXJlbWFpbiAtPSBsZW5jb3B5OworCisJd2hpbGUgKHJlbWFpbiA+IDApIHsKKwkJc3RhcnR3cml0ZSArPSBsZW5jb3B5ICsgYnl0ZXNwZXJsaW5lOworCQlzdGFydHJlYWQgKz0gbGVuY29weTsKKwkJaWYgKGJ5dGVzcGVybGluZSA+IHJlbWFpbikKKwkJCWxlbmNvcHkgPSByZW1haW47CisJCWVsc2UKKwkJCWxlbmNvcHkgPSBieXRlc3BlcmxpbmU7CisKKwkJaWYgKChjaGFyICopc3RhcnR3cml0ZSArIGxlbmNvcHkgPiAoY2hhciAqKW91dHAgKworCQkgICAgYnVmLT52Yi5zaXplKSB7CisJCQlhdTA4MjhfaXNvY2RiZygiT3ZlcmZsb3cgJXppIGJ5dGVzIHBhc3QgYnVmIGVuZCAoMilcbiIsCisJCQkJICAgICAgICgoY2hhciAqKXN0YXJ0d3JpdGUgKyBsZW5jb3B5KSAtCisJCQkJICAgICAgICgoY2hhciAqKW91dHAgKyBidWYtPnZiLnNpemUpKTsKKwkJCWxlbmNvcHkgPSByZW1haW4gPSAoY2hhciAqKW91dHAgKyBidWYtPnZiLnNpemUgLQorCQkJCQkgICAoY2hhciAqKXN0YXJ0d3JpdGU7CisJCX0KKwkJaWYgKGxlbmNvcHkgPD0gMCkKKwkJCWJyZWFrOworCisJCW1lbWNweShzdGFydHdyaXRlLCBzdGFydHJlYWQsIGxlbmNvcHkpOworCisJCXJlbWFpbiAtPSBsZW5jb3B5OworCX0KKworCWlmIChvZmZzZXQgPiAxNDQwKSB7CisJCS8qIFdlIGhhdmUgZW5vdWdoIGRhdGEgdG8gY2hlY2sgZm9yIGdyZWVuc2NyZWVuICovCisJCWlmIChvdXRwWzBdIDwgMHg2MCAmJiBvdXRwWzE0NDBdIDwgMHg2MCkKKwkJCWRldi0+Z3JlZW5zY3JlZW5fZGV0ZWN0ZWQgPSAxOworCX0KKworCWRtYV9xLT5wb3MgKz0gbGVuOworfQorCisvKgorICogdmlkZW8tYnVmIGdlbmVyaWMgcm91dGluZSB0byBnZXQgdGhlIG5leHQgYXZhaWxhYmxlIGJ1ZmZlcgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25leHRfYnVmKHN0cnVjdCBhdTA4MjhfZG1hcXVldWUgKmRtYV9xLAorCQkJCXN0cnVjdCBhdTA4MjhfYnVmZmVyICoqYnVmKQoreworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBjb250YWluZXJfb2YoZG1hX3EsIHN0cnVjdCBhdTA4MjhfZGV2LCB2aWRxKTsKKworCWlmIChsaXN0X2VtcHR5KCZkbWFfcS0+YWN0aXZlKSkgeworCQlhdTA4MjhfaXNvY2RiZygiTm8gYWN0aXZlIHF1ZXVlIHRvIHNlcnZlXG4iKTsKKwkJZGV2LT5pc29jX2N0bC5idWYgPSBOVUxMOworCQkqYnVmID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCS8qIEdldCB0aGUgbmV4dCBidWZmZXIgKi8KKwkqYnVmID0gbGlzdF9lbnRyeShkbWFfcS0+YWN0aXZlLm5leHQsIHN0cnVjdCBhdTA4MjhfYnVmZmVyLCB2Yi5xdWV1ZSk7CisJZGV2LT5pc29jX2N0bC5idWYgPSAqYnVmOworCisJcmV0dXJuOworfQorCisvKgorICogQ29udHJvbHMgdGhlIGlzb2MgY29weSBvZiBlYWNoIHVyYiBwYWNrZXQKKyAqLworc3RhdGljIGlubGluZSBpbnQgYXUwODI4X2lzb2NfY29weShzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGF1MDgyOF9idWZmZXIgICAgKmJ1ZjsKKwlzdHJ1Y3QgYXUwODI4X2RtYXF1ZXVlICAqZG1hX3EgPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqb3V0cCA9IE5VTEw7CisJaW50IGksIGxlbiA9IDAsIHJjID0gMTsKKwl1bnNpZ25lZCBjaGFyICpwOworCXVuc2lnbmVkIGNoYXIgZmJ5dGU7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGRldi0+ZGV2X3N0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgfHwKKwkgICAgKGRldi0+ZGV2X3N0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpKQorCQlyZXR1cm4gMDsKKworCWlmICh1cmItPnN0YXR1cyA8IDApIHsKKwkJcHJpbnRfZXJyX3N0YXR1cyhkZXYsIC0xLCB1cmItPnN0YXR1cyk7CisJCWlmICh1cmItPnN0YXR1cyA9PSAtRU5PRU5UKQorCQkJcmV0dXJuIDA7CisJfQorCisJYnVmID0gZGV2LT5pc29jX2N0bC5idWY7CisJaWYgKGJ1ZiAhPSBOVUxMKQorCQlvdXRwID0gdmlkZW9idWZfdG9fdm1hbGxvYygmYnVmLT52Yik7CisKKwlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CisJCWludCBzdGF0dXMgPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1czsKKworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJcHJpbnRfZXJyX3N0YXR1cyhkZXYsIGksIHN0YXR1cyk7CisJCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgIT0gLUVQUk9UTykKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPD0gMCkKKwkJCWNvbnRpbnVlOworCisJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPgorCQkJCQkJZGV2LT5tYXhfcGt0X3NpemUpIHsKKwkJCWF1MDgyOF9pc29jZGJnKCJwYWNrZXQgYmlnZ2VyIHRoYW4gcGFja2V0IHNpemUiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQ7CisJCWZieXRlID0gcFswXTsKKwkJbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoIC0gNDsKKwkJcCArPSA0OworCisJCWlmIChmYnl0ZSAmIDB4ODApIHsKKwkJCWxlbiAtPSA0OworCQkJcCArPSA0OworCQkJYXUwODI4X2lzb2NkYmcoIlZpZGVvIGZyYW1lICVzXG4iLAorCQkJCSAgICAgICAoZmJ5dGUgJiAweDQwKSA/ICJvZGQiIDogImV2ZW4iKTsKKwkJCWlmICghKGZieXRlICYgMHg0MCkpIHsKKwkJCQlpZiAoYnVmICE9IE5VTEwpCisJCQkJCWJ1ZmZlcl9maWxsZWQoZGV2LCBkbWFfcSwgYnVmKTsKKwkJCQlnZXRfbmV4dF9idWYoZG1hX3EsICZidWYpOworCQkJCWlmIChidWYgPT0gTlVMTCkKKwkJCQkJb3V0cCA9IE5VTEw7CisJCQkJZWxzZQorCQkJCQlvdXRwID0gdmlkZW9idWZfdG9fdm1hbGxvYygmYnVmLT52Yik7CisJCQl9CisKKwkJCWlmIChidWYgIT0gTlVMTCkgeworCQkJCWlmIChmYnl0ZSAmIDB4NDApCisJCQkJCWJ1Zi0+dG9wX2ZpZWxkID0gMTsKKwkJCQllbHNlCisJCQkJCWJ1Zi0+dG9wX2ZpZWxkID0gMDsKKwkJCX0KKworCQkJZG1hX3EtPnBvcyA9IDA7CisJCX0KKwkJaWYgKGJ1ZiAhPSBOVUxMKQorCQkJYXUwODI4X2NvcHlfdmlkZW8oZGV2LCBkbWFfcSwgYnVmLCBwLCBvdXRwLCBsZW4pOworCX0KKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQKK2J1ZmZlcl9zZXR1cChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgKmNvdW50LAorCSAgICAgdW5zaWduZWQgaW50ICpzaXplKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKKwkqc2l6ZSA9IChmaC0+ZGV2LT53aWR0aCAqIGZoLT5kZXYtPmhlaWdodCAqIDE2ICsgNykgPj4gMzsKKworCWlmICgwID09ICpjb3VudCkKKwkJKmNvdW50ID0gQVUwODI4X0RFRl9CVUY7CisKKwlpZiAoKmNvdW50IDwgQVUwODI4X01JTl9CVUYpCisJCSpjb3VudCA9IEFVMDgyOF9NSU5fQlVGOworCXJldHVybiAwOworfQorCisvKiBUaGlzIGlzIGNhbGxlZCAqd2l0aG91dCogZGV2LT5zbG9jayBoZWxkOyBwbGVhc2Uga2VlcCBpdCB0aGF0IHdheSAqLworc3RhdGljIHZvaWQgZnJlZV9idWZmZXIoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IGF1MDgyOF9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICAgICAqZmggID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgYXUwODI4X2RldiAgICAqZGV2ID0gZmgtPmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwlpZiAoaW5faW50ZXJydXB0KCkpCisJCUJVRygpOworCisJLyogV2UgdXNlZCB0byB3YWl0IGZvciB0aGUgYnVmZmVyIHRvIGZpbmlzaCBoZXJlLCBidXQgdGhpcyBkaWRuJ3Qgd29yaworCSAgIGJlY2F1c2UsIGFzIHdlIHdlcmUga2VlcGluZyB0aGUgc3RhdGUgYXMgVklERU9CVUZfUVVFVUVELAorCSAgIHZpZGVvYnVmX3F1ZXVlX2NhbmNlbCBtYXJrZWQgaXQgYXMgZmluaXNoZWQgZm9yIHVzLgorCSAgIChBbHNvLCBpdCBjb3VsZCB3ZWRnZSBmb3JldmVyIGlmIHRoZSBoYXJkd2FyZSB3YXMgbWlzY29uZmlndXJlZC4pCisKKwkgICBUaGlzIHNob3VsZCBiZSBzYWZlOyBieSB0aGUgdGltZSB3ZSBnZXQgaGVyZSwgdGhlIGJ1ZmZlciBpc24ndAorCSAgIHF1ZXVlZCBhbnltb3JlLiBJZiB3ZSBldmVyIHN0YXJ0IG1hcmtpbmcgdGhlIGJ1ZmZlcnMgYXMKKwkgICBWSURFT0JVRl9BQ1RJVkUsIGl0IHdvbid0IGJlLCB0aG91Z2guCisJKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zbG9jaywgZmxhZ3MpOworCWlmIChkZXYtPmlzb2NfY3RsLmJ1ZiA9PSBidWYpCisJCWRldi0+aXNvY19jdGwuYnVmID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNsb2NrLCBmbGFncyk7CisKKwl2aWRlb2J1Zl92bWFsbG9jX2ZyZWUoJmJ1Zi0+dmIpOworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9ORUVEU19JTklUOworfQorCitzdGF0aWMgaW50CitidWZmZXJfcHJlcGFyZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKKwkJCQkJCWVudW0gdjRsMl9maWVsZCBmaWVsZCkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICAgICAqZmggID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgYXUwODI4X2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgYXUwODI4X2J1ZmZlciwgdmIpOworCXN0cnVjdCBhdTA4MjhfZGV2ICAgICpkZXYgPSBmaC0+ZGV2OworCWludCAgICAgICAgICAgICAgICAgIHJjID0gMCwgdXJiX2luaXQgPSAwOworCisJYnVmLT52Yi5zaXplID0gKGZoLT5kZXYtPndpZHRoICogZmgtPmRldi0+aGVpZ2h0ICogMTYgKyA3KSA+PiAzOworCisJaWYgKDAgIT0gYnVmLT52Yi5iYWRkciAgJiYgIGJ1Zi0+dmIuYnNpemUgPCBidWYtPnZiLnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJYnVmLT52Yi53aWR0aCAgPSBkZXYtPndpZHRoOworCWJ1Zi0+dmIuaGVpZ2h0ID0gZGV2LT5oZWlnaHQ7CisJYnVmLT52Yi5maWVsZCAgPSBmaWVsZDsKKworCWlmIChWSURFT0JVRl9ORUVEU19JTklUID09IGJ1Zi0+dmIuc3RhdGUpIHsKKwkJcmMgPSB2aWRlb2J1Zl9pb2xvY2sodnEsICZidWYtPnZiLCBOVUxMKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAidmlkZW9idWZfaW9sb2NrIGZhaWxlZFxuIik7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKKwlpZiAoIWRldi0+aXNvY19jdGwubnVtX2J1ZnMpCisJCXVyYl9pbml0ID0gMTsKKworCWlmICh1cmJfaW5pdCkgeworCQlyYyA9IGF1MDgyOF9pbml0X2lzb2MoZGV2LCBBVTA4MjhfSVNPX1BBQ0tFVFNfUEVSX1VSQiwKKwkJCQkgICAgICBBVTA4MjhfTUFYX0lTT19CVUZTLCBkZXYtPm1heF9wa3Rfc2l6ZSwKKwkJCQkgICAgICBhdTA4MjhfaXNvY19jb3B5KTsKKwkJaWYgKHJjIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiYXUwODI4X2luaXRfaXNvYyBmYWlsZWRcbiIpOworCQkJZ290byBmYWlsOworCQl9CisJfQorCisJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCXJldHVybiAwOworCitmYWlsOgorCWZyZWVfYnVmZmVyKHZxLCBidWYpOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQKK2J1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgYXUwODI4X2J1ZmZlciAgICAqYnVmICAgICA9IGNvbnRhaW5lcl9vZih2YiwKKwkJCQkJCQlzdHJ1Y3QgYXUwODI4X2J1ZmZlciwKKwkJCQkJCQl2Yik7CisJc3RydWN0IGF1MDgyOF9maCAgICAgICAgKmZoICAgICAgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBhdTA4MjhfZGV2ICAgICAgICpkZXYgICAgID0gZmgtPmRldjsKKwlzdHJ1Y3QgYXUwODI4X2RtYXF1ZXVlICAqdmlkcSAgICA9ICZkZXYtPnZpZHE7CisKKwlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZ2aWRxLT5hY3RpdmUpOworfQorCitzdGF0aWMgdm9pZCBidWZmZXJfcmVsZWFzZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLAorCQkJCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBhdTA4MjhfYnVmZmVyICAgKmJ1ZiAgPSBjb250YWluZXJfb2YodmIsCisJCQkJCQkgICAgc3RydWN0IGF1MDgyOF9idWZmZXIsCisJCQkJCQkgICAgdmIpOworCisJZnJlZV9idWZmZXIodnEsIGJ1Zik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIGF1MDgyOF92aWRlb19xb3BzID0geworCS5idWZfc2V0dXAgICAgICA9IGJ1ZmZlcl9zZXR1cCwKKwkuYnVmX3ByZXBhcmUgICAgPSBidWZmZXJfcHJlcGFyZSwKKwkuYnVmX3F1ZXVlICAgICAgPSBidWZmZXJfcXVldWUsCisJLmJ1Zl9yZWxlYXNlICAgID0gYnVmZmVyX3JlbGVhc2UsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFY0TDIgaW50ZXJmYWNlCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGF1MDgyOF9pMnNfaW5pdChzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KQoreworCS8qIEVuYWJsZSBpMnMgbW9kZSAqLworCWF1MDgyOF93cml0ZXJlZyhkZXYsIEFVMDgyOF9BVURJT0NUUkxfNTBDLCAweDAxKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEF1dml0ZWsgYXUwODI4IGFuYWxvZyBzdHJlYW0gZW5hYmxlCisgKiBQbGVhc2Ugc2V0IGludGVyZmFjZTAgdG8gQVM1IGJlZm9yZSBlbmFibGUgdGhlIHN0cmVhbQorICovCitpbnQgYXUwODI4X2FuYWxvZ19zdHJlYW1fZW5hYmxlKHN0cnVjdCBhdTA4MjhfZGV2ICpkKQoreworCWRwcmludGsoMSwgImF1MDgyOF9hbmFsb2dfc3RyZWFtX2VuYWJsZSBjYWxsZWRcbiIpOworCWF1MDgyOF93cml0ZXJlZyhkLCBBVTA4MjhfU0VOU09SQ1RSTF9WQklfMTAzLCAweDAwKTsKKwlhdTA4Mjhfd3JpdGVyZWcoZCwgMHgxMDYsIDB4MDApOworCS8qIHNldCB4IHBvc2l0aW9uICovCisJYXUwODI4X3dyaXRlcmVnKGQsIDB4MTEwLCAweDAwKTsKKwlhdTA4Mjhfd3JpdGVyZWcoZCwgMHgxMTEsIDB4MDApOworCWF1MDgyOF93cml0ZXJlZyhkLCAweDExNCwgMHhhMCk7CisJYXUwODI4X3dyaXRlcmVnKGQsIDB4MTE1LCAweDA1KTsKKwkvKiBzZXQgeSBwb3NpdGlvbiAqLworCWF1MDgyOF93cml0ZXJlZyhkLCAweDExMiwgMHgwMik7CisJYXUwODI4X3dyaXRlcmVnKGQsIDB4MTEzLCAweDAwKTsKKwlhdTA4Mjhfd3JpdGVyZWcoZCwgMHgxMTYsIDB4ZjIpOworCWF1MDgyOF93cml0ZXJlZyhkLCAweDExNywgMHgwMCk7CisJYXUwODI4X3dyaXRlcmVnKGQsIEFVMDgyOF9TRU5TT1JDVFJMXzEwMCwgMHhiMyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGF1MDgyOF9hbmFsb2dfc3RyZWFtX2Rpc2FibGUoc3RydWN0IGF1MDgyOF9kZXYgKmQpCit7CisJZHByaW50aygxLCAiYXUwODI4X2FuYWxvZ19zdHJlYW1fZGlzYWJsZSBjYWxsZWRcbiIpOworCWF1MDgyOF93cml0ZXJlZyhkLCBBVTA4MjhfU0VOU09SQ1RSTF8xMDAsIDB4MCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYXUwODI4X2FuYWxvZ19zdHJlYW1fcmVzZXQoc3RydWN0IGF1MDgyOF9kZXYgKmRldikKK3sKKwlkcHJpbnRrKDEsICJhdTA4MjhfYW5hbG9nX3N0cmVhbV9yZXNldCBjYWxsZWRcbiIpOworCWF1MDgyOF93cml0ZXJlZyhkZXYsIEFVMDgyOF9TRU5TT1JDVFJMXzEwMCwgMHgwKTsKKwltZGVsYXkoMzApOworCWF1MDgyOF93cml0ZXJlZyhkZXYsIEFVMDgyOF9TRU5TT1JDVFJMXzEwMCwgMHhiMyk7Cit9CisKKy8qCisgKiBTb21lIG9wZXJhdGlvbnMgbmVlZHMgdG8gc3RvcCBjdXJyZW50IHN0cmVhbWluZworICovCitzdGF0aWMgaW50IGF1MDgyOF9zdHJlYW1faW50ZXJydXB0KHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpCit7CisJaW50IHJldCA9IDA7CisKKwlkZXYtPnN0cmVhbV9zdGF0ZSA9IFNUUkVBTV9JTlRFUlJVUFQ7CisJaWYgKGRldi0+ZGV2X3N0YXRlID09IERFVl9ESVNDT05ORUNURUQpCisJCXJldHVybiAtRU5PREVWOworCWVsc2UgaWYgKHJldCkgeworCQlkZXYtPmRldl9zdGF0ZSA9IERFVl9NSVNDT05GSUdVUkVEOworCQlkcHJpbnRrKDEsICIlcyBkZXZpY2UgaXMgbWlzY29uZmlndXJlZCFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBhdTA4MjhfcmVsZWFzZV9yZXNvdXJjZXMKKyAqIHVucmVnaXN0ZXIgdjRsMiBkZXZpY2VzCisgKi8KK3ZvaWQgYXUwODI4X2FuYWxvZ191bnJlZ2lzdGVyKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpCit7CisJZHByaW50aygxLCAiYXUwODI4X3JlbGVhc2VfcmVzb3VyY2VzIGNhbGxlZFxuIik7CisJbXV0ZXhfbG9jaygmYXUwODI4X3N5c2ZzX2xvY2spOworCisJaWYgKGRldi0+dmRldikgeworCQlsaXN0X2RlbCgmZGV2LT5hdTA4MjhsaXN0KTsKKwkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZGV2KTsKKwl9CisJaWYgKGRldi0+dmJpX2RldikKKwkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52YmlfZGV2KTsKKworCW11dGV4X3VubG9jaygmYXUwODI4X3N5c2ZzX2xvY2spOworfQorCisKKy8qIFVzYWdlIGxvY2sgY2hlY2sgZnVuY3Rpb25zICovCitzdGF0aWMgaW50IHJlc19nZXQoc3RydWN0IGF1MDgyOF9maCAqZmgpCit7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50CQkgcmMgICA9IDA7CisKKwkvKiBUaGlzIGluc3RhbmNlIGFscmVhZHkgaGFzIHN0cmVhbV9vbiAqLworCWlmIChmaC0+c3RyZWFtX29uKQorCQlyZXR1cm4gcmM7CisKKwlpZiAoZGV2LT5zdHJlYW1fb24pCisJCXJldHVybiAtRUJVU1k7CisKKwlkZXYtPnN0cmVhbV9vbiA9IDE7CisJZmgtPnN0cmVhbV9vbiAgPSAxOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCByZXNfY2hlY2soc3RydWN0IGF1MDgyOF9maCAqZmgpCit7CisJcmV0dXJuIGZoLT5zdHJlYW1fb247Cit9CisKK3N0YXRpYyB2b2lkIHJlc19mcmVlKHN0cnVjdCBhdTA4MjhfZmggKmZoKQoreworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJZmgtPnN0cmVhbV9vbiA9IDA7CisJZGV2LT5zdHJlYW1fb24gPSAwOworfQorCitzdGF0aWMgaW50IGF1MDgyOF92NGwyX29wZW4oc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxwKS0+bWlub3I7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGF1MDgyOF9kZXYgKmgsICpkZXYgPSBOVUxMOworCXN0cnVjdCBhdTA4MjhfZmggKmZoOworCWludCB0eXBlID0gMDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCisJbGlzdF9mb3JfZWFjaChsaXN0LCAmYXUwODI4X2Rldmxpc3QpIHsKKwkJaCA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGF1MDgyOF9kZXYsIGF1MDgyOGxpc3QpOworCQlpZiAoaC0+dmRldi0+bWlub3IgPT0gbWlub3IpIHsKKwkJCWRldiA9IGg7CisJCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQl9CisjaWZkZWYgVkJJX0lTX1dPUktJTkcKKwkJaWYgKGgtPnZiaV9kZXYtPm1pbm9yID09IG1pbm9yKSB7CisJCQlkZXYgPSBoOworCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU7CisJCX0KKyNlbmRpZgorCX0KKworCWlmIChOVUxMID09IGRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlmaCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhdTA4MjhfZmgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBmaCkgeworCQlkcHJpbnRrKDEsICJGYWlsZWQgYWxsb2NhdGUgYXUwODI4X2ZoIHN0cnVjdCFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmaC0+dHlwZSA9IHR5cGU7CisJZmgtPmRldiA9IGRldjsKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBmaDsKKworCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgJiYgZGV2LT51c2VycyA9PSAwKSB7CisJCS8qIHNldCBhdTA4MjggaW50ZXJmYWNlMCB0byBBUzUgaGVyZSBhZ2FpbiAqLworCQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShkZXYtPnVzYmRldiwgMCwgNSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJBdTA4MjggY2FuJ3Qgc2V0IGFsdGVybmF0ZSB0byA1IVxuIik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCWRldi0+d2lkdGggPSBOVFNDX1NURF9XOworCQlkZXYtPmhlaWdodCA9IE5UU0NfU1REX0g7CisJCWRldi0+ZnJhbWVfc2l6ZSA9IGRldi0+d2lkdGggKiBkZXYtPmhlaWdodCAqIDI7CisJCWRldi0+ZmllbGRfc2l6ZSA9IGRldi0+d2lkdGggKiBkZXYtPmhlaWdodDsKKwkJZGV2LT5ieXRlc3BlcmxpbmUgPSBkZXYtPndpZHRoICogMjsKKworCQlhdTA4MjhfYW5hbG9nX3N0cmVhbV9lbmFibGUoZGV2KTsKKwkJYXUwODI4X2FuYWxvZ19zdHJlYW1fcmVzZXQoZGV2KTsKKworCQkvKiBJZiB3ZSB3ZXJlIGRvaW5nIGFjOTcgaW5zdGVhZCBvZiBpMnMsIGl0IHdvdWxkIGdvIGhlcmUuLi4qLworCQlhdTA4MjhfaTJzX2luaXQoZGV2KTsKKworCQlkZXYtPnN0cmVhbV9zdGF0ZSA9IFNUUkVBTV9PRkY7CisJCWRldi0+ZGV2X3N0YXRlIHw9IERFVl9JTklUSUFMSVpFRDsKKwl9CisKKwlkZXYtPnVzZXJzKys7CisKKwl2aWRlb2J1Zl9xdWV1ZV92bWFsbG9jX2luaXQoJmZoLT52Yl92aWRxLCAmYXUwODI4X3ZpZGVvX3FvcHMsCisJCQkJICAgIE5VTEwsICZkZXYtPnNsb2NrLCBmaC0+dHlwZSwKKwkJCQkgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkJCSAgICBzaXplb2Yoc3RydWN0IGF1MDgyOF9idWZmZXIpLCBmaCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF1MDgyOF92NGwyX2Nsb3NlKHN0cnVjdCBmaWxlICpmaWxwKQoreworCWludCByZXQ7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWlmIChyZXNfY2hlY2soZmgpKQorCQlyZXNfZnJlZShmaCk7CisKKwlpZiAoZGV2LT51c2VycyA9PSAxKSB7CisJCXZpZGVvYnVmX3N0b3AoJmZoLT52Yl92aWRxKTsKKwkJdmlkZW9idWZfbW1hcF9mcmVlKCZmaC0+dmJfdmlkcSk7CisKKwkJaWYgKGRldi0+ZGV2X3N0YXRlICYgREVWX0RJU0NPTk5FQ1RFRCkgeworCQkJYXUwODI4X2FuYWxvZ191bnJlZ2lzdGVyKGRldik7CisJCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCQlrZnJlZShkZXYpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlhdTA4MjhfYW5hbG9nX3N0cmVhbV9kaXNhYmxlKGRldik7CisKKwkJYXUwODI4X3VuaW5pdF9pc29jKGRldik7CisKKwkJLyogV2hlbiBjbG9zZSB0aGUgZGV2aWNlLCBzZXQgdGhlIHVzYiBpbnRmMCBpbnRvIGFsdDAgdG8gZnJlZQorCQkgICBVU0IgYmFuZHdpZHRoICovCisJCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKGRldi0+dXNiZGV2LCAwLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlwcmludGsoS0VSTl9JTkZPICJBdTA4MjggY2FuJ3Qgc2V0IGFsdGVybmF0ZSB0byAwIVxuIik7CisJfQorCisJa2ZyZWUoZmgpOworCWRldi0+dXNlcnMtLTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGVfbnIoJmRldi0+b3BlbiwgMSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBhdTA4MjhfdjRsMl9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IHJjOworCisJcmMgPSBjaGVja19kZXYoZGV2KTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJCXJjID0gcmVzX2dldChmaCk7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCQlpZiAodW5saWtlbHkocmMgPCAwKSkKKwkJCXJldHVybiByYzsKKworCQlyZXR1cm4gdmlkZW9idWZfcmVhZF9zdHJlYW0oJmZoLT52Yl92aWRxLCBidWYsIGNvdW50LCBwb3MsIDAsCisJCQkJCWZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXUwODI4X3Y0bDJfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgcmM7CisKKwlyYyA9IGNoZWNrX2RldihkZXYpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJcmMgPSByZXNfZ2V0KGZoKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKKwlpZiAodW5saWtlbHkocmMgPCAwKSkKKwkJcmV0dXJuIFBPTExFUlI7CisKKwlpZiAoVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICE9IGZoLT50eXBlKQorCQlyZXR1cm4gUE9MTEVSUjsKKworCXJldHVybiB2aWRlb2J1Zl9wb2xsX3N0cmVhbShmaWxwLCAmZmgtPnZiX3ZpZHEsIHdhaXQpOworfQorCitzdGF0aWMgaW50IGF1MDgyOF92NGwyX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoICAgID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgICA9IGZoLT5kZXY7CisJaW50CQkgcmM7CisKKwlyYyA9IGNoZWNrX2RldihkZXYpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJcmMgPSByZXNfZ2V0KGZoKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKKwlpZiAodW5saWtlbHkocmMgPCAwKSkKKwkJcmV0dXJuIHJjOworCisJcmMgPSB2aWRlb2J1Zl9tbWFwX21hcHBlcigmZmgtPnZiX3ZpZHEsIHZtYSk7CisKKwlkcHJpbnRrKDIsICJ2bWEgc3RhcnQ9MHglMDhseCwgc2l6ZT0lbGQsIHJldD0lZFxuIiwKKwkJKHVuc2lnbmVkIGxvbmcpdm1hLT52bV9zdGFydCwKKwkJKHVuc2lnbmVkIGxvbmcpdm1hLT52bV9lbmQtKHVuc2lnbmVkIGxvbmcpdm1hLT52bV9zdGFydCwKKwkJcmMpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGF1MDgyOF9zZXRfZm9ybWF0KHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm9ybWF0KQoreworCWludCByZXQ7CisJaW50IHdpZHRoID0gZm9ybWF0LT5mbXQucGl4LndpZHRoOworCWludCBoZWlnaHQgPSBmb3JtYXQtPmZtdC5waXguaGVpZ2h0OworCXVuc2lnbmVkIGludCBtYXh3aWR0aCwgbWF4aGVpZ2h0OworCisJbWF4d2lkdGggPSA3MjA7CisJbWF4aGVpZ2h0ID0gNDgwOworCisjaWZkZWYgVkJJX0lTX1dPUktJTkcKKwlpZiAoZm9ybWF0LT50eXBlID09IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFKSB7CisJCWRwcmludGsoMSwgIlZCSSBmb3JtYXQgc2V0OiB0byBiZSBzdXBwb3J0ZWQhXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChmb3JtYXQtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKKwkJcmV0dXJuIDA7CisjZW5kaWYKKwlpZiAoZm9ybWF0LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBJZiB0aGV5IGFyZSBkZW1hbmRpbmcgYSBmb3JtYXQgb3RoZXIgdGhhbiB0aGUgb25lIHdlIHN1cHBvcnQsCisJICAgYmFpbCBvdXQgKHR2dGltZSBhc2tzIGZvciBVWVZZIGFuZCB0aGVuIHJldHJpZXMgd2l0aCBZVVlWKSAqLworCWlmIChmb3JtYXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX1VZVlkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogZm9ybWF0LT5mbXQucGl4LndpZHRoIG9ubHkgc3VwcG9ydCA3MjAgYW5kIGhlaWdodCA0ODAgKi8KKwlpZiAod2lkdGggIT0gNzIwKQorCQl3aWR0aCA9IDcyMDsKKwlpZiAoaGVpZ2h0ICE9IDQ4MCkKKwkJaGVpZ2h0ID0gNDgwOworCisJZm9ybWF0LT5mbXQucGl4LndpZHRoID0gd2lkdGg7CisJZm9ybWF0LT5mbXQucGl4LmhlaWdodCA9IGhlaWdodDsKKwlmb3JtYXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfVVlWWTsKKwlmb3JtYXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gd2lkdGggKiAyOworCWZvcm1hdC0+Zm10LnBpeC5zaXplaW1hZ2UgPSB3aWR0aCAqIGhlaWdodCAqIDI7CisJZm9ybWF0LT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOworCWZvcm1hdC0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKworCWlmIChjbWQgPT0gVklESU9DX1RSWV9GTVQpCisJCXJldHVybiAwOworCisJLyogbWF5YmUgc2V0IG5ldyBpbWFnZSBmb3JtYXQsIGRyaXZlciBjdXJyZW50IG9ubHkgc3VwcG9ydCA3MjAqNDgwICovCisJZGV2LT53aWR0aCA9IHdpZHRoOworCWRldi0+aGVpZ2h0ID0gaGVpZ2h0OworCWRldi0+ZnJhbWVfc2l6ZSA9IHdpZHRoICogaGVpZ2h0ICogMjsKKwlkZXYtPmZpZWxkX3NpemUgPSB3aWR0aCAqIGhlaWdodDsKKwlkZXYtPmJ5dGVzcGVybGluZSA9IHdpZHRoICogMjsKKworCWlmIChkZXYtPnN0cmVhbV9zdGF0ZSA9PSBTVFJFQU1fT04pIHsKKwkJZHByaW50aygxLCAiVklESU9DX1NFVF9GTVQ6IGludGVycnVwdGluZyBzdHJlYW0hXG4iKTsKKwkJcmV0ID0gYXUwODI4X3N0cmVhbV9pbnRlcnJ1cHQoZGV2KTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkcHJpbnRrKDEsICJlcnJvciBpbnRlcnJ1cHRpbmcgdmlkZW8gc3RyZWFtIVxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJLyogc2V0IGF1MDgyOCBpbnRlcmZhY2UwIHRvIEFTNSBoZXJlIGFnYWluICovCisJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZGV2LT51c2JkZXYsIDAsIDUpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkF1MDgyOCBjYW4ndCBzZXQgYWx0IHNldHRpbmcgdG8gNSFcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWF1MDgyOF9hbmFsb2dfc3RyZWFtX2VuYWJsZShkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCBjb3JlLCBxdWVyeWN0cmwsIHFjKTsKKwlpZiAocWMtPnR5cGUpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwkJCSAgIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCAgPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJc3RybGNweShjYXAtPmRyaXZlciwgImF1MDgyOCIsIHNpemVvZihjYXAtPmRyaXZlcikpOworCXN0cmxjcHkoY2FwLT5jYXJkLCBkZXYtPmJvYXJkLm5hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKKwlzdHJsY3B5KGNhcC0+YnVzX2luZm8sIGRldi0+djRsMl9kZXYubmFtZSwgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKKworCWNhcC0+dmVyc2lvbiA9IEFVMDgyOF9WRVJTSU9OX0NPREU7CisKKwkvKnNldCB0aGUgZGV2aWNlIGNhcGFiaWxpdGllcyAqLworCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CisjaWZkZWYgVkJJX0lTX1dPUktJTkcKKwkJVjRMMl9DQVBfVkJJX0NBUFRVUkUgfAorI2VuZGlmCisJCVY0TDJfQ0FQX0FVRElPIHwKKwkJVjRMMl9DQVBfUkVBRFdSSVRFIHwKKwkJVjRMMl9DQVBfU1RSRUFNSU5HIHwKKwkJVjRMMl9DQVBfVFVORVI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQoreworCWlmIChmLT5pbmRleCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCXN0cmNweShmLT5kZXNjcmlwdGlvbiwgIlBhY2tlZCBZVVYyIik7CisKKwlmLT5mbGFncyA9IDA7CisJZi0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfVVlWWTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKworCWYtPmZtdC5waXgud2lkdGggPSBkZXYtPndpZHRoOworCWYtPmZtdC5waXguaGVpZ2h0ID0gZGV2LT5oZWlnaHQ7CisJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9VWVZZOworCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gZGV2LT5ieXRlc3BlcmxpbmU7CisJZi0+Zm10LnBpeC5zaXplaW1hZ2UgPSBkZXYtPmZyYW1lX3NpemU7CisJZi0+Zm10LnBpeC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsgLyogTlRTQy9QQUwgKi8KKwlmLT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKworCXJldHVybiBhdTA4Mjhfc2V0X2Zvcm1hdChkZXYsIFZJRElPQ19UUllfRk1ULCBmKTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgcmM7CisKKwlpZiAodmlkZW9idWZfcXVldWVfaXNfYnVzeSgmZmgtPnZiX3ZpZHEpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzIHF1ZXVlIGJ1c3lcbiIsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChkZXYtPnN0cmVhbV9vbiAmJiAhZmgtPnN0cmVhbV9vbikgeworCQlwcmludGsoS0VSTl9JTkZPICIlcyBkZXZpY2UgaW4gdXNlIGJ5IGFub3RoZXIgZmhcbiIsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCXJldHVybiBhdTA4Mjhfc2V0X2Zvcm1hdChkZXYsIFZJRElPQ19TX0ZNVCwgZik7CitvdXQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKiBub3JtKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKworCS8qIEZJWE1FOiB3aGVuIHdlIHN1cHBvcnQgc29tZXRoaW5nIG90aGVyIHRoYW4gTlRTQywgd2UgYXJlIGdvaW5nIHRvCisJICAgaGF2ZSB0byBtYWtlIHRoZSBhdTA4MjggYnJpZGdlIGFkanVzdCB0aGUgc2l6ZSBvZiBpdHMgY2FwdHVyZQorCSAgIGJ1ZmZlciwgd2hpY2ggaXMgY3VycmVudGx5IGhhcmRjb2RlZCBhdCA3MjB4NDgwICovCisKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgdHVuZXIsIHNfc3RkLCAqbm9ybSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfaW5wdXQgKmlucHV0KQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJc3RhdGljIGNvbnN0IGNoYXIgKmluYW1lc1tdID0geworCQlbQVUwODI4X1ZNVVhfVU5ERUZJTkVEXSA9ICJVbmRlZmluZWQiLAorCQlbQVUwODI4X1ZNVVhfQ09NUE9TSVRFXSA9ICJDb21wb3NpdGUiLAorCQlbQVUwODI4X1ZNVVhfU1ZJREVPXSA9ICJTLVZpZGVvIiwKKwkJW0FVMDgyOF9WTVVYX0NBQkxFXSA9ICJDYWJsZSBUViIsCisJCVtBVTA4MjhfVk1VWF9URUxFVklTSU9OXSA9ICJUZWxldmlzaW9uIiwKKwkJW0FVMDgyOF9WTVVYX0RWQl0gPSAiRFZCIiwKKwkJW0FVMDgyOF9WTVVYX0RFQlVHXSA9ICJ0diBkZWJ1ZyIKKwl9OworCisJdG1wID0gaW5wdXQtPmluZGV4OworCisJaWYgKHRtcCA+IEFVMDgyOF9NQVhfSU5QVVQpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChBVVZJX0lOUFVUKHRtcCkudHlwZSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlucHV0LT5pbmRleCA9IHRtcDsKKwlzdHJjcHkoaW5wdXQtPm5hbWUsIGluYW1lc1tBVVZJX0lOUFVUKHRtcCkudHlwZV0pOworCWlmICgoQVVWSV9JTlBVVCh0bXApLnR5cGUgPT0gQVUwODI4X1ZNVVhfVEVMRVZJU0lPTikgfHwKKwkgICAgKEFVVklfSU5QVVQodG1wKS50eXBlID09IEFVMDgyOF9WTVVYX0NBQkxFKSkKKwkJaW5wdXQtPnR5cGUgfD0gVjRMMl9JTlBVVF9UWVBFX1RVTkVSOworCWVsc2UKKwkJaW5wdXQtPnR5cGUgfD0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKKworCWlucHV0LT5zdGQgPSBkZXYtPnZkZXYtPnR2bm9ybXM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwkqaSA9IGRldi0+Y3RybF9pbnB1dDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGluZGV4KQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgaTsKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCisJZHByaW50aygxLCAiVklESU9DX1NfSU5QVVQgaW4gZnVuY3Rpb24gJXMsIGlucHV0PSVkXG4iLCBfX2Z1bmNfXywKKwkJaW5kZXgpOworCWlmIChpbmRleCA+PSBBVTA4MjhfTUFYX0lOUFVUKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoQVVWSV9JTlBVVChpbmRleCkudHlwZSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkZXYtPmN0cmxfaW5wdXQgPSBpbmRleDsKKworCXN3aXRjaCAoQVVWSV9JTlBVVChpbmRleCkudHlwZSkgeworCWNhc2UgQVUwODI4X1ZNVVhfU1ZJREVPOgorCQlkZXYtPmlucHV0X3R5cGUgPSBBVTA4MjhfVk1VWF9TVklERU87CisJCWJyZWFrOworCWNhc2UgQVUwODI4X1ZNVVhfQ09NUE9TSVRFOgorCQlkZXYtPmlucHV0X3R5cGUgPSBBVTA4MjhfVk1VWF9DT01QT1NJVEU7CisJCWJyZWFrOworCWNhc2UgQVUwODI4X1ZNVVhfVEVMRVZJU0lPTjoKKwkJZGV2LT5pbnB1dF90eXBlID0gQVUwODI4X1ZNVVhfVEVMRVZJU0lPTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHByaW50aygxLCAiVklESU9DX1NfSU5QVVQgdW5rbm93biBpbnB1dCB0eXBlIHNldCBbJWRdXG4iLAorCQkJQVVWSV9JTlBVVChpbmRleCkudHlwZSk7CisJCWJyZWFrOworCX0KKworCXJvdXRlLmlucHV0ID0gQVVWSV9JTlBVVChpbmRleCkudm11eDsKKwlyb3V0ZS5vdXRwdXQgPSAwOworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOworCisJZm9yIChpID0gMDsgaSA8IEFVMDgyOF9NQVhfSU5QVVQ7IGkrKykgeworCQlpbnQgZW5hYmxlID0gMDsKKwkJaWYgKEFVVklfSU5QVVQoaSkuYXVkaW9fc2V0dXAgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpID09IGluZGV4KQorCQkJZW5hYmxlID0gMTsKKwkJZWxzZQorCQkJZW5hYmxlID0gMDsKKwkJaWYgKGVuYWJsZSkgeworCQkJKEFVVklfSU5QVVQoaSkuYXVkaW9fc2V0dXApKGRldiwgZW5hYmxlKTsKKwkJfSBlbHNlIHsKKwkJCS8qIE1ha2Ugc3VyZSB3ZSBsZWF2ZSBpdCB0dXJuZWQgb24gaWYgc29tZQorCQkJICAgb3RoZXIgaW5wdXQgaXMgcm91dGVkIHRvIHRoaXMgY2FsbGJhY2sgKi8KKwkJCWlmICgoQVVWSV9JTlBVVChpKS5hdWRpb19zZXR1cCkgIT0KKwkJCSAgICAoKEFVVklfSU5QVVQoaW5kZXgpLmF1ZGlvX3NldHVwKSkpIHsKKwkJCQkoQVVWSV9JTlBVVChpKS5hdWRpb19zZXR1cCkoZGV2LCBlbmFibGUpOworCQkJfQorCQl9CisJfQorCisJcm91dGUuaW5wdXQgPSBBVVZJX0lOUFVUKGluZGV4KS5hbXV4OworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCBhdWRpbywgc19yb3V0aW5nLCAmcm91dGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJdW5zaWduZWQgaW50IGluZGV4ID0gYS0+aW5kZXg7CisKKwlpZiAoYS0+aW5kZXggPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWluZGV4ID0gZGV2LT5jdHJsX2FpbnB1dDsKKwlpZiAoaW5kZXggPT0gMCkKKwkJc3RyY3B5KGEtPm5hbWUsICJUZWxldmlzaW9uIik7CisJZWxzZQorCQlzdHJjcHkoYS0+bmFtZSwgIkxpbmUgaW4iKTsKKworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CisJYS0+aW5kZXggPSBpbmRleDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWlmIChhLT5pbmRleCAhPSBkZXYtPmN0cmxfYWlucHV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIGNvcmUsIGdfY3RybCwgY3RybCk7CisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCBjb3JlLCBzX2N0cmwsIGN0cmwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl90dW5lciAqdCkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlpZiAodC0+aW5kZXggIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdHJjcHkodC0+bmFtZSwgIkF1dml0ZWsgdHVuZXIiKTsKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgdHVuZXIsIGdfdHVuZXIsIHQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp0KQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKworCWlmICh0LT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXQtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgdHVuZXIsIHNfdHVuZXIsIHQpOworCWRwcmludGsoMSwgIlZJRElPQ19TX1RVTkVSOiBzaWduYWwgPSAleCwgYWZjID0gJXhcbiIsIHQtPnNpZ25hbCwKKwkJdC0+YWZjKTsKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmZyZXEpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJZnJlcS0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCWZyZXEtPmZyZXF1ZW5jeSA9IGRldi0+Y3RybF9mcmVxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmZyZXEpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJaWYgKGZyZXEtPnR1bmVyICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmIChmcmVxLT50eXBlICE9IFY0TDJfVFVORVJfQU5BTE9HX1RWKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRldi0+Y3RybF9mcmVxID0gZnJlcS0+ZnJlcXVlbmN5OworCisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgZnJlcSk7CisKKwlhdTA4MjhfYW5hbG9nX3N0cmVhbV9yZXNldChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY2hpcF9pZGVudChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkgICAgICAgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWNoaXAtPmlkZW50ID0gVjRMMl9JREVOVF9OT05FOworCWNoaXAtPnJldmlzaW9uID0gMDsKKworCWlmICh2NGwyX2NoaXBfbWF0Y2hfaG9zdCgmY2hpcC0+bWF0Y2gpKSB7CisJCWNoaXAtPmlkZW50ID0gVjRMMl9JREVOVF9BVTA4Mjg7CisJCXJldHVybiAwOworCX0KKworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCBjb3JlLCBnX2NoaXBfaWRlbnQsIGNoaXApOworCWlmIChjaGlwLT5pZGVudCA9PSBWNEwyX0lERU5UX05PTkUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2Nyb3BjYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgIHN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNjKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKworCWlmIChjYy0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCisJY2MtPmJvdW5kcy5sZWZ0ID0gMDsKKwljYy0+Ym91bmRzLnRvcCA9IDA7CisJY2MtPmJvdW5kcy53aWR0aCA9IGRldi0+d2lkdGg7CisJY2MtPmJvdW5kcy5oZWlnaHQgPSBkZXYtPmhlaWdodDsKKworCWNjLT5kZWZyZWN0ID0gY2MtPmJvdW5kczsKKworCWNjLT5waXhlbGFzcGVjdC5udW1lcmF0b3IgPSA1NDsKKwljYy0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IgPSA1OTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgcmM7CisKKwlyYyA9IGNoZWNrX2RldihkZXYpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCWlmICh0eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQlhdTA4MjhfYW5hbG9nX3N0cmVhbV9lbmFibGUoZGV2KTsKKwkJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIHZpZGVvLCBzX3N0cmVhbSwgMSk7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlyYyA9IHJlc19nZXQoZmgpOworCisJaWYgKGxpa2VseShyYyA+PSAwKSkKKwkJcmMgPSB2aWRlb2J1Zl9zdHJlYW1vbigmZmgtPnZiX3ZpZHEpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgaTsKKwlpbnQgcmV0OworCWludCByYzsKKworCXJjID0gY2hlY2tfZGV2KGRldik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJaWYgKGZoLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHR5cGUgIT0gZmgtPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCB2aWRlbywgc19zdHJlYW0sIDApOworCQlyZXQgPSBhdTA4Mjhfc3RyZWFtX2ludGVycnVwdChkZXYpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBVTA4MjhfTUFYX0lOUFVUOyBpKyspIHsKKwkJaWYgKEFVVklfSU5QVVQoaSkuYXVkaW9fc2V0dXAgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQkoQVVWSV9JTlBVVChpKS5hdWRpb19zZXR1cCkoZGV2LCAwKTsKKwl9CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCXZpZGVvYnVmX3N0cmVhbW9mZigmZmgtPnZiX3ZpZHEpOworCXJlc19mcmVlKGZoKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK3N0YXRpYyBpbnQgdmlkaW9jX2dfcmVnaXN0ZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKworCXN3aXRjaCAocmVnLT5tYXRjaC50eXBlKSB7CisJY2FzZSBWNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUjoKKwkJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIGNvcmUsIGdfcmVnaXN0ZXIsIHJlZyk7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGludCB2aWRpb2Nfc19yZWdpc3RlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJc3dpdGNoIChyZWctPm1hdGNoLnR5cGUpIHsKKwljYXNlIFY0TDJfQ0hJUF9NQVRDSF9JMkNfRFJJVkVSOgorCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgY29yZSwgc19yZWdpc3RlciwgcmVnKTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgdmlkaW9jX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyYikKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IHJjOworCisJcmMgPSBjaGVja19kZXYoZGV2KTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gdmlkZW9idWZfcmVxYnVmcygmZmgtPnZiX3ZpZHEsIHJiKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCByYzsKKworCXJjID0gY2hlY2tfZGV2KGRldik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIHZpZGVvYnVmX3F1ZXJ5YnVmKCZmaC0+dmJfdmlkcSwgYik7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IHJjOworCisJcmMgPSBjaGVja19kZXYoZGV2KTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gdmlkZW9idWZfcWJ1ZigmZmgtPnZiX3ZpZHEsIGIpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpiKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgcmM7CisKKwlyYyA9IGNoZWNrX2RldihkZXYpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCS8qIFdvcmthcm91bmQgZm9yIGEgYnVnIGluIHRoZSBhdTA4MjggaGFyZHdhcmUgZGVzaWduIHRoYXQgc29tZXRpbWVzCisJICAgcmVzdWx0cyBpbiB0aGUgY29sb3JzcGFjZSBiZWluZyBpbnZlcnRlZCAqLworCWlmIChkZXYtPmdyZWVuc2NyZWVuX2RldGVjdGVkID09IDEpIHsKKwkJZHByaW50aygxLCAiRGV0ZWN0ZWQgZ3JlZW4gZnJhbWUuICBSZXNldHRpbmcgc3RyZWFtLi4uXG4iKTsKKwkJYXUwODI4X2FuYWxvZ19zdHJlYW1fcmVzZXQoZGV2KTsKKwkJZGV2LT5ncmVlbnNjcmVlbl9kZXRlY3RlZCA9IDA7CisJfQorCisJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKCZmaC0+dmJfdmlkcSwgYiwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworfQorCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCitzdGF0aWMgaW50IHZpZGlvY2dtYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1ZikKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisKKwlyZXR1cm4gdmlkZW9idWZfY2dtYnVmKCZmaC0+dmJfdmlkcSwgbWJ1ZiwgOCk7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBhdTA4MjhfdjRsX2ZvcHMgPSB7CisJLm93bmVyICAgICAgPSBUSElTX01PRFVMRSwKKwkub3BlbiAgICAgICA9IGF1MDgyOF92NGwyX29wZW4sCisJLnJlbGVhc2UgICAgPSBhdTA4MjhfdjRsMl9jbG9zZSwKKwkucmVhZCAgICAgICA9IGF1MDgyOF92NGwyX3JlYWQsCisJLnBvbGwgICAgICAgPSBhdTA4MjhfdjRsMl9wb2xsLAorCS5tbWFwICAgICAgID0gYXUwODI4X3Y0bDJfbW1hcCwKKwkuaW9jdGwgICAgICA9IHZpZGVvX2lvY3RsMiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdmlkZW9faW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAgICAgICAgICAgICA9IHZpZGlvY19xdWVyeWNhcCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgICAgPSB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAgICAgICAgPSB2aWRpb2NfZ19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCAgICAgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCAgICAgICA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAorI2lmZGVmIFZCSV9JU19XT1JLSU5HCisJLnZpZGlvY19nX2ZtdF92YmlfY2FwICAgICAgID0gdmlkaW9jX2dfZm10X3ZiaV9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZiaV9jYXAgICAgID0gdmlkaW9jX3NfZm10X3ZiaV9jYXAsCisJLnZpZGlvY19zX2ZtdF92YmlfY2FwICAgICAgID0gdmlkaW9jX3NfZm10X3ZiaV9jYXAsCisjZW5kaWYKKwkudmlkaW9jX2dfYXVkaW8gICAgICAgICAgICAgPSB2aWRpb2NfZ19hdWRpbywKKwkudmlkaW9jX3NfYXVkaW8gICAgICAgICAgICAgPSB2aWRpb2Nfc19hdWRpbywKKwkudmlkaW9jX2Nyb3BjYXAgICAgICAgICAgICAgPSB2aWRpb2NfY3JvcGNhcCwKKyNpZmRlZiBWQklfSVNfV09SS0lORworCS52aWRpb2NfZ19mbXRfc2xpY2VkX3ZiaV9jYXAgICA9IHZpZGlvY19nX2ZtdF9zbGljZWRfdmJpX2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfc2xpY2VkX3ZiaV9jYXAgPSB2aWRpb2NfdHJ5X3NldF9zbGljZWRfdmJpX2NhcCwKKwkudmlkaW9jX3NfZm10X3NsaWNlZF92YmlfY2FwICAgPSB2aWRpb2NfdHJ5X3NldF9zbGljZWRfdmJpX2NhcCwKKyNlbmRpZgorCS52aWRpb2NfcmVxYnVmcyAgICAgICAgICAgICA9IHZpZGlvY19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYgICAgICAgICAgICA9IHZpZGlvY19xdWVyeWJ1ZiwKKwkudmlkaW9jX3FidWYgICAgICAgICAgICAgICAgPSB2aWRpb2NfcWJ1ZiwKKwkudmlkaW9jX2RxYnVmICAgICAgICAgICAgICAgPSB2aWRpb2NfZHFidWYsCisJLnZpZGlvY19zX3N0ZCAgICAgICAgICAgICAgID0gdmlkaW9jX3Nfc3RkLAorCS52aWRpb2NfZW51bV9pbnB1dCAgICAgICAgICA9IHZpZGlvY19lbnVtX2lucHV0LAorCS52aWRpb2NfZ19pbnB1dCAgICAgICAgICAgICA9IHZpZGlvY19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dCAgICAgICAgICAgICA9IHZpZGlvY19zX2lucHV0LAorCS52aWRpb2NfcXVlcnljdHJsICAgICAgICAgICA9IHZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19nX2N0cmwgICAgICAgICAgICAgID0gdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCAgICAgICAgICAgICAgPSB2aWRpb2Nfc19jdHJsLAorCS52aWRpb2Nfc3RyZWFtb24gICAgICAgICAgICA9IHZpZGlvY19zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZiAgICAgICAgICAgPSB2aWRpb2Nfc3RyZWFtb2ZmLAorCS52aWRpb2NfZ190dW5lciAgICAgICAgICAgICA9IHZpZGlvY19nX3R1bmVyLAorCS52aWRpb2Nfc190dW5lciAgICAgICAgICAgICA9IHZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19mcmVxdWVuY3kgICAgICAgICA9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3NfZnJlcXVlbmN5ICAgICAgICAgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS52aWRpb2NfZ19yZWdpc3RlciAgICAgICAgICA9IHZpZGlvY19nX3JlZ2lzdGVyLAorCS52aWRpb2Nfc19yZWdpc3RlciAgICAgICAgICA9IHZpZGlvY19zX3JlZ2lzdGVyLAorI2VuZGlmCisJLnZpZGlvY19nX2NoaXBfaWRlbnQgICAgICAgID0gdmlkaW9jX2dfY2hpcF9pZGVudCwKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKKwkudmlkaW9jZ21idWYgICAgICAgICAgICAgICAgPSB2aWRpb2NnbWJ1ZiwKKyNlbmRpZgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19kZXZpY2UgYXUwODI4X3ZpZGVvX3RlbXBsYXRlID0geworCS5mb3BzICAgICAgICAgICAgICAgICAgICAgICA9ICZhdTA4MjhfdjRsX2ZvcHMsCisJLnJlbGVhc2UgICAgICAgICAgICAgICAgICAgID0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCisJLmlvY3RsX29wcyAJCSAgICA9ICZ2aWRlb19pb2N0bF9vcHMsCisJLm1pbm9yICAgICAgICAgICAgICAgICAgICAgID0gLTEsCisJLnR2bm9ybXMgICAgICAgICAgICAgICAgICAgID0gVjRMMl9TVERfTlRTQ19NLAorCS5jdXJyZW50X25vcm0gICAgICAgICAgICAgICA9IFY0TDJfU1REX05UU0NfTSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGF1MDgyOF9hbmFsb2dfcmVnaXN0ZXIoc3RydWN0IGF1MDgyOF9kZXYgKmRldiwKKwkJCSAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCWludCBpOworCisJZHByaW50aygxLCAiYXUwODI4X2FuYWxvZ19yZWdpc3RlciBjYWxsZWQhXG4iKTsKKworCS8qIHNldCBhdTA4MjggdXNiIGludGVyZmFjZTAgdG8gYXM1ICovCisJcmV0dmFsID0gdXNiX3NldF9pbnRlcmZhY2UoZGV2LT51c2JkZXYsCisJCQlpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIDUpOworCWlmIChyZXR2YWwgIT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJGYWlsdXJlIHNldHRpbmcgdXNiIGludGVyZmFjZTAgdG8gYXM1XG4iKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvKiBGaWd1cmUgb3V0IHdoaWNoIGVuZHBvaW50IGhhcyB0aGUgaXNvYyBpbnRlcmZhY2UgKi8KKwlpZmFjZV9kZXNjID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKwlmb3IgKGkgPSAwOyBpIDwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKyspIHsKKwkJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKKwkJaWYgKCgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spCisJCSAgICAgPT0gVVNCX0RJUl9JTikgJiYKKwkJICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQorCQkgICAgID09IFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpKSB7CisKKwkJCS8qIHdlIGZpbmQgb3VyIGlzb2MgaW4gZW5kcG9pbnQgKi8KKwkJCXUxNiB0bXAgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOworCQkJZGV2LT5tYXhfcGt0X3NpemUgPSAodG1wICYgMHgwN2ZmKSAqCisJCQkJKCgodG1wICYgMHgxODAwKSA+PiAxMSkgKyAxKTsKKwkJCWRldi0+aXNvY19pbl9lbmRwb2ludGFkZHIgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJfQorCX0KKwlpZiAoIShkZXYtPmlzb2NfaW5fZW5kcG9pbnRhZGRyKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJDb3VsZCBub3QgbG9jYXRlIGlzb2MgZW5kcG9pbnRcbiIpOworCQlrZnJlZShkZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPm9wZW4pOworCXNwaW5fbG9ja19pbml0KCZkZXYtPnNsb2NrKTsKKwltdXRleF9pbml0KCZkZXYtPmxvY2spOworCisJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkcS5hY3RpdmUpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZpZHEucXVldWVkKTsKKworCWRldi0+d2lkdGggPSBOVFNDX1NURF9XOworCWRldi0+aGVpZ2h0ID0gTlRTQ19TVERfSDsKKwlkZXYtPmZpZWxkX3NpemUgPSBkZXYtPndpZHRoICogZGV2LT5oZWlnaHQ7CisJZGV2LT5mcmFtZV9zaXplID0gZGV2LT5maWVsZF9zaXplIDw8IDE7CisJZGV2LT5ieXRlc3BlcmxpbmUgPSBkZXYtPndpZHRoIDw8IDE7CisJZGV2LT5jdHJsX2FpbnB1dCA9IDA7CisKKwkvKiBhbGxvY2F0ZSBhbmQgZmlsbCB2NGwyIHZpZGVvIHN0cnVjdCAqLworCWRldi0+dmRldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmIChOVUxMID09IGRldi0+dmRldikgeworCQlkcHJpbnRrKDEsICJDYW4ndCBhbGxvY2F0ZSB2aWRlb19kZXZpY2UuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisjaWZkZWYgVkJJX0lTX1dPUktJTkcKKwlkZXYtPnZiaV9kZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAoTlVMTCA9PSBkZXYtPnZiaV9kZXYpIHsKKwkJZHByaW50aygxLCAiQ2FuJ3QgYWxsb2NhdGUgdmJpX2RldmljZS5cbiIpOworCQlrZnJlZShkZXYtPnZkZXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisjZW5kaWYKKworCS8qIEZpbGwgdGhlIHZpZGVvIGNhcHR1cmUgZGV2aWNlIHN0cnVjdCAqLworCSpkZXYtPnZkZXYgPSBhdTA4MjhfdmlkZW9fdGVtcGxhdGU7CisJZGV2LT52ZGV2LT5wYXJlbnQgPSAmZGV2LT51c2JkZXYtPmRldjsKKwlzdHJjcHkoZGV2LT52ZGV2LT5uYW1lLCAiYXUwODI4YSB2aWRlbyIpOworCisjaWZkZWYgVkJJX0lTX1dPUktJTkcKKwkvKiBTZXR1cCB0aGUgVkJJIGRldmljZSAqLworCSpkZXYtPnZiaV9kZXYgPSBhdTA4MjhfdmlkZW9fdGVtcGxhdGU7CisJZGV2LT52YmlfZGV2LT5wYXJlbnQgPSAmZGV2LT51c2JkZXYtPmRldjsKKwlzdHJjcHkoZGV2LT52YmlfZGV2LT5uYW1lLCAiYXUwODI4YSB2YmkiKTsKKyNlbmRpZgorCisJbGlzdF9hZGRfdGFpbCgmZGV2LT5hdTA4MjhsaXN0LCAmYXUwODI4X2Rldmxpc3QpOworCisJLyogUmVnaXN0ZXIgdGhlIHY0bDIgZGV2aWNlICovCisJcmV0dmFsID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGRldi0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOworCWlmIChyZXR2YWwgIT0gMCkgeworCQlkcHJpbnRrKDEsICJ1bmFibGUgdG8gcmVnaXN0ZXIgdmlkZW8gZGV2aWNlIChlcnJvciA9ICVkKS5cbiIsCisJCQlyZXR2YWwpOworCQlsaXN0X2RlbCgmZGV2LT5hdTA4MjhsaXN0KTsKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT52ZGV2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisjaWZkZWYgVkJJX0lTX1dPUktJTkcKKwkvKiBSZWdpc3RlciB0aGUgdmJpIGRldmljZSAqLworCXJldHZhbCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShkZXYtPnZiaV9kZXYsIFZGTF9UWVBFX1ZCSSwgLTEpOworCWlmIChyZXR2YWwgIT0gMCkgeworCQlkcHJpbnRrKDEsICJ1bmFibGUgdG8gcmVnaXN0ZXIgdmJpIGRldmljZSAoZXJyb3IgPSAlZCkuXG4iLAorCQkJcmV0dmFsKTsKKwkJbGlzdF9kZWwoJmRldi0+YXUwODI4bGlzdCk7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmJpX2Rldik7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmRldik7CisJCXJldHVybiAtRU5PREVWOworCX0KKyNlbmRpZgorCisJZHByaW50aygxLCAiJXMgY29tcGxldGVkIVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LmgKaW5kZXggOWQ2YTExNi4uNmVkMWE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LmgKQEAgLTI0LDYgKzI0LDExIEBACiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdHZlZXByb20uaD4KIAorLyogQW5hbG9nICovCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtdm1hbGxvYy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisKIC8qIERWQiAqLwogI2luY2x1ZGUgImRlbXV4LmgiCiAjaW5jbHVkZSAiZG14ZGV2LmgiCkBAIC0zOSw4ICs0NCw0NSBAQAogI2RlZmluZSBVUkJfQ09VTlQgICAxNgogI2RlZmluZSBVUkJfQlVGU0laRSAoMHhlNTIyKQogCisvKiBBbmFsb2cgY29uc3RhbnRzICovCisjZGVmaW5lIE5UU0NfU1REX1cgICAgICA3MjAKKyNkZWZpbmUgTlRTQ19TVERfSCAgICAgIDQ4MAorCisjZGVmaW5lIEFVMDgyOF9JTlRFUkxBQ0VEX0RFRkFVTFQgICAgICAgMQorI2RlZmluZSBWNEwyX0NJRF9QUklWQVRFX1NIQVJQTkVTUyAgKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDApCisKKy8qIERlZmluYXRpb24gZm9yIEFVMDgyOCBVU0IgdHJhbnNmZXIgKi8KKyNkZWZpbmUgQVUwODI4X01BWF9JU09fQlVGUyAgICAxMiAgLyogbWF5YmUgcmVzaXplIHRoaXMgdmFsdWUgaW4gdGhlIGZ1dHVyZSAqLworI2RlZmluZSBBVTA4MjhfSVNPX1BBQ0tFVFNfUEVSX1VSQiAgICAgIDEwCisKKyNkZWZpbmUgQVUwODI4X01JTl9CVUYgNAorI2RlZmluZSBBVTA4MjhfREVGX0JVRiA4CisKKyNkZWZpbmUgQVUwODI4X01BWF9JTlBVVCAgICAgICAgNAorCitlbnVtIGF1MDgyOF9pdHlwZSB7CisJQVUwODI4X1ZNVVhfVU5ERUZJTkVEID0gMCwKKwlBVTA4MjhfVk1VWF9DT01QT1NJVEUsCisJQVUwODI4X1ZNVVhfU1ZJREVPLAorCUFVMDgyOF9WTVVYX0NBQkxFLAorCUFVMDgyOF9WTVVYX1RFTEVWSVNJT04sCisJQVUwODI4X1ZNVVhfRFZCLAorCUFVMDgyOF9WTVVYX0RFQlVHCit9OworCitzdHJ1Y3QgYXUwODI4X2lucHV0IHsKKwllbnVtIGF1MDgyOF9pdHlwZSB0eXBlOworCXVuc2lnbmVkIGludCB2bXV4OworCXVuc2lnbmVkIGludCBhbXV4OworCXZvaWQgKCphdWRpb19zZXR1cCkgKHZvaWQgKnByaXYsIGludCBlbmFibGUpOworfTsKKwogc3RydWN0IGF1MDgyOF9ib2FyZCB7CiAJY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgdHVuZXJfdHlwZTsKKwl1bnNpZ25lZCBjaGFyIHR1bmVyX2FkZHI7CisJc3RydWN0IGF1MDgyOF9pbnB1dCBpbnB1dFtBVTA4MjhfTUFYX0lOUFVUXTsKKwogfTsKIAogc3RydWN0IGF1MDgyOF9kdmIgewpAQCAtNTUsMzEgKzk3LDE0MyBAQAogCWludCBmZWVkaW5nOwogfTsKIAorZW51bSBhdTA4Mjhfc3RyZWFtX3N0YXRlIHsKKwlTVFJFQU1fT0ZGLAorCVNUUkVBTV9JTlRFUlJVUFQsCisJU1RSRUFNX09OCit9OworCisjZGVmaW5lIEFVVklfSU5QVVQobnIpIChkZXYtPmJvYXJkLmlucHV0W25yXSkKKworLyogZGV2aWNlIHN0YXRlICovCitlbnVtIGF1MDgyOF9kZXZfc3RhdGUgeworCURFVl9JTklUSUFMSVpFRCA9IDB4MDEsCisJREVWX0RJU0NPTk5FQ1RFRCA9IDB4MDIsCisJREVWX01JU0NPTkZJR1VSRUQgPSAweDA0Cit9OworCitzdHJ1Y3QgYXUwODI4X2ZoIHsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2OworCXVuc2lnbmVkIGludCAgc3RyZWFtX29uOjE7CS8qIExvY2tzIHN0cmVhbXMgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgICAgICAgIHZiX3ZpZHE7CisJZW51bSB2NGwyX2J1Zl90eXBlICAgICAgICAgICB0eXBlOworfTsKKworc3RydWN0IGF1MDgyOF91c2JfaXNvY19jdGwgeworCQkvKiBtYXggcGFja2V0IHNpemUgb2YgaXNvYyB0cmFuc2FjdGlvbiAqLworCWludAkJCQltYXhfcGt0X3NpemU7CisKKwkJLyogbnVtYmVyIG9mIGFsbG9jYXRlZCB1cmJzICovCisJaW50CQkJCW51bV9idWZzOworCisJCS8qIHVyYiBmb3IgaXNvYyB0cmFuc2ZlcnMgKi8KKwlzdHJ1Y3QgdXJiCQkJKip1cmI7CisKKwkJLyogdHJhbnNmZXIgYnVmZmVycyBmb3IgaXNvYyB0cmFuc2ZlciAqLworCWNoYXIJCQkJKip0cmFuc2Zlcl9idWZmZXI7CisKKwkJLyogTGFzdCBidWZmZXIgY29tbWFuZCBhbmQgcmVnaW9uICovCisJdTgJCQkJY21kOworCWludAkJCQlwb3MsIHNpemUsIHBrdHNpemU7CisKKwkJLyogTGFzdCBmaWVsZDogT0REIG9yIEVWRU4/ICovCisJaW50CQkJCWZpZWxkOworCisJCS8qIFN0b3JlcyBpbmNvbXBsZXRlIGNvbW1hbmRzICovCisJdTMyCQkJCXRtcF9idWY7CisJaW50CQkJCXRtcF9idWZfbGVuOworCisJCS8qIFN0b3JlcyBhbHJlYWR5IHJlcXVlc3RlZCBidWZmZXJzICovCisJc3RydWN0IGF1MDgyOF9idWZmZXIgICAgCSpidWY7CisKKwkJLyogU3RvcmVzIHRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgZmllbGRzICovCisJaW50CQkJCW5maWVsZHM7CisKKwkJLyogaXNvYyB1cmIgY2FsbGJhY2sgKi8KKwlpbnQgKCppc29jX2NvcHkpIChzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpOworCit9OworCisvKiBidWZmZXIgZm9yIG9uZSB2aWRlbyBmcmFtZSAqLworc3RydWN0IGF1MDgyOF9idWZmZXIgeworCS8qIGNvbW1vbiB2NGwgYnVmZmVyIHN0dWZmIC0tIG11c3QgYmUgZmlyc3QgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyIHZiOworCisJc3RydWN0IGxpc3RfaGVhZCBmcmFtZTsKKwlpbnQgdG9wX2ZpZWxkOworCWludCByZWNlaXZpbmc7Cit9OworCitzdHJ1Y3QgYXUwODI4X2RtYXF1ZXVlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgIGFjdGl2ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgIHF1ZXVlZDsKKworCXdhaXRfcXVldWVfaGVhZF90ICAgICAgICAgIHdxOworCisJLyogQ291bnRlcnMgdG8gY29udHJvbCBidWZmZXIgZmlsbCAqLworCWludCAgICAgICAgICAgICAgICAgICAgICAgIHBvczsKK307CisKIHN0cnVjdCBhdTA4MjhfZGV2IHsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiAJc3RydWN0IHVzYl9kZXZpY2UJKnVzYmRldjsKLQlpbnQJCQlib2FyZDsKKwlpbnQJCQlib2FyZG5yOworCXN0cnVjdCBhdTA4MjhfYm9hcmQJYm9hcmQ7CiAJdTgJCQljdHJsbXNnWzY0XTsKIAogCS8qIEkyQyAqLwogCXN0cnVjdCBpMmNfYWRhcHRlcgkJaTJjX2FkYXA7Ci0Jc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhCWkyY19hbGdvOworCXN0cnVjdCBpMmNfYWxnb3JpdGhtCQlpMmNfYWxnbzsKIAlzdHJ1Y3QgaTJjX2NsaWVudAkJaTJjX2NsaWVudDsKIAl1MzIgCQkJCWkyY19yYzsKIAogCS8qIERpZ2l0YWwgKi8KIAlzdHJ1Y3QgYXUwODI4X2R2YgkJZHZiOwogCisJLyogQW5hbG9nICovCisJc3RydWN0IGxpc3RfaGVhZCBhdTA4MjhsaXN0OworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlpbnQgdXNlcnM7CisJdW5zaWduZWQgaW50IHN0cmVhbV9vbjoxOwkvKiBMb2NrcyBzdHJlYW1zICovCisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2YmlfZGV2OworCWludCB3aWR0aDsKKwlpbnQgaGVpZ2h0OworCXUzMiBmaWVsZF9zaXplOworCXUzMiBmcmFtZV9zaXplOworCXUzMiBieXRlc3BlcmxpbmU7CisJaW50IHR5cGU7CisJdTggY3RybF9haW5wdXQ7CisJX191OCBpc29jX2luX2VuZHBvaW50YWRkcjsKKwl1OCBpc29jX2luaXRfb2s7CisJaW50IGdyZWVuc2NyZWVuX2RldGVjdGVkOworCXVuc2lnbmVkIGludCBmcmFtZV9jb3VudDsKKwlpbnQgY3RybF9mcmVxOworCWludCBpbnB1dF90eXBlOworCXVuc2lnbmVkIGludCBjdHJsX2lucHV0OworCWVudW0gYXUwODI4X2Rldl9zdGF0ZSBkZXZfc3RhdGU7CisJZW51bSBhdTA4Mjhfc3RyZWFtX3N0YXRlIHN0cmVhbV9zdGF0ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBvcGVuOworCisJc3RydWN0IG11dGV4IGxvY2s7CisKKwkvKiBJc29jIGNvbnRyb2wgc3RydWN0ICovCisJc3RydWN0IGF1MDgyOF9kbWFxdWV1ZSB2aWRxOworCXN0cnVjdCBhdTA4MjhfdXNiX2lzb2NfY3RsIGlzb2NfY3RsOworCXNwaW5sb2NrX3Qgc2xvY2s7CisKKwkvKiB1c2IgdHJhbnNmZXIgKi8KKwlpbnQgYWx0OwkJLyogYWx0ZXJuYXRlICovCisJaW50IG1heF9wa3Rfc2l6ZTsJLyogbWF4IHBhY2tldCBzaXplIG9mIGlzb2MgdHJhbnNhY3Rpb24gKi8KKwlpbnQgbnVtX2FsdDsJCS8qIE51bWJlciBvZiBhbHRlcm5hdGl2ZSBzZXR0aW5ncyAqLworCXVuc2lnbmVkIGludCAqYWx0X21heF9wa3Rfc2l6ZTsJLyogYXJyYXkgb2Ygd01heFBhY2tldFNpemUgKi8KKwlzdHJ1Y3QgdXJiICp1cmJbQVUwODI4X01BWF9JU09fQlVGU107CS8qIHVyYiBmb3IgaXNvYyB0cmFuc2ZlcnMgKi8KKwljaGFyICp0cmFuc2Zlcl9idWZmZXJbQVUwODI4X01BWF9JU09fQlVGU107LyogdHJhbnNmZXIgYnVmZmVycyBmb3IgaXNvYworCQkJCQkJICAgdHJhbnNmZXIgKi8KKwogCS8qIFVTQiAvIFVSQiBSZWxhdGVkICovCiAJaW50CQl1cmJfc3RyZWFtaW5nOwogCXN0cnVjdCB1cmIJKnVyYnNbVVJCX0NPVU5UXTsKLQotfTsKLQotc3RydWN0IGF1MDgyOF9idWZmIHsKLQlzdHJ1Y3QgYXUwODI4X2RldgkqZGV2OwotCXN0cnVjdCB1cmIJCSpwdXJiOwotCXN0cnVjdCBsaXN0X2hlYWQJYnVmZl9saXN0OwogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTExMSw4ICsyNjUsMTMgQEAKIC8qIGF1MDgyOC1pMmMuYyAqLwogZXh0ZXJuIGludCBhdTA4MjhfaTJjX3JlZ2lzdGVyKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpOwogZXh0ZXJuIGludCBhdTA4MjhfaTJjX3VucmVnaXN0ZXIoc3RydWN0IGF1MDgyOF9kZXYgKmRldik7Ci1leHRlcm4gdm9pZCBhdTA4MjhfY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LAotCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBhdTA4MjgtdmlkZW8uYyAqLworaW50IGF1MDgyOF9hbmFsb2dfcmVnaXN0ZXIoc3RydWN0IGF1MDgyOF9kZXYgKmRldiwKKwkJCSAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworaW50IGF1MDgyOF9hbmFsb2dfc3RyZWFtX2Rpc2FibGUoc3RydWN0IGF1MDgyOF9kZXYgKmQpOwordm9pZCBhdTA4MjhfYW5hbG9nX3VucmVnaXN0ZXIoc3RydWN0IGF1MDgyOF9kZXYgKmRldik7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBhdTA4MjgtZHZiLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYwppbmRleCBhMDdiN2I4Li5kZjQ1MTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jCkBAIC0yOSwxNiArMjksMTYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CisjaW5jbHVkZSA8bWVkaWEvYnQ4MTkuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJCcm9va3RyZWUtODE5IHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNaWtlIEJlcm5zb24gJiBEYXZlIFBlcmtzIik7CkBAIC00OCwxMyArNDgsMTUgQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCBidDgxOSB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwogCXVuc2lnbmVkIGNoYXIgcmVnWzMyXTsKIAotCWludCBpbml0aWFsaXplZDsKLQlpbnQgbm9ybTsKKwl2NGwyX3N0ZF9pZCBub3JtOworCWludCBpZGVudDsKIAlpbnQgaW5wdXQ7CiAJaW50IGVuYWJsZTsKIAlpbnQgYnJpZ2h0OwpAQCAtNjMsNiArNjUsMTEgQEAKIAlpbnQgc2F0OwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgYnQ4MTkgKnRvX2J0ODE5KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGJ0ODE5LCBzZCk7Cit9CisKIHN0cnVjdCB0aW1pbmcgewogCWludCBoYWN0aXZlOwogCWludCBoZGVsYXk7CkBAIC04MCwyNCArODcsMjMgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQgYnQ4MTlfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGJ0ODE5X3dyaXRlKHN0cnVjdCBidDgxOSAqZGVjb2RlciwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKLQlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmZGVjb2Rlci0+c2QpOwogCiAJZGVjb2Rlci0+cmVnW3JlZ10gPSB2YWx1ZTsKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBidDgxOV9zZXRiaXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCBiaXQsIHU4IHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgYnQ4MTlfc2V0Yml0KHN0cnVjdCBidDgxOSAqZGVjb2RlciwgdTggcmVnLCB1OCBiaXQsIHU4IHZhbHVlKQogewotCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JcmV0dXJuIGJ0ODE5X3dyaXRlKGNsaWVudCwgcmVnLAorCXJldHVybiBidDgxOV93cml0ZShkZWNvZGVyLCByZWcsCiAJCShkZWNvZGVyLT5yZWdbcmVnXSAmIH4oMSA8PCBiaXQpKSB8ICh2YWx1ZSA/ICgxIDw8IGJpdCkgOiAwKSk7CiB9CiAKLXN0YXRpYyBpbnQgYnQ4MTlfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCitzdGF0aWMgaW50IGJ0ODE5X3dyaXRlX2Jsb2NrKHN0cnVjdCBidDgxOSAqZGVjb2RlciwgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJmRlY29kZXItPnNkKTsKIAlpbnQgcmV0ID0gLTE7CiAJdTggcmVnOwogCkBAIC0xMDUsNyArMTExLDYgQEAKIAkgKiB0aGUgYWRhcHRlciB1bmRlcnN0YW5kcyByYXcgSTJDICovCiAJaWYgKGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewogCQkvKiBkbyByYXcgSTJDLCBub3Qgc21idXMgY29tcGF0aWJsZSAqLwotCQlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAkJdTggYmxvY2tfZGF0YVszMl07CiAJCWludCBibG9ja19sZW47CiAKQEAgLTEyNiw3ICsxMzEsOCBAQAogCQkvKiBkbyBzb21lIHNsb3cgSTJDIGVtdWxhdGlvbiBraW5kIG9mIHRoaW5nICovCiAJCXdoaWxlIChsZW4gPj0gMikgewogCQkJcmVnID0gKmRhdGErKzsKLQkJCWlmICgocmV0ID0gYnQ4MTlfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspKSA8IDApCisJCQlyZXQgPSBidDgxOV93cml0ZShkZWNvZGVyLCByZWcsICpkYXRhKyspOworCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCQlsZW4gLT0gMjsKIAkJfQpAQCAtMTM1LDE1ICsxNDEsMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBidDgxOV9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKK3N0YXRpYyBpbmxpbmUgaW50IGJ0ODE5X3JlYWQoc3RydWN0IGJ0ODE5ICpkZWNvZGVyLCB1OCByZWcpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJmRlY29kZXItPnNkKTsKKwogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwogfQogCi1zdGF0aWMgaW50IGJ0ODE5X2luaXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgYnQ4MTlfaW5pdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewotCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCiAJc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5pdFtdID0gewogCQkvKjB4MWYsIDB4MDAsKi8gICAgIC8qIFJlc2V0ICovCiAJCTB4MDEsIDB4NTksCS8qIDB4MDEgaW5wdXQgZm9ybWF0ICovCkBAIC0xNzgsNyArMTg0LDggQEAKIAkJMHgxYSwgMHg4MCwJLyogMHgxYSBBREMgSW50ZXJmYWNlICovCiAJfTsKIAotCXN0cnVjdCB0aW1pbmcgKnRpbWluZyA9ICZ0aW1pbmdfZGF0YVtkZWNvZGVyLT5ub3JtXTsKKwlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSB0b19idDgxOShzZCk7CisJc3RydWN0IHRpbWluZyAqdGltaW5nID0gJnRpbWluZ19kYXRhWyhkZWNvZGVyLT5ub3JtICYgVjRMMl9TVERfNTI1XzYwKSA/IDEgOiAwXTsKIAogCWluaXRbMHgwMyAqIDIgLSAxXSA9CiAJICAgICgoKHRpbWluZy0+dmRlbGF5ID4+IDgpICYgMHgwMykgPDwgNikgfApAQCAtMTkyLDI2NiArMTk5LDMwNiBAQAogCWluaXRbMHgwOCAqIDIgLSAxXSA9IHRpbWluZy0+aHNjYWxlID4+IDg7CiAJaW5pdFsweDA5ICogMiAtIDFdID0gdGltaW5nLT5oc2NhbGUgJiAweGZmOwogCS8qIDB4MTUgaW4gYXJyYXkgaXMgYWRkcmVzcyAweDE5ICovCi0JaW5pdFsweDE1ICogMiAtIDFdID0gKGRlY29kZXItPm5vcm0gPT0gMCkgPyAxMTUgOiA5MzsJLyogQ2hyb21hIGJ1cnN0IGRlbGF5ICovCisJaW5pdFsweDE1ICogMiAtIDFdID0gKGRlY29kZXItPm5vcm0gJiBWNEwyX1NURF82MjVfNTApID8gMTE1IDogOTM7CS8qIENocm9tYSBidXJzdCBkZWxheSAqLwogCS8qIHJlc2V0ICovCi0JYnQ4MTlfd3JpdGUoY2xpZW50LCAweDFmLCAweDAwKTsKKwlidDgxOV93cml0ZShkZWNvZGVyLCAweDFmLCAweDAwKTsKIAltZGVsYXkoMSk7CiAKIAkvKiBpbml0ICovCi0JcmV0dXJuIGJ0ODE5X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdCwgc2l6ZW9mKGluaXQpKTsKKwlyZXR1cm4gYnQ4MTlfd3JpdGVfYmxvY2soZGVjb2RlciwgaW5pdCwgc2l6ZW9mKGluaXQpKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCBidDgxOV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBidDgxOV9zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyICpwc3RhdHVzLCB2NGwyX3N0ZF9pZCAqcHN0ZCkKIHsKLQlpbnQgdGVtcDsKKwlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSB0b19idDgxOShzZCk7CisJaW50IHN0YXR1cyA9IGJ0ODE5X3JlYWQoZGVjb2RlciwgMHgwMCk7CisJaW50IHJlcyA9IFY0TDJfSU5fU1RfTk9fU0lHTkFMOworCXY0bDJfc3RkX2lkIHN0ZDsKIAotCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JaWYgKCFkZWNvZGVyLT5pbml0aWFsaXplZCkgewkvKiBGaXJzdCBjYWxsIHRvIGJ0ODE5X2luaXQgY291bGQgYmUgKi8KLQkJYnQ4MTlfaW5pdChjbGllbnQpOwkvKiB3aXRob3V0ICNGUlNUID0gMCAqLwotCQlkZWNvZGVyLT5pbml0aWFsaXplZCA9IDE7Ci0JfQotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIDA6Ci0JCS8qIFRoaXMgaXMganVzdCBmb3IgdGVzdGluZyEhISAqLwotCQlidDgxOV9pbml0KGNsaWVudCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBERUNPREVSX0dFVF9DQVBBQklMSVRJRVM6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7Ci0KLQkJY2FwLT5mbGFncyA9IFZJREVPX0RFQ09ERVJfUEFMIHwKLQkJCSAgICAgVklERU9fREVDT0RFUl9OVFNDIHwKLQkJCSAgICAgVklERU9fREVDT0RFUl9BVVRPIHwKLQkJCSAgICAgVklERU9fREVDT0RFUl9DQ0lSOwotCQljYXAtPmlucHV0cyA9IDg7Ci0JCWNhcC0+b3V0cHV0cyA9IDE7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCQlpbnQgc3RhdHVzOwotCQlpbnQgcmVzOwotCi0JCXN0YXR1cyA9IGJ0ODE5X3JlYWQoY2xpZW50LCAweDAwKTsKKwlpZiAoKHN0YXR1cyAmIDB4ODApKQogCQlyZXMgPSAwOwotCQlpZiAoKHN0YXR1cyAmIDB4ODApKQotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0dPT0Q7CiAKLQkJc3dpdGNoIChkZWNvZGVyLT5ub3JtKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX05UU0M7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19QQUw7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJY2FzZSBWSURFT19NT0RFX0FVVE86Ci0JCQlpZiAoKHN0YXR1cyAmIDB4MTApKQotCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19QQUw7Ci0JCQllbHNlCi0JCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX05UU0M7Ci0JCQlicmVhazsKLQkJfQotCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfQ09MT1I7Ci0JCSppYXJnID0gcmVzOworCWlmICgoc3RhdHVzICYgMHgxMCkpCisJCXN0ZCA9IFY0TDJfU1REX1BBTDsKKwllbHNlCisJCXN0ZCA9IFY0TDJfU1REX05UU0M7CisJaWYgKHBzdGQpCisJCSpwc3RkID0gc3RkOworCWlmIChwc3RhdHVzKQorCQkqcHN0YXR1cyA9IHN0YXR1czsKIAotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJnZXQgc3RhdHVzICV4XG4iLCAqaWFyZyk7Ci0JCWJyZWFrOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImdldCBzdGF0dXMgJXhcbiIsIHN0YXR1cyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnQ4MTlfcXVlcnlzdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwlyZXR1cm4gYnQ4MTlfc3RhdHVzKHNkLCBOVUxMLCBzdGQpOworfQorCitzdGF0aWMgaW50IGJ0ODE5X2dfaW5wdXRfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqc3RhdHVzKQoreworCXJldHVybiBidDgxOV9zdGF0dXMoc2QsIHN0YXR1cywgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgYnQ4MTlfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQoreworCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IHRvX2J0ODE5KHNkKTsKKwlzdHJ1Y3QgdGltaW5nICp0aW1pbmcgPSBOVUxMOworCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic2V0IG5vcm0gJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGQpOworCisJaWYgKHNkLT52NGwyX2RldiA9PSBOVUxMIHx8IHNkLT52NGwyX2Rldi0+bm90aWZ5ID09IE5VTEwpCisJCXY0bDJfZXJyKHNkLCAibm8gbm90aWZ5IGZvdW5kIVxuIik7CisKKwlpZiAoc3RkICYgVjRMMl9TVERfTlRTQykgeworCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfTE9XLCAwKTsKKwkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MDEsIDAsIDEpOworCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwMSwgMSwgMCk7CisJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDAxLCA1LCAwKTsKKwkJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgxOCwgMHg2OCk7CisJCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MTksIDB4NWQpOworCQkvKiBidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgxYSwgIDUsIDEpOyAqLworCQl0aW1pbmcgPSAmdGltaW5nX2RhdGFbMV07CisJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUwpIHsKKwkJdjRsMl9zdWJkZXZfbm90aWZ5KHNkLCBCVDgxOV9GSUZPX1JFU0VUX0xPVywgMCk7CisJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDAxLCAwLCAxKTsKKwkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MDEsIDEsIDEpOworCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwMSwgNSwgMSk7CisJCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MTgsIDB4N2YpOworCQlidDgxOV93cml0ZShkZWNvZGVyLCAweDE5LCAweDcyKTsKKwkJLyogYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MWEsICA1LCAwKTsgKi8KKwkJdGltaW5nID0gJnRpbWluZ19kYXRhWzBdOworCX0gZWxzZSB7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInVuc3VwcG9ydGVkIG5vcm0gJWxseFxuIiwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXN0ZCk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KKwlidDgxOV93cml0ZShkZWNvZGVyLCAweDAzLAorCQkJKCgodGltaW5nLT52ZGVsYXkgPj4gOCkgJiAweDAzKSA8PCA2KSB8CisJCQkoKCh0aW1pbmctPnZhY3RpdmUgPj4gOCkgJiAweDAzKSA8PCA0KSB8CisJCQkoKCh0aW1pbmctPmhkZWxheSA+PiA4KSAmIDB4MDMpIDw8IDIpIHwKKwkJCSgodGltaW5nLT5oYWN0aXZlID4+IDgpICYgMHgwMykpOworCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MDQsIHRpbWluZy0+dmRlbGF5ICYgMHhmZik7CisJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwNSwgdGltaW5nLT52YWN0aXZlICYgMHhmZik7CisJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwNiwgdGltaW5nLT5oZGVsYXkgJiAweGZmKTsKKwlidDgxOV93cml0ZShkZWNvZGVyLCAweDA3LCB0aW1pbmctPmhhY3RpdmUgJiAweGZmKTsKKwlidDgxOV93cml0ZShkZWNvZGVyLCAweDA4LCAodGltaW5nLT5oc2NhbGUgPj4gOCkgJiAweGZmKTsKKwlidDgxOV93cml0ZShkZWNvZGVyLCAweDA5LCB0aW1pbmctPmhzY2FsZSAmIDB4ZmYpOworCWRlY29kZXItPm5vcm0gPSBzdGQ7CisJdjRsMl9zdWJkZXZfbm90aWZ5KHNkLCBCVDgxOV9GSUZPX1JFU0VUX0hJR0gsIDApOworCXJldHVybiAwOworfQogCi0JY2FzZSBERUNPREVSX1NFVF9OT1JNOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCQlzdHJ1Y3QgdGltaW5nICp0aW1pbmcgPSBOVUxMOworc3RhdGljIGludCBidDgxOV9zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gdG9fYnQ4MTkoc2QpOwogCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBub3JtICV4XG4iLCAqaWFyZyk7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic2V0IGlucHV0ICV4XG4iLCByb3V0ZS0+aW5wdXQpOwogCi0JCXN3aXRjaCAoKmlhcmcpIHsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDAxLCAwLCAxKTsKLQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MDEsIDEsIDApOwotCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgwMSwgNSwgMCk7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MTgsIDB4NjgpOwotCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDE5LCAweDVkKTsKLQkJCS8qIGJ0ODE5X3NldGJpdChjbGllbnQsIDB4MWEsICA1LCAxKTsgKi8KLQkJCXRpbWluZyA9ICZ0aW1pbmdfZGF0YVtWSURFT19NT0RFX05UU0NdOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDAxLCAwLCAxKTsKLQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MDEsIDEsIDEpOwotCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgwMSwgNSwgMSk7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MTgsIDB4N2YpOwotCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDE5LCAweDcyKTsKLQkJCS8qIGJ0ODE5X3NldGJpdChjbGllbnQsIDB4MWEsICA1LCAwKTsgKi8KLQkJCXRpbWluZyA9ICZ0aW1pbmdfZGF0YVtWSURFT19NT0RFX1BBTF07Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX0FVVE86Ci0JCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDAxLCAwLCAwKTsKLQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MDEsIDEsIDApOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJ1bnN1cHBvcnRlZCBub3JtICV4XG4iLCAqaWFyZyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocm91dGUtPmlucHV0IDwgMCB8fCByb3V0ZS0+aW5wdXQgPiA3KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzZC0+djRsMl9kZXYgPT0gTlVMTCB8fCBzZC0+djRsMl9kZXYtPm5vdGlmeSA9PSBOVUxMKQorCQl2NGwyX2VycihzZCwgIm5vIG5vdGlmeSBmb3VuZCFcbiIpOworCisJaWYgKGRlY29kZXItPmlucHV0ICE9IHJvdXRlLT5pbnB1dCkgeworCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfTE9XLCAwKTsKKwkJZGVjb2Rlci0+aW5wdXQgPSByb3V0ZS0+aW5wdXQ7CisJCS8qIHNlbGVjdCBtb2RlICovCisJCWlmIChkZWNvZGVyLT5pbnB1dCA9PSAwKSB7CisJCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwYiwgNiwgMCk7CisJCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgxYSwgMSwgMSk7CisJCX0gZWxzZSB7CisJCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwYiwgNiwgMSk7CisJCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgxYSwgMSwgMCk7CiAJCX0KLQotCQlpZiAodGltaW5nKSB7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MDMsCi0JCQkJICAgICgoKHRpbWluZy0+dmRlbGF5ID4+IDgpICYgMHgwMykgPDwgNikgfAotCQkJCSAgICAoKCh0aW1pbmctPnZhY3RpdmUgPj4gOCkgJiAweDAzKSA8PCA0KSB8Ci0JCQkJICAgICgoKHRpbWluZy0+aGRlbGF5ID4+IDgpICYgMHgwMykgPDwgMikgfAotCQkJCSAgICAgKCh0aW1pbmctPmhhY3RpdmUgPj4gOCkgJiAweDAzKSApOwotCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDA0LCB0aW1pbmctPnZkZWxheSAmIDB4ZmYpOwotCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDA1LCB0aW1pbmctPnZhY3RpdmUgJiAweGZmKTsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgwNiwgdGltaW5nLT5oZGVsYXkgJiAweGZmKTsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgwNywgdGltaW5nLT5oYWN0aXZlICYgMHhmZik7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MDgsICh0aW1pbmctPmhzY2FsZSA+PiA4KSAmIDB4ZmYpOwotCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDA5LCB0aW1pbmctPmhzY2FsZSAmIDB4ZmYpOwotCQl9Ci0KLQkJZGVjb2Rlci0+bm9ybSA9ICppYXJnOwotCQlicmVhazsKKwkJdjRsMl9zdWJkZXZfbm90aWZ5KHNkLCBCVDgxOV9GSUZPX1JFU0VUX0hJR0gsIDApOwogCX0KKwlyZXR1cm4gMDsKK30KIAotCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7CitzdGF0aWMgaW50IGJ0ODE5X3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCit7CisJc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gdG9fYnQ4MTkoc2QpOwogCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBpbnB1dCAleFxuIiwgKmlhcmcpOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImVuYWJsZSBvdXRwdXQgJXhcbiIsIGVuYWJsZSk7CiAKLQkJaWYgKCppYXJnIDwgMCB8fCAqaWFyZyA+IDcpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoZGVjb2Rlci0+aW5wdXQgIT0gKmlhcmcpIHsKLQkJCWRlY29kZXItPmlucHV0ID0gKmlhcmc7Ci0JCQkvKiBzZWxlY3QgbW9kZSAqLwotCQkJaWYgKGRlY29kZXItPmlucHV0ID09IDApIHsKLQkJCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDBiLCA2LCAwKTsKLQkJCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDFhLCAxLCAxKTsKLQkJCX0gZWxzZSB7Ci0JCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgwYiwgNiwgMSk7Ci0JCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgxYSwgMSwgMCk7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7CisJaWYgKGRlY29kZXItPmVuYWJsZSAhPSBlbmFibGUpIHsKKwkJZGVjb2Rlci0+ZW5hYmxlID0gZW5hYmxlOworCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgxNiwgNywgIWVuYWJsZSk7CiAJfQorCXJldHVybiAwOworfQogCi0JY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG91dHB1dCAleFxuIiwgKmlhcmcpOwotCi0JCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCi0JCWlmICgqaWFyZyAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7CitzdGF0aWMgaW50IGJ0ODE5X3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQl2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgLTEyOCwgMTI3LCAxLCAwKTsKIAkJYnJlYWs7Ci0JfQogCi0JY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCWludCBlbmFibGUgPSAoKmlhcmcgIT0gMCk7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZW5hYmxlIG91dHB1dCAleFxuIiwgKmlhcmcpOwotCi0JCWlmIChkZWNvZGVyLT5lbmFibGUgIT0gZW5hYmxlKSB7Ci0JCQlkZWNvZGVyLT5lbmFibGUgPSBlbmFibGU7Ci0JCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDE2LCA3LCAhZW5hYmxlKTsKLQkJfQorCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCXY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA1MTEsIDEsIDI1Nik7CiAJCWJyZWFrOwotCX0KIAotCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKLQl7Ci0JCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAotCQkJInNldCBwaWN0dXJlIGJyaWdodG5lc3MgJWQgY29udHJhc3QgJWQgY29sb3VyICVkXG4iLAotCQkJcGljLT5icmlnaHRuZXNzLCBwaWMtPmNvbnRyYXN0LCBwaWMtPmNvbG91cik7Ci0KLQotCQlpZiAoZGVjb2Rlci0+YnJpZ2h0ICE9IHBpYy0+YnJpZ2h0bmVzcykgewotCQkJLyogV2Ugd2FudCAtMTI4IHRvIDEyNyB3ZSBnZXQgMC02NTUzNSAqLwotCQkJZGVjb2Rlci0+YnJpZ2h0ID0gcGljLT5icmlnaHRuZXNzOwotCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDBhLAotCQkJCSAgICAoZGVjb2Rlci0+YnJpZ2h0ID4+IDgpIC0gMTI4KTsKLQkJfQotCi0JCWlmIChkZWNvZGVyLT5jb250cmFzdCAhPSBwaWMtPmNvbnRyYXN0KSB7Ci0JCQkvKiBXZSB3YW50IDAgdG8gNTExIHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5jb250cmFzdCA9IHBpYy0+Y29udHJhc3Q7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MGMsCi0JCQkJICAgIChkZWNvZGVyLT5jb250cmFzdCA+PiA3KSAmIDB4ZmYpOwotCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgwYiwgMiwKLQkJCQkgICAgICgoZGVjb2Rlci0+Y29udHJhc3QgPj4gMTUpICYgMHgwMSkpOwotCQl9Ci0KLQkJaWYgKGRlY29kZXItPnNhdCAhPSBwaWMtPmNvbG91cikgewotCQkJLyogV2Ugd2FudCAwIHRvIDUxMSB3ZSBnZXQgMC02NTUzNSAqLwotCQkJZGVjb2Rlci0+c2F0ID0gcGljLT5jb2xvdXI7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MGQsCi0JCQkJICAgIChkZWNvZGVyLT5zYXQgPj4gNykgJiAweGZmKTsKLQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MGIsIDEsCi0JCQkJICAgICAoKGRlY29kZXItPnNhdCA+PiAxNSkgJiAweDAxKSk7Ci0KLQkJCXRlbXAgPSAoZGVjb2Rlci0+c2F0ICogMjAxKSAvIDIzNzsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgwZSwgKHRlbXAgPj4gNykgJiAweGZmKTsKLQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MGIsIDAsICh0ZW1wID4+IDE1KSAmIDB4MDEpOwotCQl9Ci0KLQkJaWYgKGRlY29kZXItPmh1ZSAhPSBwaWMtPmh1ZSkgewotCQkJLyogV2Ugd2FudCAtMTI4IHRvIDEyNyB3ZSBnZXQgMC02NTUzNSAqLwotCQkJZGVjb2Rlci0+aHVlID0gcGljLT5odWU7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MGYsCi0JCQkJICAgIDEyOCAtIChkZWNvZGVyLT5odWUgPj4gOCkpOwotCQl9CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQl2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNTExLCAxLCAyNTYpOwogCQlicmVhazsKLQl9CisKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIC0xMjgsIDEyNywgMSwgMCk7CisJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYnQ4MTlfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gdG9fYnQ4MTkoc2QpOworCWludCB0ZW1wOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJaWYgKGRlY29kZXItPmJyaWdodCA9PSBjdHJsLT52YWx1ZSkKKwkJCWJyZWFrOworCQlkZWNvZGVyLT5icmlnaHQgPSBjdHJsLT52YWx1ZTsKKwkJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwYSwgZGVjb2Rlci0+YnJpZ2h0KTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQlpZiAoZGVjb2Rlci0+Y29udHJhc3QgPT0gY3RybC0+dmFsdWUpCisJCQlicmVhazsKKwkJZGVjb2Rlci0+Y29udHJhc3QgPSBjdHJsLT52YWx1ZTsKKwkJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwYywgZGVjb2Rlci0+Y29udHJhc3QgJiAweGZmKTsKKwkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MGIsIDIsICgoZGVjb2Rlci0+Y29udHJhc3QgPj4gOCkgJiAweDAxKSk7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQlpZiAoZGVjb2Rlci0+c2F0ID09IGN0cmwtPnZhbHVlKQorCQkJYnJlYWs7CisJCWRlY29kZXItPnNhdCA9IGN0cmwtPnZhbHVlOworCQlidDgxOV93cml0ZShkZWNvZGVyLCAweDBkLCAoZGVjb2Rlci0+c2F0ID4+IDcpICYgMHhmZik7CisJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDBiLCAxLCAoKGRlY29kZXItPnNhdCA+PiAxNSkgJiAweDAxKSk7CisKKwkJLyogUmF0aW8gYmV0d2VlbiBVIGdhaW4gYW5kIFYgZ2FpbiBtdXN0IHN0YXkgdGhlIHNhbWUgYXMKKwkJICAgdGhlIHJhdGlvIGJldHdlZW4gdGhlIGRlZmF1bHQgVSBhbmQgViBnYWluIHZhbHVlcy4gKi8KKwkJdGVtcCA9IChkZWNvZGVyLT5zYXQgKiAxODApIC8gMjU0OworCQlidDgxOV93cml0ZShkZWNvZGVyLCAweDBlLCAodGVtcCA+PiA3KSAmIDB4ZmYpOworCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwYiwgMCwgKHRlbXAgPj4gMTUpICYgMHgwMSk7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCWlmIChkZWNvZGVyLT5odWUgPT0gY3RybC0+dmFsdWUpCisJCQlicmVhazsKKwkJZGVjb2Rlci0+aHVlID0gY3RybC0+dmFsdWU7CisJCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MGYsIGRlY29kZXItPmh1ZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ0ODE5X2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IHRvX2J0ODE5KHNkKTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+YnJpZ2h0OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPmNvbnRyYXN0OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+c2F0OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT5odWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBidDgxOV9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gdG9fYnQ4MTkoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIGRlY29kZXItPmlkZW50LCAwKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg4YSA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBidDgxOV9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gYnQ4MTlfZ19jaGlwX2lkZW50LAorCS5nX2N0cmwgPSBidDgxOV9nX2N0cmwsCisJLnNfY3RybCA9IGJ0ODE5X3NfY3RybCwKKwkucXVlcnljdHJsID0gYnQ4MTlfcXVlcnljdHJsLAorfTsKIAotSTJDX0NMSUVOVF9JTlNNT0Q7CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyBidDgxOV90dW5lcl9vcHMgPSB7CisJLnNfc3RkID0gYnQ4MTlfc19zdGQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBidDgxOV92aWRlb19vcHMgPSB7CisJLnNfcm91dGluZyA9IGJ0ODE5X3Nfcm91dGluZywKKwkuc19zdHJlYW0gPSBidDgxOV9zX3N0cmVhbSwKKwkucXVlcnlzdGQgPSBidDgxOV9xdWVyeXN0ZCwKKwkuZ19pbnB1dF9zdGF0dXMgPSBidDgxOV9nX2lucHV0X3N0YXR1cywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGJ0ODE5X29wcyA9IHsKKwkuY29yZSA9ICZidDgxOV9jb3JlX29wcywKKwkudHVuZXIgPSAmYnQ4MTlfdHVuZXJfb3BzLAorCS52aWRlbyA9ICZidDgxOV92aWRlb19vcHMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IGJ0ODE5X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGksIHZlcjsKIAlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAljb25zdCBjaGFyICpuYW1lOwogCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXZlciA9IGJ0ODE5X3JlYWQoY2xpZW50LCAweDE3KTsKKwlkZWNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJ0ODE5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRlY29kZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJc2QgPSAmZGVjb2Rlci0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJmJ0ODE5X29wcyk7CisKKwl2ZXIgPSBidDgxOV9yZWFkKGRlY29kZXIsIDB4MTcpOwogCXN3aXRjaCAodmVyICYgMHhmMCkgewogCWNhc2UgMHg3MDoKIAkJbmFtZSA9ICJidDgxOWEiOworCQlkZWNvZGVyLT5pZGVudCA9IFY0TDJfSURFTlRfQlQ4MTlBOwogCQlicmVhazsKIAljYXNlIDB4NjA6CiAJCW5hbWUgPSAiYnQ4MTdhIjsKKwkJZGVjb2Rlci0+aWRlbnQgPSBWNEwyX0lERU5UX0JUODE3QTsKIAkJYnJlYWs7CiAJY2FzZSAweDIwOgogCQluYW1lID0gImJ0ODE1YSI7CisJCWRlY29kZXItPmlkZW50ID0gVjRMMl9JREVOVF9CVDgxNUE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLAogCQkJInVua25vd24gY2hpcCB2ZXJzaW9uIDB4JTAyeFxuIiwgdmVyKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNDU5LDI4ICs1MDYsMjYgQEAKIAl2NGxfaW5mbyhjbGllbnQsICIlcyBmb3VuZCBAIDB4JXggKCVzKVxuIiwgbmFtZSwKIAkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCi0JZGVjb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBidDgxOSksIEdGUF9LRVJORUwpOwotCWlmIChkZWNvZGVyID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCWRlY29kZXItPm5vcm0gPSBWSURFT19NT0RFX05UU0M7CisJZGVjb2Rlci0+bm9ybSA9IFY0TDJfU1REX05UU0M7CiAJZGVjb2Rlci0+aW5wdXQgPSAwOwogCWRlY29kZXItPmVuYWJsZSA9IDE7Ci0JZGVjb2Rlci0+YnJpZ2h0ID0gMzI3Njg7Ci0JZGVjb2Rlci0+Y29udHJhc3QgPSAzMjc2ODsKLQlkZWNvZGVyLT5odWUgPSAzMjc2ODsKLQlkZWNvZGVyLT5zYXQgPSAzMjc2ODsKLQlkZWNvZGVyLT5pbml0aWFsaXplZCA9IDA7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjb2Rlcik7CisJZGVjb2Rlci0+YnJpZ2h0ID0gMDsKKwlkZWNvZGVyLT5jb250cmFzdCA9IDB4ZDg7CS8qIDEwMCUgb2Ygb3JpZ2luYWwgc2lnbmFsICovCisJZGVjb2Rlci0+aHVlID0gMDsKKwlkZWNvZGVyLT5zYXQgPSAweGZlOwkJLyogMTAwJSBvZiBvcmlnaW5hbCBzaWduYWwgKi8KIAotCWkgPSBidDgxOV9pbml0KGNsaWVudCk7CisJaSA9IGJ0ODE5X2luaXQoc2QpOwogCWlmIChpIDwgMCkKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaW5pdCBzdGF0dXMgJWRcbiIsIGkpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpbml0IHN0YXR1cyAlZFxuIiwgaSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYnQ4MTlfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Ja2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19idDgxOShzZCkpOwogCXJldHVybiAwOwogfQogCkBAIC00OTYsOCArNTQxLDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gImJ0ODE5IiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfQlQ4MTksCi0JLmNvbW1hbmQgPSBidDgxOV9jb21tYW5kLAogCS5wcm9iZSA9IGJ0ODE5X3Byb2JlLAogCS5yZW1vdmUgPSBidDgxOV9yZW1vdmUsCiAJLmlkX3RhYmxlID0gYnQ4MTlfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODU2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODU2LmMKaW5kZXggNDIxMzg2Ny4uNzhkYjM5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDg1Ni5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NTYuYwpAQCAtMzQsMTAgKzM0LDEwIEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkJyb29rdHJlZS04NTZBIHZpZGVvIGVuY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNaWtlIEJlcm5zb24gJiBEYXZlIFBlcmtzIik7CkBAIC00Nyw0MyArNDcsNDYgQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNkZWZpbmUgQlQ4NTZfUkVHX09GRlNFVAkweERBCiAjZGVmaW5lIEJUODU2X05SX1JFRwkJNgogCiBzdHJ1Y3QgYnQ4NTYgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAl1bnNpZ25lZCBjaGFyIHJlZ1tCVDg1Nl9OUl9SRUddOwogCi0JaW50IG5vcm07Ci0JaW50IGVuYWJsZTsKKwl2NGwyX3N0ZF9pZCBub3JtOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgYnQ4NTYgKnRvX2J0ODU2KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGJ0ODU2LCBzZCk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGJ0ODU2X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBidDg1Nl93cml0ZShzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIsIHU4IHJlZywgdTggdmFsdWUpCiB7Ci0Jc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJmVuY29kZXItPnNkKTsKIAogCWVuY29kZXItPnJlZ1tyZWcgLSBCVDg1Nl9SRUdfT0ZGU0VUXSA9IHZhbHVlOwogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGJ0ODU2X3NldGJpdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IGJpdCwgdTggdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBidDg1Nl9zZXRiaXQoc3RydWN0IGJ0ODU2ICplbmNvZGVyLCB1OCByZWcsIHU4IGJpdCwgdTggdmFsdWUpCiB7Ci0Jc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlyZXR1cm4gYnQ4NTZfd3JpdGUoY2xpZW50LCByZWcsCisJcmV0dXJuIGJ0ODU2X3dyaXRlKGVuY29kZXIsIHJlZywKIAkJKGVuY29kZXItPnJlZ1tyZWcgLSBCVDg1Nl9SRUdfT0ZGU0VUXSAmIH4oMSA8PCBiaXQpKSB8CiAJCQkJKHZhbHVlID8gKDEgPDwgYml0KSA6IDApKTsKIH0KIAotc3RhdGljIHZvaWQgYnQ4NTZfZHVtcChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIHZvaWQgYnQ4NTZfZHVtcChzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQl2NGxfaW5mbyhjbGllbnQsICJyZWdpc3RlciBkdW1wOlxuIik7CisJdjRsMl9pbmZvKCZlbmNvZGVyLT5zZCwgInJlZ2lzdGVyIGR1bXA6XG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgQlQ4NTZfTlJfUkVHOyBpICs9IDIpCiAJCXByaW50ayhLRVJOX0NPTlQgIiAlMDJ4IiwgZW5jb2Rlci0+cmVnW2ldKTsKIAlwcmludGsoS0VSTl9DT05UICJcbiIpOwpAQCAtOTEsMTUzICs5NCwxMjAgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCBidDg1Nl9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBidDg1Nl9pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBhcmcpCiB7Ci0Jc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gdG9fYnQ4NTYoc2QpOwogCi0Jc3dpdGNoIChjbWQpIHsKKwkvKiBUaGlzIGlzIGp1c3QgZm9yIHRlc3RpbmchISEgKi8KKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpbml0XG4iKTsKKwlidDg1Nl93cml0ZShlbmNvZGVyLCAweGRjLCAweDE4KTsKKwlidDg1Nl93cml0ZShlbmNvZGVyLCAweGRhLCAwKTsKKwlidDg1Nl93cml0ZShlbmNvZGVyLCAweGRlLCAwKTsKKworCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCAzLCAxKTsKKwkvKmJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCA2LCAwKTsqLworCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCA0LCAxKTsKKworCWlmIChlbmNvZGVyLT5ub3JtICYgVjRMMl9TVERfTlRTQykKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDIsIDApOworCWVsc2UKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDIsIDEpOworCisJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDEsIDEpOworCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRlLCA0LCAwKTsKKwlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkZSwgMywgMSk7CisJaWYgKGRlYnVnICE9IDApCisJCWJ0ODU2X2R1bXAoZW5jb2Rlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnQ4NTZfc19zdGRfb3V0cHV0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZCkKK3sKKwlzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIgPSB0b19idDg1NihzZCk7CisKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzZXQgbm9ybSAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXN0ZCk7CisKKwlpZiAoc3RkICYgVjRMMl9TVERfTlRTQykgeworCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgMiwgMCk7CisJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUwpIHsKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDIsIDEpOworCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYSwgMCwgMCk7CisJCS8qYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGEsIDAsIDEpOyovCisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWVuY29kZXItPm5vcm0gPSBzdGQ7CisJaWYgKGRlYnVnICE9IDApCisJCWJ0ODU2X2R1bXAoZW5jb2Rlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnQ4NTZfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQoreworCXN0cnVjdCBidDg1NiAqZW5jb2RlciA9IHRvX2J0ODU2KHNkKTsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNldCBpbnB1dCAlZFxuIiwgcm91dGUtPmlucHV0KTsKKworCS8qIFdlIG9ubHkgaGF2ZSB2aWRlbyBidXMuCisJICogcm91dGUtPmlucHV0PSAwOiBpbnB1dCBpcyBmcm9tIGJ0ODE5CisJICogcm91dGUtPmlucHV0PSAxOiBpbnB1dCBpcyBmcm9tIFpSMzYwNjAgKi8KKwlzd2l0Y2ggKHJvdXRlLT5pbnB1dCkgewogCWNhc2UgMDoKLQkJLyogVGhpcyBpcyBqdXN0IGZvciB0ZXN0aW5nISEhICovCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXRcbiIpOwotCQlidDg1Nl93cml0ZShjbGllbnQsIDB4ZGMsIDB4MTgpOwotCQlidDg1Nl93cml0ZShjbGllbnQsIDB4ZGEsIDApOwotCQlidDg1Nl93cml0ZShjbGllbnQsIDB4ZGUsIDApOwotCi0JCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDMsIDEpOwotCQkvL2J0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDYsIDApOwotCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCA0LCAxKTsKLQotCQlzd2l0Y2ggKGVuY29kZXItPm5vcm0pIHsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAyLCAwKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAyLCAxKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgMSwgMSk7Ci0JCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGUsIDQsIDApOwotCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRlLCAzLCAxKTsKLQkJaWYgKGRlYnVnICE9IDApCi0JCQlidDg1Nl9kdW1wKGNsaWVudCk7CisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRlLCA0LCAwKTsKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGUsIDMsIDEpOworCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgMywgMSk7CisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCA2LCAwKTsKIAkJYnJlYWs7Ci0KLQljYXNlIEVOQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19lbmNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJnZXQgY2FwYWJpbGl0aWVzXG4iKTsKLQotCQljYXAtPmZsYWdzID0gVklERU9fRU5DT0RFUl9QQUwgfAotCQkJICAgICBWSURFT19FTkNPREVSX05UU0MgfAotCQkJICAgICBWSURFT19FTkNPREVSX0NDSVI7Ci0JCWNhcC0+aW5wdXRzID0gMjsKLQkJY2FwLT5vdXRwdXRzID0gMTsKKwljYXNlIDE6CisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRlLCA0LCAwKTsKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGUsIDMsIDEpOworCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgMywgMSk7CisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCA2LCAxKTsKIAkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9OT1JNOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBub3JtICVkXG4iLCAqaWFyZyk7Ci0KLQkJc3dpdGNoICgqaWFyZykgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDIsIDApOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDIsIDEpOwotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYSwgMCwgMCk7Ci0JCQkvL2J0ODU2X3NldGJpdChjbGllbnQsIDB4ZGEsIDAsIDEpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWVuY29kZXItPm5vcm0gPSAqaWFyZzsKLQkJaWYgKGRlYnVnICE9IDApCi0JCQlidDg1Nl9kdW1wKGNsaWVudCk7CisJY2FzZSAyOgkvKiBDb2xvciBiYXIgKi8KKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDMsIDApOworCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkZSwgNCwgMSk7CiAJCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfSU5QVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IGlucHV0ICVkXG4iLCAqaWFyZyk7Ci0KLQkJLyogV2Ugb25seSBoYXZlIHZpZGVvIGJ1cy4KLQkJICogaWFyZyA9IDA6IGlucHV0IGlzIGZyb20gYnQ4MTkKLQkJICogaWFyZyA9IDE6IGlucHV0IGlzIGZyb20gWlIzNjA2MCAqLwotCQlzd2l0Y2ggKCppYXJnKSB7Ci0JCWNhc2UgMDoKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGUsIDQsIDApOwotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkZSwgMywgMSk7Ci0JCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAzLCAxKTsKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDYsIDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGUsIDQsIDApOwotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkZSwgMywgMSk7Ci0JCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAzLCAxKTsKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDYsIDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoJLy8gQ29sb3IgYmFyCi0JCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAzLCAwKTsKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGUsIDQsIDEpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWlmIChkZWJ1ZyAhPSAwKQotCQkJYnQ4NTZfZHVtcChjbGllbnQpOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfU0VUX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgb3V0cHV0ICVkXG4iLCAqaWFyZyk7Ci0KLQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX0VOQUJMRV9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJZW5jb2Rlci0+ZW5hYmxlID0gISEqaWFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJlbmFibGUgb3V0cHV0ICVkXG4iLCBlbmNvZGVyLT5lbmFibGUpOwotCQlicmVhazsKLQl9Ci0KIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAoZGVidWcgIT0gMCkKKwkJYnQ4NTZfZHVtcChlbmNvZGVyKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBidDg1Nl9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9CVDg1NiwgMCk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4ODggPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgYnQ4NTZfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IGJ0ODU2X2dfY2hpcF9pZGVudCwKKwkuaW5pdCA9IGJ0ODU2X2luaXQsCit9OwogCi1JMkNfQ0xJRU5UX0lOU01PRDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIGJ0ODU2X3ZpZGVvX29wcyA9IHsKKwkuc19zdGRfb3V0cHV0ID0gYnQ4NTZfc19zdGRfb3V0cHV0LAorCS5zX3JvdXRpbmcgPSBidDg1Nl9zX3JvdXRpbmcsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBidDg1Nl9vcHMgPSB7CisJLmNvcmUgPSAmYnQ4NTZfY29yZV9vcHMsCisJLnZpZGVvID0gJmJ0ODU2X3ZpZGVvX29wcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgYnQ4NTZfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgYnQ4NTYgKmVuY29kZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKQEAgLTI0OSw0MSArMjE5LDM4IEBACiAJZW5jb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBidDg1NiksIEdGUF9LRVJORUwpOwogCWlmIChlbmNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWVuY29kZXItPm5vcm0gPSBWSURFT19NT0RFX05UU0M7Ci0JZW5jb2Rlci0+ZW5hYmxlID0gMTsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBlbmNvZGVyKTsKKwlzZCA9ICZlbmNvZGVyLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmYnQ4NTZfb3BzKTsKKwllbmNvZGVyLT5ub3JtID0gVjRMMl9TVERfTlRTQzsKIAotCWJ0ODU2X3dyaXRlKGNsaWVudCwgMHhkYywgMHgxOCk7Ci0JYnQ4NTZfd3JpdGUoY2xpZW50LCAweGRhLCAwKTsKLQlidDg1Nl93cml0ZShjbGllbnQsIDB4ZGUsIDApOworCWJ0ODU2X3dyaXRlKGVuY29kZXIsIDB4ZGMsIDB4MTgpOworCWJ0ODU2X3dyaXRlKGVuY29kZXIsIDB4ZGEsIDApOworCWJ0ODU2X3dyaXRlKGVuY29kZXIsIDB4ZGUsIDApOwogCi0JYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgMywgMSk7Ci0JLy9idDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCA2LCAwKTsKLQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCA0LCAxKTsKKwlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgMywgMSk7CisJLypidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgNiwgMCk7Ki8KKwlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgNCwgMSk7CiAKLQlzd2l0Y2ggKGVuY29kZXItPm5vcm0pIHsKKwlpZiAoZW5jb2Rlci0+bm9ybSAmIFY0TDJfU1REX05UU0MpCisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCAyLCAwKTsKKwllbHNlCisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCAyLCAxKTsKIAotCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAyLCAwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJREVPX01PREVfUEFMOgotCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAyLCAxKTsKLQkJYnJlYWs7Ci0JfQotCi0JYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgMSwgMSk7Ci0JYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkZSwgNCwgMCk7Ci0JYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkZSwgMywgMSk7CisJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDEsIDEpOworCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRlLCA0LCAwKTsKKwlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkZSwgMywgMSk7CiAKIAlpZiAoZGVidWcgIT0gMCkKLQkJYnQ4NTZfZHVtcChjbGllbnQpOworCQlidDg1Nl9kdW1wKGVuY29kZXIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGJ0ODU2X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fYnQ4NTYoc2QpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjk1LDggKzI2Miw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJidDg1NiIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0JUODU2LAotCS5jb21tYW5kID0gYnQ4NTZfY29tbWFuZCwKIAkucHJvYmUgPSBidDg1Nl9wcm9iZSwKIAkucmVtb3ZlID0gYnQ4NTZfcmVtb3ZlLAogCS5pZF90YWJsZSA9IGJ0ODU2X2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDg2Ni5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDg2Ni5jCmluZGV4IDU5NmY5ZTIuLjM1MGNhZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NjYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODY2LmMKQEAgLTM0LDEwICszNCwxMCBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJCcm9va3RyZWUtODY2IHZpZGVvIGVuY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNaWtlIEJlcm5zb24gJiBEYXZlIFBlcmtzIik7CkBAIC00NywyMiArNDcsMjIgQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCBidDg2NiB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwogCXU4IHJlZ1syNTZdOwotCi0JaW50IG5vcm07Ci0JaW50IGVuYWJsZTsKLQlpbnQgYnJpZ2h0OwotCWludCBjb250cmFzdDsKLQlpbnQgaHVlOwotCWludCBzYXQ7CiB9OwogCi1zdGF0aWMgaW50IGJ0ODY2X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHN1YmFkZHIsIHU4IGRhdGEpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBidDg2NiAqdG9fYnQ4NjYoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKLQlzdHJ1Y3QgYnQ4NjYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgYnQ4NjYsIHNkKTsKK30KKworc3RhdGljIGludCBidDg2Nl93cml0ZShzdHJ1Y3QgYnQ4NjYgKmVuY29kZXIsIHU4IHN1YmFkZHIsIHU4IGRhdGEpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJmVuY29kZXItPnNkKTsKIAl1OCBidWZmZXJbMl07CiAJaW50IGVycjsKIApAQCAtODksMTYzICs4OSwxMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidDg2Nl9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBidDg2Nl9zX3N0ZF9vdXRwdXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQogewotCXN0cnVjdCBidDg2NiAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNldCBub3JtICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpc3RkKTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBFTkNPREVSX0dFVF9DQVBBQklMSVRJRVM6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fZW5jb2Rlcl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZ2V0IGNhcGFiaWxpdGllc1xuIik7Ci0KLQkJY2FwLT5mbGFncwotCQkJPSBWSURFT19FTkNPREVSX1BBTAotCQkJfCBWSURFT19FTkNPREVSX05UU0MKLQkJCXwgVklERU9fRU5DT0RFUl9DQ0lSOwotCQljYXAtPmlucHV0cyA9IDI7Ci0JCWNhcC0+b3V0cHV0cyA9IDE7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfTk9STToKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgbm9ybSAlZFxuIiwgKmlhcmcpOwotCi0JCXN3aXRjaCAoKmlhcmcpIHsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWVuY29kZXItPm5vcm0gPSAqaWFyZzsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9JTlBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQkJc3RhdGljIGNvbnN0IF9fdTggaW5pdFtdID0gewotCQkJMHhjOCwgMHhjYywgLyogQ1JTQ0FMRSAqLwotCQkJMHhjYSwgMHg5MSwgLyogQ0JTQ0FMRSAqLwotCQkJMHhjYywgMHgyNCwgLyogWUMxNiB8IE9TRE5VTSAqLwotCQkJMHhkYSwgMHgwMCwgLyogICovCi0JCQkweGRjLCAweDI0LCAvKiBTRVRNT0RFIHwgUEFMICovCi0JCQkweGRlLCAweDAyLCAvKiBFQUNUSVZFICovCi0KLQkJCS8qIG92ZXJsYXkgY29sb3JzICovCi0JCQkweDcwLCAweEVCLCAweDkwLCAweDgwLCAweEIwLCAweDgwLCAvKiB3aGl0ZSAqLwotCQkJMHg3MiwgMHhBMiwgMHg5MiwgMHg4RSwgMHhCMiwgMHgyQywgLyogeWVsbG93ICovCi0JCQkweDc0LCAweDgzLCAweDk0LCAweDJDLCAweEI0LCAweDlDLCAvKiBjeWFuICovCi0JCQkweDc2LCAweDcwLCAweDk2LCAweDNBLCAweEI2LCAweDQ4LCAvKiBncmVlbiAqLwotCQkJMHg3OCwgMHg1NCwgMHg5OCwgMHhDNiwgMHhCOCwgMHhCOCwgLyogbWFnZW50YSAqLwotCQkJMHg3QSwgMHg0MSwgMHg5QSwgMHhENCwgMHhCQSwgMHg2NCwgLyogcmVkICovCi0JCQkweDdDLCAweDIzLCAweDlDLCAweDcyLCAweEJDLCAweEQ0LCAvKiBibHVlICovCi0JCQkweDdFLCAweDEwLCAweDlFLCAweDgwLCAweEJFLCAweDgwLCAvKiBibGFjayAqLwotCi0JCQkweDYwLCAweEVCLCAweDgwLCAweDgwLCAweGMwLCAweDgwLCAvKiB3aGl0ZSAqLwotCQkJMHg2MiwgMHhBMiwgMHg4MiwgMHg4RSwgMHhjMiwgMHgyQywgLyogeWVsbG93ICovCi0JCQkweDY0LCAweDgzLCAweDg0LCAweDJDLCAweGM0LCAweDlDLCAvKiBjeWFuICovCi0JCQkweDY2LCAweDcwLCAweDg2LCAweDNBLCAweGM2LCAweDQ4LCAvKiBncmVlbiAqLwotCQkJMHg2OCwgMHg1NCwgMHg4OCwgMHhDNiwgMHhjOCwgMHhCOCwgLyogbWFnZW50YSAqLwotCQkJMHg2QSwgMHg0MSwgMHg4QSwgMHhENCwgMHhjQSwgMHg2NCwgLyogcmVkICovCi0JCQkweDZDLCAweDIzLCAweDhDLCAweDcyLCAweGNDLCAweEQ0LCAvKiBibHVlICovCi0JCQkweDZFLCAweDEwLCAweDhFLCAweDgwLCAweGNFLCAweDgwLCAvKiBibGFjayAqLwotCQl9OwotCQlpbnQgaTsKLQkJdTggdmFsOwotCi0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluaXQpIC8gMjsgaSArPSAyKQotCQkJYnQ4NjZfd3JpdGUoY2xpZW50LCBpbml0W2ldLCBpbml0W2krMV0pOwotCi0JCXZhbCA9IGVuY29kZXItPnJlZ1sweGRjXTsKLQotCQlpZiAoKmlhcmcgPT0gMCkKLQkJCXZhbCB8PSAweDQwOyAvKiBDQlNXQVAgKi8KLQkJZWxzZQotCQkJdmFsICY9IH4weDQwOyAvKiAhQ0JTV0FQICovCi0KLQkJYnQ4NjZfd3JpdGUoY2xpZW50LCAweGRjLCB2YWwpOwotCi0JCXZhbCA9IGVuY29kZXItPnJlZ1sweGNjXTsKLQkJaWYgKCppYXJnID09IDIpCi0JCQl2YWwgfD0gMHgwMTsgLyogT1NEQkFSICovCi0JCWVsc2UKLQkJCXZhbCAmPSB+MHgwMTsgLyogIU9TREJBUiAqLwotCQlidDg2Nl93cml0ZShjbGllbnQsIDB4Y2MsIHZhbCk7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IGlucHV0ICVkXG4iLCAqaWFyZyk7Ci0KLQkJc3dpdGNoICgqaWFyZykgewotCQljYXNlIDA6Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfU0VUX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgb3V0cHV0ICVkXG4iLCAqaWFyZyk7Ci0KLQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX0VOQUJMRV9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCWVuY29kZXItPmVuYWJsZSA9ICEhKmlhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZW5hYmxlIG91dHB1dCAlZFxuIiwgZW5jb2Rlci0+ZW5hYmxlKTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSA0NzExOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCQlfX3U4IHZhbDsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzcXVhcmUgJWRcbiIsICppYXJnKTsKLQotCQl2YWwgPSBlbmNvZGVyLT5yZWdbMHhkY107Ci0JCWlmICgqaWFyZykKLQkJCXZhbCB8PSAxOyAvKiBTUVVBUkUgKi8KLQkJZWxzZQotCQkJdmFsICY9IH4xOyAvKiAhU1FVQVJFICovCi0JCWJ0ODY2X3dyaXRlKGNsaWVudCwgMHhkYywgdmFsKTsKLQkJYnJlYWs7Ci0JfQotCi0JZGVmYXVsdDoKKwkvKiBPbmx5IFBBTCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgYXQgdGhlIG1vbWVudCEgKi8KKwlpZiAoIShzdGQgJiBWNEwyX1NURF9OVFNDKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4ODggPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBpbnQgYnQ4NjZfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQoreworCXN0YXRpYyBjb25zdCBfX3U4IGluaXRbXSA9IHsKKwkJMHhjOCwgMHhjYywgLyogQ1JTQ0FMRSAqLworCQkweGNhLCAweDkxLCAvKiBDQlNDQUxFICovCisJCTB4Y2MsIDB4MjQsIC8qIFlDMTYgfCBPU0ROVU0gKi8KKwkJMHhkYSwgMHgwMCwgLyogICovCisJCTB4ZGMsIDB4MjQsIC8qIFNFVE1PREUgfCBQQUwgKi8KKwkJMHhkZSwgMHgwMiwgLyogRUFDVElWRSAqLwogCi1JMkNfQ0xJRU5UX0lOU01PRDsKKwkJLyogb3ZlcmxheSBjb2xvcnMgKi8KKwkJMHg3MCwgMHhFQiwgMHg5MCwgMHg4MCwgMHhCMCwgMHg4MCwgLyogd2hpdGUgKi8KKwkJMHg3MiwgMHhBMiwgMHg5MiwgMHg4RSwgMHhCMiwgMHgyQywgLyogeWVsbG93ICovCisJCTB4NzQsIDB4ODMsIDB4OTQsIDB4MkMsIDB4QjQsIDB4OUMsIC8qIGN5YW4gKi8KKwkJMHg3NiwgMHg3MCwgMHg5NiwgMHgzQSwgMHhCNiwgMHg0OCwgLyogZ3JlZW4gKi8KKwkJMHg3OCwgMHg1NCwgMHg5OCwgMHhDNiwgMHhCOCwgMHhCOCwgLyogbWFnZW50YSAqLworCQkweDdBLCAweDQxLCAweDlBLCAweEQ0LCAweEJBLCAweDY0LCAvKiByZWQgKi8KKwkJMHg3QywgMHgyMywgMHg5QywgMHg3MiwgMHhCQywgMHhENCwgLyogYmx1ZSAqLworCQkweDdFLCAweDEwLCAweDlFLCAweDgwLCAweEJFLCAweDgwLCAvKiBibGFjayAqLworCisJCTB4NjAsIDB4RUIsIDB4ODAsIDB4ODAsIDB4YzAsIDB4ODAsIC8qIHdoaXRlICovCisJCTB4NjIsIDB4QTIsIDB4ODIsIDB4OEUsIDB4YzIsIDB4MkMsIC8qIHllbGxvdyAqLworCQkweDY0LCAweDgzLCAweDg0LCAweDJDLCAweGM0LCAweDlDLCAvKiBjeWFuICovCisJCTB4NjYsIDB4NzAsIDB4ODYsIDB4M0EsIDB4YzYsIDB4NDgsIC8qIGdyZWVuICovCisJCTB4NjgsIDB4NTQsIDB4ODgsIDB4QzYsIDB4YzgsIDB4QjgsIC8qIG1hZ2VudGEgKi8KKwkJMHg2QSwgMHg0MSwgMHg4QSwgMHhENCwgMHhjQSwgMHg2NCwgLyogcmVkICovCisJCTB4NkMsIDB4MjMsIDB4OEMsIDB4NzIsIDB4Y0MsIDB4RDQsIC8qIGJsdWUgKi8KKwkJMHg2RSwgMHgxMCwgMHg4RSwgMHg4MCwgMHhjRSwgMHg4MCwgLyogYmxhY2sgKi8KKwl9OworCXN0cnVjdCBidDg2NiAqZW5jb2RlciA9IHRvX2J0ODY2KHNkKTsKKwl1OCB2YWw7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbml0KSAvIDI7IGkgKz0gMikKKwkJYnQ4NjZfd3JpdGUoZW5jb2RlciwgaW5pdFtpXSwgaW5pdFtpKzFdKTsKKworCXZhbCA9IGVuY29kZXItPnJlZ1sweGRjXTsKKworCWlmIChyb3V0ZS0+aW5wdXQgPT0gMCkKKwkJdmFsIHw9IDB4NDA7IC8qIENCU1dBUCAqLworCWVsc2UKKwkJdmFsICY9IH4weDQwOyAvKiAhQ0JTV0FQICovCisKKwlidDg2Nl93cml0ZShlbmNvZGVyLCAweGRjLCB2YWwpOworCisJdmFsID0gZW5jb2Rlci0+cmVnWzB4Y2NdOworCWlmIChyb3V0ZS0+aW5wdXQgPT0gMikKKwkJdmFsIHw9IDB4MDE7IC8qIE9TREJBUiAqLworCWVsc2UKKwkJdmFsICY9IH4weDAxOyAvKiAhT1NEQkFSICovCisJYnQ4NjZfd3JpdGUoZW5jb2RlciwgMHhjYywgdmFsKTsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNldCBpbnB1dCAlZFxuIiwgcm91dGUtPmlucHV0KTsKKworCXN3aXRjaCAocm91dGUtPmlucHV0KSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwljYXNlIDI6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworI2lmIDAKKy8qIENvZGUgdG8gc2V0dXAgc3F1YXJlIHBpeGVscywgbWlnaHQgYmUgb2Ygc29tZSB1c2UgaW4gdGhlIGZ1dHVyZSwKKyAgIGJ1dCBpcyBjdXJyZW50bHkgdW51c2VkLiAqLworCXZhbCA9IGVuY29kZXItPnJlZ1sweGRjXTsKKwlpZiAoKmlhcmcpCisJCXZhbCB8PSAxOyAvKiBTUVVBUkUgKi8KKwllbHNlCisJCXZhbCAmPSB+MTsgLyogIVNRVUFSRSAqLworCWJ0ODY2X3dyaXRlKGNsaWVudCwgMHhkYywgdmFsKTsKKyNlbmRpZgorCitzdGF0aWMgaW50IGJ0ODY2X2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX0JUODY2LCAwKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBidDg2Nl9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gYnQ4NjZfZ19jaGlwX2lkZW50LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgYnQ4NjZfdmlkZW9fb3BzID0geworCS5zX3N0ZF9vdXRwdXQgPSBidDg2Nl9zX3N0ZF9vdXRwdXQsCisJLnNfcm91dGluZyA9IGJ0ODY2X3Nfcm91dGluZywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGJ0ODY2X29wcyA9IHsKKwkuY29yZSA9ICZidDg2Nl9jb3JlX29wcywKKwkudmlkZW8gPSAmYnQ4NjZfdmlkZW9fb3BzLAorfTsKIAogc3RhdGljIGludCBidDg2Nl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBidDg2NiAqZW5jb2RlcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCiAJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKIAkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwpAQCAtMjUzLDIwICsyMTAsMTggQEAKIAllbmNvZGVyID0ga3phbGxvYyhzaXplb2YoKmVuY29kZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZW5jb2RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGVuY29kZXIpOworCXNkID0gJmVuY29kZXItPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZidDg2Nl9vcHMpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGJ0ODY2X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKLQlyZXR1cm4gMDsKLX0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLXN0YXRpYyBpbnQgYnQ4NjZfbGVnYWN5X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlyZXR1cm4gYWRhcHRlci0+aWQgPT0gSTJDX0hXX0JfWlIzNjA2NzsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fYnQ4NjYoc2QpKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGJ0ODY2X2lkW10gPSB7CkBAIC0yNzcsMTAgKzIzMiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJidDg2NiIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0JUODY2LAotCS5jb21tYW5kID0gYnQ4NjZfY29tbWFuZCwKIAkucHJvYmUgPSBidDg2Nl9wcm9iZSwKIAkucmVtb3ZlID0gYnQ4NjZfcmVtb3ZlLAotCS5sZWdhY3lfcHJvYmUgPSBidDg2Nl9sZWdhY3lfcHJvYmUsCiAJLmlkX3RhYmxlID0gYnQ4NjZfaWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9LY29uZmlnCmluZGV4IGNlNzFlOGUuLjMwNzdjNDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9LY29uZmlnCkBAIC0xMCw3ICsxMCw3IEBACiAJc2VsZWN0IFZJREVPX01TUDM0MDAgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlzZWxlY3QgVklERU9fVFZBVURJTyBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCXNlbGVjdCBWSURFT19UREE3NDMyIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCi0Jc2VsZWN0IFZJREVPX1REQTk4NzUgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKwlzZWxlY3QgVklERU9fU0FBNjU4OCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIEJUODQ4IGJhc2VkIGZyYW1lIGdyYWJiZXIvb3ZlcmxheSBib2FyZHMuIFRoaXMgaW5jbHVkZXMKIAkgIHRoZSBNaXJvLCBIYXVwcGF1Z2UgYW5kIFNUQiBib2FyZHMuIFBsZWFzZSByZWFkIHRoZSBtYXRlcmlhbCBpbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwppbmRleCBkMjRkY2MwLi5iOWMzYmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwpAQCAtNzMsNiArNzMsMTEgQEAKIAogc3RhdGljIHZvaWQgZ2VvdmlzaW9uX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpOwogCitzdGF0aWMgdm9pZCBwaHl0ZWNfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCk7CisKK3N0YXRpYyB2b2lkIGd2ODAwc19tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KTsKK3N0YXRpYyB2b2lkIGd2ODAwc19pbml0KHN0cnVjdCBidHR2ICpidHYpOworCiBzdGF0aWMgaW50IHRlcnJhdGVjX2FjdGl2ZV9yYWRpb191cGdyYWRlKHN0cnVjdCBidHR2ICpidHYpOwogc3RhdGljIGludCB0ZWE1NzU3X3JlYWQoc3RydWN0IGJ0dHYgKmJ0dik7CiBzdGF0aWMgaW50IHRlYTU3NTdfd3JpdGUoc3RydWN0IGJ0dHYgKmJ0diwgaW50IHZhbHVlKTsKQEAgLTkxLDEyICs5NiwxMCBAQAogc3RhdGljIHVuc2lnbmVkIGludCB0dW5lcltCVFRWX01BWF0gID0geyBbIDAgLi4uIChCVFRWX01BWC0xKSBdID0gVU5TRVQgfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc3Zoc1tCVFRWX01BWF0gICA9IHsgWyAwIC4uLiAoQlRUVl9NQVgtMSkgXSA9IFVOU0VUIH07CiBzdGF0aWMgdW5zaWduZWQgaW50IHJlbW90ZVtCVFRWX01BWF0gPSB7IFsgMCAuLi4gKEJUVFZfTUFYLTEpIF0gPSBVTlNFVCB9Oworc3RhdGljIHVuc2lnbmVkIGludCBhdWRpb2RldltCVFRWX01BWF07CitzdGF0aWMgdW5zaWduZWQgaW50IHNhYTY1ODhbQlRUVl9NQVhdOwogc3RhdGljIHN0cnVjdCBidHR2ICAqbWFzdGVyW0JUVFZfTUFYXSA9IHsgWyAwIC4uLiAoQlRUVl9NQVgtMSkgXSA9IE5VTEwgfTsKLSNpZmRlZiBNT0RVTEUKLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXV0b2xvYWQgPSAxOwotI2Vsc2UKLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXV0b2xvYWQ7Ci0jZW5kaWYKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXV0b2xvYWQgPSBVTlNFVDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ3Bpb21hc2sgPSBVTlNFVDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXVkaW9hbGwgPSBVTlNFVDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXVkaW9tdXhbNV0gPSB7IFsgMCAuLi4gNCBdID0gVU5TRVQgfTsKQEAgLTExNSw2ICsxMTgsNyBAQAogbW9kdWxlX3BhcmFtX2FycmF5KHR1bmVyLCAgICBpbnQsIE5VTEwsIDA0NDQpOwogbW9kdWxlX3BhcmFtX2FycmF5KHN2aHMsICAgICBpbnQsIE5VTEwsIDA0NDQpOwogbW9kdWxlX3BhcmFtX2FycmF5KHJlbW90ZSwgICBpbnQsIE5VTEwsIDA0NDQpOworbW9kdWxlX3BhcmFtX2FycmF5KGF1ZGlvZGV2LCBpbnQsIE5VTEwsIDA0NDQpOwogbW9kdWxlX3BhcmFtX2FycmF5KGF1ZGlvbXV4LCBpbnQsIE5VTEwsIDA0NDQpOwogCiBNT0RVTEVfUEFSTV9ERVNDKHRyaXRvbjEsInNldCBFVEJGIHBjaSBjb25maWcgYml0ICIKQEAgLTEyNSw3ICsxMjksMTQgQEAKIE1PRFVMRV9QQVJNX0RFU0MoY2FyZCwic3BlY2lmeSBUVi9ncmFiYmVyIGNhcmQgbW9kZWwsIHNlZSBDQVJETElTVCBmaWxlIGZvciBhIGxpc3QiKTsKIE1PRFVMRV9QQVJNX0RFU0MocGxsLCJzcGVjaWZ5IGluc3RhbGxlZCBjcnlzdGFsICgwPW5vbmUsIDI4PTI4IE1IeiwgMzU9MzUgTUh6KSIpOwogTU9EVUxFX1BBUk1fREVTQyh0dW5lciwic3BlY2lmeSBpbnN0YWxsZWQgdHVuZXIgdHlwZSIpOwotTU9EVUxFX1BBUk1fREVTQyhhdXRvbG9hZCwiYXV0b21hdGljYWxseSBsb2FkIGkyYyBtb2R1bGVzIGxpa2UgdHVuZXIubywgZGVmYXVsdCBpcyAxICh5ZXMpIik7CitNT0RVTEVfUEFSTV9ERVNDKGF1dG9sb2FkLCAib2Jzb2xldGUgb3B0aW9uLCBwbGVhc2UgZG8gbm90IHVzZSBhbnltb3JlIik7CitNT0RVTEVfUEFSTV9ERVNDKGF1ZGlvZGV2LCAic3BlY2lmeSBhdWRpbyBkZXZpY2U6XG4iCisJCSJcdFx0LTEgPSBubyBhdWRpb1xuIgorCQkiXHRcdCAwID0gYXV0b2RldGVjdCAoZGVmYXVsdClcbiIKKwkJIlx0XHQgMSA9IG1zcDM0MDBcbiIKKwkJIlx0XHQgMiA9IHRkYTc0MzJcbiIKKwkJIlx0XHQgMyA9IHR2YXVkaW8iKTsKK01PRFVMRV9QQVJNX0RFU0Moc2FhNjU4OCwgImlmIDEsIHRoZW4gbG9hZCB0aGUgc2FhNjU4OCBSRFMgbW9kdWxlLCBkZWZhdWx0ICgwKSBpcyB0byB1c2UgdGhlIGNhcmQgZGVmaW5pdGlvbi4iKTsKIE1PRFVMRV9QQVJNX0RFU0Mobm9fb3ZlcmxheSwiYWxsb3cgb3ZlcnJpZGUgb3ZlcmxheSBkZWZhdWx0ICgwIGRpc2FibGVzLCAxIGVuYWJsZXMpIgogCQkiIFtzb21lIFZJQS9TSVMgY2hpcHNldHMgYXJlIGtub3duIHRvIGhhdmUgcHJvYmxlbSB3aXRoIG92ZXJsYXldIik7CiAKQEAgLTI0Niw2ICsyNTcsMTAgQEAKIAl7IDB4YTE4MmZmMGQsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAogCXsgMHhhMTgyZmYwZSwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCiAJeyAweGExODJmZjBmLCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKKwl7IDB4ZjA1MDAwMDAsIEJUVFZfQk9BUkRfSVZDRTg3ODQsICAgICAgIklWQ0UtODc4NCIgfSwKKwl7IDB4ZjA1MDAwMDEsIEJUVFZfQk9BUkRfSVZDRTg3ODQsICAgICAgIklWQ0UtODc4NCIgfSwKKwl7IDB4ZjA1MDAwMDIsIEJUVFZfQk9BUkRfSVZDRTg3ODQsICAgICAgIklWQ0UtODc4NCIgfSwKKwl7IDB4ZjA1MDAwMDMsIEJUVFZfQk9BUkRfSVZDRTg3ODQsICAgICAgIklWQ0UtODc4NCIgfSwKIAogCXsgMHg0MTQyNDM0NCwgQlRUVl9CT0FSRF9HUkFORFRFQywgICAgICAiR3JhbmRUZWMgTXVsdGkgQ2FwdHVyZSIgfSwKIAl7IDB4MDEwMjAzMDQsIEJUVFZfQk9BUkRfWEdVQVJELCAgICAgICAgIkdyYW5kdGVjIEdyYW5kIFgtR3VhcmQiIH0sCkBAIC0yODksNiArMzA0LDggQEAKIAkvKiBEdXBsaWNhdGUgUENJIElELCByZWNvbmZpZ3VyZSBmb3IgdGhpcyBib2FyZCBkdXJpbmcgdGhlIGVlcHJvbSByZWFkLgogCSogeyAweDEzZWIwMDcwLCBCVFRWX0JPQVJEX0hBVVBQQVVHRV9JTVBBQ1RWQ0IsICAiSGF1cHBhdWdlIEltcGFjdFZDQiIgfSwgKi8KIAorCXsgMHgxMDllMDM2ZSwgQlRUVl9CT0FSRF9DT05DRVBUUk9OSUNfQ1RWRk1JMiwJIkNvbmNlcHRyb25pYyBDVFZGTWkgdjIifSwKKwogCS8qIERWQiBjYXJkcyAodXNpbmcgcGNpIGZ1bmN0aW9uIC4xIGZvciBtcGVnIGRhdGEgeGZlcikgKi8KIAl7IDB4MDAxYzExYmQsIEJUVFZfQk9BUkRfUElOTkFDTEVTQVQsICAgIlBpbm5hY2xlIFBDVFYgU2F0IiB9LAogCXsgMHgwMTAxMDA3MSwgQlRUVl9CT0FSRF9ORUJVTEFfRElHSVRWLCAiTmVidWxhIEVsZWN0cm9uaWNzIERpZ2lUViIgfSwKQEAgLTMwNSw2ICszMjIsMjAgQEAKIAl7IDB4ZDIwMGRiYzAsIEJUVFZfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl8yLAkiRFZpQ08gRnVzaW9uSERUViAyIiB9LAogCXsgMHg3NjNjMDA4YSwgQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y2MDAsCSJHZW9WaXNpb24gR1YtNjAwIiB9LAogCXsgMHgxODAxMTAwMCwgQlRUVl9CT0FSRF9FTkxUVl9GTV8yLAkiRW5jb3JlIEVOTCBUVi1GTS0yIiB9LAorCXsgMHg3NjNkODAwYSwgQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y4MDBTLCAiR2VvVmlzaW9uIEdWLTgwMChTKSAobWFzdGVyKSIgfSwKKwl7IDB4NzYzZDgwMGIsIEJUVFZfQk9BUkRfR0VPVklTSU9OX0dWODAwU19TTCwJIkdlb1Zpc2lvbiBHVi04MDAoUykgKHNsYXZlKSIgfSwKKwl7IDB4NzYzZDgwMGMsIEJUVFZfQk9BUkRfR0VPVklTSU9OX0dWODAwU19TTCwJIkdlb1Zpc2lvbiBHVi04MDAoUykgKHNsYXZlKSIgfSwKKwl7IDB4NzYzZDgwMGQsIEJUVFZfQk9BUkRfR0VPVklTSU9OX0dWODAwU19TTCwJIkdlb1Zpc2lvbiBHVi04MDAoUykgKHNsYXZlKSIgfSwKKworCXsgMHgxNTQwMTgzMCwgQlRUVl9CT0FSRF9QVjE4MywgICAgICAgICAiUHJvdmlkZW8gUFYxODMtMSIgfSwKKwl7IDB4MTU0MDE4MzEsIEJUVFZfQk9BUkRfUFYxODMsICAgICAgICAgIlByb3ZpZGVvIFBWMTgzLTIiIH0sCisJeyAweDE1NDAxODMyLCBCVFRWX0JPQVJEX1BWMTgzLCAgICAgICAgICJQcm92aWRlbyBQVjE4My0zIiB9LAorCXsgMHgxNTQwMTgzMywgQlRUVl9CT0FSRF9QVjE4MywgICAgICAgICAiUHJvdmlkZW8gUFYxODMtNCIgfSwKKwl7IDB4MTU0MDE4MzQsIEJUVFZfQk9BUkRfUFYxODMsICAgICAgICAgIlByb3ZpZGVvIFBWMTgzLTUiIH0sCisJeyAweDE1NDAxODM1LCBCVFRWX0JPQVJEX1BWMTgzLCAgICAgICAgICJQcm92aWRlbyBQVjE4My02IiB9LAorCXsgMHgxNTQwMTgzNiwgQlRUVl9CT0FSRF9QVjE4MywgICAgICAgICAiUHJvdmlkZW8gUFYxODMtNyIgfSwKKwl7IDB4MTU0MDE4MzcsIEJUVFZfQk9BUkRfUFYxODMsICAgICAgICAgIlByb3ZpZGVvIFBWMTgzLTgiIH0sCisKIAl7IDAsIC0xLCBOVUxMIH0KIH07CiAKQEAgLTMxNiw1OSArMzQ3LDUwIEBACiAJW0JUVFZfQk9BUkRfVU5LTk9XTl0gPSB7CiAJCS5uYW1lCQk9ICIgKioqIFVOS05PV04vR0VORVJJQyAqKiogIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKIAkJLnN2aHMJCT0gMiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX01JUk9dID0gewogCQkubmFtZQkJPSAiTUlSTyBQQ1RWIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMTUsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDIsIDAsIDAsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDEwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0hBVVBQQVVHRV0gPSB7CiAJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgKGJ0ODQ4KSIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDcsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAsIDEsIDIsIDMgfSwKIAkJLmdwaW9tdXRlIAk9IDQsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfU1RCXSA9IHsKIAkJLm5hbWUJCT0gIlNUQiwgR2F0ZXdheSBQL04gNjAwMDY5OSAoYnQ4NDgpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gNywKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgNCwgMCwgMiwgMyB9LAogCQkuZ3Bpb211dGUgCT0gMSwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQywKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS5oYXNfcmFkaW8gICAgICA9IDEsCiAJfSwKQEAgLTM3NywyMDIgKzM5OSwxNzcgQEAKIAlbQlRUVl9CT0FSRF9JTlRFTF0gPSB7CiAJCS5uYW1lCQk9ICJJbnRlbCBDcmVhdGUgYW5kIFNoYXJlIFBDSS8gU21hcnQgVmlkZW8gUmVjb3JkZXIgSUlJIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAwLAotCQkudHVuZXIJCT0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAgfSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAwLAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfRElBTU9ORF0gPSB7CiAJCS5uYW1lCQk9ICJEaWFtb25kIERUVjIwMDAiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAzLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLmdwaW9tdXggCT0geyAwLCAxLCAwLCAxIH0sCiAJCS5ncGlvbXV0ZSAJPSAzLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0FWRVJNRURJQV0gPSB7CiAJCS5uYW1lCQk9ICJBVmVyTWVkaWEgVFZQaG9uZSIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDMsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb21hc2sJPSAweDBmLAogCQkuZ3Bpb211eCAJPSB7IDB4MGMsIDB4MDQsIDB4MDgsIDB4MDQgfSwKIAkJLyogICAgICAgICAgICAgICAgMHgwNCBmb3Igc29tZSBjYXJkcyA/PyAqLwogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmF1ZGlvX21vZGVfZ3Bpbz0gYXZlcm1lZGlhX3R2cGhvbmVfYXVkaW8sCiAJCS5oYXNfcmVtb3RlICAgICA9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9NQVRSSVhfVklTSU9OXSA9IHsKIAkJLm5hbWUJCT0gIk1BVFJJWC1WaXNpb24gTVYtRGVsdGEiLAogCQkudmlkZW9faW5wdXRzCT0gNSwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMywKIAkJLmdwaW9tYXNrCT0gMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAsIDAgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMCwgMCksCiAJCS5ncGlvbXV4IAk9IHsgMCB9LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCi0JCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDA4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9GTFlWSURFT10gPSB7CiAJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyBJSSAoQnQ4NDgpIExSMjYgLyBNQVhJIFRWIFZpZGVvIFBDSTIgTFIyNiIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4YzAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwLCAweGMwMCwgMHg4MDAsIDB4NDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweGMwMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfVFVSQk9UVl0gPSB7CiAJCS5uYW1lCQk9ICJJTVMvSVhtaWNybyBUdXJib1RWIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMywKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMSwgMSwgMiwgMyB9LAogCQkubmVlZHNfdHZhdWRpbwk9IDAsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1RFTUlDX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfSEFVUFBBVUdFODc4XSA9IHsKIAkJLm5hbWUJCT0gIkhhdXBwYXVnZSAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgwZiwgLyogb2xkOiA3ICovCi0JCS5tdXhzZWwJCT0geyAyLCAwLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDAsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAsIDEsIDIsIDMgfSwKIAkJLmdwaW9tdXRlIAk9IDQsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX01JUk9QUk9dID0gewogCQkubmFtZQkJPSAiTUlSTyBQQ1RWIHBybyIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MzAxNGYsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDB4MjAwMDEsMHgxMDAwMSwgMCwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMTAsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkvKiAtLS0tIGNhcmQgMHgwYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfQURTVEVDSF9UVl0gPSB7CiAJCS5uYW1lCQk9ICJBRFMgVGVjaG5vbG9naWVzIENoYW5uZWwgU3VyZmVyIFRWIChidDg0OCkiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAxNSwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMTMsIDE0LCAxMSwgNyB9LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0FWRVJNRURJQTk4XSA9IHsKIAkJLm5hbWUJCT0gIkFWZXJNZWRpYSBUVkNhcHR1cmUgOTgiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDQsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSA0LCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAxNSwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMTMsIDE0LCAxMSwgNyB9LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5tc3AzNHh4X2FsdCAgICA9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5hdWRpb19tb2RlX2dwaW89IGF2ZXJtZWRpYV90dl9zdGVyZW9fYXVkaW8sCiAJCS5ub19ncGlvaXJxICAgICA9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9WSFhdID0gewogCQkubmFtZQkJPSAiQWltc2xhYiBWaWRlbyBIaWdod2F5IFh0cmVtZSAoVkhYKSIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDcsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAsIDIsIDEsIDMgfSwgLyogb2xkOiB7MCwgMSwgMiwgMywgNH0gKi8KIAkJLmdwaW9tdXRlIAk9IDQsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1pPTFRSSVhdID0gewogCQkubmFtZQkJPSAiWm9sdHJpeCBUVi1NYXgiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAxNSwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMCwgMSwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMTAsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkvKiAtLS0tIGNhcmQgMHgxMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfUElYVklFV1BMQVlUVl0gPSB7CiAJCS5uYW1lCQk9ICJQcm9saW5rIFBpeGVsdmlldyBQbGF5VFYgKGJ0ODc4KSIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MDFmZTAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLyogMjAwMy0xMC0yMCBieSAiQW50b24gQS4gQXJhcG92IiA8YXJhcG92QG1haWwucnU+ICovCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMHgwMDFlMDAsIDAsIDB4MDE4MDAwLCAweDAxNDAwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHgwMDIwMDAsCkBAIC01ODAsMTk0ICs1NzcsMTcwIEBACiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfV0lOVklFV182MDFdID0gewogCQkubmFtZQkJPSAiTGVhZHRlayBXaW5WaWV3IDYwMSIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4ODMwMGY4LAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSwwIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEsIDApLAogCQkuZ3Bpb211eCAJPSB7IDB4NGZhMDA3LDB4Y2ZhMDA3LDB4Y2ZhMDA3LDB4Y2ZhMDA3IH0sCiAJCS5ncGlvbXV0ZSAJPSAweGNmYTAwNywKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS52b2x1bWVfZ3Bpbwk9IHdpbnZpZXdfdm9sdW1lLAogCQkuaGFzX3JhZGlvCT0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX0FWRUNfSU5URVJDQVBdID0gewogCQkubmFtZQkJPSAiQVZFQyBJbnRlcmNhcHR1cmUiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDIsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAyLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAxLCAwLCAwLCAwIH0sCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfTElGRV9GTFlLSVRdID0gewogCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gSUkgRVogL0ZseUtpdCBMUjM4IEJ0ODQ4IChjYXB0dXJlIG9ubHkpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gVU5TRVQsCi0JCS5zdmhzCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLworCQkuc3ZocwkJPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sJPSAweDhkZmYwMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCB9LAogCQkubm9fbXNwMzR4eAk9IDEsCi0JCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDE0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9DRUlfUkFGRkxFU10gPSB7CiAJCS5uYW1lCQk9ICJDRUkgUmFmZmxlcyBDYXJkIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAzLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMywgKi8KIAkJLnN2aHMJCT0gMiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0NPTkZFUkVOQ0VUVl0gPSB7CiAJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyA5OC8gTHVja3kgU3RhciBJbWFnZSBXb3JsZCBDb25mZXJlbmNlVFYgTFI1MCIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMiwgIC8qIHR1bmVyLCBsaW5lIGluICovCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAyLCAgdHVuZXIsIGxpbmUgaW4gKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgxODAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MTgwMCwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUxfSSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfUEhPRUJFX1RWTUFTXSA9IHsKIAkJLm5hbWUJCT0gIkFza2V5IENQSDA1MC8gUGhvZWJlIFR2IE1hc3RlciArIEZNIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHhjMDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAsIDEsIDB4ODAwLCAweDQwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHhjMDAsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX01PRFRFQ18yMDVdID0gewogCQkubmFtZQkJPSAiTW9kdWxhciBUZWNobm9sb2d5IE1NMjAxL01NMjAyL01NMjA1L01NMjEwL01NMjE1IFBDVFYsIGJ0ODc4IiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKLQkJLnN2aHMJCT0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCisJCS5zdmhzCQk9IE5PX1NWSFMsCisJCS5oYXNfZGlnX2luCT0gMSwKIAkJLmdwaW9tYXNrCT0gNywKLQkJLm11eHNlbAkJPSB7IDIsIDMsIC0xIH0sCi0JCS5kaWdpdGFsX21vZGUgICA9IERJR0lUQUxfTU9ERV9DQU1FUkEsCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDApLCAvKiBpbnB1dCAyIGlzIGRpZ2l0YWwgKi8KKwkJLyogLmRpZ2l0YWxfbW9kZT0gRElHSVRBTF9NT0RFX0NBTUVSQSwgKi8KIAkJLmdwaW9tdXggCT0geyAwLCAwLCAwLCAwIH0sCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BTFBTX1RTQkI1X1BBTF9JLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDE4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYxXSA9IHsKIAkJLm5hbWUJCT0gIkFza2V5IENQSDA1WC8wNlggKGJ0ODc4KSBbbWFueSB2ZW5kb3JzXSIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4ZTAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0gezB4NDAwLCAweDQwMCwgMHg0MDAsIDB4NDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweGMwMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfVk9CSVNfQk9PU1RBUl0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJUZXJyYXRlYyBUZXJyYVRWKyBWZXJzaW9uIDEuMCAoQnQ4NDgpLyBUZXJyYSBUVmFsdWUgVmVyc2lvbiAxLjAvIFZvYmlzIFRWLUJvb3N0YXIiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDFmMGZmZiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMHgyMDAwMCwgMHgzMDAwMCwgMHgxMDAwMCwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMHg0MDAwMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAwLAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5hdWRpb19tb2RlX2dwaW89IHRlcnJhdHZfYXVkaW8sCiAJfSwKIAlbQlRUVl9CT0FSRF9IQVVQUEFVR19XQ0FNXSA9IHsKIAkJLm5hbWUJCT0gIkhhdXBwYXVnZSBXaW5DYW0gbmV3ZXIgKGJ0ODc4KSIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDMsCiAJCS5ncGlvbWFzawk9IDcsCi0JCS5tdXhzZWwJCT0geyAyLCAwLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDAsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAsIDEsIDIsIDMgfSwKIAkJLmdwaW9tdXRlIAk9IDQsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfTUFYSV0gPSB7CiAJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyA5OC8gTUFYSSBUViBWaWRlbyBQQ0kyIExSNTAiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDIsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAyLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDE4MDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAsIDB4ODAwLCAweDEwMDAsIDB4MTAwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHgxODAwLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19TRUNBTSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkvKiAtLS0tIGNhcmQgMHgxYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfVEVSUkFUVl0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJUZXJyYXRlYyBUZXJyYVRWKyBWZXJzaW9uIDEuMSAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgxZjBmZmYsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDB4MjAwMDAsIDB4MzAwMDAsIDB4MTAwMDAsIDB4MDAwMDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4NDAwMDAsCiAJCS5uZWVkc190dmF1ZGlvCT0gMCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuYXVkaW9fbW9kZV9ncGlvPSB0ZXJyYXR2X2F1ZGlvLAogCQkvKiBHUElPIHdpcmluZzoKIAkJRXh0ZXJuYWwgMjAgcGluIGNvbm5lY3RvciAoZm9yIEFjdGl2ZSBSYWRpbyBVcGdyYWRlIGJvYXJkKQpAQCAtODA1LDg3ICs3NzgsNzcgQEAKIAkJLyogSmFubmlrIEZyaXRzY2ggPGphbm5pa0B0ZWNoZmFrLnVuaS1iaWVsZWZlbGQuZGU+ICovCiAJCS5uYW1lCQk9ICJJbWFnZW5hdGlvbiBQWEMyMDAiLAogCQkudmlkZW9faW5wdXRzCT0gNSwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMSwgLyogd2FzOiA0ICovCiAJCS5ncGlvbWFzawk9IDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwLCAwfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMCwgMCksCiAJCS5ncGlvbXV4IAk9IHsgMCB9LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCi0JCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5tdXhzZWxfaG9vayAgICA9IFBYQzIwMF9tdXhzZWwsCiAKIAl9LAogCVtCVFRWX0JPQVJEX0ZMWVZJREVPXzk4XSA9IHsKIAkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4IExSNTAiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDE4MDAsICAvKiAweDhkZmUwMCAqLwotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwLCAweDA4MDAsIDB4MTAwMCwgMHgxMDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDE4MDAsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfSVBST1RWXSA9IHsKIAkJLm5hbWUJCT0gIkZvcm1hYyBpUHJvVFYsIEZvcm1hYyBQcm9UViBJIChidDg0OCkiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAzLAogCQkuZ3Bpb21hc2sJPSAxLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAxLCAwLCAwLCAwIH0sCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkvKiAtLS0tIGNhcmQgMHgyMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfSU5URUxfQ19TX1BDSV0gPSB7CiAJCS5uYW1lCQk9ICJJbnRlbCBDcmVhdGUgYW5kIFNoYXJlIFBDSS8gU21hcnQgVmlkZW8gUmVjb3JkZXIgSUlJIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAwLAotCQkudHVuZXIJCT0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAgfSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAwLAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfVEVSUkFUVkFMVUVdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiVGVycmF0ZWMgVGVycmFUVmFsdWUgVmVyc2lvbiBCdDg3OCIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4ZmZmZjAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAweDUwMCwgMCwgMHgzMDAsIDB4OTAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDkwMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfV0lORkFTVDIwMDBdID0gewogCQkubmFtZQkJPSAiTGVhZHRlayBXaW5GYXN0IDIwMDAvIFdpbkZhc3QgMjAwMCBYUCIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxLCAwIH0sIC8qIFRWLCBDVmlkLCBTVmlkLCBDVmlkIG92ZXIgU1ZpZCBjb25uZWN0b3IgKi8KKwkJLyogVFYsIENWaWQsIFNWaWQsIENWaWQgb3ZlciBTVmlkIGNvbm5lY3RvciAqLworCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxLCAwKSwKIAkJLyogQWxleGFuZGVyIFZhcmFraW4gPGF2YXJha2luQGhvdG1haWwuY29tPiBbc3RlcmVvIHZlcnNpb25dICovCiAJCS5ncGlvbWFzawk9IDB4YjMzMDAwLAogCQkuZ3Bpb211eCAJPSB7IDB4MTIyMDAwLDB4MTAwMCwweDAwMDAsMHg2MjAwMDAgfSwKQEAgLTkwNiwyMTcgKzg2OSwxOTEgQEAKIAkJLmhhc19yYWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsIC8qIGRlZmF1bHQgZm9yIG5vdywgZ3BpbyByZWFkcyBCRkZGMDYgZm9yIFBhbCBiZytkayAqLwogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5hdWRpb19tb2RlX2dwaW89IHdpbmZhc3QyMDAwX2F1ZGlvLAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfQ0hST05PU19WUzJdID0gewogCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOTggTFI1MCAvIENocm9ub3MgVmlkZW8gU2h1dHRsZSBJSSIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMywKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDMsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MTgwMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDE4MDAsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDI0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9UWVBIT09OX1RWSUVXXSA9IHsKIAkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4Rk0gTFI1MCAvIFR5cGhvb24gVFZpZXcgVFYvRk0gVHVuZXIiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDMsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAzLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDE4MDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAsIDB4ODAwLCAweDEwMDAsIDB4MTAwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHgxODAwLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JhZGlvCT0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX1BYRUxWV1BMVFZQUk9dID0gewogCQkubmFtZQkJPSAiUHJvbGluayBQaXhlbFZpZXcgUGxheVRWIHBybyIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4ZmYsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDB4MjEsIDB4MjAsIDB4MjQsIDB4MmMgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MjksCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjNdID0gewogCQkubmFtZQkJPSAiQXNrZXkgQ1BIMDZYIFRWaWV3OTkiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDU1MWUwMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5ncGlvbXV4IAk9IHsgMHg1NTE0MDAsIDB4NTUxMjAwLCAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDU1MWMwMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTF9JLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmVtb3RlICAgICA9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9QSU5OQUNMRV0gPSB7CiAJCS5uYW1lCQk9ICJQaW5uYWNsZSBQQ1RWIFN0dWRpby9SYXZlIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgwMzAwMEYsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDIsIDB4ZDAwMDEsIDAsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDEsCiAJCS5uZWVkc190dmF1ZGlvCT0gMCwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4MjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX1NUQjJdID0gewogCQkubmFtZQkJPSAiU1RCIFRWIFBDSSBGTSwgR2F0ZXdheSBQL04gNjAwMDcwNCAoYnQ4NzgpLCAzRGZ4IFZvb2Rvb1RWIDEwMCIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDcsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDQsIDAsIDIsIDMgfSwKIAkJLmdwaW9tdXRlIAk9IDEsCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0MsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfQVZQSE9ORTk4XSA9IHsKIAkJLm5hbWUJCT0gIkFWZXJNZWRpYSBUVlBob25lIDk4IiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSA0LAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gNCwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMTUsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDEzLCA0LCAxMSwgNyB9LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmFkaW8JPSAxLAogCQkuYXVkaW9fbW9kZV9ncGlvPSBhdmVybWVkaWFfdHZwaG9uZV9hdWRpbywKIAl9LAogCVtCVFRWX0JPQVJEX1BWOTUxXSA9IHsKIAkJLm5hbWUJCT0gIlByb1ZpZGVvIFBWOTUxIiwgLyogcGljMTZjNTQgKi8KIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDF9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwLCAwLCAwLCAwfSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMX0ksCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX09OQUlSX1RWXSA9IHsKIAkJLm5hbWUJCT0gIkxpdHRsZSBPbkFpciBUViIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4ZTAwYiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMHhmZjlmZjYsIDB4ZmY5ZmY2LCAweGZmMWZmNywgMCB9LAogCQkuZ3Bpb211dGUgCT0gMHhmZjNmZmMsCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkvKiAtLS0tIGNhcmQgMHgyYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfU0lHTUFfVFZJSV9GTV0gPSB7CiAJCS5uYW1lCQk9ICJTaWdtYSBUVklJLUZNIiwKIAkJLnZpZGVvX2lucHV0cwk9IDIsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKLQkJLnN2aHMJCT0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCisJCS5zdmhzCQk9IE5PX1NWSFMsCiAJCS5ncGlvbWFzawk9IDMsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDEsIDEsIDAsIDIgfSwKIAkJLmdwaW9tdXRlIAk9IDMsCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLnBsbAkJPSBQTExfTk9ORSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfTUFUUklYX1ZJU0lPTjJdID0gewogCQkubmFtZQkJPSAiTUFUUklYLVZpc2lvbiBNVi1EZWx0YSAyIiwKIAkJLnZpZGVvX2lucHV0cwk9IDUsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDMsCiAJCS5ncGlvbWFzawk9IDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwLCAwIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDAsIDApLAogCQkuZ3Bpb211eCAJPSB7IDAgfSwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1pPTFRSSVhfR0VOSUVdID0gewogCQkubmFtZQkJPSAiWm9sdHJpeCBHZW5pZSBUVi9GTSIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4YmNmMDNmLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAweGJjODAzZiwgMHhiYzkwM2YsIDB4YmNiMDNmLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweGJjYjAzZiwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9URU1JQ180MDM5RlI1X05UU0MsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1RFUlJBVFZSQURJT10gPSB7CiAJCS5uYW1lCQk9ICJUZXJyYXRlYyBUVi9SYWRpbysiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDcwMDAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAweDIwMDAwLCAweDMwMDAwLCAweDEwMDAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDQwMDAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCkBAIC0xMTI0LDcgKzEwNjEsNiBAQAogCQkucGxsCQk9IFBMTF8zNSwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTF9JLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmFkaW8JPSAxLAogCX0sCiAKQEAgLTExMzIsNTEgKzEwNjgsNDYgQEAKIAlbQlRUVl9CT0FSRF9EWU5BTElOS10gPSB7CiAJCS5uYW1lCQk9ICJBc2tleSBDUEgwM3gvIER5bmFsaW5rIE1hZ2ljIFRWaWV3IiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMTUsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7MiwwLDAsMCB9LAogCQkuZ3Bpb211dGUgCT0gMSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfR1ZCQ1RWM1BDSV0gPSB7CiAJCS5uYW1lCQk9ICJJT0RBVEEgR1YtQkNUVjMvUENJIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgwMTBmMDAsCi0JCS5tdXhzZWwJCT0gezIsIDMsIDAsIDAgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMCwgMCksCiAJCS5ncGlvbXV4IAk9IHsweDEwMDAwLCAwLCAweDEwMDAwLCAwIH0sCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfQUxQU19UU0hDNl9OVFNDLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5hdWRpb19tb2RlX2dwaW89IGd2YmN0djNwY2lfYXVkaW8sCiAJfSwKIAlbQlRUVl9CT0FSRF9QWEVMVldQTFRWUEFLXSA9IHsKIAkJLm5hbWUJCT0gIlByb2xpbmsgUFYtQlQ4NzhQKzRFIC8gUGl4ZWxWaWV3IFBsYXlUViBQQUsgLyBMZW5jbyBNWFRWLTk1NzggQ1AiLAogCQkudmlkZW9faW5wdXRzCT0gNSwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAzLAorCQkuaGFzX2RpZ19pbgk9IDEsCiAJCS5ncGlvbWFzawk9IDB4QUEwMDAwLAotCQkubXV4c2VsCQk9IHsgMiwzLDEsMSwtMSB9LAotCQkuZGlnaXRhbF9tb2RlICAgPSBESUdJVEFMX01PREVfQ0FNRVJBLAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxLCAwKSwgLyogaW4gNCBpcyBkaWdpdGFsICovCisJCS8qIC5kaWdpdGFsX21vZGU9IERJR0lUQUxfTU9ERV9DQU1FUkEsICovCiAJCS5ncGlvbXV4IAk9IHsgMHgyMDAwMCwgMCwgMHg4MDAwMCwgMHg4MDAwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHhhODAwMCwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTF9JLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmVtb3RlCT0gMSwKIAkJLyogR1BJTyB3aXJpbmc6IChkaWZmZXJlbnQgZnJvbSBSZXYuNEMgISkKIAkJCUdQSU8xNzogVTQuQTAgKGZpcnN0IGhlZjQwNTJidCkKQEAgLTExOTEsMTcgKzExMjIsMTUgQEAKIAlbQlRUVl9CT0FSRF9FQUdMRV0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJFYWdsZSBXaXJlbGVzcyBDYXByaWNvcm4yIChidDg3OEEpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gNywKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAwLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAwLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAxLCAyLCAzIH0sCiAJCS5ncGlvbXV0ZSAJPSA0LAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFVOU0VUIC8qIFRVTkVSX0FMUFNfVE1ESDJfTlRTQyAqLywKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkvKiAtLS0tIGNhcmQgMHgzNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMjA5LDExICsxMTM4LDEwIEBACiAJCS8qIERhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAMmdlbi5jb20+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJQaW5uYWNsZSBQQ1RWIFN0dWRpbyBQcm8iLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAzLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAzMDAwRiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMSwgMHhkMDAwMSwgMCwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMTAsCiAJCQkJLyogc291bmQgcGF0aCAoNSBzb3VyY2VzKToKQEAgLTEyMjksMjUgKzExNTcsMjIgQEAKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfVFZJRVdfUkRTX0ZNXSA9IHsKIAkJLyogQ2xhYXMgTGFuZ2JlaG4gPGNsYWFzQGJpZ2Zvb3QuY29tPiwKIAkJU3ZlbiBHcm90aGtsYWdzIDxzdmVuQHVwYi5kZT4gKi8KIAkJLm5hbWUJCT0gIlR5cGhvb24gVFZpZXcgUkRTICsgRk0gU3RlcmVvIC8gS05DMSBUViBTdGF0aW9uIFJEUyIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMywKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDMsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MWMsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAsIDAsIDB4MTAsIDggfSwKIAkJLmdwaW9tdXRlIAk9IDQsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yYWRpbwk9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9MSUZFVEVDXzk0MTVdID0gewpAQCAtMTI1OCwxMSArMTE4MywxMCBAQAogCQkJb3B0aW9ucyB0dW5lciB0eXBlPTUgKi8KIAkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDIwMDAgL0ZseVZpZGVvIEEyLyBMaWZldGVjIExUIDk0MTUgVFYgW0xSOTBdIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgxOGUwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAweDAwMDAsMHgwODAwLDB4MTAwMCwweDEwMDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MThlMCwKIAkJCS8qIEZvciBjYXJkcyB3aXRoIHRkYTk4MjAvdGRhOTgyMToKQEAgLTEyNzIsMjUgKzExOTYsMjIgQEAKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0JFU1RCVVlfRUFTWVRWXSA9IHsKIAkJLyogTWlndWVsIEFuZ2VsIEFsdmFyZXogPG1hYWNydXpAbmF2ZWdhbGlhLmNvbT4KIAkJb2xkIEVhc3kgVFYgQlQ4NDggdmVyc2lvbiAobW9kZWwgQ1BIMDMxKSAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQXNrZXkgQ1BIMDMxLyBCRVNUQlVZIEVhc3kgVFYiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHhGLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDIsIDAsIDAsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDEwLAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9URU1JQ19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4MzggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTI5OCwxNyArMTIxOSwxNSBAQAogCQkvKiBHb3Jkb24gSGV5ZG9uIDxnamhleWRvbkBiaWdmb290LmNvbSAoJzk4KSAqLwogCQkubmFtZSAgICAgICAgICAgPSAiTGlmZXZpZXcgRmx5VmlkZW8gOThGTSBMUjUwIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMywKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMywgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgxODAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDB4ODAwLCAweDEwMDAsIDB4MTAwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHgxODAwLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAkJLyogVGhpcyBpcyB0aGUgdWx0aW1hdGUgY2hlYXBvIGNhcHR1cmUgY2FyZAogCQkqIGp1c3QgYSBCVDg0OEEgb24gYSBzbWFsbCBQQ0IhCkBAIC0xMzE2LDUxICsxMjM1LDQ1IEBACiAJW0JUVFZfQk9BUkRfR1JBTkRURUNdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiR3JhbmRUZWMgJ0dyYW5kIFZpZGVvIENhcHR1cmUnIChCdDg0OCkiLAogCQkudmlkZW9faW5wdXRzICAgPSAyLAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMSwKIAkJLmdwaW9tYXNrICAgICAgID0gMCwKLQkJLm11eHNlbCAgICAgICAgID0geyAzLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgzLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwIH0sCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8zNSwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfQVNLRVlfQ1BIMDYwXSA9IHsKIAkJLyogRGFuaWVsIEhlcnJpbmd0b24gPGRhbmllbC5oZXJyaW5ndG9uQGhvbWUuY29tPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQXNrZXkgQ1BIMDYwLyBQaG9lYmUgVFYgTWFzdGVyIE9ubHkgKE5vIEZNKSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4ZTAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMHg0MDAsIDB4NDAwLCAweDQwMCwgMHg0MDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4ODAwLAogCQkubmVlZHNfdHZhdWRpbyAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RFTUlDXzQwMzZGWTVfTlRTQywKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfQVNLRVlfQ1BIMDNYXSA9IHsKIAkJLyogTWF0dGkgTW90dHVzIDxtb3R0dXNAcGh5c2ljLnV0LmVlPiAqLwogCQkubmFtZQkJPSAiQXNrZXkgQ1BIMDN4IFRWIENhcHR1cmVyIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMzAwMEYsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDIsIDAsIDAsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9URU1JQ19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4M2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTM2OCwzNCArMTI4MSwzMCBAQAogCQkvKiBQaGlsaXAgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJNb2R1bGFyIFRlY2hub2xvZ3kgTU0xMDBQQ1RWIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMiwKLQkJLnR1bmVyCQk9IDAsCi0JCS5zdmhzCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAyLCAqLworCQkuc3ZocwkJPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sgICAgICAgPSAxMSwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAyLCAwLCAwLCAxIH0sCiAJCS5ncGlvbXV0ZSAJPSA4LAogCQkucGxsICAgICAgICAgICAgPSBQTExfMzUsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RFTUlDX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfR01WMV0gPSB7CiAJCS8qIEFkcmlhbiBDb3ggPGFkcmlhbkBodW1ib2xkdC5jby51ayAqLwogCQkubmFtZQkJPSAiQUcgRWxlY3Ryb25pY3MgR01WMSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDIsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lcgkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMJCT0gMSwKIAkJLmdwaW9tYXNrICAgICAgID0gMHhGLAotCQkubXV4c2VsCQk9IHsgMiwgMiB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAyKSwKIAkJLmdwaW9tdXggICAgICAgID0geyB9LAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkucGxsCQk9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfQkVTVEJVWV9FQVNZVFYyXSA9IHsKIAkJLyogTWlndWVsIEFuZ2VsIEFsdmFyZXogPG1hYWNydXpAbmF2ZWdhbGlhLmNvbT4KQEAgLTE0MDMsMzQgKzEzMTIsMzAgQEAKIAkJc3BlY2lhbCB0aGFua3MgdG8gSW5mb3JtYXRpY2EgTWllcmVzIGZvciBwcm92aWRpbmcgdGhlIGNhcmQgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkFza2V5IENQSDA2MS8gQkVTVEJVWSBFYXN5IFRWIChidDg3OCkiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMiwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMiwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHhGRiwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAxLCAwLCA0LCA0IH0sCiAJCS5ncGlvbXV0ZSAJPSA5LAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfQVRJX1RWV09OREVSXSA9IHsKIAkJLyogTHVrYXMgR2ViYXVlciA8Z2VieUB2b2xueS5jej4gKi8KIAkJLm5hbWUJCT0gIkFUSSBUVi1Xb25kZXIiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweGYwM2YsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkuZ3Bpb211eCAJPSB7IDB4YmZmZSwgMCwgMHhiZmZmLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweGJmZmUsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1RFTUlDXzQwMDZGTjVfTVVMVElfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDQwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE0MzgsMjcgKzEzNDMsMjQgQEAKIAkJLyogTHVrYXMgR2ViYXVlciA8Z2VieUB2b2xueS5jej4gKi8KIAkJLm5hbWUJCT0gIkFUSSBUVi1Xb25kZXIgVkUiLAogCQkudmlkZW9faW5wdXRzCT0gMiwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAotCQkuc3ZocwkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KKwkJLnN2aHMJCT0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrCT0gMSwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDAsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMCwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMCwgMSwgMCB9LAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1RFTUlDXzQwMDZGTjVfTVVMVElfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9GTFlWSURFTzIwMDBdID0gewogCQkvKiBEZWVKYXkgPGRlZWpheUB3ZXN0ZWw5MDAubmV0ICgyMDAwUykgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkxpZmV2aWV3IEZseVZpZGVvIDIwMDBTIExSOTAiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAzLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAzLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sJPSAweDE4ZTAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAwLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDAsIDEpLAogCQkJCS8qIFJhZGlvIGNoYW5nZWQgZnJvbSAxZTgwIHRvIDB4ODAwIHRvIG1ha2UKIAkJCQlGbHlWaWRlbzIwMDBTIGluIC5odSBoYXBweSAoZ20pKi8KIAkJCQkvKiAtZGstPz8/OiBzZXQgbXV0ZT0weDE4MDAgZm9yIHRkYTk4NzRoIGRhdWdodGVyYm9hcmQgKi8KQEAgLTE0NzEsNDAgKzEzNzMsMzUgQEAKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfVEVSUkFUVkFMVUVSXSA9IHsKIAkJLm5hbWUJCT0gIlRlcnJhdGVjIFRWYWx1ZVJhZGlvIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHhmZmZmMDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDB4NTAwLCAweDUwMCwgMHgzMDAsIDB4OTAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDkwMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JhZGlvCT0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX0dWQkNUVjRQQ0ldID0gewogCQkvKiBUQU5BS0EgS2VpIDxwZWcwMDYyNUBuaWZ0eS5jb20+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJJT0RBVEEgR1YtQkNUVjQvUENJIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMTBmMDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsyLCAzLCAwLCAwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAwLCAwKSwKIAkJLmdwaW9tdXggICAgICAgID0gezB4MTAwMDAsIDAsIDB4MTAwMDAsIDAgfSwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9TSEFSUF8yVTVKRjU1NDBfTlRTQywKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuYXVkaW9fbW9kZV9ncGlvPSBndmJjdHYzcGNpX2F1ZGlvLAogCX0sCiAKQEAgLTE1MTQsOSArMTQxMSw4IEBACiAJCS8qIHRyeSAiaW5zbW9kIG1zcDM0MDAgc2ltcGxlPTAiIGlmIHlvdSBoYXZlCiAJCSogc291bmQgcHJvYmxlbXMgd2l0aCB0aGlzIGNhcmQuICovCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDRmOGEwMCwKIAkJLyogMHgxMDAwMDA6IDE9TVNQIGVuYWJsZWQgKDA9ZGlzYWJsZSBhZ2FpbikKIAkJKiAweDAxMDAwMDogQ29ubmVjdGVkIHRvICJTMCIgb24gdGRhOTg4MCAoMD1QYWwvQkcsIDE9TlRTQykgKi8KQEAgLTE1MjQsMTAgKzE0MjAsOSBAQAogCQkuZ3Bpb211dGUgCT0gMHg5NDdmZmYsCiAJCS8qIHR2dHVuZXIsIHJhZGlvLCAgIGV4dGVybmFsLGludGVybmFsLCBtdXRlLCAgc3RlcmVvCiAJCSogdHVuZXIsIENvbXBvc2l0LCBTVmlkLCBDb21wb3NpdC1vbi1TdmlkLWFkYXB0ZXIgKi8KLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzICwwICwxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAwLCAxKSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfTVQyMDMyLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkuaGFzX3JhZGlvCT0gMSwKIAl9LApAQCAtMTUzNiw5ICsxNDMxLDggQEAKIAkJLyogdHJ5ICJpbnNtb2QgbXNwMzQwMCBzaW1wbGU9MCIgaWYgeW91IGhhdmUKIAkJKiBzb3VuZCBwcm9ibGVtcyB3aXRoIHRoaXMgY2FyZC4gKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4NGY4YTAwLAogCQkvKiAweDEwMDAwMDogMT1NU1AgZW5hYmxlZCAoMD1kaXNhYmxlIGFnYWluKQogCQkqIDB4MDEwMDAwOiBDb25uZWN0ZWQgdG8gIlMwIiBvbiB0ZGE5ODgwICgwPVBhbC9CRywgMT1OVFNDKSAqLwpAQCAtMTU0NiwxMCArMTQ0MCw5IEBACiAJCS5ncGlvbXV0ZSAJPSAweDk0N2ZmZiwKIAkJLyogdHZ0dW5lciwgcmFkaW8sICAgZXh0ZXJuYWwsaW50ZXJuYWwsIG11dGUsICBzdGVyZW8KIAkJKiB0dW5lciwgQ29tcG9zaXQsIFNWaWQsIENvbXBvc2l0LW9uLVN2aWQtYWRhcHRlciAqLwotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgLDAgLDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDAsIDEpLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9NVDIwMzIsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS5oYXNfcmFkaW8JPSAxLAogCX0sCkBAIC0xNTU3LDMxICsxNDUwLDI3IEBACiAJCS8qIFBoaWxpcCBCbHVuZGVsbCA8cGJAbmV4dXMuY28udWs+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJBY3RpdmUgSW1hZ2luZyBBSU1NUyIsCiAJCS52aWRlb19pbnB1dHMgICA9IDEsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyKSwKIAkJLmdwaW9tYXNrICAgICAgID0gMAogCX0sCiAJW0JUVFZfQk9BUkRfUFZfQlQ4NzhQX1BMVVNdID0gewogCQkvKiBUb21hc3ogUHlyYSA8aGVsbGZpcmVAc2VkZXouaXEucGw+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJQcm9saW5rIFBpeGVsdmlldyBQVi1CVDg3OFArIChSZXYuNEMsOEUpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gNCwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gNCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMTUsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMTEsIDcgfSwgLyogVFYgYW5kIFJhZGlvIHdpdGggc2FtZSBHUElPICEgKi8KIAkJLmdwaW9tdXRlIAk9IDEzLAogCQkubmVlZHNfdHZhdWRpbyAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0xHX1BBTF9JX0ZNLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmVtb3RlICAgICA9IDEsCiAJCS8qIEdQSU8gd2lyaW5nOgogCQkJR1BJTzA6IFU0LkEwIChoZWY0MDUyYnQpCkBAIC0xNTk0LDE1ICsxNDgzLDE0IEBACiAJW0JUVFZfQk9BUkRfRkxZVklERU85OEVaXSA9IHsKIAkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4RVogKGNhcHR1cmUgb25seSkgTFI1MSIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIJCT0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzCQk9IDIsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sIC8qIEFWMSwgQVYyLCBTVkhTLCBDVmlkIGFkYXB0ZXIgb24gU1ZIUyAqLworCQkvKiBBVjEsIEFWMiwgU1ZIUywgQ1ZpZCBhZGFwdGVyIG9uIFNWSFMgKi8KKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5wbGwJCT0gUExMXzI4LAogCQkubm9fbXNwMzR4eAk9IDEsCi0JCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDQ4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE2MTAsMTEgKzE0OTgsMTAgQEAKIAkJLyogRGFyaXVzeiBLb3dhbGV3c2tpIDxkYXJla2tAYXV0b21leC5wbD4gKi8KIAkJLm5hbWUJCT0gIlByb2xpbmsgUGl4ZWx2aWV3IFBWLUJUODc4UCs5QiAoUGxheVRWIFBybyByZXYuOUIgRk0rTklDQU0pIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgzZiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMHgwMSwgMHgwMCwgMHgwMywgMHgwMyB9LAogCQkuZ3Bpb211dGUgCT0gMHgwOSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKQEAgLTE2MjMsNyArMTUxMCw2IEBACiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5hdWRpb19tb2RlX2dwaW89IHB2YnQ4NzhwOWJfYXVkaW8sIC8qIE5vdGU6IG5vdCBhbGwgY2FyZHMgaGF2ZSBzdGVyZW8gKi8KIAkJLmhhc19yYWRpbwk9IDEsICAvKiBOb3RlOiBub3QgYWxsIGNhcmRzIGhhdmUgcmFkaW8gKi8KIAkJLmhhc19yZW1vdGUgICAgID0gMSwKQEAgLTE2NDAsNDkgKzE1MjYsNDIgQEAKIAkJLyogeW91IG11c3QganVtcGVyIEpQNSBmb3IgdGhlIGNhcmQgdG8gd29yayAqLwogCQkubmFtZSAgICAgICAgICAgPSAiU2Vuc29yYXkgMzExIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNSwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzICAgICAgICAgICA9IDQsCiAJCS5ncGlvbWFzayAgICAgICA9IDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCwgMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCwgMCksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCB9LAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9SVjYwNV0gPSB7CiAJCS8qIE1pZ3VlbCBGcmVpdGFzIDxtaWd1ZWxAY2V0dWMucHVjLXJpby5icj4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlJlbW90ZVZpc2lvbiBNWCAoUlY2MDUpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMTYsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKIAkJLmdwaW9tYXNrMiAgICAgID0gMHgwN2ZmLAotCQkubXV4c2VsICAgICAgICAgPSB7IDB4MzMsIDB4MTMsIDB4MjMsIDB4NDMsIDB4ZjMsIDB4NzMsIDB4ZTMsIDB4MDMsCi0JCQkJMHhkMywgMHhiMywgMHhjMywgMHg2MywgMHg5MywgMHg1MywgMHg4MywgMHhhMyB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMyksCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm11eHNlbF9ob29rICAgID0gcnY2MDVfbXV4c2VsLAogCX0sCiAJW0JUVFZfQk9BUkRfUE9XRVJDTFJfTVRWODc4XSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlBvd2VyY29sb3IgTVRWODc4LyBNVFY4NzhSLyBNVFY4NzhGIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMiwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDIsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MUM4MDBGLCAgLyogQml0MC0yOiBBdWRpbyBzZWxlY3QsIDgtMTI6cmVtb3RlIGNvbnRyb2wgMTQ6cmVtb3RlIHZhbGlkIDE1OnJlbW90ZSByZXNldCAqLwotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDEsIDEsIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAxLCAyLCAyIH0sCiAJCS5ncGlvbXV0ZSAJPSA0LAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLmhhc19yYWRpbwk9IDEsCiAJfSwKQEAgLTE2OTIsNDIgKzE1NzEsMzggQEAKIAkJLyogTWFzYWtpIFN1enVraSA8bWFzYWtpQGJ0cmVlLm9yZz4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkNhbm9wdXMgV2luRFZSIFBDSSAoQ09NUEFRIFByZXNhcmlvIDM1MjRKUCwgNTExMkpQKSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MTQwMDA3LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDEsIDIsIDMgfSwKIAkJLmdwaW9tdXRlIAk9IDQsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQywKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuYXVkaW9fbW9kZV9ncGlvPSB3aW5kdnJfYXVkaW8sCiAJfSwKIAlbQlRUVl9CT0FSRF9HUkFORFRFQ19NVUxUSV0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJHcmFuZFRlYyBNdWx0aSBDYXB0dXJlIENhcmQgKEJ0ODc4KSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrICAgICAgID0gMCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwIH0sCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfS1dPUkxEXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkpldHdheSBUVi9DYXB0dXJlIEpXLVRWODc4LUZCSywgS3dvcmxkIEtXLVRWODc4UkYiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAzLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAzLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSA3LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwgICAvKiBUdW5lciwgU1ZpZCwgU1ZIUywgU1ZpZCB0byBTVkhTIGNvbm5lY3RvciAqLworCQkvKiBUdW5lciwgU1ZpZCwgU1ZIUywgU1ZpZCB0byBTVkhTIGNvbm5lY3RvciAqLworCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgNCwgNCB9LC8qIFllcywgdGhpcyB0dW5lciB1c2VzIHRoZSBzYW1lIGF1ZGlvIG91dHB1dCBmb3IgVFYgYW5kIEZNIHJhZGlvIQogCQkJCQkJKiBUaGlzIGNhcmQgbGFja3MgZXh0ZXJuYWwgQXVkaW8gSW4sIHNvIHdlIG11dGUgaXQgb24gRXh0LiAmIEludC4KIAkJCQkJCSogVGhlIFBDQiBjYW4gdGFrZSBhIHNieDE2Mzcvc2J4MTY3Mywgd2lyaW5nIHVua25vd24uCkBAIC0xNzQxLDcgKzE2MTYsNiBAQAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS8qIFNhbXN1bmcgVENQQTkwOTVQQzI3QSAoQkcrREspLCBwaGlsaXBzIGNvbXBhdGlibGUsIHcvRk0sIHN0ZXJlbyBhbmQKIAkJcmFkaW8gc2lnbmFsIHN0cmVuZ3RoIGluZGljYXRvcnMgd29yayBmaW5lLiAqLwogCQkuaGFzX3JhZGlvCT0gMSwKQEAgLTE3NTksMjcgKzE2MzMsMjQgQEAKIAkJLyogQXJ0aHVyIFRldHpsYWZmLURlYXMsIERTUCBEZXNpZ24gTHRkIDxzb2Z0d2FyZUBkc3BkZXNpZ24uY29tPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiRFNQIERlc2lnbiBUQ1ZJREVPIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJCS8qIC0tLS0gY2FyZCAweDUwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9IQVVQUEFVR0VQVlJdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiSGF1cHBhdWdlIFdpblRWIFBWUiIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMCwgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMCwgMSwgMSksCiAJCS5uZWVkc190dmF1ZGlvICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAogCQkuZ3Bpb21hc2sgICAgICAgPSA3LAogCQkuZ3Bpb211eCAgICAgICAgPSB7N30sCkBAIC0xNzg3LDMyICsxNjU4LDI4IEBACiAJW0JUVFZfQk9BUkRfR1ZCQ1RWNVBDSV0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJJT0RBVEEgR1YtQkNUVjUvUENJIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwZjBmODAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsyLCAzLCAxLCAwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLmdwaW9tdXggICAgICAgID0gezB4MDMwMDAwLCAweDAxMDAwMCwgMCwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMHgwMjAwMDAsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDX00sCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmF1ZGlvX21vZGVfZ3Bpbz0gZ3ZiY3R2NXBjaV9hdWRpbywKIAkJLmhhc19yYWRpbyAgICAgID0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX09TUFJFWTF4MF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMTAwLzE1MCAoODc4KSIsIC8qIDB4MSgyfDMpLTQ1QzYtQzEgKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gNCwgICAgICAgICAgICAgICAgICAvKiBpZC1pbnB1dHMtY2xvY2sgKi8KLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzICAgICAgICAgICA9IDMsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMywgMiwgMCwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMywgMiwgMCwgMSksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLApAQCAtMTgyMCwxNCArMTY4NywxMiBAQAogCVtCVFRWX0JPQVJEX09TUFJFWTF4MF84NDhdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDEwMC8xNTAgKDg0OCkiLCAvKiAweDA0LTU0QzAtQzEgJiBvbGRlciBib2FyZHMgKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLApAQCAtMTgzNywxNCArMTcwMiwxMiBAQAogCVtCVFRWX0JPQVJEX09TUFJFWTEwMV84NDhdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDEwMSAoODQ4KSIsIC8qIDB4MDUtNDBDMC1DMSAqLwogCQkudmlkZW9faW5wdXRzICAgPSAyLAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMSwKLQkJLm11eHNlbCAgICAgICAgID0geyAzLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgzLCAxKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0xODUyLDE0ICsxNzE1LDEyIEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZMXgxXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAxMDEvMTUxIiwgICAgICAgLyogMHgxKDR8NSktMDAwNC1DNCAqLwogCQkudmlkZW9faW5wdXRzICAgPSAxLAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMCB9LAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMCksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLApAQCAtMTg2NywxNCArMTcyOCwxMiBAQAogCVtCVFRWX0JPQVJEX09TUFJFWTF4MV9TVklEXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAxMDEvMTUxIHcvIHN2aWQiLCAgLyogMHgoMTZ8MTd8MjApLTAwQzQtQzEgKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gMiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzICAgICAgICAgICA9IDEsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMCwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMCwgMSksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLApAQCAtMTg4MiwxNCArMTc0MSwxMiBAQAogCVtCVFRWX0JPQVJEX09TUFJFWTJ4eF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMjAwLzIwMS8yNTAvMjUxIiwgIC8qIDB4MSg4fDl8RXxGKS0wMDA0LUM0ICovCiAJCS52aWRlb19pbnB1dHMgICA9IDEsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKLQkJLm11eHNlbCAgICAgICAgID0geyAwIH0sCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgwKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLApAQCAtMTg5OSwxNCArMTc1NiwxMiBAQAogCVtCVFRWX0JPQVJEX09TUFJFWTJ4MF9TVklEXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAyMDAvMjUwIiwgICAvKiAweDEoQXxCKS0wMEM0LUMxICovCiAJCS52aWRlb19pbnB1dHMgICA9IDIsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAxLAotCQkubXV4c2VsICAgICAgICAgPSB7IDAsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDAsIDEpLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0xOTE0LDE0ICsxNzY5LDEyIEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZMngwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAyMTAvMjIwLzIzMCIsICAgLyogMHgxKEF8QiktMDRDMC1DMSAqLwogCQkudmlkZW9faW5wdXRzICAgPSAyLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMSwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLApAQCAtMTkyOSwxNCArMTc4MiwxMiBAQAogCVtCVFRWX0JPQVJEX09TUFJFWTUwMF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgNTAwIiwgICAvKiA1MDAgKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gMiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDEsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMyB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMyksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLApAQCAtMTk0NCwxMiArMTc5NSwxMCBAQAogCVtCVFRWX0JPQVJEX09TUFJFWTU0MF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgNTQwIiwgICAvKiA1NDAgKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLApAQCAtMTk1OSwxNCArMTgwOCwxMiBAQAogCVtCVFRWX0JPQVJEX09TUFJFWTIwMDBdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDIwMDAiLCAgLyogMjAwMCAqLwogCQkudmlkZW9faW5wdXRzICAgPSAyLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMSwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLCAgICAgIC8qIG11c3QgYXZvaWQsIGNvbmZsaWN0cyB3aXRoIHRoZSBidDg2MCAqLwpAQCAtMTk3NSwxNCArMTgyMiwxMiBAQAogCQkvKiBNIEcgQmVyYmVyaWNoIDxiZXJiZXJpY0Bmb3J3aXNzLnVuaS1wYXNzYXUuZGU+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJJRFMgRWFnbGUiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrICAgICAgID0gMCwKLQkJLm11eHNlbCAgICAgICAgID0geyAwLCAxLCAyLCAzIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAyLCAyLCAyKSwKIAkJLm11eHNlbF9ob29rICAgID0gZWFnbGVfbXV4c2VsLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLApAQCAtMTk5MSwxNiArMTgzNiwxNCBAQAogCVtCVFRWX0JPQVJEX1BJTk5BQ0xFU0FUXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlBpbm5hY2xlIFBDVFYgU2F0IiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKLQkJLm11eHNlbCAgICAgICAgID0geyAzLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgzLCAxKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkubm9fZ3Bpb2lycSAgICAgPSAxLAogCQkuaGFzX2R2YiAgICAgICAgPSAxLApAQCAtMjAwOCwxOCArMTg1MSwxNiBAQAogCVtCVFRWX0JPQVJEX0ZPUk1BQ19QUk9UVl0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJGb3JtYWMgUHJvVFYgSUkgKGJ0ODc4KSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDMsCiAJCS5ncGlvbWFzayAgICAgICA9IDIsCiAJCS8qIFRWLCBDb21wMSwgQ29tcG9zaXRlIG92ZXIgU1ZJRCBjb24sIFNWSUQgKi8KLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAyLCAyLCAwLCAwIH0sCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLmhhc19yYWRpbyAgICAgID0gMSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkvKiBzb3VuZCByb3V0aW5nOgogCQlHUElPPTB4MDAsMHgwMSwweDAzOiBtdXRlICg/KQogCQkweDAyOiBib3RoIFRWIGFuZCByYWRpbyAodHVuZXI6IEZNMTIxNi9JKQpAQCAtMjAzMyw2MiArMTg3NCw1NSBAQAogCVtCVFRWX0JPQVJEX01BQ0hUVl0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJNYWNoVFYiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrICAgICAgID0gNywKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDEsIDIsIDN9LAogCQkuZ3Bpb211dGUgCT0gNCwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCX0sCiAJW0JUVFZfQk9BUkRfRVVSRVNZU19QSUNPTE9dID0gewogCQkubmFtZSAgICAgICAgICAgPSAiRXVyZXN5cyBQaWNvbG8iLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAwLCAxfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDAsIDEpLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1BWMTUwXSA9IHsKIAkJLyogTHVjIFZhbiBIb2V5bGFuZHQgPGx1Y0BlLW1hZ2ljLmJlPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiUHJvVmlkZW8gUFYxNTAiLCAvKiAweDRmICovCiAJCS52aWRlb19pbnB1dHMgICA9IDIsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrICAgICAgID0gMCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwIH0sCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfQURfVFZLNTAzXSA9IHsKIAkJLyogSGlyb3NoaSBUYWtla2F3YSA8c2lhbkBiaWcub3IuanA+ICovCiAJCS8qIFRoaXMgY2FyZCBsYWNrcyBzdWJzeXN0ZW0gSUQgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkFELVRWSzUwMyIsIC8qIDB4NjMgKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMDFlODAwNywKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLyogICAgICAgICAgICAgICAgICBUdW5lciwgUmFkaW8sIGV4dGVybmFsLCBpbnRlcm5hbCwgb2ZmLCAgb24gKi8KIAkJLmdwaW9tdXggICAgICAgID0geyAweDA4LCAgMHgwZiwgIDB4MGEsICAgICAweDA4IH0sCiAJCS5ncGlvbXV0ZSAJPSAweDBmLApAQCAtMjA5Nyw3ICsxOTMxLDYgQEAKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0MsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmF1ZGlvX21vZGVfZ3Bpbz0gYWR0dms1MDNfYXVkaW8sCiAJfSwKIApAQCAtMjEwNSwxNyArMTkzOCwxNSBAQAogCVtCVFRWX0JPQVJEX0hFUkNVTEVTX1NNX1RWXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkhlcmN1bGVzIFNtYXJ0IFRWIFN0ZXJlbyIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5uZWVkc190dmF1ZGlvICA9IDEsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLyogTm90ZXM6CiAJCS0gY2FyZCBsYWNrcyBzdWJzeXN0ZW0gSUQKIAkJLSBzdGVyZW8gdmFyaWFudCB3LyBkYXVnaHRlciBib2FyZCB3aXRoIHRkYTk4NzRhIEAweGIwCkBAIC0yMTI5LDE2ICsxOTYwLDE1IEBACiAJW0JUVFZfQk9BUkRfUEFDRVRWXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlBhY2UgVFYgJiBSYWRpbyBDYXJkIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sIC8qIFR1bmVyLCBDVmlkLCBTVmlkLCBDVmlkIG92ZXIgU1ZpZCBjb25uZWN0b3IgKi8KKwkJLyogVHVuZXIsIENWaWQsIFNWaWQsIENWaWQgb3ZlciBTVmlkIGNvbm5lY3RvciAqLworCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbWFzayAgICAgICA9IDAsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMX0ksCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yYWRpbyAgICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkvKiBCdDg3OCwgQnQ4MzIsIEZJMTI0NiB0dW5lcjsgbm8gcGNpIHN1YnN5c3RlbSBpZApAQCAtMjE1MiwyNyArMTk4MiwzNCBAQAogCQkvKiBDaHJpcyBXaWxsaW5nIDxjaHJpc0B2aXNsYWIudXN5ZC5lZHUuYXU+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJJVkMtMjAwIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMSwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4ZGYsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiksCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwl9LAorCVtCVFRWX0JPQVJEX0lWQ0U4Nzg0XSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIklWQ0UtODc4NCIsCisJCS52aWRlb19pbnB1dHMgICA9IDEsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKKwkJLmdwaW9tYXNrICAgICAgID0gMHhkZiwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIpLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJfSwKIAlbQlRUVl9CT0FSRF9YR1VBUkRdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiR3JhbmQgWC1HdWFyZCAvIFRydXN0IDgxNFBDSSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDE2LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuZ3Bpb21hc2syICAgICAgPSAweGZmLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsMiwyLDIsIDMsMywzLDMsIDEsMSwxLDEsIDAsMCwwLDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsMiwyLDIsIDMsMywzLDMsIDEsMSwxLDEsIDAsMCwwLDApLAogCQkubXV4c2VsX2hvb2sgICAgPSB4Z3VhcmRfbXV4c2VsLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLApAQCAtMjE4NCwxNiArMjAyMSwxNCBAQAogCVtCVFRWX0JPQVJEX05FQlVMQV9ESUdJVFZdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiTmVidWxhIEVsZWN0cm9uaWNzIERpZ2lUViIsCiAJCS52aWRlb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfZHZiICAgICAgICA9IDEsCiAJCS5oYXNfcmVtb3RlCT0gMSwKIAkJLmdwaW9tYXNrCT0gMHgxYiwKQEAgLTIyMDMsMTE4ICsyMDM4LDEwMSBAQAogCQkvKiBKb3JnZSBCb25jb21wdGUgLSBEVEkyIDxqb3JnZUBkdGkyLm5ldD4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlByb1ZpZGVvIFBWMTQzIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sgICAgICAgPSAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAgfSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9WRDAwOVgxX1ZEMDExX01JTklESU5dID0gewogCQkvKiBNLktsYWhyQHBoeXRlYy5kZSAqLwogCQkubmFtZSAgICAgICAgICAgPSAiUEhZVEVDIFZELTAwOS1YMSBWRC0wMTEgTWluaURJTiAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzICAgICAgICAgICA9IDMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1ZEMDA5WDFfVkQwMTFfQ09NQkldID0gewogCQkubmFtZSAgICAgICAgICAgPSAiUEhZVEVDIFZELTAwOS1YMSBWRC0wMTEgQ29tYmkgKGJ0ODc4KSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULCAvKiBjYXJkIGhhcyBubyB0dW5lciAqLworCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAzLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCQkvKiAtLS0tIGNhcmQgMHg2YyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfVkQwMDlfTUlOSURJTl0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5IE1pbmlESU4gKGJ0ODc4KSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDEwLAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gOSwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKLQkJLmdwaW9tYXNrMiAgICAgID0gMHgwMywgLyogZ3Bpb21hc2syIGRlZmluZXMgdGhlIGJpdHMgdXNlZCB0byBzd2l0Y2ggYXVkaW8KLQkJCQkJdmlhIHRoZSB1cHBlciBuaWJibGUgb2YgbXV4c2VsLiBoZXJlOiB1c2VkIGZvcgotCQkJCQl4dGVybmFsIHZpZGVvLW11eCAqLwotCQkubXV4c2VsICAgICAgICAgPSB7IDB4MDIsIDB4MTIsIDB4MjIsIDB4MzIsIDB4MDMsIDB4MTMsIDB4MjMsIDB4MzMsIDB4MDEsIDB4MDAgfSwKKwkJLmdwaW9tYXNrMiAgICAgID0gMHgwMywgLyogdXNlZCBmb3IgZXh0ZXJuYWwgdm9kZW8gbXV4ICovCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAyLCAyLCAyLCAzLCAzLCAzLCAzLCAxLCAwKSwKKwkJLm11eHNlbF9ob29rCT0gcGh5dGVjX211eHNlbCwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCiAJCS5uZWVkc190dmF1ZGlvICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfVkQwMDlfQ09NQkldID0gewogCQkubmFtZSAgICAgICAgICAgPSAiUEhZVEVDIFZELTAwOSBDb21iaSAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMTAsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULCAvKiBjYXJkIGhhcyBubyB0dW5lciAqLworCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSA5LAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAotCQkuZ3Bpb21hc2syICAgICAgPSAweDAzLCAvKiBncGlvbWFzazIgZGVmaW5lcyB0aGUgYml0cyB1c2VkIHRvIHN3aXRjaCBhdWRpbwotCQkJCQl2aWEgdGhlIHVwcGVyIG5pYmJsZSBvZiBtdXhzZWwuIGhlcmU6IHVzZWQgZm9yCi0JCQkJCXh0ZXJuYWwgdmlkZW8tbXV4ICovCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMHgwMiwgMHgxMiwgMHgyMiwgMHgzMiwgMHgwMywgMHgxMywgMHgyMywgMHgzMywgMHgwMSwgMHgwMSB9LAorCQkuZ3Bpb21hc2syICAgICAgPSAweDAzLCAvKiB1c2VkIGZvciBleHRlcm5hbCB2b2RlbyBtdXggKi8KKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDIsIDIsIDIsIDMsIDMsIDMsIDMsIDEsIDEpLAorCQkubXV4c2VsX2hvb2sJPSBwaHl0ZWNfbXV4c2VsLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9JVkMxMDBdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiSVZDLTEwMCIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAorCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweGRmLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJfSwKIAlbQlRUVl9CT0FSRF9JVkMxMjBdID0gewogCQkvKiBJVkMtMTIwRyAtIEFsYW4gR2FyZmllbGQgPGFsYW5AZnJvbW9yYml0LmNvbT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIklWQy0xMjBHIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMTYsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsICAgIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULCAgIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsICAgLyogY2FyZCBoYXMgbm8gc3ZocyAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLCAgIC8qIGNhcmQgaGFzIG5vIHN2aHMgKi8KIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKLQkJLm11eHNlbCAgICAgICAgID0geyAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4LAotCQkJCTB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsIDB4MTAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApLAogCQkubXV4c2VsX2hvb2sgICAgPSBpdmMxMjBfbXV4c2VsLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJfSwKQEAgLTIzMjMsMTMgKzIxNDEsMTEgQEAKIAlbQlRUVl9CT0FSRF9QQ19IRFRWXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gInBjSERUViBIRC0yMDAwIFRWIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GQ1YxMjM2RCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX2R2YiAgICAgICAgPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfVFdJTkhBTl9EU1RdID0gewpAQCAtMjMzOSwzOCArMjE1NSwzNCBAQAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX3ZpZGVvICAgICAgID0gMSwKIAkJLmhhc19kdmIgICAgICAgID0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX1dJTkZBU1RWQzEwMF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJXaW5mYXN0IFZDMTAwIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMywgMSwgMSwgMyB9LCAvKiBWaWQgSW4sIFNWaWQgSW4sIFZpZCBvdmVyIFNWaWQgaW4gY29ubmVjdG9yICovCisJCS8qIFZpZCBJbiwgU1ZpZCBJbiwgVmlkIG92ZXIgU1ZpZCBpbiBjb25uZWN0b3IgKi8KKwkJLm11eHNlbAkJPSBNVVhTRUwoMywgMSwgMSwgMyksCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJfSwKIAlbQlRUVl9CT0FSRF9URVY1NjBdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiVGVwcHJvIFRFVi01NjAvSW50ZXJWaXNpb24gSVYtNTYwIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMywKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAxLCAxLCAxLCAxIH0sCiAJCS5uZWVkc190dmF1ZGlvICA9IDEsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8zNSwKIAl9LAogCkBAIC0yMzc4LDE0ICsyMTkwLDEyIEBACiAJW0JUVFZfQk9BUkRfU0lNVVNfR1ZDMTEwMF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJTSU1VUyBHVkMxMTAwIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAyLCAyLCAyIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAyLCAyLCAyKSwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgzRiwKIAkJLm11eHNlbF9ob29rICAgID0gZ3ZjMTEwMF9tdXhzZWwsCiAJfSwKQEAgLTIzOTMsNDcgKzIyMDMsNDEgQEAKIAkJLyogQ2FybG9zIFNpbHZhIHIzcGVrQHIzcGVrLmhvbWVsaW51eC5vcmcgfHwgY2FyZCAweDc1ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJOR1MgTkdTVFYrIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLnR1bmVyICAgICAgICAgID0gMCwKIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMDgwMDcsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMCwgMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMCwgMCksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMCwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMHgwMDAwMDMsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yZW1vdGUgICAgID0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX0xNTEJUNF0gPSB7CiAJCS8qIGh0dHA6Ly9saW51eG1lZGlhbGFicy5jb20gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkxNTEJUNCIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsIC8qIElOMSxJTjIsSU4zLElONCAqLwotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1RFS1JBTV9NMjA1XSA9IHsKIAkJLyogSGVsbXJvb3MgSGFycmkgPGhhcnJpLmhlbG1yb29zQHBwLmluZXQuZmk+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJUZWtyYW0gTTIwNSBQUk8iLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDY4LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4NjgsIDB4NjgsIDB4NjEsIDB4NjEgfSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCX0sCkBAIC0yNDQ0LDE4ICsyMjQ4LDE2IEBACiAJCS8qIGJ0ODc4IFRWICsgRk0gd2l0aG91dCBzdWJzeXN0ZW0gSUQgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkNvbmNlcHRyb25pYyBDT05UVkZNaSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDA4MDA3LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDEsIDIsIDIgfSwKIAkJLmdwaW9tdXRlIAk9IDMsCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yZW1vdGUgICAgID0gMSwKIAkJLmhhc19yYWRpbyAgICAgID0gMSwKIAl9LApAQCAtMjQ2NiwzNyArMjI2OCwzNCBAQAogCQkvKjB4NzkgaW4gYnR0di5oKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkV1cmVzeXMgUGljb2xvIFRldHJhIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sgICAgICAgPSAwLAogCQkuZ3Bpb21hc2syICAgICAgPSAweDNDPDwxNiwvKlNldCB0aGUgR1BJT1sxOF0tPkdQSU9bMjFdIGFzIG91dHB1dCBwaW4uPT0+IGRyaXZlIHRoZSB2aWRlbyBpbnB1dHMgdGhyb3VnaCBhbmFsb2cgbXVsdGlwbGV4ZXJzKi8KIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKLQkJLm11eHNlbCAgICAgICAgID0gezIsMiwyLDJ9LC8qODc4QSBpbnB1dCBpcyBhbHdheXMgTVVYMCwgc2VlIGFib3ZlLiovCisJCS8qODc4QSBpbnB1dCBpcyBhbHdheXMgTVVYMCwgc2VlIGFib3ZlLiovCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAyLCAyLCAyKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLm11eHNlbF9ob29rICAgID0gcGljb2xvX3RldHJhX211eHNlbCwvKlJlcXVpcmVkIGFzIGl0IGRvZXNuJ3QgZm9sbG93IHRoZSBjbGFzc2ljIGlucHV0IHNlbGVjdGlvbiBwb2xpY3kqLwotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9TUElSSVRfVFZdID0gewogCQkvKiBTcGlyaXQgVFYgVHVuZXIgZnJvbSBodHRwOi8vc3Bpcml0bW9kZW1zLmNvbS5hdSAqLwogCQkvKiBTdGFmZm9yZCBHb29kc2VsbCA8c3VyZ2VAZ29saWF0aC5ob21ldW5peC5vcmc+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJTcGlyaXQgVFYgVHVuZXIiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwMDAwMDBmLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAgfSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEVNSUNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJfSwKQEAgLTI1MDUsMTEgKzIzMDQsOSBAQAogCQkubmFtZSAgICAgICAgICAgPSAiQVZlck1lZGlhIEFWZXJUViBEVkItVCA3NzEiLAogCQkudmlkZW9faW5wdXRzICAgPSAyLAogCQkuc3ZocyAgICAgICAgICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMyAsIDMgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDMsIDMpLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLApAQCAtMjUyNCw1NCArMjMyMSw0NyBAQAogCQkvKiBCYXNlZCBvbiB0aGUgTmVidWxhIGNhcmQgZGF0YSAtIGFkZGVkIHJlbW90ZSBhbmQgbmV3IGNhcmQgbnVtYmVyIC0gQlRUVl9CT0FSRF9BVkRWQlRfNzYxLCBzZWUgYWxzbyBpci1rYmQtZ3Bpby5jICovCiAJCS5uYW1lICAgICAgICAgICA9ICJBdmVyTWVkaWEgQXZlclRWIERWQi1UIDc2MSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDIsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAogCQkuc3ZocyAgICAgICAgICAgPSAxLAotCQkubXV4c2VsICAgICAgICAgPSB7IDMsIDEsIDIsIDAgfSwgLyogQ29tcDAsIFMtVmlkZW8sID8sID8gKi8KKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDMsIDEsIDIsIDApLCAvKiBDb21wMCwgUy1WaWRlbywgPywgPyAqLwogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19kdmIgICAgICAgID0gMSwKIAkJLm5vX2dwaW9pcnEgICAgID0gMSwKIAkJLmhhc19yZW1vdGUgICAgID0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX01BVFJJWF9WSVNJT05TUV0gPSB7CiAJCS8qIGFuZHJlLnNjaHdhcnpAbWF0cml4LXZpc2lvbi5kZSAqLwotCQkubmFtZSAgICAgICAgICAgICA9ICJNQVRSSVggVmlzaW9uIFNpZ21hLVNRIiwKLQkJLnZpZGVvX2lucHV0cyAgICAgPSAxNiwKLQkJLmF1ZGlvX2lucHV0cyAgICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgICA9IFVOU0VULAotCQkuc3ZocyAgICAgICAgICAgICA9IFVOU0VULAotCQkuZ3Bpb21hc2sgICAgICAgICA9IDB4MCwKLQkJLm11eHNlbCAgICAgICAgICAgPSB7IDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsCi0JCQkJMywgMywgMywgMywgMywgMywgMywgMyB9LAotCQkubXV4c2VsX2hvb2sgICAgICA9IHNpZ21hU1FfbXV4c2VsLAotCQkuZ3Bpb211eCAgICAgICAgICA9IHsgMCB9LAotCQkubm9fbXNwMzR4eCAgICAgICA9IDEsCi0JCS5wbGwgICAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgICA9IFVOU0VULAotCQkudHVuZXJfYWRkcgkgID0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLm5hbWUJCT0gIk1BVFJJWCBWaXNpb24gU2lnbWEtU1EiLAorCQkudmlkZW9faW5wdXRzCT0gMTYsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzCQk9IE5PX1NWSFMsCisJCS5ncGlvbWFzawk9IDB4MCwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMywgMywgMywgMywgMywgMywgMywgMyksCisJCS5tdXhzZWxfaG9vawk9IHNpZ21hU1FfbXV4c2VsLAorCQkuZ3Bpb211eAk9IHsgMCB9LAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfTUFUUklYX1ZJU0lPTlNMQ10gPSB7CiAJCS8qIGFuZHJlLnNjaHdhcnpAbWF0cml4LXZpc2lvbi5kZSAqLwotCQkubmFtZSAgICAgICAgICAgICA9ICJNQVRSSVggVmlzaW9uIFNpZ21hLVNMQyIsCi0JCS52aWRlb19pbnB1dHMgICAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgICA9IFVOU0VULAotCQkuc3ZocyAgICAgICAgICAgICA9IFVOU0VULAotCQkuZ3Bpb21hc2sgICAgICAgICA9IDB4MCwKLQkJLm11eHNlbCAgICAgICAgICAgPSB7IDIsIDIsIDIsIDIgfSwKLQkJLm11eHNlbF9ob29rICAgICAgPSBzaWdtYVNMQ19tdXhzZWwsCi0JCS5ncGlvbXV4ICAgICAgICAgID0geyAwIH0sCi0JCS5ub19tc3AzNHh4ICAgICAgID0gMSwKLQkJLnBsbCAgICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICAgID0gVU5TRVQsCi0JCS50dW5lcl9hZGRyCSAgPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkubmFtZQkJPSAiTUFUUklYIFZpc2lvbiBTaWdtYS1TTEMiLAorCQkudmlkZW9faW5wdXRzCT0gNCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMJCT0gTk9fU1ZIUywKKwkJLmdwaW9tYXNrCT0gMHgwLAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAyLCAyLCAyKSwKKwkJLm11eHNlbF9ob29rCT0gc2lnbWFTTENfbXV4c2VsLAorCQkuZ3Bpb211eAk9IHsgMCB9LAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCX0sCiAJCS8qIEJUVFZfQk9BUkRfQVBBQ19WSUVXQ09NUCAqLwogCVtCVFRWX0JPQVJEX0FQQUNfVklFV0NPTVBdID0gewpAQCAtMjU3OSwxOCArMjM2OSwxNiBAQAogCQkvKiBidDg3OCBUViArIEZNIDB4MDAwMDAwMDAgc3Vic3lzdGVtIElEICovCiAJCS5uYW1lICAgICAgICAgICA9ICJBUEFDIFZpZXdjb21wIDg3OChBTUFYKSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDIsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweEZGLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDIsIDAsIDAsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDEwLAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmVtb3RlICAgICA9IDEsICAgLyogbWluaXJlbW90ZSB3b3Jrcywgc2VlIGlyLWtiZC1ncGlvLmMgKi8KIAkJLmhhc19yYWRpbyAgICAgID0gMSwgICAvKiBub3QgZXZlcnkgY2FyZCBoYXMgcmFkaW8gKi8KIAl9LApAQCAtMjU5OSw0NiArMjM4Nyw0MCBAQAogCVtCVFRWX0JPQVJEX0RWSUNPX0RWQlRfTElURV0gPSB7CiAJCS8qIENocmlzIFBhc2NvZSA8Yy5wYXNjb2VAaXRlZS51cS5lZHUuYXU+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJEVmlDTyBGdXNpb25IRFRWIERWQi1UIExpdGUiLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkubm9fdmlkZW8gICAgICAgPSAxLAogCQkuaGFzX2R2YiAgICAgICAgPSAxLAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9WR0VBUl9NWVZDRF0gPSB7CiAJCS8qIFN0ZXZlbiA8cGhvdG9uMzhAcGNob21lLmNvbS50dz4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlYtR2VhciBNeVZDRCIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4M2YsCi0JCS5tdXhzZWwgICAgICAgICA9IHsyLCAzLCAxLCAwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLmdwaW9tdXggICAgICAgID0gezB4MzEsIDB4MzEsIDB4MzEsIDB4MzEgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MzEsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDX00sCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yYWRpbyAgICAgID0gMCwKIAl9LAogCVtCVFRWX0JPQVJEX1NVUEVSX1RWXSA9IHsKIAkJLyogUmljayBDIDxjcnlwdGRyYWdvb25AZ21haWwuY29tPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiU3VwZXIgVFYgVHVuZXIiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0MsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMDgwMDcsCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMHgwMDAwMDEsMCwwIH0sCiAJCS5uZWVkc190dmF1ZGlvICA9IDEsCkBAIC0yNjQ4LDE3ICsyNDMwLDE1IEBACiAJCS8qIENocmlzIEZhbm5pbmcgPHZpZGVvNGxpbnV4QGhheWRvbi5uZXQ+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJUaWJldCBTeXN0ZW1zICdQcm9ncmVzcyBEVlInIENTMTYiLAogCQkudmlkZW9faW5wdXRzICAgPSAxNiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIgfSwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIpLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIJPSAxLAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5tdXhzZWxfaG9vayAgICA9IHRpYmV0Q1MxNl9tdXhzZWwsCiAJfSwKIAlbQlRUVl9CT0FSRF9LT0RJQ09NXzQ0MDBSXSA9IHsKQEAgLTI2NzUsMTIgKzI0NTUsMTAgQEAKIAkJKi8KIAkJLm5hbWUgICAgICAgICAgID0gIktvZGljb20gNDQwMFIgKG1hc3RlcikiLAogCQkudmlkZW9faW5wdXRzCT0gMTYsCi0JCS5hdWRpb19pbnB1dHMJPSAwLAotCQkudHVuZXIJCT0gVU5TRVQsCi0JCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS5zdmhzCQk9IFVOU0VULAorCQkuc3ZocwkJPSBOT19TVkhTLAogCQkvKiBHUElPIGJpdHMgMC05IHVzZWQgZm9yIGFuYWxvZyBzd2l0Y2g6CiAJCSogICAwMCAtIDAzOgljYW1lcmEgc2VsZWN0b3IKIAkJKiAgIDA0IC0gMDY6CWNoYW5uZWwgKGNvbnRyb2xsZXIpIHNlbGVjdG9yCkBAIC0yNjkxLDcgKzI0NjksNyBAQAogCQkqLwogCQkuZ3Bpb21hc2sJPSAweDAwMDNmZiwKIAkJLm5vX2dwaW9pcnEgICAgID0gMSwKLQkJLm11eHNlbAkJPSB7IDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMyksCiAJCS5wbGwJCT0gUExMXzI4LAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5ub190ZGE3NDMyCT0gMSwKQEAgLTI3MDcsMTUgKzI0ODUsMTMgQEAKIAkJKi8KIAkJLm5hbWUJCT0gIktvZGljb20gNDQwMFIgKHNsYXZlKSIsCiAJCS52aWRlb19pbnB1dHMJPSAxNiwKLQkJLmF1ZGlvX2lucHV0cwk9IDAsCi0JCS50dW5lcgkJPSBVTlNFVCwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnN2aHMJCT0gVU5TRVQsCisJCS5zdmhzCQk9IE5PX1NWSFMsCiAJCS5ncGlvbWFzawk9IDB4MDEwMDAwLAogCQkubm9fZ3Bpb2lycSAgICAgPSAxLAotCQkubXV4c2VsCQk9IHsgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMyB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzKSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLm5vX3RkYTc0MzIJPSAxLApAQCAtMjcyOCwyNyArMjUwNCwyMyBAQAogCQkvKiBBZGxpbmsgUlRWMjQgd2l0aCBzcGVjaWFsIHVubG9jayBjb2RlcyAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQWRsaW5rIFJUVjI0IiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCX0sCiAJCS8qIC0tLS0gY2FyZCAweDg3LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9MSVRFXSA9IHsKIAkJLyogTWljaGFlbCBLcnVma3kgPG1rcnVma3lAbTFrLm5ldD4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkRWaUNPIEZ1c2lvbkhEVFYgNSBMaXRlIiwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfTEdfVERWU19IMDZYRiwgLyogVERWUy1IMDY0RiAqLwogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEpLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwZTAwMDA3LAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4MDA0MDAwMDUsIDAsIDB4MDAwMDAwMDEsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MDBjMDAwMDcsCkBAIC0yNzYyLDc1ICsyNTM0LDY4IEBACiAJCS8qIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPiAqLwogCQkubmFtZQkJPSAiQWNvcnAgWTg3OEYiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDAxZmUwMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMHgwMDFlMDAsIDAsIDB4MDE4MDAwLCAweDAxNDAwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHgwMDIwMDAsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfWU1FQ19UVkY2NlQ1X0JfREZGLAogCQkudHVuZXJfYWRkcgk9IDB4YzEgPj4xLAotCQkucmFkaW9fYWRkciAgICAgPSAweGMxID4+MSwKIAkJLmhhc19yYWRpbwk9IDEsCiAJfSwKIAkJLyogLS0tLSBjYXJkIDB4ODkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX0NPTkNFUFRST05JQ19DVFZGTUkyXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkNvbmNlcHRyb25pYyBDVFZGTWkgdjIiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwMWMwMDA3LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDEsIDIsIDIgfSwKIAkJLmdwaW9tdXRlIAk9IDMsCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEVOQV85NTMzX0RJLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmVtb3RlICAgICA9IDEsCiAJCS5oYXNfcmFkaW8gICAgICA9IDEsCiAJfSwKIAkJLyogLS0tLSBjYXJkIDB4OGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX1BWX0JUODc4UF8yRV0gPSB7Ci0JCS5uYW1lICAgICAgICAgID0gIlByb2xpbmsgUGl4ZWx2aWV3IFBWLUJUODc4UCsgKFJldi4yRSkiLAotCQkudmlkZW9faW5wdXRzICA9IDUsCi0JCS5hdWRpb19pbnB1dHMgID0gMSwKLQkJLnR1bmVyICAgICAgICAgPSAwLAotCQkuc3ZocyAgICAgICAgICA9IDMsCi0JCS5ncGlvbWFzayAgICAgID0gMHgwMWZlMDAsCi0JCS5tdXhzZWwgICAgICAgID0geyAyLDMsMSwxLC0xIH0sCi0JCS5kaWdpdGFsX21vZGUgID0gRElHSVRBTF9NT0RFX0NBTUVSQSwKLQkJLmdwaW9tdXggICAgICAgPSB7IDB4MDA0MDAsIDB4MTA0MDAsIDB4MDQ0MDAsIDB4ODAwMDAgfSwKLQkJLmdwaW9tdXRlICAgICAgPSAweDEyNDAwLAotCQkubm9fbXNwMzR4eCAgICA9IDEsCi0JCS5wbGwgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICA9IFRVTkVSX0xHX1BBTF9GTSwKKwkJLm5hbWUJCT0gIlByb2xpbmsgUGl4ZWx2aWV3IFBWLUJUODc4UCsgKFJldi4yRSkiLAorCQkudmlkZW9faW5wdXRzCT0gNSwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KKwkJLnN2aHMJCT0gMywKKwkJLmhhc19kaWdfaW4JPSAxLAorCQkuZ3Bpb21hc2sJPSAweDAxZmUwMCwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSwgMCksIC8qIGluIDQgaXMgZGlnaXRhbCAqLworCQkvKiAuZGlnaXRhbF9tb2RlPSBESUdJVEFMX01PREVfQ0FNRVJBLCAqLworCQkuZ3Bpb211eAk9IHsgMHgwMDQwMCwgMHgxMDQwMCwgMHgwNDQwMCwgMHg4MDAwMCB9LAorCQkuZ3Bpb211dGUJPSAweDEyNDAwLAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0xHX1BBTF9GTSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkuaGFzX3JlbW90ZSAgICA9IDEsCisJCS5oYXNfcmVtb3RlCT0gMSwKIAl9LAogCQkvKiAtLS0tIGNhcmQgMHg4YiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfUFZfTTQ5MDBdID0gewogCQkvKiBTw6lyZ2lvIEZvcnRpZXIgPHNlcmdpb2ZvcnRpZXJAeWFob28uY29tLmJyPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiUHJvbGluayBQaXhlbFZpZXcgUGxheVRWIE1QRUcyIFBWLU00OTAwIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgzZiwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAweDIxLCAweDIwLCAweDI0LCAweDJjIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDI5LAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1lNRUNfVFZGXzU1MzNNRiwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yYWRpbyAgICAgID0gMSwKIAkJLmhhc19yZW1vdGUgICAgID0gMSwKIAl9LApAQCAtMjg1MCwxNyArMjYxNSwxNSBAQAogCVtCVFRWX0JPQVJEX09TUFJFWTQ0MF0gID0gewogCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDQ0MCIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDIsIC8qIHRoaXMgaXMgbWVhbmluZ2xlc3MgKi8KLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDAsIDEgfSwgLyogMywwLDEgYXJlIGd1ZXNzZXMgKi8KKwkJLyogLmF1ZGlvX2lucHV0cz0gMiwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDAsIDEpLCAvKiAzLDAsMSBhcmUgZ3Vlc3NlcyAqLwogCQkuZ3Bpb21hc2sJPSAweDMwMywKIAkJLmdwaW9tdXRlCT0gMHgwMDAsIC8qIGludCArIDMya0h6ICovCiAJCS5ncGlvbXV4CT0geyAwLCAwLCAweDAwMCwgMHgxMDB9LAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0yODY5LDI4ICsyNjMyLDI1IEBACiAJW0JUVFZfQk9BUkRfQVNPVU5EX1NLWUVZRV0gPSB7CiAJCS5uYW1lCQk9ICJBc291bmQgU2t5ZXllIFBDVFYiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAxNSwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMiwgMCwgMCwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX05UU0MsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCQkvKiAtLS0tIGNhcmQgMHg4ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfU0FCUkVOVF9UVkZNXSA9IHsKIAkJLm5hbWUJCT0gIlNhYnJlbnQgVFYtRk0gKGJ0dHYgdmVyc2lvbikiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDEwODAwNywKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMTAwMDAwLCAxMDAwMDIsIDEwMDAwMiwgMTAwMDAwIH0sCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKQEAgLTI5MDQsMTcgKzI2NjQsMTUgQEAKIAlbQlRUVl9CT0FSRF9IQVVQUEFVR0VfSU1QQUNUVkNCXSA9IHsKIAkJLm5hbWUJCT0gIkhhdXBwYXVnZSBJbXBhY3RWQ0IgKGJ0ODc4KSIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMCwKLQkJLnR1bmVyCQk9IFVOU0VULAotCQkuc3ZocwkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMJCT0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrCT0gMHgwZiwgLyogb2xkOiA3ICovCi0JCS5tdXhzZWwJCT0geyAwLCAxLCAzLCAyIH0sIC8qIENvbXBvc2l0ZSAwLTMgKi8KKwkJLm11eHNlbAkJPSBNVVhTRUwoMCwgMSwgMywgMiksIC8qIENvbXBvc2l0ZSAwLTMgKi8KIAkJLm5vX21zcDM0eHgJPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAotCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfTUFDSFRWX01BR0lDVFZdID0gewogCQkvKiBKdWxpYW4gQ2FsYWJ5IDxqdWxpYW4uY2FsYWJ5QGdtYWlsLmNvbT4KQEAgLTI5MjYsMTYgKzI2ODQsMTQgQEAKIAogCQkubmFtZSAgICAgICAgICAgPSAiTWFnaWNUViIsIC8qIHJlYnJhbmRlZCBNYWNoVFYgKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gNywKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAxLCAyLCAzIH0sCiAJCS5ncGlvbXV0ZSAJPSA0LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9URU1JQ180MDA5RlI1X1BBTCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLApAQCAtMjk0MywzNiArMjY5OSwzMCBAQAogCVtCVFRWX0JPQVJEX1NTQUlfU0VDVVJJVFldID0gewogCQkubmFtZQkJPSAiU1NBSSBTZWN1cml0eSBWaWRlbyBJbnRlcmZhY2UiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDAsCi0JCS50dW5lcgkJPSBVTlNFVCwKLQkJLnN2aHMJCT0gVU5TRVQsCi0JCS5tdXhzZWwJCT0geyAwLCAxLCAyLCAzIH0sCi0JCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzCQk9IE5PX1NWSFMsCisJCS5tdXhzZWwJCT0gTVVYU0VMKDAsIDEsIDIsIDMpLAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfU1NBSV9VTFRSQVNPVU5EXSA9IHsKIAkJLm5hbWUJCT0gIlNTQUkgVWx0cmFzb3VuZCBWaWRlbyBJbnRlcmZhY2UiLAogCQkudmlkZW9faW5wdXRzCT0gMiwKLQkJLmF1ZGlvX2lucHV0cwk9IDAsCi0JCS50dW5lcgkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMJCT0gMSwKLQkJLm11eHNlbAkJPSB7IDIsIDAsIDEsIDMgfSwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMCwgMSwgMyksCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAkvKiAtLS0tIGNhcmQgMHg5NC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzJdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiRFZpQ08gRnVzaW9uSERUViAyIiwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GQ1YxMjM2RCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxKSwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMGUwMDAwNywKIAkJLmdwaW9tdXggICAgICAgID0geyAweDAwNDAwMDA1LCAwLCAweDAwMDAwMDAxLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDAwYzAwMDA3LApAQCAtMjk4NCwzNiArMjczNCwzMSBAQAogCVtCVFRWX0JPQVJEX1RZUEhPT05fVFZUVU5FUlBDSV0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJUeXBob29uIFRWLVR1bmVyIFBDSSAoNTA2ODQpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgzMDE0ZiwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAweDIwMDAxLDB4MTAwMDEsIDAsIDAgfSwKIAkJLmdwaW9tdXRlICAgICAgID0gMTAsCiAJCS5uZWVkc190dmF1ZGlvICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUxfSSwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0dFT1ZJU0lPTl9HVjYwMF0gPSB7CiAJCS8qIGVtaG5AdXNiLnZlICovCi0JCS5uYW1lICAgICAgICAgICAgID0gIkdlb3Zpc2lvbiBHVi02MDAiLAotCQkudmlkZW9faW5wdXRzICAgICA9IDE2LAotCQkuYXVkaW9faW5wdXRzICAgICA9IDAsCi0JCS50dW5lciAgICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICAgID0gVU5TRVQsCi0JCS5ncGlvbWFzayAgICAgICAgID0gMHgwLAotCQkubXV4c2VsICAgICAgICAgICA9IHsgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwKLQkJCQkgICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyIH0sCi0JCS5tdXhzZWxfaG9vayAgICAgID0gZ2VvdmlzaW9uX211eHNlbCwKLQkJLmdwaW9tdXggICAgICAgICAgPSB7IDAgfSwKLQkJLm5vX21zcDM0eHggICAgICAgPSAxLAotCQkucGxsICAgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgICAgPSBVTlNFVCwKLQkJLnR1bmVyX2FkZHIJICA9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICAgID0gQUREUl9VTlNFVCwKKwkJLm5hbWUJCT0gIkdlb3Zpc2lvbiBHVi02MDAiLAorCQkudmlkZW9faW5wdXRzCT0gMTYsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzCQk9IE5PX1NWSFMsCisJCS5ncGlvbWFzawk9IDB4MCwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiksCisJCS5tdXhzZWxfaG9vawk9IGdlb3Zpc2lvbl9tdXhzZWwsCisJCS5ncGlvbXV4CT0geyAwIH0sCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9LT1pVTUlfS1RWXzAxQ10gPSB7CiAJCS8qIE1hdXJvIExhY3kgPG1hdXJvQGxhY3kuY29tLmFyPgpAQCAtMzAyMSwxNyArMjc2NiwxNSBAQAogCiAJCS5uYW1lICAgICAgICAgICA9ICJLb3p1bWkgS1RWLTAxQyIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDA4MDA3LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDEsIDIsIDIgfSwgLyogQ09OVFZGTWkgKi8KIAkJLmdwaW9tdXRlIAk9IDMsIC8qIENPTlRWRk1pICovCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszLCAvKiBUQ0wgTUszICovCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLmhhc19yYWRpbyAgICAgID0gMSwKIAkJLmhhc19yZW1vdGUgICAgID0gMSwKQEAgLTMwNDEsOCArMjc4NCw3IEBACiAJCSAgIE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnICovCiAJCS5uYW1lICAgICAgICAgICA9ICJFbmNvcmUgRU5MIFRWLUZNLTIiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkvKiBiaXQgNiAgICAgICAgICAtPiBJUiBkaXNhYmxlZAogCQkgICBiaXQgMTgvMTcgPSAwMCAtPiBtdXRlCkBAIC0zMDUxLDEyICsyNzkzLDExIEBACiAJCQkgICAgICAgMTEgLT4gaW50ZXJuYWwgYXVkaW8gaW5wdXQKIAkJICovCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDYwMDQwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDMgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDMpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4NjAwMDAsIDB4NjAwMDAsIDB4MjAwMDAsIDB4MjAwMDAgfSwKIAkJLmdwaW9tdXRlIAk9IDAsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfVENMX01GMDJHSVBfNU4sCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLmhhc19yYWRpbyAgICAgID0gMSwKIAkJLmhhc19yZW1vdGUgICAgID0gMSwKQEAgLTMwNjUsNTAgKzI4MDYsMTExIEBACiAJCS8qIEQuSGVlckBQaHl0ZWMuZGUgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlBIWVRFQyBWRC0wMTIgKGJ0ODc4KSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULCAvKiBjYXJkIGhhcyBubyB0dW5lciAqLwotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwgLyogY2FyZCBoYXMgbm8gcy12aWRlbyAqLworCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDAsIDIsIDMsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDAsIDIsIDMsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAkJW0JUVFZfQk9BUkRfVkQwMTJfWDFdID0gewogCQkvKiBELkhlZXJAUGh5dGVjLmRlICovCiAJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDEyLVgxIChidDg3OCkiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMywKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJCVtCVFRWX0JPQVJEX1ZEMDEyX1gyXSA9IHsKIAkJLyogRC5IZWVyQFBoeXRlYy5kZSAqLwogCQkubmFtZSAgICAgICAgICAgPSAiUEhZVEVDIFZELTAxMi1YMiAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzICAgICAgICAgICA9IDMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMywgMiwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMywgMiwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQl9CisJfSwKKwkJW0JUVFZfQk9BUkRfR0VPVklTSU9OX0dWODAwU10gPSB7CisJCS8qIEJydW5vIENocmlzdG8gPGJjaHJpc3RvQGluZi51ZnNtLmJyPgorCQkgKgorCQkgKiBHZW9WaXNpb24gR1YtODAwKFMpIGhhcyA0IENvbmV4YW50IEZ1c2lvbiA4NzhBOgorCQkgKiAJMSBhdWRpbyBpbnB1dCAgcGVyIEJUODc4QSA9IDQgYXVkaW8gaW5wdXRzCisJCSAqIAk0IHZpZGVvIGlucHV0cyBwZXIgQlQ4NzhBID0gMTYgdmlkZW8gaW5wdXRzCisJCSAqIFRoaXMgaXMgdGhlIGZpcnN0IEJUODc4QSBjaGlwIG9mIHRoZSBHVi04MDAoUykuIEl0J3MgdGhlCisJCSAqICJtYXN0ZXIiIGNoaXAgYW5kIGl0IGNvbnRyb2xzIHRoZSB2aWRlbyBpbnB1dHMgdGhyb3VnaCBhbgorCQkgKiBhbmFsb2cgbXVsdGlwbGV4ZXIgKGEgQ0QyMk0zNDk0KSB2aWEgc29tZSBHUElPIHBpbnMuIFRoZQorCQkgKiBzbGF2ZXMgc2hvdWxkIHVzZSBjYXJkIHR5cGUgMHg5ZSAoZm9sbG93aW5nIHRoaXMgb25lKS4KKwkJICogVGhlcmUgaXMgYSBFRVBST00gb24gdGhlIGNhcmQgd2hpY2ggaXMgY3VycmVudGx5IG5vdCBoYW5kbGVkLgorCQkgKiBUaGUgYXVkaW8gaW5wdXQgaXMgbm90IHdvcmtpbmcgeWV0LgorCQkgKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkdlb3Zpc2lvbiBHVi04MDAoUykgKG1hc3RlcikiLAorCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLworCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAorCQkuZ3Bpb21hc2sJPSAweGYxMDdmLAorCQkubm9fZ3Bpb2lycSAgICAgPSAxLAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAyLCAyLCAyKSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLm5vX3RkYTc0MzIJPSAxLAorCQkubm9fdGRhOTg3NQk9IDEsCisJCS5tdXhzZWxfaG9vayAgICA9IGd2ODAwc19tdXhzZWwsCisJfSwKKwkJW0JUVFZfQk9BUkRfR0VPVklTSU9OX0dWODAwU19TTF0gPSB7CisJCS8qIEJydW5vIENocmlzdG8gPGJjaHJpc3RvQGluZi51ZnNtLmJyPgorCQkgKgorCQkgKiBHZW9WaXNpb24gR1YtODAwKFMpIGhhcyA0IENvbmV4YW50IEZ1c2lvbiA4NzhBOgorCQkgKiAJMSBhdWRpbyBpbnB1dCAgcGVyIEJUODc4QSA9IDQgYXVkaW8gaW5wdXRzCisJCSAqIAk0IHZpZGVvIGlucHV0cyBwZXIgQlQ4NzhBID0gMTYgdmlkZW8gaW5wdXRzCisJCSAqIFRoZSAzIG90aGVyIEJUODc4QSBjaGlwcyBhcmUgInNsYXZlIiBjaGlwcyBvZiB0aGUgR1YtODAwKFMpCisJCSAqIGFuZCBzaG91bGQgdXNlIHRoaXMgY2FyZCB0eXBlLgorCQkgKiBUaGUgYXVkaW8gaW5wdXQgaXMgbm90IHdvcmtpbmcgeWV0LgorCQkgKi8KKwkJLm5hbWUgICAgICAgICAgID0gIkdlb3Zpc2lvbiBHVi04MDAoUykgKHNsYXZlKSIsCisJCS52aWRlb19pbnB1dHMgICA9IDQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCisJCS5ncGlvbWFzawk9IDB4MDAsCisJCS5ub19ncGlvaXJxICAgICA9IDEsCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDIsIDIsIDIpLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLm5vX21zcDM0eHgJPSAxLAorCQkubm9fdGRhNzQzMgk9IDEsCisJCS5ub190ZGE5ODc1CT0gMSwKKwkJLm11eHNlbF9ob29rICAgID0gZ3Y4MDBzX211eHNlbCwKKwl9LAorCVtCVFRWX0JPQVJEX1BWMTgzXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlByb1ZpZGVvIFBWMTgzIiwgLyogMHg5ZiAqLworCQkudmlkZW9faW5wdXRzICAgPSAyLAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAorCQkuZ3Bpb21hc2sgICAgICAgPSAwLAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMyksCisJCS5ncGlvbXV4ICAgICAgICA9IHsgMCB9LAorCQkubmVlZHNfdHZhdWRpbyAgPSAwLAorCQkubm9fbXNwMzR4eCAgICAgPSAxLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCX0sCiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGJ0dHZfbnVtX3R2Y2FyZHMgPSBBUlJBWV9TSVpFKGJ0dHZfdHZjYXJkcyk7CkBAIC0zMTUyLDcgKzI5NTQsNyBAQAogCQkJICAgICAgIGJ0di0+Yy5uciwgYnR2LT5jYXJkaWQgJiAweGZmZmYsCiAJCQkgICAgICAgKGJ0di0+Y2FyZGlkID4+IDE2KSAmIDB4ZmZmZik7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAicGxlYXNlIG1haWwgaWQsIGJvYXJkIG5hbWUgYW5kICIKLQkJCSAgICAgICAidGhlIGNvcnJlY3QgY2FyZD0gaW5zbW9kIG9wdGlvbiB0byB2aWRlbzRsaW51eC1saXN0QHJlZGhhdC5jb21cbiIpOworCQkJICAgICAgICJ0aGUgY29ycmVjdCBjYXJkPSBpbnNtb2Qgb3B0aW9uIHRvIGxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZ1xuIik7CiAJCX0KIAl9CiAKQEAgLTM0MDMsOCArMzIwNSw3IEBACiAgKiBoYXMgaXRzIG93biBtdWx0aXBsZXhlciAqLwogc3RhdGljIHZvaWQgZWFnbGVfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCkKIHsKLQlidGFvcigoMik8PDUsIH4oMzw8NSksIEJUODQ4X0lGT1JNKTsKLQlncGlvX2JpdHMoMyxidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm11eHNlbFtpbnB1dCY3XSk7CisJZ3Bpb19iaXRzKDMsIGlucHV0ICYgMyk7CiAKIAkvKiBjb21wb3NpdGUgKi8KIAkvKiBzZXQgY2hyb21hIEFEQyB0byBzbGVlcCAqLwpAQCAtMzUyMyw2ICszMzI0LDE3IEBACiAvKiBpbml0aWFsaXphdGlvbiBwYXJ0IHR3byAtLSBhZnRlciByZWdpc3RlcmluZyBpMmMgYnVzICovCiB2b2lkIF9fZGV2aW5pdCBidHR2X2luaXRfY2FyZDIoc3RydWN0IGJ0dHYgKmJ0dikKIHsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgdHZhdWRpb19hZGRyc1tdID0geworCQlJMkNfQUREUl9UREE4NDI1ICAgPj4gMSwKKwkJSTJDX0FERFJfVEVBNjMwMCAgID4+IDEsCisJCUkyQ19BRERSX1RFQTY0MjAgICA+PiAxLAorCQlJMkNfQUREUl9UREE5ODQwICAgPj4gMSwKKwkJSTJDX0FERFJfVERBOTg1eF9MID4+IDEsCisJCUkyQ19BRERSX1REQTk4NXhfSCA+PiAxLAorCQlJMkNfQUREUl9UREE5ODc0ICAgPj4gMSwKKwkJSTJDX0FERFJfUElDMTZDNTQgID4+IDEsCisJCUkyQ19DTElFTlRfRU5ECisJfTsKIAlpbnQgYWRkcj1BRERSX1VOU0VUOwogCiAJYnR2LT50dW5lcl90eXBlID0gVU5TRVQ7CkBAIC0zNjI5LDYgKzM0NDEsOSBAQAogCWNhc2UgQlRUVl9CT0FSRF9LT0RJQ09NXzQ0MDBSOgogCQlrb2RpY29tNDQwMHJfaW5pdChidHYpOwogCQlicmVhazsKKwljYXNlIEJUVFZfQk9BUkRfR0VPVklTSU9OX0dWODAwUzoKKwkJZ3Y4MDBzX2luaXQoYnR2KTsKKwkJYnJlYWs7CiAJfQogCiAJLyogcGxsIGNvbmZpZ3VyYXRpb24gKi8KQEAgLTM2NzAsMTMgKzM0ODUsMTIgQEAKIAkJYWRkciA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXJfYWRkcjsKIAogCWlmIChVTlNFVCAhPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyX3R5cGUpCi0JCWlmKFVOU0VUID09IGJ0di0+dHVuZXJfdHlwZSkKKwkJaWYgKFVOU0VUID09IGJ0di0+dHVuZXJfdHlwZSkKIAkJCWJ0di0+dHVuZXJfdHlwZSA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXJfdHlwZTsKIAlpZiAoVU5TRVQgIT0gdHVuZXJbYnR2LT5jLm5yXSkKIAkJYnR2LT50dW5lcl90eXBlID0gdHVuZXJbYnR2LT5jLm5yXTsKIAotCWlmIChidHYtPnR1bmVyX3R5cGUgPT0gVFVORVJfQUJTRU5UIHx8Ci0JICAgIGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXIgPT0gVU5TRVQpCisJaWYgKGJ0di0+dHVuZXJfdHlwZSA9PSBUVU5FUl9BQlNFTlQpCiAJCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogdHVuZXIgYWJzZW50XG4iLCBidHYtPmMubnIpOwogCWVsc2UgaWYoYnR2LT50dW5lcl90eXBlID09IFVOU0VUKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJidHR2JWQ6IHR1bmVyIHR5cGUgdW5zZXRcbiIsIGJ0di0+Yy5ucik7CkBAIC0zNjg0LDE0ICszNDk4LDM1IEBACiAJCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogdHVuZXIgdHlwZT0lZFxuIiwgYnR2LT5jLm5yLAogCQkgICAgICAgYnR2LT50dW5lcl90eXBlKTsKIAotCWlmIChidHYtPnR1bmVyX3R5cGUgIT0gVU5TRVQpIHsKKwlpZiAoYXV0b2xvYWQgIT0gVU5TRVQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0diVkOiB0aGUgYXV0b2xvYWQgb3B0aW9uIGlzIG9ic29sZXRlLlxuIiwgYnR2LT5jLm5yKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0diVkOiB1c2Ugb3B0aW9uIG1zcDM0MDAsIHRkYTc0MzIgb3IgdHZhdWRpbyB0b1xuIiwgYnR2LT5jLm5yKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0diVkOiBvdmVycmlkZSB3aGljaCBhdWRpbyBtb2R1bGUgc2hvdWxkIGJlIHVzZWQuXG4iLCBidHYtPmMubnIpOworCX0KKworCWlmIChVTlNFVCA9PSBidHYtPnR1bmVyX3R5cGUpCisJCWJ0di0+dHVuZXJfdHlwZSA9IFRVTkVSX0FCU0VOVDsKKworCWlmIChidHYtPnR1bmVyX3R5cGUgIT0gVFVORVJfQUJTRU5UKSB7CiAJCXN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXA7CiAKKwkJLyogTG9hZCB0dW5lciBtb2R1bGUgYmVmb3JlIGlzc3VpbmcgdHVuZXIgY29uZmlnIGNhbGwhICovCisJCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmhhc19yYWRpbykKKwkJCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMuaTJjX2FkYXAsCisJCQkJInR1bmVyIiwgInR1bmVyIiwgdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfUkFESU8pKTsKKwkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy5pMmNfYWRhcCwgInR1bmVyIiwKKwkJCQkidHVuZXIiLCB2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19ERU1PRCkpOworCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLmkyY19hZGFwLCAidHVuZXIiLAorCQkJCSJ0dW5lciIsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX1RWX1dJVEhfREVNT0QpKTsKKwogCQl0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9BTkFMT0dfVFYgfCBUX0RJR0lUQUxfVFY7CiAJCXR1bl9zZXR1cC50eXBlID0gYnR2LT50dW5lcl90eXBlOwogCQl0dW5fc2V0dXAuYWRkciA9IGFkZHI7CiAKLQkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7CisJCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmhhc19yYWRpbykKKwkJCXR1bl9zZXR1cC5tb2RlX21hc2sgfD0gVF9SQURJTzsKKworCQlidHR2X2NhbGxfYWxsKGJ0diwgdHVuZXIsIHNfdHlwZV9hZGRyLCAmdHVuX3NldHVwKTsKIAl9CiAKIAlpZiAoYnR2LT50ZGE5ODg3X2NvbmYpIHsKQEAgLTM3MDAsMTAgKzM1MzUsMTMgQEAKIAkJdGRhOTg4N19jZmcudHVuZXIgPSBUVU5FUl9UREE5ODg3OwogCQl0ZGE5ODg3X2NmZy5wcml2ID0gJmJ0di0+dGRhOTg4N19jb25mOwogCi0JCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFRVTkVSX1NFVF9DT05GSUcsICZ0ZGE5ODg3X2NmZyk7CisJCWJ0dHZfY2FsbF9hbGwoYnR2LCB0dW5lciwgc19jb25maWcsICZ0ZGE5ODg3X2NmZyk7CiAJfQogCi0JYnR2LT5zdmhzID0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5zdmhzOworCWJ0di0+ZGlnID0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5oYXNfZGlnX2luID8KKwkJICAgYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS52aWRlb19pbnB1dHMgLSAxIDogVU5TRVQ7CisJYnR2LT5zdmhzID0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5zdmhzID09IE5PX1NWSFMgPworCQkgICAgVU5TRVQgOiBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnN2aHM7CiAJaWYgKHN2aHNbYnR2LT5jLm5yXSAhPSBVTlNFVCkKIAkJYnR2LT5zdmhzID0gc3Zoc1tidHYtPmMubnJdOwogCWlmIChyZW1vdGVbYnR2LT5jLm5yXSAhPSBVTlNFVCkKQEAgLTM3MjAsMzQgKzM1NTgsMTI3IEBACiAJaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uYXVkaW9fbW9kZV9ncGlvKQogCQlidHYtPmF1ZGlvX21vZGVfZ3Bpbz1idHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmF1ZGlvX21vZGVfZ3BpbzsKIAotCWlmICghYXV0b2xvYWQpCi0JCXJldHVybjsKLQotCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyID09IFVOU0VUKQorCWlmIChidHYtPnR1bmVyX3R5cGUgPT0gVFVORVJfQUJTRU5UKQogCQlyZXR1cm47ICAvKiBubyB0dW5lciBvciByZWxhdGVkIGRyaXZlcnMgdG8gbG9hZCAqLwogCisJaWYgKGJ0di0+aGFzX3NhYTY1ODggfHwgc2FhNjU4OFtidHYtPmMubnJdKSB7CisJCS8qIFByb2JlIGZvciBSRFMgcmVjZWl2ZXIgY2hpcCAqLworCQlzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYWRkcnNbXSA9IHsKKwkJCTB4MjAgPj4gMSwKKwkJCTB4MjIgPj4gMSwKKwkJCUkyQ19DTElFTlRfRU5ECisJCX07CisJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisKKwkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLmkyY19hZGFwLAorCQkJCSJzYWE2NTg4IiwgInNhYTY1ODgiLCBhZGRycyk7CisJCWJ0di0+aGFzX3NhYTY1ODggPSAoc2QgIT0gTlVMTCk7CisJfQorCiAJLyogdHJ5IHRvIGRldGVjdCBhdWRpby9mYWRlciBjaGlwcyAqLwotCWlmICghYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ub19tc3AzNHh4ICYmCi0JICAgIGJ0dHZfSTJDUmVhZChidHYsIEkyQ19BRERSX01TUDM0MDAsICJNU1AzNHh4IikgPj0wKQotCQlyZXF1ZXN0X21vZHVsZSgibXNwMzQwMCIpOwogCi0JaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubXNwMzR4eF9hbHQgJiYKLQkgICAgYnR0dl9JMkNSZWFkKGJ0diwgSTJDX0FERFJfTVNQMzQwMF9BTFQsICJNU1AzNHh4IChhbHRlcm5hdGUgYWRkcmVzcykiKSA+PTApCi0JCXJlcXVlc3RfbW9kdWxlKCJtc3AzNDAwIik7CisJLyogRmlyc3QgY2hlY2sgaWYgdGhlIHVzZXIgc3BlY2lmaWVkIHRoZSBhdWRpbyBjaGlwIHZpYSBhIG1vZHVsZQorCSAgIG9wdGlvbi4gKi8KIAotCWlmICghYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ub190ZGE5ODc1ICYmCi0JICAgIGJ0dHZfSTJDUmVhZChidHYsIEkyQ19BRERSX1REQTk4NzUsICJUREE5ODc1IikgPj0wKQotCQlyZXF1ZXN0X21vZHVsZSgidGRhOTg3NSIpOworCXN3aXRjaCAoYXVkaW9kZXZbYnR2LT5jLm5yXSkgeworCWNhc2UgLTE6CisJCXJldHVybjsJLyogZG8gbm90IGxvYWQgYW55IGF1ZGlvIG1vZHVsZSAqLwogCi0JaWYgKCFidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5vX3RkYTc0MzIgJiYKLQkgICAgYnR0dl9JMkNSZWFkKGJ0diwgSTJDX0FERFJfVERBNzQzMiwgIlREQTc0MzIiKSA+PTApCi0JCXJlcXVlc3RfbW9kdWxlKCJ0ZGE3NDMyIik7CisJY2FzZSAwOiAvKiBhdXRvZGV0ZWN0ICovCisJCWJyZWFrOwogCi0JaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubmVlZHNfdHZhdWRpbykKLQkJcmVxdWVzdF9tb2R1bGUoInR2YXVkaW8iKTsKKwljYXNlIDE6IHsKKwkJLyogVGhlIHVzZXIgc3BlY2lmaWVkIHRoYXQgd2Ugc2hvdWxkIHByb2JlIGZvciBtc3AzNDAwICovCisJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBhZGRyc1tdID0geworCQkJSTJDX0FERFJfTVNQMzQwMCA+PiAxLAorCQkJSTJDX0FERFJfTVNQMzQwMF9BTFQgPj4gMSwKKwkJCUkyQ19DTElFTlRfRU5ECisJCX07CiAKLQlpZiAoYnR2LT50dW5lcl90eXBlICE9IFVOU0VUICYmIGJ0di0+dHVuZXJfdHlwZSAhPSBUVU5FUl9BQlNFTlQpCi0JCXJlcXVlc3RfbW9kdWxlKCJ0dW5lciIpOworCQlidHYtPnNkX21zcDM0eHggPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLmkyY19hZGFwLAorCQkJCSJtc3AzNDAwIiwgIm1zcDM0MDAiLCBhZGRycyk7CisJCWlmIChidHYtPnNkX21zcDM0eHgpCisJCQlyZXR1cm47CisJCWdvdG8gbm9fYXVkaW87CisJfQorCisJY2FzZSAyOiB7CisJCS8qIFRoZSB1c2VyIHNwZWNpZmllZCB0aGF0IHdlIHNob3VsZCBwcm9iZSBmb3IgdGRhNzQzMiAqLworCQlzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYWRkcnNbXSA9IHsKKwkJCUkyQ19BRERSX1REQTc0MzIgPj4gMSwKKwkJCUkyQ19DTElFTlRfRU5ECisJCX07CisKKwkJaWYgKHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMuaTJjX2FkYXAsCisJCQkJInRkYTc0MzIiLCAidGRhNzQzMiIsIGFkZHJzKSkKKwkJCXJldHVybjsKKwkJZ290byBub19hdWRpbzsKKwl9CisKKwljYXNlIDM6IHsKKwkJLyogVGhlIHVzZXIgc3BlY2lmaWVkIHRoYXQgd2Ugc2hvdWxkIHByb2JlIGZvciB0dmF1ZGlvICovCisJCWJ0di0+c2RfdHZhdWRpbyA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMuaTJjX2FkYXAsCisJCQkJInR2YXVkaW8iLCAidHZhdWRpbyIsIHR2YXVkaW9fYWRkcnMpOworCQlpZiAoYnR2LT5zZF90dmF1ZGlvKQorCQkJcmV0dXJuOworCQlnb3RvIG5vX2F1ZGlvOworCX0KKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogdW5rbm93biBhdWRpb2RldiB2YWx1ZSFcbiIsCisJCQlidHYtPmMubnIpOworCQlyZXR1cm47CisJfQorCisJLyogVGhlcmUgd2VyZSBubyBvdmVycmlkZXMsIHNvIG5vdyB3ZSB0cnkgdG8gZGlzY292ZXIgdGhpcyB0aHJvdWdoIHRoZQorCSAgIGNhcmQgZGVmaW5pdGlvbiAqLworCisJLyogcHJvYmUgZm9yIG1zcDM0MDAgZmlyc3Q6IHRoaXMgZHJpdmVyIGNhbiBkZXRlY3Qgd2hldGhlciBvciBub3QKKwkgICBpdCByZWFsbHkgaXMgYSBtc3AzNDAwLCBzbyBpdCB3aWxsIHJldHVybiBOVUxMIHdoZW4gdGhlIGRldmljZQorCSAgIGZvdW5kIGlzIHJlYWxseSBzb21ldGhpbmcgZWxzZSAoZS5nLiBhIHRlYTYzMDApLiAqLworCWlmICghYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ub19tc3AzNHh4KSB7CisJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBhZGRyc1tdID0geworCQkJSTJDX0FERFJfTVNQMzQwMCA+PiAxLAorCQkJSTJDX0NMSUVOVF9FTkQKKwkJfTsKKworCQlidHYtPnNkX21zcDM0eHggPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLmkyY19hZGFwLAorCQkJCSJtc3AzNDAwIiwgIm1zcDM0MDAiLCBhZGRycyk7CisJfSBlbHNlIGlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm1zcDM0eHhfYWx0KSB7CisJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBhZGRyc1tdID0geworCQkJSTJDX0FERFJfTVNQMzQwMF9BTFQgPj4gMSwKKwkJCUkyQ19DTElFTlRfRU5ECisJCX07CisKKwkJYnR2LT5zZF9tc3AzNHh4ID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy5pMmNfYWRhcCwKKwkJCQkibXNwMzQwMCIsICJtc3AzNDAwIiwgYWRkcnMpOworCX0KKworCS8qIElmIHdlIGZvdW5kIGEgbXNwMzR4eCwgdGhlbiB3ZSdyZSBkb25lLiAqLworCWlmIChidHYtPnNkX21zcDM0eHgpCisJCXJldHVybjsKKworCS8qIGl0IG1pZ2h0IGFsc28gYmUgYSB0ZGE3NDMyLiAqLworCWlmICghYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ub190ZGE3NDMyKSB7CisJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBhZGRyc1tdID0geworCQkJSTJDX0FERFJfVERBNzQzMiA+PiAxLAorCQkJSTJDX0NMSUVOVF9FTkQKKwkJfTsKKworCQlpZiAodjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy5pMmNfYWRhcCwKKwkJCQkidGRhNzQzMiIsICJ0ZGE3NDMyIiwgYWRkcnMpKQorCQkJcmV0dXJuOworCX0KKworCS8qIE5vdyBzZWUgaWYgd2UgY2FuIGZpbmQgb25lIG9mIHRoZSB0dmF1ZGlvIGRldmljZXMuICovCisJYnR2LT5zZF90dmF1ZGlvID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy5pMmNfYWRhcCwKKwkJCSJ0dmF1ZGlvIiwgInR2YXVkaW8iLCB0dmF1ZGlvX2FkZHJzKTsKKwlpZiAoYnR2LT5zZF90dmF1ZGlvKQorCQlyZXR1cm47CisKK25vX2F1ZGlvOgorCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogYXVkaW8gYWJzZW50LCBubyBhdWRpbyBkZXZpY2UgZm91bmQhXG4iLAorCQkJYnR2LT5jLm5yKTsKIH0KIAogCkBAIC0zODE5LDYgKzM3NTAsNyBAQAogCQlwcmludGsoImJ0dHYlZDogVGVycmF0ZWMgQWN0aXZlIFJhZGlvIFVwZ3JhZGUgZm91bmQuXG4iLAogCQkgICAgICAgYnR2LT5jLm5yKTsKIAkJYnR2LT5oYXNfcmFkaW8gICAgPSAxOworCQlidHYtPmhhc19zYWE2NTg4ICA9IDE7CiAJCWJ0di0+aGFzX21hdGNoYm94ID0gMTsKIAl9IGVsc2UgewogCQlidHYtPmhhc19yYWRpbyAgICA9IDA7CkBAIC00MDY3LDI3ICszOTk5LDI2IEBACiAJICAgICAgIGJ0di0+aGFzX3JlbW90ZSA/ICJ5ZXMiIDogIm5vIik7CiB9CiAKLS8qIHVzZWQgb24gVm9vZG9vIFRWL0ZNIChWb29kb28gMjAwKSwgUzAgd2lyZWQgdG8gMHgxMDAwMCAqLwotdm9pZCBidHR2X3RkYTk4ODBfc2V0bm9ybShzdHJ1Y3QgYnR0diAqYnR2LCBpbnQgbm9ybSkKKy8qCisgKiBGb3IgVm9vZG9vIFRWL0ZNIGFuZCBWb29kb28gMjAwLiAgVGhlc2UgY2FyZHMnIHR1bmVycyB1c2UgYSBUREE5ODgwCisgKiBhbmFsb2cgZGVtb2QsIHdoaWNoIGlzIG5vdCBJMkMgY29udHJvbGxlZCBsaWtlIHRoZSBuZXdlciBhbmQgbW9yZSBjb21tb24KKyAqIFREQTk4ODcgc2VyaWVzLiAgSW5zdGVhZCBpcyBoYXMgdHdvIHRyaS1zdGF0ZSBpbnB1dCBwaW5zLCBTMCBhbmQgUzEsCisgKiB0aGF0IGNvbnRyb2wgdGhlIElGIGZvciB0aGUgdmlkZW8gYW5kIGF1ZGlvLiAgQXBwYXJlbnRseSwgYnR0diBHUElPCisgKiAweDEwMDAwIGlzIGNvbm5lY3RlZCB0byBTMC4gIFMwIGxvdyBzZWxlY3RzIGEgMzguOSBNSHogVklGIGZvciBCL0cvRC9LL0kKKyAqIChpLmUuLCBQQUwpIHdoaWxlIGhpZ2ggc2VsZWN0cyA0NS43NSBNSHogZm9yIE0vTiAoaS5lLiwgTlRTQykuCisgKi8KK3UzMiBidHR2X3RkYTk4ODBfc2V0bm9ybShzdHJ1Y3QgYnR0diAqYnR2LCB1MzIgZ3Bpb2JpdHMpCiB7Ci0JLyogZml4IHVwIG91ciBjYXJkIGVudHJ5ICovCi0JaWYobm9ybT09VjRMMl9TVERfTlRTQykgewotCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9WT09ET09UVl9GTV0uZ3Bpb211eFtUVkFVRElPX0lOUFVUX1RVTkVSXT0weDk1N2ZmZjsKLQkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfRk1dLmdwaW9tdXRlPTB4OTU3ZmZmOwotCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9WT09ET09UVl8yMDBdLmdwaW9tdXhbVFZBVURJT19JTlBVVF9UVU5FUl09MHg5NTdmZmY7Ci0JCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWXzIwMF0uZ3Bpb211dGU9MHg5NTdmZmY7Ci0JCWRwcmludGsoImJ0dHZfdGRhOTg4MF9zZXRub3JtIHRvIE5UU0NcbiIpOworCisJaWYgKGJ0di0+YXVkaW8gPT0gVFZBVURJT19JTlBVVF9UVU5FUikgeworCQlpZiAoYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXS52NGwyX2lkICYgVjRMMl9TVERfTU4pCisJCQlncGlvYml0cyB8PSAweDEwMDAwOworCQllbHNlCisJCQlncGlvYml0cyAmPSB+MHgxMDAwMDsKIAl9Ci0JZWxzZSB7Ci0JCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNXS5ncGlvbXV4W1RWQVVESU9fSU5QVVRfVFVORVJdPTB4OTQ3ZmZmOwotCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9WT09ET09UVl9GTV0uZ3Bpb211dGU9MHg5NDdmZmY7Ci0JCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWXzIwMF0uZ3Bpb211eFtUVkFVRElPX0lOUFVUX1RVTkVSXT0weDk0N2ZmZjsKLQkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfMjAwXS5ncGlvbXV0ZT0weDk0N2ZmZjsKLQkJZHByaW50aygiYnR0dl90ZGE5ODgwX3NldG5vcm0gdG8gUEFMXG4iKTsKLQl9Ci0JLyogc2V0IEdQSU8gYWNjb3JkaW5nICovCi0JZ3Bpb19iaXRzKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb21hc2ssCi0JCSAgYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ncGlvbXV4W2J0di0+YXVkaW9dKTsKKworCWdwaW9fYml0cyhidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tYXNrLCBncGlvYml0cyk7CisJcmV0dXJuIGdwaW9iaXRzOwogfQogCiAKQEAgLTQ0NjMsNiArNDM5NCwxMSBAQAogICovCiBzdGF0aWMgdm9pZCBydjYwNV9tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KQogeworCXN0YXRpYyBjb25zdCB1OCBtdXhncGlvW10gPSB7IDB4MywgMHgxLCAweDIsIDB4NCwgMHhmLCAweDcsIDB4ZSwgMHgwLAorCQkJCSAgICAgIDB4ZCwgMHhiLCAweGMsIDB4NiwgMHg5LCAweDUsIDB4OCwgMHhhIH07CisKKwlncGlvX2JpdHMoMHgwN2YsIG11eGdwaW9baW5wdXRdKTsKKwogCS8qIHJlc2V0IGFsbCBjb25lY3Rpb25zICovCiAJZ3Bpb19iaXRzKDB4MjAwLDB4MjAwKTsKIAltZGVsYXkoMSk7CkBAIC00NDcwLDcgKzQ0MDYsNiBAQAogCW1kZWxheSgxKTsKIAogCS8qIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uICovCi0JZ3Bpb19iaXRzKDB4NDgwLDB4MDgwKTsKIAlncGlvX2JpdHMoMHg0ODAsMHg0ODApOwogCW1kZWxheSgxKTsKIAlncGlvX2JpdHMoMHg0ODAsMHgwODApOwpAQCAtNDcyOSw4ICs0NjY0LDcgQEAKIAlidHR2X0kyQ1dyaXRlKGJ0diwgSTJDX1REQTg1NDBfQUxUNiwgMHgwMiwKIAkJICAgICAgKChtYXRyaXggPT0gMikgPyAweDAzIDogMHgwMCksIDEpOyAgLyogOS0xMiAqLwogCi0JLyogU2VsZWN0cyBNVVgwIGZvciBpbnB1dCBvbiB0aGUgODc4ICovCi0JYnRhb3IoKDApPDw1LCB+KDM8PDUpLCBCVDg0OF9JRk9STSk7CisJLyogODc4J3MgTVVYMCBpcyBhbHJlYWR5IHNlbGVjdGVkIGZvciBpbnB1dCB2aWEgbXV4c2VsIHZhbHVlcyAqLwogfQogCiAKQEAgLTQ4MTQsNiArNDc0OCwxMzIgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiYnR0diVkOiBzZXR0aW5nIGlucHV0IGNoYW5uZWwgdG86JWRcbiIsIGJ0di0+Yy5uciwoaW50KW11eCk7CiB9CiAKK3N0YXRpYyB2b2lkIHBoeXRlY19tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KQoreworCXVuc2lnbmVkIGludCBtdXggPSBpbnB1dCAlIDQ7CisKKwlpZiAoaW5wdXQgPT0gYnR2LT5zdmhzKQorCQltdXggPSAwOworCisJZ3Bpb19iaXRzKDB4MywgbXV4KTsKK30KKworLyoKKyAqIEdlb1Zpc2lvbiBHVi04MDAoUykgZnVuY3Rpb25zCisgKiBCcnVubyBDaHJpc3RvIDxiY2hyaXN0b0BpbmYudWZzbS5icj4KKyovCisKKy8qIFRoaXMgaXMgYSBmdW5jdGlvbiB0byBjb250cm9sIHRoZSBhbmFsb2cgc3dpdGNoLCB3aGljaCBkZXRlcm1pbmVzIHdoaWNoCisgKiBjYW1lcmEgaXMgcm91dGVkIHRvIHdoaWNoIGNvbnRyb2xsZXIuICBUaGUgc3dpdGNoIGNvbXByaXNlcyBhbiBYLWFkZHJlc3MKKyAqIChncGlvIGJpdHMgMC0zLCByZXByZXNlbnRpbmcgdGhlIGNhbWVyYSwgcmFuZ2luZyBmcm9tIDAtMTUpLCBhbmQgYQorICogWS1hZGRyZXNzIChncGlvIGJpdHMgNC02LCByZXByZXNlbnRpbmcgdGhlIGNvbnRyb2xsZXIsIHJhbmdpbmcgZnJvbSAwLTMpLgorICogQSBkYXRhIHZhbHVlIChncGlvIGJpdCAxOCkgb2YgJzEnIGVuYWJsZXMgdGhlIHN3aXRjaCwgYW5kICcwJyBkaXNhYmxlcworICogdGhlIHN3aXRjaC4gIEEgU1RST0JFIGJpdCAoZ3BpbyBiaXQgMTcpIGxhdGNoZXMgdGhlIGRhdGEgdmFsdWUgaW50byB0aGUKKyAqIHNwZWNpZmllZCBhZGRyZXNzLiBUaGVyZSBpcyBhbHNvIGEgY2hpcCBzZWxlY3QgKGdwaW8gYml0IDE2KS4KKyAqIFRoZSBpZGVhIGlzIHRvIHNldCB0aGUgYWRkcmVzcyBhbmQgY2hpcCBzZWxlY3QgdG9nZXRoZXIsIGJyaW5nCisgKiBTVFJPQkUgaGlnaCwgd3JpdGUgdGhlIGRhdGEsIGFuZCBmaW5hbGx5IGJyaW5nIFNUUk9CRSBiYWNrIHRvIGxvdy4KKyAqLworc3RhdGljIHZvaWQgZ3Y4MDBzX3dyaXRlKHN0cnVjdCBidHR2ICpidHYsCisJCQkgdW5zaWduZWQgY2hhciB4YWRkciwKKwkJCSB1bnNpZ25lZCBjaGFyIHlhZGRyLAorCQkJIHVuc2lnbmVkIGNoYXIgZGF0YSkgeworCS8qIE9uIHRoZSAibWFzdGVyIiA4NzhBOgorCSogR1BJTyBiaXRzIDAtOSBhcmUgdXNlZCBmb3IgdGhlIGFuYWxvZyBzd2l0Y2g6CisJKiAgIDAwIC0gMDM6CWNhbWVyYSBzZWxlY3RvcgorCSogICAwNCAtIDA2Ogk4NzhBIChjb250cm9sbGVyKSBzZWxlY3RvcgorCSogICAxNjogCWNzZWxlY3QKKwkqICAgMTc6CQlzdHJvYmUKKwkqICAgMTg6IAlkYXRhICgxLT5vbiwgMC0+b2ZmKQorCSogICAxOToJCXJlc2V0CisJKi8KKwljb25zdCB1MzIgQUREUkVTUyA9ICgoeGFkZHImMHhmKSB8ICh5YWRkciYzKTw8NCk7CisJY29uc3QgdTMyIENTRUxFQ1QgPSAxPDwxNjsKKwljb25zdCB1MzIgU1RST0JFID0gMTw8MTc7CisJY29uc3QgdTMyIERBVEEgPSBkYXRhPDwxODsKKworCWdwaW9fYml0cygweDEwMDdmLCBBRERSRVNTIHwgQ1NFTEVDVCk7CS8qIHdyaXRlIEFERFJFU1MgYW5kIENTRUxFQ1QgKi8KKwlncGlvX2JpdHMoMHgyMDAwMCwgU1RST0JFKTsJCS8qIFNUUk9CRSBoaWdoICovCisJZ3Bpb19iaXRzKDB4NDAwMDAsIERBVEEpOwkJLyogd3JpdGUgREFUQSAqLworCWdwaW9fYml0cygweDIwMDAwLCB+U1RST0JFKTsJCS8qIFNUUk9CRSBsb3cgKi8KK30KKworLyoKKyAqIEdlb1Zpc2lvbiBHVi04MDAoUykgbXV4c2VsCisgKgorICogRWFjaCBvZiB0aGUgNCBjYXJkcyAoY29udHJvbGxlcnMpIHVzZSB0aGlzIGZ1bmN0aW9uLgorICogVGhlIGNvbnRyb2xsZXIgdXNpbmcgdGhpcyBmdW5jdGlvbiBzZWxlY3RzIHRoZSBpbnB1dCB0aHJvdWdoIHRoZSBHUElPIHBpbnMKKyAqIG9mIHRoZSAibWFzdGVyIiBjYXJkLiBBIHBvaW50ZXIgdG8gdGhpcyBjYXJkIGlzIHN0b3JlZCBpbiBtYXN0ZXJbYnR2LT5jLm5yXS4KKyAqCisgKiBUaGUgcGFyYW1ldGVyICdpbnB1dCcgaXMgdGhlIHJlcXVlc3RlZCBjYW1lcmEgbnVtYmVyICgwLTQpIG9uIHRoZSBjb250cm9sbGVyLgorICogVGhlIG1hcCBhcnJheSBoYXMgdGhlIGFkZHJlc3Mgb2YgZWFjaCBpbnB1dC4gTm90ZSB0aGF0IHRoZSBhZGRyZXNzZXMgaW4gdGhlCisgKiBhcnJheSBhcmUgaW4gdGhlIHNlcXVlbmNlIHRoZSBvcmlnaW5hbCBHZW9WaXNpb24gZHJpdmVyIHVzZXMsIHRoYXQgaXMsIHNldAorICogZXZlcnkgY29udHJvbGxlciB0byBpbnB1dCAwLCB0aGVuIHRvIGlucHV0IDEsIDIsIDMsIHJlcGVhdC4gVGhpcyBtZWFucyB0aGF0CisgKiB0aGUgcGh5c2ljYWwgImNhbWVyYSAxIiBjb25uZWN0b3IgY29ycmVzcG9uZHMgdG8gY29udHJvbGxlciAwIGlucHV0IDAsCisgKiAiY2FtZXJhIDIiIGNvcnJlc3BvbmRzIHRvIGNvbnRyb2xsZXIgMSBpbnB1dCAwLCBhbmQgc28gb24uCisgKgorICogQWZ0ZXIgZ2V0dGluZyB0aGUgaW5wdXQgYWRkcmVzcywgdGhlIGZ1bmN0aW9uIHRoZW4gd3JpdGVzIHRoZSBhcHByb3ByaWF0ZQorICogZGF0YSB0byB0aGUgYW5hbG9nIHN3aXRjaCwgYW5kIGhvdXNla2VlcHMgdGhlIGxvY2FsIGNvcHkgb2YgdGhlIHN3aXRjaAorICogaW5mb3JtYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIGd2ODAwc19tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KQoreworCXN0cnVjdCBidHR2ICptY3RscjsKKwljaGFyICpzd19zdGF0dXM7CisJaW50IHhhZGRyLCB5YWRkcjsKKwlzdGF0aWMgdW5zaWduZWQgaW50IG1hcFs0XVs0XSA9IHsgeyAweDAsIDB4NCwgMHhhLCAweDYgfSwKKwkJCQkJICB7IDB4MSwgMHg1LCAweGIsIDB4NyB9LAorCQkJCQkgIHsgMHgyLCAweDgsIDB4YywgMHhlIH0sCisJCQkJCSAgeyAweDMsIDB4OSwgMHhkLCAweGYgfSB9OworCWlucHV0ID0gaW5wdXQlNDsKKwltY3RsciA9IG1hc3RlcltidHYtPmMubnJdOworCWlmIChtY3RsciA9PSBOVUxMKSB7CisJCS8qIGRvIG5vdGhpbmcgdW50aWwgdGhlICJtYXN0ZXIiIGlzIGRldGVjdGVkICovCisJCXJldHVybjsKKwl9CisJeWFkZHIgPSAoYnR2LT5jLm5yIC0gbWN0bHItPmMubnIpICYgMzsKKwlzd19zdGF0dXMgPSAoY2hhciAqKSgmbWN0bHItPm1ib3hfd2UpOworCXhhZGRyID0gbWFwW3lhZGRyXVtpbnB1dF0gJiAweGY7CisKKwkvKiBDaGVjayBpZiB0aGUgY29udHJvbGxlci9jYW1lcmEgcGFpciBoYXMgY2hhbmdlZCwgaWdub3JlIG90aGVyd2lzZSAqLworCWlmIChzd19zdGF0dXNbeWFkZHJdICE9IHhhZGRyKSB7CisJCS8qIGRpc2FibGUgdGhlIG9sZCBzd2l0Y2gsIGVuYWJsZSB0aGUgbmV3IG9uZSBhbmQgc2F2ZSBzdGF0dXMgKi8KKwkJZ3Y4MDBzX3dyaXRlKG1jdGxyLCBzd19zdGF0dXNbeWFkZHJdLCB5YWRkciwgMCk7CisJCXN3X3N0YXR1c1t5YWRkcl0gPSB4YWRkcjsKKwkJZ3Y4MDBzX3dyaXRlKG1jdGxyLCB4YWRkciwgeWFkZHIsIDEpOworCX0KK30KKworLyogR2VvVmlzaW9uIEdWLTgwMChTKSAibWFzdGVyIiBjaGlwIGluaXQgKi8KK3N0YXRpYyB2b2lkIGd2ODAwc19pbml0KHN0cnVjdCBidHR2ICpidHYpCit7CisJY2hhciAqc3dfc3RhdHVzID0gKGNoYXIgKikoJmJ0di0+bWJveF93ZSk7CisJaW50IGl4OworCisJZ3Bpb19pbm91dCgweGYxMDdmLCAweGYxMDdmKTsKKwlncGlvX3dyaXRlKDE8PDE5KTsgLyogcmVzZXQgdGhlIGFuYWxvZyBNVVggKi8KKwlncGlvX3dyaXRlKDApOworCisJLyogUHJlc2V0IGNhbWVyYSAwIHRvIHRoZSA0IGNvbnRyb2xsZXJzICovCisJZm9yIChpeCA9IDA7IGl4IDwgNDsgaXgrKykgeworCQlzd19zdGF0dXNbaXhdID0gaXg7CisJCWd2ODAwc193cml0ZShidHYsIGl4LCBpeCwgMSk7CisJfQorCisJLyogSW5wdXRzIG9uIHRoZSAibWFzdGVyIiBjb250cm9sbGVyIG5lZWQgdGhpcyBicmlnaHRuZXNzIGZpeCAqLworCWJ0dHZfSTJDV3JpdGUoYnR2LCAweDE4LCAweDUsIDB4OTAsIDEpOworCisJaWYgKGJ0di0+Yy5uciA+IEJUVFZfTUFYLTQpCisJCXJldHVybjsKKwkvKgorCSAqIFN0b3JlIHRoZSAibWFzdGVyIiBjb250cm9sbGVyIHBvaW50ZXIgaW4gdGhlIG1hc3RlcgorCSAqIGFycmF5IGZvciBsYXRlciB1c2UgaW4gdGhlIG11eHNlbCBmdW5jdGlvbi4KKwkgKi8KKwltYXN0ZXJbYnR2LT5jLm5yXSAgID0gYnR2OworCW1hc3RlcltidHYtPmMubnIrMV0gPSBidHY7CisJbWFzdGVyW2J0di0+Yy5ucisyXSA9IGJ0djsKKwltYXN0ZXJbYnR2LT5jLm5yKzNdID0gYnR2OworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogbW90aGVyYm9hcmQgY2hpcHNldCBzcGVjaWZpYyBzdHVmZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCmluZGV4IGM3MWYzOTQuLjdhOGNhMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAogCiB1bnNpZ25lZCBpbnQgYnR0dl9udW07CQkJLyogbnVtYmVyIG9mIEJ0ODQ4cyBpbiB1c2UgKi8KLXN0cnVjdCBidHR2IGJ0dHZzW0JUVFZfTUFYXTsKK3N0cnVjdCBidHR2ICpidHR2c1tCVFRWX01BWF07CiAKIHVuc2lnbmVkIGludCBidHR2X2RlYnVnOwogdW5zaWduZWQgaW50IGJ0dHZfdmVyYm9zZSA9IDE7CkBAIC0xNjcsNyArMTY3LDcgQEAKIAkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCA9IGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IHZpZGVvX2RldmljZSwgZGV2KTsKLQlzdHJ1Y3QgYnR0diAqYnR2ID0gZGV2X2dldF9kcnZkYXRhKHZmZC0+cGFyZW50KTsKKwlzdHJ1Y3QgYnR0diAqYnR2ID0gdmlkZW9fZ2V0X2RydmRhdGEodmZkKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgYnR2ID8gYnR2LT5jLnR5cGUgOiBVTlNFVCk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoY2FyZCwgU19JUlVHTywgc2hvd19jYXJkLCBOVUxMKTsKQEAgLTEwNDAsNyArMTA0MCw3IEBACiAJaW50IHRhYmxlX2lkeCA9IGJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV0uc3JhbTsKIAlpbnQgZnNjICAgICAgID0gYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXS5Gc2M7CiAKLQlpZiAoVU5TRVQgPT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5tdXhzZWxbYnR2LT5pbnB1dF0pIHsKKwlpZiAoYnR2LT5pbnB1dCA9PSBidHYtPmRpZykgewogCQlkcHJpbnRrKCJidHR2JWQ6IGxvYWQgZGlnaXRhbCB0aW1pbmcgdGFibGUgKHRhYmxlX2lkeD0lZClcbiIsCiAJCQlidHYtPmMubnIsdGFibGVfaWR4KTsKIApAQCAtMTE0Miw3ICsxMTQyLDcgQEAKIAkJYnRhbmQofkJUODQ4X0NPTlRST0xfQ09NUCwgQlQ4NDhfRV9DT05UUk9MKTsKIAkJYnRhbmQofkJUODQ4X0NPTlRST0xfQ09NUCwgQlQ4NDhfT19DT05UUk9MKTsKIAl9Ci0JbXV4ID0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5tdXhzZWxbaW5wdXRdICYgMzsKKwltdXggPSBidHR2X211eHNlbChidHYsIGlucHV0KTsKIAlidGFvcihtdXg8PDUsIH4oMzw8NSksIEJUODQ4X0lGT1JNKTsKIAlkcHJpbnRrKEtFUk5fREVCVUcgImJ0dHYlZDogdmlkZW8gbXV4OiBpbnB1dD0lZCBtdXg9JWRcbiIsCiAJCWJ0di0+Yy5ucixpbnB1dCxtdXgpOwpAQCAtMTE2Myw3ICsxMTYzLDYgQEAKIHsKIAlpbnQgZ3Bpb192YWwsIHNpZ25hbDsKIAlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmM7CiAKIAlncGlvX2lub3V0KGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb21hc2ssCiAJCSAgIGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb21hc2spOwpAQCAtMTE4MCw3ICsxMTc5LDE2IEBACiAJZWxzZQogCQlncGlvX3ZhbCA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb211eFtpbnB1dF07CiAKLQlncGlvX2JpdHMoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ncGlvbWFzaywgZ3Bpb192YWwpOworCXN3aXRjaCAoYnR2LT5jLnR5cGUpIHsKKwljYXNlIEJUVFZfQk9BUkRfVk9PRE9PVFZfRk06CisJY2FzZSBCVFRWX0JPQVJEX1ZPT0RPT1RWXzIwMDoKKwkJZ3Bpb192YWwgPSBidHR2X3RkYTk4ODBfc2V0bm9ybShidHYsIGdwaW9fdmFsKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlncGlvX2JpdHMoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ncGlvbWFzaywgZ3Bpb192YWwpOworCX0KKwogCWlmIChidHR2X2dwaW8pCiAJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsIGF1ZGlvX21vZGVzW211dGUgPyA0IDogaW5wdXRdKTsKIAlpZiAoaW5faW50ZXJydXB0KCkpCkBAIC0xMTg4LDkgKzExOTYsOCBAQAogCiAJY3RybC5pZCA9IFY0TDJfQ0lEX0FVRElPX01VVEU7CiAJY3RybC52YWx1ZSA9IGJ0di0+bXV0ZTsKLQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfU19DVFJMLCAmY3RybCk7Ci0JYyA9IGJ0di0+aTJjX21zcDM0eHhfY2xpZW50OwotCWlmIChjKSB7CisJYnR0dl9jYWxsX2FsbChidHYsIGNvcmUsIHNfY3RybCwgJmN0cmwpOworCWlmIChidHYtPnNkX21zcDM0eHgpIHsKIAkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKIAogCQkvKiBOb3RlOiB0aGUgaW5wdXRzIHR1bmVyL3JhZGlvL2V4dGVybi9pbnRlcm4gYXJlIHRyYW5zbGF0ZWQKQEAgLTEyMjksMTUgKzEyMzYsMTQgQEAKIAkJCWJyZWFrOwogCQl9CiAJCXJvdXRlLm91dHB1dCA9IE1TUF9PVVRQVVRfREVGQVVMVDsKLQkJYy0+ZHJpdmVyLT5jb21tYW5kKGMsIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCAmcm91dGUpOworCQl2NGwyX3N1YmRldl9jYWxsKGJ0di0+c2RfbXNwMzR4eCwgYXVkaW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAl9Ci0JYyA9IGJ0di0+aTJjX3R2YXVkaW9fY2xpZW50OwotCWlmIChjKSB7CisJaWYgKGJ0di0+c2RfdHZhdWRpbykgewogCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwogCiAJCXJvdXRlLmlucHV0ID0gaW5wdXQ7CiAJCXJvdXRlLm91dHB1dCA9IDA7Ci0JCWMtPmRyaXZlci0+Y29tbWFuZChjLCBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywgJnJvdXRlKTsKKwkJdjRsMl9zdWJkZXZfY2FsbChidHYtPnNkX3R2YXVkaW8sIGF1ZGlvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTI3Nyw3ICsxMjgzLDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLWJ0dHZfY3JvcF9yZXNldChzdHJ1Y3QgYnR0dl9jcm9wICpjLCBpbnQgbm9ybSkKK2J0dHZfY3JvcF9yZXNldChzdHJ1Y3QgYnR0dl9jcm9wICpjLCB1bnNpZ25lZCBpbnQgbm9ybSkKIHsKIAljLT5yZWN0ID0gYnR0dl90dm5vcm1zW25vcm1dLmNyb3BjYXAuZGVmcmVjdDsKIAlidHR2X2Nyb3BfY2FsY19saW1pdHMoYyk7CkBAIC0xMjkwLDE2ICsxMjk2LDEzIEBACiAJY29uc3Qgc3RydWN0IGJ0dHZfdHZub3JtICp0dm5vcm07CiAJdjRsMl9zdGRfaWQgaWQ7CiAKLQlpZiAobm9ybSA8IDAgfHwgbm9ybSA+PSBCVFRWX1RWTk9STVMpCi0JCXJldHVybiAtRUlOVkFMOworCUJVR19PTihub3JtID49IEJUVFZfVFZOT1JNUyk7CisJQlVHX09OKGJ0di0+dHZub3JtID49IEJUVFZfVFZOT1JNUyk7CiAKIAl0dm5vcm0gPSAmYnR0dl90dm5vcm1zW25vcm1dOwogCi0JaWYgKGJ0di0+dHZub3JtIDwgMCB8fAotCSAgICBidHYtPnR2bm9ybSA+PSBCVFRWX1RWTk9STVMgfHwKLQkgICAgMCAhPSBtZW1jbXAoJmJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV0uY3JvcGNhcCwKLQkJCSZ0dm5vcm0tPmNyb3BjYXAsCi0JCQlzaXplb2YgKHR2bm9ybS0+Y3JvcGNhcCkpKSB7CisJaWYgKCFtZW1jbXAoJmJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV0uY3JvcGNhcCwgJnR2bm9ybS0+Y3JvcGNhcCwKKwkJICAgIHNpemVvZiAodHZub3JtLT5jcm9wY2FwKSkpIHsKIAkJYnR0dl9jcm9wX3Jlc2V0KCZidHYtPmNyb3BbMF0sIG5vcm0pOwogCQlidHYtPmNyb3BbMV0gPSBidHYtPmNyb3BbMF07IC8qIGN1cnJlbnQgPSBkZWZhdWx0ICovCiAKQEAgLTEzMjIsMTEgKzEzMjUsMTEgQEAKIAlzd2l0Y2ggKGJ0di0+Yy50eXBlKSB7CiAJY2FzZSBCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNOgogCWNhc2UgQlRUVl9CT0FSRF9WT09ET09UVl8yMDA6Ci0JCWJ0dHZfdGRhOTg4MF9zZXRub3JtKGJ0dixub3JtKTsKKwkJYnR0dl90ZGE5ODgwX3NldG5vcm0oYnR2LCBncGlvX3JlYWQoKSk7CiAJCWJyZWFrOwogCX0KIAlpZCA9IHR2bm9ybS0+djRsMl9pZDsKLQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfU19TVEQsICZpZCk7CisJYnR0dl9jYWxsX2FsbChidHYsIHR1bmVyLCBzX3N0ZCwgaWQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzUwLDggKzEzNTMsOCBAQAogCX0gZWxzZSB7CiAJCXZpZGVvX211eChidHYsaW5wdXQpOwogCX0KLQlhdWRpb19pbnB1dChidHYsKGlucHV0ID09IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXIgPwotCQkgICAgICAgVFZBVURJT19JTlBVVF9UVU5FUiA6IFRWQVVESU9fSU5QVVRfRVhURVJOKSk7CisJYXVkaW9faW5wdXQoYnR2LCAoYnR2LT50dW5lcl90eXBlICE9IFRVTkVSX0FCU0VOVCAmJiBpbnB1dCA9PSAwKSA/CisJCQkgVFZBVURJT19JTlBVVF9UVU5FUiA6IFRWQVVESU9fSU5QVVRfRVhURVJOKTsKIAlzZXRfdHZub3JtKGJ0diwgbm9ybSk7CiB9CiAKQEAgLTE0NzAsNyArMTQ3Myw3IEBACiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DX0dfQ1RSTCwgYyk7CisJCWJ0dHZfY2FsbF9hbGwoYnR2LCBjb3JlLCBnX2N0cmwsIGMpOwogCQlicmVhazsKIAogCWNhc2UgVjRMMl9DSURfUFJJVkFURV9DSFJPTUFfQUdDOgpAQCAtMTU0NCwxMiArMTU0NywxMiBAQAogCQlpZiAoYnR2LT52b2x1bWVfZ3BpbykKIAkJCWJ0di0+dm9sdW1lX2dwaW8oYnR2LCBjLT52YWx1ZSk7CiAKLQkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DX1NfQ1RSTCwgYyk7CisJCWJ0dHZfY2FsbF9hbGwoYnR2LCBjb3JlLCBzX2N0cmwsIGMpOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfU19DVFJMLCBjKTsKKwkJYnR0dl9jYWxsX2FsbChidHYsIGNvcmUsIHNfY3RybCwgYyk7CiAJCWJyZWFrOwogCiAJY2FzZSBWNEwyX0NJRF9QUklWQVRFX0NIUk9NQV9BR0M6CkBAIC0xODg4LDIwICsxODkxLDE1IEBACiB7CiAJc3RydWN0IGJ0dHZfZmggKmZoID0gcHJpdjsKIAlzdHJ1Y3QgYnR0diAqYnR2ID0gZmgtPmJ0djsKLQl1bnNpZ25lZCBpbnQgbjsKKwlpbnQgbjsKIAotCW4gPSBpLT5pbmRleDsKLQotCWlmIChuID49IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udmlkZW9faW5wdXRzKQorCWlmIChpLT5pbmRleCA+PSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnZpZGVvX2lucHV0cykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltZW1zZXQoaSwgMCwgc2l6ZW9mKCppKSk7Ci0KLQlpLT5pbmRleCAgICA9IG47CiAJaS0+dHlwZSAgICAgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwogCWktPmF1ZGlvc2V0ID0gMTsKIAotCWlmIChpLT5pbmRleCA9PSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyKSB7CisJaWYgKGJ0di0+dHVuZXJfdHlwZSAhPSBUVU5FUl9BQlNFTlQgJiYgaS0+aW5kZXggPT0gMCkgewogCQlzcHJpbnRmKGktPm5hbWUsICJUZWxldmlzaW9uIik7CiAJCWktPnR5cGUgID0gVjRMMl9JTlBVVF9UWVBFX1RVTkVSOwogCQlpLT50dW5lciA9IDA7CkBAIC0xOTY1LDE0ICsxOTYzLDE0IEBACiAJaWYgKDAgIT0gZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKFVOU0VUID09IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXIpCisJaWYgKGJ0di0+dHVuZXJfdHlwZSA9PSBUVU5FUl9BQlNFTlQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKDAgIT0gdC0+aW5kZXgpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKLQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfU19UVU5FUiwgdCk7CisJYnR0dl9jYWxsX2FsbChidHYsIHR1bmVyLCBzX3R1bmVyLCB0KTsKIAogCWlmIChidHYtPmF1ZGlvX21vZGVfZ3BpbykKIAkJYnR2LT5hdWRpb19tb2RlX2dwaW8oYnR2LCB0LCAxKTsKQEAgLTIwMTcsNyArMjAxNSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCW11dGV4X2xvY2soJmJ0di0+bG9jayk7CiAJYnR2LT5mcmVxID0gZi0+ZnJlcXVlbmN5OwotCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ19TX0ZSRVFVRU5DWSwgZik7CisJYnR0dl9jYWxsX2FsbChidHYsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgZik7CiAJaWYgKGJ0di0+aGFzX21hdGNoYm94ICYmIGJ0di0+cmFkaW9fdXNlcikKIAkJdGVhNTc1N19zZXRfZnJlcShidHYsIGJ0di0+ZnJlcSk7CiAJbXV0ZXhfdW5sb2NrKCZidHYtPmxvY2spOwpAQCAtMjAzMSw3ICsyMDI5LDcgQEAKIAogCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogPT09PT09PT0gIFNUQVJUIFNUQVRVUyBDQVJEICMlZCAgPT09PT09PT1cbiIsCiAJCQlidHYtPmMubnIsIGJ0di0+Yy5ucik7Ci0JYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DX0xPR19TVEFUVVMsIE5VTEwpOworCWJ0dHZfY2FsbF9hbGwoYnR2LCBjb3JlLCBsb2dfc3RhdHVzKTsKIAlwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6ID09PT09PT09ICBFTkQgU1RBVFVTIENBUkQgICAjJWQgID09PT09PT09XG4iLAogCQkJYnR2LT5jLm5yLCBidHYtPmMubnIpOwogCXJldHVybiAwOwpAQCAtMjY1OSw4ICsyNjU3LDcgQEAKIAlpZiAobm9fb3ZlcmxheSA8PSAwKQogCQljYXAtPmNhcGFiaWxpdGllcyB8PSBWNEwyX0NBUF9WSURFT19PVkVSTEFZOwogCi0JaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXIgIT0gVU5TRVQgJiYKLQkgICAgYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lciAhPSBUVU5FUl9BQlNFTlQpCisJaWYgKGJ0di0+dHVuZXJfdHlwZSAhPSBUVU5FUl9BQlNFTlQpCiAJCWNhcC0+Y2FwYWJpbGl0aWVzIHw9IFY0TDJfQ0FQX1RVTkVSOwogCXJldHVybiAwOwogfQpAQCAtMjkyNywxMyArMjkyNCw5IEBACiB7CiAJc3RydWN0IGJ0dHZfZmggKmZoID0gZjsKIAlzdHJ1Y3QgYnR0diAqYnR2ID0gZmgtPmJ0djsKLQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCBzOwogCi0JaWYgKHBhcm0tPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQl2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3QoJnMsIGJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV0udjRsMl9pZCwKLQkJCQkgYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXS5uYW1lKTsKLQlwYXJtLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lID0gcy5mcmFtZXBlcmlvZDsKKwl2NGwyX3ZpZGVvX3N0ZF9mcmFtZV9wZXJpb2QoYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXS52NGwyX2lkLAorCQkJCSAgICAmcGFybS0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5NDMsMTUgKzI5MzYsMTQgQEAKIAlzdHJ1Y3QgYnR0dl9maCAqZmggPSBwcml2OwogCXN0cnVjdCBidHR2ICpidHYgPSBmaC0+YnR2OwogCi0JaWYgKFVOU0VUID09IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXIpCisJaWYgKGJ0di0+dHVuZXJfdHlwZSA9PSBUVU5FUl9BQlNFTlQpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmICgwICE9IHQtPmluZGV4KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJmJ0di0+bG9jayk7Ci0JbWVtc2V0KHQsIDAsIHNpemVvZigqdCkpOwogCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwotCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ19HX1RVTkVSLCB0KTsKKwlidHR2X2NhbGxfYWxsKGJ0diwgdHVuZXIsIGdfdHVuZXIsIHQpOwogCXN0cmNweSh0LT5uYW1lLCAiVGVsZXZpc2lvbiIpOwogCXQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9OT1JNOwogCXQtPnR5cGUgICAgICAgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKQEAgLTMyMTIsMjkgKzMyMDQsMTkgQEAKIHN0YXRpYyBpbnQgYnR0dl9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewogCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOwotCXN0cnVjdCBidHR2ICpidHYgPSBOVUxMOworCXN0cnVjdCBidHR2ICpidHYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCBidHR2X2ZoICpmaDsKIAllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IDA7Ci0JdW5zaWduZWQgaW50IGk7CiAKIAlkcHJpbnRrKEtFUk5fREVCVUcgImJ0dHY6IG9wZW4gbWlub3I9JWRcbiIsbWlub3IpOwogCiAJbG9ja19rZXJuZWwoKTsKLQlmb3IgKGkgPSAwOyBpIDwgYnR0dl9udW07IGkrKykgewotCQlpZiAoYnR0dnNbaV0udmlkZW9fZGV2ICYmCi0JCSAgICBidHR2c1tpXS52aWRlb19kZXYtPm1pbm9yID09IG1pbm9yKSB7Ci0JCQlidHYgPSAmYnR0dnNbaV07Ci0JCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGJ0dHZzW2ldLnZiaV9kZXYgJiYKLQkJICAgIGJ0dHZzW2ldLnZiaV9kZXYtPm1pbm9yID09IG1pbm9yKSB7Ci0JCQlidHYgPSAmYnR0dnNbaV07Ci0JCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChOVUxMID09IGJ0dikgeworCWlmIChidHYtPnZpZGVvX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKKwkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwl9IGVsc2UgaWYgKGJ0di0+dmJpX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKKwkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU7CisJfSBlbHNlIHsKKwkJV0FSTl9PTigxKTsKIAkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0zNDI0LDIwICszNDA2LDE0IEBACiBzdGF0aWMgaW50IHJhZGlvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7Ci0Jc3RydWN0IGJ0dHYgKmJ0diA9IE5VTEw7CisJc3RydWN0IGJ0dHYgKmJ0diA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJc3RydWN0IGJ0dHZfZmggKmZoOwotCXVuc2lnbmVkIGludCBpOwogCiAJZHByaW50aygiYnR0djogb3BlbiBtaW5vcj0lZFxuIixtaW5vcik7CiAKIAlsb2NrX2tlcm5lbCgpOwotCWZvciAoaSA9IDA7IGkgPCBidHR2X251bTsgaSsrKSB7Ci0JCWlmIChidHR2c1tpXS5yYWRpb19kZXYgJiYgYnR0dnNbaV0ucmFkaW9fZGV2LT5taW5vciA9PSBtaW5vcikgewotCQkJYnR2ID0gJmJ0dHZzW2ldOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKE5VTEwgPT0gYnR2KSB7CisJV0FSTl9PTihidHYtPnJhZGlvX2RldiAmJiBidHYtPnJhZGlvX2Rldi0+bWlub3IgIT0gbWlub3IpOworCWlmICghYnR2LT5yYWRpb19kZXYgfHwgYnR2LT5yYWRpb19kZXYtPm1pbm9yICE9IG1pbm9yKSB7CiAJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMzQ1OCw3ICszNDM0LDcgQEAKIAogCWJ0di0+cmFkaW9fdXNlcisrOwogCi0JYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0dixBVURDX1NFVF9SQURJTyxOVUxMKTsKKwlidHR2X2NhbGxfYWxsKGJ0diwgdHVuZXIsIHNfcmFkaW8pOwogCWF1ZGlvX2lucHV0KGJ0dixUVkFVRElPX0lOUFVUX1JBRElPKTsKIAogCW11dGV4X3VubG9jaygmYnR2LT5sb2NrKTsKQEAgLTM0NzgsNyArMzQ1NCw3IEBACiAKIAlidHYtPnJhZGlvX3VzZXItLTsKIAotCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFJEU19DTURfQ0xPU0UsICZjbWQpOworCWJ0dHZfY2FsbF9hbGwoYnR2LCBjb3JlLCBpb2N0bCwgUkRTX0NNRF9DTE9TRSwgJmNtZCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM1MDMsMTYgKzM0NzksMTUgQEAKIAlzdHJ1Y3QgYnR0dl9maCAqZmggPSBwcml2OwogCXN0cnVjdCBidHR2ICpidHYgPSBmaC0+YnR2OwogCi0JaWYgKFVOU0VUID09IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXIpCisJaWYgKGJ0di0+dHVuZXJfdHlwZSA9PSBUVU5FUl9BQlNFTlQpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmICgwICE9IHQtPmluZGV4KQogCQlyZXR1cm4gLUVJTlZBTDsKIAltdXRleF9sb2NrKCZidHYtPmxvY2spOwotCW1lbXNldCh0LCAwLCBzaXplb2YoKnQpKTsKIAlzdHJjcHkodC0+bmFtZSwgIlJhZGlvIik7CiAJdC0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAKLQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfR19UVU5FUiwgdCk7CisJYnR0dl9jYWxsX2FsbChidHYsIHR1bmVyLCBnX3R1bmVyLCB0KTsKIAogCWlmIChidHYtPmF1ZGlvX21vZGVfZ3BpbykKIAkJYnR2LT5hdWRpb19tb2RlX2dwaW8oYnR2LCB0LCAwKTsKQEAgLTM1NTQsNyArMzUyOSw3IEBACiAJaWYgKDAgIT0gdC0+aW5kZXgpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DX0dfVFVORVIsIHQpOworCWJ0dHZfY2FsbF9hbGwoYnR2LCB0dW5lciwgZ190dW5lciwgdCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2MTUsNyArMzU5MCw3IEBACiAJY21kLmluc3RhbmNlID0gZmlsZTsKIAljbWQucmVzdWx0ID0gLUVOT0RFVjsKIAotCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFJEU19DTURfUkVBRCwgJmNtZCk7CisJYnR0dl9jYWxsX2FsbChidHYsIGNvcmUsIGlvY3RsLCBSRFNfQ01EX1JFQUQsICZjbWQpOwogCiAJcmV0dXJuIGNtZC5yZXN1bHQ7CiB9CkBAIC0zNjI4LDcgKzM2MDMsNyBAQAogCWNtZC5pbnN0YW5jZSA9IGZpbGU7CiAJY21kLmV2ZW50X2xpc3QgPSB3YWl0OwogCWNtZC5yZXN1bHQgPSAtRU5PREVWOwotCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFJEU19DTURfUE9MTCwgJmNtZCk7CisJYnR0dl9jYWxsX2FsbChidHYsIGNvcmUsIGlvY3RsLCBSRFNfQ01EX1BPTEwsICZjbWQpOwogCiAJcmV0dXJuIGNtZC5yZXN1bHQ7CiB9CkBAIC0zNzEyLDE0ICszNjg3LDE0IEBACiAJdW5zaWduZWQgaW50IGksaixuOwogCiAJcHJpbnRrKCIlczogcmlzYyBkaXNhc206ICVwIFtkbWE9MHglMDhseF1cbiIsCi0JICAgICAgIGJ0di0+Yy5uYW1lLCByaXNjLT5jcHUsICh1bnNpZ25lZCBsb25nKXJpc2MtPmRtYSk7CisJICAgICAgIGJ0di0+Yy52NGwyX2Rldi5uYW1lLCByaXNjLT5jcHUsICh1bnNpZ25lZCBsb25nKXJpc2MtPmRtYSk7CiAJZm9yIChpID0gMDsgaSA8IChyaXNjLT5zaXplID4+IDIpOyBpICs9IG4pIHsKLQkJcHJpbnRrKCIlczogICAweCVseDogIiwgYnR2LT5jLm5hbWUsCisJCXByaW50aygiJXM6ICAgMHglbHg6ICIsIGJ0di0+Yy52NGwyX2Rldi5uYW1lLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpKHJpc2MtPmRtYSArIChpPDwyKSkpOwogCQluID0gYnR0dl9yaXNjX2RlY29kZShsZTMyX3RvX2NwdShyaXNjLT5jcHVbaV0pKTsKIAkJZm9yIChqID0gMTsgaiA8IG47IGorKykKIAkJCXByaW50aygiJXM6ICAgMHglbHg6IDB4JTA4eCBbIGFyZyAjJWQgXVxuIiwKLQkJCSAgICAgICBidHYtPmMubmFtZSwgKHVuc2lnbmVkIGxvbmcpKHJpc2MtPmRtYSArICgoaStqKTw8MikpLAorCQkJICAgICAgIGJ0di0+Yy52NGwyX2Rldi5uYW1lLCAodW5zaWduZWQgbG9uZykocmlzYy0+ZG1hICsgKChpK2opPDwyKSksCiAJCQkgICAgICAgcmlzYy0+Y3B1W2kral0sIGopOwogCQlpZiAoMCA9PSByaXNjLT5jcHVbaV0pCiAJCQlicmVhazsKQEAgLTQxOTUsOSArNDE3MCwxMCBAQAogCQlyZXR1cm4gTlVMTDsKIAkqdmZkID0gKnRlbXBsYXRlOwogCXZmZC0+bWlub3IgICA9IC0xOwotCXZmZC0+cGFyZW50ICA9ICZidHYtPmMucGNpLT5kZXY7CisJdmZkLT52NGwyX2RldiA9ICZidHYtPmMudjRsMl9kZXY7CiAJdmZkLT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CiAJdmZkLT5kZWJ1ZyAgID0gYnR0dl9kZWJ1ZzsKKwl2aWRlb19zZXRfZHJ2ZGF0YSh2ZmQsIGJ0dik7CiAJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwgIkJUJWQlcyAlcyAoJXMpIiwKIAkJIGJ0di0+aWQsIChidHYtPmlkPT04NDggJiYgYnR2LT5yZXZpc2lvbj09MHgxMikgPyAiQSIgOiAiIiwKIAkJIHR5cGVfbmFtZSwgYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5uYW1lKTsKQEAgLTQzMDcsMTAgKzQyODMsMTQgQEAKIAlpZiAoYnR0dl9udW0gPT0gQlRUVl9NQVgpCiAJCXJldHVybiAtRU5PTUVNOwogCXByaW50ayhLRVJOX0lORk8gImJ0dHY6IEJ0OHh4IGNhcmQgZm91bmQgKCVkKS5cbiIsIGJ0dHZfbnVtKTsKLQlidHY9JmJ0dHZzW2J0dHZfbnVtXTsKLQltZW1zZXQoYnR2LDAsc2l6ZW9mKCpidHYpKTsKKwlidHR2c1tidHR2X251bV0gPSBidHYgPSBremFsbG9jKHNpemVvZigqYnR2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ0diA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiYnR0djogb3V0IG9mIG1lbW9yeS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJYnR2LT5jLm5yICA9IGJ0dHZfbnVtOwotCXNwcmludGYoYnR2LT5jLm5hbWUsImJ0dHYlZCIsYnR2LT5jLm5yKTsKKwlzbnByaW50ZihidHYtPmMudjRsMl9kZXYubmFtZSwgc2l6ZW9mKGJ0di0+Yy52NGwyX2Rldi5uYW1lKSwKKwkJCSJidHR2JWQiLCBidHYtPmMubnIpOwogCiAJLyogaW5pdGlhbGl6ZSBzdHJ1Y3RzIC8gZmlsbCBpbiBkZWZhdWx0cyAqLwogCW11dGV4X2luaXQoJmJ0di0+bG9jayk7CkBAIC00MzQ3LDcgKzQzMjcsNyBAQAogCX0KIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LDApLAogCQkJCXBjaV9yZXNvdXJjZV9sZW4oZGV2LDApLAotCQkJCWJ0di0+Yy5uYW1lKSkgeworCQkJCWJ0di0+Yy52NGwyX2Rldi5uYW1lKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJidHR2JWQ6IGNhbid0IHJlcXVlc3QgaW9tZW0gKDB4JWxseCkuXG4iLAogCQkgICAgICAgYnR2LT5jLm5yLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LDApKTsKQEAgLTQzNTUsNyArNDMzNSwxMiBAQAogCX0KIAlwY2lfc2V0X21hc3RlcihkZXYpOwogCXBjaV9zZXRfY29tbWFuZChkZXYpOwotCXBjaV9zZXRfZHJ2ZGF0YShkZXYsYnR2KTsKKworCXJlc3VsdCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPmRldiwgJmJ0di0+Yy52NGwyX2Rldik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0diVkOiB2NGwyX2RldmljZV9yZWdpc3RlcigpIGZhaWxlZFxuIiwgYnR2LT5jLm5yKTsKKwkJZ290byBmYWlsMDsKKwl9CiAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmJ0di0+cmV2aXNpb24pOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsICZsYXQpOwpAQCAtNDM3OSw3ICs0MzY0LDcgQEAKIAkvKiBkaXNhYmxlIGlycXMsIHJlZ2lzdGVyIGlycSBoYW5kbGVyICovCiAJYnR3cml0ZSgwLCBCVDg0OF9JTlRfTUFTSyk7CiAJcmVzdWx0ID0gcmVxdWVzdF9pcnEoYnR2LT5jLnBjaS0+aXJxLCBidHR2X2lycSwKLQkJCSAgICAgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELGJ0di0+Yy5uYW1lLCh2b2lkICopYnR2KTsKKwkgICAgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCBidHYtPmMudjRsMl9kZXYubmFtZSwgKHZvaWQgKilidHYpOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYnR0diVkOiBjYW4ndCBnZXQgSVJRICVkXG4iLAogCQkgICAgICAgYnR0dl9udW0sYnR2LT5jLnBjaS0+aXJxKTsKQEAgLTQ0NjMsMjEgKzQ0NDgsMjQgQEAKIAlidHR2X251bSsrOwogCXJldHVybiAwOwogCi0gZmFpbDI6CitmYWlsMjoKIAlmcmVlX2lycShidHYtPmMucGNpLT5pcnEsYnR2KTsKIAotIGZhaWwxOgorZmFpbDE6CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmYnR2LT5jLnY0bDJfZGV2KTsKKworZmFpbDA6CiAJaWYgKGJ0di0+YnQ4NDhfbW1pbykKIAkJaW91bm1hcChidHYtPmJ0ODQ4X21taW8pOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoYnR2LT5jLnBjaSwwKSwKIAkJCSAgIHBjaV9yZXNvdXJjZV9sZW4oYnR2LT5jLnBjaSwwKSk7Ci0JcGNpX3NldF9kcnZkYXRhKGRldixOVUxMKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgYnR0dl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7Ci0Jc3RydWN0IGJ0dHYgKmJ0diA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBidHR2ICpidHYgPSB0b19idHR2KHY0bDJfZGV2KTsKIAogCWlmIChidHR2X3ZlcmJvc2UpCiAJCXByaW50aygiYnR0diVkOiB1bmxvYWRpbmdcbiIsYnR2LT5jLm5yKTsKQEAgLTQ1MTEsMTQgKzQ0OTksMTggQEAKIAlyZWxlYXNlX21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KGJ0di0+Yy5wY2ksMCksCiAJCQkgICBwY2lfcmVzb3VyY2VfbGVuKGJ0di0+Yy5wY2ksMCkpOwogCi0JcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIE5VTEwpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmJ0di0+Yy52NGwyX2Rldik7CisJYnR0dnNbYnR2LT5jLm5yXSA9IE5VTEw7CisJa2ZyZWUoYnR2KTsKKwogCXJldHVybjsKIH0KIAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBidHR2X3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgYnR0diAqYnR2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IGJ0dHYgKmJ0diA9IHRvX2J0dHYodjRsMl9kZXYpOwogCXN0cnVjdCBidHR2X2J1ZmZlcl9zZXQgaWRsZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC00NTUzLDcgKzQ1NDUsOCBAQAogCiBzdGF0aWMgaW50IGJ0dHZfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogewotCXN0cnVjdCBidHR2ICpidHYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgYnR0diAqYnR2ID0gdG9fYnR0dih2NGwyX2Rldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaTJjLmMKaW5kZXggYmNkMmNkMi4uYTk5ZDkyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pMmMuYwpAQCAtMzYsOCArMzYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotc3RhdGljIGludCBhdHRhY2hfaW5mb3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwotCiBzdGF0aWMgaW50IGkyY19kZWJ1ZzsKIHN0YXRpYyBpbnQgaTJjX2h3Owogc3RhdGljIGludCBpMmNfc2NhbjsKQEAgLTIzMSw3ICsyMjksOCBAQAogCiBzdGF0aWMgaW50IGJ0dHZfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0pCiB7Ci0Jc3RydWN0IGJ0dHYgKmJ0diA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXApOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBpMmNfZ2V0X2FkYXBkYXRhKGkyY19hZGFwKTsKKwlzdHJ1Y3QgYnR0diAqYnR2ID0gdG9fYnR0dih2NGwyX2Rldik7CiAJaW50IHJldHZhbCA9IDA7CiAJaW50IGk7CiAKQEAgLTI2NSw1MiArMjY0LDYgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBJMkMgZnVuY3Rpb25zIC0gY29tbW9uIHN0dWZmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi1zdGF0aWMgaW50IGF0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgYnR0diAqYnR2ID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCWludCBhZGRyPUFERFJfVU5TRVQ7Ci0KLQotCWlmIChBRERSX1VOU0VUICE9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXJfYWRkcikKLQkJYWRkciA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXJfYWRkcjsKLQotCi0JaWYgKGJ0dHZfZGVidWcpCi0JCXByaW50ayhLRVJOX0RFQlVHICJidHR2JWQ6ICVzIGkyYyBhdHRhY2ggW2FkZHI9MHgleCxjbGllbnQ9JXNdXG4iLAotCQkJYnR2LT5jLm5yLCBjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIGNsaWVudC0+YWRkciwKLQkJCWNsaWVudC0+bmFtZSk7Ci0JaWYgKCFjbGllbnQtPmRyaXZlci0+Y29tbWFuZCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoY2xpZW50LT5kcml2ZXItPmlkID09IEkyQ19EUklWRVJJRF9NU1AzNDAwKQotCQlidHYtPmkyY19tc3AzNHh4X2NsaWVudCA9IGNsaWVudDsKLQlpZiAoY2xpZW50LT5kcml2ZXItPmlkID09IEkyQ19EUklWRVJJRF9UVkFVRElPKQotCQlidHYtPmkyY190dmF1ZGlvX2NsaWVudCA9IGNsaWVudDsKLQlpZiAoYnR2LT50dW5lcl90eXBlICE9IFVOU0VUKSB7Ci0JCXN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXA7Ci0KLQkJaWYgKChhZGRyPT1BRERSX1VOU0VUKSB8fAotCQkJCShhZGRyPT1jbGllbnQtPmFkZHIpKSB7Ci0KLQkJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UViB8IFRfRElHSVRBTF9UViB8IFRfUkFESU87Ci0JCQl0dW5fc2V0dXAudHlwZSA9IGJ0di0+dHVuZXJfdHlwZTsKLQkJCXR1bl9zZXR1cC5hZGRyID0gYWRkcjsKLQkJCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOwotCQl9Ci0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBidHR2X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCWlmICgwICE9IGJ0di0+aTJjX3JjKQotCQlyZXR1cm47Ci0JaTJjX2NsaWVudHNfY29tbWFuZCgmYnR2LT5jLmkyY19hZGFwLCBjbWQsIGFyZyk7Ci19Ci0KLQogLyogcmVhZCBJMkMgKi8KIGludCBidHR2X0kyQ1JlYWQoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgY2hhciBhZGRyLCBjaGFyICpwcm9iZV9mb3IpCiB7CkBAIC00MTcsMjEgKzM3MCwxNSBAQAogCQlidHYtPmMuaTJjX2FkYXAuYWxnb19kYXRhID0gJmJ0di0+aTJjX2FsZ287CiAJfQogCWJ0di0+Yy5pMmNfYWRhcC5vd25lciA9IFRISVNfTU9EVUxFOwotCWJ0di0+Yy5pMmNfYWRhcC5jbGFzcyA9IEkyQ19DTEFTU19UVl9BTkFMT0c7Ci0JYnR2LT5jLmkyY19hZGFwLmNsaWVudF9yZWdpc3RlciA9IGF0dGFjaF9pbmZvcm07CiAKIAlidHYtPmMuaTJjX2FkYXAuZGV2LnBhcmVudCA9ICZidHYtPmMucGNpLT5kZXY7CiAJc25wcmludGYoYnR2LT5jLmkyY19hZGFwLm5hbWUsIHNpemVvZihidHYtPmMuaTJjX2FkYXAubmFtZSksCiAJCSAiYnQlZCAjJWQgWyVzXSIsIGJ0di0+aWQsIGJ0di0+Yy5uciwKIAkJIGJ0di0+dXNlX2kyY19odyA/ICJodyIgOiAic3ciKTsKIAotCWkyY19zZXRfYWRhcGRhdGEoJmJ0di0+Yy5pMmNfYWRhcCwgYnR2KTsKKwlpMmNfc2V0X2FkYXBkYXRhKCZidHYtPmMuaTJjX2FkYXAsICZidHYtPmMudjRsMl9kZXYpOwogCWJ0di0+aTJjX2NsaWVudC5hZGFwdGVyID0gJmJ0di0+Yy5pMmNfYWRhcDsKIAotCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5vX3ZpZGVvKQotCQlidHYtPmMuaTJjX2FkYXAuY2xhc3MgJj0gfkkyQ19DTEFTU19UVl9BTkFMT0c7Ci0JaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uaGFzX2R2YikKLQkJYnR2LT5jLmkyY19hZGFwLmNsYXNzIHw9IEkyQ19DTEFTU19UVl9ESUdJVEFMOwogCiAJaWYgKGJ0di0+dXNlX2kyY19odykgewogCQlidHYtPmkyY19yYyA9IGkyY19hZGRfYWRhcHRlcigmYnR2LT5jLmkyY19hZGFwKTsKQEAgLTQ0MSw3ICszODgsNyBAQAogCQlidHYtPmkyY19yYyA9IGkyY19iaXRfYWRkX2J1cygmYnR2LT5jLmkyY19hZGFwKTsKIAl9CiAJaWYgKDAgPT0gYnR2LT5pMmNfcmMgJiYgaTJjX3NjYW4pCi0JCWRvX2kyY19zY2FuKGJ0di0+Yy5uYW1lLCZidHYtPmkyY19jbGllbnQpOworCQlkb19pMmNfc2NhbihidHYtPmMudjRsMl9kZXYubmFtZSwgJmJ0di0+aTJjX2NsaWVudCk7CiAJcmV0dXJuIGJ0di0+aTJjX3JjOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaWYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pZi5jCmluZGV4IGVjZjA3OTguLmE2YTU0MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pZi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pZi5jCkBAIC00Nyw3ICs0NywxMCBAQAogewogCWlmIChjYXJkID49IGJ0dHZfbnVtKQogCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gYnR0dnNbY2FyZF0uYy5wY2k7CisJaWYgKCFidHR2c1tjYXJkXSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gYnR0dnNbY2FyZF0tPmMucGNpOwogfQogCiAKQEAgLTU5LDcgKzYyLDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWJ0diA9ICZidHR2c1tjYXJkXTsKKwlidHYgPSBidHR2c1tjYXJkXTsKKwlpZiAoIWJ0dikKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlncGlvX2lub3V0KG1hc2ssZGF0YSk7CiAJaWYgKGJ0dHZfZ3BpbykKIAkJYnR0dl9ncGlvX3RyYWNraW5nKGJ0diwiZXh0ZXJuIGVuYWJsZSIpOwpAQCAtNzQsNyArODAsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlidHYgPSAmYnR0dnNbY2FyZF07CisJYnR2ID0gYnR0dnNbY2FyZF07CisJaWYgKCFidHYpCisJCXJldHVybiAtRU5PREVWOwogCiAJaWYoYnR2LT5zaHV0ZG93bikgewogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTk0LDcgKzEwMiw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWJ0diA9ICZidHR2c1tjYXJkXTsKKwlidHYgPSBidHR2c1tjYXJkXTsKKwlpZiAoIWJ0dikKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIC8qIHByaW9yIHNldHRpbmcgQlQ4NDhfR1BJT19SRUdfSU5QIGlzIChwcm9iYWJseSkgbm90IG5lZWRlZAogICAgYmVjYXVzZSBkaXJlY3QgaW5wdXQgaXMgc2V0IG9uIGluaXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1yaXNjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtcmlzYy5jCmluZGV4IDViMWI4ZTQuLmQxNmFmMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1yaXNjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXJpc2MuYwpAQCAtMzQxLDcgKzM0MSw3IEBACiAJaW50IHRvdGFsd2lkdGggICA9IHR2bm9ybS0+dG90YWx3aWR0aDsKIAlpbnQgc2NhbGVkdHdpZHRoID0gdHZub3JtLT5zY2FsZWR0d2lkdGg7CiAKLQlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5tdXhzZWxbYnR2LT5pbnB1dF0gPCAwKSB7CisJaWYgKGJ0di0+aW5wdXQgPT0gYnR2LT5kaWcpIHsKIAkJc3dpZHRoICAgICAgID0gNzIwOwogCQl0b3RhbHdpZHRoICAgPSA4NTg7CiAJCXNjYWxlZHR3aWR0aCA9IDg1ODsKQEAgLTM5MSw3ICszOTEsNyBAQAogCSAgICAgJiYgY3JvcC0+d2lkdGggPT0gdHZub3JtLT5jcm9wY2FwLmRlZnJlY3Qud2lkdGgKIAkgICAgICYmIGNyb3AtPmhlaWdodCA9PSB0dm5vcm0tPmNyb3BjYXAuZGVmcmVjdC5oZWlnaHQKIAkgICAgICYmIHdpZHRoIDw9IHR2bm9ybS0+c3dpZHRoIC8qIHNlZSBQQUwtTmMgZXQgYWwgKi8pCi0JICAgIHx8IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubXV4c2VsW2J0di0+aW5wdXRdIDwgMCkgeworCSAgICB8fCBidHYtPmlucHV0ID09IGJ0di0+ZGlnKSB7CiAJCWJ0dHZfY2FsY19nZW9fb2xkKGJ0diwgZ2VvLCB3aWR0aCwgaGVpZ2h0LAogCQkJCSAgYm90aF9maWVsZHMsIHR2bm9ybSk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di12YmkuYwppbmRleCA2ODE5ZTIxLi5lNzlhNDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXZiaS5jCkBAIC00MTEsNyArNDExLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBidHR2X3ZiaV9mbXRfcmVzZXQoc3RydWN0IGJ0dHZfdmJpX2ZtdCAqZiwgaW50IG5vcm0pCit2b2lkIGJ0dHZfdmJpX2ZtdF9yZXNldChzdHJ1Y3QgYnR0dl92YmlfZm10ICpmLCB1bnNpZ25lZCBpbnQgbm9ybSkKIHsKIAljb25zdCBzdHJ1Y3QgYnR0dl90dm5vcm0gKnR2bm9ybTsKIAl1bnNpZ25lZCBpbnQgcmVhbF9zYW1wbGVzX3Blcl9saW5lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYuaAppbmRleCA1MjliZjZjLi4zZDM2ZGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYuaApAQCAtMTQsOCArMTQsOSBAQAogI2lmbmRlZiBfQlRUVl9IXwogI2RlZmluZSBfQlRUVl9IXwogCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL2lyLWtiZC1pMmMuaD4KICNpbmNsdWRlIDxtZWRpYS9pMmMtYWRkci5oPgpAQCAtMTgwLDYgKzE4MSwxMCBAQAogI2RlZmluZSBCVFRWX0JPQVJEX1ZEMDEyCQkgICAweDk5CiAjZGVmaW5lIEJUVFZfQk9BUkRfVkQwMTJfWDEJCSAgIDB4OWEKICNkZWZpbmUgQlRUVl9CT0FSRF9WRDAxMl9YMgkJICAgMHg5YgorI2RlZmluZSBCVFRWX0JPQVJEX0lWQ0U4Nzg0CQkgICAweDljCisjZGVmaW5lIEJUVFZfQk9BUkRfR0VPVklTSU9OX0dWODAwUwkgICAweDlkCisjZGVmaW5lIEJUVFZfQk9BUkRfR0VPVklTSU9OX0dWODAwU19TTAkgICAweDllCisjZGVmaW5lIEJUVFZfQk9BUkRfUFYxODMgICAgICAgICAgICAgICAgICAgMHg5ZgogCiAKIC8qIG1vcmUgY2FyZC1zcGVjaWZpYyBkZWZpbmVzICovCkBAIC0xOTEsMTIgKzE5Niw5IEBACiAjZGVmaW5lIFdJTlZJRVdfUFQyMjU0X0RBVEEgMHgyMAogI2RlZmluZSBXSU5WSUVXX1BUMjI1NF9TVFJPQkUgMHg4MAogCi0vKiBkaWdpdGFsX21vZGUgKi8KLSNkZWZpbmUgRElHSVRBTF9NT0RFX1ZJREVPIDEKLSNkZWZpbmUgRElHSVRBTF9NT0RFX0NBTUVSQSAyCi0KIHN0cnVjdCBidHR2X2NvcmUgewogCS8qIGRldmljZSBzdHJ1Y3RzICovCisJc3RydWN0IHY0bDJfZGV2aWNlICAgdjRsMl9kZXY7CiAJc3RydWN0IHBjaV9kZXYgICAgICAgKnBjaTsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgICBpMmNfYWRhcDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICBzdWJzOyAgICAgLyogc3RydWN0IGJ0dHZfc3ViX2RldmljZSAqLwpAQCAtMjA0LDU5ICsyMDYsNzkgQEAKIAkvKiBkZXZpY2UgY29uZmlnICovCiAJdW5zaWduZWQgaW50ICAgICAgICAgbnI7ICAgICAgIC8qIGRldiBuciAoZm9yIHByaW50aygiYnR0diVkOiAuLi4iKTsgICovCiAJdW5zaWduZWQgaW50ICAgICAgICAgdHlwZTsgICAgIC8qIGNhcmQgdHlwZSAocG9pbnRlciBpbnRvIHR2Y2FyZHNbXSkgICovCi0JY2hhciAgICAgICAgICAgICAgICAgbmFtZVs4XTsgIC8qIGRldiBuYW1lICovCiB9OwogCiBzdHJ1Y3QgYnR0djsKIAotCi1zdHJ1Y3QgdHZjYXJkCi17CitzdHJ1Y3QgdHZjYXJkIHsKIAljaGFyICpuYW1lOwotCXVuc2lnbmVkIGludCB2aWRlb19pbnB1dHM7Ci0JdW5zaWduZWQgaW50IGF1ZGlvX2lucHV0czsKLQl1bnNpZ25lZCBpbnQgdHVuZXI7Ci0JdW5zaWduZWQgaW50IHN2aHM7Ci0JdW5zaWduZWQgaW50IGRpZ2l0YWxfbW9kZTsgLy8gRElHSVRBTF9NT0RFX0NBTUVSQSBvciBESUdJVEFMX01PREVfVklERU8KKwl2b2lkICgqdm9sdW1lX2dwaW8pKHN0cnVjdCBidHR2ICpidHYsIF9fdTE2IHZvbHVtZSk7CisJdm9pZCAoKmF1ZGlvX21vZGVfZ3Bpbykoc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHY0bDJfdHVuZXIgKnR1bmVyLCBpbnQgc2V0KTsKKwl2b2lkICgqbXV4c2VsX2hvb2spKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCk7CisKKwkvKiBNVVggYml0cyBmb3IgZWFjaCBpbnB1dCwgdHdvIGJpdHMgcGVyIGlucHV0IHN0YXJ0aW5nIHdpdGggdGhlIExTQiAqLworCXUzMiBtdXhzZWw7IC8qIFVzZSBNVVhTRUwoKSB0byBzZXQgKi8KKwogCXUzMiBncGlvbWFzazsKLQl1MzIgbXV4c2VsWzE2XTsKIAl1MzIgZ3Bpb211eFs0XTsgIC8qIFR1bmVyLCBSYWRpbywgZXh0ZXJuYWwsIGludGVybmFsICovCiAJdTMyIGdwaW9tdXRlOyAgICAvKiBHUElPIG11dGUgc2V0dGluZyAqLwogCXUzMiBncGlvbWFzazI7ICAgLyogR1BJTyBNVVggbWFzayAqLwogCisJdW5zaWduZWQgaW50IHR1bmVyX3R5cGU7CisJdTggdHVuZXJfYWRkcjsKKwl1OCB2aWRlb19pbnB1dHM7CS8qIE51bWJlciBvZiBpbnB1dHMgKi8KKwl1bnNpZ25lZCBpbnQgc3Zoczo0OwkvKiBXaGljaCBpbnB1dCBpcyBzLXZpZGVvICovCisjZGVmaW5lIE5PX1NWSFMJMTUKKwl1bnNpZ25lZCBpbnQgcGxsOjI7CisjZGVmaW5lIFBMTF9OT05FIDAKKyNkZWZpbmUgUExMXzI4ICAgMQorI2RlZmluZSBQTExfMzUgICAyCisKIAkvKiBpMmMgYXVkaW8gZmxhZ3MgKi8KIAl1bnNpZ25lZCBpbnQgbm9fbXNwMzR4eDoxOwogCXVuc2lnbmVkIGludCBub190ZGE5ODc1OjE7CiAJdW5zaWduZWQgaW50IG5vX3RkYTc0MzI6MTsKIAl1bnNpZ25lZCBpbnQgbmVlZHNfdHZhdWRpbzoxOwogCXVuc2lnbmVkIGludCBtc3AzNHh4X2FsdDoxOworCS8qIE5vdGU6IGN1cnJlbnRseSBubyBjYXJkIGRlZmluaXRpb24gbmVlZHMgdG8gbWFyayB0aGUgcHJlc2VuY2UKKwkgICBvZiBhIFJEUyBzYWE2NTg4IGNoaXAuIElmIHRoaXMgaXMgZXZlciBuZWVkZWQsIHRoZW4gYWRkIGEgbmV3CisJICAgJ2hhc19zYWE2NTg4JyBiaXQgaGVyZS4gKi8KIAotCS8qIGZsYWc6IHZpZGVvIHBjaSBmdW5jdGlvbiBpcyB1bnVzZWQgKi8KLQl1bnNpZ25lZCBpbnQgbm9fdmlkZW86MTsKKwl1bnNpZ25lZCBpbnQgbm9fdmlkZW86MTsgLyogdmlkZW8gcGNpIGZ1bmN0aW9uIGlzIHVudXNlZCAqLwogCXVuc2lnbmVkIGludCBoYXNfZHZiOjE7CiAJdW5zaWduZWQgaW50IGhhc19yZW1vdGU6MTsKKwl1bnNpZ25lZCBpbnQgaGFzX3JhZGlvOjE7CisJdW5zaWduZWQgaW50IGhhc19kaWdfaW46MTsgLyogSGFzIGRpZ2l0YWwgaW5wdXQgKGFsd2F5cyBsYXN0IGlucHV0KSAqLwogCXVuc2lnbmVkIGludCBub19ncGlvaXJxOjE7Ci0KLQkvKiBvdGhlciBzZXR0aW5ncyAqLwotCXVuc2lnbmVkIGludCBwbGw7Ci0jZGVmaW5lIFBMTF9OT05FIDAKLSNkZWZpbmUgUExMXzI4ICAgMQotI2RlZmluZSBQTExfMzUgICAyCi0KLQl1bnNpZ25lZCBpbnQgdHVuZXJfdHlwZTsKLQl1bnNpZ25lZCBpbnQgdHVuZXJfYWRkcjsKLQl1bnNpZ25lZCBpbnQgcmFkaW9fYWRkcjsKLQotCXVuc2lnbmVkIGludCBoYXNfcmFkaW87Ci0KLQl2b2lkICgqdm9sdW1lX2dwaW8pKHN0cnVjdCBidHR2ICpidHYsIF9fdTE2IHZvbHVtZSk7Ci0Jdm9pZCAoKmF1ZGlvX21vZGVfZ3Bpbykoc3RydWN0IGJ0dHYgKmJ0diwgc3RydWN0IHY0bDJfdHVuZXIgKnR1bmVyLCBpbnQgc2V0KTsKLQotCXZvaWQgKCptdXhzZWxfaG9vaykoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KTsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgdHZjYXJkIGJ0dHZfdHZjYXJkc1tdOwogCisvKgorICogVGhpcyBiaXQgb2YgY3BwIHZvb2RvbyBpcyB1c2VkIHRvIGNyZWF0ZSBhIG1hY3JvIHdpdGggYSB2YXJpYWJsZSBudW1iZXIgb2YKKyAqIGFyZ3VtZW50cyAoMSB0byAxNikuICBJdCB3aWxsIHBhY2sgZWFjaCBhcmd1bWVudCBpbnRvIGEgd29yZCB0d28gYml0cyBhdCBhCisgKiB0aW1lLiAgSXQgY2FuJ3QgYmUgYSBmdW5jdGlvbiBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlIGNvbXBpbGUgdGltZSBjb25zdGFudCB0bworICogaW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzLiAgU2luY2UgZWFjaCBhcmd1bWVudCBtdXN0IGZpdCBpbiB0d28gYml0cywgaXQncyBvaworICogdGhhdCB0aGV5IGFyZSBjaGFuZ2VkIHRvIG9jdGFsLiAgT25lIHNob3VsZCBub3QgdXNlIGhleCBudW1iZXIsIG1hY3Jvcywgb3IKKyAqIGFueXRoaW5nIGVsc2Ugd2l0aCB0aGlzIG1hY3JvLiAgSnVzdCB1c2UgcGxhaW4gaW50ZWdlcnMgZnJvbSAwIHRvIDMuCisgKi8KKyNkZWZpbmUgX01VWFNFTGYoYSkgICAgICAJMCMjYSA8PCAzMAorI2RlZmluZSBfTVVYU0VMZShhLCBiLi4uKQkwIyNhIDw8IDI4IHwgX01VWFNFTGYoYikKKyNkZWZpbmUgX01VWFNFTGQoYSwgYi4uLikJMCMjYSA8PCAyNiB8IF9NVVhTRUxlKGIpCisjZGVmaW5lIF9NVVhTRUxjKGEsIGIuLi4pCTAjI2EgPDwgMjQgfCBfTVVYU0VMZChiKQorI2RlZmluZSBfTVVYU0VMYihhLCBiLi4uKQkwIyNhIDw8IDIyIHwgX01VWFNFTGMoYikKKyNkZWZpbmUgX01VWFNFTGEoYSwgYi4uLikJMCMjYSA8PCAyMCB8IF9NVVhTRUxiKGIpCisjZGVmaW5lIF9NVVhTRUw5KGEsIGIuLi4pCTAjI2EgPDwgMTggfCBfTVVYU0VMYShiKQorI2RlZmluZSBfTVVYU0VMOChhLCBiLi4uKQkwIyNhIDw8IDE2IHwgX01VWFNFTDkoYikKKyNkZWZpbmUgX01VWFNFTDcoYSwgYi4uLikJMCMjYSA8PCAxNCB8IF9NVVhTRUw4KGIpCisjZGVmaW5lIF9NVVhTRUw2KGEsIGIuLi4pCTAjI2EgPDwgMTIgfCBfTVVYU0VMNyhiKQorI2RlZmluZSBfTVVYU0VMNShhLCBiLi4uKQkwIyNhIDw8IDEwIHwgX01VWFNFTDYoYikKKyNkZWZpbmUgX01VWFNFTDQoYSwgYi4uLikJMCMjYSA8PCA4ICB8IF9NVVhTRUw1KGIpCisjZGVmaW5lIF9NVVhTRUwzKGEsIGIuLi4pCTAjI2EgPDwgNiAgfCBfTVVYU0VMNChiKQorI2RlZmluZSBfTVVYU0VMMihhLCBiLi4uKQkwIyNhIDw8IDQgIHwgX01VWFNFTDMoYikKKyNkZWZpbmUgX01VWFNFTDEoYSwgYi4uLikJMCMjYSA8PCAyICB8IF9NVVhTRUwyKGIpCisjZGVmaW5lIE1VWFNFTChhLCBiLi4uKQkJKGEgfCBfTVVYU0VMMShiKSkKKwogLyogaWRlbnRpZmljYXRpb24gLyBpbml0aWFsaXphdGlvbiBvZiB0aGUgY2FyZCAqLwogZXh0ZXJuIHZvaWQgYnR0dl9pZGNhcmQoc3RydWN0IGJ0dHYgKmJ0dik7CiBleHRlcm4gdm9pZCBidHR2X2luaXRfY2FyZDEoc3RydWN0IGJ0dHYgKmJ0dik7CkBAIC0yNjQsNyArMjg2LDcgQEAKIAogLyogY2FyZC1zcGVjaWZpYyBmdW50aW9ucyAqLwogZXh0ZXJuIHZvaWQgdGVhNTc1N19zZXRfZnJlcShzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBzaG9ydCBmcmVxKTsKLWV4dGVybiB2b2lkIGJ0dHZfdGRhOTg4MF9zZXRub3JtKHN0cnVjdCBidHR2ICpidHYsIGludCBub3JtKTsKK2V4dGVybiB1MzIgYnR0dl90ZGE5ODgwX3NldG5vcm0oc3RydWN0IGJ0dHYgKmJ0diwgdTMyIGdwaW9iaXRzKTsKIAogLyogZXh0cmEgdHdlYWtzIGZvciBzb21lIGNoaXBzZXRzICovCiBleHRlcm4gdm9pZCBidHR2X2NoZWNrX2NoaXBzZXQodm9pZCk7CkBAIC0zMzYsNyArMzU4LDkgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGkyYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotZXh0ZXJuIHZvaWQgYnR0dl9jYWxsX2kyY19jbGllbnRzKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CisjZGVmaW5lIGJ0dHZfY2FsbF9hbGwoYnR2LCBvLCBmLCBhcmdzLi4uKSBcCisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmJ0di0+Yy52NGwyX2RldiwgMCwgbywgZiwgIyNhcmdzKQorCiBleHRlcm4gaW50IGJ0dHZfSTJDUmVhZChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBjaGFyIGFkZHIsIGNoYXIgKnByb2JlX2Zvcik7CiBleHRlcm4gaW50IGJ0dHZfSTJDV3JpdGUoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgY2hhciBhZGRyLCB1bnNpZ25lZCBjaGFyIGIxLAogCQkJIHVuc2lnbmVkIGNoYXIgYjIsIGludCBib3RoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0dnAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0dnAuaAppbmRleCAxOTlhNGQyLi45NjQ5ODQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHZwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2cC5oCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgpAQCAtMTM1LDcgKzEzNCw3IEBACiAKIAkvKiBidHR2IHNwZWNpZmljICovCiAJY29uc3Qgc3RydWN0IGJ0dHZfZm9ybWF0ICAgKmZtdDsKLQlpbnQgICAgICAgICAgICAgICAgICAgICAgICB0dm5vcm07CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgdHZub3JtOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgIGJ0Zm9ybWF0OwogCWludCAgICAgICAgICAgICAgICAgICAgICAgIGJ0c3dhcDsKIAlzdHJ1Y3QgYnR0dl9nZW9tZXRyeSAgICAgICBnZW87CkBAIC0xNTQsNyArMTUzLDcgQEAKIH07CiAKIHN0cnVjdCBidHR2X292ZXJsYXkgewotCWludCAgICAgICAgICAgICAgICAgICAgdHZub3JtOworCXVuc2lnbmVkIGludCAgICAgICAgICAgdHZub3JtOwogCXN0cnVjdCB2NGwyX3JlY3QgICAgICAgdzsKIAllbnVtIHY0bDJfZmllbGQgICAgICAgIGZpZWxkOwogCXN0cnVjdCB2NGwyX2NsaXAgICAgICAgKmNsaXBzOwpAQCAtMTc0LDcgKzE3Myw3IEBACiB9OwogCiAvKiBidHR2LXZiaS5jICovCi12b2lkIGJ0dHZfdmJpX2ZtdF9yZXNldChzdHJ1Y3QgYnR0dl92YmlfZm10ICpmLCBpbnQgbm9ybSk7Cit2b2lkIGJ0dHZfdmJpX2ZtdF9yZXNldChzdHJ1Y3QgYnR0dl92YmlfZm10ICpmLCB1bnNpZ25lZCBpbnQgbm9ybSk7CiAKIHN0cnVjdCBidHR2X2Nyb3AgewogCS8qIEEgY3JvcHBpbmcgcmVjdGFuZ2xlIGluIHN0cnVjdCBidHR2X3R2bm9ybS5jcm9wY2FwIHVuaXRzLiAqLwpAQCAtMzI5LDcgKzMyOCw4IEBACiAJdW5zaWduZWQgaW50IGNhcmRpZDsgICAvKiBwY2kgc3Vic3lzdGVtIGlkIChidDg3OCBiYXNlZCBvbmVzKSAqLwogCXVuc2lnbmVkIGludCB0dW5lcl90eXBlOyAgLyogdHVuZXIgY2hpcCB0eXBlICovCiAJdW5zaWduZWQgaW50IHRkYTk4ODdfY29uZjsKLQl1bnNpZ25lZCBpbnQgc3ZoczsKKwl1bnNpZ25lZCBpbnQgc3ZocywgZGlnOworCXVuc2lnbmVkIGludCBoYXNfc2FhNjU4ODoxOwogCXN0cnVjdCBidHR2X3BsbF9pbmZvIHBsbDsKIAlpbnQgdHJpdG9uMTsKIAlpbnQgZ3Bpb2lycTsKQEAgLTM1Myw4ICszNTMsOCBAQAogCWludCAgICAgICAgICAgICAgICAgICAgICAgIGkyY19zdGF0ZSwgaTJjX3JjOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgIGkyY19kb25lOwogCXdhaXRfcXVldWVfaGVhZF90ICAgICAgICAgIGkyY19xdWV1ZTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAJICAqaTJjX21zcDM0eHhfY2xpZW50OwotCXN0cnVjdCBpMmNfY2xpZW50IAkgICppMmNfdHZhdWRpb19jbGllbnQ7CisJc3RydWN0IHY0bDJfc3ViZGV2IAkgICpzZF9tc3AzNHh4OworCXN0cnVjdCB2NGwyX3N1YmRldiAJICAqc2RfdHZhdWRpbzsKIAogCS8qIHZpZGVvNGxpbnV4ICgxKSAqLwogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX2RldjsKQEAgLTM3OCw3ICszNzgsOCBAQAogCXVuc2lnbmVkIGludCBhdWRpbzsKIAl1bnNpZ25lZCBpbnQgbXV0ZTsKIAl1bnNpZ25lZCBsb25nIGZyZXE7Ci0JaW50IHR2bm9ybSxodWUsY29udHJhc3QsYnJpZ2h0LHNhdHVyYXRpb247CisJdW5zaWduZWQgaW50IHR2bm9ybTsKKwlpbnQgaHVlLCBjb250cmFzdCwgYnJpZ2h0LCBzYXR1cmF0aW9uOwogCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyIGZidWY7CiAJdW5zaWduZWQgaW50IGZpZWxkX2NvdW50OwogCkBAIC00NTgsMTAgKzQ1OSwyMSBAQAogCV9fczMyCQkJY3JvcF9zdGFydDsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJ0dHYgKnRvX2J0dHYoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3QgYnR0diwgYy52NGwyX2Rldik7Cit9CisKIC8qIG91ciBkZXZpY2VzICovCiAjZGVmaW5lIEJUVFZfTUFYIDMyCiBleHRlcm4gdW5zaWduZWQgaW50IGJ0dHZfbnVtOwotZXh0ZXJuIHN0cnVjdCBidHR2IGJ0dHZzW0JUVFZfTUFYXTsKK2V4dGVybiBzdHJ1Y3QgYnR0diAqYnR0dnNbQlRUVl9NQVhdOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBidHR2X211eHNlbChjb25zdCBzdHJ1Y3QgYnR0diAqYnR2LAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgaW5wdXQpCit7CisJcmV0dXJuIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm11eHNlbCA+PiAoaW5wdXQgKiAyKSkgJiAzOworfQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKaW5kZXggNDZmZDU3My4uN2FiZTk0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCkBAIC0xMSw2ICsxMSwxMiBAQAogICoKICAqIFdyaXR0ZW4gYnkgSm9uYXRoYW4gQ29yYmV0LCBjb3JiZXRAbHduLm5ldC4KICAqCisgKiB2NGwyX2RldmljZS92NGwyX3N1YmRldiBjb252ZXJzaW9uIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgorICoKKyAqIE5vdGU6IHRoaXMgY29udmVyc2lvbiBpcyB1bnRlc3RlZCEgUGxlYXNlIGNvbnRhY3QgdGhlIGxpbnV4LW1lZGlhCisgKiBtYWlsaW5nbGlzdCBpZiB5b3UgY2FuIHRlc3QgdGhpcywgdG9nZXRoZXIgd2l0aCB0aGUgdGVzdCByZXN1bHRzLgorICoKICAqIFRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAogICogUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KICAqLwpAQCAtMjUsNyArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTMzLDcgKzM5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCkBAIC0xMzYsNiArMTQxLDcgQEAKICAqLwogc3RydWN0IGNhZmVfY2FtZXJhCiB7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OwogCWVudW0gY2FmZV9zdGF0ZSBzdGF0ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOyAgIAkJLyogQnVmZmVyIHN0YXR1cywgbWFpbmx5IChkZXZfbG9jaykgKi8KIAlpbnQgdXNlcnM7CQkJLyogSG93IG1hbnkgb3BlbiBGRHMgKi8KQEAgLTE0NSw5ICsxNTEsMTAgQEAKIAkgKiBTdWJzeXN0ZW0gc3RydWN0dXJlcy4KIAkgKi8KIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHY0bGRldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CiAJc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwdGVyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpzZW5zb3I7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZW5zb3I7CisJdW5zaWduZWQgc2hvcnQgc2Vuc29yX2FkZHI7CiAKIAl1bnNpZ25lZCBjaGFyIF9faW9tZW0gKnJlZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCBkZXZfbGlzdDsJLyogbGluayB0byBvdGhlciBkZXZpY2VzICovCkBAIC0xODAsMTAgKzE4Nyw2IEBACiAJLyogTWlzYyAqLwogCXdhaXRfcXVldWVfaGVhZF90IHNtYnVzX3dhaXQ7CS8qIFdhaXRpbmcgb24gaTJjIGV2ZW50cyAqLwogCXdhaXRfcXVldWVfaGVhZF90IGlvd2FpdDsJLyogV2FpdGluZyBvbiBmcmFtZSBkYXRhICovCi0jaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotCXN0cnVjdCBkZW50cnkgKmRmc19yZWdzOwotCXN0cnVjdCBkZW50cnkgKmRmc19jYW1fcmVnczsKLSNlbmRpZgogfTsKIAogLyoKQEAgLTE5NSw2ICsxOTgsMTMgQEAKICNkZWZpbmUgQ0ZfRE1BX0FDVElWRQkgMwkvKiBBIGZyYW1lIGlzIGluY29taW5nICovCiAjZGVmaW5lIENGX0NPTkZJR19ORUVERUQgNAkvKiBNdXN0IGNvbmZpZ3VyZSBoYXJkd2FyZSAqLwogCisjZGVmaW5lIHNlbnNvcl9jYWxsKGNhbSwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfc3ViZGV2X2NhbGwoY2FtLT5zZW5zb3IsIG8sIGYsICMjYXJncykKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2FmZV9jYW1lcmEgKnRvX2NhbShzdHJ1Y3QgdjRsMl9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGNhZmVfY2FtZXJhLCB2NGwyX2Rldik7Cit9CiAKIAogLyoKQEAgLTIzOCw1OSArMjQ4LDcgQEAKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoKLSAqIFdlIGtlZXAgYSBzaW1wbGUgbGlzdCBvZiBrbm93biBkZXZpY2VzIHRvIHNlYXJjaCBhdCBvcGVuIHRpbWUuCi0gKi8KLXN0YXRpYyBMSVNUX0hFQUQoY2FmZV9kZXZfbGlzdCk7Ci1zdGF0aWMgREVGSU5FX01VVEVYKGNhZmVfZGV2X2xpc3RfbG9jayk7CiAKLXN0YXRpYyB2b2lkIGNhZmVfYWRkX2RldihzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKLXsKLQltdXRleF9sb2NrKCZjYWZlX2Rldl9saXN0X2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJmNhbS0+ZGV2X2xpc3QsICZjYWZlX2Rldl9saXN0KTsKLQltdXRleF91bmxvY2soJmNhZmVfZGV2X2xpc3RfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNhZmVfcmVtb3ZlX2RldihzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKLXsKLQltdXRleF9sb2NrKCZjYWZlX2Rldl9saXN0X2xvY2spOwotCWxpc3RfZGVsKCZjYW0tPmRldl9saXN0KTsKLQltdXRleF91bmxvY2soJmNhZmVfZGV2X2xpc3RfbG9jayk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhZmVfZmluZF9kZXYoaW50IG1pbm9yKQotewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtOwotCi0JbXV0ZXhfbG9jaygmY2FmZV9kZXZfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhbSwgJmNhZmVfZGV2X2xpc3QsIGRldl9saXN0KSB7Ci0JCWlmIChjYW0tPnY0bGRldi5taW5vciA9PSBtaW5vcikKLQkJCWdvdG8gZG9uZTsKLQl9Ci0JY2FtID0gTlVMTDsKLSAgZG9uZToKLQltdXRleF91bmxvY2soJmNhZmVfZGV2X2xpc3RfbG9jayk7Ci0JcmV0dXJuIGNhbTsKLX0KLQotCi1zdGF0aWMgc3RydWN0IGNhZmVfY2FtZXJhICpjYWZlX2ZpbmRfYnlfcGRldihzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbTsKLQotCW11dGV4X2xvY2soJmNhZmVfZGV2X2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjYW0sICZjYWZlX2Rldl9saXN0LCBkZXZfbGlzdCkgewotCQlpZiAoY2FtLT5wZGV2ID09IHBkZXYpCi0JCQlnb3RvIGRvbmU7Ci0JfQotCWNhbSA9IE5VTEw7Ci0gIGRvbmU6Ci0JbXV0ZXhfdW5sb2NrKCZjYWZlX2Rldl9saXN0X2xvY2spOwotCXJldHVybiBjYW07Ci19Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKgogICogRGV2aWNlIHJlZ2lzdGVyIEkvTwogICovCkBAIC00ODEsMTggKzQzOSwxMSBAQAogCQl1bnNpZ25lZCBzaG9ydCBmbGFncywgY2hhciBydywgdTggY29tbWFuZCwKIAkJaW50IHNpemUsIHVuaW9uIGkyY19zbWJ1c19kYXRhICpkYXRhKQogewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHRvX2NhbSh2NGwyX2Rldik7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKIAkvKgotCSAqIFJlZnVzZSB0byB0YWxrIHRvIGFueXRoaW5nIGJ1dCBPViBjYW0gY2hpcHMuICBXZSBzaG91bGQKLQkgKiBuZXZlciBldmVuIHNlZSBhbiBhdHRlbXB0IHRvIGRvIHNvLCBidXQgb25lIG5ldmVyIGtub3dzLgotCSAqLwotCWlmIChjYW0tPnNlbnNvciAmJiBhZGRyICE9IGNhbS0+c2Vuc29yLT5hZGRyKSB7Ci0JCWNhbV9lcnIoY2FtLCAiZnVua3kgc21idXMgYWRkciAlZFxuIiwgYWRkcik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkvKgogCSAqIFRoaXMgaW50ZXJmYWNlIHdvdWxkIGFwcGVhciB0byBvbmx5IGRvIGJ5dGUgZGF0YSBvcHMuICBPSwogCSAqIGl0IGNhbiBkbyB3b3JkIHRvbywgYnV0IHRoZSBjYW0gY2hpcCBoYXMgbm8gdXNlIGZvciB0aGF0LgogCSAqLwpAQCAtNTMwLDM4ICs0ODEsOSBAQAogfTsKIAogLyogU29tZWJvZHkgaXMgb24gdGhlIGJ1cyAqLwotc3RhdGljIGludCBjYWZlX2NhbV9pbml0KHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKTsKIHN0YXRpYyB2b2lkIGNhZmVfY3Rscl9zdG9wX2RtYShzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSk7CiBzdGF0aWMgdm9pZCBjYWZlX2N0bHJfcG93ZXJfZG93bihzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSk7CiAKLXN0YXRpYyBpbnQgY2FmZV9zbWJ1c19hdHRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQotCS8qCi0JICogRG9uJ3QgdGFsayB0byBjaGlwcyB3ZSBkb24ndCByZWNvZ25pemUuCi0JICovCi0JaWYgKGNsaWVudC0+ZHJpdmVyLT5pZCA9PSBJMkNfRFJJVkVSSURfT1Y3NjcwKSB7Ci0JCWNhbS0+c2Vuc29yID0gY2xpZW50OwotCQlyZXR1cm4gY2FmZV9jYW1faW5pdChjYW0pOwotCX0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCBjYWZlX3NtYnVzX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCi0JaWYgKGNhbS0+c2Vuc29yID09IGNsaWVudCkgewotCQljYWZlX2N0bHJfc3RvcF9kbWEoY2FtKTsKLQkJY2FmZV9jdGxyX3Bvd2VyX2Rvd24oY2FtKTsKLQkJY2FtX2VycihjYW0sICJsb3N0IHRoZSBzZW5zb3IhXG4iKTsKLQkJY2FtLT5zZW5zb3IgPSBOVUxMOyAgLyogQnVtbWVyLCBubyBjYW1lcmEgKi8KLQkJY2FtLT5zdGF0ZSA9IFNfTk9UUkVBRFk7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGNhZmVfc21idXNfc2V0dXAoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCiB7CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gJmNhbS0+aTJjX2FkYXB0ZXI7CkBAIC01NzAsMTIgKzQ5MiwxMCBAQAogCWNhZmVfc21idXNfZW5hYmxlX2lycShjYW0pOwogCWFkYXAtPmlkID0gSTJDX0hXX1NNQlVTX0NBRkU7CiAJYWRhcC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQlhZGFwLT5jbGllbnRfcmVnaXN0ZXIgPSBjYWZlX3NtYnVzX2F0dGFjaDsKLQlhZGFwLT5jbGllbnRfdW5yZWdpc3RlciA9IGNhZmVfc21idXNfZGV0YWNoOwogCWFkYXAtPmFsZ28gPSAmY2FmZV9zbWJ1c19hbGdvOwogCXN0cmNweShhZGFwLT5uYW1lLCAiY2FmZV9jY2ljIik7CiAJYWRhcC0+ZGV2LnBhcmVudCA9ICZjYW0tPnBkZXYtPmRldjsKLQlpMmNfc2V0X2FkYXBkYXRhKGFkYXAsIGNhbSk7CisJaTJjX3NldF9hZGFwZGF0YShhZGFwLCAmY2FtLT52NGwyX2Rldik7CiAJcmV0ID0gaTJjX2FkZF9hZGFwdGVyKGFkYXApOwogCWlmIChyZXQpCiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIGNhZmUgaTJjIGFkYXB0ZXJcbiIpOwpAQCAtODA5LDkgKzcyOSw5IEBACiAJICogQ29udHJvbCAxIGlzIHBvd2VyIGRvd24sIHNldCB0byAwIHRvIG9wZXJhdGUuCiAJICovCiAJY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfR1BSLCBHUFJfQzFFTnxHUFJfQzBFTik7IC8qIHB3ciB1cCwgcmVzZXQgKi8KLS8vCW1kZWxheSgxKTsgLyogTWFydmVsbCBzYXlzIDFtcyB3aWxsIGRvIGl0ICovCisvKgltZGVsYXkoMSk7ICovIC8qIE1hcnZlbGwgc2F5cyAxbXMgd2lsbCBkbyBpdCAqLwogCWNhZmVfcmVnX3dyaXRlKGNhbSwgUkVHX0dQUiwgR1BSX0MxRU58R1BSX0MwRU58R1BSX0MwKTsKLS8vCW1kZWxheSgxKTsgLyogRW5vdWdoPyAqLworLyoJbWRlbGF5KDEpOyAqLyAvKiBFbm91Z2g/ICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtLT5kZXZfbG9jaywgZmxhZ3MpOwogCW1zbGVlcCg1KTsgLyogSnVzdCB0byBiZSBzdXJlICovCiB9CkBAIC04MzMsMjMgKzc1Myw5IEBACiAgKiBDb21tdW5pY2F0aW9ucyB3aXRoIHRoZSBzZW5zb3IuCiAgKi8KIAotc3RhdGljIGludCBfX2NhZmVfY2FtX2NtZChzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSwgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpzYyA9IGNhbS0+c2Vuc29yOwotCWludCByZXQ7Ci0KLQlpZiAoc2MgPT0gTlVMTCB8fCBzYy0+ZHJpdmVyID09IE5VTEwgfHwgc2MtPmRyaXZlci0+Y29tbWFuZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXQgPSBzYy0+ZHJpdmVyLT5jb21tYW5kKHNjLCBjbWQsIGFyZyk7Ci0JaWYgKHJldCA9PSAtRVBFUk0pIC8qIFVuc3VwcG9ydGVkIGNvbW1hbmQgKi8KLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCBfX2NhZmVfY2FtX3Jlc2V0KHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQogewotCWludCB6ZXJvID0gMDsKLQlyZXR1cm4gX19jYWZlX2NhbV9jbWQoY2FtLCBWSURJT0NfSU5UX1JFU0VULCAmemVybyk7CisJcmV0dXJuIHNlbnNvcl9jYWxsKGNhbSwgY29yZSwgcmVzZXQsIDApOwogfQogCiAvKgpAQCAtODY5LDE0ICs3NzUsMTMgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAljaGlwLm1hdGNoLnR5cGUgPSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFI7Ci0JY2hpcC5tYXRjaC5hZGRyID0gY2FtLT5zZW5zb3ItPmFkZHI7Ci0JcmV0ID0gX19jYWZlX2NhbV9jbWQoY2FtLCBWSURJT0NfREJHX0dfQ0hJUF9JREVOVCwgJmNoaXApOworCWNoaXAubWF0Y2guYWRkciA9IGNhbS0+c2Vuc29yX2FkZHI7CisJcmV0ID0gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBnX2NoaXBfaWRlbnQsICZjaGlwKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAljYW0tPnNlbnNvcl90eXBlID0gY2hpcC5pZGVudDsKLS8vCWlmIChjYW0tPnNlbnNvci0+YWRkciAhPSBPVjd4eDBfU0lEKSB7CiAJaWYgKGNhbS0+c2Vuc29yX3R5cGUgIT0gVjRMMl9JREVOVF9PVjc2NzApIHsKLQkJY2FtX2VycihjYW0sICJVbnN1cHBvcnRlZCBzZW5zb3IgdHlwZSAlZCIsIGNhbS0+c2Vuc29yLT5hZGRyKTsKKwkJY2FtX2VycihjYW0sICJVbnN1cHBvcnRlZCBzZW5zb3IgdHlwZSAweCV4IiwgY2FtLT5zZW5zb3JfdHlwZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTkwMCwyMSArODA1LDIxIEBACiAJbWVtc2V0KCZjdHJsLCAwLCBzaXplb2YoY3RybCkpOwogCWN0cmwuaWQgPSBWNEwyX0NJRF9WRkxJUDsKIAljdHJsLnZhbHVlID0gZmxpcDsKLQlyZXR1cm4gX19jYWZlX2NhbV9jbWQoY2FtLCBWSURJT0NfU19DVFJMLCAmY3RybCk7CisJcmV0dXJuIHNlbnNvcl9jYWxsKGNhbSwgY29yZSwgc19jdHJsLCAmY3RybCk7CiB9CiAKIAogc3RhdGljIGludCBjYWZlX2NhbV9jb25maWd1cmUoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCiB7CiAJc3RydWN0IHY0bDJfZm9ybWF0IGZtdDsKLQlpbnQgcmV0LCB6ZXJvID0gMDsKKwlpbnQgcmV0OwogCiAJaWYgKGNhbS0+c3RhdGUgIT0gU19JRExFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlmbXQuZm10LnBpeCA9IGNhbS0+cGl4X2Zvcm1hdDsKLQlyZXQgPSBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19JTlRfSU5JVCwgJnplcm8pOworCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgY29yZSwgaW5pdCwgMCk7CiAJaWYgKHJldCA9PSAwKQotCQlyZXQgPSBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19TX0ZNVCwgJmZtdCk7CisJCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgdmlkZW8sIHNfZm10LCAmZm10KTsKIAkvKgogCSAqIE9WNzY3MCBkb2VzIHdlaXJkIHRoaW5ncyBpZiBmbGlwIGlzIHNldCAqYmVmb3JlKiBmb3JtYXQuLi4KIAkgKi8KQEAgLTEyNDYsOCArMTE1MSw2IEBACiAJICogTWFrZSBzdXJlIGl0J3Mgc29tZXRoaW5nIHdlIGNhbiBkby4gIFVzZXIgcG9pbnRlcnMgY291bGQgYmUKIAkgKiBpbXBsZW1lbnRlZCB3aXRob3V0IGdyZWF0IHBhaW4sIGJ1dCB0aGF0J3Mgbm90IGJlZW4gZG9uZSB5ZXQuCiAJICovCi0JaWYgKHJlcS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwogCWlmIChyZXEtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQogCQlyZXR1cm4gLUVJTlZBTDsKIAkvKgpAQCAtMTMxMSw5ICsxMjE0LDcgQEAKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCWdvdG8gb3V0OwotCWlmIChidWYtPmluZGV4IDwgMCB8fCBidWYtPmluZGV4ID49IGNhbS0+bl9zYnVmcykKKwlpZiAoYnVmLT5pbmRleCA+PSBjYW0tPm5fc2J1ZnMpCiAJCWdvdG8gb3V0OwogCSpidWYgPSBjYW0tPnNiX2J1ZnNbYnVmLT5pbmRleF0udjRsYnVmOwogCXJldCA9IDA7CkBAIC0xMzMxLDkgKzEyMzIsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlnb3RvIG91dDsKLQlpZiAoYnVmLT5pbmRleCA8IDAgfHwgYnVmLT5pbmRleCA+PSBjYW0tPm5fc2J1ZnMpCisJaWYgKGJ1Zi0+aW5kZXggPj0gY2FtLT5uX3NidWZzKQogCQlnb3RvIG91dDsKIAlzYnVmID0gY2FtLT5zYl9idWZzICsgYnVmLT5pbmRleDsKIAlpZiAoc2J1Zi0+djRsYnVmLmZsYWdzICYgVjRMMl9CVUZfRkxBR19RVUVVRUQpIHsKQEAgLTEzNjQsOCArMTI2Myw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCWdvdG8gb3V0X3VubG9jazsKIAlpZiAoY2FtLT5zdGF0ZSAhPSBTX1NUUkVBTUlORykKIAkJZ290byBvdXRfdW5sb2NrOwogCWlmIChsaXN0X2VtcHR5KCZjYW0tPnNiX2Z1bGwpICYmIGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CkBAIC0xNDc0LDExICsxMzcxLDggQEAKIAogc3RhdGljIGludCBjYWZlX3Y0bF9vcGVuKHN0cnVjdCBmaWxlICpmaWxwKQogewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtOworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKIAotCWNhbSA9IGNhZmVfZmluZF9kZXYodmlkZW9fZGV2ZGF0YShmaWxwKS0+bWlub3IpOwotCWlmIChjYW0gPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7CiAJZmlscC0+cHJpdmF0ZV9kYXRhID0gY2FtOwogCiAJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKQEAgLTE1MzIsMTEgKzE0MjYsMTEgQEAKIHN0YXRpYyBpbnQgY2FmZV92aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gcHJpdjsKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlyZXQgPSBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19RVUVSWUNUUkwsIHFjKTsKKwlyZXQgPSBzZW5zb3JfY2FsbChjYW0sIGNvcmUsIHF1ZXJ5Y3RybCwgcWMpOwogCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTU0NSwxMSArMTQzOSwxMSBAQAogc3RhdGljIGludCBjYWZlX3ZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBwcml2OwogCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXJldCA9IF9fY2FmZV9jYW1fY21kKGNhbSwgVklESU9DX0dfQ1RSTCwgY3RybCk7CisJcmV0ID0gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBnX2N0cmwsIGN0cmwpOwogCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTU1OCwxMSArMTQ1MiwxMSBAQAogc3RhdGljIGludCBjYWZlX3ZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBwcml2OwogCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXJldCA9IF9fY2FmZV9jYW1fY21kKGNhbSwgVklESU9DX1NfQ1RSTCwgY3RybCk7CisJcmV0ID0gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBzX2N0cmwsIGN0cmwpOwogCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTYwMSwxMCArMTQ5NSw4IEBACiAJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBwcml2OwogCWludCByZXQ7CiAKLQlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlyZXQgPSBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19FTlVNX0ZNVCwgZm10KTsKKwlyZXQgPSBzZW5zb3JfY2FsbChjYW0sIHZpZGVvLCBlbnVtX2ZtdCwgZm10KTsKIAltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE2MTcsNyArMTUwOSw3IEBACiAJaW50IHJldDsKIAogCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JcmV0ID0gX19jYWZlX2NhbV9jbWQoY2FtLCBWSURJT0NfVFJZX0ZNVCwgZm10KTsKKwlyZXQgPSBzZW5zb3JfY2FsbChjYW0sIHZpZGVvLCB0cnlfZm10LCBmbXQpOwogCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTcyNiw3ICsxNjE4LDcgQEAKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlyZXQgPSBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19HX1BBUk0sIHBhcm1zKTsKKwlyZXQgPSBzZW5zb3JfY2FsbChjYW0sIHZpZGVvLCBnX3Bhcm0sIHBhcm1zKTsKIAltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CiAJcGFybXMtPnBhcm0uY2FwdHVyZS5yZWFkYnVmZmVycyA9IG5fZG1hX2J1ZnM7CiAJcmV0dXJuIHJldDsKQEAgLTE3MzksMjAgKzE2MzEsNTIgQEAKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlyZXQgPSBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19TX1BBUk0sIHBhcm1zKTsKKwlyZXQgPSBzZW5zb3JfY2FsbChjYW0sIHZpZGVvLCBzX3Bhcm0sIHBhcm1zKTsKIAltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CiAJcGFybXMtPnBhcm0uY2FwdHVyZS5yZWFkYnVmZmVycyA9IG5fZG1hX2J1ZnM7CiAJcmV0dXJuIHJldDsKIH0KIAotCi1zdGF0aWMgdm9pZCBjYWZlX3Y0bF9kZXZfcmVsZWFzZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZCkKK3N0YXRpYyBpbnQgY2FmZV92aWRpb2NfZ19jaGlwX2lkZW50KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKIHsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGNvbnRhaW5lcl9vZih2ZCwgc3RydWN0IGNhZmVfY2FtZXJhLCB2NGxkZXYpOworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gcHJpdjsKIAotCWtmcmVlKGNhbSk7CisJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX05PTkU7CisJY2hpcC0+cmV2aXNpb24gPSAwOworCWlmICh2NGwyX2NoaXBfbWF0Y2hfaG9zdCgmY2hpcC0+bWF0Y2gpKSB7CisJCWNoaXAtPmlkZW50ID0gVjRMMl9JREVOVF9DQUZFOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHNlbnNvcl9jYWxsKGNhbSwgY29yZSwgZ19jaGlwX2lkZW50LCBjaGlwKTsKIH0KIAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK3N0YXRpYyBpbnQgY2FmZV92aWRpb2NfZ19yZWdpc3RlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBwcml2OworCisJaWYgKHY0bDJfY2hpcF9tYXRjaF9ob3N0KCZyZWctPm1hdGNoKSkgeworCQlyZWctPnZhbCA9IGNhZmVfcmVnX3JlYWQoY2FtLCByZWctPnJlZyk7CisJCXJlZy0+c2l6ZSA9IDQ7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBnX3JlZ2lzdGVyLCByZWcpOworfQorCitzdGF0aWMgaW50IGNhZmVfdmlkaW9jX3NfcmVnaXN0ZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gcHJpdjsKKworCWlmICh2NGwyX2NoaXBfbWF0Y2hfaG9zdCgmcmVnLT5tYXRjaCkpIHsKKwkJY2FmZV9yZWdfd3JpdGUoY2FtLCByZWctPnJlZywgcmVnLT52YWwpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHNlbnNvcl9jYWxsKGNhbSwgY29yZSwgc19yZWdpc3RlciwgcmVnKTsKK30KKyNlbmRpZgogCiAvKgogICogVGhpcyB0ZW1wbGF0ZSBkZXZpY2UgaG9sZHMgYWxsIG9mIHRob3NlIHY0bDIgbWV0aG9kczsgd2UKQEAgLTE3OTAsNiArMTcxNCwxMSBAQAogCS52aWRpb2Nfc19jdHJsCQk9IGNhZmVfdmlkaW9jX3NfY3RybCwKIAkudmlkaW9jX2dfcGFybQkJPSBjYWZlX3ZpZGlvY19nX3Bhcm0sCiAJLnZpZGlvY19zX3Bhcm0JCT0gY2FmZV92aWRpb2Nfc19wYXJtLAorCS52aWRpb2NfZ19jaGlwX2lkZW50ICAgID0gY2FmZV92aWRpb2NfZ19jaGlwX2lkZW50LAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkudmlkaW9jX2dfcmVnaXN0ZXIgCT0gY2FmZV92aWRpb2NfZ19yZWdpc3RlciwKKwkudmlkaW9jX3NfcmVnaXN0ZXIgCT0gY2FmZV92aWRpb2Nfc19yZWdpc3RlciwKKyNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgY2FmZV92NGxfdGVtcGxhdGUgPSB7CkBAIC0xODAwLDE1ICsxNzI5LDEwIEBACiAKIAkuZm9wcyA9ICZjYWZlX3Y0bF9mb3BzLAogCS5pb2N0bF9vcHMgPSAmY2FmZV92NGxfaW9jdGxfb3BzLAotCS5yZWxlYXNlID0gY2FmZV92NGxfZGV2X3JlbGVhc2UsCisJLnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKIH07CiAKIAotCi0KLQotCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qCiAgKiBJbnRlcnJ1cHQgaGFuZGxlciBzdHVmZgpAQCAtMTk2MiwxMjcgKzE4ODYsNiBAQAogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotLyoKLSAqIERlYnVnZnMgc3R1ZmYuCi0gKi8KLQotc3RhdGljIGNoYXIgY2FmZV9kZWJ1Z19idWZbMTAyNF07Ci1zdGF0aWMgc3RydWN0IGRlbnRyeSAqY2FmZV9kZnNfcm9vdDsKLQotc3RhdGljIHZvaWQgY2FmZV9kZnNfc2V0dXAodm9pZCkKLXsKLQljYWZlX2Rmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKCJjYWZlX2NjaWMiLCBOVUxMKTsKLQlpZiAoSVNfRVJSKGNhZmVfZGZzX3Jvb3QpKSB7Ci0JCWNhZmVfZGZzX3Jvb3QgPSBOVUxMOyAgLyogTmV2ZXIgbWluZCAqLwotCQlwcmludGsoS0VSTl9OT1RJQ0UgImNhZmVfY2NpYyB1bmFibGUgdG8gc2V0IHVwIGRlYnVnZnNcbiIpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgY2FmZV9kZnNfc2h1dGRvd24odm9pZCkKLXsKLQlpZiAoY2FmZV9kZnNfcm9vdCkKLQkJZGVidWdmc19yZW1vdmUoY2FmZV9kZnNfcm9vdCk7Ci19Ci0KLXN0YXRpYyBpbnQgY2FmZV9kZnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCBjYWZlX2Rmc19yZWFkX3JlZ3Moc3RydWN0IGZpbGUgKmZpbGUsCi0JCWNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgKnMgPSBjYWZlX2RlYnVnX2J1ZjsKLQlpbnQgb2Zmc2V0OwotCi0JZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCAweDQ0OyBvZmZzZXQgKz0gNCkKLQkJcyArPSBzcHJpbnRmKHMsICIlMDJ4OiAlMDh4XG4iLCBvZmZzZXQsCi0JCQkJY2FmZV9yZWdfcmVhZChjYW0sIG9mZnNldCkpOwotCWZvciAob2Zmc2V0ID0gMHg4ODsgb2Zmc2V0IDw9IDB4OTA7IG9mZnNldCArPSA0KQotCQlzICs9IHNwcmludGYocywgIiUwMng6ICUwOHhcbiIsIG9mZnNldCwKLQkJCQljYWZlX3JlZ19yZWFkKGNhbSwgb2Zmc2V0KSk7Ci0JZm9yIChvZmZzZXQgPSAweGI0OyBvZmZzZXQgPD0gMHhiYzsgb2Zmc2V0ICs9IDQpCi0JCXMgKz0gc3ByaW50ZihzLCAiJTAyeDogJTA4eFxuIiwgb2Zmc2V0LAotCQkJCWNhZmVfcmVnX3JlYWQoY2FtLCBvZmZzZXQpKTsKLQlmb3IgKG9mZnNldCA9IDB4MzAwMDsgb2Zmc2V0IDw9IDB4MzAwYzsgb2Zmc2V0ICs9IDQpCi0JCXMgKz0gc3ByaW50ZihzLCAiJTA0eDogJTA4eFxuIiwgb2Zmc2V0LAotCQkJCWNhZmVfcmVnX3JlYWQoY2FtLCBvZmZzZXQpKTsKLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcHBvcywgY2FmZV9kZWJ1Z19idWYsCi0JCQlzIC0gY2FmZV9kZWJ1Z19idWYpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjYWZlX2Rmc19yZWdfb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5yZWFkID0gY2FmZV9kZnNfcmVhZF9yZWdzLAotCS5vcGVuID0gY2FmZV9kZnNfb3BlbgotfTsKLQotc3RhdGljIHNzaXplX3QgY2FmZV9kZnNfcmVhZF9jYW0oc3RydWN0IGZpbGUgKmZpbGUsCi0JCWNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgKnMgPSBjYWZlX2RlYnVnX2J1ZjsKLQlpbnQgb2Zmc2V0OwotCi0JaWYgKCEgY2FtLT5zZW5zb3IpCi0JCXJldHVybiAtRUlOVkFMOwotCWZvciAob2Zmc2V0ID0gMHgwOyBvZmZzZXQgPCAweDhhOyBvZmZzZXQrKykKLQl7Ci0JCXU4IHY7Ci0KLQkJY2FmZV9zbWJ1c19yZWFkX2RhdGEoY2FtLCBjYW0tPnNlbnNvci0+YWRkciwgb2Zmc2V0LCAmdik7Ci0JCXMgKz0gc3ByaW50ZihzLCAiJTAyeDogJTAyeFxuIiwgb2Zmc2V0LCB2KTsKLQl9Ci0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgY291bnQsIHBwb3MsIGNhZmVfZGVidWdfYnVmLAotCQkJcyAtIGNhZmVfZGVidWdfYnVmKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2FmZV9kZnNfY2FtX29wcyA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkucmVhZCA9IGNhZmVfZGZzX3JlYWRfY2FtLAotCS5vcGVuID0gY2FmZV9kZnNfb3BlbgotfTsKLQotCi0KLXN0YXRpYyB2b2lkIGNhZmVfZGZzX2NhbV9zZXR1cChzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKLXsKLQljaGFyIGZuYW1lWzQwXTsKLQotCWlmICghY2FmZV9kZnNfcm9vdCkKLQkJcmV0dXJuOwotCXNwcmludGYoZm5hbWUsICJyZWdzLSVkIiwgY2FtLT52NGxkZXYubnVtKTsKLQljYW0tPmRmc19yZWdzID0gZGVidWdmc19jcmVhdGVfZmlsZShmbmFtZSwgMDQ0NCwgY2FmZV9kZnNfcm9vdCwKLQkJCWNhbSwgJmNhZmVfZGZzX3JlZ19vcHMpOwotCXNwcmludGYoZm5hbWUsICJjYW0tJWQiLCBjYW0tPnY0bGRldi5udW0pOwotCWNhbS0+ZGZzX2NhbV9yZWdzID0gZGVidWdmc19jcmVhdGVfZmlsZShmbmFtZSwgMDQ0NCwgY2FmZV9kZnNfcm9vdCwKLQkJCWNhbSwgJmNhZmVfZGZzX2NhbV9vcHMpOwotfQotCi0KLXN0YXRpYyB2b2lkIGNhZmVfZGZzX2NhbV9zaHV0ZG93bihzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKLXsKLQlpZiAoISBJU19FUlIoY2FtLT5kZnNfcmVncykpCi0JCWRlYnVnZnNfcmVtb3ZlKGNhbS0+ZGZzX3JlZ3MpOwotCWlmICghIElTX0VSUihjYW0tPmRmc19jYW1fcmVncykpCi0JCWRlYnVnZnNfcmVtb3ZlKGNhbS0+ZGZzX2NhbV9yZWdzKTsKLX0KLQotI2Vsc2UKLQotI2RlZmluZSBjYWZlX2Rmc19zZXR1cCgpCi0jZGVmaW5lIGNhZmVfZGZzX3NodXRkb3duKCkKLSNkZWZpbmUgY2FmZV9kZnNfY2FtX3NldHVwKGNhbSkKLSNkZWZpbmUgY2FmZV9kZnNfY2FtX3NodXRkb3duKGNhbSkKLSNlbmRpZiAgICAvKiBDT05GSUdfVklERU9fQURWX0RFQlVHICovCi0KLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgogICogUENJIGludGVyZmFjZSBzdHVmZi4KICAqLwpAQCAtMjEwMCw2ICsxOTAzLDEwIEBACiAJY2FtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNhZmVfY2FtZXJhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNhbSA9PSBOVUxMKQogCQlnb3RvIG91dDsKKwlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2LCAmY2FtLT52NGwyX2Rldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZTsKKwogCW11dGV4X2luaXQoJmNhbS0+c19tdXRleCk7CiAJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmY2FtLT5kZXZfbG9jayk7CkBAIC0yMTE4LDE0ICsxOTI1LDE0IEBACiAJICovCiAJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHJldCkKLQkJZ290byBvdXRfZnJlZTsKKwkJZ290byBvdXRfdW5yZWc7CiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKIAlyZXQgPSAtRUlPOwogCWNhbS0+cmVncyA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKIAlpZiAoISBjYW0tPnJlZ3MpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gaW9yZW1hcCBjYWZlLWNjaWMgcmVnc1xuIik7Ci0JCWdvdG8gb3V0X2ZyZWU7CisJCWdvdG8gb3V0X3VucmVnOwogCX0KIAlyZXQgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIGNhZmVfaXJxLCBJUlFGX1NIQVJFRCwgImNhZmUtY2NpYyIsIGNhbSk7CiAJaWYgKHJldCkKQEAgLTIxNDUsMTcgKzE5NTIsMzEgQEAKIAlyZXQgPSBjYWZlX3NtYnVzX3NldHVwKGNhbSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfZnJlZWlycTsKKworCWNhbS0+c2Vuc29yX2FkZHIgPSAweDQyOworCWNhbS0+c2Vuc29yID0gdjRsMl9pMmNfbmV3X3N1YmRldigmY2FtLT5pMmNfYWRhcHRlciwKKwkJCSJvdjc2NzAiLCAib3Y3NjcwIiwgY2FtLT5zZW5zb3JfYWRkcik7CisJaWYgKGNhbS0+c2Vuc29yID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfc21idXM7CisJfQorCXJldCA9IGNhZmVfY2FtX2luaXQoY2FtKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9zbWJ1czsKKwogCS8qCiAJICogR2V0IHRoZSB2NGwyIHNldHVwIGRvbmUuCiAJICovCiAJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQljYW0tPnY0bGRldiA9IGNhZmVfdjRsX3RlbXBsYXRlOwotCWNhbS0+djRsZGV2LmRlYnVnID0gMDsKLS8vCWNhbS0+djRsZGV2LmRlYnVnID0gVjRMMl9ERUJVR19JT0NUTF9BUkc7Ci0JY2FtLT52NGxkZXYucGFyZW50ID0gJnBkZXYtPmRldjsKLQlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmNhbS0+djRsZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CisJY2FtLT52ZGV2ID0gY2FmZV92NGxfdGVtcGxhdGU7CisJY2FtLT52ZGV2LmRlYnVnID0gMDsKKy8qCWNhbS0+dmRldi5kZWJ1ZyA9IFY0TDJfREVCVUdfSU9DVExfQVJHOyovCisJY2FtLT52ZGV2LnY0bDJfZGV2ID0gJmNhbS0+djRsMl9kZXY7CisJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZjYW0tPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9zbWJ1czsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmY2FtLT52ZGV2LCBjYW0pOworCiAJLyoKIAkgKiBJZiBzbyByZXF1ZXN0ZWQsIHRyeSB0byBnZXQgb3VyIERNQSBidWZmZXJzIG5vdy4KIAkgKi8KQEAgLTIxNjUsMjEgKzE5ODYsMjEgQEAKIAkJCQkJIiB3aWxsIHRyeSBhZ2FpbiBsYXRlci4iKTsKIAl9CiAKLQljYWZlX2Rmc19jYW1fc2V0dXAoY2FtKTsKIAltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7Ci0JY2FmZV9hZGRfZGV2KGNhbSk7CiAJcmV0dXJuIDA7CiAKLSAgb3V0X3NtYnVzOgorb3V0X3NtYnVzOgogCWNhZmVfc21idXNfc2h1dGRvd24oY2FtKTsKLSAgb3V0X2ZyZWVpcnE6CitvdXRfZnJlZWlycToKIAljYWZlX2N0bHJfcG93ZXJfZG93bihjYW0pOwogCWZyZWVfaXJxKHBkZXYtPmlycSwgY2FtKTsKLSAgb3V0X2lvdW5tYXA6CitvdXRfaW91bm1hcDoKIAlwY2lfaW91bm1hcChwZGV2LCBjYW0tPnJlZ3MpOwotICBvdXRfZnJlZToKK291dF9mcmVlOgorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmNhbS0+djRsMl9kZXYpOworb3V0X3VucmVnOgogCWtmcmVlKGNhbSk7Ci0gIG91dDoKK291dDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMTkwLDI1ICsyMDExLDIzIEBACiBzdGF0aWMgdm9pZCBjYWZlX3NodXRkb3duKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQogewogLyogRklYTUU6IE1ha2Ugc3VyZSB3ZSB0YWtlIGNhcmUgb2YgZXZlcnl0aGluZyBoZXJlICovCi0JY2FmZV9kZnNfY2FtX3NodXRkb3duKGNhbSk7CiAJaWYgKGNhbS0+bl9zYnVmcyA+IDApCiAJCS8qIFdoYXQgaWYgdGhleSBhcmUgc3RpbGwgbWFwcGVkPyAgU2hvdWxkbid0IGJlLCBidXQuLi4gKi8KIAkJY2FmZV9mcmVlX3Npb19idWZmZXJzKGNhbSk7Ci0JY2FmZV9yZW1vdmVfZGV2KGNhbSk7CiAJY2FmZV9jdGxyX3N0b3BfZG1hKGNhbSk7CiAJY2FmZV9jdGxyX3Bvd2VyX2Rvd24oY2FtKTsKIAljYWZlX3NtYnVzX3NodXRkb3duKGNhbSk7CiAJY2FmZV9mcmVlX2RtYV9idWZzKGNhbSk7CiAJZnJlZV9pcnEoY2FtLT5wZGV2LT5pcnEsIGNhbSk7CiAJcGNpX2lvdW5tYXAoY2FtLT5wZGV2LCBjYW0tPnJlZ3MpOwotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZjYW0tPnY0bGRldik7Ci0JLyoga2ZyZWUoY2FtKTsgZG9uZSBpbiB2NGxfcmVsZWFzZSAoKSAqLworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZjYW0tPnZkZXYpOwogfQogCiAKIHN0YXRpYyB2b2lkIGNhZmVfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGNhZmVfZmluZF9ieV9wZGV2KHBkZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSB0b19jYW0odjRsMl9kZXYpOwogCiAJaWYgKGNhbSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInBjaV9yZW1vdmUgb24gdW5rbm93biBwZGV2ICVwXG4iLCBwZGV2KTsKQEAgLTIyMTgsNiArMjAzNyw4IEBACiAJaWYgKGNhbS0+dXNlcnMgPiAwKQogCQljYW1fd2FybihjYW0sICJSZW1vdmluZyBhIGRldmljZSB3aXRoIHVzZXJzIVxuIik7CiAJY2FmZV9zaHV0ZG93bihjYW0pOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmNhbS0+djRsMl9kZXYpOworCWtmcmVlKGNhbSk7CiAvKiBObyB1bmxvY2sgLSBpdCBubyBsb25nZXIgZXhpc3RzICovCiB9CiAKQEAgLTIyMjgsNyArMjA0OSw4IEBACiAgKi8KIHN0YXRpYyBpbnQgY2FmZV9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gY2FmZV9maW5kX2J5X3BkZXYocGRldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHRvX2NhbSh2NGwyX2Rldik7CiAJaW50IHJldDsKIAllbnVtIGNhZmVfc3RhdGUgY3N0YXRlOwogCkBAIC0yMjQ2LDcgKzIwNjgsOCBAQAogCiBzdGF0aWMgaW50IGNhZmVfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGNhZmVfZmluZF9ieV9wZGV2KHBkZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSB0b19jYW0odjRsMl9kZXYpOwogCWludCByZXQgPSAwOwogCiAJcmV0ID0gcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CkBAIC0yMzA3LDEzICsyMTMwLDExIEBACiAKIAlwcmludGsoS0VSTl9OT1RJQ0UgIk1hcnZlbGwgTTg4QUxQMDEgJ0NBRkUnIENhbWVyYSBDb250cm9sbGVyIHZlcnNpb24gJWRcbiIsCiAJCQlDQUZFX1ZFUlNJT04pOwotCWNhZmVfZGZzX3NldHVwKCk7CiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmY2FmZV9wY2lfZHJpdmVyKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIGNhZmVfY2NpYyBkcml2ZXJcbiIpOwogCQlnb3RvIG91dDsKIAl9Ci0JcmVxdWVzdF9tb2R1bGUoIm92NzY3MCIpOyAgLyogRklYTUUgd2FudCBzb21ldGhpbmcgbW9yZSBnZW5lcmFsICovCiAJcmV0ID0gMDsKIAogICBvdXQ6CkBAIC0yMzI0LDcgKzIxNDUsNiBAQAogc3RhdGljIHZvaWQgX19leGl0IGNhZmVfZXhpdCh2b2lkKQogewogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmY2FmZV9wY2lfZHJpdmVyKTsKLQljYWZlX2Rmc19zaHV0ZG93bigpOwogfQogCiBtb2R1bGVfaW5pdChjYWZlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwppbmRleCBjM2IwYzhjLi40M2FiMGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYwpAQCAtMTM4MSw5ICsxMzgxLDcgQEAKIHsKIAljcGlhX3Byb2Nfcm9vdCA9IHByb2NfbWtkaXIoImNwaWEiLCBOVUxMKTsKIAotCWlmIChjcGlhX3Byb2Nfcm9vdCkKLQkJY3BpYV9wcm9jX3Jvb3QtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JZWxzZQorCWlmICghY3BpYV9wcm9jX3Jvb3QpCiAJCUxPRygiVW5hYmxlIHRvIGluaXRpYWxpc2UgL3Byb2MvY3BpYVxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3Y0bC5jCmluZGV4IDljMjU4OTQuLmQ0MDk5ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl92NGwuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAogI2luY2x1ZGUgImNwaWEyLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTM0NS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jczUzNDUuYwppbmRleCA4N2U5MTA3Li45NzE0MDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTM0NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1MzQ1LmMKQEAgLTE0MSwxMSArMTQxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjczUzNDVfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGNzNTM0NV9jb3JlX29wcyA9IHsKQEAgLTIxNCw4ICsyMDksNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAiY3M1MzQ1IiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfQ1M1MzQ1LAotCS5jb21tYW5kID0gY3M1MzQ1X2NvbW1hbmQsCiAJLnByb2JlID0gY3M1MzQ1X3Byb2JlLAogCS5yZW1vdmUgPSBjczUzNDVfcmVtb3ZlLAogCS5pZF90YWJsZSA9IGNzNTM0NV9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1M2wzMmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1M2wzMmEuYwppbmRleCA3MjkyYTYzLi41YWViMDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTNsMzJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jczUzbDMyYS5jCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiaTJjIGRldmljZSBkcml2ZXIgZm9yIGNzNTNsMzJhIEF1ZGlvIEFEQyIpOwogTU9EVUxFX0FVVEhPUigiTWFydGluIFZhdWdoYW4iKTsKQEAgLTQxLDkgKzQxLDYgQEAKIAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnZ2luZyBtZXNzYWdlcywgMD1PZmYgKGRlZmF1bHQpLCAxPU9uIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MjIgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKLQotSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTEyMiwxMSArMTE5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjczUzbDMyYV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgY3M1M2wzMmFfY29yZV9vcHMgPSB7CkBAIC0yMTgsOCArMjEwLDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gImNzNTNsMzJhIiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfQ1M1M0wzMkEsCi0JLmNvbW1hbmQgPSBjczUzbDMyYV9jb21tYW5kLAogCS5yZW1vdmUgPSBjczUzbDMyYV9yZW1vdmUsCiAJLnByb2JlID0gY3M1M2wzMmFfcHJvYmUsCiAJLmlkX3RhYmxlID0gY3M1M2wzMmFfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9LY29uZmlnCmluZGV4IDg5NDBiNTMuLmU4YTUwYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9LY29uZmlnCkBAIC05LDcgKzksNyBAQAogCXNlbGVjdCBWSURFT19DWDIzNDFYCiAJc2VsZWN0IFZJREVPX0NTNTM0NQogCXNlbGVjdCBEVkJfUzVIMTQwOSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBNRURJQV9UVU5FUl9NWEw1MDA1UyBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDVTIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBDb25leGFudCBjeDIzNDE4IGJhc2VkCiAJICBQQ0kgY29tYm8gdmlkZW8gcmVjb3JkZXIgZGV2aWNlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdWRpby5jCmluZGV4IDU3YmVkZGYuLmJiNWM1MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXVkaW8uYwpAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKICNpbmNsdWRlICJjeDE4LWlvLmgiCi0jaW5jbHVkZSAiY3gxOC1pMmMuaCIKICNpbmNsdWRlICJjeDE4LWNhcmRzLmgiCiAjaW5jbHVkZSAiY3gxOC1hdWRpby5oIgogCkBAIC0zMyw1NSArMzIsMzIgQEAKICAgIHNldHRpbmdzLiAqLwogaW50IGN4MThfYXVkaW9fc2V0X2lvKHN0cnVjdCBjeDE4ICpjeCkKIHsKKwljb25zdCBzdHJ1Y3QgY3gxOF9jYXJkX2F1ZGlvX2lucHV0ICppbjsKIAlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwotCXUzMiBhdWRpb19pbnB1dDsKIAl1MzIgdmFsOwotCWludCBtdXhfaW5wdXQ7CiAJaW50IGVycjsKIAogCS8qIERldGVybWluZSB3aGljaCBpbnB1dCB0byB1c2UgKi8KLQlpZiAodGVzdF9iaXQoQ1gxOF9GX0lfUkFESU9fVVNFUiwgJmN4LT5pX2ZsYWdzKSkgewotCQlhdWRpb19pbnB1dCA9IGN4LT5jYXJkLT5yYWRpb19pbnB1dC5hdWRpb19pbnB1dDsKLQkJbXV4X2lucHV0ID0gY3gtPmNhcmQtPnJhZGlvX2lucHV0Lm11eGVyX2lucHV0OwotCX0gZWxzZSB7Ci0JCWF1ZGlvX2lucHV0ID0KLQkJCWN4LT5jYXJkLT5hdWRpb19pbnB1dHNbY3gtPmF1ZGlvX2lucHV0XS5hdWRpb19pbnB1dDsKLQkJbXV4X2lucHV0ID0KLQkJCWN4LT5jYXJkLT5hdWRpb19pbnB1dHNbY3gtPmF1ZGlvX2lucHV0XS5tdXhlcl9pbnB1dDsKLQl9CisJaWYgKHRlc3RfYml0KENYMThfRl9JX1JBRElPX1VTRVIsICZjeC0+aV9mbGFncykpCisJCWluID0gJmN4LT5jYXJkLT5yYWRpb19pbnB1dDsKKwllbHNlCisJCWluID0gJmN4LT5jYXJkLT5hdWRpb19pbnB1dHNbY3gtPmF1ZGlvX2lucHV0XTsKIAogCS8qIGhhbmRsZSBtdXhlciBjaGlwcyAqLwotCXJvdXRlLmlucHV0ID0gbXV4X2lucHV0OworCXJvdXRlLmlucHV0ID0gaW4tPm11eGVyX2lucHV0OwogCXJvdXRlLm91dHB1dCA9IDA7Ci0JY3gxOF9pMmNfaHcoY3gsIGN4LT5jYXJkLT5od19tdXhlciwgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsICZyb3V0ZSk7CisJdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfZXh0bXV4LCBhdWRpbywgc19yb3V0aW5nLCAmcm91dGUpOwogCi0Jcm91dGUuaW5wdXQgPSBhdWRpb19pbnB1dDsKLQllcnIgPSBjeDE4X2kyY19odyhjeCwgY3gtPmNhcmQtPmh3X2F1ZGlvX2N0cmwsCi0JCQlWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywgJnJvdXRlKTsKKwlyb3V0ZS5pbnB1dCA9IGluLT5hdWRpb19pbnB1dDsKKwllcnIgPSBjeDE4X2NhbGxfaHdfZXJyKGN4LCBjeC0+Y2FyZC0+aHdfYXVkaW9fY3RybCwKKwkJCSAgICAgICBhdWRpbywgc19yb3V0aW5nLCAmcm91dGUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKKwkvKiBGSVhNRSAtIHRoaXMgaW50ZXJuYWwgbXV4IHNob3VsZCBiZSBhYnN0cmFjdGVkIHRvIGEgc3ViZGV2ICovCiAJdmFsID0gY3gxOF9yZWFkX3JlZyhjeCwgQ1gxOF9BVURJT19FTkFCTEUpICYgfjB4MzA7Ci0JdmFsIHw9IChhdWRpb19pbnB1dCA+IENYMThfQVZfQVVESU9fU0VSSUFMMikgPyAweDIwIDoKLQkJCQkJKGF1ZGlvX2lucHV0IDw8IDQpOwotCWN4MThfd3JpdGVfcmVnKGN4LCB2YWwgfCAweGIwMCwgQ1gxOF9BVURJT19FTkFCTEUpOwotCWN4MThfdmFwaShjeCwgQ1gxOF9BUFVfUkVTRVRBSSwgMSwgMCk7CisJdmFsIHw9IChpbi0+YXVkaW9faW5wdXQgPiBDWDE4X0FWX0FVRElPX1NFUklBTDIpID8gMHgyMCA6CisJCQkJCShpbi0+YXVkaW9faW5wdXQgPDwgNCk7CisJY3gxOF93cml0ZV9yZWdfZXhwZWN0KGN4LCB2YWwgfCAweGIwMCwgQ1gxOF9BVURJT19FTkFCTEUsIHZhbCwgMHgzMCk7CiAJcmV0dXJuIDA7CiB9Ci0KLXZvaWQgY3gxOF9hdWRpb19zZXRfcm91dGUoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKLXsKLQljeDE4X2kyY19odyhjeCwgY3gtPmNhcmQtPmh3X2F1ZGlvX2N0cmwsCi0JCQlWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywgcm91dGUpOwotfQotCi12b2lkIGN4MThfYXVkaW9fc2V0X2F1ZGlvX2Nsb2NrX2ZyZXEoc3RydWN0IGN4MTggKmN4LCB1OCBmcmVxKQotewotCXN0YXRpYyB1MzIgZnJlcXNbM10gPSB7IDQ0MTAwLCA0ODAwMCwgMzIwMDAgfTsKLQotCS8qIFRoZSBhdWRpbyBjbG9jayBvZiB0aGUgZGlnaXRpemVyIG11c3QgbWF0Y2ggdGhlIGNvZGVjIHNhbXBsZQotCSAgIHJhdGUgb3RoZXJ3aXNlIHlvdSBnZXQgc29tZSB2ZXJ5IHN0cmFuZ2UgZWZmZWN0cy4gKi8KLQlpZiAoZnJlcSA+IDIpCi0JCXJldHVybjsKLQljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIFZJRElPQ19JTlRfQVVESU9fQ0xPQ0tfRlJFUSwgJmZyZXFzW2ZyZXFdKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF1ZGlvLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdWRpby5oCmluZGV4IGNiNTY5YTYuLjI3MzFkMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF1ZGlvLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXVkaW8uaApAQCAtMjIsNSArMjIsMyBAQAogICovCiAKIGludCBjeDE4X2F1ZGlvX3NldF9pbyhzdHJ1Y3QgY3gxOCAqY3gpOwotdm9pZCBjeDE4X2F1ZGlvX3NldF9yb3V0ZShzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKTsKLXZvaWQgY3gxOF9hdWRpb19zZXRfYXVkaW9fY2xvY2tfZnJlcShzdHJ1Y3QgY3gxOCAqY3gsIHU4IGZyZXEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtYXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWF1ZGlvLmMKaW5kZXggYTJmMGFkNS4uOWUzMDk4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtYXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1hdWRpby5jCkBAIC00NjQsODIgKzQ2NCw3NiBAQAogCX0KIH0KIAotaW50IGN4MThfYXZfYXVkaW8oc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitpbnQgY3gxOF9hdl9zX2Nsb2NrX2ZyZXEoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIGZyZXEpCiB7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKLQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOwogCWludCByZXR2YWw7CisJdTggdjsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVE6Ci0JewotCQl1OCB2OwotCQlpZiAoc3RhdGUtPmF1ZF9pbnB1dCA+IENYMThfQVZfQVVESU9fU0VSSUFMMikgewotCQkJdiA9IGN4MThfYXZfcmVhZChjeCwgMHg4MDMpICYgfjB4MTA7Ci0JCQljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MDMsIHYsIHYsIDB4MWYpOwotCQkJY3gxOF9hdl93cml0ZShjeCwgMHg4ZDMsIDB4MWYpOwotCQl9Ci0JCXYgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODEwKSB8IDB4MTsKLQkJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODEwLCB2LCB2LCAweDBmKTsKLQotCQlyZXR2YWwgPSBzZXRfYXVkY2xrX2ZyZXEoY3gsICoodTMyICopYXJnKTsKLQotCQl2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDgxMCkgJiB+MHgxOwotCQljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MTAsIHYsIHYsIDB4MGYpOwotCQlpZiAoc3RhdGUtPmF1ZF9pbnB1dCA+IENYMThfQVZfQVVESU9fU0VSSUFMMikgewotCQkJdiA9IGN4MThfYXZfcmVhZChjeCwgMHg4MDMpIHwgMHgxMDsKLQkJCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgwMywgdiwgdiwgMHgxZik7Ci0JCX0KLQkJcmV0dXJuIHJldHZhbDsKKwlpZiAoc3RhdGUtPmF1ZF9pbnB1dCA+IENYMThfQVZfQVVESU9fU0VSSUFMMikgeworCQl2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDgwMykgJiB+MHgxMDsKKwkJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODAzLCB2LCB2LCAweDFmKTsKKwkJY3gxOF9hdl93cml0ZShjeCwgMHg4ZDMsIDB4MWYpOwogCX0KKwl2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDgxMCkgfCAweDE7CisJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODEwLCB2LCB2LCAweDBmKTsKIAotCWNhc2UgVklESU9DX0dfQ1RSTDoKLQkJc3dpdGNoIChjdHJsLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJCWN0cmwtPnZhbHVlID0gZ2V0X3ZvbHVtZShjeCk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgotCQkJY3RybC0+dmFsdWUgPSBnZXRfYmFzcyhjeCk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF90cmVibGUoY3gpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKLQkJCWN0cmwtPnZhbHVlID0gZ2V0X2JhbGFuY2UoY3gpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJCWN0cmwtPnZhbHVlID0gZ2V0X211dGUoY3gpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQorCXJldHZhbCA9IHNldF9hdWRjbGtfZnJlcShjeCwgZnJlcSk7CisKKwl2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDgxMCkgJiB+MHgxOworCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgxMCwgdiwgdiwgMHgwZik7CisJaWYgKHN0YXRlLT5hdWRfaW5wdXQgPiBDWDE4X0FWX0FVRElPX1NFUklBTDIpIHsKKwkJdiA9IGN4MThfYXZfcmVhZChjeCwgMHg4MDMpIHwgMHgxMDsKKwkJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODAzLCB2LCB2LCAweDFmKTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworaW50IGN4MThfYXZfYXVkaW9fZ19jdHJsKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCWN0cmwtPnZhbHVlID0gZ2V0X3ZvbHVtZShjeCk7CiAJCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19DVFJMOgotCQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQkJc2V0X3ZvbHVtZShjeCwgY3RybC0+dmFsdWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQkJCXNldF9iYXNzKGN4LCBjdHJsLT52YWx1ZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCQlzZXRfdHJlYmxlKGN4LCBjdHJsLT52YWx1ZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCQkJc2V0X2JhbGFuY2UoY3gsIGN0cmwtPnZhbHVlKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCQlzZXRfbXV0ZShjeCwgY3RybC0+dmFsdWUpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQorCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKKwkJY3RybC0+dmFsdWUgPSBnZXRfYmFzcyhjeCk7CiAJCWJyZWFrOwotCisJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6CisJCWN0cmwtPnZhbHVlID0gZ2V0X3RyZWJsZShjeCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKKwkJY3RybC0+dmFsdWUgPSBnZXRfYmFsYW5jZShjeCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJY3RybC0+dmFsdWUgPSBnZXRfbXV0ZShjeCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwlyZXR1cm4gMDsKK30KIAoraW50IGN4MThfYXZfYXVkaW9fc19jdHJsKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXNldF92b2x1bWUoY3gsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgorCQlzZXRfYmFzcyhjeCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwkJc2V0X3RyZWJsZShjeCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJCXNldF9iYWxhbmNlKGN4LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJc2V0X211dGUoY3gsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5jCmluZGV4IDBiMWM4NGIuLmY0ZGQ5ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmMKQEAgLTIyLDggKzIyLDEwIEBACiAgKiAgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgogI2luY2x1ZGUgImN4MTgtaW8uaCIKKyNpbmNsdWRlICJjeDE4LWNhcmRzLmgiCiAKIGludCBjeDE4X2F2X3dyaXRlKHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIsIHU4IHZhbHVlKQogewpAQCAtOTcsMTUgKzk5LDYgQEAKIAkJCSAgICAgb3JfdmFsdWUpOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW50IHNldF9pbnB1dChzdHJ1Y3QgY3gxOCAqY3gsIGVudW0gY3gxOF9hdl92aWRlb19pbnB1dCB2aWRfaW5wdXQsCi0JCQkJCWVudW0gY3gxOF9hdl9hdWRpb19pbnB1dCBhdWRfaW5wdXQpOwotc3RhdGljIHZvaWQgbG9nX2F1ZGlvX3N0YXR1cyhzdHJ1Y3QgY3gxOCAqY3gpOwotc3RhdGljIHZvaWQgbG9nX3ZpZGVvX3N0YXR1cyhzdHJ1Y3QgY3gxOCAqY3gpOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCiBzdGF0aWMgdm9pZCBjeDE4X2F2X2luaXRpYWxpemUoc3RydWN0IGN4MTggKmN4KQogewogCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9ICZjeC0+YXZfc3RhdGU7CkBAIC0xNjksOSArMTYyLDE0IEBACiAJLyogU2V0IFZHQV9UUkFDS19SQU5HRSB0byAweDIwICovCiAJY3gxOF9hdl9hbmRfb3I0KGN4LCBDWEFERUNfREZFX0NUUkwyLCAweEZGRkYwMEZGLCAweDAwMDAyMDAwKTsKIAotCS8qIEVuYWJsZSBWQkkgY2FwdHVyZSAqLwotCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfT1VUX0NUUkwxLCAweDQwMTAyNTNGKTsKLQkvKiBjeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX09VVF9DVFJMMSwgMHg0MDEwMjUzRSk7ICovCisJLyoKKwkgKiBJbml0aWFsIFZCSSBzZXR1cAorCSAqIFZJUC0xLjEsIDEwIGJpdCBtb2RlLCBlbmFibGUgUmF3LCBkaXNhYmxlIHNsaWNlZCwKKwkgKiBkb24ndCBjbGFtcCByYXcgc2FtcGxlcyB3aGVuIGNvZGVzIGFyZSBpbiB1c2UsIDEgYnl0ZSB1c2VyIEQtd29yZHMsCisJICogSURJRDAgaGFzIGxpbmUgIywgUlAgY29kZSBWIGJpdCB0cmFuc2l0aW9uIG9uIFZCTEFOSywgZGF0YSBkdXJpbmcKKwkgKiBibGFua2luZyBpbnRlcnZhbHMKKwkgKi8KKwljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX09VVF9DVFJMMSwgMHg0MDEzMjUyZSk7CiAKIAkvKiBTZXQgdGhlIHZpZGVvIGlucHV0LgogCSAgIFRoZSBzZXR0aW5nIGluIE1PREVfQ1RSTCBnZXRzIGxvc3Qgd2hlbiB3ZSBkbyB0aGUgYWJvdmUgc2V0dXAgKi8KQEAgLTE5NSwxMSArMTkzLDYxIEBACiAJc3RhdGUtPmRlZmF1bHRfdm9sdW1lID0gKChzdGF0ZS0+ZGVmYXVsdF92b2x1bWUgLyAyKSArIDIzKSA8PCA5OwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIGludCBjeDE4X2F2X3Jlc2V0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwljeDE4X2F2X2luaXRpYWxpemUoY3gpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MThfYXZfaW5pdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgdmFsKQoreworCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9IHRvX2N4MThfYXZfc3RhdGUoc2QpOworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJc3dpdGNoICh2YWwpIHsKKwljYXNlIENYMThfQVZfSU5JVF9QTExTOgorCQkvKgorCQkgKiBUaGUgY3J5c3RhbCBmcmVxIHVzZWQgaW4gY2FsY3VsYXRpb25zIGluIHRoaXMgZHJpdmVyIHdpbGwgYmUKKwkJICogMjguNjM2MzYwIE1Iei4KKwkJICogQWltIHRvIHJ1biB0aGUgUExMcycgVkNPcyBuZWFyIDQwMCBNSHogdG8gbWluaW16ZSBlcnJvcnMuCisJCSAqLworCisJCS8qCisJCSAqIFZEQ0xLICBJbnRlZ2VyID0gMHgwZiwgUG9zdCBEaXZpZGVyID0gMHgwNAorCQkgKiBBSU1DTEsgSW50ZWdlciA9IDB4MGUsIFBvc3QgRGl2aWRlciA9IDB4MTYKKwkJICovCisJCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfUExMX0NUUkwxLCAweDE2MGUwNDBmKTsKKworCQkvKiBWRENMSyBGcmFjdGlvbiA9IDB4MmJlMmZlICovCisJCS8qIHh0YWwgKiAweGYuMTVmMTdmMC80ID0gMTA4IE1IejogNDMyIE1IeiBiZWZvcmUgcG9zdCBkaXZpZGUgKi8KKwkJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19WSURfUExMX0ZSQUMsIDB4MDAyYmUyZmUpOworCisJCS8qIEFJTUNMSyBGcmFjdGlvbiA9IDB4MDUyMjdhZCAqLworCQkvKiB4dGFsICogMHhlLjI5MTNkNjgvMHgxNiA9IDQ4MDAwICogMzg0OiA0MDYgTUh6IHByZSBwb3N0LWRpdiovCisJCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfQVVYX1BMTF9GUkFDLCAweDAwNTIyN2FkKTsKKworCQkvKiBTQV9NQ0xLX1NFTD0xLCBTQV9NQ0xLX0RJVj0weDE2ICovCisJCWN4MThfYXZfd3JpdGUoY3gsIENYQURFQ19JMlNfTUNMSywgMHg1Nik7CisJCWJyZWFrOworCisJY2FzZSBDWDE4X0FWX0lOSVRfTk9STUFMOgorCWRlZmF1bHQ6CisJCWlmICghc3RhdGUtPmlzX2luaXRpYWxpemVkKSB7CisJCQkvKiBpbml0aWFsaXplIG9uIGZpcnN0IHVzZSAqLworCQkJc3RhdGUtPmlzX2luaXRpYWxpemVkID0gMTsKKwkJCWN4MThfYXZfaW5pdGlhbGl6ZShjeCk7CisJCX0KKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQogCiB2b2lkIGN4MThfYXZfc3RkX3NldHVwKHN0cnVjdCBjeDE4ICpjeCkKIHsKIAlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSAmc3RhdGUtPnNkOwogCXY0bDJfc3RkX2lkIHN0ZCA9IHN0YXRlLT5zdGQ7CiAJaW50IGhibGFuaywgaGFjdGl2ZSwgYnVyc3QsIHZibGFuaywgdmFjdGl2ZSwgc2M7CiAJaW50IHZibGFuazY1Niwgc3JjX2RlY2ltYXRpb247CkBAIC0yMTMsNiArMjYxLDcgQEAKIAkJY3gxOF9hdl93cml0ZShjeCwgMHg0OWYsIDB4MTQpOwogCiAJaWYgKHN0ZCAmIFY0TDJfU1REXzYyNV81MCkgeworCQkvKiBGSVhNRSAtIHJldmlzaXQgdGhlc2UgZm9yIFNsaWNlZCBWQkkgKi8KIAkJaGJsYW5rID0gMTMyOwogCQloYWN0aXZlID0gNzIwOwogCQlidXJzdCA9IDkzOwpAQCAtMjM2LDEzICsyODUsNDAgQEAKIAkJCXNjID0gNjcyMzUxOwogCQl9CiAJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlIGZvbGxvd2luZyByZWxhdGlvbnNoaXBzIG9mIGhhbGYgbGluZSBjb3VudHMgc2hvdWxkIGhvbGQ6CisJCSAqIDUyNSA9IHZzeW5jICsgdmFjdGl2ZSArIHZibGFuazY1NgorCQkgKiAxMiA9IHZibGFuazY1NiAtIHZibGFuaworCQkgKgorCQkgKiB2c3luYzogICAgIGFsd2F5cyA2IGhhbGYtbGluZXMgb2YgdnN5bmMgcHVsc2VzCisJCSAqIHZhY3RpdmU6ICAgaGFsZiBsaW5lcyBvZiBhY3RpdmUgdmlkZW8KKwkJICogdmJsYW5rNjU2OiBoYWxmIGxpbmVzLCBhZnRlciBsaW5lIDMvbWlkLTI2Niwgb2YgYmxhbmtlZCB2aWRlbworCQkgKiB2Ymxhbms6ICAgIGhhbGYgbGluZXMsIGFmdGVyIGxpbmUgOS8yNzIsIG9mIGJsYW5rZWQgdmlkZW8KKwkJICoKKwkJICogQXMgZmFyIGFzIEkgY2FuIHRlbGw6CisJCSAqIHZibGFuazY1NiBzdGFydHMgY291bnRpbmcgZnJvbSB0aGUgZmFsbGluZyBlZGdlIG9mIHRoZSBmaXJzdAorCQkgKiAJdnN5bmMgcHVsc2UgKHN0YXJ0IG9mIGxpbmUgNCBvciBtaWQtMjY2KQorCQkgKiB2Ymxhbmsgc3RhcnRzIGNvdW50aW5nIGZyb20gdGhlIGFmdGVyIHRoZSA2IHZzeW5jIHB1bHNlcyBhbmQKKwkJICogCTYgb3IgNSBlcXVhbGl6YXRpb24gcHVsc2VzIChzdGFydCBvZiBsaW5lIDEwIG9yIDI3MikKKwkJICoKKwkJICogRm9yIDUyNSBsaW5lIHN5c3RlbXMgdGhlIGRyaXZlciB3aWxsIGV4dHJhY3QgVkJJIGluZm9ybWF0aW9uCisJCSAqIGZyb20gbGluZXMgMTAtMjEgYW5kIGxpbmVzIDI3My0yODQuCisJCSAqLworCQl2Ymxhbms2NTYgPSAzODsgLyogbGluZXMgIDQgLSAgMjIgICYgIDI2NiAtIDI4NCAqLworCQl2YmxhbmsgPSAyNjsJLyogbGluZXMgMTAgLSAgMjIgICYgIDI3MiAtIDI4NCAqLworCQl2YWN0aXZlID0gNDgxOyAgLyogbGluZXMgMjMgLSAyNjMgICYgIDI4NSAtIDUyNSAqLworCisJCS8qCisJCSAqIEZvciBhIDEzLjUgTXBwcyBjbG9jayBhbmQgMTUsNzM0LjI2IEh6IGxpbmUgcmF0ZSwgYSBsaW5lIGlzCisJCSAqIGlzIDg1OCBwaXhlbHMgPSA3MjAgYWN0aXZlICsgMTM4IGJsYW5raW5nLiAgVGhlIEhzeW5jIGxlYWRpbmcKKwkJICogZWRnZSBzaG91bGQgaGFwcGVuIDEuMiB1cyAqIDEzLjUgTXBwcyB+PSAxNiBwaXhlbHMgYWZ0ZXIgdGhlCisJCSAqIGVuZCBvZiBhY3RpdmUgdmlkZW8sIGxlYXZpbmcgMTIyIHBpeGVscyBvZiBoYmxhbmsgdG8gaWdub3JlCisJCSAqIGJlZm9yZSBhY3RpdmUgdmlkZW8gc3RhcnRzLgorCQkgKi8KIAkJaGFjdGl2ZSA9IDcyMDsKIAkJaGJsYW5rID0gMTIyOwotCQl2YWN0aXZlID0gNDg3OwogCQlsdW1hX2xwZiA9IDE7CiAJCXV2X2xwZiA9IDE7Ci0JCXZibGFuayA9IDI2OwotCQl2Ymxhbms2NTYgPSAyNjsKIAogCQlzcmNfZGVjaW1hdGlvbiA9IDB4MjFmOwogCQlpZiAoc3RkID09IFY0TDJfU1REX1BBTF82MCkgewpAQCAtMjY1LDMzICszNDEsMzUgQEAKIAlwbGxfaW50ID0gY3gxOF9hdl9yZWFkKGN4LCAweDEwOCk7CiAJcGxsX2ZyYWMgPSBjeDE4X2F2X3JlYWQ0KGN4LCAweDEwYykgJiAweDFmZmZmZmY7CiAJcGxsX3Bvc3QgPSBjeDE4X2F2X3JlYWQoY3gsIDB4MTA5KTsKLQlDWDE4X0RFQlVHX0lORk8oIlBMTCByZWdzID0gaW50OiAldSwgZnJhYzogJXUsIHBvc3Q6ICV1XG4iLAotCQkJcGxsX2ludCwgcGxsX2ZyYWMsIHBsbF9wb3N0KTsKKwlDWDE4X0RFQlVHX0lORk9fREVWKHNkLCAiUExMIHJlZ3MgPSBpbnQ6ICV1LCBmcmFjOiAldSwgcG9zdDogJXVcbiIsCisJCQkgICAgcGxsX2ludCwgcGxsX2ZyYWMsIHBsbF9wb3N0KTsKIAogCWlmIChwbGxfcG9zdCkgewogCQlpbnQgZmluLCBmc2MsIHBsbDsKIAogCQlwbGwgPSAoMjg2MzYzNjBMICogKCgoKHU2NClwbGxfaW50KSA8PCAyNSkgKyBwbGxfZnJhYykpID4+IDI1OwogCQlwbGwgLz0gcGxsX3Bvc3Q7Ci0JCUNYMThfREVCVUdfSU5GTygiUExMID0gJWQuJTA2ZCBNSHpcbiIsCi0JCQkJCXBsbCAvIDEwMDAwMDAsIHBsbCAlIDEwMDAwMDApOwotCQlDWDE4X0RFQlVHX0lORk8oIlBMTC84ID0gJWQuJTA2ZCBNSHpcbiIsCi0JCQkJCXBsbCAvIDgwMDAwMDAsIChwbGwgLyA4KSAlIDEwMDAwMDApOworCQlDWDE4X0RFQlVHX0lORk9fREVWKHNkLCAiUExMID0gJWQuJTA2ZCBNSHpcbiIsCisJCQkJICAgIHBsbCAvIDEwMDAwMDAsIHBsbCAlIDEwMDAwMDApOworCQlDWDE4X0RFQlVHX0lORk9fREVWKHNkLCAiUExMLzggPSAlZC4lMDZkIE1IelxuIiwKKwkJCQkgICAgcGxsIC8gODAwMDAwMCwgKHBsbCAvIDgpICUgMTAwMDAwMCk7CiAKIAkJZmluID0gKCh1NjQpc3JjX2RlY2ltYXRpb24gKiBwbGwpID4+IDEyOwotCQlDWDE4X0RFQlVHX0lORk8oIkFEQyBTYW1wbGluZyBmcmVxID0gJWQuJTA2ZCBNSHpcbiIsCi0JCQkJCWZpbiAvIDEwMDAwMDAsIGZpbiAlIDEwMDAwMDApOworCQlDWDE4X0RFQlVHX0lORk9fREVWKHNkLCAiQURDIFNhbXBsaW5nIGZyZXEgPSAlZC4lMDZkIE1IelxuIiwKKwkJCQkgICAgZmluIC8gMTAwMDAwMCwgZmluICUgMTAwMDAwMCk7CiAKIAkJZnNjID0gKCgodTY0KXNjKSAqIHBsbCkgPj4gMjRMOwotCQlDWDE4X0RFQlVHX0lORk8oIkNocm9tYSBzdWItY2FycmllciBmcmVxID0gJWQuJTA2ZCBNSHpcbiIsCi0JCQkJCWZzYyAvIDEwMDAwMDAsIGZzYyAlIDEwMDAwMDApOworCQlDWDE4X0RFQlVHX0lORk9fREVWKHNkLAorCQkJCSAgICAiQ2hyb21hIHN1Yi1jYXJyaWVyIGZyZXEgPSAlZC4lMDZkIE1IelxuIiwKKwkJCQkgICAgZnNjIC8gMTAwMDAwMCwgZnNjICUgMTAwMDAwMCk7CiAKLQkJQ1gxOF9ERUJVR19JTkZPKCJoYmxhbmsgJWksIGhhY3RpdmUgJWksICIKLQkJCSJ2YmxhbmsgJWkgLCB2YWN0aXZlICVpLCB2Ymxhbms2NTYgJWksIHNyY19kZWMgJWksIgotCQkJImJ1cnN0IDB4JTAyeCwgbHVtYV9scGYgJWksIHV2X2xwZiAlaSwgY29tYiAweCUwMngsIgotCQkJIiBzYyAweCUwNnhcbiIsCi0JCQloYmxhbmssIGhhY3RpdmUsIHZibGFuaywgdmFjdGl2ZSwgdmJsYW5rNjU2LAotCQkJc3JjX2RlY2ltYXRpb24sIGJ1cnN0LCBsdW1hX2xwZiwgdXZfbHBmLCBjb21iLCBzYyk7CisJCUNYMThfREVCVUdfSU5GT19ERVYoc2QsICJoYmxhbmsgJWksIGhhY3RpdmUgJWksIHZibGFuayAlaSwgIgorCQkJCSAgICAidmFjdGl2ZSAlaSwgdmJsYW5rNjU2ICVpLCBzcmNfZGVjICVpLCAiCisJCQkJICAgICJidXJzdCAweCUwMngsIGx1bWFfbHBmICVpLCB1dl9scGYgJWksICIKKwkJCQkgICAgImNvbWIgMHglMDJ4LCBzYyAweCUwNnhcbiIsCisJCQkJICAgIGhibGFuaywgaGFjdGl2ZSwgdmJsYW5rLCB2YWN0aXZlLCB2Ymxhbms2NTYsCisJCQkJICAgIHNyY19kZWNpbWF0aW9uLCBidXJzdCwgbHVtYV9scGYsIHV2X2xwZiwKKwkJCQkgICAgY29tYiwgc2MpOwogCX0KIAogCS8qIFNldHMgaG9yaXpvbnRhbCBibGFua2luZyBkZWxheSBhbmQgYWN0aXZlIGxpbmVzICovCkBAIC0zMjUsMTggKzQwMywxNiBAQAogCWN4MThfYXZfd3JpdGUoY3gsIDB4NDdkLCAweGZmICYgc2MgPj4gOCk7CiAJY3gxOF9hdl93cml0ZShjeCwgMHg0N2UsIDB4ZmYgJiBzYyA+PiAxNik7CiAKLQkvKiBTZXRzIFZCSSBwYXJhbWV0ZXJzICovCiAJaWYgKHN0ZCAmIFY0TDJfU1REXzYyNV81MCkgewotCQljeDE4X2F2X3dyaXRlKGN4LCAweDQ3ZiwgMHgwMSk7Ci0JCXN0YXRlLT52YmlfbGluZV9vZmZzZXQgPSA1OworCQlzdGF0ZS0+c2xpY2VyX2xpbmVfZGVsYXkgPSAxOworCQlzdGF0ZS0+c2xpY2VyX2xpbmVfb2Zmc2V0ID0gKDYgKyBzdGF0ZS0+c2xpY2VyX2xpbmVfZGVsYXkgLSAyKTsKIAl9IGVsc2UgewotCQljeDE4X2F2X3dyaXRlKGN4LCAweDQ3ZiwgMHgwMCk7Ci0JCXN0YXRlLT52YmlfbGluZV9vZmZzZXQgPSA4OworCQlzdGF0ZS0+c2xpY2VyX2xpbmVfZGVsYXkgPSAwOworCQlzdGF0ZS0+c2xpY2VyX2xpbmVfb2Zmc2V0ID0gKDEwICsgc3RhdGUtPnNsaWNlcl9saW5lX2RlbGF5IC0gMik7CiAJfQorCWN4MThfYXZfd3JpdGUoY3gsIDB4NDdmLCBzdGF0ZS0+c2xpY2VyX2xpbmVfZGVsYXkpOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCiBzdGF0aWMgdm9pZCBpbnB1dF9jaGFuZ2Uoc3RydWN0IGN4MTggKmN4KQogewogCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9ICZjeC0+YXZfc3RhdGU7CkBAIC0zODIsMTcgKzQ1OCwyNiBAQAogCX0KIH0KIAorc3RhdGljIGludCBjeDE4X2F2X3NfZnJlcXVlbmN5KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICAgICAgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCWlucHV0X2NoYW5nZShjeCk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc2V0X2lucHV0KHN0cnVjdCBjeDE4ICpjeCwgZW51bSBjeDE4X2F2X3ZpZGVvX2lucHV0IHZpZF9pbnB1dCwKIAkJCQkJZW51bSBjeDE4X2F2X2F1ZGlvX2lucHV0IGF1ZF9pbnB1dCkKIHsKIAlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSAmc3RhdGUtPnNkOwogCXU4IGlzX2NvbXBvc2l0ZSA9ICh2aWRfaW5wdXQgPj0gQ1gxOF9BVl9DT01QT1NJVEUxICYmCiAJCQkgICB2aWRfaW5wdXQgPD0gQ1gxOF9BVl9DT01QT1NJVEU4KTsKIAl1OCByZWc7CiAJdTggdjsKIAotCUNYMThfREVCVUdfSU5GTygiZGVjb2RlciBzZXQgdmlkZW8gaW5wdXQgJWQsIGF1ZGlvIGlucHV0ICVkXG4iLAotCQkJdmlkX2lucHV0LCBhdWRfaW5wdXQpOworCUNYMThfREVCVUdfSU5GT19ERVYoc2QsICJkZWNvZGVyIHNldCB2aWRlbyBpbnB1dCAlZCwgYXVkaW8gaW5wdXQgJWRcbiIsCisJCQkgICAgdmlkX2lucHV0LCBhdWRfaW5wdXQpOwogCiAJaWYgKGlzX2NvbXBvc2l0ZSkgewogCQlyZWcgPSAweGYwICsgKHZpZF9pbnB1dCAtIENYMThfQVZfQ09NUE9TSVRFMSk7CkBAIC00MDUsOCArNDkwLDggQEAKIAkJICAgIGx1bWEgPiBDWDE4X0FWX1NWSURFT19MVU1BOCB8fAogCQkgICAgY2hyb21hIDwgQ1gxOF9BVl9TVklERU9fQ0hST01BNCB8fAogCQkgICAgY2hyb21hID4gQ1gxOF9BVl9TVklERU9fQ0hST01BOCkgewotCQkJQ1gxOF9FUlIoIjB4JTA0eCBpcyBub3QgYSB2YWxpZCB2aWRlbyBpbnB1dCFcbiIsCi0JCQkJCXZpZF9pbnB1dCk7CisJCQlDWDE4X0VSUl9ERVYoc2QsICIweCUwNHggaXMgbm90IGEgdmFsaWQgdmlkZW8gaW5wdXQhXG4iLAorCQkJCSAgICAgdmlkX2lucHV0KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXJlZyA9IDB4ZjAgKyAoKGx1bWEgLSBDWDE4X0FWX1NWSURFT19MVU1BMSkgPj4gNCk7CkBAIC00MzEsNyArNTE2LDggQEAKIAljYXNlIENYMThfQVZfQVVESU84OiByZWcgJj0gfjB4YzA7IHJlZyB8PSAweDQwOyBicmVhazsKIAogCWRlZmF1bHQ6Ci0JCUNYMThfRVJSKCIweCUwNHggaXMgbm90IGEgdmFsaWQgYXVkaW8gaW5wdXQhXG4iLCBhdWRfaW5wdXQpOworCQlDWDE4X0VSUl9ERVYoc2QsICIweCUwNHggaXMgbm90IGEgdmFsaWQgYXVkaW8gaW5wdXQhXG4iLAorCQkJICAgICBhdWRfaW5wdXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQ2MSwxNCArNTQ3LDExOCBAQAogCXJldHVybiAwOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW50IHNldF92NGxzdGQoc3RydWN0IGN4MTggKmN4KQorc3RhdGljIGludCBjeDE4X2F2X3NfdmlkZW9fcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCSAgIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQogewotCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9ICZjeC0+YXZfc3RhdGU7CisJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gdG9fY3gxOF9hdl9zdGF0ZShzZCk7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJcmV0dXJuIHNldF9pbnB1dChjeCwgcm91dGUtPmlucHV0LCBzdGF0ZS0+YXVkX2lucHV0KTsKK30KKworc3RhdGljIGludCBjeDE4X2F2X3NfYXVkaW9fcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCSAgIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQoreworCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9IHRvX2N4MThfYXZfc3RhdGUoc2QpOworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXJldHVybiBzZXRfaW5wdXQoY3gsIHN0YXRlLT52aWRfaW5wdXQsIHJvdXRlLT5pbnB1dCk7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9hdl9nX3R1bmVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3R1bmVyICp2dCkKK3sKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSB0b19jeDE4X2F2X3N0YXRlKHNkKTsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1OCB2cHJlczsKKwl1OCBtb2RlOworCWludCB2YWwgPSAwOworCisJaWYgKHN0YXRlLT5yYWRpbykKKwkJcmV0dXJuIDA7CisKKwl2cHJlcyA9IGN4MThfYXZfcmVhZChjeCwgMHg0MGUpICYgMHgyMDsKKwl2dC0+c2lnbmFsID0gdnByZXMgPyAweGZmZmYgOiAweDA7CisKKwl2dC0+Y2FwYWJpbGl0eSB8PQorCQkgICAgVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwgVjRMMl9UVU5FUl9DQVBfTEFORzEgfAorCQkgICAgVjRMMl9UVU5FUl9DQVBfTEFORzIgfCBWNEwyX1RVTkVSX0NBUF9TQVA7CisKKwltb2RlID0gY3gxOF9hdl9yZWFkKGN4LCAweDgwNCk7CisKKwkvKiBnZXQgcnhzdWJjaGFucyBhbmQgYXVkbW9kZSAqLworCWlmICgobW9kZSAmIDB4ZikgPT0gMSkKKwkJdmFsIHw9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKKwllbHNlCisJCXZhbCB8PSBWNEwyX1RVTkVSX1NVQl9NT05POworCisJaWYgKG1vZGUgPT0gMiB8fCBtb2RlID09IDQpCisJCXZhbCA9IFY0TDJfVFVORVJfU1VCX0xBTkcxIHwgVjRMMl9UVU5FUl9TVUJfTEFORzI7CisKKwlpZiAobW9kZSAmIDB4MTApCisJCXZhbCB8PSBWNEwyX1RVTkVSX1NVQl9TQVA7CisKKwl2dC0+cnhzdWJjaGFucyA9IHZhbDsKKwl2dC0+YXVkbW9kZSA9IHN0YXRlLT5hdWRtb2RlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MThfYXZfc190dW5lcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCit7CisJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gdG9fY3gxOF9hdl9zdGF0ZShzZCk7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJdTggdjsKKworCWlmIChzdGF0ZS0+cmFkaW8pCisJCXJldHVybiAwOworCisJdiA9IGN4MThfYXZfcmVhZChjeCwgMHg4MDkpOworCXYgJj0gfjB4ZjsKKworCXN3aXRjaCAodnQtPmF1ZG1vZGUpIHsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgorCQkvKiBtb25vICAgICAgLT4gbW9ubworCQkgICBzdGVyZW8gICAgLT4gbW9ubworCQkgICBiaWxpbmd1YWwgLT4gbGFuZzEgKi8KKwkJYnJlYWs7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgorCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgorCQkvKiBtb25vICAgICAgLT4gbW9ubworCQkgICBzdGVyZW8gICAgLT4gc3RlcmVvCisJCSAgIGJpbGluZ3VhbCAtPiBsYW5nMSAqLworCQl2IHw9IDB4NDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzI6CisJCS8qIG1vbm8gICAgICAtPiBtb25vCisJCSAgIHN0ZXJlbyAgICAtPiBzdGVyZW8KKwkJICAgYmlsaW5ndWFsIC0+IGxhbmcxL2xhbmcyICovCisJCXYgfD0gMHg3OworCQlicmVhazsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMjoKKwkJLyogbW9ubyAgICAgIC0+IG1vbm8KKwkJICAgc3RlcmVvICAgIC0+IHN0ZXJlbworCQkgICBiaWxpbmd1YWwgLT4gbGFuZzIgKi8KKwkJdiB8PSAweDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MDksIHYsIHYsIDB4ZmYpOworCXN0YXRlLT5hdWRtb2RlID0gdnQtPmF1ZG1vZGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9hdl9zX3N0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBub3JtKQoreworCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9IHRvX2N4MThfYXZfc3RhdGUoc2QpOworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCiAJdTggZm10ID0gMDsgCS8qIHplcm8gaXMgYXV0b2RldGVjdCAqLwogCXU4IHBhbF9tID0gMDsKIAorCWlmIChzdGF0ZS0+cmFkaW8gPT0gMCAmJiBzdGF0ZS0+c3RkID09IG5vcm0pCisJCXJldHVybiAwOworCisJc3RhdGUtPnJhZGlvID0gMDsKKwlzdGF0ZS0+c3RkID0gbm9ybTsKKwogCS8qIEZpcnN0IHRlc3RzIHNob3VsZCBiZSBhZ2FpbnN0IHNwZWNpZmljIHN0ZCAqLwogCWlmIChzdGF0ZS0+c3RkID09IFY0TDJfU1REX05UU0NfTV9KUCkgewogCQlmbXQgPSAweDI7CkBAIC00OTMsNyArNjgzLDcgQEAKIAkJCWZtdCA9IDB4YzsKIAl9CiAKLQlDWDE4X0RFQlVHX0lORk8oImNoYW5naW5nIHZpZGVvIHN0ZCB0byBmbXQgJWlcbiIsIGZtdCk7CisJQ1gxOF9ERUJVR19JTkZPX0RFVihzZCwgImNoYW5naW5nIHZpZGVvIHN0ZCB0byBmbXQgJWlcbiIsIGZtdCk7CiAKIAkvKiBGb2xsb3cgc3RlcCA5IG9mIHNlY3Rpb24gMy4xNiBpbiB0aGUgY3gxOF9hdiBkYXRhc2hlZXQuCiAJICAgV2l0aG91dCB0aGlzIFBBTCBtYXkgZGlzcGxheSBhIHZlcnRpY2FsIGdob3N0aW5nIGVmZmVjdC4KQEAgLTUxMSwxNSArNzAxLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbnQgc2V0X3Y0bGN0cmwoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQorc3RhdGljIGludCBjeDE4X2F2X3NfcmFkaW8oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSB0b19jeDE4X2F2X3N0YXRlKHNkKTsKKwlzdGF0ZS0+cmFkaW8gPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MThfYXZfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgogCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMjU1KSB7Ci0JCQlDWDE4X0VSUigiaW52YWxpZCBicmlnaHRuZXNzIHNldHRpbmcgJWRcbiIsCi0JCQkJICAgIGN0cmwtPnZhbHVlKTsKKwkJCUNYMThfRVJSX0RFVihzZCwgImludmFsaWQgYnJpZ2h0bmVzcyBzZXR0aW5nICVkXG4iLAorCQkJCSAgICAgY3RybC0+dmFsdWUpOwogCQkJcmV0dXJuIC1FUkFOR0U7CiAJCX0KIApAQCAtNTI4LDggKzcyNSw4IEBACiAKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgogCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7Ci0JCQlDWDE4X0VSUigiaW52YWxpZCBjb250cmFzdCBzZXR0aW5nICVkXG4iLAotCQkJCSAgICBjdHJsLT52YWx1ZSk7CisJCQlDWDE4X0VSUl9ERVYoc2QsICJpbnZhbGlkIGNvbnRyYXN0IHNldHRpbmcgJWRcbiIsCisJCQkJICAgICBjdHJsLT52YWx1ZSk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQogCkBAIC01MzgsOCArNzM1LDggQEAKIAogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKIAkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+IDEyNykgewotCQkJQ1gxOF9FUlIoImludmFsaWQgc2F0dXJhdGlvbiBzZXR0aW5nICVkXG4iLAotCQkJCSAgICBjdHJsLT52YWx1ZSk7CisJCQlDWDE4X0VSUl9ERVYoc2QsICJpbnZhbGlkIHNhdHVyYXRpb24gc2V0dGluZyAlZFxuIiwKKwkJCQkgICAgIGN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CiAKQEAgLTU0OCw4ICs3NDUsOSBAQAogCQlicmVhazsKIAogCWNhc2UgVjRMMl9DSURfSFVFOgotCQlpZiAoY3RybC0+dmFsdWUgPCAtMTI3IHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7Ci0JCQlDWDE4X0VSUigiaW52YWxpZCBodWUgc2V0dGluZyAlZFxuIiwgY3RybC0+dmFsdWUpOworCQlpZiAoY3RybC0+dmFsdWUgPCAtMTI4IHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7CisJCQlDWDE4X0VSUl9ERVYoc2QsICJpbnZhbGlkIGh1ZSBzZXR0aW5nICVkXG4iLAorCQkJCSAgICAgY3RybC0+dmFsdWUpOwogCQkJcmV0dXJuIC1FUkFOR0U7CiAJCX0KIApAQCAtNTYxLDE3ICs3NTksMTggQEAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQlyZXR1cm4gY3gxOF9hdl9hdWRpbyhjeCwgVklESU9DX1NfQ1RSTCwgY3RybCk7CisJCXJldHVybiBjeDE4X2F2X2F1ZGlvX3NfY3RybChjeCwgY3RybCk7CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZXRfdjRsY3RybChzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IGN4MThfYXZfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgogCQljdHJsLT52YWx1ZSA9IChzOCljeDE4X2F2X3JlYWQoY3gsIDB4NDE0KSArIDEyODsKQEAgLTU5MCwzMSArNzg5LDU3IEBACiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJcmV0dXJuIGN4MThfYXZfYXVkaW8oY3gsIFZJRElPQ19HX0NUUkwsIGN0cmwpOworCQlyZXR1cm4gY3gxOF9hdl9hdWRpb19nX2N0cmwoY3gsIGN0cmwpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQogCXJldHVybiAwOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW50IGdldF92NGxmbXQoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3N0YXRpYyBpbnQgY3gxOF9hdl9xdWVyeWN0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlzd2l0Y2ggKGZtdC0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU6Ci0JCXJldHVybiBjeDE4X2F2X3ZiaShjeCwgVklESU9DX0dfRk1ULCBmbXQpOworCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9IHRvX2N4MThfYXZfc3RhdGUoc2QpOworCisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMjU1LCAxLCAxMjgpOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEyNywgMSwgNjQpOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIC0xMjgsIDEyNywgMSwgMCk7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwKKwkJCTY1NTM1IC8gMTAwLCBzdGF0ZS0+ZGVmYXVsdF92b2x1bWUpOworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAwKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgorCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgMzI3NjgpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQotCXJldHVybiAwOworCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHNldF92NGxmbXQoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3N0YXRpYyBpbnQgY3gxOF9hdl9nX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKIHsKLQlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIGN4MThfYXZfdmJpX2dfZm10KGN4LCBmbXQpOworfQorCitzdGF0aWMgaW50IGN4MThfYXZfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gdG9fY3gxOF9hdl9zdGF0ZShzZCk7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXg7CiAJaW50IEhTQywgVlNDLCBWc3JjLCBIc3JjLCBmaWx0ZXIsIFZsaW5lczsKIAlpbnQgaXNfNTBIeiA9ICEoc3RhdGUtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCk7CkBAIC02MjksMTIgKzg1NCwyNiBAQAogCQlIc3JjID0gKGN4MThfYXZfcmVhZChjeCwgMHg0NzIpICYgMHgzZikgPDwgNDsKIAkJSHNyYyB8PSAoY3gxOF9hdl9yZWFkKGN4LCAweDQ3MSkgJiAweGYwKSA+PiA0OwogCi0JCVZsaW5lcyA9IHBpeC0+aGVpZ2h0ICsgKGlzXzUwSHogPyA0IDogNyk7CisJCS8qCisJCSAqIFRoaXMgYWRqdXN0bWVudCByZWZsZWN0cyB0aGUgZXhjZXNzIG9mIHZhY3RpdmUsIHNldCBpbgorCQkgKiBjeDE4X2F2X3N0ZF9zZXR1cCgpLCBhYm92ZSBzdGFuZGFyZCB2YWx1ZXM6CisJCSAqCisJCSAqIDQ4MCArIDEgZm9yIDYwIEh6IHN5c3RlbXMKKwkJICogNTc2ICsgNCBmb3IgNTAgSHogc3lzdGVtcworCQkgKi8KKwkJVmxpbmVzID0gcGl4LT5oZWlnaHQgKyAoaXNfNTBIeiA/IDQgOiAxKTsKIAorCQkvKgorCQkgKiBJbnZhbGlkIGhlaWdodCBhbmQgd2lkdGggc2NhbGluZyByZXF1ZXN0cyBhcmU6CisJCSAqIDEuIHdpZHRoIGxlc3MgdGhhbiAxLzE2IG9mIHRoZSBzb3VyY2Ugd2lkdGgKKwkJICogMi4gd2lkdGggZ3JlYXRlciB0aGFuIHRoZSBzb3VyY2Ugd2lkdGgKKwkJICogMy4gaGVpZ2h0IGxlc3MgdGhhbiAxLzggb2YgdGhlIHNvdXJjZSBoZWlnaHQKKwkJICogNC4gaGVpZ2h0IGdyZWF0ZXIgdGhhbiB0aGUgc291cmNlIGhlaWdodAorCQkgKi8KIAkJaWYgKChwaXgtPndpZHRoICogMTYgPCBIc3JjKSB8fCAoSHNyYyA8IHBpeC0+d2lkdGgpIHx8CiAJCSAgICAoVmxpbmVzICogOCA8IFZzcmMpIHx8IChWc3JjIDwgVmxpbmVzKSkgewotCQkJQ1gxOF9FUlIoIiVkeCVkIGlzIG5vdCBhIHZhbGlkIHNpemUhXG4iLAotCQkJCSAgICBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CisJCQlDWDE4X0VSUl9ERVYoc2QsICIlZHglZCBpcyBub3QgYSB2YWxpZCBzaXplIVxuIiwKKwkJCQkgICAgIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CiAKQEAgLTY1MSw4ICs4OTAsOSBAQAogCQllbHNlCiAJCQlmaWx0ZXIgPSAzOwogCi0JCUNYMThfREVCVUdfSU5GTygiZGVjb2RlciBzZXQgc2l6ZSAlZHglZCAtPiBzY2FsZSAgJXV4JXVcbiIsCi0JCQkgICAgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQsIEhTQywgVlNDKTsKKwkJQ1gxOF9ERUJVR19JTkZPX0RFVihzZCwKKwkJCQkgICAgImRlY29kZXIgc2V0IHNpemUgJWR4JWQgLT4gc2NhbGUgICV1eCV1XG4iLAorCQkJCSAgICBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCwgSFNDLCBWU0MpOwogCiAJCS8qIEhTQ0FMRT1IU0MgKi8KIAkJY3gxOF9hdl93cml0ZShjeCwgMHg0MTgsIEhTQyAmIDB4ZmYpOwpAQCAtNjY2LDIzMSArOTA2LDMyIEBACiAJCWJyZWFrOwogCiAJY2FzZSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRToKLQkJcmV0dXJuIGN4MThfYXZfdmJpKGN4LCBWSURJT0NfU19GTVQsIGZtdCk7CisJCXJldHVybiBjeDE4X2F2X3ZiaV9zX2ZtdChjeCwgZm10KTsKIAogCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRToKLQkJcmV0dXJuIGN4MThfYXZfdmJpKGN4LCBWSURJT0NfU19GTVQsIGZtdCk7CisJCXJldHVybiBjeDE4X2F2X3ZiaV9zX2ZtdChjeCwgZm10KTsKIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQogCXJldHVybiAwOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1pbnQgY3gxOF9hdl9jbWQoc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGN4MThfYXZfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKIHsKLQlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOwotCXN0cnVjdCB2NGwyX3R1bmVyICp2dCA9IGFyZzsKLQlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSA9IGFyZzsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotCS8qIGlnbm9yZSB0aGVzZSBjb21tYW5kcyAqLwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBUVU5FUl9TRVRfVFlQRV9BRERSOgotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoIXN0YXRlLT5pc19pbml0aWFsaXplZCkgewotCQlDWDE4X0RFQlVHX0lORk8oImNtZCAlMDh4IHRyaWdnZXJlZCBmdyBsb2FkXG4iLCBjbWQpOwotCQkvKiBpbml0aWFsaXplIG9uIGZpcnN0IHVzZSAqLwotCQlzdGF0ZS0+aXNfaW5pdGlhbGl6ZWQgPSAxOwotCQljeDE4X2F2X2luaXRpYWxpemUoY3gpOwotCX0KLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfSU5UX0RFQ09ERV9WQklfTElORToKLQkJcmV0dXJuIGN4MThfYXZfdmJpKGN4LCBjbWQsIGFyZyk7Ci0KLQljYXNlIFZJRElPQ19JTlRfQVVESU9fQ0xPQ0tfRlJFUToKLQkJcmV0dXJuIGN4MThfYXZfYXVkaW8oY3gsIGNtZCwgYXJnKTsKLQotCWNhc2UgVklESU9DX1NUUkVBTU9OOgotCQlDWDE4X0RFQlVHX0lORk8oImVuYWJsZSBvdXRwdXRcbiIpOworCUNYMThfREVCVUdfSU5GT19ERVYoc2QsICIlcyBvdXRwdXRcbiIsIGVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiKTsKKwlpZiAoZW5hYmxlKSB7CiAJCWN4MThfYXZfd3JpdGUoY3gsIDB4MTE1LCAweDhjKTsKIAkJY3gxOF9hdl93cml0ZShjeCwgMHgxMTYsIDB4MDcpOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NUUkVBTU9GRjoKLQkJQ1gxOF9ERUJVR19JTkZPKCJkaXNhYmxlIG91dHB1dFxuIik7CisJfSBlbHNlIHsKIAkJY3gxOF9hdl93cml0ZShjeCwgMHgxMTUsIDB4MDApOwogCQljeDE4X2F2X3dyaXRlKGN4LCAweDExNiwgMHgwMCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKLQkJbG9nX3ZpZGVvX3N0YXR1cyhjeCk7Ci0JCWxvZ19hdWRpb19zdGF0dXMoY3gpOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfQ1RSTDoKLQkJcmV0dXJuIGdldF92NGxjdHJsKGN4LCAoc3RydWN0IHY0bDJfY29udHJvbCAqKWFyZyk7Ci0KLQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JCXJldHVybiBzZXRfdjRsY3RybChjeCwgKHN0cnVjdCB2NGwyX2NvbnRyb2wgKilhcmcpOwotCi0JY2FzZSBWSURJT0NfUVVFUllDVFJMOgotCXsKLQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYyA9IGFyZzsKLQotCQlzd2l0Y2ggKHFjLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6Ci0JCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjKTsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0KLQkJc3dpdGNoIChxYy0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LAotCQkJCTY1NTM1IC8gMTAwLCBzdGF0ZS0+ZGVmYXVsdF92b2x1bWUpOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgotCQljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWMpOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCi0JY2FzZSBWSURJT0NfR19TVEQ6Ci0JCSoodjRsMl9zdGRfaWQgKilhcmcgPSBzdGF0ZS0+c3RkOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfU1REOgotCQlpZiAoc3RhdGUtPnJhZGlvID09IDAgJiYgc3RhdGUtPnN0ZCA9PSAqKHY0bDJfc3RkX2lkICopYXJnKQotCQkJcmV0dXJuIDA7Ci0JCXN0YXRlLT5yYWRpbyA9IDA7Ci0JCXN0YXRlLT5zdGQgPSAqKHY0bDJfc3RkX2lkICopYXJnOwotCQlyZXR1cm4gc2V0X3Y0bHN0ZChjeCk7Ci0KLQljYXNlIEFVRENfU0VUX1JBRElPOgotCQlzdGF0ZS0+cmFkaW8gPSAxOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0lOVF9HX1ZJREVPX1JPVVRJTkc6Ci0JCXJvdXRlLT5pbnB1dCA9IHN0YXRlLT52aWRfaW5wdXQ7Ci0JCXJvdXRlLT5vdXRwdXQgPSAwOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkc6Ci0JCXJldHVybiBzZXRfaW5wdXQoY3gsIHJvdXRlLT5pbnB1dCwgc3RhdGUtPmF1ZF9pbnB1dCk7Ci0KLQljYXNlIFZJRElPQ19JTlRfR19BVURJT19ST1VUSU5HOgotCQlyb3V0ZS0+aW5wdXQgPSBzdGF0ZS0+YXVkX2lucHV0OwotCQlyb3V0ZS0+b3V0cHV0ID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HOgotCQlyZXR1cm4gc2V0X2lucHV0KGN4LCBzdGF0ZS0+dmlkX2lucHV0LCByb3V0ZS0+aW5wdXQpOwotCi0JY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6Ci0JCWlucHV0X2NoYW5nZShjeCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfR19UVU5FUjoKLQl7Ci0JCXU4IHZwcmVzID0gY3gxOF9hdl9yZWFkKGN4LCAweDQwZSkgJiAweDIwOwotCQl1OCBtb2RlOwotCQlpbnQgdmFsID0gMDsKLQotCQlpZiAoc3RhdGUtPnJhZGlvKQotCQkJYnJlYWs7Ci0KLQkJdnQtPnNpZ25hbCA9IHZwcmVzID8gMHhmZmZmIDogMHgwOwotCi0JCXZ0LT5jYXBhYmlsaXR5IHw9Ci0JCSAgICBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfCBWNEwyX1RVTkVSX0NBUF9MQU5HMSB8Ci0JCSAgICBWNEwyX1RVTkVSX0NBUF9MQU5HMiB8IFY0TDJfVFVORVJfQ0FQX1NBUDsKLQotCQltb2RlID0gY3gxOF9hdl9yZWFkKGN4LCAweDgwNCk7Ci0KLQkJLyogZ2V0IHJ4c3ViY2hhbnMgYW5kIGF1ZG1vZGUgKi8KLQkJaWYgKChtb2RlICYgMHhmKSA9PSAxKQotCQkJdmFsIHw9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKLQkJZWxzZQotCQkJdmFsIHw9IFY0TDJfVFVORVJfU1VCX01PTk87Ci0KLQkJaWYgKG1vZGUgPT0gMiB8fCBtb2RlID09IDQpCi0JCQl2YWwgPSBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8IFY0TDJfVFVORVJfU1VCX0xBTkcyOwotCi0JCWlmIChtb2RlICYgMHgxMCkKLQkJCXZhbCB8PSBWNEwyX1RVTkVSX1NVQl9TQVA7Ci0KLQkJdnQtPnJ4c3ViY2hhbnMgPSB2YWw7Ci0JCXZ0LT5hdWRtb2RlID0gc3RhdGUtPmF1ZG1vZGU7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX1NfVFVORVI6Ci0JewotCQl1OCB2OwotCi0JCWlmIChzdGF0ZS0+cmFkaW8pCi0JCQlicmVhazsKLQotCQl2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDgwOSk7Ci0JCXYgJj0gfjB4ZjsKLQotCQlzd2l0Y2ggKHZ0LT5hdWRtb2RlKSB7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86Ci0JCQkvKiBtb25vICAgICAgLT4gbW9ubwotCQkJICAgc3RlcmVvICAgIC0+IG1vbm8KLQkJCSAgIGJpbGluZ3VhbCAtPiBsYW5nMSAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6Ci0JCQkvKiBtb25vICAgICAgLT4gbW9ubwotCQkJICAgc3RlcmVvICAgIC0+IHN0ZXJlbwotCQkJICAgYmlsaW5ndWFsIC0+IGxhbmcxICovCi0JCQl2IHw9IDB4NDsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMjoKLQkJCS8qIG1vbm8gICAgICAtPiBtb25vCi0JCQkgICBzdGVyZW8gICAgLT4gc3RlcmVvCi0JCQkgICBiaWxpbmd1YWwgLT4gbGFuZzEvbGFuZzIgKi8KLQkJCXYgfD0gMHg3OwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgotCQkJLyogbW9ubyAgICAgIC0+IG1vbm8KLQkJCSAgIHN0ZXJlbyAgICAtPiBzdGVyZW8KLQkJCSAgIGJpbGluZ3VhbCAtPiBsYW5nMiAqLwotCQkJdiB8PSAweDE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgwOSwgdiwgdiwgMHhmZik7Ci0JCXN0YXRlLT5hdWRtb2RlID0gdnQtPmF1ZG1vZGU7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DX0dfRk1UOgotCQlyZXR1cm4gZ2V0X3Y0bGZtdChjeCwgKHN0cnVjdCB2NGwyX2Zvcm1hdCAqKWFyZyk7Ci0KLQljYXNlIFZJRElPQ19TX0ZNVDoKLQkJcmV0dXJuIHNldF92NGxmbXQoY3gsIChzdHJ1Y3QgdjRsMl9mb3JtYXQgKilhcmcpOwotCi0JY2FzZSBWSURJT0NfSU5UX1JFU0VUOgotCQljeDE4X2F2X2luaXRpYWxpemUoY3gpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCXJldHVybiAwOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCiBzdGF0aWMgdm9pZCBsb2dfdmlkZW9fc3RhdHVzKHN0cnVjdCBjeDE4ICpjeCkKIHsKIAlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZm10X3N0cnNbXSA9IHsKQEAgLTkwMywzNiArOTQ0LDQwIEBACiAJfTsKIAogCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9ICZjeC0+YXZfc3RhdGU7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZzdGF0ZS0+c2Q7CiAJdTggdmlkZm10X3NlbCA9IGN4MThfYXZfcmVhZChjeCwgMHg0MDApICYgMHhmOwogCXU4IGdlbl9zdGF0MSA9IGN4MThfYXZfcmVhZChjeCwgMHg0MGQpOwogCXU4IGdlbl9zdGF0MiA9IGN4MThfYXZfcmVhZChjeCwgMHg0MGUpOwogCWludCB2aWRfaW5wdXQgPSBzdGF0ZS0+dmlkX2lucHV0OwogCi0JQ1gxOF9JTkZPKCJWaWRlbyBzaWduYWw6ICAgICAgICAgICAgICAlc3ByZXNlbnRcbiIsCi0JCSAgICAoZ2VuX3N0YXQyICYgMHgyMCkgPyAiIiA6ICJub3QgIik7Ci0JQ1gxOF9JTkZPKCJEZXRlY3RlZCBmb3JtYXQ6ICAgICAgICAgICAlc1xuIiwKLQkJICAgIGZtdF9zdHJzW2dlbl9zdGF0MSAmIDB4Zl0pOworCUNYMThfSU5GT19ERVYoc2QsICJWaWRlbyBzaWduYWw6ICAgICAgICAgICAgICAlc3ByZXNlbnRcbiIsCisJCSAgICAgIChnZW5fc3RhdDIgJiAweDIwKSA/ICIiIDogIm5vdCAiKTsKKwlDWDE4X0lORk9fREVWKHNkLCAiRGV0ZWN0ZWQgZm9ybWF0OiAgICAgICAgICAgJXNcbiIsCisJCSAgICAgIGZtdF9zdHJzW2dlbl9zdGF0MSAmIDB4Zl0pOwogCi0JQ1gxOF9JTkZPKCJTcGVjaWZpZWQgc3RhbmRhcmQ6ICAgICAgICAlc1xuIiwKLQkJICAgIHZpZGZtdF9zZWwgPyBmbXRfc3Ryc1t2aWRmbXRfc2VsXSA6ICJhdXRvbWF0aWMgZGV0ZWN0aW9uIik7CisJQ1gxOF9JTkZPX0RFVihzZCwgIlNwZWNpZmllZCBzdGFuZGFyZDogICAgICAgICVzXG4iLAorCQkgICAgICB2aWRmbXRfc2VsID8gZm10X3N0cnNbdmlkZm10X3NlbF0KKwkJCQkgOiAiYXV0b21hdGljIGRldGVjdGlvbiIpOwogCiAJaWYgKHZpZF9pbnB1dCA+PSBDWDE4X0FWX0NPTVBPU0lURTEgJiYKIAkgICAgdmlkX2lucHV0IDw9IENYMThfQVZfQ09NUE9TSVRFOCkgewotCQlDWDE4X0lORk8oIlNwZWNpZmllZCB2aWRlbyBpbnB1dDogICAgIENvbXBvc2l0ZSAlZFxuIiwKLQkJCXZpZF9pbnB1dCAtIENYMThfQVZfQ09NUE9TSVRFMSArIDEpOworCQlDWDE4X0lORk9fREVWKHNkLCAiU3BlY2lmaWVkIHZpZGVvIGlucHV0OiAgICAgQ29tcG9zaXRlICVkXG4iLAorCQkJICAgICAgdmlkX2lucHV0IC0gQ1gxOF9BVl9DT01QT1NJVEUxICsgMSk7CiAJfSBlbHNlIHsKLQkJQ1gxOF9JTkZPKCJTcGVjaWZpZWQgdmlkZW8gaW5wdXQ6ICAgICBTLVZpZGVvIChMdW1hIEluJWQsIENocm9tYSBJbiVkKVxuIiwKLQkJCSh2aWRfaW5wdXQgJiAweGYwKSA+PiA0LCAodmlkX2lucHV0ICYgMHhmMDApID4+IDgpOworCQlDWDE4X0lORk9fREVWKHNkLCAiU3BlY2lmaWVkIHZpZGVvIGlucHV0OiAgICAgIgorCQkJICAgICAgIlMtVmlkZW8gKEx1bWEgSW4lZCwgQ2hyb21hIEluJWQpXG4iLAorCQkJICAgICAgKHZpZF9pbnB1dCAmIDB4ZjApID4+IDQsCisJCQkgICAgICAodmlkX2lucHV0ICYgMHhmMDApID4+IDgpOwogCX0KIAotCUNYMThfSU5GTygiU3BlY2lmaWVkIGF1ZGlvY2xvY2sgZnJlcTogJWQgSHpcbiIsIHN0YXRlLT5hdWRjbGtfZnJlcSk7CisJQ1gxOF9JTkZPX0RFVihzZCwgIlNwZWNpZmllZCBhdWRpb2Nsb2NrIGZyZXE6ICVkIEh6XG4iLAorCQkgICAgICBzdGF0ZS0+YXVkY2xrX2ZyZXEpOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCiBzdGF0aWMgdm9pZCBsb2dfYXVkaW9fc3RhdHVzKHN0cnVjdCBjeDE4ICpjeCkKIHsKIAlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSAmc3RhdGUtPnNkOwogCXU4IGRvd25sb2FkX2N0bCA9IGN4MThfYXZfcmVhZChjeCwgMHg4MDMpOwogCXU4IG1vZF9kZXRfc3RhdDAgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODA0KTsKIAl1OCBtb2RfZGV0X3N0YXQxID0gY3gxOF9hdl9yZWFkKGN4LCAweDgwNSk7CkBAIC05NTUsNyArMTAwMCw3IEBACiAJY2FzZSAweGZlOiBwID0gImZvcmNlZCBtb2RlIjsgYnJlYWs7CiAJZGVmYXVsdDogcCA9ICJub3QgZGVmaW5lZCI7IGJyZWFrOwogCX0KLQlDWDE4X0lORk8oIkRldGVjdGVkIGF1ZGlvIG1vZGU6ICAgICAgICVzXG4iLCBwKTsKKwlDWDE4X0lORk9fREVWKHNkLCAiRGV0ZWN0ZWQgYXVkaW8gbW9kZTogICAgICAgJXNcbiIsIHApOwogCiAJc3dpdGNoIChtb2RfZGV0X3N0YXQxKSB7CiAJY2FzZSAweDAwOiBwID0gIm5vdCBkZWZpbmVkIjsgYnJlYWs7CkBAIC05ODAsMTEgKzEwMjUsMTEgQEAKIAljYXNlIDB4ZmY6IHAgPSAibm8gZGV0ZWN0ZWQgYXVkaW8gc3RhbmRhcmQiOyBicmVhazsKIAlkZWZhdWx0OiBwID0gIm5vdCBkZWZpbmVkIjsgYnJlYWs7CiAJfQotCUNYMThfSU5GTygiRGV0ZWN0ZWQgYXVkaW8gc3RhbmRhcmQ6ICAgJXNcbiIsIHApOwotCUNYMThfSU5GTygiQXVkaW8gbXV0ZWQ6ICAgICAgICAgICAgICAgJXNcbiIsCi0JCSAgICAobXV0ZV9jdGwgJiAweDIpID8gInllcyIgOiAibm8iKTsKLQlDWDE4X0lORk8oIkF1ZGlvIG1pY3JvY29udHJvbGxlcjogICAgICVzXG4iLAotCQkgICAgKGRvd25sb2FkX2N0bCAmIDB4MTApID8gInJ1bm5pbmciIDogInN0b3BwZWQiKTsKKwlDWDE4X0lORk9fREVWKHNkLCAiRGV0ZWN0ZWQgYXVkaW8gc3RhbmRhcmQ6ICAgJXNcbiIsIHApOworCUNYMThfSU5GT19ERVYoc2QsICJBdWRpbyBtdXRlZDogICAgICAgICAgICAgICAlc1xuIiwKKwkJICAgICAgKG11dGVfY3RsICYgMHgyKSA/ICJ5ZXMiIDogIm5vIik7CisJQ1gxOF9JTkZPX0RFVihzZCwgIkF1ZGlvIG1pY3JvY29udHJvbGxlcjogICAgICVzXG4iLAorCQkgICAgICAoZG93bmxvYWRfY3RsICYgMHgxMCkgPyAicnVubmluZyIgOiAic3RvcHBlZCIpOwogCiAJc3dpdGNoIChhdWRpb19jb25maWcgPj4gNCkgewogCWNhc2UgMHgwMDogcCA9ICJ1bmRlZmluZWQiOyBicmVhazsKQEAgLTEwMDUsNyArMTA1MCw3IEBACiAJY2FzZSAweDBmOiBwID0gImF1dG9tYXRpYyBkZXRlY3Rpb24iOyBicmVhazsKIAlkZWZhdWx0OiBwID0gInVuZGVmaW5lZCI7IGJyZWFrOwogCX0KLQlDWDE4X0lORk8oIkNvbmZpZ3VyZWQgYXVkaW8gc3RhbmRhcmQ6ICVzXG4iLCBwKTsKKwlDWDE4X0lORk9fREVWKHNkLCAiQ29uZmlndXJlZCBhdWRpbyBzdGFuZGFyZDogJXNcbiIsIHApOwogCiAJaWYgKChhdWRpb19jb25maWcgPj4gNCkgPCAweEYpIHsKIAkJc3dpdGNoIChhdWRpb19jb25maWcgJiAweEYpIHsKQEAgLTEwMTksNyArMTA2NCw3IEBACiAJCWNhc2UgMHgwNzogcCA9ICJEVUFMMyAoQUIpIjsgYnJlYWs7CiAJCWRlZmF1bHQ6IHAgPSAidW5kZWZpbmVkIjsKIAkJfQotCQlDWDE4X0lORk8oIkNvbmZpZ3VyZWQgYXVkaW8gbW9kZTogICAgICVzXG4iLCBwKTsKKwkJQ1gxOF9JTkZPX0RFVihzZCwgIkNvbmZpZ3VyZWQgYXVkaW8gbW9kZTogICAgICVzXG4iLCBwKTsKIAl9IGVsc2UgewogCQlzd2l0Y2ggKGF1ZGlvX2NvbmZpZyAmIDB4RikgewogCQljYXNlIDB4MDA6IHAgPSAiQkciOyBicmVhazsKQEAgLTEwMzcsMTQgKzEwODIsMTQgQEAKIAkJY2FzZSAweDBmOiBwID0gImF1dG9tYXRpYyBzdGFuZGFyZCBhbmQgbW9kZSBkZXRlY3Rpb24iOyBicmVhazsKIAkJZGVmYXVsdDogcCA9ICJ1bmRlZmluZWQiOyBicmVhazsKIAkJfQotCQlDWDE4X0lORk8oIkNvbmZpZ3VyZWQgYXVkaW8gc3lzdGVtOiAgICVzXG4iLCBwKTsKKwkJQ1gxOF9JTkZPX0RFVihzZCwgIkNvbmZpZ3VyZWQgYXVkaW8gc3lzdGVtOiAgICVzXG4iLCBwKTsKIAl9CiAKIAlpZiAoYXVkX2lucHV0KQotCQlDWDE4X0lORk8oIlNwZWNpZmllZCBhdWRpbyBpbnB1dDogICAgIFR1bmVyIChJbiVkKVxuIiwKLQkJCQlhdWRfaW5wdXQpOworCQlDWDE4X0lORk9fREVWKHNkLCAiU3BlY2lmaWVkIGF1ZGlvIGlucHV0OiAgICAgVHVuZXIgKEluJWQpXG4iLAorCQkJICAgICAgYXVkX2lucHV0KTsKIAllbHNlCi0JCUNYMThfSU5GTygiU3BlY2lmaWVkIGF1ZGlvIGlucHV0OiAgICAgRXh0ZXJuYWxcbiIpOworCQlDWDE4X0lORk9fREVWKHNkLCAiU3BlY2lmaWVkIGF1ZGlvIGlucHV0OiAgICAgRXh0ZXJuYWxcbiIpOwogCiAJc3dpdGNoIChwcmVmX21vZGUgJiAweGYpIHsKIAljYXNlIDA6IHAgPSAibW9uby9sYW5ndWFnZSBBIjsgYnJlYWs7CkBAIC0xMDU3LDE0ICsxMTAyLDE0IEBACiAJY2FzZSA3OiBwID0gImxhbmd1YWdlIEFCIjsgYnJlYWs7CiAJZGVmYXVsdDogcCA9ICJ1bmRlZmluZWQiOyBicmVhazsKIAl9Ci0JQ1gxOF9JTkZPKCJQcmVmZXJyZWQgYXVkaW8gbW9kZTogICAgICAlc1xuIiwgcCk7CisJQ1gxOF9JTkZPX0RFVihzZCwgIlByZWZlcnJlZCBhdWRpbyBtb2RlOiAgICAgICVzXG4iLCBwKTsKIAogCWlmICgoYXVkaW9fY29uZmlnICYgMHhmKSA9PSAweGYpIHsKIAkJc3dpdGNoICgoYWZjMCA+PiAzKSAmIDB4MSkgewogCQljYXNlIDA6IHAgPSAic3lzdGVtIERLIjsgYnJlYWs7CiAJCWNhc2UgMTogcCA9ICJzeXN0ZW0gTCI7IGJyZWFrOwogCQl9Ci0JCUNYMThfSU5GTygiU2VsZWN0ZWQgNjUgTUh6IGZvcm1hdDogICAgJXNcbiIsIHApOworCQlDWDE4X0lORk9fREVWKHNkLCAiU2VsZWN0ZWQgNjUgTUh6IGZvcm1hdDogICAgJXNcbiIsIHApOwogCiAJCXN3aXRjaCAoYWZjMCAmIDB4NykgewogCQljYXNlIDA6IHAgPSAiQ2hyb21hIjsgYnJlYWs7CkBAIC0xMDc0LDYgKzExMTksMTMxIEBACiAJCWNhc2UgNDogcCA9ICJhdXRvZGV0ZWN0IjsgYnJlYWs7CiAJCWRlZmF1bHQ6IHAgPSAidW5kZWZpbmVkIjsgYnJlYWs7CiAJCX0KLQkJQ1gxOF9JTkZPKCJTZWxlY3RlZCA0NSBNSHogZm9ybWF0OiAgICAlc1xuIiwgcCk7CisJCUNYMThfSU5GT19ERVYoc2QsICJTZWxlY3RlZCA0NSBNSHogZm9ybWF0OiAgICAlc1xuIiwgcCk7CiAJfQogfQorCitzdGF0aWMgaW50IGN4MThfYXZfbG9nX3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCWxvZ192aWRlb19zdGF0dXMoY3gpOworCWxvZ19hdWRpb19zdGF0dXMoY3gpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBjeDE4X2F2X2RiZ19tYXRjaChjb25zdCBzdHJ1Y3QgdjRsMl9kYmdfbWF0Y2ggKm1hdGNoKQoreworCXJldHVybiBtYXRjaC0+dHlwZSA9PSBWNEwyX0NISVBfTUFUQ0hfSE9TVCAmJiBtYXRjaC0+YWRkciA9PSAxOworfQorCitzdGF0aWMgaW50IGN4MThfYXZfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gdG9fY3gxOF9hdl9zdGF0ZShzZCk7CisKKwlpZiAoY3gxOF9hdl9kYmdfbWF0Y2goJmNoaXAtPm1hdGNoKSkgeworCQljaGlwLT5pZGVudCA9IHN0YXRlLT5pZDsKKwkJY2hpcC0+cmV2aXNpb24gPSBzdGF0ZS0+cmV2OworCX0KKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK3N0YXRpYyBpbnQgY3gxOF9hdl9nX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCWlmICghY3gxOF9hdl9kYmdfbWF0Y2goJnJlZy0+bWF0Y2gpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoKHJlZy0+cmVnICYgMHgzKSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJcmVnLT5zaXplID0gNDsKKwlyZWctPnZhbCA9IGN4MThfYXZfcmVhZDQoY3gsIHJlZy0+cmVnICYgMHgwMDAwMGZmYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9hdl9zX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCWlmICghY3gxOF9hdl9kYmdfbWF0Y2goJnJlZy0+bWF0Y2gpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoKHJlZy0+cmVnICYgMHgzKSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJY3gxOF9hdl93cml0ZTQoY3gsIHJlZy0+cmVnICYgMHgwMDAwMGZmYywgcmVnLT52YWwpOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgY3gxOF9hdl9nZW5lcmFsX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gY3gxOF9hdl9nX2NoaXBfaWRlbnQsCisJLmxvZ19zdGF0dXMgPSBjeDE4X2F2X2xvZ19zdGF0dXMsCisJLmluaXQgPSBjeDE4X2F2X2luaXQsCisJLnJlc2V0ID0gY3gxOF9hdl9yZXNldCwKKwkucXVlcnljdHJsID0gY3gxOF9hdl9xdWVyeWN0cmwsCisJLmdfY3RybCA9IGN4MThfYXZfZ19jdHJsLAorCS5zX2N0cmwgPSBjeDE4X2F2X3NfY3RybCwKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLmdfcmVnaXN0ZXIgPSBjeDE4X2F2X2dfcmVnaXN0ZXIsCisJLnNfcmVnaXN0ZXIgPSBjeDE4X2F2X3NfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzIGN4MThfYXZfdHVuZXJfb3BzID0geworCS5zX3JhZGlvID0gY3gxOF9hdl9zX3JhZGlvLAorCS5zX2ZyZXF1ZW5jeSA9IGN4MThfYXZfc19mcmVxdWVuY3ksCisJLmdfdHVuZXIgPSBjeDE4X2F2X2dfdHVuZXIsCisJLnNfdHVuZXIgPSBjeDE4X2F2X3NfdHVuZXIsCisJLnNfc3RkID0gY3gxOF9hdl9zX3N0ZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfYXVkaW9fb3BzIGN4MThfYXZfYXVkaW9fb3BzID0geworCS5zX2Nsb2NrX2ZyZXEgPSBjeDE4X2F2X3NfY2xvY2tfZnJlcSwKKwkuc19yb3V0aW5nID0gY3gxOF9hdl9zX2F1ZGlvX3JvdXRpbmcsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBjeDE4X2F2X3ZpZGVvX29wcyA9IHsKKwkuc19yb3V0aW5nID0gY3gxOF9hdl9zX3ZpZGVvX3JvdXRpbmcsCisJLmRlY29kZV92YmlfbGluZSA9IGN4MThfYXZfZGVjb2RlX3ZiaV9saW5lLAorCS5zX3N0cmVhbSA9IGN4MThfYXZfc19zdHJlYW0sCisJLmdfZm10ID0gY3gxOF9hdl9nX2ZtdCwKKwkuc19mbXQgPSBjeDE4X2F2X3NfZm10LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgY3gxOF9hdl9vcHMgPSB7CisJLmNvcmUgPSAmY3gxOF9hdl9nZW5lcmFsX29wcywKKwkudHVuZXIgPSAmY3gxOF9hdl90dW5lcl9vcHMsCisJLmF1ZGlvID0gJmN4MThfYXZfYXVkaW9fb3BzLAorCS52aWRlbyA9ICZjeDE4X2F2X3ZpZGVvX29wcywKK307CisKK2ludCBjeDE4X2F2X3Byb2JlKHN0cnVjdCBjeDE4ICpjeCkKK3sKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisKKwlzdGF0ZS0+cmV2ID0gY3gxOF9hdl9yZWFkNChjeCwgQ1hBREVDX0NISVBfQ1RSTCkgJiAweGZmZmY7CisJc3RhdGUtPmlkID0gKChzdGF0ZS0+cmV2ID4+IDQpID09IENYQURFQ19DSElQX1RZUEVfTUFLTykKKwkJICAgID8gVjRMMl9JREVOVF9DWDIzNDE4Xzg0MyA6IFY0TDJfSURFTlRfVU5LTk9XTjsKKworCXN0YXRlLT52aWRfaW5wdXQgPSBDWDE4X0FWX0NPTVBPU0lURTc7CisJc3RhdGUtPmF1ZF9pbnB1dCA9IENYMThfQVZfQVVESU84OworCXN0YXRlLT5hdWRjbGtfZnJlcSA9IDQ4MDAwOworCXN0YXRlLT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxOworCXN0YXRlLT5zbGljZXJfbGluZV9kZWxheSA9IDA7CisJc3RhdGUtPnNsaWNlcl9saW5lX29mZnNldCA9ICgxMCArIHN0YXRlLT5zbGljZXJfbGluZV9kZWxheSAtIDIpOworCisJc2QgPSAmc3RhdGUtPnNkOworCXY0bDJfc3ViZGV2X2luaXQoc2QsICZjeDE4X2F2X29wcyk7CisJdjRsMl9zZXRfc3ViZGV2ZGF0YShzZCwgY3gpOworCXNucHJpbnRmKHNkLT5uYW1lLCBzaXplb2Yoc2QtPm5hbWUpLAorCQkgIiVzICUwM3giLCBjeC0+djRsMl9kZXYubmFtZSwgKHN0YXRlLT5yZXYgPj4gNCkpOworCXNkLT5ncnBfaWQgPSBDWDE4X0hXXzQxOF9BVjsKKwlyZXR1cm4gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KCZjeC0+djRsMl9kZXYsIHNkKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuaAppbmRleCBjZjY4YTYwLi5jNDU4MTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5oCkBAIC0yNSw2ICsyNSw4IEBACiAjaWZuZGVmIF9DWDE4X0FWX0NPUkVfSF8KICNkZWZpbmUgX0NYMThfQVZfQ09SRV9IXwogCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKwogc3RydWN0IGN4MTg7CiAKIGVudW0gY3gxOF9hdl92aWRlb19pbnB1dCB7CkBAIC03MywxNyArNzUsNDAgQEAKIH07CiAKIHN0cnVjdCBjeDE4X2F2X3N0YXRlIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJaW50IHJhZGlvOwogCXY0bDJfc3RkX2lkIHN0ZDsKIAllbnVtIGN4MThfYXZfdmlkZW9faW5wdXQgdmlkX2lucHV0OwogCWVudW0gY3gxOF9hdl9hdWRpb19pbnB1dCBhdWRfaW5wdXQ7CiAJdTMyIGF1ZGNsa19mcmVxOwogCWludCBhdWRtb2RlOwotCWludCB2YmlfbGluZV9vZmZzZXQ7CiAJaW50IGRlZmF1bHRfdm9sdW1lOwogCXUzMiBpZDsKIAl1MzIgcmV2OwogCWludCBpc19pbml0aWFsaXplZDsKKworCS8qCisJICogVGhlIFZCSSBzbGljZXIgc3RhcnRzIG9wZXJhdGluZyBhbmQgY291bnRpbmcgbGluZXMsIGJlZ2luaW5nIGF0CisJICogc2xpY2VyIGxpbmUgY291bnQgb2YgMSwgYXQgRCBsaW5lcyBhZnRlciB0aGUgZGVhc3NlcnRpb24gb2YgVlJFU0VULgorCSAqIFRoaXMgc3RhcmluZyBmaWVsZCBsaW5lLCBTLCBpcyA2ICgmIDMxOSkgb3IgMTAgKCYgMjczKSBmb3IgNjI1IG9yIDUyNQorCSAqIGxpbmUgc3lzdGVtcyByZXNwZWN0aXZlbHkuICBTbGljZWQgYW5jaWxsYXJ5IGRhdGEgY2FwdHVyZWQgb24gVkJJCisJICogc2xpY2VyIGxpbmUgTSBpcyBpbnNlcnRlZCBhZnRlciB0aGUgVkJJIHNsaWNlciBpcyBkb25lIHdpdGggbGluZSBNLAorCSAqIHdoZW4gVkJJIHNsaWNlciBsaW5lIGNvdW50IGlzIE4gPSBNKzEuICBUaHVzIHdoZW4gdGhlIFZCSSBzbGljZXIKKwkgKiByZXBvcnRzIGEgVkJJIHNsaWNlciBsaW5lIG51bWJlciB3aXRoIGFuY2lsbGFyeSBkYXRhLCB0aGUgSURJRDAgYnl0ZQorCSAqIGluZGljYXRlcyBWQkkgc2xpY2VyIGxpbmUgTi4gIFRoZSBhY3R1YWwgZmllbGQgbGluZSB0aGF0IHRoZSBjYXB0dXJlZAorCSAqIGRhdGEgY29tZXMgZnJvbSBpcworCSAqCisJICogTCA9IE0rKFMrRC0xKSA9IE4tMSsoUytELTEpID0gTiArIChTK0QtMikuCisJICoKKwkgKiBMIGlzIHRoZSBsaW5lIGluIHRoZSBmaWVsZCwgbm90IGZyYW1lLCBmcm9tIHdoaWNoIHRoZSBWQkkgZGF0YSBjYW1lLgorCSAqIE4gaXMgdGhlIGxpbmUgcmVwb3J0ZWQgYnkgdGhlIHNsaWNlciBpbiB0aGUgYW5jaWxsYXJ5IGRhdGEuCisJICogRCBpcyB0aGUgc2xpY2VyX2xpbmVfZGVsYXkgdmFsdWUgcHJvZ3JhbW1lZCBpbnRvIHJlZ2lzdGVyIDB4NDdmLgorCSAqIFMgaXMgNiBmb3IgNjI1IGxpbmUgc3lzdGVtcyBvciAxMCBmb3IgNTI1IGxpbmUgc3lzdGVtcworCSAqIChTK0QtMikgaXMgdGhlIHNsaWNlcl9saW5lX29mZnNldCB1c2VkIHRvIGNvbnZlcnQgc2xpY2VyIHJlcG9ydGVkCisJICogbGluZSBjb3VudHMgdG8gYWN0dWFsIGZpZWxkIGxpbmVzLgorCSAqLworCWludCBzbGljZXJfbGluZV9kZWxheTsKKwlpbnQgc2xpY2VyX2xpbmVfb2Zmc2V0OwogfTsKIAogCkBAIC0yOTgsNiArMzIzLDE2IEBACiAjZGVmaW5lIENYQURFQ19TRUxFQ1RfQVVESU9fU1RBTkRBUkRfRk0gICAgMHhGOSAgLyogRk0gcmFkaW8gKi8KICNkZWZpbmUgQ1hBREVDX1NFTEVDVF9BVURJT19TVEFOREFSRF9BVVRPICAweEZGICAvKiBBdXRvIGRldGVjdCAqLwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjeDE4X2F2X3N0YXRlICp0b19jeDE4X2F2X3N0YXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGN4MThfYXZfc3RhdGUsIHNkKTsKK30KKworZW51bSBjeDE4X2F2X3N1YmRldl9pbml0X2FyZyB7CisJQ1gxOF9BVl9JTklUX05PUk1BTCA9IDAsCisJQ1gxOF9BVl9JTklUX1BMTFMgPSAxLAorfTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MThfYXYtY29yZS5jIAkJCQkJCQkgICAqLwogaW50IGN4MThfYXZfd3JpdGUoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkciwgdTggdmFsdWUpOwpAQCAtMzEwLDIwICszNDUsMjYgQEAKIHUzMiBjeDE4X2F2X3JlYWQ0KHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIpOwogaW50IGN4MThfYXZfYW5kX29yKHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIsIHVuc2lnbmVkIG1hc2ssIHU4IHZhbHVlKTsKIGludCBjeDE4X2F2X2FuZF9vcjQoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkciwgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7Ci1pbnQgY3gxOF9hdl9jbWQoc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogdm9pZCBjeDE4X2F2X3N0ZF9zZXR1cChzdHJ1Y3QgY3gxOCAqY3gpOwogCitpbnQgY3gxOF9hdl9wcm9iZShzdHJ1Y3QgY3gxOCAqY3gpOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogY3gxOF9hdi1maXJtd2FyZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIGludCBjeDE4X2F2X2xvYWRmdyhzdHJ1Y3QgY3gxOCAqY3gpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogY3gxOF9hdi1hdWRpby5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLWludCBjeDE4X2F2X2F1ZGlvKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKK2ludCBjeDE4X2F2X2F1ZGlvX2dfY3RybChzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpOworaW50IGN4MThfYXZfYXVkaW9fc19jdHJsKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCk7CitpbnQgY3gxOF9hdl9zX2Nsb2NrX2ZyZXEoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIGZyZXEpOwogdm9pZCBjeDE4X2F2X2F1ZGlvX3NldF9wYXRoKHN0cnVjdCBjeDE4ICpjeCk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjeDE4X2F2LXZiaS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotaW50IGN4MThfYXZfdmJpKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKK2ludCBjeDE4X2F2X2RlY29kZV92YmlfbGluZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgc3RydWN0IHY0bDJfZGVjb2RlX3ZiaV9saW5lICp2YmkpOworaW50IGN4MThfYXZfdmJpX2dfZm10KHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpOworaW50IGN4MThfYXZfdmJpX3NfZm10KHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWZpcm13YXJlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1maXJtd2FyZS5jCmluZGV4IGM2NGZkMGEuLjQ5YTU1Y2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWZpcm13YXJlLmMKQEAgLTI5LDYgKzI5LDcgQEAKIAogaW50IGN4MThfYXZfbG9hZGZ3KHN0cnVjdCBjeDE4ICpjeCkKIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gJmN4LT5hdl9zdGF0ZS5zZDsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKIAl1MzIgc2l6ZTsKIAl1MzIgdjsKQEAgLTM2LDggKzM3LDggQEAKIAlpbnQgaTsKIAlpbnQgcmV0cmllczEgPSAwOwogCi0JaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBGV0ZJTEUsICZjeC0+ZGV2LT5kZXYpICE9IDApIHsKLQkJQ1gxOF9FUlIoInVuYWJsZSB0byBvcGVuIGZpcm13YXJlICVzXG4iLCBGV0ZJTEUpOworCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgRldGSUxFLCAmY3gtPnBjaV9kZXYtPmRldikgIT0gMCkgeworCQlDWDE4X0VSUl9ERVYoc2QsICJ1bmFibGUgdG8gb3BlbiBmaXJtd2FyZSAlc1xuIiwgRldGSUxFKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC04OCw3ICs4OSw3IEBACiAJCXJldHJpZXMxKys7CiAJfQogCWlmIChyZXRyaWVzMSA+PSA1KSB7Ci0JCUNYMThfRVJSKCJ1bmFibGUgdG8gbG9hZCBmaXJtd2FyZSAlc1xuIiwgRldGSUxFKTsKKwkJQ1gxOF9FUlJfREVWKHNkLCAidW5hYmxlIHRvIGxvYWQgZmlybXdhcmUgJXNcbiIsIEZXRklMRSk7CiAJCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0xMTUsOSArMTE2LDkgQEAKIAkgICBhcmUgZ2VuZXJhdGVkKSAqLwogCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfSTJTX09VVF9DVEwsIDB4MDAwMDAxQTApOwogCi0JLyogc2V0IGFsdCBJMnMgbWFzdGVyIGNsb2NrIHRvIC8xNiBhbmQgZW5hYmxlIGFsdCBkaXZpZGVyIGkycworCS8qIHNldCBhbHQgSTJzIG1hc3RlciBjbG9jayB0byAvMHgxNiBhbmQgZW5hYmxlIGFsdCBkaXZpZGVyIGkycwogCSAgIHBhc3N0aHJvdWdoICovCi0JY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19QSU5fQ0ZHMywgMHg1MDAwQjY4Nyk7CisJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19QSU5fQ0ZHMywgMHg1NjAwQjY4Nyk7CiAKIAljeDE4X2F2X3dyaXRlNF9leHBlY3QoY3gsIENYQURFQ19TVERfREVUX0NUTCwgMHgwMDAwMDBGNiwgMHgwMDAwMDBGNiwKIAkJCQkJCQkJICAweDNGMDBGRkZGKTsKQEAgLTEzMSw3ICsxMzIsOCBAQAogCXYgPSBjeDE4X3JlYWRfcmVnKGN4LCBDWDE4X0FVRElPX0VOQUJMRSk7CiAJLyogSWYgYml0IDExIGlzIDEsIGNsZWFyIGJpdCAxMCAqLwogCWlmICh2ICYgMHg4MDApCi0JCWN4MThfd3JpdGVfcmVnKGN4LCB2ICYgMHhGRkZGRkJGRiwgQ1gxOF9BVURJT19FTkFCTEUpOworCQljeDE4X3dyaXRlX3JlZ19leHBlY3QoY3gsIHYgJiAweEZGRkZGQkZGLCBDWDE4X0FVRElPX0VOQUJMRSwKKwkJCQkgICAgICAwLCAweDQwMCk7CiAKIAkvKiBFbmFibGUgV1cgYXV0byBhdWRpbyBzdGFuZGFyZCBkZXRlY3Rpb24gKi8KIAl2ID0gY3gxOF9hdl9yZWFkNChjeCwgQ1hBREVDX1NURF9ERVRfQ1RMKTsKQEAgLTE0Miw2ICsxNDQsNiBAQAogCiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAKLQlDWDE4X0lORk8oImxvYWRlZCAlcyBmaXJtd2FyZSAoJWQgYnl0ZXMpXG4iLCBGV0ZJTEUsIHNpemUpOworCUNYMThfSU5GT19ERVYoc2QsICJsb2FkZWQgJXMgZmlybXdhcmUgKCVkIGJ5dGVzKVxuIiwgRldGSUxFLCBzaXplKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtdmJpLmMKaW5kZXggMTUyN2VhNC4uMjNiMzE2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtdmJpLmMKQEAgLTI0LDYgKzI0LDUyIEBACiAKICNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgogCisvKgorICogRm9yIHNsaWNlZCBWQkkgb3V0cHV0LCB3ZSBzZXQgdXAgdG8gdXNlIFZJUC0xLjEsIDgtYml0IG1vZGUsCisgKiBOTiBjb3VudHMgMSBieXRlIER3b3JkcywgYW4gSURJRCB3aXRoIHRoZSBWQkkgbGluZSAjIGluIGl0LgorICogVGh1cywgYWNjb3JkaW5nIHRvIHRoZSBWSVAtMiBTcGVjLCBvdXIgVkJJIGFuY2lsbGFyeSBkYXRhIGxpbmVzCisgKiAoc2hvdWxkISkgbG9vayBsaWtlOgorICoJNCBieXRlIEVBViBjb2RlOiAgICAgICAgICAweGZmIDB4MDAgMHgwMCAweFJQCisgKgl1bmtub3duIG51bWJlciBvZiBwb3NzaWJsZSBpZGxlIGJ5dGVzCisgKgkzIGJ5dGUgQW5jIGRhdGEgcHJlYW1ibGU6IDB4MDAgMHhmZiAweGZmCisgKgkxIGJ5dGUgZGF0YSBpZGVudGlmaWVyOiAgIG5lMDEwaWlpIChwYXJpdHkgYml0cywgMDEwLCBESUQgYml0cykKKyAqCTEgYnl0ZSBzZWNvbmRhcnkgZGF0YSBpZDogbmVzc3Nzc3MgKHBhcml0eSBiaXRzLCBTRElEIGJpdHMpCisgKgkxIGJ5dGUgZGF0YSB3b3JkIGNvdW50OiAgIG5lY2NjY2NjIChwYXJpdHkgYml0cywgTk4gRHdvcmQgY291bnQpCisgKgkyIGJ5dGUgSW50ZXJuYWwgRElEOgkgIFZCSS1saW5lLSMgMHg4MAorICoJTk4gZGF0YSBieXRlcworICoJMSBieXRlIGNoZWNrc3VtCisgKglGaWxsIGJ5dGVzIG5lZWRlZCB0byBmaWwgb3V0IHRvIDQqTk4gYnl0ZXMgb2YgcGF5bG9hZAorICoKKyAqIFRoZSBSUCBjb2RlcyBmb3IgRUFWcyB3aGVuIGluIFZJUC0xLjEgbW9kZSwgbm90IGluIHJhdyBtb2RlLCAmCisgKiBpbiB0aGUgdmVydGljYWwgYmxhbmtpbmcgaW50ZXJ2YWwgYXJlOgorICoJMHhiMCAoVGFzayAgICAgICAgIDAgVmVydGljYWxCbGFuayBIb3Jpem9udGFsQmxhbmsgMCAwIDAgMCkKKyAqCTB4ZjAgKFRhc2sgRXZlbkZpZWxkIFZlcnRpY2FsQmxhbmsgSG9yaXpvbnRhbEJsYW5rIDAgMCAwIDApCisgKgorICogU2luY2UgdGhlIFYgYml0IGlzIG9ubHkgYWxsb3dlZCB0byB0b2dnbGUgaW4gdGhlIEVBViBSUCBjb2RlLCBqdXN0CisgKiBiZWZvcmUgdGhlIGZpcnN0IGFjdGl2ZSByZWdpb24gbGluZSBhbmQgZm9yIGFjdGl2ZSBsaW5lcywgdGhleSBhcmU6CisgKgkweDkwIChUYXNrICAgICAgICAgMCAwIEhvcml6b250YWxCbGFuayAwIDAgMCAwKQorICoJMHhkMCAoVGFzayBFdmVuRmllbGQgMCBIb3Jpem9udGFsQmxhbmsgMCAwIDAgMCkKKyAqCisgKiBUaGUgdXNlciBhcHBsaWNhdGlvbiBESUQgYnl0ZXMgd2UgY2FyZSBhYm91dCBhcmU6CisgKgkweDkxICgxIDAgMDEwICAgICAgICAwICFBY3RpdmVMaW5lIEFuY0RhdGFQcmVzZW50KQorICoJMHg1NSAoMCAxIDAxMCAybmRGaWVsZCAhQWN0aXZlTGluZSBBbmNEYXRhUHJlc2VudCkKKyAqCisgKi8KK3N0YXRpYyBjb25zdCB1OCBzbGljZWRfdmJpX2RpZFsyXSA9IHsgMHg5MSwgMHg1NSB9OworCitzdHJ1Y3QgdmJpX2FuY19kYXRhIHsKKwkvKiB1OCBlYXZbNF07ICovCisJLyogdTggaWRsZVtdOyBWYXJpYWJsZSBudW1iZXIgb2YgaWRsZSBieXRlcyAqLworCXU4IHByZWFtYmxlWzNdOworCXU4IGRpZDsKKwl1OCBzZGlkOworCXU4IGRhdGFfY291bnQ7CisJdTggaWRpZFsyXTsKKwl1OCBwYXlsb2FkWzFdOyAvKiBkYXRhX2NvdW50IG9mIHBheWxvYWQgKi8KKwkvKiB1OCBjaGVja3N1bTsgKi8KKwkvKiB1OCBmaWxsW107IFZhcmlhYmxlIG51bWJlciBvZiBmaWxsIGJ5dGVzICovCit9OworCiBzdGF0aWMgaW50IG9kZF9wYXJpdHkodTggYykKIHsKIAljIF49IChjID4+IDQpOwpAQCAtODMsMTg4ICsxMjksMTg5IEBACiAJcmV0dXJuIGVyciAmIDB4ZjA7CiB9CiAKLWludCBjeDE4X2F2X3ZiaShzdHJ1Y3QgY3gxOCAqY3gsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK2ludCBjeDE4X2F2X3ZiaV9nX2ZtdChzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewogCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9ICZjeC0+YXZfc3RhdGU7Ci0Jc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQ7CiAJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKnN2Ymk7CisJc3RhdGljIGNvbnN0IHUxNiBsY3IydmJpW10gPSB7CisJCTAsIFY0TDJfU0xJQ0VEX1RFTEVURVhUX0IsIDAsCS8qIDEgKi8KKwkJMCwgVjRMMl9TTElDRURfV1NTXzYyNSwgMCwJLyogNCAqLworCQlWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNSwJLyogNiAqLworCQkwLCAwLCBWNEwyX1NMSUNFRF9WUFMsIDAsIDAsCS8qIDkgKi8KKwkJMCwgMCwgMCwgMAorCX07CisJaW50IGlzX3BhbCA9ICEoc3RhdGUtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCk7CisJaW50IGk7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0dfRk1UOgotCXsKLQkJc3RhdGljIHUxNiBsY3IydmJpW10gPSB7Ci0JCQkwLCBWNEwyX1NMSUNFRF9URUxFVEVYVF9CLCAwLAkvKiAxICovCi0JCQkwLCBWNEwyX1NMSUNFRF9XU1NfNjI1LCAwLAkvKiA0ICovCi0JCQlWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNSwJLyogNiAqLwotCQkJMCwgMCwgVjRMMl9TTElDRURfVlBTLCAwLCAwLAkvKiA5ICovCi0JCQkwLCAwLCAwLCAwCi0JCX07Ci0JCWludCBpc19wYWwgPSAhKHN0YXRlLT5zdGQgJiBWNEwyX1NURF81MjVfNjApOwotCQlpbnQgaTsKKwlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzdmJpID0gJmZtdC0+Zm10LnNsaWNlZDsKKwltZW1zZXQoc3ZiaSwgMCwgc2l6ZW9mKCpzdmJpKSk7CisJLyogd2UncmUgZG9uZSBpZiByYXcgVkJJIGlzIGFjdGl2ZSAqLworCWlmICgoY3gxOF9hdl9yZWFkKGN4LCAweDQwNCkgJiAweDEwKSA9PSAwKQorCQlyZXR1cm4gMDsKIAotCQlmbXQgPSBhcmc7Ci0JCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJc3ZiaSA9ICZmbXQtPmZtdC5zbGljZWQ7Ci0JCW1lbXNldChzdmJpLCAwLCBzaXplb2YoKnN2YmkpKTsKLQkJLyogd2UncmUgZG9uZSBpZiByYXcgVkJJIGlzIGFjdGl2ZSAqLwotCQlpZiAoKGN4MThfYXZfcmVhZChjeCwgMHg0MDQpICYgMHgxMCkgPT0gMCkKLQkJCWJyZWFrOworCWlmIChpc19wYWwpIHsKKwkJZm9yIChpID0gNzsgaSA8PSAyMzsgaSsrKSB7CisJCQl1OCB2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDQyNCArIGkgLSA3KTsKIAotCQlpZiAoaXNfcGFsKSB7Ci0JCQlmb3IgKGkgPSA3OyBpIDw9IDIzOyBpKyspIHsKLQkJCQl1OCB2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDQyNCArIGkgLSA3KTsKLQotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPSBsY3IydmJpW3YgPj4gNF07Ci0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IGxjcjJ2YmlbdiAmIDB4Zl07Ci0JCQkJc3ZiaS0+c2VydmljZV9zZXQgfD0gc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSB8Ci0JCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV07Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlmb3IgKGkgPSAxMDsgaSA8PSAyMTsgaSsrKSB7Ci0JCQkJdTggdiA9IGN4MThfYXZfcmVhZChjeCwgMHg0MjQgKyBpIC0gMTApOwotCi0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9IGxjcjJ2YmlbdiA+PiA0XTsKLQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gbGNyMnZiaVt2ICYgMHhmXTsKLQkJCQlzdmJpLT5zZXJ2aWNlX3NldCB8PSBzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldIHwKLQkJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXTsKLQkJCX0KKwkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPSBsY3IydmJpW3YgPj4gNF07CisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gbGNyMnZiaVt2ICYgMHhmXTsKKwkJCXN2YmktPnNlcnZpY2Vfc2V0IHw9IHN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gfAorCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV07CiAJCX0KLQkJYnJlYWs7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMTA7IGkgPD0gMjE7IGkrKykgeworCQkJdTggdiA9IGN4MThfYXZfcmVhZChjeCwgMHg0MjQgKyBpIC0gMTApOworCisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldID0gbGNyMnZiaVt2ID4+IDRdOworCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IGxjcjJ2YmlbdiAmIDB4Zl07CisJCQlzdmJpLT5zZXJ2aWNlX3NldCB8PSBzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldIHwKKwkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldOworCQl9CiAJfQorCXJldHVybiAwOworfQogCi0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JewotCQlpbnQgaXNfcGFsID0gIShzdGF0ZS0+c3RkICYgVjRMMl9TVERfNTI1XzYwKTsKLQkJaW50IHZiaV9vZmZzZXQgPSBpc19wYWwgPyAxIDogMDsKLQkJaW50IGksIHg7Ci0JCXU4IGxjclsyNF07CitpbnQgY3gxOF9hdl92Ymlfc19mbXQoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOworCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICpzdmJpOworCWludCBpc19wYWwgPSAhKHN0YXRlLT5zdGQgJiBWNEwyX1NURF81MjVfNjApOworCWludCBpLCB4OworCXU4IGxjclsyNF07CiAKLQkJZm10ID0gYXJnOwotCQlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICYmCi0JCSAgICBmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlzdmJpID0gJmZtdC0+Zm10LnNsaWNlZDsKLQkJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7Ci0JCQkvKiByYXcgVkJJICovCi0JCQltZW1zZXQoc3ZiaSwgMCwgc2l6ZW9mKCpzdmJpKSk7Ci0KLQkJCS8qIFNldHVwIHN0YW5kYXJkICovCi0JCQljeDE4X2F2X3N0ZF9zZXR1cChjeCk7Ci0KLQkJCS8qIFZCSSBPZmZzZXQgKi8KLQkJCWN4MThfYXZfd3JpdGUoY3gsIDB4NDdmLCB2Ymlfb2Zmc2V0KTsKLQkJCWN4MThfYXZfd3JpdGUoY3gsIDB4NDA0LCAweDJlKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJZm9yICh4ID0gMDsgeCA8PSAyMzsgeCsrKQotCQkJbGNyW3hdID0gMHgwMDsKKwlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICYmCisJCQlmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3ZiaSA9ICZmbXQtPmZtdC5zbGljZWQ7CisJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7CisJCS8qIHJhdyBWQkkgKi8KKwkJbWVtc2V0KHN2YmksIDAsIHNpemVvZigqc3ZiaSkpOwogCiAJCS8qIFNldHVwIHN0YW5kYXJkICovCiAJCWN4MThfYXZfc3RkX3NldHVwKGN4KTsKIAotCQkvKiBTbGljZWQgVkJJICovCi0JCWN4MThfYXZfd3JpdGUoY3gsIDB4NDA0LCAweDMyKTsJLyogQW5jaWxsYXJ5IGRhdGEgKi8KLQkJY3gxOF9hdl93cml0ZShjeCwgMHg0MDYsIDB4MTMpOwotCQljeDE4X2F2X3dyaXRlKGN4LCAweDQ3ZiwgdmJpX29mZnNldCk7CisJCS8qIFZCSSBPZmZzZXQgKi8KKwkJY3gxOF9hdl93cml0ZShjeCwgMHg0N2YsIHN0YXRlLT5zbGljZXJfbGluZV9kZWxheSk7CisJCWN4MThfYXZfd3JpdGUoY3gsIDB4NDA0LCAweDJlKTsKKwkJcmV0dXJuIDA7CisJfQogCi0JCWlmIChpc19wYWwpIHsKLQkJCWZvciAoaSA9IDA7IGkgPD0gNjsgaSsrKQotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPQotCQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gMDsKLQkJfSBlbHNlIHsKLQkJCWZvciAoaSA9IDA7IGkgPD0gOTsgaSsrKQotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPQotCQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gMDsKKwlmb3IgKHggPSAwOyB4IDw9IDIzOyB4KyspCisJCWxjclt4XSA9IDB4MDA7CiAKLQkJCWZvciAoaSA9IDIyOyBpIDw9IDIzOyBpKyspCi0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9Ci0JCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV0gPSAwOwotCQl9CisJLyogU2V0dXAgc3RhbmRhcmQgKi8KKwljeDE4X2F2X3N0ZF9zZXR1cChjeCk7CiAKLQkJZm9yIChpID0gNzsgaSA8PSAyMzsgaSsrKSB7Ci0JCQlmb3IgKHggPSAwOyB4IDw9IDE7IHgrKykgewotCQkJCXN3aXRjaCAoc3ZiaS0+c2VydmljZV9saW5lc1sxLXhdW2ldKSB7Ci0JCQkJY2FzZSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COgotCQkJCQlsY3JbaV0gfD0gMSA8PCAoNCAqIHgpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFY0TDJfU0xJQ0VEX1dTU182MjU6Ci0JCQkJCWxjcltpXSB8PSA0IDw8ICg0ICogeCk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgVjRMMl9TTElDRURfQ0FQVElPTl81MjU6Ci0JCQkJCWxjcltpXSB8PSA2IDw8ICg0ICogeCk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgVjRMMl9TTElDRURfVlBTOgotCQkJCQlsY3JbaV0gfD0gOSA8PCAoNCAqIHgpOwotCQkJCQlicmVhazsKLQkJCQl9CisJLyogU2xpY2VkIFZCSSAqLworCWN4MThfYXZfd3JpdGUoY3gsIDB4NDA0LCAweDMyKTsJLyogQW5jaWxsYXJ5IGRhdGEgKi8KKwljeDE4X2F2X3dyaXRlKGN4LCAweDQwNiwgMHgxMyk7CisJY3gxOF9hdl93cml0ZShjeCwgMHg0N2YsIHN0YXRlLT5zbGljZXJfbGluZV9kZWxheSk7CisKKwkvKiBGb3JjZSBpbXBvc3NpYmxlIGxpbmVzIHRvIDAgKi8KKwlpZiAoaXNfcGFsKSB7CisJCWZvciAoaSA9IDA7IGkgPD0gNjsgaSsrKQorCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9CisJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IDA7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8PSA5OyBpKyspCisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldID0KKwkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gMDsKKworCQlmb3IgKGkgPSAyMjsgaSA8PSAyMzsgaSsrKQorCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9CisJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IDA7CisJfQorCisJLyogQnVpbGQgcmVnaXN0ZXIgdmFsdWVzIGZvciByZXF1ZXN0ZWQgc2VydmljZSBsaW5lcyAqLworCWZvciAoaSA9IDc7IGkgPD0gMjM7IGkrKykgeworCQlmb3IgKHggPSAwOyB4IDw9IDE7IHgrKykgeworCQkJc3dpdGNoIChzdmJpLT5zZXJ2aWNlX2xpbmVzWzEteF1baV0pIHsKKwkJCWNhc2UgVjRMMl9TTElDRURfVEVMRVRFWFRfQjoKKwkJCQlsY3JbaV0gfD0gMSA8PCAoNCAqIHgpOworCQkJCWJyZWFrOworCQkJY2FzZSBWNEwyX1NMSUNFRF9XU1NfNjI1OgorCQkJCWxjcltpXSB8PSA0IDw8ICg0ICogeCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OgorCQkJCWxjcltpXSB8PSA2IDw8ICg0ICogeCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFY0TDJfU0xJQ0VEX1ZQUzoKKwkJCQlsY3JbaV0gfD0gOSA8PCAoNCAqIHgpOworCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0KLQkJaWYgKGlzX3BhbCkgewotCQkJZm9yICh4ID0gMSwgaSA9IDB4NDI0OyBpIDw9IDB4NDM0OyBpKyssIHgrKykKLQkJCQljeDE4X2F2X3dyaXRlKGN4LCBpLCBsY3JbNiArIHhdKTsKLQkJfSBlbHNlIHsKLQkJCWZvciAoeCA9IDEsIGkgPSAweDQyNDsgaSA8PSAweDQzMDsgaSsrLCB4KyspCi0JCQkJY3gxOF9hdl93cml0ZShjeCwgaSwgbGNyWzkgKyB4XSk7Ci0JCQlmb3IgKGkgPSAweDQzMTsgaSA8PSAweDQzNDsgaSsrKQotCQkJCWN4MThfYXZfd3JpdGUoY3gsIGksIDApOwotCQl9Ci0KLQkJY3gxOF9hdl93cml0ZShjeCwgMHg0M2MsIDB4MTYpOwotCQljeDE4X2F2X3dyaXRlKGN4LCAweDQ3NCwgaXNfcGFsID8gMHgyYSA6IDB4MjIpOwotCQlicmVhazsKIAl9CiAKLQljYXNlIFZJRElPQ19JTlRfREVDT0RFX1ZCSV9MSU5FOgotCXsKLQkJc3RydWN0IHY0bDJfZGVjb2RlX3ZiaV9saW5lICp2YmkgPSBhcmc7Ci0JCXU4ICpwID0gdmJpLT5wOwotCQlpbnQgaWQxLCBpZDIsIGwsIGVyciA9IDA7CisJaWYgKGlzX3BhbCkgeworCQlmb3IgKHggPSAxLCBpID0gMHg0MjQ7IGkgPD0gMHg0MzQ7IGkrKywgeCsrKQorCQkJY3gxOF9hdl93cml0ZShjeCwgaSwgbGNyWzYgKyB4XSk7CisJfSBlbHNlIHsKKwkJZm9yICh4ID0gMSwgaSA9IDB4NDI0OyBpIDw9IDB4NDMwOyBpKyssIHgrKykKKwkJCWN4MThfYXZfd3JpdGUoY3gsIGksIGxjcls5ICsgeF0pOworCQlmb3IgKGkgPSAweDQzMTsgaSA8PSAweDQzNDsgaSsrKQorCQkJY3gxOF9hdl93cml0ZShjeCwgaSwgMCk7CisJfQogCi0JCWlmIChwWzBdIHx8IHBbMV0gIT0gMHhmZiB8fCBwWzJdICE9IDB4ZmYgfHwKLQkJICAgIChwWzNdICE9IDB4NTUgJiYgcFszXSAhPSAweDkxKSkgewotCQkJdmJpLT5saW5lID0gdmJpLT50eXBlID0gMDsKLQkJCWJyZWFrOwotCQl9CisJY3gxOF9hdl93cml0ZShjeCwgMHg0M2MsIDB4MTYpOworCS8qIEZJWE1FIC0gc2hvdWxkIG1hdGNoIHZibGFuayBzZXQgaW4gY3gxOF9hdl9zdGRfc2V0dXAoKSAqLworCWN4MThfYXZfd3JpdGUoY3gsIDB4NDc0LCBpc19wYWwgPyAweDJhIDogMjYpOworCXJldHVybiAwOworfQogCi0JCXAgKz0gNDsKLQkJaWQxID0gcFstMV07Ci0JCWlkMiA9IHBbMF0gJiAweGY7Ci0JCWwgPSBwWzJdICYgMHgzZjsKLQkJbCArPSBzdGF0ZS0+dmJpX2xpbmVfb2Zmc2V0OwotCQlwICs9IDQ7CitpbnQgY3gxOF9hdl9kZWNvZGVfdmJpX2xpbmUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgICBzdHJ1Y3QgdjRsMl9kZWNvZGVfdmJpX2xpbmUgKnZiaSkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOworCXN0cnVjdCB2YmlfYW5jX2RhdGEgKmFuYyA9IChzdHJ1Y3QgdmJpX2FuY19kYXRhICopdmJpLT5wOworCXU4ICpwOworCWludCBkaWQsIHNkaWQsIGwsIGVyciA9IDA7CiAKLQkJc3dpdGNoIChpZDIpIHsKLQkJY2FzZSAxOgotCQkJaWQyID0gVjRMMl9TTElDRURfVEVMRVRFWFRfQjsKLQkJCWJyZWFrOwotCQljYXNlIDQ6Ci0JCQlpZDIgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OwotCQkJYnJlYWs7Ci0JCWNhc2UgNjoKLQkJCWlkMiA9IFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OwotCQkJZXJyID0gIW9kZF9wYXJpdHkocFswXSkgfHwgIW9kZF9wYXJpdHkocFsxXSk7Ci0JCQlicmVhazsKLQkJY2FzZSA5OgotCQkJaWQyID0gVjRMMl9TTElDRURfVlBTOwotCQkJaWYgKGRlY29kZV92cHMocCwgcCkgIT0gMCkKLQkJCQllcnIgPSAxOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlpZDIgPSAwOworCS8qCisJICogQ2hlY2sgZm9yIHRoZSBhbmNpbGxhcnkgZGF0YSBoZWFkZXIgZm9yIHNsaWNlZCBWQkkKKwkgKi8KKwlpZiAoYW5jLT5wcmVhbWJsZVswXSB8fAorCQkJYW5jLT5wcmVhbWJsZVsxXSAhPSAweGZmIHx8IGFuYy0+cHJlYW1ibGVbMl0gIT0gMHhmZiB8fAorCQkJKGFuYy0+ZGlkICE9IHNsaWNlZF92YmlfZGlkWzBdICYmCisJCQkgYW5jLT5kaWQgIT0gc2xpY2VkX3ZiaV9kaWRbMV0pKSB7CisJCXZiaS0+bGluZSA9IHZiaS0+dHlwZSA9IDA7CisJCXJldHVybiAwOworCX0KKworCWRpZCA9IGFuYy0+ZGlkOworCXNkaWQgPSBhbmMtPnNkaWQgJiAweGY7CisJbCA9IGFuYy0+aWRpZFswXSAmIDB4M2Y7CisJbCArPSBzdGF0ZS0+c2xpY2VyX2xpbmVfb2Zmc2V0OworCXAgPSBhbmMtPnBheWxvYWQ7CisKKwkvKiBEZWNvZGUgdGhlIFNESUQgc2V0IGJ5IHRoZSBzbGljZXIgKi8KKwlzd2l0Y2ggKHNkaWQpIHsKKwljYXNlIDE6CisJCXNkaWQgPSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COworCQlicmVhazsKKwljYXNlIDQ6CisJCXNkaWQgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OworCQlicmVhazsKKwljYXNlIDY6CisJCXNkaWQgPSBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNTsKKwkJZXJyID0gIW9kZF9wYXJpdHkocFswXSkgfHwgIW9kZF9wYXJpdHkocFsxXSk7CisJCWJyZWFrOworCWNhc2UgOToKKwkJc2RpZCA9IFY0TDJfU0xJQ0VEX1ZQUzsKKwkJaWYgKGRlY29kZV92cHMocCwgcCkgIT0gMCkKIAkJCWVyciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCXZiaS0+dHlwZSA9IGVyciA/IDAgOiBpZDI7Ci0JCXZiaS0+bGluZSA9IGVyciA/IDAgOiBsOwotCQl2YmktPmlzX3NlY29uZF9maWVsZCA9IGVyciA/IDAgOiAoaWQxID09IDB4NTUpOwotCQl2YmktPnAgPSBwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzZGlkID0gMDsKKwkJZXJyID0gMTsKIAkJYnJlYWs7CiAJfQotCX0KIAorCXZiaS0+dHlwZSA9IGVyciA/IDAgOiBzZGlkOworCXZiaS0+bGluZSA9IGVyciA/IDAgOiBsOworCXZiaS0+aXNfc2Vjb25kX2ZpZWxkID0gZXJyID8gMCA6IChkaWQgPT0gc2xpY2VkX3ZiaV9kaWRbMV0pOworCXZiaS0+cCA9IHA7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYwppbmRleCBlMjc0MDQzLi45YmMyMjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmMKQEAgLTUxLDEyICs1MSwxMiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBjeDE4X2NhcmQgY3gxOF9jYXJkX2h2cjE2MDBfZXNtdCA9IHsKIAkudHlwZSA9IENYMThfQ0FSRF9IVlJfMTYwMF9FU01ULAogCS5uYW1lID0gIkhhdXBwYXVnZSBIVlItMTYwMCIsCi0JLmNvbW1lbnQgPSAiUmF3IFZCSSBzdXBwb3J0ZWQ7IFNsaWNlZCBWQkkgaXMgbm90IHlldCBzdXBwb3J0ZWRcbiIsCisJLmNvbW1lbnQgPSAiU2ltdWx0YW5lb3VzIERpZ2l0YWwgYW5kIEFuYWxvZyBUViBjYXB0dXJlIHN1cHBvcnRlZFxuIiwKIAkudjRsMl9jYXBhYmlsaXRpZXMgPSBDWDE4X0NBUF9FTkNPREVSLAotCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV19DWDIzNDE4LAorCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV180MThfQVYsCiAJLmh3X211eGVyID0gQ1gxOF9IV19DUzUzNDUsCi0JLmh3X2FsbCA9IENYMThfSFdfVFZFRVBST00gfCBDWDE4X0hXX1RVTkVSIHwKLQkJICBDWDE4X0hXX0NTNTM0NSB8IENYMThfSFdfRFZCLAorCS5od19hbGwgPSBDWDE4X0hXX1RWRUVQUk9NIHwgQ1gxOF9IV180MThfQVYgfCBDWDE4X0hXX1RVTkVSIHwKKwkJICBDWDE4X0hXX0NTNTM0NSB8IENYMThfSFdfRFZCIHwgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwsCiAJLnZpZGVvX2lucHV0cyA9IHsKIAkJeyBDWDE4X0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgQ1gxOF9BVl9DT01QT1NJVEU3IH0sCiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsIENYMThfQVZfU1ZJREVPMSAgICB9LApAQCAtOTcsMTIgKzk3LDEyIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGN4MThfY2FyZCBjeDE4X2NhcmRfaHZyMTYwMF9zYW1zdW5nID0gewogCS50eXBlID0gQ1gxOF9DQVJEX0hWUl8xNjAwX1NBTVNVTkcsCiAJLm5hbWUgPSAiSGF1cHBhdWdlIEhWUi0xNjAwIChQcmVwcm9kdWN0aW9uKSIsCi0JLmNvbW1lbnQgPSAiUmF3IFZCSSBzdXBwb3J0ZWQ7IFNsaWNlZCBWQkkgaXMgbm90IHlldCBzdXBwb3J0ZWRcbiIsCisJLmNvbW1lbnQgPSAiU2ltdWx0YW5lb3VzIERpZ2l0YWwgYW5kIEFuYWxvZyBUViBjYXB0dXJlIHN1cHBvcnRlZFxuIiwKIAkudjRsMl9jYXBhYmlsaXRpZXMgPSBDWDE4X0NBUF9FTkNPREVSLAotCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV19DWDIzNDE4LAorCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV180MThfQVYsCiAJLmh3X211eGVyID0gQ1gxOF9IV19DUzUzNDUsCi0JLmh3X2FsbCA9IENYMThfSFdfVFZFRVBST00gfCBDWDE4X0hXX1RVTkVSIHwKLQkJICBDWDE4X0hXX0NTNTM0NSB8IENYMThfSFdfRFZCLAorCS5od19hbGwgPSBDWDE4X0hXX1RWRUVQUk9NIHwgQ1gxOF9IV180MThfQVYgfCBDWDE4X0hXX1RVTkVSIHwKKwkJICBDWDE4X0hXX0NTNTM0NSB8IENYMThfSFdfRFZCIHwgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwsCiAJLnZpZGVvX2lucHV0cyA9IHsKIAkJeyBDWDE4X0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgQ1gxOF9BVl9DT01QT1NJVEU3IH0sCiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsIENYMThfQVZfU1ZJREVPMSAgICB9LApAQCAtMTUyLDEwICsxNTIsMTAgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3gxOF9jYXJkIGN4MThfY2FyZF9oOTAwID0gewogCS50eXBlID0gQ1gxOF9DQVJEX0NPTVBST19IOTAwLAogCS5uYW1lID0gIkNvbXBybyBWaWRlb01hdGUgSDkwMCIsCi0JLmNvbW1lbnQgPSAiUmF3IFZCSSBzdXBwb3J0ZWQ7IFNsaWNlZCBWQkkgaXMgbm90IHlldCBzdXBwb3J0ZWRcbiIsCisJLmNvbW1lbnQgPSAiQW5hbG9nIFRWIGNhcHR1cmUgc3VwcG9ydGVkXG4iLAogCS52NGwyX2NhcGFiaWxpdGllcyA9IENYMThfQ0FQX0VOQ09ERVIsCi0JLmh3X2F1ZGlvX2N0cmwgPSBDWDE4X0hXX0NYMjM0MTgsCi0JLmh3X2FsbCA9IENYMThfSFdfVFVORVIsCisJLmh3X2F1ZGlvX2N0cmwgPSBDWDE4X0hXXzQxOF9BViwKKwkuaHdfYWxsID0gQ1gxOF9IV180MThfQVYgfCBDWDE4X0hXX1RVTkVSIHwgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwsCiAJLnZpZGVvX2lucHV0cyA9IHsKIAkJeyBDWDE4X0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgQ1gxOF9BVl9DT01QT1NJVEUyIH0sCiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsCkBAIC0yMDEsOCArMjAxLDggQEAKIAkubmFtZSA9ICJZdWFuIE1QQzcxOCIsCiAJLmNvbW1lbnQgPSAiQW5hbG9nIHZpZGVvIGNhcHR1cmUgd29ya3M7IHNvbWUgYXVkaW8gbGluZSBpbiBtYXkgbm90LlxuIiwKIAkudjRsMl9jYXBhYmlsaXRpZXMgPSBDWDE4X0NBUF9FTkNPREVSLAotCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV19DWDIzNDE4LAotCS5od19hbGwgPSBDWDE4X0hXX1RVTkVSLAorCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV180MThfQVYsCisJLmh3X2FsbCA9IENYMThfSFdfNDE4X0FWIHwgQ1gxOF9IV19UVU5FUiB8IENYMThfSFdfR1BJT19SRVNFVF9DVFJMLAogCS52aWRlb19pbnB1dHMgPSB7CiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1ZJRF9UVU5FUiwgIDAsIENYMThfQVZfQ09NUE9TSVRFMiB9LAogCQl7IENYMThfQ0FSRF9JTlBVVF9TVklERU8xLCAgICAxLApAQCAtMjQ5LDExICsyNDksMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3gxOF9jYXJkIGN4MThfY2FyZF9jbnh0X3JhcHRvcl9wYWwgPSB7CiAJLnR5cGUgPSBDWDE4X0NBUkRfQ05YVF9SQVBUT1JfUEFMLAogCS5uYW1lID0gIkNvbmV4YW50IFJhcHRvciBQQUwvU0VDQU0iLAotCS5jb21tZW50ID0gIlJhdyBWQkkgc3VwcG9ydGVkOyBTbGljZWQgVkJJIGlzIG5vdCB5ZXQgc3VwcG9ydGVkXG4iLAorCS5jb21tZW50ID0gIkFuYWxvZyBUViBjYXB0dXJlIHN1cHBvcnRlZFxuIiwKIAkudjRsMl9jYXBhYmlsaXRpZXMgPSBDWDE4X0NBUF9FTkNPREVSLAotCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV19DWDIzNDE4LAotCS5od19tdXhlciA9IENYMThfSFdfR1BJTywKLQkuaHdfYWxsID0gQ1gxOF9IV19UVU5FUiB8IENYMThfSFdfR1BJTywKKwkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfNDE4X0FWLAorCS5od19tdXhlciA9IENYMThfSFdfR1BJT19NVVgsCisJLmh3X2FsbCA9IENYMThfSFdfNDE4X0FWIHwgQ1gxOF9IV19UVU5FUiB8IENYMThfSFdfR1BJT19NVVgsCiAJLnZpZGVvX2lucHV0cyA9IHsKIAkJeyBDWDE4X0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgQ1gxOF9BVl9DT01QT1NJVEUyIH0sCiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsCkBAIC0zMDYsOCArMzA2LDggQEAKIAkuY29tbWVudCA9ICJFeHBlcmltZW50ZXJzIGFuZCBwaG90b3MgbmVlZGVkIGZvciBkZXZpY2UgdG8gd29yayB3ZWxsLlxuIgogCQkgICJcdFRvIGhlbHAsIG1haWwgdGhlIGl2dHYtZGV2ZWwgbGlzdCAod3d3Lml2dHZkcml2ZXIub3JnKS5cbiIsCiAJLnY0bDJfY2FwYWJpbGl0aWVzID0gQ1gxOF9DQVBfRU5DT0RFUiwKLQkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfQ1gyMzQxOCwKLQkuaHdfYWxsID0gQ1gxOF9IV19UVU5FUiwKKwkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfNDE4X0FWLAorCS5od19hbGwgPSBDWDE4X0hXXzQxOF9BViB8IENYMThfSFdfVFVORVIgfCBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCwKIAkudmlkZW9faW5wdXRzID0gewogCQl7IENYMThfQ0FSRF9JTlBVVF9WSURfVFVORVIsICAwLCBDWDE4X0FWX0NPTVBPU0lURTYgfSwKIAkJeyBDWDE4X0NBUkRfSU5QVVRfU1ZJREVPMSwgICAgMSwKQEAgLTMzOSwxOSArMzM5LDIxIEBACiAvKiBMZWFkdGVrIFdpbkZhc3QgUFZSMjEwMCAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGN4MThfY2FyZF9wY2lfaW5mbyBjeDE4X3BjaV9sZWFkdGVrX3B2cjIxMDBbXSA9IHsKLQl7IFBDSV9ERVZJQ0VfSURfQ1gyMzQxOCwgQ1gxOF9QQ0lfSURfTEVBRFRFSywgMHg2ZjI3IH0sCisJeyBQQ0lfREVWSUNFX0lEX0NYMjM0MTgsIENYMThfUENJX0lEX0xFQURURUssIDB4NmYyNyB9LCAvKiBQVlIyMTAwICAgKi8KKwl7IFBDSV9ERVZJQ0VfSURfQ1gyMzQxOCwgQ1gxOF9QQ0lfSURfTEVBRFRFSywgMHg2NjkwIH0sIC8qIERWUjMxMDAgSCAqLwogCXsgMCwgMCwgMCB9CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGN4MThfY2FyZCBjeDE4X2NhcmRfbGVhZHRla19wdnIyMTAwID0gewogCS50eXBlID0gQ1gxOF9DQVJEX0xFQURURUtfUFZSMjEwMCwKLQkubmFtZSA9ICJMZWFkdGVrIFdpbkZhc3QgUFZSMjEwMCIsCisJLm5hbWUgPSAiTGVhZHRlayBXaW5GYXN0IFBWUjIxMDAvRFZSMzEwMCBIIiwKIAkuY29tbWVudCA9ICJFeHBlcmltZW50ZXJzIGFuZCBwaG90b3MgbmVlZGVkIGZvciBkZXZpY2UgdG8gd29yayB3ZWxsLlxuIgogCQkgICJcdFRvIGhlbHAsIG1haWwgdGhlIGl2dHYtZGV2ZWwgbGlzdCAod3d3Lml2dHZkcml2ZXIub3JnKS5cbiIsCiAJLnY0bDJfY2FwYWJpbGl0aWVzID0gQ1gxOF9DQVBfRU5DT0RFUiwKLQkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfQ1gyMzQxOCwKLQkuaHdfbXV4ZXIgPSBDWDE4X0hXX0dQSU8sCi0JLmh3X2FsbCA9IENYMThfSFdfVFVORVIgfCBDWDE4X0hXX0dQSU8sCisJLmh3X2F1ZGlvX2N0cmwgPSBDWDE4X0hXXzQxOF9BViwKKwkuaHdfbXV4ZXIgPSBDWDE4X0hXX0dQSU9fTVVYLAorCS5od19hbGwgPSBDWDE4X0hXXzQxOF9BViB8IENYMThfSFdfVFVORVIgfCBDWDE4X0hXX0dQSU9fTVVYIHwKKwkJICBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCwKIAkudmlkZW9faW5wdXRzID0gewogCQl7IENYMThfQ0FSRF9JTlBVVF9WSURfVFVORVIsICAwLCBDWDE4X0FWX0NPTVBPU0lURTIgfSwKIAkJeyBDWDE4X0NBUkRfSU5QVVRfU1ZJREVPMSwgICAgMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5oCmluZGV4IDZmYTdiY2IuLjNjNTUyYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuaApAQCAtMjIsMTIgKzIyLDEzIEBACiAgKi8KIAogLyogaGFyZHdhcmUgZmxhZ3MgKi8KLSNkZWZpbmUgQ1gxOF9IV19UVU5FUiAgICAgKDEgPDwgMCkKLSNkZWZpbmUgQ1gxOF9IV19UVkVFUFJPTSAgKDEgPDwgMSkKLSNkZWZpbmUgQ1gxOF9IV19DUzUzNDUgICAgKDEgPDwgMikKLSNkZWZpbmUgQ1gxOF9IV19HUElPICAgICAgKDEgPDwgMykKLSNkZWZpbmUgQ1gxOF9IV19DWDIzNDE4ICAgKDEgPDwgNCkKLSNkZWZpbmUgQ1gxOF9IV19EVkIgICAJICAoMSA8PCA1KQorI2RlZmluZSBDWDE4X0hXX1RVTkVSCQkoMSA8PCAwKQorI2RlZmluZSBDWDE4X0hXX1RWRUVQUk9NCSgxIDw8IDEpCisjZGVmaW5lIENYMThfSFdfQ1M1MzQ1CQkoMSA8PCAyKQorI2RlZmluZSBDWDE4X0hXX0RWQgkJKDEgPDwgMykKKyNkZWZpbmUgQ1gxOF9IV180MThfQVYJCSgxIDw8IDQpCisjZGVmaW5lIENYMThfSFdfR1BJT19NVVgJKDEgPDwgNSkKKyNkZWZpbmUgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwJKDEgPDwgNikKIAogLyogdmlkZW8gaW5wdXRzICovCiAjZGVmaW5lCUNYMThfQ0FSRF9JTlBVVF9WSURfVFVORVIJMQpAQCAtNDksOCArNTAsNyBAQAogLyogVjRMMiBjYXBhYmlsaXR5IGFsaWFzZXMgKi8KICNkZWZpbmUgQ1gxOF9DQVBfRU5DT0RFUiAoVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1RVTkVSIHwgXAogCQkJICBWNEwyX0NBUF9BVURJTyB8IFY0TDJfQ0FQX1JFQURXUklURSB8IFwKLQkJCSAgVjRMMl9DQVBfVkJJX0NBUFRVUkUpCi0vKiB8IFY0TDJfQ0FQX1NMSUNFRF9WQklfQ0FQVFVSRSkgbm90IHlldCAqLworCQkJICBWNEwyX0NBUF9WQklfQ0FQVFVSRSB8IFY0TDJfQ0FQX1NMSUNFRF9WQklfQ0FQVFVSRSkKIAogc3RydWN0IGN4MThfY2FyZF92aWRlb19pbnB1dCB7CiAJdTggIHZpZGVvX3R5cGU7IAkvKiB2aWRlbyBpbnB1dCB0eXBlICovCkBAIC0xMjIsNyArMTIyLDcgQEAKIAljaGFyICpjb21tZW50OwogCXUzMiB2NGwyX2NhcGFiaWxpdGllczsKIAl1MzIgaHdfYXVkaW9fY3RybDsJLyogaGFyZHdhcmUgdXNlZCBmb3IgdGhlIFY0TDIgY29udHJvbHMgKG9ubHkKLQkJCQkgICAxIGRldiBhbGxvd2VkKSAqLworCQkJCSAgIDEgZGV2IGFsbG93ZWQgY3VycmVudGx5KSAqLwogCXUzMiBod19tdXhlcjsJCS8qIGhhcmR3YXJlIHVzZWQgdG8gbXVsdGlwbGV4IGF1ZGlvIGlucHV0ICovCiAJdTMyIGh3X2FsbDsJCS8qIGFsbCBoYXJkd2FyZSB1c2VkIGJ5IHRoZSBib2FyZCAqLwogCXN0cnVjdCBjeDE4X2NhcmRfdmlkZW9faW5wdXQgdmlkZW9faW5wdXRzW0NYMThfQ0FSRF9NQVhfVklERU9fSU5QVVRTXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNvbnRyb2xzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jb250cm9scy5jCmluZGV4IDE3ZWRmMzAuLjgyZmMyZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNvbnRyb2xzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY29udHJvbHMuYwpAQCAtMjIsMTQgKzIyLDEzIEBACiAgKi8KIAogI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCi0jaW5jbHVkZSAiY3gxOC1hdi1jb3JlLmgiCiAjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgogI2luY2x1ZGUgImN4MTgtaW9jdGwuaCIKICNpbmNsdWRlICJjeDE4LWF1ZGlvLmgiCi0jaW5jbHVkZSAiY3gxOC1pMmMuaCIKICNpbmNsdWRlICJjeDE4LW1haWxib3guaCIKICNpbmNsdWRlICJjeDE4LWNvbnRyb2xzLmgiCiAKKy8qIE11c3QgYmUgc29ydGVkIGZyb20gbG93IHRvIGhpZ2ggY29udHJvbCBJRCEgKi8KIHN0YXRpYyBjb25zdCB1MzIgdXNlcl9jdHJsc1tdID0gewogCVY0TDJfQ0lEX1VTRVJfQ0xBU1MsCiAJVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTY2LDcgKzY1LDcgQEAKIAljYXNlIFY0TDJfQ0lEX0hVRToKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJaWYgKGN4MThfYXZfY21kKGN4LCBWSURJT0NfUVVFUllDVFJMLCBxY3RybCkpCisJCWlmICh2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgcXVlcnljdHJsLCBxY3RybCkpCiAJCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQ7CiAJCXJldHVybiAwOwogCkBAIC03Niw3ICs3NSw3IEBACiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgogCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6Ci0JCWlmIChjeDE4X2kyY19odyhjeCwgY3gtPmNhcmQtPmh3X2F1ZGlvX2N0cmwsIFZJRElPQ19RVUVSWUNUUkwsIHFjdHJsKSkKKwkJaWYgKHY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCBjb3JlLCBxdWVyeWN0cmwsIHFjdHJsKSkKIAkJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRDsKIAkJcmV0dXJuIDA7CiAKQEAgLTEyNSw3ICsxMjQsNyBAQAogCWNhc2UgVjRMMl9DSURfSFVFOgogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQlyZXR1cm4gY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19TX0NUUkwsIHZjdHJsKTsKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCBjb3JlLCBzX2N0cmwsIHZjdHJsKTsKIAogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTEzMyw3ICsxMzIsNyBAQAogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgotCQlyZXR1cm4gY3gxOF9pMmNfaHcoY3gsIGN4LT5jYXJkLT5od19hdWRpb19jdHJsLCBWSURJT0NfU19DVFJMLCB2Y3RybCk7CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgc19jdHJsLCB2Y3RybCk7CiAKIAlkZWZhdWx0OgogCQlDWDE4X0RFQlVHX0lPQ1RMKCJpbnZhbGlkIGNvbnRyb2wgMHgleFxuIiwgdmN0cmwtPmlkKTsKQEAgLTE1MCw3ICsxNDksNyBAQAogCWNhc2UgVjRMMl9DSURfSFVFOgogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQlyZXR1cm4gY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19HX0NUUkwsIHZjdHJsKTsKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCBjb3JlLCBnX2N0cmwsIHZjdHJsKTsKIAogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTE1OCw3ICsxNTcsOCBAQAogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgotCQlyZXR1cm4gY3gxOF9pMmNfaHcoY3gsIGN4LT5jYXJkLT5od19hdWRpb19jdHJsLCBWSURJT0NfR19DVFJMLCB2Y3RybCk7CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgZ19jdHJsLCB2Y3RybCk7CisKIAlkZWZhdWx0OgogCQlDWDE4X0RFQlVHX0lPQ1RMKCJpbnZhbGlkIGNvbnRyb2wgMHgleFxuIiwgdmN0cmwtPmlkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNjYsMzggKzE2Niw1NyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MThfc2V0dXBfdmJpX2ZtdChzdHJ1Y3QgY3gxOCAqY3gsIGVudW0gdjRsMl9tcGVnX3N0cmVhbV92YmlfZm10IGZtdCkKK3N0YXRpYyBpbnQgY3gxOF9zZXR1cF92YmlfZm10KHN0cnVjdCBjeDE4ICpjeCwKKwkJCSAgICAgIGVudW0gdjRsMl9tcGVnX3N0cmVhbV92YmlfZm10IGZtdCwKKwkJCSAgICAgIGVudW0gdjRsMl9tcGVnX3N0cmVhbV90eXBlIHR5cGUpCiB7CiAJaWYgKCEoY3gtPnY0bDJfY2FwICYgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9DQVBUVVJFKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZykgPiAwKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JLyogRmlyc3QgdHJ5IHRvIGFsbG9jYXRlIHNsaWNlZCBWQkkgYnVmZmVycyBpZiBuZWVkZWQuICovCi0JaWYgKGZtdCAmJiBjeC0+dmJpLnNsaWNlZF9tcGVnX2RhdGFbMF0gPT0gTlVMTCkgeworCWlmIChmbXQgIT0gVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX0lWVFYgfHwKKwkgICAgdHlwZSAhPSBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfUFMpIHsKKwkJLyogV2UgZG9uJ3QgZG8gVkJJIGluc2VydGlvbiBhc2lkZSBmcm9tIElWVFYgZm9ybWF0IGluIGEgUFMgKi8KKwkJY3gtPnZiaS5pbnNlcnRfbXBlZyA9IFY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9OT05FOworCQlDWDE4X0RFQlVHX0lORk8oImRpc2FibGVkIGluc2VydGlvbiBvZiBzbGljZWQgVkJJIGRhdGEgaW50byAiCisJCQkJInRoZSBNUEVHIHN0cmVhbVxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIEFsbG9jYXRlIHNsaWNlZCBWQkkgYnVmZmVycyBpZiBuZWVkZWQuICovCisJaWYgKGN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVswXSA9PSBOVUxMKSB7CiAJCWludCBpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBDWDE4X1ZCSV9GUkFNRVM7IGkrKykgewotCQkJLyogWXVjaywgaGFyZGNvZGVkLiBOZWVkcyB0byBiZSBhIGRlZmluZSAqLwotCQkJY3gtPnZiaS5zbGljZWRfbXBlZ19kYXRhW2ldID0ga21hbGxvYygyMDQ5LCBHRlBfS0VSTkVMKTsKKwkJCWN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSA9CisJCQkgICAgICAga21hbGxvYyhDWDE4X1NMSUNFRF9NUEVHX0RBVEFfQlVGU1osIEdGUF9LRVJORUwpOwogCQkJaWYgKGN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSA9PSBOVUxMKSB7CiAJCQkJd2hpbGUgKC0taSA+PSAwKSB7CiAJCQkJCWtmcmVlKGN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSk7CiAJCQkJCWN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSA9IE5VTEw7CiAJCQkJfQorCQkJCWN4LT52YmkuaW5zZXJ0X21wZWcgPQorCQkJCQkJICBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORTsKKwkJCQlDWDE4X1dBUk4oIlVuYWJsZSB0byBhbGxvY2F0ZSBidWZmZXJzIGZvciAiCisJCQkJCSAgInNsaWNlZCBWQkkgZGF0YSBpbnNlcnRpb25cbiIpOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQogCQl9CiAJfQogCiAJY3gtPnZiaS5pbnNlcnRfbXBlZyA9IGZtdDsKKwlDWDE4X0RFQlVHX0lORk8oImVuYWJsZWQgaW5zZXJ0aW9uIG9mIHNsaWNlZCBWQkkgZGF0YSBpbnRvIHRoZSBNUEVHIFBTLCIKKwkJCSJ3aGVuIHNsaWNlZCBWQkkgaXMgZW5hYmxlZFxuIik7CiAKLQlpZiAoY3gtPnZiaS5pbnNlcnRfbXBlZyA9PSAwKQotCQlyZXR1cm4gMDsKLQkvKiBOZWVkIHNsaWNlZCBkYXRhIGZvciBtcGVnIGluc2VydGlvbiAqLworCS8qCisJICogSWYgb3VyIGN1cnJlbnQgc2V0dGluZ3MgaGF2ZSBubyBsaW5lcyBzZXQgZm9yIGNhcHR1cmUsIHN0b3JlIGEgdmFsaWQsCisJICogZGVmYXVsdCBzZXQgb2Ygc2VydmljZSBsaW5lcyB0byBjYXB0dXJlLCBpbiBvdXIgY3VycmVudCBzZXR0aW5ncy4KKwkgKi8KIAlpZiAoY3gxOF9nZXRfc2VydmljZV9zZXQoY3gtPnZiaS5zbGljZWRfaW4pID09IDApIHsKIAkJaWYgKGN4LT5pc182MGh6KQotCQkJY3gtPnZiaS5zbGljZWRfaW4tPnNlcnZpY2Vfc2V0ID0gVjRMMl9TTElDRURfQ0FQVElPTl81MjU7CisJCQljeC0+dmJpLnNsaWNlZF9pbi0+c2VydmljZV9zZXQgPQorCQkJCQkJCVY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OwogCQllbHNlCiAJCQljeC0+dmJpLnNsaWNlZF9pbi0+c2VydmljZV9zZXQgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OwogCQljeDE4X2V4cGFuZF9zZXJ2aWNlX3NldChjeC0+dmJpLnNsaWNlZF9pbiwgY3gtPmlzXzUwaHopOwpAQCAtMjU5LDEwICsyNzgsMTIgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKGMtPmN0cmxfY2xhc3MgPT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpIHsKKwkJc3RhdGljIHUzMiBmcmVxc1szXSA9IHsgNDQxMDAsIDQ4MDAwLCAzMjAwMCB9OwogCQlzdHJ1Y3QgY3gxOF9hcGlfZnVuY19wcml2YXRlIHByaXY7CiAJCXN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zIHAgPSBjeC0+cGFyYW1zOwogCQlpbnQgZXJyID0gY3gyMzQxeF9leHRfY3RybHMoJnAsIGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZyksCiAJCQkJCQljLCBWSURJT0NfU19FWFRfQ1RSTFMpOworCQl1bnNpZ25lZCBpbnQgaWR4OwogCiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwpAQCAtMjc3LDE2ICsyOTgsMjMgQEAKIAkJCWZtdC5mbXQucGl4LndpZHRoID0gY3gtPnBhcmFtcy53aWR0aAogCQkJCQkJLyAoaXNfbXBlZzEgPyAyIDogMSk7CiAJCQlmbXQuZm10LnBpeC5oZWlnaHQgPSBjeC0+cGFyYW1zLmhlaWdodDsKLQkJCWN4MThfYXZfY21kKGN4LCBWSURJT0NfU19GTVQsICZmbXQpOworCQkJdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIHZpZGVvLCBzX2ZtdCwgJmZtdCk7CiAJCX0KIAkJcHJpdi5jeCA9IGN4OwogCQlwcml2LnMgPSAmY3gtPnN0cmVhbXNbaWQtPnR5cGVdOwogCQllcnIgPSBjeDIzNDF4X3VwZGF0ZSgmcHJpdiwgY3gxOF9hcGlfZnVuYywgJmN4LT5wYXJhbXMsICZwKTsKLQkJaWYgKCFlcnIgJiYgY3gtPnBhcmFtcy5zdHJlYW1fdmJpX2ZtdCAhPSBwLnN0cmVhbV92YmlfZm10KQotCQkJZXJyID0gY3gxOF9zZXR1cF92YmlfZm10KGN4LCBwLnN0cmVhbV92YmlfZm10KTsKKwkJaWYgKCFlcnIgJiYKKwkJICAgIChjeC0+cGFyYW1zLnN0cmVhbV92YmlfZm10ICE9IHAuc3RyZWFtX3ZiaV9mbXQgfHwKKwkJICAgICBjeC0+cGFyYW1zLnN0cmVhbV90eXBlICE9IHAuc3RyZWFtX3R5cGUpKQorCQkJZXJyID0gY3gxOF9zZXR1cF92YmlfZm10KGN4LCBwLnN0cmVhbV92YmlfZm10LAorCQkJCQkJIHAuc3RyZWFtX3R5cGUpOwogCQljeC0+cGFyYW1zID0gcDsKIAkJY3gtPmR1YWx3YXRjaF9zdGVyZW9fbW9kZSA9IHAuYXVkaW9fcHJvcGVydGllcyAmIDB4MDMwMDsKLQkJY3gxOF9hdWRpb19zZXRfYXVkaW9fY2xvY2tfZnJlcShjeCwgcC5hdWRpb19wcm9wZXJ0aWVzICYgMHgwMyk7CisJCWlkeCA9IHAuYXVkaW9fcHJvcGVydGllcyAmIDB4MDM7CisJCS8qIFRoZSBhdWRpbyBjbG9jayBvZiB0aGUgZGlnaXRpemVyIG11c3QgbWF0Y2ggdGhlIGNvZGVjIHNhbXBsZQorCQkgICByYXRlIG90aGVyd2lzZSB5b3UgZ2V0IHNvbWUgdmVyeSBzdHJhbmdlIGVmZmVjdHMuICovCisJCWlmIChpZHggPCBzaXplb2YoZnJlcXMpKQorCQkJY3gxOF9jYWxsX2FsbChjeCwgYXVkaW8sIHNfY2xvY2tfZnJlcSwgZnJlcXNbaWR4XSk7CiAJCXJldHVybiBlcnI7CiAJfQogCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYwppbmRleCBmNTBjZjIxLi4yMTBjNjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYwpAQCAtMzksMTAgKzM5LDYgQEAKIAogI2luY2x1ZGUgPG1lZGlhL3R2ZWVwcm9tLmg+CiAKLQotLyogdmFyIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBhcnJheSBlbGVtZW50cyBpbiB1c2UgKi8KLWludCBjeDE4X2NhcmRzX2FjdGl2ZTsKLQogLyogSWYgeW91IGhhdmUgYWxyZWFkeSBYIHY0bCBjYXJkcywgdGhlbiBzZXQgdGhpcyB0byBYLiBUaGlzIHdheQogICAgdGhlIGRldmljZSBudW1iZXJzIHN0YXkgbWF0Y2hlZC4gRXhhbXBsZTogeW91IGhhdmUgYSBXaW5UViBjYXJkCiAgICB3aXRob3V0IHJhZGlvIGFuZCBhIENvbXBybyBIOTAwIHdpdGguIE5vcm1hbGx5IHRoaXMgd291bGQgZ2l2ZSBhCkBAIC01MCwxMiArNDYsNiBAQAogICAgc2V0dGluZyB0aGlzIHRvIDEgeW91IGVuc3VyZSB0aGF0IHJhZGlvMCBpcyBub3cgYWxzbyByYWRpbzEuICovCiBpbnQgY3gxOF9maXJzdF9taW5vcjsKIAotLyogTWFzdGVyIHZhcmlhYmxlIGZvciBhbGwgY3gxOCBpbmZvICovCi1zdHJ1Y3QgY3gxOCAqY3gxOF9jYXJkc1tDWDE4X01BWF9DQVJEU107Ci0KLS8qIFByb3RlY3RzIGN4MThfY2FyZHNfYWN0aXZlICovCi1ERUZJTkVfU1BJTkxPQ0soY3gxOF9jYXJkc19sb2NrKTsKLQogLyogYWRkIHlvdXIgcmV2aXNpb24gYW5kIHdoYXRub3QgaGVyZSAqLwogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGN4MThfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJe1BDSV9WRU5ET1JfSURfQ1gsIFBDSV9ERVZJQ0VfSURfQ1gyMzQxOCwKQEAgLTY1LDYgKzU1LDggQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGN4MThfcGNpX3RibCk7CiAKK3N0YXRpYyBhdG9taWNfdCBjeDE4X2luc3RhbmNlID0gQVRPTUlDX0lOSVQoMCk7CisKIC8qIFBhcmFtZXRlciBkZWNsYXJhdGlvbnMgKi8KIHN0YXRpYyBpbnQgY2FyZHR5cGVbQ1gxOF9NQVhfQ0FSRFNdOwogc3RhdGljIGludCB0dW5lcltDWDE4X01BWF9DQVJEU10gPSB7IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKQEAgLTE1OSw3ICsxNTEsNyBAQAogCQkgIlx0XHRcdCA0ID0gWXVhbiBNUEM3MThcbiIKIAkJICJcdFx0XHQgNSA9IENvbmV4YW50IFJhcHRvciBQQUwvU0VDQU1cbiIKIAkJICJcdFx0XHQgNiA9IFRvc2hpYmEgUW9zbWlvIERWQi1UL0FuYWxvZ1xuIgotCQkgIlx0XHRcdCA3ID0gTGVhZHRlayBXaW5GYXN0IFBWUjIxMDBcbiIKKwkJICJcdFx0XHQgNyA9IExlYWR0ZWsgV2luRmFzdCBQVlIyMTAwL0RWUjMxMDAgSFxuIgogCQkgIlx0XHRcdCAwID0gQXV0b2RldGVjdCAoZGVmYXVsdClcbiIKIAkJICJcdFx0XHQtMSA9IElnbm9yZSB0aGlzIGNhcmRcblx0XHQiKTsKIE1PRFVMRV9QQVJNX0RFU0MocGFsLCAiU2V0IFBBTCBzdGFuZGFyZDogQiwgRywgSCwgRCwgSywgSSwgTSwgTiwgTmMsIDYwIik7CkBAIC0yNzcsMTEgKzI2OSwxNiBAQAogLyogSGF1cHBhdWdlIGNhcmQ/IGdldCB2YWx1ZXMgZnJvbSB0dmVlcHJvbSAqLwogdm9pZCBjeDE4X3JlYWRfZWVwcm9tKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHR2ZWVwcm9tICp0dikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCBjOwogCXU4IGVlZGF0YVsyNTZdOwogCi0JY3gtPmkyY19jbGllbnRbMF0uYWRkciA9IDB4QTAgPj4gMTsKLQl0dmVlcHJvbV9yZWFkKCZjeC0+aTJjX2NsaWVudFswXSwgZWVkYXRhLCBzaXplb2YoZWVkYXRhKSk7Ci0JdHZlZXByb21faGF1cHBhdWdlX2FuYWxvZygmY3gtPmkyY19jbGllbnRbMF0sIHR2LCBlZWRhdGEpOworCW1lbXNldCgmYywgMCwgc2l6ZW9mKGMpKTsKKwlzdHJsY3B5KGMubmFtZSwgImN4MTggdHZlZXByb20gdG1wIiwgc2l6ZW9mKGMubmFtZSkpOworCWMuYWRhcHRlciA9ICZjeC0+aTJjX2FkYXBbMF07CisJYy5hZGRyID0gMHhBMCA+PiAxOworCisJdHZlZXByb21fcmVhZCgmYywgZWVkYXRhLCBzaXplb2YoZWVkYXRhKSk7CisJdHZlZXByb21faGF1cHBhdWdlX2FuYWxvZygmYywgdHYsIGVlZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIGN4MThfcHJvY2Vzc19lZXByb20oc3RydWN0IGN4MTggKmN4KQpAQCAtNDQ4LDM0ICs0NDUsMzggQEAKIAljeC0+c3RyZWFtX2J1Zl9zaXplW0NYMThfRU5DX1NUUkVBTV9UWVBFX01QR10gPSBlbmNfbXBnX2J1ZnNpemU7CiAJY3gtPnN0cmVhbV9idWZfc2l6ZVtDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhdID0gZW5jX2lkeF9idWZzaXplOwogCWN4LT5zdHJlYW1fYnVmX3NpemVbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfWVVWXSA9IGVuY195dXZfYnVmc2l6ZTsKLQljeC0+c3RyZWFtX2J1Zl9zaXplW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV0gPSAwOyAvKiBjb21wdXRlZCBsYXRlciAqLworCWN4LT5zdHJlYW1fYnVmX3NpemVbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXSA9IHZiaV9hY3RpdmVfc2FtcGxlcyAqIDM2OwogCWN4LT5zdHJlYW1fYnVmX3NpemVbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfUENNXSA9IGVuY19wY21fYnVmc2l6ZTsKIAljeC0+c3RyZWFtX2J1Zl9zaXplW0NYMThfRU5DX1NUUkVBTV9UWVBFX1JBRF0gPSAwOyAvKiBjb250cm9sIG5vIGRhdGEgKi8KIAotCS8qIEV4Y2VwdCBmb3IgVkJJIGVuc3VyZSBzdHJlYW1fYnVmZmVycyAmIHN0cmVhbV9idWZfc2l6ZSBhcmUgdmFsaWQgKi8KKwkvKiBFbnN1cmUgc3RyZWFtX2J1ZmZlcnMgJiBzdHJlYW1fYnVmX3NpemUgYXJlIHZhbGlkICovCiAJZm9yIChpID0gMDsgaSA8IENYMThfTUFYX1NUUkVBTVM7IGkrKykgewotCQkvKiBVc2VyIHNhaWQgdG8gdXNlIDAgYnVmZmVycyAqLwotCQlpZiAoY3gtPnN0cmVhbV9idWZmZXJzW2ldID09IDApIHsKLQkJCWN4LT5vcHRpb25zLm1lZ2FieXRlc1tpXSA9IDA7Ci0JCQljeC0+c3RyZWFtX2J1Zl9zaXplW2ldID0gMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCS8qIFVzZXIgc2FpZCB0byB1c2UgMCBNQiB0b3RhbCAqLwotCQlpZiAoY3gtPm9wdGlvbnMubWVnYWJ5dGVzW2ldIDw9IDApIHsKKwkJaWYgKGN4LT5zdHJlYW1fYnVmZmVyc1tpXSA9PSAwIHx8ICAgICAvKiBVc2VyIHNhaWQgMCBidWZmZXJzICovCisJCSAgICBjeC0+b3B0aW9ucy5tZWdhYnl0ZXNbaV0gPD0gMCB8fCAgLyogVXNlciBzYWlkIDAgTUIgdG90YWwgKi8KKwkJICAgIGN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPD0gMCkgeyAgICAvKiBVc2VyIHNhaWQgYnVmIHNpemUgMCAqLwogCQkJY3gtPm9wdGlvbnMubWVnYWJ5dGVzW2ldID0gMDsKIAkJCWN4LT5zdHJlYW1fYnVmZmVyc1tpXSA9IDA7CiAJCQljeC0+c3RyZWFtX2J1Zl9zaXplW2ldID0gMDsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCS8qIFZCSSBpcyBjb21wdXRlZCBsYXRlciBvciB1c2VyIHNhaWQgYnVmZmVyIGhhcyBzaXplIDAgKi8KLQkJaWYgKGN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPD0gMCkgewotCQkJaWYgKGkgIT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJKSB7Ci0JCQkJY3gtPm9wdGlvbnMubWVnYWJ5dGVzW2ldID0gMDsKLQkJCQljeC0+c3RyZWFtX2J1ZmZlcnNbaV0gPSAwOwotCQkJCWN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPSAwOworCQkvKgorCQkgKiBWQkkgaXMgYSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIHN0cmVhbV9idWZfc2l6ZSBpcyBmaXhlZAorCQkgKiBhbmQgYWxyZWFkeSBpbiBieXRlcworCQkgKi8KKwkJaWYgKGkgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJKSB7CisJCQlpZiAoY3gtPnN0cmVhbV9idWZmZXJzW2ldIDwgMCkgeworCQkJCWN4LT5zdHJlYW1fYnVmZmVyc1tpXSA9CisJCQkJCWN4LT5vcHRpb25zLm1lZ2FieXRlc1tpXSAqIDEwMjQgKiAxMDI0CisJCQkJCS8gY3gtPnN0cmVhbV9idWZfc2l6ZVtpXTsKKwkJCX0gZWxzZSB7CisJCQkJLyogTi5CLiBUaGlzIG1pZ2h0IHJvdW5kIGRvd24gdG8gMCAqLworCQkJCWN4LT5vcHRpb25zLm1lZ2FieXRlc1tpXSA9CisJCQkJCWN4LT5zdHJlYW1fYnVmZmVyc1tpXQorCQkJCQkqIGN4LT5zdHJlYW1fYnVmX3NpemVbaV0vKDEwMjQgKiAxMDI0KTsKIAkJCX0KIAkJCWNvbnRpbnVlOwogCQl9CisJCS8qIEFsbCBvdGhlciBzdHJlYW1zIGhhdmUgc3RyZWFtX2J1Zl9zaXplIGluIGtCIGF0IHRoaXMgcG9pbnQgKi8KIAkJaWYgKGN4LT5zdHJlYW1fYnVmZmVyc1tpXSA8IDApIHsKIAkJCWN4LT5zdHJlYW1fYnVmZmVyc1tpXSA9IGN4LT5vcHRpb25zLm1lZ2FieXRlc1tpXSAqIDEwMjQKIAkJCQkJCS8gY3gtPnN0cmVhbV9idWZfc2l6ZVtpXTsKQEAgLTQ4Nyw5ICs0ODgsOSBAQAogCQljeC0+c3RyZWFtX2J1Zl9zaXplW2ldICo9IDEwMjQ7IC8qIGNvbnZlcnQgZnJvbSBrQiB0byBieXRlcyAqLwogCX0KIAotCWN4LT5vcHRpb25zLmNhcmR0eXBlID0gY2FyZHR5cGVbY3gtPm51bV07Ci0JY3gtPm9wdGlvbnMudHVuZXIgPSB0dW5lcltjeC0+bnVtXTsKLQljeC0+b3B0aW9ucy5yYWRpbyA9IHJhZGlvW2N4LT5udW1dOworCWN4LT5vcHRpb25zLmNhcmR0eXBlID0gY2FyZHR5cGVbY3gtPmluc3RhbmNlXTsKKwljeC0+b3B0aW9ucy50dW5lciA9IHR1bmVyW2N4LT5pbnN0YW5jZV07CisJY3gtPm9wdGlvbnMucmFkaW8gPSByYWRpb1tjeC0+aW5zdGFuY2VdOwogCiAJY3gtPnN0ZCA9IGN4MThfcGFyc2Vfc3RkKGN4KTsKIAlpZiAoY3gtPm9wdGlvbnMuY2FyZHR5cGUgPT0gLTEpIHsKQEAgLTUwMiw3ICs1MDMsNyBAQAogCWVsc2UgaWYgKGN4LT5vcHRpb25zLmNhcmR0eXBlICE9IDApCiAJCUNYMThfRVJSKCJVbmtub3duIHVzZXIgc3BlY2lmaWVkIHR5cGUsIHRyeWluZyB0byBhdXRvZGV0ZWN0IGNhcmRcbiIpOwogCWlmIChjeC0+Y2FyZCA9PSBOVUxMKSB7Ci0JCWlmIChjeC0+ZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IENYMThfUENJX0lEX0hBVVBQQVVHRSkgeworCQlpZiAoY3gtPnBjaV9kZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gQ1gxOF9QQ0lfSURfSEFVUFBBVUdFKSB7CiAJCQljeC0+Y2FyZCA9IGN4MThfZ2V0X2NhcmQoQ1gxOF9DQVJEX0hWUl8xNjAwX0VTTVQpOwogCQkJQ1gxOF9JTkZPKCJBdXRvZGV0ZWN0ZWQgSGF1cHBhdWdlIGNhcmRcbiIpOwogCQl9CkBAIC01MTIsMTMgKzUxMywxMyBAQAogCQkJaWYgKGN4LT5jYXJkLT5wY2lfbGlzdCA9PSBOVUxMKQogCQkJCWNvbnRpbnVlOwogCQkJZm9yIChqID0gMDsgY3gtPmNhcmQtPnBjaV9saXN0W2pdLmRldmljZTsgaisrKSB7Ci0JCQkJaWYgKGN4LT5kZXYtPmRldmljZSAhPQorCQkJCWlmIChjeC0+cGNpX2Rldi0+ZGV2aWNlICE9CiAJCQkJICAgIGN4LT5jYXJkLT5wY2lfbGlzdFtqXS5kZXZpY2UpCiAJCQkJCWNvbnRpbnVlOwotCQkJCWlmIChjeC0+ZGV2LT5zdWJzeXN0ZW1fdmVuZG9yICE9CisJCQkJaWYgKGN4LT5wY2lfZGV2LT5zdWJzeXN0ZW1fdmVuZG9yICE9CiAJCQkJICAgIGN4LT5jYXJkLT5wY2lfbGlzdFtqXS5zdWJzeXN0ZW1fdmVuZG9yKQogCQkJCQljb250aW51ZTsKLQkJCQlpZiAoY3gtPmRldi0+c3Vic3lzdGVtX2RldmljZSAhPQorCQkJCWlmIChjeC0+cGNpX2Rldi0+c3Vic3lzdGVtX2RldmljZSAhPQogCQkJCSAgICBjeC0+Y2FyZC0+cGNpX2xpc3Rbal0uc3Vic3lzdGVtX2RldmljZSkKIAkJCQkJY29udGludWU7CiAJCQkJQ1gxOF9JTkZPKCJBdXRvZGV0ZWN0ZWQgJXMgY2FyZFxuIiwgY3gtPmNhcmQtPm5hbWUpOwpAQCAtNTMxLDkgKzUzMiwxMCBAQAogCWlmIChjeC0+Y2FyZCA9PSBOVUxMKSB7CiAJCWN4LT5jYXJkID0gY3gxOF9nZXRfY2FyZChDWDE4X0NBUkRfSFZSXzE2MDBfRVNNVCk7CiAJCUNYMThfRVJSKCJVbmtub3duIGNhcmQ6IHZlbmRvci9kZXZpY2U6IFslMDR4OiUwNHhdXG4iLAotCQkgICAgIGN4LT5kZXYtPnZlbmRvciwgY3gtPmRldi0+ZGV2aWNlKTsKKwkJCSBjeC0+cGNpX2Rldi0+dmVuZG9yLCBjeC0+cGNpX2Rldi0+ZGV2aWNlKTsKIAkJQ1gxOF9FUlIoIiAgICAgICAgICAgICAgc3Vic3lzdGVtIHZlbmRvci9kZXZpY2U6IFslMDR4OiUwNHhdXG4iLAotCQkgICAgIGN4LT5kZXYtPnN1YnN5c3RlbV92ZW5kb3IsIGN4LT5kZXYtPnN1YnN5c3RlbV9kZXZpY2UpOworCQkJIGN4LT5wY2lfZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLAorCQkJIGN4LT5wY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKIAkJQ1gxOF9FUlIoIkRlZmF1bHRpbmcgdG8gJXMgY2FyZFxuIiwgY3gtPmNhcmQtPm5hbWUpOwogCQlDWDE4X0VSUigiUGxlYXNlIG1haWwgdGhlIHZlbmRvci9kZXZpY2UgYW5kIHN1YnN5c3RlbSB2ZW5kb3IvZGV2aWNlIElEcyBhbmQgd2hhdCBraW5kIG9mXG4iKTsKIAkJQ1gxOF9FUlIoImNhcmQgeW91IGhhdmUgdG8gdGhlIGl2dHYtZGV2ZWwgbWFpbGluZ2xpc3QgKHd3dy5pdnR2ZHJpdmVyLm9yZylcbiIpOwpAQCAtNTQ1LDcgKzU0Nyw3IEBACiB9CiAKIC8qIFByZWNvbmRpdGlvbjogdGhlIGN4MTggc3RydWN0dXJlIGhhcyBiZWVuIG1lbXNldCB0byAwLiBPbmx5Ci0gICB0aGUgZGV2IGFuZCBudW0gZmllbGRzIGhhdmUgYmVlbiBmaWxsZWQgaW4uCisgICB0aGUgZGV2IGFuZCBpbnN0YW5jZSBmaWVsZHMgaGF2ZSBiZWVuIGZpbGxlZCBpbi4KICAgIE5vIGFzc3VtcHRpb25zIG9uIHRoZSBjYXJkIHR5cGUgbWF5IGJlIG1hZGUgaGVyZSAoc2VlIGN4MThfaW5pdF9zdHJ1Y3QyCiAgICBmb3IgdGhhdCkuCiAgKi8KQEAgLTU1MywxOCArNTU1LDE0IEBACiB7CiAJaW50IGk7CiAKLQljeC0+YmFzZV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGN4LT5kZXYsIDApOworCWN4LT5iYXNlX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoY3gtPnBjaV9kZXYsIDApOwogCiAJbXV0ZXhfaW5pdCgmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKLQltdXRleF9pbml0KCZjeC0+aTJjX2J1c19sb2NrWzBdKTsKLQltdXRleF9pbml0KCZjeC0+aTJjX2J1c19sb2NrWzFdKTsKIAltdXRleF9pbml0KCZjeC0+Z3Bpb19sb2NrKTsKIAltdXRleF9pbml0KCZjeC0+ZXB1MmFwdV9tYl9sb2NrKTsKIAltdXRleF9pbml0KCZjeC0+ZXB1MmNwdV9tYl9sb2NrKTsKIAotCXNwaW5fbG9ja19pbml0KCZjeC0+bG9jayk7Ci0KLQljeC0+d29ya19xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGN4LT5uYW1lKTsKKwljeC0+d29ya19xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGN4LT52NGwyX2Rldi5uYW1lKTsKIAlpZiAoY3gtPndvcmtfcXVldWUgPT0gTlVMTCkgewogCQlDWDE4X0VSUigiVW5hYmxlIHRvIGNyZWF0ZSB3b3JrIGhhbmRlciB0aHJlYWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTU4Nyw3ICs1ODUsOCBAQAogCQkoY3gtPnBhcmFtcy52aWRlb190ZW1wb3JhbF9maWx0ZXJfbW9kZSA8PCAxKSB8CiAJCShjeC0+cGFyYW1zLnZpZGVvX21lZGlhbl9maWx0ZXJfdHlwZSA8PCAyKTsKIAljeC0+cGFyYW1zLnBvcnQgPSBDWDIzNDFYX1BPUlRfTUVNT1JZOwotCWN4LT5wYXJhbXMuY2FwYWJpbGl0aWVzID0gQ1gyMzQxWF9DQVBfSEFTX1RTOworCWN4LT5wYXJhbXMuY2FwYWJpbGl0aWVzID0KKwkJCQlDWDIzNDFYX0NBUF9IQVNfVFMgfCBDWDIzNDFYX0NBUF9IQVNfU0xJQ0VEX1ZCSTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjeC0+Y2FwX3cpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN4LT5tYl9hcHVfd2FpdHEpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN4LT5tYl9jcHVfd2FpdHEpOwpAQCAtNTk3LDQ5ICs1OTYsNiBAQAogCWN4LT52YmkuaW4udHlwZSA9IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU7CiAJY3gtPnZiaS5zbGljZWRfaW4gPSAmY3gtPnZiaS5pbi5mbXQuc2xpY2VkOwogCi0JLyoKLQkgKiBUaGUgVkJJIGxpbmUgc2l6ZXMgZGVwZW5kIG9uIHRoZSBwaXhlbCBjbG9jayBhbmQgdGhlIGhvcml6IHJhdGUKLQkgKgotCSAqICgxL0ZoKSooMipGcCkgPSBTYW1wbGVzL2xpbmUKLQkgKiAgICAgPSA0IGJ5dGVzIEVBViArIEFuYyBkYXRhIGluIGhibGFuayArIDQgYnl0ZXMgU0FWICsgYWN0aXZlIHNhbXBsZXMKLQkgKgotCSAqICBTbGljZWQgVkJJIGlzIHNlbnQgYXMgYW5jaWxsYXJ5IGRhdGEgZHVyaW5nIGhvcml6b250YWwgYmxhbmtpbmcKLQkgKiAgUmF3IFZCSSBpcyBzZW50IGFzIGFjdGl2ZSB2aWRlbyBzYW1wbGVzIGR1cmluZyB2ZXJ0Y2FsIGJsYW5raW5nCi0JICoKLQkgKiAgV2UgdXNlIGEgIEJULjY1NiBweGllbCBjbG9jayBvZiAxMy41IE1IeiBhbmQgYSBCVC42NTYgYWN0aXZlIGxpbmUKLQkgKiAgbGVuZ3RoIG9mIDcyMCBwaXhlbHMgQCA0OjI6MiBzYW1wbGluZy4gIFRodXMuLi4KLQkgKgotCSAqICBGb3Igc3lzdGVtcyB0aGF0IHVzZSBhIDE1LjczNCBrSHogaG9yaXpvbnRhbCByYXRlLCBzdWNoIGFzCi0JICogIE5UU0MtTSwgUEFMLU0sIFBBTC02MCwgYW5kIG90aGVyIDYwIEh6LzUyNSBsaW5lIHN5c3RlbXMsIHdlIGhhdmU6Ci0JICoKLQkgKiAgKDEvMTUuNzM0IGtIeikgKiAyICogMTMuNSBNSHogPSAxNzE2IHNhbXBsZXMvbGluZSA9Ci0JICogIDQgYnl0ZXMgU0FWICsgMjY4IGJ5dGVzIGFuYyBkYXRhICsgNCBieXRlcyBTQVYgKyAxNDQwIGFjdGl2ZSBzYW1wbGVzCi0JICoKLQkgKiAgRm9yIHN5c3RlbXMgdGhhdCB1c2UgYSAxNS42MjUga0h6IGhvcml6b250YWwgcmF0ZSwgc3VjaCBhcwotCSAqICBQQUwtQi9HL0gsIFBBTC1JLCBTRUNBTS1MIGFuZCBvdGhlciA1MCBIei82MjUgbGluZSBzeXN0ZW1zLCB3ZSBoYXZlOgotCSAqCi0JICogICgxLzE1LjYyNSBrSHopICogMiAqIDEzLjUgTUh6ID0gMTcyOCBzYW1wbGVzL2xpbmUgPQotCSAqICA0IGJ5dGVzIFNBViArIDI4MCBieXRlcyBhbmMgZGF0YSArIDQgYnl0ZXMgU0FWICsgMTQ0MCBhY3RpdmUgc2FtcGxlcwotCSAqCi0JICovCi0KLQkvKiBGSVhNRTogaW5pdCB0aGVzZSBiYXNlZCBvbiB0dW5lciBzdGQgJiBtb2RpZnkgd2hlbiBzdGQgY2hhbmdlcyAqLwotCS8qIENYMTgtQVYtQ29yZSBudW1iZXIgb2YgVkJJIHNhbXBsZXMgb3V0cHV0IHBlciBob3Jpem9udGFsIGxpbmUgKi8KLQljeC0+dmJpLnJhd19kZWNvZGVyX2xpbmVfc2l6ZSA9IDE0NDQ7ICAgLyogNCBieXRlIFNBViArIDIgKiA3MjAgKi8KLQljeC0+dmJpLnNsaWNlZF9kZWNvZGVyX2xpbmVfc2l6ZSA9IDI3MjsgLyogNjAgSHo6IDI2OCs0LCA1MCBIejogMjgwKzQgKi8KLQotCS8qIENYMTgtQVYtQ29yZSBWQkkgc2FtcGxlcy9saW5lIHBvc3NpYmx5IHJvdW5kZWQgdXAgKi8KLQljeC0+dmJpLnJhd19zaXplID0gMTQ0NDsgICAvKiBSZWFsIG1heCBzaXplIGlzIDE0NDQgKi8KLQljeC0+dmJpLnNsaWNlZF9zaXplID0gMjg0OyAvKiBSZWFsIG1heCBzaXplIGlzICAyODQgKi8KLQotCS8qCi0JICogQ1gxOC1BVi1Db3JlIFNBVi9FQVYgUlAgY29kZXMgaW4gVklQIDEueCBtb2RlCi0JICogVGFzayBGaWVsZCBWZXJ0aWNhbEJsYW5rIEhvcml6b250YWxCbGFuayAwIDAgMCAwCi0JICovCi0JY3gtPnZiaS5yYXdfZGVjb2Rlcl9zYXZfb2RkX2ZpZWxkID0gMHgyMDsgICAgIC8qICAgViAgKi8KLQljeC0+dmJpLnJhd19kZWNvZGVyX3Nhdl9ldmVuX2ZpZWxkID0gMHg2MDsgICAgLyogIEZWICAqLwotCWN4LT52Ymkuc2xpY2VkX2RlY29kZXJfc2F2X29kZF9maWVsZCA9IDB4QjA7ICAvKiBUIFZIIC0gYWN0dWFsbHkgRUFWICovCi0JY3gtPnZiaS5zbGljZWRfZGVjb2Rlcl9zYXZfZXZlbl9maWVsZCA9IDB4RjA7IC8qIFRGVkggLSBhY3R1YWxseSBFQVYgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY4LDE1ICs2MjQsOSBAQAogCQlpID0gMDsKIAljeC0+YWN0aXZlX2lucHV0ID0gaTsKIAljeC0+YXVkaW9faW5wdXQgPSBjeC0+Y2FyZC0+dmlkZW9faW5wdXRzW2ldLmF1ZGlvX2luZGV4OwotCWN4LT5hdl9zdGF0ZS52aWRfaW5wdXQgPSBDWDE4X0FWX0NPTVBPU0lURTc7Ci0JY3gtPmF2X3N0YXRlLmF1ZF9pbnB1dCA9IENYMThfQVZfQVVESU84OwotCWN4LT5hdl9zdGF0ZS5hdWRjbGtfZnJlcSA9IDQ4MDAwOwotCWN4LT5hdl9zdGF0ZS5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxOwotCS8qIEZJWE1FIC0gOCBpcyBOVFNDIHZhbHVlLCBpbnZlc3RpZ2F0ZSAqLwotCWN4LT5hdl9zdGF0ZS52YmlfbGluZV9vZmZzZXQgPSA4OwogfQogCi1zdGF0aWMgaW50IGN4MThfc2V0dXBfcGNpKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHBjaV9kZXYgKmRldiwKK3N0YXRpYyBpbnQgY3gxOF9zZXR1cF9wY2koc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKIAkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKIAl1MTYgY21kOwpAQCAtNjg0LDEyNCArNjM0LDEyNSBAQAogCiAJQ1gxOF9ERUJVR19JTkZPKCJFbmFibGluZyBwY2kgZGV2aWNlXG4iKTsKIAotCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXYpKSB7Ci0JCUNYMThfRVJSKCJDYW4ndCBlbmFibGUgZGV2aWNlICVkIVxuIiwgY3gtPm51bSk7CisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpKSB7CisJCUNYMThfRVJSKCJDYW4ndCBlbmFibGUgZGV2aWNlICVkIVxuIiwgY3gtPmluc3RhbmNlKTsKIAkJcmV0dXJuIC1FSU87CiAJfQotCWlmIChwY2lfc2V0X2RtYV9tYXNrKGRldiwgMHhmZmZmZmZmZikpIHsKLQkJQ1gxOF9FUlIoIk5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGUgb24gY2FyZCAlZC5cbiIsIGN4LT5udW0pOworCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaV9kZXYsIDB4ZmZmZmZmZmYpKSB7CisJCUNYMThfRVJSKCJObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLCBjYXJkICVkXG4iLCBjeC0+aW5zdGFuY2UpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oY3gtPmJhc2VfYWRkciwgQ1gxOF9NRU1fU0laRSwgImN4MTggZW5jb2RlciIpKSB7Ci0JCUNYMThfRVJSKCJDYW5ub3QgcmVxdWVzdCBlbmNvZGVyIG1lbW9yeSByZWdpb24gb24gY2FyZCAlZC5cbiIsIGN4LT5udW0pOworCQlDWDE4X0VSUigiQ2Fubm90IHJlcXVlc3QgZW5jb2RlciBtZW1vcnkgcmVnaW9uLCBjYXJkICVkXG4iLAorCQkJIGN4LT5pbnN0YW5jZSk7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCS8qIEVuYWJsZSBidXMgbWFzdGVyaW5nIGFuZCBtZW1vcnkgbWFwcGVkIElPIGZvciB0aGUgQ1gyMzQxOCAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjbWQpOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBjaV9kZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKIAljbWQgfD0gUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfTUFTVEVSOwotCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOworCXBjaV93cml0ZV9jb25maWdfd29yZChwY2lfZGV2LCBQQ0lfQ09NTUFORCwgY21kKTsKIAotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmY3gtPmNhcmRfcmV2KTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmcGNpX2xhdGVuY3kpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmN4LT5jYXJkX3Jldik7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpX2RldiwgUENJX0xBVEVOQ1lfVElNRVIsICZwY2lfbGF0ZW5jeSk7CiAKIAlpZiAocGNpX2xhdGVuY3kgPCA2NCAmJiBjeDE4X3BjaV9sYXRlbmN5KSB7CiAJCUNYMThfSU5GTygiVW5yZWFzb25hYmx5IGxvdyBsYXRlbmN5IHRpbWVyLCAiCiAJCQkgICAgICAgInNldHRpbmcgdG8gNjQgKHdhcyAlZClcbiIsIHBjaV9sYXRlbmN5KTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIDY0KTsKLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgJnBjaV9sYXRlbmN5KTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCA2NCk7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmcGNpX2xhdGVuY3kpOwogCX0KIAogCUNYMThfREVCVUdfSU5GTygiY3glZCAocmV2ICVkKSBhdCAlMDJ4OiUwMnguJXgsICIKIAkJICAgImlycTogJWQsIGxhdGVuY3k6ICVkLCBtZW1vcnk6IDB4JWx4XG4iLAotCQkgICBjeC0+ZGV2LT5kZXZpY2UsIGN4LT5jYXJkX3JldiwgZGV2LT5idXMtPm51bWJlciwKLQkJICAgUENJX1NMT1QoZGV2LT5kZXZmbiksIFBDSV9GVU5DKGRldi0+ZGV2Zm4pLAotCQkgICBjeC0+ZGV2LT5pcnEsIHBjaV9sYXRlbmN5LCAodW5zaWduZWQgbG9uZyljeC0+YmFzZV9hZGRyKTsKKwkJICAgY3gtPnBjaV9kZXYtPmRldmljZSwgY3gtPmNhcmRfcmV2LCBwY2lfZGV2LT5idXMtPm51bWJlciwKKwkJICAgUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pLCBQQ0lfRlVOQyhwY2lfZGV2LT5kZXZmbiksCisJCSAgIGN4LT5wY2lfZGV2LT5pcnEsIHBjaV9sYXRlbmN5LCAodW5zaWduZWQgbG9uZyljeC0+YmFzZV9hZGRyKTsKIAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgTU9EVUxFCi1zdGF0aWMgdTMyIGN4MThfcmVxdWVzdF9tb2R1bGUoc3RydWN0IGN4MTggKmN4LCB1MzIgaHcsCi0JCWNvbnN0IGNoYXIgKm5hbWUsIHUzMiBpZCkKLXsKLQlpZiAoKGh3ICYgaWQpID09IDApCi0JCXJldHVybiBodzsKLQlpZiAocmVxdWVzdF9tb2R1bGUobmFtZSkgIT0gMCkgewotCQlDWDE4X0VSUigiRmFpbGVkIHRvIGxvYWQgbW9kdWxlICVzXG4iLCBuYW1lKTsKLQkJcmV0dXJuIGh3ICYgfmlkOwotCX0KLQlDWDE4X0RFQlVHX0lORk8oIkxvYWRlZCBtb2R1bGUgJXNcbiIsIG5hbWUpOwotCXJldHVybiBodzsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBjeDE4X2xvYWRfYW5kX2luaXRfbW9kdWxlcyhzdHJ1Y3QgY3gxOCAqY3gpCitzdGF0aWMgdm9pZCBjeDE4X2luaXRfc3ViZGV2cyhzdHJ1Y3QgY3gxOCAqY3gpCiB7CiAJdTMyIGh3ID0gY3gtPmNhcmQtPmh3X2FsbDsKKwl1MzIgZGV2aWNlOwogCWludCBpOwogCi0jaWZkZWYgTU9EVUxFCi0JLyogbG9hZCBtb2R1bGVzICovCi0jaWZkZWYgQ09ORklHX01FRElBX1RVTkVSX01PRFVMRQotCWh3ID0gY3gxOF9yZXF1ZXN0X21vZHVsZShjeCwgaHcsICJ0dW5lciIsIENYMThfSFdfVFVORVIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1ZJREVPX0NTNTM0NV9NT0RVTEUKLQlodyA9IGN4MThfcmVxdWVzdF9tb2R1bGUoY3gsIGh3LCAiY3M1MzQ1IiwgQ1gxOF9IV19DUzUzNDUpOwotI2VuZGlmCi0jZW5kaWYKLQotCS8qIGNoZWNrIHdoaWNoIGkyYyBkZXZpY2VzIGFyZSBhY3R1YWxseSBmb3VuZCAqLwotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCXUzMiBkZXZpY2UgPSAxIDw8IGk7CisJZm9yIChpID0gMCwgZGV2aWNlID0gMTsgaSA8IDMyOyBpKyssIGRldmljZSA8PD0gMSkgewogCiAJCWlmICghKGRldmljZSAmIGh3KSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoZGV2aWNlID09IENYMThfSFdfR1BJTyB8fCBkZXZpY2UgPT0gQ1gxOF9IV19UVkVFUFJPTSB8fAotCQkgICAgZGV2aWNlID09IENYMThfSFdfQ1gyMzQxOCB8fCBkZXZpY2UgPT0gQ1gxOF9IV19EVkIpIHsKLQkJCS8qIFRoZXNlICdkZXZpY2VzJyBkbyBub3QgdXNlIGkyYyBwcm9iaW5nICovCisKKwkJc3dpdGNoIChkZXZpY2UpIHsKKwkJY2FzZSBDWDE4X0hXX0RWQjoKKwkJY2FzZSBDWDE4X0hXX1RWRUVQUk9NOgorCQkJLyogVGhlc2Ugc3Vib3JkaW5hdGUgZGV2aWNlcyBkbyBub3QgdXNlIHByb2JpbmcgKi8KIAkJCWN4LT5od19mbGFncyB8PSBkZXZpY2U7Ci0JCQljb250aW51ZTsKKwkJCWJyZWFrOworCQljYXNlIENYMThfSFdfNDE4X0FWOgorCQkJLyogVGhlIEEvViBkZWNvZGVyIGdldHMgcHJvYmVkIGVhcmxpZXIgdG8gc2V0IFBMTHMgKi8KKwkJCS8qIEp1c3Qgbm90ZSB0aGF0IHRoZSBjYXJkIHVzZXMgaXQgKGkuZS4gaGFzIGFuYWxvZykgKi8KKwkJCWN4LT5od19mbGFncyB8PSBkZXZpY2U7CisJCQlicmVhazsKKwkJY2FzZSBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTDoKKwkJCS8qCisJCQkgKiBUaGUgUmVzZXQgQ29udHJvbGxlciBnZXRzIHByb2JlZCBhbmQgYWRkZWQgdG8KKwkJCSAqIGh3X2ZsYWdzIGVhcmxpZXIgZm9yIGkyYyBhZGFwdGVyL2J1cyBpbml0aWFsaXphdGlvbgorCQkJICovCisJCQlicmVhazsKKwkJY2FzZSBDWDE4X0hXX0dQSU9fTVVYOgorCQkJaWYgKGN4MThfZ3Bpb19yZWdpc3RlcihjeCwgZGV2aWNlKSA9PSAwKQorCQkJCWN4LT5od19mbGFncyB8PSBkZXZpY2U7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmIChjeDE4X2kyY19yZWdpc3RlcihjeCwgaSkgPT0gMCkKKwkJCQljeC0+aHdfZmxhZ3MgfD0gZGV2aWNlOworCQkJYnJlYWs7CiAJCX0KLQkJY3gxOF9pMmNfcmVnaXN0ZXIoY3gsIGkpOwotCQlpZiAoY3gxOF9pMmNfaHdfYWRkcihjeCwgZGV2aWNlKSA+IDApCi0JCQljeC0+aHdfZmxhZ3MgfD0gZGV2aWNlOwogCX0KIAotCWh3ID0gY3gtPmh3X2ZsYWdzOworCWlmIChjeC0+aHdfZmxhZ3MgJiBDWDE4X0hXXzQxOF9BVikKKwkJY3gtPnNkX2F2ID0gY3gxOF9maW5kX2h3KGN4LCBDWDE4X0hXXzQxOF9BVik7CisKKwlpZiAoY3gtPmNhcmQtPmh3X211eGVyICE9IDApCisJCWN4LT5zZF9leHRtdXggPSBjeDE4X2ZpbmRfaHcoY3gsIGN4LT5jYXJkLT5od19tdXhlcik7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGN4MThfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IGN4MThfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCiAJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKIAlpbnQgcmV0dmFsID0gMDsKIAlpbnQgaTsKLQlpbnQgdmJpX2J1Zl9zaXplOwogCXUzMiBkZXZ0eXBlOwogCXN0cnVjdCBjeDE4ICpjeDsKIAotCXNwaW5fbG9jaygmY3gxOF9jYXJkc19sb2NrKTsKLQotCS8qIE1ha2Ugc3VyZSB3ZSd2ZSBnb3QgYSBwbGFjZSBmb3IgdGhpcyBjYXJkICovCi0JaWYgKGN4MThfY2FyZHNfYWN0aXZlID09IENYMThfTUFYX0NBUkRTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3gxODogIE1heGltdW0gbnVtYmVyIG9mIGNhcmRzIGRldGVjdGVkICglZCkuXG4iLAotCQkJICAgICAgY3gxOF9jYXJkc19hY3RpdmUpOwotCQlzcGluX3VubG9jaygmY3gxOF9jYXJkc19sb2NrKTsKKwkvKiBGSVhNRSAtIG1vZHVsZSBwYXJhbWV0ZXIgYXJyYXlzIGNvbnN0cmFpbiBtYXggaW5zdGFuY2VzICovCisJaSA9IGF0b21pY19pbmNfcmV0dXJuKCZjeDE4X2luc3RhbmNlKSAtIDE7CisJaWYgKGkgPj0gQ1gxOF9NQVhfQ0FSRFMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjeDE4OiBjYW5ub3QgbWFuYWdlIGNhcmQgJWQsIGRyaXZlciBoYXMgYSAiCisJCSAgICAgICAibGltaXQgb2YgMCAtICVkXG4iLCBpLCBDWDE4X01BWF9DQVJEUyAtIDEpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAljeCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjeDE4KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFjeCkgewotCQlzcGluX3VubG9jaygmY3gxOF9jYXJkc19sb2NrKTsKKwlpZiAoY3ggPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImN4MTg6IGNhbm5vdCBtYW5hZ2UgY2FyZCAlZCwgb3V0IG9mIG1lbW9yeVxuIiwKKwkJICAgICAgIGkpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JY3gxOF9jYXJkc1tjeDE4X2NhcmRzX2FjdGl2ZV0gPSBjeDsKLQljeC0+ZGV2ID0gZGV2OwotCWN4LT5udW0gPSBjeDE4X2NhcmRzX2FjdGl2ZSsrOwotCXNucHJpbnRmKGN4LT5uYW1lLCBzaXplb2YoY3gtPm5hbWUpLCAiY3gxOC0lZCIsIGN4LT5udW0pOwotCUNYMThfSU5GTygiSW5pdGlhbGl6aW5nIGNhcmQgIyVkXG4iLCBjeC0+bnVtKTsKKwljeC0+cGNpX2RldiA9IHBjaV9kZXY7CisJY3gtPmluc3RhbmNlID0gaTsKIAotCXNwaW5fdW5sb2NrKCZjeDE4X2NhcmRzX2xvY2spOworCXJldHZhbCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwY2lfZGV2LT5kZXYsICZjeC0+djRsMl9kZXYpOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjeDE4OiB2NGwyX2RldmljZV9yZWdpc3RlciBvZiBjYXJkICVkIGZhaWxlZCIKKwkJICAgICAgICJcbiIsIGN4LT5pbnN0YW5jZSk7CisJCWtmcmVlKGN4KTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJc25wcmludGYoY3gtPnY0bDJfZGV2Lm5hbWUsIHNpemVvZihjeC0+djRsMl9kZXYubmFtZSksICJjeDE4LSVkIiwKKwkJIGN4LT5pbnN0YW5jZSk7CisJQ1gxOF9JTkZPKCJJbml0aWFsaXppbmcgY2FyZCAlZFxuIiwgY3gtPmluc3RhbmNlKTsKIAogCWN4MThfcHJvY2Vzc19vcHRpb25zKGN4KTsKIAlpZiAoY3gtPm9wdGlvbnMuY2FyZHR5cGUgPT0gLTEpIHsKQEAgLTgxNiwxMyArNzY3LDEwIEBACiAJQ1gxOF9ERUJVR19JTkZPKCJiYXNlIGFkZHI6IDB4JTA4eFxuIiwgY3gtPmJhc2VfYWRkcik7CiAKIAkvKiBQQ0kgRGV2aWNlIFNldHVwICovCi0JcmV0dmFsID0gY3gxOF9zZXR1cF9wY2koY3gsIGRldiwgcGNpX2lkKTsKKwlyZXR2YWwgPSBjeDE4X3NldHVwX3BjaShjeCwgcGNpX2RldiwgcGNpX2lkKTsKIAlpZiAocmV0dmFsICE9IDApCiAJCWdvdG8gZnJlZV93b3JrcXVldWU7CiAKLQkvKiBzYXZlIGN4IGluIHRoZSBwY2kgc3RydWN0IGZvciBsYXRlciB1c2UgKi8KLQlwY2lfc2V0X2RydmRhdGEoZGV2LCBjeCk7Ci0KIAkvKiBtYXAgaW8gbWVtb3J5ICovCiAJQ1gxOF9ERUJVR19JTkZPKCJhdHRlbXB0aW5nIGlvcmVtYXAgYXQgMHglMDh4IGxlbiAweCUwOHhcbiIsCiAJCSAgIGN4LT5iYXNlX2FkZHIgKyBDWDE4X01FTV9PRkZTRVQsIENYMThfTUVNX1NJWkUpOwpAQCAtODU2LDYgKzgwNCwyMyBAQAogCiAJY3gxOF9ncGlvX2luaXQoY3gpOwogCisJLyogSW5pdGlhbGl6ZSBpbnRlZ3JhdGVkIEEvViBkZWNvZGVyIGVhcmx5IHRvIHNldCBQTExzLCBqdXN0IGluIGNhc2UgKi8KKwlyZXR2YWwgPSBjeDE4X2F2X3Byb2JlKGN4KTsKKwlpZiAocmV0dmFsKSB7CisJCUNYMThfRVJSKCJDb3VsZCBub3QgcmVnaXN0ZXIgQS9WIGRlY29kZXIgc3ViZGV2aWNlXG4iKTsKKwkJZ290byBmcmVlX21hcDsKKwl9CisJY3gxOF9jYWxsX2h3KGN4LCBDWDE4X0hXXzQxOF9BViwgY29yZSwgaW5pdCwgKHUzMikgQ1gxOF9BVl9JTklUX1BMTFMpOworCisJLyogSW5pdGlhbGl6ZSBHUElPIFJlc2V0IENvbnRyb2xsZXIgdG8gZG8gY2hpcCByZXNldHMgZHVyaW5nIGkyYyBpbml0ICovCisJaWYgKGN4LT5jYXJkLT5od19hbGwgJiBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCkgeworCQlpZiAoY3gxOF9ncGlvX3JlZ2lzdGVyKGN4LCBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCkgIT0gMCkKKwkJCUNYMThfV0FSTigiQ291bGQgbm90IHJlZ2lzdGVyIEdQSU8gcmVzZXQgY29udHJvbGxlciIKKwkJCQkgICJzdWJkZXZpY2U7IHByb2NlZWRpbmcgYW55d2F5LlxuIik7CisJCWVsc2UKKwkJCWN4LT5od19mbGFncyB8PSBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTDsKKwl9CisKIAkvKiBhY3RpdmUgaTJjICAqLwogCUNYMThfREVCVUdfSU5GTygiYWN0aXZhdGluZyBpMmMuLi5cbiIpOwogCXJldHZhbCA9IGluaXRfY3gxOF9pMmMoY3gpOwpAQCAtODY0LDggKzgyOSw2IEBACiAJCWdvdG8gZnJlZV9tYXA7CiAJfQogCi0JQ1gxOF9ERUJVR19JTkZPKCJBY3RpdmUgY2FyZCBjb3VudDogJWQuXG4iLCBjeDE4X2NhcmRzX2FjdGl2ZSk7Ci0KIAlpZiAoY3gtPmNhcmQtPmh3X2FsbCAmIENYMThfSFdfVFZFRVBST00pIHsKIAkJLyogQmFzZWQgb24gdGhlIG1vZGVsIG51bWJlciB0aGUgY2FyZHR5cGUgbWF5IGJlIGNoYW5nZWQuCiAJCSAgIFRoZSBQQ0kgSURzIGFyZSBub3QgYWx3YXlzIHJlbGlhYmxlLiAqLwpAQCAtODgxLDggKzg0NCw5IEBACiAJY3gxOF9pbml0X3NjYihjeCk7CiAKIAkvKiBSZWdpc3RlciBJUlEgKi8KLQlyZXR2YWwgPSByZXF1ZXN0X2lycShjeC0+ZGV2LT5pcnEsIGN4MThfaXJxX2hhbmRsZXIsCi0JCQkgICAgIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgY3gtPm5hbWUsICh2b2lkICopY3gpOworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGN4LT5wY2lfZGV2LT5pcnEsIGN4MThfaXJxX2hhbmRsZXIsCisJCQkgICAgIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwKKwkJCSAgICAgY3gtPnY0bDJfZGV2Lm5hbWUsICh2b2lkICopY3gpOwogCWlmIChyZXR2YWwpIHsKIAkJQ1gxOF9FUlIoIkZhaWxlZCB0byByZWdpc3RlciBpcnEgJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gZnJlZV9pMmM7CkBAIC05MTcsMzMgKzg4MSwxNCBAQAogCSAgIGluaXRpYWxpemF0aW9uLiAqLwogCWN4MThfaW5pdF9zdHJ1Y3QyKGN4KTsKIAotCWN4MThfbG9hZF9hbmRfaW5pdF9tb2R1bGVzKGN4KTsKKwljeDE4X2luaXRfc3ViZGV2cyhjeCk7CiAKLQlpZiAoY3gtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgeworCWlmIChjeC0+c3RkICYgVjRMMl9TVERfNTI1XzYwKQogCQljeC0+aXNfNjBoeiA9IDE7Ci0JCWN4LT5pc19vdXRfNjBoeiA9IDE7Ci0JfSBlbHNlIHsKLQkJY3gtPmlzXzUwaHogPSAxOwotCQljeC0+aXNfb3V0XzUwaHogPSAxOwotCX0KLQljeC0+cGFyYW1zLnZpZGVvX2dvcF9zaXplID0gY3gtPmlzXzYwaHogPyAxNSA6IDEyOwotCi0JLyoKLQkgKiBGSVhNRTogc2V0dGluZyB0aGUgYnVmZmVyIHNpemUgYmFzZWQgb24gdGhlIHR1bmVyIHN0YW5kYXJkIGlzCi0JICogc3Vib3B0aW1hbCwgYXMgdGhlIENWQlMgYW5kIFNWaWRlbyBpbnB1dHMgY291bGQgdXNlIGEgZGlmZmVyZW50IHN0ZAotCSAqIGFuZCB0aGUgYnVmZmVyIGNvdWxkIGVuZCB1cCBiZWluZyB0b28gc21hbGwgaW4gdGhhdCBjYXNlLgotCSAqLwotCXZiaV9idWZfc2l6ZSA9IGN4LT52YmkucmF3X3NpemUgKiAoY3gtPmlzXzYwaHogPyAyNCA6IDM2KSAvIDI7Ci0JY3gtPnN0cmVhbV9idWZfc2l6ZVtDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldID0gdmJpX2J1Zl9zaXplOwotCi0JaWYgKGN4LT5zdHJlYW1fYnVmZmVyc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldIDwgMCkKLQkJY3gtPnN0cmVhbV9idWZmZXJzW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV0gPQotCQkgICBjeC0+b3B0aW9ucy5tZWdhYnl0ZXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXSAqIDEwMjQgKiAxMDI0Ci0JCSAgIC8gdmJpX2J1Zl9zaXplOwogCWVsc2UKLQkJY3gtPm9wdGlvbnMubWVnYWJ5dGVzW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV0gPQotCQkgICAgIGN4LT5zdHJlYW1fYnVmZmVyc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldICogdmJpX2J1Zl9zaXplCi0JCSAgICAgLyAoMTAyNCAqIDEwMjQpOworCQljeC0+aXNfNTBoeiA9IDE7CisKKwljeC0+cGFyYW1zLnZpZGVvX2dvcF9zaXplID0gY3gtPmlzXzYwaHogPyAxNSA6IDEyOwogCiAJaWYgKGN4LT5vcHRpb25zLnJhZGlvID4gMCkKIAkJY3gtPnY0bDJfY2FwIHw9IFY0TDJfQ0FQX1JBRElPOwpAQCAtOTU2LDcgKzkwMSw3IEBACiAJCXNldHVwLm1vZGVfbWFzayA9IFRfQU5BTE9HX1RWOyAgLyogbWF0Y2hlcyBUViB0dW5lcnMgKi8KIAkJc2V0dXAudHVuZXJfY2FsbGJhY2sgPSAoc2V0dXAudHlwZSA9PSBUVU5FUl9YQzIwMjgpID8KIAkJCWN4MThfcmVzZXRfdHVuZXJfZ3BpbyA6IE5VTEw7Ci0JCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnNldHVwKTsKKwkJY3gxOF9jYWxsX2FsbChjeCwgdHVuZXIsIHNfdHlwZV9hZGRyLCAmc2V0dXApOwogCQlpZiAoc2V0dXAudHlwZSA9PSBUVU5FUl9YQzIwMjgpIHsKIAkJCXN0YXRpYyBzdHJ1Y3QgeGMyMDI4X2N0cmwgY3RybCA9IHsKIAkJCQkuZm5hbWUgPSBYQzIwMjhfREVGQVVMVF9GSVJNV0FSRSwKQEAgLTk2Niw3ICs5MTEsNyBAQAogCQkJCS50dW5lciA9IGN4LT5vcHRpb25zLnR1bmVyLAogCQkJCS5wcml2ID0gJmN0cmwsCiAJCQl9OwotCQkJY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBUVU5FUl9TRVRfQ09ORklHLCAmY2ZnKTsKKwkJCWN4MThfY2FsbF9hbGwoY3gsIHR1bmVyLCBzX2NvbmZpZywgJmNmZyk7CiAJCX0KIAl9CiAKQEAgLTk4NSwxNCArOTMwLDEzIEBACiAJCWdvdG8gZnJlZV9zdHJlYW1zOwogCX0KIAotCUNYMThfSU5GTygiSW5pdGlhbGl6ZWQgY2FyZCAjJWQ6ICVzXG4iLCBjeC0+bnVtLCBjeC0+Y2FyZF9uYW1lKTsKLQorCUNYMThfSU5GTygiSW5pdGlhbGl6ZWQgY2FyZDogJXNcbiIsIGN4LT5jYXJkX25hbWUpOwogCXJldHVybiAwOwogCiBmcmVlX3N0cmVhbXM6CiAJY3gxOF9zdHJlYW1zX2NsZWFudXAoY3gsIDEpOwogZnJlZV9pcnE6Ci0JZnJlZV9pcnEoY3gtPmRldi0+aXJxLCAodm9pZCAqKWN4KTsKKwlmcmVlX2lycShjeC0+cGNpX2Rldi0+aXJxLCAodm9pZCAqKWN4KTsKIGZyZWVfaTJjOgogCWV4aXRfY3gxOF9pMmMoY3gpOwogZnJlZV9tYXA6CkBAIC0xMDA2LDExICs5NTAsOCBAQAogCQlyZXR2YWwgPSAtRU5PREVWOwogCUNYMThfRVJSKCJFcnJvciAlZCBvbiBpbml0aWFsaXphdGlvblxuIiwgcmV0dmFsKTsKIAotCWkgPSBjeC0+bnVtOwotCXNwaW5fbG9jaygmY3gxOF9jYXJkc19sb2NrKTsKLQlrZnJlZShjeDE4X2NhcmRzW2ldKTsKLQljeDE4X2NhcmRzW2ldID0gTlVMTDsKLQlzcGluX3VubG9jaygmY3gxOF9jYXJkc19sb2NrKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZjeC0+djRsMl9kZXYpOworCWtmcmVlKGN4KTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xMDQzLDggKzk4NCwyMSBAQAogCX0KIAlzZXRfYml0KENYMThfRl9JX0xPQURFRF9GVywgJmN4LT5pX2ZsYWdzKTsKIAotCS8qIEluaXQgdGhlIGZpcm13YXJlIHR3aWNlIHRvIHdvcmsgYXJvdW5kIGEgc2lsaWNvbiBidWcKLQkgKiB0cmFuc3BvcnQgcmVsYXRlZC4gKi8KKwkvKgorCSAqIEluaXQgdGhlIGZpcm13YXJlIHR3aWNlIHRvIHdvcmsgYXJvdW5kIGEgc2lsaWNvbiBidWcKKwkgKiB3aXRoIHRoZSBkaWdpdGFsIFRTLgorCSAqCisJICogVGhlIHNlY29uZCBmaXJtd2FyZSBsb2FkIHJlcXVpcmVzIHVzIHRvIG5vcm1hbGl6ZSB0aGUgQVBVIHN0YXRlLAorCSAqIG9yIHRoZSBhdWRpbyBmb3IgdGhlIGZpcnN0IGFuYWxvZyBjYXB0dXJlIHdpbGwgYmUgYmFkbHkgaW5jb3JyZWN0LgorCSAqCisJICogSSBjYW4ndCBzZWVtIHRvIGNhbGwgQVBVX1JFU0VUQUkgYW5kIGhhdmUgaXQgc3VjY2VlZCB3aXRob3V0IHRoZQorCSAqIEFQVSBjYXB0dXJpbmcgYXVkaW8sIHNvIHdlIHN0YXJ0IGFuZCBzdG9wIGl0IGhlcmUgdG8gZG8gdGhlIHJlc2V0CisJICovCisKKwkvKiBNUEVHIEVuY29kaW5nLCAyMjQga2JwcywgTVBFRyBMYXllciBJSSwgNDgga3NwcyAqLworCWN4MThfdmFwaShjeCwgQ1gxOF9BUFVfU1RBUlQsIDIsIENYMThfQVBVX0VOQ09ESU5HX01FVEhPRF9NUEVHfDB4YjksIDApOworCWN4MThfdmFwaShjeCwgQ1gxOF9BUFVfUkVTRVRBSSwgMCk7CisJY3gxOF92YXBpKGN4LCBDWDE4X0FQVV9TVE9QLCAxLCBDWDE4X0FQVV9FTkNPRElOR19NRVRIT0RfTVBFRyk7CiAKIAlmd19yZXRyeV9jb3VudCA9IDM7CiAJd2hpbGUgKC0tZndfcmV0cnlfY291bnQgPiAwKSB7CkBAIC0xMDYwLDYgKzEwMTQsMjIgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKKwkvKgorCSAqIFRoZSBzZWNvbmQgZmlybXdhcmUgbG9hZCByZXF1aXJlcyB1cyB0byBub3JtYWxpemUgdGhlIEFQVSBzdGF0ZSwKKwkgKiBvciB0aGUgYXVkaW8gZm9yIHRoZSBmaXJzdCBhbmFsb2cgY2FwdHVyZSB3aWxsIGJlIGJhZGx5IGluY29ycmVjdC4KKwkgKgorCSAqIEkgY2FuJ3Qgc2VlbSB0byBjYWxsIEFQVV9SRVNFVEFJIGFuZCBoYXZlIGl0IHN1Y2NlZWQgd2l0aG91dCB0aGUKKwkgKiBBUFUgY2FwdHVyaW5nIGF1ZGlvLCBzbyB3ZSBzdGFydCBhbmQgc3RvcCBpdCBoZXJlIHRvIGRvIHRoZSByZXNldAorCSAqLworCisJLyogTVBFRyBFbmNvZGluZywgMjI0IGticHMsIE1QRUcgTGF5ZXIgSUksIDQ4IGtzcHMgKi8KKwljeDE4X3ZhcGkoY3gsIENYMThfQVBVX1NUQVJULCAyLCBDWDE4X0FQVV9FTkNPRElOR19NRVRIT0RfTVBFR3wweGI5LCAwKTsKKwljeDE4X3ZhcGkoY3gsIENYMThfQVBVX1JFU0VUQUksIDApOworCWN4MThfdmFwaShjeCwgQ1gxOF9BUFVfU1RPUCwgMSwgQ1gxOF9BUFVfRU5DT0RJTkdfTUVUSE9EX01QRUcpOworCisJLyogSW5pdCB0aGUgQS9WIGRlY29kZXIsIGlmIGl0IGhhc24ndCBiZWVuIGFscmVhZHkgKi8KKwl2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgaW5pdCwgKHUzMikgQ1gxOF9BVl9JTklUX05PUk1BTCk7CisKIAl2Zi50dW5lciA9IDA7CiAJdmYudHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwogCXZmLmZyZXF1ZW5jeSA9IDY0MDA7IC8qIHRoZSB0dW5lciAnYmFzZWxpbmUnIGZyZXF1ZW5jeSAqLwpAQCAtMTA5Miw5ICsxMDYyLDExIEBACiAKIHN0YXRpYyB2b2lkIGN4MThfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogewotCXN0cnVjdCBjeDE4ICpjeCA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgodjRsMl9kZXYpOworCWludCBpOwogCi0JQ1gxOF9ERUJVR19JTkZPKCJSZW1vdmluZyBDYXJkICMlZFxuIiwgY3gtPm51bSk7CisJQ1gxOF9ERUJVR19JTkZPKCJSZW1vdmluZyBDYXJkXG4iKTsKIAogCS8qIFN0b3AgYWxsIGNhcHR1cmVzICovCiAJQ1gxOF9ERUJVR19JTkZPKCJTdG9wcGluZyBhbGwgc3RyZWFtc1xuIik7CkBAIC0xMTE1LDE1ICsxMDg3LDIyIEBACiAKIAlleGl0X2N4MThfaTJjKGN4KTsKIAotCWZyZWVfaXJxKGN4LT5kZXYtPmlycSwgKHZvaWQgKiljeCk7CisJZnJlZV9pcnEoY3gtPnBjaV9kZXYtPmlycSwgKHZvaWQgKiljeCk7CiAKIAljeDE4X2lvdW5tYXAoY3gpOwogCiAJcmVsZWFzZV9tZW1fcmVnaW9uKGN4LT5iYXNlX2FkZHIsIENYMThfTUVNX1NJWkUpOwogCi0JcGNpX2Rpc2FibGVfZGV2aWNlKGN4LT5kZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShjeC0+cGNpX2Rldik7CiAKLQlDWDE4X0lORk8oIlJlbW92ZWQgJXMsIGNhcmQgIyVkXG4iLCBjeC0+Y2FyZF9uYW1lLCBjeC0+bnVtKTsKKwlpZiAoY3gtPnZiaS5zbGljZWRfbXBlZ19kYXRhWzBdICE9IE5VTEwpCisJCWZvciAoaSA9IDA7IGkgPCBDWDE4X1ZCSV9GUkFNRVM7IGkrKykKKwkJCWtmcmVlKGN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSk7CisKKwlDWDE4X0lORk8oIlJlbW92ZWQgJXNcbiIsIGN4LT5jYXJkX25hbWUpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CisJa2ZyZWUoY3gpOwogfQogCiAvKiBkZWZpbmUgYSBwY2lfZHJpdmVyIGZvciBjYXJkIGRldGVjdGlvbiAqLwpAQCAtMTEzOCw4ICsxMTE3LDYgQEAKIHsKIAlwcmludGsoS0VSTl9JTkZPICJjeDE4OiAgU3RhcnQgaW5pdGlhbGl6YXRpb24sIHZlcnNpb24gJXNcbiIsIENYMThfVkVSU0lPTik7CiAKLQltZW1zZXQoY3gxOF9jYXJkcywgMCwgc2l6ZW9mKGN4MThfY2FyZHMpKTsKLQogCS8qIFZhbGlkYXRlIHBhcmFtZXRlcnMgKi8KIAlpZiAoY3gxOF9maXJzdF9taW5vciA8IDAgfHwgY3gxOF9maXJzdF9taW5vciA+PSBDWDE4X01BWF9DQVJEUykgewogCQlwcmludGsoS0VSTl9FUlIgImN4MTg6ICBFeGl0aW5nLCBjeDE4X2ZpcnN0X21pbm9yIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAlZFxuIiwKQEAgLTExNjIsMTYgKzExMzksNyBAQAogCiBzdGF0aWMgdm9pZCBtb2R1bGVfY2xlYW51cCh2b2lkKQogewotCWludCBpOwotCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZjeDE4X3BjaV9kcml2ZXIpOwotCi0JZm9yIChpID0gMDsgaSA8IGN4MThfY2FyZHNfYWN0aXZlOyBpKyspIHsKLQkJaWYgKGN4MThfY2FyZHNbaV0gPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlrZnJlZShjeDE4X2NhcmRzW2ldKTsKLQl9Ci0KIH0KIAogbW9kdWxlX2luaXQobW9kdWxlX3N0YXJ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKaW5kZXggMGQyZWRlYi4uZWNlNGYyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kdmIvYXVkaW8uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CiAjaW5jbHVkZSAiY3gxOC1tYWlsYm94LmgiCiAjaW5jbHVkZSAiY3gxOC1hdi1jb3JlLmgiCkBAIC03OSw3ICs4MCw3IEBACiAjZGVmaW5lIENYMThfQ0FSRF9ZVUFOX01QQzcxOCAJICAgICAgMwkvKiBZdWFuIE1QQzcxOCAqLwogI2RlZmluZSBDWDE4X0NBUkRfQ05YVF9SQVBUT1JfUEFMICAgICA0CS8qIENvbmV4YW50IFJhcHRvciBQQUwgKi8KICNkZWZpbmUgQ1gxOF9DQVJEX1RPU0hJQkFfUU9TTUlPX0RWQlQgNSAvKiBUb3NoaWJhIFFvc21pbyBJbnRlcmFsIERWQi1UL0FuYWxvZyovCi0jZGVmaW5lIENYMThfQ0FSRF9MRUFEVEVLX1BWUjIxMDAgICAgIDYgLyogTGVhZHRlayBXaW5GYXN0IFBWUjIxMDAgKi8KKyNkZWZpbmUgQ1gxOF9DQVJEX0xFQURURUtfUFZSMjEwMCAgICAgNiAvKiBMZWFkdGVrIFdpbkZhc3QgUFZSMjEwMC9EVlIzMTAwIEggKi8KICNkZWZpbmUgQ1gxOF9DQVJEX0xBU1QgCQkgICAgICA2CiAKICNkZWZpbmUgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHICAwCkBAIC0xNDMsMTIgKzE0NCwxMiBAQAogLyogRmxhZyB0byB0dXJuIG9uIGhpZ2ggdm9sdW1lIGRlYnVnZ2luZyAqLwogI2RlZmluZSBDWDE4X0RCR0ZMR19ISUdIVk9MICgxIDw8IDgpCiAKLS8qIE5PVEU6IGV4dHJhIHNwYWNlIGJlZm9yZSBjb21tYSBpbiAnY3gtPm51bSAsICMjIGFyZ3MnIGlzIHJlcXVpcmVkIGZvcgorLyogTk9URTogZXh0cmEgc3BhY2UgYmVmb3JlIGNvbW1hIGluICdmbXQgLCAjIyBhcmdzJyBpcyByZXF1aXJlZCBmb3IKICAgIGdjYy0yLjk1LCBvdGhlcndpc2UgaXQgd29uJ3QgY29tcGlsZS4gKi8KICNkZWZpbmUgQ1gxOF9ERUJVRyh4LCB0eXBlLCBmbXQsIGFyZ3MuLi4pIFwKIAlkbyB7IFwKIAkJaWYgKCh4KSAmIGN4MThfZGVidWcpIFwKLQkJCXByaW50ayhLRVJOX0lORk8gImN4MTgtJWQgIiB0eXBlICI6ICIgZm10LCBjeC0+bnVtICwgIyMgYXJncyk7IFwKKwkJCXY0bDJfaW5mbygmY3gtPnY0bDJfZGV2LCAiICIgdHlwZSAiOiAiIGZtdCAsICMjIGFyZ3MpOyBcCiAJfSB3aGlsZSAoMCkKICNkZWZpbmUgQ1gxOF9ERUJVR19XQVJOKGZtdCwgYXJncy4uLikgIENYMThfREVCVUcoQ1gxOF9EQkdGTEdfV0FSTiwgIndhcm5pbmciLCBmbXQgLCAjIyBhcmdzKQogI2RlZmluZSBDWDE4X0RFQlVHX0lORk8oZm10LCBhcmdzLi4uKSAgQ1gxOF9ERUJVRyhDWDE4X0RCR0ZMR19JTkZPLCAiaW5mbyIsIGZtdCAsICMjIGFyZ3MpCkBAIC0xNjIsNyArMTYzLDcgQEAKICNkZWZpbmUgQ1gxOF9ERUJVR19ISUdIX1ZPTCh4LCB0eXBlLCBmbXQsIGFyZ3MuLi4pIFwKIAlkbyB7IFwKIAkJaWYgKCgoeCkgJiBjeDE4X2RlYnVnKSAmJiAoY3gxOF9kZWJ1ZyAmIENYMThfREJHRkxHX0hJR0hWT0wpKSBcCi0JCQlwcmludGsoS0VSTl9JTkZPICJjeDE4JWQgIiB0eXBlICI6ICIgZm10LCBjeC0+bnVtICwgIyMgYXJncyk7IFwKKwkJCXY0bDJfaW5mbygmY3gtPnY0bDJfZGV2LCAiICIgdHlwZSAiOiAiIGZtdCAsICMjIGFyZ3MpOyBcCiAJfSB3aGlsZSAoMCkKICNkZWZpbmUgQ1gxOF9ERUJVR19ISV9XQVJOKGZtdCwgYXJncy4uLikgIENYMThfREVCVUdfSElHSF9WT0woQ1gxOF9EQkdGTEdfV0FSTiwgIndhcm5pbmciLCBmbXQgLCAjIyBhcmdzKQogI2RlZmluZSBDWDE4X0RFQlVHX0hJX0lORk8oZm10LCBhcmdzLi4uKSAgQ1gxOF9ERUJVR19ISUdIX1ZPTChDWDE4X0RCR0ZMR19JTkZPLCAiaW5mbyIsIGZtdCAsICMjIGFyZ3MpCkBAIC0xNzQsOSArMTc1LDU4IEBACiAjZGVmaW5lIENYMThfREVCVUdfSElfSVJRKGZtdCwgYXJncy4uLikgICBDWDE4X0RFQlVHX0hJR0hfVk9MKENYMThfREJHRkxHX0lSUSwgImlycSIsIGZtdCAsICMjIGFyZ3MpCiAKIC8qIFN0YW5kYXJkIGtlcm5lbCBtZXNzYWdlcyAqLwotI2RlZmluZSBDWDE4X0VSUihmbXQsIGFyZ3MuLi4pICAgICAgcHJpbnRrKEtFUk5fRVJSICAiY3gxOC0lZDogIiBmbXQsIGN4LT5udW0gLCAjIyBhcmdzKQotI2RlZmluZSBDWDE4X1dBUk4oZm10LCBhcmdzLi4uKSAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiY3gxOC0lZDogIiBmbXQsIGN4LT5udW0gLCAjIyBhcmdzKQotI2RlZmluZSBDWDE4X0lORk8oZm10LCBhcmdzLi4uKSAgICAgcHJpbnRrKEtFUk5fSU5GTyAiY3gxOC0lZDogIiBmbXQsIGN4LT5udW0gLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0VSUihmbXQsIGFyZ3MuLi4pICAgICAgdjRsMl9lcnIoJmN4LT52NGwyX2RldiwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgQ1gxOF9XQVJOKGZtdCwgYXJncy4uLikgICAgIHY0bDJfd2FybigmY3gtPnY0bDJfZGV2LCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0lORk8oZm10LCBhcmdzLi4uKSAgICAgdjRsMl9pbmZvKCZjeC0+djRsMl9kZXYsIGZtdCAsICMjIGFyZ3MpCisKKy8qIE1lc3NhZ2VzIGZvciBpbnRlcm5hbCBzdWJkZXZzIHRvIHVzZSAqLworI2RlZmluZSBDWDE4X0RFQlVHX0RFVih4LCBkZXYsIHR5cGUsIGZtdCwgYXJncy4uLikgXAorCWRvIHsgXAorCQlpZiAoKHgpICYgY3gxOF9kZWJ1ZykgXAorCQkJdjRsMl9pbmZvKGRldiwgIiAiIHR5cGUgIjogIiBmbXQgLCAjIyBhcmdzKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIENYMThfREVCVUdfV0FSTl9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwkJQ1gxOF9ERUJVR19ERVYoQ1gxOF9EQkdGTEdfV0FSTiwgZGV2LCAid2FybmluZyIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSU5GT19ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwkJQ1gxOF9ERUJVR19ERVYoQ1gxOF9EQkdGTEdfSU5GTywgZGV2LCAiaW5mbyIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfQVBJX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCQlDWDE4X0RFQlVHX0RFVihDWDE4X0RCR0ZMR19BUEksIGRldiwgImFwaSIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfRE1BX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCQlDWDE4X0RFQlVHX0RFVihDWDE4X0RCR0ZMR19ETUEsIGRldiwgImRtYSIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSU9DVExfREVWKGRldiwgZm10LCBhcmdzLi4uKSBcCisJCUNYMThfREVCVUdfREVWKENYMThfREJHRkxHX0lPQ1RMLCBkZXYsICJpb2N0bCIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfRklMRV9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwkJQ1gxOF9ERUJVR19ERVYoQ1gxOF9EQkdGTEdfRklMRSwgZGV2LCAiZmlsZSIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSTJDX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCQlDWDE4X0RFQlVHX0RFVihDWDE4X0RCR0ZMR19JMkMsIGRldiwgImkyYyIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSVJRX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCQlDWDE4X0RFQlVHX0RFVihDWDE4X0RCR0ZMR19JUlEsIGRldiwgImlycSIsIGZtdCAsICMjIGFyZ3MpCisKKyNkZWZpbmUgQ1gxOF9ERUJVR19ISUdIX1ZPTF9ERVYoeCwgZGV2LCB0eXBlLCBmbXQsIGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKCgoeCkgJiBjeDE4X2RlYnVnKSAmJiAoY3gxOF9kZWJ1ZyAmIENYMThfREJHRkxHX0hJR0hWT0wpKSBcCisJCQl2NGwyX2luZm8oZGV2LCAiICIgdHlwZSAiOiAiIGZtdCAsICMjIGFyZ3MpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgQ1gxOF9ERUJVR19ISV9XQVJOX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCUNYMThfREVCVUdfSElHSF9WT0xfREVWKENYMThfREJHRkxHX1dBUk4sIGRldiwgIndhcm5pbmciLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0RFQlVHX0hJX0lORk9fREVWKGRldiwgZm10LCBhcmdzLi4uKSBcCisJQ1gxOF9ERUJVR19ISUdIX1ZPTF9ERVYoQ1gxOF9EQkdGTEdfSU5GTywgZGV2LCAiaW5mbyIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSElfQVBJX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCUNYMThfREVCVUdfSElHSF9WT0xfREVWKENYMThfREJHRkxHX0FQSSwgZGV2LCAiYXBpIiwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgQ1gxOF9ERUJVR19ISV9ETUFfREVWKGRldiwgZm10LCBhcmdzLi4uKSBcCisJQ1gxOF9ERUJVR19ISUdIX1ZPTF9ERVYoQ1gxOF9EQkdGTEdfRE1BLCBkZXYsICJkbWEiLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0RFQlVHX0hJX0lPQ1RMX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCUNYMThfREVCVUdfSElHSF9WT0xfREVWKENYMThfREJHRkxHX0lPQ1RMLCBkZXYsICJpb2N0bCIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSElfRklMRV9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwlDWDE4X0RFQlVHX0hJR0hfVk9MX0RFVihDWDE4X0RCR0ZMR19GSUxFLCBkZXYsICJmaWxlIiwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgQ1gxOF9ERUJVR19ISV9JMkNfREVWKGRldiwgZm10LCBhcmdzLi4uKSBcCisJQ1gxOF9ERUJVR19ISUdIX1ZPTF9ERVYoQ1gxOF9EQkdGTEdfSTJDLCBkZXYsICJpMmMiLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0RFQlVHX0hJX0lSUV9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwlDWDE4X0RFQlVHX0hJR0hfVk9MX0RFVihDWDE4X0RCR0ZMR19JUlEsIGRldiwgImlycSIsIGZtdCAsICMjIGFyZ3MpCisKKyNkZWZpbmUgQ1gxOF9FUlJfREVWKGRldiwgZm10LCBhcmdzLi4uKSAgICAgIHY0bDJfZXJyKGRldiwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgQ1gxOF9XQVJOX0RFVihkZXYsIGZtdCwgYXJncy4uLikgICAgIHY0bDJfd2FybihkZXYsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfSU5GT19ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pICAgICB2NGwyX2luZm8oZGV2LCBmbXQgLCAjIyBhcmdzKQogCiAvKiBWYWx1ZXMgZm9yIENYMThfQVBJX0RFQ19QTEFZQkFDS19TUEVFRCBtcGVnX2ZyYW1lX3R5cGVfbWFzayBwYXJhbWV0ZXI6ICovCiAjZGVmaW5lIE1QRUdfRlJBTUVfVFlQRV9JRlJBTUUgMQpAQCAtMjc5LDcgKzMyOSw3IEBACiBzdHJ1Y3QgY3gxOF9zdHJlYW0gewogCS8qIFRoZXNlIGZpcnN0IGZvdXIgZmllbGRzIGFyZSBhbHdheXMgc2V0LCBldmVuIGlmIHRoZSBzdHJlYW0KIAkgICBpcyBub3QgYWN0dWFsbHkgY3JlYXRlZC4gKi8KLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2NGwyZGV2OwkvKiBOVUxMIHdoZW4gc3RyZWFtIG5vdCBjcmVhdGVkICovCisJc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2OwkvKiBOVUxMIHdoZW4gc3RyZWFtIG5vdCBjcmVhdGVkICovCiAJc3RydWN0IGN4MTggKmN4OyAJCS8qIGZvciBlYXNlIG9mIHVzZSAqLwogCWNvbnN0IGNoYXIgKm5hbWU7CQkvKiBuYW1lIG9mIHRoZSBzdHJlYW0gKi8KIAlpbnQgdHlwZTsJCQkvKiBzdHJlYW0gdHlwZSAqLwpAQCAtMjkyLDcgKzM0Miw2IEBACiAJaW50IGRtYTsJCS8qIGNhbiBiZSBQQ0lfRE1BX1RPREVWSUNFLAogCQkJCSAgIFBDSV9ETUFfRlJPTURFVklDRSBvcgogCQkJCSAgIFBDSV9ETUFfTk9ORSAqLwotCXU2NCBkbWFfcHRzOwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxOwogCiAJLyogQnVmZmVyIFN0YXRzICovCkBAIC0zMTgsNTkgKzM2NywxMjEgQEAKIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gb2Ygc3RydWN0IGRlZmluZWQgaW4gY3gxOC1jYXJkcy5oICovCiBzdHJ1Y3QgY3gxOF9jYXJkOwogCisvKgorICogQSBub3RlIGFib3V0ICJzbGljZWQiIFZCSSBkYXRhIGFzIGltcGxlbWVudGVkIGluIHRoaXMgZHJpdmVyOgorICoKKyAqIEN1cnJlbnRseSB3ZSBjb2xsZWN0IHRoZSBzbGljZWQgVkJJIGluIHRoZSBmb3JtIG9mIEFuY2lsbGFyeSBEYXRhCisgKiBwYWNrZXRzLCBpbnNlcnRlZCBieSB0aGUgQVYgY29yZSBkZWNvZGVyL2RpZ2l0aXplci9zbGljZXIgaW4gdGhlCisgKiBob3Jpem9udGFsIGJsYW5raW5nIHJlZ2lvbiBvZiB0aGUgVkJJIGxpbmVzLCBpbiAicmF3IiBtb2RlIGFzIGZhciBhcworICogdGhlIEVuY29kZXIgaXMgY29uY2VybmVkLiAgV2UgZG9uJ3QgZXZlciB0ZWxsIHRoZSBFbmNvZGVyIGl0c2VsZgorICogdG8gcHJvdmlkZSBzbGljZWQgVkJJLiAoQVYgQ29yZTogc2xpY2VkIG1vZGUgLSBFbmNvZGVyOiByYXcgbW9kZSkKKyAqCisgKiBXZSB0aGVuIHByb2Nlc3MgdGhlIGFuY2lsbGFyeSBkYXRhIG91cnNlbHZlcyB0byBzZW5kIHRoZSBzbGljZWQgZGF0YQorICogdG8gdGhlIHVzZXIgYXBwbGljYXRpb24gZGlyZWN0bHkgb3IgYnVpbGQgdXAgTVBFRy0yIHByaXZhdGUgc3RyZWFtIDEKKyAqIHBhY2tldHMgdG8gc3BsaWNlIGludG8gKG9ubHkhKSBNUEVHLTIgUFMgc3RyZWFtcyBmb3IgdGhlIHVzZXIgYXBwLgorICoKKyAqIChUaGF0J3MgaG93IGl2dHYgZXNzZW50aWFsbHkgZG9lcyBpdC4pCisgKgorICogVGhlIEVuY29kZXIgc2hvdWxkIGJlIGFibGUgdG8gZXh0cmFjdCBjZXJ0YWluIHNsaWNlZCBWQkkgZGF0YSBmb3IKKyAqIHVzIGFuZCBwcm92aWRlIGl0IGluIGEgc2VwYXJhdGUgc3RyZWFtIG9yIHNwbGljZSBpdCBpbnRvIGFueSB0eXBlIG9mCisgKiBNUEVHIFBTIG9yIFRTIHN0cmVhbSwgYnV0IHRoaXMgaXNuJ3QgaW1wbGVtZW50ZWQgeWV0LgorICovCisKKy8qCisgKiBOdW1iZXIgb2YgInJhdyIgVkJJIHNhbXBsZXMgcGVyIGhvcml6b250YWwgbGluZSB3ZSB0ZWxsIHRoZSBFbmNvZGVyIHRvCisgKiBncmFiIGZyb20gdGhlIGRlY29kZXIvZGlnaXRpemVyL3NsaWNlciBvdXRwdXQgZm9yIHJhdyBvciBzbGljZWQgVkJJLgorICogSXQgZGVwZW5kcyBvbiB0aGUgcGl4ZWwgY2xvY2sgYW5kIHRoZSBob3JpeiByYXRlOgorICoKKyAqICgxL0ZoKSooMipGcCkgPSBTYW1wbGVzL2xpbmUKKyAqICAgICA9IDQgYnl0ZXMgRUFWICsgQW5jIGRhdGEgaW4gaGJsYW5rICsgNCBieXRlcyBTQVYgKyBhY3RpdmUgc2FtcGxlcworICoKKyAqICBTbGljZWQgVkJJIGRhdGEgaXMgc2VudCBhcyBhbmNpbGxhcnkgZGF0YSBkdXJpbmcgaG9yaXpvbnRhbCBibGFua2luZworICogIFJhdyBWQkkgaXMgc2VudCBhcyBhY3RpdmUgdmlkZW8gc2FtcGxlcyBkdXJpbmcgdmVydGNhbCBibGFua2luZworICoKKyAqICBXZSB1c2UgYSAgQlQuNjU2IHB4aWVsIGNsb2NrIG9mIDEzLjUgTUh6IGFuZCBhIEJULjY1NiBhY3RpdmUgbGluZQorICogIGxlbmd0aCBvZiA3MjAgcGl4ZWxzIEAgNDoyOjIgc2FtcGxpbmcuICBUaHVzLi4uCisgKgorICogIEZvciBzeXN0ZW1zIHRoYXQgdXNlIGEgMTUuNzM0IGtIeiBob3Jpem9udGFsIHJhdGUsIHN1Y2ggYXMKKyAqICBOVFNDLU0sIFBBTC1NLCBQQUwtNjAsIGFuZCBvdGhlciA2MCBIei81MjUgbGluZSBzeXN0ZW1zLCB3ZSBoYXZlOgorICoKKyAqICAoMS8xNS43MzQga0h6KSAqIDIgKiAxMy41IE1IeiA9IDE3MTYgc2FtcGxlcy9saW5lID0KKyAqICA0IGJ5dGVzIFNBViArIDI2OCBieXRlcyBhbmMgZGF0YSArIDQgYnl0ZXMgU0FWICsgMTQ0MCBhY3RpdmUgc2FtcGxlcworICoKKyAqICBGb3Igc3lzdGVtcyB0aGF0IHVzZSBhIDE1LjYyNSBrSHogaG9yaXpvbnRhbCByYXRlLCBzdWNoIGFzCisgKiAgUEFMLUIvRy9ILCBQQUwtSSwgU0VDQU0tTCBhbmQgb3RoZXIgNTAgSHovNjI1IGxpbmUgc3lzdGVtcywgd2UgaGF2ZToKKyAqCisgKiAgKDEvMTUuNjI1IGtIeikgKiAyICogMTMuNSBNSHogPSAxNzI4IHNhbXBsZXMvbGluZSA9CisgKiAgNCBieXRlcyBTQVYgKyAyODAgYnl0ZXMgYW5jIGRhdGEgKyA0IGJ5dGVzIFNBViArIDE0NDAgYWN0aXZlIHNhbXBsZXMKKyAqLworc3RhdGljIGNvbnN0IHUzMiB2YmlfYWN0aXZlX3NhbXBsZXMgPSAxNDQ0OyAvKiA0IGJ5dGUgU0FWICsgNzIwIFkgKyA3MjAgVS9WICovCitzdGF0aWMgY29uc3QgdTMyIHZiaV9oYmxhbmtfc2FtcGxlc182MEh6ID0gMjcyOyAvKiA0IGJ5dGUgRUFWICsgMjY4IGFuYy9maWxsICovCitzdGF0aWMgY29uc3QgdTMyIHZiaV9oYmxhbmtfc2FtcGxlc181MEh6ID0gMjg0OyAvKiA0IGJ5dGUgRUFWICsgMjgwIGFuYy9maWxsICovCiAKICNkZWZpbmUgQ1gxOF9WQklfRlJBTUVTIDMyCiAKLS8qIFZCSSBkYXRhICovCiBzdHJ1Y3QgdmJpX2luZm8gewotCXUzMiBlbmNfc2l6ZTsKLQl1MzIgZnJhbWU7Ci0JdTggY2NfZGF0YV9vZGRbMjU2XTsKLQl1OCBjY19kYXRhX2V2ZW5bMjU2XTsKLQlpbnQgY2NfcG9zOwotCXU4IGNjX25vX3VwZGF0ZTsKLQl1OCB2cHNbNV07Ci0JdTggdnBzX2ZvdW5kOwotCWludCB3c3M7Ci0JdTggd3NzX2ZvdW5kOwotCXU4IHdzc19ub191cGRhdGU7Ci0JdTMyIHJhd19kZWNvZGVyX2xpbmVfc2l6ZTsKLQl1OCByYXdfZGVjb2Rlcl9zYXZfb2RkX2ZpZWxkOwotCXU4IHJhd19kZWNvZGVyX3Nhdl9ldmVuX2ZpZWxkOwotCXUzMiBzbGljZWRfZGVjb2Rlcl9saW5lX3NpemU7Ci0JdTggc2xpY2VkX2RlY29kZXJfc2F2X29kZF9maWVsZDsKLQl1OCBzbGljZWRfZGVjb2Rlcl9zYXZfZXZlbl9maWVsZDsKKwkvKiBDdXJyZW50IHN0YXRlIG9mIHY0bDIgVkJJIHNldHRpbmdzIGZvciB0aGlzIGRldmljZSAqLwogCXN0cnVjdCB2NGwyX2Zvcm1hdCBpbjsKLQkvKiBjb252ZW5pZW5jZSBwb2ludGVyIHRvIHNsaWNlZCBzdHJ1Y3QgaW4gdmJpX2luIHVuaW9uICovCi0Jc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKnNsaWNlZF9pbjsKLQl1MzIgc2VydmljZV9zZXRfaW47CisJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKnNsaWNlZF9pbjsgLyogcG9pbnRlciB0byBpbi5mbXQuc2xpY2VkICovCisJdTMyIGNvdW50OyAgICAvKiBDb3VudCBvZiBWQkkgZGF0YSBsaW5lczogNjAgSHo6IDEyIG9yIDUwIEh6OiAxOCAqLworCXUzMiBzdGFydFsyXTsgLyogRmlyc3QgVkJJIGRhdGEgbGluZSBwZXIgZmllbGQ6IDEwICYgMjczIG9yIDYgJiAzMTggKi8KKworCXUzMiBmcmFtZTsgLyogQ291bnQgb2YgVkJJIGJ1ZmZlcnMvZnJhbWVzIHJlY2VpdmVkIGZyb20gRW5jb2RlciAqLworCisJLyoKKwkgKiBWYXJzIGZvciBjcmVhdGlvbiBhbmQgaW5zZXJ0aW9uIG9mIE1QRUcgUHJpdmF0ZSBTdHJlYW0gMSBwYWNrZXRzCisJICogb2Ygc2xpY2VkIFZCSSBkYXRhIGludG8gYW4gTVBFRyBQUworCSAqLworCisJLyogQm9vbGVhbjogY3JlYXRlIGFuZCBpbnNlcnQgUHJpdmF0ZSBTdHJlYW0gMSBwYWNrZXRzIGludG8gdGhlIFBTICovCiAJaW50IGluc2VydF9tcGVnOwogCi0JLyogQnVmZmVyIGZvciB0aGUgbWF4aW11bSBvZiAyICogMTggKiBwYWNrZXRfc2l6ZSBzbGljZWQgVkJJIGxpbmVzLgotCSAgIE9uZSBmb3IgL2Rldi92YmkwIGFuZCBvbmUgZm9yIC9kZXYvdmJpOCAqLworCS8qCisJICogQnVmZmVyIGZvciB0aGUgbWF4aW11bSBvZiAyICogMTggKiBwYWNrZXRfc2l6ZSBzbGljZWQgVkJJIGxpbmVzLgorCSAqIFVzZWQgaW4gY3gxOC12YmkuYyBvbmx5IGZvciBjb2xsZWN0aW5nIHNsaWNlZCBkYXRhLCBhbmQgYXMgYSBzb3VyY2UKKwkgKiBkdXJpbmcgY29udmVyc2lvbiBvZiBzbGljZWQgVkJJIGRhdGEgaW50byBNUEVHIFByaXYgU3RyZWFtIDEgcGFja2V0cy4KKwkgKiBXZSBkb24ndCBuZWVkIHRvIHNhdmUgc3RhdGUgaGVyZSwgYnV0IHRoZSBhcnJheSBtYXkgaGF2ZSBiZWVuIGEgYml0CisJICogdG9vIGJpZyAoMjMwNCBieXRlcykgdG8gYWxsb2MgZnJvbSB0aGUgc3RhY2suCisJICovCiAJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhIHNsaWNlZF9kYXRhWzM2XTsKIAotCS8qIEJ1ZmZlciBmb3IgVkJJIGRhdGEgaW5zZXJ0ZWQgaW50byBNUEVHIHN0cmVhbS4KLQkgICBUaGUgZmlyc3QgYnl0ZSBpcyBhIGR1bW15IGJ5dGUgdGhhdCdzIG5ldmVyIHVzZWQuCi0JICAgVGhlIG5leHQgMTYgYnl0ZXMgY29udGFpbiB0aGUgTVBFRyBoZWFkZXIgZm9yIHRoZSBWQkkgZGF0YSwKLQkgICB0aGUgcmVtYWluZGVyIGlzIHRoZSBhY3R1YWwgVkJJIGRhdGEuCi0JICAgVGhlIG1heCBzaXplIGFjY2VwdGVkIGJ5IHRoZSBNUEVHIFZCSSByZWluc2VydGlvbiB0dXJucyBvdXQKLQkgICB0byBiZSAxNTUyIGJ5dGVzLCB3aGljaCBoYXBwZW5zIHRvIGJlIDQgKyAoMSArIDQyKSAqICgyICogMTgpIGJ5dGVzLAotCSAgIHdoZXJlIDQgaXMgYSBmb3VyIGJ5dGUgaGVhZGVyLCA0MiBpcyB0aGUgbWF4IHNsaWNlZCBWQkkgcGF5bG9hZCwgMSBpcwotCSAgIGEgc2luZ2xlIGxpbmUgaGVhZGVyIGJ5dGUgYW5kIDIgKiAxOCBpcyB0aGUgbnVtYmVyIG9mIFZCSSBsaW5lcyBwZXIgZnJhbWUuCi0KLQkgICBIb3dldmVyLCBpdCBzZWVtcyB0aGF0IHRoZSBkYXRhIG11c3QgYmUgMUsgYWxpZ25lZCwgc28gd2UgaGF2ZSB0bwotCSAgIHBhZCB0aGUgZGF0YSB1bnRpbCB0aGUgMSBvciAyIEsgYm91bmRhcnkuCi0KLQkgICBUaGlzIHBvaW50ZXIgYXJyYXkgd2lsbCBhbGxvY2F0ZSAyMDQ5IGJ5dGVzIHRvIHN0b3JlIGVhY2ggVkJJIGZyYW1lLiAqLworCS8qCisJICogQSByaW5nIGJ1ZmZlciBvZiBkcml2ZXItZ2VuZXJhdGVkIE1QRUctMiBQUworCSAqIFByb2dyYW0gUGFjay9Qcml2YXRlIFN0cmVhbSAxIHBhY2tldHMgZm9yIHNsaWNlZCBWQkkgZGF0YSBpbnNlcnRpb24KKwkgKiBpbnRvIHRoZSBNUEVHIFBTIHN0cmVhbS4KKwkgKgorCSAqIEluIGVhY2ggc2xpY2VkX21wZWdfZGF0YVtdIGJ1ZmZlciBpczoKKwkgKiAJMTYgYnl0ZSBNUEVHLTIgUFMgUHJvZ3JhbSBQYWNrIEhlYWRlcgorCSAqIAkxNiBieXRlIE1QRUctMiBQcml2YXRlIFN0cmVhbSAxIFBFUyBIZWFkZXIKKwkgKiAJIDQgYnl0ZSBtYWdpYyBudW1iZXI6ICJpdHYwIiBvciAiSVRWMCIKKwkgKiAJIDQgYnl0ZSBmaXJzdCAgZmllbGQgbGluZSBtYXNrLCBpZiAiaXR2MCIKKwkgKiAJIDQgYnl0ZSBzZWNvbmQgZmllbGQgbGluZSBtYXNrLCBpZiAiaXR2MCIKKwkgKiAJMzYgbGluZXMsIGlmICJJVFYwIjsgb3IgPDM2IGxpbmVzLCBpZiAiaXR2MCI7IG9mIHNsaWNlZCBWQkkgZGF0YQorCSAqCisJICogCUVhY2ggbGluZSBpbiB0aGUgcGF5bG9hZCBpcworCSAqCSAxIGJ5dGUgbGluZSBoZWFkZXIgZGVyaXZlZCBmcm9tIHRoZSBTRElEIChXU1MsIENDLCBWUFMsIGV0Yy4pCisJICoJNDIgYnl0ZXMgb2YgbGluZSBkYXRhCisJICoKKwkgKiBUaGF0J3MgYSBtYXhpbXVtIDE1NTIgYnl0ZXMgb2YgcGF5bG9hZCBpbiB0aGUgUHJpdmF0ZSBTdHJlYW0gMSBwYWNrZXQKKwkgKiB3aGljaCBpcyB0aGUgcGF5bG9hZCBzaXplIGEgUFZSLTM1MCAoQ1gyMzQxNSkgTVBFRyBkZWNvZGVyIHdpbGwKKwkgKiBhY2NlcHQgZm9yIFZCSSBkYXRhLiBTbywgaW5jbHVkaW5nIHRoZSBoZWFkZXJzLCBpdCdzIGEgbWF4aW11bSAxNTg0CisJICogYnl0ZXMgdG90YWwuCisJICovCisjZGVmaW5lIENYMThfU0xJQ0VEX01QRUdfREFUQV9NQVhTWgkxNTg0CisJLyogY29weV92YmlfYnVmKCkgbmVlZHMgOCB0ZW1wIGJ5dGVzIG9uIHRoZSBlbmQgZm9yIHRoZSB3b3JzdCBjYXNlICovCisjZGVmaW5lIENYMThfU0xJQ0VEX01QRUdfREFUQV9CVUZTWgkoQ1gxOF9TTElDRURfTVBFR19EQVRBX01BWFNaKzgpCiAJdTggKnNsaWNlZF9tcGVnX2RhdGFbQ1gxOF9WQklfRlJBTUVTXTsKIAl1MzIgc2xpY2VkX21wZWdfc2l6ZVtDWDE4X1ZCSV9GUkFNRVNdOwotCXN0cnVjdCBjeDE4X2J1ZmZlciBzbGljZWRfbXBlZ19idWY7CisKKwkvKiBDb3VudCBvZiBQcm9ncmFtIFBhY2svUHJvZ3JhbSBTdHJlYW0gMSBwYWNrZXRzIGluc2VydGVkIGludG8gUFMgKi8KIAl1MzIgaW5zZXJ0ZWRfZnJhbWU7CiAKLQl1MzIgc3RhcnRbMl0sIGNvdW50OwotCXUzMiByYXdfc2l6ZTsKLQl1MzIgc2xpY2VkX3NpemU7CisJLyoKKwkgKiBBIGR1bW15IGRyaXZlciBzdHJlYW0gdHJhbnNmZXIgYnVmZmVyIHdpdGggYSBjb3B5IG9mIHRoZSBuZXh0CisJICogc2xpY2VkX21wZWdfZGF0YVtdIGJ1ZmZlciBmb3Igb3V0cHV0IHRvIHVzZXJsYW5kIGFwcHMuCisJICogT25seSB1c2VkIGluIGN4MTgtZmlsZW9wcy5jLCBidXQgaXRzIHN0YXRlIG5lZWRzIHRvIHBlcnNpc3QgYXQgdGltZXMuCisJICovCisJc3RydWN0IGN4MThfYnVmZmVyIHNsaWNlZF9tcGVnX2J1ZjsKIH07CiAKIC8qIFBlciBjeDIzNDE4LCBwZXIgSTJDIGJ1cyBwcml2YXRlIGFsZ28gY2FsbGJhY2sgZGF0YSAqLwpAQCAtMzgzLDE2ICs0OTQsMTcgQEAKIAogLyogU3RydWN0IHRvIGhvbGQgaW5mbyBhYm91dCBjeDE4IGNhcmRzICovCiBzdHJ1Y3QgY3gxOCB7Ci0JaW50IG51bTsJCS8qIGJvYXJkIG51bWJlciwgLTEgZHVyaW5nIGluaXQhICovCi0JY2hhciBuYW1lWzhdOwkJLyogYm9hcmQgbmFtZSBmb3IgcHJpbnRrIGFuZCBpbnRlcnJ1cHRzIChlLmcuICdjeDE4MCcpICovCi0Jc3RydWN0IHBjaV9kZXYgKmRldjsJLyogUENJIGRldmljZSAqLworCWludCBpbnN0YW5jZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZF9hdjsgICAgIC8qIEEvViBkZWNvZGVyL2RpZ2l0aXplciBzdWItZGV2aWNlICovCisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZF9leHRtdXg7IC8qIEV4dGVybmFsIG11bHRpcGxleGVyIHN1Yi1kZXYgKi8KKwogCWNvbnN0IHN0cnVjdCBjeDE4X2NhcmQgKmNhcmQ7CS8qIGNhcmQgaW5mb3JtYXRpb24gKi8KIAljb25zdCBjaGFyICpjYXJkX25hbWU7ICAvKiBmdWxsIG5hbWUgb2YgdGhlIGNhcmQgKi8KIAljb25zdCBzdHJ1Y3QgY3gxOF9jYXJkX3R1bmVyX2kyYyAqY2FyZF9pMmM7IC8qIGkyYyBhZGRyZXNzZXMgdG8gcHJvYmUgZm9yIHR1bmVyICovCiAJdTggaXNfNTBoejsKIAl1OCBpc182MGh6OwotCXU4IGlzX291dF81MGh6OwotCXU4IGlzX291dF82MGh6OwogCXU4IG5vZl9pbnB1dHM7CQkvKiBudW1iZXIgb2YgdmlkZW8gaW5wdXRzICovCiAJdTggbm9mX2F1ZGlvX2lucHV0czsJLyogbnVtYmVyIG9mIGF1ZGlvIGlucHV0cyAqLwogCXUxNiBidWZmZXJfaWQ7CQkvKiBidWZmZXIgSUQgY291bnRlciAqLwpAQCAtNDEzLDEwICs1MjUsNyBAQAogCiAJLyogZHVhbHdhdGNoICovCiAJdW5zaWduZWQgbG9uZyBkdWFsd2F0Y2hfamlmZmllczsKLQl1MTYgZHVhbHdhdGNoX3N0ZXJlb19tb2RlOwotCi0JLyogRGlnaXRpemVyIHR5cGUgKi8KLQlpbnQgZGlnaXRpemVyOwkJLyogMHgwMEVGID0gc2FhNzExNCAweDAwRk8gPSBzYWE3MTE1IDB4MDEwNiA9IG1pYyAqLworCXUzMiBkdWFsd2F0Y2hfc3RlcmVvX21vZGU7CiAKIAlzdHJ1Y3QgbXV0ZXggc2VyaWFsaXplX2xvY2s7ICAgIC8qIG11dGV4IHVzZWQgdG8gc2VyaWFsaXplIG9wZW4vY2xvc2Uvc3RhcnQvc3RvcC9pb2N0bCBvcGVyYXRpb25zICovCiAJc3RydWN0IGN4MThfb3B0aW9ucyBvcHRpb25zOyAJLyogVXNlciBvcHRpb25zICovCkBAIC00MjYsNyArNTM1LDYgQEAKIAl1bnNpZ25lZCBsb25nIGlfZmxhZ3M7ICAvKiBnbG9iYWwgY3gxOCBmbGFncyAqLwogCWF0b21pY190IGFuYV9jYXB0dXJpbmc7CS8qIGNvdW50IG51bWJlciBvZiBhY3RpdmUgYW5hbG9nIGNhcHR1cmUgc3RyZWFtcyAqLwogCWF0b21pY190IHRvdF9jYXB0dXJpbmc7CS8qIHRvdGFsIGNvdW50IG51bWJlciBvZiBhY3RpdmUgY2FwdHVyZSBzdHJlYW1zICovCi0Jc3BpbmxvY2tfdCBsb2NrOyAgICAgICAgLyogbG9jayBhY2Nlc3MgdG8gdGhpcyBzdHJ1Y3QgKi8KIAlpbnQgc2VhcmNoX3BhY2tfaGVhZGVyOwogCiAJaW50IG9wZW5faWQ7CQkvKiBpbmNyZW1lbnRlZCBlYWNoIHRpbWUgYW4gb3BlbiBvY2N1cnMsIHVzZWQgYXMKQEAgLTQ2OCwzMCArNTc2LDMwIEBACiAJc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwWzJdOwogCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSBpMmNfYWxnb1syXTsKIAlzdHJ1Y3QgY3gxOF9pMmNfYWxnb19jYWxsYmFja19kYXRhIGkyY19hbGdvX2NiX2RhdGFbMl07Ci0Jc3RydWN0IGkyY19jbGllbnQgaTJjX2NsaWVudFsyXTsKLQlzdHJ1Y3QgbXV0ZXggaTJjX2J1c19sb2NrWzJdOwotCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50c1tJMkNfQ0xJRU5UU19NQVhdOwogCiAJLyogZ3BpbyAqLwogCXUzMiBncGlvX2RpcjsKIAl1MzIgZ3Bpb192YWw7CiAJc3RydWN0IG11dGV4IGdwaW9fbG9jazsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2RfZ3Bpb211eDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2RfcmVzZXRjdHJsOwogCiAJLyogdjRsMiBhbmQgVXNlciBzZXR0aW5ncyAqLwogCiAJLyogY29kZWMgc2V0dGluZ3MgKi8KIAl1MzIgYXVkaW9faW5wdXQ7CiAJdTMyIGFjdGl2ZV9pbnB1dDsKLQl1MzIgYWN0aXZlX291dHB1dDsKIAl2NGwyX3N0ZF9pZCBzdGQ7CiAJdjRsMl9zdGRfaWQgdHVuZXJfc3RkOwkvKiBUaGUgbm9ybSBvZiB0aGUgdHVuZXIgKGZpeGVkKSAqLwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY3gxOCAqdG9fY3gxOChzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBjeDE4LCB2NGwyX2Rldik7Cit9CisKIC8qIEdsb2JhbHMgKi8KLWV4dGVybiBzdHJ1Y3QgY3gxOCAqY3gxOF9jYXJkc1tdOwotZXh0ZXJuIGludCBjeDE4X2NhcmRzX2FjdGl2ZTsKIGV4dGVybiBpbnQgY3gxOF9maXJzdF9taW5vcjsKLWV4dGVybiBzcGlubG9ja190IGN4MThfY2FyZHNfbG9jazsKIAogLyo9PT09PT09PT09PT09PVByb3RvdHlwZXM9PT09PT09PT09PT09PT09PT0qLwogCkBAIC01MTEsNCArNjE5LDIyIEBACiAJcmV0dXJuIGN4LT52YmkuaW4udHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwogfQogCisvKiBDYWxsIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZm9yIGFsbCBzdWJkZXZzIHdpdGggYSBncnBfaWQgYml0IG1hdGNoaW5nIHRoZQorICogbWFzayBpbiBodyAoaWYgMCwgdGhlbiBtYXRjaCB0aGVtIGFsbCkuIElnbm9yZSBhbnkgZXJyb3JzLiAqLworI2RlZmluZSBjeDE4X2NhbGxfaHcoY3gsIGh3LCBvLCBmLCBhcmdzLi4uKSBcCisJX192NGwyX2RldmljZV9jYWxsX3N1YmRldnMoJihjeCktPnY0bDJfZGV2LCBcCisJCQkJICAgIShodykgfHwgKHNkLT5ncnBfaWQgJiAoaHcpKSwgbywgZiAsICMjYXJncykKKworI2RlZmluZSBjeDE4X2NhbGxfYWxsKGN4LCBvLCBmLCBhcmdzLi4uKSBjeDE4X2NhbGxfaHcoY3gsIDAsIG8sIGYgLCAjI2FyZ3MpCisKKy8qIENhbGwgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBmb3IgYWxsIHN1YmRldnMgd2l0aCBhIGdycF9pZCBiaXQgbWF0Y2hpbmcgdGhlCisgKiBtYXNrIGluIGh3IChpZiAwLCB0aGVuIG1hdGNoIHRoZW0gYWxsKS4gSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgYW4gZXJyb3IKKyAqIG90aGVyIHRoYW4gMCBvciAtRU5PSU9DVExDTUQsIHRoZW4gcmV0dXJuIHdpdGggdGhhdCBlcnJvciBjb2RlLiAqLworI2RlZmluZSBjeDE4X2NhbGxfaHdfZXJyKGN4LCBodywgbywgZiwgYXJncy4uLikgXAorCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzX3VudGlsX2VyciggXAorCQkgICAmKGN4KS0+djRsMl9kZXYsICEoaHcpIHx8IChzZC0+Z3JwX2lkICYgKGh3KSksIG8sIGYgLCAjI2FyZ3MpCisKKyNkZWZpbmUgY3gxOF9jYWxsX2FsbF9lcnIoY3gsIG8sIGYsIGFyZ3MuLi4pIFwKKwljeDE4X2NhbGxfaHdfZXJyKGN4LCAwLCBvLCBmICwgIyNhcmdzKQorCiAjZW5kaWYgLyogQ1gxOF9EUklWRVJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYwppbmRleCBiZDVlNmYzLi4zYjg2ZjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAKIAlyZXQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmZHZiLT5kdmJfYWRhcHRlciwKIAkJCUNYMThfRFJJVkVSX05BTUUsCi0JCQlUSElTX01PRFVMRSwgJmN4LT5kZXYtPmRldiwgYWRhcHRlcl9ucik7CisJCQlUSElTX01PRFVMRSwgJmN4LT5wY2lfZGV2LT5kZXYsIGFkYXB0ZXJfbnIpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9vdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYwppbmRleCAwNTVmNmUwLi40ZDdkNmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5jCkBAIC0xMjgsMTUgKzEyOCwxNSBAQAogc3RhdGljIHZvaWQgY3gxOF9kdWFsd2F0Y2goc3RydWN0IGN4MTggKmN4KQogewogCXN0cnVjdCB2NGwyX3R1bmVyIHZ0OwotCXUxNiBuZXdfYml0bWFwOwotCXUxNiBuZXdfc3RlcmVvX21vZGU7Ci0JY29uc3QgdTE2IHN0ZXJlb19tYXNrID0gMHgwMzAwOwotCWNvbnN0IHUxNiBkdWFsID0gMHgwMjAwOworCXUzMiBuZXdfYml0bWFwOworCXUzMiBuZXdfc3RlcmVvX21vZGU7CisJY29uc3QgdTMyIHN0ZXJlb19tYXNrID0gMHgwMzAwOworCWNvbnN0IHUzMiBkdWFsID0gMHgwMjAwOwogCXUzMiBoOwogCiAJbmV3X3N0ZXJlb19tb2RlID0gY3gtPnBhcmFtcy5hdWRpb19wcm9wZXJ0aWVzICYgc3RlcmVvX21hc2s7CiAJbWVtc2V0KCZ2dCwgMCwgc2l6ZW9mKHZ0KSk7Ci0JY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfR19UVU5FUiwgJnZ0KTsKKwljeDE4X2NhbGxfYWxsKGN4LCB0dW5lciwgZ190dW5lciwgJnZ0KTsKIAlpZiAodnQuYXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzIgJiYKIAkJCSh2dC5yeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfTEFORzIpKQogCQluZXdfc3RlcmVvX21vZGUgPSBkdWFsOwpAQCAtMTc2LDYgKzE3Niw4IEBACiAJKmVyciA9IDA7CiAJd2hpbGUgKDEpIHsKIAkJaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHKSB7CisJCQkvKiBQcm9jZXNzIHBlbmRpbmcgcHJvZ3JhbSBpbmZvIHVwZGF0ZXMgYW5kIHBlbmRpbmcKKwkJCSAgIFZCSSBkYXRhICovCiAKIAkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGN4LT5kdWFsd2F0Y2hfamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpKSB7CiAJCQkJY3gtPmR1YWx3YXRjaF9qaWZmaWVzID0gamlmZmllczsKQEAgLTE4Niw3ICsxODgsNiBAQAogCQkJCXdoaWxlICgoYnVmID0gY3gxOF9kZXF1ZXVlKHNfdmJpLCAmc192YmktPnFfZnVsbCkpKSB7CiAJCQkJCS8qIGJ5dGVzd2FwIGFuZCBwcm9jZXNzIFZCSSBkYXRhICovCiAJCQkJCWN4MThfcHJvY2Vzc192YmlfZGF0YShjeCwgYnVmLAotCQkJCQkJCSAgICAgIHNfdmJpLT5kbWFfcHRzLAogCQkJCQkJCSAgICAgIHNfdmJpLT50eXBlKTsKIAkJCQkJY3gxOF9zdHJlYW1fcHV0X2J1Zl9mdyhzX3ZiaSwgYnVmKTsKIAkJCQl9CkBAIC0yMDcsOCArMjA4LDcgQEAKIAkJCQljeDE4X2J1Zl9zd2FwKGJ1Zik7CiAJCQllbHNlIHsKIAkJCQkvKiBieXRlc3dhcCBhbmQgcHJvY2VzcyBWQkkgZGF0YSAqLwotCQkJCWN4MThfcHJvY2Vzc192YmlfZGF0YShjeCwgYnVmLAotCQkJCQkJcy0+ZG1hX3B0cywgcy0+dHlwZSk7CisJCQkJY3gxOF9wcm9jZXNzX3ZiaV9kYXRhKGN4LCBidWYsIHMtPnR5cGUpOwogCQkJfQogCQkJcmV0dXJuIGJ1ZjsKIAkJfQpAQCAtMjYwLDYgKzI2MCwyMCBAQAogCQlsZW4gPSB1Y291bnQ7CiAJaWYgKGN4LT52YmkuaW5zZXJ0X21wZWcgJiYgcy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgJiYKIAkgICAgIWN4MThfcmF3X3ZiaShjeCkgJiYgYnVmICE9ICZjeC0+dmJpLnNsaWNlZF9tcGVnX2J1ZikgeworCQkvKgorCQkgKiBUcnkgdG8gZmluZCBhIGdvb2Qgc3BsaWNlIHBvaW50IGluIHRoZSBQUywganVzdCBiZWZvcmUKKwkJICogYW4gTVBFRy0yIFByb2dyYW0gUGFjayBzdGFydCBjb2RlLCBhbmQgcHJvdmlkZSBvbmx5CisJCSAqIHVwIHRvIHRoYXQgcG9pbnQgdG8gdGhlIHVzZXIsIHNvIGl0J3MgZWFzeSB0byBpbnNlcnQgVkJJIGRhdGEKKwkJICogdGhlIG5leHQgdGltZSBhcm91bmQuCisJCSAqLworCQkvKiBGSVhNRSAtIFRoaXMgb25seSB3b3JrcyBmb3IgYW4gTVBFRy0yIFBTLCBub3QgYSBUUyAqLworCQkvKgorCQkgKiBBbiBNUEVHLTIgUHJvZ3JhbSBTdHJlYW0gKFBTKSBpcyBhIHNlcmllcyBvZgorCQkgKiBNUEVHLTIgUHJvZ3JhbSBQYWNrcyB0ZXJtaW5hdGVkIGJ5IGFuCisJCSAqIE1QRUcgUHJvZ3JhbSBFbmQgQ29kZSBhZnRlciB0aGUgbGFzdCBQcm9ncmFtIFBhY2suCisJCSAqIEEgUHJvZ3JhbSBQYWNrIG1heSBob2xkIGEgUFMgU3lzdGVtIEhlYWRlciBwYWNrZXQgYW5kIGFueQorCQkgKiBudW1iZXIgb2YgUHJvZ3JhbSBFbGVtZW50YXJ5IFN0cmVhbSAoUEVTKSBQYWNrZXRzCisJCSAqLwogCQljb25zdCBjaGFyICpzdGFydCA9IGJ1Zi0+YnVmICsgYnVmLT5yZWFkcG9zOwogCQljb25zdCBjaGFyICpwID0gc3RhcnQgKyAxOwogCQljb25zdCB1OCAqcTsKQEAgLTI2NywzOCArMjgxLDU0IEBACiAJCWludCBzdHVmZmluZywgaTsKIAogCQl3aGlsZSAoc3RhcnQgKyBsZW4gPiBwKSB7CisJCQkvKiBTY2FuIGZvciBhIDAgdG8gZmluZCBhIHBvdGVudGlhbCBNUEVHLTIgc3RhcnQgY29kZSAqLwogCQkJcSA9IG1lbWNocihwLCAwLCBzdGFydCArIGxlbiAtIHApOwogCQkJaWYgKHEgPT0gTlVMTCkKIAkJCQlicmVhazsKIAkJCXAgPSBxICsgMTsKKwkJCS8qCisJCQkgKiBLZWVwIGxvb2tpbmcgaWYgbm90IGEKKwkJCSAqIE1QRUctMiBQYWNrIGhlYWRlciBzdGFydCBjb2RlOiAgMHgwMCAweDAwIDB4MDEgMHhiYQorCQkJICogb3IgTVBFRy0yIHZpZGVvIFBFUyBzdGFydCBjb2RlOiAweDAwIDB4MDAgMHgwMSAweGUwCisJCQkgKi8KIAkJCWlmICgoY2hhciAqKXEgKyAxNSA+PSBidWYtPmJ1ZiArIGJ1Zi0+Ynl0ZXN1c2VkIHx8CiAJCQkgICAgcVsxXSAhPSAwIHx8IHFbMl0gIT0gMSB8fCBxWzNdICE9IGNoKQogCQkJCWNvbnRpbnVlOworCisJCQkvKiBJZiBleHBlY3RpbmcgdGhlIHByaW1hcnkgdmlkZW8gUEVTICovCiAJCQlpZiAoIWN4LT5zZWFyY2hfcGFja19oZWFkZXIpIHsKKwkJCQkvKiBDb250aW51ZSBpZiBpdCBjb3VsZG4ndCBiZSBhIFBFUyBwYWNrZXQgKi8KIAkJCQlpZiAoKHFbNl0gJiAweGMwKSAhPSAweDgwKQogCQkJCQljb250aW51ZTsKLQkJCQlpZiAoKChxWzddICYgMHhjMCkgPT0gMHg4MCAmJgotCQkJCSAgICAgKHFbOV0gJiAweGYwKSA9PSAweDIwKSB8fAotCQkJCSAgICAoKHFbN10gJiAweGMwKSA9PSAweGMwICYmCi0JCQkJICAgICAocVs5XSAmIDB4ZjApID09IDB4MzApKSB7Ci0JCQkJCWNoID0gMHhiYTsKKwkJCQkvKiBDaGVjayBpZiBhIFBUUyBvciBQVFMgJiBEVFMgZm9sbG93ICovCisJCQkJaWYgKCgocVs3XSAmIDB4YzApID09IDB4ODAgJiYgIC8qIFBUUyBvbmx5ICovCisJCQkJICAgICAocVs5XSAmIDB4ZjApID09IDB4MjApIHx8IC8qIFBUUyBvbmx5ICovCisJCQkJICAgICgocVs3XSAmIDB4YzApID09IDB4YzAgJiYgIC8qIFBUUyAmIERUUyAqLworCQkJCSAgICAgKHFbOV0gJiAweGYwKSA9PSAweDMwKSkgeyAvKiBEVFMgZm9sbG93cyAqLworCQkJCQkvKiBBc3N1bWUgd2UgZm91bmQgdGhlIHZpZGVvIFBFUyBoZHIgKi8KKwkJCQkJY2ggPSAweGJhOyAvKiBuZXh0IHdhbnQgYSBQcm9ncmFtIFBhY2sqLwogCQkJCQljeC0+c2VhcmNoX3BhY2tfaGVhZGVyID0gMTsKLQkJCQkJcCA9IHEgKyA5OworCQkJCQlwID0gcSArIDk7IC8qIFNraXAgdGhpcyB2aWRlbyBQRVMgaGRyICovCiAJCQkJfQogCQkJCWNvbnRpbnVlOwogCQkJfQorCisJCQkvKiBXZSBtYXkgaGF2ZSBmb3VuZCBhIFByb2dyYW0gUGFjayBzdGFydCBjb2RlICovCisKKwkJCS8qIEdldCB0aGUgY291bnQgb2Ygc3R1ZmZpbmcgYnl0ZXMgJiB2ZXJpZnkgdGhlbSAqLwogCQkJc3R1ZmZpbmcgPSBxWzEzXSAmIDc7CiAJCQkvKiBhbGwgc3R1ZmZpbmcgYnl0ZXMgbXVzdCBiZSAweGZmICovCiAJCQlmb3IgKGkgPSAwOyBpIDwgc3R1ZmZpbmc7IGkrKykKIAkJCQlpZiAocVsxNCArIGldICE9IDB4ZmYpCiAJCQkJCWJyZWFrOwotCQkJaWYgKGkgPT0gc3R1ZmZpbmcgJiYKLQkJCSAgICAocVs0XSAmIDB4YzQpID09IDB4NDQgJiYKLQkJCSAgICAocVsxMl0gJiAzKSA9PSAzICYmCi0JCQkgICAgcVsxNCArIHN0dWZmaW5nXSA9PSAwICYmCisJCQlpZiAoaSA9PSBzdHVmZmluZyAmJiAvKiByaWdodCBudW1iZXIgb2Ygc3R1ZmZpbmcgYnl0ZXMqLworCQkJICAgIChxWzRdICYgMHhjNCkgPT0gMHg0NCAmJiAvKiBtYXJrZXIgY2hlY2sgKi8KKwkJCSAgICAocVsxMl0gJiAzKSA9PSAzICYmICAvKiBtYXJrZXIgY2hlY2sgKi8KKwkJCSAgICBxWzE0ICsgc3R1ZmZpbmddID09IDAgJiYgLyogUEVTIFBhY2sgb3IgU3lzIEhkciAqLwogCQkJICAgIHFbMTUgKyBzdHVmZmluZ10gPT0gMCAmJgogCQkJICAgIHFbMTYgKyBzdHVmZmluZ10gPT0gMSkgewotCQkJCWN4LT5zZWFyY2hfcGFja19oZWFkZXIgPSAwOworCQkJCS8qIFdlIGRlY2xhcmUgd2UgYWN0dWFsbHkgZm91bmQgYSBQcm9ncmFtIFBhY2sqLworCQkJCWN4LT5zZWFyY2hfcGFja19oZWFkZXIgPSAwOyAvKiBleHBlY3QgdmlkIFBFUyAqLwogCQkJCWxlbiA9IChjaGFyICopcSAtIHN0YXJ0OwogCQkJCWN4MThfc2V0dXBfc2xpY2VkX3ZiaV9idWYoY3gpOwogCQkJCWJyZWFrOwpAQCAtNTc4LDcgKzYwOCw3IEBACiAJCS8qIE1hcmsgdGhhdCB0aGUgcmFkaW8gaXMgbm8gbG9uZ2VyIGluIHVzZSAqLwogCQljbGVhcl9iaXQoQ1gxOF9GX0lfUkFESU9fVVNFUiwgJmN4LT5pX2ZsYWdzKTsKIAkJLyogU3dpdGNoIHR1bmVyIHRvIFRWICovCi0JCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVklESU9DX1NfU1RELCAmY3gtPnN0ZCk7CisJCWN4MThfY2FsbF9hbGwoY3gsIHR1bmVyLCBzX3N0ZCwgY3gtPnN0ZCk7CiAJCS8qIFNlbGVjdCBjb3JyZWN0IGF1ZGlvIGlucHV0IChpLmUuIFRWIHR1bmVyIG9yIExpbmUgaW4pICovCiAJCWN4MThfYXVkaW9fc2V0X2lvKGN4KTsKIAkJaWYgKGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZykgPiAwKSB7CkBAIC02NDEsNyArNjcxLDcgQEAKIAkJLyogV2UgaGF2ZSB0aGUgcmFkaW8gKi8KIAkJY3gxOF9tdXRlKGN4KTsKIAkJLyogU3dpdGNoIHR1bmVyIHRvIHJhZGlvICovCi0JCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgQVVEQ19TRVRfUkFESU8sIE5VTEwpOworCQljeDE4X2NhbGxfYWxsKGN4LCB0dW5lciwgc19yYWRpbyk7CiAJCS8qIFNlbGVjdCB0aGUgY29ycmVjdCBhdWRpbyBpbnB1dCAoaS5lLiByYWRpbyB0dW5lcikgKi8KIAkJY3gxOF9hdWRpb19zZXRfaW8oY3gpOwogCQkvKiBEb25lISBVbm11dGUgYW5kIGNvbnRpbnVlLiAqLwpAQCAtNjUyLDM4ICs2ODIsMTUgQEAKIAogaW50IGN4MThfdjRsMl9vcGVuKHN0cnVjdCBmaWxlICpmaWxwKQogewotCWludCByZXMsIHgsIHkgPSAwOwotCXN0cnVjdCBjeDE4ICpjeCA9IE5VTEw7Ci0Jc3RydWN0IGN4MThfc3RyZWFtICpzID0gTlVMTDsKLQlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbHApLT5taW5vcjsKLQotCS8qIEZpbmQgd2hpY2ggY2FyZCB0aGlzIG9wZW4gd2FzIG9uICovCi0Jc3Bpbl9sb2NrKCZjeDE4X2NhcmRzX2xvY2spOwotCWZvciAoeCA9IDA7IGN4ID09IE5VTEwgJiYgeCA8IGN4MThfY2FyZHNfYWN0aXZlOyB4KyspIHsKLQkJLyogZmluZCBvdXQgd2hpY2ggc3RyZWFtIHRoaXMgb3BlbiB3YXMgb24gKi8KLQkJZm9yICh5ID0gMDsgeSA8IENYMThfTUFYX1NUUkVBTVM7IHkrKykgewotCQkJaWYgKGN4MThfY2FyZHNbeF0gPT0gTlVMTCkKLQkJCQljb250aW51ZTsKLQkJCXMgPSAmY3gxOF9jYXJkc1t4XS0+c3RyZWFtc1t5XTsKLQkJCWlmIChzLT52NGwyZGV2ICYmIHMtPnY0bDJkZXYtPm1pbm9yID09IG1pbm9yKSB7Ci0JCQkJY3ggPSBjeDE4X2NhcmRzW3hdOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCXNwaW5fdW5sb2NrKCZjeDE4X2NhcmRzX2xvY2spOwotCi0JaWYgKGN4ID09IE5VTEwpIHsKLQkJLyogQ291bGRuJ3QgZmluZCBhIGRldmljZSByZWdpc3RlcmVkCi0JCSAgIG9uIHRoYXQgbWlub3IsIHNob3VsZG4ndCBoYXBwZW4hICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIGN4MTggZGV2aWNlIGZvdW5kIG9uIG1pbm9yICVkXG4iLAotCQkJCW1pbm9yKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9CisJaW50IHJlczsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXYgPSB2aWRlb19kZXZkYXRhKGZpbHApOworCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2Rldik7CisJc3RydWN0IGN4MTggKmN4ID0gcy0+Y3g7OwogCiAJbXV0ZXhfbG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAlpZiAoY3gxOF9pbml0X29uX2ZpcnN0X29wZW4oY3gpKSB7Ci0JCUNYMThfRVJSKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBvbiBtaW5vciAlZFxuIiwgbWlub3IpOworCQlDWDE4X0VSUigiRmFpbGVkIHRvIGluaXRpYWxpemUgb24gbWlub3IgJWRcbiIsCisJCQkgdmlkZW9fZGV2LT5taW5vcik7CiAJCW11dGV4X3VubG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maXJtd2FyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlybXdhcmUuYwppbmRleCAxZmE5NWRhLi44M2NkNTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpcm13YXJlLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjeDE4LWlycS5oIgogI2luY2x1ZGUgImN4MTgtZmlybXdhcmUuaCIKICNpbmNsdWRlICJjeDE4LWNhcmRzLmgiCi0jaW5jbHVkZSAiY3gxOC1hdi1jb3JlLmgiCiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAogI2RlZmluZSBDWDE4X1BST0NfU09GVF9SRVNFVCAJCTB4YzcwMDEwCkBAIC0xMDcsNyArMTA2LDcgQEAKIAl1MzIgX19pb21lbSAqZHN0ID0gKHUzMiBfX2lvbWVtICopbWVtOwogCWNvbnN0IHUzMiAqc3JjOwogCi0JaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmbiwgJmN4LT5kZXYtPmRldikpIHsKKwlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIGZuLCAmY3gtPnBjaV9kZXYtPmRldikpIHsKIAkJQ1gxOF9FUlIoIlVuYWJsZSB0byBvcGVuIGZpcm13YXJlICVzXG4iLCBmbik7CiAJCUNYMThfRVJSKCJEaWQgeW91IHB1dCB0aGUgZmlybXdhcmUgaW4gdGhlIGhvdHBsdWcgZmlybXdhcmUgZGlyZWN0b3J5P1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTUxLDcgKzE1MCw3IEBACiAJdTMyIGFwdV92ZXJzaW9uID0gMDsKIAlpbnQgc3o7CiAKLQlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIGZuLCAmY3gtPmRldi0+ZGV2KSkgeworCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgZm4sICZjeC0+cGNpX2Rldi0+ZGV2KSkgewogCQlDWDE4X0VSUigidW5hYmxlIHRvIG9wZW4gZmlybXdhcmUgJXNcbiIsIGZuKTsKIAkJQ1gxOF9FUlIoImRpZCB5b3UgcHV0IHRoZSBmaXJtd2FyZSBpbiB0aGUgaG90cGx1ZyBmaXJtd2FyZSBkaXJlY3Rvcnk/XG4iKTsKIAkJY3gxOF9zZXR1cF9wYWdlKGN4LCAwKTsKQEAgLTI4NiwyMyArMjg1LDYgQEAKIAljeDE4X3dyaXRlX3JlZyhjeCwgMHgyQkUyRkUsIENYMThfTVBFR19DTE9DS19QTExfRlJBQyk7CiAJY3gxOF93cml0ZV9yZWcoY3gsIDgsIENYMThfTVBFR19DTE9DS19QTExfUE9TVCk7CiAKLQkvKgotCSAqIFZEQ0xLICBJbnRlZ2VyID0gMHgwZiwgUG9zdCBEaXZpZGVyID0gMHgwNAotCSAqIEFJTUNMSyBJbnRlZ2VyID0gMHgwZSwgUG9zdCBEaXZpZGVyID0gMHgxNgotCSAqLwotCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfUExMX0NUUkwxLCAweDE2MGUwNDBmKTsKLQotCS8qIFZEQ0xLIEZyYWN0aW9uID0gMHgyYmUyZmUgKi8KLQkvKiB4dGFsICogMHhmLjE1ZjE3ZjAvNCA9IDEwOCBNSHo6IDQzMiBNSHogYmVmb3JlIHBvc3QgZGl2aWRlICovCi0JY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19WSURfUExMX0ZSQUMsIDB4MDAyYmUyZmUpOwotCi0JLyogQUlNQ0xLIEZyYWN0aW9uID0gMHgwNTIyN2FkICovCi0JLyogeHRhbCAqIDB4ZS4yOTEzZDY4LzB4MTYgPSA0ODAwMCAqIDM4NDogNDA2IE1IeiBiZWZvcmUgcG9zdC1kaXZpZGUgKi8KLQljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX0FVWF9QTExfRlJBQywgMHgwMDUyMjdhZCk7Ci0KLQkvKiBTQV9NQ0xLX1NFTD0xLCBTQV9NQ0xLX0RJVj0weDE2ICovCi0JY3gxOF9hdl93cml0ZShjeCwgQ1hBREVDX0kyU19NQ0xLLCAweDU2KTsKLQogCS8qIERlZmF1bHRzICovCiAJLyogQVBVID0gU0Mgb3IgU0MvMiA9IDEyNS82Mi41ICovCiAJLyogRVBVID0gU0MgPSAxMjUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uYwppbmRleCAxYTk5MzI5Li41NTE4ZDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5jCkBAIC00Niw2ICs0Niw5IEBACiAgKiBncGlvMTM6IGNzNTM0NSByZXNldCBwaW4KICovCiAKKy8qCisgKiBGaWxlIHNjb3BlIHV0aWxpdHkgZnVuY3Rpb25zCisgKi8KIHN0YXRpYyB2b2lkIGdwaW9fd3JpdGUoc3RydWN0IGN4MTggKmN4KQogewogCXUzMiBkaXJfbG8gPSBjeC0+Z3Bpb19kaXIgJiAweGZmZmY7CkBAIC02Myw3MyArNjYsMjAxIEBACiAJCQkJCUNYMThfUkVHX0dQSU9fT1VUMiwgdmFsX2hpLCBkaXJfaGkpOwogfQogCi12b2lkIGN4MThfcmVzZXRfaTJjX3NsYXZlc19ncGlvKHN0cnVjdCBjeDE4ICpjeCkKK3N0YXRpYyB2b2lkIGdwaW9fdXBkYXRlKHN0cnVjdCBjeDE4ICpjeCwgdTMyIG1hc2ssIHUzMiBkYXRhKQogewotCWNvbnN0IHN0cnVjdCBjeDE4X2dwaW9faTJjX3NsYXZlX3Jlc2V0ICpwOwotCi0JcCA9ICZjeC0+Y2FyZC0+Z3Bpb19pMmNfc2xhdmVfcmVzZXQ7Ci0KLQlpZiAoKHAtPmFjdGl2ZV9sb19tYXNrIHwgcC0+YWN0aXZlX2hpX21hc2spID09IDApCisJaWYgKG1hc2sgPT0gMCkKIAkJcmV0dXJuOwogCi0JLyogQXNzdW1pbmcgdGhhdCB0aGUgbWFza3MgYXJlIGEgc3Vic2V0IG9mIHRoZSBiaXRzIGluIGdwaW9fZGlyICovCisJbXV0ZXhfbG9jaygmY3gtPmdwaW9fbG9jayk7CisJY3gtPmdwaW9fdmFsID0gKGN4LT5ncGlvX3ZhbCAmIH5tYXNrKSB8IChkYXRhICYgbWFzayk7CisJZ3Bpb193cml0ZShjeCk7CisJbXV0ZXhfdW5sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKK30KKworc3RhdGljIHZvaWQgZ3Bpb19yZXNldF9zZXEoc3RydWN0IGN4MTggKmN4LCB1MzIgYWN0aXZlX2xvLCB1MzIgYWN0aXZlX2hpLAorCQkJICAgdW5zaWduZWQgaW50IGFzc2VydF9tc2VjcywKKwkJCSAgIHVuc2lnbmVkIGludCByZWNvdmVyeV9tc2VjcykKK3sKKwl1MzIgbWFzazsKKworCW1hc2sgPSBhY3RpdmVfbG8gfCBhY3RpdmVfaGk7CisJaWYgKG1hc2sgPT0gMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBc3N1bWluZyB0aGF0IGFjdGl2ZV9oaSBhbmQgYWN0aXZlX2xvIGFyZSBhIHN1YnNldHMgb2YgdGhlIGJpdHMgaW4KKwkgKiBncGlvX2Rpci4gIEFsc28gYXNzdW1lcyB0aGF0IGFjdGl2ZV9sbyBhbmQgYWN0aXZlX2hpIGRvbid0IG92ZXJsYXAKKwkgKiBpbiBhbnkgYml0IHBvc2l0aW9uCisJICovCiAKIAkvKiBBc3NlcnQgKi8KLQltdXRleF9sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKLQljeC0+Z3Bpb192YWwgPQotCQkoY3gtPmdwaW9fdmFsIHwgcC0+YWN0aXZlX2hpX21hc2spICYgfihwLT5hY3RpdmVfbG9fbWFzayk7Ci0JZ3Bpb193cml0ZShjeCk7Ci0Jc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcyhwLT5tc2Vjc19hc3NlcnRlZCkpOworCWdwaW9fdXBkYXRlKGN4LCBtYXNrLCB+YWN0aXZlX2xvKTsKKwlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKGFzc2VydF9tc2VjcykpOwogCiAJLyogRGVhc3NlcnQgKi8KLQljeC0+Z3Bpb192YWwgPQotCQkoY3gtPmdwaW9fdmFsIHwgcC0+YWN0aXZlX2xvX21hc2spICYgfihwLT5hY3RpdmVfaGlfbWFzayk7Ci0JZ3Bpb193cml0ZShjeCk7Ci0Jc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcyhwLT5tc2Vjc19yZWNvdmVyeSkpOwotCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7CisJZ3Bpb191cGRhdGUoY3gsIG1hc2ssIH5hY3RpdmVfaGkpOworCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMocmVjb3ZlcnlfbXNlY3MpKTsKIH0KIAotdm9pZCBjeDE4X3Jlc2V0X2lyX2dwaW8odm9pZCAqZGF0YSkKKy8qCisgKiBHUElPIE11bHRpcGxleGVyIC0gbG9naWNhbCBkZXZpY2UKKyAqLworc3RhdGljIGludCBncGlvbXV4X2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKLQlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X2kyY19hbGdvX2NhbGxiYWNrX2RhdGEgKilkYXRhKS0+Y3g7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwltdXRleF9sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKKwlDWDE4X0lORk9fREVWKHNkLCAiR1BJTzogIGRpcmVjdGlvbiAweCUwOHgsIHZhbHVlIDB4JTA4eFxuIiwKKwkJICAgICAgY3gtPmdwaW9fZGlyLCBjeC0+Z3Bpb192YWwpOworCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb211eF9zX3JhZGlvKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwkvKgorCSAqIEZJWE1FIC0gd29yayBvdXQgdGhlIGN4LT5hY3RpdmUvYXVkaW9faW5wdXQgbWVzcyAtIHRoaXMgaXMKKwkgKiBpbnRlbmRlZCB0byBoYW5kbGUgdGhlIHN3aXRjaCB0byByYWRpbyBtb2RlIGFuZCBzZXQgdGhlCisJICogYXVkaW8gcm91dGluZywgYnV0IHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBpbiBjeAorCSAqLworCWdwaW9fdXBkYXRlKGN4LCBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC5tYXNrLAorCQkJY3gtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQucmFkaW8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdwaW9tdXhfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgbm9ybSkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1MzIgZGF0YTsKKworCXN3aXRjaCAoY3gtPmNhcmQtPmF1ZGlvX2lucHV0c1tjeC0+YXVkaW9faW5wdXRdLm11eGVyX2lucHV0KSB7CisJY2FzZSAxOgorCQlkYXRhID0gY3gtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQubGluZWluOworCQlicmVhazsKKwljYXNlIDA6CisJCWRhdGEgPSBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC50dW5lcjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyoKKwkJICogRklYTUUgLSB3b3JrIG91dCB0aGUgY3gtPmFjdGl2ZS9hdWRpb19pbnB1dCBtZXNzIC0gdGhpcyBpcworCQkgKiBpbnRlbmRlZCB0byBoYW5kbGUgdGhlIHN3aXRjaCBmcm9tIHJhZGlvIG1vZGUgYW5kIHNldCB0aGUKKwkJICogYXVkaW8gcm91dGluZywgYnV0IHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBpbiBjeAorCQkgKi8KKwkJZGF0YSA9IGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0LnR1bmVyOworCQlicmVhazsKKwl9CisJZ3Bpb191cGRhdGUoY3gsIGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0Lm1hc2ssIGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdwaW9tdXhfc19hdWRpb19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJICAgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJdTMyIGRhdGE7CisKKwlzd2l0Y2ggKHJvdXRlLT5pbnB1dCkgeworCWNhc2UgMDoKKwkJZGF0YSA9IGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0LnR1bmVyOworCQlicmVhazsKKwljYXNlIDE6CisJCWRhdGEgPSBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC5saW5laW47CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZGF0YSA9IGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0LnJhZGlvOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZ3Bpb191cGRhdGUoY3gsIGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0Lm1hc2ssIGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGdwaW9tdXhfY29yZV9vcHMgPSB7CisJLmxvZ19zdGF0dXMgPSBncGlvbXV4X2xvZ19zdGF0dXMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyBncGlvbXV4X3R1bmVyX29wcyA9IHsKKwkuc19zdGQgPSBncGlvbXV4X3Nfc3RkLAorCS5zX3JhZGlvID0gZ3Bpb211eF9zX3JhZGlvLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9hdWRpb19vcHMgZ3Bpb211eF9hdWRpb19vcHMgPSB7CisJLnNfcm91dGluZyA9IGdwaW9tdXhfc19hdWRpb19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgZ3Bpb211eF9vcHMgPSB7CisJLmNvcmUgPSAmZ3Bpb211eF9jb3JlX29wcywKKwkudHVuZXIgPSAmZ3Bpb211eF90dW5lcl9vcHMsCisJLmF1ZGlvID0gJmdwaW9tdXhfYXVkaW9fb3BzLAorfTsKKworLyoKKyAqIEdQSU8gUmVzZXQgQ29udHJvbGxlciAtIGxvZ2ljYWwgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgcmVzZXRjdHJsX2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCW11dGV4X2xvY2soJmN4LT5ncGlvX2xvY2spOworCUNYMThfSU5GT19ERVYoc2QsICJHUElPOiAgZGlyZWN0aW9uIDB4JTA4eCwgdmFsdWUgMHglMDh4XG4iLAorCQkgICAgICBjeC0+Z3Bpb19kaXIsIGN4LT5ncGlvX3ZhbCk7CisJbXV0ZXhfdW5sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZXNldGN0cmxfcmVzZXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAljb25zdCBzdHJ1Y3QgY3gxOF9ncGlvX2kyY19zbGF2ZV9yZXNldCAqcDsKIAogCXAgPSAmY3gtPmNhcmQtPmdwaW9faTJjX3NsYXZlX3Jlc2V0OwotCi0JaWYgKHAtPmlyX3Jlc2V0X21hc2sgPT0gMCkKLQkJcmV0dXJuOwotCi0JQ1gxOF9ERUJVR19JTkZPKCJSZXNldHRpbmcgSVIgbWljcm9jb250cm9sbGVyXG4iKTsKLQotCS8qCi0JICAgQXNzZXJ0IHRpbWluZyBmb3IgdGhlIFo4RjA4MTEgb24gSFZSLTE2MDAgYm9hcmRzOgotCSAgIDEuIEFzc2VydCBSRVNFVCBmb3IgbWluIG9mIDQgY2xvY2sgY3ljbGVzIGF0IDE4LjQzMiBNSHogdG8gaW5pdGlhdGUKLQkgICAyLiBSZXNldCB0aGVuIHRha2VzIDY2IFdEVCBjeWNsZXMgYXQgMTAga0h6ICsgMTYgeHRhbCBjbG9jayBjeWNsZXMKLQkJKDYsNjAxLDA4NSBuYW5vc2Vjb25kcyB+PSA3IG1pbGxpc2Vjb25kcykKLQkgICAzLiBEQkcgcGluIG11c3QgYmUgaGlnaCBiZWZvcmUgY2hpcCBleGl0cyByZXNldCBmb3Igbm9ybWFsIG9wZXJhdGlvbi4KLQkJREJHIGlzIG9wZW4gZHJhaW4gYW5kIGhvcGVmdWxseSBwdWxsZWQgaGlnaCBzaW5jZSB3ZSBkb24ndAotCQlub3JtYWxseSBkcml2ZSBpdCAoR1BJTyAxPykgZm9yIHRoZSBIVlItMTYwMAotCSAgIDQuIFo4RjA4MTEgd29uJ3QgZXhpdCByZXNldCB1bnRpbCBSRVNFVCBpcyBkZWFzc2VydGVkCi0JKi8KLQltdXRleF9sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKLQljeC0+Z3Bpb192YWwgPSBjeC0+Z3Bpb192YWwgJiB+cC0+aXJfcmVzZXRfbWFzazsKLQlncGlvX3dyaXRlKGN4KTsKLQltdXRleF91bmxvY2soJmN4LT5ncGlvX2xvY2spOwotCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMocC0+bXNlY3NfYXNzZXJ0ZWQpKTsKLQotCS8qCi0JICAgWmlsb2cgY29tZXMgb3V0IG9mIHJlc2V0LCBsb2FkcyByZXNldCB2ZWN0b3IgYWRkcmVzcyBhbmQgZXhlY3V0ZXMKLQkgICBmcm9tIHRoZXJlLiBSZXF1aXJlZCByZWNvdmVyeSBkZWxheSB1bmtub3duLgotCSovCi0JbXV0ZXhfbG9jaygmY3gtPmdwaW9fbG9jayk7Ci0JY3gtPmdwaW9fdmFsID0gY3gtPmdwaW9fdmFsIHwgcC0+aXJfcmVzZXRfbWFzazsKLQlncGlvX3dyaXRlKGN4KTsKLQltdXRleF91bmxvY2soJmN4LT5ncGlvX2xvY2spOwotCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMocC0+bXNlY3NfcmVjb3ZlcnkpKTsKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgQ1gxOF9HUElPX1JFU0VUX0kyQzoKKwkJZ3Bpb19yZXNldF9zZXEoY3gsIHAtPmFjdGl2ZV9sb19tYXNrLCBwLT5hY3RpdmVfaGlfbWFzaywKKwkJCSAgICAgICBwLT5tc2Vjc19hc3NlcnRlZCwgcC0+bXNlY3NfcmVjb3ZlcnkpOworCQlicmVhazsKKwljYXNlIENYMThfR1BJT19SRVNFVF9aOEYwODExOgorCQkvKgorCQkgKiBBc3NlcnQgdGltaW5nIGZvciB0aGUgWjhGMDgxMSBvbiBIVlItMTYwMCBib2FyZHM6CisJCSAqIDEuIEFzc2VydCBSRVNFVCBmb3IgbWluIG9mIDQgY2xvY2sgY3ljbGVzIGF0IDE4LjQzMiBNSHogdG8KKwkJICogICAgaW5pdGlhdGUKKwkJICogMi4gUmVzZXQgdGhlbiB0YWtlcyA2NiBXRFQgY3ljbGVzIGF0IDEwIGtIeiArIDE2IHh0YWwgY2xvY2sKKwkJICogICAgY3ljbGVzICg2LDYwMSwwODUgbmFub3NlY29uZHMgfj0gNyBtaWxsaXNlY29uZHMpCisJCSAqIDMuIERCRyBwaW4gbXVzdCBiZSBoaWdoIGJlZm9yZSBjaGlwIGV4aXRzIHJlc2V0IGZvciBub3JtYWwKKwkJICogICAgb3BlcmF0aW9uLiAgREJHIGlzIG9wZW4gZHJhaW4gYW5kIGhvcGVmdWxseSBwdWxsZWQgaGlnaAorCQkgKiAgICBzaW5jZSB3ZSBkb24ndCBub3JtYWxseSBkcml2ZSBpdCAoR1BJTyAxPykgZm9yIHRoZQorCQkgKiAgICBIVlItMTYwMAorCQkgKiA0LiBaOEYwODExIHdvbid0IGV4aXQgcmVzZXQgdW50aWwgUkVTRVQgaXMgZGVhc3NlcnRlZAorCQkgKiA1LiBaaWxvZyBjb21lcyBvdXQgb2YgcmVzZXQsIGxvYWRzIHJlc2V0IHZlY3RvciBhZGRyZXNzIGFuZAorCQkgKiAgICBleGVjdXRlcyBmcm9tIHRoZXJlLiBSZXF1aXJlZCByZWNvdmVyeSBkZWxheSB1bmtub3duLgorCQkgKi8KKwkJZ3Bpb19yZXNldF9zZXEoY3gsIHAtPmlyX3Jlc2V0X21hc2ssIDAsCisJCQkgICAgICAgcC0+bXNlY3NfYXNzZXJ0ZWQsIHAtPm1zZWNzX3JlY292ZXJ5KTsKKwkJYnJlYWs7CisJY2FzZSBDWDE4X0dQSU9fUkVTRVRfWEMyMDI4OgorCQlpZiAoY3gtPmNhcmQtPnR1bmVyc1swXS50dW5lciA9PSBUVU5FUl9YQzIwMjgpCisJCQlncGlvX3Jlc2V0X3NlcShjeCwgKDEgPDwgY3gtPmNhcmQtPnhjZWl2ZV9waW4pLCAwLAorCQkJCSAgICAgICAxLCAxKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChjeDE4X3Jlc2V0X2lyX2dwaW8pOwotLyogVGhpcyBzeW1ib2wgaXMgZXhwb3J0ZWQgZm9yIHVzZSBieSBhbiBpbmZyYXJlZCBtb2R1bGUgZm9yIHRoZSBJUi1ibGFzdGVyICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgcmVzZXRjdHJsX2NvcmVfb3BzID0geworCS5sb2dfc3RhdHVzID0gcmVzZXRjdHJsX2xvZ19zdGF0dXMsCisJLnJlc2V0ID0gcmVzZXRjdHJsX3Jlc2V0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgcmVzZXRjdHJsX29wcyA9IHsKKwkuY29yZSA9ICZyZXNldGN0cmxfY29yZV9vcHMsCit9OworCisvKgorICogRXh0ZXJuYWwgZW50cnkgcG9pbnRzCisgKi8KIHZvaWQgY3gxOF9ncGlvX2luaXQoc3RydWN0IGN4MTggKmN4KQogewogCW11dGV4X2xvY2soJmN4LT5ncGlvX2xvY2spOwpAQCAtMTU2LDYgKzI4Nyw0OSBAQAogCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7CiB9CiAKK2ludCBjeDE4X2dwaW9fcmVnaXN0ZXIoc3RydWN0IGN4MTggKmN4LCB1MzIgaHcpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwljb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzICpvcHM7CisJY2hhciAqc3RyOworCisJc3dpdGNoIChodykgeworCWNhc2UgQ1gxOF9IV19HUElPX01VWDoKKwkJc2QgPSAmY3gtPnNkX2dwaW9tdXg7CisJCW9wcyA9ICZncGlvbXV4X29wczsKKwkJc3RyID0gImdwaW8tbXV4IjsKKwkJYnJlYWs7CisJY2FzZSBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTDoKKwkJc2QgPSAmY3gtPnNkX3Jlc2V0Y3RybDsKKwkJb3BzID0gJnJlc2V0Y3RybF9vcHM7CisJCXN0ciA9ICJncGlvLXJlc2V0LWN0cmwiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2NGwyX3N1YmRldl9pbml0KHNkLCBvcHMpOworCXY0bDJfc2V0X3N1YmRldmRhdGEoc2QsIGN4KTsKKwlzbnByaW50ZihzZC0+bmFtZSwgc2l6ZW9mKHNkLT5uYW1lKSwgIiVzICVzIiwgY3gtPnY0bDJfZGV2Lm5hbWUsIHN0cik7CisJc2QtPmdycF9pZCA9IGh3OworCXJldHVybiB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoJmN4LT52NGwyX2Rldiwgc2QpOworfQorCit2b2lkIGN4MThfcmVzZXRfaXJfZ3Bpbyh2b2lkICpkYXRhKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgoKHN0cnVjdCB2NGwyX2RldmljZSAqKWRhdGEpOworCisJaWYgKGN4LT5jYXJkLT5ncGlvX2kyY19zbGF2ZV9yZXNldC5pcl9yZXNldF9tYXNrID09IDApCisJCXJldHVybjsKKworCUNYMThfREVCVUdfSU5GTygiUmVzZXR0aW5nIElSIG1pY3JvY29udHJvbGxlclxuIik7CisKKwl2NGwyX3N1YmRldl9jYWxsKCZjeC0+c2RfcmVzZXRjdHJsLAorCQkJIGNvcmUsIHJlc2V0LCBDWDE4X0dQSU9fUkVTRVRfWjhGMDgxMSk7Cit9CitFWFBPUlRfU1lNQk9MKGN4MThfcmVzZXRfaXJfZ3Bpbyk7CisvKiBUaGlzIHN5bWJvbCBpcyBleHBvcnRlZCBmb3IgdXNlIGJ5IGxpcmNfcHZyMTUwIGZvciB0aGUgSVItYmxhc3RlciAqLworCiAvKiBYY2VpdmUgdHVuZXIgcmVzZXQgZnVuY3Rpb24gKi8KIGludCBjeDE4X3Jlc2V0X3R1bmVyX2dwaW8odm9pZCAqZGV2LCBpbnQgY29tcG9uZW50LCBpbnQgY21kLCBpbnQgdmFsdWUpCiB7CkBAIC0xNjMsNTYgKzMzNywxMSBAQAogCXN0cnVjdCBjeDE4X2kyY19hbGdvX2NhbGxiYWNrX2RhdGEgKmNiX2RhdGEgPSBhbGdvLT5kYXRhOwogCXN0cnVjdCBjeDE4ICpjeCA9IGNiX2RhdGEtPmN4OwogCi0JaWYgKGNtZCAhPSBYQzIwMjhfVFVORVJfUkVTRVQpCisJaWYgKGNtZCAhPSBYQzIwMjhfVFVORVJfUkVTRVQgfHwKKwkgICAgY3gtPmNhcmQtPnR1bmVyc1swXS50dW5lciAhPSBUVU5FUl9YQzIwMjgpCiAJCXJldHVybiAwOwotCUNYMThfREVCVUdfSU5GTygiUmVzZXR0aW5nIHR1bmVyXG4iKTsKIAotCW11dGV4X2xvY2soJmN4LT5ncGlvX2xvY2spOwotCWN4LT5ncGlvX3ZhbCAmPSB+KDEgPDwgY3gtPmNhcmQtPnhjZWl2ZV9waW4pOwotCWdwaW9fd3JpdGUoY3gpOwotCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7Ci0Jc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMSkpOwotCi0JbXV0ZXhfbG9jaygmY3gtPmdwaW9fbG9jayk7Ci0JY3gtPmdwaW9fdmFsIHw9IDEgPDwgY3gtPmNhcmQtPnhjZWl2ZV9waW47Ci0JZ3Bpb193cml0ZShjeCk7Ci0JbXV0ZXhfdW5sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKLQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcygxKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBjeDE4X2dwaW8oc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlID0gYXJnOwotCXUzMiBtYXNrLCBkYXRhOwotCi0Jc3dpdGNoIChjb21tYW5kKSB7Ci0JY2FzZSBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORzoKLQkJaWYgKHJvdXRlLT5pbnB1dCA+IDIpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJbWFzayA9IGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0Lm1hc2s7Ci0JCXN3aXRjaCAocm91dGUtPmlucHV0KSB7Ci0JCWNhc2UgMDoKLQkJCWRhdGEgPSBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC50dW5lcjsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlkYXRhID0gY3gtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQubGluZWluOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJZGVmYXVsdDoKLQkJCWRhdGEgPSBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC5yYWRpbzsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmIChtYXNrKSB7Ci0JCW11dGV4X2xvY2soJmN4LT5ncGlvX2xvY2spOwotCQljeC0+Z3Bpb192YWwgPSAoY3gtPmdwaW9fdmFsICYgfm1hc2spIHwgKGRhdGEgJiBtYXNrKTsKLQkJZ3Bpb193cml0ZShjeCk7Ci0JCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7Ci0JfQotCXJldHVybiAwOworCUNYMThfREVCVUdfSU5GTygiUmVzZXR0aW5nIFhDZWl2ZSB0dW5lclxuIik7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoJmN4LT5zZF9yZXNldGN0cmwsCisJCQkJY29yZSwgcmVzZXQsIENYMThfR1BJT19SRVNFVF9YQzIwMjgpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5oCmluZGV4IDM5ZmZjY2MuLmY5YTVjYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmgKQEAgLTIyLDcgKzIyLDEzIEBACiAgKi8KIAogdm9pZCBjeDE4X2dwaW9faW5pdChzdHJ1Y3QgY3gxOCAqY3gpOwotdm9pZCBjeDE4X3Jlc2V0X2kyY19zbGF2ZXNfZ3BpbyhzdHJ1Y3QgY3gxOCAqY3gpOworaW50IGN4MThfZ3Bpb19yZWdpc3RlcihzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBodyk7CisKK2VudW0gY3gxOF9ncGlvX3Jlc2V0X3R5cGUgeworCUNYMThfR1BJT19SRVNFVF9JMkMgICAgID0gMCwKKwlDWDE4X0dQSU9fUkVTRVRfWjhGMDgxMSA9IDEsCisJQ1gxOF9HUElPX1JFU0VUX1hDMjAyOCAgPSAyLAorfTsKKwogdm9pZCBjeDE4X3Jlc2V0X2lyX2dwaW8odm9pZCAqZGF0YSk7CiBpbnQgY3gxOF9yZXNldF90dW5lcl9ncGlvKHZvaWQgKmRldiwgaW50IGNvbXBvbmVudCwgaW50IGNtZCwgaW50IHZhbHVlKTsKLWludCBjeDE4X2dwaW8oc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdm9pZCAqYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMKaW5kZXggODNlMWM2My4uZDA5MjY0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjeDE4LWlvLmgiCiAjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgogI2luY2x1ZGUgImN4MTgtZ3Bpby5oIgotI2luY2x1ZGUgImN4MTgtYXYtY29yZS5oIgogI2luY2x1ZGUgImN4MTgtaTJjLmgiCiAjaW5jbHVkZSAiY3gxOC1pcnEuaCIKIApAQCAtNDMsMzEgKzQyLDM3IEBACiAjZGVmaW5lIENYMThfQ1M1MzQ1X0kyQ19BRERSCQkweDRjCiAKIC8qIFRoaXMgYXJyYXkgc2hvdWxkIG1hdGNoIHRoZSBDWDE4X0hXXyBkZWZpbmVzICovCi1zdGF0aWMgY29uc3QgdTggaHdfZHJpdmVyaWRzW10gPSB7Ci0JSTJDX0RSSVZFUklEX1RVTkVSLAotCUkyQ19EUklWRVJJRF9UVkVFUFJPTSwKLQlJMkNfRFJJVkVSSURfQ1M1MzQ1LAotCTAsIAkJLyogQ1gxOF9IV19HUElPIGR1bW15IGRyaXZlciBJRCAqLwotCTAgCQkvKiBDWDE4X0hXX0NYMjM0MTggZHVtbXkgZHJpdmVyIElEICovCi19OwotCi0vKiBUaGlzIGFycmF5IHNob3VsZCBtYXRjaCB0aGUgQ1gxOF9IV18gZGVmaW5lcyAqLwogc3RhdGljIGNvbnN0IHU4IGh3X2FkZHJzW10gPSB7Ci0JMCwKLQkwLAotCUNYMThfQ1M1MzQ1X0kyQ19BRERSLAotCTAsIAkJLyogQ1gxOF9IV19HUElPIGR1bW15IGRyaXZlciBJRCAqLwotCTAsCQkvKiBDWDE4X0hXX0NYMjM0MTggZHVtbXkgZHJpdmVyIElEICovCisJMCwJCQkvKiBDWDE4X0hXX1RVTkVSICovCisJMCwJCQkvKiBDWDE4X0hXX1RWRUVQUk9NICovCisJQ1gxOF9DUzUzNDVfSTJDX0FERFIsCS8qIENYMThfSFdfQ1M1MzQ1ICovCisJMCwJCQkvKiBDWDE4X0hXX0RWQiAqLworCTAsCQkJLyogQ1gxOF9IV180MThfQVYgKi8KKwkwLAkJCS8qIENYMThfSFdfR1BJT19NVVggKi8KKwkwLAkJCS8qIENYMThfSFdfR1BJT19SRVNFVF9DVFJMICovCiB9OwogCiAvKiBUaGlzIGFycmF5IHNob3VsZCBtYXRjaCB0aGUgQ1gxOF9IV18gZGVmaW5lcyAqLwogLyogVGhpcyBtaWdodCB3ZWxsIGJlY29tZSBhIGNhcmQtc3BlY2lmaWMgYXJyYXkgKi8KIHN0YXRpYyBjb25zdCB1OCBod19idXNbXSA9IHsKLQkwLAotCTAsCi0JMCwKLQkwLCAJCS8qIENYMThfSFdfR1BJTyBkdW1teSBkcml2ZXIgSUQgKi8KLQkwLAkJLyogQ1gxOF9IV19DWDIzNDE4IGR1bW15IGRyaXZlciBJRCAqLworCTEsCS8qIENYMThfSFdfVFVORVIgKi8KKwkwLAkvKiBDWDE4X0hXX1RWRUVQUk9NICovCisJMCwJLyogQ1gxOF9IV19DUzUzNDUgKi8KKwkwLAkvKiBDWDE4X0hXX0RWQiAqLworCTAsCS8qIENYMThfSFdfNDE4X0FWICovCisJMCwJLyogQ1gxOF9IV19HUElPX01VWCAqLworCTAsCS8qIENYMThfSFdfR1BJT19SRVNFVF9DVFJMICovCit9OworCisvKiBUaGlzIGFycmF5IHNob3VsZCBtYXRjaCB0aGUgQ1gxOF9IV18gZGVmaW5lcyAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBod19tb2R1bGVzW10gPSB7CisJInR1bmVyIiwJLyogQ1gxOF9IV19UVU5FUiAqLworCU5VTEwsCQkvKiBDWDE4X0hXX1RWRUVQUk9NICovCisJImNzNTM0NSIsCS8qIENYMThfSFdfQ1M1MzQ1ICovCisJTlVMTCwJCS8qIENYMThfSFdfRFZCICovCisJTlVMTCwJCS8qIENYMThfSFdfNDE4X0FWICovCisJTlVMTCwJCS8qIENYMThfSFdfR1BJT19NVVggKi8KKwlOVUxMLAkJLyogQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwgKi8KIH07CiAKIC8qIFRoaXMgYXJyYXkgc2hvdWxkIG1hdGNoIHRoZSBDWDE4X0hXXyBkZWZpbmVzICovCkBAIC03NSw4MyArODAsNjcgQEAKIAkidHVuZXIiLAogCSJ0dmVlcHJvbSIsCiAJImNzNTM0NSIsCi0JImdwaW8iLAotCSJjeDIzNDE4IiwKKwkiY3gyMzQxOF9EVFYiLAorCSJjeDIzNDE4X0FWIiwKKwkiZ3Bpb19tdXgiLAorCSJncGlvX3Jlc2V0X2N0cmwiLAogfTsKIAogaW50IGN4MThfaTJjX3JlZ2lzdGVyKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaWR4KQogewotCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjOwotCXU4IGlkLCBidXM7Ci0JaW50IGk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwlpbnQgYnVzID0gaHdfYnVzW2lkeF07CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gJmN4LT5pMmNfYWRhcFtidXNdOworCWNvbnN0IGNoYXIgKm1vZCA9IGh3X21vZHVsZXNbaWR4XTsKKwljb25zdCBjaGFyICp0eXBlID0gaHdfZGV2aWNlbmFtZXNbaWR4XTsKKwl1MzIgaHcgPSAxIDw8IGlkeDsKIAotCUNYMThfREVCVUdfSTJDKCJpMmMgY2xpZW50IHJlZ2lzdGVyXG4iKTsKLQlpZiAoaWR4ID49IEFSUkFZX1NJWkUoaHdfZHJpdmVyaWRzKSB8fCBod19kcml2ZXJpZHNbaWR4XSA9PSAwKQorCWlmIChpZHggPj0gQVJSQVlfU0laRShod19hZGRycykpCiAJCXJldHVybiAtMTsKLQlpZCA9IGh3X2RyaXZlcmlkc1tpZHhdOwotCWJ1cyA9IGh3X2J1c1tpZHhdOwotCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKLQlzdHJsY3B5KGluZm8udHlwZSwgaHdfZGV2aWNlbmFtZXNbaWR4XSwgc2l6ZW9mKGluZm8udHlwZSkpOwotCWluZm8uYWRkciA9IGh3X2FkZHJzW2lkeF07Ci0JZm9yIChpID0gMDsgaSA8IEkyQ19DTElFTlRTX01BWDsgaSsrKQotCQlpZiAoY3gtPmkyY19jbGllbnRzW2ldID09IE5VTEwpCi0JCQlicmVhazsKIAotCWlmIChpID09IEkyQ19DTElFTlRTX01BWCkgewotCQlDWDE4X0VSUigiaW5zdWZmaWNpZW50IHJvb20gZm9yIG5ldyBJMkMgY2xpZW50IVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCWlmIChodyA9PSBDWDE4X0hXX1RVTkVSKSB7CisJCS8qIHNwZWNpYWwgdHVuZXIgZ3JvdXAgaGFuZGxpbmcgKi8KKwkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldihhZGFwLCBtb2QsIHR5cGUsCisJCQkJCQljeC0+Y2FyZF9pMmMtPnJhZGlvKTsKKwkJaWYgKHNkICE9IE5VTEwpCisJCQlzZC0+Z3JwX2lkID0gaHc7CisJCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoYWRhcCwgbW9kLCB0eXBlLAorCQkJCQkJY3gtPmNhcmRfaTJjLT5kZW1vZCk7CisJCWlmIChzZCAhPSBOVUxMKQorCQkJc2QtPmdycF9pZCA9IGh3OworCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KGFkYXAsIG1vZCwgdHlwZSwKKwkJCQkJCWN4LT5jYXJkX2kyYy0+dHYpOworCQlpZiAoc2QgIT0gTlVMTCkKKwkJCXNkLT5ncnBfaWQgPSBodzsKKwkJcmV0dXJuIHNkICE9IE5VTEwgPyAwIDogLTE7CiAJfQogCi0JaWYgKGlkICE9IEkyQ19EUklWRVJJRF9UVU5FUikgewotCQljID0gaTJjX25ld19kZXZpY2UoJmN4LT5pMmNfYWRhcFtidXNdLCAmaW5mbyk7Ci0JCWlmIChjLT5kcml2ZXIgPT0gTlVMTCkKLQkJCWkyY191bnJlZ2lzdGVyX2RldmljZShjKTsKLQkJZWxzZQotCQkJY3gtPmkyY19jbGllbnRzW2ldID0gYzsKLQkJcmV0dXJuIGN4LT5pMmNfY2xpZW50c1tpXSA/IDAgOiAtRU5PREVWOwotCX0KKwkvKiBJcyBpdCBub3QgYW4gSTJDIGRldmljZSBvciBvbmUgd2UgZG8gbm90IHdpc2ggdG8gcmVnaXN0ZXI/ICovCisJaWYgKCFod19hZGRyc1tpZHhdKQorCQlyZXR1cm4gLTE7CiAKLQkvKiBzcGVjaWFsIHR1bmVyIGhhbmRsaW5nICovCi0JYyA9IGkyY19uZXdfcHJvYmVkX2RldmljZSgmY3gtPmkyY19hZGFwWzFdLCAmaW5mbywgY3gtPmNhcmRfaTJjLT5yYWRpbyk7Ci0JaWYgKGMgJiYgYy0+ZHJpdmVyID09IE5VTEwpCi0JCWkyY191bnJlZ2lzdGVyX2RldmljZShjKTsKLQllbHNlIGlmIChjKQotCQljeC0+aTJjX2NsaWVudHNbaSsrXSA9IGM7Ci0JYyA9IGkyY19uZXdfcHJvYmVkX2RldmljZSgmY3gtPmkyY19hZGFwWzFdLCAmaW5mbywgY3gtPmNhcmRfaTJjLT5kZW1vZCk7Ci0JaWYgKGMgJiYgYy0+ZHJpdmVyID09IE5VTEwpCi0JCWkyY191bnJlZ2lzdGVyX2RldmljZShjKTsKLQllbHNlIGlmIChjKQotCQljeC0+aTJjX2NsaWVudHNbaSsrXSA9IGM7Ci0JYyA9IGkyY19uZXdfcHJvYmVkX2RldmljZSgmY3gtPmkyY19hZGFwWzFdLCAmaW5mbywgY3gtPmNhcmRfaTJjLT50dik7Ci0JaWYgKGMgJiYgYy0+ZHJpdmVyID09IE5VTEwpCi0JCWkyY191bnJlZ2lzdGVyX2RldmljZShjKTsKLQllbHNlIGlmIChjKQotCQljeC0+aTJjX2NsaWVudHNbaSsrXSA9IGM7Ci0JcmV0dXJuIDA7CisJLyogSXQncyBhbiBJMkMgZGV2aWNlIG90aGVyIHRoYW4gYW4gYW5hbG9nIHR1bmVyICovCisJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KGFkYXAsIG1vZCwgdHlwZSwgaHdfYWRkcnNbaWR4XSk7CisJaWYgKHNkICE9IE5VTEwpCisJCXNkLT5ncnBfaWQgPSBodzsKKwlyZXR1cm4gc2QgIT0gTlVMTCA/IDAgOiAtMTsKIH0KIAotc3RhdGljIGludCBhdHRhY2hfaW5mb3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCisvKiBGaW5kIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIHN1YmRldiBncm91cCBpZCBpbiBodyAqLworc3RydWN0IHY0bDJfc3ViZGV2ICpjeDE4X2ZpbmRfaHcoc3RydWN0IGN4MTggKmN4LCB1MzIgaHcpCiB7Ci0JcmV0dXJuIDA7Ci19CisJc3RydWN0IHY0bDJfc3ViZGV2ICpyZXN1bHQgPSBOVUxMOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKLXN0YXRpYyBpbnQgZGV0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWludCBpOwotCXN0cnVjdCBjeDE4ICpjeCA9IChzdHJ1Y3QgY3gxOCAqKWkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQotCUNYMThfREVCVUdfSTJDKCJpMmMgY2xpZW50IGRldGFjaFxuIik7Ci0JZm9yIChpID0gMDsgaSA8IEkyQ19DTElFTlRTX01BWDsgaSsrKSB7Ci0JCWlmIChjeC0+aTJjX2NsaWVudHNbaV0gPT0gY2xpZW50KSB7Ci0JCQljeC0+aTJjX2NsaWVudHNbaV0gPSBOVUxMOworCXNwaW5fbG9jaygmY3gtPnY0bDJfZGV2LmxvY2spOworCXY0bDJfZGV2aWNlX2Zvcl9lYWNoX3N1YmRldihzZCwgJmN4LT52NGwyX2RldikgeworCQlpZiAoc2QtPmdycF9pZCA9PSBodykgeworCQkJcmVzdWx0ID0gc2Q7CiAJCQlicmVhazsKIAkJfQogCX0KLQlDWDE4X0RFQlVHX0kyQygiaTJjIGRldGFjaCBbY2xpZW50PSVzLCVzXVxuIiwKLQkJICAgY2xpZW50LT5uYW1lLCAoaSA8IEkyQ19DTElFTlRTX01BWCkgPyAib2siIDogImZhaWxlZCIpOwotCi0JcmV0dXJuIDA7CisJc3Bpbl91bmxvY2soJmN4LT52NGwyX2Rldi5sb2NrKTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCBjeDE4X3NldHNjbCh2b2lkICpkYXRhLCBpbnQgc3RhdGUpCkBAIC0yMDQsOCArMTkzLDYgQEAKIAkuaWQgPSBJMkNfSFdfQl9DWDIzNDFYLAogCS5hbGdvID0gTlVMTCwgICAgICAgICAgICAgICAgICAgLyogc2V0IGJ5IGkyYy1hbGdvLWJpdCAqLwogCS5hbGdvX2RhdGEgPSBOVUxMLCAgICAgICAgICAgICAgLyogZmlsbGVkIGZyb20gdGVtcGxhdGUgKi8KLQkuY2xpZW50X3JlZ2lzdGVyID0gYXR0YWNoX2luZm9ybSwKLQkuY2xpZW50X3VucmVnaXN0ZXIgPSBkZXRhY2hfaW5mb3JtLAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogfTsKIApAQCAtMjIxLDE1MiArMjA4LDI4IEBACiAJLnRpbWVvdXQJPSBDWDE4X0FMR09fQklUX1RJTUVPVVQqSFogLyogamlmZmllcyAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGN4MThfaTJjX2NsaWVudF90ZW1wbGF0ZSA9IHsKLQkubmFtZSA9ICJjeDE4IGludGVybmFsIiwKLX07Ci0KLWludCBjeDE4X2NhbGxfaTJjX2NsaWVudChzdHJ1Y3QgY3gxOCAqY3gsIGludCBhZGRyLCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCWludCByZXR2YWw7Ci0JaW50IGk7Ci0KLQlDWDE4X0RFQlVHX0kyQygiY2FsbF9pMmNfY2xpZW50IGFkZHI9JTAyeFxuIiwgYWRkcik7Ci0JZm9yIChpID0gMDsgaSA8IEkyQ19DTElFTlRTX01BWDsgaSsrKSB7Ci0JCWNsaWVudCA9IGN4LT5pMmNfY2xpZW50c1tpXTsKLQkJaWYgKGNsaWVudCA9PSBOVUxMIHx8IGNsaWVudC0+ZHJpdmVyID09IE5VTEwgfHwKLQkJCQljbGllbnQtPmRyaXZlci0+Y29tbWFuZCA9PSBOVUxMKQotCQkJY29udGludWU7Ci0JCWlmIChhZGRyID09IGNsaWVudC0+YWRkcikgewotCQkJcmV0dmFsID0gY2xpZW50LT5kcml2ZXItPmNvbW1hbmQoY2xpZW50LCBjbWQsIGFyZyk7Ci0JCQlyZXR1cm4gcmV0dmFsOwotCQl9Ci0JfQotCWlmIChjbWQgIT0gVklESU9DX0RCR19HX0NISVBfSURFTlQpCi0JCUNYMThfRVJSKCJpMmMgYWRkciAweCUwMnggbm90IGZvdW5kIGZvciBjbWQgMHgleCFcbiIsCi0JCQkgICAgICAgYWRkciwgY21kKTsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotLyogRmluZCB0aGUgaTJjIGRldmljZSBiYXNlZCBvbiB0aGUgZHJpdmVyIElEIGFuZCByZXR1cm4KLSAgIGl0cyBpMmMgYWRkcmVzcyBvciAtRU5PREVWIGlmIG5vIG1hdGNoaW5nIGRldmljZSB3YXMgZm91bmQuICovCi1zdGF0aWMgaW50IGN4MThfaTJjX2lkX2FkZHIoc3RydWN0IGN4MTggKmN4LCB1MzIgaWQpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlpbnQgcmV0dmFsID0gLUVOT0RFVjsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBJMkNfQ0xJRU5UU19NQVg7IGkrKykgewotCQljbGllbnQgPSBjeC0+aTJjX2NsaWVudHNbaV07Ci0JCWlmIChjbGllbnQgPT0gTlVMTCB8fCBjbGllbnQtPmRyaXZlciA9PSBOVUxMKQotCQkJY29udGludWU7Ci0JCWlmIChpZCA9PSBjbGllbnQtPmRyaXZlci0+aWQpIHsKLQkJCXJldHZhbCA9IGNsaWVudC0+YWRkcjsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qIEZpbmQgdGhlIGkyYyBkZXZpY2UgbmFtZSBtYXRjaGluZyB0aGUgQ1gxOF9IV18gZmxhZyAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmN4MThfaTJjX2h3X25hbWUodTMyIGh3KQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHdfZHJpdmVyaWRzKTsgaSsrKQotCQlpZiAoMSA8PCBpID09IGh3KQotCQkJcmV0dXJuIGh3X2RldmljZW5hbWVzW2ldOwotCXJldHVybiAidW5rbm93biBkZXZpY2UiOwotfQotCi0vKiBGaW5kIHRoZSBpMmMgZGV2aWNlIG1hdGNoaW5nIHRoZSBDWDE4X0hXXyBmbGFnIGFuZCByZXR1cm4KLSAgIGl0cyBpMmMgYWRkcmVzcyBvciAtRU5PREVWIGlmIG5vIG1hdGNoaW5nIGRldmljZSB3YXMgZm91bmQuICovCi1pbnQgY3gxOF9pMmNfaHdfYWRkcihzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBodykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGh3X2RyaXZlcmlkcyk7IGkrKykKLQkJaWYgKDEgPDwgaSA9PSBodykKLQkJCXJldHVybiBjeDE4X2kyY19pZF9hZGRyKGN4LCBod19kcml2ZXJpZHNbaV0pOwotCXJldHVybiAtRU5PREVWOwotfQotCi0vKiBDYWxscyBpMmMgZGV2aWNlIGJhc2VkIG9uIENYMThfSFdfIGZsYWcuIElmIGh3ID09IDAsIHRoZW4gZG8gbm90aGluZy4KLSAgIElmIGh3ID09IENYMThfSFdfR1BJTyB0aGVuIGNhbGwgdGhlIGdwaW8gaGFuZGxlci4gKi8KLWludCBjeDE4X2kyY19odyhzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBodywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCWludCBhZGRyOwotCi0JaWYgKGh3ID09IDApCi0JCXJldHVybiAwOwotCi0JaWYgKGh3ID09IENYMThfSFdfR1BJTykKLQkJcmV0dXJuIGN4MThfZ3BpbyhjeCwgY21kLCBhcmcpOwotCi0JaWYgKGh3ID09IENYMThfSFdfQ1gyMzQxOCkKLQkJcmV0dXJuIGN4MThfYXZfY21kKGN4LCBjbWQsIGFyZyk7Ci0KLQlhZGRyID0gY3gxOF9pMmNfaHdfYWRkcihjeCwgaHcpOwotCWlmIChhZGRyIDwgMCkgewotCQlDWDE4X0VSUigiaTJjIGhhcmR3YXJlIDB4JTA4eCAoJXMpIG5vdCBmb3VuZCBmb3IgY21kIDB4JXghXG4iLAotCQkJICAgICAgIGh3LCBjeDE4X2kyY19od19uYW1lKGh3KSwgY21kKTsKLQkJcmV0dXJuIGFkZHI7Ci0JfQotCXJldHVybiBjeDE4X2NhbGxfaTJjX2NsaWVudChjeCwgYWRkciwgY21kLCBhcmcpOwotfQotCi0vKiBicm9hZGNhc3QgY21kIGZvciBhbGwgSTJDIGNsaWVudHMgYW5kIGZvciB0aGUgZ3BpbyBzdWJzeXN0ZW0gKi8KLXZvaWQgY3gxOF9jYWxsX2kyY19jbGllbnRzKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCWlmIChjeC0+aTJjX2FkYXBbMF0uYWxnbyA9PSBOVUxMIHx8IGN4LT5pMmNfYWRhcFsxXS5hbGdvID09IE5VTEwpIHsKLQkJQ1gxOF9FUlIoImFkYXB0ZXIgaXMgbm90IHNldFxuIik7Ci0JCXJldHVybjsKLQl9Ci0JY3gxOF9hdl9jbWQoY3gsIGNtZCwgYXJnKTsKLQlpMmNfY2xpZW50c19jb21tYW5kKCZjeC0+aTJjX2FkYXBbMF0sIGNtZCwgYXJnKTsKLQlpMmNfY2xpZW50c19jb21tYW5kKCZjeC0+aTJjX2FkYXBbMV0sIGNtZCwgYXJnKTsKLQlpZiAoY3gtPmh3X2ZsYWdzICYgQ1gxOF9IV19HUElPKQotCQljeDE4X2dwaW8oY3gsIGNtZCwgYXJnKTsKLX0KLQogLyogaW5pdCArIHJlZ2lzdGVyIGkyYyBhbGdvLWJpdCBhZGFwdGVyICovCiBpbnQgaW5pdF9jeDE4X2kyYyhzdHJ1Y3QgY3gxOCAqY3gpCiB7CiAJaW50IGk7CiAJQ1gxOF9ERUJVR19JMkMoImkyYyBpbml0XG4iKTsKIAotCS8qIFNhbml0eSBjaGVja3MgZm9yIHRoZSBJMkMgaGFyZHdhcmUgYXJyYXlzLiBUaGV5IG11c3QgYmUgdGhlCi0JICogc2FtZSBzaXplIGFuZCBHUElPL0NYMjM0MTggbXVzdCBiZSB0aGUgbGFzdCBlbnRyaWVzLgotCSAqLwotCWlmIChBUlJBWV9TSVpFKGh3X2RyaXZlcmlkcykgIT0gQVJSQVlfU0laRShod19hZGRycykgfHwKLQkgICAgQVJSQVlfU0laRShod19kZXZpY2VuYW1lcykgIT0gQVJSQVlfU0laRShod19hZGRycykgfHwKLQkgICAgQ1gxOF9IV19HUElPICE9ICgxIDw8IChBUlJBWV9TSVpFKGh3X2FkZHJzKSAtIDIpKSB8fAotCSAgICBDWDE4X0hXX0NYMjM0MTggIT0gKDEgPDwgKEFSUkFZX1NJWkUoaHdfYWRkcnMpIC0gMSkpIHx8Ci0JICAgIGh3X2RyaXZlcmlkc1tBUlJBWV9TSVpFKGh3X2FkZHJzKSAtIDFdKSB7Ci0JCUNYMThfRVJSKCJNaXNtYXRjaGVkIEkyQyBoYXJkd2FyZSBhcnJheXNcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCW1lbWNweSgmY3gtPmkyY19hZGFwW2ldLCAmY3gxOF9pMmNfYWRhcF90ZW1wbGF0ZSwKLQkJCXNpemVvZihzdHJ1Y3QgaTJjX2FkYXB0ZXIpKTsKKwkJLyogU2V0dXAgYWxnb3JpdGhtIGZvciBhZGFwdGVyICovCiAJCW1lbWNweSgmY3gtPmkyY19hbGdvW2ldLCAmY3gxOF9pMmNfYWxnb190ZW1wbGF0ZSwKIAkJCXNpemVvZihzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEpKTsKIAkJY3gtPmkyY19hbGdvX2NiX2RhdGFbaV0uY3ggPSBjeDsKIAkJY3gtPmkyY19hbGdvX2NiX2RhdGFbaV0uYnVzX2luZGV4ID0gaTsKIAkJY3gtPmkyY19hbGdvW2ldLmRhdGEgPSAmY3gtPmkyY19hbGdvX2NiX2RhdGFbaV07CisKKwkJLyogU2V0dXAgYWRhcHRlciAqLworCQltZW1jcHkoJmN4LT5pMmNfYWRhcFtpXSwgJmN4MThfaTJjX2FkYXBfdGVtcGxhdGUsCisJCQlzaXplb2Yoc3RydWN0IGkyY19hZGFwdGVyKSk7CiAJCWN4LT5pMmNfYWRhcFtpXS5hbGdvX2RhdGEgPSAmY3gtPmkyY19hbGdvW2ldOwotCiAJCXNwcmludGYoY3gtPmkyY19hZGFwW2ldLm5hbWUgKyBzdHJsZW4oY3gtPmkyY19hZGFwW2ldLm5hbWUpLAotCQkJCSIgIyVkLSVkIiwgY3gtPm51bSwgaSk7Ci0JCWkyY19zZXRfYWRhcGRhdGEoJmN4LT5pMmNfYWRhcFtpXSwgY3gpOwotCi0JCW1lbWNweSgmY3gtPmkyY19jbGllbnRbaV0sICZjeDE4X2kyY19jbGllbnRfdGVtcGxhdGUsCi0JCQlzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpKTsKLQkJc3ByaW50ZihjeC0+aTJjX2NsaWVudFtpXS5uYW1lICsKLQkJCQlzdHJsZW4oY3gtPmkyY19jbGllbnRbaV0ubmFtZSksICIlZCIsIGkpOwotCQljeC0+aTJjX2NsaWVudFtpXS5hZGFwdGVyID0gJmN4LT5pMmNfYWRhcFtpXTsKLQkJY3gtPmkyY19hZGFwW2ldLmRldi5wYXJlbnQgPSAmY3gtPmRldi0+ZGV2OworCQkJCSIgIyVkLSVkIiwgY3gtPmluc3RhbmNlLCBpKTsKKwkJaTJjX3NldF9hZGFwZGF0YSgmY3gtPmkyY19hZGFwW2ldLCAmY3gtPnY0bDJfZGV2KTsKKwkJY3gtPmkyY19hZGFwW2ldLmRldi5wYXJlbnQgPSAmY3gtPnBjaV9kZXYtPmRldjsKIAl9CiAKIAlpZiAoY3gxOF9yZWFkX3JlZyhjeCwgQ1gxOF9SRUdfSTJDXzJfV1IpICE9IDB4MDAwM2MwMmYpIHsKQEAgLTQwMiw3ICsyNjUsOCBAQAogCWN4MThfc2V0c2NsKCZjeC0+aTJjX2FsZ29fY2JfZGF0YVsxXSwgMSk7CiAJY3gxOF9zZXRzZGEoJmN4LT5pMmNfYWxnb19jYl9kYXRhWzFdLCAxKTsKIAotCWN4MThfcmVzZXRfaTJjX3NsYXZlc19ncGlvKGN4KTsKKwljeDE4X2NhbGxfaHcoY3gsIENYMThfSFdfR1BJT19SRVNFVF9DVFJMLAorCQkgICAgIGNvcmUsIHJlc2V0LCAodTMyKSBDWDE4X0dQSU9fUkVTRVRfSTJDKTsKIAogCXJldHVybiBpMmNfYml0X2FkZF9idXMoJmN4LT5pMmNfYWRhcFswXSkgfHwKIAkJaTJjX2JpdF9hZGRfYnVzKCZjeC0+aTJjX2FkYXBbMV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pMmMuaAppbmRleCA0ODY5NzM5Li5iZGZkMTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pMmMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pMmMuaApAQCAtMjEsMTEgKzIxLDggQEAKICAqICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi1pbnQgY3gxOF9pMmNfaHdfYWRkcihzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBodyk7Ci1pbnQgY3gxOF9pMmNfaHcoc3RydWN0IGN4MTggKmN4LCB1MzIgaHcsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7Ci1pbnQgY3gxOF9jYWxsX2kyY19jbGllbnQoc3RydWN0IGN4MTggKmN4LCBpbnQgYWRkciwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpOwotdm9pZCBjeDE4X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogaW50IGN4MThfaTJjX3JlZ2lzdGVyKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaWR4KTsKK3N0cnVjdCB2NGwyX3N1YmRldiAqY3gxOF9maW5kX2h3KHN0cnVjdCBjeDE4ICpjeCwgdTMyIGh3KTsKIAogLyogaW5pdCArIHJlZ2lzdGVyIGkyYyBhbGdvLWJpdCBhZGFwdGVyICovCiBpbnQgaW5pdF9jeDE4X2kyYyhzdHJ1Y3QgY3gxOCAqY3gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMKaW5kZXggNzA4NmFhYi4uZTRjOWUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jCkBAIC01OCwxMiArNTgsMjEgQEAKIAl9CiB9CiAKKy8qIENoZWNrIGlmIFZCSSBzZXJ2aWNlcyBhcmUgYWxsb3dlZCBvbiB0aGUgKGZpZWxkLCBsaW5lKSBmb3IgdGhlIHZpZGVvIHN0ZCAqLwogc3RhdGljIGludCB2YWxpZF9zZXJ2aWNlX2xpbmUoaW50IGZpZWxkLCBpbnQgbGluZSwgaW50IGlzX3BhbCkKIHsKLQlyZXR1cm4gKGlzX3BhbCAmJiBsaW5lID49IDYgJiYgKGxpbmUgIT0gMjMgfHwgZmllbGQgPT0gMCkpIHx8CisJcmV0dXJuIChpc19wYWwgJiYgbGluZSA+PSA2ICYmCisJCSgoZmllbGQgPT0gMCAmJiBsaW5lIDw9IDIzKSB8fCAoZmllbGQgPT0gMSAmJiBsaW5lIDw9IDIyKSkpIHx8CiAJICAgICAgICghaXNfcGFsICYmIGxpbmUgPj0gMTAgJiYgbGluZSA8IDIyKTsKIH0KIAorLyoKKyAqIEZvciBhIChmaWVsZCwgbGluZSwgc3RkKSBhbmQgaW5ib3VuZCBwb3RlbnRpYWwgc2V0IG9mIHNlcnZpY2VzIGZvciB0aGF0IGxpbmUsCisgKiByZXR1cm4gdGhlIGZpcnN0IHZhbGlkIHNlcnZpY2Ugb2YgdGhvc2UgcGFzc2VkIGluIHRoZSBpbmNvbWluZyBzZXQgZm9yIHRoYXQKKyAqIGxpbmUgaW4gcHJpb3JpdHkgb3JkZXI6CisgKiBDQywgVlBTLCBvciBXU1Mgb3ZlciBURUxFVEVYVCBmb3Igd2VsbCBrbm93biBsaW5lcworICogVEVMRVRFWFQsIGJlZm9yZSBWUFMsIGJlZm9yZSBDQywgYmVmb3JlIFdTUywgZm9yIG90aGVyIGxpbmVzCisgKi8KIHN0YXRpYyB1MTYgc2VsZWN0X3NlcnZpY2VfZnJvbV9zZXQoaW50IGZpZWxkLCBpbnQgbGluZSwgdTE2IHNldCwgaW50IGlzX3BhbCkKIHsKIAl1MTYgdmFsaWRfc2V0ID0gKGlzX3BhbCA/IFY0TDJfU0xJQ0VEX1ZCSV82MjUgOiBWNEwyX1NMSUNFRF9WQklfNTI1KTsKQEAgLTkwLDYgKzk5LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBFeHBhbmQgdGhlIHNlcnZpY2Vfc2V0IG9mICpmbXQgaW50byB2YWxpZCBzZXJ2aWNlX2xpbmVzIGZvciB0aGUgc3RkLAorICogYW5kIGNsZWFyIHRoZSBwYXNzZWQgaW4gZm10LT5zZXJ2aWNlX3NldAorICovCiB2b2lkIGN4MThfZXhwYW5kX3NlcnZpY2Vfc2V0KHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICpmbXQsIGludCBpc19wYWwpCiB7CiAJdTE2IHNldCA9IGZtdC0+c2VydmljZV9zZXQ7CkBAIC0xMDIsNyArMTE1LDI1IEBACiAJfQogfQogCisvKgorICogU2FuaXRpemUgdGhlIHNlcnZpY2VfbGluZXMgaW4gKmZtdCBwZXIgdGhlIHZpZGVvIHN0ZCwgYW5kIHJldHVybiAxCisgKiBpZiBhbnkgc2VydmljZV9saW5lIGlzIGxlZnQgYXMgdmFsaWQgYWZ0ZXIgc2FudGl6YXRpb24KKyAqLworc3RhdGljIGludCBjaGVja19zZXJ2aWNlX3NldChzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqZm10LCBpbnQgaXNfcGFsKQoreworCWludCBmLCBsOworCXUxNiBzZXQgPSAwOwogCisJZm9yIChmID0gMDsgZiA8IDI7IGYrKykgeworCQlmb3IgKGwgPSAwOyBsIDwgMjQ7IGwrKykgeworCQkJZm10LT5zZXJ2aWNlX2xpbmVzW2ZdW2xdID0gc2VsZWN0X3NlcnZpY2VfZnJvbV9zZXQoZiwgbCwgZm10LT5zZXJ2aWNlX2xpbmVzW2ZdW2xdLCBpc19wYWwpOworCQkJc2V0IHw9IGZtdC0+c2VydmljZV9saW5lc1tmXVtsXTsKKwkJfQorCX0KKwlyZXR1cm4gc2V0ICE9IDA7Cit9CisKKy8qIENvbXB1dGUgdGhlIHNlcnZpY2Vfc2V0IGZyb20gdGhlIGFzc3VtZWQgdmFsaWQgc2VydmljZV9saW5lcyBvZiAqZm10ICovCiB1MTYgY3gxOF9nZXRfc2VydmljZV9zZXQoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKmZtdCkKIHsKIAlpbnQgZiwgbDsKQEAgLTEyOSwxMCArMTYwLDggQEAKIAlwaXhmbXQtPnByaXYgPSAwOwogCWlmIChpZC0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9ZVVYpIHsKIAkJcGl4Zm10LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ITTEyOwotCQkvKiBZVVYgc2l6ZSBpcyAoWT0oaCp3KSArIFVWPShoKih3LzIpKSkgKi8KLQkJcGl4Zm10LT5zaXplaW1hZ2UgPQotCQkJcGl4Zm10LT5oZWlnaHQgKiBwaXhmbXQtPndpZHRoICsKLQkJCXBpeGZtdC0+aGVpZ2h0ICogKHBpeGZtdC0+d2lkdGggLyAyKTsKKwkJLyogWVVWIHNpemUgaXMgKFk9KGgqNzIwKSArIFVWPShoKig3MjAvMikpKSAqLworCQlwaXhmbXQtPnNpemVpbWFnZSA9IHBpeGZtdC0+aGVpZ2h0ICogNzIwICogMyAvIDI7CiAJCXBpeGZtdC0+Ynl0ZXNwZXJsaW5lID0gNzIwOwogCX0gZWxzZSB7CiAJCXBpeGZtdC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVBFRzsKQEAgLTE0OSw4ICsxNzgsOCBAQAogCXN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgKnZiaWZtdCA9ICZmbXQtPmZtdC52Ymk7CiAKIAl2YmlmbXQtPnNhbXBsaW5nX3JhdGUgPSAyNzAwMDAwMDsKLQl2YmlmbXQtPm9mZnNldCA9IDI0ODsKLQl2YmlmbXQtPnNhbXBsZXNfcGVyX2xpbmUgPSBjeC0+dmJpLnJhd19kZWNvZGVyX2xpbmVfc2l6ZSAtIDQ7CisJdmJpZm10LT5vZmZzZXQgPSAyNDg7IC8qIEZJWE1FIC0gc2xpZ2h0bHkgd3JvbmcgZm9yIGJvdGggNTAgJiA2MCBIeiAqLworCXZiaWZtdC0+c2FtcGxlc19wZXJfbGluZSA9IHZiaV9hY3RpdmVfc2FtcGxlcyAtIDQ7CiAJdmJpZm10LT5zYW1wbGVfZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0dSRVk7CiAJdmJpZm10LT5zdGFydFswXSA9IGN4LT52Ymkuc3RhcnRbMF07CiAJdmJpZm10LT5zdGFydFsxXSA9IGN4LT52Ymkuc3RhcnRbMV07CkBAIC0xNjQsNyArMTkzLDMwIEBACiBzdGF0aWMgaW50IGN4MThfZ19mbXRfc2xpY2VkX3ZiaV9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X29wZW5faWQgKilmaCktPmN4OworCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICp2YmlmbXQgPSAmZm10LT5mbXQuc2xpY2VkOworCisJLyogc2FuZSwgVjRMMiBzcGVjIGNvbXBsaWFudCwgZGVmYXVsdHMgKi8KKwl2YmlmbXQtPnJlc2VydmVkWzBdID0gMDsKKwl2YmlmbXQtPnJlc2VydmVkWzFdID0gMDsKKwl2YmlmbXQtPmlvX3NpemUgPSBzaXplb2Yoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhKSAqIDM2OworCW1lbXNldCh2YmlmbXQtPnNlcnZpY2VfbGluZXMsIDAsIHNpemVvZih2YmlmbXQtPnNlcnZpY2VfbGluZXMpKTsKKwl2YmlmbXQtPnNlcnZpY2Vfc2V0ID0gMDsKKworCS8qCisJICogRmV0Y2ggdGhlIGNvbmZpZ3VyZWQgc2VydmljZV9saW5lcyBhbmQgdG90YWwgc2VydmljZV9zZXQgZnJvbSB0aGUKKwkgKiBkaWdpdGl6ZXIvc2xpY2VyLiAgTm90ZSwgY3gxOF9hdl92YmkoKSB3aXBlcyB0aGUgcGFzc2VkIGluCisJICogZm10LT5mbXQuc2xpY2VkIHVuZGVyIHZhbGlkIGNhbGxpbmcgY29uZGl0aW9ucworCSAqLworCWlmICh2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgdmlkZW8sIGdfZm10LCBmbXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEVuc3VyZSBWNEwyIHNwZWMgY29tcGxpYW50IG91dHB1dCAqLworCXZiaWZtdC0+cmVzZXJ2ZWRbMF0gPSAwOworCXZiaWZtdC0+cmVzZXJ2ZWRbMV0gPSAwOworCXZiaWZtdC0+aW9fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEpICogMzY7CisJdmJpZm10LT5zZXJ2aWNlX3NldCA9IGN4MThfZ2V0X3NlcnZpY2Vfc2V0KHZiaWZtdCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY3gxOF90cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLApAQCAtMTc0LDExICsyMjYsMTggQEAKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBpZC0+Y3g7CiAJaW50IHcgPSBmbXQtPmZtdC5waXgud2lkdGg7CiAJaW50IGggPSBmbXQtPmZtdC5waXguaGVpZ2h0OworCWludCBtaW5faCA9IDI7CiAKIAl3ID0gbWluKHcsIDcyMCk7Ci0JdyA9IG1heCh3LCAxKTsKKwl3ID0gbWF4KHcsIDIpOworCWlmIChpZC0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9ZVVYpIHsKKwkJLyogWVVWIGhlaWdodCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzIgKi8KKwkJaCAmPSB+MHgxZjsKKwkJbWluX2ggPSAzMjsKKwl9CiAJaCA9IG1pbihoLCBjeC0+aXNfNTBoeiA/IDU3NiA6IDQ4MCk7Ci0JaCA9IG1heChoLCAyKTsKKwloID0gbWF4KGgsIG1pbl9oKTsKKwogCWN4MThfZ19mbXRfdmlkX2NhcChmaWxlLCBmaCwgZm10KTsKIAlmbXQtPmZtdC5waXgud2lkdGggPSB3OwogCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBoOwpAQCAtMTk0LDcgKzI1MywyMCBAQAogc3RhdGljIGludCBjeDE4X3RyeV9mbXRfc2xpY2VkX3ZiaV9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X29wZW5faWQgKilmaCktPmN4OworCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICp2YmlmbXQgPSAmZm10LT5mbXQuc2xpY2VkOworCisJdmJpZm10LT5pb19zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSkgKiAzNjsKKwl2YmlmbXQtPnJlc2VydmVkWzBdID0gMDsKKwl2YmlmbXQtPnJlc2VydmVkWzFdID0gMDsKKworCS8qIElmIGdpdmVuIGEgc2VydmljZSBzZXQsIGV4cGFuZCBpdCB2YWxpZGx5ICYgY2xlYXIgcGFzc2VkIGluIHNldCAqLworCWlmICh2YmlmbXQtPnNlcnZpY2Vfc2V0KQorCQljeDE4X2V4cGFuZF9zZXJ2aWNlX3NldCh2YmlmbXQsIGN4LT5pc181MGh6KTsKKwkvKiBTYW5pdGl6ZSB0aGUgc2VydmljZV9saW5lcywgYW5kIGNvbXB1dGUgdGhlIG5ldyBzZXQgaWYgYW55IHZhbGlkICovCisJaWYgKGNoZWNrX3NlcnZpY2Vfc2V0KHZiaWZtdCwgY3gtPmlzXzUwaHopKQorCQl2YmlmbXQtPnNlcnZpY2Vfc2V0ID0gY3gxOF9nZXRfc2VydmljZV9zZXQodmJpZm10KTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjeDE4X3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLApAQCAtMjIzLDcgKzI5NSw3IEBACiAKIAljeC0+cGFyYW1zLndpZHRoID0gdzsKIAljeC0+cGFyYW1zLmhlaWdodCA9IGg7Ci0JY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19TX0ZNVCwgZm10KTsKKwl2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgdmlkZW8sIHNfZm10LCBmbXQpOwogCXJldHVybiBjeDE4X2dfZm10X3ZpZF9jYXAoZmlsZSwgZmgsIGZtdCk7CiB9CiAKQEAgLTIzOCw1NCArMzEwLDEzMSBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwkvKgorCSAqIENoYW5naW5nIHRoZSBFbmNvZGVyJ3MgUmF3IFZCSSBwYXJhbWV0ZXJzIHdvbid0IGhhdmUgYW55IGVmZmVjdAorCSAqIGlmIGFueSBhbmFsb2cgY2FwdHVyZSBpcyBvbmdvaW5nCisJICovCiAJaWYgKCFjeDE4X3Jhd192YmkoY3gpICYmIGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZykgPiAwKQogCQlyZXR1cm4gLUVCVVNZOwogCisJLyoKKwkgKiBTZXQgdGhlIGRpZ2l0aXplciByZWdpc3RlcnMgZm9yIHJhdyBhY3RpdmUgVkJJLgorCSAqIE5vdGUgY3gxOF9hdl92Ymlfd2lwZXMgb3V0IGFsb3Qgb2YgdGhlIHBhc3NlZCBpbiBmbXQgdW5kZXIgdmFsaWQKKwkgKiBjYWxsaW5nIGNvbmRpdGlvbnMKKwkgKi8KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgdmlkZW8sIHNfZm10LCBmbXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBTdG9yZSBvdXIgbmV3IHY0bDIgKG5vbi0pc2xpY2VkIFZCSSBzdGF0ZSAqLwogCWN4LT52Ymkuc2xpY2VkX2luLT5zZXJ2aWNlX3NldCA9IDA7CiAJY3gtPnZiaS5pbi50eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKLQljeDE4X2F2X2NtZChjeCwgVklESU9DX1NfRk1ULCBmbXQpOworCiAJcmV0dXJuIGN4MThfZ19mbXRfdmJpX2NhcChmaWxlLCBmaCwgZm10KTsKIH0KIAogc3RhdGljIGludCBjeDE4X3NfZm10X3NsaWNlZF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJc3RydWN0IGN4MThfb3Blbl9pZCAqaWQgPSBmaDsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSBpZC0+Y3g7CisJaW50IHJldDsKKwlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqdmJpZm10ID0gJmZtdC0+Zm10LnNsaWNlZDsKKworCXJldCA9IHY0bDJfcHJpb19jaGVjaygmY3gtPnByaW8sICZpZC0+cHJpbyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWN4MThfdHJ5X2ZtdF9zbGljZWRfdmJpX2NhcChmaWxlLCBmaCwgZm10KTsKKworCS8qCisJICogQ2hhbmdpbmcgdGhlIEVuY29kZXIncyBSYXcgVkJJIHBhcmFtZXRlcnMgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0CisJICogaWYgYW55IGFuYWxvZyBjYXB0dXJlIGlzIG9uZ29pbmcKKwkgKi8KKwlpZiAoY3gxOF9yYXdfdmJpKGN4KSAmJiBhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpID4gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qCisJICogU2V0IHRoZSBzZXJ2aWNlX2xpbmVzIHJlcXVlc3RlZCBpbiB0aGUgZGlnaXRpemVyL3NsaWNlciByZWdpc3RlcnMuCisJICogTm90ZSwgY3gxOF9hdl92YmkoKSB3aXBlcyBzb21lICJpbXBvc3NpYmxlIiBzZXJ2aWNlIGxpbmVzIGluIHRoZQorCSAqIHBhc3NlZCBpbiBmbXQtPmZtdC5zbGljZWQgdW5kZXIgdmFsaWQgY2FsbGluZyBjb25kaXRpb25zCisJICovCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIHZpZGVvLCBzX2ZtdCwgZm10KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCS8qIFN0b3JlIG91ciBjdXJyZW50IHY0bDIgc2xpY2VkIFZCSSBzZXR0aW5ncyAqLworCWN4LT52YmkuaW4udHlwZSA9ICBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRTsKKwltZW1jcHkoY3gtPnZiaS5zbGljZWRfaW4sIHZiaWZtdCwgc2l6ZW9mKCpjeC0+dmJpLnNsaWNlZF9pbikpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGN4MThfZ19jaGlwX2lkZW50KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKIHsKIAlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X29wZW5faWQgKilmaCktPmN4OworCWludCBlcnIgPSAwOwogCiAJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX05PTkU7CiAJY2hpcC0+cmV2aXNpb24gPSAwOwotCWlmICh2NGwyX2NoaXBfbWF0Y2hfaG9zdCgmY2hpcC0+bWF0Y2gpKSB7Ci0JCWNoaXAtPmlkZW50ID0gVjRMMl9JREVOVF9DWDIzNDE4OwotCQlyZXR1cm4gMDsKKwlzd2l0Y2ggKGNoaXAtPm1hdGNoLnR5cGUpIHsKKwljYXNlIFY0TDJfQ0hJUF9NQVRDSF9IT1NUOgorCQlzd2l0Y2ggKGNoaXAtPm1hdGNoLmFkZHIpIHsKKwkJY2FzZSAwOgorCQkJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX0NYMjM0MTg7CisJCQljaGlwLT5yZXZpc2lvbiA9IGN4MThfcmVhZF9yZWcoY3gsIDB4QzcyMDI4KTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQkvKgorCQkJICogVGhlIEEvViBkZWNvZGVyIGlzIGFsd2F5cyBwcmVzZW50LCBidXQgaW4gdGhlIHJhcmUKKwkJCSAqIGNhc2UgdGhhdCB0aGUgY2FyZCBkb2Vzbid0IGhhdmUgYW5hbG9nLCB3ZSBkb24ndAorCQkJICogdXNlIGl0LiAgV2UgZmluZCBpdCB3L28gdXNpbmcgdGhlIGN4LT5zZF9hdiBwb2ludGVyCisJCQkgKi8KKwkJCWN4MThfY2FsbF9odyhjeCwgQ1gxOF9IV180MThfQVYsCisJCQkJICAgICBjb3JlLCBnX2NoaXBfaWRlbnQsIGNoaXApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKgorCQkJICogQ291bGQgcmV0dXJuIGlkZW50ID0gVjRMMl9JREVOVF9VTktOT1dOIGlmIHdlIGhhZAorCQkJICogb3RoZXIgaG9zdCBjaGlwcyBhdCBoaWdoZXIgYWRkcmVzc2VzLCBidXQgd2UgZG9uJ3QKKwkJCSAqLworCQkJZXJyID0gLUVJTlZBTDsgLyogcGVyIFY0TDIgc3BlYyAqLworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUjoKKwkJLyogSWYgbmVlZGVkLCByZXR1cm5zIFY0TDJfSURFTlRfQU1CSUdVT1VTIHdpdGhvdXQgZXh0cmEgd29yayAqLworCQljeDE4X2NhbGxfYWxsKGN4LCBjb3JlLCBnX2NoaXBfaWRlbnQsIGNoaXApOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUjoKKwkJLyoKKwkJICogV2UgY291bGQgcmV0dXJuIFY0TDJfSURFTlRfVU5LTk9XTiwgYnV0IHdlIGRvbid0IGRvIHRoZSB3b3JrCisJCSAqIHRvIGxvb2sgaWYgYSBjaGlwIGlzIGF0IHRoZSBhZGRyZXNzIHdpdGggbm8gZHJpdmVyLiAgVGhhdCdzIGEKKwkJICogZGFuZ2Vyb3VzIHRoaW5nIHRvIGRvIHdpdGggRUVQUk9NcyBhbnl3YXkuCisJCSAqLworCQljeDE4X2NhbGxfYWxsKGN4LCBjb3JlLCBnX2NoaXBfaWRlbnQsIGNoaXApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlicmVhazsKIAl9Ci0JY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfREJHX0dfQ0hJUF9JREVOVCwgY2hpcCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIAogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKIHN0YXRpYyBpbnQgY3gxOF9jeGMoc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWdzID0gYXJnOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAJaWYgKHJlZ3MtPnJlZyA+PSBDWDE4X01FTV9PRkZTRVQgKyBDWDE4X01FTV9TSVpFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjeDE4X2NhcmRzX2xvY2ssIGZsYWdzKTsKIAlyZWdzLT5zaXplID0gNDsKLQlpZiAoY21kID09IFZJRElPQ19EQkdfR19SRUdJU1RFUikKLQkJcmVncy0+dmFsID0gY3gxOF9yZWFkX2VuYyhjeCwgcmVncy0+cmVnKTsKLQllbHNlCisJaWYgKGNtZCA9PSBWSURJT0NfREJHX1NfUkVHSVNURVIpCiAJCWN4MThfd3JpdGVfZW5jKGN4LCByZWdzLT52YWwsIHJlZ3MtPnJlZyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3gxOF9jYXJkc19sb2NrLCBmbGFncyk7CisJZWxzZQorCQlyZWdzLT52YWwgPSBjeDE4X3JlYWRfZW5jKGN4LCByZWdzLT5yZWcpOwogCXJldHVybiAwOwogfQogCkBAIC0yOTYsNyArNDQ1LDggQEAKIAogCWlmICh2NGwyX2NoaXBfbWF0Y2hfaG9zdCgmcmVnLT5tYXRjaCkpCiAJCXJldHVybiBjeDE4X2N4YyhjeCwgVklESU9DX0RCR19HX1JFR0lTVEVSLCByZWcpOwotCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVklESU9DX0RCR19HX1JFR0lTVEVSLCByZWcpOworCS8qIEZJWE1FIC0gZXJyb3JzIHNob3VsZG4ndCBiZSBpZ25vcmVkICovCisJY3gxOF9jYWxsX2FsbChjeCwgY29yZSwgZ19yZWdpc3RlciwgcmVnKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzA3LDcgKzQ1Nyw4IEBACiAKIAlpZiAodjRsMl9jaGlwX21hdGNoX2hvc3QoJnJlZy0+bWF0Y2gpKQogCQlyZXR1cm4gY3gxOF9jeGMoY3gsIFZJRElPQ19EQkdfU19SRUdJU1RFUiwgcmVnKTsKLQljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIFZJRElPQ19EQkdfU19SRUdJU1RFUiwgcmVnKTsKKwkvKiBGSVhNRSAtIGVycm9ycyBzaG91bGRuJ3QgYmUgaWdub3JlZCAqLworCWN4MThfY2FsbF9hbGwoY3gsIGNvcmUsIHNfcmVnaXN0ZXIsIHJlZyk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKQEAgLTMzNSw3ICs0ODYsOCBAQAogCiAJc3RybGNweSh2Y2FwLT5kcml2ZXIsIENYMThfRFJJVkVSX05BTUUsIHNpemVvZih2Y2FwLT5kcml2ZXIpKTsKIAlzdHJsY3B5KHZjYXAtPmNhcmQsIGN4LT5jYXJkX25hbWUsIHNpemVvZih2Y2FwLT5jYXJkKSk7Ci0Jc25wcmludGYodmNhcC0+YnVzX2luZm8sIHNpemVvZih2Y2FwLT5idXNfaW5mbyksICJQQ0k6JXMiLCBwY2lfbmFtZShjeC0+ZGV2KSk7CisJc25wcmludGYodmNhcC0+YnVzX2luZm8sIHNpemVvZih2Y2FwLT5idXNfaW5mbyksCisJCSAiUENJOiVzIiwgcGNpX25hbWUoY3gtPnBjaV9kZXYpKTsKIAl2Y2FwLT52ZXJzaW9uID0gQ1gxOF9EUklWRVJfVkVSU0lPTjsgCSAgICAvKiB2ZXJzaW9uICovCiAJdmNhcC0+Y2FwYWJpbGl0aWVzID0gY3gtPnY0bDJfY2FwOyAJICAgIC8qIGNhcGFiaWxpdGllcyAqLwogCXJldHVybiAwOwpAQCAtNDAzLDcgKzU1NSw4IEBACiAKIAlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBjeDE4X2F2X2NtZChjeCwgVklESU9DX1NfQ1JPUCwgY3JvcCk7CisJQ1gxOF9ERUJVR19XQVJOKCJWSURJT0NfU19DUk9QIG5vdCBpbXBsZW1lbnRlZFxuIik7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgY3gxOF9nX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wKQpAQCAtNDEyLDcgKzU2NSw4IEBACiAKIAlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBjeDE4X2F2X2NtZChjeCwgVklESU9DX0dfQ1JPUCwgY3JvcCk7CisJQ1gxOF9ERUJVR19XQVJOKCJWSURJT0NfR19DUk9QIG5vdCBpbXBsZW1lbnRlZFxuIik7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgY3gxOF9lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKQEAgLTQ4Myw3ICs2MzcsNyBAQAogCWlmICh2Zi0+dHVuZXIgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIFZJRElPQ19HX0ZSRVFVRU5DWSwgdmYpOworCWN4MThfY2FsbF9hbGwoY3gsIHR1bmVyLCBnX2ZyZXF1ZW5jeSwgdmYpOwogCXJldHVybiAwOwogfQogCkBAIC01MDIsNyArNjU2LDcgQEAKIAogCWN4MThfbXV0ZShjeCk7CiAJQ1gxOF9ERUJVR19JTkZPKCJ2NGwyIGlvY3RsOiBzZXQgZnJlcXVlbmN5ICVkXG4iLCB2Zi0+ZnJlcXVlbmN5KTsKLQljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIFZJRElPQ19TX0ZSRVFVRU5DWSwgdmYpOworCWN4MThfY2FsbF9hbGwoY3gsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgdmYpOwogCWN4MThfdW5tdXRlKGN4KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTU0NywxMiArNzAxLDExIEBACiAJY3gtPnZiaS5jb3VudCA9IGN4LT5pc181MGh6ID8gMTggOiAxMjsKIAljeC0+dmJpLnN0YXJ0WzBdID0gY3gtPmlzXzUwaHogPyA2IDogMTA7CiAJY3gtPnZiaS5zdGFydFsxXSA9IGN4LT5pc181MGh6ID8gMzE4IDogMjczOwotCWN4LT52Ymkuc2xpY2VkX2RlY29kZXJfbGluZV9zaXplID0gY3gtPmlzXzYwaHogPyAyNzIgOiAyODQ7CiAJQ1gxOF9ERUJVR19JTkZPKCJTd2l0Y2hpbmcgc3RhbmRhcmQgdG8gJWxseC5cbiIsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKSBjeC0+c3RkKTsKIAogCS8qIFR1bmVyICovCi0JY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfU19TVEQsICZjeC0+c3RkKTsKKwljeDE4X2NhbGxfYWxsKGN4LCB0dW5lciwgc19zdGQsIGN4LT5zdGQpOwogCXJldHVybiAwOwogfQogCkBAIC01NjksOSArNzIyLDcgQEAKIAlpZiAodnQtPmluZGV4ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogU2V0dGluZyB0dW5lciBjYW4gb25seSBzZXQgYXVkaW8gbW9kZSAqLwotCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVklESU9DX1NfVFVORVIsIHZ0KTsKLQorCWN4MThfY2FsbF9hbGwoY3gsIHR1bmVyLCBzX3R1bmVyLCB2dCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU4Miw3ICs3MzMsNyBAQAogCWlmICh2dC0+aW5kZXggIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIFZJRElPQ19HX1RVTkVSLCB2dCk7CisJY3gxOF9jYWxsX2FsbChjeCwgdHVuZXIsIGdfdHVuZXIsIHZ0KTsKIAogCWlmICh0ZXN0X2JpdChDWDE4X0ZfSV9SQURJT19VU0VSLCAmY3gtPmlfZmxhZ3MpKSB7CiAJCXN0cmxjcHkodnQtPm5hbWUsICJjeDE4IFJhZGlvIFR1bmVyIiwgc2l6ZW9mKHZ0LT5uYW1lKSk7CkBAIC01OTgsNyArNzQ5LDMwIEBACiBzdGF0aWMgaW50IGN4MThfZ19zbGljZWRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwICpjYXApCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJc3RydWN0IGN4MTggKmN4ID0gKChzdHJ1Y3QgY3gxOF9vcGVuX2lkICopZmgpLT5jeDsKKwlpbnQgc2V0ID0gY3gtPmlzXzUwaHogPyBWNEwyX1NMSUNFRF9WQklfNjI1IDogVjRMMl9TTElDRURfVkJJXzUyNTsKKwlpbnQgZiwgbDsKKworCWlmIChjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCisJY2FwLT5zZXJ2aWNlX3NldCA9IDA7CisJZm9yIChmID0gMDsgZiA8IDI7IGYrKykgeworCQlmb3IgKGwgPSAwOyBsIDwgMjQ7IGwrKykgeworCQkJaWYgKHZhbGlkX3NlcnZpY2VfbGluZShmLCBsLCBjeC0+aXNfNTBoeikpIHsKKwkJCQkvKgorCQkJCSAqIFdlIGNhbiBmaW5kIGFsbCB2NGwyIHN1cHBvcnRlZCB2Ymkgc2VydmljZXMKKwkJCQkgKiBmb3IgdGhlIHN0YW5kYXJkLCBvbiBhIHZhbGlkIGxpbmUgZm9yIHRoZSBzdGQKKwkJCQkgKi8KKwkJCQljYXAtPnNlcnZpY2VfbGluZXNbZl1bbF0gPSBzZXQ7CisJCQkJY2FwLT5zZXJ2aWNlX3NldCB8PSBzZXQ7CisJCQl9IGVsc2UKKwkJCQljYXAtPnNlcnZpY2VfbGluZXNbZl1bbF0gPSAwOworCQl9CisJfQorCWZvciAoZiA9IDA7IGYgPCAzOyBmKyspCisJCWNhcC0+cmVzZXJ2ZWRbZl0gPSAwOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGN4MThfZ19lbmNfaW5kZXgoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLApAQCAtNzA4LDEzICs4ODIsMTUgQEAKIAlzdHJ1Y3QgdjRsMl9hdWRpbyBhdWRpbjsKIAlpbnQgaTsKIAotCUNYMThfSU5GTygiPT09PT09PT09PT09PT09PT0gIFNUQVJUIFNUQVRVUyBDQVJEICMlZCAgPT09PT09PT09PT09PT09PT1cbiIsIGN4LT5udW0pOworCUNYMThfSU5GTygiPT09PT09PT09PT09PT09PT0gIFNUQVJUIFNUQVRVUyBDQVJEICMlZCAgIgorCQkgICI9PT09PT09PT09PT09PT09PVxuIiwgY3gtPmluc3RhbmNlKTsKKwlDWDE4X0lORk8oIlZlcnNpb246ICVzICBDYXJkOiAlc1xuIiwgQ1gxOF9WRVJTSU9OLCBjeC0+Y2FyZF9uYW1lKTsKIAlpZiAoY3gtPmh3X2ZsYWdzICYgQ1gxOF9IV19UVkVFUFJPTSkgewogCQlzdHJ1Y3QgdHZlZXByb20gdHY7CiAKIAkJY3gxOF9yZWFkX2VlcHJvbShjeCwgJnR2KTsKIAl9Ci0JY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfTE9HX1NUQVRVUywgTlVMTCk7CisJY3gxOF9jYWxsX2FsbChjeCwgY29yZSwgbG9nX3N0YXR1cyk7CiAJY3gxOF9nZXRfaW5wdXQoY3gsIGN4LT5hY3RpdmVfaW5wdXQsICZ2aWRpbik7CiAJY3gxOF9nZXRfYXVkaW9faW5wdXQoY3gsIGN4LT5hdWRpb19pbnB1dCwgJmF1ZGluKTsKIAlDWDE4X0lORk8oIlZpZGVvIElucHV0OiAlc1xuIiwgdmlkaW4ubmFtZSk7CkBAIC03MjUsMTIgKzkwMSwxMiBAQAogCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7CiAJQ1gxOF9JTkZPKCJUdW5lcjogJXNcbiIsCiAJCXRlc3RfYml0KENYMThfRl9JX1JBRElPX1VTRVIsICZjeC0+aV9mbGFncykgPyAgIlJhZGlvIiA6ICJUViIpOwotCWN4MjM0MXhfbG9nX3N0YXR1cygmY3gtPnBhcmFtcywgY3gtPm5hbWUpOworCWN4MjM0MXhfbG9nX3N0YXR1cygmY3gtPnBhcmFtcywgY3gtPnY0bDJfZGV2Lm5hbWUpOwogCUNYMThfSU5GTygiU3RhdHVzIGZsYWdzOiAweCUwOGx4XG4iLCBjeC0+aV9mbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IENYMThfTUFYX1NUUkVBTVM7IGkrKykgewogCQlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbaV07CiAKLQkJaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCB8fCBzLT5idWZmZXJzID09IDApCisJCWlmIChzLT52aWRlb19kZXYgPT0gTlVMTCB8fCBzLT5idWZmZXJzID09IDApCiAJCQljb250aW51ZTsKIAkJQ1gxOF9JTkZPKCJTdHJlYW0gJXM6IHN0YXR1cyAweCUwNGx4LCAlZCUlIG9mICVkIEtpQiAoJWQgYnVmZmVycykgaW4gdXNlXG4iLAogCQkJICBzLT5uYW1lLCBzLT5zX2ZsYWdzLApAQCAtNzQwLDcgKzkxNiw4IEBACiAJQ1gxOF9JTkZPKCJSZWFkIE1QRUcvVkJJOiAlbGxkLyVsbGQgYnl0ZXNcbiIsCiAJCQkobG9uZyBsb25nKWN4LT5tcGdfZGF0YV9yZWNlaXZlZCwKIAkJCShsb25nIGxvbmcpY3gtPnZiaV9kYXRhX2luc2VydGVkKTsKLQlDWDE4X0lORk8oIj09PT09PT09PT09PT09PT09PSAgRU5EIFNUQVRVUyBDQVJEICMlZCAgPT09PT09PT09PT09PT09PT09XG4iLCBjeC0+bnVtKTsKKwlDWDE4X0lORk8oIj09PT09PT09PT09PT09PT09PSAgRU5EIFNUQVRVUyBDQVJEICMlZCAgIgorCQkgICI9PT09PT09PT09PT09PT09PT1cbiIsIGN4LT5pbnN0YW5jZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1NCw3ICs5MzEsOCBAQAogCiAJCUNYMThfREVCVUdfSU9DVEwoIlZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HKCVkLCAlZClcbiIsCiAJCQlyb3V0ZS0+aW5wdXQsIHJvdXRlLT5vdXRwdXQpOwotCQljeDE4X2F1ZGlvX3NldF9yb3V0ZShjeCwgcm91dGUpOworCQljeDE4X2NhbGxfaHcoY3gsIGN4LT5jYXJkLT5od19hdWRpb19jdHJsLCBhdWRpbywgc19yb3V0aW5nLAorCQkJICAgICByb3V0ZSk7CiAJCWJyZWFrOwogCX0KIApAQCAtNzYyLDcgKzk0MCw4IEBACiAJCXUzMiB2YWwgPSAqKHUzMiAqKWFyZzsKIAogCQlpZiAoKHZhbCA9PSAwKSB8fCAodmFsICYgMHgwMSkpCi0JCQljeDE4X3Jlc2V0X2lyX2dwaW8oJmN4LT5pMmNfYWxnb19jYl9kYXRhWzBdKTsKKwkJCWN4MThfY2FsbF9odyhjeCwgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwsIGNvcmUsIHJlc2V0LAorCQkJCSAgICAgKHUzMikgQ1gxOF9HUElPX1JFU0VUX1o4RjA4MTEpOwogCQlicmVhazsKIAl9CiAKQEAgLTc4Miw2ICs5NjEsOCBAQAogCiAJbXV0ZXhfbG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAorCS8qIEZJWE1FIC0gY29uc29saWRhdGUgdjRsMl9wcmlvX2NoZWNrKCkncyBoZXJlICovCisKIAlpZiAoY3gxOF9kZWJ1ZyAmIENYMThfREJHRkxHX0lPQ1RMKQogCQl2ZmQtPmRlYnVnID0gVjRMMl9ERUJVR19JT0NUTCB8IFY0TDJfREVCVUdfSU9DVExfQVJHOwogCXJlcyA9IHZpZGVvX2lvY3RsMihmaWxwLCBjbWQsIGFyZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMKaW5kZXggZGU1ZTcyMy4uMjIyNmU1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtbWFpbGJveC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guYwpAQCAtODMsNiArODMsOCBAQAogCUFQSV9FTlRSWShDUFUsIENYMThfQ1BVX0RFX1NFVF9NRExfQUNLLAkJCTApLAogCUFQSV9FTlRSWShDUFUsIENYMThfQ1BVX0RFX1NFVF9NREwsCQkJQVBJX0ZBU1QpLAogCUFQSV9FTlRSWShDUFUsIENYMThfQ1BVX0RFX1JFTEVBU0VfTURMLAkJCUFQSV9TTE9XKSwKKwlBUElfRU5UUlkoQVBVLCBDWDE4X0FQVV9TVEFSVCwJCQkJMCksCisJQVBJX0VOVFJZKEFQVSwgQ1gxOF9BUFVfU1RPUCwJCQkJMCksCiAJQVBJX0VOVFJZKEFQVSwgQ1gxOF9BUFVfUkVTRVRBSSwJCQkwKSwKIAlBUElfRU5UUlkoQ1BVLCBDWDE4X0NQVV9ERUJVR19QRUVLMzIsCQkJMCksCiAJQVBJX0VOVFJZKDAsIDAsCQkJCQkJMCksCkBAIC05OCwyMSArMTAwLDMwIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qIENhbGwgd2l0aCBidWYgb2YgbioxMSsxIGJ5dGVzICovCitzdGF0aWMgY2hhciAqdTMyYXJyMmhleCh1MzIgZGF0YVtdLCBpbnQgbiwgY2hhciAqYnVmKQoreworCWNoYXIgKnA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwLCBwID0gYnVmOyBpIDwgbjsgaSsrLCBwICs9IDExKSB7CisJCS8qIGtlcm5lbCBzbnByaW50ZigpIGFwcGVuZHMgJ1wwJyBhbHdheXMgKi8KKwkJc25wcmludGYocCwgMTIsICIgJSMwMTB4IiwgZGF0YVtpXSk7CisJfQorCSpwID0gJ1wwJzsKKwlyZXR1cm4gYnVmOworfQorCiBzdGF0aWMgdm9pZCBkdW1wX21iKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IGN4MThfbWFpbGJveCAqbWIsIGNoYXIgKm5hbWUpCiB7CiAJY2hhciBhcmdzdHJbTUFYX01CX0FSR1VNRU5UUyoxMSsxXTsKLQljaGFyICpwOwotCWludCBpOwogCiAJaWYgKCEoY3gxOF9kZWJ1ZyAmIENYMThfREJHRkxHX0FQSSkpCiAJCXJldHVybjsKIAotCWZvciAoaSA9IDAsIHAgPSBhcmdzdHI7IGkgPCBNQVhfTUJfQVJHVU1FTlRTOyBpKyssIHAgKz0gMTEpIHsKLQkJLyoga2VybmVsIHNucHJpbnRmKCkgYXBwZW5kcyAnXDAnIGFsd2F5cyAqLwotCQlzbnByaW50ZihwLCAxMiwgIiAlIzAxMHgiLCBtYi0+YXJnc1tpXSk7Ci0JfQogCUNYMThfREVCVUdfQVBJKCIlczogcmVxICUjMDEweCBhY2sgJSMwMTB4IGNtZCAlIzAxMHggZXJyICUjMDEweCBhcmdzJXMiCi0JCSJcbiIsIG5hbWUsIG1iLT5yZXF1ZXN0LCBtYi0+YWNrLCBtYi0+Y21kLCBtYi0+ZXJyb3IsIGFyZ3N0cik7CisJCSAgICAgICAiXG4iLCBuYW1lLCBtYi0+cmVxdWVzdCwgbWItPmFjaywgbWItPmNtZCwgbWItPmVycm9yLAorCQkgICAgICAgdTMyYXJyMmhleChtYi0+YXJncywgTUFYX01CX0FSR1VNRU5UUywgYXJnc3RyKSk7CiB9CiAKIApAQCAtNDM5LDcgKzQ1MCw4IEBACiAJCQkJImluY29taW5nICVzIHRvIEVQVSBtYWlsYm94IChzZXF1ZW5jZSBuby4gJXUpIgogCQkJCSJcbiIsCiAJCQkJcnB1X3N0cltycHVdLCBycHVfc3RyW3JwdV0sIG9yZGVyX21iLT5yZXF1ZXN0KTsKLQkJZHVtcF9tYihjeCwgb3JkZXJfbWIsICJpbmNvbWluZyIpOworCQlpZiAoY3gxOF9kZWJ1ZyAmIENYMThfREJHRkxHX1dBUk4pCisJCQlkdW1wX21iKGN4LCBvcmRlcl9tYiwgImluY29taW5nIik7CiAJCW9yZGVyLT5mbGFncyA9IENYMThfRl9FV09fTUJfU1RBTEVfVVBPTl9SRUNFSVBUOwogCX0KIApAQCAtNDY4LDE2ICs0ODAsMjQgQEAKIAlzdHJ1Y3QgbXV0ZXggKm1iX2xvY2s7CiAJbG9uZyBpbnQgdGltZW91dCwgcmV0OwogCWludCBpOworCWNoYXIgYXJnc3RyW01BWF9NQl9BUkdVTUVOVFMqMTErMV07CiAKIAlpZiAoaW5mbyA9PSBOVUxMKSB7CiAJCUNYMThfV0FSTigidW5rbm93biBjbWQgJXhcbiIsIGNtZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChjbWQgPT0gQ1gxOF9DUFVfREVfU0VUX01ETCkKLQkJQ1gxOF9ERUJVR19ISV9BUEkoIiVzXG4iLCBpbmZvLT5uYW1lKTsKLQllbHNlCi0JCUNYMThfREVCVUdfQVBJKCIlc1xuIiwgaW5mby0+bmFtZSk7CisJaWYgKGN4MThfZGVidWcgJiBDWDE4X0RCR0ZMR19BUEkpIHsgLyogb25seSBjYWxsIHUzMmFycjJoZXggaWYgbmVlZGVkICovCisJCWlmIChjbWQgPT0gQ1gxOF9DUFVfREVfU0VUX01ETCkgeworCQkJaWYgKGN4MThfZGVidWcgJiBDWDE4X0RCR0ZMR19ISUdIVk9MKQorCQkJCUNYMThfREVCVUdfSElfQVBJKCIlc1x0Y21kICUjMDEweCBhcmdzJXNcbiIsCisJCQkJCQlpbmZvLT5uYW1lLCBjbWQsCisJCQkJCQl1MzJhcnIyaGV4KGRhdGEsIGFyZ3MsIGFyZ3N0cikpOworCQl9IGVsc2UKKwkJCUNYMThfREVCVUdfQVBJKCIlc1x0Y21kICUjMDEweCBhcmdzJXNcbiIsCisJCQkJICAgICAgIGluZm8tPm5hbWUsIGNtZCwKKwkJCQkgICAgICAgdTMyYXJyMmhleChkYXRhLCBhcmdzLCBhcmdzdHIpKTsKKwl9CiAKIAlzd2l0Y2ggKGluZm8tPnJwdSkgewogCWNhc2UgQVBVOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmMKaW5kZXggOGQ5NDQxZS4uMzA0NmI4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5jCkBAIC0yMDQsNyArMjA0LDcgQEAKIAkJfQogCQlidWYtPmlkID0gY3gtPmJ1ZmZlcl9pZCsrOwogCQlJTklUX0xJU1RfSEVBRCgmYnVmLT5saXN0KTsKLQkJYnVmLT5kbWFfaGFuZGxlID0gcGNpX21hcF9zaW5nbGUocy0+Y3gtPmRldiwKKwkJYnVmLT5kbWFfaGFuZGxlID0gcGNpX21hcF9zaW5nbGUocy0+Y3gtPnBjaV9kZXYsCiAJCQkJYnVmLT5idWYsIHMtPmJ1Zl9zaXplLCBzLT5kbWEpOwogCQljeDE4X2J1Zl9zeW5jX2Zvcl9jcHUocywgYnVmKTsKIAkJY3gxOF9lbnF1ZXVlKHMsIGJ1ZiwgJnMtPnFfZnJlZSk7CkBAIC0yMjcsNyArMjI3LDcgQEAKIAogCS8qIGVtcHR5IHFfZnJlZSAqLwogCXdoaWxlICgoYnVmID0gY3gxOF9kZXF1ZXVlKHMsICZzLT5xX2ZyZWUpKSkgewotCQlwY2lfdW5tYXBfc2luZ2xlKHMtPmN4LT5kZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKKwkJcGNpX3VubWFwX3NpbmdsZShzLT5jeC0+cGNpX2RldiwgYnVmLT5kbWFfaGFuZGxlLAogCQkJCXMtPmJ1Zl9zaXplLCBzLT5kbWEpOwogCQlrZnJlZShidWYtPmJ1Zik7CiAJCWtmcmVlKGJ1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuaAppbmRleCA0NTZjZWMzLi40ZGUwNjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmgKQEAgLTI5LDE0ICsyOSwxNCBAQAogc3RhdGljIGlubGluZSB2b2lkIGN4MThfYnVmX3N5bmNfZm9yX2NwdShzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMsCiAJc3RydWN0IGN4MThfYnVmZmVyICpidWYpCiB7Ci0JcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHMtPmN4LT5kZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKKwlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocy0+Y3gtPnBjaV9kZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKIAkJCQlzLT5idWZfc2l6ZSwgcy0+ZG1hKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGN4MThfYnVmX3N5bmNfZm9yX2RldmljZShzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMsCiAJc3RydWN0IGN4MThfYnVmZmVyICpidWYpCiB7Ci0JcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHMtPmN4LT5kZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKKwlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uocy0+Y3gtPnBjaV9kZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKIAkJCQlzLT5idWZfc2l6ZSwgcy0+ZG1hKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCmluZGV4IDg5YzFlYzkuLjA5MzJiNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJjeDE4LXN0cmVhbXMuaCIKICNpbmNsdWRlICJjeDE4LWNhcmRzLmgiCiAjaW5jbHVkZSAiY3gxOC1zY2IuaCIKLSNpbmNsdWRlICJjeDE4LWF2LWNvcmUuaCIKICNpbmNsdWRlICJjeDE4LWR2Yi5oIgogCiAjZGVmaW5lIENYMThfRFNQMF9JTlRFUlJVUFRfTUFTSyAgICAgCTB4ZDAwMDRDCkBAIC0xMDEsMTEgKzEwMCwxMSBAQAogc3RhdGljIHZvaWQgY3gxOF9zdHJlYW1faW5pdChzdHJ1Y3QgY3gxOCAqY3gsIGludCB0eXBlKQogewogCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1t0eXBlXTsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSBzLT52NGwyZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX2RldiA9IHMtPnZpZGVvX2RldjsKIAotCS8qIHdlIG5lZWQgdG8ga2VlcCB2NGwyZGV2LCBzbyByZXN0b3JlIGl0IGFmdGVyd2FyZHMgKi8KKwkvKiB3ZSBuZWVkIHRvIGtlZXAgdmlkZW9fZGV2LCBzbyByZXN0b3JlIGl0IGFmdGVyd2FyZHMgKi8KIAltZW1zZXQocywgMCwgc2l6ZW9mKCpzKSk7Ci0Jcy0+djRsMmRldiA9IGRldjsKKwlzLT52aWRlb19kZXYgPSB2aWRlb19kZXY7CiAKIAkvKiBpbml0aWFsaXplIGN4MThfc3RyZWFtIGZpZWxkcyAqLwogCXMtPmN4ID0gY3g7CkBAIC0xMzAsMTIgKzEyOSwxMiBAQAogCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1t0eXBlXTsKIAl1MzIgY2FwID0gY3gtPnY0bDJfY2FwOwogCWludCBudW1fb2Zmc2V0ID0gY3gxOF9zdHJlYW1faW5mb1t0eXBlXS5udW1fb2Zmc2V0OwotCWludCBudW0gPSBjeC0+bnVtICsgY3gxOF9maXJzdF9taW5vciArIG51bV9vZmZzZXQ7CisJaW50IG51bSA9IGN4LT5pbnN0YW5jZSArIGN4MThfZmlyc3RfbWlub3IgKyBudW1fb2Zmc2V0OwogCi0JLyogVGhlc2UgZm91ciBmaWVsZHMgYXJlIGFsd2F5cyBpbml0aWFsaXplZC4gSWYgdjRsMmRldiA9PSBOVUxMLCB0aGVuCisJLyogVGhlc2UgZm91ciBmaWVsZHMgYXJlIGFsd2F5cyBpbml0aWFsaXplZC4gSWYgdmlkZW9fZGV2ID09IE5VTEwsIHRoZW4KIAkgICB0aGlzIHN0cmVhbSBpcyBub3QgaW4gdXNlLiBJbiB0aGF0IGNhc2Ugbm8gb3RoZXIgZmllbGRzIGJ1dCB0aGVzZQogCSAgIGZvdXIgY2FuIGJlIHVzZWQuICovCi0Jcy0+djRsMmRldiA9IE5VTEw7CisJcy0+dmlkZW9fZGV2ID0gTlVMTDsKIAlzLT5jeCA9IGN4OwogCXMtPnR5cGUgPSB0eXBlOwogCXMtPm5hbWUgPSBjeDE4X3N0cmVhbV9pbmZvW3R5cGVdLm5hbWU7CkBAIC0xNjMsMjIgKzE2MiwyMiBAQAogCQlyZXR1cm4gMDsKIAogCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSB2NGwyIHZpZGVvIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQlzLT52NGwyZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7Ci0JaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCkgeworCXMtPnZpZGVvX2RldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmIChzLT52aWRlb19kZXYgPT0gTlVMTCkgewogCQlDWDE4X0VSUigiQ291bGRuJ3QgYWxsb2NhdGUgdjRsMiB2aWRlb19kZXZpY2UgZm9yICVzXG4iLAogCQkJCXMtPm5hbWUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlzbnByaW50ZihzLT52NGwyZGV2LT5uYW1lLCBzaXplb2Yocy0+djRsMmRldi0+bmFtZSksICJjeDE4LSVkIiwKLQkJCWN4LT5udW0pOworCXNucHJpbnRmKHMtPnZpZGVvX2Rldi0+bmFtZSwgc2l6ZW9mKHMtPnZpZGVvX2Rldi0+bmFtZSksICIlcyAlcyIsCisJCSBjeC0+djRsMl9kZXYubmFtZSwgcy0+bmFtZSk7CiAKLQlzLT52NGwyZGV2LT5udW0gPSBudW07Ci0Jcy0+djRsMmRldi0+cGFyZW50ID0gJmN4LT5kZXYtPmRldjsKLQlzLT52NGwyZGV2LT5mb3BzID0gJmN4MThfdjRsMl9lbmNfZm9wczsKLQlzLT52NGwyZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7Ci0Jcy0+djRsMmRldi0+dHZub3JtcyA9IFY0TDJfU1REX0FMTDsKLQljeDE4X3NldF9mdW5jcyhzLT52NGwyZGV2KTsKKwlzLT52aWRlb19kZXYtPm51bSA9IG51bTsKKwlzLT52aWRlb19kZXYtPnY0bDJfZGV2ID0gJmN4LT52NGwyX2RldjsKKwlzLT52aWRlb19kZXYtPmZvcHMgPSAmY3gxOF92NGwyX2VuY19mb3BzOworCXMtPnZpZGVvX2Rldi0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOworCXMtPnZpZGVvX2Rldi0+dHZub3JtcyA9IFY0TDJfU1REX0FMTDsKKwljeDE4X3NldF9mdW5jcyhzLT52aWRlb19kZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjcsMjggKzIyNiwzMCBAQAogCQl9CiAJfQogCi0JaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCkKKwlpZiAocy0+dmlkZW9fZGV2ID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JbnVtID0gcy0+djRsMmRldi0+bnVtOworCW51bSA9IHMtPnZpZGVvX2Rldi0+bnVtOwogCS8qIGNhcmQgbnVtYmVyICsgdXNlciBkZWZpbmVkIG9mZnNldCArIGRldmljZSBvZmZzZXQgKi8KIAlpZiAodHlwZSAhPSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcpIHsKIAkJc3RydWN0IGN4MThfc3RyZWFtICpzX21wZyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEddOwogCi0JCWlmIChzX21wZy0+djRsMmRldikKLQkJCW51bSA9IHNfbXBnLT52NGwyZGV2LT5udW0gKyBjeDE4X3N0cmVhbV9pbmZvW3R5cGVdLm51bV9vZmZzZXQ7CisJCWlmIChzX21wZy0+dmlkZW9fZGV2KQorCQkJbnVtID0gc19tcGctPnZpZGVvX2Rldi0+bnVtCisJCQkgICAgKyBjeDE4X3N0cmVhbV9pbmZvW3R5cGVdLm51bV9vZmZzZXQ7CiAJfQorCXZpZGVvX3NldF9kcnZkYXRhKHMtPnZpZGVvX2Rldiwgcyk7CiAKIAkvKiBSZWdpc3RlciBkZXZpY2UuIEZpcnN0IHRyeSB0aGUgZGVzaXJlZCBtaW5vciwgdGhlbiBhbnkgZnJlZSBvbmUuICovCi0JcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHMtPnY0bDJkZXYsIHZmbF90eXBlLCBudW0pOworCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShzLT52aWRlb19kZXYsIHZmbF90eXBlLCBudW0pOwogCWlmIChyZXQgPCAwKSB7CiAJCUNYMThfRVJSKCJDb3VsZG4ndCByZWdpc3RlciB2NGwyIGRldmljZSBmb3IgJXMga2VybmVsIG51bWJlciAlZFxuIiwKIAkJCXMtPm5hbWUsIG51bSk7Ci0JCXZpZGVvX2RldmljZV9yZWxlYXNlKHMtPnY0bDJkZXYpOwotCQlzLT52NGwyZGV2ID0gTlVMTDsKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2Uocy0+dmlkZW9fZGV2KTsKKwkJcy0+dmlkZW9fZGV2ID0gTlVMTDsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JbnVtID0gcy0+djRsMmRldi0+bnVtOworCW51bSA9IHMtPnZpZGVvX2Rldi0+bnVtOwogCiAJc3dpdGNoICh2ZmxfdHlwZSkgewogCWNhc2UgVkZMX1RZUEVfR1JBQkJFUjoKQEAgLTMxMiw5ICszMTMsOSBAQAogCQkJY3gtPnN0cmVhbXNbdHlwZV0uZHZiLmVuYWJsZWQgPSBmYWxzZTsKIAkJfQogCi0JCXZkZXYgPSBjeC0+c3RyZWFtc1t0eXBlXS52NGwyZGV2OworCQl2ZGV2ID0gY3gtPnN0cmVhbXNbdHlwZV0udmlkZW9fZGV2OwogCi0JCWN4LT5zdHJlYW1zW3R5cGVdLnY0bDJkZXYgPSBOVUxMOworCQljeC0+c3RyZWFtc1t0eXBlXS52aWRlb19kZXYgPSBOVUxMOwogCQlpZiAodmRldiA9PSBOVUxMKQogCQkJY29udGludWU7CiAKQEAgLTM0Niw0NiArMzQ3LDg4IEBACiAJfQogCiAJLyogc2V0dXAgVkJJIHJlZ2lzdGVycyAqLwotCWN4MThfYXZfY21kKGN4LCBWSURJT0NfU19GTVQsICZjeC0+dmJpLmluKTsKKwl2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgdmlkZW8sIHNfZm10LCAmY3gtPnZiaS5pbik7CiAKLQkvKiBkZXRlcm1pbmUgbnVtYmVyIG9mIGxpbmVzIGFuZCB0b3RhbCBudW1iZXIgb2YgVkJJIGJ5dGVzLgotCSAgIEEgcmF3IGxpbmUgdGFrZXMgMTQ0NCBieXRlczogNCBieXRlIFNBViBjb2RlICsgMiAqIDcyMAotCSAgIEEgc2xpY2VkIGxpbmUgdGFrZXMgNTEgYnl0ZXM6IDQgYnl0ZSBmcmFtZSBoZWFkZXIsIDQgYnl0ZSBpbnRlcm5hbAotCSAgIGhlYWRlciwgNDIgZGF0YSBieXRlcyArIGNoZWNrc3VtICh0byBiZSBjb25maXJtZWQpICovCisJLyoKKwkgKiBTZW5kIHRoZSBDWDE4X0NQVV9TRVRfUkFXX1ZCSV9QQVJBTSBBUEkgY29tbWFuZCB0byBzZXR1cCBFbmNvZGVyIFJhdworCSAqIFZCSSB3aGVuIHRoZSBmaXJzdCBhbmFsb2cgY2FwdHVyZSBjaGFubmVsIHN0YXJ0cywgYXMgb25jZSBpdCBzdGFydHMKKwkgKiAoZS5nLiBNUEVHKSwgd2UgY2FuJ3QgZWZmZWN0IGFueSBjaGFuZ2UgaW4gdGhlIEVuY29kZXIgUmF3IFZCSSBzZXR1cAorCSAqIChpLmUuIGZvciB0aGUgVkJJIGNhcHR1cmUgY2hhbm5lbHMpLiAgV2UgYWxzbyBzZW5kIGl0IGZvciBlYWNoCisJICogYW5hbG9nIGNhcHR1cmUgY2hhbm5lbCBhbnl3YXkganVzdCB0byBtYWtlIHN1cmUgd2UgZ2V0IHRoZSBwcm9wZXIKKwkgKiBiZWhhdmlvcgorCSAqLwogCWlmIChyYXcpIHsKIAkJbGluZXMgPSBjeC0+dmJpLmNvdW50ICogMjsKIAl9IGVsc2UgewotCQlsaW5lcyA9IGN4LT5pc182MGh6ID8gMjQgOiAzODsKLQkJaWYgKGN4LT5pc182MGh6KQotCQkJbGluZXMgKz0gMjsKKwkJLyoKKwkJICogRm9yIDUyNS82MCBzeXN0ZW1zLCBhY2NvcmRpbmcgdG8gdGhlIFZJUCAyICYgQlQuNjU2IHN0ZDoKKwkJICogVGhlIEVBViBSUCBjb2RlJ3MgRmllbGQgYml0IHRvZ2dsZXMgb24gbGluZSA0LCBhIGZldyBsaW5lcworCQkgKiBhZnRlciB0aGUgVmVydGNhbCBCbGFuayBiaXQgaGFzIGFscmVhZHkgdG9nZ2xlZC4KKwkJICogVGVsbCB0aGUgZW5jb2RlciB0byBjYXB0dXJlIDIxLTQrMT0xOCBsaW5lcyBwZXIgZmllbGQsCisJCSAqIHNpbmNlIHdlIHdhbnQgbGluZXMgMTAgdGhyb3VnaCAyMS4KKwkJICoKKwkJICogRklYTUUgLSByZXZpc2l0IGZvciA2MjUvNTAgc3lzdGVtcworCQkgKi8KKwkJbGluZXMgPSBjeC0+aXNfNjBoeiA/ICgyMSAtIDQgKyAxKSAqIDIgOiAzODsKIAl9CiAKLQljeC0+dmJpLmVuY19zaXplID0gbGluZXMgKgotCQkocmF3ID8gY3gtPnZiaS5yYXdfc2l6ZSA6IGN4LT52Ymkuc2xpY2VkX3NpemUpOwotCiAJZGF0YVswXSA9IHMtPmhhbmRsZTsKIAkvKiBMaW5lcyBwZXIgZmllbGQgKi8KIAlkYXRhWzFdID0gKGxpbmVzIC8gMikgfCAoKGxpbmVzIC8gMikgPDwgMTYpOwogCS8qIGJ5dGVzIHBlciBsaW5lICovCi0JZGF0YVsyXSA9IChyYXcgPyBjeC0+dmJpLnJhd19kZWNvZGVyX2xpbmVfc2l6ZQotCQkgICAgICAgOiBjeC0+dmJpLnNsaWNlZF9kZWNvZGVyX2xpbmVfc2l6ZSk7CisJZGF0YVsyXSA9IChyYXcgPyB2YmlfYWN0aXZlX3NhbXBsZXMKKwkJICAgICAgIDogKGN4LT5pc182MGh6ID8gdmJpX2hibGFua19zYW1wbGVzXzYwSHoKKwkJCQkgICAgICA6IHZiaV9oYmxhbmtfc2FtcGxlc181MEh6KSk7CiAJLyogRXZlcnkgWCBudW1iZXIgb2YgZnJhbWVzIGEgVkJJIGludGVycnVwdCBhcnJpdmVzCiAJICAgKGZyYW1lcyBhcyBpbiAyNSBvciAzMCBmcHMpICovCiAJZGF0YVszXSA9IDE7Ci0JLyogU2V0dXAgVkJJIGZvciB0aGUgY3gyNTg0MCBkaWdpdGl6ZXIgKi8KKwkvKgorCSAqIFNldCB0aGUgU0FWL0VBViBSUCBjb2RlcyB0byBsb29rIGZvciBhcyBzdGFydC9zdG9wIHBvaW50cworCSAqIHdoZW4gaW4gVklQLTEuMSBtb2RlCisJICovCiAJaWYgKHJhdykgeworCQkvKgorCQkgKiBTdGFydCBjb2RlcyBmb3IgYmVnaW5uaW5nIG9mICJhY3RpdmUiIGxpbmUgaW4gdmVydGljYWwgYmxhbmsKKwkJICogMHgyMCAoICAgICAgICAgICAgICAgVmVydGljYWxCbGFuayAgICAgICAgICAgICAgICApCisJCSAqIDB4NjAgKCAgICAgRXZlbkZpZWxkIFZlcnRpY2FsQmxhbmsgICAgICAgICAgICAgICAgKQorCQkgKi8KIAkJZGF0YVs0XSA9IDB4MjA2MDIwNjA7CisJCS8qCisJCSAqIEVuZCBjb2RlcyBmb3IgZW5kIG9mICJhY3RpdmUiIHJhdyBsaW5lcyBhbmQgcmVndWxhciBsaW5lcworCQkgKiAweDMwICggICAgICAgICAgICAgICBWZXJ0aWNhbEJsYW5rIEhvcml6b250YWxCbGFuaykKKwkJICogMHg3MCAoICAgICBFdmVuRmllbGQgVmVydGljYWxCbGFuayBIb3Jpem9udGFsQmxhbmspCisJCSAqIDB4OTAgKFRhc2sgICAgICAgICAgICAgICAgICAgICAgICAgSG9yaXpvbnRhbEJsYW5rKQorCQkgKiAweGQwIChUYXNrIEV2ZW5GaWVsZCAgICAgICAgICAgICAgIEhvcml6b250YWxCbGFuaykKKwkJICovCiAJCWRhdGFbNV0gPSAweDMwNzA5MGQwOwogCX0gZWxzZSB7CisJCS8qCisJCSAqIEVuZCBjb2RlcyBmb3IgYWN0aXZlIHZpZGVvLCB3ZSB3YW50IGRhdGEgaW4gdGhlIGhibGFuayByZWdpb24KKwkJICogMHhiMCAoVGFzayAgICAgICAgIDAgVmVydGljYWxCbGFuayBIb3Jpem9udGFsQmxhbmspCisJCSAqIDB4ZjAgKFRhc2sgRXZlbkZpZWxkIFZlcnRpY2FsQmxhbmsgSG9yaXpvbnRhbEJsYW5rKQorCQkgKgorCQkgKiBTaW5jZSB0aGUgViBiaXQgaXMgb25seSBhbGxvd2VkIHRvIHRvZ2dsZSBpbiB0aGUgRUFWIFJQIGNvZGUsCisJCSAqIGp1c3QgYmVmb3JlIHRoZSBmaXJzdCBhY3RpdmUgcmVnaW9uIGxpbmUsIHRoZXNlIHR3bworCQkgKiBhcmUgcHJvYmxlbWF0aWM6CisJCSAqIDB4OTAgKFRhc2sgICAgICAgICAgICAgICAgICAgICAgICAgSG9yaXpvbnRhbEJsYW5rKQorCQkgKiAweGQwIChUYXNrIEV2ZW5GaWVsZCAgICAgICAgICAgICAgIEhvcml6b250YWxCbGFuaykKKwkJICoKKwkJICogV2UgaGF2ZSBzZXQgdGhlIGRpZ2l0emVyIHN1Y2ggdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5CisJCSAqIGFib3V0IHRoZXNlIHByb2JsZW0gY29kZXMuCisJCSAqLwogCQlkYXRhWzRdID0gMHhCMEYwQjBGMDsKKwkJLyoKKwkJICogU3RhcnQgY29kZXMgZm9yIGJlZ2lubmluZyBvZiBhY3RpdmUgbGluZSBpbiB2ZXJ0aWNhbCBibGFuaworCQkgKiAweGEwIChUYXNrICAgICAgICAgICBWZXJ0aWNhbEJsYW5rICAgICAgICAgICAgICAgICkKKwkJICogMHhlMCAoVGFzayBFdmVuRmllbGQgVmVydGljYWxCbGFuayAgICAgICAgICAgICAgICApCisJCSAqLwogCQlkYXRhWzVdID0gMHhBMEUwQTBFMDsKIAl9CiAKIAlDWDE4X0RFQlVHX0lORk8oIlNldHVwIFZCSSBoOiAlZCBsaW5lcyAleCBicGwgJWQgZnIgJWQgJXggJXhcbiIsCiAJCQlkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdLCBkYXRhWzRdLCBkYXRhWzVdKTsKIAotCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSkKLQkJY3gxOF9hcGkoY3gsIENYMThfQ1BVX1NFVF9SQVdfVkJJX1BBUkFNLCA2LCBkYXRhKTsKKwljeDE4X2FwaShjeCwgQ1gxOF9DUFVfU0VUX1JBV19WQklfUEFSQU0sIDYsIGRhdGEpOwogfQogCiBzdHJ1Y3QgY3gxOF9xdWV1ZSAqY3gxOF9zdHJlYW1fcHV0X2J1Zl9mdyhzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMsCkBAIC00MzQsMTAgKzQ3NywxMCBAQAogCXUzMiBkYXRhW01BWF9NQl9BUkdVTUVOVFNdOwogCXN0cnVjdCBjeDE4ICpjeCA9IHMtPmN4OwogCXN0cnVjdCBjeDE4X2J1ZmZlciAqYnVmOwotCWludCB0cyA9IDA7CiAJaW50IGNhcHR5cGUgPSAwOworCXN0cnVjdCBjeDE4X2FwaV9mdW5jX3ByaXZhdGUgcHJpdjsKIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwgJiYgcy0+ZHZiLmVuYWJsZWQgPT0gMCkKKwlpZiAocy0+dmlkZW9fZGV2ID09IE5VTEwgJiYgcy0+ZHZiLmVuYWJsZWQgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlDWDE4X0RFQlVHX0lORk8oIlN0YXJ0IGVuY29kZXIgc3RyZWFtICVzXG4iLCBzLT5uYW1lKTsKQEAgLTQ1Myw3ICs0OTYsNiBAQAogCiAJY2FzZSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9UUzoKIAkJY2FwdHlwZSA9IENBUFRVUkVfQ0hBTk5FTF9UWVBFX1RTOwotCQl0cyA9IDE7CiAJCWJyZWFrOwogCWNhc2UgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfWVVWOgogCQljYXB0eXBlID0gQ0FQVFVSRV9DSEFOTkVMX1RZUEVfWVVWOwpAQCAtNDYyLDggKzUwNCwxNiBAQAogCQljYXB0eXBlID0gQ0FQVFVSRV9DSEFOTkVMX1RZUEVfUENNOwogCQlicmVhazsKIAljYXNlIENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSToKKyNpZmRlZiBDWDE4X0VOQ09ERVJfUEFSU0VTX1NMSUNFRAogCQljYXB0eXBlID0gY3gxOF9yYXdfdmJpKGN4KSA/CiAJCSAgICAgQ0FQVFVSRV9DSEFOTkVMX1RZUEVfVkJJIDogQ0FQVFVSRV9DSEFOTkVMX1RZUEVfU0xJQ0VEX1ZCSTsKKyNlbHNlCisJCS8qCisJCSAqIEN1cnJlbnRseSB3ZSBzZXQgdGhpbmdzIHVwIHNvIHRoYXQgU2xpY2VkIFZCSSBmcm9tIHRoZQorCQkgKiBkaWdpdGl6ZXIgaXMgaGFuZGxlZCBhcyBSYXcgVkJJIGJ5IHRoZSBlbmNvZGVyCisJCSAqLworCQljYXB0eXBlID0gQ0FQVFVSRV9DSEFOTkVMX1RZUEVfVkJJOworI2VuZGlmCiAJCWN4LT52YmkuZnJhbWUgPSAwOwogCQljeC0+dmJpLmluc2VydGVkX2ZyYW1lID0gMDsKIAkJbWVtc2V0KGN4LT52Ymkuc2xpY2VkX21wZWdfc2l6ZSwKQEAgLTQ3MywxMCArNTIzLDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogbXV0ZS91bm11dGUgdmlkZW8gKi8KLQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX1NFVF9WSURFT19NVVRFLCAyLAotCQkgIHMtPmhhbmRsZSwgISF0ZXN0X2JpdChDWDE4X0ZfSV9SQURJT19VU0VSLCAmY3gtPmlfZmxhZ3MpKTsKLQogCS8qIENsZWFyIFN0cmVhbW9mZiBmbGFncyBpbiBjYXNlIGxlZnQgZnJvbSBsYXN0IGNhcHR1cmUgKi8KIAljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNT0ZGLCAmcy0+c19mbGFncyk7CiAKQEAgLTQ4NCwzMSArNTMwLDYzIEBACiAJcy0+aGFuZGxlID0gZGF0YVswXTsKIAljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX1NFVF9DSEFOTkVMX1RZUEUsIDIsIHMtPmhhbmRsZSwgY2FwdHlwZSk7CiAKLQlpZiAoYXRvbWljX3JlYWQoJmN4LT5hbmFfY2FwdHVyaW5nKSA9PSAwICYmICF0cykgewotCQlzdHJ1Y3QgY3gxOF9hcGlfZnVuY19wcml2YXRlIHByaXY7Ci0KLQkJLyogU3R1ZmYgZnJvbSBXaW5kb3dzLCB3ZSBkb24ndCBrbm93IHdoYXQgaXQgaXMgKi8KKwkvKgorCSAqIEZvciBldmVyeXRoaW5nIGJ1dCBDQVBUVVJFX0NIQU5ORUxfVFlQRV9UUywgcGxheSBpdCBzYWZlIGFuZAorCSAqIHNldCB1cCBhbGwgdGhlIHBhcmFtZXRlcnMsIGFzIGl0IGlzIG5vdCBvYnZpb3VzIHdoaWNoIHBhcmFtZXRlcnMgdGhlCisJICogZmlybXdhcmUgc2hhcmVzIGFjcm9zcyBjYXB0dXJlIGNoYW5uZWwgdHlwZXMgYW5kIHdoaWNoIGl0IGRvZXMgbm90LgorCSAqCisJICogU29tZSBvZiB0aGUgY3gxOF92YXBpKCkgY2FsbHMgYmVsb3cgYXBwbHkgdG8gb25seSBjZXJ0YWluIGNhcHR1cmUKKwkgKiBjaGFubmVsIHR5cGVzLiAgV2UncmUgaG9waW5nIHRoZXJlJ3Mgbm8gaGFybSBpbiBjYWxsaW5nIG1vc3Qgb2YgdGhlbQorCSAqIGFueXdheSwgYXMgbG9uZyBhcyB0aGUgdmFsdWVzIGFyZSBhbGwgY29uc2lzdGVudC4gIFNldHRpbmcgc29tZQorCSAqIHNoYXJlZCBwYXJhbWV0ZXJzIHdpbGwgaGF2ZSBubyBlZmZlY3Qgb25jZSBhbiBhbmFsb2cgY2FwdHVyZSBjaGFubmVsCisJICogaGFzIHN0YXJ0ZWQgc3RyZWFtaW5nLgorCSAqLworCWlmIChjYXB0eXBlICE9IENBUFRVUkVfQ0hBTk5FTF9UWVBFX1RTKSB7CiAJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX1ZFUl9DUk9QX0xJTkUsIDIsIHMtPmhhbmRsZSwgMCk7CiAJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX01JU0NfUEFSQU1FVEVSUywgMywgcy0+aGFuZGxlLCAzLCAxKTsKIAkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9TRVRfTUlTQ19QQVJBTUVURVJTLCAzLCBzLT5oYW5kbGUsIDgsIDApOwogCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX1NFVF9NSVNDX1BBUkFNRVRFUlMsIDMsIHMtPmhhbmRsZSwgNCwgMSk7Ci0JCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX01JU0NfUEFSQU1FVEVSUywgMiwgcy0+aGFuZGxlLCAxMik7CiAKKwkJLyoKKwkJICogQXVkaW8gcmVsYXRlZCByZXNldCBhY2NvcmRpbmcgdG8KKwkJICogRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jeDIzNDF4L2Z3LWVuY29kZXItYXBpLnR4dAorCQkgKi8KKwkJaWYgKGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZykgPT0gMCkKKwkJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX01JU0NfUEFSQU1FVEVSUywgMiwKKwkJCQkgIHMtPmhhbmRsZSwgMTIpOworCisJCS8qCisJCSAqIE51bWJlciBvZiBsaW5lcyBmb3IgRmllbGQgMSAmIEZpZWxkIDIgYWNjb3JkaW5nIHRvCisJCSAqIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvY3gyMzQxeC9mdy1lbmNvZGVyLWFwaS50eHQKKwkJICogRmllbGQgMSBpcyAzMTIgZm9yIDYyNSBsaW5lIHN5c3RlbXMgaW4gQlQuNjU2CisJCSAqIEZpZWxkIDIgaXMgMzEzIGZvciA2MjUgbGluZSBzeXN0ZW1zIGluIEJULjY1NgorCQkgKi8KIAkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9TRVRfQ0FQVFVSRV9MSU5FX05PLCAzLAotCQkJICAgICAgIHMtPmhhbmRsZSwgY3gtPmRpZ2l0aXplciwgY3gtPmRpZ2l0aXplcik7CisJCQkgIHMtPmhhbmRsZSwgMzEyLCAzMTMpOwogCi0JCS8qIFNldHVwIFZCSSAqLwogCQlpZiAoY3gtPnY0bDJfY2FwICYgVjRMMl9DQVBfVkJJX0NBUFRVUkUpCiAJCQljeDE4X3ZiaV9zZXR1cChzKTsKIAotCQkvKiBhc3NpZ24gcHJvZ3JhbSBpbmRleCBpbmZvLgotCQkgICBNYXNrIDc6IHNlbGVjdCBJL1AvQiwgTnVtX3JlcTogNDAwIG1heCAqLworCQkvKgorCQkgKiBhc3NpZ24gcHJvZ3JhbSBpbmRleCBpbmZvLgorCQkgKiBNYXNrIDc6IHNlbGVjdCBJL1AvQiwgTnVtX3JlcTogNDAwIG1heAorCQkgKiBGSVhNRSAtIGN1cnJlbnRseSB3ZSBoYXZlIHRoaXMgaGFyZGNvZGVkIGFzIGRpc2FibGVkCisJCSAqLwogCQljeDE4X3ZhcGlfcmVzdWx0KGN4LCBkYXRhLCBDWDE4X0NQVV9TRVRfSU5ERVhUQUJMRSwgMSwgMCk7CiAKLQkJLyogU2V0dXAgQVBJIGZvciBTdHJlYW0gKi8KKwkJLyogQ2FsbCBvdXQgdG8gdGhlIGNvbW1vbiBDWDIzNDF4IEFQSSBzZXR1cCBmb3IgdXNlciBjb250cm9scyAqLwogCQlwcml2LmN4ID0gY3g7CiAJCXByaXYucyA9IHM7CiAJCWN4MjM0MXhfdXBkYXRlKCZwcml2LCBjeDE4X2FwaV9mdW5jLCBOVUxMLCAmY3gtPnBhcmFtcyk7CisKKwkJLyoKKwkJICogV2hlbiBzdGFydGluZyBhIGNhcHR1cmUgYW5kIHdlJ3JlIHNldCBmb3IgcmFkaW8sCisJCSAqIGVuc3VyZSB0aGUgdmlkZW8gaXMgbXV0ZWQsIGRlc3BpdGUgdGhlIHVzZXIgY29udHJvbC4KKwkJICovCisJCWlmICghY3gtPnBhcmFtcy52aWRlb19tdXRlICYmCisJCSAgICB0ZXN0X2JpdChDWDE4X0ZfSV9SQURJT19VU0VSLCAmY3gtPmlfZmxhZ3MpKQorCQkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9TRVRfVklERU9fTVVURSwgMiwgcy0+aGFuZGxlLAorCQkJCSAgKGN4LT5wYXJhbXMudmlkZW9fbXV0ZV95dXYgPDwgOCkgfCAxKTsKIAl9CiAKIAlpZiAoYXRvbWljX3JlYWQoJmN4LT50b3RfY2FwdHVyaW5nKSA9PSAwKSB7CkBAIC01NTIsNyArNjMwLDcgQEAKIAl9CiAKIAkvKiB5b3UncmUgbGl2ZSEgc2l0IGJhY2sgYW5kIGF3YWl0IGludGVycnVwdHMgOikgKi8KLQlpZiAoIXRzKQorCWlmIChjYXB0eXBlICE9IENBUFRVUkVfQ0hBTk5FTF9UWVBFX1RTKQogCQlhdG9taWNfaW5jKCZjeC0+YW5hX2NhcHR1cmluZyk7CiAJYXRvbWljX2luYygmY3gtPnRvdF9jYXB0dXJpbmcpOwogCXJldHVybiAwOwpAQCAtNTY1LDcgKzY0Myw3IEBACiAJZm9yIChpID0gQ1gxOF9NQVhfU1RSRUFNUyAtIDE7IGkgPj0gMDsgaS0tKSB7CiAJCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1tpXTsKIAotCQlpZiAocy0+djRsMmRldiA9PSBOVUxMICYmIHMtPmR2Yi5lbmFibGVkID09IDApCisJCWlmIChzLT52aWRlb19kZXYgPT0gTlVMTCAmJiBzLT5kdmIuZW5hYmxlZCA9PSAwKQogCQkJY29udGludWU7CiAJCWlmICh0ZXN0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKSkKIAkJCWN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0ocywgMCk7CkBAIC01NzcsNyArNjU1LDcgQEAKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBzLT5jeDsKIAl1bnNpZ25lZCBsb25nIHRoZW47CiAKLQlpZiAocy0+djRsMmRldiA9PSBOVUxMICYmIHMtPmR2Yi5lbmFibGVkID09IDApCisJaWYgKHMtPnZpZGVvX2RldiA9PSBOVUxMICYmIHMtPmR2Yi5lbmFibGVkID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgeW91IGFyZSBhbGxvd2VkIHRvIHN0b3AgdGhlIGNhcHR1cmUKQEAgLTYyOSw3ICs3MDcsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBDWDE4X01BWF9TVFJFQU1TOyBpKyspIHsKIAkJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW2ldOwogCi0JCWlmIChzLT52NGwyZGV2ICYmIChzLT5oYW5kbGUgIT0gQ1gxOF9JTlZBTElEX1RBU0tfSEFORExFKSkKKwkJaWYgKHMtPnZpZGVvX2RldiAmJiAocy0+aGFuZGxlICE9IENYMThfSU5WQUxJRF9UQVNLX0hBTkRMRSkpCiAJCQlyZXR1cm4gcy0+aGFuZGxlOwogCX0KIAlyZXR1cm4gQ1gxOF9JTlZBTElEX1RBU0tfSEFORExFOwpAQCAtNjQ3LDcgKzcyNSw3IEBACiAJCXMgPSAmY3gtPnN0cmVhbXNbaV07CiAJCWlmIChzLT5oYW5kbGUgIT0gaGFuZGxlKQogCQkJY29udGludWU7Ci0JCWlmIChzLT52NGwyZGV2IHx8IHMtPmR2Yi5lbmFibGVkKQorCQlpZiAocy0+dmlkZW9fZGV2IHx8IHMtPmR2Yi5lbmFibGVkKQogCQkJcmV0dXJuIHM7CiAJfQogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12YmkuYwppbmRleCBmYjU5NWJkLi5jMmFlZjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12YmkuYwpAQCAtMjUsNyArMjUsMTYgQEAKICNpbmNsdWRlICJjeDE4LXZiaS5oIgogI2luY2x1ZGUgImN4MTgtaW9jdGwuaCIKICNpbmNsdWRlICJjeDE4LXF1ZXVlLmgiCi0jaW5jbHVkZSAiY3gxOC1hdi1jb3JlLmgiCisKKy8qCisgKiBSYXN0ZXIgUmVmZXJlbmNlL1Byb3RlY3Rpb24gKFJQKSBieXRlcywgdXNlZCBpbiBTdGFydC9FbmQgQWN0aXZlCisgKiBWaWRlbyBjb2RlcyBlbWl0dGVkIGZyb20gdGhlIGRpZ2l0emVyIGluIFZJUCAxLnggbW9kZSwgdGhhdCBmbGFnIHRoZSBzdGFydAorICogb2YgVkJJIHNhbXBsZSBvciBWQkkgYW5jaWxsaWFyeSBkYXRhIHJlZ2lvbnMgaW4gdGhlIGRpZ2l0aWFsIHJhdHNlciBsaW5lLgorICoKKyAqIFRhc2sgRmllbGRFdmVuIFZlcnRpY2FsQmxhbmsgSG9yaXpvbnRhbEJsYW5rIDAgMCAwIDAKKyAqLworc3RhdGljIGNvbnN0IHU4IHJhd192Ymlfc2F2X3JwWzJdID0geyAweDIwLCAweDYwIH07ICAgIC8qIF9fVl8sIF9GVl8gKi8KK3N0YXRpYyBjb25zdCB1OCBzbGljZWRfdmJpX2Vhdl9ycFsyXSA9IHsgMHhiMCwgMHhmMCB9OyAvKiBUX1ZILCBURlZIICovCiAKIHN0YXRpYyB2b2lkIGNvcHlfdmJpX2RhdGEoc3RydWN0IGN4MTggKmN4LCBpbnQgbGluZXMsIHUzMiBwdHNfc3RhbXApCiB7CkBAIC0zNCwxMCArNDMsMTcgQEAKIAl1MzIgbGluZW1hc2tbMl0gPSB7IDAsIDAgfTsKIAl1bnNpZ25lZCBzaG9ydCBzaXplOwogCXN0YXRpYyBjb25zdCB1OCBtcGVnX2hkcl9kYXRhW10gPSB7Ci0JCTB4MDAsIDB4MDAsIDB4MDEsIDB4YmEsIDB4NDQsIDB4MDAsIDB4MGMsIDB4NjYsCi0JCTB4MjQsIDB4MDEsIDB4MDEsIDB4ZDEsIDB4ZDMsIDB4ZmEsIDB4ZmYsIDB4ZmYsCi0JCTB4MDAsIDB4MDAsIDB4MDEsIDB4YmQsIDB4MDAsIDB4MWEsIDB4ODQsIDB4ODAsCi0JCTB4MDcsIDB4MjEsIDB4MDAsIDB4NWQsIDB4NjMsIDB4YTcsIDB4ZmYsIDB4ZmYKKwkJLyogTVBFRy0yIFByb2dyYW0gUGFjayAqLworCQkweDAwLCAweDAwLCAweDAxLCAweGJhLAkJICAgIC8qIFByb2cgUGFjayBzdGFydCBjb2RlICovCisJCTB4NDQsIDB4MDAsIDB4MGMsIDB4NjYsIDB4MjQsIDB4MDEsIC8qIFNDUiwgU0NSIEV4dCwgbWFya2VycyAqLworCQkweDAxLCAweGQxLCAweGQzLAkJICAgIC8qIE11eCBSYXRlLCBtYXJrZXJzICovCisJCTB4ZmEsIDB4ZmYsIDB4ZmYsCQkgICAgLyogUmVzLCBTdWZmIGNudCwgU3R1ZmYgKi8KKwkJLyogTVBFRy0yIFByaXZhdGUgU3RyZWFtIDEgUEVTIFBhY2tldCAqLworCQkweDAwLCAweDAwLCAweDAxLCAweGJkLAkJICAgIC8qIFByaXYgU3RyZWFtIDEgc3RhcnQgKi8KKwkJMHgwMCwgMHgxYSwJCQkgICAgLyogbGVuZ3RoICovCisJCTB4ODQsIDB4ODAsIDB4MDcsCQkgICAgLyogZmxhZ3MsIGhkciBkYXRhIGxlbiAqLworCQkweDIxLCAweDAwLCAweDVkLCAweDYzLCAweGE3LCAJICAgIC8qIFBUUywgbWFya2VycyAqLworCQkweGZmLCAweGZmCQkJICAgIC8qIHN0dWZmaW5nICovCiAJfTsKIAljb25zdCBpbnQgc2QgPSBzaXplb2YobXBlZ19oZHJfZGF0YSk7CS8qIHN0YXJ0IG9mIHZiaSBkYXRhICovCiAJaW50IGlkeCA9IGN4LT52YmkuZnJhbWUgJSBDWDE4X1ZCSV9GUkFNRVM7CkBAIC03MSw3ICs4Nyw5IEBACiAJCW1lbWNweShkc3QgKyBzZCArIDQsIGRzdCArIHNkICsgMTIsIGxpbmUgKiA0Myk7CiAJCXNpemUgPSA0ICsgKCg0MyAqIGxpbmUgKyAzKSAmIH4zKTsKIAl9IGVsc2UgewotCQltZW1jcHkoZHN0ICsgc2QsICJjeDAiLCA0KTsKKwkJbWVtY3B5KGRzdCArIHNkLCAiaXR2MCIsIDQpOworCQljcHVfdG9fbGUzMnMoJmxpbmVtYXNrWzBdKTsKKwkJY3B1X3RvX2xlMzJzKCZsaW5lbWFza1sxXSk7CiAJCW1lbWNweShkc3QgKyBzZCArIDQsICZsaW5lbWFza1swXSwgOCk7CiAJCXNpemUgPSAxMiArICgoNDMgKiBsaW5lICsgMykgJiB+Myk7CiAJfQpAQCAtODYsNTggKzEwNCw3NiBAQAogfQogCiAvKiBDb21wcmVzcyByYXcgVkJJIGZvcm1hdCwgcmVtb3ZlcyBsZWFkaW5nIFNBViBjb2RlcyBhbmQgc3VycGx1cyBzcGFjZQotICAgYWZ0ZXIgdGhlIGZpZWxkLgotICAgUmV0dXJucyBuZXcgY29tcHJlc3NlZCBzaXplLiAqLwotc3RhdGljIHUzMiBjb21wcmVzc19yYXdfYnVmKHN0cnVjdCBjeDE4ICpjeCwgdTggKmJ1ZiwgdTMyIHNpemUpCisgICBhZnRlciB0aGUgZnJhbWUuICBSZXR1cm5zIG5ldyBjb21wcmVzc2VkIHNpemUuICovCitzdGF0aWMgdTMyIGNvbXByZXNzX3Jhd19idWYoc3RydWN0IGN4MTggKmN4LCB1OCAqYnVmLCB1MzIgc2l6ZSwgdTMyIGhkcl9zaXplKQogewotCXUzMiBsaW5lX3NpemUgPSBjeC0+dmJpLnJhd19kZWNvZGVyX2xpbmVfc2l6ZTsKLQl1MzIgbGluZXMgPSBjeC0+dmJpLmNvdW50OwotCXU4IHNhdjEgPSBjeC0+dmJpLnJhd19kZWNvZGVyX3Nhdl9vZGRfZmllbGQ7Ci0JdTggc2F2MiA9IGN4LT52YmkucmF3X2RlY29kZXJfc2F2X2V2ZW5fZmllbGQ7CisJdTMyIGxpbmVfc2l6ZSA9IHZiaV9hY3RpdmVfc2FtcGxlczsKKwl1MzIgbGluZXMgPSBjeC0+dmJpLmNvdW50ICogMjsKIAl1OCAqcSA9IGJ1ZjsKIAl1OCAqcDsKIAlpbnQgaTsKIAorCS8qIFNraXAgdGhlIGhlYWRlciAqLworCWJ1ZiArPSBoZHJfc2l6ZTsKKwogCWZvciAoaSA9IDA7IGkgPCBsaW5lczsgaSsrKSB7CiAJCXAgPSBidWYgKyBpICogbGluZV9zaXplOwogCiAJCS8qIExvb2sgZm9yIFNBViBjb2RlICovCiAJCWlmIChwWzBdICE9IDB4ZmYgfHwgcFsxXSB8fCBwWzJdIHx8Ci0JCSAgICAocFszXSAhPSBzYXYxICYmIHBbM10gIT0gc2F2MikpCisJCSAgICAocFszXSAhPSByYXdfdmJpX3Nhdl9ycFswXSAmJgorCQkgICAgIHBbM10gIT0gcmF3X3ZiaV9zYXZfcnBbMV0pKQogCQkJYnJlYWs7Ci0JCW1lbWNweShxLCBwICsgNCwgbGluZV9zaXplIC0gNCk7Ci0JCXEgKz0gbGluZV9zaXplIC0gNDsKKwkJaWYgKGkgPT0gbGluZXMgLSAxKSB7CisJCQkvKiBsYXN0IGxpbmUgaXMgaGRyX3NpemUgYnl0ZXMgc2hvcnQgLSBleHRyYXBvbGF0ZSBpdCAqLworCQkJbWVtY3B5KHEsIHAgKyA0LCBsaW5lX3NpemUgLSA0IC0gaGRyX3NpemUpOworCQkJcSArPSBsaW5lX3NpemUgLSA0IC0gaGRyX3NpemU7CisJCQlwICs9IGxpbmVfc2l6ZSAtIGhkcl9zaXplIC0gMTsKKwkJCW1lbXNldChxLCAoaW50KSAqcCwgaGRyX3NpemUpOworCQl9IGVsc2UgeworCQkJbWVtY3B5KHEsIHAgKyA0LCBsaW5lX3NpemUgLSA0KTsKKwkJCXEgKz0gbGluZV9zaXplIC0gNDsKKwkJfQogCX0KIAlyZXR1cm4gbGluZXMgKiAobGluZV9zaXplIC0gNCk7CiB9CiAKLQotLyogQ29tcHJlc3NlZCBWQkkgZm9ybWF0LCBhbGwgZm91bmQgc2xpY2VkIGJsb2NrcyBwdXQgbmV4dCB0byBvbmUgYW5vdGhlcgotICAgUmV0dXJucyBuZXcgY29tcHJlc3NlZCBzaXplICovCi1zdGF0aWMgdTMyIGNvbXByZXNzX3NsaWNlZF9idWYoc3RydWN0IGN4MTggKmN4LCB1MzIgbGluZSwgdTggKmJ1ZiwKLQkJCSAgICAgICB1MzIgc2l6ZSwgdTggc2F2KQorc3RhdGljIHUzMiBjb21wcmVzc19zbGljZWRfYnVmKHN0cnVjdCBjeDE4ICpjeCwgdTggKmJ1ZiwgdTMyIHNpemUsCisJCQkgICAgICAgY29uc3QgdTMyIGhkcl9zaXplKQogewotCXUzMiBsaW5lX3NpemUgPSBjeC0+dmJpLnNsaWNlZF9kZWNvZGVyX2xpbmVfc2l6ZTsKIAlzdHJ1Y3QgdjRsMl9kZWNvZGVfdmJpX2xpbmUgdmJpOwogCWludCBpOworCXUzMiBsaW5lID0gMDsKKwl1MzIgbGluZV9zaXplID0gY3gtPmlzXzYwaHogPyB2YmlfaGJsYW5rX3NhbXBsZXNfNjBIegorCQkJCSAgICA6IHZiaV9oYmxhbmtfc2FtcGxlc181MEh6OwogCiAJLyogZmluZCB0aGUgZmlyc3QgdmFsaWQgbGluZSAqLwotCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyssIGJ1ZisrKSB7Ci0JCWlmIChidWZbMF0gPT0gMHhmZiAmJiAhYnVmWzFdICYmICFidWZbMl0gJiYgYnVmWzNdID09IHNhdikKKwlmb3IgKGkgPSBoZHJfc2l6ZSwgYnVmICs9IGhkcl9zaXplOyBpIDwgc2l6ZTsgaSsrLCBidWYrKykgeworCQlpZiAoYnVmWzBdID09IDB4ZmYgJiYgIWJ1ZlsxXSAmJiAhYnVmWzJdICYmCisJCSAgICAoYnVmWzNdID09IHNsaWNlZF92YmlfZWF2X3JwWzBdIHx8CisJCSAgICAgYnVmWzNdID09IHNsaWNlZF92YmlfZWF2X3JwWzFdKSkKIAkJCWJyZWFrOwogCX0KIAotCXNpemUgLT0gaTsKKwkvKgorCSAqIFRoZSBsYXN0IGxpbmUgaXMgc2hvcnQgYnkgaGRyX3NpemUgYnl0ZXMsIGJ1dCBmb3IgdGhlIHJlbWFpbmluZworCSAqIGNoZWNrcyBhZ2FpbnN0IHNpemUsIHdlIHByZXRlbmQgdGhhdCBpdCBpcyBub3QsIGJ5IGNvdW50aW5nIHRoZQorCSAqIGhlYWRlciBieXRlcyB3ZSBrbm93aW5nbHkgc2tpcHBlZAorCSAqLworCXNpemUgLT0gKGkgLSBoZHJfc2l6ZSk7CiAJaWYgKHNpemUgPCBsaW5lX3NpemUpCiAJCXJldHVybiBsaW5lOworCiAJZm9yIChpID0gMDsgaSA8IHNpemUgLyBsaW5lX3NpemU7IGkrKykgewogCQl1OCAqcCA9IGJ1ZiArIGkgKiBsaW5lX3NpemU7CiAKLQkJLyogTG9vayBmb3IgU0FWIGNvZGUgICovCi0JCWlmIChwWzBdICE9IDB4ZmYgfHwgcFsxXSB8fCBwWzJdIHx8IHBbM10gIT0gc2F2KQorCQkvKiBMb29rIGZvciBFQVYgY29kZSAgKi8KKwkJaWYgKHBbMF0gIT0gMHhmZiB8fCBwWzFdIHx8IHBbMl0gfHwKKwkJICAgIChwWzNdICE9IHNsaWNlZF92YmlfZWF2X3JwWzBdICYmCisJCSAgICAgcFszXSAhPSBzbGljZWRfdmJpX2Vhdl9ycFsxXSkpCiAJCQljb250aW51ZTsKIAkJdmJpLnAgPSBwICsgNDsKLQkJY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19JTlRfREVDT0RFX1ZCSV9MSU5FLCAmdmJpKTsKKwkJdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIHZpZGVvLCBkZWNvZGVfdmJpX2xpbmUsICZ2YmkpOwogCQlpZiAodmJpLnR5cGUpIHsKIAkJCWN4LT52Ymkuc2xpY2VkX2RhdGFbbGluZV0uaWQgPSB2YmkudHlwZTsKIAkJCWN4LT52Ymkuc2xpY2VkX2RhdGFbbGluZV0uZmllbGQgPSB2YmkuaXNfc2Vjb25kX2ZpZWxkOwpAQCAtMTUwLDUxICsxODYsNTYgQEAKIH0KIAogdm9pZCBjeDE4X3Byb2Nlc3NfdmJpX2RhdGEoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZiwKLQkJCSAgIHU2NCBwdHNfc3RhbXAsIGludCBzdHJlYW10eXBlKQorCQkJICAgaW50IHN0cmVhbXR5cGUpCiB7CisJLyoKKwkgKiBUaGUgQ1gyMzQxOCBwcm92aWRlcyBhIDEyIGJ5dGUgaGVhZGVyIGluIGl0cyByYXcgVkJJIGJ1ZmZlcnMgdG8gdXM6CisJICogMHgzZmZmZmZmZiBbNCBieXRlcyBvZiBzb21ldGhpbmddIFs0IGJ5dGUgcHJlc2VudGF0aW9uIHRpbWUgc3RhbXBdCisJICovCisJc3RydWN0IHZiaV9kYXRhX2hkciB7CisJCV9fYmUzMiBtYWdpYzsKKwkJX19iZTMyIHVua25vd247CisJCV9fYmUzMiBwdHM7CisJfSAqaGRyID0gKHN0cnVjdCB2YmlfZGF0YV9oZHIgKikgYnVmLT5idWY7CisKIAl1OCAqcCA9ICh1OCAqKSBidWYtPmJ1ZjsKIAl1MzIgc2l6ZSA9IGJ1Zi0+Ynl0ZXN1c2VkOworCXUzMiBwdHM7CiAJaW50IGxpbmVzOwogCiAJaWYgKHN0cmVhbXR5cGUgIT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJKQogCQlyZXR1cm47CiAKKwkvKgorCSAqIFRoZSBDWDIzNDE4IHNlbmRzIHVzIGRhdGEgdGhhdCBpcyAzMiBiaXQgbGl0dGxlLWVuZGlhbiBzd2FwcGVkLAorCSAqIGJ1dCB3ZSB3YW50IHRoZSByYXcgVkJJIGJ5dGVzIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgaW4gdGhlIHJhc3RlcgorCSAqIGxpbmUuICBUaGlzIGhhcyBhIHNpZGUgZWZmZWN0IG9mIG1ha2luZyB0aGUgaGVhZGVyIGJpZyBlbmRpYW4KKwkgKi8KKwljeDE4X2J1Zl9zd2FwKGJ1Zik7CisKIAkvKiBSYXcgVkJJIGRhdGEgKi8KIAlpZiAoY3gxOF9yYXdfdmJpKGN4KSkgewotCQl1OCB0eXBlOwogCi0JCWN4MThfYnVmX3N3YXAoYnVmKTsKKwkJc2l6ZSA9IGJ1Zi0+Ynl0ZXN1c2VkID0KKwkJICAgICBjb21wcmVzc19yYXdfYnVmKGN4LCBwLCBzaXplLCBzaXplb2Yoc3RydWN0IHZiaV9kYXRhX2hkcikpOwogCi0JCS8qIFNraXAgMTIgYnl0ZXMgb2YgaGVhZGVyIHRoYXQgZ2V0cyBzdHVmZmVkIGluICovCi0JCXNpemUgLT0gMTI7Ci0JCW1lbWNweShwLCAmYnVmLT5idWZbMTJdLCBzaXplKTsKLQkJdHlwZSA9IHBbM107Ci0KLQkJc2l6ZSA9IGJ1Zi0+Ynl0ZXN1c2VkID0gY29tcHJlc3NfcmF3X2J1ZihjeCwgcCwgc2l6ZSk7Ci0KLQkJLyogc2Vjb25kIGZpZWxkIG9mIHRoZSBmcmFtZT8gKi8KLQkJaWYgKHR5cGUgPT0gY3gtPnZiaS5yYXdfZGVjb2Rlcl9zYXZfZXZlbl9maWVsZCkgewotCQkJLyogRGlydHkgaGFjayBuZWVkZWQgZm9yIGJhY2t3YXJkcwotCQkJICAgY29tcGF0aWJpbGl0eSBvZiBvbGQgVkJJIHNvZnR3YXJlLiAqLwotCQkJcCArPSBzaXplIC0gNDsKLQkJCW1lbWNweShwLCAmY3gtPnZiaS5mcmFtZSwgNCk7Ci0JCQljeC0+dmJpLmZyYW1lKys7Ci0JCX0KKwkJLyoKKwkJICogSGFjayBuZWVkZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgVkJJIHNvZnR3YXJlLgorCQkgKiBXcml0ZSB0aGUgZnJhbWUgIyBhdCB0aGUgbGFzdCA0IGJ5dGVzIG9mIHRoZSBmcmFtZQorCQkgKi8KKwkJcCArPSBzaXplIC0gNDsKKwkJbWVtY3B5KHAsICZjeC0+dmJpLmZyYW1lLCA0KTsKKwkJY3gtPnZiaS5mcmFtZSsrOwogCQlyZXR1cm47CiAJfQogCiAJLyogU2xpY2VkIFZCSSBkYXRhIHdpdGggZGF0YSBpbnNlcnRpb24gKi8KLQljeDE4X2J1Zl9zd2FwKGJ1Zik7CiAKLQkvKiBmaXJzdCBmaWVsZCAqLwotCWxpbmVzID0gY29tcHJlc3Nfc2xpY2VkX2J1ZihjeCwgMCwgcCwgc2l6ZSAvIDIsCi0JCQljeC0+dmJpLnNsaWNlZF9kZWNvZGVyX3Nhdl9vZGRfZmllbGQpOwotCS8qIHNlY29uZCBmaWVsZCAqLwotCS8qIGV4cGVyaW1lbnRhdGlvbiBzaG93cyB0aGF0IHRoZSBzZWNvbmQgaGFsZiBkb2VzIG5vdCBhbHdheXMKLQkgICBiZWdpbiBhdCB0aGUgZXhhY3QgYWRkcmVzcy4gU28gc3RhcnQgYSBiaXQgZWFybGllcgotCSAgIChoZW5jZSAzMikuICovCi0JbGluZXMgPSBjb21wcmVzc19zbGljZWRfYnVmKGN4LCBsaW5lcywgcCArIHNpemUgLyAyIC0gMzIsCi0JCQlzaXplIC8gMiArIDMyLCBjeC0+dmJpLnNsaWNlZF9kZWNvZGVyX3Nhdl9ldmVuX2ZpZWxkKTsKKwlwdHMgPSAoYmUzMl90b19jcHUoaGRyLT5tYWdpYykgPT0gMHgzZmZmZmZmZikgPyBiZTMyX3RvX2NwdShoZHItPnB0cykKKwkJCQkJCSAgICAgIDogMDsKKworCWxpbmVzID0gY29tcHJlc3Nfc2xpY2VkX2J1ZihjeCwgcCwgc2l6ZSwgc2l6ZW9mKHN0cnVjdCB2YmlfZGF0YV9oZHIpKTsKKwogCS8qIGFsd2F5cyByZXR1cm4gYXQgbGVhc3Qgb25lIGVtcHR5IGxpbmUgKi8KIAlpZiAobGluZXMgPT0gMCkgewogCQljeC0+dmJpLnNsaWNlZF9kYXRhWzBdLmlkID0gMDsKQEAgLTIwNiw2ICsyNDcsNiBAQAogCW1lbWNweShwLCAmY3gtPnZiaS5zbGljZWRfZGF0YVswXSwgc2l6ZSk7CiAKIAlpZiAoY3gtPnZiaS5pbnNlcnRfbXBlZykKLQkJY29weV92YmlfZGF0YShjeCwgbGluZXMsIHB0c19zdGFtcCk7CisJCWNvcHlfdmJpX2RhdGEoY3gsIGxpbmVzLCBwdHMpOwogCWN4LT52YmkuZnJhbWUrKzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZiaS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmgKaW5kZXggYzU2ZmY3ZC4uZTdlMWFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmgKQEAgLTIyLDUgKzIyLDUgQEAKICAqLwogCiB2b2lkIGN4MThfcHJvY2Vzc192YmlfZGF0YShzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCBjeDE4X2J1ZmZlciAqYnVmLAotCQkJICAgdTY0IHB0c19zdGFtcCwgaW50IHN0cmVhbXR5cGUpOworCQkJICAgaW50IHN0cmVhbXR5cGUpOwogaW50IGN4MThfdXNlZF9saW5lKHN0cnVjdCBjeDE4ICpjeCwgaW50IGxpbmUsIGludCBmaWVsZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmgKaW5kZXggODRjMGZmMS4uYmQ5YmQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZlcnNpb24uaApAQCAtMjQsOCArMjQsOCBAQAogCiAjZGVmaW5lIENYMThfRFJJVkVSX05BTUUgImN4MTgiCiAjZGVmaW5lIENYMThfRFJJVkVSX1ZFUlNJT05fTUFKT1IgMQotI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OX01JTk9SIDAKLSNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMIDQKKyNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTl9NSU5PUiAxCisjZGVmaW5lIENYMThfRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCAwCiAKICNkZWZpbmUgQ1gxOF9WRVJTSU9OIF9fc3RyaW5naWZ5KENYMThfRFJJVkVSX1ZFUlNJT05fTUFKT1IpICIuIiBfX3N0cmluZ2lmeShDWDE4X0RSSVZFUl9WRVJTSU9OX01JTk9SKSAiLiIgX19zdHJpbmdpZnkoQ1gxOF9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMKQogI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKENYMThfRFJJVkVSX1ZFUlNJT05fTUFKT1IsIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12aWRlby5jCmluZGV4IDJlNWM0MTkuLjZmZGFkZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmlkZW8uYwpAQCAtMjEsNyArMjEsNiBAQAogCiAjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKICNpbmNsdWRlICJjeDE4LXZpZGVvLmgiCi0jaW5jbHVkZSAiY3gxOC1hdi1jb3JlLmgiCiAjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgogCiB2b2lkIGN4MThfdmlkZW9fc2V0X2lvKHN0cnVjdCBjeDE4ICpjeCkKQEAgLTMyLDcgKzMxLDcgQEAKIAogCXJvdXRlLmlucHV0ID0gY3gtPmNhcmQtPnZpZGVvX2lucHV0c1tpbnBdLnZpZGVvX2lucHV0OwogCXJvdXRlLm91dHB1dCA9IDA7Ci0JY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HLCAmcm91dGUpOworCXY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCiAJdHlwZSA9IGN4LT5jYXJkLT52aWRlb19pbnB1dHNbaW5wXS52aWRlb190eXBlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MjM0MTguaAppbmRleCA2MDFmM2EyLi45OTU2YWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDIzNDE4LmgKQEAgLTU2LDYgKzU2LDIyIEBACiAjZGVmaW5lIEFQVV9DTURfTUFTSyAJCQkJMHgxMDAwMDAwMAogI2RlZmluZSBBUFVfQ01EX01BU0tfQUNLIAkJCShBUFVfQ01EX01BU0sgfCAweDgwMDAwMDAwKQogCisjZGVmaW5lIENYMThfQVBVX0VOQ09ESU5HX01FVEhPRF9NUEVHCQkoMCA8PCAyOCkKKyNkZWZpbmUgQ1gxOF9BUFVfRU5DT0RJTkdfTUVUSE9EX0FDMwkJKDEgPDwgMjgpCisKKy8qIERlc2NyaXB0aW9uOiBDb21tYW5kIEFQVSB0byBzdGFydCBhdWRpbworICAgSU5bMF0gLSBhdWRpbyBwYXJhbWV0ZXJzIChzYW1lIGFzIENYMThfQ1BVX1NFVF9BVURJT19QQVJBTUVURVJTPykKKyAgIElOWzFdIC0gY2FsbGVyIGJ1ZmZlciBhZGRyZXNzLCBvciAwCisgICBSZXR1cm5Db2RlIC0gPz8/ICovCisjZGVmaW5lIENYMThfQVBVX1NUQVJUCQkJCShBUFVfQ01EX01BU0sgfCAweDAxKQorCisvKiBEZXNjcmlwdGlvbjogQ29tbWFuZCBBUFUgdG8gc3RvcCBhdWRpbworICAgSU5bMF0gLSBlbmNvZGluZyBtZXRob2QgdG8gc3RvcAorICAgUmV0dXJuQ29kZSAtID8/PyAqLworI2RlZmluZSBDWDE4X0FQVV9TVE9QCQkJCShBUFVfQ01EX01BU0sgfCAweDAyKQorCisvKiBEZXNjcmlwdGlvbjogQ29tbWFuZCBBUFUgdG8gcmVzZXQgdGhlIEFJCisgICBSZXR1cm5Db2RlIC0gPz8/ICovCiAjZGVmaW5lIENYMThfQVBVX1JFU0VUQUkgCQkJKEFQVV9DTURfTUFTSyB8IDB4MDUpCiAKIC8qIERlc2NyaXB0aW9uOiBUaGlzIGNvbW1hbmQgaW5kaWNhdGVzIHRoYXQgYSBNZW1vcnkgRGVzY3JpcHRvciBMaXN0IGhhcyBiZWVuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM0MXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzQxeC5jCmluZGV4IGNiYmU0N2YuLjhkZWQ1MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzQxeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzQxeC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGN4MjM0MXggLSBnZW5lcmljIGNvZGUgZm9yIGN4MjM0MTUvNiBiYXNlZCBkZXZpY2VzCisgKiBjeDIzNDF4IC0gZ2VuZXJpYyBjb2RlIGZvciBjeDIzNDE1LzYvOCBiYXNlZCBkZXZpY2VzCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgogICoKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxtZWRpYS9jeDIzNDF4Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJjeDIzNDE1LzYgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oImN4MjM0MTUvNi84IGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiSGFucyBWZXJrdWlsIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKQEAgLTM4LDYgKzM4LDcgQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCisvKiBNdXN0IGJlIHNvcnRlZCBmcm9tIGxvdyB0byBoaWdoIGNvbnRyb2wgSUQhICovCiBjb25zdCB1MzIgY3gyMzQxeF9tcGVnX2N0cmxzW10gPSB7CiAJVjRMMl9DSURfTVBFR19DTEFTUywKIAlWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFLApAQCAtNTAsNiArNTEsNyBAQAogCVY0TDJfQ0lEX01QRUdfQVVESU9fRU1QSEFTSVMsCiAJVjRMMl9DSURfTVBFR19BVURJT19DUkMsCiAJVjRMMl9DSURfTVBFR19BVURJT19NVVRFLAorCVY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEUsCiAJVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORywKIAlWNEwyX0NJRF9NUEVHX1ZJREVPX0FTUEVDVCwKIAlWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTLApAQCAtOTQsNiArOTYsNyBAQAogCS5hdWRpb19zYW1wbGluZ19mcmVxID0gVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDAsCiAJLmF1ZGlvX2VuY29kaW5nID0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIsCiAJLmF1ZGlvX2wyX2JpdHJhdGUgPSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yMjRLLAorCS5hdWRpb19hYzNfYml0cmF0ZSA9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yMjRLLAogCS5hdWRpb19tb2RlID0gVjRMMl9NUEVHX0FVRElPX01PREVfU1RFUkVPLAogCS5hdWRpb19tb2RlX2V4dGVuc2lvbiA9IFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF80LAogCS5hdWRpb19lbXBoYXNpcyA9IFY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FLApAQCAtMTQ4LDYgKzE1MSw5IEBACiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wyX0JJVFJBVEU6CiAJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT5hdWRpb19sMl9iaXRyYXRlOwogCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6CisJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT5hdWRpb19hYzNfYml0cmF0ZTsKKwkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREU6CiAJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT5hdWRpb19tb2RlOwogCQlicmVhazsKQEAgLTI1Niw2ICsyNjIsMTIgQEAKIAkJcGFyYW1zLT5hdWRpb19zYW1wbGluZ19mcmVxID0gY3RybC0+dmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKKwkJaWYgKGJ1c3kpCisJCQlyZXR1cm4gLUVCVVNZOworCQlpZiAocGFyYW1zLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfQUMzKQorCQkJaWYgKGN0cmwtPnZhbHVlICE9IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yICYmCisJCQkgICAgY3RybC0+dmFsdWUgIT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMykKKwkJCQlyZXR1cm4gLUVSQU5HRTsKIAkJcGFyYW1zLT5hdWRpb19lbmNvZGluZyA9IGN0cmwtPnZhbHVlOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURToKQEAgLTI2Myw2ICsyNzUsMTMgQEAKIAkJCXJldHVybiAtRUJVU1k7CiAJCXBhcmFtcy0+YXVkaW9fbDJfYml0cmF0ZSA9IGN0cmwtPnZhbHVlOwogCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6CisJCWlmIChidXN5KQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJaWYgKCEocGFyYW1zLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfQUMzKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlwYXJhbXMtPmF1ZGlvX2FjM19iaXRyYXRlID0gY3RybC0+dmFsdWU7CisJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NT0RFOgogCQlwYXJhbXMtPmF1ZGlvX21vZGUgPSBjdHJsLT52YWx1ZTsKIAkJYnJlYWs7CkBAIC00ODEsMjkgKzUwMCwxMDYgQEAKIAlpbnQgZXJyOwogCiAJc3dpdGNoIChxY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQlWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfUFMsCisJCQkJVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1NWQ0QsIDEsCisJCQkJVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1BTKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVkJJX0ZNVDoKKwkJaWYgKHBhcmFtcy0+Y2FwYWJpbGl0aWVzICYgQ1gyMzQxWF9DQVBfSEFTX1NMSUNFRF9WQkkpCisJCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCisJCQkJCVY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9OT05FLAorCQkJCQlWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUViwgMSwKKwkJCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUpOworCQlyZXR1cm4gY3gyMzQxeF9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCisJCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUsCisJCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUsIDEsCisJCQkJZGVmYXVsdF9wYXJhbXMuc3RyZWFtX3ZiaV9mbXQpOworCisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80NDEwMCwKKwkJCQlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV8zMjAwMCwgMSwKKwkJCQlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMCk7CisKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6CisJCWlmIChwYXJhbXMtPmNhcGFiaWxpdGllcyAmIENYMjM0MVhfQ0FQX0hBU19BQzMpIHsKKwkJCS8qCisJCQkgKiBUaGUgc3RhdGUgb2YgTDIgJiBBQzMgYml0cmF0ZSBjb250cm9scyBjYW4gY2hhbmdlCisJCQkgKiB3aGVuIHRoaXMgY29udHJvbCBjaGFuZ2VzLCBidXQgdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwoKQorCQkJICogYWxyZWFkeSBzZXRzIFY0TDJfQ1RSTF9GTEFHX1VQREFURSBmb3IKKwkJCSAqIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkcsIHNvIHdlIGRvbid0IGhlcmUuCisJCQkgKi8KKwkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIsCisJCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMsIDEsCisJCQkJCWRlZmF1bHRfcGFyYW1zLmF1ZGlvX2VuY29kaW5nKTsKKwkJfQorCiAJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKIAkJCQlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMiwKIAkJCQlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMiwgMSwKIAkJCQlkZWZhdWx0X3BhcmFtcy5hdWRpb19lbmNvZGluZyk7CiAKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKIAkJCQlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xOTJLLAogCQkJCVY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzM4NEssIDEsCiAJCQkJZGVmYXVsdF9wYXJhbXMuYXVkaW9fbDJfYml0cmF0ZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlpZiAocGFyYW1zLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfQUMzICYmCisJCSAgICBwYXJhbXMtPmF1ZGlvX2VuY29kaW5nICE9IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yKQorCQkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFOworCQlyZXR1cm4gMDsKIAotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMV9CSVRSQVRFOgotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MM19CSVRSQVRFOgotCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX1NURVJFTywKKwkJCQlWNEwyX01QRUdfQVVESU9fTU9ERV9NT05PLCAxLAorCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX1NURVJFTyk7CiAKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT046Ci0JCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxY3RybCk7CisJCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF80LAorCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF8xNiwgMSwKKwkJCQlWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfNCk7CiAJCWlmIChlcnIgPT0gMCAmJgogCQkgICAgcGFyYW1zLT5hdWRpb19tb2RlICE9IFY0TDJfTVBFR19BVURJT19NT0RFX0pPSU5UX1NURVJFTykKIAkJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19JTkFDVElWRTsKIAkJcmV0dXJuIGVycjsKIAorCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTVBIQVNJUzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FLAorCQkJCVY0TDJfTVBFR19BVURJT19FTVBIQVNJU19DQ0lUVF9KMTcsIDEsCisJCQkJVjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTX05PTkUpOworCisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0NSQzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19BVURJT19DUkNfTk9ORSwKKwkJCQlWNEwyX01QRUdfQVVESU9fQ1JDX0NSQzE2LCAxLAorCQkJCVY0TDJfTVBFR19BVURJT19DUkNfTk9ORSk7CisKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAxLCAxLCAwKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURToKKwkJZXJyID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCisJCQkJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzQ4SywKKwkJCQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDQ4SywgMSwKKwkJCQlkZWZhdWx0X3BhcmFtcy5hdWRpb19hYzNfYml0cmF0ZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlpZiAocGFyYW1zLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfQUMzKSB7CisJCQlpZiAocGFyYW1zLT5hdWRpb19lbmNvZGluZyAhPQorCQkJCQkJICAgVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMykKKwkJCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkU7CisJCX0gZWxzZQorCQkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEOworCQlyZXR1cm4gMDsKKwogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzoKIAkJLyogdGhpcyBzZXR0aW5nIGlzIHJlYWQtb25seSBmb3IgdGhlIGN4MjM0MXggc2luY2UgdGhlCiAJCSAgIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEUgcmVhbGx5IGRldGVybWluZXMgdGhlCkBAIC01MTYsMzIgKzYxMiw1MSBAQAogCQkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWTsKIAkJcmV0dXJuIGVycjsKIAorCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1Q6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQlWNEwyX01QRUdfVklERU9fQVNQRUNUXzF4MSwKKwkJCQlWNEwyX01QRUdfVklERU9fQVNQRUNUXzIyMXgxMDAsIDEsCisJCQkJVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF80eDMpOworCisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDMzLCAxLCAyKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAxLCAzNCwgMSwKKwkJCQlwYXJhbXMtPmlzXzUwaHogPyAxMiA6IDE1KTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfQ0xPU1VSRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAxLCAxLCAxKTsKKwogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6Ci0JCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxY3RybCk7CisJCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSLAorCQkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSLCAxLAorCQkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSKTsKIAkJaWYgKGVyciA9PSAwICYmCiAJCSAgICBwYXJhbXMtPnZpZGVvX2VuY29kaW5nID09IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzEpCiAJCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkU7CiAJCXJldHVybiBlcnI7CiAKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAyNzAwMDAwMCwgMSwgNjAwMDAwMCk7CisKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9QRUFLOgotCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWN0cmwpOworCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjcwMDAwMDAsIDEsIDgwMDAwMDApOwogCQlpZiAoZXJyID09IDAgJiYKIAkJICAgIHBhcmFtcy0+dmlkZW9fYml0cmF0ZV9tb2RlID09CiAJCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIpCiAJCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkU7CiAJCXJldHVybiBlcnI7CiAKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1ZCSV9GTVQ6Ci0JCWlmIChwYXJhbXMtPmNhcGFiaWxpdGllcyAmIENYMjM0MVhfQ0FQX0hBU19TTElDRURfVkJJKQotCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxY3RybCk7Ci0JCXJldHVybiBjeDIzNDF4X2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORSwKLQkJCQlWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORSwgMSwKLQkJCQlkZWZhdWx0X3BhcmFtcy5zdHJlYW1fdmJpX2ZtdCk7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1RFTVBPUkFMX0RFQ0lNQVRJT046CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjU1LCAxLCAwKTsKIAotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAxLCAzNCwgMSwKLQkJCQlwYXJhbXMtPmlzXzUwaHogPyAxMiA6IDE1KTsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAxLCAxLCAwKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NVVRFX1lVVjogIC8qIEluaXQgWVVWIChyZWFsbHkgWUNiQ3IpIHRvIGJsYWNrICovCisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMHhmZmZmZmYsIDEsIDB4MDA4MDgwKTsKIAogCS8qIENYMjM0MTUvNiBzcGVjaWZpYyAqLwogCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREU6CkBAIC02NDMsNyArNzU4LDcgQEAKIAkJCQlkZWZhdWx0X3BhcmFtcy5zdHJlYW1faW5zZXJ0X25hdl9wYWNrZXRzKTsKIAogCWRlZmF1bHQ6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWN0cmwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCX0KIH0KQEAgLTY3MSw2ICs3ODYsMTUgQEAKIAkJTlVMTAogCX07CiAKKwlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19hdWRpb19lbmNvZGluZ19sMl9hYzNbXSA9IHsKKwkJIiIsCisJCSJNUEVHLTEvMiBMYXllciBJSSIsCisJCSIiLAorCQkiIiwKKwkJIkFDLTMiLAorCQlOVUxMCisJfTsKKwogCXN0YXRpYyBjb25zdCBjaGFyICpjeDIzNDF4X3ZpZGVvX3NwYXRpYWxfZmlsdGVyX21vZGVfbWVudVtdID0gewogCQkiTWFudWFsIiwKIAkJIkF1dG8iLApAQCAtNzExLDYgKzgzNSw5IEBACiAJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgogCQlyZXR1cm4gKHAtPmNhcGFiaWxpdGllcyAmIENYMjM0MVhfQ0FQX0hBU19UUykgPwogCQkJbXBlZ19zdHJlYW1fdHlwZV93aXRoX3RzIDogbXBlZ19zdHJlYW1fdHlwZV93aXRob3V0X3RzOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKKwkJcmV0dXJuIChwLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfQUMzKSA/CisJCQltcGVnX2F1ZGlvX2VuY29kaW5nX2wyX2FjMyA6IHY0bDJfY3RybF9nZXRfbWVudShpZCk7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wxX0JJVFJBVEU6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wzX0JJVFJBVEU6CiAJCXJldHVybiBOVUxMOwpAQCAtNzMwLDE2ICs4NTcsMzQgQEAKIH0KIEVYUE9SVF9TWU1CT0woY3gyMzQxeF9jdHJsX2dldF9tZW51KTsKIAorLyogZGVmaW5pdGlvbnMgZm9yIGF1ZGlvIHByb3BlcnRpZXMgYml0cyAyOS0yOCAqLworI2RlZmluZSBDWDIzNDFYX0FVRElPX0VOQ09ESU5HX01FVEhPRF9NUEVHCTAKKyNkZWZpbmUgQ1gyMzQxWF9BVURJT19FTkNPRElOR19NRVRIT0RfQUMzCTEKKyNkZWZpbmUgQ1gyMzQxWF9BVURJT19FTkNPRElOR19NRVRIT0RfTFBDTQkyCisKIHN0YXRpYyB2b2lkIGN4MjM0MXhfY2FsY19hdWRpb19wcm9wZXJ0aWVzKHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwYXJhbXMpCiB7Ci0JcGFyYW1zLT5hdWRpb19wcm9wZXJ0aWVzID0gKHBhcmFtcy0+YXVkaW9fc2FtcGxpbmdfZnJlcSA8PCAwKSB8Ci0JCSgoMyAtIHBhcmFtcy0+YXVkaW9fZW5jb2RpbmcpIDw8IDIpIHwKLQkJKCgxICsgcGFyYW1zLT5hdWRpb19sMl9iaXRyYXRlKSA8PCA0KSB8CisJcGFyYW1zLT5hdWRpb19wcm9wZXJ0aWVzID0KKwkJKHBhcmFtcy0+YXVkaW9fc2FtcGxpbmdfZnJlcSA8PCAwKSB8CiAJCShwYXJhbXMtPmF1ZGlvX21vZGUgPDwgOCkgfAogCQkocGFyYW1zLT5hdWRpb19tb2RlX2V4dGVuc2lvbiA8PCAxMCkgfAogCQkoKChwYXJhbXMtPmF1ZGlvX2VtcGhhc2lzID09IFY0TDJfTVBFR19BVURJT19FTVBIQVNJU19DQ0lUVF9KMTcpCiAJCSAgPyAzIDogcGFyYW1zLT5hdWRpb19lbXBoYXNpcykgPDwgMTIpIHwKIAkJKHBhcmFtcy0+YXVkaW9fY3JjIDw8IDE0KTsKKworCWlmICgocGFyYW1zLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfQUMzKSAmJgorCSAgICBwYXJhbXMtPmF1ZGlvX2VuY29kaW5nID09IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMpIHsKKwkJcGFyYW1zLT5hdWRpb19wcm9wZXJ0aWVzIHw9CisJCQkvKiBOb3Qgc3VyZSBpZiB0aGlzIE1QRUcgTGF5ZXIgSUkgc2V0dGluZyBpcyByZXF1aXJlZCAqLworCQkJKCgzIC0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIpIDw8IDIpIHwKKwkJCShwYXJhbXMtPmF1ZGlvX2FjM19iaXRyYXRlIDw8IDQpIHwKKwkJCShDWDIzNDFYX0FVRElPX0VOQ09ESU5HX01FVEhPRF9BQzMgPDwgMjgpOworCX0gZWxzZSB7CisJCS8qIEFzc3VtaW5nIE1QRUcgTGF5ZXIgSUkgKi8KKwkJcGFyYW1zLT5hdWRpb19wcm9wZXJ0aWVzIHw9CisJCQkoKDMgLSBwYXJhbXMtPmF1ZGlvX2VuY29kaW5nKSA8PCAyKSB8CisJCQkoKDEgKyBwYXJhbXMtPmF1ZGlvX2wyX2JpdHJhdGUpIDw8IDQpOworCX0KIH0KIAogaW50IGN4MjM0MXhfZXh0X2N0cmxzKHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwYXJhbXMsIGludCBidXN5LApAQCAtMTAyMiw3ICsxMTY3LDEwIEBACiAJCXByZWZpeCwKIAkJY3gyMzQxeF9tZW51X2l0ZW0ocCwgVjRMMl9DSURfTVBFR19BVURJT19TQU1QTElOR19GUkVRKSwKIAkJY3gyMzQxeF9tZW51X2l0ZW0ocCwgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORyksCi0JCWN4MjM0MXhfbWVudV9pdGVtKHAsIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURSksCisJCWN4MjM0MXhfbWVudV9pdGVtKHAsCisJCQkgICBwLT5hdWRpb19lbmNvZGluZyA9PSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzCisJCQkJCSAgICAgID8gVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURQorCQkJCQkgICAgICA6IFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURSksCiAJCWN4MjM0MXhfbWVudV9pdGVtKHAsIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERSksCiAJCXAtPmF1ZGlvX211dGUgPyAiIChtdXRlZCkiIDogIiIpOwogCWlmIChwLT5hdWRpb19tb2RlID09IFY0TDJfTVBFR19BVURJT19NT0RFX0pPSU5UX1NURVJFTykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKaW5kZXggMDBmMWUyZS4uZmQzZmMzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKQEAgLTE1LDEyICsxNSwxNSBAQAogCXNlbGVjdCBEVkJfUzVIMTQxMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfTEdEVDMzMFggaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1pMMTAzNTMgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgRFZCX1REQTEwMDQ4IGlmICFEVkJfRkVfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01UMjEzMSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1hDMjAyOCBpZiAhRFZCX0ZFX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjkwIGlmICFEVkJfRkVfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxIGlmICFEVkJfRkVfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1hDNTAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlaRQorCXNlbGVjdCBEVkJfVERBMTAwNDggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0xOQlAyMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWNjExMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDkwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIxMzEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjkwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBMTgyNzEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9YQzUwMDAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIENvbmV4YW50IDIzODg1IGJhc2VkCiAJICBUViBjYXJkcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9NYWtlZmlsZQppbmRleCAyOWMyM2I0Li5hYjhlYTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L01ha2VmaWxlCkBAIC0xLDQgKzEsNiBAQAotY3gyMzg4NS1vYmpzCTo9IGN4MjM4ODUtY2FyZHMubyBjeDIzODg1LXZpZGVvLm8gY3gyMzg4NS12YmkubyBjeDIzODg1LWNvcmUubyBjeDIzODg1LWkyYy5vIGN4MjM4ODUtZHZiLm8gY3gyMzg4NS00MTcubworY3gyMzg4NS1vYmpzCTo9IGN4MjM4ODUtY2FyZHMubyBjeDIzODg1LXZpZGVvLm8gY3gyMzg4NS12YmkubyBcCisJCSAgICBjeDIzODg1LWNvcmUubyBjeDIzODg1LWkyYy5vIGN4MjM4ODUtZHZiLm8gY3gyMzg4NS00MTcubyBcCisJCSAgICBuZXR1cC1pbml0Lm8gY2ltYXgyLm8gbmV0dXAtZWVwcm9tLm8KIAogb2JqLSQoQ09ORklHX1ZJREVPX0NYMjM4ODUpICs9IGN4MjM4ODUubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY2ltYXgyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY2ltYXgyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2NTM2OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jaW1heDIuYwpAQCAtMCwwICsxLDQ3MiBAQAorLyoKKyAqIGNpbWF4Mi5jCisgKgorICogQ0lNYXgyKFIpIFNQMiBkcml2ZXIgaW4gY29uanVuY3Rpb24gd2l0aCBOZXRVcCBEdWFsIERWQi1TMiBDSSBjYXJkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5ldFVQIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG5ldHVwLnJ1PgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFieWxheSBPc3BhbiA8YW9zcGFuQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY3gyMzg4NS5oIgorI2luY2x1ZGUgImR2Yl9jYV9lbjUwMjIxLmgiCisvKioqKiBCaXQgZGVmaW5pdGlvbnMgZm9yIE1DNDE3X1JXRCBhbmQgTUM0MTdfT0VOIHJlZ2lzdGVycyAgKioqCisgIGJpdHMgMzEtMTYKKystLS0tLS0tLS0tLSsKK3wgUmVzZXJ2ZWQgIHwKKystLS0tLS0tLS0tLSsKKyAgYml0IDE1ICBiaXQgMTQgIGJpdCAxMyBiaXQgMTIgIGJpdCAxMSAgYml0IDEwICBiaXQgOSAgIGJpdCA4CisrLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKworfCAgV1IjICB8ICBSRCMgIHwgICAgICAgfCAgQUNLIyB8ICBBREhJIHwgIEFETE8gfCAgQ1MxIyB8ICBDUzAjIHwKKystLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCisgYml0IDcgICBiaXQgNiAgIGJpdCA1ICAgYml0IDQgICBiaXQgMyAgIGJpdCAyICAgYml0IDEgICBiaXQgMAorKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKK3wgIERBVEE3fCAgREFUQTZ8ICBEQVRBNXwgIERBVEE0fCAgREFUQTN8ICBEQVRBMnwgIERBVEExfCAgREFUQTB8CisrLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKworKioqLworLyogTUM0MTcgKi8KKyNkZWZpbmUgTkVUVVBfREFUQQkJMHgwMDAwMDBmZgorI2RlZmluZSBORVRVUF9XUgkJMHgwMDAwODAwMAorI2RlZmluZSBORVRVUF9SRAkJMHgwMDAwNDAwMAorI2RlZmluZSBORVRVUF9BQ0sJCTB4MDAwMDEwMDAKKyNkZWZpbmUgTkVUVVBfQURISQkJMHgwMDAwMDgwMAorI2RlZmluZSBORVRVUF9BRExPCQkweDAwMDAwNDAwCisjZGVmaW5lIE5FVFVQX0NTMQkJMHgwMDAwMDIwMAorI2RlZmluZSBORVRVUF9DUzAJCTB4MDAwMDAxMDAKKyNkZWZpbmUgTkVUVVBfRU5fQUxMCQkweDAwMDAxMDAwCisjZGVmaW5lIE5FVFVQX0NUUkxfT0ZGCQkoTkVUVVBfQ1MxIHwgTkVUVVBfQ1MwIHwgTkVUVVBfV1IgfCBORVRVUF9SRCkKKyNkZWZpbmUgTkVUVVBfQ0lfQ1RMCQkweDA0CisjZGVmaW5lIE5FVFVQX0NJX1JECQkxCisKKworc3RhdGljIHVuc2lnbmVkIGludCBjaV9kYmc7Cittb2R1bGVfcGFyYW0oY2lfZGJnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhjaV9kYmcsICJFbmFibGUgQ0kgZGVidWdnaW5nIik7CisKKyNkZWZpbmUgY2lfZGJnX3ByaW50KGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGNpX2RiZykgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCisvKiBzdG9yZXMgYWxsIHByaXZhdGUgdmFyaWFibGVzIGZvciBjb21tdW5pY2F0aW9uIHdpdGggQ0kgKi8KK3N0cnVjdCBuZXR1cF9jaV9zdGF0ZSB7CisJc3RydWN0IGR2Yl9jYV9lbjUwMjIxIGNhOworCXN0cnVjdCBtdXRleCBjYV9tdXRleDsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwOworCXU4IGNpX2kyY19hZGRyOworCWludCBzdGF0dXM7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJdm9pZCAqcHJpdjsKK307CisKK3N0cnVjdCBtdXRleCBncGlvX211dGV4Oy8qIFR3byBDaU1heCdzIHVzZXMgc2FtZSBHUElPIGxpbmVzICovCisKK2ludCBuZXR1cF9yZWFkX2kyYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBhZGRyLCB1OCByZWcsCisJCQkJCQl1OCAqYnVmLCBpbnQgbGVuKQoreworCWludCByZXQ7CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CisJCXsKKwkJCS5hZGRyCT0gYWRkciwKKwkJCS5mbGFncwk9IDAsCisJCQkuYnVmCT0gJnJlZywKKwkJCS5sZW4JPSAxCisJCX0sIHsKKwkJCS5hZGRyCT0gYWRkciwKKwkJCS5mbGFncwk9IEkyQ19NX1JELAorCQkJLmJ1Zgk9IGJ1ZiwKKwkJCS5sZW4JPSBsZW4KKwkJfQorCX07CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjX2FkYXAsIG1zZywgMik7CisKKwlpZiAocmV0ICE9IDIpIHsKKwkJY2lfZGJnX3ByaW50KCIlczogaTJjIHJlYWQgZXJyb3IsIFJlZyA9IDB4JTAyeCwgU3RhdHVzID0gJWRcbiIsCisJCQkJCQlfX2Z1bmNfXywgcmVnLCByZXQpOworCisJCXJldHVybiAtMTsKKwl9CisKKwljaV9kYmdfcHJpbnQoIiVzOiBpMmMgcmVhZCBBZGRyPTB4JTA0eCwgUmVnID0gMHglMDJ4LCBkYXRhID0gJTAyeFxuIiwKKwkJCQkJCV9fZnVuY19fLCBhZGRyLCByZWcsIGJ1ZlswXSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG5ldHVwX3dyaXRlX2kyYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBhZGRyLCB1OCByZWcsCisJCQkJCQl1OCAqYnVmLCBpbnQgbGVuKQoreworCWludCByZXQ7CisJdTggYnVmZmVyW2xlbiArIDFdOworCisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkcgk9IGFkZHIsCisJCS5mbGFncwk9IDAsCisJCS5idWYJPSAmYnVmZmVyWzBdLAorCQkubGVuCT0gbGVuICsgMQorCX07CisKKwlidWZmZXJbMF0gPSByZWc7CisJbWVtY3B5KCZidWZmZXJbMV0sIGJ1ZiwgbGVuKTsKKworCXJldCA9IGkyY190cmFuc2ZlcihpMmNfYWRhcCwgJm1zZywgMSk7CisKKwlpZiAocmV0ICE9IDEpIHsKKwkJY2lfZGJnX3ByaW50KCIlczogaTJjIHdyaXRlIGVycm9yLCBSZWc9WzB4JTAyeF0sIFN0YXR1cz0lZFxuIiwKKwkJCQkJCV9fZnVuY19fLCByZWcsIHJldCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IG5ldHVwX2NpX2dldF9tZW0oc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCit7CisJaW50IG1lbTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxKTsKKworCWZvciAoOzspIHsKKwkJbWVtID0gY3hfcmVhZChNQzQxN19SV0QpOworCQlpZiAoKG1lbSAmIE5FVFVQX0FDSykgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfQorCisJY3hfc2V0KE1DNDE3X1JXRCwgTkVUVVBfQ1RSTF9PRkYpOworCisJcmV0dXJuIG1lbSAmIDB4ZmY7Cit9CisKK2ludCBuZXR1cF9jaV9vcF9jYW0oc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLCBpbnQgc2xvdCwKKwkJCQl1OCBmbGFnLCB1OCByZWFkLCBpbnQgYWRkciwgdTggZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0dXBfY2lfc3RhdGUgKnN0YXRlID0gZW41MDIyMS0+ZGF0YTsKKwlzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQgPSBzdGF0ZS0+cHJpdjsKKwlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IHBvcnQtPmRldjsKKworCXU4IHN0b3JlOworCWludCBtZW07CisJaW50IHJldDsKKworCWlmICgwICE9IHNsb3QpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gbmV0dXBfcmVhZF9pMmMoc3RhdGUtPmkyY19hZGFwLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsCisJCQkJCQkJMCwgJnN0b3JlLCAxKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlzdG9yZSAmPSB+MHgwYzsKKwlzdG9yZSB8PSBmbGFnOworCisJcmV0ID0gbmV0dXBfd3JpdGVfaTJjKHN0YXRlLT5pMmNfYWRhcCwgc3RhdGUtPmNpX2kyY19hZGRyLAorCQkJCQkJCTAsICZzdG9yZSwgMSk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmZ3Bpb19tdXRleCk7CisKKwkvKiB3cml0ZSBhZGRyICovCisJY3hfd3JpdGUoTUM0MTdfT0VOLCBORVRVUF9FTl9BTEwpOworCWN4X3dyaXRlKE1DNDE3X1JXRCwgTkVUVVBfQ1RSTF9PRkYgfAorCQkJCU5FVFVQX0FETE8gfCAoMHhmZiAmIGFkZHIpKTsKKwljeF9jbGVhcihNQzQxN19SV0QsIE5FVFVQX0FETE8pOworCWN4X3dyaXRlKE1DNDE3X1JXRCwgTkVUVVBfQ1RSTF9PRkYgfAorCQkJCU5FVFVQX0FESEkgfCAoMHhmZiAmIChhZGRyID4+IDgpKSk7CisJY3hfY2xlYXIoTUM0MTdfUldELCBORVRVUF9BREhJKTsKKworCWlmIChyZWFkKSAvKiBkYXRhIGluICovCisJCWN4X3dyaXRlKE1DNDE3X09FTiwgTkVUVVBfRU5fQUxMIHwgTkVUVVBfREFUQSk7CisJZWxzZSAvKiBkYXRhIG91dCAqLworCQljeF93cml0ZShNQzQxN19SV0QsIE5FVFVQX0NUUkxfT0ZGIHwgZGF0YSk7CisKKwkvKiBjaG9vc2UgY2hpcCAqLworCWN4X2NsZWFyKE1DNDE3X1JXRCwKKwkJCShzdGF0ZS0+Y2lfaTJjX2FkZHIgPT0gMHg0MCkgPyBORVRVUF9DUzAgOiBORVRVUF9DUzEpOworCS8qIHJlYWQvd3JpdGUgKi8KKwljeF9jbGVhcihNQzQxN19SV0QsIChyZWFkKSA/IE5FVFVQX1JEIDogTkVUVVBfV1IpOworCW1lbSA9IG5ldHVwX2NpX2dldF9tZW0oZGV2KTsKKworCW11dGV4X3VubG9jaygmZ3Bpb19tdXRleCk7CisKKwlpZiAoIXJlYWQpCisJCWlmIChtZW0gPCAwKQorCQkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwljaV9kYmdfcHJpbnQoIiVzOiAlczogYWRkcj1bMHglMDJ4XSwgJXM9JXhcbiIsIF9fZnVuY19fLAorCQkJKHJlYWQpID8gInJlYWQiIDogIndyaXRlIiwgYWRkciwKKwkJCShmbGFnID09IE5FVFVQX0NJX0NUTCkgPyAiY3RsIiA6ICJtZW0iLAorCQkJKHJlYWQpID8gbWVtIDogZGF0YSk7CisKKwlpZiAocmVhZCkKKwkJcmV0dXJuIG1lbTsKKworCXJldHVybiAwOworfQorCitpbnQgbmV0dXBfY2lfcmVhZF9hdHRyaWJ1dGVfbWVtKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwKKwkJCQkJCWludCBzbG90LCBpbnQgYWRkcikKK3sKKwlyZXR1cm4gbmV0dXBfY2lfb3BfY2FtKGVuNTAyMjEsIHNsb3QsIDAsIE5FVFVQX0NJX1JELCBhZGRyLCAwKTsKK30KKworaW50IG5ldHVwX2NpX3dyaXRlX2F0dHJpYnV0ZV9tZW0oc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLAorCQkJCQkJaW50IHNsb3QsIGludCBhZGRyLCB1OCBkYXRhKQoreworCXJldHVybiBuZXR1cF9jaV9vcF9jYW0oZW41MDIyMSwgc2xvdCwgMCwgMCwgYWRkciwgZGF0YSk7Cit9CisKK2ludCBuZXR1cF9jaV9yZWFkX2NhbV9jdGwoc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLCBpbnQgc2xvdCwgdTggYWRkcikKK3sKKwlyZXR1cm4gbmV0dXBfY2lfb3BfY2FtKGVuNTAyMjEsIHNsb3QsIE5FVFVQX0NJX0NUTCwKKwkJCQkJCQlORVRVUF9DSV9SRCwgYWRkciwgMCk7Cit9CisKK2ludCBuZXR1cF9jaV93cml0ZV9jYW1fY3RsKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwgaW50IHNsb3QsCisJCQkJCQkJdTggYWRkciwgdTggZGF0YSkKK3sKKwlyZXR1cm4gbmV0dXBfY2lfb3BfY2FtKGVuNTAyMjEsIHNsb3QsIE5FVFVQX0NJX0NUTCwgMCwgYWRkciwgZGF0YSk7Cit9CisKK2ludCBuZXR1cF9jaV9zbG90X3Jlc2V0KHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwgaW50IHNsb3QpCit7CisJc3RydWN0IG5ldHVwX2NpX3N0YXRlICpzdGF0ZSA9IGVuNTAyMjEtPmRhdGE7CisJdTggYnVmID0gIDB4ODA7CisJaW50IHJldDsKKworCWlmICgwICE9IHNsb3QpCisJCXJldHVybiAtRUlOVkFMOworCisJdWRlbGF5KDUwMCk7CisJcmV0ID0gbmV0dXBfd3JpdGVfaTJjKHN0YXRlLT5pMmNfYWRhcCwgc3RhdGUtPmNpX2kyY19hZGRyLAorCQkJCQkJCTAsICZidWYsIDEpOworCisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJdWRlbGF5KDUwMCk7CisKKwlidWYgPSAweDAwOworCXJldCA9IG5ldHVwX3dyaXRlX2kyYyhzdGF0ZS0+aTJjX2FkYXAsIHN0YXRlLT5jaV9pMmNfYWRkciwKKwkJCQkJCQkwLCAmYnVmLCAxKTsKKworCW1zbGVlcCgxMDAwKTsKKwlkdmJfY2FfZW41MDIyMV9jYW1yZWFkeV9pcnEoJnN0YXRlLT5jYSwgMCk7CisKKwlyZXR1cm4gMDsKKworfQorCitpbnQgbmV0dXBfY2lfc2xvdF9zaHV0ZG93bihzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsIGludCBzbG90KQoreworCS8qIG5vdCBpbXBsZW1lbnRlZCAqLworCXJldHVybiAwOworfQorCitpbnQgbmV0dXBfY2lfc2xvdF90c19jdGwoc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3QgbmV0dXBfY2lfc3RhdGUgKnN0YXRlID0gZW41MDIyMS0+ZGF0YTsKKwl1OCBidWYgPSAweDYwOworCisJaWYgKDAgIT0gc2xvdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gbmV0dXBfd3JpdGVfaTJjKHN0YXRlLT5pMmNfYWRhcCwgc3RhdGUtPmNpX2kyY19hZGRyLAorCQkJCQkJCTAsICZidWYsIDEpOworfQorCisvKiB3b3JrIGhhbmRsZXIgKi8KK3N0YXRpYyB2b2lkIG5ldHVwX3JlYWRfY2lfc3RhdHVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbmV0dXBfY2lfc3RhdGUgKnN0YXRlID0KKwkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0dXBfY2lfc3RhdGUsIHdvcmspOworCXU4IGJ1ZlszM107CisJaW50IHJldDsKKworCXJldCA9IG5ldHVwX3JlYWRfaTJjKHN0YXRlLT5pMmNfYWRhcCwgc3RhdGUtPmNpX2kyY19hZGRyLAorCQkJCQkJCTAsICZidWZbMF0sIDMzKTsKKworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuOworCisJY2lfZGJnX3ByaW50KCIlczogU2xvdCBTdGF0dXMgQWRkcj1bMHglMDR4XSwgUmVnPVsweCUwMnhdLCBkYXRhPSUwMngsICIKKwkJIlRTIGNvbmZpZyA9ICUwMnhcbiIsIF9fZnVuY19fLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsIDAsIGJ1ZlswXSwKKwkJYnVmWzMyXSk7CisKKwlpZiAoYnVmWzBdICYmIDEpCisJCXN0YXRlLT5zdGF0dXMgPSBEVkJfQ0FfRU41MDIyMV9QT0xMX0NBTV9QUkVTRU5UIHwKKwkJCURWQl9DQV9FTjUwMjIxX1BPTExfQ0FNX1JFQURZOworCWVsc2UKKwkJc3RhdGUtPnN0YXR1cyA9IDA7Cit9CisKKy8qIENJIGlycSBoYW5kbGVyICovCitpbnQgbmV0dXBfY2lfc2xvdF9zdGF0dXMoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHUzMiBwY2lfc3RhdHVzKQoreworCXN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCA9IE5VTEw7CisJc3RydWN0IG5ldHVwX2NpX3N0YXRlICpzdGF0ZSA9IE5VTEw7CisKKwlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfR1BJTzApCisJCXBvcnQgPSAmZGV2LT50czE7CisJZWxzZSBpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfR1BJTzEpCisJCXBvcnQgPSAmZGV2LT50czI7CisJZWxzZSAvKiB3aG8gY2FsbHMgPyAqLworCQlyZXR1cm4gMDsKKworCXN0YXRlID0gcG9ydC0+cG9ydF9wcml2OworCisJc2NoZWR1bGVfd29yaygmc3RhdGUtPndvcmspOworCisJcmV0dXJuIDE7Cit9CisKK2ludCBuZXR1cF9wb2xsX2NpX3Nsb3Rfc3RhdHVzKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwgaW50IHNsb3QsIGludCBvcGVuKQoreworCXN0cnVjdCBuZXR1cF9jaV9zdGF0ZSAqc3RhdGUgPSBlbjUwMjIxLT5kYXRhOworCisJaWYgKDAgIT0gc2xvdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3RhdGUtPnN0YXR1czsKK30KKworaW50IG5ldHVwX2NpX2luaXQoc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0KQoreworCXN0cnVjdCBuZXR1cF9jaV9zdGF0ZSAqc3RhdGU7CisJdTggY2ltYXhfaW5pdFszNF0gPSB7CisJCTB4MDAsIC8qIG1vZHVsZSBBIGNvbnRyb2wqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBtYXNrIGhpZ2ggQSAqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBtYXNrIGxvdyBBICovCisJCTB4MDAsIC8qIGF1dG8gc2VsZWN0IHBhdHRlcm4gaGlnaCBBICovCisJCTB4MDAsIC8qIGF1dG8gc2VsZWN0IHBhdHRlcm4gbG93IEEgKi8KKwkJMHg0NCwgLyogbWVtb3J5IGFjY2VzcyB0aW1lIEEgKi8KKwkJMHgwMCwgLyogaW52ZXJ0IGlucHV0IEEgKi8KKwkJMHgwMCwgLyogUkZVICovCisJCTB4MDAsIC8qIFJGVSAqLworCQkweDAwLCAvKiBtb2R1bGUgQiBjb250cm9sKi8KKwkJMHgwMCwgLyogYXV0byBzZWxlY3QgbWFzayBoaWdoIEIgKi8KKwkJMHgwMCwgLyogYXV0byBzZWxlY3QgbWFzayBsb3cgQiAqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBwYXR0ZXJuIGhpZ2ggQiAqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBwYXR0ZXJuIGxvdyBCICovCisJCTB4NDQsIC8qIG1lbW9yeSBhY2Nlc3MgdGltZSBCICovCisJCTB4MDAsIC8qIGludmVydCBpbnB1dCBCICovCisJCTB4MDAsIC8qIFJGVSAqLworCQkweDAwLCAvKiBSRlUgKi8KKwkJMHgwMCwgLyogYXV0byBzZWxlY3QgbWFzayBoaWdoIEV4dCAqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBtYXNrIGxvdyBFeHQgKi8KKwkJMHgwMCwgLyogYXV0byBzZWxlY3QgcGF0dGVybiBoaWdoIEV4dCAqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBwYXR0ZXJuIGxvdyBFeHQgKi8KKwkJMHgwMCwgLyogUkZVICovCisJCTB4MDIsIC8qIGRlc3RpbmF0aW9uIC0gbW9kdWxlIEEgKi8KKwkJMHgwMSwgLyogcG93ZXIgb24gKHVzZSBpdCBsaWtlIHN0b3JlIHBsYWNlKSAqLworCQkweDAwLCAvKiBSRlUgKi8KKwkJMHgwMCwgLyogaW50IHN0YXR1cyByZWFkIG9ubHkgKi8KKwkJMHgwMSwgLyogYWxsIGludCB1bm1hc2tlZCAqLworCQkweDA0LCAvKiBpbnQgY29uZmlnICovCisJCTB4MDAsIC8qIFVTQ0cxICovCisJCTB4MDQsIC8qIGFjayBhY3RpdmUgbG93ICovCisJCTB4MDAsIC8qIExPQ0sgPSAwICovCisJCTB4MzMsIC8qIHNlcmlhbCBtb2RlLCByaXNpbmcgaW4sIHJpc2luZyBvdXQsIE1TQiBmaXJzdCovCisJCTB4MzEsIC8qIHN5bmNyb25pemF0aW9uICovCisJfTsKKwlpbnQgcmV0OworCisJY2lfZGJnX3ByaW50KCIlc1xuIiwgX19mdW5jX18pOworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5ldHVwX2NpX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkgeworCQljaV9kYmdfcHJpbnQoIiVzOiBVbmFibGUgY3JlYXRlIENJIHN0cnVjdHVyZSFcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJcG9ydC0+cG9ydF9wcml2ID0gc3RhdGU7CisKKwlzd2l0Y2ggKHBvcnQtPm5yKSB7CisJY2FzZSAxOgorCQlzdGF0ZS0+Y2lfaTJjX2FkZHIgPSAweDQwOworCQltdXRleF9pbml0KCZncGlvX211dGV4KTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlzdGF0ZS0+Y2lfaTJjX2FkZHIgPSAweDQxOworCQlicmVhazsKKwl9CisKKwlzdGF0ZS0+aTJjX2FkYXAgPSAmcG9ydC0+ZGV2LT5pMmNfYnVzWzBdLmkyY19hZGFwOworCXN0YXRlLT5jYS5vd25lciA9IFRISVNfTU9EVUxFOworCXN0YXRlLT5jYS5yZWFkX2F0dHJpYnV0ZV9tZW0gPSBuZXR1cF9jaV9yZWFkX2F0dHJpYnV0ZV9tZW07CisJc3RhdGUtPmNhLndyaXRlX2F0dHJpYnV0ZV9tZW0gPSBuZXR1cF9jaV93cml0ZV9hdHRyaWJ1dGVfbWVtOworCXN0YXRlLT5jYS5yZWFkX2NhbV9jb250cm9sID0gbmV0dXBfY2lfcmVhZF9jYW1fY3RsOworCXN0YXRlLT5jYS53cml0ZV9jYW1fY29udHJvbCA9IG5ldHVwX2NpX3dyaXRlX2NhbV9jdGw7CisJc3RhdGUtPmNhLnNsb3RfcmVzZXQgPSBuZXR1cF9jaV9zbG90X3Jlc2V0OworCXN0YXRlLT5jYS5zbG90X3NodXRkb3duID0gbmV0dXBfY2lfc2xvdF9zaHV0ZG93bjsKKwlzdGF0ZS0+Y2Euc2xvdF90c19lbmFibGUgPSBuZXR1cF9jaV9zbG90X3RzX2N0bDsKKwlzdGF0ZS0+Y2EucG9sbF9zbG90X3N0YXR1cyA9IG5ldHVwX3BvbGxfY2lfc2xvdF9zdGF0dXM7CisJc3RhdGUtPmNhLmRhdGEgPSBzdGF0ZTsKKwlzdGF0ZS0+cHJpdiA9IHBvcnQ7CisKKwlyZXQgPSBuZXR1cF93cml0ZV9pMmMoc3RhdGUtPmkyY19hZGFwLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsCisJCQkJCQkwLCAmY2ltYXhfaW5pdFswXSwgMzQpOworCS8qIGxvY2sgcmVnaXN0ZXJzICovCisJcmV0IHw9IG5ldHVwX3dyaXRlX2kyYyhzdGF0ZS0+aTJjX2FkYXAsIHN0YXRlLT5jaV9pMmNfYWRkciwKKwkJCQkJCTB4MWYsICZjaW1heF9pbml0WzB4MThdLCAxKTsKKwkvKiBwb3dlciBvbiBzbG90cyAqLworCXJldCB8PSBuZXR1cF93cml0ZV9pMmMoc3RhdGUtPmkyY19hZGFwLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsCisJCQkJCQkweDE4LCAmY2ltYXhfaW5pdFsweDE4XSwgMSk7CisKKwlpZiAoMCAhPSByZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gZHZiX2NhX2VuNTAyMjFfaW5pdCgmcG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIsCisJCQkJICAgJnN0YXRlLT5jYSwKKwkJCQkgICAvKiBmbGFncyAqLyAwLAorCQkJCSAgIC8qIG5fc2xvdHMgKi8gMSk7CisJaWYgKDAgIT0gcmV0KQorCQlnb3RvIGVycjsKKworCUlOSVRfV09SSygmc3RhdGUtPndvcmssIG5ldHVwX3JlYWRfY2lfc3RhdHVzKTsKKworCWNpX2RiZ19wcmludCgiJXM6IENJIGluaXRpYWxpemVkIVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7CitlcnI6CisJY2lfZGJnX3ByaW50KCIlczogQ2Fubm90IGluaXRpYWxpemUgQ0k6IEVycm9yICVkLlxuIiwgX19mdW5jX18sIHJldCk7CisJa2ZyZWUoc3RhdGUpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbmV0dXBfY2lfZXhpdChzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQpCit7CisJc3RydWN0IG5ldHVwX2NpX3N0YXRlICpzdGF0ZTsKKworCWlmIChOVUxMID09IHBvcnQpCisJCXJldHVybjsKKworCXN0YXRlID0gKHN0cnVjdCBuZXR1cF9jaV9zdGF0ZSAqKXBvcnQtPnBvcnRfcHJpdjsKKwlpZiAoTlVMTCA9PSBzdGF0ZSkKKwkJcmV0dXJuOworCisJaWYgKE5VTEwgPT0gc3RhdGUtPmNhLmRhdGEpCisJCXJldHVybjsKKworCWR2Yl9jYV9lbjUwMjIxX3JlbGVhc2UoJnN0YXRlLT5jYSk7CisJa2ZyZWUoc3RhdGUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2NpbWF4Mi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2NpbWF4Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxODc0NGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY2ltYXgyLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIGNpbWF4Mi5oCisgKgorICogQ0lNYXgoUikgU1AyIGRyaXZlciBpbiBjb25qdW5jdGlvbiB3aXRoIE5ldFVwIER1YWwgRFZCLVMyIENJIGNhcmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbmV0dXAucnU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWJ5bGF5IE9zcGFuIDxhb3NwYW5AbmV0dXAucnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgQ0lNQVgyX0gKKyNkZWZpbmUgQ0lNQVgyX0gKKyNpbmNsdWRlICJkdmJfY2FfZW41MDIyMS5oIgorCitleHRlcm4gaW50IG5ldHVwX2NpX3JlYWRfYXR0cmlidXRlX21lbShzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsCisJCQkJCQlpbnQgc2xvdCwgaW50IGFkZHIpOworZXh0ZXJuIGludCBuZXR1cF9jaV93cml0ZV9hdHRyaWJ1dGVfbWVtKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwKKwkJCQkJCWludCBzbG90LCBpbnQgYWRkciwgdTggZGF0YSk7CitleHRlcm4gaW50IG5ldHVwX2NpX3JlYWRfY2FtX2N0bChzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsCisJCQkJCQlpbnQgc2xvdCwgdTggYWRkcik7CitleHRlcm4gaW50IG5ldHVwX2NpX3dyaXRlX2NhbV9jdGwoc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLAorCQkJCQkJaW50IHNsb3QsIHU4IGFkZHIsIHU4IGRhdGEpOworZXh0ZXJuIGludCBuZXR1cF9jaV9zbG90X3Jlc2V0KHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwgaW50IHNsb3QpOworZXh0ZXJuIGludCBuZXR1cF9jaV9zbG90X3NodXRkb3duKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwgaW50IHNsb3QpOworZXh0ZXJuIGludCBuZXR1cF9jaV9zbG90X3RzX2N0bChzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsIGludCBzbG90KTsKK2V4dGVybiBpbnQgbmV0dXBfY2lfc2xvdF9zdGF0dXMoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHUzMiBwY2lfc3RhdHVzKTsKK2V4dGVybiBpbnQgbmV0dXBfcG9sbF9jaV9zbG90X3N0YXR1cyhzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsCisJCQkJCQlpbnQgc2xvdCwgaW50IG9wZW4pOworZXh0ZXJuIGludCBuZXR1cF9jaV9pbml0KHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCk7CitleHRlcm4gdm9pZCBuZXR1cF9jaV9leGl0KHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYwppbmRleCBiZmUyNTg0Li42ZjVkZjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYwpAQCAtODk2LDcgKzg5Niw3IEBACiAJaWYgKHJldHZhbCAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkJIkVSUk9SOiBIb3RwbHVnIGZpcm13YXJlIHJlcXVlc3QgZmFpbGVkICglcykuXG4iLAotCQkJQ1gyMzQxWF9GSVJNX0VOQ19GSUxFTkFNRSk7CisJCQlDWDIzODg1X0ZJUk1fSU1BR0VfTkFNRSk7CiAJCXByaW50ayhLRVJOX0VSUiAiUGxlYXNlIGZpeCB5b3VyIGhvdHBsdWcgc2V0dXAsIHRoZSBib2FyZCB3aWxsICIKIAkJCSJub3Qgd29yayB3aXRob3V0IGZpcm13YXJlIGxvYWRlZCFcbiIpOwogCQlyZXR1cm4gLTE7CkBAIC0xMTk4LDIxICsxMTk4LDE2IEBACiAJc3RydWN0IGN4MjM4ODVfZmggICpmaCAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCXN0cnVjdCBjeDIzODg1X2lucHV0ICppbnB1dDsKLQl1bnNpZ25lZCBpbnQgbjsKKwlpbnQgbjsKIAotCW4gPSBpLT5pbmRleDsKLQotCWlmIChuID49IDQpCisJaWYgKGktPmluZGV4ID49IDQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaW5wdXQgPSAmY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0uaW5wdXRbbl07CisJaW5wdXQgPSAmY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0uaW5wdXRbaS0+aW5kZXhdOwogCiAJaWYgKGlucHV0LT50eXBlID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KGksIDAsIHNpemVvZigqaSkpOwotCWktPmluZGV4ID0gbjsKLQogCS8qIEZJWE1FCiAJICogc3RyY3B5KGktPm5hbWUsIGlucHV0LT5uYW1lKTsgKi8KIAlzdHJjcHkoaS0+bmFtZSwgInVuc2V0Iik7CkBAIC0xMjU1LDEwICsxMjUwLDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKDAgIT0gdC0+aW5kZXgpCiAJCXJldHVybiAtRUlOVkFMOwotCW1lbXNldCh0LCAwLCBzaXplb2YoKnQpKTsKIAlzdHJjcHkodC0+bmFtZSwgIlRlbGV2aXNpb24iKTsKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX0dfVFVORVIsIHQpOwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzFdLCBWSURJT0NfR19UVU5FUiwgdCk7CisJY2FsbF9hbGwoZGV2LCB0dW5lciwgZ190dW5lciwgdCk7CiAKIAlkcHJpbnRrKDEsICJWSURJT0NfR19UVU5FUjogdHVuZXIgdHlwZSAlZFxuIiwgdC0+dHlwZSk7CiAKQEAgLTEyNzUsNyArMTI2OCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogVXBkYXRlIHRoZSBBL1YgY29yZSAqLwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzJdLCBWSURJT0NfU19UVU5FUiwgdCk7CisJY2FsbF9hbGwoZGV2LCB0dW5lciwgc190dW5lciwgdCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyODYsMTQgKzEyNzksMTIgQEAKIAlzdHJ1Y3QgY3gyMzg4NV9maCAgKmZoICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGZoLT5kZXY7CiAKLQltZW1zZXQoZiwgMCwgc2l6ZW9mKCpmKSk7CiAJaWYgKFVOU0VUID09IGRldi0+dHVuZXJfdHlwZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwogCWYtPmZyZXF1ZW5jeSA9IGRldi0+ZnJlcTsKIAotCS8qIEFzc3VtcHRpb24gdGhhdCB0dW5lciBpcyBhbHdheXMgb24gYnVzIDEgKi8KLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1sxXSwgVklESU9DX0dfRlJFUVVFTkNZLCBmKTsKKwljYWxsX2FsbChkZXYsIHR1bmVyLCBnX2ZyZXF1ZW5jeSwgZik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMjAsOCArMTMxMSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWRldi0+ZnJlcSA9IGYtPmZyZXF1ZW5jeTsKIAotCS8qIEFzc3VtcHRpb24gdGhhdCB0dW5lciBpcyBhbHdheXMgb24gYnVzIDEgKi8KLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1sxXSwgVklESU9DX1NfRlJFUVVFTkNZLCBmKTsKKwljYWxsX2FsbChkZXYsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgZik7CiAKIAljeDIzODg1X2luaXRpYWxpemVfY29kZWMoZGV2KTsKIApAQCAtMTMzNSw3ICsxMzI1LDcgQEAKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGZoLT5kZXY7CiAKIAkvKiBVcGRhdGUgdGhlIEEvViBjb3JlICovCi0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMl0sIFZJRElPQ19TX0NUUkwsIGN0bCk7CisJY2FsbF9hbGwoZGV2LCBjb3JlLCBzX2N0cmwsIGN0bCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNDYsNyArMTMzNiw2IEBACiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCXN0cnVjdCBjeDIzODg1X3RzcG9ydCAgKnRzcG9ydCA9ICZkZXYtPnRzMTsKIAotCW1lbXNldChjYXAsIDAsIHNpemVvZigqY2FwKSk7CiAJc3RyY3B5KGNhcC0+ZHJpdmVyLCBkZXYtPm5hbWUpOwogCXN0cmxjcHkoY2FwLT5jYXJkLCBjeDIzODg1X2JvYXJkc1t0c3BvcnQtPmRldi0+Ym9hcmRdLm5hbWUsCiAJCXNpemVvZihjYXAtPmNhcmQpKTsKQEAgLTEzNjYsMTYgKzEzNTUsMTAgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQogewotCWludCBpbmRleDsKLQotCWluZGV4ID0gZi0+aW5kZXg7Ci0JaWYgKGluZGV4ICE9IDApCisJaWYgKGYtPmluZGV4ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOwotCWYtPmluZGV4ID0gaW5kZXg7CiAJc3RybGNweShmLT5kZXNjcmlwdGlvbiwgIk1QRUciLCBzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKLQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWYtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01QRUc7CiAKIAlyZXR1cm4gMDsKQEAgLTEzODcsOCArMTM3MCw2IEBACiAJc3RydWN0IGN4MjM4ODVfZmggICpmaCAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCi0JbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOwotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKIAlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPQpAQCAtMTQwOCwxMiArMTM4OSwxMCBAQAogCXN0cnVjdCBjeDIzODg1X2ZoICAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gZmgtPmRldjsKIAotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKIAlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPQogCQlkZXYtPnRzMS50c19wYWNrZXRfc2l6ZSAqIGRldi0+dHMxLnRzX3BhY2tldF9jb3VudDsKLQlmLT5mbXQucGl4LnNpemVpbWFnZSAgICA9CiAJZi0+Zm10LnBpeC5jb2xvcnNwYWNlICAgPSAwOwogCWRwcmludGsoMSwgIlZJRElPQ19UUllfRk1UOiB3OiAlZCwgaDogJWQsIGY6ICVkXG4iLAogCQlkZXYtPnRzMS53aWR0aCwgZGV2LT50czEuaGVpZ2h0LCBmaC0+bXBlZ3EuZmllbGQpOwpAQCAtMTQyNiw3ICsxNDA1LDYgQEAKIAlzdHJ1Y3QgY3gyMzg4NV9maCAgKmZoICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGZoLT5kZXY7CiAKLQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgID0gVjRMMl9QSVhfRk1UX01QRUc7CiAJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOwogCWYtPmZtdC5waXguc2l6ZWltYWdlICAgID0KQEAgLTE1NDMsMTIgKzE1MjEsNyBAQAogCXByaW50ayhLRVJOX0lORk8KIAkJIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAogCSAgICAgICBkZXYtPm5hbWUpOwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzBdLCBWSURJT0NfTE9HX1NUQVRVUywKLQkJTlVMTCk7Ci0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMV0sIFZJRElPQ19MT0dfU1RBVFVTLAotCQlOVUxMKTsKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX0xPR19TVEFUVVMsCi0JCU5VTEwpOworCWNhbGxfYWxsKGRldiwgY29yZSwgbG9nX3N0YXR1cyk7CiAJY3gyMzQxeF9sb2dfc3RhdHVzKCZkZXYtPm1wZWdfcGFyYW1zLCBuYW1lKTsKIAlwcmludGsoS0VSTl9JTkZPCiAJCSIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCmluZGV4IGNhYTA5OGIuLjVlNGI3ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiY3gyMzg4NS5oIgogI2luY2x1ZGUgInR1bmVyLXhjMjAyOC5oIgorI2luY2x1ZGUgIm5ldHVwLWluaXQuaCIKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBib2FyZCBjb25maWcgaW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE2Miw2ICsxNjMsMjQgQEAKIAkJLm5hbWUJCT0gIkNvbXBybyBWaWRlb01hdGUgRTY1MEYiLAogCQkucG9ydGMJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKIAl9LAorCVtDWDIzODg1X0JPQVJEX1RCU182OTIwXSA9IHsKKwkJLm5hbWUJCT0gIlR1cmJvU2lnaHQgVEJTIDY5MjAiLAorCQkucG9ydGIJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKKwl9LAorCVtDWDIzODg1X0JPQVJEX1RFVklJX1M0NzBdID0geworCQkubmFtZQkJPSAiVGVWaWkgUzQ3MCIsCisJCS5wb3J0YgkJPSBDWDIzODg1X01QRUdfRFZCLAorCX0sCisJW0NYMjM4ODVfQk9BUkRfRFZCV09STERfMjAwNV0gPSB7CisJCS5uYW1lCQk9ICJEVkJXb3JsZCBEVkItUzIgMjAwNSIsCisJCS5wb3J0YgkJPSBDWDIzODg1X01QRUdfRFZCLAorCX0sCisJW0NYMjM4ODVfQk9BUkRfTkVUVVBfRFVBTF9EVkJTMl9DSV0gPSB7CisJCS5jaW1heAkJPSAxLAorCQkubmFtZQkJPSAiTmV0VVAgRHVhbCBEVkItUzIgQ0kiLAorCQkucG9ydGIJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKKwkJLnBvcnRjCQk9IENYMjM4ODVfTVBFR19EVkIsCisJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3gyMzg4NV9iY291bnQgPSBBUlJBWV9TSVpFKGN4MjM4ODVfYm9hcmRzKTsKIApAQCAtMjQ1LDYgKzI2NCwyMiBAQAogCQkuc3VidmVuZG9yID0gMHgxODViLAogCQkuc3ViZGV2aWNlID0gMHhlODAwLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U2NTBGLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4NjkyMCwKKwkJLnN1YmRldmljZSA9IDB4ODg4OCwKKwkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfVEJTXzY5MjAsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHhkNDcwLAorCQkuc3ViZGV2aWNlID0gMHg5MDIyLAorCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9URVZJSV9TNDcwLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MDAwMSwKKwkJLnN1YmRldmljZSA9IDB4MjAwNSwKKwkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfRFZCV09STERfMjAwNSwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDFiNTUsCisJCS5zdWJkZXZpY2UgPSAweDJhMmMsCisJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0ksCiAJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3gyMzg4NV9pZGNvdW50ID0gQVJSQVlfU0laRShjeDIzODg1X3N1Ymlkcyk7CkBAIC01NTIsNiArNTg3LDM4IEBACiAJCW1kZWxheSgyMCk7CiAJCWN4X3NldChHUDBfSU8sIDB4MDAwNDAwMDQpOwogCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfVEJTXzY5MjA6CisJY2FzZSBDWDIzODg1X0JPQVJEX1RFVklJX1M0NzA6CisJCWN4X3dyaXRlKE1DNDE3X0NUTCwgMHgwMDAwMDAzNik7CisJCWN4X3dyaXRlKE1DNDE3X09FTiwgMHgwMDAwMTAwMCk7CisJCWN4X3dyaXRlKE1DNDE3X1JXRCwgMHgwMDAwMTgwMCk7CisJCWJyZWFrOworCWNhc2UgQ1gyMzg4NV9CT0FSRF9ORVRVUF9EVUFMX0RWQlMyX0NJOgorCQkvKiBHUElPLTAgSU5UQSBmcm9tIENpTWF4MQorCQkgICBHUElPLTEgSU5UQiBmcm9tIENpTWF4MgorCQkgICBHUElPLTIgcmVzZXQgY2hpcHMKKwkJICAgR1BJTy0zIHRvIEdQSU8tMTAgZGF0YS9hZGRyIGZvciBDQQorCQkgICBHUElPLTExIH5DUzAgdG8gQ2lNYXgxCisJCSAgIEdQSU8tMTIgfkNTMSB0byBDaU1heDIKKwkJICAgR1BJTy0xMyBBREwwIGxvYWQgTFNCIGFkZHIKKwkJICAgR1BJTy0xNCBBREwxIGxvYWQgTVNCIGFkZHIKKwkJICAgR1BJTy0xNSB+UkRZIGZyb20gQ2lNYXgKKwkJICAgR1BJTy0xNyB+UkQgdG8gQ2lNYXgKKwkJICAgR1BJTy0xOCB+V1IgdG8gQ2lNYXgKKwkJICovCisJCWN4X3NldChHUDBfSU8sIDB4MDAwNDAwMDApOyAvKiBHUElPIGFzIG91dCAqLworCQkvKiBHUElPMSBhbmQgR1BJTzIgYXMgSU5UQSBhbmQgSU5UQiBmcm9tIENpTWF4ZXMsIHJlc2V0IGxvdyAqLworCQljeF9jbGVhcihHUDBfSU8sIDB4MDAwMzAwMDQpOworCQltZGVsYXkoMTAwKTsvKiByZXNldCBkZWxheSAqLworCQljeF9zZXQoR1AwX0lPLCAweDAwMDQwMDA0KTsgLyogR1BJTyBhcyBvdXQsIHJlc2V0IGhpZ2ggKi8KKwkJY3hfd3JpdGUoTUM0MTdfQ1RMLCAweDAwMDAwMDM3KTsvKiBlbmFibGUgR1BJTzMtMTggcGlucyAqLworCQkvKiBHUElPLTE1IElOIGFzIH5BQ0ssIHJlc3QgYXMgT1VUICovCisJCWN4X3dyaXRlKE1DNDE3X09FTiwgMHgwMDAwMTAwMCk7CisJCS8qIH5SRCwgfldSIGhpZ2g7IEFETDAsIEFETDEgbG93OyB+Q1MwLCB+Q1MxIGhpZ2ggKi8KKwkJY3hfd3JpdGUoTUM0MTdfUldELCAweDAwMDBjMzAwKTsKKwkJLyogZW5hYmxlIGlycSAqLworCQljeF93cml0ZShHUElPX0lTTSwgMHgwMDAwMDAwMCk7LyogSU5URVJSVVBUUyBhY3RpdmUgbG93Ki8KKwkJYnJlYWs7CiAJfQogfQogCkBAIC02MzIsNiArNjk5LDIxIEBACiAJCXRzMi0+dHNfY2xrX2VuX3ZhbCA9IDB4MTsgLyogRW5hYmxlIFRTX0NMSyAqLwogCQl0czItPnNyY19zZWxfdmFsICAgPSBDWDIzODg1X1NSQ19TRUxfUEFSQUxMRUxfTVBFR19WSURFTzsKIAkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX1RFVklJX1M0NzA6CisJY2FzZSBDWDIzODg1X0JPQVJEX1RCU182OTIwOgorCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVkJXT1JMRF8yMDA1OgorCQl0czEtPmdlbl9jdHJsX3ZhbCAgPSAweDU7IC8qIFBhcmFsbGVsICovCisJCXRzMS0+dHNfY2xrX2VuX3ZhbCA9IDB4MTsgLyogRW5hYmxlIFRTX0NMSyAqLworCQl0czEtPnNyY19zZWxfdmFsICAgPSBDWDIzODg1X1NSQ19TRUxfUEFSQUxMRUxfTVBFR19WSURFTzsKKwkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0k6CisJCXRzMS0+Z2VuX2N0cmxfdmFsICA9IDB4YzsgLyogU2VyaWFsIGJ1cyArIHB1bmN0dXJlZCBjbG9jayAqLworCQl0czEtPnRzX2Nsa19lbl92YWwgPSAweDE7IC8qIEVuYWJsZSBUU19DTEsgKi8KKwkJdHMxLT5zcmNfc2VsX3ZhbCAgID0gQ1gyMzg4NV9TUkNfU0VMX1BBUkFMTEVMX01QRUdfVklERU87CisJCXRzMi0+Z2VuX2N0cmxfdmFsICA9IDB4YzsgLyogU2VyaWFsIGJ1cyArIHB1bmN0dXJlZCBjbG9jayAqLworCQl0czItPnRzX2Nsa19lbl92YWwgPSAweDE7IC8qIEVuYWJsZSBUU19DTEsgKi8KKwkJdHMyLT5zcmNfc2VsX3ZhbCAgID0gQ1gyMzg4NV9TUkNfU0VMX1BBUkFMTEVMX01QRUdfVklERU87CisJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI1MDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwUToKQEAgLTY1Niw3ICs3MzgsMTcgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE3MDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSDoKIAljYXNlIENYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FNjUwRjoKLQkJcmVxdWVzdF9tb2R1bGUoImN4MjU4NDAiKTsKKwljYXNlIENYMjM4ODVfQk9BUkRfTkVUVVBfRFVBTF9EVkJTMl9DSToKKwkJZGV2LT5zZF9jeDI1ODQwID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT5pMmNfYnVzWzJdLmkyY19hZGFwLAorCQkJCSJjeDI1ODQwIiwgImN4MjU4NDAiLCAweDg4ID4+IDEpOworCQl2NGwyX3N1YmRldl9jYWxsKGRldi0+c2RfY3gyNTg0MCwgY29yZSwgaW5pdCwgMCk7CisJCWJyZWFrOworCX0KKworCS8qIEFVWC1QTEwgMjdNSHogQ0xLICovCisJc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJY2FzZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0k6CisJCW5ldHVwX2luaXRpYWxpemUoZGV2KTsKIAkJYnJlYWs7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jCmluZGV4IDhmNmZiMmEuLmRjN2ZmZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAogI2luY2x1ZGUgImN4MjM4ODUuaCIKKyNpbmNsdWRlICJjaW1heDIuaCIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIGN4MjM4ODUgYmFzZWQgVFYgY2FyZHMiKTsKIE1PRFVMRV9BVVRIT1IoIlN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4iKTsKQEAgLTc5MSw2ICs3OTIsOCBAQAogCWRldi0+cGNpX2J1cyAgPSBkZXYtPnBjaS0+YnVzLT5udW1iZXI7CiAJZGV2LT5wY2lfc2xvdCA9IFBDSV9TTE9UKGRldi0+cGNpLT5kZXZmbik7CiAJZGV2LT5wY2lfaXJxbWFzayA9IDB4MDAxZjAwOworCWlmIChjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5jaW1heCA+IDApCisJCWRldi0+cGNpX2lycW1hc2sgfD0gMHgwMTgwMDAwMDsgLyogZm9yIENpTWF4ZXMgKi8KIAogCS8qIEV4dGVybmFsIE1hc3RlciAxIEJ1cyAqLwogCWRldi0+aTJjX2J1c1swXS5uciA9IDA7CkBAIC04NzIsNyArODc1LDcgQEAKIAljeDIzODg1X2kyY19yZWdpc3RlcigmZGV2LT5pMmNfYnVzWzFdKTsKIAljeDIzODg1X2kyY19yZWdpc3RlcigmZGV2LT5pMmNfYnVzWzJdKTsKIAljeDIzODg1X2NhcmRfc2V0dXAoZGV2KTsKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1swXSwgVFVORVJfU0VUX1NUQU5EQlksIE5VTEwpOworCWNhbGxfYWxsKGRldiwgY29yZSwgc19zdGFuZGJ5LCAwKTsKIAljeDIzODg1X2lyX2luaXQoZGV2KTsKIAogCWlmIChjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0YSA9PSBDWDIzODg1X0FOQUxPR19WSURFTykgewpAQCAtMTY0Myw3ICsxNjQ2LDkgQEAKIAkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1ZJRF9CKSB8fAogCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfVklEX0EpIHx8CiAJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19BVURfSU5UKSB8fAotCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVVEX0VYVCkpIHsKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FVRF9FWFQpIHx8CisJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19HUElPMCkgfHwKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0dQSU8xKSkgewogCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19SSVNDX1JEKQogCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX1JJU0NfUkQgICAweCUwOHgpXG4iLApAQCAtMTY4NSw4ICsxNjkwLDIwIEBACiAJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQVVEX0VYVCAgIDB4JTA4eClcbiIsCiAJCQkJUENJX01TS19BVURfRVhUKTsKIAorCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfR1BJTzApCisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfR1BJTzAgICAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19HUElPMCk7CisKKwkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0dQSU8xKQorCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0dQSU8xICAgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfR1BJTzEpOwogCX0KIAorCWlmIChjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5jaW1heCA+IDAgJiYKKwkJKChwY2lfc3RhdHVzICYgUENJX01TS19HUElPMCkgfHwgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0dQSU8xKSkpCisJCS8qIGhhbmRsZWQgKz0gY3gyMzg4NV9pcnFfZ3BpbyhkZXYsIHBjaV9zdGF0dXMpOyAqLworCQloYW5kbGVkICs9IG5ldHVwX2NpX3Nsb3Rfc3RhdHVzKGRldiwgcGNpX3N0YXR1cyk7CisKIAlpZiAodHMxX3N0YXR1cykgewogCQlpZiAoY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ucG9ydGIgPT0gQ1gyMzg4NV9NUEVHX0RWQikKIAkJCWhhbmRsZWQgKz0gY3gyMzg4NV9pcnFfdHModHMxLCB0czFfc3RhdHVzKTsKQEAgLTE3MjIsMTYgKzE3MzksMjAgQEAKIAlpZiAoTlVMTCA9PSBkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCisJZXJyID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnBjaV9kZXYtPmRldiwgJmRldi0+djRsMl9kZXYpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZhaWxfZnJlZTsKKwogCS8qIHBjaSBpbml0ICovCiAJZGV2LT5wY2kgPSBwY2lfZGV2OwogCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2lfZGV2KSkgewogCQllcnIgPSAtRUlPOwotCQlnb3RvIGZhaWxfZnJlZTsKKwkJZ290byBmYWlsX3VucmVnOwogCX0KIAogCWlmIChjeDIzODg1X2Rldl9zZXR1cChkZXYpIDwgMCkgewogCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGZhaWxfZnJlZTsKKwkJZ290byBmYWlsX3VucmVnOwogCX0KIAogCS8qIHByaW50IHBjaSBpbmZvICovCkBAIC0xNzU4LDExICsxNzc5LDE4IEBACiAJCWdvdG8gZmFpbF9pcnE7CiAJfQogCi0JcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIGRldik7CisJc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJY2FzZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0k6CisJCWN4X3NldChQQ0lfSU5UX01TSywgMHgwMTgwMDAwMCk7IC8qIGZvciBOZXRVUCAqLworCQlicmVhazsKKwl9CisKIAlyZXR1cm4gMDsKIAogZmFpbF9pcnE6CiAJY3gyMzg4NV9kZXZfdW5yZWdpc3RlcihkZXYpOworZmFpbF91bnJlZzoKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKIGZhaWxfZnJlZToKIAlrZnJlZShkZXYpOwogCXJldHVybiBlcnI7CkBAIC0xNzcwLDcgKzE3OTgsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgY3gyMzg4NV9maW5pZGV2KHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogewotCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSB0b19jeDIzODg1KHY0bDJfZGV2KTsKIAogCWN4MjM4ODVfc2h1dGRvd24oZGV2KTsKIApAQCAtMTc3OCwxMyArMTgwNywxMyBAQAogCiAJLyogdW5yZWdpc3RlciBzdHVmZiAqLwogCWZyZWVfaXJxKHBjaV9kZXYtPmlycSwgZGV2KTsKLQlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgTlVMTCk7CiAKIAltdXRleF9sb2NrKCZkZXZsaXN0KTsKIAlsaXN0X2RlbCgmZGV2LT5kZXZsaXN0KTsKIAltdXRleF91bmxvY2soJmRldmxpc3QpOwogCiAJY3gyMzg4NV9kZXZfdW5yZWdpc3RlcihkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOwogCWtmcmVlKGRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKaW5kZXggMWM0NTQxMi4uZDQzYzc0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJjeDIzODg1LmgiCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIAorI2luY2x1ZGUgImR2Yl9jYV9lbjUwMjIxLmgiCiAjaW5jbHVkZSAiczVoMTQwOS5oIgogI2luY2x1ZGUgInM1aDE0MTEuaCIKICNpbmNsdWRlICJtdDIxMzEuaCIKQEAgLTQzLDYgKzQ0LDEzIEBACiAjaW5jbHVkZSAiZGliNzAwMHAuaCIKICNpbmNsdWRlICJkaWJ4MDAwX2NvbW1vbi5oIgogI2luY2x1ZGUgInpsMTAzNTMuaCIKKyNpbmNsdWRlICJzdHYwOTAwLmgiCisjaW5jbHVkZSAic3R2NjExMC5oIgorI2luY2x1ZGUgImxuYmgyNC5oIgorI2luY2x1ZGUgImN4MjQxMTYuaCIKKyNpbmNsdWRlICJjaW1heDIuaCIKKyNpbmNsdWRlICJuZXR1cC1lZXByb20uaCIKKyNpbmNsdWRlICJuZXR1cC1pbml0LmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7CiAKQEAgLTMwOCwxMSArMzE2LDYzIEBACiAJLm5vX3R1bmVyICAgICAgPSAxLAogfTsKIAorc3RhdGljIHN0cnVjdCBzdHYwOTAwX2NvbmZpZyBuZXR1cF9zdHYwOTAwX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCisJLnh0YWwgPSAyNzAwMDAwMCwKKwkuY2xrbW9kZSA9IDMsLyogMC1DTEtJLCAyLVhUQUxJLCBlbHNlIEFVVE8gKi8KKwkuZGlzZXFjX21vZGUgPSAyLC8qIDIvMyBQV00gKi8KKwkucGF0aDFfbW9kZSA9IDIsLypTZXJpYWwgY29udGludWVzIGNsb2NrICovCisJLnBhdGgyX21vZGUgPSAyLC8qU2VyaWFsIGNvbnRpbnVlcyBjbG9jayAqLworCS50dW4xX21hZGRyZXNzID0gMCwvKiAweDYwICovCisJLnR1bjJfbWFkZHJlc3MgPSAzLC8qIDB4NjMgKi8KKwkudHVuMV9hZGMgPSAxLC8qIDEgVnBwICovCisJLnR1bjJfYWRjID0gMSwvKiAxIFZwcCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzdHY2MTEwX2NvbmZpZyBuZXR1cF9zdHY2MTEwX3R1bmVyY29uZmlnX2EgPSB7CisJLmkyY19hZGRyZXNzID0gMHg2MCwKKwkubWNsayA9IDI3MDAwMDAwLAorCS5pcV93aXJpbmcgPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBzdHY2MTEwX2NvbmZpZyBuZXR1cF9zdHY2MTEwX3R1bmVyY29uZmlnX2IgPSB7CisJLmkyY19hZGRyZXNzID0gMHg2MywKKwkubWNsayA9IDI3MDAwMDAwLAorCS5pcV93aXJpbmcgPSAxLAorfTsKKworc3RhdGljIGludCB0YnNfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3sKKwlzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQgPSBmZS0+ZHZiLT5wcml2OworCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gcG9ydC0+ZGV2OworCisJaWYgKHZvbHRhZ2UgPT0gU0VDX1ZPTFRBR0VfMTgpCisJCWN4X3dyaXRlKE1DNDE3X1JXRCwgMHgwMDAwMWUwMCk7LyogR1BJTy0xMyBoaWdoICovCisJZWxzZSBpZiAodm9sdGFnZSA9PSBTRUNfVk9MVEFHRV8xMykKKwkJY3hfd3JpdGUoTUM0MTdfUldELCAweDAwMDAxYTAwKTsvKiBHUElPLTEzIGxvdyAqLworCWVsc2UKKwkJY3hfd3JpdGUoTUM0MTdfUldELCAweDAwMDAxODAwKTsvKiBHUElPLTEyIGxvdyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGN4MjQxMTZfY29uZmlnIHRic19jeDI0MTE2X2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MDUsCit9OworCitzdGF0aWMgc3RydWN0IGN4MjQxMTZfY29uZmlnIHRldmlpX2N4MjQxMTZfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHg1NSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY3gyNDExNl9jb25maWcgZHZid29ybGRfY3gyNDExNl9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDA1LAorfTsKKwogc3RhdGljIGludCBkdmJfcmVnaXN0ZXIoc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0KQogewogCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gcG9ydC0+ZGV2OwogCXN0cnVjdCBjeDIzODg1X2kyYyAqaTJjX2J1cyA9IE5VTEw7CiAJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmUwOworCWludCByZXQ7CiAKIAkvKiBHZXQgdGhlIGZpcnN0IGZyb250ZW5kICovCiAJZmUwID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmcG9ydC0+ZnJvbnRlbmRzLCAxKTsKQEAgLTUyNiw2ICs1ODYsNzggQEAKIAkJCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnKGZlLCAmY3RsKTsKIAkJfQogCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfVEJTXzY5MjA6CisJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOworCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwKKwkJCSZ0YnNfY3gyNDExNl9jb25maWcsCisJCQkmaTJjX2J1cy0+aTJjX2FkYXApOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSB0YnNfc2V0X3ZvbHRhZ2U7CisKKwkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX1RFVklJX1M0NzA6CisJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzFdOworCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwKKwkJCSZ0ZXZpaV9jeDI0MTE2X2NvbmZpZywKKwkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKQorCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IHRic19zZXRfdm9sdGFnZTsKKworCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfRFZCV09STERfMjAwNToKKwkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMV07CisKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMTZfYXR0YWNoLAorCQkJJmR2YndvcmxkX2N4MjQxMTZfY29uZmlnLAorCQkJJmkyY19idXMtPmkyY19hZGFwKTsKKwkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0k6CisJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOworCQlzd2l0Y2ggKHBvcnQtPm5yKSB7CisJCS8qIHBvcnQgQiAqLworCQljYXNlIDE6CisJCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goc3R2MDkwMF9hdHRhY2gsCisJCQkJCQkJJm5ldHVwX3N0djA5MDBfY29uZmlnLAorCQkJCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCwgMCk7CisJCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJCWlmIChkdmJfYXR0YWNoKHN0djYxMTBfYXR0YWNoLAorCQkJCQkJZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJCQkmbmV0dXBfc3R2NjExMF90dW5lcmNvbmZpZ19hLAorCQkJCQkJJmkyY19idXMtPmkyY19hZGFwKSkgeworCQkJCQlpZiAoIWR2Yl9hdHRhY2gobG5iaDI0X2F0dGFjaCwKKwkJCQkJCQlmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkJCQkmaTJjX2J1cy0+aTJjX2FkYXAsCisJCQkJCQkJTE5CSDI0X1BDTCwgMCwgMHgwOSkpCisJCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJCQkiTm8gTE5CSDI0IGZvdW5kIVxuIik7CisKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJLyogcG9ydCBDICovCisJCWNhc2UgMjoKKwkJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzdHYwOTAwX2F0dGFjaCwKKwkJCQkJCQkmbmV0dXBfc3R2MDkwMF9jb25maWcsCisJCQkJCQkJJmkyY19idXMtPmkyY19hZGFwLCAxKTsKKwkJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQkJaWYgKGR2Yl9hdHRhY2goc3R2NjExMF9hdHRhY2gsCisJCQkJCQlmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkJCSZuZXR1cF9zdHY2MTEwX3R1bmVyY29uZmlnX2IsCisJCQkJCQkmaTJjX2J1cy0+aTJjX2FkYXApKSB7CisJCQkJCWlmICghZHZiX2F0dGFjaChsbmJoMjRfYXR0YWNoLAorCQkJCQkJCWZlMC0+ZHZiLmZyb250ZW5kLAorCQkJCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCwKKwkJCQkJCQlMTkJIMjRfUENMLCAwLCAweDBhKSkKKwkJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkJCSJObyBMTkJIMjQgZm91bmQhXG4iKTsKKworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBUaGUgZnJvbnRlbmQgb2YgeW91ciBEVkIvQVRTQyBjYXJkICIKIAkJCSIgaXNuJ3Qgc3VwcG9ydGVkIHlldFxuIiwKQEAgLTU0MSwxNSArNjczLDM5IEBACiAJZmUwLT5kdmIuZnJvbnRlbmQtPmNhbGxiYWNrID0gY3gyMzg4NV90dW5lcl9jYWxsYmFjazsKIAogCS8qIFB1dCB0aGUgYW5hbG9nIGRlY29kZXIgaW4gc3RhbmRieSB0byBrZWVwIGl0IHF1aWV0ICovCi0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKGkyY19idXMsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKKwljYWxsX2FsbChkZXYsIGNvcmUsIHNfc3RhbmRieSwgMCk7CiAKIAlpZiAoZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5hbmFsb2dfb3BzLnN0YW5kYnkpCiAJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuYW5hbG9nX29wcy5zdGFuZGJ5KGZlMC0+ZHZiLmZyb250ZW5kKTsKIAogCS8qIHJlZ2lzdGVyIGV2ZXJ5dGhpbmcgKi8KLQlyZXR1cm4gdmlkZW9idWZfZHZiX3JlZ2lzdGVyX2J1cygmcG9ydC0+ZnJvbnRlbmRzLCBUSElTX01PRFVMRSwgcG9ydCwKKwlyZXQgPSB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYnVzKCZwb3J0LT5mcm9udGVuZHMsIFRISVNfTU9EVUxFLCBwb3J0LAogCQkmZGV2LT5wY2ktPmRldiwgYWRhcHRlcl9uciwgMCk7CiAKKwkvKiBpbml0IENJICYgTUFDICovCisJc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJY2FzZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0k6IHsKKwkJc3RhdGljIHN0cnVjdCBuZXR1cF9jYXJkX2luZm8gY2luZm87CisKKwkJbmV0dXBfZ2V0X2NhcmRfaW5mbygmZGV2LT5pMmNfYnVzWzBdLmkyY19hZGFwLCAmY2luZm8pOworCQltZW1jcHkocG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIucHJvcG9zZWRfbWFjLAorCQkJCWNpbmZvLnBvcnRbcG9ydC0+bnIgLSAxXS5tYWMsIDYpOworCQlwcmludGsoS0VSTl9JTkZPICJOZXRVUCBEdWFsIERWQi1TMiBDSSBjYXJkIHBvcnQlZCBNQUM9IgorCQkJIiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYXG4iLAorCQkJcG9ydC0+bnIsCisJCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbMF0sCisJCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbMV0sCisJCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbMl0sCisJCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbM10sCisJCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbNF0sCisJCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbNV0pOworCisJCW5ldHVwX2NpX2luaXQocG9ydCk7CisJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogaW50IGN4MjM4ODVfZHZiX3JlZ2lzdGVyKHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCkKQEAgLTYyMiw2ICs3NzgsMTIgQEAKIAlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpCiAJCXZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyX2J1cygmcG9ydC0+ZnJvbnRlbmRzKTsKIAorCXN3aXRjaCAocG9ydC0+ZGV2LT5ib2FyZCkgeworCWNhc2UgQ1gyMzg4NV9CT0FSRF9ORVRVUF9EVUFMX0RWQlMyX0NJOgorCQluZXR1cF9jaV9leGl0KHBvcnQpOworCQlicmVhazsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pMmMuYwppbmRleCBiYjdmNzFhLi4zNDIxYmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pMmMuYwpAQCAtMjY4LDY0ICsyNjgsNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBjeDIzODg1X2kyYyAqYnVzID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gYnVzLT5kZXY7Ci0Jc3RydWN0IHR1bmVyX3NldHVwIHR1bl9zZXR1cDsKLQotCWRwcmludGsoMSwgIiVzIGkyYyBhdHRhY2ggW2FkZHI9MHgleCxjbGllbnQ9JXNdXG4iLAotCQljbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIGNsaWVudC0+YWRkciwgY2xpZW50LT5uYW1lKTsKLQotCWlmICghY2xpZW50LT5kcml2ZXItPmNvbW1hbmQpCi0JCXJldHVybiAwOwotCi0JaWYgKGRldi0+dHVuZXJfdHlwZSAhPSBVTlNFVCkgewotCi0JCWRwcmludGsoMSwgIiVzICAodHVuZXIpIGkyYyBhdHRhY2ggW2FkZHI9MHgleCxjbGllbnQ9JXNdXG4iLAotCQkJY2xpZW50LT5kcml2ZXItPmRyaXZlci5uYW1lLCBjbGllbnQtPmFkZHIsCi0JCQljbGllbnQtPm5hbWUpOwotCi0JCWlmICgoZGV2LT50dW5lcl9hZGRyID09IEFERFJfVU5TRVQpIHx8Ci0JCQkoZGV2LT50dW5lcl9hZGRyID09IGNsaWVudC0+YWRkcikpIHsKLQotCQkJZHByaW50aygxLCAiJXMgKHR1bmVyIHx8IGFkZHIgVU5TRVQpXG4iLAotCQkJCWNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSk7Ci0KLQkJCWRwcmludGsoMSwgIiVzIGkyYyBhdHRhY2ggW2FkZHI9MHgleCxjbGllbnQ9JXNdXG4iLAotCQkJCWNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwKLQkJCQljbGllbnQtPmFkZHIsIGNsaWVudC0+bmFtZSk7Ci0KLQkJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UVjsKLQkJCXR1bl9zZXR1cC50eXBlID0gZGV2LT50dW5lcl90eXBlOwotCQkJdHVuX3NldHVwLmFkZHIgPSBkZXYtPnR1bmVyX2FkZHI7Ci0KLQkJCWNsaWVudC0+ZHJpdmVyLT5jb21tYW5kKGNsaWVudCwgVFVORVJfU0VUX1RZUEVfQUREUiwKLQkJCQkmdHVuX3NldHVwKTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRldGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQotCWRwcmludGsoMSwgImkyYyBkZXRhY2ggW2NsaWVudD0lc11cbiIsIGNsaWVudC0+bmFtZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBjeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGN4MjM4ODVfaTJjICpidXMsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JaWYgKGJ1cy0+aTJjX3JjICE9IDApCi0JCXJldHVybjsKLQotCWkyY19jbGllbnRzX2NvbW1hbmQoJmJ1cy0+aTJjX2FkYXAsIGNtZCwgYXJnKTsKLX0KLQogc3RhdGljIHUzMiBjeDIzODg1X2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQogewogCXJldHVybiBJMkNfRlVOQ19TTUJVU19FTVVMIHwgSTJDX0ZVTkNfSTJDOwpAQCAtMzQzLDkgKzI4NSw2IEBACiAJLm93bmVyICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCiAJLmlkICAgICAgICAgICAgICAgID0gSTJDX0hXX0JfQ1gyMzg4NSwKIAkuYWxnbyAgICAgICAgICAgICAgPSAmY3gyMzg4NV9pMmNfYWxnb190ZW1wbGF0ZSwKLQkuY2xhc3MgICAgICAgICAgICAgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HLAotCS5jbGllbnRfcmVnaXN0ZXIgICA9IGF0dGFjaF9pbmZvcm0sCi0JLmNsaWVudF91bnJlZ2lzdGVyID0gZGV0YWNoX2luZm9ybSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjeDIzODg1X2kyY19jbGllbnRfdGVtcGxhdGUgPSB7CkBAIC00MDIsMTUgKzM0MSwxOCBAQAogCiAJYnVzLT5pMmNfYWxnby5kYXRhID0gYnVzOwogCWJ1cy0+aTJjX2FkYXAuYWxnb19kYXRhID0gYnVzOwotCWkyY19zZXRfYWRhcGRhdGEoJmJ1cy0+aTJjX2FkYXAsIGJ1cyk7CisJaTJjX3NldF9hZGFwZGF0YSgmYnVzLT5pMmNfYWRhcCwgJmRldi0+djRsMl9kZXYpOwogCWkyY19hZGRfYWRhcHRlcigmYnVzLT5pMmNfYWRhcCk7CiAKIAlidXMtPmkyY19jbGllbnQuYWRhcHRlciA9ICZidXMtPmkyY19hZGFwOwogCiAJaWYgKDAgPT0gYnVzLT5pMmNfcmMpIHsKIAkJZHByaW50aygxLCAiJXM6IGkyYyBidXMgJWQgcmVnaXN0ZXJlZFxuIiwgZGV2LT5uYW1lLCBidXMtPm5yKTsKLQkJaWYgKGkyY19zY2FuKQorCQlpZiAoaTJjX3NjYW4pIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzY2FuIGJ1cyAlZDpcbiIsCisJCQkJCWRldi0+bmFtZSwgYnVzLT5ucik7CiAJCQlkb19pMmNfc2NhbihkZXYtPm5hbWUsICZidXMtPmkyY19jbGllbnQpOworCQl9CiAJfSBlbHNlCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBpMmMgYnVzICVkIHJlZ2lzdGVyIEZBSUxFRFxuIiwKIAkJCWRldi0+bmFtZSwgYnVzLT5ucik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1yZWcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXJlZy5oCmluZGV4IDIwYjY4YTIuLmVhZmJlNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXJlZy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXJlZy5oCkBAIC0yMTIsNiArMjEyLDggQEAKIAogI2RlZmluZSBERVZfQ05UUkwyCTB4MDAwNDAwMDAKIAorI2RlZmluZSBQQ0lfTVNLX0dQSU8xICAgKDEgPDwgMjQpCisjZGVmaW5lIFBDSV9NU0tfR1BJTzAgICAoMSA8PCAyMykKICNkZWZpbmUgUENJX01TS19BUEJfRE1BICAgKDEgPDwgMTIpCiAjZGVmaW5lIFBDSV9NU0tfQUxfV1IgICAgICgxIDw8IDExKQogI2RlZmluZSBQQ0lfTVNLX0FMX1JEICAgICAoMSA8PCAxMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCmluZGV4IGVhYTExODkuLmYwYWM2MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYwpAQCAtMzUsMTEgKzM1LDYgQEAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotLyogSW5jbHVkZSBWNEwxIHNwZWNpZmljIGZ1bmN0aW9ucy4gU2hvdWxkIGJlIHJlbW92ZWQgc29vbiAqLwotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jZW5kaWYKLQogTU9EVUxFX0RFU0NSSVBUSU9OKCJ2NGwyIGRyaXZlciBtb2R1bGUgZm9yIGN4MjM4ODUgYmFzZWQgVFYgY2FyZHMiKTsKIE1PRFVMRV9BVVRIT1IoIlN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKQEAgLTI0NCw2ICsyMzksNyBAQAogfTsKIHN0YXRpYyBjb25zdCBpbnQgQ1gyMzg4NV9DVExTID0gQVJSQVlfU0laRShjeDIzODg1X2N0bHMpOwogCisvKiBNdXN0IGJlIHNvcnRlZCBmcm9tIGxvdyB0byBoaWdoIGNvbnRyb2wgSUQhICovCiBzdGF0aWMgY29uc3QgdTMyIGN4MjM4ODVfdXNlcl9jdHJsc1tdID0gewogCVY0TDJfQ0lEX1VTRVJfQ0xBU1MsCiAJVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTMwMywxMSArMjk5LDcgQEAKIAogCWRldi0+dHZub3JtID0gbm9ybTsKIAotCS8qIFRlbGwgdGhlIGFuYWxvZyB0dW5lci9kZW1vZHMgKi8KLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1sxXSwgVklESU9DX1NfU1RELCAmbm9ybSk7Ci0KLQkvKiBUZWxsIHRoZSBpbnRlcm5hbCBBL1YgZGVjb2RlciAqLwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzJdLCBWSURJT0NfU19TVEQsICZub3JtKTsKKwljYWxsX2FsbChkZXYsIHR1bmVyLCBzX3N0ZCwgbm9ybSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMyNCw4ICszMTYsOCBAQAogCWlmIChOVUxMID09IHZmZCkKIAkJcmV0dXJuIE5VTEw7CiAJKnZmZCA9ICp0ZW1wbGF0ZTsKLQl2ZmQtPm1pbm9yICAgPSAtMTsKLQl2ZmQtPnBhcmVudCAgPSAmcGNpLT5kZXY7CisJdmZkLT5taW5vciA9IC0xOworCXZmZC0+djRsMl9kZXYgPSAmZGV2LT52NGwyX2RldjsKIAl2ZmQtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKIAlzbnByaW50Zih2ZmQtPm5hbWUsIHNpemVvZih2ZmQtPm5hbWUpLCAiJXMgJXMgKCVzKSIsCiAJCSBkZXYtPm5hbWUsIHR5cGUsIGN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLm5hbWUpOwpAQCAtNDE0LDggKzQwNiw3IEBACiAJcm91dGUuaW5wdXQgPSBJTlBVVChpbnB1dCktPnZtdXg7CiAKIAkvKiBUZWxsIHRoZSBpbnRlcm5hbCBBL1YgZGVjb2RlciAqLwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzJdLAotCQlWSURJT0NfSU5UX1NfVklERU9fUk9VVElORywgJnJvdXRlKTsKKwl2NGwyX3N1YmRldl9jYWxsKGRldi0+c2RfY3gyNTg0MCwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAogCXJldHVybiAwOwogfQpAQCAtODkxLDcgKzg4Miw3IEBACiAJc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQogewogCWRwcmludGsoMSwgIiVzKCkgY2FsbGluZyBjeDI1ODQwKFZJRElPQ19HX0NUUkwpXG4iLCBfX2Z1bmNfXyk7Ci0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMl0sIFZJRElPQ19HX0NUUkwsIGN0bCk7CisJY2FsbF9hbGwoZGV2LCBjb3JlLCBnX2N0cmwsIGN0bCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMDUsNyArOTk2LDcgQEAKIAlmaC0+dmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CiAJZHByaW50aygyLCAiJXMoKSB3aWR0aD0lZCBoZWlnaHQ9JWQgZmllbGQ9JWRcbiIsIF9fZnVuY19fLAogCQlmaC0+d2lkdGgsIGZoLT5oZWlnaHQsIGZoLT52aWRxLmZpZWxkKTsKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX1NfRk1ULCBmKTsKKwljYWxsX2FsbChkZXYsIHZpZGVvLCBzX2ZtdCwgZik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyODUsNyArMTI3Niw3IEBACiAJZi0+dHlwZSA9IGZoLT5yYWRpbyA/IFY0TDJfVFVORVJfUkFESU8gOiBWNEwyX1RVTkVSX0FOQUxPR19UVjsKIAlmLT5mcmVxdWVuY3kgPSBkZXYtPmZyZXE7CiAKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1sxXSwgVklESU9DX0dfRlJFUVVFTkNZLCBmKTsKKwljYWxsX2FsbChkZXYsIHR1bmVyLCBnX2ZyZXF1ZW5jeSwgZik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMDAsNyArMTI5MSw3IEBACiAJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAlkZXYtPmZyZXEgPSBmLT5mcmVxdWVuY3k7CiAKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1sxXSwgVklESU9DX1NfRlJFUVVFTkNZLCBmKTsKKwljYWxsX2FsbChkZXYsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgZik7CiAKIAkvKiBXaGVuIGNoYW5naW5nIGNoYW5uZWxzIGl0IGlzIHJlcXVpcmVkIHRvIHJlc2V0IFRWQVVESU8gKi8KIAltc2xlZXAoMTApOwpAQCAtMTMzNCw3ICsxMzI1LDcgQEAKIAlpZiAoIXY0bDJfY2hpcF9tYXRjaF9ob3N0KCZyZWctPm1hdGNoKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX0RCR19HX1JFR0lTVEVSLCByZWcpOworCWNhbGxfYWxsKGRldiwgY29yZSwgZ19yZWdpc3RlciwgcmVnKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM0Nyw3ICsxMzM4LDcgQEAKIAlpZiAoIXY0bDJfY2hpcF9tYXRjaF9ob3N0KCZyZWctPm1hdGNoKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX0RCR19TX1JFR0lTVEVSLCByZWcpOworCWNhbGxfYWxsKGRldiwgY29yZSwgc19yZWdpc3RlciwgcmVnKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTUyOCw2ICsxNTE5LDI2IEBACiAJLyogRG9uJ3QgZW5hYmxlIFZCSSB5ZXQgKi8KIAljeF9zZXQoUENJX0lOVF9NU0ssIDEpOwogCisJaWYgKFRVTkVSX0FCU0VOVCAhPSBkZXYtPnR1bmVyX3R5cGUpIHsKKwkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IE5VTEw7CisKKwkJaWYgKGRldi0+dHVuZXJfYWRkcikKKwkJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT5pMmNfYnVzWzFdLmkyY19hZGFwLAorCQkJCSJ0dW5lciIsICJ0dW5lciIsIGRldi0+dHVuZXJfYWRkcik7CisJCWVsc2UKKwkJCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwKKwkJCQkidHVuZXIiLCAidHVuZXIiLCB2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19UVikpOworCQlpZiAoc2QpIHsKKwkJCXN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXA7CisKKwkJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UVjsKKwkJCXR1bl9zZXR1cC50eXBlID0gZGV2LT50dW5lcl90eXBlOworCQkJdHVuX3NldHVwLmFkZHIgPSB2NGwyX2kyY19zdWJkZXZfYWRkcihzZCk7CisKKwkJCXY0bDJfc3ViZGV2X2NhbGwoc2QsIHR1bmVyLCBzX3R5cGVfYWRkciwgJnR1bl9zZXR1cCk7CisJCX0KKwl9CisKIAogCS8qIHJlZ2lzdGVyIHY0bCBkZXZpY2VzICovCiAJZGV2LT52aWRlb19kZXYgPSBjeDIzODg1X3ZkZXZfaW5pdChkZXYsIGRldi0+cGNpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKaW5kZXggNjc4MjgwMi4uMDJkOTgwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAKLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KICNpbmNsdWRlIDxtZWRpYS90dmVlcHJvbS5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oPgpAQCAtNjcsNiArNjcsMTAgQEAKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX0RVQUxfRVhQIDExCiAjZGVmaW5lIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IIDEyCiAjZGVmaW5lIENYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FNjUwRiAgIDEzCisjZGVmaW5lIENYMjM4ODVfQk9BUkRfVEJTXzY5MjAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIENYMjM4ODVfQk9BUkRfVEVWSUlfUzQ3MCAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIENYMjM4ODVfQk9BUkRfRFZCV09STERfMjAwNSAgICAgICAgICAgIDE2CisjZGVmaW5lIENYMjM4ODVfQk9BUkRfTkVUVVBfRFVBTF9EVkJTMl9DSSAgICAgIDE3CiAKIC8qIEN1cnJlbnRseSB1bnN1cHBvcnRlZCBieSB0aGUgZHJpdmVyOiBQQUwvSCwgTlRTQy9LciwgU0VDQU0gQi9HL0gvTEMgKi8KICNkZWZpbmUgQ1gyMzg4NV9OT1JNUyAoXApAQCAtMTg0LDYgKzE4OCw3IEBACiAJICovCiAJdTMyCQkJY2xrX2ZyZXE7CiAJc3RydWN0IGN4MjM4ODVfaW5wdXQgICAgaW5wdXRbTUFYX0NYMjM4ODVfSU5QVVRdOworCWludAkJCWNpbWF4OyAvKiBmb3IgTmV0VVAgKi8KIH07CiAKIHN0cnVjdCBjeDIzODg1X3N1YmlkIHsKQEAgLTI2NiwxMSArMjcxLDEzIEBACiAKIAkvKiBBbGxvdyBhIHNpbmdsZSB0c3BvcnQgdG8gaGF2ZSBtdWx0aXBsZSBmcm9udGVuZHMgKi8KIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICBudW1fZnJvbnRlbmRzOworCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICpwb3J0X3ByaXY7CiB9OwogCiBzdHJ1Y3QgY3gyMzg4NV9kZXYgewogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgIGRldmxpc3Q7CiAJYXRvbWljX3QgICAgICAgICAgICAgICAgICAgcmVmY291bnQ7CisJc3RydWN0IHY0bDJfZGV2aWNlIAkgICB2NGwyX2RldjsKIAogCS8qIHBjaSBzdHVmZiAqLwogCXN0cnVjdCBwY2lfZGV2ICAgICAgICAgICAgICpwY2k7CkBAIC0zMTYsNiArMzIzLDcgQEAKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICByYWRpb190eXBlOwogCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgIHJhZGlvX2FkZHI7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgaGFzX3JhZGlvOworCXN0cnVjdCB2NGwyX3N1YmRldiAJICAgKnNkX2N4MjU4NDA7CiAKIAkvKiBWNGwgKi8KIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICBmcmVxOwpAQCAtMzM2LDYgKzM0NCwxNCBAQAogCiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjeDIzODg1X2RldiAqdG9fY3gyMzg4NShzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBjeDIzODg1X2RldiwgdjRsMl9kZXYpOworfQorCisjZGVmaW5lIGNhbGxfYWxsKGRldiwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCBvLCBmLCAjI2FyZ3MpCisKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGN4MjM4ODVfZGV2bGlzdDsKIAogI2RlZmluZSBTUkFNX0NIMDEgIDAgLyogVmlkZW8gQSAqLwpAQCAtNDUyLDggKzQ2OCw2IEBACiAvKiBjeDIzODg1LWkyYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIGV4dGVybiBpbnQgY3gyMzg4NV9pMmNfcmVnaXN0ZXIoc3RydWN0IGN4MjM4ODVfaTJjICpidXMpOwogZXh0ZXJuIGludCBjeDIzODg1X2kyY191bnJlZ2lzdGVyKHN0cnVjdCBjeDIzODg1X2kyYyAqYnVzKTsKLWV4dGVybiB2b2lkIGN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgY3gyMzg4NV9pMmMgKmJ1cywgdW5zaWduZWQgaW50IGNtZCwKLQkJCQkgICAgIHZvaWQgKmFyZyk7CiBleHRlcm4gdm9pZCBjeDIzODg1X2F2X2NsayhzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgaW50IGVuYWJsZSk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtZWVwcm9tLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtZWVwcm9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyYmJiYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9uZXR1cC1lZXByb20uYwpAQCAtMCwwICsxLDEwNyBAQAorCisvKgorICogbmV0dXAtZWVwcm9tLmMKKyAqCisgKiAyNExDMDIgRUVQUk9NIGRyaXZlciBpbiBjb25qdW5jdGlvbiB3aXRoIE5ldFVQIER1YWwgRFZCLVMyIENJIGNhcmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFieWxheSBPc3BhbiA8YW9zcGFuQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjCisjaW5jbHVkZSAiY3gyMzg4NS5oIgorI2luY2x1ZGUgIm5ldHVwLWVlcHJvbS5oIgorCisjZGVmaW5lIEVFUFJPTV9JMkNfQUREUiAweDUwCisKK2ludCBuZXR1cF9lZXByb21fcmVhZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBhZGRyKQoreworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBidWZbMl07CisKKwkvKiBSZWFkIGZyb20gRUVQUk9NICovCisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CisJCXsKKwkJCS5hZGRyCT0gRUVQUk9NX0kyQ19BRERSLAorCQkJLmZsYWdzCT0gMCwKKwkJCS5idWYJPSAmYnVmWzBdLAorCQkJLmxlbgk9IDEKKwkJfSwgeworCQkJLmFkZHIJPSBFRVBST01fSTJDX0FERFIsCisJCQkuZmxhZ3MJPSBJMkNfTV9SRCwKKwkJCS5idWYJPSAmYnVmWzFdLAorCQkJLmxlbgk9IDEKKwkJfQorCisJfTsKKworCWJ1ZlswXSA9IGFkZHI7CisJYnVmWzFdID0gMHgwOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKGkyY19hZGFwLCBtc2csIDIpOworCisJaWYgKHJldCAhPSAyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZWVwcm9tIGkyYyByZWFkIGVycm9yLCBzdGF0dXM9JWRcbiIsIHJldCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gYnVmWzFdOworfTsKKworaW50IG5ldHVwX2VlcHJvbV93cml0ZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBhZGRyLCB1OCBkYXRhKQoreworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBidWZ3WzJdOworCisJLyogV3JpdGUgaW50byBFRVBST00gKi8KKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeworCQkJLmFkZHIJPSBFRVBST01fSTJDX0FERFIsCisJCQkuZmxhZ3MJPSAwLAorCQkJLmJ1Zgk9ICZidWZ3WzBdLAorCQkJLmxlbgk9IDIKKwkJfQorCX07CisKKwlidWZ3WzBdID0gYWRkcjsKKwlidWZ3WzFdID0gZGF0YTsKKworCXJldCA9IGkyY190cmFuc2ZlcihpMmNfYWRhcCwgbXNnLCAxKTsKKworCWlmIChyZXQgIT0gMSkgeworCQlwcmludGsoS0VSTl9FUlIgImVlcHJvbSBpMmMgd3JpdGUgZXJyb3IsIHN0YXR1cz0lZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1kZWxheSgxMCk7IC8qIHByb3BoeWxhY3RpYyBkZWxheSwgZGF0YXNoZWV0IHdyaXRlIGN5Y2xlIHRpbWUgPSA1IG1zICovCisJcmV0dXJuIDA7Cit9OworCit2b2lkIG5ldHVwX2dldF9jYXJkX2luZm8oc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCQlzdHJ1Y3QgbmV0dXBfY2FyZF9pbmZvICpjaW5mbykKK3sKKwlpbnQgaSwgajsKKworCWNpbmZvLT5yZXYgPSAgbmV0dXBfZWVwcm9tX3JlYWQoaTJjX2FkYXAsIDEzKTsKKworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgNjsgaSsrLCBqKyspCisJCWNpbmZvLT5wb3J0WzBdLm1hY1tqXSA9ICBuZXR1cF9lZXByb21fcmVhZChpMmNfYWRhcCwgaSk7CisKKwlmb3IgKGkgPSA2LCBqID0gMDsgaSA8IDEyOyBpKyssIGorKykKKwkJY2luZm8tPnBvcnRbMV0ubWFjW2pdID0gIG5ldHVwX2VlcHJvbV9yZWFkKGkyY19hZGFwLCBpKTsKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtZWVwcm9tLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtZWVwcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM5MjZlMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9uZXR1cC1lZXByb20uaApAQCAtMCwwICsxLDQyIEBACisvKgorICogbmV0dXAtZWVwcm9tLmgKKyAqCisgKiAyNExDMDIgRUVQUk9NIGRyaXZlciBpbiBjb25qdW5jdGlvbiB3aXRoIE5ldFVQIER1YWwgRFZCLVMyIENJIGNhcmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFieWxheSBPc3BhbiA8YW9zcGFuQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIE5FVFVQX0VFUFJPTV9ICisjZGVmaW5lIE5FVFVQX0VFUFJPTV9ICisKK3N0cnVjdCBuZXR1cF9wb3J0X2luZm8geworCXU4IG1hY1s2XTsvKiBjYXJkIE1BQyBhZGRyZXNzICovCit9OworCitzdHJ1Y3QgbmV0dXBfY2FyZF9pbmZvIHsKKwlzdHJ1Y3QgbmV0dXBfcG9ydF9pbmZvIHBvcnRbMl07LyogcG9ydHMgLSAxLDIgKi8KKwl1OCByZXY7LyogY2FyZCByZXZpc2lvbiAqLworfTsKKworZXh0ZXJuIGludCBuZXR1cF9lZXByb21fcmVhZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBhZGRyKTsKK2V4dGVybiBpbnQgbmV0dXBfZWVwcm9tX3dyaXRlKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGFkZHIsIHU4IGRhdGEpOworZXh0ZXJuIHZvaWQgbmV0dXBfZ2V0X2NhcmRfaW5mbyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQkJCXN0cnVjdCBuZXR1cF9jYXJkX2luZm8gKmNpbmZvKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtaW5pdC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L25ldHVwLWluaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDg5M2U2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L25ldHVwLWluaXQuYwpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIG5ldHVwLWluaXQuYworICoKKyAqIE5ldFVQIER1YWwgRFZCLVMyIENJIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZXRVUCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBBYnlsYXkgT3NwYW4gPGFvc3BhbkBuZXR1cC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImN4MjM4ODUuaCIKKworc3RhdGljIHZvaWQgaTJjX2F2X3dyaXRlKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1MTYgcmVnLCB1OCB2YWwpCit7CisJaW50IHJldDsKKwl1OCBidWZbM107CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkcgk9IDB4ODggPj4gMSwKKwkJLmZsYWdzCT0gMCwKKwkJLmJ1Zgk9IGJ1ZiwKKwkJLmxlbgk9IDMKKwl9OworCisJYnVmWzBdID0gcmVnID4+IDg7CisJYnVmWzFdID0gcmVnICYgMHhmZjsKKwlidWZbMl0gPSB2YWw7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLCAmbXNnLCAxKTsKKworCWlmIChyZXQgIT0gMSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaTJjIHdyaXRlIGVycm9yIVxuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgdm9pZCBpMmNfYXZfd3JpdGU0KHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1MTYgcmVnLCB1MzIgdmFsKQoreworCWludCByZXQ7CisJdTggYnVmWzZdOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIJPSAweDg4ID4+IDEsCisJCS5mbGFncwk9IDAsCisJCS5idWYJPSBidWYsCisJCS5sZW4JPSA2CisJfTsKKworCWJ1ZlswXSA9IHJlZyA+PiA4OworCWJ1ZlsxXSA9IHJlZyAmIDB4ZmY7CisJYnVmWzJdID0gdmFsICYgMHhmZjsKKwlidWZbM10gPSAodmFsID4+IDgpICYgMHhmZjsKKwlidWZbNF0gPSAodmFsID4+IDE2KSAmIDB4ZmY7CisJYnVmWzVdID0gdmFsID4+IDI0OworCisJcmV0ID0gaTJjX3RyYW5zZmVyKGkyYywgJm1zZywgMSk7CisKKwlpZiAocmV0ICE9IDEpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGkyYyB3cml0ZSBlcnJvciFcbiIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIHU4IGkyY19hdl9yZWFkKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1MTYgcmVnKQoreworCWludCByZXQ7CisJdTggYnVmWzJdOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIJPSAweDg4ID4+IDEsCisJCS5mbGFncwk9IDAsCisJCS5idWYJPSBidWYsCisJCS5sZW4JPSAyCisJfTsKKworCWJ1ZlswXSA9IHJlZyA+PiA4OworCWJ1ZlsxXSA9IHJlZyAmIDB4ZmY7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLCAmbXNnLCAxKTsKKworCWlmIChyZXQgIT0gMSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaTJjIHdyaXRlIGVycm9yIVxuIiwgX19mdW5jX18pOworCisJbXNnLmZsYWdzID0gSTJDX01fUkQ7CisJbXNnLmxlbiA9IDE7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLCAmbXNnLCAxKTsKKworCWlmIChyZXQgIT0gMSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaTJjIHJlYWQgZXJyb3IhXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gYnVmWzBdOworfQorCitzdGF0aWMgdm9pZCBpMmNfYXZfYW5kX29yKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1MTYgcmVnLCB1bnNpZ25lZCBhbmRfbWFzaywKKwkJCQkJCQkJdTggb3JfdmFsdWUpCit7CisJaTJjX2F2X3dyaXRlKGkyYywgcmVnLCAoaTJjX2F2X3JlYWQoaTJjLCByZWcpICYgYW5kX21hc2spIHwgb3JfdmFsdWUpOworfQorLyogc2V0IDI3TUh6IG9uIEFVWF9DTEsgKi8KK3ZvaWQgbmV0dXBfaW5pdGlhbGl6ZShzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgY3gyMzg4NV9pMmMgKmkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzJdOworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjID0gJmkyY19idXMtPmkyY19hZGFwOworCisJLyogU3RvcCBtaWNyb2NvbnRyb2xsZXIgKi8KKwlpMmNfYXZfYW5kX29yKGkyYywgMHg4MDMsIH4weDEwLCAweDAwKTsKKworCS8qIEF1eCBQTEwgZnJhYyBmb3IgMjcgTUh6ICovCisJaTJjX2F2X3dyaXRlNChpMmMsIDB4MTE0LCAweGVhMGViMyk7CisKKwkvKiBBdXggUExMIGludCBmb3IgMjcgTUh6ICovCisJaTJjX2F2X3dyaXRlNChpMmMsIDB4MTEwLCAweDA5MDMxOSk7CisKKwkvKiBzdGFydCBtaWNyb2NvbnRyb2xsZXIgKi8KKwlpMmNfYXZfYW5kX29yKGkyYywgMHg4MDMsIH4weDEwLCAweDEwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9uZXR1cC1pbml0LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtaW5pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNmFlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtaW5pdC5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBuZXR1cC1pbml0LmgKKyAqCisgKiBOZXRVUCBEdWFsIERWQi1TMiBDSSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbmV0dXAucnU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWJ5bGF5IE9zcGFuIDxhb3NwYW5AbmV0dXAucnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCitleHRlcm4gdm9pZCBuZXR1cF9pbml0aWFsaXplKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1hdWRpby5jCmluZGV4IGQxOTlkODAuLjkzZDc0YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtYXVkaW8uYwpAQCAtMzYzLDc1ICszNjMsNzQgQEAKIAl9CiB9CiAKLWludCBjeDI1ODQwX2F1ZGlvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK2ludCBjeDI1ODQwX3NfY2xvY2tfZnJlcShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgZnJlcSkKIHsKLQlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7Ci0Jc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCWludCByZXR2YWw7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVROgotCQlpZiAoIXN0YXRlLT5pc19jeDI1ODM2KQotCQkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgxMCwgfjB4MSwgMSk7Ci0JCWlmIChzdGF0ZS0+YXVkX2lucHV0ICE9IENYMjU4NDBfQVVESU9fU0VSSUFMKSB7Ci0JCQljeDI1ODQwX2FuZF9vcihjbGllbnQsIDB4ODAzLCB+MHgxMCwgMCk7Ci0JCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg4ZDMsIDB4MWYpOwotCQl9Ci0JCXJldHZhbCA9IHNldF9hdWRjbGtfZnJlcShjbGllbnQsICoodTMyICopYXJnKTsKLQkJaWYgKHN0YXRlLT5hdWRfaW5wdXQgIT0gQ1gyNTg0MF9BVURJT19TRVJJQUwpIHsKLQkJCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHg4MDMsIH4weDEwLCAweDEwKTsKLQkJfQotCQlpZiAoIXN0YXRlLT5pc19jeDI1ODM2KQotCQkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgxMCwgfjB4MSwgMCk7Ci0JCXJldHVybiByZXR2YWw7CisJaWYgKCFzdGF0ZS0+aXNfY3gyNTgzNikKKwkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgxMCwgfjB4MSwgMSk7CisJaWYgKHN0YXRlLT5hdWRfaW5wdXQgIT0gQ1gyNTg0MF9BVURJT19TRVJJQUwpIHsKKwkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgwMywgfjB4MTAsIDApOworCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg4ZDMsIDB4MWYpOworCX0KKwlyZXR2YWwgPSBzZXRfYXVkY2xrX2ZyZXEoY2xpZW50LCBmcmVxKTsKKwlpZiAoc3RhdGUtPmF1ZF9pbnB1dCAhPSBDWDI1ODQwX0FVRElPX1NFUklBTCkKKwkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgwMywgfjB4MTAsIDB4MTApOworCWlmICghc3RhdGUtPmlzX2N4MjU4MzYpCisJCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHg4MTAsIH4weDEsIDApOworCXJldHVybiByZXR2YWw7Cit9CiAKLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF92b2x1bWUoY2xpZW50KTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF9iYXNzKGNsaWVudCk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF90cmVibGUoY2xpZW50KTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF9iYWxhbmNlKGNsaWVudCk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQkJY3RybC0+dmFsdWUgPSBnZXRfbXV0ZShjbGllbnQpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQoraW50IGN4MjU4NDBfYXVkaW9fZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQljdHJsLT52YWx1ZSA9IGdldF92b2x1bWUoY2xpZW50KTsKIAkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCQlzZXRfdm9sdW1lKGNsaWVudCwgY3RybC0+dmFsdWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQkJCXNldF9iYXNzKGNsaWVudCwgY3RybC0+dmFsdWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQkJc2V0X3RyZWJsZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCQlzZXRfYmFsYW5jZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCQlzZXRfbXV0ZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CisJCWN0cmwtPnZhbHVlID0gZ2V0X2Jhc3MoY2xpZW50KTsKIAkJYnJlYWs7Ci0KKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwkJY3RybC0+dmFsdWUgPSBnZXRfdHJlYmxlKGNsaWVudCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKKwkJY3RybC0+dmFsdWUgPSBnZXRfYmFsYW5jZShjbGllbnQpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCWN0cmwtPnZhbHVlID0gZ2V0X211dGUoY2xpZW50KTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCXJldHVybiAwOworfQogCitpbnQgY3gyNTg0MF9hdWRpb19zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXNldF92b2x1bWUoY2xpZW50LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKKwkJc2V0X2Jhc3MoY2xpZW50LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgorCQlzZXRfdHJlYmxlKGNsaWVudCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJCXNldF9iYWxhbmNlKGNsaWVudCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXNldF9tdXRlKGNsaWVudCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKaW5kZXggMjVlYjNiZWMuLjczN2VlNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogI2luY2x1ZGUgPG1lZGlhL2N4MjU4NDAuaD4KIAogI2luY2x1ZGUgImN4MjU4NDAtY29yZS5oIgpAQCAtNDgsMTUgKzQ4LDEyIEBACiBNT0RVTEVfQVVUSE9SKCJVbGYgRWtsdW5kLCBDaHJpcyBLZW5uZWR5LCBIYW5zIFZlcmt1aWwsIFR5bGVyIFRyYWZmb3JkIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4ODggPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKLQogc3RhdGljIGludCBjeDI1ODQwX2RlYnVnOwogCiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsY3gyNTg0MF9kZWJ1ZywgaW50LCAwNjQ0KTsKIAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnZ2luZyBtZXNzYWdlcyBbMD1PZmYgKGRlZmF1bHQpIDE9T25dIik7CiAKLUkyQ19DTElFTlRfSU5TTU9EOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC03NjMsNyArNzYwLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX0hVRToKLQkJaWYgKGN0cmwtPnZhbHVlIDwgLTEyNyB8fCBjdHJsLT52YWx1ZSA+IDEyNykgeworCQlpZiAoY3RybC0+dmFsdWUgPCAtMTI4IHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7CiAJCQl2NGxfZXJyKGNsaWVudCwgImludmFsaWQgaHVlIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CkBAIC03NzgsNyArNzc1LDcgQEAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWlmIChzdGF0ZS0+aXNfY3gyNTgzNikKIAkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gY3gyNTg0MF9hdWRpbyhjbGllbnQsIFZJRElPQ19TX0NUUkwsIGN0cmwpOworCQlyZXR1cm4gY3gyNTg0MF9hdWRpb19zX2N0cmwoc2QsIGN0cmwpOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC04MTUsNyArODEyLDcgQEAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWlmIChzdGF0ZS0+aXNfY3gyNTgzNikKIAkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gY3gyNTg0MF9hdWRpbyhjbGllbnQsIFZJRElPQ19HX0NUUkwsIGN0cmwpOworCQlyZXR1cm4gY3gyNTg0MF9hdWRpb19nX2N0cmwoc2QsIGN0cmwpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTgyNywxMSArODI0LDkgQEAKIAogc3RhdGljIGludCBjeDI1ODQwX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQogCXN3aXRjaCAoZm10LT50eXBlKSB7CiAJY2FzZSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRToKLQkJcmV0dXJuIGN4MjU4NDBfdmJpKGNsaWVudCwgVklESU9DX0dfRk1ULCBmbXQpOworCQlyZXR1cm4gY3gyNTg0MF92YmlfZ19mbXQoc2QsIGZtdCk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtODkzLDEwICs4ODgsMTAgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFOgotCQlyZXR1cm4gY3gyNTg0MF92YmkoY2xpZW50LCBWSURJT0NfU19GTVQsIGZtdCk7CisJCXJldHVybiBjeDI1ODQwX3ZiaV9zX2ZtdChzZCwgZm10KTsKIAogCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRToKLQkJcmV0dXJuIGN4MjU4NDBfdmJpKGNsaWVudCwgVklESU9DX1NfRk1ULCBmbXQpOworCQlyZXR1cm4gY3gyNTg0MF92Ymlfc19mbXQoc2QsIGZtdCk7CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExMDEsNiArMTA5NiwxNiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisvKiBUaGlzIGluaXQgb3BlcmF0aW9uIG11c3QgYmUgY2FsbGVkIHRvIGxvYWQgdGhlIGRyaXZlcidzIGZpcm13YXJlLgorICAgV2l0aG91dCB0aGlzIHRoZSBhdWRpbyBzdGFuZGFyZCBkZXRlY3Rpb24gd2lsbCBmYWlsIGFuZCB5b3Ugd2lsbAorICAgb25seSBnZXQgbW9uby4KKworICAgU2luY2UgbG9hZGluZyB0aGUgZmlybXdhcmUgaXMgb2Z0ZW4gcHJvYmxlbWF0aWMgd2hlbiB0aGUgZHJpdmVyIGlzCisgICBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgSSByZWNvbW1lbmQgcG9zdHBvbmluZyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAgIHVudGlsIHRoZSBmaXJzdCBvcGVuIG9mIHRoZSB2aWRlbyBkZXZpY2UuIEFub3RoZXIgcmVhc29uIGZvcgorICAgcG9zdHBvbmluZyBpdCBpcyB0aGF0IGxvYWRpbmcgdGhpcyBmaXJtd2FyZSB0YWtlcyBhIGxvbmcgdGltZSAoc2Vjb25kcykKKyAgIGR1ZSB0byB0aGUgc2xvdyBpMmMgYnVzIHNwZWVkLiBTbyBpdCB3aWxsIHNwZWVkIHVwIHRoZSBib290IHByb2Nlc3MgaWYKKyAgIHlvdSBjYW4gYXZvaWQgbG9hZGluZyB0aGUgZncgYXMgbG9uZyBhcyB0aGUgdmlkZW8gZGV2aWNlIGlzbid0IHVzZWQuICAqLwogc3RhdGljIGludCBjeDI1ODQwX2luaXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCkKIHsKIAlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CkBAIC0xMTQ2LDIwICsxMTUxLDYgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IGN4MjU4NDBfZGVjb2RlX3ZiaV9saW5lKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RlY29kZV92YmlfbGluZSAqdmJpKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQotCXJldHVybiBjeDI1ODQwX3ZiaShjbGllbnQsIFZJRElPQ19JTlRfREVDT0RFX1ZCSV9MSU5FLCB2YmkpOwotfQotCi1zdGF0aWMgaW50IGN4MjU4NDBfc19jbG9ja19mcmVxKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBmcmVxKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQotCXJldHVybiBjeDI1ODQwX2F1ZGlvKGNsaWVudCwgVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVRLCAmZnJlcSk7Ci19Ci0KIHN0YXRpYyBpbnQgY3gyNTg0MF9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQogewogCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKQEAgLTExOTUsMTAgKzExODYsMTIgQEAKIAogCXN3aXRjaCAocWMtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDI1NSwgMSwgMTI4KTsKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxMjcsIDEsIDY0KTsKIAljYXNlIFY0TDJfQ0lEX0hVRToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxYyk7CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgLTEyOCwgMTI3LCAxLCAwKTsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC0xMjEwLDEwICsxMjAzLDExIEBACiAJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsCiAJCQkJNjU1MzUgLyAxMDAsIHN0YXRlLT5kZWZhdWx0X3ZvbHVtZSk7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDApOwogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWMpOworCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgMzI3NjgpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTEzODAsMTkgKzEzNzQsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjU4NDBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQkvKiBpZ25vcmUgdGhpcyBjb21tYW5kICovCi0JaWYgKGNtZCA9PSBUVU5FUl9TRVRfVFlQRV9BRERSIHx8IGNtZCA9PSBUVU5FUl9TRVRfQ09ORklHKQotCQlyZXR1cm4gMDsKLQotCS8qIE9sZC1zdHlsZSBkcml2ZXJzIHJlbHkgb24gaW5pdGlhbGl6YXRpb24gb24gZmlyc3QgdXNlLCBzbwotCSAgIGNhbGwgdGhlIGluaXQgd2hlbmV2ZXIgYSBjb21tYW5kIGlzIGlzc3VlZCB0byB0aGlzIGRyaXZlci4KLQkgICBOZXctc3R5bGUgZHJpdmVycyB1c2luZyB2NGwyX3N1YmRldiBzaG91bGQgY2FsbCBpbml0IGV4cGxpY2l0bHkuICovCi0JY3gyNTg0MF9pbml0KGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCAwKTsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGN4MjU4NDBfY29yZV9vcHMgPSB7CkBAIC0xNTI4LDggKzE1MDksNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAiY3gyNTg0MCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0NYMjU4NDAsCi0JLmNvbW1hbmQgPSBjeDI1ODQwX2NvbW1hbmQsCiAJLnByb2JlID0gY3gyNTg0MF9wcm9iZSwKIAkucmVtb3ZlID0gY3gyNTg0MF9yZW1vdmUsCiAJLmlkX3RhYmxlID0gY3gyNTg0MF9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuaAppbmRleCBiZTA1NTgyLi45YWQwZWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5oCkBAIC03NSwxMSArNzUsMTUgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MjU4NTAtYXVkaW8uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi1pbnQgY3gyNTg0MF9hdWRpbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogdm9pZCBjeDI1ODQwX2F1ZGlvX3NldF9wYXRoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworaW50IGN4MjU4NDBfc19jbG9ja19mcmVxKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBmcmVxKTsKK2ludCBjeDI1ODQwX2F1ZGlvX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKTsKK2ludCBjeDI1ODQwX2F1ZGlvX3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MjU4NTAtdmJpLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi1pbnQgY3gyNTg0MF92Ymkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKK2ludCBjeDI1ODQwX3ZiaV9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCk7CitpbnQgY3gyNTg0MF92YmlfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpOworaW50IGN4MjU4NDBfZGVjb2RlX3ZiaV9saW5lKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RlY29kZV92YmlfbGluZSAqdmJpKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jCmluZGV4IDAzZjA5YjIuLjM1ZjY1OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jCkBAIC04MiwxOTkgKzgyLDE4MSBAQAogCXJldHVybiBlcnIgJiAweGYwOwogfQogCi1pbnQgY3gyNTg0MF92Ymkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoraW50IGN4MjU4NDBfdmJpX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewotCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKLQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICpzdmJpOworCXN0YXRpYyBjb25zdCB1MTYgbGNyMnZiaVtdID0geworCQkwLCBWNEwyX1NMSUNFRF9URUxFVEVYVF9CLCAwLAkvKiAxICovCisJCTAsIFY0TDJfU0xJQ0VEX1dTU182MjUsIDAsCS8qIDQgKi8KKwkJVjRMMl9TTElDRURfQ0FQVElPTl81MjUsCS8qIDYgKi8KKwkJMCwgMCwgVjRMMl9TTElDRURfVlBTLCAwLCAwLAkvKiA5ICovCisJCTAsIDAsIDAsIDAKKwl9OworCWludCBpc19wYWwgPSAhKHN0YXRlLT5zdGQgJiBWNEwyX1NURF81MjVfNjApOworCWludCBpOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ19HX0ZNVDoKLQl7Ci0JCXN0YXRpYyB1MTYgbGNyMnZiaVtdID0gewotCQkJMCwgVjRMMl9TTElDRURfVEVMRVRFWFRfQiwgMCwJLyogMSAqLwotCQkJMCwgVjRMMl9TTElDRURfV1NTXzYyNSwgMCwJLyogNCAqLwotCQkJVjRMMl9TTElDRURfQ0FQVElPTl81MjUsCS8qIDYgKi8KLQkJCTAsIDAsIFY0TDJfU0xJQ0VEX1ZQUywgMCwgMCwJLyogOSAqLwotCQkJMCwgMCwgMCwgMAotCQl9OwotCQlpbnQgaXNfcGFsID0gIShzdGF0ZS0+c3RkICYgVjRMMl9TVERfNTI1XzYwKTsKLQkJaW50IGk7CisJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3ZiaSA9ICZmbXQtPmZtdC5zbGljZWQ7CisJbWVtc2V0KHN2YmksIDAsIHNpemVvZigqc3ZiaSkpOworCS8qIHdlJ3JlIGRvbmUgaWYgcmF3IFZCSSBpcyBhY3RpdmUgKi8KKwlpZiAoKGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDA0KSAmIDB4MTApID09IDApCisJCXJldHVybiAwOwogCi0JCWZtdCA9IGFyZzsKLQkJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlzdmJpID0gJmZtdC0+Zm10LnNsaWNlZDsKLQkJbWVtc2V0KHN2YmksIDAsIHNpemVvZigqc3ZiaSkpOwotCQkvKiB3ZSdyZSBkb25lIGlmIHJhdyBWQkkgaXMgYWN0aXZlICovCi0JCWlmICgoY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MDQpICYgMHgxMCkgPT0gMCkKLQkJCWJyZWFrOworCWlmIChpc19wYWwpIHsKKwkJZm9yIChpID0gNzsgaSA8PSAyMzsgaSsrKSB7CisJCQl1OCB2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MjQgKyBpIC0gNyk7CiAKLQkJaWYgKGlzX3BhbCkgewotCQkJZm9yIChpID0gNzsgaSA8PSAyMzsgaSsrKSB7Ci0JCQkJdTggdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDI0ICsgaSAtIDcpOwotCi0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9IGxjcjJ2YmlbdiA+PiA0XTsKLQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gbGNyMnZiaVt2ICYgMHhmXTsKLQkJCQlzdmJpLT5zZXJ2aWNlX3NldCB8PQotCQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldIHwgc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXTsKLQkJCX0KKwkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPSBsY3IydmJpW3YgPj4gNF07CisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gbGNyMnZiaVt2ICYgMHhmXTsKKwkJCXN2YmktPnNlcnZpY2Vfc2V0IHw9IHN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gfAorCQkJCQkgICAgIHN2YmktPnNlcnZpY2VfbGluZXNbMV1baV07CiAJCX0KLQkJZWxzZSB7Ci0JCQlmb3IgKGkgPSAxMDsgaSA8PSAyMTsgaSsrKSB7Ci0JCQkJdTggdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDI0ICsgaSAtIDEwKTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAxMDsgaSA8PSAyMTsgaSsrKSB7CisJCQl1OCB2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MjQgKyBpIC0gMTApOwogCi0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9IGxjcjJ2YmlbdiA+PiA0XTsKLQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gbGNyMnZiaVt2ICYgMHhmXTsKLQkJCQlzdmJpLT5zZXJ2aWNlX3NldCB8PQotCQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldIHwgc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXTsKLQkJCX0KKwkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPSBsY3IydmJpW3YgPj4gNF07CisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gbGNyMnZiaVt2ICYgMHhmXTsKKwkJCXN2YmktPnNlcnZpY2Vfc2V0IHw9IHN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gfAorCQkJCQkgICAgIHN2YmktPnNlcnZpY2VfbGluZXNbMV1baV07CiAJCX0KLQkJYnJlYWs7CiAJfQorCXJldHVybiAwOworfQogCi0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JewotCQlpbnQgaXNfcGFsID0gIShzdGF0ZS0+c3RkICYgVjRMMl9TVERfNTI1XzYwKTsKLQkJaW50IHZiaV9vZmZzZXQgPSBpc19wYWwgPyAxIDogMDsKLQkJaW50IGksIHg7Ci0JCXU4IGxjclsyNF07CitpbnQgY3gyNTg0MF92Ymlfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqc3ZiaTsKKwlpbnQgaXNfcGFsID0gIShzdGF0ZS0+c3RkICYgVjRMMl9TVERfNTI1XzYwKTsKKwlpbnQgdmJpX29mZnNldCA9IGlzX3BhbCA/IDEgOiAwOworCWludCBpLCB4OworCXU4IGxjclsyNF07CiAKLQkJZm10ID0gYXJnOwotCQlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICYmCi0JCSAgICBmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlzdmJpID0gJmZtdC0+Zm10LnNsaWNlZDsKLQkJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7Ci0JCQkvKiByYXcgVkJJICovCi0JCQltZW1zZXQoc3ZiaSwgMCwgc2l6ZW9mKCpzdmJpKSk7Ci0KLQkJCS8qIFNldHVwIHN0YW5kYXJkICovCi0JCQljeDI1ODQwX3N0ZF9zZXR1cChjbGllbnQpOwotCi0JCQkvKiBWQkkgT2Zmc2V0ICovCi0JCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0N2YsIHZiaV9vZmZzZXQpOwotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDA0LCAweDJlKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJZm9yICh4ID0gMDsgeCA8PSAyMzsgeCsrKQotCQkJbGNyW3hdID0gMHgwMDsKKwlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICYmCisJCQlmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3ZiaSA9ICZmbXQtPmZtdC5zbGljZWQ7CisJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7CisJCS8qIHJhdyBWQkkgKi8KKwkJbWVtc2V0KHN2YmksIDAsIHNpemVvZigqc3ZiaSkpOwogCiAJCS8qIFNldHVwIHN0YW5kYXJkICovCiAJCWN4MjU4NDBfc3RkX3NldHVwKGNsaWVudCk7CiAKLQkJLyogU2xpY2VkIFZCSSAqLwotCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0MDQsIDB4MzIpOwkvKiBBbmNpbGxhcnkgZGF0YSAqLwotCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0MDYsIDB4MTMpOworCQkvKiBWQkkgT2Zmc2V0ICovCiAJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3ZiwgdmJpX29mZnNldCk7Ci0KLQkJaWYgKGlzX3BhbCkgewotCQkJZm9yIChpID0gMDsgaSA8PSA2OyBpKyspCi0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9Ci0JCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV0gPSAwOwotCQl9IGVsc2UgewotCQkJZm9yIChpID0gMDsgaSA8PSA5OyBpKyspCi0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9Ci0JCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV0gPSAwOwotCi0JCQlmb3IgKGkgPSAyMjsgaSA8PSAyMzsgaSsrKQotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPQotCQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gMDsKLQkJfQotCi0JCWZvciAoaSA9IDc7IGkgPD0gMjM7IGkrKykgewotCQkJZm9yICh4ID0gMDsgeCA8PSAxOyB4KyspIHsKLQkJCQlzd2l0Y2ggKHN2YmktPnNlcnZpY2VfbGluZXNbMS14XVtpXSkgewotCQkJCWNhc2UgVjRMMl9TTElDRURfVEVMRVRFWFRfQjoKLQkJCQkJbGNyW2ldIHw9IDEgPDwgKDQgKiB4KTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBWNEwyX1NMSUNFRF9XU1NfNjI1OgotCQkJCQlsY3JbaV0gfD0gNCA8PCAoNCAqIHgpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OgotCQkJCQlsY3JbaV0gfD0gNiA8PCAoNCAqIHgpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFY0TDJfU0xJQ0VEX1ZQUzoKLQkJCQkJbGNyW2ldIHw9IDkgPDwgKDQgKiB4KTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJaWYgKGlzX3BhbCkgewotCQkJZm9yICh4ID0gMSwgaSA9IDB4NDI0OyBpIDw9IDB4NDM0OyBpKyssIHgrKykgewotCQkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCBpLCBsY3JbNiArIHhdKTsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCWZvciAoeCA9IDEsIGkgPSAweDQyNDsgaSA8PSAweDQzMDsgaSsrLCB4KyspIHsKLQkJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgaSwgbGNyWzkgKyB4XSk7Ci0JCQl9Ci0JCQlmb3IgKGkgPSAweDQzMTsgaSA8PSAweDQzNDsgaSsrKSB7Ci0JCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIGksIDApOwotCQkJfQotCQl9Ci0KLQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDNjLCAweDE2KTsKLQotCQlpZiAoaXNfcGFsKSB7Ci0JCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0NzQsIDB4MmEpOwotCQl9IGVsc2UgewotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDc0LCAweDIyKTsKLQkJfQotCQlicmVhazsKKwkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDA0LCAweDJlKTsKKwkJcmV0dXJuIDA7CiAJfQogCi0JY2FzZSBWSURJT0NfSU5UX0RFQ09ERV9WQklfTElORToKLQl7Ci0JCXN0cnVjdCB2NGwyX2RlY29kZV92YmlfbGluZSAqdmJpID0gYXJnOwotCQl1OCAqcCA9IHZiaS0+cDsKLQkJaW50IGlkMSwgaWQyLCBsLCBlcnIgPSAwOworCWZvciAoeCA9IDA7IHggPD0gMjM7IHgrKykKKwkJbGNyW3hdID0gMHgwMDsKIAotCQlpZiAocFswXSB8fCBwWzFdICE9IDB4ZmYgfHwgcFsyXSAhPSAweGZmIHx8Ci0JCSAgICAocFszXSAhPSAweDU1ICYmIHBbM10gIT0gMHg5MSkpIHsKLQkJCXZiaS0+bGluZSA9IHZiaS0+dHlwZSA9IDA7Ci0JCQlicmVhazsKLQkJfQorCS8qIFNldHVwIHN0YW5kYXJkICovCisJY3gyNTg0MF9zdGRfc2V0dXAoY2xpZW50KTsKIAotCQlwICs9IDQ7Ci0JCWlkMSA9IHBbLTFdOwotCQlpZDIgPSBwWzBdICYgMHhmOwotCQlsID0gcFsyXSAmIDB4M2Y7Ci0JCWwgKz0gc3RhdGUtPnZiaV9saW5lX29mZnNldDsKLQkJcCArPSA0OworCS8qIFNsaWNlZCBWQkkgKi8KKwljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0MDQsIDB4MzIpOwkvKiBBbmNpbGxhcnkgZGF0YSAqLworCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQwNiwgMHgxMyk7CisJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDdmLCB2Ymlfb2Zmc2V0KTsKIAotCQlzd2l0Y2ggKGlkMikgewotCQljYXNlIDE6Ci0JCQlpZDIgPSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COwotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCWlkMiA9IFY0TDJfU0xJQ0VEX1dTU182MjU7Ci0JCQlicmVhazsKLQkJY2FzZSA2OgotCQkJaWQyID0gVjRMMl9TTElDRURfQ0FQVElPTl81MjU7Ci0JCQllcnIgPSAhb2RkX3Bhcml0eShwWzBdKSB8fCAhb2RkX3Bhcml0eShwWzFdKTsKLQkJCWJyZWFrOwotCQljYXNlIDk6Ci0JCQlpZDIgPSBWNEwyX1NMSUNFRF9WUFM7Ci0JCQlpZiAoZGVjb2RlX3ZwcyhwLCBwKSAhPSAwKSB7Ci0JCQkJZXJyID0gMTsKKwlpZiAoaXNfcGFsKSB7CisJCWZvciAoaSA9IDA7IGkgPD0gNjsgaSsrKQorCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9CisJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IDA7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8PSA5OyBpKyspCisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldID0KKwkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gMDsKKworCQlmb3IgKGkgPSAyMjsgaSA8PSAyMzsgaSsrKQorCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9CisJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IDA7CisJfQorCisJZm9yIChpID0gNzsgaSA8PSAyMzsgaSsrKSB7CisJCWZvciAoeCA9IDA7IHggPD0gMTsgeCsrKSB7CisJCQlzd2l0Y2ggKHN2YmktPnNlcnZpY2VfbGluZXNbMS14XVtpXSkgeworCQkJY2FzZSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COgorCQkJCWxjcltpXSB8PSAxIDw8ICg0ICogeCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFY0TDJfU0xJQ0VEX1dTU182MjU6CisJCQkJbGNyW2ldIHw9IDQgPDwgKDQgKiB4KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVjRMMl9TTElDRURfQ0FQVElPTl81MjU6CisJCQkJbGNyW2ldIHw9IDYgPDwgKDQgKiB4KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVjRMMl9TTElDRURfVlBTOgorCQkJCWxjcltpXSB8PSA5IDw8ICg0ICogeCk7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWlkMiA9IDA7CisJCX0KKwl9CisKKwlpZiAoaXNfcGFsKSB7CisJCWZvciAoeCA9IDEsIGkgPSAweDQyNDsgaSA8PSAweDQzNDsgaSsrLCB4KyspCisJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgaSwgbGNyWzYgKyB4XSk7CisJfSBlbHNlIHsKKwkJZm9yICh4ID0gMSwgaSA9IDB4NDI0OyBpIDw9IDB4NDMwOyBpKyssIHgrKykKKwkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCBpLCBsY3JbOSArIHhdKTsKKwkJZm9yIChpID0gMHg0MzE7IGkgPD0gMHg0MzQ7IGkrKykKKwkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCBpLCAwKTsKKwl9CisKKwljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0M2MsIDB4MTYpOworCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3NCwgaXNfcGFsID8gMHgyYSA6IDB4MjIpOworCXJldHVybiAwOworfQorCitpbnQgY3gyNTg0MF9kZWNvZGVfdmJpX2xpbmUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGVjb2RlX3ZiaV9saW5lICp2YmkpCit7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXU4ICpwID0gdmJpLT5wOworCWludCBpZDEsIGlkMiwgbCwgZXJyID0gMDsKKworCWlmIChwWzBdIHx8IHBbMV0gIT0gMHhmZiB8fCBwWzJdICE9IDB4ZmYgfHwKKwkJCShwWzNdICE9IDB4NTUgJiYgcFszXSAhPSAweDkxKSkgeworCQl2YmktPmxpbmUgPSB2YmktPnR5cGUgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlwICs9IDQ7CisJaWQxID0gcFstMV07CisJaWQyID0gcFswXSAmIDB4ZjsKKwlsID0gcFsyXSAmIDB4M2Y7CisJbCArPSBzdGF0ZS0+dmJpX2xpbmVfb2Zmc2V0OworCXAgKz0gNDsKKworCXN3aXRjaCAoaWQyKSB7CisJY2FzZSAxOgorCQlpZDIgPSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COworCQlicmVhazsKKwljYXNlIDQ6CisJCWlkMiA9IFY0TDJfU0xJQ0VEX1dTU182MjU7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJaWQyID0gVjRMMl9TTElDRURfQ0FQVElPTl81MjU7CisJCWVyciA9ICFvZGRfcGFyaXR5KHBbMF0pIHx8ICFvZGRfcGFyaXR5KHBbMV0pOworCQlicmVhazsKKwljYXNlIDk6CisJCWlkMiA9IFY0TDJfU0xJQ0VEX1ZQUzsKKwkJaWYgKGRlY29kZV92cHMocCwgcCkgIT0gMCkKIAkJCWVyciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCXZiaS0+dHlwZSA9IGVyciA/IDAgOiBpZDI7Ci0JCXZiaS0+bGluZSA9IGVyciA/IDAgOiBsOwotCQl2YmktPmlzX3NlY29uZF9maWVsZCA9IGVyciA/IDAgOiAoaWQxID09IDB4NTUpOwotCQl2YmktPnAgPSBwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZDIgPSAwOworCQllcnIgPSAxOwogCQlicmVhazsKIAl9Ci0JfQogCisJdmJpLT50eXBlID0gZXJyID8gMCA6IGlkMjsKKwl2YmktPmxpbmUgPSBlcnIgPyAwIDogbDsKKwl2YmktPmlzX3NlY29uZF9maWVsZCA9IGVyciA/IDAgOiAoaWQxID09IDB4NTUpOworCXZiaS0+cCA9IHA7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCmluZGV4IDJkMjUwYTIuLjQ5OTUyOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCkBAIC02MSw3ICs2MSw3IEBACiAJc2VsZWN0IERWQl9TVFYwMjk5IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TVFYwMjg4IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TVEI2MDAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJLS0taGVscC0tLQogCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIERWQi9BVFNDIGNhcmRzIGJhc2VkIG9uIHRoZQogCSAgQ29uZXhhbnQgMjM4OHggY2hpcC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKaW5kZXggN2Y1YjhiZi4uNDRlYWNmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKQEAgLTc0Niw3ICs3NDYsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sICJNUEVHIiwgc2l6ZW9mKGYtPmRlc2NyaXB0aW9uKSk7Ci0JZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAlmLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NUEVHOwogCXJldHVybiAwOwogfQpAQCAtNzU3LDcgKzc1Niw2IEBACiAJc3RydWN0IGN4ODgwMl9maCAgKmZoICAgPSBwcml2OwogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgID0gZmgtPmRldjsKIAotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKIAlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPSBkZXYtPnRzX3BhY2tldF9zaXplICogZGV2LT50c19wYWNrZXRfY291bnQ7IC8qIDE4OCAqIDQgKiAxMDI0OyAqLwpAQCAtNzc2LDcgKzc3NCw2IEBACiAJc3RydWN0IGN4ODgwMl9maCAgKmZoICAgPSBwcml2OwogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgID0gZmgtPmRldjsKIAotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKIAlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPSBkZXYtPnRzX3BhY2tldF9zaXplICogZGV2LT50c19wYWNrZXRfY291bnQ7IC8qIDE4OCAqIDQgKiAxMDI0OyAqLzsKQEAgLTc5Myw3ICs3OTAsNiBAQAogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgID0gZmgtPmRldjsKIAlzdHJ1Y3QgY3g4OF9jb3JlICAqY29yZSA9IGRldi0+Y29yZTsKIAotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKIAlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPSBkZXYtPnRzX3BhY2tldF9zaXplICogZGV2LT50c19wYWNrZXRfY291bnQ7IC8qIDE4OCAqIDQgKiAxMDI0OyAqLzsKQEAgLTkxOSw3ICs5MTUsNyBAQAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLzIiLCBjb3JlLT5uYW1lKTsKIAlwcmludGsoIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAogCQljb3JlLT5uYW1lKTsKLQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSwgVklESU9DX0xPR19TVEFUVVMsIE5VTEwpOworCWNhbGxfYWxsKGNvcmUsIGNvcmUsIGxvZ19zdGF0dXMpOwogCWN4MjM0MXhfbG9nX3N0YXR1cygmZGV2LT5wYXJhbXMsIG5hbWUpOwogCXByaW50aygiJXMvMjogPT09PT09PT09PT09PSAgRU5EIExPRyBTVEFUVVMgID09PT09PT09PT09PT1cbiIsCiAJCWNvcmUtPm5hbWUpOwpAQCAtOTc0LDcgKzk3MCw3IEBACiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CiAJZi0+ZnJlcXVlbmN5ID0gY29yZS0+ZnJlcTsKLQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSxWSURJT0NfR19GUkVRVUVOQ1ksZik7CisJY2FsbF9hbGwoY29yZSwgdHVuZXIsIGdfZnJlcXVlbmN5LCBmKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKaW5kZXggNzMzZWRlMy4uMDM2Mzk3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCkBAIC03MzIsNiArNzMyLDggQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkvKiBTb21lIHZhcmlhbnRzIHVzZSBhIHRkYTk4NzQgYW5kIHNvIG5lZWQgdGhlIHR2YXVkaW8gbW9kdWxlLiAqLworCQkuYXVkaW9fY2hpcCAgICAgPSBWNEwyX0lERU5UX1RWQVVESU8sCiAJCS5pbnB1dCAgICAgICAgICA9IHt7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgID0gMCwKQEAgLTE5MzQsNiArMTkzNiwzOSBAQAogCQl9IH0sCiAJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCiAJfSwKKwlbQ1g4OF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZX0hUX1BDSV9NS0lJXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlRlcnJhdGVjIENpbmVyZ3kgSFQgUENJIE1LSUkiLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9YQzIwMjgsCisJCS50dW5lcl9hZGRyICAgICA9IDB4NjEsCisJCS5yYWRpb190eXBlICAgICA9IFRVTkVSX1hDMjAyOCwKKwkJLnJhZGlvX2FkZHIgICAgID0gMHg2MSwKKwkJLmlucHV0ICAgICAgICAgID0geyB7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgID0gMCwKKwkJCS5ncGlvMCAgPSAweDAwNGZmLAorCQkJLmdwaW8xICA9IDB4MDEwZmYsCisJCQkuZ3BpbzIgID0gMHgwMDAwMSwKKwkJfSwgeworCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICA9IDEsCisJCQkuZ3BpbzAgID0gMHgwMDRmYiwKKwkJCS5ncGlvMSAgPSAweDAxMGVmLAorCQkJLmF1ZGlvcm91dGUgPSAxLAorCQl9LCB7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgPSAyLAorCQkJLmdwaW8wICA9IDB4MDA0ZmIsCisJCQkuZ3BpbzEgID0gMHgwMTBlZiwKKwkJCS5hdWRpb3JvdXRlID0gMSwKKwkJfSB9LAorCQkucmFkaW8gPSB7CisJCQkudHlwZSAgID0gQ1g4OF9SQURJTywKKwkJCS5ncGlvMCAgPSAweDAwNGZmLAorCQkJLmdwaW8xICA9IDB4MDEwZmYsCisJCQkuZ3BpbzIgID0gMHgwZmYsCisJCX0sCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCisJfSwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjM0Myw2ICsyMzc4LDEwIEBACiAJCS5zdWJ2ZW5kb3IgPSAweGIyMDAsCiAJCS5zdWJkZXZpY2UgPSAweDQyMDAsCiAJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1NBVFRSQURFX1NUNDIwMCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDE1M2IsCisJCS5zdWJkZXZpY2UgPSAweDExNzcsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfSFRfUENJX01LSUksCiAJfSwKIH07CiAKQEAgLTI4MTksNiArMjg1OCw3IEBACiAJCSAqLwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfUElOTkFDTEVfSFlCUklEX1BDVFY6CisJY2FzZSBDWDg4X0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfSFRfUENJX01LSUk6CiAJCWN0bC0+ZGVtb2QgPSBYQzMwMjhfRkVfWkFSTElOSzQ1NjsKIAkJY3RsLT5tdHMgPSAxOwogCQlicmVhazsKQEAgLTI5NDcsNyArMjk4Nyw3IEBACiAJCXRlYTU3NjdfY2ZnLnR1bmVyID0gVFVORVJfVEVBNTc2NzsKIAkJdGVhNTc2N19jZmcucHJpdiAgPSAmY3RsOwogCi0JCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLCBUVU5FUl9TRVRfQ09ORklHLCAmdGVhNTc2N19jZmcpOworCQljYWxsX2FsbChjb3JlLCB0dW5lciwgc19jb25maWcsICZ0ZWE1NzY3X2NmZyk7CiAJCWJyZWFrOwogCX0KIAljYXNlICBDWDg4X0JPQVJEX1RFVklJX1M0MjA6CkBAIC0yOTcyLDcgKzMwMTIsNyBAQAogCQl0dW5fc2V0dXAudHlwZSAgICAgICAgICAgPSBjb3JlLT5ib2FyZC5yYWRpb190eXBlOwogCQl0dW5fc2V0dXAuYWRkciAgICAgICAgICAgPSBjb3JlLT5ib2FyZC5yYWRpb19hZGRyOwogCQl0dW5fc2V0dXAudHVuZXJfY2FsbGJhY2sgPSBjeDg4X3R1bmVyX2NhbGxiYWNrOwotCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7CisJCWNhbGxfYWxsKGNvcmUsIHR1bmVyLCBzX3R5cGVfYWRkciwgJnR1bl9zZXR1cCk7CiAJCW1vZGVfbWFzayAmPSB+VF9SQURJTzsKIAl9CiAKQEAgLTI5ODIsNyArMzAyMiw3IEBACiAJCXR1bl9zZXR1cC5hZGRyICAgICAgICAgICA9IGNvcmUtPmJvYXJkLnR1bmVyX2FkZHI7CiAJCXR1bl9zZXR1cC50dW5lcl9jYWxsYmFjayA9IGN4ODhfdHVuZXJfY2FsbGJhY2s7CiAKLQkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsIFRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOworCQljYWxsX2FsbChjb3JlLCB0dW5lciwgc190eXBlX2FkZHIsICZ0dW5fc2V0dXApOwogCX0KIAogCWlmIChjb3JlLT5ib2FyZC50ZGE5ODg3X2NvbmYpIHsKQEAgLTI5OTEsNyArMzAzMSw3IEBACiAJCXRkYTk4ODdfY2ZnLnR1bmVyID0gVFVORVJfVERBOTg4NzsKIAkJdGRhOTg4N19jZmcucHJpdiAgPSAmY29yZS0+Ym9hcmQudGRhOTg4N19jb25mOwogCi0JCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLCBUVU5FUl9TRVRfQ09ORklHLCAmdGRhOTg4N19jZmcpOworCQljYWxsX2FsbChjb3JlLCB0dW5lciwgc19jb25maWcsICZ0ZGE5ODg3X2NmZyk7CiAJfQogCiAJaWYgKGNvcmUtPmJvYXJkLnR1bmVyX3R5cGUgPT0gVFVORVJfWEMyMDI4KSB7CkBAIC0zMDA3LDkgKzMwNDcsOSBAQAogCQl4YzIwMjhfY2ZnLnByaXYgID0gJmN0bDsKIAkJaW5mb19wcmludGsoY29yZSwgIkFza2luZyB4YzIwMjgvMzAyOCB0byBsb2FkIGZpcm13YXJlICVzXG4iLAogCQkJICAgIGN0bC5mbmFtZSk7Ci0JCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLCBUVU5FUl9TRVRfQ09ORklHLCAmeGMyMDI4X2NmZyk7CisJCWNhbGxfYWxsKGNvcmUsIHR1bmVyLCBzX2NvbmZpZywgJnhjMjAyOF9jZmcpOwogCX0KLQljeDg4X2NhbGxfaTJjX2NsaWVudHMgKGNvcmUsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKKwljYWxsX2FsbChjb3JlLCBjb3JlLCBzX3N0YW5kYnksIDApOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTMwODksNiArMzEyOSw4IEBACiAJaW50IGk7CiAKIAljb3JlID0ga3phbGxvYyhzaXplb2YoKmNvcmUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY29yZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKIAogCWF0b21pY19pbmMoJmNvcmUtPnJlZmNvdW50KTsKIAljb3JlLT5wY2lfYnVzICA9IHBjaS0+YnVzLT5udW1iZXI7CkBAIC0zMTAwLDcgKzMxNDIsMTUgQEAKIAogCWNvcmUtPm5yID0gbnI7CiAJc3ByaW50Zihjb3JlLT5uYW1lLCAiY3g4OFslZF0iLCBjb3JlLT5ucik7CisKKwlzdHJjcHkoY29yZS0+djRsMl9kZXYubmFtZSwgY29yZS0+bmFtZSk7CisJaWYgKHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsICZjb3JlLT52NGwyX2RldikpIHsKKwkJa2ZyZWUoY29yZSk7CisJCXJldHVybiBOVUxMOworCX0KKwogCWlmICgwICE9IGN4ODhfZ2V0X3Jlc291cmNlcyhjb3JlLCBwY2kpKSB7CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmNvcmUtPnY0bDJfZGV2KTsKIAkJa2ZyZWUoY29yZSk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTMxMTEsNiArMzE2MSwxMSBAQAogCQkJICAgICAgcGNpX3Jlc291cmNlX2xlbihwY2ksIDApKTsKIAljb3JlLT5ibW1pbyA9ICh1OCBfX2lvbWVtICopY29yZS0+bG1taW87CiAKKwlpZiAoY29yZS0+bG1taW8gPT0gTlVMTCkgeworCQlrZnJlZShjb3JlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJLyogYm9hcmQgY29uZmlnICovCiAJY29yZS0+Ym9hcmRuciA9IFVOU0VUOwogCWlmIChjYXJkW2NvcmUtPm5yXSA8IEFSUkFZX1NJWkUoY3g4OF9ib2FyZHMpKQpAQCAtMzE0OSw4ICszMjA0LDM2IEBACiAJY3g4OF9pMmNfaW5pdChjb3JlLCBwY2kpOwogCiAJLyogbG9hZCB0dW5lciBtb2R1bGUsIGlmIG5lZWRlZCAqLwotCWlmIChUVU5FUl9BQlNFTlQgIT0gY29yZS0+Ym9hcmQudHVuZXJfdHlwZSkKLQkJcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7CisJaWYgKFRVTkVSX0FCU0VOVCAhPSBjb3JlLT5ib2FyZC50dW5lcl90eXBlKSB7CisJCS8qIElnbm9yZSAweDZiIGFuZCAweDZmIG9uIGN4ODggYm9hcmRzLgorCQkgKiBGdXNpb25IRFRWNSBSVCBHb2xkIGhhcyBhbiBpciByZWNlaXZlciBhdCAweDZiCisJCSAqIGFuZCBhbiBSVEMgYXQgMHg2ZiB3aGljaCBjYW4gZ2V0IGNvcnJ1cHRlZCBpZiBwcm9iZWQuICovCisJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB0dl9hZGRyc1tdID0geworCQkJMHg0MiwgMHg0MywgMHg0YSwgMHg0YiwJCS8qIHRkYTgyOTAgKi8KKwkJCTB4NjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsCisJCQkweDY4LCAweDY5LCAweDZhLCAweDZjLCAweDZkLCAweDZlLAorCQkJSTJDX0NMSUVOVF9FTkQKKwkJfTsKKwkJaW50IGhhc19kZW1vZCA9IChjb3JlLT5ib2FyZC50ZGE5ODg3X2NvbmYgJiBUREE5ODg3X1BSRVNFTlQpOworCisJCS8qIEkgZG9uJ3QgdHJ1c3QgdGhlIHJhZGlvX3R5cGUgYXMgaXMgc3RvcmVkIGluIHRoZSBjYXJkCisJCSAgIGRlZmluaXRpb25zLCBzbyB3ZSBqdXN0IHByb2JlIGZvciBpdC4KKwkJICAgVGhlIHJhZGlvX3R5cGUgaXMgc29tZXRpbWVzIG1pc3NpbmcsIG9yIHNldCB0byBVTlNFVCBidXQKKwkJICAgbGF0ZXIgY29kZSBjb25maWd1cmVzIGEgdGVhNTc2Ny4KKwkJICovCisJCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZjb3JlLT5pMmNfYWRhcCwgInR1bmVyIiwgInR1bmVyIiwKKwkJCQl2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19SQURJTykpOworCQlpZiAoaGFzX2RlbW9kKQorCQkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmNvcmUtPmkyY19hZGFwLCAidHVuZXIiLAorCQkJCSJ0dW5lciIsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX0RFTU9EKSk7CisJCWlmIChjb3JlLT5ib2FyZC50dW5lcl9hZGRyID09IEFERFJfVU5TRVQpIHsKKwkJCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZjb3JlLT5pMmNfYWRhcCwgInR1bmVyIiwKKwkJCQkidHVuZXIiLCBoYXNfZGVtb2QgPyB0dl9hZGRycyArIDQgOiB0dl9hZGRycyk7CisJCX0gZWxzZSB7CisJCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZjb3JlLT5pMmNfYWRhcCwKKwkJCQkidHVuZXIiLCAidHVuZXIiLCBjb3JlLT5ib2FyZC50dW5lcl9hZGRyKTsKKwkJfQorCX0KIAogCWN4ODhfY2FyZF9zZXR1cChjb3JlKTsKIAljeDg4X2lyX2luaXQoY29yZSwgcGNpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYwppbmRleCBiMDQ1ODc0Li5mMmZiOWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCkBAIC05OTEsNyArOTkxLDcgQEAKIAlzZXRfdHZhdWRpbyhjb3JlKTsKIAogCS8vIHRlbGwgaTJjIGNoaXBzCi0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX1NfU1RELCZub3JtKTsKKwljYWxsX2FsbChjb3JlLCB0dW5lciwgc19zdGQsIG5vcm0pOwogCiAJLy8gZG9uZQogCXJldHVybiAwOwpAQCAtMTAxMSw3ICsxMDExLDggQEAKIAkJcmV0dXJuIE5VTEw7CiAJKnZmZCA9ICp0ZW1wbGF0ZTsKIAl2ZmQtPm1pbm9yICAgPSAtMTsKLQl2ZmQtPnBhcmVudCAgPSAmcGNpLT5kZXY7CisJdmZkLT52NGwyX2RldiA9ICZjb3JlLT52NGwyX2RldjsKKwl2ZmQtPnBhcmVudCA9ICZwY2ktPmRldjsKIAl2ZmQtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKIAlzbnByaW50Zih2ZmQtPm5hbWUsIHNpemVvZih2ZmQtPm5hbWUpLCAiJXMgJXMgKCVzKSIsCiAJCSBjb3JlLT5uYW1lLCB0eXBlLCBjb3JlLT5ib2FyZC5uYW1lKTsKQEAgLTEwNTgsMTIgKzEwNTksMTYgQEAKIAogCW11dGV4X2xvY2soJmRldmxpc3QpOwogCWN4ODhfaXJfZmluaShjb3JlKTsKLQlpZiAoMCA9PSBjb3JlLT5pMmNfcmMpCisJaWYgKDAgPT0gY29yZS0+aTJjX3JjKSB7CisJCWlmIChjb3JlLT5pMmNfcnRjKQorCQkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNvcmUtPmkyY19ydGMpOwogCQlpMmNfZGVsX2FkYXB0ZXIoJmNvcmUtPmkyY19hZGFwKTsKKwl9CiAJbGlzdF9kZWwoJmNvcmUtPmRldmxpc3QpOwogCWlvdW5tYXAoY29yZS0+bG1taW8pOwogCWN4ODhfZGV2Y291bnQtLTsKIAltdXRleF91bmxvY2soJmRldmxpc3QpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmNvcmUtPnY0bDJfZGV2KTsKIAlrZnJlZShjb3JlKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwppbmRleCBhZWY1Mjk3Li40ZmY0ZDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwpAQCAtMjQxLDYgKzI0MSwxMiBAQAogCS5kZW1vZF9pbml0ICAgID0gZHZpY29fZHVhbF9kZW1vZF9pbml0LAogfTsKIAorc3RhdGljIHN0cnVjdCB6bDEwMzUzX2NvbmZpZyBjeDg4X3RlcnJhdGVjX2NpbmVyZ3lfaHRfcGNpX21raWlfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gKDB4MWUgPj4gMSksCisJLm5vX3R1bmVyICAgICAgPSAxLAorCS5pZjIgICAgICAgICAgID0gNDU2MDAsCit9OworCiAjaWYgZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9WUDMwNTQpIHx8IChkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X1ZQMzA1NF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIHN0YXRpYyBpbnQgZG50dl9saXZlX2R2YnRfcHJvX2RlbW9kX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCiB7CkBAIC0xMTMxLDYgKzExMzcsMTYgQEAKIAkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpCiAJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlID0gdGV2aWlfZHZic19zZXRfdm9sdGFnZTsKIAkJYnJlYWs7CisJY2FzZSBDWDg4X0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfSFRfUENJX01LSUk6CisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJCQkJICAgICAgICZjeDg4X3RlcnJhdGVjX2NpbmVyZ3lfaHRfcGNpX21raWlfY29uZmlnLAorCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwgPSBOVUxMOworCQkJaWYgKGF0dGFjaF94YzMwMjgoMHg2MSwgZGV2KSA8IDApCisJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CisJCX0KKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICIlcy8yOiBUaGUgZnJvbnRlbmQgb2YgeW91ciBEVkIvQVRTQyBjYXJkIGlzbid0IHN1cHBvcnRlZCB5ZXRcbiIsCiAJCSAgICAgICBjb3JlLT5uYW1lKTsKQEAgLTExNTIsNyArMTE2OCw3IEBACiAJCWZlMS0+ZHZiLmZyb250ZW5kLT5vcHMudHNfYnVzX2N0cmwgPSBjeDg4X2R2Yl9idXNfY3RybDsKIAogCS8qIFB1dCB0aGUgYW5hbG9nIGRlY29kZXIgaW4gc3RhbmRieSB0byBrZWVwIGl0IHF1aWV0ICovCi0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKKwljYWxsX2FsbChjb3JlLCBjb3JlLCBzX3N0YW5kYnksIDApOwogCiAJLyogcmVnaXN0ZXIgZXZlcnl0aGluZyAqLwogCXJldHVybiB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYnVzKCZkZXYtPmZyb250ZW5kcywgVEhJU19NT0RVTEUsIGRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMKaW5kZXggYzBmZjIzMC4uOTk2YjRlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMKQEAgLTk3LDM3ICs5Nyw2IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7Ci0KLQlkcHJpbnRrKDEsICIlcyBpMmMgYXR0YWNoIFthZGRyPTB4JXgsY2xpZW50PSVzXVxuIiwKLQkJY2xpZW50LT5kcml2ZXItPmRyaXZlci5uYW1lLCBjbGllbnQtPmFkZHIsIGNsaWVudC0+bmFtZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZGV0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7Ci0KLQlkcHJpbnRrKDEsICJpMmMgZGV0YWNoIFtjbGllbnQ9JXNdXG4iLCBjbGllbnQtPm5hbWUpOwotCXJldHVybiAwOwotfQotCi12b2lkIGN4ODhfY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JaWYgKDAgIT0gY29yZS0+aTJjX3JjKQotCQlyZXR1cm47Ci0KLQlpZiAoY29yZS0+Z2F0ZV9jdHJsKQotCQljb3JlLT5nYXRlX2N0cmwoY29yZSwgMSk7Ci0KLQlpMmNfY2xpZW50c19jb21tYW5kKCZjb3JlLT5pMmNfYWRhcCwgY21kLCBhcmcpOwotCi0JaWYgKGNvcmUtPmdhdGVfY3RybCkKLQkJY29yZS0+Z2F0ZV9jdHJsKGNvcmUsIDApOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGN4ODgwMF9pMmNfYWxnb190ZW1wbGF0ZSA9IHsKIAkuc2V0c2RhICA9IGN4ODgwMF9iaXRfc2V0c2RhLAogCS5zZXRzY2wgID0gY3g4ODAwX2JpdF9zZXRzY2wsCkBAIC0xNzMsMjAgKzE0MiwxNCBAQAogCW1lbWNweSgmY29yZS0+aTJjX2FsZ28sICZjeDg4MDBfaTJjX2FsZ29fdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZihjb3JlLT5pMmNfYWxnbykpOwogCi0JaWYgKGNvcmUtPmJvYXJkLnR1bmVyX3R5cGUgIT0gVFVORVJfQUJTRU5UKQotCQljb3JlLT5pMmNfYWRhcC5jbGFzcyB8PSBJMkNfQ0xBU1NfVFZfQU5BTE9HOwotCWlmIChjb3JlLT5ib2FyZC5tcGVnICYgQ1g4OF9NUEVHX0RWQikKLQkJY29yZS0+aTJjX2FkYXAuY2xhc3MgfD0gSTJDX0NMQVNTX1RWX0RJR0lUQUw7CiAKIAljb3JlLT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJnBjaS0+ZGV2OwogCXN0cmxjcHkoY29yZS0+aTJjX2FkYXAubmFtZSxjb3JlLT5uYW1lLHNpemVvZihjb3JlLT5pMmNfYWRhcC5uYW1lKSk7CiAJY29yZS0+aTJjX2FkYXAub3duZXIgPSBUSElTX01PRFVMRTsKIAljb3JlLT5pMmNfYWRhcC5pZCA9IEkyQ19IV19CX0NYMjM4OHg7Ci0JY29yZS0+aTJjX2FkYXAuY2xpZW50X3JlZ2lzdGVyID0gYXR0YWNoX2luZm9ybTsKLQljb3JlLT5pMmNfYWRhcC5jbGllbnRfdW5yZWdpc3RlciA9IGRldGFjaF9pbmZvcm07CiAJY29yZS0+aTJjX2FsZ28udWRlbGF5ID0gaTJjX3VkZWxheTsKIAljb3JlLT5pMmNfYWxnby5kYXRhID0gY29yZTsKLQlpMmNfc2V0X2FkYXBkYXRhKCZjb3JlLT5pMmNfYWRhcCxjb3JlKTsKKwlpMmNfc2V0X2FkYXBkYXRhKCZjb3JlLT5pMmNfYWRhcCwgJmNvcmUtPnY0bDJfZGV2KTsKIAljb3JlLT5pMmNfYWRhcC5hbGdvX2RhdGEgPSAmY29yZS0+aTJjX2FsZ287CiAJY29yZS0+aTJjX2NsaWVudC5hZGFwdGVyID0gJmNvcmUtPmkyY19hZGFwOwogCXN0cmxjcHkoY29yZS0+aTJjX2NsaWVudC5uYW1lLCAiY3g4OHh4IGludGVybmFsIiwgSTJDX05BTUVfU0laRSk7CkBAIC0yMjIsOCArMTg1LDYgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotRVhQT1JUX1NZTUJPTChjeDg4X2NhbGxfaTJjX2NsaWVudHMpOwotCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgogICogYy1iYXNpYy1vZmZzZXQ6IDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCmluZGV4IDg2ODNkMTAuLmVjMDUzMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYwpAQCAtNDgsOCArNDgsNyBAQAogCiAJLyogcG9sbCBleHRlcm5hbCBkZWNvZGVyICovCiAJaW50IHBvbGxpbmc7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCXUzMiBncGlvX2FkZHI7CiAJdTMyIGxhc3RfZ3BpbzsKIAl1MzIgbWFza19rZXljb2RlOwpAQCAtMTQzLDI3ICsxNDIsMTkgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGlyX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgY3g4OF9JUiAqaXIgPSAoc3RydWN0IGN4ODhfSVIgKilkYXRhOwotCi0Jc2NoZWR1bGVfd29yaygmaXItPndvcmspOwotfQotCiBzdGF0aWMgdm9pZCBjeDg4X2lyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBjeDg4X0lSICppciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY3g4OF9JUiwgd29yayk7CisJc3RydWN0IGN4ODhfSVIgKmlyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjeDg4X0lSLCB3b3JrLndvcmspOwogCiAJY3g4OF9pcl9oYW5kbGVfa2V5KGlyKTsKLQltb2RfdGltZXIoJmlyLT50aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoaXItPnBvbGxpbmcpKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlyLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKGlyLT5wb2xsaW5nKSk7CiB9CiAKIHZvaWQgY3g4OF9pcl9zdGFydChzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCBzdHJ1Y3QgY3g4OF9JUiAqaXIpCiB7CiAJaWYgKGlyLT5wb2xsaW5nKSB7Ci0JCXNldHVwX3RpbWVyKCZpci0+dGltZXIsIGlyX3RpbWVyLCAodW5zaWduZWQgbG9uZylpcik7Ci0JCUlOSVRfV09SSygmaXItPndvcmssIGN4ODhfaXJfd29yayk7Ci0JCXNjaGVkdWxlX3dvcmsoJmlyLT53b3JrKTsKKwkJSU5JVF9ERUxBWUVEX1dPUksoJmlyLT53b3JrLCBjeDg4X2lyX3dvcmspOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlyLT53b3JrLCAwKTsKIAl9CiAJaWYgKGlyLT5zYW1wbGluZykgewogCQljb3JlLT5wY2lfaXJxbWFzayB8PSBQQ0lfSU5UX0lSX1NNUElOVDsKQEAgLTE3OSwxMCArMTcwLDggQEAKIAkJY29yZS0+cGNpX2lycW1hc2sgJj0gflBDSV9JTlRfSVJfU01QSU5UOwogCX0KIAotCWlmIChpci0+cG9sbGluZykgewotCQlkZWxfdGltZXJfc3luYygmaXItPnRpbWVyKTsKLQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQl9CisJaWYgKGlyLT5wb2xsaW5nKQorCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmlyLT53b3JrKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjI2LDYgKzIxNSw4IEBACiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIzMDAwOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMDoKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDBMSVRFOgorCWNhc2UgQ1g4OF9CT0FSRF9QQ0hEVFZfSEQzMDAwOgorCWNhc2UgQ1g4OF9CT0FSRF9QQ0hEVFZfSEQ1NTAwOgogCQlpcl9jb2RlcyA9IGlyX2NvZGVzX2hhdXBwYXVnZV9uZXc7CiAJCWlyX3R5cGUgPSBJUl9UWVBFX1JDNTsKIAkJaXItPnNhbXBsaW5nID0gMTsKQEAgLTQ2Niw2ICs0NTcsOCBAQAogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMDoKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwTElURToKKwljYXNlIENYODhfQk9BUkRfUENIRFRWX0hEMzAwMDoKKwljYXNlIENYODhfQk9BUkRfUENIRFRWX0hENTUwMDoKIAkJaXJjb2RlID0gaXJfZGVjb2RlX2JpcGhhc2UoaXItPnNhbXBsZXMsIGlyLT5zY291bnQsIDUsIDcpOwogCQlpcl9kcHJpbnRrKCJiaXBoYXNlIGRlY29kZWQ6ICV4XG4iLCBpcmNvZGUpOwogCQkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKaW5kZXggNzkxZTY5ZC4uNDM0MjM3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCkBAIC00MSwxMSArNDEsNiBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0vKiBJbmNsdWRlIFY0TDEgc3BlY2lmaWMgZnVuY3Rpb25zLiBTaG91bGQgYmUgcmVtb3ZlZCBzb29uICovCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNlbmRpZgotCiBNT0RVTEVfREVTQ1JJUFRJT04oInY0bDIgZHJpdmVyIG1vZHVsZSBmb3IgY3gyMzg4eCBiYXNlZCBUViBjYXJkcyIpOwogTU9EVUxFX0FVVEhPUigiR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtMjk4LDYgKzI5Myw3IEBACiB9Owogc3RhdGljIGNvbnN0IGludCBDWDg4MDBfQ1RMUyA9IEFSUkFZX1NJWkUoY3g4ODAwX2N0bHMpOwogCisvKiBNdXN0IGJlIHNvcnRlZCBmcm9tIGxvdyB0byBoaWdoIGNvbnRyb2wgSUQhICovCiBjb25zdCB1MzIgY3g4OF91c2VyX2N0cmxzW10gPSB7CiAJVjRMMl9DSURfVVNFUl9DTEFTUywKIAlWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtNDM1LDggKzQzMSw3IEBACiAJCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwogCiAJCQlyb3V0ZS5pbnB1dCA9IElOUFVUKGlucHV0KS5hdWRpb3JvdXRlOwotCQkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsCi0JCQkJVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsICZyb3V0ZSk7CisJCQljYWxsX2FsbChjb3JlLCBhdWRpbywgc19yb3V0aW5nLCAmcm91dGUpOwogCQl9CiAJCS8qIGN4MjM4OCdzIEMtQURDIGlzIGNvbm5lY3RlZCB0byB0aGUgdHVuZXIgb25seS4KIAkJICAgV2hlbiB1c2VkIHdpdGggUy1WaWRlbywgdGhhdCBBREMgaXMgYnVzeSBkZWFsaW5nIHdpdGgKQEAgLTgzMSw4ICs4MjYsNyBAQAogCQkJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CiAKIAkJCQlyb3V0ZS5pbnB1dCA9IGNvcmUtPmJvYXJkLnJhZGlvLmF1ZGlvcm91dGU7Ci0JCQkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsCi0JCQkJCVZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCAmcm91dGUpOworCQkJCWNhbGxfYWxsKGNvcmUsIGF1ZGlvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAJCQl9CiAJCQkvKiAiSTJTIEFEQyBtb2RlIiAqLwogCQkJY29yZS0+dHZhdWRpbyA9IFdXX0kyU0FEQzsKQEAgLTg0Myw3ICs4MzcsNyBAQAogCQkJY3g4OF9zZXRfdHZhdWRpbyhjb3JlKTsKIAkJCWN4ODhfc2V0X3N0ZXJlbyhjb3JlLFY0TDJfVFVORVJfTU9ERV9TVEVSRU8sMSk7CiAJCX0KLQkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsQVVEQ19TRVRfUkFESU8sTlVMTCk7CisJCWNhbGxfYWxsKGNvcmUsIHR1bmVyLCBzX3JhZGlvKTsKIAl9CiAJdW5sb2NrX2tlcm5lbCgpOwogCkBAIC05MzcsNyArOTMxLDcgQEAKIAlrZnJlZShmaCk7CiAKIAlpZihhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPmNvcmUtPnVzZXJzKSkKLQkJY3g4OF9jYWxsX2kyY19jbGllbnRzIChkZXYtPmNvcmUsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKKwkJY2FsbF9hbGwoZGV2LT5jb3JlLCBjb3JlLCBzX3N0YW5kYnksIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjc2LDE1ICsxMjcwLDEyIEBACiAJCVsgQ1g4OF9WTVVYX0RWQiAgICAgICAgXSA9ICJEVkIiLAogCQlbIENYODhfVk1VWF9ERUJVRyAgICAgIF0gPSAiZm9yIGRlYnVnIG9ubHkiLAogCX07Ci0JdW5zaWduZWQgaW50IG47CisJdW5zaWduZWQgaW50IG4gPSBpLT5pbmRleDsKIAotCW4gPSBpLT5pbmRleDsKIAlpZiAobiA+PSA0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoMCA9PSBJTlBVVChuKS50eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKLQltZW1zZXQoaSwwLHNpemVvZigqaSkpOwotCWktPmluZGV4ID0gbjsKIAlpLT50eXBlICA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CiAJc3RyY3B5KGktPm5hbWUsaW5hbWVbSU5QVVQobikudHlwZV0pOwogCWlmICgoQ1g4OF9WTVVYX1RFTEVWSVNJT04gPT0gSU5QVVQobikudHlwZSkgfHwKQEAgLTE0MDIsNyArMTM5Myw3IEBACiAJZi0+dHlwZSA9IGZoLT5yYWRpbyA/IFY0TDJfVFVORVJfUkFESU8gOiBWNEwyX1RVTkVSX0FOQUxPR19UVjsKIAlmLT5mcmVxdWVuY3kgPSBjb3JlLT5mcmVxOwogCi0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX0dfRlJFUVVFTkNZLGYpOworCWNhbGxfYWxsKGNvcmUsIHR1bmVyLCBnX2ZyZXF1ZW5jeSwgZik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0MTgsNyArMTQwOSw3IEBACiAJbXV0ZXhfbG9jaygmY29yZS0+bG9jayk7CiAJY29yZS0+ZnJlcSA9IGYtPmZyZXF1ZW5jeTsKIAljeDg4X25ld3N0YXRpb24oY29yZSk7Ci0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX1NfRlJFUVVFTkNZLGYpOworCWNhbGxfYWxsKGNvcmUsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgZik7CiAKIAkvKiBXaGVuIGNoYW5naW5nIGNoYW5uZWxzIGl0IGlzIHJlcXVpcmVkIHRvIHJlc2V0IFRWQVVESU8gKi8KIAltc2xlZXAgKDEwKTsKQEAgLTE1MDAsNyArMTQ5MSw3IEBACiAJc3RyY3B5KHQtPm5hbWUsICJSYWRpbyIpOwogCXQtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCi0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX0dfVFVORVIsdCk7CisJY2FsbF9hbGwoY29yZSwgdHVuZXIsIGdfdHVuZXIsIHQpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTIwLDcgKzE1MTEsNiBAQAogCWlmICh1bmxpa2VseShhLT5pbmRleCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KGEsMCxzaXplb2YoKmEpKTsKIAlzdHJjcHkoYS0+bmFtZSwiUmFkaW8iKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MzUsNyArMTUyNSw3IEBACiAJaWYgKDAgIT0gdC0+aW5kZXgpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX1NfVFVORVIsdCk7CisJY2FsbF9hbGwoY29yZSwgdHVuZXIsIHNfdHVuZXIsIHQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODkyLDEyICsxODgyLDMwIEBACiAJLyogbG9hZCBhbmQgY29uZmlndXJlIGhlbHBlciBtb2R1bGVzICovCiAKIAlpZiAoY29yZS0+Ym9hcmQuYXVkaW9fY2hpcCA9PSBWNEwyX0lERU5UX1dNODc3NSkKLQkJcmVxdWVzdF9tb2R1bGUoIndtODc3NSIpOworCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZjb3JlLT5pMmNfYWRhcCwKKwkJCQkid204Nzc1IiwgIndtODc3NSIsIDB4MzYgPj4gMSk7CisKKwlpZiAoY29yZS0+Ym9hcmQuYXVkaW9fY2hpcCA9PSBWNEwyX0lERU5UX1RWQVVESU8pIHsKKwkJLyogVGhpcyBwcm9iZXMgZm9yIGEgdGRhOTg3NCBhcyBpcyB1c2VkIG9uIHNvbWUKKwkJICAgUGl4ZWx2aWV3IFVsdHJhIGJvYXJkcy4gKi8KKwkJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGkyY19hZGRyW10gPSB7CisJCQkweGIwID4+IDEsIEkyQ19DTElFTlRfRU5ECisJCX07CisKKwkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmNvcmUtPmkyY19hZGFwLAorCQkJCSJ0dmF1ZGlvIiwgInR2YXVkaW8iLCBpMmNfYWRkcik7CisJfQogCiAJc3dpdGNoIChjb3JlLT5ib2FyZG5yKSB7CiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9HT0xEOgotCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzdfR09MRDoKKwljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl83X0dPTEQ6IHsKKwkJc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBydGNfaW5mbyA9IHsKKwkJCUkyQ19CT0FSRF9JTkZPKCJpc2wxMjA4IiwgMHg2ZikKKwkJfTsKKwogCQlyZXF1ZXN0X21vZHVsZSgicnRjLWlzbDEyMDgiKTsKKwkJY29yZS0+aTJjX3J0YyA9IGkyY19uZXdfZGV2aWNlKCZjb3JlLT5pMmNfYWRhcCwgJnJ0Y19pbmZvKTsKKwl9CiAJCS8qIGJyZWFrIGludGVudGlvbmFsbHkgb21pdHRlZCAqLwogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfUENJX05BTk86CiAJCXJlcXVlc3RfbW9kdWxlKCJpci1rYmQtaTJjIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAppbmRleCA2MDI1ZmRkLi45YTQzZmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KIAotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogI2luY2x1ZGUgPG1lZGlhL3R2ZWVwcm9tLmg+CiAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLXNnLmg+CkBAIC0yMzEsNiArMjMxLDcgQEAKICNkZWZpbmUgQ1g4OF9CT0FSRF9TQVRUUkFERV9TVDQyMDAgICAgICAgICA3NgogI2RlZmluZSBDWDg4X0JPQVJEX1RCU184OTEwICAgICAgICAgICAgICAgIDc3CiAjZGVmaW5lIENYODhfQk9BUkRfUFJPRl82MjAwICAgICAgICAgICAgICAgNzgKKyNkZWZpbmUgQ1g4OF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZX0hUX1BDSV9NS0lJIDc5CiAKIGVudW0gY3g4OF9pdHlwZSB7CiAJQ1g4OF9WTVVYX0NPTVBPU0lURTEgPSAxLApAQCAtMzAyLDcgKzMwMyw2IEBACiAJc3RydWN0IGJ0Y3hfcmlzY21lbSAgICBzdG9wcGVyOwogCXUzMiAgICAgICAgICAgICAgICAgICAgY291bnQ7CiB9Owotc3RydWN0IGN4ODhfY29yZTsKIAogc3RydWN0IGN4ODhfY29yZSB7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgZGV2bGlzdDsKQEAgLTMyNyw2ICszMjcsOCBAQAogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIGkyY19zdGF0ZSwgaTJjX3JjOwogCiAJLyogY29uZmlnIGluZm8gLS0gYW5hbG9nICovCisJc3RydWN0IHY0bDJfZGV2aWNlIAkgICB2NGwyX2RldjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAJICAgKmkyY19ydGM7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgYm9hcmRucjsKIAlzdHJ1Y3QgY3g4OF9ib2FyZAkgICBib2FyZDsKIApAQCAtMzY1LDYgKzM2NywyMiBAQAogCWludAkJCSAgIGFjdGl2ZV9mZV9pZDsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGN4ODhfY29yZSAqdG9fY29yZShzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBjeDg4X2NvcmUsIHY0bDJfZGV2KTsKK30KKworI2RlZmluZSBjYWxsX2FsbChjb3JlLCBvLCBmLCBhcmdzLi4uKSAJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAoIWNvcmUtPmkyY19yYykgewkJCQlcCisJCQlpZiAoY29yZS0+Z2F0ZV9jdHJsKQkJCVwKKwkJCQljb3JlLT5nYXRlX2N0cmwoY29yZSwgMSk7CVwKKwkJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZjb3JlLT52NGwyX2RldiwgMCwgbywgZiwgIyNhcmdzKTsgXAorCQkJaWYgKGNvcmUtPmdhdGVfY3RybCkJCQlcCisJCQkJY29yZS0+Z2F0ZV9jdHJsKGNvcmUsIDApOwlcCisJCX0JCQkJCQlcCisJfSB3aGlsZSAoMCkKKwogc3RydWN0IGN4ODgwMF9kZXY7CiBzdHJ1Y3QgY3g4ODAyX2RldjsKIApAQCAtNjEwLDggKzYyOCw2IEBACiAvKiBjeDg4LWkyYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiBleHRlcm4gaW50IGN4ODhfaTJjX2luaXQoc3RydWN0IGN4ODhfY29yZSAqY29yZSwgc3RydWN0IHBjaV9kZXYgKnBjaSk7Ci1leHRlcm4gdm9pZCBjeDg4X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGN4ODhfY29yZSAqY29yZSwKLQkJCQkgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCmluZGV4IDI5ODgxMGQuLmJhMzcwOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYwpAQCAtMTg5LDE3ICsxODksMjAgQEAKIAkJCQkJZHN0ICs9IGxlbjsKIAkJCQl9CiAJCQkJZWxzZQotCQkJCQllcnIoImRhYnVzYl9pc29fY29tcGxldGU6IGludmFsaWQgbGVuICVkIiwgbGVuKTsKKwkJCQkJZGV2X2VycigmcHVyYi0+ZGV2LT5kZXYsCisJCQkJCQkiZGFidXNiX2lzb19jb21wbGV0ZTogaW52YWxpZCBsZW4gJWRcbiIsIGxlbik7CiAJCQl9CiAJCQllbHNlCiAJCQkJZGV2X3dhcm4oJnB1cmItPmRldi0+ZGV2LCAiZGFidXNiX2lzb19jb21wbGV0ZTogY29ycnVwdGVkIHBhY2tldCBzdGF0dXM6ICVkXG4iLCBwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpOwogCQlpZiAoZHN0ICE9IHB1cmItPmFjdHVhbF9sZW5ndGgpCi0JCQllcnIoImRzdCE9cHVyYi0+YWN0dWFsX2xlbmd0aDolZCE9JWQiLCBkc3QsIHB1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJZGV2X2VycigmcHVyYi0+ZGV2LT5kZXYsCisJCQkJImRzdCE9cHVyYi0+YWN0dWFsX2xlbmd0aDolZCE9JWRcbiIsCisJCQkJCWRzdCwgcHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJfQogCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QgKCZzLT5wZW5kaW5nX2lvKSAmJiAhcy0+cmVtb3ZlX3BlbmRpbmcgJiYgcy0+c3RhdGUgIT0gX3N0b3BwZWQpIHsKIAkJcy0+b3ZlcnJ1bnMrKzsKLQkJZXJyKCJvdmVycnVuICglZCkiLCBzLT5vdmVycnVucyk7CisJCWRldl9lcnIoJnB1cmItPmRldi0+ZGV2LCAib3ZlcnJ1biAoJWQpXG4iLCBzLT5vdmVycnVucyk7CiAJfQogCXdha2VfdXAgKCZzLT53YWl0KTsKIH0KQEAgLTIyMCwxMyArMjIzLDE0IEBACiAJd2hpbGUgKHRyYW5zZmVyX2xlbiA8IChzLT50b3RhbF9idWZmZXJfc2l6ZSA8PCAxMCkpIHsKIAkJYiA9IGt6YWxsb2Moc2l6ZW9mIChidWZmX3QpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFiKSB7Ci0JCQllcnIoImt6YWxsb2Moc2l6ZW9mKGJ1ZmZfdCkpPT1OVUxMIik7CisJCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwKKwkJCQkia3phbGxvYyhzaXplb2YoYnVmZl90KSk9PU5VTExcbiIpOwogCQkJZ290byBlcnI7CiAJCX0KIAkJYi0+cyA9IHM7CiAJCWItPnB1cmIgPSB1c2JfYWxsb2NfdXJiKHBhY2tldHMsIEdGUF9LRVJORUwpOwogCQlpZiAoIWItPnB1cmIpIHsKLQkJCWVycigidXNiX2FsbG9jX3VyYiA9PSBOVUxMIik7CisJCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwgInVzYl9hbGxvY191cmIgPT0gTlVMTFxuIik7CiAJCQlrZnJlZSAoYik7CiAJCQlnb3RvIGVycjsKIAkJfQpAQCAtMjM1LDcgKzIzOSw4IEBACiAJCWlmICghYi0+cHVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CiAJCQlrZnJlZSAoYi0+cHVyYik7CiAJCQlrZnJlZSAoYik7Ci0JCQllcnIoImttYWxsb2MoJWQpPT1OVUxMIiwgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwKKwkJCQkia21hbGxvYyglZCk9PU5VTExcbiIsIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwogCQkJZ290byBlcnI7CiAJCX0KIApAQCAtMjc5LDEwICsyODQsMTEgQEAKIAogCXJldD11c2JfYnVsa19tc2cocy0+dXNiZGV2LCBwaXBlLCBwYi0+ZGF0YSwgcGItPnNpemUsICZhY3R1YWxfbGVuZ3RoLCAxMDApOwogCWlmKHJldDwwKSB7Ci0JCWVycigiZGFidXNiOiB1c2JfYnVsa19tc2cgZmFpbGVkKCVkKSIscmV0KTsKKwkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkidXNiX2J1bGtfbXNnIGZhaWxlZCglZClcbiIsIHJldCk7CiAKIAkJaWYgKHVzYl9zZXRfaW50ZXJmYWNlIChzLT51c2JkZXYsIF9EQUJVU0JfSUYsIDEpIDwgMCkgewotCQkJZXJyKCJzZXRfaW50ZXJmYWNlIGZhaWxlZCIpOworCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsICJzZXRfaW50ZXJmYWNlIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC0yOTEsNyArMjk3LDcgQEAKIAlpZiggcmV0ID09IC1FUElQRSApIHsKIAkJZGV2X3dhcm4oJnMtPnVzYmRldi0+ZGV2LCAiQ0xFQVJfRkVBVFVSRSByZXF1ZXN0IHRvIHJlbW92ZSBTVEFMTCBjb25kaXRpb24uXG4iKTsKIAkJaWYodXNiX2NsZWFyX2hhbHQocy0+dXNiZGV2LCB1c2JfcGlwZWVuZHBvaW50KHBpcGUpKSkKLQkJCWVycigicmVxdWVzdCBmYWlsZWQiKTsKKwkJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LCAicmVxdWVzdCBmYWlsZWRcbiIpOwogCX0KIAogCXBiLT5zaXplID0gYWN0dWFsX2xlbmd0aDsKQEAgLTMwNSw3ICszMTEsOCBAQAogCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlciA9ICBrbWFsbG9jIChsZW4sIEdGUF9LRVJORUwpOwogCiAJaWYgKCF0cmFuc2Zlcl9idWZmZXIpIHsKLQkJZXJyKCJkYWJ1c2Jfd3JpdGVtZW06IGttYWxsb2MoJWQpIGZhaWxlZC4iLCBsZW4pOworCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwKKwkJCSJkYWJ1c2Jfd3JpdGVtZW06IGttYWxsb2MoJWQpIGZhaWxlZC5cbiIsIGxlbik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMzI3LDEzICszMzQsMTQgQEAKIHsKIAlpbnQgcmV0OwogCWNvbnN0IHN0cnVjdCBpaGV4X2JpbnJlYyAqcmVjOwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICp1bmluaXRpYWxpemVkX3Zhcihmdyk7CiAKIAlkYmcoIkVudGVyIGRhYnVzYl9sb2FkbWVtIChpbnRlcm5hbCkiKTsKIAogCXJldCA9IHJlcXVlc3RfaWhleF9maXJtd2FyZSgmZncsICJkYWJ1c2IvZmlybXdhcmUuZnciLCAmcy0+dXNiZGV2LT5kZXYpOwogCWlmIChyZXQpIHsKLQkJZXJyKCJGYWlsZWQgdG8gbG9hZCBcImRhYnVzYi9maXJtd2FyZS5md1wiOiAlZFxuIiwgcmV0KTsKKwkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIGxvYWQgXCJkYWJ1c2IvZmlybXdhcmUuZndcIjogJWRcbiIsIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIAlyZXQgPSBkYWJ1c2JfODA1MV9yZXNldCAocywgMSk7CkBAIC0zNDYsOSArMzU0LDEwIEBACiAJCXJldCA9IGRhYnVzYl93cml0ZW1lbShzLCBiZTMyX3RvX2NwdShyZWMtPmFkZHIpLCByZWMtPmRhdGEsCiAJCQkJICAgICAgIGJlMTZfdG9fY3B1KHJlYy0+bGVuKSk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQllcnIoImRhYnVzYl93cml0ZW1lbSBmYWlsZWQgKCVkICUwNFggJXAgJWQpIiwgcmV0LAotCQkJICAgIGJlMzJfdG9fY3B1KHJlYy0+YWRkciksIHJlYy0+ZGF0YSwKLQkJCSAgICBiZTE2X3RvX2NwdShyZWMtPmxlbikpOworCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkJImRhYnVzYl93cml0ZW1lbSBmYWlsZWQgKCVkICUwNFggJXAgJWQpXG4iLAorCQkJCXJldCwgYmUzMl90b19jcHUocmVjLT5hZGRyKSwKKwkJCQlyZWMtPmRhdGEsIGJlMTZfdG9fY3B1KHJlYy0+bGVuKSk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTM5NiwxMyArNDA1LDE1IEBACiAJZGJnKCJFbnRlciBkYWJ1c2JfZnBnYV9kb3dubG9hZCAoaW50ZXJuYWwpIik7CiAKIAlpZiAoIWIpIHsKLQkJZXJyKCJrbWFsbG9jKHNpemVvZihidWxrX3RyYW5zZmVyX3QpKT09TlVMTCIpOworCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwKKwkJCSJrbWFsbG9jKHNpemVvZihidWxrX3RyYW5zZmVyX3QpKT09TlVMTFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCAiZGFidXNiL2JpdHN0cmVhbS5iaW4iLCAmcy0+dXNiZGV2LT5kZXYpOwogCWlmIChyZXQpIHsKLQkJZXJyKCJGYWlsZWQgdG8gbG9hZCBcImRhYnVzYi9iaXRzdHJlYW0uYmluXCI6ICVkXG4iLCByZXQpOworCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwKKwkJCSJGYWlsZWQgdG8gbG9hZCBcImRhYnVzYi9iaXRzdHJlYW0uYmluXCI6ICVkXG4iLCByZXQpOwogCQlrZnJlZShiKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC00MjUsNyArNDM2LDcgQEAKIAkJbWVtY3B5IChiLT5kYXRhICsgNCwgZnctPmRhdGEgKyA3NCArIG4sIDYwKTsKIAkJcmV0ID0gZGFidXNiX2J1bGsgKHMsIGIpOwogCQlpZiAocmV0IDwgMCkgewotCQkJZXJyKCJkYWJ1c2JfYnVsayBmYWlsZWQuIik7CisJCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwgImRhYnVzYl9idWxrIGZhaWxlZC5cbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJbWRlbGF5ICgxKTsKQEAgLTQ3OCw5ICs0ODksMTEgQEAKIAogCQkJcmV0ID0gdXNiX3N1Ym1pdF91cmIgKGVuZC0+cHVyYiwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAocmV0KSB7Ci0JCQkJZXJyKCJ1c2Jfc3VibWl0X3VyYiByZXR1cm5lZDolZCIsIHJldCk7CisJCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkJCSJ1c2Jfc3VibWl0X3VyYiByZXR1cm5lZDolZFxuIiwgcmV0KTsKIAkJCQlpZiAoZGFidXNiX2FkZF9idWZfdGFpbCAocywgJnMtPmZyZWVfYnVmZl9saXN0LCAmcy0+cmVjX2J1ZmZfbGlzdCkpCi0JCQkJCWVycigic3RhcnRyZWs6IGRhYnVzYl9hZGRfYnVmX3RhaWwgZmFpbGVkIik7CisJCQkJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LAorCQkJCQkJInN0YXJ0cmVrOiBkYWJ1c2JfYWRkX2J1Zl90YWlsIGZhaWxlZFxuIik7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQllbHNlCkBAIC01MjMsNyArNTM2LDggQEAKIAogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCi0JCQllcnIoImVycm9yOiByZWNfYnVmX2xpc3QgaXMgZW1wdHkiKTsKKwkJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LAorCQkJCSJlcnJvcjogcmVjX2J1Zl9saXN0IGlzIGVtcHR5XG4iKTsKIAkJCWdvdG8gZXJyOwogCQl9CiAKQEAgLTU1Miw3ICs1NjYsOCBAQAogCiAJCQlpZiAobGlzdF9lbXB0eSAoJnMtPnJlY19idWZmX2xpc3QpKSB7CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCQkJCWVycigiZXJyb3I6IHN0aWxsIG5vIGJ1ZmZlciBhdmFpbGFibGUuIik7CisJCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkJCSJlcnJvcjogc3RpbGwgbm8gYnVmZmVyIGF2YWlsYWJsZS5cbiIpOwogCQkJCWdvdG8gZXJyOwogCQkJfQogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwpAQCAtNTczLDcgKzU4OCw3IEBACiAJCWRiZygiY29weV90b191c2VyOiVwICVwICVkIixidWYsIHB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHMtPnJlYWRwdHIsIGNudCk7CiAKIAkJaWYgKGNvcHlfdG9fdXNlciAoYnVmLCBwdXJiLT50cmFuc2Zlcl9idWZmZXIgKyBzLT5yZWFkcHRyLCBjbnQpKSB7Ci0JCQllcnIoInJlYWQ6IGNvcHlfdG9fdXNlciBmYWlsZWQiKTsKKwkJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LCAicmVhZDogY29weV90b191c2VyIGZhaWxlZFxuIik7CiAJCQlpZiAoIXJldCkKIAkJCQlyZXQgPSAtRUZBVUxUOwogCQkJZ290byBlcnI7CkBAIC01ODcsNyArNjAyLDggQEAKIAkJaWYgKHMtPnJlYWRwdHIgPT0gcHVyYi0+YWN0dWFsX2xlbmd0aCkgewogCQkJLy8gZmluaXNoZWQsIHRha2UgbmV4dCBidWZmZXIKIAkJCWlmIChkYWJ1c2JfYWRkX2J1Zl90YWlsIChzLCAmcy0+ZnJlZV9idWZmX2xpc3QsICZzLT5yZWNfYnVmZl9saXN0KSkKLQkJCQllcnIoInJlYWQ6IGRhYnVzYl9hZGRfYnVmX3RhaWwgZmFpbGVkIik7CisJCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkJCSJyZWFkOiBkYWJ1c2JfYWRkX2J1Zl90YWlsIGZhaWxlZFxuIik7CiAJCQlzLT5yZWFkcHRyID0gMDsKIAkJfQogCX0KQEAgLTYyMyw3ICs2MzksNyBAQAogCX0KIAlpZiAodXNiX3NldF9pbnRlcmZhY2UgKHMtPnVzYmRldiwgX0RBQlVTQl9JRiwgMSkgPCAwKSB7CiAJCW11dGV4X3VubG9jaygmcy0+bXV0ZXgpOwotCQllcnIoInNldF9pbnRlcmZhY2UgZmFpbGVkIik7CisJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LCAic2V0X2ludGVyZmFjZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcy0+b3BlbmVkID0gMTsKQEAgLTY0OCw3ICs2NjQsNyBAQAogCiAJaWYgKCFzLT5yZW1vdmVfcGVuZGluZykgewogCQlpZiAodXNiX3NldF9pbnRlcmZhY2UgKHMtPnVzYmRldiwgX0RBQlVTQl9JRiwgMCkgPCAwKQotCQkJZXJyKCJzZXRfaW50ZXJmYWNlIGZhaWxlZCIpOworCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsICJzZXRfaW50ZXJmYWNlIGZhaWxlZFxuIik7CiAJfQogCWVsc2UKIAkJd2FrZV91cCAoJnMtPnJlbW92ZV9vayk7CkBAIC02NTcsNyArNjczLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkYWJ1c2JfaW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIGRhYnVzYl9pb2N0bCAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXBkYWJ1c2JfdCBzID0gKHBkYWJ1c2JfdCkgZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXBidWxrX3RyYW5zZmVyX3QgcGJ1bGs7CkBAIC02NjYsMTMgKzY4MiwxNyBAQAogCiAJZGJnKCJkYWJ1c2JfaW9jdGwiKTsKIAotCWlmIChzLT5yZW1vdmVfcGVuZGluZykKKwlsb2NrX2tlcm5lbCgpOworCWlmIChzLT5yZW1vdmVfcGVuZGluZykgeworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUlPOworCX0KIAogCW11dGV4X2xvY2soJnMtPm11dGV4KTsKIAogCWlmICghcy0+dXNiZGV2KSB7CiAJCW11dGV4X3VubG9jaygmcy0+bXV0ZXgpOworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtNzEzLDYgKzczMyw3IEBACiAJCWJyZWFrOwogCX0KIAltdXRleF91bmxvY2soJnMtPm11dGV4KTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzIxLDcgKzc0Miw3IEBACiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLmxsc2VlayA9CW5vX2xsc2VlaywKIAkucmVhZCA9CQlkYWJ1c2JfcmVhZCwKLQkuaW9jdGwgPQlkYWJ1c2JfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsID0JZGFidXNiX2lvY3RsLAogCS5vcGVuID0JCWRhYnVzYl9vcGVuLAogCS5yZWxlYXNlID0JZGFidXNiX3JlbGVhc2UsCiB9OwpAQCAtNzY0LDcgKzc4NSw3IEBACiAJcy0+ZGV2bnVtID0gaW50Zi0+bWlub3I7CiAKIAlpZiAodXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24gKHVzYmRldikgPCAwKSB7Ci0JCWVycigicmVzZXRfY29uZmlndXJhdGlvbiBmYWlsZWQiKTsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAicmVzZXRfY29uZmlndXJhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIHJlamVjdDsKIAl9CiAJaWYgKGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4MjEzMSkgewpAQCAtNzc1LDcgKzc5Niw3IEBACiAJCWRhYnVzYl9mcGdhX2Rvd25sb2FkIChzLCBOVUxMKTsKIAogCQlpZiAodXNiX3NldF9pbnRlcmZhY2UgKHMtPnVzYmRldiwgX0RBQlVTQl9JRiwgMCkgPCAwKSB7Ci0JCQllcnIoInNldF9pbnRlcmZhY2UgZmFpbGVkIik7CisJCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJzZXRfaW50ZXJmYWNlIGZhaWxlZFxuIik7CiAJCQlnb3RvIHJlamVjdDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKaW5kZXggZjEzMmUzMS4uMDEzMTMyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAogc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsKIAotc3RhdGljIGludCBlbTI4eHhfaXNvY19hdWRpb19kZWluaXQoc3RydWN0IGVtMjh4eCAqZGV2KQorc3RhdGljIGludCBlbTI4eHhfZGVpbml0X2lzb2NfYXVkaW8oc3RydWN0IGVtMjh4eCAqZGV2KQogewogCWludCBpOwogCkBAIC02Niw2ICs2Niw3IEBACiAJCQl1c2Jfa2lsbF91cmIoZGV2LT5hZGV2LnVyYltpXSk7CiAJCWVsc2UKIAkJCXVzYl91bmxpbmtfdXJiKGRldi0+YWRldi51cmJbaV0pOworCiAJCXVzYl9mcmVlX3VyYihkZXYtPmFkZXYudXJiW2ldKTsKIAkJZGV2LT5hZGV2LnVyYltpXSA9IE5VTEw7CiAKQEAgLTg3LDYgKzg4LDIwIEBACiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgIHN0cmlkZTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICAgKnJ1bnRpbWU7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOiAgICAgICAgICAgICAvKiBzdWNjZXNzICovCisJY2FzZSAtRVRJTUVET1VUOiAgICAvKiBOQUsgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDogICAvKiBraWxsICovCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJcmV0dXJuOworCWRlZmF1bHQ6ICAgICAgICAgICAgLyogZXJyb3IgKi8KKwkJZHByaW50aygidXJiIGNvbXBsZXRpdGlvbiBlcnJvciAlZC5cbiIsIHVyYi0+c3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCiAJaWYgKGRldi0+YWRldi5jYXB0dXJlX3BjbV9zdWJzdHJlYW0pIHsKIAkJc3Vic3RyZWFtID0gZGV2LT5hZGV2LmNhcHR1cmVfcGNtX3N1YnN0cmVhbTsKIAkJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKQEAgLTEzNyw5ICsxNTIsNiBAQAogCX0KIAl1cmItPnN0YXR1cyA9IDA7CiAKLQlpZiAoZGV2LT5hZGV2LnNodXRkb3duKQotCQlyZXR1cm47Ci0KIAlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWVtMjh4eF9lcnJkZXYoInJlc3VibWl0IG9mIGF1ZGlvIHVyYiBmYWlsZWQgKGVycm9yPSVpKVxuIiwKQEAgLTE5Nyw4ICsyMDksNyBAQAogCWZvciAoaSA9IDA7IGkgPCBFTTI4WFhfQVVESU9fQlVGUzsgaSsrKSB7CiAJCWVyckNvZGUgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmFkZXYudXJiW2ldLCBHRlBfQVRPTUlDKTsKIAkJaWYgKGVyckNvZGUpIHsKLQkJCWVtMjh4eF9pc29jX2F1ZGlvX2RlaW5pdChkZXYpOwotCisJCQllbTI4eHhfZGVpbml0X2lzb2NfYXVkaW8oZGV2KTsKIAkJCXJldHVybiBlcnJDb2RlOwogCQl9CiAJfQpAQCAtMjEzLDE0ICsyMjQsMTYgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBFTTI4WFhfQ0FQVFVSRV9TVFJFQU1fRU46Ci0JCWlmIChkZXYtPmFkZXYuY2FwdHVyZV9zdHJlYW0gPT0gU1RSRUFNX09GRiAmJiBhcmcgPT0gMSkgeworCQlpZiAoZGV2LT5hZGV2LmNhcHR1cmVfc3RyZWFtID09IFNUUkVBTV9PRkYgJiYKKwkJICAgIGFyZyA9PSBFTTI4WFhfU1RBUlRfQVVESU8pIHsKIAkJCWRldi0+YWRldi5jYXB0dXJlX3N0cmVhbSA9IFNUUkVBTV9PTjsKIAkJCWVtMjh4eF9pbml0X2F1ZGlvX2lzb2MoZGV2KTsKLQkJfSBlbHNlIGlmIChkZXYtPmFkZXYuY2FwdHVyZV9zdHJlYW0gPT0gU1RSRUFNX09OICYmIGFyZyA9PSAwKSB7CisJCX0gZWxzZSBpZiAoZGV2LT5hZGV2LmNhcHR1cmVfc3RyZWFtID09IFNUUkVBTV9PTiAmJgorCQkJICAgYXJnID09IEVNMjhYWF9TVE9QX0FVRElPKSB7CiAJCQlkZXYtPmFkZXYuY2FwdHVyZV9zdHJlYW0gPSBTVFJFQU1fT0ZGOwotCQkJZW0yOHh4X2lzb2NfYXVkaW9fZGVpbml0KGRldik7CisJCQllbTI4eHhfZGVpbml0X2lzb2NfYXVkaW8oZGV2KTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiQW4gdW5kZXJydW4gdmVyeSBsaWtlbHkgb2NjdXJyZWQuICIKKwkJCWVtMjh4eF9lcnJkZXYoIkFuIHVuZGVycnVuIHZlcnkgbGlrZWx5IG9jY3VycmVkLiAiCiAJCQkJCSJJZ25vcmluZyBpdC5cbiIpOwogCQl9CiAJCXJldHVybiAwOwpAQCAtMjM0LDcgKzI0Nyw3IEBACiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnMtPnJ1bnRpbWU7CiAKLQlkcHJpbnRrKCJBbG9jYXRpbmcgdmJ1ZmZlclxuIik7CisJZHByaW50aygiQWxsb2NhdGluZyB2YnVmZmVyXG4iKTsKIAlpZiAocnVudGltZS0+ZG1hX2FyZWEpIHsKIAkJaWYgKHJ1bnRpbWUtPmRtYV9ieXRlcyA+IHNpemUpCiAJCQlyZXR1cm4gMDsKQEAgLTMwMiw3ICszMTUsOSBAQAogCQlkcHJpbnRrKCJjaGFuZ2luZyBhbHRlcm5hdGUgbnVtYmVyIHRvIDdcbiIpOwogCX0KIAorCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJZGV2LT5hZGV2LnVzZXJzKys7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCiAJc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOwogCWRldi0+YWRldi5jYXB0dXJlX3BjbV9zdWJzdHJlYW0gPSBzdWJzdHJlYW07CkBAIC0zMTcsMjIgKzMzMiwxNSBAQAogc3RhdGljIGludCBzbmRfZW0yOHh4X3BjbV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0JZGV2LT5hZGV2LnVzZXJzLS07CiAKIAlkcHJpbnRrKCJjbG9zaW5nIGRldmljZVxuIik7CiAKIAlkZXYtPm11dGUgPSAxOwogCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJZGV2LT5hZGV2LnVzZXJzLS07CiAJZW0yOHh4X2F1ZGlvX2FuYWxvZ19zZXQoZGV2KTsKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKLQlpZiAoZGV2LT5hZGV2LnVzZXJzID09IDAgJiYgZGV2LT5hZGV2LnNodXRkb3duID09IDEpIHsKLQkJZHByaW50aygiYXVkaW8gdXNlcnM6ICVkXG4iLCBkZXYtPmFkZXYudXNlcnMpOwotCQlkcHJpbnRrKCJkaXNhYmxpbmcgYXVkaW8gc3RyZWFtIVxuIik7Ci0JCWRldi0+YWRldi5zaHV0ZG93biA9IDA7Ci0JCWRwcmludGsoInJlbGVhc2VkIGxvY2tcbiIpOwotCQllbTI4eHhfY21kKGRldiwgRU0yOFhYX0NBUFRVUkVfU1RSRUFNX0VOLCAwKTsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2Myw3ICszNzEsNyBAQAogCWRwcmludGsoIlN0b3AgY2FwdHVyZSwgaWYgbmVlZGVkXG4iKTsKIAogCWlmIChkZXYtPmFkZXYuY2FwdHVyZV9zdHJlYW0gPT0gU1RSRUFNX09OKQotCQllbTI4eHhfY21kKGRldiwgRU0yOFhYX0NBUFRVUkVfU1RSRUFNX0VOLCAwKTsKKwkJZW0yOHh4X2NtZChkZXYsIEVNMjhYWF9DQVBUVVJFX1NUUkVBTV9FTiwgRU0yOFhYX1NUT1BfQVVESU8pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNzcsMzMgKzM4NSw0MCBAQAogCQkJCSAgICAgIGludCBjbWQpCiB7CiAJc3RydWN0IGVtMjh4eCAqZGV2ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCByZXR2YWw7CiAKLQlkcHJpbnRrKCJTaG91bGQgJXMgY2FwdHVyZVxuIiwgKGNtZCA9PSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVCk/Ci0JCQkJICAgICAgICJzdGFydCI6ICJzdG9wIik7CisJZHByaW50aygiU2hvdWxkICVzIGNhcHR1cmVcbiIsIChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RBUlQpID8KKwkJCQkgICAgICAgInN0YXJ0IiA6ICJzdG9wIik7CisKKwlzcGluX2xvY2soJmRldi0+YWRldi5zbG9jayk7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgotCQllbTI4eHhfY21kKGRldiwgRU0yOFhYX0NBUFRVUkVfU1RSRUFNX0VOLCAxKTsKLQkJcmV0dXJuIDA7CisJCWVtMjh4eF9jbWQoZGV2LCBFTTI4WFhfQ0FQVFVSRV9TVFJFQU1fRU4sIEVNMjhYWF9TVEFSVF9BVURJTyk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKLQkJZGV2LT5hZGV2LnNodXRkb3duID0gMTsKLQkJcmV0dXJuIDA7CisJCWVtMjh4eF9jbWQoZGV2LCBFTTI4WFhfQ0FQVFVSRV9TVFJFQU1fRU4sIEVNMjhYWF9TVE9QX0FVRElPKTsKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHZhbCA9IC1FSU5WQUw7CiAJfQorCisJc3Bpbl91bmxvY2soJmRldi0+YWRldi5zbG9jayk7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF9lbTI4eHhfY2FwdHVyZV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbQogCQkJCQkJICAgICpzdWJzdHJlYW0pCiB7Ci0gICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGVtMjh4eCAqZGV2OwogCXNuZF9wY21fdWZyYW1lc190IGh3cHRyX2RvbmU7CiAKIAlkZXYgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0gICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+YWRldi5zbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmFkZXYuc2xvY2ssIGZsYWdzKTsKIAlod3B0cl9kb25lID0gZGV2LT5hZGV2Lmh3cHRyX2RvbmVfY2FwdHVyZTsKLSAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmFkZXYuc2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmFkZXYuc2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBod3B0cl9kb25lOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwppbmRleCAzYjNjYTNmLi4wZjQ4YzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwpAQCAtMTIyLDYgKzEyMiwyMiBAQAogCXsgIC0xLAkJCS0xLAkJLTEsCQktMX0sCiB9OwogCisvKiBNdXRlL3VubXV0ZSAqLworc3RhdGljIHN0cnVjdCBlbTI4eHhfcmVnX3NlcSBjb21wcm9fdW5tdXRlX3R2X2dwaW9bXSA9IHsKKwl7RU0yOFhYX1IwOF9HUElPLAk1LAkJNywJCTEwfSwKKwl7ICAtMSwJCQktMSwJCS0xLAkJLTF9LAorfTsKKworc3RhdGljIHN0cnVjdCBlbTI4eHhfcmVnX3NlcSBjb21wcm9fdW5tdXRlX3N2aWRfZ3Bpb1tdID0geworCXtFTTI4WFhfUjA4X0dQSU8sCTQsCQk3LAkJMTB9LAorCXsgIC0xLAkJCS0xLAkJLTEsCQktMX0sCit9OworCitzdGF0aWMgc3RydWN0IGVtMjh4eF9yZWdfc2VxIGNvbXByb19tdXRlX2dwaW9bXSA9IHsKKwl7RU0yOFhYX1IwOF9HUElPLAk2LAkJNywJCTEwfSwKKwl7ICAtMSwJCQktMSwJCS0xLAkJLTF9LAorfTsKKwogLyoKICAqICBCb2FyZCBkZWZpbml0aW9ucwogICovCkBAIC0xODMsNiArMTk5LDI1IEBACiAJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCiAJfSwKKwlbRU0yODIwX0JPQVJEX0dBRE1FSV9UVlIyMDBdID0geworCQkubmFtZSAgICAgICAgID0gIkdhZG1laSBUVlIyMDAiLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfTEdfUEFMX05FV19UQVBDLAorCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMVgsCisJCS5pbnB1dCAgICAgICAgPSB7IHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTIsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9TVklERU8zLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJfSB9LAorCX0sCiAJW0VNMjgyMF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZXzI1MF0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiVGVycmF0ZWMgQ2luZXJneSAyNTAgVVNCIiwKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKQEAgLTIyNSw3ICsyNjAsNyBAQAogCQkubmFtZSAgICAgICAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgMiIsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIzNl9NSzMsCiAJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQgfAotCQkJCVREQTk4ODdfUE9SVDFfQUNUSVZFfAorCQkJCVREQTk4ODdfUE9SVDFfQUNUSVZFIHwKIAkJCQlUREE5ODg3X1BPUlQyX0FDVElWRSwKIAkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAogCQkuaGFzX21zcDM0eHggID0gMSwKQEAgLTM1MCwyNiArMzg1LDYgQEAKIAkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAogCQl9IH0sCiAJfSwKLQlbRU0yODIxX0JPQVJEX1BST0xJTktfUExBWVRWX1VTQjJdID0gewotCQkubmFtZSAgICAgICAgID0gIlNJSUcgQVZUdW5lci1QVlIvUHJvbGluayBQbGF5VFYgVVNCIDIuMCIsCi0JCS52YWxpZCAgICAgICAgPSBFTTI4WFhfQk9BUkRfTk9UX1ZBTElEQVRFRCwKLQkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywJLyogdW5rbm93bj8gKi8KLQkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwJLyogdW5rbm93bj8gKi8KLQkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAotCQkuaW5wdXQgICAgICAgID0geyB7Ci0JCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAotCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUyLAotCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKLQkJfSwgewotCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKLQkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMCwKLQkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCi0JCX0sIHsKLQkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKLQkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKLQkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCi0JCX0gfSwKLQl9LAogCVtFTTI4MjFfQk9BUkRfU1VQRVJDT01QX1VTQl8yXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJTdXBlcmNvbXAgVVNCIDIuMCBUViIsCiAJCS52YWxpZCAgICAgICAgPSBFTTI4WFhfQk9BUkRfTk9UX1ZBTElEQVRFRCwKQEAgLTQ5OCw3ICs1MTMsNyBAQAogCX0sCiAJW0VNMjg2MV9CT0FSRF9ZQUtVTU9fTU9WSUVfTUlYRVJdID0gewogCQkubmFtZSAgICAgICAgICA9ICJZYWt1bW8gTW92aWVNaXhlciIsCi0JCS50dW5lcl90eXBlICAgPSBUVU5FUl9BQlNFTlQsCS8qIENhcHR1cmUgb25seSBkZXZpY2UgKi8KKwkJLnR1bmVyX3R5cGUgICAgPSBUVU5FUl9BQlNFTlQsCS8qIENhcHR1cmUgb25seSBkZXZpY2UgKi8KIAkJLmRlY29kZXIgICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKIAkJLmlucHV0ICAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCkBAIC02MDQsNiArNjE5LDcgQEAKIAkJLm10c19maXJtd2FyZSA9IDEsCiAJCS5oYXNfZHZiICAgICAgPSAxLAogCQkuZHZiX2dwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfZGlnaXRhbCwKKwkJLmlyX2NvZGVzICAgICA9IGlyX2NvZGVzX2hhdXBwYXVnZV9uZXcsCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKIAkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKQEAgLTYyOCw2ICs2NDQsNyBAQAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LAogCQkudHVuZXJfZ3BpbyAgID0gZGVmYXVsdF90dW5lcl9ncGlvLAogCQkubXRzX2Zpcm13YXJlID0gMSwKKwkJLmlyX2NvZGVzICAgICA9IGlyX2NvZGVzX2hhdXBwYXVnZV9uZXcsCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKIAkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKQEAgLTg0MiwxMSArODU5LDExIEBACiAJCX0gfSwKIAl9LAogCVtFTTI4MDBfQk9BUkRfR1JBQkJFRVhfVVNCMjgwMF0gPSB7Ci0JCS5uYW1lICAgICAgICAgPSAiZU1QSUEgVGVjaG5vbG9neSwgSW5jLiBHcmFiQmVlWCsgVmlkZW8gRW5jb2RlciIsCi0JCS5pc19lbTI4MDAgICAgPSAxLAotCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMVgsCi0JCS50dW5lcl90eXBlICAgPSBUVU5FUl9BQlNFTlQsIC8qIGNhcHR1cmUgb25seSBib2FyZCAqLwotCQkuaW5wdXQgICAgICAgID0geyB7CisJCS5uYW1lICAgICAgID0gImVNUElBIFRlY2hub2xvZ3ksIEluYy4gR3JhYkJlZVgrIFZpZGVvIEVuY29kZXIiLAorCQkuaXNfZW0yODAwICA9IDEsCisJCS5kZWNvZGVyICAgID0gRU0yOFhYX1NBQTcxMVgsCisJCS50dW5lcl90eXBlID0gVFVORVJfQUJTRU5ULCAvKiBjYXB0dXJlIG9ubHkgYm9hcmQgKi8KKwkJLmlucHV0ICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCiAJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLApAQCAtODk3LDcgKzkxNCw3IEBACiAJCX0gfSwKIAl9LAogCVtFTTI4MjBfQk9BUkRfUElOTkFDTEVfRFZDXzkwXSA9IHsKLQkJLm5hbWUgICAgICAgICA9ICJQaW5uYWNsZSBEYXp6bGUgRFZDIDkwL0RWQyAxMDAiLAorCQkubmFtZSAgICAgICAgID0gIlBpbm5hY2xlIERhenpsZSBEVkMgOTAvMTAwLzEwMS8xMDcgLyBLYWlzZXIgQmFhcyBWaWRlbyB0byBEVkQgbWFrZXIiLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfQUJTRU5ULCAvKiBjYXB0dXJlIG9ubHkgYm9hcmQgKi8KIAkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAogCQkuaW5wdXQgICAgICAgID0geyB7CkBAIC05NTIsNyArOTY5LDcgQEAKIAkJfSB9LAogCX0sCiAJW0VNMjgyMF9CT0FSRF9QUk9MSU5LX1BMQVlUVl9VU0IyXSA9IHsKLQkJLm5hbWUgICAgICAgICA9ICJQaXhlbHZpZXcgUHJvbGluayBQbGF5VFYgVVNCIDIuMCIsCisJCS5uYW1lICAgICAgICAgPSAiU0lJRyBBVlR1bmVyLVBWUiAvIFBpeGVsdmlldyBQcm9saW5rIFBsYXlUViBVU0IgMi4wIiwKIAkJLmhhc19zbmFwc2hvdF9idXR0b24gPSAxLAogCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWU1FQ19UVkZfNTUzM01GLApAQCAtMTE5OCw3ICsxMjE1LDkgQEAKIAkJLmhhc19kdmIgICAgICA9IDEsCiAJCS5kdmJfZ3BpbyAgICAgPSBrd29ybGRfMzMwdV9kaWdpdGFsLAogCQkueGNsayAgICAgICAgICAgICA9IEVNMjhYWF9YQ0xLX0ZSRVFVRU5DWV8xMk1IWiwKLQkJLmkyY19zcGVlZCAgICAgICAgPSBFTTI4WFhfSTJDX0NMS19XQUlUX0VOQUJMRSB8IEVNMjhYWF9JMkNfRUVQUk9NX09OX0JPQVJEIHwgRU0yOFhYX0kyQ19FRVBST01fS0VZX1ZBTElELAorCQkuaTJjX3NwZWVkICAgICAgICA9IEVNMjhYWF9JMkNfQ0xLX1dBSVRfRU5BQkxFIHwKKwkJCQkgICAgRU0yOFhYX0kyQ19FRVBST01fT05fQk9BUkQgfAorCQkJCSAgICBFTTI4WFhfSTJDX0VFUFJPTV9LRVlfVkFMSUQsCiAJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCkBAIC0xMjIzLDIxICsxMjQyLDg4IEBACiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9MR19QQUxfTkVXX1RBUEMsCiAJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKKwkJLmFkZWNvZGVyICAgICA9IEVNMjhYWF9UVkFVRElPLAorCQkubXV0ZV9ncGlvICAgID0gY29tcHJvX211dGVfZ3BpbywKIAkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAorCQkJLmdwaW8gICAgID0gY29tcHJvX3VubXV0ZV90dl9ncGlvLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCQkuZ3BpbyAgICAgPSBjb21wcm9fdW5tdXRlX3N2aWRfZ3BpbywKKwkJfSB9LAorCX0sCisJW0VNMjg2MF9CT0FSRF9LQUlPTVlfVFZOUENfVTJdID0geworCQkubmFtZQkgICAgICA9ICJLYWlvbXkgVFZuUEMgVTIiLAorCQkudmNoYW5uZWxzICAgID0gMywKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDMjAyOCwKKwkJLnR1bmVyX2FkZHIgICA9IDB4NjEsCisJCS5tdHNfZmlybXdhcmUgPSAxLAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCisJCS50dW5lcl9ncGlvICAgPSBkZWZhdWx0X3R1bmVyX2dwaW8sCisJCS5pcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19rYWlvbXksCisJCS5pbnB1dCAgICAgICAgICA9IHsgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAorCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTEsCiAJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKIAkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0gfSwKKwkJLnJhZGlvCQk9IHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9SQURJTywKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCX0KKwl9LAorCVtFTTI4NjBfQk9BUkRfRUFTWUNBUF0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiRWFzeSBDYXAgQ2FwdHVyZSBEQy02MCIsCisJCS52Y2hhbm5lbHMgICAgPSAyLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfQUJTRU5ULAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMVgsCisJCS5pbnB1dCAgICAgICAgICAgPSB7IHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSBTQUE3MTE1X1NWSURFTzMsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQl9IH0sCisJfSwKKwlbRU0yODIwX0JPQVJEX0lPREFUQV9HVk1WUF9TWl0gPSB7CisJCS5uYW1lICAgICAgID0gIklPLURBVEEgR1YtTVZQL1NaIiwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMywKKwkJLnR1bmVyX2dwaW8gICA9IGRlZmF1bHRfdHVuZXJfZ3BpbywKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAorCQkuaW5wdXQgICAgICAgID0geyB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCisJCX0sIHsgLyogQ29tcG9zaXRlIGhhcyBub3QgYmVlbiB0ZXN0ZWQgeWV0ICovCisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCisJCX0sIHsgLyogUy12aWRlbyBoYXMgbm90IGJlZW4gdGVzdGVkIHlldCAqLworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9TVklERU8sCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTywKKwkJfSB9LAogCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGVtMjh4eF9iY291bnQgPSBBUlJBWV9TSVpFKGVtMjh4eF9ib2FyZHMpOwogCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCi1zdHJ1Y3QgdXNiX2RldmljZV9pZCBlbTI4eHhfaWRfdGFibGUgW10gPSB7CitzdHJ1Y3QgdXNiX2RldmljZV9pZCBlbTI4eHhfaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweDI3NTApLAogCQkJLmRyaXZlcl9pbmZvID0gRU0yNzUwX0JPQVJEX1VOS05PV04gfSwKIAl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweDI3NTEpLApAQCAtMTI2MCw2ICsxMzQ2LDggQEAKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9VTktOT1dOIH0sCiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHhlMzAwKSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjg2MV9CT0FSRF9LV09STERfUFZSVFZfMzAwVSB9LAorCXsgVVNCX0RFVklDRSgweGViMWEsIDB4ZTMwMyksCisJCQkuZHJpdmVyX2luZm8gPSBFTTI4NjBfQk9BUkRfS0FJT01ZX1RWTlBDX1UyIH0sCiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHhlMzA1KSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjg4MF9CT0FSRF9LV09STERfRFZCXzMwNVUgfSwKIAl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweGUzMTApLApAQCAtMTI3OCw2ICsxMzY2LDggQEAKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjgwMF9CT0FSRF9HUkFCQkVFWF9VU0IyODAwIH0sCiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHhlMzU3KSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjg3MF9CT0FSRF9LV09STERfMzU1VSB9LAorCXsgVVNCX0RFVklDRSgweDFiODAsIDB4ZTMwMiksCisJCQkuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfUElOTkFDTEVfRFZDXzkwIH0sIC8qIEthaXNlciBCYWFzIFZpZGVvIHRvIERWRCBtYWtlciAqLwogCXsgVVNCX0RFVklDRSgweDBjY2QsIDB4MDAzNiksCiAJCQkuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8yNTAgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwY2NkLCAweDAwNGMpLApAQCAtMTMzMCw2ICsxNDIwLDggQEAKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjgwMF9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfVVNCSUkgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwOTNiLCAweGEwMDUpLAogCQkJLmRyaXZlcl9pbmZvID0gRU0yODYxX0JPQVJEX1BMRVhUT1JfUFhfVFYxMDBVIH0sCisJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwNTE1KSwKKwkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9JT0RBVEFfR1ZNVlBfU1ogfSwKIAl7IH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGVtMjh4eF9pZF90YWJsZSk7CkBAIC0xMzM3LDcgKzE0MjksNyBAQAogLyoKICAqIEVFUFJPTSBoYXNoIHRhYmxlIGZvciBkZXZpY2VzIHdpdGggZ2VuZXJpYyBVU0IgSURzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZW0yOHh4X2hhc2hfdGFibGUgZW0yOHh4X2VlcHJvbV9oYXNoIFtdID0geworc3RhdGljIHN0cnVjdCBlbTI4eHhfaGFzaF90YWJsZSBlbTI4eHhfZWVwcm9tX2hhc2hbXSA9IHsKIAkvKiBQL046IFNBIDYwMDAyMDcwNDY1IFR1bmVyOiBUVkY3NTMzLU1GICovCiAJezB4NmNlMDVhOGYsIEVNMjgyMF9CT0FSRF9QUk9MSU5LX1BMQVlUVl9VU0IyLCBUVU5FUl9ZTUVDX1RWRl81NTMzTUZ9LAogCXsweDcyY2M1YThiLCBFTTI4MjBfQk9BUkRfUFJPTElOS19QTEFZVFZfQk9YNF9VU0IyLCBUVU5FUl9ZTUVDX1RWRl81NTMzTUZ9LApAQCAtMTM0OSw2ICsxNDQxLDcgQEAKIAl7MHhiMDZhMzJjMywgRU0yODAwX0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMjAwLCBUVU5FUl9MR19QQUxfTkVXX1RBUEN9LAogCXsweGY1MTIwMGUzLCBFTTI4MDBfQk9BUkRfVkdFQVJfUE9DS0VUVFYsIFRVTkVSX0xHX1BBTF9ORVdfVEFQQ30sCiAJezB4MWJhNTAwODAsIEVNMjg2MF9CT0FSRF9QT0lOVE5JWF9JTlRSQU9SQUxfQ0FNRVJBLCBUVU5FUl9BQlNFTlR9LAorCXsweGM1MTIwMGUzLCBFTTI4MjBfQk9BUkRfR0FETUVJX1RWUjIwMCwgVFVORVJfTEdfUEFMX05FV19UQVBDfSwKIH07CiAKIGludCBlbTI4eHhfdHVuZXJfY2FsbGJhY2sodm9pZCAqcHRyLCBpbnQgY29tcG9uZW50LCBpbnQgY29tbWFuZCwgaW50IGFyZykKQEAgLTEzNjgsNyArMTQ2MSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChlbTI4eHhfdHVuZXJfY2FsbGJhY2spOwogCi1zdGF0aWMgdm9pZCBpbmxpbmUgZW0yOHh4X3NldF9tb2RlbChzdHJ1Y3QgZW0yOHh4ICpkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgZW0yOHh4X3NldF9tb2RlbChzdHJ1Y3QgZW0yOHh4ICpkZXYpCiB7CiAJbWVtY3B5KCZkZXYtPmJvYXJkLCAmZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXSwgc2l6ZW9mKGRldi0+Ym9hcmQpKTsKIApAQCAtMTUwNCw2ICsxNTk3LDM0IEBACiAJCS8qIGVuYWJsZXMgYXVkaW8gZm9yIHRoYXQgZGV2aWNlcyAqLwogCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwOF9HUElPLCAweGZkKTsKIAkJYnJlYWs7CisKKwljYXNlIEVNMjg2MF9CT0FSRF9LQUlPTVlfVFZOUENfVTI6CisJCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IwRl9YQ0xLLCAiXHgwNyIsIDEpOworCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMDZfSTJDX0NMSywgIlx4NDAiLCAxKTsKKwkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDBkLCAiXHg0MiIsIDEpOworCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDgsICJceGZkIiwgMSk7CisJCW1zbGVlcCgxMCk7CisJCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwOCwgIlx4ZmYiLCAxKTsKKwkJbXNsZWVwKDEwKTsKKwkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHg3ZiIsIDEpOworCQltc2xlZXAoMTApOworCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDgsICJceDZiIiwgMSk7CisKKwkJYnJlYWs7CisJY2FzZSBFTTI4NjBfQk9BUkRfRUFTWUNBUDoKKwkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHhmOCIsIDEpOworCQlicmVhazsKKworCWNhc2UgRU0yODIwX0JPQVJEX0lPREFUQV9HVk1WUF9TWjoKKwkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMDhfR1BJTywgMHhmZik7CisJCW1zbGVlcCg3MCk7CisJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjA4X0dQSU8sIDB4ZjcpOworCQltc2xlZXAoMTApOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwOF9HUElPLCAweGZlKTsKKwkJbXNsZWVwKDcwKTsKKwkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMDhfR1BJTywgMHhmZCk7CisJCW1zbGVlcCg3MCk7CisJCWJyZWFrOwogCX0KIAogCWVtMjh4eF9ncGlvX3NldChkZXYsIGRldi0+Ym9hcmQudHVuZXJfZ3Bpbyk7CkBAIC0xNjEwLDcgKzE3MzEsNyBAQAogCQkJZW0yOHh4X2VycmRldigiSWYgdGhlIGJvYXJkIHdlcmUgbWlzc2RldGVjdGVkLCAiCiAJCQkJICAgICAgInBsZWFzZSBlbWFpbCB0aGlzIGxvZyB0bzpcbiIpOwogCQkJZW0yOHh4X2VycmRldigiXHRWNEwgTWFpbGluZyBMaXN0ICIKLQkJCQkgICAgICAiIDx2aWRlbzRsaW51eC1saXN0QHJlZGhhdC5jb20+XG4iKTsKKwkJCQkgICAgICAiIDxsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmc+XG4iKTsKIAkJCWVtMjh4eF9lcnJkZXYoIkJvYXJkIGRldGVjdGVkIGFzICVzXG4iLAogCQkJCSAgICAgIGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0ubmFtZSk7CiAKQEAgLTE2NDIsNyArMTc2Myw3IEBACiAJCQllbTI4eHhfZXJyZGV2KCJJZiB0aGUgYm9hcmQgd2VyZSBtaXNzZGV0ZWN0ZWQsICIKIAkJCQkgICAgICAicGxlYXNlIGVtYWlsIHRoaXMgbG9nIHRvOlxuIik7CiAJCQllbTI4eHhfZXJyZGV2KCJcdFY0TCBNYWlsaW5nIExpc3QgIgotCQkJCSAgICAgICIgPHZpZGVvNGxpbnV4LWxpc3RAcmVkaGF0LmNvbT5cbiIpOworCQkJCSAgICAgICIgPGxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZz5cbiIpOwogCQkJZW0yOHh4X2VycmRldigiQm9hcmQgZGV0ZWN0ZWQgYXMgJXNcbiIsCiAJCQkJICAgICAgZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXS5uYW1lKTsKIApAQCAtMTY1NSw3ICsxNzc2LDcgQEAKIAllbTI4eHhfZXJyZGV2KCJZb3UgbWF5IHRyeSB0byB1c2UgY2FyZD08bj4gaW5zbW9kIG9wdGlvbiB0byAiCiAJCSAgICAgICJ3b3JrYXJvdW5kIHRoYXQuXG4iKTsKIAllbTI4eHhfZXJyZGV2KCJQbGVhc2Ugc2VuZCBhbiBlbWFpbCB3aXRoIHRoaXMgbG9nIHRvOlxuIik7Ci0JZW0yOHh4X2VycmRldigiXHRWNEwgTWFpbGluZyBMaXN0IDx2aWRlbzRsaW51eC1saXN0QHJlZGhhdC5jb20+XG4iKTsKKwllbTI4eHhfZXJyZGV2KCJcdFY0TCBNYWlsaW5nIExpc3QgPGxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZz5cbiIpOwogCWVtMjh4eF9lcnJkZXYoIkJvYXJkIGVlcHJvbSBoYXNoIGlzIDB4JTA4bHhcbiIsIGRldi0+aGFzaCk7CiAJZW0yOHh4X2VycmRldigiQm9hcmQgaTJjIGRldmljZWxpc3QgaGFzaCBpcyAweCUwOGx4XG4iLCBkZXYtPmkyY19oYXNoKTsKIApAQCAtMTgwMCw2ICsxOTIxLDggQEAKIAkJcmVxdWVzdF9tb2R1bGUoInR2cDUxNTAiKTsKIAlpZiAoZGV2LT5ib2FyZC50dW5lcl90eXBlICE9IFRVTkVSX0FCU0VOVCkKIAkJcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7CisJaWYgKGRldi0+Ym9hcmQuYWRlY29kZXIgPT0gRU0yOFhYX1RWQVVESU8pCisJCXJlcXVlc3RfbW9kdWxlKCJ0dmF1ZGlvIik7CiAjZW5kaWYKIAogCWVtMjh4eF9jb25maWdfdHVuZXIoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jCmluZGV4IDk0ZmIxYjYuLjhmMTk5OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYwpAQCAtMzMsOCArMzMsOCBAQAogLyogI2RlZmluZSBFTkFCTEVfREVCVUdfSVNPQ19GUkFNRVMgKi8KIAogc3RhdGljIHVuc2lnbmVkIGludCBjb3JlX2RlYnVnOwotbW9kdWxlX3BhcmFtKGNvcmVfZGVidWcsaW50LDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhjb3JlX2RlYnVnLCJlbmFibGUgZGVidWcgbWVzc2FnZXMgW2NvcmVdIik7Cittb2R1bGVfcGFyYW0oY29yZV9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY29yZV9kZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbY29yZV0iKTsKIAogI2RlZmluZSBlbTI4eHhfY29yZWRiZyhmbXQsIGFyZy4uLikgZG8ge1wKIAlpZiAoY29yZV9kZWJ1ZykgXApAQCAtNDIsOCArNDIsOCBAQAogCQkJIGRldi0+bmFtZSwgX19mdW5jX18gLCAjI2FyZyk7IH0gd2hpbGUgKDApCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmVnX2RlYnVnOwotbW9kdWxlX3BhcmFtKHJlZ19kZWJ1ZyxpbnQsMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJlZ19kZWJ1ZywiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFtVUkIgcmVnXSIpOworbW9kdWxlX3BhcmFtKHJlZ19kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocmVnX2RlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFtVUkIgcmVnXSIpOwogCiAjZGVmaW5lIGVtMjh4eF9yZWdkYmcoZm10LCBhcmcuLi4pIGRvIHtcCiAJaWYgKHJlZ19kZWJ1ZykgXApAQCAtNzcsNyArNzcsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChyZWdfZGVidWcpIHsKLQkJcHJpbnRrKCBLRVJOX0RFQlVHICIocGlwZSAweCUwOHgpOiAiCisJCXByaW50ayhLRVJOX0RFQlVHICIocGlwZSAweCUwOHgpOiAiCiAJCQkiSU46ICAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggIiwKIAkJCXBpcGUsCiAJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKQEAgLTE1NCw3ICsxNTQsNyBAQAogCWlmIChyZWdfZGVidWcpIHsKIAkJaW50IGJ5dGU7CiAKLQkJcHJpbnRrKCBLRVJOX0RFQlVHICIocGlwZSAweCUwOHgpOiAiCisJCXByaW50ayhLRVJOX0RFQlVHICIocGlwZSAweCUwOHgpOiAiCiAJCQkiT1VUOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggPj4+IiwKIAkJCXBpcGUsCiAJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCkBAIC0zNzgsNiArMzc4LDExIEBACiAJCX0KIAl9CiAKKwlpZiAoZGV2LT5ib2FyZC5tdXRlX2dwaW8gJiYgZGV2LT5tdXRlKQorCQllbTI4eHhfZ3Bpb19zZXQoZGV2LCBkZXYtPmJvYXJkLm11dGVfZ3Bpbyk7CisJZWxzZQorCQllbTI4eHhfZ3Bpb19zZXQoZGV2LCBJTlBVVChkZXYtPmN0bF9pbnB1dCktPmdwaW8pOworCiAJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ19iaXRzKGRldiwgRU0yOFhYX1IwRV9BVURJT1NSQywgaW5wdXQsIDB4YzApOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpAQCAtNDI0LDcgKzQyOSw3IEBACiAKIAl4Y2xrID0gZGV2LT5ib2FyZC54Y2xrICYgMHg3ZjsKIAlpZiAoIWRldi0+bXV0ZSkKLQkJeGNsayB8PSAweDgwOworCQl4Y2xrIHw9IEVNMjhYWF9YQ0xLX0FVRElPX1VOTVVURTsKIAogCXJldCA9IGVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjBGX1hDTEssIHhjbGspOwogCWlmIChyZXQgPCAwKQpAQCAtNDYyLDcgKzQ2Nyw4IEBACiAJCWlmIChkZXYtPmN0bF9hb3V0cHV0ICYgRU0yOFhYX0FPVVRfUENNX0lOKSB7CiAJCQlpbnQgc2VsID0gYWM5N19yZXR1cm5fcmVjb3JkX3NlbGVjdChkZXYtPmN0bF9hb3V0cHV0KTsKIAotCQkJLyogVXNlIHRoZSBzYW1lIGlucHV0IGZvciBib3RoIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzICovCisJCQkvKiBVc2UgdGhlIHNhbWUgaW5wdXQgZm9yIGJvdGggbGVmdCBhbmQgcmlnaHQKKwkJCSAgIGNoYW5uZWxzICovCiAJCQlzZWwgfD0gKHNlbCA8PCA4KTsKIAogCQkJZW0yOHh4X3dyaXRlX2FjOTcoZGV2LCBBQzk3X1JFQ09SRF9TRUxFQ1QsIHNlbCk7CkBAIC02OTgsNyArNzA0LDcgQEAKIAkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjMyX1ZTQ0FMRUxPVywgKGNoYXIgKilidWYsIDIpOwogCQkvKiBpdCBzZWVtcyB0aGF0IGJvdGggSCBhbmQgViBzY2FsZXJzIG11c3QgYmUgYWN0aXZlCiAJCSAgIHRvIHdvcmsgY29ycmVjdGx5ICovCi0JCW1vZGUgPSAoaCB8fCB2KT8gMHgzMDogMHgwMDsKKwkJbW9kZSA9IChoIHx8IHYpID8gMHgzMCA6IDB4MDA7CiAJfQogCXJldHVybiBlbTI4eHhfd3JpdGVfcmVnX2JpdHMoZGV2LCBFTTI4WFhfUjI2X0NPTVBSLCBtb2RlLCAweDMwKTsKIH0KQEAgLTgyNyw2ICs4MzMsMTkgQEAKIAlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBjb250YWluZXJfb2YoZG1hX3EsIHN0cnVjdCBlbTI4eHgsIHZpZHEpOwogCWludCByYywgaTsKIAorCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6ICAgICAgICAgICAgIC8qIHN1Y2Nlc3MgKi8KKwljYXNlIC1FVElNRURPVVQ6ICAgIC8qIE5BSyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOiAgIC8qIGtpbGwgKi8KKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQlyZXR1cm47CisJZGVmYXVsdDogICAgICAgICAgICAvKiBlcnJvciAqLworCQllbTI4eHhfaXNvY2RiZygidXJiIGNvbXBsZXRpdGlvbiBlcnJvciAlZC5cbiIsIHVyYi0+c3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCiAJLyogQ29weSBkYXRhIGZyb20gVVJCICovCiAJc3Bpbl9sb2NrKCZkZXYtPnNsb2NrKTsKIAlyYyA9IGRldi0+aXNvY19jdGwuaXNvY19jb3B5KGRldiwgdXJiKTsKQEAgLTk0NSw3ICs5NjQsNyBAQAogCQkJZW0yOHh4X2VycigidW5hYmxlIHRvIGFsbG9jYXRlICVpIGJ5dGVzIGZvciB0cmFuc2ZlciIKIAkJCQkJIiBidWZmZXIgJWklc1xuIiwKIAkJCQkJc2Jfc2l6ZSwgaSwKLQkJCQkJaW5faW50ZXJydXB0KCk/IiB3aGlsZSBpbiBpbnQiOiIiKTsKKwkJCQkJaW5faW50ZXJydXB0KCkgPyAiIHdoaWxlIGluIGludCIgOiAiIik7CiAJCQllbTI4eHhfdW5pbml0X2lzb2MoZGV2KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CkBAIC05NjMsNyArOTgyLDcgQEAKIAkJCQkgZW0yOHh4X2lycV9jYWxsYmFjaywgZG1hX3EsIDEpOwogCiAJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBtYXhfcGFja2V0czsKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUCB8IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwogCiAJCWsgPSAwOwogCQlmb3IgKGogPSAwOyBqIDwgbWF4X3BhY2tldHM7IGorKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jCmluZGV4IDlhZDg1MjcuLmZjZDI1NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMKQEAgLTI5LDkgKzI5LDYgQEAKICNpbmNsdWRlICJsZ2R0MzMweC5oIgogI2luY2x1ZGUgInpsMTAzNTMuaCIKICNpbmNsdWRlICJzNWgxNDA5LmgiCi0jaWZkZWYgRU0yOFhYX0RSWDM5N1hEX1NVUFBPUlQKLSNpbmNsdWRlICJkcngzOTd4RC5oIgotI2VuZGlmCiAKIE1PRFVMRV9ERVNDUklQVElPTigiZHJpdmVyIGZvciBlbTI4eHggYmFzZWQgRFZCIGNhcmRzIik7CiBNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYwppbmRleCBkNjlmMGVmLi4wMmMxMmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWkyYy5jCkBAIC00MDIsMTAgKzQwMiwxMiBAQAogCQkJCSBkZXYtPm5hbWUpOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOlx0STJTIGF1ZGlvLCBzYW1wbGUgcmF0ZT0zMmtcbiIsIGRldi0+bmFtZSk7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOlx0STJTIGF1ZGlvLCBzYW1wbGUgcmF0ZT0zMmtcbiIsCisJCQkJIGRldi0+bmFtZSk7CiAJCWJyZWFrOwogCWNhc2UgMzoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6XHRJMlMgYXVkaW8sIDMgc2FtcGxlIHJhdGVzXG4iLCBkZXYtPm5hbWUpOworCQlwcmludGsoS0VSTl9JTkZPICIlczpcdEkyUyBhdWRpbywgMyBzYW1wbGUgcmF0ZXNcbiIsCisJCQkJIGRldi0+bmFtZSk7CiAJCWJyZWFrOwogCX0KIApAQCAtNTA4LDEyICs1MTAsMTcgQEAKIAkJZHByaW50azEoMSwgImF0dGFjaF9pbmZvcm06IHR2cDUxNTAgZGV0ZWN0ZWQuXG4iKTsKIAkJYnJlYWs7CiAKKwljYXNlIDB4YjA6CisJCWRwcmludGsxKDEsICJhdHRhY2hfaW5mb3JtOiB0ZGE5ODc0IGRldGVjdGVkXG4iKTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlpZiAoIWRldi0+dHVuZXJfYWRkcikKIAkJCWRldi0+dHVuZXJfYWRkciA9IGNsaWVudC0+YWRkcjsKIAogCQlkcHJpbnRrMSgxLCAiYXR0YWNoIGluZm9ybTogZGV0ZWN0ZWQgSTJDIGFkZHJlc3MgJXhcbiIsCiAJCQkJY2xpZW50LT5hZGRyIDw8IDEpOworCQlkcHJpbnRrMSgxLCAiZHJpdmVyIGlkICVkXG4iLCBjbGllbnQtPmRyaXZlci0+aWQpOwogCiAJfQogCkBAIC01NTIsNiArNTU5LDcgQEAKIAlbMHg4MCA+PiAxXSA9ICJtc3AzNHh4IiwKIAlbMHg4OCA+PiAxXSA9ICJtc3AzNHh4IiwKIAlbMHhhMCA+PiAxXSA9ICJlZXByb20iLAorCVsweGIwID4+IDFdID0gInRkYTk4NzQiLAogCVsweGI4ID4+IDFdID0gInR2cDUxNTBhIiwKIAlbMHhiYSA+PiAxXSA9ICJ0dnA1MTUwYSIsCiAJWzB4YzAgPj4gMV0gPSAidHVuZXIgKGFuYWxvZykiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYwppbmRleCAwNDQzYWZlLi5hNWFiZmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYwpAQCAtNjgsOCArNjgsNyBAQAogCiAJLyogcG9sbCBleHRlcm5hbCBkZWNvZGVyICovCiAJaW50IHBvbGxpbmc7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCXVuc2lnbmVkIGludCBsYXN0X3RvZ2dsZToxOwogCXVuc2lnbmVkIGludCBsYXN0X3JlYWRjb3VudDsKIAl1bnNpZ25lZCBpbnQgcmVwZWF0X2ludGVydmFsOwpAQCAtMjkyLDMyICsyOTEsMjMgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIGlyX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgZW0yOHh4X0lSICppciA9IChzdHJ1Y3QgZW0yOHh4X0lSICopZGF0YTsKLQotCXNjaGVkdWxlX3dvcmsoJmlyLT53b3JrKTsKLX0KLQogc3RhdGljIHZvaWQgZW0yOHh4X2lyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBlbTI4eHhfSVIgKmlyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlbTI4eHhfSVIsIHdvcmspOworCXN0cnVjdCBlbTI4eHhfSVIgKmlyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlbTI4eHhfSVIsIHdvcmsud29yayk7CiAKIAllbTI4eHhfaXJfaGFuZGxlX2tleShpcik7Ci0JbW9kX3RpbWVyKCZpci0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGlyLT5wb2xsaW5nKSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpci0+d29yaywgbXNlY3NfdG9famlmZmllcyhpci0+cG9sbGluZykpOwogfQogCiBzdGF0aWMgdm9pZCBlbTI4eHhfaXJfc3RhcnQoc3RydWN0IGVtMjh4eF9JUiAqaXIpCiB7Ci0Jc2V0dXBfdGltZXIoJmlyLT50aW1lciwgaXJfdGltZXIsICh1bnNpZ25lZCBsb25nKWlyKTsKLQlJTklUX1dPUksoJmlyLT53b3JrLCBlbTI4eHhfaXJfd29yayk7Ci0Jc2NoZWR1bGVfd29yaygmaXItPndvcmspOworCUlOSVRfREVMQVlFRF9XT1JLKCZpci0+d29yaywgZW0yOHh4X2lyX3dvcmspOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaXItPndvcmssIDApOwogfQogCiBzdGF0aWMgdm9pZCBlbTI4eHhfaXJfc3RvcChzdHJ1Y3QgZW0yOHh4X0lSICppcikKIHsKLQlkZWxfdGltZXJfc3luYygmaXItPnRpbWVyKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaXItPndvcmspOwogfQogCiBpbnQgZW0yOHh4X2lyX2luaXQoc3RydWN0IGVtMjh4eCAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwppbmRleCA4ZTYxYjJjLi41NzU0NzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwpAQCAtMTg2LDcgKzE4Niw4IEBACiAJCWVtMjh4eF9pc29jZGJnKCJPdmVyZmxvdyBvZiAlemkgYnl0ZXMgcGFzdCBidWZmZXIgZW5kICgxKVxuIiwKIAkJCSAgICAgICAoKGNoYXIgKilzdGFydHdyaXRlICsgbGVuY29weSkgLQogCQkJICAgICAgICgoY2hhciAqKW91dHAgKyBidWYtPnZiLnNpemUpKTsKLQkJbGVuY29weSA9IHJlbWFpbiA9IChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSAtIChjaGFyICopc3RhcnR3cml0ZTsKKwkJcmVtYWluID0gKGNoYXIgKilvdXRwICsgYnVmLT52Yi5zaXplIC0gKGNoYXIgKilzdGFydHdyaXRlOworCQlsZW5jb3B5ID0gcmVtYWluOwogCX0KIAlpZiAobGVuY29weSA8PSAwKQogCQlyZXR1cm47CkBAIC0yMDIsNyArMjAzLDggQEAKIAkJZWxzZQogCQkJbGVuY29weSA9IGJ5dGVzcGVybGluZTsKIAotCQlpZiAoKGNoYXIgKilzdGFydHdyaXRlICsgbGVuY29weSA+IChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSkgeworCQlpZiAoKGNoYXIgKilzdGFydHdyaXRlICsgbGVuY29weSA+IChjaGFyICopb3V0cCArCisJCSAgICBidWYtPnZiLnNpemUpIHsKIAkJCWVtMjh4eF9pc29jZGJnKCJPdmVyZmxvdyBvZiAlemkgYnl0ZXMgcGFzdCBidWZmZXIgZW5kICgyKVxuIiwKIAkJCQkgICAgICAgKChjaGFyICopc3RhcnR3cml0ZSArIGxlbmNvcHkpIC0KIAkJCQkgICAgICAgKChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSkpOwpAQCAtMzQ3LDcgKzM0OSw3IEBACiAJCX0KIAkJaWYgKHBbMF0gPT0gMHgyMiAmJiBwWzFdID09IDB4NWEpIHsKIAkJCWVtMjh4eF9pc29jZGJnKCJWaWRlbyBmcmFtZSAlZCwgbGVuZ3RoPSVpLCAlc1xuIiwgcFsyXSwKLQkJCQkgICAgICAgbGVuLCAocFsyXSAmIDEpPyAib2RkIiA6ICJldmVuIik7CisJCQkJICAgICAgIGxlbiwgKHBbMl0gJiAxKSA/ICJvZGQiIDogImV2ZW4iKTsKIAogCQkJaWYgKCEocFsyXSAmIDEpKSB7CiAJCQkJaWYgKGJ1ZiAhPSBOVUxMKQpAQCAtNDc2LDcgKzQ3OCw5IEBACiBzdGF0aWMgdm9pZAogYnVmZmVyX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQogewotCXN0cnVjdCBlbTI4eHhfYnVmZmVyICAgICpidWYgICAgID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgZW0yOHh4X2J1ZmZlciwgdmIpOworCXN0cnVjdCBlbTI4eHhfYnVmZmVyICAgICpidWYgICAgID0gY29udGFpbmVyX29mKHZiLAorCQkJCQkJCXN0cnVjdCBlbTI4eHhfYnVmZmVyLAorCQkJCQkJCXZiKTsKIAlzdHJ1Y3QgZW0yOHh4X2ZoICAgICAgICAqZmggICAgICA9IHZxLT5wcml2X2RhdGE7CiAJc3RydWN0IGVtMjh4eCAgICAgICAgICAgKmRldiAgICAgPSBmaC0+ZGV2OwogCXN0cnVjdCBlbTI4eHhfZG1hcXVldWUgICp2aWRxICAgID0gJmRldi0+dmlkcTsKQEAgLTQ4OSw3ICs0OTMsOSBAQAogc3RhdGljIHZvaWQgYnVmZmVyX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKIAkJCQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKIHsKLQlzdHJ1Y3QgZW0yOHh4X2J1ZmZlciAgICpidWYgID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgZW0yOHh4X2J1ZmZlciwgdmIpOworCXN0cnVjdCBlbTI4eHhfYnVmZmVyICAgKmJ1ZiAgPSBjb250YWluZXJfb2YodmIsCisJCQkJCQkgICAgc3RydWN0IGVtMjh4eF9idWZmZXIsCisJCQkJCQkgICAgdmIpOwogCXN0cnVjdCBlbTI4eHhfZmggICAgICAgKmZoICAgPSB2cS0+cHJpdl9kYXRhOwogCXN0cnVjdCBlbTI4eHggICAgICAgICAgKmRldiAgPSAoc3RydWN0IGVtMjh4eCAqKWZoLT5kZXY7CiAKQEAgLTUzNCw2ICs1NDAsMTMgQEAKIAkJCSZyb3V0ZSk7CiAJfQogCisJaWYgKGRldi0+Ym9hcmQuYWRlY29kZXIgIT0gRU0yOFhYX05PQURFQ09ERVIpIHsKKwkJcm91dGUuaW5wdXQgPSBkZXYtPmN0bF9haW5wdXQ7CisJCXJvdXRlLm91dHB1dCA9IGRldi0+Y3RsX2FvdXRwdXQ7CisJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsCisJCQkmcm91dGUpOworCX0KKwogCWVtMjh4eF9hdWRpb19hbmFsb2dfc2V0KGRldik7CiB9CiAKQEAgLTU1Nyw3ICs1NzAsNyBAQAogCiBzdGF0aWMgaW50IHJlc19jaGVjayhzdHJ1Y3QgZW0yOHh4X2ZoICpmaCkKIHsKLQlyZXR1cm4gKGZoLT5zdHJlYW1fb24pOworCXJldHVybiBmaC0+c3RyZWFtX29uOwogfQogCiBzdGF0aWMgdm9pZCByZXNfZnJlZShzdHJ1Y3QgZW0yOHh4X2ZoICpmaCkKQEAgLTc5MSw3ICs4MDQsNyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCB2aWRpb2Nfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICogbm9ybSkKK3N0YXRpYyBpbnQgdmlkaW9jX3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqbm9ybSkKIHsKIAlzdHJ1Y3QgZW0yOHh4X2ZoICAgKmZoICA9IHByaXY7CiAJc3RydWN0IGVtMjh4eCAgICAgICpkZXYgPSBmaC0+ZGV2OwpAQCAtMTAwOCw4ICsxMDIxLDEzIEBACiAKIAlpZiAoZGV2LT5ib2FyZC5oYXNfbXNwMzR4eCkKIAkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfR19DVFJMLCBjdHJsKTsKLQllbHNlCisJZWxzZSB7CiAJCXJjID0gZW0yOHh4X2dldF9jdHJsKGRldiwgY3RybCk7CisJCWlmIChyYyA8IDApIHsKKwkJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX0dfQ1RSTCwgY3RybCk7CisJCQlyYyA9IDA7CisJCX0KKwl9CiAKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJcmV0dXJuIHJjOwpAQCAtMTM0NSw3ICsxMzYzLDcgQEAKIAogCXN0cmxjcHkoY2FwLT5kcml2ZXIsICJlbTI4eHgiLCBzaXplb2YoY2FwLT5kcml2ZXIpKTsKIAlzdHJsY3B5KGNhcC0+Y2FyZCwgZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXS5uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7Ci0Jc3RybGNweShjYXAtPmJ1c19pbmZvLCBkZXZfbmFtZSgmZGV2LT51ZGV2LT5kZXYpLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOworCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOwogCiAJY2FwLT52ZXJzaW9uID0gRU0yOFhYX1ZFUlNJT05fQ09ERTsKIApAQCAtMTQzMSw3ICsxNDQ5LDcgQEAKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKLQlyZXR1cm4gKHZpZGVvYnVmX3JlcWJ1ZnMoJmZoLT52Yl92aWRxLCByYikpOworCXJldHVybiB2aWRlb2J1Zl9yZXFidWZzKCZmaC0+dmJfdmlkcSwgcmIpOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKQEAgLTE0NDUsNyArMTQ2Myw3IEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JcmV0dXJuICh2aWRlb2J1Zl9xdWVyeWJ1ZigmZmgtPnZiX3ZpZHEsIGIpKTsKKwlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoJmZoLT52Yl92aWRxLCBiKTsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpiKQpAQCAtMTQ1OCw3ICsxNDc2LDcgQEAKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKLQlyZXR1cm4gKHZpZGVvYnVmX3FidWYoJmZoLT52Yl92aWRxLCBiKSk7CisJcmV0dXJuIHZpZGVvYnVmX3FidWYoJmZoLT52Yl92aWRxLCBiKTsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKQEAgLTE0NzEsOCArMTQ4OSw3IEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JcmV0dXJuICh2aWRlb2J1Zl9kcWJ1ZigmZmgtPnZiX3ZpZHEsIGIsCi0JCQkJZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKTsKKwlyZXR1cm4gdmlkZW9idWZfZHFidWYoJmZoLT52Yl92aWRxLCBiLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CiB9CiAKICNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKQEAgLTE0OTYsNyArMTUxMyw3IEBACiAKIAlzdHJsY3B5KGNhcC0+ZHJpdmVyLCAiZW0yOHh4Iiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7CiAJc3RybGNweShjYXAtPmNhcmQsIGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0ubmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOwotCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgZGV2X25hbWUoJmRldi0+dWRldi0+ZGV2KSwgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKKwl1c2JfbWFrZV9wYXRoKGRldi0+dWRldiwgY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKIAogCWNhcC0+dmVyc2lvbiA9IEVNMjhYWF9WRVJTSU9OX0NPREU7CiAJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKQEAgLTE3ODEsNyArMTc5OCw3IEBACiAgKiBlbTI4eHhfdjRsMl9wb2xsKCkKICAqIHdpbGwgYWxsb2NhdGUgYnVmZmVycyB3aGVuIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUKICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBlbTI4eHhfdjRsMl9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICogd2FpdCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZW0yOHh4X3Y0bDJfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlzdHJ1Y3QgZW0yOHh4X2ZoICpmaCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBmaC0+ZGV2OwpAQCAtMTkzNCw4ICsxOTUxLDggQEAKIAogCiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSAqZW0yOHh4X3ZkZXZfaW5pdChzdHJ1Y3QgZW0yOHh4ICpkZXYsCi0JCQkJCSAgICAgY29uc3Qgc3RydWN0IHZpZGVvX2RldmljZSAqdGVtcGxhdGUsCi0JCQkJCSAgICAgY29uc3QgY2hhciAqdHlwZV9uYW1lKQorCQkJCQljb25zdCBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp0ZW1wbGF0ZSwKKwkJCQkJY29uc3QgY2hhciAqdHlwZV9uYW1lKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZDsKIApAQCAtMTk4NCw4ICsyMDAxLDkgQEAKIAkvKiBlbmFibGUgdmJpIGNhcHR1cmluZyAqLwogCiAvKgllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwRV9BVURJT1NSQywgMHhjMCk7IGF1ZGlvIHJlZ2lzdGVyICovCi0gICAgICAgdmFsID0gKHU4KWVtMjh4eF9yZWFkX3JlZyhkZXYsIEVNMjhYWF9SMEZfWENMSyk7Ci0gICAgICAgZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMEZfWENMSywgKEVNMjhYWF9YQ0xLX0FVRElPX1VOTVVURSB8IHZhbCkpOworCXZhbCA9ICh1OCllbTI4eHhfcmVhZF9yZWcoZGV2LCBFTTI4WFhfUjBGX1hDTEspOworCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjBGX1hDTEssCisJCQkgKEVNMjhYWF9YQ0xLX0FVRElPX1VOTVVURSB8IHZhbCkpOwogCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjExX1ZJTkNUUkwsIDB4NTEpOwogCiAJZW0yOHh4X3NldF9vdXRmbXQoZGV2KTsKQEAgLTIwMjAsNyArMjAzOCw4IEBACiAJfQogCiAJaWYgKGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0ucmFkaW8udHlwZSA9PSBFTTI4WFhfUkFESU8pIHsKLQkJZGV2LT5yYWRpb19kZXYgPSBlbTI4eHhfdmRldl9pbml0KGRldiwgJmVtMjh4eF9yYWRpb190ZW1wbGF0ZSwgInJhZGlvIik7CisJCWRldi0+cmFkaW9fZGV2ID0gZW0yOHh4X3ZkZXZfaW5pdChkZXYsICZlbTI4eHhfcmFkaW9fdGVtcGxhdGUsCisJCQkJCQkgICJyYWRpbyIpOwogCQlpZiAoIWRldi0+cmFkaW9fZGV2KSB7CiAJCQllbTI4eHhfZXJyZGV2KCJjYW5ub3QgYWxsb2NhdGUgdmlkZW9fZGV2aWNlLlxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKaW5kZXggZGQyY2QzNi4uYTMzYTU4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKQEAgLTcwLDcgKzcwLDYgQEAKICNkZWZpbmUgRU0yODIwX0JPQVJEX1ZJREVPTE9HWV8yMEsxNFhVU0IJICAzMAogI2RlZmluZSBFTTI4MjFfQk9BUkRfVVNCR0VBUl9WRDIwNAkJICAzMQogI2RlZmluZSBFTTI4MjFfQk9BUkRfU1VQRVJDT01QX1VTQl8yCQkgIDMyCi0jZGVmaW5lIEVNMjgyMV9CT0FSRF9QUk9MSU5LX1BMQVlUVl9VU0IyCSAgMzMKICNkZWZpbmUgRU0yODYwX0JPQVJEX1RFUlJBVEVDX0hZQlJJRF9YUwkJICAzNAogI2RlZmluZSBFTTI4NjBfQk9BUkRfVFlQSE9PTl9EVkRfTUFLRVIJCSAgMzUKICNkZWZpbmUgRU0yODYwX0JPQVJEX05FVEdNQkhfQ0FNCQkgIDM2CkBAIC05OCw2ICs5NywxMCBAQAogI2RlZmluZSBFTTI4MjBfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9GT1JZT1UJICA1OAogI2RlZmluZSBFTTI4ODNfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl84NTAJICA2MAogI2RlZmluZSBFTTI4MjBfQk9BUkRfUFJPTElOS19QTEFZVFZfQk9YNF9VU0IyCSAgNjEKKyNkZWZpbmUgRU0yODIwX0JPQVJEX0dBRE1FSV9UVlIyMDAJCSAgNjIKKyNkZWZpbmUgRU0yODYwX0JPQVJEX0tBSU9NWV9UVk5QQ19VMiAgICAgICAgICAgICAgNjMKKyNkZWZpbmUgRU0yODYwX0JPQVJEX0VBU1lDQVAgICAgICAgICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgRU0yODIwX0JPQVJEX0lPREFUQV9HVk1WUF9TWgkJICA2NQogCiAvKiBMaW1pdHMgbWluaW11bSBhbmQgZGVmYXVsdCBudW1iZXIgb2YgYnVmZmVycyAqLwogI2RlZmluZSBFTTI4WFhfTUlOX0JVRiA0CkBAIC0xMTAsNiArMTEzLDEwIEBACiAjZGVmaW5lIEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVEIDEKICNkZWZpbmUgRU0yOFhYX0JPQVJEX1ZBTElEQVRFRAkgICAwCiAKKy8qIFBhcmFtcyBmb3IgZW0yOHh4X2NtZCgpIGF1ZGlvICovCisjZGVmaW5lIEVNMjhYWF9TVEFSVF9BVURJTyAgICAgIDEKKyNkZWZpbmUgRU0yOFhYX1NUT1BfQVVESU8gICAgICAgMAorCiAvKiBtYXhpbXVtIG51bWJlciBvZiBlbTI4eHggYm9hcmRzICovCiAjZGVmaW5lIEVNMjhYWF9NQVhCT0FSRFMgNCAvKkZJWE1FOiBzaG91bGQgYmUgYmlnZ2VyICovCiAKQEAgLTE1NCw3ICsxNjEsOCBAQAogKi8KIAogLyogdGltZSB0byB3YWl0IHdoZW4gc3RvcHBpbmcgdGhlIGlzb2MgdHJhbnNmZXIgKi8KLSNkZWZpbmUgRU0yOFhYX1VSQl9USU1FT1VUICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoRU0yOFhYX05VTV9CVUZTICogRU0yOFhYX05VTV9QQUNLRVRTKQorI2RlZmluZSBFTTI4WFhfVVJCX1RJTUVPVVQgXAorCQkJbXNlY3NfdG9famlmZmllcyhFTTI4WFhfTlVNX0JVRlMgKiBFTTI4WFhfTlVNX1BBQ0tFVFMpCiAKIC8qIHRpbWUgaW4gbXNlY3MgdG8gd2FpdCBmb3IgaTJjIHdyaXRlcyB0byBmaW5pc2ggKi8KICNkZWZpbmUgRU0yODAwX0kyQ19XUklURV9USU1FT1VUIDIwCkBAIC0zNDgsNiArMzU2LDExIEBACiAJRU0yOFhYX1NBQTcxMVgsCiB9OwogCitlbnVtIGVtMjh4eF9hZGVjb2RlciB7CisJRU0yOFhYX05PQURFQ09ERVIgPSAwLAorCUVNMjhYWF9UVkFVRElPLAorfTsKKwogc3RydWN0IGVtMjh4eF9ib2FyZCB7CiAJY2hhciAqbmFtZTsKIAlpbnQgdmNoYW5uZWxzOwpAQCAtMzYxLDYgKzM3NCw3IEBACiAJc3RydWN0IGVtMjh4eF9yZWdfc2VxICpkdmJfZ3BpbzsKIAlzdHJ1Y3QgZW0yOHh4X3JlZ19zZXEgKnN1c3BlbmRfZ3BpbzsKIAlzdHJ1Y3QgZW0yOHh4X3JlZ19zZXEgKnR1bmVyX2dwaW87CisJc3RydWN0IGVtMjh4eF9yZWdfc2VxICptdXRlX2dwaW87CiAKIAl1bnNpZ25lZCBpbnQgaXNfZW0yODAwOjE7CiAJdW5zaWduZWQgaW50IGhhc19tc3AzNHh4OjE7CkBAIC0zNzMsNiArMzg3LDcgQEAKIAl1bnNpZ25lZCBjaGFyIHhjbGssIGkyY19zcGVlZDsKIAogCWVudW0gZW0yOHh4X2RlY29kZXIgZGVjb2RlcjsKKwllbnVtIGVtMjh4eF9hZGVjb2RlciBhZGVjb2RlcjsKIAogCXN0cnVjdCBlbTI4eHhfaW5wdXQgICAgICAgaW5wdXRbTUFYX0VNMjhYWF9JTlBVVF07CiAJc3RydWN0IGVtMjh4eF9pbnB1dAkgIHJhZGlvOwpAQCAtNDIwLDcgKzQzNSw3IEBACiAJdW5zaWduZWQgaW50IGh3cHRyX2RvbmVfY2FwdHVyZTsKIAlzdHJ1Y3Qgc25kX2NhcmQgICAgICAgICAgICAqc25kY2FyZDsKIAotCWludCB1c2Vycywgc2h1dGRvd247CisJaW50IHVzZXJzOwogCWVudW0gZW0yOHh4X3N0cmVhbV9zdGF0ZSBjYXB0dXJlX3N0cmVhbTsKIAlzcGlubG9ja190IHNsb2NrOwogfTsKQEAgLTUyMyw3ICs1MzgsOCBAQAogCWludCBudW1fYWx0OwkJLyogTnVtYmVyIG9mIGFsdGVybmF0aXZlIHNldHRpbmdzICovCiAJdW5zaWduZWQgaW50ICphbHRfbWF4X3BrdF9zaXplOwkvKiBhcnJheSBvZiB3TWF4UGFja2V0U2l6ZSAqLwogCXN0cnVjdCB1cmIgKnVyYltFTTI4WFhfTlVNX0JVRlNdOwkvKiB1cmIgZm9yIGlzb2MgdHJhbnNmZXJzICovCi0JY2hhciAqdHJhbnNmZXJfYnVmZmVyW0VNMjhYWF9OVU1fQlVGU107CS8qIHRyYW5zZmVyIGJ1ZmZlcnMgZm9yIGlzb2MgdHJhbnNmZXIgKi8KKwljaGFyICp0cmFuc2Zlcl9idWZmZXJbRU0yOFhYX05VTV9CVUZTXTsJLyogdHJhbnNmZXIgYnVmZmVycyBmb3IgaXNvYworCQkJCQkJICAgdHJhbnNmZXIgKi8KIAljaGFyIHVyYl9idWZbVVJCX01BWF9DVFJMX1NJWkVdOwkvKiB1cmIgY29udHJvbCBtc2cgYnVmZmVyICovCiAKIAkvKiBoZWxwZXIgZnVuY3MgdGhhdCBjYWxsIHVzYl9jb250cm9sX21zZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnCmluZGV4IGVlNmE2OTEuLjU3OGRjNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcKQEAgLTU2LDYgKzU2LDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9tYXJzLgogCitjb25maWcgVVNCX0dTUENBX01SOTczMTBBCisJdHJpc3RhdGUgIk1hcnMtU2VtaSBNUjk3MzEwQSBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBNUjk3MzEwQSBjaGlwLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9tcjk3MzEwYS4KKwogY29uZmlnIFVTQl9HU1BDQV9PVjUxOQogCXRyaXN0YXRlICJPVjUxOSBVU0IgQ2FtZXJhIERyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCkBAIC0xNjcsNiArMTc2LDI0IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zcGNhNTYxLgogCitjb25maWcgVVNCX0dTUENBX1NROTA1CisJdHJpc3RhdGUgIlNRIFRlY2hub2xvZ2llcyBTUTkwNSBiYXNlZCBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBTUTkwNSBjaGlwLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zcTkwNS4KKworY29uZmlnIFVTQl9HU1BDQV9TUTkwNUMKKwl0cmlzdGF0ZSAiU1EgVGVjaG5vbG9naWVzIFNROTA1QyBiYXNlZCBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBTUTkwNUMgY2hpcC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2Ffc3E5MDVjLgorCiBjb25maWcgVVNCX0dTUENBX1NUSzAxNAogCXRyaXN0YXRlICJTeW50ZWsgRFY0MDAwIChTVEswMTQpIFVTQiBDYW1lcmEgRHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlCmluZGV4IGJkOGQ5ZWUuLjhhNjY0M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZQpAQCAtMSw1MCArMSw1NiBAQAotb2JqLSQoQ09ORklHX1VTQl9HU1BDQSkJCSs9IGdzcGNhX21haW4ubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9DT05FWCkJKz0gZ3NwY2FfY29uZXgubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9FVE9NUykJKz0gZ3NwY2FfZXRvbXMubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9GSU5FUElYKQkrPSBnc3BjYV9maW5lcGl4Lm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfTUFSUykJKz0gZ3NwY2FfbWFycy5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX09WNTE5KQkrPSBnc3BjYV9vdjUxOS5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX09WNTM0KQkrPSBnc3BjYV9vdjUzNC5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1BBQzIwNykJKz0gZ3NwY2FfcGFjMjA3Lm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfUEFDNzMxMSkgKz0gZ3NwY2FfcGFjNzMxMS5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1NPTklYQikJKz0gZ3NwY2Ffc29uaXhiLm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfU09OSVhKKQkrPSBnc3BjYV9zb25peGoubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTAwKSArPSBnc3BjYV9zcGNhNTAwLm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMSkgKz0gZ3NwY2Ffc3BjYTUwMS5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDUpICs9IGdzcGNhX3NwY2E1MDUubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTA2KSArPSBnc3BjYV9zcGNhNTA2Lm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwOCkgKz0gZ3NwY2Ffc3BjYTUwOC5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1NjEpICs9IGdzcGNhX3NwY2E1NjEubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TVU5QTFVTKSArPSBnc3BjYV9zdW5wbHVzLm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfU1RLMDE0KQkrPSBnc3BjYV9zdGswMTQubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9UNjEzKQkrPSBnc3BjYV90NjEzLm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfVFY4NTMyKQkrPSBnc3BjYV90djg1MzIubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9WQzAzMlgpCSs9IGdzcGNhX3ZjMDMyeC5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1pDM1hYKQkrPSBnc3BjYV96YzN4eC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBKSAgICAgICAgICArPSBnc3BjYV9tYWluLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfQ09ORVgpICAgICs9IGdzcGNhX2NvbmV4Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfRVRPTVMpICAgICs9IGdzcGNhX2V0b21zLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfRklORVBJWCkgICs9IGdzcGNhX2ZpbmVwaXgubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9NQVJTKSAgICAgKz0gZ3NwY2FfbWFycy5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX01SOTczMTBBKSArPSBnc3BjYV9tcjk3MzEwYS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX09WNTE5KSAgICArPSBnc3BjYV9vdjUxOS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX09WNTM0KSAgICArPSBnc3BjYV9vdjUzNC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1BBQzIwNykgICArPSBnc3BjYV9wYWMyMDcubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9QQUM3MzExKSAgKz0gZ3NwY2FfcGFjNzMxMS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NPTklYQikgICArPSBnc3BjYV9zb25peGIubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TT05JWEopICAgKz0gZ3NwY2Ffc29uaXhqLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMCkgICs9IGdzcGNhX3NwY2E1MDAubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTAxKSAgKz0gZ3NwY2Ffc3BjYTUwMS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDUpICArPSBnc3BjYV9zcGNhNTA1Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNikgICs9IGdzcGNhX3NwY2E1MDYubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTA4KSAgKz0gZ3NwY2Ffc3BjYTUwOC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1NjEpICArPSBnc3BjYV9zcGNhNTYxLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1E5MDUpICAgICs9IGdzcGNhX3NxOTA1Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1E5MDVDKSAgICs9IGdzcGNhX3NxOTA1Yy5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NVTlBMVVMpICArPSBnc3BjYV9zdW5wbHVzLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1RLMDE0KSAgICs9IGdzcGNhX3N0azAxNC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1Q2MTMpICAgICArPSBnc3BjYV90NjEzLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfVFY4NTMyKSAgICs9IGdzcGNhX3R2ODUzMi5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1ZDMDMyWCkgICArPSBnc3BjYV92YzAzMngubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9aQzNYWCkgICAgKz0gZ3NwY2FfemMzeHgubwogCi1nc3BjYV9tYWluLW9ianMJCQk6PSBnc3BjYS5vCi1nc3BjYV9jb25leC1vYmpzCQk6PSBjb25leC5vCi1nc3BjYV9ldG9tcy1vYmpzCQk6PSBldG9tcy5vCi1nc3BjYV9maW5lcGl4LW9ianMJCTo9IGZpbmVwaXgubwotZ3NwY2FfbWFycy1vYmpzCQkJOj0gbWFycy5vCi1nc3BjYV9vdjUxOS1vYmpzCQk6PSBvdjUxOS5vCi1nc3BjYV9vdjUzNC1vYmpzCQk6PSBvdjUzNC5vCi1nc3BjYV9wYWMyMDctb2JqcwkJOj0gcGFjMjA3Lm8KLWdzcGNhX3BhYzczMTEtb2JqcwkJOj0gcGFjNzMxMS5vCi1nc3BjYV9zb25peGItb2JqcwkJOj0gc29uaXhiLm8KLWdzcGNhX3Nvbml4ai1vYmpzCQk6PSBzb25peGoubwotZ3NwY2Ffc3BjYTUwMC1vYmpzCQk6PSBzcGNhNTAwLm8KLWdzcGNhX3NwY2E1MDEtb2JqcwkJOj0gc3BjYTUwMS5vCi1nc3BjYV9zcGNhNTA1LW9ianMJCTo9IHNwY2E1MDUubwotZ3NwY2Ffc3BjYTUwNi1vYmpzCQk6PSBzcGNhNTA2Lm8KLWdzcGNhX3NwY2E1MDgtb2JqcwkJOj0gc3BjYTUwOC5vCi1nc3BjYV9zcGNhNTYxLW9ianMJCTo9IHNwY2E1NjEubwotZ3NwY2Ffc3RrMDE0LW9ianMJCTo9IHN0azAxNC5vCi1nc3BjYV9zdW5wbHVzLW9ianMJCTo9IHN1bnBsdXMubwotZ3NwY2FfdDYxMy1vYmpzCQkJOj0gdDYxMy5vCi1nc3BjYV90djg1MzItb2JqcwkJOj0gdHY4NTMyLm8KLWdzcGNhX3ZjMDMyeC1vYmpzCQk6PSB2YzAzMngubwotZ3NwY2FfemMzeHgtb2JqcwkJOj0gemMzeHgubworZ3NwY2FfbWFpbi1vYmpzICAgICA6PSBnc3BjYS5vCitnc3BjYV9jb25leC1vYmpzICAgIDo9IGNvbmV4Lm8KK2dzcGNhX2V0b21zLW9ianMgICAgOj0gZXRvbXMubworZ3NwY2FfZmluZXBpeC1vYmpzICA6PSBmaW5lcGl4Lm8KK2dzcGNhX21hcnMtb2JqcyAgICAgOj0gbWFycy5vCitnc3BjYV9tcjk3MzEwYS1vYmpzIDo9IG1yOTczMTBhLm8KK2dzcGNhX292NTE5LW9ianMgICAgOj0gb3Y1MTkubworZ3NwY2Ffb3Y1MzQtb2JqcyAgICA6PSBvdjUzNC5vCitnc3BjYV9wYWMyMDctb2JqcyAgIDo9IHBhYzIwNy5vCitnc3BjYV9wYWM3MzExLW9ianMgIDo9IHBhYzczMTEubworZ3NwY2Ffc29uaXhiLW9ianMgICA6PSBzb25peGIubworZ3NwY2Ffc29uaXhqLW9ianMgICA6PSBzb25peGoubworZ3NwY2Ffc3BjYTUwMC1vYmpzICA6PSBzcGNhNTAwLm8KK2dzcGNhX3NwY2E1MDEtb2JqcyAgOj0gc3BjYTUwMS5vCitnc3BjYV9zcGNhNTA1LW9ianMgIDo9IHNwY2E1MDUubworZ3NwY2Ffc3BjYTUwNi1vYmpzICA6PSBzcGNhNTA2Lm8KK2dzcGNhX3NwY2E1MDgtb2JqcyAgOj0gc3BjYTUwOC5vCitnc3BjYV9zcGNhNTYxLW9ianMgIDo9IHNwY2E1NjEubworZ3NwY2Ffc3E5MDUtb2JqcyAgICA6PSBzcTkwNS5vCitnc3BjYV9zcTkwNWMtb2JqcyAgIDo9IHNxOTA1Yy5vCitnc3BjYV9zdGswMTQtb2JqcyAgIDo9IHN0azAxNC5vCitnc3BjYV9zdW5wbHVzLW9ianMgIDo9IHN1bnBsdXMubworZ3NwY2FfdDYxMy1vYmpzICAgICA6PSB0NjEzLm8KK2dzcGNhX3R2ODUzMi1vYmpzICAgOj0gdHY4NTMyLm8KK2dzcGNhX3ZjMDMyeC1vYmpzICAgOj0gdmMwMzJ4Lm8KK2dzcGNhX3pjM3h4LW9ianMgICAgOj0gemMzeHgubwogCi1vYmotJChDT05GSUdfVVNCX001NjAyKQkJKz0gbTU2MDIvCi1vYmotJChDT05GSUdfVVNCX1NUVjA2WFgpIAkrPSBzdHYwNnh4Lworb2JqLSQoQ09ORklHX1VTQl9NNTYwMikgICArPSBtNTYwMi8KK29iai0kKENPTkZJR19VU0JfU1RWMDZYWCkgKz0gc3R2MDZ4eC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYwppbmRleCAxNzUzZjViLi4yMTljZmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jCkBAIC0zNiw4ICszNiwxMiBAQAogCXVuc2lnbmVkIGNoYXIgYnJpZ2h0bmVzczsKIAl1bnNpZ25lZCBjaGFyIGNvbnRyYXN0OwogCXVuc2lnbmVkIGNoYXIgY29sb3JzOworCXU4IHF1YWxpdHk7CisjZGVmaW5lIFFVQUxJVFlfTUlOIDMwCisjZGVmaW5lIFFVQUxJVFlfTUFYIDYwCisjZGVmaW5lIFFVQUxJVFlfREVGIDQwCiAKLQl1bnNpZ25lZCBjaGFyIHFpbmRleDsKKwl1OCAqanBlZ19oZHI7CiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC04MTUsMTQgKzgxOSwxMyBAQAogCXN0cnVjdCBjYW0gKmNhbTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOwogCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHZnYV9tb2RlIC8gc2l6ZW9mIHZnYV9tb2RlWzBdOwogCi0Jc2QtPnFpbmRleCA9IDA7CQkJLyogc2V0IHRoZSBxdWFudGl6YXRpb24gKi8KIAlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOwogCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKIAlzZC0+Y29sb3JzID0gQ09MT1JfREVGOworCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgzOSw2ICs4NDIsMTQgQEAKIAogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJLyogY3JlYXRlIHRoZSBKUEVHIGhlYWRlciAqLworCXNkLT5qcGVnX2hkciA9IGttYWxsb2MoSlBFR19IRFJfU1osIEdGUF9LRVJORUwpOworCWpwZWdfZGVmaW5lKHNkLT5qcGVnX2hkciwgZ3NwY2FfZGV2LT5oZWlnaHQsIGdzcGNhX2Rldi0+d2lkdGgsCisJCQkweDIyKTsJCS8qIEpQRUcgNDExICovCisJanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKKwogCWN4MTE2NDZfaW5pdHNpemUoZ3NwY2FfZGV2KTsKIAljeDExNjQ2X2Z3KGdzcGNhX2Rldik7CiAJY3hfc2Vuc29yKGdzcGNhX2Rldik7CkBAIC04NDksOCArODYwLDExIEBACiAvKiBjYWxsZWQgb24gc3RyZWFtb2ZmIHdpdGggYWx0IDAgYW5kIG9uIGRpc2Nvbm5lY3QgKi8KIHN0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IHJldHJ5ID0gNTA7CiAKKwlrZnJlZShzZC0+anBlZ19oZHIpOworCiAJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCiAJCXJldHVybjsKIAlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwMDAsIDB4MDApOwpAQCAtODc2LDYgKzg5MCw4IEBACiAJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCiAJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCiAJaWYgKGRhdGFbMF0gPT0gMHhmZiAmJiBkYXRhWzFdID09IDB4ZDgpIHsKIAogCQkvKiBzdGFydCBvZiBmcmFtZSAqLwpAQCAtODgzLDkgKzg5OSw4IEBACiAJCQkJCWRhdGEsIDApOwogCiAJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgaW4gdGhlIG5ldyBmcmFtZSAqLwotCQlqcGVnX3B1dF9oZWFkZXIoZ3NwY2FfZGV2LCBmcmFtZSwKLQkJCQkoKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXYpLT5xaW5kZXgsCi0JCQkJMHgyMik7CisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQlzZC0+anBlZ19oZHIsIEpQRUdfSERSX1NaKTsKIAkJZGF0YSArPSAyOwogCQlsZW4gLT0gMjsKIAl9CkBAIC05ODgsNiArMTAwMywzNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNkX3NldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChqY29tcC0+cXVhbGl0eSA8IFFVQUxJVFlfTUlOKQorCQlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfTUlOOworCWVsc2UgaWYgKGpjb21wLT5xdWFsaXR5ID4gUVVBTElUWV9NQVgpCisJCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9NQVg7CisJZWxzZQorCQlzZC0+cXVhbGl0eSA9IGpjb21wLT5xdWFsaXR5OworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRfamNvbXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqY29tcCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwltZW1zZXQoamNvbXAsIDAsIHNpemVvZiAqamNvbXApOworCWpjb21wLT5xdWFsaXR5ID0gc2QtPnF1YWxpdHk7CisJamNvbXAtPmpwZWdfbWFya2VycyA9IFY0TDJfSlBFR19NQVJLRVJfREhUCisJCQl8IFY0TDJfSlBFR19NQVJLRVJfRFFUOworCXJldHVybiAwOworfQorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCiBzdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLApAQCAtOTk4LDYgKzEwNDEsOCBAQAogCS5zdGFydCA9IHNkX3N0YXJ0LAogCS5zdG9wMCA9IHNkX3N0b3AwLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorCS5nZXRfamNvbXAgPSBzZF9nZXRfamNvbXAsCisJLnNldF9qY29tcCA9IHNkX3NldF9qY29tcCwKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpAQCAtMTAyOSw4ICsxMDc0LDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMKaW5kZXggZjNjZDhmZi4uMmMyMGQwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZXRvbXMuYwpAQCAtNDcyLDE5ICs0NzIsNiBAQAogCQlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9PX1JFRCArIGksIGJyaWdodG5lc3MpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IGk7Ci0JaW50IGJyaWdodG5lc3MgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlyZWdfcihnc3BjYV9kZXYsIEVUX09fUkVEICsgaSwgMSk7Ci0JCWJyaWdodG5lc3MgKz0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwotCX0KLQlzZC0+YnJpZ2h0bmVzcyA9IGJyaWdodG5lc3MgPj4gMzsKLX0KLQogc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTQ5NSwxOSArNDgyLDYgQEAKIAlyZWdfdyhnc3BjYV9kZXYsIEVUX0dfUkVELCBSR0JHLCA2KTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgaTsKLQlpbnQgY29udHJhc3QgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlyZWdfcihnc3BjYV9kZXYsIEVUX0dfUkVEICsgaSwgMSk7Ci0JCWNvbnRyYXN0ICs9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKLQl9Ci0Jc2QtPmNvbnRyYXN0ID0gY29udHJhc3QgPj4gMjsKLX0KLQogc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC02NTgsNyArNjMyLDYgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAxOwogCXNkLT5zZW5zb3IgPSBpZC0+ZHJpdmVyX2luZm87CiAJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1BBUzEwNikgewogCQljYW0tPmNhbV9tb2RlID0gc2lmX21vZGU7CkBAIC04MjEsNyArNzk0LDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5icmlnaHRuZXNzOwogCXJldHVybiAwOwogfQpAQCAtODQwLDcgKzgxMiw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAkqdmFsID0gc2QtPmNvbnRyYXN0OwogCXJldHVybiAwOwogfQpAQCAtODU5LDcgKzgzMCw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0Y29sb3JzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5jb2xvcnM7CiAJcmV0dXJuIDA7CiB9CkBAIC05MjgsOCArODk4LDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2ZpbmVwaXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZmluZXBpeC5jCmluZGV4IGFmYzhiMmQuLjAwZTY4NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZmluZXBpeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZmluZXBpeC5jCkBAIC0yNyw3ICsyNyw3IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIC8qIERlZmF1bHQgdGltZW91dCwgaW4gbXMgKi8KLSNkZWZpbmUgRlBJWF9USU1FT1VUIChIWiAvIDEwKQorI2RlZmluZSBGUElYX1RJTUVPVVQgMjUwCiAKIC8qIE1heGltdW0gdHJhbnNmZXIgc2l6ZSB0byB1c2UuIFRoZSB3aW5kb3dzIGRyaXZlciByZWFkcyBieSBjaHVua3Mgb2YKICAqIDB4MjAwMCBieXRlcywgc28gZG8gdGhlIHNhbWUuIE5vdGU6IHJlYWRpbmcgbW9yZSBzZWVtcyB0byB3b3JrCkBAIC0zOCwzOCArMzgsMTUgQEAKIHN0cnVjdCB1c2JfZnBpeCB7CiAJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KIAotCS8qCi0JICogVVNCIHN0dWZmCi0JICovCi0Jc3RydWN0IHVzYl9jdHJscmVxdWVzdCBjdHJscmVxOwotCXN0cnVjdCB1cmIgKmNvbnRyb2xfdXJiOwotCXN0cnVjdCB0aW1lcl9saXN0IGJ1bGtfdGltZXI7Ci0KLQllbnVtIHsKLQkJRlBJWF9OT1AsCS8qIGluYWN0aXZlLCBlbHNlIHN0cmVhbWluZyAqLwotCQlGUElYX1JFU0VULAkvKiBtdXN0IHJlc2V0ICovCi0JCUZQSVhfUkVRX0ZSQU1FLAkvKiByZXF1ZXN0aW5nIGEgZnJhbWUgKi8KLQkJRlBJWF9SRUFEX0ZSQU1FLAkvKiByZWFkaW5nIGZyYW1lICovCi0JfSBzdGF0ZTsKLQotCS8qCi0JICogRHJpdmVyIHN0dWZmCi0JICovCi0Jc3RydWN0IGRlbGF5ZWRfd29yayB3cWU7Ci0Jc3RydWN0IGNvbXBsZXRpb24gY2FuX2Nsb3NlOwotCWludCBzdHJlYW1pbmc7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfc3RydWN0OworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrX3RocmVhZDsKIH07CiAKIC8qIERlbGF5IGFmdGVyIHdoaWNoIGNsYWltIHRoZSBuZXh0IGZyYW1lLiBJZiB0aGUgZGVsYXkgaXMgdG9vIHNtYWxsLAogICogdGhlIGNhbWVyYSB3aWxsIHJldHVybiBvbGQgZnJhbWVzLiBPbiB0aGUgNDgwMFosIDIwbXMgaXMgYmFkLCAyNW1zCi0gKiB3aWxsIGZhaWwgZXZlcnkgNCBvciA1IGZyYW1lcywgYnV0IDMwbXMgaXMgcGVyZmVjdC4gKi8KLSNkZWZpbmUgTkVYVF9GUkFNRV9ERUxBWSAgKCgoSFogKiAzMCkgKyA5OTkpIC8gMTAwMCkKLQotI2RlZmluZSBkZXZfbmV3X3N0YXRlKG5ld19zdGF0ZSkgewkJCQlcCi0JCVBERUJVRyhEX1NUUkVBTSwgIm5ldyBzdGF0ZSBmcm9tICVkIHRvICVkIGF0ICVzOiVkIiwJXAotCQkJZGV2LT5zdGF0ZSwgbmV3X3N0YXRlLCBfX2Z1bmNfXywgX19MSU5FX18pOwlcCi0JCWRldi0+c3RhdGUgPSBuZXdfc3RhdGU7CQkJCQlcCi19CisgKiB3aWxsIGZhaWwgZXZlcnkgNCBvciA1IGZyYW1lcywgYnV0IDMwbXMgaXMgcGVyZmVjdC4gT24gdGhlIEEyMTAsCisgKiAzMG1zIGlzIGJhZCB3aGlsZSAzNW1zIGlzIHBlcmZlY3QuICovCisjZGVmaW5lIE5FWFRfRlJBTUVfREVMQVkgMzUKIAogLyogVGhlc2UgY2FtZXJhcyBvbmx5IHN1cHBvcnQgMzIweDIwMC4gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGZwaXhfbW9kZVsxXSA9IHsKQEAgLTgwLDMxNiArNTcsMTgzIEBACiAJCS5wcml2ID0gMH0KIH07CiAKLS8qIFJlYWRzIHBhcnQgb2YgYSBmcmFtZSAqLwotc3RhdGljIHZvaWQgcmVhZF9mcmFtZV9wYXJ0KHN0cnVjdCB1c2JfZnBpeCAqZGV2KQorLyogc2VuZCBhIGNvbW1hbmQgdG8gdGhlIHdlYmNhbSAqLworc3RhdGljIGludCBjb21tYW5kKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJaW50IG9yZGVyKQkvKiAwOiByZXNldCwgMTogZnJhbWUgcmVxdWVzdCAqLwogewotCWludCByZXQ7CisJc3RhdGljIHU4IG9yZGVyX3ZhbHVlc1syXVsxMl0gPSB7CisJCXsweGM2LCAwLCAwLCAwLCAwLCAwLCAwLCAgICAwLCAweDIwLCAwLCAwLCAwfSwJLyogcmVzZXQgKi8KKwkJezB4ZDMsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MDEsICAgIDAsIDAsIDAsIDB9LAkvKiBmciByZXEgKi8KKwl9OwogCi0JUERFQlVHKERfU1RSRUFNLCAicmVhZF9mcmFtZV9wYXJ0Iik7Ci0KLQkvKiBSZWFkcyBwYXJ0IG9mIGEgZnJhbWUgKi8KLQlyZXQgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmdzcGNhX2Rldi51cmJbMF0sIEdGUF9BVE9NSUMpOwotCWlmIChyZXQpIHsKLQkJZGV2X25ld19zdGF0ZShGUElYX1JFU0VUKTsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXYtPndxZSwgMSk7Ci0JCVBERUJVRyhEX1NUUkVBTSwgInVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoICVkIiwKLQkJCXJldCk7Ci0JfSBlbHNlIHsKLQkJLyogU29tZXRpbWVzIHdlIG5ldmVyIGdldCBhIGNhbGxiYWNrLCBzbyB1c2UgYSB0aW1lci4KLQkJICogSXMgdGhpcyBtYXNraW5nIGEgYnVnIHNvbWV3aGVyZSBlbHNlPyAqLwotCQlkZXYtPmJ1bGtfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDE1MCk7Ci0JCWFkZF90aW1lcigmZGV2LT5idWxrX3RpbWVyKTsKLQl9CisJbWVtY3B5KGdzcGNhX2Rldi0+dXNiX2J1Ziwgb3JkZXJfdmFsdWVzW29yZGVyXSwgMTIpOworCXJldHVybiB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJVVNCX1JFUV9HRVRfU1RBVFVTLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8CisJCQlVU0JfUkVDSVBfSU5URVJGQUNFLCAwLCAwLCBnc3BjYV9kZXYtPnVzYl9idWYsCisJCQkxMiwgRlBJWF9USU1FT1VUKTsKIH0KIAotLyogQ2FsbGJhY2sgZm9yIFVSQnMuICovCi1zdGF0aWMgdm9pZCB1cmJfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQorLyogd29ya3F1ZXVlICovCitzdGF0aWMgdm9pZCBkb3N0cmVhbShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gdXJiLT5jb250ZXh0OwotCXN0cnVjdCB1c2JfZnBpeCAqZGV2ID0gKHN0cnVjdCB1c2JfZnBpeCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IHVzYl9mcGl4ICpkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9mcGl4LCB3b3JrX3N0cnVjdCk7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gJmRldi0+Z3NwY2FfZGV2OworCXN0cnVjdCB1cmIgKnVyYiA9IGdzcGNhX2Rldi0+dXJiWzBdOworCXU4ICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgbGVuOwogCi0JUERFQlVHKERfUEFDSywKLQkJImVudGVyIHVyYl9jYWxsYmFjayAtIHN0YXR1cz0lZCwgbGVuZ3RoPSVkIiwKLQkJdXJiLT5zdGF0dXMsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJLyogc3luY2hyb25pemUgd2l0aCB0aGUgbWFpbiBkcml2ZXIgKi8KKwltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCVBERUJVRyhEX1NUUkVBTSwgImRvc3RyZWFtIHN0YXJ0ZWQiKTsKIAotCWlmIChkZXYtPnN0YXRlID09IEZQSVhfUkVBRF9GUkFNRSkKLQkJZGVsX3RpbWVyKCZkZXYtPmJ1bGtfdGltZXIpOworCS8qIGxvb3AgcmVhZGluZyBhIGZyYW1lICovCithZ2FpbjoKKwl3aGlsZSAoZ3NwY2FfZGV2LT5wcmVzZW50ICYmIGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CiAKLQlpZiAodXJiLT5zdGF0dXMgIT0gMCkgewotCQkvKiBXZSBraWxsIGEgc3R1Y2sgdXJiIGV2ZXJ5IDUwIGZyYW1lcyBvbiBhdmVyYWdlLCBzbyBkb24ndAotCQkgKiBkaXNwbGF5IGEgbG9nIG1lc3NhZ2UgZm9yIHRoYXQuICovCi0JCWlmICh1cmItPnN0YXR1cyAhPSAtRUNPTk5SRVNFVCkKLQkJCVBERUJVRyhEX1NUUkVBTSwgImJhZCBVUkIgc3RhdHVzICVkIiwgdXJiLT5zdGF0dXMpOwotCQlkZXZfbmV3X3N0YXRlKEZQSVhfUkVTRVQpOwotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+d3FlLCAxKTsKLQl9CisJCS8qIHJlcXVlc3QgYSBmcmFtZSAqLworCQltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwkJcmV0ID0gY29tbWFuZChnc3BjYV9kZXYsIDEpOworCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCQlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCB8fCAhZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCQlicmVhazsKIAotCXN3aXRjaCAoZGV2LT5zdGF0ZSkgewotCWNhc2UgRlBJWF9SRVFfRlJBTUU6Ci0JCWRldl9uZXdfc3RhdGUoRlBJWF9SRUFEX0ZSQU1FKTsKLQkJcmVhZF9mcmFtZV9wYXJ0KGRldik7Ci0JCWJyZWFrOworCQkvKiB0aGUgZnJhbWUgY29tZXMgaW4gcGFydHMgKi8KKwkJZm9yICg7OykgeworCQkJcmV0ID0gdXNiX2J1bGtfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJCQl1cmItPnBpcGUsCisJCQkJCWRhdGEsCisJCQkJCUZQSVhfTUFYX1RSQU5TRkVSLAorCQkJCQkmbGVuLCBGUElYX1RJTUVPVVQpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQkvKiBNb3N0IG9mIHRoZSB0aW1lIHdlIGdldCBhIHRpbWVvdXQKKwkJCQkgKiBlcnJvci4gSnVzdCByZXN0YXJ0LiAqLworCQkJCWdvdG8gYWdhaW47CisJCQl9CisJCQlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCB8fCAhZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCQkJZ290byBvdXQ7CisJCQlmcmFtZSA9IGdzcGNhX2dldF9pX2ZyYW1lKCZkZXYtPmdzcGNhX2Rldik7CisJCQlpZiAoZnJhbWUgPT0gTlVMTCkKKwkJCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKIAotCWNhc2UgRlBJWF9SRUFEX0ZSQU1FOiB7Ci0JCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKKwkJCWlmIChsZW4gPCBGUElYX01BWF9UUkFOU0ZFUiB8fAorCQkJCShkYXRhW2xlbiAtIDJdID09IDB4ZmYgJiYKKwkJCQkJZGF0YVtsZW4gLSAxXSA9PSAweGQ5KSkgewogCi0JCWZyYW1lID0gZ3NwY2FfZ2V0X2lfZnJhbWUoJmRldi0+Z3NwY2FfZGV2KTsKLQkJaWYgKGZyYW1lID09IE5VTEwpCi0JCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKLQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8IEZQSVhfTUFYX1RSQU5TRkVSIHx8Ci0JCQkoZGF0YVt1cmItPmFjdHVhbF9sZW5ndGgtMl0gPT0gMHhmZiAmJgotCQkJCWRhdGFbdXJiLT5hY3R1YWxfbGVuZ3RoLTFdID09IDB4ZDkpKSB7Ci0KLQkJCS8qIElmIHRoZSByZXN1bHQgaXMgbGVzcyB0aGFuIHdoYXQgd2FzIGFza2VkCi0JCQkgKiBmb3IsIHRoZW4gaXQncyB0aGUgZW5kIG9mIHRoZQotCQkJICogZnJhbWUuIFNvbWV0aW1lIHRoZSBqcGVnIGlzIG5vdCBjb21wbGV0ZSwKLQkJCSAqIGJ1dCB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvLiBXZSBhbHNvIGVuZAotCQkJICogaGVyZSBpZiB0aGUgdGhlIGpwZWcgZW5kcyByaWdodCBhdCB0aGUgZW5kCi0JCQkgKiBvZiB0aGUgZnJhbWUuICovCi0JCQlpZiAoZnJhbWUpCi0JCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCi0JCQkJCQlmcmFtZSwKLQkJCQkJCWRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JCQlkZXZfbmV3X3N0YXRlKEZQSVhfUkVRX0ZSQU1FKTsKLQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2LT53cWUsIE5FWFRfRlJBTUVfREVMQVkpOwotCQl9IGVsc2UgeworCQkJCS8qIElmIHRoZSByZXN1bHQgaXMgbGVzcyB0aGFuIHdoYXQgd2FzIGFza2VkCisJCQkJICogZm9yLCB0aGVuIGl0J3MgdGhlIGVuZCBvZiB0aGUKKwkJCQkgKiBmcmFtZS4gU29tZXRpbWVzIHRoZSBqcGVnIGlzIG5vdCBjb21wbGV0ZSwKKwkJCQkgKiBidXQgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkby4gV2UgYWxzbyBlbmQKKwkJCQkgKiBoZXJlIGlmIHRoZSB0aGUganBlZyBlbmRzIHJpZ2h0IGF0IHRoZSBlbmQKKwkJCQkgKiBvZiB0aGUgZnJhbWUuICovCisJCQkJaWYgKGZyYW1lKQorCQkJCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsCisJCQkJCQkJTEFTVF9QQUNLRVQsCisJCQkJCQkJZnJhbWUsCisJCQkJCQkJZGF0YSwgbGVuKTsKKwkJCQlicmVhazsKKwkJCX0KIAogCQkJLyogZ290IGEgcGFydGlhbCBpbWFnZSAqLwogCQkJaWYgKGZyYW1lKQogCQkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsCiAJCQkJCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUKLQkJCQkJCQkJPT0gTEFTVF9QQUNLRVQKKwkJCQkJCQk9PSBMQVNUX1BBQ0tFVAogCQkJCQkJPyBGSVJTVF9QQUNLRVQgOiBJTlRFUl9QQUNLRVQsCi0JCQkJCQlmcmFtZSwKLQkJCQkJZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQkJCXJlYWRfZnJhbWVfcGFydChkZXYpOworCQkJCQkJZnJhbWUsIGRhdGEsIGxlbik7CiAJCX0KLQkJYnJlYWs7Ci0JICAgIH0KIAotCWNhc2UgRlBJWF9OT1A6Ci0JY2FzZSBGUElYX1JFU0VUOgotCQlQREVCVUcoRF9TVFJFQU0sICJpbnZhbGlkIHN0YXRlICVkIiwgZGV2LT5zdGF0ZSk7Ci0JCWJyZWFrOwotCX0KLX0KLQotLyogUmVxdWVzdCBhIG5ldyBmcmFtZSAqLwotc3RhdGljIHZvaWQgcmVxdWVzdF9mcmFtZShzdHJ1Y3QgdXNiX2ZwaXggKmRldikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9ICZkZXYtPmdzcGNhX2RldjsKLQotCS8qIFNldHVwIGNvbW1hbmQgcGFja2V0ICovCi0JbWVtc2V0KGdzcGNhX2Rldi0+dXNiX2J1ZiwgMCwgMTIpOwotCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4ZDM7Ci0JZ3NwY2FfZGV2LT51c2JfYnVmWzddID0gMHgwMTsKLQotCS8qIFJlcXVlc3QgYSBmcmFtZSAqLwotCWRldi0+Y3RybHJlcS5iUmVxdWVzdFR5cGUgPQotCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRTsKLQlkZXYtPmN0cmxyZXEuYlJlcXVlc3QgPSBVU0JfUkVRX0dFVF9TVEFUVVM7Ci0JZGV2LT5jdHJscmVxLndWYWx1ZSA9IDA7Ci0JZGV2LT5jdHJscmVxLndJbmRleCA9IDA7Ci0JZGV2LT5jdHJscmVxLndMZW5ndGggPSBjcHVfdG9fbGUxNigxMik7Ci0KLQl1c2JfZmlsbF9jb250cm9sX3VyYihkZXYtPmNvbnRyb2xfdXJiLAotCQkJICAgICBnc3BjYV9kZXYtPmRldiwKLQkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKLQkJCSAgICAgKHVuc2lnbmVkIGNoYXIgKikgJmRldi0+Y3RybHJlcSwKLQkJCSAgICAgZ3NwY2FfZGV2LT51c2JfYnVmLAotCQkJICAgICAxMiwgdXJiX2NhbGxiYWNrLCBnc3BjYV9kZXYpOwotCi0JcmV0ID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5jb250cm9sX3VyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJldCkgewotCQlkZXZfbmV3X3N0YXRlKEZQSVhfUkVTRVQpOwotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+d3FlLCAxKTsKLQkJUERFQlVHKERfU1RSRUFNLCAidXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggJWQiLCByZXQpOwotCX0KLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIFN0YXRlIG1hY2hpbmUuICovCi1zdGF0aWMgdm9pZCBmcGl4X3NtKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgdXNiX2ZwaXggKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiX2ZwaXgsIHdxZS53b3JrKTsKLQotCVBERUJVRyhEX1NUUkVBTSwgImZwaXhfc20gc3RhdGUgJWQiLCBkZXYtPnN0YXRlKTsKLQotCS8qIHZlcmlmeSB0aGF0IHRoZSBkZXZpY2Ugd2Fzbid0IHVucGx1Z2dlZCAqLwotCWlmICghZGV2LT5nc3BjYV9kZXYucHJlc2VudCkgewotCQlQREVCVUcoRF9TVFJFQU0sICJkZXZpY2UgaXMgZ29uZSIpOwotCQlkZXZfbmV3X3N0YXRlKEZQSVhfTk9QKTsKLQkJY29tcGxldGUoJmRldi0+Y2FuX2Nsb3NlKTsKLQkJcmV0dXJuOworCQkvKiBXZSBtdXN0IHdhaXQgYmVmb3JlIHRyeWluZyByZWFkaW5nIHRoZSBuZXh0CisJCSAqIGZyYW1lLiBJZiB3ZSBkb24ndCwgb3IgaWYgdGhlIGRlbGF5IGlzIHRvbyBzaG9ydCwKKwkJICogdGhlIGNhbWVyYSB3aWxsIGRpc2Nvbm5lY3QuICovCisJCW1zbGVlcChORVhUX0ZSQU1FX0RFTEFZKTsKIAl9CiAKLQlpZiAoIWRldi0+c3RyZWFtaW5nKSB7Ci0JCVBERUJVRyhEX1NUUkVBTSwgInN0b3BwaW5nIHN0YXRlIG1hY2hpbmUiKTsKLQkJZGV2X25ld19zdGF0ZShGUElYX05PUCk7Ci0JCWNvbXBsZXRlKCZkZXYtPmNhbl9jbG9zZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2ggKGRldi0+c3RhdGUpIHsKLQljYXNlIEZQSVhfUkVTRVQ6Ci0JCWRldl9uZXdfc3RhdGUoRlBJWF9SRVFfRlJBTUUpOwotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+d3FlLCBIWiAvIDEwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZQSVhfUkVRX0ZSQU1FOgotCQkvKiBnZXQgYW4gaW1hZ2UgKi8KLQkJcmVxdWVzdF9mcmFtZShkZXYpOwotCQlicmVhazsKLQotCWNhc2UgRlBJWF9OT1A6Ci0JY2FzZSBGUElYX1JFQURfRlJBTUU6Ci0JCVBERUJVRyhEX1NUUkVBTSwgImludmFsaWQgc3RhdGUgJWQiLCBkZXYtPnN0YXRlKTsKLQkJYnJlYWs7Ci0JfQorb3V0OgorCVBERUJVRyhEX1NUUkVBTSwgImRvc3RyZWFtIHN0b3BwZWQiKTsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLwogc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CisJc3RydWN0IHVzYl9mcGl4ICpkZXYgPSAoc3RydWN0IHVzYl9mcGl4ICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgY2FtICpjYW0gPSAmZ3NwY2FfZGV2LT5jYW07CiAKIAljYW0tPmNhbV9tb2RlID0gZnBpeF9tb2RlOwogCWNhbS0+bm1vZGVzID0gMTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CS8qIHRvZG86IGNvcnJlY3QgZm9yIGFsbCBjYW1zPyAqLwogCWNhbS0+YnVsa19zaXplID0gRlBJWF9NQVhfVFJBTlNGRVI7CiAKLS8qCWdzcGNhX2Rldi0+bmJhbHQgPSAxOwkgKiB1c2UgYnVsayB0cmFuc2ZlciAqLworCUlOSVRfV09SSygmZGV2LT53b3JrX3N0cnVjdCwgZG9zdHJlYW0pOworCiAJcmV0dXJuIDA7CiB9CiAKLS8qIFN0b3Agc3RyZWFtaW5nIGFuZCBmcmVlIHRoZSByZXNzb3VyY2VzIGFsbG9jYXRlZCBieSBzZF9zdGFydC4gKi8KLXN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3QgdXNiX2ZwaXggKmRldiA9IChzdHJ1Y3QgdXNiX2ZwaXggKikgZ3NwY2FfZGV2OwotCi0JZGV2LT5zdHJlYW1pbmcgPSAwOwotCi0JLyogU3RvcCB0aGUgc3RhdGUgbWFjaGluZSAqLwotCWlmIChkZXYtPnN0YXRlICE9IEZQSVhfTk9QKQotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkZXYtPmNhbl9jbG9zZSk7Ci19Ci0KLS8qIGNhbGxlZCBvbiBzdHJlYW1vZmYgd2l0aCBhbHQgMCBhbmQgZGlzY29ubmVjdCAqLwotc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCB1c2JfZnBpeCAqZGV2ID0gKHN0cnVjdCB1c2JfZnBpeCAqKSBnc3BjYV9kZXY7Ci0KLQl1c2JfZnJlZV91cmIoZGV2LT5jb250cm9sX3VyYik7Ci0JZGV2LT5jb250cm9sX3VyYiA9IE5VTEw7Ci19Ci0KLS8qIEtpbGwgYW4gVVJCIHRoYXQgaGFzbid0IGNvbXBsZXRlZC4gKi8KLXN0YXRpYyB2b2lkIHRpbWVvdXRfa2lsbCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IHVyYiAqdXJiID0gKHN0cnVjdCB1cmIgKikgZGF0YTsKLQotCXVzYl91bmxpbmtfdXJiKHVyYik7Ci19Ci0KIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLwogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlzdHJ1Y3QgdXNiX2ZwaXggKmRldiA9IChzdHJ1Y3QgdXNiX2ZwaXggKikgZ3NwY2FfZGV2OwotCi0JSU5JVF9ERUxBWUVEX1dPUksoJmRldi0+d3FlLCBmcGl4X3NtKTsKLQotCWluaXRfdGltZXIoJmRldi0+YnVsa190aW1lcik7Ci0JZGV2LT5idWxrX3RpbWVyLmZ1bmN0aW9uID0gdGltZW91dF9raWxsOwotCiAJcmV0dXJuIDA7CiB9CiAKKy8qIHN0YXJ0IHRoZSBjYW1lcmEgKi8KIHN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCB1c2JfZnBpeCAqZGV2ID0gKHN0cnVjdCB1c2JfZnBpeCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKLQlpbnQgc2l6ZV9yZXQ7CisJaW50IHJldCwgbGVuOwogCiAJLyogSW5pdCB0aGUgZGV2aWNlICovCi0JbWVtc2V0KGdzcGNhX2Rldi0+dXNiX2J1ZiwgMCwgMTIpOwotCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4YzY7Ci0JZ3NwY2FfZGV2LT51c2JfYnVmWzhdID0gMHgyMDsKLQotCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKLQkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCi0JCQlVU0JfUkVRX0dFVF9TVEFUVVMsCi0JCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwKLQkJCVVTQl9SRUNJUF9JTlRFUkZBQ0UsIDAsIDAsIGdzcGNhX2Rldi0+dXNiX2J1ZiwKLQkJCTEyLCBGUElYX1RJTUVPVVQpOwotCi0JaWYgKHJldCAhPSAxMikgewotCQlQREVCVUcoRF9TVFJFQU0sICJ1c2JfY29udHJvbF9tc2cgZmFpbGVkICglZCkiLCByZXQpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGVycm9yOworCXJldCA9IGNvbW1hbmQoZ3NwY2FfZGV2LCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9TVFJFQU0sICJpbml0IGZhaWxlZCAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CiAJfQogCiAJLyogUmVhZCB0aGUgcmVzdWx0IG9mIHRoZSBjb21tYW5kLiBJZ25vcmUgdGhlIHJlc3VsdCwgZm9yIGl0CiAJICogdmFyaWVzIHdpdGggdGhlIGRldmljZS4gKi8KIAlyZXQgPSB1c2JfYnVsa19tc2coZ3NwY2FfZGV2LT5kZXYsCi0JCQl1c2JfcmN2YnVsa3BpcGUoZ3NwY2FfZGV2LT5kZXYsCi0JCQkJCWdzcGNhX2Rldi0+Y2FtLmVwYWRkciksCi0JCQlnc3BjYV9kZXYtPnVzYl9idWYsIEZQSVhfTUFYX1RSQU5TRkVSLCAmc2l6ZV9yZXQsCisJCQlnc3BjYV9kZXYtPnVyYlswXS0+cGlwZSwKKwkJCWdzcGNhX2Rldi0+dXJiWzBdLT50cmFuc2Zlcl9idWZmZXIsCisJCQlGUElYX01BWF9UUkFOU0ZFUiwgJmxlbiwKIAkJCUZQSVhfVElNRU9VVCk7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCVBERUJVRyhEX1NUUkVBTSwgInVzYl9idWxrX21zZyBmYWlsZWQgKCVkKSIsIHJldCk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZXJyb3I7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfU1RSRUFNLCAidXNiX2J1bGtfbXNnIGZhaWxlZCAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CiAJfQogCiAJLyogUmVxdWVzdCBhIGZyYW1lLCBidXQgZG9uJ3QgcmVhZCBpdCAqLwotCW1lbXNldChnc3BjYV9kZXYtPnVzYl9idWYsIDAsIDEyKTsKLQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAweGQzOwotCWdzcGNhX2Rldi0+dXNiX2J1Zls3XSA9IDB4MDE7Ci0KLQlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCi0JCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAotCQkJVVNCX1JFUV9HRVRfU1RBVFVTLAotCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8Ci0JCQlVU0JfUkVDSVBfSU5URVJGQUNFLCAwLCAwLCBnc3BjYV9kZXYtPnVzYl9idWYsCi0JCQkxMiwgRlBJWF9USU1FT1VUKTsKLQlpZiAocmV0ICE9IDEyKSB7Ci0JCVBERUJVRyhEX1NUUkVBTSwgInVzYl9jb250cm9sX21zZyBmYWlsZWQgKCVkKSIsIHJldCk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZXJyb3I7CisJcmV0ID0gY29tbWFuZChnc3BjYV9kZXYsIDEpOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX1NUUkVBTSwgImZyYW1lIHJlcXVlc3QgZmFpbGVkICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAkvKiBBZ2FpbiwgcmVzZXQgYnVsayBpbiBlbmRwb2ludCAqLwotCXVzYl9jbGVhcl9oYWx0KGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPmNhbS5lcGFkZHIpOworCXVzYl9jbGVhcl9oYWx0KGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPnVyYlswXS0+cGlwZSk7CiAKLQkvKiBBbGxvY2F0ZSBhIGNvbnRyb2wgVVJCICovCi0JZGV2LT5jb250cm9sX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXYtPmNvbnRyb2xfdXJiKSB7Ci0JCVBERUJVRyhEX1NUUkVBTSwgIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKiBWYXJpb3VzIGluaXRpYWxpemF0aW9ucy4gKi8KLQlpbml0X2NvbXBsZXRpb24oJmRldi0+Y2FuX2Nsb3NlKTsKLQlkZXYtPmJ1bGtfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldi0+Z3NwY2FfZGV2LnVyYlswXTsKLQlkZXYtPmdzcGNhX2Rldi51cmJbMF0tPmNvbXBsZXRlID0gdXJiX2NhbGxiYWNrOwotCWRldi0+c3RyZWFtaW5nID0gMTsKLQotCS8qIFNjaGVkdWxlIGEgZnJhbWUgcmVxdWVzdC4gKi8KLQlkZXZfbmV3X3N0YXRlKEZQSVhfUkVRX0ZSQU1FKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+d3FlLCAxKTsKKwkvKiBTdGFydCB0aGUgd29ya3F1ZXVlIGZ1bmN0aW9uIHRvIGRvIHRoZSBzdHJlYW1pbmcgKi8KKwlkZXYtPndvcmtfdGhyZWFkID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoTU9EVUxFX05BTUUpOworCXF1ZXVlX3dvcmsoZGV2LT53b3JrX3RocmVhZCwgJmRldi0+d29ya19zdHJ1Y3QpOwogCiAJcmV0dXJuIDA7Cit9CiAKLWVycm9yOgotCS8qIEZyZWUgdGhlIHJlc3NvdXJjZXMgKi8KLQlzZF9zdG9wTihnc3BjYV9kZXYpOwotCXNkX3N0b3AwKGdzcGNhX2Rldik7Ci0JcmV0dXJuIHJldDsKKy8qIGNhbGxlZCBvbiBzdHJlYW1vZmYgd2l0aCBhbHQ9PTAgYW5kIG9uIGRpc2Nvbm5lY3QgKi8KKy8qIHRoZSB1c2JfbG9jayBpcyBoZWxkIGF0IGVudHJ5IC0gcmVzdG9yZSBvbiBleGl0ICovCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHVzYl9mcGl4ICpkZXYgPSAoc3RydWN0IHVzYl9mcGl4ICopIGdzcGNhX2RldjsKKworCS8qIHdhaXQgZm9yIHRoZSB3b3JrIHF1ZXVlIHRvIHRlcm1pbmF0ZSAqLworCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJZGVzdHJveV93b3JrcXVldWUoZGV2LT53b3JrX3RocmVhZCk7CisJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJZGV2LT53b3JrX3RocmVhZCA9IE5VTEw7CiB9CiAKIC8qIFRhYmxlIG9mIHN1cHBvcnRlZCBVU0IgZGV2aWNlcyAqLwpAQCAtNDI0LDEyICsyNjgsMTEgQEAKIAogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7Ci0JLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkubmFtZSAgID0gTU9EVUxFX05BTUUsCiAJLmNvbmZpZyA9IHNkX2NvbmZpZywKLQkuaW5pdCA9IHNkX2luaXQsCi0JLnN0YXJ0ID0gc2Rfc3RhcnQsCi0JLnN0b3BOID0gc2Rfc3RvcE4sCi0JLnN0b3AwID0gc2Rfc3RvcDAsCisJLmluaXQgICA9IHNkX2luaXQsCisJLnN0YXJ0ICA9IHNkX3N0YXJ0LAorCS5zdG9wMCAgPSBzZF9zdG9wMCwKIH07CiAKIC8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCkBAIC00NDMsMjQgKzI4NiwyOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0gewotCS5uYW1lID0gTU9EVUxFX05BTUUsCi0JLmlkX3RhYmxlID0gZGV2aWNlX3RhYmxlLAotCS5wcm9iZSA9IHNkX3Byb2JlLAorCS5uYW1lICAgICAgID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlICAgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlICAgICAgPSBzZF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAotCS5yZXN1bWUgPSBnc3BjYV9yZXN1bWUsCisJLnJlc3VtZSAgPSBnc3BjYV9yZXN1bWUsCiAjZW5kaWYKIH07CiAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQorCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKIHsKIAl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYwppbmRleCA2NWU0OTAxLi5hNzVjMWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCkBAIC0zOCwxNSArMzgsMTYgQEAKICNpbmNsdWRlICJnc3BjYS5oIgogCiAvKiBnbG9iYWwgdmFsdWVzICovCi0jZGVmaW5lIERFRl9OVVJCUyAyCQkvKiBkZWZhdWx0IG51bWJlciBvZiBVUkJzICovCisjZGVmaW5lIERFRl9OVVJCUyAzCQkvKiBkZWZhdWx0IG51bWJlciBvZiBVUkJzICovCisjaWYgREVGX05VUkJTID4gTUFYX05VUkJTCisjZXJyb3IgIkRFRl9OVVJCUyB0b28gYmlnIgorI2VuZGlmCiAKIE1PRFVMRV9BVVRIT1IoIkplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkdTUENBIFVTQiBDYW1lcmEgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDQsIDApCi0KLXN0YXRpYyBpbnQgdmlkZW9fbnIgPSAtMTsKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDUsIDApCiAKICNpZmRlZiBHU1BDQV9ERUJVRwogaW50IGdzcGNhX2RlYnVnID0gRF9FUlIgfCBEX1BST0JFOwpAQCAtMTI2LDE2ICsxMjcsMTggQEAKIAkJCXN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOwotCV9fdTggKmRhdGE7CQkvKiBhZGRyZXNzIG9mIGRhdGEgaW4gdGhlIGlzbyBtZXNzYWdlICovCisJdTggKmRhdGE7CQkvKiBhZGRyZXNzIG9mIGRhdGEgaW4gdGhlIGlzbyBtZXNzYWdlICovCiAJaW50IGksIGxlbiwgc3Q7CiAJY2FtX3BrdF9vcCBwa3Rfc2NhbjsKIAogCWlmICh1cmItPnN0YXR1cyAhPSAwKSB7CisJCWlmICh1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKQorCQkJcmV0dXJuOwkJLyogZGlzY29ubmVjdGlvbiAqLwogI2lmZGVmIENPTkZJR19QTQogCQlpZiAoIWdzcGNhX2Rldi0+ZnJvemVuKQogI2VuZGlmCiAJCQlQREVCVUcoRF9FUlJ8RF9QQUNLLCAidXJiIHN0YXR1czogJWQiLCB1cmItPnN0YXR1cyk7Ci0JCXJldHVybjsJCS8qIGRpc2Nvbm5lY3Rpb24gPyAqLworCQlyZXR1cm47CiAJfQogCXBrdF9zY2FuID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5wa3Rfc2NhbjsKIAlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CkBAIC0xNjYsNyArMTY5LDcgQEAKIAkJLyogbGV0IHRoZSBwYWNrZXQgYmUgYW5hbHl6ZWQgYnkgdGhlIHN1YmRyaXZlciAqLwogCQlQREVCVUcoRF9QQUNLLCAicGFja2V0IFslZF0gbzolZCBsOiVkIiwKIAkJCWksIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0LCBsZW4pOwotCQlkYXRhID0gKF9fdTggKikgdXJiLT50cmFuc2Zlcl9idWZmZXIKKwkJZGF0YSA9ICh1OCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcgogCQkJCQkrIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OwogCQlwa3Rfc2Nhbihnc3BjYV9kZXYsIGZyYW1lLCBkYXRhLCBsZW4pOwogCX0KQEAgLTE4Miw4ICsxODUsNyBAQAogICoKICAqIEFuYWx5c2UgZWFjaCBwYWNrZXQgYW5kIGNhbGwgdGhlIHN1YmRyaXZlciBmb3IgY29weSB0byB0aGUgZnJhbWUgYnVmZmVyLgogICovCi1zdGF0aWMgdm9pZCBpc29jX2lycShzdHJ1Y3QgdXJiICp1cmIKLSkKK3N0YXRpYyB2b2lkIGlzb2NfaXJxKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSAoc3RydWN0IGdzcGNhX2RldiAqKSB1cmItPmNvbnRleHQ7CiAKQEAgLTE5Niw4ICsxOTgsNyBAQAogLyoKICAqIGJ1bGsgbWVzc2FnZSBpbnRlcnJ1cHQgZnJvbSB0aGUgVVNCIGRldmljZQogICovCi1zdGF0aWMgdm9pZCBidWxrX2lycShzdHJ1Y3QgdXJiICp1cmIKLSkKK3N0YXRpYyB2b2lkIGJ1bGtfaXJxKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSAoc3RydWN0IGdzcGNhX2RldiAqKSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKQEAgLTIwOSw2ICsyMTAsOCBAQAogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKIAljYXNlIDA6CiAJCWJyZWFrOworCWNhc2UgLUVTSFVURE9XTjoKKwkJcmV0dXJuOwkJLyogZGlzY29ubmVjdGlvbiAqLwogCWNhc2UgLUVDT05OUkVTRVQ6CiAJCXVyYi0+c3RhdHVzID0gMDsKIAkJYnJlYWs7CkBAIC0yMTcsNyArMjIwLDcgQEAKIAkJaWYgKCFnc3BjYV9kZXYtPmZyb3plbikKICNlbmRpZgogCQkJUERFQlVHKERfRVJSfERfUEFDSywgInVyYiBzdGF0dXM6ICVkIiwgdXJiLT5zdGF0dXMpOwotCQlyZXR1cm47CQkvKiBkaXNjb25uZWN0aW9uID8gKi8KKwkJcmV0dXJuOwogCX0KIAogCS8qIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIGZyYW1lIGJ1ZmZlciAqLwpAQCAtMzIyLDYgKzMyNSw3IEBACiAJY2FzZSBWNEwyX1BJWF9GTVRfSlBFRzoKIAljYXNlIFY0TDJfUElYX0ZNVF9TUENBNTYxOgogCWNhc2UgVjRMMl9QSVhfRk1UX1BBQzIwNzoKKwljYXNlIFY0TDJfUElYX0ZNVF9NUjk3MzEwQToKIAkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwpAQCAtNDIyLDEwICs0MjYsOCBAQAogCQlpZiAodXJiID09IE5VTEwpCiAJCQlicmVhazsKIAotCQlCVUdfT04oIWdzcGNhX2Rldi0+ZGV2KTsKIAkJZ3NwY2FfZGV2LT51cmJbaV0gPSBOVUxMOwotCQlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKLQkJCXVzYl9raWxsX3VyYih1cmIpOworCQl1c2Jfa2lsbF91cmIodXJiKTsKIAkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyICE9IE5VTEwpCiAJCQl1c2JfYnVmZmVyX2ZyZWUoZ3NwY2FfZGV2LT5kZXYsCiAJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKQEAgLTQzOSwyMiArNDQxLDE2IEBACiAgKiBsb29rIGZvciBhbiBpbnB1dCB0cmFuc2ZlciBlbmRwb2ludCBpbiBhbiBhbHRlcm5hdGUgc2V0dGluZwogICovCiBzdGF0aWMgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICphbHRfeGZlcihzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQsCi0JCQkJCSAgX191OCBlcGFkZHIsCiAJCQkJCSAgX191OCB4ZmVyKQogewogCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CiAJaW50IGksIGF0dHI7CiAKLQllcGFkZHIgfD0gVVNCX0RJUl9JTjsKIAlmb3IgKGkgPSAwOyBpIDwgYWx0LT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykgewogCQllcCA9ICZhbHQtPmVuZHBvaW50W2ldOwotCQlpZiAoZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyA9PSBlcGFkZHIpIHsKLQkJCWF0dHIgPSBlcC0+ZGVzYy5ibUF0dHJpYnV0ZXMKLQkJCQkJCSYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0s7Ci0JCQlpZiAoYXR0ciA9PSB4ZmVyKQotCQkJCXJldHVybiBlcDsKLQkJCWJyZWFrOwotCQl9CisJCWF0dHIgPSBlcC0+ZGVzYy5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSzsKKwkJaWYgKGF0dHIgPT0geGZlcikKKwkJCXJldHVybiBlcDsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC00NzgsMjMgKzQ3NCwyMyBAQAogCWkgPSBnc3BjYV9kZXYtPmFsdDsJCQkvKiBwcmV2aW91cyBhbHQgc2V0dGluZyAqLwogCiAJLyogdHJ5IGlzb2MgKi8KLQl3aGlsZSAoLS1pID4gMCkgewkJCS8qIGFsdCAwIGlzIHVudXNhYmxlICovCisJd2hpbGUgKC0taSA+PSAwKSB7CiAJCWVwID0gYWx0X3hmZXIoJmludGYtPmFsdHNldHRpbmdbaV0sCi0JCQkJZ3NwY2FfZGV2LT5jYW0uZXBhZGRyLAogCQkJCVVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpOwogCQlpZiAoZXApCiAJCQlicmVhazsKIAl9CiAKLQkvKiBpZiBubyBpc29jLCB0cnkgYnVsayAqLworCS8qIGlmIG5vIGlzb2MsIHRyeSBidWxrIChhbHQgMCBvbmx5KSAqLwogCWlmIChlcCA9PSBOVUxMKSB7CiAJCWVwID0gYWx0X3hmZXIoJmludGYtPmFsdHNldHRpbmdbMF0sCi0JCQkJZ3NwY2FfZGV2LT5jYW0uZXBhZGRyLAogCQkJCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEspOwogCQlpZiAoZXAgPT0gTlVMTCkgewogCQkJZXJyKCJubyB0cmFuc2ZlciBlbmRwb2ludCBmb3VuZCIpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KKwkJaSA9IDA7CisJCWdzcGNhX2Rldi0+YnVsayA9IDE7CiAJfQogCVBERUJVRyhEX1NUUkVBTSwgInVzZSBhbHQgJWQgZXAgMHglMDJ4IiwKIAkJCWksIGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOwpAQCAtNTIxLDcgKzUxNyw3IEBACiAJLyogY2FsY3VsYXRlIHRoZSBwYWNrZXQgc2l6ZSBhbmQgdGhlIG51bWJlciBvZiBwYWNrZXRzICovCiAJcHNpemUgPSBsZTE2X3RvX2NwdShlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSk7CiAKLQlpZiAoZ3NwY2FfZGV2LT5hbHQgIT0gMCkgewkJLyogaXNvYyAqLworCWlmICghZ3NwY2FfZGV2LT5idWxrKSB7CQkJLyogaXNvYyAqLwogCiAJCS8qIFNlZSBwYXJhZ3JhcGggNS45IC8gdGFibGUgNS0xMSBvZiB0aGUgdXNiIDIuMCBzcGVjLiAqLwogCQlwc2l6ZSA9IChwc2l6ZSAmIDB4MDdmZikgKiAoMSArICgocHNpemUgPj4gMTEpICYgMykpOwpAQCAtNjAxLDYgKzU5NywxMSBAQAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCisJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCiAJLyogc2V0IHRoZSBoaWdoZXIgYWx0ZXJuYXRlIHNldHRpbmcgYW5kCiAJICogbG9vcCB1bnRpbCB1cmIgc3VibWl0IHN1Y2NlZWRzICovCiAJZ3NwY2FfZGV2LT5hbHQgPSBnc3BjYV9kZXYtPm5iYWx0OwpAQCAtNjE2LDEwICs2MTcsOSBAQAogCQkJZ290byBvdXQ7CiAKIAkJLyogY2xlYXIgdGhlIGJ1bGsgZW5kcG9pbnQgKi8KLQkJaWYgKGdzcGNhX2Rldi0+YWx0ID09IDApCS8qIGlmIGJ1bGsgdHJhbnNmZXIgKi8KKwkJaWYgKGdzcGNhX2Rldi0+YnVsaykKIAkJCXVzYl9jbGVhcl9oYWx0KGdzcGNhX2Rldi0+ZGV2LAotCQkJCQl1c2JfcmN2aW50cGlwZShnc3BjYV9kZXYtPmRldiwKLQkJCQkJCSBnc3BjYV9kZXYtPmNhbS5lcGFkZHIpKTsKKwkJCQkJZ3NwY2FfZGV2LT51cmJbMF0tPnBpcGUpOwogCiAJCS8qIHN0YXJ0IHRoZSBjYW0gKi8KIAkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5zdGFydChnc3BjYV9kZXYpOwpAQCAtNjMwLDcgKzYzMCw3IEBACiAJCWdzcGNhX2Rldi0+c3RyZWFtaW5nID0gMTsKIAogCQkvKiBzb21lIGJ1bGsgdHJhbnNmZXJzIGFyZSBzdGFydGVkIGJ5IHRoZSBzdWJkcml2ZXIgKi8KLQkJaWYgKGdzcGNhX2Rldi0+YWx0ID09IDAgJiYgZ3NwY2FfZGV2LT5jYW0uYnVsa19udXJicyA9PSAwKQorCQlpZiAoZ3NwY2FfZGV2LT5idWxrICYmIGdzcGNhX2Rldi0+Y2FtLmJ1bGtfbnVyYnMgPT0gMCkKIAkJCWJyZWFrOwogCiAJCS8qIHN1Ym1pdCB0aGUgVVJCcyAqLwpAQCAtNjcxLDExICs2NzEsMTQgQEAKIHN0YXRpYyB2b2lkIGdzcGNhX3N0cmVhbV9vZmYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCWdzcGNhX2Rldi0+c3RyZWFtaW5nID0gMDsKLQlpZiAoZ3NwY2FfZGV2LT5wcmVzZW50Ci0JICAgICYmIGdzcGNhX2Rldi0+c2RfZGVzYy0+c3RvcE4pCi0JCWdzcGNhX2Rldi0+c2RfZGVzYy0+c3RvcE4oZ3NwY2FfZGV2KTsKLQlkZXN0cm95X3VyYnMoZ3NwY2FfZGV2KTsKLQlnc3BjYV9zZXRfYWx0MChnc3BjYV9kZXYpOworCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpIHsKKwkJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+c3RvcE4pCisJCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3BOKGdzcGNhX2Rldik7CisJCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOworCQlnc3BjYV9zZXRfYWx0MChnc3BjYV9kZXYpOworCX0KKworCS8qIGFsd2F5cyBjYWxsIHN0b3AwIHRvIGZyZWUgdGhlIHN1YmRyaXZlcidzIHJlc291cmNlcyAqLwogCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3AwKQogCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3AwKGdzcGNhX2Rldik7CiAJUERFQlVHKERfU1RSRUFNLCAic3RyZWFtIG9mZiBPSyIpOwpAQCAtNzYyLDcgKzc2NSw2IEBACiAJZm10ZGVzYy0+cGl4ZWxmb3JtYXQgPSBmbXRfdGJbaW5kZXhdOwogCWlmIChnc3BjYV9pc19jb21wcmVzc2VkKGZtdF90YltpbmRleF0pKQogCQlmbXRkZXNjLT5mbGFncyA9IFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRDsKLQlmbXRkZXNjLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWZtdGRlc2MtPmRlc2NyaXB0aW9uWzBdID0gZm10ZGVzYy0+cGl4ZWxmb3JtYXQgJiAweGZmOwogCWZtdGRlc2MtPmRlc2NyaXB0aW9uWzFdID0gKGZtdGRlc2MtPnBpeGVsZm9ybWF0ID4+IDgpICYgMHhmZjsKIAlmbXRkZXNjLT5kZXNjcmlwdGlvblsyXSA9IChmbXRkZXNjLT5waXhlbGZvcm1hdCA+PiAxNikgJiAweGZmOwpAQCAtOTU3LDggKzk1OSwxNSBAQAogCQkJICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQogewogCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHByaXY7CisJaW50IHJldDsKIAotCW1lbXNldChjYXAsIDAsIHNpemVvZiAqY2FwKTsKKwkvKiBwcm90ZWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHVzYiBkZXZpY2UgKi8KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CiAJc3RybmNweShjYXAtPmRyaXZlciwgZ3NwY2FfZGV2LT5zZF9kZXNjLT5uYW1lLCBzaXplb2YgY2FwLT5kcml2ZXIpOwogCWlmIChnc3BjYV9kZXYtPmRldi0+cHJvZHVjdCAhPSBOVUxMKSB7CiAJCXN0cm5jcHkoY2FwLT5jYXJkLCBnc3BjYV9kZXYtPmRldi0+cHJvZHVjdCwKQEAgLTk2OSwxMyArOTc4LDE1IEBACiAJCQlsZTE2X3RvX2NwdShnc3BjYV9kZXYtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCiAJCQlsZTE2X3RvX2NwdShnc3BjYV9kZXYtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKIAl9Ci0Jc3RybmNweShjYXAtPmJ1c19pbmZvLCBnc3BjYV9kZXYtPmRldi0+YnVzLT5idXNfbmFtZSwKLQkJc2l6ZW9mIGNhcC0+YnVzX2luZm8pOworCXVzYl9tYWtlX3BhdGgoZ3NwY2FfZGV2LT5kZXYsIGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CiAJY2FwLT52ZXJzaW9uID0gRFJJVkVSX1ZFUlNJT05fTlVNQkVSOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRQogCQkJICB8IFY0TDJfQ0FQX1NUUkVBTUlORwogCQkJICB8IFY0TDJfQ0FQX1JFQURXUklURTsKLQlyZXR1cm4gMDsKKwlyZXQgPSAwOworb3V0OgorCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LApAQCAtMTAzOCw3ICsxMDQ5LDEwIEBACiAJCVBERUJVRyhEX0NPTkYsICJzZXQgY3RybCBbJTA4eF0gPSAlZCIsIGN0cmwtPmlkLCBjdHJsLT52YWx1ZSk7CiAJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJcmV0ID0gY3RybHMtPnNldChnc3BjYV9kZXYsIGN0cmwtPnZhbHVlKTsKKwkJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkKKwkJCXJldCA9IGN0cmxzLT5zZXQoZ3NwY2FfZGV2LCBjdHJsLT52YWx1ZSk7CisJCWVsc2UKKwkJCXJldCA9IC1FTk9ERVY7CiAJCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMTA2Miw3ICsxMDc2LDEwIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT51c2JfbG9jaykpCiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCQlyZXQgPSBjdHJscy0+Z2V0KGdzcGNhX2RldiwgJmN0cmwtPnZhbHVlKTsKKwkJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkKKwkJCXJldCA9IGN0cmxzLT5nZXQoZ3NwY2FfZGV2LCAmY3RybC0+dmFsdWUpOworCQllbHNlCisJCQlyZXQgPSAtRU5PREVWOwogCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTEwODEsNyArMTA5OCw2IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJIHN0cnVjdCB2NGwyX2F1ZGlvICphdWRpbykKIHsKLQltZW1zZXQoYXVkaW8sIDAsIHNpemVvZiAqYXVkaW8pOwogCXN0cmNweShhdWRpby0+bmFtZSwgIk1pY3JvcGhvbmUiKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTExMTUsNyArMTEzMSw2IEBACiAKIAlpZiAoaW5wdXQtPmluZGV4ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwotCW1lbXNldChpbnB1dCwgMCwgc2l6ZW9mICppbnB1dCk7CiAJaW5wdXQtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwogCXN0cm5jcHkoaW5wdXQtPm5hbWUsIGdzcGNhX2Rldi0+c2RfZGVzYy0+bmFtZSwKIAkJc2l6ZW9mIGlucHV0LT5uYW1lKTsKQEAgLTEyMjQsMTAgKzEyMzksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KSB7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KKwogCWlmIChnc3BjYV9kZXYtPm5mcmFtZXMgPT0gMAogCSAgICB8fCAhKGdzcGNhX2Rldi0+ZnJhbWVbMF0udjRsMl9idWYuZmxhZ3MgJiBWNEwyX0JVRl9GTEFHX1FVRVVFRCkpIHsKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTEyOTUsNyArMTMwNywxMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPmdldF9qY29tcChnc3BjYV9kZXYsIGpwZWdjb21wKTsKKwlpZiAoZ3NwY2FfZGV2LT5wcmVzZW50KQorCQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPmdldF9qY29tcChnc3BjYV9kZXYsIGpwZWdjb21wKTsKKwllbHNlCisJCXJldCA9IC1FTk9ERVY7CiAJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTMxMCw3ICsxMzI1LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCXJldCA9IGdzcGNhX2Rldi0+c2RfZGVzYy0+c2V0X2pjb21wKGdzcGNhX2RldiwganBlZ2NvbXApOworCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpCisJCXJldCA9IGdzcGNhX2Rldi0+c2RfZGVzYy0+c2V0X2pjb21wKGdzcGNhX2RldiwganBlZ2NvbXApOworCWVsc2UKKwkJcmV0ID0gLUVOT0RFVjsKIAltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwogCXJldHVybiByZXQ7CiB9CkBAIC0xMzIwLDggKzEzMzgsNiBAQAogewogCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHByaXY7CiAKLQltZW1zZXQocGFybSwgMCwgc2l6ZW9mICpwYXJtKTsKLQlwYXJtLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCXBhcm0tPnBhcm0uY2FwdHVyZS5yZWFkYnVmZmVycyA9IGdzcGNhX2Rldi0+bmJ1ZnJlYWQ7CiAKIAlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5nZXRfc3RyZWFtcGFybSkgewpAQCAtMTMyOSw3ICsxMzQ1LDExIEBACiAKIAkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT51c2JfbG9jaykpCiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPmdldF9zdHJlYW1wYXJtKGdzcGNhX2RldiwgcGFybSk7CisJCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpCisJCQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPmdldF9zdHJlYW1wYXJtKGdzcGNhX2RldiwKKwkJCQkJCQkJIHBhcm0pOworCQllbHNlCisJCQlyZXQgPSAtRU5PREVWOwogCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTEzNTQsNyArMTM3NCwxMSBAQAogCiAJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5zZXRfc3RyZWFtcGFybShnc3BjYV9kZXYsIHBhcm0pOworCQlpZiAoZ3NwY2FfZGV2LT5wcmVzZW50KQorCQkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5zZXRfc3RyZWFtcGFybShnc3BjYV9kZXYsCisJCQkJCQkJCSBwYXJtKTsKKwkJZWxzZQorCQkJcmV0ID0gLUVOT0RFVjsKIAkJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0xMzgyLDcgKzE0MDYsNiBAQAogCQl7CiAJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10OwogCi0JCQltZW1zZXQoJmZtdCwgMCwgc2l6ZW9mIGZtdCk7CiAJCQlmbXQudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAkJCWkgPSBnc3BjYV9kZXYtPmNhbS5ubW9kZXMgLSAxOwkvKiBoaWdoZXN0IG1vZGUgKi8KIAkJCWZtdC5mbXQucGl4LndpZHRoID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbaV0ud2lkdGg7CkBAIC0xNTI4LDcgKzE1NTEsOCBAQAogCiAJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+ZHFfY2FsbGJhY2spIHsKIAkJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7Ci0JCWdzcGNhX2Rldi0+c2RfZGVzYy0+ZHFfY2FsbGJhY2soZ3NwY2FfZGV2KTsKKwkJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkKKwkJCWdzcGNhX2Rldi0+c2RfZGVzYy0+ZHFfY2FsbGJhY2soZ3NwY2FfZGV2KTsKIAkJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAl9CiAJcmV0dXJuIGo7CkBAIC0xNTUwLDYgKzE1NzQsOSBAQAogCWlmICh2NGwyX2J1Zi0+bWVtb3J5ICE9IGdzcGNhX2Rldi0+bWVtb3J5KQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCS8qIGlmIG5vdCBzdHJlYW1pbmcsIGJlIHN1cmUgdGhlIGFwcGxpY2F0aW9uIHdpbGwgbm90IGxvb3AgZm9yZXZlciAqLwogCWlmICghKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQogCSAgICAmJiAhZ3NwY2FfZGV2LT5zdHJlYW1pbmcgJiYgZ3NwY2FfZGV2LT51c2VycyA9PSAxKQpAQCAtMTcwMCw4ICsxNzI3LDYgQEAKIAlQREVCVUcoRF9GUkFNLCAicG9sbCIpOwogCiAJcG9sbF93YWl0KGZpbGUsICZnc3BjYV9kZXYtPndxLCB3YWl0KTsKLQlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKLQkJcmV0dXJuIFBPTExFUlI7CiAKIAkvKiBpZiByZXFidWZzIGlzIG5vdCBkb25lLCB0aGUgdXNlciB3b3VsZCB1c2UgcmVhZCgpICovCiAJaWYgKGdzcGNhX2Rldi0+bmZyYW1lcyA9PSAwKSB7CkBAIC0xNzE0LDEwICsxNzM5LDYgQEAKIAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+cXVldWVfbG9jaykgIT0gMCkKIAkJcmV0dXJuIFBPTExFUlI7Ci0JaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpIHsKLQkJcmV0ID0gUE9MTEVSUjsKLQkJZ290byBvdXQ7Ci0JfQogCiAJLyogY2hlY2sgdGhlIG5leHQgaW5jb21pbmcgYnVmZmVyICovCiAJaSA9IGdzcGNhX2Rldi0+ZnJfbzsKQEAgLTE3MjYsOCArMTc0Nyw5IEBACiAJCXJldCA9IFBPTExJTiB8IFBPTExSRE5PUk07CS8qIHNvbWV0aGluZyB0byByZWFkICovCiAJZWxzZQogCQlyZXQgPSAwOwotb3V0OgogCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT5xdWV1ZV9sb2NrKTsKKwlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKKwkJcmV0dXJuIFBPTExIVVA7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTkyNSw3ICsxOTQ3LDcgQEAKIAlnc3BjYV9kZXYtPnByZXNlbnQgPSAxOwogCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZ3NwY2FfZGV2LT52ZGV2LAogCQkJCSAgVkZMX1RZUEVfR1JBQkJFUiwKLQkJCQkgIHZpZGVvX25yKTsKKwkJCQkgIC0xKTsKIAlpZiAocmV0IDwgMCkgewogCQllcnIoInZpZGVvX3JlZ2lzdGVyX2RldmljZSBlcnIgJWQiLCByZXQpOwogCQlnb3RvIG91dDsKQEAgLTE5NTMsMTAgKzE5NzUsMTYgQEAKIAogCW11dGV4X2xvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwogCWdzcGNhX2Rldi0+cHJlc2VudCA9IDA7CisKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKKwkJZGVzdHJveV91cmJzKGdzcGNhX2Rldik7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT53cSk7CisJfQorCisJLyogdGhlIGRldmljZSBpcyBmcmVlZCBhdCBleGl0IG9mIHRoaXMgZnVuY3Rpb24gKi8KKwlnc3BjYV9kZXYtPmRldiA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAotCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOwotCWdzcGNhX2Rldi0+ZGV2ID0gTlVMTDsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCiAJLyogcmVsZWFzZSB0aGUgZGV2aWNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmgKaW5kZXggYzkwYWY5Yy4uZTRkNGNmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaApAQCAtMzMsMTkgKzMzLDEzIEBACiAjZW5kaWYKICN1bmRlZiBlcnIKICNkZWZpbmUgZXJyKGZtdCwgYXJncy4uLikgXAotCWRvIHtcCi0JCXByaW50ayhLRVJOX0VSUiBNT0RVTEVfTkFNRSAiOiAiIGZtdCAiXG4iLCAjIyBhcmdzKTsgXAotCX0gd2hpbGUgKDApCisJcHJpbnRrKEtFUk5fRVJSIE1PRFVMRV9OQU1FICI6ICIgZm10ICJcbiIsICMjIGFyZ3MpCiAjdW5kZWYgaW5mbwogI2RlZmluZSBpbmZvKGZtdCwgYXJncy4uLikgXAotCWRvIHtcCi0JCXByaW50ayhLRVJOX0lORk8gTU9EVUxFX05BTUUgIjogIiBmbXQgIlxuIiwgIyMgYXJncyk7IFwKLQl9IHdoaWxlICgwKQorCXByaW50ayhLRVJOX0lORk8gTU9EVUxFX05BTUUgIjogIiBmbXQgIlxuIiwgIyMgYXJncykKICN1bmRlZiB3YXJuCiAjZGVmaW5lIHdhcm4oZm10LCBhcmdzLi4uKSBcCi0JZG8ge1wKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBNT0RVTEVfTkFNRSAiOiAiIGZtdCAiXG4iLCAjIyBhcmdzKTsgXAotCX0gd2hpbGUgKDApCisJcHJpbnRrKEtFUk5fV0FSTklORyBNT0RVTEVfTkFNRSAiOiAiIGZtdCAiXG4iLCAjIyBhcmdzKQogCiAjZGVmaW5lIEdTUENBX01BWF9GUkFNRVMgMTYJLyogbWF4aW11bSBudW1iZXIgb2YgdmlkZW8gZnJhbWUgYnVmZmVycyAqLwogLyogaW1hZ2UgdHJhbnNmZXJzICovCkBAIC02Miw3ICs1Niw2IEBACiAJCQkJICogLSBjYW5ub3QgYmUgPiBNQVhfTlVSQlMKIAkJCQkgKiAtIHdoZW4gMCBhbmQgYnVsa19zaXplICE9IDAgbWVhbnMKIAkJCQkgKiAgIDEgVVJCIGFuZCBzdWJtaXQgZG9uZSBieSBzdWJkcml2ZXIgKi8KLQlfX3U4IGVwYWRkcjsKIH07CiAKIHN0cnVjdCBnc3BjYV9kZXY7CkBAIC0xNzQsNiArMTY3LDcgQEAKIAlfX3U4IGlmYWNlOwkJCS8qIFVTQiBpbnRlcmZhY2UgbnVtYmVyICovCiAJX191OCBhbHQ7CQkJLyogVVNCIGFsdGVybmF0ZSBzZXR0aW5nICovCiAJX191OCBuYmFsdDsJCQkvKiBudW1iZXIgb2YgVVNCIGFsdGVybmF0ZSBzZXR0aW5ncyAqLworCXU4IGJ1bGs7CQkJLyogaW1hZ2UgdHJhbnNmZXIgYnkgMDppc29jIC8gMTpidWxrICovCiB9OwogCiBpbnQgZ3NwY2FfZGV2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9qcGVnLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2pwZWcuaAppbmRleCBkODIzYjQ3Li5kZTYzYzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2pwZWcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2pwZWcuaApAQCAtMjQsMTcxICsyNCwzOSBAQAogICoKICAqLwogCi0vKiBzdGFydCBvZiBqcGVnIGZyYW1lICsgcXVhbnRpemF0aW9uIHRhYmxlICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBxdWFudFtdWzB4ODhdID0gewotLyogaW5kZXggMCAtIFE0MCovCi0gICAgewotCTB4ZmYsIDB4ZDgsCQkJLyoganBlZyAqLwotCTB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsCQkvKiBEUVQgKi8KLTAsCQkJCQkvKiBxdWFudGl6YXRpb24gdGFibGUgcGFydCAxICovCi0gICAgIDIwLCAxNCwgMTUsIDE4LCAxNSwgMTMsIDIwLCAxOCwgMTYsIDE4LCAyMywgMjEsIDIwLCAyNCwgMzAsIDUwLAotICAgICAzMywgMzAsIDI4LCAyOCwgMzAsIDYxLCA0NCwgNDYsIDM2LCA1MCwgNzMsIDY0LCA3NiwgNzUsIDcxLCA2NCwKLSAgICAgNzAsIDY5LCA4MCwgOTAsIDExNSwgOTgsIDgwLCA4NSwgMTA5LCA4NiwgNjksIDcwLCAxMDAsIDEzNiwgMTAxLAotICAgICAxMDksCi0gICAgIDExOSwgMTIzLCAxMjksIDEzMCwgMTI5LCA3OCwgOTYsIDE0MSwgMTUxLCAxNDAsIDEyNSwgMTUwLCAxMTUsCi0gICAgIDEyNiwgMTI5LCAxMjQsCi0xLAkJCQkJLyogcXVhbnRpemF0aW9uIHRhYmxlIHBhcnQgMiAqLwotICAgICAyMSwgMjMsIDIzLCAzMCwgMjYsIDMwLCA1OSwgMzMsIDMzLCA1OSwgMTI0LCA4MywgNzAsIDgzLCAxMjQsIDEyNCwKLSAgICAgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LAotICAgICAxMjQsIDEyNCwgMTI0LAotICAgICAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsCi0gICAgIDEyNCwgMTI0LCAxMjQsCi0gICAgIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwKLSAgICAgMTI0LCAxMjQsIDEyNH0sCi0vKiBpbmRleCAxIC0gUTUwICovCi0gICAgewotCTB4ZmYsIDB4ZDgsCi0JMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwJCS8qIERRVCAqLwotMCwKLSAgICAgMTYsIDExLCAxMiwgMTQsIDEyLCAxMCwgMTYsIDE0LCAxMywgMTQsIDE4LCAxNywgMTYsIDE5LCAyNCwgNDAsCi0gICAgIDI2LCAyNCwgMjIsIDIyLCAyNCwgNDksIDM1LCAzNywgMjksIDQwLCA1OCwgNTEsIDYxLCA2MCwgNTcsIDUxLAotICAgICA1NiwgNTUsIDY0LCA3MiwgOTIsIDc4LCA2NCwgNjgsIDg3LCA2OSwgNTUsIDU2LCA4MCwgMTA5LCA4MSwgODcsCi0gICAgIDk1LCA5OCwgMTAzLCAxMDQsIDEwMywgNjIsIDc3LCAxMTMsIDEyMSwgMTEyLCAxMDAsIDEyMCwgOTIsIDEwMSwKLSAgICAgMTAzLCA5OSwKLTEsCi0gICAgMTcsIDE4LCAxOCwgMjQsIDIxLCAyNCwgNDcsIDI2LCAyNiwgNDcsIDk5LCA2NiwgNTYsIDY2LCA5OSwgOTksCi0gICAgIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LAotICAgICA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwKLSAgICAgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTl9LAotLyogaW5kZXggMiBRNjAgKi8KLSAgICB7Ci0JMHhmZiwgMHhkOCwKLQkweGZmLCAweGRiLCAweDAwLCAweDg0LAkJLyogRFFUICovCi0wLAotICAgICAxMywgOSwgMTAsIDExLCAxMCwgOCwgMTMsIDExLCAxMCwgMTEsIDE0LCAxNCwgMTMsIDE1LCAxOSwgMzIsCi0gICAgIDIxLCAxOSwgMTgsIDE4LCAxOSwgMzksIDI4LCAzMCwgMjMsIDMyLCA0NiwgNDEsIDQ5LCA0OCwgNDYsIDQxLAotICAgICA0NSwgNDQsIDUxLCA1OCwgNzQsIDYyLCA1MSwgNTQsIDcwLCA1NSwgNDQsIDQ1LCA2NCwgODcsIDY1LCA3MCwKLSAgICAgNzYsIDc4LCA4MiwgODMsIDgyLCA1MCwgNjIsIDkwLCA5NywgOTAsIDgwLCA5NiwgNzQsIDgxLCA4MiwgNzksCi0xLAotICAgICAxNCwgMTQsIDE0LCAxOSwgMTcsIDE5LCAzOCwgMjEsIDIxLCAzOCwgNzksIDUzLCA0NSwgNTMsIDc5LCA3OSwKLSAgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksCi0gICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LAotICAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OX0sCi0vKiBpbmRleCAzIC0gUTcwICovCi0gICAgewotCTB4ZmYsIDB4ZDgsCi0JMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwJCS8qIERRVCAqLwotMCwKLSAgICAgMTAsIDcsIDcsIDgsIDcsIDYsIDEwLCA4LCA4LCA4LCAxMSwgMTAsIDEwLCAxMSwgMTQsIDI0LAotICAgICAxNiwgMTQsIDEzLCAxMywgMTQsIDI5LCAyMSwgMjIsIDE3LCAyNCwgMzUsIDMxLCAzNywgMzYsIDM0LCAzMSwKLSAgICAgMzQsIDMzLCAzOCwgNDMsIDU1LCA0NywgMzgsIDQxLCA1MiwgNDEsIDMzLCAzNCwgNDgsIDY1LCA0OSwgNTIsCi0gICAgIDU3LCA1OSwgNjIsIDYyLCA2MiwgMzcsIDQ2LCA2OCwgNzMsIDY3LCA2MCwgNzIsIDU1LCA2MSwgNjIsIDU5LAotMSwKLSAgICAgMTAsIDExLCAxMSwgMTQsIDEzLCAxNCwgMjgsIDE2LCAxNiwgMjgsIDU5LCA0MCwgMzQsIDQwLCA1OSwgNTksCi0gICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LAotICAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwKLSAgICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTl9LAotLyogaW5kZXggNCAtIFE4MCAqLwotICAgIHsKLQkweGZmLCAweGQ4LAotCTB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsCQkvKiBEUVQgKi8KLTAsCi0gICAgICA2LCA0LCA1LCA2LCA1LCA0LCA2LCA2LCA1LCA2LCA3LCA3LCA2LCA4LCAxMCwgMTYsCi0gICAgIDEwLCAxMCwgOSwgOSwgMTAsIDIwLCAxNCwgMTUsIDEyLCAxNiwgMjMsIDIwLCAyNCwgMjQsIDIzLCAyMCwKLSAgICAgMjIsIDIyLCAyNiwgMjksIDM3LCAzMSwgMjYsIDI3LCAzNSwgMjgsIDIyLCAyMiwgMzIsIDQ0LCAzMiwgMzUsCi0gICAgIDM4LCAzOSwgNDEsIDQyLCA0MSwgMjUsIDMxLCA0NSwgNDgsIDQ1LCA0MCwgNDgsIDM3LCA0MCwgNDEsIDQwLAotMSwKLSAgICAgIDcsIDcsIDcsIDEwLCA4LCAxMCwgMTksIDEwLCAxMCwgMTksIDQwLCAyNiwgMjIsIDI2LCA0MCwgNDAsCi0gICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLAotICAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwKLSAgICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDB9LAotLyogaW5kZXggNSAtIFE4NSAqLwotICAgIHsKLQkweGZmLCAweGQ4LAotCTB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsCQkvKiBEUVQgKi8KLTAsCi0gICAgIDUsIDMsIDQsIDQsIDQsIDMsIDUsIDQsIDQsIDQsIDUsIDUsIDUsIDYsIDcsIDEyLAotICAgICA4LCA3LCA3LCA3LCA3LCAxNSwgMTEsIDExLCA5LCAxMiwgMTcsIDE1LCAxOCwgMTgsIDE3LCAxNSwKLSAgICAgMTcsIDE3LCAxOSwgMjIsIDI4LCAyMywgMTksIDIwLCAyNiwgMjEsIDE3LCAxNywgMjQsIDMzLCAyNCwgMjYsCi0gICAgIDI5LCAyOSwgMzEsIDMxLCAzMSwgMTksIDIzLCAzNCwgMzYsIDM0LCAzMCwgMzYsIDI4LCAzMCwgMzEsIDMwLAotMSwKLSAgICAgNSwgNSwgNSwgNywgNiwgNywgMTQsIDgsIDgsIDE0LCAzMCwgMjAsIDE3LCAyMCwgMzAsIDMwLAotICAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwKLSAgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsCi0gICAgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSwKLS8qIGluZGV4IDYgLSA4NiAqLwotewotCTB4ZmYsIDB4ZDgsCi0JMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwJCS8qIERRVCAqLwotMCwKLQkweDA0LCAweDAzLCAweDAzLCAweDA0LCAweDAzLCAweDAzLCAweDA0LCAweDA0LAotCTB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsIDB4MDQsIDB4MDUsIDB4MDcsIDB4MEIsCi0JMHgwNywgMHgwNywgMHgwNiwgMHgwNiwgMHgwNywgMHgwRSwgMHgwQSwgMHgwQSwKLQkweDA4LCAweDBCLCAweDEwLCAweDBFLCAweDExLCAweDExLCAweDEwLCAweDBFLAotCTB4MTAsIDB4MEYsIDB4MTIsIDB4MTQsIDB4MUEsIDB4MTYsIDB4MTIsIDB4MTMsCi0JMHgxOCwgMHgxMywgMHgwRiwgMHgxMCwgMHgxNiwgMHgxRiwgMHgxNywgMHgxOCwKLQkweDFCLCAweDFCLCAweDFELCAweDFELCAweDFELCAweDExLCAweDE2LCAweDIwLAotCTB4MjIsIDB4MUYsIDB4MUMsIDB4MjIsIDB4MUEsIDB4MUMsIDB4MUQsIDB4MUMsCi0xLAotCTB4MDUsIDB4MDUsIDB4MDUsIDB4MDcsIDB4MDYsIDB4MDcsIDB4MEQsIDB4MDcsCi0JMHgwNywgMHgwRCwgMHgxQywgMHgxMiwgMHgxMCwgMHgxMiwgMHgxQywgMHgxQywKLQkweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLAotCTB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsCi0JMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywKLQkweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLAotCTB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsCi0JMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywKLSB9LAotLyogaW5kZXggNyAtIDg4ICovCi17Ci0JMHhmZiwgMHhkOCwKLQkweGZmLCAweGRiLCAweDAwLCAweDg0LAkJLyogRFFUICovCi0wLAotCTB4MDQsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MDMsCi0JMHgwMywgMHgwMywgMHgwNCwgMHgwNCwgMHgwNCwgMHgwNSwgMHgwNiwgMHgwQSwKLQkweDA2LCAweDA2LCAweDA1LCAweDA1LCAweDA2LCAweDBDLCAweDA4LCAweDA5LAotCTB4MDcsIDB4MEEsIDB4MEUsIDB4MEMsIDB4MEYsIDB4MEUsIDB4MEUsIDB4MEMsCi0JMHgwRCwgMHgwRCwgMHgwRiwgMHgxMSwgMHgxNiwgMHgxMywgMHgwRiwgMHgxMCwKLQkweDE1LCAweDExLCAweDBELCAweDBELCAweDEzLCAweDFBLCAweDEzLCAweDE1LAotCTB4MTcsIDB4MTgsIDB4MTksIDB4MTksIDB4MTksIDB4MEYsIDB4MTIsIDB4MUIsCi0JMHgxRCwgMHgxQiwgMHgxOCwgMHgxRCwgMHgxNiwgMHgxOCwgMHgxOSwgMHgxOCwKLTEsCi0JMHgwNCwgMHgwNCwgMHgwNCwgMHgwNiwgMHgwNSwgMHgwNiwgMHgwQiwgMHgwNiwKLQkweDA2LCAweDBCLCAweDE4LCAweDEwLCAweDBELCAweDEwLCAweDE4LCAweDE4LAotCTB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsCi0JMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwKLQkweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LAotCTB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsCi0JMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwKLQkweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LAotfSwKLS8qIGluZGV4IDggLSA/PyAqLwotewotCTB4ZmYsIDB4ZDgsCi0JMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwJCS8qIERRVCAqLwotMCwKLQkweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLAotCTB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDMsIDB4MDUsCi0JMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwNiwgMHgwNCwgMHgwNSwKLQkweDA0LCAweDA1LCAweDA3LCAweDA2LCAweDA4LCAweDA4LCAweDA3LCAweDA2LAotCTB4MDcsIDB4MDcsIDB4MDgsIDB4MDksIDB4MEMsIDB4MEEsIDB4MDgsIDB4MDksCi0JMHgwQiwgMHgwOSwgMHgwNywgMHgwNywgMHgwQSwgMHgwRSwgMHgwQSwgMHgwQiwKLQkweDBDLCAweDBDLCAweDBELCAweDBELCAweDBELCAweDA4LCAweDBBLCAweDBFLAotCTB4MEYsIDB4MEUsIDB4MEQsIDB4MEYsIDB4MEMsIDB4MEQsIDB4MEQsIDB4MEMsCi0xLAotCTB4MDIsIDB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDYsIDB4MDMsCi0JMHgwMywgMHgwNiwgMHgwQywgMHgwOCwgMHgwNywgMHgwOCwgMHgwQywgMHgwQywKLQkweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLAotCTB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsCi0JMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywKLQkweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLAotCTB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsCi0JMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQwotfQotfTsKKy8qCisgKiBnZW5lcmF0aW9uIG9wdGlvbnMKKyAqCUNPTkVYX0NBTQlDb25leGFudCBpZiBwcmVzZW50CisgKi8KIAotLyogaHVmZm1hbiB0YWJsZSArIHN0YXJ0IG9mIFNPRjAgKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGh1ZmZtYW5bXSA9IHsKKy8qIEpQRUcgaGVhZGVyICovCitzdGF0aWMgY29uc3QgdTgganBlZ19oZWFkW10gPSB7CisJMHhmZiwgMHhkOCwJCQkvKiBqcGVnICovCisKKy8qIHF1YW50aXphdGlvbiB0YWJsZSBxdWFsaXR5IDUwJSAqLworCTB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsCQkvKiBEUVQgKi8KKzAsCisjZGVmaW5lIEpQRUdfUVQwX09GRlNFVCA3CisJMHgxMCwgMHgwYiwgMHgwYywgMHgwZSwgMHgwYywgMHgwYSwgMHgxMCwgMHgwZSwKKwkweDBkLCAweDBlLCAweDEyLCAweDExLCAweDEwLCAweDEzLCAweDE4LCAweDI4LAorCTB4MWEsIDB4MTgsIDB4MTYsIDB4MTYsIDB4MTgsIDB4MzEsIDB4MjMsIDB4MjUsCisJMHgxZCwgMHgyOCwgMHgzYSwgMHgzMywgMHgzZCwgMHgzYywgMHgzOSwgMHgzMywKKwkweDM4LCAweDM3LCAweDQwLCAweDQ4LCAweDVjLCAweDRlLCAweDQwLCAweDQ0LAorCTB4NTcsIDB4NDUsIDB4MzcsIDB4MzgsIDB4NTAsIDB4NmQsIDB4NTEsIDB4NTcsCisJMHg1ZiwgMHg2MiwgMHg2NywgMHg2OCwgMHg2NywgMHgzZSwgMHg0ZCwgMHg3MSwKKwkweDc5LCAweDcwLCAweDY0LCAweDc4LCAweDVjLCAweDY1LCAweDY3LCAweDYzLAorMSwKKyNkZWZpbmUgSlBFR19RVDFfT0ZGU0VUIDcyCisJMHgxMSwgMHgxMiwgMHgxMiwgMHgxOCwgMHgxNSwgMHgxOCwgMHgyZiwgMHgxYSwKKwkweDFhLCAweDJmLCAweDYzLCAweDQyLCAweDM4LCAweDQyLCAweDYzLCAweDYzLAorCTB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsCisJMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywKKwkweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLAorCTB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsCisJMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywKKwkweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLAorCisvKiBodWZmbWFuIHRhYmxlICovCiAJMHhmZiwgMHhjNCwgMHgwMSwgMHhhMiwKIAkweDAwLCAweDAwLCAweDAxLCAweDA1LCAweDAxLCAweDAxLCAweDAxLCAweDAxLAogCTB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCkBAIC0yNDQsNTggKzExMiw1NyBAQAogCTB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsIDB4ZjgsIDB4ZjksIDB4ZmEsCiAjaWZkZWYgQ09ORVhfQ0FNCiAvKiB0aGUgQ29uZXhhbnQgZnJhbWVzIHN0YXJ0IHdpdGggU09GMCAqLworI2RlZmluZSBKUEVHX0hEUl9TWiA1NTYKICNlbHNlCiAJMHhmZiwgMHhjMCwgMHgwMCwgMHgxMSwJCS8qIFNPRjAgKHN0YXJ0IG9mIGZyYW1lIDAgKi8KIAkweDA4LAkJCQkvKiBkYXRhIHByZWNpc2lvbiAqLwotI2VuZGlmCi19OwotCi0jaWZuZGVmIENPTkVYX0NBTQotLyogdmFyaWFibGUgcGFydDoKLSAqCTB4MDEsIDB4ZTAsCQkJIGhlaWdodAotICoJMHgwMiwgMHg4MCwJCQkgd2lkdGgKLSAqCTB4MDMsCQkJCSBjb21wb25lbnQgbnVtYmVyCi0gKgkJMHgwMSwKLSAqCQkJMHgyMSwJCQlzYW1wbGVzIFkKLSAqLwotCi0vKiBlbmQgb2YgaGVhZGVyICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBlb2hbXSA9IHsKKyNkZWZpbmUgSlBFR19IRUlHSFRfT0ZGU0VUIDU2MQorCTB4MDEsIDB4ZTAsCQkJLyogaGVpZ2h0ICovCisJMHgwMiwgMHg4MCwJCQkvKiB3aWR0aCAqLworCTB4MDMsCQkJCS8qIGNvbXBvbmVudCBudW1iZXIgKi8KKwkJMHgwMSwKKwkJCTB4MjEsCQkvKiBzYW1wbGVzIFkgKi8KIAkJCTB4MDAsCQkvKiBxdWFudCBZICovCiAJCTB4MDIsIDB4MTEsIDB4MDEsCS8qIHNhbXBsZXMgQ2JDciAtIHF1YW50IENiQ3IgKi8KIAkJMHgwMywgMHgxMSwgMHgwMSwKIAogCTB4ZmYsIDB4ZGEsIDB4MDAsIDB4MGMsCQkvKiBTT1MgKHN0YXJ0IG9mIHNjYW4pICovCiAJMHgwMywgMHgwMSwgMHgwMCwgMHgwMiwgMHgxMSwgMHgwMywgMHgxMSwgMHgwMCwgMHgzZiwgMHgwMAorI2RlZmluZSBKUEVHX0hEUl9TWiA1ODkKKyNlbmRpZgogfTsKLSNlbmRpZgogCi0vKiAtLSBvdXRwdXQgdGhlIEpQRUcgaGVhZGVyIC0tICovCi1zdGF0aWMgdm9pZCBqcGVnX3B1dF9oZWFkZXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJICAgIHN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUsCi0JCQkgICAgaW50IHFpbmRleCwKLQkJCSAgICBpbnQgc2FtcGxlc1kpCisvKiBkZWZpbmUgdGhlIEpQRUcgaGVhZGVyICovCitzdGF0aWMgdm9pZCBqcGVnX2RlZmluZSh1OCAqanBlZ19oZHIsCisJCQlpbnQgaGVpZ2h0LAorCQkJaW50IHdpZHRoLAorCQkJaW50IHNhbXBsZXNZKQogeworCW1lbWNweShqcGVnX2hkciwganBlZ19oZWFkLCBzaXplb2YganBlZ19oZWFkKTsKICNpZm5kZWYgQ09ORVhfQ0FNCi0JdW5zaWduZWQgY2hhciB0bXBidWZbOF07CisJanBlZ19oZHJbSlBFR19IRUlHSFRfT0ZGU0VUICsgMF0gPSBoZWlnaHQgPj4gODsKKwlqcGVnX2hkcltKUEVHX0hFSUdIVF9PRkZTRVQgKyAxXSA9IGhlaWdodCAmIDB4ZmY7CisJanBlZ19oZHJbSlBFR19IRUlHSFRfT0ZGU0VUICsgMl0gPSB3aWR0aCA+PiA4OworCWpwZWdfaGRyW0pQRUdfSEVJR0hUX09GRlNFVCArIDNdID0gd2lkdGggJiAweGZmOworCWpwZWdfaGRyW0pQRUdfSEVJR0hUX09GRlNFVCArIDZdID0gc2FtcGxlc1k7CiAjZW5kaWYKK30KIAotCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCi0JCQkodW5zaWduZWQgY2hhciAqKSBxdWFudFtxaW5kZXhdLCBzaXplb2YgcXVhbnRbMF0pOwotCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsCi0JCQkodW5zaWduZWQgY2hhciAqKSBodWZmbWFuLCBzaXplb2YgaHVmZm1hbik7Ci0jaWZuZGVmIENPTkVYX0NBTQotCXRtcGJ1ZlswXSA9IGdzcGNhX2Rldi0+aGVpZ2h0ID4+IDg7Ci0JdG1wYnVmWzFdID0gZ3NwY2FfZGV2LT5oZWlnaHQgJiAweGZmOwotCXRtcGJ1ZlsyXSA9IGdzcGNhX2Rldi0+d2lkdGggPj4gODsKLQl0bXBidWZbM10gPSBnc3BjYV9kZXYtPndpZHRoICYgMHhmZjsKLQl0bXBidWZbNF0gPSAweDAzOwkJLyogY29tcG9uZW50IG51bWJlciAqLwotCXRtcGJ1Zls1XSA9IDB4MDE7CQkvKiBmaXJzdCBjb21wb25lbnQgKi8KLQl0bXBidWZbNl0gPSBzYW1wbGVzWTsKLQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLAotCQkJdG1wYnVmLCA3KTsKLQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLAotCQkJZW9oLCBzaXplb2YgZW9oKTsKLSNlbmRpZgorLyogc2V0IHRoZSBKUEVHIHF1YWxpdHkgKi8KK3N0YXRpYyB2b2lkIGpwZWdfc2V0X3F1YWwodTggKmpwZWdfaGRyLAorCQkJICBpbnQgcXVhbGl0eSkKK3sKKwlpbnQgaSwgc2M7CisKKwlpZiAocXVhbGl0eSA8IDUwKQorCQlzYyA9IDUwMDAgLyBxdWFsaXR5OworCWVsc2UKKwkJc2MgPSAyMDAgLSBxdWFsaXR5ICogMjsKKwlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeworCQlqcGVnX2hkcltKUEVHX1FUMF9PRkZTRVQgKyBpXSA9CisJCQkoanBlZ19oZWFkW0pQRUdfUVQwX09GRlNFVCArIGldICogc2MgKyA1MCkgLyAxMDA7CisJCWpwZWdfaGRyW0pQRUdfUVQxX09GRlNFVCArIGldID0KKwkJCShqcGVnX2hlYWRbSlBFR19RVDFfT0ZGU0VUICsgaV0gKiBzYyArIDUwKSAvIDEwMDsKKwl9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKaW5kZXggZWQ5MDZmZS4uYjM1ZTQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKQEAgLTMzMiw3ICszMzIsNiBAQAogCWludCBlcnI7CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSBNNTYwMl9JU09DX0VORFBPSU5UX0FERFI7CiAJc2QtPmRlc2MgPSAmc2RfZGVzYzsKIAogCWlmIChkdW1wX2JyaWRnZSkKQEAgLTM3NCw4ICszNzMsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IG1vZF9tNTYwMl9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tYXJzLmMKaW5kZXggM2QyMDkwZS4uNzVlOGQxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tYXJzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tYXJzLmMKQEAgLTMyLDE3ICszMiw5MSBAQAogc3RydWN0IHNkIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLwogCi0JY2hhciBxaW5kZXg7CisJdTggYnJpZ2h0bmVzczsKKwl1OCBjb2xvcnM7CisJdTggZ2FtbWE7CisJdTggc2hhcnBuZXNzOworCXU4IHF1YWxpdHk7CisjZGVmaW5lIFFVQUxJVFlfTUlOIDQwCisjZGVmaW5lIFFVQUxJVFlfTUFYIDcwCisjZGVmaW5lIFFVQUxJVFlfREVGIDUwCisKKwl1OCAqanBlZ19oZHI7CiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGdhbW1hKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworCiBzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkJyaWdodG5lc3MiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMzAsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQlJJR0hUTkVTU19ERUYgMTUKKwkJLmRlZmF1bHRfdmFsdWUgPSBCUklHSFRORVNTX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCisJICAgIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAorCX0sCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJDb2xvciIsCisJCS5taW5pbXVtID0gMSwKKwkJLm1heGltdW0gPSAyNTUsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQ09MT1JfREVGIDIwMAorCQkuZGVmYXVsdF92YWx1ZSA9IENPTE9SX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGNvbG9ycywKKwkgICAgLmdldCA9IHNkX2dldGNvbG9ycywKKwl9LAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0dBTU1BLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkdhbW1hIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDMsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgR0FNTUFfREVGIDEKKwkJLmRlZmF1bHRfdmFsdWUgPSBHQU1NQV9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRnYW1tYSwKKwkgICAgLmdldCA9IHNkX2dldGdhbW1hLAorCX0sCisJeworCSAgICB7CisJCS5pZAkgPSBWNEwyX0NJRF9TSEFSUE5FU1MsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiU2hhcnBuZXNzIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDIsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgU0hBUlBORVNTX0RFRiAxCisJCS5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldHNoYXJwbmVzcywKKwkgICAgLmdldCA9IHNkX2dldHNoYXJwbmVzcywKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKIAl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCi0JCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU4OSwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDMgLyA4ICsgNTkwLAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAogCQkucHJpdiA9IDJ9LAogCXs2NDAsIDQ4MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKQEAgLTUyLDY1ICsxMjYsNDUgQEAKIAkJLnByaXYgPSAxfSwKIH07CiAKLS8qIE1JIFJlZ2lzdGVyIHRhYmxlIC8vZWx2aXMgKi8KLWVudW0gewotCVJFR19IV19NSV8wLAotCVJFR19IV19NSV8xLAotCVJFR19IV19NSV8yLAotCVJFR19IV19NSV8zLAotCVJFR19IV19NSV80LAotCVJFR19IV19NSV81LAotCVJFR19IV19NSV82LAotCVJFR19IV19NSV83LAotCVJFR19IV19NSV85ID0gMHgwOSwKLQlSRUdfSFdfTUlfQiA9IDB4MEIsCi0JUkVHX0hXX01JX0MsCi0JUkVHX0hXX01JX0QsCi0JUkVHX0hXX01JXzFFID0gMHgxRSwKLQlSRUdfSFdfTUlfMjAgPSAweDIwLAotCVJFR19IV19NSV8yQiA9IDB4MkIsCi0JUkVHX0hXX01JXzJDLAotCVJFR19IV19NSV8yRCwKLQlSRUdfSFdfTUlfMkUsCi0JUkVHX0hXX01JXzM1ID0gMHgzNSwKLQlSRUdfSFdfTUlfNUYgPSAweDVmLAotCVJFR19IV19NSV82MCwKLQlSRUdfSFdfTUlfNjEsCi0JUkVHX0hXX01JXzYyLAotCVJFR19IV19NSV82MywKLQlSRUdfSFdfTUlfNjQsCi0JUkVHX0hXX01JX0YxID0gMHhmMSwKLQlBVFRSX1RPVEFMX01JX1JFRyA9IDB4ZjIKK3N0YXRpYyBjb25zdCBfX3U4IG1pX2RhdGFbMHgyMF0gPSB7CisvKgkgMDEgICAgMDIgICAwMyAgICAgMDQgICAgMDUgICAgMDYgICAgMDcgICAgMDggKi8KKwkweDQ4LCAweDIyLCAweDAxLCAweDQ3LCAweDEwLCAweDAwLCAweDAwLCAweDAwLAorLyoJIDA5ICAgIDBhICAgMGIgICAgIDBjICAgIDBkICAgIDBlICAgIDBmICAgIDEwICovCisJMHgwMCwgMHgwMSwgMHgzMCwgMHgwMSwgMHgzMCwgMHgwMSwgMHgzMCwgMHgwMSwKKy8qCSAxMSAgICAxMiAgIDEzICAgICAxNCAgICAxNSAgICAxNiAgICAxNyAgICAxOCAqLworCTB4MzAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDYsIDB4MDEsIDB4ZTIsIDB4MDIsCisvKgkgMTkgICAgMWEgICAxYiAgICAgMWMgICAgMWQgICAgMWUgICAgMWYgICAgMjAgKi8KKwkweDgyLCAweDAwLCAweDIwLCAweDE3LCAweDgwLCAweDA4LCAweDBjLCAweDAwCiB9OwogCi0vKiB0aGUgYnl0ZXMgdG8gd3JpdGUgYXJlIGluIGdzcGNhX2Rldi0+dXNiX2J1ZiAqLworLyogd3JpdGUgPGxlbj4gYnl0ZXMgZnJvbSBnc3BjYV9kZXYtPnVzYl9idWYgKi8KIHN0YXRpYyBpbnQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkgX191MTYgaW5kZXgsIGludCBsZW4pCisJCSBpbnQgbGVuKQogewotCWludCByYzsKKwlpbnQgYWxlbiwgcmV0OwogCi0JcmMgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCi0JCQkgdXNiX3NuZGJ1bGtwaXBlKGdzcGNhX2Rldi0+ZGV2LCA0KSwKLQkJCSAweDEyLAotCQkJIDB4YzgsCQkvKiA/PyAqLwotCQkJIDAsCQkvKiB2YWx1ZSAqLwotCQkJIGluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwgNTAwKTsKLQlpZiAocmMgPCAwKQotCQlQREVCVUcoRF9FUlIsICJyZWcgd3JpdGUgWyUwMnhdIGVycm9yICVkIiwgaW5kZXgsIHJjKTsKLQlyZXR1cm4gcmM7CisJcmV0ID0gdXNiX2J1bGtfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3NuZGJ1bGtwaXBlKGdzcGNhX2Rldi0+ZGV2LCA0KSwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwKKwkJCWxlbiwKKwkJCSZhbGVuLAorCQkJNTAwKTsJLyogdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi8KKwlpZiAocmV0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAicmVnIHdyaXRlIFslMDJ4XSBlcnJvciAlZCIsCisJCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0sIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgYnVsa193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJICAgX191MTYgKnBjaCwKLQkJICAgX191MTYgQWRkcmVzcykKK3N0YXRpYyB2b2lkIG1pX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgdTggYWRkciwKKwkJIHU4IHZhbHVlKQogewogCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4MWY7CiAJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gMDsJCQkvKiBjb250cm9sIGJ5dGUgKi8KLQlnc3BjYV9kZXYtPnVzYl9idWZbMl0gPSBBZGRyZXNzOwotCWdzcGNhX2Rldi0+dXNiX2J1ZlszXSA9ICpwY2ggPj4gODsJCS8qIGhpZ2ggYnl0ZSAqLwotCWdzcGNhX2Rldi0+dXNiX2J1Zls0XSA9ICpwY2g7CQkJLyogbG93IGJ5dGUgKi8KKwlnc3BjYV9kZXYtPnVzYl9idWZbMl0gPSBhZGRyOworCWdzcGNhX2Rldi0+dXNiX2J1ZlszXSA9IHZhbHVlOwogCi0JcmVnX3coZ3NwY2FfZGV2LCBBZGRyZXNzLCA1KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDQpOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCkBAIC0xMjEsMTAgKzE3NSwxNCBAQAogCXN0cnVjdCBjYW0gKmNhbTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOwogCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7Ci0Jc2QtPnFpbmRleCA9IDE7CQkJLyogc2V0IHRoZSBxdWFudGl6YXRpb24gdGFibGUgKi8KKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOworCXNkLT5jb2xvcnMgPSBDT0xPUl9ERUY7CisJc2QtPmdhbW1hID0gR0FNTUFfREVGOworCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfREVGOworCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7CisJZ3NwY2FfZGV2LT5uYmFsdCA9IDk7CQkvKiB1c2UgdGhlIGFsdHNldHRpbmcgMDggKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM2LDI0ICsxOTQsMjIgQEAKIAogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBlcnJfY29kZTsKLQlfX3U4ICpkYXRhOwotCV9fdTE2ICpNSV9idWY7Ci0JaW50IGhfc2l6ZSwgdl9zaXplOwotCWludCBpbnRwaXBlOworCXU4ICpkYXRhOworCWludCBpOwogCi0JUERFQlVHKERfU1RSRUFNLCAiY2FtZXJhIHN0YXJ0LCBpZmFjZSAlZCwgYWx0IDgiLCBnc3BjYV9kZXYtPmlmYWNlKTsKLQllcnJfY29kZSA9IHVzYl9zZXRfaW50ZXJmYWNlKGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPmlmYWNlLCA4KTsKLQlpZiAoZXJyX2NvZGUgPCAwKSB7Ci0JCVBERUJVRyhEX0VSUnxEX1NUUkVBTSwgIlNldCBwYWNrZXQgc2l6ZTogc2V0IGludGVyZmFjZSBlcnJvciIpOwotCQlyZXR1cm4gZXJyX2NvZGU7Ci0JfQorCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KKwlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKKwlqcGVnX2RlZmluZShzZC0+anBlZ19oZHIsIGdzcGNhX2Rldi0+aGVpZ2h0LCBnc3BjYV9kZXYtPndpZHRoLAorCQkJMHgyMSk7CQkvKiBKUEVHIDQyMiAqLworCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CiAKIAlkYXRhID0gZ3NwY2FfZGV2LT51c2JfYnVmOworCiAJZGF0YVswXSA9IDB4MDE7CQkvKiBhZGRyZXNzICovCiAJZGF0YVsxXSA9IDB4MDE7Ci0KLQllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgMik7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOwogCWlmIChlcnJfY29kZSA8IDApCiAJCXJldHVybiBlcnJfY29kZTsKIApAQCAtMTYzLDMwICsyMTksMjggQEAKIAlkYXRhWzBdID0gMHgwMDsJCS8qIGFkZHJlc3MgKi8KIAlkYXRhWzFdID0gMHgwYyB8IDB4MDE7CS8qIHJlZyAwICovCiAJZGF0YVsyXSA9IDB4MDE7CQkvKiByZWcgMSAqLwotCWhfc2l6ZSA9IGdzcGNhX2Rldi0+d2lkdGg7Ci0Jdl9zaXplID0gZ3NwY2FfZGV2LT5oZWlnaHQ7Ci0JZGF0YVszXSA9IGhfc2l6ZSAvIDg7CS8qIGhfc2l6ZSAsIHJlZyAyICovCi0JZGF0YVs0XSA9IHZfc2l6ZSAvIDg7CS8qIHZfc2l6ZSAsIHJlZyAzICovCisJZGF0YVszXSA9IGdzcGNhX2Rldi0+d2lkdGggLyA4OwkJLyogaF9zaXplICwgcmVnIDIgKi8KKwlkYXRhWzRdID0gZ3NwY2FfZGV2LT5oZWlnaHQgLyA4OwkvKiB2X3NpemUgLCByZWcgMyAqLwogCWRhdGFbNV0gPSAweDMwOwkJLyogcmVnIDQsIE1JLCBQQVM1MTAxIDoKIAkJCQkgKgkweDMwIGZvciAyNG1oeiAsIDB4MjggZm9yIDEybWh6ICovCi0JZGF0YVs2XSA9IDQ7CQkvKiByZWcgNSwgSCBzdGFydCAqLwotCWRhdGFbN10gPSAweGMwOwkJLyogcmVnIDYsIGdhbW1hIDEuNSAqLwotCWRhdGFbOF0gPSAzOwkJLyogcmVnIDcsIFYgc3RhcnQgKi8KKwlkYXRhWzZdID0gMHgwMjsJCS8qIHJlZyA1LCBIIHN0YXJ0IC0gd2FzIDB4MDQgKi8KKwlkYXRhWzddID0gc2QtPmdhbW1hICogMHg0MDsJLyogcmVnIDB4MDY6IGdhbW1hICovCisJZGF0YVs4XSA9IDB4MDE7CQkvKiByZWcgNywgViBzdGFydCAtIHdhcyAweDAzICovCiAvKglpZiAoaF9zaXplID09IDMyMCApICovCiAvKgkJZGF0YVs5XT0gMHg1NjsJICogcmVnIDgsIDI0TUh6LCAyOjEgc2NhbGUgZG93biAqLwogLyoJZWxzZSAqLwogCWRhdGFbOV0gPSAweDUyOwkJLyogcmVnIDgsIDI0TUh6LCBubyBzY2FsZSBkb3duICovCi0JZGF0YVsxMF0gPSAweDVkOwkvKiByZWcgOSwgSTJDIGRldmljZSBhZGRyZXNzCi0JCQkJICoJW2ZvciBQQVM1MTAxICgweDQwKV0gW2ZvciBNSSAoMHg1ZCldICovCisvKmpmbTogZnJvbSB3aW4gdHJhY2UqLworCWRhdGFbMTBdID0gMHgxODsKIAotCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCBkYXRhWzBdLCAxMSk7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDExKTsKIAlpZiAoZXJyX2NvZGUgPCAwKQogCQlyZXR1cm4gZXJyX2NvZGU7CiAKIAlkYXRhWzBdID0gMHgyMzsJCS8qIGFkZHJlc3MgKi8KIAlkYXRhWzFdID0gMHgwOTsJCS8qIHJlZyAzNSwgYXBwZW5kIGZyYW1lIGhlYWRlciAqLwogCi0JZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIGRhdGFbMF0sIDIpOworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKIAlpZiAoZXJyX2NvZGUgPCAwKQogCQlyZXR1cm4gZXJyX2NvZGU7CiAKQEAgLTE5NywxMzcgKzI1MSw1NyBAQAogLyoJZWxzZSAqLwogCWRhdGFbMV0gPSA1MDsJCS8qIDUwIHJlZyA2MCwgcGMtY2FtIGZyYW1lIHNpemUKIAkJCQkgKgkodW5pdDogNEtCKSAyMDBLQiAqLwotCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCBkYXRhWzBdLCAyKTsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgMik7CiAJaWYgKGVycl9jb2RlIDwgMCkKIAkJcmV0dXJuIGVycl9jb2RlOwogCi0JaWYgKDApIHsJCQkvKiBmaXhlZCBkYXJrLWdhaW4gKi8KLQkJZGF0YVsxXSA9IDA7CQkvKiByZWcgOTQsIFkgR2FpbiAoMS43NSkgKi8KLQkJZGF0YVsyXSA9IDA7CQkvKiByZWcgOTUsIFVWIEdhaW4gKDEuNzUpICovCi0JCWRhdGFbM10gPSAweDNmOwkJLyogcmVnIDk2LCBZIEdhaW4vVVYgR2Fpbi9kaXNhYmxlCi0JCQkJCSAqCWF1dG8gZGFyay1nYWluICovCi0JCWRhdGFbNF0gPSAwOwkJLyogcmVnIDk3LCBzZXQgZml4ZWQgZGFyayBsZXZlbCAqLwotCQlkYXRhWzVdID0gMDsJCS8qIHJlZyA5OCwgZG9uJ3QgY2FyZSAqLwotCX0gZWxzZSB7CQkJLyogYXV0byBkYXJrLWdhaW4gKi8KLQkJZGF0YVsxXSA9IDA7CQkvKiByZWcgOTQsIFkgR2FpbiAoYXV0bykgKi8KLQkJZGF0YVsyXSA9IDA7CQkvKiByZWcgOTUsIFVWIEdhaW4gKDEuNzUpICovCi0JCWRhdGFbM10gPSAweDc4OwkJLyogcmVnIDk2LCBZIEdhaW4vVVYgR2Fpbi9kaXNhYmxlCi0JCQkJCSAqCWF1dG8gZGFyay1nYWluICovCi0JCXN3aXRjaCAoZ3NwY2FfZGV2LT53aWR0aCkgewotLyoJCWNhc2UgMTI4MDogKi8KLS8qCQkJZGF0YVs0XSA9IDE1NDsKLQkJCQkgKiByZWcgOTcsICUzIHNoYWRvdyBwb2ludCAodW5pdDogMjU2IHBpeGVsKSAqLwotLyoJCQlkYXRhWzVdID0gNTE7Ci0JCQkJICogcmVnIDk4LCAlMSBoaWdobGlnaHQgcG9pbnQKLQkJCQkgKgkodWludDogMjU2IHBpeGVsKSAqLwotLyoJCQlicmVhazsgKi8KLQkJZGVmYXVsdDoKLS8qCQljYXNlIDY0MDogKi8KLQkJCWRhdGFbNF0gPSAzNjsJLyogcmVnIDk3LCAlMyBzaGFkb3cgcG9pbnQKLQkJCQkJICoJKHVuaXQ6IDI1NiBwaXhlbCkgKi8KLQkJCWRhdGFbNV0gPSAxMjsJLyogcmVnIDk4LCAlMSBoaWdobGlnaHQgcG9pbnQKLQkJCQkJICoJKHVpbnQ6IDI1NiBwaXhlbCkgKi8KLQkJCWJyZWFrOwotCQljYXNlIDMyMDoKLQkJCWRhdGFbNF0gPSA5OwkvKiByZWcgOTcsICUzIHNoYWRvdyBwb2ludAotCQkJCQkgKgkodW5pdDogMjU2IHBpeGVsKSAqLwotCQkJZGF0YVs1XSA9IDM7CS8qIHJlZyA5OCwgJTEgaGlnaGxpZ2h0IHBvaW50Ci0JCQkJCSAqCSh1aW50OiAyNTYgcGl4ZWwpICovCi0JCQlicmVhazsKLQkJfQotCX0KIAkvKiBhdXRvIGRhcmstZ2FpbiAqLwogCWRhdGFbMF0gPSAweDVlOwkJLyogYWRkcmVzcyAqLworCWRhdGFbMV0gPSAwOwkJLyogcmVnIDk0LCBZIEdhaW4gKGF1dG8pICovCisvKmpmbTogZnJvbSB3aW4gdHJhY2UqLworCQkJCS8qIHJlZyAweDVmLzB4NjAgKExFKSA9IHNhdHVyYXRpb24gKi8KKwkJCQkvKiBoICg2MCk6IHh4eHggeDEwMAorCQkJCSAqIGwgKDVmKTogeHh4eCB4MDAwICovCisJZGF0YVsyXSA9IHNkLT5jb2xvcnMgPDwgMzsKKwlkYXRhWzNdID0gKChzZC0+Y29sb3JzID4+IDIpICYgMHhmOCkgfCAweDA0OworCWRhdGFbNF0gPSBzZC0+YnJpZ2h0bmVzczsgLyogcmVnIDB4NjEgPSBicmlnaHRuZXNzICovCisJZGF0YVs1XSA9IDB4MDA7CiAKLQllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgNik7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDYpOwogCWlmIChlcnJfY29kZSA8IDApCiAJCXJldHVybiBlcnJfY29kZTsKIAogCWRhdGFbMF0gPSAweDY3OwotCWRhdGFbMV0gPSAweDEzOwkJLyogcmVnIDEwMywgZmlyc3QgcGl4ZWwgQiwgZGlzYWJsZSBzaGFycG5lc3MgKi8KLQllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgMik7CisvKmpmbTogZnJvbSB3aW4gdHJhY2UqLworCWRhdGFbMV0gPSBzZC0+c2hhcnBuZXNzICogNCArIDM7CisJZGF0YVsyXSA9IDB4MTQ7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDMpOwogCWlmIChlcnJfY29kZSA8IDApCiAJCXJldHVybiBlcnJfY29kZTsKIAotCS8qCi0JICogaW5pdGlhbGl6ZSB0aGUgdmFsdWUgb2YgTUkgc2Vuc29yLi4uCi0JICovCi0JTUlfYnVmID0ga3phbGxvYyhBVFRSX1RPVEFMX01JX1JFRyAqIHNpemVvZiAqTUlfYnVmLCBHRlBfS0VSTkVMKTsKLQlNSV9idWZbUkVHX0hXX01JXzFdID0gMHgwMDBhOwotCU1JX2J1ZltSRUdfSFdfTUlfMl0gPSAweDAwMGM7Ci0JTUlfYnVmW1JFR19IV19NSV8zXSA9IDB4MDQwNTsKLQlNSV9idWZbUkVHX0hXX01JXzRdID0gMHgwNTA3OwotCS8qIG1pX0F0dHJfUmVnX1tSRUdfSFdfTUlfNV0JID0gMHgwMWZmOy8vMTMgKi8KLQlNSV9idWZbUkVHX0hXX01JXzVdID0gMHgwMDEzOwkvKiAxMyAqLwotCU1JX2J1ZltSRUdfSFdfTUlfNl0gPSAweDAwMWY7CS8qIHZlcnRpY2FsIGJsYW5raW5nICovCi0JLyogbWlfQXR0cl9SZWdfW1JFR19IV19NSV82XQkgPSAweDA0MDA7ICAvLyB2ZXJ0aWNhbCBibGFua2luZyAqLwotCU1JX2J1ZltSRUdfSFdfTUlfN10gPSAweDAwMDI7Ci0JLyogbWlfQXR0cl9SZWdfW1JFR19IV19NSV85XQkgPSAweDAxNWY7ICovCi0JLyogbWlfQXR0cl9SZWdfW1JFR19IV19NSV85XQkgPSAweDAzMGY7ICovCi0JTUlfYnVmW1JFR19IV19NSV85XSA9IDB4MDM3NDsKLQlNSV9idWZbUkVHX0hXX01JX0JdID0gMHgwMDAwOwotCU1JX2J1ZltSRUdfSFdfTUlfQ10gPSAweDAwMDA7Ci0JTUlfYnVmW1JFR19IV19NSV9EXSA9IDB4MDAwMDsKLQlNSV9idWZbUkVHX0hXX01JXzFFXSA9IDB4ODAwMDsKLS8qIG1pX0F0dHJfUmVnX1tSRUdfSFdfTUlfMjBdCSAgPSAweDExMDQ7ICovCi0JTUlfYnVmW1JFR19IV19NSV8yMF0gPSAweDExMDQ7CS8qIDB4MTExYzsgKi8KLQlNSV9idWZbUkVHX0hXX01JXzJCXSA9IDB4MDAwODsKLS8qIG1pX0F0dHJfUmVnX1tSRUdfSFdfTUlfMkNdCSAgPSAweDAwMGY7ICovCi0JTUlfYnVmW1JFR19IV19NSV8yQ10gPSAweDAwMWY7CS8qIGxpdGEgc3VnZ2VzdCAqLwotCU1JX2J1ZltSRUdfSFdfTUlfMkRdID0gMHgwMDA4OwotCU1JX2J1ZltSRUdfSFdfTUlfMkVdID0gMHgwMDA4OwotCU1JX2J1ZltSRUdfSFdfTUlfMzVdID0gMHgwMDUxOwotCU1JX2J1ZltSRUdfSFdfTUlfNUZdID0gMHgwOTA0OwkvKiBmYWlsIHRvIHdyaXRlICovCi0JTUlfYnVmW1JFR19IV19NSV82MF0gPSAweDAwMDA7Ci0JTUlfYnVmW1JFR19IV19NSV82MV0gPSAweDAwMDA7Ci0JTUlfYnVmW1JFR19IV19NSV82Ml0gPSAweDA0OTg7Ci0JTUlfYnVmW1JFR19IV19NSV82M10gPSAweDAwMDA7Ci0JTUlfYnVmW1JFR19IV19NSV82NF0gPSAweDAwMDA7Ci0JTUlfYnVmW1JFR19IV19NSV9GMV0gPSAweDAwMDE7Ci0JLyogY2hhbmdpbmcgd2hpbGUgc2V0dGluZyB1cCB0aGUgZGlmZmVyZW50IHZhbHVlIG9mIGR4L2R5ICovCisJZGF0YVswXSA9IDB4Njk7CisJZGF0YVsxXSA9IDB4MmY7CisJZGF0YVsyXSA9IDB4Mjg7CisJZGF0YVszXSA9IDB4NDI7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDQpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKIAotCWlmIChnc3BjYV9kZXYtPndpZHRoICE9IDEyODApIHsKLQkJTUlfYnVmWzB4MDFdID0gMHgwMTBhOwotCQlNSV9idWZbMHgwMl0gPSAweDAxNGM7Ci0JCU1JX2J1ZlsweDAzXSA9IDB4MDFlNTsKLQkJTUlfYnVmWzB4MDRdID0gMHgwMjg3OwotCX0KLQlNSV9idWZbMHgyMF0gPSAweDExMDQ7CisJZGF0YVswXSA9IDB4NjM7CisJZGF0YVsxXSA9IDB4MDc7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOworLypqZm06IHdpbiB0cmFjZSAtIG1hbnkgd3JpdGVzIGhlcmUgdG8gcmVnIDB4NjQqLworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKIAotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDEsIDEpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDIsIDIpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDMsIDMpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDQsIDQpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDUsIDUpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDYsIDYpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDcsIDcpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDksIDkpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MGIsIDB4MGIpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MGMsIDB4MGMpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MGQsIDB4MGQpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MWUsIDB4MWUpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MjAsIDB4MjApOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MmIsIDB4MmIpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MmMsIDB4MmMpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MmQsIDB4MmQpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MmUsIDB4MmUpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MzUsIDB4MzUpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4NWYsIDB4NWYpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4NjAsIDB4NjApOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4NjEsIDB4NjEpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4NjIsIDB4NjIpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4NjMsIDB4NjMpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4NjQsIDB4NjQpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4ZjEsIDB4ZjEpOwotCWtmcmVlKE1JX2J1Zik7Ci0KLQlpbnRwaXBlID0gdXNiX3NuZGludHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApOwotCWVycl9jb2RlID0gdXNiX2NsZWFyX2hhbHQoZ3NwY2FfZGV2LT5kZXYsIGludHBpcGUpOworCS8qIGluaXRpYWxpemUgdGhlIE1JIHNlbnNvciAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YgbWlfZGF0YTsgaSsrKQorCQltaV93KGdzcGNhX2RldiwgaSArIDEsIG1pX2RhdGFbaV0pOwogCiAJZGF0YVswXSA9IDB4MDA7CiAJZGF0YVsxXSA9IDB4NGQ7CQkvKiBJU09DIHRyYW5zZmVyaW5nIGVuYWJsZS4uLiAqLwotCXJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgMik7Ci0JcmV0dXJuIGVycl9jb2RlOworCXJlZ193KGdzcGNhX2RldiwgMik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTMzNiwxMSArMzEwLDE4IEBACiAKIAlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAxOwogCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9IDA7Ci0JcmVzdWx0ID0gcmVnX3coZ3NwY2FfZGV2LCBnc3BjYV9kZXYtPnVzYl9idWZbMF0sIDIpOworCXJlc3VsdCA9IHJlZ193KGdzcGNhX2RldiwgMik7CiAJaWYgKHJlc3VsdCA8IDApCiAJCVBERUJVRyhEX0VSUiwgIkNhbWVyYSBTdG9wIGZhaWxlZCIpOwogfQogCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJa2ZyZWUoc2QtPmpwZWdfaGRyKTsKK30KKwogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCiAJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCkBAIC0zNjMsMTYgKzM0NCwxNiBAQAogCQkJICAgIHx8IGRhdGFbNSArIHBdID09IDB4NjUKIAkJCSAgICB8fCBkYXRhWzUgKyBwXSA9PSAweDY2CiAJCQkgICAgfHwgZGF0YVs1ICsgcF0gPT0gMHg2NykgewotCQkJCVBERUJVRyhEX1BBQ0ssICJzb2Ygb2Zmc2V0OiAlZCBsZW5nOiAlZCIsCisJCQkJUERFQlVHKERfUEFDSywgInNvZiBvZmZzZXQ6ICVkIGxlbjogJWQiLAogCQkJCQlwLCBsZW4pOwogCQkJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCi0JCQkJCQkJZnJhbWUsIGRhdGEsIDApOworCQkJCQkJCWZyYW1lLCBkYXRhLCBwKTsKIAogCQkJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgKi8KLQkJCQlqcGVnX3B1dF9oZWFkZXIoZ3NwY2FfZGV2LCBmcmFtZSwKLQkJCQkJCXNkLT5xaW5kZXgsIDB4MjEpOwotCQkJCWRhdGEgKz0gMTY7Ci0JCQkJbGVuIC09IDE2OworCQkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQkJCXNkLT5qcGVnX2hkciwgSlBFR19IRFJfU1opOworCQkJCWRhdGEgKz0gcCArIDE2OworCQkJCWxlbiAtPSBwICsgMTY7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTM4MCw2ICszNjEsMTIxIEBACiAJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwgZGF0YSwgbGVuKTsKIH0KIAorc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5icmlnaHRuZXNzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgeworCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAweDYxOworCQlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSB2YWw7CisJCXJlZ193KGdzcGNhX2RldiwgMik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmNvbG9ycyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKKworCQkvKiBzZWUgc2Rfc3RhcnQgKi8KKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMHg1ZjsKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gc2QtPmNvbG9ycyA8PCAzOworCQlnc3BjYV9kZXYtPnVzYl9idWZbMl0gPSAoKHNkLT5jb2xvcnMgPj4gMikgJiAweGY4KSB8IDB4MDQ7CisJCXJlZ193KGdzcGNhX2RldiwgMyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5jb2xvcnM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmdhbW1hID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgeworCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAweDA2OworCQlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSB2YWwgKiAweDQwOworCQlyZWdfdyhnc3BjYV9kZXYsIDIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5nYW1tYTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPnNoYXJwbmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMHg2NzsKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gdmFsICogNCArIDM7CisJCXJlZ193KGdzcGNhX2RldiwgMik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5zaGFycG5lc3M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKGpjb21wLT5xdWFsaXR5IDwgUVVBTElUWV9NSU4pCisJCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9NSU47CisJZWxzZSBpZiAoamNvbXAtPnF1YWxpdHkgPiBRVUFMSVRZX01BWCkKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01BWDsKKwllbHNlCisJCXNkLT5xdWFsaXR5ID0gamNvbXAtPnF1YWxpdHk7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCW1lbXNldChqY29tcCwgMCwgc2l6ZW9mICpqY29tcCk7CisJamNvbXAtPnF1YWxpdHkgPSBzZC0+cXVhbGl0eTsKKwlqY29tcC0+anBlZ19tYXJrZXJzID0gVjRMMl9KUEVHX01BUktFUl9ESFQKKwkJCXwgVjRMMl9KUEVHX01BUktFUl9EUVQ7CisJcmV0dXJuIDA7Cit9CisKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCkBAIC0zODksNyArNDg1LDEwIEBACiAJLmluaXQgPSBzZF9pbml0LAogCS5zdGFydCA9IHNkX3N0YXJ0LAogCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5zdG9wMCA9IHNkX3N0b3AwLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorCS5nZXRfamNvbXAgPSBzZF9nZXRfamNvbXAsCisJLnNldF9qY29tcCA9IHNkX3NldF9qY29tcCwKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpAQCAtNDIxLDggKzUyMCwxMSBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE5MDFhNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYwpAQCAtMCwwICsxLDM2MiBAQAorLyoKKyAqIE1hcnMgTVI5NzMxMEEgbGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBLeWxlIEd1aW5uIDxlbHlrMDNAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAibXI5NzMxMGEiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorCitNT0RVTEVfQVVUSE9SKCJLeWxlIEd1aW5uIDxlbHlrMDNAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQS9NYXJzLVNlbWkgTVI5NzMxMEEgVVNCIENhbWVyYSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogc3BlY2lmaWMgd2ViY2FtIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7ICAvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCisJdTggc29mX3JlYWQ7Cit9OworCisvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CisJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfTVI5NzMxMEEsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDE2MCwKKwkJLnNpemVpbWFnZSA9IDE2MCAqIDEyMCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSA0fSwKKwl7MTc2LCAxNDQsIFY0TDJfUElYX0ZNVF9NUjk3MzEwQSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTc2LAorCQkuc2l6ZWltYWdlID0gMTc2ICogMTQ0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDN9LAorCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX01SOTczMTBBLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMn0sCisJezM1MiwgMjg4LCBWNEwyX1BJWF9GTVRfTVI5NzMxMEEsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDM1MiwKKwkJLnNpemVpbWFnZSA9IDM1MiAqIDI4OCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAxfSwKKwl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9NUjk3MzEwQSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorfTsKKworLyogdGhlIGJ5dGVzIHRvIHdyaXRlIGFyZSBpbiBnc3BjYV9kZXYtPnVzYl9idWYgKi8KK3N0YXRpYyBpbnQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBpbnQgbGVuKQoreworCWludCByYzsKKworCXJjID0gdXNiX2J1bGtfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJICB1c2Jfc25kYnVsa3BpcGUoZ3NwY2FfZGV2LT5kZXYsIDQpLAorCQkJICBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwgTlVMTCwgNTAwKTsKKwlpZiAocmMgPCAwKQorCQlQREVCVUcoRF9FUlIsICJyZWcgd3JpdGUgWyUwMnhdIGVycm9yICVkIiwKKwkJICAgICAgIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSwgcmMpOworCXJldHVybiByYzsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLworc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgY2FtICpjYW07CisKKwljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOworCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCV9fdTggKmRhdGEgPSBnc3BjYV9kZXYtPnVzYl9idWY7CisJaW50IGVycl9jb2RlOworCisJc2QtPnNvZl9yZWFkID0gMDsKKworCS8qIE5vdGU6ICByZWdpc3RlciBkZXNjcmlwdGlvbnMgZ3Vlc3NlZCBmcm9tIE1SOTcxMTNBIGRyaXZlciAqLworCisJZGF0YVswXSA9IDB4MDE7CisJZGF0YVsxXSA9IDB4MDE7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDAwOworCWRhdGFbMV0gPSAweDBkOworCWRhdGFbMl0gPSAweDAxOworCWRhdGFbNV0gPSAweDJiOworCWRhdGFbN10gPSAweDAwOworCWRhdGFbOV0gPSAweDUwOyAgLyogcmVnIDgsIG5vIHNjYWxlIGRvd24gKi8KKwlkYXRhWzEwXSA9IDB4YzA7CisKKwlzd2l0Y2ggKGdzcGNhX2Rldi0+d2lkdGgpIHsKKwljYXNlIDE2MDoKKwkJZGF0YVs5XSB8PSAweDBjOyAgLyogcmVnIDgsIDQ6MSBzY2FsZSBkb3duICovCisJCS8qIGZhbGwgdGhydSAqLworCWNhc2UgMzIwOgorCQlkYXRhWzldIHw9IDB4MDQ7ICAvKiByZWcgOCwgMjoxIHNjYWxlIGRvd24gKi8KKwkJLyogZmFsbCB0aHJ1ICovCisJY2FzZSA2NDA6CisJZGVmYXVsdDoKKwkJZGF0YVszXSA9IDB4NTA7ICAvKiByZWcgMiwgSCBzaXplICovCisJCWRhdGFbNF0gPSAweDc4OyAgLyogcmVnIDMsIFYgc2l6ZSAqLworCQlkYXRhWzZdID0gMHgwNDsgIC8qIHJlZyA1LCBIIHN0YXJ0ICovCisJCWRhdGFbOF0gPSAweDAzOyAgLyogcmVnIDcsIFYgc3RhcnQgKi8KKwkJYnJlYWs7CisKKwljYXNlIDE3NjoKKwkJZGF0YVs5XSB8PSAweDA0OyAgLyogcmVnIDgsIDI6MSBzY2FsZSBkb3duICovCisJCS8qIGZhbGwgdGhydSAqLworCWNhc2UgMzUyOgorCQlkYXRhWzNdID0gMHgyYzsgIC8qIHJlZyAyLCBIIHNpemUgKi8KKwkJZGF0YVs0XSA9IDB4NDg7ICAvKiByZWcgMywgViBzaXplICovCisJCWRhdGFbNl0gPSAweDk0OyAgLyogcmVnIDUsIEggc3RhcnQgKi8KKwkJZGF0YVs4XSA9IDB4NjM7ICAvKiByZWcgNywgViBzdGFydCAqLworCQlicmVhazsKKwl9CisKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgMTEpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDBhOworCWRhdGFbMV0gPSAweDgwOworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgxNDsKKwlkYXRhWzFdID0gMHgwYTsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgMik7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZGF0YVswXSA9IDB4MWI7CisJZGF0YVsxXSA9IDB4MDA7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDE1OworCWRhdGFbMV0gPSAweDE2OworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgxNjsKKwlkYXRhWzFdID0gMHgxMDsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgMik7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZGF0YVswXSA9IDB4MTc7CisJZGF0YVsxXSA9IDB4M2E7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDE4OworCWRhdGFbMV0gPSAweDY4OworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgxZjsKKwlkYXRhWzFdID0gMHgwMDsKKwlkYXRhWzJdID0gMHgwMjsKKwlkYXRhWzNdID0gMHgwNjsKKwlkYXRhWzRdID0gMHg1OTsKKwlkYXRhWzVdID0gMHgwYzsKKwlkYXRhWzZdID0gMHgxNjsKKwlkYXRhWzddID0gMHgwMDsKKwlkYXRhWzhdID0gMHgwNzsKKwlkYXRhWzldID0gMHgwMDsKKwlkYXRhWzEwXSA9IDB4MDE7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDExKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgxZjsKKwlkYXRhWzFdID0gMHgwNDsKKwlkYXRhWzJdID0gMHgxMTsKKwlkYXRhWzNdID0gMHgwMTsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgNCk7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZGF0YVswXSA9IDB4MWY7CisJZGF0YVsxXSA9IDB4MDA7CisJZGF0YVsyXSA9IDB4MGE7CisJZGF0YVszXSA9IDB4MDA7CisJZGF0YVs0XSA9IDB4MDE7CisJZGF0YVs1XSA9IDB4MDA7CisJZGF0YVs2XSA9IDB4MDA7CisJZGF0YVs3XSA9IDB4MDE7CisJZGF0YVs4XSA9IDB4MDA7CisJZGF0YVs5XSA9IDB4MGE7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDEwKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgxZjsKKwlkYXRhWzFdID0gMHgwNDsKKwlkYXRhWzJdID0gMHgxMTsKKwlkYXRhWzNdID0gMHgwMTsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgNCk7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZGF0YVswXSA9IDB4MWY7CisJZGF0YVsxXSA9IDB4MDA7CisJZGF0YVsyXSA9IDB4MTI7CisJZGF0YVszXSA9IDB4MDA7CisJZGF0YVs0XSA9IDB4NjM7CisJZGF0YVs1XSA9IDB4MDA7CisJZGF0YVs2XSA9IDB4NzA7CisJZGF0YVs3XSA9IDB4MDA7CisJZGF0YVs4XSA9IDB4MDA7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDkpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDFmOworCWRhdGFbMV0gPSAweDA0OworCWRhdGFbMl0gPSAweDExOworCWRhdGFbM10gPSAweDAxOworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCA0KTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgwMDsKKwlkYXRhWzFdID0gMHg0ZDsgIC8qIElTT0MgdHJhbnNmZXJpbmcgZW5hYmxlLi4uICovCisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOworCXJldHVybiBlcnJfY29kZTsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCByZXN1bHQ7CisKKwlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAxOworCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9IDA7CisJcmVzdWx0ID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAiQ2FtZXJhIFN0b3AgZmFpbGVkIik7Cit9CisKKy8qIEluY2x1ZGUgcGFjIGNvbW1vbiBzb2YgZGV0ZWN0aW9uIGZ1bmN0aW9ucyAqLworI2luY2x1ZGUgInBhY19jb21tb24uaCIKKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwgICAgLyogdGFyZ2V0ICovCisJCQlfX3U4ICpkYXRhLCAgICAgICAgICAgICAgICAgICAvKiBpc29jIHBhY2tldCAqLworCQkJaW50IGxlbikgICAgICAgICAgICAgICAgICAgICAgLyogaXNvIHBhY2tldCBsZW5ndGggKi8KK3sKKwl1bnNpZ25lZCBjaGFyICpzb2Y7CisKKwlzb2YgPSBwYWNfZmluZF9zb2YoZ3NwY2FfZGV2LCBkYXRhLCBsZW4pOworCWlmIChzb2YpIHsKKwkJaW50IG47CisKKwkJLyogZmluaXNoIGRlY29kaW5nIGN1cnJlbnQgZnJhbWUgKi8KKwkJbiA9IHNvZiAtIGRhdGE7CisJCWlmIChuID4gc2l6ZW9mIHBhY19zb2ZfbWFya2VyKQorCQkJbiAtPSBzaXplb2YgcGFjX3NvZl9tYXJrZXI7CisJCWVsc2UKKwkJCW4gPSAwOworCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBmcmFtZSwKKwkJCQkJZGF0YSwgbik7CisJCS8qIFN0YXJ0IG5leHQgZnJhbWUuICovCisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQlwYWNfc29mX21hcmtlciwgc2l6ZW9mIHBhY19zb2ZfbWFya2VyKTsKKwkJbGVuIC09IHNvZiAtIGRhdGE7CisJCWRhdGEgPSBzb2Y7CisJfQorCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIGxlbik7Cit9CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmN0cmxzID0gc2RfY3RybHMsCisJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAorCS5jb25maWcgPSBzZF9jb25maWcsCisJLmluaXQgPSBzZF9pbml0LAorCS5zdGFydCA9IHNkX3N0YXJ0LAorCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorfTsKKworLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA4Y2EsIDB4MDExMSl9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKKwkJCSAgICAgICBUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZF9kcml2ZXIgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuaWRfdGFibGUgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gZ3NwY2Ffc3VzcGVuZCwKKwkucmVzdW1lID0gZ3NwY2FfcmVzdW1lLAorI2VuZGlmCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQorCQlyZXR1cm4gLTE7CisJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKaW5kZXggZWUyMzI5NS4uMWZmZjM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwpAQCAtMTM2MCw3ICsxMzYwLDYgQEAKIAl9CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSBPVjUxMV9FTkRQT0lOVF9BRERSRVNTOwogCWlmICghc2QtPnNpZikgewogCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CiAJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CkBAIC0yMTc3LDggKzIxNzYsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzQuYwppbmRleCAzYmYxNWU0Li4xOWUwYmM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNC5jCkBAIC0xLDcgKzEsOCBAQAogLyoKLSAqIG92NTM0L292NzcyeCBnc3BjYSBkcml2ZXIKKyAqIG92NTM0IGdzcGNhIGRyaXZlcgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFudG9uaW8gT3NwaXRlIDxvc3BpdGVAc3R1ZGVudGkudW5pbmEuaXQ+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggSmltIFBhcmlzIDxqaW1AanRhbi5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmVhbi1GcmFuY29pcyBNb2luZSBodHRwOi8vbW9pbmVqZi5mcmVlLmZyCiAgKgogICogQmFzZWQgb24gYSBwcm90b3R5cGUgd3JpdHRlbiBieSBNYXJrIEZlcnJlbGwgPG1ham9ydHJpcHNAZ21haWwuY29tPgogICogVVNCIHByb3RvY29sIHJldmVyc2UgZW5naW5lZXJlZCBieSBKaW0gUGFyaXMgPGppbUBqdGFuLmNvbT4KQEAgLTI2LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgImdzcGNhLmgiCiAKLSNkZWZpbmUgT1Y1MzRfUkVHX0FERFJFU1MJMHhmMQkvKiA/ICovCisjZGVmaW5lIE9WNTM0X1JFR19BRERSRVNTCTB4ZjEJLyogc2Vuc29yIGFkZHJlc3MgKi8KICNkZWZpbmUgT1Y1MzRfUkVHX1NVQkFERFIJMHhmMgogI2RlZmluZSBPVjUzNF9SRUdfV1JJVEUJCTB4ZjMKICNkZWZpbmUgT1Y1MzRfUkVHX1JFQUQJCTB4ZjQKQEAgLTQ2LDkgKzQ3LDEzIEBACiAvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLwogc3RydWN0IHNkIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLwotCV9fdTMyIGxhc3RfZmlkOwogCV9fdTMyIGxhc3RfcHRzOwotCWludCBmcmFtZV9yYXRlOworCXUxNiBsYXN0X2ZpZDsKKwl1OCBmcmFtZV9yYXRlOworCisJdTggc2Vuc29yOworI2RlZmluZSBTRU5TT1JfT1Y3NzJYIDAKKyNkZWZpbmUgU0VOU09SX09WOTY1WCAxCiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC02MywxMTQgKzY4LDcgQEAKIAkgLnByaXYgPSAwfSwKIH07CiAKLXN0YXRpYyB2b2lkIG92NTM0X3JlZ193cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcsIHU4IHZhbCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCWludCByZXQ7Ci0KLQlQREVCVUcoRF9VU0JPLCAicmVnPTB4JTA0eCwgdmFsPTAlMDJ4IiwgcmVnLCB2YWwpOwotCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IHZhbDsKLQlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwKLQkJCSAgICAgIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKLQkJCSAgICAgIDB4MSwKLQkJCSAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKLQkJCSAgICAgIDB4MCwgcmVnLCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsIENUUkxfVElNRU9VVCk7Ci0JaWYgKHJldCA8IDApCi0JCVBERUJVRyhEX0VSUiwgIndyaXRlIGZhaWxlZCIpOwotfQotCi1zdGF0aWMgdTggb3Y1MzRfcmVnX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZ3NwY2FfZGV2LT5kZXY7Ci0JaW50IHJldDsKLQotCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAotCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAotCQkJICAgICAgMHgxLAotCQkJICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCi0JCQkgICAgICAweDAsIHJlZywgZ3NwY2FfZGV2LT51c2JfYnVmLCAxLCBDVFJMX1RJTUVPVVQpOwotCVBERUJVRyhEX1VTQkksICJyZWc9MHglMDR4LCBkYXRhPTB4JTAyeCIsIHJlZywgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKLQlpZiAocmV0IDwgMCkKLQkJUERFQlVHKERfRVJSLCAicmVhZCBmYWlsZWQiKTsKLQlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwotfQotCi0vKiBUd28gYml0cyBjb250cm9sIExFRDogMHgyMSBiaXQgNyBhbmQgMHgyMyBiaXQgNy4KLSAqIChkaXJlY3Rpb24gYW5kIG91dHB1dCk/ICovCi1zdGF0aWMgdm9pZCBvdjUzNF9zZXRfbGVkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgaW50IHN0YXR1cykKLXsKLQl1OCBkYXRhOwotCi0JUERFQlVHKERfQ09ORiwgImxlZCBzdGF0dXM6ICVkIiwgc3RhdHVzKTsKLQotCWRhdGEgPSBvdjUzNF9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MjEpOwotCWRhdGEgfD0gMHg4MDsKLQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDIxLCBkYXRhKTsKLQotCWRhdGEgPSBvdjUzNF9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MjMpOwotCWlmIChzdGF0dXMpCi0JCWRhdGEgfD0gMHg4MDsKLQllbHNlCi0JCWRhdGEgJj0gfigweDgwKTsKLQotCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MjMsIGRhdGEpOwotfQotCi1zdGF0aWMgaW50IHNjY2JfY2hlY2tfc3RhdHVzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQl1OCBkYXRhOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotCQlkYXRhID0gb3Y1MzRfcmVnX3JlYWQoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfU1RBVFVTKTsKLQotCQlzd2l0Y2ggKGRhdGEpIHsKLQkJY2FzZSAweDAwOgotCQkJcmV0dXJuIDE7Ci0JCWNhc2UgMHgwNDoKLQkJCXJldHVybiAwOwotCQljYXNlIDB4MDM6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCVBERUJVRyhEX0VSUiwgInNjY2Igc3RhdHVzIDB4JTAyeCwgYXR0ZW1wdCAlZC81IiwKLQkJCSAgICAgICBkYXRhLCBpICsgMSk7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjY2JfcmVnX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHJlZywgdTggdmFsKQotewotCVBERUJVRyhEX1VTQk8sICJyZWc6IDB4JTA0eCwgdmFsOiAweCUwMngiLCByZWcsIHZhbCk7Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NVQkFERFIsIHJlZyk7Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1dSSVRFLCB2YWwpOwotCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIE9WNTM0X1JFR19PUEVSQVRJT04sIE9WNTM0X09QX1dSSVRFXzMpOwotCi0JaWYgKCFzY2NiX2NoZWNrX3N0YXR1cyhnc3BjYV9kZXYpKQotCQlQREVCVUcoRF9FUlIsICJzY2NiX3JlZ193cml0ZSBmYWlsZWQiKTsKLX0KLQotI2lmZGVmIEdTUENBX0RFQlVHCi1zdGF0aWMgdTggc2NjYl9yZWdfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcpCi17Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NVQkFERFIsIHJlZyk7Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX09QRVJBVElPTiwgT1Y1MzRfT1BfV1JJVEVfMik7Ci0JaWYgKCFzY2NiX2NoZWNrX3N0YXR1cyhnc3BjYV9kZXYpKQotCQlQREVCVUcoRF9FUlIsICJzY2NiX3JlZ19yZWFkIGZhaWxlZCAxIik7Ci0KLQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfT1BFUkFUSU9OLCBPVjUzNF9PUF9SRUFEXzIpOwotCWlmICghc2NjYl9jaGVja19zdGF0dXMoZ3NwY2FfZGV2KSkKLQkJUERFQlVHKERfRVJSLCAic2NjYl9yZWdfcmVhZCBmYWlsZWQgMiIpOwotCi0JcmV0dXJuIG92NTM0X3JlZ19yZWFkKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1JFQUQpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBfX3U4IG92NTM0X3JlZ19pbml0ZGF0YVtdWzJdID0gewotCXsgMHhlNywgMHgzYSB9LAotCi0JeyBPVjUzNF9SRUdfQUREUkVTUywgMHg0MiB9LCAvKiBzZWxlY3QgT1Y3NzJ4IHNlbnNvciAqLwotCitzdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRfb3Y3MjJ4W11bMl0gPSB7CiAJeyAweGMyLCAweDBjIH0sCiAJeyAweDg4LCAweGY4IH0sCiAJeyAweGMzLCAweDY5IH0sCkBAIC0yMjgsNyArMTI2LDcgQEAKIAl7IDB4YzIsIDB4MGMgfSwKIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IG92NzcyeF9yZWdfaW5pdGRhdGFbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdF9vdjcyMnhbXVsyXSA9IHsKIAl7IDB4MTIsIDB4ODAgfSwKIAl7IDB4MTEsIDB4MDEgfSwKIApAQCAtMzExLDYgKzIwOSw0NTYgQEAKIAl7IDB4MGMsIDB4ZDAgfQogfTsKIAorc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9pbml0X292OTY1eFtdWzJdID0geworCXsweDg4LCAweGY4fSwKKwl7MHg4OSwgMHhmZn0sCisJezB4NzYsIDB4MDN9LAorCXsweDkyLCAweDAzfSwKKwl7MHg5NSwgMHgxMH0sCisJezB4ZTIsIDB4MDB9LAorCXsweGU3LCAweDNlfSwKKwl7MHg4ZCwgMHgxY30sCisJezB4OGUsIDB4MDB9LAorCXsweDhmLCAweDAwfSwKKwl7MHgxZiwgMHgwMH0sCisJezB4YzMsIDB4Zjl9LAorCXsweDg5LCAweGZmfSwKKwl7MHg4OCwgMHhmOH0sCisJezB4NzYsIDB4MDN9LAorCXsweDkyLCAweDAxfSwKKwl7MHg5MywgMHgxOH0sCisJezB4MWMsIDB4MGF9LAorCXsweDFkLCAweDQ4fSwKKwl7MHhjMCwgMHg1MH0sCisJezB4YzEsIDB4M2N9LAorCXsweDM0LCAweDA1fSwKKwl7MHhjMiwgMHgwY30sCisJezB4YzMsIDB4Zjl9LAorCXsweDM0LCAweDA1fSwKKwl7MHhlNywgMHgyZX0sCisJezB4MzEsIDB4Zjl9LAorCXsweDM1LCAweDAyfSwKKwl7MHhkOSwgMHgxMH0sCisJezB4MjUsIDB4NDJ9LAorCXsweDk0LCAweDExfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdF9vdjk2NXhbXVsyXSA9IHsKKwl7MHgxMiwgMHg4MH0sCS8qIGNvbTcgLSByZXNldCAqLworCXsweDAwLCAweDAwfSwJLyogZ2FpbiAqLworCXsweDAxLCAweDgwfSwJLyogYmx1ZSAqLworCXsweDAyLCAweDgwfSwJLyogcmVkICovCisJezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCisJezB4MDQsIDB4MDN9LAkvKiBjb20xIC0gZXhwb3N1cmUgbG93IGJpdHMgKi8KKwl7MHgwYiwgMHg1N30sCS8qIHZlciAqLworCXsweDBlLCAweDYxfSwJLyogY29tNSAqLworCXsweDBmLCAweDQyfSwJLyogY29tNiAqLworCXsweDExLCAweDAwfSwJLyogY2xrcmMgKi8KKwl7MHgxMiwgMHgwMn0sCS8qIGNvbTcgKi8KKwl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDE2LCAweDI0fSwJLyogcnN2ZDE2ICovCisJezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQqLworCXsweDE4LCAweGJkfSwJLyogaHN0b3AgKi8KKwl7MHgxOSwgMHgwMX0sCS8qIHZzdHJ0ICovCisJezB4MWEsIDB4ODF9LAkvKiB2c3RvcCovCisJezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCisJezB4MjQsIDB4M2N9LAkvKiBhZXcgKi8KKwl7MHgyNSwgMHgzNn0sCS8qIGFlYiAqLworCXsweDI2LCAweDcxfSwJLyogdnB0ICovCisJezB4MjcsIDB4MDh9LAkvKiBiYmlhcyAqLworCXsweDI4LCAweDA4fSwJLyogZ2JiaWFzICovCisJezB4MjksIDB4MTV9LAkvKiBnciBjb20gKi8KKwl7MHgyYSwgMHgwMH0sCisJezB4MmIsIDB4MDB9LAorCXsweDJjLCAweDA4fSwJLyogcmJpYXMgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHgzMywgMHgwMH0sCS8qIGNobGYgKi8KKwl7MHgzNCwgMHgzZn0sCS8qIGFyYmxtICovCisJezB4MzUsIDB4MDB9LAkvKiByc3ZkMzUgKi8KKwl7MHgzNiwgMHhmOH0sCS8qIHJzdmQzNiAqLworCXsweDM4LCAweDcyfSwJLyogYWNvbTM4ICovCisJezB4MzksIDB4NTd9LAkvKiBvZm9uICovCisJezB4M2EsIDB4ODB9LAkvKiB0c2xiICovCisJezB4M2IsIDB4YzR9LAorCXsweDNkLCAweDk5fSwJLyogY29tMTMgKi8KKwl7MHgzZiwgMHhjMX0sCisJezB4NDAsIDB4YzB9LAkvKiBjb20xNSAqLworCXsweDQxLCAweDQwfSwJLyogY29tMTYgKi8KKwl7MHg0MiwgMHhjMH0sCisJezB4NDMsIDB4MGF9LAorCXsweDQ0LCAweGYwfSwKKwl7MHg0NSwgMHg0Nn0sCisJezB4NDYsIDB4NjJ9LAorCXsweDQ3LCAweDJhfSwKKwl7MHg0OCwgMHgzY30sCisJezB4NGEsIDB4ZmN9LAorCXsweDRiLCAweGZjfSwKKwl7MHg0YywgMHg3Zn0sCisJezB4NGQsIDB4N2Z9LAorCXsweDRlLCAweDdmfSwKKwl7MHg0ZiwgMHg5OH0sCisJezB4NTAsIDB4OTh9LAorCXsweDUxLCAweDAwfSwKKwl7MHg1MiwgMHgyOH0sCisJezB4NTMsIDB4NzB9LAorCXsweDU0LCAweDk4fSwKKwl7MHg1OCwgMHgxYX0sCisJezB4NTksIDB4ODV9LAorCXsweDVhLCAweGE5fSwKKwl7MHg1YiwgMHg2NH0sCisJezB4NWMsIDB4ODR9LAorCXsweDVkLCAweDUzfSwKKwl7MHg1ZSwgMHgwZX0sCisJezB4NWYsIDB4ZjB9LAorCXsweDYwLCAweGYwfSwKKwl7MHg2MSwgMHhmMH0sCisJezB4NjIsIDB4MDB9LAkvKiBsY2MxICovCisJezB4NjMsIDB4MDB9LAkvKiBsY2MyICovCisJezB4NjQsIDB4MDJ9LAkvKiBsY2MzICovCisJezB4NjUsIDB4MTZ9LAkvKiBsY2M0ICovCisJezB4NjYsIDB4MDF9LAkvKiBsY2M1ICovCisJezB4NjksIDB4MDJ9LAkvKiBodiAqLworCXsweDZiLCAweDVhfSwJLyogZGJ2bCAqLworCXsweDZjLCAweDA0fSwKKwl7MHg2ZCwgMHg1NX0sCisJezB4NmUsIDB4MDB9LAorCXsweDZmLCAweDlkfSwKKwl7MHg3MCwgMHgyMX0sCisJezB4NzEsIDB4Nzh9LAorCXsweDcyLCAweDAwfSwKKwl7MHg3MywgMHgwMX0sCisJezB4NzQsIDB4M2F9LAorCXsweDc1LCAweDM1fSwKKwl7MHg3NiwgMHgwMX0sCisJezB4NzcsIDB4MDJ9LAorCXsweDdhLCAweDEyfSwKKwl7MHg3YiwgMHgwOH0sCisJezB4N2MsIDB4MTZ9LAorCXsweDdkLCAweDMwfSwKKwl7MHg3ZSwgMHg1ZX0sCisJezB4N2YsIDB4NzJ9LAorCXsweDgwLCAweDgyfSwKKwl7MHg4MSwgMHg4ZX0sCisJezB4ODIsIDB4OWF9LAorCXsweDgzLCAweGE0fSwKKwl7MHg4NCwgMHhhY30sCisJezB4ODUsIDB4Yjh9LAorCXsweDg2LCAweGMzfSwKKwl7MHg4NywgMHhkNn0sCisJezB4ODgsIDB4ZTZ9LAorCXsweDg5LCAweGYyfSwKKwl7MHg4YSwgMHgwM30sCisJezB4OGMsIDB4ODl9LAorCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDkwLCAweDdkfSwKKwl7MHg5MSwgMHg3Yn0sCisJezB4OWQsIDB4MDN9LAorCXsweDllLCAweDA0fSwKKwl7MHg5ZiwgMHg3YX0sCisJezB4YTAsIDB4Nzl9LAorCXsweGExLCAweDQwfSwJLyogYWVjaG0gKi8KKwl7MHhhNCwgMHg1MH0sCisJezB4YTUsIDB4Njh9LAkvKiBjb20yNiAqLworCXsweGE2LCAweDRhfSwKKwl7MHhhOCwgMHhjMX0sCS8qIGFjb21hOCAqLworCXsweGE5LCAweGVmfSwJLyogYWNvbWE5ICovCisJezB4YWEsIDB4OTJ9LAorCXsweGFiLCAweDA0fSwKKwl7MHhhYywgMHg4MH0sCisJezB4YWQsIDB4ODB9LAorCXsweGFlLCAweDgwfSwKKwl7MHhhZiwgMHg4MH0sCisJezB4YjIsIDB4ZjJ9LAorCXsweGIzLCAweDIwfSwKKwl7MHhiNCwgMHgyMH0sCisJezB4YjUsIDB4MDB9LAorCXsweGI2LCAweGFmfSwKKwl7MHhiYiwgMHhhZX0sCisJezB4YmMsIDB4N2Z9LAorCXsweGRiLCAweDdmfSwKKwl7MHhiZSwgMHg3Zn0sCisJezB4YmYsIDB4N2Z9LAorCXsweGMwLCAweGUyfSwKKwl7MHhjMSwgMHhjMH0sCisJezB4YzIsIDB4MDF9LAorCXsweGMzLCAweDRlfSwKKwl7MHhjNiwgMHg4NX0sCisJezB4YzcsIDB4ODB9LAorCXsweGM5LCAweGUwfSwKKwl7MHhjYSwgMHhlOH0sCisJezB4Y2IsIDB4ZjB9LAorCXsweGNjLCAweGQ4fSwKKwl7MHhjZCwgMHhmMX0sCisJezB4NGYsIDB4OTh9LAorCXsweDUwLCAweDk4fSwKKwl7MHg1MSwgMHgwMH0sCisJezB4NTIsIDB4Mjh9LAorCXsweDUzLCAweDcwfSwKKwl7MHg1NCwgMHg5OH0sCisJezB4NTgsIDB4MWF9LAorCXsweGZmLCAweDQxfSwJLyogcmVhZCA0MSwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4YzUsIDB4MDN9LAorCXsweDZhLCAweDAyfSwKKworCXsweDEyLCAweDYyfSwJLyogY29tNyAtIFZHQSArIENJRiAqLworCXsweDM2LCAweGZhfSwJLyogcnN2ZDM2ICovCisJezB4NjksIDB4MGF9LAkvKiBodiAqLworCXsweDhjLCAweDg5fSwJLyogY29tMjIgKi8KKwl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KKwl7MHgzZSwgMHgwY30sCisJezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLworCXsweDcyLCAweDAwfSwKKwl7MHg3MywgMHgwMH0sCisJezB4NzQsIDB4M2F9LAorCXsweDc1LCAweDM1fSwKKwl7MHg3NiwgMHgwMX0sCisJezB4YzcsIDB4ODB9LAorCXsweDAzLCAweDEyfSwJLyogdnJlZiAqLworCXsweDE3LCAweDE2fSwJLyogaHN0YXJ0ICovCisJezB4MTgsIDB4MDJ9LAkvKiBoc3RvcCAqLworCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KKwl7MHgxYSwgMHgzZH0sCS8qIHZzdG9wICovCisJezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCisJezB4YzAsIDB4YWF9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9pbml0X292OTY1eF8yW11bMl0gPSB7CisJezB4OTQsIDB4YWF9LAorCXsweGYxLCAweDYwfSwKKwl7MHhlNSwgMHgwNH0sCisJezB4YzAsIDB4NTB9LAorCXsweGMxLCAweDNjfSwKKwl7MHg4YywgMHgwMH0sCisJezB4OGQsIDB4MWN9LAorCXsweDM0LCAweDA1fSwKKworCXsweGMyLCAweDBjfSwKKwl7MHhjMywgMHhmOX0sCisJezB4ZGEsIDB4MDF9LAorCXsweDUwLCAweDAwfSwKKwl7MHg1MSwgMHhhMH0sCisJezB4NTIsIDB4M2N9LAorCXsweDUzLCAweDAwfSwKKwl7MHg1NCwgMHgwMH0sCisJezB4NTUsIDB4MDB9LAorCXsweDU3LCAweDAwfSwKKwl7MHg1YywgMHgwMH0sCisJezB4NWEsIDB4YTB9LAorCXsweDViLCAweDc4fSwKKwl7MHgzNSwgMHgwMn0sCisJezB4ZDksIDB4MTB9LAorCXsweDk0LCAweDExfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdF9vdjk2NXhfMltdWzJdID0geworCXsweDNiLCAweGM0fSwKKwl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KKwl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KKwl7MHgwMCwgMHgwMH0sCS8qIGdhaW4gKi8KKwl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLworCXsweDExLCAweDAzfSwJLyogY2xrcmMgKi8KKwl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KKwl7MHg2YSwgMHgwNX0sCisJezB4YzUsIDB4MDd9LAorCXsweGEyLCAweDRifSwKKwl7MHhhMywgMHgzZX0sCisJezB4MmQsIDB4MDB9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMH0sCisJezB4MmQsIDB4MDB9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMX0sCisJezB4M2YsIDB4MDF9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMX0sCisJezB4NGYsIDB4OTh9LAorCXsweDUwLCAweDk4fSwKKwl7MHg1MSwgMHgwMH0sCisJezB4NTIsIDB4Mjh9LAorCXsweDUzLCAweDcwfSwKKwl7MHg1NCwgMHg5OH0sCisJezB4NTgsIDB4MWF9LAorCXsweGZmLCAweDQxfSwJLyogcmVhZCA0MSwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NTYsIDB4NDB9LAorCXsweDU1LCAweDhmfSwKKwl7MHgxMCwgMHgyNX0sCS8qIGFlY2ggLSBleHBvc3VyZSBoaWdoIGJpdHMgKi8KKwl7MHhmZiwgMHgxM30sCS8qIHJlYWQgMTMsIHdyaXRlIGZmIDAwICovCisJezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfb3Y5NjV4W11bMl0gPSB7CisJezB4YzIsIDB4NGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHg1MCwgMHgwMH0sCisJezB4NTEsIDB4YTB9LAorCXsweDUyLCAweDc4fSwKKwl7MHg1MywgMHgwMH0sCisJezB4NTQsIDB4MDB9LAorCXsweDU1LCAweDAwfSwKKwl7MHg1NywgMHgwMH0sCisJezB4NWMsIDB4MDB9LAorCXsweDVhLCAweDI4fSwKKwl7MHg1YiwgMHgxZX0sCisJezB4MzUsIDB4MDB9LAorCXsweGQ5LCAweDIxfSwKKwl7MHg5NCwgMHgxMX0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eFtdWzJdID0geworCXsweDNiLCAweGU0fSwKKwl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KKwl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KKwl7MHgwMCwgMHgwMH0sCisJezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KKwl7MHgxMSwgMHgwMX0sCS8qIGNsa3JjICovCisJezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCisJezB4NmEsIDB4MDJ9LAorCXsweGM1LCAweDAzfSwKKwl7MHhhMiwgMHg5Nn0sCisJezB4YTMsIDB4N2R9LAorCXsweGZmLCAweDEzfSwJLyogcmVhZCAxMywgd3JpdGUgZmYgMDAgKi8KKwl7MHgxMywgMHhlN30sCisJezB4M2EsIDB4ODB9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMX0sCit9OworCisKK3N0YXRpYyB2b2lkIG92NTM0X3JlZ193cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcsIHU4IHZhbCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCByZXQ7CisKKwlQREVCVUcoRF9VU0JPLCAicmVnPTB4JTA0eCwgdmFsPTAlMDJ4IiwgcmVnLCB2YWwpOworCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IHZhbDsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCSAgICAgIDB4MDEsCisJCQkgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAweDAwLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwgQ1RSTF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAid3JpdGUgZmFpbGVkIik7Cit9CisKK3N0YXRpYyB1OCBvdjUzNF9yZWdfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICAweDAxLAorCQkJICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAweDAwLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwgQ1RSTF9USU1FT1VUKTsKKwlQREVCVUcoRF9VU0JJLCAicmVnPTB4JTA0eCwgZGF0YT0weCUwMngiLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7CisJaWYgKHJldCA8IDApCisJCVBERUJVRyhEX0VSUiwgInJlYWQgZmFpbGVkIik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKK30KKworLyogVHdvIGJpdHMgY29udHJvbCBMRUQ6IDB4MjEgYml0IDcgYW5kIDB4MjMgYml0IDcuCisgKiAoZGlyZWN0aW9uIGFuZCBvdXRwdXQpPyAqLworc3RhdGljIHZvaWQgb3Y1MzRfc2V0X2xlZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIGludCBzdGF0dXMpCit7CisJdTggZGF0YTsKKworCVBERUJVRyhEX0NPTkYsICJsZWQgc3RhdHVzOiAlZCIsIHN0YXR1cyk7CisKKwlkYXRhID0gb3Y1MzRfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDIxKTsKKwlkYXRhIHw9IDB4ODA7CisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7CisKKwlkYXRhID0gb3Y1MzRfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDIzKTsKKwlpZiAoc3RhdHVzKQorCQlkYXRhIHw9IDB4ODA7CisJZWxzZQorCQlkYXRhICY9IH4weDgwOworCisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgyMywgZGF0YSk7CisKKwlpZiAoIXN0YXR1cykgeworCQlkYXRhID0gb3Y1MzRfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDIxKTsKKwkJZGF0YSAmPSB+MHg4MDsKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7CisJfQorfQorCitzdGF0aWMgaW50IHNjY2JfY2hlY2tfc3RhdHVzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwl1OCBkYXRhOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlkYXRhID0gb3Y1MzRfcmVnX3JlYWQoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfU1RBVFVTKTsKKworCQlzd2l0Y2ggKGRhdGEpIHsKKwkJY2FzZSAweDAwOgorCQkJcmV0dXJuIDE7CisJCWNhc2UgMHgwNDoKKwkJCXJldHVybiAwOworCQljYXNlIDB4MDM6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVBERUJVRyhEX0VSUiwgInNjY2Igc3RhdHVzIDB4JTAyeCwgYXR0ZW1wdCAlZC81IiwKKwkJCSAgICAgICBkYXRhLCBpICsgMSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNjY2JfcmVnX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggcmVnLCB1OCB2YWwpCit7CisJUERFQlVHKERfVVNCTywgInJlZzogMHglMDJ4LCB2YWw6IDB4JTAyeCIsIHJlZywgdmFsKTsKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfU1VCQUREUiwgcmVnKTsKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfV1JJVEUsIHZhbCk7CisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX09QRVJBVElPTiwgT1Y1MzRfT1BfV1JJVEVfMyk7CisKKwlpZiAoIXNjY2JfY2hlY2tfc3RhdHVzKGdzcGNhX2RldikpCisJCVBERUJVRyhEX0VSUiwgInNjY2JfcmVnX3dyaXRlIGZhaWxlZCIpOworfQorCitzdGF0aWMgdTggc2NjYl9yZWdfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcpCit7CisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NVQkFERFIsIHJlZyk7CisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX09QRVJBVElPTiwgT1Y1MzRfT1BfV1JJVEVfMik7CisJaWYgKCFzY2NiX2NoZWNrX3N0YXR1cyhnc3BjYV9kZXYpKQorCQlQREVCVUcoRF9FUlIsICJzY2NiX3JlZ19yZWFkIGZhaWxlZCAxIik7CisKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfT1BFUkFUSU9OLCBPVjUzNF9PUF9SRUFEXzIpOworCWlmICghc2NjYl9jaGVja19zdGF0dXMoZ3NwY2FfZGV2KSkKKwkJUERFQlVHKERfRVJSLCAic2NjYl9yZWdfcmVhZCBmYWlsZWQgMiIpOworCisJcmV0dXJuIG92NTM0X3JlZ19yZWFkKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1JFQUQpOworfQorCisvKiBvdXRwdXQgYSBicmlkZ2Ugc2VxdWVuY2UgKHJlZyAtIHZhbCkgKi8KK3N0YXRpYyB2b2lkIHJlZ193X2FycmF5KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IHU4ICgqZGF0YSlbMl0sIGludCBsZW4pCit7CisJd2hpbGUgKC0tbGVuID49IDApIHsKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgKCpkYXRhKVswXSwgKCpkYXRhKVsxXSk7CisJCWRhdGErKzsKKwl9Cit9CisKKy8qIG91dHB1dCBhIHNlbnNvciBzZXF1ZW5jZSAocmVnIC0gdmFsKSAqLworc3RhdGljIHZvaWQgc2NjYl93X2FycmF5KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IHU4ICgqZGF0YSlbMl0sIGludCBsZW4pCit7CisJd2hpbGUgKC0tbGVuID49IDApIHsKKwkJaWYgKCgqZGF0YSlbMF0gIT0gMHhmZikgeworCQkJc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAoKmRhdGEpWzBdLCAoKmRhdGEpWzFdKTsKKwkJfSBlbHNlIHsKKwkJCXNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAoKmRhdGEpWzFdKTsKKwkJCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CisJCX0KKwkJZGF0YSsrOworCX0KK30KKwogLyogc2V0IGZyYW1lcmF0ZSAqLwogc3RhdGljIHZvaWQgb3Y1MzRfc2V0X2ZyYW1lX3JhdGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewpAQCAtMzQ2LDQwICs2OTQsMTcgQEAKIAlQREVCVUcoRF9QUk9CRSwgImZyYW1lX3JhdGU6ICVkIiwgZnIpOwogfQogCi0vKiBzZXR1cCBtZXRob2QgKi8KLXN0YXRpYyB2b2lkIG92NTM0X3NldHVwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlpbnQgaTsKLQotCS8qIEluaXRpYWxpemUgYnJpZGdlIGNoaXAgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvdjUzNF9yZWdfaW5pdGRhdGEpOyBpKyspCi0JCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIG92NTM0X3JlZ19pbml0ZGF0YVtpXVswXSwKLQkJCQlvdjUzNF9yZWdfaW5pdGRhdGFbaV1bMV0pOwotCi0JUERFQlVHKERfUFJPQkUsICJzZW5zb3IgaXMgb3YlMDJ4JTAyeCIsCi0JCXNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDBhKSwKLQkJc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MGIpKTsKLQotCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAxKTsKLQotCS8qIEluaXRpYWxpemUgc2Vuc29yICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3Y3NzJ4X3JlZ19pbml0ZGF0YSk7IGkrKykKLQkJc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBvdjc3MnhfcmVnX2luaXRkYXRhW2ldWzBdLAotCQkJICAgICAgIG92NzcyeF9yZWdfaW5pdGRhdGFbaV1bMV0pOwotCi0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwOSk7Ci0Jb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDApOwotfQotCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCiBzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogeworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgY2FtICpjYW07CiAKKwlzZC0+c2Vuc29yID0gaWQtPmRyaXZlcl9pbmZvOworCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwogCi0JY2FtLT5lcGFkZHIgPSAweDAxOwogCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKIAljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOwogCkBAIC0zOTIsMjYgKzcxNywxMDIgQEAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLwogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlvdjUzNF9zZXR1cChnc3BjYV9kZXYpOwotCW92NTM0X3NldF9mcmFtZV9yYXRlKGdzcGNhX2Rldik7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXUxNiBzZW5zb3JfaWQ7CisJc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9hZGRyWzJdID0geworCQkweDQyLAkJCS8qIDAgU0VOU09SX09WNzcyWCAqLworCQkweDYwLAkJCS8qIDEgU0VOU09SX09WOTY1WCAqLworCX07CisKKwkvKiByZXNldCBicmlkZ2UgKi8KKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGU3LCAweDNhKTsKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDA4KTsKKwltc2xlZXAoMTAwKTsKKworCS8qIGluaXRpYWxpemUgdGhlIHNlbnNvciBhZGRyZXNzICovCisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX0FERFJFU1MsCisJCQkJc2Vuc29yX2FkZHJbc2QtPnNlbnNvcl0pOworCisJLyogcmVzZXQgc2Vuc29yICovCisJc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDEyLCAweDgwKTsKKwltc2xlZXAoMTApOworCisJLyogcHJvYmUgdGhlIHNlbnNvciAqLworCXNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDBhKTsKKwlzZW5zb3JfaWQgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHgwYSkgPDwgODsKKwlzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHgwYik7CisJc2Vuc29yX2lkIHw9IHNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDBiKTsKKwlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBJRDogJTA0eCIsIHNlbnNvcl9pZCk7CisKKwkvKiBpbml0aWFsaXplICovCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfT1Y3NzJYOgorCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9pbml0X292NzIyeCwKKwkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292NzIyeCkpOworCQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9pbml0X292NzIyeCwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9pbml0X292NzIyeCkpOworCQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDA5KTsKKwkJb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDApOworCQlvdjUzNF9zZXRfZnJhbWVfcmF0ZShnc3BjYV9kZXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorLyoJY2FzZSBTRU5TT1JfT1Y5NjVYOiAqLworCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9pbml0X292OTY1eCwKKwkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292OTY1eCkpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3JfaW5pdF9vdjk2NXgsCisJCQkJQVJSQVlfU0laRShzZW5zb3JfaW5pdF9vdjk2NXgpKTsKKwkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2VfaW5pdF9vdjk2NXhfMiwKKwkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292OTY1eF8yKSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9pbml0X292OTY1eF8yLAorCQkJCUFSUkFZX1NJWkUoc2Vuc29yX2luaXRfb3Y5NjV4XzIpKTsKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDEpOworCQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMCk7CisJCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOworCX0KIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQkvKiBzdGFydCBzdHJlYW1pbmcgZGF0YSAqLwotCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAxKTsKLQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDAwKTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9PVjc3Mlg6CisJCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAxKTsKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNFTlNPUl9PVjk2NVg6ICovCisJCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX3N0YXJ0X292OTY1eCwKKwkJCQlBUlJBWV9TSVpFKGJyaWRnZV9zdGFydF9vdjk2NXgpKTsKKwkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eCwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjk2NXgpKTsKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAxKTsKKy8qZml4bWU6IG90aGVyIHNlbnNvciBzdGFydCBvbWl0dGVkKi8KKwl9CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQkvKiBzdG9wIHN0cmVhbWluZyBkYXRhICovCi0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwOSk7Ci0Jb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDApOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX09WNzcyWDoKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwOSk7CisJCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKy8qCWNhc2UgU0VOU09SX09WOTY1WDogKi8KKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMSk7CisJCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAwKTsKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJCWJyZWFrOworCX0KIH0KIAogLyogVmFsdWVzIGZvciBibUhlYWRlckluZm8gKFZpZGVvIGFuZCBTdGlsbCBJbWFnZSBQYXlsb2FkIEhlYWRlcnMsIDIuNC4zLjMpICovCkBAIC00MjksNzUgKzgzMCw3NSBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlfX3UzMiB0aGlzX3B0czsKLQlpbnQgdGhpc19maWQ7CisJdTE2IHRoaXNfZmlkOwogCWludCByZW1haW5pbmdfbGVuID0gbGVuOwotCV9fdTggKm5leHRfZGF0YSA9IGRhdGE7CiAKLXNjYW5fbmV4dDoKLQlpZiAocmVtYWluaW5nX2xlbiA8PSAwKQotCQlyZXR1cm47CisJZG8geworCQlsZW4gPSBtaW4ocmVtYWluaW5nX2xlbiwgMjA0MCk7CQkvKmZpeG1lOiB3YXMgMjA0OCovCiAKLQlkYXRhID0gbmV4dF9kYXRhOwotCWxlbiA9IG1pbihyZW1haW5pbmdfbGVuLCAyMDQ4KTsKLQlyZW1haW5pbmdfbGVuIC09IGxlbjsKLQluZXh0X2RhdGEgKz0gbGVuOworCQkvKiBQYXlsb2FkcyBhcmUgcHJlZml4ZWQgd2l0aCBhIFVWQy1zdHlsZSBoZWFkZXIuICBXZQorCQkgICBjb25zaWRlciBhIGZyYW1lIHRvIHN0YXJ0IHdoZW4gdGhlIEZJRCB0b2dnbGVzLCBvciB0aGUgUFRTCisJCSAgIGNoYW5nZXMuICBBIGZyYW1lIGVuZHMgd2hlbiBFT0YgaXMgc2V0LCBhbmQgd2UndmUgcmVjZWl2ZWQKKwkJICAgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGJ5dGVzLiAqLwogCi0JLyogUGF5bG9hZHMgYXJlIHByZWZpeGVkIHdpdGggYSBVVkMtc3R5bGUgaGVhZGVyLiAgV2UKLQkgICBjb25zaWRlciBhIGZyYW1lIHRvIHN0YXJ0IHdoZW4gdGhlIEZJRCB0b2dnbGVzLCBvciB0aGUgUFRTCi0JICAgY2hhbmdlcy4gIEEgZnJhbWUgZW5kcyB3aGVuIEVPRiBpcyBzZXQsIGFuZCB3ZSd2ZSByZWNlaXZlZAotCSAgIHRoZSBjb3JyZWN0IG51bWJlciBvZiBieXRlcy4gKi8KLQotCS8qIFZlcmlmeSBVVkMgaGVhZGVyLiAgSGVhZGVyIGxlbmd0aCBpcyBhbHdheXMgMTIgKi8KLQlpZiAoZGF0YVswXSAhPSAxMiB8fCBsZW4gPCAxMikgewotCQlQREVCVUcoRF9QQUNLLCAiYmFkIGhlYWRlciIpOwotCQlnb3RvIGRpc2NhcmQ7Ci0JfQotCi0JLyogQ2hlY2sgZXJyb3JzICovCi0JaWYgKGRhdGFbMV0gJiBVVkNfU1RSRUFNX0VSUikgewotCQlQREVCVUcoRF9QQUNLLCAicGF5bG9hZCBlcnJvciIpOwotCQlnb3RvIGRpc2NhcmQ7Ci0JfQotCi0JLyogRXh0cmFjdCBQVFMgYW5kIEZJRCAqLwotCWlmICghKGRhdGFbMV0gJiBVVkNfU1RSRUFNX1BUUykpIHsKLQkJUERFQlVHKERfUEFDSywgIlBUUyBub3QgcHJlc2VudCIpOwotCQlnb3RvIGRpc2NhcmQ7Ci0JfQotCXRoaXNfcHRzID0gKGRhdGFbNV0gPDwgMjQpIHwgKGRhdGFbNF0gPDwgMTYpIHwgKGRhdGFbM10gPDwgOCkgfCBkYXRhWzJdOwotCXRoaXNfZmlkID0gKGRhdGFbMV0gJiBVVkNfU1RSRUFNX0ZJRCkgPyAxIDogMDsKLQotCS8qIElmIFBUUyBvciBGSUQgaGFzIGNoYW5nZWQsIHN0YXJ0IGEgbmV3IGZyYW1lLiAqLwotCWlmICh0aGlzX3B0cyAhPSBzZC0+bGFzdF9wdHMgfHwgdGhpc19maWQgIT0gc2QtPmxhc3RfZmlkKSB7Ci0JCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsIE5VTEwsIDApOwotCQlzZC0+bGFzdF9wdHMgPSB0aGlzX3B0czsKLQkJc2QtPmxhc3RfZmlkID0gdGhpc19maWQ7Ci0JfQotCi0JLyogQWRkIHRoZSBkYXRhIGZyb20gdGhpcyBwYXlsb2FkICovCi0JZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwKLQkJCQlkYXRhICsgMTIsIGxlbiAtIDEyKTsKLQotCS8qIElmIHRoaXMgcGFja2V0IGlzIG1hcmtlZCBhcyBFT0YsIGVuZCB0aGUgZnJhbWUgKi8KLQlpZiAoZGF0YVsxXSAmIFVWQ19TVFJFQU1fRU9GKSB7Ci0JCXNkLT5sYXN0X3B0cyA9IDA7Ci0KLQkJaWYgKChmcmFtZS0+ZGF0YV9lbmQgLSBmcmFtZS0+ZGF0YSkgIT0KLQkJICAgIChnc3BjYV9kZXYtPndpZHRoICogZ3NwY2FfZGV2LT5oZWlnaHQgKiAyKSkgewotCQkJUERFQlVHKERfUEFDSywgInNob3J0IGZyYW1lIik7CisJCS8qIFZlcmlmeSBVVkMgaGVhZGVyLiAgSGVhZGVyIGxlbmd0aCBpcyBhbHdheXMgMTIgKi8KKwkJaWYgKGRhdGFbMF0gIT0gMTIgfHwgbGVuIDwgMTIpIHsKKwkJCVBERUJVRyhEX1BBQ0ssICJiYWQgaGVhZGVyIik7CiAJCQlnb3RvIGRpc2NhcmQ7CiAJCX0KIAotCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsIE5VTEwsIDApOwotCX0KKwkJLyogQ2hlY2sgZXJyb3JzICovCisJCWlmIChkYXRhWzFdICYgVVZDX1NUUkVBTV9FUlIpIHsKKwkJCVBERUJVRyhEX1BBQ0ssICJwYXlsb2FkIGVycm9yIik7CisJCQlnb3RvIGRpc2NhcmQ7CisJCX0KIAotCS8qIERvbmUgdGhpcyBwYXlsb2FkICovCi0JZ290byBzY2FuX25leHQ7CisJCS8qIEV4dHJhY3QgUFRTIGFuZCBGSUQgKi8KKwkJaWYgKCEoZGF0YVsxXSAmIFVWQ19TVFJFQU1fUFRTKSkgeworCQkJUERFQlVHKERfUEFDSywgIlBUUyBub3QgcHJlc2VudCIpOworCQkJZ290byBkaXNjYXJkOworCQl9CisJCXRoaXNfcHRzID0gKGRhdGFbNV0gPDwgMjQpIHwgKGRhdGFbNF0gPDwgMTYpCisJCQkJCQl8IChkYXRhWzNdIDw8IDgpIHwgZGF0YVsyXTsKKwkJdGhpc19maWQgPSAoZGF0YVsxXSAmIFVWQ19TVFJFQU1fRklEKSA/IDEgOiAwOworCisJCS8qIElmIFBUUyBvciBGSUQgaGFzIGNoYW5nZWQsIHN0YXJ0IGEgbmV3IGZyYW1lLiAqLworCQlpZiAodGhpc19wdHMgIT0gc2QtPmxhc3RfcHRzIHx8IHRoaXNfZmlkICE9IHNkLT5sYXN0X2ZpZCkgeworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwKKwkJCQkJTlVMTCwgMCk7CisJCQlzZC0+bGFzdF9wdHMgPSB0aGlzX3B0czsKKwkJCXNkLT5sYXN0X2ZpZCA9IHRoaXNfZmlkOworCQl9CisKKwkJLyogQWRkIHRoZSBkYXRhIGZyb20gdGhpcyBwYXlsb2FkICovCisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsCisJCQkJCWRhdGEgKyAxMiwgbGVuIC0gMTIpOworCisJCS8qIElmIHRoaXMgcGFja2V0IGlzIG1hcmtlZCBhcyBFT0YsIGVuZCB0aGUgZnJhbWUgKi8KKwkJaWYgKGRhdGFbMV0gJiBVVkNfU1RSRUFNX0VPRikgeworCQkJc2QtPmxhc3RfcHRzID0gMDsKKworCQkJaWYgKGZyYW1lLT5kYXRhX2VuZCAtIGZyYW1lLT5kYXRhICE9CisJCQkgICAgZ3NwY2FfZGV2LT53aWR0aCAqIGdzcGNhX2Rldi0+aGVpZ2h0ICogMikgeworCQkJCVBERUJVRyhEX1BBQ0ssICJzaG9ydCBmcmFtZSIpOworCQkJCWdvdG8gZGlzY2FyZDsKKwkJCX0KKworCQkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsCisJCQkJCQlOVUxMLCAwKTsKKwkJfQorCisJCS8qIERvbmUgdGhpcyBwYXlsb2FkICovCisJCWdvdG8gc2Nhbl9uZXh0OwogCiBkaXNjYXJkOgotCS8qIERpc2NhcmQgZGF0YSB1bnRpbCBhIG5ldyBmcmFtZSBzdGFydHMuICovCi0JZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRElTQ0FSRF9QQUNLRVQsIGZyYW1lLCBOVUxMLCAwKTsKLQlnb3RvIHNjYW5fbmV4dDsKKwkJLyogRGlzY2FyZCBkYXRhIHVudGlsIGEgbmV3IGZyYW1lIHN0YXJ0cy4gKi8KKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRElTQ0FSRF9QQUNLRVQsIGZyYW1lLCBOVUxMLCAwKTsKKworc2Nhbl9uZXh0OgorCQlyZW1haW5pbmdfbGVuIC09IGxlbjsKKwkJZGF0YSArPSBsZW47CisJfSB3aGlsZSAocmVtYWluaW5nX2xlbiA+IDApOwogfQogCiAvKiBnZXQgc3RyZWFtIHBhcmFtZXRlcnMgKGZyYW1lcmF0ZSkgKi8KQEAgLTU1Niw5ICs5NTcsOCBAQAogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KIHN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewotCXtVU0JfREVWSUNFKDB4MDZmOCwgMHgzMDAyKX0sCS8qIEhlcmN1bGVzIEJsb2cgV2ViY2FtICovCi0Je1VTQl9ERVZJQ0UoMHgwNmY4LCAweDMwMDMpfSwJLyogSGVyY3VsZXMgRHVhbHBpeCBIRCBXZWJsb2cgKi8KLQl7VVNCX0RFVklDRSgweDE0MTUsIDB4MjAwMCl9LAkvKiBTb255IEhEIEV5ZSBmb3IgUFMzIChTTEVIIDAwMjAxKSAqLworCXtVU0JfREVWSUNFKDB4MDZmOCwgMHgzMDAzKSwgLmRyaXZlcl9pbmZvID0gU0VOU09SX09WOTY1WH0sCisJe1VTQl9ERVZJQ0UoMHgxNDE1LCAweDIwMDApLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfT1Y3NzJYfSwKIAl7fQogfTsKIApAQCAtNTg1LDggKzk4NSwxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjMjA3LmMKaW5kZXggYzkwYWM4NS4uOTVhOTdhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jCkBAIC0yNTYsNyArMjU2LDYgQEAKIAkJIiAodmlkL3BpZCAweCUwNFg6MHglMDRYKSIsIGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDA1OwogCWNhbS0+Y2FtX21vZGUgPSBzaWZfbW9kZTsKIAljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc2lmX21vZGUpOwogCXNkLT5icmlnaHRuZXNzID0gUEFDMjA3X0JSSUdIVE5FU1NfREVGQVVMVDsKQEAgLTUzNiw2ICs1MzUsNyBAQAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNDcwKX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI0NzEpfSwKIAl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjQ3Mil9LAorCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNDc0KX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI0NzYpfSwKIAl7VVNCX0RFVklDRSgweDE0NWYsIDB4MDEzYSl9LAogCXtVU0JfREVWSUNFKDB4MjAwMSwgMHhmMTE1KX0sCkBAIC01NjUsOCArNTY1LDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCmluZGV4IGE5Yzk1Y2IuLmUxZTNhM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCkBAIC00OTgsNyArNDk4LDYgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDA1OwogCiAJc2QtPnNlbnNvciA9IGlkLT5kcml2ZXJfaW5mbzsKIAlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfUEFDNzMwMikgewpAQCAtMTA5Nyw4ICsxMDk2LDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYwppbmRleCBiM2U0ZTA2Li4xNTNkMGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKQEAgLTg3MCw3ICs4NzAsNiBAQAogCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5jdHJsX2RpczsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAJaWYgKCEoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX1NJRikpIHsKIAkJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOwogCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOwpAQCAtMTI3Miw4ICsxMjcxLDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYwppbmRleCAzMzczYjhkLi5jNzJlMTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKQEAgLTM1LDM2ICszNSw0NyBAQAogCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAKIAlhdG9taWNfdCBhdmdfbHVtOwotCXVuc2lnbmVkIGludCBleHBvc3VyZTsKKwl1MzIgZXhwb3N1cmU7CiAKLQlfX3UxNiBicmlnaHRuZXNzOwotCV9fdTggY29udHJhc3Q7Ci0JX191OCBjb2xvcnM7Ci0JX191OCBhdXRvZ2FpbjsKLQlfX3U4IGJsdWU7Ci0JX191OCByZWQ7Ci0JX191OCB2ZmxpcDsJCQkvKiBvdjc2MzAgb25seSAqLwotCV9fdTggaW5mcmFyZWQ7CQkJLyogbWkwMzYwIG9ubHkgKi8KKwl1MTYgYnJpZ2h0bmVzczsKKwl1OCBjb250cmFzdDsKKwl1OCBjb2xvcnM7CisJdTggYXV0b2dhaW47CisJdTggYmx1ZTsKKwl1OCByZWQ7CisJdTggZ2FtbWE7CisJdTggdmZsaXA7CQkJLyogb3Y3NjMwL292NzY0OCBvbmx5ICovCisJdTggaW5mcmFyZWQ7CQkJLyogbXQ5djExMSBvbmx5ICovCisJdTggcXVhbGl0eTsJCQkvKiBpbWFnZSBxdWFsaXR5ICovCisjZGVmaW5lIFFVQUxJVFlfTUlOIDYwCisjZGVmaW5lIFFVQUxJVFlfTUFYIDk1CisjZGVmaW5lIFFVQUxJVFlfREVGIDgwCisJdTgganBlZ3F1YWw7CQkJLyogd2ViY2FtIHF1YWxpdHkgKi8KIAotCV9fczggYWdfY250OworCXU4IHJlZzE4OworCisJczggYWdfY250OwogI2RlZmluZSBBR19DTlRfU1RBUlQgMTMKIAotCV9fdTggcWluZGV4OwotCV9fdTggYnJpZGdlOworCXU4IGJyaWRnZTsKICNkZWZpbmUgQlJJREdFX1NOOUMxMDJQIDAKICNkZWZpbmUgQlJJREdFX1NOOUMxMDUgMQogI2RlZmluZSBCUklER0VfU045QzExMCAyCiAjZGVmaW5lIEJSSURHRV9TTjlDMTIwIDMKICNkZWZpbmUgQlJJREdFX1NOOUMzMjUgNAotCV9fdTggc2Vuc29yOwkJCS8qIFR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKi8KKwl1OCBzZW5zb3I7CQkJLyogVHlwZSBvZiBpbWFnZSBzZW5zb3IgY2hpcCAqLwogI2RlZmluZSBTRU5TT1JfSFY3MTMxUiAwCiAjZGVmaW5lIFNFTlNPUl9NSTAzNjAgMQogI2RlZmluZSBTRU5TT1JfTU80MDAwIDIKLSNkZWZpbmUgU0VOU09SX09NNjgwMiAzCi0jZGVmaW5lIFNFTlNPUl9PVjc2MzAgNAotI2RlZmluZSBTRU5TT1JfT1Y3NjQ4IDUKLSNkZWZpbmUgU0VOU09SX09WNzY2MCA2Ci0JX191OCBpMmNfYmFzZTsKKyNkZWZpbmUgU0VOU09SX01UOVYxMTEgMworI2RlZmluZSBTRU5TT1JfT002ODAyIDQKKyNkZWZpbmUgU0VOU09SX09WNzYzMCA1CisjZGVmaW5lIFNFTlNPUl9PVjc2NDggNgorI2RlZmluZSBTRU5TT1JfT1Y3NjYwIDcKKyNkZWZpbmUgU0VOU09SX1NQODA3MDggOAorCXU4IGkyY19iYXNlOworCisJdTggKmpwZWdfaGRyOwogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwpAQCAtNzgsNiArODksOCBAQAogc3RhdGljIGludCBzZF9nZXRibHVlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0cmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRyZWRfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGdhbW1hKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0dmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwpAQCAtMTU4LDYgKzE3MSwyMCBAQAogCSAgICAuc2V0ID0gc2Rfc2V0cmVkX2JhbGFuY2UsCiAJICAgIC5nZXQgPSBzZF9nZXRyZWRfYmFsYW5jZSwKIAl9LAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0dBTU1BLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkdhbW1hIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDQwLAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEdBTU1BX0RFRiAyMAorCQkuZGVmYXVsdF92YWx1ZSA9IEdBTU1BX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGdhbW1hLAorCSAgICAuZ2V0ID0gc2RfZ2V0Z2FtbWEsCisJfSwKICNkZWZpbmUgQVVUT0dBSU5fSURYIDUKIAl7CiAJICAgIHsKQEAgLTE3Myw3ICsyMDAsNyBAQAogCSAgICAuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCiAJICAgIC5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKIAl9LAotLyogb3Y3NjMwIG9ubHkgKi8KKy8qIG92NzYzMC9vdjc2NDggb25seSAqLwogI2RlZmluZSBWRkxJUF9JRFggNgogCXsKIAkgICAgewpAQCAtMTgzLDEzICsyMTAsMTMgQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDEsCiAJCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgVkZMSVBfREVGIDEKKyNkZWZpbmUgVkZMSVBfREVGIDAJCQkvKiB2ZmxpcCBkZWYgPSAxIGZvciBvdjc2MzAgKi8KIAkJLmRlZmF1bHRfdmFsdWUgPSBWRkxJUF9ERUYsCiAJICAgIH0sCiAJICAgIC5zZXQgPSBzZF9zZXR2ZmxpcCwKIAkgICAgLmdldCA9IHNkX2dldHZmbGlwLAogCX0sCi0vKiBtaTAzNjAgb25seSAqLworLyogbXQ5djExMSBvbmx5ICovCiAjZGVmaW5lIElORlJBUkVEX0lEWCA3CiAJewogCSAgICB7CkBAIC0yMTEsMTggKzIzOCwyMiBAQAogc3RhdGljIF9fdTMyIGN0cmxfZGlzW10gPSB7CiAJKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCksCiAJCQkJCQkvKiBTRU5TT1JfSFY3MTMxUiAwICovCi0JKDEgPDwgVkZMSVBfSURYKSwKKwkoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSwKIAkJCQkJCS8qIFNFTlNPUl9NSTAzNjAgMSAqLwogCSgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpLAogCQkJCQkJLyogU0VOU09SX01PNDAwMCAyICovCisJKDEgPDwgVkZMSVBfSURYKSwKKwkJCQkJCS8qIFNFTlNPUl9NVDlWMTExIDMgKi8KIAkoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSwKLQkJCQkJCS8qIFNFTlNPUl9PTTY4MDIgMyAqLworCQkJCQkJLyogU0VOU09SX09NNjgwMiA0ICovCiAJKDEgPDwgQVVUT0dBSU5fSURYKSB8ICgxIDw8IElORlJBUkVEX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT1Y3NjMwIDQgKi8KKwkJCQkJCS8qIFNFTlNPUl9PVjc2MzAgNSAqLworCSgxIDw8IElORlJBUkVEX0lEWCksCisJCQkJCQkvKiBTRU5TT1JfT1Y3NjQ4IDYgKi8KIAkoMSA8PCBBVVRPR0FJTl9JRFgpIHwgKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT1Y3NjQ4IDUgKi8KKwkJCQkJCS8qIFNFTlNPUl9PVjc2NjAgNyAqLwogCSgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSwKLQkJCQkJCS8qIFNFTlNPUl9PVjc2NjAgNiAqLworCQkJCQkJLyogU0VOU09SX1NQODA3MDggOCAqLwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKQEAgLTI0MywxOTYgKzI3NCwyMjggQEAKIAkJLnByaXYgPSAwfSwKIH07CiAKLS8qRGF0YSBmcm9tIHNuOWMxMDJwK2h2NzEzMzFyICovCi1zdGF0aWMgY29uc3QgX191OCBzbl9odjcxMzFbXSA9IHsKKy8qRGF0YSBmcm9tIHNuOWMxMDJwK2h2NzEzMXIgKi8KK3N0YXRpYyBjb25zdCB1OCBzbl9odjcxMzFbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KIAkweDAwLAkweDAzLAkweDY0LAkweDAwLAkweDFhLAkweDIwLAkweDIwLAkweDIwLAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHhhMSwJMHgxMSwJMHgwMiwJMHgwOSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgxMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCiAJMHgwMywJMHgwMCwJMHgwMCwJMHgwMSwJMHgwMywJMHgyOCwJMHgxZSwJMHg0MSwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwYSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMAorLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIgKi8KKwkweDBhLAkweDAwLAkweDAwLAkweDAwCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBzbl9taTAzNjBbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzbl9taTAzNjBbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KIAkweDAwLAkweDYxLAkweDQ0LAkweDAwLAkweDFhLAkweDIwLAkweDIwLAkweDIwLAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHhiMSwJMHg1ZCwJMHgwNywJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgxMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCiAJMHgwMywJMHgwMCwJMHgwMCwJMHgwMiwJMHgwYSwJMHgyOCwJMHgxZSwJMHg2MSwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwNiwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMAorLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIgKi8KKwkweDA2LAkweDAwLAkweDAwLAkweDAwCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBzbl9tbzQwMDBbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzbl9tbzQwMDBbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KLQkweDEyLAkweDIzLAkweDYwLAkweDAwLAkweDFhLAkweDAwLAkweDIwLAkweDE4LAorCTB4MDAsCTB4MjMsCTB4NjAsCTB4MDAsCTB4MWEsCTB4MDAsCTB4MjAsCTB4MTgsCiAvKglyZWc4CXJlZzkJcmVnYQlyZWdiCXJlZ2MJcmVnZAlyZWdlCXJlZ2YgKi8KIAkweDgxLAkweDIxLAkweDAwLAkweDAwLAkweDAwLAkweDAwLAkweDAwLAkweDAwLAogLyoJcmVnMTAJcmVnMTEJcmVnMTIJcmVnMTMJcmVnMTQJcmVnMTUJcmVnMTYJcmVnMTcgKi8KIAkweDAzLAkgMHgwMCwJMHgwYiwJMHgwZiwJMHgxNCwJMHgyOCwJMHgxZSwJMHg0MCwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwOCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMAorLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIgKi8KKwkweDA4LAkweDAwLAkweDAwLAkweDAwCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBzbl9vbTY4MDJbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzbl9tdDl2MTExWzB4MWNdID0geworLyoJcmVnMAlyZWcxCXJlZzIJcmVnMwlyZWc0CXJlZzUJcmVnNglyZWc3ICovCisJMHgwMCwJMHg2MSwJMHg0MCwJMHgwMCwJMHgxYSwJMHgyMCwJMHgyMCwJMHgyMCwKKy8qCXJlZzgJcmVnOQlyZWdhCXJlZ2IJcmVnYwlyZWdkCXJlZ2UJcmVnZiAqLworCTB4ODEsCTB4NWMsCTB4MDcsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCisvKglyZWcxMAlyZWcxMQlyZWcxMglyZWcxMwlyZWcxNAlyZWcxNQlyZWcxNglyZWcxNyAqLworCTB4MDMsCTB4MDAsCTB4MDAsCTB4MDIsCTB4MWMsCTB4MjgsCTB4MWUsCTB4NDAsCisvKglyZWcxOAlyZWcxOQlyZWcxYQlyZWcxYiAqLworCTB4MDYsCTB4MDAsCTB4MDAsCTB4MDAKK307CisKK3N0YXRpYyBjb25zdCB1OCBzbl9vbTY4MDJbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KIAkweDAwLAkweDIzLAkweDcyLAkweDAwLAkweDFhLAkweDM0LAkweDI3LAkweDIwLAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHg4MCwJMHgzNCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCiAJMHgwMywJMHgwMCwJMHg1MSwJMHgwMSwJMHgwMCwJMHgyOCwJMHgxZSwJMHg0MCwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwNSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwKLQkweDA4LAkweDIyLAkweDQ0LAkweDYzLAkweDdkLAkweDkyLAkweGEzLAkweGFmLAotCTB4YmMsCTB4YzQsCTB4Y2QsCTB4ZDUsCTB4ZGMsCTB4ZTEsCTB4ZTgsCTB4ZWYsCi0JMHhmNworLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIgKi8KKwkweDA1LAkweDAwLAkweDAwLAkweDAwCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBzbl9vdjc2MzBbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzbl9vdjc2MzBbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KIAkweDAwLAkweDIxLAkweDQwLAkweDAwLAkweDFhLAkweDIwLAkweDFmLAkweDIwLAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHhhMSwJMHgyMSwJMHg3NiwJMHgyMSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgxMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCiAJMHgwMywJMHgwMCwJMHgwNCwJMHgwMSwJMHgwYSwJMHgyOCwJMHgxZSwJMHhjMiwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwYiwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMAorLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIgKi8KKwkweDBiLAkweDAwLAkweDAwLAkweDAwCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBzbl9vdjc2NDhbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzbl9vdjc2NDhbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KIAkweDAwLAkweDYzLAkweDQwLAkweDAwLAkweDFhLAkweDIwLAkweDIwLAkweDIwLAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHg4MSwJMHgyMSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgxMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCiAJMHgwMywJMHgwMCwJMHgwMCwJMHgwMSwJMHgwMCwJMHgyOCwJMHgxZSwJMHgwMCwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwYiwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMAorLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIgKi8KKwkweDBiLAkweDAwLAkweDAwLAkweDAwCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBzbl9vdjc2NjBbXQk9IHsKK3N0YXRpYyBjb25zdCB1OCBzbl9vdjc2NjBbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KIAkweDAwLAkweDYxLAkweDQwLAkweDAwLAkweDFhLAkweDIwLAkweDIwLAkweDIwLAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHg4MSwJMHgyMSwJMHgwNywJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgxMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCiAJMHgwMywJMHgwMCwJMHgwMSwJMHgwMSwJMHgwOCwJMHgyOCwJMHgxZSwJMHgyMCwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwNywJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwKKy8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiICovCisJMHgwNywJMHgwMCwJMHgwMCwJMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHU4IHNuX3NwODA3MDhbMHgxY10gPSB7CisvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KKwkweDAwLAkweDYzLAkweDYwLAkweDAwLAkweDFhLAkweDIwLAkweDIwLAkweDIwLAorLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCisJMHg4MSwJMHgxOCwJMHgwNywJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwKKy8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCisJMHgwMywJMHgwMCwJMHgwMCwJMHgwMywJMHgwNCwJMHgyOCwJMHgxZSwJMHgwMCwKKy8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiICovCisJMHgwNywJMHgwMCwJMHgwMCwJMHgwMAogfTsKIAogLyogc2VxdWVuY2Ugc3BlY2lmaWMgdG8gdGhlIHNlbnNvcnMgLSAhISBpbmRleCA9IFNFTlNPUl94eHggKi8KLXN0YXRpYyBjb25zdCBfX3U4ICpzbl90YltdID0geworc3RhdGljIGNvbnN0IHU4ICpzbl90YltdID0gewogCXNuX2h2NzEzMSwKIAlzbl9taTAzNjAsCiAJc25fbW80MDAwLAorCXNuX210OXYxMTEsCiAJc25fb202ODAyLAogCXNuX292NzYzMCwKIAlzbl9vdjc2NDgsCi0Jc25fb3Y3NjYwCisJc25fb3Y3NjYwLAorCXNuX3NwODA3MDgKIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IGdhbW1hX2RlZltdID0geworLyogZGVmYXVsdCBnYW1tYSB0YWJsZSAqLworc3RhdGljIGNvbnN0IHU4IGdhbW1hX2RlZlsxN10gPSB7CiAJMHgwMCwgMHgyZCwgMHg0NiwgMHg1YSwgMHg2YywgMHg3YywgMHg4YiwgMHg5OSwKIAkweGE2LCAweGIyLCAweGJmLCAweGNhLCAweGQ1LCAweGUwLCAweGViLCAweGY1LCAweGZmCiB9OworLyogZ2FtbWEgZm9yIHNlbnNvcnMgSFY3MTMxUiBhbmQgTVQ5VjExMSAqLworc3RhdGljIGNvbnN0IHU4IGdhbW1hX3NwZWNfMVsxN10gPSB7CisJMHgwOCwgMHgzYSwgMHg1MiwgMHg2NSwgMHg3NSwgMHg4MywgMHg5MSwgMHg5ZCwKKwkweGE5LCAweGI0LCAweGJlLCAweGM4LCAweGQyLCAweGRiLCAweGU0LCAweGVkLCAweGY1Cit9OworLyogZ2FtbWEgZm9yIHNlbnNvciBTUDgwNzA4ICovCitzdGF0aWMgY29uc3QgdTggZ2FtbWFfc3BlY18yWzE3XSA9IHsKKwkweDBhLCAweDJkLCAweDRlLCAweDY4LCAweDdkLCAweDhmLCAweDlmLCAweGFiLAorCTB4YjcsIDB4YzIsIDB4Y2MsIDB4ZDMsIDB4ZDgsIDB4ZGUsIDB4ZTIsIDB4ZTUsIDB4ZTYKK307CiAKIC8qIGNvbG9yIG1hdHJpeCBhbmQgb2Zmc2V0cyAqLwotc3RhdGljIGNvbnN0IF9fdTggcmVnODRbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCByZWc4NFtdID0gewogCTB4MTQsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDcsIDB4MDAsCS8qIFlSIFlHIFlCIGdhaW5zICovCiAJMHhlOCwgMHgwZiwgMHhkYSwgMHgwZiwgMHg0MCwgMHgwMCwJLyogVVIgVUcgVUIgKi8KIAkweDNlLCAweDAwLCAweGNkLCAweDBmLCAweGY3LCAweDBmLAkvKiBWUiBWRyBWQiAqLwogCTB4MDAsIDB4MDAsIDB4MDAJCQkvKiBZVVYgb2Zmc2V0cyAqLwogfTsKLXN0YXRpYyBjb25zdCBfX3U4IGh2NzEzMXJfc2Vuc29yX2luaXRbXVs4XSA9IHsKLQl7MHhDMSwgMHgxMSwgMHgwMSwgMHgwOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QjEsIDB4MTEsIDB4MzQsIDB4MTcsIDB4N0YsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDExLCAweDQwLCAweEZGLCAweDdGLCAweDdGLCAweDdGLCAweDEwfSwKLQl7MHg5MSwgMHgxMSwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4MTEsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDExLCAweDE0LCAweDAxLCAweEUyLCAweDAyLCAweDgyLCAweDEwfSwKLQl7MHg5MSwgMHgxMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCitzdGF0aWMgY29uc3QgdTggaHY3MTMxcl9zZW5zb3JfaW5pdFtdWzhdID0geworCXsweGMxLCAweDExLCAweDAxLCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHgxMSwgMHgzNCwgMHgxNywgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4MTEsIDB4NDAsIDB4ZmYsIDB4N2YsIDB4N2YsIDB4N2YsIDB4MTB9LAorLyoJezB4OTEsIDB4MTEsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCAqLworCXsweGQxLCAweDExLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHgxMSwgMHgxNCwgMHgwMSwgMHhlMiwgMHgwMiwgMHg4MiwgMHgxMH0sCisvKgl7MHg5MSwgMHgxMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sICovCiAKLQl7MHhBMSwgMHgxMSwgMHgwMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QTEsIDB4MTEsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEMxLCAweDExLCAweDI1LCAweDAwLCAweDYxLCAweEE4LCAweDAwLCAweDEwfSwKLQl7MHhBMSwgMHgxMSwgMHgzMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QzEsIDB4MTEsIDB4MzEsIDB4MjAsIDB4MkUsIDB4MjAsIDB4MDAsIDB4MTB9LAotCXsweEMxLCAweDExLCAweDI1LCAweDAwLCAweEMzLCAweDUwLCAweDAwLCAweDEwfSwKLQl7MHhBMSwgMHgxMSwgMHgzMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIGdhaW4xNCAqLwotCXsweEMxLCAweDExLCAweDMxLCAweDEwLCAweDEwLCAweDEwLCAweDAwLCAweDEwfSwgLyogciBnIGIgMTAxYTEwICovCisJezB4YTEsIDB4MTEsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDExLCAweDAxLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhjMSwgMHgxMSwgMHgyNSwgMHgwMCwgMHg2MSwgMHhhOCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MzAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGMxLCAweDExLCAweDMxLCAweDIwLCAweDJlLCAweDIwLCAweDAwLCAweDEwfSwKKwl7MHhjMSwgMHgxMSwgMHgyNSwgMHgwMCwgMHhjMywgMHg1MCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MzAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBnYWluMTQgKi8KKwl7MHhjMSwgMHgxMSwgMHgzMSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgwMCwgMHgxMH0sIC8qIHIgZyBiIDEwMWExMCAqLwogCi0JezB4QTEsIDB4MTEsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEExLCAweDExLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhBMSwgMHgxMSwgMHgyMSwgMHhEMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QTEsIDB4MTEsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEExLCAweDExLCAweDIzLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxMSwgMHgwMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDExLCAweDIxLCAweEQwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxMSwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MjMsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCi0JezB4QTEsIDB4MTEsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEExLCAweDExLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhBMSwgMHgxMSwgMHgyMSwgMHhEMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QTEsIDB4MTEsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEExLCAweDExLCAweDIzLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxMSwgMHgwMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDExLCAweDIxLCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxMSwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MjMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IF9fdTggbWkwMzYwX3NlbnNvcl9pbml0W11bOF0gPSB7Ci0JezB4QjEsIDB4NUQsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEIxLCAweDVELCAweDBELCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhCMSwgMHg1RCwgMHgwRCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MTYsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDAzLCAweDAxLCAweEUyLCAweDAyLCAweDgyLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgwNSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg1MywgMHgxMH0sCi0JezB4QjEsIDB4NUQsIDB4MEQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDE2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MUEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDFDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhCMSwgMHg1RCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MjAsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MjYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDJGLCAweEY3LCAweEIwLCAweDAwLCAweDA0LCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTB9LAotCXsweEIxLCAweDVELCAweDNELCAweDA2LCAweDhGLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHg0MCwgMHgwMSwgMHhFMCwgMHgwMCwgMHhEMSwgMHgxMH0sCi0JezB4QjEsIDB4NUQsIDB4NDQsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDU4LCAweDAwLCAweDc4LCAweDAwLCAweDQzLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHg1QSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4NUMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDVFLCAweDAwLCAweDAwLCAweEEzLCAweDFELCAweDEwfSwKLQl7MHhCMSwgMHg1RCwgMHg2MiwgMHgwNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgxMH0sCitzdGF0aWMgY29uc3QgdTggbWkwMzYwX3NlbnNvcl9pbml0W11bOF0gPSB7CisJezB4YjEsIDB4NWQsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVkLCAweDBkLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1ZCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MTYsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDAzLCAweDAxLCAweGUyLCAweDAyLCAweDgyLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgwNSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg1MywgMHgxMH0sCisJezB4YjEsIDB4NWQsIDB4MGQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDE2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1ZCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MjAsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MjYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDJmLCAweGY3LCAweEIwLCAweDAwLCAweDA0LCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVkLCAweDNkLCAweDA2LCAweDhmLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHg0MCwgMHgwMSwgMHhlMCwgMHgwMCwgMHhkMSwgMHgxMH0sCisJezB4YjEsIDB4NWQsIDB4NDQsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDU4LCAweDAwLCAweDc4LCAweDAwLCAweDQzLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHg1YSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4NWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDVlLCAweDAwLCAweDAwLCAweGEzLCAweDFkLCAweDEwfSwKKwl7MHhiMSwgMHg1ZCwgMHg2MiwgMHgwNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgxMH0sCiAKLQl7MHhCMSwgMHg1RCwgMHgyMCwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QjEsIDB4NUQsIDB4MjAsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEIxLCAweDVELCAweDA5LCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgyQiwgMHgwMCwgMHhBMCwgMHgwMCwgMHhCMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MkQsIDB4MDAsIDB4QTAsIDB4MDAsIDB4QTAsIDB4MTB9LAorCXsweGIxLCAweDVkLCAweDIwLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1ZCwgMHgyMCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWQsIDB4MDksIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDJiLCAweDAwLCAweGEwLCAweDAwLCAweGIwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgyZCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgxMH0sCiAKLQl7MHhCMSwgMHg1RCwgMHgwQSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHNlbnNvciBjbGNrID8yICovCi0JezB4QjEsIDB4NUQsIDB4MDYsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEIxLCAweDVELCAweDA1LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhCMSwgMHg1RCwgMHgwOSwgMHgwMiwgMHgzNSwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIGV4cG9zdXJlIDIgKi8KKwl7MHhiMSwgMHg1ZCwgMHgwYSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHNlbnNvciBjbGNrID8yICovCisJezB4YjEsIDB4NWQsIDB4MDYsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVkLCAweDA1LCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1ZCwgMHgwOSwgMHgwMiwgMHgzNSwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIGV4cG9zdXJlIDIgKi8KIAotCXsweEQxLCAweDVELCAweDJCLCAweDAwLCAweEI5LCAweDAwLCAweEUzLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgyRCwgMHgwMCwgMHg1ZiwgMHgwMCwgMHhCOSwgMHgxMH0sIC8qIDQyICovCi0vKgl7MHhCMSwgMHg1RCwgMHgzNSwgMHgwMCwgMHg2NywgMHgwMCwgMHgwMCwgMHgxMH0sICogZ2FpbiBvcmlnICovCi0vKgl7MHhCMSwgMHg1RCwgMHgzNSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMH0sICogZ2FpbiAqLwotCXsweEIxLCAweDVELCAweDA3LCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDEwfSwgLyogdXBkYXRlICovCi0JezB4QjEsIDB4NUQsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBzZW5zb3Igb24gKi8KKwl7MHhkMSwgMHg1ZCwgMHgyYiwgMHgwMCwgMHhiOSwgMHgwMCwgMHhlMywgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MmQsIDB4MDAsIDB4NWYsIDB4MDAsIDB4YjksIDB4MTB9LCAvKiA0MiAqLworLyoJezB4YjEsIDB4NWQsIDB4MzUsIDB4MDAsIDB4NjcsIDB4MDAsIDB4MDAsIDB4MTB9LCAqIGdhaW4gb3JpZyAqLworLyoJezB4YjEsIDB4NWQsIDB4MzUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTB9LCAqIGdhaW4gKi8KKwl7MHhiMSwgMHg1ZCwgMHgwNywgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHVwZGF0ZSAqLworCXsweGIxLCAweDVkLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDEwfSwgLyogc2Vuc29yIG9uICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3QgX191OCBtbzQwMDBfc2Vuc29yX2luaXRbXVs4XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBtbzQwMDBfc2Vuc29yX2luaXRbXVs4XSA9IHsKIAl7MHhhMSwgMHgyMSwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJezB4YTEsIDB4MjEsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCXsweGExLCAweDIxLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKQEAgLTQ1NSw3ICs1MTgsNDkgQEAKIAl7MHhhMSwgMHgyMSwgMHgxMSwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJe30KIH07Ci1zdGF0aWMgX191OCBvbTY4MDJfc2Vuc29yX2luaXRbXVs4XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBtdDl2MTExX3NlbnNvcl9pbml0W11bOF0gPSB7CisJezB4YjEsIDB4NWMsIDB4MGQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiByZXNldD8gKi8KKwkvKiBkZWxheSAyMCBtcyAqLworCXsweGIxLCAweDVjLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1YywgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIElGUCBzZWxlY3QgKi8KKwl7MHhiMSwgMHg1YywgMHgwOCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIG91dHB1dCBmbXQgY3RybCAqLworCXsweGIxLCAweDVjLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgLyogb3AgbW9kZSBjdHJsICovCisJezB4YjEsIDB4NWMsIDB4MDIsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVjLCAweDAzLCAweDAxLCAweGUxLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1YywgMHgwNCwgMHgwMiwgMHg4MSwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWMsIDB4MDUsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVjLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDEwfSwgLyogc2Vuc29yIHNlbGVjdCAqLworCXsweGIxLCAweDVjLCAweDAyLCAweDAwLCAweDE2LCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1YywgMHgwMywgMHgwMSwgMHhlNiwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWMsIDB4MDQsIDB4MDIsIDB4ODYsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVjLCAweDA1LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1YywgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWMsIDB4MDgsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiByb3cgc3RhcnQgKi8KKwl7MHhiMSwgMHg1YywgMHgwZSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWMsIDB4MDIsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBjb2wgc3RhcnQgKi8KKwl7MHhiMSwgMHg1YywgMHgwMywgMHgwMSwgMHhlNywgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHdpbmRvdyBoZWlnaHQgKi8KKwl7MHhiMSwgMHg1YywgMHgwNCwgMHgwMiwgMHg4NywgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHdpbmRvdyB3aWR0aCAqLworCXsweGIxLCAweDVjLCAweDA3LCAweDMwLCAweDAyLCAweDAwLCAweDAwLCAweDEwfSwgLyogb3V0cHV0IGN0cmwgKi8KKwl7MHhiMSwgMHg1YywgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHNodXR0ZXIgZGVsYXkgKi8KKwl7MHhiMSwgMHg1YywgMHgxMiwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHpvb20gY29sIHN0YXJ0ICovCisJezB4YjEsIDB4NWMsIDB4MTMsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiB6b29tIHJvdyBzdGFydCAqLworCXsweGIxLCAweDVjLCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgLyogZGlnaXRhbCB6b29tICovCisJezB4YjEsIDB4NWMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiByZWFkIG1vZGUgKi8KKwl7MHhiMSwgMHg1YywgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJLyoqKioqKiovCisJezB4YjEsIDB4NWMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVjLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1YywgMHgwOSwgMHgwMSwgMHgyYywgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWMsIDB4MmIsIDB4MDAsIDB4MzMsIDB4MDAsIDB4YTAsIDB4MTB9LCAvKiBncmVlbjEgZ2FpbiAqLworCXsweGQxLCAweDVjLCAweDJkLCAweDAwLCAweGEwLCAweDAwLCAweDMzLCAweDEwfSwgLyogcmVkIGdhaW4gKi8KKwkvKioqKioqKi8KKwl7MHhiMSwgMHg1YywgMHgwNiwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHZlcnQgYmxhbmtpbmcgKi8KKwl7MHhiMSwgMHg1YywgMHgwNSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIGhvcml6IGJsYW5raW5nICovCisJezB4ZDEsIDB4NWMsIDB4MmMsIDB4MDAsIDB4YWQsIDB4MDAsIDB4YWQsIDB4MTB9LCAvKiBibHVlIGdhaW4gKi8KKwl7MHhiMSwgMHg1YywgMHgzNSwgMHgwMSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIGdsb2JhbCBnYWluICovCisJe30KK307CitzdGF0aWMgY29uc3QgdTggb202ODAyX3NlbnNvcl9pbml0W11bOF0gPSB7CiAJezB4YTAsIDB4MzQsIDB4OTAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCXsweGEwLCAweDM0LCAweDQ5LCAweDg1LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKIAl7MHhhMCwgMHgzNCwgMHg1YSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCkBAIC00ODksNyArNTk0LDcgQEAKIC8qCXsweGEwLCAweDM0LCAweDY5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgKi8KIAl7fQogfTsKLXN0YXRpYyBjb25zdCBfX3U4IG92NzYzMF9zZW5zb3JfaW5pdFtdWzhdID0geworc3RhdGljIGNvbnN0IHU4IG92NzYzMF9zZW5zb3JfaW5pdFtdWzhdID0gewogCXsweGExLCAweDIxLCAweDc2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKIAl7MHhhMSwgMHgyMSwgMHgxMiwgMHhjOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAvKiB3aW46IGRlbGF5IDIwbXMgKi8KQEAgLTU0Myw3ICs2NDgsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBvdjc2NDhfc2Vuc29yX2luaXRbXVs4XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBvdjc2NDhfc2Vuc29yX2luaXRbXVs4XSA9IHsKIAl7MHhhMSwgMHgyMSwgMHg3NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJezB4YTEsIDB4MjEsIDB4MTIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAkvKiByZXNldCAqLwogCXsweGExLCAweDIxLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKQEAgLTU3Miw3ICs2NzcsOCBAQAogCXsweGIxLCAweDIxLCAweDJkLCAweDg1LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKIC8qLi4uKi8KIC8qCXsweGExLCAweDIxLCAweDEyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgamZtIGRvbmUgKi8KLS8qCXsweGExLCAweDIxLCAweDc1LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgamZtIGRvbmUgKi8KKy8qCXsweGExLCAweDIxLCAweDc1LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgICAqIENPTU4KKwkJCQkJCQkgKiBzZXQgYnkgc2V0dmZsaXAgKi8KIAl7MHhhMSwgMHgyMSwgMHgxOSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJezB4YTEsIDB4MjEsIDB4MTAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogLyoJezB4YTEsIDB4MjEsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCBqZm0gZG9uZSAqLwpAQCAtNTg5LDcgKzY5NSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IG92NzY2MF9zZW5zb3JfaW5pdFtdWzhdID0geworc3RhdGljIGNvbnN0IHU4IG92NzY2MF9zZW5zb3JfaW5pdFtdWzhdID0gewogCXsweGExLCAweDIxLCAweDEyLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgLyogcmVzZXQgU0NDQiAqLwogLyoJCShkZWxheSAyMG1zKSAqLwogCXsweGExLCAweDIxLCAweDEyLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKQEAgLTY3OCwyOCArNzg0LDkyIEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IHF0YWJsZTRbXSA9IHsKLQkweDA2LCAweDA0LCAweDA0LCAweDA2LCAweDA0LCAweDA0LCAweDA2LCAweDA2LCAweDA2LCAweDA2LCAweDA4LCAweDA2LAotCTB4MDYsIDB4MDgsIDB4MEEsIDB4MTEsCi0JMHgwQSwgMHgwQSwgMHgwOCwgMHgwOCwgMHgwQSwgMHgxNSwgMHgwRiwgMHgwRiwgMHgwQywgMHgxMSwgMHgxOSwgMHgxNSwKLQkweDE5LCAweDE5LCAweDE3LCAweDE1LAotCTB4MTcsIDB4MTcsIDB4MUIsIDB4MUQsIDB4MjUsIDB4MjEsIDB4MUIsIDB4MUQsIDB4MjMsIDB4MUQsIDB4MTcsIDB4MTcsCi0JMHgyMSwgMHgyRSwgMHgyMSwgMHgyMywKLQkweDI3LCAweDI5LCAweDJDLCAweDJDLCAweDJDLCAweDE5LCAweDFGLCAweDMwLCAweDMyLCAweDJFLCAweDI5LCAweDMyLAotCTB4MjUsIDB4MjksIDB4MkMsIDB4MjksCi0JMHgwNiwgMHgwOCwgMHgwOCwgMHgwQSwgMHgwOCwgMHgwQSwgMHgxMywgMHgwQSwgMHgwQSwgMHgxMywgMHgyOSwgMHgxQiwKLQkweDE3LCAweDFCLCAweDI5LCAweDI5LAotCTB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksCi0JMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwKLQkweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LAotCTB4MjksIDB4MjksIDB4MjksIDB4MjksCi0JMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwKLQkweDI5LCAweDI5LCAweDI5LCAweDI5CitzdGF0aWMgY29uc3QgdTggc3A4MDcwOF9zZW5zb3JfaW5pdFtdWzhdID0geworCXsweGExLCAweDE4LCAweDA2LCAweGY5LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgwOSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDBkLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MGYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDEwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgxMSwgMHg0ZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MTIsIDB4NTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDE1LCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgxOCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MTksIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDFhLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgxYiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MWMsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDFkLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgxZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MjYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDI3LCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgyOCwgMHg1YSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MjksIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDJhLCAweDc4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgyYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MmMsIDB4ZjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDJkLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgyZSwgMHhkNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MzksIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDNhLCAweDY3LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgzYiwgMHg4NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4M2MsIDB4YTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDNkLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgzZSwgMHhiYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4M2YsIDB4YzgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDQwLCAweGQ0LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg0MSwgMHhkZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NDIsIDB4ZWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDQzLCAweGY1LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg0NSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NDYsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDQ3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg0OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NDksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDRkLCAweGFlLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg0ZSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NGYsIDB4NjYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDUwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg0NCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NGEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDUxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1MiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NTMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDU0LCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1NSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NTYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDU3LCAweGUwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1OCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NTksIDB4YWIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDVhLCAweGEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1YiwgMHg5OSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NWMsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDVlLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDYxLCAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg2MywgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NjQsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDY1LCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg2NiwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NjcsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDY4LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgyZiwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJLyoqKioqKioqLworCXsweGExLCAweDE4LCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDA0LCAweGE0LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgxNCwgMHgzZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NWQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDE4LCAweDExLCAweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7fQogfTsKIAogLyogcmVhZCA8bGVuPiBieXRlcyB0byBnc3BjYV9kZXYtPnVzYl9idWYgKi8KIHN0YXRpYyB2b2lkIHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJICBfX3UxNiB2YWx1ZSwgaW50IGxlbikKKwkJICB1MTYgdmFsdWUsIGludCBsZW4pCiB7CiAjaWZkZWYgR1NQQ0FfREVCVUcKIAlpZiAobGVuID4gVVNCX0JVRl9TWikgewpAQCAtNzE4LDEwICs4ODgsMTAgQEAKIH0KIAogc3RhdGljIHZvaWQgcmVnX3cxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJICAgX191MTYgdmFsdWUsCi0JCSAgIF9fdTggZGF0YSkKKwkJICAgdTE2IHZhbHVlLAorCQkgICB1OCBkYXRhKQogewotCVBERUJVRyhEX1VTQk8sICJyZWdfdzEgWyUwMnhdID0gJTAyeCIsIHZhbHVlLCBkYXRhKTsKKwlQREVCVUcoRF9VU0JPLCAicmVnX3cxIFslMDR4XSA9ICUwMngiLCB2YWx1ZSwgZGF0YSk7CiAJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gZGF0YTsKIAl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLApAQCAtNzMzLDExICs5MDMsMTEgQEAKIAkJCTUwMCk7CiB9CiBzdGF0aWMgdm9pZCByZWdfdyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQkgIF9fdTE2IHZhbHVlLAotCQkJICBjb25zdCBfX3U4ICpidWZmZXIsCisJCQkgIHUxNiB2YWx1ZSwKKwkJCSAgY29uc3QgdTggKmJ1ZmZlciwKIAkJCSAgaW50IGxlbikKIHsKLQlQREVCVUcoRF9VU0JPLCAicmVnX3cgWyUwMnhdID0gJTAyeCAlMDJ4IC4uIiwKKwlQREVCVUcoRF9VU0JPLCAicmVnX3cgWyUwNHhdID0gJTAyeCAlMDJ4IC4uIiwKIAkJdmFsdWUsIGJ1ZmZlclswXSwgYnVmZmVyWzFdKTsKICNpZmRlZiBHU1BDQV9ERUJVRwogCWlmIChsZW4gPiBVU0JfQlVGX1NaKSB7CkBAIC03NTYsNyArOTI2LDcgQEAKIH0KIAogLyogSTJDIHdyaXRlIDEgYnl0ZSAqLwotc3RhdGljIHZvaWQgaTJjX3cxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX191OCByZWcsIF9fdTggdmFsKQorc3RhdGljIHZvaWQgaTJjX3cxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggcmVnLCB1OCB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCkBAIC03ODEsNyArOTUxLDcgQEAKIAogLyogSTJDIHdyaXRlIDggYnl0ZXMgKi8KIHN0YXRpYyB2b2lkIGkyY193OChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCSAgIGNvbnN0IF9fdTggKmJ1ZmZlcikKKwkJICAgY29uc3QgdTggKmJ1ZmZlcikKIHsKIAltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBidWZmZXIsIDgpOwogCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKQEAgLTc5NSwxMCArOTY1LDEwIEBACiB9CiAKIC8qIHJlYWQgNSBieXRlcyBpbiBnc3BjYV9kZXYtPnVzYl9idWYgKi8KLXN0YXRpYyB2b2lkIGkyY19yNShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fdTggcmVnKQorc3RhdGljIHZvaWQgaTJjX3I1KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggcmVnKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlfX3U4IG1vZGVbOF07CisJdTggbW9kZVs4XTsKIAogCW1vZGVbMF0gPSAweDgxIHwgMHgxMDsKIAltb2RlWzFdID0gc2QtPmkyY19iYXNlOwpAQCAtODE3LDcgKzk4Nyw3IEBACiAJcmVnX3IoZ3NwY2FfZGV2LCAweDBhLCA1KTsKIH0KIAotc3RhdGljIGludCBwcm9iZXNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IGh2NzEzMXJfcHJvYmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCWkyY193MShnc3BjYV9kZXYsIDB4MDIsIDApOwkJCS8qIHNlbnNvciB3YWtldXAgKi8KIAltc2xlZXAoMTApOwpAQCAtODM5LDE2ICsxMDA5LDY2IEBACiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBpbnQgY29uZmlndXJlX2dwaW8oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJICBjb25zdCBfX3U4ICpzbjljMXh4KQorc3RhdGljIHZvaWQgbWkwMzYwX3Byb2JlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JY29uc3QgX191OCAqcmVnOWE7Ci0Jc3RhdGljIGNvbnN0IF9fdTggcmVnOWFfZGVmW10gPQorCWludCBpLCBqOworCXUxNiB2YWwgPSAwOworCXN0YXRpYyBjb25zdCB1OCBwcm9iZV90YltdWzRdWzhdID0geworCSAgICB7CQkJCQkvKiBtaTAzNjAgKi8KKwkJezB4YjAsIDB4NWQsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LAorCQl7MHg5MCwgMHg1ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJCXsweGEyLCAweDVkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwkJezB4YjAsIDB4NWQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9CisJICAgIH0sCisJICAgIHsJCQkJCS8qIG10OXYxMTEgKi8KKwkJezB4YjAsIDB4NWMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTB9LAorCQl7MHg5MCwgMHg1YywgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJCXsweGEyLCAweDVjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwkJe30KKwkgICAgfSwKKwl9OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJvYmVfdGIpOyBpKyspIHsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgMHg2Mik7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4MDgpOworCQlmb3IgKGogPSAwOyBqIDwgMzsgaisrKQorCQkJaTJjX3c4KGdzcGNhX2RldiwgcHJvYmVfdGJbaV1bal0pOworCQltc2xlZXAoMik7CisJCXJlZ19yKGdzcGNhX2RldiwgMHgwYSwgNSk7CisJCXZhbCA9IChnc3BjYV9kZXYtPnVzYl9idWZbM10gPDwgOCkgfCBnc3BjYV9kZXYtPnVzYl9idWZbNF07CisJCWlmIChwcm9iZV90YltpXVszXVswXSAhPSAwKQorCQkJaTJjX3c4KGdzcGNhX2RldiwgcHJvYmVfdGJbaV1bM10pOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDI5KTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgMHg0Mik7CisJCWlmICh2YWwgIT0gMHhmZmZmKQorCQkJYnJlYWs7CisJfQorCXN3aXRjaCAodmFsKSB7CisJY2FzZSAweDgyM2E6CisJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIG10OXYxMTEiKTsKKwkJc2QtPnNlbnNvciA9IFNFTlNPUl9NVDlWMTExOworCQlzZC0+aTJjX2Jhc2UgPSAweDVjOworCQlicmVhazsKKwljYXNlIDB4ODI0MzoKKwkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgbWkwMzYwIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVBERUJVRyhEX1BST0JFLCAiVW5rbm93biBzZW5zb3IgJTA0eCAtIGZvcmNlZCB0byBtaTAzNjAiLCB2YWwpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY29uZmlndXJlX2dwaW8oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJICBjb25zdCB1OCAqc245YzF4eCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJY29uc3QgdTggKnJlZzlhOworCXN0YXRpYyBjb25zdCB1OCByZWc5YV9kZWZbXSA9CiAJCXsweDA4LCAweDQwLCAweDIwLCAweDEwLCAweDAwLCAweDA0fTsKLQlzdGF0aWMgY29uc3QgX191OCByZWc5YV9zbjljMzI1W10gPQorCXN0YXRpYyBjb25zdCB1OCByZWc5YV9zbjljMzI1W10gPQogCQl7MHgwYSwgMHg0MCwgMHgzOCwgMHgzMCwgMHgwMCwgMHgyMH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggcmVnZDRbXSA9IHsweDYwLCAweDAwLCAweDAwfTsKKwlzdGF0aWMgY29uc3QgdTggcmVnZDRbXSA9IHsweDYwLCAweDAwLCAweDAwfTsKIAogCXJlZ193MShnc3BjYV9kZXYsIDB4ZjEsIDB4MDApOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIHNuOWMxeHhbMV0pOwpAQCAtODcyLDYgKzEwOTIsMTIgQEAKIAlyZWdfdyhnc3BjYV9kZXYsIDB4MDMsICZzbjljMXh4WzNdLCAweDBmKTsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX01UOVYxMTE6CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NjEpOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDE3LCAweDYxKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg2MCk7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NDApOworCQlicmVhazsKIAljYXNlIFNFTlNPUl9PTTY4MDI6CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4MDIsIDB4NzEpOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDQyKTsKQEAgLTkwMCwxMiArMTEyNiwyMCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJLyogZmFsbCB0aHJ1ICovCisJY2FzZSBTRU5TT1JfU1A4MDcwODoKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg2Myk7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MTcsIDB4MjApOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDYyKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg0Mik7CisJCW1kZWxheSgxMDApOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAyLCAweDYyKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg0Myk7CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4MTcsIDB4NjEpOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDQyKTsKIAkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX0hWNzEzMVIpIHsKLQkJCWlmIChwcm9iZXNlbnNvcihnc3BjYV9kZXYpIDwgMCkKKwkJCWlmIChodjcxMzFyX3Byb2JlKGdzcGNhX2RldikgPCAwKQogCQkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJCWJyZWFrOwpAQCAtOTE2LDcgKzExNTAsNyBAQAogc3RhdGljIHZvaWQgaHY3MTMxUl9Jbml0U2Vuc29yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpbnQgaSA9IDA7Ci0Jc3RhdGljIGNvbnN0IF9fdTggU2V0U2Vuc29yQ2xrW10gPQkvKiAweDA4IE1jbGsgKi8KKwlzdGF0aWMgY29uc3QgdTggU2V0U2Vuc29yQ2xrW10gPQkvKiAweDA4IE1jbGsgKi8KIAkJeyAweGExLCAweDExLCAweDAxLCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDEwIH07CiAKIAl3aGlsZSAoaHY3MTMxcl9zZW5zb3JfaW5pdFtpXVswXSkgewpAQCAtOTQ2LDYgKzExODAsMTkgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIG10OXYxMTFfSW5pdFNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IGkgPSAwOworCisJaTJjX3c4KGdzcGNhX2RldiwgbXQ5djExMV9zZW5zb3JfaW5pdFtpXSk7CisJaSsrOworCW1zbGVlcCgyMCk7CisJd2hpbGUgKG10OXYxMTFfc2Vuc29yX2luaXRbaV1bMF0pIHsKKwkJaTJjX3c4KGdzcGNhX2RldiwgbXQ5djExMV9zZW5zb3JfaW5pdFtpXSk7CisJCWkrKzsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIG9tNjgwMl9Jbml0U2Vuc29yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpbnQgaSA9IDA7CkBAIC0xMDEwLDYgKzEyNTcsMTkgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHNwODA3MDhfSW5pdFNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IGkgPSAwOworCisJaTJjX3c4KGdzcGNhX2Rldiwgc3A4MDcwOF9zZW5zb3JfaW5pdFtpXSk7CS8qIHJlc2V0IFNDQ0IgKi8KKwlpKys7CisJbXNsZWVwKDIwKTsKKwl3aGlsZSAoc3A4MDcwOF9zZW5zb3JfaW5pdFtpXVswXSkgeworCQlpMmNfdzgoZ3NwY2FfZGV2LCBzcDgwNzA4X3NlbnNvcl9pbml0W2ldKTsKKwkJaSsrOworCX0KK30KKwogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLwogc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQpAQCAtMTAxOCw3ICsxMjc4LDYgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKIAljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOwogCkBAIC0xMDI2LDE2ICsxMjg1LDIxIEBACiAJc2QtPnNlbnNvciA9IGlkLT5kcml2ZXJfaW5mbyA+PiA4OwogCXNkLT5pMmNfYmFzZSA9IGlkLT5kcml2ZXJfaW5mbzsKIAotCXNkLT5xaW5kZXggPSA0OwkJCS8qIHNldCB0aGUgcXVhbnRpemF0aW9uIHRhYmxlICovCiAJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKIAlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CiAJc2QtPmNvbG9ycyA9IENPTE9SX0RFRjsKIAlzZC0+Ymx1ZSA9IEJMVUVfQkFMQU5DRV9ERUY7CiAJc2QtPnJlZCA9IFJFRF9CQUxBTkNFX0RFRjsKKwlzZC0+Z2FtbWEgPSBHQU1NQV9ERUY7CiAJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOwogCXNkLT5hZ19jbnQgPSAtMTsKLQlzZC0+dmZsaXAgPSBWRkxJUF9ERUY7CisJaWYgKHNkLT5zZW5zb3IgIT0gU0VOU09SX09WNzYzMCkKKwkJc2QtPnZmbGlwID0gMDsKKwllbHNlCisJCXNkLT52ZmxpcCA9IDE7CiAJc2QtPmluZnJhcmVkID0gSU5GUkFSRURfREVGOworCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7CisJc2QtPmpwZWdxdWFsID0gODA7CiAKIAlnc3BjYV9kZXYtPmN0cmxfZGlzID0gY3RybF9kaXNbc2QtPnNlbnNvcl07CiAJcmV0dXJuIDA7CkBAIC0xMDQ1LDggKzEzMDksOCBAQAogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191OCByZWdHcGlvW10gPSB7IDB4MjksIDB4NzQgfTsKLQlfX3U4IHJlZ0YxOworCXU4IHJlZ0dwaW9bXSA9IHsgMHgyOSwgMHg3NCB9OworCXU4IHJlZ0YxOwogCiAJLyogc2V0dXAgYSBzZWxlY3RvciBieSBicmlkZ2UgKi8KIAlyZWdfdzEoZ3NwY2FfZGV2LCAweGYxLCAweDAxKTsKQEAgLTEwNjQsMTEgKzEzMjgsMTUgQEAKIAljYXNlIEJSSURHRV9TTjlDMTA1OgogCQlpZiAocmVnRjEgIT0gMHgxMSkKIAkJCXJldHVybiAtRU5PREVWOworCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfTUkwMzYwKQorCQkJbWkwMzYwX3Byb2JlKGdzcGNhX2Rldik7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgcmVnR3BpbywgMik7CiAJCWJyZWFrOwogCWNhc2UgQlJJREdFX1NOOUMxMjA6CiAJCWlmIChyZWdGMSAhPSAweDEyKQogCQkJcmV0dXJuIC1FTk9ERVY7CisJCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9NSTAzNjApCisJCQltaTAzNjBfcHJvYmUoZ3NwY2FfZGV2KTsKIAkJcmVnR3Bpb1sxXSA9IDB4NzA7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgcmVnR3BpbywgMik7CiAJCWJyZWFrOwpAQCAtMTA4NiwyMCArMTM1NCwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHNldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCQl1bnNpZ25lZCBpbnQgZXhwbykKK3N0YXRpYyB1MzIgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTMyIGV4cG8pCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXN0YXRpYyBjb25zdCBfX3U4IGRvaXRbXSA9CQkvKiB1cGRhdGUgc2Vuc29yICovCi0JCXsgMHhiMSwgMHg1ZCwgMHgwNywgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgxMCB9OwotCXN0YXRpYyBjb25zdCBfX3U4IHNlbnNvcmdvW10gPQkJLyogc2Vuc29yIG9uICovCi0JCXsgMHhiMSwgMHg1ZCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxMCB9OwotCXN0YXRpYyBjb25zdCBfX3U4IGdhaW5Nb1tdID0KLQkJeyAweGExLCAweDIxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDFkIH07CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9IVjcxMzFSOiB7Ci0JCV9fdTggRXhwb2RvaXRbXSA9CisJCXU4IEV4cG9kb2l0W10gPQogCQkJeyAweGMxLCAweDExLCAweDI1LCAweDA3LCAweDI3LCAweGMwLCAweDAwLCAweDE2IH07CiAKIAkJRXhwb2RvaXRbM10gPSBleHBvID4+IDE2OwpAQCAtMTEwOSw4ICsxMzcxLDEyIEBACiAJCWJyZWFrOwogCSAgICB9CiAJY2FzZSBTRU5TT1JfTUkwMzYwOiB7Ci0JCV9fdTggZXhwb01pW10gPQkgLyogZXhwb3N1cmUgMHgwNjM1IC0+IDQgZnAvcyAweDEwICovCisJCXU4IGV4cG9NaVtdID0JCS8qIGV4cG9zdXJlIDB4MDYzNSAtPiA0IGZwL3MgMHgxMCAqLwogCQkJeyAweGIxLCAweDVkLCAweDA5LCAweDA2LCAweDM1LCAweDAwLCAweDAwLCAweDE2IH07CisJCXN0YXRpYyBjb25zdCB1OCBkb2l0W10gPQkJLyogdXBkYXRlIHNlbnNvciAqLworCQkJeyAweGIxLCAweDVkLCAweDA3LCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDEwIH07CisJCXN0YXRpYyBjb25zdCB1OCBzZW5zb3Jnb1tdID0JCS8qIHNlbnNvciBvbiAqLworCQkJeyAweGIxLCAweDVkLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDEwIH07CiAKIAkJaWYgKGV4cG8gPiAweDA2MzUpCiAJCQlleHBvID0gMHgwNjM1OwpAQCAtMTEyNCwxMCArMTM5MCwxMiBAQAogCQlicmVhazsKIAkgICAgfQogCWNhc2UgU0VOU09SX01PNDAwMDogewotCQlfX3U4IGV4cG9Nb2ZbXSA9CisJCXU4IGV4cG9Nb2ZbXSA9CiAJCQl7IDB4YTEsIDB4MjEsIDB4MGYsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAgfTsKLQkJX191OCBleHBvTW8xMFtdID0KKwkJdTggZXhwb01vMTBbXSA9CiAJCQl7IDB4YTEsIDB4MjEsIDB4MTAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAgfTsKKwkJc3RhdGljIGNvbnN0IHU4IGdhaW5Nb1tdID0KKwkJCXsgMHhhMSwgMHgyMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCB9OwogCiAJCWlmIChleHBvID4gMHgxZmZmKQogCQkJZXhwbyA9IDB4MWZmZjsKQEAgLTExMzksMTQgKzE0MDcsMjcgQEAKIAkJCQl8ICgoZXhwbyAmIDB4MDAwMykgPDwgNCk7CiAJCWkyY193OChnc3BjYV9kZXYsIGV4cG9NbzEwKTsKIAkJaTJjX3c4KGdzcGNhX2RldiwgZ2Fpbk1vKTsKLQkJUERFQlVHKERfQ09ORiwgInNldCBleHBvc3VyZSAlZCIsCisJCVBERUJVRyhEX0ZSQU0sICJzZXQgZXhwb3N1cmUgJWQiLAogCQkJKChleHBvTW8xMFszXSAmIDB4MDcpIDw8IDEwKQogCQkJfCAoZXhwb01vZlszXSA8PCAyKQogCQkJfCAoKGV4cG9NbzEwWzNdICYgMHgzMCkgPj4gNCkpOwogCQlicmVhazsKIAkgICAgfQorCWNhc2UgU0VOU09SX01UOVYxMTE6IHsKKwkJdTggZXhwb19jMVtdID0KKwkJCXsgMHhiMSwgMHg1YywgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCB9OworCisJCWlmIChleHBvID4gMHgwMjgwKQorCQkJZXhwbyA9IDB4MDI4MDsKKwkJZWxzZSBpZiAoZXhwbyA8IDB4MDA0MCkKKwkJCWV4cG8gPSAweDAwNDA7CisJCWV4cG9fYzFbM10gPSBleHBvID4+IDg7CisJCWV4cG9fYzFbNF0gPSBleHBvOworCQlpMmNfdzgoZ3NwY2FfZGV2LCBleHBvX2MxKTsKKwkJYnJlYWs7CisJICAgIH0KIAljYXNlIFNFTlNPUl9PTTY4MDI6IHsKLQkJX191OCBnYWluT21bXSA9CisJCXU4IGdhaW5PbVtdID0KIAkJCXsgMHhhMCwgMHgzNCwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCB9OwogCiAJCWlmIChleHBvID4gMHgwM2ZmKQpAQCAtMTE1Niw3ICsxNDM3LDcgQEAKIAkJZ2Fpbk9tWzNdID0gZXhwbyA+PiAyOwogCQlpMmNfdzgoZ3NwY2FfZGV2LCBnYWluT20pOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk2LCAoZXhwbyA+PiA1KSAmIDB4MWYpOwotCQlQREVCVUcoRF9DT05GLCAic2V0IGV4cG9zdXJlICVkIiwgZ2Fpbk9tWzNdKTsKKwkJUERFQlVHKERfRlJBTSwgInNldCBleHBvc3VyZSAlZCIsIGdhaW5PbVszXSk7CiAJCWJyZWFrOwogCSAgICB9CiAJfQpAQCAtMTE2Nyw3ICsxNDQ4LDcgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJdW5zaWduZWQgaW50IGV4cG87Ci0JX191OCBrMjsKKwl1OCBrMjsKIAogCWsyID0gKChpbnQpIHNkLT5icmlnaHRuZXNzIC0gMHg4MDAwKSA+PiAxMDsKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKQEAgLTExODQsNiArMTQ2NSwxMCBAQAogCQlleHBvID0gc2QtPmJyaWdodG5lc3MgPj4gNDsKIAkJc2QtPmV4cG9zdXJlID0gc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2LCBleHBvKTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfTVQ5VjExMToKKwkJZXhwbyA9IHNkLT5icmlnaHRuZXNzID4+IDg7CisJCXNkLT5leHBvc3VyZSA9IHNldGV4cG9zdXJlKGdzcGNhX2RldiwgZXhwbyk7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX09NNjgwMjoKIAkJZXhwbyA9IHNkLT5icmlnaHRuZXNzID4+IDY7CiAJCXNkLT5leHBvc3VyZSA9IHNldGV4cG9zdXJlKGdzcGNhX2RldiwgZXhwbyk7CkBAIC0xMTkxLDE0ICsxNDc2LDE1IEBACiAJCWJyZWFrOwogCX0KIAotCXJlZ193MShnc3BjYV9kZXYsIDB4OTYsIGsyKTsJCS8qIGNvbG9yIG1hdHJpeCBZIG9mZnNldCAqLworCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9NVDlWMTExKQorCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk2LCBrMik7CS8qIGNvbG9yIG1hdHJpeCBZIG9mZnNldCAqLwogfQogCiBzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCV9fdTggazI7Ci0JX191OCBjb250cmFzdFs2XTsKKwl1OCBrMjsKKwl1OCBjb250cmFzdFs2XTsKIAogCWsyID0gc2QtPmNvbnRyYXN0ICogMHgzMCAvIChDT05UUkFTVF9NQVggKyAxKSArIDB4MTA7CS8qIDEwLi40MCAqLwogCWNvbnRyYXN0WzBdID0gKGsyICsgMSkgLyAyOwkJLyogcmVkICovCkBAIC0xMjE0LDggKzE1MDAsOCBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgaSwgdjsKLQlfX3U4IHJlZzhhWzEyXTsJCQkvKiBVICYgViBnYWlucyAqLwotCXN0YXRpYyBfX3MxNiB1dls2XSA9IHsJCS8qIHNhbWUgYXMgcmVnODQgaW4gc2lnbmVkIGRlY2ltYWwgKi8KKwl1OCByZWc4YVsxMl07CQkJLyogVSAmIFYgZ2FpbnMgKi8KKwlzdGF0aWMgczE2IHV2WzZdID0gewkJLyogc2FtZSBhcyByZWc4NCBpbiBzaWduZWQgZGVjaW1hbCAqLwogCQktMjQsIC0zOCwgNjQsCQkvKiBVUiBVRyBVQiAqLwogCQkgNjIsIC01MSwgLTkJCS8qIFZSIFZHIFZCICovCiAJfTsKQEAgLTEyMzYsMjIgKzE1MjIsNzUgQEAKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDA2LCBzZC0+Ymx1ZSk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldGdhbW1hKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IGk7CisJdTggZ2FtbWFbMTddOworCWNvbnN0IHU4ICpnYW1tYV9iYXNlOworCXN0YXRpYyBjb25zdCB1OCBkZWx0YVsxN10gPSB7CisJCTB4MDAsIDB4MTQsIDB4MWMsIDB4MWMsIDB4MWMsIDB4MWMsIDB4MWIsIDB4MWEsCisJCTB4MTgsIDB4MTMsIDB4MTAsIDB4MGUsIDB4MDgsIDB4MDcsIDB4MDQsIDB4MDIsIDB4MDAKKwl9OworCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfSFY3MTMxUjoKKwljYXNlIFNFTlNPUl9NVDlWMTExOgorCQlnYW1tYV9iYXNlID0gZ2FtbWFfc3BlY18xOworCQlicmVhazsKKwljYXNlIFNFTlNPUl9TUDgwNzA4OgorCQlnYW1tYV9iYXNlID0gZ2FtbWFfc3BlY18yOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnYW1tYV9iYXNlID0gZ2FtbWFfZGVmOworCQlicmVhazsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIGdhbW1hOyBpKyspCisJCWdhbW1hW2ldID0gZ2FtbWFfYmFzZVtpXQorCQkJKyBkZWx0YVtpXSAqIChzZC0+Z2FtbWEgLSBHQU1NQV9ERUYpIC8gMzI7CisJcmVnX3coZ3NwY2FfZGV2LCAweDIwLCBnYW1tYSwgc2l6ZW9mIGdhbW1hKTsKK30KKwogc3RhdGljIHZvaWQgc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgQVVUT0dBSU5fSURYKSkKIAkJcmV0dXJuOworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX09WNzYzMDoKKwljYXNlIFNFTlNPUl9PVjc2NDg6IHsKKwkJdTggY29tYjsKKworCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfT1Y3NjMwKQorCQkJY29tYiA9IDB4YzA7CisJCWVsc2UKKwkJCWNvbWIgPSAweGEwOworCQlpZiAoc2QtPmF1dG9nYWluKQorCQkJY29tYiB8PSAweDAyOworCQlpMmNfdzEoJnNkLT5nc3BjYV9kZXYsIDB4MTMsIGNvbWIpOworCQlyZXR1cm47CisJICAgIH0KKwl9CiAJaWYgKHNkLT5hdXRvZ2FpbikKIAkJc2QtPmFnX2NudCA9IEFHX0NOVF9TVEFSVDsKIAllbHNlCiAJCXNkLT5hZ19jbnQgPSAtMTsKIH0KIAorLyogb3Y3NjMwL292NzY0OCBvbmx5ICovCiBzdGF0aWMgdm9pZCBzZXR2ZmxpcChzdHJ1Y3Qgc2QgKnNkKQogewotCWkyY193MSgmc2QtPmdzcGNhX2RldiwgMHg3NSwJCQkvKiBDT01OICovCi0JCXNkLT52ZmxpcCA/IDB4ODIgOiAweDAyKTsKKwl1OCBjb21uOworCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzYzMCkKKwkJY29tbiA9IDB4MDI7CisJZWxzZQorCQljb21uID0gMHgwNjsKKwlpZiAoc2QtPnZmbGlwKQorCQljb21uIHw9IDB4ODA7CisJaTJjX3cxKCZzZC0+Z3NwY2FfZGV2LCAweDc1LCBjb21uKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0aW5mcmFyZWQoc3RydWN0IHNkICpzZCkKQEAgLTEyNjIsMjAgKzE2MDEsNjMgQEAKIAkJc2QtPmluZnJhcmVkID8gMHg2NiA6IDB4NjQpOwogfQogCitzdGF0aWMgdm9pZCBzZXRqcGVncXVhbChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBpLCBzYzsKKworCWlmIChzZC0+anBlZ3F1YWwgPCA1MCkKKwkJc2MgPSA1MDAwIC8gc2QtPmpwZWdxdWFsOworCWVsc2UKKwkJc2MgPSAyMDAgLSBzZC0+anBlZ3F1YWwgKiAyOworI2lmIFVTQl9CVUZfU1ogPCA2NAorI2Vycm9yICJObyByb29tIGVub3VnaCBpbiB1c2JfYnVmIGZvciBxdWFudGl6YXRpb24gdGFibGUiCisjZW5kaWYKKwlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKKwkJZ3NwY2FfZGV2LT51c2JfYnVmW2ldID0KKwkJCShqcGVnX2hlYWRbSlBFR19RVDBfT0ZGU0VUICsgaV0gKiBzYyArIDUwKSAvIDEwMDsKKwl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJMHgwOCwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCTB4MDEwMCwgMCwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwgNjQsCisJCQk1MDApOworCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQorCQlnc3BjYV9kZXYtPnVzYl9idWZbaV0gPQorCQkJKGpwZWdfaGVhZFtKUEVHX1FUMV9PRkZTRVQgKyBpXSAqIHNjICsgNTApIC8gMTAwOworCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkweDA4LAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJMHgwMTQwLCAwLAorCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCA2NCwKKwkJCTUwMCk7CisKKwlzZC0+cmVnMTggXj0gMHg0MDsKKwlyZWdfdzEoZ3NwY2FfZGV2LCAweDE4LCBzZC0+cmVnMTgpOworfQorCiAvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCiBzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGk7Ci0JX191OCByZWcxLCByZWcxNywgcmVnMTg7Ci0JY29uc3QgX191OCAqc245YzF4eDsKKwl1OCByZWcxLCByZWcxNzsKKwljb25zdCB1OCAqc245YzF4eDsKIAlpbnQgbW9kZTsKLQlzdGF0aWMgY29uc3QgX191OCBDMFtdID0geyAweDJkLCAweDJkLCAweDNhLCAweDA1LCAweDA0LCAweDNmIH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggQ0FbXSA9IHsgMHgyOCwgMHhkOCwgMHgxNCwgMHhlYyB9OwotCXN0YXRpYyBjb25zdCBfX3U4IENFW10gPSB7IDB4MzIsIDB4ZGQsIDB4MmQsIDB4ZGQgfTsJLyogTUkwMzYwICovCi0Jc3RhdGljIGNvbnN0IF9fdTggQ0Vfb3Y3Nnh4W10gPQorCXN0YXRpYyBjb25zdCB1OCBDMFtdID0geyAweDJkLCAweDJkLCAweDNhLCAweDA1LCAweDA0LCAweDNmIH07CisJc3RhdGljIGNvbnN0IHU4IENBW10gPSB7IDB4MjgsIDB4ZDgsIDB4MTQsIDB4ZWMgfTsKKwlzdGF0aWMgY29uc3QgdTggQ0VbXSA9IHsgMHgzMiwgMHhkZCwgMHgyZCwgMHhkZCB9OwkvKiBNSTAzNjAgKi8KKwlzdGF0aWMgY29uc3QgdTggQ0Vfb3Y3Nnh4W10gPQogCQkJCXsgMHgzMiwgMHhkZCwgMHgzMiwgMHhkZCB9OwogCisJLyogY3JlYXRlIHRoZSBKUEVHIGhlYWRlciAqLworCXNkLT5qcGVnX2hkciA9IGttYWxsb2MoSlBFR19IRFJfU1osIEdGUF9LRVJORUwpOworCWpwZWdfZGVmaW5lKHNkLT5qcGVnX2hkciwgZ3NwY2FfZGV2LT5oZWlnaHQsIGdzcGNhX2Rldi0+d2lkdGgsCisJCQkweDIxKTsJCS8qIEpQRUcgNDIyICovCisJanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKKwogCXNuOWMxeHggPSBzbl90YlsoaW50KSBzZC0+c2Vuc29yXTsKIAljb25maWd1cmVfZ3Bpbyhnc3BjYV9kZXYsIHNuOWMxeHgpOwogCkBAIC0xMjkyLDYgKzE2NzQsOSBAQAogCXJlZ193MShnc3BjYV9kZXYsIDB4YzksIDB4M2MpOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MTgsIHNuOWMxeHhbMHgxOF0pOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX01UOVYxMTE6CisJCXJlZzE3ID0gMHhlMDsKKwkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT1Y3NjMwOgogCQlyZWcxNyA9IDB4ZTI7CiAJCWJyZWFrOwpAQCAtMTMxNSwxNCArMTcwMCwyNCBAQAogCXJlZ193MShnc3BjYV9kZXYsIDB4MDcsIHNuOWMxeHhbN10pOwkvKiBncmVlbiAqLwogCXJlZ193MShnc3BjYV9kZXYsIDB4MDYsIHNuOWMxeHhbNl0pOwkvKiBibHVlICovCiAJcmVnX3cxKGdzcGNhX2RldiwgMHgxNCwgc245YzF4eFsweDE0XSk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDIwLCBnYW1tYV9kZWYsIHNpemVvZiBnYW1tYV9kZWYpOworCisJc2V0Z2FtbWEoZ3NwY2FfZGV2KTsKKwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCiAJCXJlZ193KGdzcGNhX2RldiwgMHg4NCwgcmVnODQsIHNpemVvZiByZWc4NCk7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfTVQ5VjExMToKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwNyk7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4NTkpOworCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjc2NDg6CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4OWEsIDB4MGEpOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk5LCAweDYwKTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfU1A4MDcwODoKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwNSk7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4NTkpOworCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjc2NjA6CiAJCWlmIChzZC0+YnJpZGdlID09IEJSSURHRV9TTjlDMTIwKSB7CiAJCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDlhLCAweDA1KTsKQEAgLTEzNTgsNiArMTc1MywxNSBAQAogLyoJCQlyZWcxID0gMHgwNjsJICogNjQwIGNsayAyNE16IChkb25lKSAqLwogCQl9CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX01UOVYxMTE6CisJCW10OXYxMTFfSW5pdFNlbnNvcihnc3BjYV9kZXYpOworCQlpZiAobW9kZSkgeworCQkJcmVnMSA9IDB4MDQ7CS8qIDMyMCBjbGsgNDhNaHogKi8KKwkJfSBlbHNlIHsKKy8qCQkJcmVnMSA9IDB4MDY7CSAqIDY0MCBjbGsgMjRNeiAoZG9uZSkgKi8KKwkJCXJlZzE3ID0gMHhjMjsKKwkJfQorCQlicmVhazsKIAljYXNlIFNFTlNPUl9PTTY4MDI6CiAJCW9tNjgwMl9Jbml0U2Vuc29yKGdzcGNhX2Rldik7CiAJCXJlZzE3ID0gMHg2NDsJCS8qIDY0MCBNQ0tTSVpFICovCkBAIC0xMzczLDggKzE3NzcsNyBAQAogCQlyZWcxNyA9IDB4MjE7CiAvKgkJcmVnMSA9IDB4NDI7CQkgKiA0MiAtIDQ2PyAqLwogCQlicmVhazsKLQlkZWZhdWx0OgotLyoJY2FzZSBTRU5TT1JfT1Y3NjYwOiAqLworCWNhc2UgU0VOU09SX09WNzY2MDoKIAkJb3Y3NjYwX0luaXRTZW5zb3IoZ3NwY2FfZGV2KTsKIAkJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1NOOUMxMjApIHsKIAkJCWlmIChtb2RlKSB7CQkvKiAzMjB4MjQwIC0gMTYweDEyMCAqLwpAQCAtMTM4Nyw2ICsxNzkwLDE2IEBACiAJCQkJCSAqIGludmVyc2UgcG93ZXIgZG93biAqLwogCQl9CiAJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNFTlNPUl9TUDgwNzA4OiAqLworCQlzcDgwNzA4X0luaXRTZW5zb3IoZ3NwY2FfZGV2KTsKKwkJaWYgKG1vZGUpIHsKKy8qPz8JCQlyZWcxID0gMHgwNDsJICogMzIwIGNsayA0OE1oeiAqLworCQl9IGVsc2UgeworCQkJcmVnMSA9IDB4NDY7CSAvKiA2NDAgY2xrIDQ4TXogKi8KKwkJCXJlZzE3ID0gMHhhMjsKKwkJfQorCQlicmVhazsKIAl9CiAJcmVnX3coZ3NwY2FfZGV2LCAweGMwLCBDMCwgNik7CiAJcmVnX3coZ3NwY2FfZGV2LCAweGNhLCBDQSwgNCk7CkBAIC0xNDAzLDIwICsxODE2LDEzIEBACiAJfQogCiAJLyogaGVyZSBjaGFuZ2Ugc2l6ZSBtb2RlIDAgLT4gVkdBOyAxIC0+IENJRiAqLwotCXJlZzE4ID0gc245YzF4eFsweDE4XSB8IChtb2RlIDw8IDQpOwotCXJlZ193MShnc3BjYV9kZXYsIDB4MTgsIHJlZzE4IHwgMHg0MCk7Ci0KLQlyZWdfdyhnc3BjYV9kZXYsIDB4MTAwLCBxdGFibGU0LCAweDQwKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MTQwLCBxdGFibGU0ICsgMHg0MCwgMHg0MCk7Ci0KLQlyZWdfdzEoZ3NwY2FfZGV2LCAweDE4LCByZWcxOCk7CisJc2QtPnJlZzE4ID0gc245YzF4eFsweDE4XSB8IChtb2RlIDw8IDQpIHwgMHg0MDsKKwlyZWdfdzEoZ3NwY2FfZGV2LCAweDE4LCBzZC0+cmVnMTgpOworCXNldGpwZWdxdWFsKGdzcGNhX2Rldik7CiAKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDE3LCByZWcxNyk7CiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgcmVnMSk7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfTUkwMzYwOgotCQlzZXRpbmZyYXJlZChzZCk7Ci0JCWJyZWFrOwogCWNhc2UgU0VOU09SX09WNzYzMDoKIAkJc2V0dmZsaXAoc2QpOwogCQlicmVhazsKQEAgLTE0MzAsMTQgKzE4MzYsMTQgQEAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0Jc3RhdGljIGNvbnN0IF9fdTggc3RvcGh2NzEzMVtdID0KKwlzdGF0aWMgY29uc3QgdTggc3RvcGh2NzEzMVtdID0KIAkJeyAweGExLCAweDExLCAweDAyLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwIH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggc3RvcG1pMDM2MFtdID0KKwlzdGF0aWMgY29uc3QgdTggc3RvcG1pMDM2MFtdID0KIAkJeyAweGIxLCAweDVkLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwIH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggc3RvcG92NzY0OFtdID0KKwlzdGF0aWMgY29uc3QgdTggc3RvcG92NzY0OFtdID0KIAkJeyAweGExLCAweDIxLCAweDc2LCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDEwIH07Ci0JX191OCBkYXRhOwotCWNvbnN0IF9fdTggKnNuOWMxeHg7CisJdTggZGF0YTsKKwljb25zdCB1OCAqc245YzF4eDsKIAogCWRhdGEgPSAweDBiOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewpAQCAtMTQ1Miw2ICsxODU4LDcgQEAKIAljYXNlIFNFTlNPUl9PVjc2NDg6CiAJCWkyY193OChnc3BjYV9kZXYsIHN0b3Bvdjc2NDgpOwogCQkvKiBmYWxsIHRocnUgKi8KKwljYXNlIFNFTlNPUl9NVDlWMTExOgogCWNhc2UgU0VOU09SX09WNzYzMDoKIAkJZGF0YSA9IDB4Mjk7CiAJCWJyZWFrOwpAQCAtMTQ2OCwxMyArMTg3NSwyMCBAQAogCXJlZ193MShnc3BjYV9kZXYsIDB4ZjEsIDB4MDApOwogfQogCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJa2ZyZWUoc2QtPmpwZWdfaGRyKTsKK30KKwogc3RhdGljIHZvaWQgZG9fYXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgZGVsdGE7CiAJaW50IGV4cG90aW1lczsKLQlfX3U4IGx1bWFfbWVhbiA9IDEzMDsKLQlfX3U4IGx1bWFfZGVsdGEgPSAyMDsKKwl1OCBsdW1hX21lYW4gPSAxMzA7CisJdTggbHVtYV9kZWx0YSA9IDIwOwogCiAJLyogVGhhbmtzIFMuLCB3aXRob3V0IHlvdXIgYWR2aWNlLCBhdXRvYnJpZ2h0IHNob3VsZCBub3Qgd29yayA6KSAqLwogCWlmIChzZC0+YWdfY250IDwgMCkKQEAgLTE0OTksNiArMTkxMyw3IEBACiAJCWRlZmF1bHQ6CiAvKgkJY2FzZSBTRU5TT1JfTU80MDAwOiAqLwogLyoJCWNhc2UgU0VOU09SX01JMDM2MDogKi8KKy8qCQljYXNlIFNFTlNPUl9NVDlWMTExOiAqLwogLyoJCWNhc2UgU0VOU09SX09NNjgwMjogKi8KIAkJCWV4cG90aW1lcyA9IHNkLT5leHBvc3VyZTsKIAkJCWV4cG90aW1lcyArPSAobHVtYV9tZWFuIC0gZGVsdGEpID4+IDY7CkBAIC0xNTE2LDcgKzE5MzEsNyBAQAogLyogVGhpcyBmdW5jdGlvbiBpcyBydW4gYXQgaW50ZXJydXB0IGxldmVsLiAqLwogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCi0JCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQl1OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLwogCQkJaW50IGxlbikJCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLwogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTE1NTAsNyArMTk2NSw4IEBACiAJaWYgKGdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9PSBMQVNUX1BBQ0tFVCkgewogCiAJCS8qIHB1dCB0aGUgSlBFRyA0MjIgaGVhZGVyICovCi0JCWpwZWdfcHV0X2hlYWRlcihnc3BjYV9kZXYsIGZyYW1lLCBzZC0+cWluZGV4LCAweDIxKTsKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwKKwkJCXNkLT5qcGVnX2hkciwgSlBFR19IRFJfU1opOwogCX0KIAlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLCBkYXRhLCBsZW4pOwogfQpAQCAtMTY0NSw2ICsyMDYxLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmdhbW1hID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Z2FtbWEoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5nYW1tYTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0xNjk5LDYgKzIxMzMsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzZF9zZXRfamNvbXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqY29tcCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoamNvbXAtPnF1YWxpdHkgPCBRVUFMSVRZX01JTikKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01JTjsKKwllbHNlIGlmIChqY29tcC0+cXVhbGl0eSA+IFFVQUxJVFlfTUFYKQorCQlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfTUFYOworCWVsc2UKKwkJc2QtPnF1YWxpdHkgPSBqY29tcC0+cXVhbGl0eTsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJbWVtc2V0KGpjb21wLCAwLCBzaXplb2YgKmpjb21wKTsKKwlqY29tcC0+cXVhbGl0eSA9IHNkLT5xdWFsaXR5OworCWpjb21wLT5qcGVnX21hcmtlcnMgPSBWNEwyX0pQRUdfTUFSS0VSX0RIVAorCQkJfCBWNEwyX0pQRUdfTUFSS0VSX0RRVDsKKwlyZXR1cm4gMDsKK30KKwogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKQEAgLTE3MDgsOCArMjE3MCwxMSBAQAogCS5pbml0ID0gc2RfaW5pdCwKIAkuc3RhcnQgPSBzZF9zdGFydCwKIAkuc3RvcE4gPSBzZF9zdG9wTiwKKwkuc3RvcDAgPSBzZF9zdG9wMCwKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKIAkuZHFfY2FsbGJhY2sgPSBkb19hdXRvZ2FpbiwKKwkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAorCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KQEAgLTE3MjQsOSArMjE4OSw3IEBACiAjZW5kaWYKIAl7VVNCX0RFVklDRSgweDA0NWUsIDB4MDBmNSksIEJTSShTTjlDMTA1LCBPVjc2NjAsIDB4MjEpfSwKIAl7VVNCX0RFVklDRSgweDA0NWUsIDB4MDBmNyksIEJTSShTTjlDMTA1LCBPVjc2NjAsIDB4MjEpfSwKLSNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDIgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyX01PRFVMRQogCXtVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzI3KSwgQlNJKFNOOUMxMDUsIE1JMDM2MCwgMHg1ZCl9LAotI2VuZGlmCiAJe1VTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMjgpLCBCU0koU045QzEwNSwgTUkwMzYwLCAweDVkKX0sCiAJe1VTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMzApLCBCU0koU045QzEwNSwgTUkwMzYwLCAweDVkKX0sCiAJe1VTQl9ERVZJQ0UoMHgwNmY4LCAweDMwMDQpLCBCU0koU045QzEwNSwgT1Y3NjYwLCAweDIxKX0sCkBAIC0xNzY0LDEwICsyMjI3LDEwIEBACiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxM2EpLCBCU0koU045QzEyMCwgT1Y3NjQ4LCAweDIxKX0sCiAjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyICYmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMl9NT0RVTEUKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEzYiksIEJTSShTTjlDMTIwLCBPVjc2NjAsIDB4MjEpfSwKKyNlbmRpZgogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNjKSwgQlNJKFNOOUMxMjAsIEhWNzEzMVIsIDB4MTEpfSwKIC8qCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNlKSwgQlNJKFNOOUMxMjAsIE9WNzYzMCwgMHg/Pyl9LCAqLwotI2VuZGlmCi0Je1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxNDMpLCBCU0koU045QzEyMCwgTUkwMzYwLCAweDVkKX0sCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxNDMpLCBCU0koU045QzEyMCwgU1A4MDcwOCwgMHgxOCl9LAogCXt9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CkBAIC0xNzk0LDggKzIyNTcsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlpbmZvKCJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCmluZGV4IDk0MmYwNGMuLjZmMzhmYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCkBAIC0zOCw4ICszOCwxMSBAQAogCXVuc2lnbmVkIGNoYXIgYnJpZ2h0bmVzczsKIAl1bnNpZ25lZCBjaGFyIGNvbnRyYXN0OwogCXVuc2lnbmVkIGNoYXIgY29sb3JzOworCXU4IHF1YWxpdHk7CisjZGVmaW5lIFFVQUxJVFlfTUlOIDcwCisjZGVmaW5lIFFVQUxJVFlfTUFYIDk1CisjZGVmaW5lIFFVQUxJVFlfREVGIDg1CiAKLQljaGFyIHFpbmRleDsKIAljaGFyIHN1YnR5cGU7CiAjZGVmaW5lIEFnZmFDbDIwIDAKICNkZWZpbmUgQWlwdGVrUG9ja2V0RFYgMQpAQCAtNTYsNiArNTksOCBAQAogI2RlZmluZSBPcHRpbWVkaWEgMTIKICNkZWZpbmUgUGFsbVBpeERDODUgMTMKICNkZWZpbmUgVG9wdHJvSW5kdXMgMTQKKworCXU4ICpqcGVnX2hkcjsKIH07CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KQEAgLTYyOSw3ICs2MzQsNiBAQAogCXN0cnVjdCBjYW0gKmNhbTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAJc2QtPnN1YnR5cGUgPSBpZC0+ZHJpdmVyX2luZm87CiAJaWYgKHNkLT5zdWJ0eXBlICE9IExvZ2l0ZWNoQ2xpY2tTbWFydDMxMCkgewogCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CkBAIC02MzgsMTAgKzY0MiwxMCBAQAogCQljYW0tPmNhbV9tb2RlID0gc2lmX21vZGU7CiAJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShzaWZfbW9kZSk7CiAJfQotCXNkLT5xaW5kZXggPSA1OwogCXNkLT5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CiAJc2QtPmNvbnRyYXN0ID0gQ09OVFJBU1RfREVGOwogCXNkLT5jb2xvcnMgPSBDT0xPUl9ERUY7CisJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX0RFRjsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY3LDYgKzY3MSwxMiBAQAogCV9fdTggRGF0YTsKIAlfX3U4IHhtdWx0LCB5bXVsdDsKIAorCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KKwlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKKwlqcGVnX2RlZmluZShzZC0+anBlZ19oZHIsIGdzcGNhX2Rldi0+aGVpZ2h0LCBnc3BjYV9kZXYtPndpZHRoLAorCQkJMHgyMik7CQkvKiBKUEVHIDQxMSAqLworCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisKIAlpZiAoc2QtPnN1YnR5cGUgPT0gTG9naXRlY2hDbGlja1NtYXJ0MzEwKSB7CiAJCXhtdWx0ID0gMHgxNjsKIAkJeW11bHQgPSAweDEyOwpAQCAtNzEzLDcgKzcyMyw4IEBACiAJCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHNwY2E1MDBfdmlzdWFsX2RlZmF1bHRzKTsKIAkJc3BjYTUwMF9zZXRtb2RlKGdzcGNhX2RldiwgeG11bHQsIHltdWx0KTsKIAkJLyogZW5hYmxlIGRyb3AgcGFja2V0ICovCi0JCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4NTBhLCAweDAwMDEpOworCQllcnIgPSByZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODUwYSwgMHgwMDAxKTsKKwkJaWYgKGVyciA8IDApCiAJCQlQREVCVUcoRF9FUlIsICJmYWlsZWQgdG8gZW5hYmxlIGRyb3AgcGFja2V0Iik7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4ODgwLCAzKTsKIAkJZXJyID0gc3BjYTUweF9zZXR1cF9xdGFibGUoZ3NwY2FfZGV2LApAQCAtODgxLDYgKzg5MiwxMyBAQAogCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0pOwogfQogCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJa2ZyZWUoc2QtPmpwZWdfaGRyKTsKK30KKwogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCiAJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCkBAIC05MDEsNyArOTE5LDggQEAKIAkJCQkJZmZkOSwgMik7CiAKIAkJLyogcHV0IHRoZSBKUEVHIGhlYWRlciBpbiB0aGUgbmV3IGZyYW1lICovCi0JCWpwZWdfcHV0X2hlYWRlcihnc3BjYV9kZXYsIGZyYW1lLCBzZC0+cWluZGV4LCAweDIyKTsKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwKKwkJCXNkLT5qcGVnX2hkciwgSlBFR19IRFJfU1opOwogCiAJCWRhdGEgKz0gU1BDQTUwMF9PRkZTRVRfREFUQTsKIAkJbGVuIC09IFNQQ0E1MDBfT0ZGU0VUX0RBVEE7CkBAIC05MzcsMTYgKzk1Niw2IEBACiAJCQkoX191OCkgKHNkLT5icmlnaHRuZXNzIC0gMTI4KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcmVnX3JfMTIoZ3NwY2FfZGV2LCAweDAwLCAweDgxNjcsIDEpOwotCWlmIChyZXQgPj0gMCkKLQkJc2QtPmJyaWdodG5lc3MgPSByZXQgKyAxMjg7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC05NTQsMTYgKzk2Myw2IEBACiAJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgxNjgsIHNkLT5jb250cmFzdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKLQotCXJldCA9IHJlZ19yXzEyKGdzcGNhX2RldiwgMHgwLCAweDgxNjgsIDEpOwotCWlmIChyZXQgPj0gMCkKLQkJc2QtPmNvbnRyYXN0ID0gcmV0OwotfQotCiBzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTk3MSwxNiArOTcwLDYgQEAKIAlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODE2OSwgc2QtPmNvbG9ycyk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByZXQ7Ci0KLQlyZXQgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MCwgMHg4MTY5LCAxKTsKLQlpZiAocmV0ID49IDApCi0JCXNkLT5jb2xvcnMgPSByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC05OTUsNyArOTg0LDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5icmlnaHRuZXNzOwogCXJldHVybiAwOwogfQpAQCAtMTAxNCw3ICsxMDAyLDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRjb250cmFzdChnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+Y29udHJhc3Q7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDMzLDExICsxMDIwLDM4IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0Y29sb3JzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5jb2xvcnM7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKGpjb21wLT5xdWFsaXR5IDwgUVVBTElUWV9NSU4pCisJCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9NSU47CisJZWxzZSBpZiAoamNvbXAtPnF1YWxpdHkgPiBRVUFMSVRZX01BWCkKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01BWDsKKwllbHNlCisJCXNkLT5xdWFsaXR5ID0gamNvbXAtPnF1YWxpdHk7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCW1lbXNldChqY29tcCwgMCwgc2l6ZW9mICpqY29tcCk7CisJamNvbXAtPnF1YWxpdHkgPSBzZC0+cXVhbGl0eTsKKwlqY29tcC0+anBlZ19tYXJrZXJzID0gVjRMMl9KUEVHX01BUktFUl9ESFQKKwkJCXwgVjRMMl9KUEVHX01BUktFUl9EUVQ7CisJcmV0dXJuIDA7Cit9CisKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCkBAIC0xMDQ3LDcgKzEwNjEsMTAgQEAKIAkuaW5pdCA9IHNkX2luaXQsCiAJLnN0YXJ0ID0gc2Rfc3RhcnQsCiAJLnN0b3BOID0gc2Rfc3RvcE4sCisJLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCisJLmdldF9qY29tcCA9IHNkX2dldF9qY29tcCwKKwkuc2V0X2pjb21wID0gc2Rfc2V0X2pjb21wLAogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCkBAIC0xMDkzLDggKzExMTAsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAxLmMKaW5kZXggODJlM2UzZS4uZDQ4YjI3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAxLmMKQEAgLTE4ODMsMTAgKzE4ODMsNiBAQAogCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgU1BDQTUwMV9SRUdfQ0NEU1AsIDB4MTIsIHNkLT5icmlnaHRuZXNzKTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0xODk3LDEwICsxODkzLDYgQEAKIAkJCQkgIHNkLT5jb250cmFzdCAmIDB4ZmYpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMTkwOCwxMCArMTkwMCw2IEBACiAJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCBTUENBNTAxX1JFR19DQ0RTUCwgMHgwYywgc2QtPmNvbG9ycyk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGJsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMTkzNCw3ICsxOTIyLDYgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKIAljYW0tPm5tb2RlcyA9IHNpemVvZiB2Z2FfbW9kZSAvIHNpemVvZiB2Z2FfbW9kZVswXTsKIAlzZC0+c3VidHlwZSA9IGlkLT5kcml2ZXJfaW5mbzsKQEAgLTIwODQsNyArMjA3MSw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKIAlyZXR1cm4gMDsKIH0KQEAgLTIxMDMsNyArMjA4OSw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAkqdmFsID0gc2QtPmNvbnRyYXN0OwogCXJldHVybiAwOwogfQpAQCAtMjEyMiw3ICsyMTA3LDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRjb2xvcnMoZ3NwY2FfZGV2KTsKIAkqdmFsID0gc2QtPmNvbG9yczsKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMTEsOCArMjE5NSwxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYwppbmRleCAyYTMzYTI5Li4yYWNlYzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYwpAQCAtMzEsOSArMzEsOSBAQAogc3RydWN0IHNkIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJCS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KIAotCXVuc2lnbmVkIGNoYXIgYnJpZ2h0bmVzczsKKwl1OCBicmlnaHRuZXNzOwogCi0JY2hhciBzdWJ0eXBlOworCXU4IHN1YnR5cGU7CiAjZGVmaW5lIEludGVsUENDYW1lcmFQcm8gMAogI2RlZmluZSBOeHVsdHJhIDEKIH07CkBAIC00Myw3ICs0Myw2IEBACiBzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAogc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7Ci0jZGVmaW5lIFNEX0JSSUdIVE5FU1MgMAogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC01Miw3ICs1MSw4IEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAyNTUsCiAJCS5zdGVwICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxMjcsCisjZGVmaW5lIEJSSUdIVE5FU1NfREVGIDEyNworCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKIAkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCkBAIC02NCwxMiArNjQsMTIgQEAKIAkJLmJ5dGVzcGVybGluZSA9IDE2MCwKIAkJLnNpemVpbWFnZSA9IDE2MCAqIDEyMCAqIDMgLyAyLAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDV9LAorCQkucHJpdiA9IDR9LAogCXsxNzYsIDE0NCwgVjRMMl9QSVhfRk1UX1NQQ0E1MDUsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDE3NiwKIAkJLnNpemVpbWFnZSA9IDE3NiAqIDE0NCAqIDMgLyAyLAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDR9LAorCQkucHJpdiA9IDN9LAogCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX1NQQ0E1MDUsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDMyMCwKIAkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDMgLyAyLApAQCAtOTMsNiArOTMsNyBAQAogCiAjZGVmaW5lIFNQQ0E1MFhfVVNCX0NUUkwgMHgwMAkvKiBzcGNhNTA1ICovCiAjZGVmaW5lIFNQQ0E1MFhfQ1VTQl9FTkFCTEUgMHgwMSAvKiBzcGNhNTA1ICovCisKICNkZWZpbmUgU1BDQTUwWF9SRUdfR0xPQkFMIDB4MDMJLyogc3BjYTUwNSAqLwogI2RlZmluZSBTUENBNTBYX0dNSVNDMF9JRFNFTCAweDAxIC8qIEdsb2JhbCBjb250cm9sIGRldmljZSBJRCBzZWxlY3Qgc3BjYTUwNSAqLwogI2RlZmluZSBTUENBNTBYX0dMT0JBTF9NSVNDMCAweDAwIC8qIEdsb2JhbCBjb250cm9sIG1pc2NlbGxhbmVvdXMgMCBzcGNhNTA1ICovCkBAIC0xMDEsMjMwICsxMDIsMjMwIEBACiAjZGVmaW5lIFNQQ0E1MFhfR0xPQkFMX01JU0MzIDB4MDMgLyogNTA1ICovCiAjZGVmaW5lIFNQQ0E1MFhfR01JU0MzX1NBQTcxMTNSU1QgMHgyMAkvKiBOb3Qgc3VyZSBhYm91dCB0aGlzIG9uZSBzcGNhNTA1ICovCiAKKy8qIEltYWdlIGZvcm1hdCBhbmQgY29tcHJlc3Npb24gY29udHJvbCAqLworI2RlZmluZSBTUENBNTBYX1JFR19DT01QUkVTUyAweDA0CisKIC8qCiAgKiBEYXRhIHRvIGluaXRpYWxpemUgYSBTUENBNTA1LiBDb21tb24gdG8gdGhlIENDRCBhbmQgZXh0ZXJuYWwgbW9kZXMKICAqLwotc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDVfaW5pdF9kYXRhW11bM10gPSB7Ci0JLyogbGluZQkgICBibVJlcXVlc3QsdmFsdWUsaW5kZXggKi8KLQkvKiAxODE5ICovCitzdGF0aWMgY29uc3QgdTggc3BjYTUwNV9pbml0X2RhdGFbXVszXSA9IHsKKwkvKiBibVJlcXVlc3QsdmFsdWUsaW5kZXggKi8KIAl7U1BDQTUwWF9SRUdfR0xPQkFMLCBTUENBNTBYX0dNSVNDM19TQUE3MTEzUlNULCBTUENBNTBYX0dMT0JBTF9NSVNDM30sCiAJLyogU2Vuc29yIHJlc2V0ICovCi0JLyogMTgyMiAqLyB7U1BDQTUwWF9SRUdfR0xPQkFMLCAweDAwLCBTUENBNTBYX0dMT0JBTF9NSVNDM30sCi0JLyogMTgyNSAqLyB7U1BDQTUwWF9SRUdfR0xPQkFMLCAweDAwLCBTUENBNTBYX0dMT0JBTF9NSVNDMX0sCisJe1NQQ0E1MFhfUkVHX0dMT0JBTCwgMHgwMCwgU1BDQTUwWF9HTE9CQUxfTUlTQzN9LAorCXtTUENBNTBYX1JFR19HTE9CQUwsIDB4MDAsIFNQQ0E1MFhfR0xPQkFMX01JU0MxfSwKIAkvKiBCbG9jayBVU0IgcmVzZXQgKi8KLQkvKiAxODI4ICovIHtTUENBNTBYX1JFR19HTE9CQUwsIFNQQ0E1MFhfR01JU0MwX0lEU0VMLAotCQlTUENBNTBYX0dMT0JBTF9NSVNDMH0sCisJe1NQQ0E1MFhfUkVHX0dMT0JBTCwgU1BDQTUwWF9HTUlTQzBfSURTRUwsIFNQQ0E1MFhfR0xPQkFMX01JU0MwfSwKIAotCS8qIDE4MzEgKi8gezB4NSwgMHgwMSwgMHgxMH0sCisJezB4MDUsIDB4MDEsIDB4MTB9LAogCQkJCQkvKiBNYXliZSBwb3dlciBkb3duIHNvbWUgc3R1ZmYgKi8KLQkvKiAxODM0ICovIHsweDUsIDB4MGYsIDB4MTF9LAorCXsweDA1LCAweDBmLCAweDExfSwKIAogCS8qIFNldHVwIGludGVybmFsIENDRCAgPyAqLwotCS8qIDE4MzcgKi8gezB4NiwgMHgxMCwgMHgwOH0sCi0JLyogMTg0MCAqLyB7MHg2LCAweDAwLCAweDA5fSwKLQkvKiAxODQzICovIHsweDYsIDB4MDAsIDB4MGF9LAotCS8qIDE4NDYgKi8gezB4NiwgMHgwMCwgMHgwYn0sCi0JLyogMTg0OSAqLyB7MHg2LCAweDEwLCAweDBjfSwKLQkvKiAxODUyICovIHsweDYsIDB4MDAsIDB4MGR9LAotCS8qIDE4NTUgKi8gezB4NiwgMHgwMCwgMHgwZX0sCi0JLyogMTg1OCAqLyB7MHg2LCAweDAwLCAweDBmfSwKLQkvKiAxODYxICovIHsweDYsIDB4MTAsIDB4MTB9LAotCS8qIDE4NjQgKi8gezB4NiwgMHgwMiwgMHgxMX0sCi0JLyogMTg2NyAqLyB7MHg2LCAweDAwLCAweDEyfSwKLQkvKiAxODcwICovIHsweDYsIDB4MDQsIDB4MTN9LAotCS8qIDE4NzMgKi8gezB4NiwgMHgwMiwgMHgxNH0sCi0JLyogMTg3NiAqLyB7MHg2LCAweDhhLCAweDUxfSwKLQkvKiAxODc5ICovIHsweDYsIDB4NDAsIDB4NTJ9LAotCS8qIDE4ODIgKi8gezB4NiwgMHhiNiwgMHg1M30sCi0JLyogMTg4NSAqLyB7MHg2LCAweDNkLCAweDU0fSwKKwl7MHgwNiwgMHgxMCwgMHgwOH0sCisJezB4MDYsIDB4MDAsIDB4MDl9LAorCXsweDA2LCAweDAwLCAweDBhfSwKKwl7MHgwNiwgMHgwMCwgMHgwYn0sCisJezB4MDYsIDB4MTAsIDB4MGN9LAorCXsweDA2LCAweDAwLCAweDBkfSwKKwl7MHgwNiwgMHgwMCwgMHgwZX0sCisJezB4MDYsIDB4MDAsIDB4MGZ9LAorCXsweDA2LCAweDEwLCAweDEwfSwKKwl7MHgwNiwgMHgwMiwgMHgxMX0sCisJezB4MDYsIDB4MDAsIDB4MTJ9LAorCXsweDA2LCAweDA0LCAweDEzfSwKKwl7MHgwNiwgMHgwMiwgMHgxNH0sCisJezB4MDYsIDB4OGEsIDB4NTF9LAorCXsweDA2LCAweDQwLCAweDUyfSwKKwl7MHgwNiwgMHhiNiwgMHg1M30sCisJezB4MDYsIDB4M2QsIDB4NTR9LAogCXt9CiB9OwogCiAvKgogICogRGF0YSB0byBpbml0aWFsaXplIHRoZSBjYW1lcmEgdXNpbmcgdGhlIGludGVybmFsIENDRAogICovCi1zdGF0aWMgY29uc3QgX191MTYgc3BjYTUwNV9vcGVuX2RhdGFfY2NkW11bM10gPSB7Ci0JLyogbGluZQkgICBibVJlcXVlc3QsdmFsdWUsaW5kZXggKi8KK3N0YXRpYyBjb25zdCB1OCBzcGNhNTA1X29wZW5fZGF0YV9jY2RbXVszXSA9IHsKKwkvKiBibVJlcXVlc3QsdmFsdWUsaW5kZXggKi8KIAkvKiBJbnRlcm5hbCBDQ0QgZGF0YSBzZXQgKi8KLQkvKiAxODkxICovIHsweDMsIDB4MDQsIDB4MDF9LAorCXsweDAzLCAweDA0LCAweDAxfSwKIAkvKiBUaGlzIGNvdWxkIGJlIGEgcmVzZXQgKi8KLQkvKiAxODk0ICovIHsweDMsIDB4MDAsIDB4MDF9LAorCXsweDAzLCAweDAwLCAweDAxfSwKIAogCS8qIFNldHVwIGNvbXByZXNzaW9uIGFuZCBpbWFnZSByZWdpc3RlcnMuIDB4NiBhbmQgMHg3IHNlZW0gdG8gYmUKIAkgICByZWxhdGVkIHRvIEgmViBob2xkLCBhbmQgYXJlIHJlc29sdXRpb24gbW9kZSBzcGVjaWZpYyAqLwotCQkvKiAxODk3ICovIHsweDQsIDB4MTAsIDB4MDF9LAorCQl7MHgwNCwgMHgxMCwgMHgwMX0sCiAJCS8qIERJRkYoMHg1MCksIHdhcyAoMHgxMCkgKi8KLQkvKiAxOTAwICovIHsweDQsIDB4MDAsIDB4MDR9LAotCS8qIDE5MDMgKi8gezB4NCwgMHgwMCwgMHgwNX0sCi0JLyogMTkwNiAqLyB7MHg0LCAweDIwLCAweDA2fSwKLQkvKiAxOTA5ICovIHsweDQsIDB4MjAsIDB4MDd9LAorCXsweDA0LCAweDAwLCAweDA0fSwKKwl7MHgwNCwgMHgwMCwgMHgwNX0sCisJezB4MDQsIDB4MjAsIDB4MDZ9LAorCXsweDA0LCAweDIwLCAweDA3fSwKIAotCS8qIDE5MTIgKi8gezB4OCwgMHgwYSwgMHgwMH0sCisJezB4MDgsIDB4MGEsIDB4MDB9LAogCS8qIERJRkYgKDB4NGEpLCB3YXMgKDB4YSkgKi8KIAotCS8qIDE5MTUgKi8gezB4NSwgMHgwMCwgMHgxMH0sCi0JLyogMTkxOCAqLyB7MHg1LCAweDAwLCAweDExfSwKLQkvKiAxOTIxICovIHsweDUsIDB4MDAsIDB4MDB9LAorCXsweDA1LCAweDAwLCAweDEwfSwKKwl7MHgwNSwgMHgwMCwgMHgxMX0sCisJezB4MDUsIDB4MDAsIDB4MDB9LAogCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KLQkvKiAxOTI0ICovIHsweDUsIDB4MDAsIDB4MDF9LAorCXsweDA1LCAweDAwLCAweDAxfSwKIAkvKiBESUZGIG5vdCB3cml0dGVuICovCi0JLyogMTkyNyAqLyB7MHg1LCAweDAwLCAweDAyfSwKKwl7MHgwNSwgMHgwMCwgMHgwMn0sCiAJLyogRElGRiBub3Qgd3JpdHRlbiAqLwotCS8qIDE5MzAgKi8gezB4NSwgMHgwMCwgMHgwM30sCisJezB4MDUsIDB4MDAsIDB4MDN9LAogCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KLQkvKiAxOTMzICovIHsweDUsIDB4MDAsIDB4MDR9LAorCXsweDA1LCAweDAwLCAweDA0fSwKIAkvKiBESUZGIG5vdCB3cml0dGVuICovCi0JCS8qIDE5MzYgKi8gezB4NSwgMHg4MCwgMHgwNX0sCisJCXsweDA1LCAweDgwLCAweDA1fSwKIAkJLyogRElGRiBub3Qgd3JpdHRlbiAqLwotCQkvKiAxOTM5ICovIHsweDUsIDB4ZTAsIDB4MDZ9LAorCQl7MHgwNSwgMHhlMCwgMHgwNn0sCiAJCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KLQkJLyogMTk0MiAqLyB7MHg1LCAweDIwLCAweDA3fSwKKwkJezB4MDUsIDB4MjAsIDB4MDd9LAogCQkvKiBESUZGIG5vdCB3cml0dGVuICovCi0JCS8qIDE5NDUgKi8gezB4NSwgMHhhMCwgMHgwOH0sCisJCXsweDA1LCAweGEwLCAweDA4fSwKIAkJLyogRElGRiBub3Qgd3JpdHRlbiAqLwotCQkvKiAxOTQ4ICovIHsweDUsIDB4MCwgMHgxMn0sCisJCXsweDA1LCAweDAsIDB4MTJ9LAogCQkvKiBESUZGIG5vdCB3cml0dGVuICovCi0JLyogMTk1MSAqLyB7MHg1LCAweDAyLCAweDBmfSwKKwl7MHgwNSwgMHgwMiwgMHgwZn0sCiAJLyogRElGRiBub3Qgd3JpdHRlbiAqLwotCQkvKiAxOTU0ICovIHsweDUsIDB4MTAsIDB4NDZ9LAorCQl7MHgwNSwgMHgxMCwgMHg0Nn0sCiAJCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KLQkJLyogMTk1NyAqLyB7MHg1LCAweDgsIDB4NGF9LAorCQl7MHgwNSwgMHg4LCAweDRhfSwKIAkJLyogRElGRiBub3Qgd3JpdHRlbiAqLwogCi0JLyogMTk2MCAqLyB7MHgzLCAweDA4LCAweDAzfSwKKwl7MHgwMywgMHgwOCwgMHgwM30sCiAJLyogRElGRiAoMHgzLDB4MjgsMHgzKSAqLwotCS8qIDE5NjMgKi8gezB4MywgMHgwOCwgMHgwMX0sCi0JLyogMTk2NiAqLyB7MHgzLCAweDBjLCAweDAzfSwKKwl7MHgwMywgMHgwOCwgMHgwMX0sCisJezB4MDMsIDB4MGMsIDB4MDN9LAogCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KLQkJLyogMTk2OSAqLyB7MHgzLCAweDIxLCAweDAwfSwKKwkJezB4MDMsIDB4MjEsIDB4MDB9LAogCQkvKiBESUZGICgweDM5KSAqLwogCiAvKiBFeHRyYSBibG9jayBjb3BpZWQgZnJvbSBpbml0IHRvIGhvcGVmdWxseSBlbnN1cmUgQ0NEIGlzIGluIGEgc2FuZSBzdGF0ZSAqLwotCS8qIDE4MzcgKi8gezB4NiwgMHgxMCwgMHgwOH0sCi0JLyogMTg0MCAqLyB7MHg2LCAweDAwLCAweDA5fSwKLQkvKiAxODQzICovIHsweDYsIDB4MDAsIDB4MGF9LAotCS8qIDE4NDYgKi8gezB4NiwgMHgwMCwgMHgwYn0sCi0JLyogMTg0OSAqLyB7MHg2LCAweDEwLCAweDBjfSwKLQkvKiAxODUyICovIHsweDYsIDB4MDAsIDB4MGR9LAotCS8qIDE4NTUgKi8gezB4NiwgMHgwMCwgMHgwZX0sCi0JLyogMTg1OCAqLyB7MHg2LCAweDAwLCAweDBmfSwKLQkvKiAxODYxICovIHsweDYsIDB4MTAsIDB4MTB9LAotCS8qIDE4NjQgKi8gezB4NiwgMHgwMiwgMHgxMX0sCi0JLyogMTg2NyAqLyB7MHg2LCAweDAwLCAweDEyfSwKLQkvKiAxODcwICovIHsweDYsIDB4MDQsIDB4MTN9LAotCS8qIDE4NzMgKi8gezB4NiwgMHgwMiwgMHgxNH0sCi0JLyogMTg3NiAqLyB7MHg2LCAweDhhLCAweDUxfSwKLQkvKiAxODc5ICovIHsweDYsIDB4NDAsIDB4NTJ9LAotCS8qIDE4ODIgKi8gezB4NiwgMHhiNiwgMHg1M30sCi0JLyogMTg4NSAqLyB7MHg2LCAweDNkLCAweDU0fSwKKwl7MHgwNiwgMHgxMCwgMHgwOH0sCisJezB4MDYsIDB4MDAsIDB4MDl9LAorCXsweDA2LCAweDAwLCAweDBhfSwKKwl7MHgwNiwgMHgwMCwgMHgwYn0sCisJezB4MDYsIDB4MTAsIDB4MGN9LAorCXsweDA2LCAweDAwLCAweDBkfSwKKwl7MHgwNiwgMHgwMCwgMHgwZX0sCisJezB4MDYsIDB4MDAsIDB4MGZ9LAorCXsweDA2LCAweDEwLCAweDEwfSwKKwl7MHgwNiwgMHgwMiwgMHgxMX0sCisJezB4MDYsIDB4MDAsIDB4MTJ9LAorCXsweDA2LCAweDA0LCAweDEzfSwKKwl7MHgwNiwgMHgwMiwgMHgxNH0sCisJezB4MDYsIDB4OGEsIDB4NTF9LAorCXsweDA2LCAweDQwLCAweDUyfSwKKwl7MHgwNiwgMHhiNiwgMHg1M30sCisJezB4MDYsIDB4M2QsIDB4NTR9LAogCS8qIEVuZCBvZiBleHRyYSBibG9jayAqLwogCi0JCS8qIDE5NzIgKi8gezB4NiwgMHgzZiwgMHgxfSwKKwkJezB4MDYsIDB4M2YsIDB4MX0sCiAJCS8qIEJsb2NrIHNraXBwZWQgKi8KLQkvKiAxOTc1ICovIHsweDYsIDB4MTAsIDB4MDJ9LAotCS8qIDE5NzggKi8gezB4NiwgMHg2NCwgMHgwN30sCi0JLyogMTk4MSAqLyB7MHg2LCAweDEwLCAweDA4fSwKLQkvKiAxOTg0ICovIHsweDYsIDB4MDAsIDB4MDl9LAotCS8qIDE5ODcgKi8gezB4NiwgMHgwMCwgMHgwYX0sCi0JLyogMTk5MCAqLyB7MHg2LCAweDAwLCAweDBifSwKLQkvKiAxOTkzICovIHsweDYsIDB4MTAsIDB4MGN9LAotCS8qIDE5OTYgKi8gezB4NiwgMHgwMCwgMHgwZH0sCi0JLyogMTk5OSAqLyB7MHg2LCAweDAwLCAweDBlfSwKLQkvKiAyMDAyICovIHsweDYsIDB4MDAsIDB4MGZ9LAotCS8qIDIwMDUgKi8gezB4NiwgMHgxMCwgMHgxMH0sCi0JLyogMjAwOCAqLyB7MHg2LCAweDAyLCAweDExfSwKLQkvKiAyMDExICovIHsweDYsIDB4MDAsIDB4MTJ9LAotCS8qIDIwMTQgKi8gezB4NiwgMHgwNCwgMHgxM30sCi0JLyogMjAxNyAqLyB7MHg2LCAweDAyLCAweDE0fSwKLQkvKiAyMDIwICovIHsweDYsIDB4OGEsIDB4NTF9LAotCS8qIDIwMjMgKi8gezB4NiwgMHg0MCwgMHg1Mn0sCi0JLyogMjAyNiAqLyB7MHg2LCAweGI2LCAweDUzfSwKLQkvKiAyMDI5ICovIHsweDYsIDB4M2QsIDB4NTR9LAotCS8qIDIwMzIgKi8gezB4NiwgMHg2MCwgMHg1N30sCi0JLyogMjAzNSAqLyB7MHg2LCAweDIwLCAweDU4fSwKLQkvKiAyMDM4ICovIHsweDYsIDB4MTUsIDB4NTl9LAotCS8qIDIwNDEgKi8gezB4NiwgMHgwNSwgMHg1YX0sCisJezB4MDYsIDB4MTAsIDB4MDJ9LAorCXsweDA2LCAweDY0LCAweDA3fSwKKwl7MHgwNiwgMHgxMCwgMHgwOH0sCisJezB4MDYsIDB4MDAsIDB4MDl9LAorCXsweDA2LCAweDAwLCAweDBhfSwKKwl7MHgwNiwgMHgwMCwgMHgwYn0sCisJezB4MDYsIDB4MTAsIDB4MGN9LAorCXsweDA2LCAweDAwLCAweDBkfSwKKwl7MHgwNiwgMHgwMCwgMHgwZX0sCisJezB4MDYsIDB4MDAsIDB4MGZ9LAorCXsweDA2LCAweDEwLCAweDEwfSwKKwl7MHgwNiwgMHgwMiwgMHgxMX0sCisJezB4MDYsIDB4MDAsIDB4MTJ9LAorCXsweDA2LCAweDA0LCAweDEzfSwKKwl7MHgwNiwgMHgwMiwgMHgxNH0sCisJezB4MDYsIDB4OGEsIDB4NTF9LAorCXsweDA2LCAweDQwLCAweDUyfSwKKwl7MHgwNiwgMHhiNiwgMHg1M30sCisJezB4MDYsIDB4M2QsIDB4NTR9LAorCXsweDA2LCAweDYwLCAweDU3fSwKKwl7MHgwNiwgMHgyMCwgMHg1OH0sCisJezB4MDYsIDB4MTUsIDB4NTl9LAorCXsweDA2LCAweDA1LCAweDVhfSwKIAotCS8qIDIwNDQgKi8gezB4NSwgMHgwMSwgMHhjMH0sCi0JLyogMjA0NyAqLyB7MHg1LCAweDEwLCAweGNifSwKLQkJLyogMjA1MCAqLyB7MHg1LCAweDgwLCAweGMxfSwKKwl7MHgwNSwgMHgwMSwgMHhjMH0sCisJezB4MDUsIDB4MTAsIDB4Y2J9LAorCQl7MHgwNSwgMHg4MCwgMHhjMX0sCiAJCS8qICovCi0JCS8qIDIwNTMgKi8gezB4NSwgMHgwLCAweGMyfSwKKwkJezB4MDUsIDB4MCwgMHhjMn0sCiAJCS8qIDQgd2FzIDAgKi8KLQkvKiAyMDU2ICovIHsweDUsIDB4MDAsIDB4Y2F9LAotCQkvKiAyMDU5ICovIHsweDUsIDB4ODAsIDB4YzF9LAorCXsweDA1LCAweDAwLCAweGNhfSwKKwkJezB4MDUsIDB4ODAsIDB4YzF9LAogCQkvKiAgKi8KLQkvKiAyMDYyICovIHsweDUsIDB4MDQsIDB4YzJ9LAotCS8qIDIwNjUgKi8gezB4NSwgMHgwMCwgMHhjYX0sCi0JCS8qIDIwNjggKi8gezB4NSwgMHgwLCAweGMxfSwKKwl7MHgwNSwgMHgwNCwgMHhjMn0sCisJezB4MDUsIDB4MDAsIDB4Y2F9LAorCQl7MHgwNSwgMHgwLCAweGMxfSwKIAkJLyogICovCi0JLyogMjA3MSAqLyB7MHg1LCAweDAwLCAweGMyfSwKLQkvKiAyMDc0ICovIHsweDUsIDB4MDAsIDB4Y2F9LAotCQkvKiAyMDc3ICovIHsweDUsIDB4NDAsIDB4YzF9LAorCXsweDA1LCAweDAwLCAweGMyfSwKKwl7MHgwNSwgMHgwMCwgMHhjYX0sCisJCXsweDA1LCAweDQwLCAweGMxfSwKIAkJLyogKi8KLQkvKiAyMDgwICovIHsweDUsIDB4MTcsIDB4YzJ9LAotCS8qIDIwODMgKi8gezB4NSwgMHgwMCwgMHhjYX0sCi0JCS8qIDIwODYgKi8gezB4NSwgMHg4MCwgMHhjMX0sCisJezB4MDUsIDB4MTcsIDB4YzJ9LAorCXsweDA1LCAweDAwLCAweGNhfSwKKwkJezB4MDUsIDB4ODAsIDB4YzF9LAogCQkvKiAqLwotCS8qIDIwODkgKi8gezB4NSwgMHgwNiwgMHhjMn0sCi0JLyogMjA5MiAqLyB7MHg1LCAweDAwLCAweGNhfSwKLQkJLyogMjA5NSAqLyB7MHg1LCAweDgwLCAweGMxfSwKKwl7MHgwNSwgMHgwNiwgMHhjMn0sCisJezB4MDUsIDB4MDAsIDB4Y2F9LAorCQl7MHgwNSwgMHg4MCwgMHhjMX0sCiAJCS8qICovCi0JLyogMjA5OCAqLyB7MHg1LCAweDA0LCAweGMyfSwKLQkvKiAyMTAxICovIHsweDUsIDB4MDAsIDB4Y2F9LAorCXsweDA1LCAweDA0LCAweGMyfSwKKwl7MHgwNSwgMHgwMCwgMHhjYX0sCiAKLQkvKiAyMTA0ICovIHsweDMsIDB4NGMsIDB4M30sCi0JLyogMjEwNyAqLyB7MHgzLCAweDE4LCAweDF9LAorCXsweDAzLCAweDRjLCAweDN9LAorCXsweDAzLCAweDE4LCAweDF9LAogCi0JLyogMjExMCAqLyB7MHg2LCAweDcwLCAweDUxfSwKLQkvKiAyMTEzICovIHsweDYsIDB4YmUsIDB4NTN9LAotCS8qIDIxMTYgKi8gezB4NiwgMHg3MSwgMHg1N30sCi0JLyogMjExOSAqLyB7MHg2LCAweDIwLCAweDU4fSwKLQkvKiAyMTIyICovIHsweDYsIDB4MDUsIDB4NTl9LAotCS8qIDIxMjUgKi8gezB4NiwgMHgxNSwgMHg1YX0sCisJezB4MDYsIDB4NzAsIDB4NTF9LAorCXsweDA2LCAweGJlLCAweDUzfSwKKwl7MHgwNiwgMHg3MSwgMHg1N30sCisJezB4MDYsIDB4MjAsIDB4NTh9LAorCXsweDA2LCAweDA1LCAweDU5fSwKKwl7MHgwNiwgMHgxNSwgMHg1YX0sCiAKLQkvKiAyMTI4ICovIHsweDQsIDB4MDAsIDB4MDh9LAorCXsweDA0LCAweDAwLCAweDA4fSwKIAkvKiBDb21wcmVzcyA9IE9GRiAoMHgxIHRvIHR1cm4gb24pICovCi0JLyogMjEzMSAqLyB7MHg0LCAweDEyLCAweDA5fSwKLQkvKiAyMTM0ICovIHsweDQsIDB4MjEsIDB4MGF9LAotCS8qIDIxMzcgKi8gezB4NCwgMHgxMCwgMHgwYn0sCi0JLyogMjE0MCAqLyB7MHg0LCAweDIxLCAweDBjfSwKLQkvKiAyMTQzICovIHsweDQsIDB4MDUsIDB4MDB9LAorCXsweDA0LCAweDEyLCAweDA5fSwKKwl7MHgwNCwgMHgyMSwgMHgwYX0sCisJezB4MDQsIDB4MTAsIDB4MGJ9LAorCXsweDA0LCAweDIxLCAweDBjfSwKKwl7MHgwNCwgMHgwNSwgMHgwMH0sCiAJLyogd2FzIDUgKEltYWdlIFR5cGUgPyApICovCi0JLyogMjE0NiAqLyB7MHg0LCAweDAwLCAweDAxfSwKKwl7MHgwNCwgMHgwMCwgMHgwMX0sCiAKLQkvKiAyMTQ5ICovIHsweDYsIDB4M2YsIDB4MDF9LAorCXsweDA2LCAweDNmLCAweDAxfSwKIAotCS8qIDIxNTIgKi8gezB4NCwgMHgwMCwgMHgwNH0sCi0JLyogMjE1NSAqLyB7MHg0LCAweDAwLCAweDA1fSwKLQkvKiAyMTU4ICovIHsweDQsIDB4NDAsIDB4MDZ9LAotCS8qIDIxNjEgKi8gezB4NCwgMHg0MCwgMHgwN30sCisJezB4MDQsIDB4MDAsIDB4MDR9LAorCXsweDA0LCAweDAwLCAweDA1fSwKKwl7MHgwNCwgMHg0MCwgMHgwNn0sCisJezB4MDQsIDB4NDAsIDB4MDd9LAogCi0JLyogMjE2NCAqLyB7MHg2LCAweDFjLCAweDE3fSwKLQkvKiAyMTY3ICovIHsweDYsIDB4ZTIsIDB4MTl9LAotCS8qIDIxNzAgKi8gezB4NiwgMHgxYywgMHgxYn0sCi0JLyogMjE3MyAqLyB7MHg2LCAweGUyLCAweDFkfSwKLQkvKiAyMTc2ICovIHsweDYsIDB4YWEsIDB4MWZ9LAotCS8qIDIxNzkgKi8gezB4NiwgMHg3MCwgMHgyMH0sCisJezB4MDYsIDB4MWMsIDB4MTd9LAorCXsweDA2LCAweGUyLCAweDE5fSwKKwl7MHgwNiwgMHgxYywgMHgxYn0sCisJezB4MDYsIDB4ZTIsIDB4MWR9LAorCXsweDA2LCAweGFhLCAweDFmfSwKKwl7MHgwNiwgMHg3MCwgMHgyMH0sCiAKLQkvKiAyMTgyICovIHsweDUsIDB4MDEsIDB4MTB9LAotCS8qIDIxODUgKi8gezB4NSwgMHgwMCwgMHgxMX0sCi0JLyogMjE4OCAqLyB7MHg1LCAweDAxLCAweDAwfSwKLQkvKiAyMTkxICovIHsweDUsIDB4MDUsIDB4MDF9LAotCQkvKiAyMTk0ICovIHsweDUsIDB4MDAsIDB4YzF9LAorCXsweDA1LCAweDAxLCAweDEwfSwKKwl7MHgwNSwgMHgwMCwgMHgxMX0sCisJezB4MDUsIDB4MDEsIDB4MDB9LAorCXsweDA1LCAweDA1LCAweDAxfSwKKwkJezB4MDUsIDB4MDAsIDB4YzF9LAogCQkvKiAqLwotCS8qIDIxOTcgKi8gezB4NSwgMHgwMCwgMHhjMn0sCi0JLyogMjIwMCAqLyB7MHg1LCAweDAwLCAweGNhfSwKKwl7MHgwNSwgMHgwMCwgMHhjMn0sCisJezB4MDUsIDB4MDAsIDB4Y2F9LAogCi0JLyogMjIwMyAqLyB7MHg2LCAweDcwLCAweDUxfSwKLQkvKiAyMjA2ICovIHsweDYsIDB4YmUsIDB4NTN9LAorCXsweDA2LCAweDcwLCAweDUxfSwKKwl7MHgwNiwgMHhiZSwgMHg1M30sCiAJe30KIH07CiAKIC8qCi0gICBNYWRlIGJ5IFRvbWFzeiBaYWJsb2NraSAoc2thbGFtYW5kcmFAcG9jenRhLm9uZXQucGwpCisgKiBNYWRlIGJ5IFRvbWFzeiBaYWJsb2NraSAoc2thbGFtYW5kcmFAcG9jenRhLm9uZXQucGwpCiAgKiBTUENBNTA1YiBjaGlwIGJhc2VkIGNhbWVyYXMgaW5pdGlhbGl6YXRpb24gZGF0YQotICoKICAqLwogLyogamZtICovCiAjZGVmaW5lIGluaXRpYWxfYnJpZ2h0bmVzcyAweDdmCS8qIDB4MCh3aGl0ZSktMHhmZihibGFjaykgKi8KQEAgLTMzMiw3ICszMzMsNyBAQAogLyoKICAqIERhdGEgdG8gaW5pdGlhbGl6ZSBhIFNQQ0E1MDUuIENvbW1vbiB0byB0aGUgQ0NEIGFuZCBleHRlcm5hbCBtb2RlcwogICovCi1zdGF0aWMgY29uc3QgX191MTYgc3BjYTUwNWJfaW5pdF9kYXRhW11bM10gPSB7CitzdGF0aWMgY29uc3QgdTggc3BjYTUwNWJfaW5pdF9kYXRhW11bM10gPSB7CiAvKiBzdGFydCAqLwogCXsweDAyLCAweDAwLCAweDAwfSwJCS8qIGluaXQgKi8KIAl7MHgwMiwgMHgwMCwgMHgwMX0sCkBAIC0zOTYsNyArMzk3LDcgQEAKIC8qCiAgKiBEYXRhIHRvIGluaXRpYWxpemUgdGhlIGNhbWVyYSB1c2luZyB0aGUgaW50ZXJuYWwgQ0NECiAgKi8KLXN0YXRpYyBjb25zdCBfX3UxNiBzcGNhNTA1Yl9vcGVuX2RhdGFfY2NkW11bM10gPSB7CitzdGF0aWMgY29uc3QgdTggc3BjYTUwNWJfb3Blbl9kYXRhX2NjZFtdWzNdID0gewogCiAvKiB7MHgwMiwweDAwLDB4MDB9LCAqLwogCXsweDAzLCAweDA0LCAweDAxfSwJCS8qIHJzdCAqLwpAQCAtNDI2LDcgKzQyNyw3IEBACiAJezB4MDUsIDB4MDAsIDB4MTJ9LAogCXsweDA1LCAweDZmLCAweDAwfSwKIAl7MHgwNSwgaW5pdGlhbF9icmlnaHRuZXNzID4+IDYsIDB4MDB9LAotCXsweDA1LCBpbml0aWFsX2JyaWdodG5lc3MgPDwgMiwgMHgwMX0sCisJezB4MDUsIChpbml0aWFsX2JyaWdodG5lc3MgPDwgMikgJiAweGZmLCAweDAxfSwKIAl7MHgwNSwgMHgwMCwgMHgwMn0sCiAJezB4MDUsIDB4MDEsIDB4MDN9LAogCXsweDA1LCAweDAwLCAweDA0fSwKQEAgLTQzNiw3ICs0MzcsNyBAQAogCXsweDA1LCAweGEwLCAweDA4fSwKIAl7MHgwNSwgMHgwMCwgMHgxMn0sCiAJezB4MDUsIDB4MDIsIDB4MGZ9LAotCXsweDA1LCAxMjgsIDB4MTR9LAkJLyogbWF4IGV4cG9zdXJlIG9mZiAoMD1vbikgKi8KKwl7MHgwNSwgMHg4MCwgMHgxNH0sCQkvKiBtYXggZXhwb3N1cmUgb2ZmICgwPW9uKSAqLwogCXsweDA1LCAweDAxLCAweGIwfSwKIAl7MHgwNSwgMHgwMSwgMHhiZn0sCiAJezB4MDMsIDB4MDIsIDB4MDZ9LApAQCAtNTYwLDI2ICs1NjEsMjYgQEAKIAl7MHgwNiwgMHgzMiwgMHgyMH0sCiAKIAl7MHgwNSwgaW5pdGlhbF9icmlnaHRuZXNzID4+IDYsIDB4MDB9LAotCXsweDA1LCBpbml0aWFsX2JyaWdodG5lc3MgPDwgMiwgMHgwMX0sCisJezB4MDUsIChpbml0aWFsX2JyaWdodG5lc3MgPDwgMikgJiAweGZmLCAweDAxfSwKIAl7MHgwNSwgMHgwNiwgMHhjMX0sCiAJezB4MDUsIDB4NTgsIDB4YzJ9LAotCXsweDA1LCAweDAsIDB4Y2F9LAotCXsweDA1LCAweDAsIDB4MTF9LAorCXsweDA1LCAweDAwLCAweGNhfSwKKwl7MHgwNSwgMHgwMCwgMHgxMX0sCiAJe30KIH07CiAKIHN0YXRpYyBpbnQgcmVnX3dyaXRlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCi0JCSAgICAgX191MTYgcmVnLCBfX3UxNiBpbmRleCwgX191MTYgdmFsdWUpCisJCSAgICAgdTE2IHJlcSwgdTE2IGluZGV4LCB1MTYgdmFsdWUpCiB7CiAJaW50IHJldDsKIAogCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKLQkJCXJlZywKKwkJCXJlcSwKIAkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQl2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsIDUwMCk7Ci0JUERFQlVHKERfUEFDSywgInJlZyB3cml0ZTogMHglMDJ4LDB4JTAyeDoweCUwMngsIDB4JXgiLAotCQlyZWcsIGluZGV4LCB2YWx1ZSwgcmV0KTsKKwlQREVCVUcoRF9VU0JPLCAicmVnIHdyaXRlOiAweCUwMngsMHglMDJ4OjB4JTAyeCwgJWQiLAorCQlyZXEsIGluZGV4LCB2YWx1ZSwgcmV0KTsKIAlpZiAocmV0IDwgMCkKIAkJUERFQlVHKERfRVJSLCAicmVnIHdyaXRlOiBlcnJvciAlZCIsIHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTU4Nyw0MiArNTg4LDM0IEBACiAKIC8qIHJldHVybnM6IG5lZ2F0aXZlIGlzIGVycm9yLCBwb3Mgb3IgemVybyBpcyBkYXRhICovCiBzdGF0aWMgaW50IHJlZ19yZWFkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCV9fdTE2IHJlZywJLyogYlJlcXVlc3QgKi8KLQkJCV9fdTE2IGluZGV4LAkvKiB3SW5kZXggKi8KLQkJCV9fdTE2IGxlbmd0aCkJLyogd0xlbmd0aCAoMSBvciAyIG9ubHkpICovCisJCQl1MTYgcmVxLAkvKiBiUmVxdWVzdCAqLworCQkJdTE2IGluZGV4KQkvKiB3SW5kZXggKi8KIHsKIAlpbnQgcmV0OwogCi0JZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gMDsKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAotCQkJcmVnLAorCQkJcmVxLAogCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCi0JCQkoX191MTYpIDAsCQkvKiB2YWx1ZSAqLwotCQkJKF9fdTE2KSBpbmRleCwKLQkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwgbGVuZ3RoLAorCQkJMCwJCQkvKiB2YWx1ZSAqLworCQkJaW5kZXgsCisJCQlnc3BjYV9kZXYtPnVzYl9idWYsIDIsCiAJCQk1MDApOwkJCS8qIHRpbWVvdXQgKi8KLQlpZiAocmV0IDwgMCkgewotCQlQREVCVUcoRF9FUlIsICJyZWdfcmVhZCBlcnIgJWQiLCByZXQpOwotCQlyZXR1cm4gLTE7Ci0JfQorCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCXJldHVybiAoZ3NwY2FfZGV2LT51c2JfYnVmWzFdIDw8IDgpICsgZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwogfQogCiBzdGF0aWMgaW50IHdyaXRlX3ZlY3RvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQljb25zdCBfX3UxNiBkYXRhW11bM10pCisJCQljb25zdCB1OCBkYXRhW11bM10pCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCByZXQsIGkgPSAwOwogCi0Jd2hpbGUgKGRhdGFbaV1bMF0gIT0gMCB8fCBkYXRhW2ldWzFdICE9IDAgfHwgZGF0YVtpXVsyXSAhPSAwKSB7CisJd2hpbGUgKGRhdGFbaV1bMF0gIT0gMCkgewogCQlyZXQgPSByZWdfd3JpdGUoZGV2LCBkYXRhW2ldWzBdLCBkYXRhW2ldWzJdLCBkYXRhW2ldWzFdKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCVBERUJVRyhEX0VSUiwKLQkJCQkiUmVnaXN0ZXIgd3JpdGUgZmFpbGVkIGZvciAweCV4LDB4JXgsMHgleCIsCi0JCQkJZGF0YVtpXVswXSwgZGF0YVtpXVsxXSwgZGF0YVtpXVsyXSk7CisJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKLQkJfQogCQlpKys7CiAJfQogCXJldHVybiAwOwpAQCAtNjM2LDE0ICs2MjksMTMgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKIAlzZC0+c3VidHlwZSA9IGlkLT5kcml2ZXJfaW5mbzsKIAlpZiAoc2QtPnN1YnR5cGUgIT0gSW50ZWxQQ0NhbWVyYVBybykKLQkJY2FtLT5ubW9kZXMgPSBzaXplb2YgdmdhX21vZGUgLyBzaXplb2YgdmdhX21vZGVbMF07CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CiAJZWxzZQkJCS8qIG5vIDY0MHg0ODAgZm9yIEludGVsUENDYW1lcmFQcm8gKi8KLQkJY2FtLT5ubW9kZXMgPSBzaXplb2YgdmdhX21vZGUgLyBzaXplb2YgdmdhX21vZGVbMF0gLSAxOwotCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbU0RfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKSAtIDE7CisJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKIAogCWlmIChzZC0+c3VidHlwZSA9PSBOeHVsdHJhKSB7CiAJCWlmICh3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTA1Yl9pbml0X2RhdGEpKQpAQCAtNjU4LDgxICs2NTAsNzEgQEAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLwogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKLQotCVBERUJVRyhEX1NUUkVBTSwgIkluaXRpYWxpemluZyBTUENBNTA1Iik7Ci0JaWYgKHNkLT5zdWJ0eXBlID09IE54dWx0cmEpCi0JCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHNwY2E1MDViX29wZW5fZGF0YV9jY2QpOwotCWVsc2UKLQkJd3JpdGVfdmVjdG9yKGdzcGNhX2Rldiwgc3BjYTUwNV9vcGVuX2RhdGFfY2NkKTsKLQlyZXQgPSByZWdfcmVhZChnc3BjYV9kZXYsIDYsIDB4MTYsIDIpOwotCi0JaWYgKHJldCA8IDApIHsKLQkJUERFQlVHKERfRVJSfERfU1RSRUFNLAotCQkgICAgICAgInJlZ2lzdGVyIHJlYWQgZmFpbGVkIGZvciBhZnRlciB2ZWN0b3IgcmVhZCBlcnIgPSAlZCIsCi0JCSAgICAgICByZXQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JUERFQlVHKERfU1RSRUFNLAotCQkiQWZ0ZXIgdmVjdG9yIHJlYWQgcmV0dXJucyA6IDB4JXggc2hvdWxkIGJlIDB4MDEwMSIsCi0JCXJldCAmIDB4ZmZmZik7Ci0KLQlyZXQgPSByZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDYsIDB4MTYsIDB4MGEpOwotCWlmIChyZXQgPCAwKSB7Ci0JCVBERUJVRyhEX0VSUiwgInJlZ2lzdGVyIHdyaXRlIGZhaWxlZCBmb3IgKDYsMHhhLDB4MTYpIGVycj0lZCIsCi0JCSAgICAgICByZXQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCA1LCAweGMyLCAxOCk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBicmlnaHRuZXNzID0gc2QtPmJyaWdodG5lc3M7CisKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDUsIDB4MDAsICgyNTUgLSBicmlnaHRuZXNzKSA+PiA2KTsKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDUsIDB4MDEsICgyNTUgLSBicmlnaHRuZXNzKSA8PCAyKTsKK30KKwogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQlpbnQgcmV0OworCWludCByZXQsIG1vZGU7CisJc3RhdGljIHU4IG1vZGVfdGJbXVszXSA9IHsKKwkvKgkgIHIwMCAgIHIwNiAgIHIwNwkqLworCQl7MHgwMCwgMHgxMCwgMHgxMH0sCS8qIDY0MHg0ODAgKi8KKwkJezB4MDEsIDB4MWEsIDB4MWF9LAkvKiAzNTJ4Mjg4ICovCisJCXsweDAyLCAweDFjLCAweDFkfSwJLyogMzIweDI0MCAqLworCQl7MHgwNCwgMHgzNCwgMHgzNH0sCS8qIDE3NngxNDQgKi8KKwkJezB4MDUsIDB4NDAsIDB4NDB9CS8qIDE2MHgxMjAgKi8KKwl9OworCisJaWYgKHNkLT5zdWJ0eXBlID09IE54dWx0cmEpCisJCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHNwY2E1MDViX29wZW5fZGF0YV9jY2QpOworCWVsc2UKKwkJd3JpdGVfdmVjdG9yKGdzcGNhX2Rldiwgc3BjYTUwNV9vcGVuX2RhdGFfY2NkKTsKKwlyZXQgPSByZWdfcmVhZChnc3BjYV9kZXYsIDB4MDYsIDB4MTYpOworCisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSfERfQ09ORiwKKwkJICAgICAgICJyZWdpc3RlciByZWFkIGZhaWxlZCBlcnI6ICVkIiwKKwkJICAgICAgIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWlmIChyZXQgIT0gMHgwMTAxKSB7CisJCVBERUJVRyhEX0VSUnxEX0NPTkYsCisJCQkiQWZ0ZXIgdmVjdG9yIHJlYWQgcmV0dXJucyAweCUwNHggc2hvdWxkIGJlIDB4MDEwMSIsCisJCQlyZXQpOworCX0KKworCXJldCA9IHJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHgwNiwgMHgxNiwgMHgwYSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDA1LCAweGMyLCAweDEyKTsKIAogCS8qIG5lY2Vzc2FyeSBiZWNhdXNlIHdpdGhvdXQgaXQgd2UgY2FuIHNlZSBzdHJlYW0KIAkgKiBvbmx5IG9uY2UgYWZ0ZXIgbG9hZGluZyBtb2R1bGUgKi8KIAkvKiBzdG9wcGluZyB1c2IgcmVnaXN0ZXJzIFRvbWFzeiBjaGFuZ2UgKi8KLQlyZWdfd3JpdGUoZGV2LCAweDAyLCAweDAsIDB4MCk7Ci0Jc3dpdGNoIChnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdikgewotCWNhc2UgMDoKLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwMCwgMHgwMCk7Ci0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDYsIDB4MTApOwotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDA3LCAweDEwKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDAwLCAweDAxKTsKLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwNiwgMHgxYSk7Ci0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDcsIDB4MWEpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDAsIDB4MDIpOwotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDA2LCAweDFjKTsKLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwNywgMHgxZCk7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwMCwgMHgwNCk7Ci0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDYsIDB4MzQpOwotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDA3LCAweDM0KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLS8qCWNhc2UgNTogKi8KLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwMCwgMHgwNSk7Ci0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDYsIDB4NDApOwotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDA3LCAweDQwKTsKLQkJYnJlYWs7Ci0JfQotLyogRW5hYmxlIElTTyBwYWNrZXQgbWFjaGluZSAtIHNob3VsZCB3ZSBkbyB0aGlzIGhlcmUgb3IgaW4gSVNPQyBpbml0ID8gKi8KKwlyZWdfd3JpdGUoZGV2LCAweDAyLCAweDAwLCAweDAwKTsKKworCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKKwlyZWdfd3JpdGUoZGV2LCBTUENBNTBYX1JFR19DT01QUkVTUywgMHgwMCwgbW9kZV90Ylttb2RlXVswXSk7CisJcmVnX3dyaXRlKGRldiwgU1BDQTUwWF9SRUdfQ09NUFJFU1MsIDB4MDYsIG1vZGVfdGJbbW9kZV1bMV0pOworCXJlZ193cml0ZShkZXYsIFNQQ0E1MFhfUkVHX0NPTVBSRVNTLCAweDA3LCBtb2RlX3RiW21vZGVdWzJdKTsKKwogCXJldCA9IHJlZ193cml0ZShkZXYsIFNQQ0E1MFhfUkVHX1VTQiwKIAkJCSBTUENBNTBYX1VTQl9DVFJMLAogCQkJIFNQQ0E1MFhfQ1VTQl9FTkFCTEUpOwogCi0vKglyZWdfd3JpdGUoZGV2LCAweDUsIDB4MCwgMHgwKTsgKi8KLS8qCXJlZ193cml0ZShkZXYsIDB4NSwgMHgwLCAweDEpOyAqLwotLyoJcmVnX3dyaXRlKGRldiwgMHg1LCAweDExLCAweDIpOyAqLworCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc1MCwxNSArNzMyLDE1IEBACiAKIAkvKiBUaGlzIG1heWJlIHJlc2V0IG9yIHBvd2VyIGNvbnRyb2wgKi8KIAlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDMsIDB4MDMsIDB4MjApOwotCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHgwMywgMHgwMSwgMHgwKTsKLQlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDMsIDB4MDAsIDB4MSk7Ci0JcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDA1LCAweDEwLCAweDEpOwotCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHgwNSwgMHgxMSwgMHhmKTsKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDMsIDB4MDEsIDB4MDApOworCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHgwMywgMHgwMCwgMHgwMSk7CisJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDA1LCAweDEwLCAweDAxKTsKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDUsIDB4MTEsIDB4MGYpOwogfQogCiBzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAkvKiB0YXJnZXQgKi8KLQkJCV9fdTggKmRhdGEsCQkJLyogaXNvYyBwYWNrZXQgKi8KKwkJCXU4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCiAJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCiB7CiAJc3dpdGNoIChkYXRhWzBdKSB7CkBAIC03NzEsNyArNzUzLDYgQEAKIAkJCQlkYXRhLCBsZW4pOwogCQlicmVhazsKIAljYXNlIDB4ZmY6CQkJLyogZHJvcCAqLwotLyoJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOyAqLwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkYXRhICs9IDE7CkBAIC03ODIsMjQgKzc2Myw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlfX3U4IGJyaWdodG5lc3MgPSBzZC0+YnJpZ2h0bmVzczsKLQlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDUsIDB4MDAsICgyNTUgLSBicmlnaHRuZXNzKSA+PiA2KTsKLQlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDUsIDB4MDEsICgyNTUgLSBicmlnaHRuZXNzKSA8PCAyKTsKLQotfQotc3RhdGljIHZvaWQgZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0Jc2QtPmJyaWdodG5lc3MgPSAyNTUKLQkJLSAoKHJlZ19yZWFkKGdzcGNhX2RldiwgNSwgMHgwMSwgMSkgPj4gMikKLQkJCSsgKHJlZ19yZWFkKGdzcGNhX2RldiwgNSwgMHgwLCAxKSA8PCA2KSk7Ci19Ci0KIHN0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC04MTQsNyArNzc3LDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5icmlnaHRuZXNzOwogCXJldHVybiAwOwogfQpAQCAtODYzLDggKzgyNSwxMSBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jCmluZGV4IDk2ZTI1MTIuLjNhMGM4OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jCkBAIC0xOTMsMjQgKzE5Myw2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHNwY2E1MDZfUmVhZEkyYyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fdTE2IHJlZykKLXsKLQlpbnQgcmV0cnkgPSA2MDsKLQotCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDA3LCBTQUE3MTEzX0kyQ19CQVNFX1dSSVRFLCAweDAwMDQpOwotCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDA3LCByZWcsIDB4MDAwMSk7Ci0JcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4MDcsIDB4MDEsIDB4MDAwMik7Ci0Jd2hpbGUgKC0tcmV0cnkpIHsKLQkJcmVnX3IoZ3NwY2FfZGV2LCAweDA3LCAweDAwMDMsIDIpOwotCQlpZiAoKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSB8IGdzcGNhX2Rldi0+dXNiX2J1ZlsxXSkgPT0gMHgwMCkKLQkJCWJyZWFrOwotCX0KLQlpZiAocmV0cnkgPT0gMCkKLQkJcmV0dXJuIC0xOwotCXJlZ19yKGdzcGNhX2RldiwgMHgwNywgMHgwMDAwLCAxKTsKLQlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwotfQotCiBzdGF0aWMgdm9pZCBzcGNhNTA2X1NldE5vcm1lSW5wdXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJCSBfX3UxNiBub3JtZSwKIAkJCQkgX191MTYgY2hhbm5lbCkKQEAgLTMwMyw3ICsyODUsNiBAQAogCXN0cnVjdCBjYW0gKmNhbTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOwogCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHZnYV9tb2RlIC8gc2l6ZW9mIHZnYV9tb2RlWzBdOwogCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbU0RfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKQEAgLTU5NiwxMyArNTc3LDYgQEAKIAlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMSwgMHgwOSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNkLT5icmlnaHRuZXNzID0gc3BjYTUwNl9SZWFkSTJjKGdzcGNhX2RldiwgU0FBNzExM19icmlnaHQpOwotfQotCiBzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtNjEyLDEzICs1ODYsNiBAQAogCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAxLCAweDA5KTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNkLT5jb250cmFzdCA9IHNwY2E1MDZfUmVhZEkyYyhnc3BjYV9kZXYsIFNBQTcxMTNfY29udHJhc3QpOwotfQotCiBzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTYyOCwxMyArNTk1LDYgQEAKIAlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMSwgMHgwOSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0Jc2QtPmNvbG9ycyA9IHNwY2E1MDZfUmVhZEkyYyhnc3BjYV9kZXYsIFNBQTcxMTNfc2F0dXJhdGlvbik7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGh1ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtNjQ0LDEzICs2MDQsNiBAQAogCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAxLCAweDA5KTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0aHVlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlzZC0+aHVlID0gc3BjYTUwNl9SZWFkSTJjKGdzcGNhX2RldiwgU0FBNzExM19odWUpOwotfQotCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtNjY1LDcgKzYxOCw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKIAlyZXR1cm4gMDsKIH0KQEAgLTY4NCw3ICs2MzYsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5jb250cmFzdDsKIAlyZXR1cm4gMDsKIH0KQEAgLTcwMyw3ICs2NTQsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGNvbG9ycyhnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+Y29sb3JzOwogCXJldHVybiAwOwogfQpAQCAtNzIyLDcgKzY3Miw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0aHVlKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5odWU7CiAJcmV0dXJuIDA7CiB9CkBAIC03NzIsOCArNzIxLDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCmluZGV4IGJlNWQ3NDAuLmFkYWNmODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCkBAIC0xMDEsOCArMTAxLDcgQEAKICAqIEluaXRpYWxpemF0aW9uIGRhdGE6IHRoaXMgaXMgdGhlIGZpcnN0IHNldC11cCBkYXRhIHdyaXR0ZW4gdG8gdGhlCiAgKiBkZXZpY2UgKGJlZm9yZSB0aGUgb3BlbiBkYXRhKS4KICAqLwotc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDhfaW5pdF9kYXRhW11bM10gPQotI2RlZmluZSBJR04oeCkJCQkvKiBub3RoaW5nICovCitzdGF0aWMgY29uc3QgdTE2IHNwY2E1MDhfaW5pdF9kYXRhW11bMl0gPQogewogCS8qICBsaW5lICAgVVJCICAgICAgdmFsdWUsIGluZGV4ICovCiAJLyogNDQyNzQgIDE4MDQgKi8gezB4MDAwMCwgMHg4NzBifSwKQEAgLTU4OSwxMSArNTg4LDEwIEBACiAJe30KIH07CiAKLQogLyoKICAqIEluaXRpYWxpemF0aW9uIGRhdGEgZm9yIEludGVsIEVhc3lQQyBDYW1lcmEgQ1MxMTAKICAqLwotc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDhjczExMF9pbml0X2RhdGFbXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MTYgc3BjYTUwOGNzMTEwX2luaXRfZGF0YVtdWzJdID0gewogCXsweDAwMDAsIDB4ODcwYn0sIC8qIFJlc2V0IENUTDMgKi8KIAl7MHgwMDAzLCAweDgxMTF9LCAvKiBTb2Z0IFJlc2V0IGNvbXByZXNzaW9uLCBtZW1vcnksIFRHICYgQ0RTUCAqLwogCXsweDAwMDAsIDB4ODExMX0sIC8qIE5vcm1hbCBvcGVyYXRpb24gb24gcmVzZXQgKi8KQEAgLTY3Nyw3ICs2NzUsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3QgX191MTYgc3BjYTUwOF9zaWdodGNhbV9pbml0X2RhdGFbXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MTYgc3BjYTUwOF9zaWdodGNhbV9pbml0X2RhdGFbXVsyXSA9IHsKIC8qIFRoaXMgbGluZSBzZWVtcyB0byBzZXR1cCB0aGUgZnJhbWUvY2FudmFzICovCiAJLyozNjggICovIHsweDAwMGYsIDB4ODQwMn0sCiAKQEAgLTc2MCw3ICs3NTgsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3QgX191MTYgc3BjYTUwOF9zaWdodGNhbTJfaW5pdF9kYXRhW11bM10gPSB7CitzdGF0aWMgY29uc3QgdTE2IHNwY2E1MDhfc2lnaHRjYW0yX2luaXRfZGF0YVtdWzJdID0gewogLyogMzUgKi8gezB4MDAyMCwgMHg4MTEyfSwKIAogLyogMzYgKi8gezB4MDAwZiwgMHg4NDAyfSwKQEAgLTExMDcsNyArMTEwNSw3IEBACiAvKgogICogSW5pdGlhbGl6YXRpb24gZGF0YSBmb3IgQ3JlYXRpdmUgV2ViY2FtIFZpc3RhCiAgKi8KLXN0YXRpYyBjb25zdCBfX3UxNiBzcGNhNTA4X3Zpc3RhX2luaXRfZGF0YVtdWzNdID0geworc3RhdGljIGNvbnN0IHUxNiBzcGNhNTA4X3Zpc3RhX2luaXRfZGF0YVtdWzJdID0gewogCXsweDAwMDgsIDB4ODIwMH0sCS8qIENsZWFyIHJlZ2lzdGVyICovCiAJezB4MDAwMCwgMHg4NzBifSwJLyogUmVzZXQgQ1RMMyAqLwogCXsweDAwMjAsIDB4ODExMn0sCS8qIFZpZGVvIERyb3AgcGFja2V0IGVuYWJsZSAqLwpAQCAtMTMwOSwxOCArMTMwNywxOCBAQAogCiAJezB4MDA1MCwgMHg4NzAzfSwKIAl7MHgwMDAyLCAweDg3MDR9LAkvKiBFeHRlcm5hbCBpbnB1dCBDS0l4MSAqLwotCXsweDAwMDEsIDB4ODcwQ30sCS8qIFNlbGVjdCBDS094MiBvdXRwdXQgKi8KLQl7MHgwMDlBLCAweDg2MDB9LAkvKiBMaW5lIG1lbW9yeSBSZWFkIENvdW50ZXIgKEwpICovCisJezB4MDAwMSwgMHg4NzBjfSwJLyogU2VsZWN0IENLT3gyIG91dHB1dCAqLworCXsweDAwOWEsIDB4ODYwMH0sCS8qIExpbmUgbWVtb3J5IFJlYWQgQ291bnRlciAoTCkgKi8KIAl7MHgwMDAxLCAweDg2MDZ9LCAgLyogMSBMaW5lIG1lbW9yeSBSZWFkIENvdW50ZXIgKEgpIFJlc3VsdDogKGQpNDEwICovCiAJezB4MDAyMywgMHg4NjAxfSwKIAl7MHgwMDEwLCAweDg2MDJ9LAotCXsweDAwMEEsIDB4ODYwM30sCisJezB4MDAwYSwgMHg4NjAzfSwKIAl7MHgwMDlBLCAweDg2MDB9LAotCXsweDAwMDEsIDB4ODY1Qn0sCS8qIDEgSG9yaXpvbnRhbCBPZmZzZXQgZm9yIFZhbGlkIFBpeGVsKEwpICovCi0JezB4MDAwMywgMHg4NjVDfSwJLyogVmVydGljYWwgb2Zmc2V0IGZvciB2YWxpZCBsaW5lcyAoTCkgKi8KLQl7MHgwMDU4LCAweDg2NUR9LAkvKiBIb3Jpem9udGFsIHZhbGlkIHBpeGVscyB3aW5kb3cgKEwpICovCi0JezB4MDA0OCwgMHg4NjVFfSwJLyogVmVydGljYWwgdmFsaWQgbGluZXMgd2luZG93IChMKSAqLwotCXsweDAwMDAsIDB4ODY1Rn0sCisJezB4MDAwMSwgMHg4NjVifSwJLyogMSBIb3Jpem9udGFsIE9mZnNldCBmb3IgVmFsaWQgUGl4ZWwoTCkgKi8KKwl7MHgwMDAzLCAweDg2NWN9LAkvKiBWZXJ0aWNhbCBvZmZzZXQgZm9yIHZhbGlkIGxpbmVzIChMKSAqLworCXsweDAwNTgsIDB4ODY1ZH0sCS8qIEhvcml6b250YWwgdmFsaWQgcGl4ZWxzIHdpbmRvdyAoTCkgKi8KKwl7MHgwMDQ4LCAweDg2NWV9LAkvKiBWZXJ0aWNhbCB2YWxpZCBsaW5lcyB3aW5kb3cgKEwpICovCisJezB4MDAwMCwgMHg4NjVmfSwKIAogCXsweDAwMDYsIDB4ODY2MH0sCiAJCSAgICAvKiBFbmFibGUgbmliYmxlIGRhdGEgaW5wdXQsIHNlbGVjdCBuaWJibGUgaW5wdXQgb3JkZXIgKi8KQEAgLTEzMjgsNjMgKzEzMjYsNjMgQEAKIAl7MHgwMDEzLCAweDg2MDh9LAkvKiBBMTEgQ29lZmljaWVudHMgZm9yIGNvbG9yIGNvcnJlY3Rpb24gKi8KIAl7MHgwMDI4LCAweDg2MDl9LAogCQkgICAgLyogTm90ZTogdGhlc2UgdmFsdWVzIGFyZSBjb25maXJtZWQgYXQgdGhlIGVuZCBvZiBhcnJheSAqLwotCXsweDAwMDUsIDB4ODYwQX0sCS8qIC4uLiAqLwotCXsweDAwMjUsIDB4ODYwQn0sCi0JezB4MDBFMSwgMHg4NjBDfSwKLQl7MHgwMEZBLCAweDg2MER9LAotCXsweDAwRjQsIDB4ODYwRX0sCi0JezB4MDBFOCwgMHg4NjBGfSwKKwl7MHgwMDA1LCAweDg2MGF9LAkvKiAuLi4gKi8KKwl7MHgwMDI1LCAweDg2MGJ9LAorCXsweDAwZTEsIDB4ODYwY30sCisJezB4MDBmYSwgMHg4NjBEfSwKKwl7MHgwMGY0LCAweDg2MGV9LAorCXsweDAwZTgsIDB4ODYwZn0sCiAJezB4MDAyNSwgMHg4NjEwfSwJLyogQTMzIENvZWYuICovCi0JezB4MDBGQywgMHg4NjExfSwJLyogV2hpdGUgYmFsYW5jZSBvZmZzZXQ6IFIgKi8KKwl7MHgwMGZjLCAweDg2MTF9LAkvKiBXaGl0ZSBiYWxhbmNlIG9mZnNldDogUiAqLwogCXsweDAwMDEsIDB4ODYxMn0sCS8qIFdoaXRlIGJhbGFuY2Ugb2Zmc2V0OiBHciAqLwotCXsweDAwRkUsIDB4ODYxM30sCS8qIFdoaXRlIGJhbGFuY2Ugb2Zmc2V0OiBCICovCisJezB4MDBmZSwgMHg4NjEzfSwJLyogV2hpdGUgYmFsYW5jZSBvZmZzZXQ6IEIgKi8KIAl7MHgwMDAwLCAweDg2MTR9LAkvKiBXaGl0ZSBiYWxhbmNlIG9mZnNldDogR2IgKi8KIAogCXsweDAwNjQsIDB4ODY1MX0sCS8qIFIgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAoTCkgKi8KIAl7MHgwMDQwLCAweDg2NTJ9LAkvKiBHciBnYWluIGZvciB3aGl0ZSBiYWxhbmNlIChMKSAqLwogCXsweDAwNjYsIDB4ODY1M30sCS8qIEIgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAoTCkgKi8KIAl7MHgwMDQwLCAweDg2NTR9LAkvKiBHYiBnYWluIGZvciB3aGl0ZSBiYWxhbmNlIChMKSAqLwotCXsweDAwMDEsIDB4ODYzRn0sCS8qIEVuYWJsZSBmaXhlZCBnYW1tYSBjb3JyZWN0aW9uICovCisJezB4MDAwMSwgMHg4NjNmfSwJLyogRW5hYmxlIGZpeGVkIGdhbW1hIGNvcnJlY3Rpb24gKi8KIAotCXsweDAwQTEsIDB4ODY1Nn0sCS8qIFNpemUgLSBXaW5kb3cxOiAyNTZ4MjU2LCBXaW5kb3cyOiAxMjh4MTI4ICovCisJezB4MDBhMSwgMHg4NjU2fSwJLyogU2l6ZSAtIFdpbmRvdzE6IDI1NngyNTYsIFdpbmRvdzI6IDEyOHgxMjggKi8KIAkvKiBVViBkaXZpc2lvbjogVVYgbm8gY2hhbmdlLCBFbmFibGUgTmV3IGVkZ2UgZW5oYW5jZW1lbnQgKi8KIAl7MHgwMDE4LCAweDg2NTd9LAkvKiBFZGdlIGdhaW4gaGlnaCB0aHJlc2hvbGQgKi8KIAl7MHgwMDIwLCAweDg2NTh9LAkvKiBFZGdlIGdhaW4gbG93IHRocmVzaG9sZCAqLwogCXsweDAwMEEsIDB4ODY1OX0sCS8qIEVkZ2UgYmFuZHdpZHRoIGhpZ2ggdGhyZXNob2xkICovCi0JezB4MDAwNSwgMHg4NjVBfSwJLyogRWRnZSBiYW5kd2lkdGggbG93IHRocmVzaG9sZCAqLworCXsweDAwMDUsIDB4ODY1YX0sCS8qIEVkZ2UgYmFuZHdpZHRoIGxvdyB0aHJlc2hvbGQgKi8KIAl7MHgwMDY0LCAweDg2MDd9LAkvKiBVViBmaWx0ZXIgZW5hYmxlICovCiAKIAl7MHgwMDE2LCAweDg2NjB9LAotCXsweDAwMDAsIDB4ODZCMH0sCS8qIEJhZCBwaXhlbHMgY29tcGVuc2F0aW9uIGFkZHJlc3MgKi8KLQl7MHgwMERDLCAweDg2QjF9LAkvKiBYIGNvb3JkIGZvciBiYWQgcGl4ZWxzIGNvbXBlbnNhdGlvbiAoTCkgKi8KLQl7MHgwMDAwLCAweDg2QjJ9LAotCXsweDAwMDksIDB4ODZCM30sCS8qIFkgY29vcmQgZm9yIGJhZCBwaXhlbHMgY29tcGVuc2F0aW9uIChMKSAqLwotCXsweDAwMDAsIDB4ODZCNH0sCisJezB4MDAwMCwgMHg4NmIwfSwJLyogQmFkIHBpeGVscyBjb21wZW5zYXRpb24gYWRkcmVzcyAqLworCXsweDAwZGMsIDB4ODZiMX0sCS8qIFggY29vcmQgZm9yIGJhZCBwaXhlbHMgY29tcGVuc2F0aW9uIChMKSAqLworCXsweDAwMDAsIDB4ODZiMn0sCisJezB4MDAwOSwgMHg4NmIzfSwJLyogWSBjb29yZCBmb3IgYmFkIHBpeGVscyBjb21wZW5zYXRpb24gKEwpICovCisJezB4MDAwMCwgMHg4NmI0fSwKIAotCXsweDAwMDEsIDB4ODZCMH0sCi0JezB4MDBGNSwgMHg4NkIxfSwKLQl7MHgwMDAwLCAweDg2QjJ9LAotCXsweDAwQzYsIDB4ODZCM30sCi0JezB4MDAwMCwgMHg4NkI0fSwKKwl7MHgwMDAxLCAweDg2YjB9LAorCXsweDAwZjUsIDB4ODZiMX0sCisJezB4MDAwMCwgMHg4NmIyfSwKKwl7MHgwMGM2LCAweDg2YjN9LAorCXsweDAwMDAsIDB4ODZiNH0sCiAKLQl7MHgwMDAyLCAweDg2QjB9LAotCXsweDAwMUMsIDB4ODZCMX0sCi0JezB4MDAwMSwgMHg4NkIyfSwKLQl7MHgwMEQ3LCAweDg2QjN9LAotCXsweDAwMDAsIDB4ODZCNH0sCisJezB4MDAwMiwgMHg4NmIwfSwKKwl7MHgwMDFjLCAweDg2YjF9LAorCXsweDAwMDEsIDB4ODZiMn0sCisJezB4MDBkNywgMHg4NmIzfSwKKwl7MHgwMDAwLCAweDg2YjR9LAogCi0JezB4MDAwMywgMHg4NkIwfSwKLQl7MHgwMDFDLCAweDg2QjF9LAotCXsweDAwMDEsIDB4ODZCMn0sCi0JezB4MDBEOCwgMHg4NkIzfSwKLQl7MHgwMDAwLCAweDg2QjR9LAorCXsweDAwMDMsIDB4ODZiMH0sCisJezB4MDAxYywgMHg4NmIxfSwKKwl7MHgwMDAxLCAweDg2YjJ9LAorCXsweDAwZDgsIDB4ODZiM30sCisJezB4MDAwMCwgMHg4NmI0fSwKIAotCXsweDAwMDQsIDB4ODZCMH0sCi0JezB4MDAxRCwgMHg4NkIxfSwKLQl7MHgwMDAxLCAweDg2QjJ9LAotCXsweDAwRDgsIDB4ODZCM30sCi0JezB4MDAwMCwgMHg4NkI0fSwKLQl7MHgwMDFFLCAweDg2NjB9LAorCXsweDAwMDQsIDB4ODZiMH0sCisJezB4MDAxZCwgMHg4NmIxfSwKKwl7MHgwMDAxLCAweDg2YjJ9LAorCXsweDAwZDgsIDB4ODZiM30sCisJezB4MDAwMCwgMHg4NmI0fSwKKwl7MHgwMDFlLCAweDg2NjB9LAogCiAJLyogUkVBRCB7IDAsIDB4MDAwMCwgMHg4NjA4IH0gLT4KIAkJMDAwMDogMTMgICovCkBAIC0xNDQ5LDcgKzE0NDcsNyBAQAogfQogCiBzdGF0aWMgaW50IHdyaXRlX3ZlY3RvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQljb25zdCBfX3UxNiBkYXRhW11bM10pCisJCQljb25zdCB1MTYgZGF0YVtdWzJdKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAlpbnQgcmV0LCBpID0gMDsKQEAgLTE0ODcsNyArMTQ4NSw2IEBACiAJUERFQlVHKERfUFJPQkUsICJXaW5kb3cgMSBhdmVyYWdlIGx1bWluYW5jZTogJWQiLCBkYXRhMSk7CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCWNhbS0+Y2FtX21vZGUgPSBzaWZfbW9kZTsKIAljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc2lmX21vZGUpOwogCkBAIC0xNTkzLDEzICsxNTkwLDYgQEAKIAlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4ODY1NCwgYnJpZ2h0bmVzcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNkLT5icmlnaHRuZXNzID0gcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDg2NTEpOwotfQotCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMTYxNCw3ICsxNjA0LDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5icmlnaHRuZXNzOwogCXJldHVybiAwOwogfQpAQCAtMTY2Niw4ICsxNjU1LDExIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKaW5kZXggM2M5Mjg4MC4uYzk5YzVlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKQEAgLTE0MSwzOCArMTQxLDM4IEBACiAjZGVmaW5lIFNQQ0E1NjFfT0ZGU0VUX1dJTjFHQkFWRSAxNAogI2RlZmluZSBTUENBNTYxX09GRlNFVF9GUkVRIDE1CiAjZGVmaW5lIFNQQ0E1NjFfT0ZGU0VUX1ZTWU5DIDE2Ci0jZGVmaW5lIFNQQ0E1NjFfT0ZGU0VUX0RBVEEgMQogI2RlZmluZSBTUENBNTYxX0lOREVYX0kyQ19CQVNFIDB4ODgwMAogI2RlZmluZSBTUENBNTYxX1NOQVBCSVQgMHgyMAogI2RlZmluZSBTUENBNTYxX1NOQVBDVFJMIDB4NDAKIAotc3RhdGljIGNvbnN0IF9fdTE2IHJldjcyYV9pbml0X2RhdGExW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTE2IHJldjcyYV9yZXNldFtdWzJdID0gewogCXsweDAwMDAsIDB4ODExNH0sCS8qIFNvZnR3YXJlIEdQSU8gb3V0cHV0IGRhdGEgKi8KIAl7MHgwMDAxLCAweDgxMTR9LAkvKiBTb2Z0d2FyZSBHUElPIG91dHB1dCBkYXRhICovCiAJezB4MDAwMCwgMHg4MTEyfSwJLyogU29tZSBraW5kIG9mIHJlc2V0ICovCisJe30KK307CitzdGF0aWMgY29uc3QgX191MTYgcmV2NzJhX2luaXRfZGF0YTFbXVsyXSA9IHsKIAl7MHgwMDAzLCAweDg3MDF9LAkvKiBQQ0xLIGNsb2NrIGRlbGF5IGFkanVzdG1lbnQgKi8KIAl7MHgwMDAxLCAweDg3MDN9LAkvKiBIU1lOQyBmcm9tIGNtb3MgaW52ZXJ0ZWQgKi8KIAl7MHgwMDExLCAweDgxMTh9LAkvKiBFbmFibGUgYW5kIGNvbmYgc2Vuc29yICovCiAJezB4MDAwMSwgMHg4MTE4fSwJLyogQ29uZiBzZW5zb3IgKi8KIAl7MHgwMDkyLCAweDg4MDR9LAkvKiBJIGtub3cgbm90aGluZyBhYm91dCB0aGVzZSAqLwogCXsweDAwMTAsIDB4ODgwMn0sCS8qIDB4ODh4eCByZWdpc3RlcnMsIHNvIEkgd29uJ3QgKi8KLQl7MHgwMDBkLCAweDg4MDV9LAkvKiBzZW5zb3IgZGVmYXVsdCBzZXR0aW5nICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3QgX191MTYgcmV2NzJhX2luaXRfc2Vuc29yMVtdWzJdID0gewotCQkJCS8qIG1zLXdpbiB2YWx1ZXMgKi8KLQl7MHgwMDAxLCAweDAwMTh9LAkvKiAweDAxIDwtIDB4MGQgKi8KLQl7MHgwMDAyLCAweDAwNjV9LAkvKiAweDAyIDwtIDB4MTggKi8KLQl7MHgwMDA0LCAweDAxMjF9LAkvKiAweDA0IDwtIDB4MDE2NSAqLwotCXsweDAwMDUsIDB4MDBhYX0sCS8qIDB4MDUgPC0gMHgyMSAqLwotCXsweDAwMDcsIDB4MDAwNH0sCS8qIDB4MDcgPC0gMHhhYSAqLwotCXsweDAwMjAsIDB4MTUwMn0sCS8qIDB4MjAgPC0gMHgxNTA0ICovCi0JezB4MDAzOSwgMHgwMDEwfSwJLyogMHgzOSA8LSAweDAyICovCi0JezB4MDAzNSwgMHgwMDQ5fSwJLyogMHgzNSA8LSAweDEwICovCi0JezB4MDAwOSwgMHgxMDBifSwJLyogMHgwOSA8LSAweDEwNDkgKi8KLQl7MHgwMDI4LCAweDAwMGZ9LAkvKiAweDI4IDwtIDB4MGIgKi8KLQl7MHgwMDNiLCAweDAwM2N9LAkvKiAweDNiIDwtIDB4MGYgKi8KLQl7MHgwMDNjLCAweDAwMDB9LAkvKiAweDNjIDwtIDB4MDAgKi8KK3N0YXRpYyBjb25zdCB1MTYgcmV2NzJhX2luaXRfc2Vuc29yMVtdWzJdID0geworCXsweDAwMDEsIDB4MDAwZH0sCisJezB4MDAwMiwgMHgwMDE4fSwKKwl7MHgwMDA0LCAweDAxNjV9LAorCXsweDAwMDUsIDB4MDAyMX0sCisJezB4MDAwNywgMHgwMGFhfSwKKwl7MHgwMDIwLCAweDE1MDR9LAorCXsweDAwMzksIDB4MDAwMn0sCisJezB4MDAzNSwgMHgwMDEwfSwKKwl7MHgwMDA5LCAweDEwNDl9LAorCXsweDAwMjgsIDB4MDAwYn0sCisJezB4MDAzYiwgMHgwMDBmfSwKKwl7MHgwMDNjLCAweDAwMDB9LAogCXt9CiB9Owogc3RhdGljIGNvbnN0IF9fdTE2IHJldjcyYV9pbml0X2RhdGEyW11bMl0gPSB7CkBAIC0xOTAsMTUgKzE5MCwxMCBAQAogCXsweDAwMDIsIDB4ODIwMX0sCS8qIE91dHB1dCBhZGRyZXNzIGZvciByL3cgc2VyaWFsIEVFUFJPTSAqLwogCXsweDAwMDgsIDB4ODIwMH0sCS8qIENsZWFyIHZhbGlkIGJpdCBmb3Igc2VyaWFsIEVFUFJPTSAqLwogCXsweDAwMDEsIDB4ODIwMH0sCS8qIE9wck1vZGUgdG8gYmUgZXhlY3V0ZWQgYnkgaGFyZHdhcmUgKi8KLQl7MHgwMDA3LCAweDgyMDF9LAkvKiBPdXRwdXQgYWRkcmVzcyBmb3Igci93IHNlcmlhbCBFRVBST00gKi8KLQl7MHgwMDA4LCAweDgyMDB9LAkvKiBDbGVhciB2YWxpZCBiaXQgZm9yIHNlcmlhbCBFRVBST00gKi8KLQl7MHgwMDAxLCAweDgyMDB9LAkvKiBPcHJNb2RlIHRvIGJlIGV4ZWN1dGVkIGJ5IGhhcmR3YXJlICovCi0JezB4MDAxMCwgMHg4NjYwfSwJLyogQ29tcGVuc2F0aW9uIG1lbW9yeSBzdHVmZiAqLwotCXsweDAwMTgsIDB4ODY2MH0sCS8qIENvbXBlbnNhdGlvbiBtZW1vcnkgc3R1ZmYgKi8KLQotCXsweDAwMDQsIDB4ODYxMX0sCS8qIFIgb2Zmc2V0IGZvciB3aGl0ZSBiYWxhbmNlICovCi0JezB4MDAwNCwgMHg4NjEyfSwJLyogR3Igb2Zmc2V0IGZvciB3aGl0ZSBiYWxhbmNlICovCi0JezB4MDAwNywgMHg4NjEzfSwJLyogQiBvZmZzZXQgZm9yIHdoaXRlIGJhbGFuY2UgKi8KKy8qIGZyb20gbXMtd2luICovCisJezB4MDAwMCwgMHg4NjExfSwJLyogUiBvZmZzZXQgZm9yIHdoaXRlIGJhbGFuY2UgKi8KKwl7MHgwMGZkLCAweDg2MTJ9LAkvKiBHciBvZmZzZXQgZm9yIHdoaXRlIGJhbGFuY2UgKi8KKwl7MHgwMDAzLCAweDg2MTN9LAkvKiBCIG9mZnNldCBmb3Igd2hpdGUgYmFsYW5jZSAqLwogCXsweDAwMDAsIDB4ODYxNH0sCS8qIEdiIG9mZnNldCBmb3Igd2hpdGUgYmFsYW5jZSAqLwogLyogZnJvbSBtcy13aW4gKi8KIAl7MHgwMDM1LCAweDg2NTF9LAkvKiBSIGdhaW4gZm9yIHdoaXRlIGJhbGFuY2UgKi8KQEAgLTIwNiw4ICsyMDEsOCBAQAogCXsweDAwNWYsIDB4ODY1M30sCS8qIEIgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAqLwogCXsweDAwNDAsIDB4ODY1NH0sCS8qIEdiIGdhaW4gZm9yIHdoaXRlIGJhbGFuY2UgKi8KIAl7MHgwMDAyLCAweDg1MDJ9LAkvKiBNYXhpbXVtIGF2ZXJhZ2UgYml0IHJhdGUgc3R1ZmYgKi8KLQogCXsweDAwMTEsIDB4ODgwMn0sCisKIAl7MHgwMDg3LCAweDg3MDB9LAkvKiBTZXQgbWFzdGVyIGNsb2NrICg5Nk1oej8/Pz8pICovCiAJezB4MDA4MSwgMHg4NzAyfSwJLyogTWFzdGVyIGNsb2NrIG91dHB1dCBlbmFibGUgKi8KIApAQCAtMjE4LDEwNCArMjEzLDE1IEBACiAJezB4MDAwMywgMHg4NjVjfSwJLyogVmVydGljYWwgb2Zmc2V0IGZvciB2YWxpZCBsaW5lcyAqLwogCXt9CiB9Owotc3RhdGljIGNvbnN0IF9fdTE2IHJldjcyYV9pbml0X3NlbnNvcjJbXVsyXSA9IHsKLQkJCQkvKiBtcy13aW4gdmFsdWVzICovCi0JezB4MDAwMywgMHgwMTIxfSwJLyogMHgwMyA8LSAweDAxIDB4MjEgLy8yODkgKi8KLQl7MHgwMDA0LCAweDAxNjV9LAkvKiAweDA0IDwtIDB4MDEgMHg2NSAvLzM1NyAqLwotCXsweDAwMDUsIDB4MDAyZn0sCS8qIDB4MDUgPC0gMHgyZiAqLwotCXsweDAwMDYsIDB4MDAwMH0sCS8qIDB4MDYgPC0gMCAqLwotCXsweDAwMGEsIDB4MDAwMn0sCS8qIDB4MGEgPC0gMiAqLwotCXsweDAwMDksIDB4MTA2MX0sCS8qIDB4MDkgPC0gMHgxMDYxICovCi0JezB4MDAzNSwgMHgwMDE0fSwJLyogMHgzNSA8LSAweDE0ICovCi0Je30KLX07Ci1zdGF0aWMgY29uc3QgX191MTYgcmV2NzJhX2luaXRfZGF0YTNbXVsyXSA9IHsKLQl7MHgwMDMwLCAweDgxMTJ9LAkvKiBJU08gYW5kIGRyb3AgcGFja2V0IGVuYWJsZSAqLwotLypmaXhtZTogc2hvdWxkIHN0b3AgaGVyZSovCi0JezB4MDAwMCwgMHg4MTEyfSwJLyogU29tZSBraW5kIG9mIHJlc2V0ID8/Pz8gKi8KLQl7MHgwMDA5LCAweDgxMTh9LAkvKiBFbmFibGUgc2Vuc29yIGFuZCBzZXQgc3RhbmRieSAqLwotCXsweDAwMDAsIDB4ODExNH0sCS8qIFNvZnR3YXJlIEdQSU8gb3V0cHV0IGRhdGEgKi8KLQl7MHgwMDAwLCAweDgxMTR9LAkvKiBTb2Z0d2FyZSBHUElPIG91dHB1dCBkYXRhICovCi0JezB4MDAwMSwgMHg4MTE0fSwJLyogU29mdHdhcmUgR1BJTyBvdXRwdXQgZGF0YSAqLwotCXsweDAwMDAsIDB4ODExMn0sCS8qIFNvbWUga2luZCBvZiByZXNldCA/Pz8gKi8KLQl7MHgwMDAzLCAweDg3MDF9LAotCXsweDAwMDEsIDB4ODcwM30sCi0JezB4MDAxMSwgMHg4MTE4fSwKLQl7MHgwMDAxLCAweDgxMTh9LAotCS8qKioqKioqKioqKioqKiovCi0JezB4MDA5MiwgMHg4ODA0fSwKLQl7MHgwMDEwLCAweDg4MDJ9LAotCXsweDAwMGQsIDB4ODgwNX0sCi0JezB4MDAwMSwgMHg4ODAxfSwKLQl7MHgwMDAwLCAweDg4MDB9LAotCXsweDAwMTgsIDB4ODgwNX0sCi0JezB4MDAwMiwgMHg4ODAxfSwKLQl7MHgwMDAwLCAweDg4MDB9LAotCXsweDAwNjUsIDB4ODgwNX0sCi0JezB4MDAwNCwgMHg4ODAxfSwKLQl7MHgwMDAxLCAweDg4MDB9LAotCXsweDAwMjEsIDB4ODgwNX0sCi0JezB4MDAwNSwgMHg4ODAxfSwKLQl7MHgwMDAwLCAweDg4MDB9LAotCXsweDAwYWEsIDB4ODgwNX0sCi0JezB4MDAwNywgMHg4ODAxfSwJLyogbW9kZSAweGFhICovCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDA0LCAweDg4MDV9LAotCXsweDAwMjAsIDB4ODgwMX0sCi0JezB4MDAxNSwgMHg4ODAwfSwJLyogbW9kZSAweDA0MTUgKi8KLQl7MHgwMDAyLCAweDg4MDV9LAotCXsweDAwMzksIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDEwLCAweDg4MDV9LAotCXsweDAwMzUsIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDQ5LCAweDg4MDV9LAotCXsweDAwMDksIDB4ODgwMX0sCi0JezB4MDAxMCwgMHg4ODAwfSwKLQl7MHgwMDBiLCAweDg4MDV9LAotCXsweDAwMjgsIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDBmLCAweDg4MDV9LAotCXsweDAwM2IsIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDAwLCAweDg4MDV9LAotCXsweDAwM2MsIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDAyLCAweDg1MDJ9LAotCXsweDAwMzksIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODA1fSwKLQl7MHgwMDAwLCAweDg4MDB9LAotCi0JezB4MDA4NywgMHg4NzAwfSwJLyogb3ZlcndyaXRlIGJ5IHN0YXJ0ICovCi0JezB4MDA4MSwgMHg4NzAyfSwKLQl7MHgwMDAwLCAweDg1MDB9LAotLyoJezB4MDAxMCwgMHg4NTAwfSwgIC0tIFByZXZpb3VzIGxpbmUgd2FzIHRoaXMgKi8KLQl7MHgwMDAyLCAweDg2NWJ9LAotCXsweDAwMDMsIDB4ODY1Y30sCi0JLyoqKioqKioqKioqKioqKi8KLQl7MHgwMDAzLCAweDg4MDF9LAkvKiAweDEyMS0+IDI4OSAqLwotCXsweDAwMjEsIDB4ODgwNX0sCi0JezB4MDAwMSwgMHg4ODAwfSwKLQl7MHgwMDA0LCAweDg4MDF9LAkvKiAweDE2NSAtPiAzNTcgKi8KLQl7MHgwMDY1LCAweDg4MDV9LAotCXsweDAwMDEsIDB4ODgwMH0sCi0JezB4MDAwNSwgMHg4ODAxfSwJLyogMHgyZiAvL2JsYW5raW5nIGNvbnRyb2wgY29sb25uZSAqLwotCXsweDAwMmYsIDB4ODgwNX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDA2LCAweDg4MDF9LAkvKiAweDAwIC8vYmxhbmtpbmcgbW9kZSByb3cgKi8KLQl7MHgwMDAwLCAweDg4MDV9LAotCXsweDAwMDAsIDB4ODgwMH0sCi0JezB4MDAwYSwgMHg4ODAxfSwJLyogMHgwMSAvLzB4MDIgKi8KLQl7MHgwMDAxLCAweDg4MDV9LAotCXsweDAwMDAsIDB4ODgwMH0sCi0JezB4MDAwOSwgMHg4ODAxfSwJLyogMHgxMDYxIC0gc2V0ZXhwb3N1cmUgdGltZXMgJiYgcGl4ZWwgY2xvY2sKK3N0YXRpYyBjb25zdCB1MTYgcmV2NzJhX2luaXRfc2Vuc29yMltdWzJdID0geworCXsweDAwMDMsIDB4MDEyMX0sCisJezB4MDAwNCwgMHgwMTY1fSwKKwl7MHgwMDA1LCAweDAwMmZ9LAkvKiBibGFua2luZyBjb250cm9sIGNvbHVtbiAqLworCXsweDAwMDYsIDB4MDAwMH0sCS8qIGJsYW5raW5nIG1vZGUgcm93Ki8KKwl7MHgwMDBhLCAweDAwMDJ9LAorCXsweDAwMDksIDB4MTA2MX0sCS8qIHNldGV4cG9zdXJlIHRpbWVzICYmIHBpeGVsIGNsb2NrCiAJCQkJICogMDAwMSAwIHwgMDAwIDAxMTAgMDAwMSAqLwotCXsweDAwNjEsIDB4ODgwNX0sCS8qIDYxIDMxICovCi0JezB4MDAwOCwgMHg4ODAwfSwJLyogMDggKi8KLQl7MHgwMDM1LCAweDg4MDF9LAkvKiAweDE0IC0gc2V0IGdhaW4gZ2VuZXJhbCAqLwotCXsweDAwMWYsIDB4ODgwNX0sCS8qIDB4MTQgKi8KLQl7MHgwMDAwLCAweDg4MDB9LAotCXsweDAwMGUsIDB4ODExMn0sCS8qIHdoaXRlIGJhbGFuY2UgLSB3YXMgMzAgKi8KKwl7MHgwMDM1LCAweDAwMTR9LAogCXt9CiB9OwogCkBAIC00NjAsNiArMzY2LDcgQEAKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDg4MDMsIDEpOwogCQlpZiAoIWdzcGNhX2Rldi0+dXNiX2J1ZlswXSkKIAkJCXJldHVybjsKKwkJbXNsZWVwKDEwKTsKIAl9IHdoaWxlICgtLXJldHJ5KTsKIH0KIApAQCAtNDc5LDYgKzM4Niw3IEBACiAJCQlyZWdfcihnc3BjYV9kZXYsIDB4ODgwNSwgMSk7CiAJCQlyZXR1cm4gKChpbnQpIHZhbHVlIDw8IDgpIHwgZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwogCQl9CisJCW1zbGVlcCgxMCk7CiAJfSB3aGlsZSAoLS1yZXRyeSk7CiAJcmV0dXJuIC0xOwogfQpAQCAtNTQxLDcgKzQ0OSw2IEBACiAJfQogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+ZXBhZGRyID0gMHgwMTsKIAlnc3BjYV9kZXYtPm5iYWx0ID0gNyArIDE7CS8qIGNob29zZSBhbHRlcm5hdGUgNyBmaXJzdCAqLwogCiAJc2QtPmNoaXBfcmV2aXNpb24gPSBpZC0+ZHJpdmVyX2luZm87CkBAIC01NzIsMTEgKzQ3OSwxMyBAQAogc3RhdGljIGludCBzZF9pbml0XzcyYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJUERFQlVHKERfU1RSRUFNLCAiQ2hpcCByZXZpc2lvbjogMDcyYSIpOworCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHJldjcyYV9yZXNldCk7CisJbXNsZWVwKDIwMCk7CiAJd3JpdGVfdmVjdG9yKGdzcGNhX2RldiwgcmV2NzJhX2luaXRfZGF0YTEpOwogCXdyaXRlX3NlbnNvcl83MmEoZ3NwY2FfZGV2LCByZXY3MmFfaW5pdF9zZW5zb3IxKTsKIAl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCByZXY3MmFfaW5pdF9kYXRhMik7CiAJd3JpdGVfc2Vuc29yXzcyYShnc3BjYV9kZXYsIHJldjcyYV9pbml0X3NlbnNvcjIpOwotCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHJldjcyYV9pbml0X2RhdGEzKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LT5kZXYsIDB4ODExMiwgMHgzMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTczMSwxMSArNjQwLDE4IEBACiAJaW50IENsY2s7CiAJaW50IG1vZGU7CiAKKwl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCByZXY3MmFfcmVzZXQpOworCW1zbGVlcCgyMDApOworCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHJldjcyYV9pbml0X2RhdGExKTsKKwl3cml0ZV9zZW5zb3JfNzJhKGdzcGNhX2RldiwgcmV2NzJhX2luaXRfc2Vuc29yMSk7CisKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CiAJc3dpdGNoIChtb2RlKSB7CiAJZGVmYXVsdDoKLS8qCWNhc2UgMDoKLQljYXNlIDE6ICovCisJY2FzZSAwOgorCQlDbGNrID0gMHgyNzsJCS8qIG1zLXdpbiAweDg3ICovCisJCWJyZWFrOworCWNhc2UgMToKIAkJQ2xjayA9IDB4MjU7CiAJCWJyZWFrOwogCWNhc2UgMjoKQEAgLTc0NSwxMyArNjYxLDE0IEBACiAJCUNsY2sgPSAweDIxOwogCQlicmVhazsKIAl9Ci0JcmVnX3dfdmFsKGRldiwgMHg4NTAwLCBtb2RlKTsJLyogbW9kZSAqLwogCXJlZ193X3ZhbChkZXYsIDB4ODcwMCwgQ2xjayk7CS8qIDB4MjcgY2xvY2sgKi8KLQlyZWdfd192YWwoZGV2LCAweDgxMTIsIDB4MTAgfCAweDIwKTsKKwlyZWdfd192YWwoZGV2LCAweDg3MDIsIDB4ODEpOworCXJlZ193X3ZhbChkZXYsIDB4ODUwMCwgbW9kZSk7CS8qIG1vZGUgKi8KKwl3cml0ZV9zZW5zb3JfNzJhKGdzcGNhX2RldiwgcmV2NzJhX2luaXRfc2Vuc29yMik7CiAJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIC8qCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsJICogZml4bWU6IGJhZCB2YWx1ZXMgKi8KLQlzZXR3aGl0ZShnc3BjYV9kZXYpOwogCXNldGF1dG9nYWluKGdzcGNhX2Rldik7CisJcmVnX3dfdmFsKGRldiwgMHg4MTEyLCAweDEwIHwgMHgyMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg2NywxMiArNzg0LDExIEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0Jc3dpdGNoIChkYXRhWzBdKSB7CQkJLyogc2VxdWVuY2UgbnVtYmVyICovCisJbGVuLS07CisJc3dpdGNoICgqZGF0YSsrKSB7CQkJLyogc2VxdWVuY2UgbnVtYmVyICovCiAJY2FzZSAwOgkJCQkJLyogc3RhcnQgb2YgZnJhbWUgKi8KIAkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsCiAJCQkJCWRhdGEsIDApOwotCQlkYXRhICs9IFNQQ0E1NjFfT0ZGU0VUX0RBVEE7Ci0JCWxlbiAtPSBTUENBNTYxX09GRlNFVF9EQVRBOwogCQlpZiAoZGF0YVsxXSAmIDB4MTApIHsKIAkJCS8qIGNvbXByZXNzZWQgYmF5ZXIgKi8KIAkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwKQEAgLTg5Myw4ICs4MDksNiBAQAogCWNhc2UgMHhmZjoJCQkvKiBkcm9wIChlbXB0eSBtcGFja2V0cykgKi8KIAkJcmV0dXJuOwogCX0KLQlkYXRhKys7Ci0JbGVuLS07CiAJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwgZGF0YSwgbGVuKTsKIH0KIApAQCAtMTE5Nyw4ICsxMTExLDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRlM2FlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MDUuYwpAQCAtMCwwICsxLDQ1NiBAQAorLyoKKyAqIFNROTA1IHN1YmRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBZGFtIEJha2VyIGFuZCBUaGVvZG9yZSBLaWxnb3JlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogSGlzdG9yeSBhbmQgQWNrbm93bGVkZ21lbnRzCisgKgorICogVGhlIG9yaWdpbmFsIExpbnV4IGRyaXZlciBmb3IgU1E5MDUgYmFzZWQgY2FtZXJhcyB3YXMgd3JpdHRlbiBieQorICogTWFyY2VsbCBMZW5neWVsIGFuZCBmdXJ0ZXIgZGV2ZWxvcGVkIGJ5IG1hbnkgb3RoZXIgY29udHJpYnV0ZXJzCisgKiBhbmQgaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9zcWNhbS8KKyAqCisgKiBUaGlzIGRyaXZlciB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIHJldmVyc2UgZW5naW5lZXJpbmcgd29yayBkb25lIGZvcgorICogdGhhdCBkcml2ZXIgYW5kIGZvciBsaWJncGhvdG8yIGJ1dCBzaGFyZXMgbm8gY29kZSB3aXRoIHRoZW0uCisgKgorICogVGhpcyBkcml2ZXIgaGFzIHVzZWQgYXMgYSBiYXNlIHRoZSBmaW5lcGl4IGRyaXZlciBhbmQgb3RoZXIgZ3NwY2EKKyAqIGJhc2VkIGRyaXZlcnMgYW5kIG1heSBzdGlsbCBjb250YWluIGNvZGUgZnJhZ21lbnRzIHRha2VuIGZyb20gdGhvc2UKKyAqIGRyaXZlcnMuCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAic3E5MDUiCisKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlICJnc3BjYS5oIgorCitNT0RVTEVfQVVUSE9SKCJBZGFtIEJha2VyIDxsaW51eEBiYWtlci1uZXQub3JnLnVrPiwgIgorCQkiVGhlb2RvcmUgS2lsZ29yZSA8a2lsZ290YUBhdWJ1cm4uZWR1PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQS9TUTkwNSBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBEZWZhdWx0IHRpbWVvdXRzLCBpbiBtcyAqLworI2RlZmluZSBTUTkwNV9DTURfVElNRU9VVCA1MDAKKyNkZWZpbmUgU1E5MDVfREFUQV9USU1FT1VUIDEwMDAKKworLyogTWF4aW11bSB0cmFuc2ZlciBzaXplIHRvIHVzZS4gKi8KKyNkZWZpbmUgU1E5MDVfTUFYX1RSQU5TRkVSIDB4ODAwMAorI2RlZmluZSBGUkFNRV9IRUFERVJfTEVOIDY0CisKKy8qIFRoZSBrbm93biBtb2Rlcywgb3IgcmVnaXN0ZXJzLiBUaGVzZSBnbyBpbiB0aGUgInZhbHVlIiBzbG90LiAqLworCisvKiAwMCBpcyAibm9uZSIgb2J2aW91c2x5ICovCisKKyNkZWZpbmUgU1E5MDVfQlVMS19SRUFECTB4MDMJLyogcHJlY2VkZXMgYW55IGJ1bGsgcmVhZCAqLworI2RlZmluZSBTUTkwNV9DT01NQU5ECTB4MDYJLyogcHJlY2VkZXMgdGhlIGNvbW1hbmQgY29kZXMgYmVsb3cgKi8KKyNkZWZpbmUgU1E5MDVfUElORwkweDA3CS8qIHdoZW4gcmVhZGluZyBhbiAiaWRsaW5nIiBjb21tYW5kICovCisjZGVmaW5lIFNROTA1X1JFQURfRE9ORSAweGMwICAgIC8qIGFjayBidWxrIHJlYWQgY29tcGxldGVkICovCisKKy8qIEFueSBub24temVybyB2YWx1ZSBpbiB0aGUgYm90dG9tIDIgYml0cyBvZiB0aGUgMm5kIGJ5dGUgb2YKKyAqIHRoZSBJRCBhcHBlYXJzIHRvIGluZGljYXRlIHRoZSBjYW1lcmEgY2FuIGRvIDY0MCo0ODAuIElmIHRoZQorICogTFNCIG9mIHRoYXQgYnl0ZSBpcyBzZXQgdGhlIGltYWdlIGlzIGp1c3QgdXBzaWRlIGRvd24sIG90aGVyd2lzZQorICogaXQgaXMgcm90YXRlZCAxODAgZGVncmVlcy4gKi8KKyNkZWZpbmUgU1E5MDVfSElSRVNfTUFTSwkweDAwMDAwMzAwCisjZGVmaW5lIFNROTA1X09SSUVOVEFUSU9OX01BU0sJMHgwMDAwMDEwMAorCisvKiBTb21lIGNvbW1hbmQgY29kZXMuIFRoZXNlIGdvIGluIHRoZSAiaW5kZXgiIHNsb3QuICovCisKKyNkZWZpbmUgU1E5MDVfSUQgICAgICAweGYwCS8qIGFza3MgZm9yIG1vZGVsIHN0cmluZyAqLworI2RlZmluZSBTUTkwNV9DT05GSUcgIDB4MjAJLyogZ2V0cyBwaG90byBhbGxvYy4gdGFibGUsIG5vdCB1c2VkIGhlcmUgKi8KKyNkZWZpbmUgU1E5MDVfREFUQSAgICAweDMwCS8qIGFjY2Vzc2VzIHBob3RvIGRhdGEsIG5vdCB1c2VkIGhlcmUgKi8KKyNkZWZpbmUgU1E5MDVfQ0xFQVIgICAweGEwCS8qIGNsZWFyIGV2ZXJ5dGhpbmcgKi8KKyNkZWZpbmUgU1E5MDVfQ0FQVFVSRV9MT1cgIDB4NjAJLyogU3RhcnRzIGNhcHR1cmUgYXQgMTYweDEyMCAqLworI2RlZmluZSBTUTkwNV9DQVBUVVJFX01FRCAgMHg2MQkvKiBTdGFydHMgY2FwdHVyZSBhdCAzMjB4MjQwICovCisjZGVmaW5lIFNROTA1X0NBUFRVUkVfSElHSCAweDYyCS8qIFN0YXJ0cyBjYXB0dXJlIGF0IDY0MHg0ODAgKHNvbWUgY2FtcyBvbmx5KSAqLworLyogbm90ZSB0aGF0IHRoZSBjYXB0dXJlIGNvbW1hbmQgYWxzbyBjb250cm9scyB0aGUgb3V0cHV0IGRpbWVuc2lvbnMgKi8KKworLyogU3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KKworCS8qCisJICogRHJpdmVyIHN0dWZmCisJICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfc3RydWN0OworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrX3RocmVhZDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHNxOTA1X21vZGVbXSA9IHsKKwl7IDE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfU0JHR1I4LCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxNjAsCisJCS5zaXplaW1hZ2UgPSAxNjAgKiAxMjAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMH0sCisJeyAzMjAsIDI0MCwgVjRMMl9QSVhfRk1UX1NCR0dSOCwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorCXsgNjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9TQkdHUjgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwfQorfTsKKworLyoKKyAqIFNlbmQgYSBjb21tYW5kIHRvIHRoZSBjYW1lcmEuCisgKi8KK3N0YXRpYyBpbnQgc3E5MDVfY29tbWFuZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiBpbmRleCkKK3sKKwlpbnQgcmV0OworCisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gJ1wwJzsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJICAgICAgVVNCX1JFUV9TWU5DSF9GUkFNRSwgICAgICAgICAgICAgICAgLyogcmVxdWVzdCAqLworCQkJICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgU1E5MDVfQ09NTUFORCwgaW5kZXgsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwKKwkJCSAgICAgIFNROTA1X0NNRF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICIlczogdXNiX2NvbnRyb2xfbXNnIGZhaWxlZCAoJWQpIiwKKwkJCV9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkgICAgICBVU0JfUkVRX1NZTkNIX0ZSQU1FLCAgICAgICAgICAgICAgICAvKiByZXF1ZXN0ICovCisJCQkgICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIFNROTA1X1BJTkcsIDAsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwKKwkJCSAgICAgIFNROTA1X0NNRF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICIlczogdXNiX2NvbnRyb2xfbXNnIGZhaWxlZCAyICglZCkiLAorCQkJX19mdW5jX18sIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBY2tub3dsZWRnZSB0aGUgZW5kIG9mIGEgZnJhbWUgLSBzZWUgd2FybmluZyBvbiBzcTkwNV9jb21tYW5kLgorICovCitzdGF0aWMgaW50IHNxOTA1X2Fja19mcmFtZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IHJldDsKKworCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9ICdcMCc7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCSAgICAgIFVTQl9SRVFfU1lOQ0hfRlJBTUUsICAgICAgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwkJCSAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIFNROTA1X1JFQURfRE9ORSwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxLAorCQkJICAgICAgU1E5MDVfQ01EX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIiVzOiB1c2JfY29udHJvbF9tc2cgZmFpbGVkICglZCkiLCBfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICByZXF1ZXN0IGFuZCByZWFkIGEgYmxvY2sgb2YgZGF0YSAtIHNlZSB3YXJuaW5nIG9uIHNxOTA1X2NvbW1hbmQuCisgKi8KK3N0YXRpYyBpbnQKK3NxOTA1X3JlYWRfZGF0YShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4ICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlpbnQgcmV0OworCWludCBhY3RfbGVuOworCisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gJ1wwJzsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJICAgICAgVVNCX1JFUV9TWU5DSF9GUkFNRSwgICAgICAgICAgICAgICAgLyogcmVxdWVzdCAqLworCQkJICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgU1E5MDVfQlVMS19SRUFELCBzaXplLCBnc3BjYV9kZXYtPnVzYl9idWYsCisJCQkgICAgICAxLCBTUTkwNV9DTURfVElNRU9VVCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAiJXM6IHVzYl9jb250cm9sX21zZyBmYWlsZWQgKCVkKSIsIF9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSB1c2JfYnVsa19tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQkgICB1c2JfcmN2YnVsa3BpcGUoZ3NwY2FfZGV2LT5kZXYsIDB4ODEpLAorCQkJICAgZGF0YSwgc2l6ZSwgJmFjdF9sZW4sIFNROTA1X0RBVEFfVElNRU9VVCk7CisKKwkvKiBzdWNjZXNzZnVsLCBpdCByZXR1cm5zIDAsIG90aGVyd2lzZSAgbmVnYXRpdmUgKi8KKwlpZiAocmV0IDwgMCB8fCBhY3RfbGVuICE9IHNpemUpIHsKKwkJUERFQlVHKERfRVJSLCAiYnVsayByZWFkIGZhaWwgKCVkKSBsZW4gJWQvJWQiLAorCQkJcmV0LCBhY3RfbGVuLCBzaXplKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBhbmQgcnVucyB3aGVuZXZlciB0aGUgY2FtZXJhCisgKiBpcyBzdHJlYW1pbmcgZGF0YS4gQmVjYXVzZSBpdCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBpdCBpcyBhbGxvd2VkIHRvIHNsZWVwCisgKiBzbyB3ZSBjYW4gdXNlIHN5bmNocm9ub3VzIFVTQiBjYWxscy4gVG8gYXZvaWQgcG9zc2libGUgY29sbGlzaW9ucyB3aXRoIG90aGVyCisgKiB0aHJlYWRzIGF0dGVtcHRpbmcgdG8gdXNlIHRoZSBjYW1lcmEncyBVU0IgaW50ZXJmYWNlIHdlIHRha2UgdGhlIGdzcGNhCisgKiB1c2JfbG9jayB3aGVuIHBlcmZvcm1pbmcgVVNCIG9wZXJhdGlvbnMuIEluIHByYWN0aWNlIHRoZSBvbmx5IHRoaW5nIHdlIG5lZWQKKyAqIHRvIHByb3RlY3QgYWdhaW5zdCBpcyB0aGUgdXNiX3NldF9pbnRlcmZhY2UgY2FsbCB0aGF0IGdzcGNhIG1ha2VzIGR1cmluZworICogc3RyZWFtX29mZiBhcyB0aGUgY2FtZXJhIGRvZXNuJ3QgcHJvdmlkZSBhbnkgY29udHJvbHMgdGhhdCB0aGUgdXNlciBjb3VsZCB0cnkKKyAqIHRvIGNoYW5nZS4KKyAqLworc3RhdGljIHZvaWQgc3E5MDVfZG9zdHJlYW0oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBzZCAqZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzZCwgd29ya19zdHJ1Y3QpOworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9ICZkZXYtPmdzcGNhX2RldjsKKwlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOworCWludCBieXRlc19sZWZ0OyAvKiBieXRlcyByZW1haW5pbmcgaW4gY3VycmVudCBmcmFtZS4gKi8KKwlpbnQgZGF0YV9sZW47ICAgLyogc2l6ZSB0byB1c2UgZm9yIHRoZSBuZXh0IHJlYWQuICovCisJaW50IGhlYWRlcl9yZWFkOyAvKiB0cnVlIGlmIHdlIGhhdmUgYWxyZWFkeSByZWFkIHRoZSBmcmFtZSBoZWFkZXIuICovCisJaW50IGRpc2NhcmRpbmc7IC8qIHRydWUgaWYgd2UgZmFpbGVkIHRvIGdldCBzcGFjZSBmb3IgZnJhbWUuICovCisJaW50IHBhY2tldF90eXBlOworCWludCBmcmFtZV9zejsKKwlpbnQgcmV0OworCXU4ICpkYXRhOworCXU4ICpidWZmZXI7CisKKwlidWZmZXIgPSBrbWFsbG9jKFNROTA1X01BWF9UUkFOU0ZFUiwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCW11dGV4X2xvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCWlmICghYnVmZmVyKSB7CisJCVBERUJVRyhEX0VSUiwgIkNvdWxkbid0IGFsbG9jYXRlIFVTQiBidWZmZXIiKTsKKwkJZ290byBxdWl0X3N0cmVhbTsKKwl9CisKKwlmcmFtZV9zeiA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlW2dzcGNhX2Rldi0+Y3Vycl9tb2RlXS5zaXplaW1hZ2UKKwkJCSsgRlJBTUVfSEVBREVSX0xFTjsKKworCXdoaWxlIChnc3BjYV9kZXYtPnByZXNlbnQgJiYgZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKKwkJLyogTmVlZCBhIHNob3J0IGRlbGF5IHRvIGVuc3VyZSBzdHJlYW1pbmcgZmxhZyB3YXMgc2V0IGJ5CisJCSAqIGdzcGNhIGFuZCB0byBtYWtlIHN1cmUgZ3NwY2EgY2FuIGdyYWIgdGhlIG11dGV4LiAqLworCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCQltc2xlZXAoMSk7CisKKwkJLyogcmVxdWVzdCBzb21lIGRhdGEgYW5kIHRoZW4gcmVhZCBpdCB1bnRpbCB3ZSBoYXZlCisJCSAqIGEgY29tcGxldGUgZnJhbWUuICovCisJCWJ5dGVzX2xlZnQgPSBmcmFtZV9zejsKKwkJaGVhZGVyX3JlYWQgPSAwOworCQlkaXNjYXJkaW5nID0gMDsKKworCQl3aGlsZSAoYnl0ZXNfbGVmdCA+IDApIHsKKwkJCWRhdGFfbGVuID0gYnl0ZXNfbGVmdCA+IFNROTA1X01BWF9UUkFOU0ZFUiA/CisJCQkJU1E5MDVfTUFYX1RSQU5TRkVSIDogYnl0ZXNfbGVmdDsKKwkJCW11dGV4X2xvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCQkJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCisJCQkJZ290byBxdWl0X3N0cmVhbTsKKwkJCXJldCA9IHNxOTA1X3JlYWRfZGF0YShnc3BjYV9kZXYsIGJ1ZmZlciwgZGF0YV9sZW4pOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBxdWl0X3N0cmVhbTsKKwkJCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJCQlQREVCVUcoRF9TVFJFQU0sCisJCQkJIkdvdCAlZCBieXRlcyBvdXQgb2YgJWQgZm9yIGZyYW1lIiwKKwkJCQlkYXRhX2xlbiwgYnl0ZXNfbGVmdCk7CisJCQlieXRlc19sZWZ0IC09IGRhdGFfbGVuOworCQkJZGF0YSA9IGJ1ZmZlcjsKKwkJCWlmICghaGVhZGVyX3JlYWQpIHsKKwkJCQlwYWNrZXRfdHlwZSA9IEZJUlNUX1BBQ0tFVDsKKwkJCQkvKiBUaGUgZmlyc3QgNjQgYnl0ZXMgb2YgZWFjaCBmcmFtZSBhcmUKKwkJCQkgKiBhIGhlYWRlciBmdWxsIG9mIEZGIDAwIGJ5dGVzICovCisJCQkJZGF0YSArPSBGUkFNRV9IRUFERVJfTEVOOworCQkJCWRhdGFfbGVuIC09IEZSQU1FX0hFQURFUl9MRU47CisJCQkJaGVhZGVyX3JlYWQgPSAxOworCQkJfSBlbHNlIGlmIChieXRlc19sZWZ0ID09IDApIHsKKwkJCQlwYWNrZXRfdHlwZSA9IExBU1RfUEFDS0VUOworCQkJfSBlbHNlIHsKKwkJCQlwYWNrZXRfdHlwZSA9IElOVEVSX1BBQ0tFVDsKKwkJCX0KKwkJCWZyYW1lID0gZ3NwY2FfZ2V0X2lfZnJhbWUoZ3NwY2FfZGV2KTsKKwkJCWlmIChmcmFtZSAmJiAhZGlzY2FyZGluZykgeworCQkJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgcGFja2V0X3R5cGUsCisJCQkJCQlmcmFtZSwgZGF0YSwgZGF0YV9sZW4pOworCQkJCS8qIElmIGVudGlyZSBmcmFtZSBmaXRzIGluIG9uZSBwYWNrZXQgd2Ugc3RpbGwKKwkJCQkgICBuZWVkIHRvIGFkZCBhIExBU1RfUEFDS0VUICovCisJCQkJaWYgKHBhY2tldF90eXBlID09IEZJUlNUX1BBQ0tFVCAmJgorCQkJCSAgICBieXRlc19sZWZ0ID09IDApCisJCQkJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwKKwkJCQkJCQlMQVNUX1BBQ0tFVCwKKwkJCQkJCQlmcmFtZSwgZGF0YSwgMCk7CisJCQl9IGVsc2UgeworCQkJCWRpc2NhcmRpbmcgPSAxOworCQkJfQorCQl9CisJCS8qIGFja25vd2xlZGdlIHRoZSBmcmFtZSAqLworCQltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwkJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCisJCQlnb3RvIHF1aXRfc3RyZWFtOworCQlyZXQgPSBzcTkwNV9hY2tfZnJhbWUoZ3NwY2FfZGV2KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIHF1aXRfc3RyZWFtOworCX0KK3F1aXRfc3RyZWFtOgorCS8qIHRoZSB1c2JfbG9jayBpcyBhbHJlYWR5IGFjcXVpcmVkICovCisJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkKKwkJc3E5MDVfY29tbWFuZChnc3BjYV9kZXYsIFNROTA1X0NMRUFSKTsKKwltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCWtmcmVlKGJ1ZmZlcik7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUganVzdCBiZWZvcmUgc2RfaW5pdCAqLworc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGNhbSAqY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCXN0cnVjdCBzZCAqZGV2ID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkvKiBXZSBkb24ndCB1c2UgdGhlIGJ1ZmZlciBnc3BjYSBhbGxvY2F0ZXMgc28gbWFrZSBpdCBzbWFsbC4gKi8KKwljYW0tPmJ1bGtfc2l6ZSA9IDY0OworCisJSU5JVF9XT1JLKCZkZXYtPndvcmtfc3RydWN0LCBzcTkwNV9kb3N0cmVhbSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogY2FsbGVkIG9uIHN0cmVhbW9mZiB3aXRoIGFsdD09MCBhbmQgb24gZGlzY29ubmVjdCAqLworLyogdGhlIHVzYl9sb2NrIGlzIGhlbGQgYXQgZW50cnkgLSByZXN0b3JlIG9uIGV4aXQgKi8KK3N0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKmRldiA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJLyogd2FpdCBmb3IgdGhlIHdvcmsgcXVldWUgdG8gdGVybWluYXRlICovCisJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwkvKiBUaGlzIHdhaXRzIGZvciBzcTkwNV9kb3N0cmVhbSB0byBmaW5pc2ggKi8KKwlkZXN0cm95X3dvcmtxdWV1ZShkZXYtPndvcmtfdGhyZWFkKTsKKwlkZXYtPndvcmtfdGhyZWFkID0gTlVMTDsKKwltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXUzMiBpZGVudDsKKwlpbnQgcmV0OworCisJLyogY29ubmVjdCB0byB0aGUgY2FtZXJhIGFuZCByZWFkCisJICogdGhlIG1vZGVsIElEIGFuZCBwcm9jZXNzIHRoYXQgYW5kIHB1dCBpdCBhd2F5LgorCSAqLworCXJldCA9IHNxOTA1X2NvbW1hbmQoZ3NwY2FfZGV2LCBTUTkwNV9DTEVBUik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0ID0gc3E5MDVfY29tbWFuZChnc3BjYV9kZXYsIFNROTA1X0lEKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBzcTkwNV9yZWFkX2RhdGEoZ3NwY2FfZGV2LCBnc3BjYV9kZXYtPnVzYl9idWYsIDQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCS8qIHVzYl9idWYgaXMgYWxsb2NhdGVkIHdpdGgga21hbGxvYyBzbyBpcyBhbGlnbmVkLgorCSAqIENhbWVyYSBtb2RlbCBudW1iZXIgaXMgdGhlIHJpZ2h0IHdheSByb3VuZCBpZiB3ZSBhc3N1bWUgdGhpcworCSAqIHJldmVyc2UgZW5naW5lZXJlZCBJRCBpcyBzdXBwb3NlZCB0byBiZSBiaWcgZW5kaWFuLiAqLworCWlkZW50ID0gYmUzMl90b19jcHVwKChfX2JlMzIgKilnc3BjYV9kZXYtPnVzYl9idWYpOworCXJldCA9IHNxOTA1X2NvbW1hbmQoZ3NwY2FfZGV2LCBTUTkwNV9DTEVBUik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJUERFQlVHKERfQ09ORiwgIlNROTA1IGNhbWVyYSBJRCAlMDh4IGRldGVjdGVkIiwgaWRlbnQpOworCWdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlID0gc3E5MDVfbW9kZTsKKwlnc3BjYV9kZXYtPmNhbS5ubW9kZXMgPSBBUlJBWV9TSVpFKHNxOTA1X21vZGUpOworCWlmICghKGlkZW50ICYgU1E5MDVfSElSRVNfTUFTSykpCisJCWdzcGNhX2Rldi0+Y2FtLm5tb2Rlcy0tOworCXJldHVybiAwOworfQorCisvKiBTZXQgdXAgZm9yIGdldHRpbmcgZnJhbWVzLiAqLworc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpkZXYgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcmV0OworCisJLyogIk9wZW4gdGhlIHNodXR0ZXIiIGFuZCBzZXQgc2l6ZSwgdG8gc3RhcnQgY2FwdHVyZSAqLworCXN3aXRjaCAoZ3NwY2FfZGV2LT5jdXJyX21vZGUpIHsKKwlkZWZhdWx0OgorLyoJY2FzZSAyOiAqLworCQlQREVCVUcoRF9TVFJFQU0sICJTdGFydCBzdHJlYW1pbmcgYXQgaGlnaCByZXNvbHV0aW9uIik7CisJCXJldCA9IHNxOTA1X2NvbW1hbmQoJmRldi0+Z3NwY2FfZGV2LCBTUTkwNV9DQVBUVVJFX0hJR0gpOworCQlicmVhazsKKwljYXNlIDE6CisJCVBERUJVRyhEX1NUUkVBTSwgIlN0YXJ0IHN0cmVhbWluZyBhdCBtZWRpdW0gcmVzb2x1dGlvbiIpOworCQlyZXQgPSBzcTkwNV9jb21tYW5kKCZkZXYtPmdzcGNhX2RldiwgU1E5MDVfQ0FQVFVSRV9NRUQpOworCQlicmVhazsKKwljYXNlIDA6CisJCVBERUJVRyhEX1NUUkVBTSwgIlN0YXJ0IHN0cmVhbWluZyBhdCBsb3cgcmVzb2x1dGlvbiIpOworCQlyZXQgPSBzcTkwNV9jb21tYW5kKCZkZXYtPmdzcGNhX2RldiwgU1E5MDVfQ0FQVFVSRV9MT1cpOworCX0KKworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIlN0YXJ0IHN0cmVhbWluZyBjb21tYW5kIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKiBTdGFydCB0aGUgd29ya3F1ZXVlIGZ1bmN0aW9uIHRvIGRvIHRoZSBzdHJlYW1pbmcgKi8KKwlkZXYtPndvcmtfdGhyZWFkID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoTU9EVUxFX05BTUUpOworCXF1ZXVlX3dvcmsoZGV2LT53b3JrX3RocmVhZCwgJmRldi0+d29ya19zdHJ1Y3QpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRhYmxlIG9mIHN1cHBvcnRlZCBVU0IgZGV2aWNlcyAqLworc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkxMjApfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lICAgPSBNT0RVTEVfTkFNRSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5pbml0ICAgPSBzZF9pbml0LAorCS5zdGFydCAgPSBzZF9zdGFydCwKKwkuc3RvcDAgID0gc2Rfc3RvcDAsCit9OworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsCisJCQkmc2RfZGVzYywKKwkJCXNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lICAgICAgID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlICAgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlICAgICAgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgID0gZ3NwY2FfcmVzdW1lLAorI2VuZGlmCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCVBERUJVRyhEX1BST0JFLCAiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MDVjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiY2I3NGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1Yy5jCkBAIC0wLDAgKzEsMzI4IEBACisvKgorICogU1E5MDVDIHN1YmRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaGVvZG9yZSBLaWxnb3JlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICoKKyAqIFRoaXMgZHJpdmVyIHVzZXMgd29yayBkb25lIGluCisgKiBsaWJncGhvdG8yL2NhbWxpYnMvZGlnaWdyOCwgQ29weXJpZ2h0IChDKSBUaGVvZG9yZSBLaWxnb3JlLgorICoKKyAqIFRoaXMgZHJpdmVyIGhhcyBhbHNvIHVzZWQgYXMgYSBiYXNlIHRoZSBzcTkwNWMgZHJpdmVyCisgKiBhbmQgbWF5IGNvbnRhaW4gY29kZSBmcmFnbWVudHMgZnJvbSBpdC4KKyAqLworCisjZGVmaW5lIE1PRFVMRV9OQU1FICJzcTkwNWMiCisKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlICJnc3BjYS5oIgorCitNT0RVTEVfQVVUSE9SKCJUaGVvZG9yZSBLaWxnb3JlIDxraWxnb3RhQGF1YnVybi5lZHU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdTUENBL1NROTA1QyBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBEZWZhdWx0IHRpbWVvdXRzLCBpbiBtcyAqLworI2RlZmluZSBTUTkwNUNfQ01EX1RJTUVPVVQgNTAwCisjZGVmaW5lIFNROTA1Q19EQVRBX1RJTUVPVVQgMTAwMAorCisvKiBNYXhpbXVtIHRyYW5zZmVyIHNpemUgdG8gdXNlLiAqLworI2RlZmluZSBTUTkwNUNfTUFYX1RSQU5TRkVSIDB4ODAwMAorCisjZGVmaW5lIEZSQU1FX0hFQURFUl9MRU4gMHg1MAorCisvKiBDb21tYW5kcy4gVGhlc2UgZ28gaW4gdGhlICJ2YWx1ZSIgc2xvdC4gKi8KKyNkZWZpbmUgU1E5MDVDX0NMRUFSICAgMHhhMAkJLyogY2xlYXIgZXZlcnl0aGluZyAqLworI2RlZmluZSBTUTkwNUNfQ0FQVFVSRV9MT1cgMHhhMDQwCS8qIFN0YXJ0cyBjYXB0dXJlIGF0IDE2MHgxMjAgKi8KKyNkZWZpbmUgU1E5MDVDX0NBUFRVUkVfTUVEIDB4MTQ0MAkvKiBTdGFydHMgY2FwdHVyZSBhdCAzMjB4MjQwICovCisjZGVmaW5lIFNROTA1Q19DQVBUVVJFX0hJIDB4Mjg0MAkvKiBTdGFydHMgY2FwdHVyZSBhdCAzMjB4MjQwICovCisKKy8qIEZvciBjYXB0dXJlLCB0aGlzIG11c3QgZ28gaW4gdGhlICJpbmRleCIgc2xvdC4gKi8KKyNkZWZpbmUgU1E5MDVDX0NBUFRVUkVfSU5ERVggMHgxMTBmCisKKy8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCisJY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqY2FwX21vZGU7CisJLyogRHJpdmVyIHN0dWZmICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfc3RydWN0OworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrX3RocmVhZDsKK307CisKKy8qCisgKiBNb3N0IG9mIHRoZXNlIGNhbWVyYXMgd2lsbCBkbyA2NDB4NDgwIGFuZCAzMjB4MjQwLiAxNjB4MTIwIHdvcmtzCisgKiBpbiB0aGVvcnkgYnV0IGdpdmVzIHZlcnkgcG9vciBvdXRwdXQuIFRoZXJlZm9yZSwgbm90IHN1cHBvcnRlZC4KKyAqIFRoZSAweDI3NzA6MHg5MDUwIGNhbWVyYXMgaGF2ZSBtYXggcmVzb2x1dGlvbiBvZiAzMjB4MjQwLgorICovCitzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzcTkwNWNfbW9kZVtdID0geworCXsgMzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9TUTkwNUMsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDMyMCwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwfSwKKwl7IDY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfU1E5MDVDLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMH0KK307CisKKy8qIFNlbmQgYSBjb21tYW5kIHRvIHRoZSBjYW1lcmEuICovCitzdGF0aWMgaW50IHNxOTA1Y19jb21tYW5kKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IGNvbW1hbmQsIHUxNiBpbmRleCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCSAgICAgIFVTQl9SRVFfU1lOQ0hfRlJBTUUsICAgICAgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwkJCSAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIGNvbW1hbmQsIGluZGV4LCBOVUxMLCAwLAorCQkJICAgICAgU1E5MDVDX0NNRF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICIlczogdXNiX2NvbnRyb2xfbXNnIGZhaWxlZCAoJWQpIiwKKwkJCV9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBhbmQgcnVucyB3aGVuZXZlciB0aGUgY2FtZXJhCisgKiBpcyBzdHJlYW1pbmcgZGF0YS4gQmVjYXVzZSBpdCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBpdCBpcyBhbGxvd2VkIHRvIHNsZWVwCisgKiBzbyB3ZSBjYW4gdXNlIHN5bmNocm9ub3VzIFVTQiBjYWxscy4gVG8gYXZvaWQgcG9zc2libGUgY29sbGlzaW9ucyB3aXRoIG90aGVyCisgKiB0aHJlYWRzIGF0dGVtcHRpbmcgdG8gdXNlIHRoZSBjYW1lcmEncyBVU0IgaW50ZXJmYWNlIHRoZSBnc3BjYSB1c2JfbG9jayBpcworICogdXNlZCB3aGVuIHBlcmZvcm1pbmcgdGhlIG9uZSBVU0IgY29udHJvbCBvcGVyYXRpb24gaW5zaWRlIHRoZSB3b3JrcXVldWUsCisgKiB3aGljaCB0ZWxscyB0aGUgY2FtZXJhIHRvIGNsb3NlIHRoZSBzdHJlYW0uIEluIHByYWN0aWNlIHRoZSBvbmx5IHRoaW5nCisgKiB3aGljaCBuZWVkcyB0byBiZSBwcm90ZWN0ZWQgYWdhaW5zdCBpcyB0aGUgdXNiX3NldF9pbnRlcmZhY2UgY2FsbCB0aGF0CisgKiBnc3BjYSBtYWtlcyBkdXJpbmcgc3RyZWFtX29mZi4gT3RoZXJ3aXNlIHRoZSBjYW1lcmEgZG9lc24ndCBwcm92aWRlIGFueQorICogY29udHJvbHMgdGhhdCB0aGUgdXNlciBjb3VsZCB0cnkgdG8gY2hhbmdlLgorICovCitzdGF0aWMgdm9pZCBzcTkwNWNfZG9zdHJlYW0oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBzZCAqZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzZCwgd29ya19zdHJ1Y3QpOworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9ICZkZXYtPmdzcGNhX2RldjsKKwlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOworCWludCBieXRlc19sZWZ0OyAvKiBieXRlcyByZW1haW5pbmcgaW4gY3VycmVudCBmcmFtZS4gKi8KKwlpbnQgZGF0YV9sZW47ICAgLyogc2l6ZSB0byB1c2UgZm9yIHRoZSBuZXh0IHJlYWQuICovCisJaW50IGFjdF9sZW47CisJaW50IGRpc2NhcmRpbmcgPSAwOyAvKiB0cnVlIGlmIHdlIGZhaWxlZCB0byBnZXQgc3BhY2UgZm9yIGZyYW1lLiAqLworCWludCBwYWNrZXRfdHlwZTsKKwlpbnQgcmV0OworCXU4ICpidWZmZXI7CisKKwlidWZmZXIgPSBrbWFsbG9jKFNROTA1Q19NQVhfVFJBTlNGRVIsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlQREVCVUcoRF9FUlIsICJDb3VsZG4ndCBhbGxvY2F0ZSBVU0IgYnVmZmVyIik7CisJCWdvdG8gcXVpdF9zdHJlYW07CisJfQorCisJd2hpbGUgKGdzcGNhX2Rldi0+cHJlc2VudCAmJiBnc3BjYV9kZXYtPnN0cmVhbWluZykgeworCQlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKKwkJCWdvdG8gcXVpdF9zdHJlYW07CisJCS8qIFJlcXVlc3QgdGhlIGhlYWRlciwgd2hpY2ggdGVsbHMgdGhlIHNpemUgdG8gZG93bmxvYWQgKi8KKwkJcmV0ID0gdXNiX2J1bGtfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJCXVzYl9yY3ZidWxrcGlwZShnc3BjYV9kZXYtPmRldiwgMHg4MSksCisJCQkJYnVmZmVyLCBGUkFNRV9IRUFERVJfTEVOLCAmYWN0X2xlbiwKKwkJCQlTUTkwNUNfREFUQV9USU1FT1VUKTsKKwkJUERFQlVHKERfU1RSRUFNLAorCQkJIkdvdCAlZCBieXRlcyBvdXQgb2YgJWQgZm9yIGhlYWRlciIsCisJCQlhY3RfbGVuLCBGUkFNRV9IRUFERVJfTEVOKTsKKwkJaWYgKHJldCA8IDAgfHwgYWN0X2xlbiA8IEZSQU1FX0hFQURFUl9MRU4pCisJCQlnb3RvIHF1aXRfc3RyZWFtOworCQkvKiBzaXplIGlzIHJlYWQgZnJvbSA0IGJ5dGVzIHN0YXJ0aW5nIDB4NDAsIGxpdHRsZSBlbmRpYW4gKi8KKwkJYnl0ZXNfbGVmdCA9IGJ1ZmZlclsweDQwXXwoYnVmZmVyWzB4NDFdPDw4KXwoYnVmZmVyWzB4NDJdPDwxNikKKwkJCQkJfChidWZmZXJbMHg0M108PDI0KTsKKwkJUERFQlVHKERfU1RSRUFNLCAiYnl0ZXNfbGVmdCA9IDB4JXgiLCBieXRlc19sZWZ0KTsKKwkJLyogV2Uga2VlcCB0aGUgaGVhZGVyLiBJdCBoYXMgb3RoZXIgaW5mb3JtYXRpb24sIHRvby4gKi8KKwkJcGFja2V0X3R5cGUgPSBGSVJTVF9QQUNLRVQ7CisJCWZyYW1lID0gZ3NwY2FfZ2V0X2lfZnJhbWUoZ3NwY2FfZGV2KTsKKwkJaWYgKGZyYW1lICYmICFkaXNjYXJkaW5nKSB7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBwYWNrZXRfdHlwZSwKKwkJCQlmcmFtZSwgYnVmZmVyLCBGUkFNRV9IRUFERVJfTEVOKTsKKwkJCX0gZWxzZQorCQkJCWRpc2NhcmRpbmcgPSAxOworCQl3aGlsZSAoYnl0ZXNfbGVmdCA+IDApIHsKKwkJCWRhdGFfbGVuID0gYnl0ZXNfbGVmdCA+IFNROTA1Q19NQVhfVFJBTlNGRVIgPworCQkJCVNROTA1Q19NQVhfVFJBTlNGRVIgOiBieXRlc19sZWZ0OworCQkJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCisJCQkJZ290byBxdWl0X3N0cmVhbTsKKwkJCXJldCA9IHVzYl9idWxrX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCQl1c2JfcmN2YnVsa3BpcGUoZ3NwY2FfZGV2LT5kZXYsIDB4ODEpLAorCQkJCWJ1ZmZlciwgZGF0YV9sZW4sICZhY3RfbGVuLAorCQkJCVNROTA1Q19EQVRBX1RJTUVPVVQpOworCQkJaWYgKHJldCA8IDAgfHwgYWN0X2xlbiA8IGRhdGFfbGVuKQorCQkJCWdvdG8gcXVpdF9zdHJlYW07CisJCQlQREVCVUcoRF9TVFJFQU0sCisJCQkJIkdvdCAlZCBieXRlcyBvdXQgb2YgJWQgZm9yIGZyYW1lIiwKKwkJCQlkYXRhX2xlbiwgYnl0ZXNfbGVmdCk7CisJCQlieXRlc19sZWZ0IC09IGRhdGFfbGVuOworCQkJaWYgKGJ5dGVzX2xlZnQgPT0gMCkKKwkJCQlwYWNrZXRfdHlwZSA9IExBU1RfUEFDS0VUOworCQkJZWxzZQorCQkJCXBhY2tldF90eXBlID0gSU5URVJfUEFDS0VUOworCQkJZnJhbWUgPSBnc3BjYV9nZXRfaV9mcmFtZShnc3BjYV9kZXYpOworCQkJaWYgKGZyYW1lICYmICFkaXNjYXJkaW5nKQorCQkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIHBhY2tldF90eXBlLAorCQkJCQkJZnJhbWUsIGJ1ZmZlciwgZGF0YV9sZW4pOworCQkJZWxzZQorCQkJCWRpc2NhcmRpbmcgPSAxOworCQl9CisJfQorcXVpdF9zdHJlYW06CisJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkKKwkJc3E5MDVjX2NvbW1hbmQoZ3NwY2FfZGV2LCBTUTkwNUNfQ0xFQVIsIDApOworCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJa2ZyZWUoYnVmZmVyKTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSBqdXN0IGJlZm9yZSBzZF9pbml0ICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgY2FtICpjYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisJc3RydWN0IHNkICpkZXYgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCVBERUJVRyhEX1BST0JFLAorCQkiU1E5MDUwIGNhbWVyYSBkZXRlY3RlZCIKKwkJIiAodmlkL3BpZCAweCUwNFg6MHglMDRYKSIsIGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CisJY2FtLT5jYW1fbW9kZSA9IHNxOTA1Y19tb2RlOworCWNhbS0+bm1vZGVzID0gMjsKKwlpZiAoaWQtPmlkUHJvZHVjdCA9PSAweDkwNTApCisJCWNhbS0+bm1vZGVzID0gMTsKKwkvKiBXZSBkb24ndCB1c2UgdGhlIGJ1ZmZlciBnc3BjYSBhbGxvY2F0ZXMgc28gbWFrZSBpdCBzbWFsbC4gKi8KKwljYW0tPmJ1bGtfc2l6ZSA9IDMyOworCUlOSVRfV09SSygmZGV2LT53b3JrX3N0cnVjdCwgc3E5MDVjX2Rvc3RyZWFtKTsKKwlyZXR1cm4gMDsKK30KKworLyogY2FsbGVkIG9uIHN0cmVhbW9mZiB3aXRoIGFsdD09MCBhbmQgb24gZGlzY29ubmVjdCAqLworLyogdGhlIHVzYl9sb2NrIGlzIGhlbGQgYXQgZW50cnkgLSByZXN0b3JlIG9uIGV4aXQgKi8KK3N0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKmRldiA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJLyogd2FpdCBmb3IgdGhlIHdvcmsgcXVldWUgdG8gdGVybWluYXRlICovCisJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwkvKiBUaGlzIHdhaXRzIGZvciBzcTkwNWNfZG9zdHJlYW0gdG8gZmluaXNoICovCisJZGVzdHJveV93b3JrcXVldWUoZGV2LT53b3JrX3RocmVhZCk7CisJZGV2LT53b3JrX3RocmVhZCA9IE5VTEw7CisJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgcmV0OworCisJLyogY29ubmVjdCB0byB0aGUgY2FtZXJhIGFuZCByZXNldCBpdC4gKi8KKwlyZXQgPSBzcTkwNWNfY29tbWFuZChnc3BjYV9kZXYsIFNROTA1Q19DTEVBUiwgMCk7CisJcmV0dXJuIHJldDsKK30KKworLyogU2V0IHVwIGZvciBnZXR0aW5nIGZyYW1lcy4gKi8KK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqZGV2ID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKworCWRldi0+Y2FwX21vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZTsKKwkvKiAiT3BlbiB0aGUgc2h1dHRlciIgYW5kIHNldCBzaXplLCB0byBzdGFydCBjYXB0dXJlICovCisJc3dpdGNoIChnc3BjYV9kZXYtPndpZHRoKSB7CisJY2FzZSA2NDA6CisJCVBERUJVRyhEX1NUUkVBTSwgIlN0YXJ0IHN0cmVhbWluZyBhdCBoaWdoIHJlc29sdXRpb24iKTsKKwkJZGV2LT5jYXBfbW9kZSsrOworCQlyZXQgPSBzcTkwNWNfY29tbWFuZChnc3BjYV9kZXYsIFNROTA1Q19DQVBUVVJFX0hJLAorCQkJCQkJU1E5MDVDX0NBUFRVUkVfSU5ERVgpOworCQlicmVhazsKKwlkZWZhdWx0OiAvKiAzMjAgKi8KKwlQREVCVUcoRF9TVFJFQU0sICJTdGFydCBzdHJlYW1pbmcgYXQgbWVkaXVtIHJlc29sdXRpb24iKTsKKwkJcmV0ID0gc3E5MDVjX2NvbW1hbmQoZ3NwY2FfZGV2LCBTUTkwNUNfQ0FQVFVSRV9NRUQsCisJCQkJCQlTUTkwNUNfQ0FQVFVSRV9JTkRFWCk7CisJfQorCisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAiU3RhcnQgc3RyZWFtaW5nIGNvbW1hbmQgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorCS8qIFN0YXJ0IHRoZSB3b3JrcXVldWUgZnVuY3Rpb24gdG8gZG8gdGhlIHN0cmVhbWluZyAqLworCWRldi0+d29ya190aHJlYWQgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShNT0RVTEVfTkFNRSk7CisJcXVldWVfd29yayhkZXYtPndvcmtfdGhyZWFkLCAmZGV2LT53b3JrX3N0cnVjdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogVGFibGUgb2Ygc3VwcG9ydGVkIFVTQiBkZXZpY2VzICovCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDI3NzAsIDB4OTA1Yyl9LAorCXtVU0JfREVWSUNFKDB4Mjc3MCwgMHg5MDUwKX0sCisJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkxM2QpfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lICAgPSBNT0RVTEVfTkFNRSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5pbml0ICAgPSBzZF9pbml0LAorCS5zdGFydCAgPSBzZF9zdGFydCwKKwkuc3RvcDAgID0gc2Rfc3RvcDAsCit9OworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsCisJCQkmc2RfZGVzYywKKwkJCXNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lICAgICAgID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlICAgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlICAgICAgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgID0gZ3NwY2FfcmVzdW1lLAorI2VuZGlmCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCVBERUJVRyhEX1BST0JFLCAiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jCmluZGV4IDYwZGU5YWYuLmYyNWJlMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdGswMTQuYwpAQCAtMzUsMTAgKzM1LDEzIEBACiAJdW5zaWduZWQgY2hhciBjb250cmFzdDsKIAl1bnNpZ25lZCBjaGFyIGNvbG9yczsKIAl1bnNpZ25lZCBjaGFyIGxpZ2h0ZnJlcTsKLX07CisJdTggcXVhbGl0eTsKKyNkZWZpbmUgUVVBTElUWV9NSU4gNjAKKyNkZWZpbmUgUVVBTElUWV9NQVggOTUKKyNkZWZpbmUgUVVBTElUWV9ERUYgODAKIAotLyogZ2xvYmFsIHBhcmFtZXRlcnMgKi8KLXN0YXRpYyBpbnQgc2RfcXVhbnQgPSA3OwkJLyogPD0gNCBLTyAtIDc6IGdvb2QgKGVub3VnaCEpICovCisJdTggKmpwZWdfaGRyOworfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKQEAgLTE4MCw3ICsxODMsNyBAQAogCXJlZ193KGdzcGNhX2RldiwgMHg2M2IsIDApOwogCXJlZ193KGdzcGNhX2RldiwgMHg2MzAsIDUpOwogCXJldCA9IHVzYl9idWxrX21zZyhkZXYsCi0JCQl1c2JfcmN2YnVsa3BpcGUoZGV2LCA1KSwKKwkJCXVzYl9yY3ZidWxrcGlwZShkZXYsIDB4MDUpLAogCQkJZ3NwY2FfZGV2LT51c2JfYnVmLAogCQkJNCwJCS8qIGxlbmd0aCAqLwogCQkJJmFsZW4sCkBAIC0yOTQsMTUgKzI5NywxNCBAQAogCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlzdHJ1Y3QgY2FtICpjYW0gPSAmZ3NwY2FfZGV2LT5jYW07CiAKLQljYW0tPmVwYWRkciA9IDB4MDI7CiAJZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGUgPSB2Z2FfbW9kZTsKIAlnc3BjYV9kZXYtPmNhbS5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKIAlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOwogCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKIAlzZC0+Y29sb3JzID0gQ09MT1JfREVGOwogCXNkLT5saWdodGZyZXEgPSBGUkVRX0RFRjsKKwlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOwogCXJldHVybiAwOwogfQogCkBAIC0zMjYsOCArMzI4LDE1IEBACiAvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCiBzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IHJldCwgdmFsdWU7CiAKKwkvKiBjcmVhdGUgdGhlIEpQRUcgaGVhZGVyICovCisJc2QtPmpwZWdfaGRyID0ga21hbGxvYyhKUEVHX0hEUl9TWiwgR0ZQX0tFUk5FTCk7CisJanBlZ19kZWZpbmUoc2QtPmpwZWdfaGRyLCBnc3BjYV9kZXYtPmhlaWdodCwgZ3NwY2FfZGV2LT53aWR0aCwKKwkJCTB4MjIpOwkJLyogSlBFRyA0MTEgKi8KKwlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOworCiAJLyogd29yayBvbiBhbHRlcm5hdGUgMSAqLwogCXVzYl9zZXRfaW50ZXJmYWNlKGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPmlmYWNlLCAxKTsKIApAQCAtMzk5LDExICs0MDgsMTkgQEAKIAlQREVCVUcoRF9TVFJFQU0sICJjYW1lcmEgc3RvcHBlZCIpOwogfQogCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJa2ZyZWUoc2QtPmpwZWdfaGRyKTsKK30KKwogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCiAJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCiAJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGZmZDlbXSA9IHsweGZmLCAweGQ5fTsKIAogCS8qIGEgZnJhbWUgc3RhcnRzIHdpdGg6CkBAIC00MjAsNyArNDM3LDggQEAKIAkJCQkJZmZkOSwgMik7CiAKIAkJLyogcHV0IHRoZSBKUEVHIDQxMSBoZWFkZXIgKi8KLQkJanBlZ19wdXRfaGVhZGVyKGdzcGNhX2RldiwgZnJhbWUsIHNkX3F1YW50LCAweDIyKTsKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwKKwkJCXNkLT5qcGVnX2hkciwgSlBFR19IRFJfU1opOwogCiAJCS8qIGJlZ2lubmluZyBvZiB0aGUgZnJhbWUgKi8KICNkZWZpbmUgU1RLSERSU1ogMTIKQEAgLTUyMCw2ICs1MzgsMzQgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGludCBzZF9zZXRfamNvbXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqY29tcCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoamNvbXAtPnF1YWxpdHkgPCBRVUFMSVRZX01JTikKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01JTjsKKwllbHNlIGlmIChqY29tcC0+cXVhbGl0eSA+IFFVQUxJVFlfTUFYKQorCQlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfTUFYOworCWVsc2UKKwkJc2QtPnF1YWxpdHkgPSBqY29tcC0+cXVhbGl0eTsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJbWVtc2V0KGpjb21wLCAwLCBzaXplb2YgKmpjb21wKTsKKwlqY29tcC0+cXVhbGl0eSA9IHNkLT5xdWFsaXR5OworCWpjb21wLT5qcGVnX21hcmtlcnMgPSBWNEwyX0pQRUdfTUFSS0VSX0RIVAorCQkJfCBWNEwyX0pQRUdfTUFSS0VSX0RRVDsKKwlyZXR1cm4gMDsKK30KKwogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKQEAgLTUyOSw4ICs1NzUsMTEgQEAKIAkuaW5pdCA9IHNkX2luaXQsCiAJLnN0YXJ0ID0gc2Rfc3RhcnQsCiAJLnN0b3BOID0gc2Rfc3RvcE4sCisJLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCiAJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKKwkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAorCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KQEAgLTU2Miw4ICs2MTEsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlpbmZvKCJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CkBAIC01NzUsNiArNjI2LDMgQEAKIAogbW9kdWxlX2luaXQoc2RfbW9kX2luaXQpOwogbW9kdWxlX2V4aXQoc2RfbW9kX2V4aXQpOwotCi1tb2R1bGVfcGFyYW1fbmFtZWQocXVhbnQsIHNkX3F1YW50LCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhxdWFudCwgIlF1YW50aXphdGlvbiBpbmRleCAoMC4uOCkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCmluZGV4IDEzYTAyMWUuLjlkZmYyZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYwpAQCAtNDI5LDcgKzQyOSw2IEBACiAJUERFQlVHKERfUFJPQkUsICJDb25maWd1cmluZyBjYW1lcmEiKTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IFNUVl9JU09DX0VORFBPSU5UX0FERFI7CiAJc2QtPmRlc2MgPSBzZF9kZXNjOwogCWdzcGNhX2Rldi0+c2RfZGVzYyA9ICZzZC0+ZGVzYzsKIApAQCAtNTAxLDggKzUwMCwxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5jCmluZGV4IDE0MzM1YTkuLmIxNjkwMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmMKQEAgLTMwLDYgKzMwLDY2IEBACiAKICNpbmNsdWRlICJzdHYwNnh4X2hkY3MuaCIKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIGhkY3MxeDAwX2N0cmxbXSA9IHsKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiZXhwb3N1cmUiLAorCQkJLm1pbmltdW0JPSAweDAwLAorCQkJLm1heGltdW0JPSAweGZmZmYsCisJCQkuc3RlcAkJPSAweDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSBIRENTX0RFRkFVTFRfRVhQT1NVUkUsCisJCQkuZmxhZ3MgICAgICAgICAJPSBWNEwyX0NUUkxfRkxBR19TTElERVIKKwkJfSwKKwkJLnNldCA9IGhkY3Nfc2V0X2V4cG9zdXJlLAorCQkuZ2V0ID0gaGRjc19nZXRfZXhwb3N1cmUKKwl9LCB7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lCQk9ICJnYWluIiwKKwkJCS5taW5pbXVtCT0gMHgwMCwKKwkJCS5tYXhpbXVtCT0gMHhmZiwKKwkJCS5zdGVwCQk9IDB4MSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IEhEQ1NfREVGQVVMVF9HQUlOLAorCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCisJCX0sCisJCS5zZXQgPSBoZGNzX3NldF9nYWluLAorCQkuZ2V0ID0gaGRjc19nZXRfZ2FpbgorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGhkY3MxeDAwX21vZGVbXSA9IHsKKwl7CisJCUhEQ1NfMVgwMF9ERUZfV0lEVEgsCisJCUhEQ1NfMVgwMF9ERUZfSEVJR0hULAorCQlWNEwyX1BJWF9GTVRfU0JHR1I4LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCS5zaXplaW1hZ2UgPQorCQkJSERDU18xWDAwX0RFRl9XSURUSCAqIEhEQ1NfMVgwMF9ERUZfSEVJR0hULAorCQkuYnl0ZXNwZXJsaW5lID0gSERDU18xWDAwX0RFRl9XSURUSCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAxCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIGhkY3MxMDIwX2N0cmxbXSA9IHt9OworCitzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBoZGNzMTAyMF9tb2RlW10gPSB7CisJeworCQlIRENTXzEwMjBfREVGX1dJRFRILAorCQlIRENTXzEwMjBfREVGX0hFSUdIVCwKKwkJVjRMMl9QSVhfRk1UX1NCR0dSOCwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkuc2l6ZWltYWdlID0KKwkJCUhEQ1NfMTAyMF9ERUZfV0lEVEggKiBIRENTXzEwMjBfREVGX0hFSUdIVCwKKwkJLmJ5dGVzcGVybGluZSA9IEhEQ1NfMTAyMF9ERUZfV0lEVEgsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMQorCX0KK307CisKIGVudW0gaGRjc19wb3dlcl9zdGF0ZSB7CiAJSERDU19TVEFURV9TTEVFUCwKIAlIRENTX1NUQVRFX0lETEUsCkBAIC0zNTMsMTAgKzQxMywxMCBAQAogCiAJaW5mbygiSERDUy0xMDAwLzExMDAgc2Vuc29yIGRldGVjdGVkIik7CiAKLQlzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZSA9IHN0djA2eHhfc2Vuc29yX2hkY3MxeDAwLm1vZGVzOwotCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxeDAwLm5tb2RlczsKLQlzZC0+ZGVzYy5jdHJscyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxeDAwLmN0cmxzOwotCXNkLT5kZXNjLm5jdHJscyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxeDAwLm5jdHJsczsKKwlzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZSA9IGhkY3MxeDAwX21vZGU7CisJc2QtPmdzcGNhX2Rldi5jYW0ubm1vZGVzID0gQVJSQVlfU0laRShoZGNzMXgwMF9tb2RlKTsKKwlzZC0+ZGVzYy5jdHJscyA9IGhkY3MxeDAwX2N0cmw7CisJc2QtPmRlc2MubmN0cmxzID0gQVJSQVlfU0laRShoZGNzMXgwMF9jdHJsKTsKIAogCWhkY3MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGRjcyksIEdGUF9LRVJORUwpOwogCWlmICghaGRjcykKQEAgLTQxMiwxMCArNDcyLDEwIEBACiAKIAlpbmZvKCJIRENTLTEwMjAgc2Vuc29yIGRldGVjdGVkIik7CiAKLQlzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZSA9IHN0djA2eHhfc2Vuc29yX2hkY3MxMDIwLm1vZGVzOwotCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxMDIwLm5tb2RlczsKLQlzZC0+ZGVzYy5jdHJscyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxMDIwLmN0cmxzOwotCXNkLT5kZXNjLm5jdHJscyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxMDIwLm5jdHJsczsKKwlzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZSA9IGhkY3MxMDIwX21vZGU7CisJc2QtPmdzcGNhX2Rldi5jYW0ubm1vZGVzID0gQVJSQVlfU0laRShoZGNzMTAyMF9tb2RlKTsKKwlzZC0+ZGVzYy5jdHJscyA9IGhkY3MxMDIwX2N0cmw7CisJc2QtPmRlc2MubmN0cmxzID0gQVJSQVlfU0laRShoZGNzMTAyMF9jdHJsKTsKIAogCWhkY3MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGRjcyksIEdGUF9LRVJORUwpOwogCWlmICghaGRjcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuaAppbmRleCA5YzcyNzlhLi40MTJmMDZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5oCkBAIC0xNTIsNTMgKzE1Miw2IEBACiAJLnN0b3AgPSBoZGNzX3N0b3AsCiAJLmRpc2Nvbm5lY3QgPSBoZGNzX2Rpc2Nvbm5lY3QsCiAJLmR1bXAgPSBoZGNzX2R1bXAsCi0KLQkubmN0cmxzID0gMiwKLQkuY3RybHMgPSB7Ci0JewotCQl7Ci0JCQkuaWQJCT0gVjRMMl9DSURfRVhQT1NVUkUsCi0JCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUJCT0gImV4cG9zdXJlIiwKLQkJCS5taW5pbXVtCT0gMHgwMCwKLQkJCS5tYXhpbXVtCT0gMHhmZmZmLAotCQkJLnN0ZXAJCT0gMHgxLAotCQkJLmRlZmF1bHRfdmFsdWUgCT0gSERDU19ERUZBVUxUX0VYUE9TVVJFLAotCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCi0JCX0sCi0JCS5zZXQgPSBoZGNzX3NldF9leHBvc3VyZSwKLQkJLmdldCA9IGhkY3NfZ2V0X2V4cG9zdXJlCi0JfSwKLQl7Ci0JCXsKLQkJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lCQk9ICJnYWluIiwKLQkJCS5taW5pbXVtCT0gMHgwMCwKLQkJCS5tYXhpbXVtCT0gMHhmZiwKLQkJCS5zdGVwCQk9IDB4MSwKLQkJCS5kZWZhdWx0X3ZhbHVlIAk9IEhEQ1NfREVGQVVMVF9HQUlOLAotCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCi0JCX0sCi0JCS5zZXQgPSBoZGNzX3NldF9nYWluLAotCQkuZ2V0ID0gaGRjc19nZXRfZ2FpbgotCX0KLQl9LAotCi0JLm5tb2RlcyA9IDEsCi0JLm1vZGVzID0gewotCXsKLQkJSERDU18xWDAwX0RFRl9XSURUSCwKLQkJSERDU18xWDAwX0RFRl9IRUlHSFQsCi0JCVY0TDJfUElYX0ZNVF9TQkdHUjgsCi0JCVY0TDJfRklFTERfTk9ORSwKLQkJLnNpemVpbWFnZSA9Ci0JCQlIRENTXzFYMDBfREVGX1dJRFRIICogSERDU18xWDAwX0RFRl9IRUlHSFQsCi0JCS5ieXRlc3BlcmxpbmUgPSBIRENTXzFYMDBfREVGX1dJRFRILAotCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDEKLQl9Ci0JfQogfTsKIAogY29uc3Qgc3RydWN0IHN0djA2eHhfc2Vuc29yIHN0djA2eHhfc2Vuc29yX2hkY3MxMDIwID0gewpAQCAtMjA3LDI5ICsxNjAsMTEgQEAKIAkuaTJjX2FkZHIgPSAoMHg1NSA8PCAxKSwKIAkuaTJjX2xlbiA9IDEsCiAKLQkubmN0cmxzID0gMCwKLQkuY3RybHMgPSB7fSwKLQogCS5pbml0ID0gaGRjc19pbml0LAogCS5wcm9iZSA9IGhkY3NfcHJvYmVfMTAyMCwKIAkuc3RhcnQgPSBoZGNzX3N0YXJ0LAogCS5zdG9wID0gaGRjc19zdG9wLAogCS5kdW1wID0gaGRjc19kdW1wLAotCi0JLm5tb2RlcyA9IDEsCi0JLm1vZGVzID0gewotCXsKLQkJSERDU18xMDIwX0RFRl9XSURUSCwKLQkJSERDU18xMDIwX0RFRl9IRUlHSFQsCi0JCVY0TDJfUElYX0ZNVF9TQkdHUjgsCi0JCVY0TDJfRklFTERfTk9ORSwKLQkJLnNpemVpbWFnZSA9Ci0JCQlIRENTXzEwMjBfREVGX1dJRFRIICogSERDU18xMDIwX0RFRl9IRUlHSFQsCi0JCS5ieXRlc3BlcmxpbmUgPSBIRENTXzEwMjBfREVGX1dJRFRILAotCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDEKLQl9Ci0JfQogfTsKIAogc3RhdGljIGNvbnN0IHUxNiBzdHZfYnJpZGdlX2luaXRbXVsyXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3BiMDEwMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmMKaW5kZXggZDBhMGY4NS4uMjg1MjIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmMKQEAgLTQ2LDYgKzQ2LDEzMiBAQAogCiAjaW5jbHVkZSAic3R2MDZ4eF9wYjAxMDAuaCIKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHBiMDEwMF9jdHJsW10gPSB7CisjZGVmaW5lIEdBSU5fSURYIDAKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lCQk9ICJHYWluIiwKKwkJCS5taW5pbXVtCT0gMCwKKwkJCS5tYXhpbXVtCT0gMjU1LAorCQkJLnN0ZXAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlICA9IDEyOAorCQl9LAorCQkuc2V0ID0gcGIwMTAwX3NldF9nYWluLAorCQkuZ2V0ID0gcGIwMTAwX2dldF9nYWluCisJfSwKKyNkZWZpbmUgUkVEX0JBTEFOQ0VfSURYIDEKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9SRURfQkFMQU5DRSwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiUmVkIEJhbGFuY2UiLAorCQkJLm1pbmltdW0JPSAtMjU1LAorCQkJLm1heGltdW0JPSAyNTUsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMAorCQl9LAorCQkuc2V0ID0gcGIwMTAwX3NldF9yZWRfYmFsYW5jZSwKKwkJLmdldCA9IHBiMDEwMF9nZXRfcmVkX2JhbGFuY2UKKwl9LAorI2RlZmluZSBCTFVFX0JBTEFOQ0VfSURYIDIKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UsCisJCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUJCT0gIkJsdWUgQmFsYW5jZSIsCisJCQkubWluaW11bQk9IC0yNTUsCisJCQkubWF4aW11bQk9IDI1NSwKKwkJCS5zdGVwCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAgPSAwCisJCX0sCisJCS5zZXQgPSBwYjAxMDBfc2V0X2JsdWVfYmFsYW5jZSwKKwkJLmdldCA9IHBiMDEwMF9nZXRfYmx1ZV9iYWxhbmNlCisJfSwKKyNkZWZpbmUgRVhQT1NVUkVfSURYIDMKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiRXhwb3N1cmUiLAorCQkJLm1pbmltdW0JPSAwLAorCQkJLm1heGltdW0JPSA1MTEsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMTIKKwkJfSwKKwkJLnNldCA9IHBiMDEwMF9zZXRfZXhwb3N1cmUsCisJCS5nZXQgPSBwYjAxMDBfZ2V0X2V4cG9zdXJlCisJfSwKKyNkZWZpbmUgQVVUT0dBSU5fSURYIDQKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9BVVRPR0FJTiwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZQkJPSAiQXV0b21hdGljIEdhaW4gYW5kIEV4cG9zdXJlIiwKKwkJCS5taW5pbXVtCT0gMCwKKwkJCS5tYXhpbXVtCT0gMSwKKwkJCS5zdGVwCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAgPSAxCisJCX0sCisJCS5zZXQgPSBwYjAxMDBfc2V0X2F1dG9nYWluLAorCQkuZ2V0ID0gcGIwMTAwX2dldF9hdXRvZ2FpbgorCX0sCisjZGVmaW5lIEFVVE9HQUlOX1RBUkdFVF9JRFggNQorCXsKKwkJeworCQkJLmlkCQk9IFY0TDJfQ1RSTF9DTEFTU19VU0VSICsgMHgxMDAwLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lCQk9ICJBdXRvbWF0aWMgR2FpbiBUYXJnZXQiLAorCQkJLm1pbmltdW0JPSAwLAorCQkJLm1heGltdW0JPSAyNTUsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMTI4CisJCX0sCisJCS5zZXQgPSBwYjAxMDBfc2V0X2F1dG9nYWluX3RhcmdldCwKKwkJLmdldCA9IHBiMDEwMF9nZXRfYXV0b2dhaW5fdGFyZ2V0CisJfSwKKyNkZWZpbmUgTkFUVVJBTF9JRFggNgorCXsKKwkJeworCQkJLmlkCQk9IFY0TDJfQ1RSTF9DTEFTU19VU0VSICsgMHgxMDAxLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lCQk9ICJOYXR1cmFsIExpZ2h0IFNvdXJjZSIsCisJCQkubWluaW11bQk9IDAsCisJCQkubWF4aW11bQk9IDEsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMQorCQl9LAorCQkuc2V0ID0gcGIwMTAwX3NldF9uYXR1cmFsLAorCQkuZ2V0ID0gcGIwMTAwX2dldF9uYXR1cmFsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgcGIwMTAwX21vZGVbXSA9IHsKKy8qIGxvdyByZXMgLyBzdWJzYW1wbGUgbW9kZXMgZGlzYWJsZWQgYXMgdGhleSBhcmUgb25seSBoYWxmIHJlcyBob3Jpem9udGFsLAorICAgaGFsdmluZyB0aGUgdmVydGljYWwgcmVzb2x1dGlvbiBkb2VzIG5vdCBzZWVtIHRvIHdvcmsgKi8KKwl7CisJCTMyMCwKKwkJMjQwLAorCQlWNEwyX1BJWF9GTVRfU0dSQkc4LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gUEIwMTAwX0NST1BfVE9fVkdBCisJfSwKKwl7CisJCTM1MiwKKwkJMjg4LAorCQlWNEwyX1BJWF9GTVRfU0dSQkc4LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCS5zaXplaW1hZ2UgPSAzNTIgKiAyODgsCisJCS5ieXRlc3BlcmxpbmUgPSAzNTIsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMAorCX0KK307CisKIHN0YXRpYyBpbnQgcGIwMTAwX3Byb2JlKHN0cnVjdCBzZCAqc2QpCiB7CiAJdTE2IHNlbnNvcjsKQEAgLTU5LDIwICsxODUsMTkgQEAKIAogCWlmICgoc2Vuc29yID4+IDgpID09IDB4NjQpIHsKIAkJc2Vuc29yX3NldHRpbmdzID0ga21hbGxvYygKLQkJCQlzdHYwNnh4X3NlbnNvcl9wYjAxMDAubmN0cmxzICogc2l6ZW9mKHMzMiksCisJCQkJQVJSQVlfU0laRShwYjAxMDBfY3RybCkgKiBzaXplb2YoczMyKSwKIAkJCQlHRlBfS0VSTkVMKTsKIAkJaWYgKCFzZW5zb3Jfc2V0dGluZ3MpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAogCQlpbmZvKCJQaG90b2JpdCBwYjAxMDAgc2Vuc29yIGRldGVjdGVkIik7CiAKLQkJc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSBzdHYwNnh4X3NlbnNvcl9wYjAxMDAubW9kZXM7Ci0JCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IHN0djA2eHhfc2Vuc29yX3BiMDEwMC5ubW9kZXM7Ci0JCXNkLT5kZXNjLmN0cmxzID0gc3R2MDZ4eF9zZW5zb3JfcGIwMTAwLmN0cmxzOwotCQlzZC0+ZGVzYy5uY3RybHMgPSBzdHYwNnh4X3NlbnNvcl9wYjAxMDAubmN0cmxzOwotCQlmb3IgKGkgPSAwOyBpIDwgc3R2MDZ4eF9zZW5zb3JfcGIwMTAwLm5jdHJsczsgaSsrKQotCQkJc2Vuc29yX3NldHRpbmdzW2ldID0gc3R2MDZ4eF9zZW5zb3JfcGIwMTAwLgotCQkJCQkgICAgIGN0cmxzW2ldLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJCXNkLT5nc3BjYV9kZXYuY2FtLmNhbV9tb2RlID0gcGIwMTAwX21vZGU7CisJCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IEFSUkFZX1NJWkUocGIwMTAwX21vZGUpOworCQlzZC0+ZGVzYy5jdHJscyA9IHBiMDEwMF9jdHJsOworCQlzZC0+ZGVzYy5uY3RybHMgPSBBUlJBWV9TSVpFKHBiMDEwMF9jdHJsKTsKKwkJZm9yIChpID0gMDsgaSA8IHNkLT5kZXNjLm5jdHJsczsgaSsrKQorCQkJc2Vuc29yX3NldHRpbmdzW2ldID0gcGIwMTAwX2N0cmxbaV0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKIAkJc2QtPnNlbnNvcl9wcml2ID0gc2Vuc29yX3NldHRpbmdzOwogCiAJCXJldHVybiAwOwpAQCAtMTQzLDYgKzI2OCwxMiBAQAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQogCitzdGF0aWMgdm9pZCBwYjAxMDBfZGlzY29ubmVjdChzdHJ1Y3Qgc2QgKnNkKQoreworCXNkLT5zZW5zb3IgPSBOVUxMOworCWtmcmVlKHNkLT5zZW5zb3JfcHJpdik7Cit9CisKIC8qIEZJWE1FOiBTb3J0IHRoZSBpbml0IGNvbW1hbmRzIG91dCBhbmQgcHV0IHRoZW0gaW50byB0YWJsZXMsCiAJICB0aGlzIGlzIG9ubHkgZm9yIGdldHRpbmcgdGhlIGNhbWVyYSB0byB3b3JrICovCiAvKiBGSVhNRTogTm8gZXJyb3IgaGFuZGxpbmcgZm9yIG5vdywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3BiMDEwMC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmgKaW5kZXggNWVhMjFhMS4uNGRlNGZhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmgKQEAgLTExNCw2ICsxMTQsNyBAQAogc3RhdGljIGludCBwYjAxMDBfaW5pdChzdHJ1Y3Qgc2QgKnNkKTsKIHN0YXRpYyBpbnQgcGIwMTAwX3N0b3Aoc3RydWN0IHNkICpzZCk7CiBzdGF0aWMgaW50IHBiMDEwMF9kdW1wKHN0cnVjdCBzZCAqc2QpOworc3RhdGljIHZvaWQgcGIwMTAwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNkICpzZCk7CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KIHN0YXRpYyBpbnQgcGIwMTAwX2dldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CkBAIC0xMzcsMTM5ICsxMzgsMTIgQEAKIAkuaTJjX2FkZHIgPSAweGJhLAogCS5pMmNfbGVuID0gMiwKIAotCS5uY3RybHMgPSA3LAotCS5jdHJscyA9IHsKLSNkZWZpbmUgR0FJTl9JRFggMAotCXsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX0dBSU4sCi0JCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUJCT0gIkdhaW4iLAotCQkJLm1pbmltdW0JPSAwLAotCQkJLm1heGltdW0JPSAyNTUsCi0JCQkuc3RlcAkJPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgID0gMTI4Ci0JCX0sCi0JCS5zZXQgPSBwYjAxMDBfc2V0X2dhaW4sCi0JCS5nZXQgPSBwYjAxMDBfZ2V0X2dhaW4KLQl9LAotI2RlZmluZSBSRURfQkFMQU5DRV9JRFggMQotCXsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX1JFRF9CQUxBTkNFLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lCQk9ICJSZWQgQmFsYW5jZSIsCi0JCQkubWluaW11bQk9IC0yNTUsCi0JCQkubWF4aW11bQk9IDI1NSwKLQkJCS5zdGVwCQk9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSAgPSAwCi0JCX0sCi0JCS5zZXQgPSBwYjAxMDBfc2V0X3JlZF9iYWxhbmNlLAotCQkuZ2V0ID0gcGIwMTAwX2dldF9yZWRfYmFsYW5jZQotCX0sCi0jZGVmaW5lIEJMVUVfQkFMQU5DRV9JRFggMgotCXsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX0JMVUVfQkFMQU5DRSwKLQkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCQkubmFtZQkJPSAiQmx1ZSBCYWxhbmNlIiwKLQkJCS5taW5pbXVtCT0gLTI1NSwKLQkJCS5tYXhpbXVtCT0gMjU1LAotCQkJLnN0ZXAJCT0gMSwKLQkJCS5kZWZhdWx0X3ZhbHVlICA9IDAKLQkJfSwKLQkJLnNldCA9IHBiMDEwMF9zZXRfYmx1ZV9iYWxhbmNlLAotCQkuZ2V0ID0gcGIwMTAwX2dldF9ibHVlX2JhbGFuY2UKLQl9LAotI2RlZmluZSBFWFBPU1VSRV9JRFggMwotCXsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX0VYUE9TVVJFLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lCQk9ICJFeHBvc3VyZSIsCi0JCQkubWluaW11bQk9IDAsCi0JCQkubWF4aW11bQk9IDUxMSwKLQkJCS5zdGVwCQk9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSAgPSAxMgotCQl9LAotCQkuc2V0ID0gcGIwMTAwX3NldF9leHBvc3VyZSwKLQkJLmdldCA9IHBiMDEwMF9nZXRfZXhwb3N1cmUKLQl9LAotI2RlZmluZSBBVVRPR0FJTl9JRFggNAotCXsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX0FVVE9HQUlOLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQkJCS5uYW1lCQk9ICJBdXRvbWF0aWMgR2FpbiBhbmQgRXhwb3N1cmUiLAotCQkJLm1pbmltdW0JPSAwLAotCQkJLm1heGltdW0JPSAxLAotCQkJLnN0ZXAJCT0gMSwKLQkJCS5kZWZhdWx0X3ZhbHVlICA9IDEKLQkJfSwKLQkJLnNldCA9IHBiMDEwMF9zZXRfYXV0b2dhaW4sCi0JCS5nZXQgPSBwYjAxMDBfZ2V0X2F1dG9nYWluCi0JfSwKLSNkZWZpbmUgQVVUT0dBSU5fVEFSR0VUX0lEWCA1Ci0JewotCQl7Ci0JCQkuaWQJCT0gVjRMMl9DVFJMX0NMQVNTX1VTRVIgKyAweDEwMDAsCi0JCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUJCT0gIkF1dG9tYXRpYyBHYWluIFRhcmdldCIsCi0JCQkubWluaW11bQk9IDAsCi0JCQkubWF4aW11bQk9IDI1NSwKLQkJCS5zdGVwCQk9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSAgPSAxMjgKLQkJfSwKLQkJLnNldCA9IHBiMDEwMF9zZXRfYXV0b2dhaW5fdGFyZ2V0LAotCQkuZ2V0ID0gcGIwMTAwX2dldF9hdXRvZ2Fpbl90YXJnZXQKLQl9LAotI2RlZmluZSBOQVRVUkFMX0lEWCA2Ci0JewotCQl7Ci0JCQkuaWQJCT0gVjRMMl9DVFJMX0NMQVNTX1VTRVIgKyAweDEwMDEsCi0JCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCQkJLm5hbWUJCT0gIk5hdHVyYWwgTGlnaHQgU291cmNlIiwKLQkJCS5taW5pbXVtCT0gMCwKLQkJCS5tYXhpbXVtCT0gMSwKLQkJCS5zdGVwCQk9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSAgPSAxCi0JCX0sCi0JCS5zZXQgPSBwYjAxMDBfc2V0X25hdHVyYWwsCi0JCS5nZXQgPSBwYjAxMDBfZ2V0X25hdHVyYWwKLQl9LAotCX0sCi0KIAkuaW5pdCA9IHBiMDEwMF9pbml0LAogCS5wcm9iZSA9IHBiMDEwMF9wcm9iZSwKIAkuc3RhcnQgPSBwYjAxMDBfc3RhcnQsCiAJLnN0b3AgPSBwYjAxMDBfc3RvcCwKIAkuZHVtcCA9IHBiMDEwMF9kdW1wLAotCi0JLm5tb2RlcyA9IDIsCi0JLm1vZGVzID0gewotLyogbG93IHJlcyAvIHN1YnNhbXBsZSBtb2RlcyBkaXNhYmxlZCBhcyB0aGV5IGFyZSBvbmx5IGhhbGYgcmVzIGhvcml6b250YWwsCi0gICBoYWx2aW5nIHRoZSB2ZXJ0aWNhbCByZXNvbHV0aW9uIGRvZXMgbm90IHNlZW0gdG8gd29yayAqLwotCXsKLQkJMzIwLAotCQkyNDAsCi0JCVY0TDJfUElYX0ZNVF9TR1JCRzgsCi0JCVY0TDJfRklFTERfTk9ORSwKLQkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCwKLQkJLmJ5dGVzcGVybGluZSA9IDMyMCwKLQkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQkJLnByaXYgPSBQQjAxMDBfQ1JPUF9UT19WR0EKLQl9LAotCXsKLQkJMzUyLAotCQkyODgsCi0JCVY0TDJfUElYX0ZNVF9TR1JCRzgsCi0JCVY0TDJfRklFTERfTk9ORSwKLQkJLnNpemVpbWFnZSA9IDM1MiAqIDI4OCwKLQkJLmJ5dGVzcGVybGluZSA9IDM1MiwKLQkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQkJLnByaXYgPSAwCi0JfSwKLQl9CisJLmRpc2Nvbm5lY3QgPSBwYjAxMDBfZGlzY29ubmVjdCwKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfc2Vuc29yLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9zZW5zb3IuaAppbmRleCBjNzI2ZGFjLi5lODhjNDJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9zZW5zb3IuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9zZW5zb3IuaApAQCAtNDEsOCArNDEsNiBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdHYwNnh4X3NlbnNvciBzdHYwNnh4X3NlbnNvcl9oZGNzMTAyMDsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3R2MDZ4eF9zZW5zb3Igc3R2MDZ4eF9zZW5zb3JfcGIwMTAwOwogCi0jZGVmaW5lIFNUVjA2WFhfTUFYX0NUUkxTCQkoVjRMMl9DSURfTEFTVFAxIC0gVjRMMl9DSURfQkFTRSArIDEwKQotCiBzdHJ1Y3Qgc3R2MDZ4eF9zZW5zb3IgewogCS8qIERlZmluZXMgdGhlIG5hbWUgb2YgYSBzZW5zb3IgKi8KIAljaGFyIG5hbWVbMzJdOwpAQCAtODEsMTIgKzc5LDYgQEAKIAogCS8qIEluc3RydWN0cyB0aGUgc2Vuc29yIHRvIGR1bXAgYWxsIGl0cyBjb250ZW50cyAqLwogCWludCAoKmR1bXApKHN0cnVjdCBzZCAqc2QpOwotCi0JaW50IG5jdHJsczsKLQlzdHJ1Y3QgY3RybCBjdHJsc1tTVFYwNlhYX01BWF9DVFJMU107Ci0KLQljaGFyIG5tb2RlczsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IG1vZGVzW107CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3Z2NjQxMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmMKaW5kZXggMWNhOTFmMi4uNjljNzdjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmMKQEAgLTI5LDI2ICsyOSw5MiBAQAogCiAjaW5jbHVkZSAic3R2MDZ4eF92djY0MTAuaCIKIAorc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdnY2NDEwX21vZGVbXSA9IHsKKwl7CisJCTM1NiwKKwkJMjkyLAorCQlWNEwyX1BJWF9GTVRfU0dSQkc4LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCS5zaXplaW1hZ2UgPSAzNTYgKiAyOTIsCisJCS5ieXRlc3BlcmxpbmUgPSAzNTYsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCB2djY0MTBfY3RybFtdID0geworI2RlZmluZSBIRkxJUF9JRFggMAorCXsKKwkJeworCQkJLmlkCQk9IFY0TDJfQ0lEX0hGTElQLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lCQk9ICJob3Jpem9udGFsIGZsaXAiLAorCQkJLm1pbmltdW0JPSAwLAorCQkJLm1heGltdW0JPSAxLAorCQkJLnN0ZXAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlCT0gMAorCQl9LAorCQkuc2V0ID0gdnY2NDEwX3NldF9oZmxpcCwKKwkJLmdldCA9IHZ2NjQxMF9nZXRfaGZsaXAKKwl9LAorI2RlZmluZSBWRkxJUF9JRFggMQorCXsKKwkJeworCQkJLmlkCQk9IFY0TDJfQ0lEX1ZGTElQLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lCQk9ICJ2ZXJ0aWNhbCBmbGlwIiwKKwkJCS5taW5pbXVtCT0gMCwKKwkJCS5tYXhpbXVtCT0gMSwKKwkJCS5zdGVwCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSAwCisJCX0sCisJCS5zZXQgPSB2djY0MTBfc2V0X3ZmbGlwLAorCQkuZ2V0ID0gdnY2NDEwX2dldF92ZmxpcAorCX0sCisjZGVmaW5lIEdBSU5fSURYIDIKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lCQk9ICJhbmFsb2cgZ2FpbiIsCisJCQkubWluaW11bQk9IDAsCisJCQkubWF4aW11bQk9IDE1LAorCQkJLnN0ZXAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlICA9IDAKKwkJfSwKKwkJLnNldCA9IHZ2NjQxMF9zZXRfYW5hbG9nX2dhaW4sCisJCS5nZXQgPSB2djY0MTBfZ2V0X2FuYWxvZ19nYWluCisJfQorfTsKKwogc3RhdGljIGludCB2djY0MTBfcHJvYmUoc3RydWN0IHNkICpzZCkKIHsKIAl1MTYgZGF0YTsKLQlpbnQgZXJyOworCWludCBlcnIsIGk7CisJczMyICpzZW5zb3Jfc2V0dGluZ3M7CiAKIAllcnIgPSBzdHYwNnh4X3JlYWRfc2Vuc29yKHNkLCBWVjY0MTBfREVWSUNFSCwgJmRhdGEpOwotCiAJaWYgKGVyciA8IDApCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKGRhdGEgPT0gMHgxOSkgewogCQlpbmZvKCJ2djY0MTAgc2Vuc29yIGRldGVjdGVkIik7CiAKLQkJc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSBzdHYwNnh4X3NlbnNvcl92djY0MTAubW9kZXM7Ci0JCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IHN0djA2eHhfc2Vuc29yX3Z2NjQxMC5ubW9kZXM7Ci0JCXNkLT5kZXNjLmN0cmxzID0gc3R2MDZ4eF9zZW5zb3JfdnY2NDEwLmN0cmxzOwotCQlzZC0+ZGVzYy5uY3RybHMgPSBzdHYwNnh4X3NlbnNvcl92djY0MTAubmN0cmxzOworCQlzZW5zb3Jfc2V0dGluZ3MgPSBrbWFsbG9jKEFSUkFZX1NJWkUodnY2NDEwX2N0cmwpICogc2l6ZW9mKHMzMiksCisJCQkJCSAgR0ZQX0tFUk5FTCk7CisJCWlmICghc2Vuc29yX3NldHRpbmdzKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSB2djY0MTBfbW9kZTsKKwkJc2QtPmdzcGNhX2Rldi5jYW0ubm1vZGVzID0gQVJSQVlfU0laRSh2djY0MTBfbW9kZSk7CisJCXNkLT5kZXNjLmN0cmxzID0gdnY2NDEwX2N0cmw7CisJCXNkLT5kZXNjLm5jdHJscyA9IEFSUkFZX1NJWkUodnY2NDEwX2N0cmwpOworCisJCWZvciAoaSA9IDA7IGkgPCBzZC0+ZGVzYy5uY3RybHM7IGkrKykKKwkJCXNlbnNvcl9zZXR0aW5nc1tpXSA9IHZ2NjQxMF9jdHJsW2ldLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJCXNkLT5zZW5zb3JfcHJpdiA9IHNlbnNvcl9zZXR0aW5nczsKIAkJcmV0dXJuIDA7CiAJfQotCiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKQEAgLTgwLDYgKzE0NiwxMiBAQAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQogCitzdGF0aWMgdm9pZCB2djY0MTBfZGlzY29ubmVjdChzdHJ1Y3Qgc2QgKnNkKQoreworCXNkLT5zZW5zb3IgPSBOVUxMOworCWtmcmVlKHNkLT5zZW5zb3JfcHJpdik7Cit9CisKIHN0YXRpYyBpbnQgdnY2NDEwX3N0YXJ0KHN0cnVjdCBzZCAqc2QpCiB7CiAJaW50IGVycjsKQEAgLTE1NiwxNyArMjI4LDEzIEBACiAKIHN0YXRpYyBpbnQgdnY2NDEwX2dldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCiB7Ci0JaW50IGVycjsKLQl1MTYgaTJjX2RhdGE7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OwogCi0JZXJyID0gc3R2MDZ4eF9yZWFkX3NlbnNvcihzZCwgVlY2NDEwX0RBVEFGT1JNQVQsICZpMmNfZGF0YSk7Ci0KLQkqdmFsID0gKGkyY19kYXRhICYgVlY2NDEwX0hGTElQKSA/IDEgOiAwOwotCisJKnZhbCA9IHNlbnNvcl9zZXR0aW5nc1tIRkxJUF9JRFhdOwogCVBERUJVRyhEX1Y0TDIsICJSZWFkIGhvcml6b250YWwgZmxpcCAlZCIsICp2YWwpOwogCi0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdnY2NDEwX3NldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKQEAgLTE3NCw2ICsyNDIsOSBAQAogCWludCBlcnI7CiAJdTE2IGkyY19kYXRhOwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCXNlbnNvcl9zZXR0aW5nc1tIRkxJUF9JRFhdID0gdmFsOwogCWVyciA9IHN0djA2eHhfcmVhZF9zZW5zb3Ioc2QsIFZWNjQxMF9EQVRBRk9STUFULCAmaTJjX2RhdGEpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMTkxLDE3ICsyNjIsMTMgQEAKIAogc3RhdGljIGludCB2djY0MTBfZ2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKIHsKLQlpbnQgZXJyOwotCXUxNiBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7CiAKLQllcnIgPSBzdHYwNnh4X3JlYWRfc2Vuc29yKHNkLCBWVjY0MTBfREFUQUZPUk1BVCwgJmkyY19kYXRhKTsKLQotCSp2YWwgPSAoaTJjX2RhdGEgJiBWVjY0MTBfVkZMSVApID8gMSA6IDA7Ci0KKwkqdmFsID0gc2Vuc29yX3NldHRpbmdzW1ZGTElQX0lEWF07CiAJUERFQlVHKERfVjRMMiwgIlJlYWQgdmVydGljYWwgZmxpcCAlZCIsICp2YWwpOwogCi0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdnY2NDEwX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKQEAgLTIwOSw2ICsyNzYsOSBAQAogCWludCBlcnI7CiAJdTE2IGkyY19kYXRhOwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCXNlbnNvcl9zZXR0aW5nc1tWRkxJUF9JRFhdID0gdmFsOwogCWVyciA9IHN0djA2eHhfcmVhZF9zZW5zb3Ioc2QsIFZWNjQxMF9EQVRBRk9STUFULCAmaTJjX2RhdGEpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMjI2LDI0ICsyOTYsMjMgQEAKIAogc3RhdGljIGludCB2djY0MTBfZ2V0X2FuYWxvZ19nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKIHsKLQlpbnQgZXJyOwotCXUxNiBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7CiAKLQllcnIgPSBzdHYwNnh4X3JlYWRfc2Vuc29yKHNkLCBWVjY0MTBfQU5BTE9HR0FJTiwgJmkyY19kYXRhKTsKLQotCSp2YWwgPSBpMmNfZGF0YSAmIDB4ZjsKKwkqdmFsID0gc2Vuc29yX3NldHRpbmdzW0dBSU5fSURYXTsKIAogCVBERUJVRyhEX1Y0TDIsICJSZWFkIGFuYWxvZyBnYWluICVkIiwgKnZhbCk7CiAKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2djY0MTBfc2V0X2FuYWxvZ19nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCWludCBlcnI7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OwogCisJc2Vuc29yX3NldHRpbmdzW0dBSU5fSURYXSA9IHZhbDsKIAlQREVCVUcoRF9WNEwyLCAiU2V0IGFuYWxvZyBnYWluIHRvICVkIiwgdmFsKTsKIAllcnIgPSBzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgVlY2NDEwX0FOQUxPR0dBSU4sIDB4ZjAgfCAodmFsICYgMHhmKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3Z2NjQxMC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmgKaW5kZXggM2ZmOGM0ZS4uOTVhYzU1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmgKQEAgLTE3OCw2ICsxNzgsNyBAQAogc3RhdGljIGludCB2djY0MTBfaW5pdChzdHJ1Y3Qgc2QgKnNkKTsKIHN0YXRpYyBpbnQgdnY2NDEwX3N0b3Aoc3RydWN0IHNkICpzZCk7CiBzdGF0aWMgaW50IHZ2NjQxMF9kdW1wKHN0cnVjdCBzZCAqc2QpOworc3RhdGljIHZvaWQgdnY2NDEwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNkICpzZCk7CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KIHN0YXRpYyBpbnQgdnY2NDEwX2dldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwpAQCAtMTk3LDYyICsxOTgsNyBAQAogCS5zdGFydCA9IHZ2NjQxMF9zdGFydCwKIAkuc3RvcCA9IHZ2NjQxMF9zdG9wLAogCS5kdW1wID0gdnY2NDEwX2R1bXAsCi0KLQkubmN0cmxzID0gMywKLQkuY3RybHMgPSB7Ci0JewotCQl7Ci0JCQkuaWQJCT0gVjRMMl9DSURfSEZMSVAsCi0JCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCQkJLm5hbWUJCT0gImhvcml6b250YWwgZmxpcCIsCi0JCQkubWluaW11bQk9IDAsCi0JCQkubWF4aW11bQk9IDEsCi0JCQkuc3RlcAkJPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUJPSAwCi0JCX0sCi0JCS5zZXQgPSB2djY0MTBfc2V0X2hmbGlwLAotCQkuZ2V0ID0gdnY2NDEwX2dldF9oZmxpcAotCX0sIHsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX1ZGTElQLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQkJCS5uYW1lCQk9ICJ2ZXJ0aWNhbCBmbGlwIiwKLQkJCS5taW5pbXVtCT0gMCwKLQkJCS5tYXhpbXVtCT0gMSwKLQkJCS5zdGVwCQk9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSAJPSAwCi0JCX0sCi0JCS5zZXQgPSB2djY0MTBfc2V0X3ZmbGlwLAotCQkuZ2V0ID0gdnY2NDEwX2dldF92ZmxpcAotCX0sIHsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX0dBSU4sCi0JCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUJCT0gImFuYWxvZyBnYWluIiwKLQkJCS5taW5pbXVtCT0gMCwKLQkJCS5tYXhpbXVtCT0gMTUsCi0JCQkuc3RlcAkJPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgID0gMAotCQl9LAotCQkuc2V0ID0gdnY2NDEwX3NldF9hbmFsb2dfZ2FpbiwKLQkJLmdldCA9IHZ2NjQxMF9nZXRfYW5hbG9nX2dhaW4KLQl9Ci0JfSwKLQotCS5ubW9kZXMgPSAxLAotCS5tb2RlcyA9IHsKLQl7Ci0JCTM1NiwKLQkJMjkyLAotCQlWNEwyX1BJWF9GTVRfU0dSQkc4LAotCQlWNEwyX0ZJRUxEX05PTkUsCi0JCS5zaXplaW1hZ2UgPQotCQkJMzU2ICogMjkyLAotCQkuYnl0ZXNwZXJsaW5lID0gMzU2LAotCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDAKLQl9Ci0JfQorCS5kaXNjb25uZWN0ID0gdnY2NDEwX2Rpc2Nvbm5lY3QsCiB9OwogCiAvKiBJZiBOVUxMLCBvbmx5IHNpbmdsZSB2YWx1ZSB0byB3cml0ZSwgc3RvcmVkIGluIGxlbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwppbmRleCA2ZDkwNGQ1Li5jMmI4YzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwpAQCAtMzksOCArMzksMTEgQEAKIAl1bnNpZ25lZCBjaGFyIGNvbnRyYXN0OwogCXVuc2lnbmVkIGNoYXIgY29sb3JzOwogCXVuc2lnbmVkIGNoYXIgYXV0b2dhaW47CisJdTggcXVhbGl0eTsKKyNkZWZpbmUgUVVBTElUWV9NSU4gNzAKKyNkZWZpbmUgUVVBTElUWV9NQVggOTUKKyNkZWZpbmUgUVVBTElUWV9ERUYgODUKIAotCWNoYXIgcWluZGV4OwogCWNoYXIgYnJpZGdlOwogI2RlZmluZSBCUklER0VfU1BDQTUwNCAwCiAjZGVmaW5lIEJSSURHRV9TUENBNTA0QiAxCkBAIC01Miw2ICs1NSw4IEBACiAjZGVmaW5lIExvZ2l0ZWNoQ2xpY2tTbWFydDQyMCAyCiAjZGVmaW5lIExvZ2l0ZWNoQ2xpY2tTbWFydDgyMCAzCiAjZGVmaW5lIE1lZ2FwaXhWNCA0CisKKwl1OCAqanBlZ19oZHI7CiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC04MTIsNyArODE3LDYgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCiAJc2QtPmJyaWRnZSA9IGlkLT5kcml2ZXJfaW5mbyA+PiA4OwogCXNkLT5zdWJ0eXBlID0gaWQtPmRyaXZlcl9pbmZvOwpAQCAtODUwLDEwICs4NTQsMTAgQEAKIAkJY2FtLT5ubW9kZXMgPSBzaXplb2YgdmdhX21vZGUyIC8gc2l6ZW9mIHZnYV9tb2RlMlswXTsKIAkJYnJlYWs7CiAJfQotCXNkLT5xaW5kZXggPSA1OwkJCS8qIHNldCB0aGUgcXVhbnRpemF0aW9uIHRhYmxlICovCiAJc2QtPmJyaWdodG5lc3MgPSBzZF9jdHJsc1tTRF9CUklHSFRORVNTXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwogCXNkLT5jb250cmFzdCA9IHNkX2N0cmxzW1NEX0NPTlRSQVNUXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwogCXNkLT5jb2xvcnMgPSBzZF9jdHJsc1tTRF9DT0xPUl0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOwogCXJldHVybiAwOwogfQogCkBAIC05NzAsNiArOTc0LDEyIEBACiAJX191OCBpOwogCV9fdTggaW5mb1s2XTsKIAorCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KKwlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKKwlqcGVnX2RlZmluZShzZC0+anBlZ19oZHIsIGdzcGNhX2Rldi0+aGVpZ2h0LCBnc3BjYV9kZXYtPndpZHRoLAorCQkJMHgyMik7CQkvKiBKUEVHIDQxMSAqLworCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisKIAlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfU1BDQTUwNEIpCiAJCXNwY2E1MDRCX3NldFF0YWJsZShnc3BjYV9kZXYpOwogCXNwY2E1MDRCX1NldFNpemVUeXBlKGdzcGNhX2Rldik7CkBAIC0xMDc5LDYgKzEwODksMTMgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlrZnJlZShzZC0+anBlZ19oZHIpOworfQorCiBzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAkvKiB0YXJnZXQgKi8KIAkJCV9fdTggKmRhdGEsCQkJLyogaXNvYyBwYWNrZXQgKi8KQEAgLTExNTUsOSArMTE3Miw4IEBACiAJCQkJCWZmZDksIDIpOwogCiAJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgaW4gdGhlIG5ldyBmcmFtZSAqLwotCQlqcGVnX3B1dF9oZWFkZXIoZ3NwY2FfZGV2LCBmcmFtZSwKLQkJCQkoKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXYpLT5xaW5kZXgsCi0JCQkJMHgyMik7CisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQlzZC0+anBlZ19oZHIsIEpQRUdfSERSX1NaKTsKIAl9CiAKIAkvKiBhZGQgMHgwMCBhZnRlciAweGZmICovCkBAIC0xMTk4LDI2ICsxMjE0LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGdldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlfX3UxNiBicmlnaHRuZXNzID0gMDsKLQotCXN3aXRjaCAoc2QtPmJyaWRnZSkgewotCWRlZmF1bHQ6Ci0vKgljYXNlIEJSSURHRV9TUENBNTMzOiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEI6ICovCi0vKgljYXNlIEJSSURHRV9TUENBNTA0OiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEM6ICovCi0JCWJyaWdodG5lc3MgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MDAsIDB4MjFhNywgMik7Ci0JCWJyZWFrOwotCWNhc2UgQlJJREdFX1NQQ0E1MzY6Ci0JCWJyaWdodG5lc3MgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MDAsIDB4MjBmMCwgMik7Ci0JCWJyZWFrOwotCX0KLQlzZC0+YnJpZ2h0bmVzcyA9ICgoYnJpZ2h0bmVzcyAmIDB4ZmYpIC0gMTI4KSAlIDI1NTsKLX0KLQogc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTEyMzcsMjQgKzEyMzMsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXN3aXRjaCAoc2QtPmJyaWRnZSkgewotCWRlZmF1bHQ6Ci0vKgljYXNlIEJSSURHRV9TUENBNTMzOiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEI6ICovCi0vKgljYXNlIEJSSURHRV9TUENBNTA0OiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEM6ICovCi0JCXNkLT5jb250cmFzdCA9IHJlZ19yXzEyKGdzcGNhX2RldiwgMHgwMCwgMHgyMWE4LCAyKTsKLQkJYnJlYWs7Ci0JY2FzZSBCUklER0VfU1BDQTUzNjoKLQkJc2QtPmNvbnRyYXN0ID0gcmVnX3JfMTIoZ3NwY2FfZGV2LCAweDAwLCAweDIwZjEsIDIpOwotCQlicmVhazsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMTI3NCwyNCArMTI1Miw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBnZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXN3aXRjaCAoc2QtPmJyaWRnZSkgewotCWRlZmF1bHQ6Ci0vKgljYXNlIEJSSURHRV9TUENBNTMzOiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEI6ICovCi0vKgljYXNlIEJSSURHRV9TUENBNTA0OiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEM6ICovCi0JCXNkLT5jb2xvcnMgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MDAsIDB4MjFhZSwgMikgPj4gMTsKLQkJYnJlYWs7Ci0JY2FzZSBCUklER0VfU1BDQTUzNjoKLQkJc2QtPmNvbG9ycyA9IHJlZ19yXzEyKGdzcGNhX2RldiwgMHgwMCwgMHgyMGY2LCAyKSA+PiAxOwotCQlicmVhazsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0xMzA2LDcgKzEyNjYsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKIAkqdmFsID0gc2QtPmJyaWdodG5lc3M7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzI1LDcgKzEyODQsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5jb250cmFzdDsKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNDQsNyArMTMwMiw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0Y29sb3JzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5jb2xvcnM7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzY1LDYgKzEzMjIsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzZF9zZXRfamNvbXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqY29tcCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoamNvbXAtPnF1YWxpdHkgPCBRVUFMSVRZX01JTikKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01JTjsKKwllbHNlIGlmIChqY29tcC0+cXVhbGl0eSA+IFFVQUxJVFlfTUFYKQorCQlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfTUFYOworCWVsc2UKKwkJc2QtPnF1YWxpdHkgPSBqY29tcC0+cXVhbGl0eTsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJbWVtc2V0KGpjb21wLCAwLCBzaXplb2YgKmpjb21wKTsKKwlqY29tcC0+cXVhbGl0eSA9IHNkLT5xdWFsaXR5OworCWpjb21wLT5qcGVnX21hcmtlcnMgPSBWNEwyX0pQRUdfTUFSS0VSX0RIVAorCQkJfCBWNEwyX0pQRUdfTUFSS0VSX0RRVDsKKwlyZXR1cm4gMDsKK30KKwogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKQEAgLTEzNzQsNyArMTM1OSwxMCBAQAogCS5pbml0ID0gc2RfaW5pdCwKIAkuc3RhcnQgPSBzZF9zdGFydCwKIAkuc3RvcE4gPSBzZF9zdG9wTiwKKwkuc3RvcDAgPSBzZF9zdG9wMCwKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKKwkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAorCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KQEAgLTE0NjUsOCArMTQ1MywxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYwppbmRleCA2ZWUxMTFhLi5mNjNlMzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYwpAQCAtMzcsMjAgKzM3LDIxIEBACiBzdHJ1Y3Qgc2QgewogCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAKLQl1bnNpZ25lZCBjaGFyIGJyaWdodG5lc3M7Ci0JdW5zaWduZWQgY2hhciBjb250cmFzdDsKLQl1bnNpZ25lZCBjaGFyIGNvbG9yczsKLQl1bnNpZ25lZCBjaGFyIGF1dG9nYWluOwotCXVuc2lnbmVkIGNoYXIgZ2FtbWE7Ci0JdW5zaWduZWQgY2hhciBzaGFycG5lc3M7Ci0JdW5zaWduZWQgY2hhciBmcmVxOwotCXVuc2lnbmVkIGNoYXIgd2hpdGViYWxhbmNlOwotCXVuc2lnbmVkIGNoYXIgbWlycm9yOwotCXVuc2lnbmVkIGNoYXIgZWZmZWN0OworCXU4IGJyaWdodG5lc3M7CisJdTggY29udHJhc3Q7CisJdTggY29sb3JzOworCXU4IGF1dG9nYWluOworCXU4IGdhbW1hOworCXU4IHNoYXJwbmVzczsKKwl1OCBmcmVxOworCXU4IHdoaXRlYmFsYW5jZTsKKwl1OCBtaXJyb3I7CisJdTggZWZmZWN0OwogCi0JX191OCBzZW5zb3I7Ci0jZGVmaW5lIFNFTlNPUl9UQVM1MTMwQSAwCi0jZGVmaW5lIFNFTlNPUl9PTTY4MDIgMQorCXU4IHNlbnNvcjsKKyNkZWZpbmUgU0VOU09SX09NNjgwMiAwCisjZGVmaW5lIFNFTlNPUl9PVEhFUiAxCisjZGVmaW5lIFNFTlNPUl9UQVM1MTMwQSAyCiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC03OCw3ICs3OSw2IEBACiAJCQlzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKm1lbnUpOwogCiBzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKLSNkZWZpbmUgU0RfQlJJR0hUTkVTUyAwCiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtODcsMTIgKzg3LDEyIEBACiAJICAubWluaW11bSA9IDAsCiAJICAubWF4aW11bSA9IDE0LAogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSA4LAorI2RlZmluZSBCUklHSFRORVNTX0RFRiA4CisJICAuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAogCSAgfSwKIAkgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCiAJIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAogCSB9LAotI2RlZmluZSBTRF9DT05UUkFTVCAxCiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9DT05UUkFTVCwKQEAgLTEwMSwxMiArMTAxLDEyIEBACiAJICAubWluaW11bSA9IDAsCiAJICAubWF4aW11bSA9IDB4MGQsCiAJICAuc3RlcCA9IDEsCi0JICAuZGVmYXVsdF92YWx1ZSA9IDB4MDcsCisjZGVmaW5lIENPTlRSQVNUX0RFRiAweDA3CisJICAuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKIAkgLmdldCA9IHNkX2dldGNvbnRyYXN0LAogCSB9LAotI2RlZmluZSBTRF9DT0xPUiAyCiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLApAQCAtMTE1LDcgKzExNSw4IEBACiAJICAubWluaW11bSA9IDAsCiAJICAubWF4aW11bSA9IDB4MGYsCiAJICAuc3RlcCA9IDEsCi0JICAuZGVmYXVsdF92YWx1ZSA9IDB4MDUsCisjZGVmaW5lIENPTE9SU19ERUYgMHgwNQorCSAgLmRlZmF1bHRfdmFsdWUgPSBDT0xPUlNfREVGLAogCSAgfSwKIAkgLnNldCA9IHNkX3NldGNvbG9ycywKIAkgLmdldCA9IHNkX2dldGNvbG9ycywKQEAgLTEzNSw3ICsxMzYsNiBAQAogCSAuc2V0ID0gc2Rfc2V0Z2FtbWEsCiAJIC5nZXQgPSBzZF9nZXRnYW1tYSwKIAkgfSwKLSNkZWZpbmUgU0RfQVVUT0dBSU4gNAogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfR0FJTiwJLyogaGVyZSwgaSBhY3RpdmF0ZSBvbmx5IHRoZSBsb3dsaWdodCwKQEAgLTE0NiwxMiArMTQ2LDEyIEBACiAJICAubWluaW11bSA9IDAsCiAJICAubWF4aW11bSA9IDEsCiAJICAuc3RlcCA9IDEsCi0JICAuZGVmYXVsdF92YWx1ZSA9IDB4MDEsCisjZGVmaW5lIEFVVE9HQUlOX0RFRiAweDAxCisJICAuZGVmYXVsdF92YWx1ZSA9IEFVVE9HQUlOX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRsb3dsaWdodCwKIAkgLmdldCA9IHNkX2dldGxvd2xpZ2h0LAogCSB9LAotI2RlZmluZSBTRF9NSVJST1IgNQogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfSEZMSVAsCkBAIC0xNjAsMTIgKzE2MCwxMiBAQAogCSAgLm1pbmltdW0gPSAwLAogCSAgLm1heGltdW0gPSAxLAogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSAwLAorI2RlZmluZSBNSVJST1JfREVGIDAKKwkgIC5kZWZhdWx0X3ZhbHVlID0gTUlSUk9SX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRmbGlwLAogCSAuZ2V0ID0gc2RfZ2V0ZmxpcAogCX0sCi0jZGVmaW5lIFNEX0xJR0hURlJFUSA2CiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwKQEAgLTE3NCwxMiArMTc0LDEyIEBACiAJICAubWluaW11bSA9IDEsCQkvKiAxIC0+IDB4NTAsIDItPjB4NjAgKi8KIAkgIC5tYXhpbXVtID0gMiwKIAkgIC5zdGVwID0gMSwKLQkgIC5kZWZhdWx0X3ZhbHVlID0gMSwKKyNkZWZpbmUgRlJFUV9ERUYgMQorCSAgLmRlZmF1bHRfdmFsdWUgPSBGUkVRX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRmcmVxLAogCSAuZ2V0ID0gc2RfZ2V0ZnJlcX0sCiAKLSNkZWZpbmUgU0RfV0hJVEVfQkFMQU5DRSA3CiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9XSElURV9CQUxBTkNFX1RFTVBFUkFUVVJFLApAQCAtMTg4LDEyICsxODgsMTIgQEAKIAkgIC5taW5pbXVtID0gMCwKIAkgIC5tYXhpbXVtID0gMSwKIAkgIC5zdGVwID0gMSwKLQkgIC5kZWZhdWx0X3ZhbHVlID0gMCwKKyNkZWZpbmUgV0hJVEVfQkFMQU5DRV9ERUYgMAorCSAgLmRlZmF1bHRfdmFsdWUgPSBXSElURV9CQUxBTkNFX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXR3aGl0ZWJhbGFuY2UsCiAJIC5nZXQgPSBzZF9nZXR3aGl0ZWJhbGFuY2UKIAl9LAotI2RlZmluZSBTRF9TSEFSUE5FU1MgOAkJLyogKGFrYSBkZWZpbml0aW9uIG9uIHdpbikgKi8KIAl7CiAJIHsKIAkgIC5pZCA9IFY0TDJfQ0lEX1NIQVJQTkVTUywKQEAgLTIwMiwxMiArMjAyLDEyIEBACiAJICAubWluaW11bSA9IDAsCiAJICAubWF4aW11bSA9IDE1LAogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSAweDA2LAorI2RlZmluZSBTSEFSUE5FU1NfREVGIDB4MDYKKwkgIC5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRzaGFycG5lc3MsCiAJIC5nZXQgPSBzZF9nZXRzaGFycG5lc3MsCiAJIH0sCi0jZGVmaW5lIFNEX0VGRkVDVFMgOQogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfRUZGRUNUUywKQEAgLTIxNiw3ICsyMTYsOCBAQAogCSAgLm1pbmltdW0gPSAwLAogCSAgLm1heGltdW0gPSA0LAogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSAwLAorI2RlZmluZSBFRkZFQ1RTX0RFRiAwCisJICAuZGVmYXVsdF92YWx1ZSA9IEVGRkVDVFNfREVGLAogCSAgfSwKIAkgLnNldCA9IHNkX3NldGVmZmVjdCwKIAkgLmdldCA9IHNkX2dldGVmZmVjdApAQCAtMjYzLDI4ICsyNjQsNTAgQEAKIAogLyogc2Vuc29yIHNwZWNpZmljIGRhdGEgKi8KIHN0cnVjdCBhZGRpdGlvbmFsX3NlbnNvcl9kYXRhIHsKLQljb25zdCBfX3U4IGRhdGExWzIwXTsKLQljb25zdCBfX3U4IGRhdGEyWzE4XTsKLQljb25zdCBfX3U4IGRhdGEzWzE4XTsKLQljb25zdCBfX3U4IGRhdGE0WzRdOwotCWNvbnN0IF9fdTggZGF0YTVbNl07Ci0JY29uc3QgX191OCBzdHJlYW1bNF07CisJY29uc3QgdTggZGF0YTFbMTBdOworCWNvbnN0IHU4IGRhdGEyWzldOworCWNvbnN0IHU4IGRhdGEzWzldOworCWNvbnN0IHU4IGRhdGE0WzRdOworCWNvbnN0IHU4IGRhdGE1WzZdOworCWNvbnN0IHU4IHN0cmVhbVs0XTsKIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgYWRkaXRpb25hbF9zZW5zb3JfZGF0YSBzZW5zb3JfZGF0YVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRpdGlvbmFsX3NlbnNvcl9kYXRhIHNlbnNvcl9kYXRhW10gPSB7CisgICAgewkJCQkvKiBPTTY4MDIgKi8KKwkuZGF0YTEgPQorCQl7MHhjMiwgMHgyOCwgMHgwZiwgMHgyMiwgMHhjZCwgMHgyNywgMHgyYywgMHgwNiwKKwkJIDB4YjMsIDB4ZmN9LAorCS5kYXRhMiA9CisJCXsweDgwLCAweGZmLCAweGZmLCAweDgwLCAweGZmLCAweGZmLCAweDgwLCAweGZmLAorCQkgMHhmZn0sCisJLmRhdGE0ID0JLypGcmVxICg1MC82MEh6KS4gU3BsaXR0ZWQgZm9yIHRlc3QgcHVycG9zZSAqLworCQl7MHg2NiwgMHhjYSwgMHhhOCwgMHhmMH0sCisJLmRhdGE1ID0JLyogdGhpcyBjb3VsZCBiZSByZW1vdmVkIGxhdGVyICovCisJCXsweDBjLCAweDAzLCAweGFiLCAweDEzLCAweDgxLCAweDIzfSwKKwkuc3RyZWFtID0KKwkJezB4MGIsIDB4MDQsIDB4MGEsIDB4Nzh9LAorICAgIH0sCisgICAgewkJCQkvKiBPVEhFUiAqLworCS5kYXRhMSA9CisJCXsweGMxLCAweDQ4LCAweDA0LCAweDFiLCAweGNhLCAweDJlLCAweDMzLCAweDNhLAorCQkgMHhlOCwgMHhmY30sCisJLmRhdGEyID0KKwkJezB4NGUsIDB4OWMsIDB4ZWMsIDB4NDAsIDB4ODAsIDB4YzAsIDB4NDgsIDB4OTYsCisJCSAweGQ5fSwKKwkuZGF0YTQgPQorCQl7MHg2NiwgMHgwMCwgMHhhOCwgMHhhOH0sCisJLmRhdGE1ID0KKwkJezB4MGMsIDB4MDMsIDB4YWIsIDB4MjksIDB4ODEsIDB4Njl9LAorCS5zdHJlYW0gPQorCQl7MHgwYiwgMHgwNCwgMHgwYSwgMHgwMH0sCisgICAgfSwKICAgICB7CQkJCS8qIFRBUzUxMzBBICovCiAJLmRhdGExID0KLQkJezB4ZDAsIDB4YmIsIDB4ZDEsIDB4MjgsIDB4ZDIsIDB4MTAsIDB4ZDMsIDB4MTAsCi0JCSAweGQ0LCAweGJiLCAweGQ1LCAweDI4LCAweGQ2LCAweDFlLCAweGQ3LCAweDI3LAotCQkgMHhkOCwgMHhjOCwgMHhkOSwgMHhmY30sCisJCXsweGJiLCAweDI4LCAweDEwLCAweDEwLCAweGJiLCAweDI4LCAweDFlLCAweDI3LAorCQkgMHhjOCwgMHhmY30sCiAJLmRhdGEyID0KLQkJezB4ZTAsIDB4NjAsIDB4ZTEsIDB4YTgsIDB4ZTIsIDB4ZTAsIDB4ZTMsIDB4NjAsCi0JCSAweGU0LCAweGE4LCAweGU1LCAweGUwLCAweGU2LCAweDYwLCAweGU3LCAweGE4LAotCQkgMHhlOCwgMHhlMH0sCi0JLmRhdGEzID0KLQkJezB4YzcsIDB4NjAsIDB4YzgsIDB4YTgsIDB4YzksIDB4ZTAsIDB4Y2EsIDB4NjAsCi0JCSAweGNiLCAweGE4LCAweGNjLCAweGUwLCAweGNkLCAweDYwLCAweGNlLCAweGE4LAotCQkgMHhjZiwgMHhlMH0sCisJCXsweDYwLCAweGE4LCAweGUwLCAweDYwLCAweGE4LCAweGUwLCAweDYwLCAweGE4LAorCQkgMHhlMH0sCiAJLmRhdGE0ID0JLyogRnJlcSAoNTAvNjBIeikuIFNwbGl0dGVkIGZvciB0ZXN0IHB1cnBvc2UgKi8KIAkJezB4NjYsIDB4MDAsIDB4YTgsIDB4ZTh9LAogCS5kYXRhNSA9CkBAIC0yOTIsMzIgKzMxNSwxMiBAQAogCS5zdHJlYW0gPQogCQl7MHgwYiwgMHgwNCwgMHgwYSwgMHg0MH0sCiAgICAgfSwKLSAgICB7CQkJCS8qIE9NNjgwMiAqLwotCS5kYXRhMSA9Ci0JCXsweGQwLCAweGMyLCAweGQxLCAweDI4LCAweGQyLCAweDBmLCAweGQzLCAweDIyLAotCQkgMHhkNCwgMHhjZCwgMHhkNSwgMHgyNywgMHhkNiwgMHgyYywgMHhkNywgMHgwNiwKLQkJIDB4ZDgsIDB4YjMsIDB4ZDksIDB4ZmN9LAotCS5kYXRhMiA9Ci0JCXsweGUwLCAweDgwLCAweGUxLCAweGZmLCAweGUyLCAweGZmLCAweGUzLCAweDgwLAotCQkgMHhlNCwgMHhmZiwgMHhlNSwgMHhmZiwgMHhlNiwgMHg4MCwgMHhlNywgMHhmZiwKLQkJIDB4ZTgsIDB4ZmZ9LAotCS5kYXRhMyA9Ci0JCXsweGM3LCAweDgwLCAweGM4LCAweGZmLCAweGM5LCAweGZmLCAweGNhLCAweDgwLAotCQkgMHhjYiwgMHhmZiwgMHhjYywgMHhmZiwgMHhjZCwgMHg4MCwgMHhjZSwgMHhmZiwKLQkJIDB4Y2YsIDB4ZmZ9LAotCS5kYXRhNCA9CS8qRnJlcSAoNTAvNjBIeikuIFNwbGl0dGVkIGZvciB0ZXN0IHB1cnBvc2UgKi8KLQkJezB4NjYsIDB4Y2EsIDB4YTgsIDB4ZjAgfSwKLQkuZGF0YTUgPQkvKiB0aGlzIGNvdWxkIGJlIHJlbW92ZWQgbGF0ZXIgKi8KLQkJezB4MGMsIDB4MDMsIDB4YWIsIDB4MTMsIDB4ODEsIDB4MjN9LAotCS5zdHJlYW0gPQotCQl7MHgwYiwgMHgwNCwgMHgwYSwgMHg3OH0sCi0gICAgfQogfTsKIAogI2RlZmluZSBNQVhfRUZGRUNUUyA3CiAvKiBlYXNpbHkgZG9uZSBieSBzb2Z0LCB0aGlzIHRhYmxlIGNvdWxkIGJlIHJlbW92ZWQsCiAgKiBpIGtlZXAgaXQgaGVyZSBqdXN0IGluIGNhc2UgKi8KLXN0YXRpYyBjb25zdCBfX3U4IGVmZmVjdHNfdGFibGVbTUFYX0VGRkVDVFNdWzZdID0geworc3RhdGljIGNvbnN0IHU4IGVmZmVjdHNfdGFibGVbTUFYX0VGRkVDVFNdWzZdID0gewogCXsweGE4LCAweGU4LCAweGM2LCAweGQyLCAweGMwLCAweDAwfSwJLyogTm9ybWFsICovCiAJezB4YTgsIDB4YzgsIDB4YzYsIDB4NTIsIDB4YzAsIDB4MDR9LAkvKiBSZXB1amFyICovCiAJezB4YTgsIDB4ZTgsIDB4YzYsIDB4ZDIsIDB4YzAsIDB4MjB9LAkvKiBNb25vY2hyb21lICovCkBAIC0zMjcsOTAgKzMzMCw1OCBAQAogCXsweGE4LCAweGM4LCAweGM2LCAweGQyLCAweGMwLCAweDQwfSwJLyogTmVnYXRpdmUgKi8KIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IGdhbW1hX3RhYmxlW0dBTU1BX01BWF1bMzRdID0gewotCXsweDkwLCAweDAwLCAweDkxLCAweDNlLCAweDkyLCAweDY5LCAweDkzLCAweDg1LAkvKiAwICovCi0JIDB4OTQsIDB4OTUsIDB4OTUsIDB4YTEsIDB4OTYsIDB4YWUsIDB4OTcsIDB4YjksCi0JIDB4OTgsIDB4YzIsIDB4OTksIDB4Y2IsIDB4OWEsIDB4ZDQsIDB4OWIsIDB4ZGIsCi0JIDB4OWMsIDB4ZTMsIDB4OWQsIDB4ZWEsIDB4OWUsIDB4ZjEsIDB4OWYsIDB4ZjgsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDMzLCAweDkyLCAweDVhLCAweDkzLCAweDc1LAkvKiAxICovCi0JIDB4OTQsIDB4ODUsIDB4OTUsIDB4OTMsIDB4OTYsIDB4YTEsIDB4OTcsIDB4YWQsCi0JIDB4OTgsIDB4YjcsIDB4OTksIDB4YzIsIDB4OWEsIDB4Y2IsIDB4OWIsIDB4ZDQsCi0JIDB4OWMsIDB4ZGUsIDB4OUQsIDB4ZTcsIDB4OWUsIDB4ZjAsIDB4OWYsIDB4ZjcsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDJmLCAweDkyLCAweDUxLCAweDkzLCAweDZiLAkvKiAyICovCi0JIDB4OTQsIDB4N2MsIDB4OTUsIDB4OGEsIDB4OTYsIDB4OTksIDB4OTcsIDB4YTYsCi0JIDB4OTgsIDB4YjEsIDB4OTksIDB4YmMsIDB4OWEsIDB4YzYsIDB4OWIsIDB4ZDAsCi0JIDB4OWMsIDB4ZGIsIDB4OWQsIDB4ZTQsIDB4OWUsIDB4ZWQsIDB4OWYsIDB4ZjYsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDI5LCAweDkyLCAweDQ4LCAweDkzLCAweDYwLAkvKiAzICovCi0JIDB4OTQsIDB4NzIsIDB4OTUsIDB4ODEsIDB4OTYsIDB4OTAsIDB4OTcsIDB4OWUsCi0JIDB4OTgsIDB4YWEsIDB4OTksIDB4YjUsIDB4OWEsIDB4YmYsIDB4OWIsIDB4Y2IsCi0JIDB4OWMsIDB4ZDYsIDB4OWQsIDB4ZTEsIDB4OWUsIDB4ZWIsIDB4OWYsIDB4ZjUsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDIzLCAweDkyLCAweDNmLCAweDkzLCAweDU1LAkvKiA0ICovCi0JIDB4OTQsIDB4NjgsIDB4OTUsIDB4NzcsIDB4OTYsIDB4ODYsIDB4OTcsIDB4OTUsCi0JIDB4OTgsIDB4YTIsIDB4OTksIDB4YWQsIDB4OWEsIDB4YjksIDB4OWIsIDB4YzYsCi0JIDB4OWMsIDB4ZDIsIDB4OWQsIDB4ZGUsIDB4OWUsIDB4ZTksIDB4OWYsIDB4ZjQsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDFiLCAweDkyLCAweDMzLCAweDkzLCAweDQ4LAkvKiA1ICovCi0JIDB4OTQsIDB4NTksIDB4OTUsIDB4NjksIDB4OTYsIDB4NzksIDB4OTcsIDB4ODcsCi0JIDB4OTgsIDB4OTYsIDB4OTksIDB4YTMsIDB4OWEsIDB4YjEsIDB4OWIsIDB4YmUsCi0JIDB4OWMsIDB4Y2MsIDB4OWQsIDB4ZGEsIDB4OWUsIDB4ZTcsIDB4OWYsIDB4ZjMsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDAyLCAweDkyLCAweDEwLCAweDkzLCAweDIwLAkvKiA2ICovCi0JIDB4OTQsIDB4MzIsIDB4OTUsIDB4NDAsIDB4OTYsIDB4NTcsIDB4OTcsIDB4NjcsCi0JIDB4OTgsIDB4NzcsIDB4OTksIDB4ODgsIDB4OWEsIDB4OTksIDB4OWIsIDB4YWEsCi0JIDB4OWMsIDB4YmIsIDB4OWQsIDB4Y2MsIDB4OWUsIDB4ZGQsIDB4OWYsIDB4ZWUsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDAyLCAweDkyLCAweDE0LCAweDkzLCAweDI2LAkvKiA3ICovCi0JIDB4OTQsIDB4MzgsIDB4OTUsIDB4NGEsIDB4OTYsIDB4NjAsIDB4OTcsIDB4NzAsCi0JIDB4OTgsIDB4ODAsIDB4OTksIDB4OTAsIDB4OWEsIDB4YTAsIDB4OWIsIDB4YjAsCi0JIDB4OWMsIDB4YzAsIDB4OUQsIDB4ZDAsIDB4OWUsIDB4ZTAsIDB4OWYsIDB4ZjAsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDEwLCAweDkyLCAweDIyLCAweDkzLCAweDM1LAkvKiA4ICovCi0JIDB4OTQsIDB4NDcsIDB4OTUsIDB4NWEsIDB4OTYsIDB4NjksIDB4OTcsIDB4NzksCi0JIDB4OTgsIDB4ODgsIDB4OTksIDB4OTcsIDB4OWEsIDB4YTcsIDB4OWIsIDB4YjYsCi0JIDB4OWMsIDB4YzQsIDB4OWQsIDB4ZDMsIDB4OWUsIDB4ZTAsIDB4OWYsIDB4ZjAsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDEwLCAweDkyLCAweDI2LCAweDkzLCAweDQwLAkvKiA5ICovCi0JIDB4OTQsIDB4NTQsIDB4OTUsIDB4NjUsIDB4OTYsIDB4NzUsIDB4OTcsIDB4ODQsCi0JIDB4OTgsIDB4OTMsIDB4OTksIDB4YTEsIDB4OWEsIDB4YjAsIDB4OWIsIDB4YmQsCi0JIDB4OWMsIDB4Y2EsIDB4OWQsIDB4ZDYsIDB4OWUsIDB4ZTAsIDB4OWYsIDB4ZjAsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDE4LCAweDkyLCAweDJiLCAweDkzLCAweDQ0LAkvKiAxMCAqLwotCSAweDk0LCAweDYwLCAweDk1LCAweDcwLCAweDk2LCAweDgwLCAweDk3LCAweDhlLAotCSAweDk4LCAweDljLCAweDk5LCAweGFhLCAweDlhLCAweGI3LCAweDliLCAweGM0LAotCSAweDljLCAweGQwLCAweDlkLCAweGQ4LCAweDllLCAweGUyLCAweDlmLCAweGYwLAotCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHgxYSwgMHg5MiwgMHgzNCwgMHg5MywgMHg1MiwJLyogMTEgKi8KLQkgMHg5NCwgMHg2NiwgMHg5NSwgMHg3ZSwgMHg5NiwgMHg4RCwgMHg5NywgMHg5QiwKLQkgMHg5OCwgMHhhOCwgMHg5OSwgMHhiNCwgMHg5YSwgMHhjMCwgMHg5YiwgMHhjYiwKLQkgMHg5YywgMHhkNiwgMHg5ZCwgMHhlMSwgMHg5ZSwgMHhlYiwgMHg5ZiwgMHhmNSwKLQkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4M2YsIDB4OTIsIDB4NWEsIDB4OTMsIDB4NmUsCS8qIDEyICovCi0JIDB4OTQsIDB4N2YsIDB4OTUsIDB4OGUsIDB4OTYsIDB4OWMsIDB4OTcsIDB4YTgsCi0JIDB4OTgsIDB4YjQsIDB4OTksIDB4YmYsIDB4OWEsIDB4YzksIDB4OWIsIDB4ZDMsCi0JIDB4OWMsIDB4ZGMsIDB4OWQsIDB4ZTUsIDB4OWUsIDB4ZWUsIDB4OWYsIDB4ZjYsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDU0LCAweDkyLCAweDZmLCAweDkzLCAweDgzLAkvKiAxMyAqLwotCSAweDk0LCAweDkzLCAweDk1LCAweGEwLCAweDk2LCAweGFkLCAweDk3LCAweGI3LAotCSAweDk4LCAweGMyLCAweDk5LCAweGNiLCAweDlhLCAweGQ0LCAweDliLCAweGRjLAotCSAweDljLCAweGU0LCAweDlkLCAweGViLCAweDllLCAweGYyLCAweDlmLCAweGY5LAotCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHg2ZSwgMHg5MiwgMHg4OCwgMHg5MywgMHg5YSwJLyogMTQgKi8KLQkgMHg5NCwgMHhhOCwgMHg5NSwgMHhiMywgMHg5NiwgMHhiZCwgMHg5NywgMHhjNiwKLQkgMHg5OCwgMHhjZiwgMHg5OSwgMHhkNiwgMHg5YSwgMHhkZCwgMHg5YiwgMHhlMywKLQkgMHg5YywgMHhlOSwgMHg5ZCwgMHhlZiwgMHg5ZSwgMHhmNCwgMHg5ZiwgMHhmYSwKLQkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4OTMsIDB4OTIsIDB4YTgsIDB4OTMsIDB4YjcsCS8qIDE1ICovCi0JIDB4OTQsIDB4YzEsIDB4OTUsIDB4Y2EsIDB4OTYsIDB4ZDIsIDB4OTcsIDB4ZDgsCi0JIDB4OTgsIDB4ZGUsIDB4OTksIDB4ZTMsIDB4OWEsIDB4ZTgsIDB4OWIsIDB4ZWQsCi0JIDB4OWMsIDB4ZjEsIDB4OWQsIDB4ZjUsIDB4OWUsIDB4ZjgsIDB4OWYsIDB4ZmMsCi0JIDB4YTAsIDB4ZmZ9CitzdGF0aWMgY29uc3QgdTggZ2FtbWFfdGFibGVbR0FNTUFfTUFYXVsxN10gPSB7CisJezB4MDAsIDB4M2UsIDB4NjksIDB4ODUsIDB4OTUsIDB4YTEsIDB4YWUsIDB4YjksCS8qIDAgKi8KKwkgMHhjMiwgMHhjYiwgMHhkNCwgMHhkYiwgMHhlMywgMHhlYSwgMHhmMSwgMHhmOCwKKwkgMHhmZn0sCisJezB4MDAsIDB4MzMsIDB4NWEsIDB4NzUsIDB4ODUsIDB4OTMsIDB4YTEsIDB4YWQsCS8qIDEgKi8KKwkgMHhiNywgMHhjMiwgMHhjYiwgMHhkNCwgMHhkZSwgMHhlNywgMHhmMCwgMHhmNywKKwkgMHhmZn0sCisJezB4MDAsIDB4MmYsIDB4NTEsIDB4NmIsIDB4N2MsIDB4OGEsIDB4OTksIDB4YTYsCS8qIDIgKi8KKwkgMHhiMSwgMHhiYywgMHhjNiwgMHhkMCwgMHhkYiwgMHhlNCwgMHhlZCwgMHhmNiwKKwkgMHhmZn0sCisJezB4MDAsIDB4MjksIDB4NDgsIDB4NjAsIDB4NzIsIDB4ODEsIDB4OTAsIDB4OWUsCS8qIDMgKi8KKwkgMHhhYSwgMHhiNSwgMHhiZiwgMHhjYiwgMHhkNiwgMHhlMSwgMHhlYiwgMHhmNSwKKwkgMHhmZn0sCisJezB4MDAsIDB4MjMsIDB4M2YsIDB4NTUsIDB4NjgsIDB4NzcsIDB4ODYsIDB4OTUsCS8qIDQgKi8KKwkgMHhhMiwgMHhhZCwgMHhiOSwgMHhjNiwgMHhkMiwgMHhkZSwgMHhlOSwgMHhmNCwKKwkgMHhmZn0sCisJezB4MDAsIDB4MWIsIDB4MzMsIDB4NDgsIDB4NTksIDB4NjksIDB4NzksIDB4ODcsCS8qIDUgKi8KKwkgMHg5NiwgMHhhMywgMHhiMSwgMHhiZSwgMHhjYywgMHhkYSwgMHhlNywgMHhmMywKKwkgMHhmZn0sCisJezB4MDAsIDB4MDIsIDB4MTAsIDB4MjAsIDB4MzIsIDB4NDAsIDB4NTcsIDB4NjcsCS8qIDYgKi8KKwkgMHg3NywgMHg4OCwgMHg5OSwgMHhhYSwgMHhiYiwgMHhjYywgMHhkZCwgMHhlZSwKKwkgMHhmZn0sCisJezB4MDAsIDB4MDIsIDB4MTQsIDB4MjYsIDB4MzgsIDB4NGEsIDB4NjAsIDB4NzAsCS8qIDcgKi8KKwkgMHg4MCwgMHg5MCwgMHhhMCwgMHhiMCwgMHhjMCwgMHhkMCwgMHhlMCwgMHhmMCwKKwkgMHhmZn0sCisJezB4MDAsIDB4MTAsIDB4MjIsIDB4MzUsIDB4NDcsIDB4NWEsIDB4NjksIDB4NzksCS8qIDggKi8KKwkgMHg4OCwgMHg5NywgMHhhNywgMHhiNiwgMHhjNCwgMHhkMywgMHhlMCwgMHhmMCwKKwkgMHhmZn0sCisJezB4MDAsIDB4MTAsIDB4MjYsIDB4NDAsIDB4NTQsIDB4NjUsIDB4NzUsIDB4ODQsCS8qIDkgKi8KKwkgMHg5MywgMHhhMSwgMHhiMCwgMHhiZCwgMHhjYSwgMHhkNiwgMHhlMCwgMHhmMCwKKwkgMHhmZn0sCisJezB4MDAsIDB4MTgsIDB4MmIsIDB4NDQsIDB4NjAsIDB4NzAsIDB4ODAsIDB4OGUsCS8qIDEwICovCisJIDB4OWMsIDB4YWEsIDB4YjcsIDB4YzQsIDB4ZDAsIDB4ZDgsIDB4ZTIsIDB4ZjAsCisJIDB4ZmZ9LAorCXsweDAwLCAweDFhLCAweDM0LCAweDUyLCAweDY2LCAweDdlLCAweDhELCAweDlCLAkvKiAxMSAqLworCSAweGE4LCAweGI0LCAweGMwLCAweGNiLCAweGQ2LCAweGUxLCAweGViLCAweGY1LAorCSAweGZmfSwKKwl7MHgwMCwgMHgzZiwgMHg1YSwgMHg2ZSwgMHg3ZiwgMHg4ZSwgMHg5YywgMHhhOCwJLyogMTIgKi8KKwkgMHhiNCwgMHhiZiwgMHhjOSwgMHhkMywgMHhkYywgMHhlNSwgMHhlZSwgMHhmNiwKKwkgMHhmZn0sCisJezB4MDAsIDB4NTQsIDB4NmYsIDB4ODMsIDB4OTMsIDB4YTAsIDB4YWQsIDB4YjcsCS8qIDEzICovCisJIDB4YzIsIDB4Y2IsIDB4ZDQsIDB4ZGMsIDB4ZTQsIDB4ZWIsIDB4ZjIsIDB4ZjksCisJIDB4ZmZ9LAorCXsweDAwLCAweDZlLCAweDg4LCAweDlhLCAweGE4LCAweGIzLCAweGJkLCAweGM2LAkvKiAxNCAqLworCSAweGNmLCAweGQ2LCAweGRkLCAweGUzLCAweGU5LCAweGVmLCAweGY0LCAweGZhLAorCSAweGZmfSwKKwl7MHgwMCwgMHg5MywgMHhhOCwgMHhiNywgMHhjMSwgMHhjYSwgMHhkMiwgMHhkOCwJLyogMTUgKi8KKwkgMHhkZSwgMHhlMywgMHhlOCwgMHhlZCwgMHhmMSwgMHhmNSwgMHhmOCwgMHhmYywKKwkgMHhmZn0KIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IHRhczUxMzBhX3NlbnNvcl9pbml0W11bOF0gPSB7CitzdGF0aWMgY29uc3QgdTggdGFzNTEzMGFfc2Vuc29yX2luaXRbXVs4XSA9IHsKIAl7MHg2MiwgMHgwOCwgMHg2MywgMHg3MCwgMHg2NCwgMHgxZCwgMHg2MCwgMHgwOX0sCiAJezB4NjIsIDB4MjAsIDB4NjMsIDB4MDEsIDB4NjQsIDB4MDIsIDB4NjAsIDB4MDl9LAogCXsweDYyLCAweDA3LCAweDYzLCAweDAzLCAweDY0LCAweDAwLCAweDYwLCAweDA5fSwKQEAgLTQxOCwxMSArMzg5LDExIEBACiAJe30sCiB9OwogCi1zdGF0aWMgX191OCBzZW5zb3JfcmVzZXRbXSA9IHsweDYxLCAweDY4LCAweDYyLCAweGZmLCAweDYwLCAweDA3fTsKK3N0YXRpYyB1OCBzZW5zb3JfcmVzZXRbXSA9IHsweDYxLCAweDY4LCAweDYyLCAweGZmLCAweDYwLCAweDA3fTsKIAogLyogcmVhZCAxIGJ5dGUgKi8KLXN0YXRpYyBpbnQgcmVnX3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkgICBfX3UxNiBpbmRleCkKK3N0YXRpYyB1OCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgIHUxNiBpbmRleCkKIHsKIAl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLApAQCAtNDM1LDcgKzQwNiw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJICBfX3UxNiBpbmRleCkKKwkJICB1MTYgaW5kZXgpCiB7CiAJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKQEAgLTQ0Niw3ICs0MTcsNyBAQAogfQogCiBzdGF0aWMgdm9pZCByZWdfd19idWYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkgIGNvbnN0IF9fdTggKmJ1ZmZlciwgX191MTYgbGVuKQorCQkgIGNvbnN0IHU4ICpidWZmZXIsIHUxNiBsZW4pCiB7CiAJaWYgKGxlbiA8PSBVU0JfQlVGX1NaKSB7CiAJCW1lbWNweShnc3BjYV9kZXYtPnVzYl9idWYsIGJ1ZmZlciwgbGVuKTsKQEAgLTQ1Nyw3ICs0MjgsNyBAQAogCQkJCTB4MDEsIDAsCiAJCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW4sIDUwMCk7CiAJfSBlbHNlIHsKLQkJX191OCAqdG1wYnVmOworCQl1OCAqdG1wYnVmOwogCiAJCXRtcGJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAkJbWVtY3B5KHRtcGJ1ZiwgYnVmZmVyLCBsZW4pOwpAQCAtNDcxLDE0ICs0NDIsNDEgQEAKIAl9CiB9CiAKKy8qIHdyaXRlIHZhbHVlcyB0byBjb25zZWN1dGl2ZSByZWdpc3RlcnMgKi8KK3N0YXRpYyB2b2lkIHJlZ193X2l4YnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4IHJlZywKKwkJCWNvbnN0IHU4ICpidWZmZXIsIHUxNiBsZW4pCit7CisJaW50IGk7CisJdTggKnAsICp0bXBidWY7CisKKwlpZiAobGVuICogMiA8PSBVU0JfQlVGX1NaKQorCQlwID0gdG1wYnVmID0gZ3NwY2FfZGV2LT51c2JfYnVmOworCWVsc2UKKwkJcCA9IHRtcGJ1ZiA9IGttYWxsb2MobGVuICogMiwgR0ZQX0tFUk5FTCk7CisJaSA9IGxlbjsKKwl3aGlsZSAoLS1pID49IDApIHsKKwkJKnArKyA9IHJlZysrOworCQkqcCsrID0gKmJ1ZmZlcisrOworCX0KKwl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJMCwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCTB4MDEsIDAsCisJCQl0bXBidWYsIGxlbiAqIDIsIDUwMCk7CisJaWYgKGxlbiAqIDIgPiBVU0JfQlVGX1NaKQorCQlrZnJlZSh0bXBidWYpOworfQorCiAvKiBSZXBvcnRlZCBhcyBPTTY4MDIqLwogc3RhdGljIHZvaWQgb202ODAyX3NlbnNvcl9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpbnQgaTsKLQljb25zdCBfX3U4ICpwOwotCV9fdTggYnl0ZTsKLQlfX3U4IHZhbFs2XSA9IHsweDYyLCAwLCAweDY0LCAwLCAweDYwLCAweDA1fTsKLQlzdGF0aWMgY29uc3QgX191OCBzZW5zb3JfaW5pdFtdID0geworCWNvbnN0IHU4ICpwOworCXU4IGJ5dGU7CisJdTggdmFsWzZdID0gezB4NjIsIDAsIDB4NjQsIDAsIDB4NjAsIDB4MDV9OworCXN0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdFtdID0gewogCQkweGRmLCAweDZkLAogCQkweGRkLCAweDE4LAogCQkweDVhLCAweGUwLApAQCAtNDk3LDcgKzQ5NSw3IEBACiAJfTsKIAogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9yZXNldCwgc2l6ZW9mIHNlbnNvcl9yZXNldCk7Ci0JbXNsZWVwKDUpOworCW1zbGVlcCgxMDApOwogCWkgPSA0OwogCXdoaWxlICgtLWkgPiAwKSB7CiAJCWJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDA2MCk7CkBAIC01MzgsMjAgKzUzNiwyMCBAQAogCXN0cnVjdCBjYW0gKmNhbTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAKIAljYW0tPmNhbV9tb2RlID0gdmdhX21vZGVfdDE2OwogCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZV90MTYpOwogCi0Jc2QtPmJyaWdodG5lc3MgPSBzZF9jdHJsc1tTRF9CUklHSFRORVNTXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwotCXNkLT5jb250cmFzdCA9IHNkX2N0cmxzW1NEX0NPTlRSQVNUXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwotCXNkLT5jb2xvcnMgPSBzZF9jdHJsc1tTRF9DT0xPUl0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOworCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKKwlzZC0+Y29sb3JzID0gQ09MT1JTX0RFRjsKIAlzZC0+Z2FtbWEgPSBHQU1NQV9ERUY7Ci0Jc2QtPm1pcnJvciA9IHNkX2N0cmxzW1NEX01JUlJPUl0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+ZnJlcSA9IHNkX2N0cmxzW1NEX0xJR0hURlJFUV0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+d2hpdGViYWxhbmNlID0gc2RfY3RybHNbU0RfV0hJVEVfQkFMQU5DRV0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+c2hhcnBuZXNzID0gc2RfY3RybHNbU0RfU0hBUlBORVNTXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwotCXNkLT5lZmZlY3QgPSBzZF9jdHJsc1tTRF9FRkZFQ1RTXS5xY3RybC5kZWZhdWx0X3ZhbHVlOworCXNkLT5hdXRvZ2FpbiA9IEFVVE9HQUlOX0RFRjsKKwlzZC0+bWlycm9yID0gTUlSUk9SX0RFRjsKKwlzZC0+ZnJlcSA9IEZSRVFfREVGOworCXNkLT53aGl0ZWJhbGFuY2UgPSBXSElURV9CQUxBTkNFX0RFRjsKKwlzZC0+c2hhcnBuZXNzID0gU0hBUlBORVNTX0RFRjsKKwlzZC0+ZWZmZWN0ID0gRUZGRUNUU19ERUY7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU1OSw3ICs1NTcsNyBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAl1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzczsKLQlfX3U4IHNldDZbNF0gPSB7IDB4OGYsIDB4MjQsIDB4YzMsIDB4MDAgfTsKKwl1OCBzZXQ2WzRdID0geyAweDhmLCAweDI0LCAweGMzLCAweDAwIH07CiAKIAlicmlnaHRuZXNzID0gc2QtPmJyaWdodG5lc3M7CiAJaWYgKGJyaWdodG5lc3MgPCA3KSB7CkBAIC01NzYsNyArNTc0LDcgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJdW5zaWduZWQgaW50IGNvbnRyYXN0ID0gc2QtPmNvbnRyYXN0OwotCV9fdTE2IHJlZ190b193cml0ZTsKKwl1MTYgcmVnX3RvX3dyaXRlOwogCiAJaWYgKGNvbnRyYXN0IDwgNykKIAkJcmVnX3RvX3dyaXRlID0gMHg4ZWE5IC0gY29udHJhc3QgKiAweDIwMDsKQEAgLTU4OSw3ICs1ODcsNyBAQAogc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191MTYgcmVnX3RvX3dyaXRlOworCXUxNiByZWdfdG9fd3JpdGU7CiAKIAlyZWdfdG9fd3JpdGUgPSAweDgwYmIgKyBzZC0+Y29sb3JzICogMHgxMDA7CS8qIHdhcyAweGMwICovCiAJcmVnX3coZ3NwY2FfZGV2LCByZWdfdG9fd3JpdGUpOwpAQCAtNjAwLDE0ICs1OTgsMTUgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlQREVCVUcoRF9DT05GLCAiR2FtbWE6ICVkIiwgc2QtPmdhbW1hKTsKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCBnYW1tYV90YWJsZVtzZC0+Z2FtbWFdLCBzaXplb2YgZ2FtbWFfdGFibGVbMF0pOworCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHg5MCwKKwkJZ2FtbWFfdGFibGVbc2QtPmdhbW1hXSwgc2l6ZW9mIGdhbW1hX3RhYmxlWzBdKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0d2hpdGViYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlfX3U4IHdoaXRlX2JhbGFuY2VbOF0gPQorCXU4IHdoaXRlX2JhbGFuY2VbOF0gPQogCQl7MHg4NywgMHgyMCwgMHg4OCwgMHgyMCwgMHg4OSwgMHgyMCwgMHg4MCwgMHgzOH07CiAKIAlpZiAoc2QtPndoaXRlYmFsYW5jZSkKQEAgLTYxOSw3ICs2MTgsNyBAQAogc3RhdGljIHZvaWQgc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191MTYgcmVnX3RvX3dyaXRlOworCXUxNiByZWdfdG9fd3JpdGU7CiAKIAlyZWdfdG9fd3JpdGUgPSAweDBhYTYgKyAweDEwMDAgKiBzZC0+c2hhcnBuZXNzOwogCkBAIC02MzUsMTggKzYzNCwyMiBAQAogCSAqIHRvIHNlZSB0aGUgaW5pdGlhbCBwYXJhbWV0ZXJzLiovCiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBpOwotCV9fdTggYnl0ZSwgdGVzdF9ieXRlOworCXUxNiBzZW5zb3JfaWQ7CisJdTggdGVzdF9ieXRlID0gMDsKKwl1MTYgcmVnODAsIHJlZzhlOwogCi0Jc3RhdGljIGNvbnN0IF9fdTggcmVhZF9pbmRleHNbXSA9Ci0JCXsgMHgwNiwgMHgwNywgMHgwYSwgMHgwYiwgMHg2NiwgMHg4MCwgMHg4MSwgMHg4ZSwgMHg4ZiwgMHhhNSwKLQkJICAweGE2LCAweGE4LCAweGJiLCAweGJjLCAweGM2LCAweDAwLCAweDAwIH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbjFbXSA9CisJc3RhdGljIGNvbnN0IHU4IHJlYWRfaW5kZXhzW10gPQorCQl7IDB4MGEsIDB4MGIsIDB4NjYsIDB4ODAsIDB4ODEsIDB4OGUsIDB4OGYsIDB4YTUsCisJCSAgMHhhNiwgMHhhOCwgMHhiYiwgMHhiYywgMHhjNiwgMHgwMCB9OworCXN0YXRpYyBjb25zdCB1OCBuMVtdID0KIAkJCXsweDA4LCAweDAzLCAweDA5LCAweDAzLCAweDEyLCAweDA0fTsKLQlzdGF0aWMgY29uc3QgX191OCBuMltdID0KKwlzdGF0aWMgY29uc3QgdTggbjJbXSA9CiAJCQl7MHgwOCwgMHgwMH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbjNbXSA9CisJc3RhdGljIGNvbnN0IHU4IG4zWzZdID0KIAkJCXsweDYxLCAweDY4LCAweDY1LCAweDBhLCAweDYwLCAweDA0fTsKLQlzdGF0aWMgY29uc3QgX191OCBuNFtdID0KKwlzdGF0aWMgY29uc3QgdTggbjNfb3RoZXJbNl0gPQorCQkJezB4NjEsIDB4YzIsIDB4NjUsIDB4ODgsIDB4NjAsIDB4MDB9OworCXN0YXRpYyBjb25zdCB1OCBuNFtdID0KIAkJezB4MDksIDB4MDEsIDB4MTIsIDB4MDQsIDB4NjYsIDB4OGEsIDB4ODAsIDB4M2MsCiAJCSAweDgxLCAweDIyLCAweDg0LCAweDUwLCAweDhhLCAweDc4LCAweDhiLCAweDY4LAogCQkgMHg4YywgMHg4OCwgMHg4ZSwgMHgzMywgMHg4ZiwgMHgyNCwgMHhhYSwgMHhiMSwKQEAgLTY1Niw0MCArNjU5LDYxIEBACiAJCSAweDY1LCAweDBhLCAweGJiLCAweDg2LCAweGFmLCAweDU4LCAweGIwLCAweDY4LAogCQkgMHg4NywgMHg0MCwgMHg4OSwgMHgyYiwgMHg4ZCwgMHhmZiwgMHg4MywgMHg0MCwKIAkJIDB4YWMsIDB4ODQsIDB4YWQsIDB4ODYsIDB4YWYsIDB4NDZ9OwotCXN0YXRpYyBjb25zdCBfX3U4IG5zZXQ5WzRdID0KLQkJCXsgMHgwYiwgMHgwNCwgMHgwYSwgMHg3OCB9OwotCXN0YXRpYyBjb25zdCBfX3U4IG5zZXQ4WzZdID0KKwlzdGF0aWMgY29uc3QgdTggbjRfb3RoZXJbXSA9CisJCXsweDY2LCAweDAwLCAweDdmLCAweDAwLCAweDgwLCAweGFjLCAweDgxLCAweDY5LAorCQkgMHg4NCwgMHg0MCwgMHg4NSwgMHg3MCwgMHg4NiwgMHgyMCwgMHg4YSwgMHg2OCwKKwkJIDB4OGIsIDB4NTgsIDB4OGMsIDB4ODgsIDB4OGQsIDB4ZmYsIDB4OGUsIDB4YjgsCisJCSAweDhmLCAweDI4LCAweGEyLCAweDYwLCAweGE1LCAweDQwLCAweGE4LCAweGE4LAorCQkgMHhhYywgMHg4NCwgMHhhZCwgMHg4NCwgMHhhZSwgMHgyNCwgMHhhZiwgMHg1NiwKKwkJIDB4YjAsIDB4NjgsIDB4YjEsIDB4MDAsIDB4YjIsIDB4ODgsIDB4YmIsIDB4YzUsCisJCSAweGJjLCAweDRhLCAweGJlLCAweDM2LCAweGMyLCAweDg4LCAweGM1LCAweGMwLAorCQkgMHhjNiwgMHhkYSwgMHhlOSwgMHgyNiwgMHhlYiwgMHgwMH07CisJc3RhdGljIGNvbnN0IHU4IG5zZXQ4WzZdID0KIAkJCXsgMHhhOCwgMHhmMCwgMHhjNiwgMHg4OCwgMHhjMCwgMHgwMCB9OworCXN0YXRpYyBjb25zdCB1OCBuc2V0OF9vdGhlcls2XSA9CisJCQl7IDB4YTgsIDB4YTgsIDB4YzYsIDB4ZGEsIDB4YzAsIDB4MDAgfTsKKwlzdGF0aWMgY29uc3QgdTggbnNldDlbNF0gPQorCQkJeyAweDBiLCAweDA0LCAweDBhLCAweDc4IH07CisJc3RhdGljIGNvbnN0IHU4IG5zZXQ5X290aGVyWzRdID0KKwkJCXsgMHgwYiwgMHgwNCwgMHgwYSwgMHgwMCB9OwogCi0JYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwNik7Ci0JdGVzdF9ieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDA3KTsKLQlpZiAoYnl0ZSA9PSAweDA4ICYmIHRlc3RfYnl0ZSA9PSAweDA3KSB7Ci0JCVBERUJVRyhEX0NPTkYsICJzZW5zb3Igb202ODAyIik7CisJc2Vuc29yX2lkID0gKHJlZ19yKGdzcGNhX2RldiwgMHgwNikgPDwgOCkKKwkJCXwgcmVnX3IoZ3NwY2FfZGV2LCAweDA3KTsKKwlzd2l0Y2ggKHNlbnNvcl9pZCAmIDB4ZmYwZikgeworCWNhc2UgMHgwODAxOgorCQlQREVCVUcoRF9QUk9CRSwgInNlbnNvciB0YXM1MTMwYSIpOworCQlzZC0+c2Vuc29yID0gU0VOU09SX1RBUzUxMzBBOworCQlicmVhazsKKwljYXNlIDB4MDgwMzoKKwkJUERFQlVHKERfUFJPQkUsICJzZW5zb3IgJ290aGVyJyIpOworCQlzZC0+c2Vuc29yID0gU0VOU09SX09USEVSOworCQlicmVhazsKKwljYXNlIDB4MDgwNzoKKwkJUERFQlVHKERfUFJPQkUsICJzZW5zb3Igb202ODAyIik7CiAJCXNkLT5zZW5zb3IgPSBTRU5TT1JfT002ODAyOwotCX0gZWxzZSBpZiAoYnl0ZSA9PSAweDA4ICYmIHRlc3RfYnl0ZSA9PSAweDAxKSB7Ci0JCVBERUJVRyhEX0NPTkYsICJzZW5zb3IgdGFzNTEzMGEiKTsKLQkJc2QtPnNlbnNvciA9IFNFTlNPUl9UQVM1MTMwQTsKLQl9IGVsc2UgewotCQlQREVCVUcoRF9DT05GLCAidW5rbm93biBzZW5zb3IgJTAyeCAlMDJ4IiwgYnl0ZSwgdGVzdF9ieXRlKTsKLQkJc2QtPnNlbnNvciA9IFNFTlNPUl9UQVM1MTMwQTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUERFQlVHKERfRVJSfERfUFJPQkUsICJ1bmtub3duIHNlbnNvciAlMDR4Iiwgc2Vuc29yX2lkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmVnX3dfYnVmKGdzcGNhX2RldiwgbjEsIHNpemVvZiBuMSk7Ci0JdGVzdF9ieXRlID0gMDsKLQlpID0gNTsKLQl3aGlsZSAoLS1pID49IDApIHsKLQkJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX3Jlc2V0LCBzaXplb2Ygc2Vuc29yX3Jlc2V0KTsKLQkJdGVzdF9ieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDAwNjMpOwotCQltc2xlZXAoMTAwKTsKLQkJaWYgKHRlc3RfYnl0ZSA9PSAweDE3KQotCQkJYnJlYWs7CQkvKiBPSyAqLwotCX0KLQlpZiAoaSA8IDApIHsKLQkJZXJyKCJCYWQgc2Vuc29yIHJlc2V0ICUwMngiLCB0ZXN0X2J5dGUpOwotLyoJCXJldHVybiAtRUlPOyAqLworCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9PVEhFUikgeworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuMSwgc2l6ZW9mIG4xKTsKKwkJaSA9IDU7CisJCXdoaWxlICgtLWkgPj0gMCkgeworCQkJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX3Jlc2V0LCBzaXplb2Ygc2Vuc29yX3Jlc2V0KTsKKwkJCXRlc3RfYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwMDYzKTsKKwkJCW1zbGVlcCgxMDApOworCQkJaWYgKHRlc3RfYnl0ZSA9PSAweDE3KQorCQkJCWJyZWFrOwkJLyogT0sgKi8KKwkJfQorCQlpZiAoaSA8IDApIHsKKwkJCWVycigiQmFkIHNlbnNvciByZXNldCAlMDJ4IiwgdGVzdF9ieXRlKTsKKy8qCQkJcmV0dXJuIC1FSU87ICovCiAvKmZpeG1lOiB0ZXN0IC0gY29udGludWUgKi8KKwkJfQorCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuMiwgc2l6ZW9mIG4yKTsKIAl9Ci0JcmVnX3dfYnVmKGdzcGNhX2RldiwgbjIsIHNpemVvZiBuMik7CiAKIAlpID0gMDsKIAl3aGlsZSAocmVhZF9pbmRleHNbaV0gIT0gMHgwMCkgewpAQCAtNjk5LDIxICs3MjMsMzEgQEAKIAkJaSsrOwogCX0KIAotCXJlZ193X2J1Zihnc3BjYV9kZXYsIG4zLCBzaXplb2YgbjMpOwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIG40LCBzaXplb2YgbjQpOwotCXJlZ19yKGdzcGNhX2RldiwgMHgwMDgwKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MmM4MCk7CisJaWYgKHNkLT5zZW5zb3IgIT0gU0VOU09SX09USEVSKSB7CisJCXJlZ193X2J1Zihnc3BjYV9kZXYsIG4zLCBzaXplb2YgbjMpOworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuNCwgc2l6ZW9mIG40KTsKKwkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwODApOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MmM4MCk7CisJCXJlZzgwID0gMHgzODgwOworCQlyZWc4ZSA9IDB4MzM4ZTsKKwl9IGVsc2UgeworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuM19vdGhlciwgc2l6ZW9mIG4zX290aGVyKTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgbjRfb3RoZXIsIHNpemVvZiBuNF9vdGhlcik7CisJCXNkLT5nYW1tYSA9IDU7CisJCXJlZzgwID0gMHhhYzgwOworCQlyZWc4ZSA9IDB4Yjg4ZTsKKwl9CiAKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSwKKwlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4ZDAsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGExLAogCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGExKTsKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMywKLQkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMyk7Ci0JcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIsCisJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGM3LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMiwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMik7CisJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGUwLCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMiwKIAkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMik7CiAKLQlyZWdfdyhnc3BjYV9kZXYsIDB4Mzg4MCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDM4ODApOwotCXJlZ193KGdzcGNhX2RldiwgMHgzMzhlKTsKKwlyZWdfdyhnc3BjYV9kZXYsIHJlZzgwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIHJlZzgwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIHJlZzhlKTsKIAogCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKIAlzZXRjb250cmFzdChnc3BjYV9kZXYpOwpAQCAtNzMwLDE2ICs3NjQsMjAgQEAKIAkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNCk7CiAJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTUsCiAJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTUpOwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIG5zZXQ4LCBzaXplb2YgbnNldDgpOwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIG5zZXQ5LCBzaXplb2YgbnNldDkpOworCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9PVEhFUikgeworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuc2V0OCwgc2l6ZW9mIG5zZXQ4KTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgbnNldDksIHNpemVvZiBuc2V0OSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgyODgwKTsKKwl9IGVsc2UgeworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuc2V0OF9vdGhlciwgc2l6ZW9mIG5zZXQ4X290aGVyKTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgbnNldDlfb3RoZXIsIHNpemVvZiBuc2V0OV9vdGhlcik7CisJfQogCi0JcmVnX3coZ3NwY2FfZGV2LCAweDI4ODApOwotCi0JcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTEsCisJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGQwLCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSwKIAkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSk7Ci0JcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTMsCi0JCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTMpOwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyLAorCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhjNywgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIsCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIpOworCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhlMCwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIsCiAJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIpOwogCiAJcmV0dXJuIDA7CkBAIC03NDgsNyArNzg2LDcgQEAKIHN0YXRpYyB2b2lkIHNldGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlfX3U4IGZsaXBjbWRbOF0gPQorCXU4IGZsaXBjbWRbOF0gPQogCQl7MHg2MiwgMHgwNywgMHg2MywgMHgwMywgMHg2NCwgMHgwMCwgMHg2MCwgMHgwOX07CiAKIAlpZiAoc2QtPm1pcnJvcikKQEAgLTc3OCw3ICs4MTYsNyBAQAogc3RhdGljIHZvaWQgc2V0bGlnaHRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191OCBmcmVxWzRdID0geyAweDY2LCAweDQwLCAweGE4LCAweGU4IH07CisJdTggZnJlcVs0XSA9IHsgMHg2NiwgMHg0MCwgMHhhOCwgMHhlOCB9OwogCiAJaWYgKHNkLT5mcmVxID09IDIpCS8qIDYwaHogKi8KIAkJZnJlcVsxXSA9IDB4MDA7CkBAIC03OTEsMjIgKzgyOSwyMiBAQAogc3RhdGljIHZvaWQgcG9sbF9zZW5zb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlzdGF0aWMgY29uc3QgX191OCBwb2xsMVtdID0KKwlzdGF0aWMgY29uc3QgdTggcG9sbDFbXSA9CiAJCXsweDY3LCAweDA1LCAweDY4LCAweDgxLCAweDY5LCAweDgwLCAweDZhLCAweDgyLAogCQkgMHg2YiwgMHg2OCwgMHg2YywgMHg2OSwgMHg3MiwgMHhkOSwgMHg3MywgMHgzNCwKIAkJIDB4NzQsIDB4MzIsIDB4NzUsIDB4OTIsIDB4NzYsIDB4MDAsIDB4MDksIDB4MDEsCiAJCSAweDYwLCAweDE0fTsKLQlzdGF0aWMgY29uc3QgX191OCBwb2xsMltdID0KKwlzdGF0aWMgY29uc3QgdTggcG9sbDJbXSA9CiAJCXsweDY3LCAweDAyLCAweDY4LCAweDcxLCAweDY5LCAweDcyLCAweDcyLCAweGE5LAogCQkgMHg3MywgMHgwMiwgMHg3MywgMHgwMiwgMHg2MCwgMHgxNH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggcG9sbDNbXSA9CisJc3RhdGljIGNvbnN0IHU4IHBvbGwzW10gPQogCQl7MHg4NywgMHgzZiwgMHg4OCwgMHgyMCwgMHg4OSwgMHgyZH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggcG9sbDRbXSA9CisJc3RhdGljIGNvbnN0IHU4IHBvbGw0W10gPQogCQl7MHhhNiwgMHgwYSwgMHhlYSwgMHhjZiwgMHhiZSwgMHgyNiwgMHhiMSwgMHg1ZiwKIAkJIDB4YTEsIDB4YjEsIDB4ZGEsIDB4NmIsIDB4ZGIsIDB4OTgsIDB4ZGYsIDB4MGMsCiAJCSAweGMyLCAweDgwLCAweGMzLCAweDEwfTsKIAotCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9UQVM1MTMwQSkgeworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PTTY4MDIpIHsKIAkJUERFQlVHKERfU1RSRUFNLCAiW1NlbnNvciByZXF1aXJlcyBwb2xsaW5nXSIpOwogCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBwb2xsMSwgc2l6ZW9mIHBvbGwxKTsKIAkJcmVnX3dfYnVmKGdzcGNhX2RldiwgcG9sbDIsIHNpemVvZiBwb2xsMik7CkBAIC04MTksMTMgKzg1NywxNCBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgaSwgbW9kZTsKLQlfX3U4IHQyW10gPSB7IDB4MDcsIDB4MDAsIDB4MGQsIDB4NjAsIDB4MGUsIDB4ODAgfTsKLQlzdGF0aWMgY29uc3QgX191OCB0M1tdID0KLQkJeyAweGIzLCAweDA3LCAweGI0LCAweDAwLCAweGI1LCAweDg4LCAweGI2LCAweDAyLCAweGI3LCAweDA2LAotCQkgIDB4YjgsIDB4MDAsIDB4YjksIDB4ZTcsIDB4YmEsIDB4MDEgfTsKKwl1OCB0MltdID0geyAweDA3LCAweDAwLCAweDBkLCAweDYwLCAweDBlLCAweDgwIH07CisJc3RhdGljIGNvbnN0IHU4IHQzW10gPQorCQl7IDB4MDcsIDB4MDAsIDB4ODgsIDB4MDIsIDB4MDYsIDB4MDAsIDB4ZTcsIDB4MDEgfTsKIAogCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0uIHByaXY7CiAJc3dpdGNoIChtb2RlKSB7CisJY2FzZSAwOgkJLyogNjQweDQ4MCAoMHgwMCkgKi8KKwkJYnJlYWs7CiAJY2FzZSAxOgkJLyogMzUyeDI4OCAqLwogCQl0MlsxXSA9IDB4NDA7CiAJCWJyZWFrOwpAQCAtODM1LDE0ICs4NzQsMjAgQEAKIAljYXNlIDM6CQkvKiAxNzZ4MTQ0ICovCiAJCXQyWzFdID0gMHg1MDsKIAkJYnJlYWs7Ci0JY2FzZSA0OgkJLyogMTYweDEyMCAqLworCWRlZmF1bHQ6CisvKgljYXNlIDQ6CQkgKiAxNjB4MTIwICovCiAJCXQyWzFdID0gMHgyMDsKIAkJYnJlYWs7Ci0JZGVmYXVsdDoJLyogNjQweDQ4MCAoMHgwMCkgKi8KLQkJYnJlYWs7CiAJfQogCi0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1RBUzUxMzBBKSB7CisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfT002ODAyOgorCQlvbTY4MDJfc2Vuc29yX2luaXQoZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfT1RIRVI6CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNFTlNPUl9UQVM1MTMwQTogKi8KIAkJaSA9IDA7CiAJCXdoaWxlICh0YXM1MTMwYV9zZW5zb3JfaW5pdFtpXVswXSAhPSAwKSB7CiAJCQlyZWdfd19idWYoZ3NwY2FfZGV2LCB0YXM1MTMwYV9zZW5zb3JfaW5pdFtpXSwKQEAgLTg1NCwxNCArODk5LDEzIEBACiAJCXJlZ193X2J1Zihnc3BjYV9kZXYsIHRhczUxMzBhX3NlbnNvcl9pbml0WzNdLAogCQkJCSBzaXplb2YgdGFzNTEzMGFfc2Vuc29yX2luaXRbMF0pOwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4M2M4MCk7Ci0JfSBlbHNlIHsKLQkJb202ODAyX3NlbnNvcl9pbml0KGdzcGNhX2Rldik7CisJCWJyZWFrOwogCX0KIAlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNCwKIAkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNCk7CiAJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMTIpOwogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHQyLCBzaXplb2YgdDIpOwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIHQzLCBzaXplb2YgdDMpOworCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhiMywgdDMsIHNpemVvZiB0Myk7CiAJcmVnX3coZ3NwY2FfZGV2LCAweDAwMTMpOwogCW1zbGVlcCgxNSk7CiAJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc3RyZWFtLApAQCAtODg1LDE2ICs5MjksMTggQEAKIAltc2xlZXAoMjApOwogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnN0cmVhbSwKIAkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5zdHJlYW0pOwotCW1zbGVlcCgyMCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAzMDkpOworCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9PVEhFUikgeworCQltc2xlZXAoMjApOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDMwOSk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAkvKiB0YXJnZXQgKi8KLQkJCV9fdTggKmRhdGEsCQkJLyogaXNvYyBwYWNrZXQgKi8KKwkJCXU4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCiAJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCiB7Ci0Jc3RhdGljIF9fdTggZmZkOVtdID0geyAweGZmLCAweGQ5IH07CisJc3RhdGljIHU4IGZmZDlbXSA9IHsgMHhmZiwgMHhkOSB9OwogCiAJaWYgKGRhdGFbMF0gPT0gMHg1YSkgewogCQkvKiBDb250cm9sIFBhY2tldCwgYWZ0ZXIgdGhpcyBjYW1lIHRoZSBoZWFkZXIgYWdhaW4sCkBAIC0xMTcyLDggKzEyMTgsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jCmluZGV4IDk0MTYzY2MuLjlmMjQzZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYwpAQCAtMzEsNyArMzEsNiBAQAogCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAKIAlfX3UxNiBicmlnaHRuZXNzOwotCV9fdTE2IGNvbnRyYXN0OwogCiAJX191OCBwYWNrZXQ7CiB9OwpAQCAtMzksMzggKzM4LDIyIEBACiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7Ci1zdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKLXN0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAogc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7Ci0jZGVmaW5lIFNEX0JSSUdIVE5FU1MgMAogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUywKIAkgIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkgIC5uYW1lID0gIkJyaWdodG5lc3MiLAogCSAgLm1pbmltdW0gPSAxLAotCSAgLm1heGltdW0gPSAweDJmZiwKKwkgIC5tYXhpbXVtID0gMHgxNWYsCS8qID0gMzUyIC0gMSAqLwogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSAweDE4ZiwKKyNkZWZpbmUgQlJJR0hUTkVTU19ERUYgMHgxNGMKKwkgIC5kZWZhdWx0X3ZhbHVlID0gQlJJR0hUTkVTU19ERUYsCiAJICB9LAogCSAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKIAkgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCiAJIH0sCi0jZGVmaW5lIFNEX0NPTlRSQVNUIDEKLQl7Ci0JIHsKLQkgIC5pZCA9IFY0TDJfQ0lEX0NPTlRSQVNULAotCSAgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCSAgLm5hbWUgPSAiQ29udHJhc3QiLAotCSAgLm1pbmltdW0gPSAwLAotCSAgLm1heGltdW0gPSAweGZmZmYsCi0JICAuc3RlcCA9IDEsCi0JICAuZGVmYXVsdF92YWx1ZSA9IDB4N2ZmZiwKLQkgIH0sCi0JIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKLQkgLmdldCA9IHNkX2dldGNvbnRyYXN0LAotCSB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc2lmX21vZGVbXSA9IHsKQEAgLTg2LDc4ICs2OSw2NCBAQAogCQkucHJpdiA9IDB9LAogfTsKIAotLyoKLSAqIEluaXRpYWxpemF0aW9uIGRhdGE6IHRoaXMgaXMgdGhlIGZpcnN0IHNldC11cCBkYXRhIHdyaXR0ZW4gdG8gdGhlCi0gKiBkZXZpY2UgKGJlZm9yZSB0aGUgb3BlbiBkYXRhKS4KLSAqLwotI2RlZmluZSBURVNUQ0xLIDB4MTAJCS8qIHJlZyAweDJjIC0+IDB4MTIgLy8xMCAqLwotI2RlZmluZSBURVNUQ09NUCAweDkwCQkvKiByZWcgMHgyOCAtPiAweDgwICovCi0jZGVmaW5lIFRFU1RMSU5FIDB4ODEJCS8qIHJlZyAweDI5IC0+IDB4ODEgKi8KLSNkZWZpbmUgUUNJRkxJTkUgMHg0MQkJLyogcmVnIDB4MjkgLT4gMHg4MSAqLwotI2RlZmluZSBURVNUUFRMIDB4MTQJCS8qIHJlZyAweDJEIC0+IDB4MTQgKi8KLSNkZWZpbmUgVEVTVFBUSCAweDAxCQkvKiByZWcgMHgyRSAtPiAweDAxICovCi0jZGVmaW5lIFRFU1RQVEJMIDB4MTIJCS8qIHJlZyAweDJGIC0+IDB4MGEgKi8KLSNkZWZpbmUgVEVTVFBUQkggMHgwMQkJLyogcmVnIDB4MzAgLT4gMHgwMSAqLwotI2RlZmluZSBBRFdJRFRITCAweGU4CQkvKiByZWcgMHgwYyAtPiAweGU4ICovCi0jZGVmaW5lIEFEV0lEVEhIIDB4MDMJCS8qIHJlZyAweDBkIC0+IDB4MDMgKi8KLSNkZWZpbmUgQURIRUlHSEwgMHg5MAkJLyogcmVnIDB4MGUgLT4gMHg5MSAvLzkzICovCi0jZGVmaW5lIEFESEVJR0hIIDB4MDEJCS8qIHJlZyAweDBmIC0+IDB4MDEgKi8KLSNkZWZpbmUgRVhQT0wgMHg4ZgkJLyogcmVnIDB4MWMgLT4gMHg4ZiAqLwotI2RlZmluZSBFWFBPSCAweDAxCQkvKiByZWcgMHgxZCAtPiAweDAxICovCi0jZGVmaW5lIEFEQ0JFR0lOTCAweDQ0CQkvKiByZWcgMHgxMCAtPiAweDQ2IC8vNDcgKi8KLSNkZWZpbmUgQURDQkVHSU5IIDB4MDAJCS8qIHJlZyAweDExIC0+IDB4MDAgKi8KLSNkZWZpbmUgQURSQkVHSU5MIDB4MGEJCS8qIHJlZyAweDE0IC0+IDB4MGIgLy8weDBjICovCi0jZGVmaW5lIEFEUkJFR0lOSCAweDAwCQkvKiByZWcgMHgxNSAtPiAweDAwICovCi0jZGVmaW5lIFRWODUzMl9DTURfVVBEQVRFIDB4ODQKKy8qIFRWLTg1MzJBIChJQ001MzJBKSByZWdpc3RlcnMgKExFKSAqLworI2RlZmluZSBSMDBfUEFSVF9DT05UUk9MIDB4MDAKKyNkZWZpbmUJCUxBVEVOVF9DSEFOR0UJMHg4MAorI2RlZmluZQkJRVhQT19DSEFOR0UJMHgwNAorI2RlZmluZSBSMDFfVElNSU5HX0NPTlRST0xfTE9XIDB4MDEKKyNkZWZpbmUJCUNNRF9FRXByb21fT3BlbiAweDMwCisjZGVmaW5lCQlDTURfRUVwcm9tX0Nsb3NlIDB4MjkKKyNkZWZpbmUgUjAzX1RBQkxFX0FERFIgMHgwMworI2RlZmluZSBSMDRfV1RSQU1fREFUQV9MIDB4MDQKKyNkZWZpbmUgUjA1X1dUUkFNX0RBVEFfTSAweDA1CisjZGVmaW5lIFIwNl9XVFJBTV9EQVRBX0ggMHgwNgorI2RlZmluZSBSMDdfVEFCTEVfTEVOCTB4MDcKKyNkZWZpbmUgUjA4X1JBTV9XUklURV9BQ1RJT04gMHgwOAorI2RlZmluZSBSMENfQURfV0lEVEhMCTB4MGMKKyNkZWZpbmUgUjBEX0FEX1dJRFRISAkweDBkCisjZGVmaW5lIFIwRV9BRF9IRUlHSFRMCTB4MGUKKyNkZWZpbmUgUjBGX0FEX0hFSUdIVEgJMHgwZgorI2RlZmluZSBSMTBfQURfQ09MX0JFR0lOTCAweDEwCisjZGVmaW5lIFIxMV9BRF9DT0xfQkVHSU5IIDB4MTEKKyNkZWZpbmUJCU1JUlJPUgkJMHgwNAkvKiBbMTBdICovCisjZGVmaW5lIFIxNF9BRF9ST1dfQkVHSU5MIDB4MTQKKyNkZWZpbmUgUjE1X0FEX1JPV0JFR0lOSCAgMHgxNQorI2RlZmluZSBSMUNfQURfRVhQT1NFX1RJTUVMIDB4MWMKKyNkZWZpbmUgUjI4X1FVQU5UCTB4MjgKKyNkZWZpbmUgUjI5X0xJTkUJMHgyOQorI2RlZmluZSBSMkNfUE9MQVJJVFkJMHgyYworI2RlZmluZSBSMkRfUE9JTlQJMHgyZAorI2RlZmluZSBSMkVfUE9JTlRICTB4MmUKKyNkZWZpbmUgUjJGX1BPSU5UQgkweDJmCisjZGVmaW5lIFIzMF9QT0lOVEJICTB4MzAKKyNkZWZpbmUgUjMxX1VQRAkJMHgzMQorI2RlZmluZSBSMkFfSElHSF9CVURHRVQgMHgyYQorI2RlZmluZSBSMkJfTE9XX0JVREdFVAkweDJiCisjZGVmaW5lIFIzNF9WSUQJCTB4MzQKKyNkZWZpbmUgUjM1X1ZJREgJMHgzNQorI2RlZmluZSBSMzZfUElECQkweDM2CisjZGVmaW5lIFIzN19QSURICTB4MzcKKyNkZWZpbmUgUjM5X1Rlc3QxCTB4MzkJCS8qIEdQSU8gKi8KKyNkZWZpbmUgUjNCX1Rlc3QzCTB4M0IJCS8qIEdQSU8gKi8KKyNkZWZpbmUgUjgzX0FEX0lESAkweDgzCisjZGVmaW5lIFI5MV9BRF9TTE9QRVJFRyAweDkxCisjZGVmaW5lIFI5NF9BRF9CSVRDT05UUk9MIDB4OTQKIAotI2RlZmluZSBUVjg1MzJfRUVwcm9tX0FkZCAweDAzCi0jZGVmaW5lIFRWODUzMl9FRXByb21fRGF0YUwgMHgwNAotI2RlZmluZSBUVjg1MzJfRUVwcm9tX0RhdGFNIDB4MDUKLSNkZWZpbmUgVFY4NTMyX0VFcHJvbV9EYXRhSCAweDA2Ci0jZGVmaW5lIFRWODUzMl9FRXByb21fVGFibGVMZW5ndGggMHgwNwotI2RlZmluZSBUVjg1MzJfRUVwcm9tX1dyaXRlIDB4MDgKLSNkZWZpbmUgVFY4NTMyX1BBUlRfQ1RSTCAweDAwCi0jZGVmaW5lIFRWODUzMl9DVFJMIDB4MDEKLSNkZWZpbmUgVFY4NTMyX0NNRF9FRXByb21fT3BlbiAweDMwCi0jZGVmaW5lIFRWODUzMl9DTURfRUVwcm9tX0Nsb3NlIDB4MjkKLSNkZWZpbmUgVFY4NTMyX1VEUF9VUERBVEUgMHgzMQotI2RlZmluZSBUVjg1MzJfR1BJTyAweDM5Ci0jZGVmaW5lIFRWODUzMl9HUElPX09FIDB4M0IKLSNkZWZpbmUgVFY4NTMyX1JFUV9SZWdXcml0ZSAweDAyCi0jZGVmaW5lIFRWODUzMl9SRVFfUmVnUmVhZCAweDAzCi0KLSNkZWZpbmUgVFY4NTMyX0FEV0lEVEhfTCAweDBDCi0jZGVmaW5lIFRWODUzMl9BRFdJRFRIX0ggMHgwRAotI2RlZmluZSBUVjg1MzJfQURIRUlHSFRfTCAweDBFCi0jZGVmaW5lIFRWODUzMl9BREhFSUdIVF9IIDB4MEYKLSNkZWZpbmUgVFY4NTMyX0VYUE9TVVJFIDB4MUMKLSNkZWZpbmUgVFY4NTMyX1FVQU5UX0NPTVAgMHgyOAotI2RlZmluZSBUVjg1MzJfTU9ERV9QQUNLRVQgMHgyOQotI2RlZmluZSBUVjg1MzJfU0VUQ0xLIDB4MkMKLSNkZWZpbmUgVFY4NTMyX1BPSU5UX0wgMHgyRAotI2RlZmluZSBUVjg1MzJfUE9JTlRfSCAweDJFCi0jZGVmaW5lIFRWODUzMl9QT0lOVEJfTCAweDJGCi0jZGVmaW5lIFRWODUzMl9QT0lOVEJfSCAweDMwCi0jZGVmaW5lIFRWODUzMl9CVURHRVRfTCAweDJBCi0jZGVmaW5lIFRWODUzMl9CVURHRVRfSCAweDJCCi0jZGVmaW5lIFRWODUzMl9WSURfTCAweDM0Ci0jZGVmaW5lIFRWODUzMl9WSURfSCAweDM1Ci0jZGVmaW5lIFRWODUzMl9QSURfTCAweDM2Ci0jZGVmaW5lIFRWODUzMl9QSURfSCAweDM3Ci0jZGVmaW5lIFRWODUzMl9EZXZpY2VJRCAweDgzCi0jZGVmaW5lIFRWODUzMl9BRF9TTE9QRSAweDkxCi0jZGVmaW5lIFRWODUzMl9BRF9CSVRDVFJMIDB4OTQKLSNkZWZpbmUgVFY4NTMyX0FEX0NPTEJFR0lOX0wgMHgxMAotI2RlZmluZSBUVjg1MzJfQURfQ09MQkVHSU5fSCAweDExCi0jZGVmaW5lIFRWODUzMl9BRF9ST1dCRUdJTl9MIDB4MTQKLSNkZWZpbmUgVFY4NTMyX0FEX1JPV0JFR0lOX0ggMHgxNQotCi1zdGF0aWMgY29uc3QgX191MzIgdHZfODUzMl9lZXByb21fZGF0YVtdID0gewotLyoJYWRkCQlkYXRhTAkgICBkYXRhTQlkYXRhSCAqLwotCTB4MDAwMTAwMDEsIDB4MDEwMTgwMTEsIDB4MDIwNTAwMTQsIDB4MDMwNTAwMWMsCi0JMHgwNDBkMDAxZSwgMHgwNTA1MDAxZiwgMHgwNjA1MDUxOSwgMHgwNzA1MDExYiwKLQkweDA4MDUwOTFlLCAweDA5MGQ4OTJlLCAweDBhMDU4OTJmLCAweDBiMDUwZGQ5LAotCTB4MGMwNTA5ZjEsIDAKK3N0YXRpYyBjb25zdCB1OCBlZXByb21fZGF0YVtdWzNdID0geworLyoJZGF0YUggZGF0YU0gZGF0YUwgKi8KKwl7MHgwMSwgMHgwMCwgMHgwMX0sCisJezB4MDEsIDB4ODAsIDB4MTF9LAorCXsweDA1LCAweDAwLCAweDE0fSwKKwl7MHgwNSwgMHgwMCwgMHgxY30sCisJezB4MGQsIDB4MDAsIDB4MWV9LAorCXsweDA1LCAweDAwLCAweDFmfSwKKwl7MHgwNSwgMHgwNSwgMHgxOX0sCisJezB4MDUsIDB4MDEsIDB4MWJ9LAorCXsweDA1LCAweDA5LCAweDFlfSwKKwl7MHgwZCwgMHg4OSwgMHgyZX0sCisJezB4MDUsIDB4ODksIDB4MmZ9LAorCXsweDA1LCAweDBkLCAweGQ5fSwKKwl7MHgwNSwgMHgwOSwgMHhmMX0sCiB9OwogCiBzdGF0aWMgaW50IHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKQEAgLTE2NSw3ICsxMzQsNyBAQAogewogCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCXVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCi0JCQlUVjg1MzJfUkVRX1JlZ1JlYWQsCisJCQkweDAzLAogCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQkwLAkvKiB2YWx1ZSAqLwogCQkJaW5kZXgsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwKQEAgLTE3NCwyNyArMTQzLDI3IEBACiB9CiAKIC8qIHdyaXRlIDEgYnl0ZSAqLwotc3RhdGljIHZvaWQgcmVnX3dfMShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdm9pZCByZWdfdzEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkgIF9fdTE2IGluZGV4LCBfX3U4IHZhbHVlKQogewogCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IHZhbHVlOwogCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCi0JCQlUVjg1MzJfUkVRX1JlZ1dyaXRlLAorCQkJMHgwMiwKIAkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCTAsCS8qIHZhbHVlICovCiAJCQlpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxLCA1MDApOwogfQogCiAvKiB3cml0ZSAyIGJ5dGVzICovCi1zdGF0aWMgdm9pZCByZWdfd18yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJICBfX3UxNiBpbmRleCwgX191OCB2YWwxLCBfX3U4IHZhbDIpCitzdGF0aWMgdm9pZCByZWdfdzIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgIHUxNiBpbmRleCwgdTE2IHZhbHVlKQogewotCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IHZhbDE7Ci0JZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gdmFsMjsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWx1ZTsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSB2YWx1ZSA+PiA4OwogCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCi0JCQlUVjg1MzJfUkVRX1JlZ1dyaXRlLAorCQkJMHgwMiwKIAkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCTAsCS8qIHZhbHVlICovCiAJCQlpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAyLCA1MDApOwpAQCAtMjAyLDMyICsxNzEsMTggQEAKIAogc3RhdGljIHZvaWQgdHZfODUzMldyaXRlRUVwcm9tKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlpbnQgaSA9IDA7Ci0JX191OCByZWcsIGRhdGEwLCBkYXRhMSwgZGF0YTI7CisJaW50IGk7CiAKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0dQSU8sIDB4YjApOwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQ1RSTCwgVFY4NTMyX0NNRF9FRXByb21fT3Blbik7Ci0vKgltc2xlZXAoMSk7ICovCi0Jd2hpbGUgKHR2Xzg1MzJfZWVwcm9tX2RhdGFbaV0pIHsKLQkJcmVnID0gKHR2Xzg1MzJfZWVwcm9tX2RhdGFbaV0gJiAweGZmMDAwMDAwKSA+PiAyNDsKLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9FRXByb21fQWRkLCByZWcpOwotCQkvKiBtc2xlZXAoMSk7ICovCi0JCWRhdGEwID0gKHR2Xzg1MzJfZWVwcm9tX2RhdGFbaV0gJiAweDAwMDAwMGZmKTsKLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9FRXByb21fRGF0YUwsIGRhdGEwKTsKLQkJLyogbXNsZWVwKDEpOyAqLwotCQlkYXRhMSA9ICh0dl84NTMyX2VlcHJvbV9kYXRhW2ldICYgMHgwMDAwZmYwMCkgPj4gODsKLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9FRXByb21fRGF0YU0sIGRhdGExKTsKLQkJLyogbXNsZWVwKDEpOyAqLwotCQlkYXRhMiA9ICh0dl84NTMyX2VlcHJvbV9kYXRhW2ldICYgMHgwMGZmMDAwMCkgPj4gMTY7Ci0JCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfRUVwcm9tX0RhdGFILCBkYXRhMik7Ci0JCS8qIG1zbGVlcCgxKTsgKi8KLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9FRXByb21fV3JpdGUsIDApOwotCQkvKiBtc2xlZXAoMTApOyAqLwotCQlpKys7CisJcmVnX3cxKGdzcGNhX2RldiwgUjAxX1RJTUlOR19DT05UUk9MX0xPVywgQ01EX0VFcHJvbV9PcGVuKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlZXByb21fZGF0YSk7IGkrKykgeworCQlyZWdfdzEoZ3NwY2FfZGV2LCBSMDNfVEFCTEVfQUREUiwgaSk7CisJCXJlZ193MShnc3BjYV9kZXYsIFIwNF9XVFJBTV9EQVRBX0wsIGVlcHJvbV9kYXRhW2ldWzJdKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgUjA1X1dUUkFNX0RBVEFfTSwgZWVwcm9tX2RhdGFbaV1bMV0pOworCQlyZWdfdzEoZ3NwY2FfZGV2LCBSMDZfV1RSQU1fREFUQV9ILCBlZXByb21fZGF0YVtpXVswXSk7CisJCXJlZ193MShnc3BjYV9kZXYsIFIwOF9SQU1fV1JJVEVfQUNUSU9OLCAwKTsKIAl9Ci0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9FRXByb21fVGFibGVMZW5ndGgsIGkpOwotLyoJbXNsZWVwKDEpOyAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQ1RSTCwgVFY4NTMyX0NNRF9FRXByb21fQ2xvc2UpOworCXJlZ193MShnc3BjYV9kZXYsIFIwN19UQUJMRV9MRU4sIGkpOworCXJlZ193MShnc3BjYV9kZXYsIFIwMV9USU1JTkdfQ09OVFJPTF9MT1csIENNRF9FRXByb21fQ2xvc2UpOwogCW1zbGVlcCgxMCk7CiB9CiAKQEAgLTIzOCw3OSArMTkzLDc2IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCBjYW0gKmNhbTsKIAotCXR2Xzg1MzJXcml0ZUVFcHJvbShnc3BjYV9kZXYpOwotCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+ZXBhZGRyID0gMTsKIAljYW0tPmNhbV9tb2RlID0gc2lmX21vZGU7Ci0JY2FtLT5ubW9kZXMgPSBzaXplb2Ygc2lmX21vZGUgLyBzaXplb2Ygc2lmX21vZGVbMF07CisJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHNpZl9tb2RlKTsKIAotCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbU0RfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+Y29udHJhc3QgPSBzZF9jdHJsc1tTRF9DT05UUkFTVF0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB0dl84NTMyUmVhZFJlZ2lzdGVycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0JX191OCBkYXRhOworCWludCBpOworCXN0YXRpYyB1OCByZWdfdGJbXSA9IHsKKwkJUjBDX0FEX1dJRFRITCwKKwkJUjBEX0FEX1dJRFRISCwKKwkJUjI4X1FVQU5ULAorCQlSMjlfTElORSwKKwkJUjJDX1BPTEFSSVRZLAorCQlSMkRfUE9JTlQsCisJCVIyRV9QT0lOVEgsCisJCVIyRl9QT0lOVEIsCisJCVIzMF9QT0lOVEJILAorCQlSMkFfSElHSF9CVURHRVQsCisJCVIyQl9MT1dfQlVER0VULAorCQlSMzRfVklELAorCQlSMzVfVklESCwKKwkJUjM2X1BJRCwKKwkJUjM3X1BJREgsCisJCVI4M19BRF9JREgsCisJCVIxMF9BRF9DT0xfQkVHSU5MLAorCQlSMTFfQURfQ09MX0JFR0lOSCwKKwkJUjE0X0FEX1JPV19CRUdJTkwsCisJCVIxNV9BRF9ST1dCRUdJTkgsCisJCTAKKwl9OwogCi0JZGF0YSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwMDAxKTsKLQlQREVCVUcoRF9VU0JJLCAicmVnaXN0ZXIgMHgwMS0+ICV4IiwgZGF0YSk7Ci0JZGF0YSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwMDAyKTsKLQlQREVCVUcoRF9VU0JJLCAicmVnaXN0ZXIgMHgwMi0+ICV4IiwgZGF0YSk7Ci0JcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfQURXSURUSF9MKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9BRFdJRFRIX0gpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX1FVQU5UX0NPTVApOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX01PREVfUEFDS0VUKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9TRVRDTEspOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX1BPSU5UX0wpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX1BPSU5UX0gpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX1BPSU5UQl9MKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9QT0lOVEJfSCk7Ci0JcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfQlVER0VUX0wpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0JVREdFVF9IKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9WSURfTCk7Ci0JcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfVklEX0gpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX1BJRF9MKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9QSURfSCk7Ci0JcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfRGV2aWNlSUQpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0FEX0NPTEJFR0lOX0wpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0FEX0NPTEJFR0lOX0gpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0FEX1JPV0JFR0lOX0wpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0FEX1JPV0JFR0lOX0gpOworCWkgPSAwOworCWRvIHsKKwkJcmVnX3IoZ3NwY2FfZGV2LCByZWdfdGJbaV0pOworCQlpKys7CisJfSB3aGlsZSAocmVnX3RiW2ldICE9IDApOwogfQogCiBzdGF0aWMgdm9pZCB0dl84NTMyX3NldFJlZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9DT0xCRUdJTl9MLAotCQkJQURDQkVHSU5MKTsJCQkvKiAweDEwICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9DT0xCRUdJTl9ILAotCQkJQURDQkVHSU5IKTsJCQkvKiBhbHNvIGRpZ2l0YWwgZ2FpbiAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUEFSVF9DVFJMLAotCQkJVFY4NTMyX0NNRF9VUERBVEUpOwkJLyogMHgwMDwtMHg4NCAqLworCXJlZ193MShnc3BjYV9kZXYsIFIxMF9BRF9DT0xfQkVHSU5MLCAweDQ0KTsKKwkJCQkJCS8qIGJlZ2luIGFjdGl2ZSBsaW5lICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjExX0FEX0NPTF9CRUdJTkgsIDB4MDApOworCQkJCQkJLyogbWlycm9yIGFuZCBkaWdpdGFsIGdhaW4gKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMDBfUEFSVF9DT05UUk9MLCBMQVRFTlRfQ0hBTkdFIHwgRVhQT19DSEFOR0UpOworCQkJCQkJLyogPSAweDg0ICovCiAKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0dQSU9fT0UsIDB4MGEpOworCXJlZ193MShnc3BjYV9kZXYsIFIzQl9UZXN0MywgMHgwYSk7CS8qIFRlc3QwU2VsID0gMTAgKi8KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURIRUlHSFRfTCwgQURIRUlHSEwpOyAvKiAwZSAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURIRUlHSFRfSCwgQURIRUlHSEgpOyAvKiAwZiAqLwotCXJlZ193XzIoZ3NwY2FfZGV2LCBUVjg1MzJfRVhQT1NVUkUsCi0JCQlFWFBPTCwgRVhQT0gpOwkJCS8qIDM1MGQgMHgwMTRjOyAxYyAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfQ09MQkVHSU5fTCwKLQkJCUFEQ0JFR0lOTCk7CQkJLyogMHgxMCAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfQ09MQkVHSU5fSCwKLQkJCUFEQ0JFR0lOSCk7CQkJLyogYWxzbyBkaWdpdGFsIGdhaW4gKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX1JPV0JFR0lOX0wsCi0JCQlBRFJCRUdJTkwpOwkJCS8qIDB4MTQgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMEVfQURfSEVJR0hUTCwgMHg5MCk7CisJcmVnX3cxKGdzcGNhX2RldiwgUjBGX0FEX0hFSUdIVEgsIDB4MDEpOworCXJlZ193Mihnc3BjYV9kZXYsIFIxQ19BRF9FWFBPU0VfVElNRUwsIDB4MDE4Zik7CisJcmVnX3cxKGdzcGNhX2RldiwgUjEwX0FEX0NPTF9CRUdJTkwsIDB4NDQpOworCQkJCQkJLyogYmVnaW4gYWN0aXZlIGxpbmUgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMTFfQURfQ09MX0JFR0lOSCwgMHgwMCk7CisJCQkJCQkvKiBtaXJyb3IgYW5kIGRpZ2l0YWwgZ2FpbiAqLworCXJlZ193MShnc3BjYV9kZXYsIFIxNF9BRF9ST1dfQkVHSU5MLCAweDBhKTsKIAotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfU0xPUEUsIDB4MDApOwkvKiAweDkxICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9CSVRDVFJMLCAweDAyKTsJLyogMHg5NCAqLworCXJlZ193MShnc3BjYV9kZXYsIFI5MV9BRF9TTE9QRVJFRywgMHgwMCk7CisJcmVnX3cxKGdzcGNhX2RldiwgUjk0X0FEX0JJVENPTlRST0wsIDB4MDIpOwogCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9DVFJMLAotCQkJVFY4NTMyX0NNRF9FRXByb21fQ2xvc2UpOwkvKiAweDAxICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjAxX1RJTUlOR19DT05UUk9MX0xPVywgQ01EX0VFcHJvbV9DbG9zZSk7CiAKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX1NMT1BFLCAweDAwKTsJLyogMHg5MSAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUEFSVF9DVFJMLAotCQkJVFY4NTMyX0NNRF9VUERBVEUpOwkJLyogMHgwMDwtMHg4NCAqLworCXJlZ193MShnc3BjYV9kZXYsIFI5MV9BRF9TTE9QRVJFRywgMHgwMCk7CisJcmVnX3cxKGdzcGNhX2RldiwgUjAwX1BBUlRfQ09OVFJPTCwgTEFURU5UX0NIQU5HRSB8IEVYUE9fQ0hBTkdFKTsKKwkJCQkJCS8qID0gMHg4NCAqLwogfQogCiBzdGF0aWMgdm9pZCB0dl84NTMyX1BvbGxSZWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtMzE5LDU0ICsyNzEsNTUgQEAKIAogCS8qIHN0cmFuZ2UgcG9sbGluZyBmcm9tIHRnYyAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfU0VUQ0xLLAotCQkJVEVTVENMSyk7CQkvKiAweDQ4OyAvLzB4MDg7IDB4MmMgKi8KLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QQVJUX0NUUkwsIFRWODUzMl9DTURfVVBEQVRFKTsKLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9VRFBfVVBEQVRFLCAweDAxKTsJLyogMHgzMSAqLworCQlyZWdfdzEoZ3NwY2FfZGV2LCBSMkNfUE9MQVJJVFksIDB4MTApOworCQlyZWdfdzEoZ3NwY2FfZGV2LCBSMDBfUEFSVF9DT05UUk9MLAorCQkJCUxBVEVOVF9DSEFOR0UgfCBFWFBPX0NIQU5HRSk7CisJCXJlZ193MShnc3BjYV9kZXYsIFIzMV9VUEQsIDB4MDEpOwogCX0KIH0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfU0xPUEUsIDB4MzIpOwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfQklUQ1RSTCwgMHgwMCk7CisJdHZfODUzMldyaXRlRUVwcm9tKGdzcGNhX2Rldik7CisKKwlyZWdfdzEoZ3NwY2FfZGV2LCBSOTFfQURfU0xPUEVSRUcsIDB4MzIpOwkvKiBzbG9wZSBiZWdpbiAxLDdWLAorCQkJCQkJCSAqIHNsb3BlIHJhdGUgMiAqLworCXJlZ193MShnc3BjYV9kZXYsIFI5NF9BRF9CSVRDT05UUk9MLCAweDAwKTsKIAl0dl84NTMyUmVhZFJlZ2lzdGVycyhnc3BjYV9kZXYpOwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfR1BJT19PRSwgMHgwYik7Ci0JcmVnX3dfMihnc3BjYV9kZXYsIFRWODUzMl9BREhFSUdIVF9MLCBBREhFSUdITCwKLQkJCQlBREhFSUdISCk7CS8qIDQwMWQgMHgwMTY5OyAwZSAqLwotCXJlZ193XzIoZ3NwY2FfZGV2LCBUVjg1MzJfRVhQT1NVUkUsIEVYUE9MLAotCQkJCUVYUE9IKTsJCS8qIDM1MGQgMHgwMTRjOyAxYyAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURXSURUSF9MLCBBRFdJRFRITCk7CS8qIDB4MjA7IDB4MGMgKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEV0lEVEhfSCwgQURXSURUSEgpOwkvKiAweDBkICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjNCX1Rlc3QzLCAweDBiKTsKKwlyZWdfdzIoZ3NwY2FfZGV2LCBSMEVfQURfSEVJR0hUTCwgMHgwMTkwKTsKKwlyZWdfdzIoZ3NwY2FfZGV2LCBSMUNfQURfRVhQT1NFX1RJTUVMLCAweDAxOGYpOworCXJlZ193MShnc3BjYV9kZXYsIFIwQ19BRF9XSURUSEwsIDB4ZTgpOworCXJlZ193MShnc3BjYV9kZXYsIFIwRF9BRF9XSURUSEgsIDB4MDMpOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9RVUFOVF9DT01QLAotCQkJVEVTVENPTVApOwkvKiAweDcyIGNvbXByZXNzZWQgbW9kZSAweDI4ICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9NT0RFX1BBQ0tFVCwKLQkJCVRFU1RMSU5FKTsJLyogMHg4NDsgLy8gQ0lGIHwgNCBwYWNrZXQgMHgyOSAqLworCXJlZ193MShnc3BjYV9kZXYsIFIyOF9RVUFOVCwgMHg5MCk7CisJCQkJCS8qIG5vIGNvbXByZXNzIC0gZml4ZWQgUSAtIHF1YW50IDAgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMjlfTElORSwgMHg4MSk7CisJCQkJCS8qIDB4ODQ7IC8vIENJRiB8IDQgcGFja2V0IDB4MjkgKi8KIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9TRVRDTEssCi0JCQlURVNUQ0xLKTsJCS8qIDB4NDg7IC8vMHgwODsgMHgyYyAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUE9JTlRfTCwKLQkJCVRFU1RQVEwpOwkJLyogMHgzODsgMHgyZCAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUE9JTlRfSCwKLQkJCVRFU1RQVEgpOwkJLyogMHgwNDsgMHgyZSAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUE9JTlRCX0wsCi0JCQlURVNUUFRCTCk7CQkvKiAweDA0OyAweDJmICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QT0lOVEJfSCwKLQkJCVRFU1RQVEJIKTsJCS8qIDB4MDQ7IDB4MzAgKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1BBUlRfQ1RSTCwKLQkJCVRWODUzMl9DTURfVVBEQVRFKTsJLyogMHgwMDwtMHg4NCAqLworCXJlZ193MShnc3BjYV9kZXYsIFIyQ19QT0xBUklUWSwgMHgxMCk7CisJCQkJCQkvKiAweDQ4OyAvLzB4MDg7IDB4MmMgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMkRfUE9JTlQsIDB4MTQpOworCQkJCQkJLyogMHgzODsgMHgyZCAqLworCXJlZ193MShnc3BjYV9kZXYsIFIyRV9QT0lOVEgsIDB4MDEpOworCQkJCQkJLyogMHgwNDsgMHgyZSAqLworCXJlZ193MShnc3BjYV9kZXYsIFIyRl9QT0lOVEIsIDB4MTIpOworCQkJCQkJLyogMHgwNDsgMHgyZiAqLworCXJlZ193MShnc3BjYV9kZXYsIFIzMF9QT0lOVEJILCAweDAxKTsKKwkJCQkJCS8qIDB4MDQ7IDB4MzAgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMDBfUEFSVF9DT05UUk9MLCBMQVRFTlRfQ0hBTkdFIHwgRVhQT19DSEFOR0UpOworCQkJCQkJLyogMHgwMDwtMHg4NCAqLwogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfVURQX1VQREFURSwgMHgwMSk7CS8qIDB4MzEgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMzFfVVBELCAweDAxKTsJLyogdXBkYXRlIHJlZ2lzdGVycyAqLwogCW1zbGVlcCgyMDApOwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfVURQX1VQREFURSwgMHgwMCk7CS8qIDB4MzEgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMzFfVVBELCAweDAwKTsJCS8qIGVuZCB1cGRhdGUgKi8KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAl0dl84NTMyX3NldFJlZyhnc3BjYV9kZXYpOwogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfR1BJT19PRSwgMHgwYik7CisJcmVnX3cxKGdzcGNhX2RldiwgUjNCX1Rlc3QzLCAweDBiKTsJLyogVGVzdDBTZWwgPSAxMSA9IEdQSU8gKi8KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAl0dl84NTMyX3NldFJlZyhnc3BjYV9kZXYpOwogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzc3LDExICszMzAsMTAgQEAKIHN0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgYnJpZ2h0bmVzcyA9IHNkLT5icmlnaHRuZXNzOwogCi0JcmVnX3dfMihnc3BjYV9kZXYsIFRWODUzMl9FWFBPU1VSRSwKLQkJYnJpZ2h0bmVzcyA+PiA4LCBicmlnaHRuZXNzKTsJCS8qIDFjICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QQVJUX0NUUkwsIFRWODUzMl9DTURfVVBEQVRFKTsKKwlyZWdfdzIoZ3NwY2FfZGV2LCBSMUNfQURfRVhQT1NFX1RJTUVMLCBzZC0+YnJpZ2h0bmVzcyk7CisJcmVnX3cxKGdzcGNhX2RldiwgUjAwX1BBUlRfQ09OVFJPTCwgTEFURU5UX0NIQU5HRSB8IEVYUE9fQ0hBTkdFKTsKKwkJCQkJCS8qIDB4ODQgKi8KIH0KIAogLyogLS0gc3RhcnQgdGhlIGNhbWVyYSAtLSAqLwpAQCAtMzg5LDU3ICszNDEsNTAgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX1NMT1BFLCAweDMyKTsKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX0JJVENUUkwsIDB4MDApOworCXJlZ193MShnc3BjYV9kZXYsIFI5MV9BRF9TTE9QRVJFRywgMHgzMik7CS8qIHNsb3BlIGJlZ2luIDEsN1YsCisJCQkJCQkJICogc2xvcGUgcmF0ZSAyICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjk0X0FEX0JJVENPTlRST0wsIDB4MDApOwogCXR2Xzg1MzJSZWFkUmVnaXN0ZXJzKGdzcGNhX2Rldik7Ci0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9HUElPX09FLCAweDBiKTsKLQlyZWdfd18yKGdzcGNhX2RldiwgVFY4NTMyX0FESEVJR0hUX0wsCi0JCUFESEVJR0hMLCBBREhFSUdISCk7CS8qIDQwMWQgMHgwMTY5OyAwZSAqLwotLyoJcmVnX3dfMihnc3BjYV9kZXYsIFRWODUzMl9FWFBPU1VSRSwKLQkJRVhQT0wsIEVYUE9IKTsJCSAqIDM1MGQgMHgwMTRjOyAxYyAqLworCXJlZ193MShnc3BjYV9kZXYsIFIzQl9UZXN0MywgMHgwYik7CisKKwlyZWdfdzIoZ3NwY2FfZGV2LCBSMEVfQURfSEVJR0hUTCwgMHgwMTkwKTsKIAlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEV0lEVEhfTCwgQURXSURUSEwpOwkvKiAweDIwOyAweDBjICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRFdJRFRIX0gsIEFEV0lEVEhIKTsJLyogMHgwZCAqLworCXJlZ193MShnc3BjYV9kZXYsIFIwQ19BRF9XSURUSEwsIDB4ZTgpOwkJLyogMHgyMDsgMHgwYyAqLworCXJlZ193MShnc3BjYV9kZXYsIFIwRF9BRF9XSURUSEgsIDB4MDMpOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1FVQU5UX0NPTVAsCi0JCQlURVNUQ09NUCk7CS8qIDB4NzIgY29tcHJlc3NlZCBtb2RlIDB4MjggKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMjhfUVVBTlQsIDB4OTApOworCQkJCQkvKiAweDcyIGNvbXByZXNzZWQgbW9kZSAweDI4ICovCiAJaWYgKGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2KSB7CiAJCS8qIDE3NngxNDQgKi8KLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9NT0RFX1BBQ0tFVCwKLQkJCVFDSUZMSU5FKTsJLyogMHg4NDsgLy8gQ0lGIHwgNCBwYWNrZXQgMHgyOSAqLworCQlyZWdfdzEoZ3NwY2FfZGV2LCBSMjlfTElORSwgMHg0MSk7CisJCQkJCS8qIENJRiAtIDIgbGluZXMvcGFja2V0ICovCiAJfSBlbHNlIHsKIAkJLyogMzUyeDI4OCAqLwotCQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX01PREVfUEFDS0VULAotCQkJVEVTVExJTkUpOwkvKiAweDg0OyAvLyBDSUYgfCA0IHBhY2tldCAweDI5ICovCisJCXJlZ193MShnc3BjYV9kZXYsIFIyOV9MSU5FLCAweDgxKTsKKwkJCQkJLyogQ0lGIC0gMiBsaW5lcy9wYWNrZXQgKi8KIAl9CiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1NFVENMSywKLQkJCVRFU1RDTEspOwkJLyogMHg0ODsgLy8weDA4OyAweDJjICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QT0lOVF9MLAotCQkJVEVTVFBUTCk7CQkvKiAweDM4OyAweDJkICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QT0lOVF9ILAotCQkJVEVTVFBUSCk7CQkvKiAweDA0OyAweDJlICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QT0lOVEJfTCwKLQkJCVRFU1RQVEJMKTsJCS8qIDB4MDQ7IDB4MmYgKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1BPSU5UQl9ILAotCQkJVEVTVFBUQkgpOwkJLyogMHgwNDsgMHgzMCAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUEFSVF9DVFJMLAotCQkJVFY4NTMyX0NNRF9VUERBVEUpOwkvKiAweDAwPC0weDg0ICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjJDX1BPTEFSSVRZLCAweDEwKTsJCS8qIHNsb3cgY2xvY2sgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMkRfUE9JTlQsIDB4MTQpOworCXJlZ193MShnc3BjYV9kZXYsIFIyRV9QT0lOVEgsIDB4MDEpOworCXJlZ193MShnc3BjYV9kZXYsIFIyRl9QT0lOVEIsIDB4MTIpOworCXJlZ193MShnc3BjYV9kZXYsIFIzMF9QT0lOVEJILCAweDAxKTsKKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMDBfUEFSVF9DT05UUk9MLCBMQVRFTlRfQ0hBTkdFIHwgRVhQT19DSEFOR0UpOwogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9VRFBfVVBEQVRFLCAweDAxKTsJLyogMHgzMSAqLworCXJlZ193MShnc3BjYV9kZXYsIFIzMV9VUEQsIDB4MDEpOwkvKiB1cGRhdGUgcmVnaXN0ZXJzICovCiAJbXNsZWVwKDIwMCk7Ci0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9VRFBfVVBEQVRFLCAweDAwKTsJLyogMHgzMSAqLworCXJlZ193MShnc3BjYV9kZXYsIFIzMV9VUEQsIDB4MDApOwkJLyogZW5kIHVwZGF0ZSAqLwogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJdHZfODUzMl9zZXRSZWcoZ3NwY2FfZGV2KTsKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfR1BJT19PRSwgMHgwYik7CisJcmVnX3cxKGdzcGNhX2RldiwgUjNCX1Rlc3QzLCAweDBiKTsJLyogVGVzdDBTZWwgPSAxMSA9IEdQSU8gKi8KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCXR2Xzg1MzJfc2V0UmVnKGdzcGNhX2Rldik7CiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAl0dl84NTMyX1BvbGxSZWcoZ3NwY2FfZGV2KTsKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1VEUF9VUERBVEUsIDB4MDApOwkvKiAweDMxICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjMxX1VQRCwgMHgwMCk7CS8qIGVuZCB1cGRhdGUgKi8KIAogCWdzcGNhX2Rldi0+ZW1wdHlfcGFja2V0ID0gMDsJCS8qIGNoZWNrIHRoZSBlbXB0eSBwYWNrZXRzICovCiAJc2QtPnBhY2tldCA9IDA7CQkJCS8qIGlnbm9yZSB0aGUgZmlyc3QgcGFja2V0cyAqLwpAQCAtNDQ5LDcgKzM5NCw3IEBACiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0dQSU9fT0UsIDB4MGIpOworCXJlZ193MShnc3BjYV9kZXYsIFIzQl9UZXN0MywgMHgwYik7CS8qIFRlc3QwU2VsID0gMTEgPSBHUElPICovCiB9CiAKIHN0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKQEAgLTQ3Myw5ICs0MTgsOSBAQAogCiAJLyogZWFjaCBwYWNrZXQgY29udGFpbnM6CiAJICogLSBoZWFkZXIgMiBieXRlcwotCSAqIC0gUkcgbGluZQorCSAqIC0gUkdSRyBsaW5lCiAJICogLSA0IGJ5dGVzCi0JICogLSBHQiBsaW5lCisJICogLSBHQkdCIGxpbmUKIAkgKiAtIDQgYnl0ZXMKIAkgKi8KIAlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBwYWNrZXRfdHlwZTAsCkBAIC00ODQsMTAgKzQyOSw2IEBACiAJCQlmcmFtZSwgZGF0YSArIGdzcGNhX2Rldi0+d2lkdGggKyA2LCBnc3BjYV9kZXYtPndpZHRoKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotfQotCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtNTA2LDI0ICs0NDcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNkLT5jb250cmFzdCA9IHZhbDsKLQlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCi0JCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCSp2YWwgPSBzZC0+Y29udHJhc3Q7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCkBAIC01NzAsOCArNDkzLDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYwppbmRleCAwNTI1ZWE1Li40YzgwMmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMKQEAgLTM3LDE4ICszNywyMSBAQAogCV9fdTggbGlnaHRmcmVxOwogCV9fdTggc2hhcnBuZXNzOwogCisJdTggaW1hZ2Vfb2Zmc2V0OworCiAJY2hhciBicmlkZ2U7CiAjZGVmaW5lIEJSSURHRV9WQzAzMjEgMAogI2RlZmluZSBCUklER0VfVkMwMzIzIDEKIAljaGFyIHNlbnNvcjsKICNkZWZpbmUgU0VOU09SX0hWNzEzMVIgMAogI2RlZmluZSBTRU5TT1JfTUkwMzYwIDEKLSNkZWZpbmUgU0VOU09SX01JMTMyMCAyCi0jZGVmaW5lIFNFTlNPUl9NSTEzMTBfU09DIDMKLSNkZWZpbmUgU0VOU09SX09WNzY2MCA0Ci0jZGVmaW5lIFNFTlNPUl9PVjc2NzAgNQotI2RlZmluZSBTRU5TT1JfUE8xMjAwIDYKLSNkZWZpbmUgU0VOU09SX1BPMzEzME5DIDcKKyNkZWZpbmUgU0VOU09SX01JMTMxMF9TT0MgMgorI2RlZmluZSBTRU5TT1JfTUkxMzIwIDMKKyNkZWZpbmUgU0VOU09SX01JMTMyMF9TT0MgNAorI2RlZmluZSBTRU5TT1JfT1Y3NjYwIDUKKyNkZWZpbmUgU0VOU09SX09WNzY3MCA2CisjZGVmaW5lIFNFTlNPUl9QTzEyMDAgNworI2RlZmluZSBTRU5TT1JfUE8zMTMwTkMgOAogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwpAQCAtMTQ5LDggKzE1Miw1MCBAQAogCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMyAvIDggKyA1OTAsCiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCiAJCS5wcml2ID0gMH0sCisJezEyODAsIDEwMjQsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsIC8qIG1pMTN4MF9zb2Mgb25seSAqLworCQkuYnl0ZXNwZXJsaW5lID0gMTI4MCwKKwkJLnNpemVpbWFnZSA9IDEyODAgKiAxMDI0ICogMSAvIDQgKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMn0sCiB9OwotCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBiaV9tb2RlW10gPSB7CisvKmZpeG1lOiBqZWcgZG9lcyBub3Qgd29yaworCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDMyMCwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDMgLyA4ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCQkucHJpdiA9IDV9LAorKi8KKwl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9ZVllVLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAyLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDR9LAorLyoKKwl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAzfSwKKyovCisJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfWVZZVSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAyfSwKKy8qCisJezEyODAsIDEwMjQsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxMjgwLAorCQkuc2l6ZWltYWdlID0gMTI4MCAqIDEwMjQgKiAxIC8gNCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAxfSwKKyovCisJezEyODAsIDEwMjQsIFY0TDJfUElYX0ZNVF9ZVllVLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxMjgwLAorCQkuc2l6ZWltYWdlID0gMTI4MCAqIDEwMjQgKiAyLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHN2Z2FfbW9kZVtdID0gewogCXs4MDAsIDYwMCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDgwMCwKQEAgLTQwMCw5MiArNDQ1LDIwOCBAQAogc3RhdGljIGNvbnN0IF9fdTggbWkxMzEwX3NvY2luaXRWR0FfSlBHW11bNF0gPSB7CiAJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAogCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKLQl7MHhiMywgMHgwMCwgMHg2NCwgMHhjY30sCi0JezB4YjMsIDB4MDAsIDB4NjUsIDB4Y2N9LAotCXsweGIzLCAweDA1LCAweDAwLCAweGNjfSwKLQl7MHhiMywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4MjQsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwKKwl7MHhiMywgMHgwNSwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDYsIDB4MDMsIDB4Y2N9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKIAl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAogCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKIAl7MHhiMywgMHgzNSwgMHhkZCwgMHhjY30sCi0JezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAogCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKLQl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MGQsIDB4Y2N9LAogCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4MjIsIDB4MDMsIDB4Y2N9LAotCXsweGIzLCAweDIzLCAweGMwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4ZTAsIDB4Y2N9LAogCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4MTYsIDB4MDQsIDB4Y2N9LAotCXsweGIzLCAweDE3LCAweGZmLCAweGNjfSwKLQl7MHhiMywgMHgwMCwgMHg2NSwgMHhjY30sCi0JezB4YjgsIDB4MDAsIDB4MDAsIDB4Y2N9LAotCXsweGJjLCAweDAwLCAweGQwLCAweGNjfSwKLQl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCi0JezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAotCXsweGM4LCAweDlmLCAweDBiLCAweGJifSwKLQl7MHg1YiwgMHgwMCwgMHgwMSwgMHhiYn0sCi0JezB4MmYsIDB4ZGUsIDB4MjAsIDB4YmJ9LAorCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCisJezB4YjgsIDB4MDEsIDB4N2QsIDB4Y2N9LAorCXsweGI4LCAweDgxLCAweDA5LCAweGNjfSwKKwl7MHhiOCwgMHgyNywgMHgyMCwgMHhjY30sCisJezB4YjgsIDB4MjYsIDB4ODAsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwKKwl7MHhiOCwgMHgwMCwgMHgxMywgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4NzEsIDB4Y2N9LAorCXsweGI4LCAweDgxLCAweDAxLCAweGNjfSwKKwl7MHhiOCwgMHgyYywgMHg1YSwgMHhjY30sCisJezB4YjgsIDB4MmQsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweDJlLCAweGVlLCAweGNjfSwKKwl7MHhiOCwgMHgyZiwgMHhmYiwgMHhjY30sCisJezB4YjgsIDB4MzAsIDB4NTIsIDB4Y2N9LAorCXsweGI4LCAweDMxLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgzMiwgMHhmMSwgMHhjY30sCisJezB4YjgsIDB4MzMsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweDM0LCAweDU0LCAweGNjfSwKKwl7MHhiOCwgMHgzNSwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MzYsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDM3LCAweDAwLCAweGNjfSwKIAl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCi0JezB4MjAsIDB4MDMsIDB4MDIsIDB4YmJ9LAorCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKKwl7MHgwZCwgMHgwMCwgMHgwOSwgMHhiYn0sCisJezB4MGQsIDB4MDAsIDB4MDgsIDB4YmJ9LAogCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHgwNSwgMHgwMCwgMHgwNywgMHhiYn0sCi0JezB4MzQsIDB4MDAsIDB4MDAsIDB4YmJ9LAotCXsweDM1LCAweGZmLCAweDAwLCAweGJifSwKLQl7MHhkYywgMHgwNywgMHgwMiwgMHhiYn0sCi0JezB4ZGQsIDB4M2MsIDB4MTgsIDB4YmJ9LAotCXsweGRlLCAweDkyLCAweDZkLCAweGJifSwKLQl7MHhkZiwgMHhjZCwgMHhiMSwgMHhiYn0sCi0JezB4ZTAsIDB4ZmYsIDB4ZTcsIDB4YmJ9LAotCXsweDA2LCAweGYwLCAweDBkLCAweGJifSwKLQl7MHgwNiwgMHg3MCwgMHgwZSwgMHhiYn0sCi0JezB4NGMsIDB4MDAsIDB4MDEsIDB4YmJ9LAotCXsweDRkLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCi0JezB4MmUsIDB4MGMsIDB4NTUsIDB4YmJ9LAotCXsweDIxLCAweGI2LCAweDZlLCAweGJifSwKLQl7MHgzNiwgMHgzMCwgMHgxMCwgMHhiYn0sCi0JezB4MzcsIDB4MDAsIDB4YzEsIDB4YmJ9LAorCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKKwl7MHgwNiwgMHgwMCwgMHgxNCwgMHhiYn0sCisJezB4M2EsIDB4MTAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHg5YiwgMHgxMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAogCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgwNywgMHgwMCwgMHg4NCwgMHhiYn0sCi0JezB4MDgsIDB4MDIsIDB4NGEsIDB4YmJ9LAotCXsweDA1LCAweDAxLCAweDEwLCAweGJifSwKLQl7MHgwNiwgMHgwMCwgMHgzOSwgMHhiYn0sCi0JezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAotCXsweDU4LCAweDAyLCAweDY3LCAweGJifSwKLQl7MHg1NywgMHgwMiwgMHgwMCwgMHhiYn0sCi0JezB4NWEsIDB4MDIsIDB4NjcsIDB4YmJ9LAotCXsweDU5LCAweDAyLCAweDAwLCAweGJifSwKLQl7MHg1YywgMHgxMiwgMHgwZCwgMHhiYn0sCi0JezB4NWQsIDB4MTYsIDB4MTEsIDB4YmJ9LAotCXsweDM5LCAweDA2LCAweDE4LCAweGJifSwKLQl7MHgzYSwgMHgwNiwgMHgxOCwgMHhiYn0sCi0JezB4M2IsIDB4MDYsIDB4MTgsIDB4YmJ9LAotCXsweDNjLCAweDA2LCAweDE4LCAweGJifSwKLQl7MHg2NCwgMHg3YiwgMHg1YiwgMHhiYn0sCi0JezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAotCXsweDM2LCAweDMwLCAweDEwLCAweGJifSwKLQl7MHgzNywgMHgwMCwgMHhjMCwgMHhiYn0sCi0JezB4YmMsIDB4MGUsIDB4MDAsIDB4Y2N9LAotCXsweGJjLCAweDBmLCAweDA1LCAweGNjfSwKLQl7MHhiYywgMHgxMCwgMHhjMCwgMHhjY30sCi0JezB4YmMsIDB4MTEsIDB4MDMsIDB4Y2N9LAorCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKKwl7MHgyYiwgMHgwMCwgMHgyOCwgMHhiYn0sCisJezB4MmMsIDB4MDAsIDB4MzAsIDB4YmJ9LAorCXsweDJkLCAweDAwLCAweDMwLCAweGJifSwKKwl7MHgyZSwgMHgwMCwgMHgyOCwgMHhiYn0sCisJezB4NDEsIDB4MDAsIDB4ZDcsIDB4YmJ9LAorCXsweDA5LCAweDAyLCAweDNhLCAweGJifSwKKwl7MHgwYywgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDA1LCAweDAwLCAweDhjLCAweGJifSwKKwl7MHgwNiwgMHgwMCwgMHgzMiwgMHhiYn0sCisJezB4MDcsIDB4MDAsIDB4YzYsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDE5LCAweGJifSwKKwl7MHgyNCwgMHg4MCwgMHg2ZiwgMHhiYn0sCisJezB4YzgsIDB4MDAsIDB4MGYsIDB4YmJ9LAorCXsweDIwLCAweDAwLCAweDBmLCAweGJifSwKIAl7MHhiNiwgMHgwMCwgMHgwMCwgMHhjY30sCiAJezB4YjYsIDB4MDMsIDB4MDIsIDB4Y2N9LAogCXsweGI2LCAweDAyLCAweDgwLCAweGNjfSwKIAl7MHhiNiwgMHgwNSwgMHgwMSwgMHhjY30sCiAJezB4YjYsIDB4MDQsIDB4ZTAsIDB4Y2N9LAotCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKLQl7MHhiNiwgMHgxMywgMHgyNSwgMHhjY30sCisJezB4YjYsIDB4MTIsIDB4NzgsIDB4Y2N9LAogCXsweGI2LCAweDE4LCAweDAyLCAweGNjfSwKIAl7MHhiNiwgMHgxNywgMHg1OCwgMHhjY30sCiAJezB4YjYsIDB4MTYsIDB4MDAsIDB4Y2N9LAogCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKIAl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDIsIDB4Y2N9LAogCXsweGJmLCAweGMwLCAweDM5LCAweGNjfSwKIAl7MHhiZiwgMHhjMSwgMHgwNCwgMHhjY30sCi0JezB4YmYsIDB4Y2MsIDB4MDAsIDB4Y2N9LAorCXsweGJmLCAweGNjLCAweDEwLCAweGNjfSwKKwl7MHhiOSwgMHgxMiwgMHgwMCwgMHhjY30sCisJezB4YjksIDB4MTMsIDB4MGEsIDB4Y2N9LAorCXsweGI5LCAweDE0LCAweDBhLCAweGNjfSwKKwl7MHhiOSwgMHgxNSwgMHgwYSwgMHhjY30sCisJezB4YjksIDB4MTYsIDB4MGEsIDB4Y2N9LAorCXsweGI5LCAweDE4LCAweDAwLCAweGNjfSwKKwl7MHhiOSwgMHgxOSwgMHgwZiwgMHhjY30sCisJezB4YjksIDB4MWEsIDB4MGYsIDB4Y2N9LAorCXsweGI5LCAweDFiLCAweDBmLCAweGNjfSwKKwl7MHhiOSwgMHgxYywgMHgwZiwgMHhjY30sCisJezB4YjgsIDB4OGUsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDhmLCAweGZmLCAweGNjfSwKKwl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCisJezB4MDMsIDB4MDMsIDB4YzAsIDB4YmJ9LAorCXsweDA2LCAweDAwLCAweDEwLCAweGJifSwKKwl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCisJezB4YjgsIDB4MGMsIDB4MjAsIDB4Y2N9LAorCXsweGI4LCAweDBkLCAweDcwLCAweGNjfSwKKwl7MHhiNiwgMHgxMywgMHgxMywgMHhjY30sCisJezB4MmYsIDB4MDAsIDB4QzAsIDB4YmJ9LAorCXsweGI4LCAweGEwLCAweDEyLCAweGNjfSwKKwl7fSwKK307CitzdGF0aWMgY29uc3QgX191OCBtaTEzMTBfc29jaW5pdFFWR0FfSlBHW11bNF0gPSB7CisJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAorCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHgyNCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4MjUsIDB4Y2N9LAorCXsweGIzLCAweDA1LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMywgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA4LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCisJezB4YjMsIDB4MzQsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGRkLCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MGQsIDB4Y2N9LAorCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweGUwLCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCisJezB4YjgsIDB4MDEsIDB4N2QsIDB4Y2N9LAorCXsweGI4LCAweDgxLCAweDA5LCAweGNjfSwKKwl7MHhiOCwgMHgyNywgMHgyMCwgMHhjY30sCisJezB4YjgsIDB4MjYsIDB4ODAsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwKKwl7MHhiOCwgMHgwMCwgMHgxMywgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4ZDEsIDB4Y2N9LAorCXsweGI4LCAweDgxLCAweDAxLCAweGNjfSwKKwl7MHhiOCwgMHgyYywgMHg1YSwgMHhjY30sCisJezB4YjgsIDB4MmQsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweDJlLCAweGVlLCAweGNjfSwKKwl7MHhiOCwgMHgyZiwgMHhmYiwgMHhjY30sCisJezB4YjgsIDB4MzAsIDB4NTIsIDB4Y2N9LAorCXsweGI4LCAweDMxLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgzMiwgMHhmMSwgMHhjY30sCisJezB4YjgsIDB4MzMsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweDM0LCAweDU0LCAweGNjfSwKKwl7MHhiOCwgMHgzNSwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MzYsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDM3LCAweDAwLCAweGNjfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDEsIDB4MDAsIDB4ZGR9LAorCXsweDBkLCAweDAwLCAweDA5LCAweGJifSwKKwl7MHgwZCwgMHgwMCwgMHgwOCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKKwl7MHgwNiwgMHgwMCwgMHgxNCwgMHhiYn0sCisJezB4M2EsIDB4MTAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHg5YiwgMHgxMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMSwgMHgwMCwgMHhkZH0sCisJezB4MmIsIDB4MDAsIDB4MjgsIDB4YmJ9LAorCXsweDJjLCAweDAwLCAweDMwLCAweGJifSwKKwl7MHgyZCwgMHgwMCwgMHgzMCwgMHhiYn0sCisJezB4MmUsIDB4MDAsIDB4MjgsIDB4YmJ9LAorCXsweDQxLCAweDAwLCAweGQ3LCAweGJifSwKKwl7MHgwOSwgMHgwMiwgMHgzYSwgMHhiYn0sCisJezB4MGMsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDIwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMCwgMHg4YywgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MzIsIDB4YmJ9LAorCXsweDA3LCAweDAwLCAweGM2LCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgxOSwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4NmYsIDB4YmJ9LAorCXsweGM4LCAweDAwLCAweDBmLCAweGJifSwKKwl7MHgyMCwgMHgwMCwgMHgwZiwgMHhiYn0sCisJezB4YjYsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDAzLCAweDAxLCAweGNjfSwKKwl7MHhiNiwgMHgwMiwgMHg0MCwgMHhjY30sCisJezB4YjYsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDA0LCAweGYwLCAweGNjfSwKKwl7MHhiNiwgMHgxMiwgMHg3OCwgMHhjY30sCisJezB4YjYsIDB4MTgsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDE3LCAweDk2LCAweGNjfSwKKwl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MjIsIDB4MTIsIDB4Y2N9LAorCXsweGI2LCAweDIzLCAweDBiLCAweGNjfSwKKwl7MHhiMywgMHgwMiwgMHgwMiwgMHhjY30sCisJezB4YmYsIDB4YzAsIDB4MzksIDB4Y2N9LAorCXsweGJmLCAweGMxLCAweDA0LCAweGNjfSwKKwl7MHhiZiwgMHhjYywgMHgxMCwgMHhjY30sCisJezB4YjksIDB4MTIsIDB4MDAsIDB4Y2N9LAorCXsweGI5LCAweDEzLCAweDBhLCAweGNjfSwKKwl7MHhiOSwgMHgxNCwgMHgwYSwgMHhjY30sCisJezB4YjksIDB4MTUsIDB4MGEsIDB4Y2N9LAorCXsweGI5LCAweDE2LCAweDBhLCAweGNjfSwKKwl7MHhiOSwgMHgxOCwgMHgwMCwgMHhjY30sCisJezB4YjksIDB4MTksIDB4MGYsIDB4Y2N9LAorCXsweGI5LCAweDFhLCAweDBmLCAweGNjfSwKKwl7MHhiOSwgMHgxYiwgMHgwZiwgMHhjY30sCisJezB4YjksIDB4MWMsIDB4MGYsIDB4Y2N9LAorCXsweGI4LCAweDhlLCAweDAwLCAweGNjfSwKKwl7MHhiOCwgMHg4ZiwgMHhmZiwgMHhjY30sCiAJezB4YmMsIDB4MDIsIDB4MTgsIDB4Y2N9LAogCXsweGJjLCAweDAzLCAweDUwLCAweGNjfSwKIAl7MHhiYywgMHgwNCwgMHgxOCwgMHhjY30sCkBAIC00OTYsMTMxICs2NTcsMTIzIEBACiAJezB4YmMsIDB4MGEsIDB4MTAsIDB4Y2N9LAogCXsweGJjLCAweDBiLCAweDAwLCAweGNjfSwKIAl7MHhiYywgMHgwYywgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAotCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHg4MCwgMHgwMCwgMHgwMywgMHhiYn0sCi0JezB4ODEsIDB4YzcsIDB4MTQsIDB4YmJ9LAotCXsweDgyLCAweGViLCAweGU4LCAweGJifSwKLQl7MHg4MywgMHhmZSwgMHhmNCwgMHhiYn0sCi0JezB4ODQsIDB4Y2QsIDB4MTAsIDB4YmJ9LAotCXsweDg1LCAweGYzLCAweGVlLCAweGJifSwKLQl7MHg4NiwgMHhmZiwgMHhmMSwgMHhiYn0sCi0JezB4ODcsIDB4Y2QsIDB4MTAsIDB4YmJ9LAotCXsweDg4LCAweGYzLCAweGVlLCAweGJifSwKLQl7MHg4OSwgMHgwMSwgMHhmMSwgMHhiYn0sCi0JezB4OGEsIDB4ZTUsIDB4MTcsIDB4YmJ9LAotCXsweDhiLCAweGU4LCAweGUyLCAweGJifSwKLQl7MHg4YywgMHhmNywgMHhlZCwgMHhiYn0sCi0JezB4OGQsIDB4MDAsIDB4ZmYsIDB4YmJ9LAotCXsweDhlLCAweGVjLCAweDEwLCAweGJifSwKLQl7MHg4ZiwgMHhmMCwgMHhlZCwgMHhiYn0sCi0JezB4OTAsIDB4ZjksIDB4ZjIsIDB4YmJ9LAotCXsweDkxLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHg5MiwgMHhlOSwgMHgwZCwgMHhiYn0sCi0JezB4OTMsIDB4ZjQsIDB4ZjIsIDB4YmJ9LAotCXsweDk0LCAweGZiLCAweGY1LCAweGJifSwKLQl7MHg5NSwgMHgwMCwgMHhmZiwgMHhiYn0sCi0JezB4YjYsIDB4MGYsIDB4MDgsIDB4YmJ9LAotCXsweGI3LCAweDNkLCAweDE2LCAweGJifSwKLQl7MHhiOCwgMHgwYywgMHgwNCwgMHhiYn0sCi0JezB4YjksIDB4MWMsIDB4MDcsIDB4YmJ9LAotCXsweGJhLCAweDBhLCAweDAzLCAweGJifSwKLQl7MHhiYiwgMHgxYiwgMHgwOSwgMHhiYn0sCi0JezB4YmMsIDB4MTcsIDB4MGQsIDB4YmJ9LAotCXsweGJkLCAweDIzLCAweDFkLCAweGJifSwKLQl7MHhiZSwgMHgwMCwgMHgyOCwgMHhiYn0sCi0JezB4YmYsIDB4MTEsIDB4MDksIDB4YmJ9LAotCXsweGMwLCAweDE2LCAweDE1LCAweGJifSwKLQl7MHhjMSwgMHgwMCwgMHgxYiwgMHhiYn0sCi0JezB4YzIsIDB4MGUsIDB4MDcsIDB4YmJ9LAotCXsweGMzLCAweDE0LCAweDEwLCAweGJifSwKLQl7MHhjNCwgMHgwMCwgMHgxNywgMHhiYn0sCi0JezB4MDYsIDB4NzQsIDB4OGUsIDB4YmJ9LAotCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHgwNiwgMHhmNCwgMHg4ZSwgMHhiYn0sCi0JezB4MDAsIDB4MDAsIDB4NTAsIDB4ZGR9LAotCXsweDA2LCAweDc0LCAweDhlLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCi0JezB4MjQsIDB4NTAsIDB4MjAsIDB4YmJ9LAotCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKLQl7MHgzNCwgMHgwYywgMHg1MCwgMHhiYn0sCiAJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAotCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKIAl7MHgwMywgMHgwMywgMHhjMCwgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MTAsIDB4YmJ9LAorCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgwYywgMHgyMCwgMHhjY30sCisJezB4YjgsIDB4MGQsIDB4NzAsIDB4Y2N9LAorCXsweGI2LCAweDEzLCAweDEzLCAweGNjfSwKKwl7MHgyZiwgMHgwMCwgMHhDMCwgMHhiYn0sCisJezB4YjgsIDB4YTAsIDB4MTIsIDB4Y2N9LAogCXt9LAogfTsKLXN0YXRpYyBjb25zdCBfX3U4IG1pMTMxMF9zb2Npbml0UVZHQV9KUEdbXVs0XSA9IHsKLQl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKLQl7MHhiMywgMHgwMCwgMHg2NCwgMHhjY30sCXsweGIzLCAweDAwLCAweDY1LCAweGNjfSwKLQl7MHhiMywgMHgwNSwgMHgwMCwgMHhjY30sCXsweGIzLCAweDA2LCAweDAwLCAweGNjfSwKLQl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKLQl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCXsweGIzLCAweDM1LCAweGRkLCAweGNjfSwKLQl7MHhiMywgMHgwMiwgMHgwMCwgMHhjY30sCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKLQl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKLQl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCXsweGIzLCAweDIyLCAweDAzLCAweGNjfSwKLQl7MHhiMywgMHgyMywgMHhjMCwgMHhjY30sCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKLQl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCXsweGIzLCAweDE2LCAweDA0LCAweGNjfSwKLQl7MHhiMywgMHgxNywgMHhmZiwgMHhjY30sCXsweGIzLCAweDAwLCAweDY1LCAweGNjfSwKLQl7MHhiOCwgMHgwMCwgMHgwMCwgMHhjY30sCXsweGJjLCAweDAwLCAweGYwLCAweGNjfSwKLQl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKLQl7MHhjOCwgMHg5ZiwgMHgwYiwgMHhiYn0sCXsweDViLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHgyZiwgMHhkZSwgMHgyMCwgMHhiYn0sCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgyMCwgMHgwMywgMHgwMiwgMHhiYn0sCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHgwNSwgMHgwMCwgMHgwNywgMHhiYn0sCXsweDM0LCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgzNSwgMHhmZiwgMHgwMCwgMHhiYn0sCXsweGRjLCAweDA3LCAweDAyLCAweGJifSwKLQl7MHhkZCwgMHgzYywgMHgxOCwgMHhiYn0sCXsweGRlLCAweDkyLCAweDZkLCAweGJifSwKLQl7MHhkZiwgMHhjZCwgMHhiMSwgMHhiYn0sCXsweGUwLCAweGZmLCAweGU3LCAweGJifSwKLQl7MHgwNiwgMHhmMCwgMHgwZCwgMHhiYn0sCXsweDA2LCAweDcwLCAweDBlLCAweGJifSwKLQl7MHg0YywgMHgwMCwgMHgwMSwgMHhiYn0sCXsweDRkLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDJlLCAweDBjLCAweDU1LCAweGJifSwKLQl7MHgyMSwgMHhiNiwgMHg2ZSwgMHhiYn0sCXsweDM2LCAweDMwLCAweDEwLCAweGJifSwKLQl7MHgzNywgMHgwMCwgMHhjMSwgMHhiYn0sCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgwNywgMHgwMCwgMHg4NCwgMHhiYn0sCXsweDA4LCAweDAyLCAweDRhLCAweGJifSwKLQl7MHgwNSwgMHgwMSwgMHgxMCwgMHhiYn0sCXsweDA2LCAweDAwLCAweDM5LCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDU4LCAweDAyLCAweDY3LCAweGJifSwKLQl7MHg1NywgMHgwMiwgMHgwMCwgMHhiYn0sCXsweDVhLCAweDAyLCAweDY3LCAweGJifSwKLQl7MHg1OSwgMHgwMiwgMHgwMCwgMHhiYn0sCXsweDVjLCAweDEyLCAweDBkLCAweGJifSwKLQl7MHg1ZCwgMHgxNiwgMHgxMSwgMHhiYn0sCXsweDM5LCAweDA2LCAweDE4LCAweGJifSwKLQl7MHgzYSwgMHgwNiwgMHgxOCwgMHhiYn0sCXsweDNiLCAweDA2LCAweDE4LCAweGJifSwKLQl7MHgzYywgMHgwNiwgMHgxOCwgMHhiYn0sCXsweDY0LCAweDdiLCAweDViLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDM2LCAweDMwLCAweDEwLCAweGJifSwKLQl7MHgzNywgMHgwMCwgMHhjMCwgMHhiYn0sCXsweGJjLCAweDBlLCAweDAwLCAweGNjfSwKLQl7MHhiYywgMHgwZiwgMHgwNSwgMHhjY30sCXsweGJjLCAweDEwLCAweGMwLCAweGNjfSwKLQl7MHhiYywgMHgxMSwgMHgwMywgMHhjY30sCXsweGI2LCAweDAwLCAweDAwLCAweGNjfSwKLQl7MHhiNiwgMHgwMywgMHgwMSwgMHhjY30sCXsweGI2LCAweDAyLCAweDQwLCAweGNjfSwKLQl7MHhiNiwgMHgwNSwgMHgwMCwgMHhjY30sCXsweGI2LCAweDA0LCAweGYwLCAweGNjfSwKLQl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCXsweGI2LCAweDEzLCAweDI1LCAweGNjfSwKLQl7MHhiNiwgMHgxOCwgMHgwMCwgMHhjY30sCXsweGI2LCAweDE3LCAweDk2LCAweGNjfSwKLQl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKLQl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCXsweGJmLCAweGMwLCAweDM5LCAweGNjfSwKLQl7MHhiZiwgMHhjMSwgMHgwNCwgMHhjY30sCXsweGJmLCAweGNjLCAweDAwLCAweGNjfSwKLQl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHg4MCwgMHgwMCwgMHgwMywgMHhiYn0sCXsweDgxLCAweGM3LCAweDE0LCAweGJifSwKLQl7MHg4MiwgMHhlYiwgMHhlOCwgMHhiYn0sCXsweDgzLCAweGZlLCAweGY0LCAweGJifSwKLQl7MHg4NCwgMHhjZCwgMHgxMCwgMHhiYn0sCXsweDg1LCAweGYzLCAweGVlLCAweGJifSwKLQl7MHg4NiwgMHhmZiwgMHhmMSwgMHhiYn0sCXsweDg3LCAweGNkLCAweDEwLCAweGJifSwKLQl7MHg4OCwgMHhmMywgMHhlZSwgMHhiYn0sCXsweDg5LCAweDAxLCAweGYxLCAweGJifSwKLQl7MHg4YSwgMHhlNSwgMHgxNywgMHhiYn0sCXsweDhiLCAweGU4LCAweGUyLCAweGJifSwKLQl7MHg4YywgMHhmNywgMHhlZCwgMHhiYn0sCXsweDhkLCAweDAwLCAweGZmLCAweGJifSwKLQl7MHg4ZSwgMHhlYywgMHgxMCwgMHhiYn0sCXsweDhmLCAweGYwLCAweGVkLCAweGJifSwKLQl7MHg5MCwgMHhmOSwgMHhmMiwgMHhiYn0sCXsweDkxLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHg5MiwgMHhlOSwgMHgwZCwgMHhiYn0sCXsweDkzLCAweGY0LCAweGYyLCAweGJifSwKLQl7MHg5NCwgMHhmYiwgMHhmNSwgMHhiYn0sCXsweDk1LCAweDAwLCAweGZmLCAweGJifSwKLQl7MHhiNiwgMHgwZiwgMHgwOCwgMHhiYn0sCXsweGI3LCAweDNkLCAweDE2LCAweGJifSwKLQl7MHhiOCwgMHgwYywgMHgwNCwgMHhiYn0sCXsweGI5LCAweDFjLCAweDA3LCAweGJifSwKLQl7MHhiYSwgMHgwYSwgMHgwMywgMHhiYn0sCXsweGJiLCAweDFiLCAweDA5LCAweGJifSwKLQl7MHhiYywgMHgxNywgMHgwZCwgMHhiYn0sCXsweGJkLCAweDIzLCAweDFkLCAweGJifSwKLQl7MHhiZSwgMHgwMCwgMHgyOCwgMHhiYn0sCXsweGJmLCAweDExLCAweDA5LCAweGJifSwKLQl7MHhjMCwgMHgxNiwgMHgxNSwgMHhiYn0sCXsweGMxLCAweDAwLCAweDFiLCAweGJifSwKLQl7MHhjMiwgMHgwZSwgMHgwNywgMHhiYn0sCXsweGMzLCAweDE0LCAweDEwLCAweGJifSwKLQl7MHhjNCwgMHgwMCwgMHgxNywgMHhiYn0sCXsweDA2LCAweDc0LCAweDhlLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCXsweDA2LCAweGY0LCAweDhlLCAweGJifSwKLQl7MHgwMCwgMHgwMCwgMHg1MCwgMHhkZH0sCXsweDA2LCAweDc0LCAweDhlLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDI0LCAweDUwLCAweDIwLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDM0LCAweDBjLCAweDUwLCAweGJifSwKLQl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgwMywgMHgwMywgMHhjMCwgMHhiYn0sCi0Je30sCitzdGF0aWMgY29uc3QgdTggbWkxMzEwX3NvY19Jbml0U1hHQV9KUEdbXVs0XSA9IHsKKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCisJezB4YjAsIDB4MDQsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHgyNSwgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4ZGQsIDB4Y2N9LAorCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgwZCwgMHhjY30sCisJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwNCwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweGZmLCAweGNjfSwKKwl7MHhiOCwgMHgwMSwgMHg3ZCwgMHhjY30sCisJezB4YjgsIDB4ODEsIDB4MDksIDB4Y2N9LAorCXsweGI4LCAweDI3LCAweDIwLCAweGNjfSwKKwl7MHhiOCwgMHgyNiwgMHg4MCwgMHhjY30sCisJezB4YjgsIDB4MDYsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDA3LCAweDA1LCAweGNjfSwKKwl7MHhiOCwgMHgwOCwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MDksIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwKKwl7MHhiOCwgMHgwMCwgMHgxMSwgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4NzEsIDB4Y2N9LAorCXsweGI4LCAweDgxLCAweDAxLCAweGNjfSwKKwl7MHhiOCwgMHgyYywgMHg1YSwgMHhjY30sCisJezB4YjgsIDB4MmQsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweDJlLCAweGVlLCAweGNjfSwKKwl7MHhiOCwgMHgyZiwgMHhmYiwgMHhjY30sCisJezB4YjgsIDB4MzAsIDB4NTIsIDB4Y2N9LAorCXsweGI4LCAweDMxLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgzMiwgMHhmMSwgMHhjY30sCisJezB4YjgsIDB4MzMsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweDM0LCAweDU0LCAweGNjfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDEsIDB4MDAsIDB4ZGR9LAorCXsweDBkLCAweDAwLCAweDA5LCAweGJifSwKKwl7MHgwZCwgMHgwMCwgMHgwOCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKKwl7MHgwNiwgMHgwMCwgMHgxNCwgMHhiYn0sCisJezB4M2EsIDB4MTAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHg5YiwgMHgxMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMSwgMHgwMCwgMHhkZH0sCisJezB4MmIsIDB4MDAsIDB4MjgsIDB4YmJ9LAorCXsweDJjLCAweDAwLCAweDMwLCAweGJifSwKKwl7MHgyZCwgMHgwMCwgMHgzMCwgMHhiYn0sCisJezB4MmUsIDB4MDAsIDB4MjgsIDB4YmJ9LAorCXsweDQxLCAweDAwLCAweGQ3LCAweGJifSwKKwl7MHgwOSwgMHgwMiwgMHgzYSwgMHhiYn0sCisJezB4MGMsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDIwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMCwgMHg4YywgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MzIsIDB4YmJ9LAorCXsweDA3LCAweDAwLCAweGM2LCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgxOSwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4NmYsIDB4YmJ9LAorCXsweGM4LCAweDAwLCAweDBmLCAweGJifSwKKwl7MHgyMCwgMHgwMCwgMHgwMywgMHhiYn0sCisJezB4YjYsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDAzLCAweDA1LCAweGNjfSwKKwl7MHhiNiwgMHgwMiwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MDUsIDB4MDQsIDB4Y2N9LAorCXsweGI2LCAweDA0LCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCisJezB4YjYsIDB4MTgsIDB4MGEsIDB4Y2N9LAorCXsweGI2LCAweDE3LCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MjIsIDB4MTIsIDB4Y2N9LAorCXsweGI2LCAweDIzLCAweDBiLCAweGNjfSwKKwl7MHhiMywgMHgwMiwgMHgwMiwgMHhjY30sCisJezB4YmYsIDB4YzAsIDB4MzksIDB4Y2N9LAorCXsweGJmLCAweGMxLCAweDA0LCAweGNjfSwKKwl7MHhiZiwgMHhjYywgMHgxMCwgMHhjY30sCisJezB4YjksIDB4MTIsIDB4MDAsIDB4Y2N9LAorCXsweGI5LCAweDEzLCAweDE0LCAweGNjfSwKKwl7MHhiOSwgMHgxNCwgMHgxNCwgMHhjY30sCisJezB4YjksIDB4MTUsIDB4MTQsIDB4Y2N9LAorCXsweGI5LCAweDE2LCAweDE0LCAweGNjfSwKKwl7MHhiOSwgMHgxOCwgMHgwMCwgMHhjY30sCisJezB4YjksIDB4MTksIDB4MWUsIDB4Y2N9LAorCXsweGI5LCAweDFhLCAweDFlLCAweGNjfSwKKwl7MHhiOSwgMHgxYiwgMHgxZSwgMHhjY30sCisJezB4YjksIDB4MWMsIDB4MWUsIDB4Y2N9LAorCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwKKwl7MHhiOCwgMHg4ZSwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4OGYsIDB4ZmYsIDB4Y2N9LAorCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgwYywgMHgyMCwgMHhjY30sCisJezB4YjgsIDB4MGQsIDB4NzAsIDB4Y2N9LAorCXsweGI2LCAweDEzLCAweDEzLCAweGNjfSwKKwl7MHgyZiwgMHgwMCwgMHhDMCwgMHhiYn0sCisJezB4YjgsIDB4YTAsIDB4MTIsIDB4Y2N9LAorCXt9CiB9OwogCiBzdGF0aWMgY29uc3QgX191OCBtaTEzMjBfZ2FtbWFbMTddID0gewpAQCAtNzc4LDYgKzkzMSw3MjIgQEAKIAl7fQogfTsKIAorc3RhdGljIGNvbnN0IHU4IG1pMTMyMF9zb2NfSW5pdFZHQVtdWzRdID0geworCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCisJezB4YjAsIDB4MDQsIDB4MDIsIDB4Y2N9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhiMywgMHgwMCwgMHg2NCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGIzLCAweDA1LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAorCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LAorCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweGUwLCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGI4LCAweDAwLCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwMCwgMHg3MSwgMHhjY30sCisJezB4YmMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweGM4LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgzMCwgMHhkZH0sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHgwNywgMHgwMCwgMHhlMCwgMHhiYn0sCisJezB4MDgsIDB4MDAsIDB4MGIsIDB4YmJ9LAorCXsweDIxLCAweDAwLCAweDBjLCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4YmYsIDB4YzAsIDB4MjYsIDB4Y2N9LAorCXsweGJmLCAweGMxLCAweDAyLCAweGNjfSwKKwl7MHhiZiwgMHhjYywgMHgwNCwgMHhjY30sCisJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMSwgMHg3OCwgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MTEsIDB4YmJ9LAorCXsweDA3LCAweDAxLCAweDQyLCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDIxLCAweDgwLCAweDAwLCAweGJifSwKKwl7MHgyMiwgMHgwZCwgMHgwZiwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDU5LCAweDAwLCAweGZmLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MzksIDB4MDMsIDB4Y2EsIDB4YmJ9LAorCXsweDNhLCAweDA2LCAweDgwLCAweGJifSwKKwl7MHgzYiwgMHgwMSwgMHg1MiwgMHhiYn0sCisJezB4M2MsIDB4MDUsIDB4NDAsIDB4YmJ9LAorCXsweDU3LCAweDAxLCAweDljLCAweGJifSwKKwl7MHg1OCwgMHgwMSwgMHhlZSwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZjAsIDB4YmJ9LAorCXsweDVhLCAweDAxLCAweDIwLCAweGJifSwKKwl7MHg1YywgMHgxZCwgMHgxNywgMHhiYn0sCisJezB4NWQsIDB4MjIsIDB4MWMsIDB4YmJ9LAorCXsweDY0LCAweDFlLCAweDFjLCAweGJifSwKKwl7MHg1YiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDIyLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyMywgMHhhMCwgMHg3OCwgMHhiYn0sCisJezB4MjQsIDB4N2YsIDB4MDAsIDB4YmJ9LAorCXsweDI4LCAweGVhLCAweDAyLCAweGJifSwKKwl7MHgyOSwgMHg4NiwgMHg3YSwgMHhiYn0sCisJezB4NWUsIDB4NTIsIDB4NGMsIDB4YmJ9LAorCXsweDVmLCAweDIwLCAweDI0LCAweGJifSwKKwl7MHg2MCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MDIsIDB4MDAsIDB4ZWUsIDB4YmJ9LAorCXsweDAzLCAweDM5LCAweDIzLCAweGJifSwKKwl7MHgwNCwgMHgwNywgMHgyNCwgMHhiYn0sCisJezB4MDksIDB4MDAsIDB4YzAsIDB4YmJ9LAorCXsweDBhLCAweDAwLCAweDc5LCAweGJifSwKKwl7MHgwYiwgMHgwMCwgMHgwNCwgMHhiYn0sCisJezB4MGMsIDB4MDAsIDB4NWMsIDB4YmJ9LAorCXsweDBkLCAweDAwLCAweGQ5LCAweGJifSwKKwl7MHgwZSwgMHgwMCwgMHg1MywgMHhiYn0sCisJezB4MGYsIDB4MDAsIDB4MjEsIDB4YmJ9LAorCXsweDEwLCAweDAwLCAweGE0LCAweGJifSwKKwl7MHgxMSwgMHgwMCwgMHhlNSwgMHhiYn0sCisJezB4MTUsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE2LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxNywgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTgsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE5LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWIsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFjLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWUsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwNiwgMHhlMCwgMHgwZSwgMHhiYn0sCisJezB4MDYsIDB4NjAsIDB4MGUsIDB4YmJ9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCB1OCBtaTEzMjBfc29jX0luaXRWR0FfSlBHW11bNF0gPSB7CisJezB4YjMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGIwLCAweDAzLCAweDE5LCAweGNjfSwKKwl7MHhiMCwgMHgwNCwgMHgwMiwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4MzAsIDB4ZGR9LAorCXsweGIzLCAweDAwLCAweDY0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAorCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhjOCwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCisJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4ZTAsIDB4Y2N9LAorCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjgsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweDcxLCAweGNjfSwKKwl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4YzgsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweDA3LCAweDAwLCAweGUwLCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgwYiwgMHhiYn0sCisJezB4MjEsIDB4MDAsIDB4MGMsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwKKwl7MHhiNiwgMHgwMCwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MDMsIDB4MDIsIDB4Y2N9LAorCXsweGI2LCAweDAyLCAweDgwLCAweGNjfSwKKwl7MHhiNiwgMHgwNSwgMHgwMSwgMHhjY30sCisJezB4YjYsIDB4MDQsIDB4ZTAsIDB4Y2N9LAorCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKKwl7MHhiNiwgMHgxMywgMHgwNSwgMHhjY30sCisJezB4YjYsIDB4MTgsIDB4MDIsIDB4Y2N9LAorCXsweGI2LCAweDE3LCAweDU4LCAweGNjfSwKKwl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MjIsIDB4MTIsIDB4Y2N9LAorCXsweGI2LCAweDIzLCAweDBiLCAweGNjfSwKKwl7MHhiZiwgMHhjMCwgMHgzOSwgMHhjY30sCisJezB4YmYsIDB4YzEsIDB4MDQsIDB4Y2N9LAorCXsweGJmLCAweGNjLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDA1LCAweDAxLCAweDc4LCAweGJifSwKKwl7MHgwNiwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MDcsIDB4MDEsIDB4NDIsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDExLCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MjEsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDIyLCAweDBkLCAweDBmLCAweGJifSwKKwl7MHgyNCwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgzOSwgMHgwMywgMHhjYSwgMHhiYn0sCisJezB4M2EsIDB4MDYsIDB4ODAsIDB4YmJ9LAorCXsweDNiLCAweDAxLCAweDUyLCAweGJifSwKKwl7MHgzYywgMHgwNSwgMHg0MCwgMHhiYn0sCisJezB4NTcsIDB4MDEsIDB4OWMsIDB4YmJ9LAorCXsweDU4LCAweDAxLCAweGVlLCAweGJifSwKKwl7MHg1OSwgMHgwMCwgMHhmMCwgMHhiYn0sCisJezB4NWEsIDB4MDEsIDB4MjAsIDB4YmJ9LAorCXsweDVjLCAweDFkLCAweDE3LCAweGJifSwKKwl7MHg1ZCwgMHgyMiwgMHgxYywgMHhiYn0sCisJezB4NjQsIDB4MWUsIDB4MWMsIDB4YmJ9LAorCXsweDViLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MjIsIDB4YTAsIDB4NzgsIDB4YmJ9LAorCXsweDIzLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyNCwgMHg3ZiwgMHgwMCwgMHhiYn0sCisJezB4MjgsIDB4ZWEsIDB4MDIsIDB4YmJ9LAorCXsweDI5LCAweDg2LCAweDdhLCAweGJifSwKKwl7MHg1ZSwgMHg1MiwgMHg0YywgMHhiYn0sCisJezB4NWYsIDB4MjAsIDB4MjQsIDB4YmJ9LAorCXsweDYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMiwgMHgwMCwgMHhlZSwgMHhiYn0sCisJezB4MDMsIDB4MzksIDB4MjMsIDB4YmJ9LAorCXsweDA0LCAweDA3LCAweDI0LCAweGJifSwKKwl7MHgwOSwgMHgwMCwgMHhjMCwgMHhiYn0sCisJezB4MGEsIDB4MDAsIDB4NzksIDB4YmJ9LAorCXsweDBiLCAweDAwLCAweDA0LCAweGJifSwKKwl7MHgwYywgMHgwMCwgMHg1YywgMHhiYn0sCisJezB4MGQsIDB4MDAsIDB4ZDksIDB4YmJ9LAorCXsweDBlLCAweDAwLCAweDUzLCAweGJifSwKKwl7MHgwZiwgMHgwMCwgMHgyMSwgMHhiYn0sCisJezB4MTAsIDB4MDAsIDB4YTQsIDB4YmJ9LAorCXsweDExLCAweDAwLCAweGU1LCAweGJifSwKKwl7MHgxNSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTYsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE3LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxOCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTksIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFhLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWMsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFkLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDA2LCAweGUwLCAweDBlLCAweGJifSwKKwl7MHgwNiwgMHg2MCwgMHgwZSwgMHhiYn0sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IHU4IG1pMTMyMF9zb2NfSW5pdFFWR0FbXVs0XSA9IHsKKwl7MHhiMywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAorCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKKwl7MHgwMCwgMHgwMCwgMHgzMCwgMHhkZH0sCisJezB4YjMsIDB4MDAsIDB4NjQsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDY3LCAweGNjfSwKKwl7MHhiMywgMHgwNSwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDYsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA4LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCisJezB4YjMsIDB4MzQsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGM4LCAweGNjfSwKKwl7MHhiMywgMHgwMiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDMsIDB4MGEsIDB4Y2N9LAorCXsweGIzLCAweDA0LCAweDA1LCAweGNjfSwKKwl7MHhiMywgMHgyMCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjEsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIyLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgyMywgMHhlMCwgMHhjY30sCisJezB4YjMsIDB4MTQsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDY3LCAweGNjfSwKKwl7MHhiOCwgMHgwMCwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4ZDEsIDB4Y2N9LAorCXsweGJjLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHhjOCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MzAsIDB4ZGR9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4MDcsIDB4MDAsIDB4ZTAsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDBiLCAweGJifSwKKwl7MHgyMSwgMHgwMCwgMHgwYywgMHhiYn0sCisJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweGJmLCAweGMwLCAweDI2LCAweGNjfSwKKwl7MHhiZiwgMHhjMSwgMHgwMiwgMHhjY30sCisJezB4YmYsIDB4Y2MsIDB4MDQsIDB4Y2N9LAorCXsweGJjLCAweDAyLCAweDE4LCAweGNjfSwKKwl7MHhiYywgMHgwMywgMHg1MCwgMHhjY30sCisJezB4YmMsIDB4MDQsIDB4MTgsIDB4Y2N9LAorCXsweGJjLCAweDA1LCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MDgsIDB4MzAsIDB4Y2N9LAorCXsweGJjLCAweDA5LCAweDQwLCAweGNjfSwKKwl7MHhiYywgMHgwYSwgMHgxMCwgMHhjY30sCisJezB4YmMsIDB4MGIsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDBjLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDA1LCAweDAxLCAweDc4LCAweGJifSwKKwl7MHgwNiwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MDcsIDB4MDEsIDB4NDIsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDExLCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MjEsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDIyLCAweDBkLCAweDBmLCAweGJifSwKKwl7MHgyNCwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgzOSwgMHgwMywgMHhjYSwgMHhiYn0sCisJezB4M2EsIDB4MDYsIDB4ODAsIDB4YmJ9LAorCXsweDNiLCAweDAxLCAweDUyLCAweGJifSwKKwl7MHgzYywgMHgwNSwgMHg0MCwgMHhiYn0sCisJezB4NTcsIDB4MDEsIDB4OWMsIDB4YmJ9LAorCXsweDU4LCAweDAxLCAweGVlLCAweGJifSwKKwl7MHg1OSwgMHgwMCwgMHhmMCwgMHhiYn0sCisJezB4NWEsIDB4MDEsIDB4MjAsIDB4YmJ9LAorCXsweDVjLCAweDFkLCAweDE3LCAweGJifSwKKwl7MHg1ZCwgMHgyMiwgMHgxYywgMHhiYn0sCisJezB4NjQsIDB4MWUsIDB4MWMsIDB4YmJ9LAorCXsweDViLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MjIsIDB4YTAsIDB4NzgsIDB4YmJ9LAorCXsweDIzLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyNCwgMHg3ZiwgMHgwMCwgMHhiYn0sCisJezB4MjgsIDB4ZWEsIDB4MDIsIDB4YmJ9LAorCXsweDI5LCAweDg2LCAweDdhLCAweGJifSwKKwl7MHg1ZSwgMHg1MiwgMHg0YywgMHhiYn0sCisJezB4NWYsIDB4MjAsIDB4MjQsIDB4YmJ9LAorCXsweDYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMiwgMHgwMCwgMHhlZSwgMHhiYn0sCisJezB4MDMsIDB4MzksIDB4MjMsIDB4YmJ9LAorCXsweDA0LCAweDA3LCAweDI0LCAweGJifSwKKwl7MHgwOSwgMHgwMCwgMHhjMCwgMHhiYn0sCisJezB4MGEsIDB4MDAsIDB4NzksIDB4YmJ9LAorCXsweDBiLCAweDAwLCAweDA0LCAweGJifSwKKwl7MHgwYywgMHgwMCwgMHg1YywgMHhiYn0sCisJezB4MGQsIDB4MDAsIDB4ZDksIDB4YmJ9LAorCXsweDBlLCAweDAwLCAweDUzLCAweGJifSwKKwl7MHgwZiwgMHgwMCwgMHgyMSwgMHhiYn0sCisJezB4MTAsIDB4MDAsIDB4YTQsIDB4YmJ9LAorCXsweDExLCAweDAwLCAweGU1LCAweGJifSwKKwl7MHgxNSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTYsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE3LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxOCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTksIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFhLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWMsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFkLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDA2LCAweGUwLCAweDBlLCAweGJifSwKKwl7MHgwNiwgMHg2MCwgMHgwZSwgMHhiYn0sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IHU4IG1pMTMyMF9zb2NfSW5pdFFWR0FfSlBHW11bNF0gPSB7CisJezB4YjMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGIwLCAweDAzLCAweDE5LCAweGNjfSwKKwl7MHhiMCwgMHgwNCwgMHgwMiwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4MzAsIDB4ZGR9LAorCXsweGIzLCAweDAwLCAweDY0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAorCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhjOCwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCisJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4ZTAsIDB4Y2N9LAorCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjgsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweGQxLCAweGNjfSwKKwl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4YzgsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweDA3LCAweDAwLCAweGUwLCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgwYiwgMHhiYn0sCisJezB4MjEsIDB4MDAsIDB4MGMsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwKKwl7MHhiNiwgMHgwMCwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MDMsIDB4MDEsIDB4Y2N9LAorCXsweGI2LCAweDAyLCAweDQwLCAweGNjfSwKKwl7MHhiNiwgMHgwNSwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MDQsIDB4ZjAsIDB4Y2N9LAorCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKKwl7MHhiNiwgMHgxMywgMHgwNSwgMHhjY30sCisJezB4YjYsIDB4MTgsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDE3LCAweDk2LCAweGNjfSwKKwl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MjIsIDB4MTIsIDB4Y2N9LAorCXsweGI2LCAweDIzLCAweDBiLCAweGNjfSwKKwl7MHhiZiwgMHhjMCwgMHgzOSwgMHhjY30sCisJezB4YmYsIDB4YzEsIDB4MDQsIDB4Y2N9LAorCXsweGJmLCAweGNjLCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwMiwgMHgxOCwgMHhjY30sCisJezB4YmMsIDB4MDMsIDB4NTAsIDB4Y2N9LAorCXsweGJjLCAweDA0LCAweDE4LCAweGNjfSwKKwl7MHhiYywgMHgwNSwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MDYsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDA4LCAweDMwLCAweGNjfSwKKwl7MHhiYywgMHgwOSwgMHg0MCwgMHhjY30sCisJezB4YmMsIDB4MGEsIDB4MTAsIDB4Y2N9LAorCXsweGJjLCAweDBiLCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwYywgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMSwgMHg3OCwgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MTEsIDB4YmJ9LAorCXsweDA3LCAweDAxLCAweDQyLCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDIxLCAweDgwLCAweDAwLCAweGJifSwKKwl7MHgyMiwgMHgwZCwgMHgwZiwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDU5LCAweDAwLCAweGZmLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MzksIDB4MDMsIDB4Y2EsIDB4YmJ9LAorCXsweDNhLCAweDA2LCAweDgwLCAweGJifSwKKwl7MHgzYiwgMHgwMSwgMHg1MiwgMHhiYn0sCisJezB4M2MsIDB4MDUsIDB4NDAsIDB4YmJ9LAorCXsweDU3LCAweDAxLCAweDljLCAweGJifSwKKwl7MHg1OCwgMHgwMSwgMHhlZSwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZjAsIDB4YmJ9LAorCXsweDVhLCAweDAxLCAweDIwLCAweGJifSwKKwl7MHg1YywgMHgxZCwgMHgxNywgMHhiYn0sCisJezB4NWQsIDB4MjIsIDB4MWMsIDB4YmJ9LAorCXsweDY0LCAweDFlLCAweDFjLCAweGJifSwKKwl7MHg1YiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDIyLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyMywgMHhhMCwgMHg3OCwgMHhiYn0sCisJezB4MjQsIDB4N2YsIDB4MDAsIDB4YmJ9LAorCXsweDI4LCAweGVhLCAweDAyLCAweGJifSwKKwl7MHgyOSwgMHg4NiwgMHg3YSwgMHhiYn0sCisJezB4NWUsIDB4NTIsIDB4NGMsIDB4YmJ9LAorCXsweDVmLCAweDIwLCAweDI0LCAweGJifSwKKwl7MHg2MCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MDIsIDB4MDAsIDB4ZWUsIDB4YmJ9LAorCXsweDAzLCAweDM5LCAweDIzLCAweGJifSwKKwl7MHgwNCwgMHgwNywgMHgyNCwgMHhiYn0sCisJezB4MDksIDB4MDAsIDB4YzAsIDB4YmJ9LAorCXsweDBhLCAweDAwLCAweDc5LCAweGJifSwKKwl7MHgwYiwgMHgwMCwgMHgwNCwgMHhiYn0sCisJezB4MGMsIDB4MDAsIDB4NWMsIDB4YmJ9LAorCXsweDBkLCAweDAwLCAweGQ5LCAweGJifSwKKwl7MHgwZSwgMHgwMCwgMHg1MywgMHhiYn0sCisJezB4MGYsIDB4MDAsIDB4MjEsIDB4YmJ9LAorCXsweDEwLCAweDAwLCAweGE0LCAweGJifSwKKwl7MHgxMSwgMHgwMCwgMHhlNSwgMHhiYn0sCisJezB4MTUsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE2LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxNywgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTgsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE5LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWIsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFjLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWUsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwNiwgMHhlMCwgMHgwZSwgMHhiYn0sCisJezB4MDYsIDB4NjAsIDB4MGUsIDB4YmJ9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCB1OCBtaTEzMjBfc29jX0luaXRTWEdBX0pQR1tdWzRdID0geworCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCisJezB4YjAsIDB4MDQsIDB4MDIsIDB4Y2N9LAorCXsweDAwLCAweDAwLCAweDMzLCAweGRkfSwKKwl7MHhiMywgMHgwMCwgMHg2NCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGIzLCAweDA1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAorCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LAorCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDA0LCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHhmZiwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweDcxLCAweGNjfSwKKwl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhjOCwgMHg5ZiwgMHgwYiwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MjAsIDB4ZGR9LAorCXsweDViLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgyMCwgMHhkZH0sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MjAsIDB4ZGR9LAorCXsweGI2LCAweDAwLCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgwMywgMHgwNSwgMHhjY30sCisJezB4YjYsIDB4MDIsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDA1LCAweDA0LCAweGNjfSwKKwl7MHhiNiwgMHgwNCwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MTIsIDB4ZjgsIDB4Y2N9LAorCXsweGI2LCAweDEzLCAweDI5LCAweGNjfSwKKwl7MHhiNiwgMHgxOCwgMHgwYSwgMHhjY30sCisJezB4YjYsIDB4MTcsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDE2LCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgyMiwgMHgxMiwgMHhjY30sCisJezB4YjYsIDB4MjMsIDB4MGIsIDB4Y2N9LAorCXsweGJmLCAweGMwLCAweDM5LCAweGNjfSwKKwl7MHhiZiwgMHhjMSwgMHgwNCwgMHhjY30sCisJezB4YmYsIDB4Y2MsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDA1LCAweDAxLCAweDc4LCAweGJifSwKKwl7MHgwNiwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MDcsIDB4MDEsIDB4NDIsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDExLCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MjEsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDIyLCAweDBkLCAweDBmLCAweGJifSwKKwl7MHgyNCwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgzOSwgMHgwMywgMHhjYSwgMHhiYn0sCisJezB4M2EsIDB4MDYsIDB4ODAsIDB4YmJ9LAorCXsweDNiLCAweDAxLCAweDUyLCAweGJifSwKKwl7MHgzYywgMHgwNSwgMHg0MCwgMHhiYn0sCisJezB4NTcsIDB4MDEsIDB4OWMsIDB4YmJ9LAorCXsweDU4LCAweDAxLCAweGVlLCAweGJifSwKKwl7MHg1OSwgMHgwMCwgMHhmMCwgMHhiYn0sCisJezB4NWEsIDB4MDEsIDB4MjAsIDB4YmJ9LAorCXsweDVjLCAweDFkLCAweDE3LCAweGJifSwKKwl7MHg1ZCwgMHgyMiwgMHgxYywgMHhiYn0sCisJezB4NjQsIDB4MWUsIDB4MWMsIDB4YmJ9LAorCXsweDViLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MjIsIDB4YTAsIDB4NzgsIDB4YmJ9LAorCXsweDIzLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyNCwgMHg3ZiwgMHgwMCwgMHhiYn0sCisJezB4MjgsIDB4ZWEsIDB4MDIsIDB4YmJ9LAorCXsweDI5LCAweDg2LCAweDdhLCAweGJifSwKKwl7MHg1ZSwgMHg1MiwgMHg0YywgMHhiYn0sCisJezB4NWYsIDB4MjAsIDB4MjQsIDB4YmJ9LAorCXsweDYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMiwgMHgwMCwgMHhlZSwgMHhiYn0sCisJezB4MDMsIDB4MzksIDB4MjMsIDB4YmJ9LAorCXsweDA0LCAweDA3LCAweDI0LCAweGJifSwKKwl7MHgwOSwgMHgwMCwgMHhjMCwgMHhiYn0sCisJezB4MGEsIDB4MDAsIDB4NzksIDB4YmJ9LAorCXsweDBiLCAweDAwLCAweDA0LCAweGJifSwKKwl7MHgwYywgMHgwMCwgMHg1YywgMHhiYn0sCisJezB4MGQsIDB4MDAsIDB4ZDksIDB4YmJ9LAorCXsweDBlLCAweDAwLCAweDUzLCAweGJifSwKKwl7MHgwZiwgMHgwMCwgMHgyMSwgMHhiYn0sCisJezB4MTAsIDB4MDAsIDB4YTQsIDB4YmJ9LAorCXsweDExLCAweDAwLCAweGU1LCAweGJifSwKKwl7MHgxNSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTYsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE3LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxOCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTksIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFhLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWMsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFkLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDA2LCAweGUwLCAweDBlLCAweGJifSwKKwl7MHgwNiwgMHg2MCwgMHgwZSwgMHhiYn0sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMSwgMHgxMywgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MTEsIDB4YmJ9LAorCXsweDA3LCAweDAwLCAweDg1LCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgyNywgMHhiYn0sCisJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDIxLCAweDgwLCAweDAwLCAweGJifSwKKwl7MHgyMiwgMHgwZCwgMHgwZiwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDU5LCAweDAwLCAweGZmLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MzksIDB4MDMsIDB4MGQsIDB4YmJ9LAorCXsweDNhLCAweDA2LCAweDFiLCAweGJifSwKKwl7MHgzYiwgMHgwMCwgMHg5NSwgMHhiYn0sCisJezB4M2MsIDB4MDQsIDB4ZGIsIDB4YmJ9LAorCXsweDU3LCAweDAyLCAweDAwLCAweGJifSwKKwl7MHg1OCwgMHgwMiwgMHg2NiwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAorCXsweDVhLCAweDAxLCAweDMzLCAweGJifSwKKwl7MHg1YywgMHgxMiwgMHgwZCwgMHhiYn0sCisJezB4NWQsIDB4MTYsIDB4MTEsIDB4YmJ9LAorCXsweDY0LCAweDVlLCAweDFjLCAweGJifSwKKwl7MHgyZiwgMHg5MCwgMHgwMCwgMHhiYn0sCisJe30KK307CitzdGF0aWMgY29uc3QgdTggbWkxMzIwX3NvY19Jbml0U1hHQVtdWzRdID0geworCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4MzAsIDB4ZGR9LAorCXsweGIzLCAweDAwLCAweDY0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAorCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhjOCwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCisJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwNCwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweGZmLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4NzEsIDB4Y2N9LAorCXsweGJjLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhjOCwgMHg5ZiwgMHgwYiwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MjAsIDB4ZGR9LAorCXsweDViLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgyMCwgMHhkZH0sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MjAsIDB4ZGR9LAorCXsweGJmLCAweGMwLCAweDI2LCAweGNjfSwKKwl7MHhiZiwgMHhjMSwgMHgwMiwgMHhjY30sCisJezB4YmYsIDB4Y2MsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDUsIDB4MDEsIDB4NzgsIDB4YmJ9LAorCXsweDA2LCAweDAwLCAweDExLCAweGJifSwKKwl7MHgwNywgMHgwMSwgMHg0MiwgMHhiYn0sCisJezB4MDgsIDB4MDAsIDB4MTEsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwKKwl7MHgyMSwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4MjIsIDB4MGQsIDB4MGYsIDB4YmJ9LAorCXsweDI0LCAweDgwLCAweDAwLCAweGJifSwKKwl7MHg1OSwgMHgwMCwgMHhmZiwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDM5LCAweDAzLCAweGNhLCAweGJifSwKKwl7MHgzYSwgMHgwNiwgMHg4MCwgMHhiYn0sCisJezB4M2IsIDB4MDEsIDB4NTIsIDB4YmJ9LAorCXsweDNjLCAweDA1LCAweDQwLCAweGJifSwKKwl7MHg1NywgMHgwMSwgMHg5YywgMHhiYn0sCisJezB4NTgsIDB4MDEsIDB4ZWUsIDB4YmJ9LAorCXsweDU5LCAweDAwLCAweGYwLCAweGJifSwKKwl7MHg1YSwgMHgwMSwgMHgyMCwgMHhiYn0sCisJezB4NWMsIDB4MWQsIDB4MTcsIDB4YmJ9LAorCXsweDVkLCAweDIyLCAweDFjLCAweGJifSwKKwl7MHg2NCwgMHgxZSwgMHgxYywgMHhiYn0sCisJezB4NWIsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgyMiwgMHhhMCwgMHg3OCwgMHhiYn0sCisJezB4MjMsIDB4YTAsIDB4NzgsIDB4YmJ9LAorCXsweDI0LCAweDdmLCAweDAwLCAweGJifSwKKwl7MHgyOCwgMHhlYSwgMHgwMiwgMHhiYn0sCisJezB4MjksIDB4ODYsIDB4N2EsIDB4YmJ9LAorCXsweDVlLCAweDUyLCAweDRjLCAweGJifSwKKwl7MHg1ZiwgMHgyMCwgMHgyNCwgMHhiYn0sCisJezB4NjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDAyLCAweDAwLCAweGVlLCAweGJifSwKKwl7MHgwMywgMHgzOSwgMHgyMywgMHhiYn0sCisJezB4MDQsIDB4MDcsIDB4MjQsIDB4YmJ9LAorCXsweDA5LCAweDAwLCAweGMwLCAweGJifSwKKwl7MHgwYSwgMHgwMCwgMHg3OSwgMHhiYn0sCisJezB4MGIsIDB4MDAsIDB4MDQsIDB4YmJ9LAorCXsweDBjLCAweDAwLCAweDVjLCAweGJifSwKKwl7MHgwZCwgMHgwMCwgMHhkOSwgMHhiYn0sCisJezB4MGUsIDB4MDAsIDB4NTMsIDB4YmJ9LAorCXsweDBmLCAweDAwLCAweDIxLCAweGJifSwKKwl7MHgxMCwgMHgwMCwgMHhhNCwgMHhiYn0sCisJezB4MTEsIDB4MDAsIDB4ZTUsIDB4YmJ9LAorCXsweDE1LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxNiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTcsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE4LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxOSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWEsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFiLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYywgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWQsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFlLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCisJezB4MDYsIDB4ZTAsIDB4MGUsIDB4YmJ9LAorCXsweDA2LCAweDYwLCAweDBlLCAweGJifSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDA1LCAweDAxLCAweDEzLCAweGJifSwKKwl7MHgwNiwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MDcsIDB4MDAsIDB4ODUsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDI3LCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MjEsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDIyLCAweDBkLCAweDBmLCAweGJifSwKKwl7MHgyNCwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgzOSwgMHgwMywgMHgwZCwgMHhiYn0sCisJezB4M2EsIDB4MDYsIDB4MWIsIDB4YmJ9LAorCXsweDNiLCAweDAwLCAweDk1LCAweGJifSwKKwl7MHgzYywgMHgwNCwgMHhkYiwgMHhiYn0sCisJezB4NTcsIDB4MDIsIDB4MDAsIDB4YmJ9LAorCXsweDU4LCAweDAyLCAweDY2LCAweGJifSwKKwl7MHg1OSwgMHgwMCwgMHhmZiwgMHhiYn0sCisJezB4NWEsIDB4MDEsIDB4MzMsIDB4YmJ9LAorCXsweDVjLCAweDEyLCAweDBkLCAweGJifSwKKwl7MHg1ZCwgMHgxNiwgMHgxMSwgMHhiYn0sCisJezB4NjQsIDB4NWUsIDB4MWMsIDB4YmJ9LAorCXt9Cit9Owogc3RhdGljIGNvbnN0IF9fdTggcG8zMTMwX2dhbW1hWzE3XSA9IHsKIAkweDAwLCAweDEzLCAweDM4LCAweDU5LCAweDc5LCAweDkyLCAweGE3LCAweGI5LCAweGM4LAogCTB4ZDQsIDB4ZGYsIDB4ZTcsIDB4ZWUsIDB4ZjQsIDB4ZjksIDB4ZmMsIDB4ZmYKQEAgLTE3NjQsMjYgKzI2MzMsNDMgQEAKIH07CiAKIHN0cnVjdCBzZW5zb3JfaW5mbyB7Ci0JaW50IHNlbnNvcklkOwotCV9fdTggSTJjQWRkOwotCV9fdTggSWRBZGQ7Ci0JX191MTYgVnBJZDsKLQlfX3U4IG0xOwotCV9fdTggbTI7Ci0JX191OCBvcDsKLQl9OworCXM4IHNlbnNvcklkOworCXU4IEkyY0FkZDsKKwl1OCBJZEFkZDsKKwl1MTYgVnBJZDsKKwl1OCBtMTsKKwl1OCBtMjsKKwl1OCBvcDsKK307CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Vuc29yX2luZm8gc2Vuc29yX2luZm9fZGF0YVtdID0gewogLyogICAgICBzZW5zb3JJZCwgICAgICAgICBJMmNBZGQsCUlkQWRkLCAgVnBJZCwgIG0xLCAgICBtMiwgIG9wICovCi0Je1NFTlNPUl9IVjcxMzFSLCAgICAweDgwIHwgMHgxMSwgMHgwMCwgMHgwMjA5LCAweDI0LCAweDI1LCAweDAxfSwKLQl7U0VOU09SX09WNzY2MCwgICAgIDB4ODAgfCAweDIxLCAweDBhLCAweDc2NjAsIDB4MjYsIDB4MjYsIDB4MDV9LAorCXstMSwJCSAgICAweDgwIHwgMHgzMCwgMHgwYSwgMHgwMDAwLCAweDI1LCAweDI0LCAweDA1fSwKKwl7LTEsCQkgICAgMHg4MCB8IDB4MjAsIDB4ODIsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiAodGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpICovCisvKgl7LTEsCQkgICAgMHg4MCB8IDB4MjAsIDB4ODMsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sICovCiAJe1NFTlNPUl9QTzMxMzBOQywgICAweDgwIHwgMHg3NiwgMHgwMCwgMHgzMTMwLCAweDI0LCAweDI1LCAweDAxfSwKLQl7U0VOU09SX01JMTMyMCwgICAgIDB4ODAgfCAweGM4LCAweDAwLCAweDE0OGMsIDB4NjQsIDB4NjUsIDB4MDF9LAotCXtTRU5TT1JfT1Y3NjcwLCAgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4NzY3MywgMHg2NiwgMHg2NywgMHgwNX0sCiAJe1NFTlNPUl9NSTEzMTBfU09DLCAweDgwIHwgMHg1ZCwgMHgwMCwgMHgxNDNhLCAweDI0LCAweDI1LCAweDAxfSwKIC8qICh0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvcikgKi8KIC8qCXtTRU5TT1JfTUkwMzYwLAkgICAgMHg4MCB8IDB4NWQsIDB4MDAsIDB4ODI0MywgMHgyNCwgMHgyNSwgMHgwMX0sICovCisJe1NFTlNPUl9IVjcxMzFSLCAgICAweDgwIHwgMHgxMSwgMHgwMCwgMHgwMjA5LCAweDI0LCAweDI1LCAweDAxfSwKKwl7LTEsCQkgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4MDAwMCwgMHgyMSwgMHgyMCwgMHgwNX0sCisJey0xLAkJICAgIDB4ODAgfCAweDQwLCAweDAwLCAweDAwMDAsIDB4MjAsIDB4MjIsIDB4MDV9LAorCXtTRU5TT1JfT1Y3NjYwLCAgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4NzY2MCwgMHgyNiwgMHgyNiwgMHgwNX0sCisvKgl7U0VOU09SX1BPMzEzME5DLCAgIDB4ODAgfCAweDc2LCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LCAqLworCXstMSwJCSAgICAweDgwIHwgMHg2ZSwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qCXtTRU5TT1JfTUkxMzEwX1NPQywgMHg4MCB8IDB4NWQsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sICovCisvKgl7LTEsCQkgICAgMHg4MCB8IDB4MzAsIDB4MGEsIDB4MDAwMCwgMHgyNSwgMHgyNCwgMHgwNX0sICovCisJey0xLAkJICAgIDB4ODAgfCAweDExLCAweDM5LCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAogCXtTRU5TT1JfUE8xMjAwLCAgICAgMHg4MCB8IDB4NWMsIDB4MDAsIDB4MTIwMCwgMHg2NywgMHg2NywgMHgwMX0sCisJey0xLAkJICAgIDB4ODAgfCAweDJkLCAweDAwLCAweDAwMDAsIDB4NjUsIDB4NjcsIDB4MDF9LAorCXstMSwJCSAgICAweDgwIHwgMHg2ZSwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKwl7LTEsCQkgICAgMHg4MCB8IDB4NTYsIDB4MDEsIDB4MDAwMCwgMHg2NCwgMHg2NywgMHgwMX0sCisJe1NFTlNPUl9NSTEzMjBfU09DLCAweDgwIHwgMHg0OCwgMHgwMCwgMHgxNDhjLCAweDY0LCAweDY3LCAweDAxfSwKKy8qZml4bWU6IHByZXZpb3VzbHkgZGV0ZWN0ZWQ/Ki8KKwl7U0VOU09SX01JMTMyMCwgICAgIDB4ODAgfCAweDQ4LCAweDAwLCAweDE0OGMsIDB4NjQsIDB4NjUsIDB4MDF9LAorLypmaXhtZTogbm90IGluIHRoZSBtcy13aW4gcHJvYmUgLSBtYXkgYmUgZm91bmQgYmVmb3JlPyovCisJe1NFTlNPUl9PVjc2NzAsICAgICAweDgwIHwgMHgyMSwgMHgwYSwgMHg3NjczLCAweDY2LCAweDY3LCAweDA1fSwKIH07CiAKIC8qIHJlYWQgJ2xlbicgYnl0ZXMgaW4gZ3NwY2FfZGV2LT51c2JfYnVmICovCkBAIC0xODE0LDUxICsyNzAwLDQ5IEBACiAJCQk1MDApOwogfQogCi1zdGF0aWMgdm9pZCByZWFkX3NlbnNvcl9yZWdpc3RlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQkJX191MTYgYWRkcmVzcywgX191MTYgKnZhbHVlKQorc3RhdGljIHUxNiByZWFkX3NlbnNvcl9yZWdpc3RlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkJdTE2IGFkZHJlc3MpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCV9fdTggbGRhdGEsIG1kYXRhLCBoZGF0YTsKKwl1OCBsZGF0YSwgbWRhdGEsIGhkYXRhOwogCWludCByZXRyeSA9IDUwOwogCi0JKnZhbHVlID0gMDsKLQogCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzNmLCAxKTsKLQkvKlBERUJVRyhEX1BST0JFLCAiIEkyYyBCdXMgQnVzeSBXYWl0ICAweCUwMlggIiwgdG1wdmFsdWUpOyAqLwogCWlmICghKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSAmIDB4MDIpKSB7Ci0JCVBERUJVRyhEX0VSUiwgIkkyYyBCdXMgQnVzeSBXYWl0ICVkIiwKLQkJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSAmIDB4MDIpOwotCQlyZXR1cm47CisJCVBERUJVRyhEX0VSUiwgIkkyYyBCdXMgQnVzeSBXYWl0ICUwMngiLAorCQkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKKwkJcmV0dXJuIDA7CiAJfQogCXJlZ193KGRldiwgMHhhMCwgYWRkcmVzcywgMHhiMzNhKTsKIAlyZWdfdyhkZXYsIDB4YTAsIDB4MDIsIDB4YjMzOSk7CiAKLQlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzYiwgMSk7Ci0Jd2hpbGUgKHJldHJ5LS0gJiYgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKSB7CisJZG8gewogCQlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzYiwgMSk7Ci0vKgkJUERFQlVHKERfUFJPQkUsICJSZWFkIGFnYWluIDB4YjMzYiAlZCIsIHRtcHZhbHVlKTsgKi8KLQkJbXNsZWVwKDEpOwotCX0KKwkJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9PSAweDAwKQorCQkJYnJlYWs7CisJCW1zbGVlcCg0MCk7CisJfSB3aGlsZSAoLS1yZXRyeSA+PSAwKTsKKwogCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzNlLCAxKTsKIAlsZGF0YSA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKIAlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzZCwgMSk7CiAJbWRhdGEgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CiAJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGIzM2MsIDEpOwogCWhkYXRhID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwotCVBERUJVRyhEX1BST0JFLCAiUmVhZCBTZW5zb3IgJTAyeCUwMnggJTAyeCIsCi0JCWhkYXRhLCBtZGF0YSwgbGRhdGEpOworCWlmIChoZGF0YSAhPSAwICYmIG1kYXRhICE9IDAgJiYgbGRhdGEgIT0gMCkKKwkJUERFQlVHKERfUFJPQkUsICJSZWFkIFNlbnNvciAlMDJ4JTAyeCAlMDJ4IiwKKwkJCWhkYXRhLCBtZGF0YSwgbGRhdGEpOwogCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzM0LCAxKTsKIAlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzBdID09IDB4MDIpCi0JCSp2YWx1ZSA9IChoZGF0YSA8PCA4KSArIG1kYXRhOwotCWVsc2UKLQkJKnZhbHVlID0gaGRhdGE7CisJCXJldHVybiAoaGRhdGEgPDwgOCkgKyBtZGF0YTsKKwlyZXR1cm4gaGRhdGE7CiB9CiAKIHN0YXRpYyBpbnQgdmMwMzJ4X3Byb2JlX3NlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCBpOwotCV9fdTE2IHZhbHVlOworCXUxNiB2YWx1ZTsKIAljb25zdCBzdHJ1Y3Qgc2Vuc29yX2luZm8gKnB0c2Vuc29yX2luZm87CiAKIAlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YmZjZiwgMSk7CkBAIC0xODcyLDQ4ICsyNzU2LDUxIEBACiAJCXJlZ193KGRldiwgMHhhMCwgMHgwYywgMHhiMzA5KTsKIAkJcmVnX3coZGV2LCAweGEwLCBwdHNlbnNvcl9pbmZvLT5JMmNBZGQsIDB4YjMzNSk7CiAJCXJlZ193KGRldiwgMHhhMCwgcHRzZW5zb3JfaW5mby0+b3AsIDB4YjMwMSk7Ci0JCXJlYWRfc2Vuc29yX3JlZ2lzdGVyKGdzcGNhX2RldiwgcHRzZW5zb3JfaW5mby0+SWRBZGQsICZ2YWx1ZSk7Ci0JCWlmICh2YWx1ZSA9PSBwdHNlbnNvcl9pbmZvLT5WcElkKQotCQkJcmV0dXJuIHB0c2Vuc29yX2luZm8tPnNlbnNvcklkOworCQl2YWx1ZSA9IHJlYWRfc2Vuc29yX3JlZ2lzdGVyKGdzcGNhX2RldiwgcHRzZW5zb3JfaW5mby0+SWRBZGQpOworCQlpZiAodmFsdWUgPT0gMCAmJiBwdHNlbnNvcl9pbmZvLT5JZEFkZCA9PSAweDgyKQorCQkJdmFsdWUgPSByZWFkX3NlbnNvcl9yZWdpc3Rlcihnc3BjYV9kZXYsIDB4ODMpOworCQlpZiAodmFsdWUgIT0gMCkgeworCQkJUERFQlVHKERfRVJSfERfUFJPQkUsICJTZW5zb3IgSUQgJTA0eCAoJWQpIiwKKwkJCQl2YWx1ZSwgaSk7CisJCQlpZiAodmFsdWUgPT0gcHRzZW5zb3JfaW5mby0+VnBJZCkKKwkJCQlyZXR1cm4gcHRzZW5zb3JfaW5mby0+c2Vuc29ySWQ7CiAKLQkJLyogc3BlY2lhbCBjYXNlIGZvciBNSTAzNjAgKi8KLQkJaWYgKHB0c2Vuc29yX2luZm8tPnNlbnNvcklkID09IFNFTlNPUl9NSTEzMTBfU09DCi0JCSAgICAmJiB2YWx1ZSA9PSAweDgyNDMpCi0JCQlyZXR1cm4gU0VOU09SX01JMDM2MDsKKwkJCXN3aXRjaCAodmFsdWUpIHsKKwkJCWNhc2UgMHg3NjczOgorCQkJCXJldHVybiBTRU5TT1JfT1Y3NjcwOworCQkJY2FzZSAweDgyNDM6CisJCQkJcmV0dXJuIFNFTlNPUl9NSTAzNjA7CisJCQl9CisvKmZpeG1lOiBzaG91bGQgcmV0dXJuIGhlcmUqLworCQl9CiAJfQogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIF9fdTggaTJjX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCV9fdTggcmVnLCBjb25zdCBfX3U4ICp2YWwsIF9fdTggc2l6ZSkKK3N0YXRpYyB2b2lkIGkyY193cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCByZWcsIGNvbnN0IHU4ICp2YWwsCisJCQl1OCBzaXplKQkJLyogMSBvciAyICovCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCByZXRyeTsKIAotCWlmIChzaXplID4gMyB8fCBzaXplIDwgMSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGIzM2YsIDEpOworLypmaXhtZTpzaG91bGQgY2hlY2sgaWYgKCEoZ3NwY2FfZGV2LT51c2JfYnVmWzBdICYgMHgwMikpIGVycm9yKi8KIAlyZWdfdyhkZXYsIDB4YTAsIHNpemUsIDB4YjMzNCk7CiAJcmVnX3coZGV2LCAweGEwLCByZWcsIDB4YjMzYSk7Ci0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQlyZWdfdyhkZXYsIDB4YTAsIHZhbFswXSwgMHhiMzM2KTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlyZWdfdyhkZXYsIDB4YTAsIHZhbFswXSwgMHhiMzM2KTsKKwlyZWdfdyhkZXYsIDB4YTAsIHZhbFswXSwgMHhiMzM2KTsKKwlpZiAoc2l6ZSA+IDEpCiAJCXJlZ193KGRldiwgMHhhMCwgdmFsWzFdLCAweGIzMzcpOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCXJlZ193KGRldiwgMHhhMCwgdmFsWzBdLCAweGIzMzYpOwotCQlyZWdfdyhkZXYsIDB4YTAsIHZhbFsxXSwgMHhiMzM3KTsKLQkJcmVnX3coZGV2LCAweGEwLCB2YWxbMl0sIDB4YjMzOCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJlZ193KGRldiwgMHhhMCwgMHgwMSwgMHhiMzM0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCXJlZ193KGRldiwgMHhhMCwgMHgwMSwgMHhiMzM5KTsKLQlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzYiwgMSk7Ci0JcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9PSAwOworCXJldHJ5ID0gNDsKKwlkbyB7CisJCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzNiLCAxKTsKKwkJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9PSAwKQorCQkJYnJlYWs7CisJCW1zbGVlcCgyMCk7CisJfSB3aGlsZSAoLS1yZXRyeSA+IDApOworCWlmIChyZXRyeSA8PSAwKQorCQlQREVCVUcoRF9FUlIsICJpMmNfd3JpdGUgZmFpbGVkIik7CiB9CiAKIHN0YXRpYyB2b2lkIHB1dF90YWJfdG9fcmVnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKQEAgLTE5MzgsNyArMjgyNSw3IEBACiAJCQlyZXR1cm47CiAJCWNhc2UgMHhjYzoJCQkvKiBub3JtYWwgd3JpdGUgKi8KIAkJCXJlZ193KGRldiwgMHhhMCwgZGF0YVtpXVsyXSwKLQkJCQkJKChkYXRhW2ldWzBdKTw8OCkgfCBkYXRhW2ldWzFdKTsKKwkJCQkJKGRhdGFbaV1bMF0pIDw8IDggfCBkYXRhW2ldWzFdKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4YWE6CQkJLyogaTJjIG9wICovCiAJCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCBkYXRhW2ldWzFdLCAmZGF0YVtpXVsyXSwgMSk7CkBAIC0xOTU1LDE5ICsyODQyLDYgQEAKIAkvKm5vdCByZWFjaGVkKi8KIH0KIAotLyoKLSAiR2FtbWFUIj1oZXg6MDQsMTcsMzEsNGYsNmEsODMsOTksYWQsYmYsY2UsZGEsZTUsZWUsZjUsZmIsZmYsZmYKLSAiTWF0cml4VCI9aGV4OjYwLGY5LGU1LGU3LDUwLDA1LGYzLGU2LDY2Ci0gKi8KLQotc3RhdGljIHZvaWQgdmMwMzIxX3Jlc2V0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgwMCwgMHhiMDRkKTsKLQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgwMSwgMHhiMzAxKTsKLQltc2xlZXAoMTAwKTsKLQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgwMSwgMHhiMDAzKTsKLQltc2xlZXAoMTAwKTsKLX0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLwogc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LApAQCAtMTk3OSwxMCArMjg1Myw3IEBACiAJaW50IHNlbnNvcjsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDI7CiAJc2QtPmJyaWRnZSA9IGlkLT5kcml2ZXJfaW5mbzsKLQotCXZjMDMyMV9yZXNldChnc3BjYV9kZXYpOwogCXNlbnNvciA9IHZjMDMyeF9wcm9iZV9zZW5zb3IoZ3NwY2FfZGV2KTsKIAlzd2l0Y2ggKHNlbnNvcikgewogCWNhc2UgLTE6CkBAIC0yMDAxLDYgKzI4NzIsOSBAQAogCWNhc2UgU0VOU09SX01JMTMyMDoKIAkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBNSTEzMjAiKTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfTUkxMzIwX1NPQzoKKwkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBNSTEzMjBfU09DIik7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX09WNzY2MDoKIAkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBPVjc2NjAiKTsKIAkJYnJlYWs7CkBAIC0yMDIwLDEyICsyODk0LDIzIEBACiAJCWNhbS0+Y2FtX21vZGUgPSB2YzAzMjFfbW9kZTsKIAkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZjMDMyMV9tb2RlKTsKIAl9IGVsc2UgewotCQlpZiAoc2Vuc29yICE9IFNFTlNPUl9QTzEyMDApIHsKLQkJCWNhbS0+Y2FtX21vZGUgPSB2YzAzMjNfbW9kZTsKLQkJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2YzAzMjNfbW9kZSk7Ci0JCX0gZWxzZSB7CisJCXN3aXRjaCAoc2Vuc29yKSB7CisJCWNhc2UgU0VOU09SX1BPMTIwMDoKIAkJCWNhbS0+Y2FtX21vZGUgPSBzdmdhX21vZGU7CiAJCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc3ZnYV9tb2RlKTsKKwkJCWJyZWFrOworCQljYXNlIFNFTlNPUl9NSTEzMTBfU09DOgorCQkJY2FtLT5jYW1fbW9kZSA9IHZjMDMyM19tb2RlOworCQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZjMDMyM19tb2RlKTsKKwkJCWJyZWFrOworCQljYXNlIFNFTlNPUl9NSTEzMjBfU09DOgorCQkJY2FtLT5jYW1fbW9kZSA9IGJpX21vZGU7CisJCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoYmlfbW9kZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNhbS0+Y2FtX21vZGUgPSB2YzAzMjNfbW9kZTsKKwkJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2YzAzMjNfbW9kZSkgLSAxOworCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTIwNjEsNyArMjk0Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCB0aW1lICovCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJcmV0dXJuIDA7CkBAIC0yMTI0LDkgKzMwMDksMTggQEAKIHN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwljb25zdCBfX3U4ICgqaW5pdClbNF07CiAJY29uc3QgX191OCAqR2FtbWFUID0gTlVMTDsKIAljb25zdCBfX3U4ICpNYXRyaXhUID0gTlVMTDsKIAlpbnQgbW9kZTsKKwlzdGF0aWMgY29uc3QgdTggKCptaTEzMjBfc29jX2luaXRbXSlbNF0gPSB7CisJCW1pMTMyMF9zb2NfSW5pdFNYR0EsCisJCW1pMTMyMF9zb2NfSW5pdFNYR0FfSlBHLAorCQltaTEzMjBfc29jX0luaXRWR0EsCisJCW1pMTMyMF9zb2NfSW5pdFZHQV9KUEcsCisJCW1pMTMyMF9zb2NfSW5pdFFWR0EsCisJCW1pMTMyMF9zb2NfSW5pdFFWR0FfSlBHCisJfTsKIAogCS8qIEFzc3VtZSBzdGFydCB1c2UgdGhlIGdvb2QgcmVzb2x1dGlvbiBmcm9tIGdzcGNhX2Rldi0+bW9kZSAqLwogCWlmIChzZC0+YnJpZGdlID09IEJSSURHRV9WQzAzMjEpIHsKQEAgLTIxMzQsNiArMzAyOCwxMyBAQAogCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHhmZiwgMHhiZmVkKTsKIAkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4ZmYsIDB4YmZlZSk7CiAJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweGZmLCAweGJmZWYpOworCQlzZC0+aW1hZ2Vfb2Zmc2V0ID0gNDY7CisJfSBlbHNlIHsKKwkJaWYgKGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlW2dzcGNhX2Rldi0+Y3Vycl9tb2RlXS5waXhlbGZvcm1hdAorCQkJCT09IFY0TDJfUElYX0ZNVF9KUEVHKQorCQkJc2QtPmltYWdlX29mZnNldCA9IDA7CisJCWVsc2UKKwkJCXNkLT5pbWFnZV9vZmZzZXQgPSAzMjsKIAl9CiAKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CkBAIC0yMTQxLDExNSArMzA0Miw4NyBAQAogCWNhc2UgU0VOU09SX0hWNzEzMVI6CiAJCUdhbW1hVCA9IGh2NzEzMXJfZ2FtbWE7CiAJCU1hdHJpeFQgPSBodjcxMzFyX21hdHJpeDsKLQkJaWYgKG1vZGUpIHsKLQkJCS8qIDMyMHgyNDAgKi8KLQkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIGh2NzEzMXJfaW5pdFFWR0FfZGF0YSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiA2NDB4NDgwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBodjcxMzFyX2luaXRWR0FfZGF0YSk7Ci0JCX0KKwkJaWYgKG1vZGUpCisJCQlpbml0ID0gaHY3MTMxcl9pbml0UVZHQV9kYXRhOwkvKiAzMjB4MjQwICovCisJCWVsc2UKKwkJCWluaXQgPSBodjcxMzFyX2luaXRWR0FfZGF0YTsJLyogNjQweDQ4MCAqLwogCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjc2NjA6CiAJCUdhbW1hVCA9IG92NzY2MF9nYW1tYTsKIAkJTWF0cml4VCA9IG92NzY2MF9tYXRyaXg7Ci0JCWlmIChtb2RlKSB7Ci0JCQkvKiAzMjB4MjQwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBvdjc2NjBfaW5pdFFWR0FfZGF0YSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiA2NDB4NDgwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBvdjc2NjBfaW5pdFZHQV9kYXRhKTsKLQkJfQorCQlpZiAobW9kZSkKKwkJCWluaXQgPSBvdjc2NjBfaW5pdFFWR0FfZGF0YTsJLyogMzIweDI0MCAqLworCQllbHNlCisJCQlpbml0ID0gb3Y3NjYwX2luaXRWR0FfZGF0YTsJLyogNjQweDQ4MCAqLwogCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjc2NzA6CiAJCS8qR2FtbWFUID0gb3Y3NjYwX2dhbW1hOyAqLwogCQkvKk1hdHJpeFQgPSBvdjc2NjBfbWF0cml4OyAqLwotCQlpZiAobW9kZSkgewotCQkJLyogMzIweDI0MCAqLwotCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2Rldiwgb3Y3NjcwX2luaXRRVkdBX0pQRyk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiA2NDB4NDgwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBvdjc2NzBfaW5pdFZHQV9KUEcpOwotCQl9CisJCWlmIChtb2RlKQorCQkJaW5pdCA9IG92NzY3MF9pbml0UVZHQV9KUEc7CS8qIDMyMHgyNDAgKi8KKwkJZWxzZQorCQkJaW5pdCA9IG92NzY3MF9pbml0VkdBX0pQRzsJLyogNjQweDQ4MCAqLwogCQlicmVhazsKIAljYXNlIFNFTlNPUl9NSTAzNjA6CiAJCUdhbW1hVCA9IG1pMTMyMF9nYW1tYTsKIAkJTWF0cml4VCA9IG1pMDM2MF9tYXRyaXg7Ci0JCWlmIChtb2RlKSB7Ci0JCQkvKiAzMjB4MjQwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBtaTAzNjBfaW5pdFFWR0FfSlBHKTsKLQkJfSBlbHNlIHsKLQkJCS8qIDY0MHg0ODAgKi8KLQkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIG1pMDM2MF9pbml0VkdBX0pQRyk7Ci0JCX0KKwkJaWYgKG1vZGUpCisJCQlpbml0ID0gbWkwMzYwX2luaXRRVkdBX0pQRzsJLyogMzIweDI0MCAqLworCQllbHNlCisJCQlpbml0ID0gbWkwMzYwX2luaXRWR0FfSlBHOwkvKiA2NDB4NDgwICovCiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX01JMTMxMF9TT0M6Ci0JCWlmIChtb2RlKSB7Ci0JCQkvKiAzMjB4MjQwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBtaTEzMTBfc29jaW5pdFFWR0FfSlBHKTsKLQkJfSBlbHNlIHsKLQkJCS8qIDY0MHg0ODAgKi8KLQkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIG1pMTMxMF9zb2Npbml0VkdBX0pQRyk7CisJCUdhbW1hVCA9IG1pMTMyMF9nYW1tYTsKKwkJTWF0cml4VCA9IG1pMTMyMF9tYXRyaXg7CisJCXN3aXRjaCAobW9kZSkgeworCQljYXNlIDE6CisJCQlpbml0ID0gbWkxMzEwX3NvY2luaXRRVkdBX0pQRzsJLyogMzIweDI0MCAqLworCQkJYnJlYWs7CisJCWNhc2UgMDoKKwkJCWluaXQgPSBtaTEzMTBfc29jaW5pdFZHQV9KUEc7CS8qIDY0MHg0ODAgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaW5pdCA9IG1pMTMxMF9zb2NfSW5pdFNYR0FfSlBHOwkvKiAxMjgweDEwMjQgKi8KKwkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX01JMTMyMDoKIAkJR2FtbWFUID0gbWkxMzIwX2dhbW1hOwogCQlNYXRyaXhUID0gbWkxMzIwX21hdHJpeDsKLQkJaWYgKG1vZGUpIHsKLQkJCS8qIDMyMHgyNDAgKi8KLQkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIG1pMTMyMF9pbml0UVZHQV9kYXRhKTsKLQkJfSBlbHNlIHsKLQkJCS8qIDY0MHg0ODAgKi8KLQkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIG1pMTMyMF9pbml0VkdBX2RhdGEpOwotCQl9CisJCWlmIChtb2RlKQorCQkJaW5pdCA9IG1pMTMyMF9pbml0UVZHQV9kYXRhOwkvKiAzMjB4MjQwICovCisJCWVsc2UKKwkJCWluaXQgPSBtaTEzMjBfaW5pdFZHQV9kYXRhOwkvKiA2NDB4NDgwICovCisJCWJyZWFrOworCWNhc2UgU0VOU09SX01JMTMyMF9TT0M6CisJCUdhbW1hVCA9IG1pMTMyMF9nYW1tYTsKKwkJTWF0cml4VCA9IG1pMTMyMF9tYXRyaXg7CisJCWluaXQgPSBtaTEzMjBfc29jX2luaXRbbW9kZV07CiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX1BPMzEzME5DOgogCQlHYW1tYVQgPSBwbzMxMzBfZ2FtbWE7CiAJCU1hdHJpeFQgPSBwbzMxMzBfbWF0cml4OwotCQlpZiAobW9kZSkgewotCQkJLyogMzIweDI0MCAqLwotCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG8zMTMwX2luaXRRVkdBX2RhdGEpOwotCQl9IGVsc2UgewotCQkJLyogNjQweDQ4MCAqLwotCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG8zMTMwX2luaXRWR0FfZGF0YSk7Ci0JCX0KLQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG8zMTMwX3J1bmRhdGEpOwotCQlicmVhazsKLQljYXNlIFNFTlNPUl9QTzEyMDA6Ci0JCUdhbW1hVCA9IHBvMTIwMF9nYW1tYTsKLQkJTWF0cml4VCA9IHBvMTIwMF9tYXRyaXg7Ci0JCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHBvMTIwMF9pbml0VkdBX2RhdGEpOworCQlpZiAobW9kZSkKKwkJCWluaXQgPSBwbzMxMzBfaW5pdFFWR0FfZGF0YTsJLyogMzIweDI0MCAqLworCQllbHNlCisJCQlpbml0ID0gcG8zMTMwX2luaXRWR0FfZGF0YTsJLyogNjQweDQ4MCAqLworCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBpbml0KTsKKwkJaW5pdCA9IHBvMzEzMF9ydW5kYXRhOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlQREVCVUcoRF9QUk9CRSwgIkRhbW5lZCAhISBubyBzZW5zb3IgZm91bmQgQnllIik7Ci0JCXJldHVybiAtRU1FRElVTVRZUEU7CisvKgljYXNlIFNFTlNPUl9QTzEyMDA6ICovCisJCUdhbW1hVCA9IHBvMTIwMF9nYW1tYTsKKwkJTWF0cml4VCA9IHBvMTIwMF9tYXRyaXg7CisJCWluaXQgPSBwbzEyMDBfaW5pdFZHQV9kYXRhOworCQlicmVhazsKIAl9CisJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgaW5pdCk7CiAJaWYgKEdhbW1hVCAmJiBNYXRyaXhUKSB7CiAJCXB1dF90YWJfdG9fcmVnKGdzcGNhX2RldiwgR2FtbWFULCAxNywgMHhiODRhKTsKIAkJcHV0X3RhYl90b19yZWcoZ3NwY2FfZGV2LCBHYW1tYVQsIDE3LCAweGI4NWIpOwogCQlwdXRfdGFiX3RvX3JlZyhnc3BjYV9kZXYsIEdhbW1hVCwgMTcsIDB4Yjg2Yyk7CiAJCXB1dF90YWJfdG9fcmVnKGdzcGNhX2RldiwgTWF0cml4VCwgOSwgMHhiODJjKTsKIAotCQkvKiBTZWVtIFNIQVJQTkVTUyAqLwotCQkvKgotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHg4MCwgMHhiODBhKTsKLQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4ZmYsIDB4YjgwYik7Ci0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweGZmLCAweGI4MGUpOwotCQkqLwotCQkvKiBhbGwgMHg0MCA/Pz8gZG8gbm90aGluZwotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHg0MCwgMHhiODIyKTsKLQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4NDAsIDB4YjgyMyk7Ci0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweDQwLCAweGI4MjQpOwotCQkqLwotCQkvKiBPbmx5IHdvcmtzIGZvciBIVjcxMzFSID8/Ci0JCXJlZ19yIChnc3BjYV9kZXYsIDB4YTEsIDB4Yjg4MSwgMSk7Ci0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweGZlMDEsIDB4Yjg4MSk7Ci0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweDc5LCAweGI4MDEpOwotCQkqLwotCQkvKiBvbmx5IGh2NzEzMXIgZXQgb3Y3NjYwCi0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweDIwLCAweGI4MjcpOwotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHhmZiwgMHhiODI2KTsgKiBJU1BfR0FJTiA4MAotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgyMywgMHhiODAwKTsgKiBJU1AgQ1RSTF9CQVMKLQkJKi8KIAkJLyogc2V0IHRoZSBsZWQgb24gMHgwODkyIDB4MDg5NiAqLwogCQlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfUE8xMjAwKSB7CiAJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHg4OSwgMHhmZmZmLCAweGZkZmYpOwpAQCAtMjI5NiwxMiArMzE2OSw4IEBACiAJCQkidmMwMzJ4IGhlYWRlciBwYWNrZXQgZm91bmQgbGVuICVkIiwgbGVuKTsKIAkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsCiAJCQkJCQlkYXRhLCAwKTsKLQkJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1ZDMDMyMSkgewotI2RlZmluZSBWQ0hEUlNaIDQ2Ci0JCQlkYXRhICs9IFZDSERSU1o7Ci0JCQlsZW4gLT0gVkNIRFJTWjsKLSN1bmRlZiBWQ0hEUlNaCi0JCX0KKwkJZGF0YSArPSBzZC0+aW1hZ2Vfb2Zmc2V0OworCQlsZW4gLT0gc2QtPmltYWdlX29mZnNldDsKIAkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwKIAkJCQlkYXRhLCBsZW4pOwogCQlyZXR1cm47CkBAIC0yMzk5LDcgKzMyNjgsOCBAQAogCQljYXNlIDE6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV81MEhaICovCiAJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIjUwIEh6Iik7CiAJCQlyZXR1cm4gMDsKLQkJY2FzZSAyOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNjBIWiAqLworCQlkZWZhdWx0OgorLyoJCWNhc2UgMjoJCSAqIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFogKi8KIAkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNjAgSHoiKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0yNDI0LDYgKzMyOTQsNyBAQAogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KIHN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDViKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyM30sCiAJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4OTIpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVkMwMzIxfSwKIAl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDg5NiksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjF9LAogCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwODk3KSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyMX0sCkBAIC0yNDMyLDYgKzMzMDMsNyBAQAogCXtVU0JfREVWSUNFKDB4MGFjOCwgMHgwMzI4KSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyMX0sCiAJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweGMwMDEpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVkMwMzIxfSwKIAl7VVNCX0RFVklDRSgweDBhYzgsIDB4YzAwMiksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjF9LAorCXtVU0JfREVWSUNFKDB4MTViOCwgMHg2MDAxKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyM30sCiAJe1VTQl9ERVZJQ0UoMHgxNWI4LCAweDYwMDIpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVkMwMzIzfSwKIAl7VVNCX0RFVklDRSgweDE3ZWYsIDB4NDgwMiksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjN9LAogCXt9CkBAIC0yNDYwLDggKzMzMzIsMTEgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCmluZGV4IGVjMmE1M2QuLjRmZTAxZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNkZWZpbmUgTU9EVUxFX05BTUUgInpjM3h4IgogCiAjaW5jbHVkZSAiZ3NwY2EuaCIKKyNpbmNsdWRlICJqcGVnLmgiCiAKIE1PRFVMRV9BVVRIT1IoIk1pY2hlbCBYaGFhcmQgPG14aGFhcmRAdXNlcnMuc291cmNlZm9yZ2UubmV0PiwgIgogCQkiU2VyZ2UgQS4gU3VjaGtvdiA8U2VyZ2UuQS5TQHRvY2hrYS5ydT4iKTsKQEAgLTMxLDcgKzMyLDcgQEAKIAogc3RhdGljIGludCBmb3JjZV9zZW5zb3IgPSAtMTsKIAotI2luY2x1ZGUgImpwZWcuaCIKKyNkZWZpbmUgUVVBTlRfVkFMIDEJCS8qIHF1YW50aXphdGlvbiB0YWJsZSAqLwogI2luY2x1ZGUgInpjM3h4LXJlZy5oIgogCiAvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLwpAQCAtNDQsMzAgKzQ1LDM2IEBACiAJX191OCBhdXRvZ2FpbjsKIAlfX3U4IGxpZ2h0ZnJlcTsKIAlfX3U4IHNoYXJwbmVzczsKKwl1OCBxdWFsaXR5OwkJCS8qIGltYWdlIHF1YWxpdHkgKi8KKyNkZWZpbmUgUVVBTElUWV9NSU4gNDAKKyNkZWZpbmUgUVVBTElUWV9NQVggNjAKKyNkZWZpbmUgUVVBTElUWV9ERUYgNTAKIAotCWNoYXIgcWluZGV4OwogCXNpZ25lZCBjaGFyIHNlbnNvcjsJCS8qIFR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKi8KIC8qICEhIHZhbHVlcyB1c2VkIGluIGRpZmZlcmVudCB0YWJsZXMgKi8KLSNkZWZpbmUgU0VOU09SX0NTMjEwMiAwCi0jZGVmaW5lIFNFTlNPUl9DUzIxMDJLIDEKLSNkZWZpbmUgU0VOU09SX0dDMDMwNSAyCi0jZGVmaW5lIFNFTlNPUl9IRENTMjAyMGIgMwotI2RlZmluZSBTRU5TT1JfSFY3MTMxQiA0Ci0jZGVmaW5lIFNFTlNPUl9IVjcxMzFDIDUKLSNkZWZpbmUgU0VOU09SX0lDTTEwNUEgNgotI2RlZmluZSBTRU5TT1JfTUM1MDFDQiA3Ci0jZGVmaW5lIFNFTlNPUl9PVjc2MjAgOAotLyojZGVmaW5lIFNFTlNPUl9PVjc2NDggOCAtIHNhbWUgdmFsdWVzICovCi0jZGVmaW5lIFNFTlNPUl9PVjc2MzBDIDkKLSNkZWZpbmUgU0VOU09SX1BBUzEwNiAxMAotI2RlZmluZSBTRU5TT1JfUEFTMjAyQiAxMQotI2RlZmluZSBTRU5TT1JfUEIwMzMwIDEyCi0jZGVmaW5lIFNFTlNPUl9QTzIwMzAgMTMKLSNkZWZpbmUgU0VOU09SX1RBUzUxMzBDSyAxNAotI2RlZmluZSBTRU5TT1JfVEFTNTEzMENYWCAxNQotI2RlZmluZSBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE2Ci0jZGVmaW5lIFNFTlNPUl9NQVggMTcKKyNkZWZpbmUgU0VOU09SX0FEQ00yNzAwIDAKKyNkZWZpbmUgU0VOU09SX0NTMjEwMiAxCisjZGVmaW5lIFNFTlNPUl9DUzIxMDJLIDIKKyNkZWZpbmUgU0VOU09SX0dDMDMwNSAzCisjZGVmaW5lIFNFTlNPUl9IRENTMjAyMGIgNAorI2RlZmluZSBTRU5TT1JfSFY3MTMxQiA1CisjZGVmaW5lIFNFTlNPUl9IVjcxMzFDIDYKKyNkZWZpbmUgU0VOU09SX0lDTTEwNUEgNworI2RlZmluZSBTRU5TT1JfTUM1MDFDQiA4CisjZGVmaW5lIFNFTlNPUl9PVjc2MjAgOQorLyojZGVmaW5lIFNFTlNPUl9PVjc2NDggOSAtIHNhbWUgdmFsdWVzICovCisjZGVmaW5lIFNFTlNPUl9PVjc2MzBDIDEwCisjZGVmaW5lIFNFTlNPUl9QQVMxMDYgMTEKKyNkZWZpbmUgU0VOU09SX1BBUzIwMkIgMTIKKyNkZWZpbmUgU0VOU09SX1BCMDMzMCAxMworI2RlZmluZSBTRU5TT1JfUE8yMDMwIDE0CisjZGVmaW5lIFNFTlNPUl9UQVM1MTMwQ0sgMTUKKyNkZWZpbmUgU0VOU09SX1RBUzUxMzBDWFggMTYKKyNkZWZpbmUgU0VOU09SX1RBUzUxMzBDX1ZGMDI1MCAxNworI2RlZmluZSBTRU5TT1JfTUFYIDE4CiAJdW5zaWduZWQgc2hvcnQgY2hpcF9yZXZpc2lvbjsKKworCXU4ICpqcGVnX2hkcjsKIH07CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KQEAgLTIwNiw2ICsyMTMsMjEzIEBACiAJX191MTYJaWR4OwogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGFkY20yNzAwX0luaXRpYWxbXSA9IHsKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwJCS8qIDAwLDAwLDAxLGNjICovCisJezB4YTAsIDB4MDQsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAkJLyogMDAsMDIsMDQsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkJLyogMDAsMDgsMDMsY2MgKi8KKwl7MHhhMCwgMHgwYSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGEsY2MgKi8KKwl7MHhhMCwgMHhkMywgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwJCS8qIDAwLDhiLGQzLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAkvKiAwMCwwMywwMixjYyAqLworCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAkJLyogMDAsMDQsODAsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LAkvKiAwMCwwNSwwMSxjYyAqLworCXsweGEwLCAweGQ4LCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwJLyogMDAsMDYsZDgsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAkvKiAwMCwwMSwwMSxjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAkvKiAwMCwxMiwwMyxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAkvKiAwMCwxMiwwMSxjYyAqLworCXsweGEwLCAweDA1LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAkvKiAwMCwxMiwwNSxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCQkvKiAwMCw5OCwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDlBX1dJTlhTVEFSVExPV30sCQkvKiAwMCw5YSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCQkvKiAwMSwxYSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCQkvKiAwMSwxYywwMCxjYyAqLworCXsweGEwLCAweGRlLCBaQzNYWF9SMDlDX1dJTkhFSUdIVExPV30sCQkvKiAwMCw5YyxkZSxjYyAqLworCXsweGEwLCAweDg2LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwJCS8qIDAwLDllLDg2LGNjICovCisJezB4YmIsIDB4MDAsIDB4MDQwMH0sCQkJCS8qIDA0LDAwLDAwLGJiICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YmIsIDB4MGYsIDB4MTQwZn0sCQkJCS8qIDE0LDBmLDBmLGJiICovCisJezB4YTAsIDB4YjcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCS8qIDAxLDAxLDM3LGNjICovCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCQkvKiAwMSwwMCwwZCxjYyAqLworCXsweGEwLCAweDA2LCBaQzNYWF9SMTg5X0FXQlNUQVRVU30sCQkvKiAwMSw4OSwwNixjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LAkJLyogMDEsYzUsMDMsY2MgKi8KKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCQkvKiAwMSxjYiwxMyxjYyAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFfSwJLyogMDIsNTAsMDgsY2MgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjMwMV9FRVBST01BQ0NFU1N9LAkJLyogMDMsMDEsMDgsY2MgKi8KKwl7MHhhMCwgMHg1OCwgWkMzWFhfUjExNl9SR0FJTn0sCQkJLyogMDEsMTYsNTgsY2MgKi8KKwl7MHhhMCwgMHg1YSwgWkMzWFhfUjExOF9CR0FJTn0sCQkJLyogMDEsMTgsNWEsY2MgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCS8qIDAxLDgwLDAyLGNjICovCisJezB4YTAsIDB4ZDMsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCQkvKiAwMCw4YixkMyxjYyAqLworCXsweGJiLCAweDAwLCAweDA0MDh9LAkJCQkvKiAwNCwwMCwwOCxiYiAqLworCXsweGRkLCAweDAwLCAweDAyMDB9LAkJCQkvKiAwMCwwMiwwMCxkZCAqLworCXsweGJiLCAweDAwLCAweDA0MDB9LAkJCQkvKiAwNCwwMCwwMCxiYiAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGJiLCAweDBmLCAweDE0MGZ9LAkJCQkvKiAxNCwwZiwwZixiYiAqLworCXsweGJiLCAweGUwLCAweDBjMmV9LAkJCQkvKiAwYyxlMCwyZSxiYiAqLworCXsweGJiLCAweDAxLCAweDIwMDB9LAkJCQkvKiAyMCwwMSwwMCxiYiAqLworCXsweGJiLCAweDk2LCAweDI0MDB9LAkJCQkvKiAyNCw5NiwwMCxiYiAqLworCXsweGJiLCAweDA2LCAweDEwMDZ9LAkJCQkvKiAxMCwwNiwwNixiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGFhLCAweGZlLCAweDAwMDJ9LAkJCQkvKiAwMCxmZSwwMixhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGJiLCAweDVmLCAweDIwOTB9LAkJCQkvKiAyMCw1Ziw5MCxiYiAqLworCXsweGJiLCAweDAxLCAweDgwMDB9LAkJCQkvKiA4MCwwMSwwMCxiYiAqLworCXsweGJiLCAweDA5LCAweDg0MDB9LAkJCQkvKiA4NCwwOSwwMCxiYiAqLworCXsweGJiLCAweDg2LCAweDAwMDJ9LAkJCQkvKiAwMCw4NiwwMixiYiAqLworCXsweGJiLCAweGU2LCAweDA0MDF9LAkJCQkvKiAwNCxlNiwwMSxiYiAqLworCXsweGJiLCAweDg2LCAweDA4MDJ9LAkJCQkvKiAwOCw4NiwwMixiYiAqLworCXsweGJiLCAweGU2LCAweDBjMDF9LAkJCQkvKiAwYyxlNiwwMSxiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGFhLCAweGZlLCAweDAwMDB9LAkJCQkvKiAwMCxmZSwwMCxhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMjB9LAkJCQkvKiAwMCxmZSwyMCxhYSAqLworLyptc3dpbisqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAorCXsweGFhLCAweGZlLCAweDAwMDJ9LAorCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAorCXsweGFhLCAweGI0LCAweGNkMzd9LAorCXsweGFhLCAweGE0LCAweDAwMDR9LAorCXsweGFhLCAweGE4LCAweDAwMDd9LAorCXsweGFhLCAweGFjLCAweDAwMDR9LAorLyptc3dpbi0qLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGFhLCAweGZlLCAweDAwMDB9LAkJCQkvKiAwMCxmZSwwMCxhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGJiLCAweDA0LCAweDA0MDB9LAkJCQkvKiAwNCwwNCwwMCxiYiAqLworCXsweGRkLCAweDAwLCAweDAxMDB9LAkJCQkvKiAwMCwwMSwwMCxkZCAqLworCXsweGJiLCAweDAxLCAweDA0MDB9LAkJCQkvKiAwNCwwMSwwMCxiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMDJ9LAkJCQkvKiAwMCxmZSwwMixhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGJiLCAweDQxLCAweDI4MDN9LAkJCQkvKiAyOCw0MSwwMyxiYiAqLworCXsweGJiLCAweDQwLCAweDJjMDN9LAkJCQkvKiAyYyw0MCwwMyxiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMTB9LAkJCQkvKiAwMCxmZSwxMCxhYSAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGFkY20yNzAwX0luaXRpYWxTY2FsZVtdID0geworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAkJLyogMDAsMDAsMDEsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCQkvKiAwMCwwMiwxMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCQkvKiAwMCwwOCwwMyxjYyAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGEwLCAweGQzLCBaQzNYWF9SMDhCX0kyQ0RFVklDRUFERFJ9LAkJLyogMDAsOGIsZDMsY2MgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSH0sCS8qIDAwLDAzLDAyLGNjICovCisJezB4YTAsIDB4ODAsIFpDM1hYX1IwMDRfRlJBTUVXSURUSExPV30sCQkvKiAwMCwwNCw4MCxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCS8qIDAwLDA1LDAxLGNjICovCisJezB4YTAsIDB4ZDAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAkvKiAwMCwwNixkMCxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCS8qIDAwLDAxLDAxLGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDAzLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDAxLGNjICovCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDA1LGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwJCS8qIDAwLDk4LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwJCS8qIDAwLDlhLDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUFfRklSU1RZTE9XfSwJCS8qIDAxLDFhLDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwJCS8qIDAxLDFjLDAwLGNjICovCisJezB4YTAsIDB4ZDgsIFpDM1hYX1IwOUNfV0lOSEVJR0hUTE9XfSwJCS8qIDAwLDljLGQ4LGNjICovCisJezB4YTAsIDB4ODgsIFpDM1hYX1IwOUVfV0lOV0lEVEhMT1d9LAkJLyogMDAsOWUsODgsY2MgKi8KKwl7MHhiYiwgMHgwMCwgMHgwNDAwfSwJCQkJLyogMDQsMDAsMDAsYmIgKi8KKwl7MHhkZCwgMHgwMCwgMHgwMDEwfSwJCQkJLyogMDAsMDAsMTAsZGQgKi8KKwl7MHhiYiwgMHgwZiwgMHgxNDBmfSwJCQkJLyogMTQsMGYsMGYsYmIgKi8KKwl7MHhhMCwgMHhiNywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwJLyogMDEsMDEsMzcsY2MgKi8KKwl7MHhhMCwgMHgwZCwgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwJCS8qIDAxLDAwLDBkLGNjICovCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwJCS8qIDAxLDg5LDA2LGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxQzVfU0hBUlBORVNTTU9ERX0sCQkvKiAwMSxjNSwwMyxjYyAqLworCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwJCS8qIDAxLGNiLDEzLGNjICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAkvKiAwMiw1MCwwOCxjYyAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCQkvKiAwMywwMSwwOCxjYyAqLworCXsweGEwLCAweDU4LCBaQzNYWF9SMTE2X1JHQUlOfSwJCQkvKiAwMSwxNiw1OCxjYyAqLworCXsweGEwLCAweDVhLCBaQzNYWF9SMTE4X0JHQUlOfSwJCQkvKiAwMSwxOCw1YSxjYyAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwJLyogMDEsODAsMDIsY2MgKi8KKwl7MHhhMCwgMHhkMywgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwJCS8qIDAwLDhiLGQzLGNjICovCisJezB4YmIsIDB4MDAsIDB4MDQwOH0sCQkJCS8qIDA0LDAwLDA4LGJiICovCisJezB4ZGQsIDB4MDAsIDB4MDIwMH0sCQkJCS8qIDAwLDAyLDAwLGRkICovCisJezB4YmIsIDB4MDAsIDB4MDQwMH0sCQkJCS8qIDA0LDAwLDAwLGJiICovCisJezB4ZGQsIDB4MDAsIDB4MDA1MH0sCQkJCS8qIDAwLDAwLDUwLGRkICovCisJezB4YmIsIDB4MGYsIDB4MTQwZn0sCQkJCS8qIDE0LDBmLDBmLGJiICovCisJezB4YmIsIDB4ZTAsIDB4MGMyZX0sCQkJCS8qIDBjLGUwLDJlLGJiICovCisJezB4YmIsIDB4MDEsIDB4MjAwMH0sCQkJCS8qIDIwLDAxLDAwLGJiICovCisJezB4YmIsIDB4OTYsIDB4MjQwMH0sCQkJCS8qIDI0LDk2LDAwLGJiICovCisJezB4YmIsIDB4MDYsIDB4MTAwNn0sCQkJCS8qIDEwLDA2LDA2LGJiICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YWEsIDB4ZmUsIDB4MDAwMn0sCQkJCS8qIDAwLGZlLDAyLGFhICovCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBhLGNjICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YmIsIDB4NWYsIDB4MjA5MH0sCQkJCS8qIDIwLDVmLDkwLGJiICovCisJezB4YmIsIDB4MDEsIDB4ODAwMH0sCQkJCS8qIDgwLDAxLDAwLGJiICovCisJezB4YmIsIDB4MDksIDB4ODQwMH0sCQkJCS8qIDg0LDA5LDAwLGJiICovCisJezB4YmIsIDB4ODYsIDB4MDAwMn0sCQkJCS8qIDAwLDg4LDAyLGJiICovCisJezB4YmIsIDB4ZTYsIDB4MDQwMX0sCQkJCS8qIDA0LGU2LDAxLGJiICovCisJezB4YmIsIDB4ODYsIDB4MDgwMn0sCQkJCS8qIDA4LDg4LDAyLGJiICovCisJezB4YmIsIDB4ZTYsIDB4MGMwMX0sCQkJCS8qIDBjLGU2LDAxLGJiICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YWEsIDB4ZmUsIDB4MDAwMH0sCQkJCS8qIDAwLGZlLDAwLGFhICovCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBhLGNjICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4YWEsIDB4ZmUsIDB4MDAyMH0sCQkJCS8qIDAwLGZlLDIwLGFhICovCisJLyoqKioqKiovCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBhLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YWEsIDB4ZmUsIDB4MDAwMH0sCQkJCS8qIDAwLGZlLDAwLGFhICovCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBhLGNjICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YmIsIDB4MDQsIDB4MDQwMH0sCQkJCS8qIDA0LDA0LDAwLGJiICovCisJezB4ZGQsIDB4MDAsIDB4MDEwMH0sCQkJCS8qIDAwLDAxLDAwLGRkICovCisJezB4YmIsIDB4MDEsIDB4MDQwMH0sCQkJCS8qIDA0LDAxLDAwLGJiICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4YWEsIDB4ZmUsIDB4MDAwMn0sCQkJCS8qIDAwLGZlLDAyLGFhICovCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBhLGNjICovCisJezB4YmIsIDB4NDEsIDB4MjgwM30sCQkJCS8qIDI4LDQxLDAzLGJiICovCisJezB4YmIsIDB4NDAsIDB4MmMwM30sCQkJCS8qIDJjLDQwLDAzLGJiICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4YWEsIDB4ZmUsIDB4MDAxMH0sCQkJCS8qIDAwLGZlLDEwLGFhICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gYWRjbTI3MDBfNTBIWltdID0geworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMDJ9LAkJCQkvKiAwMCxmZSwwMixhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGJiLCAweDA1LCAweDg0MDB9LAkJCQkvKiA4NCwwNSwwMCxiYiAqLworCXsweGJiLCAweGQwLCAweGIwMDd9LAkJCQkvKiBiMCxkMCwwNyxiYiAqLworCXsweGJiLCAweGEwLCAweGI4MGZ9LAkJCQkvKiBiOCxhMCwwZixiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMTB9LAkJCQkvKiAwMCxmZSwxMCxhYSAqLworCXsweGFhLCAweDI2LCAweDAwZDB9LAkJCQkvKiAwMCwyNixkMCxhYSAqLworCXsweGFhLCAweDI4LCAweDAwMDJ9LAkJCQkvKiAwMCwyOCwwMixhYSAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGFkY20yNzAwXzYwSFpbXSA9IHsKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MgKi8KKwl7MHhhYSwgMHhmZSwgMHgwMDAyfSwJCQkJLyogMDAsZmUsMDIsYWEgKi8KKwl7MHhhMCwgMHgwYSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGEsY2MgKi8KKwl7MHhiYiwgMHgwNywgMHg4NDAwfSwJCQkJLyogODQsMDcsMDAsYmIgKi8KKwl7MHhiYiwgMHg4MiwgMHhiMDA2fSwJCQkJLyogYjAsODIsMDYsYmIgKi8KKwl7MHhiYiwgMHgwNCwgMHhiODBkfSwJCQkJLyogYjgsMDQsMGQsYmIgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MgKi8KKwl7MHhhYSwgMHhmZSwgMHgwMDEwfSwJCQkJLyogMDAsZmUsMTAsYWEgKi8KKwl7MHhhYSwgMHgyNiwgMHgwMDU3fSwJCQkJLyogMDAsMjYsNTcsYWEgKi8KKwl7MHhhYSwgMHgyOCwgMHgwMDAyfSwJCQkJLyogMDAsMjgsMDIsYWEgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBhZGNtMjcwMF9Ob0ZsaWtlcltdID0geworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMDJ9LAkJCQkvKiAwMCxmZSwwMixhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGJiLCAweDA3LCAweDg0MDB9LAkJCQkvKiA4NCwwNywwMCxiYiAqLworCXsweGJiLCAweDA1LCAweGIwMDB9LAkJCQkvKiBiMCwwNSwwMCxiYiAqLworCXsweGJiLCAweGEwLCAweGI4MDF9LAkJCQkvKiBiOCxhMCwwMSxiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMTB9LAkJCQkvKiAwMCxmZSwxMCxhYSAqLworCXt9Cit9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl9Jbml0aWFsW10gPSB7CiAJezB4YTEsIDB4MDEsIDB4MDAwOH0sCiAJezB4YTEsIDB4MDEsIDB4MDAwOH0sCkBAIC04NzcsNyArMTA5MSw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyS19Jbml0aWFsU2NhbGVbXSA9IHsKLQl7MHhhMCwgMHgxMSwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCiAJezB4YTAsIDB4MDgsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCkBAIC04OTQsNiArMTEwOCw3IEBACiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwKIAl7MHhhMCwgMHhlOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAogCXsweGEwLCAweDg4LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwKKy8qZml4bWU6IG5leHQgc2VxdWVuY2UgPSBpMmMgZXhjaGFuZ2VzKi8KIAl7MHhhMCwgMHg1NSwgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwKIAl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCkBAIC0xMDc3LDIwNyArMTI5Miw2IEBACiAJezB4YTAsIDB4NjAsIFpDM1hYX1IxMTZfUkdBSU59LAogCXsweGEwLCAweDQwLCBaQzNYWF9SMTE3X0dHQUlOfSwKIAl7MHhhMCwgMHg0YywgWkMzWFhfUjExOF9CR0FJTn0sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCi0JezB4YTAsIDB4MDgsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCi0JezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAotCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCi0JezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwKLQl7MHhhMCwgMHhlOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAotCXsweGEwLCAweDg4LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwKLQl7MHhhMCwgMHg1NSwgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwKLQl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDBBLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDAyLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MEIsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDIsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwQywgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHg3YiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDBELCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweEEzLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4ZmIsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwNSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDA2LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MDksIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDgsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwRSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwNCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDBmLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDE4LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MTgsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgxMSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDEyLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDE4LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MTUsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgxNiwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwYywgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDE3LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDBDLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHhmNywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwKLQl7MHhhMCwgMHgwNSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKLQl7MHhhMCwgMHg3OCwgWkMzWFhfUjE4RF9ZVEFSR0VUfSwKLQl7MHhhMCwgMHgwZCwgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwKLQl7MHhhMCwgMHgwNiwgWkMzWFhfUjE4OV9BV0JTVEFUVVN9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LAotCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwKLQl7MHhhMCwgMHgyMCwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwKLQl7MHhhMCwgMHgyMSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwKLQl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCi0JezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwKLQl7MHhhMCwgMHgwMCwgMHgwMWFkfSwKLQl7MHhhMCwgMHgwMSwgMHgwMWIxfSwKLQl7MHhhMCwgMHgwMiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCi0JezB4YTAsIDB4NjAsIFpDM1hYX1IxMTZfUkdBSU59LAotCXsweGEwLCAweDQwLCBaQzNYWF9SMTE3X0dHQUlOfSwKLQl7MHhhMCwgMHg0YywgWkMzWFhfUjExOF9CR0FJTn0sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJLyogY2xvY2sgPyAqLwotCXsweGEwLCAweDA4LCBaQzNYWF9SMUM2X1NIQVJQTkVTUzAwfSwJLyogc2hhcnBuZXNzKyAqLwotCXsweGEwLCAweDBmLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwJLyogc2hhcnBuZXNzLSAqLwotCXsweGEwLCAweDEzLCBaQzNYWF9SMTIwX0dBTU1BMDB9LAkvKiBnYW1tYSA0ICovCi0JezB4YTAsIDB4MzgsIFpDM1hYX1IxMjFfR0FNTUEwMX0sCi0JezB4YTAsIDB4NTksIFpDM1hYX1IxMjJfR0FNTUEwMn0sCi0JezB4YTAsIDB4NzksIFpDM1hYX1IxMjNfR0FNTUEwM30sCi0JezB4YTAsIDB4OTIsIFpDM1hYX1IxMjRfR0FNTUEwNH0sCi0JezB4YTAsIDB4YTcsIFpDM1hYX1IxMjVfR0FNTUEwNX0sCi0JezB4YTAsIDB4YjksIFpDM1hYX1IxMjZfR0FNTUEwNn0sCi0JezB4YTAsIDB4YzgsIFpDM1hYX1IxMjdfR0FNTUEwN30sCi0JezB4YTAsIDB4ZDQsIFpDM1hYX1IxMjhfR0FNTUEwOH0sCi0JezB4YTAsIDB4ZGYsIFpDM1hYX1IxMjlfR0FNTUEwOX0sCi0JezB4YTAsIDB4ZTcsIFpDM1hYX1IxMkFfR0FNTUEwQX0sCi0JezB4YTAsIDB4ZWUsIFpDM1hYX1IxMkJfR0FNTUEwQn0sCi0JezB4YTAsIDB4ZjQsIFpDM1hYX1IxMkNfR0FNTUEwQ30sCi0JezB4YTAsIDB4ZjksIFpDM1hYX1IxMkRfR0FNTUEwRH0sCi0JezB4YTAsIDB4ZmMsIFpDM1hYX1IxMkVfR0FNTUEwRX0sCi0JezB4YTAsIDB4ZmYsIFpDM1hYX1IxMkZfR0FNTUEwRn0sCi0JezB4YTAsIDB4MjYsIFpDM1hYX1IxMzBfR0FNTUExMH0sCi0JezB4YTAsIDB4MjIsIFpDM1hYX1IxMzFfR0FNTUExMX0sCi0JezB4YTAsIDB4MjAsIFpDM1hYX1IxMzJfR0FNTUExMn0sCi0JezB4YTAsIDB4MWMsIFpDM1hYX1IxMzNfR0FNTUExM30sCi0JezB4YTAsIDB4MTYsIFpDM1hYX1IxMzRfR0FNTUExNH0sCi0JezB4YTAsIDB4MTMsIFpDM1hYX1IxMzVfR0FNTUExNX0sCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IxMzZfR0FNTUExNn0sCi0JezB4YTAsIDB4MGQsIFpDM1hYX1IxMzdfR0FNTUExN30sCi0JezB4YTAsIDB4MGIsIFpDM1hYX1IxMzhfR0FNTUExOH0sCi0JezB4YTAsIDB4MDksIFpDM1hYX1IxMzlfR0FNTUExOX0sCi0JezB4YTAsIDB4MDcsIFpDM1hYX1IxM0FfR0FNTUExQX0sCi0JezB4YTAsIDB4MDYsIFpDM1hYX1IxM0JfR0FNTUExQn0sCi0JezB4YTAsIDB4MDUsIFpDM1hYX1IxM0NfR0FNTUExQ30sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IxM0RfR0FNTUExRH0sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IxM0VfR0FNTUExRX0sCi0JezB4YTAsIDB4MDIsIFpDM1hYX1IxM0ZfR0FNTUExRn0sCi0JezB4YTAsIDB4NTgsIFpDM1hYX1IxMEFfUkdCMDB9LAkvKiBtYXRyaXggKi8KLQl7MHhhMCwgMHhmNCwgWkMzWFhfUjEwQl9SR0IwMX0sCi0JezB4YTAsIDB4ZjQsIFpDM1hYX1IxMENfUkdCMDJ9LAotCXsweGEwLCAweGY0LCBaQzNYWF9SMTBEX1JHQjEwfSwKLQl7MHhhMCwgMHg1OCwgWkMzWFhfUjEwRV9SR0IxMX0sCi0JezB4YTAsIDB4ZjQsIFpDM1hYX1IxMEZfUkdCMTJ9LAotCXsweGEwLCAweGY0LCBaQzNYWF9SMTEwX1JHQjIwfSwKLQl7MHhhMCwgMHhmNCwgWkMzWFhfUjExMV9SR0IyMX0sCi0JezB4YTAsIDB4NTgsIFpDM1hYX1IxMTJfUkdCMjJ9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKLQl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDEzLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDIyLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MTQsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgyMCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDIxLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDIyLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjBBM19FWFBPU1VSRVRJTUVISUdIfSwKLQl7MHhhMCwgMHgyMiwgWkMzWFhfUjBBNF9FWFBPU1VSRVRJTUVMT1d9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwKLQl7MHhhMCwgMHgwNywgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKLQl7MHhhMCwgMHhlZSwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwKLQl7MHhhMCwgMHgzYSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAotCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAotCXsweGEwLCAweDBjLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAotCXsweGEwLCAweDI4LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IwMURfSFNZTkNfMH0sCi0JezB4YTAsIDB4MGYsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCi0JezB4YTAsIDB4MTksIFpDM1hYX1IwMUZfSFNZTkNfMn0sCi0JezB4YTAsIDB4MWYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCi0JezB4YTAsIDB4NjAsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCi0JezB4YTAsIDB4NjAsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCi0JezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAotCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKLQl7MHhhMCwgMHg2MCwgWkMzWFhfUjExNl9SR0FJTn0sCi0JezB4YTAsIDB4NDAsIFpDM1hYX1IxMTdfR0dBSU59LAotCXsweGEwLCAweDRjLCBaQzNYWF9SMTE4X0JHQUlOfSwKIAl7MHhhMCwgMHgwNCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCiAJezB4YTAsIDB4MjAsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LApAQCAtMTMzNCw2ICsxMzQ4LDcgQEAKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCiAJezB4YTAsIDB4MDQsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKKy8qZml4bWU6d2hhdCBkb2VzIHRoZSBuZXh0IHNlcXVlbmNlPyovCiAJezB4YTAsIDB4MDQsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKIAl7MHhhMCwgMHgwNCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCkBAIC02MjM3LDcgKzYyNTIsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgaW50IHJlZ19yX2koc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHU4IHJlZ19yX2koc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQlfX3UxNiBpbmRleCkKIHsKIAl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCkBAIC02MjUwLDEwICs2MjY1LDEwIEBACiAJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKIH0KIAotc3RhdGljIGludCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdTggcmVnX3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQlfX3UxNiBpbmRleCkKIHsKLQlpbnQgcmV0OworCXU4IHJldDsKIAogCXJldCA9IHJlZ19yX2koZ3NwY2FfZGV2LCBpbmRleCk7CiAJUERFQlVHKERfVVNCSSwgInJlZyByIFslMDR4XSAtPiAlMDJ4IiwgaW5kZXgsIHJldCk7CkBAIC02Mjg2LDggKzYzMDEsOCBAQAogCV9fdTggcmV0Ynl0ZTsKIAlfX3UxNiByZXR2YWw7CiAKLQlyZWdfd19pKGdzcGNhX2Rldi0+ZGV2LCByZWcsIDB4OTIpOwotCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIDB4MDIsIDB4OTApOwkJLyogPC0gcmVhZCBjb21tYW5kICovCisJcmVnX3dfaShnc3BjYV9kZXYtPmRldiwgcmVnLCAweDAwOTIpOworCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIDB4MDIsIDB4MDA5MCk7CQkvKiA8LSByZWFkIGNvbW1hbmQgKi8KIAltc2xlZXAoMjUpOwogCXJldGJ5dGUgPSByZWdfcl9pKGdzcGNhX2RldiwgMHgwMDkxKTsJCS8qIHJlYWQgc3RhdHVzICovCiAJcmV0dmFsID0gcmVnX3JfaShnc3BjYV9kZXYsIDB4MDA5NSk7CQkvKiByZWFkIExvd2J5dGUgKi8KQEAgLTYzMzIsNiArNjM0NywxMiBAQAogCQkJCSAgYWN0aW9uLT5pZHggJiAweGZmLAkJLyogdmFsTCAqLwogCQkJCSAgYWN0aW9uLT5pZHggPj4gOCk7CQkvKiB2YWxIICovCiAJCQlicmVhazsKKwkJY2FzZSAweGJiOgorCQkJaTJjX3dyaXRlKGdzcGNhX2RldiwKKwkJCQkgIGFjdGlvbi0+aWR4ID4+IDgsCQkvKiByZWcgKi8KKwkJCQkgIGFjdGlvbi0+aWR4ICYgMHhmZiwJCS8qIHZhbEwgKi8KKwkJCQkgIGFjdGlvbi0+dmFsKTsJCQkvKiB2YWxIICovCisJCQlicmVhazsKIAkJZGVmYXVsdDoKIC8qCQljYXNlIDB4ZGQ6CSAqIGRlbGF5ICovCiAJCQltc2xlZXAoYWN0aW9uLT52YWwgLyA2NCArIDEwKTsKQEAgLTYzNDcsNiArNjM2OCwxMCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgaTsKIAljb25zdCBfX3U4ICptYXRyaXg7CisJc3RhdGljIGNvbnN0IHU4IGFkY20yNzAwX21hdHJpeFs5XSA9CisvKgkJezB4NjYsIDB4ZWQsIDB4ZWQsIDB4ZWQsIDB4NjYsIDB4ZWQsIDB4ZWQsIDB4ZWQsIDB4NjZ9OyAqLworLyptcy13aW4qLworCQl7MHg3NCwgMHhlZCwgMHhlZCwgMHhlZCwgMHg3NCwgMHhlZCwgMHhlZCwgMHhlZCwgMHg3NH07CiAJc3RhdGljIGNvbnN0IF9fdTggZ2MwMzA1X21hdHJpeFs5XSA9CiAJCXsweDUwLCAweGY4LCAweGY4LCAweGY4LCAweDUwLCAweGY4LCAweGY4LCAweGY4LCAweDUwfTsKIAlzdGF0aWMgY29uc3QgX191OCBvdjc2MjBfbWF0cml4WzldID0KQEAgLTYzNTgsMjMgKzYzODMsMjQgQEAKIAlzdGF0aWMgY29uc3QgX191OCB2ZjAyNTBfbWF0cml4WzldID0KIAkJezB4N2IsIDB4ZWEsIDB4ZWEsIDB4ZWEsIDB4N2IsIDB4ZWEsIDB4ZWEsIDB4ZWEsIDB4N2J9OwogCXN0YXRpYyBjb25zdCBfX3U4ICptYXRyaXhfdGJbU0VOU09SX01BWF0gPSB7Ci0JCU5VTEwsCQkvKiBTRU5TT1JfQ1MyMTAyIDAgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9DUzIxMDJLIDEgKi8KLQkJZ2MwMzA1X21hdHJpeCwJLyogU0VOU09SX0dDMDMwNSAyICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfSERDUzIwMjBiIDMgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9IVjcxMzFCIDQgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9IVjcxMzFDIDUgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9JQ00xMDVBIDYgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9NQzUwMUNCIDcgKi8KLQkJb3Y3NjIwX21hdHJpeCwJLyogU0VOU09SX09WNzYyMCA4ICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfT1Y3NjMwQyA5ICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfUEFTMTA2IDEwICovCi0JCXBhczIwMmJfbWF0cml4LAkvKiBTRU5TT1JfUEFTMjAyQiAxMSAqLwotCQlOVUxMLAkJLyogU0VOU09SX1BCMDMzMCAxMiAqLwotCQlwbzIwMzBfbWF0cml4LAkvKiBTRU5TT1JfUE8yMDMwIDEzICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfVEFTNTEzMENLIDE0ICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfVEFTNTEzMENYWCAxNSAqLwotCQl2ZjAyNTBfbWF0cml4LAkvKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE2ICovCisJCWFkY20yNzAwX21hdHJpeCwgLyogU0VOU09SX0FEQ00yNzAwIDAgKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9DUzIxMDIgMSAqLworCQlOVUxMLAkJLyogU0VOU09SX0NTMjEwMksgMiAqLworCQlnYzAzMDVfbWF0cml4LAkvKiBTRU5TT1JfR0MwMzA1IDMgKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9IRENTMjAyMGIgNCAqLworCQlOVUxMLAkJLyogU0VOU09SX0hWNzEzMUIgNSAqLworCQlOVUxMLAkJLyogU0VOU09SX0hWNzEzMUMgNiAqLworCQlOVUxMLAkJLyogU0VOU09SX0lDTTEwNUEgNyAqLworCQlOVUxMLAkJLyogU0VOU09SX01DNTAxQ0IgOCAqLworCQlvdjc2MjBfbWF0cml4LAkvKiBTRU5TT1JfT1Y3NjIwIDkgKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9PVjc2MzBDIDEwICovCisJCU5VTEwsCQkvKiBTRU5TT1JfUEFTMTA2IDExICovCisJCXBhczIwMmJfbWF0cml4LAkvKiBTRU5TT1JfUEFTMjAyQiAxMiAqLworCQlOVUxMLAkJLyogU0VOU09SX1BCMDMzMCAxMyAqLworCQlwbzIwMzBfbWF0cml4LAkvKiBTRU5TT1JfUE8yMDMwIDE0ICovCisJCU5VTEwsCQkvKiBTRU5TT1JfVEFTNTEzMENLIDE1ICovCisJCU5VTEwsCQkvKiBTRU5TT1JfVEFTNTEzMENYWCAxNiAqLworCQl2ZjAyNTBfbWF0cml4LAkvKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE3ICovCiAJfTsKIAogCW1hdHJpeCA9IG1hdHJpeF90YltzZC0+c2Vuc29yXTsKQEAgLTYzOTgsOCArNjQyNCwxMSBAQAogLypmaXhtZTogaXMgaXQgcmVhbGx5IHdyaXRlIHRvIDAxMWQgYW5kIDAxOGQgZm9yIGFsbCBvdGhlciBzZW5zb3JzPyAqLwogCWJyaWdodG5lc3MgPSBzZC0+YnJpZ2h0bmVzczsKIAlyZWdfdyhnc3BjYV9kZXYtPmRldiwgYnJpZ2h0bmVzcywgMHgwMTFkKTsKLQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfSFY3MTMxQikKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMjcwMDoKKwljYXNlIFNFTlNPUl9IVjcxMzFCOgogCQlyZXR1cm47CisJfQogCWlmIChicmlnaHRuZXNzIDwgMHg3MCkKIAkJYnJpZ2h0bmVzcyArPSAweDEwOwogCWVsc2UKQEAgLTY1MzYsMTAgKzY1NjUsMTAgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCV9fdTggcXVhbGl0eTsKIAlfX3U4IGZyeHQ7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMjcwMDoKIAljYXNlIFNFTlNPUl9HQzAzMDU6CiAJY2FzZSBTRU5TT1JfSFY3MTMxQjoKIAljYXNlIFNFTlNPUl9PVjc2MjA6CkBAIC02NTQ3LDI2ICs2NTc2LDE4IEBACiAJCXJldHVybjsKIAl9CiAvKmZpeG1lOiBpcyBpdCByZWFsbHkgMDAwOCAwMDA3IDAwMTggZm9yIGFsbCBvdGhlciBzZW5zb3JzPyAqLwotCXF1YWxpdHkgPSBzZC0+cWluZGV4OwotCXJlZ193KGRldiwgcXVhbGl0eSwgMHgwMDA4KTsKKwlyZWdfdyhkZXYsIFFVQU5UX1ZBTCwgMHgwMDA4KTsKIAlmcnh0ID0gMHgzMDsKIAlyZWdfdyhkZXYsIGZyeHQsIDB4MDAwNyk7Ci0Jc3dpdGNoIChxdWFsaXR5KSB7Ci0JY2FzZSAwOgotCWNhc2UgMToKLQljYXNlIDI6Ci0JCWZyeHQgPSAweGZmOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCWZyeHQgPSAweGYwOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCWZyeHQgPSAweGUwOwotCQlicmVhazsKLQljYXNlIDU6Ci0JCWZyeHQgPSAweDIwOwotCQlicmVhazsKLQl9CisjaWYgUVVBTlRfVkFMID09IDAgfHwgUVVBTlRfVkFMID09IDEgfHwgUVVBTlRfVkFMID09IDIKKwlmcnh0ID0gMHhmZjsKKyNlbGlmIFFVQU5UX1ZBTCA9PSAzCisJZnJ4dCA9IDB4ZjA7CisjZWxpZiBRVUFOVF9WQUwgPT0gNAorCWZyeHQgPSAweGUwOworI2Vsc2UKKwlmcnh0ID0gMHgyMDsKKyNlbmRpZgogCXJlZ193KGRldiwgZnJ4dCwgMHgwMDE4KTsKIH0KIApAQCAtNjU4Myw3MSArNjYwNCw3NSBAQAogCWludCBpLCBtb2RlOwogCWNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uICp6YzNfZnJlcTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gKmZyZXFfdGJbU0VOU09SX01BWF1bNl0gPSB7Ci0vKiBTRU5TT1JfQ1MyMTAyIDAgKi8KKy8qIFNFTlNPUl9BRENNMjcwMCAwICovCisJCXthZGNtMjcwMF9Ob0ZsaWtlciwgYWRjbTI3MDBfTm9GbGlrZXIsCisJCSBhZGNtMjcwMF81MEhaLCBhZGNtMjcwMF81MEhaLAorCQkgYWRjbTI3MDBfNjBIWiwgYWRjbTI3MDBfNjBIWn0sCisvKiBTRU5TT1JfQ1MyMTAyIDEgKi8KIAkJe2NzMjEwMl9Ob0ZsaWtlciwgY3MyMTAyX05vRmxpa2VyU2NhbGUsCiAJCSBjczIxMDJfNTBIWiwgY3MyMTAyXzUwSFpTY2FsZSwKIAkJIGNzMjEwMl82MEhaLCBjczIxMDJfNjBIWlNjYWxlfSwKLS8qIFNFTlNPUl9DUzIxMDJLIDEgKi8KKy8qIFNFTlNPUl9DUzIxMDJLIDIgKi8KIAkJe2NzMjEwMl9Ob0ZsaWtlciwgY3MyMTAyX05vRmxpa2VyU2NhbGUsCiAJCSBOVUxMLCBOVUxMLCAvKiBjdXJyZW50bHkgZGlzYWJsZWQgKi8KIAkJIE5VTEwsIE5VTEx9LAotLyogU0VOU09SX0dDMDMwNSAyICovCisvKiBTRU5TT1JfR0MwMzA1IDMgKi8KIAkJe2djMDMwNV9Ob0ZsaWtlciwgZ2MwMzA1X05vRmxpa2VyLAogCQkgZ2MwMzA1XzUwSFosIGdjMDMwNV81MEhaLAogCQkgZ2MwMzA1XzYwSFosIGdjMDMwNV82MEhafSwKLS8qIFNFTlNPUl9IRENTMjAyMGIgMyAqLworLyogU0VOU09SX0hEQ1MyMDIwYiA0ICovCiAJCXtoZGNzMjAyMGJfTm9GbGlrZXIsIGhkY3MyMDIwYl9Ob0ZsaWtlciwKIAkJIGhkY3MyMDIwYl81MEhaLCBoZGNzMjAyMGJfNTBIWiwKIAkJIGhkY3MyMDIwYl82MEhaLCBoZGNzMjAyMGJfNjBIWn0sCi0vKiBTRU5TT1JfSFY3MTMxQiA0ICovCisvKiBTRU5TT1JfSFY3MTMxQiA1ICovCiAJCXtodjcxMzFiX05vRmxpa2VyU2NhbGUsIGh2NzEzMWJfTm9GbGlrZXIsCiAJCSBodjcxMzFiXzUwSFpTY2FsZSwgaHY3MTMxYl81MEhaLAogCQkgaHY3MTMxYl82MEhaU2NhbGUsIGh2NzEzMWJfNjBIWn0sCi0vKiBTRU5TT1JfSFY3MTMxQyA1ICovCisvKiBTRU5TT1JfSFY3MTMxQyA2ICovCiAJCXtOVUxMLCBOVUxMLAogCQkgTlVMTCwgTlVMTCwKIAkJIE5VTEwsIE5VTEx9LAotLyogU0VOU09SX0lDTTEwNUEgNiAqLworLyogU0VOU09SX0lDTTEwNUEgNyAqLwogCQl7aWNtMTA1YV9Ob0ZsaWtlciwgaWNtMTA1YV9Ob0ZsaWtlclNjYWxlLAogCQkgaWNtMTA1YV81MEhaLCBpY20xMDVhXzUwSFpTY2FsZSwKIAkJIGljbTEwNWFfNjBIWiwgaWNtMTA1YV82MEhaU2NhbGV9LAotLyogU0VOU09SX01DNTAxQ0IgNyAqLworLyogU0VOU09SX01DNTAxQ0IgOCAqLwogCQl7TUM1MDFDQl9Ob0ZsaWtlciwgTUM1MDFDQl9Ob0ZsaWtlclNjYWxlLAogCQkgTUM1MDFDQl81MEhaLCBNQzUwMUNCXzUwSFpTY2FsZSwKIAkJIE1DNTAxQ0JfNjBIWiwgTUM1MDFDQl82MEhaU2NhbGV9LAotLyogU0VOU09SX09WNzYyMCA4ICovCisvKiBTRU5TT1JfT1Y3NjIwIDkgKi8KIAkJe09WNzYyMF9Ob0ZsaWtlciwgT1Y3NjIwX05vRmxpa2VyLAogCQkgT1Y3NjIwXzUwSFosIE9WNzYyMF81MEhaLAogCQkgT1Y3NjIwXzYwSFosIE9WNzYyMF82MEhafSwKLS8qIFNFTlNPUl9PVjc2MzBDIDkgKi8KKy8qIFNFTlNPUl9PVjc2MzBDIDEwICovCiAJCXtOVUxMLCBOVUxMLAogCQkgTlVMTCwgTlVMTCwKIAkJIE5VTEwsIE5VTEx9LAotLyogU0VOU09SX1BBUzEwNiAxMCAqLworLyogU0VOU09SX1BBUzEwNiAxMSAqLwogCQl7cGFzMTA2Yl9Ob0ZsaWtlciwgcGFzMTA2Yl9Ob0ZsaWtlciwKIAkJIHBhczEwNmJfNTBIWiwgcGFzMTA2Yl81MEhaLAogCQkgcGFzMTA2Yl82MEhaLCBwYXMxMDZiXzYwSFp9LAotLyogU0VOU09SX1BBUzIwMkIgMTEgKi8KKy8qIFNFTlNPUl9QQVMyMDJCIDEyICovCiAJCXtwYXMyMDJiX05vRmxpa2VyU2NhbGUsIHBhczIwMmJfTm9GbGlrZXIsCiAJCSBwYXMyMDJiXzUwSFpTY2FsZSwgcGFzMjAyYl81MEhaLAogCQkgcGFzMjAyYl82MEhaU2NhbGUsIHBhczIwMmJfNjBIWn0sCi0vKiBTRU5TT1JfUEIwMzMwIDEyICovCisvKiBTRU5TT1JfUEIwMzMwIDEzICovCiAJCXtwYjAzMzBfTm9GbGlrZXIsIHBiMDMzMF9Ob0ZsaWtlclNjYWxlLAogCQkgcGIwMzMwXzUwSFosIHBiMDMzMF81MEhaU2NhbGUsCiAJCSBwYjAzMzBfNjBIWiwgcGIwMzMwXzYwSFpTY2FsZX0sCi0vKiBTRU5TT1JfUE8yMDMwIDEzICovCisvKiBTRU5TT1JfUE8yMDMwIDE0ICovCiAJCXtQTzIwMzBfTm9GbGlrZXIsIFBPMjAzMF9Ob0ZsaWtlciwKIAkJIFBPMjAzMF81MEhaLCBQTzIwMzBfNTBIWiwKIAkJIFBPMjAzMF82MEhaLCBQTzIwMzBfNjBIWn0sCi0vKiBTRU5TT1JfVEFTNTEzMENLIDE0ICovCisvKiBTRU5TT1JfVEFTNTEzMENLIDE1ICovCiAJCXt0YXM1MTMwY3h4X05vRmxpa2VyLCB0YXM1MTMwY3h4X05vRmxpa2VyU2NhbGUsCiAJCSB0YXM1MTMwY3h4XzUwSFosIHRhczUxMzBjeHhfNTBIWlNjYWxlLAogCQkgdGFzNTEzMGN4eF82MEhaLCB0YXM1MTMwY3h4XzYwSFpTY2FsZX0sCi0vKiBTRU5TT1JfVEFTNTEzMENYWCAxNSAqLworLyogU0VOU09SX1RBUzUxMzBDWFggMTYgKi8KIAkJe3RhczUxMzBjeHhfTm9GbGlrZXIsIHRhczUxMzBjeHhfTm9GbGlrZXJTY2FsZSwKIAkJIHRhczUxMzBjeHhfNTBIWiwgdGFzNTEzMGN4eF81MEhaU2NhbGUsCiAJCSB0YXM1MTMwY3h4XzYwSFosIHRhczUxMzBjeHhfNjBIWlNjYWxlfSwKLS8qIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTAgMTYgKi8KKy8qIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTAgMTcgKi8KIAkJe3RhczUxMzBjX3ZmMDI1MF9Ob0ZsaWtlciwgdGFzNTEzMGNfdmYwMjUwX05vRmxpa2VyU2NhbGUsCiAJCSB0YXM1MTMwY192ZjAyNTBfNTBIWiwgdGFzNTEzMGNfdmYwMjUwXzUwSFpTY2FsZSwKIAkJIHRhczUxMzBjX3ZmMDI1MF82MEhaLCB0YXM1MTMwY192ZjAyNTBfNjBIWlNjYWxlfSwKQEAgLTY3MDEsNiArNjcyNiw3IEBACiAJCXJlZ193KGRldiwgMHgwYywgMHgwMDNiKTsKIAkJcmVnX3coZGV2LCAweDA4LCAweDAwMzgpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9BRENNMjcwMDoKIAljYXNlIFNFTlNPUl9HQzAzMDU6CiAJY2FzZSBTRU5TT1JfT1Y3NjIwOgogCWNhc2UgU0VOU09SX1BCMDMzMDoKQEAgLTY3NDMsMjYgKzY3NjksMjUgQEAKIHN0YXRpYyBpbnQgdmdhXzJ3cl9wcm9iZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCV9fdTggcmV0Ynl0ZTsKLQlfX3UxNiBjaGVja3dvcmQ7CisJdTE2IHJldHdvcmQ7CiAKIAlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDAwKTsJCS8qIEhWNzEzMUIgKi8KIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAxLCAweGFhLCAweDAwKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsKLQlpZiAocmV0Ynl0ZSAhPSAwKQorCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDEpOworCWlmIChyZXR3b3JkICE9IDApCiAJCXJldHVybiAweDAwOwkJCS8qIEhWNzEzMUIgKi8KIAogCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MDQpOwkJLyogQ1MyMTAyICovCiAJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgwMSwgMHhhYSwgMHgwMCk7Ci0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMSk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkKKwlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsKKwlpZiAocmV0d29yZCAhPSAwKQogCQlyZXR1cm4gMHgwNDsJCQkvKiBDUzIxMDIgKi8KIAogCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MDYpOwkJLyogT21uaVZpc2lvbiAqLwogCXJlZ193KGRldiwgMHgwOCwgMHgwMDhkKTsKIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDExLCAweGFhLCAweDAwKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDExKTsKLQlpZiAocmV0Ynl0ZSAhPSAwKSB7CisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxMSk7CisJaWYgKHJldHdvcmQgIT0gMCkgewogCQkvKiAoc2hvdWxkIGhhdmUgcmV0dXJuZWQgMHhhYSkgLS0+IE9tbml2aXNpb24/ICovCiAJCS8qIHJlZ19yIDB4MTAgLT4gMHgwNiAtLT4gICovCiAJCWdvdG8gb3ZfY2hlY2s7CkBAIC02NzcwLDQwICs2Nzk1LDQwIEBACiAKIAlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDA4KTsJCS8qIEhEQ1MyMDIwICovCiAJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgxNSwgMHhhYSwgMHgwMCk7Ci0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxNSk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkKKwlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDE1KTsKKwlpZiAocmV0d29yZCAhPSAwKQogCQlyZXR1cm4gMHgwODsJCQkvKiBIRENTMjAyMCAqLwogCiAJc3RhcnRfMndyX3Byb2JlKGRldiwgMHgwYSk7CQkvKiBQQjAzMzAgKi8KIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDA3LCAweGFhLCAweGFhKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDA3KTsKLQlpZiAocmV0Ynl0ZSAhPSAwKQorCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDcpOworCWlmIChyZXR3b3JkICE9IDApCiAJCXJldHVybiAweDBhOwkJCS8qIFBCMDMzMCAqLwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDMpOwotCWlmIChyZXRieXRlICE9IDApCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMyk7CisJaWYgKHJldHdvcmQgIT0gMCkKIAkJcmV0dXJuIDB4MGE7CQkJLyogUEIwMzMwID8/ICovCi0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwNCk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkKKwlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDA0KTsKKwlpZiAocmV0d29yZCAhPSAwKQogCQlyZXR1cm4gMHgwYTsJCQkvKiBQQjAzMzAgPz8gKi8KIAogCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MGMpOwkJLyogSUNNMTA1QSAqLwogCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MDEsIDB4MTEsIDB4MDApOwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDEpOwotCWlmIChyZXRieXRlICE9IDApCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMSk7CisJaWYgKHJldHdvcmQgIT0gMCkKIAkJcmV0dXJuIDB4MGM7CQkJLyogSUNNMTA1QSAqLwogCiAJc3RhcnRfMndyX3Byb2JlKGRldiwgMHgwZSk7CQkvKiBQQVMyMDJCQ0IgKi8KIAlyZWdfdyhkZXYsIDB4MDgsIDB4MDA4ZCk7CiAJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgwMywgMHhhYSwgMHgwMCk7CiAJbXNsZWVwKDUwMCk7Ci0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMyk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkKKwlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAzKTsKKwlpZiAocmV0d29yZCAhPSAwKQogCQlyZXR1cm4gMHgwZTsJCQkvKiBQQVMyMDJCQ0IgKi8KIAogCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MDIpOwkJLyogPz8gKi8KIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAxLCAweGFhLCAweDAwKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsKLQlpZiAocmV0Ynl0ZSAhPSAwKQorCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDEpOworCWlmIChyZXR3b3JkICE9IDApCiAJCXJldHVybiAweDAyOwkJCS8qID8/ICovCiBvdl9jaGVjazoKIAlyZWdfcihnc3BjYV9kZXYsIDB4MDAxMCk7CQkvKiA/PyAqLwpAQCAtNjgxNywxMiArNjg0MiwxMCBAQAogCW1zbGVlcCg1MDApOwogCXJlZ193KGRldiwgMHgwMSwgMHgwMDEyKTsKIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDEyLCAweDgwLCAweDAwKTsJLyogc2Vuc29yIHJlc2V0ICovCi0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwYSk7Ci0JY2hlY2t3b3JkID0gcmV0Ynl0ZSA8PCA4OwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MGIpOwotCWNoZWNrd29yZCB8PSByZXRieXRlOwotCVBERUJVRyhEX1BST0JFLCAicHJvYmUgMndyIG92IHZnYSAweCUwNHgiLCBjaGVja3dvcmQpOwotCXN3aXRjaCAoY2hlY2t3b3JkKSB7CisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwYSkgPDwgODsKKwlyZXR3b3JkIHw9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwYik7CisJUERFQlVHKERfUFJPQkUsICJwcm9iZSAyd3Igb3YgdmdhIDB4JTA0eCIsIHJldHdvcmQpOworCXN3aXRjaCAocmV0d29yZCkgewogCWNhc2UgMHg3NjMxOgkJCQkvKiBPVjc2MzBDICovCiAJCXJlZ193KGRldiwgMHgwNiwgMHgwMDEwKTsKIAkJYnJlYWs7CkBAIC02ODMyLDcgKzY4NTUsNyBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtMTsJCQkvKiBub3QgT21uaVZpc2lvbiAqLwogCX0KLQlyZXR1cm4gY2hlY2t3b3JkOworCXJldHVybiByZXR3b3JkOwogfQogCiBzdHJ1Y3Qgc2Vuc29yX2J5X2NoaXBzZXRfcmV2aXNpb24gewpAQCAtNjg0NSw2ICs2ODY4LDcgQEAKIAl7MHg4MDAxLCAweDEzfSwKIAl7MHg4MDAwLCAweDE0fSwJCS8qIENTMjEwMksgKi8KIAl7MHg4NDAwLCAweDE1fSwJCS8qIFRBUzUxMzBLICovCisJezB4NDAwMSwgMHgxNn0sCQkvKiBBRENNMjcwMCAqLwogfTsKIAogc3RhdGljIGludCB2Z2FfM3dyX3Byb2JlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTY4NTMsNyArNjg3Nyw3IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCBpOwogCV9fdTggcmV0Ynl0ZTsKLQlfX3UxNiBjaGVja3dvcmQ7CisJdTE2IHJldHdvcmQ7CiAKIC8qZml4bWU6IGxhY2sgb2YgOGI9YjMgKDExLDEyKS0+IDEwLCA4Yj1lMCAoMTQsMTUsMTYpLT4gMTIgZm91bmQgaW4gZ3NwY2F2MSovCiAJcmVnX3coZGV2LCAweDAyLCAweDAwMTApOwpAQCAtNjg2NSwyNyArNjg4OSwyNSBAQAogCXJlZ193KGRldiwgMHgwMywgMHgwMDEyKTsKIAlyZWdfdyhkZXYsIDB4MDEsIDB4MDAxMik7CiAJcmVnX3coZGV2LCAweDA1LCAweDAwMTIpOwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTQpOwotCWlmIChyZXRieXRlICE9IDApCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxNCk7CisJaWYgKHJldHdvcmQgIT0gMCkKIAkJcmV0dXJuIDB4MTE7CQkJLyogSFY3MTMxUiAqLwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTUpOwotCWlmIChyZXRieXRlICE9IDApCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxNSk7CisJaWYgKHJldHdvcmQgIT0gMCkKIAkJcmV0dXJuIDB4MTE7CQkJLyogSFY3MTMxUiAqLwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTYpOwotCWlmIChyZXRieXRlICE9IDApCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxNik7CisJaWYgKHJldHdvcmQgIT0gMCkKIAkJcmV0dXJuIDB4MTE7CQkJLyogSFY3MTMxUiAqLwogCiAJcmVnX3coZGV2LCAweDAyLCAweDAwMTApOwotCXJldGJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDAwYik7Ci0JY2hlY2t3b3JkID0gcmV0Ynl0ZSA8PCA4OwotCXJldGJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDAwYSk7Ci0JY2hlY2t3b3JkIHw9IHJldGJ5dGU7Ci0JUERFQlVHKERfUFJPQkUsICJwcm9iZSAzd3IgdmdhIDEgMHglMDR4IiwgY2hlY2t3b3JkKTsKKwlyZXR3b3JkID0gcmVnX3IoZ3NwY2FfZGV2LCAweDAwMGIpIDw8IDg7CisJcmV0d29yZCB8PSByZWdfcihnc3BjYV9kZXYsIDB4MDAwYSk7CisJUERFQlVHKERfUFJPQkUsICJwcm9iZSAzd3IgdmdhIDEgMHglMDR4IiwgcmV0d29yZCk7CiAJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMTApOwogCS8qIHRoaXMgaXMgdGVzdGVkIG9ubHkgb25jZSBhbnl3YXkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaGlwc2V0X3JldmlzaW9uX3NlbnNvcik7IGkrKykgewotCQlpZiAoY2hpcHNldF9yZXZpc2lvbl9zZW5zb3JbaV0ucmV2aXNpb24gPT0gY2hlY2t3b3JkKSB7Ci0JCQlzZC0+Y2hpcF9yZXZpc2lvbiA9IGNoZWNrd29yZDsKKwkJaWYgKGNoaXBzZXRfcmV2aXNpb25fc2Vuc29yW2ldLnJldmlzaW9uID09IHJldHdvcmQpIHsKKwkJCXNkLT5jaGlwX3JldmlzaW9uID0gcmV0d29yZDsKIAkJCXNlbmRfdW5rbm93bihkZXYsIFNFTlNPUl9QQjAzMzApOwogCQkJcmV0dXJuIGNoaXBzZXRfcmV2aXNpb25fc2Vuc29yW2ldLmludGVybmFsX3NlbnNvcl9pZDsKIAkJfQpAQCAtNjg5Nyw4ICs2OTE5LDggQEAKIAlyZWdfdyhkZXYsIDB4MGEsIDB4MDAxMCk7CiAJcmVnX3coZGV2LCAweDAzLCAweDAwMTIpOwogCXJlZ193KGRldiwgMHgwMSwgMHgwMDEyKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAwKTsKLQlpZiAocmV0Ynl0ZSAhPSAwKSB7CisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMCk7CisJaWYgKHJldHdvcmQgIT0gMCkgewogCQlQREVCVUcoRF9QUk9CRSwgInByb2JlIDN3ciB2Z2EgdHlwZSAwYSA/Iik7CiAJCXJldHVybiAweDBhOwkJCS8qID8/ICovCiAJfQpAQCAtNjkxMCwxNCArNjkzMiwxNCBAQAogCXJlZ193KGRldiwgMHgwMywgMHgwMDEyKTsKIAltc2xlZXAoMik7CiAJcmVnX3coZGV2LCAweDAxLCAweDAwMTIpOwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDApOwotCWlmIChyZXRieXRlICE9IDApIHsKLQkJUERFQlVHKERfUFJPQkUsICJwcm9iZSAzd3IgdmdhIHR5cGUgJTAyeCIsIHJldGJ5dGUpOwotCQlpZiAocmV0Ynl0ZSA9PSAweDExKQkJCS8qIFZGMDI1MCAqLworCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDApOworCWlmIChyZXR3b3JkICE9IDApIHsKKwkJUERFQlVHKERfUFJPQkUsICJwcm9iZSAzd3IgdmdhIHR5cGUgJTAyeCIsIHJldHdvcmQpOworCQlpZiAocmV0d29yZCA9PSAweDAwMTEpCQkJLyogVkYwMjUwICovCiAJCQlyZXR1cm4gMHgwMjUwOwotCQlpZiAocmV0Ynl0ZSA9PSAweDI5KQkJCS8qIGdjMDMwNSAqLworCQlpZiAocmV0d29yZCA9PSAweDAwMjkpCQkJLyogZ2MwMzA1ICovCiAJCQlzZW5kX3Vua25vd24oZGV2LCBTRU5TT1JfR0MwMzA1KTsKLQkJcmV0dXJuIHJldGJ5dGU7CisJCXJldHVybiByZXR3b3JkOwogCX0KIAogCXJlZ193KGRldiwgMHgwMSwgMHgwMDAwKTsJLyogY2hlY2sgT21uaVZpc2lvbiAqLwpAQCAtNjkyNyw4ICs2OTQ5LDggQEAKIAlyZWdfdyhkZXYsIDB4MDYsIDB4MDAxMCk7CiAJcmVnX3coZGV2LCAweDAxLCAweDAwMTIpOwogCXJlZ193KGRldiwgMHgwNSwgMHgwMDEyKTsKLQlpZiAoaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDFjKSA9PSAweDdmCS8qIE9WNzYxMCAtIG1hbnVmYWN0dXJlciBJRCAqLwotCSAgICAmJiBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MWQpID09IDB4YTIpIHsKKwlpZiAoaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDFjKSA9PSAweDAwN2YJLyogT1Y3NjEwIC0gbWFudWZhY3R1cmVyIElEICovCisJICAgICYmIGkyY19yZWFkKGdzcGNhX2RldiwgMHgxZCkgPT0gMHgwMGEyKSB7CiAJCXNlbmRfdW5rbm93bihkZXYsIFNFTlNPUl9PVjc2MjApOwogCQlyZXR1cm4gMHgwNjsJCS8qIE9tbmlWaXNpb24gY29uZmlybSA/ICovCiAJfQpAQCAtNjk0MiwxNiArNjk2NCwxNCBAQAogLyoJbXNsZWVwKDE1MCk7ICovCiAJcmVnX3coZGV2LCAweDAxLCAweDAwMTIpOwogCXJlZ193KGRldiwgMHgwNSwgMHgwMDEyKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAwMDApOwkJLyogSUQgMCAqLwotCWNoZWNrd29yZCA9IHJldGJ5dGUgPDwgODsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAwMDEpOwkJLyogSUQgMSAqLwotCWNoZWNrd29yZCB8PSByZXRieXRlOwotCVBERUJVRyhEX1BST0JFLCAicHJvYmUgM3dyIHZnYSAyIDB4JTA0eCIsIGNoZWNrd29yZCk7Ci0JaWYgKGNoZWNrd29yZCA9PSAweDIwMzApIHsKKwlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAwKSA8PCA4OwkvKiBJRCAwICovCisJcmV0d29yZCB8PSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDEpOwkJLyogSUQgMSAqLworCVBERUJVRyhEX1BST0JFLCAicHJvYmUgM3dyIHZnYSAyIDB4JTA0eCIsIHJldHdvcmQpOworCWlmIChyZXR3b3JkID09IDB4MjAzMCkgewogCQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAyKTsJLyogcmV2aXNpb24gbnVtYmVyICovCiAJCVBERUJVRyhEX1BST0JFLCAic2Vuc29yIFBPMjAzMCByZXYgMHglMDJ4IiwgcmV0Ynl0ZSk7CiAJCXNlbmRfdW5rbm93bihkZXYsIFNFTlNPUl9QTzIwMzApOwotCQlyZXR1cm4gY2hlY2t3b3JkOworCQlyZXR1cm4gcmV0d29yZDsKIAl9CiAKIAlyZWdfdyhkZXYsIDB4MDEsIDB4MDAwMCk7CkBAIC02OTYyLDEwICs2OTgyLDEwIEBACiAJcmVnX3coZGV2LCAweDAxLCAweDAwMTIpOwogCXJlZ193KGRldiwgMHgwNSwgMHgwMDAxKTsKIAlyZWdfdyhkZXYsIDB4ZDMsIDB4MDA4Yik7Ci0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMSk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkgewotCQlQREVCVUcoRF9QUk9CRSwgInByb2JlIDN3ciB2Z2EgdHlwZSAwYSA/Iik7Ci0JCXJldHVybiAweDBhOwkJCS8qID8/ICovCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMSk7CisJaWYgKHJldHdvcmQgIT0gMCkgeworCQlQREVCVUcoRF9QUk9CRSwgInByb2JlIDN3ciB2Z2EgdHlwZSAwYSA/IHJldDogJTA0eCIsIHJldHdvcmQpOworCQlyZXR1cm4gcmV0d29yZDsKIAl9CiAJcmV0dXJuIC0xOwogfQpAQCAtNjk3Myw3ICs2OTkzLDcgQEAKIHN0YXRpYyBpbnQgemN4eF9wcm9iZVNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCBzZW5zb3IsIHNlbnNvcjI7CisJaW50IHNlbnNvcjsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX01DNTAxQ0I6CkBAIC02OTg4LDE2ICs3MDA4LDkgQEAKIAkJYnJlYWs7CiAJfQogCXNlbnNvciA9IHZnYV8yd3JfcHJvYmUoZ3NwY2FfZGV2KTsKLQlpZiAoc2Vuc29yID49IDApIHsKLQkJaWYgKHNlbnNvciA8IDB4NzYwMCkKLQkJCXJldHVybiBzZW5zb3I7Ci0JCS8qIG5leHQgcHJvYmUgaXMgbmVlZGVkIGZvciBPbW5pVmlzaW9uID8gKi8KLQl9Ci0Jc2Vuc29yMiA9IHZnYV8zd3JfcHJvYmUoZ3NwY2FfZGV2KTsKLQlpZiAoc2Vuc29yMiA+PSAwCi0JICAgICYmIHNlbnNvciA+PSAwKQorCWlmIChzZW5zb3IgPj0gMCkKIAkJcmV0dXJuIHNlbnNvcjsKLQlyZXR1cm4gc2Vuc29yMjsKKwlyZXR1cm4gdmdhXzN3cl9wcm9iZShnc3BjYV9kZXYpOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCkBAIC03MDA5LDIzICs3MDIyLDI0IEBACiAJaW50IHNlbnNvcjsKIAlpbnQgdmdhID0gMTsJCS8qIDE6IHZnYSwgMDogc2lmICovCiAJc3RhdGljIGNvbnN0IF9fdTggZ2FtbWFbU0VOU09SX01BWF0gPSB7Ci0JCTUsCS8qIFNFTlNPUl9DUzIxMDIgMCAqLwotCQk1LAkvKiBTRU5TT1JfQ1MyMTAySyAxICovCi0JCTQsCS8qIFNFTlNPUl9HQzAzMDUgMiAqLwotCQk0LAkvKiBTRU5TT1JfSERDUzIwMjBiIDMgKi8KLQkJNCwJLyogU0VOU09SX0hWNzEzMUIgNCAqLwotCQk0LAkvKiBTRU5TT1JfSFY3MTMxQyA1ICovCi0JCTQsCS8qIFNFTlNPUl9JQ00xMDVBIDYgKi8KLQkJNCwJLyogU0VOU09SX01DNTAxQ0IgNyAqLwotCQkzLAkvKiBTRU5TT1JfT1Y3NjIwIDggKi8KLQkJNCwJLyogU0VOU09SX09WNzYzMEMgOSAqLwotCQk0LAkvKiBTRU5TT1JfUEFTMTA2IDEwICovCi0JCTQsCS8qIFNFTlNPUl9QQVMyMDJCIDExICovCi0JCTQsCS8qIFNFTlNPUl9QQjAzMzAgMTIgKi8KLQkJNCwJLyogU0VOU09SX1BPMjAzMCAxMyAqLwotCQk0LAkvKiBTRU5TT1JfVEFTNTEzMENLIDE0ICovCi0JCTQsCS8qIFNFTlNPUl9UQVM1MTMwQ1hYIDE1ICovCi0JCTMsCS8qIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTAgMTYgKi8KKwkJNCwJLyogU0VOU09SX0FEQ00yNzAwIDAgKi8KKwkJNSwJLyogU0VOU09SX0NTMjEwMiAxICovCisJCTUsCS8qIFNFTlNPUl9DUzIxMDJLIDIgKi8KKwkJNCwJLyogU0VOU09SX0dDMDMwNSAzICovCisJCTQsCS8qIFNFTlNPUl9IRENTMjAyMGIgNCAqLworCQk0LAkvKiBTRU5TT1JfSFY3MTMxQiA1ICovCisJCTQsCS8qIFNFTlNPUl9IVjcxMzFDIDYgKi8KKwkJNCwJLyogU0VOU09SX0lDTTEwNUEgNyAqLworCQk0LAkvKiBTRU5TT1JfTUM1MDFDQiA4ICovCisJCTMsCS8qIFNFTlNPUl9PVjc2MjAgOSAqLworCQk0LAkvKiBTRU5TT1JfT1Y3NjMwQyAxMCAqLworCQk0LAkvKiBTRU5TT1JfUEFTMTA2IDExICovCisJCTQsCS8qIFNFTlNPUl9QQVMyMDJCIDEyICovCisJCTQsCS8qIFNFTlNPUl9QQjAzMzAgMTMgKi8KKwkJNCwJLyogU0VOU09SX1BPMjAzMCAxNCAqLworCQk0LAkvKiBTRU5TT1JfVEFTNTEzMENLIDE1ICovCisJCTQsCS8qIFNFTlNPUl9UQVM1MTMwQ1hYIDE2ICovCisJCTMsCS8qIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTAgMTcgKi8KIAl9OwogCiAJLyogZGVmaW5lIHNvbWUgc2Vuc29ycyBmcm9tIHRoZSB2ZW5kb3IvcHJvZHVjdCAqLwpAQCAtNzAzMyw3ICs3MDQ3LDcgQEAKIAlzZC0+c2Vuc29yID0gaWQtPmRyaXZlcl9pbmZvOwogCXNlbnNvciA9IHpjeHhfcHJvYmVTZW5zb3IoZ3NwY2FfZGV2KTsKIAlpZiAoc2Vuc29yID49IDApCi0JCVBERUJVRyhEX1BST0JFLCAicHJvYmUgc2Vuc29yIC0+ICUwMngiLCBzZW5zb3IpOworCQlQREVCVUcoRF9QUk9CRSwgInByb2JlIHNlbnNvciAtPiAlMDR4Iiwgc2Vuc29yKTsKIAlpZiAoKHVuc2lnbmVkKSBmb3JjZV9zZW5zb3IgPCBTRU5TT1JfTUFYKSB7CiAJCXNkLT5zZW5zb3IgPSBmb3JjZV9zZW5zb3I7CiAJCVBERUJVRyhEX1BST0JFLCAic2Vuc29yIGZvcmNlZCB0byAlZCIsIGZvcmNlX3NlbnNvcik7CkBAIC03MTEyLDYgKzcxMjYsMTAgQEAKIAkJCQlzZC0+Y2hpcF9yZXZpc2lvbik7CiAJCQlzZC0+c2Vuc29yID0gU0VOU09SX1RBUzUxMzBDSzsKIAkJCWJyZWFrOworCQljYXNlIDB4MTY6CisJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIEFEQ00yNzAwIik7CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX0FEQ00yNzAwOworCQkJYnJlYWs7CiAJCWNhc2UgMHgyOToKIAkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgR0MwMzA1Iik7CiAJCQlzZC0+c2Vuc29yID0gU0VOU09SX0dDMDMwNTsKQEAgLTcxMjksMTIgKzcxNDcsMTYgQEAKIAkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgT1Y3NjIwIik7CiAJCQlzZC0+c2Vuc29yID0gU0VOU09SX09WNzYyMDsKIAkJCWJyZWFrOworCQljYXNlIDB4NzYzMToKKwkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgT1Y3NjMwQyIpOworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9PVjc2MzBDOworCQkJYnJlYWs7CiAJCWNhc2UgMHg3NjQ4OgogCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBPVjc2NDgiKTsKIAkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfT1Y3NjIwOwkvKiBzYW1lIHNlbnNvciAoPykgKi8KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJUERFQlVHKERfRVJSfERfUFJPQkUsICJVbmtub3duIHNlbnNvciAlMDJ4Iiwgc2Vuc29yKTsKKwkJCVBERUJVRyhEX0VSUnxEX1BST0JFLCAiVW5rbm93biBzZW5zb3IgJTA0eCIsIHNlbnNvcik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTcxNDcsNyArNzE2OSw2IEBACiAJfQogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+ZXBhZGRyID0gMHgwMTsKIC8qZml4bWU6dGVzdCovCiAJZ3NwY2FfZGV2LT5uYmFsdC0tOwogCWlmICh2Z2EpIHsKQEAgLTcxNTcsMTIgKzcxNzgsMTIgQEAKIAkJY2FtLT5jYW1fbW9kZSA9IHNpZl9tb2RlOwogCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc2lmX21vZGUpOwogCX0KLQlzZC0+cWluZGV4ID0gMTsKIAlzZC0+YnJpZ2h0bmVzcyA9IHNkX2N0cmxzW1NEX0JSSUdIVE5FU1NdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CiAJc2QtPmNvbnRyYXN0ID0gc2RfY3RybHNbU0RfQ09OVFJBU1RdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CiAJc2QtPmdhbW1hID0gZ2FtbWFbKGludCkgc2QtPnNlbnNvcl07CiAJc2QtPmF1dG9nYWluID0gc2RfY3RybHNbU0RfQVVUT0dBSU5dLnFjdHJsLmRlZmF1bHRfdmFsdWU7CiAJc2QtPmxpZ2h0ZnJlcSA9IHNkX2N0cmxzW1NEX0ZSRVFdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX0RFRjsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX0dDMDMwNToKQEAgLTcxOTYsMjcgKzcyMTcsMzQgQEAKIAljb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiAqemMzX2luaXQ7CiAJaW50IG1vZGU7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uICppbml0X3RiW1NFTlNPUl9NQVhdWzJdID0gewotCQl7Y3MyMTAyX0luaXRpYWxTY2FsZSwgY3MyMTAyX0luaXRpYWx9LAkJLyogMCAqLwotCQl7Y3MyMTAyS19Jbml0aWFsU2NhbGUsIGNzMjEwMktfSW5pdGlhbH0sCS8qIDEgKi8KLQkJe2djMDMwNV9Jbml0aWFsLCBnYzAzMDVfSW5pdGlhbFNjYWxlfSwJCS8qIDIgKi8KLQkJe2hkY3MyMDIweGJfSW5pdGlhbFNjYWxlLCBoZGNzMjAyMHhiX0luaXRpYWx9LAkvKiAzICovCi0JCXtodjcxMzFieHhfSW5pdGlhbFNjYWxlLCBodjcxMzFieHhfSW5pdGlhbH0sCS8qIDQgKi8KLQkJe2h2NzEzMWN4eF9Jbml0aWFsU2NhbGUsIGh2NzEzMWN4eF9Jbml0aWFsfSwJLyogNSAqLwotCQl7aWNtMTA1YXh4X0luaXRpYWxTY2FsZSwgaWNtMTA1YXh4X0luaXRpYWx9LAkvKiA2ICovCi0JCXtNQzUwMUNCX0luaXRpYWxTY2FsZSwgTUM1MDFDQl9Jbml0aWFsfSwJLyogNyAqLwotCQl7T1Y3NjIwX21vZGUwLCBPVjc2MjBfbW9kZTF9LAkJCS8qIDggKi8KLQkJe292NzYzMGNfSW5pdGlhbFNjYWxlLCBvdjc2MzBjX0luaXRpYWx9LAkvKiA5ICovCi0JCXtwYXMxMDZiX0luaXRpYWxTY2FsZSwgcGFzMTA2Yl9Jbml0aWFsfSwJLyogMTAgKi8KLQkJe3BhczIwMmJfSW5pdGlhbCwgcGFzMjAyYl9Jbml0aWFsU2NhbGV9LAkvKiAxMSAqLwotCQl7cGIwMzMweHhfSW5pdGlhbFNjYWxlLCBwYjAzMzB4eF9Jbml0aWFsfSwJLyogMTIgKi8KKwkJe2FkY20yNzAwX0luaXRpYWwsIGFkY20yNzAwX0luaXRpYWxTY2FsZX0sCS8qIDAgKi8KKwkJe2NzMjEwMl9Jbml0aWFsU2NhbGUsIGNzMjEwMl9Jbml0aWFsfSwJCS8qIDEgKi8KKwkJe2NzMjEwMktfSW5pdGlhbFNjYWxlLCBjczIxMDJLX0luaXRpYWx9LAkvKiAyICovCisJCXtnYzAzMDVfSW5pdGlhbCwgZ2MwMzA1X0luaXRpYWxTY2FsZX0sCQkvKiAzICovCisJCXtoZGNzMjAyMHhiX0luaXRpYWxTY2FsZSwgaGRjczIwMjB4Yl9Jbml0aWFsfSwJLyogNCAqLworCQl7aHY3MTMxYnh4X0luaXRpYWxTY2FsZSwgaHY3MTMxYnh4X0luaXRpYWx9LAkvKiA1ICovCisJCXtodjcxMzFjeHhfSW5pdGlhbFNjYWxlLCBodjcxMzFjeHhfSW5pdGlhbH0sCS8qIDYgKi8KKwkJe2ljbTEwNWF4eF9Jbml0aWFsU2NhbGUsIGljbTEwNWF4eF9Jbml0aWFsfSwJLyogNyAqLworCQl7TUM1MDFDQl9Jbml0aWFsU2NhbGUsIE1DNTAxQ0JfSW5pdGlhbH0sCS8qIDggKi8KKwkJe09WNzYyMF9tb2RlMCwgT1Y3NjIwX21vZGUxfSwJCQkvKiA5ICovCisJCXtvdjc2MzBjX0luaXRpYWxTY2FsZSwgb3Y3NjMwY19Jbml0aWFsfSwJLyogMTAgKi8KKwkJe3BhczEwNmJfSW5pdGlhbFNjYWxlLCBwYXMxMDZiX0luaXRpYWx9LAkvKiAxMSAqLworCQl7cGFzMjAyYl9Jbml0aWFsLCBwYXMyMDJiX0luaXRpYWxTY2FsZX0sCS8qIDEyICovCisJCXtwYjAzMzB4eF9Jbml0aWFsU2NhbGUsIHBiMDMzMHh4X0luaXRpYWx9LAkvKiAxMyAqLwogLyogb3IJCXtwYjAzMzAzeF9Jbml0aWFsU2NhbGUsIHBiMDMzMDN4X0luaXRpYWx9LCAqLwotCQl7UE8yMDMwX21vZGUwLCBQTzIwMzBfbW9kZTF9LAkJCS8qIDEzICovCi0JCXt0YXM1MTMwQ0tfSW5pdGlhbFNjYWxlLCB0YXM1MTMwQ0tfSW5pdGlhbH0sCS8qIDE0ICovCi0JCXt0YXM1MTMwY3h4X0luaXRpYWxTY2FsZSwgdGFzNTEzMGN4eF9Jbml0aWFsfSwJLyogMTUgKi8KKwkJe1BPMjAzMF9tb2RlMCwgUE8yMDMwX21vZGUxfSwJCQkvKiAxNCAqLworCQl7dGFzNTEzMENLX0luaXRpYWxTY2FsZSwgdGFzNTEzMENLX0luaXRpYWx9LAkvKiAxNSAqLworCQl7dGFzNTEzMGN4eF9Jbml0aWFsU2NhbGUsIHRhczUxMzBjeHhfSW5pdGlhbH0sCS8qIDE2ICovCiAJCXt0YXM1MTMwY192ZjAyNTBfSW5pdGlhbFNjYWxlLCB0YXM1MTMwY192ZjAyNTBfSW5pdGlhbH0sCi0JCQkJCQkJCS8qIDE2ICovCisJCQkJCQkJCS8qIDE3ICovCiAJfTsKIAorCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KKwlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKKwlqcGVnX2RlZmluZShzZC0+anBlZ19oZHIsIGdzcGNhX2Rldi0+aGVpZ2h0LCBnc3BjYV9kZXYtPndpZHRoLAorCQkJMHgyMSk7CQkvKiBKUEVHIDQyMiAqLworCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CiAJemMzX2luaXQgPSBpbml0X3RiWyhpbnQpIHNkLT5zZW5zb3JdW21vZGVdOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewpAQCAtNzI0MywxMSArNzI3MSwxMiBAQAogCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHpjM19pbml0KTsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0FEQ00yNzAwOgogCWNhc2UgU0VOU09SX0dDMDMwNToKIAljYXNlIFNFTlNPUl9PVjc2MjA6CiAJY2FzZSBTRU5TT1JfUE8yMDMwOgogCWNhc2UgU0VOU09SX1RBUzUxMzBDX1ZGMDI1MDoKLQkJbXNsZWVwKDEwMCk7CQkJLyogPz8gKi8KKy8qCQltc2xlZXAoMTAwKTsJCQkgKiA/PyAqLwogCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAwMik7CS8qIC0tPiAweDQwICovCiAJCXJlZ193KGRldiwgMHgwOSwgMHgwMWFkKTsJLyogKGZyb20gd2luIHRyYWNlcykgKi8KIAkJcmVnX3coZGV2LCAweDE1LCAweDAxYWUpOwpAQCAtNzI2MCw2ICs3Mjg5LDcgQEAKIAlzZXRtYXRyaXgoZ3NwY2FfZGV2KTsKIAlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTI3MDA6CiAJY2FzZSBTRU5TT1JfT1Y3NjIwOgogCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAwOCk7CiAJCXJlZ193KGRldiwgMHgwMCwgMHgwMDA4KTsKQEAgLTczMDEsNiArNzMzMSwxMyBAQAogCXNldGxpZ2h0ZnJlcShnc3BjYV9kZXYpOwogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTI3MDA6CisJCXJlZ193KGRldiwgMHgwOSwgMHgwMWFkKTsJLyogKGZyb20gd2luIHRyYWNlcykgKi8KKwkJcmVnX3coZGV2LCAweDE1LCAweDAxYWUpOworCQlyZWdfdyhkZXYsIDB4MDIsIDB4MDE4MCk7CisJCQkJCQkvKiBtcy13aW4gKyAqLworCQlyZWdfdyhkZXYsIDB4NDAsIDB4MDExNyk7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX0dDMDMwNToKIAkJcmVnX3coZGV2LCAweDA5LCAweDAxYWQpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLwogCQlyZWdfdyhkZXYsIDB4MTUsIDB4MDFhZSk7CkBAIC03MzIzLDE5ICs3MzYwLDE2IEBACiAKIAlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewotCWNhc2UgU0VOU09SX1BBUzIwMkI6Ci0JCXJlZ193KGRldiwgMHgwMCwgMHgwMDA3KTsJLyogKGZyb20gd2luIHRyYWNlcykgKi8KLQkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfUE8yMDMwOgogCQltc2xlZXAoNTAwKTsKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMDgpOwogCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAwNyk7CisJCS8qZmFsbCB0aHJ1Ki8KKwljYXNlIFNFTlNPUl9QQVMyMDJCOgogCQlyZWdfdyhkZXYsIDB4MDAsIDB4MDAwNyk7CS8qIChmcm9tIHdpbiB0cmFjZXMpICovCi0JCXJlZ193KGRldiwgMHgwMiwgMHgwMDA4KTsKKwkJcmVnX3coZGV2LCAweDAyLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElORyk7CiAJCWJyZWFrOwogCX0KLQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfUEFTMjAyQikKLQkJcmVnX3coZGV2LCAweDAyLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElORyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTczNDQsNiArNzM3OCw3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCisJa2ZyZWUoc2QtPmpwZWdfaGRyKTsKIAlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKIAkJcmV0dXJuOwogCXNlbmRfdW5rbm93bihnc3BjYV9kZXYtPmRldiwgc2QtPnNlbnNvcik7CkBAIC03MzU0LDE0ICs3Mzg5LDE1IEBACiAJCQlfX3U4ICpkYXRhLAogCQkJaW50IGxlbikKIHsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlpZiAoZGF0YVswXSA9PSAweGZmICYmIGRhdGFbMV0gPT0gMHhkOCkgewkvKiBzdGFydCBvZiBmcmFtZSAqLwogCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBmcmFtZSwKIAkJCQkJZGF0YSwgMCk7CiAJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgaW4gdGhlIG5ldyBmcmFtZSAqLwotCQlqcGVnX3B1dF9oZWFkZXIoZ3NwY2FfZGV2LCBmcmFtZSwKLQkJCQkoKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXYpLT5xaW5kZXgsCi0JCQkJMHgyMSk7CisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQlzZC0+anBlZ19oZHIsIEpQRUdfSERSX1NaKTsKKwogCQkvKiByZW1vdmUgdGhlIHdlYmNhbSdzIGhlYWRlcjoKIAkJICogZmYgZDggZmYgZmUgMDAgMGUgMDAgMDAgc3Mgc3MgMDAgMDEgd3cgd3cgaGggaGggcHAgcHAKIAkJICoJLSAnc3Mgc3MnIGlzIHRoZSBmcmFtZSBzZXF1ZW5jZSBudW1iZXIgKEJFKQpAQCAtNzUwMyw2ICs3NTM5LDM0IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKGpjb21wLT5xdWFsaXR5IDwgUVVBTElUWV9NSU4pCisJCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9NSU47CisJZWxzZSBpZiAoamNvbXAtPnF1YWxpdHkgPiBRVUFMSVRZX01BWCkKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01BWDsKKwllbHNlCisJCXNkLT5xdWFsaXR5ID0gamNvbXAtPnF1YWxpdHk7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCW1lbXNldChqY29tcCwgMCwgc2l6ZW9mICpqY29tcCk7CisJamNvbXAtPnF1YWxpdHkgPSBzZC0+cXVhbGl0eTsKKwlqY29tcC0+anBlZ19tYXJrZXJzID0gVjRMMl9KUEVHX01BUktFUl9ESFQKKwkJCXwgVjRMMl9KUEVHX01BUktFUl9EUVQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCkBAIC03NTEzLDYgKzc1NzcsOCBAQAogCS5zdG9wMCA9IHNkX3N0b3AwLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAogCS5xdWVyeW1lbnUgPSBzZF9xdWVyeW1lbnUsCisJLmdldF9qY29tcCA9IHNkX2dldF9qY29tcCwKKwkuc2V0X2pjb21wID0gc2Rfc2V0X2pjb21wLAogfTsKIAogc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CkBAIC03NTYzLDExICs3NjI5LDkgQEAKIAl7VVNCX0RFVklDRSgweDA1NWYsIDB4ZDAwNCl9LAogCXtVU0JfREVWSUNFKDB4MDY5OCwgMHgyMDAzKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweDAzMDEpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFTMTA2fSwKLQl7VVNCX0RFVklDRSgweDBhYzgsIDB4MDMwMil9LAorCXtVU0JfREVWSUNFKDB4MGFjOCwgMHgwMzAyKSwgLmRyaXZlcl9pbmZvID0gU0VOU09SX1BBUzEwNn0sCiAJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweDMwMWIpfSwKLSNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1pDMDMwMSAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX1pDMDMwMV9NT0RVTEUKIAl7VVNCX0RFVklDRSgweDBhYzgsIDB4MzAzYil9LAotI2VuZGlmCiAJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweDMwNWIpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfVEFTNTEzMENfVkYwMjUwfSwKIAl7VVNCX0RFVklDRSgweDBhYzgsIDB4MzA3Yil9LAogCXtVU0JfREVWSUNFKDB4MTBmZCwgMHgwMTI4KX0sCkBAIC03NjAwLDggKzc2NjQsMTAgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMjQ3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL0tjb25maWcKQEAgLTAsMCArMSwxMCBAQAorCitjb25maWcgVklERU9fSERQVlIKKwl0cmlzdGF0ZSAiSGF1cHBhdWdlIEhEIFBWUiBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fREVWCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgSGF1cHBhdWdlJ3MgSEQgUFZSIFVTQiBkZXZpY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGhkcHZyCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMjMwZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAoraGRwdnItb2Jqcwk6PSBoZHB2ci1jb250cm9sLm8gaGRwdnItY29yZS5vIGhkcHZyLXZpZGVvLm8KKworaGRwdnItJChDT05GSUdfSTJDKSArPSBoZHB2ci1pMmMubworCitvYmotJChDT05GSUdfVklERU9fSERQVlIpICs9IGhkcHZyLm8KKworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS92aWRlbworCitFWFRSQV9DRkxBR1MgKz0gJChleHRyYS1jZmxhZ3MteSkgJChleHRyYS1jZmxhZ3MtbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29udHJvbC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb250cm9sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY3OTE3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29udHJvbC5jCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogSGF1cHBhdWdlIEhEIFBWUiBVU0IgZHJpdmVyIC0gdmlkZW8gNCBsaW51eCAyIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgICAgIEphbm5lIEdydW5hdSAoakBqYW5uYXUubmV0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisKKyNpbmNsdWRlICJoZHB2ci5oIgorCisKK2ludCBoZHB2cl9jb25maWdfY2FsbChzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIHVpbnQgdmFsdWUsIHU4IHZhbGJ1ZikKK3sKKwlpbnQgcmV0OworCWNoYXIgcmVxdWVzdF90eXBlID0gMHgzOCwgc25kX3JlcXVlc3QgPSAweDAxOworCisJbXNsZWVwKDEwKTsKKworCW11dGV4X2xvY2soJmRldi0+dXNiY19tdXRleCk7CisJZGV2LT51c2JjX2J1ZlswXSA9IHZhbGJ1ZjsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkgICAgICBzbmRfcmVxdWVzdCwgMHgwMCB8IHJlcXVlc3RfdHlwZSwKKwkJCSAgICAgIHZhbHVlLCBDVFJMX0RFRkFVTFRfSU5ERVgsCisJCQkgICAgICBkZXYtPnVzYmNfYnVmLCAxLCAxMDAwMCk7CisKKwltdXRleF91bmxvY2soJmRldi0+dXNiY19tdXRleCk7CisJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJICJjb25maWcgY2FsbCByZXF1ZXN0IGZvciB2YWx1ZSAweCV4IHJldHVybmVkICVkXG4iLCB2YWx1ZSwKKwkJIHJldCk7CisKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7Cit9CisKK3N0cnVjdCBoZHB2cl92aWRlb19pbmZvICpnZXRfdmlkZW9faW5mbyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhkcHZyX3ZpZGVvX2luZm8gKnZpZGluZiA9IE5VTEw7CisjaWZkZWYgSERQVlJfREVCVUcKKwljaGFyIHByaW50X2J1ZlsxNV07CisjZW5kaWYKKwlpbnQgcmV0OworCisJdmlkaW5mID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhkcHZyX3ZpZGVvX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZpZGluZikgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwltdXRleF9sb2NrKCZkZXYtPnVzYmNfbXV0ZXgpOworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCisJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCSAgICAgIDB4ODEsIDB4ODAgfCAweDM4LAorCQkJICAgICAgMHgxNDAwLCAweDAwMDMsCisJCQkgICAgICBkZXYtPnVzYmNfYnVmLCA1LAorCQkJICAgICAgMTAwMCk7CisJaWYgKHJldCA9PSA1KSB7CisJCXZpZGluZi0+d2lkdGgJPSBkZXYtPnVzYmNfYnVmWzFdIDw8IDggfCBkZXYtPnVzYmNfYnVmWzBdOworCQl2aWRpbmYtPmhlaWdodAk9IGRldi0+dXNiY19idWZbM10gPDwgOCB8IGRldi0+dXNiY19idWZbMl07CisJCXZpZGluZi0+ZnBzCT0gZGV2LT51c2JjX2J1Zls0XTsKKwl9CisKKyNpZmRlZiBIRFBWUl9ERUJVRworCWlmIChoZHB2cl9kZWJ1ZyAmIE1TR19JTkZPKSB7CisJCWhleF9kdW1wX3RvX2J1ZmZlcihkZXYtPnVzYmNfYnVmLCA1LCAxNiwgMSwgcHJpbnRfYnVmLAorCQkJCSAgIHNpemVvZihwcmludF9idWYpLCAwKTsKKwkJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJCSAiZ2V0IHZpZGVvIGluZm8gcmV0dXJuZWQ6ICVkLCAlc1xuIiwgcmV0LCBwcmludF9idWYpOworCX0KKyNlbmRpZgorCW11dGV4X3VubG9jaygmZGV2LT51c2JjX211dGV4KTsKKworCWlmICghdmlkaW5mLT53aWR0aCB8fCAhdmlkaW5mLT5oZWlnaHQgfHwgIXZpZGluZi0+ZnBzKSB7CisJCWtmcmVlKHZpZGluZik7CisJCXZpZGluZiA9IE5VTEw7CisJfQorZXJyOgorCXJldHVybiB2aWRpbmY7Cit9CisKK2ludCBnZXRfaW5wdXRfbGluZXNfaW5mbyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisjaWZkZWYgSERQVlJfREVCVUcKKwljaGFyIHByaW50X2J1Zls5XTsKKyNlbmRpZgorCWludCByZXQsIGxpbmVzOworCisJbXV0ZXhfbG9jaygmZGV2LT51c2JjX211dGV4KTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkgICAgICAweDgxLCAweDgwIHwgMHgzOCwKKwkJCSAgICAgIDB4MTgwMCwgMHgwMDAzLAorCQkJICAgICAgZGV2LT51c2JjX2J1ZiwgMywKKwkJCSAgICAgIDEwMDApOworCisjaWZkZWYgSERQVlJfREVCVUcKKwlpZiAoaGRwdnJfZGVidWcgJiBNU0dfSU5GTykgeworCQloZXhfZHVtcF90b19idWZmZXIoZGV2LT51c2JjX2J1ZiwgMywgMTYsIDEsIHByaW50X2J1ZiwKKwkJCQkgICBzaXplb2YocHJpbnRfYnVmKSwgMCk7CisJCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCQkgImdldCBpbnB1dCBsaW5lcyBpbmZvIHJldHVybmVkOiAlZCwgJXNcbiIsIHJldCwKKwkJCSBwcmludF9idWYpOworCX0KKyNlbmRpZgorCWxpbmVzID0gZGV2LT51c2JjX2J1ZlsxXSA8PCA4IHwgZGV2LT51c2JjX2J1ZlswXTsKKwltdXRleF91bmxvY2soJmRldi0+dXNiY19tdXRleCk7CisJcmV0dXJuIGxpbmVzOworfQorCisKK2ludCBoZHB2cl9zZXRfYml0cmF0ZShzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmRldi0+dXNiY19tdXRleCk7CisJbWVtc2V0KGRldi0+dXNiY19idWYsIDAsIDQpOworCWRldi0+dXNiY19idWZbMF0gPSBkZXYtPm9wdGlvbnMuYml0cmF0ZTsKKwlkZXYtPnVzYmNfYnVmWzJdID0gZGV2LT5vcHRpb25zLnBlYWtfYml0cmF0ZTsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCSAgICAgIDB4MDEsIDB4MzgsIENUUkxfQklUUkFURV9WQUxVRSwKKwkJCSAgICAgIENUUkxfREVGQVVMVF9JTkRFWCwgZGV2LT51c2JjX2J1ZiwgNCwgMTAwMCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnVzYmNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGhkcHZyX3NldF9hdWRpbyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIHU4IGlucHV0LAorCQkgICAgZW51bSB2NGwyX21wZWdfYXVkaW9fZW5jb2RpbmcgY29kZWMpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZGV2LT5mbGFncyAmIEhEUFZSX0ZMQUdfQUMzX0NBUCkgeworCQltdXRleF9sb2NrKCZkZXYtPnVzYmNfbXV0ZXgpOworCQltZW1zZXQoZGV2LT51c2JjX2J1ZiwgMCwgMik7CisJCWRldi0+dXNiY19idWZbMF0gPSBpbnB1dDsKKwkJaWYgKGNvZGVjID09IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUMpCisJCQlkZXYtPnVzYmNfYnVmWzFdID0gMDsKKwkJZWxzZSBpZiAoY29kZWMgPT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMykKKwkJCWRldi0+dXNiY19idWZbMV0gPSAxOworCQllbHNlIHsKKwkJCW11dGV4X3VubG9jaygmZGV2LT51c2JjX211dGV4KTsKKwkJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiaW52YWxpZCBhdWRpbyBjb2RlYyAlZFxuIiwKKwkJCQkgY29kZWMpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJCSAgICAgIDB4MDEsIDB4MzgsIENUUkxfQVVESU9fSU5QVVRfVkFMVUUsCisJCQkJICAgICAgQ1RSTF9ERUZBVUxUX0lOREVYLCBkZXYtPnVzYmNfYnVmLCAyLAorCQkJCSAgICAgIDEwMDApOworCQltdXRleF91bmxvY2soJmRldi0+dXNiY19tdXRleCk7CisJCWlmIChyZXQgPT0gMikKKwkJCXJldCA9IDA7CisJfSBlbHNlCisJCXJldCA9IGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9BVURJT19JTlBVVF9WQUxVRSwKKwkJCQkJZGV2LT5vcHRpb25zLmF1ZGlvX2lucHV0KzEpOworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworaW50IGhkcHZyX3NldF9vcHRpb25zKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKK3sKKyAgICAgICBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfVklERU9fU1REX1RZUEUsIGRldi0+b3B0aW9ucy52aWRlb19zdGQpOworCisgICAgICAgaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX1ZJREVPX0lOUFVUX1ZBTFVFLAorCQkJIGRldi0+b3B0aW9ucy52aWRlb19pbnB1dCsxKTsKKworICAgICAgIGhkcHZyX3NldF9hdWRpbyhkZXYsIGRldi0+b3B0aW9ucy5hdWRpb19pbnB1dCsxLAorCQkgICAgICAgZGV2LT5vcHRpb25zLmF1ZGlvX2NvZGVjKTsKKworICAgICAgIGhkcHZyX3NldF9iaXRyYXRlKGRldik7CisgICAgICAgaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX0JJVFJBVEVfTU9ERV9WQUxVRSwKKwkJCSBkZXYtPm9wdGlvbnMuYml0cmF0ZV9tb2RlKTsKKyAgICAgICBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfR09QX01PREVfVkFMVUUsIGRldi0+b3B0aW9ucy5nb3BfbW9kZSk7CisKKyAgICAgICBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfQlJJR0hUTkVTUywgZGV2LT5vcHRpb25zLmJyaWdodG5lc3MpOworICAgICAgIGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9DT05UUkFTVCwgICBkZXYtPm9wdGlvbnMuY29udHJhc3QpOworICAgICAgIGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9IVUUsICAgICAgICBkZXYtPm9wdGlvbnMuaHVlKTsKKyAgICAgICBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfU0FUVVJBVElPTiwgZGV2LT5vcHRpb25zLnNhdHVyYXRpb24pOworICAgICAgIGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9TSEFSUE5FU1MsICBkZXYtPm9wdGlvbnMuc2hhcnBuZXNzKTsKKworICAgICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODhiZDVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMKQEAgLTAsMCArMSw0NjYgQEAKKy8qCisgKiBIYXVwcGF1Z2UgSEQgUFZSIFVTQiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA4ICAgICAgSmFubmUgR3J1bmF1IChqQGphbm5hdS5uZXQpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggICAgICBKb2huIFBvZXQKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisKKyNpbmNsdWRlICJoZHB2ci5oIgorCitzdGF0aWMgaW50IHZpZGVvX25yW0hEUFZSX01BWF0gPSB7WzAgLi4uIChIRFBWUl9NQVggLSAxKV0gPSBVTlNFVH07Cittb2R1bGVfcGFyYW1fYXJyYXkodmlkZW9fbnIsIGludCwgTlVMTCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLCAidmlkZW8gZGV2aWNlIG51bWJlciAoLTE9QXV0bykiKTsKKworLyogaG9sZHMgdGhlIG51bWJlciBvZiBjdXJyZW50bHkgcmVnaXN0ZXJlZCBkZXZpY2VzICovCitzdGF0aWMgYXRvbWljX3QgZGV2X25yID0gQVRPTUlDX0lOSVQoLTEpOworCitpbnQgaGRwdnJfZGVidWc7Cittb2R1bGVfcGFyYW0oaGRwdnJfZGVidWcsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoaGRwdnJfZGVidWcsICJlbmFibGUgZGVidWdnaW5nIG91dHB1dCIpOworCit1aW50IGRlZmF1bHRfdmlkZW9faW5wdXQgPSBIRFBWUl9WSURFT19JTlBVVFM7Cittb2R1bGVfcGFyYW0oZGVmYXVsdF92aWRlb19pbnB1dCwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVmYXVsdF92aWRlb19pbnB1dCwgImRlZmF1bHQgdmlkZW8gaW5wdXQ6IDA9Q29tcG9uZW50IC8gIgorCQkgIjE9Uy1WaWRlbyAvIDI9Q29tcG9zaXRlIik7CisKK3VpbnQgZGVmYXVsdF9hdWRpb19pbnB1dCA9IEhEUFZSX0FVRElPX0lOUFVUUzsKK21vZHVsZV9wYXJhbShkZWZhdWx0X2F1ZGlvX2lucHV0LCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWZhdWx0X2F1ZGlvX2lucHV0LCAiZGVmYXVsdCBhdWRpbyBpbnB1dDogMD1SQ0EgYmFjayAvICIKKwkJICIxPVJDQSBmcm9udCAvIDI9Uy9QRElGIik7CisKK3N0YXRpYyBpbnQgYm9vc3RfYXVkaW87Cittb2R1bGVfcGFyYW0oYm9vc3RfYXVkaW8sIGJvb2wsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGJvb3N0X2F1ZGlvLCAiYm9vc3QgdGhlIGF1ZGlvIHNpZ25hbCIpOworCisKKy8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBoZHB2cl90YWJsZVtdID0geworCXsgVVNCX0RFVklDRShIRF9QVlJfVkVORE9SX0lELCBIRF9QVlJfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSERfUFZSX1ZFTkRPUl9JRCwgSERfUFZSX1BST0RVQ1RfSUQxKSB9LAorCXsgVVNCX0RFVklDRShIRF9QVlJfVkVORE9SX0lELCBIRF9QVlJfUFJPRFVDVF9JRDIpIH0sCisJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBoZHB2cl90YWJsZSk7CisKKwordm9pZCBoZHB2cl9kZWxldGUoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCWhkcHZyX2ZyZWVfYnVmZmVycyhkZXYpOworCisJaWYgKGRldi0+dmlkZW9fZGV2KQorCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZpZGVvX2Rldik7CisKKwl1c2JfcHV0X2RldihkZXYtPnVkZXYpOworfQorCitzdGF0aWMgdm9pZCBjaGFsbGVuZ2UodTggKmJ5dGVzKQoreworCXU2NCAqaTY0UCwgdG1wNjQ7CisJdWludCBpLCBpZHg7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IDMyOyArK2lkeCkgeworCisJCWlmIChpZHggJiAweDMpCisJCQlieXRlc1soaWR4ID4+IDMpICsgM10gPSBieXRlc1soaWR4ID4+IDIpICYgMHgzXTsKKworCQlzd2l0Y2ggKGlkeCAmIDB4MykgeworCQljYXNlIDB4MzoKKwkJCWJ5dGVzWzJdICs9IGJ5dGVzWzNdICogNCArIGJ5dGVzWzRdICsgYnl0ZXNbNV07CisJCQlieXRlc1s0XSArPSBieXRlc1soaWR4ICYgMHgxKSAqIDJdICogOSArIDk7CisJCQlicmVhazsKKwkJY2FzZSAweDE6CisJCQlieXRlc1swXSAqPSA4OworCQkJYnl0ZXNbMF0gKz0gNyppZHggKyA0OworCQkJYnl0ZXNbNl0gKz0gYnl0ZXNbM10gKiAzOworCQkJYnJlYWs7CisJCWNhc2UgMHgwOgorCQkJYnl0ZXNbMyAtIChpZHggPj4gMyldID0gYnl0ZXNbaWR4ID4+IDJdOworCQkJYnl0ZXNbNV0gKz0gYnl0ZXNbNl0gKiAzOworCQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCQlieXRlc1szXSAqPSBieXRlc1szXSArIDE7CisJCQlicmVhazsKKwkJY2FzZSAweDI6CisJCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQkJCWJ5dGVzWzFdICo9IGJ5dGVzWzZdICsgMTsKKwkJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCQlpNjRQID0gKHU2NCAqKWJ5dGVzOworCQkJCXRtcDY0ID0gbGU2NF90b19jcHVwKGk2NFApOworCQkJCXRtcDY0IDw8PSBieXRlc1s3XSAmIDB4MGY7CisJCQkJKmk2NFAgKz0gY3B1X3RvX2xlNjQodG1wNjQpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8qIHRyeSB0byBpbml0IHRoZSBkZXZpY2UgbGlrZSB0aGUgd2luZG93cyBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgZGV2aWNlX2F1dGhvcml6YXRpb24oc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCisJaW50IHJldCwgcmV0dmFsID0gLUVOT01FTTsKKwljaGFyIHJlcXVlc3RfdHlwZSA9IDB4MzgsIHJjdl9yZXF1ZXN0ID0gMHg4MTsKKwljaGFyICpyZXNwb25zZTsKKyNpZmRlZiBIRFBWUl9ERUJVRworCXNpemVfdCBidWZfc2l6ZSA9IDQ2OworCWNoYXIgKnByaW50X2J1ZiA9IGt6YWxsb2MoNSpidWZfc2l6ZSsxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaW50X2J1ZikgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlnb3RvIGVycm9yOworCX0KKyNlbmRpZgorCisJbXV0ZXhfbG9jaygmZGV2LT51c2JjX211dGV4KTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkgICAgICByY3ZfcmVxdWVzdCwgMHg4MCB8IHJlcXVlc3RfdHlwZSwKKwkJCSAgICAgIDB4MDQwMCwgMHgwMDAzLAorCQkJICAgICAgZGV2LT51c2JjX2J1ZiwgNDYsCisJCQkgICAgICAxMDAwMCk7CisJaWYgKHJldCAhPSA0NikgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwKKwkJCSAidW5leHBlY3RlZCBhbnN3ZXIgb2Ygc3RhdHVzIHJlcXVlc3QsIGxlbiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJvcjsKKwl9CisjaWZkZWYgSERQVlJfREVCVUcKKwllbHNlIHsKKwkJaGV4X2R1bXBfdG9fYnVmZmVyKGRldi0+dXNiY19idWYsIDQ2LCAxNiwgMSwgcHJpbnRfYnVmLAorCQkJCSAgIHNpemVvZihwcmludF9idWYpLCAwKTsKKwkJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJCSAiU3RhdHVzIHJlcXVlc3QgcmV0dXJuZWQsIGxlbiAlZDogJXNcbiIsCisJCQkgcmV0LCBwcmludF9idWYpOworCX0KKyNlbmRpZgorCWlmIChkZXYtPnVzYmNfYnVmWzFdID09IEhEUFZSX0ZJUk1XQVJFX1ZFUlNJT04pIHsKKwkJZGV2LT5mbGFncyAmPSB+SERQVlJfRkxBR19BQzNfQ0FQOworCX0gZWxzZSBpZiAoZGV2LT51c2JjX2J1ZlsxXSA9PSBIRFBWUl9GSVJNV0FSRV9WRVJTSU9OX0FDMykgeworCQlkZXYtPmZsYWdzIHw9IEhEUFZSX0ZMQUdfQUMzX0NBUDsKKwl9IGVsc2UgaWYgKGRldi0+dXNiY19idWZbMV0gPiBIRFBWUl9GSVJNV0FSRV9WRVJTSU9OX0FDMykgeworCQl2NGwyX2luZm8oJmRldi0+djRsMl9kZXYsICJ1bnRlc3RlZCBmaXJtd2FyZSB2ZXJzaW9uIDB4JXgsICIKKwkJCSAgInRoZSBkcml2ZXIgbWlnaHQgbm90IHdvcmtcbiIsIGRldi0+dXNiY19idWZbMV0pOworCQlkZXYtPmZsYWdzIHw9IEhEUFZSX0ZMQUdfQUMzX0NBUDsKKwl9IGVsc2UgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgInVua25vd24gZmlybXdhcmUgdmVyc2lvbiAweCV4XG4iLAorCQkJZGV2LT51c2JjX2J1ZlsxXSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcmVzcG9uc2UgPSBkZXYtPnVzYmNfYnVmKzM4OworI2lmZGVmIEhEUFZSX0RFQlVHCisJaGV4X2R1bXBfdG9fYnVmZmVyKHJlc3BvbnNlLCA4LCAxNiwgMSwgcHJpbnRfYnVmLCBzaXplb2YocHJpbnRfYnVmKSwgMCk7CisJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwgImNoYWxsZW5nZTogJXNcbiIsCisJCSBwcmludF9idWYpOworI2VuZGlmCisJY2hhbGxlbmdlKHJlc3BvbnNlKTsKKyNpZmRlZiBIRFBWUl9ERUJVRworCWhleF9kdW1wX3RvX2J1ZmZlcihyZXNwb25zZSwgOCwgMTYsIDEsIHByaW50X2J1Ziwgc2l6ZW9mKHByaW50X2J1ZiksIDApOworCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsICIgcmVzcG9uc2U6ICVzXG4iLAorCQkgcHJpbnRfYnVmKTsKKyNlbmRpZgorCisJbXNsZWVwKDEwMCk7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgMHhkMSwgMHgwMCB8IHJlcXVlc3RfdHlwZSwKKwkJCSAgICAgIDB4MDAwMCwgMHgwMDAwLAorCQkJICAgICAgcmVzcG9uc2UsIDgsCisJCQkgICAgICAxMDAwMCk7CisJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJICJtYWdpYyByZXF1ZXN0IHJldHVybmVkICVkXG4iLCByZXQpOworCW11dGV4X3VubG9jaygmZGV2LT51c2JjX211dGV4KTsKKworCXJldHZhbCA9IHJldCAhPSA4OworZXJyb3I6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBoZHB2cl9kZXZpY2VfaW5pdChzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKwl1OCAqYnVmOworCXN0cnVjdCBoZHB2cl92aWRlb19pbmZvICp2aWRpbmY7CisKKwlpZiAoZGV2aWNlX2F1dGhvcml6YXRpb24oZGV2KSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwkvKiBkZWZhdWx0IG9wdGlvbnMgZm9yIGluaXQgKi8KKwloZHB2cl9zZXRfb3B0aW9ucyhkZXYpOworCisJLyogc2V0IGZpbHRlciBvcHRpb25zICovCisJbXV0ZXhfbG9jaygmZGV2LT51c2JjX211dGV4KTsKKwlidWYgPSBkZXYtPnVzYmNfYnVmOworCWJ1ZlswXSA9IDB4MDM7IGJ1ZlsxXSA9IDB4MDM7IGJ1ZlsyXSA9IDB4MDA7IGJ1ZlszXSA9IDB4MDA7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgMHgwMSwgMHgzOCwKKwkJCSAgICAgIENUUkxfTE9XX1BBU1NfRklMVEVSX1ZBTFVFLCBDVFJMX0RFRkFVTFRfSU5ERVgsCisJCQkgICAgICBidWYsIDQsCisJCQkgICAgICAxMDAwKTsKKwl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkgImNvbnRyb2wgcmVxdWVzdCByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwltdXRleF91bmxvY2soJmRldi0+dXNiY19tdXRleCk7CisKKwl2aWRpbmYgPSBnZXRfdmlkZW9faW5mbyhkZXYpOworCWlmICghdmlkaW5mKQorCQl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkJIm5vIHZhbGlkIHZpZGVvIHNpZ25hbCBvciBkZXZpY2UgaW5pdCBmYWlsZWRcbiIpOworCWVsc2UKKwkJa2ZyZWUodmlkaW5mKTsKKworCS8qIGVuYWJsZSBmYW4gYW5kIGJsaW5nIGxlZHMgKi8KKwltdXRleF9sb2NrKCZkZXYtPnVzYmNfbXV0ZXgpOworCWJ1ZlswXSA9IDB4MTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkgICAgICAweGQ0LCAweDM4LCAwLCAwLCBidWYsIDEsCisJCQkgICAgICAxMDAwKTsKKwl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkgImNvbnRyb2wgcmVxdWVzdCByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKworCS8qIGJvb3N0IGFuYWxvZyBhdWRpbyAqLworCWJ1ZlswXSA9IGJvb3N0X2F1ZGlvOworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCSAgICAgIDB4ZDUsIDB4MzgsIDAsIDAsIGJ1ZiwgMSwKKwkJCSAgICAgIDEwMDApOworCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCSAiY29udHJvbCByZXF1ZXN0IHJldHVybmVkICVkXG4iLCByZXQpOworCW11dGV4X3VubG9jaygmZGV2LT51c2JjX211dGV4KTsKKworCWRldi0+c3RhdHVzID0gU1RBVFVTX0lETEU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRwdnJfb3B0aW9ucyBoZHB2cl9kZWZhdWx0X29wdGlvbnMgPSB7CisJLnZpZGVvX3N0ZAk9IEhEUFZSXzYwSFosCisJLnZpZGVvX2lucHV0CT0gSERQVlJfQ09NUE9ORU5ULAorCS5hdWRpb19pbnB1dAk9IEhEUFZSX1JDQV9CQUNLLAorCS5iaXRyYXRlCT0gNjUsIC8qIDYgbWJwcyAqLworCS5wZWFrX2JpdHJhdGUJPSA5MCwgLyogOSBtYnBzICovCisJLmJpdHJhdGVfbW9kZQk9IEhEUFZSX0NPTlNUQU5ULAorCS5nb3BfbW9kZQk9IEhEUFZSX1NJTVBMRV9JRFJfR09QLAorCS5hdWRpb19jb2RlYwk9IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUMsCisJLmJyaWdodG5lc3MJPSAweDg2LAorCS5jb250cmFzdAk9IDB4ODAsCisJLmh1ZQkJPSAweDgwLAorCS5zYXR1cmF0aW9uCT0gMHg4MCwKKwkuc2hhcnBuZXNzCT0gMHg4MCwKK307CisKK3N0YXRpYyBpbnQgaGRwdnJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXY7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCXNpemVfdCBidWZmZXJfc2l6ZTsKKwlpbnQgaTsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikgeworCQllcnIoIk91dCBvZiBtZW1vcnkiKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiByZWdpc3RlciB2NGwyX2RldmljZSBlYXJseSBzbyBpdCBjYW4gYmUgdXNlZCBmb3IgcHJpbnRrcyAqLworCWlmICh2NGwyX2RldmljZV9yZWdpc3RlcigmaW50ZXJmYWNlLT5kZXYsICZkZXYtPnY0bDJfZGV2KSkgeworCQllcnIoInY0bDJfZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZCIpOworCQlnb3RvIGVycm9yOworCX0KKworCW11dGV4X2luaXQoJmRldi0+aW9fbXV0ZXgpOworCW11dGV4X2luaXQoJmRldi0+aTJjX211dGV4KTsKKwltdXRleF9pbml0KCZkZXYtPnVzYmNfbXV0ZXgpOworCWRldi0+dXNiY19idWYgPSBrbWFsbG9jKDY0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+dXNiY19idWYpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndhaXRfYnVmZmVyKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndhaXRfZGF0YSk7CisKKwlkZXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJoZHB2cl9idWZmZXIiKTsKKwlpZiAoIWRldi0+d29ya3F1ZXVlKQorCQlnb3RvIGVycm9yOworCisJLyogaW5pdCB2aWRlbyB0cmFuc2ZlciBxdWV1ZXMgKi8KKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5mcmVlX2J1ZmZfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+cmVjX2J1ZmZfbGlzdCk7CisKKwlkZXYtPm9wdGlvbnMgPSBoZHB2cl9kZWZhdWx0X29wdGlvbnM7CisKKwlpZiAoZGVmYXVsdF92aWRlb19pbnB1dCA8IEhEUFZSX1ZJREVPX0lOUFVUUykKKwkJZGV2LT5vcHRpb25zLnZpZGVvX2lucHV0ID0gZGVmYXVsdF92aWRlb19pbnB1dDsKKworCWlmIChkZWZhdWx0X2F1ZGlvX2lucHV0IDwgSERQVlJfQVVESU9fSU5QVVRTKQorCQlkZXYtPm9wdGlvbnMuYXVkaW9faW5wdXQgPSBkZWZhdWx0X2F1ZGlvX2lucHV0OworCisJZGV2LT51ZGV2ID0gdXNiX2dldF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpKTsKKworCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gKi8KKwkvKiB1c2Ugb25seSB0aGUgZmlyc3QgYnVsay1pbiBhbmQgYnVsay1vdXQgZW5kcG9pbnRzICovCisJaWZhY2VfZGVzYyA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisJZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7CisJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CisKKwkJaWYgKCFkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyICYmCisJCSAgICB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbihlbmRwb2ludCkpIHsKKwkJCS8qIFVTQiBpbnRlcmZhY2UgZGVzY3JpcHRpb24gaXMgYnVnZ3ksIHJlcG9ydGVkIG1heAorCQkJICogcGFja2V0IHNpemUgaXMgNTEyIGJ5dGVzLCB3aW5kb3dzIGRyaXZlciB1c2VzIDgxOTIgKi8KKwkJCWJ1ZmZlcl9zaXplID0gODE5MjsKKwkJCWRldi0+YnVsa19pbl9zaXplID0gYnVmZmVyX3NpemU7CisJCQlkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCX0KKworCX0KKwlpZiAoIWRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJDb3VsZCBub3QgZmluZCBidWxrLWluIGVuZHBvaW50XG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBpbml0IHRoZSBkZXZpY2UgKi8KKwlpZiAoaGRwdnJfZGV2aWNlX2luaXQoZGV2KSkgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgImRldmljZSBpbml0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisJaWYgKGhkcHZyX2FsbG9jX2J1ZmZlcnMoZGV2LCBOVU1fQlVGRkVSUykpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsCisJCQkgImFsbG9jYXRpbmcgdHJhbnNmZXIgYnVmZmVycyBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKwltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworCisJaWYgKGhkcHZyX3JlZ2lzdGVyX3ZpZGVvZGV2KGRldiwgJmludGVyZmFjZS0+ZGV2LAorCQkJCSAgICB2aWRlb19uclthdG9taWNfaW5jX3JldHVybigmZGV2X25yKV0pKSB7CisJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAicmVnaXN0ZXJpbmcgdmlkZW9kZXYgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKyNpZmRlZiBDT05GSUdfSTJDCisJLyogdW50aWwgaTJjIGlzIHdvcmtpbmcgcHJvcGVybHkgKi8KKwlyZXR2YWwgPSAwOyAvKiBoZHB2cl9yZWdpc3Rlcl9pMmNfYWRhcHRlcihkZXYpOyAqLworCWlmIChyZXR2YWwgPCAwKSB7CisJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAicmVnaXN0ZXJpbmcgaTJjIGFkYXB0ZXIgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisjZW5kaWYgLyogQ09ORklHX0kyQyAqLworCisJLyogc2F2ZSBvdXIgZGF0YSBwb2ludGVyIGluIHRoaXMgaW50ZXJmYWNlIGRldmljZSAqLworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOworCisJLyogbGV0IHRoZSB1c2VyIGtub3cgd2hhdCBub2RlIHRoaXMgZGV2aWNlIGlzIG5vdyBhdHRhY2hlZCB0byAqLworCXY0bDJfaW5mbygmZGV2LT52NGwyX2RldiwgImRldmljZSBub3cgYXR0YWNoZWQgdG8gL2Rldi92aWRlbyVkXG4iLAorCQkgIGRldi0+dmlkZW9fZGV2LT5taW5vcik7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWlmIChkZXYpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKwkJLyogdGhpcyBmcmVlcyBhbGxvY2F0ZWQgbWVtb3J5ICovCisJCWhkcHZyX2RlbGV0ZShkZXYpOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBoZHB2cl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2OworCWludCBtaW5vcjsKKworCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisKKwltaW5vciA9IGRldi0+dmlkZW9fZGV2LT5taW5vcjsKKworCS8qIHByZXZlbnQgbW9yZSBJL08gZnJvbSBzdGFydGluZyBhbmQgc3RvcCBhbnkgb25nb2luZyAqLworCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOworCWRldi0+c3RhdHVzID0gU1RBVFVTX0RJU0NPTk5FQ1RFRDsKKwl2NGwyX2RldmljZV9kaXNjb25uZWN0KCZkZXYtPnY0bDJfZGV2KTsKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZpZGVvX2Rldik7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRfZGF0YSk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRfYnVmZmVyKTsKKwltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworCW1zbGVlcCgxMDApOworCWZsdXNoX3dvcmtxdWV1ZShkZXYtPndvcmtxdWV1ZSk7CisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisJaGRwdnJfY2FuY2VsX3F1ZXVlKGRldik7CisJZGVzdHJveV93b3JrcXVldWUoZGV2LT53b3JrcXVldWUpOworCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CisKKwkvKiBkZXJlZ2lzdGVyIEkyQyBhZGFwdGVyICovCisjaWZkZWYgQ09ORklHX0kyQworCW11dGV4X2xvY2soJmRldi0+aTJjX211dGV4KTsKKwlpZiAoZGV2LT5pMmNfYWRhcHRlcikKKwkJaTJjX2RlbF9hZGFwdGVyKGRldi0+aTJjX2FkYXB0ZXIpOworCWtmcmVlKGRldi0+aTJjX2FkYXB0ZXIpOworCWRldi0+aTJjX2FkYXB0ZXIgPSBOVUxMOworCW11dGV4X3VubG9jaygmZGV2LT5pMmNfbXV0ZXgpOworI2VuZGlmIC8qIENPTkZJR19JMkMgKi8KKworCWF0b21pY19kZWMoJmRldl9ucik7CisKKwl2NGwyX2luZm8oJmRldi0+djRsMl9kZXYsICJkZXZpY2UgL2Rldi92aWRlbyVkIGRpc2Nvbm5lY3RlZFxuIiwgbWlub3IpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CisJa2ZyZWUoZGV2LT51c2JjX2J1Zik7CisJa2ZyZWUoZGV2KTsKK30KKworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaGRwdnJfdXNiX2RyaXZlciA9IHsKKwkubmFtZSA9CQkiaGRwdnIiLAorCS5wcm9iZSA9CWhkcHZyX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JaGRwdnJfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQloZHB2cl90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGhkcHZyX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCisJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmaGRwdnJfdXNiX2RyaXZlcik7CisJaWYgKHJlc3VsdCkKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGhkcHZyX2V4aXQodm9pZCkKK3sKKwkvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwl1c2JfZGVyZWdpc3RlcigmaGRwdnJfdXNiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGhkcHZyX2luaXQpOworbW9kdWxlX2V4aXQoaGRwdnJfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkphbm5lIEdydW5hdSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJIYXVwcGF1Z2UgSEQgUFZSIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiNWQxNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMKQEAgLTAsMCArMSwxNDUgQEAKKworLyoKKyAqIEhhdXBwYXVnZSBIRCBQVlIgVVNCIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgICAgIEphbm5lIEdydW5hdSAoakBqYW5uYXUubmV0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKKyNpbmNsdWRlICJoZHB2ci5oIgorCisjZGVmaW5lIENUUkxfUkVBRF9SRVFVRVNUCTB4YjgKKyNkZWZpbmUgQ1RSTF9XUklURV9SRVFVRVNUCTB4MzgKKworI2RlZmluZSBSRVFUWVBFX0kyQ19SRUFECTB4YjEKKyNkZWZpbmUgUkVRVFlQRV9JMkNfV1JJVEUJMHhiMAorI2RlZmluZSBSRVFUWVBFX0kyQ19XUklURV9TVEFUVAkweGQwCisKK3N0YXRpYyBpbnQgaGRwdnJfaTJjX3JlYWQoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIGFkZHIsCisJCQkgIGNoYXIgKmRhdGEsIGludCBsZW4pCit7CisJaW50IHJldDsKKwljaGFyICpidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9yY3ZjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgUkVRVFlQRV9JMkNfUkVBRCwgQ1RSTF9SRUFEX1JFUVVFU1QsCisJCQkgICAgICAweDEwMHxhZGRyLCAwLCBidWYsIGxlbiwgMTAwMCk7CisKKwlpZiAocmV0ID09IGxlbikgeworCQltZW1jcHkoZGF0YSwgYnVmLCBsZW4pOworCQlyZXQgPSAwOworCX0gZWxzZSBpZiAocmV0ID49IDApCisJCXJldCA9IC1FSU87CisKKwlrZnJlZShidWYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBoZHB2cl9pMmNfd3JpdGUoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIGFkZHIsCisJCQkgICBjaGFyICpkYXRhLCBpbnQgbGVuKQoreworCWludCByZXQ7CisJY2hhciAqYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweShidWYsIGRhdGEsIGxlbik7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgUkVRVFlQRV9JMkNfV1JJVEUsIENUUkxfV1JJVEVfUkVRVUVTVCwKKwkJCSAgICAgIDB4MTAwfGFkZHIsIDAsIGJ1ZiwgbGVuLCAxMDAwKTsKKworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9yY3ZjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgUkVRVFlQRV9JMkNfV1JJVEVfU1RBVFQsIENUUkxfUkVBRF9SRVFVRVNULAorCQkJICAgICAgMCwgMCwgYnVmLCAyLCAxMDAwKTsKKworCWlmIChyZXQgPT0gMikKKwkJcmV0ID0gMDsKKwllbHNlIGlmIChyZXQgPj0gMCkKKwkJcmV0ID0gLUVJTzsKKworZXJyb3I6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGhkcHZyX3RyYW5zZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXB0ZXIsIHN0cnVjdCBpMmNfbXNnICptc2dzLAorCQkJICBpbnQgbnVtKQoreworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXB0ZXIpOworCWludCByZXR2YWwgPSAwLCBpLCBhZGRyOworCisJaWYgKG51bSA8PSAwKQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJmRldi0+aTJjX211dGV4KTsKKworCWZvciAoaSA9IDA7IGkgPCBudW0gJiYgIXJldHZhbDsgaSsrKSB7CisJCWFkZHIgPSBtc2dzW2ldLmFkZHIgPDwgMTsKKworCQlpZiAobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKQorCQkJcmV0dmFsID0gaGRwdnJfaTJjX3JlYWQoZGV2LCBhZGRyLCBtc2dzW2ldLmJ1ZiwKKwkJCQkJCW1zZ3NbaV0ubGVuKTsKKwkJZWxzZQorCQkJcmV0dmFsID0gaGRwdnJfaTJjX3dyaXRlKGRldiwgYWRkciwgbXNnc1tpXS5idWYsCisJCQkJCQkgbXNnc1tpXS5sZW4pOworCX0KKworCW11dGV4X3VubG9jaygmZGV2LT5pMmNfbXV0ZXgpOworCisJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IG51bTsKK30KKworc3RhdGljIHUzMiBoZHB2cl9mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGhkcHZyX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyICAgPSBoZHB2cl90cmFuc2ZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IGhkcHZyX2Z1bmN0aW9uYWxpdHksCit9OworCitpbnQgaGRwdnJfcmVnaXN0ZXJfaTJjX2FkYXB0ZXIoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXA7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisKKwlpMmNfYWRhcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfYWRhcHRlciksIEdGUF9LRVJORUwpOworCWlmIChpMmNfYWRhcCA9PSBOVUxMKQorCQlnb3RvIGVycm9yOworCisJc3RybGNweShpMmNfYWRhcC0+bmFtZSwgIkhhdXBwYXVnZSBIRCBQVlIgSTJDIiwKKwkJc2l6ZW9mKGkyY19hZGFwLT5uYW1lKSk7CisJaTJjX2FkYXAtPmFsZ28gID0gJmhkcHZyX2FsZ287CisJaTJjX2FkYXAtPmNsYXNzID0gSTJDX0NMQVNTX1RWX0FOQUxPRzsKKwlpMmNfYWRhcC0+aWQgICAgPSBJMkNfSFdfQl9IRFBWUjsKKwlpMmNfYWRhcC0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlpMmNfYWRhcC0+ZGV2LnBhcmVudCA9ICZkZXYtPnVkZXYtPmRldjsKKworCWkyY19zZXRfYWRhcGRhdGEoaTJjX2FkYXAsIGRldik7CisKKwlyZXR2YWwgPSBpMmNfYWRkX2FkYXB0ZXIoaTJjX2FkYXApOworCisJaWYgKCFyZXR2YWwpCisJCWRldi0+aTJjX2FkYXB0ZXIgPSBpMmNfYWRhcDsKKwllbHNlCisJCWtmcmVlKGkyY19hZGFwKTsKKworZXJyb3I6CisJcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTZmZmVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci12aWRlby5jCkBAIC0wLDAgKzEsMTI0OCBAQAorLyoKKyAqIEhhdXBwYXVnZSBIRCBQVlIgVVNCIGRyaXZlciAtIHZpZGVvIDQgbGludXggMiBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggICAgICBKYW5uZSBHcnVuYXUgKGpAamFubmF1Lm5ldCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgImhkcHZyLmgiCisKKyNkZWZpbmUgQlVMS19VUkJfVElNRU9VVCAxMjUwIC8qIDEuMjUgc2Vjb25kcyAqLworCisjZGVmaW5lIHByaW50X2J1ZmZlcl9zdGF0dXMoKSB7IFwKKwkJdjRsMl9kYmcoTVNHX0JVRkZFUiwgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAlcCisJCQkgIiVzOiVkIGJ1ZmZlciBzdGF0OiAlZCBmcmVlLCAlZCBwcm9jXG4iLAlcCisJCQkgX19mdW5jX18sIF9fTElORV9fLAkJCQlcCisJCQkgbGlzdF9zaXplKCZkZXYtPmZyZWVfYnVmZl9saXN0KSwJCVwKKwkJCSBsaXN0X3NpemUoJmRldi0+cmVjX2J1ZmZfbGlzdCkpOyB9CisKK3N0cnVjdCBoZHB2cl9maCB7CisJc3RydWN0IGhkcHZyX2RldmljZQkqZGV2OworfTsKKworc3RhdGljIHVpbnQgbGlzdF9zaXplKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXVpbnQgY291bnQgPSAwOworCisJbGlzdF9mb3JfZWFjaCh0bXAsIGxpc3QpIHsKKwkJY291bnQrKzsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiB1cmIgY2FsbGJhY2sgKi8KK3N0YXRpYyB2b2lkIGhkcHZyX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGhkcHZyX2J1ZmZlciAqYnVmID0gKHN0cnVjdCBoZHB2cl9idWZmZXIgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gYnVmLT5kZXY7CisKKwkvKiBtYXJraW5nIGJ1ZmZlciBhcyByZWNlaXZlZCBhbmQgd2FrZSB3YWl0aW5nICovCisJYnVmLT5zdGF0dXMgPSBCVUZTVEFUX1JFQURZOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X2RhdGEpOworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogYnVmZmZlciBiaXRzICovCisKKy8qIGZ1bmN0aW9uIGV4cGVjdHMgZGV2LT5pb19tdXRleCB0byBiZSBob2xkIGJ5IGNhbGxlciAqLworaW50IGhkcHZyX2NhbmNlbF9xdWV1ZShzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhkcHZyX2J1ZmZlciAqYnVmOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShidWYsICZkZXYtPnJlY19idWZmX2xpc3QsIGJ1ZmZfbGlzdCkgeworCQl1c2Jfa2lsbF91cmIoYnVmLT51cmIpOworCQlidWYtPnN0YXR1cyA9IEJVRlNUQVRfQVZBSUxBQkxFOworCX0KKworCWxpc3Rfc3BsaWNlX2luaXQoJmRldi0+cmVjX2J1ZmZfbGlzdCwgZGV2LT5mcmVlX2J1ZmZfbGlzdC5wcmV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhkcHZyX2ZyZWVfcXVldWUoc3RydWN0IGxpc3RfaGVhZCAqcSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlzdHJ1Y3QgaGRwdnJfYnVmZmVyICpidWY7CisJc3RydWN0IHVyYiAqdXJiOworCisJZm9yIChwID0gcS0+bmV4dDsgcCAhPSBxOykgeworCQlidWYgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBoZHB2cl9idWZmZXIsIGJ1ZmZfbGlzdCk7CisKKwkJdXJiID0gYnVmLT51cmI7CisJCXVzYl9idWZmZXJfZnJlZSh1cmItPmRldiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2RtYSk7CisJCXVzYl9mcmVlX3VyYih1cmIpOworCQl0bXAgPSBwLT5uZXh0OworCQlsaXN0X2RlbChwKTsKKwkJa2ZyZWUoYnVmKTsKKwkJcCA9IHRtcDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogZnVuY3Rpb24gZXhwZWN0cyBkZXYtPmlvX211dGV4IHRvIGJlIGhvbGQgYnkgY2FsbGVyICovCitpbnQgaGRwdnJfZnJlZV9idWZmZXJzKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKK3sKKwloZHB2cl9jYW5jZWxfcXVldWUoZGV2KTsKKworCWhkcHZyX2ZyZWVfcXVldWUoJmRldi0+ZnJlZV9idWZmX2xpc3QpOworCWhkcHZyX2ZyZWVfcXVldWUoJmRldi0+cmVjX2J1ZmZfbGlzdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogZnVuY3Rpb24gZXhwZWN0cyBkZXYtPmlvX211dGV4IHRvIGJlIGhvbGQgYnkgY2FsbGVyICovCitpbnQgaGRwdnJfYWxsb2NfYnVmZmVycyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIHVpbnQgY291bnQpCit7CisJdWludCBpOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCXU4ICptZW07CisJc3RydWN0IGhkcHZyX2J1ZmZlciAqYnVmOworCXN0cnVjdCB1cmIgKnVyYjsKKworCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCSAiYWxsb2NhdGluZyAldSBidWZmZXJzXG4iLCBjb3VudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCisJCWJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoZHB2cl9idWZmZXIpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFidWYpIHsKKwkJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiY2Fubm90IGFsbG9jYXRlIGJ1ZmZlclxuIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJYnVmLT5kZXYgPSBkZXY7CisKKwkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpIHsKKwkJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiY2Fubm90IGFsbG9jYXRlIHVyYlxuIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJYnVmLT51cmIgPSB1cmI7CisKKwkJbWVtID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYtPnVkZXYsIGRldi0+YnVsa19pbl9zaXplLCBHRlBfS0VSTkVMLAorCQkJCSAgICAgICAmdXJiLT50cmFuc2Zlcl9kbWEpOworCQlpZiAoIW1lbSkgeworCQkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsCisJCQkJICJjYW5ub3QgYWxsb2NhdGUgdXNiIHRyYW5zZmVyIGJ1ZmZlclxuIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQl1c2JfZmlsbF9idWxrX3VyYihidWYtPnVyYiwgZGV2LT51ZGV2LAorCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dWRldiwKKwkJCQkJCSAgZGV2LT5idWxrX2luX2VuZHBvaW50QWRkciksCisJCQkJICBtZW0sIGRldi0+YnVsa19pbl9zaXplLAorCQkJCSAgaGRwdnJfcmVhZF9idWxrX2NhbGxiYWNrLCBidWYpOworCisJCWJ1Zi0+c3RhdHVzID0gQlVGU1RBVF9BVkFJTEFCTEU7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+YnVmZl9saXN0LCAmZGV2LT5mcmVlX2J1ZmZfbGlzdCk7CisJfQorCXJldHVybiAwOworZXhpdDoKKwloZHB2cl9mcmVlX2J1ZmZlcnMoZGV2KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGhkcHZyX3N1Ym1pdF9idWZmZXJzKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaGRwdnJfYnVmZmVyICpidWY7CisJc3RydWN0IHVyYiAqdXJiOworCWludCByZXQgPSAwLCBlcnJfY291bnQgPSAwOworCisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisKKwl3aGlsZSAoZGV2LT5zdGF0dXMgPT0gU1RBVFVTX1NUUkVBTUlORyAmJgorCSAgICAgICAhbGlzdF9lbXB0eSgmZGV2LT5mcmVlX2J1ZmZfbGlzdCkpIHsKKworCQlidWYgPSBsaXN0X2VudHJ5KGRldi0+ZnJlZV9idWZmX2xpc3QubmV4dCwgc3RydWN0IGhkcHZyX2J1ZmZlciwKKwkJCQkgYnVmZl9saXN0KTsKKwkJaWYgKGJ1Zi0+c3RhdHVzICE9IEJVRlNUQVRfQVZBSUxBQkxFKSB7CisJCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwKKwkJCQkgImJ1ZmZlciBub3QgbWFya2VkIGFzIGF2YWlsYmFsZVxuIik7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBlcnI7CisJCX0KKworCQl1cmIgPSBidWYtPnVyYjsKKwkJdXJiLT5zdGF0dXMgPSAwOworCQl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmV0KSB7CisJCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwKKwkJCQkgInVzYl9zdWJtaXRfdXJiIGluICVzIHJldHVybmVkICVkXG4iLAorCQkJCSBfX2Z1bmNfXywgcmV0KTsKKwkJCWlmICgrK2Vycl9jb3VudCA+IDIpCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwkJfQorCQlidWYtPnN0YXR1cyA9IEJVRlNUQVRfSU5QUk9HUkVTUzsKKwkJbGlzdF9tb3ZlX3RhaWwoJmJ1Zi0+YnVmZl9saXN0LCAmZGV2LT5yZWNfYnVmZl9saXN0KTsKKwl9CitlcnI6CisJcHJpbnRfYnVmZmVyX3N0YXR1cygpOworCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBoZHB2cl9idWZmZXIgKmhkcHZyX2dldF9uZXh0X2J1ZmZlcihzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhkcHZyX2J1ZmZlciAqYnVmOworCisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisKKwlpZiAobGlzdF9lbXB0eSgmZGV2LT5yZWNfYnVmZl9saXN0KSkgeworCQltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlidWYgPSBsaXN0X2VudHJ5KGRldi0+cmVjX2J1ZmZfbGlzdC5uZXh0LCBzdHJ1Y3QgaGRwdnJfYnVmZmVyLAorCQkJIGJ1ZmZfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyB2b2lkIGhkcHZyX3RyYW5zbWl0X2J1ZmZlcnMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaGRwdnJfZGV2aWNlLAorCQkJCQkJd29ya2VyKTsKKworCXdoaWxlIChkZXYtPnN0YXR1cyA9PSBTVEFUVVNfU1RSRUFNSU5HKSB7CisKKwkJaWYgKGhkcHZyX3N1Ym1pdF9idWZmZXJzKGRldikpIHsKKwkJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiY291bGRuJ3Qgc3VibWl0IGJ1ZmZlcnNcbiIpOworCQkJZ290byBlcnJvcjsKKwkJfQorCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldi0+d2FpdF9idWZmZXIsCisJCQkJIWxpc3RfZW1wdHkoJmRldi0+ZnJlZV9idWZmX2xpc3QpIHx8CisJCQkJCSAgICAgZGV2LT5zdGF0dXMgIT0gU1RBVFVTX1NUUkVBTUlORykpCisJCQlnb3RvIGVycm9yOworCX0KKworCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCSAidHJhbnNtaXQgd29ya2VyIGV4aXRlZFxuIik7CisJcmV0dXJuOworZXJyb3I6CisJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJICJ0cmFuc21pdCBidWZmZXJzIGVycm9yZWRcbiIpOworCWRldi0+c3RhdHVzID0gU1RBVFVTX0VSUk9SOworfQorCisvKiBmdW5jdGlvbiBleHBlY3RzIGRldi0+aW9fbXV0ZXggdG8gYmUgaG9sZCBieSBjYWxsZXIgKi8KK3N0YXRpYyBpbnQgaGRwdnJfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBoZHB2cl92aWRlb19pbmZvICp2aWRpbmY7CisKKwlpZiAoZGV2LT5zdGF0dXMgPT0gU1RBVFVTX1NUUkVBTUlORykKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoZGV2LT5zdGF0dXMgIT0gU1RBVFVTX0lETEUpCisJCXJldHVybiAtRUFHQUlOOworCisJdmlkaW5mID0gZ2V0X3ZpZGVvX2luZm8oZGV2KTsKKworCWlmICh2aWRpbmYpIHsKKwkJdjRsMl9kYmcoTVNHX0JVRkZFUiwgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkJICJ2aWRlbyBzaWduYWw6ICVkeCVkQCVkaHpcbiIsIHZpZGluZi0+d2lkdGgsCisJCQkgdmlkaW5mLT5oZWlnaHQsIHZpZGluZi0+ZnBzKTsKKwkJa2ZyZWUodmlkaW5mKTsKKworCQkvKiBzdGFydCBzdHJlYW1pbmcgMiByZXF1ZXN0ICovCisJCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCisJCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkJICAgICAgMHhiOCwgMHgzOCwgMHgxLCAwLCBOVUxMLCAwLCA4MDAwKTsKKwkJdjRsMl9kYmcoTVNHX0JVRkZFUiwgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkJICJlbmNvZGVyIHN0YXJ0IGNvbnRyb2wgcmVxdWVzdCByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKworCQloZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfU1RBUlRfU1RSRUFNSU5HX1ZBTFVFLCAweDAwKTsKKworCQlJTklUX1dPUksoJmRldi0+d29ya2VyLCBoZHB2cl90cmFuc21pdF9idWZmZXJzKTsKKwkJcXVldWVfd29yayhkZXYtPndvcmtxdWV1ZSwgJmRldi0+d29ya2VyKTsKKworCQl2NGwyX2RiZyhNU0dfQlVGRkVSLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCQkgInN0cmVhbWluZyBzdGFydGVkXG4iKTsKKwkJZGV2LT5zdGF0dXMgPSBTVEFUVVNfU1RSRUFNSU5HOworCisJCXJldHVybiAwOworCX0KKwltc2xlZXAoMjUwKTsKKwl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkgIm5vIHZpZGVvIHNpZ25hbCBhdCBpbnB1dCAlZFxuIiwgZGV2LT5vcHRpb25zLnZpZGVvX2lucHV0KTsKKwlyZXR1cm4gLUVBR0FJTjsKK30KKworCisvKiBmdW5jdGlvbiBleHBlY3RzIGRldi0+aW9fbXV0ZXggdG8gYmUgaG9sZCBieSBjYWxsZXIgKi8KK3N0YXRpYyBpbnQgaGRwdnJfc3RvcF9zdHJlYW1pbmcoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCXVpbnQgYWN0dWFsX2xlbmd0aCwgYyA9IDA7CisJdTggKmJ1ZjsKKworCWlmIChkZXYtPnN0YXR1cyA9PSBTVEFUVVNfSURMRSkKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoZGV2LT5zdGF0dXMgIT0gU1RBVFVTX1NUUkVBTUlORykKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlidWYgPSBrbWFsbG9jKGRldi0+YnVsa19pbl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgdGVtcG9yYXJ5IGJ1ZmZlciAiCisJCQkgImZvciBlbXB0eWluZyB0aGUgaW50ZXJuYWwgZGV2aWNlIGJ1ZmZlci4gIgorCQkJICJOZXh0IGNhcHR1cmUgc3RhcnQgd2lsbCBiZSBzbG93XG4iKTsKKworCWRldi0+c3RhdHVzID0gU1RBVFVTX1NIVVRUSU5HX0RPV047CisJaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX1NUT1BfU1RSRUFNSU5HX1ZBTFVFLCAweDAwKTsKKwltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRfYnVmZmVyKTsKKwltc2xlZXAoNTApOworCisJZmx1c2hfd29ya3F1ZXVlKGRldi0+d29ya3F1ZXVlKTsKKworCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOworCS8qIGtpbGwgdGhlIHN0aWxsIG91dHN0YW5kaW5nIHVyYnMgKi8KKwloZHB2cl9jYW5jZWxfcXVldWUoZGV2KTsKKworCS8qIGVtcHR5aW5nIHRoZSBkZXZpY2UgYnVmZmVyIGJlZm9yZXNodXR0aW5nIGl0IGRvd24gKi8KKwl3aGlsZSAoYnVmICYmICsrYyA8IDUwMCAmJgorCSAgICAgICAhdXNiX2J1bGtfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dWRldiwKKwkJCQkJICAgICBkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKKwkJCSAgICAgYnVmLCBkZXYtPmJ1bGtfaW5fc2l6ZSwgJmFjdHVhbF9sZW5ndGgsCisJCQkgICAgIEJVTEtfVVJCX1RJTUVPVVQpKSB7CisJCS8qIHdhaXQgKi8KKwkJbXNsZWVwKDUpOworCQl2NGwyX2RiZyhNU0dfQlVGRkVSLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCQkgIiUyZDogZ290ICVkIGJ5dGVzXG4iLCBjLCBhY3R1YWxfbGVuZ3RoKTsKKwl9CisJa2ZyZWUoYnVmKTsKKwl2NGwyX2RiZyhNU0dfQlVGRkVSLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCSAidXNlZCAlZCB1cmJzIHRvIGVtcHR5IGRldmljZSBidWZmZXJzXG4iLCBjLTEpOworCW1zbGVlcCgxMCk7CisKKwlkZXYtPnN0YXR1cyA9IFNUQVRVU19JRExFOworCisJcmV0dXJuIDA7Cit9CisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKgorICogdmlkZW8gNCBsaW51eCAyIGZpbGUgb3BlcmF0aW9ucworICovCisKK3N0YXRpYyBpbnQgaGRwdnJfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXY7CisJc3RydWN0IGhkcHZyX2ZoICpmaDsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKworCWRldiA9IChzdHJ1Y3QgaGRwdnJfZGV2aWNlICopdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJaWYgKCFkZXYpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJvcGVuIGZhaWxpbmcgd2l0aCB3aXRoIEVOT0RFVlxuIik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyOworCX0KKworCWZoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhkcHZyX2ZoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmaCkgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlnb3RvIGVycjsKKwl9CisJLyogbG9jayB0aGUgZGV2aWNlIHRvIGFsbG93IGNvcnJlY3RseSBoYW5kbGluZyBlcnJvcnMKKwkgKiBpbiByZXN1bXB0aW9uICovCisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisJZGV2LT5vcGVuX2NvdW50Kys7CisKKwlmaC0+ZGV2ID0gZGV2OworCisJLyogc2F2ZSBvdXIgb2JqZWN0IGluIHRoZSBmaWxlJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKKworCXJldHZhbCA9IDA7CitlcnI6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGhkcHZyX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGhkcHZyX2ZoCQkqZmggID0gKHN0cnVjdCBoZHB2cl9maCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlCSpkZXYgPSBmaC0+ZGV2OworCisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisJaWYgKCEoLS1kZXYtPm9wZW5fY291bnQpICYmIGRldi0+c3RhdHVzID09IFNUQVRVU19TVFJFQU1JTkcpCisJCWhkcHZyX3N0b3Bfc3RyZWFtaW5nKGRldik7CisKKwltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBoZHB2cl92NGwyX3JlYWQoKQorICogd2lsbCBhbGxvY2F0ZSBidWZmZXJzIHdoZW4gY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZQorICovCitzdGF0aWMgc3NpemVfdCBoZHB2cl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsCisJCQkgIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgaGRwdnJfYnVmZmVyICpidWYgPSBOVUxMOworCXN0cnVjdCB1cmIgKnVyYjsKKwl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKwlpbnQgcmVtLCBjbnQ7CisKKwlpZiAoKnBvcykKKwkJcmV0dXJuIC1FU1BJUEU7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZkZXYtPmlvX211dGV4KTsKKwlpZiAoZGV2LT5zdGF0dXMgPT0gU1RBVFVTX0lETEUpIHsKKwkJaWYgKGhkcHZyX3N0YXJ0X3N0cmVhbWluZyhkZXYpKSB7CisJCQl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkJCSAic3RhcnRfc3RyZWFtaW5nIGZhaWxlZFxuIik7CisJCQlyZXQgPSAtRUlPOworCQkJbXNsZWVwKDIwMCk7CisJCQlkZXYtPnN0YXR1cyA9IFNUQVRVU19JRExFOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKwkJCWdvdG8gZXJyOworCQl9CisJCXByaW50X2J1ZmZlcl9zdGF0dXMoKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKworCS8qIHdhaXQgZm9yIHRoZSBmaXJzdCBidWZmZXIgKi8KKwlpZiAoIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIHsKKwkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXYtPndhaXRfZGF0YSwKKwkJCQkJICAgICBoZHB2cl9nZXRfbmV4dF9idWZmZXIoZGV2KSkpCisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKworCWJ1ZiA9IGhkcHZyX2dldF9uZXh0X2J1ZmZlcihkZXYpOworCisJd2hpbGUgKGNvdW50ID4gMCAmJiBidWYpIHsKKworCQlpZiAoYnVmLT5zdGF0dXMgIT0gQlVGU1RBVF9SRUFEWSAmJgorCQkgICAgZGV2LT5zdGF0dXMgIT0gU1RBVFVTX0RJU0NPTk5FQ1RFRCkgeworCQkJLyogcmV0dXJuIG5vbmJsb2NraW5nICovCisJCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gLUVBR0FJTjsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKworCQkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXYtPndhaXRfZGF0YSwKKwkJCQkJICAgICAgYnVmLT5zdGF0dXMgPT0gQlVGU1RBVF9SRUFEWSkpIHsKKwkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQkJZ290byBlcnI7CisJCQl9CisJCX0KKworCQlpZiAoYnVmLT5zdGF0dXMgIT0gQlVGU1RBVF9SRUFEWSkKKwkJCWJyZWFrOworCisJCS8qIHNldCByZW1haW5pbmcgYnl0ZXMgdG8gY29weSAqLworCQl1cmIgPSBidWYtPnVyYjsKKwkJcmVtID0gdXJiLT5hY3R1YWxfbGVuZ3RoIC0gYnVmLT5wb3M7CisJCWNudCA9IHJlbSA+IGNvdW50ID8gY291bnQgOiByZW07CisKKwkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgYnVmLT5wb3MsCisJCQkJIGNudCkpIHsKKwkJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAicmVhZDogY29weV90b191c2VyIGZhaWxlZFxuIik7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBlcnI7CisJCX0KKworCQlidWYtPnBvcyArPSBjbnQ7CisJCWNvdW50IC09IGNudDsKKwkJYnVmZmVyICs9IGNudDsKKwkJcmV0ICs9IGNudDsKKworCQkvKiBmaW5pc2hlZCwgdGFrZSBuZXh0IGJ1ZmZlciAqLworCQlpZiAoYnVmLT5wb3MgPT0gdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQltdXRleF9sb2NrKCZkZXYtPmlvX211dGV4KTsKKwkJCWJ1Zi0+cG9zID0gMDsKKwkJCWJ1Zi0+c3RhdHVzID0gQlVGU1RBVF9BVkFJTEFCTEU7CisKKwkJCWxpc3RfbW92ZV90YWlsKCZidWYtPmJ1ZmZfbGlzdCwgJmRldi0+ZnJlZV9idWZmX2xpc3QpOworCisJCQlwcmludF9idWZmZXJfc3RhdHVzKCk7CisKKwkJCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CisKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X2J1ZmZlcik7CisKKwkJCWJ1ZiA9IGhkcHZyX2dldF9uZXh0X2J1ZmZlcihkZXYpOworCQl9CisJfQorZXJyOgorCWlmICghcmV0ICYmICFidWYpCisJCXJldCA9IC1FQUdBSU47CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBoZHB2cl9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBoZHB2cl9idWZmZXIgKmJ1ZiA9IE5VTEw7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IChzdHJ1Y3QgaGRwdnJfZmggKilmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CisKKwltdXRleF9sb2NrKCZkZXYtPmlvX211dGV4KTsKKworCWlmICh2aWRlb19pc191bnJlZ2lzdGVyZWQoZGV2LT52aWRlb19kZXYpKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChkZXYtPnN0YXR1cyA9PSBTVEFUVVNfSURMRSkgeworCQlpZiAoaGRwdnJfc3RhcnRfc3RyZWFtaW5nKGRldikpIHsKKwkJCXY0bDJfZGJnKE1TR19CVUZGRVIsIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJCQkgInN0YXJ0X3N0cmVhbWluZyBmYWlsZWRcbiIpOworCQkJZGV2LT5zdGF0dXMgPSBTVEFUVVNfSURMRTsKKwkJfQorCisJCXByaW50X2J1ZmZlcl9zdGF0dXMoKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKworCWJ1ZiA9IGhkcHZyX2dldF9uZXh0X2J1ZmZlcihkZXYpOworCS8qIG9ubHkgd2FpdCBpZiBubyBkYXRhIGlzIGF2YWlsYWJsZSAqLworCWlmICghYnVmIHx8IGJ1Zi0+c3RhdHVzICE9IEJVRlNUQVRfUkVBRFkpIHsKKwkJcG9sbF93YWl0KGZpbHAsICZkZXYtPndhaXRfZGF0YSwgd2FpdCk7CisJCWJ1ZiA9IGhkcHZyX2dldF9uZXh0X2J1ZmZlcihkZXYpOworCX0KKwlpZiAoYnVmICYmIGJ1Zi0+c3RhdHVzID09IEJVRlNUQVRfUkVBRFkpCisJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKworCXJldHVybiBtYXNrOworfQorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgaGRwdnJfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaGRwdnJfb3BlbiwKKwkucmVsZWFzZQk9IGhkcHZyX3JlbGVhc2UsCisJLnJlYWQJCT0gaGRwdnJfcmVhZCwKKwkucG9sbAkJPSBoZHB2cl9wb2xsLAorCS51bmxvY2tlZF9pb2N0bAk9IHZpZGVvX2lvY3RsMiwKK307CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyoKKyAqIFY0TDIgaW9jdGwgaGFuZGxpbmcKKyAqLworCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJCQkgICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCit7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXN0cmNweShjYXAtPmRyaXZlciwgImhkcHZyIik7CisJc3RyY3B5KGNhcC0+Y2FyZCwgIkhhdXBhdWdlIEhEIFBWUiIpOworCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOworCWNhcC0+dmVyc2lvbiA9IEhEUFZSX1ZFUlNJT047CisJY2FwLT5jYXBhYmlsaXRpZXMgPSAgICAgVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CisJCQkJVjRMMl9DQVBfQVVESU8gICAgICAgICB8CisJCQkJVjRMMl9DQVBfUkVBRFdSSVRFOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdmF0ZV9kYXRhLAorCQkJdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisJdTggc3RkX3R5cGUgPSAxOworCisJaWYgKCpzdGQgJiAoVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTF82MCkpCisJCXN0ZF90eXBlID0gMDsKKworCXJldHVybiBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfVklERU9fU1REX1RZUEUsIHN0ZF90eXBlKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmluYW1lW10gPSB7CisJW0hEUFZSX0NPTVBPTkVOVF0gPSAiQ29tcG9uZW50IiwKKwlbSERQVlJfU1ZJREVPXSAgICA9ICJTLVZpZGVvIiwKKwlbSERQVlJfQ09NUE9TSVRFXSA9ICJDb21wb3NpdGUiLAorfTsKKworc3RhdGljIGludCB2aWRpb2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaSkKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisJdW5zaWduZWQgaW50IG47CisKKwluID0gaS0+aW5kZXg7CisJaWYgKG4gPj0gSERQVlJfVklERU9fSU5QVVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWktPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCisJc3RybmNweShpLT5uYW1lLCBpbmFtZVtuXSwgc2l6ZW9mKGktPm5hbWUpIC0gMSk7CisJaS0+bmFtZVtzaXplb2YoaS0+bmFtZSkgLSAxXSA9ICdcMCc7CisKKwlpLT5hdWRpb3NldCA9IDE8PEhEUFZSX1JDQV9GUk9OVCB8IDE8PEhEUFZSX1JDQV9CQUNLIHwgMTw8SERQVlJfU1BESUY7CisKKwlpLT5zdGQgPSBkZXYtPnZpZGVvX2Rldi0+dHZub3JtczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2YXRlX2RhdGEsCisJCQkgIHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisJaW50IHJldHZhbDsKKworCWlmIChpbmRleCA+PSBIRFBWUl9WSURFT19JTlBVVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRldi0+c3RhdHVzICE9IFNUQVRVU19JRExFKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXJldHZhbCA9IGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9WSURFT19JTlBVVF9WQUxVRSwgaW5kZXgrMSk7CisJaWYgKCFyZXR2YWwpCisJCWRldi0+b3B0aW9ucy52aWRlb19pbnB1dCA9IGluZGV4OworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdmF0ZV9kYXRhLAorCQkJICB1bnNpZ25lZCBpbnQgKmluZGV4KQoreworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKworCSppbmRleCA9IGRldi0+b3B0aW9ucy52aWRlb19pbnB1dDsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgY29uc3QgY2hhciAqYXVkaW9faW5hbWVbXSA9IHsKKwlbSERQVlJfUkNBX0ZST05UXSA9ICJSQ0EgZnJvbnQiLAorCVtIRFBWUl9SQ0FfQkFDS10gID0gIlJDQSBiYWNrIiwKKwlbSERQVlJfU1BESUZdICAgICA9ICJTUERJRiIsCit9OworCitzdGF0aWMgaW50IHZpZGlvY19lbnVtYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmF1ZGlvKQoreworCXVuc2lnbmVkIGludCBuOworCisJbiA9IGF1ZGlvLT5pbmRleDsKKwlpZiAobiA+PSBIRFBWUl9BVURJT19JTlBVVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJYXVkaW8tPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CisKKwlzdHJuY3B5KGF1ZGlvLT5uYW1lLCBhdWRpb19pbmFtZVtuXSwgc2l6ZW9mKGF1ZGlvLT5uYW1lKSAtIDEpOworCWF1ZGlvLT5uYW1lW3NpemVvZihhdWRpby0+bmFtZSkgLSAxXSA9ICdcMCc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdmF0ZV9kYXRhLAorCQkJICBzdHJ1Y3QgdjRsMl9hdWRpbyAqYXVkaW8pCit7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBmaC0+ZGV2OworCWludCByZXR2YWw7CisKKwlpZiAoYXVkaW8tPmluZGV4ID49IEhEUFZSX0FVRElPX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGV2LT5zdGF0dXMgIT0gU1RBVFVTX0lETEUpCisJCXJldHVybiAtRUFHQUlOOworCisJcmV0dmFsID0gaGRwdnJfc2V0X2F1ZGlvKGRldiwgYXVkaW8tPmluZGV4KzEsIGRldi0+b3B0aW9ucy5hdWRpb19jb2RlYyk7CisJaWYgKCFyZXR2YWwpCisJCWRldi0+b3B0aW9ucy5hdWRpb19pbnB1dCA9IGF1ZGlvLT5pbmRleDsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJCSAgc3RydWN0IHY0bDJfYXVkaW8gKmF1ZGlvKQoreworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKworCWF1ZGlvLT5pbmRleCA9IGRldi0+b3B0aW9ucy5hdWRpb19pbnB1dDsKKwlhdWRpby0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKKwlzdHJuY3B5KGF1ZGlvLT5uYW1lLCBhdWRpb19pbmFtZVthdWRpby0+aW5kZXhdLCBzaXplb2YoYXVkaW8tPm5hbWUpKTsKKwlhdWRpby0+bmFtZVtzaXplb2YoYXVkaW8tPm5hbWUpIC0gMV0gPSAnXDAnOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgczMyIHN1cHBvcnRlZF92NGwyX2N0cmxzW10gPSB7CisJVjRMMl9DSURfQlJJR0hUTkVTUywKKwlWNEwyX0NJRF9DT05UUkFTVCwKKwlWNEwyX0NJRF9TQVRVUkFUSU9OLAorCVY0TDJfQ0lEX0hVRSwKKwlWNEwyX0NJRF9TSEFSUE5FU1MsCisJVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORywKKwlWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HLAorCVY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFLAorCVY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURSwKKwlWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSywKK307CisKK3N0YXRpYyBpbnQgZmlsbF9xdWVyeWN0cmwoc3RydWN0IGhkcHZyX29wdGlvbnMgKm9wdCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYywKKwkJCSAgaW50IGFjMykKK3sKKwlpbnQgZXJyOworCisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMHgwLCAweGZmLCAxLCAweDg2KTsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDB4MCwgMHhmZiwgMSwgMHg4MCk7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDB4MCwgMHhmZiwgMSwgMHg4MCk7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMHgwLCAweGZmLCAxLCAweDgwKTsKKwljYXNlIFY0TDJfQ0lEX1NIQVJQTkVTUzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAweDAsIDB4ZmYsIDEsIDB4ODApOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKAorCQkJcWMsIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUMsCisJCQlhYzMgPyBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzCisJCQk6IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUMsCisJCQkxLCBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUFDKTsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbCgKKwkJCXFjLCBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR180X0FWQywKKwkJCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzRfQVZDLCAxLAorCQkJVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfNF9BVkMpOworCisvKiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPXz8gbWF5YmUga2V5ZnJhbWUgaW50ZXJ2YWw6ICovCisvKiAJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMTI4LCAxMjgsIDApOyAqLworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbCgKKwkJCXFjLCBWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUiwKKwkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSLCAxLAorCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIpOworCisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMTAwMDAwMCwgMTM1MDAwMDAsIDEwMDAwMCwKKwkJCQkJICAgIDY1MDAwMDApOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs6CisJCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAxMTAwMDAwLCAyMDIwMDAwMCwgMTAwMDAwLAorCQkJCQkgICA5MDAwMDAwKTsKKwkJaWYgKCFlcnIgJiYgb3B0LT5iaXRyYXRlX21vZGUgPT0gSERQVlJfQ09OU1RBTlQpCisJCQlxYy0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkU7CisJCXJldHVybiBlcnI7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKwlpbnQgaSwgbmV4dDsKKwl1MzIgaWQgPSBxYy0+aWQ7CisKKwltZW1zZXQocWMsIDAsIHNpemVvZigqcWMpKTsKKworCW5leHQgPSAhIShpZCAmICBWNEwyX0NUUkxfRkxBR19ORVhUX0NUUkwpOworCXFjLT5pZCA9IGlkICYgflY0TDJfQ1RSTF9GTEFHX05FWFRfQ1RSTDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN1cHBvcnRlZF92NGwyX2N0cmxzKTsgaSsrKSB7CisJCWlmIChuZXh0KSB7CisJCQlpZiAocWMtPmlkIDwgc3VwcG9ydGVkX3Y0bDJfY3RybHNbaV0pCisJCQkJcWMtPmlkID0gc3VwcG9ydGVkX3Y0bDJfY3RybHNbaV07CisJCQllbHNlCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAocWMtPmlkID09IHN1cHBvcnRlZF92NGwyX2N0cmxzW2ldKQorCQkJcmV0dXJuIGZpbGxfcXVlcnljdHJsKCZkZXYtPm9wdGlvbnMsIHFjLAorCQkJCQkgICAgICBkZXYtPmZsYWdzICYgSERQVlJfRkxBR19BQzNfQ0FQKTsKKworCQlpZiAocWMtPmlkIDwgc3VwcG9ydGVkX3Y0bDJfY3RybHNbaV0pCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2YXRlX2RhdGEsCisJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQljdHJsLT52YWx1ZSA9IGRldi0+b3B0aW9ucy5icmlnaHRuZXNzOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQljdHJsLT52YWx1ZSA9IGRldi0+b3B0aW9ucy5jb250cmFzdDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQljdHJsLT52YWx1ZSA9IGRldi0+b3B0aW9ucy5zYXR1cmF0aW9uOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJY3RybC0+dmFsdWUgPSBkZXYtPm9wdGlvbnMuaHVlOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NIQVJQTkVTUzoKKwkJY3RybC0+dmFsdWUgPSBkZXYtPm9wdGlvbnMuc2hhcnBuZXNzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdmF0ZV9kYXRhLAorCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBmaC0+ZGV2OworCWludCByZXR2YWw7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlyZXR2YWwgPSBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfQlJJR0hUTkVTUywgY3RybC0+dmFsdWUpOworCQlpZiAoIXJldHZhbCkKKwkJCWRldi0+b3B0aW9ucy5icmlnaHRuZXNzID0gY3RybC0+dmFsdWU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCXJldHZhbCA9IGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9DT05UUkFTVCwgY3RybC0+dmFsdWUpOworCQlpZiAoIXJldHZhbCkKKwkJCWRldi0+b3B0aW9ucy5jb250cmFzdCA9IGN0cmwtPnZhbHVlOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCXJldHZhbCA9IGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9TQVRVUkFUSU9OLCBjdHJsLT52YWx1ZSk7CisJCWlmICghcmV0dmFsKQorCQkJZGV2LT5vcHRpb25zLnNhdHVyYXRpb24gPSBjdHJsLT52YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCXJldHZhbCA9IGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9IVUUsIGN0cmwtPnZhbHVlKTsKKwkJaWYgKCFyZXR2YWwpCisJCQlkZXYtPm9wdGlvbnMuaHVlID0gY3RybC0+dmFsdWU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0hBUlBORVNTOgorCQlyZXR2YWwgPSBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfU0hBUlBORVNTLCBjdHJsLT52YWx1ZSk7CisJCWlmICghcmV0dmFsKQorCQkJZGV2LT5vcHRpb25zLnNoYXJwbmVzcyA9IGN0cmwtPnZhbHVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyBpbnQgaGRwdnJfZ2V0X2N0cmwoc3RydWN0IGhkcHZyX29wdGlvbnMgKm9wdCwKKwkJCSAgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKKwkJY3RybC0+dmFsdWUgPSBvcHQtPmF1ZGlvX2NvZGVjOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6CisJCWN0cmwtPnZhbHVlID0gVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfNF9BVkM7CisJCWJyZWFrOworLyogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CX0ZSQU1FUzogKi8KKy8qIAkJY3RybC0+dmFsdWUgPSAob3B0LT5nb3BfbW9kZSAmIDB4MikgPyAwIDogMTI4OyAqLworLyogCQlicmVhazsgKi8KKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgorCQljdHJsLT52YWx1ZSA9IG9wdC0+Yml0cmF0ZV9tb2RlID09IEhEUFZSX0NPTlNUQU5UCisJCQk/IFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSCisJCQk6IFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURToKKwkJY3RybC0+dmFsdWUgPSBvcHQtPmJpdHJhdGUgKiAxMDAwMDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs6CisJCWN0cmwtPnZhbHVlID0gb3B0LT5wZWFrX2JpdHJhdGUgKiAxMDAwMDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRToKKwkJY3RybC0+dmFsdWUgPSBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19leHRfY3RybHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmN0cmxzKQoreworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKwlpbnQgaSwgZXJyID0gMDsKKworCWlmIChjdHJscy0+Y3RybF9jbGFzcyA9PSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykgeworCQlmb3IgKGkgPSAwOyBpIDwgY3RybHMtPmNvdW50OyBpKyspIHsKKwkJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjdHJsID0gY3RybHMtPmNvbnRyb2xzICsgaTsKKworCQkJZXJyID0gaGRwdnJfZ2V0X2N0cmwoJmRldi0+b3B0aW9ucywgY3RybCk7CisJCQlpZiAoZXJyKSB7CisJCQkJY3RybHMtPmVycm9yX2lkeCA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcmV0dXJuIGVycjsKKworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCisKK3N0YXRpYyBpbnQgaGRwdnJfdHJ5X2N0cmwoc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwsIGludCBhYzMpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgorCQlpZiAoY3RybC0+dmFsdWUgPT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FBQyB8fAorCQkgICAgKGFjMyAmJiBjdHJsLT52YWx1ZSA9PSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzKSkKKwkJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzoKKwkJaWYgKGN0cmwtPnZhbHVlID09IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzRfQVZDKQorCQkJcmV0ID0gMDsKKwkJYnJlYWs7CisvKiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTOiAqLworLyogCQlpZiAoY3RybC0+dmFsdWUgPT0gMCB8fCBjdHJsLT52YWx1ZSA9PSAxMjgpICovCisvKiAJCQlyZXQgPSAwOyAqLworLyogCQlicmVhazsgKi8KKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgorCQlpZiAoY3RybC0+dmFsdWUgPT0gVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIgfHwKKwkJICAgIGN0cmwtPnZhbHVlID09IFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSKQorCQkJcmV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6CisJeworCQl1aW50IGJpdHJhdGUgPSBjdHJsLT52YWx1ZSAvIDEwMDAwMDsKKwkJaWYgKGJpdHJhdGUgPj0gMTAgJiYgYml0cmF0ZSA8PSAxMzUpCisJCQlyZXQgPSAwOworCQlicmVhazsKKwl9CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSzoKKwl7CisJCXVpbnQgcGVha19iaXRyYXRlID0gY3RybC0+dmFsdWUgLyAxMDAwMDA7CisJCWlmIChwZWFrX2JpdHJhdGUgPj0gMTAgJiYgcGVha19iaXRyYXRlIDw9IDIwMikKKwkJCXJldCA9IDA7CisJCWJyZWFrOworCX0KKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CisJCWlmIChjdHJsLT52YWx1ZSA9PSBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFMpCisJCQlyZXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3RyeV9leHRfY3RybHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjdHJscykKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisJaW50IGksIGVyciA9IDA7CisKKwlpZiAoY3RybHMtPmN0cmxfY2xhc3MgPT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpIHsKKwkJZm9yIChpID0gMDsgaSA8IGN0cmxzLT5jb3VudDsgaSsrKSB7CisJCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY3RybCA9IGN0cmxzLT5jb250cm9scyArIGk7CisKKwkJCWVyciA9IGhkcHZyX3RyeV9jdHJsKGN0cmwsCisJCQkJCSAgICAgZGV2LT5mbGFncyAmIEhEUFZSX0ZMQUdfQUMzX0NBUCk7CisJCQlpZiAoZXJyKSB7CisJCQkJY3RybHMtPmVycm9yX2lkeCA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworCitzdGF0aWMgaW50IGhkcHZyX3NldF9jdHJsKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGhkcHZyX29wdGlvbnMgKm9wdCA9ICZkZXYtPm9wdGlvbnM7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgorCQlpZiAoZGV2LT5mbGFncyAmIEhEUFZSX0ZMQUdfQUMzX0NBUCkgeworCQkJb3B0LT5hdWRpb19jb2RlYyA9IGN0cmwtPnZhbHVlOworCQkJcmV0ID0gaGRwdnJfc2V0X2F1ZGlvKGRldiwgb3B0LT5hdWRpb19pbnB1dCwKKwkJCQkJICAgICAgb3B0LT5hdWRpb19jb2RlYyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HOgorCQlicmVhazsKKy8qIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQl9GUkFNRVM6ICovCisvKiAJCWlmIChjdHJsLT52YWx1ZSA9PSAwICYmICEob3B0LT5nb3BfbW9kZSAmIDB4MikpIHsgKi8KKy8qIAkJCW9wdC0+Z29wX21vZGUgfD0gMHgyOyAqLworLyogCQkJaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX0dPUF9NT0RFX1ZBTFVFLCAqLworLyogCQkJCQkgIG9wdC0+Z29wX21vZGUpOyAqLworLyogCQl9ICovCisvKiAJCWlmIChjdHJsLT52YWx1ZSA9PSAxMjggJiYgb3B0LT5nb3BfbW9kZSAmIDB4MikgeyAqLworLyogCQkJb3B0LT5nb3BfbW9kZSAmPSB+MHgyOyAqLworLyogCQkJaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX0dPUF9NT0RFX1ZBTFVFLCAqLworLyogCQkJCQkgIG9wdC0+Z29wX21vZGUpOyAqLworLyogCQl9ICovCisvKiAJCWJyZWFrOyAqLworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6CisJCWlmIChjdHJsLT52YWx1ZSA9PSBWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX0NCUiAmJgorCQkgICAgb3B0LT5iaXRyYXRlX21vZGUgIT0gSERQVlJfQ09OU1RBTlQpIHsKKwkJCW9wdC0+Yml0cmF0ZV9tb2RlID0gSERQVlJfQ09OU1RBTlQ7CisJCQloZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfQklUUkFURV9NT0RFX1ZBTFVFLAorCQkJCQkgIG9wdC0+Yml0cmF0ZV9tb2RlKTsKKwkJfQorCQlpZiAoY3RybC0+dmFsdWUgPT0gVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIgJiYKKwkJICAgIG9wdC0+Yml0cmF0ZV9tb2RlID09IEhEUFZSX0NPTlNUQU5UKSB7CisJCQlvcHQtPmJpdHJhdGVfbW9kZSA9IEhEUFZSX1ZBUklBQkxFX0FWRVJBR0U7CisJCQloZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfQklUUkFURV9NT0RFX1ZBTFVFLAorCQkJCQkgIG9wdC0+Yml0cmF0ZV9tb2RlKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURTogeworCQl1aW50IGJpdHJhdGUgPSBjdHJsLT52YWx1ZSAvIDEwMDAwMDsKKworCQlvcHQtPmJpdHJhdGUgPSBiaXRyYXRlOworCQlpZiAoYml0cmF0ZSA+PSBvcHQtPnBlYWtfYml0cmF0ZSkKKwkJCW9wdC0+cGVha19iaXRyYXRlID0gYml0cmF0ZSsxOworCisJCWhkcHZyX3NldF9iaXRyYXRlKGRldik7CisJCWJyZWFrOworCX0KKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9QRUFLOiB7CisJCXVpbnQgcGVha19iaXRyYXRlID0gY3RybC0+dmFsdWUgLyAxMDAwMDA7CisKKwkJaWYgKG9wdC0+Yml0cmF0ZV9tb2RlID09IEhEUFZSX0NPTlNUQU5UKQorCQkJYnJlYWs7CisKKwkJaWYgKG9wdC0+Yml0cmF0ZSA8IHBlYWtfYml0cmF0ZSkgeworCQkJb3B0LT5wZWFrX2JpdHJhdGUgPSBwZWFrX2JpdHJhdGU7CisJCQloZHB2cl9zZXRfYml0cmF0ZShkZXYpOworCQl9IGVsc2UKKwkJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2V4dF9jdHJscyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpCit7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBmaC0+ZGV2OworCWludCBpLCBlcnIgPSAwOworCisJaWYgKGN0cmxzLT5jdHJsX2NsYXNzID09IFY0TDJfQ1RSTF9DTEFTU19NUEVHKSB7CisJCWZvciAoaSA9IDA7IGkgPCBjdHJscy0+Y291bnQ7IGkrKykgeworCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwgPSBjdHJscy0+Y29udHJvbHMgKyBpOworCisJCQllcnIgPSBoZHB2cl90cnlfY3RybChjdHJsLAorCQkJCQkgICAgIGRldi0+ZmxhZ3MgJiBIRFBWUl9GTEFHX0FDM19DQVApOworCQkJaWYgKGVycikgeworCQkJCWN0cmxzLT5lcnJvcl9pZHggPSBpOworCQkJCWJyZWFrOworCQkJfQorCQkJZXJyID0gaGRwdnJfc2V0X2N0cmwoZGV2LCBjdHJsKTsKKwkJCWlmIChlcnIpIHsKKwkJCQljdHJscy0+ZXJyb3JfaWR4ID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZXJyOworCisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJCQkgICAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKK3sKKworCWlmIChmLT5pbmRleCAhPSAwIHx8IGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWYtPmZsYWdzID0gVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEOworCXN0cm5jcHkoZi0+ZGVzY3JpcHRpb24sICJNUEVHMi1UUyB3aXRoIEFWQy9BQUMgc3RyZWFtcyIsIDMyKTsKKwlmLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NUEVHOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBoZHB2cl92aWRlb19pbmZvICp2aWRfaW5mbzsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXZpZF9pbmZvID0gZ2V0X3ZpZGVvX2luZm8oZGV2KTsKKwlpZiAoIXZpZF9pbmZvKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJZi0+Zm10LnBpeC5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9NUEVHOworCWYtPmZtdC5waXgud2lkdGgJPSB2aWRfaW5mby0+d2lkdGg7CisJZi0+Zm10LnBpeC5oZWlnaHQJPSB2aWRfaW5mby0+aGVpZ2h0OworCWYtPmZtdC5waXguc2l6ZWltYWdlCT0gZGV2LT5idWxrX2luX3NpemU7CisJZi0+Zm10LnBpeC5jb2xvcnNwYWNlCT0gMDsKKwlmLT5mbXQucGl4LmJ5dGVzcGVybGluZQk9IDA7CisJZi0+Zm10LnBpeC5maWVsZAk9IFY0TDJfRklFTERfQU5ZOworCisJa2ZyZWUodmlkX2luZm8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19lbmNvZGVyX2NtZChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9lbmNvZGVyX2NtZCAqYSkKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisJaW50IHJlczsKKworCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOworCisJbWVtc2V0KCZhLT5yYXcsIDAsIHNpemVvZihhLT5yYXcpKTsKKwlzd2l0Y2ggKGEtPmNtZCkgeworCWNhc2UgVjRMMl9FTkNfQ01EX1NUQVJUOgorCQlhLT5mbGFncyA9IDA7CisJCXJlcyA9IGhkcHZyX3N0YXJ0X3N0cmVhbWluZyhkZXYpOworCQlicmVhazsKKwljYXNlIFY0TDJfRU5DX0NNRF9TVE9QOgorCQlyZXMgPSBoZHB2cl9zdG9wX3N0cmVhbWluZyhkZXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkJICJVbnN1cHBvcnRlZCBlbmNvZGVyIGNtZCAlZFxuIiwgYS0+Y21kKTsKKwkJcmVzID0gLUVJTlZBTDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHZpZGlvY190cnlfZW5jb2Rlcl9jbWQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2VuY29kZXJfY21kICphKQoreworCXN3aXRjaCAoYS0+Y21kKSB7CisJY2FzZSBWNEwyX0VOQ19DTURfU1RBUlQ6CisJY2FzZSBWNEwyX0VOQ19DTURfU1RPUDoKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIGhkcHZyX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwCT0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2Nfc19zdGQJCT0gdmlkaW9jX3Nfc3RkLAorCS52aWRpb2NfZW51bV9pbnB1dAk9IHZpZGlvY19lbnVtX2lucHV0LAorCS52aWRpb2NfZ19pbnB1dAkJPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQJCT0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19lbnVtYXVkaW8JPSB2aWRpb2NfZW51bWF1ZGlvLAorCS52aWRpb2NfZ19hdWRpbwkJPSB2aWRpb2NfZ19hdWRpbywKKwkudmlkaW9jX3NfYXVkaW8JCT0gdmlkaW9jX3NfYXVkaW8sCisJLnZpZGlvY19xdWVyeWN0cmwJPSB2aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2NfZ19jdHJsCQk9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwJCT0gdmlkaW9jX3NfY3RybCwKKwkudmlkaW9jX2dfZXh0X2N0cmxzCT0gdmlkaW9jX2dfZXh0X2N0cmxzLAorCS52aWRpb2Nfc19leHRfY3RybHMJPSB2aWRpb2Nfc19leHRfY3RybHMsCisJLnZpZGlvY190cnlfZXh0X2N0cmxzCT0gdmlkaW9jX3RyeV9leHRfY3RybHMsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwCT0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwCQk9IHZpZGlvY19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZW5jb2Rlcl9jbWQJPSB2aWRpb2NfZW5jb2Rlcl9jbWQsCisJLnZpZGlvY190cnlfZW5jb2Rlcl9jbWQJPSB2aWRpb2NfdHJ5X2VuY29kZXJfY21kLAorfTsKKworc3RhdGljIHZvaWQgaGRwdnJfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKKworCWhkcHZyX2RlbGV0ZShkZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvX2RldmljZSBoZHB2cl92aWRlb190ZW1wbGF0ZSA9IHsKKy8qIAkudHlwZQkJCT0gVkZMX1RZUEVfR1JBQkJFUiwgKi8KKy8qIAkudHlwZTIJCQk9IFZJRF9UWVBFX0NBUFRVUkUgfCBWSURfVFlQRV9NUEVHX0VOQ09ERVIsICovCisJLmZvcHMJCQk9ICZoZHB2cl9mb3BzLAorCS5yZWxlYXNlCQk9IGhkcHZyX2RldmljZV9yZWxlYXNlLAorCS5pb2N0bF9vcHMgCQk9ICZoZHB2cl9pb2N0bF9vcHMsCisJLnR2bm9ybXMgCQk9CisJCVY0TDJfU1REX05UU0MgIHwgVjRMMl9TVERfU0VDQU0gfCBWNEwyX1NURF9QQUxfQiB8CisJCVY0TDJfU1REX1BBTF9HIHwgVjRMMl9TVERfUEFMX0ggfCBWNEwyX1NURF9QQUxfSSB8CisJCVY0TDJfU1REX1BBTF9EIHwgVjRMMl9TVERfUEFMX00gfCBWNEwyX1NURF9QQUxfTiB8CisJCVY0TDJfU1REX1BBTF82MCwKK307CisKK2ludCBoZHB2cl9yZWdpc3Rlcl92aWRlb2RldihzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKKwkJCSAgICBpbnQgZGV2bnVtKQoreworCS8qIHNldHVwIGFuZCByZWdpc3RlciB2aWRlbyBkZXZpY2UgKi8KKwlkZXYtPnZpZGVvX2RldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmICghZGV2LT52aWRlb19kZXYpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJ2aWRlb19kZXZpY2VfYWxsb2MoKSBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCSooZGV2LT52aWRlb19kZXYpID0gaGRwdnJfdmlkZW9fdGVtcGxhdGU7CisJc3RyY3B5KGRldi0+dmlkZW9fZGV2LT5uYW1lLCAiSGF1cHBhdWdlIEhEIFBWUiIpOworCWRldi0+dmlkZW9fZGV2LT5wYXJlbnQgPSBwYXJlbnQ7CisJdmlkZW9fc2V0X2RydmRhdGEoZGV2LT52aWRlb19kZXYsIGRldik7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGRldi0+dmlkZW9fZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCBkZXZudW0pKSB7CisJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAidmlkZW9fZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXJldHVybiAwOworZXJyb3I6CisJcmV0dXJuIC1FTk9NRU07Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVkZDg3NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnIuaApAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAqIEhhdXBwYXVnZSBIRCBQVlIgVVNCIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgICAgIEphbm5lIEdydW5hdSAoakBqYW5uYXUubmV0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisKKyNkZWZpbmUgSERQVlJfTUFKT1JfVkVSU0lPTiAwCisjZGVmaW5lIEhEUFZSX01JTk9SX1ZFUlNJT04gMgorI2RlZmluZSBIRFBWUl9SRUxFQVNFIDAKKyNkZWZpbmUgSERQVlJfVkVSU0lPTiBcCisJS0VSTkVMX1ZFUlNJT04oSERQVlJfTUFKT1JfVkVSU0lPTiwgSERQVlJfTUlOT1JfVkVSU0lPTiwgSERQVlJfUkVMRUFTRSkKKworI2RlZmluZSBIRFBWUl9NQVggOAorCisvKiBEZWZpbmUgdGhlc2UgdmFsdWVzIHRvIG1hdGNoIHlvdXIgZGV2aWNlcyAqLworI2RlZmluZSBIRF9QVlJfVkVORE9SX0lECTB4MjA0MAorI2RlZmluZSBIRF9QVlJfUFJPRFVDVF9JRAkweDQ5MDAKKyNkZWZpbmUgSERfUFZSX1BST0RVQ1RfSUQxCTB4NDkwMQorI2RlZmluZSBIRF9QVlJfUFJPRFVDVF9JRDIJMHg0OTAyCisKKyNkZWZpbmUgVU5TRVQgICAgKC0xVSkKKworI2RlZmluZSBOVU1fQlVGRkVSUyA2NAorCisjZGVmaW5lIEhEUFZSX0ZJUk1XQVJFX1ZFUlNJT04JCTB4OAorI2RlZmluZSBIRFBWUl9GSVJNV0FSRV9WRVJTSU9OX0FDMwkweGQKKworLyogI2RlZmluZSBIRFBWUl9ERUJVRyAqLworCitleHRlcm4gaW50IGhkcHZyX2RlYnVnOworCisjZGVmaW5lIE1TR19JTkZPCTEKKyNkZWZpbmUgTVNHX0JVRkZFUgkyCisKK3N0cnVjdCBoZHB2cl9vcHRpb25zIHsKKwl1OAl2aWRlb19zdGQ7CisJdTgJdmlkZW9faW5wdXQ7CisJdTgJYXVkaW9faW5wdXQ7CisJdTgJYml0cmF0ZTsJLyogaW4gMTAwa2JwcyAqLworCXU4CXBlYWtfYml0cmF0ZTsJLyogaW4gMTAwa2JwcyAqLworCXU4CWJpdHJhdGVfbW9kZTsKKwl1OAlnb3BfbW9kZTsKKwllbnVtIHY0bDJfbXBlZ19hdWRpb19lbmNvZGluZwlhdWRpb19jb2RlYzsKKwl1OAlicmlnaHRuZXNzOworCXU4CWNvbnRyYXN0OworCXU4CWh1ZTsKKwl1OAlzYXR1cmF0aW9uOworCXU4CXNoYXJwbmVzczsKK307CisKKy8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCitzdHJ1Y3QgaGRwdnJfZGV2aWNlIHsKKwkvKiB0aGUgdjRsIGRldmljZSBmb3IgdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlCSp2aWRlb19kZXY7CisJLyogdGhlIHVzYiBkZXZpY2UgZm9yIHRoaXMgZGV2aWNlICovCisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CisJLyogdjRsMi1kZXZpY2UgdW51c2VkICovCisJc3RydWN0IHY0bDJfZGV2aWNlCXY0bDJfZGV2OworCisJLyogdGhlIG1heCBwYWNrZXQgc2l6ZSBvZiB0aGUgYnVsayBlbmRwb2ludCAqLworCXNpemVfdAkJCWJ1bGtfaW5fc2l6ZTsKKwkvKiB0aGUgYWRkcmVzcyBvZiB0aGUgYnVsayBpbiBlbmRwb2ludCAqLworCV9fdTgJCQlidWxrX2luX2VuZHBvaW50QWRkcjsKKworCS8qIGhvbGRzIHRoZSBjdXJyZW50IGRldmljZSBzdGF0dXMgKi8KKwlfX3U4CQkJc3RhdHVzOworCS8qIGNvdW50IHRoZSBudW1iZXIgb2Ygb3BlbmVycyAqLworCXVpbnQJCQlvcGVuX2NvdW50OworCisJLyogaG9sZHMgdGhlIGN1cmVlbnQgc2V0IG9wdGlvbnMgKi8KKwlzdHJ1Y3QgaGRwdnJfb3B0aW9ucwlvcHRpb25zOworCisJdWludAkJCWZsYWdzOworCisJLyogc3luY2hyb25pemUgSS9PICovCisJc3RydWN0IG11dGV4CQlpb19tdXRleDsKKwkvKiBhdmFpbGFibGUgYnVmZmVycyAqLworCXN0cnVjdCBsaXN0X2hlYWQJZnJlZV9idWZmX2xpc3Q7CisJLyogaW4gcHJvZ3Jlc3MgYnVmZmVycyAqLworCXN0cnVjdCBsaXN0X2hlYWQJcmVjX2J1ZmZfbGlzdDsKKwkvKiB3YWl0cXVldWUgZm9yIGJ1ZmZlcnMgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2J1ZmZlcjsKKwkvKiB3YWl0cXVldWUgZm9yIGRhdGEgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2RhdGE7CisJLyoqLworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSp3b3JrcXVldWU7CisJLyoqLworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrZXI7CisKKwkvKiBJMkMgYWRhcHRlciAqLworCXN0cnVjdCBpMmNfYWRhcHRlcgkqaTJjX2FkYXB0ZXI7CisJLyogSTJDIGxvY2sgKi8KKwlzdHJ1Y3QgbXV0ZXgJCWkyY19tdXRleDsKKworCS8qIHVzYiBjb250cm9sIHRyYW5zZmVyIGJ1ZmZlciBhbmQgbG9jayAqLworCXN0cnVjdCBtdXRleAkJdXNiY19tdXRleDsKKwl1OAkJCSp1c2JjX2J1ZjsKK307CisKKworLyogYnVmZmVyIG9uZSBidWxrIHVyYiBvZiBkYXRhICovCitzdHJ1Y3QgaGRwdnJfYnVmZmVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWJ1ZmZfbGlzdDsKKworCXN0cnVjdCB1cmIJCSp1cmI7CisKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlCSpkZXY7CisKKwl1aW50CQkJcG9zOworCisJX191OAkJCXN0YXR1czsKK307CisKKy8qICovCisKK3N0cnVjdCBoZHB2cl92aWRlb19pbmZvIHsKKwl1MTYJd2lkdGg7CisJdTE2CWhlaWdodDsKKwl1OAlmcHM7Cit9OworCitlbnVtIHsKKwlTVEFUVVNfVU5JTklUSUFMSVpFRAk9IDAsCisJU1RBVFVTX0lETEUsCisJU1RBVFVTX1NUQVJUSU5HLAorCVNUQVRVU19TSFVUVElOR19ET1dOLAorCVNUQVRVU19TVFJFQU1JTkcsCisJU1RBVFVTX0VSUk9SLAorCVNUQVRVU19ESVNDT05ORUNURUQsCit9OworCitlbnVtIHsKKwlIRFBWUl9GTEFHX0FDM19DQVAgPSAxLAorfTsKKworZW51bSB7CisJQlVGU1RBVF9VTklOSVRJQUxJWkVEID0gMCwKKwlCVUZTVEFUX0FWQUlMQUJMRSwKKwlCVUZTVEFUX0lOUFJPR1JFU1MsCisJQlVGU1RBVF9SRUFEWSwKK307CisKKyNkZWZpbmUgQ1RSTF9TVEFSVF9TVFJFQU1JTkdfVkFMVUUJMHgwNzAwCisjZGVmaW5lIENUUkxfU1RPUF9TVFJFQU1JTkdfVkFMVUUJMHgwODAwCisjZGVmaW5lIENUUkxfQklUUkFURV9WQUxVRQkJMHgxMDAwCisjZGVmaW5lIENUUkxfQklUUkFURV9NT0RFX1ZBTFVFCQkweDEyMDAKKyNkZWZpbmUgQ1RSTF9HT1BfTU9ERV9WQUxVRQkJMHgxMzAwCisjZGVmaW5lIENUUkxfVklERU9fSU5QVVRfVkFMVUUJCTB4MTUwMAorI2RlZmluZSBDVFJMX1ZJREVPX1NURF9UWVBFCQkweDE3MDAKKyNkZWZpbmUgQ1RSTF9BVURJT19JTlBVVF9WQUxVRQkJMHgyNTAwCisjZGVmaW5lIENUUkxfQlJJR0hUTkVTUwkJCTB4MjkwMAorI2RlZmluZSBDVFJMX0NPTlRSQVNUCQkJMHgyYTAwCisjZGVmaW5lIENUUkxfSFVFCQkJMHgyYjAwCisjZGVmaW5lIENUUkxfU0FUVVJBVElPTgkJCTB4MmMwMAorI2RlZmluZSBDVFJMX1NIQVJQTkVTUwkJCTB4MmQwMAorI2RlZmluZSBDVFJMX0xPV19QQVNTX0ZJTFRFUl9WQUxVRQkweDMxMDAKKworI2RlZmluZSBDVFJMX0RFRkFVTFRfSU5ERVgJCTB4MDAwMworCisKKwkvKiA6MCBzIDM4IDAxIDEwMDAgMDAwMyAwMDA0IDQgPSAwYTAwY2EwMAorCSAqIEJJVFJBVEUgU0VUVElORworCSAqICAgMXN0IGFuZCAybmQgYnl0ZSAobGl0dGxlIGVuZGlhbik6IGF2ZXJhZ2UgYml0cmF0ZSBpbiAxMDAgMDAwIGJpdC9zCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAxIG1iaXQvcywgbWF4OiAxMy41IG1iaXQvcworCSAqICAgM3JkIGFuZCA0dGggYnl0ZSAobGl0dGxlIGVuZGlhbik6IHBlYWsgYml0cmF0ZSBpbiAxMDAgMDAwIGJpdC9zCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluOiBhdmVyYWdlICsgMTAwa2JpdC9zLAorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg6IDIwLjIgbWJpdC9zCisJICovCisKKwkvKiA6MCBzIDM4IDAxIDEyMDAgMDAwMyAwMDAxIDEgPSAwMgorCSAqIEJJVCBSQVRFIE1PREUKKwkgKiAgY29uc3RhbnQgPSAxLCB2YXJpYWJsZSAocGVhaykgPSAyLCB2YXJpYWJsZSAoYXZlcmFnZSkgPSAzCisJICovCisKKwkvKiA6MCBzIDM4IDAxIDEzMDAgMDAwMyAwMDAxIDEgPSAwMworCSAqIEdPUCBNT0RFICgyIGJpdCkKKwkgKiAgICBsb3cgYml0IDAvMTogYWR2YW5jZWQvc2ltcGxlIEdPUAorCSAqICAgaGlnaCBiaXQgMC8xOiBJRFIoNC8zMi8xMjgpIC8gbm8gSURSICg0LzMyLzApCisJICovCisKKwkvKiA6MCBzIDM4IDAxIDE3MDAgMDAwMyAwMDAxIDEgPSAwMAorCSAqIFZJREVPIFNUQU5EQVJEIG9yIEZSRVFVTkNZIDAgPSA2MGh6LCAxID0gNTBoegorCSAqLworCisJLyogOjAgcyAzOCAwMSAzMTAwIDAwMDMgMDAwNCA0ID0gMDMwMzAwMDAKKwkgKiBGSUxURVIgQ09OVFJPTAorCSAqICAgMXN0IGJ5dGUgbHVtYSBsb3cgcGFzcyBmaWx0ZXIgc3RyZW5ndGgsCisJICogICAybmQgYnl0ZSBjaHJvbWEgbG93IHBhc3MgZmlsdGVyIHN0cmVuZ3RoLAorCSAqICAgM3JkIGJ5dGUgTUYgZW5hYmxlIGNocm9tYSwgbWluPTAsIG1heD0xCisJICogICA0dGggYnl0ZSBuCisJICovCisKKworCS8qIDowIHMgMzggYjkgMDAwMSAwMDAwIDAwMDAgMCAqLworCisKKworLyogOjAgcyAzOCBkMyAwMDAwIDAwMDAgMDAwMSAxID0gMDAgKi8KKy8qIAkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwgKi8KKy8qIAkJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwgKi8KKy8qIAkJCQkgICAgICAweGQzLCAweDM4LCAqLworLyogCQkJCSAgICAgIDAsIDAsICovCisvKiAJCQkJICAgICAgIlwwIiwgMSwgKi8KKy8qIAkJCQkgICAgICAxMDAwKTsgKi8KKworLyogCQlpbmZvKCJjb250cm9sIHJlcXVlc3QgcmV0dXJuZWQgJWQiLCByZXQpOyAqLworLyogCQltc2xlZXAoNTAwMCk7ICovCisKKworCS8qIDowIHMgYjggODEgMTQwMCAwMDAzIDAwMDUgNSA8CisJICogOjAgMCA1ID0gZDAwMjQwMDIgMTkKKwkgKiBRVUVSWSBGUkFNRSBTSVpFIEFORCBSQVRFCisJICogICAxc3QgYW5kIDJuZCBieXRlIChsaXR0bGUgZW5kaWFuKTogaG9yaXpvbnRhbCByZXNvbHV0aW9uCisJICogICAzcmQgYW5kIDR0aCBieXRlIChsaXR0bGUgZW5kaWFuKTogdmVydGljYWwgcmVzb2x1dGlvbgorCSAqICAgNXRoIGJ5dGU6IGZyYW1lIHJhdGUKKwkgKi8KKworCS8qIDowIHMgYjggODEgMTgwMCAwMDAzIDAwMDMgMyA8CisJICogOjAgMCAzID0gMDMwMTA0CisJICogUVVFUlkgU0lHTkFMIEFORCBERVRFQ1RFRCBMSU5FUywgbWF5YmUgSU5QVVQKKwkgKi8KKworZW51bSBoZHB2cl92aWRlb19zdGQgeworCUhEUFZSXzYwSFogPSAwLAorCUhEUFZSXzUwSFosCit9OworCitlbnVtIGhkcHZyX3ZpZGVvX2lucHV0IHsKKwlIRFBWUl9DT01QT05FTlQgPSAwLAorCUhEUFZSX1NWSURFTywKKwlIRFBWUl9DT01QT1NJVEUsCisJSERQVlJfVklERU9fSU5QVVRTCit9OworCitlbnVtIGhkcHZyX2F1ZGlvX2lucHV0cyB7CisJSERQVlJfUkNBX0JBQ0sgPSAwLAorCUhEUFZSX1JDQV9GUk9OVCwKKwlIRFBWUl9TUERJRiwKKwlIRFBWUl9BVURJT19JTlBVVFMKK307CisKK2VudW0gaGRwdnJfYml0cmF0ZV9tb2RlIHsKKwlIRFBWUl9DT05TVEFOVCA9IDEsCisJSERQVlJfVkFSSUFCTEVfUEVBSywKKwlIRFBWUl9WQVJJQUJMRV9BVkVSQUdFLAorfTsKKworZW51bSBoZHB2cl9nb3BfbW9kZSB7CisJSERQVlJfQURWQU5DRURfSURSX0dPUCA9IDAsCisJSERQVlJfU0lNUExFX0lEUl9HT1AsCisJSERQVlJfQURWQU5DRURfTk9JRFJfR09QLAorCUhEUFZSX1NJTVBMRV9OT0lEUl9HT1AsCit9OworCit2b2lkIGhkcHZyX2RlbGV0ZShzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBoYXJkd2FyZSBjb250cm9sIGZ1bmN0aW9ucyAqLworaW50IGhkcHZyX3NldF9vcHRpb25zKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CisKK2ludCBoZHB2cl9zZXRfYml0cmF0ZShzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOworCitpbnQgaGRwdnJfc2V0X2F1ZGlvKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiwgdTggaW5wdXQsCisJCSAgICBlbnVtIHY0bDJfbXBlZ19hdWRpb19lbmNvZGluZyBjb2RlYyk7CisKK2ludCBoZHB2cl9jb25maWdfY2FsbChzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIHVpbnQgdmFsdWUsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgdmFsYnVmKTsKKworc3RydWN0IGhkcHZyX3ZpZGVvX2luZm8gKmdldF92aWRlb19pbmZvKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CisKKy8qIDowIHMgYjggODEgMTgwMCAwMDAzIDAwMDMgMyA8ICovCisvKiA6MCAwIDMgPSAwMzAxZmYgKi8KK2ludCBnZXRfaW5wdXRfbGluZXNfaW5mbyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIHY0bDIgcmVnaXN0cmF0aW9uICovCitpbnQgaGRwdnJfcmVnaXN0ZXJfdmlkZW9kZXYoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCisJCQkgICAgaW50IGRldm51bWJlcik7CisKK2ludCBoZHB2cl9jYW5jZWxfcXVldWUoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogaTJjIGFkYXB0ZXIgcmVnaXN0cmF0aW9uICovCitpbnQgaGRwdnJfcmVnaXN0ZXJfaTJjX2FkYXB0ZXIoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogYnVmZmVyIG1hbmFnZW1lbnQgKi8KK2ludCBoZHB2cl9mcmVlX2J1ZmZlcnMoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KTsKK2ludCBoZHB2cl9hbGxvY19idWZmZXJzKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiwgdWludCBjb3VudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9nZW1pbmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jCmluZGV4IDc5MzkzZDEuLjhlMTQ2M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jCkBAIC01NiwxNyArNTYsNiBAQAogCXU4IGJ5dGU7CiB9OwogCi1zdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uX2lvY3RscyBpb2N0bHNbXSA9IHsKLQl7IFZJRElPQ19HX0lOUFVULAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfSU5QVVQsCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfUVVFUllDVFJMLCAJU0FBNzE0Nl9CRUZPUkUgfSwKLQl7IFZJRElPQ19FTlVNSU5QVVQsIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfU1RELAkJU0FBNzE0Nl9BRlRFUiB9LAotCXsgVklESU9DX0dfQ1RSTCwJU0FBNzE0Nl9CRUZPUkUgfSwKLQl7IFZJRElPQ19TX0NUUkwsCVNBQTcxNDZfQkVGT1JFIH0sCi0JeyAwLAkJCTAgfQotfTsKLQogI2RlZmluZSBIRVhJVU1fQ09OVFJPTFMJMQogc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBoZXhpdW1fY29udHJvbHNbXSA9IHsKIAl7IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSwgVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwgIkIvVyIsIDAsIDEsIDEsIDAsIDAgfSwKQEAgLTIzMSw2ICsyMjAsMTMyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9pbnB1dCAqaSkKK3sKKwlERUJfRUUoKCJWSURJT0NfRU5VTUlOUFVUICVkLlxuIiwgaS0+aW5kZXgpKTsKKworCWlmIChpLT5pbmRleCA8IDAgfHwgaS0+aW5kZXggPj0gSEVYSVVNX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1jcHkoaSwgJmhleGl1bV9pbnB1dHNbaS0+aW5kZXhdLCBzaXplb2Yoc3RydWN0IHY0bDJfaW5wdXQpKTsKKworCURFQl9EKCgidjRsMl9pb2N0bDogVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsIGktPmluZGV4KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgKmlucHV0KQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBoZXhpdW0gKmhleGl1bSA9IChzdHJ1Y3QgaGV4aXVtICopIGRldi0+ZXh0X3ByaXY7CisKKwkqaW5wdXQgPSBoZXhpdW0tPmN1cl9pbnB1dDsKKworCURFQl9EKCgiVklESU9DX0dfSU5QVVQ6ICVkXG4iLCAqaW5wdXQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgaGV4aXVtICpoZXhpdW0gPSAoc3RydWN0IGhleGl1bSAqKSBkZXYtPmV4dF9wcml2OworCisJREVCX0VFKCgiVklESU9DX1NfSU5QVVQgJWQuXG4iLCBpbnB1dCkpOworCisJaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSBIRVhJVU1fSU5QVVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhleGl1bS0+Y3VyX2lucHV0ID0gaW5wdXQ7CisJaGV4aXVtX3NldF9pbnB1dChoZXhpdW0sIGlucHV0KTsKKwlyZXR1cm4gMDsKK30KKworLyogdGhlIHNhYTcxNDYgcHJvdmlkZXMgc29tZSBjb250cm9scyAoYnJpZ2h0bmVzcywgY29udHJhc3QsIHNhdHVyYXRpb24pCisgICB3aGljaCBnZXRzIHJlZ2lzdGVyZWQgKmFmdGVyKiB0aGlzIGZ1bmN0aW9uLiBiZWNhdXNlIG9mIHRoaXMgd2UgaGF2ZQorICAgdG8gcmV0dXJuIHdpdGggYSB2YWx1ZSAhPSAwIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZGVkLi4gKi8KK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSBIRVhJVU1fQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgeworCQlpZiAoaGV4aXVtX2NvbnRyb2xzW2ldLmlkID09IHFjLT5pZCkgeworCQkJKnFjID0gaGV4aXVtX2NvbnRyb2xzW2ldOworCQkJREVCX0QoKCJWSURJT0NfUVVFUllDVFJMICVkLlxuIiwgcWMtPmlkKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gZGV2LT5leHRfdnZfZGF0YS0+Y29yZV9vcHMtPnZpZGlvY19xdWVyeWN0cmwoZmlsZSwgZmgsIHFjKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY29udHJvbCAqdmMpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGhleGl1bSAqaGV4aXVtID0gKHN0cnVjdCBoZXhpdW0gKikgZGV2LT5leHRfcHJpdjsKKwlpbnQgaTsKKworCWZvciAoaSA9IEhFWElVTV9DT05UUk9MUyAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChoZXhpdW1fY29udHJvbHNbaV0uaWQgPT0gdmMtPmlkKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPCAwKQorCQlyZXR1cm4gZGV2LT5leHRfdnZfZGF0YS0+Y29yZV9vcHMtPnZpZGlvY19nX2N0cmwoZmlsZSwgZmgsIHZjKTsKKworCWlmICh2Yy0+aWQgPT0gVjRMMl9DSURfUFJJVkFURV9CQVNFKSB7CisJCXZjLT52YWx1ZSA9IGhleGl1bS0+Y3VyX2J3OworCQlERUJfRCgoIlZJRElPQ19HX0NUUkwgQlc6JWQuXG4iLCB2Yy0+dmFsdWUpKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9jb250cm9sICp2YykKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgaGV4aXVtICpoZXhpdW0gPSAoc3RydWN0IGhleGl1bSAqKSBkZXYtPmV4dF9wcml2OworCWludCBpID0gMDsKKworCWZvciAoaSA9IEhFWElVTV9DT05UUk9MUyAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChoZXhpdW1fY29udHJvbHNbaV0uaWQgPT0gdmMtPmlkKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPCAwKQorCQlyZXR1cm4gZGV2LT5leHRfdnZfZGF0YS0+Y29yZV9vcHMtPnZpZGlvY19zX2N0cmwoZmlsZSwgZmgsIHZjKTsKKworCWlmICh2Yy0+aWQgPT0gVjRMMl9DSURfUFJJVkFURV9CQVNFKQorCQloZXhpdW0tPmN1cl9idyA9IHZjLT52YWx1ZTsKKworCURFQl9EKCgiVklESU9DX1NfQ1RSTCBCVzolZC5cbiIsIGhleGl1bS0+Y3VyX2J3KSk7CisKKwlpZiAoMCA9PSBoZXhpdW0tPmN1cl9idyAmJiBWNEwyX1NURF9QQUwgPT0gaGV4aXVtLT5jdXJfc3RkKSB7CisJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fcGFsKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICgwID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX05UU0MgPT0gaGV4aXVtLT5jdXJfc3RkKSB7CisJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fbnRzYyk7CisJCXJldHVybiAwOworCX0KKwlpZiAoMCA9PSBoZXhpdW0tPmN1cl9idyAmJiBWNEwyX1NURF9TRUNBTSA9PSBoZXhpdW0tPmN1cl9zdGQpIHsKKwkJaGV4aXVtX3NldF9zdGFuZGFyZChoZXhpdW0sIGhleGl1bV9zZWNhbSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoMSA9PSBoZXhpdW0tPmN1cl9idyAmJiBWNEwyX1NURF9QQUwgPT0gaGV4aXVtLT5jdXJfc3RkKSB7CisJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fcGFsX2J3KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICgxID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX05UU0MgPT0gaGV4aXVtLT5jdXJfc3RkKSB7CisJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fbnRzY19idyk7CisJCXJldHVybiAwOworCX0KKwlpZiAoMSA9PSBoZXhpdW0tPmN1cl9idyAmJiBWNEwyX1NURF9TRUNBTSA9PSBoZXhpdW0tPmN1cl9zdGQpCisJCS8qIGZpeG1lOiBpcyB0aGVyZSBubyBidyBzZWNhbSBtb2RlPyAqLworCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAtRUlOVkFMOworfQorCisKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRfdnYgdnZfZGF0YTsKIAogLyogdGhpcyBmdW5jdGlvbiBvbmx5IGdldHMgY2FsbGVkIHdoZW4gdGhlIHByb2Jpbmcgd2FzIHN1Y2Nlc3NmdWwgKi8KQEAgLTI3OSw2ICszOTQsMTIgQEAKIAloZXhpdW0tPmN1cl9pbnB1dCA9IDA7CiAKIAlzYWE3MTQ2X3Z2X2luaXQoZGV2LCAmdnZfZGF0YSk7CisJdnZfZGF0YS5vcHMudmlkaW9jX3F1ZXJ5Y3RybCA9IHZpZGlvY19xdWVyeWN0cmw7CisJdnZfZGF0YS5vcHMudmlkaW9jX2dfY3RybCA9IHZpZGlvY19nX2N0cmw7CisJdnZfZGF0YS5vcHMudmlkaW9jX3NfY3RybCA9IHZpZGlvY19zX2N0cmw7CisJdnZfZGF0YS5vcHMudmlkaW9jX2VudW1faW5wdXQgPSB2aWRpb2NfZW51bV9pbnB1dDsKKwl2dl9kYXRhLm9wcy52aWRpb2NfZ19pbnB1dCA9IHZpZGlvY19nX2lucHV0OworCXZ2X2RhdGEub3BzLnZpZGlvY19zX2lucHV0ID0gdmlkaW9jX3NfaW5wdXQ7CiAJaWYgKDAgIT0gc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJmhleGl1bS0+dmlkZW9fZGV2LCBkZXYsICJoZXhpdW0gZ2VtaW5pIiwgVkZMX1RZUEVfR1JBQkJFUikpIHsKIAkJcHJpbnRrKCJoZXhpdW1fZ2VtaW5pOiBjYW5ub3QgcmVnaXN0ZXIgY2FwdHVyZSB2NGwyIGRldmljZS4gc2tpcHBpbmcuXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtMzA2LDE1MyArNDI3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGxvbmcgaGV4aXVtX2lvY3RsKHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgaGV4aXVtICpoZXhpdW0gPSAoc3RydWN0IGhleGl1bSAqKSBkZXYtPmV4dF9wcml2OwotLyoKLQlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7Ci0qLwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfRU5VTUlOUFVUOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaSA9IGFyZzsKLQkJCURFQl9FRSgoIlZJRElPQ19FTlVNSU5QVVQgJWQuXG4iLCBpLT5pbmRleCkpOwotCi0JCQlpZiAoaS0+aW5kZXggPCAwIHx8IGktPmluZGV4ID49IEhFWElVTV9JTlBVVFMpIHsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJbWVtY3B5KGksICZoZXhpdW1faW5wdXRzW2ktPmluZGV4XSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSk7Ci0KLQkJCURFQl9EKCgidjRsMl9pb2N0bDogVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsIGktPmluZGV4KSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DX0dfSU5QVVQ6Ci0JCXsKLQkJCWludCAqaW5wdXQgPSAoaW50ICopIGFyZzsKLQkJCSppbnB1dCA9IGhleGl1bS0+Y3VyX2lucHV0OwotCi0JCQlERUJfRCgoIlZJRElPQ19HX0lOUFVUOiAlZFxuIiwgKmlucHV0KSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DX1NfSU5QVVQ6Ci0JCXsKLQkJCWludCBpbnB1dCA9ICooaW50ICopIGFyZzsKLQotCQkJREVCX0VFKCgiVklESU9DX1NfSU5QVVQgJWQuXG4iLCBpbnB1dCkpOwotCi0JCQlpZiAoaW5wdXQgPCAwIHx8IGlucHV0ID49IEhFWElVTV9JTlBVVFMpIHsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJaGV4aXVtLT5jdXJfaW5wdXQgPSBpbnB1dDsKLQkJCWhleGl1bV9zZXRfaW5wdXQoaGV4aXVtLCBpbnB1dCk7Ci0KLQkJCXJldHVybiAwOwotCQl9Ci0JCS8qIHRoZSBzYWE3MTQ2IHByb3ZpZGVzIHNvbWUgY29udHJvbHMgKGJyaWdodG5lc3MsIGNvbnRyYXN0LCBzYXR1cmF0aW9uKQotCQkgICB3aGljaCBnZXRzIHJlZ2lzdGVyZWQgKmFmdGVyKiB0aGlzIGZ1bmN0aW9uLiBiZWNhdXNlIG9mIHRoaXMgd2UgaGF2ZQotCQkgICB0byByZXR1cm4gd2l0aCBhIHZhbHVlICE9IDAgZXZlbiBpZiB0aGUgZnVuY3Rpb24gc3VjY2VkZWQuLiAqLwotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQkJewotCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYyA9IGFyZzsKLQkJCWludCBpOwotCi0JCQlmb3IgKGkgPSBIRVhJVU1fQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgewotCQkJCWlmIChoZXhpdW1fY29udHJvbHNbaV0uaWQgPT0gcWMtPmlkKSB7Ci0JCQkJCSpxYyA9IGhleGl1bV9jb250cm9sc1tpXTsKLQkJCQkJREVCX0QoKCJWSURJT0NfUVVFUllDVFJMICVkLlxuIiwgcWMtPmlkKSk7Ci0JCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCX0KLQkJCXJldHVybiAtRUFHQUlOOwotCQl9Ci0JY2FzZSBWSURJT0NfR19DVFJMOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9jb250cm9sICp2YyA9IGFyZzsKLQkJCWludCBpOwotCi0JCQlmb3IgKGkgPSBIRVhJVU1fQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgewotCQkJCWlmIChoZXhpdW1fY29udHJvbHNbaV0uaWQgPT0gdmMtPmlkKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKGkgPCAwKSB7Ci0JCQkJcmV0dXJuIC1FQUdBSU47Ci0JCQl9Ci0KLQkJCXN3aXRjaCAodmMtPmlkKSB7Ci0JCQljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRTp7Ci0JCQkJCXZjLT52YWx1ZSA9IGhleGl1bS0+Y3VyX2J3OwotCQkJCQlERUJfRCgoIlZJRElPQ19HX0NUUkwgQlc6JWQuXG4iLCB2Yy0+dmFsdWUpKTsKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQkJewotCQkJc3RydWN0IHY0bDJfY29udHJvbCAqdmMgPSBhcmc7Ci0JCQlpbnQgaSA9IDA7Ci0KLQkJCWZvciAoaSA9IEhFWElVTV9DT05UUk9MUyAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCQkJaWYgKGhleGl1bV9jb250cm9sc1tpXS5pZCA9PSB2Yy0+aWQpIHsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoaSA8IDApIHsKLQkJCQlyZXR1cm4gLUVBR0FJTjsKLQkJCX0KLQotCQkJc3dpdGNoICh2Yy0+aWQpIHsKLQkJCWNhc2UgVjRMMl9DSURfUFJJVkFURV9CQVNFOnsKLQkJCQkJaGV4aXVtLT5jdXJfYncgPSB2Yy0+dmFsdWU7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJREVCX0QoKCJWSURJT0NfU19DVFJMIEJXOiVkLlxuIiwgaGV4aXVtLT5jdXJfYncpKTsKLQotCQkJaWYgKDAgPT0gaGV4aXVtLT5jdXJfYncgJiYgVjRMMl9TVERfUEFMID09IGhleGl1bS0+Y3VyX3N0ZCkgewotCQkJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fcGFsKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCWlmICgwID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX05UU0MgPT0gaGV4aXVtLT5jdXJfc3RkKSB7Ci0JCQkJaGV4aXVtX3NldF9zdGFuZGFyZChoZXhpdW0sIGhleGl1bV9udHNjKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCWlmICgwID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX1NFQ0FNID09IGhleGl1bS0+Y3VyX3N0ZCkgewotCQkJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fc2VjYW0pOwotCQkJCXJldHVybiAwOwotCQkJfQotCQkJaWYgKDEgPT0gaGV4aXVtLT5jdXJfYncgJiYgVjRMMl9TVERfUEFMID09IGhleGl1bS0+Y3VyX3N0ZCkgewotCQkJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fcGFsX2J3KTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCWlmICgxID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX05UU0MgPT0gaGV4aXVtLT5jdXJfc3RkKSB7Ci0JCQkJaGV4aXVtX3NldF9zdGFuZGFyZChoZXhpdW0sIGhleGl1bV9udHNjX2J3KTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCWlmICgxID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX1NFQ0FNID09IGhleGl1bS0+Y3VyX3N0ZCkgewotCQkJCS8qIGZpeG1lOiBpcyB0aGVyZSBubyBidyBzZWNhbSBtb2RlPyAqLwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCWRlZmF1bHQ6Ci0vKgotCQlERUJfRCgoImhleGl1bV9pb2N0bCgpIGRvZXMgbm90IGhhbmRsZSB0aGlzIGlvY3RsLlxuIikpOwotKi8KLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc3RkX2NhbGxiYWNrKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9zdGFuZGFyZCAqc3RkKQogewogCXN0cnVjdCBoZXhpdW0gKmhleGl1bSA9IChzdHJ1Y3QgaGV4aXVtICopIGRldi0+ZXh0X3ByaXY7CkBAIC01MTQsOCArNDg4LDYgQEAKIAkuc3RkcyA9ICZoZXhpdW1fc3RhbmRhcmRzWzBdLAogCS5udW1fc3RkcyA9IHNpemVvZihoZXhpdW1fc3RhbmRhcmRzKSAvIHNpemVvZihzdHJ1Y3Qgc2FhNzE0Nl9zdGFuZGFyZCksCiAJLnN0ZF9jYWxsYmFjayA9ICZzdGRfY2FsbGJhY2ssCi0JLmlvY3RscyA9ICZpb2N0bHNbMF0sCi0JLmlvY3RsID0gaGV4aXVtX2lvY3RsLAogfTsKIAogc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbiBoZXhpdW1fZXh0ZW5zaW9uID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fb3Jpb24uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX29yaW9uLmMKaW5kZXggMDc0YmVjNy4uMmJjMzlmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fb3Jpb24uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9vcmlvbi5jCkBAIC01NywxNCArNTcsNiBAQAogCXU4IGJ5dGU7CiB9OwogCi1zdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uX2lvY3RscyBpb2N0bHNbXSA9IHsKLQl7IFZJRElPQ19HX0lOUFVULAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfSU5QVVQsCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfRU5VTUlOUFVULCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19TX1NURCwJCVNBQTcxNDZfQUZURVIgfSwKLQl7IDAsCQkJMCB9Ci19OwotCiBzdHJ1Y3QgaGV4aXVtCiB7CiAJaW50IHR5cGU7CkBAIC0zMjksNiArMzIxLDQ0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9pbnB1dCAqaSkKK3sKKwlERUJfRUUoKCJWSURJT0NfRU5VTUlOUFVUICVkLlxuIiwgaS0+aW5kZXgpKTsKKworCWlmIChpLT5pbmRleCA8IDAgfHwgaS0+aW5kZXggPj0gSEVYSVVNX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1jcHkoaSwgJmhleGl1bV9pbnB1dHNbaS0+aW5kZXhdLCBzaXplb2Yoc3RydWN0IHY0bDJfaW5wdXQpKTsKKworCURFQl9EKCgidjRsMl9pb2N0bDogVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsIGktPmluZGV4KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgKmlucHV0KQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBoZXhpdW0gKmhleGl1bSA9IChzdHJ1Y3QgaGV4aXVtICopIGRldi0+ZXh0X3ByaXY7CisKKwkqaW5wdXQgPSBoZXhpdW0tPmN1cl9pbnB1dDsKKworCURFQl9EKCgiVklESU9DX0dfSU5QVVQ6ICVkXG4iLCAqaW5wdXQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgaGV4aXVtICpoZXhpdW0gPSAoc3RydWN0IGhleGl1bSAqKSBkZXYtPmV4dF9wcml2OworCisJaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSBIRVhJVU1fSU5QVVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhleGl1bS0+Y3VyX2lucHV0ID0gaW5wdXQ7CisJaGV4aXVtX3NldF9pbnB1dChoZXhpdW0sIGlucHV0KTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0X3Z2IHZ2X2RhdGE7CiAKIC8qIHRoaXMgZnVuY3Rpb24gb25seSBnZXRzIGNhbGxlZCB3aGVuIHRoZSBwcm9iaW5nIHdhcyBzdWNjZXNzZnVsICovCkBAIC0zMzksNiArMzY5LDkgQEAKIAlERUJfRUUoKCIuXG4iKSk7CiAKIAlzYWE3MTQ2X3Z2X2luaXQoZGV2LCAmdnZfZGF0YSk7CisJdnZfZGF0YS5vcHMudmlkaW9jX2VudW1faW5wdXQgPSB2aWRpb2NfZW51bV9pbnB1dDsKKwl2dl9kYXRhLm9wcy52aWRpb2NfZ19pbnB1dCA9IHZpZGlvY19nX2lucHV0OworCXZ2X2RhdGEub3BzLnZpZGlvY19zX2lucHV0ID0gdmlkaW9jX3NfaW5wdXQ7CiAJaWYgKDAgIT0gc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJmhleGl1bS0+dmlkZW9fZGV2LCBkZXYsICJoZXhpdW0gb3Jpb24iLCBWRkxfVFlQRV9HUkFCQkVSKSkgewogCQlwcmludGsoImhleGl1bV9vcmlvbjogY2Fubm90IHJlZ2lzdGVyIGNhcHR1cmUgdjRsMiBkZXZpY2UuIHNraXBwaW5nLlxuIik7CiAJCXJldHVybiAtMTsKQEAgLTM3MCw1OCArNDAzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGxvbmcgaGV4aXVtX2lvY3RsKHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgaGV4aXVtICpoZXhpdW0gPSAoc3RydWN0IGhleGl1bSAqKSBkZXYtPmV4dF9wcml2OwotLyoKLQlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7Ci0qLwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfRU5VTUlOUFVUOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaSA9IGFyZzsKLQkJCURFQl9FRSgoIlZJRElPQ19FTlVNSU5QVVQgJWQuXG4iLCBpLT5pbmRleCkpOwotCi0JCQlpZiAoaS0+aW5kZXggPCAwIHx8IGktPmluZGV4ID49IEhFWElVTV9JTlBVVFMpIHsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJbWVtY3B5KGksICZoZXhpdW1faW5wdXRzW2ktPmluZGV4XSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSk7Ci0KLQkJCURFQl9EKCgidjRsMl9pb2N0bDogVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsIGktPmluZGV4KSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DX0dfSU5QVVQ6Ci0JCXsKLQkJCWludCAqaW5wdXQgPSAoaW50ICopIGFyZzsKLQkJCSppbnB1dCA9IGhleGl1bS0+Y3VyX2lucHV0OwotCi0JCQlERUJfRCgoIlZJRElPQ19HX0lOUFVUOiAlZFxuIiwgKmlucHV0KSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DX1NfSU5QVVQ6Ci0JCXsKLQkJCWludCBpbnB1dCA9ICooaW50ICopIGFyZzsKLQotCQkJaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSBIRVhJVU1fSU5QVVRTKSB7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCWhleGl1bS0+Y3VyX2lucHV0ID0gaW5wdXQ7Ci0JCQloZXhpdW1fc2V0X2lucHV0KGhleGl1bSwgaW5wdXQpOwotCi0JCQlyZXR1cm4gMDsKLQkJfQotCWRlZmF1bHQ6Ci0vKgotCQlERUJfRCgoImhleGl1bV9pb2N0bCgpIGRvZXMgbm90IGhhbmRsZSB0aGlzIGlvY3RsLlxuIikpOwotKi8KLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc3RkX2NhbGxiYWNrKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9zdGFuZGFyZCAqc3RkKQogewogCXJldHVybiAwOwpAQCAtNDc5LDggKzQ2MCw2IEBACiAJLnN0ZHMgPSAmaGV4aXVtX3N0YW5kYXJkc1swXSwKIAkubnVtX3N0ZHMgPSBzaXplb2YoaGV4aXVtX3N0YW5kYXJkcykgLyBzaXplb2Yoc3RydWN0IHNhYTcxNDZfc3RhbmRhcmQpLAogCS5zdGRfY2FsbGJhY2sgPSAmc3RkX2NhbGxiYWNrLAotCS5pb2N0bHMgPSAmaW9jdGxzWzBdLAotCS5pb2N0bCA9IGhleGl1bV9pb2N0bCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb24gZXh0ZW5zaW9uID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pbmR5Y2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2luZHljYW0uYwppbmRleCA4NGI5ZTRmLi4zZDY5NDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2luZHljYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2luZHljYW0uYwpAQCAtMTksMTAgKzE5LDEyIEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogLyogSW5keUNhbSBkZWNvZGVzIHN0cmVhbSBvZiBwaG90b25zIGludG8gZGlnaXRhbCBpbWFnZSByZXByZXNlbnRhdGlvbiA7LSkgKi8KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogI2luY2x1ZGUgImluZHljYW0uaCIKIApAQCAtMzMsNiArMzUsNyBAQAogTU9EVUxFX0FVVEhPUigiTWlrYWVsIE5vdXNpYWluZW4gPHRtbm91c2lhQGNjLmh1dC5maT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorCiAvLyAjZGVmaW5lIElORFlDQU1fREVCVUcKIAogI2lmZGVmIElORFlDQU1fREVCVUcKQEAgLTQ0LDExICs0NywxNCBAQAogI2VuZGlmCiAKIHN0cnVjdCBpbmR5Y2FtIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAl1OCB2ZXJzaW9uOwogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfaW5keWNhbTsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGluZHljYW0gKnRvX2luZHljYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgaW5keWNhbSwgc2QpOworfQogCiBzdGF0aWMgY29uc3QgdTggaW5pdHNlcVtdID0gewogCUlORFlDQU1fQ09OVFJPTF9BR0NFTkEsCQkvKiBJTkRZQ0FNX0NPTlRST0wgKi8KQEAgLTYzLDggKzY5LDkgQEAKIAogLyogSW5keUNhbSByZWdpc3RlciBoYW5kbGluZyAqLwogCi1zdGF0aWMgaW50IGluZHljYW1fcmVhZF9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCAqdmFsdWUpCitzdGF0aWMgaW50IGluZHljYW1fcmVhZF9yZWcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLCB1OCAqdmFsdWUpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCWludCByZXQ7CiAKIAlpZiAocmVnID09IElORFlDQU1fUkVHX1JFU0VUKSB7CkBAIC04NywxMiArOTQsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpbmR5Y2FtX3dyaXRlX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIGludCBpbmR5Y2FtX3dyaXRlX3JlZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbHVlKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAlpbnQgZXJyOwogCi0JaWYgKChyZWcgPT0gSU5EWUNBTV9SRUdfQlJJR0hUTkVTUykKLQkgICAgfHwgKHJlZyA9PSBJTkRZQ0FNX1JFR19WRVJTSU9OKSkgeworCWlmIChyZWcgPT0gSU5EWUNBTV9SRUdfQlJJR0hUTkVTUyB8fCByZWcgPT0gSU5EWUNBTV9SRUdfVkVSU0lPTikgewogCQlkcHJpbnRrKCJpbmR5Y2FtX3dyaXRlX3JlZygpOiAiCiAJCQkic2tpcHBpbmcgcmVhZC1vbmx5IHJlZ2lzdGVyICVkXG4iLCByZWcpOwogCQlyZXR1cm4gMDsKQEAgLTEwOCwxMyArMTE1LDEzIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBpbmR5Y2FtX3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywKK3N0YXRpYyBpbnQgaW5keWNhbV93cml0ZV9ibG9jayhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsCiAJCQkgICAgICAgdTggbGVuZ3RoLCB1OCAqZGF0YSkKIHsKIAlpbnQgaSwgZXJyOwogCiAJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0JCWVyciA9IGluZHljYW1fd3JpdGVfcmVnKGNsaWVudCwgcmVnICsgaSwgZGF0YVtpXSk7CisJCWVyciA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCByZWcgKyBpLCBkYXRhW2ldKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMTI1LDc5ICsxMzIsNzggQEAKIC8qIEhlbHBlciBmdW5jdGlvbnMgKi8KIAogI2lmZGVmIElORFlDQU1fREVCVUcKLXN0YXRpYyB2b2lkIGluZHljYW1fcmVnZHVtcF9kZWJ1ZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIHZvaWQgaW5keWNhbV9yZWdkdW1wX2RlYnVnKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7CiAJaW50IGk7CiAJdTggdmFsOwogCiAJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgewotCQlpbmR5Y2FtX3JlYWRfcmVnKGNsaWVudCwgaSwgJnZhbCk7CisJCWluZHljYW1fcmVhZF9yZWcoc2QsIGksICZ2YWwpOwogCQlkcHJpbnRrKCJSZWcgJWQgPSAweCUwMnhcbiIsIGksIHZhbCk7CiAJfQogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgaW5keWNhbV9nZXRfY29udHJvbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgICAgIHN0cnVjdCBpbmR5Y2FtX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IGluZHljYW1fZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGluZHljYW0gKmNhbWVyYSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBpbmR5Y2FtICpjYW1lcmEgPSB0b19pbmR5Y2FtKHNkKTsKIAl1OCByZWc7CiAJaW50IHJldCA9IDA7CiAKLQlzd2l0Y2ggKGN0cmwtPnR5cGUpIHsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9BR0M6Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfQVdCOgotCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKGNsaWVudCwgSU5EWUNBTV9SRUdfQ09OVFJPTCwgJnJlZyk7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVUT0dBSU46CisJY2FzZSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0U6CisJCXJldCA9IGluZHljYW1fcmVhZF9yZWcoc2QsIElORFlDQU1fUkVHX0NPTlRST0wsICZyZWcpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIC1FSU87Ci0JCWlmIChjdHJsLT50eXBlID09IElORFlDQU1fQ09OVFJPTF9BR0MpCisJCWlmIChjdHJsLT5pZCA9PSBWNEwyX0NJRF9BVVRPR0FJTikKIAkJCWN0cmwtPnZhbHVlID0gKHJlZyAmIElORFlDQU1fQ09OVFJPTF9BR0NFTkEpCiAJCQkJPyAxIDogMDsKIAkJZWxzZQogCQkJY3RybC0+dmFsdWUgPSAocmVnICYgSU5EWUNBTV9DT05UUk9MX0FXQkNUTCkKIAkJCQk/IDEgOiAwOwogCQlicmVhazsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9TSFVUVEVSOgotCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKGNsaWVudCwgSU5EWUNBTV9SRUdfU0hVVFRFUiwgJnJlZyk7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKKwkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhzZCwgSU5EWUNBTV9SRUdfU0hVVFRFUiwgJnJlZyk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gLUVJTzsKIAkJY3RybC0+dmFsdWUgPSAoKHMzMilyZWcgPT0gMHgwMCkgPyAweGZmIDogKChzMzIpcmVnIC0gMSk7CiAJCWJyZWFrOwotCWNhc2UgSU5EWUNBTV9DT05UUk9MX0dBSU46Ci0JCXJldCA9IGluZHljYW1fcmVhZF9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19HQUlOLCAmcmVnKTsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCXJldCA9IGluZHljYW1fcmVhZF9yZWcoc2QsIElORFlDQU1fUkVHX0dBSU4sICZyZWcpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIC1FSU87CiAJCWN0cmwtPnZhbHVlID0gKHMzMilyZWc7CiAJCWJyZWFrOwotCWNhc2UgSU5EWUNBTV9DT05UUk9MX1JFRF9CQUxBTkNFOgotCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKGNsaWVudCwgSU5EWUNBTV9SRUdfUkVEX0JBTEFOQ0UsICZyZWcpOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCXJldCA9IGluZHljYW1fcmVhZF9yZWcoc2QsIElORFlDQU1fUkVHX1JFRF9CQUxBTkNFLCAmcmVnKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiAtRUlPOwogCQljdHJsLT52YWx1ZSA9IChzMzIpcmVnOwogCQlicmVhazsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9CTFVFX0JBTEFOQ0U6Ci0JCXJldCA9IGluZHljYW1fcmVhZF9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19CTFVFX0JBTEFOQ0UsICZyZWcpOworCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgorCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKHNkLCBJTkRZQ0FNX1JFR19CTFVFX0JBTEFOQ0UsICZyZWcpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIC1FSU87CiAJCWN0cmwtPnZhbHVlID0gKHMzMilyZWc7CiAJCWJyZWFrOwogCWNhc2UgSU5EWUNBTV9DT05UUk9MX1JFRF9TQVRVUkFUSU9OOgotCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKGNsaWVudCwKKwkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhzZCwKIAkJCQkgICAgICAgSU5EWUNBTV9SRUdfUkVEX1NBVFVSQVRJT04sICZyZWcpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIC1FSU87CiAJCWN0cmwtPnZhbHVlID0gKHMzMilyZWc7CiAJCWJyZWFrOwogCWNhc2UgSU5EWUNBTV9DT05UUk9MX0JMVUVfU0FUVVJBVElPTjoKLQkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhjbGllbnQsCisJCXJldCA9IGluZHljYW1fcmVhZF9yZWcoc2QsCiAJCQkJICAgICAgIElORFlDQU1fUkVHX0JMVUVfU0FUVVJBVElPTiwgJnJlZyk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gLUVJTzsKIAkJY3RybC0+dmFsdWUgPSAoczMyKXJlZzsKIAkJYnJlYWs7Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfR0FNTUE6CisJY2FzZSBWNEwyX0NJRF9HQU1NQToKIAkJaWYgKGNhbWVyYS0+dmVyc2lvbiA9PSBDQU1FUkFfVkVSU0lPTl9NT09TRSkgewotCQkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhjbGllbnQsCisJCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKHNkLAogCQkJCQkgICAgICAgSU5EWUNBTV9SRUdfR0FNTUEsICZyZWcpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gLUVJTzsKQEAgLTIxMywyMSArMjE5LDIwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpbmR5Y2FtX3NldF9jb250cm9sKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgICAgICAgc3RydWN0IGluZHljYW1fY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgaW5keWNhbV9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgaW5keWNhbSAqY2FtZXJhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGluZHljYW0gKmNhbWVyYSA9IHRvX2luZHljYW0oc2QpOwogCXU4IHJlZzsKIAlpbnQgcmV0ID0gMDsKIAotCXN3aXRjaCAoY3RybC0+dHlwZSkgewotCWNhc2UgSU5EWUNBTV9DT05UUk9MX0FHQzoKLQljYXNlIElORFlDQU1fQ09OVFJPTF9BV0I6Ci0JCXJldCA9IGluZHljYW1fcmVhZF9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19DT05UUk9MLCAmcmVnKTsKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVVRPR0FJTjoKKwljYXNlIFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRToKKwkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhzZCwgSU5EWUNBTV9SRUdfQ09OVFJPTCwgJnJlZyk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKIAotCQlpZiAoY3RybC0+dHlwZSA9PSBJTkRZQ0FNX0NPTlRST0xfQUdDKSB7CisJCWlmIChjdHJsLT5pZCA9PSBWNEwyX0NJRF9BVVRPR0FJTikgewogCQkJaWYgKGN0cmwtPnZhbHVlKQogCQkJCXJlZyB8PSBJTkRZQ0FNX0NPTlRST0xfQUdDRU5BOwogCQkJZWxzZQpAQCAtMjM5LDM0ICsyNDQsMzQgQEAKIAkJCQlyZWcgJj0gfklORFlDQU1fQ09OVFJPTF9BV0JDVEw7CiAJCX0KIAotCQlyZXQgPSBpbmR5Y2FtX3dyaXRlX3JlZyhjbGllbnQsIElORFlDQU1fUkVHX0NPTlRST0wsIHJlZyk7CisJCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCBJTkRZQ0FNX1JFR19DT05UUk9MLCByZWcpOwogCQlicmVhazsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9TSFVUVEVSOgorCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CiAJCXJlZyA9IChjdHJsLT52YWx1ZSA9PSAweGZmKSA/IDB4MDAgOiAoY3RybC0+dmFsdWUgKyAxKTsKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19TSFVUVEVSLCByZWcpOworCQlyZXQgPSBpbmR5Y2FtX3dyaXRlX3JlZyhzZCwgSU5EWUNBTV9SRUdfU0hVVFRFUiwgcmVnKTsKIAkJYnJlYWs7Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfR0FJTjoKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19HQUlOLCBjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQlyZXQgPSBpbmR5Y2FtX3dyaXRlX3JlZyhzZCwgSU5EWUNBTV9SRUdfR0FJTiwgY3RybC0+dmFsdWUpOwogCQlicmVhazsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9SRURfQkFMQU5DRToKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19SRURfQkFMQU5DRSwKKwljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgorCQlyZXQgPSBpbmR5Y2FtX3dyaXRlX3JlZyhzZCwgSU5EWUNBTV9SRUdfUkVEX0JBTEFOQ0UsCiAJCQkJCWN0cmwtPnZhbHVlKTsKIAkJYnJlYWs7Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfQkxVRV9CQUxBTkNFOgotCQlyZXQgPSBpbmR5Y2FtX3dyaXRlX3JlZyhjbGllbnQsIElORFlDQU1fUkVHX0JMVUVfQkFMQU5DRSwKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoc2QsIElORFlDQU1fUkVHX0JMVUVfQkFMQU5DRSwKIAkJCQkJY3RybC0+dmFsdWUpOwogCQlicmVhazsKIAljYXNlIElORFlDQU1fQ09OVFJPTF9SRURfU0FUVVJBVElPTjoKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19SRURfU0FUVVJBVElPTiwKKwkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoc2QsIElORFlDQU1fUkVHX1JFRF9TQVRVUkFUSU9OLAogCQkJCQljdHJsLT52YWx1ZSk7CiAJCWJyZWFrOwogCWNhc2UgSU5EWUNBTV9DT05UUk9MX0JMVUVfU0FUVVJBVElPTjoKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19CTFVFX1NBVFVSQVRJT04sCisJCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCBJTkRZQ0FNX1JFR19CTFVFX1NBVFVSQVRJT04sCiAJCQkJCWN0cmwtPnZhbHVlKTsKIAkJYnJlYWs7Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfR0FNTUE6CisJY2FzZSBWNEwyX0NJRF9HQU1NQToKIAkJaWYgKGNhbWVyYS0+dmVyc2lvbiA9PSBDQU1FUkFfVkVSU0lPTl9NT09TRSkgewotCQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19HQU1NQSwKKwkJCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCBJTkRZQ0FNX1JFR19HQU1NQSwKIAkJCQkJCWN0cmwtPnZhbHVlKTsKIAkJfQogCQlicmVhazsKQEAgLTI3OSwxOTIgKzI4NCwxMDMgQEAKIAogLyogSTJDLWludGVyZmFjZSAqLwogCi1zdGF0aWMgaW50IGluZHljYW1fYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgaW50IGFkZHIsIGludCBraW5kKQorc3RhdGljIGludCBpbmR5Y2FtX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IGluZHljYW0gKmNhbWVyYSA9IHRvX2luZHljYW0oc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9JTkRZQ0FNLAorCQkgICAgICAgY2FtZXJhLT52ZXJzaW9uKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBpbmR5Y2FtX2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBpbmR5Y2FtX2dfY2hpcF9pZGVudCwKKwkuZ19jdHJsID0gaW5keWNhbV9nX2N0cmwsCisJLnNfY3RybCA9IGluZHljYW1fc19jdHJsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgaW5keWNhbV9vcHMgPSB7CisJLmNvcmUgPSAmaW5keWNhbV9jb3JlX29wcywKK307CisKK3N0YXRpYyBpbnQgaW5keWNhbV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGVyciA9IDA7CiAJc3RydWN0IGluZHljYW0gKmNhbWVyYTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKLQlwcmludGsoS0VSTl9JTkZPICJTR0kgSW5keUNhbSBkcml2ZXIgdmVyc2lvbiAlc1xuIiwKLQkgICAgICAgSU5EWUNBTV9NT0RVTEVfVkVSU0lPTik7CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIC1FTk9NRU07CiAJY2FtZXJhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGluZHljYW0pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNhbWVyYSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX2NsaWVudDsKLQl9CisJaWYgKCFjYW1lcmEpCisJCXJldHVybiAtRU5PTUVNOwogCi0JY2xpZW50LT5hZGRyID0gYWRkcjsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwOwotCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXJfaW5keWNhbTsKLQljbGllbnQtPmZsYWdzID0gMDsKLQlzdHJjcHkoY2xpZW50LT5uYW1lLCAiSW5keUNhbSBjbGllbnQiKTsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBjYW1lcmEpOwotCi0JY2FtZXJhLT5jbGllbnQgPSBjbGllbnQ7Ci0KLQllcnIgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2ZyZWVfY2FtZXJhOworCXNkID0gJmNhbWVyYS0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJmluZHljYW1fb3BzKTsKIAogCWNhbWVyYS0+dmVyc2lvbiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCiAJCQkJCQkgICBJTkRZQ0FNX1JFR19WRVJTSU9OKTsKIAlpZiAoY2FtZXJhLT52ZXJzaW9uICE9IENBTUVSQV9WRVJTSU9OX0lORFkgJiYKIAkgICAgY2FtZXJhLT52ZXJzaW9uICE9IENBTUVSQV9WRVJTSU9OX01PT1NFKSB7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X2RldGFjaF9jbGllbnQ7CisJCWtmcmVlKGNhbWVyYSk7CisJCXJldHVybiAtRU5PREVWOwogCX0KKwogCXByaW50ayhLRVJOX0lORk8gIkluZHlDYW0gdiVkLiVkIGRldGVjdGVkXG4iLAogCSAgICAgICBJTkRZQ0FNX1ZFUlNJT05fTUFKT1IoY2FtZXJhLT52ZXJzaW9uKSwKIAkgICAgICAgSU5EWUNBTV9WRVJTSU9OX01JTk9SKGNhbWVyYS0+dmVyc2lvbikpOwogCi0JaW5keWNhbV9yZWdkdW1wKGNsaWVudCk7CisJaW5keWNhbV9yZWdkdW1wKHNkKTsKIAogCS8vIGluaXRpYWxpemUKLQllcnIgPSBpbmR5Y2FtX3dyaXRlX2Jsb2NrKGNsaWVudCwgMCwgc2l6ZW9mKGluaXRzZXEpLCAodTggKikmaW5pdHNlcSk7CisJZXJyID0gaW5keWNhbV93cml0ZV9ibG9jayhzZCwgMCwgc2l6ZW9mKGluaXRzZXEpLCAodTggKikmaW5pdHNlcSk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIkluZHlDYW0gaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKLQkJZXJyID0gLUVJTzsKLQkJZ290byBvdXRfZGV0YWNoX2NsaWVudDsKKwkJa2ZyZWUoY2FtZXJhKTsKKwkJcmV0dXJuIC1FSU87CiAJfQogCi0JaW5keWNhbV9yZWdkdW1wKGNsaWVudCk7CisJaW5keWNhbV9yZWdkdW1wKHNkKTsKIAogCS8vIHdoaXRlIGJhbGFuY2UKLQllcnIgPSBpbmR5Y2FtX3dyaXRlX3JlZyhjbGllbnQsIElORFlDQU1fUkVHX0NPTlRST0wsCisJZXJyID0gaW5keWNhbV93cml0ZV9yZWcoc2QsIElORFlDQU1fUkVHX0NPTlRST0wsCiAJCQkgIElORFlDQU1fQ09OVFJPTF9BR0NFTkEgfCBJTkRZQ0FNX0NPTlRST0xfQVdCQ1RMKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiSW5keUNhbTogV2hpdGUgYmFsYW5jaW5nIGNhbWVyYSBmYWlsZWRcbiIpOwotCQllcnIgPSAtRUlPOwotCQlnb3RvIG91dF9kZXRhY2hfY2xpZW50OworCQlrZnJlZShjYW1lcmEpOworCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlpbmR5Y2FtX3JlZ2R1bXAoY2xpZW50KTsKKwlpbmR5Y2FtX3JlZ2R1bXAoc2QpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiSW5keUNhbSBpbml0aWFsaXplZFxuIik7CiAKIAlyZXR1cm4gMDsKLQotb3V0X2RldGFjaF9jbGllbnQ6Ci0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLW91dF9mcmVlX2NhbWVyYToKLQlrZnJlZShjYW1lcmEpOwotb3V0X2ZyZWVfY2xpZW50OgotCWtmcmVlKGNsaWVudCk7Ci0JcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBpbmR5Y2FtX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3N0YXRpYyBpbnQgaW5keWNhbV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQkvKiBJbmR5IHNwZWNpZmljIGNyYXAgKi8KLQlpZiAoYWRhcC0+aWQgPT0gSTJDX0hXX1NHSV9WSU5PKQotCQlyZXR1cm4gaW5keWNhbV9hdHRhY2goYWRhcCwgSU5EWUNBTV9BRERSLCAwKTsKLQkvKiBGZWVsIGZyZWUgdG8gYWRkIHByb2JlIGhlcmUgOi0pICovCi0JcmV0dXJuIC1FTk9ERVY7Ci19CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi1zdGF0aWMgaW50IGluZHljYW1fZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGluZHljYW0gKmNhbWVyYSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlrZnJlZShjYW1lcmEpOwotCWtmcmVlKGNsaWVudCk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHRvX2luZHljYW0oc2QpKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpbmR5Y2FtX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSAgIHZvaWQgKmFyZykKLXsKLQkvLyBzdHJ1Y3QgaW5keWNhbSAqY2FtZXJhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQkvKiBUaGUgb2xkIHZpZGVvX2RlY29kZXIgaW50ZXJmYWNlIGp1c3QgaXNuJ3QgZW5vdWdoLAotCSAqIHNvIHdlJ2xsIHVzZSBzb21lIGN1c3RvbSBjb21tYW5kcy4gKi8KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOiB7Ci0JCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQljYXAtPmZsYWdzICA9IFZJREVPX0RFQ09ERVJfTlRTQzsKLQkJY2FwLT5pbnB1dHMgPSAxOwotCQljYXAtPm91dHB1dHMgPSAxOwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6IHsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCSppYXJnID0gREVDT0RFUl9TVEFUVVNfR09PRCB8IERFQ09ERVJfU1RBVFVTX05UU0MgfAotCQkJREVDT0RFUl9TVEFUVVNfQ09MT1I7Ci0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfU0VUX05PUk06IHsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXN3aXRjaCAoKmlhcmcpIHsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQlpZiAoKmlhcmcgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6IHsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCWlmICgqaWFyZyAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDogewotCQkvKiBBbHdheXMgZW5hYmxlZCAqLwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOiB7Ci0JCS8vIHN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7Ci0JCS8qIFRPRE86IGNvbnZlcnQgdmFsdWVzIGZvciBpbmR5Y2FtX3NldF9jb250cm9scygpICovCi0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfSU5EWUNBTV9HRVRfQ09OVFJPTDogewotCQlyZXR1cm4gaW5keWNhbV9nZXRfY29udHJvbChjbGllbnQsIGFyZyk7Ci0JfQotCWNhc2UgREVDT0RFUl9JTkRZQ0FNX1NFVF9DT05UUk9MOiB7Ci0JCXJldHVybiBpbmR5Y2FtX3NldF9jb250cm9sKGNsaWVudCwgYXJnKTsKLQl9Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2luZHljYW0gPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgCT0gImluZHljYW0iLAotCX0sCi0JLmlkCQk9IEkyQ19EUklWRVJJRF9JTkRZQ0FNLAotCS5hdHRhY2hfYWRhcHRlciA9IGluZHljYW1fcHJvYmUsCi0JLmRldGFjaF9jbGllbnQJPSBpbmR5Y2FtX2RldGFjaCwKLQkuY29tbWFuZAk9IGluZHljYW1fY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBpbmR5Y2FtX2lkW10gPSB7CisJeyAiaW5keWNhbSIsIDAgfSwKKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgaW5keWNhbV9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0IGluZHljYW1faW5pdCh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9pbmR5Y2FtKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGluZHljYW1fZXhpdCh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX2luZHljYW0pOwotfQotCi1tb2R1bGVfaW5pdChpbmR5Y2FtX2luaXQpOwotbW9kdWxlX2V4aXQoaW5keWNhbV9leGl0KTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJpbmR5Y2FtIiwKKwkucHJvYmUgPSBpbmR5Y2FtX3Byb2JlLAorCS5yZW1vdmUgPSBpbmR5Y2FtX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBpbmR5Y2FtX2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaW5keWNhbS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9pbmR5Y2FtLmgKaW5kZXggZTZlZTgyMC4uODgxZjIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pbmR5Y2FtLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pbmR5Y2FtLmgKQEAgLTg3LDIyICs4Nyw3IEBACiAKIC8qIERyaXZlciBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgKi8KIAotI2RlZmluZSBJTkRZQ0FNX0NPTlRST0xfQUdDCQkJMAkvKiBib29sZWFuICovCi0jZGVmaW5lIElORFlDQU1fQ09OVFJPTF9BV0IJCQkxCS8qIGJvb2xlYW4gKi8KLSNkZWZpbmUgSU5EWUNBTV9DT05UUk9MX1NIVVRURVIJCQkyCi0jZGVmaW5lIElORFlDQU1fQ09OVFJPTF9HQUlOCQkJMwotI2RlZmluZSBJTkRZQ0FNX0NPTlRST0xfUkVEX0JBTEFOQ0UJCTQKLSNkZWZpbmUgSU5EWUNBTV9DT05UUk9MX0JMVUVfQkFMQU5DRQkJNQotI2RlZmluZSBJTkRZQ0FNX0NPTlRST0xfUkVEX1NBVFVSQVRJT04JCTYKLSNkZWZpbmUgSU5EWUNBTV9DT05UUk9MX0JMVUVfU0FUVVJBVElPTgkJNwotI2RlZmluZSBJTkRZQ0FNX0NPTlRST0xfR0FNTUEJCQk4Ci0KLXN0cnVjdCBpbmR5Y2FtX2NvbnRyb2wgewotCXU4IHR5cGU7Ci0JczMyIHZhbHVlOwotfTsKLQotI2RlZmluZQlERUNPREVSX0lORFlDQU1fR0VUX0NPTlRST0wJX0lPUignZCcsIDE5Mywgc3RydWN0IGluZHljYW1fY29udHJvbCkKLSNkZWZpbmUJREVDT0RFUl9JTkRZQ0FNX1NFVF9DT05UUk9MCV9JT1coJ2QnLCAxOTQsIHN0cnVjdCBpbmR5Y2FtX2NvbnRyb2wpCisjZGVmaW5lIElORFlDQU1fQ09OVFJPTF9SRURfU0FUVVJBVElPTgkJKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDApCisjZGVmaW5lIElORFlDQU1fQ09OVFJPTF9CTFVFX1NBVFVSQVRJT04JCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAxKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKaW5kZXggZDQ2NThjNS4uMDkyYzdkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKQEAgLTE2LDYgKzE2LDggQEAKICAqICAgICAgSGVucnkgV29uZyA8aGVucnlAc3R1ZmZlZGNvdy5uZXQ+CiAgKiAgICAgIE1hcmsgU2NodWx0eiA8bjl4bWpAeWFob28uY29tPgogICogICAgICBCcmlhbiBSb2dlcnMgPGJyaWFuX3JvZ2Vyc0Bjb21jYXN0Lm5ldD4KKyAqIG1vZGlmaWVkIGZvciBBVmVyTWVkaWEgQ2FyZGJ1cyBieQorICogICAgICBPbGRyaWNoIEplZGxpY2thIDxvbGRpdW0ucHJvQHNlem5hbS5jej4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjE2LDYgKzIxOCw0NiBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IGdldF9rZXlfYXZlcm1lZGlhX2NhcmRidXMoc3RydWN0IElSX2kyYyAqaXIsCisJCQkJICAgICB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCit7CisJdW5zaWduZWQgY2hhciBzdWJhZGRyLCBrZXksIGtleWdyb3VwOworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0geyB7IC5hZGRyID0gaXItPmMuYWRkciwgLmZsYWdzID0gMCwKKwkJCQkgICAuYnVmID0gJnN1YmFkZHIsIC5sZW4gPSAxfSwKKwkJCQkgeyAuYWRkciA9IGlyLT5jLmFkZHIsIC5mbGFncyA9IEkyQ19NX1JELAorCQkJCSAgLmJ1ZiA9ICZrZXksIC5sZW4gPSAxfSB9OworCXN1YmFkZHIgPSAweDBkOworCWlmICgyICE9IGkyY190cmFuc2Zlcihpci0+Yy5hZGFwdGVyLCBtc2csIDIpKSB7CisJCWRwcmludGsoMSwgInJlYWQgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoa2V5ID09IDB4ZmYpCisJCXJldHVybiAwOworCisJc3ViYWRkciA9IDB4MGI7CisJbXNnWzFdLmJ1ZiA9ICZrZXlncm91cDsKKwlpZiAoMiAhPSBpMmNfdHJhbnNmZXIoaXItPmMuYWRhcHRlciwgbXNnLCAyKSkgeworCQlkcHJpbnRrKDEsICJyZWFkIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGtleWdyb3VwID09IDB4ZmYpCisJCXJldHVybiAwOworCisJZHByaW50aygxLCAicmVhZCBrZXkgMHglMDJ4LzB4JTAyeFxuIiwga2V5LCBrZXlncm91cCk7CisJaWYgKGtleWdyb3VwIDwgMiB8fCBrZXlncm91cCA+IDMpIHsKKwkJLyogT25seSBhIHdhcm5pbmcgKi8KKwkJZHByaW50aygxLCAid2FybmluZzogaW52YWxpZCBrZXkgZ3JvdXAgMHglMDJ4IGZvciBrZXkgMHglMDJ4XG4iLAorCQkJCQkJCQlrZXlncm91cCwga2V5KTsKKwl9CisJa2V5IHw9IChrZXlncm91cCAmIDEpIDw8IDY7CisKKwkqaXJfa2V5ID0ga2V5OworCSppcl9yYXcgPSBrZXk7CisJcmV0dXJuIDE7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyB2b2lkIGlyX2tleV9wb2xsKHN0cnVjdCBJUl9pMmMgKmlyKQpAQCAtMjM3LDE1ICsyNzksOSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaXJfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBJUl9pMmMgKmlyID0gKHN0cnVjdCBJUl9pMmMqKWRhdGE7Ci0Jc2NoZWR1bGVfd29yaygmaXItPndvcmspOwotfQotCiBzdGF0aWMgdm9pZCBpcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgSVJfaTJjICppciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgSVJfaTJjLCB3b3JrKTsKKwlzdHJ1Y3QgSVJfaTJjICppciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgSVJfaTJjLCB3b3JrLndvcmspOwogCWludCBwb2xsaW5nX2ludGVydmFsID0gMTAwOwogCiAJLyogTVNJIFRWQG55d2hlcmUgUGx1cyByZXF1aXJlcyBtb3JlIGZyZXF1ZW50IHBvbGxpbmcKQEAgLTI1NCw3ICsyOTAsNyBAQAogCQlwb2xsaW5nX2ludGVydmFsID0gNTA7CiAKIAlpcl9rZXlfcG9sbChpcik7Ci0JbW9kX3RpbWVyKCZpci0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHBvbGxpbmdfaW50ZXJ2YWwpKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlyLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKHBvbGxpbmdfaW50ZXJ2YWwpKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTM2MCw2ICszOTYsMTIgQEAKIAkJCWlyX3R5cGUgICAgID0gSVJfVFlQRV9PVEhFUjsKIAkJfQogCQlicmVhazsKKwljYXNlIDB4NDA6CisJCW5hbWUgICAgICAgID0gIkFWZXJNZWRpYSBDYXJkYnVzIHJlbW90ZSI7CisJCWlyLT5nZXRfa2V5ID0gZ2V0X2tleV9hdmVybWVkaWFfY2FyZGJ1czsKKwkJaXJfdHlwZSAgICAgPSBJUl9UWVBFX09USEVSOworCQlpcl9jb2RlcyAgICA9IGlyX2NvZGVzX2F2ZXJtZWRpYV9jYXJkYnVzOworCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBzaG91bGRuJ3QgaGFwcGVuICovCiAJCXByaW50ayhERVZOQU1FICI6IEh1aD8gdW5rbm93biBpMmMgYWRkcmVzcyAoMHglMDJ4KT9cbiIsIGFkZHIpOwpAQCAtNDA0LDExICs0NDYsOCBAQAogCSAgICAgICBpci0+aW5wdXQtPm5hbWUsIGlyLT5pbnB1dC0+cGh5cywgYWRhcC0+bmFtZSk7CiAKIAkvKiBzdGFydCBwb2xsaW5nIHZpYSBldmVudGQgKi8KLQlJTklUX1dPUksoJmlyLT53b3JrLCBpcl93b3JrKTsKLQlpbml0X3RpbWVyKCZpci0+dGltZXIpOwotCWlyLT50aW1lci5mdW5jdGlvbiA9IGlyX3RpbWVyOwotCWlyLT50aW1lci5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKWlyOwotCXNjaGVkdWxlX3dvcmsoJmlyLT53b3JrKTsKKwlJTklUX0RFTEFZRURfV09SSygmaXItPndvcmssIGlyX3dvcmspOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaXItPndvcmssIDApOwogCiAJcmV0dXJuIDA7CiAKQEAgLTQyNSw4ICs0NjQsNyBAQAogCXN0cnVjdCBJUl9pMmMgKmlyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAkvKiBraWxsIG91dHN0YW5kaW5nIHBvbGxzICovCi0JZGVsX3RpbWVyX3N5bmMoJmlyLT50aW1lcik7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmlyLT53b3JrKTsKIAogCS8qIHVucmVnaXN0ZXIgZGV2aWNlcyAqLwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGlyLT5pbnB1dCk7CkBAIC01MjQsNiArNTYyLDIyIEBACiAJCQlpcl9hdHRhY2goYWRhcCwgbXNnLmFkZHIsIDAsIDApOwogCX0KIAorCS8qIFNwZWNpYWwgY2FzZSBmb3IgQVZlck1lZGlhIENhcmRidXMgcmVtb3RlICovCisJaWYgKGFkYXAtPmlkID09IEkyQ19IV19TQUE3MTM0KSB7CisJCXVuc2lnbmVkIGNoYXIgc3ViYWRkciwgZGF0YTsKKwkJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7IHsgLmFkZHIgPSAweDQwLCAuZmxhZ3MgPSAwLAorCQkJCQkgICAuYnVmID0gJnN1YmFkZHIsIC5sZW4gPSAxfSwKKwkJCQkJIHsgLmFkZHIgPSAweDQwLCAuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCQkJICAgLmJ1ZiA9ICZkYXRhLCAubGVuID0gMX0gfTsKKwkJc3ViYWRkciA9IDB4MGQ7CisJCXJjID0gaTJjX3RyYW5zZmVyKGFkYXAsIG1zZywgMik7CisJCWRwcmludGsoMSwgInByb2JlIDB4JTAyeC8weCUwMnggQCAlczogJXNcbiIsCisJCQltc2dbMF0uYWRkciwgc3ViYWRkciwgYWRhcC0+bmFtZSwKKwkJCSgyID09IHJjKSA/ICJ5ZXMiIDogIm5vIik7CisJCWlmICgyID09IHJjKQorCQkJaXJfYXR0YWNoKGFkYXAsIG1zZ1swXS5hZGRyLCAwLCAwKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY29udHJvbHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNvbnRyb2xzLmMKaW5kZXggNjJhYTA2Zi4uODQ5OTViYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY29udHJvbHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jb250cm9scy5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiaXZ0di1tYWlsYm94LmgiCiAjaW5jbHVkZSAiaXZ0di1jb250cm9scy5oIgogCisvKiBNdXN0IGJlIHNvcnRlZCBmcm9tIGxvdyB0byBoaWdoIGNvbnRyb2wgSUQhICovCiBzdGF0aWMgY29uc3QgdTMyIHVzZXJfY3RybHNbXSA9IHsKIAlWNEwyX0NJRF9VU0VSX0NMQVNTLAogCVY0TDJfQ0lEX0JSSUdIVE5FU1MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCmluZGV4IGM0NmM5OTAuLmVjYThiZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCkBAIC0zNTcsNyArMzU3LDcgQEAKIHN0YXRpYyB2b2lkIGl2dHZfcHJvY2Vzc19lZXByb20oc3RydWN0IGl2dHYgKml0dikKIHsKIAlzdHJ1Y3QgdHZlZXByb20gdHY7Ci0JaW50IHBjaV9zbG90ID0gUENJX1NMT1QoaXR2LT5kZXYtPmRldmZuKTsKKwlpbnQgcGNpX3Nsb3QgPSBQQ0lfU0xPVChpdHYtPnBkZXYtPmRldmZuKTsKIAogCWl2dHZfcmVhZF9lZXByb20oaXR2LCAmdHYpOwogCkBAIC02MDQsNyArNjA0LDcgQEAKIAlpdHYtPnN0ZCA9IGl2dHZfcGFyc2Vfc3RkKGl0dik7CiAJaWYgKGl0di0+c3RkID09IDAgJiYgdHVuZXJ0eXBlID49IDApCiAJCWl0di0+c3RkID0gdHVuZXJ0eXBlID8gVjRMMl9TVERfTU4gOiAoVjRMMl9TVERfQUxMICYgflY0TDJfU1REX01OKTsKLQlpdHYtPmhhc19jeDIzNDE1ID0gKGl0di0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JVlRWMTUpOworCWl0di0+aGFzX2N4MjM0MTUgPSAoaXR2LT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JVlRWMTUpOwogCWNoaXBuYW1lID0gaXR2LT5oYXNfY3gyMzQxNSA/ICJjeDIzNDE1IiA6ICJjeDIzNDE2IjsKIAlpZiAoaXR2LT5vcHRpb25zLmNhcmR0eXBlID09IC0xKSB7CiAJCUlWVFZfSU5GTygiSWdub3JlIGNhcmQgKGRldGVjdGVkICVzIGJhc2VkIGNoaXApXG4iLCBjaGlwbmFtZSk7CkBAIC02MTcsOSArNjE3LDkgQEAKIAkJSVZUVl9FUlIoIlVua25vd24gdXNlciBzcGVjaWZpZWQgdHlwZSwgdHJ5aW5nIHRvIGF1dG9kZXRlY3QgY2FyZFxuIik7CiAJfQogCWlmIChpdHYtPmNhcmQgPT0gTlVMTCkgewotCQlpZiAoaXR2LT5kZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gSVZUVl9QQ0lfSURfSEFVUFBBVUdFIHx8Ci0JCSAgICBpdHYtPmRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBJVlRWX1BDSV9JRF9IQVVQUEFVR0VfQUxUMSB8fAotCQkgICAgaXR2LT5kZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gSVZUVl9QQ0lfSURfSEFVUFBBVUdFX0FMVDIpIHsKKwkJaWYgKGl0di0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBJVlRWX1BDSV9JRF9IQVVQUEFVR0UgfHwKKwkJICAgIGl0di0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBJVlRWX1BDSV9JRF9IQVVQUEFVR0VfQUxUMSB8fAorCQkgICAgaXR2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IElWVFZfUENJX0lEX0hBVVBQQVVHRV9BTFQyKSB7CiAJCQlpdHYtPmNhcmQgPSBpdnR2X2dldF9jYXJkKGl0di0+aGFzX2N4MjM0MTUgPyBJVlRWX0NBUkRfUFZSXzM1MCA6IElWVFZfQ0FSRF9QVlJfMTUwKTsKIAkJCUlWVFZfSU5GTygiQXV0b2RldGVjdGVkIEhhdXBwYXVnZSBjYXJkICglcyBiYXNlZClcbiIsCiAJCQkJCWNoaXBuYW1lKTsKQEAgLTYzMCwxMyArNjMwLDEzIEBACiAJCQlpZiAoaXR2LT5jYXJkLT5wY2lfbGlzdCA9PSBOVUxMKQogCQkJCWNvbnRpbnVlOwogCQkJZm9yIChqID0gMDsgaXR2LT5jYXJkLT5wY2lfbGlzdFtqXS5kZXZpY2U7IGorKykgewotCQkJCWlmIChpdHYtPmRldi0+ZGV2aWNlICE9CisJCQkJaWYgKGl0di0+cGRldi0+ZGV2aWNlICE9CiAJCQkJICAgIGl0di0+Y2FyZC0+cGNpX2xpc3Rbal0uZGV2aWNlKQogCQkJCQljb250aW51ZTsKLQkJCQlpZiAoaXR2LT5kZXYtPnN1YnN5c3RlbV92ZW5kb3IgIT0KKwkJCQlpZiAoaXR2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yICE9CiAJCQkJICAgIGl0di0+Y2FyZC0+cGNpX2xpc3Rbal0uc3Vic3lzdGVtX3ZlbmRvcikKIAkJCQkJY29udGludWU7Ci0JCQkJaWYgKGl0di0+ZGV2LT5zdWJzeXN0ZW1fZGV2aWNlICE9CisJCQkJaWYgKGl0di0+cGRldi0+c3Vic3lzdGVtX2RldmljZSAhPQogCQkJCSAgICBpdHYtPmNhcmQtPnBjaV9saXN0W2pdLnN1YnN5c3RlbV9kZXZpY2UpCiAJCQkJCWNvbnRpbnVlOwogCQkJCUlWVFZfSU5GTygiQXV0b2RldGVjdGVkICVzIGNhcmQgKCVzIGJhc2VkKVxuIiwKQEAgLTY1MCw5ICs2NTAsOSBAQAogCWlmIChpdHYtPmNhcmQgPT0gTlVMTCkgewogCQlpdHYtPmNhcmQgPSBpdnR2X2dldF9jYXJkKElWVFZfQ0FSRF9QVlJfMTUwKTsKIAkJSVZUVl9FUlIoIlVua25vd24gY2FyZDogdmVuZG9yL2RldmljZTogWyUwNHg6JTA0eF1cbiIsCi0JCSAgICAgaXR2LT5kZXYtPnZlbmRvciwgaXR2LT5kZXYtPmRldmljZSk7CisJCSAgICAgaXR2LT5wZGV2LT52ZW5kb3IsIGl0di0+cGRldi0+ZGV2aWNlKTsKIAkJSVZUVl9FUlIoIiAgICAgICAgICAgICAgc3Vic3lzdGVtIHZlbmRvci9kZXZpY2U6IFslMDR4OiUwNHhdXG4iLAotCQkgICAgIGl0di0+ZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLCBpdHYtPmRldi0+c3Vic3lzdGVtX2RldmljZSk7CisJCSAgICAgaXR2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLCBpdHYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UpOwogCQlJVlRWX0VSUigiICAgICAgICAgICAgICAlcyBiYXNlZFxuIiwgY2hpcG5hbWUpOwogCQlJVlRWX0VSUigiRGVmYXVsdGluZyB0byAlcyBjYXJkXG4iLCBpdHYtPmNhcmQtPm5hbWUpOwogCQlJVlRWX0VSUigiUGxlYXNlIG1haWwgdGhlIHZlbmRvci9kZXZpY2UgYW5kIHN1YnN5c3RlbSB2ZW5kb3IvZGV2aWNlIElEcyBhbmQgd2hhdCBraW5kIG9mXG4iKTsKQEAgLTY3MSw3ICs2NzEsNyBAQAogICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpdnR2X2luaXRfc3RydWN0MShzdHJ1Y3QgaXZ0diAqaXR2KQogewotCWl0di0+YmFzZV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGl0di0+ZGV2LCAwKTsKKwlpdHYtPmJhc2VfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChpdHYtPnBkZXYsIDApOwogCWl0di0+ZW5jX21ib3gubWF4X21ib3ggPSAyOyAvKiB0aGUgZW5jb2RlciBoYXMgMyBtYWlsYm94ZXMgKDAtMikgKi8KIAlpdHYtPmRlY19tYm94Lm1heF9tYm94ID0gMTsgLyogdGhlIGRlY29kZXIgaGFzIDIgbWFpbGJveGVzICgwLTEpICovCiAKQEAgLTY4Miw3ICs2ODIsNyBAQAogCXNwaW5fbG9ja19pbml0KCZpdHYtPmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZpdHYtPmRtYV9yZWdfbG9jayk7CiAKLQlpdHYtPmlycV93b3JrX3F1ZXVlcyA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGl0di0+ZGV2aWNlLm5hbWUpOworCWl0di0+aXJxX3dvcmtfcXVldWVzID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoaXR2LT52NGwyX2Rldi5uYW1lKTsKIAlpZiAoaXR2LT5pcnFfd29ya19xdWV1ZXMgPT0gTlVMTCkgewogCQlJVlRWX0VSUigiQ291bGQgbm90IGNyZWF0ZSBpdnR2IHdvcmtxdWV1ZVxuIik7CiAJCXJldHVybiAtMTsKQEAgLTc2Niw3ICs3NjYsNyBAQAogCWl0di0+YXVkaW9faW5wdXQgPSBpdHYtPmNhcmQtPnZpZGVvX2lucHV0c1tpXS5hdWRpb19pbmRleDsKIH0KIAotc3RhdGljIGludCBpdnR2X3NldHVwX3BjaShzdHJ1Y3QgaXZ0diAqaXR2LCBzdHJ1Y3QgcGNpX2RldiAqZGV2LAorc3RhdGljIGludCBpdnR2X3NldHVwX3BjaShzdHJ1Y3QgaXZ0diAqaXR2LCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKIAl1MTYgY21kOwpAQCAtNzc1LDExICs3NzUsMTEgQEAKIAogCUlWVFZfREVCVUdfSU5GTygiRW5hYmxpbmcgcGNpIGRldmljZVxuIik7CiAKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2KSkgeworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewogCQlJVlRWX0VSUigiQ2FuJ3QgZW5hYmxlIGRldmljZSFcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JaWYgKHBjaV9zZXRfZG1hX21hc2soZGV2LCAweGZmZmZmZmZmKSkgeworCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIDB4ZmZmZmZmZmYpKSB7CiAJCUlWVFZfRVJSKCJObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTgwNSwxMSArODA1LDExIEBACiAJfQogCiAJLyogQ2hlY2sgZm9yIGJ1cyBtYXN0ZXJpbmcgKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7CiAJaWYgKCEoY21kICYgUENJX0NPTU1BTkRfTUFTVEVSKSkgewogCQlJVlRWX0RFQlVHX0lORk8oIkF0dGVtcHRpbmcgdG8gZW5hYmxlIEJ1cyBNYXN0ZXJpbmdcbiIpOwotCQlwY2lfc2V0X21hc3RlcihkZXYpOwotCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKKwkJcGNpX3NldF9tYXN0ZXIocGRldik7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKIAkJaWYgKCEoY21kICYgUENJX0NPTU1BTkRfTUFTVEVSKSkgewogCQkJSVZUVl9FUlIoIkJ1cyBNYXN0ZXJpbmcgaXMgbm90IGVuYWJsZWRcbiIpOwogCQkJcmV0dXJuIC1FTlhJTzsKQEAgLTgxNywyNiArODE3LDI2IEBACiAJfQogCUlWVFZfREVCVUdfSU5GTygiQnVzIE1hc3RlcmluZyBFbmFibGVkLlxuIik7CiAKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmNhcmRfcmV2KTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmcGNpX2xhdGVuY3kpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmNhcmRfcmV2KTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgJnBjaV9sYXRlbmN5KTsKIAogCWlmIChwY2lfbGF0ZW5jeSA8IDY0ICYmIGl2dHZfcGNpX2xhdGVuY3kpIHsKIAkJSVZUVl9JTkZPKCJVbnJlYXNvbmFibHkgbG93IGxhdGVuY3kgdGltZXIsICIKIAkJCSAgICAgICAic2V0dGluZyB0byA2NCAod2FzICVkKVxuIiwgcGNpX2xhdGVuY3kpOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgNjQpOwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmcGNpX2xhdGVuY3kpOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIDY0KTsKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0xBVEVOQ1lfVElNRVIsICZwY2lfbGF0ZW5jeSk7CiAJfQogCS8qIFRoaXMgY29uZmlnIHNwYWNlIHZhbHVlIHJlbGF0ZXMgdG8gRE1BIGxhdGVuY2llcy4gVGhlCiAJICAgZGVmYXVsdCB2YWx1ZSAweDgwODAgaXMgdG9vIGxvdyBob3dldmVyIGFuZCB3aWxsIGxlYWQKIAkgICB0byBETUEgZXJyb3JzLiAweGZmZmYgaXMgdGhlIG1heCB2YWx1ZSB3aGljaCBzb2x2ZXMKIAkgICB0aGVzZSBwcm9ibGVtcy4gKi8KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0MCwgMHhmZmZmKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4NDAsIDB4ZmZmZik7CiAKIAlJVlRWX0RFQlVHX0lORk8oIiVkIChyZXYgJWQpIGF0ICUwMng6JTAyeC4leCwgIgogCQkgICAiaXJxOiAlZCwgbGF0ZW5jeTogJWQsIG1lbW9yeTogMHglbHhcbiIsCi0JCSAgIGl0di0+ZGV2LT5kZXZpY2UsIGNhcmRfcmV2LCBkZXYtPmJ1cy0+bnVtYmVyLAotCQkgICBQQ0lfU0xPVChkZXYtPmRldmZuKSwgUENJX0ZVTkMoZGV2LT5kZXZmbiksCi0JCSAgIGl0di0+ZGV2LT5pcnEsIHBjaV9sYXRlbmN5LCAodW5zaWduZWQgbG9uZylpdHYtPmJhc2VfYWRkcik7CisJCSAgIHBkZXYtPmRldmljZSwgY2FyZF9yZXYsIHBkZXYtPmJ1cy0+bnVtYmVyLAorCQkgICBQQ0lfU0xPVChwZGV2LT5kZXZmbiksIFBDSV9GVU5DKHBkZXYtPmRldmZuKSwKKwkJICAgcGRldi0+aXJxLCBwY2lfbGF0ZW5jeSwgKHVuc2lnbmVkIGxvbmcpaXR2LT5iYXNlX2FkZHIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05MzUsNyArOTM1LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGl2dHZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IGl2dHZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKIAlpbnQgcmV0dmFsID0gMDsKQEAgLTk0NSwxNyArOTQ1LDE3IEBACiAJaXR2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl2dHYpLCBHRlBfQVRPTUlDKTsKIAlpZiAoaXR2ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWl0di0+ZGV2ID0gZGV2OworCWl0di0+cGRldiA9IHBkZXY7CiAJaXR2LT5pbnN0YW5jZSA9IGF0b21pY19pbmNfcmV0dXJuKCZpdnR2X2luc3RhbmNlKSAtIDE7CiAKLQlyZXR2YWwgPSB2NGwyX2RldmljZV9yZWdpc3RlcigmZGV2LT5kZXYsICZpdHYtPmRldmljZSk7CisJcmV0dmFsID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJml0di0+djRsMl9kZXYpOwogCWlmIChyZXR2YWwpIHsKIAkJa2ZyZWUoaXR2KTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAJLyogIml2dHYgKyBQQ0kgSUQiIGlzIGEgYml0IG9mIGEgbW91dGhmdWwsIHNvIHVzZQogCSAgICJpdnR2ICsgaW5zdGFuY2UiIGluc3RlYWQuICovCi0Jc25wcmludGYoaXR2LT5kZXZpY2UubmFtZSwgc2l6ZW9mKGl0di0+ZGV2aWNlLm5hbWUpLAorCXNucHJpbnRmKGl0di0+djRsMl9kZXYubmFtZSwgc2l6ZW9mKGl0di0+djRsMl9kZXYubmFtZSksCiAJCQkiaXZ0diVkIiwgaXR2LT5pbnN0YW5jZSk7CiAJSVZUVl9JTkZPKCJJbml0aWFsaXppbmcgY2FyZCAlZFxuIiwgaXR2LT5pbnN0YW5jZSk7CiAKQEAgLTk3MiwxMiArOTcyLDExIEBACiAJSVZUVl9ERUJVR19JTkZPKCJiYXNlIGFkZHI6IDB4JTA4eFxuIiwgaXR2LT5iYXNlX2FkZHIpOwogCiAJLyogUENJIERldmljZSBTZXR1cCAqLwotCWlmICgocmV0dmFsID0gaXZ0dl9zZXR1cF9wY2koaXR2LCBkZXYsIHBjaV9pZCkpICE9IDApIHsKLQkJaWYgKHJldHZhbCA9PSAtRUlPKQotCQkJZ290byBmcmVlX3dvcmtxdWV1ZTsKLQkJZWxzZSBpZiAocmV0dmFsID09IC1FTlhJTykKLQkJCWdvdG8gZnJlZV9tZW07Ci0JfQorCXJldHZhbCA9IGl2dHZfc2V0dXBfcGNpKGl0diwgcGRldiwgcGNpX2lkKTsKKwlpZiAocmV0dmFsID09IC1FSU8pCisJCWdvdG8gZnJlZV93b3JrcXVldWU7CisJaWYgKHJldHZhbCA9PSAtRU5YSU8pCisJCWdvdG8gZnJlZV9tZW07CiAKIAkvKiBtYXAgaW8gbWVtb3J5ICovCiAJSVZUVl9ERUJVR19JTkZPKCJhdHRlbXB0aW5nIGlvcmVtYXAgYXQgMHglMDh4IGxlbiAweCUwOHhcbiIsCkBAIC0xMTU0LDggKzExNTMsOCBAQAogCWl2dHZfc2V0X2lycV9tYXNrKGl0diwgMHhmZmZmZmZmZik7CiAKIAkvKiBSZWdpc3RlciBJUlEgKi8KLQlyZXR2YWwgPSByZXF1ZXN0X2lycShpdHYtPmRldi0+aXJxLCBpdnR2X2lycV9oYW5kbGVyLAotCSAgICAgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCBpdHYtPmRldmljZS5uYW1lLCAodm9pZCAqKWl0dik7CisJcmV0dmFsID0gcmVxdWVzdF9pcnEoaXR2LT5wZGV2LT5pcnEsIGl2dHZfaXJxX2hhbmRsZXIsCisJICAgICBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsIGl0di0+djRsMl9kZXYubmFtZSwgKHZvaWQgKilpdHYpOwogCWlmIChyZXR2YWwpIHsKIAkJSVZUVl9FUlIoIkZhaWxlZCB0byByZWdpc3RlciBpcnEgJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gZnJlZV9pMmM7CkBAIC0xMTc3LDcgKzExNzYsNyBAQAogZnJlZV9zdHJlYW1zOgogCWl2dHZfc3RyZWFtc19jbGVhbnVwKGl0diwgMSk7CiBmcmVlX2lycToKLQlmcmVlX2lycShpdHYtPmRldi0+aXJxLCAodm9pZCAqKWl0dik7CisJZnJlZV9pcnEoaXR2LT5wZGV2LT5pcnEsICh2b2lkICopaXR2KTsKIGZyZWVfaTJjOgogCWV4aXRfaXZ0dl9pMmMoaXR2KTsKIGZyZWVfaW86CkBAIC0xMTk0LDcgKzExOTMsNyBAQAogCQlyZXR2YWwgPSAtRU5PREVWOwogCUlWVFZfRVJSKCJFcnJvciAlZCBvbiBpbml0aWFsaXphdGlvblxuIiwgcmV0dmFsKTsKIAotCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJml0di0+ZGV2aWNlKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZpdHYtPnY0bDJfZGV2KTsKIAlrZnJlZShpdHYpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC0xMjkyLDEwICsxMjkxLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGl2dHZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQorc3RhdGljIHZvaWQgaXZ0dl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IHY0bDJfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJnBjaV9kZXYtPmRldik7Ci0Jc3RydWN0IGl2dHYgKml0diA9IHRvX2l2dHYoZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBpdnR2ICppdHYgPSB0b19pdnR2KHY0bDJfZGV2KTsKIAlpbnQgaTsKIAogCUlWVFZfREVCVUdfSU5GTygiUmVtb3ZpbmcgY2FyZFxuIik7CkBAIC0xMzM2LDExICsxMzM1LDkgQEAKIAlpdnR2X3N0cmVhbXNfY2xlYW51cChpdHYsIDEpOwogCWl2dHZfdWRtYV9mcmVlKGl0dik7CiAKLQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZpdHYtPmRldmljZSk7Ci0KIAlleGl0X2l2dHZfaTJjKGl0dik7CiAKLQlmcmVlX2lycShpdHYtPmRldi0+aXJxLCAodm9pZCAqKWl0dik7CisJZnJlZV9pcnEoaXR2LT5wZGV2LT5pcnEsICh2b2lkICopaXR2KTsKIAlpdnR2X2lvdW5tYXAoaXR2KTsKIAogCXJlbGVhc2VfbWVtX3JlZ2lvbihpdHYtPmJhc2VfYWRkciwgSVZUVl9FTkNPREVSX1NJWkUpOwpAQCAtMTM0OCwxMSArMTM0NSwxMyBAQAogCWlmIChpdHYtPmhhc19jeDIzNDE1KQogCQlyZWxlYXNlX21lbV9yZWdpb24oaXR2LT5iYXNlX2FkZHIgKyBJVlRWX0RFQ09ERVJfT0ZGU0VULCBJVlRWX0RFQ09ERVJfU0laRSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UoaXR2LT5kZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShpdHYtPnBkZXYpOwogCWZvciAoaSA9IDA7IGkgPCBJVlRWX1ZCSV9GUkFNRVM7IGkrKykKIAkJa2ZyZWUoaXR2LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJpdnR2OiBSZW1vdmVkICVzXG4iLCBpdHYtPmNhcmRfbmFtZSk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZpdHYtPnY0bDJfZGV2KTsKIAlrZnJlZShpdHYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5oCmluZGV4IGNlOGQ5YjcuLjQ0MGY3MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5oCkBAIC0xMzMsNyArMTMzLDcgQEAKICNkZWZpbmUgSVZUVl9ERUJVRyh4LCB0eXBlLCBmbXQsIGFyZ3MuLi4pIFwKIAlkbyB7IFwKIAkJaWYgKCh4KSAmIGl2dHZfZGVidWcpIFwKLQkJCXY0bDJfaW5mbygmaXR2LT5kZXZpY2UsICIgIiB0eXBlICI6ICIgZm10ICwgIyNhcmdzKTsJXAorCQkJdjRsMl9pbmZvKCZpdHYtPnY0bDJfZGV2LCAiICIgdHlwZSAiOiAiIGZtdCAsICMjYXJncyk7CVwKIAl9IHdoaWxlICgwKQogI2RlZmluZSBJVlRWX0RFQlVHX1dBUk4oZm10LCBhcmdzLi4uKSAgSVZUVl9ERUJVRyhJVlRWX0RCR0ZMR19XQVJOLCAgIndhcm4iLCAgZm10ICwgIyMgYXJncykKICNkZWZpbmUgSVZUVl9ERUJVR19JTkZPKGZtdCwgYXJncy4uLikgIElWVFZfREVCVUcoSVZUVl9EQkdGTEdfSU5GTywgICJpbmZvIiwgIGZtdCAsICMjIGFyZ3MpCkBAIC0xNDksNyArMTQ5LDcgQEAKICNkZWZpbmUgSVZUVl9ERUJVR19ISUdIX1ZPTCh4LCB0eXBlLCBmbXQsIGFyZ3MuLi4pIFwKIAlkbyB7IFwKIAkJaWYgKCgoeCkgJiBpdnR2X2RlYnVnKSAmJiAoaXZ0dl9kZWJ1ZyAmIElWVFZfREJHRkxHX0hJR0hWT0wpKSAJXAotCQkJdjRsMl9pbmZvKCZpdHYtPmRldmljZSwgIiAiIHR5cGUgIjogIiBmbXQgLCAjI2FyZ3MpOwlcCisJCQl2NGwyX2luZm8oJml0di0+djRsMl9kZXYsICIgIiB0eXBlICI6ICIgZm10ICwgIyNhcmdzKTsJXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIElWVFZfREVCVUdfSElfV0FSTihmbXQsIGFyZ3MuLi4pICBJVlRWX0RFQlVHX0hJR0hfVk9MKElWVFZfREJHRkxHX1dBUk4sICAid2FybiIsICBmbXQgLCAjIyBhcmdzKQogI2RlZmluZSBJVlRWX0RFQlVHX0hJX0lORk8oZm10LCBhcmdzLi4uKSAgSVZUVl9ERUJVR19ISUdIX1ZPTChJVlRWX0RCR0ZMR19JTkZPLCAgImluZm8iLCAgZm10ICwgIyMgYXJncykKQEAgLTE2Myw5ICsxNjMsOSBAQAogI2RlZmluZSBJVlRWX0RFQlVHX0hJX1lVVihmbXQsIGFyZ3MuLi4pICAgSVZUVl9ERUJVR19ISUdIX1ZPTChJVlRWX0RCR0ZMR19ZVVYsICAgInl1diIsICAgZm10ICwgIyMgYXJncykKIAogLyogU3RhbmRhcmQga2VybmVsIG1lc3NhZ2VzICovCi0jZGVmaW5lIElWVFZfRVJSKGZtdCwgYXJncy4uLikgICAgICB2NGwyX2VycigmaXR2LT5kZXZpY2UsIGZtdCAsICMjIGFyZ3MpCi0jZGVmaW5lIElWVFZfV0FSTihmbXQsIGFyZ3MuLi4pICAgICB2NGwyX3dhcm4oJml0di0+ZGV2aWNlLCBmbXQgLCAjIyBhcmdzKQotI2RlZmluZSBJVlRWX0lORk8oZm10LCBhcmdzLi4uKSAgICAgdjRsMl9pbmZvKCZpdHYtPmRldmljZSwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgSVZUVl9FUlIoZm10LCBhcmdzLi4uKSAgICAgIHY0bDJfZXJyKCZpdHYtPnY0bDJfZGV2LCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBJVlRWX1dBUk4oZm10LCBhcmdzLi4uKSAgICAgdjRsMl93YXJuKCZpdHYtPnY0bDJfZGV2LCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBJVlRWX0lORk8oZm10LCBhcmdzLi4uKSAgICAgdjRsMl9pbmZvKCZpdHYtPnY0bDJfZGV2LCBmbXQgLCAjIyBhcmdzKQogCiAvKiBvdXRwdXQgbW9kZXMgKGN4MjM0MTUgb25seSkgKi8KICNkZWZpbmUgT1VUX05PTkUgICAgICAgIDAKQEAgLTMxNSw3ICszMTUsNyBAQAogc3RydWN0IGl2dHZfc3RyZWFtIHsKIAkvKiBUaGVzZSBmaXJzdCBmb3VyIGZpZWxkcyBhcmUgYWx3YXlzIHNldCwgZXZlbiBpZiB0aGUgc3RyZWFtCiAJICAgaXMgbm90IGFjdHVhbGx5IGNyZWF0ZWQuICovCi0Jc3RydWN0IHZpZGVvX2RldmljZSAqdjRsMmRldjsJLyogTlVMTCB3aGVuIHN0cmVhbSBub3QgY3JlYXRlZCAqLworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7CS8qIE5VTEwgd2hlbiBzdHJlYW0gbm90IGNyZWF0ZWQgKi8KIAlzdHJ1Y3QgaXZ0diAqaXR2OyAJCS8qIGZvciBlYXNlIG9mIHVzZSAqLwogCWNvbnN0IGNoYXIgKm5hbWU7CQkvKiBuYW1lIG9mIHRoZSBzdHJlYW0gKi8KIAlpbnQgdHlwZTsJCQkvKiBzdHJlYW0gdHlwZSAqLwpAQCAtNTkyLDcgKzU5Miw3IEBACiAvKiBTdHJ1Y3QgdG8gaG9sZCBpbmZvIGFib3V0IGl2dHYgY2FyZHMgKi8KIHN0cnVjdCBpdnR2IHsKIAkvKiBHZW5lcmFsIGZpeGVkIGNhcmQgZGF0YSAqLwotCXN0cnVjdCBwY2lfZGV2ICpkZXY7CQkvKiBQQ0kgZGV2aWNlICovCisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CQkvKiBQQ0kgZGV2aWNlICovCiAJY29uc3Qgc3RydWN0IGl2dHZfY2FyZCAqY2FyZDsJLyogY2FyZCBpbmZvcm1hdGlvbiAqLwogCWNvbnN0IGNoYXIgKmNhcmRfbmFtZTsgICAgICAgICAgLyogZnVsbCBuYW1lIG9mIHRoZSBjYXJkICovCiAJY29uc3Qgc3RydWN0IGl2dHZfY2FyZF90dW5lcl9pMmMgKmNhcmRfaTJjOyAvKiBpMmMgYWRkcmVzc2VzIHRvIHByb2JlIGZvciB0dW5lciAqLwpAQCAtNjEyLDcgKzYxMiw3IEBACiAJdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpyZWdfbWVtOyAvKiBwb2ludGVyIHRvIG1hcHBlZCByZWdpc3RlcnMgKi8KIAlzdHJ1Y3QgaXZ0dl9vcHRpb25zIG9wdGlvbnM7IAkvKiB1c2VyIG9wdGlvbnMgKi8KIAotCXN0cnVjdCB2NGwyX2RldmljZSBkZXZpY2U7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OwogCXN0cnVjdCB2NGwyX3N1YmRldiBzZF9ncGlvOwkvKiBHUElPIHN1Yi1kZXZpY2UgKi8KIAl1MTYgaW5zdGFuY2U7CiAKQEAgLTY5Niw3ICs2OTYsNyBAQAogCXU2NCB2YmlfZGF0YV9pbnNlcnRlZDsgICAgICAgICAgLyogbnVtYmVyIG9mIFZCSSBieXRlcyBpbnNlcnRlZCBpbnRvIHRoZSBNUEVHIHN0cmVhbSAqLwogCXUzMiBsYXN0X2RlY190aW1pbmdbM107ICAgICAgICAgLyogY2FjaGUgbGFzdCByZXRyaWV2ZWQgcHRzL3Njci9mcmFtZSB2YWx1ZXMgKi8KIAl1bnNpZ25lZCBsb25nIGR1YWx3YXRjaF9qaWZmaWVzOy8qIGppZmZpZXMgdmFsdWUgb2YgdGhlIHByZXZpb3VzIGR1YWx3YXRjaCBjaGVjayAqLwotCXUxNiBkdWFsd2F0Y2hfc3RlcmVvX21vZGU7ICAgICAgLyogY3VycmVudCBkZXRlY3RlZCBkdWFsd2F0Y2ggc3RlcmVvIG1vZGUgKi8KKwl1MzIgZHVhbHdhdGNoX3N0ZXJlb19tb2RlOyAgICAgIC8qIGN1cnJlbnQgZGV0ZWN0ZWQgZHVhbHdhdGNoIHN0ZXJlbyBtb2RlICovCiAKIAogCS8qIFZCSSBzdGF0ZSBpbmZvICovCkBAIC03MTksOSArNzE5LDkgQEAKIAlzdHJ1Y3Qgb3NkX2luZm8gKm9zZF9pbmZvOyAgICAgIC8qIGl2dHZmYiBwcml2YXRlIE9TRCBpbmZvICovCiB9OwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpdnR2ICp0b19pdnR2KHN0cnVjdCB2NGwyX2RldmljZSAqZGV2KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaXZ0diAqdG9faXZ0dihzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQogewotCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaXZ0diwgZGV2aWNlKTsKKwlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3QgaXZ0diwgdjRsMl9kZXYpOwogfQogCiAvKiBHbG9iYWxzICovCkBAIC03ODgsNyArNzg4LDcgQEAKIC8qIENhbGwgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBmb3IgYWxsIHN1YmRldnMgbWF0Y2hpbmcgaHcgKGlmIDAsIHRoZW4KICAgIG1hdGNoIHRoZW0gYWxsKS4gSWdub3JlIGFueSBlcnJvcnMuICovCiAjZGVmaW5lIGl2dHZfY2FsbF9odyhpdHYsIGh3LCBvLCBmLCBhcmdzLi4uKSAJCQkJXAotCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzKCYoaXR2KS0+ZGV2aWNlLCAhKGh3KSB8fCAoc2QtPmdycF9pZCAmIChodykpLCBvLCBmICwgIyNhcmdzKQorCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzKCYoaXR2KS0+djRsMl9kZXYsICEoaHcpIHx8IChzZC0+Z3JwX2lkICYgKGh3KSksIG8sIGYgLCAjI2FyZ3MpCiAKICNkZWZpbmUgaXZ0dl9jYWxsX2FsbChpdHYsIG8sIGYsIGFyZ3MuLi4pIGl2dHZfY2FsbF9odyhpdHYsIDAsIG8sIGYgLCAjI2FyZ3MpCiAKQEAgLTc5Niw3ICs3OTYsNyBAQAogICAgbWF0Y2ggdGhlbSBhbGwpLiBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBhbiBlcnJvciBvdGhlciB0aGFuIDAgb3IKICAgIC1FTk9JT0NUTENNRCwgdGhlbiByZXR1cm4gd2l0aCB0aGF0IGVycm9yIGNvZGUuICovCiAjZGVmaW5lIGl2dHZfY2FsbF9od19lcnIoaXR2LCBodywgbywgZiwgYXJncy4uLikgIAkJXAotCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzX3VudGlsX2VycigmKGl0diktPmRldmljZSwgIShodykgfHwgKHNkLT5ncnBfaWQgJiAoaHcpKSwgbywgZiAsICMjYXJncykKKwlfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2c191bnRpbF9lcnIoJihpdHYpLT52NGwyX2RldiwgIShodykgfHwgKHNkLT5ncnBfaWQgJiAoaHcpKSwgbywgZiAsICMjYXJncykKIAogI2RlZmluZSBpdnR2X2NhbGxfYWxsX2VycihpdHYsIG8sIGYsIGFyZ3MuLi4pIGl2dHZfY2FsbF9od19lcnIoaXR2LCAwLCBvLCBmICwgIyNhcmdzKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMKaW5kZXggZDU5NGJjMi4uY2ZhYWNmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYwpAQCAtMTQ4LDEwICsxNDgsMTAgQEAKIHN0YXRpYyB2b2lkIGl2dHZfZHVhbHdhdGNoKHN0cnVjdCBpdnR2ICppdHYpCiB7CiAJc3RydWN0IHY0bDJfdHVuZXIgdnQ7Ci0JdTE2IG5ld19iaXRtYXA7Ci0JdTE2IG5ld19zdGVyZW9fbW9kZTsKLQljb25zdCB1MTYgc3RlcmVvX21hc2sgPSAweDAzMDA7Ci0JY29uc3QgdTE2IGR1YWwgPSAweDAyMDA7CisJdTMyIG5ld19iaXRtYXA7CisJdTMyIG5ld19zdGVyZW9fbW9kZTsKKwljb25zdCB1MzIgc3RlcmVvX21hc2sgPSAweDAzMDA7CisJY29uc3QgdTMyIGR1YWwgPSAweDAyMDA7CiAKIAluZXdfc3RlcmVvX21vZGUgPSBpdHYtPnBhcmFtcy5hdWRpb19wcm9wZXJ0aWVzICYgc3RlcmVvX21hc2s7CiAJbWVtc2V0KCZ2dCwgMCwgc2l6ZW9mKHZ0KSk7CkBAIC05OTEsNyArOTkxLDcgQEAKIAltdXRleF9sb2NrKCZpdHYtPnNlcmlhbGl6ZV9sb2NrKTsKIAlpZiAoaXZ0dl9pbml0X29uX2ZpcnN0X29wZW4oaXR2KSkgewogCQlJVlRWX0VSUigiRmFpbGVkIHRvIGluaXRpYWxpemUgb24gbWlub3IgJWRcbiIsCi0JCQkJcy0+djRsMmRldi0+bWlub3IpOworCQkJCXZkZXYtPm1pbm9yKTsKIAkJbXV0ZXhfdW5sb2NrKCZpdHYtPnNlcmlhbGl6ZV9sb2NrKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYwppbmRleCA2ZGJhNTViLi5jMWI3ZWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAlpbnQgcmV0cmllcyA9IDM7CiAKIHJldHJ5OgotCWlmIChyZXRyaWVzICYmIHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmbiwgJml0di0+ZGV2LT5kZXYpID09IDApIHsKKwlpZiAocmV0cmllcyAmJiByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZm4sICZpdHYtPnBkZXYtPmRldikgPT0gMCkgewogCQlpbnQgaTsKIAkJdm9sYXRpbGUgdTMyIF9faW9tZW0gKmRzdCA9ICh2b2xhdGlsZSB1MzIgX19pb21lbSAqKW1lbTsKIAkJY29uc3QgdTMyICpzcmMgPSAoY29uc3QgdTMyICopZnctPmRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1ncGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1ncGlvLmMKaW5kZXggZGMyODUwZS4uMzMyMTk4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZ3Bpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWdwaW8uYwpAQCAtMzg0LDcgKzM4NCw3IEBACiAJd3JpdGVfcmVnKGl0di0+Y2FyZC0+Z3Bpb19pbml0LmluaXRpYWxfdmFsdWUgfCBwaW4sIElWVFZfUkVHX0dQSU9fT1VUKTsKIAl3cml0ZV9yZWcoaXR2LT5jYXJkLT5ncGlvX2luaXQuZGlyZWN0aW9uIHwgcGluLCBJVlRWX1JFR19HUElPX0RJUik7CiAJdjRsMl9zdWJkZXZfaW5pdCgmaXR2LT5zZF9ncGlvLCAmc3ViZGV2X29wcyk7Ci0Jc25wcmludGYoaXR2LT5zZF9ncGlvLm5hbWUsIHNpemVvZihpdHYtPnNkX2dwaW8ubmFtZSksICIlcy1ncGlvIiwgaXR2LT5kZXZpY2UubmFtZSk7CisJc25wcmludGYoaXR2LT5zZF9ncGlvLm5hbWUsIHNpemVvZihpdHYtPnNkX2dwaW8ubmFtZSksICIlcy1ncGlvIiwgaXR2LT52NGwyX2Rldi5uYW1lKTsKIAlpdHYtPnNkX2dwaW8uZ3JwX2lkID0gSVZUVl9IV19HUElPOwotCXJldHVybiB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoJml0di0+ZGV2aWNlLCAmaXR2LT5zZF9ncGlvKTsKKwlyZXR1cm4gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KCZpdHYtPnY0bDJfZGV2LCAmaXR2LT5zZF9ncGlvKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKaW5kZXggY2ExZDk1NS4uZTczYTE5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKQEAgLTE5NCwxNCArMTk0LDE0IEBACiAJc3RydWN0IHY0bDJfc3ViZGV2ICpyZXN1bHQgPSBOVUxMOwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKLQlzcGluX2xvY2soJml0di0+ZGV2aWNlLmxvY2spOwotCXY0bDJfZGV2aWNlX2Zvcl9lYWNoX3N1YmRldihzZCwgJml0di0+ZGV2aWNlKSB7CisJc3Bpbl9sb2NrKCZpdHYtPnY0bDJfZGV2LmxvY2spOworCXY0bDJfZGV2aWNlX2Zvcl9lYWNoX3N1YmRldihzZCwgJml0di0+djRsMl9kZXYpIHsKIAkJaWYgKHNkLT5ncnBfaWQgPT0gaHcpIHsKIAkJCXJlc3VsdCA9IHNkOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2soJml0di0+ZGV2aWNlLmxvY2spOworCXNwaW5fdW5sb2NrKCZpdHYtPnY0bDJfZGV2LmxvY2spOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ3Miw4ICs0NzIsOCBAQAogICAgaW50ZXJ2ZW5pbmcgc3RvcCBjb25kaXRpb24gKi8KIHN0YXRpYyBpbnQgaXZ0dl94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQogewotCXN0cnVjdCB2NGwyX2RldmljZSAqZHJ2ID0gaTJjX2dldF9hZGFwZGF0YShpMmNfYWRhcCk7Ci0Jc3RydWN0IGl2dHYgKml0diA9IHRvX2l2dHYoZHJ2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gaTJjX2dldF9hZGFwZGF0YShpMmNfYWRhcCk7CisJc3RydWN0IGl2dHYgKml0diA9IHRvX2l2dHYodjRsMl9kZXYpOwogCWludCByZXR2YWw7CiAJaW50IGk7CiAKQEAgLTYwNCwxMiArNjA0LDEyIEBACiAKIAlzcHJpbnRmKGl0di0+aTJjX2FkYXAubmFtZSArIHN0cmxlbihpdHYtPmkyY19hZGFwLm5hbWUpLCAiICMlZCIsCiAJCWl0di0+aW5zdGFuY2UpOwotCWkyY19zZXRfYWRhcGRhdGEoJml0di0+aTJjX2FkYXAsICZpdHYtPmRldmljZSk7CisJaTJjX3NldF9hZGFwZGF0YSgmaXR2LT5pMmNfYWRhcCwgJml0di0+djRsMl9kZXYpOwogCiAJbWVtY3B5KCZpdHYtPmkyY19jbGllbnQsICZpdnR2X2kyY19jbGllbnRfdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOwogCWl0di0+aTJjX2NsaWVudC5hZGFwdGVyID0gJml0di0+aTJjX2FkYXA7Ci0JaXR2LT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJml0di0+ZGV2LT5kZXY7CisJaXR2LT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJml0di0+cGRldi0+ZGV2OwogCiAJSVZUVl9ERUJVR19JMkMoInNldHRpbmcgc2NsIGFuZCBzZGEgdG8gMVxuIik7CiAJaXZ0dl9zZXRzY2woaXR2LCAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCmluZGV4IGMxM2JkMmEuLjlhMDQyNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYwpAQCAtMzQ1LDEwICszNDUsOCBAQAogCXBpeGZtdC0+cHJpdiA9IDA7CiAJaWYgKGlkLT50eXBlID09IElWVFZfRU5DX1NUUkVBTV9UWVBFX1lVVikgewogCQlwaXhmbXQtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0hNMTI7Ci0JCS8qIFlVViBzaXplIGlzIChZPShoKncpICsgVVY9KGgqKHcvMikpKSAqLwotCQlwaXhmbXQtPnNpemVpbWFnZSA9Ci0JCQlwaXhmbXQtPmhlaWdodCAqIHBpeGZtdC0+d2lkdGggKwotCQkJcGl4Zm10LT5oZWlnaHQgKiAocGl4Zm10LT53aWR0aCAvIDIpOworCQkvKiBZVVYgc2l6ZSBpcyAoWT0oaCo3MjApICsgVVY9KGgqKDcyMC8yKSkpICovCisJCXBpeGZtdC0+c2l6ZWltYWdlID0gcGl4Zm10LT5oZWlnaHQgKiA3MjAgKiAzIC8gMjsKIAkJcGl4Zm10LT5ieXRlc3BlcmxpbmUgPSA3MjA7CiAJfSBlbHNlIHsKIAkJcGl4Zm10LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NUEVHOwpAQCAtNDY5LDExICs0NjcsMTcgQEAKIAlzdHJ1Y3QgaXZ0diAqaXR2ID0gaWQtPml0djsKIAlpbnQgdyA9IGZtdC0+Zm10LnBpeC53aWR0aDsKIAlpbnQgaCA9IGZtdC0+Zm10LnBpeC5oZWlnaHQ7CisJaW50IG1pbl9oID0gMjsKIAogCXcgPSBtaW4odywgNzIwKTsKIAl3ID0gbWF4KHcsIDIpOworCWlmIChpZC0+dHlwZSA9PSBJVlRWX0VOQ19TVFJFQU1fVFlQRV9ZVVYpIHsKKwkJLyogWVVWIGhlaWdodCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzIgKi8KKwkJaCAmPSB+MHgxZjsKKwkJbWluX2ggPSAzMjsKKwl9CiAJaCA9IG1pbihoLCBpdHYtPmlzXzUwaHogPyA1NzYgOiA0ODApOwotCWggPSBtYXgoaCwgMik7CisJaCA9IG1heChoLCBtaW5faCk7CiAJaXZ0dl9nX2ZtdF92aWRfY2FwKGZpbGUsIGZoLCBmbXQpOwogCWZtdC0+Zm10LnBpeC53aWR0aCA9IHc7CiAJZm10LT5mbXQucGl4LmhlaWdodCA9IGg7CkBAIC03NjYsNyArNzcwLDcgQEAKIAogCXN0cmxjcHkodmNhcC0+ZHJpdmVyLCBJVlRWX0RSSVZFUl9OQU1FLCBzaXplb2YodmNhcC0+ZHJpdmVyKSk7CiAJc3RybGNweSh2Y2FwLT5jYXJkLCBpdHYtPmNhcmRfbmFtZSwgc2l6ZW9mKHZjYXAtPmNhcmQpKTsKLQlzbnByaW50Zih2Y2FwLT5idXNfaW5mbywgc2l6ZW9mKHZjYXAtPmJ1c19pbmZvKSwgIlBDSTolcyIsIHBjaV9uYW1lKGl0di0+ZGV2KSk7CisJc25wcmludGYodmNhcC0+YnVzX2luZm8sIHNpemVvZih2Y2FwLT5idXNfaW5mbyksICJQQ0k6JXMiLCBwY2lfbmFtZShpdHYtPnBkZXYpKTsKIAl2Y2FwLT52ZXJzaW9uID0gSVZUVl9EUklWRVJfVkVSU0lPTjsgCSAgICAvKiB2ZXJzaW9uICovCiAJdmNhcC0+Y2FwYWJpbGl0aWVzID0gaXR2LT52NGwyX2NhcDsgCSAgICAvKiBjYXBhYmlsaXRpZXMgKi8KIAlyZXR1cm4gMDsKQEAgLTE1MTMsMTIgKzE1MTcsMTIgQEAKIAl9CiAJSVZUVl9JTkZPKCJUdW5lcjogICVzXG4iLAogCQl0ZXN0X2JpdChJVlRWX0ZfSV9SQURJT19VU0VSLCAmaXR2LT5pX2ZsYWdzKSA/ICJSYWRpbyIgOiAiVFYiKTsKLQljeDIzNDF4X2xvZ19zdGF0dXMoJml0di0+cGFyYW1zLCBpdHYtPmRldmljZS5uYW1lKTsKKwljeDIzNDF4X2xvZ19zdGF0dXMoJml0di0+cGFyYW1zLCBpdHYtPnY0bDJfZGV2Lm5hbWUpOwogCUlWVFZfSU5GTygiU3RhdHVzIGZsYWdzOiAgICAweCUwOGx4XG4iLCBpdHYtPmlfZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBJVlRWX01BWF9TVFJFQU1TOyBpKyspIHsKIAkJc3RydWN0IGl2dHZfc3RyZWFtICpzID0gJml0di0+c3RyZWFtc1tpXTsKIAotCQlpZiAocy0+djRsMmRldiA9PSBOVUxMIHx8IHMtPmJ1ZmZlcnMgPT0gMCkKKwkJaWYgKHMtPnZkZXYgPT0gTlVMTCB8fCBzLT5idWZmZXJzID09IDApCiAJCQljb250aW51ZTsKIAkJSVZUVl9JTkZPKCJTdHJlYW0gJXM6IHN0YXR1cyAweCUwNGx4LCAlZCUlIG9mICVkIEtpQiAoJWQgYnVmZmVycykgaW4gdXNlXG4iLCBzLT5uYW1lLCBzLT5zX2ZsYWdzLAogCQkJCShzLT5idWZmZXJzIC0gcy0+cV9mcmVlLmJ1ZmZlcnMpICogMTAwIC8gcy0+YnVmZmVycywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlycS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMKaW5kZXggZjVkMDBlYy4uMDFjMTRkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogCUlWVFZfREVCVUdfSElfRE1BKCJpdnR2X3Bpb193b3JrX2hhbmRsZXJcbiIpOwogCWlmIChpdHYtPmN1cl9waW9fc3RyZWFtIDwgMCB8fCBpdHYtPmN1cl9waW9fc3RyZWFtID49IElWVFZfTUFYX1NUUkVBTVMgfHwKLQkJCXMtPnY0bDJkZXYgPT0gTlVMTCB8fCAhaXZ0dl91c2VfcGlvKHMpKSB7CisJCQlzLT52ZGV2ID09IE5VTEwgfHwgIWl2dHZfdXNlX3BpbyhzKSkgewogCQlpdHYtPmN1cl9waW9fc3RyZWFtID0gLTE7CiAJCS8qIHRyaWdnZXIgUElPIGNvbXBsZXRlIHVzZXIgaW50ZXJydXB0ICovCiAJCXdyaXRlX3JlZyhJVlRWX0lSUV9FTkNfUElPX0NPTVBMRVRFLCAweDQ0KTsKQEAgLTEwOSw3ICsxMDksNyBAQAogCWludCByYzsKIAogCS8qIHNhbml0eSBjaGVja3MgKi8KLQlpZiAocy0+djRsMmRldiA9PSBOVUxMKSB7CisJaWYgKHMtPnZkZXYgPT0gTlVMTCkgewogCQlJVlRWX0RFQlVHX1dBUk4oIlN0cmVhbSAlcyBub3Qgc3RhcnRlZFxuIiwgcy0+bmFtZSk7CiAJCXJldHVybiAtMTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1xdWV1ZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtcXVldWUuYwppbmRleCA3MWJkMTNlLi5mZjdiN2RlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1xdWV1ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXF1ZXVlLmMKQEAgLTIzMCw3ICsyMzAsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJaWYgKGl2dHZfbWlnaHRfdXNlX2RtYShzKSkgewotCQlzLT5zZ19oYW5kbGUgPSBwY2lfbWFwX3NpbmdsZShpdHYtPmRldiwgcy0+c2dfZG1hLCBzaXplb2Yoc3RydWN0IGl2dHZfc2dfZWxlbWVudCksIHMtPmRtYSk7CisJCXMtPnNnX2hhbmRsZSA9IHBjaV9tYXBfc2luZ2xlKGl0di0+cGRldiwgcy0+c2dfZG1hLCBzaXplb2Yoc3RydWN0IGl2dHZfc2dfZWxlbWVudCksIHMtPmRtYSk7CiAJCWl2dHZfc3RyZWFtX3N5bmNfZm9yX2NwdShzKTsKIAl9CiAKQEAgLTI0OCw3ICsyNDgsNyBAQAogCQl9CiAJCUlOSVRfTElTVF9IRUFEKCZidWYtPmxpc3QpOwogCQlpZiAoaXZ0dl9taWdodF91c2VfZG1hKHMpKSB7Ci0JCQlidWYtPmRtYV9oYW5kbGUgPSBwY2lfbWFwX3NpbmdsZShzLT5pdHYtPmRldiwKKwkJCWJ1Zi0+ZG1hX2hhbmRsZSA9IHBjaV9tYXBfc2luZ2xlKHMtPml0di0+cGRldiwKIAkJCQlidWYtPmJ1Ziwgcy0+YnVmX3NpemUgKyAyNTYsIHMtPmRtYSk7CiAJCQlpdnR2X2J1Zl9zeW5jX2Zvcl9jcHUocywgYnVmKTsKIAkJfQpAQCAtMjcxLDcgKzI3MSw3IEBACiAJLyogZW1wdHkgcV9mcmVlICovCiAJd2hpbGUgKChidWYgPSBpdnR2X2RlcXVldWUocywgJnMtPnFfZnJlZSkpKSB7CiAJCWlmIChpdnR2X21pZ2h0X3VzZV9kbWEocykpCi0JCQlwY2lfdW5tYXBfc2luZ2xlKHMtPml0di0+ZGV2LCBidWYtPmRtYV9oYW5kbGUsCisJCQlwY2lfdW5tYXBfc2luZ2xlKHMtPml0di0+cGRldiwgYnVmLT5kbWFfaGFuZGxlLAogCQkJCXMtPmJ1Zl9zaXplICsgMjU2LCBzLT5kbWEpOwogCQlrZnJlZShidWYtPmJ1Zik7CiAJCWtmcmVlKGJ1Zik7CkBAIC0yODAsNyArMjgwLDcgQEAKIAkvKiBGcmVlIFNHIEFycmF5L0xpc3RzICovCiAJaWYgKHMtPnNnX2RtYSAhPSBOVUxMKSB7CiAJCWlmIChzLT5zZ19oYW5kbGUgIT0gSVZUVl9ETUFfVU5NQVBQRUQpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUocy0+aXR2LT5kZXYsIHMtPnNnX2hhbmRsZSwKKwkJCXBjaV91bm1hcF9zaW5nbGUocy0+aXR2LT5wZGV2LCBzLT5zZ19oYW5kbGUsCiAJCQkJIHNpemVvZihzdHJ1Y3QgaXZ0dl9zZ19lbGVtZW50KSwgUENJX0RNQV9UT0RFVklDRSk7CiAJCQlzLT5zZ19oYW5kbGUgPSBJVlRWX0RNQV9VTk1BUFBFRDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtcXVldWUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXF1ZXVlLmgKaW5kZXggNDc2NTU2YS4uOTEyMzM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtcXVldWUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1xdWV1ZS5oCkBAIC01MywxNCArNTMsMTQgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpdnR2X2J1Zl9zeW5jX2Zvcl9jcHUoc3RydWN0IGl2dHZfc3RyZWFtICpzLCBzdHJ1Y3QgaXZ0dl9idWZmZXIgKmJ1ZikKIHsKIAlpZiAoaXZ0dl91c2VfZG1hKHMpKQotCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocy0+aXR2LT5kZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKKwkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHMtPml0di0+cGRldiwgYnVmLT5kbWFfaGFuZGxlLAogCQkJCXMtPmJ1Zl9zaXplICsgMjU2LCBzLT5kbWEpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaXZ0dl9idWZfc3luY19mb3JfZGV2aWNlKHN0cnVjdCBpdnR2X3N0cmVhbSAqcywgc3RydWN0IGl2dHZfYnVmZmVyICpidWYpCiB7CiAJaWYgKGl2dHZfdXNlX2RtYShzKSkKLQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHMtPml0di0+ZGV2LCBidWYtPmRtYV9oYW5kbGUsCisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzLT5pdHYtPnBkZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKIAkJCQlzLT5idWZfc2l6ZSArIDI1Niwgcy0+ZG1hKTsKIH0KIApAQCAtODIsMTQgKzgyLDE0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaXZ0dl9zdHJlYW1fc3luY19mb3JfY3B1KHN0cnVjdCBpdnR2X3N0cmVhbSAqcykKIHsKIAlpZiAoaXZ0dl91c2VfZG1hKHMpKQotCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocy0+aXR2LT5kZXYsIHMtPnNnX2hhbmRsZSwKKwkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHMtPml0di0+cGRldiwgcy0+c2dfaGFuZGxlLAogCQkJc2l6ZW9mKHN0cnVjdCBpdnR2X3NnX2VsZW1lbnQpLCBQQ0lfRE1BX1RPREVWSUNFKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGl2dHZfc3RyZWFtX3N5bmNfZm9yX2RldmljZShzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnMpCiB7CiAJaWYgKGl2dHZfdXNlX2RtYShzKSkKLQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHMtPml0di0+ZGV2LCBzLT5zZ19oYW5kbGUsCisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzLT5pdHYtPnBkZXYsIHMtPnNnX2hhbmRsZSwKIAkJCXNpemVvZihzdHJ1Y3QgaXZ0dl9zZ19lbGVtZW50KSwgUENJX0RNQV9UT0RFVklDRSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYwppbmRleCA4NTRhOTUwLi4xNWRhMDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCkBAIC0xMzcsMTEgKzEzNywxMSBAQAogc3RhdGljIHZvaWQgaXZ0dl9zdHJlYW1faW5pdChzdHJ1Y3QgaXZ0diAqaXR2LCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnMgPSAmaXR2LT5zdHJlYW1zW3R5cGVdOwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHMtPnY0bDJkZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHMtPnZkZXY7CiAKLQkvKiB3ZSBuZWVkIHRvIGtlZXAgdjRsMmRldiwgc28gcmVzdG9yZSBpdCBhZnRlcndhcmRzICovCisJLyogd2UgbmVlZCB0byBrZWVwIHZkZXYsIHNvIHJlc3RvcmUgaXQgYWZ0ZXJ3YXJkcyAqLwogCW1lbXNldChzLCAwLCBzaXplb2YoKnMpKTsKLQlzLT52NGwyZGV2ID0gZGV2OworCXMtPnZkZXYgPSB2ZGV2OwogCiAJLyogaW5pdGlhbGl6ZSBpdnR2X3N0cmVhbSBmaWVsZHMgKi8KIAlzLT5pdHYgPSBpdHY7CkBAIC0xNzIsMTAgKzE3MiwxMCBAQAogCWludCBudW1fb2Zmc2V0ID0gaXZ0dl9zdHJlYW1faW5mb1t0eXBlXS5udW1fb2Zmc2V0OwogCWludCBudW0gPSBpdHYtPmluc3RhbmNlICsgaXZ0dl9maXJzdF9taW5vciArIG51bV9vZmZzZXQ7CiAKLQkvKiBUaGVzZSBmb3VyIGZpZWxkcyBhcmUgYWx3YXlzIGluaXRpYWxpemVkLiBJZiB2NGwyZGV2ID09IE5VTEwsIHRoZW4KKwkvKiBUaGVzZSBmb3VyIGZpZWxkcyBhcmUgYWx3YXlzIGluaXRpYWxpemVkLiBJZiB2ZGV2ID09IE5VTEwsIHRoZW4KIAkgICB0aGlzIHN0cmVhbSBpcyBub3QgaW4gdXNlLiBJbiB0aGF0IGNhc2Ugbm8gb3RoZXIgZmllbGRzIGJ1dCB0aGVzZQogCSAgIGZvdXIgY2FuIGJlIHVzZWQuICovCi0Jcy0+djRsMmRldiA9IE5VTEw7CisJcy0+dmRldiA9IE5VTEw7CiAJcy0+aXR2ID0gaXR2OwogCXMtPnR5cGUgPSB0eXBlOwogCXMtPm5hbWUgPSBpdnR2X3N0cmVhbV9pbmZvW3R5cGVdLm5hbWU7CkBAIC0xOTcsMjEgKzE5NywyMSBAQAogCWl2dHZfc3RyZWFtX2luaXQoaXR2LCB0eXBlKTsKIAogCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSB2NGwyIHZpZGVvIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQlzLT52NGwyZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7Ci0JaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCkgeworCXMtPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAocy0+dmRldiA9PSBOVUxMKSB7CiAJCUlWVFZfRVJSKCJDb3VsZG4ndCBhbGxvY2F0ZSB2NGwyIHZpZGVvX2RldmljZSBmb3IgJXNcbiIsIHMtPm5hbWUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlzbnByaW50ZihzLT52NGwyZGV2LT5uYW1lLCBzaXplb2Yocy0+djRsMmRldi0+bmFtZSksICIlcyAlcyIsCi0JCQlpdHYtPmRldmljZS5uYW1lLCBzLT5uYW1lKTsKKwlzbnByaW50ZihzLT52ZGV2LT5uYW1lLCBzaXplb2Yocy0+dmRldi0+bmFtZSksICIlcyAlcyIsCisJCQlpdHYtPnY0bDJfZGV2Lm5hbWUsIHMtPm5hbWUpOwogCi0Jcy0+djRsMmRldi0+bnVtID0gbnVtOwotCXMtPnY0bDJkZXYtPnY0bDJfZGV2ID0gJml0di0+ZGV2aWNlOwotCXMtPnY0bDJkZXYtPmZvcHMgPSBpdnR2X3N0cmVhbV9pbmZvW3R5cGVdLmZvcHM7Ci0Jcy0+djRsMmRldi0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOwotCXMtPnY0bDJkZXYtPnR2bm9ybXMgPSBWNEwyX1NURF9BTEw7Ci0JaXZ0dl9zZXRfZnVuY3Mocy0+djRsMmRldik7CisJcy0+dmRldi0+bnVtID0gbnVtOworCXMtPnZkZXYtPnY0bDJfZGV2ID0gJml0di0+djRsMl9kZXY7CisJcy0+dmRldi0+Zm9wcyA9IGl2dHZfc3RyZWFtX2luZm9bdHlwZV0uZm9wczsKKwlzLT52ZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisJcy0+dmRldi0+dHZub3JtcyA9IFY0TDJfU1REX0FMTDsKKwlpdnR2X3NldF9mdW5jcyhzLT52ZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI2LDcgKzIyNiw3IEBACiAJCWlmIChpdnR2X3ByZXBfZGV2KGl0diwgdHlwZSkpCiAJCQlicmVhazsKIAotCQlpZiAoaXR2LT5zdHJlYW1zW3R5cGVdLnY0bDJkZXYgPT0gTlVMTCkKKwkJaWYgKGl0di0+c3RyZWFtc1t0eXBlXS52ZGV2ID09IE5VTEwpCiAJCQljb250aW51ZTsKIAogCQkvKiBBbGxvY2F0ZSBTdHJlYW0gKi8KQEAgLTI0NywyOCArMjQ3LDI4IEBACiAJaW50IHZmbF90eXBlID0gaXZ0dl9zdHJlYW1faW5mb1t0eXBlXS52ZmxfdHlwZTsKIAlpbnQgbnVtOwogCi0JaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCkKKwlpZiAocy0+dmRldiA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCW51bSA9IHMtPnY0bDJkZXYtPm51bTsKKwludW0gPSBzLT52ZGV2LT5udW07CiAJLyogY2FyZCBudW1iZXIgKyB1c2VyIGRlZmluZWQgb2Zmc2V0ICsgZGV2aWNlIG9mZnNldCAqLwogCWlmICh0eXBlICE9IElWVFZfRU5DX1NUUkVBTV9UWVBFX01QRykgewogCQlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnNfbXBnID0gJml0di0+c3RyZWFtc1tJVlRWX0VOQ19TVFJFQU1fVFlQRV9NUEddOwogCi0JCWlmIChzX21wZy0+djRsMmRldikKLQkJCW51bSA9IHNfbXBnLT52NGwyZGV2LT5udW0gKyBpdnR2X3N0cmVhbV9pbmZvW3R5cGVdLm51bV9vZmZzZXQ7CisJCWlmIChzX21wZy0+dmRldikKKwkJCW51bSA9IHNfbXBnLT52ZGV2LT5udW0gKyBpdnR2X3N0cmVhbV9pbmZvW3R5cGVdLm51bV9vZmZzZXQ7CiAJfQotCXZpZGVvX3NldF9kcnZkYXRhKHMtPnY0bDJkZXYsIHMpOworCXZpZGVvX3NldF9kcnZkYXRhKHMtPnZkZXYsIHMpOwogCiAJLyogUmVnaXN0ZXIgZGV2aWNlLiBGaXJzdCB0cnkgdGhlIGRlc2lyZWQgbWlub3IsIHRoZW4gYW55IGZyZWUgb25lLiAqLwotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2Uocy0+djRsMmRldiwgdmZsX3R5cGUsIG51bSkpIHsKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHMtPnZkZXYsIHZmbF90eXBlLCBudW0pKSB7CiAJCUlWVFZfRVJSKCJDb3VsZG4ndCByZWdpc3RlciB2NGwyIGRldmljZSBmb3IgJXMga2VybmVsIG51bWJlciAlZFxuIiwKIAkJCQlzLT5uYW1lLCBudW0pOwotCQl2aWRlb19kZXZpY2VfcmVsZWFzZShzLT52NGwyZGV2KTsKLQkJcy0+djRsMmRldiA9IE5VTEw7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKHMtPnZkZXYpOworCQlzLT52ZGV2ID0gTlVMTDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW51bSA9IHMtPnY0bDJkZXYtPm51bTsKKwludW0gPSBzLT52ZGV2LT5udW07CiAKIAlzd2l0Y2ggKHZmbF90eXBlKSB7CiAJY2FzZSBWRkxfVFlQRV9HUkFCQkVSOgpAQCAtMzE2LDkgKzMxNiw5IEBACiAKIAkvKiBUZWFyZG93biBhbGwgc3RyZWFtcyAqLwogCWZvciAodHlwZSA9IDA7IHR5cGUgPCBJVlRWX01BWF9TVFJFQU1TOyB0eXBlKyspIHsKLQkJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGl0di0+c3RyZWFtc1t0eXBlXS52NGwyZGV2OworCQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gaXR2LT5zdHJlYW1zW3R5cGVdLnZkZXY7CiAKLQkJaXR2LT5zdHJlYW1zW3R5cGVdLnY0bDJkZXYgPSBOVUxMOworCQlpdHYtPnN0cmVhbXNbdHlwZV0udmRldiA9IE5VTEw7CiAJCWlmICh2ZGV2ID09IE5VTEwpCiAJCQljb250aW51ZTsKIApAQCAtNDQ5LDcgKzQ0OSw3IEBACiAJaW50IGNhcHR5cGUgPSAwLCBzdWJ0eXBlID0gMDsKIAlpbnQgZW5hYmxlX3Bhc3N0aHJvdWdoID0gMDsKIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHMtPnZkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlJVlRWX0RFQlVHX0lORk8oIlN0YXJ0IGVuY29kZXIgc3RyZWFtICVzXG4iLCBzLT5uYW1lKTsKQEAgLTYxMSw3ICs2MTEsNyBAQAogCXN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwID0gJml0di0+cGFyYW1zOwogCWludCBkYXRhdHlwZTsKIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHMtPnZkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlJVlRWX0RFQlVHX0lORk8oIlNldHRpbmcgc29tZSBpbml0aWFsIGRlY29kZXIgc2V0dGluZ3NcbiIpOwpAQCAtNjU3LDcgKzY1Nyw3IEBACiB7CiAJc3RydWN0IGl2dHYgKml0diA9IHMtPml0djsKIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHMtPnZkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChJVlRWX0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKSkKQEAgLTcwNSw3ICs3MDUsNyBAQAogCWZvciAoaSA9IElWVFZfTUFYX1NUUkVBTVMgLSAxOyBpID49IDA7IGktLSkgewogCQlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnMgPSAmaXR2LT5zdHJlYW1zW2ldOwogCi0JCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJCWlmIChzLT52ZGV2ID09IE5VTEwpCiAJCQljb250aW51ZTsKIAkJaWYgKHRlc3RfYml0KElWVFZfRl9TX1NUUkVBTUlORywgJnMtPnNfZmxhZ3MpKSB7CiAJCQlpdnR2X3N0b3BfdjRsMl9lbmNvZGVfc3RyZWFtKHMsIDApOwpAQCAtNzIwLDcgKzcyMCw3IEBACiAJaW50IGNhcF90eXBlOwogCWludCBzdG9wbW9kZTsKIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHMtPnZkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB5b3UgYXJlIGFsbG93ZWQgdG8gc3RvcCB0aGUgY2FwdHVyZQpAQCAtODM0LDcgKzgzNCw3IEBACiB7CiAJc3RydWN0IGl2dHYgKml0diA9IHMtPml0djsKIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHMtPnZkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAocy0+dHlwZSAhPSBJVlRWX0RFQ19TVFJFQU1fVFlQRV9ZVVYgJiYgcy0+dHlwZSAhPSBJVlRWX0RFQ19TVFJFQU1fVFlQRV9NUEcpCkBAIC04OTUsNyArODk1LDcgQEAKIAlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnl1dl9zdHJlYW0gPSAmaXR2LT5zdHJlYW1zW0lWVFZfRU5DX1NUUkVBTV9UWVBFX1lVVl07CiAJc3RydWN0IGl2dHZfc3RyZWFtICpkZWNfc3RyZWFtID0gJml0di0+c3RyZWFtc1tJVlRWX0RFQ19TVFJFQU1fVFlQRV9ZVVZdOwogCi0JaWYgKHl1dl9zdHJlYW0tPnY0bDJkZXYgPT0gTlVMTCB8fCBkZWNfc3RyZWFtLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHl1dl9zdHJlYW0tPnZkZXYgPT0gTlVMTCB8fCBkZWNfc3RyZWFtLT52ZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJSVZUVl9ERUJVR19JTkZPKCJpdnR2IGlvY3RsOiBTZWxlY3QgcGFzc3Rocm91Z2ggbW9kZVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di11ZG1hLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di11ZG1hLmMKaW5kZXggNDYwZGIwMy4uZDA3YWQ2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdWRtYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXVkbWEuYwpAQCAtOTMsNyArOTMsNyBAQAogewogCWlmIChpdHYtPnVkbWEuU0dfaGFuZGxlID09IDApIHsKIAkJLyogTWFwIERNQSBQYWdlIEFycmF5IEJ1ZmZlciAqLwotCQlpdHYtPnVkbWEuU0dfaGFuZGxlID0gcGNpX21hcF9zaW5nbGUoaXR2LT5kZXYsIGl0di0+dWRtYS5TR2FycmF5LAorCQlpdHYtPnVkbWEuU0dfaGFuZGxlID0gcGNpX21hcF9zaW5nbGUoaXR2LT5wZGV2LCBpdHYtPnVkbWEuU0dhcnJheSwKIAkJCSAgIHNpemVvZihpdHYtPnVkbWEuU0dhcnJheSksIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQlpdnR2X3VkbWFfc3luY19mb3JfY3B1KGl0dik7CiAJfQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJfQogCiAJLyogTWFwIFNHIExpc3QgKi8KLQlkbWEtPlNHX2xlbmd0aCA9IHBjaV9tYXBfc2coaXR2LT5kZXYsIGRtYS0+U0dsaXN0LCBkbWEtPnBhZ2VfY291bnQsIFBDSV9ETUFfVE9ERVZJQ0UpOworCWRtYS0+U0dfbGVuZ3RoID0gcGNpX21hcF9zZyhpdHYtPnBkZXYsIGRtYS0+U0dsaXN0LCBkbWEtPnBhZ2VfY291bnQsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCiAJLyogRmlsbCBTRyBBcnJheSB3aXRoIG5ldyB2YWx1ZXMgKi8KIAlpdnR2X3VkbWFfZmlsbF9zZ19hcnJheSAoZG1hLCBpdnR2X2Rlc3RfYWRkciwgMCwgLTEpOwpAQCAtMTcyLDcgKzE3Miw3IEBACiAKIAkvKiBVbm1hcCBTY2F0dGVybGlzdCAqLwogCWlmIChkbWEtPlNHX2xlbmd0aCkgewotCQlwY2lfdW5tYXBfc2coaXR2LT5kZXYsIGRtYS0+U0dsaXN0LCBkbWEtPnBhZ2VfY291bnQsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlwY2lfdW5tYXBfc2coaXR2LT5wZGV2LCBkbWEtPlNHbGlzdCwgZG1hLT5wYWdlX2NvdW50LCBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJZG1hLT5TR19sZW5ndGggPSAwOwogCX0KIAkvKiBzeW5jIERNQSAqLwpAQCAtMTkxLDEzICsxOTEsMTMgQEAKIAogCS8qIFVubWFwIFNHIEFycmF5ICovCiAJaWYgKGl0di0+dWRtYS5TR19oYW5kbGUpIHsKLQkJcGNpX3VubWFwX3NpbmdsZShpdHYtPmRldiwgaXR2LT51ZG1hLlNHX2hhbmRsZSwKKwkJcGNpX3VubWFwX3NpbmdsZShpdHYtPnBkZXYsIGl0di0+dWRtYS5TR19oYW5kbGUsCiAJCQkgc2l6ZW9mKGl0di0+dWRtYS5TR2FycmF5KSwgUENJX0RNQV9UT0RFVklDRSk7CiAJfQogCiAJLyogVW5tYXAgU2NhdHRlcmxpc3QgKi8KIAlpZiAoaXR2LT51ZG1hLlNHX2xlbmd0aCkgewotCQlwY2lfdW5tYXBfc2coaXR2LT5kZXYsIGl0di0+dWRtYS5TR2xpc3QsIGl0di0+dWRtYS5wYWdlX2NvdW50LCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJcGNpX3VubWFwX3NnKGl0di0+cGRldiwgaXR2LT51ZG1hLlNHbGlzdCwgaXR2LT51ZG1hLnBhZ2VfY291bnQsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBJVlRWX0RNQV9TR19PU0RfRU5UOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXVkbWEuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXVkbWEuaAppbmRleCBkZjcyN2UyLi5lZTNjOWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di11ZG1hLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdWRtYS5oCkBAIC0zNSwxMyArMzUsMTMgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGl2dHZfdWRtYV9zeW5jX2Zvcl9kZXZpY2Uoc3RydWN0IGl2dHYgKml0dikKIHsKLQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoKHN0cnVjdCBwY2lfZGV2ICopaXR2LT5kZXYsIGl0di0+dWRtYS5TR19oYW5kbGUsCisJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGl0di0+cGRldiwgaXR2LT51ZG1hLlNHX2hhbmRsZSwKIAkJc2l6ZW9mKGl0di0+dWRtYS5TR2FycmF5KSwgUENJX0RNQV9UT0RFVklDRSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpdnR2X3VkbWFfc3luY19mb3JfY3B1KHN0cnVjdCBpdnR2ICppdHYpCiB7Ci0JcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KChzdHJ1Y3QgcGNpX2RldiAqKWl0di0+ZGV2LCBpdHYtPnVkbWEuU0dfaGFuZGxlLAorCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShpdHYtPnBkZXYsIGl0di0+dWRtYS5TR19oYW5kbGUsCiAJCXNpemVvZihpdHYtPnVkbWEuU0dhcnJheSksIFBDSV9ETUFfVE9ERVZJQ0UpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jCmluZGV4IDVjNWQxYzQuLmY0MjBkMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jCkBAIC0xODUsNiArMTg1LDggQEAKIAkJc2l6ZSA9IDQgKyAoKDQzICogbGluZSArIDMpICYgfjMpOwogCX0gZWxzZSB7CiAJCW1lbWNweShkc3QgKyBzZCwgIml0djAiLCA0KTsKKwkJY3B1X3RvX2xlMzJzKCZsaW5lbWFza1swXSk7CisJCWNwdV90b19sZTMycygmbGluZW1hc2tbMV0pOwogCQltZW1jcHkoZHN0ICsgc2QgKyA0LCAmbGluZW1hc2tbMF0sIDgpOwogCQlzaXplID0gMTIgKyAoKDQzICogbGluZSArIDMpICYgfjMpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZlcnNpb24uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZlcnNpb24uaAppbmRleCA4Y2Q3NTNkLi5iNTMwZGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmVyc2lvbi5oCkBAIC0yMyw3ICsyMyw3IEBACiAjZGVmaW5lIElWVFZfRFJJVkVSX05BTUUgIml2dHYiCiAjZGVmaW5lIElWVFZfRFJJVkVSX1ZFUlNJT05fTUFKT1IgMQogI2RlZmluZSBJVlRWX0RSSVZFUl9WRVJTSU9OX01JTk9SIDQKLSNkZWZpbmUgSVZUVl9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMIDAKKyNkZWZpbmUgSVZUVl9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMIDEKIAogI2RlZmluZSBJVlRWX1ZFUlNJT04gX19zdHJpbmdpZnkoSVZUVl9EUklWRVJfVkVSU0lPTl9NQUpPUikgIi4iIF9fc3RyaW5naWZ5KElWVFZfRFJJVkVSX1ZFUlNJT05fTUlOT1IpICIuIiBfX3N0cmluZ2lmeShJVlRWX0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwpCiAjZGVmaW5lIElWVFZfRFJJVkVSX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oSVZUVl9EUklWRVJfVkVSU0lPTl9NQUpPUixJVlRWX0RSSVZFUl9WRVJTSU9OX01JTk9SLElWVFZfRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXl1di5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYteXV2LmMKaW5kZXggZWU5MTEwNy4uNzkxMmVkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYteXV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYteXV2LmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCQlkbWEtPnBhZ2VfY291bnQgPSAwOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JZG1hLT5TR19sZW5ndGggPSBwY2lfbWFwX3NnKGl0di0+ZGV2LCBkbWEtPlNHbGlzdCwgZG1hLT5wYWdlX2NvdW50LCBQQ0lfRE1BX1RPREVWSUNFKTsKKwlkbWEtPlNHX2xlbmd0aCA9IHBjaV9tYXBfc2coaXR2LT5wZGV2LCBkbWEtPlNHbGlzdCwgZG1hLT5wYWdlX2NvdW50LCBQQ0lfRE1BX1RPREVWSUNFKTsKIAogCS8qIEZpbGwgU0cgQXJyYXkgd2l0aCBuZXcgdmFsdWVzICovCiAJaXZ0dl91ZG1hX2ZpbGxfc2dfYXJyYXkoZG1hLCB5X2J1ZmZlcl9vZmZzZXQsIHV2X2J1ZmZlcl9vZmZzZXQsIHlfc2l6ZSk7CkBAIC05MTAsNyArOTEwLDcgQEAKIAkvKiBXZSBuZWVkIGEgYnVmZmVyIGZvciBibGFua2luZyB3aGVuIFkgcGxhbmUgaXMgb2Zmc2V0IC0gbm9uLWZhdGFsIGlmIHdlIGNhbid0IGdldCBvbmUgKi8KIAl5aS0+YmxhbmtpbmdfcHRyID0ga3phbGxvYyg3MjAgKiAxNiwgR0ZQX0tFUk5FTHxfX0dGUF9OT1dBUk4pOwogCWlmICh5aS0+YmxhbmtpbmdfcHRyKSB7Ci0JCXlpLT5ibGFua2luZ19kbWFwdHIgPSBwY2lfbWFwX3NpbmdsZShpdHYtPmRldiwgeWktPmJsYW5raW5nX3B0ciwgNzIwKjE2LCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJeWktPmJsYW5raW5nX2RtYXB0ciA9IHBjaV9tYXBfc2luZ2xlKGl0di0+cGRldiwgeWktPmJsYW5raW5nX3B0ciwgNzIwKjE2LCBQQ0lfRE1BX1RPREVWSUNFKTsKIAl9IGVsc2UgewogCQl5aS0+YmxhbmtpbmdfZG1hcHRyID0gMDsKIAkJSVZUVl9ERUJVR19XQVJOKCJGYWlsZWQgdG8gYWxsb2NhdGUgeXV2IGJsYW5raW5nIGJ1ZmZlclxuIik7CkBAIC0xMjM3LDcgKzEyMzcsNyBAQAogCWlmICh5aS0+YmxhbmtpbmdfcHRyKSB7CiAJCWtmcmVlKHlpLT5ibGFua2luZ19wdHIpOwogCQl5aS0+YmxhbmtpbmdfcHRyID0gTlVMTDsKLQkJcGNpX3VubWFwX3NpbmdsZShpdHYtPmRldiwgeWktPmJsYW5raW5nX2RtYXB0ciwgNzIwKjE2LCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJcGNpX3VubWFwX3NpbmdsZShpdHYtPnBkZXYsIHlpLT5ibGFua2luZ19kbWFwdHIsIDcyMCoxNiwgUENJX0RNQV9UT0RFVklDRSk7CiAJfQogCiAJLyogSW52YWxpZGF0ZSB0aGUgb2xkIGRpbWVuc2lvbiBpbmZvcm1hdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jCmluZGV4IDM2YWJkMmEuLjY2ZTZlYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMKQEAgLTExOTIsMTIgKzExOTIsMTIgQEAKIHN0YXRpYyBpbnQgX19pbml0IGl2dHZmYl9jYWxsYmFja19pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGl2dHYgKml0diA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IGl2dHYsIGRldmljZSk7CisJc3RydWN0IGl2dHYgKml0diA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IGl2dHYsIHY0bDJfZGV2KTsKIAogCWlmIChpdHYgJiYgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpKSB7CiAJCWlmIChpdnR2ZmJfaW5pdF9jYXJkKGl0dikgPT0gMCkgewogCQkJSVZUVkZCX0lORk8oIkZyYW1lYnVmZmVyIHJlZ2lzdGVyZWQgb24gJXNcbiIsCi0JCQkJCWl0di0+ZGV2aWNlLm5hbWUpOworCQkJCQlpdHYtPnY0bDJfZGV2Lm5hbWUpOwogCQkJKCooaW50ICopcCkrKzsKIAkJfQogCX0KQEAgLTEyMDcsNyArMTIwNyw3IEBACiBzdGF0aWMgaW50IGl2dHZmYl9jYWxsYmFja19jbGVhbnVwKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGl2dHYgKml0diA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IGl2dHYsIGRldmljZSk7CisJc3RydWN0IGl2dHYgKml0diA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IGl2dHYsIHY0bDJfZGV2KTsKIAogCWlmIChpdHYgJiYgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpKSB7CiAJCWlmICh1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZpdHYtPm9zZF9pbmZvLT5pdnR2ZmJfaW5mbykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2tzMDEyNy5jCmluZGV4IGJhZTJkMmIuLjg0MTAyNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuYwpAQCAtMzksMTkgKzM5LDIwIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KICNpbmNsdWRlICJrczAxMjcuaCIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJLUzAxMjcgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlJ5YW4gRHJha2UiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2RlZmluZSBLU19UWVBFX1VOS05PV04JMAotI2RlZmluZSBLU19UWVBFXzAxMjJTCTEKLSNkZWZpbmUgS1NfVFlQRV8wMTI3CTIKLSNkZWZpbmUgS1NfVFlQRV8wMTI3QgkzCisvKiBBZGRyZXNzZXMgKi8KKyNkZWZpbmUgSTJDX0tTMDEyN19BRERPTiAgIDB4RDgKKyNkZWZpbmUgSTJDX0tTMDEyN19PTkJPQVJEIDB4REEKKwogCiAvKiBrczAxMjcgY29udHJvbCByZWdpc3RlcnMgKi8KICNkZWZpbmUgS1NfU1RBVCAgICAgMHgwMApAQCAtMTk3LDE1ICsxOTgsMTcgQEAKIH07CiAKIHN0cnVjdCBrczAxMjcgewotCWludAkJZm9ybWF0X3dpZHRoOwotCWludAkJZm9ybWF0X2hlaWdodDsKLQlpbnQJCWNhcF93aWR0aDsKLQlpbnQJCWNhcF9oZWlnaHQ7Ci0JaW50CQlub3JtOwotCWludAkJa3NfdHlwZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CisJdjRsMl9zdGRfaWQJbm9ybTsKKwlpbnQJCWlkZW50OwogCXU4IAkJcmVnc1syNTZdOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qga3MwMTI3ICp0b19rczAxMjcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qga3MwMTI3LCBzZCk7Cit9CisKIAogc3RhdGljIGludCBkZWJ1ZzsgLyogaW5zbW9kIHBhcmFtZXRlciAqLwogCkBAIC0zMTEsNDMgKzMxNCw0NSBAQAogICovCiAKIAotc3RhdGljIHU4IGtzMDEyN19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1OCByZWcpCitzdGF0aWMgdTgga3MwMTI3X3JlYWQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAljaGFyIHZhbCA9IDA7CiAJc3RydWN0IGkyY19tc2cgbXNnc1tdID0gewotCQl7IGMtPmFkZHIsIDAsIHNpemVvZihyZWcpLCAmcmVnIH0sCi0JCXsgYy0+YWRkciwgSTJDX01fUkQgfCBJMkNfTV9OT19SRF9BQ0ssIHNpemVvZih2YWwpLCAmdmFsIH0KKwkJeyBjbGllbnQtPmFkZHIsIDAsIHNpemVvZihyZWcpLCAmcmVnIH0sCisJCXsgY2xpZW50LT5hZGRyLCBJMkNfTV9SRCB8IEkyQ19NX05PX1JEX0FDSywgc2l6ZW9mKHZhbCksICZ2YWwgfQogCX07CiAJaW50IHJldDsKIAotCXJldCA9IGkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKKwlyZXQgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKIAlpZiAocmV0ICE9IEFSUkFZX1NJWkUobXNncykpCi0JCXY0bF9kYmcoMSwgZGVidWcsIGMsICJyZWFkIGVycm9yXG4iKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAicmVhZCBlcnJvclxuIik7CiAKIAlyZXR1cm4gdmFsOwogfQogCiAKLXN0YXRpYyB2b2lkIGtzMDEyN193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdTggcmVnLCB1OCB2YWwpCitzdGF0aWMgdm9pZCBrczAxMjdfd3JpdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLCB1OCB2YWwpCiB7Ci0Jc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBrczAxMjcgKmtzID0gdG9fa3MwMTI3KHNkKTsKIAljaGFyIG1zZ1tdID0geyByZWcsIHZhbCB9OwogCi0JaWYgKGkyY19tYXN0ZXJfc2VuZChjLCBtc2csIHNpemVvZihtc2cpKSAhPSBzaXplb2YobXNnKSkKLQkJdjRsX2RiZygxLCBkZWJ1ZywgYywgIndyaXRlIGVycm9yXG4iKTsKKwlpZiAoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgbXNnLCBzaXplb2YobXNnKSkgIT0gc2l6ZW9mKG1zZykpCisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIndyaXRlIGVycm9yXG4iKTsKIAogCWtzLT5yZWdzW3JlZ10gPSB2YWw7CiB9CiAKIAogLyogZ2VuZXJpYyBiaXQtdHdpZGRsaW5nICovCi1zdGF0aWMgdm9pZCBrczAxMjdfYW5kX29yKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggYW5kX3YsIHU4IG9yX3YpCitzdGF0aWMgdm9pZCBrczAxMjdfYW5kX29yKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggYW5kX3YsIHU4IG9yX3YpCiB7Ci0Jc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IHRvX2tzMDEyNyhzZCk7CiAKIAl1OCB2YWwgPSBrcy0+cmVnc1tyZWddOwogCXZhbCA9ICh2YWwgJiBhbmRfdikgfCBvcl92OwotCWtzMDEyN193cml0ZShjbGllbnQsIHJlZywgdmFsKTsKKwlrczAxMjdfd3JpdGUoc2QsIHJlZywgdmFsKTsKIH0KIAogCkBAIC0zNTUsNDM5ICszNjAsMzYzIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBrczAxMjcgcHJpdmF0ZSBhcGkKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBrczAxMjdfcmVzZXQoc3RydWN0IGkyY19jbGllbnQgKmMpCitzdGF0aWMgdm9pZCBrczAxMjdfaW5pdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewotCXN0cnVjdCBrczAxMjcgKmtzID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXN0cnVjdCBrczAxMjcgKmtzID0gdG9fa3MwMTI3KHNkKTsKIAl1OCAqdGFibGUgPSByZWdfZGVmYXVsdHM7CiAJaW50IGk7CiAKLQlrcy0+a3NfdHlwZSA9IEtTX1RZUEVfVU5LTk9XTjsKKwlrcy0+aWRlbnQgPSBWNEwyX0lERU5UX0tTMDEyNzsKIAotCXY0bF9kYmcoMSwgZGVidWcsIGMsICJyZXNldFxuIik7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAicmVzZXRcbiIpOwogCW1zbGVlcCgxKTsKIAogCS8qIGluaXRpYWxpemUgYWxsIHJlZ2lzdGVycyB0byBrbm93biB2YWx1ZXMgKi8KIAkvKiAoZXhjZXB0IFNUQVQsIDB4MjEsIDB4MjIsIFRFU1QgYW5kIDB4MzgsMHgzOSkgKi8KIAogCWZvciAoaSA9IDE7IGkgPCAzMzsgaSsrKQotCQlrczAxMjdfd3JpdGUoYywgaSwgdGFibGVbaV0pOworCQlrczAxMjdfd3JpdGUoc2QsIGksIHRhYmxlW2ldKTsKIAogCWZvciAoaSA9IDM1OyBpIDwgNDA7IGkrKykKLQkJa3MwMTI3X3dyaXRlKGMsIGksIHRhYmxlW2ldKTsKKwkJa3MwMTI3X3dyaXRlKHNkLCBpLCB0YWJsZVtpXSk7CiAKIAlmb3IgKGkgPSA0MTsgaSA8IDU2OyBpKyspCi0JCWtzMDEyN193cml0ZShjLCBpLCB0YWJsZVtpXSk7CisJCWtzMDEyN193cml0ZShzZCwgaSwgdGFibGVbaV0pOwogCiAJZm9yIChpID0gNTg7IGkgPCA2NDsgaSsrKQotCQlrczAxMjdfd3JpdGUoYywgaSwgdGFibGVbaV0pOworCQlrczAxMjdfd3JpdGUoc2QsIGksIHRhYmxlW2ldKTsKIAogCi0JaWYgKChrczAxMjdfcmVhZChjLCBLU19TVEFUKSAmIDB4ODApID09IDApIHsKLQkJa3MtPmtzX3R5cGUgPSBLU19UWVBFXzAxMjJTOwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAia3MwMTIycyBmb3VuZFxuIik7CisJaWYgKChrczAxMjdfcmVhZChzZCwgS1NfU1RBVCkgJiAweDgwKSA9PSAwKSB7CisJCWtzLT5pZGVudCA9IFY0TDJfSURFTlRfS1MwMTIyUzsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAia3MwMTIycyBmb3VuZFxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlzd2l0Y2ggKGtzMDEyN19yZWFkKGMsIEtTX0NNREUpICYgMHgwZikgeworCXN3aXRjaCAoa3MwMTI3X3JlYWQoc2QsIEtTX0NNREUpICYgMHgwZikgewogCWNhc2UgMDoKLQkJa3MtPmtzX3R5cGUgPSBLU19UWVBFXzAxMjc7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGMsICJrczAxMjcgZm91bmRcbiIpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJrczAxMjcgZm91bmRcbiIpOwogCQlicmVhazsKIAogCWNhc2UgOToKLQkJa3MtPmtzX3R5cGUgPSBLU19UWVBFXzAxMjdCOwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAia3MwMTI3QiBSZXZpc2lvbiBBIGZvdW5kXG4iKTsKKwkJa3MtPmlkZW50ID0gVjRMMl9JREVOVF9LUzAxMjdCOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJrczAxMjdCIFJldmlzaW9uIEEgZm91bmRcbiIpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGMsICJ1bmtub3duIHJldmlzaW9uXG4iKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAidW5rbm93biByZXZpc2lvblxuIik7CiAJCWJyZWFrOwogCX0KIH0KIAotc3RhdGljIGludCBrczAxMjdfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGtzMDEyN19zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCiB7Ci0Jc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7Ci0JaW50CQkqaWFyZyA9IChpbnQgKilhcmc7Ci0JaW50CQlzdGF0dXM7CisJc3RydWN0IGtzMDEyNyAqa3MgPSB0b19rczAxMjcoc2QpOwogCi0JaWYgKCFrcykKLQkJcmV0dXJuIC1FTk9ERVY7CisJc3dpdGNoIChyb3V0ZS0+aW5wdXQpIHsKKwljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV8xOgorCWNhc2UgS1NfSU5QVVRfQ09NUE9TSVRFXzI6CisJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfMzoKKwljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV80OgorCWNhc2UgS1NfSU5QVVRfQ09NUE9TSVRFXzU6CisJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfNjoKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLAorCQkJInNfcm91dGluZyAlZDogQ29tcG9zaXRlXG4iLCByb3V0ZS0+aW5wdXQpOworCQkvKiBhdXRvZGV0ZWN0IDUwLzYwIEh6ICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7CisJCS8qIFZTRT0wICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NNREEsICAgfjB4NDAsIDB4MDApOworCQkvKiBzZXQgaW5wdXQgbGluZSAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURCLCAgIDB4YjAsIHJvdXRlLT5pbnB1dCk7CisJCS8qIG5vbi1mcmVlcnVubmluZyBtb2RlICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NNREMsICAgMHg3MCwgMHgwYSk7CisJCS8qIGFuYWxvZyBpbnB1dCAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURELCAgIDB4MDMsIDB4MDApOworCQkvKiBlbmFibGUgY2hyb21hIGRlbW9kdWxhdGlvbiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MDApOworCQkvKiBjaHJvbWEgdHJhcCwgSFlCV1I9MSAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19MVU1BLCAgIDB4MDAsCisJCQkgICAgICAgKHJlZ19kZWZhdWx0c1tLU19MVU1BXSl8MHgwYyk7CisJCS8qIHNjYWxlciBmdWxsYncsIGx1bWEgY29tYiBvZmYgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfVkVSVElBLCAweDA4LCAweDgxKTsKKwkJLyogbWFudWFsIGNocm9tYSBjb21iIC4yNSAuNSAuMjUgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfVkVSVElDLCAweDBmLCAweDkwKTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBERUNPREVSX0lOSVQ6Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGMsICJERUNPREVSX0lOSVRcbiIpOwotCQlrczAxMjdfcmVzZXQoYyk7CisJCS8qIGNocm9tYSBwYXRoIGRlbGF5ICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NIUk9NQiwgMHgwZiwgMHg5MCk7CisKKwkJa3MwMTI3X3dyaXRlKHNkLCBLU19VR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1VHQUlOXSk7CisJCWtzMDEyN193cml0ZShzZCwgS1NfVkdBSU4sIHJlZ19kZWZhdWx0c1tLU19WR0FJTl0pOworCQlrczAxMjdfd3JpdGUoc2QsIEtTX1VWT0ZGSCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGSF0pOworCQlrczAxMjdfd3JpdGUoc2QsIEtTX1VWT0ZGTCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGTF0pOwogCQlicmVhazsKIAotCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6Ci0JCXN3aXRjaCgqaWFyZykgewotCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV8xOgotCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV8yOgotCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV8zOgotCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV80OgotCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV81OgotCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV82OgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiREVDT0RFUl9TRVRfSU5QVVQgJWQ6IENvbXBvc2l0ZVxuIiwgKmlhcmcpOwotCQkJLyogYXV0b2RldGVjdCA1MC82MCBIeiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURBLCAgIDB4ZmMsIDB4MDApOwotCQkJLyogVlNFPTAgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICB+MHg0MCwgMHgwMCk7Ci0JCQkvKiBzZXQgaW5wdXQgbGluZSAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURCLCAgIDB4YjAsICppYXJnKTsKLQkJCS8qIG5vbi1mcmVlcnVubmluZyBtb2RlICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREMsICAgMHg3MCwgMHgwYSk7Ci0JCQkvKiBhbmFsb2cgaW5wdXQgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01ERCwgICAweDAzLCAweDAwKTsKLQkJCS8qIGVuYWJsZSBjaHJvbWEgZGVtb2R1bGF0aW9uICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NUUkFDSywgMHhjZiwgMHgwMCk7Ci0JCQkvKiBjaHJvbWEgdHJhcCwgSFlCV1I9MSAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19MVU1BLCAgIDB4MDAsCi0JCQkJICAgICAgIChyZWdfZGVmYXVsdHNbS1NfTFVNQV0pfDB4MGMpOwotCQkJLyogc2NhbGVyIGZ1bGxidywgbHVtYSBjb21iIG9mZiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WRVJUSUEsIDB4MDgsIDB4ODEpOwotCQkJLyogbWFudWFsIGNocm9tYSBjb21iIC4yNSAuNSAuMjUgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElDLCAweDBmLCAweDkwKTsKKwljYXNlIEtTX0lOUFVUX1NWSURFT18xOgorCWNhc2UgS1NfSU5QVVRfU1ZJREVPXzI6CisJY2FzZSBLU19JTlBVVF9TVklERU9fMzoKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLAorCQkJInNfcm91dGluZyAlZDogUy1WaWRlb1xuIiwgcm91dGUtPmlucHV0KTsKKwkJLyogYXV0b2RldGVjdCA1MC82MCBIeiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURBLCAgIDB4ZmMsIDB4MDApOworCQkvKiBWU0U9MCAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURBLCAgIH4weDQwLCAweDAwKTsKKwkJLyogc2V0IGlucHV0IGxpbmUgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ01EQiwgICAweGIwLCByb3V0ZS0+aW5wdXQpOworCQkvKiBub24tZnJlZXJ1bm5pbmcgbW9kZSAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURDLCAgIDB4NzAsIDB4MGEpOworCQkvKiBhbmFsb2cgaW5wdXQgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ01ERCwgICAweDAzLCAweDAwKTsKKwkJLyogZW5hYmxlIGNocm9tYSBkZW1vZHVsYXRpb24gKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ1RSQUNLLCAweGNmLCAweDAwKTsKKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfTFVNQSwgMHgwMCwKKwkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfTFVNQV0pOworCQkvKiBkaXNhYmxlIGx1bWEgY29tYiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19WRVJUSUEsIDB4MDgsCisJCQkgICAgICAgKHJlZ19kZWZhdWx0c1tLU19WRVJUSUFdJjB4ZjApfDB4MDEpOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19WRVJUSUMsIDB4MGYsCisJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX1ZFUlRJQ10mMHhmMCk7CiAKLQkJCS8qIGNocm9tYSBwYXRoIGRlbGF5ICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQiwgMHgwZiwgMHg5MCk7CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NIUk9NQiwgMHgwZiwKKwkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfQ0hST01CXSYweGYwKTsKIAotCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1VHQUlOLCByZWdfZGVmYXVsdHNbS1NfVUdBSU5dKTsKLQkJCWtzMDEyN193cml0ZShjLCBLU19WR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1ZHQUlOXSk7Ci0JCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZILCByZWdfZGVmYXVsdHNbS1NfVVZPRkZIXSk7Ci0JCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZMLCByZWdfZGVmYXVsdHNbS1NfVVZPRkZMXSk7Ci0JCQlicmVhazsKLQotCQljYXNlIEtTX0lOUFVUX1NWSURFT18xOgotCQljYXNlIEtTX0lOUFVUX1NWSURFT18yOgotCQljYXNlIEtTX0lOUFVUX1NWSURFT18zOgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiREVDT0RFUl9TRVRfSU5QVVQgJWQ6IFMtVmlkZW9cbiIsICppYXJnKTsKLQkJCS8qIGF1dG9kZXRlY3QgNTAvNjAgSHogKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZjLCAweDAwKTsKLQkJCS8qIFZTRT0wICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgfjB4NDAsIDB4MDApOwotCQkJLyogc2V0IGlucHV0IGxpbmUgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQiwgICAweGIwLCAqaWFyZyk7Ci0JCQkvKiBub24tZnJlZXJ1bm5pbmcgbW9kZSAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURDLCAgIDB4NzAsIDB4MGEpOwotCQkJLyogYW5hbG9nIGlucHV0ICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREQsICAgMHgwMywgMHgwMCk7Ci0JCQkvKiBlbmFibGUgY2hyb21hIGRlbW9kdWxhdGlvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MDApOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19MVU1BLCAweDAwLAotCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfTFVNQV0pOwotCQkJLyogZGlzYWJsZSBsdW1hIGNvbWIgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElBLCAweDA4LAotCQkJCSAgICAgICAocmVnX2RlZmF1bHRzW0tTX1ZFUlRJQV0mMHhmMCl8MHgwMSk7Ci0JCQlrczAxMjdfYW5kX29yKGMsIEtTX1ZFUlRJQywgMHgwZiwKLQkJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX1ZFUlRJQ10mMHhmMCk7Ci0KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01CLCAweDBmLAotCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfQ0hST01CXSYweGYwKTsKLQotCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1VHQUlOLCByZWdfZGVmYXVsdHNbS1NfVUdBSU5dKTsKLQkJCWtzMDEyN193cml0ZShjLCBLU19WR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1ZHQUlOXSk7Ci0JCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZILCByZWdfZGVmYXVsdHNbS1NfVVZPRkZIXSk7Ci0JCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZMLCByZWdfZGVmYXVsdHNbS1NfVVZPRkZMXSk7Ci0JCQlicmVhazsKLQotCQljYXNlIEtTX0lOUFVUX1lVVjY1NjoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIkRFQ09ERVJfU0VUX0lOUFVUIDE1OiBZVVY2NTZcbiIpOwotCQkJaWYgKGtzLT5ub3JtID09IFZJREVPX01PREVfTlRTQyB8fAotCQkJICAgIGtzLT5ub3JtID09IEtTX1NURF9QQUxfTSkKLQkJCQkvKiBmb3JjZSA2MCBIeiAqLwotCQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZjLCAweDAzKTsKLQkJCWVsc2UKLQkJCQkvKiBmb3JjZSA1MCBIeiAqLwotCQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZjLCAweDAyKTsKLQotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURBLCAgIDB4ZmYsIDB4NDApOyAvKiBWU0U9MSAqLwotCQkJLyogc2V0IGlucHV0IGxpbmUgYW5kIFZBTElHTiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURCLCAgIDB4YjAsICgqaWFyZyB8IDB4NDApKTsKLQkJCS8qIGZyZWVydW5uaW5nIG1vZGUsICovCi0JCQkvKiBUU1RHRU4gPSAxIFRTVEdGUj0xMSBUU1RHUEg9MCBUU1RHUEs9MCAgVk1FTT0xKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQywgICAweDcwLCAweDg3KTsKLQkJCS8qIGRpZ2l0YWwgaW5wdXQsIFNZTkRJUiA9IDAgSU5QU0w9MDEgQ0xLRElSPTAgRUFWPTAgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01ERCwgICAweDAzLCAweDA4KTsKLQkJCS8qIGRpc2FibGUgY2hyb21hIGRlbW9kdWxhdGlvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MzApOwotCQkJLyogSFlQSyA9MDEgQ1RSQVAgPSAwIEhZQldSPTAgUEVEPTEgUkdCSD0xIFVOSVQ9MSAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19MVU1BLCAgIDB4MDAsIDB4NzEpOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WRVJUSUMsIDB4MGYsCi0JCQkJICAgICAgIHJlZ19kZWZhdWx0c1tLU19WRVJUSUNdJjB4ZjApOwotCi0JCQkvKiBzY2FsZXIgZnVsbGJ3LCBsdW1hIGNvbWIgb2ZmICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX1ZFUlRJQSwgMHgwOCwgMHg4MSk7Ci0KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01CLCAweDBmLAotCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfQ0hST01CXSYweGYwKTsKLQotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DT04sIDB4MDAsIDB4MDApOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19CUlQsIDB4MDAsIDMyKTsJLyogc3BlYzogMzQgKi8KLQkJCQkvKiBzcGVjOiAyMjkgKGU1KSAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19TQVQsIDB4MDAsIDB4ZTgpOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19IVUUsIDB4MDAsIDApOwotCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX1VHQUlOLCAweDAwLCAyMzgpOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WR0FJTiwgMHgwMCwgMHgwMCk7Ci0KLQkJCS8qVU9GRjoweDMwLCBWT0ZGOjB4MzAsIFRTVENHTj0xICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX1VWT0ZGSCwgMHgwMCwgMHg0Zik7Ci0JCQlrczAxMjdfYW5kX29yKGMsIEtTX1VWT0ZGTCwgMHgwMCwgMHgwMCk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiREVDT0RFUl9TRVRfSU5QVVQ6IFVua25vd24gaW5wdXQgJWRcbiIsICppYXJnKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogaGFjazogQ0RNTFBGIHNvbWV0aW1lcyBzcG9udGFuZW91c2x5IHN3aXRjaGVzIG9uOyAqLwotCQkvKiBmb3JjZSBiYWNrIG9mZiAqLwotCQlrczAxMjdfd3JpdGUoYywgS1NfREVNT0QsIHJlZ19kZWZhdWx0c1tLU19ERU1PRF0pOworCQlrczAxMjdfd3JpdGUoc2QsIEtTX1VHQUlOLCByZWdfZGVmYXVsdHNbS1NfVUdBSU5dKTsKKwkJa3MwMTI3X3dyaXRlKHNkLCBLU19WR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1ZHQUlOXSk7CisJCWtzMDEyN193cml0ZShzZCwgS1NfVVZPRkZILCByZWdfZGVmYXVsdHNbS1NfVVZPRkZIXSk7CisJCWtzMDEyN193cml0ZShzZCwgS1NfVVZPRkZMLCByZWdfZGVmYXVsdHNbS1NfVVZPRkZMXSk7CiAJCWJyZWFrOwogCi0JY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6Ci0JCXN3aXRjaCgqaWFyZykgewotCQljYXNlIEtTX09VVFBVVF9ZVVY2NTZFOgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiREVDT0RFUl9TRVRfT1VUUFVUOiBPVVRQVVRfWVVWNjU2RSAoTWlzc2luZylcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBLU19JTlBVVF9ZVVY2NTY6CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNfcm91dGluZyAxNTogWVVWNjU2XG4iKTsKKwkJaWYgKGtzLT5ub3JtICYgVjRMMl9TVERfNTI1XzYwKQorCQkJLyogZm9yY2UgNjAgSHogKi8KKwkJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NNREEsICAgMHhmYywgMHgwMyk7CisJCWVsc2UKKwkJCS8qIGZvcmNlIDUwIEh6ICovCisJCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURBLCAgIDB4ZmMsIDB4MDIpOwogCi0JCWNhc2UgS1NfT1VUUFVUX0VYVjoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIkRFQ09ERVJfU0VUX09VVFBVVDogT1VUUFVUX0VYVlxuIik7Ci0JCQlrczAxMjdfYW5kX29yKGMsIEtTX09GTVRBLCAweGYwLCAweDA5KTsKLQkJCWJyZWFrOwotCQl9CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NNREEsICAgMHhmZiwgMHg0MCk7IC8qIFZTRT0xICovCisJCS8qIHNldCBpbnB1dCBsaW5lIGFuZCBWQUxJR04gKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ01EQiwgICAweGIwLCAocm91dGUtPmlucHV0IHwgMHg0MCkpOworCQkvKiBmcmVlcnVubmluZyBtb2RlLCAqLworCQkvKiBUU1RHRU4gPSAxIFRTVEdGUj0xMSBUU1RHUEg9MCBUU1RHUEs9MCAgVk1FTT0xKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ01EQywgICAweDcwLCAweDg3KTsKKwkJLyogZGlnaXRhbCBpbnB1dCwgU1lORElSID0gMCBJTlBTTD0wMSBDTEtESVI9MCBFQVY9MCAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURELCAgIDB4MDMsIDB4MDgpOworCQkvKiBkaXNhYmxlIGNocm9tYSBkZW1vZHVsYXRpb24gKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ1RSQUNLLCAweGNmLCAweDMwKTsKKwkJLyogSFlQSyA9MDEgQ1RSQVAgPSAwIEhZQldSPTAgUEVEPTEgUkdCSD0xIFVOSVQ9MSAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19MVU1BLCAgIDB4MDAsIDB4NzEpOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19WRVJUSUMsIDB4MGYsCisJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX1ZFUlRJQ10mMHhmMCk7CisKKwkJLyogc2NhbGVyIGZ1bGxidywgbHVtYSBjb21iIG9mZiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19WRVJUSUEsIDB4MDgsIDB4ODEpOworCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NIUk9NQiwgMHgwZiwKKwkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfQ0hST01CXSYweGYwKTsKKworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DT04sIDB4MDAsIDB4MDApOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19CUlQsIDB4MDAsIDMyKTsJLyogc3BlYzogMzQgKi8KKwkJCS8qIHNwZWM6IDIyOSAoZTUpICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX1NBVCwgMHgwMCwgMHhlOCk7CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0hVRSwgMHgwMCwgMCk7CisKKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfVUdBSU4sIDB4MDAsIDIzOCk7CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX1ZHQUlOLCAweDAwLCAweDAwKTsKKworCQkvKlVPRkY6MHgzMCwgVk9GRjoweDMwLCBUU1RDR049MSAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19VVk9GRkgsIDB4MDAsIDB4NGYpOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19VVk9GRkwsIDB4MDAsIDB4MDApOwogCQlicmVhazsKIAotCWNhc2UgREVDT0RFUl9TRVRfTk9STTogLyogc2FtIFRoaXMgYmxvY2sgbWl4ZXMgb2xkIGFuZCBuZXcgbm9ybSBuYW1lcy4uLiAqLwotCQkvKiBTZXQgdG8gYXV0b21hdGljIFNFQ0FNL0ZzYyBtb2RlICovCi0JCWtzMDEyN19hbmRfb3IoYywgS1NfREVNT0QsIDB4ZjAsIDB4MDApOwotCi0JCWtzLT5ub3JtID0gKmlhcmc7Ci0JCXN3aXRjaCAoKmlhcmcpIHsKLQkJLyogdGhpcyBpcyB1bnRlc3RlZCAhISAqLwotCQkvKiBJdCBqdXN0IGRldGVjdHMgUEFMX04vTlRTQ19NIChubyBzcGVjaWFsIGZyZXF1ZW5jaWVzKSAqLwotCQkvKiBBbmQgeW91IGhhdmUgdG8gc2V0IHRoZSBzdGFuZGFyZCBhIHNlY29uZCB0aW1lIGFmdGVyd2FyZHMgKi8KLQkJY2FzZSBWSURFT19NT0RFX0FVVE86Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAotCQkJCSJERUNPREVSX1NFVF9OT1JNOiBBVVRPXG4iKTsKLQotCQkJLyogVGhlIGNoaXAgZGV0ZXJtaW5lcyB0aGUgZm9ybWF0ICovCi0JCQkvKiBiYXNlZCBvbiB0aGUgY3VycmVudCBmaWVsZCByYXRlICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7Ci0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7Ci0JCQkvKiBUaGlzIGlzIHdyb25nIGZvciBQQUwgISBBcyBJIHNhaWQsICovCi0JCQkvKiB5b3UgbmVlZCB0byBzZXQgdGhlIHN0YW5kYXJkIG9uY2UgYWdhaW4gISEgKi8KLQkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjQwOwotCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiREVDT0RFUl9TRVRfTk9STTogTlRTQ19NXG4iKTsKLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01BLCAweDlmLCAweDIwKTsKLQkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjQwOwotCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgS1NfU1REX05UU0NfTjoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIktTMDEyN19TRVRfTk9STTogTlRTQ19OIChmaXhtZSlcbiIpOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUEsIDB4OWYsIDB4NDApOwotCQkJa3MtPmZvcm1hdF9oZWlnaHQgPSAyNDA7Ci0JCQlrcy0+Zm9ybWF0X3dpZHRoID0gNzA0OwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIkRFQ09ERVJfU0VUX05PUk06IFBBTF9OXG4iKTsKLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01BLCAweDlmLCAweDIwKTsKLQkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjkwOwotCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgS1NfU1REX1BBTF9NOgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiS1MwMTI3X1NFVF9OT1JNOiBQQUxfTSAoZml4bWUpXG4iKTsKLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01BLCAweDlmLCAweDQwKTsKLQkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjkwOwotCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9TRUNBTToKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIktTMDEyN19TRVRfTk9STTogU0VDQU1cbiIpOwotCQkJa3MtPmZvcm1hdF9oZWlnaHQgPSAyOTA7Ci0JCQlrcy0+Zm9ybWF0X3dpZHRoID0gNzA0OwotCi0JCQkvKiBzZXQgdG8gc2VjYW0gYXV0b2RldGVjdGlvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUEsIDB4ZGYsIDB4MjApOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19ERU1PRCwgMHhmMCwgMHgwMCk7Ci0JCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoSFovMTArMSk7Ci0KLQkJCS8qIGRpZCBpdCBhdXRvZGV0ZWN0PyAqLwotCQkJaWYgKGtzMDEyN19yZWFkKGMsIEtTX0RFTU9EKSAmIDB4NDApCi0JCQkJYnJlYWs7Ci0KLQkJCS8qIGZvcmNlIHRvIHNlY2FtIG1vZGUgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfREVNT0QsIDB4ZjAsIDB4MGYpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIkRFQ09ERVJfU0VUX05PUk06IFVua25vd24gbm9ybSAlZFxuIiwgKmlhcmcpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkiREVDT0RFUl9TRVRfUElDVFVSRTogbm90IHlldCBzdXBwb3J0ZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0JSSUdIVE5FU1M6IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRSAqLwotCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0NPTlRSQVNUOiBNZXJnZSBpbnRvIERFQ09ERVJfU0VUX1BJQ1RVUkUgKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9IVUU6IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRT8gKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9TQVRVUkFUSU9OOiBNZXJnZSBpbnRvIERFQ09ERVJfU0VUX1BJQ1RVUkUgKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9BR0NfTU9ERTogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9BR0M6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfQ0hST01BX01PREU6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfUElYQ0xLX01PREU6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfR0FNTUFfTU9ERTogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9VR0FJTjogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9WR0FJTjogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9JTlZBTFk6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfSU5WQUxVOiAqLwotCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0lOVkFMVjogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9VTlVTRVk6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfVU5VU0VVOiAqLwotCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1VOVVNFVjogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9WU0FMSUdOX01PREU6ICovCi0KLQljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDoKLQl7Ci0JCWludCBlbmFibGU7Ci0KLQkJaWFyZyA9IGFyZzsKLQkJZW5hYmxlID0gKCppYXJnICE9IDApOwotCQlpZiAoZW5hYmxlKSB7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAotCQkJCSJERUNPREVSX0VOQUJMRV9PVVRQVVQgb25cbiIpOwotCQkJLyogQWxsIG91dHB1dCBwaW5zIG9uICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX09GTVRBLCAweGNmLCAweDMwKTsKLQkJCS8qIE9iZXkgdGhlIE9FTiBwaW4gKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0RFTSwgMHg3ZiwgMHgwMCk7Ci0JCX0gZWxzZSB7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAotCQkJCSJERUNPREVSX0VOQUJMRV9PVVRQVVQgb2ZmXG4iKTsKLQkJCS8qIFZpZGVvIG91dHB1dCBwaW5zIG9mZiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19PRk1UQSwgMHhjZiwgMHgwMCk7Ci0JCQkvKiBJZ25vcmUgdGhlIE9FTiBwaW4gKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0RFTSwgMHg3ZiwgMHg4MCk7Ci0JCX0KKwlkZWZhdWx0OgorCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCisJCQkic19yb3V0aW5nOiBVbmtub3duIGlucHV0ICVkXG4iLCByb3V0ZS0+aW5wdXQpOwogCQlicmVhazsKIAl9CiAKLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9PVVRQVVRfTU9ERTogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9XSURUSDogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9IRUlHSFQ6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfSFNDQUxFOiAqLworCS8qIGhhY2s6IENETUxQRiBzb21ldGltZXMgc3BvbnRhbmVvdXNseSBzd2l0Y2hlcyBvbjsgKi8KKwkvKiBmb3JjZSBiYWNrIG9mZiAqLworCWtzMDEyN193cml0ZShzZCwgS1NfREVNT0QsIHJlZ19kZWZhdWx0c1tLU19ERU1PRF0pOworCXJldHVybiAwOworfQogCi0JY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGMsICJERUNPREVSX0dFVF9TVEFUVVNcbiIpOwotCQkqaWFyZyA9IDA7Ci0JCXN0YXR1cyA9IGtzMDEyN19yZWFkKGMsIEtTX1NUQVQpOwotCQlpZiAoIShzdGF0dXMgJiAweDIwKSkJCSAvKiBOT1ZJRCBub3Qgc2V0ICovCi0JCQkqaWFyZyA9ICgqaWFyZyB8IERFQ09ERVJfU1RBVFVTX0dPT0QpOwotCQlpZiAoKHN0YXR1cyAmIDB4MDEpKQkJICAgICAgLyogQ0xPQ0sgc2V0ICovCi0JCQkqaWFyZyA9ICgqaWFyZyB8IERFQ09ERVJfU1RBVFVTX0NPTE9SKTsKLQkJaWYgKChzdGF0dXMgJiAweDA4KSkJCSAgIC8qIFBBTERFVCBzZXQgKi8KLQkJCSppYXJnID0gKCppYXJnIHwgREVDT0RFUl9TVEFUVVNfUEFMKTsKLQkJZWxzZQotCQkJKmlhcmcgPSAoKmlhcmcgfCBERUNPREVSX1NUQVRVU19OVFNDKTsKLQkJYnJlYWs7CitzdGF0aWMgaW50IGtzMDEyN19zX3N0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCit7CisJc3RydWN0IGtzMDEyNyAqa3MgPSB0b19rczAxMjcoc2QpOwogCi0JLyogQ2F0Y2ggYW55IHVua25vd24gY29tbWFuZCAqLwotCWRlZmF1bHQ6Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGMsICJ1bmtub3duOiAweCUwOHhcbiIsIGNtZCk7Ci0JCXJldHVybiAtRUlOVkFMOworCS8qIFNldCB0byBhdXRvbWF0aWMgU0VDQU0vRnNjIG1vZGUgKi8KKwlrczAxMjdfYW5kX29yKHNkLCBLU19ERU1PRCwgMHhmMCwgMHgwMCk7CisKKwlrcy0+bm9ybSA9IHN0ZDsKKwlpZiAoc3RkICYgVjRMMl9TVERfTlRTQykgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCisJCQkic19zdGQ6IE5UU0NfTVxuIik7CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7CisJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUxfTikgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCisJCQkic19zdGQ6IE5UU0NfTiAoZml4bWUpXG4iKTsKKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ0hST01BLCAweDlmLCAweDQwKTsKKwl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTCkgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCisJCQkic19zdGQ6IFBBTF9OXG4iKTsKKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ0hST01BLCAweDlmLCAweDIwKTsKKwl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTF9NKSB7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwKKwkJCSJzX3N0ZDogUEFMX00gKGZpeG1lKVxuIik7CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NIUk9NQSwgMHg5ZiwgMHg0MCk7CisJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9TRUNBTSkgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCisJCQkic19zdGQ6IFNFQ0FNXG4iKTsKKworCQkvKiBzZXQgdG8gc2VjYW0gYXV0b2RldGVjdGlvbiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DSFJPTUEsIDB4ZGYsIDB4MjApOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19ERU1PRCwgMHhmMCwgMHgwMCk7CisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShIWi8xMCsxKTsKKworCQkvKiBkaWQgaXQgYXV0b2RldGVjdD8gKi8KKwkJaWYgKCEoa3MwMTI3X3JlYWQoc2QsIEtTX0RFTU9EKSAmIDB4NDApKQorCQkJLyogZm9yY2UgdG8gc2VjYW0gbW9kZSAqLworCQkJa3MwMTI3X2FuZF9vcihzZCwgS1NfREVNT0QsIDB4ZjAsIDB4MGYpOworCX0gZWxzZSB7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNfc3RkOiBVbmtub3duIG5vcm0gJWxseFxuIiwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXN0ZCk7CiAJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGtzMDEyN19zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQoreworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNfc3RyZWFtKCVkKVxuIiwgZW5hYmxlKTsKKwlpZiAoZW5hYmxlKSB7CisJCS8qIEFsbCBvdXRwdXQgcGlucyBvbiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19PRk1UQSwgMHhjZiwgMHgzMCk7CisJCS8qIE9iZXkgdGhlIE9FTiBwaW4gKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ0RFTSwgMHg3ZiwgMHgwMCk7CisJfSBlbHNlIHsKKwkJLyogVmlkZW8gb3V0cHV0IHBpbnMgb2ZmICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX09GTVRBLCAweGNmLCAweDAwKTsKKwkJLyogSWdub3JlIHRoZSBPRU4gcGluICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NERU0sIDB4N2YsIDB4ODApOworCX0KKwlyZXR1cm4gMDsKK30KIAotLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLSNkZWZpbmUgSTJDX0tTMDEyN19BRERPTiAgIDB4RDgKLSNkZWZpbmUgSTJDX0tTMDEyN19PTkJPQVJEIDB4REEKK3N0YXRpYyBpbnQga3MwMTI3X3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKnBzdGF0dXMsIHY0bDJfc3RkX2lkICpwc3RkKQoreworCWludCBzdGF0ID0gVjRMMl9JTl9TVF9OT19TSUdOQUw7CisJdTggc3RhdHVzOworCXY0bDJfc3RkX2lkIHN0ZCA9IFY0TDJfU1REX0FMTDsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQlJMkNfS1MwMTI3X0FERE9OID4+IDEsCi0JSTJDX0tTMDEyN19PTkJPQVJEID4+IDEsCi0JSTJDX0NMSUVOVF9FTkQKKwlzdGF0dXMgPSBrczAxMjdfcmVhZChzZCwgS1NfU1RBVCk7CisJaWYgKCEoc3RhdHVzICYgMHgyMCkpCQkgLyogTk9WSUQgbm90IHNldCAqLworCQlzdGF0ID0gMDsKKwlpZiAoIShzdGF0dXMgJiAweDAxKSkJCSAgICAgIC8qIENMT0NLIHNldCAqLworCQlzdGF0IHw9IFY0TDJfSU5fU1RfTk9fQ09MT1I7CisJaWYgKChzdGF0dXMgJiAweDA4KSkJCSAgIC8qIFBBTERFVCBzZXQgKi8KKwkJc3RkID0gVjRMMl9TVERfUEFMOworCWVsc2UKKwkJc3RkID0gVjRMMl9TVERfTlRTQzsKKwlpZiAocHN0ZCkKKwkJKnBzdGQgPSBzdGQ7CisJaWYgKHBzdGF0dXMpCisJCSpwc3RhdHVzID0gc3RhdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrczAxMjdfcXVlcnlzdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJxdWVyeXN0ZFxuIik7CisJcmV0dXJuIGtzMDEyN19zdGF0dXMoc2QsIE5VTEwsIHN0ZCk7Cit9CisKK3N0YXRpYyBpbnQga3MwMTI3X2dfaW5wdXRfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqc3RhdHVzKQoreworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImdfaW5wdXRfc3RhdHVzXG4iKTsKKwlyZXR1cm4ga3MwMTI3X3N0YXR1cyhzZCwgc3RhdHVzLCBOVUxMKTsKK30KKworc3RhdGljIGludCBrczAxMjdfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IHRvX2tzMDEyNyhzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBrcy0+aWRlbnQsIDApOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGtzMDEyN19jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0ga3MwMTI3X2dfY2hpcF9pZGVudCwKIH07CiAKLUkyQ19DTElFTlRfSU5TTU9EOworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMga3MwMTI3X3R1bmVyX29wcyA9IHsKKwkuc19zdGQgPSBrczAxMjdfc19zdGQsCit9OwogCi1zdGF0aWMgaW50IGtzMDEyN19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMga3MwMTI3X3ZpZGVvX29wcyA9IHsKKwkuc19yb3V0aW5nID0ga3MwMTI3X3Nfcm91dGluZywKKwkuc19zdHJlYW0gPSBrczAxMjdfc19zdHJlYW0sCisJLnF1ZXJ5c3RkID0ga3MwMTI3X3F1ZXJ5c3RkLAorCS5nX2lucHV0X3N0YXR1cyA9IGtzMDEyN19nX2lucHV0X3N0YXR1cywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGtzMDEyN19vcHMgPSB7CisJLmNvcmUgPSAma3MwMTI3X2NvcmVfb3BzLAorCS50dW5lciA9ICZrczAxMjdfdHVuZXJfb3BzLAorCS52aWRlbyA9ICZrczAxMjdfdmlkZW9fb3BzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCitzdGF0aWMgaW50IGtzMDEyN19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IGtzMDEyNyAqa3M7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAotCXY0bF9pbmZvKGMsICIlcyBjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAotCQljLT5hZGRyID09IChJMkNfS1MwMTI3X0FERE9OID4+IDEpID8gImFkZG9uIiA6ICJvbi1ib2FyZCIsCi0JCWMtPmFkZHIgPDwgMSwgYy0+YWRhcHRlci0+bmFtZSk7CisJdjRsX2luZm8oY2xpZW50LCAiJXMgY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJY2xpZW50LT5hZGRyID09IChJMkNfS1MwMTI3X0FERE9OID4+IDEpID8gImFkZG9uIiA6ICJvbi1ib2FyZCIsCisJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCiAJa3MgPSBremFsbG9jKHNpemVvZigqa3MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoa3MgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpMmNfc2V0X2NsaWVudGRhdGEoYywga3MpOwotCi0Ja3MtPmtzX3R5cGUgPSBLU19UWVBFX1VOS05PV047CisJc2QgPSAma3MtPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZrczAxMjdfb3BzKTsKIAogCS8qIHBvd2VyIHVwICovCiAJaW5pdF9yZWdfZGVmYXVsdHMoKTsKLQlrczAxMjdfd3JpdGUoYywgS1NfQ01EQSwgMHgyYyk7CisJa3MwMTI3X3dyaXRlKHNkLCBLU19DTURBLCAweDJjKTsKIAltZGVsYXkoMTApOwogCiAJLyogcmVzZXQgdGhlIGRldmljZSAqLwotCWtzMDEyN19yZXNldChjKTsKKwlrczAxMjdfaW5pdChzZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQga3MwMTI3X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqYykKK3N0YXRpYyBpbnQga3MwMTI3X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBrczAxMjcgKmtzID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWtzMDEyN193cml0ZShjLCBLU19PRk1UQSwgMHgyMCk7IC8qIHRyaXN0YXRlICovCi0Ja3MwMTI3X3dyaXRlKGMsIEtTX0NNREEsIDB4MmMgfCAweDgwKTsgLyogcG93ZXIgZG93biAqLwotCi0Ja2ZyZWUoa3MpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrczAxMjdfd3JpdGUoc2QsIEtTX09GTVRBLCAweDIwKTsgLyogdHJpc3RhdGUgKi8KKwlrczAxMjdfd3JpdGUoc2QsIEtTX0NNREEsIDB4MmMgfCAweDgwKTsgLyogcG93ZXIgZG93biAqLworCWtmcmVlKHRvX2tzMDEyNyhzZCkpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGtzMDEyN19sZWdhY3lfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCXJldHVybiBhZGFwdGVyLT5pZCA9PSBJMkNfSFdfQl9aUjM2MDY3OwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQga3MwMTI3X2lkW10gPSB7CiAJeyAia3MwMTI3IiwgMCB9LAorCXsgImtzMDEyN2IiLCAwIH0sCisJeyAia3MwMTIycyIsIDAgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywga3MwMTI3X2lkKTsKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gImtzMDEyNyIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0tTMDEyNywKLQkuY29tbWFuZCA9IGtzMDEyN19jb21tYW5kLAogCS5wcm9iZSA9IGtzMDEyN19wcm9iZSwKIAkucmVtb3ZlID0ga3MwMTI3X3JlbW92ZSwKLQkubGVnYWN5X3Byb2JlID0ga3MwMTI3X2xlZ2FjeV9wcm9iZSwKIAkuaWRfdGFibGUgPSBrczAxMjdfaWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmgKaW5kZXggMWVjNTc4OC4uY2I4YWJkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2tzMDEyNy5oCkBAIC0yNCw4ICsyNCw2IEBACiAjaWZuZGVmIEtTMDEyN19ICiAjZGVmaW5lIEtTMDEyN19ICiAKLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotCiAvKiBpbnB1dCBjaGFubmVscyAqLwogI2RlZmluZSBLU19JTlBVVF9DT01QT1NJVEVfMSAgICAwCiAjZGVmaW5lIEtTX0lOUFVUX0NPTVBPU0lURV8yICAgIDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbTUyNzkwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL201Mjc5MC5jCmluZGV4IGRlMzk3ZWYuLjFmMzQwZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbTUyNzkwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tNTI3OTAuYwpAQCAtMTMyLDExICsxMzIsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG01Mjc5MF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgbTUyNzkwX2NvcmVfb3BzID0gewpAQCAtMjEwLDggKzIwNSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJtNTI3OTAiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9NNTI3OTAsCi0JLmNvbW1hbmQgPSBtNTI3OTBfY29tbWFuZCwKIAkucHJvYmUgPSBtNTI3OTBfcHJvYmUsCiAJLnJlbW92ZSA9IG01Mjc5MF9yZW1vdmUsCiAJLmlkX3RhYmxlID0gbTUyNzkwX2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwppbmRleCBiNzZlMzNkLi4yYWQxMWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwpAQCAtMTAxNyw3ICsxMDE3LDYgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCiB7Ci0JbWVtc2V0KGNhcCwgMCwgc2l6ZW9mKCpjYXApKTsKIAlzdHJjcHkoY2FwLT5kcml2ZXIsICJtZXllIik7CiAJc3RyY3B5KGNhcC0+Y2FyZCwgIm1leWUiKTsKIAlzcHJpbnRmKGNhcC0+YnVzX2luZm8sICJQQ0k6JXMiLCBwY2lfbmFtZShtZXllLm1jaGlwX2RldikpOwpAQCAtMTAzNiw4ICsxMDM1LDYgQEAKIAlpZiAoaS0+aW5kZXggIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltZW1zZXQoaSwgMCwgc2l6ZW9mKCppKSk7Ci0JaS0+aW5kZXggPSAwOwogCXN0cmNweShpLT5uYW1lLCAiQ2FtZXJhIik7CiAJaS0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CiAKQEAgLTEyNTksMjIgKzEyNTYsMTMgQEAKIAlpZiAoZi0+aW5kZXggPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAoZi0+aW5kZXggPT0gMCkgewogCQkvKiBzdGFuZGFyZCBZVVYgNDIyIGNhcHR1cmUgKi8KLQkJbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOwotCQlmLT5pbmRleCA9IDA7Ci0JCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJCWYtPmZsYWdzID0gMDsKIAkJc3RyY3B5KGYtPmRlc2NyaXB0aW9uLCAiWVVWNDIyIik7CiAJCWYtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1lVWVY7CiAJfSBlbHNlIHsKIAkJLyogY29tcHJlc3NlZCBNSlBFRyBjYXB0dXJlICovCi0JCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsKLQkJZi0+aW5kZXggPSAxOwotCQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCQlmLT5mbGFncyA9IFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRDsKIAkJc3RyY3B5KGYtPmRlc2NyaXB0aW9uLCAiTUpQRUciKTsKIAkJZi0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTUpQRUc7CkBAIC0xMjg2LDkgKzEyNzQsNiBAQAogc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7Ci0JaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9ZVVlWICYmCiAJICAgIGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX01KUEVHKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzMTksMTIgKzEzMDQsNiBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKLQlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWVtc2V0KCZmLT5mbXQucGl4LCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCkpOwotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0KIAlzd2l0Y2ggKG1leWUubWNoaXBfbW9kZSkgewogCWNhc2UgTUNISVBfSElDX01PREVfQ09OVF9PVVQ6CiAJZGVmYXVsdDoKQEAgLTEzNDEsOCArMTMyMCw2IEBACiAJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBmLT5mbXQucGl4LndpZHRoICogMjsKIAlmLT5mbXQucGl4LnNpemVpbWFnZSA9IGYtPmZtdC5waXguaGVpZ2h0ICoKIAkJCSAgICAgICBmLT5mbXQucGl4LmJ5dGVzcGVybGluZTsKLQlmLT5mbXQucGl4LmNvbG9yc3BhY2UgPSAwOwotCWYtPmZtdC5waXgucHJpdiA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNTAsOSArMTMyNyw2IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewotCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfWVVZViAmJgogCSAgICBmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9NSlBFRykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzk4LDkgKzEzNzIsNiBAQAogewogCWludCBpOwogCi0JaWYgKHJlcS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKHJlcS0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xNDQxLDE1ICsxNDEyLDExIEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCiB7Ci0JaW50IGluZGV4ID0gYnVmLT5pbmRleDsKKwl1bnNpZ25lZCBpbnQgaW5kZXggPSBidWYtPmluZGV4OwogCi0JaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBnYnVmZmVycykKKwlpZiAoaW5kZXggPj0gZ2J1ZmZlcnMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKCpidWYpKTsKLQotCWJ1Zi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQlidWYtPmluZGV4ID0gaW5kZXg7CiAJYnVmLT5ieXRlc3VzZWQgPSBtZXllLmdyYWJfYnVmZmVyW2luZGV4XS5zaXplOwogCWJ1Zi0+ZmxhZ3MgPSBWNEwyX0JVRl9GTEFHX01BUFBFRDsKIApAQCAtMTQ3MSwxMyArMTQzOCwxMCBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCiB7Ci0JaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKGJ1Zi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGJ1Zi0+aW5kZXggPCAwIHx8IGJ1Zi0+aW5kZXggPj0gZ2J1ZmZlcnMpCisJaWYgKGJ1Zi0+aW5kZXggPj0gZ2J1ZmZlcnMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKG1leWUuZ3JhYl9idWZmZXJbYnVmLT5pbmRleF0uc3RhdGUgIT0gTUVZRV9CVUZfVU5VU0VEKQpAQCAtMTQ5Nyw5ICsxNDYxLDYgQEAKIHsKIAlpbnQgcmVxbnI7CiAKLQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAoYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYwppbmRleCA0ZDdhOTE4Li45ZThlMDZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jCkBAIC0zNjYsMjkgKzM2Niw2IEBACiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2lmZGVmIENPTkZJR19WSURFT19BTExPV19WNEwxCi1zdGF0aWMgaW50IG1zcF9tb2RlX3Y0bDJfdG9fdjRsMShpbnQgcnhzdWJjaGFucywgaW50IGF1ZG1vZGUpCi17Ci0JaWYgKHJ4c3ViY2hhbnMgPT0gVjRMMl9UVU5FUl9TVUJfTU9OTykKLQkJcmV0dXJuIFZJREVPX1NPVU5EX01PTk87Ci0JaWYgKHJ4c3ViY2hhbnMgPT0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPKQotCQlyZXR1cm4gVklERU9fU09VTkRfU1RFUkVPOwotCWlmIChhdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9MQU5HMikKLQkJcmV0dXJuIFZJREVPX1NPVU5EX0xBTkcyOwotCXJldHVybiBWSURFT19TT1VORF9MQU5HMTsKLX0KLQotc3RhdGljIGludCBtc3BfbW9kZV92NGwxX3RvX3Y0bDIoaW50IG1vZGUpCi17Ci0JaWYgKG1vZGUgJiBWSURFT19TT1VORF9TVEVSRU8pCi0JCXJldHVybiBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCWlmIChtb2RlICYgVklERU9fU09VTkRfTEFORzIpCi0JCXJldHVybiBWNEwyX1RVTkVSX01PREVfTEFORzI7Ci0JaWYgKG1vZGUgJiBWSURFT19TT1VORF9MQU5HMSkKLQkJcmV0dXJuIFY0TDJfVFVORVJfTU9ERV9MQU5HMTsKLQlyZXR1cm4gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci19Ci0jZW5kaWYKIAogc3RhdGljIGludCBtc3BfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CkBAIC00ODIsOTYgKzQ1OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfVklERU9fQUxMT1dfVjRMMQotc3RhdGljIGxvbmcgbXNwX2lvY3RsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCS8qIC0tLSB2NGwgaW9jdGxzIC0tLSAqLwotCS8qIHRha2UgY2FyZTogYnR0diBkb2VzIHVzZXJzcGFjZSBjb3B5aW5nLCB3ZSdsbCBnZXQgYQotCSAgIGtlcm5lbCBwb2ludGVyIGhlcmUuLi4gKi8KLQljYXNlIFZJRElPQ0dBVURJTzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19hdWRpbyAqdmEgPSBhcmc7Ci0KLQkJdmEtPmZsYWdzIHw9IFZJREVPX0FVRElPX1ZPTFVNRSB8IFZJREVPX0FVRElPX01VVEFCTEU7Ci0JCWlmIChzdGF0ZS0+aGFzX3NvdW5kX3Byb2Nlc3NpbmcpCi0JCQl2YS0+ZmxhZ3MgfD0gVklERU9fQVVESU9fQkFMQU5DRSB8Ci0JCQkJVklERU9fQVVESU9fQkFTUyB8Ci0JCQkJVklERU9fQVVESU9fVFJFQkxFOwotCQlpZiAoc3RhdGUtPm11dGVkKQotCQkJdmEtPmZsYWdzIHw9IFZJREVPX0FVRElPX01VVEU7Ci0JCXZhLT52b2x1bWUgPSBzdGF0ZS0+dm9sdW1lOwotCQl2YS0+YmFsYW5jZSA9IHN0YXRlLT52b2x1bWUgPyBzdGF0ZS0+YmFsYW5jZSA6IDMyNzY4OwotCQl2YS0+YmFzcyA9IHN0YXRlLT5iYXNzOwotCQl2YS0+dHJlYmxlID0gc3RhdGUtPnRyZWJsZTsKLQotCQlpZiAoc3RhdGUtPnJhZGlvKQotCQkJYnJlYWs7Ci0JCWlmIChzdGF0ZS0+b3Btb2RlID09IE9QTU9ERV9BVVRPU0VMRUNUKQotCQkJbXNwX2RldGVjdF9zdGVyZW8oY2xpZW50KTsKLQkJdmEtPm1vZGUgPSBtc3BfbW9kZV92NGwyX3RvX3Y0bDEoc3RhdGUtPnJ4c3ViY2hhbnMsIHN0YXRlLT5hdWRtb2RlKTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBWSURJT0NTQVVESU86Ci0JewotCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnZhID0gYXJnOwotCi0JCXN0YXRlLT5tdXRlZCA9ICh2YS0+ZmxhZ3MgJiBWSURFT19BVURJT19NVVRFKTsKLQkJc3RhdGUtPnZvbHVtZSA9IHZhLT52b2x1bWU7Ci0JCXN0YXRlLT5iYWxhbmNlID0gdmEtPmJhbGFuY2U7Ci0JCXN0YXRlLT5iYXNzID0gdmEtPmJhc3M7Ci0JCXN0YXRlLT50cmVibGUgPSB2YS0+dHJlYmxlOwotCQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7Ci0KLQkJaWYgKHZhLT5tb2RlICE9IDAgJiYgc3RhdGUtPnJhZGlvID09IDAgJiYKLQkJICAgIHN0YXRlLT5hdWRtb2RlICE9IG1zcF9tb2RlX3Y0bDFfdG9fdjRsMih2YS0+bW9kZSkpIHsKLQkJCXN0YXRlLT5hdWRtb2RlID0gbXNwX21vZGVfdjRsMV90b192NGwyKHZhLT5tb2RlKTsKLQkJCW1zcF9zZXRfYXVkbW9kZShjbGllbnQpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DU0NIQU46Ci0JewotCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdmMgPSBhcmc7Ci0JCWludCB1cGRhdGUgPSAwOwotCQl2NGwyX3N0ZF9pZCBzdGQ7Ci0KLQkJaWYgKHN0YXRlLT5yYWRpbykKLQkJCXVwZGF0ZSA9IDE7Ci0JCXN0YXRlLT5yYWRpbyA9IDA7Ci0JCWlmICh2Yy0+bm9ybSA9PSBWSURFT19NT0RFX1BBTCkKLQkJCXN0ZCA9IFY0TDJfU1REX1BBTDsKLQkJZWxzZSBpZiAodmMtPm5vcm0gPT0gVklERU9fTU9ERV9TRUNBTSkKLQkJCXN0ZCA9IFY0TDJfU1REX1NFQ0FNOwotCQllbHNlCi0JCQlzdGQgPSBWNEwyX1NURF9OVFNDOwotCQlpZiAoc3RkICE9IHN0YXRlLT52NGwyX3N0ZCkgewotCQkJc3RhdGUtPnY0bDJfc3RkID0gc3RkOwotCQkJdXBkYXRlID0gMTsKLQkJfQotCQlpZiAodXBkYXRlKQotCQkJbXNwX3dha2VfdGhyZWFkKGNsaWVudCk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DU0ZSRVE6Ci0JewotCQkvKiBuZXcgY2hhbm5lbCAtLSBraWNrIGF1ZGlvIGNhcnJpZXIgc2NhbiAqLwotCQltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKLQkJYnJlYWs7Ci0JfQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KIC8qIC0tLSB2NGwyIGlvY3RscyAtLS0gKi8KIHN0YXRpYyBpbnQgbXNwX3NfcmFkaW8oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKQEAgLTcxMywyMiArNjAwLDI0IEBACiAJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAKIAlzd2l0Y2ggKHFjLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxYyk7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDU4ODgwKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMCk7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCWlmICghc3RhdGUtPmhhc19zb3VuZF9wcm9jZXNzaW5nKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlzd2l0Y2ggKHFjLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjKTsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOworCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMCk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgorCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDMyNzY4KTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC04MjAsOSArNzA5LDYgQEAKIAkuZ19jdHJsID0gbXNwX2dfY3RybCwKIAkuc19jdHJsID0gbXNwX3NfY3RybCwKIAkucXVlcnljdHJsID0gbXNwX3F1ZXJ5Y3RybCwKLSNpZmRlZiBDT05GSUdfVklERU9fQUxMT1dfVjRMMQotCS5pb2N0bCA9IG1zcF9pb2N0bCwKLSNlbmRpZgogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgbXNwX3R1bmVyX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMDAxLmMKaW5kZXggYzFiZjc1ZS4uZmE3ZTUwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMDAxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMDAxLmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CkBAIC03Myw5ICs3Miw3IEBACiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgaWNkOwogCWludCBtb2RlbDsJLyogVjRMMl9JREVOVF9NVDlNMDAxKiBjb2RlcyBmcm9tIHY0bDItY2hpcC1pZGVudC5oICovCi0JaW50IHN3aXRjaF9ncGlvOwogCXVuc2lnbmVkIGNoYXIgYXV0b2V4cG9zdXJlOwotCXVuc2lnbmVkIGNoYXIgZGF0YXdpZHRoOwogfTsKIAogc3RhdGljIGludCByZWdfcmVhZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgY29uc3QgdTggcmVnKQpAQCAtMTgxLDkyICsxNzgsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidXNfc3dpdGNoX3JlcXVlc3Qoc3RydWN0IG10OW0wMDEgKm10OW0wMDEsCi0JCQkgICAgICBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wpCi17Ci0jaWZkZWYgQ09ORklHX01UOU0wMDFfUENBOTUzNl9TV0lUQ0gKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGludCBncGlvID0gaWNsLT5ncGlvOwotCi0JaWYgKGdwaW9faXNfdmFsaWQoZ3BpbykpIHsKLQkJLyogV2UgaGF2ZSBhIGRhdGEgYnVzIHN3aXRjaC4gKi8KLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW8sICJtdDltMDAxIik7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKCZtdDltMDAxLT5jbGllbnQtPmRldiwgIkNhbm5vdCBnZXQgR1BJTyAldVxuIiwKLQkJCQlncGlvKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgMCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKCZtdDltMDAxLT5jbGllbnQtPmRldiwKLQkJCQkiQ2Fubm90IHNldCBHUElPICV1IHRvIG91dHB1dFxuIiwgZ3Bpbyk7Ci0JCQlncGlvX2ZyZWUoZ3Bpbyk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JbXQ5bTAwMS0+c3dpdGNoX2dwaW8gPSBncGlvOwotI2Vsc2UKLQltdDltMDAxLT5zd2l0Y2hfZ3BpbyA9IC1FSU5WQUw7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYnVzX3N3aXRjaF9yZWxlYXNlKHN0cnVjdCBtdDltMDAxICptdDltMDAxKQotewotI2lmZGVmIENPTkZJR19NVDlNMDAxX1BDQTk1MzZfU1dJVENICi0JaWYgKGdwaW9faXNfdmFsaWQobXQ5bTAwMS0+c3dpdGNoX2dwaW8pKQotCQlncGlvX2ZyZWUobXQ5bTAwMS0+c3dpdGNoX2dwaW8pOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQgYnVzX3N3aXRjaF9hY3Qoc3RydWN0IG10OW0wMDEgKm10OW0wMDEsIGludCBnbzhiaXQpCi17Ci0jaWZkZWYgQ09ORklHX01UOU0wMDFfUENBOTUzNl9TV0lUQ0gKLQlpZiAoIWdwaW9faXNfdmFsaWQobXQ5bTAwMS0+c3dpdGNoX2dwaW8pKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKG10OW0wMDEtPnN3aXRjaF9ncGlvLCBnbzhiaXQpOwotCXJldHVybiAwOwotI2Vsc2UKLQlyZXR1cm4gLUVOT0RFVjsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW50IGJ1c19zd2l0Y2hfcG9zc2libGUoc3RydWN0IG10OW0wMDEgKm10OW0wMDEpCi17Ci0jaWZkZWYgQ09ORklHX01UOU0wMDFfUENBOTUzNl9TV0lUQ0gKLQlyZXR1cm4gZ3Bpb19pc192YWxpZChtdDltMDAxLT5zd2l0Y2hfZ3Bpbyk7Ci0jZWxzZQotCXJldHVybiAwOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBpbnQgbXQ5bTAwMV9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0wMDEsIGljZCk7Ci0JdW5zaWduZWQgaW50IHdpZHRoX2ZsYWcgPSBmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF9NQVNLOwotCWludCByZXQ7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5bTAwMS0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl1bnNpZ25lZCBsb25nIHdpZHRoX2ZsYWcgPSBmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF9NQVNLOwogCi0JLyogRmxhZ3MgdmFsaWRpdHkgdmVyaWZpZWQgaW4gdGVzdF9idXNfcGFyYW0gKi8KKwkvKiBPbmx5IG9uZSB3aWR0aCBiaXQgbWF5IGJlIHNldCAqLworCWlmICghaXNfcG93ZXJfb2ZfMih3aWR0aF9mbGFnKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoKG10OW0wMDEtPmRhdGF3aWR0aCAhPSAxMCAmJiAod2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfMTApKSB8fAotCSAgICAobXQ5bTAwMS0+ZGF0YXdpZHRoICE9IDkgICYmICh3aWR0aF9mbGFnID09IFNPQ0FNX0RBVEFXSURUSF85KSkgfHwKLQkgICAgKG10OW0wMDEtPmRhdGF3aWR0aCAhPSA4ICAmJiAod2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfOCkpKSB7Ci0JCS8qIFdlbGwsIHdlIGFjdHVhbGx5IG9ubHkgY2FuIGRvIDEwIG9yIDggYml0cy4uLiAqLwotCQlpZiAod2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfOSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXQgPSBidXNfc3dpdGNoX2FjdChtdDltMDAxLAotCQkJCSAgICAgd2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfOCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKKwlpZiAoaWNsLT5zZXRfYnVzX3BhcmFtKQorCQlyZXR1cm4gaWNsLT5zZXRfYnVzX3BhcmFtKGljbCwgd2lkdGhfZmxhZyk7CiAKLQkJbXQ5bTAwMS0+ZGF0YXdpZHRoID0gd2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfOCA/IDggOiAxMDsKLQl9CisJLyoKKwkgKiBXaXRob3V0IGJvYXJkIHNwZWNpZmljIGJ1cyB3aWR0aCBzZXR0aW5ncyB3ZSBvbmx5IHN1cHBvcnQgdGhlCisJICogc2Vuc29ycyBuYXRpdmUgYnVzIHdpZHRoCisJICovCisJaWYgKHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzEwKQorCQlyZXR1cm4gMDsKIAotCXJldHVybiAwOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtdDltMDAxX3F1ZXJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKQEAgLTI3NCwxOCArMjA3LDIwIEBACiAJc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTAwMSwgaWNkKTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDltMDAxLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCS8qIE1UOU0wMDEgaGFzIGFsbCBjYXB0dXJlX2Zvcm1hdCBwYXJhbWV0ZXJzIGZpeGVkICovCi0JdW5zaWduZWQgbG9uZyBmbGFncyA9IFNPQ0FNX0RBVEFXSURUSF8xMCB8IFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8CiAJCVNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfAotCQlTT0NBTV9NQVNURVI7CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfCBTT0NBTV9NQVNURVI7CiAKLQlpZiAoYnVzX3N3aXRjaF9wb3NzaWJsZShtdDltMDAxKSkKLQkJZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzg7CisJaWYgKGljbC0+cXVlcnlfYnVzX3BhcmFtKQorCQlmbGFncyB8PSBpY2wtPnF1ZXJ5X2J1c19wYXJhbShpY2wpICYgU09DQU1fREFUQVdJRFRIX01BU0s7CisJZWxzZQorCQlmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfMTA7CiAKIAlyZXR1cm4gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTAwMV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgX191MzIgcGl4Zm10LCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorc3RhdGljIGludCBtdDltMDAxX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCiB7CiAJc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTAwMSwgaWNkKTsKIAlpbnQgcmV0OwpAQCAtMzI0LDYgKzI1OSwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgbXQ5bTAwMV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCB2NGwyX3JlY3QgcmVjdCA9IHsKKwkJLmxlZnQJPSBpY2QtPnhfY3VycmVudCwKKwkJLnRvcAk9IGljZC0+eV9jdXJyZW50LAorCQkud2lkdGgJPSBmLT5mbXQucGl4LndpZHRoLAorCQkuaGVpZ2h0CT0gZi0+Zm10LnBpeC5oZWlnaHQsCisJfTsKKworCS8qIE5vIHN1cHBvcnQgZm9yIHNjYWxpbmcgc28gZmFyLCBqdXN0IGNyb3AuIFRPRE86IHVzZSBza2lwcGluZyAqLworCXJldHVybiBtdDltMDAxX3NldF9jcm9wKGljZCwgJnJlY3QpOworfQorCiBzdGF0aWMgaW50IG10OW0wMDFfdHJ5X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKQEAgLTQ0OSw2ICszOTgsNyBAQAogCS5yZWxlYXNlCQk9IG10OW0wMDFfcmVsZWFzZSwKIAkuc3RhcnRfY2FwdHVyZQkJPSBtdDltMDAxX3N0YXJ0X2NhcHR1cmUsCiAJLnN0b3BfY2FwdHVyZQkJPSBtdDltMDAxX3N0b3BfY2FwdHVyZSwKKwkuc2V0X2Nyb3AJCT0gbXQ5bTAwMV9zZXRfY3JvcCwKIAkuc2V0X2ZtdAkJPSBtdDltMDAxX3NldF9mbXQsCiAJLnRyeV9mbXQJCT0gbXQ5bTAwMV90cnlfZm10LAogCS5zZXRfYnVzX3BhcmFtCQk9IG10OW0wMDFfc2V0X2J1c19wYXJhbSwKQEAgLTU4Myw2ICs1MzMsNyBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IG10OW0wMDEtPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJczMyIGRhdGE7CiAJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogV2UgbXVzdCBoYXZlIGEgcGFyZW50IGJ5IG5vdy4gQW5kIGl0IGNhbm5vdCBiZSBhIHdyb25nIG9uZS4KIAkgKiBTbyB0aGlzIGVudGlyZSB0ZXN0IGlzIGNvbXBsZXRlbHkgcmVkdW5kYW50LiAqLwpAQCAtNjAzLDE4ICs1NTQsMTAgQEAKIAljYXNlIDB4ODQyMToKIAkJbXQ5bTAwMS0+bW9kZWwgPSBWNEwyX0lERU5UX01UOU0wMDFDMTJTVDsKIAkJaWNkLT5mb3JtYXRzID0gbXQ5bTAwMV9jb2xvdXJfZm9ybWF0czsKLQkJaWYgKGdwaW9faXNfdmFsaWQoaWNsLT5ncGlvKSkKLQkJCWljZC0+bnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKG10OW0wMDFfY29sb3VyX2Zvcm1hdHMpOwotCQllbHNlCi0JCQlpY2QtPm51bV9mb3JtYXRzID0gMTsKIAkJYnJlYWs7CiAJY2FzZSAweDg0MzE6CiAJCW10OW0wMDEtPm1vZGVsID0gVjRMMl9JREVOVF9NVDlNMDAxQzEyU1RNOwogCQlpY2QtPmZvcm1hdHMgPSBtdDltMDAxX21vbm9jaHJvbWVfZm9ybWF0czsKLQkJaWYgKGdwaW9faXNfdmFsaWQoaWNsLT5ncGlvKSkKLQkJCWljZC0+bnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKG10OW0wMDFfbW9ub2Nocm9tZV9mb3JtYXRzKTsKLQkJZWxzZQotCQkJaWNkLT5udW1fZm9ybWF0cyA9IDE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FTk9ERVY7CkBAIC02MjMsNiArNTY2LDI2IEBACiAJCWdvdG8gZWkyYzsKIAl9CiAKKwlpY2QtPm51bV9mb3JtYXRzID0gMDsKKworCS8qCisJICogVGhpcyBpcyBhIDEwYml0IHNlbnNvciwgc28gYnkgZGVmYXVsdCB3ZSBvbmx5IGFsbG93IDEwYml0LgorCSAqIFRoZSBwbGF0Zm9ybSBtYXkgc3VwcG9ydCBkaWZmZXJlbnQgYnVzIHdpZHRocyBkdWUgdG8KKwkgKiBkaWZmZXJlbnQgcm91dGluZyBvZiB0aGUgZGF0YSBsaW5lcy4KKwkgKi8KKwlpZiAoaWNsLT5xdWVyeV9idXNfcGFyYW0pCisJCWZsYWdzID0gaWNsLT5xdWVyeV9idXNfcGFyYW0oaWNsKTsKKwllbHNlCisJCWZsYWdzID0gU09DQU1fREFUQVdJRFRIXzEwOworCisJaWYgKGZsYWdzICYgU09DQU1fREFUQVdJRFRIXzEwKQorCQlpY2QtPm51bV9mb3JtYXRzKys7CisJZWxzZQorCQlpY2QtPmZvcm1hdHMrKzsKKworCWlmIChmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF84KQorCQlpY2QtPm51bV9mb3JtYXRzKys7CisKIAlkZXZfaW5mbygmaWNkLT5kZXYsICJEZXRlY3RlZCBhIE1UOU0wMDEgY2hpcCBJRCAleCAoJXMpXG4iLCBkYXRhLAogCQkgZGF0YSA9PSAweDg0MzEgPyAiQzEyU1RNIiA6ICJDMTJTVCIpOwogCkBAIC02ODgsMTggKzY1MSwxMCBAQAogCWljZC0+aGVpZ2h0X21heAk9IDEwMjQ7CiAJaWNkLT55X3NraXBfdG9wCT0gMTsKIAlpY2QtPmlmYWNlCT0gaWNsLT5idXNfaWQ7Ci0JLyogRGVmYXVsdCBkYXRhd2lkdGggLSB0aGlzIGlzIHRoZSBvbmx5IHdpZHRoIHRoaXMgY2FtZXJhIChub3JtYWxseSkKLQkgKiBzdXBwb3J0cy4gSXQgaXMgb25seSB3aXRoIGV4dHJhIGxvZ2ljIHRoYXQgaXQgY2FuIHN1cHBvcnQKLQkgKiBvdGhlciB3aWR0aHMuIFRoZXJlZm9yZSBpdCBzZWVtcyB0byBiZSBhIHNlbnNpYmxlIGRlZmF1bHQuICovCi0JbXQ5bTAwMS0+ZGF0YXdpZHRoID0gMTA7CiAJLyogU2ltdWxhdGVkIGF1dG9leHBvc3VyZS4gSWYgZW5hYmxlZCwgd2UgY2FsY3VsYXRlIHNodXR0ZXIgd2lkdGgKIAkgKiBvdXJzZWx2ZXMgaW4gdGhlIGRyaXZlciBiYXNlZCBvbiB2ZXJ0aWNhbCBibGFua2luZyBhbmQgZnJhbWUgd2lkdGggKi8KIAltdDltMDAxLT5hdXRvZXhwb3N1cmUgPSAxOwogCi0JcmV0ID0gYnVzX3N3aXRjaF9yZXF1ZXN0KG10OW0wMDEsIGljbCk7Ci0JaWYgKHJldCkKLQkJZ290byBlc3dpbml0OwotCiAJcmV0ID0gc29jX2NhbWVyYV9kZXZpY2VfcmVnaXN0ZXIoaWNkKTsKIAlpZiAocmV0KQogCQlnb3RvIGVpc2RyOwpAQCAtNzA3LDggKzY2Miw2IEBACiAJcmV0dXJuIDA7CiAKIGVpc2RyOgotCWJ1c19zd2l0Y2hfcmVsZWFzZShtdDltMDAxKTsKLWVzd2luaXQ6CiAJa2ZyZWUobXQ5bTAwMSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTcxOCw3ICs2NzEsNiBAQAogCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlzb2NfY2FtZXJhX2RldmljZV91bnJlZ2lzdGVyKCZtdDltMDAxLT5pY2QpOwotCWJ1c19zd2l0Y2hfcmVsZWFzZShtdDltMDAxKTsKIAlrZnJlZShtdDltMDAxKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMTExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYwppbmRleCA1YjhlMjA5Li5jZGQxZGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlIGljZDsKIAlpbnQgbW9kZWw7CS8qIFY0TDJfSURFTlRfTVQ5TTExeCogY29kZXMgZnJvbSB2NGwyLWNoaXAtaWRlbnQuaCAqLwogCWVudW0gbXQ5bTExMV9jb250ZXh0IGNvbnRleHQ7Ci0JdW5zaWduZWQgaW50IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodDsKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3Q7CiAJdTMyIHBpeGZtdDsKIAl1bnNpZ25lZCBjaGFyIGF1dG9leHBvc3VyZTsKIAl1bnNpZ25lZCBjaGFyIGRhdGF3aWR0aDsKQEAgLTI0OSwxMiArMjQ5LDEzIEBACiAJCXJldHVybiByZWdfd3JpdGUoQ09OVEVYVF9DT05UUk9MLCB2YWxBKTsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3NldHVwX3JlY3Qoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG10OW0xMTFfc2V0dXBfcmVjdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCiB7CiAJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKIAlpbnQgcmV0LCBpc19yYXdfZm9ybWF0OwotCWludCB3aWR0aCA9IG10OW0xMTEtPndpZHRoOwotCWludCBoZWlnaHQgPSBtdDltMTExLT5oZWlnaHQ7CisJaW50IHdpZHRoID0gcmVjdC0+d2lkdGg7CisJaW50IGhlaWdodCA9IHJlY3QtPmhlaWdodDsKIAogCWlmICgobXQ5bTExMS0+cGl4Zm10ID09IFY0TDJfUElYX0ZNVF9TQkdHUjgpCiAJICAgIHx8IChtdDltMTExLT5waXhmbXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSMTYpKQpAQCAtMjYyLDkgKzI2Myw5IEBACiAJZWxzZQogCQlpc19yYXdfZm9ybWF0ID0gMDsKIAotCXJldCA9IHJlZ193cml0ZShDT0xVTU5fU1RBUlQsIG10OW0xMTEtPmxlZnQpOworCXJldCA9IHJlZ193cml0ZShDT0xVTU5fU1RBUlQsIHJlY3QtPmxlZnQpOwogCWlmICghcmV0KQotCQlyZXQgPSByZWdfd3JpdGUoUk9XX1NUQVJULCBtdDltMTExLT50b3ApOworCQlyZXQgPSByZWdfd3JpdGUoUk9XX1NUQVJULCByZWN0LT50b3ApOwogCiAJaWYgKGlzX3Jhd19mb3JtYXQpIHsKIAkJaWYgKCFyZXQpCkBAIC0zOTMsNiArMzk0LDggQEAKIAogc3RhdGljIGludCBtdDltMTExX3Jlc2V0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogeworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5bTExMS0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gcmVnX3NldChSRVNFVCwgTVQ5TTExMV9SRVNFVF9SRVNFVF9NT0RFKTsKQEAgLTQwMSw2ICs0MDQsMTAgQEAKIAlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX2NsZWFyKFJFU0VULCBNVDlNMTExX1JFU0VUX1JFU0VUX01PREUKIAkJCQl8IE1UOU0xMTFfUkVTRVRfUkVTRVRfU09DKTsKKworCWlmIChpY2wtPnJlc2V0KQorCQlpY2wtPnJlc2V0KCZtdDltMTExLT5jbGllbnQtPmRldik7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC00MjAsNyArNDI3LDcgQEAKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDltMTExLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBTT0NBTV9NQVNURVIgfCBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfAogCQlTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwKLQkJU09DQU1fREFUQVdJRFRIXzg7CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfCBTT0NBTV9EQVRBV0lEVEhfODsKIAogCXJldHVybiBzb2NfY2FtZXJhX2FwcGx5X3NlbnNvcl9mbGFncyhpY2wsIGZsYWdzKTsKIH0KQEAgLTQzMCw2ICs0MzcsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtdDltMTExX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlpbnQgcmV0OworCisJZGV2X2RiZygmaWNkLT5kZXYsICIlcyBsZWZ0PSVkLCB0b3A9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWRcbiIsCisJCV9fZnVuY19fLCByZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPndpZHRoLAorCQlyZWN0LT5oZWlnaHQpOworCisJcmV0ID0gbXQ5bTExMV9zZXR1cF9yZWN0KGljZCwgcmVjdCk7CisJaWYgKCFyZXQpCisJCW10OW0xMTEtPnJlY3QgPSAqcmVjdDsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IG10OW0xMTFfc2V0X3BpeGZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgdTMyIHBpeGZtdCkKIHsKIAlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOwpAQCAtNDgwLDIzICs1MDMsMjcgQEAKIH0KIAogc3RhdGljIGludCBtdDltMTExX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICBfX3UzMiBwaXhmbXQsIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCisJCQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSB7CisJCS5sZWZ0CT0gbXQ5bTExMS0+cmVjdC5sZWZ0LAorCQkudG9wCT0gbXQ5bTExMS0+cmVjdC50b3AsCisJCS53aWR0aAk9IHBpeC0+d2lkdGgsCisJCS5oZWlnaHQJPSBwaXgtPmhlaWdodCwKKwl9OwogCWludCByZXQ7CiAKLQltdDltMTExLT5sZWZ0ID0gcmVjdC0+bGVmdDsKLQltdDltMTExLT50b3AgPSByZWN0LT50b3A7Ci0JbXQ5bTExMS0+d2lkdGggPSByZWN0LT53aWR0aDsKLQltdDltMTExLT5oZWlnaHQgPSByZWN0LT5oZWlnaHQ7Ci0KIAlkZXZfZGJnKCZpY2QtPmRldiwgIiVzIGZtdD0leCBsZWZ0PSVkLCB0b3A9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWRcbiIsCi0JCV9fZnVuY19fLCBwaXhmbXQsIG10OW0xMTEtPmxlZnQsIG10OW0xMTEtPnRvcCwgbXQ5bTExMS0+d2lkdGgsCi0JCW10OW0xMTEtPmhlaWdodCk7CisJCV9fZnVuY19fLCBwaXgtPnBpeGVsZm9ybWF0LCByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LndpZHRoLAorCQlyZWN0LmhlaWdodCk7CiAKLQlyZXQgPSBtdDltMTExX3NldHVwX3JlY3QoaWNkKTsKKwlyZXQgPSBtdDltMTExX3NldHVwX3JlY3QoaWNkLCAmcmVjdCk7CiAJaWYgKCFyZXQpCi0JCXJldCA9IG10OW0xMTFfc2V0X3BpeGZtdChpY2QsIHBpeGZtdCk7CisJCXJldCA9IG10OW0xMTFfc2V0X3BpeGZtdChpY2QsIHBpeC0+cGl4ZWxmb3JtYXQpOworCWlmICghcmV0KQorCQltdDltMTExLT5yZWN0ID0gcmVjdDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MjcsNiArNjU0LDcgQEAKIAkucmVsZWFzZQkJPSBtdDltMTExX3JlbGVhc2UsCiAJLnN0YXJ0X2NhcHR1cmUJCT0gbXQ5bTExMV9zdGFydF9jYXB0dXJlLAogCS5zdG9wX2NhcHR1cmUJCT0gbXQ5bTExMV9zdG9wX2NhcHR1cmUsCisJLnNldF9jcm9wCQk9IG10OW0xMTFfc2V0X2Nyb3AsCiAJLnNldF9mbXQJCT0gbXQ5bTExMV9zZXRfZm10LAogCS50cnlfZm10CQk9IG10OW0xMTFfdHJ5X2ZtdCwKIAkucXVlcnlfYnVzX3BhcmFtCT0gbXQ5bTExMV9xdWVyeV9idXNfcGFyYW0sCkBAIC04MTEsNyArODM5LDcgQEAKIAogCW10OW0xMTFfc2V0X2NvbnRleHQoaWNkLCBtdDltMTExLT5jb250ZXh0KTsKIAltdDltMTExX3NldF9waXhmbXQoaWNkLCBtdDltMTExLT5waXhmbXQpOwotCW10OW0xMTFfc2V0dXBfcmVjdChpY2QpOworCW10OW0xMTFfc2V0dXBfcmVjdChpY2QsICZtdDltMTExLT5yZWN0KTsKIAltdDltMTExX3NldF9mbGlwKGljZCwgbXQ5bTExMS0+aGZsaXAsIE1UOU0xMTFfUk1CX01JUlJPUl9DT0xTKTsKIAltdDltMTExX3NldF9mbGlwKGljZCwgbXQ5bTExMS0+dmZsaXAsIE1UOU0xMTFfUk1CX01JUlJPUl9ST1dTKTsKIAltdDltMTExX3NldF9nbG9iYWxfZ2FpbihpY2QsIGljZC0+Z2Fpbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXQwMzEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDAzMS5jCmluZGV4IDM0OWQ4ZTMuLjIzZjljZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDAzMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDAzMS5jCkBAIC0xNDQsMTMgKzE0NCwxMSBAQAogCWludCByZXQ7CiAKIAkvKiBEaXNhYmxlIGNoaXAgb3V0cHV0LCBzeW5jaHJvbm91cyBvcHRpb24gdXBkYXRlICovCi0JZGV2X2RiZyhpY2QtPnZkZXYtPnBhcmVudCwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KIAlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlUMDMxX1JFU0VULCAxKTsKIAlpZiAocmV0ID49IDApCiAJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfUkVTRVQsIDApOwogCWlmIChyZXQgPj0gMCkKLQkJcmV0ID0gcmVnX2NsZWFyKGljZCwgTVQ5VDAzMV9PVVRQVVRfQ09OVFJPTCwgMyk7CisJCXJldCA9IHJlZ19jbGVhcihpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDIpOwogCiAJcmV0dXJuIHJldCA+PSAwID8gMCA6IC1FSU87CiB9CkBAIC0xNTgsMTQgKzE1NiwxNCBAQAogc3RhdGljIGludCBtdDl0MDMxX3JlbGVhc2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJLyogRGlzYWJsZSB0aGUgY2hpcCAqLwotCXJlZ19jbGVhcihpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDMpOworCXJlZ19jbGVhcihpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG10OXQwMzFfc3RhcnRfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKIAkvKiBTd2l0Y2ggdG8gbWFzdGVyICJub3JtYWwiIG1vZGUgKi8KLQlpZiAocmVnX3NldChpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDMpIDwgMCkKKwlpZiAocmVnX3NldChpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDIpIDwgMCkKIAkJcmV0dXJuIC1FSU87CiAJcmV0dXJuIDA7CiB9CkBAIC0xNzMsNyArMTcxLDcgQEAKIHN0YXRpYyBpbnQgbXQ5dDAzMV9zdG9wX2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJLyogU3RvcCBzZW5zb3IgcmVhZG91dCAqLwotCWlmIChyZWdfY2xlYXIoaWNkLCBNVDlUMDMxX09VVFBVVF9DT05UUk9MLCAzKSA8IDApCisJaWYgKHJlZ19jbGVhcihpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDIpIDwgMCkKIAkJcmV0dXJuIC1FSU87CiAJcmV0dXJuIDA7CiB9CkBAIC0xODYsOSArMTg0LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoZmxhZ3MgJiBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HKQotCQlyZWdfc2V0KGljZCwgTVQ5VDAzMV9QSVhFTF9DTE9DS19DT05UUk9MLCAweDgwMDApOwotCWVsc2UKIAkJcmVnX2NsZWFyKGljZCwgTVQ5VDAzMV9QSVhFTF9DTE9DS19DT05UUk9MLCAweDgwMDApOworCWVsc2UKKwkJcmVnX3NldChpY2QsIE1UOVQwMzFfUElYRUxfQ0xPQ0tfQ09OVFJPTCwgMHg4MDAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjAxLDY3ICsxOTksNzMgQEAKIAlyZXR1cm4gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBNVDlUMDMxX0JVU19QQVJBTSk7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5dDAzMV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgX191MzIgcGl4Zm10LCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorLyogUm91bmQgdXAgbWluaW1hIGFuZCByb3VuZCBkb3duIG1heGltYSAqLworc3RhdGljIHZvaWQgcmVjYWxjdWxhdGVfbGltaXRzKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgIHUxNiB4c2tpcCwgdTE2IHlza2lwKQoreworCWljZC0+eF9taW4gPSAoTVQ5VDAzMV9DT0xVTU5fU0tJUCArIHhza2lwIC0gMSkgLyB4c2tpcDsKKwlpY2QtPnlfbWluID0gKE1UOVQwMzFfUk9XX1NLSVAgKyB5c2tpcCAtIDEpIC8geXNraXA7CisJaWNkLT53aWR0aF9taW4gPSAoTVQ5VDAzMV9NSU5fV0lEVEggKyB4c2tpcCAtIDEpIC8geHNraXA7CisJaWNkLT5oZWlnaHRfbWluID0gKE1UOVQwMzFfTUlOX0hFSUdIVCArIHlza2lwIC0gMSkgLyB5c2tpcDsKKwlpY2QtPndpZHRoX21heCA9IE1UOVQwMzFfTUFYX1dJRFRIIC8geHNraXA7CisJaWNkLT5oZWlnaHRfbWF4ID0gTVQ5VDAzMV9NQVhfSEVJR0hUIC8geXNraXA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5dDAzMV9zZXRfcGFyYW1zKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCwgdTE2IHhza2lwLCB1MTYgeXNraXApCiB7CiAJc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5dDAzMSwgaWNkKTsKIAlpbnQgcmV0OworCXUxNiB4YmluLCB5YmluLCB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3A7CiAJY29uc3QgdTE2IGhibGFuayA9IE1UOVQwMzFfSE9SSVpPTlRBTF9CTEFOSywKIAkJdmJsYW5rID0gTVQ5VDAzMV9WRVJUSUNBTF9CTEFOSzsKLQl1MTYgeGJpbiwgeHNraXAgPSBtdDl0MDMxLT54c2tpcCwgeWJpbiwgeXNraXAgPSBtdDl0MDMxLT55c2tpcCwKLQkJd2lkdGggPSByZWN0LT53aWR0aCAqIHhza2lwLCBoZWlnaHQgPSByZWN0LT5oZWlnaHQgKiB5c2tpcDsKIAotCWlmIChwaXhmbXQpIHsKLQkJLyogU19GTVQgLSB1c2UgYmlubmluZyBhbmQgc2tpcHBpbmcgZm9yIHNjYWxpbmcsIHJlY2FsY3VsYXRlICovCi0JCS8qIElzIHRoaXMgbW9yZSBvcHRpbWFsIHRoYW4ganVzdCBhIGRpdmlzaW9uPyAqLwotCQlmb3IgKHhza2lwID0gODsgeHNraXAgPiAxOyB4c2tpcC0tKQotCQkJaWYgKHJlY3QtPndpZHRoICogeHNraXAgPD0gaWNkLT53aWR0aF9tYXgpCi0JCQkJYnJlYWs7CisJLyogTWFrZSBzdXJlIHdlIGRvbid0IGV4Y2VlZCBzZW5zb3IgbGltaXRzICovCisJaWYgKHJlY3QtPmxlZnQgKyByZWN0LT53aWR0aCA+IGljZC0+d2lkdGhfbWF4KQorCQlyZWN0LT5sZWZ0ID0gKGljZC0+d2lkdGhfbWF4IC0gcmVjdC0+d2lkdGgpIC8gMiArIGljZC0+eF9taW47CiAKLQkJZm9yICh5c2tpcCA9IDg7IHlza2lwID4gMTsgeXNraXAtLSkKLQkJCWlmIChyZWN0LT5oZWlnaHQgKiB5c2tpcCA8PSBpY2QtPmhlaWdodF9tYXgpCi0JCQkJYnJlYWs7CisJaWYgKHJlY3QtPnRvcCArIHJlY3QtPmhlaWdodCA+IGljZC0+aGVpZ2h0X21heCkKKwkJcmVjdC0+dG9wID0gKGljZC0+aGVpZ2h0X21heCAtIHJlY3QtPmhlaWdodCkgLyAyICsgaWNkLT55X21pbjsKIAotCQl3aWR0aCA9IHJlY3QtPndpZHRoICogeHNraXA7Ci0JCWhlaWdodCA9IHJlY3QtPmhlaWdodCAqIHlza2lwOwotCi0JCWRldl9kYmcoJmljZC0+ZGV2LCAieHNraXAgJXUsIHdpZHRoICV1LCB5c2tpcCAldSwgaGVpZ2h0ICV1XG4iLAotCQkJeHNraXAsIHdpZHRoLCB5c2tpcCwgaGVpZ2h0KTsKLQl9CisJd2lkdGggPSByZWN0LT53aWR0aCAqIHhza2lwOworCWhlaWdodCA9IHJlY3QtPmhlaWdodCAqIHlza2lwOworCWxlZnQgPSByZWN0LT5sZWZ0ICogeHNraXA7CisJdG9wID0gcmVjdC0+dG9wICogeXNraXA7CiAKIAl4YmluID0gbWluKHhza2lwLCAodTE2KTMpOwogCXliaW4gPSBtaW4oeXNraXAsICh1MTYpMyk7CiAKLQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZXhjZWVkIGZyYW1lIGxpbWl0cyAqLwotCWlmIChyZWN0LT5sZWZ0ICsgd2lkdGggPiBpY2QtPndpZHRoX21heCkKLQkJcmVjdC0+bGVmdCA9IChpY2QtPndpZHRoX21heCAtIHdpZHRoKSAvIDI7CisJZGV2X2RiZygmaWNkLT5kZXYsICJ4c2tpcCAldSwgd2lkdGggJXUvJXUsIHlza2lwICV1LCBoZWlnaHQgJXUvJXVcbiIsCisJCXhza2lwLCB3aWR0aCwgcmVjdC0+d2lkdGgsIHlza2lwLCBoZWlnaHQsIHJlY3QtPmhlaWdodCk7CiAKLQlpZiAocmVjdC0+dG9wICsgaGVpZ2h0ID4gaWNkLT5oZWlnaHRfbWF4KQotCQlyZWN0LT50b3AgPSAoaWNkLT5oZWlnaHRfbWF4IC0gaGVpZ2h0KSAvIDI7Ci0KLQkvKiBDb3VsZCBqdXN0IGRvIHJvdW5kdXAocmVjdC0+bGVmdCwgW3h5XWJpbik7IGJ1dCB0aGlzIGlzIGNoZWFwZXIgKi8KKwkvKiBDb3VsZCBqdXN0IGRvIHJvdW5kdXAocmVjdC0+bGVmdCwgW3h5XWJpbiAqIDIpOyBidXQgdGhpcyBpcyBjaGVhcGVyICovCiAJc3dpdGNoICh4YmluKSB7CiAJY2FzZSAyOgotCQlyZWN0LT5sZWZ0ID0gKHJlY3QtPmxlZnQgKyAxKSAmIH4xOworCQlsZWZ0ID0gKGxlZnQgKyAzKSAmIH4zOwogCQlicmVhazsKIAljYXNlIDM6Ci0JCXJlY3QtPmxlZnQgPSByb3VuZHVwKHJlY3QtPmxlZnQsIDMpOworCQlsZWZ0ID0gcm91bmR1cChsZWZ0LCA2KTsKIAl9CiAKIAlzd2l0Y2ggKHliaW4pIHsKIAljYXNlIDI6Ci0JCXJlY3QtPnRvcCA9IChyZWN0LT50b3AgKyAxKSAmIH4xOworCQl0b3AgPSAodG9wICsgMykgJiB+MzsKIAkJYnJlYWs7CiAJY2FzZSAzOgotCQlyZWN0LT50b3AgPSByb3VuZHVwKHJlY3QtPnRvcCwgMyk7CisJCXRvcCA9IHJvdW5kdXAodG9wLCA2KTsKIAl9CiAKKwkvKiBEaXNhYmxlIHJlZ2lzdGVyIHVwZGF0ZSwgcmVjb25maWd1cmUgYXRvbWljYWxseSAqLworCXJldCA9IHJlZ19zZXQoaWNkLCBNVDlUMDMxX09VVFBVVF9DT05UUk9MLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwogCS8qIEJsYW5raW5nIGFuZCBzdGFydCB2YWx1ZXMgLSBkZWZhdWx0Li4uICovCiAJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9IT1JJWk9OVEFMX0JMQU5LSU5HLCBoYmxhbmspOwogCWlmIChyZXQgPj0gMCkKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9WRVJUSUNBTF9CTEFOS0lORywgdmJsYW5rKTsKIAotCWlmIChwaXhmbXQpIHsKKwlpZiAoeXNraXAgIT0gbXQ5dDAzMS0+eXNraXAgfHwgeHNraXAgIT0gbXQ5dDAzMS0+eHNraXApIHsKIAkJLyogQmlubmluZywgc2tpcHBpbmcgKi8KIAkJaWYgKHJldCA+PSAwKQogCQkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9DT0xVTU5fQUREUkVTU19NT0RFLApAQCAtMjcwLDE0ICsyNzQsMTQgQEAKIAkJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfUk9XX0FERFJFU1NfTU9ERSwKIAkJCQkJKCh5YmluIC0gMSkgPDwgNCkgfCAoeXNraXAgLSAxKSk7CiAJfQotCWRldl9kYmcoJmljZC0+ZGV2LCAibmV3IGxlZnQgJXUsIHRvcCAldVxuIiwgcmVjdC0+bGVmdCwgcmVjdC0+dG9wKTsKKwlkZXZfZGJnKCZpY2QtPmRldiwgIm5ldyBwaHlzaWNhbCBsZWZ0ICV1LCB0b3AgJXVcbiIsIGxlZnQsIHRvcCk7CiAKIAkvKiBUaGUgY2FsbGVyIHByb3ZpZGVzIGEgc3VwcG9ydGVkIGZvcm1hdCwgYXMgZ3VhcmFudGVlZCBieQogCSAqIGljZC0+dHJ5X2ZtdF9jYXAoKSwgc29jX2NhbWVyYV9zX2Nyb3AoKSBhbmQgc29jX2NhbWVyYV9jcm9wY2FwKCkgKi8KIAlpZiAocmV0ID49IDApCi0JCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfQ09MVU1OX1NUQVJULCByZWN0LT5sZWZ0KTsKKwkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9DT0xVTU5fU1RBUlQsIGxlZnQpOwogCWlmIChyZXQgPj0gMCkKLQkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9ST1dfU1RBUlQsIHJlY3QtPnRvcCk7CisJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfUk9XX1NUQVJULCB0b3ApOwogCWlmIChyZXQgPj0gMCkKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9XSU5ET1dfV0lEVEgsIHdpZHRoIC0gMSk7CiAJaWYgKHJldCA+PSAwKQpAQCAtMjk3LDEyICszMDEsNTggQEAKIAkJfQogCX0KIAotCWlmICghcmV0ICYmIHBpeGZtdCkgeworCS8qIFJlLWVuYWJsZSByZWdpc3RlciB1cGRhdGUsIGNvbW1pdCBhbGwgY2hhbmdlcyAqLworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gcmVnX2NsZWFyKGljZCwgTVQ5VDAzMV9PVVRQVVRfQ09OVFJPTCwgMSk7CisKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5dDAzMV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQoreworCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXQwMzEsIGljZCk7CisKKwkvKiBDUk9QIC0gbm8gY2hhbmdlIGluIHNjYWxpbmcsIG9yIGluIGxpbWl0cyAqLworCXJldHVybiBtdDl0MDMxX3NldF9wYXJhbXMoaWNkLCByZWN0LCBtdDl0MDMxLT54c2tpcCwgbXQ5dDAzMS0+eXNraXApOworfQorCitzdGF0aWMgaW50IG10OXQwMzFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl0MDMxLCBpY2QpOworCWludCByZXQ7CisJdTE2IHhza2lwLCB5c2tpcDsKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSB7CisJCS5sZWZ0CT0gaWNkLT54X2N1cnJlbnQsCisJCS50b3AJPSBpY2QtPnlfY3VycmVudCwKKwkJLndpZHRoCT0gZi0+Zm10LnBpeC53aWR0aCwKKwkJLmhlaWdodAk9IGYtPmZtdC5waXguaGVpZ2h0LAorCX07CisKKwkvKgorCSAqIHRyeV9mbXQgaGFzIHB1dCByZWN0YW5nbGUgd2l0aGluIGxpbWl0cy4KKwkgKiBTX0ZNVCAtIHVzZSBiaW5uaW5nIGFuZCBza2lwcGluZyBmb3Igc2NhbGluZywgcmVjYWxjdWxhdGUKKwkgKiBsaW1pdHMsIHVzZWQgZm9yIGNyb3BwaW5nCisJICovCisJLyogSXMgdGhpcyBtb3JlIG9wdGltYWwgdGhhbiBqdXN0IGEgZGl2aXNpb24/ICovCisJZm9yICh4c2tpcCA9IDg7IHhza2lwID4gMTsgeHNraXAtLSkKKwkJaWYgKHJlY3Qud2lkdGggKiB4c2tpcCA8PSBNVDlUMDMxX01BWF9XSURUSCkKKwkJCWJyZWFrOworCisJZm9yICh5c2tpcCA9IDg7IHlza2lwID4gMTsgeXNraXAtLSkKKwkJaWYgKHJlY3QuaGVpZ2h0ICogeXNraXAgPD0gTVQ5VDAzMV9NQVhfSEVJR0hUKQorCQkJYnJlYWs7CisKKwlyZWNhbGN1bGF0ZV9saW1pdHMoaWNkLCB4c2tpcCwgeXNraXApOworCisJcmV0ID0gbXQ5dDAzMV9zZXRfcGFyYW1zKGljZCwgJnJlY3QsIHhza2lwLCB5c2tpcCk7CisJaWYgKCFyZXQpIHsKIAkJbXQ5dDAzMS0+eHNraXAgPSB4c2tpcDsKIAkJbXQ5dDAzMS0+eXNraXAgPSB5c2tpcDsKIAl9CiAKLQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBtdDl0MDMxX3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCkBAIC0zMTAsMTQgKzM2MCwxNCBAQAogewogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwogCi0JaWYgKHBpeC0+aGVpZ2h0IDwgaWNkLT5oZWlnaHRfbWluKQotCQlwaXgtPmhlaWdodCA9IGljZC0+aGVpZ2h0X21pbjsKLQlpZiAocGl4LT5oZWlnaHQgPiBpY2QtPmhlaWdodF9tYXgpCi0JCXBpeC0+aGVpZ2h0ID0gaWNkLT5oZWlnaHRfbWF4OwotCWlmIChwaXgtPndpZHRoIDwgaWNkLT53aWR0aF9taW4pCi0JCXBpeC0+d2lkdGggPSBpY2QtPndpZHRoX21pbjsKLQlpZiAocGl4LT53aWR0aCA+IGljZC0+d2lkdGhfbWF4KQotCQlwaXgtPndpZHRoID0gaWNkLT53aWR0aF9tYXg7CisJaWYgKHBpeC0+aGVpZ2h0IDwgTVQ5VDAzMV9NSU5fSEVJR0hUKQorCQlwaXgtPmhlaWdodCA9IE1UOVQwMzFfTUlOX0hFSUdIVDsKKwlpZiAocGl4LT5oZWlnaHQgPiBNVDlUMDMxX01BWF9IRUlHSFQpCisJCXBpeC0+aGVpZ2h0ID0gTVQ5VDAzMV9NQVhfSEVJR0hUOworCWlmIChwaXgtPndpZHRoIDwgTVQ5VDAzMV9NSU5fV0lEVEgpCisJCXBpeC0+d2lkdGggPSBNVDlUMDMxX01JTl9XSURUSDsKKwlpZiAocGl4LT53aWR0aCA+IE1UOVQwMzFfTUFYX1dJRFRIKQorCQlwaXgtPndpZHRoID0gTVQ5VDAzMV9NQVhfV0lEVEg7CiAKIAlwaXgtPndpZHRoICY9IH4weDAxOyAvKiBoYXMgdG8gYmUgZXZlbiAqLwogCXBpeC0+aGVpZ2h0ICY9IH4weDAxOyAvKiBoYXMgdG8gYmUgZXZlbiAqLwpAQCAtMzkwLDYgKzQ0MCwxNCBAQAogCQkuc3RlcAkJPSAxLAogCQkuZGVmYXVsdF92YWx1ZQk9IDAsCiAJfSwgeworCQkuaWQJCT0gVjRMMl9DSURfSEZMSVAsCisJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lCQk9ICJGbGlwIEhvcml6b250YWxseSIsCisJCS5taW5pbXVtCT0gMCwKKwkJLm1heGltdW0JPSAxLAorCQkuc3RlcAkJPSAxLAorCQkuZGVmYXVsdF92YWx1ZQk9IDAsCisJfSwgewogCQkuaWQJCT0gVjRMMl9DSURfR0FJTiwKIAkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUJCT0gIkdhaW4iLApAQCAtNDMxLDYgKzQ4OSw3IEBACiAJLnJlbGVhc2UJCT0gbXQ5dDAzMV9yZWxlYXNlLAogCS5zdGFydF9jYXB0dXJlCQk9IG10OXQwMzFfc3RhcnRfY2FwdHVyZSwKIAkuc3RvcF9jYXB0dXJlCQk9IG10OXQwMzFfc3RvcF9jYXB0dXJlLAorCS5zZXRfY3JvcAkJPSBtdDl0MDMxX3NldF9jcm9wLAogCS5zZXRfZm10CQk9IG10OXQwMzFfc2V0X2ZtdCwKIAkudHJ5X2ZtdAkJPSBtdDl0MDMxX3RyeV9mbXQsCiAJLnNldF9idXNfcGFyYW0JCT0gbXQ5dDAzMV9zZXRfYnVzX3BhcmFtLApAQCAtNTEzLDIxICs1NzIsMjMgQEAKIAkJCWlmIChkYXRhIDwgMCkKIAkJCQlyZXR1cm4gLUVJTzsKIAkJfSBlbHNlIHsKLQkJCS8qIFBhY2sgaXQgaW50byAxLjEyNS4uMTUgdmFyaWFibGUgc3RlcCwgcmVnaXN0ZXIgdmFsdWVzIDkuLjY3ICovCisJCQkvKiBQYWNrIGl0IGludG8gMS4xMjUuLjEyOCB2YXJpYWJsZSBzdGVwLCByZWdpc3RlciB2YWx1ZXMgOS4uMHg3ODYwICovCiAJCQkvKiBXZSBhc3N1bWUgcWN0cmwtPm1heGltdW0gLSBxY3RybC0+ZGVmYXVsdF92YWx1ZSAtIDEgPiAwICovCiAJCQl1bnNpZ25lZCBsb25nIHJhbmdlID0gcWN0cmwtPm1heGltdW0gLSBxY3RybC0+ZGVmYXVsdF92YWx1ZSAtIDE7CisJCQkvKiBjYWxjdWxhdGVkIGdhaW46IG1hcCA2NS4uMTI3IHRvIDkuLjEwMjQgc3RlcCAwLjEyNSAqLwogCQkJdW5zaWduZWQgbG9uZyBnYWluID0gKChjdHJsLT52YWx1ZSAtIHFjdHJsLT5kZWZhdWx0X3ZhbHVlIC0gMSkgKgotCQkJCQkgICAgICAgMTExICsgcmFuZ2UgLyAyKSAvIHJhbmdlICsgOTsKKwkJCQkJICAgICAgIDEwMTUgKyByYW5nZSAvIDIpIC8gcmFuZ2UgKyA5OwogCi0JCQlpZiAoZ2FpbiA8PSAzMikKKwkJCWlmIChnYWluIDw9IDMyKQkJLyogY2FsY3VsYXRlZCBnYWluIDkuLjMyIC0+IDkuLjMyICovCiAJCQkJZGF0YSA9IGdhaW47Ci0JCQllbHNlIGlmIChnYWluIDw9IDY0KQorCQkJZWxzZSBpZiAoZ2FpbiA8PSA2NCkJLyogY2FsY3VsYXRlZCBnYWluIDMzLi42NCAtPiAweDUxLi4weDYwICovCiAJCQkJZGF0YSA9ICgoZ2FpbiAtIDMyKSAqIDE2ICsgMTYpIC8gMzIgKyA4MDsKIAkJCWVsc2UKLQkJCQlkYXRhID0gKChnYWluIC0gNjQpICogNyArIDI4KSAvIDU2ICsgOTY7CisJCQkJLyogY2FsY3VsYXRlZCBnYWluIDY1Li4xMDI0IC0+ICgxLi4xMjApIDw8IDggKyAweDYwICovCisJCQkJZGF0YSA9ICgoKGdhaW4gLSA2NCArIDcpICogMzIpICYgMHhmZjAwKSB8IDB4NjA7CiAKLQkJCWRldl9kYmcoJmljZC0+ZGV2LCAiU2V0dGluZyBnYWluIGZyb20gJWQgdG8gJWRcbiIsCi0JCQkJIHJlZ19yZWFkKGljZCwgTVQ5VDAzMV9HTE9CQUxfR0FJTiksIGRhdGEpOworCQkJZGV2X2RiZygmaWNkLT5kZXYsICJTZXR0aW5nIGdhaW4gZnJvbSAweCV4IHRvIDB4JXhcbiIsCisJCQkJcmVnX3JlYWQoaWNkLCBNVDlUMDMxX0dMT0JBTF9HQUlOKSwgZGF0YSk7CiAJCQlkYXRhID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9HTE9CQUxfR0FJTiwgZGF0YSk7CiAJCQlpZiAoZGF0YSA8IDApCiAJCQkJcmV0dXJuIC1FSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCmluZGV4IGIwNGM4Y2IuLjRkM2I0ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KQEAgLTg5LDkgKzg4LDcgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSBpY2Q7CiAJaW50IG1vZGVsOwkvKiBWNEwyX0lERU5UX01UOVYwMjIqIGNvZGVzIGZyb20gdjRsMi1jaGlwLWlkZW50LmggKi8KLQlpbnQgc3dpdGNoX2dwaW87CiAJdTE2IGNoaXBfY29udHJvbDsKLQl1bnNpZ25lZCBjaGFyIGRhdGF3aWR0aDsKIH07CiAKIHN0YXRpYyBpbnQgcmVnX3JlYWQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGNvbnN0IHU4IHJlZykKQEAgLTIwOSw2NiArMjA2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidXNfc3dpdGNoX3JlcXVlc3Qoc3RydWN0IG10OXYwMjIgKm10OXYwMjIsIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCkKLXsKLSNpZmRlZiBDT05GSUdfTVQ5VjAyMl9QQ0E5NTM2X1NXSVRDSAotCWludCByZXQ7Ci0JdW5zaWduZWQgaW50IGdwaW8gPSBpY2wtPmdwaW87Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChncGlvKSkgewotCQkvKiBXZSBoYXZlIGEgZGF0YSBidXMgc3dpdGNoLiAqLwotCQlyZXQgPSBncGlvX3JlcXVlc3QoZ3BpbywgIm10OXYwMjIiKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWRldl9lcnIoJm10OXYwMjItPmNsaWVudC0+ZGV2LCAiQ2Fubm90IGdldCBHUElPICV1XG4iLCBncGlvKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgMCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKCZtdDl2MDIyLT5jbGllbnQtPmRldiwKLQkJCQkiQ2Fubm90IHNldCBHUElPICV1IHRvIG91dHB1dFxuIiwgZ3Bpbyk7Ci0JCQlncGlvX2ZyZWUoZ3Bpbyk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JbXQ5djAyMi0+c3dpdGNoX2dwaW8gPSBncGlvOwotI2Vsc2UKLQltdDl2MDIyLT5zd2l0Y2hfZ3BpbyA9IC1FSU5WQUw7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYnVzX3N3aXRjaF9yZWxlYXNlKHN0cnVjdCBtdDl2MDIyICptdDl2MDIyKQotewotI2lmZGVmIENPTkZJR19NVDlWMDIyX1BDQTk1MzZfU1dJVENICi0JaWYgKGdwaW9faXNfdmFsaWQobXQ5djAyMi0+c3dpdGNoX2dwaW8pKQotCQlncGlvX2ZyZWUobXQ5djAyMi0+c3dpdGNoX2dwaW8pOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQgYnVzX3N3aXRjaF9hY3Qoc3RydWN0IG10OXYwMjIgKm10OXYwMjIsIGludCBnbzhiaXQpCi17Ci0jaWZkZWYgQ09ORklHX01UOVYwMjJfUENBOTUzNl9TV0lUQ0gKLQlpZiAoIWdwaW9faXNfdmFsaWQobXQ5djAyMi0+c3dpdGNoX2dwaW8pKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKG10OXYwMjItPnN3aXRjaF9ncGlvLCBnbzhiaXQpOwotCXJldHVybiAwOwotI2Vsc2UKLQlyZXR1cm4gLUVOT0RFVjsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW50IGJ1c19zd2l0Y2hfcG9zc2libGUoc3RydWN0IG10OXYwMjIgKm10OXYwMjIpCi17Ci0jaWZkZWYgQ09ORklHX01UOVYwMjJfUENBOTUzNl9TV0lUQ0gKLQlyZXR1cm4gZ3Bpb19pc192YWxpZChtdDl2MDIyLT5zd2l0Y2hfZ3Bpbyk7Ci0jZWxzZQotCXJldHVybiAwOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBpbnQgbXQ5djAyMl9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzKQogewpAQCAtMjgyLDE5ICsyMTksMTcgQEAKIAlpZiAoIWlzX3Bvd2VyX29mXzIod2lkdGhfZmxhZykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKChtdDl2MDIyLT5kYXRhd2lkdGggIT0gMTAgJiYgKHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzEwKSkgfHwKLQkgICAgKG10OXYwMjItPmRhdGF3aWR0aCAhPSA5ICAmJiAod2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfOSkpIHx8Ci0JICAgIChtdDl2MDIyLT5kYXRhd2lkdGggIT0gOCAgJiYgKHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzgpKSkgewotCQkvKiBXZWxsLCB3ZSBhY3R1YWxseSBvbmx5IGNhbiBkbyAxMCBvciA4IGJpdHMuLi4gKi8KLQkJaWYgKHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlyZXQgPSBidXNfc3dpdGNoX2FjdChtdDl2MDIyLAotCQkJCSAgICAgd2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfOCk7Ci0JCWlmIChyZXQgPCAwKQorCWlmIChpY2wtPnNldF9idXNfcGFyYW0pIHsKKwkJcmV0ID0gaWNsLT5zZXRfYnVzX3BhcmFtKGljbCwgd2lkdGhfZmxhZyk7CisJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCi0JCW10OXYwMjItPmRhdGF3aWR0aCA9IHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzggPyA4IDogMTA7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogV2l0aG91dCBib2FyZCBzcGVjaWZpYyBidXMgd2lkdGggc2V0dGluZ3Mgd2Ugb25seSBzdXBwb3J0IHRoZQorCQkgKiBzZW5zb3JzIG5hdGl2ZSBidXMgd2lkdGgKKwkJICovCisJCWlmICh3aWR0aF9mbGFnICE9IFNPQ0FNX0RBVEFXSURUSF8xMCkKKwkJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWZsYWdzID0gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBmbGFncyk7CkBAIC0zMjgsNDQgKzI2MywyNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbXQ5djAyMl9xdWVyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5djAyMiwgaWNkKTsKLQl1bnNpZ25lZCBpbnQgd2lkdGhfZmxhZyA9IFNPQ0FNX0RBVEFXSURUSF8xMDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDl2MDIyLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXVuc2lnbmVkIGludCB3aWR0aF9mbGFnOwogCi0JaWYgKGJ1c19zd2l0Y2hfcG9zc2libGUobXQ5djAyMikpCi0JCXdpZHRoX2ZsYWcgfD0gU09DQU1fREFUQVdJRFRIXzg7CisJaWYgKGljbC0+cXVlcnlfYnVzX3BhcmFtKQorCQl3aWR0aF9mbGFnID0gaWNsLT5xdWVyeV9idXNfcGFyYW0oaWNsKSAmCisJCQlTT0NBTV9EQVRBV0lEVEhfTUFTSzsKKwllbHNlCisJCXdpZHRoX2ZsYWcgPSBTT0NBTV9EQVRBV0lEVEhfMTA7CiAKIAlyZXR1cm4gU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwgU09DQU1fUENMS19TQU1QTEVfRkFMTElORyB8CiAJCVNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fSFNZTkNfQUNUSVZFX0xPVyB8CiAJCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fVlNZTkNfQUNUSVZFX0xPVyB8Ci0JCVNPQ0FNX01BU1RFUiB8IFNPQ0FNX1NMQVZFIHwKKwkJU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8IFNPQ0FNX01BU1RFUiB8IFNPQ0FNX1NMQVZFIHwKIAkJd2lkdGhfZmxhZzsKIH0KIAotc3RhdGljIGludCBtdDl2MDIyX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICBfX3UzMiBwaXhmbXQsIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCitzdGF0aWMgaW50IG10OXYwMjJfc2V0X2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKIHsKLQlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl2MDIyLCBpY2QpOwogCWludCByZXQ7CiAKLQkvKiBUaGUgY2FsbGVyIHByb3ZpZGVzIGEgc3VwcG9ydGVkIGZvcm1hdCwgYXMgdmVyaWZpZWQgcGVyIGNhbGwgdG8KLQkgKiBpY2QtPnRyeV9mbXQoKSwgZGF0YXdpZHRoIGlzIGZyb20gb3VyIHN1cHBvcnRlZCBmb3JtYXQgbGlzdCAqLwotCXN3aXRjaCAocGl4Zm10KSB7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfR1JFWToKLQljYXNlIFY0TDJfUElYX0ZNVF9ZMTY6Ci0JCWlmIChtdDl2MDIyLT5tb2RlbCAhPSBWNEwyX0lERU5UX01UOVYwMjJJWDdBVE0pCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1I4OgotCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTY6Ci0JCWlmIChtdDl2MDIyLT5tb2RlbCAhPSBWNEwyX0lERU5UX01UOVYwMjJJWDdBVEMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JY2FzZSAwOgotCQkvKiBObyBmb3JtYXQgY2hhbmdlLCBvbmx5IGdlb21ldHJ5ICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCS8qIExpa2UgaW4gZXhhbXBsZSBhcHAuIENvbnRyYWRpY3RzIHRoZSBkYXRhc2hlZXQgdGhvdWdoICovCiAJcmV0ID0gcmVnX3JlYWQoaWNkLCBNVDlWMDIyX0FFQ19BR0NfRU5BQkxFKTsKIAlpZiAocmV0ID49IDApIHsKQEAgLTQwMyw2ICszMjEsNDIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtdDl2MDIyX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5djAyMiwgaWNkKTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSB7CisJCS5sZWZ0CT0gaWNkLT54X2N1cnJlbnQsCisJCS50b3AJPSBpY2QtPnlfY3VycmVudCwKKwkJLndpZHRoCT0gcGl4LT53aWR0aCwKKwkJLmhlaWdodAk9IHBpeC0+aGVpZ2h0LAorCX07CisKKwkvKiBUaGUgY2FsbGVyIHByb3ZpZGVzIGEgc3VwcG9ydGVkIGZvcm1hdCwgYXMgdmVyaWZpZWQgcGVyIGNhbGwgdG8KKwkgKiBpY2QtPnRyeV9mbXQoKSwgZGF0YXdpZHRoIGlzIGZyb20gb3VyIHN1cHBvcnRlZCBmb3JtYXQgbGlzdCAqLworCXN3aXRjaCAocGl4LT5waXhlbGZvcm1hdCkgeworCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6CisJY2FzZSBWNEwyX1BJWF9GTVRfWTE2OgorCQlpZiAobXQ5djAyMi0+bW9kZWwgIT0gVjRMMl9JREVOVF9NVDlWMDIySVg3QVRNKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSODoKKwljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjE2OgorCQlpZiAobXQ5djAyMi0+bW9kZWwgIT0gVjRMMl9JREVOVF9NVDlWMDIySVg3QVRDKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJLyogTm8gZm9ybWF0IGNoYW5nZSwgb25seSBnZW9tZXRyeSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBObyBzdXBwb3J0IGZvciBzY2FsaW5nIG9uIHRoaXMgY2FtZXJhLCBqdXN0IGNyb3AuICovCisJcmV0dXJuIG10OXYwMjJfc2V0X2Nyb3AoaWNkLCAmcmVjdCk7Cit9CisKIHN0YXRpYyBpbnQgbXQ5djAyMl90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewpAQCAtNTQ0LDYgKzQ5OCw3IEBACiAJLnJlbGVhc2UJCT0gbXQ5djAyMl9yZWxlYXNlLAogCS5zdGFydF9jYXB0dXJlCQk9IG10OXYwMjJfc3RhcnRfY2FwdHVyZSwKIAkuc3RvcF9jYXB0dXJlCQk9IG10OXYwMjJfc3RvcF9jYXB0dXJlLAorCS5zZXRfY3JvcAkJPSBtdDl2MDIyX3NldF9jcm9wLAogCS5zZXRfZm10CQk9IG10OXYwMjJfc2V0X2ZtdCwKIAkudHJ5X2ZtdAkJPSBtdDl2MDIyX3RyeV9mbXQsCiAJLnNldF9idXNfcGFyYW0JCT0gbXQ5djAyMl9zZXRfYnVzX3BhcmFtLApAQCAtNjk5LDYgKzY1NCw3IEBACiAJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5djAyMi0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzMzIgZGF0YTsKIAlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIWljZC0+ZGV2LnBhcmVudCB8fAogCSAgICB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KS0+bnIgIT0gaWNkLT5pZmFjZSkKQEAgLTczMiwyMiArNjg4LDM2IEBACiAJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVYwMjJfUElYRUxfT1BFUkFUSU9OX01PREUsIDQgfCAweDExKTsKIAkJbXQ5djAyMi0+bW9kZWwgPSBWNEwyX0lERU5UX01UOVYwMjJJWDdBVEM7CiAJCWljZC0+Zm9ybWF0cyA9IG10OXYwMjJfY29sb3VyX2Zvcm1hdHM7Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGljbC0+Z3BpbykpCi0JCQlpY2QtPm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShtdDl2MDIyX2NvbG91cl9mb3JtYXRzKTsKLQkJZWxzZQotCQkJaWNkLT5udW1fZm9ybWF0cyA9IDE7CiAJfSBlbHNlIHsKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VjAyMl9QSVhFTF9PUEVSQVRJT05fTU9ERSwgMHgxMSk7CiAJCW10OXYwMjItPm1vZGVsID0gVjRMMl9JREVOVF9NVDlWMDIySVg3QVRNOwogCQlpY2QtPmZvcm1hdHMgPSBtdDl2MDIyX21vbm9jaHJvbWVfZm9ybWF0czsKLQkJaWYgKGdwaW9faXNfdmFsaWQoaWNsLT5ncGlvKSkKLQkJCWljZC0+bnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKG10OXYwMjJfbW9ub2Nocm9tZV9mb3JtYXRzKTsKLQkJZWxzZQotCQkJaWNkLT5udW1fZm9ybWF0cyA9IDE7CiAJfQogCi0JaWYgKCFyZXQpCi0JCXJldCA9IHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoaWNkKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlaXNpczsKKworCWljZC0+bnVtX2Zvcm1hdHMgPSAwOworCisJLyoKKwkgKiBUaGlzIGlzIGEgMTBiaXQgc2Vuc29yLCBzbyBieSBkZWZhdWx0IHdlIG9ubHkgYWxsb3cgMTBiaXQuCisJICogVGhlIHBsYXRmb3JtIG1heSBzdXBwb3J0IGRpZmZlcmVudCBidXMgd2lkdGhzIGR1ZSB0bworCSAqIGRpZmZlcmVudCByb3V0aW5nIG9mIHRoZSBkYXRhIGxpbmVzLgorCSAqLworCWlmIChpY2wtPnF1ZXJ5X2J1c19wYXJhbSkKKwkJZmxhZ3MgPSBpY2wtPnF1ZXJ5X2J1c19wYXJhbShpY2wpOworCWVsc2UKKwkJZmxhZ3MgPSBTT0NBTV9EQVRBV0lEVEhfMTA7CisKKwlpZiAoZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfMTApCisJCWljZC0+bnVtX2Zvcm1hdHMrKzsKKwllbHNlCisJCWljZC0+Zm9ybWF0cysrOworCisJaWYgKGZsYWdzICYgU09DQU1fREFUQVdJRFRIXzgpCisJCWljZC0+bnVtX2Zvcm1hdHMrKzsKKworCXJldCA9IHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoaWNkKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlaXNpczsKIApAQCAtODEyLDE0ICs3ODIsNiBAQAogCWljZC0+aGVpZ2h0X21heAk9IDQ4MDsKIAlpY2QtPnlfc2tpcF90b3AJPSAxOwogCWljZC0+aWZhY2UJPSBpY2wtPmJ1c19pZDsKLQkvKiBEZWZhdWx0IGRhdGF3aWR0aCAtIHRoaXMgaXMgdGhlIG9ubHkgd2lkdGggdGhpcyBjYW1lcmEgKG5vcm1hbGx5KQotCSAqIHN1cHBvcnRzLiBJdCBpcyBvbmx5IHdpdGggZXh0cmEgbG9naWMgdGhhdCBpdCBjYW4gc3VwcG9ydAotCSAqIG90aGVyIHdpZHRocy4gVGhlcmVmb3JlIGl0IHNlZW1zIHRvIGJlIGEgc2Vuc2libGUgZGVmYXVsdC4gKi8KLQltdDl2MDIyLT5kYXRhd2lkdGggPSAxMDsKLQotCXJldCA9IGJ1c19zd2l0Y2hfcmVxdWVzdChtdDl2MDIyLCBpY2wpOwotCWlmIChyZXQpCi0JCWdvdG8gZXN3aW5pdDsKIAogCXJldCA9IHNvY19jYW1lcmFfZGV2aWNlX3JlZ2lzdGVyKGljZCk7CiAJaWYgKHJldCkKQEAgLTgyOCw4ICs3OTAsNiBAQAogCXJldHVybiAwOwogCiBlaXNkcjoKLQlidXNfc3dpdGNoX3JlbGVhc2UobXQ5djAyMik7Ci1lc3dpbml0OgogCWtmcmVlKG10OXYwMjIpOwogCXJldHVybiByZXQ7CiB9CkBAIC04MzksNyArNzk5LDYgQEAKIAlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJc29jX2NhbWVyYV9kZXZpY2VfdW5yZWdpc3RlcigmbXQ5djAyMi0+aWNkKTsKLQlidXNfc3dpdGNoX3JlbGVhc2UobXQ5djAyMik7CiAJa2ZyZWUobXQ5djAyMik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgzX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9teDNfY2FtZXJhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2MjllMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgzX2NhbWVyYS5jCkBAIC0wLDAgKzEsMTIyMCBAQAorLyoKKyAqIFY0TDIgRHJpdmVyIGZvciBpLk1YM3ggY2FtZXJhIGhvc3QKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgKKyAqIEd1ZW5uYWRpIExpYWtob3ZldHNraSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGxnQGRlbnguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLWNvbnRpZy5oPgorI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KKworI2luY2x1ZGUgPG1hY2gvaXB1Lmg+CisjaW5jbHVkZSA8bWFjaC9teDNfY2FtZXJhLmg+CisKKyNkZWZpbmUgTVgzX0NBTV9EUlZfTkFNRSAibXgzLWNhbWVyYSIKKworLyogQ01PUyBTZW5zb3IgSW50ZXJmYWNlIFJlZ2lzdGVycyAqLworI2RlZmluZSBDU0lfUkVHX1NUQVJUCQkweDYwCisKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORgkJKDB4NjAgLSBDU0lfUkVHX1NUQVJUKQorI2RlZmluZSBDU0lfU0VOU19GUk1fU0laRQkoMHg2NCAtIENTSV9SRUdfU1RBUlQpCisjZGVmaW5lIENTSV9BQ1RfRlJNX1NJWkUJKDB4NjggLSBDU0lfUkVHX1NUQVJUKQorI2RlZmluZSBDU0lfT1VUX0ZSTV9DVFJMCSgweDZDIC0gQ1NJX1JFR19TVEFSVCkKKyNkZWZpbmUgQ1NJX1RTVF9DVFJMCQkoMHg3MCAtIENTSV9SRUdfU1RBUlQpCisjZGVmaW5lIENTSV9DQ0lSX0NPREVfMQkJKDB4NzQgLSBDU0lfUkVHX1NUQVJUKQorI2RlZmluZSBDU0lfQ0NJUl9DT0RFXzIJCSgweDc4IC0gQ1NJX1JFR19TVEFSVCkKKyNkZWZpbmUgQ1NJX0NDSVJfQ09ERV8zCQkoMHg3QyAtIENTSV9SRUdfU1RBUlQpCisjZGVmaW5lIENTSV9GTEFTSF9TVFJPQkVfMQkoMHg4MCAtIENTSV9SRUdfU1RBUlQpCisjZGVmaW5lIENTSV9GTEFTSF9TVFJPQkVfMgkoMHg4NCAtIENTSV9SRUdfU1RBUlQpCisKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9WU1lOQ19QT0xfU0hJRlQJCTAKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9IU1lOQ19QT0xfU0hJRlQJCTEKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9EQVRBX1BPTF9TSElGVAkJMgorI2RlZmluZSBDU0lfU0VOU19DT05GX1BJWF9DTEtfUE9MX1NISUZUCQkzCisjZGVmaW5lIENTSV9TRU5TX0NPTkZfU0VOU19QUlRDTF9TSElGVAkJNAorI2RlZmluZSBDU0lfU0VOU19DT05GX1NFTlNfQ0xLU1JDX1NISUZUCQk3CisjZGVmaW5lIENTSV9TRU5TX0NPTkZfREFUQV9GTVRfU0hJRlQJCTgKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9EQVRBX1dJRFRIX1NISUZUCQkxMAorI2RlZmluZSBDU0lfU0VOU19DT05GX0VYVF9WU1lOQ19TSElGVAkJMTUKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9ESVZSQVRJT19TSElGVAkJMTYKKworI2RlZmluZSBDU0lfU0VOU19DT05GX0RBVEFfRk1UX1JHQl9ZVVY0NDQJKDBVTCA8PCBDU0lfU0VOU19DT05GX0RBVEFfRk1UX1NISUZUKQorI2RlZmluZSBDU0lfU0VOU19DT05GX0RBVEFfRk1UX1lVVjQyMgkJKDJVTCA8PCBDU0lfU0VOU19DT05GX0RBVEFfRk1UX1NISUZUKQorI2RlZmluZSBDU0lfU0VOU19DT05GX0RBVEFfRk1UX0JBWUVSCQkoM1VMIDw8IENTSV9TRU5TX0NPTkZfREFUQV9GTVRfU0hJRlQpCisKKyNkZWZpbmUgTUFYX1ZJREVPX01FTSAxNgorCitzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIgeworCS8qIGNvbW1vbiB2NGwgYnVmZmVyIHN0dWZmIC0tIG11c3QgYmUgZmlyc3QgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyCQkJdmI7CisJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQJKmZtdDsKKworCS8qIE9uZSBkZXNjcmlwdG90IHBlciBzY2F0dGVybGlzdCAocGVyIGZyYW1lKSAqLworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcgkJKnR4ZDsKKworCS8qIFdlIGhhdmUgdG8gImJ1aWxkIiBhIHNjYXR0ZXJsaXN0IG91cnNlbHZlcyAtIG9uZSBlbGVtZW50IHBlciBmcmFtZSAqLworCXN0cnVjdCBzY2F0dGVybGlzdAkJCXNnOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgLSBpLk1YM3ggY2FtZXJhIChDU0kpIG9iamVjdAorICogQGRldjoJCWNhbWVyYSBkZXZpY2UsIHRvIHdoaWNoIHRoZSBjb2hlcmVudCBidWZmZXIgaXMgYXR0YWNoZWQKKyAqIEBpY2Q6CQljdXJyZW50bHkgYXR0YWNoZWQgY2FtZXJhIHNlbnNvcgorICogQGNsazoJCXBvaW50ZXIgdG8gY2xvY2sKKyAqIEBiYXNlOgkJcmVtYXBwZWQgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzCisgKiBAcGRhdGE6CQlwbGF0Zm9ybSBkYXRhCisgKiBAcGxhdGZvcm1fZmxhZ3M6CXBsYXRmb3JtIGZsYWdzCisgKiBAbWNsazoJCW1hc3RlciBjbG9jayBmcmVxdWVuY3kgaW4gSHoKKyAqIEBjYXB0dXJlOgkJbGlzdCBvZiBjYXB0dXJlIHZpZGVvYnVmZmVycworICogQGxvY2s6CQlwcm90ZWN0cyB2aWRlbyBidWZmZXIgbGlzdHMKKyAqIEBhY3RpdmU6CQlhY3RpdmUgdmlkZW8gYnVmZmVyCisgKiBAaWRtYWNfY2hhbm5lbDoJYXJyYXkgb2YgcG9pbnRlcnMgdG8gSVBVIERNQUMgRE1BIGNoYW5uZWxzCisgKiBAc29jX2hvc3Q6CQllbWJlZGRlZCBzb2NfaG9zdCBvYmplY3QKKyAqLworc3RydWN0IG14M19jYW1lcmFfZGV2IHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCS8qCisJICogaS5NWDN4IGlzIG9ubHkgc3VwcG9zZWQgdG8gaGFuZGxlIG9uZSBjYW1lcmEgb24gaXRzIENhbWVyYSBTZW5zb3IKKwkgKiBJbnRlcmZhY2UuIElmIGFueW9uZSBldmVyIGJ1aWxkcyBoYXJkd2FyZSB0byBlbmFibGUgbW9yZSB0aGFuIG9uZQorCSAqIGNhbWVyYSBfc2ltdWx0YW5lb3VzbHlfLCB0aGV5IHdpbGwgaGF2ZSB0byBtb2RpZnkgdGhpcyBkcml2ZXIgdG9vCisJICovCisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2Q7CisJc3RydWN0IGNsawkJKmNsazsKKworCXZvaWQgX19pb21lbQkJKmJhc2U7CisKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9wZGF0YQkqcGRhdGE7CisKKwl1bnNpZ25lZCBsb25nCQlwbGF0Zm9ybV9mbGFnczsKKwl1bnNpZ25lZCBsb25nCQltY2xrOworCisJc3RydWN0IGxpc3RfaGVhZAljYXB0dXJlOworCXNwaW5sb2NrX3QJCWxvY2s7CQkvKiBQcm90ZWN0cyB2aWRlbyBidWZmZXIgbGlzdHMgKi8KKwlzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIgKmFjdGl2ZTsKKworCS8qIElETUFDIC8gZG1hZW5naW5lIGludGVyZmFjZSAqLworCXN0cnVjdCBpZG1hY19jaGFubmVsCSppZG1hY19jaGFubmVsWzFdOwkvKiBXZSBuZWVkIG9uZSBjaGFubmVsICovCisKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0CXNvY19ob3N0OworfTsKKworc3RydWN0IGRtYV9jaGFuX3JlcXVlc3QgeworCXN0cnVjdCBteDNfY2FtZXJhX2RldgkqbXgzX2NhbTsKKwllbnVtIGlwdV9jaGFubmVsCWlkOworfTsKKworc3RhdGljIGludCBteDNfY2FtZXJhX3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIF9fdTMyIHBpeGZtdCk7CisKK3N0YXRpYyB1MzIgY3NpX3JlZ19yZWFkKHN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzLCBvZmZfdCByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKG14My0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIGNzaV9yZWdfd3JpdGUoc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDMsIHUzMiB2YWx1ZSwgb2ZmX3QgcmVnKQoreworCV9fcmF3X3dyaXRlbCh2YWx1ZSwgbXgzLT5iYXNlICsgcmVnKTsKK30KKworLyogQ2FsbGVkIGZyb20gdGhlIElQVSBJRE1BQyBJU1IgKi8KK3N0YXRpYyB2b2lkIG14M19jYW1fZG1hX2RvbmUodm9pZCAqYXJnKQoreworCXN0cnVjdCBpZG1hY190eF9kZXNjICpkZXNjID0gdG9fdHhfZGVzYyhhcmcpOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGRlc2MtPnR4ZC5jaGFuOworCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbm5lbCA9IHRvX2lkbWFjX2NoYW4oY2hhbik7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNoYW5uZWwtPmNsaWVudDsKKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YjsKKworCWRldl9kYmcoY2hhbi0+ZGV2aWNlLT5kZXYsICJjYWxsYmFjayBjb29raWUgJWQsIGFjdGl2ZSBETUEgMHglMDh4XG4iLAorCQlkZXNjLT50eGQuY29va2llLCBteDNfY2FtLT5hY3RpdmUgPyBzZ19kbWFfYWRkcmVzcygmbXgzX2NhbS0+YWN0aXZlLT5zZykgOiAwKTsKKworCXNwaW5fbG9jaygmbXgzX2NhbS0+bG9jayk7CisJaWYgKG14M19jYW0tPmFjdGl2ZSkgeworCQl2YiA9ICZteDNfY2FtLT5hY3RpdmUtPnZiOworCisJCWxpc3RfZGVsX2luaXQoJnZiLT5xdWV1ZSk7CisJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX0RPTkU7CisJCWRvX2dldHRpbWVvZmRheSgmdmItPnRzKTsKKwkJdmItPmZpZWxkX2NvdW50Kys7CisJCXdha2VfdXAoJnZiLT5kb25lKTsKKwl9CisKKwlpZiAobGlzdF9lbXB0eSgmbXgzX2NhbS0+Y2FwdHVyZSkpIHsKKwkJbXgzX2NhbS0+YWN0aXZlID0gTlVMTDsKKwkJc3Bpbl91bmxvY2soJm14M19jYW0tPmxvY2spOworCisJCS8qCisJCSAqIHN0b3AgY2FwdHVyZSAtIHdpdGhvdXQgZnVydGhlciBidWZmZXJzIElQVV9DSEFfQlVGMF9SRFkgd2lsbAorCQkgKiBub3QgZ2V0IHVwZGF0ZWQKKwkJICovCisJCXJldHVybjsKKwl9CisKKwlteDNfY2FtLT5hY3RpdmUgPSBsaXN0X2VudHJ5KG14M19jYW0tPmNhcHR1cmUubmV4dCwKKwkJCQkgICAgIHN0cnVjdCBteDNfY2FtZXJhX2J1ZmZlciwgdmIucXVldWUpOworCW14M19jYW0tPmFjdGl2ZS0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJc3Bpbl91bmxvY2soJm14M19jYW0tPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2J1ZmZlcihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIgPSAmYnVmLT52YjsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ZCA9IGJ1Zi0+dHhkOworCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbjsKKworCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CisKKwlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKKwkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKKworCS8qCisJICogVGhpcyB3YWl0cyB1bnRpbCB0aGlzIGJ1ZmZlciBpcyBvdXQgb2YgZGFuZ2VyLCBpLmUuLCB1bnRpbCBpdCBpcyBubworCSAqIGxvbmdlciBpbiBTVEFURV9RVUVVRUQgb3IgU1RBVEVfQUNUSVZFCisJICovCisJdmlkZW9idWZfd2FpdG9uKHZiLCAwLCAwKTsKKwlpZiAodHhkKSB7CisJCWljaGFuID0gdG9faWRtYWNfY2hhbih0eGQtPmNoYW4pOworCQlhc3luY190eF9hY2sodHhkKTsKKwl9CisJdmlkZW9idWZfZG1hX2NvbnRpZ19mcmVlKHZxLCB2Yik7CisJYnVmLT50eGQgPSBOVUxMOworCisJdmItPnN0YXRlID0gVklERU9CVUZfTkVFRFNfSU5JVDsKK30KKworLyoKKyAqIFZpZGVvYnVmIG9wZXJhdGlvbnMKKyAqLworCisvKgorICogQ2FsY3VsYXRlIHRoZSBfX2J1ZmZlcl9fIChub3QgZGF0YSkgc2l6ZSBhbmQgbnVtYmVyIG9mIGJ1ZmZlcnMuCisgKiBDYWxsZWQgd2l0aCAudmJfbG9jayBoZWxkCisgKi8KK3N0YXRpYyBpbnQgbXgzX3ZpZGVvYnVmX3NldHVwKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHVuc2lnbmVkIGludCAqY291bnQsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgKnNpemUpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwkvKgorCSAqIGJpdHMtcGVyLXBpeGVsIChkZXB0aCkgYXMgc3BlY2lmaWVkIGluIGNhbWVyYSdzIHBpeGVsIGZvcm1hdCBkb2VzCisJICogbm90IG5lY2Vzc2FyaWx5IG1hdGNoIHdoYXQgdGhlIGNhbWVyYSBpbnRlcmZhY2Ugd3JpdGVzIHRvIFJBTSwgYnV0CisJICogaXQgc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGZvciBub3cuCisJICovCisJdW5zaWduZWQgaW50IGJwcCA9IERJVl9ST1VORF9VUChpY2QtPmN1cnJlbnRfZm10LT5kZXB0aCwgOCk7CisKKwlpZiAoIW14M19jYW0tPmlkbWFjX2NoYW5uZWxbMF0pCisJCXJldHVybiAtRUlOVkFMOworCisJKnNpemUgPSBpY2QtPndpZHRoICogaWNkLT5oZWlnaHQgKiBicHA7CisKKwlpZiAoISpjb3VudCkKKwkJKmNvdW50ID0gMzI7CisKKwlpZiAoKnNpemUgKiAqY291bnQgPiBNQVhfVklERU9fTUVNICogMTAyNCAqIDEwMjQpCisJCSpjb3VudCA9IE1BWF9WSURFT19NRU0gKiAxMDI0ICogMTAyNCAvICpzaXplOworCisJcmV0dXJuIDA7Cit9CisKKy8qIENhbGxlZCB3aXRoIC52Yl9sb2NrIGhlbGQgKi8KK3N0YXRpYyBpbnQgbXgzX3ZpZGVvYnVmX3ByZXBhcmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKKwkJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsIGVudW0gdjRsMl9maWVsZCBmaWVsZCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OworCXN0cnVjdCBteDNfY2FtZXJhX2J1ZmZlciAqYnVmID0KKwkJY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIsIHZiKTsKKwkvKiBjdXJyZW50X2ZtdCBfbXVzdF8gYWx3YXlzIGJlIHNldCAqLworCXNpemVfdCBuZXdfc2l6ZSA9IGljZC0+d2lkdGggKiBpY2QtPmhlaWdodCAqCisJCSgoaWNkLT5jdXJyZW50X2ZtdC0+ZGVwdGggKyA3KSA+PiAzKTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBJIHRoaW5rLCBpbiBidWZfcHJlcGFyZSB5b3Ugb25seSBoYXZlIHRvIHByb3RlY3QgZ2xvYmFsIGRhdGEsCisJICogdGhlIGFjdHVhbCBidWZmZXIgaXMgeW91cnMKKwkgKi8KKworCWlmIChidWYtPmZtdAkhPSBpY2QtPmN1cnJlbnRfZm10IHx8CisJICAgIHZiLT53aWR0aAkhPSBpY2QtPndpZHRoIHx8CisJICAgIHZiLT5oZWlnaHQJIT0gaWNkLT5oZWlnaHQgfHwKKwkgICAgdmItPmZpZWxkCSE9IGZpZWxkKSB7CisJCWJ1Zi0+Zm10CT0gaWNkLT5jdXJyZW50X2ZtdDsKKwkJdmItPndpZHRoCT0gaWNkLT53aWR0aDsKKwkJdmItPmhlaWdodAk9IGljZC0+aGVpZ2h0OworCQl2Yi0+ZmllbGQJPSBmaWVsZDsKKwkJaWYgKHZiLT5zdGF0ZSAhPSBWSURFT0JVRl9ORUVEU19JTklUKQorCQkJZnJlZV9idWZmZXIodnEsIGJ1Zik7CisJfQorCisJaWYgKHZiLT5iYWRkciAmJiB2Yi0+YnNpemUgPCBuZXdfc2l6ZSkgeworCQkvKiBVc2VyIHByb3ZpZGVkIGJ1ZmZlciwgYnV0IGl0IGlzIHRvbyBzbWFsbCAqLworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAodmItPnN0YXRlID09IFZJREVPQlVGX05FRURTX0lOSVQpIHsKKwkJc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuID0gbXgzX2NhbS0+aWRtYWNfY2hhbm5lbFswXTsKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9ICZidWYtPnNnOworCisJCS8qCisJCSAqIFRoZSB0b3RhbCBzaXplIG9mIHZpZGVvLWJ1ZmZlcnMgdGhhdCB3aWxsIGJlIGFsbG9jYXRlZCAvIG1hcHBlZC4KKwkJICogKnNpemUgdGhhdCB3ZSBjYWxjdWxhdGVkIGluIHZpZGVvYnVmX3NldHVwIGdldHMgYXNzaWduZWQgdG8KKwkJICogdmItPmJzaXplLCBhbmQgbm93IHdlIHVzZSB0aGUgc2FtZSBjYWxjdWxhdGlvbiB0byBnZXQgdmItPnNpemUuCisJCSAqLworCQl2Yi0+c2l6ZSA9IG5ld19zaXplOworCisJCS8qIFRoaXMgYWN0dWFsbHkgKGFsbG9jYXRlcyBhbmQpIG1hcHMgYnVmZmVycyAqLworCQlyZXQgPSB2aWRlb2J1Zl9pb2xvY2sodnEsIHZiLCBOVUxMKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbDsKKworCQkvKgorCQkgKiBXZSB3aWxsIGhhdmUgdG8gY29uZmlndXJlIHRoZSBJRE1BQyBjaGFubmVsLiBJdCBoYXMgdHdvIHNsb3RzCisJCSAqIGZvciBETUEgYnVmZmVycywgd2Ugc2hhbGwgZW50ZXIgdGhlIGZpcnN0IHR3byBidWZmZXJzIHRoZXJlLAorCQkgKiBhbmQgdGhlbiBzdWJtaXQgbmV3IGJ1ZmZlcnMgaW4gRE1BLXJlYWR5IGludGVycnVwdHMKKwkJICovCisJCXNnX2luaXRfdGFibGUoc2csIDEpOworCQlzZ19kbWFfYWRkcmVzcyhzZykJPSB2aWRlb2J1Zl90b19kbWFfY29udGlnKHZiKTsKKwkJc2dfZG1hX2xlbihzZykJCT0gdmItPnNpemU7CisKKwkJYnVmLT50eGQgPSBpY2hhbi0+ZG1hX2NoYW4uZGV2aWNlLT5kZXZpY2VfcHJlcF9zbGF2ZV9zZygKKwkJCSZpY2hhbi0+ZG1hX2NoYW4sIHNnLCAxLCBETUFfRlJPTV9ERVZJQ0UsCisJCQlETUFfUFJFUF9JTlRFUlJVUFQpOworCQlpZiAoIWJ1Zi0+dHhkKSB7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBmYWlsOworCQl9CisKKwkJYnVmLT50eGQtPmNhbGxiYWNrX3BhcmFtCT0gYnVmLT50eGQ7CisJCWJ1Zi0+dHhkLT5jYWxsYmFjawkJPSBteDNfY2FtX2RtYV9kb25lOworCisJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCX0KKworCXJldHVybiAwOworCitmYWlsOgorCWZyZWVfYnVmZmVyKHZxLCBidWYpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBlbnVtIHBpeGVsX2ZtdCBmb3VyY2NfdG9faXB1X3BpeChfX3UzMiBmb3VyY2MpCit7CisJLyogQWRkIG1vcmUgZm9ybWF0cyBhcyBuZWVkIGFyaXNlcyBhbmQgdGVzdCBwb3NzaWJpbGl0aWVzIGFwcGVhci4uLiAqLworCXN3aXRjaCAoZm91cmNjKSB7CisJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1OgorCQlyZXR1cm4gSVBVX1BJWF9GTVRfUkdCNTY1OworCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjI0OgorCQlyZXR1cm4gSVBVX1BJWF9GTVRfUkdCMjQ7CisJY2FzZSBWNEwyX1BJWF9GTVRfUkdCMzMyOgorCQlyZXR1cm4gSVBVX1BJWF9GTVRfUkdCMzMyOworCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6CisJCXJldHVybiBJUFVfUElYX0ZNVF9ZVlU0MjJQOworCWRlZmF1bHQ6CisJCXJldHVybiBJUFVfUElYX0ZNVF9HRU5FUklDOworCX0KK30KKworLyogQ2FsbGVkIHdpdGggLnZiX2xvY2sgaGVsZCAqLworc3RhdGljIHZvaWQgbXgzX3ZpZGVvYnVmX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQkgICAgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIgKmJ1ZiA9CisJCWNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IG14M19jYW1lcmFfYnVmZmVyLCB2Yik7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eGQgPSBidWYtPnR4ZDsKKwlzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW4gPSB0b19pZG1hY19jaGFuKHR4ZC0+Y2hhbik7CisJc3RydWN0IGlkbWFjX3ZpZGVvX3BhcmFtICp2aWRlbyA9ICZpY2hhbi0+cGFyYW1zLnZpZGVvOworCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0ICpkYXRhX2ZtdCA9IGljZC0+Y3VycmVudF9mbXQ7CisJZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogVGhpcyBpcyB0aGUgY29uZmlndXJhdGlvbiBvZiBvbmUgc2ctZWxlbWVudCAqLworCXZpZGVvLT5vdXRfcGl4ZWxfZm10CT0gZm91cmNjX3RvX2lwdV9waXgoZGF0YV9mbXQtPmZvdXJjYyk7CisJdmlkZW8tPm91dF93aWR0aAk9IGljZC0+d2lkdGg7CisJdmlkZW8tPm91dF9oZWlnaHQJPSBpY2QtPmhlaWdodDsKKwl2aWRlby0+b3V0X3N0cmlkZQk9IGljZC0+d2lkdGg7CisKKyNpZmRlZiBERUJVRworCS8qIGhlbHBzIHRvIHNlZSB3aGF0IERNQSBhY3R1YWxseSBoYXMgd3JpdHRlbiAqLworCW1lbXNldCgodm9pZCAqKXZiLT5iYWRkciwgMHhhYSwgdmItPmJzaXplKTsKKyNlbmRpZgorCisJc3Bpbl9sb2NrX2lycXNhdmUoJm14M19jYW0tPmxvY2ssIGZsYWdzKTsKKworCWxpc3RfYWRkX3RhaWwoJnZiLT5xdWV1ZSwgJm14M19jYW0tPmNhcHR1cmUpOworCisJaWYgKCFteDNfY2FtLT5hY3RpdmUpIHsKKwkJbXgzX2NhbS0+YWN0aXZlID0gYnVmOworCQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJfSBlbHNlIHsKKwkJdmItPnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm14M19jYW0tPmxvY2ssIGZsYWdzKTsKKworCWNvb2tpZSA9IHR4ZC0+dHhfc3VibWl0KHR4ZCk7CisJZGV2X2RiZygmaWNkLT5kZXYsICJTdWJtaXR0ZWQgY29va2llICVkIERNQSAweCUwOHhcbiIsIGNvb2tpZSwgc2dfZG1hX2FkZHJlc3MoJmJ1Zi0+c2cpKTsKKwlpZiAoY29va2llID49IDApCisJCXJldHVybjsKKworCS8qIFN1Ym1pdCBlcnJvciAqLworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm14M19jYW0tPmxvY2ssIGZsYWdzKTsKKworCWxpc3RfZGVsX2luaXQoJnZiLT5xdWV1ZSk7CisKKwlpZiAobXgzX2NhbS0+YWN0aXZlID09IGJ1ZikKKwkJbXgzX2NhbS0+YWN0aXZlID0gTlVMTDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm14M19jYW0tPmxvY2ssIGZsYWdzKTsKK30KKworLyogQ2FsbGVkIHdpdGggLnZiX2xvY2sgaGVsZCAqLworc3RhdGljIHZvaWQgbXgzX3ZpZGVvYnVmX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKKwkJCQkgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIgKmJ1ZiA9CisJCWNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IG14M19jYW1lcmFfYnVmZmVyLCB2Yik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRldl9kYmcoJmljZC0+ZGV2LCAiUmVsZWFzZSVzIERNQSAweCUwOHggKHN0YXRlICVkKSwgcXVldWUgJXNlbXB0eVxuIiwKKwkJbXgzX2NhbS0+YWN0aXZlID09IGJ1ZiA/ICIgYWN0aXZlIiA6ICIiLCBzZ19kbWFfYWRkcmVzcygmYnVmLT5zZyksCisJCSB2Yi0+c3RhdGUsIGxpc3RfZW1wdHkoJnZiLT5xdWV1ZSkgPyAiIiA6ICJub3QgIik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm14M19jYW0tPmxvY2ssIGZsYWdzKTsKKwlpZiAoKHZiLT5zdGF0ZSA9PSBWSURFT0JVRl9BQ1RJVkUgfHwgdmItPnN0YXRlID09IFZJREVPQlVGX1FVRVVFRCkgJiYKKwkgICAgIWxpc3RfZW1wdHkoJnZiLT5xdWV1ZSkpIHsKKwkJdmItPnN0YXRlID0gVklERU9CVUZfRVJST1I7CisKKwkJbGlzdF9kZWxfaW5pdCgmdmItPnF1ZXVlKTsKKwkJaWYgKG14M19jYW0tPmFjdGl2ZSA9PSBidWYpCisJCQlteDNfY2FtLT5hY3RpdmUgPSBOVUxMOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZteDNfY2FtLT5sb2NrLCBmbGFncyk7CisJZnJlZV9idWZmZXIodnEsIGJ1Zik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIG14M192aWRlb2J1Zl9vcHMgPSB7CisJLmJ1Zl9zZXR1cCAgICAgID0gbXgzX3ZpZGVvYnVmX3NldHVwLAorCS5idWZfcHJlcGFyZSAgICA9IG14M192aWRlb2J1Zl9wcmVwYXJlLAorCS5idWZfcXVldWUgICAgICA9IG14M192aWRlb2J1Zl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgICAgPSBteDNfdmlkZW9idWZfcmVsZWFzZSwKK307CisKK3N0YXRpYyB2b2lkIG14M19jYW1lcmFfaW5pdF92aWRlb2J1ZihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJICAgICBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CisKKwl2aWRlb2J1Zl9xdWV1ZV9kbWFfY29udGlnX2luaXQocSwgJm14M192aWRlb2J1Zl9vcHMsIG14M19jYW0tPmRldiwKKwkJCQkgICAgICAgJm14M19jYW0tPmxvY2ssCisJCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCQkgICAgICAgVjRMMl9GSUVMRF9OT05FLAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IG14M19jYW1lcmFfYnVmZmVyKSwgaWNkKTsKK30KKworLyogRmlyc3QgcGFydCBvZiBpcHVfY3NpX2luaXRfaW50ZXJmYWNlKCkgKi8KK3N0YXRpYyB2b2lkIG14M19jYW1lcmFfYWN0aXZhdGUoc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtLAorCQkJCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXUzMiBjb25mOworCWxvbmcgcmF0ZTsKKworCS8qIFNldCBkZWZhdWx0IHNpemU6IGlwdV9jc2lfc2V0X3dpbmRvd19zaXplKCkgKi8KKwljc2lfcmVnX3dyaXRlKG14M19jYW0sICg2NDAgLSAxKSB8ICgoNDgwIC0gMSkgPDwgMTYpLCBDU0lfQUNUX0ZSTV9TSVpFKTsKKwkvKiAuLi5hbmQgcG9zaXRpb24gdG8gMDowOiBpcHVfY3NpX3NldF93aW5kb3dfcG9zKCkgKi8KKwljb25mID0gY3NpX3JlZ19yZWFkKG14M19jYW0sIENTSV9PVVRfRlJNX0NUUkwpICYgMHhmZmZmMDAwMDsKKwljc2lfcmVnX3dyaXRlKG14M19jYW0sIGNvbmYsIENTSV9PVVRfRlJNX0NUUkwpOworCisJLyogV2UgdXNlIG9ubHkgZ2F0ZWQgY2xvY2sgc3luY2hyb25pc2F0aW9uIG1vZGUgc28gZmFyICovCisJY29uZiA9IDAgPDwgQ1NJX1NFTlNfQ09ORl9TRU5TX1BSVENMX1NISUZUOworCisJLyogU2V0IGdlbmVyaWMgZGF0YSwgcGxhdGZvcm0tYmlnZ2VzdCBidXMtd2lkdGggKi8KKwljb25mIHw9IENTSV9TRU5TX0NPTkZfREFUQV9GTVRfQkFZRVI7CisKKwlpZiAobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xNSkKKwkJY29uZiB8PSAzIDw8IENTSV9TRU5TX0NPTkZfREFUQV9XSURUSF9TSElGVDsKKwllbHNlIGlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfREFUQVdJRFRIXzEwKQorCQljb25mIHw9IDIgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX1dJRFRIX1NISUZUOworCWVsc2UgaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfOCkKKwkJY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfREFUQV9XSURUSF9TSElGVDsKKwllbHNlLyogaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfNCkqLworCQljb25mIHw9IDAgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX1dJRFRIX1NISUZUOworCisJaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9DTEtfU1JDKQorCQljb25mIHw9IDEgPDwgQ1NJX1NFTlNfQ09ORl9TRU5TX0NMS1NSQ19TSElGVDsKKwlpZiAobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0VYVF9WU1lOQykKKwkJY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfRVhUX1ZTWU5DX1NISUZUOworCWlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfRFApCisJCWNvbmYgfD0gMSA8PCBDU0lfU0VOU19DT05GX0RBVEFfUE9MX1NISUZUOworCWlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfUENQKQorCQljb25mIHw9IDEgPDwgQ1NJX1NFTlNfQ09ORl9QSVhfQ0xLX1BPTF9TSElGVDsKKwlpZiAobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0hTUCkKKwkJY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfSFNZTkNfUE9MX1NISUZUOworCWlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfVlNQKQorCQljb25mIHw9IDEgPDwgQ1NJX1NFTlNfQ09ORl9WU1lOQ19QT0xfU0hJRlQ7CisKKwkvKiBpcHVfY3NpX2luaXRfaW50ZXJmYWNlKCkgKi8KKwljc2lfcmVnX3dyaXRlKG14M19jYW0sIGNvbmYsIENTSV9TRU5TX0NPTkYpOworCisJY2xrX2VuYWJsZShteDNfY2FtLT5jbGspOworCXJhdGUgPSBjbGtfcm91bmRfcmF0ZShteDNfY2FtLT5jbGssIG14M19jYW0tPm1jbGspOworCWRldl9kYmcoJmljZC0+ZGV2LCAiU2V0IFNFTlNfQ09ORiB0byAleCwgcmF0ZSAlbGRcbiIsIGNvbmYsIHJhdGUpOworCWlmIChyYXRlKQorCQljbGtfc2V0X3JhdGUobXgzX2NhbS0+Y2xrLCByYXRlKTsKK30KKworLyogQ2FsbGVkIHdpdGggLnZpZGVvX2xvY2sgaGVsZCAqLworc3RhdGljIGludCBteDNfY2FtZXJhX2FkZF9kZXZpY2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OworCWludCByZXQ7CisKKwlpZiAobXgzX2NhbS0+aWNkKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlYnVzeTsKKwl9CisKKwlteDNfY2FtZXJhX2FjdGl2YXRlKG14M19jYW0sIGljZCk7CisJcmV0ID0gaWNkLT5vcHMtPmluaXQoaWNkKTsKKwlpZiAocmV0IDwgMCkgeworCQljbGtfZGlzYWJsZShteDNfY2FtLT5jbGspOworCQlnb3RvIGVpbml0OworCX0KKworCW14M19jYW0tPmljZCA9IGljZDsKKworZWluaXQ6CitlYnVzeToKKwlpZiAoIXJldCkKKwkJZGV2X2luZm8oJmljZC0+ZGV2LCAiTVgzIENhbWVyYSBkcml2ZXIgYXR0YWNoZWQgdG8gY2FtZXJhICVkXG4iLAorCQkJIGljZC0+ZGV2bnVtKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIENhbGxlZCB3aXRoIC52aWRlb19sb2NrIGhlbGQgKi8KK3N0YXRpYyB2b2lkIG14M19jYW1lcmFfcmVtb3ZlX2RldmljZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CisJc3RydWN0IGlkbWFjX2NoYW5uZWwgKippY2hhbiA9ICZteDNfY2FtLT5pZG1hY19jaGFubmVsWzBdOworCisJQlVHX09OKGljZCAhPSBteDNfY2FtLT5pY2QpOworCisJaWYgKCppY2hhbikgeworCQlkbWFfcmVsZWFzZV9jaGFubmVsKCYoKmljaGFuKS0+ZG1hX2NoYW4pOworCQkqaWNoYW4gPSBOVUxMOworCX0KKworCWljZC0+b3BzLT5yZWxlYXNlKGljZCk7CisKKwljbGtfZGlzYWJsZShteDNfY2FtLT5jbGspOworCisJbXgzX2NhbS0+aWNkID0gTlVMTDsKKworCWRldl9pbmZvKCZpY2QtPmRldiwgIk1YMyBDYW1lcmEgZHJpdmVyIGRldGFjaGVkIGZyb20gY2FtZXJhICVkXG4iLAorCQkgaWNkLT5kZXZudW0pOworfQorCitzdGF0aWMgYm9vbCBjaGFubmVsX2NoYW5nZV9yZXF1ZXN0ZWQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwlzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW4gPSBteDNfY2FtLT5pZG1hY19jaGFubmVsWzBdOworCisJLyogRG8gYnVmZmVycyBoYXZlIHRvIGJlIHJlLWFsbG9jYXRlZCBvciBjaGFubmVsIHJlLWNvbmZpZ3VyZWQ/ICovCisJcmV0dXJuIGljaGFuICYmIHJlY3QtPndpZHRoICogcmVjdC0+aGVpZ2h0ID4gaWNkLT53aWR0aCAqIGljZC0+aGVpZ2h0OworfQorCitzdGF0aWMgaW50IHRlc3RfcGxhdGZvcm1fcGFyYW0oc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtLAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgYnVzd2lkdGgsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCS8qCisJICogUGxhdGZvcm0gc3BlY2lmaWVkIHN5bmNocm9uaXphdGlvbiBhbmQgcGl4ZWwgY2xvY2sgcG9sYXJpdGllcyBhcmUKKwkgKiBvbmx5IGEgcmVjb21tZW5kYXRpb24gYW5kIGFyZSBvbmx5IHVzZWQgZHVyaW5nIHByb2JpbmcuIE1YM3gKKwkgKiBjYW1lcmEgaW50ZXJmYWNlIG9ubHkgd29ya3MgaW4gbWFzdGVyIG1vZGUsIGkuZS4sIHVzZXMgSFNZTkMgYW5kCisJICogVlNZTkMgc2lnbmFscyBmcm9tIHRoZSBzZW5zb3IKKwkgKi8KKwkqZmxhZ3MgPSBTT0NBTV9NQVNURVIgfAorCQlTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8CisJCVNPQ0FNX0hTWU5DX0FDVElWRV9MT1cgfAorCQlTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8CisJCVNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cgfAorCQlTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfAorCQlTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HIHwKKwkJU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0xPVzsKKworCS8qIElmIHJlcXVlc3RlZCBkYXRhIHdpZHRoIGlzIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0sIHVzZSBpdCBvciBhbnkKKwkgKiBwb3NzaWJsZSBsb3dlciB2YWx1ZSAtIGkuTVgzMSBpcyBzbWFydCBlbm91Z2ggdG8gc2NoaWZ0IGJpdHMgKi8KKwlzd2l0Y2ggKGJ1c3dpZHRoKSB7CisJY2FzZSAxNToKKwkJaWYgKCEobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xNSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJKmZsYWdzIHw9IFNPQ0FNX0RBVEFXSURUSF8xNSB8IFNPQ0FNX0RBVEFXSURUSF8xMCB8CisJCQlTT0NBTV9EQVRBV0lEVEhfOCB8IFNPQ0FNX0RBVEFXSURUSF80OworCQlicmVhazsKKwljYXNlIDEwOgorCQlpZiAoIShteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfREFUQVdJRFRIXzEwKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQkqZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzEwIHwgU09DQU1fREFUQVdJRFRIXzggfAorCQkJU09DQU1fREFUQVdJRFRIXzQ7CisJCWJyZWFrOworCWNhc2UgODoKKwkJaWYgKCEobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF84KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQkqZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzggfCBTT0NBTV9EQVRBV0lEVEhfNDsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlpZiAoIShteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfREFUQVdJRFRIXzQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCSpmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2luZm8obXgzX2NhbS0+ZGV2LCAiVW5zdXBwb3J0ZWQgYnVzIHdpZHRoICVkXG4iLCBidXN3aWR0aCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14M19jYW1lcmFfdHJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkgICAgY29uc3QgdW5zaWduZWQgaW50IGRlcHRoKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGJ1c19mbGFncywgY2FtZXJhX2ZsYWdzOworCWludCByZXQgPSB0ZXN0X3BsYXRmb3JtX3BhcmFtKG14M19jYW0sIGRlcHRoLCAmYnVzX2ZsYWdzKTsKKworCWRldl9kYmcoJmljaS0+ZGV2LCAicmVxdWVzdGVkIGJ1cyB3aWR0aCAlZCBiaXQ6ICVkXG4iLCBkZXB0aCwgcmV0KTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJY2FtZXJhX2ZsYWdzID0gaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbShpY2QpOworCisJcmV0ID0gc29jX2NhbWVyYV9idXNfcGFyYW1fY29tcGF0aWJsZShjYW1lcmFfZmxhZ3MsIGJ1c19mbGFncyk7CisJaWYgKHJldCA8IDApCisJCWRldl93YXJuKCZpY2QtPmRldiwgIkZsYWdzIGluY29tcGF0aWJsZTogY2FtZXJhICVseCwgaG9zdCAlbHhcbiIsCisJCQkgY2FtZXJhX2ZsYWdzLCBidXNfZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGJvb2wgY2hhbl9maWx0ZXIoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICphcmcpCit7CisJc3RydWN0IGRtYV9jaGFuX3JlcXVlc3QgKnJxID0gYXJnOworCXN0cnVjdCBteDNfY2FtZXJhX3BkYXRhICpwZGF0YTsKKworCWlmICghcnEpCisJCXJldHVybiBmYWxzZTsKKworCXBkYXRhID0gcnEtPm14M19jYW0tPmRldi0+cGxhdGZvcm1fZGF0YTsKKworCXJldHVybiBycS0+aWQgPT0gY2hhbi0+Y2hhbl9pZCAmJgorCQlwZGF0YS0+ZG1hX2RldiA9PSBjaGFuLT5kZXZpY2UtPmRldjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0IG14M19jYW1lcmFfZm9ybWF0c1tdID0geworCXsKKwkJLm5hbWUJCT0gIkJheWVyIChzUkdCKSA4IGJpdCIsCisJCS5kZXB0aAkJPSA4LAorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJfSwgeworCQkubmFtZQkJPSAiTW9ub2Nocm9tZSA4IGJpdCIsCisJCS5kZXB0aAkJPSA4LAorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9HUkVZLAorCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCX0sCit9OworCitzdGF0aWMgYm9vbCBidXN3aWR0aF9zdXBwb3J0ZWQoc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpLCBpbnQgZGVwdGgpCit7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OworCisJc3dpdGNoIChkZXB0aCkgeworCWNhc2UgNDoKKwkJcmV0dXJuICEhKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfNCk7CisJY2FzZSA4OgorCQlyZXR1cm4gISEobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF84KTsKKwljYXNlIDEwOgorCQlyZXR1cm4gISEobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xMCk7CisJY2FzZSAxNToKKwkJcmV0dXJuICEhKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfMTUpOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgbXgzX2NhbWVyYV9nZXRfZm9ybWF0cyhzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgaW50IGlkeCwKKwkJCQkgIHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGUpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJaW50IGZvcm1hdHMgPSAwLCBidXN3aWR0aCwgcmV0OworCisJYnVzd2lkdGggPSBpY2QtPmZvcm1hdHNbaWR4XS5kZXB0aDsKKworCWlmICghYnVzd2lkdGhfc3VwcG9ydGVkKGljaSwgYnVzd2lkdGgpKQorCQlyZXR1cm4gMDsKKworCXJldCA9IG14M19jYW1lcmFfdHJ5X2J1c19wYXJhbShpY2QsIGJ1c3dpZHRoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGljZC0+Zm9ybWF0c1tpZHhdLmZvdXJjYykgeworCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTA6CisJCWZvcm1hdHMrKzsKKwkJaWYgKHhsYXRlKSB7CisJCQl4bGF0ZS0+aG9zdF9mbXQgPSAmbXgzX2NhbWVyYV9mb3JtYXRzWzBdOworCQkJeGxhdGUtPmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CisJCQl4bGF0ZS0+YnVzd2lkdGggPSBidXN3aWR0aDsKKwkJCXhsYXRlKys7CisJCQlkZXZfZGJnKCZpY2ktPmRldiwgIlByb3ZpZGluZyBmb3JtYXQgJXMgdXNpbmcgJXNcbiIsCisJCQkJbXgzX2NhbWVyYV9mb3JtYXRzWzBdLm5hbWUsCisJCQkJaWNkLT5mb3JtYXRzW2lkeF0ubmFtZSk7CisJCX0KKwkJZ290byBwYXNzdGhyb3VnaDsKKwljYXNlIFY0TDJfUElYX0ZNVF9ZMTY6CisJCWZvcm1hdHMrKzsKKwkJaWYgKHhsYXRlKSB7CisJCQl4bGF0ZS0+aG9zdF9mbXQgPSAmbXgzX2NhbWVyYV9mb3JtYXRzWzFdOworCQkJeGxhdGUtPmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CisJCQl4bGF0ZS0+YnVzd2lkdGggPSBidXN3aWR0aDsKKwkJCXhsYXRlKys7CisJCQlkZXZfZGJnKCZpY2ktPmRldiwgIlByb3ZpZGluZyBmb3JtYXQgJXMgdXNpbmcgJXNcbiIsCisJCQkJbXgzX2NhbWVyYV9mb3JtYXRzWzBdLm5hbWUsCisJCQkJaWNkLT5mb3JtYXRzW2lkeF0ubmFtZSk7CisJCX0KKwlkZWZhdWx0OgorcGFzc3Rocm91Z2g6CisJCS8qIEdlbmVyaWMgcGFzcy10aHJvdWdoICovCisJCWZvcm1hdHMrKzsKKwkJaWYgKHhsYXRlKSB7CisJCQl4bGF0ZS0+aG9zdF9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CisJCQl4bGF0ZS0+Y2FtX2ZtdCA9IGljZC0+Zm9ybWF0cyArIGlkeDsKKwkJCXhsYXRlLT5idXN3aWR0aCA9IGJ1c3dpZHRoOworCQkJeGxhdGUrKzsKKwkJCWRldl9kYmcoJmljaS0+ZGV2LAorCQkJCSJQcm92aWRpbmcgZm9ybWF0ICVzIGluIHBhc3MtdGhyb3VnaCBtb2RlXG4iLAorCQkJCWljZC0+Zm9ybWF0c1tpZHhdLm5hbWUpOworCQl9CisJfQorCisJcmV0dXJuIGZvcm1hdHM7Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZpZ3VyZV9nZW9tZXRyeShzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0sCisJCQkgICAgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3sKKwl1MzIgY3RybCwgd2lkdGhfZmllbGQsIGhlaWdodF9maWVsZDsKKworCS8qIFNldHVwIGZyYW1lIHNpemUgLSB0aGlzIGNhbm5vdCBiZSBjaGFuZ2VkIG9uLXRoZS1mbHkuLi4gKi8KKwl3aWR0aF9maWVsZCA9IHJlY3QtPndpZHRoIC0gMTsKKwloZWlnaHRfZmllbGQgPSByZWN0LT5oZWlnaHQgLSAxOworCWNzaV9yZWdfd3JpdGUobXgzX2NhbSwgd2lkdGhfZmllbGQgfCAoaGVpZ2h0X2ZpZWxkIDw8IDE2KSwgQ1NJX1NFTlNfRlJNX1NJWkUpOworCisJY3NpX3JlZ193cml0ZShteDNfY2FtLCB3aWR0aF9maWVsZCA8PCAxNiwgQ1NJX0ZMQVNIX1NUUk9CRV8xKTsKKwljc2lfcmVnX3dyaXRlKG14M19jYW0sIChoZWlnaHRfZmllbGQgPDwgMTYpIHwgMHgyMiwgQ1NJX0ZMQVNIX1NUUk9CRV8yKTsKKworCWNzaV9yZWdfd3JpdGUobXgzX2NhbSwgd2lkdGhfZmllbGQgfCAoaGVpZ2h0X2ZpZWxkIDw8IDE2KSwgQ1NJX0FDVF9GUk1fU0laRSk7CisKKwkvKiAuLi5hbmQgcG9zaXRpb24gKi8KKwljdHJsID0gY3NpX3JlZ19yZWFkKG14M19jYW0sIENTSV9PVVRfRlJNX0NUUkwpICYgMHhmZmZmMDAwMDsKKwkvKiBTZW5zb3IgZG9lcyB0aGUgY3JvcHBpbmcgKi8KKwljc2lfcmVnX3dyaXRlKG14M19jYW0sIGN0cmwgfCAwIHwgKDAgPDwgOCksIENTSV9PVVRfRlJNX0NUUkwpOworCisJLyoKKwkgKiBObyBuZWVkIHRvIGZyZWUgcmVzb3VyY2VzIGhlcmUgaWYgd2UgZmFpbCwgd2UnbGwgc2VlIGlmIHdlIG5lZWQgdG8KKwkgKiBkbyB0aGlzIG5leHQgdGltZSB3ZSBhcmUgY2FsbGVkCisJICovCit9CisKK3N0YXRpYyBpbnQgYWNxdWlyZV9kbWFfY2hhbm5lbChzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0pCit7CisJZG1hX2NhcF9tYXNrX3QgbWFzazsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisJc3RydWN0IGlkbWFjX2NoYW5uZWwgKippY2hhbiA9ICZteDNfY2FtLT5pZG1hY19jaGFubmVsWzBdOworCS8qIFdlIGhhdmUgdG8gdXNlIElETUFDX0lDXzcgZm9yIEJheWVyIC8gZ2VuZXJpYyBkYXRhICovCisJc3RydWN0IGRtYV9jaGFuX3JlcXVlc3QgcnEgPSB7Lm14M19jYW0gPSBteDNfY2FtLAorCQkJCSAgICAgIC5pZCA9IElETUFDX0lDXzd9OworCisJaWYgKCppY2hhbikgeworCQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwgKl92YjsKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbCgmKCppY2hhbiktPmRtYV9jaGFuKTsKKwkJKmljaGFuID0gTlVMTDsKKwkJbXgzX2NhbS0+YWN0aXZlID0gTlVMTDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZiLCBfdmIsICZteDNfY2FtLT5jYXB0dXJlLCBxdWV1ZSkgeworCQkJbGlzdF9kZWxfaW5pdCgmdmItPnF1ZXVlKTsKKwkJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX0VSUk9SOworCQkJd2FrZV91cCgmdmItPmRvbmUpOworCQl9CisJfQorCisJZG1hX2NhcF96ZXJvKG1hc2spOworCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX1BSSVZBVEUsIG1hc2spOworCWNoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGNoYW5fZmlsdGVyLCAmcnEpOworCWlmICghY2hhbikKKwkJcmV0dXJuIC1FQlVTWTsKKworCSppY2hhbiA9IHRvX2lkbWFjX2NoYW4oY2hhbik7CisJKCppY2hhbiktPmNsaWVudCA9IG14M19jYW07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDNfY2FtZXJhX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OworCisJLyoKKwkgKiBXZSBub3cga25vdyBwaXhlbCBmb3JtYXRzIGFuZCBjYW4gZGVjaWRlIHVwb24gRE1BLWNoYW5uZWwocykKKwkgKiBTbyBmYXIgb25seSBkaXJlY3QgY2FtZXJhLXRvLW1lbW9yeSBpcyBzdXBwb3J0ZWQKKwkgKi8KKwlpZiAoY2hhbm5lbF9jaGFuZ2VfcmVxdWVzdGVkKGljZCwgcmVjdCkpIHsKKwkJaW50IHJldCA9IGFjcXVpcmVfZG1hX2NoYW5uZWwobXgzX2NhbSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwljb25maWd1cmVfZ2VvbWV0cnkobXgzX2NhbSwgcmVjdCk7CisKKwlyZXR1cm4gaWNkLT5vcHMtPnNldF9jcm9wKGljZCwgcmVjdCk7Cit9CisKK3N0YXRpYyBpbnQgbXgzX2NhbWVyYV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCXN0cnVjdCB2NGwyX3JlY3QgcmVjdCA9IHsKKwkJLmxlZnQJPSBpY2QtPnhfY3VycmVudCwKKwkJLnRvcAk9IGljZC0+eV9jdXJyZW50LAorCQkud2lkdGgJPSBwaXgtPndpZHRoLAorCQkuaGVpZ2h0CT0gcGl4LT5oZWlnaHQsCisJfTsKKwlpbnQgcmV0OworCisJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeC0+cGl4ZWxmb3JtYXQpOworCWlmICgheGxhdGUpIHsKKwkJZGV2X3dhcm4oJmljaS0+ZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4LT5waXhlbGZvcm1hdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGFjcXVpcmVfZG1hX2NoYW5uZWwobXgzX2NhbSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIE1pZ2h0IGhhdmUgdG8gcGVyZm9ybSBhIGNvbXBsZXRlIGludGVyZmFjZSBpbml0aWFsaXNhdGlvbiBsaWtlIGluCisJICogaXB1X2NzaV9pbml0X2ludGVyZmFjZSgpIGluIG14Y192NGwyX3NfcGFyYW0oKS4gQWxzbyBjb25zaWRlcgorCSAqIG14Y192NGwyX3NfZm10KCkKKwkgKi8KKworCWNvbmZpZ3VyZV9nZW9tZXRyeShteDNfY2FtLCAmcmVjdCk7CisKKwlyZXQgPSBpY2QtPm9wcy0+c2V0X2ZtdChpY2QsIGYpOworCWlmICghcmV0KSB7CisJCWljZC0+YnVzd2lkdGggPSB4bGF0ZS0+YnVzd2lkdGg7CisJCWljZC0+Y3VycmVudF9mbXQgPSB4bGF0ZS0+aG9zdF9mbXQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBteDNfY2FtZXJhX3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlfX3UzMiBwaXhmbXQgPSBwaXgtPnBpeGVsZm9ybWF0OworCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKKwlpbnQgcmV0OworCisJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeGZtdCk7CisJaWYgKHBpeGZtdCAmJiAheGxhdGUpIHsKKwkJZGV2X3dhcm4oJmljaS0+ZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogbGltaXQgdG8gTVgzIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAqLworCWlmIChwaXgtPmhlaWdodCA+IDQwOTYpCisJCXBpeC0+aGVpZ2h0ID0gNDA5NjsKKwlpZiAocGl4LT53aWR0aCA+IDQwOTYpCisJCXBpeC0+d2lkdGggPSA0MDk2OworCisJcGl4LT5ieXRlc3BlcmxpbmUgPSBwaXgtPndpZHRoICoKKwkJRElWX1JPVU5EX1VQKHhsYXRlLT5ob3N0X2ZtdC0+ZGVwdGgsIDgpOworCXBpeC0+c2l6ZWltYWdlID0gcGl4LT5oZWlnaHQgKiBwaXgtPmJ5dGVzcGVybGluZTsKKworCS8qIGNhbWVyYSBoYXMgdG8gc2VlIGl0cyBmb3JtYXQsIGJ1dCB0aGUgdXNlciB0aGUgb3JpZ2luYWwgb25lICovCisJcGl4LT5waXhlbGZvcm1hdCA9IHhsYXRlLT5jYW1fZm10LT5mb3VyY2M7CisJLyogbGltaXQgdG8gc2Vuc29yIGNhcGFiaWxpdGllcyAqLworCXJldCA9IGljZC0+b3BzLT50cnlfZm10KGljZCwgZik7CisJcGl4LT5waXhlbGZvcm1hdCA9IHhsYXRlLT5ob3N0X2ZtdC0+Zm91cmNjOworCisJZmllbGQgPSBwaXgtPmZpZWxkOworCisJaWYgKGZpZWxkID09IFY0TDJfRklFTERfQU5ZKSB7CisJCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJfSBlbHNlIGlmIChmaWVsZCAhPSBWNEwyX0ZJRUxEX05PTkUpIHsKKwkJZGV2X2VycigmaWNkLT5kZXYsICJGaWVsZCB0eXBlICVkIHVuc3VwcG9ydGVkLlxuIiwgZmllbGQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG14M19jYW1lcmFfcmVxYnVmcyhzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBteDNfY2FtZXJhX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKnB0KQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiB2aWRlb2J1Zl9wb2xsX3N0cmVhbShmaWxlLCAmaWNmLT52Yl92aWRxLCBwdCk7Cit9CisKK3N0YXRpYyBpbnQgbXgzX2NhbWVyYV9xdWVyeWNhcChzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2ksCisJCQkgICAgICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQoreworCS8qIGNhcC0+bmFtZSBpcyBzZXQgYnkgdGhlIGZpcmVuZGx5IGNhbGxlcjotPiAqLworCXN0cmxjcHkoY2FwLT5jYXJkLCAiaS5NWDN4IENhbWVyYSIsIHNpemVvZihjYXAtPmNhcmQpKTsKKwljYXAtPnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTigwLCAyLCAyKTsKKwljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDNfY2FtZXJhX3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIF9fdTMyIHBpeGZtdCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CisJdW5zaWduZWQgbG9uZyBidXNfZmxhZ3MsIGNhbWVyYV9mbGFncywgY29tbW9uX2ZsYWdzOworCXUzMiBkdywgc2Vuc19jb25mOworCWludCByZXQgPSB0ZXN0X3BsYXRmb3JtX3BhcmFtKG14M19jYW0sIGljZC0+YnVzd2lkdGgsICZidXNfZmxhZ3MpOworCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7CisKKwl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4Zm10KTsKKwlpZiAoIXhsYXRlKSB7CisJCWRldl93YXJuKCZpY2ktPmRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeGZtdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9kYmcoJmljaS0+ZGV2LCAicmVxdWVzdGVkIGJ1cyB3aWR0aCAlZCBiaXQ6ICVkXG4iLAorCQlpY2QtPmJ1c3dpZHRoLCByZXQpOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwljYW1lcmFfZmxhZ3MgPSBpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtKGljZCk7CisKKwljb21tb25fZmxhZ3MgPSBzb2NfY2FtZXJhX2J1c19wYXJhbV9jb21wYXRpYmxlKGNhbWVyYV9mbGFncywgYnVzX2ZsYWdzKTsKKwlpZiAoIWNvbW1vbl9mbGFncykgeworCQlkZXZfZGJnKCZpY2ktPmRldiwgIm5vIGNvbW1vbiBmbGFnczogY2FtZXJhICVseCwgaG9zdCAlbHhcbiIsCisJCQljYW1lcmFfZmxhZ3MsIGJ1c19mbGFncyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIE1ha2UgY2hvaWNlcywgYmFzZWQgb24gcGxhdGZvcm0gcHJlZmVyZW5jZXMgKi8KKwlpZiAoKGNvbW1vbl9mbGFncyAmIFNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIKSAmJgorCSAgICAoY29tbW9uX2ZsYWdzICYgU09DQU1fSFNZTkNfQUNUSVZFX0xPVykpIHsKKwkJaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9IU1ApCisJCQljb21tb25fZmxhZ3MgJj0gflNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIOworCQllbHNlCisJCQljb21tb25fZmxhZ3MgJj0gflNPQ0FNX0hTWU5DX0FDVElWRV9MT1c7CisJfQorCisJaWYgKChjb21tb25fZmxhZ3MgJiBTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCkgJiYKKwkgICAgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cpKSB7CisJCWlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfVlNQKQorCQkJY29tbW9uX2ZsYWdzICY9IH5TT0NBTV9WU1lOQ19BQ1RJVkVfSElHSDsKKwkJZWxzZQorCQkJY29tbW9uX2ZsYWdzICY9IH5TT0NBTV9WU1lOQ19BQ1RJVkVfTE9XOworCX0KKworCWlmICgoY29tbW9uX2ZsYWdzICYgU09DQU1fREFUQV9BQ1RJVkVfSElHSCkgJiYKKwkgICAgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX0RBVEFfQUNUSVZFX0xPVykpIHsKKwkJaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EUCkKKwkJCWNvbW1vbl9mbGFncyAmPSB+U09DQU1fREFUQV9BQ1RJVkVfSElHSDsKKwkJZWxzZQorCQkJY29tbW9uX2ZsYWdzICY9IH5TT0NBTV9EQVRBX0FDVElWRV9MT1c7CisJfQorCisJaWYgKChjb21tb25fZmxhZ3MgJiBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcpICYmCisJICAgIChjb21tb25fZmxhZ3MgJiBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HKSkgeworCQlpZiAobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX1BDUCkKKwkJCWNvbW1vbl9mbGFncyAmPSB+U09DQU1fUENMS19TQU1QTEVfUklTSU5HOworCQllbHNlCisJCQljb21tb25fZmxhZ3MgJj0gflNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkc7CisJfQorCisJLyogTWFrZSB0aGUgY2FtZXJhIHdvcmsgaW4gd2lkZXN0IGNvbW1vbiBtb2RlLCB3ZSdsbCB0YWtlIGNhcmUgb2YKKwkgKiB0aGUgcmVzdCAqLworCWlmIChjb21tb25fZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfMTUpCisJCWNvbW1vbl9mbGFncyA9IChjb21tb25fZmxhZ3MgJiB+U09DQU1fREFUQVdJRFRIX01BU0spIHwKKwkJCVNPQ0FNX0RBVEFXSURUSF8xNTsKKwllbHNlIGlmIChjb21tb25fZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfMTApCisJCWNvbW1vbl9mbGFncyA9IChjb21tb25fZmxhZ3MgJiB+U09DQU1fREFUQVdJRFRIX01BU0spIHwKKwkJCVNPQ0FNX0RBVEFXSURUSF8xMDsKKwllbHNlIGlmIChjb21tb25fZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfOCkKKwkJY29tbW9uX2ZsYWdzID0gKGNvbW1vbl9mbGFncyAmIH5TT0NBTV9EQVRBV0lEVEhfTUFTSykgfAorCQkJU09DQU1fREFUQVdJRFRIXzg7CisJZWxzZQorCQljb21tb25fZmxhZ3MgPSAoY29tbW9uX2ZsYWdzICYgflNPQ0FNX0RBVEFXSURUSF9NQVNLKSB8CisJCQlTT0NBTV9EQVRBV0lEVEhfNDsKKworCXJldCA9IGljZC0+b3BzLT5zZXRfYnVzX3BhcmFtKGljZCwgY29tbW9uX2ZsYWdzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogU28gZmFyIG9ubHkgZ2F0ZWQgY2xvY2sgbW9kZSBpcyBzdXBwb3J0ZWQuIEFkZCBhIGxpbmUKKwkgKgkoMyA8PCBDU0lfU0VOU19DT05GX1NFTlNfUFJUQ0xfU0hJRlQpIHwKKwkgKiBiZWxvdyBhbmQgc2VsZWN0IHRoZSByZXF1aXJlZCBtb2RlIHdoZW4gc3VwcG9ydGluZyBvdGhlcgorCSAqIHN5bmNocm9uaXNhdGlvbiBwcm90b2NvbHMuCisJICovCisJc2Vuc19jb25mID0gY3NpX3JlZ19yZWFkKG14M19jYW0sIENTSV9TRU5TX0NPTkYpICYKKwkJfigoMSA8PCBDU0lfU0VOU19DT05GX1ZTWU5DX1BPTF9TSElGVCkgfAorCQkgICgxIDw8IENTSV9TRU5TX0NPTkZfSFNZTkNfUE9MX1NISUZUKSB8CisJCSAgKDEgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX1BPTF9TSElGVCkgfAorCQkgICgxIDw8IENTSV9TRU5TX0NPTkZfUElYX0NMS19QT0xfU0hJRlQpIHwKKwkJICAoMyA8PCBDU0lfU0VOU19DT05GX0RBVEFfRk1UX1NISUZUKSB8CisJCSAgKDMgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX1dJRFRIX1NISUZUKSk7CisKKwkvKiBUT0RPOiBTdXBwb3J0IFJHQiBhbmQgWVVWIGZvcm1hdHMgKi8KKworCS8qIFRoaXMgaGFzIGJlZW4gc2V0IGluIG14M19jYW1lcmFfYWN0aXZhdGUoKSwgYnV0IHdlIGNsZWFyIGl0IGFib3ZlICovCisJc2Vuc19jb25mIHw9IENTSV9TRU5TX0NPTkZfREFUQV9GTVRfQkFZRVI7CisKKwlpZiAoY29tbW9uX2ZsYWdzICYgU09DQU1fUENMS19TQU1QTEVfRkFMTElORykKKwkJc2Vuc19jb25mIHw9IDEgPDwgQ1NJX1NFTlNfQ09ORl9QSVhfQ0xLX1BPTF9TSElGVDsKKwlpZiAoY29tbW9uX2ZsYWdzICYgU09DQU1fSFNZTkNfQUNUSVZFX0xPVykKKwkJc2Vuc19jb25mIHw9IDEgPDwgQ1NJX1NFTlNfQ09ORl9IU1lOQ19QT0xfU0hJRlQ7CisJaWYgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cpCisJCXNlbnNfY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfVlNZTkNfUE9MX1NISUZUOworCWlmIChjb21tb25fZmxhZ3MgJiBTT0NBTV9EQVRBX0FDVElWRV9MT1cpCisJCXNlbnNfY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfREFUQV9QT0xfU0hJRlQ7CisKKwkvKiBKdXN0IGRvIHdoYXQgd2UncmUgYXNrZWQgdG8gZG8gKi8KKwlzd2l0Y2ggKHhsYXRlLT5ob3N0X2ZtdC0+ZGVwdGgpIHsKKwljYXNlIDQ6CisJCWR3ID0gMCA8PCBDU0lfU0VOU19DT05GX0RBVEFfV0lEVEhfU0hJRlQ7CisJCWJyZWFrOworCWNhc2UgODoKKwkJZHcgPSAxIDw8IENTSV9TRU5TX0NPTkZfREFUQV9XSURUSF9TSElGVDsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJZHcgPSAyIDw8IENTSV9TRU5TX0NPTkZfREFUQV9XSURUSF9TSElGVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyoKKwkJICogQWN0dWFsbHkgaXQgY2FuIG9ubHkgYmUgMTUgbm93LCBkZWZhdWx0IGlzIGp1c3QgdG8gc2lsZW5jZQorCQkgKiBjb21waWxlciB3YXJuaW5ncworCQkgKi8KKwljYXNlIDE1OgorCQlkdyA9IDMgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX1dJRFRIX1NISUZUOworCX0KKworCWNzaV9yZWdfd3JpdGUobXgzX2NhbSwgc2Vuc19jb25mIHwgZHcsIENTSV9TRU5TX0NPTkYpOworCisJZGV2X2RiZygmaWNpLT5kZXYsICJTZXQgU0VOU19DT05GIHRvICV4XG4iLCBzZW5zX2NvbmYgfCBkdyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2hvc3Rfb3BzIG14M19zb2NfY2FtZXJhX2hvc3Rfb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuYWRkCQk9IG14M19jYW1lcmFfYWRkX2RldmljZSwKKwkucmVtb3ZlCQk9IG14M19jYW1lcmFfcmVtb3ZlX2RldmljZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAk9IG14M19jYW1lcmFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG14M19jYW1lcmFfcmVzdW1lLAorI2VuZGlmCisJLnNldF9jcm9wCT0gbXgzX2NhbWVyYV9zZXRfY3JvcCwKKwkuc2V0X2ZtdAk9IG14M19jYW1lcmFfc2V0X2ZtdCwKKwkudHJ5X2ZtdAk9IG14M19jYW1lcmFfdHJ5X2ZtdCwKKwkuZ2V0X2Zvcm1hdHMJPSBteDNfY2FtZXJhX2dldF9mb3JtYXRzLAorCS5pbml0X3ZpZGVvYnVmCT0gbXgzX2NhbWVyYV9pbml0X3ZpZGVvYnVmLAorCS5yZXFidWZzCT0gbXgzX2NhbWVyYV9yZXFidWZzLAorCS5wb2xsCQk9IG14M19jYW1lcmFfcG9sbCwKKwkucXVlcnljYXAJPSBteDNfY2FtZXJhX3F1ZXJ5Y2FwLAorCS5zZXRfYnVzX3BhcmFtCT0gbXgzX2NhbWVyYV9zZXRfYnVzX3BhcmFtLAorfTsKKworc3RhdGljIGludCBteDNfY2FtZXJhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICpzb2NfaG9zdDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlZ2V0cmVzOworCX0KKworCW14M19jYW0gPSB2bWFsbG9jKHNpemVvZigqbXgzX2NhbSkpOworCWlmICghbXgzX2NhbSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgbXgzIGNhbWVyYSBvYmplY3RcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVhbGxvYzsKKwl9CisJbWVtc2V0KG14M19jYW0sIDAsIHNpemVvZigqbXgzX2NhbSkpOworCisJbXgzX2NhbS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiY3NpX2NsayIpOworCWlmIChJU19FUlIobXgzX2NhbS0+Y2xrKSkgeworCQllcnIgPSBQVFJfRVJSKG14M19jYW0tPmNsayk7CisJCWdvdG8gZWNsa2dldDsKKwl9CisKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgbXgzX2NhbSk7CisKKwlteDNfY2FtLT5wZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCW14M19jYW0tPnBsYXRmb3JtX2ZsYWdzID0gbXgzX2NhbS0+cGRhdGEtPmZsYWdzOworCWlmICghKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgKE1YM19DQU1FUkFfREFUQVdJRFRIXzQgfAorCQkJTVgzX0NBTUVSQV9EQVRBV0lEVEhfOCB8IE1YM19DQU1FUkFfREFUQVdJRFRIXzEwIHwKKwkJCU1YM19DQU1FUkFfREFUQVdJRFRIXzE1KSkpIHsKKwkJLyogUGxhdGZvcm0gaGFzbid0IHNldCBhdmFpbGFibGUgZGF0YSB3aWR0aHMuIFRoaXMgaXMgYmFkLgorCQkgKiBXYXJuIGFuZCB1c2UgYSBkZWZhdWx0LiAqLworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiV0FSTklORyEgUGxhdGZvcm0gaGFzbid0IHNldCBhdmFpbGFibGUgIgorCQkJICJkYXRhIHdpZHRocywgdXNpbmcgZGVmYXVsdCA4IGJpdFxuIik7CisJCW14M19jYW0tPnBsYXRmb3JtX2ZsYWdzIHw9IE1YM19DQU1FUkFfREFUQVdJRFRIXzg7CisJfQorCisJbXgzX2NhbS0+bWNsayA9IG14M19jYW0tPnBkYXRhLT5tY2xrXzEwa2h6ICogMTAwMDA7CisJaWYgKCFteDNfY2FtLT5tY2xrKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkgIm1jbGtfMTBraHogPT0gMCEgUGxlYXNlLCBmaXggeW91ciBwbGF0Zm9ybSBkYXRhLiAiCisJCQkgIlVzaW5nIGRlZmF1bHQgMjBNSHpcbiIpOworCQlteDNfY2FtLT5tY2xrID0gMjAwMDAwMDA7CisJfQorCisJLyogbGlzdCBvZiB2aWRlby1idWZmZXJzICovCisJSU5JVF9MSVNUX0hFQUQoJm14M19jYW0tPmNhcHR1cmUpOworCXNwaW5fbG9ja19pbml0KCZteDNfY2FtLT5sb2NrKTsKKworCWJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWlmICghYmFzZSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVpb3JlbWFwOworCX0KKworCW14M19jYW0tPmJhc2UJPSBiYXNlOworCW14M19jYW0tPmRldgk9ICZwZGV2LT5kZXY7CisKKwlzb2NfaG9zdAkJPSAmbXgzX2NhbS0+c29jX2hvc3Q7CisJc29jX2hvc3QtPmRydl9uYW1lCT0gTVgzX0NBTV9EUlZfTkFNRTsKKwlzb2NfaG9zdC0+b3BzCQk9ICZteDNfc29jX2NhbWVyYV9ob3N0X29wczsKKwlzb2NfaG9zdC0+cHJpdgkJPSBteDNfY2FtOworCXNvY19ob3N0LT5kZXYucGFyZW50CT0gJnBkZXYtPmRldjsKKwlzb2NfaG9zdC0+bnIJCT0gcGRldi0+aWQ7CisJZXJyID0gc29jX2NhbWVyYV9ob3N0X3JlZ2lzdGVyKHNvY19ob3N0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVjYW1ob3N0cmVnOworCisJLyogSURNQUMgaW50ZXJmYWNlICovCisJZG1hZW5naW5lX2dldCgpOworCisJcmV0dXJuIDA7CisKK2VjYW1ob3N0cmVnOgorCWlvdW5tYXAoYmFzZSk7CitlaW9yZW1hcDoKKwljbGtfcHV0KG14M19jYW0tPmNsayk7CitlY2xrZ2V0OgorCXZmcmVlKG14M19jYW0pOworZWFsbG9jOgorZWdldHJlczoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBteDNfY2FtZXJhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJY2xrX3B1dChteDNfY2FtLT5jbGspOworCisJc29jX2NhbWVyYV9ob3N0X3VucmVnaXN0ZXIoJm14M19jYW0tPnNvY19ob3N0KTsKKworCWlvdW5tYXAobXgzX2NhbS0+YmFzZSk7CisKKwkvKgorCSAqIFRoZSBjaGFubmVsIGhhcyBlaXRoZXIgbm90IGJlZW4gYWxsb2NhdGVkLAorCSAqIG9yIHNob3VsZCBoYXZlIGJlZW4gcmVsZWFzZWQKKwkgKi8KKwlpZiAoV0FSTl9PTihteDNfY2FtLT5pZG1hY19jaGFubmVsWzBdKSkKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbCgmbXgzX2NhbS0+aWRtYWNfY2hhbm5lbFswXS0+ZG1hX2NoYW4pOworCisJdmZyZWUobXgzX2NhbSk7CisKKwlkbWFlbmdpbmVfcHV0KCk7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiaS5NWDN4IENhbWVyYSBkcml2ZXIgdW5sb2FkZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG14M19jYW1lcmFfZHJpdmVyID0geworCS5kcml2ZXIgCT0geworCQkubmFtZQk9IE1YM19DQU1fRFJWX05BTUUsCisJfSwKKwkucHJvYmUJCT0gbXgzX2NhbWVyYV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKG14M19jYW1lcmFfcmVtb3ZlKSwKK307CisKKworc3RhdGljIGludCBfX2RldmluaXQgbXgzX2NhbWVyYV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXgzX2NhbWVyYV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXgzX2NhbWVyYV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm14M19jYW1lcmFfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobXgzX2NhbWVyYV9pbml0KTsKK21vZHVsZV9leGl0KG14M19jYW1lcmFfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiaS5NWDN4IFNvQyBDYW1lcmEgSG9zdCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkd1ZW5uYWRpIExpYWtob3ZldHNraSA8bGdAZGVueC5kZT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jCmluZGV4IGUzY2JlMTQuLjg0YWVjNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYwpAQCAtMjUsMTYgKzI1LDIwIEBACiAKICNpbmNsdWRlIDxtZWRpYS9zYWE3MTQ2X3Z2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS9zYWE3MTE1Lmg+CiAKICNpbmNsdWRlICJteGIuaCIKICNpbmNsdWRlICJ0ZWE2NDE1Yy5oIgogI2luY2x1ZGUgInRlYTY0MjAuaCIKLSNpbmNsdWRlICJ0ZGE5ODQwLmgiCiAKLSNkZWZpbmUgSTJDX1NBQTcxMTEgMHgyNAorI2RlZmluZQlJMkNfU0FBNTI0NkEgIDB4MTEKKyNkZWZpbmUgSTJDX1NBQTcxMTFBICAweDI0CisjZGVmaW5lCUkyQ19UREE5ODQwICAgMHg0MgorI2RlZmluZQlJMkNfVEVBNjQxNUMgIDB4NDMKKyNkZWZpbmUJSTJDX1RFQTY0MjBfMSAweDRjCisjZGVmaW5lCUkyQ19URUE2NDIwXzIgMHg0ZAorI2RlZmluZQlJMkNfVFVORVIgICAgIDB4NjAKIAogI2RlZmluZSBNWEJfQk9BUkRfQ0FOX0RPX1ZCSShkZXYpICAgKGRldi0+cmV2aXNpb24gIT0gMCkKIApAQCAtNzksNTcgKzgzLDM1IEBACiBzdGF0aWMgaW50IHZpZGVvX2F1ZGlvX2Nvbm5lY3RbTVhCX0lOUFVUU10gPQogCXsgMCwgMSwgMywgMyB9OwogCi0vKiB0aGVzZSBhcmUgdGhlIG5lY2Vzc2FyeSBpbnB1dC1vdXRwdXQtcGlucyBmb3IgYnJpbmdpbmcgb25lIGF1ZGlvIHNvdXJjZQotKHNlZSBhYm92ZSkgdG8gdGhlIENELW91dHB1dCAqLwotc3RhdGljIHN0cnVjdCB0ZWE2NDIwX211bHRpcGxleCBURUE2NDIwX2NkW01YQl9BVURJT1MrMV1bMl0gPQotCQl7Ci0JCXt7MSwxLDB9LHsxLDEsMH19LAkvKiBUdW5lciAqLwotCQl7ezUsMSwwfSx7NiwxLDB9fSwJLyogQVVYIDEgKi8KLQkJe3s0LDEsMH0sezYsMSwwfX0sCS8qIEFVWCAyICovCi0JCXt7MywxLDB9LHs2LDEsMH19LAkvKiBBVVggMyAqLwotCQl7ezEsMSwwfSx7MywxLDB9fSwJLyogUmFkaW8gKi8KLQkJe3sxLDEsMH0sezIsMSwwfX0sCS8qIENELVJvbSAqLwotCQl7ezYsMSwwfSx7NiwxLDB9fQkvKiBNdXRlICovCi0JCX07CisvKiBUaGVzZSBhcmUgdGhlIG5lY2Vzc2FyeSBpbnB1dC1vdXRwdXQtcGlucyBmb3IgYnJpbmdpbmcgb25lIGF1ZGlvIHNvdXJjZQorICAgKHNlZSBhYm92ZSkgdG8gdGhlIENELW91dHB1dC4gTm90ZSB0aGF0IGdhaW4gaXMgc2V0IHRvIDAgaW4gdGhpcyB0YWJsZS4gKi8KK3N0YXRpYyBzdHJ1Y3QgdjRsMl9yb3V0aW5nIFRFQTY0MjBfY2RbTVhCX0FVRElPUyArIDFdWzJdID0geworCXsgeyAxLCAxIH0sIHsgMSwgMSB9IH0sCS8qIFR1bmVyICovCisJeyB7IDUsIDEgfSwgeyA2LCAxIH0gfSwJLyogQVVYIDEgKi8KKwl7IHsgNCwgMSB9LCB7IDYsIDEgfSB9LAkvKiBBVVggMiAqLworCXsgeyAzLCAxIH0sIHsgNiwgMSB9IH0sCS8qIEFVWCAzICovCisJeyB7IDEsIDEgfSwgeyAzLCAxIH0gfSwJLyogUmFkaW8gKi8KKwl7IHsgMSwgMSB9LCB7IDIsIDEgfSB9LAkvKiBDRC1Sb20gKi8KKwl7IHsgNiwgMSB9LCB7IDYsIDEgfSB9CS8qIE11dGUgKi8KK307CiAKLS8qIHRoZXNlIGFyZSB0aGUgbmVjZXNzYXJ5IGlucHV0LW91dHB1dC1waW5zIGZvciBicmluZ2luZyBvbmUgYXVkaW8gc291cmNlCi0oc2VlIGFib3ZlKSB0byB0aGUgbGluZS1vdXRwdXQgKi8KLXN0YXRpYyBzdHJ1Y3QgdGVhNjQyMF9tdWx0aXBsZXggVEVBNjQyMF9saW5lW01YQl9BVURJT1MrMV1bMl0gPQotCQl7Ci0JCXt7MiwzLDB9LHsxLDIsMH19LAotCQl7ezUsMywwfSx7NiwyLDB9fSwKLQkJe3s0LDMsMH0sezYsMiwwfX0sCi0JCXt7MywzLDB9LHs2LDIsMH19LAotCQl7ezIsMywwfSx7MywyLDB9fSwKLQkJe3syLDMsMH0sezIsMiwwfX0sCi0JCXt7NiwzLDB9LHs2LDIsMH19CS8qIE11dGUgKi8KLQkJfTsKKy8qIFRoZXNlIGFyZSB0aGUgbmVjZXNzYXJ5IGlucHV0LW91dHB1dC1waW5zIGZvciBicmluZ2luZyBvbmUgYXVkaW8gc291cmNlCisgICAoc2VlIGFib3ZlKSB0byB0aGUgbGluZS1vdXRwdXQuIE5vdGUgdGhhdCBnYWluIGlzIHNldCB0byAwIGluIHRoaXMgdGFibGUuICovCitzdGF0aWMgc3RydWN0IHY0bDJfcm91dGluZyBURUE2NDIwX2xpbmVbTVhCX0FVRElPUyArIDFdWzJdID0geworCXsgeyAyLCAzIH0sIHsgMSwgMiB9IH0sCisJeyB7IDUsIDMgfSwgeyA2LCAyIH0gfSwKKwl7IHsgNCwgMyB9LCB7IDYsIDIgfSB9LAorCXsgeyAzLCAzIH0sIHsgNiwgMiB9IH0sCisJeyB7IDIsIDMgfSwgeyAzLCAyIH0gfSwKKwl7IHsgMiwgMyB9LCB7IDIsIDIgfSB9LAorCXsgeyA2LCAzIH0sIHsgNiwgMiB9IH0JLyogTXV0ZSAqLworfTsKIAogI2RlZmluZSBNQVhDT05UUk9MUwkxCiBzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIG14Yl9jb250cm9sc1tdID0gewogCXsgVjRMMl9DSURfQVVESU9fTVVURSwgVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwgIk11dGUiLCAwLCAxLCAxLCAwLCAwIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uX2lvY3RscyBpb2N0bHNbXSA9IHsKLQl7IFZJRElPQ19FTlVNSU5QVVQsIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX0dfSU5QVVQsCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfU19JTlBVVCwJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19RVUVSWUNUUkwsIAlTQUE3MTQ2X0JFRk9SRSB9LAotCXsgVklESU9DX0dfQ1RSTCwJU0FBNzE0Nl9CRUZPUkUgfSwKLQl7IFZJRElPQ19TX0NUUkwsCVNBQTcxNDZfQkVGT1JFIH0sCi0JeyBWSURJT0NfR19UVU5FUiwgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfU19UVU5FUiwgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfR19GUkVRVUVOQ1ksCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfU19GUkVRVUVOQ1ksIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX0dfQVVESU8sIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfQVVESU8sIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX0RCR19HX1JFR0lTVEVSLCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19EQkdfU19SRUdJU1RFUiwgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBNWEJfU19BVURJT19DRCwgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCS8qIGN1c3RvbSBjb250cm9sICovCi0JeyBNWEJfU19BVURJT19MSU5FLCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwJLyogY3VzdG9tIGNvbnRyb2wgKi8KLQl7IDAsCQkJMCB9Ci19OwotCiBzdHJ1Y3QgbXhiCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZQkqdmlkZW9fZGV2OwpAQCAtMTM3LDEyICsxMTksMTIgQEAKIAogCXN0cnVjdCBpMmNfYWRhcHRlcglpMmNfYWRhcHRlcjsKIAotCXN0cnVjdCBpMmNfY2xpZW50CSpzYWE3MTExYTsKLQlzdHJ1Y3QgaTJjX2NsaWVudAkqdGRhOTg0MDsKLQlzdHJ1Y3QgaTJjX2NsaWVudAkqdGVhNjQxNWM7Ci0Jc3RydWN0IGkyY19jbGllbnQJKnR1bmVyOwotCXN0cnVjdCBpMmNfY2xpZW50CSp0ZWE2NDIwXzE7Ci0Jc3RydWN0IGkyY19jbGllbnQJKnRlYTY0MjBfMjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYJKnNhYTcxMTFhOworCXN0cnVjdCB2NGwyX3N1YmRldgkqdGRhOTg0MDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYJKnRlYTY0MTVjOworCXN0cnVjdCB2NGwyX3N1YmRldgkqdHVuZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2CSp0ZWE2NDIwXzE7CisJc3RydWN0IHY0bDJfc3ViZGV2CSp0ZWE2NDIwXzI7CiAKIAlpbnQJY3VyX21vZGU7CS8qIGN1cnJlbnQgYXVkaW8gbW9kZSAobW9ubywgc3RlcmVvLCAuLi4pICovCiAJaW50CWN1cl9pbnB1dDsJLyogY3VycmVudCBpbnB1dCAqLwpAQCAtMTUwLDg0ICsxMzIsNTEgQEAKIAlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kJY3VyX2ZyZXE7CS8qIGN1cnJlbnQgZnJlcXVlbmN5IHRoZSB0dW5lciBpcyB0dW5lZCB0byAqLwogfTsKIAorI2RlZmluZSBzYWE3MTExYV9jYWxsKG14YiwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfc3ViZGV2X2NhbGwobXhiLT5zYWE3MTExYSwgbywgZiwgIyNhcmdzKQorI2RlZmluZSB0ZWE2NDIwXzFfY2FsbChteGIsIG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX3N1YmRldl9jYWxsKG14Yi0+dGVhNjQyMF8xLCBvLCBmLCAjI2FyZ3MpCisjZGVmaW5lIHRlYTY0MjBfMl9jYWxsKG14YiwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfc3ViZGV2X2NhbGwobXhiLT50ZWE2NDIwXzIsIG8sIGYsICMjYXJncykKKyNkZWZpbmUgdGRhOTg0MF9jYWxsKG14YiwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfc3ViZGV2X2NhbGwobXhiLT50ZGE5ODQwLCBvLCBmLCAjI2FyZ3MpCisjZGVmaW5lIHRlYTY0MTVjX2NhbGwobXhiLCBvLCBmLCBhcmdzLi4uKSBcCisJdjRsMl9zdWJkZXZfY2FsbChteGItPnRlYTY0MTVjLCBvLCBmLCAjI2FyZ3MpCisjZGVmaW5lIHR1bmVyX2NhbGwobXhiLCBvLCBmLCBhcmdzLi4uKSBcCisJdjRsMl9zdWJkZXZfY2FsbChteGItPnR1bmVyLCBvLCBmLCAjI2FyZ3MpCisjZGVmaW5lIGNhbGxfYWxsKGRldiwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKCZkZXYtPnY0bDJfZGV2LCAwLCBvLCBmLCAjI2FyZ3MpCisKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb24gZXh0ZW5zaW9uOwogCi1zdGF0aWMgaW50IG14Yl9jaGVja19jbGllbnRzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbXhiX3Byb2JlKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2KQogewotCXN0cnVjdCBteGIgKm14YiA9IGRhdGE7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGkyY192ZXJpZnlfY2xpZW50KGRldik7Ci0KLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoSTJDX0FERFJfVEVBNjQyMF8xID09IGNsaWVudC0+YWRkcikKLQkJbXhiLT50ZWE2NDIwXzEgPSBjbGllbnQ7Ci0JaWYgKEkyQ19BRERSX1RFQTY0MjBfMiA9PSBjbGllbnQtPmFkZHIpCi0JCW14Yi0+dGVhNjQyMF8yID0gY2xpZW50OwotCWlmIChJMkNfVEVBNjQxNUNfMiA9PSBjbGllbnQtPmFkZHIpCi0JCW14Yi0+dGVhNjQxNWMgPSBjbGllbnQ7Ci0JaWYgKEkyQ19BRERSX1REQTk4NDAgPT0gY2xpZW50LT5hZGRyKQotCQlteGItPnRkYTk4NDAgPSBjbGllbnQ7Ci0JaWYgKEkyQ19TQUE3MTExID09IGNsaWVudC0+YWRkcikKLQkJbXhiLT5zYWE3MTExYSA9IGNsaWVudDsKLQlpZiAoMHg2MCA9PSBjbGllbnQtPmFkZHIpCi0JCW14Yi0+dHVuZXIgPSBjbGllbnQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBteGJfcHJvYmUoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYpCi17Ci0Jc3RydWN0IG14YiogbXhiID0gTlVMTDsKLQlpbnQgcmVzdWx0OwotCi0JcmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoInNhYTcxMTUiKTsKLQlpZiAocmVzdWx0IDwgMCkgewotCQlwcmludGsoIm14Yjogc2FhNzExMSBpMmMgbW9kdWxlIG5vdCBhdmFpbGFibGUuXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXJlc3VsdCA9IHJlcXVlc3RfbW9kdWxlKCJ0ZWE2NDIwIik7Ci0JaWYgKHJlc3VsdCA8IDApIHsKLQkJcHJpbnRrKCJteGI6IHRlYTY0MjAgaTJjIG1vZHVsZSBub3QgYXZhaWxhYmxlLlxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyZXN1bHQgPSByZXF1ZXN0X21vZHVsZSgidGVhNjQxNWMiKTsKLQlpZiAocmVzdWx0IDwgMCkgewotCQlwcmludGsoIm14YjogdGVhNjQxNWMgaTJjIG1vZHVsZSBub3QgYXZhaWxhYmxlLlxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyZXN1bHQgPSByZXF1ZXN0X21vZHVsZSgidGRhOTg0MCIpOwotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCXByaW50aygibXhiOiB0ZGE5ODQwIGkyYyBtb2R1bGUgbm90IGF2YWlsYWJsZS5cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7Ci0JaWYgKHJlc3VsdCA8IDApIHsKLQkJcHJpbnRrKCJteGI6IHR1bmVyIGkyYyBtb2R1bGUgbm90IGF2YWlsYWJsZS5cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJc3RydWN0IG14YiAqbXhiID0gTlVMTDsKIAogCW14YiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBteGIpLCBHRlBfS0VSTkVMKTsKLQlpZiggTlVMTCA9PSBteGIgKSB7CisJaWYgKG14YiA9PSBOVUxMKSB7CiAJCURFQl9EKCgibm90IGVub3VnaCBrZXJuZWwgbWVtb3J5LlxuIikpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlteGItPmkyY19hZGFwdGVyID0gKHN0cnVjdCBpMmNfYWRhcHRlcikgewotCQkuY2xhc3MgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HLAotCX07Ci0KIAlzbnByaW50ZihteGItPmkyY19hZGFwdGVyLm5hbWUsIHNpemVvZihteGItPmkyY19hZGFwdGVyLm5hbWUpLCAibXhiJWQiLCBteGJfbnVtKTsKIAogCXNhYTcxNDZfaTJjX2FkYXB0ZXJfcHJlcGFyZShkZXYsICZteGItPmkyY19hZGFwdGVyLCBTQUE3MTQ2X0kyQ19CVVNfQklUX1JBVEVfNDgwKTsKLQlpZihpMmNfYWRkX2FkYXB0ZXIoJm14Yi0+aTJjX2FkYXB0ZXIpIDwgMCkgeworCWlmIChpMmNfYWRkX2FkYXB0ZXIoJm14Yi0+aTJjX2FkYXB0ZXIpIDwgMCkgewogCQlERUJfUygoImNhbm5vdCByZWdpc3RlciBpMmMtZGV2aWNlLiBza2lwcGluZy5cbiIpKTsKIAkJa2ZyZWUobXhiKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JLyogbG9vcCB0aHJvdWdoIGFsbCBpMmMtZGV2aWNlcyBvbiB0aGUgYnVzIGFuZCBsb29rIHdobyBpcyB0aGVyZSAqLwotCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmbXhiLT5pMmNfYWRhcHRlci5kZXYsIG14YiwgbXhiX2NoZWNrX2NsaWVudHMpOworCW14Yi0+c2FhNzExMWEgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZteGItPmkyY19hZGFwdGVyLCAic2FhNzExNSIsICJzYWE3MTExIiwgSTJDX1NBQTcxMTFBKTsKKwlteGItPnRlYTY0MjBfMSA9IHY0bDJfaTJjX25ld19zdWJkZXYoJm14Yi0+aTJjX2FkYXB0ZXIsICJ0ZWE2NDIwIiwgInRlYTY0MjAiLCBJMkNfVEVBNjQyMF8xKTsKKwlteGItPnRlYTY0MjBfMiA9IHY0bDJfaTJjX25ld19zdWJkZXYoJm14Yi0+aTJjX2FkYXB0ZXIsICJ0ZWE2NDIwIiwgInRlYTY0MjAiLCBJMkNfVEVBNjQyMF8yKTsKKwlteGItPnRlYTY0MTVjID0gdjRsMl9pMmNfbmV3X3N1YmRldigmbXhiLT5pMmNfYWRhcHRlciwgInRlYTY0MTVjIiwgInRlYTY0MTVjIiwgSTJDX1RFQTY0MTVDKTsKKwlteGItPnRkYTk4NDAgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZteGItPmkyY19hZGFwdGVyLCAidGRhOTg0MCIsICJ0ZGE5ODQwIiwgSTJDX1REQTk4NDApOworCW14Yi0+dHVuZXIgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZteGItPmkyY19hZGFwdGVyLCAidHVuZXIiLCAidHVuZXIiLCBJMkNfVFVORVIpOworCWlmICh2NGwyX2kyY19uZXdfc3ViZGV2KCZteGItPmkyY19hZGFwdGVyLCAic2FhNTI0NmEiLCAic2FhNTI0NmEiLCBJMkNfU0FBNTI0NkEpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIm14YjogZm91bmQgdGVsZXRleHQgZGVjb2RlclxuIik7CisJfQogCiAJLyogY2hlY2sgaWYgYWxsIGRldmljZXMgYXJlIHByZXNlbnQgKi8KIAlpZiAoIW14Yi0+dGVhNjQyMF8xIHx8ICFteGItPnRlYTY0MjBfMiB8fCAhbXhiLT50ZWE2NDE1YyB8fApAQCAtMzE1LDQ3ICsyNjQsNDUgQEAKIAlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwogCiAJaW50IGkgPSAwLCBlcnIgPSAwOwotCXN0cnVjdCB0ZWE2NDE1Y19tdWx0aXBsZXggdm07CiAKIAkvKiBzZWxlY3QgdmlkZW8gbW9kZSBpbiBzYWE3MTExYSAqLwotCW14Yi0+c2FhNzExMWEtPmRyaXZlci0+Y29tbWFuZChteGItPnNhYTcxMTFhLCBWSURJT0NfU19TVEQsICZzdGQpOworCXNhYTcxMTFhX2NhbGwobXhiLCB0dW5lciwgc19zdGQsIHN0ZCk7CiAKIAkvKiBzZWxlY3QgdHVuZXItb3V0cHV0IG9uIHNhYTcxMTFhICovCiAJaSA9IDA7CiAJcm91dGUuaW5wdXQgPSBTQUE3MTE1X0NPTVBPU0lURTA7CiAJcm91dGUub3V0cHV0ID0gU0FBNzExMV9GTVRfQ0NJUiB8IFNBQTcxMTFfVkJJX0JZUEFTUzsKLQlteGItPnNhYTcxMTFhLT5kcml2ZXItPmNvbW1hbmQobXhiLT5zYWE3MTExYSwgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkcsICZyb3V0ZSk7CisJc2FhNzExMWFfY2FsbChteGIsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAKIAkvKiBzZWxlY3QgYSB0dW5lciB0eXBlICovCiAJdHVuX3NldHVwLm1vZGVfbWFzayA9IFRfQU5BTE9HX1RWOwogCXR1bl9zZXR1cC5hZGRyID0gQUREUl9VTlNFVDsKIAl0dW5fc2V0dXAudHlwZSA9IFRVTkVSX1BISUxJUFNfUEFMOwotCW14Yi0+dHVuZXItPmRyaXZlci0+Y29tbWFuZChteGItPnR1bmVyLCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKKwl0dW5lcl9jYWxsKG14YiwgdHVuZXIsIHNfdHlwZV9hZGRyLCAmdHVuX3NldHVwKTsKIAkvKiB0dW5lIGluIHNvbWUgZnJlcXVlbmN5IG9uIHR1bmVyICovCiAJbXhiLT5jdXJfZnJlcS50dW5lciA9IDA7CiAJbXhiLT5jdXJfZnJlcS50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CiAJbXhiLT5jdXJfZnJlcS5mcmVxdWVuY3kgPSBmcmVxOwotCW14Yi0+dHVuZXItPmRyaXZlci0+Y29tbWFuZChteGItPnR1bmVyLCBWSURJT0NfU19GUkVRVUVOQ1ksCi0JCQkJCSZteGItPmN1cl9mcmVxKTsKKwl0dW5lcl9jYWxsKG14YiwgdHVuZXIsIHNfZnJlcXVlbmN5LCAmbXhiLT5jdXJfZnJlcSk7CiAKIAkvKiBzZXQgYSBkZWZhdWx0IHZpZGVvIHN0YW5kYXJkICovCi0JbXhiLT50dW5lci0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dHVuZXIsIFZJRElPQ19TX1NURCwgJnN0ZCk7CisJdHVuZXJfY2FsbChteGIsIHR1bmVyLCBzX3N0ZCwgc3RkKTsKIAogCS8qIG11dGUgYXVkaW8gb24gdGVhNjQyMHMgKi8KLQlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLCBURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfbGluZVs2XVswXSk7Ci0JbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMiwgVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2xpbmVbNl1bMV0pOwotCW14Yi0+dGVhNjQyMF8xLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzEsIFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9jZFs2XVswXSk7Ci0JbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMiwgVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2NkWzZdWzFdKTsKKwl0ZWE2NDIwXzFfY2FsbChteGIsIGF1ZGlvLCBzX3JvdXRpbmcsICZURUE2NDIwX2xpbmVbNl1bMF0pOworCXRlYTY0MjBfMl9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywgJlRFQTY0MjBfbGluZVs2XVsxXSk7CisJdGVhNjQyMF8xX2NhbGwobXhiLCBhdWRpbywgc19yb3V0aW5nLCAmVEVBNjQyMF9saW5lWzZdWzBdKTsKKwl0ZWE2NDIwXzJfY2FsbChteGIsIGF1ZGlvLCBzX3JvdXRpbmcsICZURUE2NDIwX2xpbmVbNl1bMV0pOwogCi0JLyogc3dpdGNoIHRvIHR1bmVyLWNoYW5uZWwgb24gdGVhNjQxNWMqLwotCXZtLm91dCA9IDE3OwotCXZtLmluICA9IDM7Ci0JbXhiLT50ZWE2NDE1Yy0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQxNWMsIFRFQTY0MTVDX1NXSVRDSCwgJnZtKTsKKwkvKiBzd2l0Y2ggdG8gdHVuZXItY2hhbm5lbCBvbiB0ZWE2NDE1YyAqLworCXJvdXRlLmlucHV0ID0gMzsKKwlyb3V0ZS5vdXRwdXQgPSAxNzsKKwl0ZWE2NDE1Y19jYWxsKG14YiwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAotCS8qIHNlbGVjdCB0dW5lci1vdXRwdXQgb24gbXVsdGljYWJsZSBvbiB0ZWE2NDE1YyovCi0Jdm0uaW4gID0gMzsKLQl2bS5vdXQgPSAxMzsKLQlteGItPnRlYTY0MTVjLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDE1YywgVEVBNjQxNUNfU1dJVENILCAmdm0pOworCS8qIHNlbGVjdCB0dW5lci1vdXRwdXQgb24gbXVsdGljYWJsZSBvbiB0ZWE2NDE1YyAqLworCXJvdXRlLmlucHV0ID0gMzsKKwlyb3V0ZS5vdXRwdXQgPSAxMzsKKwl0ZWE2NDE1Y19jYWxsKG14YiwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAogCS8qIHRoZSByZXN0IGZvciBteGIgKi8KIAlteGItPmN1cl9pbnB1dCA9IDA7CkBAIC00MjQsNiArMzcxLDM0MyBAQAogfQogKi8KIAorc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlpbnQgaTsKKworCWZvciAoaSA9IE1BWENPTlRST0xTIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKG14Yl9jb250cm9sc1tpXS5pZCA9PSBxYy0+aWQpIHsKKwkJCSpxYyA9IG14Yl9jb250cm9sc1tpXTsKKwkJCURFQl9EKCgiVklESU9DX1FVRVJZQ1RSTCAlZC5cbiIsIHFjLT5pZCkpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIGRldi0+ZXh0X3Z2X2RhdGEtPmNvcmVfb3BzLT52aWRpb2NfcXVlcnljdHJsKGZpbGUsIGZoLCBxYyk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKnZjKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKwlpbnQgaTsKKworCWZvciAoaSA9IE1BWENPTlRST0xTIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKG14Yl9jb250cm9sc1tpXS5pZCA9PSB2Yy0+aWQpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA8IDApCisJCXJldHVybiBkZXYtPmV4dF92dl9kYXRhLT5jb3JlX29wcy0+dmlkaW9jX2dfY3RybChmaWxlLCBmaCwgdmMpOworCisJaWYgKHZjLT5pZCA9PSBWNEwyX0NJRF9BVURJT19NVVRFKSB7CisJCXZjLT52YWx1ZSA9IG14Yi0+Y3VyX211dGU7CisJCURFQl9EKCgiVklESU9DX0dfQ1RSTCBWNEwyX0NJRF9BVURJT19NVVRFOiVkLlxuIiwgdmMtPnZhbHVlKSk7CisJCXJldHVybiAwOworCX0KKworCURFQl9FRSgoIlZJRElPQ19HX0NUUkwgVjRMMl9DSURfQVVESU9fTVVURTolZC5cbiIsIHZjLT52YWx1ZSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9jb250cm9sICp2YykKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgbXhiICpteGIgPSAoc3RydWN0IG14YiAqKWRldi0+ZXh0X3ByaXY7CisJaW50IGkgPSAwOworCisJZm9yIChpID0gTUFYQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgeworCQlpZiAobXhiX2NvbnRyb2xzW2ldLmlkID09IHZjLT5pZCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpIDwgMCkKKwkJcmV0dXJuIGRldi0+ZXh0X3Z2X2RhdGEtPmNvcmVfb3BzLT52aWRpb2Nfc19jdHJsKGZpbGUsIGZoLCB2Yyk7CisKKwlpZiAodmMtPmlkID09IFY0TDJfQ0lEX0FVRElPX01VVEUpIHsKKwkJbXhiLT5jdXJfbXV0ZSA9IHZjLT52YWx1ZTsKKwkJaWYgKCF2Yy0+dmFsdWUpIHsKKwkJCS8qIHN3aXRjaCB0aGUgYXVkaW8tc291cmNlICovCisJCQl0ZWE2NDIwXzFfY2FsbChteGIsIGF1ZGlvLCBzX3JvdXRpbmcsCisJCQkJCSZURUE2NDIwX2xpbmVbdmlkZW9fYXVkaW9fY29ubmVjdFtteGItPmN1cl9pbnB1dF1dWzBdKTsKKwkJCXRlYTY0MjBfMl9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywKKwkJCQkJJlRFQTY0MjBfbGluZVt2aWRlb19hdWRpb19jb25uZWN0W214Yi0+Y3VyX2lucHV0XV1bMV0pOworCQl9IGVsc2UgeworCQkJdGVhNjQyMF8xX2NhbGwobXhiLCBhdWRpbywgc19yb3V0aW5nLAorCQkJCQkmVEVBNjQyMF9saW5lWzZdWzBdKTsKKwkJCXRlYTY0MjBfMl9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywKKwkJCQkJJlRFQTY0MjBfbGluZVs2XVsxXSk7CisJCX0KKwkJREVCX0VFKCgiVklESU9DX1NfQ1RSTCwgVjRMMl9DSURfQVVESU9fTVVURTogJWQuXG4iLCB2Yy0+dmFsdWUpKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9pbnB1dCAqaSkKK3sKKwlERUJfRUUoKCJWSURJT0NfRU5VTUlOUFVUICVkLlxuIiwgaS0+aW5kZXgpKTsKKwlpZiAoaS0+aW5kZXggPCAwIHx8IGktPmluZGV4ID49IE1YQl9JTlBVVFMpCisJCXJldHVybiAtRUlOVkFMOworCW1lbWNweShpLCAmbXhiX2lucHV0c1tpLT5pbmRleF0sIHNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50ICppKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKwkqaSA9IG14Yi0+Y3VyX2lucHV0OworCisJREVCX0VFKCgiVklESU9DX0dfSU5QVVQgJWQuXG4iLCAqaSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IGlucHV0KQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCWludCBpID0gMDsKKworCURFQl9FRSgoIlZJRElPQ19TX0lOUFVUICVkLlxuIiwgaW5wdXQpKTsKKworCWlmIChpbnB1dCA8IDAgfHwgaW5wdXQgPj0gTVhCX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlteGItPmN1cl9pbnB1dCA9IGlucHV0OworCisJc2FhNzE0Nl9zZXRfaHBzX3NvdXJjZV9hbmRfc3luYyhkZXYsIGlucHV0X3BvcnRfc2VsZWN0aW9uW2lucHV0XS5ocHNfc291cmNlLAorCQkJaW5wdXRfcG9ydF9zZWxlY3Rpb25baW5wdXRdLmhwc19zeW5jKTsKKworCS8qIHByZXBhcmUgc3dpdGNoaW5nIG9mIHRlYTY0MTVjIGFuZCBzYWE3MTExYTsKKwkgICBoYXZlIGEgbG9vayBhdCB0aGUgJ2JhY2tncm91bmQnLWZpbGUgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25zICAqLworCXN3aXRjaCAoaW5wdXQpIHsKKwljYXNlIFRVTkVSOgorCQlpID0gU0FBNzExNV9DT01QT1NJVEUwOworCQlyb3V0ZS5pbnB1dCA9IDM7CisJCXJvdXRlLm91dHB1dCA9IDE3OworCisJCWlmICh0ZWE2NDE1Y19jYWxsKG14YiwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3MgdGVhNjQxNWMgIzFcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJLyogY29ubmVjdCB0dW5lci1vdXRwdXQgYWx3YXlzIHRvIG11bHRpY2FibGUgKi8KKwkJcm91dGUuaW5wdXQgPSAzOworCQlyb3V0ZS5vdXRwdXQgPSAxMzsKKwkJYnJlYWs7CisJY2FzZSBBVVgzX1lDOgorCQkvKiBub3RoaW5nIHRvIGJlIGRvbmUgaGVyZS4gYXV4M195YyBpcworCQkgICBkaXJlY3RseSBjb25uZWN0ZWQgdG8gdGhlIHNhYTcxMWEgKi8KKwkJaSA9IFNBQTcxMTVfU1ZJREVPMTsKKwkJYnJlYWs7CisJY2FzZSBBVVgzOgorCQkvKiBub3RoaW5nIHRvIGJlIGRvbmUgaGVyZS4gYXV4MyBpcworCQkgICBkaXJlY3RseSBjb25uZWN0ZWQgdG8gdGhlIHNhYTcxMWEgKi8KKwkJaSA9IFNBQTcxMTVfQ09NUE9TSVRFMTsKKwkJYnJlYWs7CisJY2FzZSBBVVgxOgorCQlpID0gU0FBNzExNV9DT01QT1NJVEUwOworCQlyb3V0ZS5pbnB1dCA9IDE7CisJCXJvdXRlLm91dHB1dCA9IDE3OworCQlicmVhazsKKwl9CisKKwkvKiBzd2l0Y2ggdmlkZW8gaW4gdGVhNjQxNWMgb25seSBpZiBuZWNlc3NhcnkgKi8KKwlzd2l0Y2ggKGlucHV0KSB7CisJY2FzZSBUVU5FUjoKKwljYXNlIEFVWDE6CisJCWlmICh0ZWE2NDE1Y19jYWxsKG14YiwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3MgdGVhNjQxNWMgIzNcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogc3dpdGNoIHZpZGVvIGluIHNhYTcxMTFhICovCisJcm91dGUuaW5wdXQgPSBpOworCXJvdXRlLm91dHB1dCA9IDA7CisJaWYgKHNhYTcxMTFhX2NhbGwobXhiLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpKQorCQlwcmludGsoS0VSTl9FUlIgIlZJRElPQ19TX0lOUFVUOiBjb3VsZCBub3QgYWRkcmVzcyBzYWE3MTExYSAjMS5cbiIpOworCisJLyogc3dpdGNoIHRoZSBhdWRpby1zb3VyY2Ugb25seSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoMCA9PSBteGItPmN1cl9tdXRlKSB7CisJCXRlYTY0MjBfMV9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywKKwkJCQkmVEVBNjQyMF9saW5lW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbaW5wdXRdXVswXSk7CisJCXRlYTY0MjBfMl9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywKKwkJCQkmVEVBNjQyMF9saW5lW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbaW5wdXRdXVsxXSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl90dW5lciAqdCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgbXhiICpteGIgPSAoc3RydWN0IG14YiAqKWRldi0+ZXh0X3ByaXY7CisKKwlpZiAodC0+aW5kZXgpIHsKKwkJREVCX0QoKCJWSURJT0NfR19UVU5FUjogY2hhbm5lbCAlZCBkb2VzIG5vdCBoYXZlIGEgdHVuZXIgYXR0YWNoZWQuXG4iLCB0LT5pbmRleCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlERUJfRUUoKCJWSURJT0NfR19UVU5FUjogJWRcbiIsIHQtPmluZGV4KSk7CisKKwltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7CisJc3RybGNweSh0LT5uYW1lLCAiVFYgVHVuZXIiLCBzaXplb2YodC0+bmFtZSkpOworCXQtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKKwl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTk9STSB8IFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8CisJCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyIHwgVjRMMl9UVU5FUl9DQVBfU0FQOworCXQtPmF1ZG1vZGUgPSBteGItPmN1cl9tb2RlOworCXJldHVybiBjYWxsX2FsbChkZXYsIHR1bmVyLCBnX3R1bmVyLCB0KTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3R1bmVyICp0KQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKworCWlmICh0LT5pbmRleCkgeworCQlERUJfRCgoIlZJRElPQ19TX1RVTkVSOiBjaGFubmVsICVkIGRvZXMgbm90IGhhdmUgYSB0dW5lciBhdHRhY2hlZC5cbiIsIHQtPmluZGV4KSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW14Yi0+Y3VyX21vZGUgPSB0LT5hdWRtb2RlOworCXJldHVybiBjYWxsX2FsbChkZXYsIHR1bmVyLCBzX3R1bmVyLCB0KTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IG14YiAqbXhiID0gKHN0cnVjdCBteGIgKilkZXYtPmV4dF9wcml2OworCisJaWYgKG14Yi0+Y3VyX2lucHV0KSB7CisJCURFQl9EKCgiVklESU9DX0dfRlJFUTogY2hhbm5lbCAlZCBkb2VzIG5vdCBoYXZlIGEgdHVuZXIhXG4iLAorCQkJCQlteGItPmN1cl9pbnB1dCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkqZiA9IG14Yi0+Y3VyX2ZyZXE7CisKKwlERUJfRUUoKCJWSURJT0NfR19GUkVROiBmcmVxOjB4JTA4eC5cbiIsIG14Yi0+Y3VyX2ZyZXEuZnJlcXVlbmN5KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CisKKwlpZiAoZi0+dHVuZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKFY0TDJfVFVORVJfQU5BTE9HX1RWICE9IGYtPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG14Yi0+Y3VyX2lucHV0KSB7CisJCURFQl9EKCgiVklESU9DX1NfRlJFUTogY2hhbm5lbCAlZCBkb2VzIG5vdCBoYXZlIGEgdHVuZXIhXG4iLCBteGItPmN1cl9pbnB1dCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlteGItPmN1cl9mcmVxID0gKmY7CisJREVCX0VFKCgiVklESU9DX1NfRlJFUVVFTkNZOiBmcmVxOjB4JTA4eC5cbiIsIG14Yi0+Y3VyX2ZyZXEuZnJlcXVlbmN5KSk7CisKKwkvKiB0dW5lIGluIGRlc2lyZWQgZnJlcXVlbmN5ICovCisJdHVuZXJfY2FsbChteGIsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgJm14Yi0+Y3VyX2ZyZXEpOworCisJLyogaGFjazogY2hhbmdpbmcgdGhlIGZyZXF1ZW5jeSBzaG91bGQgaW52YWxpZGF0ZSB0aGUgdmJpLWNvdW50ZXIgKD0+IGFsZXZ0KSAqLworCXNwaW5fbG9jaygmZGV2LT5zbG9jayk7CisJdnYtPnZiaV9maWVsZGNvdW50ID0gMDsKKwlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKworCWlmIChhLT5pbmRleCA8IDAgfHwgYS0+aW5kZXggPiBNWEJfSU5QVVRTKSB7CisJCURFQl9EKCgiVklESU9DX0dfQVVESU8gJWQgb3V0IG9mIHJhbmdlLlxuIiwgYS0+aW5kZXgpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJREVCX0VFKCgiVklESU9DX0dfQVVESU8gJWQuXG4iLCBhLT5pbmRleCkpOworCW1lbWNweShhLCAmbXhiX2F1ZGlvc1t2aWRlb19hdWRpb19jb25uZWN0W214Yi0+Y3VyX2lucHV0XV0sIHNpemVvZihzdHJ1Y3QgdjRsMl9hdWRpbykpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJREVCX0QoKCJWSURJT0NfU19BVURJTyAlZC5cbiIsIGEtPmluZGV4KSk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitzdGF0aWMgaW50IHZpZGlvY19nX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisKKwlyZXR1cm4gY2FsbF9hbGwoZGV2LCBjb3JlLCBnX3JlZ2lzdGVyLCByZWcpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisKKwlyZXR1cm4gY2FsbF9hbGwoZGV2LCBjb3JlLCBzX3JlZ2lzdGVyLCByZWcpOworfQorI2VuZGlmCisKK3N0YXRpYyBsb25nIHZpZGlvY19kZWZhdWx0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBNWEJfU19BVURJT19DRDoKKwl7CisJCWludCBpID0gKihpbnQgKilhcmc7CisKKwkJaWYgKGkgPCAwIHx8IGkgPj0gTVhCX0FVRElPUykgeworCQkJREVCX0QoKCJpbGxlZ2FsIGFyZ3VtZW50IHRvIE1YQl9TX0FVRElPX0NEOiBpOiVkLlxuIiwgaSkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlERUJfRUUoKCJNWEJfU19BVURJT19DRDogaTolZC5cbiIsIGkpKTsKKworCQl0ZWE2NDIwXzFfY2FsbChteGIsIGF1ZGlvLCBzX3JvdXRpbmcsICZURUE2NDIwX2NkW2ldWzBdKTsKKwkJdGVhNjQyMF8yX2NhbGwobXhiLCBhdWRpbywgc19yb3V0aW5nLCAmVEVBNjQyMF9jZFtpXVsxXSk7CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgTVhCX1NfQVVESU9fTElORToKKwl7CisJCWludCBpID0gKihpbnQgKilhcmc7CisKKwkJaWYgKGkgPCAwIHx8IGkgPj0gTVhCX0FVRElPUykgeworCQkJREVCX0QoKCJpbGxlZ2FsIGFyZ3VtZW50IHRvIE1YQl9TX0FVRElPX0xJTkU6IGk6JWQuXG4iLCBpKSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCURFQl9FRSgoIk1YQl9TX0FVRElPX0xJTkU6IGk6JWQuXG4iLCBpKSk7CisJCXRlYTY0MjBfMV9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywgJlRFQTY0MjBfbGluZVtpXVswXSk7CisJCXRlYTY0MjBfMl9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywgJlRFQTY0MjBfbGluZVtpXVsxXSk7CisKKwkJcmV0dXJuIDA7CisJfQorCWRlZmF1bHQ6CisvKgorCQlERUIyKHByaW50aygiZG9lcyBub3QgaGFuZGxlIHRoaXMgaW9jdGwuXG4iKSk7CisqLworCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dF92diB2dl9kYXRhOwogCiAvKiB0aGlzIGZ1bmN0aW9uIG9ubHkgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgcHJvYmluZyB3YXMgc3VjY2Vzc2Z1bCAqLwpAQCAtNDM3LDYgKzcyMSwyMyBAQAogCSAgIGFscmVhZHkgZGlkIHRoaXMgaW4gIm14Yl92bDQyX3Byb2JlIiAqLwogCiAJc2FhNzE0Nl92dl9pbml0KGRldiwgJnZ2X2RhdGEpOworCXZ2X2RhdGEub3BzLnZpZGlvY19xdWVyeWN0cmwgPSB2aWRpb2NfcXVlcnljdHJsOworCXZ2X2RhdGEub3BzLnZpZGlvY19nX2N0cmwgPSB2aWRpb2NfZ19jdHJsOworCXZ2X2RhdGEub3BzLnZpZGlvY19zX2N0cmwgPSB2aWRpb2Nfc19jdHJsOworCXZ2X2RhdGEub3BzLnZpZGlvY19lbnVtX2lucHV0ID0gdmlkaW9jX2VudW1faW5wdXQ7CisJdnZfZGF0YS5vcHMudmlkaW9jX2dfaW5wdXQgPSB2aWRpb2NfZ19pbnB1dDsKKwl2dl9kYXRhLm9wcy52aWRpb2Nfc19pbnB1dCA9IHZpZGlvY19zX2lucHV0OworCXZ2X2RhdGEub3BzLnZpZGlvY19nX3R1bmVyID0gdmlkaW9jX2dfdHVuZXI7CisJdnZfZGF0YS5vcHMudmlkaW9jX3NfdHVuZXIgPSB2aWRpb2Nfc190dW5lcjsKKwl2dl9kYXRhLm9wcy52aWRpb2NfZ19mcmVxdWVuY3kgPSB2aWRpb2NfZ19mcmVxdWVuY3k7CisJdnZfZGF0YS5vcHMudmlkaW9jX3NfZnJlcXVlbmN5ID0gdmlkaW9jX3NfZnJlcXVlbmN5OworCXZ2X2RhdGEub3BzLnZpZGlvY19nX2F1ZGlvID0gdmlkaW9jX2dfYXVkaW87CisJdnZfZGF0YS5vcHMudmlkaW9jX3NfYXVkaW8gPSB2aWRpb2Nfc19hdWRpbzsKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJdnZfZGF0YS5vcHMudmlkaW9jX2dfcmVnaXN0ZXIgPSB2aWRpb2NfZ19yZWdpc3RlcjsKKwl2dl9kYXRhLm9wcy52aWRpb2Nfc19yZWdpc3RlciA9IHZpZGlvY19zX3JlZ2lzdGVyOworI2VuZGlmCisJdnZfZGF0YS5vcHMudmlkaW9jX2RlZmF1bHQgPSB2aWRpb2NfZGVmYXVsdDsKIAlpZiAoc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJm14Yi0+dmlkZW9fZGV2LCBkZXYsICJteGIiLCBWRkxfVFlQRV9HUkFCQkVSKSkgewogCQlFUlIoKCJjYW5ub3QgcmVnaXN0ZXIgY2FwdHVyZSB2NGwyIGRldmljZS4gc2tpcHBpbmcuXG4iKSk7CiAJCXJldHVybiAtMTsKQEAgLTQ0OSwxMyArNzUwLDYgQEAKIAkJfQogCX0KIAotCWkyY191c2VfY2xpZW50KG14Yi0+dGVhNjQyMF8xKTsKLQlpMmNfdXNlX2NsaWVudChteGItPnRlYTY0MjBfMik7Ci0JaTJjX3VzZV9jbGllbnQobXhiLT50ZWE2NDE1Yyk7Ci0JaTJjX3VzZV9jbGllbnQobXhiLT50ZGE5ODQwKTsKLQlpMmNfdXNlX2NsaWVudChteGItPnNhYTcxMTFhKTsKLQlpMmNfdXNlX2NsaWVudChteGItPnR1bmVyKTsKLQogCXByaW50aygibXhiOiBmb3VuZCBNdWx0aW1lZGlhIGVYdGVuc2lvbiBCb2FyZCAjJWQuXG4iLCBteGJfbnVtKTsKIAogCW14Yl9udW0rKzsKQEAgLTQ2OSwxMyArNzYzLDYgQEAKIAogCURFQl9FRSgoImRldjolcFxuIiwgZGV2KSk7CiAKLQlpMmNfcmVsZWFzZV9jbGllbnQobXhiLT50ZWE2NDIwXzEpOwotCWkyY19yZWxlYXNlX2NsaWVudChteGItPnRlYTY0MjBfMik7Ci0JaTJjX3JlbGVhc2VfY2xpZW50KG14Yi0+dGVhNjQxNWMpOwotCWkyY19yZWxlYXNlX2NsaWVudChteGItPnRkYTk4NDApOwotCWkyY19yZWxlYXNlX2NsaWVudChteGItPnNhYTcxMTFhKTsKLQlpMmNfcmVsZWFzZV9jbGllbnQobXhiLT50dW5lcik7Ci0KIAlzYWE3MTQ2X3VucmVnaXN0ZXJfZGV2aWNlKCZteGItPnZpZGVvX2RldixkZXYpOwogCWlmIChNWEJfQk9BUkRfQ0FOX0RPX1ZCSShkZXYpKQogCQlzYWE3MTQ2X3VucmVnaXN0ZXJfZGV2aWNlKCZteGItPnZiaV9kZXYsIGRldik7CkBAIC00ODksMzMwICs3NzYsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgbG9uZyBteGJfaW9jdGwoc3RydWN0IHNhYTcxNDZfZmggKmZoLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKLQlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7Ci0KLQlzd2l0Y2goY21kKSB7Ci0JY2FzZSBWSURJT0NfRU5VTUlOUFVUOgotCXsKLQkJc3RydWN0IHY0bDJfaW5wdXQgKmkgPSBhcmc7Ci0KLQkJREVCX0VFKCgiVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsaS0+aW5kZXgpKTsKLQkJaWYgKGktPmluZGV4IDwgMCB8fCBpLT5pbmRleCA+PSBNWEJfSU5QVVRTKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW1lbWNweShpLCAmbXhiX2lucHV0c1tpLT5pbmRleF0sIHNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0JLyogdGhlIHNhYTcxNDYgcHJvdmlkZXMgc29tZSBjb250cm9scyAoYnJpZ2h0bmVzcywgY29udHJhc3QsIHNhdHVyYXRpb24pCi0JICAgd2hpY2ggZ2V0cyByZWdpc3RlcmVkICphZnRlciogdGhpcyBmdW5jdGlvbi4gYmVjYXVzZSBvZiB0aGlzIHdlIGhhdmUKLQkgICB0byByZXR1cm4gd2l0aCBhIHZhbHVlICE9IDAgZXZlbiBpZiB0aGUgZnVuY3Rpb24gc3VjY2VkZWQuLiAqLwotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQl7Ci0JCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IE1BWENPTlRST0xTIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJCWlmIChteGJfY29udHJvbHNbaV0uaWQgPT0gcWMtPmlkKSB7Ci0JCQkJKnFjID0gbXhiX2NvbnRyb2xzW2ldOwotCQkJCURFQl9EKCgiVklESU9DX1FVRVJZQ1RSTCAlZC5cbiIsIHFjLT5pZCkpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQl9Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JewotCQlzdHJ1Y3QgdjRsMl9jb250cm9sICp2YyA9IGFyZzsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gTUFYQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgewotCQkJaWYgKG14Yl9jb250cm9sc1tpXS5pZCA9PSB2Yy0+aWQpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoaSA8IDApCi0JCQlyZXR1cm4gLUVBR0FJTjsKLQotCQlpZiAodmMtPmlkID09IFY0TDJfQ0lEX0FVRElPX01VVEUpIHsKLQkJCXZjLT52YWx1ZSA9IG14Yi0+Y3VyX211dGU7Ci0JCQlERUJfRCgoIlZJRElPQ19HX0NUUkwgVjRMMl9DSURfQVVESU9fTVVURTolZC5cbiIsIHZjLT52YWx1ZSkpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlERUJfRUUoKCJWSURJT0NfR19DVFJMIFY0TDJfQ0lEX0FVRElPX01VVEU6JWQuXG4iLCB2Yy0+dmFsdWUpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2FzZSBWSURJT0NfU19DVFJMOgotCXsKLQkJc3RydWN0IHY0bDJfY29udHJvbCAqdmMgPSBhcmc7Ci0JCWludCBpID0gMDsKLQotCQlmb3IgKGkgPSBNQVhDT05UUk9MUyAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCQlpZiAobXhiX2NvbnRyb2xzW2ldLmlkID09IHZjLT5pZCkKLQkJCQlicmVhazsKLQkJfQotCi0JCWlmIChpIDwgMCkKLQkJCXJldHVybiAtRUFHQUlOOwotCi0JCWlmICh2Yy0+aWQgPT0gVjRMMl9DSURfQVVESU9fTVVURSkgewotCQkJbXhiLT5jdXJfbXV0ZSA9IHZjLT52YWx1ZTsKLQkJCWlmICghdmMtPnZhbHVlKSB7Ci0JCQkJLyogc3dpdGNoIHRoZSBhdWRpby1zb3VyY2UgKi8KLQkJCQlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLCBURUE2NDIwX1NXSVRDSCwKLQkJCQkJCSZURUE2NDIwX2xpbmVbdmlkZW9fYXVkaW9fY29ubmVjdFtteGItPmN1cl9pbnB1dF1dWzBdKTsKLQkJCQlteGItPnRlYTY0MjBfMi0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8yLCBURUE2NDIwX1NXSVRDSCwKLQkJCQkJCSZURUE2NDIwX2xpbmVbdmlkZW9fYXVkaW9fY29ubmVjdFtteGItPmN1cl9pbnB1dF1dWzFdKTsKLQkJCX0gZWxzZSB7Ci0JCQkJbXhiLT50ZWE2NDIwXzEtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMSwgVEVBNjQyMF9TV0lUQ0gsCi0JCQkJCQkmVEVBNjQyMF9saW5lWzZdWzBdKTsKLQkJCQlteGItPnRlYTY0MjBfMi0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8yLCBURUE2NDIwX1NXSVRDSCwKLQkJCQkJCSZURUE2NDIwX2xpbmVbNl1bMV0pOwotCQkJfQotCQkJREVCX0VFKCgiVklESU9DX1NfQ1RSTCwgVjRMMl9DSURfQVVESU9fTVVURTogJWQuXG4iLCB2Yy0+dmFsdWUpKTsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfR19JTlBVVDoKLQl7Ci0JCWludCAqaW5wdXQgPSAoaW50ICopYXJnOwotCQkqaW5wdXQgPSBteGItPmN1cl9pbnB1dDsKLQotCQlERUJfRUUoKCJWSURJT0NfR19JTlBVVCAlZC5cbiIsICppbnB1dCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfU19JTlBVVDoKLQl7Ci0JCWludCBpbnB1dCA9ICooaW50ICopYXJnOwotCQlzdHJ1Y3QgdGVhNjQxNWNfbXVsdGlwbGV4IHZtOwotCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwotCQlpbnQgaSA9IDA7Ci0KLQkJREVCX0VFKCgiVklESU9DX1NfSU5QVVQgJWQuXG4iLCBpbnB1dCkpOwotCi0JCWlmIChpbnB1dCA8IDAgfHwgaW5wdXQgPj0gTVhCX0lOUFVUUykKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW14Yi0+Y3VyX2lucHV0ID0gaW5wdXQ7Ci0KLQkJc2FhNzE0Nl9zZXRfaHBzX3NvdXJjZV9hbmRfc3luYyhkZXYsIGlucHV0X3BvcnRfc2VsZWN0aW9uW2lucHV0XS5ocHNfc291cmNlLAotCQkJCWlucHV0X3BvcnRfc2VsZWN0aW9uW2lucHV0XS5ocHNfc3luYyk7Ci0KLQkJLyogcHJlcGFyZSBzd2l0Y2hpbmcgb2YgdGVhNjQxNWMgYW5kIHNhYTcxMTFhOwotCQkgICBoYXZlIGEgbG9vayBhdCB0aGUgJ2JhY2tncm91bmQnLWZpbGUgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25zICAqLwotCQlzd2l0Y2ggKGlucHV0KSB7Ci0JCWNhc2UgVFVORVI6Ci0JCQlpID0gU0FBNzExNV9DT01QT1NJVEUwOwotCQkJdm0uaW4gID0gMzsKLQkJCXZtLm91dCA9IDE3OwotCi0JCQlpZiAobXhiLT50ZWE2NDE1Yy0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQxNWMsIFRFQTY0MTVDX1NXSVRDSCwgJnZtKSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiVklESU9DX1NfSU5QVVQ6IGNvdWxkIG5vdCBhZGRyZXNzIHRlYTY0MTVjICMxXG4iKTsKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCX0KLQkJCS8qIGNvbm5lY3QgdHVuZXItb3V0cHV0IGFsd2F5cyB0byBtdWx0aWNhYmxlICovCi0JCQl2bS5pbiAgPSAzOwotCQkJdm0ub3V0ID0gMTM7Ci0JCQlicmVhazsKLQkJY2FzZSBBVVgzX1lDOgotCQkJLyogbm90aGluZyB0byBiZSBkb25lIGhlcmUuIGF1eDNfeWMgaXMKLQkJCSAgIGRpcmVjdGx5IGNvbm5lY3RlZCB0byB0aGUgc2FhNzExYSAqLwotCQkJaSA9IFNBQTcxMTVfU1ZJREVPMTsKLQkJCWJyZWFrOwotCQljYXNlIEFVWDM6Ci0JCQkvKiBub3RoaW5nIHRvIGJlIGRvbmUgaGVyZS4gYXV4MyBpcwotCQkJICAgZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSBzYWE3MTFhICovCi0JCQlpID0gU0FBNzExNV9DT01QT1NJVEUxOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVVYMToKLQkJCWkgPSBTQUE3MTE1X0NPTVBPU0lURTA7Ci0JCQl2bS5pbiAgPSAxOwotCQkJdm0ub3V0ID0gMTc7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIHN3aXRjaCB2aWRlbyBpbiB0ZWE2NDE1YyBvbmx5IGlmIG5lY2Vzc2FyeSAqLwotCQlzd2l0Y2ggKGlucHV0KSB7Ci0JCWNhc2UgVFVORVI6Ci0JCWNhc2UgQVVYMToKLQkJCWlmIChteGItPnRlYTY0MTVjLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDE1YywgVEVBNjQxNUNfU1dJVENILCAmdm0pKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3MgdGVhNjQxNWMgIzNcbiIpOwotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIHN3aXRjaCB2aWRlbyBpbiBzYWE3MTExYSAqLwotCQlyb3V0ZS5pbnB1dCA9IGk7Ci0JCXJvdXRlLm91dHB1dCA9IDA7Ci0JCWlmIChteGItPnNhYTcxMTFhLT5kcml2ZXItPmNvbW1hbmQobXhiLT5zYWE3MTExYSwgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkcsICZyb3V0ZSkpCi0JCQlwcmludGsoIlZJRElPQ19TX0lOUFVUOiBjb3VsZCBub3QgYWRkcmVzcyBzYWE3MTExYSAjMS5cbiIpOwotCi0JCS8qIHN3aXRjaCB0aGUgYXVkaW8tc291cmNlIG9ubHkgaWYgbmVjZXNzYXJ5ICovCi0JCWlmKCAwID09IG14Yi0+Y3VyX211dGUgKSB7Ci0JCQlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLCBURUE2NDIwX1NXSVRDSCwKLQkJCQkJJlRFQTY0MjBfbGluZVt2aWRlb19hdWRpb19jb25uZWN0W2lucHV0XV1bMF0pOwotCQkJbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMiwgVEVBNjQyMF9TV0lUQ0gsCi0JCQkJICAgICAgICZURUE2NDIwX2xpbmVbdmlkZW9fYXVkaW9fY29ubmVjdFtpbnB1dF1dWzFdKTsKLQkJfQotCi0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19HX1RVTkVSOgotCXsKLQkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7Ci0KLQkJaWYgKHQtPmluZGV4KSB7Ci0JCQlERUJfRCgoIlZJRElPQ19HX1RVTkVSOiBjaGFubmVsICVkIGRvZXMgbm90IGhhdmUgYSB0dW5lciBhdHRhY2hlZC5cbiIsIHQtPmluZGV4KSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCURFQl9FRSgoIlZJRElPQ19HX1RVTkVSOiAlZFxuIiwgdC0+aW5kZXgpKTsKLQotCQltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7Ci0JCWkyY19jbGllbnRzX2NvbW1hbmQoJm14Yi0+aTJjX2FkYXB0ZXIsIGNtZCwgYXJnKTsKLQotCQlzdHJsY3B5KHQtPm5hbWUsICJUViBUdW5lciIsIHNpemVvZih0LT5uYW1lKSk7Ci0JCXQtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKLQkJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk0gfCBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfCBcCi0JCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyIHwgVjRMMl9UVU5FUl9DQVBfU0FQOwotCQl0LT5hdWRtb2RlID0gbXhiLT5jdXJfbW9kZTsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX1NfVFVORVI6Ci0JewotCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCA9IGFyZzsKLQotCQlpZiAodC0+aW5kZXgpIHsKLQkJCURFQl9EKCgiVklESU9DX1NfVFVORVI6IGNoYW5uZWwgJWQgZG9lcyBub3QgaGF2ZSBhIHR1bmVyIGF0dGFjaGVkLlxuIix0LT5pbmRleCkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlteGItPmN1cl9tb2RlID0gdC0+YXVkbW9kZTsKLQkJaTJjX2NsaWVudHNfY29tbWFuZCgmbXhiLT5pMmNfYWRhcHRlciwgY21kLCBhcmcpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7Ci0KLQkJaWYgKG14Yi0+Y3VyX2lucHV0KSB7Ci0JCQlERUJfRCgoIlZJRElPQ19HX0ZSRVE6IGNoYW5uZWwgJWQgZG9lcyBub3QgaGF2ZSBhIHR1bmVyIVxuIiwKLQkJCQkJCW14Yi0+Y3VyX2lucHV0KSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCSpmID0gbXhiLT5jdXJfZnJlcTsKLQotCQlERUJfRUUoKCJWSURJT0NfR19GUkVROiBmcmVxOjB4JTA4eC5cbiIsIG14Yi0+Y3VyX2ZyZXEuZnJlcXVlbmN5KSk7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKLQl7Ci0JCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKLQotCQlpZiAoZi0+dHVuZXIpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoVjRMMl9UVU5FUl9BTkFMT0dfVFYgIT0gZi0+dHlwZSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmIChteGItPmN1cl9pbnB1dCkgewotCQkJREVCX0QoKCJWSURJT0NfU19GUkVROiBjaGFubmVsICVkIGRvZXMgbm90IGhhdmUgYSB0dW5lciFcbiIsIG14Yi0+Y3VyX2lucHV0KSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCW14Yi0+Y3VyX2ZyZXEgPSAqZjsKLQkJREVCX0VFKCgiVklESU9DX1NfRlJFUVVFTkNZOiBmcmVxOjB4JTA4eC5cbiIsIG14Yi0+Y3VyX2ZyZXEuZnJlcXVlbmN5KSk7Ci0KLQkJLyogdHVuZSBpbiBkZXNpcmVkIGZyZXF1ZW5jeSAqLwotCQlteGItPnR1bmVyLT5kcml2ZXItPmNvbW1hbmQobXhiLT50dW5lciwgVklESU9DX1NfRlJFUVVFTkNZLCAmbXhiLT5jdXJfZnJlcSk7Ci0KLQkJLyogaGFjazogY2hhbmdpbmcgdGhlIGZyZXF1ZW5jeSBzaG91bGQgaW52YWxpZGF0ZSB0aGUgdmJpLWNvdW50ZXIgKD0+IGFsZXZ0KSAqLwotCQlzcGluX2xvY2soJmRldi0+c2xvY2spOwotCQl2di0+dmJpX2ZpZWxkY291bnQgPSAwOwotCQlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgTVhCX1NfQVVESU9fQ0Q6Ci0JewotCQlpbnQgaSA9ICooaW50Kilhcmc7Ci0KLQkJaWYgKGkgPCAwIHx8IGkgPj0gTVhCX0FVRElPUykgewotCQkJREVCX0QoKCJpbGxlZ2FsIGFyZ3VtZW50IHRvIE1YQl9TX0FVRElPX0NEOiBpOiVkLlxuIixpKSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCURFQl9FRSgoIk1YQl9TX0FVRElPX0NEOiBpOiVkLlxuIixpKSk7Ci0KLQkJbXhiLT50ZWE2NDIwXzEtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMSxURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfY2RbaV1bMF0pOwotCQlteGItPnRlYTY0MjBfMi0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8yLFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9jZFtpXVsxXSk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgTVhCX1NfQVVESU9fTElORToKLQl7Ci0JCWludCBpID0gKihpbnQqKWFyZzsKLQotCQlpZiAoaSA8IDAgfHwgaSA+PSBNWEJfQVVESU9TKSB7Ci0JCQlERUJfRCgoImlsbGVnYWwgYXJndW1lbnQgdG8gTVhCX1NfQVVESU9fTElORTogaTolZC5cbiIsaSkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlERUJfRUUoKCJNWEJfU19BVURJT19MSU5FOiBpOiVkLlxuIixpKSk7Ci0JCW14Yi0+dGVhNjQyMF8xLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzEsVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2xpbmVbaV1bMF0pOwotCQlteGItPnRlYTY0MjBfMi0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8yLFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9saW5lW2ldWzFdKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfR19BVURJTzoKLQl7Ci0JCXN0cnVjdCB2NGwyX2F1ZGlvICphID0gYXJnOwotCi0JCWlmIChhLT5pbmRleCA8IDAgfHwgYS0+aW5kZXggPiBNWEJfSU5QVVRTKSB7Ci0JCQlERUJfRCgoIlZJRElPQ19HX0FVRElPICVkIG91dCBvZiByYW5nZS5cbiIsIGEtPmluZGV4KSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCURFQl9FRSgoIlZJRElPQ19HX0FVRElPICVkLlxuIiwgYS0+aW5kZXgpKTsKLQkJbWVtY3B5KGEsICZteGJfYXVkaW9zW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbbXhiLT5jdXJfaW5wdXRdXSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2F1ZGlvKSk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX1NfQVVESU86Ci0JewotCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSA9IGFyZzsKLQotCQlERUJfRCgoIlZJRElPQ19TX0FVRElPICVkLlxuIiwgYS0+aW5kZXgpKTsKLQkJcmV0dXJuIDA7Ci0JfQotI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLQljYXNlIFZJRElPQ19EQkdfU19SRUdJU1RFUjoKLQljYXNlIFZJRElPQ19EQkdfR19SRUdJU1RFUjoKLQkJaTJjX2NsaWVudHNfY29tbWFuZCgmbXhiLT5pMmNfYWRhcHRlciwgY21kLCBhcmcpOwotCQlyZXR1cm4gMDsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0vKgotCQlERUIyKHByaW50aygiZG9lcyBub3QgaGFuZGxlIHRoaXMgaW9jdGwuXG4iKSk7Ci0qLwotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBzdGRfY2FsbGJhY2soc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsIHN0cnVjdCBzYWE3MTQ2X3N0YW5kYXJkICpzdGFuZGFyZCkKIHsKIAlzdHJ1Y3QgbXhiICpteGIgPSAoc3RydWN0IG14YiAqKWRldi0+ZXh0X3ByaXY7Ci0JaW50IHplcm8gPSAwOwotCWludCBvbmUgPSAxOwogCiAJaWYgKFY0TDJfU1REX1BBTF9JID09IHN0YW5kYXJkLT5pZCkgewogCQl2NGwyX3N0ZF9pZCBzdGQgPSBWNEwyX1NURF9QQUxfSTsKQEAgLTgyMSw4ICs3ODcsOCBAQAogCQkvKiBzZXQgdGhlIDcxNDYgZ3BpbyByZWdpc3RlciAtLSBJIGRvbid0IGtub3cgd2hhdCB0aGlzIGRvZXMgZXhhY3RseSAqLwogCQlzYWE3MTQ2X3dyaXRlKGRldiwgR1BJT19DVFJMLCAweDAwNDA0MDUwKTsKIAkJLyogdW5zZXQgdGhlIDcxMTEgZ3BpbyByZWdpc3RlciAtLSBJIGRvbid0IGtub3cgd2hhdCB0aGlzIGRvZXMgZXhhY3RseSAqLwotCQlteGItPnNhYTcxMTFhLT5kcml2ZXItPmNvbW1hbmQobXhiLT5zYWE3MTExYSwgVklESU9DX0lOVF9TX0dQSU8sICZ6ZXJvKTsKLQkJbXhiLT50dW5lci0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dHVuZXIsIFZJRElPQ19TX1NURCwgJnN0ZCk7CisJCXNhYTcxMTFhX2NhbGwobXhiLCBjb3JlLCBzX2dwaW8sIDApOworCQl0dW5lcl9jYWxsKG14YiwgdHVuZXIsIHNfc3RkLCBzdGQpOwogCX0gZWxzZSB7CiAJCXY0bDJfc3RkX2lkIHN0ZCA9IFY0TDJfU1REX1BBTF9CRzsKIApAQCAtODMwLDggKzc5Niw4IEBACiAJCS8qIHNldCB0aGUgNzE0NiBncGlvIHJlZ2lzdGVyIC0tIEkgZG9uJ3Qga25vdyB3aGF0IHRoaXMgZG9lcyBleGFjdGx5ICovCiAJCXNhYTcxNDZfd3JpdGUoZGV2LCBHUElPX0NUUkwsIDB4MDA0MDQwNTApOwogCQkvKiBzZXQgdGhlIDcxMTEgZ3BpbyByZWdpc3RlciAtLSBJIGRvbid0IGtub3cgd2hhdCB0aGlzIGRvZXMgZXhhY3RseSAqLwotCQlteGItPnNhYTcxMTFhLT5kcml2ZXItPmNvbW1hbmQobXhiLT5zYWE3MTExYSwgVklESU9DX0lOVF9TX0dQSU8sICZvbmUpOwotCQlteGItPnR1bmVyLT5kcml2ZXItPmNvbW1hbmQobXhiLT50dW5lciwgVklESU9DX1NfU1RELCAmc3RkKTsKKwkJc2FhNzExMWFfY2FsbChteGIsIGNvcmUsIHNfZ3BpbywgMSk7CisJCXR1bmVyX2NhbGwobXhiLCB0dW5lciwgc19zdGQsIHN0ZCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtODg1LDggKzg1MSw2IEBACiAJLnN0ZHMJCT0gJnN0YW5kYXJkWzBdLAogCS5udW1fc3Rkcwk9IHNpemVvZihzdGFuZGFyZCkvc2l6ZW9mKHN0cnVjdCBzYWE3MTQ2X3N0YW5kYXJkKSwKIAkuc3RkX2NhbGxiYWNrCT0gJnN0ZF9jYWxsYmFjaywKLQkuaW9jdGxzCQk9ICZpb2N0bHNbMF0sCi0JLmlvY3RsCQk9IG14Yl9pb2N0bCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb24gZXh0ZW5zaW9uID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jCmluZGV4IDgwNWZhYWUuLjVmYzRhYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDI0eHhjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAyNHh4Y2FtLmMKQEAgLTEyODUsOSArMTI4NSw2IEBACiAJc3RydWN0IG9tYXAyNHh4Y2FtX2RldmljZSAqY2FtID0gb2ZoLT5jYW07CiAJaW50IHJ2YWw7CiAKLQlpZiAoYS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJbXV0ZXhfbG9jaygmY2FtLT5tdXRleCk7CiAJcnZhbCA9IHZpZGlvY19pbnRfZ19wYXJtKGNhbS0+c2RldiwgYSk7CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPm11dGV4KTsKQEAgLTEzMDMsOSArMTMwMCw2IEBACiAJc3RydWN0IHY0bDJfc3RyZWFtcGFybSBvbGRfc3RyZWFtcGFybTsKIAlpbnQgcnZhbDsKIAotCWlmIChhLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAltdXRleF9sb2NrKCZjYW0tPm11dGV4KTsKIAlpZiAoY2FtLT5zdHJlYW1pbmcpIHsKIAkJcnZhbCA9IC1FQlVTWTsKQEAgLTE2NjUsNyArMTY1OSw2IEBACiAJdmZkLT5wYXJlbnQgPSBjYW0tPmRldjsKIAogCXN0cmxjcHkodmZkLT5uYW1lLCBDQU1fTkFNRSwgc2l6ZW9mKHZmZC0+bmFtZSkpOwotCXZmZC0+dmZsX3R5cGUJCSA9IFZJRF9UWVBFX0NBUFRVUkUgfCBWSURfVFlQRV9DSFJPTUFLRVk7CiAJdmZkLT5mb3BzCQkgPSAmb21hcDI0eHhjYW1fZm9wczsKIAl2ZmQtPm1pbm9yCQkgPSAtMTsKIAl2ZmQtPmlvY3RsX29wcwkJID0gJm9tYXAyNHh4Y2FtX2lvY3RsX2ZvcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzY3MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjc2NzAuYwppbmRleCAwNWMxNGEyLi4wZTIxODRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzY3MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NjcwLmMKQEAgLTEyLDE4ICsxMiwyMiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKIAogTU9EVUxFX0FVVEhPUigiSm9uYXRoYW4gQ29yYmV0IDxjb3JiZXRAbHduLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQSBsb3ctbGV2ZWwgZHJpdmVyIGZvciBPbW5pVmlzaW9uIG92NzY3MCBzZW5zb3JzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CisKIC8qCiAgKiBCYXNpYyB3aW5kb3cgc2l6ZXMuICBUaGVzZSBwcm9iYWJseSBiZWxvbmcgc29tZXdoZXJlIG1vcmUgZ2xvYmFsbHkKICAqIHVzZWZ1bC4KQEAgLTE4OSwxMSArMTkzLDE2IEBACiAgKi8KIHN0cnVjdCBvdjc2NzBfZm9ybWF0X3N0cnVjdDsgIC8qIGNvbWluZyBsYXRlciAqLwogc3RydWN0IG92NzY3MF9pbmZvIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJc3RydWN0IG92NzY3MF9mb3JtYXRfc3RydWN0ICpmbXQ7ICAvKiBDdXJyZW50IGZvcm1hdCAqLwogCXVuc2lnbmVkIGNoYXIgc2F0OwkJLyogU2F0dXJhdGlvbiB2YWx1ZSAqLwogCWludCBodWU7CQkJLyogSHVlIHZhbHVlICovCiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBvdjc2NzBfaW5mbyAqdG9fc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgb3Y3NjcwX2luZm8sIHNkKTsKK30KIAogCiAKQEAgLTQwMCwyNCArNDA5LDI3IEBACiAgKiBMb3ctbGV2ZWwgcmVnaXN0ZXIgSS9PLgogICovCiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGNoYXIgcmVnLAorc3RhdGljIGludCBvdjc2NzBfcmVhZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBjaGFyIHJlZywKIAkJdW5zaWduZWQgY2hhciAqdmFsdWUpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCWludCByZXQ7CiAKLQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoYywgcmVnKTsKKwlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwogCWlmIChyZXQgPj0gMCkgewotCQkqdmFsdWUgPSAodW5zaWduZWQgY2hhcikgcmV0OworCQkqdmFsdWUgPSAodW5zaWduZWQgY2hhcilyZXQ7CiAJCXJldCA9IDA7CiAJfQogCXJldHVybiByZXQ7CiB9CiAKIAotc3RhdGljIGludCBvdjc2NzBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGNoYXIgcmVnLAorc3RhdGljIGludCBvdjc2NzBfd3JpdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgY2hhciByZWcsCiAJCXVuc2lnbmVkIGNoYXIgdmFsdWUpCiB7Ci0JaW50IHJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoYywgcmVnLCB2YWx1ZSk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCWludCByZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CisKIAlpZiAocmVnID09IFJFR19DT003ICYmICh2YWx1ZSAmIENPTTdfUkVTRVQpKQogCQltc2xlZXAoMik7ICAvKiBXYWl0IGZvciByZXNldCB0byBydW4gKi8KIAlyZXR1cm4gcmV0OwpAQCAtNDI3LDEwICs0MzksMTAgQEAKIC8qCiAgKiBXcml0ZSBhIGxpc3Qgb2YgcmVnaXN0ZXIgc2V0dGluZ3M7IGZmL2ZmIHN0b3BzIHRoZSBwcm9jZXNzLgogICovCi1zdGF0aWMgaW50IG92NzY3MF93cml0ZV9hcnJheShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IHJlZ3ZhbF9saXN0ICp2YWxzKQorc3RhdGljIGludCBvdjc2NzBfd3JpdGVfYXJyYXkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHJlZ3ZhbF9saXN0ICp2YWxzKQogewogCXdoaWxlICh2YWxzLT5yZWdfbnVtICE9IDB4ZmYgfHwgdmFscy0+dmFsdWUgIT0gMHhmZikgewotCQlpbnQgcmV0ID0gb3Y3NjcwX3dyaXRlKGMsIHZhbHMtPnJlZ19udW0sIHZhbHMtPnZhbHVlKTsKKwkJaW50IHJldCA9IG92NzY3MF93cml0ZShzZCwgdmFscy0+cmVnX251bSwgdmFscy0+dmFsdWUpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJCXZhbHMrKzsKQEAgLTQ0MiwzNCArNDU0LDM1IEBACiAvKgogICogU3R1ZmYgdGhhdCBrbm93cyBhYm91dCB0aGUgc2Vuc29yLgogICovCi1zdGF0aWMgdm9pZCBvdjc2NzBfcmVzZXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgb3Y3NjcwX3Jlc2V0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpCiB7Ci0Jb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX0NPTTcsIENPTTdfUkVTRVQpOworCW92NzY3MF93cml0ZShzZCwgUkVHX0NPTTcsIENPTTdfUkVTRVQpOwogCW1zbGVlcCgxKTsKKwlyZXR1cm4gMDsKIH0KIAogCi1zdGF0aWMgaW50IG92NzY3MF9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IG92NzY3MF9pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpCiB7Ci0JcmV0dXJuIG92NzY3MF93cml0ZV9hcnJheShjbGllbnQsIG92NzY3MF9kZWZhdWx0X3JlZ3MpOworCXJldHVybiBvdjc2NzBfd3JpdGVfYXJyYXkoc2QsIG92NzY3MF9kZWZhdWx0X3JlZ3MpOwogfQogCiAKIAotc3RhdGljIGludCBvdjc2NzBfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IG92NzY3MF9kZXRlY3Qoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKIAl1bnNpZ25lZCBjaGFyIHY7CiAJaW50IHJldDsKIAotCXJldCA9IG92NzY3MF9pbml0KGNsaWVudCk7CisJcmV0ID0gb3Y3NjcwX2luaXQoc2QsIDApOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwotCXJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX01JREgsICZ2KTsKKwlyZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX01JREgsICZ2KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAlpZiAodiAhPSAweDdmKSAvKiBPViBtYW51Zi4gaWQuICovCiAJCXJldHVybiAtRU5PREVWOwotCXJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX01JREwsICZ2KTsKKwlyZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX01JREwsICZ2KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAlpZiAodiAhPSAweGEyKQpAQCAtNDc3LDEyICs0OTAsMTIgQEAKIAkvKgogCSAqIE9LLCB3ZSBrbm93IHdlIGhhdmUgYW4gT21uaVZpc2lvbiBjaGlwLi4uYnV0IHdoaWNoIG9uZT8KIAkgKi8KLQlyZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19QSUQsICZ2KTsKKwlyZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX1BJRCwgJnYpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCWlmICh2ICE9IDB4NzYpICAvKiBQSUQgKyBWRVIgPSAweDc2IC8gMHg3MyAqLwogCQlyZXR1cm4gLUVOT0RFVjsKLQlyZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19WRVIsICZ2KTsKKwlyZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX1ZFUiwgJnYpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCWlmICh2ICE9IDB4NzMpICAvKiBQSUQgKyBWRVIgPSAweDc2IC8gMHg3MyAqLwpAQCAtNjI3LDcgKzY0MCw3IEBACiAvKgogICogU3RvcmUgYSBzZXQgb2Ygc3RhcnQvc3RvcCB2YWx1ZXMgaW50byB0aGUgY2FtZXJhLgogICovCi1zdGF0aWMgaW50IG92NzY3MF9zZXRfaHcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGhzdGFydCwgaW50IGhzdG9wLAorc3RhdGljIGludCBvdjc2NzBfc2V0X2h3KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBoc3RhcnQsIGludCBoc3RvcCwKIAkJaW50IHZzdGFydCwgaW50IHZzdG9wKQogewogCWludCByZXQ7CkBAIC02MzcsMjYgKzY1MCwyNiBAQAogICogaHN0YXJ0IGFyZSBpbiBocmVmWzI6MF0sIGJvdHRvbSAzIG9mIGhzdG9wIGluIGhyZWZbNTozXS4gIFRoZXJlIGlzCiAgKiBhIG15c3RlcnkgImVkZ2Ugb2Zmc2V0IiB2YWx1ZSBpbiB0aGUgdG9wIHR3byBiaXRzIG9mIGhyZWYuCiAgKi8KLQlyZXQgPSAgb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX0hTVEFSVCwgKGhzdGFydCA+PiAzKSAmIDB4ZmYpOwotCXJldCArPSBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfSFNUT1AsIChoc3RvcCA+PiAzKSAmIDB4ZmYpOwotCXJldCArPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19IUkVGLCAmdik7CisJcmV0ID0gIG92NzY3MF93cml0ZShzZCwgUkVHX0hTVEFSVCwgKGhzdGFydCA+PiAzKSAmIDB4ZmYpOworCXJldCArPSBvdjc2NzBfd3JpdGUoc2QsIFJFR19IU1RPUCwgKGhzdG9wID4+IDMpICYgMHhmZik7CisJcmV0ICs9IG92NzY3MF9yZWFkKHNkLCBSRUdfSFJFRiwgJnYpOwogCXYgPSAodiAmIDB4YzApIHwgKChoc3RvcCAmIDB4NykgPDwgMykgfCAoaHN0YXJ0ICYgMHg3KTsKIAltc2xlZXAoMTApOwotCXJldCArPSBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfSFJFRiwgdik7CisJcmV0ICs9IG92NzY3MF93cml0ZShzZCwgUkVHX0hSRUYsIHYpOwogLyoKICAqIFZlcnRpY2FsOiBzaW1pbGFyIGFycmFuZ2VtZW50LCBidXQgb25seSAxMCBiaXRzLgogICovCi0JcmV0ICs9IG92NzY3MF93cml0ZShjbGllbnQsIFJFR19WU1RBUlQsICh2c3RhcnQgPj4gMikgJiAweGZmKTsKLQlyZXQgKz0gb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX1ZTVE9QLCAodnN0b3AgPj4gMikgJiAweGZmKTsKLQlyZXQgKz0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfVlJFRiwgJnYpOworCXJldCArPSBvdjc2NzBfd3JpdGUoc2QsIFJFR19WU1RBUlQsICh2c3RhcnQgPj4gMikgJiAweGZmKTsKKwlyZXQgKz0gb3Y3NjcwX3dyaXRlKHNkLCBSRUdfVlNUT1AsICh2c3RvcCA+PiAyKSAmIDB4ZmYpOworCXJldCArPSBvdjc2NzBfcmVhZChzZCwgUkVHX1ZSRUYsICZ2KTsKIAl2ID0gKHYgJiAweGYwKSB8ICgodnN0b3AgJiAweDMpIDw8IDIpIHwgKHZzdGFydCAmIDB4Myk7CiAJbXNsZWVwKDEwKTsKLQlyZXQgKz0gb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX1ZSRUYsIHYpOworCXJldCArPSBvdjc2NzBfd3JpdGUoc2QsIFJFR19WUkVGLCB2KTsKIAlyZXR1cm4gcmV0OwogfQogCiAKLXN0YXRpYyBpbnQgb3Y3NjcwX2VudW1fZm10KHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQpCitzdGF0aWMgaW50IG92NzY3MF9lbnVtX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQpCiB7CiAJc3RydWN0IG92NzY3MF9mb3JtYXRfc3RydWN0ICpvZm10OwogCkBAIC02NzEsNyArNjg0LDggQEAKIH0KIAogCi1zdGF0aWMgaW50IG92NzY3MF90cnlfZm10KHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCwKK3N0YXRpYyBpbnQgb3Y3NjcwX3RyeV9mbXRfaW50ZXJuYWwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQsCiAJCXN0cnVjdCBvdjc2NzBfZm9ybWF0X3N0cnVjdCAqKnJldF9mbXQsCiAJCXN0cnVjdCBvdjc2NzBfd2luX3NpemUgKipyZXRfd3NpemUpCiB7CkBAIC03MTUsMTggKzcyOSwyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG92NzY3MF90cnlfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXJldHVybiBvdjc2NzBfdHJ5X2ZtdF9pbnRlcm5hbChzZCwgZm10LCBOVUxMLCBOVUxMKTsKK30KKwogLyoKICAqIFNldCBhIGZvcm1hdC4KICAqLwotc3RhdGljIGludCBvdjc2NzBfc19mbXQoc3RydWN0IGkyY19jbGllbnQgKmMsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQorc3RhdGljIGludCBvdjc2NzBfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3Qgb3Y3NjcwX2Zvcm1hdF9zdHJ1Y3QgKm92Zm10OwogCXN0cnVjdCBvdjc2NzBfd2luX3NpemUgKndzaXplOwotCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbyA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKLQl1bnNpZ25lZCBjaGFyIGNvbTcsIGNsa3JjOworCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbyA9IHRvX3N0YXRlKHNkKTsKKwl1bnNpZ25lZCBjaGFyIGNvbTcsIGNsa3JjID0gMDsKIAotCXJldCA9IG92NzY3MF90cnlfZm10KGMsIGZtdCwgJm92Zm10LCAmd3NpemUpOworCXJldCA9IG92NzY3MF90cnlfZm10X2ludGVybmFsKHNkLCBmbXQsICZvdmZtdCwgJndzaXplKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCS8qCkBAIC03MzUsNyArNzU0LDcgQEAKIAkgKiB0aGUgY29sb3JzLgogCSAqLwogCWlmIChmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1JHQjU2NSkgewotCQlyZXQgPSBvdjc2NzBfcmVhZChjLCBSRUdfQ0xLUkMsICZjbGtyYyk7CisJCXJldCA9IG92NzY3MF9yZWFkKHNkLCBSRUdfQ0xLUkMsICZjbGtyYyk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0KQEAgLTc0NywyMCArNzY2LDIwIEBACiAJICovCiAJY29tNyA9IG92Zm10LT5yZWdzWzBdLnZhbHVlOwogCWNvbTcgfD0gd3NpemUtPmNvbTdfYml0OwotCW92NzY3MF93cml0ZShjLCBSRUdfQ09NNywgY29tNyk7CisJb3Y3NjcwX3dyaXRlKHNkLCBSRUdfQ09NNywgY29tNyk7CiAJLyoKIAkgKiBOb3cgd3JpdGUgdGhlIHJlc3Qgb2YgdGhlIGFycmF5LiAgQWxzbyBzdG9yZSBzdGFydC9zdG9wcwogCSAqLwotCW92NzY3MF93cml0ZV9hcnJheShjLCBvdmZtdC0+cmVncyArIDEpOwotCW92NzY3MF9zZXRfaHcoYywgd3NpemUtPmhzdGFydCwgd3NpemUtPmhzdG9wLCB3c2l6ZS0+dnN0YXJ0LAorCW92NzY3MF93cml0ZV9hcnJheShzZCwgb3ZmbXQtPnJlZ3MgKyAxKTsKKwlvdjc2NzBfc2V0X2h3KHNkLCB3c2l6ZS0+aHN0YXJ0LCB3c2l6ZS0+aHN0b3AsIHdzaXplLT52c3RhcnQsCiAJCQl3c2l6ZS0+dnN0b3ApOwogCXJldCA9IDA7CiAJaWYgKHdzaXplLT5yZWdzKQotCQlyZXQgPSBvdjc2NzBfd3JpdGVfYXJyYXkoYywgd3NpemUtPnJlZ3MpOworCQlyZXQgPSBvdjc2NzBfd3JpdGVfYXJyYXkoc2QsIHdzaXplLT5yZWdzKTsKIAlpbmZvLT5mbXQgPSBvdmZtdDsKIAogCWlmIChmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1JHQjU2NSAmJiByZXQgPT0gMCkKLQkJcmV0ID0gb3Y3NjcwX3dyaXRlKGMsIFJFR19DTEtSQywgY2xrcmMpOworCQlyZXQgPSBvdjc2NzBfd3JpdGUoc2QsIFJFR19DTEtSQywgY2xrcmMpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc2OCw3ICs3ODcsNyBAQAogICogSW1wbGVtZW50IEcvU19QQVJNLiAgVGhlcmUgaXMgYSAiaGlnaCBxdWFsaXR5IiBtb2RlIHdlIGNvdWxkIHRyeQogICogdG8gZG8gc29tZWRheTsgZm9yIG5vdywgd2UganVzdCBkbyB0aGUgZnJhbWUgcmF0ZSB0d2Vhay4KICAqLwotc3RhdGljIGludCBvdjc2NzBfZ19wYXJtKHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtcykKK3N0YXRpYyBpbnQgb3Y3NjcwX2dfcGFybShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtcykKIHsKIAlzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSAqY3AgPSAmcGFybXMtPnBhcm0uY2FwdHVyZTsKIAl1bnNpZ25lZCBjaGFyIGNsa3JjOwpAQCAtNzc2LDcgKzc5NSw3IEBACiAKIAlpZiAocGFybXMtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXQgPSBvdjc2NzBfcmVhZChjLCBSRUdfQ0xLUkMsICZjbGtyYyk7CisJcmV0ID0gb3Y3NjcwX3JlYWQoc2QsIFJFR19DTEtSQywgJmNsa3JjKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAltZW1zZXQoY3AsIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSkpOwpAQCAtNzg4LDcgKzgwNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3NfcGFybShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybXMpCitzdGF0aWMgaW50IG92NzY3MF9zX3Bhcm0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybXMpCiB7CiAJc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0gKmNwID0gJnBhcm1zLT5wYXJtLmNhcHR1cmU7CiAJc3RydWN0IHY0bDJfZnJhY3QgKnRwZiA9ICZjcC0+dGltZXBlcmZyYW1lOwpAQCAtODAyLDcgKzgyMSw3IEBACiAJLyoKIAkgKiBDTEtSQyBoYXMgYSByZXNlcnZlZCBiaXQsIHNvIGxldCdzIHByZXNlcnZlIGl0LgogCSAqLwotCXJldCA9IG92NzY3MF9yZWFkKGMsIFJFR19DTEtSQywgJmNsa3JjKTsKKwlyZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX0NMS1JDLCAmY2xrcmMpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCWlmICh0cGYtPm51bWVyYXRvciA9PSAwIHx8IHRwZi0+ZGVub21pbmF0b3IgPT0gMCkKQEAgLTgxNiw3ICs4MzUsNyBAQAogCWNsa3JjID0gKGNsa3JjICYgMHg4MCkgfCBkaXY7CiAJdHBmLT5udW1lcmF0b3IgPSAxOwogCXRwZi0+ZGVub21pbmF0b3IgPSBPVjc2NzBfRlJBTUVfUkFURS9kaXY7Ci0JcmV0dXJuIG92NzY3MF93cml0ZShjLCBSRUdfQ0xLUkMsIGNsa3JjKTsKKwlyZXR1cm4gb3Y3NjcwX3dyaXRlKHNkLCBSRUdfQ0xLUkMsIGNsa3JjKTsKIH0KIAogCkBAIC04MjksNyArODQ4LDcgQEAKIAogCiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3N0b3JlX2NtYXRyaXgoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKK3N0YXRpYyBpbnQgb3Y3NjcwX3N0b3JlX2NtYXRyaXgoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJaW50IG1hdHJpeFtDTUFUUklYX0xFTl0pCiB7CiAJaW50IGksIHJldDsKQEAgLTgzOSw3ICs4NTgsNyBAQAogCSAqIFdlaXJkIGNyYXAgc2VlbXMgdG8gZXhpc3QgaW4gdGhlIHVwcGVyIHBhcnQgb2YKIAkgKiB0aGUgc2lnbiBiaXRzIHJlZ2lzdGVyLCBzbyBsZXQncyBwcmVzZXJ2ZSBpdC4KIAkgKi8KLQlyZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19DTUFUUklYX1NJR04sICZzaWduYml0cyk7CisJcmV0ID0gb3Y3NjcwX3JlYWQoc2QsIFJFR19DTUFUUklYX1NJR04sICZzaWduYml0cyk7CiAJc2lnbmJpdHMgJj0gMHhjMDsKIAogCWZvciAoaSA9IDA7IGkgPCBDTUFUUklYX0xFTjsgaSsrKSB7CkBAIC04NTgsOSArODc3LDkgQEAKIAkJCWVsc2UKIAkJCQlyYXcgPSBtYXRyaXhbaV0gJiAweGZmOwogCQl9Ci0JCXJldCArPSBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfQ01BVFJJWF9CQVNFICsgaSwgcmF3KTsKKwkJcmV0ICs9IG92NzY3MF93cml0ZShzZCwgUkVHX0NNQVRSSVhfQkFTRSArIGksIHJhdyk7CiAJfQotCXJldCArPSBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfQ01BVFJJWF9TSUdOLCBzaWduYml0cyk7CisJcmV0ICs9IG92NzY3MF93cml0ZShzZCwgUkVHX0NNQVRSSVhfU0lHTiwgc2lnbmJpdHMpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTk0MywyOSArOTYyLDI5IEBACiAKIAogCi1zdGF0aWMgaW50IG92NzY3MF90X3NhdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IG92NzY3MF9zX3NhdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgdmFsdWUpCiB7Ci0Jc3RydWN0IG92NzY3MF9pbmZvICppbmZvID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG92NzY3MF9pbmZvICppbmZvID0gdG9fc3RhdGUoc2QpOwogCWludCBtYXRyaXhbQ01BVFJJWF9MRU5dOwogCWludCByZXQ7CiAKIAlpbmZvLT5zYXQgPSB2YWx1ZTsKIAlvdjc2NzBfY2FsY19jbWF0cml4KGluZm8sIG1hdHJpeCk7Ci0JcmV0ID0gb3Y3NjcwX3N0b3JlX2NtYXRyaXgoY2xpZW50LCBtYXRyaXgpOworCXJldCA9IG92NzY3MF9zdG9yZV9jbWF0cml4KHNkLCBtYXRyaXgpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3Ffc2F0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIF9fczMyICp2YWx1ZSkKK3N0YXRpYyBpbnQgb3Y3NjcwX2dfc2F0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIF9fczMyICp2YWx1ZSkKIHsKLQlzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm8gPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm8gPSB0b19zdGF0ZShzZCk7CiAKIAkqdmFsdWUgPSBpbmZvLT5zYXQ7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3RfaHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgb3Y3NjcwX3NfaHVlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCB2YWx1ZSkKIHsKLQlzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm8gPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm8gPSB0b19zdGF0ZShzZCk7CiAJaW50IG1hdHJpeFtDTUFUUklYX0xFTl07CiAJaW50IHJldDsKIApAQCAtOTczLDE0ICs5OTIsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaW5mby0+aHVlID0gdmFsdWU7CiAJb3Y3NjcwX2NhbGNfY21hdHJpeChpbmZvLCBtYXRyaXgpOwotCXJldCA9IG92NzY3MF9zdG9yZV9jbWF0cml4KGNsaWVudCwgbWF0cml4KTsKKwlyZXQgPSBvdjc2NzBfc3RvcmVfY21hdHJpeChzZCwgbWF0cml4KTsKIAlyZXR1cm4gcmV0OwogfQogCiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3FfaHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIF9fczMyICp2YWx1ZSkKK3N0YXRpYyBpbnQgb3Y3NjcwX2dfaHVlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIF9fczMyICp2YWx1ZSkKIHsKLQlzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm8gPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm8gPSB0b19zdGF0ZShzZCk7CiAKIAkqdmFsdWUgPSBpbmZvLT5odWU7CiAJcmV0dXJuIDA7CkBAIC05OTQsOCArMTAxMyw3IEBACiB7CiAJaWYgKCh2ICYgMHg4MCkgPT0gMCkKIAkJcmV0dXJuIHYgKyAxMjg7Ci0JZWxzZQotCQlyZXR1cm4gMTI4IC0gKHYgJiAweDdmKTsKKwlyZXR1cm4gMTI4IC0gKHYgJiAweDdmKTsKIH0KIAogCkBAIC0xMDAzLDM2OSArMTAyMSwyNzUgQEAKIHsKIAlpZiAodiA+IDEyNykKIAkJcmV0dXJuIHYgJiAweDdmOwotCWVsc2UKLQkJcmV0dXJuICgxMjggLSB2KSB8IDB4ODA7CisJcmV0dXJuICgxMjggLSB2KSB8IDB4ODA7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3RfYnJpZ2h0bmVzcyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IG92NzY3MF9zX2JyaWdodG5lc3Moc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IHZhbHVlKQogewogCXVuc2lnbmVkIGNoYXIgY29tOCA9IDAsIHY7CiAJaW50IHJldDsKIAotCW92NzY3MF9yZWFkKGNsaWVudCwgUkVHX0NPTTgsICZjb204KTsKKwlvdjc2NzBfcmVhZChzZCwgUkVHX0NPTTgsICZjb204KTsKIAljb204ICY9IH5DT004X0FFQzsKLQlvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfQ09NOCwgY29tOCk7CisJb3Y3NjcwX3dyaXRlKHNkLCBSRUdfQ09NOCwgY29tOCk7CiAJdiA9IG92NzY3MF9hYnNfdG9fc20odmFsdWUpOwotCXJldCA9IG92NzY3MF93cml0ZShjbGllbnQsIFJFR19CUklHSFQsIHYpOworCXJldCA9IG92NzY3MF93cml0ZShzZCwgUkVHX0JSSUdIVCwgdik7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvdjc2NzBfcV9icmlnaHRuZXNzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIF9fczMyICp2YWx1ZSkKK3N0YXRpYyBpbnQgb3Y3NjcwX2dfYnJpZ2h0bmVzcyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBfX3MzMiAqdmFsdWUpCiB7CiAJdW5zaWduZWQgY2hhciB2ID0gMDsKLQlpbnQgcmV0ID0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfQlJJR0hULCAmdik7CisJaW50IHJldCA9IG92NzY3MF9yZWFkKHNkLCBSRUdfQlJJR0hULCAmdik7CiAKIAkqdmFsdWUgPSBvdjc2NzBfc21fdG9fYWJzKHYpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3RfY29udHJhc3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHZhbHVlKQorc3RhdGljIGludCBvdjc2NzBfc19jb250cmFzdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgdmFsdWUpCiB7Ci0JcmV0dXJuIG92NzY3MF93cml0ZShjbGllbnQsIFJFR19DT05UUkFTLCAodW5zaWduZWQgY2hhcikgdmFsdWUpOworCXJldHVybiBvdjc2NzBfd3JpdGUoc2QsIFJFR19DT05UUkFTLCAodW5zaWduZWQgY2hhcikgdmFsdWUpOwogfQogCi1zdGF0aWMgaW50IG92NzY3MF9xX2NvbnRyYXN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIF9fczMyICp2YWx1ZSkKK3N0YXRpYyBpbnQgb3Y3NjcwX2dfY29udHJhc3Qoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgX19zMzIgKnZhbHVlKQogewogCXVuc2lnbmVkIGNoYXIgdiA9IDA7Ci0JaW50IHJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX0NPTlRSQVMsICZ2KTsKKwlpbnQgcmV0ID0gb3Y3NjcwX3JlYWQoc2QsIFJFR19DT05UUkFTLCAmdik7CiAKIAkqdmFsdWUgPSB2OwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3FfaGZsaXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgX19zMzIgKnZhbHVlKQorc3RhdGljIGludCBvdjc2NzBfZ19oZmxpcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBfX3MzMiAqdmFsdWUpCiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBjaGFyIHYgPSAwOwogCi0JcmV0ID0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfTVZGUCwgJnYpOworCXJldCA9IG92NzY3MF9yZWFkKHNkLCBSRUdfTVZGUCwgJnYpOwogCSp2YWx1ZSA9ICh2ICYgTVZGUF9NSVJST1IpID09IE1WRlBfTUlSUk9SOwogCXJldHVybiByZXQ7CiB9CiAKIAotc3RhdGljIGludCBvdjc2NzBfdF9oZmxpcChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IG92NzY3MF9zX2hmbGlwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCB2YWx1ZSkKIHsKIAl1bnNpZ25lZCBjaGFyIHYgPSAwOwogCWludCByZXQ7CiAKLQlyZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19NVkZQLCAmdik7CisJcmV0ID0gb3Y3NjcwX3JlYWQoc2QsIFJFR19NVkZQLCAmdik7CiAJaWYgKHZhbHVlKQogCQl2IHw9IE1WRlBfTUlSUk9SOwogCWVsc2UKIAkJdiAmPSB+TVZGUF9NSVJST1I7CiAJbXNsZWVwKDEwKTsgIC8qIEZJWE1FICovCi0JcmV0ICs9IG92NzY3MF93cml0ZShjbGllbnQsIFJFR19NVkZQLCB2KTsKKwlyZXQgKz0gb3Y3NjcwX3dyaXRlKHNkLCBSRUdfTVZGUCwgdik7CiAJcmV0dXJuIHJldDsKIH0KIAogCiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3FfdmZsaXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgX19zMzIgKnZhbHVlKQorc3RhdGljIGludCBvdjc2NzBfZ192ZmxpcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBfX3MzMiAqdmFsdWUpCiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBjaGFyIHYgPSAwOwogCi0JcmV0ID0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfTVZGUCwgJnYpOworCXJldCA9IG92NzY3MF9yZWFkKHNkLCBSRUdfTVZGUCwgJnYpOwogCSp2YWx1ZSA9ICh2ICYgTVZGUF9GTElQKSA9PSBNVkZQX0ZMSVA7CiAJcmV0dXJuIHJldDsKIH0KIAogCi1zdGF0aWMgaW50IG92NzY3MF90X3ZmbGlwKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgb3Y3NjcwX3NfdmZsaXAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IHZhbHVlKQogewogCXVuc2lnbmVkIGNoYXIgdiA9IDA7CiAJaW50IHJldDsKIAotCXJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX01WRlAsICZ2KTsKKwlyZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX01WRlAsICZ2KTsKIAlpZiAodmFsdWUpCiAJCXYgfD0gTVZGUF9GTElQOwogCWVsc2UKIAkJdiAmPSB+TVZGUF9GTElQOwogCW1zbGVlcCgxMCk7ICAvKiBGSVhNRSAqLwotCXJldCArPSBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfTVZGUCwgdik7CisJcmV0ICs9IG92NzY3MF93cml0ZShzZCwgUkVHX01WRlAsIHYpOwogCXJldHVybiByZXQ7CiB9CiAKLQotc3RhdGljIHN0cnVjdCBvdjc2NzBfY29udHJvbCB7Ci0Jc3RydWN0IHY0bDJfcXVlcnljdHJsIHFjOwotCWludCAoKnF1ZXJ5KShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgX19zMzIgKnZhbHVlKTsKLQlpbnQgKCp0d2Vhaykoc3RydWN0IGkyY19jbGllbnQgKmMsIGludCB2YWx1ZSk7Ci19IG92NzY3MF9jb250cm9sc1tdID0KLXsKLQl7Ci0JCS5xYyA9IHsKLQkJCS5pZCA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCi0JCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCQkubmFtZSA9ICJCcmlnaHRuZXNzIiwKLQkJCS5taW5pbXVtID0gMCwKLQkJCS5tYXhpbXVtID0gMjU1LAotCQkJLnN0ZXAgPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgPSAweDgwLAotCQkJLmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCi0JCX0sCi0JCS50d2VhayA9IG92NzY3MF90X2JyaWdodG5lc3MsCi0JCS5xdWVyeSA9IG92NzY3MF9xX2JyaWdodG5lc3MsCi0JfSwKLQl7Ci0JCS5xYyA9IHsKLQkJCS5pZCA9IFY0TDJfQ0lEX0NPTlRSQVNULAotCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUgPSAiQ29udHJhc3QiLAotCQkJLm1pbmltdW0gPSAwLAotCQkJLm1heGltdW0gPSAxMjcsCi0JCQkuc3RlcCA9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDB4NDAsICAgLyogWFhYIG92NzY3MCBzcGVjICovCi0JCQkuZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19TTElERVIKLQkJfSwKLQkJLnR3ZWFrID0gb3Y3NjcwX3RfY29udHJhc3QsCi0JCS5xdWVyeSA9IG92NzY3MF9xX2NvbnRyYXN0LAotCX0sCi0JewotCQkucWMgPSB7Ci0JCQkuaWQgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAotCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUgPSAiU2F0dXJhdGlvbiIsCi0JCQkubWluaW11bSA9IDAsCi0JCQkubWF4aW11bSA9IDI1NiwKLQkJCS5zdGVwID0gMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMHg4MCwKLQkJCS5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgotCQl9LAotCQkudHdlYWsgPSBvdjc2NzBfdF9zYXQsCi0JCS5xdWVyeSA9IG92NzY3MF9xX3NhdCwKLQl9LAotCXsKLQkJLnFjID0gewotCQkJLmlkID0gVjRMMl9DSURfSFVFLAotCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUgPSAiSFVFIiwKLQkJCS5taW5pbXVtID0gLTE4MCwKLQkJCS5tYXhpbXVtID0gMTgwLAotCQkJLnN0ZXAgPSA1LAotCQkJLmRlZmF1bHRfdmFsdWUgPSAwLAotCQkJLmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCi0JCX0sCi0JCS50d2VhayA9IG92NzY3MF90X2h1ZSwKLQkJLnF1ZXJ5ID0gb3Y3NjcwX3FfaHVlLAotCX0sCi0JewotCQkucWMgPSB7Ci0JCQkuaWQgPSBWNEwyX0NJRF9WRkxJUCwKLQkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQkJCS5uYW1lID0gIlZlcnRpY2FsIGZsaXAiLAotCQkJLm1pbmltdW0gPSAwLAotCQkJLm1heGltdW0gPSAxLAotCQkJLnN0ZXAgPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgPSAwLAotCQl9LAotCQkudHdlYWsgPSBvdjc2NzBfdF92ZmxpcCwKLQkJLnF1ZXJ5ID0gb3Y3NjcwX3FfdmZsaXAsCi0JfSwKLQl7Ci0JCS5xYyA9IHsKLQkJCS5pZCA9IFY0TDJfQ0lEX0hGTElQLAotCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCQkJLm5hbWUgPSAiSG9yaXpvbnRhbCBtaXJyb3IiLAotCQkJLm1pbmltdW0gPSAwLAotCQkJLm1heGltdW0gPSAxLAotCQkJLnN0ZXAgPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgPSAwLAotCQl9LAotCQkudHdlYWsgPSBvdjc2NzBfdF9oZmxpcCwKLQkJLnF1ZXJ5ID0gb3Y3NjcwX3FfaGZsaXAsCi0JfSwKLX07Ci0jZGVmaW5lIE5fQ09OVFJPTFMgKEFSUkFZX1NJWkUob3Y3NjcwX2NvbnRyb2xzKSkKLQotc3RhdGljIHN0cnVjdCBvdjc2NzBfY29udHJvbCAqb3Y3NjcwX2ZpbmRfY29udHJvbChfX3UzMiBpZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBOX0NPTlRST0xTOyBpKyspCi0JCWlmIChvdjc2NzBfY29udHJvbHNbaV0ucWMuaWQgPT0gaWQpCi0JCQlyZXR1cm4gb3Y3NjcwX2NvbnRyb2xzICsgaTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotCi1zdGF0aWMgaW50IG92NzY3MF9xdWVyeWN0cmwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKK3N0YXRpYyBpbnQgb3Y3NjcwX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCXN0cnVjdCBvdjc2NzBfY29udHJvbCAqY3RybCA9IG92NzY3MF9maW5kX2NvbnRyb2wocWMtPmlkKTsKLQotCWlmIChjdHJsID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCSpxYyA9IGN0cmwtPnFjOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG92NzY3MF9nX2N0cmwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKLXsKLQlzdHJ1Y3Qgb3Y3NjcwX2NvbnRyb2wgKm9jdHJsID0gb3Y3NjcwX2ZpbmRfY29udHJvbChjdHJsLT5pZCk7Ci0JaW50IHJldDsKLQotCWlmIChvY3RybCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXQgPSBvY3RybC0+cXVlcnkoY2xpZW50LCAmY3RybC0+dmFsdWUpOwotCWlmIChyZXQgPj0gMCkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBvdjc2NzBfc19jdHJsKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCi17Ci0Jc3RydWN0IG92NzY3MF9jb250cm9sICpvY3RybCA9IG92NzY3MF9maW5kX2NvbnRyb2woY3RybC0+aWQpOwotCWludCByZXQ7Ci0KLQlpZiAob2N0cmwgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0ID0gIG9jdHJsLT50d2VhayhjbGllbnQsIGN0cmwtPnZhbHVlKTsKLQlpZiAocmV0ID49IDApCi0JCXJldHVybiAwOwotCXJldHVybiByZXQ7Ci19Ci0KLQotCi0KLQotCi0vKgotICogQmFzaWMgaTJjIHN0dWZmLgotICovCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgb3Y3NjcwX2RyaXZlcjsKLQotc3RhdGljIGludCBvdjc2NzBfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IG92NzY3MF9pbmZvICppbmZvOwotCi0JLyoKLQkgKiBGb3Igbm93OiBvbmx5IGRlYWwgd2l0aCBhZGFwdGVycyB3ZSByZWNvZ25pemUuCi0JICovCi0JaWYgKGFkYXB0ZXItPmlkICE9IEkyQ19IV19TTUJVU19DQUZFKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghIGNsaWVudCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmFkZHIgPSBPVjc2NzBfSTJDX0FERFI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmb3Y3NjcwX2RyaXZlciwKLQlzdHJjcHkoY2xpZW50LT5uYW1lLCAiT1Y3NjcwIik7Ci0JLyoKLQkgKiBTZXQgdXAgb3VyIGluZm8gc3RydWN0dXJlLgotCSAqLwotCWluZm8gPSBremFsbG9jKHNpemVvZiAoc3RydWN0IG92NzY3MF9pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCEgaW5mbykgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQlpbmZvLT5mbXQgPSAmb3Y3NjcwX2Zvcm1hdHNbMF07Ci0JaW5mby0+c2F0ID0gMTI4OwkvKiBSZXZpZXcgdGhpcyAqLwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGluZm8pOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgaXQncyBhbiBvdjc2NzAKLQkgKi8KLQlyZXQgPSBvdjc2NzBfZGV0ZWN0KGNsaWVudCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfZnJlZV9pbmZvOwotCXJldCA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfZnJlZV9pbmZvOwotCXJldHVybiAwOwotCi0gIG91dF9mcmVlX2luZm86Ci0Ja2ZyZWUoaW5mbyk7Ci0gIG91dF9mcmVlOgotCWtmcmVlKGNsaWVudCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgaW50IG92NzY3MF9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKLQlrZnJlZShjbGllbnQpOwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgb3Y3NjcwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwKLQkJdm9pZCAqYXJnKQotewotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfREJHX0dfQ0hJUF9JREVOVDoKLQkJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgYXJnLCBWNEwyX0lERU5UX09WNzY3MCwgMCk7Ci0KLQljYXNlIFZJRElPQ19JTlRfUkVTRVQ6Ci0JCW92NzY3MF9yZXNldChjbGllbnQpOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgVklESU9DX0lOVF9JTklUOgotCQlyZXR1cm4gb3Y3NjcwX2luaXQoY2xpZW50KTsKLQotCWNhc2UgVklESU9DX0VOVU1fRk1UOgotCQlyZXR1cm4gb3Y3NjcwX2VudW1fZm10KGNsaWVudCwgKHN0cnVjdCB2NGwyX2ZtdGRlc2MgKikgYXJnKTsKLQljYXNlIFZJRElPQ19UUllfRk1UOgotCQlyZXR1cm4gb3Y3NjcwX3RyeV9mbXQoY2xpZW50LCAoc3RydWN0IHY0bDJfZm9ybWF0ICopIGFyZywgTlVMTCwgTlVMTCk7Ci0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JCXJldHVybiBvdjc2NzBfc19mbXQoY2xpZW50LCAoc3RydWN0IHY0bDJfZm9ybWF0ICopIGFyZyk7Ci0JY2FzZSBWSURJT0NfUVVFUllDVFJMOgotCQlyZXR1cm4gb3Y3NjcwX3F1ZXJ5Y3RybChjbGllbnQsIChzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKikgYXJnKTsKLQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JCXJldHVybiBvdjc2NzBfc19jdHJsKGNsaWVudCwgKHN0cnVjdCB2NGwyX2NvbnRyb2wgKikgYXJnKTsKLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JCXJldHVybiBvdjc2NzBfZ19jdHJsKGNsaWVudCwgKHN0cnVjdCB2NGwyX2NvbnRyb2wgKikgYXJnKTsKLQljYXNlIFZJRElPQ19TX1BBUk06Ci0JCXJldHVybiBvdjc2NzBfc19wYXJtKGNsaWVudCwgKHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKikgYXJnKTsKLQljYXNlIFZJRElPQ19HX1BBUk06Ci0JCXJldHVybiBvdjc2NzBfZ19wYXJtKGNsaWVudCwgKHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKikgYXJnKTsKKwkvKiBGaWxsIGluIG1pbiwgbWF4LCBzdGVwIGFuZCBkZWZhdWx0IHZhbHVlIGZvciB0aGVzZSBjb250cm9scy4gKi8KKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAyNTUsIDEsIDEyOCk7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxMjcsIDEsIDY0KTsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCWNhc2UgVjRMMl9DSURfSEZMSVA6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMCk7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDI1NiwgMSwgMTI4KTsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAtMTgwLCAxODAsIDUsIDApOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGludCBvdjc2NzBfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJcmV0dXJuIG92NzY3MF9nX2JyaWdodG5lc3Moc2QsICZjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJcmV0dXJuIG92NzY3MF9nX2NvbnRyYXN0KHNkLCAmY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJcmV0dXJuIG92NzY3MF9nX3NhdChzZCwgJmN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJcmV0dXJuIG92NzY3MF9nX2h1ZShzZCwgJmN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCQlyZXR1cm4gb3Y3NjcwX2dfdmZsaXAoc2QsICZjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJcmV0dXJuIG92NzY3MF9nX2hmbGlwKHNkLCAmY3RybC0+dmFsdWUpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KIAorc3RhdGljIGludCBvdjc2NzBfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJcmV0dXJuIG92NzY3MF9zX2JyaWdodG5lc3Moc2QsIGN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQlyZXR1cm4gb3Y3NjcwX3NfY29udHJhc3Qoc2QsIGN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCXJldHVybiBvdjc2NzBfc19zYXQoc2QsIGN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJcmV0dXJuIG92NzY3MF9zX2h1ZShzZCwgY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfVkZMSVA6CisJCXJldHVybiBvdjc2NzBfc192ZmxpcChzZCwgY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfSEZMSVA6CisJCXJldHVybiBvdjc2NzBfc19oZmxpcChzZCwgY3RybC0+dmFsdWUpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG92NzY3MF9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAib3Y3NjcwIiwKLQl9LAotCS5pZCAJCT0gSTJDX0RSSVZFUklEX09WNzY3MCwKLQkuYXR0YWNoX2FkYXB0ZXIgPSBvdjc2NzBfYXR0YWNoLAotCS5kZXRhY2hfY2xpZW50CT0gb3Y3NjcwX2RldGFjaCwKLQkuY29tbWFuZAk9IG92NzY3MF9jb21tYW5kLAorc3RhdGljIGludCBvdjc2NzBfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCXN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfT1Y3NjcwLCAwKTsKK30KKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK3N0YXRpYyBpbnQgb3Y3NjcwX2dfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXVuc2lnbmVkIGNoYXIgdmFsID0gMDsKKwlpbnQgcmV0OworCisJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaTJjX2NsaWVudChjbGllbnQsICZyZWctPm1hdGNoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCXJldCA9IG92NzY3MF9yZWFkKHNkLCByZWctPnJlZyAmIDB4ZmYsICZ2YWwpOworCXJlZy0+dmFsID0gdmFsOworCXJlZy0+c2l6ZSA9IDE7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvdjc2NzBfc19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlpZiAoIXY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KGNsaWVudCwgJnJlZy0+bWF0Y2gpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJb3Y3NjcwX3dyaXRlKHNkLCByZWctPnJlZyAmIDB4ZmYsIHJlZy0+dmFsICYgMHhmZik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBvdjc2NzBfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IG92NzY3MF9nX2NoaXBfaWRlbnQsCisJLmdfY3RybCA9IG92NzY3MF9nX2N0cmwsCisJLnNfY3RybCA9IG92NzY3MF9zX2N0cmwsCisJLnF1ZXJ5Y3RybCA9IG92NzY3MF9xdWVyeWN0cmwsCisJLnJlc2V0ID0gb3Y3NjcwX3Jlc2V0LAorCS5pbml0ID0gb3Y3NjcwX2luaXQsCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS5nX3JlZ2lzdGVyID0gb3Y3NjcwX2dfcmVnaXN0ZXIsCisJLnNfcmVnaXN0ZXIgPSBvdjc2NzBfc19yZWdpc3RlciwKKyNlbmRpZgogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgb3Y3NjcwX3ZpZGVvX29wcyA9IHsKKwkuZW51bV9mbXQgPSBvdjc2NzBfZW51bV9mbXQsCisJLnRyeV9mbXQgPSBvdjc2NzBfdHJ5X2ZtdCwKKwkuc19mbXQgPSBvdjc2NzBfc19mbXQsCisJLnNfcGFybSA9IG92NzY3MF9zX3Bhcm0sCisJLmdfcGFybSA9IG92NzY3MF9nX3Bhcm0sCit9OwogCi0vKgotICogTW9kdWxlIGluaXRpYWxpemF0aW9uCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IG92NzY3MF9tb2RfaW5pdCh2b2lkKQorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgb3Y3NjcwX29wcyA9IHsKKwkuY29yZSA9ICZvdjc2NzBfY29yZV9vcHMsCisJLnZpZGVvID0gJm92NzY3MF92aWRlb19vcHMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IG92NzY3MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCXByaW50ayhLRVJOX05PVElDRSAiT21uaVZpc2lvbiBvdjc2NzAgc2Vuc29yIGRyaXZlciwgYXQgeW91ciBzZXJ2aWNlXG4iKTsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJm92NzY3MF9kcml2ZXIpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJc3RydWN0IG92NzY3MF9pbmZvICppbmZvOworCWludCByZXQ7CisKKwlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG92NzY3MF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJc2QgPSAmaW5mby0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJm92NzY3MF9vcHMpOworCisJLyogTWFrZSBzdXJlIGl0J3MgYW4gb3Y3NjcwICovCisJcmV0ID0gb3Y3NjcwX2RldGVjdChzZCk7CisJaWYgKHJldCkgeworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkiY2hpcCBmb3VuZCBAIDB4JXggKCVzKSBpcyBub3QgYW4gb3Y3NjcwIGNoaXAuXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CisJCWtmcmVlKGluZm8pOworCQlyZXR1cm4gcmV0OworCX0KKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHglMDJ4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKworCWluZm8tPmZtdCA9ICZvdjc2NzBfZm9ybWF0c1swXTsKKwlpbmZvLT5zYXQgPSAxMjg7CS8qIFJldmlldyB0aGlzICovCisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IG92NzY3MF9tb2RfZXhpdCh2b2lkKQorCitzdGF0aWMgaW50IG92NzY3MF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlpMmNfZGVsX2RyaXZlcigmb3Y3NjcwX2RyaXZlcik7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHRvX3N0YXRlKHNkKSk7CisJcmV0dXJuIDA7CiB9CiAKLW1vZHVsZV9pbml0KG92NzY3MF9tb2RfaW5pdCk7Ci1tb2R1bGVfZXhpdChvdjc2NzBfbW9kX2V4aXQpOworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG92NzY3MF9pZFtdID0geworCXsgIm92NzY3MCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgb3Y3NjcwX2lkKTsKKworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gIm92NzY3MCIsCisJLnByb2JlID0gb3Y3NjcwX3Byb2JlLAorCS5yZW1vdmUgPSBvdjc2NzBfcmVtb3ZlLAorCS5pZF90YWJsZSA9IG92NzY3MF9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYwppbmRleCAzYzllMGJhLi44NGIwZmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMKQEAgLTIxNywxMCArMjE3LDExIEBACiAjZGVmaW5lIE9DQVBfNHggICAgICAgICAweDAzCS8qIDR4ICovCiAKIC8qIENPTTMgKi8KLSNkZWZpbmUgU1dBUF9NQVNLICAgICAgIDB4MzgKKyNkZWZpbmUgU1dBUF9NQVNLICAgICAgIChTV0FQX1JHQiB8IFNXQVBfWVVWIHwgU1dBUF9NTCkKKyNkZWZpbmUgSU1HX01BU0sgICAgICAgIChWRkxJUF9JTUcgfCBIRkxJUF9JTUcpCiAKLSNkZWZpbmUgVkZJTUdfT05fT0ZGICAgIDB4ODAJLyogVmVydGljYWwgZmxpcCBpbWFnZSBPTi9PRkYgc2VsZWN0aW9uICovCi0jZGVmaW5lIEhNSU1HX09OX09GRiAgICAweDQwCS8qIEhvcml6b250YWwgbWlycm9yIGltYWdlIE9OL09GRiBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgVkZMSVBfSU1HICAgICAgIDB4ODAJLyogVmVydGljYWwgZmxpcCBpbWFnZSBPTi9PRkYgc2VsZWN0aW9uICovCisjZGVmaW5lIEhGTElQX0lNRyAgICAgICAweDQwCS8qIEhvcml6b250YWwgbWlycm9yIGltYWdlIE9OL09GRiBzZWxlY3Rpb24gKi8KICNkZWZpbmUgU1dBUF9SR0IgICAgICAgIDB4MjAJLyogU3dhcCBCL1IgIG91dHB1dCBzZXF1ZW5jZSBpbiBSR0IgbW9kZSAqLwogI2RlZmluZSBTV0FQX1lVViAgICAgICAgMHgxMAkvKiBTd2FwIFkvVVYgb3V0cHV0IHNlcXVlbmNlIGluIFlVViBtb2RlICovCiAjZGVmaW5lIFNXQVBfTUwgICAgICAgICAweDA4CS8qIFN3YXAgb3V0cHV0IE1TQi9MU0IgKi8KQEAgLTI3MSwxMSArMjcyLDEzIEBACiAjZGVmaW5lIFNMQ1RfUVZHQSAgICAgICAweDQwCS8qICAgMSA6IFFWR0EgKi8KICNkZWZpbmUgSVRVNjU2X09OX09GRiAgIDB4MjAJLyogSVRVNjU2IHByb3RvY29sIE9OL09GRiBzZWxlY3Rpb24gKi8KIAkJCQkvKiBSR0Igb3V0cHV0IGZvcm1hdCBjb250cm9sICovCisjZGVmaW5lIEZNVF9NQVNLICAgICAgICAweDBjCS8qICAgICAgTWFzayBvZiBjb2xvciBmb3JtYXQgKi8KICNkZWZpbmUgRk1UX0dCUjQyMiAgICAgIDB4MDAJLyogICAgICAwMCA6IEdCUiA0OjI6MiAqLwogI2RlZmluZSBGTVRfUkdCNTY1ICAgICAgMHgwNAkvKiAgICAgIDAxIDogUkdCIDU2NSAqLwogI2RlZmluZSBGTVRfUkdCNTU1ICAgICAgMHgwOAkvKiAgICAgIDEwIDogUkdCIDU1NSAqLwogI2RlZmluZSBGTVRfUkdCNDQ0ICAgICAgMHgwYwkvKiAxMSA6IFJHQiA0NDQgKi8KIAkJCQkvKiBPdXRwdXQgZm9ybWF0IGNvbnRyb2wgKi8KKyNkZWZpbmUgT0ZNVF9NQVNLICAgICAgIDB4MDMgICAgLyogICAgICBNYXNrIG9mIG91dHB1dCBmb3JtYXQgKi8KICNkZWZpbmUgT0ZNVF9ZVVYgICAgICAgIDB4MDAJLyogICAgICAwMCA6IFlVViAqLwogI2RlZmluZSBPRk1UX1BfQlJBVyAgICAgMHgwMQkvKiAgICAgIDAxIDogUHJvY2Vzc2VkIEJheWVyIFJBVyAqLwogI2RlZmluZSBPRk1UX1JHQiAgICAgICAgMHgwMgkvKiAgICAgIDEwIDogUkdCICovCkBAIC0yOTksNyArMzAyLDcgQEAKICNkZWZpbmUgR0FJTl8yeCAgICAgICAgIDB4MDAJLyogICAgMDAwIDogICAyeCAqLwogI2RlZmluZSBHQUlOXzR4ICAgICAgICAgMHgxMAkvKiAgICAwMDEgOiAgIDR4ICovCiAjZGVmaW5lIEdBSU5fOHggICAgICAgICAweDIwCS8qICAgIDAxMCA6ICAgOHggKi8KLSNkZWZpbmUgR0FJTl8xNnggICAgICAgIDB4MzAJLyogMDExIDogIDE2eCAqLworI2RlZmluZSBHQUlOXzE2eCAgICAgICAgMHgzMAkvKiAgICAwMTEgOiAgMTZ4ICovCiAjZGVmaW5lIEdBSU5fMzJ4ICAgICAgICAweDQwCS8qICAgIDEwMCA6ICAzMnggKi8KICNkZWZpbmUgR0FJTl82NHggICAgICAgIDB4NTAJLyogMTAxIDogIDY0eCAqLwogI2RlZmluZSBHQUlOXzEyOHggICAgICAgMHg2MAkvKiAxMTAgOiAxMjh4ICovCkBAIC0zNTYsMTMgKzM1OSw2IEBACiAjZGVmaW5lIFZPU1pfUVZHQSAgICAgICAweDc4CiAKIC8qCi0gKiBiaXQgY29uZmlndXJlICgzMiBiaXQpCi0gKiB0aGlzIGlzIHVzZWQgaW4gc3RydWN0IG92NzcyeF9jb2xvcl9mb3JtYXQgOjogb3B0aW9uCi0gKi8KLSNkZWZpbmUgT1BfVVYgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBPUF9TV0FQX1JHQiAweDAwMDAwMDAyCi0KLS8qCiAgKiBJRAogICovCiAjZGVmaW5lIE9WNzcyMCAgMHg3NzIwCkBAIC0zODAsOCArMzc2LDkgQEAKIHN0cnVjdCBvdjc3MnhfY29sb3JfZm9ybWF0IHsKIAljaGFyICAgICAgICAgICAgICAgICAgICAgKm5hbWU7CiAJX191MzIgICAgICAgICAgICAgICAgICAgICBmb3VyY2M7Ci0JY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0ICpyZWdzOwotCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgb3B0aW9uOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgZHNwMzsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgIGNvbTM7CisJdTggICAgICAgICAgICAgICAgICAgICAgICBjb203OwogfTsKIAogc3RydWN0IG92NzcyeF93aW5fc2l6ZSB7CkBAIC0zOTksMzkgKzM5NiwxMyBAQAogCWNvbnN0IHN0cnVjdCBvdjc3MnhfY29sb3JfZm9ybWF0ICpmbXQ7CiAJY29uc3Qgc3RydWN0IG92NzcyeF93aW5fc2l6ZSAgICAgKndpbjsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICAgIGZsYWdfdmZsaXA6MTsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICAgZmxhZ19oZmxpcDoxOwogfTsKIAogI2RlZmluZSBFTkRNQVJLRVIgeyAweGZmLCAweGZmIH0KIAogLyoKLSAqIHJlZ2lzdGVyIHNldHRpbmcgZm9yIGNvbG9yIGZvcm1hdAotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0IG92NzcyeF9SR0I1NTVfcmVnc1tdID0gewotCXsgQ09NMywgMHgwMCB9LAotCXsgQ09NNywgRk1UX1JHQjU1NSB8IE9GTVRfUkdCIH0sCi0JRU5ETUFSS0VSLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCByZWd2YWxfbGlzdCBvdjc3MnhfUkdCNTY1X3JlZ3NbXSA9IHsKLQl7IENPTTMsIDB4MDAgfSwKLQl7IENPTTcsIEZNVF9SR0I1NjUgfCBPRk1UX1JHQiB9LAotCUVORE1BUktFUiwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3Y3NzJ4X1lZVVZfcmVnc1tdID0gewotCXsgQ09NMywgU1dBUF9ZVVYgfSwKLQl7IENPTTcsIE9GTVRfWVVWIH0sCi0JRU5ETUFSS0VSLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCByZWd2YWxfbGlzdCBvdjc3MnhfVVZZWV9yZWdzW10gPSB7Ci0JeyBDT00zLCAweDAwIH0sCi0JeyBDT003LCBPRk1UX1lVViB9LAotCUVORE1BUktFUiwKLX07Ci0KLQotLyoKICAqIHJlZ2lzdGVyIHNldHRpbmcgZm9yIHdpbmRvdyBzaXplCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3Y3NzJ4X3F2Z2FfcmVnc1tdID0gewpAQCAtNTAwLDM4ICs0NzEsNDggQEAKIC8qCiAgKiBjb2xvciBmb3JtYXQgbGlzdAogICovCi0jZGVmaW5lIFRfWVVZViAwCiBzdGF0aWMgY29uc3Qgc3RydWN0IG92NzcyeF9jb2xvcl9mb3JtYXQgb3Y3NzJ4X2NmbXRzW10gPSB7Ci0JW1RfWVVZVl0gPSB7CisJewogCQlTRVRGT1VSQ0MoWVVZViksCi0JCS5yZWdzICAgPSBvdjc3MnhfWVlVVl9yZWdzLAorCQkuZHNwMyAgID0gMHgwLAorCQkuY29tMyAgID0gU1dBUF9ZVVYsCisJCS5jb203ICAgPSBPRk1UX1lVViwKIAl9LAogCXsKIAkJU0VURk9VUkNDKFlWWVUpLAotCQkucmVncyAgID0gb3Y3NzJ4X1lZVVZfcmVncywKLQkJLm9wdGlvbiA9IE9QX1VWLAorCQkuZHNwMyAgID0gVVZfT04sCisJCS5jb20zICAgPSBTV0FQX1lVViwKKwkJLmNvbTcgICA9IE9GTVRfWVVWLAogCX0sCiAJewogCQlTRVRGT1VSQ0MoVVlWWSksCi0JCS5yZWdzICAgPSBvdjc3MnhfVVZZWV9yZWdzLAorCQkuZHNwMyAgID0gMHgwLAorCQkuY29tMyAgID0gMHgwLAorCQkuY29tNyAgID0gT0ZNVF9ZVVYsCiAJfSwKIAl7CiAJCVNFVEZPVVJDQyhSR0I1NTUpLAotCQkucmVncyAgID0gb3Y3NzJ4X1JHQjU1NV9yZWdzLAotCQkub3B0aW9uID0gT1BfU1dBUF9SR0IsCisJCS5kc3AzICAgPSAweDAsCisJCS5jb20zICAgPSBTV0FQX1JHQiwKKwkJLmNvbTcgICA9IEZNVF9SR0I1NTUgfCBPRk1UX1JHQiwKIAl9LAogCXsKIAkJU0VURk9VUkNDKFJHQjU1NVgpLAotCQkucmVncyAgID0gb3Y3NzJ4X1JHQjU1NV9yZWdzLAorCQkuZHNwMyAgID0gMHgwLAorCQkuY29tMyAgID0gMHgwLAorCQkuY29tNyAgID0gRk1UX1JHQjU1NSB8IE9GTVRfUkdCLAogCX0sCiAJewogCQlTRVRGT1VSQ0MoUkdCNTY1KSwKLQkJLnJlZ3MgICA9IG92NzcyeF9SR0I1NjVfcmVncywKLQkJLm9wdGlvbiA9IE9QX1NXQVBfUkdCLAorCQkuZHNwMyAgID0gMHgwLAorCQkuY29tMyAgID0gU1dBUF9SR0IsCisJCS5jb203ICAgPSBGTVRfUkdCNTY1IHwgT0ZNVF9SR0IsCiAJfSwKIAl7CiAJCVNFVEZPVVJDQyhSR0I1NjVYKSwKLQkJLnJlZ3MgICA9IG92NzcyeF9SR0I1NjVfcmVncywKKwkJLmRzcDMgICA9IDB4MCwKKwkJLmNvbTMgICA9IDB4MCwKKwkJLmNvbTcgICA9IEZNVF9SR0I1NjUgfCBPRk1UX1JHQiwKIAl9LAogfTsKIApAQCAtNTYyLDYgKzU0MywyNyBAQAogCS5yZWdzICAgICA9IG92NzcyeF9xdmdhX3JlZ3MsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsIG92NzcyeF9jb250cm9sc1tdID0geworCXsKKwkJLmlkCQk9IFY0TDJfQ0lEX1ZGTElQLAorCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZQkJPSAiRmxpcCBWZXJ0aWNhbGx5IiwKKwkJLm1pbmltdW0JPSAwLAorCQkubWF4aW11bQk9IDEsCisJCS5zdGVwCQk9IDEsCisJCS5kZWZhdWx0X3ZhbHVlCT0gMCwKKwl9LAorCXsKKwkJLmlkCQk9IFY0TDJfQ0lEX0hGTElQLAorCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZQkJPSAiRmxpcCBIb3Jpem9udGFsbHkiLAorCQkubWluaW11bQk9IDAsCisJCS5tYXhpbXVtCT0gMSwKKwkJLnN0ZXAJCT0gMSwKKwkJLmRlZmF1bHRfdmFsdWUJPSAwLAorCX0sCit9OworCiAKIC8qCiAgKiBnZW5lcmFsIGZ1bmN0aW9uCkBAIC01ODcsOCArNTg5LDExIEBACiAJCQkJCSAgdTggIHNldCkKIHsKIAlzMzIgdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgY29tbWFuZCk7CisJaWYgKHZhbCA8IDApCisJCXJldHVybiB2YWw7CisKIAl2YWwgJj0gfm1hc2s7Ci0JdmFsIHw9ICBzZXQ7CisJdmFsIHw9IHNldCAmIG1hc2s7CiAKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIGNvbW1hbmQsIHZhbCk7CiB9CkBAIC02MzUsNzQgKzY0MCwyNCBAQAogc3RhdGljIGludCBvdjc3Mnhfc3RhcnRfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKIAlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7Ci0JaW50ICAgICAgICAgICAgICAgICByZXQ7CiAKLQlpZiAoIXByaXYtPndpbikKLQkJcHJpdi0+d2luID0gJm92NzcyeF93aW5fdmdhOwotCWlmICghcHJpdi0+Zm10KQotCQlwcml2LT5mbXQgPSAmb3Y3NzJ4X2NmbXRzW1RfWVVZVl07Ci0KLQkvKgotCSAqIHJlc2V0IGhhcmR3YXJlCi0JICovCi0Jb3Y3NzJ4X3Jlc2V0KHByaXYtPmNsaWVudCk7Ci0KLQkvKgotCSAqIHNldCBjb2xvciBmb3JtYXQKLQkgKi8KLQlyZXQgPSBvdjc3Mnhfd3JpdGVfYXJyYXkocHJpdi0+Y2xpZW50LCBwcml2LT5mbXQtPnJlZ3MpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIHN0YXJ0X2VuZDsKLQotCS8qCi0JICogc2V0IHNpemUgZm9ybWF0Ci0JICovCi0JcmV0ID0gb3Y3NzJ4X3dyaXRlX2FycmF5KHByaXYtPmNsaWVudCwgcHJpdi0+d2luLT5yZWdzKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBzdGFydF9lbmQ7Ci0KLQkvKgotCSAqIHNldCBDT003IGJpdCAoIFFWR0Egb3IgVkdBICkKLQkgKi8KLQlyZXQgPSBvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LAotCQkJICAgICAgQ09NNywgU0xDVF9NQVNLLCBwcml2LT53aW4tPmNvbTdfYml0KTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBzdGFydF9lbmQ7Ci0KLQkvKgotCSAqIHNldCBVViBzZXR0aW5nCi0JICovCi0JaWYgKHByaXYtPmZtdC0+b3B0aW9uICYgT1BfVVYpIHsKLQkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwKLQkJCQkgICAgICBEU1BfQ1RSTDMsIFVWX01BU0ssIFVWX09OKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIHN0YXJ0X2VuZDsKKwlpZiAoIXByaXYtPndpbiB8fCAhcHJpdi0+Zm10KSB7CisJCWRldl9lcnIoJmljZC0+ZGV2LCAibm9ybSBvciB3aW4gc2VsZWN0IGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKLQkvKgotCSAqIHNldCBTV0FQIHNldHRpbmcKLQkgKi8KLQlpZiAocHJpdi0+Zm10LT5vcHRpb24gJiBPUF9TV0FQX1JHQikgewotCQlyZXQgPSBvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LAotCQkJCSAgICAgIENPTTMsIFNXQVBfTUFTSywgU1dBUF9SR0IpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gc3RhcnRfZW5kOwotCX0KKwlvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LCBDT00yLCBTT0ZUX1NMRUVQX01PREUsIDApOwogCiAJZGV2X2RiZygmaWNkLT5kZXYsCiAJCSAiZm9ybWF0ICVzLCB3aW4gJXNcbiIsIHByaXYtPmZtdC0+bmFtZSwgcHJpdi0+d2luLT5uYW1lKTsKIAotc3RhcnRfZW5kOgotCXByaXYtPmZtdCA9IE5VTEw7Ci0JcHJpdi0+d2luID0gTlVMTDsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgb3Y3NzJ4X3N0b3BfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKIAlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7Ci0Jb3Y3NzJ4X3Jlc2V0KHByaXYtPmNsaWVudCk7CisJb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwgQ09NMiwgU09GVF9TTEVFUF9NT0RFLCBTT0ZUX1NMRUVQX01PREUpOwogCXJldHVybiAwOwogfQogCkBAIC03MTgsMTEgKzY3Myw1NCBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHByaXYtPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8IFNPQ0FNX01BU1RFUiB8CiAJCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfAotCQlwcml2LT5pbmZvLT5idXN3aWR0aDsKKwkJU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8IHByaXYtPmluZm8tPmJ1c3dpZHRoOwogCiAJcmV0dXJuIHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKGljbCwgZmxhZ3MpOwogfQogCitzdGF0aWMgaW50IG92NzcyeF9nZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfVkZMSVA6CisJCWN0cmwtPnZhbHVlID0gcHJpdi0+ZmxhZ192ZmxpcDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJY3RybC0+dmFsdWUgPSBwcml2LT5mbGFnX2hmbGlwOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NzJ4X3NldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7CisJaW50IHJldCA9IDA7CisJdTggdmFsOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfVkZMSVA6CisJCXZhbCA9IGN0cmwtPnZhbHVlID8gVkZMSVBfSU1HIDogMHgwMDsKKwkJcHJpdi0+ZmxhZ192ZmxpcCA9IGN0cmwtPnZhbHVlOworCQlpZiAocHJpdi0+aW5mby0+ZmxhZ3MgJiBPVjc3MlhfRkxBR19WRkxJUCkKKwkJCXZhbCBePSBWRkxJUF9JTUc7CisJCXJldCA9IG92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsIENPTTMsIFZGTElQX0lNRywgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJdmFsID0gY3RybC0+dmFsdWUgPyBIRkxJUF9JTUcgOiAweDAwOworCQlwcml2LT5mbGFnX2hmbGlwID0gY3RybC0+dmFsdWU7CisJCWlmIChwcml2LT5pbmZvLT5mbGFncyAmIE9WNzcyWF9GTEFHX0hGTElQKQorCQkJdmFsIF49IEhGTElQX0lNRzsKKwkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwgQ09NMywgSEZMSVBfSU1HLCB2YWwpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IG92NzcyeF9nZXRfY2hpcF9pZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCSAgICAgIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICAgKmlkKQogewpAQCAtNzg3LDEzICs3ODUsMTEgQEAKIAlyZXR1cm4gd2luOwogfQogCi0KLXN0YXRpYyBpbnQgb3Y3NzJ4X3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgIF9fdTMyICAgICAgICAgICAgICAgICAgICAgcGl4Zm10LAotCQkJICBzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgICAgKnJlY3QpCitzdGF0aWMgaW50IG92NzcyeF9zZXRfcGFyYW1zKHN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0LAorCQkJICAgICB1MzIgcGl4Zm10KQogewotCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKKwl1OCAgdmFsOwogCWludCBpOwogCiAJLyoKQEAgLTgwMywxNyArNzk5LDk5IEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3Y3NzJ4X2NmbXRzKTsgaSsrKSB7CiAJCWlmIChwaXhmbXQgPT0gb3Y3NzJ4X2NmbXRzW2ldLmZvdXJjYykgewogCQkJcHJpdi0+Zm10ID0gb3Y3NzJ4X2NmbXRzICsgaTsKLQkJCXJldCA9IDA7CiAJCQlicmVhazsKIAkJfQogCX0KKwlpZiAoIXByaXYtPmZtdCkKKwkJZ290byBvdjc3Mnhfc2V0X2ZtdF9lcnJvcjsKIAogCS8qCiAJICogc2VsZWN0IHdpbgogCSAqLwotCXByaXYtPndpbiA9IG92NzcyeF9zZWxlY3Rfd2luKHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQpOworCXByaXYtPndpbiA9IG92NzcyeF9zZWxlY3Rfd2luKHdpZHRoLCBoZWlnaHQpOworCisJLyoKKwkgKiByZXNldCBoYXJkd2FyZQorCSAqLworCW92NzcyeF9yZXNldChwcml2LT5jbGllbnQpOworCisJLyoKKwkgKiBzZXQgc2l6ZSBmb3JtYXQKKwkgKi8KKwlyZXQgPSBvdjc3Mnhfd3JpdGVfYXJyYXkocHJpdi0+Y2xpZW50LCBwcml2LT53aW4tPnJlZ3MpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG92NzcyeF9zZXRfZm10X2Vycm9yOworCisJLyoKKwkgKiBzZXQgRFNQX0NUUkwzCisJICovCisJdmFsID0gcHJpdi0+Zm10LT5kc3AzOworCWlmICh2YWwpIHsKKwkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwKKwkJCQkgICAgICBEU1BfQ1RSTDMsIFVWX01BU0ssIHZhbCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdjc3Mnhfc2V0X2ZtdF9lcnJvcjsKKwl9CisKKwkvKgorCSAqIHNldCBDT00zCisJICovCisJdmFsID0gcHJpdi0+Zm10LT5jb20zOworCWlmIChwcml2LT5pbmZvLT5mbGFncyAmIE9WNzcyWF9GTEFHX1ZGTElQKQorCQl2YWwgfD0gVkZMSVBfSU1HOworCWlmIChwcml2LT5pbmZvLT5mbGFncyAmIE9WNzcyWF9GTEFHX0hGTElQKQorCQl2YWwgfD0gSEZMSVBfSU1HOworCWlmIChwcml2LT5mbGFnX3ZmbGlwKQorCQl2YWwgXj0gVkZMSVBfSU1HOworCWlmIChwcml2LT5mbGFnX2hmbGlwKQorCQl2YWwgXj0gSEZMSVBfSU1HOworCisJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwKKwkJCSAgICAgIENPTTMsIFNXQVBfTUFTSyB8IElNR19NQVNLLCB2YWwpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG92NzcyeF9zZXRfZm10X2Vycm9yOworCisJLyoKKwkgKiBzZXQgQ09NNworCSAqLworCXZhbCA9IHByaXYtPndpbi0+Y29tN19iaXQgfCBwcml2LT5mbXQtPmNvbTc7CisJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwKKwkJCSAgICAgIENPTTcsIChTTENUX01BU0sgfCBGTVRfTUFTSyB8IE9GTVRfTUFTSyksCisJCQkgICAgICB2YWwpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG92NzcyeF9zZXRfZm10X2Vycm9yOwogCiAJcmV0dXJuIHJldDsKKworb3Y3NzJ4X3NldF9mbXRfZXJyb3I6CisKKwlvdjc3MnhfcmVzZXQocHJpdi0+Y2xpZW50KTsKKwlwcml2LT53aW4gPSBOVUxMOworCXByaXYtPmZtdCA9IE5VTEw7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG92NzcyeF9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCit7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOworCisJaWYgKCFwcml2LT5mbXQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIG92NzcyeF9zZXRfcGFyYW1zKHByaXYsIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQsCisJCQkJIHByaXYtPmZtdC0+Zm91cmNjKTsKK30KKworc3RhdGljIGludCBvdjc3Mnhfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKworCXJldHVybiBvdjc3Mnhfc2V0X3BhcmFtcyhwcml2LCBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCwKKwkJCQkgcGl4LT5waXhlbGZvcm1hdCk7CiB9CiAKIHN0YXRpYyBpbnQgb3Y3NzJ4X3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCkBAIC04ODksNyArOTY3LDYgQEAKIAkJIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShwcml2LT5jbGllbnQsIE1JREgpLAogCQkgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKHByaXYtPmNsaWVudCwgTUlETCkpOwogCi0KIAlyZXR1cm4gc29jX2NhbWVyYV92aWRlb19zdGFydChpY2QpOwogfQogCkBAIC05MDYsMTAgKzk4MywxNSBAQAogCS5yZWxlYXNlCQk9IG92NzcyeF9yZWxlYXNlLAogCS5zdGFydF9jYXB0dXJlCQk9IG92NzcyeF9zdGFydF9jYXB0dXJlLAogCS5zdG9wX2NhcHR1cmUJCT0gb3Y3NzJ4X3N0b3BfY2FwdHVyZSwKKwkuc2V0X2Nyb3AJCT0gb3Y3NzJ4X3NldF9jcm9wLAogCS5zZXRfZm10CQk9IG92NzcyeF9zZXRfZm10LAogCS50cnlfZm10CQk9IG92NzcyeF90cnlfZm10LAogCS5zZXRfYnVzX3BhcmFtCQk9IG92NzcyeF9zZXRfYnVzX3BhcmFtLAogCS5xdWVyeV9idXNfcGFyYW0JPSBvdjc3MnhfcXVlcnlfYnVzX3BhcmFtLAorCS5jb250cm9scwkJPSBvdjc3MnhfY29udHJvbHMsCisJLm51bV9jb250cm9scwkJPSBBUlJBWV9TSVpFKG92NzcyeF9jb250cm9scyksCisJLmdldF9jb250cm9sCQk9IG92NzcyeF9nZXRfY29udHJvbCwKKwkuc2V0X2NvbnRyb2wJCT0gb3Y3NzJ4X3NldF9jb250cm9sLAogCS5nZXRfY2hpcF9pZAkJPSBvdjc3MnhfZ2V0X2NoaXBfaWQsCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwogCS5nZXRfcmVnaXN0ZXIJCT0gb3Y3NzJ4X2dldF9yZWdpc3RlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfY29yZS5jCmluZGV4IGM4NDFmNGUuLmQ1NzNkODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX2NvcmUuYwpAQCAtMTUsNiArMTUsOSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAjaW5jbHVkZSAib3ZjYW1jaGlwX3ByaXYuaCIKIAogI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjIuMjcgZm9yIExpbnV4IDIuNiIKQEAgLTQ0LDYgKzQ3LDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKwogLyogUmVnaXN0ZXJzIGNvbW1vbiB0byBhbGwgY2hpcHMsIHRoYXQgYXJlIG5lZWRlZCBmb3IgZGV0ZWN0aW9uICovCiAjZGVmaW5lIEdFTkVSSUNfUkVHX0lEX0hJR0ggICAgICAgMHgxQwkvKiBtYW51ZmFjdHVyZXIgSUQgTVNCICovCiAjZGVmaW5lIEdFTkVSSUNfUkVHX0lEX0xPVyAgICAgICAgMHgxRAkvKiBtYW51ZmFjdHVyZXIgSUQgTFNCICovCkBAIC02MSwxMCArNjUsNiBAQAogCVtDQ19PVjY2MzBBRl0JPSAiT1Y2NjMwQUYiLAogfTsKIAotLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXI7Ci1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlOwotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBpbnQgb3Zfd3JpdGVfcmVndmFscyhzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IG92Y2FtY2hpcF9yZWd2YWxzICpydmFscykKQEAgLTI1MywxMTIgKzI1MywzNiBAQAogCiAJLyogVGVzdCBmb3IgN3h4MCAqLwogCVBERUJVRygzLCAiVGVzdGluZyBmb3IgMFY3eHgwIik7Ci0JYy0+YWRkciA9IE9WN3h4MF9TSUQ7Ci0JaWYgKGluaXRfY2FtY2hpcChjKSA8IDApIHsKLQkJLyogVGVzdCBmb3IgNnh4MCAqLwotCQlQREVCVUcoMywgIlRlc3RpbmcgZm9yIDBWNnh4MCIpOwotCQljLT5hZGRyID0gT1Y2eHgwX1NJRDsKLQkJaWYgKGluaXRfY2FtY2hpcChjKSA8IDApIHsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9IGVsc2UgewotCQkJaWYgKG92Nnh4MF9kZXRlY3QoYykgPCAwKSB7Ci0JCQkJUEVSUk9SKCJGYWlsZWQgdG8gaW5pdCBPVjZ4eDAiKTsKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCX0KLQkJfQotCX0gZWxzZSB7CisJaWYgKGluaXRfY2FtY2hpcChjKSA8IDApCisJCXJldHVybiAtRU5PREVWOworCS8qIDctYml0IGFkZHJlc3NlcyB3aXRoIGJpdCAwIHNldCBhcmUgZm9yIHRoZSBPVjd4eDAgKi8KKwlpZiAoYy0+YWRkciAmIDEpIHsKIAkJaWYgKG92N3h4MF9kZXRlY3QoYykgPCAwKSB7CiAJCQlQRVJST1IoIkZhaWxlZCB0byBpbml0IE9WN3h4MCIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KKwkJcmV0dXJuIDA7CiAJfQotCisJLyogVGVzdCBmb3IgNnh4MCAqLworCVBERUJVRygzLCAiVGVzdGluZyBmb3IgMFY2eHgwIik7CisJaWYgKG92Nnh4MF9kZXRlY3QoYykgPCAwKSB7CisJCVBFUlJPUigiRmFpbGVkIHRvIGluaXQgT1Y2eHgwIik7CisJCXJldHVybiAtRUlPOworCX0KIAlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCBvdmNhbWNoaXBfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3N0YXRpYyBsb25nIG92Y2FtY2hpcF9pb2N0bChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3Qgb3ZjYW1jaGlwICpvdjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqYzsKLQotCS8qIEkyQyBpcyBub3QgYSBQblAgYnVzLCBzbyB3ZSBjYW4gbmV2ZXIgYmUgY2VydGFpbiB0aGF0IHdlJ3JlIHRhbGtpbmcKLQkgKiB0byB0aGUgcmlnaHQgY2hpcC4gVG8gcHJldmVudCBkYW1hZ2UgdG8gRUVQUk9NUyBhbmQgc3VjaCwgb25seQotCSAqIGF0dGFjaCB0byBhZGFwdGVycyB0aGF0IGFyZSBrbm93biB0byBjb250YWluIE9WIGNhbWVyYSBjaGlwcy4gKi8KLQotCXN3aXRjaCAoYWRhcC0+aWQpIHsKLQljYXNlIEkyQ19IV19TTUJVU19PVjUxMToKLQljYXNlIEkyQ19IV19TTUJVU19PVjUxODoKLQljYXNlIEkyQ19IV19TTUJVU19XOTk2OENGOgotCQlQREVCVUcoMSwgIkFkYXB0ZXIgSUQgMHglMDZ4IGFjY2VwdGVkIiwgYWRhcC0+aWQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlQREVCVUcoMSwgIkFkYXB0ZXIgSUQgMHglMDZ4IHJlamVjdGVkIiwgYWRhcC0+aWQpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQljID0ga21hbGxvYyhzaXplb2YgKmMsIEdGUF9LRVJORUwpOwotCWlmICghYykgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gbm9fY2xpZW50OwotCX0KLQltZW1jcHkoYywgJmNsaWVudF90ZW1wbGF0ZSwgc2l6ZW9mICpjKTsKLQljLT5hZGFwdGVyID0gYWRhcDsKLQlzdHJjcHkoYy0+bmFtZSwgIk9WPz8/PyIpOwotCi0Jb3YgPSBremFsbG9jKHNpemVvZiAqb3YsIEdGUF9LRVJORUwpOwotCWlmICghb3YpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIG5vX292OwotCX0KLQlpMmNfc2V0X2NsaWVudGRhdGEoYywgb3YpOwotCi0JcmMgPSBvdmNhbWNoaXBfZGV0ZWN0KGMpOwotCWlmIChyYyA8IDApCi0JCWdvdG8gZXJyb3I7Ci0KLQlzdHJjcHkoYy0+bmFtZSwgY2hpcF9uYW1lc1tvdi0+c3VidHlwZV0pOwotCi0JUERFQlVHKDEsICJDYW1lcmEgY2hpcCBkZXRlY3Rpb24gY29tcGxldGUiKTsKLQotCWkyY19hdHRhY2hfY2xpZW50KGMpOwotCi0JcmV0dXJuIHJjOwotZXJyb3I6Ci0Ja2ZyZWUob3YpOwotbm9fb3Y6Ci0Ja2ZyZWUoYyk7Ci1ub19jbGllbnQ6Ci0JUERFQlVHKDEsICJyZXR1cm5pbmcgJWQiLCByYyk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IG92Y2FtY2hpcF9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmMpCi17Ci0Jc3RydWN0IG92Y2FtY2hpcCAqb3YgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7Ci0JaW50IHJjOwotCi0JcmMgPSBvdi0+c29wcy0+ZnJlZShjKTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7Ci0KLQlpMmNfZGV0YWNoX2NsaWVudChjKTsKLQotCWtmcmVlKG92KTsKLQlrZnJlZShjKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvdmNhbWNoaXBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBvdmNhbWNoaXAgKm92ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXN0cnVjdCBvdmNhbWNoaXAgKm92ID0gdG9fb3ZjYW1jaGlwKHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqYyA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCiAJaWYgKCFvdi0+aW5pdGlhbGl6ZWQgJiYKIAkgICAgY21kICE9IE9WQ0FNQ0hJUF9DTURfUV9TVUJUWVBFICYmCiAJICAgIGNtZCAhPSBPVkNBTUNISVBfQ01EX0lOSVRJQUxJWkUpIHsKLQkJZGV2X2VycigmYy0+ZGV2LCAiRVJST1I6IENhbWVyYSBjaGlwIG5vdCBpbml0aWFsaXplZCB5ZXQhXG4iKTsKKwkJdjRsMl9lcnIoc2QsICJDYW1lcmEgY2hpcCBub3QgaW5pdGlhbGl6ZWQgeWV0IVxuIik7CiAJCXJldHVybiAtRVBFUk07CiAJfQogCkBAIC0zNzksMTAgKzMwMywxMCBAQAogCiAJCWlmIChvdi0+bW9ubykgewogCQkJaWYgKG92LT5zdWJ0eXBlICE9IENDX09WNzYyMCkKLQkJCQlkZXZfd2FybigmYy0+ZGV2LCAiV2FybmluZzogTW9ub2Nocm9tZSBub3QgIgorCQkJCXY0bDJfd2FybihzZCwgIk1vbm9jaHJvbWUgbm90ICIKIAkJCQkJImltcGxlbWVudGVkIGZvciB0aGlzIGNoaXBcbiIpOwogCQkJZWxzZQotCQkJCWRldl9pbmZvKCZjLT5kZXYsICJJbml0aWFsaXppbmcgY2hpcCBhcyAiCisJCQkJdjRsMl9pbmZvKHNkLCAiSW5pdGlhbGl6aW5nIGNoaXAgYXMgIgogCQkJCQkibW9ub2Nocm9tZVxuIik7CiAJCX0KIApAQCAtNDAwLDM1ICszMjQsNzIgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9CQkib3ZjYW1jaGlwIiwKLQl9LAotCS5pZCA9CQkJSTJDX0RSSVZFUklEX09WQ0FNQ0hJUCwKLQkuYXR0YWNoX2FkYXB0ZXIgPQlvdmNhbWNoaXBfYXR0YWNoLAotCS5kZXRhY2hfY2xpZW50ID0Jb3ZjYW1jaGlwX2RldGFjaCwKLQkuY29tbWFuZCA9CQlvdmNhbWNoaXBfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgb3ZjYW1jaGlwX2NvcmVfb3BzID0geworCS5pb2N0bCA9IG92Y2FtY2hpcF9pb2N0bCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGUgPSB7Ci0JLm5hbWUgPQkJIih1bnNldCkiLAotCS5kcml2ZXIgPQkmZHJpdmVyLAorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgb3ZjYW1jaGlwX29wcyA9IHsKKwkuY29yZSA9ICZvdmNhbWNoaXBfY29yZV9vcHMsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBvdmNhbWNoaXBfaW5pdCh2b2lkKQorc3RhdGljIGludCBvdmNhbWNoaXBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLSNpZmRlZiBERUJVRwotCW92Y2FtY2hpcF9kZWJ1ZyA9IGRlYnVnOwotI2VuZGlmCisJc3RydWN0IG92Y2FtY2hpcCAqb3Y7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwlpbnQgcmMgPSAwOwogCi0JUElORk8oRFJJVkVSX1ZFUlNJT04gIiA6ICIgRFJJVkVSX0RFU0MpOwotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmZHJpdmVyKTsKKwlvdiA9IGt6YWxsb2Moc2l6ZW9mICpvdiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvdikgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gbm9fb3Y7CisJfQorCXNkID0gJm92LT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmb3ZjYW1jaGlwX29wcyk7CisKKwlyYyA9IG92Y2FtY2hpcF9kZXRlY3QoY2xpZW50KTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycm9yOworCisJdjRsX2luZm8oY2xpZW50LCAiJXMgZm91bmQgQCAweCUwMnggKCVzKVxuIiwKKwkJCWNoaXBfbmFtZXNbb3YtPnN1YnR5cGVdLCBjbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKworCVBERUJVRygxLCAiQ2FtZXJhIGNoaXAgZGV0ZWN0aW9uIGNvbXBsZXRlIik7CisKKwlyZXR1cm4gcmM7CitlcnJvcjoKKwlrZnJlZShvdik7Citub19vdjoKKwlQREVCVUcoMSwgInJldHVybmluZyAlZCIsIHJjKTsKKwlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBvdmNhbWNoaXBfZXhpdCh2b2lkKQorc3RhdGljIGludCBvdmNhbWNoaXBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JaTJjX2RlbF9kcml2ZXIoJmRyaXZlcik7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBvdmNhbWNoaXAgKm92ID0gdG9fb3ZjYW1jaGlwKHNkKTsKKwlpbnQgcmM7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJcmMgPSBvdi0+c29wcy0+ZnJlZShjbGllbnQpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCWtmcmVlKG92KTsKKwlyZXR1cm4gMDsKIH0KIAotbW9kdWxlX2luaXQob3ZjYW1jaGlwX2luaXQpOwotbW9kdWxlX2V4aXQob3ZjYW1jaGlwX2V4aXQpOworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG92Y2FtY2hpcF9pZFtdID0geworCXsgIm92Y2FtY2hpcCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgb3ZjYW1jaGlwX2lkKTsKKworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gIm92Y2FtY2hpcCIsCisJLnByb2JlID0gb3ZjYW1jaGlwX3Byb2JlLAorCS5yZW1vdmUgPSBvdmNhbWNoaXBfcmVtb3ZlLAorCS5pZF90YWJsZSA9IG92Y2FtY2hpcF9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX3ByaXYuaAppbmRleCBhMDU2NTBmLi40ZjA3Yjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfcHJpdi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9wcml2LmgKQEAgLTE2LDYgKzE2LDcgQEAKICNkZWZpbmUgX19MSU5VWF9PVkNBTUNISVBfUFJJVl9ICiAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPgogI2luY2x1ZGUgPG1lZGlhL292Y2FtY2hpcC5oPgogCiAjaWZkZWYgREVCVUcKQEAgLTQ2LDYgKzQ3LDcgQEAKIH07CiAKIHN0cnVjdCBvdmNhbWNoaXAgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAlzdHJ1Y3Qgb3ZjYW1jaGlwX29wcyAqc29wczsKIAl2b2lkICpzcHJpdjsgICAgICAgICAgICAgICAvKiBQcml2YXRlIGRhdGEgZm9yIE9WN3gxMC5jIGV0Yy4uLiAqLwogCWludCBzdWJ0eXBlOyAgICAgICAgICAgICAgIC8qID0gU0VOX09WNzYxMCBldGMuLi4gKi8KQEAgLTUzLDYgKzU1LDExIEBACiAJaW50IGluaXRpYWxpemVkOyAgICAgICAgICAgLyogT1ZDQU1DSElQX0NNRF9JTklUSUFMSVpFIHdhcyBzdWNjZXNzZnVsICovCiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBvdmNhbWNoaXAgKnRvX292Y2FtY2hpcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBvdmNhbWNoaXAsIHNkKTsKK30KKwogZXh0ZXJuIHN0cnVjdCBvdmNhbWNoaXBfb3BzIG92NngyMF9vcHM7CiBleHRlcm4gc3RydWN0IG92Y2FtY2hpcF9vcHMgb3Y2eDMwX29wczsKIGV4dGVybiBzdHJ1Y3Qgb3ZjYW1jaGlwX29wcyBvdjd4MTBfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvS2NvbmZpZwppbmRleCA4NTRjMmE4Li5mOWI2MDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvS2NvbmZpZwpAQCAtNDAsMTAgKzQwLDEwIEBACiAJc2VsZWN0IERWQl9MR0RUMzMwWCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfUzVIMTQwOSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfUzVIMTQxMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBEVkJfVERBMTAwNDggaWYgIURWQl9GRV9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfVERBMTgyNzEgaWYgIURWQl9GRV9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfVERBODI5MCBpZiAhRFZCX0ZFX0NVU1RPTUlaRQorCXNlbGVjdCBEVkJfVERBMTAwNDggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBMTgyNzEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjkwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAktLS1oZWxwLS0tCiAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSBEVkIgaW50ZXJmYWNlIGZvciB0aGUgcHZydXNiMiBkcml2ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvTWFrZWZpbGUKaW5kZXggNGZkYTJkZS4uZGUyZmMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9NYWtlZmlsZQpAQCAtMiwxNCArMiwxNSBAQAogb2JqLXB2cnVzYjItZGVidWdpZmMtJChDT05GSUdfVklERU9fUFZSVVNCMl9ERUJVR0lGQykgOj0gcHZydXNiMi1kZWJ1Z2lmYy5vCiBvYmotcHZydXNiMi1kdmItJChDT05GSUdfVklERU9fUFZSVVNCMl9EVkIpIDo9IHB2cnVzYjItZHZiLm8KIAotcHZydXNiMi1vYmpzCTo9IHB2cnVzYjItaTJjLWNvcmUubyBwdnJ1c2IyLWkyYy1jbWQtdjRsMi5vIFwKLQkJICAgcHZydXNiMi1hdWRpby5vIHB2cnVzYjItaTJjLWNoaXBzLXY0bDIubyBcCitwdnJ1c2IyLW9ianMJOj0gcHZydXNiMi1pMmMtY29yZS5vIFwKKwkJICAgcHZydXNiMi1hdWRpby5vIFwKIAkJICAgcHZydXNiMi1lbmNvZGVyLm8gcHZydXNiMi12aWRlby12NGwubyBcCi0JCSAgIHB2cnVzYjItZWVwcm9tLm8gcHZydXNiMi10dW5lci5vIFwKKwkJICAgcHZydXNiMi1lZXByb20ubyBcCiAJCSAgIHB2cnVzYjItbWFpbi5vIHB2cnVzYjItaGR3Lm8gcHZydXNiMi12NGwyLm8gXAogCQkgICBwdnJ1c2IyLWN0cmwubyBwdnJ1c2IyLXN0ZC5vIHB2cnVzYjItZGV2YXR0ci5vIFwKIAkJICAgcHZydXNiMi1jb250ZXh0Lm8gcHZydXNiMi1pby5vIHB2cnVzYjItaW9yZWFkLm8gXAogCQkgICBwdnJ1c2IyLWN4MjU4NHgtdjRsLm8gcHZydXNiMi13bTg3NzUubyBcCisJCSAgIHB2cnVzYjItY3M1M2wzMmEubyBcCiAJCSAgICQob2JqLXB2cnVzYjItZHZiLXkpIFwKIAkJICAgJChvYmotcHZydXNiMi1zeXNmcy15KSAkKG9iai1wdnJ1c2IyLWRlYnVnaWZjLXkpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1hdWRpby5jCmluZGV4IGNkZWRhYTUuLmNjZjJhM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uYwpAQCAtMjYsMTQgKzI2LDYgQEAKICNpbmNsdWRlIDxtZWRpYS9tc3AzNDAwLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIAotc3RydWN0IHB2cjJfbXNwMzQwMF9oYW5kbGVyIHsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdzsKLQlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IHB2cjJfaTJjX2hhbmRsZXIgaTJjX2hhbmRsZXI7Ci0JdW5zaWduZWQgbG9uZyBzdGFsZV9tYXNrOwotfTsKLQotCiAKIHN0cnVjdCByb3V0aW5nX3NjaGVtZSB7CiAJY29uc3QgaW50ICpkZWY7CkBAIC02MywxMjMgKzU1LDMzIEBACiAJfSwKIH07CiAKLS8qIFRoaXMgZnVuY3Rpb24gc2VsZWN0cyB0aGUgY29ycmVjdCBhdWRpbyBpbnB1dCBzb3VyY2UgKi8KLXN0YXRpYyB2b2lkIHNldF9zdGVyZW8oc3RydWN0IHB2cjJfbXNwMzQwMF9oYW5kbGVyICpjdHh0KQordm9pZCBwdnIyX21zcDM0MDBfc3ViZGV2X3VwZGF0ZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwotCWNvbnN0IHN0cnVjdCByb3V0aW5nX3NjaGVtZSAqc3A7Ci0JdW5zaWduZWQgaW50IHNpZCA9IGhkdy0+aGR3X2Rlc2MtPnNpZ25hbF9yb3V0aW5nX3NjaGVtZTsKKwlpZiAoaGR3LT5pbnB1dF9kaXJ0eSB8fCBoZHctPmZvcmNlX2RpcnR5KSB7CisJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CisJCWNvbnN0IHN0cnVjdCByb3V0aW5nX3NjaGVtZSAqc3A7CisJCXVuc2lnbmVkIGludCBzaWQgPSBoZHctPmhkd19kZXNjLT5zaWduYWxfcm91dGluZ19zY2hlbWU7CiAKLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyBtc3AzNDAwIHY0bDIgc2V0X3N0ZXJlbyIpOworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgbXNwMzQwMCB2NGwyIHNldF9zdGVyZW8iKTsKIAotCWlmICgoc2lkIDwgQVJSQVlfU0laRShyb3V0aW5nX3NjaGVtZXMpKSAmJgotCSAgICAoKHNwID0gcm91dGluZ19zY2hlbWVzICsgc2lkKSAhPSBOVUxMKSAmJgotCSAgICAoaGR3LT5pbnB1dF92YWwgPj0gMCkgJiYKLQkgICAgKGhkdy0+aW5wdXRfdmFsIDwgc3AtPmNudCkpIHsKLQkJcm91dGUuaW5wdXQgPSBzcC0+ZGVmW2hkdy0+aW5wdXRfdmFsXTsKLQl9IGVsc2UgewotCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKLQkJCSAgICIqKiogV0FSTklORyAqKiogaTJjIG1zcDM0MDAgdjRsMiBzZXRfc3RlcmVvOiIKLQkJCSAgICIgSW52YWxpZCByb3V0aW5nIHNjaGVtZSAoJXUpIGFuZC9vciBpbnB1dCAoJWQpIiwKLQkJCSAgIHNpZCxoZHctPmlucHV0X3ZhbCk7Ci0JCXJldHVybjsKLQl9Ci0Jcm91dGUub3V0cHV0ID0gTVNQX09VVFBVVChNU1BfU0NfSU5fRFNQX1NDQVJUMSk7Ci0JcHZyMl9pMmNfY2xpZW50X2NtZChjdHh0LT5jbGllbnQsVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsJnJvdXRlKTsKLX0KLQotCi1zdGF0aWMgaW50IGNoZWNrX3N0ZXJlbyhzdHJ1Y3QgcHZyMl9tc3AzNDAwX2hhbmRsZXIgKmN0eHQpCi17Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjdHh0LT5oZHc7Ci0JcmV0dXJuIGhkdy0+aW5wdXRfZGlydHk7Ci19Ci0KLQotc3RydWN0IHB2cjJfbXNwMzQwMF9vcHMgewotCXZvaWQgKCp1cGRhdGUpKHN0cnVjdCBwdnIyX21zcDM0MDBfaGFuZGxlciAqKTsKLQlpbnQgKCpjaGVjaykoc3RydWN0IHB2cjJfbXNwMzQwMF9oYW5kbGVyICopOwotfTsKLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfbXNwMzQwMF9vcHMgbXNwMzQwMF9vcHNbXSA9IHsKLQl7IC51cGRhdGUgPSBzZXRfc3RlcmVvLCAuY2hlY2sgPSBjaGVja19zdGVyZW99LAotfTsKLQotCi1zdGF0aWMgaW50IG1zcDM0MDBfY2hlY2soc3RydWN0IHB2cjJfbXNwMzQwMF9oYW5kbGVyICpjdHh0KQotewotCXVuc2lnbmVkIGxvbmcgbXNrOwotCXVuc2lnbmVkIGludCBpZHg7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUobXNwMzQwMF9vcHMpOyBpZHgrKykgewotCQltc2sgPSAxIDw8IGlkeDsKLQkJaWYgKGN0eHQtPnN0YWxlX21hc2sgJiBtc2spIGNvbnRpbnVlOwotCQlpZiAobXNwMzQwMF9vcHNbaWR4XS5jaGVjayhjdHh0KSkgewotCQkJY3R4dC0+c3RhbGVfbWFzayB8PSBtc2s7CisJCWlmICgoc2lkIDwgQVJSQVlfU0laRShyb3V0aW5nX3NjaGVtZXMpKSAmJgorCQkgICAgKChzcCA9IHJvdXRpbmdfc2NoZW1lcyArIHNpZCkgIT0gTlVMTCkgJiYKKwkJICAgIChoZHctPmlucHV0X3ZhbCA+PSAwKSAmJgorCQkgICAgKGhkdy0+aW5wdXRfdmFsIDwgc3AtPmNudCkpIHsKKwkJCXJvdXRlLmlucHV0ID0gc3AtPmRlZltoZHctPmlucHV0X3ZhbF07CisJCX0gZWxzZSB7CisJCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKKwkJCQkgICAiKioqIFdBUk5JTkcgKioqIHN1YmRldiBtc3AzNDAwIHNldF9pbnB1dDoiCisJCQkJICAgIiBJbnZhbGlkIHJvdXRpbmcgc2NoZW1lICgldSkiCisJCQkJICAgIiBhbmQvb3IgaW5wdXQgKCVkKSIsCisJCQkJICAgc2lkLCBoZHctPmlucHV0X3ZhbCk7CisJCQlyZXR1cm47CiAJCX0KLQl9Ci0JcmV0dXJuIGN0eHQtPnN0YWxlX21hc2sgIT0gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCBtc3AzNDAwX3VwZGF0ZShzdHJ1Y3QgcHZyMl9tc3AzNDAwX2hhbmRsZXIgKmN0eHQpCi17Ci0JdW5zaWduZWQgbG9uZyBtc2s7Ci0JdW5zaWduZWQgaW50IGlkeDsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShtc3AzNDAwX29wcyk7IGlkeCsrKSB7Ci0JCW1zayA9IDEgPDwgaWR4OwotCQlpZiAoIShjdHh0LT5zdGFsZV9tYXNrICYgbXNrKSkgY29udGludWU7Ci0JCWN0eHQtPnN0YWxlX21hc2sgJj0gfm1zazsKLQkJbXNwMzQwMF9vcHNbaWR4XS51cGRhdGUoY3R4dCk7CisJCXJvdXRlLm91dHB1dCA9IE1TUF9PVVRQVVQoTVNQX1NDX0lOX0RTUF9TQ0FSVDEpOworCQlzZC0+b3BzLT5hdWRpby0+c19yb3V0aW5nKHNkLCAmcm91dGUpOwogCX0KIH0KIAotCi1zdGF0aWMgdm9pZCBwdnIyX21zcDM0MDBfZGV0YWNoKHN0cnVjdCBwdnIyX21zcDM0MDBfaGFuZGxlciAqY3R4dCkKLXsKLQljdHh0LT5jbGllbnQtPmhhbmRsZXIgPSBOVUxMOwotCWtmcmVlKGN0eHQpOwotfQotCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcHZyMl9tc3AzNDAwX2Rlc2NyaWJlKHN0cnVjdCBwdnIyX21zcDM0MDBfaGFuZGxlciAqY3R4dCwKLQkJCQkJICBjaGFyICpidWYsdW5zaWduZWQgaW50IGNudCkKLXsKLQlyZXR1cm4gc2NucHJpbnRmKGJ1ZixjbnQsImhhbmRsZXI6IHB2cnVzYjItYXVkaW8gdjRsMiIpOwotfQotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlcl9mdW5jdGlvbnMgbXNwMzQwMF9mdW5jcyA9IHsKLQkuZGV0YWNoID0gKHZvaWQgKCopKHZvaWQgKikpcHZyMl9tc3AzNDAwX2RldGFjaCwKLQkuY2hlY2sgPSAoaW50ICgqKSh2b2lkICopKW1zcDM0MDBfY2hlY2ssCi0JLnVwZGF0ZSA9ICh2b2lkICgqKSh2b2lkICopKW1zcDM0MDBfdXBkYXRlLAotCS5kZXNjcmliZSA9ICh1bnNpZ25lZCBpbnQgKCopKHZvaWQgKixjaGFyICosdW5zaWduZWQgaW50KSlwdnIyX21zcDM0MDBfZGVzY3JpYmUsCi19OwotCi0KLWludCBwdnIyX2kyY19tc3AzNDAwX3NldHVwKHN0cnVjdCBwdnIyX2hkdyAqaGR3LHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwKQotewotCXN0cnVjdCBwdnIyX21zcDM0MDBfaGFuZGxlciAqY3R4dDsKLQlpZiAoY3AtPmhhbmRsZXIpIHJldHVybiAwOwotCi0JY3R4dCA9IGt6YWxsb2Moc2l6ZW9mKCpjdHh0KSxHRlBfS0VSTkVMKTsKLQlpZiAoIWN0eHQpIHJldHVybiAwOwotCi0JY3R4dC0+aTJjX2hhbmRsZXIuZnVuY19kYXRhID0gY3R4dDsKLQljdHh0LT5pMmNfaGFuZGxlci5mdW5jX3RhYmxlID0gJm1zcDM0MDBfZnVuY3M7Ci0JY3R4dC0+Y2xpZW50ID0gY3A7Ci0JY3R4dC0+aGR3ID0gaGR3OwotCWN0eHQtPnN0YWxlX21hc2sgPSAoMSA8PCBBUlJBWV9TSVpFKG1zcDM0MDBfb3BzKSkgLSAxOwotCWNwLT5oYW5kbGVyID0gJmN0eHQtPmkyY19oYW5kbGVyOwotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIDB4JXggbXNwMzQwMCBWNEwyIGhhbmRsZXIgc2V0IHVwIiwKLQkJICAgY3AtPmNsaWVudC0+YWRkcik7Ci0JcmV0dXJuICEwOwotfQotCi0KIC8qCiAgIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6CiAgICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWF1ZGlvLmgKaW5kZXggYWM1NGVlZC4uZTNlNjNkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1hdWRpby5oCkBAIC0yMiwxMCArMjIsOCBAQAogI2lmbmRlZiBfX1BWUlVTQjJfQVVESU9fSAogI2RlZmluZSBfX1BWUlVTQjJfQVVESU9fSAogCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY29yZS5oIgotCi1pbnQgcHZyMl9pMmNfbXNwMzQwMF9zZXR1cChzdHJ1Y3QgcHZyMl9oZHcgKixzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICopOwotCisjaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKK3ZvaWQgcHZyMl9tc3AzNDAwX3N1YmRldl91cGRhdGUoc3RydWN0IHB2cjJfaGR3ICosIHN0cnVjdCB2NGwyX3N1YmRldiAqKTsKICNlbmRpZiAvKiBfX1BWUlVTQjJfQVVESU9fSCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3M1M2wzMmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWNzNTNsMzJhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVjMzQyOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWNzNTNsMzJhLmMKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEF1cmVsaWVuIEFsbGVhdW1lIDxzbHRzQGZyZWUuZnI+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKy8qCisKKyAgIFRoaXMgc291cmNlIGZpbGUgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGludGVyZmFjZSB3aXRoIHRoZQorICAgdjRsLWR2YiBjczUzbDMyYSBtb2R1bGUuCisKKyovCisKKyNpbmNsdWRlICJwdnJ1c2IyLWNzNTNsMzJhLmgiCisKKworI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCisjaW5jbHVkZSAicHZydXNiMi1kZWJ1Zy5oIgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKK3N0cnVjdCByb3V0aW5nX3NjaGVtZSB7CisJY29uc3QgaW50ICpkZWY7CisJdW5zaWduZWQgaW50IGNudDsKK307CisKKworc3RhdGljIGNvbnN0IGludCByb3V0aW5nX3NjaGVtZTFbXSA9IHsKKwlbUFZSMl9DVkFMX0lOUFVUX1RWXSA9IDIsICAvKiAxIG9yIDIgc2VlbXMgdG8gd29yayBoZXJlICovCisJW1BWUjJfQ1ZBTF9JTlBVVF9SQURJT10gPSAyLAorCVtQVlIyX0NWQUxfSU5QVVRfQ09NUE9TSVRFXSA9IDAsCisJW1BWUjJfQ1ZBTF9JTlBVVF9TVklERU9dID0gIDAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJvdXRpbmdfc2NoZW1lIHJvdXRpbmdfc2NoZW1lc1tdID0geworCVtQVlIyX1JPVVRJTkdfU0NIRU1FX09OQUlSXSA9IHsKKwkJLmRlZiA9IHJvdXRpbmdfc2NoZW1lMSwKKwkJLmNudCA9IEFSUkFZX1NJWkUocm91dGluZ19zY2hlbWUxKSwKKwl9LAorfTsKKworCit2b2lkIHB2cjJfY3M1M2wzMmFfc3ViZGV2X3VwZGF0ZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlpZiAoaGR3LT5pbnB1dF9kaXJ0eSB8fCBoZHctPmZvcmNlX2RpcnR5KSB7CisJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CisJCWNvbnN0IHN0cnVjdCByb3V0aW5nX3NjaGVtZSAqc3A7CisJCXVuc2lnbmVkIGludCBzaWQgPSBoZHctPmhkd19kZXNjLT5zaWduYWxfcm91dGluZ19zY2hlbWU7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywgInN1YmRldiB2NGwyIHNldF9pbnB1dCglZCkiLAorCQkJICAgaGR3LT5pbnB1dF92YWwpOworCQlpZiAoKHNpZCA8IEFSUkFZX1NJWkUocm91dGluZ19zY2hlbWVzKSkgJiYKKwkJICAgICgoc3AgPSByb3V0aW5nX3NjaGVtZXMgKyBzaWQpICE9IE5VTEwpICYmCisJCSAgICAoaGR3LT5pbnB1dF92YWwgPj0gMCkgJiYKKwkJICAgIChoZHctPmlucHV0X3ZhbCA8IHNwLT5jbnQpKSB7CisJCQlyb3V0ZS5pbnB1dCA9IHNwLT5kZWZbaGR3LT5pbnB1dF92YWxdOworCQl9IGVsc2UgeworCQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCisJCQkJICAgIioqKiBXQVJOSU5HICoqKiBzdWJkZXYgdjRsMiBzZXRfaW5wdXQ6IgorCQkJCSAgICIgSW52YWxpZCByb3V0aW5nIHNjaGVtZSAoJXUpIgorCQkJCSAgICIgYW5kL29yIGlucHV0ICglZCkiLAorCQkJCSAgIHNpZCwgaGR3LT5pbnB1dF92YWwpOworCQkJcmV0dXJuOworCQl9CisJCXJvdXRlLm91dHB1dCA9IDA7CisJCXNkLT5vcHMtPmF1ZGlvLT5zX3JvdXRpbmcoc2QsICZyb3V0ZSk7CisJfQorfQorCisKKy8qCisgIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6CisgICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgorICAqKiogbW9kZTogYyAqKioKKyAgKioqIGZpbGwtY29sdW1uOiA3MCAqKioKKyAgKioqIHRhYi13aWR0aDogOCAqKioKKyAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgorICAqKiogRW5kOiAqKioKKyAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXR1bmVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jczUzbDMyYS5oCnNpbWlsYXJpdHkgaW5kZXggNjQlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXR1bmVyLmgKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWNzNTNsMzJhLmgKaW5kZXggZWY0YWZhZi4uNTNiYTU0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdHVuZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jczUzbDMyYS5oCkBAIC0yLDYgKzIsNyBAQAogICoKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQXVyZWxpZW4gQWxsZWF1bWUgPHNsdHNAZnJlZS5mcj4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTcsMTQgKzE4LDI0IEBACiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICoKICAqLwotI2lmbmRlZiBfX1BWUlVTQjJfVFVORVJfSAotI2RlZmluZSBfX1BWUlVTQjJfVFVORVJfSAogCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY29yZS5oIgorI2lmbmRlZiBfX1BWUlVTQjJfQ1M1M0wzMkFfSAorI2RlZmluZSBfX1BWUlVTQjJfQ1M1M0wzMkFfSAogCi1pbnQgcHZyMl9pMmNfdHVuZXJfc2V0dXAoc3RydWN0IHB2cjJfaGR3ICosc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqKTsKKy8qCiAKLSNlbmRpZiAvKiBfX1BWUlVTQjJfVFVORVJfSCAqLworICAgVGhpcyBtb2R1bGUgY29ubmVjdHMgdGhlIHB2cnVzYjIgZHJpdmVyIHRvIHRoZSBJMkMgY2hpcCBsZXZlbAorICAgZHJpdmVyIHdoaWNoIGhhbmRsZXMgZGV2aWNlIHZpZGVvIHByb2Nlc3NpbmcuICBUaGlzIGludGVyZmFjZSBpcworICAgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBkcml2ZXI7IGhpZ2hlciBsZXZlbCBjb2RlIHNob3VsZCBvbmx5CisgICBpbnRlcmFjdCB0aHJvdWdoIHRoZSBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgcHZydXNiMi1oZHcuaC4KKworKi8KKworCisjaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKK3ZvaWQgcHZyMl9jczUzbDMyYV9zdWJkZXZfdXBkYXRlKHN0cnVjdCBwdnIyX2hkdyAqLCBzdHJ1Y3QgdjRsMl9zdWJkZXYgKik7CisKKyNlbmRpZiAvKiBfX1BWUlVTQjJfQVVESU9fQ1M1M0wzMkFfSCAqLwogCiAvKgogICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmMKaW5kZXggODk1ODU5ZS4uNGUwMTdmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5jCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJwdnJ1c2IyLWN4MjU4NHgtdjRsLmgiCiAjaW5jbHVkZSAicHZydXNiMi12aWRlby12NGwuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLWkyYy1jbWQtdjRsMi5oIgogCiAKICNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgpAQCAtMzksMTQgKzM4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggewotCXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyIGhhbmRsZXI7Ci0Jc3RydWN0IHB2cjJfZGVjb2Rlcl9jdHJsIGN0cmw7Ci0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBwdnIyX2hkdyAqaGR3OwotCXVuc2lnbmVkIGxvbmcgc3RhbGVfbWFzazsKLX07Ci0KIAogc3RydWN0IHJvdXRpbmdfc2NoZW1lX2l0ZW0gewogCWludCB2aWQ7CkBAIC0xMTAsMjE4ICsxMDEsNDQgQEAKIAl9LAogfTsKIAotc3RhdGljIHZvaWQgc2V0X2lucHV0KHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICpjdHh0KQordm9pZCBwdnIyX2N4MjU4NDBfc3ViZGV2X3VwZGF0ZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwotCWVudW0gY3gyNTg0MF92aWRlb19pbnB1dCB2aWRfaW5wdXQ7Ci0JZW51bSBjeDI1ODQwX2F1ZGlvX2lucHV0IGF1ZF9pbnB1dDsKLQljb25zdCBzdHJ1Y3Qgcm91dGluZ19zY2hlbWUgKnNwOwotCXVuc2lnbmVkIGludCBzaWQgPSBoZHctPmhkd19kZXNjLT5zaWduYWxfcm91dGluZ19zY2hlbWU7CisJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IGN4MjU4NHggdXBkYXRlLi4uIik7CisJaWYgKGhkdy0+aW5wdXRfZGlydHkgfHwgaGR3LT5mb3JjZV9kaXJ0eSkgeworCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCQllbnVtIGN4MjU4NDBfdmlkZW9faW5wdXQgdmlkX2lucHV0OworCQllbnVtIGN4MjU4NDBfYXVkaW9faW5wdXQgYXVkX2lucHV0OworCQljb25zdCBzdHJ1Y3Qgcm91dGluZ19zY2hlbWUgKnNwOworCQl1bnNpZ25lZCBpbnQgc2lkID0gaGR3LT5oZHdfZGVzYy0+c2lnbmFsX3JvdXRpbmdfc2NoZW1lOwogCi0JbWVtc2V0KCZyb3V0ZSwwLHNpemVvZihyb3V0ZSkpOworCQltZW1zZXQoJnJvdXRlLCAwLCBzaXplb2Yocm91dGUpKTsKIAotCWlmICgoc2lkIDwgQVJSQVlfU0laRShyb3V0aW5nX3NjaGVtZXMpKSAmJgotCSAgICAoKHNwID0gcm91dGluZ19zY2hlbWVzICsgc2lkKSAhPSBOVUxMKSAmJgotCSAgICAoaGR3LT5pbnB1dF92YWwgPj0gMCkgJiYKLQkgICAgKGhkdy0+aW5wdXRfdmFsIDwgc3AtPmNudCkpIHsKLQkJdmlkX2lucHV0ID0gc3AtPmRlZltoZHctPmlucHV0X3ZhbF0udmlkOwotCQlhdWRfaW5wdXQgPSBzcC0+ZGVmW2hkdy0+aW5wdXRfdmFsXS5hdWQ7Ci0JfSBlbHNlIHsKLQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCi0JCQkgICAiKioqIFdBUk5JTkcgKioqIGkyYyBjeDI1ODR4IHNldF9pbnB1dDoiCi0JCQkgICAiIEludmFsaWQgcm91dGluZyBzY2hlbWUgKCV1KSBhbmQvb3IgaW5wdXQgKCVkKSIsCi0JCQkgICBzaWQsaGR3LT5pbnB1dF92YWwpOwotCQlyZXR1cm47Ci0JfQotCi0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgY3gyNTg0eCBzZXRfaW5wdXQgdmlkPTB4JXggYXVkPTB4JXgiLAotCQkgICB2aWRfaW5wdXQsYXVkX2lucHV0KTsKLQlyb3V0ZS5pbnB1dCA9ICh1MzIpdmlkX2lucHV0OwotCXB2cjJfaTJjX2NsaWVudF9jbWQoY3R4dC0+Y2xpZW50LFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HLCZyb3V0ZSk7Ci0Jcm91dGUuaW5wdXQgPSAodTMyKWF1ZF9pbnB1dDsKLQlwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywmcm91dGUpOwotfQotCi0KLXN0YXRpYyBpbnQgY2hlY2tfaW5wdXQoc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggKmN0eHQpCi17Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjdHh0LT5oZHc7Ci0JcmV0dXJuIGhkdy0+aW5wdXRfZGlydHkgIT0gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCBzZXRfYXVkaW8oc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggKmN0eHQpCi17Ci0JdTMyIHZhbDsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIGN4MjU4NHggc2V0X2F1ZGlvICVkIiwKLQkJICAgaGR3LT5zcmF0ZV92YWwpOwotCXN3aXRjaCAoaGR3LT5zcmF0ZV92YWwpIHsKLQlkZWZhdWx0OgotCWNhc2UgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDA6Ci0JCXZhbCA9IDQ4MDAwOwotCQlicmVhazsKLQljYXNlIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ0MTAwOgotCQl2YWwgPSA0NDEwMDsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV8zMjAwMDoKLQkJdmFsID0gMzIwMDA7Ci0JCWJyZWFrOwotCX0KLQlwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVEsJnZhbCk7Ci19Ci0KLQotc3RhdGljIGludCBjaGVja19hdWRpbyhzdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eCAqY3R4dCkKLXsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQlyZXR1cm4gaGR3LT5zcmF0ZV9kaXJ0eSAhPSAwOwotfQotCi0KLXN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4X29wcyB7Ci0Jdm9pZCAoKnVwZGF0ZSkoc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggKik7Ci0JaW50ICgqY2hlY2spKHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICopOwotfTsKLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfdjRsX2N4MjU4NHhfb3BzIGRlY29kZXJfb3BzW10gPSB7Ci0JeyAudXBkYXRlID0gc2V0X2lucHV0LCAuY2hlY2sgPSBjaGVja19pbnB1dH0sCi0JeyAudXBkYXRlID0gc2V0X2F1ZGlvLCAuY2hlY2sgPSBjaGVja19hdWRpb30sCi19OwotCi0KLXN0YXRpYyB2b2lkIGRlY29kZXJfZGV0YWNoKHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICpjdHh0KQotewotCWN0eHQtPmNsaWVudC0+aGFuZGxlciA9IE5VTEw7Ci0JcHZyMl9oZHdfc2V0X2RlY29kZXIoY3R4dC0+aGR3LE5VTEwpOwotCWtmcmVlKGN0eHQpOwotfQotCi0KLXN0YXRpYyBpbnQgZGVjb2Rlcl9jaGVjayhzdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eCAqY3R4dCkKLXsKLQl1bnNpZ25lZCBsb25nIG1zazsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCi0JZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKGRlY29kZXJfb3BzKTsgaWR4KyspIHsKLQkJbXNrID0gMSA8PCBpZHg7Ci0JCWlmIChjdHh0LT5zdGFsZV9tYXNrICYgbXNrKSBjb250aW51ZTsKLQkJaWYgKGRlY29kZXJfb3BzW2lkeF0uY2hlY2soY3R4dCkpIHsKLQkJCWN0eHQtPnN0YWxlX21hc2sgfD0gbXNrOworCQlpZiAoKHNpZCA8IEFSUkFZX1NJWkUocm91dGluZ19zY2hlbWVzKSkgJiYKKwkJICAgICgoc3AgPSByb3V0aW5nX3NjaGVtZXMgKyBzaWQpICE9IE5VTEwpICYmCisJCSAgICAoaGR3LT5pbnB1dF92YWwgPj0gMCkgJiYKKwkJICAgIChoZHctPmlucHV0X3ZhbCA8IHNwLT5jbnQpKSB7CisJCQl2aWRfaW5wdXQgPSBzcC0+ZGVmW2hkdy0+aW5wdXRfdmFsXS52aWQ7CisJCQlhdWRfaW5wdXQgPSBzcC0+ZGVmW2hkdy0+aW5wdXRfdmFsXS5hdWQ7CisJCX0gZWxzZSB7CisJCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKKwkJCQkgICAiKioqIFdBUk5JTkcgKioqIHN1YmRldiBjeDI1ODR4IHNldF9pbnB1dDoiCisJCQkJICAgIiBJbnZhbGlkIHJvdXRpbmcgc2NoZW1lICgldSkiCisJCQkJICAgIiBhbmQvb3IgaW5wdXQgKCVkKSIsCisJCQkJICAgc2lkLCBoZHctPmlucHV0X3ZhbCk7CisJCQlyZXR1cm47CiAJCX0KLQl9Ci0JcmV0dXJuIGN0eHQtPnN0YWxlX21hc2sgIT0gMDsKLX0KIAotCi1zdGF0aWMgdm9pZCBkZWNvZGVyX3VwZGF0ZShzdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eCAqY3R4dCkKLXsKLQl1bnNpZ25lZCBsb25nIG1zazsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCi0JZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKGRlY29kZXJfb3BzKTsgaWR4KyspIHsKLQkJbXNrID0gMSA8PCBpZHg7Ci0JCWlmICghKGN0eHQtPnN0YWxlX21hc2sgJiBtc2spKSBjb250aW51ZTsKLQkJY3R4dC0+c3RhbGVfbWFzayAmPSB+bXNrOwotCQlkZWNvZGVyX29wc1tpZHhdLnVwZGF0ZShjdHh0KTsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLAorCQkJICAgInN1YmRldiBjeDI1ODR4IHNldF9pbnB1dCB2aWQ9MHgleCBhdWQ9MHgleCIsCisJCQkgICB2aWRfaW5wdXQsIGF1ZF9pbnB1dCk7CisJCXJvdXRlLmlucHV0ID0gKHUzMil2aWRfaW5wdXQ7CisJCXNkLT5vcHMtPnZpZGVvLT5zX3JvdXRpbmcoc2QsICZyb3V0ZSk7CisJCXJvdXRlLmlucHV0ID0gKHUzMilhdWRfaW5wdXQ7CisJCXNkLT5vcHMtPmF1ZGlvLT5zX3JvdXRpbmcoc2QsICZyb3V0ZSk7CiAJfQogfQogCiAKLXN0YXRpYyB2b2lkIGRlY29kZXJfZW5hYmxlKHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICpjdHh0LGludCBmbCkKLXsKLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyBjeDI1ODQwIGRlY29kZXJfZW5hYmxlKCVkKSIsZmwpOwotCXB2cjJfdjRsMl9jbWRfc3RyZWFtKGN0eHQtPmNsaWVudCxmbCk7Ci19Ci0KLQotc3RhdGljIGludCBkZWNvZGVyX2RldGVjdChzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCkKLXsKLQlpbnQgcmV0OwotCS8qIEF0dGVtcHQgdG8gcXVlcnkgdGhlIGRlY29kZXIgLSBsZXQncyBzZWUgaWYgaXQgd2lsbCBhbnN3ZXIgKi8KLQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcWM7Ci0KLQltZW1zZXQoJnFjLDAsc2l6ZW9mKHFjKSk7Ci0KLQlxYy5pZCA9IFY0TDJfQ0lEX0JSSUdIVE5FU1M7Ci0KLQlyZXQgPSBwdnIyX2kyY19jbGllbnRfY21kKGNwLFZJRElPQ19RVUVSWUNUUkwsJnFjKTsKLQlyZXR1cm4gcmV0ID09IDA7IC8qIFJldHVybiB0cnVlIGlmIGl0IGFuc3dlcmVkICovCi19Ci0KLQotc3RhdGljIHVuc2lnbmVkIGludCBkZWNvZGVyX2Rlc2NyaWJlKHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICpjdHh0LAotCQkJCSAgICAgY2hhciAqYnVmLHVuc2lnbmVkIGludCBjbnQpCi17Ci0JcmV0dXJuIHNjbnByaW50ZihidWYsY250LCJoYW5kbGVyOiBwdnJ1c2IyLWN4MjU4NHgtdjRsIik7Ci19Ci0KLQotc3RhdGljIHZvaWQgZGVjb2Rlcl9yZXNldChzdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eCAqY3R4dCkKLXsKLQlpbnQgcmV0OwotCXJldCA9IHB2cjJfaTJjX2NsaWVudF9jbWQoY3R4dC0+Y2xpZW50LFZJRElPQ19JTlRfUkVTRVQsTlVMTCk7Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgY3gyNTg0MCBkZWNvZGVyX3Jlc2V0IChyZXQ9JWQpIixyZXQpOwotfQotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlcl9mdW5jdGlvbnMgaGZ1bmNzID0gewotCS5kZXRhY2ggPSAodm9pZCAoKikodm9pZCAqKSlkZWNvZGVyX2RldGFjaCwKLQkuY2hlY2sgPSAoaW50ICgqKSh2b2lkICopKWRlY29kZXJfY2hlY2ssCi0JLnVwZGF0ZSA9ICh2b2lkICgqKSh2b2lkICopKWRlY29kZXJfdXBkYXRlLAotCS5kZXNjcmliZSA9ICh1bnNpZ25lZCBpbnQgKCopKHZvaWQgKixjaGFyICosdW5zaWduZWQgaW50KSlkZWNvZGVyX2Rlc2NyaWJlLAotfTsKLQotCi1pbnQgcHZyMl9pMmNfY3gyNTg0eF92NGxfc2V0dXAoc3RydWN0IHB2cjJfaGR3ICpoZHcsCi0JCQkgICAgICAgc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3ApCi17Ci0Jc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggKmN0eHQ7Ci0KLQlpZiAoaGR3LT5kZWNvZGVyX2N0cmwpIHJldHVybiAwOwotCWlmIChjcC0+aGFuZGxlcikgcmV0dXJuIDA7Ci0JaWYgKCFkZWNvZGVyX2RldGVjdChjcCkpIHJldHVybiAwOwotCi0JY3R4dCA9IGt6YWxsb2Moc2l6ZW9mKCpjdHh0KSxHRlBfS0VSTkVMKTsKLQlpZiAoIWN0eHQpIHJldHVybiAwOwotCi0JY3R4dC0+aGFuZGxlci5mdW5jX2RhdGEgPSBjdHh0OwotCWN0eHQtPmhhbmRsZXIuZnVuY190YWJsZSA9ICZoZnVuY3M7Ci0JY3R4dC0+Y3RybC5jdHh0ID0gY3R4dDsKLQljdHh0LT5jdHJsLmRldGFjaCA9ICh2b2lkICgqKSh2b2lkICopKWRlY29kZXJfZGV0YWNoOwotCWN0eHQtPmN0cmwuZW5hYmxlID0gKHZvaWQgKCopKHZvaWQgKixpbnQpKWRlY29kZXJfZW5hYmxlOwotCWN0eHQtPmN0cmwuZm9yY2VfcmVzZXQgPSAodm9pZCAoKikodm9pZCopKWRlY29kZXJfcmVzZXQ7Ci0JY3R4dC0+Y2xpZW50ID0gY3A7Ci0JY3R4dC0+aGR3ID0gaGR3OwotCWN0eHQtPnN0YWxlX21hc2sgPSAoMSA8PCBBUlJBWV9TSVpFKGRlY29kZXJfb3BzKSkgLSAxOwotCXB2cjJfaGR3X3NldF9kZWNvZGVyKGhkdywmY3R4dC0+Y3RybCk7Ci0JY3AtPmhhbmRsZXIgPSAmY3R4dC0+aGFuZGxlcjsKLQl7Ci0JCS8qCi0JCSAgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPiAxOS1Ob3YtMjAwNiAtIFRoaXMgYml0Ci0JCSAgb2YgbnV0dGluZXNzIGZvciBjeDI1ODQwIGNhdXNlcyB0aGF0IG1vZHVsZSB0bwotCQkgIGNvcnJlY3RseSBzZXQgdXAgaXRzIHZpZGVvIHNjYWxpbmcuICBUaGlzIGlzIHJlYWxseQotCQkgIGEgcHJvYmxlbSBpbiB0aGUgY3gyNTg0MCBtb2R1bGUgaXRzZWxmLCBidXQgd2Ugd29yawotCQkgIGFyb3VuZCBpdCBoZXJlLiAgVGhlIHByb2JsZW0gaGFzIG5vdCBiZWVuIHNlZW4gaW4KLQkJICBpdnR2IGJlY2F1c2UgdGhlcmUgVkJJIGlzIHN1cHBvcnRlZCBhbmQgc2V0IHVwLiAgV2UKLQkJICBkb24ndCBkbyBWQkkgaGVyZSAoYXQgbGVhc3Qgbm90IHlldCkgYW5kIHRodXMgd2UKLQkJICBuZXZlciBhdHRlbXB0ZWQgdG8gZXZlbiBzZXQgaXQgdXAuCi0JCSAqLwotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10OwotCQltZW1zZXQoJmZtdCwwLHNpemVvZihmbXQpKTsKLQkJZm10LnR5cGUgPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRTsKLQkJcHZyMl9pMmNfY2xpZW50X2NtZChjdHh0LT5jbGllbnQsVklESU9DX1NfRk1ULCZmbXQpOwotCX0KLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyAweCV4IGN4MjU4NHggVjRMMiBoYW5kbGVyIHNldCB1cCIsCi0JCSAgIGNwLT5jbGllbnQtPmFkZHIpOwotCXJldHVybiAhMDsKLX0KLQotCi0KIAogLyoKICAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5oCmluZGV4IDY2YWJmNzcuLmUzNWMyMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuaApAQCAtMzQsOSArMzQsOSBAQAogCiAKIAotI2luY2x1ZGUgInB2cnVzYjItaTJjLWNvcmUuaCIKKyNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgogCi1pbnQgcHZyMl9pMmNfY3gyNTg0eF92NGxfc2V0dXAoc3RydWN0IHB2cjJfaGR3ICosc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqKTsKK3ZvaWQgcHZyMl9jeDI1ODQwX3N1YmRldl91cGRhdGUoc3RydWN0IHB2cjJfaGR3ICosIHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpOwogCiAKICNlbmRpZiAvKiBfX1BWUlVTQjJfQ1gyNTg0WF9WNExfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVidWdpZmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmMKaW5kZXggY2E4OTJmYi4uZmJlMzg1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVidWdpZmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5jCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSAicHZydXNiMi1kZWJ1Z2lmYy5oIgogI2luY2x1ZGUgInB2cnVzYjItaGR3LmgiCiAjaW5jbHVkZSAicHZydXNiMi1kZWJ1Zy5oIgotI2luY2x1ZGUgInB2cnVzYjItaTJjLWNvcmUuaCIKIAogc3RydWN0IGRlYnVnaWZjX21hc2tfaXRlbSB7CiAJY29uc3QgY2hhciAqbmFtZTsKQEAgLTE0NywxMCArMTQ2LDYgQEAKIAliY250ICs9IGNjbnQ7IGFjbnQgLT0gY2NudDsgYnVmICs9IGNjbnQ7CiAJY2NudCA9IHB2cjJfaGR3X3N0YXRlX3JlcG9ydChoZHcsYnVmLGFjbnQpOwogCWJjbnQgKz0gY2NudDsgYWNudCAtPSBjY250OyBidWYgKz0gY2NudDsKLQljY250ID0gc2NucHJpbnRmKGJ1ZixhY250LCJBdHRhY2hlZCBJMkMgbW9kdWxlczpcbiIpOwotCWJjbnQgKz0gY2NudDsgYWNudCAtPSBjY250OyBidWYgKz0gY2NudDsKLQljY250ID0gcHZyMl9pMmNfcmVwb3J0KGhkdyxidWYsYWNudCk7Ci0JYmNudCArPSBjY250OyBhY250IC09IGNjbnQ7IGJ1ZiArPSBjY250OwogCiAJcmV0dXJuIGJjbnQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVidWdpZmMuaAppbmRleCBlMjRmZjU5Li4yZjhkNDY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmgKQEAgLTIyLDE2ICsyMiwxNiBAQAogCiBzdHJ1Y3QgcHZyMl9oZHc7CiAKLS8qIE5vbi1pbnRydXNpdmVseSBwcmludCBzb21lIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mbyBmcm9tIGluc2lkZSB0aGUKLSAgIGRyaXZlci4gIFRoaXMgc2hvdWxkIHdvcmsgZXZlbiBpZiB0aGUgZHJpdmVyIGFwcGVhcnMgdG8gYmUKLSAgIHdlZGdlZC4gKi8KLWludCBwdnIyX2RlYnVnaWZjX3ByaW50X2luZm8oc3RydWN0IHB2cjJfaGR3ICosCi0JCQkgICAgIGNoYXIgKmJ1Zl9wdHIsdW5zaWduZWQgaW50IGJ1Zl9zaXplKTsKLQogLyogUHJpbnQgZ2VuZXJhbCBzdGF0dXMgb2YgZHJpdmVyLiAgVGhpcyB3aWxsIGFsc28gdHJpZ2dlciBhIHByb2JlIG9mCiAgICB0aGUgVVNCIGxpbmsuICBVbmxpa2UgcHJpbnRfaW5mbygpLCB0aGlzIG9uZSBzeW5jaHJvbml6ZXMgd2l0aCB0aGUKICAgIGRyaXZlciBzbyB0aGUgaW5mb3JtYXRpb24gc2hvdWxkIGJlIHNlbGYtY29uc2lzdGVudCAoYnV0IGl0IHdpbGwKICAgIGhhbmcgaWYgdGhlIGRyaXZlciBpcyB3ZWRnZWQpLiAqLworaW50IHB2cjJfZGVidWdpZmNfcHJpbnRfaW5mbyhzdHJ1Y3QgcHZyMl9oZHcgKiwKKwkJCSAgICAgY2hhciAqYnVmX3B0ciwgdW5zaWduZWQgaW50IGJ1Zl9zaXplKTsKKworLyogTm9uLWludHJ1c2l2ZWx5IHByaW50IHNvbWUgdXNlZnVsIGRlYnVnZ2luZyBpbmZvIGZyb20gaW5zaWRlIHRoZQorICAgZHJpdmVyLiAgVGhpcyBzaG91bGQgd29yayBldmVuIGlmIHRoZSBkcml2ZXIgYXBwZWFycyB0byBiZQorICAgd2VkZ2VkLiAqLwogaW50IHB2cjJfZGVidWdpZmNfcHJpbnRfc3RhdHVzKHN0cnVjdCBwdnIyX2hkdyAqLAogCQkJICAgICAgIGNoYXIgKmJ1Zl9wdHIsdW5zaWduZWQgaW50IGJ1Zl9zaXplKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5jCmluZGV4IGNiZTJhMzQuLjFjYjZhMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZXZhdHRyLmMKQEAgLTQ2LDEwICs0NiwxMSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogSGF1cHBhdWdlIFBWUi1VU0IyIE1vZGVsIDI5eHh4ICovCiAKLXN0YXRpYyBjb25zdCBjaGFyICpwdnIyX2NsaWVudF8yOXh4eFtdID0gewotCSJtc3AzNDAwIiwKLQkic2FhNzExNSIsCi0JInR1bmVyIiwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfY2xpZW50X2Rlc2MgcHZyMl9jbGlfMjl4eHhbXSA9IHsKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9TQUE3MTE1IH0sCisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfTVNQMzQwMCB9LAorCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX1RVTkVSIH0sCisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfREVNT0QgfSwKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpwdnIyX2Z3MV9uYW1lc18yOXh4eFtdID0gewpAQCAtNTksOCArNjAsOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9kZXNjIHB2cjJfZGV2aWNlXzI5eHh4ID0gewogCQkuZGVzY3JpcHRpb24gPSAiV2luVFYgUFZSIFVTQjIgTW9kZWwgQ2F0ZWdvcnkgMjl4eHgiLAogCQkuc2hvcnRuYW1lID0gIjI5eHh4IiwKLQkJLmNsaWVudF9tb2R1bGVzLmxzdCA9IHB2cjJfY2xpZW50XzI5eHh4LAotCQkuY2xpZW50X21vZHVsZXMuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaWVudF8yOXh4eCksCisJCS5jbGllbnRfdGFibGUubHN0ID0gcHZyMl9jbGlfMjl4eHgsCisJCS5jbGllbnRfdGFibGUuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaV8yOXh4eCksCiAJCS5meDJfZmlybXdhcmUubHN0ID0gcHZyMl9mdzFfbmFtZXNfMjl4eHgsCiAJCS5meDJfZmlybXdhcmUuY250ID0gQVJSQVlfU0laRShwdnIyX2Z3MV9uYW1lc18yOXh4eCksCiAJCS5mbGFnX2hhc19oYXVwcGF1Z2Vfcm9tID0gITAsCkBAIC03NywxMCArNzgsMTEgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIEhhdXBwYXVnZSBQVlItVVNCMiBNb2RlbCAyNHh4eCAqLwogCi1zdGF0aWMgY29uc3QgY2hhciAqcHZyMl9jbGllbnRfMjR4eHhbXSA9IHsKLQkiY3gyNTg0MCIsCi0JInR1bmVyIiwKLQkid204Nzc1IiwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfY2xpZW50X2Rlc2MgcHZyMl9jbGlfMjR4eHhbXSA9IHsKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9DWDI1ODQwIH0sCisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfVFVORVIgfSwKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9XTTg3NzUgfSwKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9ERU1PRCB9LAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnB2cjJfZncxX25hbWVzXzI0eHh4W10gPSB7CkBAIC05MCw4ICs5Miw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2Rlc2MgcHZyMl9kZXZpY2VfMjR4eHggPSB7CiAJCS5kZXNjcmlwdGlvbiA9ICJXaW5UViBQVlIgVVNCMiBNb2RlbCBDYXRlZ29yeSAyNHh4eCIsCiAJCS5zaG9ydG5hbWUgPSAiMjR4eHgiLAotCQkuY2xpZW50X21vZHVsZXMubHN0ID0gcHZyMl9jbGllbnRfMjR4eHgsCi0JCS5jbGllbnRfbW9kdWxlcy5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpZW50XzI0eHh4KSwKKwkJLmNsaWVudF90YWJsZS5sc3QgPSBwdnIyX2NsaV8yNHh4eCwKKwkJLmNsaWVudF90YWJsZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpXzI0eHh4KSwKIAkJLmZ4Ml9maXJtd2FyZS5sc3QgPSBwdnIyX2Z3MV9uYW1lc18yNHh4eCwKIAkJLmZ4Ml9maXJtd2FyZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfZncxX25hbWVzXzI0eHh4KSwKIAkJLmZsYWdfaGFzX2N4MjU4NDAgPSAhMCwKQEAgLTExMSwxNiArMTEzLDE2IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBHT1RWSUVXIFVTQjIuMCBEVkQyICovCiAKLXN0YXRpYyBjb25zdCBjaGFyICpwdnIyX2NsaWVudF9nb3R2aWV3XzJbXSA9IHsKLQkiY3gyNTg0MCIsCi0JInR1bmVyIiwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfY2xpZW50X2Rlc2MgcHZyMl9jbGlfZ290dmlld18yW10gPSB7CisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfQ1gyNTg0MCB9LAorCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX1RVTkVSIH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2Rlc2MgcHZyMl9kZXZpY2VfZ290dmlld18yID0gewogCQkuZGVzY3JpcHRpb24gPSAiR290dmlldyBVU0IgMi4wIERWRCAyIiwKIAkJLnNob3J0bmFtZSA9ICJndjIiLAotCQkuY2xpZW50X21vZHVsZXMubHN0ID0gcHZyMl9jbGllbnRfZ290dmlld18yLAotCQkuY2xpZW50X21vZHVsZXMuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaWVudF9nb3R2aWV3XzIpLAorCQkuY2xpZW50X3RhYmxlLmxzdCA9IHB2cjJfY2xpX2dvdHZpZXdfMiwKKwkJLmNsaWVudF90YWJsZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpX2dvdHZpZXdfMiksCiAJCS5mbGFnX2hhc19jeDI1ODQwID0gITAsCiAJCS5kZWZhdWx0X3R1bmVyX3R5cGUgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywKIAkJLmZsYWdfaGFzX2FuYWxvZ3R1bmVyID0gITAsCkBAIC0xNDAsOCArMTQyLDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfZGVzYyBwdnIyX2RldmljZV9nb3R2aWV3XzJkID0gewogCQkuZGVzY3JpcHRpb24gPSAiR290dmlldyBVU0IgMi4wIERWRCBEZWx1eGUiLAogCQkuc2hvcnRuYW1lID0gImd2MmQiLAotCQkuY2xpZW50X21vZHVsZXMubHN0ID0gcHZyMl9jbGllbnRfZ290dmlld18yLAotCQkuY2xpZW50X21vZHVsZXMuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaWVudF9nb3R2aWV3XzIpLAorCQkuY2xpZW50X3RhYmxlLmxzdCA9IHB2cjJfY2xpX2dvdHZpZXdfMiwKKwkJLmNsaWVudF90YWJsZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpX2dvdHZpZXdfMiksCiAJCS5mbGFnX2hhc19jeDI1ODQwID0gITAsCiAJCS5kZWZhdWx0X3R1bmVyX3R5cGUgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywKIAkJLmZsYWdfaGFzX2FuYWxvZ3R1bmVyID0gITAsCkBAIC0xODEsMjkgKzE4MywyOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHB2cjJfZHZiX3Byb3BzIHB2cjJfb25haXJfY3JlYXRvcl9mZV9wcm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgcHZyMl9vbmFpcl9jcmVhdG9yX2ZlX3Byb3BzID0gewogCS5mcm9udGVuZF9hdHRhY2ggPSBwdnIyX2xnZHQzMzAzX2F0dGFjaCwKIAkudHVuZXJfYXR0YWNoICAgID0gcHZyMl9sZ2gwNnhmX2F0dGFjaCwKIH07CiAjZW5kaWYKIAotc3RhdGljIGNvbnN0IGNoYXIgKnB2cjJfY2xpZW50X29uYWlyX2NyZWF0b3JbXSA9IHsKLQkic2FhNzExNSIsCi0JInR1bmVyIiwKLQkiY3M1M2wzMmEiLAorc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9jbGllbnRfZGVzYyBwdnIyX2NsaV9vbmFpcl9jcmVhdG9yW10gPSB7CisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfU0FBNzExNSB9LAorCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX0NTNTNMMzJBIH0sCisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfVFVORVIgfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfZGVzYyBwdnIyX2RldmljZV9vbmFpcl9jcmVhdG9yID0gewogCQkuZGVzY3JpcHRpb24gPSAiT25BaXIgQ3JlYXRvciBIeWJyaWQgVVNCIHR1bmVyIiwKIAkJLnNob3J0bmFtZSA9ICJvYWMiLAotCQkuY2xpZW50X21vZHVsZXMubHN0ID0gcHZyMl9jbGllbnRfb25haXJfY3JlYXRvciwKLQkJLmNsaWVudF9tb2R1bGVzLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGllbnRfb25haXJfY3JlYXRvciksCisJCS5jbGllbnRfdGFibGUubHN0ID0gcHZyMl9jbGlfb25haXJfY3JlYXRvciwKKwkJLmNsaWVudF90YWJsZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpX29uYWlyX2NyZWF0b3IpLAogCQkuZGVmYXVsdF90dW5lcl90eXBlID0gVFVORVJfTEdfVERWU19IMDZYRiwKIAkJLmZsYWdfaGFzX2FuYWxvZ3R1bmVyID0gITAsCiAJCS5mbGFnX2hhc19jb21wb3NpdGUgPSAhMCwKIAkJLmZsYWdfaGFzX3N2aWRlbyA9ICEwLAogCQkuZmxhZ19kaWdpdGFsX3JlcXVpcmVzX2N4MjM0MTYgPSAhMCwKLQkJLnNpZ25hbF9yb3V0aW5nX3NjaGVtZSA9IFBWUjJfUk9VVElOR19TQ0hFTUVfSEFVUFBBVUdFLAorCQkuc2lnbmFsX3JvdXRpbmdfc2NoZW1lID0gUFZSMl9ST1VUSU5HX1NDSEVNRV9PTkFJUiwKIAkJLmRpZ2l0YWxfY29udHJvbF9zY2hlbWUgPSBQVlIyX0RJR0lUQUxfU0NIRU1FX09OQUlSLAogCQkuZGVmYXVsdF9zdGRfbWFzayA9IFY0TDJfU1REX05UU0NfTSwKICNpZmRlZiBDT05GSUdfVklERU9fUFZSVVNCMl9EVkIKQEAgLTI0MSwyOSArMjQzLDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgcHZyMl9vbmFpcl91c2IyX2ZlX3Byb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2R2Yl9wcm9wcyBwdnIyX29uYWlyX3VzYjJfZmVfcHJvcHMgPSB7CiAJLmZyb250ZW5kX2F0dGFjaCA9IHB2cjJfbGdkdDMzMDJfYXR0YWNoLAogCS50dW5lcl9hdHRhY2ggICAgPSBwdnIyX2ZjdjEyMzZkX2F0dGFjaCwKIH07CiAjZW5kaWYKIAotc3RhdGljIGNvbnN0IGNoYXIgKnB2cjJfY2xpZW50X29uYWlyX3VzYjJbXSA9IHsKLQkic2FhNzExNSIsCi0JInR1bmVyIiwKLQkiY3M1M2wzMmEiLAorc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9jbGllbnRfZGVzYyBwdnIyX2NsaV9vbmFpcl91c2IyW10gPSB7CisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfU0FBNzExNSB9LAorCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX0NTNTNMMzJBIH0sCisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfVFVORVIgfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfZGVzYyBwdnIyX2RldmljZV9vbmFpcl91c2IyID0gewogCQkuZGVzY3JpcHRpb24gPSAiT25BaXIgVVNCMiBIeWJyaWQgVVNCIHR1bmVyIiwKIAkJLnNob3J0bmFtZSA9ICJvYTIiLAotCQkuY2xpZW50X21vZHVsZXMubHN0ID0gcHZyMl9jbGllbnRfb25haXJfdXNiMiwKLQkJLmNsaWVudF9tb2R1bGVzLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGllbnRfb25haXJfdXNiMiksCisJCS5jbGllbnRfdGFibGUubHN0ID0gcHZyMl9jbGlfb25haXJfdXNiMiwKKwkJLmNsaWVudF90YWJsZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpX29uYWlyX3VzYjIpLAogCQkuZGVmYXVsdF90dW5lcl90eXBlID0gVFVORVJfUEhJTElQU19GQ1YxMjM2RCwKIAkJLmZsYWdfaGFzX2FuYWxvZ3R1bmVyID0gITAsCiAJCS5mbGFnX2hhc19jb21wb3NpdGUgPSAhMCwKIAkJLmZsYWdfaGFzX3N2aWRlbyA9ICEwLAogCQkuZmxhZ19kaWdpdGFsX3JlcXVpcmVzX2N4MjM0MTYgPSAhMCwKLQkJLnNpZ25hbF9yb3V0aW5nX3NjaGVtZSA9IFBWUjJfUk9VVElOR19TQ0hFTUVfSEFVUFBBVUdFLAorCQkuc2lnbmFsX3JvdXRpbmdfc2NoZW1lID0gUFZSMl9ST1VUSU5HX1NDSEVNRV9PTkFJUiwKIAkJLmRpZ2l0YWxfY29udHJvbF9zY2hlbWUgPSBQVlIyX0RJR0lUQUxfU0NIRU1FX09OQUlSLAogCQkuZGVmYXVsdF9zdGRfbWFzayA9IFY0TDJfU1REX05UU0NfTSwKICNpZmRlZiBDT05GSUdfVklERU9fUFZSVVNCMl9EVkIKQEAgLTMxNCwxNSArMzE2LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgcHZyMl83M3h4eF9kdmJfcHJvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZHZiX3Byb3BzIHB2cjJfNzN4eHhfZHZiX3Byb3BzID0gewogCS5mcm9udGVuZF9hdHRhY2ggPSBwdnIyX3RkYTEwMDQ4X2F0dGFjaCwKIAkudHVuZXJfYXR0YWNoICAgID0gcHZyMl83M3h4eF90ZGExODI3MV84Mjk1X2F0dGFjaCwKIH07CiAjZW5kaWYKIAotc3RhdGljIGNvbnN0IGNoYXIgKnB2cjJfY2xpZW50XzczeHh4W10gPSB7Ci0JImN4MjU4NDAiLAotCSJ0dW5lciIsCitzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2NsaWVudF9kZXNjIHB2cjJfY2xpXzczeHh4W10gPSB7CisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfQ1gyNTg0MCB9LAorCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX1RVTkVSLAorCSAgLmkyY19hZGRyZXNzX2xpc3QgPSAiXHg0MiJ9LAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnB2cjJfZncxX25hbWVzXzczeHh4W10gPSB7CkBAIC0zMzIsOCArMzM1LDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfZGVzYyBwdnIyX2RldmljZV83M3h4eCA9IHsKIAkJLmRlc2NyaXB0aW9uID0gIldpblRWIEhWUi0xOTAwIE1vZGVsIENhdGVnb3J5IDczeHh4IiwKIAkJLnNob3J0bmFtZSA9ICI3M3h4eCIsCi0JCS5jbGllbnRfbW9kdWxlcy5sc3QgPSBwdnIyX2NsaWVudF83M3h4eCwKLQkJLmNsaWVudF9tb2R1bGVzLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGllbnRfNzN4eHgpLAorCQkuY2xpZW50X3RhYmxlLmxzdCA9IHB2cjJfY2xpXzczeHh4LAorCQkuY2xpZW50X3RhYmxlLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGlfNzN4eHgpLAogCQkuZngyX2Zpcm13YXJlLmxzdCA9IHB2cjJfZncxX25hbWVzXzczeHh4LAogCQkuZngyX2Zpcm13YXJlLmNudCA9IEFSUkFZX1NJWkUocHZyMl9mdzFfbmFtZXNfNzN4eHgpLAogCQkuZmxhZ19oYXNfY3gyNTg0MCA9ICEwLApAQCAtNDE4LDIyICs0MjEsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwdnIyX2R2Yl9wcm9wcyBwdnIyXzc1MHh4X2R2Yl9wcm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgcHZyMl83NTB4eF9kdmJfcHJvcHMgPSB7CiAJLmZyb250ZW5kX2F0dGFjaCA9IHB2cjJfczVoMTQwOV9hdHRhY2gsCiAJLnR1bmVyX2F0dGFjaCAgICA9IHB2cjJfdGRhMTgyNzFfODI5NV9hdHRhY2gsCiB9OwogCi1zdGF0aWMgc3RydWN0IHB2cjJfZHZiX3Byb3BzIHB2cjJfNzUxeHhfZHZiX3Byb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2R2Yl9wcm9wcyBwdnIyXzc1MXh4X2R2Yl9wcm9wcyA9IHsKIAkuZnJvbnRlbmRfYXR0YWNoID0gcHZyMl9zNWgxNDExX2F0dGFjaCwKIAkudHVuZXJfYXR0YWNoICAgID0gcHZyMl90ZGExODI3MV84Mjk1X2F0dGFjaCwKIH07CiAjZW5kaWYKIAotc3RhdGljIGNvbnN0IGNoYXIgKnB2cjJfY2xpZW50Xzc1eHh4W10gPSB7Ci0JImN4MjU4NDAiLAotCSJ0dW5lciIsCi19OwotCiBzdGF0aWMgY29uc3QgY2hhciAqcHZyMl9mdzFfbmFtZXNfNzV4eHhbXSA9IHsKIAkJInY0bC1wdnJ1c2IyLTczeHh4LTAxLmZ3IiwKIH07CkBAIC00NDEsOCArNDM5LDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfZGVzYyBwdnIyX2RldmljZV83NTB4eCA9IHsKIAkJLmRlc2NyaXB0aW9uID0gIldpblRWIEhWUi0xOTUwIE1vZGVsIENhdGVnb3J5IDc1MHh4IiwKIAkJLnNob3J0bmFtZSA9ICI3NTB4eCIsCi0JCS5jbGllbnRfbW9kdWxlcy5sc3QgPSBwdnIyX2NsaWVudF83NXh4eCwKLQkJLmNsaWVudF9tb2R1bGVzLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGllbnRfNzV4eHgpLAorCQkuY2xpZW50X3RhYmxlLmxzdCA9IHB2cjJfY2xpXzczeHh4LAorCQkuY2xpZW50X3RhYmxlLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGlfNzN4eHgpLAogCQkuZngyX2Zpcm13YXJlLmxzdCA9IHB2cjJfZncxX25hbWVzXzc1eHh4LAogCQkuZngyX2Zpcm13YXJlLmNudCA9IEFSUkFZX1NJWkUocHZyMl9mdzFfbmFtZXNfNzV4eHgpLAogCQkuZmxhZ19oYXNfY3gyNTg0MCA9ICEwLApAQCAtNDYzLDggKzQ2MSw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2Rlc2MgcHZyMl9kZXZpY2VfNzUxeHggPSB7CiAJCS5kZXNjcmlwdGlvbiA9ICJXaW5UViBIVlItMTk1MCBNb2RlbCBDYXRlZ29yeSA3NTF4eCIsCiAJCS5zaG9ydG5hbWUgPSAiNzUxeHgiLAotCQkuY2xpZW50X21vZHVsZXMubHN0ID0gcHZyMl9jbGllbnRfNzV4eHgsCi0JCS5jbGllbnRfbW9kdWxlcy5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpZW50Xzc1eHh4KSwKKwkJLmNsaWVudF90YWJsZS5sc3QgPSBwdnIyX2NsaV83M3h4eCwKKwkJLmNsaWVudF90YWJsZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpXzczeHh4KSwKIAkJLmZ4Ml9maXJtd2FyZS5sc3QgPSBwdnIyX2Z3MV9uYW1lc183NXh4eCwKIAkJLmZ4Ml9maXJtd2FyZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfZncxX25hbWVzXzc1eHh4KSwKIAkJLmZsYWdfaGFzX2N4MjU4NDAgPSAhMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuaAppbmRleCBjYjNhMzNlLi4zZTU1MzM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZXZhdHRyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5oCkBAIC0zMyw2ICszMywzNCBAQAogKi8KIAogCisjZGVmaW5lIFBWUjJfQ0xJRU5UX0lEX05VTEwgMAorI2RlZmluZSBQVlIyX0NMSUVOVF9JRF9NU1AzNDAwIDEKKyNkZWZpbmUgUFZSMl9DTElFTlRfSURfQ1gyNTg0MCAyCisjZGVmaW5lIFBWUjJfQ0xJRU5UX0lEX1NBQTcxMTUgMworI2RlZmluZSBQVlIyX0NMSUVOVF9JRF9UVU5FUiA0CisjZGVmaW5lIFBWUjJfQ0xJRU5UX0lEX0NTNTNMMzJBIDUKKyNkZWZpbmUgUFZSMl9DTElFTlRfSURfV004Nzc1IDYKKyNkZWZpbmUgUFZSMl9DTElFTlRfSURfREVNT0QgNworCitzdHJ1Y3QgcHZyMl9kZXZpY2VfY2xpZW50X2Rlc2MgeworCS8qIE9uZSBvdnIgUFZSMl9DTElFTlRfSURfeHh4eCAqLworCXVuc2lnbmVkIGNoYXIgbW9kdWxlX2lkOworCisJLyogTnVsbC10ZXJtaW5hdGVkIGFycmF5IG9mIEkyQyBhZGRyZXNzZXMgdG8gdHJ5IGluIG9yZGVyCisJICAgaW5pdGlhbGl6ZSB0aGUgbW9kdWxlLiAgSXQncyBzYWZlIHRvIG1ha2UgdGhpcyBudWxsIHRlcm1pbmF0ZWQKKwkgICBzaW5jZSB3ZSdyZSBuZXZlciBnb2luZyB0byBlbmNvdW50ZXIgYW4gaTJjIGRldmljZSB3aXRoIGFuCisJICAgYWRkcmVzcyBvZiB6ZXJvLiAgSWYgdGhpcyBpcyBhIG51bGwgcG9pbnRlciBvciB6ZXJvLWxlbmd0aCwKKwkgICB0aGVuIG5vIEkyQyBhZGRyZXNzZXMgaGF2ZSBiZWVuIHNwZWNpZmllZCwgaW4gd2hpY2ggY2FzZSB3ZSdsbAorCSAgIHRyeSBzb21lIGNvbXBpbGVkIGluIGRlZmF1bHRzIGZvciBub3cuICovCisJdW5zaWduZWQgY2hhciAqaTJjX2FkZHJlc3NfbGlzdDsKK307CisKK3N0cnVjdCBwdnIyX2RldmljZV9jbGllbnRfdGFibGUgeworCWNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9jbGllbnRfZGVzYyAqbHN0OworCXVuc2lnbmVkIGNoYXIgY250OworfTsKKworCiBzdHJ1Y3QgcHZyMl9zdHJpbmdfdGFibGUgewogCWNvbnN0IGNoYXIgKipsc3Q7CiAJdW5zaWduZWQgaW50IGNudDsKQEAgLTQwLDYgKzY4LDcgQEAKIAogI2RlZmluZSBQVlIyX1JPVVRJTkdfU0NIRU1FX0hBVVBQQVVHRSAwCiAjZGVmaW5lIFBWUjJfUk9VVElOR19TQ0hFTUVfR09UVklFVyAxCisjZGVmaW5lIFBWUjJfUk9VVElOR19TQ0hFTUVfT05BSVIgMgogCiAjZGVmaW5lIFBWUjJfRElHSVRBTF9TQ0hFTUVfTk9ORSAwCiAjZGVmaW5lIFBWUjJfRElHSVRBTF9TQ0hFTUVfSEFVUFBBVUdFIDEKQEAgLTY2LDYgKzk1LDkgQEAKIAkvKiBMaXN0IG9mIGFkZGl0aW9uYWwgY2xpZW50IG1vZHVsZXMgd2UgbmVlZCB0byBsb2FkICovCiAJc3RydWN0IHB2cjJfc3RyaW5nX3RhYmxlIGNsaWVudF9tb2R1bGVzOwogCisJLyogTGlzdCBvZiBkZWZpbmVkIGNsaWVudCBtb2R1bGVzIHdlIG5lZWQgdG8gbG9hZCAqLworCXN0cnVjdCBwdnIyX2RldmljZV9jbGllbnRfdGFibGUgY2xpZW50X3RhYmxlOworCiAJLyogTGlzdCBvZiBGWDIgZmlybXdhcmUgZmlsZSBuYW1lcyB3ZSBzaG91bGQgc2VhcmNoOyBpZiBlbXB0eSB0aGVuCiAJICAgRlgyIGZpcm13YXJlIGNoZWNrIC8gbG9hZCBpcyBza2lwcGVkIGFuZCB3ZSBhc3N1bWUgdGhlIGRldmljZQogCSAgIHdhcyBpbml0aWFsaXplZCBmcm9tIGludGVybmFsIFJPTS4gKi8KQEAgLTczLDcgKzEwNSw3IEBACiAKICNpZmRlZiBDT05GSUdfVklERU9fUFZSVVNCMl9EVkIKIAkvKiBjYWxsYmFjayBmdW5jdGlvbnMgdG8gaGFuZGxlIGF0dGFjaG1lbnQgb2YgZGlnaXRhbCB0dW5lciAmIGRlbW9kICovCi0Jc3RydWN0IHB2cjJfZHZiX3Byb3BzICpkdmJfcHJvcHM7CisJY29uc3Qgc3RydWN0IHB2cjJfZHZiX3Byb3BzICpkdmJfcHJvcHM7CiAKICNlbmRpZgogCS8qIEluaXRpYWwgc3RhbmRhcmQgYml0cyB0byB1c2UgZm9yIHRoaXMgZGV2aWNlLCBpZiBub3QgemVyby4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZHZiLmMKaW5kZXggNzdiM2MzMy4uYjdmNWM0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZHZiLmMKQEAgLTMyMSw3ICszMjEsNyBAQAogc3RhdGljIGludCBwdnIyX2R2Yl9mcm9udGVuZF9pbml0KHN0cnVjdCBwdnIyX2R2Yl9hZGFwdGVyICphZGFwKQogewogCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gYWRhcC0+Y2hhbm5lbC5oZHc7Ci0Jc3RydWN0IHB2cjJfZHZiX3Byb3BzICpkdmJfcHJvcHMgPSBoZHctPmhkd19kZXNjLT5kdmJfcHJvcHM7CisJY29uc3Qgc3RydWN0IHB2cjJfZHZiX3Byb3BzICpkdmJfcHJvcHMgPSBoZHctPmhkd19kZXNjLT5kdmJfcHJvcHM7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoZHZiX3Byb3BzID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVuY29kZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVuY29kZXIuYwppbmRleCAyNzNkMmExLi41NGFjNTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lbmNvZGVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZW5jb2Rlci5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAlpbnQgZW5jTWlzYzNBcmcgPSAwOwogCiAjaWYgMAotCS8qIFRoaXMgaW5leHBsaWNhYmxlIGJpdCBoYXBwZW5zIGluIHRoZSBIYXVwcGFnZSB3aW5kb3dzCisJLyogVGhpcyBpbmV4cGxpY2FibGUgYml0IGhhcHBlbnMgaW4gdGhlIEhhdXBwYXVnZSB3aW5kb3dzCiAJICAgZHJpdmVyIChmb3IgYm90aCAyNHh4eCBhbmQgMjl4eHggZGV2aWNlcykuICBIb3dldmVyIEkKIAkgICBjdXJyZW50bHkgc2VlIG5vIGRpZmZlcmVuY2UgaW4gYmVoYXZpb3Igd2l0aCBvciB3aXRob3V0CiAJICAgdGhpcyBzdHVmZi4gIExlYXZlIHRoaXMgaGVyZSBhcyBhIG5vdGUgb2YgaXRzIGV4aXN0ZW5jZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmgKaW5kZXggZGU3ZWU3Mi4uNWQ3NWViNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmgKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgInB2cnVzYjItaGR3LmgiCiAjaW5jbHVkZSAicHZydXNiMi1pby5oIgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvY3gyMzQxeC5oPgogI2luY2x1ZGUgInB2cnVzYjItZGV2YXR0ci5oIgogCkBAIC01Nyw4ICs1OCw2IEBACiAjZGVmaW5lIExPQ0tfVEFLRSh4KSBkbyB7IG11dGV4X2xvY2soJngjI19tdXRleCk7IHgjI19oZWxkID0gITA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIExPQ0tfR0lWRSh4KSBkbyB7IHgjI19oZWxkID0gMDsgbXV0ZXhfdW5sb2NrKCZ4IyNfbXV0ZXgpOyB9IHdoaWxlICgwKQogCi1zdHJ1Y3QgcHZyMl9kZWNvZGVyOwotCiB0eXBlZGVmIGludCAoKnB2cjJfY3RsZl9pc19kaXJ0eSkoc3RydWN0IHB2cjJfY3RybCAqKTsKIHR5cGVkZWYgdm9pZCAoKnB2cjJfY3RsZl9jbGVhcl9kaXJ0eSkoc3RydWN0IHB2cjJfY3RybCAqKTsKIHR5cGVkZWYgaW50ICgqcHZyMl9jdGxmX2NoZWNrX3ZhbHVlKShzdHJ1Y3QgcHZyMl9jdHJsICosaW50KTsKQEAgLTEzOSwyMiArMTM4LDYgQEAKIH07CiAKIAotc3RydWN0IHB2cjJfZGVjb2Rlcl9jdHJsIHsKLQl2b2lkICpjdHh0OwotCXZvaWQgKCpkZXRhY2gpKHZvaWQgKik7Ci0Jdm9pZCAoKmVuYWJsZSkodm9pZCAqLGludCk7Ci0Jdm9pZCAoKmZvcmNlX3Jlc2V0KSh2b2lkICopOwotfTsKLQotI2RlZmluZSBQVlIyX0kyQ19QRU5EX0RFVEVDVCAgMHgwMSAgLyogTmVlZCB0byBkZXRlY3QgYSBjbGllbnQgdHlwZSAqLwotI2RlZmluZSBQVlIyX0kyQ19QRU5EX0NMSUVOVCAgMHgwMiAgLyogQ2xpZW50IG5lZWRzIGEgc3BlY2lmaWMgdXBkYXRlICovCi0jZGVmaW5lIFBWUjJfSTJDX1BFTkRfUkVGUkVTSCAweDA0ICAvKiBDbGllbnQgaGFzIHNwZWNpZmljIHBlbmRpbmcgYml0cyAqLwotI2RlZmluZSBQVlIyX0kyQ19QRU5EX1NUQUxFICAgMHgwOCAgLyogQnJvYWRjYXN0IHBlbmRpbmcgYml0cyAqLwotCi0jZGVmaW5lIFBWUjJfSTJDX1BFTkRfQUxMIChQVlIyX0kyQ19QRU5EX0RFVEVDVCB8XAotCQkJICAgUFZSMl9JMkNfUEVORF9DTElFTlQgfFwKLQkJCSAgIFBWUjJfSTJDX1BFTkRfUkVGUkVTSCB8XAotCQkJICAgUFZSMl9JMkNfUEVORF9TVEFMRSkKIAogLyogRGlzcG9zaXRpb24gb2YgZmlybXdhcmUxIGxvYWRpbmcgc2l0dWF0aW9uICovCiAjZGVmaW5lIEZXMV9TVEFURV9VTktOT1dOIDAKQEAgLTE3OSw2ICsxNjIsOCBAQAogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OwogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfaW50ZjsKIAorCS8qIE91ciBoYW5kbGUgaW50byB0aGUgdjRsMiBzdWItZGV2aWNlIGFyY2hpdGVjdHVyZSAqLworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKIAkvKiBEZXZpY2UgZGVzY3JpcHRpb24sIGFueXRoaW5nIHRoYXQgbXVzdCBhZGp1c3QgYmVoYXZpb3IgYmFzZWQgb24KIAkgICBkZXZpY2Ugc3BlY2lmaWMgaW5mbyB3aWxsIHVzZSBpbmZvcm1hdGlvbiBoZWxkIGhlcmUuICovCiAJY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2Rlc2MgKmhkd19kZXNjOwpAQCAtMTg2LDcgKzE3MSw2IEBACiAJLyogS2VybmVsIHdvcmtlciB0aHJlYWQgaGFuZGxpbmcgKi8KIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya3F1ZXVlOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrcG9sbDsgICAgIC8qIFVwZGF0ZSBkcml2ZXIgc3RhdGUgKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya2kyY3N5bmM7ICAvKiBVcGRhdGUgaTJjIGNsaWVudHMgKi8KIAogCS8qIFZpZGVvIHNwaWdvdCAqLwogCXN0cnVjdCBwdnIyX3N0cmVhbSAqdmlkX3N0cmVhbTsKQEAgLTE5NSwyMCArMTc5LDI2IEBACiAJc3RydWN0IG11dGV4IGJpZ19sb2NrX211dGV4OwogCWludCBiaWdfbG9ja19oZWxkOyAgLyogRm9yIGRlYnVnZ2luZyAqLwogCisJLyogVGhpcyBpcyBhIHNpbXBsZSBzdHJpbmcgd2hpY2ggaWRlbnRpZmllcyB0aGUgaW5zdGFuY2Ugb2YgdGhpcworCSAgIGRyaXZlci4gIEl0IGlzIHVuaXF1ZSB3aXRoaW4gdGhlIHNldCBvZiBleGlzdGluZyBkZXZpY2VzLCBidXQKKwkgICB0aGVyZSBpcyBubyBhdHRlbXB0IHRvIGtlZXAgdGhlIG5hbWUgY29uc2lzdGVudCB3aXRoIHRoZSBzYW1lCisJICAgcGh5c2ljYWwgZGV2aWNlIGVhY2ggdGltZS4gKi8KIAljaGFyIG5hbWVbMzJdOwogCisJLyogVGhpcyBpcyBhIHNpbXBsZSBzdHJpbmcgd2hpY2ggaWRlbnRpZmllcyB0aGUgcGh5c2ljYWwgZGV2aWNlCisJICAgaW5zdGFuY2UgaXRzZWxmIC0gaWYgcG9zc2libGUuICAoSWYgbm90IHBvc3NpYmxlLCB0aGVuIGl0IGlzCisJICAgYmFzZWQgb24gdGhlIHNwZWNpZmljIGRyaXZlciBpbnN0YW5jZSwgc2ltaWxhciB0byBuYW1lIGFib3ZlLikKKwkgICBUaGUgaWRlYSBoZXJlIGlzIHRoYXQgdXNlcnNwYWNlIG1pZ2h0IGhvcGVmdWxseSBiZSBhYmxlIHRvIHVzZQorCSAgIHRoaXMgcmVjb2duaXplIHNwZWNpZmljIHR1bmVycy4gIEl0IHdpbGwgZW5jb2RlIGEgc2VyaWFsIG51bWJlciwKKwkgICBpZiBhdmFpbGFibGUuICovCisJY2hhciBpZGVudGlmaWVyWzMyXTsKKwogCS8qIEkyQyBzdHVmZiAqLwogCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcDsKIAlzdHJ1Y3QgaTJjX2FsZ29yaXRobSBpMmNfYWxnbzsKIAlwdnIyX2kyY19mdW5jIGkyY19mdW5jW1BWUjJfSTJDX0ZVTkNfQ05UXTsKIAlpbnQgaTJjX2N4MjU4NDBfaGFja19zdGF0ZTsKIAlpbnQgaTJjX2xpbmtlZDsKLQl1bnNpZ25lZCBpbnQgaTJjX3BlbmRfdHlwZXM7ICAgIC8qIFdoaWNoIHR5cGVzIG9mIHVwZGF0ZSBhcmUgbmVlZGVkICovCi0JdW5zaWduZWQgbG9uZyBpMmNfcGVuZF9tYXNrOyAgICAvKiBDaGFuZ2UgYml0cyB3ZSBuZWVkIHRvIHNjYW4gKi8KLQl1bnNpZ25lZCBsb25nIGkyY19zdGFsZV9tYXNrOyAgIC8qIFBlbmRpbmcgYnJvYWRjYXN0IGNoYW5nZSBiaXRzICovCi0JdW5zaWduZWQgbG9uZyBpMmNfYWN0aXZlX21hc2s7ICAvKiBBbGwgY2hhbmdlIGJpdHMgY3VycmVudGx5IGluIHVzZSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgaTJjX2NsaWVudHM7Ci0Jc3RydWN0IG11dGV4IGkyY19saXN0X2xvY2s7CiAKIAkvKiBGcmVxdWVuY3kgdGFibGUgKi8KIAl1bnNpZ25lZCBpbnQgZnJlcVRhYmxlW0ZSRVFUQUJMRV9TSVpFXTsKQEAgLTI3NSw2ICsyNjUsNyBAQAogCXdhaXRfcXVldWVfaGVhZF90IHN0YXRlX3dhaXRfZGF0YTsKIAogCisJaW50IGZvcmNlX2RpcnR5OyAgICAgICAgLyogY29uc2lkZXIgYWxsIGNvbnRyb2xzIGRpcnR5IGlmIHRydWUgKi8KIAlpbnQgZmxhZ19vazsgICAgICAgICAgICAvKiBkZXZpY2UgaW4ga25vd24gZ29vZCBzdGF0ZSAqLwogCWludCBmbGFnX2Rpc2Nvbm5lY3RlZDsgIC8qIGZsYWdfb2sgPT0gMCBkdWUgdG8gZGlzY29ubmVjdCAqLwogCWludCBmbGFnX2luaXRfb2s7ICAgICAgIC8qIHRydWUgaWYgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkICovCkBAIC0yODMsMTcgKzI3NCwxMyBAQAogCWludCBmbGFnX2RlY29kZXJfbWlzc2VkOy8qIFdlJ3ZlIG5vdGljZWQgbWlzc2luZyBkZWNvZGVyICovCiAJaW50IGZsYWdfdHJpcHBlZDsgICAgICAgLyogSW5kaWNhdGVzIG92ZXJhbGwgZmFpbHVyZSB0byBzdGFydCAqLwogCi0Jc3RydWN0IHB2cjJfZGVjb2Rlcl9jdHJsICpkZWNvZGVyX2N0cmw7CisJdW5zaWduZWQgaW50IGRlY29kZXJfY2xpZW50X2lkOwogCiAJLy8gQ1BVIGZpcm13YXJlIGluZm8gKHVzZWQgdG8gaGVscCBmaW5kIC8gc2F2ZSBmaXJtd2FyZSBkYXRhKQogCWNoYXIgKmZ3X2J1ZmZlcjsKIAl1bnNpZ25lZCBpbnQgZndfc2l6ZTsKIAlpbnQgZndfY3B1X2ZsYWc7IC8qIFRydWUgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCB0aGUgQ1BVICovCiAKLQkvLyBUcnVlIGlmIHRoZXJlIGlzIGEgcmVxdWVzdCB0byB0cmlnZ2VyIGxvZ2dpbmcgb2Ygc3RhdGUgaW4gZWFjaAotCS8vIG1vZHVsZS4KLQlpbnQgbG9nX3JlcXVlc3RlZDsKLQogCS8qIFR1bmVyIC8gZnJlcXVlbmN5IGNvbnRyb2wgc3R1ZmYgKi8KIAl1bnNpZ25lZCBpbnQgdHVuZXJfdHlwZTsKIAlpbnQgdHVuZXJfdXBkYXRlZDsKQEAgLTM5MSw3ICszNzgsOCBAQAogCiAvKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIGN1cnJlbnQgZnJlcXVlbmN5ICovCiB1bnNpZ25lZCBsb25nIHB2cjJfaGR3X2dldF9jdXJfZnJlcShzdHJ1Y3QgcHZyMl9oZHcgKik7Ci12b2lkIHB2cjJfaGR3X3NldF9kZWNvZGVyKHN0cnVjdCBwdnIyX2hkdyAqLHN0cnVjdCBwdnIyX2RlY29kZXJfY3RybCAqKTsKKwordm9pZCBwdnIyX2hkd19zdGF0dXNfcG9sbChzdHJ1Y3QgcHZyMl9oZHcgKik7CiAKICNlbmRpZiAvKiBfX1BWUlVTQjJfSERXX0lOVEVSTkFMX0ggKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYwppbmRleCBmYTMwNGU1Li43YTY1YjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYwpAQCAtMjQsMTcgKzI0LDIyIEBACiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CiAjaW5jbHVkZSAicHZydXNiMi5oIgogI2luY2x1ZGUgInB2cnVzYjItc3RkLmgiCiAjaW5jbHVkZSAicHZydXNiMi11dGlsLmgiCiAjaW5jbHVkZSAicHZydXNiMi1oZHcuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWkyYy1jb3JlLmgiCi0jaW5jbHVkZSAicHZydXNiMi10dW5lci5oIgogI2luY2x1ZGUgInB2cnVzYjItZWVwcm9tLmgiCiAjaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWVuY29kZXIuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWRlYnVnLmgiCiAjaW5jbHVkZSAicHZydXNiMi1meDItY21kLmgiCisjaW5jbHVkZSAicHZydXNiMi13bTg3NzUuaCIKKyNpbmNsdWRlICJwdnJ1c2IyLXZpZGVvLXY0bC5oIgorI2luY2x1ZGUgInB2cnVzYjItY3gyNTg0eC12NGwuaCIKKyNpbmNsdWRlICJwdnJ1c2IyLWNzNTNsMzJhLmgiCisjaW5jbHVkZSAicHZydXNiMi1hdWRpby5oIgogCiAjZGVmaW5lIFRWX01JTl9GUkVRICAgICA1NTI1MDAwMEwKICNkZWZpbmUgVFZfTUFYX0ZSRVEgICAgODUwMDAwMDAwTApAQCAtMTA0LDYgKzEwOSwzOSBAQAogLyogc2l6ZSBvZiBhIGZpcm13YXJlIGNodW5rICovCiAjZGVmaW5lIEZJUk1XQVJFX0NIVU5LX1NJWkUgMHgyMDAwCiAKK3R5cGVkZWYgdm9pZCAoKnB2cjJfc3ViZGV2X3VwZGF0ZV9mdW5jKShzdHJ1Y3QgcHZyMl9oZHcgKiwKKwkJCQkJc3RydWN0IHY0bDJfc3ViZGV2ICopOworCitzdGF0aWMgY29uc3QgcHZyMl9zdWJkZXZfdXBkYXRlX2Z1bmMgcHZyMl9tb2R1bGVfdXBkYXRlX2Z1bmN0aW9uc1tdID0geworCVtQVlIyX0NMSUVOVF9JRF9XTTg3NzVdID0gcHZyMl93bTg3NzVfc3ViZGV2X3VwZGF0ZSwKKwlbUFZSMl9DTElFTlRfSURfU0FBNzExNV0gPSBwdnIyX3NhYTcxMTVfc3ViZGV2X3VwZGF0ZSwKKwlbUFZSMl9DTElFTlRfSURfTVNQMzQwMF0gPSBwdnIyX21zcDM0MDBfc3ViZGV2X3VwZGF0ZSwKKwlbUFZSMl9DTElFTlRfSURfQ1gyNTg0MF0gPSBwdnIyX2N4MjU4NDBfc3ViZGV2X3VwZGF0ZSwKKwlbUFZSMl9DTElFTlRfSURfQ1M1M0wzMkFdID0gcHZyMl9jczUzbDMyYV9zdWJkZXZfdXBkYXRlLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lc1tdID0geworCVtQVlIyX0NMSUVOVF9JRF9NU1AzNDAwXSA9ICJtc3AzNDAwIiwKKwlbUFZSMl9DTElFTlRfSURfQ1gyNTg0MF0gPSAiY3gyNTg0MCIsCisJW1BWUjJfQ0xJRU5UX0lEX1NBQTcxMTVdID0gInNhYTcxMTUiLAorCVtQVlIyX0NMSUVOVF9JRF9UVU5FUl0gPSAidHVuZXIiLAorCVtQVlIyX0NMSUVOVF9JRF9ERU1PRF0gPSAidHVuZXIiLAorCVtQVlIyX0NMSUVOVF9JRF9DUzUzTDMyQV0gPSAiY3M1M2wzMmEiLAorCVtQVlIyX0NMSUVOVF9JRF9XTTg3NzVdID0gIndtODc3NSIsCit9OworCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICptb2R1bGVfaTJjX2FkZHJlc3Nlc1tdID0geworCVtQVlIyX0NMSUVOVF9JRF9UVU5FUl0gPSAiXHg2MFx4NjFceDYyXHg2MyIsCisJW1BWUjJfQ0xJRU5UX0lEX0RFTU9EXSA9ICJceDQzIiwKKwlbUFZSMl9DTElFTlRfSURfTVNQMzQwMF0gPSAiXHg0MCIsCisJW1BWUjJfQ0xJRU5UX0lEX1NBQTcxMTVdID0gIlx4MjEiLAorCVtQVlIyX0NMSUVOVF9JRF9XTTg3NzVdID0gIlx4MWIiLAorCVtQVlIyX0NMSUVOVF9JRF9DWDI1ODQwXSA9ICJceDQ0IiwKKwlbUFZSMl9DTElFTlRfSURfQ1M1M0wzMkFdID0gIlx4MTEiLAorfTsKKworCiAvKiBEZWZpbmUgdGhlIGxpc3Qgb2YgYWRkaXRpb25hbCBjb250cm9scyB3ZSdsbCBkeW5hbWljYWxseSBjb25zdHJ1Y3QgYmFzZWQKICAgIG9uIHF1ZXJ5IG9mIHRoZSBjeDIzNDF4IG1vZHVsZS4gKi8KIHN0cnVjdCBwdnIyX21wZWdfaWRzIHsKQEAgLTI3Nyw3ICszMTUsNiBAQAogc3RhdGljIHZvaWQgcHZyMl9oZHdfc3RhdGVfc2NoZWQoc3RydWN0IHB2cjJfaGR3ICopOwogc3RhdGljIGludCBwdnIyX2hkd19zdGF0ZV9ldmFsKHN0cnVjdCBwdnIyX2hkdyAqKTsKIHN0YXRpYyB2b2lkIHB2cjJfaGR3X3NldF9jdXJfZnJlcShzdHJ1Y3QgcHZyMl9oZHcgKix1bnNpZ25lZCBsb25nKTsKLXN0YXRpYyB2b2lkIHB2cjJfaGR3X3dvcmtlcl9pMmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyB2b2lkIHB2cjJfaGR3X3dvcmtlcl9wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgaW50IHB2cjJfaGR3X3dhaXQoc3RydWN0IHB2cjJfaGR3ICosaW50IHN0YXRlKTsKIHN0YXRpYyBpbnQgcHZyMl9oZHdfdW50cmlwX3VubG9ja2VkKHN0cnVjdCBwdnIyX2hkdyAqKTsKQEAgLTY0Miw3ICs2NzksNyBAQAogCXVuc2lnbmVkIGxvbmcgZnY7CiAJc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjcHRyLT5oZHc7CiAJaWYgKGhkdy0+dHVuZXJfc2lnbmFsX3N0YWxlKSB7Ci0JCXB2cjJfaTJjX2NvcmVfc3RhdHVzX3BvbGwoaGR3KTsKKwkJcHZyMl9oZHdfc3RhdHVzX3BvbGwoaGR3KTsKIAl9CiAJZnYgPSBoZHctPnR1bmVyX3NpZ25hbF9pbmZvLnJhbmdlaGlnaDsKIAlpZiAoIWZ2KSB7CkBAIC02NjQsNyArNzAxLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZ2OwogCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3B0ci0+aGR3OwogCWlmIChoZHctPnR1bmVyX3NpZ25hbF9zdGFsZSkgewotCQlwdnIyX2kyY19jb3JlX3N0YXR1c19wb2xsKGhkdyk7CisJCXB2cjJfaGR3X3N0YXR1c19wb2xsKGhkdyk7CiAJfQogCWZ2ID0gaGR3LT50dW5lcl9zaWduYWxfaW5mby5yYW5nZWxvdzsKIAlpZiAoIWZ2KSB7CkBAIC04NTgsNyArODk1LDcgQEAKIHN0YXRpYyBpbnQgY3RybF9zaWduYWxfZ2V0KHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsaW50ICp2cCkKIHsKIAlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGNwdHItPmhkdzsKLQlwdnIyX2kyY19jb3JlX3N0YXR1c19wb2xsKGhkdyk7CisJcHZyMl9oZHdfc3RhdHVzX3BvbGwoaGR3KTsKIAkqdnAgPSBoZHctPnR1bmVyX3NpZ25hbF9pbmZvLnNpZ25hbDsKIAlyZXR1cm4gMDsKIH0KQEAgLTg2OCw3ICs5MDUsNyBAQAogCWludCB2YWwgPSAwOwogCXVuc2lnbmVkIGludCBzdWJjaGFuOwogCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3B0ci0+aGR3OwotCXB2cjJfaTJjX2NvcmVfc3RhdHVzX3BvbGwoaGR3KTsKKwlwdnIyX2hkd19zdGF0dXNfcG9sbChoZHcpOwogCXN1YmNoYW4gPSBoZHctPnR1bmVyX3NpZ25hbF9pbmZvLnJ4c3ViY2hhbnM7CiAJaWYgKHN1YmNoYW4gJiBWNEwyX1RVTkVSX1NVQl9NT05PKSB7CiAJCXZhbCB8PSAoMSA8PCBWNEwyX1RVTkVSX01PREVfTU9OTyk7CkBAIC0xMjgzLDYgKzEzMjAsMTIgQEAKIH0KIAogCitjb25zdCBjaGFyICpwdnIyX2hkd19nZXRfZGV2aWNlX2lkZW50aWZpZXIoc3RydWN0IHB2cjJfaGR3ICpoZHcpCit7CisJcmV0dXJuIGhkdy0+aWRlbnRpZmllcjsKK30KKworCiB1bnNpZ25lZCBsb25nIHB2cjJfaGR3X2dldF9jdXJfZnJlcShzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKIHsKIAlyZXR1cm4gaGR3LT5mcmVxU2VsZWN0b3IgPyBoZHctPmZyZXFWYWxUZWxldmlzaW9uIDogaGR3LT5mcmVxVmFsUmFkaW87CkBAIC0xNjM0LDMzICsxNjc3LDI3IEBACiAKIHN0YXRpYyBpbnQgcHZyMl9kZWNvZGVyX2VuYWJsZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdyxpbnQgZW5hYmxlZmwpCiB7Ci0JaWYgKCFoZHctPmRlY29kZXJfY3RybCkgewotCQlpZiAoIWhkdy0+ZmxhZ19kZWNvZGVyX21pc3NlZCkgewotCQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCi0JCQkJICAgIldBUk5JTkc6IE5vIGRlY29kZXIgcHJlc2VudCIpOwotCQkJaGR3LT5mbGFnX2RlY29kZXJfbWlzc2VkID0gITA7Ci0JCQl0cmFjZV9zdGJpdCgiZmxhZ19kZWNvZGVyX21pc3NlZCIsCi0JCQkJICAgIGhkdy0+ZmxhZ19kZWNvZGVyX21pc3NlZCk7Ci0JCX0KLQkJcmV0dXJuIC1FSU87CisJLyogRXZlbiB0aG91Z2ggd2UgcmVhbGx5IG9ubHkgY2FyZSBhYm91dCB0aGUgdmlkZW8gZGVjb2RlciBjaGlwIGF0CisJICAgdGhpcyBwb2ludCwgd2UnbGwgYnJvYWRjYXN0IHN0cmVhbSBvbi9vZmYgdG8gYWxsIHN1Yi1kZXZpY2VzCisJICAgYW55d2F5LCBqdXN0IGluIGNhc2Ugc29tZWJvZHkgZWxzZSB3YW50cyB0byBoZWFyIHRoZQorCSAgIGNvbW1hbmQuLi4gKi8KKwlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgdjRsMiBzdHJlYW09JXMiLAorCQkgICAoZW5hYmxlZmwgPyAib24iIDogIm9mZiIpKTsKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwgdmlkZW8sIHNfc3RyZWFtLCBlbmFibGVmbCk7CisJaWYgKGhkdy0+ZGVjb2Rlcl9jbGllbnRfaWQpIHsKKwkJLyogV2UgZ2V0IGhlcmUgaWYgdGhlIGVuY29kZXIgaGFzIGJlZW4gbm90aWNlZC4gIE90aGVyd2lzZQorCQkgICB3ZSdsbCBpc3N1ZSBhIHdhcm5pbmcgdG8gdGhlIHVzZXIgKHdoaWNoIHNob3VsZAorCQkgICBub3JtYWxseSBuZXZlciBoYXBwZW4pLiAqLworCQlyZXR1cm4gMDsKIAl9Ci0JaGR3LT5kZWNvZGVyX2N0cmwtPmVuYWJsZShoZHctPmRlY29kZXJfY3RybC0+Y3R4dCxlbmFibGVmbCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotdm9pZCBwdnIyX2hkd19zZXRfZGVjb2RlcihzdHJ1Y3QgcHZyMl9oZHcgKmhkdyxzdHJ1Y3QgcHZyMl9kZWNvZGVyX2N0cmwgKnB0cikKLXsKLQlpZiAoaGR3LT5kZWNvZGVyX2N0cmwgPT0gcHRyKSByZXR1cm47Ci0JaGR3LT5kZWNvZGVyX2N0cmwgPSBwdHI7Ci0JaWYgKGhkdy0+ZGVjb2Rlcl9jdHJsICYmIGhkdy0+ZmxhZ19kZWNvZGVyX21pc3NlZCkgewotCQloZHctPmZsYWdfZGVjb2Rlcl9taXNzZWQgPSAwOworCWlmICghaGR3LT5mbGFnX2RlY29kZXJfbWlzc2VkKSB7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAorCQkJICAgIldBUk5JTkc6IE5vIGRlY29kZXIgcHJlc2VudCIpOworCQloZHctPmZsYWdfZGVjb2Rlcl9taXNzZWQgPSAhMDsKIAkJdHJhY2Vfc3RiaXQoImZsYWdfZGVjb2Rlcl9taXNzZWQiLAogCQkJICAgIGhkdy0+ZmxhZ19kZWNvZGVyX21pc3NlZCk7Ci0JCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAotCQkJICAgIkRlY29kZXIgaGFzIGFwcGVhcmVkIik7Ci0JCXB2cjJfaGR3X3N0YXRlX3NjaGVkKGhkdyk7CiAJfQorCXJldHVybiAtRUlPOwogfQogCiAKQEAgLTE5MjcsNiArMTk2NCwxNjYgQEAKIH0KIAogCitzdGF0aWMgdW5zaWduZWQgaW50IHB2cjJfY29weV9pMmNfYWRkcl9saXN0KAorCXVuc2lnbmVkIHNob3J0ICpkc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKKwl1bnNpZ25lZCBpbnQgZHN0X21heCkKK3sKKwl1bnNpZ25lZCBpbnQgY250ID0gMDsKKwlpZiAoIXNyYykgcmV0dXJuIDA7CisJd2hpbGUgKHNyY1tjbnRdICYmIChjbnQgKyAxKSA8IGRzdF9tYXgpIHsKKwkJZHN0W2NudF0gPSBzcmNbY250XTsKKwkJY250Kys7CisJfQorCWRzdFtjbnRdID0gSTJDX0NMSUVOVF9FTkQ7CisJcmV0dXJuIGNudDsKK30KKworCitzdGF0aWMgaW50IHB2cjJfaGR3X2xvYWRfc3ViZGV2KHN0cnVjdCBwdnIyX2hkdyAqaGR3LAorCQkJCWNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9jbGllbnRfZGVzYyAqY2QpCit7CisJY29uc3QgY2hhciAqZm5hbWU7CisJdW5zaWduZWQgY2hhciBtaWQ7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwl1bnNpZ25lZCBpbnQgaTJjY250OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CisJLyogQXJiaXRyYXJ5IGNvdW50IC0gbWF4ICMgaTJjIGFkZHJlc3NlcyB3ZSB3aWxsIHByb2JlICovCisJdW5zaWduZWQgc2hvcnQgaTJjYWRkclsyNV07CisKKwltaWQgPSBjZC0+bW9kdWxlX2lkOworCWZuYW1lID0gKG1pZCA8IEFSUkFZX1NJWkUobW9kdWxlX25hbWVzKSkgPyBtb2R1bGVfbmFtZXNbbWlkXSA6IE5VTEw7CisJaWYgKCFmbmFtZSkgeworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKKwkJCSAgICJNb2R1bGUgSUQgJXUgZm9yIGRldmljZSAlcyBoYXMgbm8gbmFtZSIsCisJCQkgICBtaWQsCisJCQkgICBoZHctPmhkd19kZXNjLT5kZXNjcmlwdGlvbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwKKwkJICAgIk1vZHVsZSBJRCAldSAoJXMpIGZvciBkZXZpY2UgJXMgYmVpbmcgbG9hZGVkLi4uIiwKKwkJICAgbWlkLCBmbmFtZSwKKwkJICAgaGR3LT5oZHdfZGVzYy0+ZGVzY3JpcHRpb24pOworCisJaTJjY250ID0gcHZyMl9jb3B5X2kyY19hZGRyX2xpc3QoaTJjYWRkciwgY2QtPmkyY19hZGRyZXNzX2xpc3QsCisJCQkJCSBBUlJBWV9TSVpFKGkyY2FkZHIpKTsKKwlpZiAoIWkyY2NudCAmJiAoKHAgPSAobWlkIDwgQVJSQVlfU0laRShtb2R1bGVfaTJjX2FkZHJlc3NlcykpID8KKwkJCSBtb2R1bGVfaTJjX2FkZHJlc3Nlc1ttaWRdIDogTlVMTCkgIT0gTlVMTCkpIHsKKwkJLyogU2Vjb25kIGNoYW5jZTogVHJ5IGRlZmF1bHQgaTJjIGFkZHJlc3MgbGlzdCAqLworCQlpMmNjbnQgPSBwdnIyX2NvcHlfaTJjX2FkZHJfbGlzdChpMmNhZGRyLCBwLAorCQkJCQkJIEFSUkFZX1NJWkUoaTJjYWRkcikpOworCQlpZiAoaTJjY250KSB7CisJCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwKKwkJCQkgICAiTW9kdWxlIElEICV1OiIKKwkJCQkgICAiIFVzaW5nIGRlZmF1bHQgaTJjIGFkZHJlc3MgbGlzdCIsCisJCQkJICAgbWlkKTsKKwkJfQorCX0KKworCWlmICghaTJjY250KSB7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAorCQkJICAgIk1vZHVsZSBJRCAldSAoJXMpIGZvciBkZXZpY2UgJXM6IgorCQkJICAgIiBObyBpMmMgYWRkcmVzc2VzIiwKKwkJCSAgIG1pZCwgZm5hbWUsIGhkdy0+aGR3X2Rlc2MtPmRlc2NyaXB0aW9uKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogTm90ZSBob3cgdGhlIDJuZCBhbmQgM3JkIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgZm9yIGJvdGgKKwkgKiB2NGwyX2kyY19uZXdfc3ViZGV2KCkgYW5kIHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCkuICBXaHk/CisJICogV2VsbCB0aGUgMm5kIGFyZ3VtZW50IGlzIHRoZSBtb2R1bGUgbmFtZSB0byBsb2FkLCB3aGlsZSB0aGUgM3JkCisJICogYXJndW1lbnQgaXMgZG9jdW1lbnRlZCBpbiB0aGUgZnJhbWV3b3JrIGFzIGJlaW5nIHRoZSAiY2hpcGlkIiAtCisJICogYW5kIGV2ZXJ5IG90aGVyIHBsYWNlIHdoZXJlIEkgY2FuIGZpbmQgZXhhbXBsZXMgb2YgdGhpcywgdGhlCisJICogImNoaXBpZCIgYXBwZWFycyB0byBqdXN0IGJlIHRoZSBtb2R1bGUgbmFtZSBhZ2Fpbi4gIFNvIGhlcmUgd2UKKwkgKiBqdXN0IGRvIHRoZSBzYW1lIHRoaW5nLiAqLworCWlmIChpMmNjbnQgPT0gMSkgeworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwKKwkJCSAgICJNb2R1bGUgSUQgJXU6IgorCQkJICAgIiBTZXR0aW5nIHVwIHdpdGggc3BlY2lmaWVkIGkyYyBhZGRyZXNzIDB4JXgiLAorCQkJICAgbWlkLCBpMmNhZGRyWzBdKTsKKwkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZoZHctPmkyY19hZGFwLAorCQkJCQkgZm5hbWUsIGZuYW1lLAorCQkJCQkgaTJjYWRkclswXSk7CisJfSBlbHNlIHsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsCisJCQkgICAiTW9kdWxlIElEICV1OiIKKwkJCSAgICIgU2V0dGluZyB1cCB3aXRoIGFkZHJlc3MgcHJvYmUgbGlzdCIsCisJCQkgICBtaWQpOworCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZoZHctPmkyY19hZGFwLAorCQkJCQkJZm5hbWUsIGZuYW1lLAorCQkJCQkJaTJjYWRkcik7CisJfQorCisJaWYgKCFzZCkgeworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKKwkJCSAgICJNb2R1bGUgSUQgJXUgKCVzKSBmb3IgZGV2aWNlICVzIGZhaWxlZCB0byBsb2FkIiwKKwkJCSAgIG1pZCwgZm5hbWUsIGhkdy0+aGR3X2Rlc2MtPmRlc2NyaXB0aW9uKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogVGFnIHRoaXMgc3ViLWRldmljZSBpbnN0YW5jZSB3aXRoIHRoZSBtb2R1bGUgSUQgd2Uga25vdyBhYm91dC4KKwkgICBJbiBvdGhlciBwbGFjZXMgd2UnbGwgdXNlIHRoYXQgdGFnIHRvIGRldGVybWluZSBpZiB0aGUgaW5zdGFuY2UKKwkgICByZXF1aXJlcyBzcGVjaWFsIGhhbmRsaW5nLiAqLworCXNkLT5ncnBfaWQgPSBtaWQ7CisKKwlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5GTywgIkF0dGFjaGVkIHN1Yi1kcml2ZXIgJXMiLCBmbmFtZSk7CisKKworCS8qIGNsaWVudC1zcGVjaWZpYyBzZXR1cC4uLiAqLworCXN3aXRjaCAobWlkKSB7CisJY2FzZSBQVlIyX0NMSUVOVF9JRF9DWDI1ODQwOgorCQloZHctPmRlY29kZXJfY2xpZW50X2lkID0gbWlkOworCQl7CisJCQkvKgorCQkJICBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+IDE5LU5vdi0yMDA2IC0gVGhpcworCQkJICBiaXQgb2YgbnV0dGluZXNzIGZvciBjeDI1ODQwIGNhdXNlcyB0aGF0IG1vZHVsZQorCQkJICB0byBjb3JyZWN0bHkgc2V0IHVwIGl0cyB2aWRlbyBzY2FsaW5nLiAgVGhpcyBpcworCQkJICByZWFsbHkgYSBwcm9ibGVtIGluIHRoZSBjeDI1ODQwIG1vZHVsZSBpdHNlbGYsCisJCQkgIGJ1dCB3ZSB3b3JrIGFyb3VuZCBpdCBoZXJlLiAgVGhlIHByb2JsZW0gaGFzIG5vdAorCQkJICBiZWVuIHNlZW4gaW4gaXZ0diBiZWNhdXNlIHRoZXJlIFZCSSBpcyBzdXBwb3J0ZWQKKwkJCSAgYW5kIHNldCB1cC4gIFdlIGRvbid0IGRvIFZCSSBoZXJlIChhdCBsZWFzdCBub3QKKwkJCSAgeWV0KSBhbmQgdGh1cyB3ZSBuZXZlciBhdHRlbXB0ZWQgdG8gZXZlbiBzZXQgaXQKKwkJCSAgdXAuCisJCQkqLworCQkJc3RydWN0IHY0bDJfZm9ybWF0IGZtdDsKKwkJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULAorCQkJCSAgICJNb2R1bGUgSUQgJXU6IgorCQkJCSAgICIgRXhlY3V0aW5nIGN4MjU4NDAgVkJJIGhhY2siLAorCQkJCSAgIG1pZCk7CisJCQltZW1zZXQoJmZtdCwgMCwgc2l6ZW9mKGZtdCkpOworCQkJZm10LnR5cGUgPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRTsKKwkJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCBtaWQsCisJCQkJCSAgICAgdmlkZW8sIHNfZm10LCAmZm10KTsKKwkJfQorCQlicmVhazsKKwljYXNlIFBWUjJfQ0xJRU5UX0lEX1NBQTcxMTU6CisJCWhkdy0+ZGVjb2Rlcl9jbGllbnRfaWQgPSBtaWQ7CisJCWJyZWFrOworCWRlZmF1bHQ6IGJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHB2cjJfaGR3X2xvYWRfbW9kdWxlcyhzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKK3sKKwl1bnNpZ25lZCBpbnQgaWR4OworCWNvbnN0IHN0cnVjdCBwdnIyX3N0cmluZ190YWJsZSAqY207CisJY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2NsaWVudF90YWJsZSAqY3Q7CisJaW50IG9rRmwgPSAhMDsKKworCWNtID0gJmhkdy0+aGR3X2Rlc2MtPmNsaWVudF9tb2R1bGVzOworCWZvciAoaWR4ID0gMDsgaWR4IDwgY20tPmNudDsgaWR4KyspIHsKKwkJcmVxdWVzdF9tb2R1bGUoY20tPmxzdFtpZHhdKTsKKwl9CisKKwljdCA9ICZoZHctPmhkd19kZXNjLT5jbGllbnRfdGFibGU7CisJZm9yIChpZHggPSAwOyBpZHggPCBjdC0+Y250OyBpZHgrKykgeworCQlpZiAocHZyMl9oZHdfbG9hZF9zdWJkZXYoaGR3LCAmY3QtPmxzdFtpZHhdKSA8IDApIG9rRmwgPSAwOworCX0KKwlpZiAoIW9rRmwpIHB2cjJfaGR3X3JlbmRlcl91c2VsZXNzKGhkdyk7Cit9CisKKwogc3RhdGljIHZvaWQgcHZyMl9oZHdfc2V0dXBfbG93KHN0cnVjdCBwdnIyX2hkdyAqaGR3KQogewogCWludCByZXQ7CkBAIC0xOTY2LDkgKzIxNjMsNyBAQAogCiAJaWYgKCFwdnIyX2hkd19kZXZfb2soaGR3KSkgcmV0dXJuOwogCi0JZm9yIChpZHggPSAwOyBpZHggPCBoZHctPmhkd19kZXNjLT5jbGllbnRfbW9kdWxlcy5jbnQ7IGlkeCsrKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKGhkdy0+aGR3X2Rlc2MtPmNsaWVudF9tb2R1bGVzLmxzdFtpZHhdKTsKLQl9CisJaGR3LT5mb3JjZV9kaXJ0eSA9ICEwOwogCiAJaWYgKCFoZHctPmhkd19kZXNjLT5mbGFnX25vX3Bvd2VydXApIHsKIAkJcHZyMl9oZHdfY21kX3Bvd2VydXAoaGR3KTsKQEAgLTE5ODcsNiArMjE4MiwxMSBAQAogCXB2cjJfaTJjX2NvcmVfaW5pdChoZHcpOwogCWlmICghcHZyMl9oZHdfZGV2X29rKGhkdykpIHJldHVybjsKIAorCXB2cjJfaGR3X2xvYWRfbW9kdWxlcyhoZHcpOworCWlmICghcHZyMl9oZHdfZGV2X29rKGhkdykpIHJldHVybjsKKworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLCBjb3JlLCBpbml0LCAwKTsKKwogCWZvciAoaWR4ID0gMDsgaWR4IDwgQ1RSTERFRl9DT1VOVDsgaWR4KyspIHsKIAkJY3B0ciA9IGhkdy0+Y29udHJvbHMgKyBpZHg7CiAJCWlmIChjcHRyLT5pbmZvLT5za2lwX2luaXQpIGNvbnRpbnVlOwpAQCAtMjAyNCw2ICsyMjI0LDE5IEBACiAJCWhkdy0+c3RkX21hc2tfZWVwcm9tID0gVjRMMl9TVERfQUxMOwogCX0KIAorCWlmIChoZHctPnNlcmlhbF9udW1iZXIpIHsKKwkJaWR4ID0gc2NucHJpbnRmKGhkdy0+aWRlbnRpZmllciwgc2l6ZW9mKGhkdy0+aWRlbnRpZmllcikgLSAxLAorCQkJCSJzbi0lbHUiLCBoZHctPnNlcmlhbF9udW1iZXIpOworCX0gZWxzZSBpZiAoaGR3LT51bml0X251bWJlciA+PSAwKSB7CisJCWlkeCA9IHNjbnByaW50ZihoZHctPmlkZW50aWZpZXIsIHNpemVvZihoZHctPmlkZW50aWZpZXIpIC0gMSwKKwkJCQkidW5pdC0lYyIsCisJCQkJaGR3LT51bml0X251bWJlciArICdhJyk7CisJfSBlbHNlIHsKKwkJaWR4ID0gc2NucHJpbnRmKGhkdy0+aWRlbnRpZmllciwgc2l6ZW9mKGhkdy0+aWRlbnRpZmllcikgLSAxLAorCQkJCSJ1bml0LT8/Iik7CisJfQorCWhkdy0+aWRlbnRpZmllcltpZHhdID0gMDsKKwogCXB2cjJfaGR3X3NldHVwX3N0ZChoZHcpOwogCiAJaWYgKCFnZXRfZGVmYXVsdF90dW5lcl90eXBlKGhkdykpIHsKQEAgLTIwMzIsOCArMjI0NSw2IEBACiAJCQkgICBoZHctPnR1bmVyX3R5cGUpOwogCX0KIAotCXB2cjJfaTJjX2NvcmVfY2hlY2tfc3RhbGUoaGR3KTsKLQloZHctPnR1bmVyX3VwZGF0ZWQgPSAwOwogCiAJaWYgKCFwdnIyX2hkd19kZXZfb2soaGR3KSkgcmV0dXJuOwogCkBAIC0yMTcxLDExICsyMzgyLDE0IEBACiAJc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBOVUxMOwogCWludCB2YWxpZF9zdGRfbWFzazsKIAlzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OwogCWNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9kZXNjICpoZHdfZGVzYzsKIAlfX3U4IGlmbnVtOwogCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxY3RybDsKIAlzdHJ1Y3QgcHZyMl9jdGxfaW5mbyAqY2lwdHI7CiAKKwl1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwogCWhkd19kZXNjID0gKGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9kZXNjICopKGRldmlkLT5kcml2ZXJfaW5mbyk7CiAKIAlpZiAoaGR3X2Rlc2MgPT0gTlVMTCkgewpAQCAtMjM2MCw2ICsyNTc0LDExIEBACiAJaGR3LT5jdGxfcmVhZF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsR0ZQX0tFUk5FTCk7CiAJaWYgKCFoZHctPmN0bF9yZWFkX3VyYikgZ290byBmYWlsOwogCisJaWYgKHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZ1c2JfZGV2LT5kZXYsICZoZHctPnY0bDJfZGV2KSAhPSAwKSB7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAorCQkJICAgIkVycm9yIHJlZ2lzdGVyaW5nIHdpdGggdjRsIGNvcmUsIGdpdmluZyB1cCIpOworCQlnb3RvIGZhaWw7CisJfQogCW11dGV4X2xvY2soJnB2cjJfdW5pdF9tdHgpOyBkbyB7CiAJCWZvciAoaWR4ID0gMDsgaWR4IDwgUFZSX05VTTsgaWR4KyspIHsKIAkJCWlmICh1bml0X3BvaW50ZXJzW2lkeF0pIGNvbnRpbnVlOwpAQCAtMjM4Miw3ICsyNjAxLDYgQEAKIAogCWhkdy0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoaGR3LT5uYW1lKTsKIAlJTklUX1dPUksoJmhkdy0+d29ya3BvbGwscHZyMl9oZHdfd29ya2VyX3BvbGwpOwotCUlOSVRfV09SSygmaGR3LT53b3JraTJjc3luYyxwdnIyX2hkd193b3JrZXJfaTJjKTsKIAogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULCJEcml2ZXIgdW5pdCBudW1iZXIgaXMgJWQsIG5hbWUgaXMgJXMiLAogCQkgICBoZHctPnVuaXRfbnVtYmVyLGhkdy0+bmFtZSk7CkBAIC0yMzkxLDEyICsyNjA5LDkgQEAKIAloZHctPmZsYWdfb2sgPSAhMDsKIAogCWhkdy0+dXNiX2ludGYgPSBpbnRmOwotCWhkdy0+dXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJaGR3LT51c2JfZGV2ID0gdXNiX2RldjsKIAotCXNjbnByaW50ZihoZHctPmJ1c19pbmZvLHNpemVvZihoZHctPmJ1c19pbmZvKSwKLQkJICAidXNiICVzIGFkZHJlc3MgJWQiLAotCQkgIGRldl9uYW1lKCZoZHctPnVzYl9kZXYtPmRldiksCi0JCSAgaGR3LT51c2JfZGV2LT5kZXZudW0pOworCXVzYl9tYWtlX3BhdGgoaGR3LT51c2JfZGV2LCBoZHctPmJ1c19pbmZvLCBzaXplb2YoaGR3LT5idXNfaW5mbykpOwogCiAJaWZudW0gPSBoZHctPnVzYl9pbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwogCXVzYl9zZXRfaW50ZXJmYWNlKGhkdy0+dXNiX2RldixpZm51bSwwKTsKQEAgLTI0NTQsNiArMjY2OSwxMCBAQAogCQloZHctPmN0bF93cml0ZV9idWZmZXIgPSBOVUxMOwogCX0KIAloZHctPmZsYWdfZGlzY29ubmVjdGVkID0gITA7CisJLyogSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlbiB0aGVyZSB3aWxsIGJlIGEgZGFuZ2xpbmcgc3RydWN0IGRldmljZQorCSAgIHJlZmVyZW5jZSB0byBvdXIgZGlzYXBwZWFyaW5nIGRldmljZSBwZXJzaXN0aW5nIGluc2lkZSB0aGUgVjRMCisJICAgY29yZS4uLiAqLworCXY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3QoJmhkdy0+djRsMl9kZXYpOwogCWhkdy0+dXNiX2RldiA9IE5VTEw7CiAJaGR3LT51c2JfaW50ZiA9IE5VTEw7CiAJcHZyMl9oZHdfcmVuZGVyX3VzZWxlc3MoaGR3KTsKQEAgLTI0ODEsMTAgKzI3MDAsOCBAQAogCQlwdnIyX3N0cmVhbV9kZXN0cm95KGhkdy0+dmlkX3N0cmVhbSk7CiAJCWhkdy0+dmlkX3N0cmVhbSA9IE5VTEw7CiAJfQotCWlmIChoZHctPmRlY29kZXJfY3RybCkgewotCQloZHctPmRlY29kZXJfY3RybC0+ZGV0YWNoKGhkdy0+ZGVjb2Rlcl9jdHJsLT5jdHh0KTsKLQl9CiAJcHZyMl9pMmNfY29yZV9kb25lKGhkdyk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmaGR3LT52NGwyX2Rldik7CiAJcHZyMl9oZHdfcmVtb3ZlX3VzYl9zdHVmZihoZHcpOwogCW11dGV4X2xvY2soJnB2cjJfdW5pdF9tdHgpOyBkbyB7CiAJCWlmICgoaGR3LT51bml0X251bWJlciA+PSAwKSAmJgpAQCAtMjY3OCw2ICsyODk1LDE1MCBAQAogfQogCiAKK3N0YXRpYyB2b2lkIHB2cjJfc3ViZGV2X3NldF9jb250cm9sKHN0cnVjdCBwdnIyX2hkdyAqaGR3LCBpbnQgaWQsCisJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWwpCit7CisJc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOworCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywgInN1YmRldiB2NGwyICVzPSVkIiwgbmFtZSwgdmFsKTsKKwltZW1zZXQoJmN0cmwsIDAsIHNpemVvZihjdHJsKSk7CisJY3RybC5pZCA9IGlkOworCWN0cmwudmFsdWUgPSB2YWw7CisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIDAsIGNvcmUsIHNfY3RybCwgJmN0cmwpOworfQorCisjZGVmaW5lIFBWUjJfU1VCREVWX1NFVF9DT05UUk9MKGhkdywgaWQsIGxhYikgXAorCWlmICgoaGR3KS0+bGFiIyNfZGlydHkgfHwgKGhkdyktPmZvcmNlX2RpcnR5KSB7CQlcCisJCXB2cjJfc3ViZGV2X3NldF9jb250cm9sKGhkdywgaWQsICNsYWIsIChoZHcpLT5sYWIjI192YWwpOyBcCisJfQorCisvKiBFeGVjdXRlIHdoYXRldmVyIGNvbW1hbmRzIGFyZSByZXF1aXJlZCB0byB1cGRhdGUgdGhlIHN0YXRlIG9mIGFsbCB0aGUKKyAgIHN1Yi1kZXZpY2VzIHNvIHRoYXQgdGhleSBtYXRjaCBvdXIgY3VycmVudCBjb250cm9sIHZhbHVlcy4gKi8KK3N0YXRpYyB2b2lkIHB2cjJfc3ViZGV2X3VwZGF0ZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCXVuc2lnbmVkIGludCBpZDsKKwlwdnIyX3N1YmRldl91cGRhdGVfZnVuYyBmcDsKKworCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywgInN1YmRldiB1cGRhdGUuLi4iKTsKKworCWlmIChoZHctPnR1bmVyX3VwZGF0ZWQgfHwgaGR3LT5mb3JjZV9kaXJ0eSkgeworCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgc2V0dXA7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywgInN1YmRldiB0dW5lciBzZXRfdHlwZSglZCkiLAorCQkJICAgaGR3LT50dW5lcl90eXBlKTsKKwkJaWYgKCgoaW50KShoZHctPnR1bmVyX3R5cGUpKSA+PSAwKSB7CisJCQlzZXR1cC5hZGRyID0gQUREUl9VTlNFVDsKKwkJCXNldHVwLnR5cGUgPSBoZHctPnR1bmVyX3R5cGU7CisJCQlzZXR1cC5tb2RlX21hc2sgPSBUX1JBRElPIHwgVF9BTkFMT0dfVFY7CisJCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwKKwkJCQkJICAgICB0dW5lciwgc190eXBlX2FkZHIsICZzZXR1cCk7CisJCX0KKwl9CisKKwlpZiAoaGR3LT5pbnB1dF9kaXJ0eSB8fCBoZHctPnN0ZF9kaXJ0eSB8fCBoZHctPmZvcmNlX2RpcnR5KSB7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywgInN1YmRldiB2NGwyIHNldF9zdGFuZGFyZCIpOworCQlpZiAoaGR3LT5pbnB1dF92YWwgPT0gUFZSMl9DVkFMX0lOUFVUX1JBRElPKSB7CisJCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwKKwkJCQkJICAgICB0dW5lciwgc19yYWRpbyk7CisJCX0gZWxzZSB7CisJCQl2NGwyX3N0ZF9pZCB2czsKKwkJCXZzID0gaGR3LT5zdGRfbWFza19jdXI7CisJCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwKKwkJCQkJICAgICB0dW5lciwgc19zdGQsIHZzKTsKKwkJfQorCQloZHctPnR1bmVyX3NpZ25hbF9zdGFsZSA9ICEwOworCQloZHctPmNyb3BjYXBfc3RhbGUgPSAhMDsKKwl9CisKKwlQVlIyX1NVQkRFVl9TRVRfQ09OVFJPTChoZHcsIFY0TDJfQ0lEX0JSSUdIVE5FU1MsIGJyaWdodG5lc3MpOworCVBWUjJfU1VCREVWX1NFVF9DT05UUk9MKGhkdywgVjRMMl9DSURfQ09OVFJBU1QsIGNvbnRyYXN0KTsKKwlQVlIyX1NVQkRFVl9TRVRfQ09OVFJPTChoZHcsIFY0TDJfQ0lEX1NBVFVSQVRJT04sIHNhdHVyYXRpb24pOworCVBWUjJfU1VCREVWX1NFVF9DT05UUk9MKGhkdywgVjRMMl9DSURfSFVFLCBodWUpOworCVBWUjJfU1VCREVWX1NFVF9DT05UUk9MKGhkdywgVjRMMl9DSURfQVVESU9fTVVURSwgbXV0ZSk7CisJUFZSMl9TVUJERVZfU0VUX0NPTlRST0woaGR3LCBWNEwyX0NJRF9BVURJT19WT0xVTUUsIHZvbHVtZSk7CisJUFZSMl9TVUJERVZfU0VUX0NPTlRST0woaGR3LCBWNEwyX0NJRF9BVURJT19CQUxBTkNFLCBiYWxhbmNlKTsKKwlQVlIyX1NVQkRFVl9TRVRfQ09OVFJPTChoZHcsIFY0TDJfQ0lEX0FVRElPX0JBU1MsIGJhc3MpOworCVBWUjJfU1VCREVWX1NFVF9DT05UUk9MKGhkdywgVjRMMl9DSURfQVVESU9fVFJFQkxFLCB0cmVibGUpOworCisJaWYgKGhkdy0+aW5wdXRfZGlydHkgfHwgaGR3LT5hdWRpb21vZGVfZGlydHkgfHwgaGR3LT5mb3JjZV9kaXJ0eSkgeworCQlzdHJ1Y3QgdjRsMl90dW5lciB2dDsKKwkJbWVtc2V0KCZ2dCwgMCwgc2l6ZW9mKHZ0KSk7CisJCXZ0LmF1ZG1vZGUgPSBoZHctPmF1ZGlvbW9kZV92YWw7CisJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLCB0dW5lciwgc190dW5lciwgJnZ0KTsKKwl9CisKKwlpZiAoaGR3LT5mcmVxRGlydHkgfHwgaGR3LT5mb3JjZV9kaXJ0eSkgeworCQl1bnNpZ25lZCBsb25nIGZ2OworCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgZnJlcTsKKwkJZnYgPSBwdnIyX2hkd19nZXRfY3VyX2ZyZXEoaGR3KTsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IHY0bDIgc2V0X2ZyZXEoJWx1KSIsIGZ2KTsKKwkJaWYgKGhkdy0+dHVuZXJfc2lnbmFsX3N0YWxlKSBwdnIyX2hkd19zdGF0dXNfcG9sbChoZHcpOworCQltZW1zZXQoJmZyZXEsIDAsIHNpemVvZihmcmVxKSk7CisJCWlmIChoZHctPnR1bmVyX3NpZ25hbF9pbmZvLmNhcGFiaWxpdHkgJiBWNEwyX1RVTkVSX0NBUF9MT1cpIHsKKwkJCS8qICgoZnYgKiAxMDAwKSAvIDYyNTAwKSAqLworCQkJZnJlcS5mcmVxdWVuY3kgPSAoZnYgKiAyKSAvIDEyNTsKKwkJfSBlbHNlIHsKKwkJCWZyZXEuZnJlcXVlbmN5ID0gZnYgLyA2MjUwMDsKKwkJfQorCQkvKiB0dW5lci1jb3JlIGN1cnJlbnRseSBkb2Vzbid0IHNlZW0gdG8gY2FyZSBhYm91dCB0aGlzLCBidXQKKwkJICAgbGV0J3Mgc2V0IGl0IGFueXdheSBmb3IgY29tcGxldGVuZXNzLiAqLworCQlpZiAoaGR3LT5pbnB1dF92YWwgPT0gUFZSMl9DVkFMX0lOUFVUX1JBRElPKSB7CisJCQlmcmVxLnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCQl9IGVsc2UgeworCQkJZnJlcS50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJCX0KKwkJZnJlcS50dW5lciA9IDA7CisJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLCB0dW5lciwKKwkJCQkgICAgIHNfZnJlcXVlbmN5LCAmZnJlcSk7CisJfQorCisJaWYgKGhkdy0+cmVzX2hvcl9kaXJ0eSB8fCBoZHctPnJlc192ZXJfZGlydHkgfHwgaGR3LT5mb3JjZV9kaXJ0eSkgeworCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10OworCQltZW1zZXQoJmZtdCwgMCwgc2l6ZW9mKGZtdCkpOworCQlmbXQudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJZm10LmZtdC5waXgud2lkdGggPSBoZHctPnJlc19ob3JfdmFsOworCQlmbXQuZm10LnBpeC5oZWlnaHQgPSBoZHctPnJlc192ZXJfdmFsOworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgdjRsMiBzZXRfc2l6ZSglZHglZCkiLAorCQkJICAgZm10LmZtdC5waXgud2lkdGgsIGZtdC5mbXQucGl4LmhlaWdodCk7CisJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLCB2aWRlbywgc19mbXQsICZmbXQpOworCX0KKworCWlmIChoZHctPnNyYXRlX2RpcnR5IHx8IGhkdy0+Zm9yY2VfZGlydHkpIHsKKwkJdTMyIHZhbDsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IHY0bDIgc2V0X2F1ZGlvICVkIiwKKwkJCSAgIGhkdy0+c3JhdGVfdmFsKTsKKwkJc3dpdGNoIChoZHctPnNyYXRlX3ZhbCkgeworCQlkZWZhdWx0OgorCQljYXNlIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ4MDAwOgorCQkJdmFsID0gNDgwMDA7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80NDEwMDoKKwkJCXZhbCA9IDQ0MTAwOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfMzIwMDA6CisJCQl2YWwgPSAzMjAwMDsKKwkJCWJyZWFrOworCQl9CisJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLAorCQkJCSAgICAgYXVkaW8sIHNfY2xvY2tfZnJlcSwgdmFsKTsKKwl9CisKKwkvKiBVbmFibGUgdG8gc2V0IGNyb3AgcGFyYW1ldGVyczsgdGhlcmUgaXMgYXBwYXJlbnRseSBubyBlcXVpdmFsZW50CisJICAgZm9yIFZJRElPQ19TX0NST1AgKi8KKworCXY0bDJfZGV2aWNlX2Zvcl9lYWNoX3N1YmRldihzZCwgJmhkdy0+djRsMl9kZXYpIHsKKwkJaWQgPSBzZC0+Z3JwX2lkOworCQlpZiAoaWQgPj0gQVJSQVlfU0laRShwdnIyX21vZHVsZV91cGRhdGVfZnVuY3Rpb25zKSkgY29udGludWU7CisJCWZwID0gcHZyMl9tb2R1bGVfdXBkYXRlX2Z1bmN0aW9uc1tpZF07CisJCWlmICghZnApIGNvbnRpbnVlOworCQkoKmZwKShoZHcsIHNkKTsKKwl9CisKKwlpZiAoaGR3LT50dW5lcl9zaWduYWxfc3RhbGUgfHwgaGR3LT5jcm9wY2FwX3N0YWxlKSB7CisJCXB2cjJfaGR3X3N0YXR1c19wb2xsKGhkdyk7CisJfQorfQorCisKIC8qIEZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byBjb21taXQgY29udHJvbCBjaGFuZ2VzLiAgSWYgc28sIG1hcmsgaW50ZXJuYWwKICAgIHN0YXRlIGZsYWdzIHRvIGluZGljYXRlIHRoaXMgZmFjdCBhbmQgcmV0dXJuIHRydWUuICBPdGhlcndpc2UgZG8gbm90aGluZwogICAgZWxzZSBhbmQgcmV0dXJuIGZhbHNlLiAqLwpAQCAtMjY4Niw3ICszMDQ3LDcgQEAKIAl1bnNpZ25lZCBpbnQgaWR4OwogCXN0cnVjdCBwdnIyX2N0cmwgKmNwdHI7CiAJaW50IHZhbHVlOwotCWludCBjb21taXRfZmxhZyA9IDA7CisJaW50IGNvbW1pdF9mbGFnID0gaGR3LT5mb3JjZV9kaXJ0eTsKIAljaGFyIGJ1ZlsxMDBdOwogCXVuc2lnbmVkIGludCBiY250LGNjbnQ7CiAKQEAgLTI4NDIsMTggKzMyMDMsNiBAQAogCQljeDIzNDF4X2V4dF9jdHJscygmaGR3LT5lbmNfY3RsX3N0YXRlLCAwLCAmY3MsVklESU9DX1NfRVhUX0NUUkxTKTsKIAl9CiAKLQkvKiBTY2FuIGkyYyBjb3JlIGF0IHRoaXMgcG9pbnQgLSBiZWZvcmUgd2UgY2xlYXIgYWxsIHRoZSBkaXJ0eQotCSAgIGJpdHMuICBWYXJpb3VzIHBhcnRzIG9mIHRoZSBpMmMgY29yZSB3aWxsIG5vdGljZSBkaXJ0eSBiaXRzIGFzCi0JICAgYXBwcm9wcmlhdGUgYW5kIGFycmFuZ2UgdG8gYnJvYWRjYXN0IG9yIGRpcmVjdGx5IHNlbmQgdXBkYXRlcyB0bwotCSAgIHRoZSBjbGllbnQgZHJpdmVycyBpbiBvcmRlciB0byBrZWVwIGV2ZXJ5dGhpbmcgaW4gc3luYyAqLwotCXB2cjJfaTJjX2NvcmVfY2hlY2tfc3RhbGUoaGR3KTsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgaGR3LT5jb250cm9sX2NudDsgaWR4KyspIHsKLQkJY3B0ciA9IGhkdy0+Y29udHJvbHMgKyBpZHg7Ci0JCWlmICghY3B0ci0+aW5mby0+Y2xlYXJfZGlydHkpIGNvbnRpbnVlOwotCQljcHRyLT5pbmZvLT5jbGVhcl9kaXJ0eShjcHRyKTsKLQl9Ci0KIAlpZiAoaGR3LT5hY3RpdmVfc3RyZWFtX3R5cGUgIT0gaGR3LT5kZXNpcmVkX3N0cmVhbV90eXBlKSB7CiAJCS8qIEhhbmRsZSBhbnkgc2lkZSBlZmZlY3RzIG9mIHN0cmVhbSBjb25maWcgaGVyZSAqLwogCQloZHctPmFjdGl2ZV9zdHJlYW1fdHlwZSA9IGhkdy0+ZGVzaXJlZF9zdHJlYW1fdHlwZTsKQEAgLTI4NzMsOCArMzIyMiwxNiBAQAogCQl9CiAJfQogCi0JLyogTm93IGV4ZWN1dGUgaTJjIGNvcmUgdXBkYXRlICovCi0JcHZyMl9pMmNfY29yZV9zeW5jKGhkdyk7CisJLyogQ2hlY2sgYW5kIHVwZGF0ZSBzdGF0ZSBmb3IgYWxsIHN1Yi1kZXZpY2VzLiAqLworCXB2cjJfc3ViZGV2X3VwZGF0ZShoZHcpOworCisJaGR3LT50dW5lcl91cGRhdGVkID0gMDsKKwloZHctPmZvcmNlX2RpcnR5ID0gMDsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGhkdy0+Y29udHJvbF9jbnQ7IGlkeCsrKSB7CisJCWNwdHIgPSBoZHctPmNvbnRyb2xzICsgaWR4OworCQlpZiAoIWNwdHItPmluZm8tPmNsZWFyX2RpcnR5KSBjb250aW51ZTsKKwkJY3B0ci0+aW5mby0+Y2xlYXJfZGlydHkoY3B0cik7CisJfQogCiAJaWYgKChoZHctPnBhdGh3YXlfc3RhdGUgPT0gUFZSMl9QQVRIV0FZX0FOQUxPRykgJiYKIAkgICAgaGR3LT5zdGF0ZV9lbmNvZGVyX3J1bikgewpAQCAtMjkwNCwxNSArMzI2MSw2IEBACiB9CiAKIAotc3RhdGljIHZvaWQgcHZyMl9oZHdfd29ya2VyX2kyYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjb250YWluZXJfb2Yod29yayxzdHJ1Y3QgcHZyMl9oZHcsd29ya2kyY3N5bmMpOwotCUxPQ0tfVEFLRShoZHctPmJpZ19sb2NrKTsgZG8gewotCQlwdnIyX2kyY19jb3JlX3N5bmMoaGR3KTsKLQl9IHdoaWxlICgwKTsgTE9DS19HSVZFKGhkdy0+YmlnX2xvY2spOwotfQotCi0KIHN0YXRpYyB2b2lkIHB2cjJfaGR3X3dvcmtlcl9wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlpbnQgZmwgPSAwOwpAQCAtMjk3Myw3ICszMzIxLDcgQEAKIHZvaWQgcHZyMl9oZHdfZXhlY3V0ZV90dW5lcl9wb2xsKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQogewogCUxPQ0tfVEFLRShoZHctPmJpZ19sb2NrKTsgZG8gewotCQlwdnIyX2kyY19jb3JlX3N0YXR1c19wb2xsKGhkdyk7CisJCXB2cjJfaGR3X3N0YXR1c19wb2xsKGhkdyk7CiAJfSB3aGlsZSAoMCk7IExPQ0tfR0lWRShoZHctPmJpZ19sb2NrKTsKIH0KIApAQCAtMjk4Myw3ICszMzMxLDcgQEAKIAlpZiAoIWhkdy0+Y3JvcGNhcF9zdGFsZSkgewogCQlyZXR1cm4gMDsKIAl9Ci0JcHZyMl9pMmNfY29yZV9zdGF0dXNfcG9sbChoZHcpOworCXB2cjJfaGR3X3N0YXR1c19wb2xsKGhkdyk7CiAJaWYgKGhkdy0+Y3JvcGNhcF9zdGFsZSkgewogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0zMDEwLDcgKzMzNTgsNyBAQAogewogCUxPQ0tfVEFLRShoZHctPmJpZ19sb2NrKTsgZG8gewogCQlpZiAoaGR3LT50dW5lcl9zaWduYWxfc3RhbGUpIHsKLQkJCXB2cjJfaTJjX2NvcmVfc3RhdHVzX3BvbGwoaGR3KTsKKwkJCXB2cjJfaGR3X3N0YXR1c19wb2xsKGhkdyk7CiAJCX0KIAkJbWVtY3B5KHZ0cCwmaGR3LT50dW5lcl9zaWduYWxfaW5mbyxzaXplb2Yoc3RydWN0IHY0bDJfdHVuZXIpKTsKIAl9IHdoaWxlICgwKTsgTE9DS19HSVZFKGhkdy0+YmlnX2xvY2spOwpAQCAtMzAyOSwxMSArMzM3Nyw4IEBACiB7CiAJaW50IG5yID0gcHZyMl9oZHdfZ2V0X3VuaXRfbnVtYmVyKGhkdyk7CiAJTE9DS19UQUtFKGhkdy0+YmlnX2xvY2spOyBkbyB7Ci0JCWhkdy0+bG9nX3JlcXVlc3RlZCA9ICEwOwogCQlwcmludGsoS0VSTl9JTkZPICJwdnJ1c2IyOiA9PT09PT09PT09PT09PT09PSAgU1RBUlQgU1RBVFVTIENBUkQgIyVkICA9PT09PT09PT09PT09PT09PVxuIiwgbnIpOwotCQlwdnIyX2kyY19jb3JlX2NoZWNrX3N0YWxlKGhkdyk7Ci0JCWhkdy0+bG9nX3JlcXVlc3RlZCA9IDA7Ci0JCXB2cjJfaTJjX2NvcmVfc3luYyhoZHcpOworCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwgY29yZSwgbG9nX3N0YXR1cyk7CiAJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTkZPLCJjeDIzNDF4IGNvbmZpZzoiKTsKIAkJY3gyMzQxeF9sb2dfc3RhdHVzKCZoZHctPmVuY19jdGxfc3RhdGUsICJwdnJ1c2IyIik7CiAJCXB2cjJfaGR3X3N0YXRlX2xvZ19zdGF0ZShoZHcpOwpAQCAtMzcxNiwyMiArNDA2MSwxNiBAQAogCiBpbnQgcHZyMl9oZHdfY21kX2RlY29kZXJfcmVzZXQoc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7Ci0JaWYgKCFoZHctPmRlY29kZXJfY3RybCkgewotCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwKLQkJCSAgICJVbmFibGUgdG8gcmVzZXQgZGVjb2Rlcjogbm90aGluZyBhdHRhY2hlZCIpOwotCQlyZXR1cm4gLUVOT1RUWTsKLQl9Ci0KLQlpZiAoIWhkdy0+ZGVjb2Rlcl9jdHJsLT5mb3JjZV9yZXNldCkgewotCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwKLQkJCSAgICJVbmFibGUgdG8gcmVzZXQgZGVjb2Rlcjogbm90IGltcGxlbWVudGVkIik7Ci0JCXJldHVybiAtRU5PVFRZOwotCX0KLQogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULAogCQkgICAiUmVxdWVzdGluZyBkZWNvZGVyIHJlc2V0Iik7Ci0JaGR3LT5kZWNvZGVyX2N0cmwtPmZvcmNlX3Jlc2V0KGhkdy0+ZGVjb2Rlcl9jdHJsLT5jdHh0KTsKLQlyZXR1cm4gMDsKKwlpZiAoaGR3LT5kZWNvZGVyX2NsaWVudF9pZCkgeworCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgaGR3LT5kZWNvZGVyX2NsaWVudF9pZCwKKwkJCQkgICAgIGNvcmUsIHJlc2V0LCAwKTsKKwkJcmV0dXJuIDA7CisJfQorCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULAorCQkgICAiVW5hYmxlIHRvIHJlc2V0IGRlY29kZXI6IG5vdGhpbmcgYXR0YWNoZWQiKTsKKwlyZXR1cm4gLUVOT1RUWTsKIH0KIAogCkBAIC00NDc2LDYgKzQ4MTUsNzkgQEAKIH0KIAogCisvKiBHZW5lcmF0ZSByZXBvcnQgY29udGFpbmluZyBpbmZvIGFib3V0IGF0dGFjaGVkIHN1Yi1kZXZpY2VzIGFuZCBhdHRhY2hlZAorICAgaTJjIGNsaWVudHMsIGluY2x1ZGluZyBhbiBpbmRpY2F0aW9uIG9mIHdoaWNoIGF0dGFjaGVkIGkyYyBjbGllbnRzIGFyZQorICAgYWN0dWFsbHkgc3ViLWRldmljZXMuICovCitzdGF0aWMgdW5zaWduZWQgaW50IHB2cjJfaGR3X3JlcG9ydF9jbGllbnRzKHN0cnVjdCBwdnIyX2hkdyAqaGR3LAorCQkJCQkgICAgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgYWNudCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCXVuc2lnbmVkIGludCB0Y250ID0gMDsKKwl1bnNpZ25lZCBpbnQgY2NudDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBsaXN0X2hlYWQgKml0ZW07CisJdm9pZCAqY2Q7CisJY29uc3QgY2hhciAqcDsKKwl1bnNpZ25lZCBpbnQgaWQ7CisKKwljY250ID0gc2NucHJpbnRmKGJ1ZiwgYWNudCwgIkFzc29jaWF0ZWQgdjRsMi1zdWJkZXYgZHJpdmVyczoiKTsKKwl0Y250ICs9IGNjbnQ7CisJdjRsMl9kZXZpY2VfZm9yX2VhY2hfc3ViZGV2KHNkLCAmaGR3LT52NGwyX2RldikgeworCQlpZCA9IHNkLT5ncnBfaWQ7CisJCXAgPSBOVUxMOworCQlpZiAoaWQgPCBBUlJBWV9TSVpFKG1vZHVsZV9uYW1lcykpIHAgPSBtb2R1bGVfbmFtZXNbaWRdOworCQlpZiAocCkgeworCQkJY2NudCA9IHNjbnByaW50ZihidWYgKyB0Y250LCBhY250IC0gdGNudCwgIiAlcyIsIHApOworCQkJdGNudCArPSBjY250OworCQl9IGVsc2UgeworCQkJY2NudCA9IHNjbnByaW50ZihidWYgKyB0Y250LCBhY250IC0gdGNudCwKKwkJCQkJICIgKHVua25vd24gaWQ9JXUpIiwgaWQpOworCQkJdGNudCArPSBjY250OworCQl9CisJfQorCWNjbnQgPSBzY25wcmludGYoYnVmICsgdGNudCwgYWNudCAtIHRjbnQsICJcbiIpOworCXRjbnQgKz0gY2NudDsKKworCWNjbnQgPSBzY25wcmludGYoYnVmICsgdGNudCwgYWNudCAtIHRjbnQsICJJMkMgY2xpZW50czpcbiIpOworCXRjbnQgKz0gY2NudDsKKworCW11dGV4X2xvY2soJmhkdy0+aTJjX2FkYXAuY2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaChpdGVtLCAmaGR3LT5pMmNfYWRhcC5jbGllbnRzKSB7CisJCWNsaWVudCA9IGxpc3RfZW50cnkoaXRlbSwgc3RydWN0IGkyY19jbGllbnQsIGxpc3QpOworCQljY250ID0gc2NucHJpbnRmKGJ1ZiArIHRjbnQsIGFjbnQgLSB0Y250LAorCQkJCSAiICAlczogaTJjPSUwMngiLCBjbGllbnQtPm5hbWUsIGNsaWVudC0+YWRkcik7CisJCXRjbnQgKz0gY2NudDsKKwkJY2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwkJdjRsMl9kZXZpY2VfZm9yX2VhY2hfc3ViZGV2KHNkLCAmaGR3LT52NGwyX2RldikgeworCQkJaWYgKGNkID09IHNkKSB7CisJCQkJaWQgPSBzZC0+Z3JwX2lkOworCQkJCXAgPSBOVUxMOworCQkJCWlmIChpZCA8IEFSUkFZX1NJWkUobW9kdWxlX25hbWVzKSkgeworCQkJCQlwID0gbW9kdWxlX25hbWVzW2lkXTsKKwkJCQl9CisJCQkJaWYgKHApIHsKKwkJCQkJY2NudCA9IHNjbnByaW50ZihidWYgKyB0Y250LAorCQkJCQkJCSBhY250IC0gdGNudCwKKwkJCQkJCQkgIiBzdWJkZXY9JXMiLCBwKTsKKwkJCQkJdGNudCArPSBjY250OworCQkJCX0gZWxzZSB7CisJCQkJCWNjbnQgPSBzY25wcmludGYoYnVmICsgdGNudCwKKwkJCQkJCQkgYWNudCAtIHRjbnQsCisJCQkJCQkJICIgc3ViZGV2PSBpZCAldSkiLAorCQkJCQkJCSBpZCk7CisJCQkJCXRjbnQgKz0gY2NudDsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJY2NudCA9IHNjbnByaW50ZihidWYgKyB0Y250LCBhY250IC0gdGNudCwgIlxuIik7CisJCXRjbnQgKz0gY2NudDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZoZHctPmkyY19hZGFwLmNsaXN0X2xvY2spOworCXJldHVybiB0Y250OworfQorCisKIHVuc2lnbmVkIGludCBwdnIyX2hkd19zdGF0ZV9yZXBvcnQoc3RydWN0IHB2cjJfaGR3ICpoZHcsCiAJCQkJICAgY2hhciAqYnVmLHVuc2lnbmVkIGludCBhY250KQogewpAQCAtNDQ5MCw2ICs0OTAyLDggQEAKIAkJYnVmWzBdID0gJ1xuJzsgY2NudCA9IDE7CiAJCWJjbnQgKz0gY2NudDsgYWNudCAtPSBjY250OyBidWYgKz0gY2NudDsKIAl9CisJY2NudCA9IHB2cjJfaGR3X3JlcG9ydF9jbGllbnRzKGhkdywgYnVmLCBhY250KTsKKwliY250ICs9IGNjbnQ7IGFjbnQgLT0gY2NudDsgYnVmICs9IGNjbnQ7CiAJTE9DS19HSVZFKGhkdy0+YmlnX2xvY2spOwogCXJldHVybiBiY250OwogfQpAQCAtNDQ5NywxNCArNDkxMSwyNSBAQAogCiBzdGF0aWMgdm9pZCBwdnIyX2hkd19zdGF0ZV9sb2dfc3RhdGUoc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7Ci0JY2hhciBidWZbMTI4XTsKLQl1bnNpZ25lZCBpbnQgaWR4LGNjbnQ7CisJY2hhciBidWZbMjU2XTsKKwl1bnNpZ25lZCBpbnQgaWR4LCBjY250OworCXVuc2lnbmVkIGludCBsY250LCB1Y250OwogCiAJZm9yIChpZHggPSAwOyA7IGlkeCsrKSB7CiAJCWNjbnQgPSBwdnIyX2hkd19yZXBvcnRfdW5sb2NrZWQoaGR3LGlkeCxidWYsc2l6ZW9mKGJ1ZikpOwogCQlpZiAoIWNjbnQpIGJyZWFrOwogCQlwcmludGsoS0VSTl9JTkZPICIlcyAlLipzXG4iLGhkdy0+bmFtZSxjY250LGJ1Zik7CiAJfQorCWNjbnQgPSBwdnIyX2hkd19yZXBvcnRfY2xpZW50cyhoZHcsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCXVjbnQgPSAwOworCXdoaWxlICh1Y250IDwgY2NudCkgeworCQlsY250ID0gMDsKKwkJd2hpbGUgKChsY250ICsgdWNudCA8IGNjbnQpICYmIChidWZbbGNudCArIHVjbnRdICE9ICdcbicpKSB7CisJCQlsY250Kys7CisJCX0KKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJS4qc1xuIiwgaGR3LT5uYW1lLCBsY250LCBidWYgKyB1Y250KTsKKwkJdWNudCArPSBsY250ICsgMTsKKwl9CiB9CiAKIApAQCAtNDY0MSw2ICs1MDY2LDMwIEBACiB9CiAKIAordm9pZCBwdnIyX2hkd19zdGF0dXNfcG9sbChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKK3sKKwlzdHJ1Y3QgdjRsMl90dW5lciAqdnRwID0gJmhkdy0+dHVuZXJfc2lnbmFsX2luZm87CisJbWVtc2V0KHZ0cCwgMCwgc2l6ZW9mKCp2dHApKTsKKwloZHctPnR1bmVyX3NpZ25hbF9zdGFsZSA9IDA7CisJLyogTm90ZTogVGhlcmUgYXBwYXJlbnRseSBpcyBubyByZXBsYWNlbWVudCBmb3IgVklESU9DX0NST1BDQVAKKwkgICB1c2luZyB2NGwyLXN1YmRldiAtIHRoZXJlZm9yZSB3ZSBjYW4ndCBzdXBwb3J0IHRoYXQgQVQgQUxMIHJpZ2h0CisJICAgbm93LiAgKE9mIGNvdXJzZSwgbm8gc3ViLWRyaXZlcnMgc2VlbSB0byBpbXBsZW1lbnQgaXQgZWl0aGVyLgorCSAgIEJ1dCBub3cgaXQncyBhIGEgY2hpY2tlbiBhbmQgZWdnIHByb2JsZW0uLi4pICovCisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIDAsIHR1bmVyLCBnX3R1bmVyLAorCQkJICAgICAmaGR3LT50dW5lcl9zaWduYWxfaW5mbyk7CisJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IHN0YXR1cyBwb2xsIgorCQkgICAiIHR5cGU9JXUgc3RyZW5ndGg9JXUgYXVkaW89MHgleCBjYXA9MHgleCIKKwkJICAgIiBsb3c9JXUgaGk9JXUiLAorCQkgICB2dHAtPnR5cGUsCisJCSAgIHZ0cC0+c2lnbmFsLCB2dHAtPnJ4c3ViY2hhbnMsIHZ0cC0+Y2FwYWJpbGl0eSwKKwkJICAgdnRwLT5yYW5nZWxvdywgdnRwLT5yYW5nZWhpZ2gpOworCisJLyogV2UgaGF2ZSB0byBkbyB0aGlzIHRvIGF2b2lkIGdldHRpbmcgaW50byBjb25zdGFudCBwb2xsaW5nIGlmCisJICAgdGhlcmUncyBub2JvZHkgdG8gYW5zd2VyIGEgcG9sbCBvZiBjcm9wY2FwIGluZm8uICovCisJaGR3LT5jcm9wY2FwX3N0YWxlID0gMDsKK30KKworCiB1bnNpZ25lZCBpbnQgcHZyMl9oZHdfZ2V0X2lucHV0X2F2YWlsYWJsZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKIHsKIAlyZXR1cm4gaGR3LT5pbnB1dF9hdmFpbF9tYXNrOwpAQCAtNDczNiw3ICs1MTg1LDYgQEAKIAkJCSAgICAgaW50IHNldEZsLCB1NjQgKnZhbF9wdHIpCiB7CiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotCXN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwOwogCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciByZXE7CiAJaW50IHN0YXQgPSAwOwogCWludCBva0ZsID0gMDsKQEAgLTQ3NDYsMjEgKzUxOTQsOSBAQAogCXJlcS5tYXRjaCA9ICptYXRjaDsKIAlyZXEucmVnID0gcmVnX2lkOwogCWlmIChzZXRGbCkgcmVxLnZhbCA9ICp2YWxfcHRyOwotCW11dGV4X2xvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7IGRvIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjcCwgJmhkdy0+aTJjX2NsaWVudHMsIGxpc3QpIHsKLQkJCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoCi0JCQkJICAgIGNwLT5jbGllbnQsCi0JCQkJICAgICZyZXEubWF0Y2gpKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlzdGF0ID0gcHZyMl9pMmNfY2xpZW50X2NtZCgKLQkJCQljcCwoc2V0RmwgPyBWSURJT0NfREJHX1NfUkVHSVNURVIgOgotCQkJCSAgICBWSURJT0NfREJHX0dfUkVHSVNURVIpLCZyZXEpOwotCQkJaWYgKCFzZXRGbCkgKnZhbF9wdHIgPSByZXEudmFsOwotCQkJb2tGbCA9ICEwOwotCQkJYnJlYWs7Ci0JCX0KLQl9IHdoaWxlICgwKTsgbXV0ZXhfdW5sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOworCS8qIEl0IHdvdWxkIGJlIG5pY2UgdG8ga25vdyBpZiBhIHN1Yi1kZXZpY2UgYW5zd2VyZWQgdGhlIHJlcXVlc3QgKi8KKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwgY29yZSwgZ19yZWdpc3RlciwgJnJlcSk7CisJaWYgKCFzZXRGbCkgKnZhbF9wdHIgPSByZXEudmFsOwogCWlmIChva0ZsKSB7CiAJCXJldHVybiBzdGF0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKaW5kZXggMWI0ZmVjMy4uN2I2OTQwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKQEAgLTEzMiw2ICsxMzIsOSBAQAogLyogUmV0cmlldmUgYnVzIGxvY2F0aW9uIGluZm8gb2YgZGV2aWNlICovCiBjb25zdCBjaGFyICpwdnIyX2hkd19nZXRfYnVzX2luZm8oc3RydWN0IHB2cjJfaGR3ICopOwogCisvKiBSZXRyaWV2ZSBwZXItaW5zdGFuY2Ugc3RyaW5nIGlkZW50aWZpZXIgZm9yIHRoaXMgc3BlY2lmaWMgZGV2aWNlICovCitjb25zdCBjaGFyICpwdnIyX2hkd19nZXRfZGV2aWNlX2lkZW50aWZpZXIoc3RydWN0IHB2cjJfaGR3ICopOworCiAvKiBDYWxsZWQgd2hlbiBoYXJkd2FyZSBoYXMgYmVlbiB1bnBsdWdnZWQgKi8KIHZvaWQgcHZyMl9oZHdfZGlzY29ubmVjdChzdHJ1Y3QgcHZyMl9oZHcgKik7CiAKQEAgLTIzNiw4ICsyMzksNyBAQAogCQkJCSAgICAgZW51bSBwdnIyX3Y0bF90eXBlIGluZGV4LGludCk7CiAKIC8qIERpcmVjdCByZWFkL3dyaXRlIGFjY2VzcyB0byBjaGlwJ3MgcmVnaXN0ZXJzOgotICAgbWF0Y2hfdHlwZSAtIGhvdyB0byBpbnRlcnByZXQgbWF0Y2hfY2hpcCAoZS5nLiBkcml2ZXIgSUQsIGkyYyBhZGRyZXNzKQotICAgbWF0Y2hfY2hpcCAtIGNoaXAgbWF0Y2ggdmFsdWUgKGUuZy4gSTJDX0RSSVZFUkRfeHh4eCkKKyAgIG1hdGNoIC0gc3BlY2lmeSBjcml0ZXJpYSB0byBpZGVudGlmeSB0YXJnZXQgY2hpcCAodGhpcyBpcyBhIHY0bCBkYmcgc3RydWN0KQogICAgcmVnX2lkICAtIHJlZ2lzdGVyIG51bWJlciB0byBhY2Nlc3MKICAgIHNldEZsICAgLSB0cnVlIHRvIHNldCB0aGUgcmVnaXN0ZXIsIGZhbHNlIHRvIHJlYWQgaXQKICAgIHZhbF9wdHIgLSBzdG9yYWdlIGxvY2F0aW9uIGZvciBzb3VyY2UgLyByZXN1bHQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY2hpcHMtdjRsMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNoaXBzLXY0bDIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRhNDc3MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY2hpcHMtdjRsMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gKgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSAicHZydXNiMi1pMmMtY29yZS5oIgotI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCi0jaW5jbHVkZSAicHZydXNiMi1kZWJ1Zy5oIgotI2luY2x1ZGUgInB2cnVzYjItaTJjLWNtZC12NGwyLmgiCi0jaW5jbHVkZSAicHZydXNiMi1hdWRpby5oIgotI2luY2x1ZGUgInB2cnVzYjItdHVuZXIuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLXZpZGVvLXY0bC5oIgotI2luY2x1ZGUgInB2cnVzYjItY3gyNTg0eC12NGwuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLXdtODc3NS5oIgotCi0jZGVmaW5lIHRyYWNlX2kyYyguLi4pIHB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JMkMsX19WQV9BUkdTX18pCi0KLSNkZWZpbmUgT1BfU1RBTkRBUkQgMAotI2RlZmluZSBPUF9BVURJT01PREUgMQotI2RlZmluZSBPUF9CQ1NIIDIKLSNkZWZpbmUgT1BfVk9MVU1FIDMKLSNkZWZpbmUgT1BfRlJFUSA0Ci0jZGVmaW5lIE9QX0FVRElPUkFURSA1Ci0jZGVmaW5lIE9QX0NST1AgNgotI2RlZmluZSBPUF9TSVpFIDcKLSNkZWZpbmUgT1BfTE9HIDgKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCAqIGNvbnN0IG9wc1tdID0gewotCVtPUF9TVEFOREFSRF0gPSAmcHZyMl9pMmNfb3BfdjRsMl9zdGFuZGFyZCwKLQlbT1BfQVVESU9NT0RFXSA9ICZwdnIyX2kyY19vcF92NGwyX2F1ZGlvbW9kZSwKLQlbT1BfQkNTSF0gPSAmcHZyMl9pMmNfb3BfdjRsMl9iY3NoLAotCVtPUF9WT0xVTUVdID0gJnB2cjJfaTJjX29wX3Y0bDJfdm9sdW1lLAotCVtPUF9GUkVRXSA9ICZwdnIyX2kyY19vcF92NGwyX2ZyZXF1ZW5jeSwKLQlbT1BfQ1JPUF0gPSAmcHZyMl9pMmNfb3BfdjRsMl9jcm9wLAotCVtPUF9TSVpFXSA9ICZwdnIyX2kyY19vcF92NGwyX3NpemUsCi0JW09QX0xPR10gPSAmcHZyMl9pMmNfb3BfdjRsMl9sb2csCi19OwotCi12b2lkIHB2cjJfaTJjX3Byb2JlKHN0cnVjdCBwdnIyX2hkdyAqaGR3LHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwKQotewotCWludCBpZDsKLQlpZCA9IGNwLT5jbGllbnQtPmRyaXZlci0+aWQ7Ci0JY3AtPmN0bF9tYXNrID0gKCgxIDw8IE9QX1NUQU5EQVJEKSB8Ci0JCQkoMSA8PCBPUF9BVURJT01PREUpIHwKLQkJCSgxIDw8IE9QX0JDU0gpIHwKLQkJCSgxIDw8IE9QX1ZPTFVNRSkgfAotCQkJKDEgPDwgT1BfRlJFUSkgfAotCQkJKDEgPDwgT1BfQ1JPUCkgfAotCQkJKDEgPDwgT1BfU0laRSkgfAotCQkJKDEgPDwgT1BfTE9HKSk7Ci0JY3AtPnN0YXR1c19wb2xsID0gcHZyMl92NGwyX2NtZF9zdGF0dXNfcG9sbDsKLQotCWlmIChpZCA9PSBJMkNfRFJJVkVSSURfTVNQMzQwMCkgewotCQlpZiAocHZyMl9pMmNfbXNwMzQwMF9zZXR1cChoZHcsY3ApKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0JaWYgKGlkID09IEkyQ19EUklWRVJJRF9UVU5FUikgewotCQlpZiAocHZyMl9pMmNfdHVuZXJfc2V0dXAoaGR3LGNwKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JfQotCWlmIChpZCA9PSBJMkNfRFJJVkVSSURfQ1gyNTg0MCkgewotCQlpZiAocHZyMl9pMmNfY3gyNTg0eF92NGxfc2V0dXAoaGR3LGNwKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JfQotCWlmIChpZCA9PSBJMkNfRFJJVkVSSURfV004Nzc1KSB7Ci0JCWlmIChwdnIyX2kyY193bTg3NzVfc2V0dXAoaGR3LGNwKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JfQotCWlmIChpZCA9PSBJMkNfRFJJVkVSSURfU0FBNzExWCkgewotCQlpZiAocHZyMl9pMmNfZGVjb2Rlcl92NGxfc2V0dXAoaGR3LGNwKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JfQotfQotCi0KLWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCAqcHZyMl9pMmNfZ2V0X29wKHVuc2lnbmVkIGludCBpZHgpCi17Ci0JaWYgKGlkeCA+PSBBUlJBWV9TSVpFKG9wcykpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiBvcHNbaWR4XTsKLX0KLQotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzUgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY21kLXY0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmJiMTE5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzIyICswLDAgQEAKLS8qCi0gKgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgotICogIENvcHlyaWdodCAoQykgMjAwNCBBdXJlbGllbiBBbGxlYXVtZSA8c2x0c0BmcmVlLmZyPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY21kLXY0bDIuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgotI2luY2x1ZGUgInB2cnVzYjItZGVidWcuaCIKLSNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotCi1zdGF0aWMgdm9pZCBzZXRfc3RhbmRhcmQoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgdjRsMiBzZXRfc3RhbmRhcmQiKTsKLQotCWlmIChoZHctPmlucHV0X3ZhbCA9PSBQVlIyX0NWQUxfSU5QVVRfUkFESU8pIHsKLQkJcHZyMl9pMmNfY29yZV9jbWQoaGR3LEFVRENfU0VUX1JBRElPLE5VTEwpOwotCX0gZWxzZSB7Ci0JCXY0bDJfc3RkX2lkIHZzOwotCQl2cyA9IGhkdy0+c3RkX21hc2tfY3VyOwotCQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfU1RELCZ2cyk7Ci0JfQotCWhkdy0+dHVuZXJfc2lnbmFsX3N0YWxlID0gITA7Ci0JaGR3LT5jcm9wY2FwX3N0YWxlID0gITA7Ci19Ci0KLQotc3RhdGljIGludCBjaGVja19zdGFuZGFyZChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlyZXR1cm4gKGhkdy0+aW5wdXRfZGlydHkgIT0gMCkgfHwgKGhkdy0+c3RkX2RpcnR5ICE9IDApOwotfQotCi0KLWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX3N0YW5kYXJkID0gewotCS5jaGVjayA9IGNoZWNrX3N0YW5kYXJkLAotCS51cGRhdGUgPSBzZXRfc3RhbmRhcmQsCi0JLm5hbWUgPSAidjRsMl9zdGFuZGFyZCIsCi19OwotCi0KLXN0YXRpYyB2b2lkIHNldF9iY3NoKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyB2NGwyIHNldF9iY3NoIgotCQkgICAiIGI9JWQgYz0lZCBzPSVkIGg9JWQiLAotCQkgICBoZHctPmJyaWdodG5lc3NfdmFsLGhkdy0+Y29udHJhc3RfdmFsLAotCQkgICBoZHctPnNhdHVyYXRpb25fdmFsLGhkdy0+aHVlX3ZhbCk7Ci0JbWVtc2V0KCZjdHJsLDAsc2l6ZW9mKGN0cmwpKTsKLQljdHJsLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUzsKLQljdHJsLnZhbHVlID0gaGR3LT5icmlnaHRuZXNzX3ZhbDsKLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfQ1RSTCwmY3RybCk7Ci0JY3RybC5pZCA9IFY0TDJfQ0lEX0NPTlRSQVNUOwotCWN0cmwudmFsdWUgPSBoZHctPmNvbnRyYXN0X3ZhbDsKLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfQ1RSTCwmY3RybCk7Ci0JY3RybC5pZCA9IFY0TDJfQ0lEX1NBVFVSQVRJT047Ci0JY3RybC52YWx1ZSA9IGhkdy0+c2F0dXJhdGlvbl92YWw7Ci0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX0NUUkwsJmN0cmwpOwotCWN0cmwuaWQgPSBWNEwyX0NJRF9IVUU7Ci0JY3RybC52YWx1ZSA9IGhkdy0+aHVlX3ZhbDsKLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfQ1RSTCwmY3RybCk7Ci19Ci0KLQotc3RhdGljIGludCBjaGVja19iY3NoKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXJldHVybiAoaGR3LT5icmlnaHRuZXNzX2RpcnR5IHx8Ci0JCWhkdy0+Y29udHJhc3RfZGlydHkgfHwKLQkJaGR3LT5zYXR1cmF0aW9uX2RpcnR5IHx8Ci0JCWhkdy0+aHVlX2RpcnR5KTsKLX0KLQotCi1jb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9iY3NoID0gewotCS5jaGVjayA9IGNoZWNrX2Jjc2gsCi0JLnVwZGF0ZSA9IHNldF9iY3NoLAotCS5uYW1lID0gInY0bDJfYmNzaCIsCi19OwotCi0KLXN0YXRpYyB2b2lkIHNldF92b2x1bWUoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0Jc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOwotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywKLQkJICAgImkyYyB2NGwyIHNldF92b2x1bWUiCi0JCSAgICIodm9sPSVkIGJhbD0lZCBiYXM9JWQgdHJlYj0lZCBtdXRlPSVkKSIsCi0JCSAgIGhkdy0+dm9sdW1lX3ZhbCwKLQkJICAgaGR3LT5iYWxhbmNlX3ZhbCwKLQkJICAgaGR3LT5iYXNzX3ZhbCwKLQkJICAgaGR3LT50cmVibGVfdmFsLAotCQkgICBoZHctPm11dGVfdmFsKTsKLQltZW1zZXQoJmN0cmwsMCxzaXplb2YoY3RybCkpOwotCWN0cmwuaWQgPSBWNEwyX0NJRF9BVURJT19NVVRFOwotCWN0cmwudmFsdWUgPSBoZHctPm11dGVfdmFsID8gMSA6IDA7Ci0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX0NUUkwsJmN0cmwpOwotCWN0cmwuaWQgPSBWNEwyX0NJRF9BVURJT19WT0xVTUU7Ci0JY3RybC52YWx1ZSA9IGhkdy0+dm9sdW1lX3ZhbDsKLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfQ1RSTCwmY3RybCk7Ci0JY3RybC5pZCA9IFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U7Ci0JY3RybC52YWx1ZSA9IGhkdy0+YmFsYW5jZV92YWw7Ci0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX0NUUkwsJmN0cmwpOwotCWN0cmwuaWQgPSBWNEwyX0NJRF9BVURJT19CQVNTOwotCWN0cmwudmFsdWUgPSBoZHctPmJhc3NfdmFsOwotCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfU19DVFJMLCZjdHJsKTsKLQljdHJsLmlkID0gVjRMMl9DSURfQVVESU9fVFJFQkxFOwotCWN0cmwudmFsdWUgPSBoZHctPnRyZWJsZV92YWw7Ci0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX0NUUkwsJmN0cmwpOwotfQotCi0KLXN0YXRpYyBpbnQgY2hlY2tfdm9sdW1lKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXJldHVybiAoaGR3LT52b2x1bWVfZGlydHkgfHwKLQkJaGR3LT5iYWxhbmNlX2RpcnR5IHx8Ci0JCWhkdy0+YmFzc19kaXJ0eSB8fAotCQloZHctPnRyZWJsZV9kaXJ0eSB8fAotCQloZHctPm11dGVfZGlydHkpOwotfQotCi0KLWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX3ZvbHVtZSA9IHsKLQkuY2hlY2sgPSBjaGVja192b2x1bWUsCi0JLnVwZGF0ZSA9IHNldF92b2x1bWUsCi0JLm5hbWUgPSAidjRsMl92b2x1bWUiLAotfTsKLQotCi1zdGF0aWMgdm9pZCBzZXRfYXVkaW9tb2RlKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXN0cnVjdCB2NGwyX3R1bmVyIHZ0OwotCW1lbXNldCgmdnQsMCxzaXplb2YodnQpKTsKLQl2dC5hdWRtb2RlID0gaGR3LT5hdWRpb21vZGVfdmFsOwotCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfU19UVU5FUiwmdnQpOwotfQotCi0KLXN0YXRpYyBpbnQgY2hlY2tfYXVkaW9tb2RlKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXJldHVybiAoaGR3LT5pbnB1dF9kaXJ0eSB8fAotCQloZHctPmF1ZGlvbW9kZV9kaXJ0eSk7Ci19Ci0KLQotY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfYXVkaW9tb2RlID0gewotCS5jaGVjayA9IGNoZWNrX2F1ZGlvbW9kZSwKLQkudXBkYXRlID0gc2V0X2F1ZGlvbW9kZSwKLQkubmFtZSA9ICJ2NGwyX2F1ZGlvbW9kZSIsCi19OwotCi0KLXN0YXRpYyB2b2lkIHNldF9mcmVxdWVuY3koc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0JdW5zaWduZWQgbG9uZyBmdjsKLQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgZnJlcTsKLQlmdiA9IHB2cjJfaGR3X2dldF9jdXJfZnJlcShoZHcpOwotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIHY0bDIgc2V0X2ZyZXEoJWx1KSIsZnYpOwotCWlmIChoZHctPnR1bmVyX3NpZ25hbF9zdGFsZSkgewotCQlwdnIyX2kyY19jb3JlX3N0YXR1c19wb2xsKGhkdyk7Ci0JfQotCW1lbXNldCgmZnJlcSwwLHNpemVvZihmcmVxKSk7Ci0JaWYgKGhkdy0+dHVuZXJfc2lnbmFsX2luZm8uY2FwYWJpbGl0eSAmIFY0TDJfVFVORVJfQ0FQX0xPVykgewotCQkvLyAoKGZ2ICogMTAwMCkgLyA2MjUwMCkKLQkJZnJlcS5mcmVxdWVuY3kgPSAoZnYgKiAyKSAvIDEyNTsKLQl9IGVsc2UgewotCQlmcmVxLmZyZXF1ZW5jeSA9IGZ2IC8gNjI1MDA7Ci0JfQotCS8qIHR1bmVyLWNvcmUgY3VycmVudGx5IGRvZXNuJ3Qgc2VlbSB0byBjYXJlIGFib3V0IHRoaXMsIGJ1dAotCSAgIGxldCdzIHNldCBpdCBhbnl3YXkgZm9yIGNvbXBsZXRlbmVzcy4gKi8KLQlpZiAoaGR3LT5pbnB1dF92YWwgPT0gUFZSMl9DVkFMX0lOUFVUX1JBRElPKSB7Ci0JCWZyZXEudHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0JfSBlbHNlIHsKLQkJZnJlcS50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7Ci0JfQotCWZyZXEudHVuZXIgPSAwOwotCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfU19GUkVRVUVOQ1ksJmZyZXEpOwotfQotCi0KLXN0YXRpYyBpbnQgY2hlY2tfZnJlcXVlbmN5KHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXJldHVybiBoZHctPmZyZXFEaXJ0eSAhPSAwOwotfQotCi0KLWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX2ZyZXF1ZW5jeSA9IHsKLQkuY2hlY2sgPSBjaGVja19mcmVxdWVuY3ksCi0JLnVwZGF0ZSA9IHNldF9mcmVxdWVuY3ksCi0JLm5hbWUgPSAidjRsMl9mcmVxIiwKLX07Ci0KLQotc3RhdGljIHZvaWQgc2V0X3NpemUoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0Jc3RydWN0IHY0bDJfZm9ybWF0IGZtdDsKLQotCW1lbXNldCgmZm10LDAsc2l6ZW9mKGZtdCkpOwotCi0JZm10LnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JZm10LmZtdC5waXgud2lkdGggPSBoZHctPnJlc19ob3JfdmFsOwotCWZtdC5mbXQucGl4LmhlaWdodCA9IGhkdy0+cmVzX3Zlcl92YWw7Ci0KLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyB2NGwyIHNldF9zaXplKCVkeCVkKSIsCi0JCQkgICBmbXQuZm10LnBpeC53aWR0aCxmbXQuZm10LnBpeC5oZWlnaHQpOwotCi0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX0ZNVCwmZm10KTsKLX0KLQotCi1zdGF0aWMgaW50IGNoZWNrX3NpemUoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0JcmV0dXJuIChoZHctPnJlc19ob3JfZGlydHkgfHwgaGR3LT5yZXNfdmVyX2RpcnR5KTsKLX0KLQotCi1jb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9zaXplID0gewotCS5jaGVjayA9IGNoZWNrX3NpemUsCi0JLnVwZGF0ZSA9IHNldF9zaXplLAotCS5uYW1lID0gInY0bDJfc2l6ZSIsCi19OwotCi0KLXN0YXRpYyB2b2lkIHNldF9jcm9wKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXN0cnVjdCB2NGwyX2Nyb3AgY3JvcDsKLQotCW1lbXNldCgmY3JvcCwgMCwgc2l6ZW9mIGNyb3ApOwotCWNyb3AudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQljcm9wLmMubGVmdCA9IGhkdy0+Y3JvcGxfdmFsOwotCWNyb3AuYy50b3AgPSBoZHctPmNyb3B0X3ZhbDsKLQljcm9wLmMuaGVpZ2h0ID0gaGR3LT5jcm9waF92YWw7Ci0JY3JvcC5jLndpZHRoID0gaGR3LT5jcm9wd192YWw7Ci0KLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsCi0JCSAgICJpMmMgdjRsMiBzZXRfY3JvcCBjcm9wPSVkOiVkOiVkOiVkIiwKLQkJICAgY3JvcC5jLndpZHRoLCBjcm9wLmMuaGVpZ2h0LCBjcm9wLmMubGVmdCwgY3JvcC5jLnRvcCk7Ci0KLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsIFZJRElPQ19TX0NST1AsICZjcm9wKTsKLX0KLQotc3RhdGljIGludCBjaGVja19jcm9wKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXJldHVybiAoaGR3LT5jcm9wbF9kaXJ0eSB8fCBoZHctPmNyb3B0X2RpcnR5IHx8Ci0JCWhkdy0+Y3JvcHdfZGlydHkgfHwgaGR3LT5jcm9waF9kaXJ0eSk7Ci19Ci0KLWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX2Nyb3AgPSB7Ci0JLmNoZWNrID0gY2hlY2tfY3JvcCwKLQkudXBkYXRlID0gc2V0X2Nyb3AsCi0JLm5hbWUgPSAidjRsMl9jcm9wIiwKLX07Ci0KLQotc3RhdGljIHZvaWQgZG9fbG9nKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIHY0bDIgZG9fbG9nKCkiKTsKLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX0xPR19TVEFUVVMsTlVMTCk7Ci0KLX0KLQotCi1zdGF0aWMgaW50IGNoZWNrX2xvZyhzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlyZXR1cm4gaGR3LT5sb2dfcmVxdWVzdGVkICE9IDA7Ci19Ci0KLQotY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfbG9nID0gewotCS5jaGVjayA9IGNoZWNrX2xvZywKLQkudXBkYXRlID0gZG9fbG9nLAotCS5uYW1lID0gInY0bDJfbG9nIiwKLX07Ci0KLQotdm9pZCBwdnIyX3Y0bDJfY21kX3N0cmVhbShzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCxpbnQgZmwpCi17Ci0JcHZyMl9pMmNfY2xpZW50X2NtZChjcCwKLQkJCSAgICAoZmwgPyBWSURJT0NfU1RSRUFNT04gOiBWSURJT0NfU1RSRUFNT0ZGKSxOVUxMKTsKLX0KLQotCi12b2lkIHB2cjJfdjRsMl9jbWRfc3RhdHVzX3BvbGwoc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3ApCi17Ci0JaW50IHN0YXQ7Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjcC0+aGR3OwotCWlmIChoZHctPmNyb3BjYXBfc3RhbGUpIHsKLQkJaGR3LT5jcm9wY2FwX2luZm8udHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkJc3RhdCA9IHB2cjJfaTJjX2NsaWVudF9jbWQoY3AsIFZJRElPQ19DUk9QQ0FQLAotCQkJCQkgICAmaGR3LT5jcm9wY2FwX2luZm8pOwotCQlpZiAoc3RhdCA9PSAwKSB7Ci0JCQkvKiBDaGVjayB3YXMgc3VjY2Vzc2Z1bCwgc28gdGhlIGRhdGEgaXMgbm8KLQkJCSAgIGxvbmdlciBjb25zaWRlcmVkIHN0YWxlLiAqLwotCQkJaGR3LT5jcm9wY2FwX3N0YWxlID0gMDsKLQkJfQotCX0KLQlwdnIyX2kyY19jbGllbnRfY21kKGNwLCBWSURJT0NfR19UVU5FUiwgJmhkdy0+dHVuZXJfc2lnbmFsX2luZm8pOwotfQotCi0KLS8qCi0gIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6Ci0gICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgotICAqKiogbW9kZTogYyAqKioKLSAgKioqIGZpbGwtY29sdW1uOiA3MCAqKioKLSAgKioqIHRhYi13aWR0aDogOCAqKioKLSAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgotICAqKiogRW5kOiAqKioKLSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNtZC12NGwyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViNzQ0YTIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNtZC12NGwyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgotICoKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQXVyZWxpZW4gQWxsZWF1bWUgPHNsdHNAZnJlZS5mcj4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCi0gKi8KLQotI2lmbmRlZiBfX1BWUlVTQjJfQ01EX1Y0TDJfSAotI2RlZmluZSBfX1BWUlVTQjJfQ01EX1Y0TDJfSAotCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY29yZS5oIgotCi1leHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfc3RhbmRhcmQ7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfcmFkaW87Ci1leHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfYmNzaDsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl92b2x1bWU7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfZnJlcXVlbmN5OwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX2Nyb3A7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfc2l6ZTsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9hdWRpb21vZGU7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfbG9nOwotCi12b2lkIHB2cjJfdjRsMl9jbWRfc3RyZWFtKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKixpbnQpOwotdm9pZCBwdnIyX3Y0bDJfY21kX3N0YXR1c19wb2xsKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKik7Ci0KLSNlbmRpZiAvKiBfX1BWUlVTQjJfQ01EX1Y0TDJfSCAqLwotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzAgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYwppbmRleCBkNmEzNTQwLi45NDY0ODYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgInB2cnVzYjItaTJjLWNvcmUuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgogI2luY2x1ZGUgInB2cnVzYjItZGVidWcuaCIKQEAgLTI5LDggKzMwLDcgQEAKIC8qCiAKICAgVGhpcyBtb2R1bGUgYXR0ZW1wdHMgdG8gaW1wbGVtZW50IGEgY29tcGxpYW50IEkyQyBhZGFwdGVyIGZvciB0aGUgcHZydXNiMgotICBkZXZpY2UuICBCeSBkb2luZyB0aGlzIHdlIGNhbiB0aGVuIG1ha2UgdXNlIG9mIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkgaW4KLSAgVjRMIChlLmcuIHR1bmVyLmMpIHJhdGhlciB0aGFuIHJvbGxpbmcgb3VyIG93bi4KKyAgZGV2aWNlLgogCiAqLwogCkBAIC00MiwxMCArNDIsNiBAQAogbW9kdWxlX3BhcmFtX2FycmF5KGlyX21vZGUsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlyX21vZGUsInNwZWNpZnk6IDA9ZGlzYWJsZSBJUiByZWNlcHRpb24sIDE9bm9ybWFsIElSIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcHZyMl9pMmNfY2xpZW50X2Rlc2NyaWJlKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwLAotCQkJCQkgICAgIHVuc2lnbmVkIGludCBkZXRhaWwsCi0JCQkJCSAgICAgY2hhciAqYnVmLHVuc2lnbmVkIGludCBtYXhsZW4pOwotCiBzdGF0aWMgaW50IHB2cjJfaTJjX3dyaXRlKHN0cnVjdCBwdnIyX2hkdyAqaGR3LCAvKiBDb250ZXh0ICovCiAJCQkgIHU4IGkyY19hZGRyLCAgICAgIC8qIEkyQyBhZGRyZXNzIHdlJ3JlIHRhbGtpbmcgdG8gKi8KIAkJCSAgdTggKmRhdGEsICAgICAgICAgLyogRGF0YSB0byB3cml0ZSAqLwpAQCAtNTI0LDQxNCArNTIwLDEzIEBACiAJcmV0dXJuIEkyQ19GVU5DX1NNQlVTX0VNVUwgfCBJMkNfRlVOQ19JMkM7CiB9CiAKLXN0YXRpYyBpbnQgcHZyMl9pMmNfY29yZV9zaW5nbGV0b24oc3RydWN0IGkyY19jbGllbnQgKmNwLAotCQkJCSAgIHVuc2lnbmVkIGludCBjbWQsdm9pZCAqYXJnKQotewotCWludCBzdGF0OwotCWlmICghY3ApIHJldHVybiAtRUlOVkFMOwotCWlmICghKGNwLT5kcml2ZXIpKSByZXR1cm4gLUVJTlZBTDsKLQlpZiAoIShjcC0+ZHJpdmVyLT5jb21tYW5kKSkgcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCF0cnlfbW9kdWxlX2dldChjcC0+ZHJpdmVyLT5kcml2ZXIub3duZXIpKSByZXR1cm4gLUVBR0FJTjsKLQlzdGF0ID0gY3AtPmRyaXZlci0+Y29tbWFuZChjcCxjbWQsYXJnKTsKLQltb2R1bGVfcHV0KGNwLT5kcml2ZXItPmRyaXZlci5vd25lcik7Ci0JcmV0dXJuIHN0YXQ7Ci19Ci0KLWludCBwdnIyX2kyY19jbGllbnRfY21kKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwLHVuc2lnbmVkIGludCBjbWQsdm9pZCAqYXJnKQotewotCWludCBzdGF0OwotCWlmIChwdnJ1c2IyX2RlYnVnICYgUFZSMl9UUkFDRV9JMkNfQ01EKSB7Ci0JCWNoYXIgYnVmWzEwMF07Ci0JCXVuc2lnbmVkIGludCBjbnQ7Ci0JCWNudCA9IHB2cjJfaTJjX2NsaWVudF9kZXNjcmliZShjcCxQVlIyX0kyQ19ERVRBSUxfREVCVUcsCi0JCQkJCSAgICAgICBidWYsc2l6ZW9mKGJ1ZikpOwotCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NNRCwKLQkJCSAgICJpMmMgQ09NTUFORCAoY29kZT0ldSAweCV4KSB0byAlLipzIiwKLQkJCSAgIGNtZCxjbWQsY250LGJ1Zik7Ci0JfQotCXN0YXQgPSBwdnIyX2kyY19jb3JlX3NpbmdsZXRvbihjcC0+Y2xpZW50LGNtZCxhcmcpOwotCWlmIChwdnJ1c2IyX2RlYnVnICYgUFZSMl9UUkFDRV9JMkNfQ01EKSB7Ci0JCWNoYXIgYnVmWzEwMF07Ci0JCXVuc2lnbmVkIGludCBjbnQ7Ci0JCWNudCA9IHB2cjJfaTJjX2NsaWVudF9kZXNjcmliZShjcCxQVlIyX0kyQ19ERVRBSUxfREVCVUcsCi0JCQkJCSAgICAgICBidWYsc2l6ZW9mKGJ1ZikpOwotCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NNRCwKLQkJCSAgICJpMmMgQ09NTUFORCB0byAlLipzIChyZXQ9JWQpIixjbnQsYnVmLHN0YXQpOwotCX0KLQlyZXR1cm4gc3RhdDsKLX0KLQotaW50IHB2cjJfaTJjX2NvcmVfY21kKHN0cnVjdCBwdnIyX2hkdyAqaGR3LHVuc2lnbmVkIGludCBjbWQsdm9pZCAqYXJnKQotewotCXN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwLCAqbmNwOwotCWludCBzdGF0ID0gLUVJTlZBTDsKLQotCWlmICghaGR3KSByZXR1cm4gc3RhdDsKLQotCW11dGV4X2xvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNwLCBuY3AsICZoZHctPmkyY19jbGllbnRzLCBsaXN0KSB7Ci0JCWlmICghY3AtPnJlY3ZfZW5hYmxlKSBjb250aW51ZTsKLQkJbXV0ZXhfdW5sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotCQlzdGF0ID0gcHZyMl9pMmNfY2xpZW50X2NtZChjcCxjbWQsYXJnKTsKLQkJbXV0ZXhfbG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotCXJldHVybiBzdGF0OwotfQotCi0KLXN0YXRpYyBpbnQgaGFuZGxlcl9jaGVjayhzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCkKLXsKLQlzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlciAqaHAgPSBjcC0+aGFuZGxlcjsKLQlpZiAoIWhwKSByZXR1cm4gMDsKLQlpZiAoIWhwLT5mdW5jX3RhYmxlLT5jaGVjaykgcmV0dXJuIDA7Ci0JcmV0dXJuIGhwLT5mdW5jX3RhYmxlLT5jaGVjayhocC0+ZnVuY19kYXRhKSAhPSAwOwotfQotCi0jZGVmaW5lIEJVRlNJWkUgNTAwCi0KLQotdm9pZCBwdnIyX2kyY19jb3JlX3N0YXR1c19wb2xsKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwOwotCW11dGV4X2xvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7IGRvIHsKLQkJc3RydWN0IHY0bDJfdHVuZXIgKnZ0cCA9ICZoZHctPnR1bmVyX3NpZ25hbF9pbmZvOwotCQltZW1zZXQodnRwLDAsc2l6ZW9mKCp2dHApKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjcCwgJmhkdy0+aTJjX2NsaWVudHMsIGxpc3QpIHsKLQkJCWlmICghY3AtPmRldGVjdGVkX2ZsYWcpIGNvbnRpbnVlOwotCQkJaWYgKCFjcC0+c3RhdHVzX3BvbGwpIGNvbnRpbnVlOwotCQkJY3AtPnN0YXR1c19wb2xsKGNwKTsKLQkJfQotCQloZHctPnR1bmVyX3NpZ25hbF9zdGFsZSA9IDA7Ci0JCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIHN0YXR1cyBwb2xsIgotCQkJICAgIiB0eXBlPSV1IHN0cmVuZ3RoPSV1IGF1ZGlvPTB4JXggY2FwPTB4JXgiCi0JCQkgICAiIGxvdz0ldSBoaT0ldSIsCi0JCQkgICB2dHAtPnR5cGUsCi0JCQkgICB2dHAtPnNpZ25hbCx2dHAtPnJ4c3ViY2hhbnMsdnRwLT5jYXBhYmlsaXR5LAotCQkJICAgdnRwLT5yYW5nZWxvdyx2dHAtPnJhbmdlaGlnaCk7Ci0JfSB3aGlsZSAoMCk7IG11dGV4X3VubG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKLX0KLQotCi0vKiBJc3N1ZSB2YXJpb3VzIEkyQyBvcGVyYXRpb25zIHRvIGJyaW5nIGNoaXAtbGV2ZWwgZHJpdmVycyBpbnRvIHN5bmMgd2l0aAotICAgc3RhdGUgc3RvcmVkIGluIHRoaXMgZHJpdmVyLiAqLwotdm9pZCBwdnIyX2kyY19jb3JlX3N5bmMoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0JdW5zaWduZWQgbG9uZyBtc2s7Ci0JdW5zaWduZWQgaW50IGlkeDsKLQlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCwgKm5jcDsKLQotCWlmICghaGR3LT5pMmNfbGlua2VkKSByZXR1cm47Ci0JaWYgKCEoaGR3LT5pMmNfcGVuZF90eXBlcyAmIFBWUjJfSTJDX1BFTkRfQUxMKSkgewotCQlyZXR1cm47Ci0JfQotCW11dGV4X2xvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7IGRvIHsKLQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQ19DT1JFLCJpMmM6IGNvcmVfc3luYyBCRUdJTiIpOwotCQlpZiAoaGR3LT5pMmNfcGVuZF90eXBlcyAmIFBWUjJfSTJDX1BFTkRfREVURUNUKSB7Ci0JCQkvKiBPbmUgb3IgbW9yZSBJMkMgY2xpZW50cyBoYXZlIGF0dGFjaGVkIHNpbmNlIHdlCi0JCQkgICBsYXN0IHN5bmNlZC4gIFNvIHNjYW4gdGhlIGxpc3QgYW5kIGlkZW50aWZ5IHRoZQotCQkJICAgbmV3IGNsaWVudHMuICovCi0JCQljaGFyICpidWY7Ci0JCQl1bnNpZ25lZCBpbnQgY250OwotCQkJdW5zaWduZWQgbG9uZyBhbWFzayA9IDA7Ci0JCQlidWYgPSBrbWFsbG9jKEJVRlNJWkUsR0ZQX0tFUk5FTCk7Ci0JCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NPUkUsImkyYzogUEVORF9ERVRFQ1QiKTsKLQkJCWhkdy0+aTJjX3BlbmRfdHlwZXMgJj0gflBWUjJfSTJDX1BFTkRfREVURUNUOwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjcCwgJmhkdy0+aTJjX2NsaWVudHMsIGxpc3QpIHsKLQkJCQlpZiAoIWNwLT5kZXRlY3RlZF9mbGFnKSB7Ci0JCQkJCWNwLT5jdGxfbWFzayA9IDA7Ci0JCQkJCXB2cjJfaTJjX3Byb2JlKGhkdyxjcCk7Ci0JCQkJCWNwLT5kZXRlY3RlZF9mbGFnID0gITA7Ci0JCQkJCW1zayA9IGNwLT5jdGxfbWFzazsKLQkJCQkJY250ID0gMDsKLQkJCQkJaWYgKGJ1ZikgewotCQkJCQkJY250ID0gcHZyMl9pMmNfY2xpZW50X2Rlc2NyaWJlKAotCQkJCQkJCWNwLAotCQkJCQkJCVBWUjJfSTJDX0RFVEFJTF9BTEwsCi0JCQkJCQkJYnVmLEJVRlNJWkUpOwotCQkJCQl9Ci0JCQkJCXRyYWNlX2kyYygiUHJvYmVkOiAlLipzIixjbnQsYnVmKTsKLQkJCQkJaWYgKGhhbmRsZXJfY2hlY2soY3ApKSB7Ci0JCQkJCQloZHctPmkyY19wZW5kX3R5cGVzIHw9Ci0JCQkJCQkJUFZSMl9JMkNfUEVORF9DTElFTlQ7Ci0JCQkJCX0KLQkJCQkJY3AtPnBlbmRfbWFzayA9IG1zazsKLQkJCQkJaGR3LT5pMmNfcGVuZF9tYXNrIHw9IG1zazsKLQkJCQkJaGR3LT5pMmNfcGVuZF90eXBlcyB8PQotCQkJCQkJUFZSMl9JMkNfUEVORF9SRUZSRVNIOwotCQkJCX0KLQkJCQlhbWFzayB8PSBjcC0+Y3RsX21hc2s7Ci0JCQl9Ci0JCQloZHctPmkyY19hY3RpdmVfbWFzayA9IGFtYXNrOwotCQkJaWYgKGJ1Zikga2ZyZWUoYnVmKTsKLQkJfQotCQlpZiAoaGR3LT5pMmNfcGVuZF90eXBlcyAmIFBWUjJfSTJDX1BFTkRfU1RBTEUpIHsKLQkJCS8qIE5lZWQgdG8gZG8gb25lIG9yIG1vcmUgZ2xvYmFsIHVwZGF0ZXMuICBBcnJhbmdlCi0JCQkgICBmb3IgdGhpcyB0byBoYXBwZW4uICovCi0JCQl1bnNpZ25lZCBsb25nIG0yOwotCQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQ19DT1JFLAotCQkJCSAgICJpMmM6IFBFTkRfU1RBTEUgKDB4JWx4KSIsCi0JCQkJICAgaGR3LT5pMmNfc3RhbGVfbWFzayk7Ci0JCQloZHctPmkyY19wZW5kX3R5cGVzICY9IH5QVlIyX0kyQ19QRU5EX1NUQUxFOwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjcCwgJmhkdy0+aTJjX2NsaWVudHMsIGxpc3QpIHsKLQkJCQltMiA9IGhkdy0+aTJjX3N0YWxlX21hc2s7Ci0JCQkJbTIgJj0gY3AtPmN0bF9tYXNrOwotCQkJCW0yICY9IH5jcC0+cGVuZF9tYXNrOwotCQkJCWlmIChtMikgewotCQkJCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NPUkUsCi0JCQkJCQkgICAiaTJjOiBjcD0lcCBzZXR0aW5nIDB4JWx4IiwKLQkJCQkJCSAgIGNwLG0yKTsKLQkJCQkJY3AtPnBlbmRfbWFzayB8PSBtMjsKLQkJCQl9Ci0JCQl9Ci0JCQloZHctPmkyY19wZW5kX21hc2sgfD0gaGR3LT5pMmNfc3RhbGVfbWFzazsKLQkJCWhkdy0+aTJjX3N0YWxlX21hc2sgPSAwOwotCQkJaGR3LT5pMmNfcGVuZF90eXBlcyB8PSBQVlIyX0kyQ19QRU5EX1JFRlJFU0g7Ci0JCX0KLQkJaWYgKGhkdy0+aTJjX3BlbmRfdHlwZXMgJiBQVlIyX0kyQ19QRU5EX0NMSUVOVCkgewotCQkJLyogT25lIG9yIG1vcmUgY2xpZW50IGhhbmRsZXJzIGFyZSBhc2tpbmcgZm9yIGFuCi0JCQkgICB1cGRhdGUuICBSdW4gdGhyb3VnaCB0aGUgbGlzdCBvZiBrbm93biBjbGllbnRzCi0JCQkgICBhbmQgdXBkYXRlIGVhY2ggb25lLiAqLwotCQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQ19DT1JFLCJpMmM6IFBFTkRfQ0xJRU5UIik7Ci0JCQloZHctPmkyY19wZW5kX3R5cGVzICY9IH5QVlIyX0kyQ19QRU5EX0NMSUVOVDsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjcCwgbmNwLCAmaGR3LT5pMmNfY2xpZW50cywKLQkJCQkJCSBsaXN0KSB7Ci0JCQkJaWYgKCFjcC0+aGFuZGxlcikgY29udGludWU7Ci0JCQkJaWYgKCFjcC0+aGFuZGxlci0+ZnVuY190YWJsZS0+dXBkYXRlKSBjb250aW51ZTsKLQkJCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NPUkUsCi0JCQkJCSAgICJpMmM6IGNwPSVwIHVwZGF0ZSIsY3ApOwotCQkJCW11dGV4X3VubG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKLQkJCQljcC0+aGFuZGxlci0+ZnVuY190YWJsZS0+dXBkYXRlKAotCQkJCQljcC0+aGFuZGxlci0+ZnVuY19kYXRhKTsKLQkJCQltdXRleF9sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotCQkJCS8qIElmIGNsaWVudCdzIHVwZGF0ZSBmdW5jdGlvbiBzZXQgc29tZQotCQkJCSAgIGFkZGl0aW9uYWwgcGVuZGluZyBiaXRzLCBhY2NvdW50IGZvciB0aGF0Ci0JCQkJICAgaGVyZS4gKi8KLQkJCQlpZiAoY3AtPnBlbmRfbWFzayAmIH5oZHctPmkyY19wZW5kX21hc2spIHsKLQkJCQkJaGR3LT5pMmNfcGVuZF9tYXNrIHw9IGNwLT5wZW5kX21hc2s7Ci0JCQkJCWhkdy0+aTJjX3BlbmRfdHlwZXMgfD0KLQkJCQkJCVBWUjJfSTJDX1BFTkRfUkVGUkVTSDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKGhkdy0+aTJjX3BlbmRfdHlwZXMgJiBQVlIyX0kyQ19QRU5EX1JFRlJFU0gpIHsKLQkJCWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCAqb3BmOwotCQkJdW5zaWduZWQgbG9uZyBwbTsKLQkJCS8qIFNvbWUgYWN0dWFsIHVwZGF0ZXMgYXJlIHBlbmRpbmcuICBXYWxrIHRocm91Z2gKLQkJCSAgIGVhY2ggdXBkYXRlIHR5cGUgYW5kIHBlcmZvcm0gaXQuICovCi0JCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NPUkUsImkyYzogUEVORF9SRUZSRVNIIgotCQkJCSAgICIgKDB4JWx4KSIsaGR3LT5pMmNfcGVuZF9tYXNrKTsKLQkJCWhkdy0+aTJjX3BlbmRfdHlwZXMgJj0gflBWUjJfSTJDX1BFTkRfUkVGUkVTSDsKLQkJCXBtID0gaGR3LT5pMmNfcGVuZF9tYXNrOwotCQkJaGR3LT5pMmNfcGVuZF9tYXNrID0gMDsKLQkJCWZvciAoaWR4ID0gMCwgbXNrID0gMTsgcG07IGlkeCsrLCBtc2sgPDw9IDEpIHsKLQkJCQlpZiAoIShwbSAmIG1zaykpIGNvbnRpbnVlOwotCQkJCXBtICY9IH5tc2s7Ci0JCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjcCwgJmhkdy0+aTJjX2NsaWVudHMsCi0JCQkJCQkgICAgbGlzdCkgewotCQkJCQlpZiAoY3AtPnBlbmRfbWFzayAmIG1zaykgewotCQkJCQkJY3AtPnBlbmRfbWFzayAmPSB+bXNrOwotCQkJCQkJY3AtPnJlY3ZfZW5hYmxlID0gITA7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQljcC0+cmVjdl9lbmFibGUgPSAwOwotCQkJCQl9Ci0JCQkJfQotCQkJCW9wZiA9IHB2cjJfaTJjX2dldF9vcChpZHgpOwotCQkJCWlmICghb3BmKSBjb250aW51ZTsKLQkJCQltdXRleF91bmxvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7Ci0JCQkJb3BmLT51cGRhdGUoaGR3KTsKLQkJCQltdXRleF9sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotCQkJfQotCQl9Ci0JCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JMkNfQ09SRSwiaTJjOiBjb3JlX3N5bmMgRU5EIik7Ci0JfSB3aGlsZSAoMCk7IG11dGV4X3VubG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKLX0KLQotaW50IHB2cjJfaTJjX2NvcmVfY2hlY2tfc3RhbGUoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0JdW5zaWduZWQgbG9uZyBtc2ssc20scG07Ci0JdW5zaWduZWQgaW50IGlkeDsKLQljb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgKm9wZjsKLQlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcDsKLQl1bnNpZ25lZCBpbnQgcHQgPSAwOwotCi0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQ19DT1JFLCJwdnIyX2kyY19jb3JlX2NoZWNrX3N0YWxlIEJFR0lOIik7Ci0KLQlwbSA9IGhkdy0+aTJjX2FjdGl2ZV9tYXNrOwotCXNtID0gMDsKLQlmb3IgKGlkeCA9IDAsIG1zayA9IDE7IHBtOyBpZHgrKywgbXNrIDw8PSAxKSB7Ci0JCWlmICghKG1zayAmIHBtKSkgY29udGludWU7Ci0JCXBtICY9IH5tc2s7Ci0JCW9wZiA9IHB2cjJfaTJjX2dldF9vcChpZHgpOwotCQlpZiAoIW9wZikgY29udGludWU7Ci0JCWlmIChvcGYtPmNoZWNrKGhkdykpIHsKLQkJCXNtIHw9IG1zazsKLQkJfQotCX0KLQlpZiAoc20pIHB0IHw9IFBWUjJfSTJDX1BFTkRfU1RBTEU7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwLCAmaGR3LT5pMmNfY2xpZW50cywgbGlzdCkKLQkJaWYgKGhhbmRsZXJfY2hlY2soY3ApKQotCQkJcHQgfD0gUFZSMl9JMkNfUEVORF9DTElFTlQ7Ci0KLQlpZiAocHQpIHsKLQkJbXV0ZXhfbG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsgZG8gewotCQkJaGR3LT5pMmNfcGVuZF90eXBlcyB8PSBwdDsKLQkJCWhkdy0+aTJjX3N0YWxlX21hc2sgfD0gc207Ci0JCQloZHctPmkyY19wZW5kX21hc2sgfD0gaGR3LT5pMmNfc3RhbGVfbWFzazsKLQkJfSB3aGlsZSAoMCk7IG11dGV4X3VubG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKLQl9Ci0KLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NPUkUsCi0JCSAgICJpMmM6IHR5cGVzPTB4JXggc3RhbGU9MHglbHggcGVuZD0weCVseCIsCi0JCSAgIGhkdy0+aTJjX3BlbmRfdHlwZXMsCi0JCSAgIGhkdy0+aTJjX3N0YWxlX21hc2ssCi0JCSAgIGhkdy0+aTJjX3BlbmRfbWFzayk7Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQ19DT1JFLCJwdnIyX2kyY19jb3JlX2NoZWNrX3N0YWxlIEVORCIpOwotCi0JcmV0dXJuIChoZHctPmkyY19wZW5kX3R5cGVzICYgUFZSMl9JMkNfUEVORF9BTEwpICE9IDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcHZyMl9pMmNfY2xpZW50X2Rlc2NyaWJlKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwLAotCQkJCQkgICAgIHVuc2lnbmVkIGludCBkZXRhaWwsCi0JCQkJCSAgICAgY2hhciAqYnVmLHVuc2lnbmVkIGludCBtYXhsZW4pCi17Ci0JdW5zaWduZWQgaW50IGNjbnQsYmNudDsKLQlpbnQgc3BjZmwgPSAwOwotCWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCAqb3BmOwotCi0JY2NudCA9IDA7Ci0JaWYgKGRldGFpbCAmIFBWUjJfSTJDX0RFVEFJTF9ERUJVRykgewotCQliY250ID0gc2NucHJpbnRmKGJ1ZixtYXhsZW4sCi0JCQkJICJjdHh0PSVwIGN0bF9tYXNrPTB4JWx4IiwKLQkJCQkgY3AsY3AtPmN0bF9tYXNrKTsKLQkJY2NudCArPSBiY250OyBidWYgKz0gYmNudDsgbWF4bGVuIC09IGJjbnQ7Ci0JCXNwY2ZsID0gITA7Ci0JfQotCWJjbnQgPSBzY25wcmludGYoYnVmLG1heGxlbiwKLQkJCSAiJXMlcyBAIDB4JXgiLAotCQkJIChzcGNmbCA/ICIgIiA6ICIiKSwKLQkJCSBjcC0+Y2xpZW50LT5uYW1lLAotCQkJIGNwLT5jbGllbnQtPmFkZHIpOwotCWNjbnQgKz0gYmNudDsgYnVmICs9IGJjbnQ7IG1heGxlbiAtPSBiY250OwotCWlmICgoZGV0YWlsICYgUFZSMl9JMkNfREVUQUlMX0hBTkRMRVIpICYmCi0JICAgIGNwLT5oYW5kbGVyICYmIGNwLT5oYW5kbGVyLT5mdW5jX3RhYmxlLT5kZXNjcmliZSkgewotCQliY250ID0gc2NucHJpbnRmKGJ1ZixtYXhsZW4sIiAoIik7Ci0JCWNjbnQgKz0gYmNudDsgYnVmICs9IGJjbnQ7IG1heGxlbiAtPSBiY250OwotCQliY250ID0gY3AtPmhhbmRsZXItPmZ1bmNfdGFibGUtPmRlc2NyaWJlKAotCQkJY3AtPmhhbmRsZXItPmZ1bmNfZGF0YSxidWYsbWF4bGVuKTsKLQkJY2NudCArPSBiY250OyBidWYgKz0gYmNudDsgbWF4bGVuIC09IGJjbnQ7Ci0JCWJjbnQgPSBzY25wcmludGYoYnVmLG1heGxlbiwiKSIpOwotCQljY250ICs9IGJjbnQ7IGJ1ZiArPSBiY250OyBtYXhsZW4gLT0gYmNudDsKLQl9Ci0JaWYgKChkZXRhaWwgJiBQVlIyX0kyQ19ERVRBSUxfQ1RMTUFTSykgJiYgY3AtPmN0bF9tYXNrKSB7Ci0JCXVuc2lnbmVkIGludCBpZHg7Ci0JCXVuc2lnbmVkIGxvbmcgbXNrLHNtOwotCi0JCWJjbnQgPSBzY25wcmludGYoYnVmLG1heGxlbiwiIFsiKTsKLQkJY2NudCArPSBiY250OyBidWYgKz0gYmNudDsgbWF4bGVuIC09IGJjbnQ7Ci0JCXNtID0gMDsKLQkJc3BjZmwgPSAwOwotCQlmb3IgKGlkeCA9IDAsIG1zayA9IDE7IG1zazsgaWR4KyssIG1zayA8PD0gMSkgewotCQkJaWYgKCEoY3AtPmN0bF9tYXNrICYgbXNrKSkgY29udGludWU7Ci0JCQlvcGYgPSBwdnIyX2kyY19nZXRfb3AoaWR4KTsKLQkJCWlmIChvcGYpIHsKLQkJCQliY250ID0gc2NucHJpbnRmKGJ1ZixtYXhsZW4sIiVzJXMiLAotCQkJCQkJIHNwY2ZsID8gIiAiIDogIiIsCi0JCQkJCQkgb3BmLT5uYW1lKTsKLQkJCQljY250ICs9IGJjbnQ7IGJ1ZiArPSBiY250OyBtYXhsZW4gLT0gYmNudDsKLQkJCQlzcGNmbCA9ICEwOwotCQkJfSBlbHNlIHsKLQkJCQlzbSB8PSBtc2s7Ci0JCQl9Ci0JCX0KLQkJaWYgKHNtKSB7Ci0JCQliY250ID0gc2NucHJpbnRmKGJ1ZixtYXhsZW4sIiVzJWx4IiwKLQkJCQkJIGlkeCAhPSAwID8gIiAiIDogIiIsc20pOwotCQkJY2NudCArPSBiY250OyBidWYgKz0gYmNudDsgbWF4bGVuIC09IGJjbnQ7Ci0JCX0KLQkJYmNudCA9IHNjbnByaW50ZihidWYsbWF4bGVuLCJdIik7Ci0JCWNjbnQgKz0gYmNudDsgYnVmICs9IGJjbnQ7IG1heGxlbiAtPSBiY250OwotCX0KLQlyZXR1cm4gY2NudDsKLX0KLQotdW5zaWduZWQgaW50IHB2cjJfaTJjX3JlcG9ydChzdHJ1Y3QgcHZyMl9oZHcgKmhkdywKLQkJCSAgICAgY2hhciAqYnVmLHVuc2lnbmVkIGludCBtYXhsZW4pCi17Ci0JdW5zaWduZWQgaW50IGNjbnQsYmNudDsKLQlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcDsKLQljY250ID0gMDsKLQltdXRleF9sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOyBkbyB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoY3AsICZoZHctPmkyY19jbGllbnRzLCBsaXN0KSB7Ci0JCQliY250ID0gcHZyMl9pMmNfY2xpZW50X2Rlc2NyaWJlKAotCQkJCWNwLAotCQkJCShQVlIyX0kyQ19ERVRBSUxfSEFORExFUnwKLQkJCQkgUFZSMl9JMkNfREVUQUlMX0NUTE1BU0spLAotCQkJCWJ1ZixtYXhsZW4pOwotCQkJY2NudCArPSBiY250OyBidWYgKz0gYmNudDsgbWF4bGVuIC09IGJjbnQ7Ci0JCQliY250ID0gc2NucHJpbnRmKGJ1ZixtYXhsZW4sIlxuIik7Ci0JCQljY250ICs9IGJjbnQ7IGJ1ZiArPSBiY250OyBtYXhsZW4gLT0gYmNudDsKLQkJfQotCX0gd2hpbGUgKDApOyBtdXRleF91bmxvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7Ci0JcmV0dXJuIGNjbnQ7Ci19Ci0KIHN0YXRpYyBpbnQgcHZyMl9pMmNfYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gKHN0cnVjdCBwdnIyX2hkdyAqKShjbGllbnQtPmFkYXB0ZXItPmFsZ29fZGF0YSk7Ci0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3A7Ci0JaW50IGZsID0gIShoZHctPmkyY19wZW5kX3R5cGVzICYgUFZSMl9JMkNfUEVORF9BTEwpOwotCWNwID0ga3phbGxvYyhzaXplb2YoKmNwKSxHRlBfS0VSTkVMKTsKLQl0cmFjZV9pMmMoImkyY19hdHRhY2ggW2NsaWVudD0lcyBAIDB4JXggY3R4dD0lcF0iLAotCQkgIGNsaWVudC0+bmFtZSwKLQkJICBjbGllbnQtPmFkZHIsY3ApOwotCWlmICghY3ApIHJldHVybiAtRU5PTUVNOwotCWNwLT5oZHcgPSBoZHc7Ci0JSU5JVF9MSVNUX0hFQUQoJmNwLT5saXN0KTsKLQljcC0+Y2xpZW50ID0gY2xpZW50OwotCW11dGV4X2xvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7IGRvIHsKLQkJaGR3LT5jcm9wY2FwX3N0YWxlID0gITA7Ci0JCWxpc3RfYWRkX3RhaWwoJmNwLT5saXN0LCZoZHctPmkyY19jbGllbnRzKTsKLQkJaGR3LT5pMmNfcGVuZF90eXBlcyB8PSBQVlIyX0kyQ19QRU5EX0RFVEVDVDsKLQl9IHdoaWxlICgwKTsgbXV0ZXhfdW5sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotCWlmIChmbCkgcXVldWVfd29yayhoZHctPndvcmtxdWV1ZSwmaGR3LT53b3JraTJjc3luYyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcHZyMl9pMmNfZGV0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gKHN0cnVjdCBwdnIyX2hkdyAqKShjbGllbnQtPmFkYXB0ZXItPmFsZ29fZGF0YSk7Ci0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3AsICpuY3A7Ci0JdW5zaWduZWQgbG9uZyBhbWFzayA9IDA7Ci0JaW50IGZvdW5kZmwgPSAwOwotCW11dGV4X2xvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7IGRvIHsKLQkJaGR3LT5jcm9wY2FwX3N0YWxlID0gITA7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjcCwgbmNwLCAmaGR3LT5pMmNfY2xpZW50cywgbGlzdCkgewotCQkJaWYgKGNwLT5jbGllbnQgPT0gY2xpZW50KSB7Ci0JCQkJdHJhY2VfaTJjKCJwdnIyX2kyY19kZXRhY2giCi0JCQkJCSAgIiBbY2xpZW50PSVzIEAgMHgleCBjdHh0PSVwXSIsCi0JCQkJCSAgY2xpZW50LT5uYW1lLAotCQkJCQkgIGNsaWVudC0+YWRkcixjcCk7Ci0JCQkJaWYgKGNwLT5oYW5kbGVyICYmCi0JCQkJICAgIGNwLT5oYW5kbGVyLT5mdW5jX3RhYmxlLT5kZXRhY2gpIHsKLQkJCQkJY3AtPmhhbmRsZXItPmZ1bmNfdGFibGUtPmRldGFjaCgKLQkJCQkJCWNwLT5oYW5kbGVyLT5mdW5jX2RhdGEpOwotCQkJCX0KLQkJCQlsaXN0X2RlbCgmY3AtPmxpc3QpOwotCQkJCWtmcmVlKGNwKTsKLQkJCQlmb3VuZGZsID0gITA7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlhbWFzayB8PSBjcC0+Y3RsX21hc2s7Ci0JCX0KLQkJaGR3LT5pMmNfYWN0aXZlX21hc2sgPSBhbWFzazsKLQl9IHdoaWxlICgwKTsgbXV0ZXhfdW5sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotCWlmICghZm91bmRmbCkgewotCQl0cmFjZV9pMmMoInB2cjJfaTJjX2RldGFjaCBbY2xpZW50PSVzIEAgMHgleCBjdHh0PTx1bmtub3duPl0iLAotCQkJICBjbGllbnQtPm5hbWUsCi0JCQkgIGNsaWVudC0+YWRkcik7Ci0JfQogCXJldHVybiAwOwogfQogCkBAIC05NDIsNyArNTM3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBwdnIyX2kyY19hZGFwX3RlbXBsYXRlID0gewogCS5vd25lciAgICAgICAgID0gVEhJU19NT0RVTEUsCi0JLmNsYXNzCSAgID0gSTJDX0NMQVNTX1RWX0FOQUxPRywKKwkuY2xhc3MJICAgICAgID0gMCwKIAkuaWQgICAgICAgICAgICA9IEkyQ19IV19CX0JUODQ4LAogCS5jbGllbnRfcmVnaXN0ZXIgPSBwdnIyX2kyY19hdHRhY2hfaW5mb3JtLAogCS5jbGllbnRfdW5yZWdpc3RlciA9IHB2cjJfaTJjX2RldGFjaF9pbmZvcm0sCkBAIC0xMDA5LDEyICs2MDQsOCBAQAogCWhkdy0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZoZHctPnVzYl9kZXYtPmRldjsKIAloZHctPmkyY19hZGFwLmFsZ28gPSAmaGR3LT5pMmNfYWxnbzsKIAloZHctPmkyY19hZGFwLmFsZ29fZGF0YSA9IGhkdzsKLQloZHctPmkyY19wZW5kX21hc2sgPSAwOwotCWhkdy0+aTJjX3N0YWxlX21hc2sgPSAwOwotCWhkdy0+aTJjX2FjdGl2ZV9tYXNrID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmaGR3LT5pMmNfY2xpZW50cyk7Ci0JbXV0ZXhfaW5pdCgmaGR3LT5pMmNfbGlzdF9sb2NrKTsKIAloZHctPmkyY19saW5rZWQgPSAhMDsKKwlpMmNfc2V0X2FkYXBkYXRhKCZoZHctPmkyY19hZGFwLCAmaGR3LT52NGwyX2Rldik7CiAJaTJjX2FkZF9hZGFwdGVyKCZoZHctPmkyY19hZGFwKTsKIAlpZiAoaGR3LT5pMmNfZnVuY1sweDE4XSA9PSBpMmNfMjR4eHhfaXIpIHsKIAkJLyogUHJvYmUgZm9yIGEgZGlmZmVyZW50IHR5cGUgb2YgSVIgcmVjZWl2ZXIgb24gdGhpcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmgKaW5kZXggNmVmN2ExYy4uNmE3NTc2OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuaApAQCAtMjAsNjggKzIwLDEzIEBACiAjaWZuZGVmIF9fUFZSVVNCMl9JMkNfQ09SRV9ICiAjZGVmaW5lIF9fUFZSVVNCMl9JMkNfQ09SRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0KIHN0cnVjdCBwdnIyX2hkdzsKLXN0cnVjdCBwdnIyX2kyY19jbGllbnQ7Ci1zdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlcjsKLXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyX2Z1bmN0aW9uczsKLXN0cnVjdCBwdnIyX2kyY19vcDsKLXN0cnVjdCBwdnIyX2kyY19vcF9mdW5jdGlvbnM7Ci0KLXN0cnVjdCBwdnIyX2kyY19jbGllbnQgewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IHB2cjJfaTJjX2hhbmRsZXIgKmhhbmRsZXI7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBwdnIyX2hkdyAqaGR3OwotCWludCBkZXRlY3RlZF9mbGFnOwotCWludCByZWN2X2VuYWJsZTsKLQl1bnNpZ25lZCBsb25nIHBlbmRfbWFzazsKLQl1bnNpZ25lZCBsb25nIGN0bF9tYXNrOwotCXZvaWQgKCpzdGF0dXNfcG9sbCkoc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqKTsKLX07Ci0KLXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyIHsKLQl2b2lkICpmdW5jX2RhdGE7Ci0JY29uc3Qgc3RydWN0IHB2cjJfaTJjX2hhbmRsZXJfZnVuY3Rpb25zICpmdW5jX3RhYmxlOwotfTsKLQotc3RydWN0IHB2cjJfaTJjX2hhbmRsZXJfZnVuY3Rpb25zIHsKLQl2b2lkICgqZGV0YWNoKSh2b2lkICopOwotCWludCAoKmNoZWNrKSh2b2lkICopOwotCXZvaWQgKCp1cGRhdGUpKHZvaWQgKik7Ci0JdW5zaWduZWQgaW50ICgqZGVzY3JpYmUpKHZvaWQgKixjaGFyICosdW5zaWduZWQgaW50KTsKLX07Ci0KLXN0cnVjdCBwdnIyX2kyY19vcCB7Ci0JaW50ICgqY2hlY2spKHN0cnVjdCBwdnIyX2hkdyAqKTsKLQl2b2lkICgqdXBkYXRlKShzdHJ1Y3QgcHZyMl9oZHcgKik7Ci0JY29uc3QgY2hhciAqbmFtZTsKLX07CiAKIHZvaWQgcHZyMl9pMmNfY29yZV9pbml0KHN0cnVjdCBwdnIyX2hkdyAqKTsKIHZvaWQgcHZyMl9pMmNfY29yZV9kb25lKHN0cnVjdCBwdnIyX2hkdyAqKTsKIAotaW50IHB2cjJfaTJjX2NsaWVudF9jbWQoc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqLHVuc2lnbmVkIGludCBjbWQsdm9pZCAqYXJnKTsKLWludCBwdnIyX2kyY19jb3JlX2NtZChzdHJ1Y3QgcHZyMl9oZHcgKix1bnNpZ25lZCBpbnQgY21kLHZvaWQgKmFyZyk7CiAKLWludCBwdnIyX2kyY19jb3JlX2NoZWNrX3N0YWxlKHN0cnVjdCBwdnIyX2hkdyAqKTsKLXZvaWQgcHZyMl9pMmNfY29yZV9zeW5jKHN0cnVjdCBwdnIyX2hkdyAqKTsKLXZvaWQgcHZyMl9pMmNfY29yZV9zdGF0dXNfcG9sbChzdHJ1Y3QgcHZyMl9oZHcgKik7Ci11bnNpZ25lZCBpbnQgcHZyMl9pMmNfcmVwb3J0KHN0cnVjdCBwdnIyX2hkdyAqLGNoYXIgKmJ1Zix1bnNpZ25lZCBpbnQgbWF4bGVuKTsKLSNkZWZpbmUgUFZSMl9JMkNfREVUQUlMX0RFQlVHICAgMHgwMDAxCi0jZGVmaW5lIFBWUjJfSTJDX0RFVEFJTF9IQU5ETEVSIDB4MDAwMgotI2RlZmluZSBQVlIyX0kyQ19ERVRBSUxfQ1RMTUFTSyAweDAwMDQKLSNkZWZpbmUgUFZSMl9JMkNfREVUQUlMX0FMTCAoXAotCVBWUjJfSTJDX0RFVEFJTF9ERUJVRyB8XAotCVBWUjJfSTJDX0RFVEFJTF9IQU5ETEVSIHxcCi0JUFZSMl9JMkNfREVUQUlMX0NUTE1BU0spCi0KLXZvaWQgcHZyMl9pMmNfcHJvYmUoc3RydWN0IHB2cjJfaGR3ICosc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqKTsKLWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCAqcHZyMl9pMmNfZ2V0X29wKHVuc2lnbmVkIGludCBpZHgpOwotCi0jZW5kaWYgLyogX19QVlJVU0IyX0kyQ19DT1JFX0ggKi8KKyNlbmRpZiAvKiBfX1BWUlVTQjJfSTJDX0FEQVBURVJfSCAqLwogCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1tYWluLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1tYWluLmMKaW5kZXggOWIzYzg3NC4uODY4OWRkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItbWFpbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLW1haW4uYwpAQCAtMTM3LDEwICsxMzcsMTAgQEAKIAlyZXQgPSB1c2JfcmVnaXN0ZXIoJnB2cl9kcml2ZXIpOwogCiAJaWYgKHJldCA9PSAwKQotCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJCXByaW50ayhLRVJOX0lORk8gInB2cnVzYjI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCiAJCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlpZiAocHZydXNiMl9kZWJ1ZykKLQkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiBEZWJ1ZyBtYXNrIGlzICVkICgweCV4KVxuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyAicHZydXNiMjogRGVidWcgbWFzayBpcyAlZCAoMHgleClcbiIsCiAJCSAgICAgICBwdnJ1c2IyX2RlYnVnLHB2cnVzYjJfZGVidWcpOwogCiAJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsInB2cl9pbml0IGNvbXBsZXRlIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYwppbmRleCBlNjQxY2Q5Li5lMjBiYTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXN5c2ZzLmMKQEAgLTYyNywxNiArNjI3LDggQEAKIAlwdnIyX3N5c2ZzX3RyYWNlKCJDcmVhdGluZyBjbGFzc19kZXYgaWQ9JXAiLGNsYXNzX2Rldik7CiAKIAljbGFzc19kZXYtPmNsYXNzID0gJmNsYXNzX3B0ci0+Y2xhc3M7Ci0JaWYgKHB2cjJfaGR3X2dldF9zbihzZnAtPmNoYW5uZWwuaGR3KSkgewotCQlkZXZfc2V0X25hbWUoY2xhc3NfZGV2LCAic24tJWx1IiwKLQkJCSBwdnIyX2hkd19nZXRfc24oc2ZwLT5jaGFubmVsLmhkdykpOwotCX0gZWxzZSBpZiAocHZyMl9oZHdfZ2V0X3VuaXRfbnVtYmVyKHNmcC0+Y2hhbm5lbC5oZHcpID49IDApIHsKLQkJZGV2X3NldF9uYW1lKGNsYXNzX2RldiwgInVuaXQtJWMiLAotCQkJIHB2cjJfaGR3X2dldF91bml0X251bWJlcihzZnAtPmNoYW5uZWwuaGR3KSArICdhJyk7Ci0JfSBlbHNlIHsKLQkJa2ZyZWUoY2xhc3NfZGV2KTsKLQkJcmV0dXJuOwotCX0KKwlkZXZfc2V0X25hbWUoY2xhc3NfZGV2LCAiJXMiLAorCQkgICAgIHB2cjJfaGR3X2dldF9kZXZpY2VfaWRlbnRpZmllcihzZnAtPmNoYW5uZWwuaGR3KSk7CiAKIAljbGFzc19kZXYtPnBhcmVudCA9ICZ1c2JfZGV2LT5kZXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXR1bmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi10dW5lci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzc3NWQxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXR1bmVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoKLSAqCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IEF1cmVsaWVuIEFsbGVhdW1lIDxzbHRzQGZyZWUuZnI+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlICJwdnJ1c2IyLmgiCi0jaW5jbHVkZSAicHZydXNiMi11dGlsLmgiCi0jaW5jbHVkZSAicHZydXNiMi10dW5lci5oIgotI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCi0jaW5jbHVkZSAicHZydXNiMi1kZWJ1Zy5oIgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLQotc3RydWN0IHB2cjJfdHVuZXJfaGFuZGxlciB7Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHc7Ci0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyIGkyY19oYW5kbGVyOwotCWludCB0eXBlX3VwZGF0ZV9mbDsKLX07Ci0KLQotc3RhdGljIHZvaWQgc2V0X3R5cGUoc3RydWN0IHB2cjJfdHVuZXJfaGFuZGxlciAqY3R4dCkKLXsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQlzdHJ1Y3QgdHVuZXJfc2V0dXAgc2V0dXA7Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgdHVuZXIgc2V0X3R5cGUoJWQpIixoZHctPnR1bmVyX3R5cGUpOwotCWlmICgoKGludCkoaGR3LT50dW5lcl90eXBlKSkgPCAwKSByZXR1cm47Ci0KLQlzZXR1cC5hZGRyID0gQUREUl9VTlNFVDsKLQlzZXR1cC50eXBlID0gaGR3LT50dW5lcl90eXBlOwotCXNldHVwLm1vZGVfbWFzayA9IFRfUkFESU8gfCBUX0FOQUxPR19UVjsKLQkvKiBXZSBtYXkgcmVhbGx5IHdhbnQgbW9kZV9tYXNrIHRvIGJlIFRfQU5BTE9HX1RWIGZvciBub3cgKi8KLQlwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxUVU5FUl9TRVRfVFlQRV9BRERSLCZzZXR1cCk7Ci0JY3R4dC0+dHlwZV91cGRhdGVfZmwgPSAwOwotfQotCi0KLXN0YXRpYyBpbnQgdHVuZXJfY2hlY2soc3RydWN0IHB2cjJfdHVuZXJfaGFuZGxlciAqY3R4dCkKLXsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQlpZiAoaGR3LT50dW5lcl91cGRhdGVkKSBjdHh0LT50eXBlX3VwZGF0ZV9mbCA9ICEwOwotCXJldHVybiBjdHh0LT50eXBlX3VwZGF0ZV9mbCAhPSAwOwotfQotCi0KLXN0YXRpYyB2b2lkIHR1bmVyX3VwZGF0ZShzdHJ1Y3QgcHZyMl90dW5lcl9oYW5kbGVyICpjdHh0KQotewotCWlmIChjdHh0LT50eXBlX3VwZGF0ZV9mbCkgc2V0X3R5cGUoY3R4dCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgcHZyMl90dW5lcl9kZXRhY2goc3RydWN0IHB2cjJfdHVuZXJfaGFuZGxlciAqY3R4dCkKLXsKLQljdHh0LT5jbGllbnQtPmhhbmRsZXIgPSBOVUxMOwotCWtmcmVlKGN0eHQpOwotfQotCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcHZyMl90dW5lcl9kZXNjcmliZShzdHJ1Y3QgcHZyMl90dW5lcl9oYW5kbGVyICpjdHh0LGNoYXIgKmJ1Zix1bnNpZ25lZCBpbnQgY250KQotewotCXJldHVybiBzY25wcmludGYoYnVmLGNudCwiaGFuZGxlcjogcHZydXNiMi10dW5lciIpOwotfQotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlcl9mdW5jdGlvbnMgdHVuZXJfZnVuY3MgPSB7Ci0JLmRldGFjaCA9ICh2b2lkICgqKSh2b2lkICopKXB2cjJfdHVuZXJfZGV0YWNoLAotCS5jaGVjayA9IChpbnQgKCopKHZvaWQgKikpdHVuZXJfY2hlY2ssCi0JLnVwZGF0ZSA9ICh2b2lkICgqKSh2b2lkICopKXR1bmVyX3VwZGF0ZSwKLQkuZGVzY3JpYmUgPSAodW5zaWduZWQgaW50ICgqKSh2b2lkICosY2hhciAqLHVuc2lnbmVkIGludCkpcHZyMl90dW5lcl9kZXNjcmliZSwKLX07Ci0KLQotaW50IHB2cjJfaTJjX3R1bmVyX3NldHVwKHN0cnVjdCBwdnIyX2hkdyAqaGR3LHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwKQotewotCXN0cnVjdCBwdnIyX3R1bmVyX2hhbmRsZXIgKmN0eHQ7Ci0JaWYgKGNwLT5oYW5kbGVyKSByZXR1cm4gMDsKLQotCWN0eHQgPSBremFsbG9jKHNpemVvZigqY3R4dCksR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjdHh0KSByZXR1cm4gMDsKLQotCWN0eHQtPmkyY19oYW5kbGVyLmZ1bmNfZGF0YSA9IGN0eHQ7Ci0JY3R4dC0+aTJjX2hhbmRsZXIuZnVuY190YWJsZSA9ICZ0dW5lcl9mdW5jczsKLQljdHh0LT50eXBlX3VwZGF0ZV9mbCA9ICEwOwotCWN0eHQtPmNsaWVudCA9IGNwOwotCWN0eHQtPmhkdyA9IGhkdzsKLQljcC0+aGFuZGxlciA9ICZjdHh0LT5pMmNfaGFuZGxlcjsKLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyAweCV4IHR1bmVyIGhhbmRsZXIgc2V0IHVwIiwKLQkJICAgY3AtPmNsaWVudC0+YWRkcik7Ci0JcmV0dXJuICEwOwotfQotCi0KLQotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzAgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMKaW5kZXggODc4ZmQ1Mi4uOWUwZjJiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYwpAQCAtOTEsNyArOTEsNyBAQAogCS5jYXJkICAgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYgcHZyLXVzYjIiLAogCS5idXNfaW5mbyAgICAgICA9ICJ1c2IiLAogCS52ZXJzaW9uICAgICAgICA9IEtFUk5FTF9WRVJTSU9OKDAsOCwwKSwKLQkuY2FwYWJpbGl0aWVzICAgPSAoVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1ZCSV9DQVBUVVJFIHwKKwkuY2FwYWJpbGl0aWVzICAgPSAoVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CiAJCQkgICBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX0FVRElPIHwgVjRMMl9DQVBfUkFESU8gfAogCQkJICAgVjRMMl9DQVBfUkVBRFdSSVRFKSwKIAkucmVzZXJ2ZWQgICAgICAgPSB7MCwwLDAsMH0KQEAgLTk1MiwxMCArOTUyLDYgQEAKIAkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCi0vKiBUZW1wb3JhcnkgaGFjayA6IHVzZSBpdnR2IGFwaSB1bnRpbCBhIHY0bDIgb25lIGlzIGF2YWlsYWJsZS4gKi8KLSNkZWZpbmUgSVZUVl9JT0NfR19DT0RFQyAgICAgICAgMHhGRkVFNzcwMwotI2RlZmluZSBJVlRWX0lPQ19TX0NPREVDICAgICAgICAweEZGRUU3NzA0Ci0JaWYgKGNtZCA9PSBJVlRWX0lPQ19HX0NPREVDIHx8IGNtZCA9PSBJVlRWX0lPQ19TX0NPREVDKSByZXR1cm4gMDsKIAlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoZmlsZSwgY21kLCBhcmcsIHB2cjJfdjRsMl9kb19pb2N0bCk7CiB9CiAKQEAgLTEyNjgsOCArMTI2NCw5IEBACiAJCWRpcC0+bWlub3JfdHlwZSA9IHB2cjJfdjRsX3R5cGVfdmlkZW87CiAJCW5yX3B0ciA9IHZpZGVvX25yOwogCQlpZiAoIWRpcC0+c3RyZWFtKSB7Ci0JCQllcnIoIkZhaWxlZCB0byBzZXQgdXAgcHZydXNiMiB2NGwgdmlkZW8gZGV2IgotCQkJICAgICIgZHVlIHRvIG1pc3Npbmcgc3RyZWFtIGluc3RhbmNlIik7CisJCQlwcl9lcnIoS0JVSUxEX01PRE5BTUUKKwkJCQkiOiBGYWlsZWQgdG8gc2V0IHVwIHB2cnVzYjIgdjRsIHZpZGVvIGRldiIKKwkJCQkiIGR1ZSB0byBtaXNzaW5nIHN0cmVhbSBpbnN0YW5jZVxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAkJYnJlYWs7CkBAIC0xMjg2LDggKzEyODMsOCBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBCYWlsIG91dCAodGhpcyBzaG91bGQgYmUgaW1wb3NzaWJsZSkgKi8KLQkJZXJyKCJGYWlsZWQgdG8gc2V0IHVwIHB2cnVzYjIgdjRsIGRldiIKLQkJICAgICIgZHVlIHRvIHVucmVjb2duaXplZCBjb25maWciKTsKKwkJcHJfZXJyKEtCVUlMRF9NT0ROQU1FICI6IEZhaWxlZCB0byBzZXQgdXAgcHZydXNiMiB2NGwgZGV2IgorCQkgICAgIiBkdWUgdG8gdW5yZWNvZ25pemVkIGNvbmZpZ1xuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEzMDMsNyArMTMwMCw4IEBACiAJCQkJICAgZGlwLT52NGxfdHlwZSwgbWluZGV2bnVtKSA8IDApICYmCiAJICAgICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmRpcC0+ZGV2YmFzZSwKIAkJCQkgICBkaXAtPnY0bF90eXBlLCAtMSkgPCAwKSkgewotCQllcnIoIkZhaWxlZCB0byByZWdpc3RlciBwdnJ1c2IyIHY0bCBkZXZpY2UiKTsKKwkJcHJfZXJyKEtCVUlMRF9NT0ROQU1FCisJCQkiOiBGYWlsZWQgdG8gcmVnaXN0ZXIgcHZydXNiMiB2NGwgZGV2aWNlXG4iKTsKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJwdnJ1c2IyOiByZWdpc3RlcmVkIGRldmljZSAlcyV1IFslc11cbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12aWRlby12NGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXZpZGVvLXY0bC5jCmluZGV4IDQwNTk2NDguLmIzODYyZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXZpZGVvLXY0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXZpZGVvLXY0bC5jCkBAIC0yOCw3ICsyOCw3IEBACiAqLwogCiAjaW5jbHVkZSAicHZydXNiMi12aWRlby12NGwuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLWkyYy1jbWQtdjRsMi5oIgorCiAKIAogI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCkBAIC0zOSwxNSArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCi1zdHJ1Y3QgcHZyMl92NGxfZGVjb2RlciB7Ci0Jc3RydWN0IHB2cjJfaTJjX2hhbmRsZXIgaGFuZGxlcjsKLQlzdHJ1Y3QgcHZyMl9kZWNvZGVyX2N0cmwgY3RybDsKLQlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHc7Ci0JdW5zaWduZWQgbG9uZyBzdGFsZV9tYXNrOwotfTsKLQotCiBzdHJ1Y3Qgcm91dGluZ19zY2hlbWUgewogCWNvbnN0IGludCAqZGVmOwogCXVuc2lnbmVkIGludCBjbnQ7CkBAIC02MywxOTAgKzU0LDUxIEBACiAJW1BWUjJfQ1ZBTF9JTlBVVF9TVklERU9dID0gIFNBQTcxMTVfU1ZJREVPMiwKIH07CiAKK3N0YXRpYyBjb25zdCBpbnQgcm91dGluZ19zY2hlbWUxW10gPSB7CisJW1BWUjJfQ1ZBTF9JTlBVVF9UVl0gPSBTQUE3MTE1X0NPTVBPU0lURTQsCisJW1BWUjJfQ1ZBTF9JTlBVVF9SQURJT10gPSBTQUE3MTE1X0NPTVBPU0lURTUsCisJW1BWUjJfQ1ZBTF9JTlBVVF9DT01QT1NJVEVdID0gU0FBNzExNV9DT01QT1NJVEUzLAorCVtQVlIyX0NWQUxfSU5QVVRfU1ZJREVPXSA9ICBTQUE3MTE1X1NWSURFTzIsIC8qIG9yIFNWSURFTzAsIGl0IHNlZW1zICovCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJvdXRpbmdfc2NoZW1lIHJvdXRpbmdfc2NoZW1lc1tdID0gewogCVtQVlIyX1JPVVRJTkdfU0NIRU1FX0hBVVBQQVVHRV0gPSB7CiAJCS5kZWYgPSByb3V0aW5nX3NjaGVtZTAsCiAJCS5jbnQgPSBBUlJBWV9TSVpFKHJvdXRpbmdfc2NoZW1lMCksCiAJfSwKKwlbUFZSMl9ST1VUSU5HX1NDSEVNRV9PTkFJUl0gPSB7CisJCS5kZWYgPSByb3V0aW5nX3NjaGVtZTEsCisJCS5jbnQgPSBBUlJBWV9TSVpFKHJvdXRpbmdfc2NoZW1lMSksCisJfSwKIH07CiAKLXN0YXRpYyB2b2lkIHNldF9pbnB1dChzdHJ1Y3QgcHZyMl92NGxfZGVjb2RlciAqY3R4dCkKK3ZvaWQgcHZyMl9zYWE3MTE1X3N1YmRldl91cGRhdGUoc3RydWN0IHB2cjJfaGR3ICpoZHcsIHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjdHh0LT5oZHc7Ci0Jc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKLQljb25zdCBzdHJ1Y3Qgcm91dGluZ19zY2hlbWUgKnNwOwotCXVuc2lnbmVkIGludCBzaWQgPSBoZHctPmhkd19kZXNjLT5zaWduYWxfcm91dGluZ19zY2hlbWU7Ci0KLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyB2NGwyIHNldF9pbnB1dCglZCkiLGhkdy0+aW5wdXRfdmFsKTsKLQotCWlmICgoc2lkIDwgQVJSQVlfU0laRShyb3V0aW5nX3NjaGVtZXMpKSAmJgotCSAgICAoKHNwID0gcm91dGluZ19zY2hlbWVzICsgc2lkKSAhPSBOVUxMKSAmJgotCSAgICAoaGR3LT5pbnB1dF92YWwgPj0gMCkgJiYKLQkgICAgKGhkdy0+aW5wdXRfdmFsIDwgc3AtPmNudCkpIHsKLQkJcm91dGUuaW5wdXQgPSBzcC0+ZGVmW2hkdy0+aW5wdXRfdmFsXTsKLQl9IGVsc2UgewotCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKLQkJCSAgICIqKiogV0FSTklORyAqKiogaTJjIHY0bDIgc2V0X2lucHV0OiIKLQkJCSAgICIgSW52YWxpZCByb3V0aW5nIHNjaGVtZSAoJXUpIGFuZC9vciBpbnB1dCAoJWQpIiwKLQkJCSAgIHNpZCxoZHctPmlucHV0X3ZhbCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlyb3V0ZS5vdXRwdXQgPSAwOwotCXB2cjJfaTJjX2NsaWVudF9jbWQoY3R4dC0+Y2xpZW50LFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HLCZyb3V0ZSk7Ci19Ci0KLQotc3RhdGljIGludCBjaGVja19pbnB1dChzdHJ1Y3QgcHZyMl92NGxfZGVjb2RlciAqY3R4dCkKLXsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQlyZXR1cm4gaGR3LT5pbnB1dF9kaXJ0eSAhPSAwOwotfQotCi0KLXN0YXRpYyB2b2lkIHNldF9hdWRpbyhzdHJ1Y3QgcHZyMl92NGxfZGVjb2RlciAqY3R4dCkKLXsKLQl1MzIgdmFsOwotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3R4dC0+aGR3OwotCi0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgdjRsMiBzZXRfYXVkaW8gJWQiLAotCQkgICBoZHctPnNyYXRlX3ZhbCk7Ci0Jc3dpdGNoIChoZHctPnNyYXRlX3ZhbCkgewotCWRlZmF1bHQ6Ci0JY2FzZSBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMDoKLQkJdmFsID0gNDgwMDA7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDQxMDA6Ci0JCXZhbCA9IDQ0MTAwOwotCQlicmVhazsKLQljYXNlIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzMyMDAwOgotCQl2YWwgPSAzMjAwMDsKLQkJYnJlYWs7Ci0JfQotCXB2cjJfaTJjX2NsaWVudF9jbWQoY3R4dC0+Y2xpZW50LFZJRElPQ19JTlRfQVVESU9fQ0xPQ0tfRlJFUSwmdmFsKTsKLX0KLQotCi1zdGF0aWMgaW50IGNoZWNrX2F1ZGlvKHN0cnVjdCBwdnIyX3Y0bF9kZWNvZGVyICpjdHh0KQotewotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3R4dC0+aGR3OwotCXJldHVybiBoZHctPnNyYXRlX2RpcnR5ICE9IDA7Ci19Ci0KLQotc3RydWN0IHB2cjJfdjRsX2RlY29kZXJfb3BzIHsKLQl2b2lkICgqdXBkYXRlKShzdHJ1Y3QgcHZyMl92NGxfZGVjb2RlciAqKTsKLQlpbnQgKCpjaGVjaykoc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgKik7Ci19OwotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl92NGxfZGVjb2Rlcl9vcHMgZGVjb2Rlcl9vcHNbXSA9IHsKLQl7IC51cGRhdGUgPSBzZXRfaW5wdXQsIC5jaGVjayA9IGNoZWNrX2lucHV0fSwKLQl7IC51cGRhdGUgPSBzZXRfYXVkaW8sIC5jaGVjayA9IGNoZWNrX2F1ZGlvfSwKLX07Ci0KLQotc3RhdGljIHZvaWQgZGVjb2Rlcl9kZXRhY2goc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgKmN0eHQpCi17Ci0JY3R4dC0+Y2xpZW50LT5oYW5kbGVyID0gTlVMTDsKLQlwdnIyX2hkd19zZXRfZGVjb2RlcihjdHh0LT5oZHcsTlVMTCk7Ci0Ja2ZyZWUoY3R4dCk7Ci19Ci0KLQotc3RhdGljIGludCBkZWNvZGVyX2NoZWNrKHN0cnVjdCBwdnIyX3Y0bF9kZWNvZGVyICpjdHh0KQotewotCXVuc2lnbmVkIGxvbmcgbXNrOwotCXVuc2lnbmVkIGludCBpZHg7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoZGVjb2Rlcl9vcHMpOyBpZHgrKykgewotCQltc2sgPSAxIDw8IGlkeDsKLQkJaWYgKGN0eHQtPnN0YWxlX21hc2sgJiBtc2spIGNvbnRpbnVlOwotCQlpZiAoZGVjb2Rlcl9vcHNbaWR4XS5jaGVjayhjdHh0KSkgewotCQkJY3R4dC0+c3RhbGVfbWFzayB8PSBtc2s7CisJaWYgKGhkdy0+aW5wdXRfZGlydHkgfHwgaGR3LT5mb3JjZV9kaXJ0eSkgeworCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCQljb25zdCBzdHJ1Y3Qgcm91dGluZ19zY2hlbWUgKnNwOworCQl1bnNpZ25lZCBpbnQgc2lkID0gaGR3LT5oZHdfZGVzYy0+c2lnbmFsX3JvdXRpbmdfc2NoZW1lOworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgdjRsMiBzZXRfaW5wdXQoJWQpIiwKKwkJCSAgIGhkdy0+aW5wdXRfdmFsKTsKKwkJaWYgKChzaWQgPCBBUlJBWV9TSVpFKHJvdXRpbmdfc2NoZW1lcykpICYmCisJCSAgICAoKHNwID0gcm91dGluZ19zY2hlbWVzICsgc2lkKSAhPSBOVUxMKSAmJgorCQkgICAgKGhkdy0+aW5wdXRfdmFsID49IDApICYmCisJCSAgICAoaGR3LT5pbnB1dF92YWwgPCBzcC0+Y250KSkgeworCQkJcm91dGUuaW5wdXQgPSBzcC0+ZGVmW2hkdy0+aW5wdXRfdmFsXTsKKwkJfSBlbHNlIHsKKwkJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAorCQkJCSAgICIqKiogV0FSTklORyAqKiogc3ViZGV2IHY0bDIgc2V0X2lucHV0OiIKKwkJCQkgICAiIEludmFsaWQgcm91dGluZyBzY2hlbWUgKCV1KSIKKwkJCQkgICAiIGFuZC9vciBpbnB1dCAoJWQpIiwKKwkJCQkgICBzaWQsIGhkdy0+aW5wdXRfdmFsKTsKKwkJCXJldHVybjsKIAkJfQotCX0KLQlyZXR1cm4gY3R4dC0+c3RhbGVfbWFzayAhPSAwOwotfQotCi0KLXN0YXRpYyB2b2lkIGRlY29kZXJfdXBkYXRlKHN0cnVjdCBwdnIyX3Y0bF9kZWNvZGVyICpjdHh0KQotewotCXVuc2lnbmVkIGxvbmcgbXNrOwotCXVuc2lnbmVkIGludCBpZHg7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoZGVjb2Rlcl9vcHMpOyBpZHgrKykgewotCQltc2sgPSAxIDw8IGlkeDsKLQkJaWYgKCEoY3R4dC0+c3RhbGVfbWFzayAmIG1zaykpIGNvbnRpbnVlOwotCQljdHh0LT5zdGFsZV9tYXNrICY9IH5tc2s7Ci0JCWRlY29kZXJfb3BzW2lkeF0udXBkYXRlKGN0eHQpOworCQlyb3V0ZS5vdXRwdXQgPSAwOworCQlzZC0+b3BzLT52aWRlby0+c19yb3V0aW5nKHNkLCAmcm91dGUpOwogCX0KIH0KIAogCi1zdGF0aWMgaW50IGRlY29kZXJfZGV0ZWN0KHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwKQotewotCS8qIEF0dGVtcHQgdG8gcXVlcnkgdGhlIGRlY29kZXIgLSBsZXQncyBzZWUgaWYgaXQgd2lsbCBhbnN3ZXIgKi8KLQlzdHJ1Y3QgdjRsMl90dW5lciB2dDsKLQlpbnQgcmV0OwotCi0JbWVtc2V0KCZ2dCwwLHNpemVvZih2dCkpOwotCXJldCA9IHB2cjJfaTJjX2NsaWVudF9jbWQoY3AsVklESU9DX0dfVFVORVIsJnZ0KTsKLQlyZXR1cm4gcmV0ID09IDA7IC8qIFJldHVybiB0cnVlIGlmIGl0IGFuc3dlcmVkICovCi19Ci0KLQotc3RhdGljIHZvaWQgZGVjb2Rlcl9lbmFibGUoc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgKmN0eHQsaW50IGZsKQotewotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIHY0bDIgZGVjb2Rlcl9lbmFibGUoJWQpIixmbCk7Ci0JcHZyMl92NGwyX2NtZF9zdHJlYW0oY3R4dC0+Y2xpZW50LGZsKTsKLX0KLQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlY29kZXJfZGVzY3JpYmUoc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgKmN0eHQsY2hhciAqYnVmLHVuc2lnbmVkIGludCBjbnQpCi17Ci0JcmV0dXJuIHNjbnByaW50ZihidWYsY250LCJoYW5kbGVyOiBwdnJ1c2IyLXZpZGVvLXY0bCIpOwotfQotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlcl9mdW5jdGlvbnMgaGZ1bmNzID0gewotCS5kZXRhY2ggPSAodm9pZCAoKikodm9pZCAqKSlkZWNvZGVyX2RldGFjaCwKLQkuY2hlY2sgPSAoaW50ICgqKSh2b2lkICopKWRlY29kZXJfY2hlY2ssCi0JLnVwZGF0ZSA9ICh2b2lkICgqKSh2b2lkICopKWRlY29kZXJfdXBkYXRlLAotCS5kZXNjcmliZSA9ICh1bnNpZ25lZCBpbnQgKCopKHZvaWQgKixjaGFyICosdW5zaWduZWQgaW50KSlkZWNvZGVyX2Rlc2NyaWJlLAotfTsKLQotCi1pbnQgcHZyMl9pMmNfZGVjb2Rlcl92NGxfc2V0dXAoc3RydWN0IHB2cjJfaGR3ICpoZHcsCi0JCQkgICAgICAgc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3ApCi17Ci0Jc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgKmN0eHQ7Ci0KLQlpZiAoaGR3LT5kZWNvZGVyX2N0cmwpIHJldHVybiAwOwotCWlmIChjcC0+aGFuZGxlcikgcmV0dXJuIDA7Ci0JaWYgKCFkZWNvZGVyX2RldGVjdChjcCkpIHJldHVybiAwOwotCi0JY3R4dCA9IGt6YWxsb2Moc2l6ZW9mKCpjdHh0KSxHRlBfS0VSTkVMKTsKLQlpZiAoIWN0eHQpIHJldHVybiAwOwotCi0JY3R4dC0+aGFuZGxlci5mdW5jX2RhdGEgPSBjdHh0OwotCWN0eHQtPmhhbmRsZXIuZnVuY190YWJsZSA9ICZoZnVuY3M7Ci0JY3R4dC0+Y3RybC5jdHh0ID0gY3R4dDsKLQljdHh0LT5jdHJsLmRldGFjaCA9ICh2b2lkICgqKSh2b2lkICopKWRlY29kZXJfZGV0YWNoOwotCWN0eHQtPmN0cmwuZW5hYmxlID0gKHZvaWQgKCopKHZvaWQgKixpbnQpKWRlY29kZXJfZW5hYmxlOwotCWN0eHQtPmNsaWVudCA9IGNwOwotCWN0eHQtPmhkdyA9IGhkdzsKLQljdHh0LT5zdGFsZV9tYXNrID0gKDEgPDwgQVJSQVlfU0laRShkZWNvZGVyX29wcykpIC0gMTsKLQlwdnIyX2hkd19zZXRfZGVjb2RlcihoZHcsJmN0eHQtPmN0cmwpOwotCWNwLT5oYW5kbGVyID0gJmN0eHQtPmhhbmRsZXI7Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgMHgleCBzYWE3MTF4IFY0TDIgaGFuZGxlciBzZXQgdXAiLAotCQkgICBjcC0+Y2xpZW50LT5hZGRyKTsKLQlyZXR1cm4gITA7Ci19Ci0KLQotCi0KIC8qCiAgIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6CiAgICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12aWRlby12NGwuaAppbmRleCA0ZmY1Yjg5Li4zYjBiZDVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12aWRlby12NGwuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12aWRlby12NGwuaApAQCAtMzIsMTEgKzMyLDggQEAKICovCiAKIAotCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY29yZS5oIgotCi1pbnQgcHZyMl9pMmNfZGVjb2Rlcl92NGxfc2V0dXAoc3RydWN0IHB2cjJfaGR3ICosc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqKTsKLQorI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCit2b2lkIHB2cjJfc2FhNzExNV9zdWJkZXZfdXBkYXRlKHN0cnVjdCBwdnIyX2hkdyAqLCBzdHJ1Y3QgdjRsMl9zdWJkZXYgKik7CiAKICNlbmRpZiAvKiBfX1BWUlVTQjJfVklERU9fVjRMX0ggKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi13bTg3NzUuYwppbmRleCBmNmZjZjBhLi4xNjcwYWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi13bTg3NzUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi13bTg3NzUuYwpAQCAtMjcsNyArMjcsNiBAQAogKi8KIAogI2luY2x1ZGUgInB2cnVzYjItd204Nzc1LmgiCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY21kLXY0bDIuaCIKIAogCiAjaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKQEAgLTM3LDEyOCArMzYsMzEgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotc3RydWN0IHB2cjJfdjRsX3dtODc3NSB7Ci0Jc3RydWN0IHB2cjJfaTJjX2hhbmRsZXIgaGFuZGxlcjsKLQlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHc7Ci0JdW5zaWduZWQgbG9uZyBzdGFsZV9tYXNrOwotfTsKLQotCi1zdGF0aWMgdm9pZCBzZXRfaW5wdXQoc3RydWN0IHB2cjJfdjRsX3dtODc3NSAqY3R4dCkKK3ZvaWQgcHZyMl93bTg3NzVfc3ViZGV2X3VwZGF0ZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKLQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3R4dC0+aGR3OworCWlmIChoZHctPmlucHV0X2RpcnR5IHx8IGhkdy0+Zm9yY2VfZGlydHkpIHsKKwkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKIAotCW1lbXNldCgmcm91dGUsMCxzaXplb2Yocm91dGUpKTsKKwkJbWVtc2V0KCZyb3V0ZSwgMCwgc2l6ZW9mKHJvdXRlKSk7CiAKLQlzd2l0Y2goaGR3LT5pbnB1dF92YWwpIHsKLQljYXNlIFBWUjJfQ1ZBTF9JTlBVVF9SQURJTzoKLQkJcm91dGUuaW5wdXQgPSAxOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBBbGwgb3RoZXIgY2FzZXMganVzdCB1c2UgdGhlIHNlY29uZCBpbnB1dCAqLwotCQlyb3V0ZS5pbnB1dCA9IDI7Ci0JCWJyZWFrOwotCX0KLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyB3bTg3NzUgc2V0X2lucHV0KHZhbD0lZCByb3V0ZT0weCV4KSIsCi0JCSAgIGhkdy0+aW5wdXRfdmFsLHJvdXRlLmlucHV0KTsKLQotCXB2cjJfaTJjX2NsaWVudF9jbWQoY3R4dC0+Y2xpZW50LFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCZyb3V0ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgY2hlY2tfaW5wdXQoc3RydWN0IHB2cjJfdjRsX3dtODc3NSAqY3R4dCkKLXsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQlyZXR1cm4gaGR3LT5pbnB1dF9kaXJ0eSAhPSAwOwotfQotCi0KLXN0cnVjdCBwdnIyX3Y0bF93bTg3NzVfb3BzIHsKLQl2b2lkICgqdXBkYXRlKShzdHJ1Y3QgcHZyMl92NGxfd204Nzc1ICopOwotCWludCAoKmNoZWNrKShzdHJ1Y3QgcHZyMl92NGxfd204Nzc1ICopOwotfTsKLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfdjRsX3dtODc3NV9vcHMgd204Nzc1X29wc1tdID0gewotCXsgLnVwZGF0ZSA9IHNldF9pbnB1dCwgLmNoZWNrID0gY2hlY2tfaW5wdXR9LAotfTsKLQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHdtODc3NV9kZXNjcmliZShzdHJ1Y3QgcHZyMl92NGxfd204Nzc1ICpjdHh0LAotCQkJCSAgICAgY2hhciAqYnVmLHVuc2lnbmVkIGludCBjbnQpCi17Ci0JcmV0dXJuIHNjbnByaW50ZihidWYsY250LCJoYW5kbGVyOiBwdnJ1c2IyLXdtODc3NSIpOwotfQotCi0KLXN0YXRpYyB2b2lkIHdtODc3NV9kZXRhY2goc3RydWN0IHB2cjJfdjRsX3dtODc3NSAqY3R4dCkKLXsKLQljdHh0LT5jbGllbnQtPmhhbmRsZXIgPSBOVUxMOwotCWtmcmVlKGN0eHQpOwotfQotCi0KLXN0YXRpYyBpbnQgd204Nzc1X2NoZWNrKHN0cnVjdCBwdnIyX3Y0bF93bTg3NzUgKmN0eHQpCi17Ci0JdW5zaWduZWQgbG9uZyBtc2s7Ci0JdW5zaWduZWQgaW50IGlkeDsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRSh3bTg3NzVfb3BzKTsgaWR4KyspIHsKLQkJbXNrID0gMSA8PCBpZHg7Ci0JCWlmIChjdHh0LT5zdGFsZV9tYXNrICYgbXNrKSBjb250aW51ZTsKLQkJaWYgKHdtODc3NV9vcHNbaWR4XS5jaGVjayhjdHh0KSkgewotCQkJY3R4dC0+c3RhbGVfbWFzayB8PSBtc2s7CisJCXN3aXRjaCAoaGR3LT5pbnB1dF92YWwpIHsKKwkJY2FzZSBQVlIyX0NWQUxfSU5QVVRfUkFESU86CisJCQlyb3V0ZS5pbnB1dCA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIEFsbCBvdGhlciBjYXNlcyBqdXN0IHVzZSB0aGUgc2Vjb25kIGlucHV0ICovCisJCQlyb3V0ZS5pbnB1dCA9IDI7CisJCQlicmVhazsKIAkJfQotCX0KLQlyZXR1cm4gY3R4dC0+c3RhbGVfbWFzayAhPSAwOwotfQorCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgd204Nzc1IgorCQkJICAgIiBzZXRfaW5wdXQodmFsPSVkIHJvdXRlPTB4JXgpIiwKKwkJCSAgIGhkdy0+aW5wdXRfdmFsLCByb3V0ZS5pbnB1dCk7CiAKLQotc3RhdGljIHZvaWQgd204Nzc1X3VwZGF0ZShzdHJ1Y3QgcHZyMl92NGxfd204Nzc1ICpjdHh0KQotewotCXVuc2lnbmVkIGxvbmcgbXNrOwotCXVuc2lnbmVkIGludCBpZHg7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUod204Nzc1X29wcyk7IGlkeCsrKSB7Ci0JCW1zayA9IDEgPDwgaWR4OwotCQlpZiAoIShjdHh0LT5zdGFsZV9tYXNrICYgbXNrKSkgY29udGludWU7Ci0JCWN0eHQtPnN0YWxlX21hc2sgJj0gfm1zazsKLQkJd204Nzc1X29wc1tpZHhdLnVwZGF0ZShjdHh0KTsKKwkJc2QtPm9wcy0+YXVkaW8tPnNfcm91dGluZyhzZCwgJnJvdXRlKTsKIAl9CiB9CiAKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19oYW5kbGVyX2Z1bmN0aW9ucyBoZnVuY3MgPSB7Ci0JLmRldGFjaCA9ICh2b2lkICgqKSh2b2lkICopKXdtODc3NV9kZXRhY2gsCi0JLmNoZWNrID0gKGludCAoKikodm9pZCAqKSl3bTg3NzVfY2hlY2ssCi0JLnVwZGF0ZSA9ICh2b2lkICgqKSh2b2lkICopKXdtODc3NV91cGRhdGUsCi0JLmRlc2NyaWJlID0gKHVuc2lnbmVkIGludCAoKikodm9pZCAqLGNoYXIgKix1bnNpZ25lZCBpbnQpKXdtODc3NV9kZXNjcmliZSwKLX07Ci0KLQotaW50IHB2cjJfaTJjX3dtODc3NV9zZXR1cChzdHJ1Y3QgcHZyMl9oZHcgKmhkdyxzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCkKLXsKLQlzdHJ1Y3QgcHZyMl92NGxfd204Nzc1ICpjdHh0OwotCi0JaWYgKGNwLT5oYW5kbGVyKSByZXR1cm4gMDsKLQotCWN0eHQgPSBremFsbG9jKHNpemVvZigqY3R4dCksR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjdHh0KSByZXR1cm4gMDsKLQotCWN0eHQtPmhhbmRsZXIuZnVuY19kYXRhID0gY3R4dDsKLQljdHh0LT5oYW5kbGVyLmZ1bmNfdGFibGUgPSAmaGZ1bmNzOwotCWN0eHQtPmNsaWVudCA9IGNwOwotCWN0eHQtPmhkdyA9IGhkdzsKLQljdHh0LT5zdGFsZV9tYXNrID0gKDEgPDwgQVJSQVlfU0laRSh3bTg3NzVfb3BzKSkgLSAxOwotCWNwLT5oYW5kbGVyID0gJmN0eHQtPmhhbmRsZXI7Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgMHgleCB3bTg3NzUgVjRMMiBoYW5kbGVyIHNldCB1cCIsCi0JCSAgIGNwLT5jbGllbnQtPmFkZHIpOwotCXJldHVybiAhMDsKLX0KLQotCi0KIAogLyoKICAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXdtODc3NS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmgKaW5kZXggODA3MDkwOS4uMDU3N2JjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmgKQEAgLTM0LDkgKzM0LDkgQEAKIAogCiAKLSNpbmNsdWRlICJwdnJ1c2IyLWkyYy1jb3JlLmgiCisjaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKIAotaW50IHB2cjJfaTJjX3dtODc3NV9zZXR1cChzdHJ1Y3QgcHZyMl9oZHcgKixzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICopOwordm9pZCBwdnIyX3dtODc3NV9zdWJkZXZfdXBkYXRlKHN0cnVjdCBwdnIyX2hkdyAqLCBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKTsKIAogCiAjZW5kaWYgLyogX19QVlJVU0IyX1dNODc3NV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvS2NvbmZpZwppbmRleCA3Mjk4Y2YyLi44YjlmMGFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL0tjb25maWcKQEAgLTM1LDMgKzM1LDEzIEBACiAJICBTYXkgWSBoZXJlIGluIG9yZGVyIHRvIGhhdmUgdGhlIHB3YyBkcml2ZXIgZ2VuZXJhdGUgdmVyYm9zZSBkZWJ1Z2dpbmcKIAkgIG1lc3NhZ2VzLgogCSAgQSBzcGVjaWFsIG1vZHVsZSBvcHRpb25zICd0cmFjZScgaXMgdXNlZCB0byBjb250cm9sIHRoZSB2ZXJib3NpdHkuCisKK2NvbmZpZyBVU0JfUFdDX0lOUFVUX0VWREVWCisJYm9vbCAiVVNCIFBoaWxpcHMgQ2FtZXJhcyBpbnB1dCBldmVudHMgZGV2aWNlIHN1cHBvcnQiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBVU0JfUFdDICYmIElOUFVUCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gbWFrZXMgVVNCIFBoaWxpcHMgY2FtZXJhcyByZWdpc3RlciB0aGUgc25hcHNob3QgYnV0dG9uIGFzCisJICBhbiBpbnB1dCBkZXZpY2UgdG8gcmVwb3J0IGJ1dHRvbiBldmVudHMuCisKKwkgIElmIHlvdSBhcmUgaW4gZG91YnQsIHNheSBZLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtaWYuYwppbmRleCAwZDgxMDE4Li43YzU0MmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtaWYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtaWYuYwpAQCAtNTMsNiArNTMsNyBAQAogICAgLSBYYXZpZXIgUm9jaGU6IFF1aWNrQ2FtIFBybyA0MDAwIElECiAgICAtIEplbnMgS251ZHNlbjogUXVpY2tDYW0gWm9vbSBJRAogICAgLSBKLiBEZWJlcnQ6IFF1aWNrQ2FtIGZvciBOb3RlYm9va3MgSUQKKyAgIC0gUGhhbSBUaGFuaCBOYW06IHdlYmNhbSBzbmFwc2hvdCBidXR0b24gYXMgYW4gZXZlbnQgaW5wdXQgZGV2aWNlCiAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTYxLDYgKzYyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2lmZGVmIENPTkZJR19VU0JfUFdDX0lOUFVUX0VWREVWCisjaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+CisjZW5kaWYKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKQEAgLTU4Niw2ICs1OTAsMjMgQEAKIAkJCQlwZGV2LT52ZnJhbWVfY291bnQpOwogfQogCitzdGF0aWMgdm9pZCBwd2Nfc25hcHNob3RfYnV0dG9uKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgZG93bikKK3sKKwlpZiAoZG93bikgeworCQlQV0NfVFJBQ0UoIlNuYXBzaG90IGJ1dHRvbiBwcmVzc2VkLlxuIik7CisJCXBkZXYtPnNuYXBzaG90X2J1dHRvbl9zdGF0dXMgPSAxOworCX0gZWxzZSB7CisJCVBXQ19UUkFDRSgiU25hcHNob3QgYnV0dG9uIHJlbGVhc2VkLlxuIik7CisJfQorCisjaWZkZWYgQ09ORklHX1VTQl9QV0NfSU5QVVRfRVZERVYKKwlpZiAocGRldi0+YnV0dG9uX2RldikgeworCQlpbnB1dF9yZXBvcnRfa2V5KHBkZXYtPmJ1dHRvbl9kZXYsIEJUTl8wLCBkb3duKTsKKwkJaW5wdXRfc3luYyhwZGV2LT5idXR0b25fZGV2KTsKKwl9CisjZW5kaWYKK30KKwogc3RhdGljIGludCBwd2NfcmN2X3Nob3J0X3BhY2tldChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgY29uc3Qgc3RydWN0IHB3Y19mcmFtZV9idWYgKmZidWYpCiB7CiAJaW50IGF3YWtlID0gMDsKQEAgLTYwMywxMyArNjI0LDcgQEAKIAkJCXBkZXYtPnZmcmFtZXNfZXJyb3IrKzsKIAkJfQogCQlpZiAoKHB0clswXSBeIHBkZXYtPnZtaXJyb3IpICYgMHgwMSkgewotCQkJaWYgKHB0clswXSAmIDB4MDEpIHsKLQkJCQlwZGV2LT5zbmFwc2hvdF9idXR0b25fc3RhdHVzID0gMTsKLQkJCQlQV0NfVFJBQ0UoIlNuYXBzaG90IGJ1dHRvbiBwcmVzc2VkLlxuIik7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlQV0NfVFJBQ0UoIlNuYXBzaG90IGJ1dHRvbiByZWxlYXNlZC5cbiIpOwotCQkJfQorCQkJcHdjX3NuYXBzaG90X2J1dHRvbihwZGV2LCBwdHJbMF0gJiAweDAxKTsKIAkJfQogCQlpZiAoKHB0clswXSBeIHBkZXYtPnZtaXJyb3IpICYgMHgwMikgewogCQkJaWYgKHB0clswXSAmIDB4MDIpCkBAIC02MzMsMTIgKzY0OCw3IEBACiAJZWxzZSBpZiAocGRldi0+dHlwZSA9PSA3NDAgfHwgcGRldi0+dHlwZSA9PSA3MjApIHsKIAkJdW5zaWduZWQgY2hhciAqcHRyID0gKHVuc2lnbmVkIGNoYXIgKilmYnVmLT5kYXRhOwogCQlpZiAoKHB0clswXSBeIHBkZXYtPnZtaXJyb3IpICYgMHgwMSkgewotCQkJaWYgKHB0clswXSAmIDB4MDEpIHsKLQkJCQlwZGV2LT5zbmFwc2hvdF9idXR0b25fc3RhdHVzID0gMTsKLQkJCQlQV0NfVFJBQ0UoIlNuYXBzaG90IGJ1dHRvbiBwcmVzc2VkLlxuIik7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJUFdDX1RSQUNFKCJTbmFwc2hvdCBidXR0b24gcmVsZWFzZWQuXG4iKTsKKwkJCXB3Y19zbmFwc2hvdF9idXR0b24ocGRldiwgcHRyWzBdICYgMHgwMSk7CiAJCX0KIAkJcGRldi0+dm1pcnJvciA9IHB0clswXSAmIDB4MDM7CiAJfQpAQCAtMTExNSw2ICsxMTI1LDcgQEAKIAl9CiAKIAltdXRleF9sb2NrKCZwZGV2LT5tb2Rsb2NrKTsKKwlwd2NfY29uc3RydWN0KHBkZXYpOyAvKiBzZXQgbWluL21heCBzaXplcyBjb3JyZWN0ICovCiAJaWYgKCFwZGV2LT51c2JfaW5pdCkgewogCQlQV0NfREVCVUdfT1BFTigiRG9pbmcgZmlyc3QgdGltZSBpbml0aWFsaXphdGlvbi5cbiIpOwogCQlwZGV2LT51c2JfaW5pdCA9IDE7CkBAIC0xMTM5LDcgKzExNTAsNiBAQAogCWlmIChwd2Nfc2V0X2xlZHMocGRldiwgbGVkX29uLCBsZWRfb2ZmKSA8IDApCiAJCVBXQ19ERUJVR19PUEVOKCJGYWlsZWQgdG8gc2V0IExFRCBvbi9vZmYgdGltZS5cbiIpOwogCi0JcHdjX2NvbnN0cnVjdChwZGV2KTsgLyogc2V0IG1pbi9tYXggc2l6ZXMgY29ycmVjdCAqLwogCiAJLyogU28gZmFyLCBzbyBnb29kLiBBbGxvY2F0ZSBtZW1vcnkuICovCiAJaSA9IHB3Y19hbGxvY2F0ZV9idWZmZXJzKHBkZXYpOwpAQCAtMTIxNiw2ICsxMjI2LDE1IEBACiB7CiAJcHdjX3JlbW92ZV9zeXNmc19maWxlcyhwZGV2LT52ZGV2KTsKIAl2aWRlb191bnJlZ2lzdGVyX2RldmljZShwZGV2LT52ZGV2KTsKKworI2lmZGVmIENPTkZJR19VU0JfUFdDX0lOUFVUX0VWREVWCisJaWYgKHBkZXYtPmJ1dHRvbl9kZXYpIHsKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UocGRldi0+YnV0dG9uX2Rldik7CisJCWlucHV0X2ZyZWVfZGV2aWNlKHBkZXYtPmJ1dHRvbl9kZXYpOworCQlrZnJlZShwZGV2LT5idXR0b25fZGV2LT5waHlzKTsKKwkJcGRldi0+YnV0dG9uX2RldiA9IE5VTEw7CisJfQorI2VuZGlmCiB9CiAKIC8qIE5vdGUgdGhhdCBhbGwgY2xlYW51cCBpcyBkb25lIGluIHRoZSByZXZlcnNlIG9yZGVyIGFzIGluIF9vcGVuICovCkBAIC0xNDgzLDYgKzE1MDIsOSBAQAogCWludCBmZWF0dXJlcyA9IDA7CiAJaW50IHZpZGVvX25yID0gLTE7IC8qIGRlZmF1bHQ6IHVzZSBuZXh0IGF2YWlsYWJsZSBkZXZpY2UgKi8KIAljaGFyIHNlcmlhbF9udW1iZXJbMzBdLCAqbmFtZTsKKyNpZmRlZiBDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVgorCWNoYXIgKnBoeXMgPSBOVUxMOworI2VuZGlmCiAKIAl2ZW5kb3JfaWQgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKIAlwcm9kdWN0X2lkID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOwpAQCAtMTgwNyw2ICsxODI5LDM1IEBACiAJcHdjX3NldF9sZWRzKHBkZXYsIDAsIDApOwogCXB3Y19jYW1lcmFfcG93ZXIocGRldiwgMCk7CiAKKyNpZmRlZiBDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVgorCS8qIHJlZ2lzdGVyIHdlYmNhbSBzbmFwc2hvdCBidXR0b24gaW5wdXQgZGV2aWNlICovCisJcGRldi0+YnV0dG9uX2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghcGRldi0+YnV0dG9uX2RldikgeworCQlQV0NfRVJST1IoIkVyciwgaW5zdWZmaWNpZW50IG1lbW9yeSBmb3Igd2ViY2FtIHNuYXBzaG90IGJ1dHRvbiBkZXZpY2UuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBkZXYtPmJ1dHRvbl9kZXYtPm5hbWUgPSAiUFdDIHNuYXBzaG90IGJ1dHRvbiI7CisJcGh5cyA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCJ1c2ItJXMtJXMiLCBwZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBwZGV2LT51ZGV2LT5kZXZwYXRoKTsKKwlpZiAoIXBoeXMpIHsKKwkJaW5wdXRfZnJlZV9kZXZpY2UocGRldi0+YnV0dG9uX2Rldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlwZGV2LT5idXR0b25fZGV2LT5waHlzID0gcGh5czsKKwl1c2JfdG9faW5wdXRfaWQocGRldi0+dWRldiwgJnBkZXYtPmJ1dHRvbl9kZXYtPmlkKTsKKwlwZGV2LT5idXR0b25fZGV2LT5kZXYucGFyZW50ID0gJnBkZXYtPnVkZXYtPmRldjsKKwlwZGV2LT5idXR0b25fZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSk7CisJcGRldi0+YnV0dG9uX2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl8wKV0gPSBCSVRfTUFTSyhCVE5fMCk7CisKKwlyYyA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShwZGV2LT5idXR0b25fZGV2KTsKKwlpZiAocmMpIHsKKwkJaW5wdXRfZnJlZV9kZXZpY2UocGRldi0+YnV0dG9uX2Rldik7CisJCWtmcmVlKHBkZXYtPmJ1dHRvbl9kZXYtPnBoeXMpOworCQlwZGV2LT5idXR0b25fZGV2ID0gTlVMTDsKKwkJcmV0dXJuIHJjOworCX0KKyNlbmRpZgorCiAJcmV0dXJuIDA7CiAKIGVycl91bnJlZzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLmgKaW5kZXggMDE0MTFmYi4uMGJlNmY4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLmgKQEAgLTM3LDYgKzM3LDkgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2lmZGVmIENPTkZJR19VU0JfUFdDX0lOUFVUX0VWREVWCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSAicHdjLXVuY29tcHJlc3MuaCIKICNpbmNsdWRlIDxtZWRpYS9wd2MtaW9jdGwuaD4KQEAgLTI1NSw2ICsyNTgsOSBAQAogICAgaW50IHBhbl9hbmdsZTsJCQkvKiBpbiBkZWdyZWVzICogMTAwICovCiAgICBpbnQgdGlsdF9hbmdsZTsJCQkvKiBhYnNvbHV0ZSBhbmdsZTsgMCwwIGlzIGhvbWUgcG9zaXRpb24gKi8KICAgIGludCBzbmFwc2hvdF9idXR0b25fc3RhdHVzOwkJLyogc2V0IHRvIDEgd2hlbiB0aGUgdXNlciBwdXNoIHRoZSBidXR0b24sIHJlc2V0IHRvIDAgd2hlbiB0aGlzIHZhbHVlIGlzIHJlYWQgKi8KKyNpZmRlZiBDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVgorICAgc3RydWN0IGlucHV0X2RldiAqYnV0dG9uX2RldjsJLyogd2ViY2FtIHNuYXBzaG90IGJ1dHRvbiBpbnB1dCAqLworI2VuZGlmCiAKICAgIC8qKiogTWlzYy4gZGF0YSAqKiovCiAgICB3YWl0X3F1ZXVlX2hlYWRfdCBmcmFtZXE7CQkvKiBXaGVuIHdhaXRpbmcgZm9yIGEgZnJhbWUgdG8gZmluaXNoLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jCmluZGV4IDBjNGNlNTguLmM1MjI2MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jCkBAIC04NzgsNiArODc4LDcgQEAKIAkJU09DQU1fSFNZTkNfQUNUSVZFX0xPVyB8CiAJCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwKIAkJU09DQU1fVlNZTkNfQUNUSVZFX0xPVyB8CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfAogCQlTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfAogCQlTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HOwogCkBAIC0xMTQ5LDQ2ICsxMTUwLDI4IEBACiAJcmV0dXJuIGZvcm1hdHM7CiB9CiAKLXN0YXRpYyBpbnQgcHhhX2NhbWVyYV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgX191MzIgcGl4Zm10LCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorc3RhdGljIGludCBweGFfY2FtZXJhX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKLQljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqY2FtX2ZtdCA9IE5VTEw7Ci0JY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZSA9IE5VTEw7CiAJc3RydWN0IHNvY19jYW1lcmFfc2Vuc2Ugc2Vuc2UgPSB7CiAJCS5tYXN0ZXJfY2xvY2sgPSBwY2Rldi0+bWNsaywKIAkJLnBpeGVsX2Nsb2NrX21heCA9IHBjZGV2LT5jaWNsayAvIDQsCiAJfTsKIAlpbnQgcmV0OwogCi0JaWYgKHBpeGZtdCkgewotCQl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4Zm10KTsKLQkJaWYgKCF4bGF0ZSkgewotCQkJZGV2X3dhcm4oJmljaS0+ZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJY2FtX2ZtdCA9IHhsYXRlLT5jYW1fZm10OwotCX0KLQogCS8qIElmIFBDTEsgaXMgdXNlZCB0byBsYXRjaCBkYXRhIGZyb20gdGhlIHNlbnNvciwgY2hlY2sgc2Vuc2UgKi8KIAlpZiAocGNkZXYtPnBsYXRmb3JtX2ZsYWdzICYgUFhBX0NBTUVSQV9QQ0xLX0VOKQogCQlpY2QtPnNlbnNlID0gJnNlbnNlOwogCi0Jc3dpdGNoIChwaXhmbXQpIHsKLQljYXNlIDA6CQkJCS8qIE9ubHkgZ2VvbWV0cnkgY2hhbmdlICovCi0JCXJldCA9IGljZC0+b3BzLT5zZXRfZm10KGljZCwgcGl4Zm10LCByZWN0KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gaWNkLT5vcHMtPnNldF9mbXQoaWNkLCBjYW1fZm10LT5mb3VyY2MsIHJlY3QpOwotCX0KKwlyZXQgPSBpY2QtPm9wcy0+c2V0X2Nyb3AoaWNkLCByZWN0KTsKIAogCWljZC0+c2Vuc2UgPSBOVUxMOwogCiAJaWYgKHJldCA8IDApIHsKLQkJZGV2X3dhcm4oJmljaS0+ZGV2LCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBmb3IgZm9ybWF0ICV4XG4iLAotCQkJIHBpeGZtdCk7CisJCWRldl93YXJuKCZpY2ktPmRldiwgIkZhaWxlZCB0byBjcm9wIHRvICV1eCV1QCV1OiV1XG4iLAorCQkJIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQsIHJlY3QtPmxlZnQsIHJlY3QtPnRvcCk7CiAJfSBlbHNlIGlmIChzZW5zZS5mbGFncyAmIFNPQ0FNX1NFTlNFX1BDTEtfQ0hBTkdFRCkgewogCQlpZiAoc2Vuc2UucGl4ZWxfY2xvY2sgPiBzZW5zZS5waXhlbF9jbG9ja19tYXgpIHsKIAkJCWRldl9lcnIoJmljaS0+ZGV2LApAQCAtMTE5OSw3ICsxMTgyLDU1IEBACiAJCXJlY2FsY3VsYXRlX2ZpZm9fdGltZW91dChwY2Rldiwgc2Vuc2UucGl4ZWxfY2xvY2spOwogCX0KIAotCWlmIChwaXhmbXQgJiYgIXJldCkgeworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcHhhX2NhbWVyYV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CisJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgKmNhbV9mbXQgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGUgPSBOVUxMOworCXN0cnVjdCBzb2NfY2FtZXJhX3NlbnNlIHNlbnNlID0geworCQkubWFzdGVyX2Nsb2NrID0gcGNkZXYtPm1jbGssCisJCS5waXhlbF9jbG9ja19tYXggPSBwY2Rldi0+Y2ljbGsgLyA0LAorCX07CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJc3RydWN0IHY0bDJfZm9ybWF0IGNhbV9mID0gKmY7CisJaW50IHJldDsKKworCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXgtPnBpeGVsZm9ybWF0KTsKKwlpZiAoIXhsYXRlKSB7CisJCWRldl93YXJuKCZpY2ktPmRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeC0+cGl4ZWxmb3JtYXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljYW1fZm10ID0geGxhdGUtPmNhbV9mbXQ7CisKKwkvKiBJZiBQQ0xLIGlzIHVzZWQgdG8gbGF0Y2ggZGF0YSBmcm9tIHRoZSBzZW5zb3IsIGNoZWNrIHNlbnNlICovCisJaWYgKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIFBYQV9DQU1FUkFfUENMS19FTikKKwkJaWNkLT5zZW5zZSA9ICZzZW5zZTsKKworCWNhbV9mLmZtdC5waXgucGl4ZWxmb3JtYXQgPSBjYW1fZm10LT5mb3VyY2M7CisJcmV0ID0gaWNkLT5vcHMtPnNldF9mbXQoaWNkLCAmY2FtX2YpOworCisJaWNkLT5zZW5zZSA9IE5VTEw7CisKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfd2FybigmaWNpLT5kZXYsICJGYWlsZWQgdG8gY29uZmlndXJlIGZvciBmb3JtYXQgJXhcbiIsCisJCQkgcGl4LT5waXhlbGZvcm1hdCk7CisJfSBlbHNlIGlmIChzZW5zZS5mbGFncyAmIFNPQ0FNX1NFTlNFX1BDTEtfQ0hBTkdFRCkgeworCQlpZiAoc2Vuc2UucGl4ZWxfY2xvY2sgPiBzZW5zZS5waXhlbF9jbG9ja19tYXgpIHsKKwkJCWRldl9lcnIoJmljaS0+ZGV2LAorCQkJCSJwaXhlbCBjbG9jayAlbHUgc2V0IGJ5IHRoZSBjYW1lcmEgdG9vIGhpZ2ghIiwKKwkJCQlzZW5zZS5waXhlbF9jbG9jayk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlyZWNhbGN1bGF0ZV9maWZvX3RpbWVvdXQocGNkZXYsIHNlbnNlLnBpeGVsX2Nsb2NrKTsKKwl9CisKKwlpZiAoIXJldCkgewogCQlpY2QtPmJ1c3dpZHRoID0geGxhdGUtPmJ1c3dpZHRoOwogCQlpY2QtPmN1cnJlbnRfZm10ID0geGxhdGUtPmhvc3RfZm10OwogCX0KQEAgLTEzNjMsNiArMTM5NCw3IEBACiAJLnJlbW92ZQkJPSBweGFfY2FtZXJhX3JlbW92ZV9kZXZpY2UsCiAJLnN1c3BlbmQJPSBweGFfY2FtZXJhX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBweGFfY2FtZXJhX3Jlc3VtZSwKKwkuc2V0X2Nyb3AJPSBweGFfY2FtZXJhX3NldF9jcm9wLAogCS5nZXRfZm9ybWF0cwk9IHB4YV9jYW1lcmFfZ2V0X2Zvcm1hdHMsCiAJLnNldF9mbXQJPSBweGFfY2FtZXJhX3NldF9mbXQsCiAJLnRyeV9mbXQJPSBweGFfY2FtZXJhX3RyeV9mbXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMKaW5kZXggMTNmODVhZC4uYjViZTYzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYwpAQCAtMzM2LDE0ICszMzYsMTkgQEAKIAkJCSAgICAgdTE2IGluZGV4LCB1MTYgdmFsdWUsIHZvaWQgKmJ1ZiwKIAkJCSAgICAgczMyIGJ1Zl9sZW4sIGludCBiT3V0KTsKIAorLyogZGV2X2VyciBtYWNybyB3aXRoIGRyaXZlciBuYW1lICovCisjZGVmaW5lIFMyMjU1X0RSSVZFUl9OQU1FICJzMjI1NSIKKyNkZWZpbmUgczIyNTVfZGV2X2VycihkZXYsIGZtdCwgYXJnLi4uKQkJCQkJXAorCQlkZXZfZXJyKGRldiwgUzIyNTVfRFJJVkVSX05BTUUgIiAtICIgZm10LCAjI2FyZykKKwogI2RlZmluZSBkcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCiAJCWlmICgqczIyNTVfZGVidWcgPj0gKGxldmVsKSkgewkJCQlcCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiczIyNTU6ICIgZm10LCAjI2FyZyk7CVwKKwkJCXByaW50ayhLRVJOX0RFQlVHIFMyMjU1X0RSSVZFUl9OQU1FCQlcCisJCQkJIjogIiBmbXQsICMjYXJnKTsJCQlcCiAJCX0JCQkJCQkJXAogCX0gd2hpbGUgKDApCiAKLQogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHMyMjU1X2RyaXZlcjsKIAogCkBAIC01MjgsMTQgKzUzMywxNCBAQAogCWludCBsZW47CiAJZHByaW50aygxMDAsICJ1ZGV2ICVwIHVyYiAlcCIsIHVkZXYsIHVyYik7CiAJaWYgKHVyYi0+c3RhdHVzKSB7Ci0JCWRldl9lcnIoJnVkZXYtPmRldiwgIlVSQiBmYWlsZWQgd2l0aCBzdGF0dXMgJWQiLCB1cmItPnN0YXR1cyk7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgIlVSQiBmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHVyYi0+c3RhdHVzKTsKIAkJYXRvbWljX3NldCgmZGF0YS0+Zndfc3RhdGUsIFMyMjU1X0ZXX0ZBSUxFRCk7CiAJCS8qIHdha2UgdXAgYW55dGhpbmcgd2FpdGluZyBmb3IgdGhlIGZpcm13YXJlICovCiAJCXdha2VfdXAoJmRhdGEtPndhaXRfZncpOwogCQlyZXR1cm47CiAJfQogCWlmIChkYXRhLT5md191cmIgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJzMjI1NSBkaXNjb25uZWN0ZWRcbiIpOworCQlzMjI1NV9kZXZfZXJyKCZ1ZGV2LT5kZXYsICJkaXNjb25uZWN0ZWRcbiIpOwogCQlhdG9taWNfc2V0KCZkYXRhLT5md19zdGF0ZSwgUzIyNTVfRldfRkFJTEVEKTsKIAkJLyogd2FrZSB1cCBhbnl0aGluZyB3YWl0aW5nIGZvciB0aGUgZmlybXdhcmUgKi8KIAkJd2FrZV91cCgmZGF0YS0+d2FpdF9mdyk7CkBAIC04NDEsOCArODQ2LDcgQEAKIAlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCXN0cmxjcHkoY2FwLT5kcml2ZXIsICJzMjI1NSIsIHNpemVvZihjYXAtPmRyaXZlcikpOwogCXN0cmxjcHkoY2FwLT5jYXJkLCAiczIyNTUiLCBzaXplb2YoY2FwLT5jYXJkKSk7Ci0Jc3RybGNweShjYXAtPmJ1c19pbmZvLCBkZXZfbmFtZSgmZGV2LT51ZGV2LT5kZXYpLAotCQlzaXplb2YoY2FwLT5idXNfaW5mbykpOworCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOwogCWNhcC0+dmVyc2lvbiA9IFMyMjU1X1ZFUlNJT047CiAJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOwogCXJldHVybiAwOwpAQCAtMTI3OCw3ICsxMjgyLDcgQEAKIAl9CiAKIAlpZiAoIXJlc19nZXQoZGV2LCBmaCkpIHsKLQkJZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsICJzMjI1NTogc3RyZWFtIGJ1c3lcbiIpOworCQlzMjI1NV9kZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwgInN0cmVhbSBidXN5XG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTE1NDUsNyArMTU0OSw4IEBACiAKIAlzd2l0Y2ggKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKSkgewogCWNhc2UgUzIyNTVfRldfRkFJTEVEOgotCQllcnIoIjIyNTUgZmlybXdhcmUgbG9hZCBmYWlsZWQuIHJldHJ5aW5nLlxuIik7CisJCXMyMjU1X2Rldl9lcnIoJmRldi0+dWRldi0+ZGV2LAorCQkJImZpcm13YXJlIGxvYWQgZmFpbGVkLiByZXRyeWluZy5cbiIpOwogCQlzMjI1NV9md2xvYWRfc3RhcnQoZGV2LCAxKTsKIAkJd2FpdF9ldmVudF90aW1lb3V0KGRldi0+ZndfZGF0YS0+d2FpdF9mdywKIAkJCQkgICAoKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKQpAQCAtMjE3Myw3ICsyMTc4LDggQEAKIAogCXByaW50ayhLRVJOX0lORk8gIjIyNTUgdXNiIGZpcm13YXJlIHZlcnNpb24gJWQgXG4iLCBmd192ZXIpOwogCWlmIChmd192ZXIgPCBDVVJfVVNCX0ZXVkVSKQotCQllcnIoInVzYiBmaXJtd2FyZSBub3QgdXAgdG8gZGF0ZSAlZFxuIiwgZndfdmVyKTsKKwkJZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsCisJCQkidXNiIGZpcm13YXJlIG5vdCB1cCB0byBkYXRlICVkXG4iLCBmd192ZXIpOwogCiAJZm9yIChqID0gMDsgaiA8IE1BWF9DSEFOTkVMUzsgaisrKSB7CiAJCWRldi0+Yl9hY3F1aXJlW2pdID0gMDsKQEAgLTIyMjgsMTMgKzIyMzQsMTMgQEAKIAlkcHJpbnRrKDEwMCwgInJlYWQgcGlwZSBjb21wbGV0aW9uICVwLCBzdGF0dXMgJWRcbiIsIHB1cmIsCiAJCXB1cmItPnN0YXR1cyk7CiAJaWYgKHBpcGVfaW5mbyA9PSBOVUxMKSB7Ci0JCWVycigibm8gY29udGV4dCAhIik7CisJCWRldl9lcnIoJnB1cmItPmRldi0+ZGV2LCAibm8gY29udGV4dCFcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJZGV2ID0gcGlwZV9pbmZvLT5kZXY7CiAJaWYgKGRldiA9PSBOVUxMKSB7Ci0JCWVycigibm8gY29udGV4dCAhIik7CisJCWRldl9lcnIoJnB1cmItPmRldi0+ZGV2LCAibm8gY29udGV4dCFcbiIpOwogCQlyZXR1cm47CiAJfQogCXN0YXR1cyA9IHB1cmItPnN0YXR1czsKQEAgLTIyODYsNyArMjI5Miw3IEBACiAJCXBpcGVfaW5mby0+c3RyZWFtX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcGlwZV9pbmZvLT5zdHJlYW1fdXJiKSB7CiAJCQlkZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwKLQkJCQkiUmVhZFN0cmVhbTogVW5hYmxlIHRvIGFsbG9jIFVSQiIpOworCQkJCSJSZWFkU3RyZWFtOiBVbmFibGUgdG8gYWxsb2MgVVJCXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCS8qIHRyYW5zZmVyIGJ1ZmZlciBhbGxvY2F0ZWQgaW4gYm9hcmRfaW5pdCAqLwpAQCAtMjM5MSw3ICsyMzk3LDcgQEAKIAlpbnQgajsKIAogCWlmIChkZXYgPT0gTlVMTCkgewotCQllcnIoInMyMjU1OiBpbnZhbGlkIGRldmljZSIpOworCQlzMjI1NV9kZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwgImludmFsaWQgZGV2aWNlXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlkcHJpbnRrKDQsICJzdG9wIHJlYWQgcGlwZVxuIik7CkBAIC0yNDUzLDcgKzI0NTksNyBAQAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW5pdGlhbGl6ZSBpdCB0byB6ZXJvICovCiAJZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHMyMjU1X2RldiksIEdGUF9LRVJORUwpOwogCWlmIChkZXYgPT0gTlVMTCkgewotCQllcnIoInMyMjU1OiBvdXQgb2YgbWVtb3J5Iik7CisJCXMyMjU1X2Rldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yNDg3LDcgKzI0OTMsNyBAQAogCX0KIAogCWlmICghZGV2LT5yZWFkX2VuZHBvaW50KSB7Ci0JCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiQ291bGQgbm90IGZpbmQgYnVsay1pbiBlbmRwb2ludCIpOworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkIG5vdCBmaW5kIGJ1bGstaW4gZW5kcG9pbnRcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMjU4Myw3ICsyNTg5LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHMyMjU1X2RyaXZlciA9IHsKLQkubmFtZSA9ICJzMjI1NSIsCisJLm5hbWUgPSBTMjI1NV9EUklWRVJfTkFNRSwKIAkucHJvYmUgPSBzMjI1NV9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IHMyMjU1X2Rpc2Nvbm5lY3QsCiAJLmlkX3RhYmxlID0gczIyNTVfdGFibGUsCkBAIC0yNTk3LDcgKzI2MDMsOCBAQAogCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmczIyNTVfZHJpdmVyKTsKIAogCWlmIChyZXN1bHQpCi0JCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmVzdWx0KTsKKwkJcHJfZXJyKEtCVUlMRF9NT0ROQU1FCisJCQkiOiB1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWRcbiIsIHJlc3VsdCk7CiAKIAlkcHJpbnRrKDIsICJzMjI1NV9pbml0OiBkb25lXG4iKTsKIAlyZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jCmluZGV4IGU2MzdlNDQuLmRhNDdiMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0NmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDZhLmMKQEAgLTQ2LDEwICs0NiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb3RleHQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEdlbmcgPGxpbnV4QE1pY2hhZWxHZW5nLmRlPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTUyNDZBLCBTQUE1MjgxIFRlbGV0ZXh0IGRlY29kZXIgZHJpdmVyIik7CkBAIC0zODgsMTMgKzM4OSwxOSBAQAogCiBzdHJ1Y3Qgc2FhNTI0NmFfZGV2aWNlCiB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7CiAJdTggICAgIHBnYnVmW05VTV9EQVVTXVtWVFhfVklSVFVBTFNJWkVdOwogCWludCAgICBpc19zZWFyY2hpbmdbTlVNX0RBVVNdOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJdW5zaWduZWQgbG9uZyBpbl91c2U7CiAJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYWE1MjQ2YV9kZXZpY2UgKnRvX2RldihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBzYWE1MjQ2YV9kZXZpY2UsIHNkKTsKK30KKwogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugc2FhX3RlbXBsYXRlOwkvKiBEZWNsYXJlZCBuZWFyIGJvdHRvbSAqLwogCiAvKgpAQCAtNDAzLDEyICs0MTAsMTMgQEAKIAogc3RhdGljIGludCBpMmNfc2VuZGJ1ZihzdHJ1Y3Qgc2FhNTI0NmFfZGV2aWNlICp0LCBpbnQgcmVnLCBpbnQgY291bnQsIHU4ICpkYXRhKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZ0LT5zZCk7CiAJY2hhciBidWZbNjRdOwogCiAJYnVmWzBdID0gcmVnOwogCW1lbWNweShidWYrMSwgZGF0YSwgY291bnQpOwogCi0JaWYoaTJjX21hc3Rlcl9zZW5kKHQtPmNsaWVudCwgYnVmLCBjb3VudCsxKT09Y291bnQrMSkKKwlpZiAoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCBjb3VudCArIDEpID09IGNvdW50ICsgMSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIC0xOwogfQpAQCAtNDM2LDcgKzQ0NCw5IEBACiAgKi8KIHN0YXRpYyBpbnQgaTJjX2dldGRhdGEoc3RydWN0IHNhYTUyNDZhX2RldmljZSAqdCwgaW50IGNvdW50LCB1OCAqYnVmKQogewotCWlmKGkyY19tYXN0ZXJfcmVjdih0LT5jbGllbnQsIGJ1ZiwgY291bnQpIT1jb3VudCkKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmdC0+c2QpOworCisJaWYgKGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGJ1ZiwgY291bnQpICE9IGNvdW50KQogCQlyZXR1cm4gLTE7CiAJcmV0dXJuIDA7CiB9CkBAIC05NjEsOSArOTcxLDYgQEAKIHsKIAlzdHJ1Y3Qgc2FhNTI0NmFfZGV2aWNlICp0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotCWlmICh0LT5jbGllbnQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmdC0+aW5fdXNlKSkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtMTAzMywxOCArMTA0MCwyOSBAQAogCS5taW5vciAgICA9IC0xLAogfTsKIAotLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MjIgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBpbnQgc2FhNTI0NmFfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotSTJDX0NMSUVOVF9JTlNNT0Q7CisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9TQUE1MjQ2QSwgMCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgc2FhNTI0NmFfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IHNhYTUyNDZhX2dfY2hpcF9pZGVudCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHNhYTUyNDZhX29wcyA9IHsKKwkuY29yZSA9ICZzYWE1MjQ2YV9jb3JlX29wcywKK307CisKIAogc3RhdGljIGludCBzYWE1MjQ2YV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWludCBwZ2J1ZjsKIAlpbnQgZXJyOwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkOwogCXN0cnVjdCBzYWE1MjQ2YV9kZXZpY2UgKnQ7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAogCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKQEAgLTEwNTMsNDAgKzEwNzEsNDMgQEAKIAl0ID0ga3phbGxvYyhzaXplb2YoKnQpLCBHRlBfS0VSTkVMKTsKIAlpZiAodCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKKwlzZCA9ICZ0LT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmc2FhNTI0NmFfb3BzKTsKIAltdXRleF9pbml0KCZ0LT5sb2NrKTsKIAogCS8qIE5vdyBjcmVhdGUgYSB2aWRlbzRsaW51eCBkZXZpY2UgKi8KLQl2ZCA9IHZpZGVvX2RldmljZV9hbGxvYygpOwotCWlmICh2ZCA9PSBOVUxMKSB7CisJdC0+dmRldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmICh0LT52ZGV2ID09IE5VTEwpIHsKIAkJa2ZyZWUodCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB2ZCk7Ci0JbWVtY3B5KHZkLCAmc2FhX3RlbXBsYXRlLCBzaXplb2YoKnZkKSk7CisJbWVtY3B5KHQtPnZkZXYsICZzYWFfdGVtcGxhdGUsIHNpemVvZigqdC0+dmRldikpOwogCiAJZm9yIChwZ2J1ZiA9IDA7IHBnYnVmIDwgTlVNX0RBVVM7IHBnYnVmKyspIHsKIAkJbWVtc2V0KHQtPnBnYnVmW3BnYnVmXSwgJyAnLCBzaXplb2YodC0+cGdidWZbMF0pKTsKIAkJdC0+aXNfc2VhcmNoaW5nW3BnYnVmXSA9IGZhbHNlOwogCX0KLQl2aWRlb19zZXRfZHJ2ZGF0YSh2ZCwgdCk7CisJdmlkZW9fc2V0X2RydmRhdGEodC0+dmRldiwgdCk7CiAKIAkvKiBSZWdpc3RlciBpdCAqLwotCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZCwgVkZMX1RZUEVfVlRYLCAtMSk7CisJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHQtPnZkZXYsIFZGTF9UWVBFX1ZUWCwgLTEpOwogCWlmIChlcnIgPCAwKSB7CiAJCWtmcmVlKHQpOwotCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh2ZCk7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKHQtPnZkZXYpOworCQl0LT52ZGV2ID0gTlVMTDsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JdC0+Y2xpZW50ID0gY2xpZW50OwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNhYTUyNDZhX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzYWE1MjQ2YV9kZXZpY2UgKnQgPSB0b19kZXYoc2QpOwogCi0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodmQpOwotCWtmcmVlKHZpZGVvX2dldF9kcnZkYXRhKHZkKSk7CisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodC0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHQpOwogCXJldHVybiAwOwogfQogCkBAIC0xMDk4LDcgKzExMTksNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAic2FhNTI0NmEiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE1MjQ5LAogCS5wcm9iZSA9IHNhYTUyNDZhX3Byb2JlLAogCS5yZW1vdmUgPSBzYWE1MjQ2YV9yZW1vdmUsCiAJLmlkX3RhYmxlID0gc2FhNTI0NmFfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jCmluZGV4IGUyOTc2NTEuLjQ4YjI3ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jCkBAIC01MCwxNSArNTAsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW90ZXh0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBHZW5nIDxsaW51eEBNaWNoYWVsR2VuZy5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBTQUE1MjQ5IFRlbGV0ZXh0IGRlY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKwogI2RlZmluZSBWVFhfVkVSX01BSiAxCiAjZGVmaW5lIFZUWF9WRVJfTUlOIDgKIApAQCAtOTUsMTcgKzk3LDIzIEBACiAKIHN0cnVjdCBzYWE1MjQ5X2RldmljZQogeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwogCXZkYXVfdCB2ZGF1W05VTV9EQVVTXTsJCQkvKiBEYXRhIGZvciB2aXJ0dWFsIERBVXMgKHRoZSA1MjQ5IG9ubHkgaGFzIG9uZSAqLwogCQkJCQkJLyogcmVhbCBEQVUsIHNvIHdlIGhhdmUgdG8gc2ltdWxhdGUgc29tZSBtb3JlKSAqLwogCWludCB2dHhfdXNlX2NvdW50OwogCWludCBpc19zZWFyY2hpbmdbTlVNX0RBVVNdOwogCWludCBkaXNwX21vZGU7CiAJaW50IHZpcnR1YWxfbW9kZTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwogCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2FhNTI0OV9kZXZpY2UgKnRvX2RldihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBzYWE1MjQ5X2RldmljZSwgc2QpOworfQorCiAKICNkZWZpbmUgQ0NUV1IgMzQJCS8qIEmyQyB3cml0ZS9yZWFkLWFkZHJlc3Mgb2YgdnR4LWNoaXAgKi8KICNkZWZpbmUgQ0NUUkQgMzUKQEAgLTE0NywxMiArMTU1LDEzIEBACiAKIHN0YXRpYyBpbnQgaTJjX3NlbmRidWYoc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0LCBpbnQgcmVnLCBpbnQgY291bnQsIHU4ICpkYXRhKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZ0LT5zZCk7CiAJY2hhciBidWZbNjRdOwogCiAJYnVmWzBdID0gcmVnOwogCW1lbWNweShidWYrMSwgZGF0YSwgY291bnQpOwogCi0JaWYgKGkyY19tYXN0ZXJfc2VuZCh0LT5jbGllbnQsIGJ1ZiwgY291bnQgKyAxKSA9PSBjb3VudCArIDEpCisJaWYgKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgY291bnQgKyAxKSA9PSBjb3VudCArIDEpCiAJCXJldHVybiAwOwogCXJldHVybiAtMTsKIH0KQEAgLTE4MCw3ICsxODksOSBAQAogCiBzdGF0aWMgaW50IGkyY19nZXRkYXRhKHN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdCwgaW50IGNvdW50LCB1OCAqYnVmKQogewotCWlmKGkyY19tYXN0ZXJfcmVjdih0LT5jbGllbnQsIGJ1ZiwgY291bnQpIT1jb3VudCkKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmdC0+c2QpOworCisJaWYgKGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGJ1ZiwgY291bnQpICE9IGNvdW50KQogCQlyZXR1cm4gLTE7CiAJcmV0dXJuIDA7CiB9CkBAIC00OTcsOSArNTA4LDYgQEAKIAlzdHJ1Y3Qgc2FhNTI0OV9kZXZpY2UgKnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCBwZ2J1ZjsKIAotCWlmICh0LT5jbGllbnQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmdC0+aW5fdXNlKSkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtNTUzLDE4ICs1NjEsMjggQEAKIAkucmVsZWFzZSAJPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKIH07CiAKLS8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDIyID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgaW50IHNhYTUyNDlfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotSTJDX0NMSUVOVF9JTlNNT0Q7CisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9TQUE1MjQ5LCAwKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzYWE1MjQ5X2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBzYWE1MjQ5X2dfY2hpcF9pZGVudCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHNhYTUyNDlfb3BzID0geworCS5jb3JlID0gJnNhYTUyNDlfY29yZV9vcHMsCit9OwogCiBzdGF0aWMgaW50IHNhYTUyNDlfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgcGdidWY7CiAJaW50IGVycjsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZDsKIAlzdHJ1Y3Qgc2FhNTI0OV9kZXZpY2UgKnQ7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAogCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKQEAgLTU3MywxNiArNTkxLDE3IEBACiAJdCA9IGt6YWxsb2Moc2l6ZW9mKCp0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CisJc2QgPSAmdC0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnNhYTUyNDlfb3BzKTsKIAltdXRleF9pbml0KCZ0LT5sb2NrKTsKIAogCS8qIE5vdyBjcmVhdGUgYSB2aWRlbzRsaW51eCBkZXZpY2UgKi8KLQl2ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2aWRlb19kZXZpY2UpLCBHRlBfS0VSTkVMKTsKLQlpZiAodmQgPT0gTlVMTCkgeworCXQtPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAodC0+dmRldiA9PSBOVUxMKSB7CiAJCWtmcmVlKGNsaWVudCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB2ZCk7Ci0JbWVtY3B5KHZkLCAmc2FhX3RlbXBsYXRlLCBzaXplb2YoKnZkKSk7CisJbWVtY3B5KHQtPnZkZXYsICZzYWFfdGVtcGxhdGUsIHNpemVvZigqdC0+dmRldikpOwogCiAJZm9yIChwZ2J1ZiA9IDA7IHBnYnVmIDwgTlVNX0RBVVM7IHBnYnVmKyspIHsKIAkJbWVtc2V0KHQtPnZkYXVbcGdidWZdLnBnYnVmLCAnICcsIHNpemVvZih0LT52ZGF1WzBdLnBnYnVmKSk7CkBAIC01OTMsMjYgKzYxMiwyNyBAQAogCQl0LT52ZGF1W3BnYnVmXS5zdG9wcGVkID0gdHJ1ZTsKIAkJdC0+aXNfc2VhcmNoaW5nW3BnYnVmXSA9IGZhbHNlOwogCX0KLQl2aWRlb19zZXRfZHJ2ZGF0YSh2ZCwgdCk7CisJdmlkZW9fc2V0X2RydmRhdGEodC0+dmRldiwgdCk7CiAKIAkvKiBSZWdpc3RlciBpdCAqLwotCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZCwgVkZMX1RZUEVfVlRYLCAtMSk7CisJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHQtPnZkZXYsIFZGTF9UWVBFX1ZUWCwgLTEpOwogCWlmIChlcnIgPCAwKSB7CiAJCWtmcmVlKHQpOwotCQlrZnJlZSh2ZCk7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKHQtPnZkZXYpOworCQl0LT52ZGV2ID0gTlVMTDsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JdC0+Y2xpZW50ID0gY2xpZW50OwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNhYTUyNDlfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0ID0gdG9fZGV2KHNkKTsKIAotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZkKTsKLQlrZnJlZSh2aWRlb19nZXRfZHJ2ZGF0YSh2ZCkpOwotCWtmcmVlKHZkKTsKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh0LT52ZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYyNCw3ICs2NDQsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAic2FhNTI0OSIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTUyNDksCiAJLnByb2JlID0gc2FhNTI0OV9wcm9iZSwKIAkucmVtb3ZlID0gc2FhNTI0OV9yZW1vdmUsCiAJLmlkX3RhYmxlID0gc2FhNTI0OV9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE2NTg4LmMKaW5kZXggZjA1MDI0Mi4uYzI1ZTgxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE2NTg4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE2NTg4LmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMzIsMTUgKzMyLDEwIEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPG1lZGlhL3Jkcy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKLS8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCTB4MjAgPj4gMSwKLQkweDIyID4+IDEsCi0JSTJDX0NMSUVOVF9FTkQsCi19OwotCi1JMkNfQ0xJRU5UX0lOU01PRDsKIAogLyogaW5zbW9kIG9wdGlvbnMgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7CkBAIC03Miw5ICs2Nyw4IEBACiAjZGVmaW5lIGRwcmludGsgICAgIGlmIChkZWJ1ZykgcHJpbnRrCiAKIHN0cnVjdCBzYWE2NTg4IHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKIAlzcGlubG9ja190IGxvY2s7CiAJdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCXVuc2lnbmVkIGludCBidWZfc2l6ZTsKQEAgLTg2LDggKzgwLDEwIEBACiAJaW50IGRhdGFfYXZhaWxhYmxlX2Zvcl9yZWFkOwogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlcjsKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGU7CitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYWE2NTg4ICp0b19zYWE2NTg4KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHNhYTY1ODgsIHNkKTsKK30KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0yNTgsNiArMjU0LDcgQEAKIAogc3RhdGljIHZvaWQgc2FhNjU4OF9pMmNfcG9sbChzdHJ1Y3Qgc2FhNjU4OCAqcykKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmcy0+c2QpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgY2hhciB0bXBidWZbNl07CiAJdW5zaWduZWQgY2hhciBibG9ja251bTsKQEAgLTI2NSw3ICsyNjIsNyBAQAogCiAJLyogQWx0aG91Z2ggd2Ugb25seSBuZWVkIDMgYnl0ZXMsIHdlIGhhdmUgdG8gcmVhZCBhdCBsZWFzdCA2LgogCSAgIFNBQTY1ODggcmV0dXJucyBnYXJiYWdlIG90aGVyd2lzZSAqLwotCWlmICg2ICE9IGkyY19tYXN0ZXJfcmVjdigmcy0+Y2xpZW50LCAmdG1wYnVmWzBdLCA2KSkgeworCWlmICg2ICE9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsICZ0bXBidWZbMF0sIDYpKSB7CiAJCWlmIChkZWJ1ZyA+IDEpCiAJCQlkcHJpbnRrKFBSRUZJWCAicmVhZCBlcnJvciFcbiIpOwogCQlyZXR1cm47CkBAIC0zMTYsMjMgKzMxMywxNyBAQAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcy0+cmVhZF9xdWV1ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNhYTY1ODhfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBzYWE2NTg4ICpzID0gKHN0cnVjdCBzYWE2NTg4ICopZGF0YTsKLQotCXNjaGVkdWxlX3dvcmsoJnMtPndvcmspOwotfQotCiBzdGF0aWMgdm9pZCBzYWE2NTg4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBzYWE2NTg4ICpzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzYWE2NTg4LCB3b3JrKTsKKwlzdHJ1Y3Qgc2FhNjU4OCAqcyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc2FhNjU4OCwgd29yay53b3JrKTsKIAogCXNhYTY1ODhfaTJjX3BvbGwocyk7Ci0JbW9kX3RpbWVyKCZzLT50aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnMtPndvcmssIG1zZWNzX3RvX2ppZmZpZXMoMjApKTsKIH0KIAogc3RhdGljIGludCBzYWE2NTg4X2NvbmZpZ3VyZShzdHJ1Y3Qgc2FhNjU4OCAqcykKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmcy0+c2QpOwogCXVuc2lnbmVkIGNoYXIgYnVmWzNdOwogCWludCByYzsKIApAQCAtMzgwLDcgKzM3MSw4IEBACiAJZHByaW50ayhQUkVGSVggIndyaXRpbmc6IDB3PTB4JTAyeCAxdz0weCUwMnggMnc9MHglMDJ4XG4iLAogCQlidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdKTsKIAotCWlmICgzICE9IChyYyA9IGkyY19tYXN0ZXJfc2VuZCgmcy0+Y2xpZW50LCBidWYsIDMpKSkKKwlyYyA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMyk7CisJaWYgKHJjICE9IDMpCiAJCXByaW50ayhQUkVGSVggImkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgMylcbiIsIHJjKTsKIAogCXJldHVybiAwOwpAQCAtMzg4LDcwICszODAsMTAgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IHNhYTY1ODhfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgaW50IGFkZHIsIGludCBraW5kKQorc3RhdGljIGxvbmcgc2FhNjU4OF9pb2N0bChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IHNhYTY1ODggKnM7Ci0JY2xpZW50X3RlbXBsYXRlLmFkYXB0ZXIgPSBhZGFwOwotCWNsaWVudF90ZW1wbGF0ZS5hZGRyID0gYWRkcjsKLQotCXByaW50ayhQUkVGSVggImNoaXAgZm91bmQgQCAweCV4XG4iLCBhZGRyIDw8IDEpOwotCi0JaWYgKE5VTEwgPT0gKHMgPSBrbWFsbG9jKHNpemVvZigqcyksIEdGUF9LRVJORUwpKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzLT5idWZfc2l6ZSA9IGJ1ZmJsb2NrcyAqIDM7Ci0KLQlpZiAoTlVMTCA9PSAocy0+YnVmZmVyID0ga21hbGxvYyhzLT5idWZfc2l6ZSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCWtmcmVlKHMpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0Jc3Bpbl9sb2NrX2luaXQoJnMtPmxvY2spOwotCXMtPmNsaWVudCA9IGNsaWVudF90ZW1wbGF0ZTsKLQlzLT5ibG9ja19jb3VudCA9IDA7Ci0Jcy0+d3JfaW5kZXggPSAwOwotCXMtPnJkX2luZGV4ID0gMDsKLQlzLT5sYXN0X2Jsb2NrbnVtID0gMHhmZjsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5yZWFkX3F1ZXVlKTsKLQlzLT5kYXRhX2F2YWlsYWJsZV9mb3JfcmVhZCA9IDA7Ci0JaTJjX3NldF9jbGllbnRkYXRhKCZzLT5jbGllbnQsIHMpOwotCWkyY19hdHRhY2hfY2xpZW50KCZzLT5jbGllbnQpOwotCi0Jc2FhNjU4OF9jb25maWd1cmUocyk7Ci0KLQkvKiBzdGFydCBwb2xsaW5nIHZpYSBldmVudGQgKi8KLQlJTklUX1dPUksoJnMtPndvcmssIHNhYTY1ODhfd29yayk7Ci0JaW5pdF90aW1lcigmcy0+dGltZXIpOwotCXMtPnRpbWVyLmZ1bmN0aW9uID0gc2FhNjU4OF90aW1lcjsKLQlzLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpczsKLQlzY2hlZHVsZV93b3JrKCZzLT53b3JrKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzYWE2NTg4X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKLXsKLQlpZiAoYWRhcC0+Y2xhc3MgJiBJMkNfQ0xBU1NfVFZfQU5BTE9HKQotCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXAsICZhZGRyX2RhdGEsIHNhYTY1ODhfYXR0YWNoKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzYWE2NTg4X2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBzYWE2NTg4ICpzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlkZWxfdGltZXJfc3luYygmcy0+dGltZXIpOwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0KLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCWtmcmVlKHMtPmJ1ZmZlcik7Ci0Ja2ZyZWUocyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNjU4OF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkJCQkJdm9pZCAqYXJnKQotewotCXN0cnVjdCBzYWE2NTg4ICpzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0Jc3RydWN0IHJkc19jb21tYW5kICphID0gKHN0cnVjdCByZHNfY29tbWFuZCAqKWFyZzsKKwlzdHJ1Y3Qgc2FhNjU4OCAqcyA9IHRvX3NhYTY1ODgoc2QpOworCXN0cnVjdCByZHNfY29tbWFuZCAqYSA9IGFyZzsKIAogCXN3aXRjaCAoY21kKSB7CiAJCS8qIC0tLSBvcGVuKCkgZm9yIC9kZXYvcmFkaW8gLS0tICovCkBAIC00NzksNDUgKzQxMSw5NCBAQAogCiAJZGVmYXVsdDoKIAkJLyogbm90aGluZyAqLwotCQlicmVhazsKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2FhNjU4OF9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9TQUE2NTg4LCAwKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzYWE2NTg4X2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBzYWE2NTg4X2dfY2hpcF9pZGVudCwKKwkuaW9jdGwgPSBzYWE2NTg4X2lvY3RsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgc2FhNjU4OF9vcHMgPSB7CisJLmNvcmUgPSAmc2FhNjU4OF9jb3JlX29wcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBzYWE2NTg4X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzYWE2NTg4ICpzOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisKKwl2NGxfaW5mbyhjbGllbnQsICJzYWE2NTg4IGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CisKKwlzID0ga3phbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKKwlpZiAocyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMtPmJ1Zl9zaXplID0gYnVmYmxvY2tzICogMzsKKworCXMtPmJ1ZmZlciA9IGttYWxsb2Mocy0+YnVmX3NpemUsIEdGUF9LRVJORUwpOworCWlmIChzLT5idWZmZXIgPT0gTlVMTCkgeworCQlrZnJlZShzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNkID0gJnMtPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZzYWE2NTg4X29wcyk7CisJc3Bpbl9sb2NrX2luaXQoJnMtPmxvY2spOworCXMtPmJsb2NrX2NvdW50ID0gMDsKKwlzLT53cl9pbmRleCA9IDA7CisJcy0+cmRfaW5kZXggPSAwOworCXMtPmxhc3RfYmxvY2tudW0gPSAweGZmOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPnJlYWRfcXVldWUpOworCXMtPmRhdGFfYXZhaWxhYmxlX2Zvcl9yZWFkID0gMDsKKworCXNhYTY1ODhfY29uZmlndXJlKHMpOworCisJLyogc3RhcnQgcG9sbGluZyB2aWEgZXZlbnRkICovCisJSU5JVF9ERUxBWUVEX1dPUksoJnMtPndvcmssIHNhYTY1ODhfd29yayk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZzLT53b3JrLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE2NTg4X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNjU4OCAqcyA9IHRvX3NhYTY1ODgoc2QpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzLT53b3JrKTsKKworCWtmcmVlKHMtPmJ1ZmZlcik7CisJa2ZyZWUocyk7CisJcmV0dXJuIDA7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAic2FhNjU4OCIsCi0JfSwKLQkuaWQgPSAtMSwJCS8qIEZJWE1FICovCi0JLmF0dGFjaF9hZGFwdGVyID0gc2FhNjU4OF9wcm9iZSwKLQkuZGV0YWNoX2NsaWVudCA9IHNhYTY1ODhfZGV0YWNoLAotCS5jb21tYW5kID0gc2FhNjU4OF9jb21tYW5kLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTY1ODhfaWRbXSA9IHsKKwl7ICJzYWE2NTg4IiwgMCB9LAorCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzYWE2NTg4X2lkKTsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJzYWE2NTg4IiwKLQkuZHJpdmVyID0gJmRyaXZlciwKKwkucHJvYmUgPSBzYWE2NTg4X3Byb2JlLAorCS5yZW1vdmUgPSBzYWE2NTg4X3JlbW92ZSwKKwkuaWRfdGFibGUgPSBzYWE2NTg4X2lkLAogfTsKLQotc3RhdGljIGludCBfX2luaXQgc2FhNjU4OF9pbml0X21vZHVsZSh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHNhYTY1ODhfY2xlYW51cF9tb2R1bGUodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoc2FhNjU4OF9pbml0X21vZHVsZSk7Ci1tb2R1bGVfZXhpdChzYWE2NTg4X2NsZWFudXBfbW9kdWxlKTsKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMC5jCmluZGV4IDM3ODYwNjkuLmRmNGUwOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMC5jCkBAIC0zMywxNSArMzMsMTYgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNzExMCB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiUGF1bGluZSBNaWRkZWxpbmsiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CkBAIC01Miw5ICs1MywxMCBAQAogI2RlZmluZSBTQUE3MTEwX05SX1JFRwkJMHgzNQogCiBzdHJ1Y3Qgc2FhNzExMCB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwogCXU4IHJlZ1tTQUE3MTEwX05SX1JFR107CiAKLQlpbnQgbm9ybTsKKwl2NGwyX3N0ZF9pZCBub3JtOwogCWludCBpbnB1dDsKIAlpbnQgZW5hYmxlOwogCWludCBicmlnaHQ7CkBAIC02NSwyMCArNjcsMjggQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNhYTcxMTAgKnRvX3NhYTcxMTAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgc2FhNzExMCwgc2QpOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogSTJDIHN1cHBvcnQgZnVuY3Rpb25zCQkJCQkJICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgc2FhNzExMF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIGludCBzYWE3MTEwX3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggdmFsdWUpCiB7Ci0Jc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSB0b19zYWE3MTEwKHNkKTsKIAogCWRlY29kZXItPnJlZ1tyZWddID0gdmFsdWU7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGludCBzYWE3MTEwX3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIGludCBzYWE3MTEwX3dyaXRlX2Jsb2NrKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IHRvX3NhYTcxMTAoc2QpOwogCWludCByZXQgPSAtMTsKIAl1OCByZWcgPSAqZGF0YTsJCS8qIGZpcnN0IHJlZ2lzdGVyIHRvIHdyaXRlIHRvICovCiAKQEAgLTg5LDE1ICs5OSwxMyBAQAogCS8qIHRoZSBzYWE3MTEwIGhhcyBhbiBhdXRvaW5jcmVtZW50IGZ1bmN0aW9uLCB1c2UgaXQgaWYKIAkgKiB0aGUgYWRhcHRlciB1bmRlcnN0YW5kcyByYXcgSTJDICovCiAJaWYgKGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewotCQlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCiAJCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGRhdGEsIGxlbik7CiAKIAkJLyogQ2FjaGUgdGhlIHdyaXR0ZW4gZGF0YSAqLwogCQltZW1jcHkoZGVjb2Rlci0+cmVnICsgcmVnLCBkYXRhICsgMSwgbGVuIC0gMSk7CiAJfSBlbHNlIHsKIAkJZm9yICgrK2RhdGEsIC0tbGVuOyBsZW47IGxlbi0tKSB7Ci0JCQlyZXQgPSBzYWE3MTEwX3dyaXRlKGNsaWVudCwgcmVnKyssICpkYXRhKyspOworCQkJcmV0ID0gc2FhNzExMF93cml0ZShzZCwgcmVnKyssICpkYXRhKyspOwogCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTEwNiw4ICsxMTQsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzYWE3MTEwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbmxpbmUgaW50IHNhYTcxMTBfcmVhZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlKGNsaWVudCk7CiB9CiAKQEAgLTExNSwxMSArMTI1LDExIEBACiAvKiBTQUE3MTEwIGZ1bmN0aW9ucwkJCQkJCQkgICAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2RlZmluZSBGUkVTUF8wNkhfQ09NUFNUIDB4MDMJLy8weDEzCi0jZGVmaW5lIEZSRVNQXzA2SF9TVklERU8gMHg4MwkvLzB4QzAKKyNkZWZpbmUgRlJFU1BfMDZIX0NPTVBTVCAweDAzCS8qMHgxMyovCisjZGVmaW5lIEZSRVNQXzA2SF9TVklERU8gMHg4MwkvKjB4QzAqLwogCiAKLXN0YXRpYyBpbnQgc2FhNzExMF9zZWxtdXgoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGNoYW4pCitzdGF0aWMgaW50IHNhYTcxMTBfc2VsbXV4KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBjaGFuKQogewogCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vZGVzWzldWzhdID0gewogCQkvKiBtb2RlIDAgKi8KQEAgLTE1MCwxNyArMTYwLDE3IEBACiAJCXtGUkVTUF8wNkhfU1ZJREVPLCAweDNDLCAweDI3LCAweEMxLCAweDIzLAogCQkJICAgICAgMHg0NCwgMHg3NSwgMHgyMX0KIAl9OwotCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSB0b19zYWE3MTEwKHNkKTsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpwdHIgPSBtb2Rlc1tjaGFuXTsKIAotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDA2LCBwdHJbMF0pOwkvKiBMdW1pbmFuY2UgY29udHJvbCAgICAqLwotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDIwLCBwdHJbMV0pOwkvKiBBbmFsb2cgQ29udHJvbCAjMSAgICAqLwotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDIxLCBwdHJbMl0pOwkvKiBBbmFsb2cgQ29udHJvbCAjMiAgICAqLwotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDIyLCBwdHJbM10pOwkvKiBNaXhlciBDb250cm9sICMxICAgICAqLwotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDJDLCBwdHJbNF0pOwkvKiBNaXhlciBDb250cm9sICMyICAgICAqLwotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDMwLCBwdHJbNV0pOwkvKiBBRENzIGdhaW4gY29udHJvbCAgICAqLwotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDMxLCBwdHJbNl0pOwkvKiBNaXhlciBDb250cm9sICMzICAgICAqLwotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDIxLCBwdHJbN10pOwkvKiBBbmFsb2cgQ29udHJvbCAjMiAgICAqLworCXNhYTcxMTBfd3JpdGUoc2QsIDB4MDYsIHB0clswXSk7CS8qIEx1bWluYW5jZSBjb250cm9sICAgICovCisJc2FhNzExMF93cml0ZShzZCwgMHgyMCwgcHRyWzFdKTsJLyogQW5hbG9nIENvbnRyb2wgIzEgICAgKi8KKwlzYWE3MTEwX3dyaXRlKHNkLCAweDIxLCBwdHJbMl0pOwkvKiBBbmFsb2cgQ29udHJvbCAjMiAgICAqLworCXNhYTcxMTBfd3JpdGUoc2QsIDB4MjIsIHB0clszXSk7CS8qIE1peGVyIENvbnRyb2wgIzEgICAgICovCisJc2FhNzExMF93cml0ZShzZCwgMHgyQywgcHRyWzRdKTsJLyogTWl4ZXIgQ29udHJvbCAjMiAgICAgKi8KKwlzYWE3MTEwX3dyaXRlKHNkLCAweDMwLCBwdHJbNV0pOwkvKiBBRENzIGdhaW4gY29udHJvbCAgICAqLworCXNhYTcxMTBfd3JpdGUoc2QsIDB4MzEsIHB0cls2XSk7CS8qIE1peGVyIENvbnRyb2wgIzMgICAgICovCisJc2FhNzExMF93cml0ZShzZCwgMHgyMSwgcHRyWzddKTsJLyogQW5hbG9nIENvbnRyb2wgIzIgICAgKi8KIAlkZWNvZGVyLT5pbnB1dCA9IGNoYW47CiAKIAlyZXR1cm4gMDsKQEAgLTE3NiwyNDYgKzE4NiwyNjAgQEAKIAkvKiAweDMwICovIDB4NDQsIDB4NzEsIDB4MDIsIDB4OEMsIDB4MDIKIH07CiAKLXN0YXRpYyBpbnQgZGV0ZXJtaW5lX25vcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyB2NGwyX3N0ZF9pZCBkZXRlcm1pbmVfbm9ybShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewogCURFRklORV9XQUlUKHdhaXQpOwotCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSB0b19zYWE3MTEwKHNkKTsKIAlpbnQgc3RhdHVzOwogCiAJLyogbW9kZSBjaGFuZ2VkLCBzdGFydCBhdXRvbWF0aWMgZGV0ZWN0aW9uICovCi0Jc2FhNzExMF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRzZXEsIHNpemVvZihpbml0c2VxKSk7Ci0Jc2FhNzExMF9zZWxtdXgoY2xpZW50LCBkZWNvZGVyLT5pbnB1dCk7CisJc2FhNzExMF93cml0ZV9ibG9jayhzZCwgaW5pdHNlcSwgc2l6ZW9mKGluaXRzZXEpKTsKKwlzYWE3MTEwX3NlbG11eChzZCwgZGVjb2Rlci0+aW5wdXQpOwogCXByZXBhcmVfdG9fd2FpdCgmZGVjb2Rlci0+d3EsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJc2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKDI1MCkpOwogCWZpbmlzaF93YWl0KCZkZWNvZGVyLT53cSwgJndhaXQpOwotCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChjbGllbnQpOworCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChzZCk7CiAJaWYgKHN0YXR1cyAmIDB4NDApIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAobm8gc2lnbmFsKVxuIiwgc3RhdHVzKTsKLQkJcmV0dXJuIGRlY29kZXItPm5vcm07CS8vIG5vIGNoYW5nZQorCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzdGF0dXM9MHglMDJ4IChubyBzaWduYWwpXG4iLCBzdGF0dXMpOworCQlyZXR1cm4gZGVjb2Rlci0+bm9ybTsJLyogbm8gY2hhbmdlKi8KIAl9CiAJaWYgKChzdGF0dXMgJiAzKSA9PSAwKSB7Ci0JCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDA2LCAweDgzKTsKKwkJc2FhNzExMF93cml0ZShzZCwgMHgwNiwgMHg4Myk7CiAJCWlmIChzdGF0dXMgJiAweDIwKSB7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IChOVFNDL25vIGNvbG9yKVxuIiwgc3RhdHVzKTsKLQkJCS8vc2FhNzExMF93cml0ZShjbGllbnQsMHgyRSwweDgxKTsKLQkJCXJldHVybiBWSURFT19NT0RFX05UU0M7CisJCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzdGF0dXM9MHglMDJ4IChOVFNDL25vIGNvbG9yKVxuIiwgc3RhdHVzKTsKKwkJCS8qc2FhNzExMF93cml0ZShzZCwweDJFLDB4ODEpOyovCisJCQlyZXR1cm4gVjRMMl9TVERfTlRTQzsKIAkJfQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IChQQUwvbm8gY29sb3IpXG4iLCBzdGF0dXMpOwotCQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LDB4MkUsMHg5QSk7Ci0JCXJldHVybiBWSURFT19NT0RFX1BBTDsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3RhdHVzPTB4JTAyeCAoUEFML25vIGNvbG9yKVxuIiwgc3RhdHVzKTsKKwkJLypzYWE3MTEwX3dyaXRlKHNkLDB4MkUsMHg5QSk7Ki8KKwkJcmV0dXJuIFY0TDJfU1REX1BBTDsKIAl9Ci0JLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwweDA2LDB4MDMpOworCS8qc2FhNzExMF93cml0ZShzZCwweDA2LDB4MDMpOyovCiAJaWYgKHN0YXR1cyAmIDB4MjApIHsJLyogNjBIeiAqLwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IChOVFNDKVxuIiwgc3RhdHVzKTsKLQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4ODYpOwotCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHg1MCk7Ci0JCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDExLCAweDJDKTsKLQkJLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwweDJFLDB4ODEpOwotCQlyZXR1cm4gVklERU9fTU9ERV9OVFNDOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzdGF0dXM9MHglMDJ4IChOVFNDKVxuIiwgc3RhdHVzKTsKKwkJc2FhNzExMF93cml0ZShzZCwgMHgwRCwgMHg4Nik7CisJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEYsIDB4NTApOworCQlzYWE3MTEwX3dyaXRlKHNkLCAweDExLCAweDJDKTsKKwkJLypzYWE3MTEwX3dyaXRlKHNkLDB4MkUsMHg4MSk7Ki8KKwkJcmV0dXJuIFY0TDJfU1REX05UU0M7CiAJfQogCiAJLyogNTBIeiAtPiBQQUwvU0VDQU0gKi8KLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHg4Nik7Ci0Jc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEYsIDB4MTApOwotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDExLCAweDU5KTsKLQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LDB4MkUsMHg5QSk7CisJc2FhNzExMF93cml0ZShzZCwgMHgwRCwgMHg4Nik7CisJc2FhNzExMF93cml0ZShzZCwgMHgwRiwgMHgxMCk7CisJc2FhNzExMF93cml0ZShzZCwgMHgxMSwgMHg1OSk7CisJLypzYWE3MTEwX3dyaXRlKHNkLDB4MkUsMHg5QSk7Ki8KIAogCXByZXBhcmVfdG9fd2FpdCgmZGVjb2Rlci0+d3EsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJc2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKDI1MCkpOwogCWZpbmlzaF93YWl0KCZkZWNvZGVyLT53cSwgJndhaXQpOwogCi0Jc3RhdHVzID0gc2FhNzExMF9yZWFkKGNsaWVudCk7CisJc3RhdHVzID0gc2FhNzExMF9yZWFkKHNkKTsKIAlpZiAoKHN0YXR1cyAmIDB4MDMpID09IDB4MDEpIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAoU0VDQU0pXG4iLCBzdGF0dXMpOwotCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHg4Nyk7Ci0JCXJldHVybiBWSURFT19NT0RFX1NFQ0FNOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzdGF0dXM9MHglMDJ4IChTRUNBTSlcbiIsIHN0YXR1cyk7CisJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEQsIDB4ODcpOworCQlyZXR1cm4gVjRMMl9TVERfU0VDQU07CiAJfQotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCUwMnggKFBBTClcbiIsIHN0YXR1cyk7Ci0JcmV0dXJuIFZJREVPX01PREVfUEFMOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInN0YXR1cz0weCUwMnggKFBBTClcbiIsIHN0YXR1cyk7CisJcmV0dXJuIFY0TDJfU1REX1BBTDsKIH0KIAotc3RhdGljIGludAotc2FhNzExMF9jb21tYW5kIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgdW5zaWduZWQgaW50ICAgICAgIGNtZCwKLQkJIHZvaWQgICAgICAgICAgICAgICphcmcpCitzdGF0aWMgaW50IHNhYTcxMTBfZ19pbnB1dF9zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyICpwc3RhdHVzKQogewotCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IHY7CisJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSB0b19zYWE3MTEwKHNkKTsKKwlpbnQgcmVzID0gVjRMMl9JTl9TVF9OT19TSUdOQUw7CisJaW50IHN0YXR1cyA9IHNhYTcxMTBfcmVhZChzZCk7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgMDoKLQkJLy9zYWE3MTEwX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdHNlcSwgc2l6ZW9mKGluaXRzZXEpKTsKLQkJYnJlYWs7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3RhdHVzPTB4JTAyeCBub3JtPSVsbHhcbiIsCisJCSAgICAgICBzdGF0dXMsICh1bnNpZ25lZCBsb25nIGxvbmcpZGVjb2Rlci0+bm9ybSk7CisJaWYgKCEoc3RhdHVzICYgMHg0MCkpCisJCXJlcyA9IDA7CisJaWYgKCEoc3RhdHVzICYgMHgwMykpCisJCXJlcyB8PSBWNEwyX0lOX1NUX05PX0NPTE9SOwogCi0JY2FzZSBERUNPREVSX0dFVF9DQVBBQklMSVRJRVM6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9jYXBhYmlsaXR5ICpkYyA9IGFyZzsKKwkqcHN0YXR1cyA9IHJlczsKKwlyZXR1cm4gMDsKK30KIAotCQlkYy0+ZmxhZ3MgPQotCQkgICAgVklERU9fREVDT0RFUl9QQUwgfCBWSURFT19ERUNPREVSX05UU0MgfAotCQkgICAgVklERU9fREVDT0RFUl9TRUNBTSB8IFZJREVPX0RFQ09ERVJfQVVUTzsKLQkJZGMtPmlucHV0cyA9IFNBQTcxMTBfTUFYX0lOUFVUOwotCQlkYy0+b3V0cHV0cyA9IFNBQTcxMTBfTUFYX09VVFBVVDsKLQkJYnJlYWs7Ci0JfQorc3RhdGljIGludCBzYWE3MTEwX3F1ZXJ5c3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkICpzdGQpCit7CisJKih2NGwyX3N0ZF9pZCAqKXN0ZCA9IGRldGVybWluZV9ub3JtKHNkKTsKKwlyZXR1cm4gMDsKK30KIAotCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgotCXsKLQkJaW50IHN0YXR1czsKLQkJaW50IHJlcyA9IDA7CitzdGF0aWMgaW50IHNhYTcxMTBfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQoreworCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gdG9fc2FhNzExMChzZCk7CiAKLQkJc3RhdHVzID0gc2FhNzExMF9yZWFkKGNsaWVudCk7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCUwMnggbm9ybT0lZFxuIiwKLQkJCSAgICAgICBzdGF0dXMsIGRlY29kZXItPm5vcm0pOwotCQlpZiAoIShzdGF0dXMgJiAweDQwKSkKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19HT09EOwotCQlpZiAoc3RhdHVzICYgMHgwMykKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19DT0xPUjsKLQotCQlzd2l0Y2ggKGRlY29kZXItPm5vcm0pIHsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1BBTDsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfU0VDQU07Ci0JCQlicmVhazsKLQkJfQotCQkqKGludCAqKSBhcmcgPSByZXM7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9TRVRfTk9STToKLQkJdiA9ICooaW50ICopIGFyZzsKLQkJaWYgKGRlY29kZXItPm5vcm0gIT0gdikgewotCQkJZGVjb2Rlci0+bm9ybSA9IHY7Ci0JCQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LCAweDA2LCAweDAzKTsKLQkJCXN3aXRjaCAodikgewotCQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4ODYpOwotCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBGLCAweDUwKTsKLQkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgxMSwgMHgyQyk7Ci0JCQkJLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyRSwgMHg4MSk7Ci0JCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gTlRTQ1xuIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDg2KTsKLQkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHgxMCk7Ci0JCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MTEsIDB4NTkpOwotCQkJCS8vc2FhNzExMF93cml0ZShjbGllbnQsIDB4MkUsIDB4OUEpOwotCQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvIFBBTFxuIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4ODcpOwotCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBGLCAweDEwKTsKLQkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgxMSwgMHg1OSk7Ci0JCQkJLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyRSwgMHg5QSk7Ci0JCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gU0VDQU1cbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBWSURFT19NT0RFX0FVVE86Ci0JCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gQVVUT1xuIik7Ci0JCQkJZGVjb2Rlci0+bm9ybSA9IGRldGVybWluZV9ub3JtKGNsaWVudCk7Ci0JCQkJKihpbnQgKikgYXJnID0gZGVjb2Rlci0+bm9ybTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIC1FUEVSTTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQotCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6Ci0JCXYgPSAqKGludCAqKSBhcmc7Ci0JCWlmICh2IDwgMCB8fCB2ID49IFNBQTcxMTBfTUFYX0lOUFVUKSB7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbnB1dD0lZCBub3QgYXZhaWxhYmxlXG4iLCB2KTsKKwlpZiAoZGVjb2Rlci0+bm9ybSAhPSBzdGQpIHsKKwkJZGVjb2Rlci0+bm9ybSA9IHN0ZDsKKwkJLypzYWE3MTEwX3dyaXRlKHNkLCAweDA2LCAweDAzKTsqLworCQlpZiAoc3RkICYgVjRMMl9TVERfTlRTQykgeworCQkJc2FhNzExMF93cml0ZShzZCwgMHgwRCwgMHg4Nik7CisJCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBGLCAweDUwKTsKKwkJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MTEsIDB4MkMpOworCQkJLypzYWE3MTEwX3dyaXRlKHNkLCAweDJFLCAweDgxKTsqLworCQkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3dpdGNoZWQgdG8gTlRTQ1xuIik7CisJCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfUEFMKSB7CisJCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBELCAweDg2KTsKKwkJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEYsIDB4MTApOworCQkJc2FhNzExMF93cml0ZShzZCwgMHgxMSwgMHg1OSk7CisJCQkvKnNhYTcxMTBfd3JpdGUoc2QsIDB4MkUsIDB4OUEpOyovCisJCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzd2l0Y2hlZCB0byBQQUxcbiIpOworCQl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1NFQ0FNKSB7CisJCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBELCAweDg3KTsKKwkJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEYsIDB4MTApOworCQkJc2FhNzExMF93cml0ZShzZCwgMHgxMSwgMHg1OSk7CisJCQkvKnNhYTcxMTBfd3JpdGUoc2QsIDB4MkUsIDB4OUEpOyovCisJCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzd2l0Y2hlZCB0byBTRUNBTVxuIik7CisJCX0gZWxzZSB7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAoZGVjb2Rlci0+aW5wdXQgIT0gdikgewotCQkJc2FhNzExMF9zZWxtdXgoY2xpZW50LCB2KTsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvIGlucHV0PSVkXG4iLCB2KTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgREVDT0RFUl9TRVRfT1VUUFVUOgotCQl2ID0gKihpbnQgKikgYXJnOwotCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAodiAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCi0JY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6Ci0JCXYgPSAqKGludCAqKSBhcmc7Ci0JCWlmIChkZWNvZGVyLT5lbmFibGUgIT0gdikgewotCQkJZGVjb2Rlci0+ZW5hYmxlID0gdjsKLQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBFLCB2ID8gMHgxOCA6IDB4ODApOwotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiWVVWICVzXG4iLCB2ID8gIm9uIiA6ICJvZmYiKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKLQl7Ci0JCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7Ci0KLQkJaWYgKGRlY29kZXItPmJyaWdodCAhPSBwaWMtPmJyaWdodG5lc3MpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byAyNTUgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPmJyaWdodCA9IHBpYy0+YnJpZ2h0bmVzczsKLQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDE5LCBkZWNvZGVyLT5icmlnaHQgPj4gOCk7Ci0JCX0KLQkJaWYgKGRlY29kZXItPmNvbnRyYXN0ICE9IHBpYy0+Y29udHJhc3QpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPmNvbnRyYXN0ID0gcGljLT5jb250cmFzdDsKLQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDEzLAotCQkJCSAgICAgIGRlY29kZXItPmNvbnRyYXN0ID4+IDkpOwotCQl9Ci0JCWlmIChkZWNvZGVyLT5zYXQgIT0gcGljLT5jb2xvdXIpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPnNhdCA9IHBpYy0+Y29sb3VyOwotCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MTIsIGRlY29kZXItPnNhdCA+PiA5KTsKLQkJfQotCQlpZiAoZGVjb2Rlci0+aHVlICE9IHBpYy0+aHVlKSB7Ci0JCQkvKiBXZSB3YW50IC0xMjggdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5odWUgPSBwaWMtPmh1ZTsKLQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDA3LAotCQkJCSAgICAgIChkZWNvZGVyLT5odWUgPj4gOCkgLSAxMjgpOwotCQl9Ci0JCWJyZWFrOwogCX0KKwlyZXR1cm4gMDsKK30KIAotCWNhc2UgREVDT0RFUl9EVU1QOgotCQlpZiAoIWRlYnVnKQotCQkJYnJlYWs7Ci0JCWZvciAodiA9IDA7IHYgPCBTQUE3MTEwX05SX1JFRzsgdiArPSAxNikgewotCQkJaW50IGo7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICIlMDJ4OiIsIHYpOwotCQkJZm9yIChqID0gMDsgaiA8IDE2ICYmIHYgKyBqIDwgU0FBNzExMF9OUl9SRUc7IGorKykKLQkJCQlwcmludGsoS0VSTl9DT05UICIgJTAyeCIsIGRlY29kZXItPnJlZ1t2ICsgal0pOwotCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKLQkJfQotCQlicmVhazsKK3N0YXRpYyBpbnQgc2FhNzExMF9zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSB0b19zYWE3MTEwKHNkKTsKIAorCWlmIChyb3V0ZS0+aW5wdXQgPCAwIHx8IHJvdXRlLT5pbnB1dCA+PSBTQUE3MTEwX01BWF9JTlBVVCkgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpbnB1dD0lZCBub3QgYXZhaWxhYmxlXG4iLCByb3V0ZS0+aW5wdXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGRlY29kZXItPmlucHV0ICE9IHJvdXRlLT5pbnB1dCkgeworCQlzYWE3MTEwX3NlbG11eChzZCwgcm91dGUtPmlucHV0KTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3dpdGNoZWQgdG8gaW5wdXQ9JWRcbiIsIHJvdXRlLT5pbnB1dCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMTBfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IHRvX3NhYTcxMTAoc2QpOworCisJaWYgKGRlY29kZXItPmVuYWJsZSAhPSBlbmFibGUpIHsKKwkJZGVjb2Rlci0+ZW5hYmxlID0gZW5hYmxlOworCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBFLCBlbmFibGUgPyAweDE4IDogMHg4MCk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIllVViAlc1xuIiwgZW5hYmxlID8gIm9uIiA6ICJvZmYiKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzExMF9xdWVyeWN0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAyNTUsIDEsIDEyOCk7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMTI3LCAxLCA2NCk7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgLTEyOCwgMTI3LCAxLCAwKTsKIAlkZWZhdWx0OgotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJ1bmtub3duIGNvbW1hbmQgJTA4eFxuIiwgY21kKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNhYTcxMTBfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSB0b19zYWE3MTEwKHNkKTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+YnJpZ2h0OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPmNvbnRyYXN0OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+c2F0OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT5odWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTEwX3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gdG9fc2FhNzExMChzZCk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlpZiAoZGVjb2Rlci0+YnJpZ2h0ICE9IGN0cmwtPnZhbHVlKSB7CisJCQlkZWNvZGVyLT5icmlnaHQgPSBjdHJsLT52YWx1ZTsKKwkJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MTksIGRlY29kZXItPmJyaWdodCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJaWYgKGRlY29kZXItPmNvbnRyYXN0ICE9IGN0cmwtPnZhbHVlKSB7CisJCQlkZWNvZGVyLT5jb250cmFzdCA9IGN0cmwtPnZhbHVlOworCQkJc2FhNzExMF93cml0ZShzZCwgMHgxMywgZGVjb2Rlci0+Y29udHJhc3QpOworCQl9CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJaWYgKGRlY29kZXItPnNhdCAhPSBjdHJsLT52YWx1ZSkgeworCQkJZGVjb2Rlci0+c2F0ID0gY3RybC0+dmFsdWU7CisJCQlzYWE3MTEwX3dyaXRlKHNkLCAweDEyLCBkZWNvZGVyLT5zYXQpOworCQl9CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQlpZiAoZGVjb2Rlci0+aHVlICE9IGN0cmwtPnZhbHVlKSB7CisJCQlkZWNvZGVyLT5odWUgPSBjdHJsLT52YWx1ZTsKKwkJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MDcsIGRlY29kZXItPmh1ZSk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMTBfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfU0FBNzExMCwgMCk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qCi0gKiBHZW5lcmljIGkyYyBwcm9iZQotICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwotICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHNhYTcxMTBfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IHNhYTcxMTBfZ19jaGlwX2lkZW50LAorCS5nX2N0cmwgPSBzYWE3MTEwX2dfY3RybCwKKwkuc19jdHJsID0gc2FhNzExMF9zX2N0cmwsCisJLnF1ZXJ5Y3RybCA9IHNhYTcxMTBfcXVlcnljdHJsLAorfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg5YyA+PiAxLCAweDllID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyBzYWE3MTEwX3R1bmVyX29wcyA9IHsKKwkuc19zdGQgPSBzYWE3MTEwX3Nfc3RkLAorfTsKIAotSTJDX0NMSUVOVF9JTlNNT0Q7CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBzYWE3MTEwX3ZpZGVvX29wcyA9IHsKKwkuc19yb3V0aW5nID0gc2FhNzExMF9zX3JvdXRpbmcsCisJLnNfc3RyZWFtID0gc2FhNzExMF9zX3N0cmVhbSwKKwkucXVlcnlzdGQgPSBzYWE3MTEwX3F1ZXJ5c3RkLAorCS5nX2lucHV0X3N0YXR1cyA9IHNhYTcxMTBfZ19pbnB1dF9zdGF0dXMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBzYWE3MTEwX29wcyA9IHsKKwkuY29yZSA9ICZzYWE3MTEwX2NvcmVfb3BzLAorCS50dW5lciA9ICZzYWE3MTEwX3R1bmVyX29wcywKKwkudmlkZW8gPSAmc2FhNzExMF92aWRlb19vcHMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IHNhYTcxMTBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCWludCBydjsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KQEAgLTQyOSw3ICs0NTMsOSBAQAogCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzExMCksIEdGUF9LRVJORUwpOwogCWlmICghZGVjb2RlcikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JZGVjb2Rlci0+bm9ybSA9IFZJREVPX01PREVfUEFMOworCXNkID0gJmRlY29kZXItPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZzYWE3MTEwX29wcyk7CisJZGVjb2Rlci0+bm9ybSA9IFY0TDJfU1REX1BBTDsKIAlkZWNvZGVyLT5pbnB1dCA9IDA7CiAJZGVjb2Rlci0+ZW5hYmxlID0gMTsKIAlkZWNvZGVyLT5icmlnaHQgPSAzMjc2ODsKQEAgLTQzNywzMCArNDYzLDI5IEBACiAJZGVjb2Rlci0+aHVlID0gMzI3Njg7CiAJZGVjb2Rlci0+c2F0ID0gMzI3Njg7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGVjb2Rlci0+d3EpOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlY29kZXIpOwogCi0JcnYgPSBzYWE3MTEwX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdHNlcSwgc2l6ZW9mKGluaXRzZXEpKTsKKwlydiA9IHNhYTcxMTBfd3JpdGVfYmxvY2soc2QsIGluaXRzZXEsIHNpemVvZihpbml0c2VxKSk7CiAJaWYgKHJ2IDwgMCkgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IHN0YXR1cyAlZFxuIiwgcnYpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpbml0IHN0YXR1cyAlZFxuIiwgcnYpOwogCX0gZWxzZSB7CiAJCWludCB2ZXIsIHN0YXR1czsKLQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MjEsIDB4MTApOwotCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwZSwgMHgxOCk7Ci0JCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDA0KTsKLQkJdmVyID0gc2FhNzExMF9yZWFkKGNsaWVudCk7Ci0JCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDA2KTsKLQkJLy9tZGVsYXkoMTUwKTsKLQkJc3RhdHVzID0gc2FhNzExMF9yZWFkKGNsaWVudCk7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInZlcnNpb24gJXgsIHN0YXR1cz0weCUwMnhcbiIsCisJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MjEsIDB4MTApOworCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBlLCAweDE4KTsKKwkJc2FhNzExMF93cml0ZShzZCwgMHgwRCwgMHgwNCk7CisJCXZlciA9IHNhYTcxMTBfcmVhZChzZCk7CisJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEQsIDB4MDYpOworCQkvKm1kZWxheSgxNTApOyovCisJCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChzZCk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInZlcnNpb24gJXgsIHN0YXR1cz0weCUwMnhcbiIsCiAJCQkgICAgICAgdmVyLCBzdGF0dXMpOwotCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHg4Nik7Ci0JCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBGLCAweDEwKTsKLQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MTEsIDB4NTkpOwotCQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LCAweDJFLCAweDlBKTsKKwkJc2FhNzExMF93cml0ZShzZCwgMHgwRCwgMHg4Nik7CisJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEYsIDB4MTApOworCQlzYWE3MTEwX3dyaXRlKHNkLCAweDExLCAweDU5KTsKKwkJLypzYWE3MTEwX3dyaXRlKHNkLCAweDJFLCAweDlBKTsqLwogCX0KIAotCS8vc2FhNzExMF9zZWxtdXgoY2xpZW50LDApOwotCS8vZGV0ZXJtaW5lX25vcm0oY2xpZW50KTsKKwkvKnNhYTcxMTBfc2VsbXV4KHNkLDApOyovCisJLypkZXRlcm1pbmVfbm9ybShzZCk7Ki8KIAkvKiBzZXR1cCBhbmQgaW1wbGljaXQgbW9kZSAwIHNlbGVjdCBoYXMgYmVlbiBwZXJmb3JtZWQgKi8KIAogCXJldHVybiAwOwpAQCAtNDY4LDcgKzQ5MywxMCBAQAogCiBzdGF0aWMgaW50IHNhYTcxMTBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Ja2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19zYWE3MTEwKHNkKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4Miw4ICs1MTAsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAic2FhNzExMCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMTAsCi0JLmNvbW1hbmQgPSBzYWE3MTEwX2NvbW1hbmQsCiAJLnByb2JlID0gc2FhNzExMF9wcm9iZSwKIAkucmVtb3ZlID0gc2FhNzExMF9yZW1vdmUsCiAJLmlkX3RhYmxlID0gc2FhNzExMF9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTExLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NzM4YTIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTExLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OTIgKzAsMCBAQAotLyoKLSAqIHNhYTcxMTEgLSBQaGlsaXBzIFNBQTcxMTFBIHZpZGVvIGRlY29kZXIgZHJpdmVyIHZlcnNpb24gMC4wLjMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggRGF2ZSBQZXJrcyA8ZHBlcmtzQGlibS5uZXQ+Ci0gKgotICogU2xpZ2h0IGNoYW5nZXMgZm9yIHZpZGVvIHRpbWluZyBhbmQgYXR0YWNobWVudCBvdXRwdXQgYnkKLSAqIFdvbGZnYW5nIFNjaGVyciA8c2NoZXJyQG5ldDR5b3UubmV0PgotICoKLSAqIENoYW5nZXMgYnkgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogICAgLSBtb3ZlZCBvdmVyIHRvIGxpbnV4Pj0yLjQueCBpMmMgcHJvdG9jb2wgKDEvMS8yMDAzKQotICoKLSAqIENoYW5nZXMgYnkgTWljaGFlbCBIdW5vbGQgPG1pY2hhZWxAbWlodS5kZT4KLSAqICAgIC0gaW1wbGVtZW50ZWQgREVDT0RFUl9TRVRfR1BJTywgREVDT0RFUl9JTklULCBERUNPREVSX1NFVF9WQklfQllQQVNTCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgotCi1NT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNzExMSB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOwotTU9EVUxFX0FVVEhPUigiRGF2ZSBQZXJrcyIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgaW50IGRlYnVnOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNkZWZpbmUgU0FBNzExMV9OUl9SRUcJCTB4MTgKLQotc3RydWN0IHNhYTcxMTEgewotCXVuc2lnbmVkIGNoYXIgcmVnW1NBQTcxMTFfTlJfUkVHXTsKLQotCWludCBub3JtOwotCWludCBpbnB1dDsKLQlpbnQgZW5hYmxlOwotfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGlubGluZSBpbnQgc2FhNzExMV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQotewotCXN0cnVjdCBzYWE3MTExICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlkZWNvZGVyLT5yZWdbcmVnXSA9IHZhbHVlOwotCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzYWE3MTExX3dyaXRlX2lmX2NoYW5nZWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKLXsKLQlzdHJ1Y3Qgc2FhNzExMSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JaWYgKGRlY29kZXItPnJlZ1tyZWddICE9IHZhbHVlKSB7Ci0JCWRlY29kZXItPnJlZ1tyZWddID0gdmFsdWU7Ci0JCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNzExMV93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKLXsKLQlpbnQgcmV0ID0gLTE7Ci0JdTggcmVnOwotCi0JLyogdGhlIHNhYTcxMTEgaGFzIGFuIGF1dG9pbmNyZW1lbnQgZnVuY3Rpb24sIHVzZSBpdCBpZgotCSAqIHRoZSBhZGFwdGVyIHVuZGVyc3RhbmRzIHJhdyBJMkMgKi8KLQlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7Ci0JCS8qIGRvIHJhdyBJMkMsIG5vdCBzbWJ1cyBjb21wYXRpYmxlICovCi0JCXN0cnVjdCBzYWE3MTExICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JCXU4IGJsb2NrX2RhdGFbMzJdOwotCQlpbnQgYmxvY2tfbGVuOwotCi0JCXdoaWxlIChsZW4gPj0gMikgewotCQkJYmxvY2tfbGVuID0gMDsKLQkJCWJsb2NrX2RhdGFbYmxvY2tfbGVuKytdID0gcmVnID0gZGF0YVswXTsKLQkJCWRvIHsKLQkJCQlibG9ja19kYXRhW2Jsb2NrX2xlbisrXSA9Ci0JCQkJICAgIGRlY29kZXItPnJlZ1tyZWcrK10gPSBkYXRhWzFdOwotCQkJCWxlbiAtPSAyOwotCQkJCWRhdGEgKz0gMjsKLQkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmIGJsb2NrX2xlbiA8IDMyKTsKLQkJCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsIGJsb2NrX2xlbik7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIGRvIHNvbWUgc2xvdyBJMkMgZW11bGF0aW9uIGtpbmQgb2YgdGhpbmcgKi8KLQkJd2hpbGUgKGxlbiA+PSAyKSB7Ci0JCQlyZWcgPSAqZGF0YSsrOwotCQkJcmV0ID0gc2FhNzExMV93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKyk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlicmVhazsKLQkJCWxlbiAtPSAyOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBzYWE3MTExX2luaXRfZGVjb2RlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0ICppbml0KQotewotCXJldHVybiBzYWE3MTExX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdC0+ZGF0YSwgaW5pdC0+bGVuKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgc2FhNzExMV9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKLXsKLQlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2FhNzExMV9pMmNfaW5pdFtdID0gewotCTB4MDAsIDB4MDAsCQkvKiAwMCAtIElEIGJ5dGUgKi8KLQkweDAxLCAweDAwLAkJLyogMDEgLSByZXNlcnZlZCAqLwotCi0JLypmcm9udCBlbmQgKi8KLQkweDAyLCAweGQwLAkJLyogMDIgLSBGVVNFPTMsIEdVREw9MiwgTU9ERT0wICovCi0JMHgwMywgMHgyMywJCS8qIDAzIC0gSExOUlM9MCwgVkJTTD0xLCBXUE9GRj0wLAotCQkJCSAqIEhPTERHPTAsIEdBRklYPTAsIEdBSTE9MjU2LCBHQUkyPTI1NiAqLwotCTB4MDQsIDB4MDAsCQkvKiAwNCAtIEdBSTE9MjU2ICovCi0JMHgwNSwgMHgwMCwJCS8qIDA1IC0gR0FJMj0yNTYgKi8KLQotCS8qIGRlY29kZXIgKi8KLQkweDA2LCAweGYzLAkJLyogMDYgLSBIU0IgYXQgIDEzKDUwSHopIC8gIDE3KDYwSHopCi0JCQkJICogcGl4ZWxzIGFmdGVyIGVuZCBvZiBsYXN0IGxpbmUgKi8KLQkvKjB4MDcsIDB4MTMsICAgICAqIDA3IC0gSFNTIGF0IDExMyg1MEh6KSAvIDExNyg2MEh6KSBwaXhlbHMKLQkJCQkgKiBhZnRlciBlbmQgb2YgbGFzdCBsaW5lICovCi0JMHgwNywgMHhlOCwJCS8qIDA3IC0gSFNTIHNlZW1zIHRvIGJlIG5lZWRlZCB0bwotCQkJCSAqIHdvcmsgd2l0aCBOVFNDLCB0b28gKi8KLQkweDA4LCAweGM4LAkJLyogMDggLSBBVUZEPTEsIEZTRUw9MSwgRVhGSUw9MCwKLQkJCQkgKiBWVFJDPTEsIEhQTEw9MCwgVk5PST0wICovCi0JMHgwOSwgMHgwMSwJCS8qIDA5IC0gQllQUz0wLCBQUkVGPTAsIEJQU1M9MCwKLQkJCQkgKiBWQkxCPTAsIFVQVENWPTAsIEFQRVI9MSAqLwotCTB4MGEsIDB4ODAsCQkvKiAwYSAtIEJSSUc9MTI4ICovCi0JMHgwYiwgMHg0NywJCS8qIDBiIC0gQ09OVD0xLjEwOSAqLwotCTB4MGMsIDB4NDAsCQkvKiAwYyAtIFNBVE49MS4wICovCi0JMHgwZCwgMHgwMCwJCS8qIDBkIC0gSFVFPTAgKi8KLQkweDBlLCAweDAxLAkJLyogMGUgLSBDRFRPPTAsIENTVEQ9MCwgRENDRj0wLAotCQkJCSAqIEZDVEM9MCwgQ0hCVz0xICovCi0JMHgwZiwgMHgwMCwJCS8qIDBmIC0gcmVzZXJ2ZWQgKi8KLQkweDEwLCAweDQ4LAkJLyogMTAgLSBPRlRTPTEsIEhERUw9MCwgVlJMTj0xLCBZREVMPTAgKi8KLQkweDExLCAweDFjLAkJLyogMTEgLSBHUFNXPTAsIENNOTk9MCwgRkVDTz0wLCBDT01QTz0xLAotCQkJCSAqIE9FWUM9MSwgT0VIVj0xLCBWSVBCPTAsIENPTE89MCAqLwotCTB4MTIsIDB4MDAsCQkvKiAxMiAtIG91dHB1dCBjb250cm9sIDIgKi8KLQkweDEzLCAweDAwLAkJLyogMTMgLSBvdXRwdXQgY29udHJvbCAzICovCi0JMHgxNCwgMHgwMCwJCS8qIDE0IC0gcmVzZXJ2ZWQgKi8KLQkweDE1LCAweDAwLAkJLyogMTUgLSBWQkkgKi8KLQkweDE2LCAweDAwLAkJLyogMTYgLSBWQkkgKi8KLQkweDE3LCAweDAwLAkJLyogMTcgLSBWQkkgKi8KLX07Ci0KLXN0YXRpYyBpbnQgc2FhNzExMV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBzYWE3MTExICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgMDoKLQkJYnJlYWs7Ci0JY2FzZSBERUNPREVSX0lOSVQ6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0ICppbml0ID0gYXJnOwotCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0IHZkaTsKLQotCQlpZiAoTlVMTCAhPSBpbml0KQotCQkJcmV0dXJuIHNhYTcxMTFfaW5pdF9kZWNvZGVyKGNsaWVudCwgaW5pdCk7Ci0JCXZkaS5kYXRhID0gc2FhNzExMV9pMmNfaW5pdDsKLQkJdmRpLmxlbiA9IHNpemVvZihzYWE3MTExX2kyY19pbml0KTsKLQkJcmV0dXJuIHNhYTcxMTFfaW5pdF9kZWNvZGVyKGNsaWVudCwgJnZkaSk7Ci0JfQotCi0JY2FzZSBERUNPREVSX0RVTVA6Ci0JewotCQlpbnQgaTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgU0FBNzExMV9OUl9SRUc7IGkgKz0gMTYpIHsKLQkJCWludCBqOwotCi0JCQl2NGxfaW5mbyhjbGllbnQsICIlMDN4IiwgaSk7Ci0JCQlmb3IgKGogPSAwOyBqIDwgMTYgJiYgaSArIGogPCBTQUE3MTExX05SX1JFRzsgKytqKSB7Ci0JCQkJcHJpbnRrKEtFUk5fQ09OVCAiICUwMngiLAotCQkJCSAgICAgICBzYWE3MTExX3JlYWQoY2xpZW50LCBpICsgaikpOwotCQkJfQotCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQljYXAtPmZsYWdzID0gVklERU9fREVDT0RFUl9QQUwgfAotCQkJICAgICBWSURFT19ERUNPREVSX05UU0MgfAotCQkJICAgICBWSURFT19ERUNPREVSX1NFQ0FNIHwKLQkJCSAgICAgVklERU9fREVDT0RFUl9BVVRPIHwKLQkJCSAgICAgVklERU9fREVDT0RFUl9DQ0lSOwotCQljYXAtPmlucHV0cyA9IDg7Ci0JCWNhcC0+b3V0cHV0cyA9IDE7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCQlpbnQgc3RhdHVzOwotCQlpbnQgcmVzOwotCi0JCXN0YXR1cyA9IHNhYTcxMTFfcmVhZChjbGllbnQsIDB4MWYpOwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM6IDB4JTAyeFxuIiwgc3RhdHVzKTsKLQkJcmVzID0gMDsKLQkJaWYgKChzdGF0dXMgJiAoMSA8PCA2KSkgPT0gMCkgewotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0dPT0Q7Ci0JCX0KLQkJc3dpdGNoIChkZWNvZGVyLT5ub3JtKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX05UU0M7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19QQUw7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1NFQ0FNOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJaWYgKChzdGF0dXMgJiAoMSA8PCA1KSkgIT0gMCkgewotCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19OVFNDOwotCQkJfSBlbHNlIHsKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfUEFMOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKChzdGF0dXMgJiAoMSA8PCAwKSkgIT0gMCkgewotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0NPTE9SOwotCQl9Ci0JCSppYXJnID0gcmVzOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX0dQSU86Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCWlmICgwICE9ICppYXJnKSB7Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgxMSwKLQkJCQkoZGVjb2Rlci0+cmVnWzB4MTFdIHwgMHg4MCkpOwotCQl9IGVsc2UgewotCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MTEsCi0JCQkJKGRlY29kZXItPnJlZ1sweDExXSAmIDB4N2YpKTsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX1ZCSV9CWVBBU1M6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCWlmICgwICE9ICppYXJnKSB7Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgxMywKLQkJCQkoZGVjb2Rlci0+cmVnWzB4MTNdICYgMHhmMCkgfCAweDBhKTsKLQkJfSBlbHNlIHsKLQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDEzLAotCQkJCShkZWNvZGVyLT5yZWdbMHgxM10gJiAweGYwKSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX1NFVF9OT1JNOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXN3aXRjaCAoKmlhcmcpIHsKLQotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDA4LAotCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwOF0gJiAweDNmKSB8IDB4NDApOwotCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MGUsCi0JCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDBlXSAmIDB4OGYpKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwOCwKLQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDhdICYgMHgzZikgfCAweDAwKTsKLQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDBlLAotCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwZV0gJiAweDhmKSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwOCwKLQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDhdICYgMHgzZikgfCAweDAwKTsKLQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDBlLAotCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwZV0gJiAweDhmKSB8IDB4NTApOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX0FVVE86Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwOCwKLQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDhdICYgMHgzZikgfCAweDgwKTsKLQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDBlLAotCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwZV0gJiAweDhmKSk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJfQotCQlkZWNvZGVyLT5ub3JtID0gKmlhcmc7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJaWYgKCppYXJnIDwgMCB8fCAqaWFyZyA+IDcpIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJaWYgKGRlY29kZXItPmlucHV0ICE9ICppYXJnKSB7Ci0JCQlkZWNvZGVyLT5pbnB1dCA9ICppYXJnOwotCQkJLyogc2VsZWN0IG1vZGUgKi8KLQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDAyLAotCQkJCSAgICAgIChkZWNvZGVyLT4KLQkJCQkgICAgICAgcmVnWzB4MDJdICYgMHhmOCkgfCBkZWNvZGVyLT5pbnB1dCk7Ci0JCQkvKiBieXBhc3MgY2hyb21pbmFuY2UgdHJhcCBmb3IgbW9kZXMgNC4uNyAqLwotCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MDksCi0JCQkJICAgICAgKGRlY29kZXItPgotCQkJCSAgICAgICByZWdbMHgwOV0gJiAweDdmKSB8ICgoZGVjb2Rlci0+Ci0JCQkJCQkJICAgICBpbnB1dCA+Ci0JCQkJCQkJICAgICAzKSA/IDB4ODAgOgotCQkJCQkJCSAgICAwKSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCQlpbnQgZW5hYmxlID0gKCppYXJnICE9IDApOwotCi0JCWlmIChkZWNvZGVyLT5lbmFibGUgIT0gZW5hYmxlKSB7Ci0JCQlkZWNvZGVyLT5lbmFibGUgPSBlbmFibGU7Ci0KLQkJCS8qIFJKOiBJZiBvdXRwdXQgc2hvdWxkIGJlIGRpc2FibGVkIChmb3IKLQkJCSAqIHBsYXlpbmcgdmlkZW9zKSwgd2UgYWxzbyBuZWVkIGEgb3BlbiBQTEwuCi0JCQkgKiBUaGUgaW5wdXQgaXMgc2V0IHRvIDAgKHdoZXJlIG5vIGlucHV0Ci0JCQkgKiBzb3VyY2UgaXMgY29ubmVjdGVkKSwgYWx0aG91Z2ggdGhpcwotCQkJICogaXMgbm90IG5lY2Vzc2FyeS4KLQkJCSAqCi0JCQkgKiBJZiBvdXRwdXQgc2hvdWxkIGJlIGVuYWJsZWQsIHdlIGhhdmUgdG8KLQkJCSAqIHJldmVyc2UgdGhlIGFib3ZlLgotCQkJICovCi0KLQkJCWlmIChkZWNvZGVyLT5lbmFibGUpIHsKLQkJCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwMiwKLQkJCQkJICAgICAgKGRlY29kZXItPgotCQkJCQkgICAgICAgcmVnWzB4MDJdICYgMHhmOCkgfAotCQkJCQkgICAgICBkZWNvZGVyLT5pbnB1dCk7Ci0JCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MDgsCi0JCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwOF0gJiAweGZiKSk7Ci0JCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MTEsCi0JCQkJCSAgICAgIChkZWNvZGVyLT4KLQkJCQkJICAgICAgIHJlZ1sweDExXSAmIDB4ZjMpIHwgMHgwYyk7Ci0JCQl9IGVsc2UgewotCQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDAyLAotCQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDJdICYgMHhmOCkpOwotCQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDA4LAotCQkJCQkgICAgICAoZGVjb2Rlci0+Ci0JCQkJCSAgICAgICByZWdbMHgwOF0gJiAweGZiKSB8IDB4MDQpOwotCQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDExLAotCQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MTFdICYgMHhmMykpOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKLQl7Ci0JCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7Ci0KLQkJLyogV2Ugd2FudCAwIHRvIDI1NSB3ZSBnZXQgMC02NTUzNSAqLwotCQlzYWE3MTExX3dyaXRlX2lmX2NoYW5nZWQoY2xpZW50LCAweDBhLCBwaWMtPmJyaWdodG5lc3MgPj4gOCk7Ci0JCS8qIFdlIHdhbnQgMCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MGIsIHBpYy0+Y29udHJhc3QgPj4gOSk7Ci0JCS8qIFdlIHdhbnQgMCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MGMsIHBpYy0+Y29sb3VyID4+IDkpOwotCQkvKiBXZSB3YW50IC0xMjggdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDBkLCAocGljLT5odWUgLSAzMjc2OCkgPj4gOCk7Ci0JCWJyZWFrOwotCX0KLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDQ4ID4+IDEsIEkyQ19DTElFTlRfRU5EIH07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwotCi1zdGF0aWMgaW50IHNhYTcxMTFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3Qgc2FhNzExMSAqZGVjb2RlcjsKLQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0IHZkaTsKLQotCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAotCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7Ci0KLQlkZWNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxMTEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZGVjb2RlciA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlkZWNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9OVFNDOwotCWRlY29kZXItPmlucHV0ID0gMDsKLQlkZWNvZGVyLT5lbmFibGUgPSAxOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlY29kZXIpOwotCi0JdmRpLmRhdGEgPSBzYWE3MTExX2kyY19pbml0OwotCXZkaS5sZW4gPSBzaXplb2Yoc2FhNzExMV9pMmNfaW5pdCk7Ci0JaSA9IHNhYTcxMTFfaW5pdF9kZWNvZGVyKGNsaWVudCwgJnZkaSk7Ci0JaWYgKGkgPCAwKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgc3RhdHVzICVkXG4iLCBpKTsKLQl9IGVsc2UgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJyZXZpc2lvbiAleFxuIiwKLQkJCXNhYTcxMTFfcmVhZChjbGllbnQsIDB4MDApID4+IDQpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzYWE3MTExX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTcxMTFfaWRbXSA9IHsKLQl7ICJzYWE3MTExX29sZCIsIDAgfSwJLyogInNhYTcxMTEiIG1hcHMgdG8gdGhlIHNhYTcxMTUgZHJpdmVyICovCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNhYTcxMTFfaWQpOwotCi1zdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7Ci0JLm5hbWUgPSAic2FhNzExMSIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMTFBLAotCS5jb21tYW5kID0gc2FhNzExMV9jb21tYW5kLAotCS5wcm9iZSA9IHNhYTcxMTFfcHJvYmUsCi0JLnJlbW92ZSA9IHNhYTcxMTFfcmVtb3ZlLAotCS5pZF90YWJsZSA9IHNhYTcxMTFfaWQsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NhNzA5Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTQuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNjggKzAsMCBAQAotLyoKLSAqIHNhYTcxMTQgLSBQaGlsaXBzIFNBQTcxMTRIIHZpZGVvIGRlY29kZXIgZHJpdmVyIHZlcnNpb24gMC4wLjEKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgTWF4aW0gWWV2dHl1c2hraW4gPG1heEBsaW51eG1lZGlhbGFicy5jb20+Ci0gKgotICogQmFzZWQgb24gc2FhNzExMSBkcml2ZXIgYnkgRGF2ZSBQZXJrcwotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCBEYXZlIFBlcmtzIDxkcGVya3NAaWJtLm5ldD4KLSAqCi0gKiBTbGlnaHQgY2hhbmdlcyBmb3IgdmlkZW8gdGltaW5nIGFuZCBhdHRhY2htZW50IG91dHB1dCBieQotICogV29sZmdhbmcgU2NoZXJyIDxzY2hlcnJAbmV0NHlvdS5uZXQ+Ci0gKgotICogQ2hhbmdlcyBieSBSb25hbGQgQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKiAgICAtIG1vdmVkIG92ZXIgdG8gbGludXg+PTIuNC54IGkyYyBwcm90b2NvbCAoMS8xLzIwMDMpCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgotCi1NT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNzExNEggdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKLU1PRFVMRV9BVVRIT1IoIk1heGltIFlldnR5dXNoa2luIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLXN0YXRpYyBpbnQgZGVidWc7Ci1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RydWN0IHNhYTcxMTQgewotCXVuc2lnbmVkIGNoYXIgcmVnWzB4ZjAgKiAyXTsKLQotCWludCBub3JtOwotCWludCBpbnB1dDsKLQlpbnQgZW5hYmxlOwotCWludCBicmlnaHQ7Ci0JaW50IGNvbnRyYXN0OwotCWludCBodWU7Ci0JaW50IHNhdDsKLQlpbnQgcGxheWJhY2s7Ci19OwotCi0jZGVmaW5lICAgSTJDX0RFTEFZICAgMTAKLQotCi0vLyNkZWZpbmUgU0FBXzcxMTRfTlRTQ19IU1lOQ19TVEFSVCAgICAgICAoLTMpCi0vLyNkZWZpbmUgU0FBXzcxMTRfTlRTQ19IU1lOQ19TVE9QICAgICAgICAoLTE4KQotCi0jZGVmaW5lIFNBQV83MTE0X05UU0NfSFNZTkNfU1RBUlQgICgtMTcpCi0jZGVmaW5lIFNBQV83MTE0X05UU0NfSFNZTkNfU1RPUCAgICgtMzIpCi0KLS8vI2RlZmluZSBTQUFfNzExNF9OVFNDX0hPRkZTRVQgICAgICAgICAgICg1KQotI2RlZmluZSBTQUFfNzExNF9OVFNDX0hPRkZTRVQJCSg2KQotI2RlZmluZSBTQUFfNzExNF9OVFNDX1ZPRkZTRVQgICAgICAgICAgICgxMCkKLSNkZWZpbmUgU0FBXzcxMTRfTlRTQ19XSURUSCAgICAgICAgICAgICAoNzIwKQotI2RlZmluZSBTQUFfNzExNF9OVFNDX0hFSUdIVCAgICAgICAgICAgICgyNTApCi0KLSNkZWZpbmUgU0FBXzcxMTRfU0VDQU1fSFNZTkNfU1RBUlQgICAgICAoLTE3KQotI2RlZmluZSBTQUFfNzExNF9TRUNBTV9IU1lOQ19TVE9QICAgICAgICgtMzIpCi0KLSNkZWZpbmUgU0FBXzcxMTRfU0VDQU1fSE9GRlNFVCAgICAgICAgICAoMikKLSNkZWZpbmUgU0FBXzcxMTRfU0VDQU1fVk9GRlNFVCAgICAgICAgICAoMTApCi0jZGVmaW5lIFNBQV83MTE0X1NFQ0FNX1dJRFRIICAgICAgICAgICAgKDcyMCkKLSNkZWZpbmUgU0FBXzcxMTRfU0VDQU1fSEVJR0hUICAgICAgICAgICAoMzAwKQotCi0jZGVmaW5lIFNBQV83MTE0X1BBTF9IU1lOQ19TVEFSVCAgICAgICAgKC0xNykKLSNkZWZpbmUgU0FBXzcxMTRfUEFMX0hTWU5DX1NUT1AgICAgICAgICAoLTMyKQotCi0jZGVmaW5lIFNBQV83MTE0X1BBTF9IT0ZGU0VUICAgICAgICAgICAgKDIpCi0jZGVmaW5lIFNBQV83MTE0X1BBTF9WT0ZGU0VUICAgICAgICAgICAgKDEwKQotI2RlZmluZSBTQUFfNzExNF9QQUxfV0lEVEggICAgICAgICAgICAgICg3MjApCi0jZGVmaW5lIFNBQV83MTE0X1BBTF9IRUlHSFQgICAgICAgICAgICAgKDMwMCkKLQotCi0KLSNkZWZpbmUgU0FBXzcxMTRfVkVSVElDQUxfQ0hST01BX09GRlNFVCAgICAgICAgIDAJLy8weDUwNTA0MDQwCi0jZGVmaW5lIFNBQV83MTE0X1ZFUlRJQ0FMX0xVTUFfT0ZGU0VUICAgICAgICAgICAwCi0KLSNkZWZpbmUgUkVHX0FERFIoeCkgKCgoeCkgPDwgMSkgKyAxKQotI2RlZmluZSBMT0JZVEUoeCkgKCh1bnNpZ25lZCBjaGFyKSgoeCkgJiAweGZmKSkKLSNkZWZpbmUgSElCWVRFKHgpICgodW5zaWduZWQgY2hhcikoKCh4KSA+PiA4KSAmIDB4ZmYpKQotI2RlZmluZSBMT1dPUkQoeCkgKCh1bnNpZ25lZCBzaG9ydCBpbnQpKCh4KSAmIDB4ZmZmZikpCi0jZGVmaW5lIEhJV09SRCh4KSAoKHVuc2lnbmVkIHNob3J0IGludCkoKCh4KSA+PiAxNikgJiAweGZmZmYpKQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IHNhYTcxMTRfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKLXsKLQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwotfQotCi1zdGF0aWMgaW50IHNhYTcxMTRfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JaW50IHJldCA9IC0xOwotCXU4IHJlZzsKLQotCS8qIHRoZSBzYWE3MTE0IGhhcyBhbiBhdXRvaW5jcmVtZW50IGZ1bmN0aW9uLCB1c2UgaXQgaWYKLQkgKiB0aGUgYWRhcHRlciB1bmRlcnN0YW5kcyByYXcgSTJDICovCi0JaWYgKGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewotCQkvKiBkbyByYXcgSTJDLCBub3Qgc21idXMgY29tcGF0aWJsZSAqLwotCQl1OCBibG9ja19kYXRhWzMyXTsKLQkJaW50IGJsb2NrX2xlbjsKLQotCQl3aGlsZSAobGVuID49IDIpIHsKLQkJCWJsb2NrX2xlbiA9IDA7Ci0JCQlibG9ja19kYXRhW2Jsb2NrX2xlbisrXSA9IHJlZyA9IGRhdGFbMF07Ci0JCQlkbyB7Ci0JCQkJYmxvY2tfZGF0YVtibG9ja19sZW4rK10gPSBkYXRhWzFdOwotCQkJCXJlZysrOwotCQkJCWxlbiAtPSAyOwotCQkJCWRhdGEgKz0gMjsKLQkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmIGJsb2NrX2xlbiA8IDMyKTsKLQkJCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsIGJsb2NrX2xlbik7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIGRvIHNvbWUgc2xvdyBJMkMgZW11bGF0aW9uIGtpbmQgb2YgdGhpbmcgKi8KLQkJd2hpbGUgKGxlbiA+PSAyKSB7Ci0JCQlyZWcgPSAqZGF0YSsrOwotCQkJcmV0ID0gc2FhNzExNF93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKyk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlicmVhazsKLQkJCWxlbiAtPSAyOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgc2FhNzExNF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKLXsKLQlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLy8gaW5pdGlhbGx5IHNldCBOVFNDLCBjb21wb3NpdGUKLQotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpbml0W10gPSB7Ci0JMHgwMCwgMHgwMCwJCS8qIDAwIC0gSUQgYnl0ZSAsIGNoaXAgdmVyc2lvbiwKLQkJCQkgKiByZWFkIG9ubHkgKi8KLQkweDAxLCAweDA4LAkJLyogMDEgLSBYLFgsWCxYLCBJREVMMyB0byBJREVMMCAtCi0JCQkJICogaG9yaXpvbnRhbCBpbmNyZW1lbnQgZGVsYXksCi0JCQkJICogcmVjb21tZW5kZWQgcG9zaXRpb24gKi8KLQkweDAyLCAweDAwLAkJLyogMDIgLSBGVVNFPTMsIEdVREw9MiwgTU9ERT0wIDsKLQkJCQkgKiBpbnB1dCBjb250cm9sICovCi0JMHgwMywgMHgxMCwJCS8qIDAzIC0gSExOUlM9MCwgVkJTTD0xLCBXUE9GRj0wLAotCQkJCSAqIEhPTERHPTAsIEdBRklYPTAsIEdBSTE9MjU2LCBHQUkyPTI1NiAqLwotCTB4MDQsIDB4OTAsCQkvKiAwNCAtIEdBSTE9MjU2ICovCi0JMHgwNSwgMHg5MCwJCS8qIDA1IC0gR0FJMj0yNTYgKi8KLQkweDA2LCBTQUFfNzExNF9OVFNDX0hTWU5DX1NUQVJULAkvKiAwNiAtIEhTQjogaHN5bmMgc3RhcnQsCi0JCQkJICogZGVwZW5kcyBvbiB0aGUgdmlkZW8gc3RhbmRhcmQgKi8KLQkweDA3LCBTQUFfNzExNF9OVFNDX0hTWU5DX1NUT1AsCS8qIDA3IC0gSFNTOiBoc3luYyBzdG9wLCBkZXBlbmRzCi0JCQkJICpvbiB0aGUgdmlkZW8gc3RhbmRhcmQgKi8KLQkweDA4LCAweGI4LAkJLyogMDggLSBBVUZEPTEsIEZTRUw9MSwgRVhGSUw9MCwgVlRSQz0xLAotCQkJCSAqIEhQTEw6IGZyZWUgcnVubmluZyBpbiBwbGF5YmFjaywgbG9ja2VkCi0JCQkJICogaW4gY2FwdHVyZSwgVk5PST0wICovCi0JMHgwOSwgMHg4MCwJCS8qIDA5IC0gQllQUz0wLCBQUkVGPTAsIEJQU1M9MCwgVkJMQj0wLAotCQkJCSAqIFVQVENWPTAsIEFQRVI9MTsgZGVwZW5kcyBmcm9tIGlucHV0ICovCi0JMHgwYSwgMHg4MCwJCS8qIDBhIC0gQlJJRz0xMjggKi8KLQkweDBiLCAweDQ0LAkJLyogMGIgLSBDT05UPTEuMTA5ICovCi0JMHgwYywgMHg0MCwJCS8qIDBjIC0gU0FUTj0xLjAgKi8KLQkweDBkLCAweDAwLAkJLyogMGQgLSBIVUU9MCAqLwotCTB4MGUsIDB4ODQsCQkvKiAwZSAtIENEVE8sIENTVEQyIHRvIDAsIERDVkYsIEZDVEMsCi0JCQkJICogQ0NPTUI7IGRlcGVuZHMgZnJvbSB2aWRlbyBzdGFuZGFyZCAqLwotCTB4MGYsIDB4MjQsCQkvKiAwZiAtIEFDR0MsQ0dBSU42IHRvIENHQUlOMDsgZGVwZW5kcwotCQkJCSAqIGZyb20gdmlkZW8gc3RhbmRhcmQgKi8KLQkweDEwLCAweDAzLAkJLyogMTAgLSBPRkZVMSB0byAwLCBPRkZWMSB0byAwLCBDSEJXLAotCQkJCSAqIExDQlcyIHRvIDAgKi8KLQkweDExLCAweDU5LAkJLyogMTEgLSBDT0xPLCBSVFAxLCBIRURMMSB0byAwLCBSVFAwLAotCQkJCSAqIFlERUwyIHRvIDAgKi8KLQkweDEyLCAweGM5LAkJLyogMTIgLSBSVCBzaWduYWwgY29udHJvbCBSVFNFMTMgdG8gMTAKLQkJCQkgKiBhbmQgMDMgdG8gMDAgKi8KLQkweDEzLCAweDgwLAkJLyogMTMgLSBSVC9YIHBvcnQgb3V0cHV0IGNvbnRyb2wgICovCi0JMHgxNCwgMHgwMCwJCS8qIDE0IC0gYW5hbG9nLCBBREMsIGNvbXBhdGliaWxpdHkgY29udHJvbCAqLwotCTB4MTUsIDB4MDAsCQkvKiAxNSAtIFZHQVRFIHN0YXJ0IEZJRCBjaGFuZ2UgICovCi0JMHgxNiwgMHhmZSwJCS8qIDE2IC0gVkdBVEUgc3RvcCAqLwotCTB4MTcsIDB4MDAsCQkvKiAxNyAtIE1pc2MuLCBWR0FURSBNU0JzICovCi0JMHgxOCwgMHg0MCwJCS8qIFJBV0cgKi8KLQkweDE5LCAweDgwLAkJLyogUkFXTyAqLwotCTB4MWEsIDB4MDAsCi0JMHgxYiwgMHgwMCwKLQkweDFjLCAweDAwLAotCTB4MWQsIDB4MDAsCi0JMHgxZSwgMHgwMCwKLQkweDFmLCAweDAwLAkJLyogc3RhdHVzIGJ5dGUsIHJlYWQgb25seSAqLwotCTB4MjAsIDB4MDAsCQkvKiB2aWRlbyBkZWNvZGVyIHJlc2VydmVkIHBhcnQgKi8KLQkweDIxLCAweDAwLAotCTB4MjIsIDB4MDAsCi0JMHgyMywgMHgwMCwKLQkweDI0LCAweDAwLAotCTB4MjUsIDB4MDAsCi0JMHgyNiwgMHgwMCwKLQkweDI3LCAweDAwLAotCTB4MjgsIDB4MDAsCi0JMHgyOSwgMHgwMCwKLQkweDJhLCAweDAwLAotCTB4MmIsIDB4MDAsCi0JMHgyYywgMHgwMCwKLQkweDJkLCAweDAwLAotCTB4MmUsIDB4MDAsCi0JMHgyZiwgMHgwMCwKLQkweDMwLCAweGJjLAkJLyogYXVkaW8gY2xvY2sgZ2VuZXJhdG9yICovCi0JMHgzMSwgMHhkZiwKLQkweDMyLCAweDAyLAotCTB4MzMsIDB4MDAsCi0JMHgzNCwgMHhjZCwKLQkweDM1LCAweGNjLAotCTB4MzYsIDB4M2EsCi0JMHgzNywgMHgwMCwKLQkweDM4LCAweDAzLAotCTB4MzksIDB4MTAsCi0JMHgzYSwgMHgwMCwKLQkweDNiLCAweDAwLAotCTB4M2MsIDB4MDAsCi0JMHgzZCwgMHgwMCwKLQkweDNlLCAweDAwLAotCTB4M2YsIDB4MDAsCi0JMHg0MCwgMHgwMCwJCS8qIFZCSSBkYXRhIHNsaWNlciAqLwotCTB4NDEsIDB4ZmYsCi0JMHg0MiwgMHhmZiwKLQkweDQzLCAweGZmLAotCTB4NDQsIDB4ZmYsCi0JMHg0NSwgMHhmZiwKLQkweDQ2LCAweGZmLAotCTB4NDcsIDB4ZmYsCi0JMHg0OCwgMHhmZiwKLQkweDQ5LCAweGZmLAotCTB4NGEsIDB4ZmYsCi0JMHg0YiwgMHhmZiwKLQkweDRjLCAweGZmLAotCTB4NGQsIDB4ZmYsCi0JMHg0ZSwgMHhmZiwKLQkweDRmLCAweGZmLAotCTB4NTAsIDB4ZmYsCi0JMHg1MSwgMHhmZiwKLQkweDUyLCAweGZmLAotCTB4NTMsIDB4ZmYsCi0JMHg1NCwgMHhmZiwKLQkweDU1LCAweGZmLAotCTB4NTYsIDB4ZmYsCi0JMHg1NywgMHhmZiwKLQkweDU4LCAweDQwLAkJLy8gZnJhbWluZyBjb2RlCi0JMHg1OSwgMHg0NywJCS8vIGhvcml6b250YWwgb2Zmc2V0Ci0JMHg1YSwgMHgwNiwJCS8vIHZlcnRpY2FsIG9mZnNldAotCTB4NWIsIDB4ODMsCQkvLyBmaWVsZCBvZmZzZXQKLQkweDVjLCAweDAwLAkJLy8gcmVzZXJ2ZWQKLQkweDVkLCAweDNlLAkJLy8gaGVhZGVyIGFuZCBkYXRhCi0JMHg1ZSwgMHgwMCwJCS8vIHNsaWNlZCBkYXRhCi0JMHg1ZiwgMHgwMCwJCS8vIHJlc2VydmVkCi0JMHg2MCwgMHgwMCwJCS8qIHZpZGVvIGRlY29kZXIgcmVzZXJ2ZWQgcGFydCAqLwotCTB4NjEsIDB4MDAsCi0JMHg2MiwgMHgwMCwKLQkweDYzLCAweDAwLAotCTB4NjQsIDB4MDAsCi0JMHg2NSwgMHgwMCwKLQkweDY2LCAweDAwLAotCTB4NjcsIDB4MDAsCi0JMHg2OCwgMHgwMCwKLQkweDY5LCAweDAwLAotCTB4NmEsIDB4MDAsCi0JMHg2YiwgMHgwMCwKLQkweDZjLCAweDAwLAotCTB4NmQsIDB4MDAsCi0JMHg2ZSwgMHgwMCwKLQkweDZmLCAweDAwLAotCTB4NzAsIDB4MDAsCQkvKiB2aWRlbyBkZWNvZGVyIHJlc2VydmVkIHBhcnQgKi8KLQkweDcxLCAweDAwLAotCTB4NzIsIDB4MDAsCi0JMHg3MywgMHgwMCwKLQkweDc0LCAweDAwLAotCTB4NzUsIDB4MDAsCi0JMHg3NiwgMHgwMCwKLQkweDc3LCAweDAwLAotCTB4NzgsIDB4MDAsCi0JMHg3OSwgMHgwMCwKLQkweDdhLCAweDAwLAotCTB4N2IsIDB4MDAsCi0JMHg3YywgMHgwMCwKLQkweDdkLCAweDAwLAotCTB4N2UsIDB4MDAsCi0JMHg3ZiwgMHgwMCwKLQkweDgwLCAweDAwLAkJLyogWC1wb3J0LCBJLXBvcnQgYW5kIHNjYWxlciAqLwotCTB4ODEsIDB4MDAsCi0JMHg4MiwgMHgwMCwKLQkweDgzLCAweDAwLAotCTB4ODQsIDB4YzUsCi0JMHg4NSwgMHgwZCwJCS8vIGhzeW5jIGFuZCB2c3luYyA/Ci0JMHg4NiwgMHg0MCwKLQkweDg3LCAweDAxLAotCTB4ODgsIDB4MDAsCi0JMHg4OSwgMHgwMCwKLQkweDhhLCAweDAwLAotCTB4OGIsIDB4MDAsCi0JMHg4YywgMHgwMCwKLQkweDhkLCAweDAwLAotCTB4OGUsIDB4MDAsCi0JMHg4ZiwgMHgwMCwKLQkweDkwLCAweDAzLAkJLyogVGFzayBBIGRlZmluaXRpb24gICAgICAgICAgICovCi0JMHg5MSwgMHgwOCwKLQkweDkyLCAweDAwLAotCTB4OTMsIDB4NDAsCi0JMHg5NCwgMHgwMCwJCS8vIHdpbmRvdyBzZXR0aW5ncwotCTB4OTUsIDB4MDAsCi0JMHg5NiwgMHgwMCwKLQkweDk3LCAweDAwLAotCTB4OTgsIDB4MDAsCi0JMHg5OSwgMHgwMCwKLQkweDlhLCAweDAwLAotCTB4OWIsIDB4MDAsCi0JMHg5YywgMHgwMCwKLQkweDlkLCAweDAwLAotCTB4OWUsIDB4MDAsCi0JMHg5ZiwgMHgwMCwKLQkweGEwLCAweDAxLAkJLyogaG9yaXpvbnRhbCBpbnRlZ2VyIHByZXNjYWxpbmcgcmF0aW8gKi8KLQkweGExLCAweDAwLAkJLyogaG9yaXpvbnRhbCBwcmVzY2FsZXIgYWNjdW11bGF0aW9uCi0JCQkJICogc2VxdWVuY2UgbGVuZ3RoICovCi0JMHhhMiwgMHgwMCwJCS8qIFVWIEZJUiBmaWx0ZXIsIFkgRklSIGZpbHRlciwgcHJlc2NhbGVyCi0JCQkJICogREMgZ2FpbiAqLwotCTB4YTMsIDB4MDAsCi0JMHhhNCwgMHg4MCwJCS8vIGx1bWluYW5jZSBicmlnaHRuZXNzCi0JMHhhNSwgMHg0MCwJCS8vIGx1bWluYW5jZSBnYWluCi0JMHhhNiwgMHg0MCwJCS8vIGNocm9taW5hbmNlIHNhdHVyYXRpb24KLQkweGE3LCAweDAwLAotCTB4YTgsIDB4MDAsCQkvLyBob3Jpem9udGFsIGx1bWluYW5jZSBzY2FsaW5nIGluY3JlbWVudAotCTB4YTksIDB4MDQsCi0JMHhhYSwgMHgwMCwJCS8vIGhvcml6b250YWwgbHVtaW5hbmNlIHBoYXNlIG9mZnNldAotCTB4YWIsIDB4MDAsCi0JMHhhYywgMHgwMCwJCS8vIGhvcml6b250YWwgY2hyb21pbmFuY2Ugc2NhbGluZyBpbmNyZW1lbnQKLQkweGFkLCAweDAyLAotCTB4YWUsIDB4MDAsCQkvLyBob3Jpem9udGFsIGNocm9taW5hbmNlIHBoYXNlIG9mZnNldAotCTB4YWYsIDB4MDAsCi0JMHhiMCwgMHgwMCwJCS8vIHZlcnRpY2FsIGx1bWluYW5jZSBzY2FsaW5nIGluY3JlbWVudAotCTB4YjEsIDB4MDQsCi0JMHhiMiwgMHgwMCwJCS8vIHZlcnRpY2FsIGNocm9taW5hbmNlIHNjYWxpbmcgaW5jcmVtZW50Ci0JMHhiMywgMHgwNCwKLQkweGI0LCAweDAwLAotCTB4YjUsIDB4MDAsCi0JMHhiNiwgMHgwMCwKLQkweGI3LCAweDAwLAotCTB4YjgsIDB4MDAsCi0JMHhiOSwgMHgwMCwKLQkweGJhLCAweDAwLAotCTB4YmIsIDB4MDAsCi0JMHhiYywgMHgwMCwKLQkweGJkLCAweDAwLAotCTB4YmUsIDB4MDAsCi0JMHhiZiwgMHgwMCwKLQkweGMwLCAweDAyLAkJLy8gVGFzayBCIGRlZmluaXRpb24KLQkweGMxLCAweDA4LAotCTB4YzIsIDB4MDAsCi0JMHhjMywgMHg0MCwKLQkweGM0LCAweDAwLAkJLy8gd2luZG93IHNldHRpbmdzCi0JMHhjNSwgMHgwMCwKLQkweGM2LCAweDAwLAotCTB4YzcsIDB4MDAsCi0JMHhjOCwgMHgwMCwKLQkweGM5LCAweDAwLAotCTB4Y2EsIDB4MDAsCi0JMHhjYiwgMHgwMCwKLQkweGNjLCAweDAwLAotCTB4Y2QsIDB4MDAsCi0JMHhjZSwgMHgwMCwKLQkweGNmLCAweDAwLAotCTB4ZDAsIDB4MDEsCQkvLyBob3Jpem9udGFsIGludGVnZXIgcHJlc2NhbGluZyByYXRpbwotCTB4ZDEsIDB4MDAsCQkvLyBob3Jpem9udGFsIHByZXNjYWxlciBhY2N1bXVsYXRpb24gc2VxdWVuY2UgbGVuZ3RoCi0JMHhkMiwgMHgwMCwJCS8vIFVWIEZJUiBmaWx0ZXIsIFkgRklSIGZpbHRlciwgcHJlc2NhbGVyIERDIGdhaW4KLQkweGQzLCAweDAwLAotCTB4ZDQsIDB4ODAsCQkvLyBsdW1pbmFuY2UgYnJpZ2h0bmVzcwotCTB4ZDUsIDB4NDAsCQkvLyBsdW1pbmFuY2UgZ2FpbgotCTB4ZDYsIDB4NDAsCQkvLyBjaHJvbWluYW5jZSBzYXR1cmF0aW9uCi0JMHhkNywgMHgwMCwKLQkweGQ4LCAweDAwLAkJLy8gaG9yaXpvbnRhbCBsdW1pbmFuY2Ugc2NhbGluZyBpbmNyZW1lbnQKLQkweGQ5LCAweDA0LAotCTB4ZGEsIDB4MDAsCQkvLyBob3Jpem9udGFsIGx1bWluYW5jZSBwaGFzZSBvZmZzZXQKLQkweGRiLCAweDAwLAotCTB4ZGMsIDB4MDAsCQkvLyBob3Jpem9udGFsIGNocm9taW5hbmNlIHNjYWxpbmcgaW5jcmVtZW50Ci0JMHhkZCwgMHgwMiwKLQkweGRlLCAweDAwLAkJLy8gaG9yaXpvbnRhbCBjaHJvbWluYW5jZSBwaGFzZSBvZmZzZXQKLQkweGRmLCAweDAwLAotCTB4ZTAsIDB4MDAsCQkvLyB2ZXJ0aWNhbCBsdW1pbmFuY2Ugc2NhbGluZyBpbmNyZW1lbnQKLQkweGUxLCAweDA0LAotCTB4ZTIsIDB4MDAsCQkvLyB2ZXJ0aWNhbCBjaHJvbWluYW5jZSBzY2FsaW5nIGluY3JlbWVudAotCTB4ZTMsIDB4MDQsCi0JMHhlNCwgMHgwMCwKLQkweGU1LCAweDAwLAotCTB4ZTYsIDB4MDAsCi0JMHhlNywgMHgwMCwKLQkweGU4LCAweDAwLAotCTB4ZTksIDB4MDAsCi0JMHhlYSwgMHgwMCwKLQkweGViLCAweDAwLAotCTB4ZWMsIDB4MDAsCi0JMHhlZCwgMHgwMCwKLQkweGVlLCAweDAwLAotCTB4ZWYsIDB4MDAKLX07Ci0KLXN0YXRpYyBpbnQgc2FhNzExNF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBzYWE3MTE0ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgMDoKLQkJLy9kcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHdyaXRpbmcgaW5pdFxuIiwgSTJDX05BTUUoY2xpZW50KSk7Ci0JCS8vc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGluaXQsIHNpemVvZihpbml0KSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBERUNPREVSX0RVTVA6Ci0JewotCQlpbnQgaTsKLQotCQlpZiAoIWRlYnVnKQotCQkJYnJlYWs7Ci0JCXY0bF9pbmZvKGNsaWVudCwgImRlY29kZXIgZHVtcFxuIik7Ci0KLQkJZm9yIChpID0gMDsgaSA8IDMyOyBpICs9IDE2KSB7Ci0JCQlpbnQgajsKLQotCQkJdjRsX2luZm8oY2xpZW50LCAiJTAzeCIsIGkpOwotCQkJZm9yIChqID0gMDsgaiA8IDE2OyArK2opIHsKLQkJCQlwcmludGsoS0VSTl9DT05UICIgJTAyeCIsCi0JCQkJICAgICAgIHNhYTcxMTRfcmVhZChjbGllbnQsIGkgKyBqKSk7Ci0JCQl9Ci0JCQlwcmludGsoS0VSTl9DT05UICJcbiIpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgotCXsKLQkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImdldCBjYXBhYmlsaXRpZXNcbiIpOwotCi0JCWNhcC0+ZmxhZ3MgPSBWSURFT19ERUNPREVSX1BBTCB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfTlRTQyB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfQVVUTyB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfQ0NJUjsKLQkJY2FwLT5pbnB1dHMgPSA4OwotCQljYXAtPm91dHB1dHMgPSAxOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfR0VUX1NUQVRVUzoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQkJaW50IHN0YXR1czsKLQkJaW50IHJlczsKLQotCQlzdGF0dXMgPSBzYWE3MTE0X3JlYWQoY2xpZW50LCAweDFmKTsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM6IDB4JTAyeFxuIiwgc3RhdHVzKTsKLQkJcmVzID0gMDsKLQkJaWYgKChzdGF0dXMgJiAoMSA8PCA2KSkgPT0gMCkgewotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0dPT0Q7Ci0JCX0KLQkJc3dpdGNoIChkZWNvZGVyLT5ub3JtKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX05UU0M7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19QQUw7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1NFQ0FNOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJaWYgKChzdGF0dXMgJiAoMSA8PCA1KSkgIT0gMCkgewotCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19OVFNDOwotCQkJfSBlbHNlIHsKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfUEFMOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKChzdGF0dXMgJiAoMSA8PCAwKSkgIT0gMCkgewotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0NPTE9SOwotCQl9Ci0JCSppYXJnID0gcmVzOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX05PUk06Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJc2hvcnQgaW50IGhvZmYgPSAwLCB2b2ZmID0gMCwgdyA9IDAsIGggPSAwOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBub3JtXG4iKTsKLQotCQlzd2l0Y2ggKCppYXJnKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiTlRTQ1xuIik7Ci0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwNildID0KLQkJCSAgICBTQUFfNzExNF9OVFNDX0hTWU5DX1NUQVJUOwotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDcpXSA9Ci0JCQkgICAgU0FBXzcxMTRfTlRTQ19IU1lOQ19TVE9QOwotCi0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwOCldID0gZGVjb2Rlci0+cGxheWJhY2sgPyAweDdjIDogMHhiODsJLy8gUExMIGZyZWUgd2hlbiBwbGF5YmFjaywgUExMIGNsb3NlIHdoZW4gY2FwdHVyZQotCi0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwZSldID0gMHg4NTsKLQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDBmKV0gPSAweDI0OwotCi0JCQlob2ZmID0gU0FBXzcxMTRfTlRTQ19IT0ZGU0VUOwotCQkJdm9mZiA9IFNBQV83MTE0X05UU0NfVk9GRlNFVDsKLQkJCXcgPSBTQUFfNzExNF9OVFNDX1dJRFRIOwotCQkJaCA9IFNBQV83MTE0X05UU0NfSEVJR0hUOwotCi0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiUEFMXG4iKTsKLQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA2KV0gPQotCQkJICAgIFNBQV83MTE0X1BBTF9IU1lOQ19TVEFSVDsKLQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA3KV0gPQotCQkJICAgIFNBQV83MTE0X1BBTF9IU1lOQ19TVE9QOwotCi0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwOCldID0gZGVjb2Rlci0+cGxheWJhY2sgPyAweDdjIDogMHhiODsJLy8gUExMIGZyZWUgd2hlbiBwbGF5YmFjaywgUExMIGNsb3NlIHdoZW4gY2FwdHVyZQotCi0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwZSldID0gMHg4MTsKLQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDBmKV0gPSAweDI0OwotCi0JCQlob2ZmID0gU0FBXzcxMTRfUEFMX0hPRkZTRVQ7Ci0JCQl2b2ZmID0gU0FBXzcxMTRfUEFMX1ZPRkZTRVQ7Ci0JCQl3ID0gU0FBXzcxMTRfUEFMX1dJRFRIOwotCQkJaCA9IFNBQV83MTE0X1BBTF9IRUlHSFQ7Ci0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJVbmtub3duIHZpZGVvIG1vZGVcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCi0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDk0KV0gPSBMT0JZVEUoaG9mZik7CS8vIGhvZmZzZXQgbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDk1KV0gPSBISUJZVEUoaG9mZikgJiAweDBmOwkvLyBob2Zmc2V0IGhpZ2gKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OTYpXSA9IExPQllURSh3KTsJLy8gd2lkdGggbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDk3KV0gPSBISUJZVEUodykgJiAweDBmOwkvLyB3aWR0aCBoaWdoCi0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDk4KV0gPSBMT0JZVEUodm9mZik7CS8vIHZvZmZzZXQgbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDk5KV0gPSBISUJZVEUodm9mZikgJiAweDBmOwkvLyB2b2Zmc2V0IGhpZ2gKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OWEpXSA9IExPQllURShoICsgMik7CS8vIGhlaWdodCBsb3cKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OWIpXSA9IEhJQllURShoICsgMikgJiAweDBmOwkvLyBoZWlnaHQgaGlnaAotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5YyldID0gTE9CWVRFKHcpOwkvLyBvdXQgd2lkdGggbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDlkKV0gPSBISUJZVEUodykgJiAweDBmOwkvLyBvdXQgd2lkdGggaGlnaAotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5ZSldID0gTE9CWVRFKGgpOwkvLyBvdXQgaGVpZ2h0IGxvdwotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5ZildID0gSElCWVRFKGgpICYgMHgwZjsJLy8gb3V0IGhlaWdodCBoaWdoCi0KLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YzQpXSA9IExPQllURShob2ZmKTsJLy8gaG9mZnNldCBsb3cKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YzUpXSA9IEhJQllURShob2ZmKSAmIDB4MGY7CS8vIGhvZmZzZXQgaGlnaAotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjNildID0gTE9CWVRFKHcpOwkvLyB3aWR0aCBsb3cKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YzcpXSA9IEhJQllURSh3KSAmIDB4MGY7CS8vIHdpZHRoIGhpZ2gKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YzgpXSA9IExPQllURSh2b2ZmKTsJLy8gdm9mZnNldCBsb3cKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YzkpXSA9IEhJQllURSh2b2ZmKSAmIDB4MGY7CS8vIHZvZmZzZXQgaGlnaAotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjYSldID0gTE9CWVRFKGggKyAyKTsJLy8gaGVpZ2h0IGxvdwotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjYildID0gSElCWVRFKGggKyAyKSAmIDB4MGY7CS8vIGhlaWdodCBoaWdoCi0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGNjKV0gPSBMT0JZVEUodyk7CS8vIG91dCB3aWR0aCBsb3cKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4Y2QpXSA9IEhJQllURSh3KSAmIDB4MGY7CS8vIG91dCB3aWR0aCBoaWdoCi0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGNlKV0gPSBMT0JZVEUoaCk7CS8vIG91dCBoZWlnaHQgbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGNmKV0gPSBISUJZVEUoaCkgJiAweDBmOwkvLyBvdXQgaGVpZ2h0IGhpZ2gKLQotCi0JCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDgwLCAweDA2KTsJLy8gaS1wb3J0IGFuZCBzY2FsZXIgYmFjayBlbmQgY2xvY2sgc2VsZWN0aW9uLCB0YXNrIEEmQiBvZmYKLQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODgsIDB4ZDgpOwkvLyBzdyByZXNldCBzY2FsZXIKLQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODgsIDB4ZjgpOwkvLyBzdyByZXNldCBzY2FsZXIgcmVsZWFzZQotCi0JCXNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHgwNiA8PCAxKSwKLQkJCQkgICAgMyA8PCAxKTsKLQkJc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDBlIDw8IDEpLAotCQkJCSAgICAyIDw8IDEpOwotCQlzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4NWEgPDwgMSksCi0JCQkJICAgIDIgPDwgMSk7Ci0KLQkJc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDk0IDw8IDEpLAotCQkJCSAgICAoMHg5ZiArIDEgLSAweDk0KSA8PCAxKTsKLQkJc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweGM0IDw8IDEpLAotCQkJCSAgICAoMHhjZiArIDEgLSAweGM0KSA8PCAxKTsKLQotCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4OCwgMHhkOCk7CS8vIHN3IHJlc2V0IHNjYWxlcgotCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4OCwgMHhmOCk7CS8vIHN3IHJlc2V0IHNjYWxlciByZWxlYXNlCi0JCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDgwLCAweDM2KTsJLy8gaS1wb3J0IGFuZCBzY2FsZXIgYmFjayBlbmQgY2xvY2sgc2VsZWN0aW9uCi0KLQkJZGVjb2Rlci0+bm9ybSA9ICppYXJnOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBpbnB1dCAoJWQpXG4iLCAqaWFyZyk7Ci0JCWlmICgqaWFyZyA8IDAgfHwgKmlhcmcgPiA3KSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWlmIChkZWNvZGVyLT5pbnB1dCAhPSAqaWFyZykgewotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAibm93IHNldHRpbmcgJXMgaW5wdXRcbiIsCi0JCQkJKmlhcmcgPj0gNiA/ICJTLVZpZGVvIiA6ICJDb21wb3NpdGUiKTsKLQkJCWRlY29kZXItPmlucHV0ID0gKmlhcmc7Ci0KLQkJCS8qIHNlbGVjdCBtb2RlICovCi0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwMildID0KLQkJCSAgICAoZGVjb2Rlci0+Ci0JCQkgICAgIHJlZ1tSRUdfQUREUigweDAyKV0gJiAweGYwKSB8IChkZWNvZGVyLT4KLQkJCQkJCQkgICAgaW5wdXQgPAotCQkJCQkJCSAgICA2ID8gMHgwIDogMHg5KTsKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDAyLAotCQkJCSAgICAgIGRlY29kZXItPnJlZ1tSRUdfQUREUigweDAyKV0pOwotCi0JCQkvKiBieXBhc3MgY2hyb21pbmFuY2UgdHJhcCBmb3IgbW9kZXMgNi4uOSAqLwotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDkpXSA9Ci0JCQkgICAgKGRlY29kZXItPgotCQkJICAgICByZWdbUkVHX0FERFIoMHgwOSldICYgMHg3ZikgfCAoZGVjb2Rlci0+Ci0JCQkJCQkJICAgIGlucHV0IDwKLQkJCQkJCQkgICAgNiA/IDB4MCA6Ci0JCQkJCQkJICAgIDB4ODApOwotCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4MDksCi0JCQkJICAgICAgZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDkpXSk7Ci0KLQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDBlKV0gPQotCQkJICAgIGRlY29kZXItPmlucHV0IDwKLQkJCSAgICA2ID8gZGVjb2Rlci0+Ci0JCQkgICAgcmVnW1JFR19BRERSKDB4MGUpXSB8IDEgOiBkZWNvZGVyLT4KLQkJCSAgICByZWdbUkVHX0FERFIoMHgwZSldICYgfjE7Ci0JCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwZSwKLQkJCQkgICAgICBkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwZSldKTsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgb3V0cHV0XG4iKTsKLQotCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAoKmlhcmcgIT0gMCkgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCWludCBlbmFibGUgPSAoKmlhcmcgIT0gMCk7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJXMgb3V0cHV0XG4iLAotCQkJZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOwotCi0JCWRlY29kZXItPnBsYXliYWNrID0gIWVuYWJsZTsKLQotCQlpZiAoZGVjb2Rlci0+ZW5hYmxlICE9IGVuYWJsZSkgewotCQkJZGVjb2Rlci0+ZW5hYmxlID0gZW5hYmxlOwotCi0JCQkvKiBSSjogSWYgb3V0cHV0IHNob3VsZCBiZSBkaXNhYmxlZCAoZm9yCi0JCQkgKiBwbGF5aW5nIHZpZGVvcyksIHdlIGFsc28gbmVlZCBhIG9wZW4gUExMLgotCQkJICogVGhlIGlucHV0IGlzIHNldCB0byAwICh3aGVyZSBubyBpbnB1dAotCQkJICogc291cmNlIGlzIGNvbm5lY3RlZCksIGFsdGhvdWdoIHRoaXMKLQkJCSAqIGlzIG5vdCBuZWNlc3NhcnkuCi0JCQkgKgotCQkJICogSWYgb3V0cHV0IHNob3VsZCBiZSBlbmFibGVkLCB3ZSBoYXZlIHRvCi0JCQkgKiByZXZlcnNlIHRoZSBhYm92ZS4KLQkJCSAqLwotCi0JCQlpZiAoZGVjb2Rlci0+ZW5hYmxlKSB7Ci0JCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDgpXSA9IDB4Yjg7Ci0JCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MTIpXSA9IDB4Yzk7Ci0JCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MTMpXSA9IDB4ODA7Ci0JCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4ODcpXSA9IDB4MDE7Ci0JCQl9IGVsc2UgewotCQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA4KV0gPSAweDdjOwotCQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDEyKV0gPSAweDAwOwotCQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDEzKV0gPSAweDAwOwotCQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDg3KV0gPSAweDAwOwotCQkJfQotCi0JCQlzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwKLQkJCQkJICAgIGRlY29kZXItPnJlZyArICgweDEyIDw8IDEpLAotCQkJCQkgICAgMiA8PCAxKTsKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDA4LAotCQkJCSAgICAgIGRlY29kZXItPnJlZ1tSRUdfQUREUigweDA4KV0pOwotCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODcsCi0JCQkJICAgICAgZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4ODcpXSk7Ci0JCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4OCwgMHhkOCk7CS8vIHN3IHJlc2V0IHNjYWxlcgotCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODgsIDB4ZjgpOwkvLyBzdyByZXNldCBzY2FsZXIgcmVsZWFzZQotCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODAsIDB4MzYpOwotCi0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOgotCXsKLQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnBpYyA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCi0JCQkiZGVjb2RlciBzZXQgcGljdHVyZSBicmlnaHQ9JWQgY29udHJhc3Q9JWQgc2F0dXJhdGlvbj0lZCBodWU9JWRcbiIsCi0JCQlwaWMtPmJyaWdodG5lc3MsIHBpYy0+Y29udHJhc3QsIHBpYy0+Y29sb3VyLCBwaWMtPmh1ZSk7Ci0KLQkJaWYgKGRlY29kZXItPmJyaWdodCAhPSBwaWMtPmJyaWdodG5lc3MpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byAyNTUgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPmJyaWdodCA9IHBpYy0+YnJpZ2h0bmVzczsKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDBhLCBkZWNvZGVyLT5icmlnaHQgPj4gOCk7Ci0JCX0KLQkJaWYgKGRlY29kZXItPmNvbnRyYXN0ICE9IHBpYy0+Y29udHJhc3QpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPmNvbnRyYXN0ID0gcGljLT5jb250cmFzdDsKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDBiLAotCQkJCSAgICAgIGRlY29kZXItPmNvbnRyYXN0ID4+IDkpOwotCQl9Ci0JCWlmIChkZWNvZGVyLT5zYXQgIT0gcGljLT5jb2xvdXIpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPnNhdCA9IHBpYy0+Y29sb3VyOwotCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4MGMsIGRlY29kZXItPnNhdCA+PiA5KTsKLQkJfQotCQlpZiAoZGVjb2Rlci0+aHVlICE9IHBpYy0+aHVlKSB7Ci0JCQkvKiBXZSB3YW50IC0xMjggdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5odWUgPSBwaWMtPmh1ZTsKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDBkLAotCQkJCSAgICAgIChkZWNvZGVyLT5odWUgLSAzMjc2OCkgPj4gOCk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NDIgPj4gMSwgMHg0MCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwotCi1JMkNfQ0xJRU5UX0lOU01PRDsKLQotc3RhdGljIGludCBzYWE3MTE0X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0JaW50IGksIGVyclszMF07Ci0Jc2hvcnQgaW50IGhvZmYgPSBTQUFfNzExNF9OVFNDX0hPRkZTRVQ7Ci0Jc2hvcnQgaW50IHZvZmYgPSBTQUFfNzExNF9OVFNDX1ZPRkZTRVQ7Ci0Jc2hvcnQgaW50IHcgPSBTQUFfNzExNF9OVFNDX1dJRFRIOwotCXNob3J0IGludCBoID0gU0FBXzcxMTRfTlRTQ19IRUlHSFQ7Ci0Jc3RydWN0IHNhYTcxMTQgKmRlY29kZXI7Ci0KLQkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKLQkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwotCi0JZGVjb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTE0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRlY29kZXIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZGVjb2Rlci0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKLQlkZWNvZGVyLT5pbnB1dCA9IC0xOwotCWRlY29kZXItPmVuYWJsZSA9IDE7Ci0JZGVjb2Rlci0+YnJpZ2h0ID0gMzI3Njg7Ci0JZGVjb2Rlci0+Y29udHJhc3QgPSAzMjc2ODsKLQlkZWNvZGVyLT5odWUgPSAzMjc2ODsKLQlkZWNvZGVyLT5zYXQgPSAzMjc2ODsKLQlkZWNvZGVyLT5wbGF5YmFjayA9IDA7CS8vIGluaXRpYWxseSBjYXB0dXJlIG1vZGUgdXNlZGEKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKLQotCW1lbWNweShkZWNvZGVyLT5yZWcsIGluaXQsIHNpemVvZihpbml0KSk7Ci0KLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5NCldID0gTE9CWVRFKGhvZmYpOwkvLyBob2Zmc2V0IGxvdwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDk1KV0gPSBISUJZVEUoaG9mZikgJiAweDBmOwkvLyBob2Zmc2V0IGhpZ2gKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5NildID0gTE9CWVRFKHcpOwkvLyB3aWR0aCBsb3cKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5NyldID0gSElCWVRFKHcpICYgMHgwZjsJLy8gd2lkdGggaGlnaAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDk4KV0gPSBMT0JZVEUodm9mZik7CS8vIHZvZmZzZXQgbG93Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OTkpXSA9IEhJQllURSh2b2ZmKSAmIDB4MGY7CS8vIHZvZmZzZXQgaGlnaAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDlhKV0gPSBMT0JZVEUoaCArIDIpOwkvLyBoZWlnaHQgbG93Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OWIpXSA9IEhJQllURShoICsgMikgJiAweDBmOwkvLyBoZWlnaHQgaGlnaAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDljKV0gPSBMT0JZVEUodyk7CS8vIG91dCB3aWR0aCBsb3cKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5ZCldID0gSElCWVRFKHcpICYgMHgwZjsJLy8gb3V0IHdpZHRoIGhpZ2gKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5ZSldID0gTE9CWVRFKGgpOwkvLyBvdXQgaGVpZ2h0IGxvdwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDlmKV0gPSBISUJZVEUoaCkgJiAweDBmOwkvLyBvdXQgaGVpZ2h0IGhpZ2gKLQotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM0KV0gPSBMT0JZVEUoaG9mZik7CS8vIGhvZmZzZXQgbG93Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YzUpXSA9IEhJQllURShob2ZmKSAmIDB4MGY7CS8vIGhvZmZzZXQgaGlnaAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM2KV0gPSBMT0JZVEUodyk7CS8vIHdpZHRoIGxvdwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM3KV0gPSBISUJZVEUodykgJiAweDBmOwkvLyB3aWR0aCBoaWdoCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YzgpXSA9IExPQllURSh2b2ZmKTsJLy8gdm9mZnNldCBsb3cKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjOSldID0gSElCWVRFKHZvZmYpICYgMHgwZjsJLy8gdm9mZnNldCBoaWdoCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4Y2EpXSA9IExPQllURShoICsgMik7CS8vIGhlaWdodCBsb3cKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjYildID0gSElCWVRFKGggKyAyKSAmIDB4MGY7CS8vIGhlaWdodCBoaWdoCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4Y2MpXSA9IExPQllURSh3KTsJLy8gb3V0IHdpZHRoIGxvdwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGNkKV0gPSBISUJZVEUodykgJiAweDBmOwkvLyBvdXQgd2lkdGggaGlnaAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGNlKV0gPSBMT0JZVEUoaCk7CS8vIG91dCBoZWlnaHQgbG93Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4Y2YpXSA9IEhJQllURShoKSAmIDB4MGY7CS8vIG91dCBoZWlnaHQgaGlnaAotCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YjgpXSA9Ci0JICAgIExPQllURShMT1dPUkQoU0FBXzcxMTRfVkVSVElDQUxfQ0hST01BX09GRlNFVCkpOwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGI5KV0gPQotCSAgICBISUJZVEUoTE9XT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0NIUk9NQV9PRkZTRVQpKTsKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhiYSldID0KLQkgICAgTE9CWVRFKEhJV09SRChTQUFfNzExNF9WRVJUSUNBTF9DSFJPTUFfT0ZGU0VUKSk7Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YmIpXSA9Ci0JICAgIEhJQllURShISVdPUkQoU0FBXzcxMTRfVkVSVElDQUxfQ0hST01BX09GRlNFVCkpOwotCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YmMpXSA9Ci0JICAgIExPQllURShMT1dPUkQoU0FBXzcxMTRfVkVSVElDQUxfTFVNQV9PRkZTRVQpKTsKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhiZCldID0KLQkgICAgSElCWVRFKExPV09SRChTQUFfNzExNF9WRVJUSUNBTF9MVU1BX09GRlNFVCkpOwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGJlKV0gPQotCSAgICBMT0JZVEUoSElXT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0xVTUFfT0ZGU0VUKSk7Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YmYpXSA9Ci0JICAgIEhJQllURShISVdPUkQoU0FBXzcxMTRfVkVSVElDQUxfTFVNQV9PRkZTRVQpKTsKLQotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGU4KV0gPQotCSAgICBMT0JZVEUoTE9XT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0NIUk9NQV9PRkZTRVQpKTsKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhlOSldID0KLQkgICAgSElCWVRFKExPV09SRChTQUFfNzExNF9WRVJUSUNBTF9DSFJPTUFfT0ZGU0VUKSk7Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4ZWEpXSA9Ci0JICAgIExPQllURShISVdPUkQoU0FBXzcxMTRfVkVSVElDQUxfQ0hST01BX09GRlNFVCkpOwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGViKV0gPQotCSAgICBISUJZVEUoSElXT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0NIUk9NQV9PRkZTRVQpKTsKLQotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGVjKV0gPQotCSAgICBMT0JZVEUoTE9XT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0xVTUFfT0ZGU0VUKSk7Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4ZWQpXSA9Ci0JICAgIEhJQllURShMT1dPUkQoU0FBXzcxMTRfVkVSVElDQUxfTFVNQV9PRkZTRVQpKTsKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhlZSldID0KLQkgICAgTE9CWVRFKEhJV09SRChTQUFfNzExNF9WRVJUSUNBTF9MVU1BX09GRlNFVCkpOwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGVmKV0gPQotCSAgICBISUJZVEUoSElXT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0xVTUFfT0ZGU0VUKSk7Ci0KLQotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDEzKV0gPSAweDgwOwkvLyBSVEMwIG9uCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4ODcpXSA9IDB4MDE7CS8vIEktUG9ydAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDEyKV0gPSAweGM5OwkvLyBSVFMwCi0KLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwMildID0gMHhjMDsJLy8gc2V0IGNvbXBvc2l0ZTEgaW5wdXQsIGF2ZWFzeQotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA5KV0gPSAweDAwOwkvLyBjaHJvbWluYW5jZSB0cmFwCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MGUpXSB8PSAxOwkvLyBjb21iZmlsdGVyIG9uCi0KLQotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXJ0aW5nIGluaXRcbiIpOwotCi0JZXJyWzBdID0KLQkgICAgc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDIwIDw8IDEpLAotCQkJCTB4MTAgPDwgMSk7Ci0JZXJyWzFdID0KLQkgICAgc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDMwIDw8IDEpLAotCQkJCTB4MTAgPDwgMSk7Ci0JZXJyWzJdID0KLQkgICAgc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDYzIDw8IDEpLAotCQkJCSgweDdmICsgMSAtIDB4NjMpIDw8IDEpOwotCWVyclszXSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHg4OSA8PCAxKSwKLQkJCQk2IDw8IDEpOwotCWVycls0XSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHhiOCA8PCAxKSwKLQkJCQk4IDw8IDEpOwotCWVycls1XSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHhlOCA8PCAxKSwKLQkJCQk4IDw8IDEpOwotCi0KLQlmb3IgKGkgPSAwOyBpIDw9IDU7IGkrKykgewotCQlpZiAoZXJyW2ldIDwgMCkgewotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAotCQkJCSJpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCi0JCQkJaSwgZXJyW2ldKTsKLQkJCWtmcmVlKGRlY29kZXIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSA2OyBpIDwgODsgaSsrKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCSJyZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKLQkJCWksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKGkpXSk7Ci0JfQotCi0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAotCQkicGVyZm9ybWluZyBkZWNvZGVyIHJlc2V0IHNlcXVlbmNlXG4iKTsKLQotCWVycls2XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDgwLCAweDA2KTsJLy8gaS1wb3J0IGFuZCBzY2FsZXIgYmFja2VuZCBjbG9jayBzZWxlY3Rpb24sIHRhc2sgQSZCIG9mZgotCWVycls3XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGQ4KTsJLy8gc3cgcmVzZXQgc2NhbGVyCi0JZXJyWzhdID0gc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODgsIDB4ZjgpOwkvLyBzdyByZXNldCBzY2FsZXIgcmVsZWFzZQotCi0JZm9yIChpID0gNjsgaSA8PSA4OyBpKyspIHsKLQkJaWYgKGVycltpXSA8IDApIHsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCQkiaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAotCQkJCWksIGVycltpXSk7Ci0JCQlrZnJlZShkZWNvZGVyKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfQotCi0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicGVyZm9ybWluZyB0aGUgcmVzdCBvZiBpbml0XG4iKTsKLQotCWVycls5XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDAxLCBkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwMSldKTsKLQllcnJbMTBdID0gc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDAzIDw8IDEpLCAoMHgxZSArIDEgLSAweDAzKSA8PCAxKTsJLy8gYmlnIHNlcQotCWVyclsxMV0gPSBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4NDAgPDwgMSksICgweDVmICsgMSAtIDB4NDApIDw8IDEpOwkvLyBzbGljZXIKLQllcnJbMTJdID0gc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDgxIDw8IDEpLCAyIDw8IDEpOwkvLyA/Ci0JZXJyWzEzXSA9IHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHg4MyA8PCAxKSwgNSA8PCAxKTsJLy8gPwotCWVyclsxNF0gPSBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4OTAgPDwgMSksIDQgPDwgMSk7CS8vIFRhc2sgQQotCWVyclsxNV0gPQotCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4OTQgPDwgMSksCi0JCQkJMTIgPDwgMSk7Ci0JZXJyWzE2XSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHhhMCA8PCAxKSwKLQkJCQk4IDw8IDEpOwotCWVyclsxN10gPQotCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4YTggPDwgMSksCi0JCQkJOCA8PCAxKTsKLQllcnJbMThdID0KLQkgICAgc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweGIwIDw8IDEpLAotCQkJCTggPDwgMSk7Ci0JZXJyWzE5XSA9IHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHhjMCA8PCAxKSwgNCA8PCAxKTsJLy8gVGFzayBCCi0JZXJyWzE1XSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHhjNCA8PCAxKSwKLQkJCQkxMiA8PCAxKTsKLQllcnJbMTZdID0KLQkgICAgc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweGQwIDw8IDEpLAotCQkJCTggPDwgMSk7Ci0JZXJyWzE3XSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHhkOCA8PCAxKSwKLQkJCQk4IDw8IDEpOwotCWVyclsxOF0gPQotCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4ZTAgPDwgMSksCi0JCQkJOCA8PCAxKTsKLQotCWZvciAoaSA9IDk7IGkgPD0gMTg7IGkrKykgewotCQlpZiAoZXJyW2ldIDwgMCkgewotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAotCQkJCSJpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCi0JCQkJaSwgZXJyW2ldKTsKLQkJCWtmcmVlKGRlY29kZXIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9Ci0KLQotCWZvciAoaSA9IDY7IGkgPCA4OyBpKyspIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAotCQkJInJlZ1sweCUwMnhdID0gMHglMDJ4ICgweCUwMngpXG4iLAotCQkJaSwgc2FhNzExNF9yZWFkKGNsaWVudCwgaSksCi0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoaSldKTsKLQl9Ci0KLQotCWZvciAoaSA9IDB4MTE7IGkgPD0gMHgxMzsgaSsrKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCSJyZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKLQkJCWksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKGkpXSk7Ci0JfQotCi0KLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXR0aW5nIHZpZGVvIGlucHV0XG4iKTsKLQotCWVyclsxOV0gPQotCSAgICBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwMiwgZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDIpXSk7Ci0JZXJyWzIwXSA9Ci0JICAgIHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDA5LCBkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwOSldKTsKLQllcnJbMjFdID0KLQkgICAgc2FhNzExNF93cml0ZShjbGllbnQsIDB4MGUsIGRlY29kZXItPnJlZ1tSRUdfQUREUigweDBlKV0pOwotCi0JZm9yIChpID0gMTk7IGkgPD0gMjE7IGkrKykgewotCQlpZiAoZXJyW2ldIDwgMCkgewotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAotCQkJCSJpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCi0JCQkJaSwgZXJyW2ldKTsKLQkJCWtmcmVlKGRlY29kZXIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9Ci0KLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJwZXJmb3JtaW5nIGRlY29kZXIgcmVzZXQgc2VxdWVuY2VcbiIpOwotCi0JZXJyWzIyXSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGQ4KTsJLy8gc3cgcmVzZXQgc2NhbGVyCi0JZXJyWzIzXSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGY4KTsJLy8gc3cgcmVzZXQgc2NhbGVyIHJlbGVhc2UKLQllcnJbMjRdID0gc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODAsIDB4MzYpOwkvLyBpLXBvcnQgYW5kIHNjYWxlciBiYWNrZW5kIGNsb2NrIHNlbGVjdGlvbiwgdGFzayBBJkIgb2ZmCi0KLQotCWZvciAoaSA9IDIyOyBpIDw9IDI0OyBpKyspIHsKLQkJaWYgKGVycltpXSA8IDApIHsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCQkiaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAotCQkJCWksIGVycltpXSk7Ci0JCQlrZnJlZShkZWNvZGVyKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfQotCi0JZXJyWzI1XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDA2LCBpbml0W1JFR19BRERSKDB4MDYpXSk7Ci0JZXJyWzI2XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDA3LCBpbml0W1JFR19BRERSKDB4MDcpXSk7Ci0JZXJyWzI3XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDEwLCBpbml0W1JFR19BRERSKDB4MTApXSk7Ci0KLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJjaGlwIHZlcnNpb24gJXgsIGRlY29kZXIgc3RhdHVzIDB4JTAyeFxuIiwKLQkJc2FhNzExNF9yZWFkKGNsaWVudCwgMHgwMCkgPj4gNCwKLQkJc2FhNzExNF9yZWFkKGNsaWVudCwgMHgxZikpOwotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJInBvd2VyIHNhdmUgY29udHJvbDogMHglMDJ4LCBzY2FsZXIgc3RhdHVzOiAweCUwMnhcbiIsCi0JCXNhYTcxMTRfcmVhZChjbGllbnQsIDB4ODgpLAotCQlzYWE3MTE0X3JlYWQoY2xpZW50LCAweDhmKSk7Ci0KLQotCWZvciAoaSA9IDB4OTQ7IGkgPCAweDk2OyBpKyspIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAotCQkJInJlZ1sweCUwMnhdID0gMHglMDJ4ICgweCUwMngpXG4iLAotCQkJaSwgc2FhNzExNF9yZWFkKGNsaWVudCwgaSksCi0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoaSldKTsKLQl9Ci0KLQkvL2kgPSBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdCwgc2l6ZW9mKGluaXQpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzYWE3MTE0X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTcxMTRfaWRbXSA9IHsKLQl7ICJzYWE3MTE0X29sZCIsIDAgfSwJLyogInNhYTcxMTQiIG1hcHMgdG8gdGhlIHNhYTcxMTUgZHJpdmVyICovCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNhYTcxMTRfaWQpOwotCi1zdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7Ci0JLm5hbWUgPSAic2FhNzExNCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMTQsCi0JLmNvbW1hbmQgPSBzYWE3MTE0X2NvbW1hbmQsCi0JLnByb2JlID0gc2FhNzExNF9wcm9iZSwKLQkucmVtb3ZlID0gc2FhNzExNF9yZW1vdmUsCi0JLmlkX3RhYmxlID0gc2FhNzExNF9pZCwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCmluZGV4IDQ2Yzc5NmMuLmNlYmYxNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCkBAIC03NzgsNyArNzc4LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX0hVRToKLQkJaWYgKGN0cmwtPnZhbHVlIDwgLTEyNyB8fCBjdHJsLT52YWx1ZSA+IDEyNykgeworCQlpZiAoY3RybC0+dmFsdWUgPCAtMTI4IHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7CiAJCQl2NGwyX2VycihzZCwgImludmFsaWQgaHVlIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CkBAIC05MzEsOCArOTMxLDggQEAKIAkvKiBQcmV2ZW50IHVubmVjZXNzYXJ5IHN0YW5kYXJkIGNoYW5nZXMuIER1cmluZyBhIHN0YW5kYXJkCiAJICAgY2hhbmdlIHRoZSBJLVBvcnQgaXMgdGVtcG9yYXJpbHkgZGlzYWJsZWQuIEFueSBkZXZpY2VzCiAJICAgcmVhZGluZyBmcm9tIHRoYXQgcG9ydCBjYW4gZ2V0IGNvbmZ1c2VkLgotCSAgIE5vdGUgdGhhdCBWSURJT0NfU19TVEQgaXMgYWxzbyB1c2VkIHRvIHN3aXRjaCBmcm9tCi0JICAgcmFkaW8gdG8gVFYgbW9kZSwgc28gaWYgYSBWSURJT0NfU19TVEQgaXMgYnJvYWRjYXN0IHRvCisJICAgTm90ZSB0aGF0IHNfc3RkIGlzIGFsc28gdXNlZCB0byBzd2l0Y2ggZnJvbQorCSAgIHJhZGlvIHRvIFRWIG1vZGUsIHNvIGlmIGEgc19zdGQgaXMgYnJvYWRjYXN0IHRvCiAJICAgYWxsIEkyQyBkZXZpY2VzIHRoZW4geW91IGRvIG5vdCB3YW50IHRvIGhhdmUgYW4gdW53YW50ZWQKIAkgICBzaWRlLWVmZmVjdCBoZXJlLiAqLwogCWlmIChzdGQgPT0gc3RhdGUtPnN0ZCkKQEAgLTEyMDYsMTAgKzEyMDYsMTIgQEAKIHsKIAlzd2l0Y2ggKHFjLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAyNTUsIDEsIDEyOCk7CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMTI3LCAxLCA2NCk7CiAJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWMpOworCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIC0xMjgsIDEyNywgMSwgMCk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTMwOCwxMSArMTMxMCwxMiBAQAogCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIiVzIG91dHB1dFxuIiwKIAkJCWVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiKTsKIAotCWlmIChzdGF0ZS0+ZW5hYmxlICE9IGVuYWJsZSkgewotCQlzdGF0ZS0+ZW5hYmxlID0gZW5hYmxlOwotCQlzYWE3MTF4X3dyaXRlKHNkLCBSXzg3X0lfUE9SVF9JX09fRU5BX09VVF9DTEtfQU5EX0dBVEVELAotCQkJCXN0YXRlLT5lbmFibGUpOwotCX0KKwlpZiAoc3RhdGUtPmVuYWJsZSA9PSBlbmFibGUpCisJCXJldHVybiAwOworCXN0YXRlLT5lbmFibGUgPSBlbmFibGU7CisJaWYgKCFzYWE3MTF4X2hhc19yZWcoc3RhdGUtPmlkZW50LCBSXzg3X0lfUE9SVF9JX09fRU5BX09VVF9DTEtfQU5EX0dBVEVEKSkKKwkJcmV0dXJuIDA7CisJc2FhNzExeF93cml0ZShzZCwgUl84N19JX1BPUlRfSV9PX0VOQV9PVVRfQ0xLX0FORF9HQVRFRCwgc3RhdGUtPmVuYWJsZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNzAsNiArMTM3Myw0NyBAQAogCX0KIH0KIAorc3RhdGljIGludCBzYWE3MTF4X3F1ZXJ5c3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkICpzdGQpCit7CisJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCWludCByZWcxZTsKKworCSpzdGQgPSBWNEwyX1NURF9BTEw7CisJaWYgKHN0YXRlLT5pZGVudCAhPSBWNEwyX0lERU5UX1NBQTcxMTUpCisJCXJldHVybiAwOworCXJlZzFlID0gc2FhNzExeF9yZWFkKHNkLCBSXzFFX1NUQVRVU19CWVRFXzFfVkRfREVDKTsKKworCXN3aXRjaCAocmVnMWUgJiAweDAzKSB7CisJY2FzZSAxOgorCQkqc3RkID0gVjRMMl9TVERfTlRTQzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkqc3RkID0gVjRMMl9TVERfUEFMOworCQlicmVhazsKKwljYXNlIDM6CisJCSpzdGQgPSBWNEwyX1NURF9TRUNBTTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMXhfZ19pbnB1dF9zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyICpzdGF0dXMpCit7CisJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCWludCByZWcxZSA9IDB4ODA7CisJaW50IHJlZzFmOworCisJKnN0YXR1cyA9IFY0TDJfSU5fU1RfTk9fU0lHTkFMOworCWlmIChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTE1KQorCQlyZWcxZSA9IHNhYTcxMXhfcmVhZChzZCwgUl8xRV9TVEFUVVNfQllURV8xX1ZEX0RFQyk7CisJcmVnMWYgPSBzYWE3MTF4X3JlYWQoc2QsIFJfMUZfU1RBVFVTX0JZVEVfMl9WRF9ERUMpOworCWlmICgocmVnMWYgJiAweGMxKSA9PSAweDgxICYmIChyZWcxZSAmIDB4YzApID09IDB4ODApCisJCSpzdGF0dXMgPSAwOworCXJldHVybiAwOworfQorCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwogc3RhdGljIGludCBzYWE3MTF4X2dfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCiB7CkBAIC0xNDkzLDYgKzE1MzcsOCBAQAogCS5nX3ZiaV9kYXRhID0gc2FhNzExeF9nX3ZiaV9kYXRhLAogCS5kZWNvZGVfdmJpX2xpbmUgPSBzYWE3MTF4X2RlY29kZV92YmlfbGluZSwKIAkuc19zdHJlYW0gPSBzYWE3MTF4X3Nfc3RyZWFtLAorCS5xdWVyeXN0ZCA9IHNhYTcxMXhfcXVlcnlzdGQsCisJLmdfaW5wdXRfc3RhdHVzID0gc2FhNzExeF9nX2lucHV0X3N0YXR1cywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHNhYTcxMXhfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYwppbmRleCAwNTIyMWQ0Li4xMjhiYjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYwpAQCAtODEwLDcgKzgxMCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJzYWE3MTI3IiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfU0FBNzEyNywKIAkucHJvYmUgPSBzYWE3MTI3X3Byb2JlLAogCS5yZW1vdmUgPSBzYWE3MTI3X3JlbW92ZSwKIAkuaWRfdGFibGUgPSBzYWE3MTI3X2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvS2NvbmZpZwppbmRleCBmYzIxNjRlLi4wYmE2ODk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvS2NvbmZpZwpAQCAtNiw2ICs2LDcgQEAKIAlzZWxlY3QgVklERU9fVFVORVIKIAlzZWxlY3QgVklERU9fVFZFRVBST00KIAlzZWxlY3QgQ1JDMzIKKwlzZWxlY3QgVklERU9fU0FBNjU4OCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIFBoaWxpcHMgU0FBNzEzeCBiYXNlZAogCSAgVFYgY2FyZHMuCkBAIC0zNSw4ICszNiwxNiBAQAogCXNlbGVjdCBEVkJfVERBMTAwODYgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1REQTgyNlggaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0lTTDY0MjEgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgTUVESUFfVFVORVJfVERBODI3WCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IERWQl9JU0w2NDA1IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1REQTgyN1ggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfWkwxMDAzNiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfTVQzMTIgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0xOQlAyMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfWkwxMDM1MyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfTEdEVDMzMDUgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBMTgyNzEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjkwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAktLS1oZWxwLS0tCiAJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgRFZCIGNhcmRzIGJhc2VkIG9uIHRoZQogCSAgUGhpbGlwcyBzYWE3MTM0IGNoaXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNjc1MmhzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNjc1MmhzLmMKaW5kZXggMWZlZTZlOC4uZGMyMjEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTY3NTJocy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE2NzUyaHMuYwpAQCAtMzMsOSArMzMsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAKQEAgLTQ0LDEwICs0NSw2IEBACiAjZGVmaW5lIE1QRUdfVE9UQUxfVEFSR0VUX0JJVFJBVEVfTUFYICAyNzAwMAogI2RlZmluZSBNUEVHX1BJRF9NQVggKCgxIDw8IDE0KSAtIDEpCiAKLS8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gezB4MjAsIEkyQ19DTElFTlRfRU5EfTsKLQotSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIE1PRFVMRV9ERVNDUklQVElPTigiZGV2aWNlIGRyaXZlciBmb3Igc2FhNjc1MmhzIE1QRUcyIGVuY29kZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkFuZHJldyBkZSBRdWluY2V5Iik7CkBAIC05NSw2ICs5Miw3IEBACiB9OwogCiBzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgICAgICAgICAgICBzZDsKIAlpbnQgCQkJICAgICAgY2hpcDsKIAl1MzIgCQkJICAgICAgcmV2aXNpb247CiAJaW50IAkJCSAgICAgIGhhc19hYzM7CkBAIC0xMTUsNiArMTEzLDExIEBACiAJU0FBNjc1MkhTX0NPTU1BTkRfTUFYCiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKnRvX3N0YXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHNhYTY3NTJoc19zdGF0ZSwgc2QpOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyB1OCBQQVRbXSA9IHsKQEAgLTM2MCwxODUgKzM2MywxOTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2FhNjc1MmhzX3NldF9zdWJzYW1wbGluZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKKworc3RhdGljIGludCBnZXRfY3RybChpbnQgaGFzX2FjMywgc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyAqcGFyYW1zLAorCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGRpc3RfMzUyLCBkaXN0XzQ4MCwgZGlzdF83MjA7Ci0KLQkvKgotCSAgRklYTUU6IHRyYW5zbGF0ZSBhbmQgcm91bmQgd2lkdGgvaGVpZ2h0IGludG8gRU1QUkVTUwotCSAgc3Vic2FtcGxlIHR5cGU6Ci0KLQkgIHR5cGUgICB8ICAgUEFMICAgfCAgTlRTQwotCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICBTSUYgICAgfCAzNTJ4Mjg4IHwgMzUyeDI0MAotCSAgMS8yIEQxIHwgMzUyeDU3NiB8IDM1Mng0ODAKLQkgIDIvMyBEMSB8IDQ4MHg1NzYgfCA0ODB4NDgwCi0JICBEMSAgICAgfCA3MjB4NTc2IHwgNzIweDQ4MAotCSovCi0KLQlkaXN0XzM1MiA9IGFicyhmLT5mbXQucGl4LndpZHRoIC0gMzUyKTsKLQlkaXN0XzQ4MCA9IGFicyhmLT5mbXQucGl4LndpZHRoIC0gNDgwKTsKLQlkaXN0XzcyMCA9IGFicyhmLT5mbXQucGl4LndpZHRoIC0gNzIwKTsKLQlpZiAoZGlzdF83MjAgPCBkaXN0XzQ4MCkgewotCQlmLT5mbXQucGl4LndpZHRoID0gNzIwOwotCQlmLT5mbXQucGl4LmhlaWdodCA9IDU3NjsKLQkJaC0+dmlkZW9fZm9ybWF0ID0gU0FBNjc1MkhTX1ZGX0QxOwotCX0KLQllbHNlIGlmIChkaXN0XzQ4MCA8IGRpc3RfMzUyKSB7Ci0JCWYtPmZtdC5waXgud2lkdGggPSA0ODA7Ci0JCWYtPmZtdC5waXguaGVpZ2h0ID0gNTc2OwotCQloLT52aWRlb19mb3JtYXQgPSBTQUE2NzUySFNfVkZfMl8zX0QxOwotCX0KLQllbHNlIHsKLQkJZi0+Zm10LnBpeC53aWR0aCA9IDM1MjsKLQkJaWYgKGFicyhmLT5mbXQucGl4LmhlaWdodCAtIDU3NikgPAotCQkgICAgYWJzKGYtPmZtdC5waXguaGVpZ2h0IC0gMjg4KSkgewotCQkJZi0+Zm10LnBpeC5oZWlnaHQgPSA1NzY7Ci0JCQloLT52aWRlb19mb3JtYXQgPSBTQUE2NzUySFNfVkZfMV8yX0QxOwotCQl9Ci0JCWVsc2UgewotCQkJZi0+Zm10LnBpeC5oZWlnaHQgPSAyODg7Ci0JCQloLT52aWRlb19mb3JtYXQgPSBTQUE2NzUySFNfVkZfU0lGOwotCQl9Ci0JfQotfQotCi0KLXN0YXRpYyBpbnQgaGFuZGxlX2N0cmwoaW50IGhhc19hYzMsIHN0cnVjdCBzYWE2NzUyaHNfbXBlZ19wYXJhbXMgKnBhcmFtcywKLQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwsIHVuc2lnbmVkIGludCBjbWQpCi17Ci0JaW50IG9sZCA9IDAsIG5ldzsKLQlpbnQgc2V0ID0gKGNtZCA9PSBWSURJT0NfU19FWFRfQ1RSTFMpOwotCi0JbmV3ID0gY3RybC0+dmFsdWU7CiAJc3dpdGNoIChjdHJsLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6Ci0JCQlvbGQgPSBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFM7Ci0JCQlpZiAoc2V0ICYmIG5ldyAhPSBvbGQpCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQluZXcgPSBvbGQ7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUE1UOgotCQkJb2xkID0gcGFyYW1zLT50c19waWRfcG10OwotCQkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1BJRF9NQVgpCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQlpZiAobmV3ID4gTVBFR19QSURfTUFYKQotCQkJCW5ldyA9IE1QRUdfUElEX01BWDsKLQkJCXBhcmFtcy0+dHNfcGlkX3BtdCA9IG5ldzsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9BVURJTzoKLQkJCW9sZCA9IHBhcmFtcy0+dHNfcGlkX2F1ZGlvOwotCQkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1BJRF9NQVgpCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQlpZiAobmV3ID4gTVBFR19QSURfTUFYKQotCQkJCW5ldyA9IE1QRUdfUElEX01BWDsKLQkJCXBhcmFtcy0+dHNfcGlkX2F1ZGlvID0gbmV3OwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1ZJREVPOgotCQkJb2xkID0gcGFyYW1zLT50c19waWRfdmlkZW87Ci0JCQlpZiAoc2V0ICYmIG5ldyA+IE1QRUdfUElEX01BWCkKLQkJCQlyZXR1cm4gLUVSQU5HRTsKLQkJCWlmIChuZXcgPiBNUEVHX1BJRF9NQVgpCi0JCQkJbmV3ID0gTVBFR19QSURfTUFYOwotCQkJcGFyYW1zLT50c19waWRfdmlkZW8gPSBuZXc7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUENSOgotCQkJb2xkID0gcGFyYW1zLT50c19waWRfcGNyOwotCQkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1BJRF9NQVgpCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQlpZiAobmV3ID4gTVBFR19QSURfTUFYKQotCQkJCW5ldyA9IE1QRUdfUElEX01BWDsKLQkJCXBhcmFtcy0+dHNfcGlkX3BjciA9IG5ldzsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6Ci0JCQlvbGQgPSBwYXJhbXMtPmF1X2VuY29kaW5nOwotCQkJaWYgKHNldCAmJiBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIgJiYKLQkJCSAgICAoIWhhc19hYzMgfHwgbmV3ICE9IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMpKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJbmV3ID0gb2xkOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFOgotCQkJb2xkID0gcGFyYW1zLT5hdV9sMl9iaXRyYXRlOwotCQkJaWYgKHNldCAmJiBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMjU2SyAmJgotCQkJCSAgIG5ldyAhPSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJaWYgKG5ldyA8PSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yNTZLKQotCQkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1Nks7Ci0JCQllbHNlCi0JCQkJbmV3ID0gVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzg0SzsKLQkJCXBhcmFtcy0+YXVfbDJfYml0cmF0ZSA9IG5ldzsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6Ci0JCQlpZiAoIWhhc19hYzMpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlvbGQgPSBwYXJhbXMtPmF1X2FjM19iaXRyYXRlOwotCQkJaWYgKHNldCAmJiBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzI1NksgJiYKLQkJCQkgICBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzM4NEspCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQlpZiAobmV3IDw9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLKQotCQkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLOwotCQkJZWxzZQotCQkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zODRLOwotCQkJcGFyYW1zLT5hdV9hYzNfYml0cmF0ZSA9IG5ldzsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUToKLQkJCW9sZCA9IFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ4MDAwOwotCQkJaWYgKHNldCAmJiBuZXcgIT0gb2xkKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJbmV3ID0gb2xkOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzoKLQkJCW9sZCA9IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzI7Ci0JCQlpZiAoc2V0ICYmIG5ldyAhPSBvbGQpCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQluZXcgPSBvbGQ7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0FTUEVDVDoKLQkJCW9sZCA9IHBhcmFtcy0+dmlfYXNwZWN0OwotCQkJaWYgKHNldCAmJiBuZXcgIT0gVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8xNng5ICYmCi0JCQkJICAgbmV3ICE9IFY0TDJfTVBFR19WSURFT19BU1BFQ1RfNHgzKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJaWYgKG5ldyAhPSBWNEwyX01QRUdfVklERU9fQVNQRUNUXzE2eDkpCi0JCQkJbmV3ID0gVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF80eDM7Ci0JCQlwYXJhbXMtPnZpX2FzcGVjdCA9IG5ldzsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURToKLQkJCW9sZCA9IHBhcmFtcy0+dmlfYml0cmF0ZSAqIDEwMDA7Ci0JCQluZXcgPSAxMDAwICogKG5ldyAvIDEwMDApOwotCQkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1ZJREVPX1RBUkdFVF9CSVRSQVRFX01BWCAqIDEwMDApCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQlpZiAobmV3ID4gTVBFR19WSURFT19UQVJHRVRfQklUUkFURV9NQVggKiAxMDAwKQotCQkJCW5ldyA9IE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYICogMTAwMDsKLQkJCXBhcmFtcy0+dmlfYml0cmF0ZSA9IG5ldyAvIDEwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSzoKLQkJCW9sZCA9IHBhcmFtcy0+dmlfYml0cmF0ZV9wZWFrICogMTAwMDsKLQkJCW5ldyA9IDEwMDAgKiAobmV3IC8gMTAwMCk7Ci0JCQlpZiAoc2V0ICYmIG5ldyA+IE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYICogMTAwMCkKLQkJCQlyZXR1cm4gLUVSQU5HRTsKLQkJCWlmIChuZXcgPiBNUEVHX1ZJREVPX1RBUkdFVF9CSVRSQVRFX01BWCAqIDEwMDApCi0JCQkJbmV3ID0gTVBFR19WSURFT19UQVJHRVRfQklUUkFURV9NQVggKiAxMDAwOwotCQkJcGFyYW1zLT52aV9iaXRyYXRlX3BlYWsgPSBuZXcgLyAxMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6Ci0JCQlvbGQgPSBwYXJhbXMtPnZpX2JpdHJhdGVfbW9kZTsKLQkJCXBhcmFtcy0+dmlfYml0cmF0ZV9tb2RlID0gbmV3OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgorCQljdHJsLT52YWx1ZSA9IFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9UUzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUE1UOgorCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+dHNfcGlkX3BtdDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfQVVESU86CisJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT50c19waWRfYXVkaW87CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1ZJREVPOgorCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+dHNfcGlkX3ZpZGVvOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QQ1I6CisJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT50c19waWRfcGNyOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6CisJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT5hdV9lbmNvZGluZzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wyX0JJVFJBVEU6CisJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT5hdV9sMl9iaXRyYXRlOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6CisJCWlmICghaGFzX2FjMykKIAkJCXJldHVybiAtRUlOVkFMOworCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+YXVfYWMzX2JpdHJhdGU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19TQU1QTElOR19GUkVROgorCQljdHJsLT52YWx1ZSA9IFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ4MDAwOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6CisJCWN0cmwtPnZhbHVlID0gVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0FTUEVDVDoKKwkJY3RybC0+dmFsdWUgPSBwYXJhbXMtPnZpX2FzcGVjdDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6CisJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT52aV9iaXRyYXRlICogMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSzoKKwkJY3RybC0+dmFsdWUgPSBwYXJhbXMtPnZpX2JpdHJhdGVfcGVhayAqIDEwMDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6CisJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT52aV9iaXRyYXRlX21vZGU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQlpZiAoY21kID09IFZJRElPQ19HX0VYVF9DVFJMUykKLQkJY3RybC0+dmFsdWUgPSBvbGQ7Ci0JZWxzZQotCQljdHJsLT52YWx1ZSA9IG5ldzsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYWE2NzUyaHNfcWN0cmwoc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCwKLQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCkKK3N0YXRpYyBpbnQgaGFuZGxlX2N0cmwoaW50IGhhc19hYzMsIHN0cnVjdCBzYWE2NzUyaHNfbXBlZ19wYXJhbXMgKnBhcmFtcywKKwkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwsIGludCBzZXQpCiB7CisJaW50IG9sZCA9IDAsIG5ldzsKKworCW5ldyA9IGN0cmwtPnZhbHVlOworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CisJCW9sZCA9IFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9UUzsKKwkJaWYgKHNldCAmJiBuZXcgIT0gb2xkKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCW5ldyA9IG9sZDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUE1UOgorCQlvbGQgPSBwYXJhbXMtPnRzX3BpZF9wbXQ7CisJCWlmIChzZXQgJiYgbmV3ID4gTVBFR19QSURfTUFYKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCWlmIChuZXcgPiBNUEVHX1BJRF9NQVgpCisJCQluZXcgPSBNUEVHX1BJRF9NQVg7CisJCXBhcmFtcy0+dHNfcGlkX3BtdCA9IG5ldzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfQVVESU86CisJCW9sZCA9IHBhcmFtcy0+dHNfcGlkX2F1ZGlvOworCQlpZiAoc2V0ICYmIG5ldyA+IE1QRUdfUElEX01BWCkKKwkJCXJldHVybiAtRVJBTkdFOworCQlpZiAobmV3ID4gTVBFR19QSURfTUFYKQorCQkJbmV3ID0gTVBFR19QSURfTUFYOworCQlwYXJhbXMtPnRzX3BpZF9hdWRpbyA9IG5ldzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfVklERU86CisJCW9sZCA9IHBhcmFtcy0+dHNfcGlkX3ZpZGVvOworCQlpZiAoc2V0ICYmIG5ldyA+IE1QRUdfUElEX01BWCkKKwkJCXJldHVybiAtRVJBTkdFOworCQlpZiAobmV3ID4gTVBFR19QSURfTUFYKQorCQkJbmV3ID0gTVBFR19QSURfTUFYOworCQlwYXJhbXMtPnRzX3BpZF92aWRlbyA9IG5ldzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUENSOgorCQlvbGQgPSBwYXJhbXMtPnRzX3BpZF9wY3I7CisJCWlmIChzZXQgJiYgbmV3ID4gTVBFR19QSURfTUFYKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCWlmIChuZXcgPiBNUEVHX1BJRF9NQVgpCisJCQluZXcgPSBNUEVHX1BJRF9NQVg7CisJCXBhcmFtcy0+dHNfcGlkX3BjciA9IG5ldzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgorCQlvbGQgPSBwYXJhbXMtPmF1X2VuY29kaW5nOworCQlpZiAoc2V0ICYmIG5ldyAhPSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMiAmJgorCQkgICAgKCFoYXNfYWMzIHx8IG5ldyAhPSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzKSkKKwkJCXJldHVybiAtRVJBTkdFOworCQluZXcgPSBvbGQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFOgorCQlvbGQgPSBwYXJhbXMtPmF1X2wyX2JpdHJhdGU7CisJCWlmIChzZXQgJiYgbmV3ICE9IFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1NksgJiYKKwkJCSAgIG5ldyAhPSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCWlmIChuZXcgPD0gVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMjU2SykKKwkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1Nks7CisJCWVsc2UKKwkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzM4NEs7CisJCXBhcmFtcy0+YXVfbDJfYml0cmF0ZSA9IG5ldzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FDM19CSVRSQVRFOgorCQlpZiAoIWhhc19hYzMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJb2xkID0gcGFyYW1zLT5hdV9hYzNfYml0cmF0ZTsKKwkJaWYgKHNldCAmJiBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzI1NksgJiYKKwkJCSAgIG5ldyAhPSBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzg0SykKKwkJCXJldHVybiAtRVJBTkdFOworCQlpZiAobmV3IDw9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLKQorCQkJbmV3ID0gVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzI1Nks7CisJCWVsc2UKKwkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zODRLOworCQlwYXJhbXMtPmF1X2FjM19iaXRyYXRlID0gbmV3OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUToKKwkJb2xkID0gVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDA7CisJCWlmIChzZXQgJiYgbmV3ICE9IG9sZCkKKwkJCXJldHVybiAtRVJBTkdFOworCQluZXcgPSBvbGQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzoKKwkJb2xkID0gVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMjsKKwkJaWYgKHNldCAmJiBuZXcgIT0gb2xkKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCW5ldyA9IG9sZDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0FTUEVDVDoKKwkJb2xkID0gcGFyYW1zLT52aV9hc3BlY3Q7CisJCWlmIChzZXQgJiYgbmV3ICE9IFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMTZ4OSAmJgorCQkJICAgbmV3ICE9IFY0TDJfTVBFR19WSURFT19BU1BFQ1RfNHgzKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCWlmIChuZXcgIT0gVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8xNng5KQorCQkJbmV3ID0gVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF80eDM7CisJCXBhcmFtcy0+dmlfYXNwZWN0ID0gbmV3OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURToKKwkJb2xkID0gcGFyYW1zLT52aV9iaXRyYXRlICogMTAwMDsKKwkJbmV3ID0gMTAwMCAqIChuZXcgLyAxMDAwKTsKKwkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1ZJREVPX1RBUkdFVF9CSVRSQVRFX01BWCAqIDEwMDApCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJaWYgKG5ldyA+IE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYICogMTAwMCkKKwkJCW5ldyA9IE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYICogMTAwMDsKKwkJcGFyYW1zLT52aV9iaXRyYXRlID0gbmV3IC8gMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSzoKKwkJb2xkID0gcGFyYW1zLT52aV9iaXRyYXRlX3BlYWsgKiAxMDAwOworCQluZXcgPSAxMDAwICogKG5ldyAvIDEwMDApOworCQlpZiAoc2V0ICYmIG5ldyA+IE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYICogMTAwMCkKKwkJCXJldHVybiAtRVJBTkdFOworCQlpZiAobmV3ID4gTVBFR19WSURFT19UQVJHRVRfQklUUkFURV9NQVggKiAxMDAwKQorCQkJbmV3ID0gTVBFR19WSURFT19UQVJHRVRfQklUUkFURV9NQVggKiAxMDAwOworCQlwYXJhbXMtPnZpX2JpdHJhdGVfcGVhayA9IG5ldyAvIDEwMDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6CisJCW9sZCA9IHBhcmFtcy0+dmlfYml0cmF0ZV9tb2RlOworCQlwYXJhbXMtPnZpX2JpdHJhdGVfbW9kZSA9IG5ldzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWN0cmwtPnZhbHVlID0gbmV3OworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsKQoreworCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSB0b19zdGF0ZShzZCk7CiAJc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyAqcGFyYW1zID0gJmgtPnBhcmFtczsKIAlpbnQgZXJyOwogCkBAIC01ODMsNyArNTkyLDcgQEAKIAkJCQlWNEwyX01QRUdfVklERU9fQVNQRUNUXzR4Myk7CiAKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9QRUFLOgotCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWN0cmwpOworCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjcwMDAwMDAsIDEsIDgwMDAwMDApOwogCQlpZiAoZXJyID09IDAgJiYKIAkJICAgIHBhcmFtcy0+dmlfYml0cmF0ZV9tb2RlID09CiAJCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIpCkBAIC01OTcsMTIgKzYwNiwyMCBAQAogCQkJCVY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9UUyk7CiAKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCisJCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIsCisJCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIsIDEsCisJCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIpOwogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI3MDAwMDAwLCAxLCA2MDAwMDAwKTsKIAljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QTVQ6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgKDEgPDwgMTQpIC0gMSwgMSwgMTYpOwogCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX0FVRElPOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsICgxIDw8IDE0KSAtIDEsIDEsIDI2MCk7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfVklERU86CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgKDEgPDwgMTQpIC0gMSwgMSwgMjU2KTsKIAljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QQ1I6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWN0cmwpOworCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsICgxIDw8IDE0KSAtIDEsIDEsIDI1OSk7CiAKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTYxMCw4ICs2MjcsNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHNhYTY3NTJoc19xbWVudShzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoLAotCQlzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnFtZW51KQorc3RhdGljIGludCBzYWE2NzUyaHNfcXVlcnltZW51KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqcW1lbnUpCiB7CiAJc3RhdGljIGNvbnN0IHUzMiBtcGVnX2F1ZGlvX2VuY29kaW5nW10gPSB7CiAJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yLApAQCAtNjMyLDExICs2NDgsMTIgQEAKIAkJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzM4NEssCiAJCVY0TDJfQ1RSTF9NRU5VX0lEU19FTkQKIAl9OworCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSB0b19zdGF0ZShzZCk7CiAJc3RydWN0IHY0bDJfcXVlcnljdHJsIHFjdHJsOwogCWludCBlcnI7CiAKIAlxY3RybC5pZCA9IHFtZW51LT5pZDsKLQllcnIgPSBzYWE2NzUyaHNfcWN0cmwoaCwgJnFjdHJsKTsKKwllcnIgPSBzYWE2NzUyaHNfcXVlcnljdHJsKHNkLCAmcWN0cmwpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJc3dpdGNoIChxbWVudS0+aWQpIHsKQEAgLTY1NiwxNyArNjczLDE2IEBACiAJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9tZW51KHFtZW51LCAmcWN0cmwsIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IHNhYTY3NTJoc19pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUzMiBsZWFkaW5nX251bGxfYnl0ZXMpCitzdGF0aWMgaW50IHNhYTY3NTJoc19pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBsZWFkaW5nX251bGxfYnl0ZXMpCiB7CiAJdW5zaWduZWQgY2hhciBidWZbOV0sIGJ1ZjJbNF07Ci0Jc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaDsKKwlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAl1bnNpZ25lZCBzaXplOwogCXUzMiBjcmM7CiAJdW5zaWduZWQgY2hhciBsb2NhbFBBVFsyNTZdOwogCXVuc2lnbmVkIGNoYXIgbG9jYWxQTVRbMjU2XTsKIAotCWggPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQogCS8qIFNldCB2aWRlbyBmb3JtYXQgLSBtdXN0IGJlIGRvbmUgZmlyc3QgYXMgaXQgcmVzZXRzIG90aGVyIHNldHRpbmdzICovCiAJc2V0X3JlZzgoY2xpZW50LCAweDQxLCBoLT52aWRlb19mb3JtYXQpOwogCkBAIC03NjIsNyArNzc4LDcgQEAKIAlidWZbM10gPSAweDgyOwogCWJ1Zls0XSA9IDB4QjA7CiAJYnVmWzVdID0gYnVmMlswXTsKLQlzd2l0Y2goaC0+cGFyYW1zLnZpX2FzcGVjdCkgeworCXN3aXRjaCAoaC0+cGFyYW1zLnZpX2FzcGVjdCkgewogCWNhc2UgVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8xNng5OgogCQlidWZbNl0gPSBidWYyWzFdIHwgMHg0MDsKIAkJYnJlYWs7CkBAIC03NzAsNyArNzg2LDYgQEAKIAlkZWZhdWx0OgogCQlidWZbNl0gPSBidWYyWzFdICYgMHhCRjsKIAkJYnJlYWs7Ci0JCWJyZWFrOwogCX0KIAlidWZbN10gPSBidWYyWzJdOwogCWJ1Zls4XSA9IGJ1ZjJbM107CkBAIC03NzksODEgKzc5NCwxNjIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotc2FhNjc1MmhzX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBzYWE2NzUyaHNfZG9fZXh0X2N0cmxzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMsIGludCBzZXQpCiB7Ci0Jc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMgPSBhcmc7CisJc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCA9IHRvX3N0YXRlKHNkKTsKIAlzdHJ1Y3Qgc2FhNjc1MmhzX21wZWdfcGFyYW1zIHBhcmFtczsKLQlpbnQgZXJyID0gMDsKIAlpbnQgaTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfSU5UX0lOSVQ6Ci0JCS8qIGFwcGx5IHNldHRpbmdzIGFuZCBzdGFydCBlbmNvZGVyICovCi0JCXNhYTY3NTJoc19pbml0KGNsaWVudCwgKih1MzIgKilhcmcpOwotCQlicmVhazsKLQljYXNlIFZJRElPQ19TX0VYVF9DVFJMUzoKLQkJaWYgKGN0cmxzLT5jdHJsX2NsYXNzICE9IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgVklESU9DX1RSWV9FWFRfQ1RSTFM6Ci0JY2FzZSBWSURJT0NfR19FWFRfQ1RSTFM6Ci0JCWlmIChjdHJscy0+Y3RybF9jbGFzcyAhPSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKLQkJCXJldHVybiAtRUlOVkFMOwotCQlwYXJhbXMgPSBoLT5wYXJhbXM7Ci0JCWZvciAoaSA9IDA7IGkgPCBjdHJscy0+Y291bnQ7IGkrKykgewotCQkJZXJyID0gaGFuZGxlX2N0cmwoaC0+aGFzX2FjMywgJnBhcmFtcywgY3RybHMtPmNvbnRyb2xzICsgaSwgY21kKTsKLQkJCWlmIChlcnIpIHsKLQkJCQljdHJscy0+ZXJyb3JfaWR4ID0gaTsKLQkJCQlyZXR1cm4gZXJyOwotCQkJfQorCWlmIChjdHJscy0+Y3RybF9jbGFzcyAhPSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwYXJhbXMgPSBoLT5wYXJhbXM7CisJZm9yIChpID0gMDsgaSA8IGN0cmxzLT5jb3VudDsgaSsrKSB7CisJCWludCBlcnIgPSBoYW5kbGVfY3RybChoLT5oYXNfYWMzLCAmcGFyYW1zLCBjdHJscy0+Y29udHJvbHMgKyBpLCBzZXQpOworCisJCWlmIChlcnIpIHsKKwkJCWN0cmxzLT5lcnJvcl9pZHggPSBpOworCQkJcmV0dXJuIGVycjsKIAkJfQorCX0KKwlpZiAoc2V0KQogCQloLT5wYXJhbXMgPSBwYXJhbXM7Ci0JCWJyZWFrOwotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQkJcmV0dXJuIHNhYTY3NTJoc19xY3RybChoLCBhcmcpOwotCWNhc2UgVklESU9DX1FVRVJZTUVOVToKLQkJcmV0dXJuIHNhYTY3NTJoc19xbWVudShoLCBhcmcpOwotCWNhc2UgVklESU9DX0dfRk1UOgotCXsKLQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7Ci0KLQkgICBpZiAoaC0+dmlkZW9fZm9ybWF0ID09IFNBQTY3NTJIU19WRl9VTktOT1dOKQotCQkgICBoLT52aWRlb19mb3JtYXQgPSBTQUE2NzUySFNfVkZfRDE7Ci0JICAgZi0+Zm10LnBpeC53aWR0aCA9Ci0JCSAgIHY0bDJfZm9ybWF0X3RhYmxlW2gtPnZpZGVvX2Zvcm1hdF0uZm10LnBpeC53aWR0aDsKLQkgICBmLT5mbXQucGl4LmhlaWdodCA9Ci0JCSAgIHY0bDJfZm9ybWF0X3RhYmxlW2gtPnZpZGVvX2Zvcm1hdF0uZm10LnBpeC5oZWlnaHQ7Ci0JICAgYnJlYWsgOwotCX0KLQljYXNlIFZJRElPQ19TX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKLQotCQlzYWE2NzUyaHNfc2V0X3N1YnNhbXBsaW5nKGNsaWVudCwgZik7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ19TX1NURDoKLQkJaC0+c3RhbmRhcmQgPSAqKCh2NGwyX3N0ZF9pZCAqKSBhcmcpOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0RCR19HX0NISVBfSURFTlQ6Ci0JCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsCi0JCQkJYXJnLCBoLT5jaGlwLCBoLT5yZXZpc2lvbik7Ci0KLQlkZWZhdWx0OgotCQkvKiBub3RoaW5nICovCi0JCWJyZWFrOwotCX0KLQotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX3NfZXh0X2N0cmxzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpCit7CisJcmV0dXJuIHNhYTY3NTJoc19kb19leHRfY3RybHMoc2QsIGN0cmxzLCAxKTsKK30KKworc3RhdGljIGludCBzYWE2NzUyaHNfdHJ5X2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmN0cmxzKQoreworCXJldHVybiBzYWE2NzUyaHNfZG9fZXh0X2N0cmxzKHNkLCBjdHJscywgMCk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX2dfZXh0X2N0cmxzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpCit7CisJc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCA9IHRvX3N0YXRlKHNkKTsKKwlpbnQgaTsKKworCWlmIChjdHJscy0+Y3RybF9jbGFzcyAhPSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3RybHMtPmNvdW50OyBpKyspIHsKKwkJaW50IGVyciA9IGdldF9jdHJsKGgtPmhhc19hYzMsICZoLT5wYXJhbXMsIGN0cmxzLT5jb250cm9scyArIGkpOworCisJCWlmIChlcnIpIHsKKwkJCWN0cmxzLT5lcnJvcl9pZHggPSBpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE2NzUyaHNfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSB0b19zdGF0ZShzZCk7CisKKwlpZiAoaC0+dmlkZW9fZm9ybWF0ID09IFNBQTY3NTJIU19WRl9VTktOT1dOKQorCQloLT52aWRlb19mb3JtYXQgPSBTQUE2NzUySFNfVkZfRDE7CisJZi0+Zm10LnBpeC53aWR0aCA9CisJCXY0bDJfZm9ybWF0X3RhYmxlW2gtPnZpZGVvX2Zvcm1hdF0uZm10LnBpeC53aWR0aDsKKwlmLT5mbXQucGl4LmhlaWdodCA9CisJCXY0bDJfZm9ybWF0X3RhYmxlW2gtPnZpZGVvX2Zvcm1hdF0uZm10LnBpeC5oZWlnaHQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoID0gdG9fc3RhdGUoc2QpOworCWludCBkaXN0XzM1MiwgZGlzdF80ODAsIGRpc3RfNzIwOworCisJLyoKKwkgIEZJWE1FOiB0cmFuc2xhdGUgYW5kIHJvdW5kIHdpZHRoL2hlaWdodCBpbnRvIEVNUFJFU1MKKwkgIHN1YnNhbXBsZSB0eXBlOgorCisJICB0eXBlICAgfCAgIFBBTCAgIHwgIE5UU0MKKwkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgU0lGICAgIHwgMzUyeDI4OCB8IDM1MngyNDAKKwkgIDEvMiBEMSB8IDM1Mng1NzYgfCAzNTJ4NDgwCisJICAyLzMgRDEgfCA0ODB4NTc2IHwgNDgweDQ4MAorCSAgRDEgICAgIHwgNzIweDU3NiB8IDcyMHg0ODAKKwkqLworCisJZGlzdF8zNTIgPSBhYnMoZi0+Zm10LnBpeC53aWR0aCAtIDM1Mik7CisJZGlzdF80ODAgPSBhYnMoZi0+Zm10LnBpeC53aWR0aCAtIDQ4MCk7CisJZGlzdF83MjAgPSBhYnMoZi0+Zm10LnBpeC53aWR0aCAtIDcyMCk7CisJaWYgKGRpc3RfNzIwIDwgZGlzdF80ODApIHsKKwkJZi0+Zm10LnBpeC53aWR0aCA9IDcyMDsKKwkJZi0+Zm10LnBpeC5oZWlnaHQgPSA1NzY7CisJCWgtPnZpZGVvX2Zvcm1hdCA9IFNBQTY3NTJIU19WRl9EMTsKKwl9IGVsc2UgaWYgKGRpc3RfNDgwIDwgZGlzdF8zNTIpIHsKKwkJZi0+Zm10LnBpeC53aWR0aCA9IDQ4MDsKKwkJZi0+Zm10LnBpeC5oZWlnaHQgPSA1NzY7CisJCWgtPnZpZGVvX2Zvcm1hdCA9IFNBQTY3NTJIU19WRl8yXzNfRDE7CisJfSBlbHNlIHsKKwkJZi0+Zm10LnBpeC53aWR0aCA9IDM1MjsKKwkJaWYgKGFicyhmLT5mbXQucGl4LmhlaWdodCAtIDU3NikgPAorCQkgICAgYWJzKGYtPmZtdC5waXguaGVpZ2h0IC0gMjg4KSkgeworCQkJZi0+Zm10LnBpeC5oZWlnaHQgPSA1NzY7CisJCQloLT52aWRlb19mb3JtYXQgPSBTQUE2NzUySFNfVkZfMV8yX0QxOworCQl9IGVsc2UgeworCQkJZi0+Zm10LnBpeC5oZWlnaHQgPSAyODg7CisJCQloLT52aWRlb19mb3JtYXQgPSBTQUE2NzUySFNfVkZfU0lGOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTY3NTJoc19zX3N0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCit7CisJc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCA9IHRvX3N0YXRlKHNkKTsKKworCWgtPnN0YW5kYXJkID0gc3RkOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTY3NTJoc19nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSB0b19zdGF0ZShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LAorCQkJY2hpcCwgaC0+Y2hpcCwgaC0+cmV2aXNpb24pOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHNhYTY3NTJoc19jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gc2FhNjc1MmhzX2dfY2hpcF9pZGVudCwKKwkuaW5pdCA9IHNhYTY3NTJoc19pbml0LAorCS5xdWVyeWN0cmwgPSBzYWE2NzUyaHNfcXVlcnljdHJsLAorCS5xdWVyeW1lbnUgPSBzYWE2NzUyaHNfcXVlcnltZW51LAorCS5nX2V4dF9jdHJscyA9IHNhYTY3NTJoc19nX2V4dF9jdHJscywKKwkuc19leHRfY3RybHMgPSBzYWE2NzUyaHNfc19leHRfY3RybHMsCisJLnRyeV9leHRfY3RybHMgPSBzYWE2NzUyaHNfdHJ5X2V4dF9jdHJscywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzIHNhYTY3NTJoc190dW5lcl9vcHMgPSB7CisJLnNfc3RkID0gc2FhNjc1MmhzX3Nfc3RkLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgc2FhNjc1MmhzX3ZpZGVvX29wcyA9IHsKKwkuc19mbXQgPSBzYWE2NzUyaHNfc19mbXQsCisJLmdfZm10ID0gc2FhNjc1MmhzX2dfZm10LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgc2FhNjc1MmhzX29wcyA9IHsKKwkuY29yZSA9ICZzYWE2NzUyaHNfY29yZV9vcHMsCisJLnR1bmVyID0gJnNhYTY3NTJoc190dW5lcl9vcHMsCisJLnZpZGVvID0gJnNhYTY3NTJoc192aWRlb19vcHMsCit9OworCiBzdGF0aWMgaW50IHNhYTY3NTJoc19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQorCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCA9IGt6YWxsb2Moc2l6ZW9mKCpoKSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAl1OCBhZGRyID0gMHgxMzsKIAl1OCBkYXRhWzEyXTsKIApAQCAtODYxLDYgKzk1Nyw4IEBACiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAlpZiAoaCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKKwlzZCA9ICZoLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmc2FhNjc1MmhzX29wcyk7CiAKIAlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCAmYWRkciwgMSk7CiAJaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgZGF0YSwgc2l6ZW9mKGRhdGEpKTsKQEAgLTg3NCwxNCArOTcyLDE1IEBACiAJfQogCWgtPnBhcmFtcyA9IHBhcmFtX2RlZmF1bHRzOwogCWgtPnN0YW5kYXJkID0gMDsgLyogQXNzdW1lIDYyNSBpbnB1dCBsaW5lcyAqLwotCi0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgaCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc2FhNjc1MmhzX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fc3RhdGUoc2QpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODkzLDggKzk5Miw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJzYWE2NzUyaHMiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE2NzUySFMsCi0JLmNvbW1hbmQgPSBzYWE2NzUyaHNfY29tbWFuZCwKIAkucHJvYmUgPSBzYWE2NzUyaHNfcHJvYmUsCiAJLnJlbW92ZSA9IHNhYTY3NTJoc19yZW1vdmUsCiAJLmlkX3RhYmxlID0gc2FhNjc1MmhzX2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKaW5kZXggZTJmZWJjZC4uYTc5MGE3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS90dmVlcHJvbS5oPgogI2luY2x1ZGUgInRlYTU3NjcuaCIKKyNpbmNsdWRlICJ0ZGExODI3MS5oIgogCiAvKiBjb21tbHkgdXNlZCBzdHJpbmdzICovCiBzdGF0aWMgY2hhciBuYW1lX211dGVbXSAgICA9ICJtdXRlIjsKQEAgLTI3Miw2ICsyNzMsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5lbXByZXNzX2FkZHIgCT0gMHgyMCwKIAogCQkuaW5wdXRzICAgICAgICAgPSB7ewogCQkJLm5hbWUgPSBuYW1lX2NvbXAxLApAQCAtNDA4LDYgKzQxMCw3IEBACiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLmVtcHJlc3NfYWRkciAJPSAweDIwLAogCQkudGRhOTg4N19jb25mCT0gVERBOTg4N19QUkVTRU5ULAogCQkuZ3Bpb21hc2sJPSAweDgyMDAwMCwKIAkJLmlucHV0cwkJPSB7ewpAQCAtODE4LDYgKzgyMSw3IEBACiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLmVtcHJlc3NfYWRkciAJPSAweDIwLAogCQkuaW5wdXRzICAgICAgICAgPSB7ewogCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAogCQkJLnZtdXggPSA0LApAQCAtOTc3LDYgKzk4MSw3IEBACiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLmVtcHJlc3NfYWRkciAJPSAweDIwLAogCQkuaW5wdXRzICAgICAgICAgPSB7ewogCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAogCQkJLnZtdXggPSAxLApAQCAtMTY5OSw2ICsxNzA0LDcgQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmRzX2FkZHIgCT0gMHgxMCwKIAkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAogCQkuaW5wdXRzICAgICAgICAgPSB7ewogCQkJLm5hbWUgPSBuYW1lX3R2LApAQCAtMjM2NCw2ICsyMzcwLDcgQEAKIAkJLnJhZGlvX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5lbXByZXNzX2FkZHIgCT0gMHgyMSwKIAkJLmlucHV0cwkJPSB7ewogCQkJLm5hbWUgICA9ICJDb21wb3NpdGUgMCIsCiAJCQkudm11eCAgID0gMCwKQEAgLTMyOTEsNiArMzI5OCw2OCBAQAogCQkJLmdwaW8gPSAweDAyMDAxMDAsCiAJCX0sCiAJfSwKKwlbU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEyMF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYtSFZSMTEyMCBBVFNDL1FBTS1IeWJyaWQiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkudHVuZXJfY29uZmlnICAgPSAzLAorCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkudHNfdHlwZQk9IFNBQTcxMzRfTVBFR19UU19TRVJJQUwsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDgwMDEwMCwgLyogR1BJTyAyMSBpcyBhbiBJTlBVVCAqLworCQkuaW5wdXRzICAgICAgICAgPSB7eworCQkJLm5hbWUgPSBuYW1lX3R2LAorCQkJLnZtdXggPSAxLAorCQkJLmFtdXggPSBUViwKKwkJCS50diAgID0gMSwKKwkJCS5ncGlvID0gMHgwMDAwMTAwLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkudm11eCA9IDMsCisJCQkuYW11eCA9IExJTkUxLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggPSA4LAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSB9LAorCQkucmFkaW8gPSB7CisJCQkubmFtZSA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCA9IFRWLAorCQkJLmdwaW8gPSAweDA4MDAxMDAsIC8qIEdQSU8gMjMgSEkgZm9yIEZNICovCisJCX0sCisJfSwKKwlbU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMFIzXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkhhdXBwYXVnZSBXaW5UVi1IVlIxMTEwcjMiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkudHVuZXJfY29uZmlnICAgPSAzLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDA4MDAxMDAsIC8qIEdQSU8gMjEgaXMgYW4gSU5QVVQgKi8KKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gVFYsCisJCQkudHYgICA9IDEsCisJCQkuZ3BpbyA9IDB4MDAwMDEwMCwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggPSAzLAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTEsCisJCX0gfSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgPSBuYW1lX3JhZGlvLAorCQkJLmFtdXggPSBUViwKKwkJCS5ncGlvID0gMHgwODAwMTAwLCAvKiBHUElPIDIzIEhJIGZvciBGTSAqLworCQl9LAorCX0sCiAJW1NBQTcxMzRfQk9BUkRfQ0lORVJHWV9IVF9QQ01DSUFdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiVGVycmF0ZWMgQ2luZXJneSBIVCBQQ01DSUEiLAogCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LApAQCAtNDA3MCw2ICs0MTM5LDcgQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5lbXByZXNzX2FkZHIgCT0gMHgyMCwKIAkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAogCQkuaW5wdXRzICAgICAgICAgPSB7IHsKIAkJCS5uYW1lID0gbmFtZV90diwKQEAgLTQxMDYsNiArNDE3Niw3IEBACiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuZW1wcmVzc19hZGRyIAk9IDB4MjAsCiAJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKIAkJLmlucHV0cyAgICAgICAgID0geyB7CiAJCQkubmFtZSA9IG5hbWVfdHYsCkBAIC00MTQzLDYgKzQyMTQsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmVtcHJlc3NfYWRkciAJPSAweDIwLAogCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCiAJCS5pbnB1dHMgICAgICAgICA9IHsgewogCQkJLm5hbWUgPSBuYW1lX3R2LApAQCAtNDMyMywxMyArNDM5NSwxMyBAQAogCQkJIC5hbXV4ID0gVFYsCiAJCQkgLnR2ICAgPSAxLAogCQkgfSwgewotCQkJIC5uYW1lID0gbmFtZV9jb21wLAotCQkJIC52bXV4ID0gMCwKKwkJCSAubmFtZSA9IG5hbWVfY29tcDEsCisJCQkgLnZtdXggPSAzLAogCQkJIC5hbXV4ID0gTElORTEsCiAJCSB9LCB7CiAJCQkgLm5hbWUgPSBuYW1lX3N2aWRlbywKIAkJCSAudm11eCA9IDgsCi0JCQkgLmFtdXggPSBMSU5FMSwKKwkJCSAuYW11eCA9IExJTkUyLAogCQkgfSB9LAogCQkgLnJhZGlvID0gewogCQkJIC5uYW1lID0gbmFtZV9yYWRpbywKQEAgLTQ0MjEsOCArNDQ5Myw3IEBACiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkvKiBubyBEVkIgc3VwcG9ydCBmb3Igbm93ICovCi0JCS8qIC5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsICovCisJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCiAJCS5pbnB1dHMgICAgICAgICA9IHsgewogCQkJLm5hbWUgPSBuYW1lX2NvbXAsCiAJCQkudm11eCA9IDEsCkBAIC00NDQxLDggKzQ1MTIsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLyogbm8gRFZCIHN1cHBvcnQgZm9yIG5vdyAqLwotCQkvKiAubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLCAqLworCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAogCQkuaW5wdXRzICAgICAgICAgPSB7IHsKIAkJCS5uYW1lID0gbmFtZV9jb21wLAogCQkJLnZtdXggPSAxLApAQCAtNDYxMSw3ICs0NjgxLDcgQEAKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfWU1FQ19UVkZfNTUzM01GLAogCQkucmFkaW9fdHlwZSAgICAgPSBUVU5FUl9URUE1NzY3LAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSAweDYwLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDgwMDAwNzAwLAogCQkuaW5wdXRzID0geyB7CiAJCQkubmFtZSAgID0gbmFtZV90diwKQEAgLTU0MDUsNiArNTQ3NSwzNiBAQAogCX0sewogCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgICAgPSAweDY3MDYsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTIwLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgICAgPSAweDY3MDcsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTEwUjMsCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSAgICA9IDB4NjcwOCwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMjAsCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSAgICA9IDB4NjcwOSwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMTBSMywKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlICAgID0gMHg2NzBhLAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMFIzLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCiAJCS5zdWJ2ZW5kb3IgICAgPSAweDE1M2IsCiAJCS5zdWJkZXZpY2UgICAgPSAweDExNzIsCiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0NJTkVSR1lfSFRfUENNQ0lBLApAQCAtNTgyMSw4ICs1OTIxLDggQEAKIH0KIAogCi1zdGF0aWMgaW50IHNhYTcxMzRfdGRhODI5MF9jYWxsYmFjayhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKLQkJCQkgICAgaW50IGNvbW1hbmQsIGludCBhcmcpCitzdGF0aWMgaW50IHNhYTcxMzRfdGRhODI5MF84Mjd4X2NhbGxiYWNrKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAorCQkJCQkgaW50IGNvbW1hbmQsIGludCBhcmcpCiB7CiAJdTggc3luY19jb250cm9sOwogCkBAIC01ODQ4LDYgKzU5NDgsNjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgc2FhNzEzNF90ZGExODI3MV9odnIxMXgwX3RvZ2dsZV9hZ2Moc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsCisJCQkJCQkgICAgICBlbnVtIHRkYTE4MjcxX21vZGUgbW9kZSkKK3sKKwkvKiB0b2dnbGUgQUdDIHN3aXRjaCB0aHJvdWdoIEdQSU8gMjYgKi8KKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIFREQTE4MjcxX0FOQUxPRzoKKwkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDI2LCAwKTsKKwkJYnJlYWs7CisJY2FzZSBUREExODI3MV9ESUdJVEFMOgorCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjYsIDEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzEzNF90ZGE4MjkwXzE4MjcxX2NhbGxiYWNrKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAorCQkJCQkgIGludCBjb21tYW5kLCBpbnQgYXJnKQoreworCWludCByZXQgPSAwOworCisJc3dpdGNoIChjb21tYW5kKSB7CisJY2FzZSBUREExODI3MV9DQUxMQkFDS19DTURfQUdDX0VOQUJMRTogLyogMCAqLworCQlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKKwkJY2FzZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTIwOgorCQljYXNlIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMTBSMzoKKwkJCXJldCA9IHNhYTcxMzRfdGRhMTgyNzFfaHZyMTF4MF90b2dnbGVfYWdjKGRldiwgYXJnKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzEzNF90ZGE4MjkwX2NhbGxiYWNrKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAorCQkJCSAgICBpbnQgY29tbWFuZCwgaW50IGFyZykKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTIwOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMFIzOgorCQkvKiB0ZGE4MjkwICsgdGRhMTgyNzEgKi8KKwkJcmV0ID0gc2FhNzEzNF90ZGE4MjkwXzE4MjcxX2NhbGxiYWNrKGRldiwgY29tbWFuZCwgYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogdGRhODI5MCArIHRkYTgyN3ggKi8KKwkJcmV0ID0gc2FhNzEzNF90ZGE4MjkwXzgyN3hfY2FsbGJhY2soZGV2LCBjb21tYW5kLCBhcmcpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKwogaW50IHNhYTcxMzRfdHVuZXJfY2FsbGJhY2sodm9pZCAqcHJpdiwgaW50IGNvbXBvbmVudCwgaW50IGNvbW1hbmQsIGludCBhcmcpCiB7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBwcml2OwpAQCAtNTg3OCwxMSArNjAzNywxNiBAQAogCXN3aXRjaCAodHYubW9kZWwpIHsKIAljYXNlIDY3MDE5OiAvKiBXaW5UVi1IVlIxMTEwIChSZXRhaWwsIElSIEJsYXN0ZXIsIGh5YnJpZCwgRk0sIFNWaWQvQ29tcCwgMy41bW0gYXVkaW8gaW4pICovCiAJY2FzZSA2NzEwOTogLyogV2luVFYtSFZSMTAwMCAoUmV0YWlsLCBJUiBSZWNlaXZlLCBhbmFsb2csIG5vIEZNLCBTVmlkL0NvbXAsIDMuNW1tIGF1ZGlvIGluKSAqLworCWNhc2UgNjcyMDE6IC8qIFdpblRWLUhWUjExMjAgKFJldGFpbCwgSVIgUmVjZWl2ZSwgaHlicmlkLCBGTSwgU1ZpZC9Db21wLCAzLjVtbSBhdWRpbyBpbikgKi8KKwljYXNlIDY3MzAxOiAvKiBXaW5UVi1IVlIxMDAwIChSZXRhaWwsIElSIFJlY2VpdmUsIGFuYWxvZywgbm8gRk0sIFNWaWQvQ29tcCwgMy41bW0gYXVkaW8gaW4pICovCisJY2FzZSA2NzIwOTogLyogV2luVFYtSFZSMTExMCAoUmV0YWlsLCBJUiBSZWNlaXZlLCBoeWJyaWQsIEZNLCBTVmlkL0NvbXAsIDMuNW1tIGF1ZGlvIGluKSAqLwogCWNhc2UgNjc1NTk6IC8qIFdpblRWLUhWUjExMTAgKE9FTSwgbm8gSVIsIGh5YnJpZCwgRk0sIFNWaWQvQ29tcCwgUkNBIGF1ZCkgKi8KIAljYXNlIDY3NTY5OiAvKiBXaW5UVi1IVlIxMTEwIChPRU0sIG5vIElSLCBoeWJyaWQsIEZNKSAqLwogCWNhc2UgNjc1Nzk6IC8qIFdpblRWLUhWUjExMTAgKE9FTSwgbm8gSVIsIGh5YnJpZCwgbm8gRk0pICovCiAJY2FzZSA2NzU4OTogLyogV2luVFYtSFZSMTExMCAoT0VNLCBubyBJUiwgaHlicmlkLCBubyBGTSwgU1ZpZC9Db21wLCBSQ0EgYXVkKSAqLwogCWNhc2UgNjc1OTk6IC8qIFdpblRWLUhWUjExMTAgKE9FTSwgbm8gSVIsIGh5YnJpZCwgbm8gRk0sIFNWaWQvQ29tcCwgUkNBIGF1ZCkgKi8KKwljYXNlIDY3NjUxOiAvKiBXaW5UVi1IVlIxMTIwIChPRU0sIG5vIElSLCBoeWJyaWQsIEZNLCBTVmlkL0NvbXAsIFJDQSBhdWQpICovCisJY2FzZSA2NzY1OTogLyogV2luVFYtSFZSMTExMCAoT0VNLCBubyBJUiwgaHlicmlkLCBGTSwgU1ZpZC9Db21wLCBSQ0EgYXVkKSAqLwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogd2FybmluZzogIgpAQCAtNjAxOSw2ICs2MTgzLDExIEBACiAJCW1zbGVlcCgxMCk7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQ0FSREJVU181MDY6CisJCXNhYTcxMzRfc2V0X2dwaW8oZGV2LCAyMywgMCk7CisJCW1zbGVlcCgxMCk7CisJCXNhYTcxMzRfc2V0X2dwaW8oZGV2LCAyMywgMSk7CisJCWRldi0+aGFzX3JlbW90ZSA9IFNBQTcxMzRfUkVNT1RFX0kyQzsKKwkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9NMTAzOgogCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjMsIDApOwogCQltc2xlZXAoMTApOwpAQCAtNjA1NCw2ICs2MjIzLDE2IEBACiAKIAkJc2FhX3dyaXRlYiAoU0FBNzEzNF9QUk9EVUNUSU9OX1RFU1RfTU9ERSwgMHgwMCk7CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEyMDoKKwljYXNlIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMTBSMzoKKwkJLyogR1BJTyAyNiBoaWdoIGZvciBkaWdpdGFsLCBsb3cgZm9yIGFuYWxvZyAqLworCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjYsIDApOworCQltc2xlZXAoMSk7CisKKwkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDIyLCAwKTsKKwkJbXNsZWVwKDEwKTsKKwkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDIyLCAxKTsKKwkJYnJlYWs7CiAJLyogaTJjIHJlbW90ZXMgKi8KIAljYXNlIFNBQTcxMzRfQk9BUkRfUElOTkFDTEVfUENUVl8xMTBpOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSU5OQUNMRV9QQ1RWXzMxMGk6CkBAIC02MDc5LDE1ICs2MjU4LDE1IEBACiAJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQTU9ERTAgPj4gMiwgICAweDhjMDQwMDA3LCAweDhjMDQwMDA3KTsKIAkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIsIDB4MGMwMDA3Y2QsIDB4MGMwMDA3Y2QpOwogCQlicmVhazsKLQljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0E3MDBfUFJPOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTcwMF9IWUJSSUQ6CisJCXByaW50aygiJXM6ICVzOiBoeWJyaWQgYW5hbG9nL2R2YiBjYXJkXG4iCisJCSAgICAgICAiJXM6IFNvcnJ5LCBvZiB0aGUgYW5hbG9nIGlucHV0cywgb25seSBhbmFsb2cgcy12aWRlbyBhbmQgY29tcG9zaXRlICIKKwkJICAgICAgICJhcmUgc3VwcG9ydGVkIGZvciBub3cuXG4iLAorCQkJZGV2LT5uYW1lLCBjYXJkKGRldikubmFtZSwgZGV2LT5uYW1lKTsKKwljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0E3MDBfUFJPOgogCQkvKiB3cml0ZSB3aW5kb3dzIGdwaW8gdmFsdWVzICovCiAJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQTU9ERTAgPj4gMiwgICAweDgwMDQwMTAwLCAweDgwMDQwMTAwKTsKIAkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIsIDB4ODAwNDAxMDAsIDB4MDAwNDAxMDApOwotCQlwcmludGsoIiVzOiAlczogaHlicmlkIGFuYWxvZy9kdmIgY2FyZFxuIgotCQkgICAgICAgIiVzOiBTb3JyeSwgb25seSBhbmFsb2cgcy12aWRlbyBhbmQgY29tcG9zaXRlIGlucHV0ICIKLQkJICAgICAgICJhcmUgc3VwcG9ydGVkIGZvciBub3cuXG4iLAotCQkJZGV2LT5uYW1lLCBjYXJkKGRldikubmFtZSwgZGV2LT5uYW1lKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwpAQCAtNjEwOSw3ICs2Mjg4LDcgQEAKIAogCQl0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9SQURJTzsKIAotCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKKwkJc2FhX2NhbGxfYWxsKGRldiwgdHVuZXIsIHNfdHlwZV9hZGRyLCAmdHVuX3NldHVwKTsKIAkJbW9kZV9tYXNrICY9IH5UX1JBRElPOwogCX0KIApAQCAtNjEyMSw3ICs2MzAwLDcgQEAKIAogCQl0dW5fc2V0dXAubW9kZV9tYXNrID0gbW9kZV9tYXNrOwogCi0JCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOworCQlzYWFfY2FsbF9hbGwoZGV2LCB0dW5lciwgc190eXBlX2FkZHIsICZ0dW5fc2V0dXApOwogCX0KIAogCWlmIChkZXYtPnRkYTk4ODdfY29uZikgewpAQCAtNjEzMCw4ICs2MzA5LDcgQEAKIAkJdGRhOTg4N19jZmcudHVuZXIgPSBUVU5FUl9UREE5ODg3OwogCQl0ZGE5ODg3X2NmZy5wcml2ID0gJmRldi0+dGRhOTg4N19jb25mOwogCi0JCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFRVTkVSX1NFVF9DT05GSUcsCi0JCQkJCSAmdGRhOTg4N19jZmcpOworCQlzYWFfY2FsbF9hbGwoZGV2LCB0dW5lciwgc19jb25maWcsICZ0ZGE5ODg3X2NmZyk7CiAJfQogCiAJaWYgKGRldi0+dHVuZXJfdHlwZSA9PSBUVU5FUl9YQzIwMjgpIHsKQEAgLTYxNTgsNyArNjMzNiw3IEBACiAJCXhjMjAyOF9jZmcudHVuZXIgPSBUVU5FUl9YQzIwMjg7CiAJCXhjMjAyOF9jZmcucHJpdiAgPSAmY3RsOwogCi0JCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFRVTkVSX1NFVF9DT05GSUcsICZ4YzIwMjhfY2ZnKTsKKwkJc2FhX2NhbGxfYWxsKGRldiwgdHVuZXIsIHNfY29uZmlnLCAmeGMyMDI4X2NmZyk7CiAJfQogfQogCkBAIC02MTY4LDkgKzYzNDYsMjAgQEAKIAl1bnNpZ25lZCBjaGFyIGJ1ZjsKIAlpbnQgYm9hcmQ7CiAKKwkvKiBQdXQgaGVyZSB0aGUgY29kZSB0aGF0IGVuYWJsZXMgdGhlIGNoaXBzIHRoYXQgYXJlIG5lZWRlZAorCSAgIGZvciBhbmFsb2cgbW9kZSBhbmQgZG9lc24ndCBkZXBlbmQgb24gdGhlIHR1bmVyIGF0dGFjaG1lbnQuCisJICAgSXQgaXMgYWxzbyBhIGdvb2QgaWRlYSB0byBnZXQgdHVuZXIgdHlwZSBmcm9tIGVlcHJvbSwgZXRjIGJlZm9yZQorCSAgIGluaXRpYWxpemluZyB0dW5lciwgc2luY2Ugd2UgY2FuIGF2b2lkIGxvYWRpbmcgdHVuZXIgZHJpdmVyCisJICAgb24gZGV2aWNlcyB0aGF0IGhhcyBUVU5FUl9BQlNFTlQKKwkgKi8KIAlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQk1LX01QRVhfTk9UVU5FUjoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQk1LX01QRVhfVFVORVI6CisJCS8qIENoZWNrcyBpZiB0aGUgZGV2aWNlIGhhcyBhIHR1bmVyIGF0IDB4NjAgYWRkcgorCQkgICBJZiB0aGUgZGV2aWNlIGRvZXNuJ3QgaGF2ZSBhIHR1bmVyLCBUVU5FUl9BQlNFTlQKKwkJICAgd2lsbCBiZSB1c2VkIGF0IHR1bmVyX3R5cGUsIGF2b2lkaW5nIGxvYWRpbmcgdHVuZXIKKwkJICAgd2l0aG91dCBuZWVkaW5nIGl0CisJCSAqLwogCQlkZXYtPmkyY19jbGllbnQuYWRkciA9IDB4NjA7CiAJCWJvYXJkID0gKGkyY19tYXN0ZXJfcmVjdigmZGV2LT5pMmNfY2xpZW50LCAmYnVmLCAwKSA8IDApCiAJCQk/IFNBQTcxMzRfQk9BUkRfQk1LX01QRVhfTk9UVU5FUgpAQCAtNjE4OCwxMSArNjM3NywxNSBAQAogCQl1OCBzdWJhZGRyOwogCQl1OCBkYXRhWzNdOwogCQlpbnQgcmV0LCB0dW5lcl90OwotCiAJCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0ge3suYWRkcj0weDUwLCAuZmxhZ3M9MCwgLmJ1Zj0mc3ViYWRkciwgLmxlbiA9IDF9LAogCQkJCQl7LmFkZHI9MHg1MCwgLmZsYWdzPUkyQ19NX1JELCAuYnVmPWRhdGEsIC5sZW4gPSAzfX07CisKIAkJc3ViYWRkcj0gMHgxNDsKIAkJdHVuZXJfdCA9IDA7CisKKwkJLyogUmV0cmlldmUgZGV2aWNlIGRhdGEgZnJvbSBlZXByb20sIGNoZWNraW5nIGZvciB0aGUKKwkJICAgcHJvcGVyIHR1bmVyX3R5cGUuCisJCSAqLwogCQlyZXQgPSBpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsIG1zZywgMik7CiAJCWlmIChyZXQgIT0gMikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJFRVBST00gcmVhZCBmYWlsdXJlXG4iKTsKQEAgLTYyNDgsMTIgKzY0NDEsMTQgQEAKIAkJCQlkZXYtPm5hbWUsIHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLm5hbWUpOwogCQkJYnJlYWs7CiAJCX0KKwkJLyogYnJlYWsgaW50ZW50aW9uYWxseSBvbWl0dGVkICovCiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzMwMDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVNVU19FVVJPUEEyX0hZQlJJRDoKIAl7CiAKLQkJLyogVGhlIFBoaWxpcHMgRVVST1BBIGJhc2VkIGh5YnJpZCBib2FyZHMgaGF2ZSB0aGUgdHVuZXIgY29ubmVjdGVkIHRocm91Z2gKLQkJICogdGhlIGNoYW5uZWwgZGVjb2Rlci4gV2UgaGF2ZSB0byBtYWtlIGl0IHRyYW5zcGFyZW50IHRvIGZpbmQgaXQKKwkJLyogVGhlIFBoaWxpcHMgRVVST1BBIGJhc2VkIGh5YnJpZCBib2FyZHMgaGF2ZSB0aGUgdHVuZXIKKwkJICAgY29ubmVjdGVkIHRocm91Z2ggdGhlIGNoYW5uZWwgZGVjb2Rlci4gV2UgaGF2ZSB0byBtYWtlIGl0CisJCSAgIHRyYW5zcGFyZW50IHRvIGZpbmQgaXQKIAkJICovCiAJCXU4IGRhdGFbXSA9IHsgMHgwNywgMHgwMn07CiAJCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkcj0weDA4LCAuZmxhZ3M9MCwgLmJ1Zj1kYXRhLCAubGVuID0gc2l6ZW9mKGRhdGEpfTsKQEAgLTYyNzQsMjEgKzY0NjksMTUgQEAKIAkJaWYgKGRldi0+Ym9hcmQgPT0gU0FBNzEzNF9CT0FSRF9QSElMSVBTX1RJR0VSX1MpIHsKIAkJCWRldi0+dHVuZXJfdHlwZSA9IFRVTkVSX1BISUxJUFNfVERBODI5MDsKIAotCQkJc2FhNzEzNF90dW5lcl9zZXR1cChkZXYpOwotCiAJCQlkYXRhWzJdID0gMHg2ODsKIAkJCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7Ci0KLQkJCS8qIFR1bmVyIHNldHVwIGlzIGhhbmRsZWQgYmVmb3JlIEkyQyB0cmFuc2Zlci4KLQkJCSAgIER1ZSB0byB0aGF0LCB0aGVyZSdzIG5vIG5lZWQgdG8gZG8gaXQgbGF0ZXIKLQkJCSAqLwotCQkJcmV0dXJuIDA7CisJCQlicmVhazsKIAkJfQogCQlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOwogCQlicmVhazsKIAl9Ci0gICAgICAgY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfVFZGTTcxMzU6Ci0gICAgICAgLyogVGhlIGNhcmQgYmVsb3cgaXMgZGV0ZWN0ZWQgYXMgY2FyZD01MywgYnV0IGlzIGRpZmZlcmVudCAqLworCWNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1RWRk03MTM1OgorCS8qIFRoZSBjYXJkIGJlbG93IGlzIGRldGVjdGVkIGFzIGNhcmQ9NTMsIGJ1dCBpcyBkaWZmZXJlbnQgKi8KIAkgICAgICAgaWYgKGRldi0+YXV0b2RldGVjdGVkICYmIChkZXYtPmVlZGF0YVsweDI3XSA9PSAweDAzKSkgewogCQkgICAgICAgZGV2LT5ib2FyZCA9IFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9BTkFMT0c7CiAJCSAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogUDcxMzEgYW5hbG9nIG9ubHksIHVzaW5nICIKQEAgLTYyOTYsNiArNjQ4NSwxMCBAQAogCQkgICAgICAgZGV2LT5uYW1lLCBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lKTsKIAkgICAgICAgfQogCSAgICAgICBicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMjA6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTEwUjM6CisJCWhhdXBwYXVnZV9lZXByb20oZGV2LCBkZXYtPmVlZGF0YSsweDgwKTsKKwkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTEwOgogCQloYXVwcGF1Z2VfZWVwcm9tKGRldiwgZGV2LT5lZWRhdGErMHg4MCk7CiAJCS8qIGJyZWFrIGludGVudGlvbmFsbHkgb21pdHRlZCAqLwpAQCAtNjM1MSwyMiArNjU0NCw2IEBACiAJCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CiAJCWJyZWFrOwogCX0KLQljYXNlIFNBQTcxMzRfQk9BUkRfQURTX0lOU1RBTlRfSERUVl9QQ0k6Ci0JY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9BVFNDMTEwOgotCXsKLQkJLyogZW5hYmxlIHR1bmVyICovCi0JCWludCBpOwotCQlzdGF0aWMgY29uc3QgdTggYnVmZmVyIFtdID0geyAweDEwLCAweDEyLCAweDEzLCAweDA0LCAweDE2LAotCQkJCQkgICAgICAweDAwLCAweDE0LCAweDA0LCAweDE3LCAweDAwIH07Ci0JCWRldi0+aTJjX2NsaWVudC5hZGRyID0gMHgwYTsKLQkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKLQkJCWlmICgyICE9IGkyY19tYXN0ZXJfc2VuZCgmZGV2LT5pMmNfY2xpZW50LAotCQkJCQkJICZidWZmZXJbaSoyXSwgMikpCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSAgICAgICAiJXM6IFVuYWJsZSB0byBlbmFibGUgdHVuZXIoJWkpLlxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBpKTsKLQkJYnJlYWs7Ci0JfQogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8yMDA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzIwMEE6CiAJCS8qIFRoZSBUMjAwIGFuZCB0aGUgVDIwMEEgc2hhcmUgdGhlIHNhbWUgcGNpIGlkLiAgQ29uc2VxdWVudGx5LApAQCAtNjM3NSw5ICs2NTUyLDkgQEAKIAogCQkvKiBEb24ndCBkbyB0aGlzIGlmIHRoZSBib2FyZCB3YXMgc3BlY2lmaWNhbGx5IHNlbGVjdGVkIHdpdGggYW4KIAkJICogaW5zbW9kIG9wdGlvbiBvciBpZiB3ZSBoYXZlIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gVDIwMCovCi0JCWlmKCFkZXYtPmF1dG9kZXRlY3RlZCB8fCAoZGV2LT5lZWRhdGFbMHg0MV0gPT0gMHhkMCkpCisJCWlmICghZGV2LT5hdXRvZGV0ZWN0ZWQgfHwgKGRldi0+ZWVkYXRhWzB4NDFdID09IDB4ZDApKQogCQkJYnJlYWs7Ci0JCWlmKGRldi0+ZWVkYXRhWzB4NDFdID09IDB4MDIpIHsKKwkJaWYgKGRldi0+ZWVkYXRhWzB4NDFdID09IDB4MDIpIHsKIAkJCS8qIFJlY29uZmlndXJlIGJvYXJkICBhcyBUMjAwQSAqLwogCQkJZGV2LT5ib2FyZCA9IFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMjAwQTsKIAkJCWRldi0+dHVuZXJfdHlwZSAgID0gc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udHVuZXJfdHlwZTsKQEAgLTYzOTAsNiArNjU2Nyw1OCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FEU19JTlNUQU5UX0hEVFZfUENJOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9LV09STERfQVRTQzExMDoKKwl7CisJCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSAweDBhLCAuZmxhZ3MgPSAwIH07CisJCWludCBpOworCQlzdGF0aWMgdTggYnVmZmVyW11bMl0gPSB7CisJCQl7IDB4MTAsIDB4MTIgfSwKKwkJCXsgMHgxMywgMHgwNCB9LAorCQkJeyAweDE2LCAweDAwIH0sCisJCQl7IDB4MTQsIDB4MDQgfSwKKwkJCXsgMHgxNywgMHgwMCB9LAorCQl9OworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ1ZmZlcik7IGkrKykgeworCQkJbXNnLmJ1ZiA9ICZidWZmZXJbaV1bMF07CisJCQltc2cubGVuID0gQVJSQVlfU0laRShidWZmZXJbMF0pOworCQkJaWYgKGkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSkKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgICAgICIlczogVW5hYmxlIHRvIGVuYWJsZSB0dW5lciglaSkuXG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsIGkpOworCQl9CisJCWJyZWFrOworCX0KKwl9IC8qIHN3aXRjaCgpICovCisKKwkvKiBpbml0aWFsaXplIHR1bmVyICovCisJaWYgKFRVTkVSX0FCU0VOVCAhPSBkZXYtPnR1bmVyX3R5cGUpIHsKKwkJaW50IGhhc19kZW1vZCA9IChkZXYtPnRkYTk4ODdfY29uZiAmIFREQTk4ODdfUFJFU0VOVCk7CisKKwkJLyogTm90ZTogcmFkaW8gdHVuZXIgYWRkcmVzcyBpcyBhbHdheXMgZmlsbGVkIGluLAorCQkgICBzbyB3ZSBkbyBub3QgbmVlZCB0byBwcm9iZSBmb3IgYSByYWRpbyB0dW5lciBkZXZpY2UuICovCisJCWlmIChkZXYtPnJhZGlvX3R5cGUgIT0gVU5TRVQpCisJCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPmkyY19hZGFwLAorCQkJCSJ0dW5lciIsICJ0dW5lciIsIGRldi0+cmFkaW9fYWRkcik7CisJCWlmIChoYXNfZGVtb2QpCisJCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmZGV2LT5pMmNfYWRhcCwgInR1bmVyIiwKKwkJCQkidHVuZXIiLCB2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19ERU1PRCkpOworCQlpZiAoZGV2LT50dW5lcl9hZGRyID09IEFERFJfVU5TRVQpIHsKKwkJCWVudW0gdjRsMl9pMmNfdHVuZXJfdHlwZSB0eXBlID0KKwkJCQloYXNfZGVtb2QgPyBBRERSU19UVl9XSVRIX0RFTU9EIDogQUREUlNfVFY7CisKKwkJCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZkZXYtPmkyY19hZGFwLCAidHVuZXIiLAorCQkJCSJ0dW5lciIsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKHR5cGUpKTsKKwkJfSBlbHNlIHsKKwkJCXY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+aTJjX2FkYXAsCisJCQkJInR1bmVyIiwgInR1bmVyIiwgZGV2LT50dW5lcl9hZGRyKTsKKwkJfQorCX0KKworCXNhYTcxMzRfdHVuZXJfc2V0dXAoZGV2KTsKKworCXN3aXRjaCAoZGV2LT5ib2FyZCkgewogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfQ09MVU1CVVNfVFZGTToKIAl7CiAJCXN0cnVjdCB2NGwyX3ByaXZfdHVuX2NvbmZpZyB0ZWE1NzY3X2NmZzsKQEAgLTY0MDEsMTIgKzY2MzAsMTAgQEAKIAkJY3RsLnh0YWxfZnJlcSA9IFRFQTU3NjdfSElHSF9MT18xM01IejsKIAkJdGVhNTc2N19jZmcudHVuZXIgPSBUVU5FUl9URUE1NzY3OwogCQl0ZWE1NzY3X2NmZy5wcml2ICA9ICZjdGw7Ci0JCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFRVTkVSX1NFVF9DT05GSUcsICZ0ZWE1NzY3X2NmZyk7CisJCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBzX2NvbmZpZywgJnRlYTU3NjdfY2ZnKTsKIAkJYnJlYWs7CiAJfQogCX0gLyogc3dpdGNoKCkgKi8KIAotCXNhYTcxMzRfdHVuZXJfc2V0dXAoZGV2KTsKLQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCmluZGV4IDk5MjIxZDcuLmRhZmEwZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKQEAgLTU0LDEzICs1NCw5IEBACiBtb2R1bGVfcGFyYW0oZ3Bpb190cmFja2luZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZ3Bpb190cmFja2luZywiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFtncGlvXSIpOwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGFsc2E7CitzdGF0aWMgdW5zaWduZWQgaW50IGFsc2EgPSAxOwogbW9kdWxlX3BhcmFtKGFsc2EsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGFsc2EsImVuYWJsZSBBTFNBIERNQSBzb3VuZCBbZG1hc291bmRdIik7Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgb3NzOwotbW9kdWxlX3BhcmFtKG9zcywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Mob3NzLCJlbmFibGUgT1NTIERNQSBzb3VuZCBbZG1hc291bmRdIik7CitNT0RVTEVfUEFSTV9ERVNDKGFsc2EsImVuYWJsZS9kaXNhYmxlIEFMU0EgRE1BIHNvdW5kIFtkbWFzb3VuZF0iKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBsYXRlbmN5ID0gVU5TRVQ7CiBtb2R1bGVfcGFyYW0obGF0ZW5jeSwgaW50LCAwNDQ0KTsKQEAgLTkwLDggKzg2LDEwIEBACiBNT0RVTEVfUEFSTV9ERVNDKHR1bmVyLCAgICAidHVuZXIgdHlwZSIpOwogTU9EVUxFX1BBUk1fREVTQyhjYXJkLCAgICAgImNhcmQgdHlwZSIpOwogCi1zdGF0aWMgREVGSU5FX01VVEVYKGRldmxpc3RfbG9jayk7CitERUZJTkVfTVVURVgoc2FhNzEzNF9kZXZsaXN0X2xvY2spOworRVhQT1JUX1NZTUJPTChzYWE3MTM0X2Rldmxpc3RfbG9jayk7CiBMSVNUX0hFQUQoc2FhNzEzNF9kZXZsaXN0KTsKK0VYUE9SVF9TWU1CT0woc2FhNzEzNF9kZXZsaXN0KTsKIHN0YXRpYyBMSVNUX0hFQUQobW9wc19saXN0KTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2FhNzEzNF9kZXZjb3VudDsKIApAQCAtMTU2LDEwICsxNTQsMTAgQEAKIAkJcmVxdWVzdF9tb2R1bGUoInNhYTcxMzQtZW1wcmVzcyIpOwogCWlmIChjYXJkX2lzX2R2YihkZXYpKQogCQlyZXF1ZXN0X21vZHVsZSgic2FhNzEzNC1kdmIiKTsKLQlpZiAoYWxzYSkKLQkJcmVxdWVzdF9tb2R1bGUoInNhYTcxMzQtYWxzYSIpOwotCWlmIChvc3MpCi0JCXJlcXVlc3RfbW9kdWxlKCJzYWE3MTM0LW9zcyIpOworCWlmIChhbHNhKSB7CisJCWlmIChkZXYtPnBjaS0+ZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMwKQorCQkJcmVxdWVzdF9tb2R1bGUoInNhYTcxMzQtYWxzYSIpOworCX0KIH0KIAogc3RhdGljIHZvaWQgcmVxdWVzdF9zdWJtb2R1bGVzKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQpAQCAtNzc4LDcgKzc3Niw3IEBACiAJCXJldHVybiBOVUxMOwogCSp2ZmQgPSAqdGVtcGxhdGU7CiAJdmZkLT5taW5vciAgID0gLTE7Ci0JdmZkLT5wYXJlbnQgID0gJmRldi0+cGNpLT5kZXY7CisJdmZkLT52NGwyX2RldiAgPSAmZGV2LT52NGwyX2RldjsKIAl2ZmQtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKIAl2ZmQtPmRlYnVnICAgPSB2aWRlb19kZWJ1ZzsKIAlzbnByaW50Zih2ZmQtPm5hbWUsIHNpemVvZih2ZmQtPm5hbWUpLCAiJXMgJXMgKCVzKSIsCkBAIC04NTEsNiArODQ5LDEwIEBACiAJaWYgKE5VTEwgPT0gZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWVyciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwY2lfZGV2LT5kZXYsICZkZXYtPnY0bDJfZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWwwOworCiAJLyogcGNpIGluaXQgKi8KIAlkZXYtPnBjaSA9IHBjaV9kZXY7CiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpKSB7CkBAIC05MjcsNiArOTI5LDggQEAKIAlkZXYtPmF1dG9kZXRlY3RlZCA9IGNhcmRbZGV2LT5ucl0gIT0gZGV2LT5ib2FyZDsKIAlkZXYtPnR1bmVyX3R5cGUgPSBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS50dW5lcl90eXBlOwogCWRldi0+dHVuZXJfYWRkciA9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnR1bmVyX2FkZHI7CisJZGV2LT5yYWRpb190eXBlID0gc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0ucmFkaW9fdHlwZTsKKwlkZXYtPnJhZGlvX2FkZHIgPSBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5yYWRpb19hZGRyOwogCWRldi0+dGRhOTg4N19jb25mID0gc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udGRhOTg4N19jb25mOwogCWlmIChVTlNFVCAhPSB0dW5lcltkZXYtPm5yXSkKIAkJZGV2LT50dW5lcl90eXBlID0gdHVuZXJbZGV2LT5ucl07CkBAIC05NzEsMjMgKzk3NSw0OCBAQAogCS8qIHdhaXQgYSBiaXQsIHJlZ2lzdGVyIGkyYyBidXMgKi8KIAltc2xlZXAoMTAwKTsKIAlzYWE3MTM0X2kyY19yZWdpc3RlcihkZXYpOwotCi0JLyogaW5pdGlhbGl6ZSBoYXJkd2FyZSAjMiAqLwotCWlmIChUVU5FUl9BQlNFTlQgIT0gZGV2LT50dW5lcl90eXBlKQotCQlyZXF1ZXN0X21vZHVsZSgidHVuZXIiKTsKIAlzYWE3MTM0X2JvYXJkX2luaXQyKGRldik7CiAKIAlzYWE3MTM0X2h3aW5pdDIoZGV2KTsKIAogCS8qIGxvYWQgaTJjIGhlbHBlcnMgKi8KIAlpZiAoY2FyZF9pc19lbXByZXNzKGRldikpIHsKLQkJcmVxdWVzdF9tb2R1bGUoInNhYTY3NTJocyIpOworCQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0KKwkJCXY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+aTJjX2FkYXAsCisJCQkJInNhYTY3NTJocyIsICJzYWE2NzUyaHMiLAorCQkJCXNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLmVtcHJlc3NfYWRkcik7CisKKwkJaWYgKHNkKQorCQkJc2QtPmdycF9pZCA9IEdSUF9FTVBSRVNTOworCX0KKworCWlmIChzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5yZHNfYWRkcikgeworCQl1bnNpZ25lZCBzaG9ydCBhZGRyc1syXSA9IHsgMCwgSTJDX0NMSUVOVF9FTkQgfTsKKwkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKworCQlhZGRyc1swXSA9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnJkc19hZGRyOworCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZkZXYtPmkyY19hZGFwLCAic2FhNjU4OCIsCisJCQkgICAgInNhYTY1ODgiLCBhZGRycyk7CisJCWlmIChzZCkKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBmb3VuZCBSRFMgZGVjb2RlclxuIiwgZGV2LT5uYW1lKTsKIAl9CiAKIAlyZXF1ZXN0X3N1Ym1vZHVsZXMoZGV2KTsKIAogCXY0bDJfcHJpb19pbml0KCZkZXYtPnByaW8pOwogCisJbXV0ZXhfbG9jaygmc2FhNzEzNF9kZXZsaXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkobW9wcywgJm1vcHNfbGlzdCwgbmV4dCkKKwkJbXBlZ19vcHNfYXR0YWNoKG1vcHMsIGRldik7CisJbGlzdF9hZGRfdGFpbCgmZGV2LT5kZXZsaXN0LCAmc2FhNzEzNF9kZXZsaXN0KTsKKwltdXRleF91bmxvY2soJnNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKKworCS8qIGNoZWNrIGZvciBzaWduYWwgKi8KKwlzYWE3MTM0X2lycV92aWRlb19zaWduYWxjaGFuZ2UoZGV2KTsKKworCWlmIChUVU5FUl9BQlNFTlQgIT0gZGV2LT50dW5lcl90eXBlKQorCQlzYWFfY2FsbF9hbGwoZGV2LCBjb3JlLCBzX3N0YW5kYnksIDApOworCiAJLyogcmVnaXN0ZXIgdjRsIGRldmljZXMgKi8KIAlpZiAoc2FhNzEzNF9ub19vdmVybGF5ID4gMCkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE92ZXJsYXkgc3VwcG9ydCBkaXNhYmxlZC5cbiIsIGRldi0+bmFtZSk7CkBAIC0xMDIzLDI0ICsxMDUyLDEwIEBACiAJfQogCiAJLyogZXZlcnl0aGluZyB3b3JrZWQgKi8KLQlwY2lfc2V0X2RydmRhdGEocGNpX2RldixkZXYpOwogCXNhYTcxMzRfZGV2Y291bnQrKzsKIAotCW11dGV4X2xvY2soJmRldmxpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShtb3BzLCAmbW9wc19saXN0LCBuZXh0KQotCQltcGVnX29wc19hdHRhY2gobW9wcywgZGV2KTsKLQlsaXN0X2FkZF90YWlsKCZkZXYtPmRldmxpc3QsJnNhYTcxMzRfZGV2bGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXZsaXN0X2xvY2spOwotCi0JLyogY2hlY2sgZm9yIHNpZ25hbCAqLwotCXNhYTcxMzRfaXJxX3ZpZGVvX3NpZ25hbGNoYW5nZShkZXYpOwotCi0JaWYgKHNhYTcxMzRfZG1hc291bmRfaW5pdCAmJiAhZGV2LT5kbWFzb3VuZC5wcml2X2RhdGEpIHsKKwlpZiAoc2FhNzEzNF9kbWFzb3VuZF9pbml0ICYmICFkZXYtPmRtYXNvdW5kLnByaXZfZGF0YSkKIAkJc2FhNzEzNF9kbWFzb3VuZF9pbml0KGRldik7Ci0JfQotCi0JaWYgKFRVTkVSX0FCU0VOVCAhPSBkZXYtPnR1bmVyX3R5cGUpCi0JCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKIAogCXJldHVybiAwOwogCkBAIC0xMDU1LDEzICsxMDcwLDE2IEBACiAJcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LDApLAogCQkJICAgcGNpX3Jlc291cmNlX2xlbihwY2lfZGV2LDApKTsKICBmYWlsMToKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKKyBmYWlsMDoKIAlrZnJlZShkZXYpOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzYWE3MTM0X2ZpbmlkZXYoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7Ci0Jc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IHNhYTcxMzRfZGV2LCB2NGwyX2Rldik7CiAJc3RydWN0IHNhYTcxMzRfbXBlZ19vcHMgKm1vcHM7CiAKIAkvKiBSZWxlYXNlIERNQSBzb3VuZCBtb2R1bGVzIGlmIHByZXNlbnQgKi8KQEAgLTEwODgsMTEgKzExMDYsMTEgQEAKIAlzYWE3MTM0X2h3ZmluaShkZXYpOwogCiAJLyogdW5yZWdpc3RlciAqLwotCW11dGV4X2xvY2soJmRldmxpc3RfbG9jayk7CisJbXV0ZXhfbG9jaygmc2FhNzEzNF9kZXZsaXN0X2xvY2spOwogCWxpc3RfZGVsKCZkZXYtPmRldmxpc3QpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobW9wcywgJm1vcHNfbGlzdCwgbmV4dCkKIAkJbXBlZ19vcHNfZGV0YWNoKG1vcHMsIGRldik7Ci0JbXV0ZXhfdW5sb2NrKCZkZXZsaXN0X2xvY2spOworCW11dGV4X3VubG9jaygmc2FhNzEzNF9kZXZsaXN0X2xvY2spOwogCXNhYTcxMzRfZGV2Y291bnQtLTsKIAogCXNhYTcxMzRfaTJjX3VucmVnaXN0ZXIoZGV2KTsKQEAgLTExMTMsNyArMTEzMSw4IEBACiAJcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LDApLAogCQkJICAgcGNpX3Jlc291cmNlX2xlbihwY2lfZGV2LDApKTsKIAotCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCBOVUxMKTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOwogCiAJLyogZnJlZSBtZW1vcnkgKi8KIAlrZnJlZShkZXYpOwpAQCAtMTE0OCw4ICsxMTY3LDggQEAKIAogc3RhdGljIGludCBzYWE3MTM0X3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0KLQlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3Qgc2FhNzEzNF9kZXYsIHY0bDJfZGV2KTsKIAogCS8qIGRpc2FibGUgb3ZlcmxheSAtIGFwcHMgc2hvdWxkIGVuYWJsZSBpdCBleHBsaWNpdGx5IG9uIHJlc3VtZSovCiAJZGV2LT5vdmVuYWJsZSA9IDA7CkBAIC0xMTg1LDcgKzEyMDQsOCBAQAogCiBzdGF0aWMgaW50IHNhYTcxMzRfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogewotCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBzYWE3MTM0X2RldiwgdjRsMl9kZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaV9kZXYsIFBDSV9EMCk7CkBAIC0xMjQ3LDExICsxMjY3LDExIEBACiB7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXY7CiAKLQltdXRleF9sb2NrKCZkZXZsaXN0X2xvY2spOworCW11dGV4X2xvY2soJnNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnNhYTcxMzRfZGV2bGlzdCwgZGV2bGlzdCkKIAkJbXBlZ19vcHNfYXR0YWNoKG9wcywgZGV2KTsKIAlsaXN0X2FkZF90YWlsKCZvcHMtPm5leHQsJm1vcHNfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXZsaXN0X2xvY2spOworCW11dGV4X3VubG9jaygmc2FhNzEzNF9kZXZsaXN0X2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xMjU5LDExICsxMjc5LDExIEBACiB7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXY7CiAKLQltdXRleF9sb2NrKCZkZXZsaXN0X2xvY2spOworCW11dGV4X2xvY2soJnNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKIAlsaXN0X2RlbCgmb3BzLT5uZXh0KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnNhYTcxMzRfZGV2bGlzdCwgZGV2bGlzdCkKIAkJbXBlZ19vcHNfZGV0YWNoKG9wcywgZGV2KTsKLQltdXRleF91bmxvY2soJmRldmxpc3RfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZzYWE3MTM0X2Rldmxpc3RfbG9jayk7CiB9CiAKIEVYUE9SVF9TWU1CT0woc2FhNzEzNF90c19yZWdpc3Rlcik7CkBAIC0xMzA3LDggKzEzMjcsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogRVhQT1JUX1NZTUJPTChzYWE3MTM0X3NldF9ncGlvKTsKLUVYUE9SVF9TWU1CT0woc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKTsKLUVYUE9SVF9TWU1CT0woc2FhNzEzNF9kZXZsaXN0KTsKIEVYUE9SVF9TWU1CT0woc2FhNzEzNF9ib2FyZHMpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLSBmb3IgdGhlIERNQSBzb3VuZCBtb2R1bGVzIC0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwppbmRleCBiNTM3MGIzLi40ZWZmMWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwpAQCAtNDgsOSArNDgsMTUgQEAKICNpbmNsdWRlICJpc2w2NDA1LmgiCiAjaW5jbHVkZSAibG5icDIxLmgiCiAjaW5jbHVkZSAidHVuZXItc2ltcGxlLmgiCisjaW5jbHVkZSAidGRhMTgyNzEuaCIKKyNpbmNsdWRlICJsZ2R0MzMwNS5oIgorI2luY2x1ZGUgInRkYTgyOTAuaCIKIAogI2luY2x1ZGUgInpsMTAzNTMuaCIKIAorI2luY2x1ZGUgInpsMTAwMzYuaCIKKyNpbmNsdWRlICJtdDMxMi5oIgorCiBNT0RVTEVfQVVUSE9SKCJHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+IFtTdVNFIExhYnNdIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKQEAgLTE4OSw3ICsxOTUsNyBAQAogCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CiAJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKLQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LFZJRElPQ19TX0ZSRVFVRU5DWSwmZik7CisJc2FhX2NhbGxfYWxsKGRldiwgdHVuZXIsIHNfZnJlcXVlbmN5LCAmZik7CiAJbXNnLmJ1ZiA9IG9uOwogCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CkBAIC05NTAsNiArOTU2LDQ1IEBACiAJLmRlbW9kX2FkZHJlc3MgICAgPSAweDBhLAogfTsKIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgbXQzMTJfY29uZmlnIGF2ZXJ0dl9hNzAwX210MzEyID0geworCS5kZW1vZF9hZGRyZXNzID0gMHgwZSwKKwkudm9sdGFnZV9pbnZlcnRlZCA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHpsMTAwMzZfY29uZmlnIGF2ZXJ0dl9hNzAwX3R1bmVyID0geworCS50dW5lcl9hZGRyZXNzID0gMHg2MCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbGdkdDMzMDVfY29uZmlnIGhjd19sZ2R0MzMwNV9jb25maWcgPSB7CisJLmkyY19hZGRyICAgICAgICAgICA9IDB4MGUsCisJLm1wZWdfbW9kZSAgICAgICAgICA9IExHRFQzMzA1X01QRUdfU0VSSUFMLAorCS50cGNsa19lZGdlICAgICAgICAgPSBMR0RUMzMwNV9UUENMS19SSVNJTkdfRURHRSwKKwkudHB2YWxpZF9wb2xhcml0eSAgID0gTEdEVDMzMDVfVFBfVkFMSURfSElHSCwKKwkuZGVueV9pMmNfcnB0ciAgICAgID0gMSwKKwkuc3BlY3RyYWxfaW52ZXJzaW9uID0gMSwKKwkucWFtX2lmX2toeiAgICAgICAgID0gNDAwMCwKKwkudnNiX2lmX2toeiAgICAgICAgID0gMzI1MCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGRhMTgyNzFfc3RkX21hcCBoYXVwcGF1Z2VfdGRhMTgyNzFfc3RkX21hcCA9IHsKKwkuYXRzY182ICAgPSB7IC5pZl9mcmVxID0gMzI1MCwgLmFnY19tb2RlID0gMywgLnN0ZCA9IDQsCisJCSAgICAgIC5pZl9sdmwgPSAxLCAucmZhZ2NfdG9wID0gMHg1OCwgfSwKKwkucWFtXzYgICAgPSB7IC5pZl9mcmVxID0gNDAwMCwgLmFnY19tb2RlID0gMywgLnN0ZCA9IDUsCisJCSAgICAgIC5pZl9sdmwgPSAxLCAucmZhZ2NfdG9wID0gMHg1OCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGRhMTgyNzFfY29uZmlnIGhjd190ZGExODI3MV9jb25maWcgPSB7CisJLnN0ZF9tYXAgPSAmaGF1cHBhdWdlX3RkYTE4MjcxX3N0ZF9tYXAsCisJLmdhdGUgICAgPSBUREExODI3MV9HQVRFX0FOQUxPRywKKwkuY29uZmlnICA9IDMsCit9OworCitzdGF0aWMgc3RydWN0IHRkYTgyOXhfY29uZmlnIHRkYTgyOXhfbm9fcHJvYmUgPSB7CisJLnByb2JlX3R1bmVyID0gVERBODI5WF9ET05UX1BST0JFLAorfTsKKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBDb3JlIGNvZGUKICAqLwpAQCAtMTA3Niw2ICsxMTIxLDE5IEBACiAJCQkJCSAmdGRhODI3eF9jZmdfMSkgPCAwKQogCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMjA6CisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChsZ2R0MzMwNV9hdHRhY2gsCisJCQkJCSAgICAgICAmaGN3X2xnZHQzMzA1X2NvbmZpZywKKwkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlkdmJfYXR0YWNoKHRkYTgyOXhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkgICAmZGV2LT5pMmNfYWRhcCwgMHg0YiwKKwkJCQkgICAmdGRhODI5eF9ub19wcm9iZSk7CisJCQlkdmJfYXR0YWNoKHRkYTE4MjcxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJICAgMHg2MCwgJmRldi0+aTJjX2FkYXAsCisJCQkJICAgJmhjd190ZGExODI3MV9jb25maWcpOworCQl9CisJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1A3MTMxX0RVQUw6CiAJCWlmIChjb25maWd1cmVfdGRhODI3eF9mZShkZXYsICZhc3VzX3A3MTMxX2R1YWxfY29uZmlnLAogCQkJCQkgJnRkYTgyN3hfY2ZnXzApIDwgMCkKQEAgLTEzNzYsNiArMTQzNCwxOSBAQAogCQkJCSAgIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMyk7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BNzAwX1BSTzoKKwljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0E3MDBfSFlCUklEOgorCQkvKiBaYXJsaW5rIFpMMTAzMTMgKi8KKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzEyX2F0dGFjaCwKKwkJCSZhdmVydHZfYTcwMF9tdDMxMiwgJmRldi0+aTJjX2FkYXApOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWlmIChkdmJfYXR0YWNoKHpsMTAwMzZfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkJJmF2ZXJ0dl9hNzAwX3R1bmVyLCAmZGV2LT5pMmNfYWRhcCkgPT0gTlVMTCkgeworCQkJCXdwcmludGsoIiVzOiBObyB6bDEwMDM2IGZvdW5kIVxuIiwKKwkJCQkJX19mdW5jX18pOworCQkJfQorCQl9CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXdwcmludGsoIkh1aD8gdW5rbm93biBEVkIgY2FyZD9cbiIpOwogCQlicmVhazsKQEAgLTE0NDksNyArMTUyMCw3IEBACiAJCXRkYTk4ODdfY2ZnLnByaXYgID0gJm9uOwogCiAJCS8qIG90aGVyd2lzZSB3ZSBkb24ndCBkZXRlY3QgdGhlIHR1bmVyIG9uIG5leHQgaW5zbW9kICovCi0JCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFRVTkVSX1NFVF9DT05GSUcsICZ0ZGE5ODg3X2NmZyk7CisJCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBzX2NvbmZpZywgJnRkYTk4ODdfY2ZnKTsKIAl9IGVsc2UgaWYgKGRldi0+Ym9hcmQgPT0gU0FBNzEzNF9CT0FSRF9NRURJT05fTUQ4ODAwX1FVQURSTykgewogCQlpZiAoKGRldi0+ZWVkYXRhWzJdID09IDB4MDcpICYmIHVzZV9mcm9udGVuZCkgewogCQkJLyogdHVybiBvZmYgdGhlIDJuZCBsbmIgc3VwcGx5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKaW5kZXggYzlkOGJlYi4uOWRiMzQ3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYwpAQCAtNzYsNyArNzYsNyBAQAogCQlicmVhazsKIAl9CiAJdHNfcmVzZXRfZW5jb2RlcihkZXYpOwotCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19JTlRfSU5JVCwgJmxlYWRpbmdfbnVsbF9ieXRlcyk7CisJc2FhX2NhbGxfYWxsKGRldiwgY29yZSwgaW5pdCwgbGVhZGluZ19udWxsX2J5dGVzKTsKIAlkZXYtPmVtcHJlc3Nfc3RhcnRlZCA9IDE7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMzQsNyArMjM0LDcgQEAKIHsKIAlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19HX0ZNVCwgZik7CisJc2FhX2NhbGxfYWxsKGRldiwgdmlkZW8sIGdfZm10LCBmKTsKIAogCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgID0gVjRMMl9QSVhfRk1UX01QRUc7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPSBUU19QQUNLRVRfU0laRSAqIGRldi0+dHMubnJfcGFja2V0czsKQEAgLTI0Nyw3ICsyNDcsNyBAQAogewogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0Jc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfRk1ULCBmKTsKKwlzYWFfY2FsbF9hbGwoZGV2LCB2aWRlbywgc19mbXQsIGYpOwogCiAJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKIAlmLT5mbXQucGl4LnNpemVpbWFnZSAgICA9IFRTX1BBQ0tFVF9TSVpFICogZGV2LT50cy5ucl9wYWNrZXRzOwpAQCAtMzE3LDcgKzMxNyw3IEBACiAJaWYgKGN0cmxzLT5jdHJsX2NsYXNzICE9IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWVyciA9IHNhYTcxMzRfaTJjX2NhbGxfc2FhNjc1MihkZXYsIFZJRElPQ19TX0VYVF9DVFJMUywgY3RybHMpOworCWVyciA9IHNhYV9jYWxsX2VtcHJlc3MoZGV2LCBjb3JlLCBzX2V4dF9jdHJscywgY3RybHMpOwogCXRzX2luaXRfZW5jb2RlcihkZXYpOwogCiAJcmV0dXJuIGVycjsKQEAgLTMzMCw3ICszMzAsNyBAQAogCiAJaWYgKGN0cmxzLT5jdHJsX2NsYXNzICE9IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKGRldiwgVklESU9DX0dfRVhUX0NUUkxTLCBjdHJscyk7CisJcmV0dXJuIHNhYV9jYWxsX2VtcHJlc3MoZGV2LCBjb3JlLCBnX2V4dF9jdHJscywgY3RybHMpOwogfQogCiBzdGF0aWMgaW50IGVtcHJlc3NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LApAQCAtMzUyLDYgKzM1Miw3IEBACiBzdGF0aWMgaW50IGVtcHJlc3NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmMpCiB7CisJLyogTXVzdCBiZSBzb3J0ZWQgZnJvbSBsb3cgdG8gaGlnaCBjb250cm9sIElEISAqLwogCXN0YXRpYyBjb25zdCB1MzIgdXNlcl9jdHJsc1tdID0gewogCQlWNEwyX0NJRF9VU0VSX0NMQVNTLAogCQlWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtMzY0LDYgKzM2NSw3IEBACiAJCTAKIAl9OwogCisJLyogTXVzdCBiZSBzb3J0ZWQgZnJvbSBsb3cgdG8gaGlnaCBjb250cm9sIElEISAqLwogCXN0YXRpYyBjb25zdCB1MzIgbXBlZ19jdHJsc1tdID0gewogCQlWNEwyX0NJRF9NUEVHX0NMQVNTLAogCQlWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFLApAQCAtMzg4LDEwICszOTAsMTAgQEAKIAlpZiAoYy0+aWQgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGMtPmlkID09IFY0TDJfQ0lEX1VTRVJfQ0xBU1MgfHwgYy0+aWQgPT0gVjRMMl9DSURfTVBFR19DTEFTUykKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChjKTsKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKGMsIDAsIDAsIDAsIDApOwogCWlmIChWNEwyX0NUUkxfSUQyQ0xBU1MoYy0+aWQpICE9IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQogCQlyZXR1cm4gc2FhNzEzNF9xdWVyeWN0cmwoZmlsZSwgcHJpdiwgYyk7Ci0JcmV0dXJuIHNhYTcxMzRfaTJjX2NhbGxfc2FhNjc1MihkZXYsIFZJRElPQ19RVUVSWUNUUkwsIGMpOworCXJldHVybiBzYWFfY2FsbF9lbXByZXNzKGRldiwgY29yZSwgcXVlcnljdHJsLCBjKTsKIH0KIAogc3RhdGljIGludCBlbXByZXNzX3F1ZXJ5bWVudShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKQEAgLTQwMSw3ICs0MDMsNyBAQAogCiAJaWYgKFY0TDJfQ1RSTF9JRDJDTEFTUyhjLT5pZCkgIT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoZGV2LCBWSURJT0NfUVVFUllNRU5VLCBjKTsKKwlyZXR1cm4gc2FhX2NhbGxfZW1wcmVzcyhkZXYsIGNvcmUsIHF1ZXJ5bWVudSwgYyk7CiB9CiAKIHN0YXRpYyBpbnQgZW1wcmVzc19nX2NoaXBfaWRlbnQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLApAQCAtNDExLDE0ICs0MTMsMTEgQEAKIAogCWNoaXAtPmlkZW50ID0gVjRMMl9JREVOVF9OT05FOwogCWNoaXAtPnJldmlzaW9uID0gMDsKLQlpZiAoZGV2LT5tcGVnX2kyY19jbGllbnQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGNoaXAtPm1hdGNoLnR5cGUgPT0gVjRMMl9DSElQX01BVENIX0kyQ19EUklWRVIgJiYKIAkgICAgIXN0cmNtcChjaGlwLT5tYXRjaC5uYW1lLCAic2FhNjc1MmhzIikpCi0JCXJldHVybiBzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoZGV2LCBWSURJT0NfREJHX0dfQ0hJUF9JREVOVCwgY2hpcCk7Ci0JaWYgKGNoaXAtPm1hdGNoLnR5cGUgPT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSICYmCi0JICAgIGNoaXAtPm1hdGNoLmFkZHIgPT0gZGV2LT5tcGVnX2kyY19jbGllbnQtPmFkZHIpCi0JCXJldHVybiBzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoZGV2LCBWSURJT0NfREJHX0dfQ0hJUF9JREVOVCwgY2hpcCk7CisJCXJldHVybiBzYWFfY2FsbF9lbXByZXNzKGRldiwgY29yZSwgZ19jaGlwX2lkZW50LCBjaGlwKTsKKwlpZiAoY2hpcC0+bWF0Y2gudHlwZSA9PSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFIpCisJCXJldHVybiBzYWFfY2FsbF9lbXByZXNzKGRldiwgY29yZSwgZ19jaGlwX2lkZW50LCBjaGlwKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pMmMuYwppbmRleCAyMGMxYjMzLi5mM2UyODVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pMmMuYwpAQCAtMjU1LDcgKzI1NSw3IEBACiAJCQlhZGRyICA9IG1zZ3NbaV0uYWRkciA8PCAxOwogCQkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkKIAkJCQlhZGRyIHw9IDE7Ci0JCQlpZiAoaSA+IDAgJiYgbXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKSB7CisJCQlpZiAoaSA+IDAgJiYgbXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEICYmIG1zZ3NbaV0uYWRkciAhPSAweDQwKSB7CiAJCQkJLyogd29ya2Fyb3VuZCBmb3IgYSBzYWE3MTM0IGkyYyBidWcKIAkJCQkgKiBuZWVkZWQgdG8gdGFsayB0byB0aGUgbXQzNTIgZGVtdXgKIAkJCQkgKiB0aGFua3MgdG8gcGlubmFjbGUgZm9yIHRoZSBoaW50ICovCkBAIC0zMjcsOCArMzI3LDYgQEAKIAogCWQxcHJpbnRrKCAiJXMgaTJjIGF0dGFjaCBbYWRkcj0weCV4LGNsaWVudD0lc11cbiIsCiAJCWNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwgY2xpZW50LT5hZGRyLCBjbGllbnQtPm5hbWUpOwotCWlmIChjbGllbnQtPmFkZHIgPT0gMHgyMCAmJiBjbGllbnQtPmRyaXZlciAmJiBjbGllbnQtPmRyaXZlci0+Y29tbWFuZCkKLQkJZGV2LT5tcGVnX2kyY19jbGllbnQgPSBjbGllbnQ7CiAKIAkvKiBBbSBJIGFuIGkyYyByZW1vdGUgY29udHJvbD8gKi8KIApAQCAtMzU3LDcgKzM1NSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgc2FhNzEzNF9hZGFwX3RlbXBsYXRlID0gewogCS5vd25lciAgICAgICAgID0gVEhJU19NT0RVTEUsCi0JLmNsYXNzICAgICAgICAgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HLAogCS5uYW1lICAgICAgICAgID0gInNhYTcxMzQiLAogCS5pZCAgICAgICAgICAgID0gSTJDX0hXX1NBQTcxMzQsCiAJLmFsZ28gICAgICAgICAgPSAmc2FhNzEzNF9hbGdvLApAQCAtNDIxLDI5ICs0MTgsMTMgQEAKIAl9CiB9CiAKLXZvaWQgc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAotCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCUJVR19PTihOVUxMID09IGRldi0+aTJjX2FkYXAuYWxnb19kYXRhKTsKLQlpMmNfY2xpZW50c19jb21tYW5kKCZkZXYtPmkyY19hZGFwLCBjbWQsIGFyZyk7Ci19Ci0KLWludCBzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlpZiAoZGV2LT5tcGVnX2kyY19jbGllbnQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGRldi0+bXBlZ19pMmNfY2xpZW50LT5kcml2ZXItPmNvbW1hbmQoZGV2LT5tcGVnX2kyY19jbGllbnQsCi0JCQkJCQkJCWNtZCwgYXJnKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHNhYTcxMzRfaTJjX2NhbGxfc2FhNjc1Mik7Ci0KIGludCBzYWE3MTM0X2kyY19yZWdpc3RlcihzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKIHsKIAlkZXYtPmkyY19hZGFwID0gc2FhNzEzNF9hZGFwX3RlbXBsYXRlOwogCWRldi0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZkZXYtPnBjaS0+ZGV2OwogCXN0cmNweShkZXYtPmkyY19hZGFwLm5hbWUsZGV2LT5uYW1lKTsKIAlkZXYtPmkyY19hZGFwLmFsZ29fZGF0YSA9IGRldjsKKwlpMmNfc2V0X2FkYXBkYXRhKCZkZXYtPmkyY19hZGFwLCAmZGV2LT52NGwyX2Rldik7CiAJaTJjX2FkZF9hZGFwdGVyKCZkZXYtPmkyY19hZGFwKTsKIAogCWRldi0+aTJjX2NsaWVudCA9IHNhYTcxMzRfY2xpZW50X3RlbXBsYXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXRzLmMKaW5kZXggZWY1NWE1OS4uY2M4YjkyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jCkBAIC03OSw4ICs3OSwxOSBAQAogCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMSwgMHgwMCk7CiAKIAkJLyogU3RhcnQgVFMgc3RyZWFtICovCi0JCXNhYV93cml0ZWIoU0FBNzEzNF9UU19TRVJJQUwwLCAweDQwKTsKLQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweEVDKTsKKwkJc3dpdGNoIChzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS50c190eXBlKSB7CisJCWNhc2UgU0FBNzEzNF9NUEVHX1RTX1BBUkFMTEVMOgorCQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1NFUklBTDAsIDB4NDApOworCQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweGVjKTsKKwkJCWJyZWFrOworCQljYXNlIFNBQTcxMzRfTVBFR19UU19TRVJJQUw6CisJCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMCwgMHhkOCk7CisJCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfUEFSQUxMRUwsIDB4NmMpOworCQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMX1NFUklBTCwgMHhiYyk7CisJCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMSwgMHgwMik7CisJCQlicmVhazsKKwkJfQorCiAJCWRldi0+dHNfc3RhdGUgPSBTQUE3MTM0X1RTX1NUQVJURUQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYwppbmRleCBhMWY3ZTM1Li40MDRmNzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKQEAgLTMwLDExICszMCw3IEBACiAjaW5jbHVkZSAic2FhNzEzNC1yZWcuaCIKICNpbmNsdWRlICJzYWE3MTM0LmgiCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLQotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotLyogSW5jbHVkZSBWNEwxIHNwZWNpZmljIGZ1bmN0aW9ucy4gU2hvdWxkIGJlIHJlbW92ZWQgc29vbiAqLwotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxtZWRpYS9yZHMuaD4KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTQ1Miw2ICs0NDgsNyBAQAogCQkubmFtZSAgICAgICAgICA9ICJ5IG9mZnNldCBvZGQgZmllbGQiLAogCQkubWluaW11bSAgICAgICA9IDAsCiAJCS5tYXhpbXVtICAgICAgID0gMTI4LAorCQkuc3RlcCAgICAgICAgICA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gMCwKIAkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCX0sewpAQCAtNDU5LDYgKzQ1Niw3IEBACiAJCS5uYW1lICAgICAgICAgID0gInkgb2Zmc2V0IGV2ZW4gZmllbGQiLAogCQkubWluaW11bSAgICAgICA9IDAsCiAJCS5tYXhpbXVtICAgICAgID0gMTI4LAorCQkuc3RlcCAgICAgICAgICA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gMCwKIAkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCX0sewpAQCAtNjI3LDEwICs2MjUsMTAgQEAKIAlzYWE3MTM0X3NldF9kZWNvZGVyKGRldik7CiAKIAlpZiAoY2FyZF9pbihkZXYsIGRldi0+Y3RsX2lucHV0KS50dikKLQkJc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfU1RELCAmZGV2LT50dm5vcm0tPmlkKTsKKwkJc2FhX2NhbGxfYWxsKGRldiwgdHVuZXIsIHNfc3RkLCBkZXYtPnR2bm9ybS0+aWQpOwogCS8qIFNldCB0aGUgY29ycmVjdCBub3JtIGZvciB0aGUgc2FhNjc1MmhzLiBUaGlzIGZ1bmN0aW9uCiAJICAgZG9lcyBub3RoaW5nIGlmIHRoZXJlIGlzIG5vIHNhYTY3NTJocy4gKi8KLQlzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoZGV2LCBWSURJT0NfU19TVEQsICZkZXYtPnR2bm9ybS0+aWQpOworCXNhYV9jYWxsX2VtcHJlc3MoZGV2LCB0dW5lciwgc19zdGQsIGRldi0+dHZub3JtLT5pZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9oX3ByZXNjYWxlKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LCBpbnQgdGFzaywgaW50IHByZXNjYWxlKQpAQCAtMTI2Niw4ICsxMjY0LDcgQEAKIAkJCWVsc2UKIAkJCQlkZXYtPnRkYTk4ODdfY29uZiAmPSB+VERBOTg4N19BVVRPTVVURTsKIAotCQkJc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVFVORVJfU0VUX0NPTkZJRywKLQkJCQkJCSAmdGRhOTg4N19jZmcpOworCQkJc2FhX2NhbGxfYWxsKGRldiwgdHVuZXIsIHNfY29uZmlnLCAmdGRhOTg4N19jZmcpOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTEzMzQsNyArMTMzMSw3IEBACiAJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJaW50IHJhZGlvID0gMDsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmc2FhNzEzNF9kZXZsaXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmc2FhNzEzNF9kZXZsaXN0LCBkZXZsaXN0KSB7CiAJCWlmIChkZXYtPnZpZGVvX2RldiAmJiAoZGV2LT52aWRlb19kZXYtPm1pbm9yID09IG1pbm9yKSkKIAkJCWdvdG8gZm91bmQ7CkBAIC0xMzQ3LDE5ICsxMzQ0LDIwIEBACiAJCQlnb3RvIGZvdW5kOwogCQl9CiAJfQotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJnNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKIAlyZXR1cm4gLUVOT0RFVjsKLSBmb3VuZDoKKworZm91bmQ6CisJbXV0ZXhfdW5sb2NrKCZzYWE3MTM0X2Rldmxpc3RfbG9jayk7CiAKIAlkcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHJhZGlvPSVkIHR5cGU9JXNcbiIsbWlub3IscmFkaW8sCiAJCXY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7CiAKIAkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLwogCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSxHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBmaCkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJaWYgKE5VTEwgPT0gZmgpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KKwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwogCWZoLT5kZXYgICAgICA9IGRldjsKIAlmaC0+cmFkaW8gICAgPSByYWRpbzsKQEAgLTEzODcsMTIgKzEzODUsMTEgQEAKIAlpZiAoZmgtPnJhZGlvKSB7CiAJCS8qIHN3aXRjaCB0byByYWRpbyBtb2RlICovCiAJCXNhYTcxMzRfdHZhdWRpb19zZXRpbnB1dChkZXYsJmNhcmQoZGV2KS5yYWRpbyk7Ci0JCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsQVVEQ19TRVRfUkFESU8sIE5VTEwpOworCQlzYWFfY2FsbF9hbGwoZGV2LCB0dW5lciwgc19yYWRpbyk7CiAJfSBlbHNlIHsKIAkJLyogc3dpdGNoIHRvIHZpZGVvL3ZiaSBtb2RlICovCiAJCXZpZGVvX211eChkZXYsZGV2LT5jdGxfaW5wdXQpOwogCX0KLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0NjYsNiArMTQ2Myw3IEBACiB7CiAJc3RydWN0IHNhYTcxMzRfZmggICpmaCAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCByZHNfY29tbWFuZCBjbWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIHR1cm4gb2ZmIG92ZXJsYXkgKi8KQEAgLTE0OTgsNyArMTQ5Niw5IEBACiAJc2FhX2FuZG9yYihTQUE3MTM0X09GTVRfREFUQV9BLCAweDFmLCAwKTsKIAlzYWFfYW5kb3JiKFNBQTcxMzRfT0ZNVF9EQVRBX0IsIDB4MWYsIDApOwogCi0Jc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVFVORVJfU0VUX1NUQU5EQlksIE5VTEwpOworCXNhYV9jYWxsX2FsbChkZXYsIGNvcmUsIHNfc3RhbmRieSwgMCk7CisJaWYgKGZoLT5yYWRpbykKKwkJc2FhX2NhbGxfYWxsKGRldiwgY29yZSwgaW9jdGwsIFJEU19DTURfQ0xPU0UsICZjbWQpOwogCiAJLyogZnJlZSBzdHVmZiAqLwogCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPmNhcCk7CkBAIC0xNTE5LDYgKzE1MTksMzcgQEAKIAlyZXR1cm4gdmlkZW9idWZfbW1hcF9tYXBwZXIoc2FhNzEzNF9xdWV1ZShmaCksIHZtYSk7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHJhZGlvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpkYXRhLAorCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBzYWE3MTM0X2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IHJkc19jb21tYW5kIGNtZDsKKworCWNtZC5ibG9ja19jb3VudCA9IGNvdW50LzM7CisJY21kLmJ1ZmZlciA9IGRhdGE7CisJY21kLmluc3RhbmNlID0gZmlsZTsKKwljbWQucmVzdWx0ID0gLUVOT0RFVjsKKworCXNhYV9jYWxsX2FsbChkZXYsIGNvcmUsIGlvY3RsLCBSRFNfQ01EX1JFQUQsICZjbWQpOworCisJcmV0dXJuIGNtZC5yZXN1bHQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmFkaW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCByZHNfY29tbWFuZCBjbWQ7CisKKwljbWQuaW5zdGFuY2UgPSBmaWxlOworCWNtZC5ldmVudF9saXN0ID0gd2FpdDsKKwljbWQucmVzdWx0ID0gLUVOT0RFVjsKKwlzYWFfY2FsbF9hbGwoZGV2LCBjb3JlLCBpb2N0bCwgUkRTX0NNRF9QT0xMLCAmY21kKTsKKworCXJldHVybiBjbWQucmVzdWx0OworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBzYWE3MTM0X3RyeV9nZXRfc2V0X2ZtdF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LApAQCAtMjA0MSw3ICsyMDcyLDcgQEAKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCWRldi0+Y3RsX2ZyZXEgPSBmLT5mcmVxdWVuY3k7CiAKLQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfU19GUkVRVUVOQ1ksIGYpOworCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgZik7CiAKIAlzYWE3MTM0X3R2YXVkaW9fZG9fc2NhbihkZXYpOwogCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKQEAgLTIyOTksNyArMjMzMCw3IEBACiAJc3RyY3B5KHQtPm5hbWUsICJSYWRpbyIpOwogCXQtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCi0Jc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX0dfVFVORVIsIHQpOworCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBnX3R1bmVyLCB0KTsKIAlpZiAoZGV2LT5pbnB1dC0+YW11eCA9PSBUVikgewogCQl0LT5zaWduYWwgPSAweGY4MDAgLSAoKHNhYV9yZWFkYigweDU4MSkgJiAweDFmKSA8PCAxMSk7CiAJCXQtPnJ4c3ViY2hhbnMgPSAoc2FhX3JlYWRiKDB4NTI5KSAmIDB4MDgpID8KQEAgLTIzMTYsNyArMjM0Nyw3IEBACiAJaWYgKDAgIT0gdC0+aW5kZXgpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfVFVORVIsIHQpOworCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBzX3R1bmVyLCB0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ0Myw4ICsyNDc0LDEwIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHJhZGlvX2ZvcHMgPSB7CiAJLm93bmVyCSAgPSBUSElTX01PRFVMRSwKIAkub3BlbgkgID0gdmlkZW9fb3BlbiwKKwkucmVhZCAgICAgPSByYWRpb19yZWFkLAogCS5yZWxlYXNlICA9IHZpZGVvX3JlbGVhc2UsCiAJLmlvY3RsCSAgPSB2aWRlb19pb2N0bDIsCisJLnBvbGwgICAgID0gcmFkaW9fcG9sbCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgcmFkaW9faW9jdGxfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKaW5kZXggMTRlZTI2NS4uYTJkZDMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCkBAIC0zNSw2ICszNSw3IEBACiAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvaXItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvaXIta2JkLWkyYy5oPgpAQCAtMjc3LDYgKzI3OCw4IEBACiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19USUdFUiAgICAgICAgIDE1MgogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9QTFVTX1RWX0FOQUxPRyAxNTMKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfR09fMDA3X0ZNX1BMVVMgMTU0CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMjAgICAgIDE1NQorI2RlZmluZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTEwUjMgICAxNTYKIAogI2RlZmluZSBTQUE3MTM0X01BWEJPQVJEUyAzMgogI2RlZmluZSBTQUE3MTM0X0lOUFVUX01BWCA4CkBAIC0zMDksNiArMzEyLDExIEBACiAJU0FBNzEzNF9NUEVHX0RWQiwKIH07CiAKK2VudW0gc2FhNzEzNF9tcGVnX3RzX3R5cGUgeworCVNBQTcxMzRfTVBFR19UU19QQVJBTExFTCA9IDAsCisJU0FBNzEzNF9NUEVHX1RTX1NFUklBTCwKK307CisKIHN0cnVjdCBzYWE3MTM0X2JvYXJkIHsKIAljaGFyICAgICAgICAgICAgICAgICAgICAqbmFtZTsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICBhdWRpb19jbG9jazsKQEAgLTMyNCw2ICszMzIsOCBAQAogCXVuc2lnbmVkIGludAkJcmFkaW9fdHlwZTsKIAl1bnNpZ25lZCBjaGFyCQl0dW5lcl9hZGRyOwogCXVuc2lnbmVkIGNoYXIJCXJhZGlvX2FkZHI7CisJdW5zaWduZWQgY2hhcgkJZW1wcmVzc19hZGRyOworCXVuc2lnbmVkIGNoYXIJCXJkc19hZGRyOwogCiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgdGRhOTg4N19jb25mOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgIHR1bmVyX2NvbmZpZzsKQEAgLTMzMSw2ICszNDEsNyBAQAogCS8qIHBlcmlwaGVyYWwgSS9PICovCiAJZW51bSBzYWE3MTM0X3ZpZGVvX291dCAgdmlkZW9fb3V0OwogCWVudW0gc2FhNzEzNF9tcGVnX3R5cGUgIG1wZWc7CisJZW51bSBzYWE3MTM0X21wZWdfdHNfdHlwZSB0c190eXBlOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgIHZpZF9wb3J0X29wdHM7CiB9OwogCkBAIC00NDUsNyArNDU2LDYgQEAKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICBidWZzaXplOwogCXN0cnVjdCBzYWE3MTM0X3BndGFibGUgICAgIHB0OwogCXN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgICAgIGRtYTsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICAgICB3cTsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICBkbWFfYmxrOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgIHJlYWRfb2Zmc2V0OwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgIHJlYWRfY291bnQ7CkBAIC00ODIsNiArNDkyLDcgQEAKIAlzdHJ1Y3QgbXV0ZXggICAgICAgICAgICAgICBsb2NrOwogCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgIHNsb2NrOwogCXN0cnVjdCB2NGwyX3ByaW9fc3RhdGUgICAgIHByaW87CisJc3RydWN0IHY0bDJfZGV2aWNlICAgICAgICAgdjRsMl9kZXY7CiAJLyogd29ya3N0cnVjdCBmb3IgbG9hZGluZyBtb2R1bGVzICovCiAJc3RydWN0IHdvcmtfc3RydWN0IHJlcXVlc3RfbW9kdWxlX3drOwogCkBAIC01NzIsNyArNTgzLDYgQEAKIAllbnVtIHNhYTcxMzRfdHNfc3RhdHVzIAkgICB0c19zdGF0ZTsKIAl1bnNpZ25lZCBpbnQgCQkgICBidWZmX2NudDsKIAlzdHJ1Y3Qgc2FhNzEzNF9tcGVnX29wcyAgICAqbW9wczsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAJICAgKm1wZWdfaTJjX2NsaWVudDsKIAogCS8qIFNBQTcxMzRfTVBFR19FTVBSRVNTIG9ubHkgKi8KIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICAgICAgICAqZW1wcmVzc19kZXY7CkBAIC01ODgsNiArNTk4LDcgQEAKIAlpbnQgKCpvcmlnaW5hbF9zZXRfdm9sdGFnZSkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSk7CiAJaW50ICgqb3JpZ2luYWxfc2V0X2hpZ2hfdm9sdGFnZSkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGxvbmcgYXJnKTsKICNlbmRpZgorCXZvaWQgKCpnYXRlX2N0cmwpKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LCBpbnQgb3Blbik7CiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNjE2LDEwICs2MjcsMzEgQEAKIAkJVjRMMl9TVERfTlRTQyAgIHwgVjRMMl9TVERfUEFMX00gfCBcCiAJCVY0TDJfU1REX1BBTF82MCkKIAorI2RlZmluZSBHUlBfRU1QUkVTUyAoMSkKKyNkZWZpbmUgc2FhX2NhbGxfYWxsKGRldiwgbywgZiwgYXJncy4uLikgZG8gewkJCQlcCisJaWYgKGRldi0+Z2F0ZV9jdHJsKQkJCQkJCVwKKwkJZGV2LT5nYXRlX2N0cmwoZGV2LCAxKTsJCQkJCVwKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmKGRldiktPnY0bDJfZGV2LCAwLCBvLCBmICwgIyNhcmdzKTsJXAorCWlmIChkZXYtPmdhdGVfY3RybCkJCQkJCQlcCisJCWRldi0+Z2F0ZV9jdHJsKGRldiwgMCk7CQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHNhYV9jYWxsX2VtcHJlc3MoZGV2LCBvLCBmLCBhcmdzLi4uKSAoewkJCQlcCisJbG9uZyBfcmM7CQkJCQkJCVwKKwlpZiAoZGV2LT5nYXRlX2N0cmwpCQkJCQkJXAorCQlkZXYtPmdhdGVfY3RybChkZXYsIDEpOwkJCQkJXAorCV9yYyA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKCYoZGV2KS0+djRsMl9kZXYsCQlcCisJCQkJCSBHUlBfRU1QUkVTUywgbywgZiAsICMjYXJncyk7CVwKKwlpZiAoZGV2LT5nYXRlX2N0cmwpCQkJCQkJXAorCQlkZXYtPmdhdGVfY3RybChkZXYsIDApOwkJCQkJXAorCV9yYzsJCQkJCQkJCVwKK30pCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBzYWE3MTM0LWNvcmUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCAgc2FhNzEzNF9kZXZsaXN0OworZXh0ZXJuIHN0cnVjdCBtdXRleCBzYWE3MTM0X2Rldmxpc3RfbG9jazsKIGV4dGVybiBpbnQgc2FhNzEzNF9ub19vdmVybGF5OwogCiB2b2lkIHNhYTcxMzRfdHJhY2tfZ3BpbyhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgY2hhciAqbXNnKTsKQEAgLTY2OCwxMCArNzAwLDYgQEAKIAogaW50IHNhYTcxMzRfaTJjX3JlZ2lzdGVyKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KTsKIGludCBzYWE3MTM0X2kyY191bnJlZ2lzdGVyKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KTsKLXZvaWQgc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAotCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKLWludCBzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNDYuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE0Ni5oCmluZGV4IDI4MzBiNWUuLjlmYWRiMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE0Ni5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE0Ni5oCkBAIC0yNSw4ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotCiAjaWZuZGVmIE9fTk9OQ0FQCiAjZGVmaW5lIE9fTk9OQ0FQCU9fVFJVTkMKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTd4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxN3guYwppbmRleCA4OGM1ZTk0Li4yNWJmMjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxN3guYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxN3guYwpAQCAtOTMxLDcgKzkzMSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCWlmIChjdHJsLT52YWx1ZSA8IC0xMjcgfHwgY3RybC0+dmFsdWUgPiAxMjcpIHsKKwkJaWYgKGN0cmwtPnZhbHVlIDwgLTEyOCB8fCBjdHJsLT52YWx1ZSA+IDEyNykgewogCQkJdjRsMl9lcnIoc2QsICJpbnZhbGlkIGh1ZSBzZXR0aW5nICVkXG4iLCBjdHJsLT52YWx1ZSk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQpAQCAtMTM4MCwxMSArMTM4MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzE3eF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgc2FhNzE3eF9jb3JlX29wcyA9IHsKQEAgLTE1MjgsMTAgKzE1MjMsNyBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAic2FhNzE3eCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTcxN1gsCi0JLmNvbW1hbmQgPSBzYWE3MTd4X2NvbW1hbmQsCiAJLnByb2JlID0gc2FhNzE3eF9wcm9iZSwKIAkucmVtb3ZlID0gc2FhNzE3eF9yZW1vdmUsCi0JLmxlZ2FjeV9jbGFzcyA9IEkyQ19DTEFTU19UVl9BTkFMT0cgfCBJMkNfQ0xBU1NfVFZfRElHSVRBTCwKIAkuaWRfdGFibGUgPSBzYWE3MTd4X2lkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE4NS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTg1LmMKaW5kZXggNmRlYmI2NS4uNzU3NDdiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTg1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTg1LmMKQEAgLTMwLDUyICszMCw1OCBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTcxODUgdmlkZW8gZW5jb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkRhdmUgUGVya3MiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IHNhYTcxODUgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAl1bnNpZ25lZCBjaGFyIHJlZ1sxMjhdOwogCi0JaW50IG5vcm07Ci0JaW50IGVuYWJsZTsKLQlpbnQgYnJpZ2h0OwotCWludCBjb250cmFzdDsKLQlpbnQgaHVlOwotCWludCBzYXQ7CisJdjRsMl9zdGRfaWQgbm9ybTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNhYTcxODUgKnRvX3NhYTcxODUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgc2FhNzE4NSwgc2QpOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIGludCBzYWE3MTg1X3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbmxpbmUgaW50IHNhYTcxODVfcmVhZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlKGNsaWVudCk7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzE4NV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIGludCBzYWE3MTg1X3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggdmFsdWUpCiB7Ci0Jc3RydWN0IHNhYTcxODUgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IHNhYTcxODUgKmVuY29kZXIgPSB0b19zYWE3MTg1KHNkKTsKIAotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiUwMnggc2V0IHRvICUwMnhcbiIsIHJlZywgdmFsdWUpOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIiUwMnggc2V0IHRvICUwMnhcbiIsIHJlZywgdmFsdWUpOwogCWVuY29kZXItPnJlZ1tyZWddID0gdmFsdWU7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGludCBzYWE3MTg1X3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCitzdGF0aWMgaW50IHNhYTcxODVfd3JpdGVfYmxvY2soc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gdG9fc2FhNzE4NShzZCk7CiAJaW50IHJldCA9IC0xOwogCXU4IHJlZzsKIApAQCAtODMsNyArODksNiBAQAogCSAqIHRoZSBhZGFwdGVyIHVuZGVyc3RhbmRzIHJhdyBJMkMgKi8KIAlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7CiAJCS8qIGRvIHJhdyBJMkMsIG5vdCBzbWJ1cyBjb21wYXRpYmxlICovCi0JCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJCXU4IGJsb2NrX2RhdGFbMzJdOwogCQlpbnQgYmxvY2tfbGVuOwogCkBAIC0xMDQsNyArMTA5LDcgQEAKIAkJLyogZG8gc29tZSBzbG93IEkyQyBlbXVsYXRpb24ga2luZCBvZiB0aGluZyAqLwogCQl3aGlsZSAobGVuID49IDIpIHsKIAkJCXJlZyA9ICpkYXRhKys7Ci0JCQlyZXQgPSBzYWE3MTg1X3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKTsKKwkJCXJldCA9IHNhYTcxODVfd3JpdGUoc2QsIHJlZywgKmRhdGErKyk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJCWxlbiAtPSAyOwpAQCAtMjEzLDEzMyArMjE4LDEwNiBAQAogCTB4NjYsIDB4MjEsCQkvKiBGU0MzICovCiB9OwogCi1zdGF0aWMgaW50IHNhYTcxODVfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKKworc3RhdGljIGludCBzYWE3MTg1X2luaXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCkKIHsKLQlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gdG9fc2FhNzE4NShzZCk7CiAKLQlzd2l0Y2ggKGNtZCkgeworCXNhYTcxODVfd3JpdGVfYmxvY2soc2QsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKKwlpZiAoZW5jb2Rlci0+bm9ybSAmIFY0TDJfU1REX05UU0MpCisJCXNhYTcxODVfd3JpdGVfYmxvY2soc2QsIGluaXRfbnRzYywgc2l6ZW9mKGluaXRfbnRzYykpOworCWVsc2UKKwkJc2FhNzE4NV93cml0ZV9ibG9jayhzZCwgaW5pdF9wYWwsIHNpemVvZihpbml0X3BhbCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxODVfc19zdGRfb3V0cHV0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZCkKK3sKKwlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlciA9IHRvX3NhYTcxODUoc2QpOworCisJaWYgKHN0ZCAmIFY0TDJfU1REX05UU0MpCisJCXNhYTcxODVfd3JpdGVfYmxvY2soc2QsIGluaXRfbnRzYywgc2l6ZW9mKGluaXRfbnRzYykpOworCWVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTCkKKwkJc2FhNzE4NV93cml0ZV9ibG9jayhzZCwgaW5pdF9wYWwsIHNpemVvZihpbml0X3BhbCkpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisJZW5jb2Rlci0+bm9ybSA9IHN0ZDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTg1X3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKK3sKKwlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlciA9IHRvX3NhYTcxODUoc2QpOworCisJLyogUko6IHJvdXRlLT5pbnB1dCA9IDA6IGlucHV0IGlzIGZyb20gU0E3MTExCisJIHJvdXRlLT5pbnB1dCA9IDE6IGlucHV0IGlzIGZyb20gWlIzNjA2MCAqLworCisJc3dpdGNoIChyb3V0ZS0+aW5wdXQpIHsKIAljYXNlIDA6Ci0JCXNhYTcxODVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X2NvbW1vbiwKLQkJCQkgICAgc2l6ZW9mKGluaXRfY29tbW9uKSk7Ci0JCXN3aXRjaCAoZW5jb2Rlci0+bm9ybSkgewotCi0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfbnRzYywKLQkJCQkJICAgIHNpemVvZihpbml0X250c2MpKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9wYWwsCi0JCQkJCSAgICBzaXplb2YoaW5pdF9wYWwpKTsKLQkJCWJyZWFrOwotCQl9CisJCS8qIHR1cm4gb2ZmIGNvbG9yYmFyICovCisJCXNhYTcxODVfd3JpdGUoc2QsIDB4M2EsIDB4MGYpOworCQkvKiBTd2l0Y2ggUlRDRSB0byAxICovCisJCXNhYTcxODVfd3JpdGUoc2QsIDB4NjEsIChlbmNvZGVyLT5yZWdbMHg2MV0gJiAweGY3KSB8IDB4MDgpOworCQlzYWE3MTg1X3dyaXRlKHNkLCAweDZlLCAweDAxKTsKIAkJYnJlYWs7CiAKLQljYXNlIEVOQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19lbmNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQljYXAtPmZsYWdzID0KLQkJICAgIFZJREVPX0VOQ09ERVJfUEFMIHwgVklERU9fRU5DT0RFUl9OVFNDIHwKLQkJICAgIFZJREVPX0VOQ09ERVJfU0VDQU0gfCBWSURFT19FTkNPREVSX0NDSVI7Ci0JCWNhcC0+aW5wdXRzID0gMTsKLQkJY2FwLT5vdXRwdXRzID0gMTsKKwljYXNlIDE6CisJCS8qIHR1cm4gb2ZmIGNvbG9yYmFyICovCisJCXNhYTcxODVfd3JpdGUoc2QsIDB4M2EsIDB4MGYpOworCQkvKiBTd2l0Y2ggUlRDRSB0byAwICovCisJCXNhYTcxODVfd3JpdGUoc2QsIDB4NjEsIChlbmNvZGVyLT5yZWdbMHg2MV0gJiAweGY3KSB8IDB4MDApOworCQkvKiBTVzogYSBzbGlnaHQgc3luYyBwcm9ibGVtLi4uICovCisJCXNhYTcxODVfd3JpdGUoc2QsIDB4NmUsIDB4MDApOwogCQlicmVhazsKLQl9CiAKLQljYXNlIEVOQ09ERVJfU0VUX05PUk06Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJLy9zYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOwotCi0JCXN3aXRjaCAoKmlhcmcpIHsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQlzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLAotCQkJCQkgICAgc2l6ZW9mKGluaXRfbnRzYykpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCXNhYTcxODVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X3BhbCwKLQkJCQkJICAgIHNpemVvZihpbml0X3BhbCkpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJZW5jb2Rlci0+bm9ybSA9ICppYXJnOworCWNhc2UgMjoKKwkJLyogdHVybiBvbiBjb2xvcmJhciAqLworCQlzYWE3MTg1X3dyaXRlKHNkLCAweDNhLCAweDhmKTsKKwkJLyogU3dpdGNoIFJUQ0UgdG8gMCAqLworCQlzYWE3MTg1X3dyaXRlKHNkLCAweDYxLCAoZW5jb2Rlci0+cmVnWzB4NjFdICYgMHhmNykgfCAweDA4KTsKKwkJLyogU1c6IGEgc2xpZ2h0IHN5bmMgcHJvYmxlbS4uLiAqLworCQlzYWE3MTg1X3dyaXRlKHNkLCAweDZlLCAweDAxKTsKIAkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9JTlBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQkvKiBSSjogKmlhcmcgPSAwOiBpbnB1dCBpcyBmcm9tIFNBNzExMQotCQkgKmlhcmcgPSAxOiBpbnB1dCBpcyBmcm9tIFpSMzYwNjAgKi8KLQotCQlzd2l0Y2ggKCppYXJnKSB7Ci0JCWNhc2UgMDoKLQkJCS8qIFN3aXRjaCBSVENFIHRvIDEgKi8KLQkJCXNhYTcxODVfd3JpdGUoY2xpZW50LCAweDYxLAotCQkJCSAgICAgIChlbmNvZGVyLT5yZWdbMHg2MV0gJiAweGY3KSB8IDB4MDgpOwotCQkJc2FhNzE4NV93cml0ZShjbGllbnQsIDB4NmUsIDB4MDEpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAxOgotCQkJLyogU3dpdGNoIFJUQ0UgdG8gMCAqLwotCQkJc2FhNzE4NV93cml0ZShjbGllbnQsIDB4NjEsCi0JCQkJICAgICAgKGVuY29kZXItPnJlZ1sweDYxXSAmIDB4ZjcpIHwgMHgwMCk7Ci0JCQkvKiBTVzogYSBzbGlnaHQgc3luYyBwcm9ibGVtLi4uICovCi0JCQlzYWE3MTg1X3dyaXRlKGNsaWVudCwgMHg2ZSwgMHgwMCk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX0VOQUJMRV9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJZW5jb2Rlci0+ZW5hYmxlID0gISEqaWFyZzsKLQkJc2FhNzE4NV93cml0ZShjbGllbnQsIDB4NjEsCi0JCQkgICAgICAoZW5jb2Rlci0+cmVnWzB4NjFdICYgMHhiZikgfAotCQkJICAgICAgKGVuY29kZXItPmVuYWJsZSA/IDB4MDAgOiAweDQwKSk7Ci0JCWJyZWFrOwotCX0KIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNhYTcxODVfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfU0FBNzE4NSwgMCk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4ODggPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgc2FhNzE4NV9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gc2FhNzE4NV9nX2NoaXBfaWRlbnQsCisJLmluaXQgPSBzYWE3MTg1X2luaXQsCit9OwogCi1JMkNfQ0xJRU5UX0lOU01PRDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHNhYTcxODVfdmlkZW9fb3BzID0geworCS5zX3N0ZF9vdXRwdXQgPSBzYWE3MTg1X3Nfc3RkX291dHB1dCwKKwkuc19yb3V0aW5nID0gc2FhNzE4NV9zX3JvdXRpbmcsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBzYWE3MTg1X29wcyA9IHsKKwkuY29yZSA9ICZzYWE3MTg1X2NvcmVfb3BzLAorCS52aWRlbyA9ICZzYWE3MTg1X3ZpZGVvX29wcywKK307CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBzYWE3MTg1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGk7CiAJc3RydWN0IHNhYTcxODUgKmVuY29kZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKQEAgLTM1MSwyOCArMzI5LDI5IEBACiAJZW5jb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTg1KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVuY29kZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JZW5jb2Rlci0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKLQllbmNvZGVyLT5lbmFibGUgPSAxOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGVuY29kZXIpOworCWVuY29kZXItPm5vcm0gPSBWNEwyX1NURF9OVFNDOworCXNkID0gJmVuY29kZXItPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZzYWE3MTg1X29wcyk7CiAKLQlpID0gc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKKwlpID0gc2FhNzE4NV93cml0ZV9ibG9jayhzZCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOwogCWlmIChpID49IDApCi0JCWkgPSBzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLCBzaXplb2YoaW5pdF9udHNjKSk7CisJCWkgPSBzYWE3MTg1X3dyaXRlX2Jsb2NrKHNkLCBpbml0X250c2MsIHNpemVvZihpbml0X250c2MpKTsKIAlpZiAoaSA8IDApCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgZXJyb3IgJWRcbiIsIGkpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpbml0IGVycm9yICVkXG4iLCBpKTsKIAllbHNlCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInJldmlzaW9uIDB4JXhcbiIsCi0JCQkJc2FhNzE4NV9yZWFkKGNsaWVudCkgPj4gNSk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInJldmlzaW9uIDB4JXhcbiIsCisJCQkJc2FhNzE4NV9yZWFkKHNkKSA+PiA1KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzYWE3MTg1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gdG9fc2FhNzE4NShzZCk7CiAKLQlzYWE3MTg1X3dyaXRlKGNsaWVudCwgMHg2MSwgKGVuY29kZXItPnJlZ1sweDYxXSkgfCAweDQwKTsJLyogU1c6IG91dHB1dCBvZmYgaXMgYWN0aXZlICovCi0JLy9zYWE3MTg1X3dyaXRlKGNsaWVudCwgMHgzYSwgKGVuY29kZXItPnJlZ1sweDNhXSkgfCAweDgwKTsgLyogU1c6IGNvbG9yIGJhciAqLwotCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCS8qIFNXOiBvdXRwdXQgb2ZmIGlzIGFjdGl2ZSAqLworCXNhYTcxODVfd3JpdGUoc2QsIDB4NjEsIChlbmNvZGVyLT5yZWdbMHg2MV0pIHwgMHg0MCk7CiAJa2ZyZWUoZW5jb2Rlcik7CiAJcmV0dXJuIDA7CiB9CkBAIC0zODcsOCArMzY2LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInNhYTcxODUiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE3MTg1QiwKLQkuY29tbWFuZCA9IHNhYTcxODVfY29tbWFuZCwKIAkucHJvYmUgPSBzYWE3MTg1X3Byb2JlLAogCS5yZW1vdmUgPSBzYWE3MTg1X3JlbW92ZSwKIAkuaWRfdGFibGUgPSBzYWE3MTg1X2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTkxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxOTEuYwppbmRleCBiNDAxOGNjLi4zZjUyM2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxOTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxOTEuYwpAQCAtMTksOSArMTksMTEgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKICNpbmNsdWRlICJzYWE3MTkxLmgiCiAKQEAgLTMyLDYgKzM0LDcgQEAKIE1PRFVMRV9BVVRIT1IoIk1pa2FlbCBOb3VzaWFpbmVuIDx0bW5vdXNpYUBjYy5odXQuZmk+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKwogLy8gI2RlZmluZSBTQUE3MTkxX0RFQlVHCiAKICNpZmRlZiBTQUE3MTkxX0RFQlVHCkBAIC00NCwxNyArNDcsMjAgQEAKICNkZWZpbmUgU0FBNzE5MV9TWU5DX0RFTEFZCTEwMAkvKiBtaWxsaXNlY29uZHMgKi8KIAogc3RydWN0IHNhYTcxOTEgewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwogCiAJLyogdGhlIHJlZ2lzdGVyIHZhbHVlcyBhcmUgc3RvcmVkIGhlcmUgYXMgdGhlIGFjdHVhbAogCSAqIEkyQy1yZWdpc3RlcnMgYXJlIHdyaXRlLW9ubHkgKi8KIAl1OCByZWdbMjVdOwogCiAJaW50IGlucHV0OwotCWludCBub3JtOworCXY0bDJfc3RkX2lkIG5vcm07CiB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTkxOworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2FhNzE5MSAqdG9fc2FhNzE5MShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBzYWE3MTkxLCBzZCk7Cit9CiAKIHN0YXRpYyBjb25zdCB1OCBpbml0c2VxW10gPSB7CiAJMCwJLyogU3ViYWRkcmVzcyAqLwpAQCAtMTAwLDE1ICsxMDYsMTQgQEAKIAogLyogU0FBNzE5MSByZWdpc3RlciBoYW5kbGluZyAqLwogCi1zdGF0aWMgdTggc2FhNzE5MV9yZWFkX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgdTggcmVnKQorc3RhdGljIHU4IHNhYTcxOTFfcmVhZF9yZWcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnKQogewotCXJldHVybiAoKHN0cnVjdCBzYWE3MTkxICopaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpLT5yZWdbcmVnXTsKKwlyZXR1cm4gdG9fc2FhNzE5MShzZCktPnJlZ1tyZWddOwogfQogCi1zdGF0aWMgaW50IHNhYTcxOTFfcmVhZF9zdGF0dXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgICAgICB1OCAqdmFsdWUpCitzdGF0aWMgaW50IHNhYTcxOTFfcmVhZF9zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggKnZhbHVlKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgdmFsdWUsIDEpOwpAQCAtMTIxLDIxICsxMjYsMjMgQEAKIH0KIAogCi1zdGF0aWMgaW50IHNhYTcxOTFfd3JpdGVfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywKLQkJCSAgICAgdTggdmFsdWUpCitzdGF0aWMgaW50IHNhYTcxOTFfd3JpdGVfcmVnKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggdmFsdWUpCiB7Ci0JKChzdHJ1Y3Qgc2FhNzE5MSAqKWkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKS0+cmVnW3JlZ10gPSB2YWx1ZTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwl0b19zYWE3MTkxKHNkKS0+cmVnW3JlZ10gPSB2YWx1ZTsKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCiAvKiB0aGUgZmlyc3QgYnl0ZSBvZiBkYXRhIG11c3QgYmUgdGhlIGZpcnN0IHN1YmFkZHJlc3MgbnVtYmVyIChyZWdpc3RlcikgKi8KLXN0YXRpYyBpbnQgc2FhNzE5MV93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorc3RhdGljIGludCBzYWE3MTkxX3dyaXRlX2Jsb2NrKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCQkgICAgICAgdTggbGVuZ3RoLCBjb25zdCB1OCAqZGF0YSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IHNhYTcxOTEgKmRlY29kZXIgPSB0b19zYWE3MTkxKHNkKTsKIAlpbnQgaTsKIAlpbnQgcmV0OwogCi0Jc3RydWN0IHNhYTcxOTEgKmRlY29kZXIgPSAoc3RydWN0IHNhYTcxOTEgKilpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlmb3IgKGkgPSAwOyBpIDwgKGxlbmd0aCAtIDEpOyBpKyspIHsKIAkJZGVjb2Rlci0+cmVnW2RhdGFbMF0gKyBpXSA9IGRhdGFbaSArIDFdOwogCX0KQEAgLTE1MiwxNCArMTU5LDE1IEBACiAKIC8qIEhlbHBlciBmdW5jdGlvbnMgKi8KIAotc3RhdGljIGludCBzYWE3MTkxX3NldF9pbnB1dChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgaW5wdXQpCitzdGF0aWMgaW50IHNhYTcxOTFfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCiB7Ci0Jc3RydWN0IHNhYTcxOTEgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQl1OCBsdW1hID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0xVTUEpOwotCXU4IGlvY2sgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfSU9DSyk7CisJc3RydWN0IHNhYTcxOTEgKmRlY29kZXIgPSB0b19zYWE3MTkxKHNkKTsKKwl1OCBsdW1hID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfTFVNQSk7CisJdTggaW9jayA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0lPQ0spOwogCWludCBlcnI7CiAKLQlzd2l0Y2ggKGlucHV0KSB7CisJc3dpdGNoIChyb3V0ZS0+aW5wdXQpIHsKIAljYXNlIFNBQTcxOTFfSU5QVVRfQ09NUE9TSVRFOiAvKiBTZXQgQ29tcG9zaXRlIGlucHV0ICovCiAJCWlvY2sgJj0gfihTQUE3MTkxX0lPQ0tfQ0hSUyB8IFNBQTcxOTFfSU9DS19HUFNXMQogCQkJICB8IFNBQTcxOTFfSU9DS19HUFNXMik7CkBAIC0xNzUsNTQgKzE4Myw1MCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0xVTUEsIGx1bWEpOworCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19MVU1BLCBsdW1hKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gLUVJTzsKLQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0lPQ0ssIGlvY2spOworCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19JT0NLLCBpb2NrKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gLUVJTzsKIAotCWRlY29kZXItPmlucHV0ID0gaW5wdXQ7CisJZGVjb2Rlci0+aW5wdXQgPSByb3V0ZS0+aW5wdXQ7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYWE3MTkxX3NldF9ub3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBub3JtKQorc3RhdGljIGludCBzYWE3MTkxX3Nfc3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIG5vcm0pCiB7Ci0Jc3RydWN0IHNhYTcxOTEgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQl1OCBzdGRjID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX1NUREMpOwotCXU4IGN0bDMgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMMyk7Ci0JdTggY2hjdiA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19DSENWKTsKKwlzdHJ1Y3Qgc2FhNzE5MSAqZGVjb2RlciA9IHRvX3NhYTcxOTEoc2QpOworCXU4IHN0ZGMgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19TVERDKTsKKwl1OCBjdGwzID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfQ1RMMyk7CisJdTggY2hjdiA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0NIQ1YpOwogCWludCBlcnI7CiAKLQlzd2l0Y2gobm9ybSkgewotCWNhc2UgU0FBNzE5MV9OT1JNX1BBTDoKKwlpZiAobm9ybSAmIFY0TDJfU1REX1BBTCkgewogCQlzdGRjICY9IH5TQUE3MTkxX1NURENfU0VDUzsKIAkJY3RsMyAmPSB+KFNBQTcxOTFfQ1RMM19BVUZEIHwgU0FBNzE5MV9DVEwzX0ZTRUwpOwogCQljaGN2ID0gU0FBNzE5MV9DSENWX1BBTDsKLQkJYnJlYWs7Ci0JY2FzZSBTQUE3MTkxX05PUk1fTlRTQzoKKwl9IGVsc2UgaWYgKG5vcm0gJiBWNEwyX1NURF9OVFNDKSB7CiAJCXN0ZGMgJj0gflNBQTcxOTFfU1REQ19TRUNTOwogCQljdGwzICY9IH5TQUE3MTkxX0NUTDNfQVVGRDsKIAkJY3RsMyB8PSBTQUE3MTkxX0NUTDNfRlNFTDsKIAkJY2hjdiA9IFNBQTcxOTFfQ0hDVl9OVFNDOwotCQlicmVhazsKLQljYXNlIFNBQTcxOTFfTk9STV9TRUNBTToKKwl9IGVsc2UgaWYgKG5vcm0gJiBWNEwyX1NURF9TRUNBTSkgewogCQlzdGRjIHw9IFNBQTcxOTFfU1REQ19TRUNTOwogCQljdGwzICY9IH4oU0FBNzE5MV9DVEwzX0FVRkQgfCBTQUE3MTkxX0NUTDNfRlNFTCk7CiAJCWNoY3YgPSBTQUE3MTkxX0NIQ1ZfUEFMOwotCQlicmVhazsKLQlkZWZhdWx0OgorCX0gZWxzZSB7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMMywgY3RsMyk7CisJZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDMsIGN0bDMpOwogCWlmIChlcnIpCiAJCXJldHVybiAtRUlPOwotCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfU1REQywgc3RkYyk7CisJZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX1NUREMsIHN0ZGMpOwogCWlmIChlcnIpCiAJCXJldHVybiAtRUlPOwotCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ0hDViwgY2hjdik7CisJZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX0NIQ1YsIGNoY3YpOwogCWlmIChlcnIpCiAJCXJldHVybiAtRUlPOwogCkBAIC0yMzAsMTkgKzIzNCwxOSBAQAogCiAJZHByaW50aygiY3RsMzogJTAyeCBzdGRjOiAlMDJ4IGNoY3Y6ICUwMnhcbiIsIGN0bDMsCiAJCXN0ZGMsIGNoY3YpOwotCWRwcmludGsoIm5vcm06ICVkXG4iLCBub3JtKTsKKwlkcHJpbnRrKCJub3JtOiAlbGx4XG4iLCBub3JtKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhYTcxOTFfd2FpdF9mb3Jfc2lnbmFsKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4ICpzdGF0dXMpCitzdGF0aWMgaW50IHNhYTcxOTFfd2FpdF9mb3Jfc2lnbmFsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4ICpzdGF0dXMpCiB7CiAJaW50IGkgPSAwOwogCiAJZHByaW50aygiQ2hlY2tpbmcgZm9yIHNpZ25hbC4uLlxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgU0FBNzE5MV9TWU5DX0NPVU5UOyBpKyspIHsKLQkJaWYgKHNhYTcxOTFfcmVhZF9zdGF0dXMoY2xpZW50LCBzdGF0dXMpKQorCQlpZiAoc2FhNzE5MV9yZWFkX3N0YXR1cyhzZCwgc3RhdHVzKSkKIAkJCXJldHVybiAtRUlPOwogCiAJCWlmICgoKCpzdGF0dXMpICYgU0FBNzE5MV9TVEFUVVNfSExDSykgPT0gMCkgewpAQCAtMjU4LDMxICsyNjIsMzQgQEAKIAlyZXR1cm4gLUVCVVNZOwogfQogCi1zdGF0aWMgaW50IHNhYTcxOTFfYXV0b2RldGVjdF9ub3JtX2V4dGVuZGVkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IHNhYTcxOTFfcXVlcnlzdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgKm5vcm0pCiB7Ci0JdTggc3RkYyA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19TVERDKTsKLQl1OCBjdGwzID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMpOworCXN0cnVjdCBzYWE3MTkxICpkZWNvZGVyID0gdG9fc2FhNzE5MShzZCk7CisJdTggc3RkYyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX1NUREMpOworCXU4IGN0bDMgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19DVEwzKTsKIAl1OCBzdGF0dXM7CisJdjRsMl9zdGRfaWQgb2xkX25vcm0gPSBkZWNvZGVyLT5ub3JtOwogCWludCBlcnIgPSAwOwogCiAJZHByaW50aygiU0FBNzE5MSBleHRlbmRlZCBzaWduYWwgYXV0by1kZXRlY3Rpb24uLi5cbiIpOwogCisJKm5vcm0gPSBWNEwyX1NURF9OVFNDIHwgVjRMMl9TVERfUEFMIHwgVjRMMl9TVERfU0VDQU07CiAJc3RkYyAmPSB+U0FBNzE5MV9TVERDX1NFQ1M7CiAJY3RsMyAmPSB+KFNBQTcxOTFfQ1RMM19GU0VMKTsKIAotCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfU1REQywgc3RkYyk7CisJZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX1NUREMsIHN0ZGMpOwogCWlmIChlcnIpIHsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQotCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMMywgY3RsMyk7CisJZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDMsIGN0bDMpOwogCWlmIChlcnIpIHsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQogCiAJY3RsMyB8PSBTQUE3MTkxX0NUTDNfQVVGRDsKLQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMsIGN0bDMpOworCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19DVEwzLCBjdGwzKTsKIAlpZiAoZXJyKSB7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gb3V0OwpAQCAtMjkwLDUzICsyOTcsNTQgQEAKIAogCW1zbGVlcChTQUE3MTkxX1NZTkNfREVMQVkpOwogCi0JZXJyID0gc2FhNzE5MV93YWl0X2Zvcl9zaWduYWwoY2xpZW50LCAmc3RhdHVzKTsKKwllcnIgPSBzYWE3MTkxX3dhaXRfZm9yX3NpZ25hbChzZCwgJnN0YXR1cyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKIAlpZiAoc3RhdHVzICYgU0FBNzE5MV9TVEFUVVNfRklEVCkgewogCQkvKiA2MEh6IHNpZ25hbCAtPiBOVFNDICovCiAJCWRwcmludGsoIjYwSHogc2lnbmFsOiBOVFNDXG4iKTsKLQkJcmV0dXJuIHNhYTcxOTFfc2V0X25vcm0oY2xpZW50LCBTQUE3MTkxX05PUk1fTlRTQyk7CisJCSpub3JtID0gVjRMMl9TVERfTlRTQzsKKwkJcmV0dXJuIDA7CiAJfQogCiAJLyogNTBIeiBzaWduYWwgKi8KIAlkcHJpbnRrKCI1MEh6IHNpZ25hbDogVHJ5aW5nIFBBTC4uLlxuIik7CiAKIAkvKiB0cnkgUEFMIGZpcnN0ICovCi0JZXJyID0gc2FhNzE5MV9zZXRfbm9ybShjbGllbnQsIFNBQTcxOTFfTk9STV9QQUwpOworCWVyciA9IHNhYTcxOTFfc19zdGQoc2QsIFY0TDJfU1REX1BBTCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKIAltc2xlZXAoU0FBNzE5MV9TWU5DX0RFTEFZKTsKIAotCWVyciA9IHNhYTcxOTFfd2FpdF9mb3Jfc2lnbmFsKGNsaWVudCwgJnN0YXR1cyk7CisJZXJyID0gc2FhNzE5MV93YWl0X2Zvcl9zaWduYWwoc2QsICZzdGF0dXMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCiAJLyogbm90IDUwSHogPyAqLwogCWlmIChzdGF0dXMgJiBTQUE3MTkxX1NUQVRVU19GSURUKSB7CiAJCWRwcmludGsoIk5vIDUwSHogc2lnbmFsXG4iKTsKLQkJZXJyID0gLUVBR0FJTjsKLQkJZ290byBvdXQ7CisJCXNhYTcxOTFfc19zdGQoc2QsIG9sZF9ub3JtKTsKKwkJcmV0dXJuIC1FQUdBSU47CiAJfQogCiAJaWYgKHN0YXR1cyAmIFNBQTcxOTFfU1RBVFVTX0NPREUpIHsKIAkJZHByaW50aygiUEFMXG4iKTsKLQkJcmV0dXJuIDA7CisJCSpub3JtID0gVjRMMl9TVERfUEFMOworCQlyZXR1cm4gc2FhNzE5MV9zX3N0ZChzZCwgb2xkX25vcm0pOwogCX0KIAogCWRwcmludGsoIk5vIGNvbG9yIGRldGVjdGVkIHdpdGggUEFMIC0gVHJ5aW5nIFNFQ0FNLi4uXG4iKTsKIAogCS8qIG5vIGNvbG9yIGRldGVjdGVkID8gLT4gdHJ5IFNFQ0FNICovCi0JZXJyID0gc2FhNzE5MV9zZXRfbm9ybShjbGllbnQsCi0JCQkgICAgICAgU0FBNzE5MV9OT1JNX1NFQ0FNKTsKKwllcnIgPSBzYWE3MTkxX3Nfc3RkKHNkLCBWNEwyX1NURF9TRUNBTSk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKIAltc2xlZXAoU0FBNzE5MV9TWU5DX0RFTEFZKTsKIAotCWVyciA9IHNhYTcxOTFfd2FpdF9mb3Jfc2lnbmFsKGNsaWVudCwgJnN0YXR1cyk7CisJZXJyID0gc2FhNzE5MV93YWl0X2Zvcl9zaWduYWwoc2QsICZzdGF0dXMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0zNTAsMzIgKzM1OCwxNyBAQAogCWlmIChzdGF0dXMgJiBTQUE3MTkxX1NUQVRVU19DT0RFKSB7CiAJCS8qIENvbG9yIGRldGVjdGVkIC0+IFNFQ0FNICovCiAJCWRwcmludGsoIlNFQ0FNXG4iKTsKLQkJcmV0dXJuIDA7CisJCSpub3JtID0gVjRMMl9TVERfU0VDQU07CisJCXJldHVybiBzYWE3MTkxX3Nfc3RkKHNkLCBvbGRfbm9ybSk7CiAJfQogCiAJZHByaW50aygiTm8gY29sb3IgZGV0ZWN0ZWQgd2l0aCBTRUNBTSAtIEdvaW5nIGJhY2sgdG8gUEFMLlxuIik7CiAKLQkvKiBzdGlsbCBubyBjb2xvciBkZXRlY3RlZCA/Ci0JICogLT4gc2V0IG5vcm0gYmFjayB0byBQQUwgKi8KLQllcnIgPSBzYWE3MTkxX3NldF9ub3JtKGNsaWVudCwKLQkJCSAgICAgICBTQUE3MTkxX05PUk1fUEFMKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQogb3V0OgotCWN0bDMgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMMyk7Ci0JaWYgKGN0bDMgJiBTQUE3MTkxX0NUTDNfQVVGRCkgewotCQljdGwzICY9IH4oU0FBNzE5MV9DVEwzX0FVRkQpOwotCQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMsIGN0bDMpOwotCQlpZiAoZXJyKSB7Ci0JCQllcnIgPSAtRUlPOwotCQl9Ci0JfQotCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gc2FhNzE5MV9zX3N0ZChzZCwgb2xkX25vcm0pOwogfQogCi1zdGF0aWMgaW50IHNhYTcxOTFfYXV0b2RldGVjdF9ub3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IHNhYTcxOTFfYXV0b2RldGVjdF9ub3JtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7CiAJdTggc3RhdHVzOwogCkBAIC0zODMsNyArMzc2LDcgQEAKIAogCWRwcmludGsoIlJlYWRpbmcgc3RhdHVzLi4uXG4iKTsKIAotCWlmIChzYWE3MTkxX3JlYWRfc3RhdHVzKGNsaWVudCwgJnN0YXR1cykpCisJaWYgKHNhYTcxOTFfcmVhZF9zdGF0dXMoc2QsICZzdGF0dXMpKQogCQlyZXR1cm4gLUVJTzsKIAogCWRwcmludGsoIkNoZWNraW5nIGZvciBzaWduYWwuLi5cbiIpOwpAQCAtMzk5LDI2ICszOTIsMjUgQEAKIAlpZiAoc3RhdHVzICYgU0FBNzE5MV9TVEFUVVNfRklEVCkgewogCQkvKiA2MGh6IHNpZ25hbCAtPiBOVFNDICovCiAJCWRwcmludGsoIk5UU0NcbiIpOwotCQlyZXR1cm4gc2FhNzE5MV9zZXRfbm9ybShjbGllbnQsIFNBQTcxOTFfTk9STV9OVFNDKTsKKwkJcmV0dXJuIHNhYTcxOTFfc19zdGQoc2QsIFY0TDJfU1REX05UU0MpOwogCX0gZWxzZSB7CiAJCS8qIDUwaHogc2lnbmFsIC0+IFBBTCAqLwogCQlkcHJpbnRrKCJQQUxcbiIpOwotCQlyZXR1cm4gc2FhNzE5MV9zZXRfbm9ybShjbGllbnQsIFNBQTcxOTFfTk9STV9QQUwpOworCQlyZXR1cm4gc2FhNzE5MV9zX3N0ZChzZCwgVjRMMl9TVERfUEFMKTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzE5MV9nZXRfY29udHJvbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgICAgIHN0cnVjdCBzYWE3MTkxX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IHNhYTcxOTFfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CiAJdTggcmVnOwogCWludCByZXQgPSAwOwogCi0Jc3dpdGNoIChjdHJsLT50eXBlKSB7CisJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTOgogCWNhc2UgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTX1dFSUdIVDoKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9DT1JJTkc6Ci0JCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19MVU1BKTsKLQkJc3dpdGNoIChjdHJsLT50eXBlKSB7CisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0xVTUEpOworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJCWNhc2UgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTOgogCQkJY3RybC0+dmFsdWUgPSAoKHMzMilyZWcgJiBTQUE3MTkxX0xVTUFfQlBTU19NQVNLKQogCQkJCT4+IFNBQTcxOTFfTFVNQV9CUFNTX1NISUZUOwpAQCAtNDM1LDE1ICs0MjcsMTUgQEAKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfRk9SQ0VfQ09MT1VSOgogCWNhc2UgU0FBNzE5MV9DT05UUk9MX0NIUk9NQV9HQUlOOgotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfR0FJTik7Ci0JCWlmIChjdHJsLT50eXBlID09IFNBQTcxOTFfQ09OVFJPTF9GT1JDRV9DT0xPVVIpCisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0dBSU4pOworCQlpZiAoY3RybC0+aWQgPT0gU0FBNzE5MV9DT05UUk9MX0ZPUkNFX0NPTE9VUikKIAkJCWN0cmwtPnZhbHVlID0gKChzMzIpcmVnICYgU0FBNzE5MV9HQUlOX0NPTE8pID8gMSA6IDA7CiAJCWVsc2UKIAkJCWN0cmwtPnZhbHVlID0gKChzMzIpcmVnICYgU0FBNzE5MV9HQUlOX0xGSVNfTUFTSykKIAkJCQk+PiBTQUE3MTkxX0dBSU5fTEZJU19TSElGVDsKIAkJYnJlYWs7Ci0JY2FzZSBTQUE3MTkxX0NPTlRST0xfSFVFOgotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfSFVFQyk7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0hVRUMpOwogCQlpZiAocmVnIDwgMHg4MCkKIAkJCXJlZyArPSAweDgwOwogCQllbHNlCkBAIC00NTEsMTggKzQ0MywxOCBAQAogCQljdHJsLT52YWx1ZSA9IChzMzIpcmVnOwogCQlicmVhazsKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9WVFJDOgotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfU1REQyk7CisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX1NUREMpOwogCQljdHJsLT52YWx1ZSA9ICgoczMyKXJlZyAmIFNBQTcxOTFfU1REQ19WVFJDKSA/IDEgOiAwOwogCQlicmVhazsKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9MVU1BX0RFTEFZOgotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMMyk7CisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDMpOwogCQljdHJsLT52YWx1ZSA9ICgoczMyKXJlZyAmIFNBQTcxOTFfQ1RMM19ZREVMX01BU0spCiAJCQk+PiBTQUE3MTkxX0NUTDNfWURFTF9TSElGVDsKIAkJaWYgKGN0cmwtPnZhbHVlID49IDQpCiAJCQljdHJsLT52YWx1ZSAtPSA4OwogCQlicmVhazsKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9WTlI6Ci0JCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19DVEw0KTsKKwkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfQ1RMNCk7CiAJCWN0cmwtPnZhbHVlID0gKChzMzIpcmVnICYgU0FBNzE5MV9DVEw0X1ZOT0lfTUFTSykKIAkJCT4+IFNBQTcxOTFfQ1RMNF9WTk9JX1NISUZUOwogCQlicmVhazsKQEAgLTQ3MywxOCArNDY1LDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzYWE3MTkxX3NldF9jb250cm9sKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgICAgICAgc3RydWN0IHNhYTcxOTFfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgc2FhNzE5MV9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKIAl1OCByZWc7CiAJaW50IHJldCA9IDA7CiAKLQlzd2l0Y2ggKGN0cmwtPnR5cGUpIHsKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1M6CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1NfV0VJR0hUOgogCWNhc2UgU0FBNzE5MV9DT05UUk9MX0NPUklORzoKLQkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0xVTUEpOwotCQlzd2l0Y2ggKGN0cmwtPnR5cGUpIHsKKwkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfTFVNQSk7CisJCXN3aXRjaCAoY3RybC0+aWQpIHsKIAkJY2FzZSBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1M6CiAJCQlyZWcgJj0gflNBQTcxOTFfTFVNQV9CUFNTX01BU0s7CiAJCQlyZWcgfD0gKGN0cmwtPnZhbHVlIDw8IFNBQTcxOTFfTFVNQV9CUFNTX1NISUZUKQpAQCAtNTAxLDEyICs0OTIsMTIgQEAKIAkJCQkmIFNBQTcxOTFfTFVNQV9DT1JJX01BU0s7CiAJCQlicmVhazsKIAkJfQotCQlyZXQgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0xVTUEsIHJlZyk7CisJCXJldCA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19MVU1BLCByZWcpOwogCQlicmVhazsKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9GT1JDRV9DT0xPVVI6CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfQ0hST01BX0dBSU46Ci0JCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19HQUlOKTsKLQkJaWYgKGN0cmwtPnR5cGUgPT0gU0FBNzE5MV9DT05UUk9MX0ZPUkNFX0NPTE9VUikgeworCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19HQUlOKTsKKwkJaWYgKGN0cmwtPmlkID09IFNBQTcxOTFfQ09OVFJPTF9GT1JDRV9DT0xPVVIpIHsKIAkJCWlmIChjdHJsLT52YWx1ZSkKIAkJCQlyZWcgfD0gU0FBNzE5MV9HQUlOX0NPTE87CiAJCQllbHNlCkBAIC01MTYsNDEgKzUwNyw0MSBAQAogCQkJcmVnIHw9IChjdHJsLT52YWx1ZSA8PCBTQUE3MTkxX0dBSU5fTEZJU19TSElGVCkKIAkJCQkmIFNBQTcxOTFfR0FJTl9MRklTX01BU0s7CiAJCX0KLQkJcmV0ID0gc2FhNzE5MV93cml0ZV9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19HQUlOLCByZWcpOworCQlyZXQgPSBzYWE3MTkxX3dyaXRlX3JlZyhzZCwgU0FBNzE5MV9SRUdfR0FJTiwgcmVnKTsKIAkJYnJlYWs7Ci0JY2FzZSBTQUE3MTkxX0NPTlRST0xfSFVFOgorCWNhc2UgVjRMMl9DSURfSFVFOgogCQlyZWcgPSBjdHJsLT52YWx1ZSAmIDB4ZmY7CiAJCWlmIChyZWcgPCAweDgwKQogCQkJcmVnICs9IDB4ODA7CiAJCWVsc2UKIAkJCXJlZyAtPSAweDgwOwotCQlyZXQgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0hVRUMsIHJlZyk7CisJCXJldCA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19IVUVDLCByZWcpOwogCQlicmVhazsKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9WVFJDOgotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfU1REQyk7CisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX1NUREMpOwogCQlpZiAoY3RybC0+dmFsdWUpCiAJCQlyZWcgfD0gU0FBNzE5MV9TVERDX1ZUUkM7CiAJCWVsc2UKIAkJCXJlZyAmPSB+U0FBNzE5MV9TVERDX1ZUUkM7Ci0JCXJldCA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfU1REQywgcmVnKTsKKwkJcmV0ID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX1NUREMsIHJlZyk7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzE5MV9DT05UUk9MX0xVTUFfREVMQVk6IHsKIAkJczMyIHZhbHVlID0gY3RybC0+dmFsdWU7CiAJCWlmICh2YWx1ZSA8IDApCiAJCQl2YWx1ZSArPSA4OwotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMMyk7CisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDMpOwogCQlyZWcgJj0gflNBQTcxOTFfQ1RMM19ZREVMX01BU0s7CiAJCXJlZyB8PSAodmFsdWUgPDwgU0FBNzE5MV9DVEwzX1lERUxfU0hJRlQpCiAJCQkmIFNBQTcxOTFfQ1RMM19ZREVMX01BU0s7Ci0JCXJldCA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMMywgcmVnKTsKKwkJcmV0ID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDMsIHJlZyk7CiAJCWJyZWFrOwogCX0KIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9WTlI6Ci0JCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19DVEw0KTsKKwkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfQ1RMNCk7CiAJCXJlZyAmPSB+U0FBNzE5MV9DVEw0X1ZOT0lfTUFTSzsKIAkJcmVnIHw9IChjdHJsLT52YWx1ZSA8PCBTQUE3MTkxX0NUTDRfVk5PSV9TSElGVCkKIAkJCSYgU0FBNzE5MV9DVEw0X1ZOT0lfTUFTSzsKLQkJcmV0ID0gc2FhNzE5MV93cml0ZV9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19DVEw0LCByZWcpOworCQlyZXQgPSBzYWE3MTkxX3dyaXRlX3JlZyhzZCwgU0FBNzE5MV9SRUdfQ1RMNCwgcmVnKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTU2MSwyNDcgKzU1MiwxMDggQEAKIAogLyogSTJDLWludGVyZmFjZSAqLwogCi1zdGF0aWMgaW50IHNhYTcxOTFfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgaW50IGFkZHIsIGludCBraW5kKQorc3RhdGljIGludCBzYWE3MTkxX2dfaW5wdXRfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqc3RhdHVzKQoreworCXU4IHN0YXR1c19yZWc7CisJaW50IHJlcyA9IFY0TDJfSU5fU1RfTk9fU0lHTkFMOworCisJaWYgKHNhYTcxOTFfcmVhZF9zdGF0dXMoc2QsICZzdGF0dXNfcmVnKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKChzdGF0dXNfcmVnICYgU0FBNzE5MV9TVEFUVVNfSExDSykgPT0gMCkKKwkJcmVzID0gMDsKKwlpZiAoIShzdGF0dXNfcmVnICYgU0FBNzE5MV9TVEFUVVNfQ09ERSkpCisJCXJlcyB8PSBWNEwyX0lOX1NUX05PX0NPTE9SOworCSpzdGF0dXMgPSByZXM7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBzYWE3MTkxX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1NBQTcxOTEsIDApOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHNhYTcxOTFfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IHNhYTcxOTFfZ19jaGlwX2lkZW50LAorCS5nX2N0cmwgPSBzYWE3MTkxX2dfY3RybCwKKwkuc19jdHJsID0gc2FhNzE5MV9zX2N0cmwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyBzYWE3MTkxX3R1bmVyX29wcyA9IHsKKwkuc19zdGQgPSBzYWE3MTkxX3Nfc3RkLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgc2FhNzE5MV92aWRlb19vcHMgPSB7CisJLnNfcm91dGluZyA9IHNhYTcxOTFfc19yb3V0aW5nLAorCS5xdWVyeXN0ZCA9IHNhYTcxOTFfcXVlcnlzdGQsCisJLmdfaW5wdXRfc3RhdHVzID0gc2FhNzE5MV9nX2lucHV0X3N0YXR1cywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHNhYTcxOTFfb3BzID0geworCS5jb3JlID0gJnNhYTcxOTFfY29yZV9vcHMsCisJLnZpZGVvID0gJnNhYTcxOTFfdmlkZW9fb3BzLAorCS50dW5lciA9ICZzYWE3MTkxX3R1bmVyX29wcywKK307CisKK3N0YXRpYyBpbnQgc2FhNzE5MV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGVyciA9IDA7CiAJc3RydWN0IHNhYTcxOTEgKmRlY29kZXI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiUGhpbGlwcyBTQUE3MTkxIGRyaXZlciB2ZXJzaW9uICVzXG4iLAotCSAgICAgICBTQUE3MTkxX01PRFVMRV9WRVJTSU9OKTsKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZigqY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbGllbnQpCi0JCXJldHVybiAtRU5PTUVNOwogCWRlY29kZXIgPSBremFsbG9jKHNpemVvZigqZGVjb2RlciksIEdGUF9LRVJORUwpOwotCWlmICghZGVjb2RlcikgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX2NsaWVudDsKLQl9CisJaWYgKCFkZWNvZGVyKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCWNsaWVudC0+YWRkciA9IGFkZHI7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcDsKLQljbGllbnQtPmRyaXZlciA9ICZpMmNfZHJpdmVyX3NhYTcxOTE7Ci0JY2xpZW50LT5mbGFncyA9IDA7Ci0Jc3RyY3B5KGNsaWVudC0+bmFtZSwgInNhYTcxOTEgY2xpZW50Iik7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjb2Rlcik7CisJc2QgPSAmZGVjb2Rlci0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnNhYTcxOTFfb3BzKTsKIAotCWRlY29kZXItPmNsaWVudCA9IGNsaWVudDsKLQotCWVyciA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfZnJlZV9kZWNvZGVyOwotCi0JZXJyID0gc2FhNzE5MV93cml0ZV9ibG9jayhjbGllbnQsIHNpemVvZihpbml0c2VxKSwgaW5pdHNlcSk7CisJZXJyID0gc2FhNzE5MV93cml0ZV9ibG9jayhzZCwgc2l6ZW9mKGluaXRzZXEpLCBpbml0c2VxKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiU0FBNzE5MSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOwotCQlnb3RvIG91dF9kZXRhY2hfY2xpZW50OworCQlrZnJlZShkZWNvZGVyKTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJTQUE3MTkxIGluaXRpYWxpemVkXG4iKTsKIAogCWRlY29kZXItPmlucHV0ID0gU0FBNzE5MV9JTlBVVF9DT01QT1NJVEU7Ci0JZGVjb2Rlci0+bm9ybSA9IFNBQTcxOTFfTk9STV9QQUw7CisJZGVjb2Rlci0+bm9ybSA9IFY0TDJfU1REX1BBTDsKIAotCWVyciA9IHNhYTcxOTFfYXV0b2RldGVjdF9ub3JtKGNsaWVudCk7Ci0JaWYgKGVyciAmJiAoZXJyICE9IC1FQlVTWSkpIHsKKwllcnIgPSBzYWE3MTkxX2F1dG9kZXRlY3Rfbm9ybShzZCk7CisJaWYgKGVyciAmJiAoZXJyICE9IC1FQlVTWSkpCiAJCXByaW50ayhLRVJOX0VSUiAiU0FBNzE5MTogU2lnbmFsIGF1dG8tZGV0ZWN0aW9uIGZhaWxlZFxuIik7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLW91dF9kZXRhY2hfY2xpZW50OgotCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci1vdXRfZnJlZV9kZWNvZGVyOgotCWtmcmVlKGRlY29kZXIpOwotb3V0X2ZyZWVfY2xpZW50OgotCWtmcmVlKGNsaWVudCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBzYWE3MTkxX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKLXsKLQkvKiBBbHdheXMgY29ubmVjdGVkIHRvIFZJTk8gKi8KLQlpZiAoYWRhcC0+aWQgPT0gSTJDX0hXX1NHSV9WSU5PKQotCQlyZXR1cm4gc2FhNzE5MV9hdHRhY2goYWRhcCwgU0FBNzE5MV9BRERSLCAwKTsKLQkvKiBGZWVsIGZyZWUgdG8gYWRkIHByb2JlIGhlcmUgOi0pICovCi0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNzE5MV9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3Qgc2FhNzE5MSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlrZnJlZShkZWNvZGVyKTsKLQlrZnJlZShjbGllbnQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNhYTcxOTFfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLAotCQkJICAgdm9pZCAqYXJnKQotewotCXN0cnVjdCBzYWE3MTkxICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOiB7Ci0JCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQljYXAtPmZsYWdzICA9IFZJREVPX0RFQ09ERVJfUEFMIHwgVklERU9fREVDT0RFUl9OVFNDIHwKLQkJCSAgICAgIFZJREVPX0RFQ09ERVJfU0VDQU0gfCBWSURFT19ERUNPREVSX0FVVE87Ci0JCWNhcC0+aW5wdXRzID0gKGNsaWVudC0+YWRhcHRlci0+aWQgPT0gSTJDX0hXX1NHSV9WSU5PKSA/IDIgOiAxOwotCQljYXAtPm91dHB1dHMgPSAxOwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6IHsKLQkJaW50ICppYXJnID0gYXJnOwotCQl1OCBzdGF0dXM7Ci0JCWludCByZXMgPSAwOwotCi0JCWlmIChzYWE3MTkxX3JlYWRfc3RhdHVzKGNsaWVudCwgJnN0YXR1cykpIHsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JCWlmICgoc3RhdHVzICYgU0FBNzE5MV9TVEFUVVNfSExDSykgPT0gMCkKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19HT09EOwotCQlpZiAoc3RhdHVzICYgU0FBNzE5MV9TVEFUVVNfQ09ERSkKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19DT0xPUjsKLQkJc3dpdGNoIChkZWNvZGVyLT5ub3JtKSB7Ci0JCWNhc2UgU0FBNzE5MV9OT1JNX05UU0M6Ci0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKLQkJCWJyZWFrOwotCQljYXNlIFNBQTcxOTFfTk9STV9QQUw6Ci0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfUEFMOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0FBNzE5MV9OT1JNX1NFQ0FNOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1NFQ0FNOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0FBNzE5MV9OT1JNX0FVVE86Ci0JCWRlZmF1bHQ6Ci0JCQlpZiAoc3RhdHVzICYgU0FBNzE5MV9TVEFUVVNfRklEVCkKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKLQkJCWVsc2UKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfUEFMOwotCQkJYnJlYWs7Ci0JCX0KLQkJKmlhcmcgPSByZXM7Ci0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfU0VUX05PUk06IHsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXN3aXRjaCAoKmlhcmcpIHsKLQkJY2FzZSBWSURFT19NT0RFX0FVVE86Ci0JCQlyZXR1cm4gc2FhNzE5MV9hdXRvZGV0ZWN0X25vcm0oY2xpZW50KTsKLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCXJldHVybiBzYWE3MTkxX3NldF9ub3JtKGNsaWVudCwgU0FBNzE5MV9OT1JNX1BBTCk7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJcmV0dXJuIHNhYTcxOTFfc2V0X25vcm0oY2xpZW50LCBTQUE3MTkxX05PUk1fTlRTQyk7Ci0JCWNhc2UgVklERU9fTU9ERV9TRUNBTToKLQkJCXJldHVybiBzYWE3MTkxX3NldF9ub3JtKGNsaWVudCwgU0FBNzE5MV9OT1JNX1NFQ0FNKTsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQlzd2l0Y2ggKGNsaWVudC0+YWRhcHRlci0+aWQpIHsKLQkJY2FzZSBJMkNfSFdfU0dJX1ZJTk86Ci0JCQlyZXR1cm4gc2FhNzE5MV9zZXRfaW5wdXQoY2xpZW50LCAqaWFyZyk7Ci0JCWRlZmF1bHQ6Ci0JCQlpZiAoKmlhcmcgIT0gMCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6IHsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCi0JCWlmICgqaWFyZyAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDogewotCQkvKiBBbHdheXMgZW5hYmxlZCAqLwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOiB7Ci0JCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7Ci0JCXVuc2lnbmVkIHZhbDsKLQkJaW50IGVycjsKLQotCQl2YWwgPSAocGljLT5odWUgPj4gOCkgLSAweDgwOwotCi0JCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfSFVFQywgdmFsKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiAtRUlPOwotCi0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfU0FBNzE5MV9HRVRfU1RBVFVTOiB7Ci0JCXN0cnVjdCBzYWE3MTkxX3N0YXR1cyAqc3RhdHVzID0gYXJnOwotCQl1OCBzdGF0dXNfcmVnOwotCi0JCWlmIChzYWE3MTkxX3JlYWRfc3RhdHVzKGNsaWVudCwgJnN0YXR1c19yZWcpKQotCQkJcmV0dXJuIC1FSU87Ci0KLQkJc3RhdHVzLT5zaWduYWwgPSAoKHN0YXR1c19yZWcgJiBTQUE3MTkxX1NUQVRVU19ITENLKSA9PSAwKQotCQkJPyAxIDogMDsKLQkJc3RhdHVzLT5zaWduYWxfNjBoeiA9IChzdGF0dXNfcmVnICYgU0FBNzE5MV9TVEFUVVNfRklEVCkKLQkJCT8gMSA6IDA7Ci0JCXN0YXR1cy0+Y29sb3IgPSAoc3RhdHVzX3JlZyAmIFNBQTcxOTFfU1RBVFVTX0NPREUpID8gMSA6IDA7Ci0KLQkJc3RhdHVzLT5pbnB1dCA9IGRlY29kZXItPmlucHV0OwotCQlzdGF0dXMtPm5vcm0gPSBkZWNvZGVyLT5ub3JtOwotCi0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfU0FBNzE5MV9TRVRfTk9STTogewotCQlpbnQgKm5vcm0gPSBhcmc7Ci0KLQkJc3dpdGNoICgqbm9ybSkgewotCQljYXNlIFNBQTcxOTFfTk9STV9BVVRPOgotCQkJcmV0dXJuIHNhYTcxOTFfYXV0b2RldGVjdF9ub3JtKGNsaWVudCk7Ci0JCWNhc2UgU0FBNzE5MV9OT1JNX0FVVE9fRVhUOgotCQkJcmV0dXJuIHNhYTcxOTFfYXV0b2RldGVjdF9ub3JtX2V4dGVuZGVkKGNsaWVudCk7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gc2FhNzE5MV9zZXRfbm9ybShjbGllbnQsICpub3JtKTsKLQkJfQotCX0KLQljYXNlIERFQ09ERVJfU0FBNzE5MV9HRVRfQ09OVFJPTDogewotCQlyZXR1cm4gc2FhNzE5MV9nZXRfY29udHJvbChjbGllbnQsIGFyZyk7Ci0JfQotCWNhc2UgREVDT0RFUl9TQUE3MTkxX1NFVF9DT05UUk9MOiB7Ci0JCXJldHVybiBzYWE3MTkxX3NldF9jb250cm9sKGNsaWVudCwgYXJnKTsKLQl9Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxOTEgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgCT0gInNhYTcxOTEiLAotCX0sCi0JLmlkCQk9IEkyQ19EUklWRVJJRF9TQUE3MTkxLAotCS5hdHRhY2hfYWRhcHRlciA9IHNhYTcxOTFfcHJvYmUsCi0JLmRldGFjaF9jbGllbnQJPSBzYWE3MTkxX2RldGFjaCwKLQkuY29tbWFuZAk9IHNhYTcxOTFfY29tbWFuZAorc3RhdGljIGludCBzYWE3MTkxX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19zYWE3MTkxKHNkKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzYWE3MTkxX2lkW10gPSB7CisJeyAic2FhNzE5MSIsIDAgfSwKKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2FhNzE5MV9pZCk7CiAKLXN0YXRpYyBpbnQgc2FhNzE5MV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxOTEpOwotfQotCi1zdGF0aWMgdm9pZCBzYWE3MTkxX2V4aXQodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTkxKTsKLX0KLQotbW9kdWxlX2luaXQoc2FhNzE5MV9pbml0KTsKLW1vZHVsZV9leGl0KHNhYTcxOTFfZXhpdCk7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAic2FhNzE5MSIsCisJLnByb2JlID0gc2FhNzE5MV9wcm9iZSwKKwkucmVtb3ZlID0gc2FhNzE5MV9yZW1vdmUsCisJLmlkX3RhYmxlID0gc2FhNzE5MV9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxOTEuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE5MS5oCmluZGV4IGEyMzEwZGEuLjgwM2M3NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE5MS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE5MS5oCkBAIC0xNzYsMTEgKzE3Niw5IEBACiAjZGVmaW5lIFNBQTcxOTFfSU5QVVRfQ09NUE9TSVRFCTAKICNkZWZpbmUgU0FBNzE5MV9JTlBVVF9TVklERU8JMQogCi0jZGVmaW5lIFNBQTcxOTFfTk9STV9BVVRPCTAKICNkZWZpbmUgU0FBNzE5MV9OT1JNX1BBTAkxCiAjZGVmaW5lIFNBQTcxOTFfTk9STV9OVFNDCTIKICNkZWZpbmUgU0FBNzE5MV9OT1JNX1NFQ0FNCTMKLSNkZWZpbmUgU0FBNzE5MV9OT1JNX0FVVE9fRVhUCTQJLyogZXh0ZW5kZWQgYXV0by1kZXRlY3Rpb24gKi8KIAogc3RydWN0IHNhYTcxOTFfc3RhdHVzIHsKIAkvKiAwPW5vIHNpZ25hbCwgMT1zaWduYWwgZGV0ZWN0ZWQgKi8KQEAgLTIzMiwyNCArMjMwLDE2IEBACiAjZGVmaW5lIFNBQTcxOTFfVk5SX01BWAkJCTB4MDMKICNkZWZpbmUgU0FBNzE5MV9WTlJfREVGQVVMVAkJMHgwMAogCi0jZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9CQU5EUEFTUwkwCi0jZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9CQU5EUEFTU19XRUlHSFQJMQotI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfQ09SSU5HCQkyCi0jZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9GT1JDRV9DT0xPVVIJMwkvKiBib29sZWFuICovCi0jZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9DSFJPTUFfR0FJTgk0Ci0jZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9IVUUJCTUKLSNkZWZpbmUgU0FBNzE5MV9DT05UUk9MX1ZUUkMJCTYJLyogYm9vbGVhbiAqLwotI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfTFVNQV9ERUxBWQk3Ci0jZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9WTlIJCTgKLQotc3RydWN0IHNhYTcxOTFfY29udHJvbCB7Ci0JdTggdHlwZTsKLQlzMzIgdmFsdWU7Ci19OworI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1MJKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDApCisjZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9CQU5EUEFTU19XRUlHSFQJKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDEpCisjZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9DT1JJTkcJCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAyKQorI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfRk9SQ0VfQ09MT1VSCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAzKQorI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfQ0hST01BX0dBSU4JKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDQpCisjZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9WVFJDCQkoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgNSkKKyNkZWZpbmUgU0FBNzE5MV9DT05UUk9MX0xVTUFfREVMQVkJKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDYpCisjZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9WTlIJCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyA3KQogCiAjZGVmaW5lCURFQ09ERVJfU0FBNzE5MV9HRVRfU1RBVFVTCV9JT1IoJ2QnLCAxOTUsIHN0cnVjdCBzYWE3MTkxX3N0YXR1cykKICNkZWZpbmUJREVDT0RFUl9TQUE3MTkxX1NFVF9OT1JNCV9JT1coJ2QnLCAxOTYsIGludCkKLSNkZWZpbmUJREVDT0RFUl9TQUE3MTkxX0dFVF9DT05UUk9MCV9JT1IoJ2QnLCAxOTcsIHN0cnVjdCBzYWE3MTkxX2NvbnRyb2wpCi0jZGVmaW5lCURFQ09ERVJfU0FBNzE5MV9TRVRfQ09OVFJPTAlfSU9XKCdkJywgMTk4LCBzdHJ1Y3Qgc2FhNzE5MV9jb250cm9sKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwppbmRleCBkZGNiODFkLi5iNWUzN2E1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCkBAIC05NCwxMyArOTQsMzcgQEAKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IGxpc3RfaGVhZCBjYXB0dXJlOwogCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKmFjdGl2ZTsKLQlpbnQgaXNfaW50ZXJsYWNlOworCWludCBpc19pbnRlcmxhY2VkOwogCiAJc3RydWN0IHNoX21vYmlsZV9jZXVfaW5mbyAqcGRhdGE7CiAKIAljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqY2FtZXJhX2ZtdDsKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1ha2VfYnVzX3BhcmFtKHN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWZsYWdzID0gU09DQU1fTUFTVEVSIHwKKwkJU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwKKwkJU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfAorCQlTT0NBTV9IU1lOQ19BQ1RJVkVfTE9XIHwKKwkJU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfAorCQlTT0NBTV9WU1lOQ19BQ1RJVkVfTE9XIHwKKwkJU09DQU1fREFUQV9BQ1RJVkVfSElHSDsKKworCWlmIChwY2Rldi0+cGRhdGEtPmZsYWdzICYgU0hfQ0VVX0ZMQUdfVVNFXzhCSVRfQlVTKQorCQlmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfODsKKworCWlmIChwY2Rldi0+cGRhdGEtPmZsYWdzICYgU0hfQ0VVX0ZMQUdfVVNFXzE2QklUX0JVUykKKwkJZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzE2OworCisJaWYgKGZsYWdzICYgU09DQU1fREFUQVdJRFRIX01BU0spCisJCXJldHVybiBmbGFnczsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBjZXVfd3JpdGUoc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwcml2LAogCQkgICAgICB1bnNpZ25lZCBsb25nIHJlZ19vZmZzLCB1MzIgZGF0YSkKIHsKQEAgLTE1MCw2ICsxNzQsNyBAQAogCWlmIChpbl9pbnRlcnJ1cHQoKSkKIAkJQlVHKCk7CiAKKwl2aWRlb2J1Zl93YWl0b24oJmJ1Zi0+dmIsIDAsIDApOwogCXZpZGVvYnVmX2RtYV9jb250aWdfZnJlZSh2cSwgJmJ1Zi0+dmIpOwogCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgZnJlZWRcbiIsIF9fZnVuY19fKTsKIAlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfTkVFRFNfSU5JVDsKQEAgLTE4MSw3ICsyMDYsNyBAQAogCiAJcGh5c19hZGRyX3RvcCA9IHZpZGVvYnVmX3RvX2RtYV9jb250aWcocGNkZXYtPmFjdGl2ZSk7CiAJY2V1X3dyaXRlKHBjZGV2LCBDREFZUiwgcGh5c19hZGRyX3RvcCk7Ci0JaWYgKHBjZGV2LT5pc19pbnRlcmxhY2UpIHsKKwlpZiAocGNkZXYtPmlzX2ludGVybGFjZWQpIHsKIAkJcGh5c19hZGRyX2JvdHRvbSA9IHBoeXNfYWRkcl90b3AgKyBpY2QtPndpZHRoOwogCQljZXVfd3JpdGUocGNkZXYsIENEQllSLCBwaHlzX2FkZHJfYm90dG9tKTsKIAl9CkBAIC0xOTMsNyArMjE4LDcgQEAKIAljYXNlIFY0TDJfUElYX0ZNVF9OVjYxOgogCQlwaHlzX2FkZHJfdG9wICs9IGljZC0+d2lkdGggKiBpY2QtPmhlaWdodDsKIAkJY2V1X3dyaXRlKHBjZGV2LCBDREFDUiwgcGh5c19hZGRyX3RvcCk7Ci0JCWlmIChwY2Rldi0+aXNfaW50ZXJsYWNlKSB7CisJCWlmIChwY2Rldi0+aXNfaW50ZXJsYWNlZCkgewogCQkJcGh5c19hZGRyX2JvdHRvbSA9IHBoeXNfYWRkcl90b3AgKyBpY2QtPndpZHRoOwogCQkJY2V1X3dyaXRlKHBjZGV2LCBDREJDUiwgcGh5c19hZGRyX2JvdHRvbSk7CiAJCX0KQEAgLTM5Niw3ICs0MjEsNyBAQAogCiAJY2FtZXJhX2ZsYWdzID0gaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbShpY2QpOwogCWNvbW1vbl9mbGFncyA9IHNvY19jYW1lcmFfYnVzX3BhcmFtX2NvbXBhdGlibGUoY2FtZXJhX2ZsYWdzLAotCQkJCQkJICAgICAgIHBjZGV2LT5wZGF0YS0+ZmxhZ3MpOworCQkJCQkJICAgICAgIG1ha2VfYnVzX3BhcmFtKHBjZGV2KSk7CiAJaWYgKCFjb21tb25fZmxhZ3MpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC00NTcsNyArNDgyLDcgQEAKIAljZXVfd3JpdGUocGNkZXYsIENBTUNSLCB2YWx1ZSk7CiAKIAljZXVfd3JpdGUocGNkZXYsIENBUENSLCAweDAwMzAwMDAwKTsKLQljZXVfd3JpdGUocGNkZXYsIENBSUZSLCAocGNkZXYtPmlzX2ludGVybGFjZSkgPyAweDEwMSA6IDApOworCWNldV93cml0ZShwY2RldiwgQ0FJRlIsIHBjZGV2LT5pc19pbnRlcmxhY2VkID8gMHgxMDEgOiAwKTsKIAogCW1kZWxheSgxKTsKIApAQCAtNDczLDcgKzQ5OCw3IEBACiAJfQogCiAJaGVpZ2h0ID0gaWNkLT5oZWlnaHQ7Ci0JaWYgKHBjZGV2LT5pc19pbnRlcmxhY2UpIHsKKwlpZiAocGNkZXYtPmlzX2ludGVybGFjZWQpIHsKIAkJaGVpZ2h0IC89IDI7CiAJCWNkd2RyX3dpZHRoICo9IDI7CiAJfQpAQCAtNTE3LDcgKzU0Miw3IEBACiAKIAljYW1lcmFfZmxhZ3MgPSBpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtKGljZCk7CiAJY29tbW9uX2ZsYWdzID0gc29jX2NhbWVyYV9idXNfcGFyYW1fY29tcGF0aWJsZShjYW1lcmFfZmxhZ3MsCi0JCQkJCQkgICAgICAgcGNkZXYtPnBkYXRhLT5mbGFncyk7CisJCQkJCQkgICAgICAgbWFrZV9idXNfcGFyYW0ocGNkZXYpKTsKIAlpZiAoIWNvbW1vbl9mbGFncykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTU2MiwxMSArNTg3LDI5IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiAwOwogCisJLyogQmVnaW5uaW5nIG9mIGEgcGFzcyAqLworCWlmICghaWR4KQorCQlpY2QtPmhvc3RfcHJpdiA9IE5VTEw7CisKIAlzd2l0Y2ggKGljZC0+Zm9ybWF0c1tpZHhdLmZvdXJjYykgewogCWNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6CiAJY2FzZSBWNEwyX1BJWF9GTVRfVllVWToKIAljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgogCWNhc2UgVjRMMl9QSVhfRk1UX1lWWVU6CisJCWlmIChpY2QtPmhvc3RfcHJpdikKKwkJCWdvdG8gYWRkX3NpbmdsZV9mb3JtYXQ7CisKKwkJLyoKKwkJICogT3VyIGNhc2UgaXMgc2ltcGxlIHNvIGZhcjogZm9yIGFueSBvZiB0aGUgYWJvdmUgZm91ciBjYW1lcmEKKwkJICogZm9ybWF0cyB3ZSBhZGQgYWxsIG91ciBmb3VyIHN5bnRoZXNpemVkIE5WKiBmb3JtYXRzLCBzbywKKwkJICoganVzdCBtYXJraW5nIHRoZSBkZXZpY2Ugd2l0aCBhIHNpbmdsZSBmbGFnIHN1ZmZpY2VzLiBJZgorCQkgKiB0aGUgZm9ybWF0IGdlbmVyYXRpb24gcnVsZXMgYXJlIG1vcmUgY29tcGxleCwgeW91IHdvdWxkIGhhdmUKKwkJICogdG8gYWN0dWFsbHkgaGFuZyB5b3VyIGFscmVhZHkgYWRkZWQgLyBjb3VudGVkIGZvcm1hdHMgb250bworCQkgKiB0aGUgaG9zdF9wcml2IHBvaW50ZXIgYW5kIGNoZWNrIHdoZXRoZXIgdGhlIGZvcm1hdCB5b3UncmUKKwkJICogZ29pbmcgdG8gYWRkIG5vdyBpcyBhbHJlYWR5IHRoZXJlLgorCQkgKi8KKwkJaWNkLT5ob3N0X3ByaXYgPSAodm9pZCAqKXNoX21vYmlsZV9jZXVfZm9ybWF0czsKKwogCQluID0gQVJSQVlfU0laRShzaF9tb2JpbGVfY2V1X2Zvcm1hdHMpOwogCQlmb3JtYXRzICs9IG47CiAJCWZvciAoayA9IDA7IHhsYXRlICYmIGsgPCBuOyBrKyspIHsKQEAgLTU3OSw2ICs2MjIsNyBAQAogCQkJCWljZC0+Zm9ybWF0c1tpZHhdLm5hbWUpOwogCQl9CiAJZGVmYXVsdDoKK2FkZF9zaW5nbGVfZm9ybWF0OgogCQkvKiBHZW5lcmljIHBhc3MtdGhyb3VnaCAqLwogCQlmb3JtYXRzKys7CiAJCWlmICh4bGF0ZSkgewpAQCAtNTk1LDI0ICs2MzksMzAgQEAKIAlyZXR1cm4gZm9ybWF0czsKIH0KIAorc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCSAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3sKKwlyZXR1cm4gaWNkLT5vcHMtPnNldF9jcm9wKGljZCwgcmVjdCk7Cit9CisKIHN0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJCSBfX3UzMiBwaXhmbXQsIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCisJCQkJIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCV9fdTMyIHBpeGZtdCA9IGYtPmZtdC5waXgucGl4ZWxmb3JtYXQ7CiAJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZTsKKwlzdHJ1Y3QgdjRsMl9mb3JtYXQgY2FtX2YgPSAqZjsKIAlpbnQgcmV0OwogCi0JaWYgKCFwaXhmbXQpCi0JCXJldHVybiBpY2QtPm9wcy0+c2V0X2ZtdChpY2QsIHBpeGZtdCwgcmVjdCk7Ci0KIAl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4Zm10KTsKIAlpZiAoIXhsYXRlKSB7CiAJCWRldl93YXJuKCZpY2ktPmRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeGZtdCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldCA9IGljZC0+b3BzLT5zZXRfZm10KGljZCwgeGxhdGUtPmNhbV9mbXQtPmZvdXJjYywgcmVjdCk7CisJY2FtX2YuZm10LnBpeC5waXhlbGZvcm1hdCA9IHhsYXRlLT5jYW1fZm10LT5mb3VyY2M7CisJcmV0ID0gaWNkLT5vcHMtPnNldF9mbXQoaWNkLCAmY2FtX2YpOwogCiAJaWYgKCFyZXQpIHsKIAkJaWNkLT5idXN3aWR0aCA9IHhsYXRlLT5idXN3aWR0aDsKQEAgLTY2MiwxMyArNzEyLDEzIEBACiAKIAlzd2l0Y2ggKGYtPmZtdC5waXguZmllbGQpIHsKIAljYXNlIFY0TDJfRklFTERfSU5URVJMQUNFRDoKLQkJcGNkZXYtPmlzX2ludGVybGFjZSA9IDE7CisJCXBjZGV2LT5pc19pbnRlcmxhY2VkID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0ZJRUxEX0FOWToKIAkJZi0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKIAkJLyogZmFsbC10aHJvdWdoICovCiAJY2FzZSBWNEwyX0ZJRUxEX05PTkU6Ci0JCXBjZGV2LT5pc19pbnRlcmxhY2UgPSAwOworCQlwY2Rldi0+aXNfaW50ZXJsYWNlZCA9IDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CkBAIC03MzQsNyArNzg0LDggQEAKIAkJCQkgICAgICAgJnNoX21vYmlsZV9jZXVfdmlkZW9idWZfb3BzLAogCQkJCSAgICAgICAmaWNpLT5kZXYsICZwY2Rldi0+bG9jaywKIAkJCQkgICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAotCQkJCSAgICAgICBWNEwyX0ZJRUxEX0FOWSwKKwkJCQkgICAgICAgcGNkZXYtPmlzX2ludGVybGFjZWQgPworCQkJCSAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgOiBWNEwyX0ZJRUxEX05PTkUsCiAJCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9idWZmZXIpLAogCQkJCSAgICAgICBpY2QpOwogfQpAQCAtNzQ0LDYgKzc5NSw3IEBACiAJLmFkZAkJPSBzaF9tb2JpbGVfY2V1X2FkZF9kZXZpY2UsCiAJLnJlbW92ZQkJPSBzaF9tb2JpbGVfY2V1X3JlbW92ZV9kZXZpY2UsCiAJLmdldF9mb3JtYXRzCT0gc2hfbW9iaWxlX2NldV9nZXRfZm9ybWF0cywKKwkuc2V0X2Nyb3AJPSBzaF9tb2JpbGVfY2V1X3NldF9jcm9wLAogCS5zZXRfZm10CT0gc2hfbW9iaWxlX2NldV9zZXRfZm10LAogCS50cnlfZm10CT0gc2hfbW9iaWxlX2NldV90cnlfZm10LAogCS5yZXFidWZzCT0gc2hfbW9iaWxlX2NldV9yZXFidWZzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmgKaW5kZXggOGNiMzQ1Ny4uMzhhNzE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oCkBAIC05Niw5ICs5Niw3IEBACiAjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQSAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX01PRFVMRQogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MDQ1ZSwgMHgwMGY1LCBCUklER0VfU045QzEwNSksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwNDVlLCAweDAwZjcsIEJSSURHRV9TTjlDMTA1KSwgfSwKLSNlbmRpZgogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzI3LCBCUklER0VfU045QzEwNSksIH0sCi0jaWYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQSAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX01PRFVMRQogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzI4LCBCUklER0VfU045QzEwNSksIH0sCiAjZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBjMCwgQlJJREdFX1NOOUMxMDUpLCB9LApAQCAtMTIzLDcgKzEyMSw5IEBACiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxM2EsIEJSSURHRV9TTjlDMTIwKSwgfSwKICNlbmRpZgogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNiLCBCUklER0VfU045QzEyMCksIH0sCisjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQSAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX01PRFVMRQogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNjLCBCUklER0VfU045QzEyMCksIH0sCisjZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjEzZSwgQlJJREdFX1NOOUMxMjApLCB9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKaW5kZXggZmNiMDVmMC4uNmQ4YmZkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKQEAgLTMwLDYgKzMwLDEwIEBACiAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtY29yZS5oPgogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KIAorLyogRGVmYXVsdCB0byBWR0EgcmVzb2x1dGlvbiAqLworI2RlZmluZSBERUZBVUxUX1dJRFRICTY0MAorI2RlZmluZSBERUZBVUxUX0hFSUdIVAk0ODAKKwogc3RhdGljIExJU1RfSEVBRChob3N0cyk7CiBzdGF0aWMgTElTVF9IRUFEKGRldmljZXMpOwogc3RhdGljIERFRklORV9NVVRFWChsaXN0X2xvY2spOwpAQCAtMjU2LDYgKzI2MCw0NiBAQAogCXZmcmVlKGljZC0+dXNlcl9mb3JtYXRzKTsKIH0KIAorLyogQ2FsbGVkIHdpdGggLnZiX2xvY2sgaGVsZCAqLworc3RhdGljIGludCBzb2NfY2FtZXJhX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmLAorCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJaW50IHJldDsKKworCS8qIFdlIGFsd2F5cyBjYWxsIHRyeV9mbXQoKSBiZWZvcmUgc2V0X2ZtdCgpIG9yIHNldF9jcm9wKCkgKi8KKwlyZXQgPSBpY2ktPm9wcy0+dHJ5X2ZtdChpY2QsIGYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gaWNpLT5vcHMtPnNldF9mbXQoaWNkLCBmKTsKKwlpZiAocmV0IDwgMCkgeworCQlyZXR1cm4gcmV0OworCX0gZWxzZSBpZiAoIWljZC0+Y3VycmVudF9mbXQgfHwKKwkJICAgaWNkLT5jdXJyZW50X2ZtdC0+Zm91cmNjICE9IHBpeC0+cGl4ZWxmb3JtYXQpIHsKKwkJZGV2X2VycigmaWNpLT5kZXYsCisJCQkiSG9zdCBkcml2ZXIgaGFzbid0IHNldCB1cCBjdXJyZW50IGZvcm1hdCBjb3JyZWN0bHkhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWNkLT53aWR0aAkJPSBwaXgtPndpZHRoOworCWljZC0+aGVpZ2h0CQk9IHBpeC0+aGVpZ2h0OworCWljZi0+dmJfdmlkcS5maWVsZAk9CisJCWljZC0+ZmllbGQJPSBwaXgtPmZpZWxkOworCisJaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlkZXZfd2FybigmaWNkLT5kZXYsICJBdHRlbnRpb24hIFdyb25nIGJ1Zi10eXBlICVkXG4iLAorCQkJIGYtPnR5cGUpOworCisJZGV2X2RiZygmaWNkLT5kZXYsICJzZXQgd2lkdGg6ICVkIGhlaWdodDogJWRcbiIsCisJCWljZC0+d2lkdGgsIGljZC0+aGVpZ2h0KTsKKworCS8qIHNldCBwaHlzaWNhbCBidXMgcGFyYW1ldGVycyAqLworCXJldHVybiBpY2ktPm9wcy0+c2V0X2J1c19wYXJhbShpY2QsIHBpeC0+cGl4ZWxmb3JtYXQpOworfQorCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwpAQCAtMjk3LDE0ICszNDEsMjggQEAKIAogCS8qIE5vdyB3ZSByZWFsbHkgaGF2ZSB0byBhY3RpdmF0ZSB0aGUgY2FtZXJhICovCiAJaWYgKGljZC0+dXNlX2NvdW50ID09IDEpIHsKLQkJcmV0ID0gc29jX2NhbWVyYV9pbml0X3VzZXJfZm9ybWF0cyhpY2QpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gZWl1Zm10OworCQkvKiBSZXN0b3JlIHBhcmFtZXRlcnMgYmVmb3JlIHRoZSBsYXN0IGNsb3NlKCkgcGVyIFY0TDIgQVBJICovCisJCXN0cnVjdCB2NGwyX2Zvcm1hdCBmID0geworCQkJLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkuZm10LnBpeCA9IHsKKwkJCQkud2lkdGgJCT0gaWNkLT53aWR0aCwKKwkJCQkuaGVpZ2h0CQk9IGljZC0+aGVpZ2h0LAorCQkJCS5maWVsZAkJPSBpY2QtPmZpZWxkLAorCQkJCS5waXhlbGZvcm1hdAk9IGljZC0+Y3VycmVudF9mbXQtPmZvdXJjYywKKwkJCQkuY29sb3JzcGFjZQk9IGljZC0+Y3VycmVudF9mbXQtPmNvbG9yc3BhY2UsCisJCQl9LAorCQl9OworCiAJCXJldCA9IGljaS0+b3BzLT5hZGQoaWNkKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWRldl9lcnIoJmljZC0+ZGV2LCAiQ291bGRuJ3QgYWN0aXZhdGUgdGhlIGNhbWVyYTogJWRcbiIsIHJldCk7CiAJCQlnb3RvIGVpY2lhZGQ7CiAJCX0KKworCQkvKiBUcnkgdG8gY29uZmlndXJlIHdpdGggZGVmYXVsdCBwYXJhbWV0ZXJzICovCisJCXJldCA9IHNvY19jYW1lcmFfc2V0X2ZtdChpY2YsICZmKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVzZm10OwogCX0KIAogCW11dGV4X3VubG9jaygmaWNkLT52aWRlb19sb2NrKTsKQEAgLTMxNiwxMCArMzc0LDEzIEBACiAKIAlyZXR1cm4gMDsKIAotCS8qIEZpcnN0IHR3byBlcnJvcnMgYXJlIGVudGVyZWQgd2l0aCB0aGUgLnZpZGVvX2xvY2sgaGVsZCAqLworCS8qCisJICogRmlyc3QgdGhyZWUgZXJyb3JzIGFyZSBlbnRlcmVkIHdpdGggdGhlIC52aWRlb19sb2NrIGhlbGQKKwkgKiBhbmQgdXNlX2NvdW50ID09IDEKKwkgKi8KK2VzZm10OgorCWljaS0+b3BzLT5yZW1vdmUoaWNkKTsKIGVpY2lhZGQ6Ci0Jc29jX2NhbWVyYV9mcmVlX3VzZXJfZm9ybWF0cyhpY2QpOwotZWl1Zm10OgogCWljZC0+dXNlX2NvdW50LS07CiAJbXV0ZXhfdW5sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwogCW1vZHVsZV9wdXQoaWNpLT5vcHMtPm93bmVyKTsKQEAgLTMzOSwxMCArNDAwLDkgQEAKIAogCW11dGV4X2xvY2soJmljZC0+dmlkZW9fbG9jayk7CiAJaWNkLT51c2VfY291bnQtLTsKLQlpZiAoIWljZC0+dXNlX2NvdW50KSB7CisJaWYgKCFpY2QtPnVzZV9jb3VudCkKIAkJaWNpLT5vcHMtPnJlbW92ZShpY2QpOwotCQlzb2NfY2FtZXJhX2ZyZWVfdXNlcl9mb3JtYXRzKGljZCk7Ci0JfQorCiAJbXV0ZXhfdW5sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwogCiAJbW9kdWxlX3B1dChpY2QtPm9wcy0+b3duZXIpOwpAQCAtNDE1LDE4ICs0NzUsMTAgQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBpY2YtPmljZDsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKLQlfX3UzMiBwaXhmbXQgPSBwaXgtPnBpeGVsZm9ybWF0OwogCWludCByZXQ7Ci0Jc3RydWN0IHY0bDJfcmVjdCByZWN0OwogCiAJV0FSTl9PTihwcml2ICE9IGZpbGUtPnByaXZhdGVfZGF0YSk7CiAKLQlyZXQgPSBzb2NfY2FtZXJhX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBwcml2LCBmKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCW11dGV4X2xvY2soJmljZi0+dmJfdmlkcS52Yl9sb2NrKTsKIAogCWlmICh2aWRlb2J1Zl9xdWV1ZV9pc19idXN5KCZpY2YtPnZiX3ZpZHEpKSB7CkBAIC00MzUsMzMgKzQ4Nyw3IEBACiAJCWdvdG8gdW5sb2NrOwogCX0KIAotCXJlY3QubGVmdAk9IGljZC0+eF9jdXJyZW50OwotCXJlY3QudG9wCT0gaWNkLT55X2N1cnJlbnQ7Ci0JcmVjdC53aWR0aAk9IHBpeC0+d2lkdGg7Ci0JcmVjdC5oZWlnaHQJPSBwaXgtPmhlaWdodDsKLQlyZXQgPSBpY2ktPm9wcy0+c2V0X2ZtdChpY2QsIHBpeC0+cGl4ZWxmb3JtYXQsICZyZWN0KTsKLQlpZiAocmV0IDwgMCkgewotCQlnb3RvIHVubG9jazsKLQl9IGVsc2UgaWYgKCFpY2QtPmN1cnJlbnRfZm10IHx8Ci0JCSAgIGljZC0+Y3VycmVudF9mbXQtPmZvdXJjYyAhPSBwaXhmbXQpIHsKLQkJZGV2X2VycigmaWNpLT5kZXYsCi0JCQkiSG9zdCBkcml2ZXIgaGFzbid0IHNldCB1cCBjdXJyZW50IGZvcm1hdCBjb3JyZWN0bHkhXG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byB1bmxvY2s7Ci0JfQotCi0JaWNkLT53aWR0aAkJPSByZWN0LndpZHRoOwotCWljZC0+aGVpZ2h0CQk9IHJlY3QuaGVpZ2h0OwotCWljZi0+dmJfdmlkcS5maWVsZAk9IHBpeC0+ZmllbGQ7Ci0JaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlkZXZfd2FybigmaWNkLT5kZXYsICJBdHRlbnRpb24hIFdyb25nIGJ1Zi10eXBlICVkXG4iLAotCQkJIGYtPnR5cGUpOwotCi0JZGV2X2RiZygmaWNkLT5kZXYsICJzZXQgd2lkdGg6ICVkIGhlaWdodDogJWRcbiIsCi0JCWljZC0+d2lkdGgsIGljZC0+aGVpZ2h0KTsKLQotCS8qIHNldCBwaHlzaWNhbCBidXMgcGFyYW1ldGVycyAqLwotCXJldCA9IGljaS0+b3BzLT5zZXRfYnVzX3BhcmFtKGljZCwgcGl4Zm10KTsKKwlyZXQgPSBzb2NfY2FtZXJhX3NldF9mbXQoaWNmLCBmKTsKIAogdW5sb2NrOgogCW11dGV4X3VubG9jaygmaWNmLT52Yl92aWRxLnZiX2xvY2spOwpAQCAtNjQ4LDggKzY3NCw4IEBACiAJYS0+Ym91bmRzLmhlaWdodAkJPSBpY2QtPmhlaWdodF9tYXg7CiAJYS0+ZGVmcmVjdC5sZWZ0CQkJPSBpY2QtPnhfbWluOwogCWEtPmRlZnJlY3QudG9wCQkJPSBpY2QtPnlfbWluOwotCWEtPmRlZnJlY3Qud2lkdGgJCT0gNjQwOwotCWEtPmRlZnJlY3QuaGVpZ2h0CQk9IDQ4MDsKKwlhLT5kZWZyZWN0LndpZHRoCQk9IERFRkFVTFRfV0lEVEg7CisJYS0+ZGVmcmVjdC5oZWlnaHQJCT0gREVGQVVMVF9IRUlHSFQ7CiAJYS0+cGl4ZWxhc3BlY3QubnVtZXJhdG9yCT0gMTsKIAlhLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvcgk9IDE7CiAKQEAgLTY4NSw3ICs3MTEsNyBAQAogCS8qIENyb3BwaW5nIGlzIGFsbG93ZWQgZHVyaW5nIGEgcnVubmluZyBjYXB0dXJlLCBndWFyZCBjb25zaXN0ZW5jeSAqLwogCW11dGV4X2xvY2soJmljZi0+dmJfdmlkcS52Yl9sb2NrKTsKIAotCXJldCA9IGljaS0+b3BzLT5zZXRfZm10KGljZCwgMCwgJmEtPmMpOworCXJldCA9IGljaS0+b3BzLT5zZXRfY3JvcChpY2QsICZhLT5jKTsKIAlpZiAoIXJldCkgewogCQlpY2QtPndpZHRoCT0gYS0+Yy53aWR0aDsKIAkJaWNkLT5oZWlnaHQJPSBhLT5jLmhlaWdodDsKQEAgLTg0NCw5ICs4NzAsMTggQEAKIAkJcWN0cmwgPSBzb2NfY2FtZXJhX2ZpbmRfcWN0cmwoaWNkLT5vcHMsIFY0TDJfQ0lEX0VYUE9TVVJFKTsKIAkJaWNkLT5leHBvc3VyZSA9IHFjdHJsID8gcWN0cmwtPmRlZmF1bHRfdmFsdWUgOgogCQkJKHVuc2lnbmVkIHNob3J0KX4wOwotCX0KLQlpY2ktPm9wcy0+cmVtb3ZlKGljZCk7CiAKKwkJcmV0ID0gc29jX2NhbWVyYV9pbml0X3VzZXJfZm9ybWF0cyhpY2QpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZWl1Zm10OworCisJCWljZC0+aGVpZ2h0CT0gREVGQVVMVF9IRUlHSFQ7CisJCWljZC0+d2lkdGgJPSBERUZBVUxUX1dJRFRIOworCQlpY2QtPmZpZWxkCT0gVjRMMl9GSUVMRF9BTlk7CisJfQorCitlaXVmbXQ6CisJaWNpLT5vcHMtPnJlbW92ZShpY2QpOwogZWlhZGQ6CiAJbXV0ZXhfdW5sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwogCW1vZHVsZV9wdXQoaWNpLT5vcHMtPm93bmVyKTsKQEAgLTg2NSw2ICs5MDAsOCBAQAogCWlmIChpY2QtPm9wcy0+cmVtb3ZlKQogCQlpY2QtPm9wcy0+cmVtb3ZlKGljZCk7CiAKKwlzb2NfY2FtZXJhX2ZyZWVfdXNlcl9mb3JtYXRzKGljZCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTE4LDYgKzk1NSw3IEBACiAJaWYgKCFpY2kgfHwgIWljaS0+b3BzIHx8CiAJICAgICFpY2ktPm9wcy0+dHJ5X2ZtdCB8fAogCSAgICAhaWNpLT5vcHMtPnNldF9mbXQgfHwKKwkgICAgIWljaS0+b3BzLT5zZXRfY3JvcCB8fAogCSAgICAhaWNpLT5vcHMtPnNldF9idXNfcGFyYW0gfHwKIAkgICAgIWljaS0+b3BzLT5xdWVyeWNhcCB8fAogCSAgICAhaWNpLT5vcHMtPmluaXRfdmlkZW9idWYgfHwKQEAgLTk5OCw2ICsxMDM2LDcgQEAKIAkgICAgIWljZC0+b3BzLT5yZWxlYXNlIHx8CiAJICAgICFpY2QtPm9wcy0+c3RhcnRfY2FwdHVyZSB8fAogCSAgICAhaWNkLT5vcHMtPnN0b3BfY2FwdHVyZSB8fAorCSAgICAhaWNkLT5vcHMtPnNldF9jcm9wIHx8CiAJICAgICFpY2QtPm9wcy0+c2V0X2ZtdCB8fAogCSAgICAhaWNkLT5vcHMtPnRyeV9mbXQgfHwKIAkgICAgIWljZC0+b3BzLT5xdWVyeV9idXNfcGFyYW0gfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKaW5kZXggMDEzYWIwNi4uYzQ4Njc2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKQEAgLTc5LDggKzc5LDE0IEBACiAJcmV0dXJuIHAtPmJ1c19wYXJhbTsKIH0KIAorc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCQlzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1fc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCQkgICAgICAgX191MzIgcGl4Zm10LCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorCQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMjUsNiArMTMxLDcgQEAKIAkucmVsZWFzZQkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3JlbGVhc2UsCiAJLnN0YXJ0X2NhcHR1cmUJCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9zdGFydF9jYXB0dXJlLAogCS5zdG9wX2NhcHR1cmUJCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9zdG9wX2NhcHR1cmUsCisJLnNldF9jcm9wCQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fc2V0X2Nyb3AsCiAJLnNldF9mbXQJCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9zZXRfZm10LAogCS50cnlfZm10CQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fdHJ5X2ZtdCwKIAkuc2V0X2J1c19wYXJhbQkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3NldF9idXNfcGFyYW0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCmluZGV4IDI2Mzc4Y2YuLjFhNmQzOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCkBAIC05MzMsOCArOTMzLDYgQEAKIHN0YXRpYyBpbnQgc3RrX3ZpZGlvY19lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxwLAogCQl2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXRkKQogewotCWZtdGQtPmZsYWdzID0gMDsKLQogCXN3aXRjaCAoZm10ZC0+aW5kZXgpIHsKIAljYXNlIDA6CiAJCWZtdGQtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1JHQjU2NTsKQEAgLTk5Miw3ICs5OTAsNiBAQAogCXBpeF9mb3JtYXQtPmhlaWdodCA9IHN0a19zaXplc1tpXS5oOwogCXBpeF9mb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOwogCXBpeF9mb3JtYXQtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQjsKLQlwaXhfZm9ybWF0LT5wcml2ID0gMDsKIAlwaXhfZm9ybWF0LT5waXhlbGZvcm1hdCA9IGRldi0+dnNldHRpbmdzLnBhbGV0dGU7CiAJaWYgKGRldi0+dnNldHRpbmdzLnBhbGV0dGUgPT0gVjRMMl9QSVhfRk1UX1NCR0dSOCkKIAkJcGl4X2Zvcm1hdC0+Ynl0ZXNwZXJsaW5lID0gcGl4X2Zvcm1hdC0+d2lkdGg7CkBAIC0xMTE1LDggKzExMTIsNiBAQAogCiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAocmItPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAocmItPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoaXNfc3RyZWFtaW5nKGRldikKQEAgLTExMzksMTYgKzExMzQsMTAgQEAKIHN0YXRpYyBpbnQgc3RrX3ZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCiB7Ci0JaW50IGluZGV4OwogCXN0cnVjdCBzdGtfY2FtZXJhICpkZXYgPSBwcml2OwogCXN0cnVjdCBzdGtfc2lvX2J1ZmZlciAqc2J1ZjsKIAotCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWluZGV4ID0gYnVmLT5pbmRleDsKLQotCWlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gZGV2LT5uX3NidWZzKQorCWlmIChidWYtPmluZGV4IDwgMCB8fCBidWYtPmluZGV4ID49IGRldi0+bl9zYnVmcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAJc2J1ZiA9IGRldi0+c2lvX2J1ZnMgKyBidWYtPmluZGV4OwogCSpidWYgPSBzYnVmLT52NGxidWY7CkBAIC0xMTYxLDggKzExNTAsNiBAQAogCXN0cnVjdCBzdGtfY2FtZXJhICpkZXYgPSBwcml2OwogCXN0cnVjdCBzdGtfc2lvX2J1ZmZlciAqc2J1ZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChidWYtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExODksOCArMTE3Niw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0JaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUKLQkJfHwgIWlzX3N0cmVhbWluZyhkZXYpKQorCWlmICghaXNfc3RyZWFtaW5nKGRldikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLICYmIGxpc3RfZW1wdHkoJmRldi0+c2lvX2Z1bGwpKQpAQCAtMTI0OSwxNiArMTIzNSwxMCBAQAogc3RhdGljIGludCBzdGtfdmlkaW9jX2dfcGFybShzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqc3ApCiB7Ci0JaWYgKHNwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzcC0+cGFybS5jYXB0dXJlLmNhcGFiaWxpdHkgPSAwOwotCXNwLT5wYXJtLmNhcHR1cmUuY2FwdHVyZW1vZGUgPSAwOwogCS8qRklYTUUgVGhpcyBpcyBub3QgY29ycmVjdCAqLwogCXNwLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lLm51bWVyYXRvciA9IDE7CiAJc3AtPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPSAzMDsKIAlzcC0+cGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID0gMjsKLQlzcC0+cGFybS5jYXB0dXJlLmV4dGVuZGVkbW9kZSA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmMKaW5kZXggMjk5OTFkMS4uYjMwYzQ5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmMKQEAgLTUwLDcgKzUwLDcgQEAKIH07CiAKIC8qIGxpc3Qgb2YgaW1hZ2UgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgVENNODI1WCBzZW5zb3IgKi8KLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdjRsMl9mbXRkZXNjIHRjbTgyNXhfZm9ybWF0c1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZtdGRlc2MgdGNtODI1eF9mb3JtYXRzW10gPSB7CiAJewogCQkuZGVzY3JpcHRpb24gPSAiWVVZViAoWVVWIDQ6MjoyKSwgcGFja2VkIiwKIAkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1VZVlksCkBAIC03NiwxNSArNzYsMTUgQEAKICAqIFRDTTgyNVggcmVnaXN0ZXIgY29uZmlndXJhdGlvbiBmb3IgYWxsIGNvbWJpbmF0aW9ucyBvZiBwaXhlbCBmb3JtYXQgYW5kCiAgKiBpbWFnZSBzaXplCiAgKi8KLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgc3VicWNpZgk9CXsgMHgyMCwgVENNODI1WF9QSUNTSVogfTsKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgcWNpZgk9CXsgMHgxOCwgVENNODI1WF9QSUNTSVogfTsKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgY2lmCT0JeyAweDE0LCBUQ004MjVYX1BJQ1NJWiB9OwotY29uc3Qgc3RhdGljIHN0cnVjdCB0Y204MjV4X3JlZyBxcXZnYQk9CXsgMHgwYywgVENNODI1WF9QSUNTSVogfTsKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgcXZnYQk9CXsgMHgwNCwgVENNODI1WF9QSUNTSVogfTsKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgdmdhCT0JeyAweDAwLCBUQ004MjVYX1BJQ1NJWiB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB0Y204MjV4X3JlZyBzdWJxY2lmCT0JeyAweDIwLCBUQ004MjVYX1BJQ1NJWiB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB0Y204MjV4X3JlZyBxY2lmCT0JeyAweDE4LCBUQ004MjVYX1BJQ1NJWiB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB0Y204MjV4X3JlZyBjaWYJPQl7IDB4MTQsIFRDTTgyNVhfUElDU0laIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHRjbTgyNXhfcmVnIHFxdmdhCT0JeyAweDBjLCBUQ004MjVYX1BJQ1NJWiB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB0Y204MjV4X3JlZyBxdmdhCT0JeyAweDA0LCBUQ004MjVYX1BJQ1NJWiB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB0Y204MjV4X3JlZyB2Z2EJPQl7IDB4MDAsIFRDTTgyNVhfUElDU0laIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgeXV2NDIyCT0JeyAweDAwLCBUQ004MjVYX1BJQ0ZNVCB9OwotY29uc3Qgc3RhdGljIHN0cnVjdCB0Y204MjV4X3JlZyByZ2I1NjUJPQl7IDB4MDIsIFRDTTgyNVhfUElDRk1UIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHRjbTgyNXhfcmVnIHl1djQyMgk9CXsgMHgwMCwgVENNODI1WF9QSUNGTVQgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNtODI1eF9yZWcgcmdiNTY1CT0JeyAweDAyLCBUQ004MjVYX1BJQ0ZNVCB9OwogCiAvKiBPdXIgb3duIHNwZWNpZmljIGNvbnRyb2xzICovCiAjZGVmaW5lIFY0TDJfQ0lEX0FMQwkJCQlWNEwyX0NJRF9QUklWQVRFX0JBU0UKQEAgLTI0OCwxMCArMjQ4LDEwIEBACiB9OwogCiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgKnRjbTgyNXhfc2l6X3JlZ1tOVU1fSU1BR0VfU0laRVNdID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNtODI1eF9yZWcgKnRjbTgyNXhfc2l6X3JlZ1tOVU1fSU1BR0VfU0laRVNdID0KIHsgJnN1YnFjaWYsICZxcXZnYSwgJnFjaWYsICZxdmdhLCAmY2lmLCAmdmdhIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgKnRjbTgyNXhfZm10X3JlZ1tOVU1fUElYRUxfRk9STUFUU10gPQorc3RhdGljIGNvbnN0IHN0cnVjdCB0Y204MjV4X3JlZyAqdGNtODI1eF9mbXRfcmVnW05VTV9QSVhFTF9GT1JNQVRTXSA9CiB7ICZ5dXY0MjIsICZyZ2I1NjUgfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmgKaW5kZXggNzcwZWJhYy4uNWI3ZTY5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmgKQEAgLTE4OCw3ICsxODgsNyBAQAogLyogQXJyYXkgb2YgaW1hZ2Ugc2l6ZXMgc3VwcG9ydGVkIGJ5IFRDTTgyNVguICBUaGVzZSBtdXN0IGJlIG9yZGVyZWQgZnJvbQogICogc21hbGxlc3QgaW1hZ2Ugc2l6ZSB0byBsYXJnZXN0LgogICovCi1jb25zdCBzdGF0aWMgc3RydWN0IGNhcHR1cmVfc2l6ZSB0Y204MjV4X3NpemVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNhcHR1cmVfc2l6ZSB0Y204MjV4X3NpemVzW10gPSB7CiAJeyAxMjgsICA5NiB9LCAvKiBzdWJRQ0lGICovCiAJeyAxNjAsIDEyMCB9LCAvKiBRUVZHQSAqLwogCXsgMTc2LCAxNDQgfSwgLyogUUNJRiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE3NDMyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTc0MzIuYwppbmRleCAwYzAyMDU4Li4wMDVmOGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTc0MzIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTc0MzIuYwpAQCAtNTAsNyArNTAsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPG1lZGlhL2kyYy1hZGRyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiAjaWZuZGVmIFZJREVPX0FVRElPX0JBTEFOQ0UKICMgZGVmaW5lIFZJREVPX0FVRElPX0JBTEFOQ0UgMzIKQEAgLTY5LDEzICs2OSw2IEBACiBtb2R1bGVfcGFyYW0obWF4dm9sLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIAogCi0vKiBBZGRyZXNzIHRvIHNjYW4gKEkyQyBhZGRyZXNzIG9mIHRoaXMgY2hpcCkgKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7Ci0JSTJDX0FERFJfVERBNzQzMiA+PiAxLAotCUkyQ19DTElFTlRfRU5ELAotfTsKLQotSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIC8qIFN0cnVjdHVyZSBvZiBhZGRyZXNzIGFuZCBzdWJhZGRyZXNzZXMgZm9yIHRoZSB0ZGE3NDMyICovCiAKQEAgLTQyMSwyMSArNDE0LDE4IEBACiBzdGF0aWMgaW50IHRkYTc0MzJfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7CiAJc3dpdGNoIChxYy0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCA1ODg4MCk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDApOwogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWMpOworCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgMzI3NjgpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB0ZGE3NDMyX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB0ZGE3NDMyX2NvcmVfb3BzID0gewpAQCAtNDk4LDggKzQ4OCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ0ZGE3NDMyIiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfVERBNzQzMiwKLQkuY29tbWFuZCA9IHRkYTc0MzJfY29tbWFuZCwKIAkucHJvYmUgPSB0ZGE3NDMyX3Byb2JlLAogCS5yZW1vdmUgPSB0ZGE3NDMyX3JlbW92ZSwKIAkuaWRfdGFibGUgPSB0ZGE3NDMyX2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuYwppbmRleCA2YWZiNzA1Li5mZTExNTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuYwpAQCAtMzAsOCArMzAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+Ci0jaW5jbHVkZSAidGRhOTg0MC5oIgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEh1bm9sZCA8bWljaGFlbEBtaWh1LmRlPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJ0ZGE5ODQwIGRyaXZlciIpOwpAQCAtNTYsMTEgKzU2LDYgQEAKICNkZWZpbmUgVERBOTg0MF9TRVRfQk9USF9SICAgICAgICAgICAgICAweDE2CiAjZGVmaW5lIFREQTk4NDBfU0VUX0VYVEVSTkFMICAgICAgICAgICAgMHg3YQogCi0vKiBhZGRyZXNzZXMgdG8gc2NhbiwgZm91bmQgb25seSBhdCAweDQyICg3LUJpdCkgKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19BRERSX1REQTk4NDAsIEkyQ19DTElFTlRfRU5EIH07Ci0KLS8qIG1hZ2ljIGRlZmluaXRpb24gb2YgYWxsIG90aGVyIHZhcmlhYmxlcyBhbmQgdGhpbmdzICovCi1JMkNfQ0xJRU5UX0lOU01PRDsKIAogc3RhdGljIHZvaWQgdGRhOTg0MF93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbCkKIHsKQEAgLTEzNyw2MCArMTMyLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBsb25nIHRkYTk4NDBfaW9jdGwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHRkYTk4NDBfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQogewotCWludCBieXRlOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBUREE5ODQwX0xFVkVMX0FESlVTVDoKLQkJYnl0ZSA9ICooaW50ICopYXJnOwotCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJUREE5ODQwX0xFVkVMX0FESlVTVDogJWRcbiIsIGJ5dGUpOwotCi0JCS8qIGNoZWNrIGZvciBjb3JyZWN0IHJhbmdlICovCi0JCWlmIChieXRlID4gMjUgfHwgYnl0ZSA8IC0yMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCS8qIGNhbGN1bGF0ZSBhY3R1YWwgdmFsdWUgdG8gc2V0LCBzZWUgc3BlY3MsIHBhZ2UgMTggKi8KLQkJYnl0ZSAvPSA1OwotCQlpZiAoMCA8IGJ5dGUpCi0JCQlieXRlICs9IDB4ODsKLQkJZWxzZQotCQkJYnl0ZSA9IC1ieXRlOwotCQl0ZGE5ODQwX3dyaXRlKHNkLCBMRVZFTF9BREpVU1QsIGJ5dGUpOwotCQlicmVhazsKLQotCWNhc2UgVERBOTg0MF9TVEVSRU9fQURKVVNUOgotCQlieXRlID0gKihpbnQgKilhcmc7Ci0JCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlREQTk4NDBfU1RFUkVPX0FESlVTVDogJWRcbiIsIGJ5dGUpOwotCi0JCS8qIGNoZWNrIGZvciBjb3JyZWN0IHJhbmdlICovCi0JCWlmIChieXRlID4gMjUgfHwgYnl0ZSA8IC0yNCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCS8qIGNhbGN1bGF0ZSBhY3R1YWwgdmFsdWUgdG8gc2V0ICovCi0JCWJ5dGUgLz0gNTsKLQkJaWYgKDAgPCBieXRlKQotCQkJYnl0ZSArPSAweDIwOwotCQllbHNlCi0JCQlieXRlID0gLWJ5dGU7Ci0KLQkJdGRhOTg0MF93cml0ZShzZCwgU1RFUkVPX0FESlVTVCwgYnl0ZSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHRkYTk4NDBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfVERBOTg0MCwgMCk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdGRhOTg0MF9jb3JlX29wcyA9IHsKLQkuaW9jdGwgPSB0ZGE5ODQwX2lvY3RsLAorCS5nX2NoaXBfaWRlbnQgPSB0ZGE5ODQwX2dfY2hpcF9pZGVudCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzIHRkYTk4NDBfdHVuZXJfb3BzID0gewpAQCAtMjA5LDggKzE2MSw2IEBACiAJCQkgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwotCWludCByZXN1bHQ7Ci0JaW50IGJ5dGU7CiAKIAkvKiBsZXQncyBzZWUgd2hldGhlciB0aGlzIGFkYXB0ZXIgY2FuIHN1cHBvcnQgd2hhdCB3ZSBuZWVkICovCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCkBAIC0yMjcsMTUgKzE3Nyw5IEBACiAJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnRkYTk4NDBfb3BzKTsKIAogCS8qIHNldCBpbml0aWFsIHZhbHVlcyBmb3IgbGV2ZWwgJiBzdGVyZW8gLSBhZGp1c3RtZW50LCBtb2RlICovCi0JYnl0ZSA9IDA7Ci0JcmVzdWx0ID0gdGRhOTg0MF9pb2N0bChzZCwgVERBOTg0MF9MRVZFTF9BREpVU1QsICZieXRlKTsKLQlyZXN1bHQgfD0gdGRhOTg0MF9pb2N0bChzZCwgVERBOTg0MF9TVEVSRU9fQURKVVNULCAmYnl0ZSk7CisJdGRhOTg0MF93cml0ZShzZCwgTEVWRUxfQURKVVNULCAwKTsKKwl0ZGE5ODQwX3dyaXRlKHNkLCBTVEVSRU9fQURKVVNULCAwKTsKIAl0ZGE5ODQwX3dyaXRlKHNkLCBTV0lUQ0gsIFREQTk4NDBfU0VUX1NURVJFTyk7Ci0JaWYgKHJlc3VsdCkgewotCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJjb3VsZCBub3QgaW5pdGlhbGl6ZSB0ZGE5ODQwXG4iKTsKLQkJa2ZyZWUoc2QpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0OCwxMiArMTkyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0ZGE5ODQwX2xlZ2FjeV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JLyogTGV0J3Mgc2VlIHdoZXRoZXIgdGhpcyBpcyBhIGtub3duIGFkYXB0ZXIgd2UgY2FuIGF0dGFjaCB0by4KLQkgICBQcmV2ZW50cyBjb25mbGljdHMgd2l0aCB0dmF1ZGlvLmMuICovCi0JcmV0dXJuIGFkYXB0ZXItPmlkID09IEkyQ19IV19TQUE3MTQ2OwotfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdGRhOTg0MF9pZFtdID0gewogCXsgInRkYTk4NDAiLCAwIH0sCiAJeyB9CkBAIC0yNjIsMTAgKzIwMSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ0ZGE5ODQwIiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfVERBOTg0MCwKLQkuY29tbWFuZCA9IHRkYTk4NDBfY29tbWFuZCwKIAkucHJvYmUgPSB0ZGE5ODQwX3Byb2JlLAogCS5yZW1vdmUgPSB0ZGE5ODQwX3JlbW92ZSwKLQkubGVnYWN5X3Byb2JlID0gdGRhOTg0MF9sZWdhY3lfcHJvYmUsCiAJLmlkX3RhYmxlID0gdGRhOTg0MF9pZCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzEyYWU3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotI2lmbmRlZiBfX0lOQ0xVREVEX1REQTk4NDBfXwotI2RlZmluZSBfX0lOQ0xVREVEX1REQTk4NDBfXwotCi0jZGVmaW5lCUkyQ19BRERSX1REQTk4NDAJCTB4NDIKLQotLyogdmFsdWVzIG1heSByYW5nZSBiZXR3ZWVuICsyLjUgYW5kIC0yLjA7Ci0gICB0aGUgdmFsdWUgaGFzIHRvIGJlIG11bHRpcGxpZWQgd2l0aCAxMCAqLwotI2RlZmluZSBUREE5ODQwX0xFVkVMX0FESlVTVAlfSU9XKCd2JywzLGludCkKLQotLyogdmFsdWVzIG1heSByYW5nZSBiZXR3ZWVuICsyLjUgYW5kIC0yLjQ7Ci0gICB0aGUgdmFsdWUgaGFzIHRvIGJlIG11bHRpcGxpZWQgd2l0aCAxMCAqLwotI2RlZmluZSBUREE5ODQwX1NURVJFT19BREpVU1QJX0lPVygndicsNCxpbnQpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODc1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NzUuYwppbmRleCAwMGM2Y2JlLi4yNGUyYjdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NzUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NzUuYwpAQCAtMjgsMjAgKzI4LDEzIEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvaTJjLWFkZHIuaD4KIAogc3RhdGljIGludCBkZWJ1ZzsgLyogaW5zbW9kIHBhcmFtZXRlciAqLwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSAgewotICAgIEkyQ19BRERSX1REQTk4NzUgPj4gMSwKLSAgICBJMkNfQ0xJRU5UX0VORAotfTsKLQotSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIC8qIFRoaXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgVERBOTg3NSAqLwogc3RydWN0IHRkYTk4NzUgewpAQCAtMzEzLDE4ICszMDYsMTQgQEAKIHsKIAlzd2l0Y2ggKHFjLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgNTg4ODApOwogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxYyk7CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCAzMjc2OCk7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHRkYTk4NzVfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHRkYTk4NzVfY29yZV9vcHMgPSB7CkBAIC00MDEsOCArMzkwLDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInRkYTk4NzUiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9UREE5ODc1LAotCS5jb21tYW5kID0gdGRhOTg3NV9jb21tYW5kLAogCS5wcm9iZSA9IHRkYTk4NzVfcHJvYmUsCiAJLnJlbW92ZSA9IHRkYTk4NzVfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHRkYTk4NzVfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmMKaW5kZXggNzUxOWZkMS4uZDYxYzU2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuYwpAQCAtMzIsNyArMzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAjaW5jbHVkZSAidGVhNjQxNWMuaCIKIAogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIdW5vbGQgPG1pY2hhZWxAbWlodS5kZT4iKTsKQEAgLTQ0LDI1ICs0NSwyMiBAQAogCiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAotLyogYWRkcmVzc2VzIHRvIHNjYW4sIGZvdW5kIG9ubHkgYXQgMHgwMyBhbmQvb3IgMHg0MyAoNy1iaXQpICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfVEVBNjQxNUNfMSwgSTJDX1RFQTY0MTVDXzIsIEkyQ19DTElFTlRfRU5EIH07CiAKLS8qIG1hZ2ljIGRlZmluaXRpb24gb2YgYWxsIG90aGVyIHZhcmlhYmxlcyBhbmQgdGhpbmdzICovCi1JMkNfQ0xJRU5UX0lOU01PRDsKLQotLyogbWFrZXMgYSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGlucHV0LXBpbiAnaScgYW5kIHRoZSBvdXRwdXQtcGluICdvJwotICAgZm9yIHRoZSB0ZWE2NDE1Yy1jbGllbnQgJ2NsaWVudCcgKi8KLXN0YXRpYyBpbnQgc3dpdGNoX21hdHJpeChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgaSwgaW50IG8pCisvKiBtYWtlcyBhIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgaW5wdXQtcGluICdpJyBhbmQgdGhlIG91dHB1dC1waW4gJ28nICovCitzdGF0aWMgaW50IHRlYTY0MTVjX3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJdTggYnl0ZSA9IDA7CisJdTMyIGkgPSByb3V0ZS0+aW5wdXQ7CisJdTMyIG8gPSByb3V0ZS0+b3V0cHV0OwogCWludCByZXQ7CiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpPSVkLCBvPSVkXG4iLCBpLCBvKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpPSVkLCBvPSVkXG4iLCBpLCBvKTsKIAogCS8qIGNoZWNrIGlmIHRoZSBwaW5zIGFyZSB2YWxpZCAqLwogCWlmICgwID09ICgoMSA9PSBpIHx8ICAzID09IGkgfHwgIDUgPT0gaSB8fCAgNiA9PSBpIHx8ICA4ID09IGkgfHwgMTAgPT0gaSB8fCAyMCA9PSBpIHx8IDExID09IGkpCiAJICAgICAgJiYgKDE4ID09IG8gfHwgMTcgPT0gbyB8fCAxNiA9PSBvIHx8IDE1ID09IG8gfHwgMTQgPT0gbyB8fCAxMyA9PSBvKSkpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiB0byB1bmRlcnN0YW5kIHRoaXMsIGhhdmUgYSBsb29rIGF0IHRoZSB0ZWE2NDE1Yy1zcGVjcyAocC41KSAqLwogCXN3aXRjaCAobykgewpAQCAtMTE1LDM3ICsxMTMsMzMgQEAKIAogCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlKGNsaWVudCwgYnl0ZSk7CiAJaWYgKHJldCkgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwKIAkJCSJpMmNfc21idXNfd3JpdGVfYnl0ZSgpIGZhaWxlZCwgcmV0OiVkXG4iLCByZXQpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGxvbmcgdGVhNjQxNWNfaW9jdGwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHRlYTY0MTVjX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKIHsKLQlpZiAoY21kID09IFRFQTY0MTVDX1NXSVRDSCkgewotCQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0JCXN0cnVjdCB0ZWE2NDE1Y19tdWx0aXBsZXggKnYgPSAoc3RydWN0IHRlYTY0MTVjX211bHRpcGxleCAqKWFyZzsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKLQkJcmV0dXJuIHN3aXRjaF9tYXRyaXgoY2xpZW50LCB2LT5pbiwgdi0+b3V0KTsKLQl9Ci0JcmV0dXJuIC1FTk9JT0NUTENNRDsKLX0KLQotc3RhdGljIGludCB0ZWE2NDE1Y19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7CisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9URUE2NDE1QywgMCk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdGVhNjQxNWNfY29yZV9vcHMgPSB7Ci0JLmlvY3RsID0gdGVhNjQxNWNfaW9jdGwsCisJLmdfY2hpcF9pZGVudCA9IHRlYTY0MTVjX2dfY2hpcF9pZGVudCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHRlYTY0MTVjX3ZpZGVvX29wcyA9IHsKKwkuc19yb3V0aW5nID0gdGVhNjQxNWNfc19yb3V0aW5nLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgdGVhNjQxNWNfb3BzID0gewogCS5jb3JlID0gJnRlYTY0MTVjX2NvcmVfb3BzLAorCS52aWRlbyA9ICZ0ZWE2NDE1Y192aWRlb19vcHMsCiB9OwogCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBpMmNfcHJvYmUgKi8KQEAgLTE3NiwxMiArMTcwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0ZWE2NDE1Y19sZWdhY3lfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCS8qIExldCdzIHNlZSB3aGV0aGVyIHRoaXMgaXMgYSBrbm93biBhZGFwdGVyIHdlIGNhbiBhdHRhY2ggdG8uCi0JICAgUHJldmVudHMgY29uZmxpY3RzIHdpdGggdHZhdWRpby5jLiAqLwotCXJldHVybiBhZGFwdGVyLT5pZCA9PSBJMkNfSFdfU0FBNzE0NjsKLX0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRlYTY0MTVjX2lkW10gPSB7CiAJeyAidGVhNjQxNWMiLCAwIH0sCkBAIC0xOTEsMTAgKzE3OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ0ZWE2NDE1YyIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1RFQTY0MTVDLAotCS5jb21tYW5kID0gdGVhNjQxNWNfY29tbWFuZCwKIAkucHJvYmUgPSB0ZWE2NDE1Y19wcm9iZSwKIAkucmVtb3ZlID0gdGVhNjQxNWNfcmVtb3ZlLAotCS5sZWdhY3lfcHJvYmUgPSB0ZWE2NDE1Y19sZWdhY3lfcHJvYmUsCiAJLmlkX3RhYmxlID0gdGVhNjQxNWNfaWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5oCmluZGV4IGY4NGVkODAuLjNhNDdkNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmgKQEAgLTEsMTAgKzEsNiBAQAogI2lmbmRlZiBfX0lOQ0xVREVEX1RFQTY0MTVDX18KICNkZWZpbmUgX19JTkNMVURFRF9URUE2NDE1Q19fCiAKLS8qIHBvc3NpYmxlIGkyYy1hZGRyZXNzZXMgKi8KLSNkZWZpbmUJSTJDX1RFQTY0MTVDXzEJCTB4MDMKLSNkZWZpbmUJSTJDX1RFQTY0MTVDXzIJCTB4NDMKLQogLyogdGhlIHRlYTY0MTVjJ3MgZGVzaWduIGlzIHF1aXRlIGJyYWluLWRlYWQuIGFsdGhvdWdoIHRoZXJlIGFyZQogICAgOCBpbnB1dHMgYW5kIDYgb3V0cHV0cywgdGhlc2UgYXJlbid0IGVudW1lcmF0ZWQgaW4gYW55IHdheS4gYmVjYXVzZQogICAgSSBkb24ndCB3YW50IHRvIHNheSAiY29ubmVjdCBpbnB1dCBwaW4gMjAgdG8gb3V0cHV0IHBpbiAxNyIsIEkgZGVmaW5lCkBAIC0yOCwxMiArMjQsNCBAQAogI2RlZmluZSBURUE2NDE1Q19JTlBVVDcgMQogI2RlZmluZSBURUE2NDE1Q19JTlBVVDggMTEKIAotc3RydWN0IHRlYTY0MTVjX211bHRpcGxleAotewotCWludAlpbjsJLyogaW5wdXQtcGluICovCi0JaW50CW91dDsJLyogb3V0cHV0LXBpbiAqLwotfTsKLQotI2RlZmluZSBURUE2NDE1Q19TV0lUQ0gJCV9JT1coJ3YnLDEsc3RydWN0IHRlYTY0MTVjX211bHRpcGxleCkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQyMC5jCmluZGV4IDA4MWU3NGYuLjM0OTIyMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQyMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQyMC5jCkBAIC0zMiw3ICszMiw4IEBACiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KICNpbmNsdWRlICJ0ZWE2NDIwLmgiCiAKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgSHVub2xkIDxtaWNoYWVsQG1paHUuZGU+Iik7CkBAIC00NCwyNCArNDUsMjMgQEAKIAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLS8qIGFkZHJlc3NlcyB0byBzY2FuLCBmb3VuZCBvbmx5IGF0IDB4NGMgYW5kL29yIDB4NGQgKDctQml0KSAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX0FERFJfVEVBNjQyMF8xLCBJMkNfQUREUl9URUE2NDIwXzIsIEkyQ19DTElFTlRfRU5EIH07Ci0KLS8qIG1hZ2ljIGRlZmluaXRpb24gb2YgYWxsIG90aGVyIHZhcmlhYmxlcyBhbmQgdGhpbmdzICovCi1JMkNfQ0xJRU5UX0lOU01PRDsKIAogLyogbWFrZSBhIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgaW5wdXQgJ2knIGFuZCB0aGUgb3V0cHV0ICdvJwotICAgd2l0aCBnYWluICdnJyBmb3IgdGhlIHRlYTY0MjAtY2xpZW50ICdjbGllbnQnIChub3RlOiBpID0gNiBtZWFucyAnbXV0ZScpICovCi1zdGF0aWMgaW50IHRlYTY0MjBfc3dpdGNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBpLCBpbnQgbywgaW50IGcpCisgICB3aXRoIGdhaW4gJ2cnIChub3RlOiBpID0gNiBtZWFucyAnbXV0ZScpICovCitzdGF0aWMgaW50IHRlYTY0MjBfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlpbnQgaSA9IHJvdXRlLT5pbnB1dDsKKwlpbnQgbyA9IHJvdXRlLT5vdXRwdXQgJiAweGY7CisJaW50IGcgPSAocm91dGUtPm91dHB1dCA+PiA0KSAmIDB4ZjsKIAl1OCBieXRlOwogCWludCByZXQ7CiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpPSVkLCBvPSVkLCBnPSVkXG4iLCBpLCBvLCBnKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpPSVkLCBvPSVkLCBnPSVkXG4iLCBpLCBvLCBnKTsKIAogCS8qIGNoZWNrIGlmIHRoZSBwYXJhbWV0ZXJzIGFyZSB2YWxpZCAqLwogCWlmIChpIDwgMSB8fCBpID4gNiB8fCBvIDwgMSB8fCBvID4gNCB8fCBnIDwgMCB8fCBnID4gNiB8fCBnICUgMiAhPSAwKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlOVkFMOwogCiAJYnl0ZSA9ICgobyAtIDEpIDw8IDUpOwogCWJ5dGUgfD0gKGkgLSAxKTsKQEAgLTgzLDM3ICs4MywzMyBAQAogCiAJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGUoY2xpZW50LCBieXRlKTsKIAlpZiAocmV0KSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLAogCQkJImkyY19zbWJ1c193cml0ZV9ieXRlKCkgZmFpbGVkLCByZXQ6JWRcbiIsIHJldCk7CiAJCXJldHVybiAtRUlPOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGxvbmcgdGVhNjQyMF9pb2N0bChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgdGVhNjQyMF9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCiB7Ci0JaWYgKGNtZCA9PSBURUE2NDIwX1NXSVRDSCkgewotCQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0JCXN0cnVjdCB0ZWE2NDIwX211bHRpcGxleCAqYSA9IChzdHJ1Y3QgdGVhNjQyMF9tdWx0aXBsZXggKilhcmc7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JCXJldHVybiB0ZWE2NDIwX3N3aXRjaChjbGllbnQsIGEtPmluLCBhLT5vdXQsIGEtPmdhaW4pOwotCX0KLQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotfQotCi1zdGF0aWMgaW50IHRlYTY0MjBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfVEVBNjQyMCwgMCk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdGVhNjQyMF9jb3JlX29wcyA9IHsKLQkuaW9jdGwgPSB0ZWE2NDIwX2lvY3RsLAorCS5nX2NoaXBfaWRlbnQgPSB0ZWE2NDIwX2dfY2hpcF9pZGVudCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfYXVkaW9fb3BzIHRlYTY0MjBfYXVkaW9fb3BzID0geworCS5zX3JvdXRpbmcgPSB0ZWE2NDIwX3Nfcm91dGluZywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHRlYTY0MjBfb3BzID0gewogCS5jb3JlID0gJnRlYTY0MjBfY29yZV9vcHMsCisJLmF1ZGlvID0gJnRlYTY0MjBfYXVkaW9fb3BzLAogfTsKIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgaTJjX3Byb2JlICovCkBAIC0xMzAsMjAgKzEyNiwyNCBAQAogCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAorCXNkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHY0bDJfc3ViZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNkID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZ0ZWE2NDIwX29wcyk7CisKIAkvKiBzZXQgaW5pdGlhbCB2YWx1ZXM6IHNldCAibXV0ZSItaW5wdXQgdG8gYWxsIG91dHB1dHMgYXQgZ2FpbiAwICovCiAJZXJyID0gMDsKIAlmb3IgKGkgPSAxOyBpIDwgNTsgaSsrKSB7Ci0JCWVyciArPSB0ZWE2NDIwX3N3aXRjaChjbGllbnQsIDYsIGksIDApOworCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCisJCXJvdXRlLmlucHV0ID0gNjsKKwkJcm91dGUub3V0cHV0ID0gaTsKKwkJZXJyICs9IHRlYTY0MjBfc19yb3V0aW5nKHNkLCAmcm91dGUpOwogCX0KIAlpZiAoZXJyKSB7CiAJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImNvdWxkIG5vdCBpbml0aWFsaXplIHRlYTY0MjBcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0KLQlzZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2NGwyX3N1YmRldiksIEdGUF9LRVJORUwpOwotCWlmIChzZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmdGVhNjQyMF9vcHMpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTYsMTIgKzE1Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGVhNjQyMF9sZWdhY3lfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCS8qIExldCdzIHNlZSB3aGV0aGVyIHRoaXMgaXMgYSBrbm93biBhZGFwdGVyIHdlIGNhbiBhdHRhY2ggdG8uCi0JICAgUHJldmVudHMgY29uZmxpY3RzIHdpdGggdHZhdWRpby5jLiAqLwotCXJldHVybiBhZGFwdGVyLT5pZCA9PSBJMkNfSFdfU0FBNzE0NjsKLX0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRlYTY0MjBfaWRbXSA9IHsKIAl7ICJ0ZWE2NDIwIiwgMCB9LApAQCAtMTcxLDEwICsxNjUsNyBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidGVhNjQyMCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1RFQTY0MjAsCi0JLmNvbW1hbmQgPSB0ZWE2NDIwX2NvbW1hbmQsCiAJLnByb2JlID0gdGVhNjQyMF9wcm9iZSwKIAkucmVtb3ZlID0gdGVhNjQyMF9yZW1vdmUsCi0JLmxlZ2FjeV9wcm9iZSA9IHRlYTY0MjBfbGVnYWN5X3Byb2JlLAogCS5pZF90YWJsZSA9IHRlYTY0MjBfaWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuaAppbmRleCA1ZWY3YzE4Li40YWEzZWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuaApAQCAtMSwxNyArMSwyNCBAQAogI2lmbmRlZiBfX0lOQ0xVREVEX1RFQTY0MjBfXwogI2RlZmluZSBfX0lOQ0xVREVEX1RFQTY0MjBfXwogCi0vKiBwb3NzaWJsZSBhZGRyZXNzZXMgKi8KLSNkZWZpbmUJSTJDX0FERFJfVEVBNjQyMF8xCQkweDRjCi0jZGVmaW5lCUkyQ19BRERSX1RFQTY0MjBfMgkJMHg0ZAorLyogaW5wdXQgcGlucyAqLworI2RlZmluZSBURUE2NDIwX09VVFBVVDEgMQorI2RlZmluZSBURUE2NDIwX09VVFBVVDIgMgorI2RlZmluZSBURUE2NDIwX09VVFBVVDMgMworI2RlZmluZSBURUE2NDIwX09VVFBVVDQgNAogCi1zdHJ1Y3QgdGVhNjQyMF9tdWx0aXBsZXgKLXsKLQlpbnQJaW47CS8qIGlucHV0IG9mIGF1ZGlvIHN3aXRjaCAqLwotCWludAlvdXQ7CS8qIG91dHB1dCBvZiBhdWRpbyBzd2l0Y2ggICovCi0JaW50CWdhaW47CS8qIGdhaW4gb2YgY29ubmVjdGlvbiAqLwotfTsKKy8qIG91dHB1dCBwaW5zICovCisjZGVmaW5lIFRFQTY0MjBfSU5QVVQxIDEKKyNkZWZpbmUgVEVBNjQyMF9JTlBVVDIgMgorI2RlZmluZSBURUE2NDIwX0lOUFVUMyAzCisjZGVmaW5lIFRFQTY0MjBfSU5QVVQ0IDQKKyNkZWZpbmUgVEVBNjQyMF9JTlBVVDUgNQorI2RlZmluZSBURUE2NDIwX0lOUFVUNiA2CiAKLSNkZWZpbmUgVEVBNjQyMF9TV0lUQ0gJCV9JT1coJ3YnLDEsc3RydWN0IHRlYTY0MjBfbXVsdGlwbGV4KQorLyogZ2FpbiBvbiB0aGUgb3V0cHV0IHBpbnMsIE9SZWQgd2l0aCB0aGUgb3V0cHV0IHBpbiAqLworI2RlZmluZSBURUE2NDIwX0dBSU4wIDB4MDAKKyNkZWZpbmUgVEVBNjQyMF9HQUlOMiAweDIwCisjZGVmaW5lIFRFQTY0MjBfR0FJTjQgMHg0MAorI2RlZmluZSBURUE2NDIwX0dBSU42IDB4NjAKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsdjMyMGFpYzIzYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90bHYzMjBhaWMyM2IuYwppbmRleCA1Yzk1ZWNkLi4wNzc4OWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsdjMyMGFpYzIzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGx2MzIwYWljMjNiLmMKQEAgLTMxLDE1ICszMSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oInRsdjMyMGFpYzIzYiBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlNjb3R0IEFsZnRlciwgVWxmIEVrbHVuZCwgSGFucyBWZXJrdWlsIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MzQgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKLQotSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTEyMSwxMSArMTE4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0bHYzMjBhaWMyM2JfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHRsdjMyMGFpYzIzYl9jb3JlX29wcyA9IHsKQEAgLTIwOCw4ICsyMDAsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidGx2MzIwYWljMjNiIiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfVExWMzIwQUlDMjNCLAotCS5jb21tYW5kID0gdGx2MzIwYWljMjNiX2NvbW1hbmQsCiAJLnByb2JlID0gdGx2MzIwYWljMjNiX3Byb2JlLAogCS5yZW1vdmUgPSB0bHYzMjBhaWMyM2JfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHRsdjMyMGFpYzIzYl9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKaW5kZXggMzA2NDBmYi4uNzJkNDEwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKQEAgLTM2NCw3ICszNjQsOCBAQAogCX0KIAogCXQtPnR5cGUgPSB0eXBlOwotCXQtPmNvbmZpZyA9IG5ld19jb25maWc7CisJLyogcHJldmVudCBpbnZhbGlkIGNvbmZpZyB2YWx1ZXMgKi8KKwl0LT5jb25maWcgPSAoKG5ld19jb25maWcgPj0gMCkgJiYgKG5ld19jb25maWcgPCAyNTYpKSA/IG5ld19jb25maWcgOiAwOwogCWlmICh0dW5lcl9jYWxsYmFjayAhPSBOVUxMKSB7CiAJCXR1bmVyX2RiZygiZGVmaW5pbmcgR1BJTyBjYWxsYmFja1xuIik7CiAJCXQtPmZlLmNhbGxiYWNrID0gdHVuZXJfY2FsbGJhY2s7CkBAIC00NTIsNyArNDUzLDggQEAKIAkJc3RydWN0IGR2Yl90dW5lcl9vcHMgKnhjX3R1bmVyX29wczsKIAogCQl4YzUwMDBfY2ZnLmkyY19hZGRyZXNzCSAgPSB0LT5pMmMtPmFkZHI7Ci0JCXhjNTAwMF9jZmcuaWZfa2h6CSAgPSA1MzgwOworCQkvKiBpZl9raHogd2lsbCBiZSBzZXQgd2hlbiB0aGUgZGlnaXRhbCBkdmJfYXR0YWNoKCkgb2NjdXJzICovCisJCXhjNTAwMF9jZmcuaWZfa2h6CSAgPSAwOwogCQlpZiAoIWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwKIAkJCQkmdC0+ZmUsIHQtPmkyYy0+YWRhcHRlciwgJnhjNTAwMF9jZmcpKQogCQkJZ290byBhdHRhY2hfZmFpbGVkOwpAQCAtNzc2LDggKzc3OCw3IEBACiAJc3RydWN0IHR1bmVyICp0ID0gdG9fdHVuZXIoc2QpOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotCWlmIChzZXRfbW9kZShjbGllbnQsIHQsIFY0TDJfVFVORVJfUkFESU8sICJBVURDX1NFVF9SQURJTyIpCi0JCQk9PSAtRUlOVkFMKQorCWlmIChzZXRfbW9kZShjbGllbnQsIHQsIFY0TDJfVFVORVJfUkFESU8sICJzX3JhZGlvIikgPT0gLUVJTlZBTCkKIAkJcmV0dXJuIDA7CiAJaWYgKHQtPnJhZGlvX2ZyZXEpCiAJCXNldF9mcmVxKGNsaWVudCwgdC0+cmFkaW9fZnJlcSk7CkBAIC03OTEsNyArNzkyLDcgQEAKIAogCXR1bmVyX2RiZygiUHV0dGluZyB0dW5lciB0byBzbGVlcFxuIik7CiAKLQlpZiAoY2hlY2tfbW9kZSh0LCAiVFVORVJfU0VUX1NUQU5EQlkiKSA9PSAtRUlOVkFMKQorCWlmIChjaGVja19tb2RlKHQsICJzX3N0YW5kYnkiKSA9PSAtRUlOVkFMKQogCQlyZXR1cm4gMDsKIAl0LT5tb2RlID0gVF9TVEFOREJZOwogCWlmIChhbmFsb2dfb3BzLT5zdGFuZGJ5KQpAQCAtNzk5LDEzMiArODAwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19WSURFT19BTExPV19WNEwxCi1zdGF0aWMgbG9uZyB0dW5lcl9pb2N0bChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IHR1bmVyICp0ID0gdG9fdHVuZXIoc2QpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQlzdHJ1Y3QgYW5hbG9nX2RlbW9kX29wcyAqYW5hbG9nX29wcyA9ICZ0LT5mZS5vcHMuYW5hbG9nX29wczsKLQlzdHJ1Y3QgZHZiX3R1bmVyX29wcyAqZmVfdHVuZXJfb3BzID0gJnQtPmZlLm9wcy50dW5lcl9vcHM7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DU0FVRElPOgotCQlpZiAoY2hlY2tfbW9kZSh0LCAiVklESU9DU0FVRElPIikgPT0gLUVJTlZBTCkKLQkJCXJldHVybiAwOwotCQlpZiAoY2hlY2tfdjRsMih0KSA9PSAtRUlOVkFMKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyogU2hvdWxkIGJlIGltcGxlbWVudGVkLCBzaW5jZSBidHR2IGNhbGxzIGl0ICovCi0JCXR1bmVyX2RiZygiVklESU9DU0FVRElPIG5vdCBpbXBsZW1lbnRlZC5cbiIpOwotCQlicmVhazsKLQljYXNlIFZJRElPQ1NDSEFOOgotCQl7Ci0JCQlzdGF0aWMgY29uc3QgdjRsMl9zdGRfaWQgbWFwW10gPSB7Ci0JCQkJW1ZJREVPX01PREVfUEFMXSA9IFY0TDJfU1REX1BBTCwKLQkJCQlbVklERU9fTU9ERV9OVFNDXSA9IFY0TDJfU1REX05UU0NfTSwKLQkJCQlbVklERU9fTU9ERV9TRUNBTV0gPSBWNEwyX1NURF9TRUNBTSwKLQkJCQlbNCAvKiBidHR2ICovIF0gPSBWNEwyX1NURF9QQUxfTSwKLQkJCQlbNSAvKiBidHR2ICovIF0gPSBWNEwyX1NURF9QQUxfTiwKLQkJCQlbNiAvKiBidHR2ICovIF0gPSBWNEwyX1NURF9OVFNDX01fSlAsCi0JCQl9OwotCQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnZjID0gYXJnOwotCi0JCQlpZiAoY2hlY2tfdjRsMih0KSA9PSAtRUlOVkFMKQotCQkJCXJldHVybiAwOwotCi0JCQlpZiAoc2V0X21vZGUoY2xpZW50LHQsVjRMMl9UVU5FUl9BTkFMT0dfVFYsICJWSURJT0NTQ0hBTiIpPT0tRUlOVkFMKQotCQkJCXJldHVybiAwOwotCi0JCQlpZiAodmMtPm5vcm0gPCBBUlJBWV9TSVpFKG1hcCkpCi0JCQkJdC0+c3RkID0gbWFwW3ZjLT5ub3JtXTsKLQkJCXR1bmVyX2ZpeHVwX3N0ZCh0KTsKLQkJCWlmICh0LT50dl9mcmVxKQotCQkJCXNldF90dl9mcmVxKGNsaWVudCwgdC0+dHZfZnJlcSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DU0ZSRVE6Ci0JCXsKLQkJCXVuc2lnbmVkIGxvbmcgKnYgPSBhcmc7Ci0KLQkJCWlmIChjaGVja19tb2RlKHQsICJWSURJT0NTRlJFUSIpID09IC1FSU5WQUwpCi0JCQkJcmV0dXJuIDA7Ci0JCQlpZiAoY2hlY2tfdjRsMih0KSA9PSAtRUlOVkFMKQotCQkJCXJldHVybiAwOwotCi0JCQlzZXRfZnJlcShjbGllbnQsICp2KTsKLQkJCXJldHVybiAwOwotCQl9Ci0JY2FzZSBWSURJT0NHVFVORVI6Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb190dW5lciAqdnQgPSBhcmc7Ci0KLQkJCWlmIChjaGVja19tb2RlKHQsICJWSURJT0NHVFVORVIiKSA9PSAtRUlOVkFMKQotCQkJCXJldHVybiAwOwotCQkJaWYgKGNoZWNrX3Y0bDIodCkgPT0gLUVJTlZBTCkKLQkJCQlyZXR1cm4gMDsKLQotCQkJaWYgKFY0TDJfVFVORVJfUkFESU8gPT0gdC0+bW9kZSkgewotCQkJCWlmIChmZV90dW5lcl9vcHMtPmdldF9zdGF0dXMpIHsKLQkJCQkJdTMyIHR1bmVyX3N0YXR1czsKLQotCQkJCQlmZV90dW5lcl9vcHMtPmdldF9zdGF0dXMoJnQtPmZlLCAmdHVuZXJfc3RhdHVzKTsKLQkJCQkJaWYgKHR1bmVyX3N0YXR1cyAmIFRVTkVSX1NUQVRVU19TVEVSRU8pCi0JCQkJCQl2dC0+ZmxhZ3MgfD0gVklERU9fVFVORVJfU1RFUkVPX09OOwotCQkJCQllbHNlCi0JCQkJCQl2dC0+ZmxhZ3MgJj0gflZJREVPX1RVTkVSX1NURVJFT19PTjsKLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoYW5hbG9nX29wcy0+aXNfc3RlcmVvKSB7Ci0JCQkJCQlpZiAoYW5hbG9nX29wcy0+aXNfc3RlcmVvKCZ0LT5mZSkpCi0JCQkJCQkJdnQtPmZsYWdzIHw9Ci0JCQkJCQkJCVZJREVPX1RVTkVSX1NURVJFT19PTjsKLQkJCQkJCWVsc2UKLQkJCQkJCQl2dC0+ZmxhZ3MgJj0KLQkJCQkJCQkJflZJREVPX1RVTkVSX1NURVJFT19PTjsKLQkJCQkJfQotCQkJCX0KLQkJCQlpZiAoYW5hbG9nX29wcy0+aGFzX3NpZ25hbCkKLQkJCQkJdnQtPnNpZ25hbCA9Ci0JCQkJCQlhbmFsb2dfb3BzLT5oYXNfc2lnbmFsKCZ0LT5mZSk7Ci0KLQkJCQl2dC0+ZmxhZ3MgfD0gVklERU9fVFVORVJfTE9XOwkvKiBBbGxvdyBmcmVxcyBhdCA2Mi41IEh6ICovCi0KLQkJCQl2dC0+cmFuZ2Vsb3cgPSByYWRpb19yYW5nZVswXSAqIDE2MDAwOwotCQkJCXZ0LT5yYW5nZWhpZ2ggPSByYWRpb19yYW5nZVsxXSAqIDE2MDAwOwotCi0JCQl9IGVsc2UgewotCQkJCXZ0LT5yYW5nZWxvdyA9IHR2X3JhbmdlWzBdICogMTY7Ci0JCQkJdnQtPnJhbmdlaGlnaCA9IHR2X3JhbmdlWzFdICogMTY7Ci0JCQl9Ci0KLQkJCXJldHVybiAwOwotCQl9Ci0JY2FzZSBWSURJT0NHQVVESU86Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb19hdWRpbyAqdmEgPSBhcmc7Ci0KLQkJCWlmIChjaGVja19tb2RlKHQsICJWSURJT0NHQVVESU8iKSA9PSAtRUlOVkFMKQotCQkJCXJldHVybiAwOwotCQkJaWYgKGNoZWNrX3Y0bDIodCkgPT0gLUVJTlZBTCkKLQkJCQlyZXR1cm4gMDsKLQotCQkJaWYgKFY0TDJfVFVORVJfUkFESU8gPT0gdC0+bW9kZSkgewotCQkJCWlmIChmZV90dW5lcl9vcHMtPmdldF9zdGF0dXMpIHsKLQkJCQkJdTMyIHR1bmVyX3N0YXR1czsKLQotCQkJCQlmZV90dW5lcl9vcHMtPmdldF9zdGF0dXMoJnQtPmZlLCAmdHVuZXJfc3RhdHVzKTsKLQkJCQkJdmEtPm1vZGUgPSAodHVuZXJfc3RhdHVzICYgVFVORVJfU1RBVFVTX1NURVJFTykKLQkJCQkJICAgID8gVklERU9fU09VTkRfU1RFUkVPIDogVklERU9fU09VTkRfTU9OTzsKLQkJCQl9IGVsc2UgaWYgKGFuYWxvZ19vcHMtPmlzX3N0ZXJlbykKLQkJCQkJdmEtPm1vZGUgPSBhbmFsb2dfb3BzLT5pc19zdGVyZW8oJnQtPmZlKQotCQkJCQkgICAgPyBWSURFT19TT1VORF9TVEVSRU8gOiBWSURFT19TT1VORF9NT05POwotCQkJfQotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0JcmV0dXJuIC1FTk9JT0NUTENNRDsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50IHR1bmVyX3NfY29uZmlnKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3ByaXZfdHVuX2NvbmZpZyAqY2ZnKQogewogCXN0cnVjdCB0dW5lciAqdCA9IHRvX3R1bmVyKHNkKTsKQEAgLTk1MCw4ICs4MjUsNyBAQAogCXN0cnVjdCB0dW5lciAqdCA9IHRvX3R1bmVyKHNkKTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKLQlpZiAoc2V0X21vZGUoY2xpZW50LCB0LCBWNEwyX1RVTkVSX0FOQUxPR19UViwgIlZJRElPQ19TX1NURCIpCi0JCQk9PSAtRUlOVkFMKQorCWlmIChzZXRfbW9kZShjbGllbnQsIHQsIFY0TDJfVFVORVJfQU5BTE9HX1RWLCAic19zdGQiKSA9PSAtRUlOVkFMKQogCQlyZXR1cm4gMDsKIAogCXN3aXRjaF92NGwyKCk7CkBAIC05NjgsOCArODQyLDcgQEAKIAlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihzZCk7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JaWYgKHNldF9tb2RlKGNsaWVudCwgdCwgZi0+dHlwZSwgIlZJRElPQ19TX0ZSRVFVRU5DWSIpCi0JCQk9PSAtRUlOVkFMKQorCWlmIChzZXRfbW9kZShjbGllbnQsIHQsIGYtPnR5cGUsICJzX2ZyZXF1ZW5jeSIpID09IC1FSU5WQUwpCiAJCXJldHVybiAwOwogCXN3aXRjaF92NGwyKCk7CiAJc2V0X2ZyZXEoY2xpZW50LCBmLT5mcmVxdWVuY3kpOwpAQCAtOTgyLDcgKzg1NSw3IEBACiAJc3RydWN0IHR1bmVyICp0ID0gdG9fdHVuZXIoc2QpOwogCXN0cnVjdCBkdmJfdHVuZXJfb3BzICpmZV90dW5lcl9vcHMgPSAmdC0+ZmUub3BzLnR1bmVyX29wczsKIAotCWlmIChjaGVja19tb2RlKHQsICJWSURJT0NfR19GUkVRVUVOQ1kiKSA9PSAtRUlOVkFMKQorCWlmIChjaGVja19tb2RlKHQsICJnX2ZyZXF1ZW5jeSIpID09IC1FSU5WQUwpCiAJCXJldHVybiAwOwogCXN3aXRjaF92NGwyKCk7CiAJZi0+dHlwZSA9IHQtPm1vZGU7CkBAIC0xMDA2LDcgKzg3OSw3IEBACiAJc3RydWN0IGFuYWxvZ19kZW1vZF9vcHMgKmFuYWxvZ19vcHMgPSAmdC0+ZmUub3BzLmFuYWxvZ19vcHM7CiAJc3RydWN0IGR2Yl90dW5lcl9vcHMgKmZlX3R1bmVyX29wcyA9ICZ0LT5mZS5vcHMudHVuZXJfb3BzOwogCi0JaWYgKGNoZWNrX21vZGUodCwgIlZJRElPQ19HX1RVTkVSIikgPT0gLUVJTlZBTCkKKwlpZiAoY2hlY2tfbW9kZSh0LCAiZ190dW5lciIpID09IC1FSU5WQUwpCiAJCXJldHVybiAwOwogCXN3aXRjaF92NGwyKCk7CiAKQEAgLTEwNTUsNyArOTI4LDcgQEAKIAlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihzZCk7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JaWYgKGNoZWNrX21vZGUodCwgIlZJRElPQ19TX1RVTkVSIikgPT0gLUVJTlZBTCkKKwlpZiAoY2hlY2tfbW9kZSh0LCAic190dW5lciIpID09IC1FSU5WQUwpCiAJCXJldHVybiAwOwogCiAJc3dpdGNoX3Y0bDIoKTsKQEAgLTExMTIsOSArOTg1LDYgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdHVuZXJfY29yZV9vcHMgPSB7CiAJLmxvZ19zdGF0dXMgPSB0dW5lcl9sb2dfc3RhdHVzLAogCS5zX3N0YW5kYnkgPSB0dW5lcl9zX3N0YW5kYnksCi0jaWZkZWYgQ09ORklHX1ZJREVPX0FMTE9XX1Y0TDEKLQkuaW9jdGwgPSB0dW5lcl9pb2N0bCwKLSNlbmRpZgogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgdHVuZXJfdHVuZXJfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYwppbmRleCAwNzZlZDViLi4yMjZiZjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgpAQCAtMTA0Nyw2ICsxMDQ3LDExNiBAQAogCXJldHVybiAwOwogfQogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBhdWRpbyBjaGlwIGRlc2NyaXB0aW9uIC0gZGVmaW5lcytmdW5jdGlvbnMgZm9yIHRkYTk4NzUgICAgICAgICAgICAgICAgICovCisvKiBUaGUgVERBOTg3NSBpcyBtYWRlIGJ5IFBoaWxpcHMgU2VtaWNvbmR1Y3RvcgorICogaHR0cDovL3d3dy5zZW1pY29uZHVjdG9ycy5waGlsaXBzLmNvbQorICogVERBOTg3NTogSTJDLWJ1cyBjb250cm9sbGVkIERTUCBhdWRpbyBwcm9jZXNzb3IsIEZNIGRlbW9kdWxhdG9yCisgKgorICovCisKKy8qIHN1YmFkZHJlc3NlcyBmb3IgVERBOTg3NSAqLworI2RlZmluZSBUREE5ODc1X01VVCAgICAgICAgIDB4MTIgIC8qR2VuZXJhbCBtdXRlICAodmFsdWUgLS0+IDBiMTEwMDExMDAqLworI2RlZmluZSBUREE5ODc1X0NGRyAgICAgICAgIDB4MDEgIC8qIENvbmZpZyByZWdpc3RlciAodmFsdWUgLS0+IDBiMDAwMDAwMDAgKi8KKyNkZWZpbmUgVERBOTg3NV9EQUNPUyAgICAgICAweDEzICAvKkRBQyBpL28gc2VsZWN0IChBREMpIDBiMDAwMDEwMCovCisjZGVmaW5lIFREQTk4NzVfTE9TUiAgICAgICAgMHgxNiAgLypMaW5lIG91dHB1dCBzZWxlY3QgcmVnaXJ0ZXIgMGIwMTAwIDAwMDEqLworCisjZGVmaW5lIFREQTk4NzVfQ0gxViAgICAgICAgMHgwYyAgLypDaGFubmVsIDEgdm9sdW1lIChtdXRlKSovCisjZGVmaW5lIFREQTk4NzVfQ0gyViAgICAgICAgMHgwZCAgLypDaGFubmVsIDIgdm9sdW1lIChtdXRlKSovCisjZGVmaW5lIFREQTk4NzVfU0MxICAgICAgICAgMHgxNCAgLypTQ0FSVCAxIGluIChtb25vKSovCisjZGVmaW5lIFREQTk4NzVfU0MyICAgICAgICAgMHgxNSAgLypTQ0FSVCAyIGluIChtb25vKSovCisKKyNkZWZpbmUgVERBOTg3NV9BRENJUyAgICAgICAweDE3ICAvKkFEQyBpbnB1dCBzZWxlY3QgKG1vbm8pIDBiMDExMCAwMDAqLworI2RlZmluZSBUREE5ODc1X0FFUiAgICAgICAgIDB4MTkgIC8qQXVkaW8gZWZmZWN0IChBVkwrUHNldWRvKSAwYjAwMDAgMDExMCovCisjZGVmaW5lIFREQTk4NzVfTUNTICAgICAgICAgMHgxOCAgLypNYWluIGNoYW5uZWwgc2VsZWN0IChEQUMpIDBiMDAwMDEwMCovCisjZGVmaW5lIFREQTk4NzVfTVZMICAgICAgICAgMHgxYSAgLyogTWFpbiB2b2x1bWUgZ2F1Y2hlICovCisjZGVmaW5lIFREQTk4NzVfTVZSICAgICAgICAgMHgxYiAgLyogTWFpbiB2b2x1bWUgZHJvaXRlICovCisjZGVmaW5lIFREQTk4NzVfTUJBICAgICAgICAgMHgxZCAgLyogTWFpbiBCYXNzZSAqLworI2RlZmluZSBUREE5ODc1X01UUiAgICAgICAgIDB4MWUgIC8qIE1haW4gdHJlYmxlICovCisjZGVmaW5lIFREQTk4NzVfQUNTICAgICAgICAgMHgxZiAgLyogQXV4aWxhcnkgY2hhbm5lbCBzZWxlY3QgKEZNKSAwYjAwMDAwMDAqLworI2RlZmluZSBUREE5ODc1X0FWTCAgICAgICAgIDB4MjAgIC8qIEF1eGlsYXJ5IHZvbHVtZSBnYXVjaGUgKi8KKyNkZWZpbmUgVERBOTg3NV9BVlIgICAgICAgICAweDIxICAvKiBBdXhpbGFyeSB2b2x1bWUgZHJvaXRlICovCisjZGVmaW5lIFREQTk4NzVfQUJBICAgICAgICAgMHgyMiAgLyogQXV4aWxhcnkgQmFzc2UgKi8KKyNkZWZpbmUgVERBOTg3NV9BVFIgICAgICAgICAweDIzICAvKiBBdXhpbGFyeSB0cmVibGUgKi8KKworI2RlZmluZSBUREE5ODc1X01TUiAgICAgICAgIDB4MDIgIC8qIE1vbml0b3Igc2VsZWN0IHJlZ2lzdGVyICovCisjZGVmaW5lIFREQTk4NzVfQzFNU0IgICAgICAgMHgwMyAgLyogQ2FycmllciAxIChGTSkgZnJlcXVlbmN5IHJlZ2lzdGVyIE1TQiAqLworI2RlZmluZSBUREE5ODc1X0MxTUlCICAgICAgIDB4MDQgIC8qIENhcnJpZXIgMSAoRk0pIGZyZXF1ZW5jeSByZWdpc3RlciAoMTYtOF1iICovCisjZGVmaW5lIFREQTk4NzVfQzFMU0IgICAgICAgMHgwNSAgLyogQ2FycmllciAxIChGTSkgZnJlcXVlbmN5IHJlZ2lzdGVyIExTQiAqLworI2RlZmluZSBUREE5ODc1X0MyTVNCICAgICAgIDB4MDYgIC8qIENhcnJpZXIgMiAobmljYW0pIGZyZXF1ZW5jeSByZWdpc3RlciBNU0IgKi8KKyNkZWZpbmUgVERBOTg3NV9DMk1JQiAgICAgICAweDA3ICAvKiBDYXJyaWVyIDIgKG5pY2FtKSBmcmVxdWVuY3kgcmVnaXN0ZXIgKDE2LThdYiAqLworI2RlZmluZSBUREE5ODc1X0MyTFNCICAgICAgIDB4MDggIC8qIENhcnJpZXIgMiAobmljYW0pIGZyZXF1ZW5jeSByZWdpc3RlciBMU0IgKi8KKyNkZWZpbmUgVERBOTg3NV9EQ1IgICAgICAgICAweDA5ICAvKiBEZW1vZHVsYXRldXIgY29uZmlndXJhdGlvbiByZWdpcnRlciovCisjZGVmaW5lIFREQTk4NzVfREVFTSAgICAgICAgMHgwYSAgLyogRk0gZGUtZW1waGFzaXMgcmVnaXJ0ZXIqLworI2RlZmluZSBUREE5ODc1X0ZNQVQgICAgICAgIDB4MGIgIC8qIEZNIE1hdHJpeCByZWdpcnRlciovCisKKy8qIHZhbHVlcyAqLworI2RlZmluZSBUREE5ODc1X01VVEVfT04JICAgIDB4ZmYgLyogZ2VuZXJhbCBtdXRlICovCisjZGVmaW5lIFREQTk4NzVfTVVURV9PRkYgICAgMHhjYyAvKiBnZW5lcmFsIG5vIG11dGUgKi8KKworc3RhdGljIGludCB0ZGE5ODc1X2luaXRpYWxpemUoc3RydWN0IENISVBTVEFURSAqY2hpcCkKK3sKKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQ0ZHLCAweGQwKTsgLypyZWcgZGUgY29uZmlnIDAgKHJlc2V0KSovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X01TUiwgMHgwMyk7ICAgIC8qIE1vbml0b3IgMGIwMDAwMFhYWCovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0MxTVNCLCAweDAwKTsgIC8qQ2FyMShGTSkgTVNCIFhNSHoqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9DMU1JQiwgMHgwMCk7ICAvKkNhcjEoRk0pIE1JQiBYTUh6Ki8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQzFMU0IsIDB4MDApOyAgLypDYXIxKEZNKSBMU0IgWE1IeiovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0MyTVNCLCAweDAwKTsgIC8qQ2FyMihOSUNBTSkgTVNCIFhNSHoqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9DMk1JQiwgMHgwMCk7ICAvKkNhcjIoTklDQU0pIE1JQiBYTUh6Ki8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQzJMU0IsIDB4MDApOyAgLypDYXIyKE5JQ0FNKSBMU0IgWE1IeiovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0RDUiwgMHgwMCk7ICAgIC8qRGVtb2QgY29uZmlnIDB4MDAqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9ERUVNLCAweDQ0KTsgICAvKkRFLUVtcGggMGIwMTAwIDAxMDAqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9GTUFULCAweDAwKTsgICAvKkZNIE1hdHJpeCByZWcgMHgwMCovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X1NDMSwgMHgwMCk7ICAgIC8qIFNDQVJUIDEgKFNDMSkqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9TQzIsIDB4MDEpOyAgICAvKiBTQ0FSVCAyIChzYzIpKi8KKworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9DSDFWLCAweDEwKTsgIC8qIENoYW5uZWwgdm9sdW1lIDEgbXV0ZSovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0NIMlYsIDB4MTApOyAgLyogQ2hhbm5lbCB2b2x1bWUgMiBtdXRlICovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0RBQ09TLCAweDAyKTsgLyogc2lnIERBQyBpL28oaW46bmljYW0pKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQURDSVMsIDB4NmYpOyAvKiBzaWcgQURDIGlucHV0KGluOm1vbm8pKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfTE9TUiwgMHgwMCk7ICAvKiBsaW5lIG91dCAoaW46bW9ubykqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9BRVIsIDB4MDApOyAgIC8qMDYgRWZmZWN0IChBVkwrUFNFVURPKSAqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9NQ1MsIDB4NDQpOyAgIC8qIE1haW4gY2ggc2VsZWN0IChEQUMpICovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X01WTCwgMHgwMyk7ICAgLyogVm9sIE1haW4gbGVmdCAxMGRCICovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X01WUiwgMHgwMyk7ICAgLyogVm9sIE1haW4gcmlnaHQgMTBkQiovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X01CQSwgMHgwMCk7ICAgLyogTWFpbiBCYXNzIE1haW4gMGRCKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfTVRSLCAweDAwKTsgICAvKiBNYWluIFRyZWJsZSBNYWluIDBkQiovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0FDUywgMHg0NCk7ICAgLyogQXV4IGNoYW4gc2VsZWN0IChkYWMpKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQVZMLCAweDAwKTsgICAvKiBWb2wgQXV4IGxlZnQgMGRCKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQVZSLCAweDAwKTsgICAvKiBWb2wgQXV4IHJpZ2h0IDBkQiovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0FCQSwgMHgwMCk7ICAgLyogQXV4IEJhc3MgTWFpbiAwZEIqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9BVFIsIDB4MDApOyAgIC8qIEF1eCBBaWd1cyBNYWluIDBkQiovCisKKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfTVVULCAweGNjKTsgICAvKiBHZW5lcmFsIG11dGUgICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGRhOTg3NV92b2x1bWUoaW50IHZhbCkgeyByZXR1cm4gKHVuc2lnbmVkIGNoYXIpKHZhbCAvIDYwMiAtIDg0KTsgfQorc3RhdGljIGludCB0ZGE5ODc1X2Jhc3MoaW50IHZhbCkgeyByZXR1cm4gKHVuc2lnbmVkIGNoYXIpKG1heCgtMTIsIHZhbCAvIDIxMTUgLSAxNSkpOyB9CitzdGF0aWMgaW50IHRkYTk4NzVfdHJlYmxlKGludCB2YWwpIHsgcmV0dXJuICh1bnNpZ25lZCBjaGFyKSh2YWwgLyAyNjIyIC0gMTIpOyB9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKiogKgorICogaTJjIGludGVyZmFjZSBmdW5jdGlvbnMgKgorICogKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworc3RhdGljIGludCB0ZGE5ODc1X2NoZWNraXQoc3RydWN0IENISVBTVEFURSAqY2hpcCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gJmNoaXAtPnNkOworCWludCBkaWMsIHJldjsKKworCWRpYyA9IGNoaXBfcmVhZDIoY2hpcCwgMjU0KTsKKwlyZXYgPSBjaGlwX3JlYWQyKGNoaXAsIDI1NSk7CisKKwlpZiAoZGljID09IDAgfHwgZGljID09IDIpIHsgLyogdGRhOTg3NSBhbmQgdGRhOTg3NUEgKi8KKwkJdjRsMl9pbmZvKHNkLCAiZm91bmQgdGRhOTg3NSVzIHJldi4gJWQuXG4iLAorCQkJZGljID09IDAgPyAiIiA6ICJBIiwgcmV2KTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBhdWRpbyBjaGlwIGRlc2NyaXB0aW9ucyAtIGRlZmluZXMrZnVuY3Rpb25zIGZvciB0ZWE2NDIwICAgICAgICAgICAgICAgICovCkBAIC0xMjgwLDYgKzEzOTAsNyBAQAogc3RhdGljIGludCB0ZGE5ODU1ICA9IDE7CiBzdGF0aWMgaW50IHRkYTk4NzMgID0gMTsKIHN0YXRpYyBpbnQgdGRhOTg3NGEgPSAxOworc3RhdGljIGludCB0ZGE5ODc1ICA9IDE7CiBzdGF0aWMgaW50IHRlYTYzMDA7CS8qIGRlZmF1bHQgMCAtIGFkZHJlc3MgY2xhc2ggd2l0aCBtc3AzNHh4ICovCiBzdGF0aWMgaW50IHRlYTYzMjA7CS8qIGRlZmF1bHQgMCAtIGFkZHJlc3MgY2xhc2ggd2l0aCBtc3AzNHh4ICovCiBzdGF0aWMgaW50IHRlYTY0MjAgID0gMTsKQEAgLTEyOTIsNiArMTQwMyw3IEBACiBtb2R1bGVfcGFyYW0odGRhOTg1NSwgaW50LCAwNDQ0KTsKIG1vZHVsZV9wYXJhbSh0ZGE5ODczLCBpbnQsIDA0NDQpOwogbW9kdWxlX3BhcmFtKHRkYTk4NzRhLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKHRkYTk4NzUsIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0odGVhNjMwMCwgaW50LCAwNDQ0KTsKIG1vZHVsZV9wYXJhbSh0ZWE2MzIwLCBpbnQsIDA0NDQpOwogbW9kdWxlX3BhcmFtKHRlYTY0MjAsIGludCwgMDQ0NCk7CkBAIC0xMzQ5LDYgKzE0NjEsMjYgQEAKIAkJLnNldG1vZGUgICAgPSB0ZGE5ODc0YV9zZXRtb2RlLAogCX0sCiAJeworCQkubmFtZSAgICAgICA9ICJ0ZGE5ODc1IiwKKwkJLmluc21vZG9wdCAgPSAmdGRhOTg3NSwKKwkJLmFkZHJfbG8gICAgPSBJMkNfQUREUl9UREE5ODc1ID4+IDEsCisJCS5hZGRyX2hpICAgID0gSTJDX0FERFJfVERBOTg3NSA+PiAxLAorCQkuZmxhZ3MgICAgICA9IENISVBfSEFTX1ZPTFVNRSB8IENISVBfSEFTX0JBU1NUUkVCTEUsCisKKwkJLyogY2FsbGJhY2tzICovCisJCS5pbml0aWFsaXplID0gdGRhOTg3NV9pbml0aWFsaXplLAorCQkuY2hlY2tpdCAgICA9IHRkYTk4NzVfY2hlY2tpdCwKKwkJLnZvbGZ1bmMgICAgPSB0ZGE5ODc1X3ZvbHVtZSwKKwkJLmJhc3NmdW5jICAgPSB0ZGE5ODc1X2Jhc3MsCisJCS50cmVibGVmdW5jID0gdGRhOTg3NV90cmVibGUsCisJCS5sZWZ0cmVnICAgID0gVERBOTg3NV9NVkwsCisJCS5yaWdodHJlZyAgID0gVERBOTg3NV9NVlIsCisJCS5iYXNzcmVnICAgID0gVERBOTg3NV9NQkEsCisJCS50cmVibGVyZWcgID0gVERBOTg3NV9NVFIsCisJCS5sZWZ0aW5pdCAgID0gNTg4ODAsCisJCS5yaWdodGluaXQgID0gNTg4ODAsCisJfSwKKwl7CiAJCS5uYW1lICAgICAgID0gInRkYTk4NTAiLAogCQkuaW5zbW9kb3B0ICA9ICZ0ZGE5ODUwLAogCQkuYWRkcl9sbyAgICA9IEkyQ19BRERSX1REQTk4NXhfTCA+PiAxLApAQCAtMTUxMSw2ICsxNjQzLDggQEAKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCWlmICghKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfSU5QVVRTRUwpKQorCQkJYnJlYWs7CiAJCWN0cmwtPnZhbHVlPWNoaXAtPm11dGVkOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKQEAgLTE1NTIsNiArMTY4Niw5IEBACiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAoIShkZXNjLT5mbGFncyAmIENISVBfSEFTX0lOUFVUU0VMKSkKKwkJCWJyZWFrOworCiAJCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPj0gMikKIAkJCXJldHVybiAtRVJBTkdFOwogCQljaGlwLT5tdXRlZCA9IGN0cmwtPnZhbHVlOwpAQCAtMTYzNiwyMSArMTc3MywyNiBAQAogCiAJc3dpdGNoIChxYy0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCWlmIChkZXNjLT5mbGFncyAmIENISVBfSEFTX0lOUFVUU0VMKQorCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCWlmIChkZXNjLT5mbGFncyAmIENISVBfSEFTX1ZPTFVNRSkKKwkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCA1ODg4MCk7CisJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKLQkJaWYgKCEoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19WT0xVTUUpKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChkZXNjLT5mbGFncyAmIENISVBfSEFTX1ZPTFVNRSkKKwkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCAzMjc2OCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJaWYgKCEoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19CQVNTVFJFQkxFKSkKLQkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19CQVNTVFJFQkxFKQorCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDMyNzY4KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOwogCX0KLQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjKTsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIGludCB0dmF1ZGlvX3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpydCkKQEAgLTE2NTgsNyArMTgwMCw5IEBACiAJc3RydWN0IENISVBTVEFURSAqY2hpcCA9IHRvX3N0YXRlKHNkKTsKIAlzdHJ1Y3QgQ0hJUERFU0MgKmRlc2MgPSBjaGlwLT5kZXNjOwogCi0JaWYgKCEoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19JTlBVVFNFTCkgfHwgcnQtPmlucHV0ID49IDQpCisJaWYgKCEoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19JTlBVVFNFTCkpCisJCXJldHVybiAwOworCWlmIChydC0+aW5wdXQgPj0gNCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJLyogVGhlcmUgYXJlIGZvdXIgaW5wdXRzOiB0dW5lciwgcmFkaW8sIGV4dGVybiBhbmQgaW50ZXJuLiAqLwogCWNoaXAtPmlucHV0ID0gcnQtPmlucHV0OwpAQCAtMTY3NSw4ICsxODE5LDExIEBACiAJc3RydWN0IENISVBERVNDICpkZXNjID0gY2hpcC0+ZGVzYzsKIAlpbnQgbW9kZSA9IDA7CiAKKwlpZiAoIWRlc2MtPnNldG1vZGUpCisJCXJldHVybiAwOwogCWlmIChjaGlwLT5yYWRpbykKIAkJcmV0dXJuIDA7CisKIAlzd2l0Y2ggKHZ0LT5hdWRtb2RlKSB7CiAJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKIAljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86CkBAIC0xNjkyLDcgKzE4MzksNyBAQAogCX0KIAljaGlwLT5hdWRtb2RlID0gdnQtPmF1ZG1vZGU7CiAKLQlpZiAoZGVzYy0+c2V0bW9kZSAmJiBtb2RlKSB7CisJaWYgKG1vZGUpIHsKIAkJY2hpcC0+d2F0Y2hfc3RlcmVvID0gMDsKIAkJLyogZGVsX3RpbWVyKCZjaGlwLT53dCk7ICovCiAJCWNoaXAtPm1vZGUgPSBtb2RlOwpAQCAtMTcwNywxNSArMTg1NCwxNyBAQAogCXN0cnVjdCBDSElQREVTQyAqZGVzYyA9IGNoaXAtPmRlc2M7CiAJaW50IG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKIAorCWlmICghZGVzYy0+Z2V0bW9kZSkKKwkJcmV0dXJuIDA7CiAJaWYgKGNoaXAtPnJhZGlvKQogCQlyZXR1cm4gMDsKKwogCXZ0LT5hdWRtb2RlID0gY2hpcC0+YXVkbW9kZTsKIAl2dC0+cnhzdWJjaGFucyA9IDA7CiAJdnQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfAogCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyOwogCi0JaWYgKGRlc2MtPmdldG1vZGUpCi0JCW1vZGUgPSBkZXNjLT5nZXRtb2RlKGNoaXApOworCW1vZGUgPSBkZXNjLT5nZXRtb2RlKGNoaXApOwogCiAJaWYgKG1vZGUgJiBWNEwyX1RVTkVSX01PREVfTU9OTykKIAkJdnQtPnJ4c3ViY2hhbnMgfD0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKQEAgLTE5MDEsNiArMjA1MCw3IEBACiAJfQogCiAJY2hpcC0+dGhyZWFkID0gTlVMTDsKKwlpbml0X3RpbWVyKCZjaGlwLT53dCk7CiAJaWYgKGRlc2MtPmZsYWdzICYgQ0hJUF9ORUVEX0NIRUNLTU9ERSkgewogCQlpZiAoIWRlc2MtPmdldG1vZGUgfHwgIWRlc2MtPnNldG1vZGUpIHsKIAkJCS8qIFRoaXMgc2hvdWxkbid0IGJlIGhhcHBlbi4gV2FybiB1c2VyLCBidXQga2VlcCB3b3JraW5nCkBAIC0xOTEwLDcgKzIwNjAsNiBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAkJLyogc3RhcnQgYXN5bmMgdGhyZWFkICovCi0JCWluaXRfdGltZXIoJmNoaXAtPnd0KTsKIAkJY2hpcC0+d3QuZnVuY3Rpb24gPSBjaGlwX3RocmVhZF93YWtlOwogCQljaGlwLT53dC5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKWNoaXA7CiAJCWNoaXAtPnRocmVhZCA9IGt0aHJlYWRfcnVuKGNoaXBfdGhyZWFkLCBjaGlwLCBjbGllbnQtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCmluZGV4IDc4Mjc3YWIuLmUyNGEzOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKQEAgLTI2MSw3ICsyNjEsMTIgQEAKIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgIAkJIk1heExpbmVhciBNWEw1MDA1X3YyIn0sCiAJeyBUVU5FUl9QSElMSVBTX1REQTgyOTAsIAkiUGhpbGlwcyAxODI3MV84Mjk1In0sCiAJLyogMTUwLTE1OSAqLwotCXsgVFVORVJfQUJTRU5ULCAgICAgICAgICAgICAgICAgIlhjZWl2ZSBYQzUwMDAifSwKKwl7IFRVTkVSX1hDNTAwMCwgICAgICAgICAgICAgICAgICJYY2VpdmUgWEM1MDAwIn0sCisJeyBUVU5FUl9BQlNFTlQsICAgICAgICAgICAgICAgICAiWGNlaXZlIFhDMzAyOEwifSwKKwl7IFRVTkVSX0FCU0VOVCwgICAgICAgICAgICAgICAgICJOWFAgMTgyNzFDMl83MTZ4In0sCisJeyBUVU5FUl9BQlNFTlQsICAgICAgICAgICAgICAgICAiWGNlaXZlIFhDNDAwMCJ9LAorCXsgVFVORVJfQUJTRU5ULCAgICAgICAgICAgICAgICAgIkRpYmNvbSA3MDcwIn0sCisJeyBUVU5FUl9QSElMSVBTX1REQTgyOTAsICAgICAgICAiTlhQIDE4MjcxQzIifSwKIH07CiAKIC8qIFVzZSBWNEwyX0lERU5UX0FNQklHVU9VUyBmb3IgdGhvc2UgYXVkaW8gJ2NoaXBzJyB0aGF0IGFyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTR4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNHguYwppbmRleCA4ZTIzYWE1Li40MjYyZTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNHguYwpAQCAtODYsOSArODYsMTIgQEAKIAlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCBzdGFuZGFyZDsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdHZwNTE0eF9yZWcgdHZwNTE0eF9yZWdfbGlzdF9kZWZhdWx0WzB4NDBdOwogLyoqCi0gKiBzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVkIC0gVFZQNTE0Ni80NyBkZWNvZGVyIG9iamVjdAorICogc3RydWN0IHR2cDUxNHhfZGVjb2RlciAtIFRWUDUxNDYvNDcgZGVjb2RlciBvYmplY3QKICAqIEB2NGwyX2ludF9kZXZpY2U6IFNsYXZlIGhhbmRsZQorICogQHR2cDUxNHhfc2xhdmU6IFNsYXZlIHBvaW50ZXIgd2hpY2ggaXMgdXNlZCBieSBAdjRsMl9pbnRfZGV2aWNlCisgKiBAdHZwNTE0eF9yZWdzOiBjb3B5IG9mIGh3J3MgcmVncyB3aXRoIHByZXNldCB2YWx1ZXMuCiAgKiBAcGRhdGE6IEJvYXJkIHNwZWNpZmljCiAgKiBAY2xpZW50OiBJMkMgY2xpZW50IGRhdGEKICAqIEBpZDogRW50cnkgZnJvbSBJMkMgdGFibGUKQEAgLTEwMyw3ICsxMDYsOSBAQAogICogQHJvdXRlOiBpbnB1dCBhbmQgb3V0cHV0IHJvdXRpbmcgYXQgY2hpcCBsZXZlbAogICovCiBzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyIHsKLQlzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICp2NGwyX2ludF9kZXZpY2U7CisJc3RydWN0IHY0bDJfaW50X2RldmljZSB2NGwyX2ludF9kZXZpY2U7CisJc3RydWN0IHY0bDJfaW50X3NsYXZlIHR2cDUxNHhfc2xhdmU7CisJc3RydWN0IHR2cDUxNHhfcmVnIHR2cDUxNHhfcmVnc1tBUlJBWV9TSVpFKHR2cDUxNHhfcmVnX2xpc3RfZGVmYXVsdCldOwogCWNvbnN0IHN0cnVjdCB0dnA1MTR4X3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAKQEAgLTEyNCw3ICsxMjksNyBAQAogfTsKIAogLyogVFZQNTE0eCBkZWZhdWx0IHJlZ2lzdGVyIHZhbHVlcyAqLwotc3RhdGljIHN0cnVjdCB0dnA1MTR4X3JlZyB0dnA1MTR4X3JlZ19saXN0W10gPSB7CitzdGF0aWMgc3RydWN0IHR2cDUxNHhfcmVnIHR2cDUxNHhfcmVnX2xpc3RfZGVmYXVsdFtdID0gewogCXtUT0tfV1JJVEUsIFJFR19JTlBVVF9TRUwsIDB4MDV9LAkvKiBDb21wb3NpdGUgc2VsZWN0ZWQgKi8KIAl7VE9LX1dSSVRFLCBSRUdfQUZFX0dBSU5fQ1RSTCwgMHgwRn0sCiAJe1RPS19XUklURSwgUkVHX1ZJREVPX1NURCwgMHgwMH0sCS8qIEF1dG8gbW9kZSAqLwpAQCAtNDIyLDcgKzQyNyw3IEBACiAKIAkvKiBjb21tb24gcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gKi8KIAllcnIgPQotCSAgICB0dnA1MTR4X3dyaXRlX3JlZ3MoZGVjb2Rlci0+Y2xpZW50LCB0dnA1MTR4X3JlZ19saXN0KTsKKwkgICAgdHZwNTE0eF93cml0ZV9yZWdzKGRlY29kZXItPmNsaWVudCwgZGVjb2Rlci0+dHZwNTE0eF9yZWdzKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC01ODAsNyArNTg1LDggQEAKIAkJcmV0dXJuIGVycjsKIAogCWRlY29kZXItPmN1cnJlbnRfc3RkID0gaTsKLQl0dnA1MTR4X3JlZ19saXN0W1JFR19WSURFT19TVERdLnZhbCA9IGRlY29kZXItPnN0ZF9saXN0W2ldLnZpZGVvX3N0ZDsKKwlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX1ZJREVPX1NURF0udmFsID0KKwkJZGVjb2Rlci0+c3RkX2xpc3RbaV0udmlkZW9fc3RkOwogCiAJdjRsX2RiZygxLCBkZWJ1ZywgZGVjb2Rlci0+Y2xpZW50LCAiU3RhbmRhcmQgc2V0IHRvOiAlcyIsCiAJCQlkZWNvZGVyLT5zdGRfbGlzdFtpXS5zdGFuZGFyZC5uYW1lKTsKQEAgLTYyNSw4ICs2MzEsOCBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQl0dnA1MTR4X3JlZ19saXN0W1JFR19JTlBVVF9TRUxdLnZhbCA9IGlucHV0X3NlbDsKLQl0dnA1MTR4X3JlZ19saXN0W1JFR19PVVRQVVRfRk9STUFUVEVSMV0udmFsID0gb3V0cHV0X3NlbDsKKwlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX0lOUFVUX1NFTF0udmFsID0gaW5wdXRfc2VsOworCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfT1VUUFVUX0ZPUk1BVFRFUjFdLnZhbCA9IG91dHB1dF9zZWw7CiAKIAkvKiBDbGVhciBzdGF0dXMgKi8KIAltc2xlZXAoTE9DS19SRVRSWV9ERUxBWSk7CkBAIC02ODYsNyArNjkyLDcgQEAKIAkJCWJyZWFrOwkvKiBJbnB1dCBkZXRlY3RlZCAqLwogCX0KIAotCWlmICgoY3VycmVudF9zdGQgPT0gU1REX0lOVkFMSUQpIHx8ICh0cnlfY291bnQgPCAwKSkKKwlpZiAoKGN1cnJlbnRfc3RkID09IFNURF9JTlZBTElEKSB8fCAodHJ5X2NvdW50IDw9IDApKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRlY29kZXItPmN1cnJlbnRfc3RkID0gY3VycmVudF9zdGQ7CkBAIC03MTksMTAgKzcyNSw5IEBACiAKIAlzd2l0Y2ggKHFjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJLyogQnJpZ2h0bmVzcyBzdXBwb3J0ZWQgaXMgc2FtZSBhcyBzdGFuZGFyZCBvbmUgKDAtMjU1KSwKLQkJICogc28gbWFrZSB1c2Ugb2Ygc3RhbmRhcmQgQVBJIHByb3ZpZGVkLgorCQkvKiBCcmlnaHRuZXNzIHN1cHBvcnRlZCBpcyAoMC0yNTUpLAogCQkgKi8KLQkJZXJyID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjdHJsKTsKKwkJZXJyID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI1NSwgMSwgMTI4KTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CkBAIC03NzksMTYgKzc4NCwxNiBAQAogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJY3RybC0+dmFsdWUgPSB0dnA1MTR4X3JlZ19saXN0W1JFR19CUklHSFRORVNTXS52YWw7CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19CUklHSFRORVNTXS52YWw7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6Ci0JCWN0cmwtPnZhbHVlID0gdHZwNTE0eF9yZWdfbGlzdFtSRUdfQ09OVFJBU1RdLnZhbDsKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX0NPTlRSQVNUXS52YWw7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJY3RybC0+dmFsdWUgPSB0dnA1MTR4X3JlZ19saXN0W1JFR19TQVRVUkFUSU9OXS52YWw7CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19TQVRVUkFUSU9OXS52YWw7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfSFVFOgotCQljdHJsLT52YWx1ZSA9IHR2cDUxNHhfcmVnX2xpc3RbUkVHX0hVRV0udmFsOworCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfSFVFXS52YWw7CiAJCWlmIChjdHJsLT52YWx1ZSA9PSAweDdGKQogCQkJY3RybC0+dmFsdWUgPSAxODA7CiAJCWVsc2UgaWYgKGN0cmwtPnZhbHVlID09IDB4ODApCkBAIC03OTgsNyArODAzLDcgQEAKIAogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVVE9HQUlOOgotCQljdHJsLT52YWx1ZSA9IHR2cDUxNHhfcmVnX2xpc3RbUkVHX0FGRV9HQUlOX0NUUkxdLnZhbDsKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX0FGRV9HQUlOX0NUUkxdLnZhbDsKIAkJaWYgKChjdHJsLT52YWx1ZSAmIDB4MykgPT0gMykKIAkJCWN0cmwtPnZhbHVlID0gMTsKIAkJZWxzZQpAQCAtODQ4LDcgKzg1Myw3IEBACiAJCQkJdmFsdWUpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKLQkJdHZwNTE0eF9yZWdfbGlzdFtSRUdfQlJJR0hUTkVTU10udmFsID0gdmFsdWU7CisJCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfQlJJR0hUTkVTU10udmFsID0gdmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CiAJCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPiAyNTUpIHsKQEAgLTg2MSw3ICs4NjYsNyBAQAogCQkJCXZhbHVlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7Ci0JCXR2cDUxNHhfcmVnX2xpc3RbUkVHX0NPTlRSQVNUXS52YWwgPSB2YWx1ZTsKKwkJZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19DT05UUkFTVF0udmFsID0gdmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKIAkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+IDI1NSkgewpAQCAtODc0LDcgKzg3OSw3IEBACiAJCQkJdmFsdWUpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKLQkJdHZwNTE0eF9yZWdfbGlzdFtSRUdfU0FUVVJBVElPTl0udmFsID0gdmFsdWU7CisJCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfU0FUVVJBVElPTl0udmFsID0gdmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfSFVFOgogCQlpZiAodmFsdWUgPT0gMTgwKQpAQCAtODkzLDcgKzg5OCw3IEBACiAJCQkJdmFsdWUpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKLQkJdHZwNTE0eF9yZWdfbGlzdFtSRUdfSFVFXS52YWwgPSB2YWx1ZTsKKwkJZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19IVUVdLnZhbCA9IHZhbHVlOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVVE9HQUlOOgogCQlpZiAodmFsdWUgPT0gMSkKQEAgLTkxMCw3ICs5MTUsNyBAQAogCQkJCXZhbHVlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7Ci0JCXR2cDUxNHhfcmVnX2xpc3RbUkVHX0FGRV9HQUlOX0NUUkxdLnZhbCA9IHZhbHVlOworCQlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX0FGRV9HQUlOX0NUUkxdLnZhbCA9IHZhbHVlOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQl2NGxfZXJyKGRlY29kZXItPmNsaWVudCwKQEAgLTEyNzUsNyArMTI4MCw3IEBACiAJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7CiAKIAkvKiBTZXQgZGVmYXVsdCBzdGFuZGFyZCB0byBhdXRvICovCi0JdHZwNTE0eF9yZWdfbGlzdFtSRUdfVklERU9fU1REXS52YWwgPQorCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfVklERU9fU1REXS52YWwgPQogCSAgICBWSURFT19TVERfQVVUT19TV0lUQ0hfQklUOwogCiAJcmV0dXJuIHR2cDUxNHhfY29uZmlndXJlKGRlY29kZXIpOwpAQCAtMTM0NCwxMSArMTM0OSw2IEBACiAJCSh2NGwyX2ludF9pb2N0bF9mdW5jICopIGlvY3RsX3Nfcm91dGluZ30sCiB9OwogCi1zdGF0aWMgc3RydWN0IHY0bDJfaW50X3NsYXZlIHR2cDUxNHhfc2xhdmUgPSB7Ci0JLmlvY3RscyA9IHR2cDUxNHhfaW9jdGxfZGVzYywKLQkubnVtX2lvY3RscyA9IEFSUkFZX1NJWkUodHZwNTE0eF9pb2N0bF9kZXNjKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyIHR2cDUxNHhfZGV2ID0gewogCS5zdGF0ZSA9IFNUQVRFX05PVF9ERVRFQ1RFRCwKIApAQCAtMTM2OSwxNyArMTM2OSwxNSBAQAogCS5jdXJyZW50X3N0ZCA9IFNURF9OVFNDX01KLAogCS5zdGRfbGlzdCA9IHR2cDUxNHhfc3RkX2xpc3QsCiAJLm51bV9zdGRzID0gQVJSQVlfU0laRSh0dnA1MTR4X3N0ZF9saXN0KSwKLQotfTsKLQotc3RhdGljIHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgdHZwNTE0eF9pbnRfZGV2aWNlID0gewotCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKLQkubmFtZSA9IFRWUDUxNFhfTU9EVUxFX05BTUUsCi0JLnByaXYgPSAmdHZwNTE0eF9kZXYsCi0JLnR5cGUgPSB2NGwyX2ludF90eXBlX3NsYXZlLAotCS51ID0gewotCSAgICAgIC5zbGF2ZSA9ICZ0dnA1MTR4X3NsYXZlLAotCSAgICAgIH0sCisJLnY0bDJfaW50X2RldmljZSA9IHsKKwkJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9IFRWUDUxNFhfTU9EVUxFX05BTUUsCisJCS50eXBlID0gdjRsMl9pbnRfdHlwZV9zbGF2ZSwKKwl9LAorCS50dnA1MTR4X3NsYXZlID0geworCQkuaW9jdGxzID0gdHZwNTE0eF9pb2N0bF9kZXNjLAorCQkubnVtX2lvY3RscyA9IEFSUkFZX1NJWkUodHZwNTE0eF9pb2N0bF9kZXNjKSwKKwl9LAogfTsKIAogLyoqCkBAIC0xMzkyLDI2ICsxMzkwLDM3IEBACiBzdGF0aWMgaW50CiB0dnA1MTR4X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gJnR2cDUxNHhfZGV2OworCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXI7CiAJaW50IGVycjsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlkZWNvZGVyLT5wZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JaWYgKCFkZWNvZGVyLT5wZGF0YSkgeworCWRlY29kZXIgPSBremFsbG9jKHNpemVvZigqZGVjb2RlciksIEdGUF9LRVJORUwpOworCWlmICghZGVjb2RlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIWNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKIAkJdjRsX2VycihjbGllbnQsICJObyBwbGF0Zm9ybSBkYXRhISFcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZTsKIAl9CisKKwkqZGVjb2RlciA9IHR2cDUxNHhfZGV2OworCWRlY29kZXItPnY0bDJfaW50X2RldmljZS5wcml2ID0gZGVjb2RlcjsKKwlkZWNvZGVyLT5wZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJZGVjb2Rlci0+djRsMl9pbnRfZGV2aWNlLnUuc2xhdmUgPSAmZGVjb2Rlci0+dHZwNTE0eF9zbGF2ZTsKKwltZW1jcHkoZGVjb2Rlci0+dHZwNTE0eF9yZWdzLCB0dnA1MTR4X3JlZ19saXN0X2RlZmF1bHQsCisJCQlzaXplb2YodHZwNTE0eF9yZWdfbGlzdF9kZWZhdWx0KSk7CiAJLyoKIAkgKiBGZXRjaCBwbGF0Zm9ybSBzcGVjaWZpYyBkYXRhLCBhbmQgY29uZmlndXJlIHRoZQogCSAqIHR2cDUxNHhfcmVnX2xpc3RbXSBhY2NvcmRpbmdseS4gU2luY2UgdGhpcyBpcyBvbmUKIAkgKiB0aW1lIGNvbmZpZ3VyYXRpb24sIG5vIG5lZWQgdG8gcHJlc2VydmUuCiAJICovCi0JdHZwNTE0eF9yZWdfbGlzdFtSRUdfT1VUUFVUX0ZPUk1BVFRFUjJdLnZhbCB8PQorCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfT1VUUFVUX0ZPUk1BVFRFUjJdLnZhbCB8PQogCQkJKGRlY29kZXItPnBkYXRhLT5jbGtfcG9sYXJpdHkgPDwgMSk7Ci0JdHZwNTE0eF9yZWdfbGlzdFtSRUdfU1lOQ19DT05UUk9MXS52YWwgfD0KKwlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX1NZTkNfQ09OVFJPTF0udmFsIHw9CiAJCQkoKGRlY29kZXItPnBkYXRhLT5oc19wb2xhcml0eSA8PCAyKSB8CiAJCQkoZGVjb2Rlci0+cGRhdGEtPnZzX3BvbGFyaXR5IDw8IDMpKTsKIAkvKgpAQCAtMTQxOSwyMyArMTQyOCwyNyBAQAogCSAqLwogCWRlY29kZXItPmlkID0gKHN0cnVjdCBpMmNfZGV2aWNlX2lkICopaWQ7CiAJLyogQXR0YWNoIHRvIE1hc3RlciAqLwotCXN0cmNweSh0dnA1MTR4X2ludF9kZXZpY2UudS5zbGF2ZS0+YXR0YWNoX3RvLCBkZWNvZGVyLT5wZGF0YS0+bWFzdGVyKTsKLQlkZWNvZGVyLT52NGwyX2ludF9kZXZpY2UgPSAmdHZwNTE0eF9pbnRfZGV2aWNlOworCXN0cmNweShkZWNvZGVyLT52NGwyX2ludF9kZXZpY2UudS5zbGF2ZS0+YXR0YWNoX3RvLAorCQkJZGVjb2Rlci0+cGRhdGEtPm1hc3Rlcik7CiAJZGVjb2Rlci0+Y2xpZW50ID0gY2xpZW50OwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlY29kZXIpOwogCiAJLyogUmVnaXN0ZXIgd2l0aCBWNEwyIGxheWVyIGFzIHNsYXZlIGRldmljZSAqLwotCWVyciA9IHY0bDJfaW50X2RldmljZV9yZWdpc3RlcihkZWNvZGVyLT52NGwyX2ludF9kZXZpY2UpOworCWVyciA9IHY0bDJfaW50X2RldmljZV9yZWdpc3RlcigmZGVjb2Rlci0+djRsMl9pbnRfZGV2aWNlKTsKIAlpZiAoZXJyKSB7CiAJCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOwogCQl2NGxfZXJyKGNsaWVudCwKIAkJCSJVbmFibGUgdG8gcmVnaXN0ZXIgdG8gdjRsMi4gRXJyWyVkXVxuIiwgZXJyKTsKKwkJZ290byBvdXRfZnJlZTsKIAogCX0gZWxzZQogCQl2NGxfaW5mbyhjbGllbnQsICJSZWdpc3RlcmVkIHRvIHY0bDIgbWFzdGVyICVzISFcbiIsCiAJCQkJZGVjb2Rlci0+cGRhdGEtPm1hc3Rlcik7Ci0KIAlyZXR1cm4gMDsKKworb3V0X2ZyZWU6CisJa2ZyZWUoZGVjb2Rlcik7CisJcmV0dXJuIGVycjsKIH0KIAogLyoqCkBAIC0xNDUyLDkgKzE0NjUsOSBAQAogCWlmICghY2xpZW50LT5hZGFwdGVyKQogCQlyZXR1cm4gLUVOT0RFVjsJLyogb3VyIGNsaWVudCBpc24ndCBhdHRhY2hlZCAqLwogCi0JdjRsMl9pbnRfZGV2aWNlX3VucmVnaXN0ZXIoZGVjb2Rlci0+djRsMl9pbnRfZGV2aWNlKTsKKwl2NGwyX2ludF9kZXZpY2VfdW5yZWdpc3RlcigmZGVjb2Rlci0+djRsMl9pbnRfZGV2aWNlKTsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKLQorCWtmcmVlKGRlY29kZXIpOwogCXJldHVybiAwOwogfQogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKaW5kZXggMmNkNjRlZi4uM2E1YTk1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKQEAgLTgsNyArOCw2IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS90dnA1MTUwLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgpAQCAtNjMyLDcgKzYzMSw3IEBACiAJY29uc3Qgc3RydWN0IGkyY192YmlfcmFtX3ZhbHVlICpyZWdzID0gdmJpX3JhbV9kZWZhdWx0OwogCWludCBsaW5lOwogCi0JdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVBcbiIpOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImdfc2xpY2VkX3ZiaV9jYXBcbiIpOwogCW1lbXNldChjYXAsIDAsIHNpemVvZiAqY2FwKTsKIAogCXdoaWxlIChyZWdzLT5yZWcgIT0gKHUxNiktMSApIHsKQEAgLTgzMSw3ICs4MzAsNyBAQAogCiBzdGF0aWMgaW50IHR2cDUxNTBfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0JdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiVklESU9DX0dfQ1RSTCBjYWxsZWRcbiIpOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImdfY3RybCBjYWxsZWRcbiIpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKQEAgLTg2MSw3ICs4NjAsNyBAQAogCQlpZiAoY3RybC0+dmFsdWUgPCB0dnA1MTUwX3FjdHJsW2ldLm1pbmltdW0gfHwKIAkJICAgIGN0cmwtPnZhbHVlID4gdHZwNTE1MF9xY3RybFtpXS5tYXhpbXVtKQogCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlZJRElPQ19TX0NUUkw6IGlkPSVkLCB2YWx1ZT0lZFxuIiwKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic19jdHJsOiBpZD0lZCwgdmFsdWU9JWRcbiIsCiAJCQkJCWN0cmwtPmlkLCBjdHJsLT52YWx1ZSk7CiAJCWJyZWFrOwogCX0KQEAgLTEwMTUsNyArMTAxNCw3IEBACiB7CiAJaW50IGk7CiAKLQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJWSURJT0NfUVVFUllDVFJMIGNhbGxlZFxuIik7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAicXVlcnljdHJsIGNhbGxlZFxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0dnA1MTUwX3FjdHJsKTsgaSsrKQogCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSB0dnA1MTUwX3FjdHJsW2ldLmlkKSB7CkBAIC0xMTI2LDcgKzExMjUsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidHZwNTE1MCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1RWUDUxNTAsCiAJLmNvbW1hbmQgPSB0dnA1MTUwX2NvbW1hbmQsCiAJLnByb2JlID0gdHZwNTE1MF9wcm9iZSwKIAkucmVtb3ZlID0gdHZwNTE1MF9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R3OTkxMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dzk5MTAuYwppbmRleCA1MmMwMzU3Li5hMzk5NDc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R3OTkxMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHc5OTEwLmMKQEAgLTQ2MCw5ICs0NjAsMTEgQEAKIAkJCSAgIHU4IG1hc2ssIHU4IHNldCkKIHsKIAlzMzIgdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgY29tbWFuZCk7CisJaWYgKHZhbCA8IDApCisJCXJldHVybiB2YWw7CiAKIAl2YWwgJj0gfm1hc2s7Ci0JdmFsIHw9ICBzZXQ7CisJdmFsIHw9IHNldCAmIG1hc2s7CiAKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIGNvbW1hbmQsIHZhbCk7CiB9CkBAIC02MzksOCArNjQxLDggQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IHR3OTkxMF9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBfX3UzMiBwaXhmbXQsCi0JCQkgICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorc3RhdGljIGludCB0dzk5MTBfc2V0X2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQogewogCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCB0dzk5MTBfcHJpdiwgaWNkKTsKIAlpbnQgICAgICAgICAgICAgICAgIHJldCAgPSAtRUlOVkFMOwpAQCAtNzMxLDggKzczMywzMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgdHc5OTEwX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSB7CisJCS5sZWZ0CT0gaWNkLT54X2N1cnJlbnQsCisJCS50b3AJPSBpY2QtPnlfY3VycmVudCwKKwkJLndpZHRoCT0gcGl4LT53aWR0aCwKKwkJLmhlaWdodAk9IHBpeC0+aGVpZ2h0LAorCX07CisJaW50IGk7CisKKwkvKgorCSAqIGNoZWNrIGNvbG9yIGZvcm1hdAorCSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHR3OTkxMF9jb2xvcl9mbXQpOyBpKyspCisJCWlmIChwaXgtPnBpeGVsZm9ybWF0ID09IHR3OTkxMF9jb2xvcl9mbXRbaV0uZm91cmNjKQorCQkJYnJlYWs7CisKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKHR3OTkxMF9jb2xvcl9mbXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiB0dzk5MTBfc2V0X2Nyb3AoaWNkLCAmcmVjdCk7Cit9CisKIHN0YXRpYyBpbnQgdHc5OTEwX3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCisJCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKIAljb25zdCBzdHJ1Y3QgdHc5OTEwX3NjYWxlX2N0cmwgKnNjYWxlOwpAQCAtODIwLDYgKzg0Nyw3IEBACiAJLnJlbGVhc2UJCT0gdHc5OTEwX3JlbGVhc2UsCiAJLnN0YXJ0X2NhcHR1cmUJCT0gdHc5OTEwX3N0YXJ0X2NhcHR1cmUsCiAJLnN0b3BfY2FwdHVyZQkJPSB0dzk5MTBfc3RvcF9jYXB0dXJlLAorCS5zZXRfY3JvcAkJPSB0dzk5MTBfc2V0X2Nyb3AsCiAJLnNldF9mbXQJCT0gdHc5OTEwX3NldF9mbXQsCiAJLnRyeV9mbXQJCT0gdHc5OTEwX3RyeV9mbXQsCiAJLnNldF9idXNfcGFyYW0JCT0gdHc5OTEwX3NldF9idXNfcGFyYW0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDMxYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDAzMWEuYwppbmRleCBmNDUyMmJiLi5jMGFjNjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDMxYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwMzFhLmMKQEAgLTE4NywxMSArMTg3LDYgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IHVwZDY0MDMxYV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdXBkNjQwMzFhX2NvcmVfb3BzID0gewpAQCAtMjY3LDggKzI2Miw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ1cGQ2NDAzMWEiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9VUEQ2NDAzMUEsCi0JLmNvbW1hbmQgPSB1cGQ2NDAzMWFfY29tbWFuZCwKIAkucHJvYmUgPSB1cGQ2NDAzMWFfcHJvYmUsCiAJLnJlbW92ZSA9IHVwZDY0MDMxYV9yZW1vdmUsCiAJLmlkX3RhYmxlID0gdXBkNjQwMzFhX2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDA4My5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDA4My5jCmluZGV4IGE1ZmI3NGIuLjQxMGM5MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwODMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDgzLmMKQEAgLTE2NCwxMSArMTY0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1cGQ2NDA4M19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdXBkNjQwODNfY29yZV9vcHMgPSB7CkBAIC0yMzksOCArMjM0LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInVwZDY0MDgzIiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfVVBENjQwODMsCi0JLmNvbW1hbmQgPSB1cGQ2NDA4M19jb21tYW5kLAogCS5wcm9iZSA9IHVwZDY0MDgzX3Byb2JlLAogCS5yZW1vdmUgPSB1cGQ2NDA4M19yZW1vdmUsCiAJLmlkX3RhYmxlID0gdXBkNjQwODNfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMKaW5kZXggMmYxMTA2My4uOGQ3Mzk3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdmljYW0uYwpAQCAtMTkxLDcgKzE5MSw3IEBACiB7CiAJaW50IGVycjsKIAljb25zdCBzdHJ1Y3QgaWhleF9iaW5yZWMgKnJlYzsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqdW5pbml0aWFsaXplZF92YXIoZncpOwogCiAJZXJyID0gcmVxdWVzdF9paGV4X2Zpcm13YXJlKCZmdywgInZpY2FtL2Zpcm13YXJlLmZ3IiwgJmNhbS0+dWRldi0+ZGV2KTsKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYwppbmRleCA5ZTRmNTA2Li5hMGZlYjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1jb3JlLmMKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KIAogI2luY2x1ZGUgPG1lZGlhL3NhYTcxMTUuaD4KQEAgLTM4MSw4ICszODAsOSBAQAogCXVzYnZpc2lvbi0+c2NyYXRjaCA9IHZtYWxsb2NfMzIoc2NyYXRjaF9idWZfc2l6ZSk7CiAJc2NyYXRjaF9yZXNldCh1c2J2aXNpb24pOwogCWlmKHVzYnZpc2lvbi0+c2NyYXRjaCA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSAlZCBieXRlcyBmb3Igc2NyYXRjaCIsCi0JCSAgICBfX2Z1bmNfXywgc2NyYXRjaF9idWZfc2l6ZSk7CisJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCQkiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSAlZCBieXRlcyBmb3Igc2NyYXRjaFxuIiwKKwkJCQlfX2Z1bmNfXywgc2NyYXRjaF9idWZfc2l6ZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQ5MSw4ICs0OTEsOSBAQAogCWludCBJRkJfc2l6ZSA9IE1BWF9GUkFNRV9XSURUSCAqIE1BWF9GUkFNRV9IRUlHSFQgKiAzIC8gMjsKIAl1c2J2aXNpb24tPkludHJhRnJhbWVCdWZmZXIgPSB2bWFsbG9jXzMyKElGQl9zaXplKTsKIAlpZiAodXNidmlzaW9uLT5JbnRyYUZyYW1lQnVmZmVyID09IE5VTEwpIHsKLQkJZXJyKCIlczogdW5hYmxlIHRvIGFsbG9jYXRlICVkIGZvciBjb21wci4gZnJhbWUgYnVmZmVyIiwKLQkJICAgIF9fZnVuY19fLCBJRkJfc2l6ZSk7CisJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCQkiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSAlZCBmb3IgY29tcHIuIGZyYW1lIGJ1ZmZlclxuIiwKKwkJCQlfX2Z1bmNfXywgSUZCX3NpemUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xNTE0LDggKzE1MTUsOSBAQAogCWVyckNvZGUgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKIAogCWlmKGVyckNvZGUpIHsKLQkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkOiBlcnJvciAlZCIsCi0JCSAgICBfX2Z1bmNfXywgZXJyQ29kZSk7CisJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCQkiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZDogZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIGVyckNvZGUpOwogCX0KIAogCXJldHVybjsKQEAgLTE1NDYsNyArMTU0OCw4IEBACiAJCQkJMCwgKF9fdTE2KSByZWcsIGJ1ZmZlciwgMSwgSFopOwogCiAJaWYgKGVyckNvZGUgPCAwKSB7Ci0JCWVycigiJXM6IGZhaWxlZDogZXJyb3IgJWQiLCBfX2Z1bmNfXywgZXJyQ29kZSk7CisJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCQkiJXM6IGZhaWxlZDogZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnJDb2RlKTsKIAkJcmV0dXJuIGVyckNvZGU7CiAJfQogCXJldHVybiBidWZmZXJbMF07CkBAIC0xNTc0LDcgKzE1NzcsOCBAQAogCQkJCVVTQl9SRUNJUF9FTkRQT0lOVCwgMCwgKF9fdTE2KSByZWcsICZ2YWx1ZSwgMSwgSFopOwogCiAJaWYgKGVyckNvZGUgPCAwKSB7Ci0JCWVycigiJXM6IGZhaWxlZDogZXJyb3IgJWQiLCBfX2Z1bmNfXywgZXJyQ29kZSk7CisJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCQkiJXM6IGZhaWxlZDogZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnJDb2RlKTsKIAl9CiAJcmV0dXJuIGVyckNvZGU7CiB9CkBAIC0xODUwLDcgKzE4NTQsOCBAQAogCQkJCSAwLCAoX191MTYpIFVTQlZJU0lPTl9MWFNJWkVfTywgdmFsdWUsIDQsIEhaKTsKIAogCQlpZiAoZXJyQ29kZSA8IDApIHsKLQkJCWVycigiJXMgZmFpbGVkOiBlcnJvciAlZCIsIF9fZnVuY19fLCBlcnJDb2RlKTsKKwkJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCQkJIiVzIGZhaWxlZDogZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnJDb2RlKTsKIAkJCXJldHVybiBlcnJDb2RlOwogCQl9CiAJCXVzYnZpc2lvbi0+Y3Vyd2lkdGggPSB1c2J2aXNpb24tPnN0cmV0Y2hfd2lkdGggKiBVc2JXaWR0aDsKQEAgLTIyMzYsNyArMjI0MSw3IEBACiAJCQkgICAgIChfX3UxNikgVVNCVklTSU9OX0RSTV9QUk0xLCB2YWx1ZSwgOCwgSFopOwogCiAJaWYgKHJjIDwgMCkgewotCQllcnIoIiVzRVJST1I9JWQiLCBfX2Z1bmNfXywgcmMpOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LCAiJXNFUlJPUj0lZFxuIiwgX19mdW5jX18sIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtMjQzMiw4ICsyNDM3LDkgQEAKIAkJUERFQlVHKERCR19GVU5DLCJzZXR0aW5nIGFsdGVybmF0ZSAlZCB3aXRoIHdNYXhQYWNrZXRTaXplPSV1IiwgZGV2LT5pZmFjZUFsdCxkZXYtPmlzb2NQYWNrZXRTaXplKTsKIAkJZXJyQ29kZSA9IHVzYl9zZXRfaW50ZXJmYWNlKGRldi0+ZGV2LCBkZXYtPmlmYWNlLCBkZXYtPmlmYWNlQWx0KTsKIAkJaWYgKGVyckNvZGUgPCAwKSB7Ci0JCQllcnIgKCJjYW5ub3QgY2hhbmdlIGFsdGVybmF0ZSBudW1iZXIgdG8gJWQgKGVycm9yPSVpKSIsCi0JCQkJCQkJZGV2LT5pZmFjZUFsdCwgZXJyQ29kZSk7CisJCQlkZXZfZXJyKCZkZXYtPmRldi0+ZGV2LAorCQkJCSJjYW5ub3QgY2hhbmdlIGFsdGVybmF0ZSBudW1iZXIgdG8gJWQgKGVycm9yPSVpKVxuIiwKKwkJCQkJZGV2LT5pZmFjZUFsdCwgZXJyQ29kZSk7CiAJCQlyZXR1cm4gZXJyQ29kZTsKIAkJfQogCX0KQEAgLTI0ODQsNyArMjQ5MCw4IEBACiAKIAkJdXJiID0gdXNiX2FsbG9jX3VyYihVU0JWSVNJT05fVVJCX0ZSQU1FUywgR0ZQX0tFUk5FTCk7CiAJCWlmICh1cmIgPT0gTlVMTCkgewotCQkJZXJyKCIlczogdXNiX2FsbG9jX3VyYigpIGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCQkJIiVzOiB1c2JfYWxsb2NfdXJiKCkgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQl1c2J2aXNpb24tPnNidWZbYnVmSWR4XS51cmIgPSB1cmI7CkBAIC0yNDk2LDcgKzI1MDMsNyBAQAogCQl1cmItPmRldiA9IGRldjsKIAkJdXJiLT5jb250ZXh0ID0gdXNidmlzaW9uOwogCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUoZGV2LCB1c2J2aXNpb24tPnZpZGVvX2VuZHApOwotCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQIHwgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CiAJCXVyYi0+aW50ZXJ2YWwgPSAxOwogCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHVzYnZpc2lvbi0+c2J1ZltidWZJZHhdLmRhdGE7CiAJCXVyYi0+Y29tcGxldGUgPSB1c2J2aXNpb25faXNvY0lycTsKQEAgLTI1MTYsOCArMjUyMyw5IEBACiAJCQllcnJDb2RlID0gdXNiX3N1Ym1pdF91cmIodXNidmlzaW9uLT5zYnVmW2J1ZklkeF0udXJiLAogCQkJCQkJIEdGUF9LRVJORUwpOwogCQlpZiAoZXJyQ29kZSkgewotCQkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIoJWQpIGZhaWxlZDogZXJyb3IgJWQiLAotCQkJICAgIF9fZnVuY19fLCBidWZJZHgsIGVyckNvZGUpOworCQkJZGV2X2VycigmdXNidmlzaW9uLT5kZXYtPmRldiwKKwkJCQkiJXM6IHVzYl9zdWJtaXRfdXJiKCVkKSBmYWlsZWQ6IGVycm9yICVkXG4iLAorCQkJCQlfX2Z1bmNfXywgYnVmSWR4LCBlcnJDb2RlKTsKIAkJfQogCX0KIApAQCAtMjU2Niw4ICsyNTc0LDkgQEAKIAkJZXJyQ29kZSA9IHVzYl9zZXRfaW50ZXJmYWNlKHVzYnZpc2lvbi0+ZGV2LCB1c2J2aXNpb24tPmlmYWNlLAogCQkJCQkgICAgdXNidmlzaW9uLT5pZmFjZUFsdCk7CiAJCWlmIChlcnJDb2RlIDwgMCkgewotCQkJZXJyKCIlczogdXNiX3NldF9pbnRlcmZhY2UoKSBmYWlsZWQ6IGVycm9yICVkIiwKLQkJCSAgICBfX2Z1bmNfXywgZXJyQ29kZSk7CisJCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJCSIlczogdXNiX3NldF9pbnRlcmZhY2UoKSBmYWlsZWQ6IGVycm9yICVkXG4iLAorCQkJCQlfX2Z1bmNfXywgZXJyQ29kZSk7CiAJCQl1c2J2aXNpb24tPmxhc3RfZXJyb3IgPSBlcnJDb2RlOwogCQl9CiAJCXJlZ1ZhbHVlID0gKDE2LXVzYnZpc2lvbl9yZWFkX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9BTFRFUl9SRUcpKSAmIDB4MEY7CkBAIC0yNjIzLDcgKzI2MzIsNyBAQAogCX0KIAlyb3V0ZS5pbnB1dCA9IG1vZGVbY2hhbm5lbF07CiAJcm91dGUub3V0cHV0ID0gMDsKLQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkcsJnJvdXRlKTsKKwljYWxsX2FsbCh1c2J2aXNpb24sIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAJdXNidmlzaW9uX3NldF9hdWRpbyh1c2J2aXNpb24sIGF1ZGlvW2NoYW5uZWxdKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1pMmMuYwppbmRleCA2YjY2YWU0Li5kZDJmOGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWkyYy5jCkBAIC0xMTksNyArMTE5LDggQEAKIAkJLyogdHJ5IGV4dGVuZGVkIGFkZHJlc3MgY29kZS4uLiAqLwogCQlyZXQgPSB0cnlfd3JpdGVfYWRkcmVzcyhpMmNfYWRhcCwgYWRkciwgcmV0cmllcyk7CiAJCWlmIChyZXQgIT0gMSkgewotCQkJZXJyKCJkaWVkIGF0IGV4dGVuZGVkIGFkZHJlc3MgY29kZSwgd2hpbGUgd3JpdGluZyIpOworCQkJZGV2X2VycigmaTJjX2FkYXAtPmRldiwKKwkJCQkiZGllZCBhdCBleHRlbmRlZCBhZGRyZXNzIGNvZGUsCXdoaWxlIHdyaXRpbmdcbiIpOwogCQkJcmV0dXJuIC1FUkVNT1RFSU87CiAJCX0KIAkJYWRkWzBdID0gYWRkcjsKQEAgLTEyOCw3ICsxMjksOCBAQAogCQkJYWRkciB8PSAweDAxOwogCQkJcmV0ID0gdHJ5X3JlYWRfYWRkcmVzcyhpMmNfYWRhcCwgYWRkciwgcmV0cmllcyk7CiAJCQlpZiAocmV0ICE9IDEpIHsKLQkJCQllcnIoImRpZWQgYXQgZXh0ZW5kZWQgYWRkcmVzcyBjb2RlLCB3aGlsZSByZWFkaW5nIik7CisJCQkJZGV2X2VycigmaTJjX2FkYXAtPmRldiwKKwkJCQkJImRpZWQgYXQgZXh0ZW5kZWQgYWRkcmVzcyBjb2RlLCB3aGlsZSByZWFkaW5nXG4iKTsKIAkJCQlyZXR1cm4gLUVSRU1PVEVJTzsKIAkJCX0KIAkJfQpAQCAtMjAwLDcyICsyMDIsNzggQEAKIH07CiAKIAotLyoKLSAqIHJlZ2lzdGVyaW5nIGZ1bmN0aW9ucyB0byBsb2FkIGFsZ29yaXRobXMgYXQgcnVudGltZQotICovCi1zdGF0aWMgaW50IHVzYnZpc2lvbl9pMmNfdXNiX2FkZF9idXMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQotewotCVBERUJVRyhEQkdfSTJDLCAiSTJDICAgZGVidWdnaW5nIGlzIGVuYWJsZWQgW2kyY10iKTsKLQlQREVCVUcoREJHX0kyQywgIkFMR08gICBkZWJ1Z2dpbmcgaXMgZW5hYmxlZCBbaTJjXSIpOwotCi0JLyogcmVnaXN0ZXIgbmV3IGFkYXB0ZXIgdG8gaTJjIG1vZHVsZS4uLiAqLwotCi0JYWRhcC0+YWxnbyA9ICZ1c2J2aXNpb25fYWxnbzsKLQotCWFkYXAtPnRpbWVvdXQgPSAxMDA7CS8qIGRlZmF1bHQgdmFsdWVzLCBzaG91bGQgICAgICAgKi8KLQlhZGFwLT5yZXRyaWVzID0gMzsJLyogYmUgcmVwbGFjZWQgYnkgZGVmaW5lcyAgICAgICAqLwotCi0JaTJjX2FkZF9hZGFwdGVyKGFkYXApOwotCi0JUERFQlVHKERCR19JMkMsImkyYyBidXMgZm9yICVzIHJlZ2lzdGVyZWQiLCBhZGFwLT5uYW1lKTsKLQotCXJldHVybiAwOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogdXNidmlzaW9uIHNwZWNpZmljIEkyQyBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiBzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwX3RlbXBsYXRlOwotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGkyY19jbGllbnRfdGVtcGxhdGU7CiAKIGludCB1c2J2aXNpb25faTJjX3JlZ2lzdGVyKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCiB7CisJc3RhdGljIHVuc2lnbmVkIHNob3J0IHNhYTcxMXhfYWRkcnNbXSA9IHsKKwkJMHg0YSA+PiAxLCAweDQ4ID4+IDEsCS8qIFNBQTcxMTEsIFNBQTcxMTFBIGFuZCBTQUE3MTEzICovCisJCTB4NDIgPj4gMSwgMHg0MCA+PiAxLAkvKiBTQUE3MTE0LCBTQUE3MTE1IGFuZCBTQUE3MTE4ICovCisJCUkyQ19DTElFTlRfRU5EIH07CisKIAltZW1jcHkoJnVzYnZpc2lvbi0+aTJjX2FkYXAsICZpMmNfYWRhcF90ZW1wbGF0ZSwKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCBpMmNfYWRhcHRlcikpOwotCW1lbWNweSgmdXNidmlzaW9uLT5pMmNfY2xpZW50LCAmaTJjX2NsaWVudF90ZW1wbGF0ZSwKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSk7CiAKIAlzcHJpbnRmKHVzYnZpc2lvbi0+aTJjX2FkYXAubmFtZSArIHN0cmxlbih1c2J2aXNpb24tPmkyY19hZGFwLm5hbWUpLAogCQkiICMlZCIsIHVzYnZpc2lvbi0+dmRldi0+bnVtKTsKIAlQREVCVUcoREJHX0kyQywiQWRhcHRlcm5hbWU6ICVzIiwgdXNidmlzaW9uLT5pMmNfYWRhcC5uYW1lKTsKIAl1c2J2aXNpb24tPmkyY19hZGFwLmRldi5wYXJlbnQgPSAmdXNidmlzaW9uLT5kZXYtPmRldjsKIAotCWkyY19zZXRfYWRhcGRhdGEoJnVzYnZpc2lvbi0+aTJjX2FkYXAsIHVzYnZpc2lvbik7Ci0JaTJjX3NldF9jbGllbnRkYXRhKCZ1c2J2aXNpb24tPmkyY19jbGllbnQsIHVzYnZpc2lvbik7Ci0KLQl1c2J2aXNpb24tPmkyY19jbGllbnQuYWRhcHRlciA9ICZ1c2J2aXNpb24tPmkyY19hZGFwOworCWkyY19zZXRfYWRhcGRhdGEoJnVzYnZpc2lvbi0+aTJjX2FkYXAsICZ1c2J2aXNpb24tPnY0bDJfZGV2KTsKIAogCWlmICh1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX1NFUl9NT0RFLCBVU0JWSVNJT05fSUlDX0xSTkFDSykgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidXNidmlzaW9uX3JlZ2lzdGVyOiBjYW4ndCB3cml0ZSByZWdcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotI2lmZGVmIENPTkZJR19NT0RVTEVTCisJUERFQlVHKERCR19JMkMsICJJMkMgICBkZWJ1Z2dpbmcgaXMgZW5hYmxlZCBbaTJjXSIpOworCVBERUJVRyhEQkdfSTJDLCAiQUxHTyAgIGRlYnVnZ2luZyBpcyBlbmFibGVkIFtpMmNdIik7CisKKwkvKiByZWdpc3RlciBuZXcgYWRhcHRlciB0byBpMmMgbW9kdWxlLi4uICovCisKKwl1c2J2aXNpb24tPmkyY19hZGFwLmFsZ28gPSAmdXNidmlzaW9uX2FsZ287CisKKwl1c2J2aXNpb24tPmkyY19hZGFwLnRpbWVvdXQgPSAxMDA7CS8qIGRlZmF1bHQgdmFsdWVzLCBzaG91bGQgICAgICAgKi8KKwl1c2J2aXNpb24tPmkyY19hZGFwLnJldHJpZXMgPSAzOwkvKiBiZSByZXBsYWNlZCBieSBkZWZpbmVzICAgICAgICovCisKKwlpMmNfYWRkX2FkYXB0ZXIoJnVzYnZpc2lvbi0+aTJjX2FkYXApOworCisJUERFQlVHKERCR19JMkMsICJpMmMgYnVzIGZvciAlcyByZWdpc3RlcmVkIiwgdXNidmlzaW9uLT5pMmNfYWRhcC5uYW1lKTsKKwogCS8qIFJlcXVlc3QgdGhlIGxvYWQgb2YgdGhlIGkyYyBtb2R1bGVzIHdlIG5lZWQgKi8KIAlzd2l0Y2ggKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5Db2RlYykgewogCWNhc2UgQ09ERUNfU0FBNzExMzoKLQkJcmVxdWVzdF9tb2R1bGUoInNhYTcxMTUiKTsKLQkJYnJlYWs7CiAJY2FzZSBDT0RFQ19TQUE3MTExOgotCQlyZXF1ZXN0X21vZHVsZSgic2FhNzExNSIpOworCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmdXNidmlzaW9uLT5pMmNfYWRhcCwgInNhYTcxMTUiLAorCQkJCSJzYWE3MTE1X2F1dG8iLCBzYWE3MTF4X2FkZHJzKTsKIAkJYnJlYWs7CiAJfQogCWlmICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uVHVuZXIgPT0gMSkgewotCQlyZXF1ZXN0X21vZHVsZSgidHVuZXIiKTsKLQl9Ci0jZW5kaWYKKwkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwkJZW51bSB2NGwyX2kyY190dW5lcl90eXBlIHR5cGU7CisJCXN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXA7CiAKLQlyZXR1cm4gdXNidmlzaW9uX2kyY191c2JfYWRkX2J1cygmdXNidmlzaW9uLT5pMmNfYWRhcCk7CisJCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJnVzYnZpc2lvbi0+aTJjX2FkYXAsICJ0dW5lciIsCisJCQkJInR1bmVyIiwgdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfREVNT0QpKTsKKwkJLyogZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UgZm91bmQgYSBkZW1vZCBvciBub3QsIHNlbGVjdAorCQkgICB0aGUgdHVuZXIgdHlwZS4gKi8KKwkJdHlwZSA9IHNkID8gQUREUlNfVFZfV0lUSF9ERU1PRCA6IEFERFJTX1RWOworCisJCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJnVzYnZpc2lvbi0+aTJjX2FkYXAsICJ0dW5lciIsCisJCQkJInR1bmVyIiwgdjRsMl9pMmNfdHVuZXJfYWRkcnModHlwZSkpOworCisJCWlmICh1c2J2aXNpb24tPnR1bmVyX3R5cGUgIT0gLTEpIHsKKwkJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UViB8IFRfUkFESU87CisJCQl0dW5fc2V0dXAudHlwZSA9IHVzYnZpc2lvbi0+dHVuZXJfdHlwZTsKKwkJCXR1bl9zZXR1cC5hZGRyID0gdjRsMl9pMmNfc3ViZGV2X2FkZHIoc2QpOworCQkJY2FsbF9hbGwodXNidmlzaW9uLCB0dW5lciwgc190eXBlX2FkZHIsICZ0dW5fc2V0dXApOworCQl9CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2J2aXNpb25faTJjX3VucmVnaXN0ZXIoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKQEAgLTI3OCw2NyArMjg2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBjYWxsX2kyY19jbGllbnRzKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIHVuc2lnbmVkIGludCBjbWQsCi0JCSAgICAgIHZvaWQgKmFyZykKLXsKLQlpMmNfY2xpZW50c19jb21tYW5kKCZ1c2J2aXNpb24tPmkyY19hZGFwLCBjbWQsIGFyZyk7Ci19Ci0KLXN0YXRpYyBpbnQgYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb247Ci0KLQl1c2J2aXNpb24gPSAoc3RydWN0IHVzYl91c2J2aXNpb24gKilpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7Ci0KLQlzd2l0Y2ggKGNsaWVudC0+YWRkciA8PCAxKSB7Ci0JCWNhc2UgMHg0MiA8PCAxOgotCQljYXNlIDB4NDMgPDwgMToKLQkJY2FzZSAweDRhIDw8IDE6Ci0JCWNhc2UgMHg0YiA8PCAxOgotCQkJUERFQlVHKERCR19JMkMsImF0dGFjaF9pbmZvcm06IHRkYTk4ODcgZGV0ZWN0ZWQuIik7Ci0JCQlicmVhazsKLQkJY2FzZSAweDQyOgotCQkJUERFQlVHKERCR19JMkMsImF0dGFjaF9pbmZvcm06IHNhYTcxMTQgZGV0ZWN0ZWQuIik7Ci0JCQlicmVhazsKLQkJY2FzZSAweDRhOgotCQkJUERFQlVHKERCR19JMkMsImF0dGFjaF9pbmZvcm06IHNhYTcxMTMgZGV0ZWN0ZWQuIik7Ci0JCQlicmVhazsKLQkJY2FzZSAweDQ4OgotCQkJUERFQlVHKERCR19JMkMsImF0dGFjaF9pbmZvcm06IHNhYTcxMTEgZGV0ZWN0ZWQuIik7Ci0JCQlicmVhazsKLQkJY2FzZSAweGEwOgotCQkJUERFQlVHKERCR19JMkMsImF0dGFjaF9pbmZvcm06IGVlcHJvbSBkZXRlY3RlZC4iKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQl7Ci0JCQkJc3RydWN0IHR1bmVyX3NldHVwIHR1bl9zZXR1cDsKLQotCQkJCVBERUJVRyhEQkdfSTJDLCJhdHRhY2ggaW5mb3JtOiBkZXRlY3RlZCBJMkMgYWRkcmVzcyAleCIsIGNsaWVudC0+YWRkciA8PCAxKTsKLQkJCQl1c2J2aXNpb24tPnR1bmVyX2FkZHIgPSBjbGllbnQtPmFkZHI7Ci0KLQkJCQlpZiAoKHVzYnZpc2lvbi0+aGF2ZV90dW5lcikgJiYgKHVzYnZpc2lvbi0+dHVuZXJfdHlwZSAhPSAtMSkpIHsKLQkJCQkJdHVuX3NldHVwLm1vZGVfbWFzayA9IFRfQU5BTE9HX1RWIHwgVF9SQURJTzsKLQkJCQkJdHVuX3NldHVwLnR5cGUgPSB1c2J2aXNpb24tPnR1bmVyX3R5cGU7Ci0JCQkJCXR1bl9zZXR1cC5hZGRyID0gdXNidmlzaW9uLT50dW5lcl9hZGRyOwotCQkJCQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRldGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uOwotCi0JdXNidmlzaW9uID0gKHN0cnVjdCB1c2JfdXNidmlzaW9uICopaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCi0JUERFQlVHKERCR19JMkMsInVzYnZpc2lvblslZF0gZGV0YWNoZXMgJXMiLCB1c2J2aXNpb24tPm5yLCBjbGllbnQtPm5hbWUpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50CiB1c2J2aXNpb25faTJjX3JlYWRfbWF4NChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCB1bnNpZ25lZCBjaGFyIGFkZHIsCiAJCSAgICAgY2hhciAqYnVmLCBzaG9ydCBsZW4pCkBAIC01MTEsMTQgKzQ1OCw2IEBACiBzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwX3RlbXBsYXRlID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5uYW1lICAgICAgICAgICAgICA9ICJ1c2J2aXNpb24iLAotCS5pZCAgICAgICAgICAgICAgICA9IEkyQ19IV19CX0JUODQ4LCAvKiBGSVhNRSAqLwotCS5jbGllbnRfcmVnaXN0ZXIgICA9IGF0dGFjaF9pbmZvcm0sCi0JLmNsaWVudF91bnJlZ2lzdGVyID0gZGV0YWNoX2luZm9ybSwKLQkuY2xhc3MJCSAgID0gSTJDX0NMQVNTX1RWX0FOQUxPRywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBpMmNfY2xpZW50X3RlbXBsYXRlID0gewotCS5uYW1lCQk9ICJ1c2J2aXNpb24gaW50ZXJuYWwiLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKaW5kZXggMjYyMmRlMC4uZmE2MmEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKQEAgLTU5LDcgKzU5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KIAogI2luY2x1ZGUgPG1lZGlhL3NhYTcxMTUuaD4KQEAgLTIxMiw3ICsyMTEsNyBAQAogCWN0cmwuaWQgPSBWNEwyX0NJRF9IVUU7CiAJY3RybC52YWx1ZSA9IDA7CiAJaWYodXNidmlzaW9uLT51c2VyKQotCQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX0dfQ1RSTCwgJmN0cmwpOworCQljYWxsX2FsbCh1c2J2aXNpb24sIGNvcmUsIGdfY3RybCwgJmN0cmwpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjdHJsLnZhbHVlKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihodWUsIFNfSVJVR08sIHNob3dfaHVlLCBOVUxMKTsKQEAgLTIyNyw3ICsyMjYsNyBAQAogCWN0cmwuaWQgPSBWNEwyX0NJRF9DT05UUkFTVDsKIAljdHJsLnZhbHVlID0gMDsKIAlpZih1c2J2aXNpb24tPnVzZXIpCi0JCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBWSURJT0NfR19DVFJMLCAmY3RybCk7CisJCWNhbGxfYWxsKHVzYnZpc2lvbiwgY29yZSwgZ19jdHJsLCAmY3RybCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGN0cmwudmFsdWUpOwogfQogc3RhdGljIERFVklDRV9BVFRSKGNvbnRyYXN0LCBTX0lSVUdPLCBzaG93X2NvbnRyYXN0LCBOVUxMKTsKQEAgLTI0Miw3ICsyNDEsNyBAQAogCWN0cmwuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTOwogCWN0cmwudmFsdWUgPSAwOwogCWlmKHVzYnZpc2lvbi0+dXNlcikKLQkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19HX0NUUkwsICZjdHJsKTsKKwkJY2FsbF9hbGwodXNidmlzaW9uLCBjb3JlLCBnX2N0cmwsICZjdHJsKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgY3RybC52YWx1ZSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoYnJpZ2h0bmVzcywgU19JUlVHTywgc2hvd19icmlnaHRuZXNzLCBOVUxMKTsKQEAgLTI1Nyw3ICsyNTYsNyBAQAogCWN0cmwuaWQgPSBWNEwyX0NJRF9TQVRVUkFUSU9OOwogCWN0cmwudmFsdWUgPSAwOwogCWlmKHVzYnZpc2lvbi0+dXNlcikKLQkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19HX0NUUkwsICZjdHJsKTsKKwkJY2FsbF9hbGwodXNidmlzaW9uLCBjb3JlLCBnX2N0cmwsICZjdHJsKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgY3RybC52YWx1ZSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoc2F0dXJhdGlvbiwgU19JUlVHTywgc2hvd19zYXR1cmF0aW9uLCBOVUxMKTsKQEAgLTMyOSw3ICszMjgsNyBAQAogCQkJcmV0dXJuOwogCX0gd2hpbGUgKDApOwogCi0JZXJyKCIlcyBlcnJvcjogJWRcbiIsIF9fZnVuY19fLCByZXMpOworCWRldl9lcnIoJnZkZXYtPmRldiwgIiVzIGVycm9yOiAlZFxuIiwgX19mdW5jX18sIHJlcyk7CiB9CiAKIHN0YXRpYyB2b2lkIHVzYnZpc2lvbl9yZW1vdmVfc3lzZnMoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKQEAgLTQ4Nyw4ICs0ODYsOSBAQAogCS8qIE5UMTAweCBoYXMgYSA4LWJpdCByZWdpc3RlciBzcGFjZSAqLwogCWVyckNvZGUgPSB1c2J2aXNpb25fcmVhZF9yZWcodXNidmlzaW9uLCByZWctPnJlZyYweGZmKTsKIAlpZiAoZXJyQ29kZSA8IDApIHsKLQkJZXJyKCIlczogVklESU9DX0RCR19HX1JFR0lTVEVSIGZhaWxlZDogZXJyb3IgJWQiLAotCQkgICAgX19mdW5jX18sIGVyckNvZGUpOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPnZkZXYtPmRldiwKKwkJCSIlczogVklESU9DX0RCR19HX1JFR0lTVEVSIGZhaWxlZDogZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIGVyckNvZGUpOwogCQlyZXR1cm4gZXJyQ29kZTsKIAl9CiAJcmVnLT52YWwgPSBlcnJDb2RlOwpAQCAtNTA3LDggKzUwNyw5IEBACiAJLyogTlQxMDB4IGhhcyBhIDgtYml0IHJlZ2lzdGVyIHNwYWNlICovCiAJZXJyQ29kZSA9IHVzYnZpc2lvbl93cml0ZV9yZWcodXNidmlzaW9uLCByZWctPnJlZyYweGZmLCByZWctPnZhbCk7CiAJaWYgKGVyckNvZGUgPCAwKSB7Ci0JCWVycigiJXM6IFZJRElPQ19EQkdfU19SRUdJU1RFUiBmYWlsZWQ6IGVycm9yICVkIiwKLQkJICAgIF9fZnVuY19fLCBlcnJDb2RlKTsKKwkJZGV2X2VycigmdXNidmlzaW9uLT52ZGV2LT5kZXYsCisJCQkiJXM6IFZJRElPQ19EQkdfU19SRUdJU1RFUiBmYWlsZWQ6IGVycm9yICVkXG4iLAorCQkJCV9fZnVuY19fLCBlcnJDb2RlKTsKIAkJcmV0dXJuIGVyckNvZGU7CiAJfQogCXJldHVybiAwOwpAQCAtNTI0LDggKzUyNSw3IEBACiAJc3RybGNweSh2Yy0+Y2FyZCwKIAkJdXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLk1vZGVsU3RyaW5nLAogCQlzaXplb2YodmMtPmNhcmQpKTsKLQlzdHJsY3B5KHZjLT5idXNfaW5mbywgZGV2X25hbWUoJnVzYnZpc2lvbi0+ZGV2LT5kZXYpLAotCQlzaXplb2YodmMtPmJ1c19pbmZvKSk7CisJdXNiX21ha2VfcGF0aCh1c2J2aXNpb24tPmRldiwgdmMtPmJ1c19pbmZvLCBzaXplb2YodmMtPmJ1c19pbmZvKSk7CiAJdmMtPnZlcnNpb24gPSBVU0JWSVNJT05fRFJJVkVSX1ZFUlNJT047CiAJdmMtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAogCQlWNEwyX0NBUF9BVURJTyB8CkBAIC02MjEsOCArNjIxLDcgQEAKIAl1c2J2aXNpb24tPnR2bm9ybUlkPSppZDsKIAogCW11dGV4X2xvY2soJnVzYnZpc2lvbi0+bG9jayk7Ci0JY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19TX1NURCwKLQkJCSAmdXNidmlzaW9uLT50dm5vcm1JZCk7CisJY2FsbF9hbGwodXNidmlzaW9uLCB0dW5lciwgc19zdGQsIHVzYnZpc2lvbi0+dHZub3JtSWQpOwogCW11dGV4X3VubG9jaygmdXNidmlzaW9uLT5sb2NrKTsKIAkvKiBwcm9wYWdhdGUgdGhlIGNoYW5nZSB0byB0aGUgZGVjb2RlciAqLwogCXVzYnZpc2lvbl9tdXhzZWwodXNidmlzaW9uLCB1c2J2aXNpb24tPmN0bF9pbnB1dCk7CkBAIC02NDQsNyArNjQzLDcgQEAKIAkJc3RyY3B5KHZ0LT5uYW1lLCAiVGVsZXZpc2lvbiIpOwogCX0KIAkvKiBMZXQgY2xpZW50cyBmaWxsIGluIHRoZSByZW1haW5kZXIgb2YgdGhpcyBzdHJ1Y3QgKi8KLQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbixWSURJT0NfR19UVU5FUix2dCk7CisJY2FsbF9hbGwodXNidmlzaW9uLCB0dW5lciwgZ190dW5lciwgdnQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NTgsNyArNjU3LDcgQEAKIAlpZiAoIXVzYnZpc2lvbi0+aGF2ZV90dW5lciB8fCB2dC0+aW5kZXgpCiAJCXJldHVybiAtRUlOVkFMOwogCS8qIGxldCBjbGllbnRzIGhhbmRsZSB0aGlzICovCi0JY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sVklESU9DX1NfVFVORVIsdnQpOworCWNhbGxfYWxsKHVzYnZpc2lvbiwgdHVuZXIsIHNfdHVuZXIsIHZ0KTsKIAogCXJldHVybiAwOwogfQpAQCAtNjg5LDcgKzY4OCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJdXNidmlzaW9uLT5mcmVxID0gZnJlcS0+ZnJlcXVlbmN5OwotCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBWSURJT0NfU19GUkVRVUVOQ1ksIGZyZXEpOworCWNhbGxfYWxsKHVzYnZpc2lvbiwgdHVuZXIsIHNfZnJlcXVlbmN5LCBmcmVxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjk4LDcgKzY5Nyw2IEBACiB7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQltZW1zZXQoYSwwLHNpemVvZigqYSkpOwogCWlmKHVzYnZpc2lvbi0+cmFkaW8pIHsKIAkJc3RyY3B5KGEtPm5hbWUsIlJhZGlvIik7CiAJfSBlbHNlIHsKQEAgLTcyMiwxMiArNzIwLDggQEAKIAkJCSAgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmwpCiB7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IGlkPWN0cmwtPmlkOwogCi0JbWVtc2V0KGN0cmwsMCxzaXplb2YoKmN0cmwpKTsKLQljdHJsLT5pZD1pZDsKLQotCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBWSURJT0NfUVVFUllDVFJMLCBjdHJsKTsKKwljYWxsX2FsbCh1c2J2aXNpb24sIGNvcmUsIHF1ZXJ5Y3RybCwgY3RybCk7CiAKIAlpZiAoIWN0cmwtPnR5cGUpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzM5LDcgKzczMyw3IEBACiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX0dfQ1RSTCwgY3RybCk7CisJY2FsbF9hbGwodXNidmlzaW9uLCBjb3JlLCBnX2N0cmwsIGN0cmwpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NDgsNyArNzQyLDcgQEAKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBWSURJT0NfU19DVFJMLCBjdHJsKTsKKwljYWxsX2FsbCh1c2J2aXNpb24sIGNvcmUsIHNfY3RybCwgY3RybCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc2Myw4ICs3NTcsNyBAQAogCiAJLyogQ2hlY2sgaW5wdXQgdmFsaWRpdHk6CiAJICAgdGhlIHVzZXIgbXVzdCBkbyBhIFZJREVPIENBUFRVUkUgYW5kIE1NQVAgbWV0aG9kLiAqLwotCWlmKCh2ci0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHx8Ci0JICAgKHZyLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkpCisJaWYgKHZyLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZih1c2J2aXNpb24tPnN0cmVhbWluZyA9PSBTdHJlYW1fT24pIHsKQEAgLTc4OSw5ICs3ODIsNiBAQAogCiAJLyogRklYTUUgOiBtdXN0IGNvbnRyb2wKIAkgICB0aGF0IGJ1ZmZlcnMgYXJlIG1hcHBlZCAoVklESU9DX1JFUUJVRlMgaGFzIGJlZW4gY2FsbGVkKSAqLwotCWlmKHZiLT50eXBlICE9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCWlmKHZiLT5pbmRleD49dXNidmlzaW9uLT5udW1fZnJhbWVzKSAgewogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC04MjUsOSArODE1LDYgQEAKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAKIAkvKiBGSVhNRSA6IHdvcmtzIG9ubHkgb24gVklERU9fQ0FQVFVSRSBNT0RFLCBNTUFQLiAqLwotCWlmKHZiLT50eXBlICE9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCWlmKHZiLT5pbmRleD49dXNidmlzaW9uLT5udW1fZnJhbWVzKSAgewogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC04NjIsOSArODQ5LDYgQEAKIAlzdHJ1Y3QgdXNidmlzaW9uX2ZyYW1lICpmOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAotCWlmICh2Yi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKGxpc3RfZW1wdHkoJih1c2J2aXNpb24tPm91dHF1ZXVlKSkpIHsKIAkJaWYgKHVzYnZpc2lvbi0+c3RyZWFtaW5nID09IFN0cmVhbV9JZGxlKQogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC04OTksMTAgKzg4Myw5IEBACiBzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCiB7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IGI9VjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCiAJdXNidmlzaW9uLT5zdHJlYW1pbmcgPSBTdHJlYW1fT247Ci0JY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sVklESU9DX1NUUkVBTU9OICwgJmIpOworCWNhbGxfYWxsKHVzYnZpc2lvbiwgdmlkZW8sIHNfc3RyZWFtLCAxKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTExLDcgKzg5NCw2IEBACiAJCQkgICAgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCiB7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IGI9VjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCiAJaWYgKHR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTkxOSw3ICs5MDEsNyBAQAogCWlmKHVzYnZpc2lvbi0+c3RyZWFtaW5nID09IFN0cmVhbV9PbikgewogCQl1c2J2aXNpb25fc3RyZWFtX2ludGVycnVwdCh1c2J2aXNpb24pOwogCQkvKiBTdG9wIGFsbCB2aWRlbyBzdHJlYW1pbmdzICovCi0JCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLFZJRElPQ19TVFJFQU1PRkYgLCAmYik7CisJCWNhbGxfYWxsKHVzYnZpc2lvbiwgdmlkZW8sIHNfc3RyZWFtLCAwKTsKIAl9CiAJdXNidmlzaW9uX2VtcHR5X2ZyYW1lcXVldWVzKHVzYnZpc2lvbik7CiAKQEAgLTkzMiwxMSArOTE0LDggQEAKIAlpZih2ZmQtPmluZGV4Pj1VU0JWSVNJT05fU1VQUE9SVEVEX1BBTEVUVEVTLTEpIHsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXZmZC0+ZmxhZ3MgPSAwOwotCXZmZC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAlzdHJjcHkodmZkLT5kZXNjcmlwdGlvbix1c2J2aXNpb25fdjRsMl9mb3JtYXRbdmZkLT5pbmRleF0uZGVzYyk7CiAJdmZkLT5waXhlbGZvcm1hdCA9IHVzYnZpc2lvbl92NGwyX2Zvcm1hdFt2ZmQtPmluZGV4XS5mb3JtYXQ7Ci0JbWVtc2V0KHZmZC0+cmVzZXJ2ZWQsIDAsIHNpemVvZih2ZmQtPnJlc2VydmVkKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNDIsNyArMTAyMSw3IEBACiAJaWYodXNidmlzaW9uLT5zdHJlYW1pbmcgIT0gU3RyZWFtX09uKSB7CiAJCS8qIG5vIHN0cmVhbSBpcyBydW5uaW5nLCBtYWtlIGl0IHJ1bm5pbmcgISAqLwogCQl1c2J2aXNpb24tPnN0cmVhbWluZyA9IFN0cmVhbV9PbjsKLQkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sVklESU9DX1NUUkVBTU9OICwgTlVMTCk7CisJCWNhbGxfYWxsKHVzYnZpc2lvbiwgdmlkZW8sIHNfc3RyZWFtLCAxKTsKIAl9CiAKIAkvKiBUaGVuLCBlbnF1ZXVlIGFzIG1hbnkgZnJhbWVzIGFzIHBvc3NpYmxlCkBAIC0xMTg5LDcgKzExNjgsOSBAQAogCW11dGV4X2xvY2soJnVzYnZpc2lvbi0+bG9jayk7CiAKIAlpZiAodXNidmlzaW9uLT51c2VyKSB7Ci0JCWVycigiJXM6IFNvbWVvbmUgdHJpZWQgdG8gb3BlbiBhbiBhbHJlYWR5IG9wZW5lZCBVU0JWaXNpb24gUmFkaW8hIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPnJkZXYtPmRldiwKKwkJCSIlczogU29tZW9uZSB0cmllZCB0byBvcGVuIGFuIGFscmVhZHkgb3BlbmVkIFVTQlZpc2lvbiBSYWRpbyFcbiIsCisJCQkJX19mdW5jX18pOwogCQllcnJDb2RlID0gLUVCVVNZOwogCX0KIAllbHNlIHsKQEAgLTEyMTEsNyArMTE5Miw3IEBACiAKIAkJLy8gSWYgc28gZmFyIG5vIGVycm9ycyB0aGVuIHdlIHNoYWxsIHN0YXJ0IHRoZSByYWRpbwogCQl1c2J2aXNpb24tPnJhZGlvID0gMTsKLQkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sQVVEQ19TRVRfUkFESU8sJnVzYnZpc2lvbi0+dHVuZXJfdHlwZSk7CisJCWNhbGxfYWxsKHVzYnZpc2lvbiwgdHVuZXIsIHNfcmFkaW8pOwogCQl1c2J2aXNpb25fc2V0X2F1ZGlvKHVzYnZpc2lvbiwgVVNCVklTSU9OX0FVRElPX1JBRElPKTsKIAkJdXNidmlzaW9uLT51c2VyKys7CiAJfQpAQCAtMTQxMyw3ICsxMzk0LDggQEAKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwogCiAJaWYgKHVzYl9kZXYgPT0gTlVMTCkgewotCQllcnIoIiVzOiB1c2J2aXNpb24tPmRldiBpcyBub3Qgc2V0IiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJIiVzOiB1c2J2aXNpb24tPmRldiBpcyBub3Qgc2V0XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMTQyMyw3ICsxNDA1LDcgQEAKIAl9CiAJKnZkZXYgPSAqdmRldl90ZW1wbGF0ZTsKIC8vCXZkZXYtPm1pbm9yICAgPSAtMTsKLQl2ZGV2LT5wYXJlbnQgID0gJnVzYl9kZXYtPmRldjsKKwl2ZGV2LT52NGwyX2RldiA9ICZ1c2J2aXNpb24tPnY0bDJfZGV2OwogCXNucHJpbnRmKHZkZXYtPm5hbWUsIHNpemVvZih2ZGV2LT5uYW1lKSwgIiVzIiwgbmFtZSk7CiAJdmlkZW9fc2V0X2RydmRhdGEodmRldiwgdXNidmlzaW9uKTsKIAlyZXR1cm4gdmRldjsKQEAgLTE1MjQsNyArMTUwNiw5IEBACiAJcmV0dXJuIDA7CiAKICBlcnJfZXhpdDoKLQllcnIoIlVTQlZpc2lvblslZF06IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgpIGZhaWxlZCIsIHVzYnZpc2lvbi0+bnIpOworCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCSJVU0JWaXNpb25bJWRdOiB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoKSBmYWlsZWRcbiIsCisJCQl1c2J2aXNpb24tPm5yKTsKIAl1c2J2aXNpb25fdW5yZWdpc3Rlcl92aWRlbyh1c2J2aXNpb24pOwogCXJldHVybiAtMTsKIH0KQEAgLTE1NDIsMzMgKzE1MjYsMzAgQEAKIHsKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uOwogCi0JaWYgKCh1c2J2aXNpb24gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiksIEdGUF9LRVJORUwpKSA9PQotCSAgICBOVUxMKSB7Ci0JCWdvdG8gZXJyX2V4aXQ7Ci0JfQorCXVzYnZpc2lvbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfdXNidmlzaW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVzYnZpc2lvbiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKIAogCXVzYnZpc2lvbi0+ZGV2ID0gZGV2OworCWlmICh2NGwyX2RldmljZV9yZWdpc3RlcigmZGV2LT5kZXYsICZ1c2J2aXNpb24tPnY0bDJfZGV2KSkKKwkJZ290byBlcnJfZnJlZTsKIAogCW11dGV4X2luaXQoJnVzYnZpc2lvbi0+bG9jayk7CS8qIGF2YWlsYWJsZSAqLwogCiAJLy8gcHJlcGFyZSBjb250cm9sIHVyYiBmb3IgY29udHJvbCBtZXNzYWdlcyBkdXJpbmcgaW50ZXJydXB0cwogCXVzYnZpc2lvbi0+Y3RybFVyYiA9IHVzYl9hbGxvY191cmIoVVNCVklTSU9OX1VSQl9GUkFNRVMsIEdGUF9LRVJORUwpOwotCWlmICh1c2J2aXNpb24tPmN0cmxVcmIgPT0gTlVMTCkgewotCQlnb3RvIGVycl9leGl0OwotCX0KKwlpZiAodXNidmlzaW9uLT5jdHJsVXJiID09IE5VTEwpCisJCWdvdG8gZXJyX3VucmVnOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVzYnZpc2lvbi0+Y3RybFVyYl93cSk7CiAKIAl1c2J2aXNpb25faW5pdF9wb3dlck9mZlRpbWVyKHVzYnZpc2lvbik7CiAKIAlyZXR1cm4gdXNidmlzaW9uOwogCi1lcnJfZXhpdDoKLQlpZiAodXNidmlzaW9uICYmIHVzYnZpc2lvbi0+Y3RybFVyYikgewotCQl1c2JfZnJlZV91cmIodXNidmlzaW9uLT5jdHJsVXJiKTsKLQl9Ci0JaWYgKHVzYnZpc2lvbikgewotCQlrZnJlZSh1c2J2aXNpb24pOwotCX0KK2Vycl91bnJlZzoKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ1c2J2aXNpb24tPnY0bDJfZGV2KTsKK2Vycl9mcmVlOgorCWtmcmVlKHVzYnZpc2lvbik7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE1OTgsNiArMTU3OSw3IEBACiAJCXVzYl9mcmVlX3VyYih1c2J2aXNpb24tPmN0cmxVcmIpOwogCX0KIAorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnVzYnZpc2lvbi0+djRsMl9kZXYpOwogCWtmcmVlKHVzYnZpc2lvbik7CiAKIAlQREVCVUcoREJHX1BST0JFLCAic3VjY2VzcyIpOwpAQCAtMTY3NSwyMCArMTY1NywyMCBAQAogCX0KIAllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzFdLmRlc2M7CiAJaWYgKCF1c2JfZW5kcG9pbnRfeGZlcl9pc29jKGVuZHBvaW50KSkgewotCQllcnIoIiVzOiBpbnRlcmZhY2UgJWQuIGhhcyBub24tSVNPIGVuZHBvaW50ISIsCisJCWRldl9lcnIoJmludGYtPmRldiwgIiVzOiBpbnRlcmZhY2UgJWQuIGhhcyBub24tSVNPIGVuZHBvaW50IVxuIiwKIAkJICAgIF9fZnVuY19fLCBpZm51bSk7Ci0JCWVycigiJXM6IEVuZHBvaW50IGF0dHJpYnV0ZXMgJWQiLAorCQlkZXZfZXJyKCZpbnRmLT5kZXYsICIlczogRW5kcG9pbnQgYXR0cmlidXRlcyAlZCIsCiAJCSAgICBfX2Z1bmNfXywgZW5kcG9pbnQtPmJtQXR0cmlidXRlcyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAodXNiX2VuZHBvaW50X2Rpcl9vdXQoZW5kcG9pbnQpKSB7Ci0JCWVycigiJXM6IGludGVyZmFjZSAlZC4gaGFzIElTTyBPVVQgZW5kcG9pbnQhIiwKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiJXM6IGludGVyZmFjZSAlZC4gaGFzIElTTyBPVVQgZW5kcG9pbnQhXG4iLAogCQkgICAgX19mdW5jX18sIGlmbnVtKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKCh1c2J2aXNpb24gPSB1c2J2aXNpb25fYWxsb2MoZGV2KSkgPT0gTlVMTCkgewotCQllcnIoIiVzOiBjb3VsZG4ndCBhbGxvY2F0ZSBVU0JWaXNpb24gc3RydWN0IiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICIlczogY291bGRuJ3QgYWxsb2NhdGUgVVNCVmlzaW9uIHN0cnVjdFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE3MTEsNyArMTY5Myw3IEBACiAJdXNidmlzaW9uLT5hbHRfbWF4X3BrdF9zaXplID0ga21hbGxvYygzMioKIAkJCQkJICAgICAgdXNidmlzaW9uLT5udW1fYWx0LEdGUF9LRVJORUwpOwogCWlmICh1c2J2aXNpb24tPmFsdF9tYXhfcGt0X3NpemUgPT0gTlVMTCkgewotCQllcnIoInVzYnZpc2lvbjogb3V0IG9mIG1lbW9yeSFcbiIpOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJ1c2J2aXNpb246IG91dCBvZiBtZW1vcnkhXG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0xNzMzLDggKzE3MTUsNiBAQAogCQl1c2J2aXNpb24tPnR1bmVyX3R5cGUgPSB1c2J2aXNpb25fZGV2aWNlX2RhdGFbbW9kZWxdLlR1bmVyVHlwZTsKIAl9CiAKLQl1c2J2aXNpb24tPnR1bmVyX2FkZHIgPSBBRERSX1VOU0VUOwotCiAJdXNidmlzaW9uLT5EZXZNb2RlbCA9IG1vZGVsOwogCXVzYnZpc2lvbi0+cmVtb3ZlX3BlbmRpbmcgPSAwOwogCXVzYnZpc2lvbi0+aWZhY2UgPSBpZm51bTsKQEAgLTE3NzIsNyArMTc1Miw4IEBACiAJUERFQlVHKERCR19QUk9CRSwgIiIpOwogCiAJaWYgKHVzYnZpc2lvbiA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHVzYl9nZXRfaW50ZmRhdGEoKSBmYWlsZWQiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCQkiJXM6IHVzYl9nZXRfaW50ZmRhdGEoKSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKQEAgLTE3ODIsNiArMTc2Myw4IEBACiAJLy8gQXQgdGhpcyB0aW1lIHdlIGFzayB0byBjYW5jZWwgb3V0c3RhbmRpbmcgVVJCcwogCXVzYnZpc2lvbl9zdG9wX2lzb2ModXNidmlzaW9uKTsKIAorCXY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3QoJnVzYnZpc2lvbi0+djRsMl9kZXYpOworCiAJaWYgKHVzYnZpc2lvbi0+cG93ZXIpIHsKIAkJdXNidmlzaW9uX2kyY191bnJlZ2lzdGVyKHVzYnZpc2lvbik7CiAJCXVzYnZpc2lvbl9wb3dlcl9vZmYodXNidmlzaW9uKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLmgKaW5kZXggMjBkN2VjNi4uZjhkNzQ1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLmgKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICBEd2FpbmUgR2FyZGVuIDxkd2FpbmVnYXJkZW5Acm9nZXJzLmNvbT4KICAqCiAgKgotICogUmVwb3J0IHByb2JsZW1zIHRvIHY0bCBNYWlsaW5nTGlzdCA6IGh0dHA6Ly93d3cucmVkaGF0LmNvbS9tYWlsbWFuL2xpc3RpbmZvL3ZpZGVvNGxpbnV4LWxpc3QKKyAqIFJlcG9ydCBwcm9ibGVtcyB0byB2NGwgTWFpbGluZ0xpc3Q6IGxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwogICoKICAqIFRoaXMgbW9kdWxlIGlzIHBhcnQgb2YgdXNidmlzaW9uIGRyaXZlciBwcm9qZWN0LgogICogVXBkYXRlcyB0byBkcml2ZXIgY29tcGxldGVkIGJ5IER3YWluZSBQLiBHYXJkZW4KQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCkBAIC0zNTcsMTMgKzM1NywxMyBAQAogZXh0ZXJuIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYnZpc2lvbl90YWJsZVtdOwogCiBzdHJ1Y3QgdXNiX3VzYnZpc2lvbiB7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OwogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7ICAgICAgICAgCQkJCS8qIFZpZGVvIERldmljZSAqLwogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnJkZXY7ICAgICAgICAgICAgICAgCQkJLyogUmFkaW8gRGV2aWNlICovCiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmJpOyAJCQkJCS8qIFZCSSBEZXZpY2UgICAqLwogCiAJLyogaTJjIERlY2xhcmF0aW9uIFNlY3Rpb24qLwogCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcDsKLQlzdHJ1Y3QgaTJjX2NsaWVudCBpMmNfY2xpZW50OwogCiAJc3RydWN0IHVyYiAqY3RybFVyYjsKIAl1bnNpZ25lZCBjaGFyIGN0cmxVcmJCdWZmZXJbOF07CkBAIC0zNzQsNyArMzc0LDYgQEAKIAkvKiBjb25maWd1cmF0aW9uIHBhcnQgKi8KIAlpbnQgaGF2ZV90dW5lcjsKIAlpbnQgdHVuZXJfdHlwZTsKLQlpbnQgdHVuZXJfYWRkcjsKIAlpbnQgYnJpZGdlVHlwZTsJCQkJCQkJLy8gTlQxMDAzLCBOVDEwMDQsIE5UMTAwNQogCWludCByYWRpbzsKIAlpbnQgdmlkZW9faW5wdXRzOwkJCQkJCS8vICMgb2YgaW5wdXRzCkBAIC00NjQsNiArNDYzLDggQEAKIAlpbnQgQ29tcHJCbG9ja1R5cGVzWzRdOwogfTsKIAorI2RlZmluZSBjYWxsX2FsbCh1c2J2aXNpb24sIG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmdXNidmlzaW9uLT52NGwyX2RldiwgMCwgbywgZiwgIyNhcmdzKQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGRlZmluZWQgaW4gdXNidmlzaW9uLWkyYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDc1LDcgKzQ3Niw2IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogaW50IHVzYnZpc2lvbl9pMmNfcmVnaXN0ZXIoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CiBpbnQgdXNidmlzaW9uX2kyY191bnJlZ2lzdGVyKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOwotdm9pZCBjYWxsX2kyY19jbGllbnRzKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIHVuc2lnbmVkIGludCBjbWQsdm9pZCAqYXJnKTsKIAogLyogZGVmaW5lZCBpbiB1c2J2aXNpb24tY29yZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogaW50IHVzYnZpc2lvbl9yZWFkX3JlZyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCB1bnNpZ25lZCBjaGFyIHJlZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYwppbmRleCBkMjU3NmY2Li4wZDdlMzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKQEAgLTc4Niw3ICs3ODYsNyBAQAogCW1lbXNldCh2NGwyX2N0cmwsIDAsIHNpemVvZiAqdjRsMl9jdHJsKTsKIAl2NGwyX2N0cmwtPmlkID0gbWFwcGluZy0+aWQ7CiAJdjRsMl9jdHJsLT50eXBlID0gbWFwcGluZy0+djRsMl90eXBlOwotCXN0cm5jcHkodjRsMl9jdHJsLT5uYW1lLCBtYXBwaW5nLT5uYW1lLCBzaXplb2YgdjRsMl9jdHJsLT5uYW1lKTsKKwlzdHJsY3B5KHY0bDJfY3RybC0+bmFtZSwgbWFwcGluZy0+bmFtZSwgc2l6ZW9mIHY0bDJfY3RybC0+bmFtZSk7CiAJdjRsMl9jdHJsLT5mbGFncyA9IDA7CiAKIAlpZiAoIShjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX1NFVF9DVVIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jCmluZGV4IGIxMjg3MzIuLjM5OTQxMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMKQEAgLTMxNCw3ICszMTQsNyBAQAogCQlmbXRkZXNjID0gdXZjX2Zvcm1hdF9ieV9ndWlkKCZidWZmZXJbNV0pOwogCiAJCWlmIChmbXRkZXNjICE9IE5VTEwpIHsKLQkJCXN0cm5jcHkoZm9ybWF0LT5uYW1lLCBmbXRkZXNjLT5uYW1lLAorCQkJc3RybGNweShmb3JtYXQtPm5hbWUsIGZtdGRlc2MtPm5hbWUsCiAJCQkJc2l6ZW9mIGZvcm1hdC0+bmFtZSk7CiAJCQlmb3JtYXQtPmZjYyA9IGZtdGRlc2MtPmZjYzsKIAkJfSBlbHNlIHsKQEAgLTM0NSw3ICszNDUsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlzdHJuY3B5KGZvcm1hdC0+bmFtZSwgIk1KUEVHIiwgc2l6ZW9mIGZvcm1hdC0+bmFtZSk7CisJCXN0cmxjcHkoZm9ybWF0LT5uYW1lLCAiTUpQRUciLCBzaXplb2YgZm9ybWF0LT5uYW1lKTsKIAkJZm9ybWF0LT5mY2MgPSBWNEwyX1BJWF9GTVRfTUpQRUc7CiAJCWZvcm1hdC0+ZmxhZ3MgPSBVVkNfRk1UX0ZMQUdfQ09NUFJFU1NFRDsKIAkJZm9ybWF0LT5icHAgPSAwOwpAQCAtMzYzLDEzICszNjMsMTMgQEAKIAogCQlzd2l0Y2ggKGJ1ZmZlcls4XSAmIDB4N2YpIHsKIAkJY2FzZSAwOgotCQkJc3RybmNweShmb3JtYXQtPm5hbWUsICJTRC1EViIsIHNpemVvZiBmb3JtYXQtPm5hbWUpOworCQkJc3RybGNweShmb3JtYXQtPm5hbWUsICJTRC1EViIsIHNpemVvZiBmb3JtYXQtPm5hbWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgMToKLQkJCXN0cm5jcHkoZm9ybWF0LT5uYW1lLCAiU0RMLURWIiwgc2l6ZW9mIGZvcm1hdC0+bmFtZSk7CisJCQlzdHJsY3B5KGZvcm1hdC0+bmFtZSwgIlNETC1EViIsIHNpemVvZiBmb3JtYXQtPm5hbWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgMjoKLQkJCXN0cm5jcHkoZm9ybWF0LT5uYW1lLCAiSEQtRFYiLCBzaXplb2YgZm9ybWF0LT5uYW1lKTsKKwkJCXN0cmxjcHkoZm9ybWF0LT5uYW1lLCAiSEQtRFYiLCBzaXplb2YgZm9ybWF0LT5uYW1lKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9ERVNDUiwgImRldmljZSAlZCB2aWRlb3N0cmVhbWluZyIKQEAgLTM3OSw3ICszNzksNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlzdHJuY2F0KGZvcm1hdC0+bmFtZSwgYnVmZmVyWzhdICYgKDEgPDwgNykgPyAiIDYwSHoiIDogIiA1MEh6IiwKKwkJc3RybGNhdChmb3JtYXQtPm5hbWUsIGJ1ZmZlcls4XSAmICgxIDw8IDcpID8gIiA2MEh6IiA6ICIgNTBIeiIsCiAJCQlzaXplb2YgZm9ybWF0LT5uYW1lKTsKIAogCQlmb3JtYXQtPmZjYyA9IFY0TDJfUElYX0ZNVF9EVjsKQEAgLTE1MjYsNyArMTUyNiw3IEBACiAJdmRldi0+bWlub3IgPSAtMTsKIAl2ZGV2LT5mb3BzID0gJnV2Y19mb3BzOwogCXZkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKLQlzdHJuY3B5KHZkZXYtPm5hbWUsIGRldi0+bmFtZSwgc2l6ZW9mIHZkZXYtPm5hbWUpOworCXN0cmxjcHkodmRldi0+bmFtZSwgZGV2LT5uYW1lLCBzaXplb2YgdmRldi0+bmFtZSk7CiAKIAkvKiBTZXQgdGhlIGRyaXZlciBkYXRhIGJlZm9yZSBjYWxsaW5nIHZpZGVvX3JlZ2lzdGVyX2RldmljZSwgb3RoZXJ3aXNlCiAJICogdXZjX3Y0bDJfb3BlbiBtaWdodCByYWNlIHVzLgpAQCAtMTYyMSw3ICsxNjIxLDcgQEAKIAlkZXYtPnF1aXJrcyA9IGlkLT5kcml2ZXJfaW5mbyB8IHV2Y19xdWlya3NfcGFyYW07CiAKIAlpZiAodWRldi0+cHJvZHVjdCAhPSBOVUxMKQotCQlzdHJuY3B5KGRldi0+bmFtZSwgdWRldi0+cHJvZHVjdCwgc2l6ZW9mIGRldi0+bmFtZSk7CisJCXN0cmxjcHkoZGV2LT5uYW1lLCB1ZGV2LT5wcm9kdWN0LCBzaXplb2YgZGV2LT5uYW1lKTsKIAllbHNlCiAJCXNucHJpbnRmKGRldi0+bmFtZSwgc2l6ZW9mIGRldi0+bmFtZSwKIAkJCSJVVkMgQ2FtZXJhICglMDR4OiUwNHgpIiwKQEAgLTE4MzMsNiArMTgzMywxNSBAQAogCSAgLmJJbnRlcmZhY2VDbGFzcwk9IFVTQl9DTEFTU19WRU5ET1JfU1BFQywKIAkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAogCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAgfSwKKwkvKiBBbGNvciBNaWNybyBBVTM4MjAgKEZ1dHVyZSBCb3kgUEMgVVNCIFdlYmNhbSkgKi8KKwl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQorCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKKwkgIC5pZFZlbmRvcgkJPSAweDA1OGYsCisJICAuaWRQcm9kdWN0CQk9IDB4MzgyMCwKKwkgIC5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfVklERU8sCisJICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKKwkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAorCSAgLmRyaXZlcl9pbmZvCQk9IFVWQ19RVUlSS19QUk9CRV9NSU5NQVggfSwKIAkvKiBBcHBsZSBCdWlsdC1JbiBpU2lnaHQgKi8KIAl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQogCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKQEAgLTE4NTIsNiArMTg2MSwxNSBAQAogCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCiAJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKIAkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfU1RSRUFNX05PX0ZJRCB9LAorCS8qIFZpTWljcm8gKi8KKwl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX1ZFTkRPUgorCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKKwkgIC5pZFZlbmRvcgkJPSAweDBhYzgsCisJICAuaWRQcm9kdWN0CQk9IDB4MDAwMCwKKwkgIC5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfVklERU8sCisJICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKKwkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAorCSAgLmRyaXZlcl9pbmZvCQk9IFVWQ19RVUlSS19GSVhfQkFORFdJRFRIIH0sCiAJLyogTVQ2MjI3ICovCiAJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKIAkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCkBAIC0xODc5LDcgKzE4OTcsNyBAQAogCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCiAJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKIAkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfU1RSRUFNX05PX0ZJRCB9LAotCS8qIEFzdXMgRjlTRyAqLworCS8qIFN5bnRlayAoQXN1cyBGOVNHKSAqLwogCXsgLm1hdGNoX2ZsYWdzCQk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCiAJCQkJfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLAogCSAgLmlkVmVuZG9yCQk9IDB4MTc0ZiwKQEAgLTE4OTcsNiArMTkxNSwxNSBAQAogCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCiAJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKIAkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfU1RSRUFNX05PX0ZJRCB9LAorCS8qIFN5bnRlayAoSkFPdGVjaCBTbWFydCBUZXJtaW5hbCkgKi8KKwl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQorCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKKwkgIC5pZFZlbmRvcgkJPSAweDE3NGYsCisJICAuaWRQcm9kdWN0CQk9IDB4OGEzNCwKKwkgIC5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfVklERU8sCisJICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKKwkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAorCSAgLmRyaXZlcl9pbmZvCQk9IFVWQ19RVUlSS19TVFJFQU1fTk9fRklEIH0sCiAJLyogTGVub3ZvIFRoaW5rcGFkIFNMNTAwICovCiAJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKIAkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfc3RhdHVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfc3RhdHVzLmMKaW5kZXggYzcwNWYyNC4uMjFkODcxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3N0YXR1cy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19zdGF0dXMuYwpAQCAtMjQsMjYgKzI0LDE5IEBACiAjaWZkZWYgQ09ORklHX1VTQl9WSURFT19DTEFTU19JTlBVVF9FVkRFVgogc3RhdGljIGludCB1dmNfaW5wdXRfaW5pdChzdHJ1Y3QgdXZjX2RldmljZSAqZGV2KQogewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZGV2LT51ZGV2OwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwotCWNoYXIgKnBoeXMgPSBOVUxMOwogCWludCByZXQ7CiAKIAlpbnB1dCA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmIChpbnB1dCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXBoeXMgPSBrbWFsbG9jKDYgKyBzdHJsZW4odWRldi0+YnVzLT5idXNfbmFtZSkgKyBzdHJsZW4odWRldi0+ZGV2cGF0aCksCi0JCQlHRlBfS0VSTkVMKTsKLQlpZiAocGh5cyA9PSBOVUxMKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCXNwcmludGYocGh5cywgInVzYi0lcy0lcyIsIHVkZXYtPmJ1cy0+YnVzX25hbWUsIHVkZXYtPmRldnBhdGgpOworCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBkZXYtPmlucHV0X3BoeXMsIHNpemVvZihkZXYtPmlucHV0X3BoeXMpKTsKKwlzdHJsY2F0KGRldi0+aW5wdXRfcGh5cywgIi9idXR0b24iLCBzaXplb2YoZGV2LT5pbnB1dF9waHlzKSk7CiAKIAlpbnB1dC0+bmFtZSA9IGRldi0+bmFtZTsKLQlpbnB1dC0+cGh5cyA9IHBoeXM7Ci0JdXNiX3RvX2lucHV0X2lkKHVkZXYsICZpbnB1dC0+aWQpOworCWlucHV0LT5waHlzID0gZGV2LT5pbnB1dF9waHlzOworCXVzYl90b19pbnB1dF9pZChkZXYtPnVkZXYsICZpbnB1dC0+aWQpOwogCWlucHV0LT5kZXYucGFyZW50ID0gJmRldi0+aW50Zi0+ZGV2OwogCiAJX19zZXRfYml0KEVWX0tFWSwgaW5wdXQtPmV2Yml0KTsKQEAgLTU3LDcgKzUwLDYgQEAKIAogZXJyb3I6CiAJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXQpOwotCWtmcmVlKHBoeXMpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCmluZGV4IGQ2ODE1MTkuLjJhODBjYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYwpAQCAtNTUsNyArNTUsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1lbnVfaW5mbyA9ICZtYXBwaW5nLT5tZW51X2luZm9bcXVlcnlfbWVudS0+aW5kZXhdOwotCXN0cm5jcHkocXVlcnlfbWVudS0+bmFtZSwgbWVudV9pbmZvLT5uYW1lLCAzMik7CisJc3RybGNweShxdWVyeV9tZW51LT5uYW1lLCBtZW51X2luZm8tPm5hbWUsIHNpemVvZiBxdWVyeV9tZW51LT5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDg2LDEwICs0ODYsMTAgQEAKIAkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwogCiAJCW1lbXNldChjYXAsIDAsIHNpemVvZiAqY2FwKTsKLQkJc3RybmNweShjYXAtPmRyaXZlciwgInV2Y3ZpZGVvIiwgc2l6ZW9mIGNhcC0+ZHJpdmVyKTsKLQkJc3RybmNweShjYXAtPmNhcmQsIHZkZXYtPm5hbWUsIDMyKTsKLQkJc3RybmNweShjYXAtPmJ1c19pbmZvLCB2aWRlby0+ZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLAotCQkJc2l6ZW9mIGNhcC0+YnVzX2luZm8pOworCQlzdHJsY3B5KGNhcC0+ZHJpdmVyLCAidXZjdmlkZW8iLCBzaXplb2YgY2FwLT5kcml2ZXIpOworCQlzdHJsY3B5KGNhcC0+Y2FyZCwgdmRldi0+bmFtZSwgc2l6ZW9mIGNhcC0+Y2FyZCk7CisJCXVzYl9tYWtlX3BhdGgodmlkZW8tPmRldi0+dWRldiwKKwkJCSAgICAgIGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CiAJCWNhcC0+dmVyc2lvbiA9IERSSVZFUl9WRVJTSU9OX05VTUJFUjsKIAkJaWYgKHZpZGVvLT5zdHJlYW1pbmctPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQkJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFCkBAIC02MjAsNyArNjIwLDcgQEAKIAogCQltZW1zZXQoaW5wdXQsIDAsIHNpemVvZiAqaW5wdXQpOwogCQlpbnB1dC0+aW5kZXggPSBpbmRleDsKLQkJc3RybmNweShpbnB1dC0+bmFtZSwgaXRlcm0tPm5hbWUsIHNpemVvZiBpbnB1dC0+bmFtZSk7CisJCXN0cmxjcHkoaW5wdXQtPm5hbWUsIGl0ZXJtLT5uYW1lLCBzaXplb2YgaW5wdXQtPm5hbWUpOwogCQlpZiAoVVZDX0VOVElUWV9UWVBFKGl0ZXJtKSA9PSBJVFRfQ0FNRVJBKQogCQkJaW5wdXQtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwogCQlicmVhazsKQEAgLTY3MywxNiArNjczLDIyIEBACiAJewogCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQgPSBhcmc7CiAJCXN0cnVjdCB1dmNfZm9ybWF0ICpmb3JtYXQ7CisJCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gZm10LT50eXBlOworCQlfX3UzMiBpbmRleCA9IGZtdC0+aW5kZXg7CiAKIAkJaWYgKGZtdC0+dHlwZSAhPSB2aWRlby0+c3RyZWFtaW5nLT50eXBlIHx8CiAJCSAgICBmbXQtPmluZGV4ID49IHZpZGVvLT5zdHJlYW1pbmctPm5mb3JtYXRzKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKKwkJbWVtc2V0KGZtdCwgMCwgc2l6ZW9mKCpmbXQpKTsKKwkJZm10LT5pbmRleCA9IGluZGV4OworCQlmbXQtPnR5cGUgPSB0eXBlOworCiAJCWZvcm1hdCA9ICZ2aWRlby0+c3RyZWFtaW5nLT5mb3JtYXRbZm10LT5pbmRleF07CiAJCWZtdC0+ZmxhZ3MgPSAwOwogCQlpZiAoZm9ybWF0LT5mbGFncyAmIFVWQ19GTVRfRkxBR19DT01QUkVTU0VEKQogCQkJZm10LT5mbGFncyB8PSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7Ci0JCXN0cm5jcHkoZm10LT5kZXNjcmlwdGlvbiwgZm9ybWF0LT5uYW1lLAorCQlzdHJsY3B5KGZtdC0+ZGVzY3JpcHRpb24sIGZvcm1hdC0+bmFtZSwKIAkJCXNpemVvZiBmbXQtPmRlc2NyaXB0aW9uKTsKIAkJZm10LT5kZXNjcmlwdGlvbltzaXplb2YgZm10LT5kZXNjcmlwdGlvbiAtIDFdID0gMDsKIAkJZm10LT5waXhlbGZvcm1hdCA9IGZvcm1hdC0+ZmNjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYwppbmRleCA5YmM0NzA1Li5hOTVlMTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYwpAQCAtNjEsNyArNjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB1dmNfZml4dXBfYnVmZmVyX3NpemUoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorc3RhdGljIHZvaWQgdXZjX2ZpeHVwX3ZpZGVvX2N0cmwoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAogCXN0cnVjdCB1dmNfc3RyZWFtaW5nX2NvbnRyb2wgKmN0cmwpCiB7CiAJc3RydWN0IHV2Y19mb3JtYXQgKmZvcm1hdDsKQEAgLTg0LDYgKzg0LDMxIEBACiAJICAgICAgdmlkZW8tPmRldi0+dXZjX3ZlcnNpb24gPCAweDAxMTApKQogCQljdHJsLT5kd01heFZpZGVvRnJhbWVTaXplID0KIAkJCWZyYW1lLT5kd01heFZpZGVvRnJhbWVCdWZmZXJTaXplOworCisJaWYgKHZpZGVvLT5kZXYtPnF1aXJrcyAmIFVWQ19RVUlSS19GSVhfQkFORFdJRFRIICYmCisJICAgIHZpZGVvLT5zdHJlYW1pbmctPmludGYtPm51bV9hbHRzZXR0aW5nID4gMSkgeworCQl1MzIgaW50ZXJ2YWw7CisJCXUzMiBiYW5kd2lkdGg7CisKKwkJaW50ZXJ2YWwgPSAoY3RybC0+ZHdGcmFtZUludGVydmFsID4gMTAwMDAwKQorCQkJID8gY3RybC0+ZHdGcmFtZUludGVydmFsCisJCQkgOiBmcmFtZS0+ZHdGcmFtZUludGVydmFsWzBdOworCisJCS8qIENvbXB1dGUgYSBiYW5kd2lkdGggZXN0aW1hdGlvbiBieSBtdWx0aXBseWluZyB0aGUgZnJhbWUKKwkJICogc2l6ZSBieSB0aGUgbnVtYmVyIG9mIHZpZGVvIGZyYW1lcyBwZXIgc2Vjb25kLCBkaXZpZGUgdGhlCisJCSAqIHJlc3VsdCBieSB0aGUgbnVtYmVyIG9mIFVTQiBmcmFtZXMgKG9yIG1pY3JvLWZyYW1lcyBmb3IKKwkJICogaGlnaC1zcGVlZCBkZXZpY2VzKSBwZXIgc2Vjb25kIGFuZCBhZGQgdGhlIFVWQyBoZWFkZXIgc2l6ZQorCQkgKiAoYXNzdW1lZCB0byBiZSAxMiBieXRlcyBsb25nKS4KKwkJICovCisJCWJhbmR3aWR0aCA9IGZyYW1lLT53V2lkdGggKiBmcmFtZS0+d0hlaWdodCAvIDggKiBmb3JtYXQtPmJwcDsKKwkJYmFuZHdpZHRoICo9IDEwMDAwMDAwIC8gaW50ZXJ2YWwgKyAxOworCQliYW5kd2lkdGggLz0gMTAwMDsKKwkJaWYgKHZpZGVvLT5kZXYtPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQkJYmFuZHdpZHRoIC89IDg7CisJCWJhbmR3aWR0aCArPSAxMjsKKworCQljdHJsLT5kd01heFBheWxvYWRUcmFuc2ZlclNpemUgPSBiYW5kd2lkdGg7CisJfQogfQogCiBzdGF0aWMgaW50IHV2Y19nZXRfdmlkZW9fY3RybChzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sCkBAIC0xNTgsMTAgKzE4MywxMSBAQAogCQljdHJsLT5iTWF4VmVyc2lvbiA9IDA7CiAJfQogCi0JLyogU29tZSBicm9rZW4gZGV2aWNlcyByZXR1cm4gYSBudWxsIG9yIHdyb25nIGR3TWF4VmlkZW9GcmFtZVNpemUuCi0JICogVHJ5IHRvIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgZm9ybWF0IGFuZCBmcmFtZSBkZXNjcmlwdG9ycy4KKwkvKiBTb21lIGJyb2tlbiBkZXZpY2VzIHJldHVybiBudWxsIG9yIHdyb25nIGR3TWF4VmlkZW9GcmFtZVNpemUgYW5kCisJICogZHdNYXhQYXlsb2FkVHJhbnNmZXJTaXplIGZpZWxkcy4gVHJ5IHRvIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUKKwkgKiBmb3JtYXQgYW5kIGZyYW1lIGRlc2NyaXB0b3JzLgogCSAqLwotCXV2Y19maXh1cF9idWZmZXJfc2l6ZSh2aWRlbywgY3RybCk7CisJdXZjX2ZpeHVwX3ZpZGVvX2N0cmwodmlkZW8sIGN0cmwpOwogCXJldCA9IDA7CiAKIG91dDoKQEAgLTU0MCw2ICs1NjYsOSBAQAogCXU4ICptZW07CiAJaW50IGxlbiwgcmV0OwogCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSAwKQorCQlyZXR1cm47CisKIAltZW0gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAlsZW4gPSB1cmItPmFjdHVhbF9sZW5ndGg7CiAJdmlkZW8tPmJ1bGsucGF5bG9hZF9zaXplICs9IGxlbjsKQEAgLTY5OSwyNyArNzI4LDQ3IEBACiAgKiBhbHJlYWR5IGFsbG9jYXRlZCB3aGVuIHJlc3VtaW5nIGZyb20gc3VzcGVuZCwgaW4gd2hpY2ggY2FzZSBpdCB3aWxsCiAgKiByZXR1cm4gd2l0aG91dCB0b3VjaGluZyB0aGUgYnVmZmVycy4KICAqCi0gKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIC1FTk9NRU0gd2hlbiBvdXQgb2YgbWVtb3J5LgorICogTGltaXQgdGhlIGJ1ZmZlciBzaXplIHRvIFVWQ19NQVhfUEFDS0VUUyBidWxrL2lzb2Nocm9ub3VzIHBhY2tldHMuIElmIHRoZQorICogc3lzdGVtIGlzIHRvbyBsb3cgb24gbWVtb3J5IHRyeSBzdWNjZXNzaXZlbHkgc21hbGxlciBudW1iZXJzIG9mIHBhY2tldHMKKyAqIHVudGlsIGFsbG9jYXRpb24gc3VjY2VlZHMuCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIHBhY2tldHMgb24gc3VjY2VzcyBvciAwIHdoZW4gb3V0IG9mIG1lbW9yeS4KICAqLwogc3RhdGljIGludCB1dmNfYWxsb2NfdXJiX2J1ZmZlcnMoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAotCXVuc2lnbmVkIGludCBzaXplKQorCXVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgcHNpemUsIGdmcF90IGdmcF9mbGFncykKIHsKKwl1bnNpZ25lZCBpbnQgbnBhY2tldHM7CiAJdW5zaWduZWQgaW50IGk7CiAKIAkvKiBCdWZmZXJzIGFyZSBhbHJlYWR5IGFsbG9jYXRlZCwgYmFpbCBvdXQuICovCiAJaWYgKHZpZGVvLT51cmJfc2l6ZSkKIAkJcmV0dXJuIDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgVVZDX1VSQlM7ICsraSkgewotCQl2aWRlby0+dXJiX2J1ZmZlcltpXSA9IHVzYl9idWZmZXJfYWxsb2ModmlkZW8tPmRldi0+dWRldiwKLQkJCXNpemUsIEdGUF9LRVJORUwsICZ2aWRlby0+dXJiX2RtYVtpXSk7Ci0JCWlmICh2aWRlby0+dXJiX2J1ZmZlcltpXSA9PSBOVUxMKSB7Ci0JCQl1dmNfZnJlZV91cmJfYnVmZmVycyh2aWRlbyk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKKwkvKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgcGFja2V0cy4gQnVsayBlbmRwb2ludHMgbWlnaHQgdHJhbnNmZXIgVVZDCisJICogcGF5bG9hZHMgYWNjcm9zcyBtdWx0aXBsZSBVUkJzLgorCSAqLworCW5wYWNrZXRzID0gRElWX1JPVU5EX1VQKHNpemUsIHBzaXplKTsKKwlpZiAobnBhY2tldHMgPiBVVkNfTUFYX1BBQ0tFVFMpCisJCW5wYWNrZXRzID0gVVZDX01BWF9QQUNLRVRTOworCisJLyogUmV0cnkgYWxsb2NhdGlvbnMgdW50aWwgb25lIHN1Y2NlZWQuICovCisJZm9yICg7IG5wYWNrZXRzID4gMTsgbnBhY2tldHMgLz0gMikgeworCQlmb3IgKGkgPSAwOyBpIDwgVVZDX1VSQlM7ICsraSkgeworCQkJdmlkZW8tPnVyYl9idWZmZXJbaV0gPSB1c2JfYnVmZmVyX2FsbG9jKAorCQkJCXZpZGVvLT5kZXYtPnVkZXYsIHBzaXplICogbnBhY2tldHMsCisJCQkJZ2ZwX2ZsYWdzIHwgX19HRlBfTk9XQVJOLCAmdmlkZW8tPnVyYl9kbWFbaV0pOworCQkJaWYgKCF2aWRlby0+dXJiX2J1ZmZlcltpXSkgeworCQkJCXV2Y19mcmVlX3VyYl9idWZmZXJzKHZpZGVvKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChpID09IFVWQ19VUkJTKSB7CisJCQl2aWRlby0+dXJiX3NpemUgPSBwc2l6ZSAqIG5wYWNrZXRzOworCQkJcmV0dXJuIG5wYWNrZXRzOwogCQl9CiAJfQogCi0JdmlkZW8tPnVyYl9zaXplID0gc2l6ZTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzUzLDI5ICs4MDIsMTkgQEAKIHsKIAlzdHJ1Y3QgdXJiICp1cmI7CiAJdW5zaWduZWQgaW50IG5wYWNrZXRzLCBpLCBqOwotCV9fdTE2IHBzaXplOwotCV9fdTMyIHNpemU7CisJdTE2IHBzaXplOworCXUzMiBzaXplOwogCi0JLyogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGlzb2Nocm9ub3VzIHBhY2tldHMgdG8gYWxsb2NhdGUgYnkgZGl2aWRpbmcKLQkgKiB0aGUgbWF4aW11bSB2aWRlbyBmcmFtZSBzaXplIGJ5IHRoZSBwYWNrZXQgc2l6ZS4gTGltaXQgdGhlIHJlc3VsdAotCSAqIHRvIFVWQ19NQVhfSVNPX1BBQ0tFVFMuCi0JICovCiAJcHNpemUgPSBsZTE2X3RvX2NwdShlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSk7CiAJcHNpemUgPSAocHNpemUgJiAweDA3ZmYpICogKDEgKyAoKHBzaXplID4+IDExKSAmIDMpKTsKLQogCXNpemUgPSB2aWRlby0+c3RyZWFtaW5nLT5jdHJsLmR3TWF4VmlkZW9GcmFtZVNpemU7Ci0JaWYgKHNpemUgPiBVVkNfTUFYX0ZSQU1FX1NJWkUpCi0JCXJldHVybiAtRUlOVkFMOwogCi0JbnBhY2tldHMgPSBESVZfUk9VTkRfVVAoc2l6ZSwgcHNpemUpOwotCWlmIChucGFja2V0cyA+IFVWQ19NQVhfSVNPX1BBQ0tFVFMpCi0JCW5wYWNrZXRzID0gVVZDX01BWF9JU09fUEFDS0VUUzsKKwlucGFja2V0cyA9IHV2Y19hbGxvY191cmJfYnVmZmVycyh2aWRlbywgc2l6ZSwgcHNpemUsIGdmcF9mbGFncyk7CisJaWYgKG5wYWNrZXRzID09IDApCisJCXJldHVybiAtRU5PTUVNOwogCiAJc2l6ZSA9IG5wYWNrZXRzICogcHNpemU7CiAKLQlpZiAodXZjX2FsbG9jX3VyYl9idWZmZXJzKHZpZGVvLCBzaXplKSA8IDApCi0JCXJldHVybiAtRU5PTUVNOwotCiAJZm9yIChpID0gMDsgaSA8IFVWQ19VUkJTOyArK2kpIHsKIAkJdXJiID0gdXNiX2FsbG9jX3VyYihucGFja2V0cywgZ2ZwX2ZsYWdzKTsKIAkJaWYgKHVyYiA9PSBOVUxMKSB7CkBAIC04MTQsMjUgKzg1MywyMCBAQAogCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAsIGdmcF90IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3QgdXJiICp1cmI7Ci0JdW5zaWduZWQgaW50IHBpcGUsIGk7Ci0JX191MTYgcHNpemU7Ci0JX191MzIgc2l6ZTsKKwl1bnNpZ25lZCBpbnQgbnBhY2tldHMsIHBpcGUsIGk7CisJdTE2IHBzaXplOworCXUzMiBzaXplOwogCi0JLyogQ29tcHV0ZSB0aGUgYnVsayBVUkIgc2l6ZS4gU29tZSBkZXZpY2VzIHNldCB0aGUgbWF4aW11bSBwYXlsb2FkCi0JICogc2l6ZSB0byBhIHZhbHVlIHRvbyBoaWdoIGZvciBtZW1vcnktY29uc3RyYWluZWQgZGV2aWNlcy4gV2UgbXVzdAotCSAqIHRoZW4gdHJhbnNmZXIgdGhlIHBheWxvYWQgYWNjcm9zcyBtdWx0aXBsZSBVUkJzLiBUbyBiZSBjb25zaXN0YW50Ci0JICogd2l0aCBpc29jaHJvbm91cyBtb2RlLCBhbGxvY2F0ZSBtYXhpbXVtIFVWQ19NQVhfSVNPX1BBQ0tFVFMgcGVyIGJ1bGsKLQkgKiBVUkIuCi0JICovCiAJcHNpemUgPSBsZTE2X3RvX2NwdShlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSkgJiAweDA3ZmY7CiAJc2l6ZSA9IHZpZGVvLT5zdHJlYW1pbmctPmN0cmwuZHdNYXhQYXlsb2FkVHJhbnNmZXJTaXplOwogCXZpZGVvLT5idWxrLm1heF9wYXlsb2FkX3NpemUgPSBzaXplOwotCWlmIChzaXplID4gcHNpemUgKiBVVkNfTUFYX0lTT19QQUNLRVRTKQotCQlzaXplID0gcHNpemUgKiBVVkNfTUFYX0lTT19QQUNLRVRTOwogCi0JaWYgKHV2Y19hbGxvY191cmJfYnVmZmVycyh2aWRlbywgc2l6ZSkgPCAwKQorCW5wYWNrZXRzID0gdXZjX2FsbG9jX3VyYl9idWZmZXJzKHZpZGVvLCBzaXplLCBwc2l6ZSwgZ2ZwX2ZsYWdzKTsKKwlpZiAobnBhY2tldHMgPT0gMCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlzaXplID0gbnBhY2tldHMgKiBwc2l6ZTsKKwogCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKCZlcC0+ZGVzYykpCiAJCXBpcGUgPSB1c2JfcmN2YnVsa3BpcGUodmlkZW8tPmRldi0+dWRldiwKIAkJCQkgICAgICAgZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyk7CkBAIC0xMDIxLDExICsxMDU1LDIwIEBACiAJICovCiAJdXNiX3NldF9pbnRlcmZhY2UodmlkZW8tPmRldi0+dWRldiwgdmlkZW8tPnN0cmVhbWluZy0+aW50Zm51bSwgMCk7CiAKLQkvKiBTb21lIHdlYmNhbXMgZG9uJ3Qgc3Vwb3J0IEdFVF9ERUYgcmVxdWVzdHMgb24gdGhlIHByb2JlIGNvbnRyb2wuIFdlCi0JICogZmFsbCBiYWNrIHRvIEdFVF9DVVIgaWYgR0VUX0RFRiBmYWlscy4KKwkvKiBTZXQgdGhlIHN0cmVhbWluZyBwcm9iZSBjb250cm9sIHdpdGggZGVmYXVsdCBzdHJlYW1pbmcgcGFyYW1ldGVycworCSAqIHJldHJpZXZlZCBmcm9tIHRoZSBkZXZpY2UuIFdlYmNhbXMgdGhhdCBkb24ndCBzdXBvcnQgR0VUX0RFRgorCSAqIHJlcXVlc3RzIG9uIHRoZSBwcm9iZSBjb250cm9sIHdpbGwganVzdCBrZWVwIHRoZWlyIGN1cnJlbnQgc3RyZWFtaW5nCisJICogcGFyYW1ldGVycy4KIAkgKi8KLQlpZiAoKHJldCA9IHV2Y19nZXRfdmlkZW9fY3RybCh2aWRlbywgcHJvYmUsIDEsIEdFVF9ERUYpKSA8IDAgJiYKLQkgICAgKHJldCA9IHV2Y19nZXRfdmlkZW9fY3RybCh2aWRlbywgcHJvYmUsIDEsIEdFVF9DVVIpKSA8IDApCisJaWYgKHV2Y19nZXRfdmlkZW9fY3RybCh2aWRlbywgcHJvYmUsIDEsIEdFVF9ERUYpID09IDApCisJCXV2Y19zZXRfdmlkZW9fY3RybCh2aWRlbywgcHJvYmUsIDEpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgc3RyZWFtaW5nIHBhcmFtZXRlcnMgd2l0aCB0aGUgcHJvYmUgY29udHJvbCBjdXJyZW50CisJICogdmFsdWUuIFRoaXMgbWFrZXMgc3VyZSBTRVRfQ1VSIHJlcXVlc3RzIG9uIHRoZSBzdHJlYW1pbmcgY29tbWl0CisJICogY29udHJvbCB3aWxsIGFsd2F5cyB1c2UgdmFsdWVzIHJldHJpZXZlZCBmcm9tIGEgc3VjY2Vzc2Z1bCBHRVRfQ1VSCisJICogcmVxdWVzdCBvbiB0aGUgcHJvYmUgY29udHJvbCwgYXMgcmVxdWlyZWQgYnkgdGhlIFVWQyBzcGVjaWZpY2F0aW9uLgorCSAqLworCWlmICgocmV0ID0gdXZjX2dldF92aWRlb19jdHJsKHZpZGVvLCBwcm9iZSwgMSwgR0VUX0NVUikpIDwgMCkKIAkJcmV0dXJuIHJldDsKIAogCS8qIENoZWNrIGlmIHRoZSBkZWZhdWx0IGZvcm1hdCBkZXNjcmlwdG9yIGV4aXN0cy4gVXNlIHRoZSBmaXJzdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmgKaW5kZXggMDI3OTQ3ZS4uZTUwMTRlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oCkBAIC0yOTYsMTAgKzI5Niw4IEBACiAKIC8qIE51bWJlciBvZiBpc29jaHJvbm91cyBVUkJzLiAqLwogI2RlZmluZSBVVkNfVVJCUwkJNQotLyogTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyBwZXIgaXNvY2hyb25vdXMgVVJCLiAqLwotI2RlZmluZSBVVkNfTUFYX0lTT19QQUNLRVRTCTQwCi0vKiBNYXhpbXVtIGZyYW1lIHNpemUgaW4gYnl0ZXMsIGZvciBzYW5pdHkgY2hlY2tpbmcuICovCi0jZGVmaW5lIFVWQ19NQVhfRlJBTUVfU0laRQkoMTYqMTAyNCoxMDI0KQorLyogTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyBwZXIgVVJCLiAqLworI2RlZmluZSBVVkNfTUFYX1BBQ0tFVFMJCTMyCiAvKiBNYXhpbXVtIG51bWJlciBvZiB2aWRlbyBidWZmZXJzLiAqLwogI2RlZmluZSBVVkNfTUFYX1ZJREVPX0JVRkZFUlMJMzIKIC8qIE1heGltdW0gc3RhdHVzIGJ1ZmZlciBzaXplIGluIGJ5dGVzIG9mIGludGVycnVwdCBVUkIuICovCkBAIC0zMTYsNiArMzE0LDcgQEAKICNkZWZpbmUgVVZDX1FVSVJLX1NUUkVBTV9OT19GSUQJCTB4MDAwMDAwMTAKICNkZWZpbmUgVVZDX1FVSVJLX0lHTk9SRV9TRUxFQ1RPUl9VTklUCTB4MDAwMDAwMjAKICNkZWZpbmUgVVZDX1FVSVJLX1BSVU5FX0NPTlRST0xTCTB4MDAwMDAwNDAKKyNkZWZpbmUgVVZDX1FVSVJLX0ZJWF9CQU5EV0lEVEgJCTB4MDAwMDAwODAKIAogLyogRm9ybWF0IGZsYWdzICovCiAjZGVmaW5lIFVWQ19GTVRfRkxBR19DT01QUkVTU0VECQkweDAwMDAwMDAxCkBAIC02NDksNiArNjQ4LDcgQEAKIAlzdHJ1Y3QgdXJiICppbnRfdXJiOwogCV9fdTggKnN0YXR1czsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwljaGFyIGlucHV0X3BoeXNbNjRdOwogCiAJLyogVmlkZW8gU3RyZWFtaW5nIGludGVyZmFjZXMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHN0cmVhbWluZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwppbmRleCBiOGYyYmU4Li4xZGE4Y2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCkBAIC0zMzQsNiArMzM0LDEyIEBACiAJCSJBcGVydHVyZSBQcmlvcml0eSBNb2RlIiwKIAkJTlVMTAogCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbG9yZnhbXSA9IHsKKwkJIk5vbmUiLAorCQkiQmxhY2sgJiBXaGl0ZSIsCisJCSJTZXBpYSIsCisJCU5VTEwKKwl9OwogCiAJc3dpdGNoIChpZCkgewogCQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUToKQEAgLTM3MCw2ICszNzYsOCBAQAogCQkJcmV0dXJuIGNhbWVyYV9wb3dlcl9saW5lX2ZyZXF1ZW5jeTsKIAkJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPOgogCQkJcmV0dXJuIGNhbWVyYV9leHBvc3VyZV9hdXRvOworCQljYXNlIFY0TDJfQ0lEX0NPTE9SRlg6CisJCQlyZXR1cm4gY29sb3JmeDsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiBOVUxMOwogCX0KQEAgLTM4MiwxNiArMzkwLDE2IEBACiAJc3dpdGNoIChpZCkgewogCS8qIFVTRVIgY29udHJvbHMgKi8KIAljYXNlIFY0TDJfQ0lEX1VTRVJfQ0xBU1M6IAkJcmV0dXJuICJVc2VyIENvbnRyb2xzIjsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRTogCQlyZXR1cm4gIlZvbHVtZSI7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOiAJCXJldHVybiAiTXV0ZSI7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOiAJCXJldHVybiAiQmFsYW5jZSI7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOiAJCXJldHVybiAiQmFzcyI7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6IAkJcmV0dXJuICJUcmVibGUiOwotCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6IAkJcmV0dXJuICJMb3VkbmVzcyI7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOiAJCXJldHVybiAiQnJpZ2h0bmVzcyI7CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDogCQlyZXR1cm4gIkNvbnRyYXN0IjsKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046IAkJcmV0dXJuICJTYXR1cmF0aW9uIjsKIAljYXNlIFY0TDJfQ0lEX0hVRTogCQkJcmV0dXJuICJIdWUiOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOiAJCXJldHVybiAiVm9sdW1lIjsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6IAkJcmV0dXJuICJCYWxhbmNlIjsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6IAkJcmV0dXJuICJCYXNzIjsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRTogCQlyZXR1cm4gIlRyZWJsZSI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOiAJCXJldHVybiAiTXV0ZSI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19MT1VETkVTUzogCQlyZXR1cm4gIkxvdWRuZXNzIjsKIAljYXNlIFY0TDJfQ0lEX0JMQUNLX0xFVkVMOgkJcmV0dXJuICJCbGFjayBMZXZlbCI7CiAJY2FzZSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0U6CXJldHVybiAiV2hpdGUgQmFsYW5jZSwgQXV0b21hdGljIjsKIAljYXNlIFY0TDJfQ0lEX0RPX1dISVRFX0JBTEFOQ0U6CQlyZXR1cm4gIkRvIFdoaXRlIEJhbGFuY2UiOwpAQCAtNDEyLDYgKzQyMCw3IEBACiAJY2FzZSBWNEwyX0NJRF9CQUNLTElHSFRfQ09NUEVOU0FUSU9OOglyZXR1cm4gIkJhY2tsaWdodCBDb21wZW5zYXRpb24iOwogCWNhc2UgVjRMMl9DSURfQ0hST01BX0FHQzoJCXJldHVybiAiQ2hyb21hIEFHQyI7CiAJY2FzZSBWNEwyX0NJRF9DT0xPUl9LSUxMRVI6CQlyZXR1cm4gIkNvbG9yIEtpbGxlciI7CisJY2FzZSBWNEwyX0NJRF9DT0xPUkZYOgkJCXJldHVybiAiQ29sb3IgRWZmZWN0cyI7CiAKIAkvKiBNUEVHIGNvbnRyb2xzICovCiAJY2FzZSBWNEwyX0NJRF9NUEVHX0NMQVNTOiAJCXJldHVybiAiTVBFRyBFbmNvZGVyIENvbnRyb2xzIjsKQEAgLTQ5MCwxNiArNDk5LDI1IEBACiAJY2FzZSBWNEwyX0NJRF9IRkxJUDoKIAljYXNlIFY0TDJfQ0lEX1ZGTElQOgogCWNhc2UgVjRMMl9DSURfSFVFX0FVVE86CisJY2FzZSBWNEwyX0NJRF9DSFJPTUFfQUdDOgorCWNhc2UgVjRMMl9DSURfQ09MT1JfS0lMTEVSOgogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NVVRFOgogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NVVRFOgogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfQ0xPU1VSRToKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fUFVMTERPV046CiAJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPX1BSSU9SSVRZOgorCWNhc2UgVjRMMl9DSURfRk9DVVNfQVVUTzoKIAljYXNlIFY0TDJfQ0lEX1BSSVZBQ1k6CiAJCXFjdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTjsKIAkJbWluID0gMDsKIAkJbWF4ID0gc3RlcCA9IDE7CiAJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfUEFOX1JFU0VUOgorCWNhc2UgVjRMMl9DSURfVElMVF9SRVNFVDoKKwkJcWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CVVRUT047CisJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19XUklURV9PTkxZOworCQltaW4gPSBtYXggPSBzdGVwID0gZGVmID0gMDsKKwkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWToKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUToKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6CkBAIC01MTcsNiArNTM1LDcgQEAKIAljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UOgogCWNhc2UgVjRMMl9DSURfRVhQT1NVUkVfQVVUTzoKKwljYXNlIFY0TDJfQ0lEX0NPTE9SRlg6CiAJCXFjdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfTUVOVTsKIAkJc3RlcCA9IDE7CiAJCWJyZWFrOwpAQCAtNTQ3LDE2MSArNTY2LDI5IEBACiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CiAJY2FzZSBWNEwyX0NJRF9IVUU6CisJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwljYXNlIFY0TDJfQ0lEX0dBTU1BOgorCWNhc2UgVjRMMl9DSURfU0hBUlBORVNTOgogCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSOwogCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1BBTl9SRUxBVElWRToKKwljYXNlIFY0TDJfQ0lEX1RJTFRfUkVMQVRJVkU6CisJY2FzZSBWNEwyX0NJRF9GT0NVU19SRUxBVElWRToKKwljYXNlIFY0TDJfQ0lEX1pPT01fUkVMQVRJVkU6CisJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19XUklURV9PTkxZOworCQlicmVhazsKIAl9CiAJcWN0cmwtPm1pbmltdW0gPSBtaW47CiAJcWN0cmwtPm1heGltdW0gPSBtYXg7CiAJcWN0cmwtPnN0ZXAgPSBzdGVwOwogCXFjdHJsLT5kZWZhdWx0X3ZhbHVlID0gZGVmOwogCXFjdHJsLT5yZXNlcnZlZFswXSA9IHFjdHJsLT5yZXNlcnZlZFsxXSA9IDA7Ci0Jc25wcmludGYocWN0cmwtPm5hbWUsIHNpemVvZihxY3RybC0+bmFtZSksIG5hbWUpOworCXN0cmxjcHkocWN0cmwtPm5hbWUsIG5hbWUsIHNpemVvZihxY3RybC0+bmFtZSkpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh2NGwyX2N0cmxfcXVlcnlfZmlsbCk7CiAKLS8qIEZpbGwgaW4gYSBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgd2l0aCBzdGFuZGFyZCB2YWx1ZXMgYmFzZWQgb24KLSAgIHRoZSBjb250cm9sIElELiAqLwotaW50IHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsKQotewotCXN3aXRjaCAocWN0cmwtPmlkKSB7Ci0JLyogVVNFUiBjb250cm9scyAqLwotCWNhc2UgVjRMMl9DSURfVVNFUl9DTEFTUzoKLQljYXNlIFY0TDJfQ0lEX01QRUdfQ0xBU1M6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMCwgMCwgMCk7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCA1ODg4MCk7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMSwgMSwgMCk7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDMyNzY4KTsKLQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjU1LCAxLCAxMjgpOwotCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6Ci0JY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDEyNywgMSwgNjQpOwotCWNhc2UgVjRMMl9DSURfSFVFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIC0xMjgsIDEyNywgMSwgMCk7Ci0KLQkvKiBNUEVHIGNvbnRyb2xzICovCi0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80NDEwMCwKLQkJCQlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV8zMjAwMCwgMSwKLQkJCQlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMCk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMywgMSwKLQkJCQlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMik7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wxX0JJVFJBVEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8zMkssCi0JCQkJVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfNDQ4SywgMSwKLQkJCQlWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8yNTZLKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAotCQkJCVY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzMySywKLQkJCQlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLLCAxLAotCQkJCVY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzIyNEspOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MM19CSVRSQVRFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMzJLLAotCQkJCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzMyMEssIDEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTkySyk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FBQ19CSVRSQVRFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDY0MDAsIDEsIDMyMDAwMDApOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAotCQkJCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zMkssCi0JCQkJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzY0MEssIDEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzM4NEspOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NT0RFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCi0JCQkJVjRMMl9NUEVHX0FVRElPX01PREVfU1RFUkVPLAotCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX01PTk8sIDEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX01PREVfU1RFUkVPKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT046Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfNCwKLQkJCQlWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfMTYsIDEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzQpOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTVBIQVNJUzoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAotCQkJCVY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FLAotCQkJCVY0TDJfTVBFR19BVURJT19FTVBIQVNJU19DQ0lUVF9KMTcsIDEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTX05PTkUpOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19DUkM6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfQVVESU9fQ1JDX05PTkUsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0NSQ19DUkMxNiwgMSwKLQkJCQlWNEwyX01QRUdfQVVESU9fQ1JDX05PTkUpOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NVVRFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDEsIDEsIDApOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAotCQkJCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzEsCi0JCQkJVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfNF9BVkMsIDEsCi0JCQkJVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMik7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0FTUEVDVDoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAotCQkJCVY0TDJfTVBFR19WSURFT19BU1BFQ1RfMXgxLAotCQkJCVY0TDJfTVBFR19WSURFT19BU1BFQ1RfMjIxeDEwMCwgMSwKLQkJCQlWNEwyX01QRUdfVklERU9fQVNQRUNUXzR4Myk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDMzLCAxLCAyKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX1NJWkU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMSwgMzQsIDEsIDEyKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX0NMT1NVUkU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMSwgMSwgMSk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1BVTExET1dOOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDEsIDEsIDApOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUiwKLQkJCQlWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX0NCUiwgMSwKLQkJCQlWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUik7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjcwMDAwMDAsIDEsIDYwMDAwMDApOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjcwMDAwMDAsIDEsIDgwMDAwMDApOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19URU1QT1JBTF9ERUNJTUFUSU9OOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI1NSwgMSwgMCk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VVEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMSwgMSwgMCk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VVEVfWVVWOiAgLyogSW5pdCBZVVYgKHJlYWxseSBZQ2JDcikgdG8gYmxhY2sgKi8KLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAweGZmZmZmZiwgMSwgMHgwMDgwODApOwotCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAotCQkJCVY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9QUywKLQkJCQlWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfU1ZDRCwgMSwKLQkJCQlWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfUFMpOwotCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BNVDoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAoMSA8PCAxNCkgLSAxLCAxLCAxNik7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfQVVESU86Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgKDEgPDwgMTQpIC0gMSwgMSwgMjYwKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9WSURFTzoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAoMSA8PCAxNCkgLSAxLCAxLCAyNTYpOwotCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BDUjoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAoMSA8PCAxNCkgLSAxLCAxLCAyNTkpOwotCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUEVTX0lEX0FVRElPOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI1NSwgMSwgMCk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfVklERU86Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjU1LCAxLCAwKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1ZCSV9GTVQ6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORSwKLQkJCQlWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUViwgMSwKLQkJCQlWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORSk7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotfQotRVhQT1JUX1NZTUJPTCh2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQpOwotCiAvKiBGaWxsIGluIGEgc3RydWN0IHY0bDJfcXVlcnltZW51IGJhc2VkIG9uIHRoZSBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgYW5kCiAgICB0aGUgbWVudS4gVGhlIHFjdHJsIHBvaW50ZXIgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2UgaXQgaXMgaWdub3JlZC4KICAgIElmIG1lbnVfaXRlbXMgaXMgTlVMTCwgdGhlbiB0aGUgbWVudSBpdGVtcyBhcmUgcmV0cmlldmVkIHVzaW5nCkBAIC03MjAsNyArNjA3LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgcW1lbnUtPmluZGV4ICYmIG1lbnVfaXRlbXNbaV07IGkrKykgOwogCWlmIChtZW51X2l0ZW1zW2ldID09IE5VTEwgfHwgbWVudV9pdGVtc1tpXVswXSA9PSAnXDAnKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlzbnByaW50ZihxbWVudS0+bmFtZSwgc2l6ZW9mKHFtZW51LT5uYW1lKSwgbWVudV9pdGVtc1txbWVudS0+aW5kZXhdKTsKKwlzdHJsY3B5KHFtZW51LT5uYW1lLCBtZW51X2l0ZW1zW3FtZW51LT5pbmRleF0sIHNpemVvZihxbWVudS0+bmFtZSkpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh2NGwyX2N0cmxfcXVlcnlfbWVudSk7CkBAIC03MzcsOCArNjI0LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJd2hpbGUgKCppZHMgIT0gVjRMMl9DVFJMX01FTlVfSURTX0VORCkgewogCQlpZiAoKmlkcysrID09IHFtZW51LT5pbmRleCkgewotCQkJc25wcmludGYocW1lbnUtPm5hbWUsIHNpemVvZihxbWVudS0+bmFtZSksCi0JCQkJICAgICAgIG1lbnVfaXRlbXNbcW1lbnUtPmluZGV4XSk7CisJCQlzdHJsY3B5KHFtZW51LT5uYW1lLCBtZW51X2l0ZW1zW3FtZW51LT5pbmRleF0sCisJCQkJCXNpemVvZihxbWVudS0+bmFtZSkpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC03NDksNyArNjM2LDcgQEAKIC8qIGN0cmxfY2xhc3NlcyBwb2ludHMgdG8gYW4gYXJyYXkgb2YgdTMyIHBvaW50ZXJzLCB0aGUgbGFzdCBlbGVtZW50IGlzCiAgICBhIE5VTEwgcG9pbnRlci4gRWFjaCB1MzIgYXJyYXkgaXMgYSAwLXRlcm1pbmF0ZWQgYXJyYXkgb2YgY29udHJvbCBJRHMuCiAgICBFYWNoIGFycmF5IG11c3QgYmUgc29ydGVkIGxvdyB0byBoaWdoIGFuZCBiZWxvbmcgdG8gdGhlIHNhbWUgY29udHJvbAotICAgY2xhc3MuIFRoZSBhcnJheSBvZiB1MzIgcG9pbnRlciBtdXN0IGFsc28gYmUgc29ydGVkLCBmcm9tIGxvdyBjbGFzcyBJRHMKKyAgIGNsYXNzLiBUaGUgYXJyYXkgb2YgdTMyIHBvaW50ZXJzIG11c3QgYWxzbyBiZSBzb3J0ZWQsIGZyb20gbG93IGNsYXNzIElEcwogICAgdG8gaGlnaCBjbGFzcyBJRHMuCiAKICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3QgSUQgdGhhdCBmb2xsb3dzIGFmdGVyIHRoZSBnaXZlbiBJRC4KQEAgLTkxMCwxMCArNzk3LDEwIEBACiAJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CiAKIAlCVUdfT04oIWRldik7Ci0jaWZkZWYgTU9EVUxFCisKIAlpZiAobW9kdWxlX25hbWUpCiAJCXJlcXVlc3RfbW9kdWxlKG1vZHVsZV9uYW1lKTsKLSNlbmRpZgorCiAJLyogU2V0dXAgdGhlIGkyYyBib2FyZCBpbmZvIHdpdGggdGhlIGRldmljZSB0eXBlIGFuZAogCSAgIHRoZSBkZXZpY2UgYWRkcmVzcy4gKi8KIAltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CkBAIC05MjcsMTEgKzgxNCwxMSBAQAogCSAgIFdlIG5lZWQgYmV0dGVyIHN1cHBvcnQgZnJvbSB0aGUga2VybmVsIHNvIHRoYXQgd2UKIAkgICBjYW4gZWFzaWx5IHdhaXQgZm9yIHRoZSBsb2FkIHRvIGZpbmlzaC4gKi8KIAlpZiAoY2xpZW50ID09IE5VTEwgfHwgY2xpZW50LT5kcml2ZXIgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gZXJyb3I7CiAKIAkvKiBMb2NrIHRoZSBtb2R1bGUgc28gd2UgY2FuIHNhZmVseSBnZXQgdGhlIHY0bDJfc3ViZGV2IHBvaW50ZXIgKi8KIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIub3duZXIpKQotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBlcnJvcjsKIAlzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJLyogUmVnaXN0ZXIgd2l0aCB0aGUgdjRsMl9kZXZpY2Ugd2hpY2ggaW5jcmVhc2VzIHRoZSBtb2R1bGUncwpAQCAtOTQwLDggKzgyNywxMyBAQAogCQlzZCA9IE5VTEw7CiAJLyogRGVjcmVhc2UgdGhlIG1vZHVsZSB1c2UgY291bnQgdG8gbWF0Y2ggdGhlIGZpcnN0IHRyeV9tb2R1bGVfZ2V0LiAqLwogCW1vZHVsZV9wdXQoY2xpZW50LT5kcml2ZXItPmRyaXZlci5vd25lcik7Ci0JcmV0dXJuIHNkOwogCitlcnJvcjoKKwkvKiBJZiB3ZSBoYXZlIGEgY2xpZW50IGJ1dCBubyBzdWJkZXYsIHRoZW4gc29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kCisJICAgd2UgbXVzdCB1bnJlZ2lzdGVyIHRoZSBjbGllbnQuICovCisJaWYgKGNsaWVudCAmJiBzZCA9PSBOVUxMKQorCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50KTsKKwlyZXR1cm4gc2Q7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2kyY19uZXdfc3ViZGV2KTsKIApAQCAtOTU4LDEwICs4NTAsMTAgQEAKIAlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKIAogCUJVR19PTighZGV2KTsKLSNpZmRlZiBNT0RVTEUKKwogCWlmIChtb2R1bGVfbmFtZSkKIAkJcmVxdWVzdF9tb2R1bGUobW9kdWxlX25hbWUpOwotI2VuZGlmCisKIAkvKiBTZXR1cCB0aGUgaTJjIGJvYXJkIGluZm8gd2l0aCB0aGUgZGV2aWNlIHR5cGUgYW5kCiAJICAgdGhlIGRldmljZSBhZGRyZXNzLiAqLwogCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKQEAgLTk3NCwxMSArODY2LDExIEBACiAJICAgV2UgbmVlZCBiZXR0ZXIgc3VwcG9ydCBmcm9tIHRoZSBrZXJuZWwgc28gdGhhdCB3ZQogCSAgIGNhbiBlYXNpbHkgd2FpdCBmb3IgdGhlIGxvYWQgdG8gZmluaXNoLiAqLwogCWlmIChjbGllbnQgPT0gTlVMTCB8fCBjbGllbnQtPmRyaXZlciA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBlcnJvcjsKIAogCS8qIExvY2sgdGhlIG1vZHVsZSBzbyB3ZSBjYW4gc2FmZWx5IGdldCB0aGUgdjRsMl9zdWJkZXYgcG9pbnRlciAqLwogCWlmICghdHJ5X21vZHVsZV9nZXQoY2xpZW50LT5kcml2ZXItPmRyaXZlci5vd25lcikpCi0JCXJldHVybiBOVUxMOworCQlnb3RvIGVycm9yOwogCXNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAkvKiBSZWdpc3RlciB3aXRoIHRoZSB2NGwyX2RldmljZSB3aGljaCBpbmNyZWFzZXMgdGhlIG1vZHVsZSdzCkBAIC05ODcsOCArODc5LDU5IEBACiAJCXNkID0gTlVMTDsKIAkvKiBEZWNyZWFzZSB0aGUgbW9kdWxlIHVzZSBjb3VudCB0byBtYXRjaCB0aGUgZmlyc3QgdHJ5X21vZHVsZV9nZXQuICovCiAJbW9kdWxlX3B1dChjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKKworZXJyb3I6CisJLyogSWYgd2UgaGF2ZSBhIGNsaWVudCBidXQgbm8gc3ViZGV2LCB0aGVuIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZAorCSAgIHdlIG11c3QgdW5yZWdpc3RlciB0aGUgY2xpZW50LiAqLworCWlmIChjbGllbnQgJiYgc2QgPT0gTlVMTCkKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudCk7CiAJcmV0dXJuIHNkOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYpOwogCisvKiBSZXR1cm4gaTJjIGNsaWVudCBhZGRyZXNzIG9mIHY0bDJfc3ViZGV2LiAqLwordW5zaWduZWQgc2hvcnQgdjRsMl9pMmNfc3ViZGV2X2FkZHIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gY2xpZW50ID8gY2xpZW50LT5hZGRyIDogSTJDX0NMSUVOVF9FTkQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2kyY19zdWJkZXZfYWRkcik7CisKKy8qIFJldHVybiBhIGxpc3Qgb2YgSTJDIHR1bmVyIGFkZHJlc3NlcyB0byBwcm9iZS4gVXNlIG9ubHkgaWYgdGhlIHR1bmVyCisgICBhZGRyZXNzZXMgYXJlIHVua25vd24uICovCitjb25zdCB1bnNpZ25lZCBzaG9ydCAqdjRsMl9pMmNfdHVuZXJfYWRkcnMoZW51bSB2NGwyX2kyY190dW5lcl90eXBlIHR5cGUpCit7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHJhZGlvX2FkZHJzW10gPSB7CisjaWYgZGVmaW5lZChDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2MSkgfHwgZGVmaW5lZChDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2MV9NT0RVTEUpCisJCTB4MTAsCisjZW5kaWYKKwkJMHg2MCwKKwkJSTJDX0NMSUVOVF9FTkQKKwl9OworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBkZW1vZF9hZGRyc1tdID0geworCQkweDQyLCAweDQzLCAweDRhLCAweDRiLAorCQlJMkNfQ0xJRU5UX0VORAorCX07CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHR2X2FkZHJzW10gPSB7CisJCTB4NDIsIDB4NDMsIDB4NGEsIDB4NGIsCQkvKiB0ZGE4MjkwICovCisJCTB4NjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsCisJCTB4NjgsIDB4NjksIDB4NmEsIDB4NmIsIDB4NmMsIDB4NmQsIDB4NmUsIDB4NmYsCisJCUkyQ19DTElFTlRfRU5ECisJfTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgQUREUlNfUkFESU86CisJCXJldHVybiByYWRpb19hZGRyczsKKwljYXNlIEFERFJTX0RFTU9EOgorCQlyZXR1cm4gZGVtb2RfYWRkcnM7CisJY2FzZSBBRERSU19UVjoKKwkJcmV0dXJuIHR2X2FkZHJzOworCWNhc2UgQUREUlNfVFZfV0lUSF9ERU1PRDoKKwkJcmV0dXJuIHR2X2FkZHJzICsgNDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2kyY190dW5lcl9hZGRycyk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tcGF0LWlvY3RsMzIuYwppbmRleCAxMTAzNzZiLi4wMDU2YjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tcGF0LWlvY3RsMzIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tcGF0LWlvY3RsMzIuYwpAQCAtMTA0Nyw3ICsxMDQ3LDYgQEAKIAljYXNlIFZJRElPQ19EQkdfU19SRUdJU1RFUjoKIAljYXNlIFZJRElPQ19EQkdfR19SRUdJU1RFUjoKIAljYXNlIFZJRElPQ19EQkdfR19DSElQX0lERU5UOgotCWNhc2UgVklESU9DX0dfQ0hJUF9JREVOVF9PTEQ6CiAJY2FzZSBWSURJT0NfU19IV19GUkVRX1NFRUs6CiAJCXJldCA9IGRvX3ZpZGVvX2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMKaW5kZXggMTNmODdjMi4uOTEyMjhiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYwpAQCAtMTk4LDYgKzE5OCwyMyBAQAogCXJldHVybiB2ZGV2LT5mb3BzLT51bmxvY2tlZF9pb2N0bChmaWxwLCBjbWQsIGFyZyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTU1VCisjZGVmaW5lIHY0bDJfZ2V0X3VubWFwcGVkX2FyZWEgTlVMTAorI2Vsc2UKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHY0bDJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsCisJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlscCk7CisKKwlpZiAoIXZkZXYtPmZvcHMtPmdldF91bm1hcHBlZF9hcmVhKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlpZiAodmlkZW9faXNfdW5yZWdpc3RlcmVkKHZkZXYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gdmRldi0+Zm9wcy0+Z2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MpOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgdjRsMl9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbHApOwpAQCAtMjUwLDYgKzI2Nyw3IEBACiAJLnJlYWQgPSB2NGwyX3JlYWQsCiAJLndyaXRlID0gdjRsMl93cml0ZSwKIAkub3BlbiA9IHY0bDJfb3BlbiwKKwkuZ2V0X3VubWFwcGVkX2FyZWEgPSB2NGwyX2dldF91bm1hcHBlZF9hcmVhLAogCS5tbWFwID0gdjRsMl9tbWFwLAogCS51bmxvY2tlZF9pb2N0bCA9IHY0bDJfdW5sb2NrZWRfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVApAQCAtMjY1LDYgKzI4Myw3IEBACiAJLnJlYWQgPSB2NGwyX3JlYWQsCiAJLndyaXRlID0gdjRsMl93cml0ZSwKIAkub3BlbiA9IHY0bDJfb3BlbiwKKwkuZ2V0X3VubWFwcGVkX2FyZWEgPSB2NGwyX2dldF91bm1hcHBlZF9hcmVhLAogCS5tbWFwID0gdjRsMl9tbWFwLAogCS5pb2N0bCA9IHY0bDJfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVApAQCAtMjg4LDM3ICszMDcsMzggQEAKICAqLwogc3RhdGljIGludCBnZXRfaW5kZXgoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiwgaW50IG51bSkKIHsKLQl1MzIgdXNlZCA9IDA7Ci0JY29uc3QgaW50IG1heF9pbmRleCA9IHNpemVvZih1c2VkKSAqIDggLSAxOworCS8qIFRoaXMgY2FuIGJlIHN0YXRpYyBzaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBnbG9iYWwKKwkgICB2aWRlb2Rldl9sb2NrIGhlbGQuICovCisJc3RhdGljIERFQ0xBUkVfQklUTUFQKHVzZWQsIFZJREVPX05VTV9ERVZJQ0VTKTsKIAlpbnQgaTsKIAotCS8qIEN1cnJlbnRseSBhIHNpbmdsZSB2NGwgZHJpdmVyIGluc3RhbmNlIGNhbm5vdCBjcmVhdGUgbW9yZSB0aGFuCi0JICAgMzIgZGV2aWNlcy4KLQkgICBJbmNyZWFzZSB0byB1NjQgb3IgYW4gYXJyYXkgb2YgdTMyIGlmIG1vcmUgYXJlIG5lZWRlZC4gKi8KLQlpZiAobnVtID4gbWF4X2luZGV4KSB7CisJaWYgKG51bSA+PSBWSURFT19OVU1fREVWSUNFUykgewogCQlwcmludGsoS0VSTl9FUlIgInZpZGVvZGV2OiAlcyBudW0gaXMgdG9vIGxhcmdlXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIFNvbWUgZHJpdmVycyBkbyBub3Qgc2V0IHRoZSBwYXJlbnQuIEluIHRoYXQgY2FzZSBhbHdheXMgcmV0dXJuIDAuICovCisJLyogU29tZSBkcml2ZXJzIGRvIG5vdCBzZXQgdGhlIHBhcmVudC4gSW4gdGhhdCBjYXNlIGFsd2F5cyByZXR1cm4KKwkgICBudW0gb3IgMC4gKi8KIAlpZiAodmRldi0+cGFyZW50ID09IE5VTEwpCi0JCXJldHVybiAwOworCQlyZXR1cm4gbnVtID49IDAgPyBudW0gOiAwOworCisJYml0bWFwX3plcm8odXNlZCwgVklERU9fTlVNX0RFVklDRVMpOwogCiAJZm9yIChpID0gMDsgaSA8IFZJREVPX05VTV9ERVZJQ0VTOyBpKyspIHsKIAkJaWYgKHZpZGVvX2RldmljZVtpXSAhPSBOVUxMICYmCiAJCSAgICB2aWRlb19kZXZpY2VbaV0tPnBhcmVudCA9PSB2ZGV2LT5wYXJlbnQpIHsKLQkJCXVzZWQgfD0gMSA8PCB2aWRlb19kZXZpY2VbaV0tPmluZGV4OworCQkJc2V0X2JpdCh2aWRlb19kZXZpY2VbaV0tPmluZGV4LCB1c2VkKTsKIAkJfQogCX0KIAogCWlmIChudW0gPj0gMCkgewotCQlpZiAodXNlZCAmICgxIDw8IG51bSkpCisJCWlmICh0ZXN0X2JpdChudW0sIHVzZWQpKQogCQkJcmV0dXJuIC1FTkZJTEU7CiAJCXJldHVybiBudW07CiAJfQogCi0JaSA9IGZmeih1c2VkKTsKLQlyZXR1cm4gaSA+IG1heF9pbmRleCA/IC1FTkZJTEUgOiBpOworCWkgPSBmaW5kX2ZpcnN0X3plcm9fYml0KHVzZWQsIFZJREVPX05VTV9ERVZJQ0VTKTsKKwlyZXR1cm4gaSA9PSBWSURFT19OVU1fREVWSUNFUyA/IC1FTkZJTEUgOiBpOwogfQogCiBpbnQgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYsIGludCB0eXBlLCBpbnQgbnIpCkBAIC0zNjUsMTIgKzM4NSwxMSBAQAogCiAJLyogQSBtaW5vciB2YWx1ZSBvZiAtMSBtYXJrcyB0aGlzIHZpZGVvIGRldmljZSBhcyBuZXZlcgogCSAgIGhhdmluZyBiZWVuIHJlZ2lzdGVyZWQgKi8KLQlpZiAodmRldikKLQkJdmRldi0+bWlub3IgPSAtMTsKKwl2ZGV2LT5taW5vciA9IC0xOwogCiAJLyogdGhlIHJlbGVhc2UgY2FsbGJhY2sgTVVTVCBiZSBwcmVzZW50ICovCi0JV0FSTl9PTighdmRldiB8fCAhdmRldi0+cmVsZWFzZSk7Ci0JaWYgKCF2ZGV2IHx8ICF2ZGV2LT5yZWxlYXNlKQorCVdBUk5fT04oIXZkZXYtPnJlbGVhc2UpOworCWlmICghdmRldi0+cmVsZWFzZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBQYXJ0IDE6IGNoZWNrIGRldmljZSB0eXBlICovCkBAIC0zOTUsNyArNDE0LDcgQEAKIAogCXZkZXYtPnZmbF90eXBlID0gdHlwZTsKIAl2ZGV2LT5jZGV2ID0gTlVMTDsKLQlpZiAodmRldi0+djRsMl9kZXYpCisJaWYgKHZkZXYtPnY0bDJfZGV2ICYmIHZkZXYtPnY0bDJfZGV2LT5kZXYpCiAJCXZkZXYtPnBhcmVudCA9IHZkZXYtPnY0bDJfZGV2LT5kZXY7CiAKIAkvKiBQYXJ0IDI6IGZpbmQgYSBmcmVlIG1pbm9yLCBrZXJuZWwgbnVtYmVyIGFuZCBkZXZpY2UgaW5kZXguICovCkBAIC01ODIsNiArNjAxLDcgQEAKIE1PRFVMRV9BVVRIT1IoIkFsYW4gQ294LCBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRGV2aWNlIHJlZ2lzdHJhciBmb3IgVmlkZW80TGludXggZHJpdmVycyB2MiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTX0NIQVJERVZfTUFKT1IoVklERU9fTUFKT1IpOwogCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMKaW5kZXggOGE0Yjc0Zi4uOTRhYTQ4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYwpAQCAtMjYsNDggKzI2LDY2IEBACiAKIGludCB2NGwyX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCiB7Ci0JaWYgKGRldiA9PSBOVUxMIHx8IHY0bDJfZGV2ID09IE5VTEwpCisJaWYgKHY0bDJfZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwotCS8qIFdhcm4gaWYgd2UgYXBwYXJlbnRseSByZS1yZWdpc3RlciBhIGRldmljZSAqLwotCVdBUk5fT04oZGV2X2dldF9kcnZkYXRhKGRldikgIT0gTlVMTCk7CisKIAlJTklUX0xJU1RfSEVBRCgmdjRsMl9kZXYtPnN1YmRldnMpOwogCXNwaW5fbG9ja19pbml0KCZ2NGwyX2Rldi0+bG9jayk7CiAJdjRsMl9kZXYtPmRldiA9IGRldjsKLQlzbnByaW50Zih2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSwgIiVzICVzIiwKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJLyogSWYgZGV2ID09IE5VTEwsIHRoZW4gbmFtZSBtdXN0IGJlIGZpbGxlZCBpbiBieSB0aGUgY2FsbGVyICovCisJCVdBUk5fT04oIXY0bDJfZGV2LT5uYW1lWzBdKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogU2V0IG5hbWUgdG8gZHJpdmVyIG5hbWUgKyBkZXZpY2UgbmFtZSBpZiBpdCBpcyBlbXB0eS4gKi8KKwlpZiAoIXY0bDJfZGV2LT5uYW1lWzBdKQorCQlzbnByaW50Zih2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSwgIiVzICVzIiwKIAkJCWRldi0+ZHJpdmVyLT5uYW1lLCBkZXZfbmFtZShkZXYpKTsKKwlpZiAoZGV2X2dldF9kcnZkYXRhKGRldikpCisJCXY0bDJfd2Fybih2NGwyX2RldiwgIk5vbi1OVUxMIGRydmRhdGEgb24gcmVnaXN0ZXJcbiIpOwogCWRldl9zZXRfZHJ2ZGF0YShkZXYsIHY0bDJfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHY0bDJfZGV2aWNlX3JlZ2lzdGVyKTsKIAordm9pZCB2NGwyX2RldmljZV9kaXNjb25uZWN0KHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCit7CisJaWYgKHY0bDJfZGV2LT5kZXYpIHsKKwkJZGV2X3NldF9kcnZkYXRhKHY0bDJfZGV2LT5kZXYsIE5VTEwpOworCQl2NGwyX2Rldi0+ZGV2ID0gTlVMTDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2RldmljZV9kaXNjb25uZWN0KTsKKwogdm9pZCB2NGwyX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCiB7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgKm5leHQ7CiAKLQlpZiAodjRsMl9kZXYgPT0gTlVMTCB8fCB2NGwyX2Rldi0+ZGV2ID09IE5VTEwpCisJaWYgKHY0bDJfZGV2ID09IE5VTEwpCiAJCXJldHVybjsKLQlkZXZfc2V0X2RydmRhdGEodjRsMl9kZXYtPmRldiwgTlVMTCk7Ci0JLyogdW5yZWdpc3RlciBzdWJkZXZzICovCisJdjRsMl9kZXZpY2VfZGlzY29ubmVjdCh2NGwyX2Rldik7CisKKwkvKiBVbnJlZ2lzdGVyIHN1YmRldnMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2QsIG5leHQsICZ2NGwyX2Rldi0+c3ViZGV2cywgbGlzdCkKIAkJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOwotCi0JdjRsMl9kZXYtPmRldiA9IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2RldmljZV91bnJlZ2lzdGVyKTsKIAotaW50IHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldihzdHJ1Y3QgdjRsMl9kZXZpY2UgKmRldiwgc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK2ludCB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiwKKwkJCQkJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7CiAJLyogQ2hlY2sgZm9yIHZhbGlkIGlucHV0ICovCi0JaWYgKGRldiA9PSBOVUxMIHx8IHNkID09IE5VTEwgfHwgIXNkLT5uYW1lWzBdKQorCWlmICh2NGwyX2RldiA9PSBOVUxMIHx8IHNkID09IE5VTEwgfHwgIXNkLT5uYW1lWzBdKQogCQlyZXR1cm4gLUVJTlZBTDsKIAkvKiBXYXJuIGlmIHdlIGFwcGFyZW50bHkgcmUtcmVnaXN0ZXIgYSBzdWJkZXYgKi8KLQlXQVJOX09OKHNkLT5kZXYgIT0gTlVMTCk7CisJV0FSTl9PTihzZC0+djRsMl9kZXYgIT0gTlVMTCk7CiAJaWYgKCF0cnlfbW9kdWxlX2dldChzZC0+b3duZXIpKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlzZC0+ZGV2ID0gZGV2OwotCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZzZC0+bGlzdCwgJmRldi0+c3ViZGV2cyk7Ci0Jc3Bpbl91bmxvY2soJmRldi0+bG9jayk7CisJc2QtPnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJc3Bpbl9sb2NrKCZ2NGwyX2Rldi0+bG9jayk7CisJbGlzdF9hZGRfdGFpbCgmc2QtPmxpc3QsICZ2NGwyX2Rldi0+c3ViZGV2cyk7CisJc3Bpbl91bmxvY2soJnY0bDJfZGV2LT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldik7CkBAIC03NSwxMiArOTMsMTIgQEAKIHZvaWQgdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKIAkvKiByZXR1cm4gaWYgaXQgaXNuJ3QgcmVnaXN0ZXJlZCAqLwotCWlmIChzZCA9PSBOVUxMIHx8IHNkLT5kZXYgPT0gTlVMTCkKKwlpZiAoc2QgPT0gTlVMTCB8fCBzZC0+djRsMl9kZXYgPT0gTlVMTCkKIAkJcmV0dXJuOwotCXNwaW5fbG9jaygmc2QtPmRldi0+bG9jayk7CisJc3Bpbl9sb2NrKCZzZC0+djRsMl9kZXYtPmxvY2spOwogCWxpc3RfZGVsKCZzZC0+bGlzdCk7Ci0Jc3Bpbl91bmxvY2soJnNkLT5kZXYtPmxvY2spOwotCXNkLT5kZXYgPSBOVUxMOworCXNwaW5fdW5sb2NrKCZzZC0+djRsMl9kZXYtPmxvY2spOworCXNkLT52NGwyX2RldiA9IE5VTEw7CiAJbW9kdWxlX3B1dChzZC0+b3duZXIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYwppbmRleCA1MmQ2ODdiLi5mNDFjNmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjZGVmaW5lIF9fT0xEX1ZJRElPQ18gLyogVG8gYWxsb3cgZml4aW5nIG9sZCBjYWxscyAqLworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAKICNpZmRlZiBDT05GSUdfVklERU9fVjRMMQpAQCAtMjQsNyArMjUsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogCiAjZGVmaW5lIGRiZ2FyZyhjbWQsIGZtdCwgYXJnLi4uKSBcCiAJCWRvIHsJCQkJCQkJXApAQCAtMTAwLDI1ICsxMDEsMjcgQEAKIH0KIEVYUE9SVF9TWU1CT0wodjRsMl9ub3JtX3RvX25hbWUpOwogCisvKiBSZXR1cm5zIGZyYW1lIHBlcmlvZCBmb3IgdGhlIGdpdmVuIHN0YW5kYXJkICovCit2b2lkIHY0bDJfdmlkZW9fc3RkX2ZyYW1lX3BlcmlvZChpbnQgaWQsIHN0cnVjdCB2NGwyX2ZyYWN0ICpmcmFtZXBlcmlvZCkKK3sKKwlpZiAoaWQgJiBWNEwyX1NURF81MjVfNjApIHsKKwkJZnJhbWVwZXJpb2QtPm51bWVyYXRvciA9IDEwMDE7CisJCWZyYW1lcGVyaW9kLT5kZW5vbWluYXRvciA9IDMwMDAwOworCX0gZWxzZSB7CisJCWZyYW1lcGVyaW9kLT5udW1lcmF0b3IgPSAxOworCQlmcmFtZXBlcmlvZC0+ZGVub21pbmF0b3IgPSAyNTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfdmlkZW9fc3RkX2ZyYW1lX3BlcmlvZCk7CisKIC8qIEZpbGwgaW4gdGhlIGZpZWxkcyBvZiBhIHY0bDJfc3RhbmRhcmQgc3RydWN0dXJlIGFjY29yZGluZyB0byB0aGUKICAgICdpZCcgYW5kICd0cmFuc21pc3Npb24nIHBhcmFtZXRlcnMuICBSZXR1cm5zIG5lZ2F0aXZlIG9uIGVycm9yLiAgKi8KIGludCB2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3Qoc3RydWN0IHY0bDJfc3RhbmRhcmQgKnZzLAogCQkJICAgICBpbnQgaWQsIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0JdTMyIGluZGV4ID0gdnMtPmluZGV4OwotCi0JbWVtc2V0KHZzLCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfc3RhbmRhcmQpKTsKLQl2cy0+aW5kZXggPSBpbmRleDsKLQl2cy0+aWQgICAgPSBpZDsKLQlpZiAoaWQgJiBWNEwyX1NURF81MjVfNjApIHsKLQkJdnMtPmZyYW1lcGVyaW9kLm51bWVyYXRvciA9IDEwMDE7Ci0JCXZzLT5mcmFtZXBlcmlvZC5kZW5vbWluYXRvciA9IDMwMDAwOwotCQl2cy0+ZnJhbWVsaW5lcyA9IDUyNTsKLQl9IGVsc2UgewotCQl2cy0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTsKLQkJdnMtPmZyYW1lcGVyaW9kLmRlbm9taW5hdG9yID0gMjU7Ci0JCXZzLT5mcmFtZWxpbmVzID0gNjI1OwotCX0KKwl2cy0+aWQgPSBpZDsKKwl2NGwyX3ZpZGVvX3N0ZF9mcmFtZV9wZXJpb2QoaWQsICZ2cy0+ZnJhbWVwZXJpb2QpOworCXZzLT5mcmFtZWxpbmVzID0gKGlkICYgVjRMMl9TVERfNTI1XzYwKSA/IDUyNSA6IDYyNTsKIAlzdHJsY3B5KHZzLT5uYW1lLCBuYW1lLCBzaXplb2YodnMtPm5hbWUpKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI3MywxOSArMjc2LDYgQEAKICNkZWZpbmUgVjRMMl9JT0NUTFMgQVJSQVlfU0laRSh2NGwyX2lvY3RscykKIAogc3RhdGljIGNvbnN0IGNoYXIgKnY0bDJfaW50X2lvY3Rsc1tdID0gewotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCVtfSU9DX05SKERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUyldICAgID0gIkRFQ09ERVJfR0VUX0NBUEFCSUxJVElFUyIsCi0JW19JT0NfTlIoREVDT0RFUl9HRVRfU1RBVFVTKV0gICAgICAgICAgPSAiREVDT0RFUl9HRVRfU1RBVFVTIiwKLQlbX0lPQ19OUihERUNPREVSX1NFVF9OT1JNKV0gICAgICAgICAgICA9ICJERUNPREVSX1NFVF9OT1JNIiwKLQlbX0lPQ19OUihERUNPREVSX1NFVF9JTlBVVCldICAgICAgICAgICA9ICJERUNPREVSX1NFVF9JTlBVVCIsCi0JW19JT0NfTlIoREVDT0RFUl9TRVRfT1VUUFVUKV0gICAgICAgICAgPSAiREVDT0RFUl9TRVRfT1VUUFVUIiwKLQlbX0lPQ19OUihERUNPREVSX0VOQUJMRV9PVVRQVVQpXSAgICAgICA9ICJERUNPREVSX0VOQUJMRV9PVVRQVVQiLAotCVtfSU9DX05SKERFQ09ERVJfU0VUX1BJQ1RVUkUpXSAgICAgICAgID0gIkRFQ09ERVJfU0VUX1BJQ1RVUkUiLAotCVtfSU9DX05SKERFQ09ERVJfU0VUX0dQSU8pXSAgICAgICAgICAgID0gIkRFQ09ERVJfU0VUX0dQSU8iLAotCVtfSU9DX05SKERFQ09ERVJfSU5JVCldICAgICAgICAgICAgICAgID0gIkRFQ09ERVJfSU5JVCIsCi0JW19JT0NfTlIoREVDT0RFUl9TRVRfVkJJX0JZUEFTUyldICAgICAgPSAiREVDT0RFUl9TRVRfVkJJX0JZUEFTUyIsCi0JW19JT0NfTlIoREVDT0RFUl9EVU1QKV0gICAgICAgICAgICAgICAgPSAiREVDT0RFUl9EVU1QIiwKLSNlbmRpZgogCVtfSU9DX05SKEFVRENfU0VUX1JBRElPKV0gICAgICAgICAgICAgID0gIkFVRENfU0VUX1JBRElPIiwKIAogCVtfSU9DX05SKFRVTkVSX1NFVF9UWVBFX0FERFIpXSAgICAgICAgID0gIlRVTkVSX1NFVF9UWVBFX0FERFIiLApAQCAtNjU0LDggKzY0NCw2IEBACiAJaWYgKGNtZCA9PSBWSURJT0NHTUJVRikgewogCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqcCA9IGFyZzsKIAotCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0KIAkJaWYgKCFvcHMtPnZpZGlvY2dtYnVmKQogCQkJcmV0dXJuIHJldDsKIAkJcmV0ID0gb3BzLT52aWRpb2NnbWJ1ZihmaWxlLCBmaCwgcCk7CkBAIC02ODIsNyArNjcwLDYgQEAKIAljYXNlIFZJRElPQ19RVUVSWUNBUDoKIAl7CiAJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCA9IChzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICopYXJnOwotCQltZW1zZXQoY2FwLCAwLCBzaXplb2YoKmNhcCkpOwogCiAJCWlmICghb3BzLT52aWRpb2NfcXVlcnljYXApCiAJCQlicmVhazsKQEAgLTcyNSwxNiArNzEyLDggQEAKIAljYXNlIFZJRElPQ19FTlVNX0ZNVDoKIAl7CiAJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYgPSBhcmc7Ci0JCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlOwotCQl1bnNpZ25lZCBpbnQgaW5kZXg7CiAKLQkJaW5kZXggPSBmLT5pbmRleDsKLQkJdHlwZSAgPSBmLT50eXBlOwotCQltZW1zZXQoZiwgMCwgc2l6ZW9mKCpmKSk7Ci0JCWYtPmluZGV4ID0gaW5kZXg7Ci0JCWYtPnR5cGUgID0gdHlwZTsKLQotCQlzd2l0Y2ggKHR5cGUpIHsKKwkJc3dpdGNoIChmLT50eXBlKSB7CiAJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgogCQkJaWYgKG9wcy0+dmlkaW9jX2VudW1fZm10X3ZpZF9jYXApCiAJCQkJcmV0ID0gb3BzLT52aWRpb2NfZW51bV9mbXRfdmlkX2NhcChmaWxlLCBmaCwgZik7CkBAIC03NzEsOCArNzUwLDYgQEAKIAl7CiAJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IChzdHJ1Y3QgdjRsMl9mb3JtYXQgKilhcmc7CiAKLQkJbWVtc2V0KGYtPmZtdC5yYXdfZGF0YSwgMCwgc2l6ZW9mKGYtPmZtdC5yYXdfZGF0YSkpOwotCiAJCS8qIEZJWE1FOiBTaG91bGQgYmUgb25lIGR1bXAgcGVyIHR5cGUgKi8KIAkJZGJnYXJnKGNtZCwgInR5cGU9JXNcbiIsIHBydF9uYW1lcyhmLT50eXBlLCB2NGwyX3R5cGVfbmFtZXMpKTsKIApAQCAtMTA4OCw3ICsxMDY1LDYgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCXY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChwLCBjdXJyX2lkLCBkZXNjcik7Ci0JCXAtPmluZGV4ID0gaW5kZXg7CiAKIAkJZGJnYXJnKGNtZCwgImluZGV4PSVkLCBpZD0weCVMeCwgbmFtZT0lcywgZnBzPSVkLyVkLCAiCiAJCQkJImZyYW1lbGluZXM9JWRcbiIsIHAtPmluZGV4LApAQCAtMTE1MywxMiArMTEyOSw5IEBACiAJY2FzZSBWSURJT0NfRU5VTUlOUFVUOgogCXsKIAkJc3RydWN0IHY0bDJfaW5wdXQgKnAgPSBhcmc7Ci0JCWludCBpID0gcC0+aW5kZXg7CiAKIAkJaWYgKCFvcHMtPnZpZGlvY19lbnVtX2lucHV0KQogCQkJYnJlYWs7Ci0JCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKLQkJcC0+aW5kZXggPSBpOwogCiAJCXJldCA9IG9wcy0+dmlkaW9jX2VudW1faW5wdXQoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKQEAgLTExOTcsMTIgKzExNzAsOSBAQAogCWNhc2UgVklESU9DX0VOVU1PVVRQVVQ6CiAJewogCQlzdHJ1Y3QgdjRsMl9vdXRwdXQgKnAgPSBhcmc7Ci0JCWludCBpID0gcC0+aW5kZXg7CiAKIAkJaWYgKCFvcHMtPnZpZGlvY19lbnVtX291dHB1dCkKIAkJCWJyZWFrOwotCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0JCXAtPmluZGV4ID0gaTsKIAogCQlyZXQgPSBvcHMtPnZpZGlvY19lbnVtX291dHB1dChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQpAQCAtMTM3OCwxMyArMTM0OCwxMCBAQAogCWNhc2UgVklESU9DX0dfQVVESU86CiAJewogCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqcCA9IGFyZzsKLQkJX191MzIgaW5kZXggPSBwLT5pbmRleDsKIAogCQlpZiAoIW9wcy0+dmlkaW9jX2dfYXVkaW8pCiAJCQlicmVhazsKIAotCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0JCXAtPmluZGV4ID0gaW5kZXg7CiAJCXJldCA9IG9wcy0+dmlkaW9jX2dfYXVkaW8oZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKIAkJCWRiZ2FyZyhjbWQsICJpbmRleD0lZCwgbmFtZT0lcywgY2FwYWJpbGl0eT0weCV4LCAiCkBAIC0xNDI2LDcgKzEzOTMsNyBAQAogCiAJCWlmICghb3BzLT52aWRpb2NfZ19hdWRvdXQpCiAJCQlicmVhazsKLQkJZGJnYXJnKGNtZCwgIkVudW0gZm9yIGluZGV4PSVkXG4iLCBwLT5pbmRleCk7CisKIAkJcmV0ID0gb3BzLT52aWRpb2NfZ19hdWRvdXQoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKIAkJCWRiZ2FyZzIoImluZGV4PSVkLCBuYW1lPSVzLCBjYXBhYmlsaXR5PSVkLCAiCkBAIC0xNDc5LDE1ICsxNDQ2LDEwIEBACiAJY2FzZSBWSURJT0NfR19DUk9QOgogCXsKIAkJc3RydWN0IHY0bDJfY3JvcCAqcCA9IGFyZzsKLQkJX191MzIgdHlwZTsKIAogCQlpZiAoIW9wcy0+dmlkaW9jX2dfY3JvcCkKIAkJCWJyZWFrOwogCi0JCXR5cGUgPSBwLT50eXBlOwotCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0JCXAtPnR5cGUgPSB0eXBlOwotCiAJCWRiZ2FyZyhjbWQsICJ0eXBlPSVzXG4iLCBwcnRfbmFtZXMocC0+dHlwZSwgdjRsMl90eXBlX25hbWVzKSk7CiAJCXJldCA9IG9wcy0+dmlkaW9jX2dfY3JvcChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQpAQCAtMTUwOCwxNiArMTQ3MCwxMSBAQAogCWNhc2UgVklESU9DX0NST1BDQVA6CiAJewogCQlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpwID0gYXJnOwotCQlfX3UzMiB0eXBlOwogCiAJCS8qRklYTUU6IFNob3VsZCBhbHNvIHNob3cgdjRsMl9mcmFjdCBwaXhlbGFzcGVjdCAqLwogCQlpZiAoIW9wcy0+dmlkaW9jX2Nyb3BjYXApCiAJCQlicmVhazsKIAotCQl0eXBlID0gcC0+dHlwZTsKLQkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwotCQlwLT50eXBlID0gdHlwZTsKLQogCQlkYmdhcmcoY21kLCAidHlwZT0lc1xuIiwgcHJ0X25hbWVzKHAtPnR5cGUsIHY0bDJfdHlwZV9uYW1lcykpOwogCQlyZXQgPSBvcHMtPnZpZGlvY19jcm9wY2FwKGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpIHsKQEAgLTE1MzMsOCArMTQ5MCw2IEBACiAJCWlmICghb3BzLT52aWRpb2NfZ19qcGVnY29tcCkKIAkJCWJyZWFrOwogCi0JCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKLQogCQlyZXQgPSBvcHMtPnZpZGlvY19nX2pwZWdjb21wKGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCiAJCQlkYmdhcmcoY21kLCAicXVhbGl0eT0lZCwgQVBQbj0lZCwgIgpAQCAtMTU3NSw3ICsxNTMwLDYgQEAKIAogCQlpZiAoIW9wcy0+dmlkaW9jX2VuY29kZXJfY21kKQogCQkJYnJlYWs7Ci0JCW1lbXNldCgmcC0+cmF3LCAwLCBzaXplb2YocC0+cmF3KSk7CiAJCXJldCA9IG9wcy0+dmlkaW9jX2VuY29kZXJfY21kKGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCiAJCQlkYmdhcmcoY21kLCAiY21kPSVkLCBmbGFncz0leFxuIiwgcC0+Y21kLCBwLT5mbGFncyk7CkBAIC0xNTg3LDcgKzE1NDEsNiBAQAogCiAJCWlmICghb3BzLT52aWRpb2NfdHJ5X2VuY29kZXJfY21kKQogCQkJYnJlYWs7Ci0JCW1lbXNldCgmcC0+cmF3LCAwLCBzaXplb2YocC0+cmF3KSk7CiAJCXJldCA9IG9wcy0+dmlkaW9jX3RyeV9lbmNvZGVyX2NtZChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQogCQkJZGJnYXJnKGNtZCwgImNtZD0lZCwgZmxhZ3M9JXhcbiIsIHAtPmNtZCwgcC0+ZmxhZ3MpOwpAQCAtMTU5NiwyMyArMTU0OSwxOCBAQAogCWNhc2UgVklESU9DX0dfUEFSTToKIAl7CiAJCXN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnAgPSBhcmc7Ci0JCV9fdTMyIHR5cGUgPSBwLT50eXBlOwotCi0JCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKLQkJcC0+dHlwZSA9IHR5cGU7CiAKIAkJaWYgKG9wcy0+dmlkaW9jX2dfcGFybSkgeworCQkJcmV0ID0gY2hlY2tfZm10KG9wcywgcC0+dHlwZSk7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOwogCQkJcmV0ID0gb3BzLT52aWRpb2NfZ19wYXJtKGZpbGUsIGZoLCBwKTsKIAkJfSBlbHNlIHsKLQkJCXN0cnVjdCB2NGwyX3N0YW5kYXJkIHM7Ci0KIAkJCWlmIChwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkJdjRsMl92aWRlb19zdGRfY29uc3RydWN0KCZzLCB2ZmQtPmN1cnJlbnRfbm9ybSwKLQkJCQkJCSB2NGwyX25vcm1fdG9fbmFtZSh2ZmQtPmN1cnJlbnRfbm9ybSkpOwotCi0JCQlwLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lID0gcy5mcmFtZXBlcmlvZDsKKwkJCXY0bDJfdmlkZW9fc3RkX2ZyYW1lX3BlcmlvZCh2ZmQtPmN1cnJlbnRfbm9ybSwKKwkJCQkJCSAgICAmcC0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZSk7CiAJCQlyZXQgPSAwOwogCQl9CiAKQEAgLTE2MjUsNiArMTU3MywxMCBAQAogCiAJCWlmICghb3BzLT52aWRpb2Nfc19wYXJtKQogCQkJYnJlYWs7CisJCXJldCA9IGNoZWNrX2ZtdChvcHMsIHAtPnR5cGUpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisKIAkJZGJnYXJnKGNtZCwgInR5cGU9JWRcbiIsIHAtPnR5cGUpOwogCQlyZXQgPSBvcHMtPnZpZGlvY19zX3Bhcm0oZmlsZSwgZmgsIHApOwogCQlicmVhazsKQEAgLTE2MzIsMTQgKzE1ODQsMTAgQEAKIAljYXNlIFZJRElPQ19HX1RVTkVSOgogCXsKIAkJc3RydWN0IHY0bDJfdHVuZXIgKnAgPSBhcmc7Ci0JCV9fdTMyIGluZGV4ID0gcC0+aW5kZXg7CiAKIAkJaWYgKCFvcHMtPnZpZGlvY19nX3R1bmVyKQogCQkJYnJlYWs7CiAKLQkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwotCQlwLT5pbmRleCA9IGluZGV4OwotCiAJCXJldCA9IG9wcy0+dmlkaW9jX2dfdHVuZXIoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKIAkJCWRiZ2FyZyhjbWQsICJpbmRleD0lZCwgbmFtZT0lcywgdHlwZT0lZCwgIgpAQCAtMTY3Niw4ICsxNjI0LDYgQEAKIAkJaWYgKCFvcHMtPnZpZGlvY19nX2ZyZXF1ZW5jeSkKIAkJCWJyZWFrOwogCi0JCW1lbXNldChwLT5yZXNlcnZlZCwgMCwgc2l6ZW9mKHAtPnJlc2VydmVkKSk7Ci0KIAkJcmV0ID0gb3BzLT52aWRpb2NfZ19mcmVxdWVuY3koZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKIAkJCWRiZ2FyZyhjbWQsICJ0dW5lcj0lZCwgdHlwZT0lZCwgZnJlcXVlbmN5PSVkXG4iLApAQCAtMTY5OCwxMiArMTY0NCwxMyBAQAogCWNhc2UgVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVA6CiAJewogCQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCAqcCA9IGFyZzsKLQkJX191MzIgdHlwZSA9IHAtPnR5cGU7CiAKIAkJaWYgKCFvcHMtPnZpZGlvY19nX3NsaWNlZF92YmlfY2FwKQogCQkJYnJlYWs7Ci0JCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKLQkJcC0+dHlwZSA9IHR5cGU7CisKKwkJLyogQ2xlYXIgdXAgdG8gdHlwZSwgZXZlcnl0aGluZyBhZnRlciB0eXBlIGlzIHplcm9kIGFscmVhZHkgKi8KKwkJbWVtc2V0KHAsIDAsIG9mZnNldG9mKHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwLCB0eXBlKSk7CisKIAkJZGJnYXJnKGNtZCwgInR5cGU9JXNcbiIsIHBydF9uYW1lcyhwLT50eXBlLCB2NGwyX3R5cGVfbmFtZXMpKTsKIAkJcmV0ID0gb3BzLT52aWRpb2NfZ19zbGljZWRfdmJpX2NhcChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQpAQCAtMTc0NSwxNiArMTY5MiwxMyBAQAogCiAJCWlmICghb3BzLT52aWRpb2NfZ19jaGlwX2lkZW50KQogCQkJYnJlYWs7CisJCXAtPmlkZW50ID0gVjRMMl9JREVOVF9OT05FOworCQlwLT5yZXZpc2lvbiA9IDA7CiAJCXJldCA9IG9wcy0+dmlkaW9jX2dfY2hpcF9pZGVudChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQogCQkJZGJnYXJnKGNtZCwgImNoaXBfaWRlbnQ9JXUsIHJldmlzaW9uPTB4JXhcbiIsIHAtPmlkZW50LCBwLT5yZXZpc2lvbik7CiAJCWJyZWFrOwogCX0KLQljYXNlIFZJRElPQ19HX0NISVBfSURFTlRfT0xEOgotCQlwcmludGsoS0VSTl9FUlIgIlZJRElPQ19HX0NISVBfSURFTlQgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgd2lsbCBkaXNhcHBlYXIgaW4gMi42LjMwLlxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiSXQgaXMgYSBkZWJ1Z2dpbmcgaW9jdGwgYW5kIG11c3Qgbm90IGJlIHVzZWQgaW4gYXBwbGljYXRpb25zIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCiAJY2FzZSBWSURJT0NfU19IV19GUkVRX1NFRUs6CiAJewogCQlzdHJ1Y3QgdjRsMl9od19mcmVxX3NlZWsgKnAgPSBhcmc7CkBAIC0xNzc0LDggKzE3MTgsNiBAQAogCQlpZiAoIW9wcy0+dmlkaW9jX2VudW1fZnJhbWVzaXplcykKIAkJCWJyZWFrOwogCi0JCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKLQogCQlyZXQgPSBvcHMtPnZpZGlvY19lbnVtX2ZyYW1lc2l6ZXMoZmlsZSwgZmgsIHApOwogCQlkYmdhcmcoY21kLAogCQkJImluZGV4PSVkLCBwaXhlbGZvcm1hdD0lZCwgdHlwZT0lZCAiLApAQCAtMTgwNyw4ICsxNzQ5LDYgQEAKIAkJaWYgKCFvcHMtPnZpZGlvY19lbnVtX2ZyYW1laW50ZXJ2YWxzKQogCQkJYnJlYWs7CiAKLQkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwotCiAJCXJldCA9IG9wcy0+dmlkaW9jX2VudW1fZnJhbWVpbnRlcnZhbHMoZmlsZSwgZmgsIHApOwogCQlkYmdhcmcoY21kLAogCQkJImluZGV4PSVkLCBwaXhlbGZvcm1hdD0lZCwgd2lkdGg9JWQsIGhlaWdodD0lZCwgdHlwZT0lZCAiLApAQCAtMTg1Nyw2ICsxNzk3LDQ1IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyogSW4gc29tZSBjYXNlcywgb25seSBhIGZldyBmaWVsZHMgYXJlIHVzZWQgYXMgaW5wdXQsIGkuZS4gd2hlbiB0aGUgYXBwIHNldHMKKyAqICJpbmRleCIgYW5kIHRoZW4gdGhlIGRyaXZlciBmaWxscyBpbiB0aGUgcmVzdCBvZiB0aGUgc3RydWN0dXJlIGZvciB0aGUgdGhpbmcKKyAqIHdpdGggdGhhdCBpbmRleC4gIFdlIG9ubHkgbmVlZCB0byBjb3B5IHVwIHRoZSBmaXJzdCBub24taW5wdXQgZmllbGQuICAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgY21kX2lucHV0X3NpemUodW5zaWduZWQgaW50IGNtZCkKK3sKKwkvKiBTaXplIG9mIHN0cnVjdHVyZSB1cCB0byBhbmQgaW5jbHVkaW5nICdmaWVsZCcgKi8KKyNkZWZpbmUgQ01ESU5TSVpFKGNtZCwgdHlwZSwgZmllbGQpIAkJCQlcCisJY2FzZSBWSURJT0NfIyNjbWQ6IAkJCQkJXAorCQlyZXR1cm4gb2Zmc2V0b2Yoc3RydWN0IHY0bDJfIyN0eXBlLCBmaWVsZCkgKyAJXAorCQkJc2l6ZW9mKCgoc3RydWN0IHY0bDJfIyN0eXBlICopMCktPmZpZWxkKTsKKworCXN3aXRjaCAoY21kKSB7CisJCUNNRElOU0laRShFTlVNX0ZNVCwJCWZtdGRlc2MsCXR5cGUpOworCQlDTURJTlNJWkUoR19GTVQsCQlmb3JtYXQsCQl0eXBlKTsKKwkJQ01ESU5TSVpFKFFVRVJZQlVGLAkJYnVmZmVyLAkJdHlwZSk7CisJCUNNRElOU0laRShHX1BBUk0sCQlzdHJlYW1wYXJtLAl0eXBlKTsKKwkJQ01ESU5TSVpFKEVOVU1TVEQsCQlzdGFuZGFyZCwJaW5kZXgpOworCQlDTURJTlNJWkUoRU5VTUlOUFVULAkJaW5wdXQsCQlpbmRleCk7CisJCUNNRElOU0laRShHX0NUUkwsCQljb250cm9sLAlpZCk7CisJCUNNRElOU0laRShHX1RVTkVSLAkJdHVuZXIsCQlpbmRleCk7CisJCUNNRElOU0laRShRVUVSWUNUUkwsCQlxdWVyeWN0cmwsCWlkKTsKKwkJQ01ESU5TSVpFKFFVRVJZTUVOVSwJCXF1ZXJ5bWVudSwJaW5kZXgpOworCQlDTURJTlNJWkUoRU5VTU9VVFBVVCwJCW91dHB1dCwJCWluZGV4KTsKKwkJQ01ESU5TSVpFKEdfTU9EVUxBVE9SLAkJbW9kdWxhdG9yLAlpbmRleCk7CisJCUNNRElOU0laRShHX0ZSRVFVRU5DWSwJCWZyZXF1ZW5jeSwJdHVuZXIpOworCQlDTURJTlNJWkUoQ1JPUENBUCwJCWNyb3BjYXAsCXR5cGUpOworCQlDTURJTlNJWkUoR19DUk9QLAkJY3JvcCwJCXR5cGUpOworCQlDTURJTlNJWkUoRU5VTUFVRElPLAkJYXVkaW8sIAkJaW5kZXgpOworCQlDTURJTlNJWkUoRU5VTUFVRE9VVCwJCWF1ZGlvb3V0LCAJaW5kZXgpOworCQlDTURJTlNJWkUoRU5DT0RFUl9DTUQsCQllbmNvZGVyX2NtZCwJZmxhZ3MpOworCQlDTURJTlNJWkUoVFJZX0VOQ09ERVJfQ01ELAllbmNvZGVyX2NtZCwJZmxhZ3MpOworCQlDTURJTlNJWkUoR19TTElDRURfVkJJX0NBUCwJc2xpY2VkX3ZiaV9jYXAsCXR5cGUpOworCQlDTURJTlNJWkUoRU5VTV9GUkFNRVNJWkVTLAlmcm1zaXplZW51bSwJcGl4ZWxfZm9ybWF0KTsKKwkJQ01ESU5TSVpFKEVOVU1fRlJBTUVJTlRFUlZBTFMsCWZybWl2YWxlbnVtLAloZWlnaHQpOworCWRlZmF1bHQ6CisJCXJldHVybiBfSU9DX1NJWkUoY21kKTsKKwl9Cit9CisKIGxvbmcgdmlkZW9faW9jdGwyKHN0cnVjdCBmaWxlICpmaWxlLAogCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTE4NzUsMTMgKzE4NTQsNyBAQAogCQkgICAgICAgY21kID09IFZJRElPQ19UUllfRVhUX0NUUkxTKTsKIAogCS8qICBDb3B5IGFyZ3VtZW50cyBpbnRvIHRlbXAga2VybmVsIGJ1ZmZlciAgKi8KLQlzd2l0Y2ggKF9JT0NfRElSKGNtZCkpIHsKLQljYXNlIF9JT0NfTk9ORToKLQkJcGFyZyA9IE5VTEw7Ci0JCWJyZWFrOwotCWNhc2UgX0lPQ19SRUFEOgotCWNhc2UgX0lPQ19XUklURToKLQljYXNlIChfSU9DX1dSSVRFIHwgX0lPQ19SRUFEKToKKwlpZiAoX0lPQ19ESVIoY21kKSAhPSBfSU9DX05PTkUpIHsKIAkJaWYgKF9JT0NfU0laRShjbWQpIDw9IHNpemVvZihzYnVmKSkgewogCQkJcGFyZyA9IHNidWY7CiAJCX0gZWxzZSB7CkBAIC0xODkzLDEwICsxODY2LDE5IEBACiAJCX0KIAogCQllcnIgPSAtRUZBVUxUOwotCQlpZiAoX0lPQ19ESVIoY21kKSAmIF9JT0NfV1JJVEUpCi0JCQlpZiAoY29weV9mcm9tX3VzZXIocGFyZywgKHZvaWQgX191c2VyICopYXJnLCBfSU9DX1NJWkUoY21kKSkpCisJCWlmIChfSU9DX0RJUihjbWQpICYgX0lPQ19XUklURSkgeworCQkJdW5zaWduZWQgbG9uZyBuID0gY21kX2lucHV0X3NpemUoY21kKTsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKHBhcmcsICh2b2lkIF9fdXNlciAqKWFyZywgbikpCiAJCQkJZ290byBvdXQ7Ci0JCWJyZWFrOworCisJCQkvKiB6ZXJvIG91dCBhbnl0aGluZyB3ZSBkb24ndCBjb3B5IGZyb20gdXNlcnNwYWNlICovCisJCQlpZiAobiA8IF9JT0NfU0laRShjbWQpKQorCQkJCW1lbXNldCgodTggKilwYXJnICsgbiwgMCwgX0lPQ19TSVpFKGNtZCkgLSBuKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHJlYWQtb25seSBpb2N0bCAqLworCQkJbWVtc2V0KHBhcmcsIDAsIF9JT0NfU0laRShjbWQpKTsKKwkJfQogCX0KIAogCWlmIChpc19leHRfY3RybCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLXN1YmRldi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLXN1YmRldi5jCmluZGV4IDIxMjA4ODAuLmRjODgxNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1zdWJkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItc3ViZGV2LmMKQEAgLTMzLDYgKzMzLDEyIEBACiAJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBnX2N0cmwsIGFyZyk7CiAJY2FzZSBWSURJT0NfU19DVFJMOgogCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgc19jdHJsLCBhcmcpOworCWNhc2UgVklESU9DX0dfRVhUX0NUUkxTOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgZ19leHRfY3RybHMsIGFyZyk7CisJY2FzZSBWSURJT0NfU19FWFRfQ1RSTFM6CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBzX2V4dF9jdHJscywgYXJnKTsKKwljYXNlIFZJRElPQ19UUllfRVhUX0NUUkxTOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgdHJ5X2V4dF9jdHJscywgYXJnKTsKIAljYXNlIFZJRElPQ19RVUVSWU1FTlU6CiAJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBxdWVyeW1lbnUsIGFyZyk7CiAJY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKQEAgLTkyLDE2ICs5OCwyOCBAQAogCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGdfdmJpX2RhdGEsIGFyZyk7CiAJY2FzZSBWSURJT0NfR19TTElDRURfVkJJX0NBUDoKIAkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX3NsaWNlZF92YmlfY2FwLCBhcmcpOworCWNhc2UgVklESU9DX0VOVU1fRk1UOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGVudW1fZm10LCBhcmcpOworCWNhc2UgVklESU9DX1RSWV9GTVQ6CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgdHJ5X2ZtdCwgYXJnKTsKIAljYXNlIFZJRElPQ19TX0ZNVDoKIAkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2ZtdCwgYXJnKTsKIAljYXNlIFZJRElPQ19HX0ZNVDoKIAkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX2ZtdCwgYXJnKTsKIAljYXNlIFZJRElPQ19JTlRfU19TVERfT1VUUFVUOgogCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfc3RkX291dHB1dCwgKih2NGwyX3N0ZF9pZCAqKWFyZyk7CisJY2FzZSBWSURJT0NfUVVFUllTVEQ6CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgcXVlcnlzdGQsIGFyZyk7CisJY2FzZSBWSURJT0NfSU5UX0dfSU5QVVRfU1RBVFVTOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGdfaW5wdXRfc3RhdHVzLCBhcmcpOwogCWNhc2UgVklESU9DX1NUUkVBTU9OOgogCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfc3RyZWFtLCAxKTsKIAljYXNlIFZJRElPQ19TVFJFQU1PRkY6CiAJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19zdHJlYW0sIDApOworCWNhc2UgVklESU9DX1NfUEFSTToKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX3Bhcm0sIGFyZyk7CisJY2FzZSBWSURJT0NfR19QQVJNOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGdfcGFybSwgYXJnKTsKIAogCWRlZmF1bHQ6CiAJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBpb2N0bCwgY21kLCBhcmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYwppbmRleCAzMTk0NGIxLi42MTA5ZmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYwpAQCAtNDAwLDcgKzQwMCw3IEBACiAJICAgU28sIGl0IHNob3VsZCBmcmVlIG1lbW9yeSBvbmx5IGlmIHRoZSBtZW1vcnkgd2VyZSBhbGxvY2F0ZWQgZm9yCiAJICAgcmVhZCgpIG9wZXJhdGlvbi4KIAkgKi8KLQlpZiAoKGJ1Zi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX1VTRVJQVFIpIHx8ICFidWYtPmJhZGRyKQorCWlmICgoYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfVVNFUlBUUikgfHwgYnVmLT5iYWRkcikKIAkJcmV0dXJuOwogCiAJaWYgKCFtZW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jCmluZGV4IGJlNjVhMmYuLjMwYWUzMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jCkBAIC00MjUsNyArNDI1LDcgQEAKIAkgICBTbywgaXQgc2hvdWxkIGZyZWUgbWVtb3J5IG9ubHkgaWYgdGhlIG1lbW9yeSB3ZXJlIGFsbG9jYXRlZCBmb3IKIAkgICByZWFkKCkgb3BlcmF0aW9uLgogCSAqLwotCWlmICgoYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfVVNFUlBUUikgfHwgKGJ1Zi0+YmFkZHIgPT0gMCkpCisJaWYgKChidWYtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9VU0VSUFRSKSB8fCBidWYtPmJhZGRyKQogCQlyZXR1cm47CiAKIAlpZiAoIW1lbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKaW5kZXggODhiZjg0NS4uOGRhNGRkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKQEAgLTgsNiArOCwxMiBAQAogICoKICAqIEJhc2VkIG9uIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgZm9yIDIuNCBrZXJuZWxzIGJ5OgogICogQ29weXJpZ2h0IChDKSAyMDAzIExhZGlzbGF2IE1pY2hsIDxsYWRpc0BsaW51eC1taXBzLm9yZz4KKyAqCisgKiB2NGwyX2RldmljZS92NGwyX3N1YmRldiBjb252ZXJzaW9uIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgorICoKKyAqIE5vdGU6IHRoaXMgY29udmVyc2lvbiBpcyB1bnRlc3RlZCEgUGxlYXNlIGNvbnRhY3QgdGhlIGxpbnV4LW1lZGlhCisgKiBtYWlsaW5nbGlzdCBpZiB5b3UgY2FuIHRlc3QgdGhpcywgdG9nZXRoZXIgd2l0aCB0aGUgdGVzdCByZXN1bHRzLgogICovCiAKIC8qCkBAIC0zMywxMiArMzksMTAgQEAKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1zZ2kuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vcGFjY2Vzcy5oPgpAQCAtMTM5LDEzICsxNDMsMjMgQEAKICNkZWZpbmUgVklOT19EQVRBX05PUk1fUEFMCQkxCiAjZGVmaW5lIFZJTk9fREFUQV9OT1JNX1NFQ0FNCQkyCiAjZGVmaW5lIFZJTk9fREFUQV9OT1JNX0QxCQkzCi0vKiBUaGUgZm9sbG93aW5nIGFyZSBzcGVjaWFsIGVudHJpZXMgdGhhdCBjYW4gYmUgdXNlZCB0bwotICogYXV0b2RldGVjdCB0aGUgbm9ybS4gKi8KLSNkZWZpbmUgVklOT19EQVRBX05PUk1fQVVUTwkJMHhmZQotI2RlZmluZSBWSU5PX0RBVEFfTk9STV9BVVRPX0VYVAkJMHhmZgogCiAjZGVmaW5lIFZJTk9fREFUQV9OT1JNX0NPVU5UCQk0CiAKKy8qIEkyQyBjb250cm9sbGVyIGZsYWdzICovCisjZGVmaW5lIFNHSV9JMkNfRk9SQ0VfSURMRQkJKDAgPDwgMCkKKyNkZWZpbmUgU0dJX0kyQ19OT1RfSURMRQkJKDEgPDwgMCkKKyNkZWZpbmUgU0dJX0kyQ19XUklURQkJCSgwIDw8IDEpCisjZGVmaW5lIFNHSV9JMkNfUkVBRAkJCSgxIDw8IDEpCisjZGVmaW5lIFNHSV9JMkNfUkVMRUFTRV9CVVMJCSgwIDw8IDIpCisjZGVmaW5lIFNHSV9JMkNfSE9MRF9CVVMJCSgxIDw8IDIpCisjZGVmaW5lIFNHSV9JMkNfWEZFUl9ET05FCQkoMCA8PCA0KQorI2RlZmluZSBTR0lfSTJDX1hGRVJfQlVTWQkJKDEgPDwgNCkKKyNkZWZpbmUgU0dJX0kyQ19BQ0sJCQkoMCA8PCA1KQorI2RlZmluZSBTR0lfSTJDX05BQ0sJCQkoMSA8PCA1KQorI2RlZmluZSBTR0lfSTJDX0JVU19PSwkJCSgwIDw8IDcpCisjZGVmaW5lIFNHSV9JMkNfQlVTX0VSUgkJCSgxIDw8IDcpCisKIC8qIEludGVybmFsIGRhdGEgc3RydWN0dXJlIGRlZmluaXRpb25zICovCiAKIHN0cnVjdCB2aW5vX2lucHV0IHsKQEAgLTI4OSwyMiArMzAzLDIwIEBACiAJc3RydWN0IHZpbm9faW50ZXJydXB0X2RhdGEgaW50X2RhdGE7CiAKIAkvKiBWNEwgc3VwcG9ydCAqLwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnY0bF9kZXZpY2U7Ci19OwotCi1zdHJ1Y3Qgdmlub19jbGllbnQgewotCS8qIHRoZSBjaGFubmVsIHdoaWNoIG93bnMgdGhpcyBjbGllbnQ6Ci0JICogVklOT19OT19DSEFOTkVMLCBWSU5PX0NIQU5ORUxfQSBvciBWSU5PX0NIQU5ORUxfQiAqLwotCXVuc2lnbmVkIGludCBvd25lcjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqZHJpdmVyOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7CiB9OwogCiBzdHJ1Y3Qgdmlub19zZXR0aW5ncyB7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OwogCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgYTsKIAlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzIGI7CiAKLQlzdHJ1Y3Qgdmlub19jbGllbnQgZGVjb2RlcjsKLQlzdHJ1Y3Qgdmlub19jbGllbnQgY2FtZXJhOworCS8qIHRoZSBjaGFubmVsIHdoaWNoIG93bnMgdGhpcyBjbGllbnQ6CisJICogVklOT19OT19DSEFOTkVMLCBWSU5PX0NIQU5ORUxfQSBvciBWSU5PX0NIQU5ORUxfQiAqLworCXVuc2lnbmVkIGludCBkZWNvZGVyX293bmVyOworCXN0cnVjdCB2NGwyX3N1YmRldiAqZGVjb2RlcjsKKwl1bnNpZ25lZCBpbnQgY2FtZXJhX293bmVyOworCXN0cnVjdCB2NGwyX3N1YmRldiAqY2FtZXJhOwogCiAJLyogYSBsb2NrIGZvciB2aW5vIHJlZ2lzdGVyIGFjY2VzcyAqLwogCXNwaW5sb2NrX3Qgdmlub19sb2NrOwpAQCAtMzQ0LDExICszNTYsMTYgQEAKIAogc3RhdGljIHN0cnVjdCB2aW5vX3NldHRpbmdzICp2aW5vX2RydmRhdGE7CiAKKyNkZWZpbmUgY2FtZXJhX2NhbGwobywgZiwgYXJncy4uLikgXAorCXY0bDJfc3ViZGV2X2NhbGwodmlub19kcnZkYXRhLT5jYW1lcmEsIG8sIGYsICMjYXJncykKKyNkZWZpbmUgZGVjb2Rlcl9jYWxsKG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX3N1YmRldl9jYWxsKHZpbm9fZHJ2ZGF0YS0+ZGVjb2RlciwgbywgZiwgIyNhcmdzKQorCiBzdGF0aWMgY29uc3QgY2hhciAqdmlub19kcml2ZXJfbmFtZSA9ICJ2aW5vIjsKIHN0YXRpYyBjb25zdCBjaGFyICp2aW5vX2RyaXZlcl9kZXNjcmlwdGlvbiA9ICJTR0kgVklOTyI7CiBzdGF0aWMgY29uc3QgY2hhciAqdmlub19idXNfbmFtZSA9ICJHSU82NCBidXMiOwotc3RhdGljIGNvbnN0IGNoYXIgKnZpbm9fdjRsX2RldmljZV9uYW1lX2EgPSAiU0dJIFZJTk8gQ2hhbm5lbCBBIjsKLXN0YXRpYyBjb25zdCBjaGFyICp2aW5vX3Y0bF9kZXZpY2VfbmFtZV9iID0gIlNHSSBWSU5PIENoYW5uZWwgQiI7CitzdGF0aWMgY29uc3QgY2hhciAqdmlub192ZGV2X25hbWVfYSA9ICJTR0kgVklOTyBDaGFubmVsIEEiOworc3RhdGljIGNvbnN0IGNoYXIgKnZpbm9fdmRldl9uYW1lX2IgPSAiU0dJIFZJTk8gQ2hhbm5lbCBCIjsKIAogc3RhdGljIHZvaWQgdmlub19jYXB0dXJlX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBjaGFubmVsKTsKIApAQCAtMzYwLDExICszNzcsMTEgQEAKIAkJLm5hbWUJCT0gIkNvbXBvc2l0ZSIsCiAJCS5zdGQJCT0gVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTAogCQl8IFY0TDJfU1REX1NFQ0FNLAotCX0seworCX0sIHsKIAkJLm5hbWUJCT0gIlMtVmlkZW8iLAogCQkuc3RkCQk9IFY0TDJfU1REX05UU0MgfCBWNEwyX1NURF9QQUwKIAkJfCBWNEwyX1NURF9TRUNBTSwKLQl9LHsKKwl9LCB7CiAJCS5uYW1lCQk9ICJEMS9JbmR5Q2FtIiwKIAkJLnN0ZAkJPSBWNEwyX1NURF9OVFNDLAogCX0KQEAgLTM3NiwxNyArMzkzLDE3IEBACiAJCS5icHAJCT0gMSwKIAkJLnBpeGVsZm9ybWF0CT0gVjRMMl9QSVhfRk1UX0dSRVksCiAJCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSwKLQl9LHsKKwl9LCB7CiAJCS5kZXNjcmlwdGlvbgk9ICI4LWJpdCBkaXRoZXJlZCBSR0IgMy0zLTIiLAogCQkuYnBwCQk9IDEsCiAJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9SR0IzMzIsCiAJCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCi0JfSx7CisJfSwgewogCQkuZGVzY3JpcHRpb24JPSAiMzItYml0IFJHQiIsCiAJCS5icHAJCT0gNCwKIAkJLnBpeGVsZm9ybWF0CT0gVjRMMl9QSVhfRk1UX1JHQjMyLAogCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCX0seworCX0sIHsKIAkJLmRlc2NyaXB0aW9uCT0gIllVViA0OjI6MiIsCiAJCS5icHAJCT0gMiwKIAkJLnBpeGVsZm9ybWF0CT0gVjRMMl9QSVhfRk1UX1lVWVYsIC8vIFhYWDogc3dhcHBlZD8KQEAgLTQxNyw3ICs0MzQsNyBAQAogCQkJKyBWSU5PX05UU0NfSEVJR0hUIC8gMiAtIDEsCiAJCQkucmlnaHQJPSBWSU5PX05UU0NfV0lEVEgsCiAJCX0sCi0JfSx7CisJfSwgewogCQkuZGVzY3JpcHRpb24JPSAiUEFMIiwKIAkJLnN0ZAkJPSBWNEwyX1NURF9QQUwsCiAJCS5mcHNfbWluCT0gNSwKQEAgLTQzOSw3ICs0NTYsNyBAQAogCQkJKyBWSU5PX1BBTF9IRUlHSFQgLyAyIC0gMSwKIAkJCS5yaWdodAk9IFZJTk9fUEFMX1dJRFRILAogCQl9LAotCX0seworCX0sIHsKIAkJLmRlc2NyaXB0aW9uCT0gIlNFQ0FNIiwKIAkJLnN0ZAkJPSBWNEwyX1NURF9TRUNBTSwKIAkJLmZwc19taW4JPSA1LApAQCAtNDYxLDcgKzQ3OCw3IEBACiAJCQkrIFZJTk9fUEFMX0hFSUdIVCAvIDIgLSAxLAogCQkJLnJpZ2h0CT0gVklOT19QQUxfV0lEVEgsCiAJCX0sCi0JfSx7CisJfSwgewogCQkuZGVzY3JpcHRpb24JPSAiTlRTQy9EMSIsCiAJCS5zdGQJCT0gVjRMMl9TVERfTlRTQywKIAkJLmZwc19taW4JPSA2LApAQCAtNDk3LDkgKzUxNCw3IEBACiAJCS5tYXhpbXVtID0gMSwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IElORFlDQU1fQUdDX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgSU5EWUNBTV9DT05UUk9MX0FHQywgMCB9LAotCX0seworCX0sIHsKIAkJLmlkID0gVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCiAJCS5uYW1lID0gIkF1dG9tYXRpYyBXaGl0ZSBCYWxhbmNlIiwKQEAgLTUwNyw5ICs1MjIsNyBAQAogCQkubWF4aW11bSA9IDEsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBJTkRZQ0FNX0FXQl9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IElORFlDQU1fQ09OVFJPTF9BV0IsIDAgfSwKLQl9LHsKKwl9LCB7CiAJCS5pZCA9IFY0TDJfQ0lEX0dBSU4sCiAJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgPSAiR2FpbiIsCkBAIC01MTcsMjkgKzUzMCwyMyBAQAogCQkubWF4aW11bSA9IElORFlDQU1fR0FJTl9NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBJTkRZQ0FNX0dBSU5fREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBJTkRZQ0FNX0NPTlRST0xfR0FJTiwgMCB9LAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UsCisJfSwgeworCQkuaWQgPSBJTkRZQ0FNX0NPTlRST0xfUkVEX1NBVFVSQVRJT04sCiAJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgPSAiUmVkIFNhdHVyYXRpb24iLAogCQkubWluaW11bSA9IElORFlDQU1fUkVEX1NBVFVSQVRJT05fTUlOLAogCQkubWF4aW11bSA9IElORFlDQU1fUkVEX1NBVFVSQVRJT05fTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gSU5EWUNBTV9SRURfU0FUVVJBVElPTl9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IElORFlDQU1fQ09OVFJPTF9SRURfU0FUVVJBVElPTiwgMCB9LAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAxLAorCX0sIHsKKwkJLmlkID0gSU5EWUNBTV9DT05UUk9MX0JMVUVfU0FUVVJBVElPTiwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJCbHVlIFNhdHVyYXRpb24iLAogCQkubWluaW11bSA9IElORFlDQU1fQkxVRV9TQVRVUkFUSU9OX01JTiwKIAkJLm1heGltdW0gPSBJTkRZQ0FNX0JMVUVfU0FUVVJBVElPTl9NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBJTkRZQ0FNX0JMVUVfU0FUVVJBVElPTl9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IElORFlDQU1fQ09OVFJPTF9CTFVFX1NBVFVSQVRJT04sIDAgfSwKLQl9LHsKKwl9LCB7CiAJCS5pZCA9IFY0TDJfQ0lEX1JFRF9CQUxBTkNFLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIlJlZCBCYWxhbmNlIiwKQEAgLTU0Nyw5ICs1NTQsNyBAQAogCQkubWF4aW11bSA9IElORFlDQU1fUkVEX0JBTEFOQ0VfTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gSU5EWUNBTV9SRURfQkFMQU5DRV9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IElORFlDQU1fQ09OVFJPTF9SRURfQkFMQU5DRSwgMCB9LAotCX0seworCX0sIHsKIAkJLmlkID0gVjRMMl9DSURfQkxVRV9CQUxBTkNFLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIkJsdWUgQmFsYW5jZSIsCkBAIC01NTcsOSArNTYyLDcgQEAKIAkJLm1heGltdW0gPSBJTkRZQ0FNX0JMVUVfQkFMQU5DRV9NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBJTkRZQ0FNX0JMVUVfQkFMQU5DRV9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IElORFlDQU1fQ09OVFJPTF9CTFVFX0JBTEFOQ0UsIDAgfSwKLQl9LHsKKwl9LCB7CiAJCS5pZCA9IFY0TDJfQ0lEX0VYUE9TVVJFLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIlNodXR0ZXIgQ29udHJvbCIsCkBAIC01NjcsOSArNTcwLDcgQEAKIAkJLm1heGltdW0gPSBJTkRZQ0FNX1NIVVRURVJfTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gSU5EWUNBTV9TSFVUVEVSX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgSU5EWUNBTV9DT05UUk9MX1NIVVRURVIsIDAgfSwKLQl9LHsKKwl9LCB7CiAJCS5pZCA9IFY0TDJfQ0lEX0dBTU1BLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIkdhbW1hIiwKQEAgLTU3Nyw4ICs1NzgsNiBAQAogCQkubWF4aW11bSA9IElORFlDQU1fR0FNTUFfTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gSU5EWUNBTV9HQU1NQV9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IElORFlDQU1fQ09OVFJPTF9HQU1NQSwgMCB9LAogCX0KIH07CiAKQEAgLTU5MywyMDkgKzU5Miw3MyBAQAogCQkubWF4aW11bSA9IFNBQTcxOTFfSFVFX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfSFVFX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgU0FBNzE5MV9DT05UUk9MX0hVRSwgMCB9LAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UsCisJfSwgeworCQkuaWQgPSBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1MsCiAJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgPSAiTHVtaW5hbmNlIEJhbmRwYXNzIiwKIAkJLm1pbmltdW0gPSBTQUE3MTkxX0JBTkRQQVNTX01JTiwKIAkJLm1heGltdW0gPSBTQUE3MTkxX0JBTkRQQVNTX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfQkFORFBBU1NfREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1MsIDAgfSwKLQl9LHsKLQkJLmlkID0gVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMSwKKwl9LCB7CisJCS5pZCA9IFNBQTcxOTFfQ09OVFJPTF9CQU5EUEFTU19XRUlHSFQsCiAJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgPSAiTHVtaW5hbmNlIEJhbmRwYXNzIFdlaWdodCIsCiAJCS5taW5pbXVtID0gU0FBNzE5MV9CQU5EUEFTU19XRUlHSFRfTUlOLAogCQkubWF4aW11bSA9IFNBQTcxOTFfQkFORFBBU1NfV0VJR0hUX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfQkFORFBBU1NfV0VJR0hUX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTX1dFSUdIVCwgMCB9LAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAyLAorCX0sIHsKKwkJLmlkID0gU0FBNzE5MV9DT05UUk9MX0NPUklORywKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJIRiBMdW1pbmFuY2UgQ29yaW5nIiwKIAkJLm1pbmltdW0gPSBTQUE3MTkxX0NPUklOR19NSU4sCiAJCS5tYXhpbXVtID0gU0FBNzE5MV9DT1JJTkdfTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gU0FBNzE5MV9DT1JJTkdfREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBTQUE3MTkxX0NPTlRST0xfQ09SSU5HLCAwIH0sCi0JfSx7Ci0JCS5pZCA9IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDMsCisJfSwgeworCQkuaWQgPSBTQUE3MTkxX0NPTlRST0xfRk9SQ0VfQ09MT1VSLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCiAJCS5uYW1lID0gIkZvcmNlIENvbG91ciIsCiAJCS5taW5pbXVtID0gU0FBNzE5MV9GT1JDRV9DT0xPVVJfTUlOLAogCQkubWF4aW11bSA9IFNBQTcxOTFfRk9SQ0VfQ09MT1VSX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfRk9SQ0VfQ09MT1VSX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgU0FBNzE5MV9DT05UUk9MX0ZPUkNFX0NPTE9VUiwgMCB9LAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyA0LAorCX0sIHsKKwkJLmlkID0gU0FBNzE5MV9DT05UUk9MX0NIUk9NQV9HQUlOLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIkNocm9taW5hbmNlIEdhaW4gQ29udHJvbCIsCiAJCS5taW5pbXVtID0gU0FBNzE5MV9DSFJPTUFfR0FJTl9NSU4sCiAJCS5tYXhpbXVtID0gU0FBNzE5MV9DSFJPTUFfR0FJTl9NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBTQUE3MTkxX0NIUk9NQV9HQUlOX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgU0FBNzE5MV9DT05UUk9MX0NIUk9NQV9HQUlOLCAwIH0sCi0JfSx7Ci0JCS5pZCA9IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDUsCisJfSwgeworCQkuaWQgPSBTQUE3MTkxX0NPTlRST0xfVlRSQywKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAogCQkubmFtZSA9ICJWVFIgVGltZSBDb25zdGFudCIsCiAJCS5taW5pbXVtID0gU0FBNzE5MV9WVFJDX01JTiwKIAkJLm1heGltdW0gPSBTQUE3MTkxX1ZUUkNfTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gU0FBNzE5MV9WVFJDX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgU0FBNzE5MV9DT05UUk9MX1ZUUkMsIDAgfSwKLQl9LHsKLQkJLmlkID0gVjRMMl9DSURfUFJJVkFURV9CQVNFICsgNiwKKwl9LCB7CisJCS5pZCA9IFNBQTcxOTFfQ09OVFJPTF9MVU1BX0RFTEFZLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIkx1bWluYW5jZSBEZWxheSBDb21wZW5zYXRpb24iLAogCQkubWluaW11bSA9IFNBQTcxOTFfTFVNQV9ERUxBWV9NSU4sCiAJCS5tYXhpbXVtID0gU0FBNzE5MV9MVU1BX0RFTEFZX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfTFVNQV9ERUxBWV9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IFNBQTcxOTFfQ09OVFJPTF9MVU1BX0RFTEFZLCAwIH0sCi0JfSx7Ci0JCS5pZCA9IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDcsCisJfSwgeworCQkuaWQgPSBTQUE3MTkxX0NPTlRST0xfVk5SLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIlZlcnRpY2FsIE5vaXNlIFJlZHVjdGlvbiIsCiAJCS5taW5pbXVtID0gU0FBNzE5MV9WTlJfTUlOLAogCQkubWF4aW11bSA9IFNBQTcxOTFfVk5SX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfVk5SX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgU0FBNzE5MV9DT05UUk9MX1ZOUiwgMCB9LAogCX0KIH07CiAKLS8qIFZJTk8gSTJDIGJ1cyBmdW5jdGlvbnMgKi8KLQotdW5zaWduZWQgaTJjX3Zpbm9fZ2V0Y3RybCh2b2lkICpkYXRhKQotewotCXJldHVybiB2aW5vLT5pMmNfY29udHJvbDsKLX0KLQotdm9pZCBpMmNfdmlub19zZXRjdHJsKHZvaWQgKmRhdGEsIHVuc2lnbmVkIHZhbCkKLXsKLQl2aW5vLT5pMmNfY29udHJvbCA9IHZhbDsKLX0KLQotdW5zaWduZWQgaTJjX3Zpbm9fcmRhdGEodm9pZCAqZGF0YSkKLXsKLQlyZXR1cm4gdmluby0+aTJjX2RhdGE7Ci19Ci0KLXZvaWQgaTJjX3Zpbm9fd2RhdGEodm9pZCAqZGF0YSwgdW5zaWduZWQgdmFsKQotewotCXZpbm8tPmkyY19kYXRhID0gdmFsOwotfQotCi1zdGF0aWMgc3RydWN0IGkyY19hbGdvX3NnaV9kYXRhIGkyY19zZ2lfdmlub19kYXRhID0KLXsKLQkuZ2V0Y3RybCA9ICZpMmNfdmlub19nZXRjdHJsLAotCS5zZXRjdHJsID0gJmkyY192aW5vX3NldGN0cmwsCi0JLnJkYXRhICAgPSAmaTJjX3Zpbm9fcmRhdGEsCi0JLndkYXRhICAgPSAmaTJjX3Zpbm9fd2RhdGEsCi0JLnhmZXJfdGltZW91dCA9IDIwMCwKLQkuYWNrX3RpbWVvdXQgID0gMTAwMCwKLX07Ci0KLS8qCi0gKiBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIGNsaWVudHMgb24gVklOTyBJMkMgYnVzLCBzbyB3ZSBsaW1pdCB1c2FnZSBvbmx5Ci0gKiB0byB0aGVtLgotICovCi1zdGF0aWMgaW50IGkyY192aW5vX2NsaWVudF9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCXN3aXRjaCAoY2xpZW50LT5kcml2ZXItPmlkKSB7Ci0JY2FzZSBJMkNfRFJJVkVSSURfU0FBNzE5MToKLQkJaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIpCi0JCQlyZXQgPSAtRUJVU1k7Ci0JCWVsc2UKLQkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIgPSBjbGllbnQ7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX0lORFlDQU06Ci0JCWlmICh2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXIpCi0JCQlyZXQgPSAtRUJVU1k7Ci0JCWVsc2UKLQkJCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlciA9IGNsaWVudDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVOT0RFVjsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGkyY192aW5vX2NsaWVudF91bnJlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0JaWYgKGNsaWVudCA9PSB2aW5vX2RydmRhdGEtPmRlY29kZXIuZHJpdmVyKSB7Ci0JCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgIT0gVklOT19OT19DSEFOTkVMKQotCQkJcmV0ID0gLUVCVVNZOwotCQllbHNlCi0JCQl2aW5vX2RydmRhdGEtPmRlY29kZXIuZHJpdmVyID0gTlVMTDsKLQl9IGVsc2UgaWYgKGNsaWVudCA9PSB2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXIpIHsKLQkJaWYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLm93bmVyICE9IFZJTk9fTk9fQ0hBTk5FTCkKLQkJCXJldCA9IC1FQlVTWTsKLQkJZWxzZQotCQkJdmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyID0gTlVMTDsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIHZpbm9faTJjX2FkYXB0ZXIgPQotewotCS5uYW1lCQkJPSAiVklOTyBJMkMgYnVzIiwKLQkuaWQJCQk9IEkyQ19IV19TR0lfVklOTywKLQkuYWxnb19kYXRhCQk9ICZpMmNfc2dpX3Zpbm9fZGF0YSwKLQkuY2xpZW50X3JlZ2lzdGVyCT0gJmkyY192aW5vX2NsaWVudF9yZWcsCi0JLmNsaWVudF91bnJlZ2lzdGVyCT0gJmkyY192aW5vX2NsaWVudF91bnJlZywKLX07Ci0KLXN0YXRpYyBpbnQgdmlub19pMmNfYWRkX2J1cyh2b2lkKQotewotCXJldHVybiBpMmNfc2dpX2FkZF9idXMoJnZpbm9faTJjX2FkYXB0ZXIpOwotfQotCi1zdGF0aWMgaW50IHZpbm9faTJjX2RlbF9idXModm9pZCkKLXsKLQlyZXR1cm4gaTJjX2RlbF9hZGFwdGVyKCZ2aW5vX2kyY19hZGFwdGVyKTsKLX0KLQotc3RhdGljIGludCBpMmNfY2FtZXJhX2NvbW1hbmQodW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXItPgotCQlkcml2ZXItPmNvbW1hbmQodmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyLAotCQkJCWNtZCwgYXJnKTsKLX0KLQotc3RhdGljIGludCBpMmNfZGVjb2Rlcl9jb21tYW5kKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlci0+Ci0JCWRyaXZlci0+Y29tbWFuZCh2aW5vX2RydmRhdGEtPmRlY29kZXIuZHJpdmVyLAotCQkJCWNtZCwgYXJnKTsKLX0KLQogLyogVklOTyBmcmFtZWJ1ZmZlci9ETUEgZGVzY3JpcHRvciBtYW5hZ2VtZW50ICovCiAKIHN0YXRpYyB2b2lkIHZpbm9fZnJlZV9idWZmZXJfd2l0aF9jb3VudChzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmIsCkBAIC0xNzQxLDYgKzE2MDQsMTg0IEBACiAJdmlub19zZXRfZnJhbWVyYXRlKHZjcywgdmlub19kYXRhX25vcm1zW3Zjcy0+ZGF0YV9ub3JtXS5mcHNfbWF4KTsKIH0KIAorLyogVklOTyBJMkMgYnVzIGZ1bmN0aW9ucyAqLworCitzdHJ1Y3QgaTJjX2FsZ29fc2dpX2RhdGEgeworCXZvaWQgKmRhdGE7CS8qIHByaXZhdGUgZGF0YSBmb3IgbG93bGV2ZWwgcm91dGluZXMgKi8KKwl1bnNpZ25lZCAoKmdldGN0cmwpKHZvaWQgKmRhdGEpOworCXZvaWQgKCpzZXRjdHJsKSh2b2lkICpkYXRhLCB1bnNpZ25lZCB2YWwpOworCXVuc2lnbmVkICgqcmRhdGEpKHZvaWQgKmRhdGEpOworCXZvaWQgKCp3ZGF0YSkodm9pZCAqZGF0YSwgdW5zaWduZWQgdmFsKTsKKworCWludCB4ZmVyX3RpbWVvdXQ7CisJaW50IGFja190aW1lb3V0OworfTsKKworc3RhdGljIGludCB3YWl0X3hmZXJfZG9uZShzdHJ1Y3QgaTJjX2FsZ29fc2dpX2RhdGEgKmFkYXApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcC0+eGZlcl90aW1lb3V0OyBpKyspIHsKKwkJaWYgKChhZGFwLT5nZXRjdHJsKGFkYXAtPmRhdGEpICYgU0dJX0kyQ19YRkVSX0JVU1kpID09IDApCisJCQlyZXR1cm4gMDsKKwkJdWRlbGF5KDEpOworCX0KKworCXJldHVybiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgaW50IHdhaXRfYWNrKHN0cnVjdCBpMmNfYWxnb19zZ2lfZGF0YSAqYWRhcCkKK3sKKwlpbnQgaTsKKworCWlmICh3YWl0X3hmZXJfZG9uZShhZGFwKSkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJZm9yIChpID0gMDsgaSA8IGFkYXAtPmFja190aW1lb3V0OyBpKyspIHsKKwkJaWYgKChhZGFwLT5nZXRjdHJsKGFkYXAtPmRhdGEpICYgU0dJX0kyQ19OQUNLKSA9PSAwKQorCQkJcmV0dXJuIDA7CisJCXVkZWxheSgxKTsKKwl9CisKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworc3RhdGljIGludCBmb3JjZV9pZGxlKHN0cnVjdCBpMmNfYWxnb19zZ2lfZGF0YSAqYWRhcCkKK3sKKwlpbnQgaTsKKworCWFkYXAtPnNldGN0cmwoYWRhcC0+ZGF0YSwgU0dJX0kyQ19GT1JDRV9JRExFKTsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcC0+eGZlcl90aW1lb3V0OyBpKyspIHsKKwkJaWYgKChhZGFwLT5nZXRjdHJsKGFkYXAtPmRhdGEpICYgU0dJX0kyQ19OT1RfSURMRSkgPT0gMCkKKwkJCWdvdG8gb3V0OworCQl1ZGVsYXkoMSk7CisJfQorCXJldHVybiAtRVRJTUVET1VUOworb3V0OgorCWlmIChhZGFwLT5nZXRjdHJsKGFkYXAtPmRhdGEpICYgU0dJX0kyQ19CVVNfRVJSKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkb19hZGRyZXNzKHN0cnVjdCBpMmNfYWxnb19zZ2lfZGF0YSAqYWRhcCwgdW5zaWduZWQgaW50IGFkZHIsCisJCSAgICAgIGludCByZCkKK3sKKwlpZiAocmQpCisJCWFkYXAtPnNldGN0cmwoYWRhcC0+ZGF0YSwgU0dJX0kyQ19OT1RfSURMRSk7CisJLyogQ2hlY2sgaWYgYnVzIGlzIGlkbGUsIGV2ZW50dWFsbHkgZm9yY2UgaXQgdG8gZG8gc28gKi8KKwlpZiAoYWRhcC0+Z2V0Y3RybChhZGFwLT5kYXRhKSAmIFNHSV9JMkNfTk9UX0lETEUpCisJCWlmIChmb3JjZV9pZGxlKGFkYXApKQorCQkJcmV0dXJuIC1FSU87CisJLyogV3JpdGUgb3V0IHRoZSBpMmMgY2hpcCBhZGRyZXNzIGFuZCBzcGVjaWZ5IG9wZXJhdGlvbiAqLworCWFkYXAtPnNldGN0cmwoYWRhcC0+ZGF0YSwKKwkJICAgICAgU0dJX0kyQ19IT0xEX0JVUyB8IFNHSV9JMkNfV1JJVEUgfCBTR0lfSTJDX05PVF9JRExFKTsKKwlpZiAocmQpCisJCWFkZHIgfD0gMTsKKwlhZGFwLT53ZGF0YShhZGFwLT5kYXRhLCBhZGRyKTsKKwlpZiAod2FpdF9hY2soYWRhcCkpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGkyY19yZWFkKHN0cnVjdCBpMmNfYWxnb19zZ2lfZGF0YSAqYWRhcCwgdW5zaWduZWQgY2hhciAqYnVmLAorCQkgICAgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCWFkYXAtPnNldGN0cmwoYWRhcC0+ZGF0YSwKKwkJICAgICAgU0dJX0kyQ19IT0xEX0JVUyB8IFNHSV9JMkNfUkVBRCB8IFNHSV9JMkNfTk9UX0lETEUpOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAod2FpdF94ZmVyX2RvbmUoYWRhcCkpCisJCQlyZXR1cm4gLUVJTzsKKwkJYnVmW2ldID0gYWRhcC0+cmRhdGEoYWRhcC0+ZGF0YSk7CisJfQorCWFkYXAtPnNldGN0cmwoYWRhcC0+ZGF0YSwgU0dJX0kyQ19SRUxFQVNFX0JVUyB8IFNHSV9JMkNfRk9SQ0VfSURMRSk7CisKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50IGkyY193cml0ZShzdHJ1Y3QgaTJjX2FsZ29fc2dpX2RhdGEgKmFkYXAsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJICAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCWludCBpOworCisJLyogV2UgYXJlIGFscmVhZHkgaW4gd3JpdGUgc3RhdGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJYWRhcC0+d2RhdGEoYWRhcC0+ZGF0YSwgYnVmW2ldKTsKKwkJaWYgKHdhaXRfYWNrKGFkYXApKQorCQkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNnaV94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHN0cnVjdCBpMmNfbXNnICptc2dzLAorCQkgICAgaW50IG51bSkKK3sKKwlzdHJ1Y3QgaTJjX2FsZ29fc2dpX2RhdGEgKmFkYXAgPSBpMmNfYWRhcC0+YWxnb19kYXRhOworCXN0cnVjdCBpMmNfbXNnICpwOworCWludCBpLCBlcnIgPSAwOworCisJZm9yIChpID0gMDsgIWVyciAmJiBpIDwgbnVtOyBpKyspIHsKKwkJcCA9ICZtc2dzW2ldOworCQllcnIgPSBkb19hZGRyZXNzKGFkYXAsIHAtPmFkZHIsIHAtPmZsYWdzICYgSTJDX01fUkQpOworCQlpZiAoZXJyIHx8ICFwLT5sZW4pCisJCQljb250aW51ZTsKKwkJaWYgKHAtPmZsYWdzICYgSTJDX01fUkQpCisJCQllcnIgPSBpMmNfcmVhZChhZGFwLCBwLT5idWYsIHAtPmxlbik7CisJCWVsc2UKKwkJCWVyciA9IGkyY193cml0ZShhZGFwLCBwLT5idWYsIHAtPmxlbik7CisJfQorCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IGk7Cit9CisKK3N0YXRpYyB1MzIgc2dpX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCXJldHVybiBJMkNfRlVOQ19TTUJVU19FTVVMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gc2dpX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyCT0gc2dpX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkJPSBzZ2lfZnVuYywKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpMmNfdmlub19nZXRjdHJsKHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIHZpbm8tPmkyY19jb250cm9sOworfQorCitzdGF0aWMgdm9pZCBpMmNfdmlub19zZXRjdHJsKHZvaWQgKmRhdGEsIHVuc2lnbmVkIHZhbCkKK3sKKwl2aW5vLT5pMmNfY29udHJvbCA9IHZhbDsKK30KKworc3RhdGljIHVuc2lnbmVkIGkyY192aW5vX3JkYXRhKHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIHZpbm8tPmkyY19kYXRhOworfQorCitzdGF0aWMgdm9pZCBpMmNfdmlub193ZGF0YSh2b2lkICpkYXRhLCB1bnNpZ25lZCB2YWwpCit7CisJdmluby0+aTJjX2RhdGEgPSB2YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29fc2dpX2RhdGEgaTJjX3NnaV92aW5vX2RhdGEgPSB7CisJLmdldGN0cmwgPSAmaTJjX3Zpbm9fZ2V0Y3RybCwKKwkuc2V0Y3RybCA9ICZpMmNfdmlub19zZXRjdHJsLAorCS5yZGF0YSAgID0gJmkyY192aW5vX3JkYXRhLAorCS53ZGF0YSAgID0gJmkyY192aW5vX3dkYXRhLAorCS54ZmVyX3RpbWVvdXQgPSAyMDAsCisJLmFja190aW1lb3V0ICA9IDEwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIHZpbm9faTJjX2FkYXB0ZXIgPSB7CisJLm5hbWUJCQk9ICJWSU5PIEkyQyBidXMiLAorCS5pZAkJCT0gSTJDX0hXX1NHSV9WSU5PLAorCS5hbGdvCQkJPSAmc2dpX2FsZ28sCisJLmFsZ29fZGF0YQkJPSAmaTJjX3NnaV92aW5vX2RhdGEsCisJLm93bmVyIAkJCT0gVEhJU19NT0RVTEUsCit9OworCiAvKgogICogUHJlcGFyZSBWSU5PIGZvciBETUEgdHJhbnNmZXIuLi4KICAqIChleGVjdXRlIG9ubHkgd2l0aCB2aW5vX2xvY2sgYW5kIGlucHV0X2xvY2sgbG9ja2VkKQpAQCAtMjQ5MCw4NiArMjUzMSwxNSBAQAogCX0KIH0KIAotc3RhdGljIGludCB2aW5vX2dldF9zYWE3MTkxX25vcm0odW5zaWduZWQgaW50IGRhdGFfbm9ybSkKLXsKLQlzd2l0Y2ggKGRhdGFfbm9ybSkgewotCWNhc2UgVklOT19EQVRBX05PUk1fQVVUTzoKLQkJcmV0dXJuIFNBQTcxOTFfTk9STV9BVVRPOwotCWNhc2UgVklOT19EQVRBX05PUk1fQVVUT19FWFQ6Ci0JCXJldHVybiBTQUE3MTkxX05PUk1fQVVUT19FWFQ7Ci0JY2FzZSBWSU5PX0RBVEFfTk9STV9QQUw6Ci0JCXJldHVybiBTQUE3MTkxX05PUk1fUEFMOwotCWNhc2UgVklOT19EQVRBX05PUk1fTlRTQzoKLQkJcmV0dXJuIFNBQTcxOTFfTk9STV9OVFNDOwotCWNhc2UgVklOT19EQVRBX05PUk1fU0VDQU06Ci0JCXJldHVybiBTQUE3MTkxX05PUk1fU0VDQU07Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJWSU5POiB2aW5vX2dldF9zYWE3MTkxX25vcm0oKTogIgotCQkgICAgICAgImludmFsaWQgbm9ybSFcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotfQotCi1zdGF0aWMgaW50IHZpbm9fZ2V0X2Zyb21fc2FhNzE5MV9ub3JtKGludCBzYWE3MTkxX25vcm0pCi17Ci0Jc3dpdGNoIChzYWE3MTkxX25vcm0pIHsKLQljYXNlIFNBQTcxOTFfTk9STV9QQUw6Ci0JCXJldHVybiBWSU5PX0RBVEFfTk9STV9QQUw7Ci0JY2FzZSBTQUE3MTkxX05PUk1fTlRTQzoKLQkJcmV0dXJuIFZJTk9fREFUQV9OT1JNX05UU0M7Ci0JY2FzZSBTQUE3MTkxX05PUk1fU0VDQU06Ci0JCXJldHVybiBWSU5PX0RBVEFfTk9STV9TRUNBTTsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgIlZJTk86IHZpbm9fZ2V0X2Zyb21fc2FhNzE5MV9ub3JtKCk6ICIKLQkJICAgICAgICJpbnZhbGlkIG5vcm0hXG4iKTsKLQkJcmV0dXJuIFZJTk9fREFUQV9OT1JNX05PTkU7Ci0JfQotfQotCi1zdGF0aWMgaW50IHZpbm9fc2FhNzE5MV9zZXRfbm9ybSh1bnNpZ25lZCBpbnQgKmRhdGFfbm9ybSkKLXsKLQlpbnQgc2FhNzE5MV9ub3JtLCBuZXdfZGF0YV9ub3JtOwotCWludCBlcnIgPSAwOwotCi0Jc2FhNzE5MV9ub3JtID0gdmlub19nZXRfc2FhNzE5MV9ub3JtKCpkYXRhX25vcm0pOwotCi0JZXJyID0gaTJjX2RlY29kZXJfY29tbWFuZChERUNPREVSX1NBQTcxOTFfU0VUX05PUk0sCi0JCQkJICAmc2FhNzE5MV9ub3JtKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWlmICgoKmRhdGFfbm9ybSA9PSBWSU5PX0RBVEFfTk9STV9BVVRPKQotCSAgICB8fCAoKmRhdGFfbm9ybSA9PSBWSU5PX0RBVEFfTk9STV9BVVRPX0VYVCkpIHsKLQkJc3RydWN0IHNhYTcxOTFfc3RhdHVzIHN0YXR1czsKLQotCQllcnIgPSBpMmNfZGVjb2Rlcl9jb21tYW5kKERFQ09ERVJfU0FBNzE5MV9HRVRfU1RBVFVTLAotCQkJCQkgICZzdGF0dXMpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0KLQkJbmV3X2RhdGFfbm9ybSA9Ci0JCQl2aW5vX2dldF9mcm9tX3NhYTcxOTFfbm9ybShzdGF0dXMubm9ybSk7Ci0JCWlmIChuZXdfZGF0YV9ub3JtID09IFZJTk9fREFUQV9OT1JNX05PTkUpIHsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCSpkYXRhX25vcm0gPSAodW5zaWduZWQgaW50KW5ld19kYXRhX25vcm07Ci0JfQotCi1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQogLyogZXhlY3V0ZSB3aXRoIGlucHV0X2xvY2sgbG9ja2VkICovCiBzdGF0aWMgaW50IHZpbm9faXNfaW5wdXRfb3duZXIoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzKQogewogCXN3aXRjaCh2Y3MtPmlucHV0KSB7CiAJY2FzZSBWSU5PX0lOUFVUX0NPTVBPU0lURToKIAljYXNlIFZJTk9fSU5QVVRfU1ZJREVPOgotCQlyZXR1cm4gKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5vd25lciA9PSB2Y3MtPmNoYW5uZWwpOworCQlyZXR1cm4gdmlub19kcnZkYXRhLT5kZWNvZGVyX293bmVyID09IHZjcy0+Y2hhbm5lbDsKIAljYXNlIFZJTk9fSU5QVVRfRDE6Ci0JCXJldHVybiAodmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPT0gdmNzLT5jaGFubmVsKTsKKwkJcmV0dXJuIHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID09IHZjcy0+Y2hhbm5lbDsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKIAl9CkBAIC0yNTg1LDIzICsyNTU1LDIyIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwogCiAJLyogRmlyc3QgdHJ5IEQxIGFuZCB0aGVuIFNBQTcxOTEgKi8KLQlpZiAodmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyCi0JICAgICYmICh2aW5vX2RydmRhdGEtPmNhbWVyYS5vd25lciA9PSBWSU5PX05PX0NIQU5ORUwpKSB7Ci0JCWkyY191c2VfY2xpZW50KHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlcik7Ci0JCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLm93bmVyID0gdmNzLT5jaGFubmVsOworCWlmICh2aW5vX2RydmRhdGEtPmNhbWVyYQorCSAgICAmJiAodmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPT0gVklOT19OT19DSEFOTkVMKSkgeworCQl2aW5vX2RydmRhdGEtPmNhbWVyYV9vd25lciA9IHZjcy0+Y2hhbm5lbDsKIAkJdmNzLT5pbnB1dCA9IFZJTk9fSU5QVVRfRDE7CiAJCXZjcy0+ZGF0YV9ub3JtID0gVklOT19EQVRBX05PUk1fRDE7Ci0JfSBlbHNlIGlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIuZHJpdmVyCi0JCSAgICYmICh2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPT0gVklOT19OT19DSEFOTkVMKSkgewotCQlpbnQgaW5wdXQsIGRhdGFfbm9ybTsKLQkJaW50IHNhYTcxOTFfaW5wdXQ7CisJfSBlbHNlIGlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIKKwkJICAgJiYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9PSBWSU5PX05PX0NIQU5ORUwpKSB7CisJCWludCBpbnB1dDsKKwkJaW50IGRhdGFfbm9ybTsKKwkJdjRsMl9zdGRfaWQgbm9ybTsKKwkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZSA9IHsgMCwgMCB9OwogCi0JCWkyY191c2VfY2xpZW50KHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIpOwogCQlpbnB1dCA9IFZJTk9fSU5QVVRfQ09NUE9TSVRFOwogCi0JCXNhYTcxOTFfaW5wdXQgPSB2aW5vX2dldF9zYWE3MTkxX2lucHV0KGlucHV0KTsKLQkJcmV0ID0gaTJjX2RlY29kZXJfY29tbWFuZChERUNPREVSX1NFVF9JTlBVVCwKLQkJCQkJICAmc2FhNzE5MV9pbnB1dCk7CisJCXJvdXRlLmlucHV0ID0gdmlub19nZXRfc2FhNzE5MV9pbnB1dChpbnB1dCk7CisJCXJldCA9IGRlY29kZXJfY2FsbCh2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCQlpZiAocmV0KSB7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CkBAIC0yNjEyLDEyICsyNTgxLDE1IEBACiAJCS8qIERvbid0IGhvbGQgc3BpbmxvY2tzIHdoaWxlIGF1dG8tZGV0ZWN0aW5nIG5vcm0KIAkJICogYXMgaXQgbWF5IHRha2UgYSB3aGlsZS4uLiAqLwogCi0JCWRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX0FVVE9fRVhUOwotCi0JCXJldCA9IHZpbm9fc2FhNzE5MV9zZXRfbm9ybSgmZGF0YV9ub3JtKTsKLQkJaWYgKChyZXQgPT0gLUVCVVNZKSB8fCAocmV0ID09IC1FQUdBSU4pKSB7Ci0JCQlkYXRhX25vcm0gPSBWSU5PX0RBVEFfTk9STV9QQUw7Ci0JCQlyZXQgPSB2aW5vX3NhYTcxOTFfc2V0X25vcm0oJmRhdGFfbm9ybSk7CisJCXJldCA9IGRlY29kZXJfY2FsbCh2aWRlbywgcXVlcnlzdGQsICZub3JtKTsKKwkJaWYgKCFyZXQpIHsKKwkJCWZvciAoZGF0YV9ub3JtID0gMDsgZGF0YV9ub3JtIDwgMzsgZGF0YV9ub3JtKyspIHsKKwkJCQlpZiAodmlub19kYXRhX25vcm1zW2RhdGFfbm9ybV0uc3RkICYgbm9ybSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoZGF0YV9ub3JtID09IDMpCisJCQkJZGF0YV9ub3JtID0gVklOT19EQVRBX05PUk1fUEFMOworCQkJcmV0ID0gZGVjb2Rlcl9jYWxsKHR1bmVyLCBzX3N0ZCwgbm9ybSk7CiAJCX0KIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7CkBAIC0yNjI3LDcgKzI1OTksNyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQl2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPSB2Y3MtPmNoYW5uZWw7CisJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9IHZjcy0+Y2hhbm5lbDsKIAogCQl2Y3MtPmlucHV0ID0gaW5wdXQ7CiAJCXZjcy0+ZGF0YV9ub3JtID0gZGF0YV9ub3JtOwpAQCAtMjY3MiwyNSArMjY0NCwyNCBAQAogCXN3aXRjaCAoaW5wdXQpIHsKIAljYXNlIFZJTk9fSU5QVVRfQ09NUE9TSVRFOgogCWNhc2UgVklOT19JTlBVVF9TVklERU86Ci0JCWlmICghdmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlcikgeworCQlpZiAoIXZpbm9fZHJ2ZGF0YS0+ZGVjb2RlcikgewogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5vd25lciA9PSBWSU5PX05PX0NIQU5ORUwpIHsKLQkJCWkyY191c2VfY2xpZW50KHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIpOwotCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyID0gdmNzLT5jaGFubmVsOworCQlpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyX293bmVyID09IFZJTk9fTk9fQ0hBTk5FTCkgeworCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyX293bmVyID0gdmNzLT5jaGFubmVsOwogCQl9CiAKLQkJaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5vd25lciA9PSB2Y3MtPmNoYW5uZWwpIHsKKwkJaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9PSB2Y3MtPmNoYW5uZWwpIHsKIAkJCWludCBkYXRhX25vcm07Ci0JCQlpbnQgc2FhNzE5MV9pbnB1dDsKKwkJCXY0bDJfc3RkX2lkIG5vcm07CisJCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlID0geyAwLCAwIH07CiAKLQkJCXNhYTcxOTFfaW5wdXQgPSB2aW5vX2dldF9zYWE3MTkxX2lucHV0KGlucHV0KTsKLQkJCXJldCA9IGkyY19kZWNvZGVyX2NvbW1hbmQoREVDT0RFUl9TRVRfSU5QVVQsCi0JCQkJCQkgICZzYWE3MTkxX2lucHV0KTsKKwkJCXJvdXRlLmlucHV0ID0gdmlub19nZXRfc2FhNzE5MV9pbnB1dChpbnB1dCk7CisJCQlyZXQgPSBkZWNvZGVyX2NhbGwodmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAkJCWlmIChyZXQpIHsKLQkJCQl2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPSBWSU5PX05PX0NIQU5ORUw7CisJCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyX293bmVyID0gVklOT19OT19DSEFOTkVMOwogCQkJCXJldCA9IC1FSU5WQUw7CiAJCQkJZ290byBvdXQ7CiAJCQl9CkBAIC0yNzAwLDE4ICsyNjcxLDIxIEBACiAJCQkvKiBEb24ndCBob2xkIHNwaW5sb2NrcyB3aGlsZSBhdXRvLWRldGVjdGluZyBub3JtCiAJCQkgKiBhcyBpdCBtYXkgdGFrZSBhIHdoaWxlLi4uICovCiAKLQkJCWRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX0FVVE9fRVhUOwotCi0JCQlyZXQgPSB2aW5vX3NhYTcxOTFfc2V0X25vcm0oJmRhdGFfbm9ybSk7Ci0JCQlpZiAoKHJldCAgPT0gLUVCVVNZKSB8fCAocmV0ID09IC1FQUdBSU4pKSB7Ci0JCQkJZGF0YV9ub3JtID0gVklOT19EQVRBX05PUk1fUEFMOwotCQkJCXJldCA9IHZpbm9fc2FhNzE5MV9zZXRfbm9ybSgmZGF0YV9ub3JtKTsKKwkJCXJldCA9IGRlY29kZXJfY2FsbCh2aWRlbywgcXVlcnlzdGQsICZub3JtKTsKKwkJCWlmICghcmV0KSB7CisJCQkJZm9yIChkYXRhX25vcm0gPSAwOyBkYXRhX25vcm0gPCAzOyBkYXRhX25vcm0rKykgeworCQkJCQlpZiAodmlub19kYXRhX25vcm1zW2RhdGFfbm9ybV0uc3RkICYgbm9ybSkKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoZGF0YV9ub3JtID09IDMpCisJCQkJCWRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX1BBTDsKKwkJCQlyZXQgPSBkZWNvZGVyX2NhbGwodHVuZXIsIHNfc3RkLCBub3JtKTsKIAkJCX0KIAogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwogCiAJCQlpZiAocmV0KSB7Ci0JCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyID0gVklOT19OT19DSEFOTkVMOworCQkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9IFZJTk9fTk9fQ0hBTk5FTDsKIAkJCQlyZXQgPSAtRUlOVkFMOwogCQkJCWdvdG8gb3V0OwogCQkJfQpAQCAtMjcyOCwzNyArMjcwMiwzMSBAQAogCQkJdmNzLT5kYXRhX25vcm0gPSB2Y3MyLT5kYXRhX25vcm07CiAJCX0KIAotCQlpZiAodmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPT0gdmNzLT5jaGFubmVsKSB7CisJCWlmICh2aW5vX2RydmRhdGEtPmNhbWVyYV9vd25lciA9PSB2Y3MtPmNoYW5uZWwpIHsKIAkJCS8qIFRyYW5zZmVyIHRoZSBvd25lcnNoaXAgb3IgcmVsZWFzZSB0aGUgaW5wdXQgKi8KIAkJCWlmICh2Y3MyLT5pbnB1dCA9PSBWSU5PX0lOUFVUX0QxKSB7Ci0JCQkJdmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPSB2Y3MyLT5jaGFubmVsOworCQkJCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID0gdmNzMi0+Y2hhbm5lbDsKIAkJCX0gZWxzZSB7Ci0JCQkJaTJjX3JlbGVhc2VfY2xpZW50KHZpbm9fZHJ2ZGF0YS0+Ci0JCQkJCQkgICBjYW1lcmEuZHJpdmVyKTsKLQkJCQl2aW5vX2RydmRhdGEtPmNhbWVyYS5vd25lciA9IFZJTk9fTk9fQ0hBTk5FTDsKKwkJCQl2aW5vX2RydmRhdGEtPmNhbWVyYV9vd25lciA9IFZJTk9fTk9fQ0hBTk5FTDsKIAkJCX0KIAkJfQogCQlicmVhazsKIAljYXNlIFZJTk9fSU5QVVRfRDE6Ci0JCWlmICghdmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyKSB7CisJCWlmICghdmlub19kcnZkYXRhLT5jYW1lcmEpIHsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCWlmICh2aW5vX2RydmRhdGEtPmNhbWVyYS5vd25lciA9PSBWSU5PX05PX0NIQU5ORUwpIHsKLQkJCWkyY191c2VfY2xpZW50KHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlcik7Ci0JCQl2aW5vX2RydmRhdGEtPmNhbWVyYS5vd25lciA9IHZjcy0+Y2hhbm5lbDsKLQkJfQorCQlpZiAodmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPT0gVklOT19OT19DSEFOTkVMKQorCQkJdmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPSB2Y3MtPmNoYW5uZWw7CiAKLQkJaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5vd25lciA9PSB2Y3MtPmNoYW5uZWwpIHsKKwkJaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9PSB2Y3MtPmNoYW5uZWwpIHsKIAkJCS8qIFRyYW5zZmVyIHRoZSBvd25lcnNoaXAgb3IgcmVsZWFzZSB0aGUgaW5wdXQgKi8KIAkJCWlmICgodmNzMi0+aW5wdXQgPT0gVklOT19JTlBVVF9DT01QT1NJVEUpIHx8CiAJCQkJICh2Y3MyLT5pbnB1dCA9PSBWSU5PX0lOUFVUX1NWSURFTykpIHsKLQkJCQl2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPSB2Y3MyLT5jaGFubmVsOworCQkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9IHZjczItPmNoYW5uZWw7CiAJCQl9IGVsc2UgewotCQkJCWkyY19yZWxlYXNlX2NsaWVudCh2aW5vX2RydmRhdGEtPgotCQkJCQkJICAgZGVjb2Rlci5kcml2ZXIpOwotCQkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5vd25lciA9IFZJTk9fTk9fQ0hBTk5FTDsKKwkJCQl2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPSBWSU5PX05PX0NIQU5ORUw7CiAJCQl9CiAJCX0KIApAQCAtMjc5NSwyMCArMjc2MywxOCBAQAogCS8qIFJlbGVhc2Ugb3duZXJzaGlwIG9mIHRoZSBjaGFubmVsCiAJICogYW5kIGlmIHRoZSBvdGhlciBjaGFubmVsIHRha2VzIGlucHV0IGZyb20KIAkgKiB0aGUgc2FtZSBzb3VyY2UsIHRyYW5zZmVyIHRoZSBvd25lcnNoaXAgKi8KLQlpZiAodmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPT0gdmNzLT5jaGFubmVsKSB7CisJaWYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID09IHZjcy0+Y2hhbm5lbCkgewogCQlpZiAodmNzMi0+aW5wdXQgPT0gVklOT19JTlBVVF9EMSkgewotCQkJdmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPSB2Y3MyLT5jaGFubmVsOworCQkJdmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPSB2Y3MyLT5jaGFubmVsOwogCQl9IGVsc2UgewotCQkJaTJjX3JlbGVhc2VfY2xpZW50KHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlcik7Ci0JCQl2aW5vX2RydmRhdGEtPmNhbWVyYS5vd25lciA9IFZJTk9fTk9fQ0hBTk5FTDsKKwkJCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID0gVklOT19OT19DSEFOTkVMOwogCQl9Ci0JfSBlbHNlIGlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPT0gdmNzLT5jaGFubmVsKSB7CisJfSBlbHNlIGlmICh2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPT0gdmNzLT5jaGFubmVsKSB7CiAJCWlmICgodmNzMi0+aW5wdXQgPT0gVklOT19JTlBVVF9DT01QT1NJVEUpIHx8CiAJCQkgKHZjczItPmlucHV0ID09IFZJTk9fSU5QVVRfU1ZJREVPKSkgewotCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyID0gdmNzMi0+Y2hhbm5lbDsKKwkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9IHZjczItPmNoYW5uZWw7CiAJCX0gZWxzZSB7Ci0JCQlpMmNfcmVsZWFzZV9jbGllbnQodmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlcik7Ci0JCQl2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPSBWSU5PX05PX0NIQU5ORUw7CisJCQl2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPSBWSU5PX05PX0NIQU5ORUw7CiAJCX0KIAl9CiAJdmNzLT5pbnB1dCA9IFZJTk9fSU5QVVRfTk9ORTsKQEAgLTI4MjksMTggKzI3OTUsMTYgQEAKIAlzd2l0Y2ggKHZjcy0+aW5wdXQpIHsKIAljYXNlIFZJTk9fSU5QVVRfRDE6CiAJCS8qIG9ubHkgb25lICJub3JtIiBzdXBwb3J0ZWQgKi8KLQkJaWYgKChkYXRhX25vcm0gIT0gVklOT19EQVRBX05PUk1fRDEpCi0JCSAgICAmJiAoZGF0YV9ub3JtICE9IFZJTk9fREFUQV9OT1JNX0FVVE8pCi0JCSAgICAmJiAoZGF0YV9ub3JtICE9IFZJTk9fREFUQV9OT1JNX0FVVE9fRVhUKSkKKwkJaWYgKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9EMSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAljYXNlIFZJTk9fSU5QVVRfQ09NUE9TSVRFOgogCWNhc2UgVklOT19JTlBVVF9TVklERU86IHsKKwkJdjRsMl9zdGRfaWQgbm9ybTsKKwogCQlpZiAoKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9QQUwpCiAJCSAgICAmJiAoZGF0YV9ub3JtICE9IFZJTk9fREFUQV9OT1JNX05UU0MpCi0JCSAgICAmJiAoZGF0YV9ub3JtICE9IFZJTk9fREFUQV9OT1JNX1NFQ0FNKQotCQkgICAgJiYgKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9BVVRPKQotCQkgICAgJiYgKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9BVVRPX0VYVCkpCisJCSAgICAmJiAoZGF0YV9ub3JtICE9IFZJTk9fREFUQV9OT1JNX1NFQ0FNKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgKmZsYWdzKTsKQEAgLTI4NDgsNyArMjgxMiw4IEBACiAJCS8qIERvbid0IGhvbGQgc3BpbmxvY2tzIHdoaWxlIHNldHRpbmcgbm9ybQogCQkgKiBhcyBpdCBtYXkgdGFrZSBhIHdoaWxlLi4uICovCiAKLQkJZXJyID0gdmlub19zYWE3MTkxX3NldF9ub3JtKCZkYXRhX25vcm0pOworCQlub3JtID0gdmlub19kYXRhX25vcm1zW2RhdGFfbm9ybV0uc3RkOworCQllcnIgPSBkZWNvZGVyX2NhbGwodHVuZXIsIHNfc3RkLCBub3JtKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCAqZmxhZ3MpOwogCkBAIC0yODg0LDQxICsyODQ5LDEzIEBACiAJcmV0dXJuIFZJTk9fREFUQV9GTVRfTk9ORTsKIH0KIAotc3RhdGljIGludCB2aW5vX2VudW1fZGF0YV9ub3JtKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywgX191MzIgaW5kZXgpCi17Ci0JaW50IGRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX05PTkU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQlzd2l0Y2godmNzLT5pbnB1dCkgewotCWNhc2UgVklOT19JTlBVVF9DT01QT1NJVEU6Ci0JY2FzZSBWSU5PX0lOUFVUX1NWSURFTzoKLQkJaWYgKGluZGV4ID09IDApIHsKLQkJCWRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX1BBTDsKLQkJfSBlbHNlIGlmIChpbmRleCA9PSAxKSB7Ci0JCQlkYXRhX25vcm0gPSBWSU5PX0RBVEFfTk9STV9OVFNDOwotCQl9IGVsc2UgaWYgKGluZGV4ID09IDIpIHsKLQkJCWRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX1NFQ0FNOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgVklOT19JTlBVVF9EMToKLQkJaWYgKGluZGV4ID09IDApIHsKLQkJCWRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX0QxOwotCQl9Ci0JCWJyZWFrOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBkYXRhX25vcm07Ci19Ci0KLXN0YXRpYyBpbnQgdmlub19lbnVtX2lucHV0KHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywgX191MzIgaW5kZXgpCitzdGF0aWMgaW50IHZpbm9faW50X2VudW1faW5wdXQoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLCBfX3UzMiBpbmRleCkKIHsKIAlpbnQgaW5wdXQgPSBWSU5PX0lOUFVUX05PTkU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQlpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlciAmJiB2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXIpIHsKKwlpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyICYmIHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhKSB7CiAJCXN3aXRjaCAoaW5kZXgpIHsKIAkJY2FzZSAwOgogCQkJaW5wdXQgPSBWSU5PX0lOUFVUX0NPTVBPU0lURTsKQEAgLTI5MzAsNyArMjg2Nyw3IEBACiAJCQlpbnB1dCA9IFZJTk9fSU5QVVRfRDE7CiAJCQlicmVhazsKIAkJfQotCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlcikgeworCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyKSB7CiAJCXN3aXRjaCAoaW5kZXgpIHsKIAkJY2FzZSAwOgogCQkJaW5wdXQgPSBWSU5PX0lOUFVUX0NPTVBPU0lURTsKQEAgLTI5MzksNyArMjg3Niw3IEBACiAJCQlpbnB1dCA9IFZJTk9fSU5QVVRfU1ZJREVPOwogCQkJYnJlYWs7CiAJCX0KLQl9IGVsc2UgaWYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlcikgeworCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5jYW1lcmEpIHsKIAkJc3dpdGNoIChpbmRleCkgewogCQljYXNlIDA6CiAJCQlpbnB1dCA9IFZJTk9fSU5QVVRfRDE7CkBAIC0yOTU3LDcgKzI4OTQsNyBAQAogCV9fdTMyIGluZGV4ID0gMDsKIAkvLyBGSVhNRTogZGV0ZWN0IHdoZW4gbm8gaW5wdXRzIGF2YWlsYWJsZQogCi0JaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIgJiYgdmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyKSB7CisJaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2RlciAmJiB2aW5vX2RydmRhdGEtPmNhbWVyYSkgewogCQlzd2l0Y2ggKHZjcy0+aW5wdXQpIHsKIAkJY2FzZSBWSU5PX0lOUFVUX0NPTVBPU0lURToKIAkJCWluZGV4ID0gMDsKQEAgLTI5NjksNyArMjkwNiw3IEBACiAJCQlpbmRleCA9IDI7CiAJCQlicmVhazsKIAkJfQotCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlcikgeworCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyKSB7CiAJCXN3aXRjaCAodmNzLT5pbnB1dCkgewogCQljYXNlIFZJTk9fSU5QVVRfQ09NUE9TSVRFOgogCQkJaW5kZXggPSAwOwpAQCAtMjk3OCw3ICsyOTE1LDcgQEAKIAkJCWluZGV4ID0gMTsKIAkJCWJyZWFrOwogCQl9Ci0JfSBlbHNlIGlmICh2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXIpIHsKKwl9IGVsc2UgaWYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhKSB7CiAJCXN3aXRjaCAodmNzLT5pbnB1dCkgewogCQljYXNlIFZJTk9fSU5QVVRfRDE6CiAJCQlpbmRleCA9IDA7CkBAIC0yOTkxLDcgKzI5MjgsOCBAQAogCiAvKiBWNEwyIGlvY3RscyAqLwogCi1zdGF0aWMgdm9pZCB2aW5vX3Y0bDJfcXVlcnljYXAoc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQorc3RhdGljIGludCB2aW5vX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCiB7CiAJbWVtc2V0KGNhcCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkpKTsKIApAQCAtMzAwMywxNiArMjk0MSwxOCBAQAogCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKIAkJVjRMMl9DQVBfU1RSRUFNSU5HOwogCS8vIFY0TDJfQ0FQX09WRVJMQVksIFY0TDJfQ0FQX1JFQURXUklURQorCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9lbnVtaW5wdXQoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAorc3RhdGljIGludCB2aW5vX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICAgICAgc3RydWN0IHY0bDJfaW5wdXQgKmkpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlfX3UzMiBpbmRleCA9IGktPmluZGV4OwogCWludCBpbnB1dDsKIAlkcHJpbnRrKCJyZXF1ZXN0ZWQgaW5kZXggPSAlZFxuIiwgaW5kZXgpOwogCi0JaW5wdXQgPSB2aW5vX2VudW1faW5wdXQodmNzLCBpbmRleCk7CisJaW5wdXQgPSB2aW5vX2ludF9lbnVtX2lucHV0KHZjcywgaW5kZXgpOwogCWlmIChpbnB1dCA9PSBWSU5PX0lOUFVUX05PTkUpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0zMDIzLDIwICsyOTYzLDE1IEBACiAJaS0+c3RkID0gdmlub19pbnB1dHNbaW5wdXRdLnN0ZDsKIAlzdHJjcHkoaS0+bmFtZSwgdmlub19pbnB1dHNbaW5wdXRdLm5hbWUpOwogCi0JaWYgKChpbnB1dCA9PSBWSU5PX0lOUFVUX0NPTVBPU0lURSkKLQkgICAgfHwgKGlucHV0ID09IFZJTk9fSU5QVVRfU1ZJREVPKSkgewotCQlzdHJ1Y3Qgc2FhNzE5MV9zdGF0dXMgc3RhdHVzOwotCQlpMmNfZGVjb2Rlcl9jb21tYW5kKERFQ09ERVJfU0FBNzE5MV9HRVRfU1RBVFVTLCAmc3RhdHVzKTsKLQkJaS0+c3RhdHVzIHw9IHN0YXR1cy5zaWduYWwgPyAwIDogVjRMMl9JTl9TVF9OT19TSUdOQUw7Ci0JCWktPnN0YXR1cyB8PSBzdGF0dXMuY29sb3IgPyAwIDogVjRMMl9JTl9TVF9OT19DT0xPUjsKLQl9Ci0KKwlpZiAoaW5wdXQgPT0gVklOT19JTlBVVF9DT01QT1NJVEUgfHwgaW5wdXQgPT0gVklOT19JTlBVVF9TVklERU8pCisJCWRlY29kZXJfY2FsbCh2aWRlbywgZ19pbnB1dF9zdGF0dXMsICZpLT5zdGF0dXMpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9nX2lucHV0KHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlfX3UzMiBpbmRleDsKIAlpbnQgaW5wdXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTMwNTcsNTIgKzI5OTIsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfc19pbnB1dChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCi0JCQkgICAgIHVuc2lnbmVkIGludCAqaSkKK3N0YXRpYyBpbnQgdmlub19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJICAgICB1bnNpZ25lZCBpbnQgaSkKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCBpbnB1dDsKLQlkcHJpbnRrKCJyZXF1ZXN0ZWQgaW5wdXQgPSAlZFxuIiwgKmkpOworCWRwcmludGsoInJlcXVlc3RlZCBpbnB1dCA9ICVkXG4iLCBpKTsKIAotCWlucHV0ID0gdmlub19lbnVtX2lucHV0KHZjcywgKmkpOworCWlucHV0ID0gdmlub19pbnRfZW51bV9pbnB1dCh2Y3MsIGkpOwogCWlmIChpbnB1dCA9PSBWSU5PX0lOUFVUX05PTkUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIHZpbm9fc2V0X2lucHV0KHZjcywgaW5wdXQpOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9lbnVtc3RkKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKLQkJCSAgICAgc3RydWN0IHY0bDJfc3RhbmRhcmQgKnMpCi17Ci0JaW50IGluZGV4ID0gcy0+aW5kZXg7Ci0JaW50IGRhdGFfbm9ybTsKLQotCWRhdGFfbm9ybSA9IHZpbm9fZW51bV9kYXRhX25vcm0odmNzLCBpbmRleCk7Ci0JZHByaW50aygic3RhbmRhcmQgaW5kZXggPSAlZFxuIiwgaW5kZXgpOwotCi0JaWYgKGRhdGFfbm9ybSA9PSBWSU5PX0RBVEFfTk9STV9OT05FKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRwcmludGsoInN0YW5kYXJkIG5hbWUgPSAlc1xuIiwKLQkgICAgICAgdmlub19kYXRhX25vcm1zW2RhdGFfbm9ybV0uZGVzY3JpcHRpb24pOwotCi0JbWVtc2V0KHMsIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9zdGFuZGFyZCkpOwotCXMtPmluZGV4ID0gaW5kZXg7Ci0KLQlzLT5pZCA9IHZpbm9fZGF0YV9ub3Jtc1tkYXRhX25vcm1dLnN0ZDsKLQlzLT5mcmFtZXBlcmlvZC5udW1lcmF0b3IgPSAxOwotCXMtPmZyYW1lcGVyaW9kLmRlbm9taW5hdG9yID0KLQkJdmlub19kYXRhX25vcm1zW2RhdGFfbm9ybV0uZnBzX21heDsKLQlzLT5mcmFtZWxpbmVzID0KLQkJdmlub19kYXRhX25vcm1zW2RhdGFfbm9ybV0uZnJhbWVsaW5lczsKLQlzdHJjcHkocy0+bmFtZSwKLQkgICAgICAgdmlub19kYXRhX25vcm1zW2RhdGFfbm9ybV0uZGVzY3JpcHRpb24pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlub192NGwyX3F1ZXJ5c3RkKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19xdWVyeXN0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICAgIHY0bDJfc3RkX2lkICpzdGQpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnIgPSAwOwogCkBAIC0zMTE0LDE5ICszMDIxLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBWSU5PX0lOUFVUX0NPTVBPU0lURToKIAljYXNlIFZJTk9fSU5QVVRfU1ZJREVPOiB7Ci0JCXN0cnVjdCBzYWE3MTkxX3N0YXR1cyBzdGF0dXM7Ci0KLQkJaTJjX2RlY29kZXJfY29tbWFuZChERUNPREVSX1NBQTcxOTFfR0VUX1NUQVRVUywgJnN0YXR1cyk7Ci0KLQkJaWYgKHN0YXR1cy5zaWduYWwpIHsKLQkJCWlmIChzdGF0dXMuc2lnbmFsXzYwaHopIHsKLQkJCQkqc3RkID0gVjRMMl9TVERfTlRTQzsKLQkJCX0gZWxzZSB7Ci0JCQkJKnN0ZCA9IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNOwotCQkJfQotCQl9IGVsc2UgewotCQkJKnN0ZCA9IHZpbm9faW5wdXRzW3Zjcy0+aW5wdXRdLnN0ZDsKLQkJfQorCQlkZWNvZGVyX2NhbGwodmlkZW8sIHF1ZXJ5c3RkLCBzdGQpOwogCQlicmVhazsKIAl9CiAJZGVmYXVsdDoKQEAgLTMxMzgsOSArMzAzMywxMCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX2dfc3RkKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19nX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgIHY0bDJfc3RkX2lkICpzdGQpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwpAQCAtMzE1Myw5ICszMDQ5LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3Nfc3RkKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgIHY0bDJfc3RkX2lkICpzdGQpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCkBAIC0zMTc2LDEyICszMDczLDcgQEAKIAkJaWYgKHZjcy0+aW5wdXQgPT0gVklOT19JTlBVVF9EMSkKIAkJCWdvdG8gb3V0OwogCi0JCWlmICgoKCpzdGQpICYgVjRMMl9TVERfUEFMKQotCQkgICAgJiYgKCgqc3RkKSAmIFY0TDJfU1REX05UU0MpCi0JCSAgICAmJiAoKCpzdGQpICYgVjRMMl9TVERfU0VDQU0pKSB7Ci0JCQlyZXQgPSB2aW5vX3NldF9kYXRhX25vcm0odmNzLCBWSU5PX0RBVEFfTk9STV9BVVRPX0VYVCwKLQkJCQkJCSAmZmxhZ3MpOwotCQl9IGVsc2UgaWYgKCgqc3RkKSAmIFY0TDJfU1REX1BBTCkgeworCQlpZiAoKCpzdGQpICYgVjRMMl9TVERfUEFMKSB7CiAJCQlyZXQgPSB2aW5vX3NldF9kYXRhX25vcm0odmNzLCBWSU5PX0RBVEFfTk9STV9QQUwsCiAJCQkJCQkgJmZsYWdzKTsKIAkJfSBlbHNlIGlmICgoKnN0ZCkgJiBWNEwyX1NURF9OVFNDKSB7CkBAIC0zMjA3LDE4NSArMzA5OSwxNDQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9lbnVtX2ZtdChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZkKQogewotCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gZmQtPnR5cGU7Ci0JaW50IGluZGV4ID0gZmQtPmluZGV4OwotCWRwcmludGsoImZvcm1hdCBpbmRleCA9ICVkXG4iLCBpbmRleCk7CisJZHByaW50aygiZm9ybWF0IGluZGV4ID0gJWRcbiIsIGZkLT5pbmRleCk7CiAKLQlzd2l0Y2ggKGZkLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCWlmICgoZmQtPmluZGV4IDwgMCkgfHwKLQkJICAgIChmZC0+aW5kZXggPj0gVklOT19EQVRBX0ZNVF9DT1VOVCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZHByaW50aygiZm9ybWF0IG5hbWUgPSAlc1xuIiwKLQkJICAgICAgIHZpbm9fZGF0YV9mb3JtYXRzW2luZGV4XS5kZXNjcmlwdGlvbik7Ci0KLQkJbWVtc2V0KGZkLCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfZm10ZGVzYykpOwotCQlmZC0+aW5kZXggPSBpbmRleDsKLQkJZmQtPnR5cGUgPSB0eXBlOwotCQlmZC0+cGl4ZWxmb3JtYXQgPSB2aW5vX2RhdGFfZm9ybWF0c1tpbmRleF0ucGl4ZWxmb3JtYXQ7Ci0JCXN0cmNweShmZC0+ZGVzY3JpcHRpb24sIHZpbm9fZGF0YV9mb3JtYXRzW2luZGV4XS5kZXNjcmlwdGlvbik7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCWRlZmF1bHQ6CisJaWYgKGZkLT5pbmRleCA+PSBWSU5PX0RBVEFfRk1UX0NPVU5UKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJZHByaW50aygiZm9ybWF0IG5hbWUgPSAlc1xuIiwgdmlub19kYXRhX2Zvcm1hdHNbZmQtPmluZGV4XS5kZXNjcmlwdGlvbik7CiAKKwlmZC0+cGl4ZWxmb3JtYXQgPSB2aW5vX2RhdGFfZm9ybWF0c1tmZC0+aW5kZXhdLnBpeGVsZm9ybWF0OworCXN0cmNweShmZC0+ZGVzY3JpcHRpb24sIHZpbm9fZGF0YV9mb3JtYXRzW2ZkLT5pbmRleF0uZGVzY3JpcHRpb24pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl90cnlfZm10KHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgdGVtcHZjczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBmID0gJmYtPmZtdC5waXg7CiAKLQlzd2l0Y2ggKGYtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogewotCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwZiA9ICZmLT5mbXQucGl4OworCWRwcmludGsoInJlcXVlc3RlZDogdyA9ICVkLCBoID0gJWRcbiIsCisJCQlwZi0+d2lkdGgsIHBmLT5oZWlnaHQpOwogCi0JCWRwcmludGsoInJlcXVlc3RlZDogdyA9ICVkLCBoID0gJWRcbiIsCi0JCSAgICAgICBwZi0+d2lkdGgsIHBmLT5oZWlnaHQpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKKwltZW1jcHkoJnRlbXB2Y3MsIHZjcywgc2l6ZW9mKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0JCW1lbWNweSgmdGVtcHZjcywgdmNzLCBzaXplb2Yoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncykpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCQl0ZW1wdmNzLmRhdGFfZm9ybWF0ID0gdmlub19maW5kX2RhdGFfZm9ybWF0KHBmLT5waXhlbGZvcm1hdCk7Ci0JCWlmICh0ZW1wdmNzLmRhdGFfZm9ybWF0ID09IFZJTk9fREFUQV9GTVRfTk9ORSkgewotCQkJdGVtcHZjcy5kYXRhX2Zvcm1hdCA9IFZJTk9fREFUQV9GTVRfR1JFWTsKLQkJCXBmLT5waXhlbGZvcm1hdCA9Ci0JCQkJdmlub19kYXRhX2Zvcm1hdHNbdGVtcHZjcy5kYXRhX2Zvcm1hdF0uCi0JCQkJcGl4ZWxmb3JtYXQ7Ci0JCX0KLQotCQkvKiBkYXRhIGZvcm1hdCBtdXN0IGJlIHNldCBiZWZvcmUgY2xpcHBpbmcvc2NhbGluZyAqLwotCQl2aW5vX3NldF9zY2FsaW5nKCZ0ZW1wdmNzLCBwZi0+d2lkdGgsIHBmLT5oZWlnaHQpOwotCi0JCWRwcmludGsoImRhdGEgZm9ybWF0ID0gJXNcbiIsCi0JCSAgICAgICB2aW5vX2RhdGFfZm9ybWF0c1t0ZW1wdmNzLmRhdGFfZm9ybWF0XS5kZXNjcmlwdGlvbik7Ci0KLQkJcGYtPndpZHRoID0gKHRlbXB2Y3MuY2xpcHBpbmcucmlnaHQgLSB0ZW1wdmNzLmNsaXBwaW5nLmxlZnQpIC8KLQkJCXRlbXB2Y3MuZGVjaW1hdGlvbjsKLQkJcGYtPmhlaWdodCA9ICh0ZW1wdmNzLmNsaXBwaW5nLmJvdHRvbSAtIHRlbXB2Y3MuY2xpcHBpbmcudG9wKSAvCi0JCQl0ZW1wdmNzLmRlY2ltYXRpb247Ci0KLQkJcGYtPmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwotCQlwZi0+Ynl0ZXNwZXJsaW5lID0gdGVtcHZjcy5saW5lX3NpemU7Ci0JCXBmLT5zaXplaW1hZ2UgPSB0ZW1wdmNzLmxpbmVfc2l6ZSAqCi0JCQkodGVtcHZjcy5jbGlwcGluZy5ib3R0b20gLSB0ZW1wdmNzLmNsaXBwaW5nLnRvcCkgLwotCQkJdGVtcHZjcy5kZWNpbWF0aW9uOwotCQlwZi0+Y29sb3JzcGFjZSA9Ci0JCQl2aW5vX2RhdGFfZm9ybWF0c1t0ZW1wdmNzLmRhdGFfZm9ybWF0XS5jb2xvcnNwYWNlOwotCi0JCXBmLT5wcml2ID0gMDsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9nX2ZtdChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCi0JCQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXN3aXRjaCAoZi0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiB7Ci0JCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBmID0gJmYtPmZtdC5waXg7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0JCXBmLT53aWR0aCA9ICh2Y3MtPmNsaXBwaW5nLnJpZ2h0IC0gdmNzLT5jbGlwcGluZy5sZWZ0KSAvCi0JCQl2Y3MtPmRlY2ltYXRpb247Ci0JCXBmLT5oZWlnaHQgPSAodmNzLT5jbGlwcGluZy5ib3R0b20gLSB2Y3MtPmNsaXBwaW5nLnRvcCkgLwotCQkJdmNzLT5kZWNpbWF0aW9uOworCXRlbXB2Y3MuZGF0YV9mb3JtYXQgPSB2aW5vX2ZpbmRfZGF0YV9mb3JtYXQocGYtPnBpeGVsZm9ybWF0KTsKKwlpZiAodGVtcHZjcy5kYXRhX2Zvcm1hdCA9PSBWSU5PX0RBVEFfRk1UX05PTkUpIHsKKwkJdGVtcHZjcy5kYXRhX2Zvcm1hdCA9IFZJTk9fREFUQV9GTVRfR1JFWTsKIAkJcGYtPnBpeGVsZm9ybWF0ID0KLQkJCXZpbm9fZGF0YV9mb3JtYXRzW3Zjcy0+ZGF0YV9mb3JtYXRdLnBpeGVsZm9ybWF0OwotCi0JCXBmLT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQkJcGYtPmJ5dGVzcGVybGluZSA9IHZjcy0+bGluZV9zaXplOwotCQlwZi0+c2l6ZWltYWdlID0gdmNzLT5saW5lX3NpemUgKgotCQkJKHZjcy0+Y2xpcHBpbmcuYm90dG9tIC0gdmNzLT5jbGlwcGluZy50b3ApIC8KLQkJCXZjcy0+ZGVjaW1hdGlvbjsKLQkJcGYtPmNvbG9yc3BhY2UgPQotCQkJdmlub19kYXRhX2Zvcm1hdHNbdmNzLT5kYXRhX2Zvcm1hdF0uY29sb3JzcGFjZTsKLQotCQlwZi0+cHJpdiA9IDA7Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXZpbm9fZGF0YV9mb3JtYXRzW3RlbXB2Y3MuZGF0YV9mb3JtYXRdLgorCQkJcGl4ZWxmb3JtYXQ7CiAJfQogCisJLyogZGF0YSBmb3JtYXQgbXVzdCBiZSBzZXQgYmVmb3JlIGNsaXBwaW5nL3NjYWxpbmcgKi8KKwl2aW5vX3NldF9zY2FsaW5nKCZ0ZW1wdmNzLCBwZi0+d2lkdGgsIHBmLT5oZWlnaHQpOworCisJZHByaW50aygiZGF0YSBmb3JtYXQgPSAlc1xuIiwKKwkJCXZpbm9fZGF0YV9mb3JtYXRzW3RlbXB2Y3MuZGF0YV9mb3JtYXRdLmRlc2NyaXB0aW9uKTsKKworCXBmLT53aWR0aCA9ICh0ZW1wdmNzLmNsaXBwaW5nLnJpZ2h0IC0gdGVtcHZjcy5jbGlwcGluZy5sZWZ0KSAvCisJCXRlbXB2Y3MuZGVjaW1hdGlvbjsKKwlwZi0+aGVpZ2h0ID0gKHRlbXB2Y3MuY2xpcHBpbmcuYm90dG9tIC0gdGVtcHZjcy5jbGlwcGluZy50b3ApIC8KKwkJdGVtcHZjcy5kZWNpbWF0aW9uOworCisJcGYtPmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCXBmLT5ieXRlc3BlcmxpbmUgPSB0ZW1wdmNzLmxpbmVfc2l6ZTsKKwlwZi0+c2l6ZWltYWdlID0gdGVtcHZjcy5saW5lX3NpemUgKgorCQkodGVtcHZjcy5jbGlwcGluZy5ib3R0b20gLSB0ZW1wdmNzLmNsaXBwaW5nLnRvcCkgLworCQl0ZW1wdmNzLmRlY2ltYXRpb247CisJcGYtPmNvbG9yc3BhY2UgPQorCQl2aW5vX2RhdGFfZm9ybWF0c1t0ZW1wdmNzLmRhdGFfZm9ybWF0XS5jb2xvcnNwYWNlOworCisJcGYtPnByaXYgPSAwOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9zX2ZtdChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGYgPSAmZi0+Zm10LnBpeDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKKworCXBmLT53aWR0aCA9ICh2Y3MtPmNsaXBwaW5nLnJpZ2h0IC0gdmNzLT5jbGlwcGluZy5sZWZ0KSAvCisJCXZjcy0+ZGVjaW1hdGlvbjsKKwlwZi0+aGVpZ2h0ID0gKHZjcy0+Y2xpcHBpbmcuYm90dG9tIC0gdmNzLT5jbGlwcGluZy50b3ApIC8KKwkJdmNzLT5kZWNpbWF0aW9uOworCXBmLT5waXhlbGZvcm1hdCA9CisJCXZpbm9fZGF0YV9mb3JtYXRzW3Zjcy0+ZGF0YV9mb3JtYXRdLnBpeGVsZm9ybWF0OworCisJcGYtPmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCXBmLT5ieXRlc3BlcmxpbmUgPSB2Y3MtPmxpbmVfc2l6ZTsKKwlwZi0+c2l6ZWltYWdlID0gdmNzLT5saW5lX3NpemUgKgorCQkodmNzLT5jbGlwcGluZy5ib3R0b20gLSB2Y3MtPmNsaXBwaW5nLnRvcCkgLworCQl2Y3MtPmRlY2ltYXRpb247CisJcGYtPmNvbG9yc3BhY2UgPQorCQl2aW5vX2RhdGFfZm9ybWF0c1t2Y3MtPmRhdGFfZm9ybWF0XS5jb2xvcnNwYWNlOworCisJcGYtPnByaXYgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlub19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IGRhdGFfZm9ybWF0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGYgPSAmZi0+Zm10LnBpeDsKIAotCXN3aXRjaCAoZi0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiB7Ci0JCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBmID0gJmYtPmZtdC5waXg7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKKwlkYXRhX2Zvcm1hdCA9IHZpbm9fZmluZF9kYXRhX2Zvcm1hdChwZi0+cGl4ZWxmb3JtYXQpOwogCi0JCWRhdGFfZm9ybWF0ID0gdmlub19maW5kX2RhdGFfZm9ybWF0KHBmLT5waXhlbGZvcm1hdCk7Ci0KLQkJaWYgKGRhdGFfZm9ybWF0ID09IFZJTk9fREFUQV9GTVRfTk9ORSkgewotCQkJdmNzLT5kYXRhX2Zvcm1hdCA9IFZJTk9fREFUQV9GTVRfR1JFWTsKLQkJCXBmLT5waXhlbGZvcm1hdCA9Ci0JCQkJdmlub19kYXRhX2Zvcm1hdHNbdmNzLT5kYXRhX2Zvcm1hdF0uCi0JCQkJcGl4ZWxmb3JtYXQ7Ci0JCX0gZWxzZSB7Ci0JCQl2Y3MtPmRhdGFfZm9ybWF0ID0gZGF0YV9mb3JtYXQ7Ci0JCX0KLQotCQkvKiBkYXRhIGZvcm1hdCBtdXN0IGJlIHNldCBiZWZvcmUgY2xpcHBpbmcvc2NhbGluZyAqLwotCQl2aW5vX3NldF9zY2FsaW5nKHZjcywgcGYtPndpZHRoLCBwZi0+aGVpZ2h0KTsKLQotCQlkcHJpbnRrKCJkYXRhIGZvcm1hdCA9ICVzXG4iLAotCQkgICAgICAgdmlub19kYXRhX2Zvcm1hdHNbdmNzLT5kYXRhX2Zvcm1hdF0uZGVzY3JpcHRpb24pOwotCi0JCXBmLT53aWR0aCA9IHZjcy0+Y2xpcHBpbmcucmlnaHQgLSB2Y3MtPmNsaXBwaW5nLmxlZnQ7Ci0JCXBmLT5oZWlnaHQgPSB2Y3MtPmNsaXBwaW5nLmJvdHRvbSAtIHZjcy0+Y2xpcHBpbmcudG9wOwotCi0JCXBmLT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQkJcGYtPmJ5dGVzcGVybGluZSA9IHZjcy0+bGluZV9zaXplOwotCQlwZi0+c2l6ZWltYWdlID0gdmNzLT5saW5lX3NpemUgKgotCQkJKHZjcy0+Y2xpcHBpbmcuYm90dG9tIC0gdmNzLT5jbGlwcGluZy50b3ApIC8KLQkJCXZjcy0+ZGVjaW1hdGlvbjsKLQkJcGYtPmNvbG9yc3BhY2UgPQotCQkJdmlub19kYXRhX2Zvcm1hdHNbdmNzLT5kYXRhX2Zvcm1hdF0uY29sb3JzcGFjZTsKLQotCQlwZi0+cHJpdiA9IDA7Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGF0YV9mb3JtYXQgPT0gVklOT19EQVRBX0ZNVF9OT05FKSB7CisJCXZjcy0+ZGF0YV9mb3JtYXQgPSBWSU5PX0RBVEFfRk1UX0dSRVk7CisJCXBmLT5waXhlbGZvcm1hdCA9CisJCQl2aW5vX2RhdGFfZm9ybWF0c1t2Y3MtPmRhdGFfZm9ybWF0XS4KKwkJCXBpeGVsZm9ybWF0OworCX0gZWxzZSB7CisJCXZjcy0+ZGF0YV9mb3JtYXQgPSBkYXRhX2Zvcm1hdDsKIAl9CiAKKwkvKiBkYXRhIGZvcm1hdCBtdXN0IGJlIHNldCBiZWZvcmUgY2xpcHBpbmcvc2NhbGluZyAqLworCXZpbm9fc2V0X3NjYWxpbmcodmNzLCBwZi0+d2lkdGgsIHBmLT5oZWlnaHQpOworCisJZHByaW50aygiZGF0YSBmb3JtYXQgPSAlc1xuIiwKKwkgICAgICAgdmlub19kYXRhX2Zvcm1hdHNbdmNzLT5kYXRhX2Zvcm1hdF0uZGVzY3JpcHRpb24pOworCisJcGYtPndpZHRoID0gdmNzLT5jbGlwcGluZy5yaWdodCAtIHZjcy0+Y2xpcHBpbmcubGVmdDsKKwlwZi0+aGVpZ2h0ID0gdmNzLT5jbGlwcGluZy5ib3R0b20gLSB2Y3MtPmNsaXBwaW5nLnRvcDsKKworCXBmLT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwlwZi0+Ynl0ZXNwZXJsaW5lID0gdmNzLT5saW5lX3NpemU7CisJcGYtPnNpemVpbWFnZSA9IHZjcy0+bGluZV9zaXplICoKKwkJKHZjcy0+Y2xpcHBpbmcuYm90dG9tIC0gdmNzLT5jbGlwcGluZy50b3ApIC8KKwkJdmNzLT5kZWNpbWF0aW9uOworCXBmLT5jb2xvcnNwYWNlID0KKwkJdmlub19kYXRhX2Zvcm1hdHNbdmNzLT5kYXRhX2Zvcm1hdF0uY29sb3JzcGFjZTsKKworCXBmLT5wcml2ID0gMDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9jcm9wY2FwKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19jcm9wY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgICBzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjY2FwKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJY29uc3Qgc3RydWN0IHZpbm9fZGF0YV9ub3JtICpub3JtOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTM0MTUsOSArMzI2NiwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9nX2Nyb3Aoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAorc3RhdGljIGludCB2aW5vX2dfY3JvcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9jcm9wICpjKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXN3aXRjaCAoYy0+dHlwZSkgewpAQCAtMzQzOSw5ICszMjkxLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3NfY3JvcChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fc19jcm9wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgIHN0cnVjdCB2NGwyX2Nyb3AgKmMpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3dpdGNoIChjLT50eXBlKSB7CkBAIC0zNDYxLDEwOCArMzMxNCw4MyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9nX3Bhcm0oc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAorc3RhdGljIGludCB2aW5vX2dfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpzcCkKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0gKmNwID0gJnNwLT5wYXJtLmNhcHR1cmU7CiAKLQlzd2l0Y2ggKHNwLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6IHsKLQkJc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0gKmNwID0gJnNwLT5wYXJtLmNhcHR1cmU7Ci0JCW1lbXNldChjcCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtKSk7CisJY3AtPmNhcGFiaWxpdHkgPSBWNEwyX0NBUF9USU1FUEVSRlJBTUU7CisJY3AtPnRpbWVwZXJmcmFtZS5udW1lcmF0b3IgPSAxOwogCi0JCWNwLT5jYXBhYmlsaXR5ID0gVjRMMl9DQVBfVElNRVBFUkZSQU1FOwotCQljcC0+dGltZXBlcmZyYW1lLm51bWVyYXRvciA9IDE7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKKwljcC0+dGltZXBlcmZyYW1lLmRlbm9taW5hdG9yID0gdmNzLT5mcHM7CiAKLQkJY3AtPnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvciA9IHZjcy0+ZnBzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwogCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0JCS8vIFRPRE86IGNwLT5yZWFkYnVmZmVycyA9IHh4eDsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KKwkvKiBUT0RPOiBjcC0+cmVhZGJ1ZmZlcnMgPSB4eHg7ICovCiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfc19wYXJtKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19zX3Bhcm0oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICAgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqc3ApCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtICpjcCA9ICZzcC0+cGFybS5jYXB0dXJlOwogCi0Jc3dpdGNoIChzcC0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiB7Ci0JCXN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtICpjcCA9ICZzcC0+cGFybS5jYXB0dXJlOworCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQkJaWYgKChjcC0+dGltZXBlcmZyYW1lLm51bWVyYXRvciA9PSAwKSB8fAotCQkgICAgKGNwLT50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPT0gMCkpIHsKLQkJCS8qIHJlc2V0IGZyYW1lcmF0ZSAqLwotCQkJdmlub19zZXRfZGVmYXVsdF9mcmFtZXJhdGUodmNzKTsKLQkJfSBlbHNlIHsKLQkJCXZpbm9fc2V0X2ZyYW1lcmF0ZSh2Y3MsIGNwLT50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgLwotCQkJCQkgICBjcC0+dGltZXBlcmZyYW1lLm51bWVyYXRvcik7Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCQkvLyBUT0RPOiBzZXQgYnVmZmVycyBhY2NvcmRpbmcgdG8gY3AtPnJlYWRidWZmZXJzCi0JCWJyZWFrOworCWlmICgoY3AtPnRpbWVwZXJmcmFtZS5udW1lcmF0b3IgPT0gMCkgfHwKKwkgICAgKGNwLT50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPT0gMCkpIHsKKwkJLyogcmVzZXQgZnJhbWVyYXRlICovCisJCXZpbm9fc2V0X2RlZmF1bHRfZnJhbWVyYXRlKHZjcyk7CisJfSBlbHNlIHsKKwkJdmlub19zZXRfZnJhbWVyYXRlKHZjcywgY3AtPnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvciAvCisJCQkJICAgY3AtPnRpbWVwZXJmcmFtZS5udW1lcmF0b3IpOwogCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9yZXFidWZzKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgICBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmIpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwogCWlmICh2Y3MtPnJlYWRpbmcpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlzd2l0Y2ggKHJiLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6IHsKLQkJLy8gVE9ETzogY2hlY2sgcXVldWUgdHlwZQotCQlpZiAocmItPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSB7Ci0JCQlkcHJpbnRrKCJ0eXBlIG5vdCBtbWFwXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOworCS8qIFRPRE86IGNoZWNrIHF1ZXVlIHR5cGUgKi8KKwlpZiAocmItPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSB7CisJCWRwcmludGsoInR5cGUgbm90IG1tYXBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkcHJpbnRrKCJjb3VudCA9ICVkXG4iLCByYi0+Y291bnQpOworCWlmIChyYi0+Y291bnQgPiAwKSB7CisJCWlmICh2aW5vX2lzX2NhcHR1cmluZyh2Y3MpKSB7CisJCQlkcHJpbnRrKCJidXN5LCBjYXB0dXJpbmdcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCi0JCWRwcmludGsoImNvdW50ID0gJWRcbiIsIHJiLT5jb3VudCk7Ci0JCWlmIChyYi0+Y291bnQgPiAwKSB7Ci0JCQlpZiAodmlub19pc19jYXB0dXJpbmcodmNzKSkgewotCQkJCWRwcmludGsoImJ1c3ksIGNhcHR1cmluZ1xuIik7Ci0JCQkJcmV0dXJuIC1FQlVTWTsKLQkJCX0KLQotCQkJaWYgKHZpbm9fcXVldWVfaGFzX21hcHBlZF9idWZmZXJzKCZ2Y3MtPmZiX3F1ZXVlKSkgewotCQkJCWRwcmludGsoImJ1c3ksIGJ1ZmZlcnMgc3RpbGwgbWFwcGVkXG4iKTsKLQkJCQlyZXR1cm4gLUVCVVNZOwotCQkJfSBlbHNlIHsKLQkJCQl2Y3MtPnN0cmVhbWluZyA9IDA7Ci0JCQkJdmlub19xdWV1ZV9mcmVlKCZ2Y3MtPmZiX3F1ZXVlKTsKLQkJCQl2aW5vX3F1ZXVlX2luaXQoJnZjcy0+ZmJfcXVldWUsICZyYi0+Y291bnQpOwotCQkJfQorCQlpZiAodmlub19xdWV1ZV9oYXNfbWFwcGVkX2J1ZmZlcnMoJnZjcy0+ZmJfcXVldWUpKSB7CisJCQlkcHJpbnRrKCJidXN5LCBidWZmZXJzIHN0aWxsIG1hcHBlZFxuIik7CisJCQlyZXR1cm4gLUVCVVNZOwogCQl9IGVsc2UgewogCQkJdmNzLT5zdHJlYW1pbmcgPSAwOwotCQkJdmlub19jYXB0dXJlX3N0b3AodmNzKTsKIAkJCXZpbm9fcXVldWVfZnJlZSgmdmNzLT5mYl9xdWV1ZSk7CisJCQl2aW5vX3F1ZXVlX2luaXQoJnZjcy0+ZmJfcXVldWUsICZyYi0+Y291bnQpOwogCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQl2Y3MtPnN0cmVhbWluZyA9IDA7CisJCXZpbm9fY2FwdHVyZV9zdG9wKHZjcyk7CisJCXZpbm9fcXVldWVfZnJlZSgmdmNzLT5mYl9xdWV1ZSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zNjA2LDE1NiArMzQzNCwxMzUgQEAKIAkJZmItPmlkLCBmYi0+c2l6ZSwgZmItPmRhdGFfc2l6ZSwgZmItPm9mZnNldCk7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3F1ZXJ5YnVmKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICpmYjsKKwogCWlmICh2Y3MtPnJlYWRpbmcpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlzd2l0Y2ggKGItPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogewotCQlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmI7Ci0KLQkJLy8gVE9ETzogY2hlY2sgcXVldWUgdHlwZQotCQlpZiAoYi0+aW5kZXggPj0gdmlub19xdWV1ZV9nZXRfbGVuZ3RoKCZ2Y3MtPmZiX3F1ZXVlKSkgewotCQkJZHByaW50aygiaW52YWxpZCBpbmRleCA9ICVkXG4iLAotCQkJICAgICAgIGItPmluZGV4KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJZmIgPSB2aW5vX3F1ZXVlX2dldF9idWZmZXIoJnZjcy0+ZmJfcXVldWUsCi0JCQkJCSAgIGItPmluZGV4KTsKLQkJaWYgKGZiID09IE5VTEwpIHsKLQkJCWRwcmludGsoInZpbm9fcXVldWVfZ2V0X2J1ZmZlcigpIGZhaWxlZCIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQl2aW5vX3Y0bDJfZ2V0X2J1ZmZlcl9zdGF0dXModmNzLCBmYiwgYik7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgorCS8qIFRPRE86IGNoZWNrIHF1ZXVlIHR5cGUgKi8KKwlpZiAoYi0+aW5kZXggPj0gdmlub19xdWV1ZV9nZXRfbGVuZ3RoKCZ2Y3MtPmZiX3F1ZXVlKSkgeworCQlkcHJpbnRrKCJpbnZhbGlkIGluZGV4ID0gJWRcbiIsCisJCSAgICAgICBiLT5pbmRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWZiID0gdmlub19xdWV1ZV9nZXRfYnVmZmVyKCZ2Y3MtPmZiX3F1ZXVlLAorCQkJCSAgIGItPmluZGV4KTsKKwlpZiAoZmIgPT0gTlVMTCkgeworCQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX2dldF9idWZmZXIoKSBmYWlsZWQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmlub192NGwyX2dldF9idWZmZXJfc3RhdHVzKHZjcywgZmIsIGIpOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3FidWYoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAorc3RhdGljIGludCB2aW5vX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICpmYjsKKwlpbnQgcmV0OworCiAJaWYgKHZjcy0+cmVhZGluZykKIAkJcmV0dXJuIC1FQlVTWTsKIAotCXN3aXRjaCAoYi0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiB7Ci0JCXN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICpmYjsKLQkJaW50IHJldDsKLQotCQkvLyBUT0RPOiBjaGVjayBxdWV1ZSB0eXBlCi0JCWlmIChiLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkgewotCQkJZHByaW50aygidHlwZSBub3QgbW1hcFxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWZiID0gdmlub19jYXB0dXJlX2VucXVldWUodmNzLCBiLT5pbmRleCk7Ci0JCWlmIChmYiA9PSBOVUxMKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJdmlub192NGwyX2dldF9idWZmZXJfc3RhdHVzKHZjcywgZmIsIGIpOwotCi0JCWlmICh2Y3MtPnN0cmVhbWluZykgewotCQkJcmV0ID0gdmlub19jYXB0dXJlX25leHQodmNzLCAxKTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JZGVmYXVsdDoKKwkvKiBUT0RPOiBjaGVjayBxdWV1ZSB0eXBlICovCisJaWYgKGItPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSB7CisJCWRwcmludGsoInR5cGUgbm90IG1tYXBcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlmYiA9IHZpbm9fY2FwdHVyZV9lbnF1ZXVlKHZjcywgYi0+aW5kZXgpOworCWlmIChmYiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZpbm9fdjRsMl9nZXRfYnVmZmVyX3N0YXR1cyh2Y3MsIGZiLCBiKTsKKworCWlmICh2Y3MtPnN0cmVhbWluZykgeworCQlyZXQgPSB2aW5vX2NhcHR1cmVfbmV4dCh2Y3MsIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfZHFidWYoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAotCQkJICAgc3RydWN0IHY0bDJfYnVmZmVyICpiLAotCQkJICAgdW5zaWduZWQgaW50IG5vbmJsb2NraW5nKQorc3RhdGljIGludCB2aW5vX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJICAgc3RydWN0IHY0bDJfYnVmZmVyICpiKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJdW5zaWduZWQgaW50IG5vbmJsb2NraW5nID0gZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0s7CisJc3RydWN0IHZpbm9fZnJhbWVidWZmZXIgKmZiOworCXVuc2lnbmVkIGludCBpbmNvbWluZywgb3V0Z29pbmc7CisJaW50IGVycjsKKwogCWlmICh2Y3MtPnJlYWRpbmcpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlzd2l0Y2ggKGItPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogewotCQlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmI7Ci0JCXVuc2lnbmVkIGludCBpbmNvbWluZywgb3V0Z29pbmc7Ci0JCWludCBlcnI7CisJLyogVE9ETzogY2hlY2sgcXVldWUgdHlwZSAqLwogCi0JCS8vIFRPRE86IGNoZWNrIHF1ZXVlIHR5cGUKKwllcnIgPSB2aW5vX3F1ZXVlX2dldF9pbmNvbWluZygmdmNzLT5mYl9xdWV1ZSwgJmluY29taW5nKTsKKwlpZiAoZXJyKSB7CisJCWRwcmludGsoInZpbm9fcXVldWVfZ2V0X2luY29taW5nKCkgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWVyciA9IHZpbm9fcXVldWVfZ2V0X291dGdvaW5nKCZ2Y3MtPmZiX3F1ZXVlLCAmb3V0Z29pbmcpOworCWlmIChlcnIpIHsKKwkJZHByaW50aygidmlub19xdWV1ZV9nZXRfb3V0Z29pbmcoKSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLQkJZXJyID0gdmlub19xdWV1ZV9nZXRfaW5jb21pbmcoJnZjcy0+ZmJfcXVldWUsICZpbmNvbWluZyk7Ci0JCWlmIChlcnIpIHsKLQkJCWRwcmludGsoInZpbm9fcXVldWVfZ2V0X2luY29taW5nKCkgZmFpbGVkXG4iKTsKKwlkcHJpbnRrKCJpbmNvbWluZyA9ICVkLCBvdXRnb2luZyA9ICVkXG4iLCBpbmNvbWluZywgb3V0Z29pbmcpOworCisJaWYgKG91dGdvaW5nID09IDApIHsKKwkJaWYgKGluY29taW5nID09IDApIHsKKwkJCWRwcmludGsoIm5vIGluY29taW5nIG9yIG91dGdvaW5nIGJ1ZmZlcnNcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJZXJyID0gdmlub19xdWV1ZV9nZXRfb3V0Z29pbmcoJnZjcy0+ZmJfcXVldWUsICZvdXRnb2luZyk7Ci0JCWlmIChlcnIpIHsKLQkJCWRwcmludGsoInZpbm9fcXVldWVfZ2V0X291dGdvaW5nKCkgZmFpbGVkXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQlpZiAobm9uYmxvY2tpbmcpIHsKKwkJCWRwcmludGsoIm5vbi1ibG9ja2luZyBJL08gd2FzIHNlbGVjdGVkIGFuZCAiCisJCQkJInRoZXJlIGFyZSBubyBidWZmZXJzIHRvIGRlcXVldWVcbiIpOworCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KIAotCQlkcHJpbnRrKCJpbmNvbWluZyA9ICVkLCBvdXRnb2luZyA9ICVkXG4iLCBpbmNvbWluZywgb3V0Z29pbmcpOwotCi0JCWlmIChvdXRnb2luZyA9PSAwKSB7Ci0JCQlpZiAoaW5jb21pbmcgPT0gMCkgewotCQkJCWRwcmludGsoIm5vIGluY29taW5nIG9yIG91dGdvaW5nIGJ1ZmZlcnNcbiIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJaWYgKG5vbmJsb2NraW5nKSB7Ci0JCQkJZHByaW50aygibm9uLWJsb2NraW5nIEkvTyB3YXMgc2VsZWN0ZWQgYW5kICIKLQkJCQkJInRoZXJlIGFyZSBubyBidWZmZXJzIHRvIGRlcXVldWVcbiIpOwotCQkJCXJldHVybiAtRUFHQUlOOwotCQkJfQotCisJCWVyciA9IHZpbm9fd2FpdF9mb3JfZnJhbWUodmNzKTsKKwkJaWYgKGVycikgewogCQkJZXJyID0gdmlub193YWl0X2Zvcl9mcmFtZSh2Y3MpOwogCQkJaWYgKGVycikgewotCQkJCWVyciA9IHZpbm9fd2FpdF9mb3JfZnJhbWUodmNzKTsKLQkJCQlpZiAoZXJyKSB7Ci0JCQkJCS8qIGludGVycnVwdGVkIG9yCi0JCQkJCSAqIG5vIGZyYW1lcyBjYXB0dXJlZCBiZWNhdXNlCi0JCQkJCSAqIG9mIGZyYW1lIHNraXBwaW5nICovCi0JCQkJCS8vIHZpbm9fY2FwdHVyZV9mYWlsZWQodmNzKTsKLQkJCQkJcmV0dXJuIC1FSU87Ci0JCQkJfQorCQkJCS8qIGludGVycnVwdGVkIG9yIG5vIGZyYW1lcyBjYXB0dXJlZCBiZWNhdXNlIG9mCisJCQkJICogZnJhbWUgc2tpcHBpbmcgKi8KKwkJCQkvKiB2aW5vX2NhcHR1cmVfZmFpbGVkKHZjcyk7ICovCisJCQkJcmV0dXJuIC1FSU87CiAJCQl9CiAJCX0KLQotCQlmYiA9IHZpbm9fcXVldWVfcmVtb3ZlKCZ2Y3MtPmZiX3F1ZXVlLCAmYi0+aW5kZXgpOwotCQlpZiAoZmIgPT0gTlVMTCkgewotCQkJZHByaW50aygidmlub19xdWV1ZV9yZW1vdmUoKSBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQllcnIgPSB2aW5vX2NoZWNrX2J1ZmZlcih2Y3MsIGZiKTsKLQotCQl2aW5vX3Y0bDJfZ2V0X2J1ZmZlcl9zdGF0dXModmNzLCBmYiwgYik7Ci0KLQkJaWYgKGVycikKLQkJCXJldHVybiAtRUlPOwotCi0JCWJyZWFrOwogCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgorCisJZmIgPSB2aW5vX3F1ZXVlX3JlbW92ZSgmdmNzLT5mYl9xdWV1ZSwgJmItPmluZGV4KTsKKwlpZiAoZmIgPT0gTlVMTCkgeworCQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX3JlbW92ZSgpIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWVyciA9IHZpbm9fY2hlY2tfYnVmZmVyKHZjcywgZmIpOworCisJdmlub192NGwyX2dldF9idWZmZXJfc3RhdHVzKHZjcywgZmIsIGIpOworCisJaWYgKGVycikKKwkJcmV0dXJuIC1FSU87CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfc3RyZWFtb24oc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzKQorc3RhdGljIGludCB2aW5vX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQllbnVtIHY0bDJfYnVmX3R5cGUgaSkKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXVuc2lnbmVkIGludCBpbmNvbWluZzsKIAlpbnQgcmV0OwogCWlmICh2Y3MtPnJlYWRpbmcpCkBAIC0zNzkyLDggKzM1OTksMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfc3RyZWFtb2ZmKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcykKK3N0YXRpYyBpbnQgdmlub19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCWVudW0gdjRsMl9idWZfdHlwZSBpKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaWYgKHZjcy0+cmVhZGluZykKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtMzgwNiw5ICszNjE1LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3F1ZXJ5Y3RybChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgICAgIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcXVlcnljdHJsKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAlpbnQgZXJyID0gMDsKQEAgLTM4NTUsOSArMzY2NSwxMCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX2dfY3RybChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmNvbnRyb2wpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCWludCBlcnIgPSAwOwpAQCAtMzg2Niw1NiArMzY3NywzOCBAQAogCiAJc3dpdGNoICh2Y3MtPmlucHV0KSB7CiAJY2FzZSBWSU5PX0lOUFVUX0QxOiB7Ci0JCXN0cnVjdCBpbmR5Y2FtX2NvbnRyb2wgaW5keWNhbV9jdHJsOwotCisJCWVyciA9IC1FSU5WQUw7CiAJCWZvciAoaSA9IDA7IGkgPCBWSU5PX0lORFlDQU1fVjRMMl9DT05UUk9MX0NPVU5UOyBpKyspIHsKLQkJCWlmICh2aW5vX2luZHljYW1fdjRsMl9jb250cm9sc1tpXS5pZCA9PQotCQkJICAgIGNvbnRyb2wtPmlkKSB7Ci0JCQkJZ290byBmb3VuZDE7CisJCQlpZiAodmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbaV0uaWQgPT0gY29udHJvbC0+aWQpIHsKKwkJCQllcnIgPSAwOworCQkJCWJyZWFrOwogCQkJfQogCQl9CiAKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0KLWZvdW5kMToKLQkJaW5keWNhbV9jdHJsLnR5cGUgPSB2aW5vX2luZHljYW1fdjRsMl9jb250cm9sc1tpXS5yZXNlcnZlZFswXTsKLQotCQllcnIgPSBpMmNfY2FtZXJhX2NvbW1hbmQoREVDT0RFUl9JTkRZQ0FNX0dFVF9DT05UUk9MLAotCQkJCQkgJmluZHljYW1fY3RybCk7Ci0JCWlmIChlcnIpIHsKLQkJCWVyciA9IC1FSU5WQUw7CisJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKLQkJfQogCi0JCWNvbnRyb2wtPnZhbHVlID0gaW5keWNhbV9jdHJsLnZhbHVlOworCQllcnIgPSBjYW1lcmFfY2FsbChjb3JlLCBnX2N0cmwsIGNvbnRyb2wpOworCQlpZiAoZXJyKQorCQkJZXJyID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQogCWNhc2UgVklOT19JTlBVVF9DT01QT1NJVEU6CiAJY2FzZSBWSU5PX0lOUFVUX1NWSURFTzogewotCQlzdHJ1Y3Qgc2FhNzE5MV9jb250cm9sIHNhYTcxOTFfY3RybDsKLQorCQllcnIgPSAtRUlOVkFMOwogCQlmb3IgKGkgPSAwOyBpIDwgVklOT19TQUE3MTkxX1Y0TDJfQ09OVFJPTF9DT1VOVDsgaSsrKSB7Ci0JCQlpZiAodmlub19zYWE3MTkxX3Y0bDJfY29udHJvbHNbaV0uaWQgPT0KLQkJCSAgICBjb250cm9sLT5pZCkgewotCQkJCWdvdG8gZm91bmQyOworCQkJaWYgKHZpbm9fc2FhNzE5MV92NGwyX2NvbnRyb2xzW2ldLmlkID09IGNvbnRyb2wtPmlkKSB7CisJCQkJZXJyID0gMDsKKwkJCQlicmVhazsKIAkJCX0KIAkJfQogCi0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCi1mb3VuZDI6Ci0JCXNhYTcxOTFfY3RybC50eXBlID0gdmlub19zYWE3MTkxX3Y0bDJfY29udHJvbHNbaV0ucmVzZXJ2ZWRbMF07Ci0KLQkJZXJyID0gaTJjX2RlY29kZXJfY29tbWFuZChERUNPREVSX1NBQTcxOTFfR0VUX0NPTlRST0wsCi0JCQkJCSAgJnNhYTcxOTFfY3RybCk7Ci0JCWlmIChlcnIpIHsKLQkJCWVyciA9IC1FSU5WQUw7CisJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKLQkJfQogCi0JCWNvbnRyb2wtPnZhbHVlID0gc2FhNzE5MV9jdHJsLnZhbHVlOworCQllcnIgPSBkZWNvZGVyX2NhbGwoY29yZSwgZ19jdHJsLCBjb250cm9sKTsKKwkJaWYgKGVycikKKwkJCWVyciA9IC1FSU5WQUw7CiAJCWJyZWFrOwogCX0KIAlkZWZhdWx0OgpAQCAtMzkyOCw5ICszNzIxLDEwIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfc19jdHJsKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY29udHJvbCkKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAJaW50IGVyciA9IDA7CkBAIC0zOTQ0LDY1ICszNzM4LDQzIEBACiAKIAlzd2l0Y2ggKHZjcy0+aW5wdXQpIHsKIAljYXNlIFZJTk9fSU5QVVRfRDE6IHsKLQkJc3RydWN0IGluZHljYW1fY29udHJvbCBpbmR5Y2FtX2N0cmw7Ci0KKwkJZXJyID0gLUVJTlZBTDsKIAkJZm9yIChpID0gMDsgaSA8IFZJTk9fSU5EWUNBTV9WNEwyX0NPTlRST0xfQ09VTlQ7IGkrKykgewotCQkJaWYgKHZpbm9faW5keWNhbV92NGwyX2NvbnRyb2xzW2ldLmlkID09Ci0JCQkgICAgY29udHJvbC0+aWQpIHsKLQkJCQlpZiAoKGNvbnRyb2wtPnZhbHVlID49Ci0JCQkJICAgICB2aW5vX2luZHljYW1fdjRsMl9jb250cm9sc1tpXS5taW5pbXVtKQotCQkJCSAgICAmJiAoY29udHJvbC0+dmFsdWUgPD0KLQkJCQkJdmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbaV0uCi0JCQkJCW1heGltdW0pKSB7Ci0JCQkJCWdvdG8gZm91bmQxOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWVyciA9IC1FUkFOR0U7Ci0JCQkJCWdvdG8gb3V0OwotCQkJCX0KKwkJCWlmICh2aW5vX2luZHljYW1fdjRsMl9jb250cm9sc1tpXS5pZCA9PSBjb250cm9sLT5pZCkgeworCQkJCWVyciA9IDA7CisJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQotZm91bmQxOgotCQlpbmR5Y2FtX2N0cmwudHlwZSA9IHZpbm9faW5keWNhbV92NGwyX2NvbnRyb2xzW2ldLnJlc2VydmVkWzBdOwotCQlpbmR5Y2FtX2N0cmwudmFsdWUgPSBjb250cm9sLT52YWx1ZTsKLQotCQllcnIgPSBpMmNfY2FtZXJhX2NvbW1hbmQoREVDT0RFUl9JTkRZQ0FNX1NFVF9DT05UUk9MLAotCQkJCQkgJmluZHljYW1fY3RybCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwkJaWYgKGNvbnRyb2wtPnZhbHVlIDwgdmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbaV0ubWluaW11bSB8fAorCQkgICAgY29udHJvbC0+dmFsdWUgPiB2aW5vX2luZHljYW1fdjRsMl9jb250cm9sc1tpXS5tYXhpbXVtKSB7CisJCQllcnIgPSAtRVJBTkdFOworCQkJZ290byBvdXQ7CisJCX0KKwkJZXJyID0gY2FtZXJhX2NhbGwoY29yZSwgc19jdHJsLCBjb250cm9sKTsKIAkJaWYgKGVycikKIAkJCWVyciA9IC1FSU5WQUw7CiAJCWJyZWFrOwogCX0KIAljYXNlIFZJTk9fSU5QVVRfQ09NUE9TSVRFOgogCWNhc2UgVklOT19JTlBVVF9TVklERU86IHsKLQkJc3RydWN0IHNhYTcxOTFfY29udHJvbCBzYWE3MTkxX2N0cmw7Ci0KKwkJZXJyID0gLUVJTlZBTDsKIAkJZm9yIChpID0gMDsgaSA8IFZJTk9fU0FBNzE5MV9WNEwyX0NPTlRST0xfQ09VTlQ7IGkrKykgewotCQkJaWYgKHZpbm9fc2FhNzE5MV92NGwyX2NvbnRyb2xzW2ldLmlkID09Ci0JCQkgICAgY29udHJvbC0+aWQpIHsKLQkJCQlpZiAoKGNvbnRyb2wtPnZhbHVlID49Ci0JCQkJICAgICB2aW5vX3NhYTcxOTFfdjRsMl9jb250cm9sc1tpXS5taW5pbXVtKQotCQkJCSAgICAmJiAoY29udHJvbC0+dmFsdWUgPD0KLQkJCQkJdmlub19zYWE3MTkxX3Y0bDJfY29udHJvbHNbaV0uCi0JCQkJCW1heGltdW0pKSB7Ci0JCQkJCWdvdG8gZm91bmQyOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWVyciA9IC1FUkFOR0U7Ci0JCQkJCWdvdG8gb3V0OwotCQkJCX0KKwkJCWlmICh2aW5vX3NhYTcxOTFfdjRsMl9jb250cm9sc1tpXS5pZCA9PSBjb250cm9sLT5pZCkgeworCQkJCWVyciA9IDA7CisJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwkJaWYgKGNvbnRyb2wtPnZhbHVlIDwgdmlub19zYWE3MTkxX3Y0bDJfY29udHJvbHNbaV0ubWluaW11bSB8fAorCQkgICAgY29udHJvbC0+dmFsdWUgPiB2aW5vX3NhYTcxOTFfdjRsMl9jb250cm9sc1tpXS5tYXhpbXVtKSB7CisJCQllcnIgPSAtRVJBTkdFOworCQkJZ290byBvdXQ7CisJCX0KIAotZm91bmQyOgotCQlzYWE3MTkxX2N0cmwudHlwZSA9IHZpbm9fc2FhNzE5MV92NGwyX2NvbnRyb2xzW2ldLnJlc2VydmVkWzBdOwotCQlzYWE3MTkxX2N0cmwudmFsdWUgPSBjb250cm9sLT52YWx1ZTsKLQotCQllcnIgPSBpMmNfZGVjb2Rlcl9jb21tYW5kKERFQ09ERVJfU0FBNzE5MV9TRVRfQ09OVFJPTCwKLQkJCQkJICAmc2FhNzE5MV9jdHJsKTsKKwkJZXJyID0gZGVjb2Rlcl9jYWxsKGNvcmUsIHNfY3RybCwgY29udHJvbCk7CiAJCWlmIChlcnIpCiAJCQllcnIgPSAtRUlOVkFMOwogCQlicmVhazsKQEAgLTQyMzMsMTE2ICs0MDA1LDkgQEAKIAkJcmV0ID0gUE9MTElOIHwgUE9MTFJETk9STTsKIAogZXJyb3I6Ci0KIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgbG9uZyB2aW5vX2RvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotI2lmZGVmIFZJTk9fREVCVUcKLQlzd2l0Y2ggKF9JT0NfVFlQRShjbWQpKSB7Ci0JY2FzZSAndic6Ci0JCWRwcmludGsoImlvY3RsKCk6IFY0TDEgdW5zdXBwb3J0ZWQgKDB4JTA4eClcbiIsIGNtZCk7Ci0JCWJyZWFrOwotCWNhc2UgJ1YnOgotCQlkcHJpbnRrKCJpb2N0bCgpOiBWNEwyICVzICgweCUwOHgpXG4iLAotCQkJdjRsMl9pb2N0bF9uYW1lc1tfSU9DX05SKGNtZCldLCBjbWQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkcHJpbnRrKCJpb2N0bCgpOiB1bnN1cHBvcnRlZCBjb21tYW5kIDB4JTA4eFxuIiwgY21kKTsKLQl9Ci0jZW5kaWYKLQotCXN3aXRjaCAoY21kKSB7Ci0JLyogVjRMMiBpbnRlcmZhY2UgKi8KLQljYXNlIFZJRElPQ19RVUVSWUNBUDogewotCQl2aW5vX3Y0bDJfcXVlcnljYXAoYXJnKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DX0VOVU1JTlBVVDogewotCQlyZXR1cm4gdmlub192NGwyX2VudW1pbnB1dCh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX0dfSU5QVVQ6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9nX2lucHV0KHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfU19JTlBVVDogewotCQlyZXR1cm4gdmlub192NGwyX3NfaW5wdXQodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19FTlVNU1REOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfZW51bXN0ZCh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX1FVRVJZU1REOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfcXVlcnlzdGQodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19HX1NURDogewotCQlyZXR1cm4gdmlub192NGwyX2dfc3RkKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfU19TVEQ6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9zX3N0ZCh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX0VOVU1fRk1UOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfZW51bV9mbXQodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19UUllfRk1UOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfdHJ5X2ZtdCh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX0dfRk1UOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfZ19mbXQodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19TX0ZNVDogewotCQlyZXR1cm4gdmlub192NGwyX3NfZm10KHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfQ1JPUENBUDogewotCQlyZXR1cm4gdmlub192NGwyX2Nyb3BjYXAodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19HX0NST1A6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9nX2Nyb3AodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19TX0NST1A6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9zX2Nyb3AodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19HX1BBUk06IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9nX3Bhcm0odmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19TX1BBUk06IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9zX3Bhcm0odmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19SRVFCVUZTOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfcmVxYnVmcyh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX1FVRVJZQlVGOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfcXVlcnlidWYodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19RQlVGOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfcWJ1Zih2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX0RRQlVGOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfZHFidWYodmNzLCBhcmcsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQl9Ci0JY2FzZSBWSURJT0NfU1RSRUFNT046IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9zdHJlYW1vbih2Y3MpOwotCX0KLQljYXNlIFZJRElPQ19TVFJFQU1PRkY6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9zdHJlYW1vZmYodmNzKTsKLQl9Ci0JY2FzZSBWSURJT0NfUVVFUllDVFJMOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfcXVlcnljdHJsKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfR19DVFJMOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfZ19jdHJsKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfU19DVFJMOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfc19jdHJsKHZjcywgYXJnKTsKLQl9Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGxvbmcgdmlub19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC00MzUyLDcgKzQwMTcsNyBAQAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZjcy0+bXV0ZXgpKQogCQlyZXR1cm4gLUVJTlRSOwogCi0JcmV0ID0gdmlkZW9fdXNlcmNvcHkoZmlsZSwgY21kLCBhcmcsIHZpbm9fZG9faW9jdGwpOworCXJldCA9IHZpZGVvX2lvY3RsMihmaWxlLCBjbWQsIGFyZyk7CiAKIAltdXRleF91bmxvY2soJnZjcy0+bXV0ZXgpOwogCkBAIC00MzY0LDQ1ICs0MDI5LDc1IEBACiAvKiBfX2luaXRkYXRhICovCiBzdGF0aWMgaW50IHZpbm9faW5pdF9zdGFnZTsKIAorY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZpbm9faW9jdGxfb3BzID0geworCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCAgICAgPSB2aW5vX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwIAkgICAgID0gdmlub19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCAgCSAgICAgPSB2aW5vX3NfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAJICAgICA9IHZpbm9fdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2NfcXVlcnljYXAgICAgCSAgICAgPSB2aW5vX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZW51bV9pbnB1dCAgIAkgICAgID0gdmlub19lbnVtX2lucHV0LAorCS52aWRpb2NfZ19pbnB1dCAgICAgIAkgICAgID0gdmlub19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dCAgICAgIAkgICAgID0gdmlub19zX2lucHV0LAorCS52aWRpb2NfZ19zdGQgCQkgICAgID0gdmlub19nX3N0ZCwKKwkudmlkaW9jX3Nfc3RkIAkJICAgICA9IHZpbm9fc19zdGQsCisJLnZpZGlvY19xdWVyeXN0ZCAgICAgICAgICAgICA9IHZpbm9fcXVlcnlzdGQsCisJLnZpZGlvY19jcm9wY2FwICAgICAgCSAgICAgPSB2aW5vX2Nyb3BjYXAsCisJLnZpZGlvY19zX2Nyb3AgICAgICAgCSAgICAgPSB2aW5vX3NfY3JvcCwKKwkudmlkaW9jX2dfY3JvcCAgICAgICAJICAgICA9IHZpbm9fZ19jcm9wLAorCS52aWRpb2Nfc19wYXJtIAkJICAgICA9IHZpbm9fc19wYXJtLAorCS52aWRpb2NfZ19wYXJtIAkJICAgICA9IHZpbm9fZ19wYXJtLAorCS52aWRpb2NfcmVxYnVmcyAgICAgICAgICAgICAgPSB2aW5vX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZiAgICAgICAgICAgICA9IHZpbm9fcXVlcnlidWYsCisJLnZpZGlvY19xYnVmICAgICAgICAgICAgICAgICA9IHZpbm9fcWJ1ZiwKKwkudmlkaW9jX2RxYnVmICAgICAgICAgICAgICAgID0gdmlub19kcWJ1ZiwKKwkudmlkaW9jX3N0cmVhbW9uICAgICAgICAgICAgID0gdmlub19zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZiAgICAgICAgICAgID0gdmlub19zdHJlYW1vZmYsCisJLnZpZGlvY19xdWVyeWN0cmwgICAgICAgICAgICA9IHZpbm9fcXVlcnljdHJsLAorCS52aWRpb2NfZ19jdHJsICAgICAgICAgICAgICAgPSB2aW5vX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCAgICAgICAgICAgICAgID0gdmlub19zX2N0cmwsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZpbm9fZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gdmlub19vcGVuLAogCS5yZWxlYXNlCT0gdmlub19jbG9zZSwKLQkuaW9jdGwJCT0gdmlub19pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwJPSB2aW5vX2lvY3RsLAogCS5tbWFwCQk9IHZpbm9fbW1hcCwKIAkucG9sbAkJPSB2aW5vX3BvbGwsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB2NGxfZGV2aWNlX3RlbXBsYXRlID0geworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgdmRldl90ZW1wbGF0ZSA9IHsKIAkubmFtZQkJPSAiTk9UIFNFVCIsCiAJLmZvcHMJCT0gJnZpbm9fZm9wcywKKwkuaW9jdGxfb3BzIAk9ICZ2aW5vX2lvY3RsX29wcywKKwkudHZub3JtcyAJPSBWNEwyX1NURF9OVFNDIHwgVjRMMl9TVERfUEFMIHwgVjRMMl9TVERfU0VDQU0sCiAJLm1pbm9yCQk9IC0xLAogfTsKIAogc3RhdGljIHZvaWQgdmlub19tb2R1bGVfY2xlYW51cChpbnQgc3RhZ2UpCiB7CiAJc3dpdGNoKHN0YWdlKSB7CisJY2FzZSAxMToKKwkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uodmlub19kcnZkYXRhLT5iLnZkZXYpOworCQl2aW5vX2RydmRhdGEtPmIudmRldiA9IE5VTEw7CiAJY2FzZSAxMDoKLQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uodmlub19kcnZkYXRhLT5iLnY0bF9kZXZpY2UpOwotCQl2aW5vX2RydmRhdGEtPmIudjRsX2RldmljZSA9IE5VTEw7CisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZpbm9fZHJ2ZGF0YS0+YS52ZGV2KTsKKwkJdmlub19kcnZkYXRhLT5hLnZkZXYgPSBOVUxMOwogCWNhc2UgOToKLQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uodmlub19kcnZkYXRhLT5hLnY0bF9kZXZpY2UpOwotCQl2aW5vX2RydmRhdGEtPmEudjRsX2RldmljZSA9IE5VTEw7CisJCWkyY19kZWxfYWRhcHRlcigmdmlub19pMmNfYWRhcHRlcik7CiAJY2FzZSA4OgotCQl2aW5vX2kyY19kZWxfYnVzKCk7Ci0JY2FzZSA3OgogCQlmcmVlX2lycShTR0lfVklOT19JUlEsIE5VTEwpOworCWNhc2UgNzoKKwkJaWYgKHZpbm9fZHJ2ZGF0YS0+Yi52ZGV2KSB7CisJCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh2aW5vX2RydmRhdGEtPmIudmRldik7CisJCQl2aW5vX2RydmRhdGEtPmIudmRldiA9IE5VTEw7CisJCX0KIAljYXNlIDY6Ci0JCWlmICh2aW5vX2RydmRhdGEtPmIudjRsX2RldmljZSkgewotCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2Uodmlub19kcnZkYXRhLT5iLnY0bF9kZXZpY2UpOwotCQkJdmlub19kcnZkYXRhLT5iLnY0bF9kZXZpY2UgPSBOVUxMOworCQlpZiAodmlub19kcnZkYXRhLT5hLnZkZXYpIHsKKwkJCXZpZGVvX2RldmljZV9yZWxlYXNlKHZpbm9fZHJ2ZGF0YS0+YS52ZGV2KTsKKwkJCXZpbm9fZHJ2ZGF0YS0+YS52ZGV2ID0gTlVMTDsKIAkJfQogCWNhc2UgNToKLQkJaWYgKHZpbm9fZHJ2ZGF0YS0+YS52NGxfZGV2aWNlKSB7Ci0JCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh2aW5vX2RydmRhdGEtPmEudjRsX2RldmljZSk7Ci0JCQl2aW5vX2RydmRhdGEtPmEudjRsX2RldmljZSA9IE5VTEw7Ci0JCX0KLQljYXNlIDQ6CiAJCS8qIGFsbCBlbnRyaWVzIGluIGRtYV9jcHUgZHVtbXkgdGFibGUgaGF2ZSB0aGUgc2FtZSBhZGRyZXNzICovCiAJCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwKIAkJCQkgdmlub19kcnZkYXRhLT5kdW1teV9kZXNjX3RhYmxlLmRtYV9jcHVbMF0sCkBAIC00NDEyLDggKzQxMDcsMTAgQEAKIAkJCQkgICh2b2lkICopdmlub19kcnZkYXRhLT4KIAkJCQkgIGR1bW15X2Rlc2NfdGFibGUuZG1hX2NwdSwKIAkJCQkgIHZpbm9fZHJ2ZGF0YS0+ZHVtbXlfZGVzY190YWJsZS5kbWEpOwotCWNhc2UgMzoKKwljYXNlIDQ6CiAJCWZyZWVfcGFnZSh2aW5vX2RydmRhdGEtPmR1bW15X3BhZ2UpOworCWNhc2UgMzoKKwkJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcigmdmlub19kcnZkYXRhLT52NGwyX2Rldik7CiAJY2FzZSAyOgogCQlrZnJlZSh2aW5vX2RydmRhdGEpOwogCWNhc2UgMToKQEAgLTQ0NjgsNiArNDE2NSw3IEBACiBzdGF0aWMgaW50IHZpbm9faW5pdCh2b2lkKQogewogCWRtYV9hZGRyX3QgZG1hX2R1bW15X2FkZHJlc3M7CisJaW50IGVycjsKIAlpbnQgaTsKIAogCXZpbm9fZHJ2ZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2aW5vX3NldHRpbmdzKSwgR0ZQX0tFUk5FTCk7CkBAIC00NDc2LDYgKzQxNzQsMTIgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXZpbm9faW5pdF9zdGFnZSsrOworCXN0cmxjcHkodmlub19kcnZkYXRhLT52NGwyX2Rldi5uYW1lLCAidmlubyIsCisJCQlzaXplb2Yodmlub19kcnZkYXRhLT52NGwyX2Rldi5uYW1lKSk7CisJZXJyID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgJnZpbm9fZHJ2ZGF0YS0+djRsMl9kZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJdmlub19pbml0X3N0YWdlKys7CiAKIAkvKiBjcmVhdGUgYSBkdW1teSBkbWEgZGVzY3JpcHRvciAqLwogCXZpbm9fZHJ2ZGF0YS0+ZHVtbXlfcGFnZSA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CkBAIC00NTQyLDI1ICs0MjQ2LDI3IEBACiAJc3Bpbl9sb2NrX2luaXQoJnZjcy0+ZmJfcXVldWUucXVldWVfbG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdmNzLT5mYl9xdWV1ZS5mcmFtZV93YWl0X3F1ZXVlKTsKIAotCXZjcy0+djRsX2RldmljZSA9IHZpZGVvX2RldmljZV9hbGxvYygpOwotCWlmICghdmNzLT52NGxfZGV2aWNlKSB7CisJdmNzLT52ZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKCF2Y3MtPnZkZXYpIHsKIAkJdmlub19tb2R1bGVfY2xlYW51cCh2aW5vX2luaXRfc3RhZ2UpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJdmlub19pbml0X3N0YWdlKys7CiAKLQltZW1jcHkodmNzLT52NGxfZGV2aWNlLCAmdjRsX2RldmljZV90ZW1wbGF0ZSwKKwltZW1jcHkodmNzLT52ZGV2LCAmdmRldl90ZW1wbGF0ZSwKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCB2aWRlb19kZXZpY2UpKTsKLQlzdHJjcHkodmNzLT52NGxfZGV2aWNlLT5uYW1lLCBuYW1lKTsKLQl2Y3MtPnY0bF9kZXZpY2UtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKKwlzdHJjcHkodmNzLT52ZGV2LT5uYW1lLCBuYW1lKTsKKwl2Y3MtPnZkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKKwl2Y3MtPnZkZXYtPnY0bDJfZGV2ID0gJnZpbm9fZHJ2ZGF0YS0+djRsMl9kZXY7CiAKLQl2aWRlb19zZXRfZHJ2ZGF0YSh2Y3MtPnY0bF9kZXZpY2UsIHZjcyk7CisJdmlkZW9fc2V0X2RydmRhdGEodmNzLT52ZGV2LCB2Y3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHZpbm9fbW9kdWxlX2luaXQodm9pZCkKIHsKKwl1bnNpZ25lZCBzaG9ydCBhZGRyW10gPSB7IDAsIEkyQ19DTElFTlRfRU5EIH07CiAJaW50IHJldDsKIAogCXByaW50ayhLRVJOX0lORk8gIlNHSSBWSU5PIGRyaXZlciB2ZXJzaW9uICVzXG4iLApAQCAtNDU4MCwxMiArNDI4NiwxMiBAQAogCXNwaW5fbG9ja19pbml0KCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2spOwogCiAJcmV0ID0gdmlub19pbml0X2NoYW5uZWxfc2V0dGluZ3MoJnZpbm9fZHJ2ZGF0YS0+YSwgVklOT19DSEFOTkVMX0EsCi0JCQkJICAgIHZpbm9fdjRsX2RldmljZV9uYW1lX2EpOworCQkJCSAgICB2aW5vX3ZkZXZfbmFtZV9hKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gdmlub19pbml0X2NoYW5uZWxfc2V0dGluZ3MoJnZpbm9fZHJ2ZGF0YS0+YiwgVklOT19DSEFOTkVMX0IsCi0JCQkJICAgIHZpbm9fdjRsX2RldmljZV9uYW1lX2IpOworCQkJCSAgICB2aW5vX3ZkZXZfbmFtZV9iKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC00NjAxLDE1ICs0MzA3LDE2IEBACiAJfQogCXZpbm9faW5pdF9zdGFnZSsrOwogCi0JcmV0ID0gdmlub19pMmNfYWRkX2J1cygpOworCXJldCA9IGkyY19hZGRfYWRhcHRlcigmdmlub19pMmNfYWRhcHRlcik7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgIlZJTk8gSTJDIGJ1cyByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKIAkJdmlub19tb2R1bGVfY2xlYW51cCh2aW5vX2luaXRfc3RhZ2UpOwogCQlyZXR1cm4gcmV0OwogCX0KKwlpMmNfc2V0X2FkYXBkYXRhKCZ2aW5vX2kyY19hZGFwdGVyLCAmdmlub19kcnZkYXRhLT52NGwyX2Rldik7CiAJdmlub19pbml0X3N0YWdlKys7CiAKLQlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2Uodmlub19kcnZkYXRhLT5hLnY0bF9kZXZpY2UsCisJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZpbm9fZHJ2ZGF0YS0+YS52ZGV2LAogCQkJCSAgICBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJWSU5PIGNoYW5uZWwgQSBWaWRlbzRMaW51eC1kZXZpY2UgIgpAQCAtNDYxOSw3ICs0MzI2LDcgQEAKIAl9CiAJdmlub19pbml0X3N0YWdlKys7CiAKLQlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2Uodmlub19kcnZkYXRhLT5iLnY0bF9kZXZpY2UsCisJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZpbm9fZHJ2ZGF0YS0+Yi52ZGV2LAogCQkJCSAgICBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJWSU5PIGNoYW5uZWwgQiBWaWRlbzRMaW51eC1kZXZpY2UgIgpAQCAtNDYyOSwxMCArNDMzNiwxMiBAQAogCX0KIAl2aW5vX2luaXRfc3RhZ2UrKzsKIAotI2lmZGVmIE1PRFVMRQotCXJlcXVlc3RfbW9kdWxlKCJzYWE3MTkxIik7Ci0JcmVxdWVzdF9tb2R1bGUoImluZHljYW0iKTsKLSNlbmRpZgorCWFkZHJbMF0gPSAweDQ1OworCXZpbm9fZHJ2ZGF0YS0+ZGVjb2RlciA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZ2aW5vX2kyY19hZGFwdGVyLAorCQkJInNhYTcxOTEiLCAic2FhNzE5MSIsIGFkZHIpOworCWFkZHJbMF0gPSAweDJiOworCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJnZpbm9faTJjX2FkYXB0ZXIsCisJCQkiaW5keWNhbSIsICJpbmR5Y2FtIiwgYWRkcik7CiAKIAlkcHJpbnRrKCJpbml0IGNvbXBsZXRlIVxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKaW5kZXggODFkNWFhNS4uZmJmZWZhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKQEAgLTI4LDE3ICsyOCwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLS8qIEluY2x1ZGUgVjRMMSBzcGVjaWZpYyBmdW5jdGlvbnMuIFNob3VsZCBiZSByZW1vdmVkIHNvb24gKi8KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtdm1hbGxvYy5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLXZtYWxsb2MuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlICJmb250LmgiCiAKICNkZWZpbmUgVklWSV9NT0RVTEVfTkFNRSAidml2aSIKIApAQCAtNDcsMTggKzQ0LDMyIEBACiAjZGVmaW5lIFdBS0VfREVOT01JTkFUT1IgMTAwMQogI2RlZmluZSBCVUZGRVJfVElNRU9VVCAgICAgbXNlY3NfdG9famlmZmllcyg1MDApICAvKiAwLjUgc2Vjb25kcyAqLwogCi0jaW5jbHVkZSAiZm9udC5oIgotCiAjZGVmaW5lIFZJVklfTUFKT1JfVkVSU0lPTiAwCi0jZGVmaW5lIFZJVklfTUlOT1JfVkVSU0lPTiA1CisjZGVmaW5lIFZJVklfTUlOT1JfVkVSU0lPTiA2CiAjZGVmaW5lIFZJVklfUkVMRUFTRSAwCiAjZGVmaW5lIFZJVklfVkVSU0lPTiBcCiAJS0VSTkVMX1ZFUlNJT04oVklWSV9NQUpPUl9WRVJTSU9OLCBWSVZJX01JTk9SX1ZFUlNJT04sIFZJVklfUkVMRUFTRSkKIAotLyogRGVjbGFyZSBzdGF0aWMgdmFycyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBwYXJhbWV0ZXJzICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHZpZF9saW1pdCA9IDE2OwkvKiBWaWRlbyBtZW1vcnkgbGltaXQsIGluIE1iICovCi1zdGF0aWMgaW50IHZpZGVvX25yID0gLTE7CQkvKiAvZGV2L3ZpZGVvTiwgLTEgZm9yIGF1dG9kZXRlY3QgKi8KLXN0YXRpYyBpbnQgbl9kZXZzID0gMTsJCQkvKiBOdW1iZXIgb2YgdmlydHVhbCBkZXZpY2VzICovCitNT0RVTEVfREVTQ1JJUFRJT04oIlZpZGVvIFRlY2hub2xvZ3kgTWFnYXppbmUgVmlydHVhbCBWaWRlbyBDYXB0dXJlIEJvYXJkIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIsIFRlZCBXYWx0aGVyIGFuZCBKb2huIFNva29sIik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CisKK3N0YXRpYyB1bnNpZ25lZCB2aWRlb19uciA9IC0xOworbW9kdWxlX3BhcmFtKHZpZGVvX25yLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModmlkZW9fbnIsICJ2aWRlb1ggc3RhcnQgbnVtYmVyLCAtMSBpcyBhdXRvZGV0ZWN0Iik7CisKK3N0YXRpYyB1bnNpZ25lZCBuX2RldnMgPSAxOworbW9kdWxlX3BhcmFtKG5fZGV2cywgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG5fZGV2cywgIm51bWJlciBvZiB2aWRlbyBkZXZpY2VzIHRvIGNyZWF0ZSIpOworCitzdGF0aWMgdW5zaWduZWQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImFjdGl2YXRlcyBkZWJ1ZyBpbmZvIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmlkX2xpbWl0ID0gMTY7Cittb2R1bGVfcGFyYW0odmlkX2xpbWl0LCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModmlkX2xpbWl0LCAiY2FwdHVyZSBtZW1vcnkgbGltaXQgaW4gbWVnYWJ5dGVzIik7CisKIAogLyogc3VwcG9ydGVkIGNvbnRyb2xzICovCiBzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHZpdmlfcWN0cmxbXSA9IHsKQEAgLTY5LDcgKzgwLDcgQEAKIAkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKIAkJLnN0ZXAgICAgICAgICAgPSA2NTUzNS8xMDAsCiAJCS5kZWZhdWx0X3ZhbHVlID0gNjU1MzUsCi0JCS5mbGFncyAgICAgICAgID0gMCwKKwkJLmZsYWdzICAgICAgICAgPSBWNEwyX0NUUkxfRkxBR19TTElERVIsCiAJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAl9LCB7CiAJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTc5LDcgKzkwLDcgQEAKIAkJLm1heGltdW0gICAgICAgPSAyNTUsCiAJCS5zdGVwICAgICAgICAgID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSAxMjcsCi0JCS5mbGFncyAgICAgICAgID0gMCwKKwkJLmZsYWdzICAgICAgICAgPSBWNEwyX0NUUkxfRkxBR19TTElERVIsCiAJfSwgewogCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAogCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCkBAIC04OCw3ICs5OSw3IEBACiAJCS5tYXhpbXVtICAgICAgID0gMjU1LAogCQkuc3RlcCAgICAgICAgICA9IDB4MSwKIAkJLmRlZmF1bHRfdmFsdWUgPSAweDEwLAotCQkuZmxhZ3MgICAgICAgICA9IDAsCisJCS5mbGFncyAgICAgICAgID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSLAogCX0sIHsKIAkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAogCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCkBAIC05Nyw3ICsxMDgsNyBAQAogCQkubWF4aW11bSAgICAgICA9IDI1NSwKIAkJLnN0ZXAgICAgICAgICAgPSAweDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gMTI3LAotCQkuZmxhZ3MgICAgICAgICA9IDAsCisJCS5mbGFncyAgICAgICAgID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSLAogCX0sIHsKIAkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9IVUUsCiAJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKQEAgLTEwNiwxNyArMTE3LDEyIEBACiAJCS5tYXhpbXVtICAgICAgID0gMTI3LAogCQkuc3RlcCAgICAgICAgICA9IDB4MSwKIAkJLmRlZmF1bHRfdmFsdWUgPSAwLAotCQkuZmxhZ3MgICAgICAgICA9IDAsCisJCS5mbGFncyAgICAgICAgID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSLAogCX0KIH07CiAKLXN0YXRpYyBpbnQgcWN0bF9yZWdzW0FSUkFZX1NJWkUodml2aV9xY3RybCldOwotCi0jZGVmaW5lIGRwcmludGsoZGV2LCBsZXZlbCwgZm10LCBhcmcuLi4pCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCWlmIChkZXYtPnZmZC0+ZGVidWcgPj0gKGxldmVsKSkJCQkJXAotCQkJcHJpbnRrKEtFUk5fREVCVUcgInZpdmk6ICIgZm10ICwgIyMgYXJnKTsJXAotCX0gd2hpbGUgKDApCisjZGVmaW5lIGRwcmludGsoZGV2LCBsZXZlbCwgZm10LCBhcmcuLi4pIFwKKwl2NGwyX2RiZyhsZXZlbCwgZGVidWcsICZkZXYtPnY0bDJfZGV2LCBmbXQsICMjIGFyZykKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJQmFzaWMgc3RydWN0dXJlcwpAQCAtMjA2LDYgKzIxMiw3IEBACiAKIHN0cnVjdCB2aXZpX2RldiB7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgdml2aV9kZXZsaXN0OworCXN0cnVjdCB2NGwyX2RldmljZSAJICAgdjRsMl9kZXY7CiAKIAlzcGlubG9ja190ICAgICAgICAgICAgICAgICBzbG9jazsKIAlzdHJ1Y3QgbXV0ZXgJCSAgIG11dGV4OwpAQCAtMjIzLDYgKzIzMCwxMiBAQAogCWNoYXIgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdHJbMTNdOwogCiAJaW50CQkJICAgbXZfY291bnQ7CS8qIENvbnRyb2xzIGJhcnMgbW92ZW1lbnQgKi8KKworCS8qIElucHV0IE51bWJlciAqLworCWludAkJCSAgIGlucHV0OworCisJLyogQ29udHJvbCAncmVnaXN0ZXJzJyAqLworCWludCAJCQkgICBxY3RsX3JlZ3NbQVJSQVlfU0laRSh2aXZpX3FjdHJsKV07CiB9OwogCiBzdHJ1Y3Qgdml2aV9maCB7CkBAIC0yMzUsNiArMjQ4LDcgQEAKIAogCWVudW0gdjRsMl9idWZfdHlwZSAgICAgICAgIHR5cGU7CiAJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgYmFyc1s4XVszXTsKKwlpbnQJCQkgICBpbnB1dDsgCS8qIElucHV0IE51bWJlciBvbiBiYXJzICovCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI1NCwxOCArMjY4LDcyIEBACiAJQkxBQ0ssCiB9OwogCi1zdGF0aWMgdTggYmFyc1s4XVszXSA9IHsKIAkvKiBSICAgRyAgIEIgKi8KLQl7MjA0LCAyMDQsIDIwNH0sICAvKiB3aGl0ZSAqLwotCXsyMDgsIDIwOCwgICAwfSwgIC8qIGFtYmFyICovCi0JeyAgMCwgMjA2LCAyMDZ9LCAgLyogY3lhbiAqLwotCXsgIDAsIDIzOSwgICAwfSwgIC8qIGdyZWVuICovCi0JezIzOSwgICAwLCAyMzl9LCAgLyogbWFnZW50YSAqLwotCXsyMDUsICAgMCwgICAwfSwgIC8qIHJlZCAqLwotCXsgIDAsICAgMCwgMjU1fSwgIC8qIGJsdWUgKi8KLQl7ICAwLCAgIDAsICAgMH0sICAvKiBibGFjayAqLworI2RlZmluZSBDT0xPUl9XSElURQl7MjA0LCAyMDQsIDIwNH0KKyNkZWZpbmUgQ09MT1JfQU1CQVIJezIwOCwgMjA4LCAgIDB9CisjZGVmaW5lIENPTE9SX0NJQU4JeyAgMCwgMjA2LCAyMDZ9CisjZGVmaW5lCUNPTE9SX0dSRUVOCXsgIDAsIDIzOSwgICAwfQorI2RlZmluZSBDT0xPUl9NQUdFTlRBCXsyMzksICAgMCwgMjM5fQorI2RlZmluZSBDT0xPUl9SRUQJezIwNSwgICAwLCAgIDB9CisjZGVmaW5lIENPTE9SX0JMVUUJeyAgMCwgICAwLCAyNTV9CisjZGVmaW5lIENPTE9SX0JMQUNLCXsgIDAsICAgMCwgICAwfQorCitzdHJ1Y3QgYmFyX3N0ZCB7CisJdTggYmFyWzhdWzNdOwogfTsKIAorLyogTWF4aW11bSBudW1iZXIgb2YgYmFycyBhcmUgMTAgLSBvdGhlcndpc2UsIHRoZSBpbnB1dCBwcmludCBjb2RlCisgICBzaG91bGQgYmUgbW9kaWZpZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgYmFyX3N0ZCBiYXJzW10gPSB7CisJewkvKiBTdGFuZGFyZCBJVFUtUiBjb2xvciBiYXIgc2VxdWVuY2UgKi8KKwkJeworCQkJQ09MT1JfV0hJVEUsCisJCQlDT0xPUl9BTUJBUiwKKwkJCUNPTE9SX0NJQU4sCisJCQlDT0xPUl9HUkVFTiwKKwkJCUNPTE9SX01BR0VOVEEsCisJCQlDT0xPUl9SRUQsCisJCQlDT0xPUl9CTFVFLAorCQkJQ09MT1JfQkxBQ0ssCisJCX0KKwl9LCB7CisJCXsKKwkJCUNPTE9SX1dISVRFLAorCQkJQ09MT1JfQU1CQVIsCisJCQlDT0xPUl9CTEFDSywKKwkJCUNPTE9SX1dISVRFLAorCQkJQ09MT1JfQU1CQVIsCisJCQlDT0xPUl9CTEFDSywKKwkJCUNPTE9SX1dISVRFLAorCQkJQ09MT1JfQU1CQVIsCisJCX0KKwl9LCB7CisJCXsKKwkJCUNPTE9SX1dISVRFLAorCQkJQ09MT1JfQ0lBTiwKKwkJCUNPTE9SX0JMQUNLLAorCQkJQ09MT1JfV0hJVEUsCisJCQlDT0xPUl9DSUFOLAorCQkJQ09MT1JfQkxBQ0ssCisJCQlDT0xPUl9XSElURSwKKwkJCUNPTE9SX0NJQU4sCisJCX0KKwl9LCB7CisJCXsKKwkJCUNPTE9SX1dISVRFLAorCQkJQ09MT1JfR1JFRU4sCisJCQlDT0xPUl9CTEFDSywKKwkJCUNPTE9SX1dISVRFLAorCQkJQ09MT1JfR1JFRU4sCisJCQlDT0xPUl9CTEFDSywKKwkJCUNPTE9SX1dISVRFLAorCQkJQ09MT1JfR1JFRU4sCisJCX0KKwl9LAorfTsKKworI2RlZmluZSBOVU1fSU5QVVRTIEFSUkFZX1NJWkUoYmFycykKKwogI2RlZmluZSBUT19ZKHIsIGcsIGIpIFwKIAkoKCgxNjgyOSAqIHIgKyAzMzAzOSAqIGcgKyA2NDE2ICogYiAgKyAzMjc2OCkgPj4gMTYpICsgMTYpCiAvKiBSR0IgdG8gIFYoQ3IpIENvbG9yIHRyYW5zZm9ybSAqLwpAQCAtMjc1LDkgKzM0MywxMCBAQAogI2RlZmluZSBUT19VKHIsIGcsIGIpIFwKIAkoKCgtOTcxNCAqIHIgLSAxOTA3MCAqIGcgKyAyODc4NCAqIGIgKyAzMjc2OCkgPj4gMTYpICsgMTI4KQogCi0jZGVmaW5lIFRTVEFNUF9NSU5fWSAyNAotI2RlZmluZSBUU1RBTVBfTUFYX1kgVFNUQU1QX01JTl9ZKzE1Ci0jZGVmaW5lIFRTVEFNUF9NSU5fWCA2NAorI2RlZmluZSBUU1RBTVBfTUlOX1kJMjQKKyNkZWZpbmUgVFNUQU1QX01BWF9ZCShUU1RBTVBfTUlOX1kgKyAxNSkKKyNkZWZpbmUgVFNUQU1QX0lOUFVUX1gJMTAKKyNkZWZpbmUgVFNUQU1QX01JTl9YCSg1NCArIFRTVEFNUF9JTlBVVF9YKQogCiBzdGF0aWMgdm9pZCBnZW5fdHdvcGl4KHN0cnVjdCB2aXZpX2ZoICpmaCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY29sb3Jwb3MpCiB7CkBAIC0zOTIsOSArNDYxLDI5IEBACiAJCXBvcyArPSA0OyAvKiBvbmx5IDE2IGJwcCBzdXBwb3J0ZWQgZm9yIG5vdyAqLwogCX0KIAotCS8qIENoZWNrcyBpZiBpdCBpcyBwb3NzaWJsZSB0byBzaG93IHRpbWVzdGFtcCAqLworCS8qIFByaW50cyBpbnB1dCBlbnRyeSBudW1iZXIgKi8KKworCS8qIENoZWNrcyBpZiBpdCBpcyBwb3NzaWJsZSB0byBpbnB1dCBudW1iZXIgKi8KIAlpZiAoVFNUQU1QX01BWF9ZID49IGhtYXgpCiAJCWdvdG8gZW5kOworCisJaWYgKFRTVEFNUF9JTlBVVF9YICsgc3RybGVuKHRpbWVzdHIpID49IHdtYXgpCisJCWdvdG8gZW5kOworCisJaWYgKGxpbmUgPj0gVFNUQU1QX01JTl9ZICYmIGxpbmUgPD0gVFNUQU1QX01BWF9ZKSB7CisJCWNociA9IHJvbTh4MTZfYml0c1tmaC0+aW5wdXQgKiAxNiArIGxpbmUgLSBUU1RBTVBfTUlOX1ldOworCQlwb3MgPSBUU1RBTVBfSU5QVVRfWDsKKwkJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQkJLyogRHJhdyB3aGl0ZSBmb250IG9uIGJsYWNrIGJhY2tncm91bmQgKi8KKwkJCWlmIChjaHIgJiAxIDw8ICg3IC0gaSkpCisJCQkJZ2VuX3R3b3BpeChmaCwgYmFzZXAgKyBwb3MsIFdISVRFKTsKKwkJCWVsc2UKKwkJCQlnZW5fdHdvcGl4KGZoLCBiYXNlcCArIHBvcywgQkxBQ0spOworCQkJcG9zICs9IDI7CisJCX0KKwl9CisKKwkvKiBDaGVja3MgaWYgaXQgaXMgcG9zc2libGUgdG8gc2hvdyB0aW1lc3RhbXAgKi8KIAlpZiAoVFNUQU1QX01JTl9YICsgc3RybGVuKHRpbWVzdHIpID49IHdtYXgpCiAJCWdvdG8gZW5kOwogCkBAIC01NzcsNyArNjY2LDcgQEAKIAlkbWFfcS0+a3RocmVhZCA9IGt0aHJlYWRfcnVuKHZpdmlfdGhyZWFkLCBmaCwgInZpdmkiKTsKIAogCWlmIChJU19FUlIoZG1hX3EtPmt0aHJlYWQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidml2aToga2VybmVsX3RocmVhZCgpIGZhaWxlZFxuIik7CisJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAia2VybmVsX3RocmVhZCgpIGZhaWxlZFxuIik7CiAJCXJldHVybiBQVFJfRVJSKGRtYV9xLT5rdGhyZWFkKTsKIAl9CiAJLyogV2FrZXMgdGhyZWFkICovCkBAIC03MjAsOCArODA5LDEyIEBACiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKIHsKKwlzdHJ1Y3Qgdml2aV9maCAgKmZoICA9IHByaXY7CisJc3RydWN0IHZpdmlfZGV2ICpkZXYgPSBmaC0+ZGV2OworCiAJc3RyY3B5KGNhcC0+ZHJpdmVyLCAidml2aSIpOwogCXN0cmNweShjYXAtPmNhcmQsICJ2aXZpIik7CisJc3RybGNweShjYXAtPmJ1c19pbmZvLCBkZXYtPnY0bDJfZGV2Lm5hbWUsIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CiAJY2FwLT52ZXJzaW9uID0gVklWSV9WRVJTSU9OOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0JVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CiAJCQkJVjRMMl9DQVBfU1RSRUFNSU5HICAgICB8CkBAIC04MDcsMzggKzkwMCwxOSBAQAogCXJldHVybiAwOwogfQogCi0vKkZJWE1FOiBUaGlzIHNlZW1zIHRvIGJlIGdlbmVyaWMgZW5vdWdoIHRvIGJlIGF0IHZpZGVvZGV2MiAqLwotc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorLyogcHJlY2FsY3VsYXRlIGNvbG9yIGJhciB2YWx1ZXMgdG8gc3BlZWQgdXAgcmVuZGVyaW5nICovCitzdGF0aWMgdm9pZCBwcmVjYWxjdWxhdGVfYmFycyhzdHJ1Y3Qgdml2aV9maCAqZmgpCiB7Ci0Jc3RydWN0IHZpdmlfZmggICpmaCA9IHByaXY7Ci0Jc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxID0gJmZoLT52Yl92aWRxOworCXN0cnVjdCB2aXZpX2RldiAqZGV2ID0gZmgtPmRldjsKIAl1bnNpZ25lZCBjaGFyIHIsIGcsIGI7CiAJaW50IGssIGlzX3l1djsKIAotCWludCByZXQgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIGZoLCBmKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIChyZXQpOworCWZoLT5pbnB1dCA9IGRldi0+aW5wdXQ7CiAKLQltdXRleF9sb2NrKCZxLT52Yl9sb2NrKTsKLQotCWlmICh2aWRlb2J1Zl9xdWV1ZV9pc19idXN5KCZmaC0+dmJfdmlkcSkpIHsKLQkJZHByaW50ayhmaC0+ZGV2LCAxLCAiJXMgcXVldWUgYnVzeVxuIiwgX19mdW5jX18pOwotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWZoLT5mbXQgICAgICAgICAgID0gZ2V0X2Zvcm1hdChmKTsKLQlmaC0+d2lkdGggICAgICAgICA9IGYtPmZtdC5waXgud2lkdGg7Ci0JZmgtPmhlaWdodCAgICAgICAgPSBmLT5mbXQucGl4LmhlaWdodDsKLQlmaC0+dmJfdmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7Ci0JZmgtPnR5cGUgICAgICAgICAgPSBmLT50eXBlOwotCi0JLyogcHJlY2FsY3VsYXRlIGNvbG9yIGJhciB2YWx1ZXMgdG8gc3BlZWQgdXAgcmVuZGVyaW5nICovCiAJZm9yIChrID0gMDsgayA8IDg7IGsrKykgewotCQlyID0gYmFyc1trXVswXTsKLQkJZyA9IGJhcnNba11bMV07Ci0JCWIgPSBiYXJzW2tdWzJdOworCQlyID0gYmFyc1tmaC0+aW5wdXRdLmJhcltrXVswXTsKKwkJZyA9IGJhcnNbZmgtPmlucHV0XS5iYXJba11bMV07CisJCWIgPSBiYXJzW2ZoLT5pbnB1dF0uYmFyW2tdWzJdOwogCQlpc195dXYgPSAwOwogCiAJCXN3aXRjaCAoZmgtPmZtdC0+Zm91cmNjKSB7CkBAIC04NzEsMTEgKzk0NSw0MCBAQAogCQl9CiAJfQogCit9CisKKy8qRklYTUU6IFRoaXMgc2VlbXMgdG8gYmUgZ2VuZXJpYyBlbm91Z2ggdG8gYmUgYXQgdmlkZW9kZXYyICovCitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHZpdmlfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEgPSAmZmgtPnZiX3ZpZHE7CisKKwlpbnQgcmV0ID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBmaCwgZik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwltdXRleF9sb2NrKCZxLT52Yl9sb2NrKTsKKworCWlmICh2aWRlb2J1Zl9xdWV1ZV9pc19idXN5KCZmaC0+dmJfdmlkcSkpIHsKKwkJZHByaW50ayhmaC0+ZGV2LCAxLCAiJXMgcXVldWUgYnVzeVxuIiwgX19mdW5jX18pOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCWZoLT5mbXQgICAgICAgICAgID0gZ2V0X2Zvcm1hdChmKTsKKwlmaC0+d2lkdGggICAgICAgICA9IGYtPmZtdC5waXgud2lkdGg7CisJZmgtPmhlaWdodCAgICAgICAgPSBmLT5mbXQucGl4LmhlaWdodDsKKwlmaC0+dmJfdmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CisJZmgtPnR5cGUgICAgICAgICAgPSBmLT50eXBlOworCisJcHJlY2FsY3VsYXRlX2JhcnMoZmgpOworCiAJcmV0ID0gMDsKIG91dDoKIAltdXRleF91bmxvY2soJnEtPnZiX2xvY2spOwogCi0JcmV0dXJuIChyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCkBAIC05NTAsMjcgKzEwNTMsMzYgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfaW5wdXQgKmlucCkKIHsKLQlpZiAoaW5wLT5pbmRleCAhPSAwKQorCWlmIChpbnAtPmluZGV4ID49IE5VTV9JTlBVVFMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaW5wLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKIAlpbnAtPnN0ZCA9IFY0TDJfU1REXzUyNV82MDsKLQlzdHJjcHkoaW5wLT5uYW1lLCAiQ2FtZXJhIik7CisJc3ByaW50ZihpbnAtPm5hbWUsICJDYW1lcmEgJXUiLCBpbnAtPmluZGV4KTsKIAogCXJldHVybiAoMCk7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKIHsKLQkqaSA9IDA7CisJc3RydWN0IHZpdmlfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3Qgdml2aV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkqaSA9IGRldi0+aW5wdXQ7CiAKIAlyZXR1cm4gKDApOwogfQogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgPiAwKQorCXN0cnVjdCB2aXZpX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHZpdmlfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJaWYgKGkgPj0gTlVNX0lOUFVUUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlkZXYtPmlucHV0ID0gaTsKKwlwcmVjYWxjdWxhdGVfYmFycyhmaCk7CisKIAlyZXR1cm4gKDApOwogfQogCkBAIC05OTMsMTIgKzExMDUsMTQgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogeworCXN0cnVjdCB2aXZpX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHZpdmlfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodml2aV9xY3RybCk7IGkrKykKIAkJaWYgKGN0cmwtPmlkID09IHZpdmlfcWN0cmxbaV0uaWQpIHsKLQkJCWN0cmwtPnZhbHVlID0gcWN0bF9yZWdzW2ldOwotCQkJcmV0dXJuICgwKTsKKwkJCWN0cmwtPnZhbHVlID0gZGV2LT5xY3RsX3JlZ3NbaV07CisJCQlyZXR1cm4gMDsKIAkJfQogCiAJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDA2LDE2ICsxMTIwLDE4IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKKwlzdHJ1Y3Qgdml2aV9maCAqZmggPSBwcml2OworCXN0cnVjdCB2aXZpX2RldiAqZGV2ID0gZmgtPmRldjsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZpdmlfcWN0cmwpOyBpKyspCiAJCWlmIChjdHJsLT5pZCA9PSB2aXZpX3FjdHJsW2ldLmlkKSB7Ci0JCQlpZiAoY3RybC0+dmFsdWUgPCB2aXZpX3FjdHJsW2ldLm1pbmltdW0KLQkJCSAgICB8fCBjdHJsLT52YWx1ZSA+IHZpdmlfcWN0cmxbaV0ubWF4aW11bSkgewotCQkJCQlyZXR1cm4gKC1FUkFOR0UpOwotCQkJCX0KLQkJCXFjdGxfcmVnc1tpXSA9IGN0cmwtPnZhbHVlOwotCQkJcmV0dXJuICgwKTsKKwkJCWlmIChjdHJsLT52YWx1ZSA8IHZpdmlfcWN0cmxbaV0ubWluaW11bSB8fAorCQkJICAgIGN0cmwtPnZhbHVlID4gdml2aV9xY3RybFtpXS5tYXhpbXVtKSB7CisJCQkJcmV0dXJuIC1FUkFOR0U7CisJCQl9CisJCQlkZXYtPnFjdGxfcmVnc1tpXSA9IGN0cmwtPnZhbHVlOworCQkJcmV0dXJuIDA7CiAJCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTEwMjYsMzIgKzExNDIsMjAgQEAKIAogc3RhdGljIGludCB2aXZpX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7Ci0Jc3RydWN0IHZpdmlfZGV2ICpkZXY7CisJc3RydWN0IHZpdmlfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCB2aXZpX2ZoICpmaCA9IE5VTEw7Ci0JaW50IGk7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAidml2aTogb3BlbiBjYWxsZWQgKG1pbm9yPSVkKVxuIiwgbWlub3IpOwotCi0JbG9ja19rZXJuZWwoKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnZpdmlfZGV2bGlzdCwgdml2aV9kZXZsaXN0KQotCQlpZiAoZGV2LT52ZmQtPm1pbm9yID09IG1pbm9yKQotCQkJZ290byBmb3VuZDsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIC1FTk9ERVY7Ci0KLWZvdW5kOgogCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwogCWRldi0+dXNlcnMrKzsKIAogCWlmIChkZXYtPnVzZXJzID4gMSkgewogCQlkZXYtPnVzZXJzLS07Ci0JCXJldHZhbCA9IC1FQlVTWTsKLQkJZ290byB1bmxvY2s7CisJCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CisJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JZHByaW50ayhkZXYsIDEsICJvcGVuIG1pbm9yPSVkIHR5cGU9JXMgdXNlcnM9JWRcbiIsIG1pbm9yLAorCWRwcmludGsoZGV2LCAxLCAib3BlbiAvZGV2L3ZpZGVvJWQgdHlwZT0lcyB1c2Vycz0lZFxuIiwgZGV2LT52ZmQtPm51bSwKIAkJdjRsMl90eXBlX25hbWVzW1Y0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV0sIGRldi0+dXNlcnMpOwogCiAJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KQEAgLTEwNTksMTQgKzExNjMsMTEgQEAKIAlpZiAoTlVMTCA9PSBmaCkgewogCQlkZXYtPnVzZXJzLS07CiAJCXJldHZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gdW5sb2NrOwogCX0KLXVubG9jazoKIAltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwotCWlmIChyZXR2YWwpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOworCisJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKLQl9CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKIAlmaC0+ZGV2ICAgICAgPSBkZXY7CkBAIC0xMDc2LDEwICsxMTc3LDYgQEAKIAlmaC0+d2lkdGggICAgPSA2NDA7CiAJZmgtPmhlaWdodCAgID0gNDgwOwogCi0JLyogUHV0IGFsbCBjb250cm9scyBhdCBhIHNhbmUgc3RhdGUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2aXZpX3FjdHJsKTsgaSsrKQotCQlxY3RsX3JlZ3NbaV0gPSB2aXZpX3FjdHJsW2ldLmRlZmF1bHRfdmFsdWU7Ci0KIAkvKiBSZXNldHMgZnJhbWUgY291bnRlcnMgKi8KIAlkZXYtPmggPSAwOwogCWRldi0+bSA9IDA7CkBAIC0xMDk1LDcgKzExOTIsNiBAQAogCQkJc2l6ZW9mKHN0cnVjdCB2aXZpX2J1ZmZlciksIGZoKTsKIAogCXZpdmlfc3RhcnRfdGhyZWFkKGZoKTsKLQl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExNTEsMzIgKzEyNDcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpdmlfcmVsZWFzZSh2b2lkKQotewotCXN0cnVjdCB2aXZpX2RldiAqZGV2OwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnZpdmlfZGV2bGlzdCkpIHsKLQkJbGlzdCA9IHZpdmlfZGV2bGlzdC5uZXh0OwotCQlsaXN0X2RlbChsaXN0KTsKLQkJZGV2ID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3Qgdml2aV9kZXYsIHZpdmlfZGV2bGlzdCk7Ci0KLQkJaWYgKC0xICE9IGRldi0+dmZkLT5taW5vcikgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHVucmVnaXN0ZXJpbmcgL2Rldi92aWRlbyVkXG4iLAotCQkJCVZJVklfTU9EVUxFX05BTUUsIGRldi0+dmZkLT5udW0pOwotCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZmQpOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlbGVhc2luZyAvZGV2L3ZpZGVvJWRcbiIsCi0JCQkJVklWSV9NT0RVTEVfTkFNRSwgZGV2LT52ZmQtPm51bSk7Ci0JCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZmZCk7Ci0JCX0KLQotCQlrZnJlZShkZXYpOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZpdmlfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IHZpdmlfZmggICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKQEAgLTEyMzksODcgKzEzMDksMTMwIEBACiAJLnR2bm9ybXMgICAgICAgICAgICAgID0gVjRMMl9TVERfNTI1XzYwLAogCS5jdXJyZW50X25vcm0gICAgICAgICA9IFY0TDJfU1REX05UU0NfTSwKIH07CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJSW5pdGlhbGl6YXRpb24gYW5kIG1vZHVsZSBzdHVmZgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorc3RhdGljIGludCB2aXZpX3JlbGVhc2Uodm9pZCkKK3sKKwlzdHJ1Y3Qgdml2aV9kZXYgKmRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZ2aXZpX2Rldmxpc3QpKSB7CisJCWxpc3QgPSB2aXZpX2Rldmxpc3QubmV4dDsKKwkJbGlzdF9kZWwobGlzdCk7CisJCWRldiA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHZpdmlfZGV2LCB2aXZpX2Rldmxpc3QpOworCisJCXY0bDJfaW5mbygmZGV2LT52NGwyX2RldiwgInVucmVnaXN0ZXJpbmcgL2Rldi92aWRlbyVkXG4iLAorCQkJZGV2LT52ZmQtPm51bSk7CisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmZkKTsKKwkJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CisJCWtmcmVlKGRldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHZpdmlfY3JlYXRlX2luc3RhbmNlKGludCBpbnN0KQoreworCXN0cnVjdCB2aXZpX2RldiAqZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZDsKKwlpbnQgcmV0LCBpOworCisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNucHJpbnRmKGRldi0+djRsMl9kZXYubmFtZSwgc2l6ZW9mKGRldi0+djRsMl9kZXYubmFtZSksCisJCQkiJXMtJTAzZCIsIFZJVklfTU9EVUxFX05BTUUsIGluc3QpOworCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsICZkZXYtPnY0bDJfZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfZGV2OworCisJLyogaW5pdCB2aWRlbyBkbWEgcXVldWVzICovCisJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkcS5hY3RpdmUpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+dmlkcS53cSk7CisKKwkvKiBpbml0aWFsaXplIGxvY2tzICovCisJc3Bpbl9sb2NrX2luaXQoJmRldi0+c2xvY2spOworCW11dGV4X2luaXQoJmRldi0+bXV0ZXgpOworCisJcmV0ID0gLUVOT01FTTsKKwl2ZmQgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAoIXZmZCkKKwkJZ290byB1bnJlZ19kZXY7CisKKwkqdmZkID0gdml2aV90ZW1wbGF0ZTsKKworCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZmQsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byByZWxfdmRldjsKKworCXZpZGVvX3NldF9kcnZkYXRhKHZmZCwgZGV2KTsKKworCS8qIFNldCBhbGwgY29udHJvbHMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2aXZpX3FjdHJsKTsgaSsrKQorCQlkZXYtPnFjdGxfcmVnc1tpXSA9IHZpdmlfcWN0cmxbaV0uZGVmYXVsdF92YWx1ZTsKKworCS8qIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgaXMgZmluZSwgbGV0J3MgYWRkIGl0IHRvIGRldmljZSBsaXN0ICovCisJbGlzdF9hZGRfdGFpbCgmZGV2LT52aXZpX2Rldmxpc3QsICZ2aXZpX2Rldmxpc3QpOworCisJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwgIiVzICglaSkiLAorCQkJdml2aV90ZW1wbGF0ZS5uYW1lLCB2ZmQtPm51bSk7CisKKwlpZiAodmlkZW9fbnIgPj0gMCkKKwkJdmlkZW9fbnIrKzsKKworCWRldi0+dmZkID0gdmZkOworCXY0bDJfaW5mbygmZGV2LT52NGwyX2RldiwgIlY0TDIgZGV2aWNlIHJlZ2lzdGVyZWQgYXMgL2Rldi92aWRlbyVkXG4iLAorCQkJdmZkLT5udW0pOworCXJldHVybiAwOworCityZWxfdmRldjoKKwl2aWRlb19kZXZpY2VfcmVsZWFzZSh2ZmQpOwordW5yZWdfZGV2OgorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOworZnJlZV9kZXY6CisJa2ZyZWUoZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCiAvKiBUaGlzIHJvdXRpbmUgYWxsb2NhdGVzIGZyb20gMSB0byBuX2RldnMgdmlydHVhbCBkcml2ZXJzLgogCiAgICBUaGUgcmVhbCBtYXhpbXVtIG51bWJlciBvZiB2aXJ0dWFsIGRyaXZlcnMgd2lsbCBkZXBlbmQgb24gaG93IG1hbnkgZHJpdmVycwogICAgd2lsbCBzdWNjZWVkLiBUaGlzIGlzIGxpbWl0ZWQgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9mIGRldmljZXMgdGhhdAotICAgdmlkZW9kZXYgc3VwcG9ydHMuIFNpbmNlIHRoZXJlIGFyZSA2NCBtaW5vcnMgZm9yIHZpZGVvIGdyYWJiZXJzLCB0aGlzIGlzCi0gICBjdXJyZW50bHkgdGhlIHRoZW9yZXRpY2FsIG1heGltdW0gbGltaXQuIEhvd2V2ZXIsIGEgZnVydGhlciBsaW1pdCBkb2VzCi0gICBleGlzdCBhdCB2aWRlb2RldiB0aGF0IGZvcmJpZHMgYW55IGRyaXZlciB0byByZWdpc3RlciBtb3JlIHRoYW4gMzIgdmlkZW8KLSAgIGdyYWJiZXJzLgorICAgdmlkZW9kZXYgc3VwcG9ydHMsIHdoaWNoIGlzIGVxdWFsIHRvIFZJREVPX05VTV9ERVZJQ0VTLgogICovCiBzdGF0aWMgaW50IF9faW5pdCB2aXZpX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0ID0gLUVOT01FTSwgaTsKLQlzdHJ1Y3Qgdml2aV9kZXYgKmRldjsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQ7CisJaW50IHJldCA9IDAsIGk7CiAKIAlpZiAobl9kZXZzIDw9IDApCiAJCW5fZGV2cyA9IDE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbl9kZXZzOyBpKyspIHsKLQkJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOwotCQlpZiAoIWRldikKLQkJCWJyZWFrOwotCi0JCS8qIGluaXQgdmlkZW8gZG1hIHF1ZXVlcyAqLwotCQlJTklUX0xJU1RfSEVBRCgmZGV2LT52aWRxLmFjdGl2ZSk7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+dmlkcS53cSk7Ci0KLQkJLyogaW5pdGlhbGl6ZSBsb2NrcyAqLwotCQlzcGluX2xvY2tfaW5pdCgmZGV2LT5zbG9jayk7Ci0JCW11dGV4X2luaXQoJmRldi0+bXV0ZXgpOwotCi0JCXZmZCA9IHZpZGVvX2RldmljZV9hbGxvYygpOwotCQlpZiAoIXZmZCkgewotCQkJa2ZyZWUoZGV2KTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJKnZmZCA9IHZpdmlfdGVtcGxhdGU7Ci0KLQkJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZmZCwgVkZMX1RZUEVfR1JBQkJFUiwgdmlkZW9fbnIpOwotCQlpZiAocmV0IDwgMCkgewotCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UodmZkKTsKLQkJCWtmcmVlKGRldik7Ci0KLQkJCS8qIElmIHNvbWUgcmVnaXN0ZXJzIHN1Y2NlZWRlZCwga2VlcCBkcml2ZXIgKi8KKwkJcmV0ID0gdml2aV9jcmVhdGVfaW5zdGFuY2UoaSk7CisJCWlmIChyZXQpIHsKKwkJCS8qIElmIHNvbWUgaW5zdGFudGlhdGlvbnMgc3VjY2VlZGVkLCBrZWVwIGRyaXZlciAqLwogCQkJaWYgKGkpCiAJCQkJcmV0ID0gMDsKLQogCQkJYnJlYWs7CiAJCX0KLQotCQkvKiBOb3cgdGhhdCBldmVyeXRoaW5nIGlzIGZpbmUsIGxldCdzIGFkZCBpdCB0byBkZXZpY2UgbGlzdCAqLwotCQlsaXN0X2FkZF90YWlsKCZkZXYtPnZpdmlfZGV2bGlzdCwgJnZpdmlfZGV2bGlzdCk7Ci0KLQkJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwgIiVzICglaSkiLAotCQkJIHZpdmlfdGVtcGxhdGUubmFtZSwgdmZkLT5taW5vcik7Ci0KLQkJaWYgKHZpZGVvX25yID49IDApCi0JCQl2aWRlb19ucisrOwotCi0JCWRldi0+dmZkID0gdmZkOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogVjRMMiBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWRcbiIsCi0JCQlWSVZJX01PRFVMRV9OQU1FLCB2ZmQtPm51bSk7CiAJfQogCiAJaWYgKHJldCA8IDApIHsKLQkJdml2aV9yZWxlYXNlKCk7CiAJCXByaW50ayhLRVJOX0lORk8gIkVycm9yICVkIHdoaWxlIGxvYWRpbmcgdml2aSBkcml2ZXJcbiIsIHJldCk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiVmlkZW8gVGVjaG5vbG9neSBNYWdhemluZSBWaXJ0dWFsIFZpZGVvICIKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJWaWRlbyBUZWNobm9sb2d5IE1hZ2F6aW5lIFZpcnR1YWwgVmlkZW8gIgogCQkJIkNhcHR1cmUgQm9hcmQgdmVyICV1LiV1LiV1IHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4iLAogCQkJKFZJVklfVkVSU0lPTiA+PiAxNikgJiAweEZGLCAoVklWSV9WRVJTSU9OID4+IDgpICYgMHhGRiwKIAkJCVZJVklfVkVSU0lPTiAmIDB4RkYpOwogCi0JCS8qIG5fZGV2cyB3aWxsIHJlZmxlY3QgdGhlIGFjdHVhbCBudW1iZXIgb2YgYWxsb2NhdGVkIGRldmljZXMgKi8KLQkJbl9kZXZzID0gaTsKLQl9CisJLyogbl9kZXZzIHdpbGwgcmVmbGVjdCB0aGUgYWN0dWFsIG51bWJlciBvZiBhbGxvY2F0ZWQgZGV2aWNlcyAqLworCW5fZGV2cyA9IGk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTMzMSwxOSArMTQ0NCwzIEBACiAKIG1vZHVsZV9pbml0KHZpdmlfaW5pdCk7CiBtb2R1bGVfZXhpdCh2aXZpX2V4aXQpOwotCi1NT0RVTEVfREVTQ1JJUFRJT04oIlZpZGVvIFRlY2hub2xvZ3kgTWFnYXppbmUgVmlydHVhbCBWaWRlbyBDYXB0dXJlIEJvYXJkIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIsIFRlZCBXYWx0aGVyIGFuZCBKb2huIFNva29sIik7Ci1NT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7Ci0KLW1vZHVsZV9wYXJhbSh2aWRlb19uciwgdWludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLCAidmlkZW8gaW1pbm9yIHN0YXJ0IG51bWJlciIpOwotCi1tb2R1bGVfcGFyYW0obl9kZXZzLCB1aW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Mobl9kZXZzLCAibnVtYmVyIG9mIHZpZGVvIGRldmljZXMgdG8gY3JlYXRlIik7Ci0KLW1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Zywgdml2aV90ZW1wbGF0ZS5kZWJ1ZywgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJhY3RpdmF0ZXMgZGVidWcgaW5mbyIpOwotCi1tb2R1bGVfcGFyYW0odmlkX2xpbWl0LCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyh2aWRfbGltaXQsICJjYXB0dXJlIG1lbW9yeSBsaW1pdCBpbiBtZWdhYnl0ZXMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnAyN3NtcHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnAyN3NtcHguYwppbmRleCA1ZDczZjY2Li40MmUyM2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZwMjdzbXB4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92cDI3c21weC5jCkBAIC0xMjksMTEgKzEyOSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdnAyN3NtcHhfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHZwMjdzbXB4X2NvcmVfb3BzID0gewpAQCAtMjA2LDggKzIwMSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ2cDI3c21weCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1ZQMjdTTVBYLAotCS5jb21tYW5kID0gdnAyN3NtcHhfY29tbWFuZCwKIAkucHJvYmUgPSB2cDI3c21weF9wcm9iZSwKIAkucmVtb3ZlID0gdnAyN3NtcHhfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHZwMjdzbXB4X2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZweDMyMjAuYwppbmRleCA2N2FhMGRiLi4yZmE3ZThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZweDMyMjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZweDMyMjAuYwpAQCAtMjQsMTAgKzI0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigidnB4MzIyMGEvdnB4MzIxNmIvdnB4MzIxNGMgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkxhdXJlbnQgUGluY2hhcnQiKTsKQEAgLTM3LDE0ICszNywxNyBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKKwogI2RlZmluZSBWUFhfVElNRU9VVF9DT1VOVCAgMTAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IHZweDMyMjAgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAl1bnNpZ25lZCBjaGFyIHJlZ1syNTVdOwogCi0JaW50IG5vcm07CisJdjRsMl9zdGRfaWQgbm9ybTsKKwlpbnQgaWRlbnQ7CiAJaW50IGlucHV0OwogCWludCBlbmFibGU7CiAJaW50IGJyaWdodDsKQEAgLTUzLDMwICs1NiwzOCBAQAogCWludCBzYXQ7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2cHgzMjIwICp0b192cHgzMjIwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHZweDMyMjAsIHNkKTsKK30KKwogc3RhdGljIGNoYXIgKmlucHV0c1tdID0geyAiaW50ZXJuYWwiLCAiY29tcG9zaXRlIiwgInN2aWRlbyIgfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQgdnB4MzIyMF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgdnB4MzIyMF93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbHVlKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAlzdHJ1Y3QgdnB4MzIyMCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJZGVjb2Rlci0+cmVnW3JlZ10gPSB2YWx1ZTsKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB2cHgzMjIwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQorc3RhdGljIGlubGluZSBpbnQgdnB4MzIyMF9yZWFkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZykKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIH0KIAotc3RhdGljIGludCB2cHgzMjIwX2ZwX3N0YXR1cyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCB2cHgzMjIwX2ZwX3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewogCXVuc2lnbmVkIGNoYXIgc3RhdHVzOwogCXVuc2lnbmVkIGludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFZQWF9USU1FT1VUX0NPVU5UOyBpKyspIHsKLQkJc3RhdHVzID0gdnB4MzIyMF9yZWFkKGNsaWVudCwgMHgyOSk7CisJCXN0YXR1cyA9IHZweDMyMjBfcmVhZChzZCwgMHgyOSk7CiAKIAkJaWYgKCEoc3RhdHVzICYgNCkpCiAJCQlyZXR1cm4gMDsKQEAgLTkwLDU3ICsxMDEsNjAgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgdnB4MzIyMF9mcF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBmcGFkZHIsIHUxNiBkYXRhKQorc3RhdGljIGludCB2cHgzMjIwX2ZwX3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IGZwYWRkciwgdTE2IGRhdGEpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCiAJLyogV3JpdGUgdGhlIDE2LWJpdCBhZGRyZXNzIHRvIHRoZSBGUFdSIHJlZ2lzdGVyICovCiAJaWYgKGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCAweDI3LCBzd2FiMTYoZnBhZGRyKSkgPT0gLTEpIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAodnB4MzIyMF9mcF9zdGF0dXMoY2xpZW50KSA8IDApCisJaWYgKHZweDMyMjBfZnBfc3RhdHVzKHNkKSA8IDApCiAJCXJldHVybiAtMTsKIAogCS8qIFdyaXRlIHRoZSAxNi1iaXQgZGF0YSB0byB0aGUgRlBEQVQgcmVnaXN0ZXIgKi8KIAlpZiAoaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIDB4MjgsIHN3YWIxNihkYXRhKSkgPT0gLTEpIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUxNiB2cHgzMjIwX2ZwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IGZwYWRkcikKK3N0YXRpYyB1MTYgdnB4MzIyMF9mcF9yZWFkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUxNiBmcGFkZHIpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCXMxNiBkYXRhOwogCiAJLyogV3JpdGUgdGhlIDE2LWJpdCBhZGRyZXNzIHRvIHRoZSBGUFJEIHJlZ2lzdGVyICovCiAJaWYgKGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCAweDI2LCBzd2FiMTYoZnBhZGRyKSkgPT0gLTEpIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAodnB4MzIyMF9mcF9zdGF0dXMoY2xpZW50KSA8IDApCisJaWYgKHZweDMyMjBfZnBfc3RhdHVzKHNkKSA8IDApCiAJCXJldHVybiAtMTsKIAogCS8qIFJlYWQgdGhlIDE2LWJpdCBkYXRhIGZyb20gdGhlIEZQREFUIHJlZ2lzdGVyICovCiAJZGF0YSA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIDB4MjgpOwogCWlmIChkYXRhID09IC0xKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJcmV0dXJuIHN3YWIxNihkYXRhKTsKIH0KIAotc3RhdGljIGludCB2cHgzMjIwX3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIGludCB2cHgzMjIwX3dyaXRlX2Jsb2NrKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXU4IHJlZzsKIAlpbnQgcmV0ID0gLTE7CiAKIAl3aGlsZSAobGVuID49IDIpIHsKIAkJcmVnID0gKmRhdGErKzsKLQkJcmV0ID0gdnB4MzIyMF93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKyk7CisJCXJldCA9IHZweDMyMjBfd3JpdGUoc2QsIHJlZywgKmRhdGErKyk7CiAJCWlmIChyZXQgPCAwKQogCQkJYnJlYWs7CiAJCWxlbiAtPSAyOwpAQCAtMTQ5LDcgKzE2Myw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCitzdGF0aWMgaW50IHZweDMyMjBfd3JpdGVfZnBfYmxvY2soc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJY29uc3QgdTE2ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXU4IHJlZzsKQEAgLTE1Nyw3ICsxNzEsNyBAQAogCiAJd2hpbGUgKGxlbiA+IDEpIHsKIAkJcmVnID0gKmRhdGErKzsKLQkJcmV0IHw9IHZweDMyMjBfZnBfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOworCQlyZXQgfD0gdnB4MzIyMF9mcF93cml0ZShzZCwgcmVnLCAqZGF0YSsrKTsKIAkJbGVuIC09IDI7CiAJfQogCkBAIC0yNTksMjc2ICsyNzMsMjc3IEBACiAJMHg0YiwgMHgyOTgsCQkvKiBQTEwgZ2FpbiAqLwogfTsKIAotc3RhdGljIHZvaWQgdnB4MzIyMF9kdW1wX2kyYyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWludCBsZW4gPSBzaXplb2YoaW5pdF9jb21tb24pOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBpbml0X2NvbW1vbjsKIAotCXdoaWxlIChsZW4gPiAxKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImkyYyByZWcgMHglMDJ4IGRhdGEgMHglMDJ4XG4iLAotCQkJKmRhdGEsIHZweDMyMjBfcmVhZChjbGllbnQsICpkYXRhKSk7Ci0JCWRhdGEgKz0gMjsKLQkJbGVuIC09IDI7Ci0JfQorc3RhdGljIGludCB2cHgzMjIwX2luaXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCkKK3sKKwlzdHJ1Y3QgdnB4MzIyMCAqZGVjb2RlciA9IHRvX3ZweDMyMjAoc2QpOworCisJdnB4MzIyMF93cml0ZV9ibG9jayhzZCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOworCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soc2QsIGluaXRfZnAsIHNpemVvZihpbml0X2ZwKSA+PiAxKTsKKwlpZiAoZGVjb2Rlci0+bm9ybSAmIFY0TDJfU1REX05UU0MpCisJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soc2QsIGluaXRfbnRzYywgc2l6ZW9mKGluaXRfbnRzYykgPj4gMSk7CisJZWxzZSBpZiAoZGVjb2Rlci0+bm9ybSAmIFY0TDJfU1REX1BBTCkKKwkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhzZCwgaW5pdF9wYWwsIHNpemVvZihpbml0X3BhbCkgPj4gMSk7CisJZWxzZSBpZiAoZGVjb2Rlci0+bm9ybSAmIFY0TDJfU1REX1NFQ0FNKQorCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKHNkLCBpbml0X3NlY2FtLCBzaXplb2YoaW5pdF9zZWNhbSkgPj4gMSk7CisJZWxzZQorCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKHNkLCBpbml0X3BhbCwgc2l6ZW9mKGluaXRfcGFsKSA+PiAxKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2cHgzMjIwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHZweDMyMjBfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqcHN0YXR1cywgdjRsMl9zdGRfaWQgKnBzdGQpCiB7Ci0Jc3RydWN0IHZweDMyMjAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgcmVzID0gVjRMMl9JTl9TVF9OT19TSUdOQUwsIHN0YXR1czsKKwl2NGwyX3N0ZF9pZCBzdGQgPSAwOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIDA6Ci0JewotCQl2cHgzMjIwX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sCi0JCQkJICAgIHNpemVvZihpbml0X2NvbW1vbikpOwotCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9mcCwKLQkJCQkgICAgICAgc2l6ZW9mKGluaXRfZnApID4+IDEpOwotCQlzd2l0Y2ggKGRlY29kZXItPm5vcm0pIHsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLAotCQkJCQkgICAgICAgc2l6ZW9mKGluaXRfbnRzYykgPj4gMSk7CisJc3RhdHVzID0gdnB4MzIyMF9mcF9yZWFkKHNkLCAweDBmMyk7CisKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzdGF0dXM6IDB4JTA0eFxuIiwgc3RhdHVzKTsKKworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKChzdGF0dXMgJiAweDIwKSA9PSAwKSB7CisJCXJlcyA9IDA7CisKKwkJc3dpdGNoIChzdGF0dXMgJiAweDE4KSB7CisJCWNhc2UgMHgwMDoKKwkJY2FzZSAweDEwOgorCQljYXNlIDB4MTQ6CisJCWNhc2UgMHgxODoKKwkJCXN0ZCA9IFY0TDJfU1REX1BBTDsKIAkJCWJyZWFrOwogCi0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9wYWwsCi0JCQkJCSAgICAgICBzaXplb2YoaW5pdF9wYWwpID4+IDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklERU9fTU9ERV9TRUNBTToKLQkJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X3NlY2FtLAotCQkJCQkgICAgICAgc2l6ZW9mKGluaXRfc2VjYW0pID4+IDEpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9wYWwsCi0JCQkJCSAgICAgICBzaXplb2YoaW5pdF9wYWwpID4+IDEpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX0RVTVA6Ci0JewotCQl2cHgzMjIwX2R1bXBfaTJjKGNsaWVudCk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgotCXsKLQkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkRFQ09ERVJfR0VUX0NBUEFCSUxJVElFU1xuIik7Ci0KLQkJY2FwLT5mbGFncyA9IFZJREVPX0RFQ09ERVJfUEFMIHwKLQkJCSAgICAgVklERU9fREVDT0RFUl9OVFNDIHwKLQkJCSAgICAgVklERU9fREVDT0RFUl9TRUNBTSB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfQVVUTyB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfQ0NJUjsKLQkJY2FwLT5pbnB1dHMgPSAzOwotCQljYXAtPm91dHB1dHMgPSAxOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfR0VUX1NUQVRVUzoKLQl7Ci0JCWludCByZXMgPSAwLCBzdGF0dXM7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiREVDT0RFUl9HRVRfU1RBVFVTXG4iKTsKLQotCQlzdGF0dXMgPSB2cHgzMjIwX2ZwX3JlYWQoY2xpZW50LCAweDBmMyk7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzOiAweCUwNHhcbiIsIHN0YXR1cyk7Ci0KLQkJaWYgKHN0YXR1cyA8IDApCi0JCQlyZXR1cm4gc3RhdHVzOwotCi0JCWlmICgoc3RhdHVzICYgMHgyMCkgPT0gMCkgewotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0dPT0QgfCBERUNPREVSX1NUQVRVU19DT0xPUjsKLQotCQkJc3dpdGNoIChzdGF0dXMgJiAweDE4KSB7Ci0JCQljYXNlIDB4MDA6Ci0JCQljYXNlIDB4MTA6Ci0JCQljYXNlIDB4MTQ6Ci0JCQljYXNlIDB4MTg6Ci0JCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1BBTDsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAweDA4OgotCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19TRUNBTTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAweDA0OgotCQkJY2FzZSAweDBjOgotCQkJY2FzZSAweDFjOgotCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19OVFNDOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJKihpbnQgKikgYXJnID0gcmVzOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX05PUk06Ci0JewotCQlpbnQgKmlhcmcgPSBhcmcsIGRhdGE7Ci0JCWludCB0ZW1wX2lucHV0OwotCi0JCS8qIEhlcmUgd2UgYmFjayB1cCB0aGUgaW5wdXQgc2VsZWN0aW9uIGJlY2F1c2UgaXQgZ2V0cwotCQkgICBvdmVyd3JpdHRlbiB3aGVuIHdlIGZpbGwgdGhlIHJlZ2lzdGVycyB3aXRoIHRoZQotCQkgICBjaG9vc2VuIHZpZGVvIG5vcm0gKi8KLQkJdGVtcF9pbnB1dCA9IHZweDMyMjBfZnBfcmVhZChjbGllbnQsIDB4ZjIpOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkRFQ09ERVJfU0VUX05PUk0gJWRcbiIsICppYXJnKTsKLQkJc3dpdGNoICgqaWFyZykgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X250c2MsCi0JCQkJCSAgICAgICBzaXplb2YoaW5pdF9udHNjKSA+PiAxKTsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIm5vcm0gc3dpdGNoZWQgdG8gTlRTQ1xuIik7CisJCWNhc2UgMHgwODoKKwkJCXN0ZCA9IFY0TDJfU1REX1NFQ0FNOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X3BhbCwKLQkJCQkJICAgICAgIHNpemVvZihpbml0X3BhbCkgPj4gMSk7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3JtIHN3aXRjaGVkIHRvIFBBTFxuIik7CisJCWNhc2UgMHgwNDoKKwkJY2FzZSAweDBjOgorCQljYXNlIDB4MWM6CisJCQlzdGQgPSBWNEwyX1NURF9OVFNDOwogCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgotCQkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfc2VjYW0sCi0JCQkJCSAgICAgICBzaXplb2YoaW5pdF9zZWNhbSkgPj4gMSk7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3JtIHN3aXRjaGVkIHRvIFNFQ0FNXG4iKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJLyogRklYTUUgVGhpcyBpcyBvbmx5IHByZWxpbWluYXJ5IHN1cHBvcnQgKi8KLQkJCWRhdGEgPSB2cHgzMjIwX2ZwX3JlYWQoY2xpZW50LCAweGYyKSAmIDB4MjA7Ci0JCQl2cHgzMjIwX2ZwX3dyaXRlKGNsaWVudCwgMHhmMiwgMHgwMGMwIHwgZGF0YSk7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3JtIHN3aXRjaGVkIHRvIEFVVE9cbiIpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWRlY29kZXItPm5vcm0gPSAqaWFyZzsKKwl9CisJaWYgKHBzdGQpCisJCSpwc3RkID0gc3RkOworCWlmIChwc3RhdHVzKQorCQkqcHN0YXR1cyA9IHN0YXR1czsKKwlyZXR1cm4gMDsKK30KIAotCQkvKiBBbmQgaGVyZSB3ZSBzZXQgdGhlIGJhY2tlZCB1cCB2aWRlbyBpbnB1dCBhZ2FpbiAqLwotCQl2cHgzMjIwX2ZwX3dyaXRlKGNsaWVudCwgMHhmMiwgdGVtcF9pbnB1dCB8IDB4MDAxMCk7Ci0JCXVkZWxheSgxMCk7Ci0JCWJyZWFrOworc3RhdGljIGludCB2cHgzMjIwX3F1ZXJ5c3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkICpzdGQpCit7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAicXVlcnlzdGRcbiIpOworCXJldHVybiB2cHgzMjIwX3N0YXR1cyhzZCwgTlVMTCwgc3RkKTsKK30KKworc3RhdGljIGludCB2cHgzMjIwX2dfaW5wdXRfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqc3RhdHVzKQoreworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImdfaW5wdXRfc3RhdHVzXG4iKTsKKwlyZXR1cm4gdnB4MzIyMF9zdGF0dXMoc2QsIHN0YXR1cywgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgdnB4MzIyMF9zX3N0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCit7CisJc3RydWN0IHZweDMyMjAgKmRlY29kZXIgPSB0b192cHgzMjIwKHNkKTsKKwlpbnQgdGVtcF9pbnB1dDsKKworCS8qIEhlcmUgd2UgYmFjayB1cCB0aGUgaW5wdXQgc2VsZWN0aW9uIGJlY2F1c2UgaXQgZ2V0cworCSAgIG92ZXJ3cml0dGVuIHdoZW4gd2UgZmlsbCB0aGUgcmVnaXN0ZXJzIHdpdGggdGhlCisJICAgY2hvb3NlbiB2aWRlbyBub3JtICovCisJdGVtcF9pbnB1dCA9IHZweDMyMjBfZnBfcmVhZChzZCwgMHhmMik7CisKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzX3N0ZCAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXN0ZCk7CisJaWYgKHN0ZCAmIFY0TDJfU1REX05UU0MpIHsKKwkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhzZCwgaW5pdF9udHNjLCBzaXplb2YoaW5pdF9udHNjKSA+PiAxKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAibm9ybSBzd2l0Y2hlZCB0byBOVFNDXG4iKTsKKwl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTCkgeworCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKHNkLCBpbml0X3BhbCwgc2l6ZW9mKGluaXRfcGFsKSA+PiAxKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAibm9ybSBzd2l0Y2hlZCB0byBQQUxcbiIpOworCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfU0VDQU0pIHsKKwkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhzZCwgaW5pdF9zZWNhbSwgc2l6ZW9mKGluaXRfc2VjYW0pID4+IDEpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJub3JtIHN3aXRjaGVkIHRvIFNFQ0FNXG4iKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnLCBkYXRhOworCWRlY29kZXItPm5vcm0gPSBzdGQ7CiAKLQkJLyogUko6ICAqaWFyZyA9IDA6IFNUOCAoUENUVikgaW5wdXQKLQkJICppYXJnID0gMTogQ09NUE9TSVRFICBpbnB1dAotCQkgKmlhcmcgPSAyOiBTVkhTICAgICAgIGlucHV0ICAqLworCS8qIEFuZCBoZXJlIHdlIHNldCB0aGUgYmFja2VkIHVwIHZpZGVvIGlucHV0IGFnYWluICovCisJdnB4MzIyMF9mcF93cml0ZShzZCwgMHhmMiwgdGVtcF9pbnB1dCB8IDB4MDAxMCk7CisJdWRlbGF5KDEwKTsKKwlyZXR1cm4gMDsKK30KIAotCQljb25zdCBpbnQgaW5wdXRbM11bMl0gPSB7Ci0JCQl7MHgwYywgMH0sCi0JCQl7MHgwZCwgMH0sCi0JCQl7MHgwZSwgMX0KLQkJfTsKK3N0YXRpYyBpbnQgdnB4MzIyMF9zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJaW50IGRhdGE7CiAKLQkJaWYgKCppYXJnIDwgMCB8fCAqaWFyZyA+IDIpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBSSjogICByb3V0ZS0+aW5wdXQgPSAwOiBTVDggKFBDVFYpIGlucHV0CisJCSByb3V0ZS0+aW5wdXQgPSAxOiBDT01QT1NJVEUgIGlucHV0CisJCSByb3V0ZS0+aW5wdXQgPSAyOiBTVkhTICAgICAgIGlucHV0ICAqLwogCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImlucHV0IHN3aXRjaGVkIHRvICVzXG4iLCBpbnB1dHNbKmlhcmddKTsKKwljb25zdCBpbnQgaW5wdXRbM11bMl0gPSB7CisJCXsweDBjLCAwfSwKKwkJezB4MGQsIDB9LAorCQl7MHgwZSwgMX0KKwl9OwogCi0JCXZweDMyMjBfd3JpdGUoY2xpZW50LCAweDMzLCBpbnB1dFsqaWFyZ11bMF0pOworCWlmIChyb3V0ZS0+aW5wdXQgPCAwIHx8IHJvdXRlLT5pbnB1dCA+IDIpCisJCXJldHVybiAtRUlOVkFMOwogCi0JCWRhdGEgPSB2cHgzMjIwX2ZwX3JlYWQoY2xpZW50LCAweGYyKSAmIH4oMHgwMDIwKTsKLQkJaWYgKGRhdGEgPCAwKQotCQkJcmV0dXJuIGRhdGE7Ci0JCS8qIDB4MDAxMCBpcyByZXF1aXJlZCB0byBsYXRjaCB0aGUgc2V0dGluZyAqLwotCQl2cHgzMjIwX2ZwX3dyaXRlKGNsaWVudCwgMHhmMiwKLQkJCQkgZGF0YSB8IChpbnB1dFsqaWFyZ11bMV0gPDwgNSkgfCAweDAwMTApOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImlucHV0IHN3aXRjaGVkIHRvICVzXG4iLCBpbnB1dHNbcm91dGUtPmlucHV0XSk7CiAKLQkJdWRlbGF5KDEwKTsKKwl2cHgzMjIwX3dyaXRlKHNkLCAweDMzLCBpbnB1dFtyb3V0ZS0+aW5wdXRdWzBdKTsKKworCWRhdGEgPSB2cHgzMjIwX2ZwX3JlYWQoc2QsIDB4ZjIpICYgfigweDAwMjApOworCWlmIChkYXRhIDwgMCkKKwkJcmV0dXJuIGRhdGE7CisJLyogMHgwMDEwIGlzIHJlcXVpcmVkIHRvIGxhdGNoIHRoZSBzZXR0aW5nICovCisJdnB4MzIyMF9mcF93cml0ZShzZCwgMHhmMiwKKwkJCWRhdGEgfCAoaW5wdXRbcm91dGUtPmlucHV0XVsxXSA8PCA1KSB8IDB4MDAxMCk7CisKKwl1ZGVsYXkoMTApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZweDMyMjBfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKK3sKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzX3N0cmVhbSAlc1xuIiwgZW5hYmxlID8gIm9uIiA6ICJvZmYiKTsKKworCXZweDMyMjBfd3JpdGUoc2QsIDB4ZjIsIChlbmFibGUgPyAweDFiIDogMHgwMCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZweDMyMjBfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAtMTI4LCAxMjcsIDEsIDApOwogCQlicmVhazsKLQl9CiAKLQljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAoKmlhcmcgIT0gMCkgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQl2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjMsIDEsIDMyKTsKIAkJYnJlYWs7Ci0JfQogCi0JY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiREVDT0RFUl9FTkFCTEVfT1VUUFVUICVkXG4iLCAqaWFyZyk7Ci0KLQkJdnB4MzIyMF93cml0ZShjbGllbnQsIDB4ZjIsICgqaWFyZyA/IDB4MWIgOiAweDAwKSk7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQl2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNDA5NSwgMSwgMjA0OCk7CiAJCWJyZWFrOwotCX0KIAotCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKLQl7Ci0JCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7Ci0KLQkJaWYgKGRlY29kZXItPmJyaWdodCAhPSBwaWMtPmJyaWdodG5lc3MpIHsKLQkJCS8qIFdlIHdhbnQgLTEyOCB0byAxMjggd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPmJyaWdodCA9IHBpYy0+YnJpZ2h0bmVzczsKLQkJCXZweDMyMjBfd3JpdGUoY2xpZW50LCAweGU2LAotCQkJCSAgICAgIChkZWNvZGVyLT5icmlnaHQgLSAzMjc2OCkgPj4gOCk7Ci0JCX0KLQkJaWYgKGRlY29kZXItPmNvbnRyYXN0ICE9IHBpYy0+Y29udHJhc3QpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byA2NCB3ZSBnZXQgMC02NTUzNSAqLwotCQkJLyogQml0IDcgYW5kIDggaXMgZm9yIG5vaXNlIHNoYXBpbmcgKi8KLQkJCWRlY29kZXItPmNvbnRyYXN0ID0gcGljLT5jb250cmFzdDsKLQkJCXZweDMyMjBfd3JpdGUoY2xpZW50LCAweGU3LAotCQkJCSAgICAgIChkZWNvZGVyLT5jb250cmFzdCA+PiAxMCkgKyAxOTIpOwotCQl9Ci0JCWlmIChkZWNvZGVyLT5zYXQgIT0gcGljLT5jb2xvdXIpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byA0MDk2IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5zYXQgPSBwaWMtPmNvbG91cjsKLQkJCXZweDMyMjBfZnBfd3JpdGUoY2xpZW50LCAweGEwLAotCQkJCQkgZGVjb2Rlci0+c2F0ID4+IDQpOwotCQl9Ci0JCWlmIChkZWNvZGVyLT5odWUgIT0gcGljLT5odWUpIHsKLQkJCS8qIFdlIHdhbnQgLTUxMiB0byA1MTIgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPmh1ZSA9IHBpYy0+aHVlOwotCQkJdnB4MzIyMF9mcF93cml0ZShjbGllbnQsIDB4MWMsCi0JCQkJCSAoKGRlY29kZXItPmh1ZSAtIDMyNzY4KSA+PiA2KSAmIDB4RkZGKTsKLQkJfQorCWNhc2UgVjRMMl9DSURfSFVFOgorCQl2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgLTUxMiwgNTExLCAxLCAwKTsKIAkJYnJlYWs7Ci0JfQogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdnB4MzIyMF9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCB2cHgzMjIwX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXZweDMyMjBfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X2NvbW1vbiwgc2l6ZW9mKGluaXRfY29tbW9uKSk7Ci0JdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfZnAsIHNpemVvZihpbml0X2ZwKSA+PiAxKTsKLQkvKiBEZWZhdWx0IHRvIFBBTCAqLwotCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X3BhbCwgc2l6ZW9mKGluaXRfcGFsKSA+PiAxKTsKKwlzdHJ1Y3QgdnB4MzIyMCAqZGVjb2RlciA9IHRvX3ZweDMyMjAoc2QpOwogCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT5icmlnaHQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+Y29udHJhc3Q7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT5zYXQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPmh1ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZweDMyMjBfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHZweDMyMjAgKmRlY29kZXIgPSB0b192cHgzMjIwKHNkKTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCWlmIChkZWNvZGVyLT5icmlnaHQgIT0gY3RybC0+dmFsdWUpIHsKKwkJCWRlY29kZXItPmJyaWdodCA9IGN0cmwtPnZhbHVlOworCQkJdnB4MzIyMF93cml0ZShzZCwgMHhlNiwgZGVjb2Rlci0+YnJpZ2h0KTsKKwkJfQorCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQlpZiAoZGVjb2Rlci0+Y29udHJhc3QgIT0gY3RybC0+dmFsdWUpIHsKKwkJCS8qIEJpdCA3IGFuZCA4IGlzIGZvciBub2lzZSBzaGFwaW5nICovCisJCQlkZWNvZGVyLT5jb250cmFzdCA9IGN0cmwtPnZhbHVlOworCQkJdnB4MzIyMF93cml0ZShzZCwgMHhlNywgZGVjb2Rlci0+Y29udHJhc3QgKyAxOTIpOworCQl9CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJaWYgKGRlY29kZXItPnNhdCAhPSBjdHJsLT52YWx1ZSkgeworCQkJZGVjb2Rlci0+c2F0ID0gY3RybC0+dmFsdWU7CisJCQl2cHgzMjIwX2ZwX3dyaXRlKHNkLCAweGEwLCBkZWNvZGVyLT5zYXQpOworCQl9CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQlpZiAoZGVjb2Rlci0+aHVlICE9IGN0cmwtPnZhbHVlKSB7CisJCQlkZWNvZGVyLT5odWUgPSBjdHJsLT52YWx1ZTsKKwkJCXZweDMyMjBfZnBfd3JpdGUoc2QsIDB4MWMsIGRlY29kZXItPmh1ZSk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZweDMyMjBfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCB2cHgzMjIwICpkZWNvZGVyID0gdG9fdnB4MzIyMChzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgZGVjb2Rlci0+aWRlbnQsIDApOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHZweDMyMjBfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IHZweDMyMjBfZ19jaGlwX2lkZW50LAorCS5pbml0ID0gdnB4MzIyMF9pbml0LAorCS5nX2N0cmwgPSB2cHgzMjIwX2dfY3RybCwKKwkuc19jdHJsID0gdnB4MzIyMF9zX2N0cmwsCisJLnF1ZXJ5Y3RybCA9IHZweDMyMjBfcXVlcnljdHJsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgdnB4MzIyMF90dW5lcl9vcHMgPSB7CisJLnNfc3RkID0gdnB4MzIyMF9zX3N0ZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHZweDMyMjBfdmlkZW9fb3BzID0geworCS5zX3JvdXRpbmcgPSB2cHgzMjIwX3Nfcm91dGluZywKKwkuc19zdHJlYW0gPSB2cHgzMjIwX3Nfc3RyZWFtLAorCS5xdWVyeXN0ZCA9IHZweDMyMjBfcXVlcnlzdGQsCisJLmdfaW5wdXRfc3RhdHVzID0gdnB4MzIyMF9nX2lucHV0X3N0YXR1cywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHZweDMyMjBfb3BzID0geworCS5jb3JlID0gJnZweDMyMjBfY29yZV9vcHMsCisJLnR1bmVyID0gJnZweDMyMjBfdHVuZXJfb3BzLAorCS52aWRlbyA9ICZ2cHgzMjIwX3ZpZGVvX29wcywKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDbGllbnQgbWFuYWdlbWVudCBjb2RlCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg4NiA+PiAxLCAweDhlID4+IDEsIEkyQ19DTElFTlRfRU5EIH07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwotCiBzdGF0aWMgaW50IHZweDMyMjBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdnB4MzIyMCAqZGVjb2RlcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCWNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOwogCXU4IHZlcjsKIAl1MTYgcG47CkBAIC01NDEsMTggKzU1NiwyMCBAQAogCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdnB4MzIyMCksIEdGUF9LRVJORUwpOwogCWlmIChkZWNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWRlY29kZXItPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKKwlzZCA9ICZkZWNvZGVyLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmdnB4MzIyMF9vcHMpOworCWRlY29kZXItPm5vcm0gPSBWNEwyX1NURF9QQUw7CiAJZGVjb2Rlci0+aW5wdXQgPSAwOwogCWRlY29kZXItPmVuYWJsZSA9IDE7CiAJZGVjb2Rlci0+YnJpZ2h0ID0gMzI3Njg7CiAJZGVjb2Rlci0+Y29udHJhc3QgPSAzMjc2ODsKIAlkZWNvZGVyLT5odWUgPSAzMjc2ODsKIAlkZWNvZGVyLT5zYXQgPSAzMjc2ODsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKIAogCXZlciA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4MDApOwogCXBuID0gKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4MDIpIDw8IDgpICsKIAkJaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgMHgwMSk7CisJZGVjb2Rlci0+aWRlbnQgPSBWNEwyX0lERU5UX1ZQWDMyMjBBOwogCWlmICh2ZXIgPT0gMHhlYykgewogCQlzd2l0Y2ggKHBuKSB7CiAJCWNhc2UgMHg0NjgwOgpAQCAtNTYwLDI2ICs1NzcsMzQgQEAKIAkJCWJyZWFrOwogCQljYXNlIDB4NDI2MDoKIAkJCW5hbWUgPSAidnB4MzIxNmIiOworCQkJZGVjb2Rlci0+aWRlbnQgPSBWNEwyX0lERU5UX1ZQWDMyMTZCOwogCQkJYnJlYWs7CiAJCWNhc2UgMHg0MjgwOgogCQkJbmFtZSA9ICJ2cHgzMjE0YyI7CisJCQlkZWNvZGVyLT5pZGVudCA9IFY0TDJfSURFTlRfVlBYMzIxNEM7CiAJCQlicmVhazsKIAkJfQogCX0KIAlpZiAobmFtZSkKLQkJdjRsX2luZm8oY2xpZW50LCAiJXMgZm91bmQgQCAweCV4ICglcylcbiIsIG5hbWUsCisJCXY0bDJfaW5mbyhzZCwgIiVzIGZvdW5kIEAgMHgleCAoJXMpXG4iLCBuYW1lLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAJZWxzZQotCQl2NGxfaW5mbyhjbGllbnQsICJjaGlwICglMDJ4OiUwNHgpIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQl2NGwyX2luZm8oc2QsICJjaGlwICglMDJ4OiUwNHgpIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJdmVyLCBwbiwgY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKLQl2cHgzMjIwX2luaXRfY2xpZW50KGNsaWVudCk7CisJdnB4MzIyMF93cml0ZV9ibG9jayhzZCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOworCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soc2QsIGluaXRfZnAsIHNpemVvZihpbml0X2ZwKSA+PiAxKTsKKwkvKiBEZWZhdWx0IHRvIFBBTCAqLworCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soc2QsIGluaXRfcGFsLCBzaXplb2YoaW5pdF9wYWwpID4+IDEpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZweDMyMjBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Ja2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b192cHgzMjIwKHNkKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU5Myw4ICs2MTgsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidnB4MzIyMCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1ZQWDMyMjAsCi0JLmNvbW1hbmQgPSB2cHgzMjIwX2NvbW1hbmQsCiAJLnByb2JlID0gdnB4MzIyMF9wcm9iZSwKIAkucmVtb3ZlID0gdnB4MzIyMF9yZW1vdmUsCiAJLmlkX3RhYmxlID0gdnB4MzIyMF9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjYuYwppbmRleCAwMzhmZjMyLi5kY2FkZTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2Ni5jCkBAIC01Nyw3ICs1Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5jCmluZGV4IDEwNWE4MzIuLjNiMDhiYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2UtZmxhZ3MuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAogI2luY2x1ZGUgInc5OTY4Y2YuaCIKQEAgLTY4LDcgKzY5LDYgQEAKIE1PRFVMRV9MSUNFTlNFKFc5OTY4Q0ZfTU9EVUxFX0xJQ0VOU0UpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIlZpZGVvIik7CiAKLXN0YXRpYyBpbnQgb3Ztb2RfbG9hZCA9IFc5OTY4Q0ZfT1ZNT0RfTE9BRDsKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzaW1jYW1zID0gVzk5NjhDRl9TSU1DQU1TOwogc3RhdGljIHNob3J0IHZpZGVvX25yW109e1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gLTF9OyAvKi0xPWZpcnN0IGZyZWUqLwogc3RhdGljIHVuc2lnbmVkIGludCBwYWNrZXRfc2l6ZVtdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0KQEAgLTExMSw5ICsxMTEsNiBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHBhcmFtX252WzI0XTsgLyogbnVtYmVyIG9mIHZhbHVlcyBwZXIgcGFyYW1ldGVyICovCiAKLSNpZmRlZiBDT05GSUdfTU9EVUxFUwotbW9kdWxlX3BhcmFtKG92bW9kX2xvYWQsIGJvb2wsIDA2NDQpOwotI2VuZGlmCiBtb2R1bGVfcGFyYW0oc2ltY2FtcywgdXNob3J0LCAwNjQ0KTsKIG1vZHVsZV9wYXJhbV9hcnJheSh2aWRlb19uciwgc2hvcnQsICZwYXJhbV9udlswXSwgMDQ0NCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkocGFja2V0X3NpemUsIHVpbnQsICZwYXJhbV9udlsxXSwgMDQ0NCk7CkBAIC0xNDQsMTggKzE0MSw2IEBACiBtb2R1bGVfcGFyYW0oc3BlY2lmaWNfZGVidWcsIGJvb2wsIDA2NDQpOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfTU9EVUxFUwotTU9EVUxFX1BBUk1fREVTQyhvdm1vZF9sb2FkLAotCQkgIlxuPDB8MT4gQXV0b21hdGljICdvdmNhbWNoaXAnIG1vZHVsZSBsb2FkaW5nLiIKLQkJICJcbjAgZGlzYWJsZWQsIDEgZW5hYmxlZC4iCi0JCSAiXG5JZiBlbmFibGVkLCdpbnNtb2QnIHNlYXJjaGVzIGZvciB0aGUgcmVxdWlyZWQgJ292Y2FtY2hpcCciCi0JCSAiXG5tb2R1bGUgaW4gdGhlIHN5c3RlbSwgYWNjb3JkaW5nIHRvIGl0cyBjb25maWd1cmF0aW9uLCBhbmQiCi0JCSAiXG5hdHRlbXB0cyB0byBsb2FkIHRoYXQgbW9kdWxlIGF1dG9tYXRpY2FsbHkuIFRoaXMgYWN0aW9uIGlzIgotCQkgIlxucGVyZm9ybWVkIG9uY2UgYXMgc29vbiBhcyB0aGUgJ3c5OTY4Y2YnIG1vZHVsZSBpcyBsb2FkZWQiCi0JCSAiXG5pbnRvIG1lbW9yeS4iCi0JCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9PVk1PRF9MT0FEKSIuIgotCQkgIlxuIik7Ci0jZW5kaWYKIE1PRFVMRV9QQVJNX0RFU0Moc2ltY2FtcywKIAkJICJcbjxuPiBOdW1iZXIgb2YgY2FtZXJhcyBhbGxvd2VkIHRvIHN0cmVhbSBzaW11bHRhbmVvdXNseS4iCiAJCSAiXG5uIG1heSB2YXJ5IGZyb20gMCB0byAiCkBAIC00NDMsOCArNDI4LDYgQEAKIAkJCQkgIHVuc2lnbmVkIHNob3J0IGZsYWdzLCBjaGFyIHJlYWRfd3JpdGUsCiAJCQkJICB1OCBjb21tYW5kLCBpbnQgc2l6ZSwgdW5pb24gaTJjX3NtYnVzX2RhdGEqKTsKIHN0YXRpYyB1MzIgdzk5NjhjZl9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIqKTsKLXN0YXRpYyBpbnQgdzk5NjhjZl9pMmNfYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCopOwotc3RhdGljIGludCB3OTk2OGNmX2kyY19kZXRhY2hfaW5mb3JtKHN0cnVjdCBpMmNfY2xpZW50Kik7CiAKIC8qIE1lbW9yeSBtYW5hZ2VtZW50ICovCiBzdGF0aWMgdm9pZCogcnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKTsKQEAgLTE0NDMsMTkgKzE0MjYsMTEgQEAKIAkJICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzLCBjaGFyIHJlYWRfd3JpdGUsIHU4IGNvbW1hbmQsCiAJCSAgICAgICBpbnQgc2l6ZSwgdW5pb24gaTJjX3NtYnVzX2RhdGEgKmRhdGEpCiB7Ci0Jc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0gPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCXN0cnVjdCB3OTk2OGNmX2RldmljZSAqY2FtID0gdG9fY2FtKHY0bDJfZGV2KTsKIAl1OCBpOwogCWludCBlcnIgPSAwOwogCi0Jc3dpdGNoIChhZGRyKSB7Ci0JCWNhc2UgT1Y2eHgwX1NJRDoKLQkJY2FzZSBPVjd4eDBfU0lEOgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlEQkcoNCwgIlJlamVjdGVkIHNsYXZlIElEIDB4JTA0WCIsIGFkZHIpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlpZiAoc2l6ZSA9PSBJMkNfU01CVVNfQllURSkgewogCQkvKiBXaHkgYWRkciA8PD0gMT8gU2VlIE9WWFhYMF9TSUQgZGVmaW5lcyBpbiBvdmNhbWNoaXAuaCAqLwogCQlhZGRyIDw8PSAxOwpAQCAtMTQ2Myw4ICsxNDM4LDE3IEBACiAJCWlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19XUklURSkKIAkJCWVyciA9IHc5OTY4Y2ZfaTJjX2FkYXBfd3JpdGVfYnl0ZShjYW0sIGFkZHIsIGNvbW1hbmQpOwogCQllbHNlIGlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19SRUFEKQotCQkJZXJyID0gdzk5NjhjZl9pMmNfYWRhcF9yZWFkX2J5dGUoY2FtLGFkZHIsJmRhdGEtPmJ5dGUpOwotCisJCQlmb3IgKGkgPSAxOyBpIDw9IFc5OTY4Q0ZfSTJDX1JXX1JFVFJJRVM7IGkrKykgeworCQkJCWVyciA9IHc5OTY4Y2ZfaTJjX2FkYXBfcmVhZF9ieXRlKGNhbSwgYWRkciwKKwkJCQkJCQkgJmRhdGEtPmJ5dGUpOworCQkJCWlmIChlcnIpIHsKKwkJCQkJaWYgKHc5OTY4Y2Zfc21idXNfcmVmcmVzaF9idXMoY2FtKSkgeworCQkJCQkJZXJyID0gLUVJTzsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfSBlbHNlCisJCQkJCWJyZWFrOworCQkJfQogCX0gZWxzZSBpZiAoc2l6ZSA9PSBJMkNfU01CVVNfQllURV9EQVRBKSB7CiAJCWFkZHIgPDw9IDE7CiAKQEAgLTE0OTEsNyArMTQ3NSw2IEBACiAJCURCRyg0LCAiVW5zdXBwb3J0ZWQgSTJDIHRyYW5zZmVyIG1vZGUgKCVkKSIsIHNpemUpCiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE1MDQsNDQgKzE0ODcsNiBAQAogfQogCiAKLXN0YXRpYyBpbnQgdzk5NjhjZl9pMmNfYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCogY2xpZW50KQotewotCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCWludCBpZCA9IGNsaWVudC0+ZHJpdmVyLT5pZCwgZXJyID0gMDsKLQotCWlmIChpZCA9PSBJMkNfRFJJVkVSSURfT1ZDQU1DSElQKSB7Ci0JCWNhbS0+c2Vuc29yX2NsaWVudCA9IGNsaWVudDsKLQkJZXJyID0gdzk5NjhjZl9zZW5zb3JfaW5pdChjYW0pOwotCQlpZiAoZXJyKSB7Ci0JCQljYW0tPnNlbnNvcl9jbGllbnQgPSBOVUxMOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0gZWxzZSB7Ci0JCURCRyg0LCAiUmVqZWN0ZWQgY2xpZW50IFslc10gd2l0aCBkcml2ZXIgWyVzXSIsCi0JCSAgICBjbGllbnQtPm5hbWUsIGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JREJHKDUsICJJMkMgYXR0YWNoIGNsaWVudCBbJXNdIHdpdGggZHJpdmVyIFslc10iLAotCSAgICBjbGllbnQtPm5hbWUsIGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSkKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgdzk5NjhjZl9pMmNfZGV0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCogY2xpZW50KQotewotCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCi0JaWYgKGNhbS0+c2Vuc29yX2NsaWVudCA9PSBjbGllbnQpCi0JCWNhbS0+c2Vuc29yX2NsaWVudCA9IE5VTEw7Ci0KLQlEQkcoNSwgIkkyQyBkZXRhY2ggY2xpZW50IFslc10iLCBjbGllbnQtPm5hbWUpCi0KLQlyZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2luaXQoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCiB7CiAJaW50IGVyciA9IDA7CkBAIC0xNTU0LDE1ICsxNDk5LDEzIEBACiAJc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBhZGFwID0gewogCQkuaWQgPSAgICAgICAgICAgICAgICBJMkNfSFdfU01CVVNfVzk5NjhDRiwKIAkJLm93bmVyID0gICAgICAgICAgICAgVEhJU19NT0RVTEUsCi0JCS5jbGllbnRfcmVnaXN0ZXIgPSAgIHc5OTY4Y2ZfaTJjX2F0dGFjaF9pbmZvcm0sCi0JCS5jbGllbnRfdW5yZWdpc3RlciA9IHc5OTY4Y2ZfaTJjX2RldGFjaF9pbmZvcm0sCiAJCS5hbGdvID0gICAgICAgICAgICAgICZhbGdvLAogCX07CiAKIAltZW1jcHkoJmNhbS0+aTJjX2FkYXB0ZXIsICZhZGFwLCBzaXplb2Yoc3RydWN0IGkyY19hZGFwdGVyKSk7CiAJc3RyY3B5KGNhbS0+aTJjX2FkYXB0ZXIubmFtZSwgInc5OTY4Y2YiKTsKIAljYW0tPmkyY19hZGFwdGVyLmRldi5wYXJlbnQgPSAmY2FtLT51c2JkZXYtPmRldjsKLQlpMmNfc2V0X2FkYXBkYXRhKCZjYW0tPmkyY19hZGFwdGVyLCBjYW0pOworCWkyY19zZXRfYWRhcGRhdGEoJmNhbS0+aTJjX2FkYXB0ZXIsICZjYW0tPnY0bDJfZGV2KTsKIAogCURCRyg2LCAiUmVnaXN0ZXJpbmcgSTJDIGFkYXB0ZXIgd2l0aCBrZXJuZWwuLi4iKQogCkBAIC0yMTY1LDEzICsyMTA4LDkgQEAKIHN0YXRpYyBpbnQKIHc5OTY4Y2Zfc2Vuc29yX2NtZChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCogYXJnKQogewotCXN0cnVjdCBpMmNfY2xpZW50KiBjID0gY2FtLT5zZW5zb3JfY2xpZW50OwotCWludCByYyA9IDA7CisJaW50IHJjOwogCi0JaWYgKCFjIHx8ICFjLT5kcml2ZXIgfHwgIWMtPmRyaXZlci0+Y29tbWFuZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyYyA9IGMtPmRyaXZlci0+Y29tbWFuZChjLCBjbWQsIGFyZyk7CisJcmMgPSB2NGwyX3N1YmRldl9jYWxsKGNhbS0+c2Vuc29yX3NkLCBjb3JlLCBpb2N0bCwgY21kLCBhcmcpOwogCS8qIFRoZSBJMkMgZHJpdmVyIHJldHVybnMgLUVQRVJNIG9uIG5vbi1zdXBwb3J0ZWQgY29udHJvbHMgKi8KIAlyZXR1cm4gKHJjIDwgMCAmJiByYyAhPSAtRVBFUk0pID8gcmMgOiAwOwogfQpAQCAtMjM0Niw3ICsyMjg1LDcgQEAKIAkJZ290byBlcnJvcjsKIAogCS8qIE5PVEU6IE1ha2Ugc3VyZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBhIG11bHRpcGxlIG9mIDE2ICovCi0Jc3dpdGNoIChjYW0tPnNlbnNvcl9jbGllbnQtPmFkZHIpIHsKKwlzd2l0Y2ggKHY0bDJfaTJjX3N1YmRldl9hZGRyKGNhbS0+c2Vuc29yX3NkKSkgewogCQljYXNlIE9WNnh4MF9TSUQ6CiAJCQljYW0tPm1heHdpZHRoID0gMzUyOwogCQkJY2FtLT5tYXhoZWlnaHQgPSAyODg7CkBAIC0yNjUxLDYgKzI1OTAsNyBAQAogCXc5OTY4Y2ZfZGVhbGxvY2F0ZV9tZW1vcnkoY2FtKTsKIAlrZnJlZShjYW0tPmNvbnRyb2xfYnVmZmVyKTsKIAlrZnJlZShjYW0tPmRhdGFfYnVmZmVyKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZjYW0tPnY0bDJfZGV2KTsKIAogCW11dGV4X3VubG9jaygmdzk5NjhjZl9kZXZsaXN0X211dGV4KTsKIH0KQEAgLTM0ODAsNiArMzQyMCwxMSBAQAogCXN0cnVjdCBsaXN0X2hlYWQqIHB0cjsKIAl1OCBzYyA9IDA7IC8qIG51bWJlciBvZiBzaW11bHRhbmVvdXMgY2FtZXJhcyAqLwogCXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZXZfbnI7IC8qIDAgLSB3ZSBhcmUgaGFuZGxpbmcgZGV2aWNlIG51bWJlciBuICovCisJc3RhdGljIHVuc2lnbmVkIHNob3J0IGFkZHJzW10gPSB7CisJCU9WN3h4MF9TSUQsCisJCU9WNnh4MF9TSUQsCisJCUkyQ19DTElFTlRfRU5ECisJfTsKIAogCWlmIChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSAgPT0gd2luYm9uZF9pZF90YWJsZVswXS5pZFZlbmRvciAmJgogCSAgICBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gd2luYm9uZF9pZF90YWJsZVswXS5pZFByb2R1Y3QpCkBAIC0zNDk1LDEyICszNDQwLDE0IEBACiAJaWYgKCFjYW0pCiAJCXJldHVybiAtRU5PTUVNOwogCisJZXJyID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnVkZXYtPmRldiwgJmNhbS0+djRsMl9kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDA7CisKIAltdXRleF9pbml0KCZjYW0tPmRldl9tdXRleCk7CiAJbXV0ZXhfbG9jaygmY2FtLT5kZXZfbXV0ZXgpOwogCiAJY2FtLT51c2JkZXYgPSB1ZGV2OwotCS8qIE5PVEU6IGEgbG9jYWwgY29weSBpcyB1c2VkIHRvIGF2b2lkIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyAqLwotCW1lbWNweSgmY2FtLT5kZXYsICZ1ZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgZGV2aWNlKSk7CiAKIAlEQkcoMiwgIiVzIGRldGVjdGVkIiwgc3ltYm9saWMoY2FtbGlzdCwgbW9kX2lkKSkKIApAQCAtMzU0OSw3ICszNDk2LDcgQEAKIAljYW0tPnY0bGRldi0+bWlub3IgPSB2aWRlb19ucltkZXZfbnJdOwogCWNhbS0+djRsZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CiAJdmlkZW9fc2V0X2RydmRhdGEoY2FtLT52NGxkZXYsIGNhbSk7Ci0JY2FtLT52NGxkZXYtPnBhcmVudCA9ICZjYW0tPmRldjsKKwljYW0tPnY0bGRldi0+djRsMl9kZXYgPSAmY2FtLT52NGwyX2RldjsKIAogCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShjYW0tPnY0bGRldiwgVkZMX1RZUEVfR1JBQkJFUiwKIAkJCQkgICAgdmlkZW9fbnJbZGV2X25yXSk7CkBAIC0zNTc2LDkgKzM1MjMsMTMgQEAKIAl3OTk2OGNmX3R1cm5fb25fbGVkKGNhbSk7CiAKIAl3OTk2OGNmX2kyY19pbml0KGNhbSk7CisJY2FtLT5zZW5zb3Jfc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmY2FtLT5pMmNfYWRhcHRlciwKKwkJCSJvdmNhbWNoaXAiLCAib3ZjYW1jaGlwIiwgYWRkcnMpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYW0pOwogCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOworCisJZXJyID0gdzk5NjhjZl9zZW5zb3JfaW5pdChjYW0pOwogCXJldHVybiAwOwogCiBmYWlsOiAvKiBGcmVlIHVudXNlZCBtZW1vcnkgKi8KQEAgLTM1ODcsNiArMzUzOCw4IEBACiAJaWYgKGNhbS0+djRsZGV2KQogCQl2aWRlb19kZXZpY2VfcmVsZWFzZShjYW0tPnY0bGRldik7CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmY2FtLT52NGwyX2Rldik7CitmYWlsMDoKIAlrZnJlZShjYW0pOwogCXJldHVybiBlcnI7CiB9CkBAIC0zNTk3LDE1ICszNTUwLDE2IEBACiAJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0gPQogCSAgIChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKXVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAKLQlkb3duX3dyaXRlKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOwotCiAJaWYgKGNhbSkgeworCQlkb3duX3dyaXRlKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOwogCQkvKiBQcmV2ZW50IGNvbmN1cnJlbnQgYWNjZXNzZXMgdG8gZGF0YSAqLwogCQltdXRleF9sb2NrKCZjYW0tPmRldl9tdXRleCk7CiAKIAkJY2FtLT5kaXNjb25uZWN0ZWQgPSAxOwogCi0JCURCRygyLCAiRGlzY29ubmVjdGluZyAlcy4uLiIsIHN5bWJvbGljKGNhbWxpc3QsIGNhbS0+aWQpKQorCQlEQkcoMiwgIkRpc2Nvbm5lY3RpbmcgJXMuLi4iLCBzeW1ib2xpYyhjYW1saXN0LCBjYW0tPmlkKSk7CisKKwkJdjRsMl9kZXZpY2VfZGlzY29ubmVjdCgmY2FtLT52NGwyX2Rldik7CiAKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbCgmY2FtLT5vcGVuKTsKIApAQCAtMzYyMSwxMiArMzU3NSwxMiBAQAogCQkJdzk5NjhjZl9yZWxlYXNlX3Jlc291cmNlcyhjYW0pOwogCiAJCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOworCQl1cF93cml0ZSgmdzk5NjhjZl9kaXNjb25uZWN0KTsKIAotCQlpZiAoIWNhbS0+dXNlcnMpCisJCWlmICghY2FtLT51c2VycykgewogCQkJa2ZyZWUoY2FtKTsKKwkJfQogCX0KLQotCXVwX3dyaXRlKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOwogfQogCiAKQEAgLTM2NTAsOSArMzYwNCw2IEBACiAJS0RCRygyLCBXOTk2OENGX01PRFVMRV9OQU1FIiAiVzk5NjhDRl9NT0RVTEVfVkVSU0lPTikKIAlLREJHKDMsIFc5OTY4Q0ZfTU9EVUxFX0FVVEhPUikKIAotCWlmIChvdm1vZF9sb2FkKQotCQlyZXF1ZXN0X21vZHVsZSgib3ZjYW1jaGlwIik7Ci0KIAlpZiAoKGVyciA9IHVzYl9yZWdpc3Rlcigmdzk5NjhjZl91c2JfZHJpdmVyKSkpCiAJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmgKaW5kZXggMzAwMzJlMS4uZmRmYzZhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL292Y2FtY2hpcC5oPgogCiAjaW5jbHVkZSAidzk5NjhjZl92cHAuaCIKQEAgLTQyLDcgKzQzLDYgQEAKICAqIERlZmF1bHQgdmFsdWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBXOTk2OENGX09WTU9EX0xPQUQgICAgICAxICAvKiBhdXRvbWF0aWMgJ292Y2FtY2hpcCcgbW9kdWxlIGxvYWRpbmcgKi8KICNkZWZpbmUgVzk5NjhDRl9WUFBNT0RfTE9BRCAgICAgMSAgLyogYXV0b21hdGljICd3OTk2OGNmLXZwcCcgbW9kdWxlIGxvYWRpbmcgKi8KIAogLyogQ29tbWVudC91bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGVuYWJsZS9kaXNhYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyAqLwpAQCAtMTk1LDEwICsxOTUsOSBAQAogCiAvKiBNYWluIGRldmljZSBkcml2ZXIgc3RydWN0dXJlICovCiBzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UgewotCXN0cnVjdCBkZXZpY2UgZGV2OyAvKiBkZXZpY2Ugc3RydWN0dXJlICovCi0KIAllbnVtIHc5OTY4Y2ZfbW9kZWxfaWQgaWQ7ICAgLyogcHJpdmF0ZSBkZXZpY2UgaWRlbnRpZmllciAqLwogCisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OwogCXN0cnVjdCB2aWRlb19kZXZpY2UqIHY0bGRldjsgLyogLT4gVjRMIHN0cnVjdHVyZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgdjRsbGlzdDsgICAgLyogZW50cnkgb2YgdGhlIGxpc3Qgb2YgVjRMIGNhbWVyYXMgKi8KIApAQCAtMjY1LDcgKzI2NCw3IEBACiAKIAkvKiBJMkMgaW50ZXJmYWNlIHRvIGtlcm5lbCAqLwogCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcHRlcjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCogc2Vuc29yX2NsaWVudDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNlbnNvcl9zZDsKIAogCS8qIExvY2tzICovCiAJc3RydWN0IG11dGV4IGRldl9tdXRleCwgICAgLyogZm9yIHByb2JlLCBkaXNjb25uZWN0LG9wZW4gYW5kIGNsb3NlICovCkBAIC0yNzcsNiArMjc2LDExIEBACiAJY2hhciBjb21tYW5kWzE2XTsgLyogbmFtZSBvZiB0aGUgcHJvZ3JhbSBob2xkaW5nIHRoZSBkZXZpY2UgKi8KIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHc5OTY4Y2ZfZGV2aWNlICp0b19jYW0oc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UsIHY0bDJfZGV2KTsKK30KKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTWFjcm9zIGZvciBkZWJ1Z2dpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTI5MSwxNCArMjk1LDE0IEBACiAJaWYgKCAoKHNwZWNpZmljX2RlYnVnKSAmJiAoZGVidWcgPT0gKGxldmVsKSkpIHx8ICAgICAgICAgICAgICAgICAgICAgIFwKIAkgICAgICgoIXNwZWNpZmljX2RlYnVnKSAmJiAoZGVidWcgPj0gKGxldmVsKSkpICkgeyAgICAgICAgICAgICAgICAgICAgXAogCQlpZiAoKGxldmVsKSA9PSAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCWRldl9lcnIoJmNhbS0+ZGV2LCBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgICAgICAgIFwKKwkJCXY0bDJfZXJyKCZjYW0tPnY0bDJfZGV2LCBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgIFwKIAkJZWxzZSBpZiAoKGxldmVsKSA9PSAyIHx8IChsZXZlbCkgPT0gMykgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlkZXZfaW5mbygmY2FtLT5kZXYsIGZtdCAiXG4iLCAjIyBhcmdzKTsgICAgICAgICAgICAgICBcCisJCQl2NGwyX2luZm8oJmNhbS0+djRsMl9kZXYsIGZtdCAiXG4iLCAjIyBhcmdzKTsgICAgICAgICBcCiAJCWVsc2UgaWYgKChsZXZlbCkgPT0gNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJZGV2X3dhcm4oJmNhbS0+ZGV2LCBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgICAgICAgXAorCQkJdjRsMl93YXJuKCZjYW0tPnY0bDJfZGV2LCBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgXAogCQllbHNlIGlmICgobGV2ZWwpID49IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCWRldl9pbmZvKCZjYW0tPmRldiwgIlslczolZF0gIiBmbXQgIlxuIiwgICAgICAgICAgICAgIFwKLQkJCQkgX19mdW5jX18sIF9fTElORV9fICwgIyMgYXJncyk7ICAgICAgICAgICBcCisJCQl2NGwyX2luZm8oJmNhbS0+djRsMl9kZXYsICJbJXM6JWRdICIgZm10ICJcbiIsICAgICAgICBcCisJCQkJIF9fZnVuY19fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgICAgIFwKIAl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQogLyogRm9yIGdlbmVyaWMga2VybmVsIChub3QgZGV2aWNlIHNwZWNpZmljKSBtZXNzYWdlcyAqLwpAQCAtMzIxLDcgKzMyNSw3IEBACiAKICN1bmRlZiBQREJHCiAjZGVmaW5lIFBEQkcoZm10LCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1kZXZfaW5mbygmY2FtLT5kZXYsICJbJXM6JWRdICIgZm10ICJcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOwordjRsMl9pbmZvKCZjYW0tPnY0bDJfZGV2LCAiWyVzOiVkXSAiIGZtdCAiXG4iLCBfX2Z1bmNfXywgX19MSU5FX18gLCAjIyBhcmdzKTsKIAogI3VuZGVmIFBEQkdHCiAjZGVmaW5lIFBEQkdHKGZtdCwgYXJncy4uLikgZG8gezt9IHdoaWxlKDApOyAvKiBub3RoaW5nOiBpdCdzIGEgcGxhY2Vob2xkZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204NzM5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODczOS5jCmluZGV4IGYyODY0ZDUuLmI1NzJjZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204NzM5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93bTg3MzkuYwpAQCAtMjUyLDExICsyNTIsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdtODczOV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgd204NzM5X2NvcmVfb3BzID0gewpAQCAtMzQzLDggKzMzOCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ3bTg3MzkiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9XTTg3MzksCi0JLmNvbW1hbmQgPSB3bTg3MzlfY29tbWFuZCwKIAkucHJvYmUgPSB3bTg3MzlfcHJvYmUsCiAJLnJlbW92ZSA9IHdtODczOV9yZW1vdmUsCiAJLmlkX3RhYmxlID0gd204NzM5X2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby93bTg3NzUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204Nzc1LmMKaW5kZXggNTNmY2Q0Mjg0Li5lZGRmMTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODc3NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204Nzc1LmMKQEAgLTM0LDE1ICszNCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIndtODc3NSBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlVsZiBFa2x1bmQsIEhhbnMgVmVya3VpbCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDM2ID4+IDEsIEkyQ19DTElFTlRfRU5EIH07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xNjEsMTEgKzE1OCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd204Nzc1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB3bTg3NzVfY29yZV9vcHMgPSB7CkBAIC0yNjgsOCArMjYwLDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gIndtODc3NSIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1dNODc3NSwKLQkuY29tbWFuZCA9IHdtODc3NV9jb21tYW5kLAogCS5wcm9iZSA9IHdtODc3NV9wcm9iZSwKIAkucmVtb3ZlID0gd204Nzc1X3JlbW92ZSwKIAkuaWRfdGFibGUgPSB3bTg3NzVfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfc2Vuc29yLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfc2Vuc29yLmgKaW5kZXggYjBjZDQ5Yy4uM2E0MDhkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX3NlbnNvci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9zZW5zb3IuaApAQCAtNTgsMTIgKzU4LDIwIEBACiAJLmlkUHJvZHVjdCA9IChwcm9kKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkuYkludGVyZmFjZUNsYXNzID0gKGludGNsYXNzKQogCisjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQSAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX01PRFVMRQogI2RlZmluZSBaQzAzMDFfSURfVEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHpjMDMwMV9pZF90YWJsZVtdID0gIHsgICAgICAgICAgICAgICAgICAgICAgXAogCXsgWkMwMzAxX1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4YWUsIDB4ZmYpLCB9LCAvKiBQQVMyMDIgKi8gICAgICAgICAgICBcCiAJeyBaQzAzMDFfVVNCX0RFVklDRSgweDBhYzgsIDB4MzAzYiwgMHhmZiksIH0sIC8qIFBCLTAzMzAgKi8gICAgICAgICAgIFwKIAl7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfTsKKyNlbHNlCisjZGVmaW5lIFpDMDMwMV9JRF9UQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgemMwMzAxX2lkX3RhYmxlW10gPSAgeyAgICAgICAgICAgICAgICAgICAgICBcCisJeyBaQzAzMDFfVVNCX0RFVklDRSgweDA0NmQsIDB4MDhhZSwgMHhmZiksIH0sIC8qIFBBUzIwMiAqLyAgICAgICAgICAgIFwKKwl7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfTsKKyNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vS2NvbmZpZwppbmRleCA4NjY2ZTE5Li5mZDQxMjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFZJREVPX1pPUkFOCiAJdHJpc3RhdGUgIlpvcmFuIFpSMzYwNTcvMzYwNjcgVmlkZW8gRm9yIExpbnV4IgotCWRlcGVuZHMgb24gUENJICYmIEkyQ19BTEdPQklUICYmIFZJREVPX1Y0TDEgJiYgVklSVF9UT19CVVMKKwlkZXBlbmRzIG9uIFBDSSAmJiBJMkNfQUxHT0JJVCAmJiBWSURFT19WNEwyICYmIFZJUlRfVE9fQlVTCiAJaGVscAogCSAgU2F5IFkgZm9yIHN1cHBvcnQgZm9yIE1KUEVHIGNhcHR1cmUgY2FyZHMgYmFzZWQgb24gdGhlIFpvcmFuCiAJICAzNjA1Ny8zNjA2NyBQQ0kgY29udHJvbGxlciBjaGlwc2V0LiBUaGlzIGluY2x1ZGVzIHRoZSBJb21lZ2EKQEAgLTMyLDcgKzMyLDcgQEAKIGNvbmZpZyBWSURFT19aT1JBTl9CVVoKIAl0cmlzdGF0ZSAiSW9tZWdhIEJ1eiBzdXBwb3J0IgogCWRlcGVuZHMgb24gVklERU9fWk9SQU5fWlIzNjA2MAotCXNlbGVjdCBWSURFT19TQUE3MTExIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJc2VsZWN0IFZJREVPX1NBQTcxMVggaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlzZWxlY3QgVklERU9fU0FBNzE4NSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHRoZSBJb21lZ2EgQnV6IE1KUEVHIGNhcHR1cmUvcGxheWJhY2sgY2FyZC4KQEAgLTU4LDcgKzU4LDcgQEAKIGNvbmZpZyBWSURFT19aT1JBTl9MTUwzM1IxMAogCXRyaXN0YXRlICJMaW51eCBNZWRpYSBMYWJzIExNTDMzUjEwIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBWSURFT19aT1JBTl9aUjM2MDYwCi0Jc2VsZWN0IFZJREVPX1NBQTcxMTQgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKwlzZWxlY3QgVklERU9fU0FBNzExWCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCXNlbGVjdCBWSURFT19BRFY3MTcwIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJaGVscAogCSAgc3VwcG9ydCBmb3IgdGhlIExpbnV4IE1lZGlhIExhYnMgTE1MMzNSMTAgTUpQRUcgY2FwdHVyZS9wbGF5YmFjawpAQCAtNjYsNyArNjYsNyBAQAogCiBjb25maWcgVklERU9fWk9SQU5fQVZTNkVZRVMKIAl0cmlzdGF0ZSAiQXZlck1lZGlhIDYgRXllcyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gVklERU9fWk9SQU5fWlIzNjA2MCAmJiBFWFBFUklNRU5UQUwgJiYgVklERU9fVjRMMQorCWRlcGVuZHMgb24gVklERU9fWk9SQU5fWlIzNjA2MCAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgVklERU9fQlQ4NTYgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlzZWxlY3QgVklERU9fQlQ4NjYgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlzZWxlY3QgVklERU9fS1MwMTI3IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3ZpZGVvY29kZWMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vdmlkZW9jb2RlYy5oCmluZGV4IDk3YTNiYmUuLjVjMjdiMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vdmlkZW9jb2RlYy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vdmlkZW9jb2RlYy5oCkBAIC05Nyw3ICs5Nyw3IEBACiAJICAgICAgIGF2YWlsYWJsZSkgLSBpdCByZXR1cm5zIDAgaWYgdGhlIG1vZGUgaXMgcG9zc2libGUKICAgIHNldF9zaXplIC0+IHRoaXMgZm4tcmVmLiBzZXRzIHRoZSBub3JtIGFuZCBpbWFnZSBzaXplIGZvcgogCSAgICAgICBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIChyZXR1cm5zIDAgb24gc3VjY2VzcykKLQkgICAgICAgdGhlIG5vcm0gcGFyYW0gaXMgZGVmaW5lZCBpbiB2aWRlb2Rldi5oIChWSURFT19NT0RFXyopCisJICAgICAgIHRoZSBub3JtIHBhcmFtIGlzIGRlZmluZWQgaW4gdmlkZW9kZXYyLmggKFY0TDJfU1REXyopCiAKICAgIGFkZGl0aW9uYWwgc2V0dXAgbWF5IGJlIGF2YWlsYWJsZSwgdG9vIC0gYnV0IHRoZSBjb2RlYyBzaG91bGQgd29yayB3aXRoCiAgICBzb21lIGRlZmF1bHQgdmFsdWVzIGV2ZW4gd2l0aG91dCB0aGlzCkBAIC0xNDQsOSArMTQ0LDggQEAKICNpZm5kZWYgX19MSU5VWF9WSURFT0NPREVDX0gKICNkZWZpbmUgX19MSU5VWF9WSURFT0NPREVDX0gKIAotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAKLS8vc2hvdWxkIGJlIGluIHZpZGVvZGV2LmggPz8/IChWSURfRE9fLi4uLikKICNkZWZpbmUgQ09ERUNfRE9fQ09NUFJFU1NJT04gMAogI2RlZmluZSBDT0RFQ19ET19FWFBBTlNJT04gICAxCiAKQEAgLTIzNywxMCArMjM2LDYgQEAKIAlfX3UzMiB3aWR0aCwgaGVpZ2h0OwkvKiBBcmVhIHRvIGNhcHR1cmUgKi8KIAlfX3UxNiBkZWNpbWF0aW9uOwkvKiBEZWNpbWF0aW9uIGRpdmlkZXIgKi8KIAlfX3UxNiBmbGFnczsJCS8qIEZsYWdzIGZvciBjYXB0dXJlICovCi0vKiBmbGFncyBhcmUgdGhlIHNhbWUgYXMgaW4gc3RydWN0IHZpZGVvX2NhcHR1cmUgLSBzZWUgdmlkZW9kZXYuaDoKLSNkZWZpbmUgVklERU9fQ0FQVFVSRV9PREQJCTAKLSNkZWZpbmUgVklERU9fQ0FQVFVSRV9FVkVOCQkxCi0qLwogCV9fdTE2IHF1YWxpdHk7CQkvKiBxdWFsaXR5IG9mIHRoZSB2aWRlbyAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbi5oCmluZGV4IGU4NzNhOTEuLmFmZWNmMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW4uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuLmgKQEAgLTMxLDYgKzMxLDggQEAKICNpZm5kZWYgX0JVWl9IXwogI2RlZmluZSBfQlVaX0hfCiAKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorCiBzdHJ1Y3Qgem9yYW5fcmVxdWVzdGJ1ZmZlcnMgewogCXVuc2lnbmVkIGxvbmcgY291bnQ7CS8qIE51bWJlciBvZiBidWZmZXJzIGZvciBNSlBFRyBncmFiYmluZyAqLwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsJLyogU2l6ZSBQRVIgQlVGRkVSIGluIGJ5dGVzICovCkBAIC0xNzAsNyArMTcyLDcgQEAKICNlbmRpZgogI2RlZmluZSAgIFY0TF9NQVNLX0ZSQU1FICAgKFY0TF9NQVhfRlJBTUUgLSAxKQogCi0jZGVmaW5lIE1BWF9LTUFMTE9DX01FTSAoMTI4KjEwMjQpCisjZGVmaW5lIE1BWF9GUkFNRSAoQlVaX01BWF9GUkFNRSA+IFZJREVPX01BWF9GUkFNRSA/IEJVWl9NQVhfRlJBTUUgOiBWSURFT19NQVhfRlJBTUUpCiAKICNpbmNsdWRlICJ6cjM2MDU3LmgiCiAKQEAgLTI0MCw5ICsyNDIsNiBAQAogCiBzdHJ1Y3Qgem9yYW5fZm9ybWF0IHsKIAljaGFyICpuYW1lOwotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCWludCBwYWxldHRlOwotI2VuZGlmCiAJX191MzIgZm91cmNjOwogCWludCBjb2xvcnNwYWNlOwogCWludCBkZXB0aDsKQEAgLTI4MywyMSArMjgyLDIxIEBACiAJaW50IGNvdW50OwogfTsKIAotc3RydWN0IHpvcmFuX2pwZ19idWZmZXIgeworc3RydWN0IHpvcmFuX2J1ZmZlciB7CiAJc3RydWN0IHpvcmFuX21hcHBpbmcgKm1hcDsKLQlfX2xlMzIgKmZyYWdfdGFiOwkJLyogYWRkcmVzc2VzIG9mIGZyYWcgdGFibGUgKi8KLQl1MzIgZnJhZ190YWJfYnVzOwkvKiBzYW1lIHZhbHVlIGNhY2hlZCB0byBzYXZlIHRpbWUgaW4gSVNSICovCi0JZW51bSB6b3Jhbl9idWZmZXJfc3RhdGUgc3RhdGU7CS8qIG5vbi16ZXJvIGlmIGNvcnJlc3BvbmRpbmcgYnVmZmVyIGlzIGluIHVzZSBpbiBncmFiIHF1ZXVlICovCi0Jc3RydWN0IHpvcmFuX3N5bmMgYnM7CS8qIERPTkU6IGluZm8gdG8gcmV0dXJuIHRvIGFwcGxpY2F0aW9uICovCi19OwotCi1zdHJ1Y3Qgem9yYW5fdjRsX2J1ZmZlciB7Ci0Jc3RydWN0IHpvcmFuX21hcHBpbmcgKm1hcDsKLQljaGFyICpmYnVmZmVyOwkJLyogdmlydHVhbCAgYWRkcmVzcyBvZiBmcmFtZSBidWZmZXIgKi8KLQl1bnNpZ25lZCBsb25nIGZidWZmZXJfcGh5czsJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBmcmFtZSBidWZmZXIgKi8KLQl1bnNpZ25lZCBsb25nIGZidWZmZXJfYnVzOwkvKiBidXMgICAgICBhZGRyZXNzIG9mIGZyYW1lIGJ1ZmZlciAqLwotCWVudW0gem9yYW5fYnVmZmVyX3N0YXRlIHN0YXRlOwkvKiBzdGF0ZTogdW51c2VkL3BlbmRpbmcvZG9uZSAqLwotCXN0cnVjdCB6b3Jhbl9zeW5jIGJzOwkvKiBET05FOiBpbmZvIHRvIHJldHVybiB0byBhcHBsaWNhdGlvbiAqLworCWVudW0gem9yYW5fYnVmZmVyX3N0YXRlIHN0YXRlOwkvKiBzdGF0ZTogdW51c2VkL3BlbmRpbmcvZG1hL2RvbmUgKi8KKwlzdHJ1Y3Qgem9yYW5fc3luYyBiczsJCS8qIERPTkU6IGluZm8gdG8gcmV0dXJuIHRvIGFwcGxpY2F0aW9uICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX19sZTMyICpmcmFnX3RhYjsJLyogYWRkcmVzc2VzIG9mIGZyYWcgdGFibGUgKi8KKwkJCXUzMiBmcmFnX3RhYl9idXM7CS8qIHNhbWUgdmFsdWUgY2FjaGVkIHRvIHNhdmUgdGltZSBpbiBJU1IgKi8KKwkJfSBqcGc7CisJCXN0cnVjdCB7CisJCQljaGFyICpmYnVmZmVyOwkJLyogdmlydHVhbCBhZGRyZXNzIG9mIGZyYW1lIGJ1ZmZlciAqLworCQkJdW5zaWduZWQgbG9uZyBmYnVmZmVyX3BoeXM7LyogcGh5c2ljYWwgYWRkcmVzcyBvZiBmcmFtZSBidWZmZXIgKi8KKwkJCXVuc2lnbmVkIGxvbmcgZmJ1ZmZlcl9idXM7LyogYnVzIGFkZHJlc3Mgb2YgZnJhbWUgYnVmZmVyICovCisJCX0gdjRsOworCX07CiB9OwogCiBlbnVtIHpvcmFuX2xvY2tfYWN0aXZpdHkgewpAQCAtMzA3LDIxICszMDYsMTMgQEAKIH07CiAKIC8qIGJ1ZmZlciBjb2xsZWN0aW9ucyAqLwotc3RydWN0IHpvcmFuX2pwZ19zdHJ1Y3Qgeworc3RydWN0IHpvcmFuX2J1ZmZlcl9jb2wgewogCWVudW0gem9yYW5fbG9ja19hY3Rpdml0eSBhY3RpdmU7CS8qIGZlYXR1cmUgY3VycmVudGx5IGluIHVzZT8gKi8KLQlzdHJ1Y3Qgem9yYW5fanBnX2J1ZmZlciBidWZmZXJbQlVaX01BWF9GUkFNRV07CS8qIGJ1ZmZlcnMgKi8KLQlpbnQgbnVtX2J1ZmZlcnMsIGJ1ZmZlcl9zaXplOworCXVuc2lnbmVkIGludCBudW1fYnVmZmVycywgYnVmZmVyX3NpemU7CisJc3RydWN0IHpvcmFuX2J1ZmZlciBidWZmZXJbTUFYX0ZSQU1FXTsJLyogYnVmZmVycyAqLwogCXU4IGFsbG9jYXRlZDsJCS8qIEZsYWcgaWYgYnVmZmVycyBhcmUgYWxsb2NhdGVkICAqLwotCXU4IHJlYWR5X3RvX2JlX2ZyZWVkOwkvKiBoYWNrIC0gc2VlIHpvcmFuX2RyaXZlci5jICovCiAJdTggbmVlZF9jb250aWd1b3VzOwkvKiBGbGFnIGlmIGNvbnRpZ3VvdXMgYnVmZmVycyBhcmUgbmVlZGVkICovCi19OwotCi1zdHJ1Y3Qgem9yYW5fdjRsX3N0cnVjdCB7Ci0JZW51bSB6b3Jhbl9sb2NrX2FjdGl2aXR5IGFjdGl2ZTsJLyogZmVhdHVyZSBjdXJyZW50bHkgaW4gdXNlPyAqLwotCXN0cnVjdCB6b3Jhbl92NGxfYnVmZmVyIGJ1ZmZlcltWSURFT19NQVhfRlJBTUVdOwkvKiBidWZmZXJzICovCi0JaW50IG51bV9idWZmZXJzLCBidWZmZXJfc2l6ZTsKLQl1OCBhbGxvY2F0ZWQ7CQkvKiBGbGFnIGlmIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCAgKi8KLQl1OCByZWFkeV90b19iZV9mcmVlZDsJLyogaGFjayAtIHNlZSB6b3Jhbl9kcml2ZXIuYyAqLworCS8qIG9ubHkgYXBwbGllcyB0byBqcGcgYnVmZmVycywgcmF3IGJ1ZmZlcnMgYXJlIGFsd2F5cyBjb250aWd1b3VzICovCiB9OwogCiBzdHJ1Y3Qgem9yYW47CkBAIC0zMzAsMjMgKzMyMSwyNyBAQAogc3RydWN0IHpvcmFuX2ZoIHsKIAlzdHJ1Y3Qgem9yYW4gKnpyOwogCi0JZW51bSB6b3Jhbl9tYXBfbW9kZSBtYXBfbW9kZTsJLyogRmxhZyB3aGljaCBidWZmZXJzZXQgd2lsbCBtYXAgYnkgbmV4dCBtbWFwKCkgKi8KKwllbnVtIHpvcmFuX21hcF9tb2RlIG1hcF9tb2RlOwkJLyogRmxhZyB3aGljaCBidWZmZXJzZXQgd2lsbCBtYXAgYnkgbmV4dCBtbWFwKCkgKi8KIAogCXN0cnVjdCB6b3Jhbl9vdmVybGF5X3NldHRpbmdzIG92ZXJsYXlfc2V0dGluZ3M7Ci0JdTMyICpvdmVybGF5X21hc2s7CS8qIG92ZXJsYXkgbWFzayAqLwotCWVudW0gem9yYW5fbG9ja19hY3Rpdml0eSBvdmVybGF5X2FjdGl2ZTsJLyogZmVhdHVyZSBjdXJyZW50bHkgaW4gdXNlPyAqLworCXUzMiAqb3ZlcmxheV9tYXNrOwkJCS8qIG92ZXJsYXkgbWFzayAqLworCWVudW0gem9yYW5fbG9ja19hY3Rpdml0eSBvdmVybGF5X2FjdGl2ZTsvKiBmZWF0dXJlIGN1cnJlbnRseSBpbiB1c2U/ICovCisKKwlzdHJ1Y3Qgem9yYW5fYnVmZmVyX2NvbCBidWZmZXJzOwkvKiBidWZmZXJzJyBpbmZvICovCiAKIAlzdHJ1Y3Qgem9yYW5fdjRsX3NldHRpbmdzIHY0bF9zZXR0aW5nczsJLyogc3RydWN0dXJlIHdpdGggYSBsb3Qgb2YgdGhpbmdzIHRvIHBsYXkgd2l0aCAqLwotCXN0cnVjdCB6b3Jhbl92NGxfc3RydWN0IHY0bF9idWZmZXJzOwkvKiBWNEwgYnVmZmVycycgaW5mbyAqLwotCiAJc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyBqcGdfc2V0dGluZ3M7CS8qIHN0cnVjdHVyZSB3aXRoIGEgbG90IG9mIHRoaW5ncyB0byBwbGF5IHdpdGggKi8KLQlzdHJ1Y3Qgem9yYW5fanBnX3N0cnVjdCBqcGdfYnVmZmVyczsJLyogTUpQRUcgYnVmZmVycycgaW5mbyAqLwogfTsKIAogc3RydWN0IGNhcmRfaW5mbyB7CiAJZW51bSBjYXJkX3R5cGUgdHlwZTsKIAljaGFyIG5hbWVbMzJdOwotCXUxNiBpMmNfZGVjb2RlciwgaTJjX2VuY29kZXI7CQkJLyogSTJDIHR5cGVzICovCisJY29uc3QgY2hhciAqaTJjX2RlY29kZXI7CS8qIGkyYyBkZWNvZGVyIGRldmljZSAqLworCWNvbnN0IGNoYXIgKm1vZF9kZWNvZGVyOwkvKiBpMmMgZGVjb2RlciBtb2R1bGUgKi8KKwljb25zdCB1bnNpZ25lZCBzaG9ydCAqYWRkcnNfZGVjb2RlcjsKKwljb25zdCBjaGFyICppMmNfZW5jb2RlcjsJLyogaTJjIGVuY29kZXIgZGV2aWNlICovCisJY29uc3QgY2hhciAqbW9kX2VuY29kZXI7CS8qIGkyYyBlbmNvZGVyIG1vZHVsZSAqLworCWNvbnN0IHVuc2lnbmVkIHNob3J0ICphZGRyc19lbmNvZGVyOwogCXUxNiB2aWRlb192ZmUsIHZpZGVvX2NvZGVjOwkJCS8qIHZpZGVvY29kZWMgdHlwZXMgKi8KIAl1MTYgYXVkaW9fY2hpcDsJCQkJCS8qIGF1ZGlvIHR5cGUgKi8KIApAQCAtMzU2LDcgKzM1MSw3IEBACiAJCWNoYXIgbmFtZVszMl07CiAJfSBpbnB1dFtCVVpfTUFYX0lOUFVUXTsKIAotCWludCBub3JtczsKKwl2NGwyX3N0ZF9pZCBub3JtczsKIAlzdHJ1Y3QgdHZub3JtICp0dm5bM107CS8qIHN1cHBvcnRlZCBUViBub3JtcyAqLwogCiAJdTMyIGpwZWdfaW50OwkJLyogSlBFRyBpbnRlcnJ1cHQgKi8KQEAgLTM3NywxNCArMzcyLDE1IEBACiB9OwogCiBzdHJ1Y3Qgem9yYW4geworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXY7CiAKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXB0ZXI7CS8qICovCiAJc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGkyY19hbGdvOwkvKiAqLwogCXUzMiBpMmNicjsKIAotCXN0cnVjdCBpMmNfY2xpZW50ICpkZWNvZGVyOwkvKiB2aWRlbyBkZWNvZGVyIGkyYyBjbGllbnQgKi8KLQlzdHJ1Y3QgaTJjX2NsaWVudCAqZW5jb2RlcjsJLyogdmlkZW8gZW5jb2RlciBpMmMgY2xpZW50ICovCisJc3RydWN0IHY0bDJfc3ViZGV2ICpkZWNvZGVyOwkvKiB2aWRlbyBkZWNvZGVyIHN1Yi1kZXZpY2UgKi8KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKmVuY29kZXI7CS8qIHZpZGVvIGVuY29kZXIgc3ViLWRldmljZSAqLwogCiAJc3RydWN0IHZpZGVvY29kZWMgKmNvZGVjOwkvKiB2aWRlbyBjb2RlYyAqLwogCXN0cnVjdCB2aWRlb2NvZGVjICp2ZmU7CS8qIHZpZGVvIGZyb250IGVuZCAqLwpAQCAtNDA1LDkgKzQwMSwxNSBAQAogCXNwaW5sb2NrX3Qgc3BpbmxvY2s7CS8qIFNwaW5sb2NrICovCiAKIAkvKiBWaWRlbyBmb3IgTGludXggcGFyYW1ldGVycyAqLwotCWludCBpbnB1dCwgbm9ybTsJLyogY2FyZCdzIG5vcm0gYW5kIGlucHV0IC0gbm9ybT1WSURFT19NT0RFXyogKi8KLQlpbnQgaHVlLCBzYXR1cmF0aW9uLCBjb250cmFzdCwgYnJpZ2h0bmVzczsJLyogQ3VycmVudCBwaWN0dXJlIHBhcmFtcyAqLwotCXN0cnVjdCB2aWRlb19idWZmZXIgYnVmZmVyOwkvKiBDdXJyZW50IGJ1ZmZlciBwYXJhbXMgKi8KKwlpbnQgaW5wdXQ7CS8qIGNhcmQncyBub3JtIGFuZCBpbnB1dCAtIG5vcm09VklERU9fTU9ERV8qICovCisJdjRsMl9zdGRfaWQgbm9ybTsKKworCS8qIEN1cnJlbnQgYnVmZmVyIHBhcmFtcyAqLworCXZvaWQgICAgKnZidWZfYmFzZTsKKwlpbnQgICAgIHZidWZfaGVpZ2h0LCB2YnVmX3dpZHRoOworCWludCAgICAgdmJ1Zl9kZXB0aDsKKwlpbnQgICAgIHZidWZfYnl0ZXNwZXJsaW5lOworCiAJc3RydWN0IHpvcmFuX292ZXJsYXlfc2V0dGluZ3Mgb3ZlcmxheV9zZXR0aW5nczsKIAl1MzIgKm92ZXJsYXlfbWFzazsJLyogb3ZlcmxheSBtYXNrICovCiAJZW51bSB6b3Jhbl9sb2NrX2FjdGl2aXR5IG92ZXJsYXlfYWN0aXZlOwkvKiBmZWF0dXJlIGN1cnJlbnRseSBpbiB1c2U/ICovCkBAIC00MjcsNyArNDI5LDcgQEAKIAl1bnNpZ25lZCBsb25nIHY0bF9wZW5kX3RhaWw7CiAJdW5zaWduZWQgbG9uZyB2NGxfc3luY190YWlsOwogCWludCB2NGxfcGVuZFtWNExfTUFYX0ZSQU1FXTsKLQlzdHJ1Y3Qgem9yYW5fdjRsX3N0cnVjdCB2NGxfYnVmZmVyczsJLyogVjRMIGJ1ZmZlcnMnIGluZm8gKi8KKwlzdHJ1Y3Qgem9yYW5fYnVmZmVyX2NvbCB2NGxfYnVmZmVyczsJLyogVjRMIGJ1ZmZlcnMnIGluZm8gKi8KIAogCS8qIEJ1eiBNSlBFRyBwYXJhbWV0ZXJzICovCiAJZW51bSB6b3Jhbl9jb2RlY19tb2RlIGNvZGVjX21vZGU7CS8qIHN0YXR1cyBvZiBjb2RlYyAqLwpAQCAtNDU0LDcgKzQ1Niw3IEBACiAJaW50IGpwZ19wZW5kW0JVWl9NQVhfRlJBTUVdOwogCiAJLyogYXJyYXkgaW5kZXhlZCBieSBmcmFtZSBudW1iZXIgKi8KLQlzdHJ1Y3Qgem9yYW5fanBnX3N0cnVjdCBqcGdfYnVmZmVyczsJLyogTUpQRUcgYnVmZmVycycgaW5mbyAqLworCXN0cnVjdCB6b3Jhbl9idWZmZXJfY29sIGpwZ19idWZmZXJzOwkvKiBNSlBFRyBidWZmZXJzJyBpbmZvICovCiAKIAkvKiBBZGRpdGlvbmFsIHN0dWZmIGZvciB0ZXN0aW5nICovCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKQEAgLTQ4OCw2ICs0OTAsMTEgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB0ZXN0X3E7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCB6b3JhbiAqdG9fem9yYW4oc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3Qgem9yYW4sIHY0bDJfZGV2KTsKK30KKwogLyogVGhlcmUgd2FzIHNvbWV0aGluZyBjYWxsZWQgX0FMUEhBX0JVWiB0aGF0IHVzZWQgdGhlIFBDSSBhZGRyZXNzIGluc3RlYWQgb2YKICAqIHRoZSBrZXJuZWwgaW9tYXBwZWQgYWRkcmVzcyBmb3IgYnRyZWFkL2J0d3JpdGUuICAqLwogI2RlZmluZSBidHdyaXRlKGRhdCxhZHIpICAgIHdyaXRlbCgoZGF0KSwgenItPnpyMzYwNTdfbWVtKyhhZHIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYwppbmRleCA1ZDJmMDkwLi5mOTFiYmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYwpAQCAtMzgsOCArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zZW0uaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CkBAIC00NywxMSArNDYsMTAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS9idDgxOS5oPgogCiAjaW5jbHVkZSAidmlkZW9jb2RlYy5oIgogI2luY2x1ZGUgInpvcmFuLmgiCkBAIC0xMDgsMjUgKzEwNiw4IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkodmlkZW9fbnIsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLCAiVmlkZW8gZGV2aWNlIG51bWJlciAoLTE9QXV0bykiKTsKIAotLyoKLSAgIE51bWJlciBhbmQgc2l6ZSBvZiBncmFiIGJ1ZmZlcnMgZm9yIFZpZGVvIDQgTGludXgKLSAgIFRoZSB2YXN0IG1ham9yaXR5IG9mIGFwcGxpY2F0aW9ucyBzaG91bGQgbm90IG5lZWQgbW9yZSB0aGFuIDIsCi0gICB0aGUgdmVyeSBwb3B1bGFyIEJUVFYgZHJpdmVyIGFjdHVhbGx5IGRvZXMgT05MWSBoYXZlIDIuCi0gICBUaW1lIHNlbnNpdGl2ZSBhcHBsaWNhdGlvbnMgbWlnaHQgbmVlZCBtb3JlLCB0aGUgbWF4aW11bQotICAgaXMgVklERU9fTUFYX0ZSQU1FIChkZWZpbmVkIGluIDxsaW51eC92aWRlb2Rldi5oPikuCi0KLSAgIFRoZSBzaXplIGlzIHNldCBzbyB0aGF0IHRoZSBtYXhpbXVtIHBvc3NpYmxlIHJlcXVlc3QKLSAgIGNhbiBiZSBzYXRpc2ZpZWQuIERlY3JlYXNlICBpdCwgaWYgYmlncGh5c19hcmVhIGFsbG9jJ2QKLSAgIG1lbW9yeSBpcyBsb3cuIElmIHlvdSBkb24ndCBoYXZlIHRoZSBiaWdwaHlzX2FyZWEgcGF0Y2gsCi0gICBzZXQgaXQgdG8gMTI4IEtCLiBXaWxsIHlvdSBhbGxvdyBvbmx5IHRvIGdyYWIgc21hbGwKLSAgIGltYWdlcyB3aXRoIFY0TCwgYnV0IHRoYXQncyBiZXR0ZXIgdGhhbiBub3RoaW5nLgotCi0gICB2NGxfYnVmc2l6ZSBoYXMgdG8gYmUgZ2l2ZW4gaW4gS0IgIQotCi0qLwotCi1pbnQgdjRsX25idWZzID0gMjsKLWludCB2NGxfYnVmc2l6ZSA9IDEyODsJCS8qIEV2ZXJ5Ym9keSBzaG91bGQgYmUgYWJsZSB0byB3b3JrIHdpdGggdGhpcyBzZXR0aW5nICovCitpbnQgdjRsX25idWZzID0gNDsKK2ludCB2NGxfYnVmc2l6ZSA9IDg2NDsJCS8qIEV2ZXJ5Ym9keSBzaG91bGQgYmUgYWJsZSB0byB3b3JrIHdpdGggdGhpcyBzZXR0aW5nICovCiBtb2R1bGVfcGFyYW0odjRsX25idWZzLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyh2NGxfbmJ1ZnMsICJNYXhpbXVtIG51bWJlciBvZiBWNEwgYnVmZmVycyB0byB1c2UiKTsKIG1vZHVsZV9wYXJhbSh2NGxfYnVmc2l6ZSwgaW50LCAwNjQ0KTsKQEAgLTI3Myw3ICsyNTQsNyBAQAogc3RhdGljIHZvaWQKIGRjMTBfaW5pdCAoc3RydWN0IHpvcmFuICp6cikKIHsKLQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBkYzEwX2luaXQoKVxuIiwgWlJfREVWTkFNRSh6cikpOworCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6ICVzXG4iLCBaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCiAJLyogUGl4ZWwgY2xvY2sgc2VsZWN0aW9uICovCiAJR1BJTyh6ciwgNCwgMCk7CkBAIC0yODUsMTMgKzI2NiwxMyBAQAogc3RhdGljIHZvaWQKIGRjMTBwbHVzX2luaXQgKHN0cnVjdCB6b3JhbiAqenIpCiB7Ci0JZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogZGMxMHBsdXNfaW5pdCgpXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogJXNcbiIsIFpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiB9CiAKIHN0YXRpYyB2b2lkCiBidXpfaW5pdCAoc3RydWN0IHpvcmFuICp6cikKIHsKLQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBidXpfaW5pdCgpXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogJXNcbiIsIFpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAKIAkvKiBzb21lIHN0dWZmIGZyb20gSW9tZWdhICovCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh6ci0+cGNpX2RldiwgMHhmYywgMHg5MDY4MGYxNSk7CkBAIC0zMDIsNyArMjgzLDcgQEAKIHN0YXRpYyB2b2lkCiBsbWwzM19pbml0IChzdHJ1Y3Qgem9yYW4gKnpyKQogewotCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IGxtbDMzX2luaXQoKVxuIiwgWlJfREVWTkFNRSh6cikpOworCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6ICVzXG4iLCBaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCiAJR1BJTyh6ciwgMiwgMSk7CQkvLyBTZXQgQ29tcG9zaXRlIGlucHV0L291dHB1dAogfQpAQCAtMzMyLDUwICszMTMsNiBAQAogfQogCiBzdGF0aWMgY2hhciAqCi1pMmNpZF90b19tb2R1bGVuYW1lICh1MTYgaTJjX2lkKQotewotCWNoYXIgKm5hbWUgPSBOVUxMOwotCi0Jc3dpdGNoIChpMmNfaWQpIHsKLQljYXNlIEkyQ19EUklWRVJJRF9TQUE3MTEwOgotCQluYW1lID0gInNhYTcxMTAiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9TQUE3MTExQToKLQkJbmFtZSA9ICJzYWE3MTExIjsKLQkJYnJlYWs7Ci0JY2FzZSBJMkNfRFJJVkVSSURfU0FBNzExNDoKLQkJbmFtZSA9ICJzYWE3MTE0IjsKLQkJYnJlYWs7Ci0JY2FzZSBJMkNfRFJJVkVSSURfU0FBNzE4NUI6Ci0JCW5hbWUgPSAic2FhNzE4NSI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX0FEVjcxNzA6Ci0JCW5hbWUgPSAiYWR2NzE3MCI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX0FEVjcxNzU6Ci0JCW5hbWUgPSAiYWR2NzE3NSI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX0JUODE5OgotCQluYW1lID0gImJ0ODE5IjsKLQkJYnJlYWs7Ci0JY2FzZSBJMkNfRFJJVkVSSURfQlQ4NTY6Ci0JCW5hbWUgPSAiYnQ4NTYiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9CVDg2NjoKLQkJbmFtZSA9ICJidDg2NiI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX1ZQWDMyMjA6Ci0JCW5hbWUgPSAidnB4MzIyMCI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX0tTMDEyNzoKLQkJbmFtZSA9ICJrczAxMjciOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gbmFtZTsKLX0KLQotc3RhdGljIGNoYXIgKgogY29kZWNpZF90b19tb2R1bGVuYW1lICh1MTYgY29kZWNpZCkKIHsKIAljaGFyICpuYW1lID0gTlVMTDsKQEAgLTQyNSwxMSArMzYyLDI0IEBACiBzdGF0aWMgc3RydWN0IHR2bm9ybSBmNTBjY2lyNjAxX2F2czZleWVzID0geyA4NjQsIDcyMCwgNzQsIDgwNCwgNjI1LCA1NzYsIDE4IH07CiBzdGF0aWMgc3RydWN0IHR2bm9ybSBmNjBjY2lyNjAxX2F2czZleWVzID0geyA4NTgsIDcyMCwgNTYsIDc4OCwgNTI1LCA0ODAsIDE2IH07CiAKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB2cHgzMjIwX2FkZHJzW10gPSB7IDB4NDMsIDB4NDcsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc2FhNzExMF9hZGRyc1tdID0geyAweDRlLCAweDRmLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNhYTcxMTFfYWRkcnNbXSA9IHsgMHgyNSwgMHgyNCwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBzYWE3MTE0X2FkZHJzW10gPSB7IDB4MjEsIDB4MjAsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYWR2NzE3eF9hZGRyc1tdID0geyAweDZhLCAweDZiLCAweDJhLCAweDJiLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGtzMDEyN19hZGRyc1tdID0geyAweDZjLCAweDZkLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNhYTcxODVfYWRkcnNbXSA9IHsgMHg0NCwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBidDgxOV9hZGRyc1tdID0geyAweDQ1LCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGJ0ODU2X2FkZHJzW10gPSB7IDB4NDQsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYnQ4NjZfYWRkcnNbXSA9IHsgMHg0NCwgSTJDX0NMSUVOVF9FTkQgfTsKKwogc3RhdGljIHN0cnVjdCBjYXJkX2luZm8gem9yYW5fY2FyZHNbTlVNX0NBUkRTXSBfX2RldmluaXRkYXRhID0gewogCXsKIAkJLnR5cGUgPSBEQzEwX29sZCwKIAkJLm5hbWUgPSAiREMxMChvbGQpIiwKLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1ZQWDMyMjAsCisJCS5pMmNfZGVjb2RlciA9ICJ2cHgzMjIwYSIsCisJCS5tb2RfZGVjb2RlciA9ICJ2cHgzMjIwIiwKKwkJLmFkZHJzX2RlY29kZXIgPSB2cHgzMjIwX2FkZHJzLAogCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNTAsCiAJCS52aWRlb192ZmUgPSBDT0RFQ19UWVBFX1pSMzYwMTYsCiAKQEAgLTQzOSw3ICszODksNyBAQAogCQkJeyAyLCAiUy1WaWRlbyIgfSwKIAkJCXsgMCwgIkludGVybmFsL2NvbXAiIH0KIAkJfSwKLQkJLm5vcm1zID0gMywKKwkJLm5vcm1zID0gVjRMMl9TVERfTlRTQ3xWNEwyX1NURF9QQUx8VjRMMl9TVERfU0VDQU0sCiAJCS50dm4gPSB7CiAJCQkmZjUwc3FwaXhlbF9kYzEwLAogCQkJJmY2MHNxcGl4ZWxfZGMxMCwKQEAgLTQ1Nyw4ICs0MDcsMTIgQEAKIAl9LCB7CiAJCS50eXBlID0gREMxMF9uZXcsCiAJCS5uYW1lID0gIkRDMTAobmV3KSIsCi0JCS5pMmNfZGVjb2RlciA9IEkyQ19EUklWRVJJRF9TQUE3MTEwLAotCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfQURWNzE3NSwKKwkJLmkyY19kZWNvZGVyID0gInNhYTcxMTAiLAorCQkubW9kX2RlY29kZXIgPSAic2FhNzExMCIsCisJCS5hZGRyc19kZWNvZGVyID0gc2FhNzExMF9hZGRycywKKwkJLmkyY19lbmNvZGVyID0gImFkdjcxNzUiLAorCQkubW9kX2VuY29kZXIgPSAiYWR2NzE3NSIsCisJCS5hZGRyc19lbmNvZGVyID0gYWR2NzE3eF9hZGRycywKIAkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDYwLAogCiAJCS5pbnB1dHMgPSAzLApAQCAtNDY3LDcgKzQyMSw3IEBACiAJCQkJeyA3LCAiUy1WaWRlbyIgfSwKIAkJCQl7IDUsICJJbnRlcm5hbC9jb21wIiB9CiAJCQl9LAotCQkubm9ybXMgPSAzLAorCQkubm9ybXMgPSBWNEwyX1NURF9OVFNDfFY0TDJfU1REX1BBTHxWNEwyX1NURF9TRUNBTSwKIAkJLnR2biA9IHsKIAkJCQkmZjUwc3FwaXhlbCwKIAkJCQkmZjYwc3FwaXhlbCwKQEAgLTQ4NCw4ICs0MzgsMTIgQEAKIAl9LCB7CiAJCS50eXBlID0gREMxMHBsdXMsCiAJCS5uYW1lID0gIkRDMTBwbHVzIiwKLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1NBQTcxMTAsCi0JCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9BRFY3MTc1LAorCQkuaTJjX2RlY29kZXIgPSAic2FhNzExMCIsCisJCS5tb2RfZGVjb2RlciA9ICJzYWE3MTEwIiwKKwkJLmFkZHJzX2RlY29kZXIgPSBzYWE3MTEwX2FkZHJzLAorCQkuaTJjX2VuY29kZXIgPSAiYWR2NzE3NSIsCisJCS5tb2RfZW5jb2RlciA9ICJhZHY3MTc1IiwKKwkJLmFkZHJzX2VuY29kZXIgPSBhZHY3MTd4X2FkZHJzLAogCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNjAsCiAKIAkJLmlucHV0cyA9IDMsCkBAIC00OTQsNyArNDUyLDcgQEAKIAkJCXsgNywgIlMtVmlkZW8iIH0sCiAJCQl7IDUsICJJbnRlcm5hbC9jb21wIiB9CiAJCX0sCi0JCS5ub3JtcyA9IDMsCisJCS5ub3JtcyA9IFY0TDJfU1REX05UU0N8VjRMMl9TVERfUEFMfFY0TDJfU1REX1NFQ0FNLAogCQkudHZuID0gewogCQkJJmY1MHNxcGl4ZWwsCiAJCQkmZjYwc3FwaXhlbCwKQEAgLTUxMiw4ICs0NzAsMTIgQEAKIAl9LCB7CiAJCS50eXBlID0gREMzMCwKIAkJLm5hbWUgPSAiREMzMCIsCi0JCS5pMmNfZGVjb2RlciA9IEkyQ19EUklWRVJJRF9WUFgzMjIwLAotCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfQURWNzE3NSwKKwkJLmkyY19kZWNvZGVyID0gInZweDMyMjBhIiwKKwkJLm1vZF9kZWNvZGVyID0gInZweDMyMjAiLAorCQkuYWRkcnNfZGVjb2RlciA9IHZweDMyMjBfYWRkcnMsCisJCS5pMmNfZW5jb2RlciA9ICJhZHY3MTc1IiwKKwkJLm1vZF9lbmNvZGVyID0gImFkdjcxNzUiLAorCQkuYWRkcnNfZW5jb2RlciA9IGFkdjcxN3hfYWRkcnMsCiAJCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA1MCwKIAkJLnZpZGVvX3ZmZSA9IENPREVDX1RZUEVfWlIzNjAxNiwKIApAQCAtNTIzLDcgKzQ4NSw3IEBACiAJCQl7IDIsICJTLVZpZGVvIiB9LAogCQkJeyAwLCAiSW50ZXJuYWwvY29tcCIgfQogCQl9LAotCQkubm9ybXMgPSAzLAorCQkubm9ybXMgPSBWNEwyX1NURF9OVFNDfFY0TDJfU1REX1BBTHxWNEwyX1NURF9TRUNBTSwKIAkJLnR2biA9IHsKIAkJCSZmNTBzcXBpeGVsX2RjMTAsCiAJCQkmZjYwc3FwaXhlbF9kYzEwLApAQCAtNTQxLDggKzUwMywxMiBAQAogCX0sIHsKIAkJLnR5cGUgPSBEQzMwcGx1cywKIAkJLm5hbWUgPSAiREMzMHBsdXMiLAotCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfVlBYMzIyMCwKLQkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0FEVjcxNzUsCisJCS5pMmNfZGVjb2RlciA9ICJ2cHgzMjIwYSIsCisJCS5tb2RfZGVjb2RlciA9ICJ2cHgzMjIwIiwKKwkJLmFkZHJzX2RlY29kZXIgPSB2cHgzMjIwX2FkZHJzLAorCQkuaTJjX2VuY29kZXIgPSAiYWR2NzE3NSIsCisJCS5tb2RfZW5jb2RlciA9ICJhZHY3MTc1IiwKKwkJLmFkZHJzX2VuY29kZXIgPSBhZHY3MTd4X2FkZHJzLAogCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNTAsCiAJCS52aWRlb192ZmUgPSBDT0RFQ19UWVBFX1pSMzYwMTYsCiAKQEAgLTU1Miw3ICs1MTgsNyBAQAogCQkJeyAyLCAiUy1WaWRlbyIgfSwKIAkJCXsgMCwgIkludGVybmFsL2NvbXAiIH0KIAkJfSwKLQkJLm5vcm1zID0gMywKKwkJLm5vcm1zID0gVjRMMl9TVERfTlRTQ3xWNEwyX1NURF9QQUx8VjRMMl9TVERfU0VDQU0sCiAJCS50dm4gPSB7CiAJCQkmZjUwc3FwaXhlbF9kYzEwLAogCQkJJmY2MHNxcGl4ZWxfZGMxMCwKQEAgLTU3MCw4ICs1MzYsMTIgQEAKIAl9LCB7CiAJCS50eXBlID0gTE1MMzMsCiAJCS5uYW1lID0gIkxNTDMzIiwKLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX0JUODE5LAotCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfQlQ4NTYsCisJCS5pMmNfZGVjb2RlciA9ICJidDgxOWEiLAorCQkubW9kX2RlY29kZXIgPSAiYnQ4MTkiLAorCQkuYWRkcnNfZGVjb2RlciA9IGJ0ODE5X2FkZHJzLAorCQkuaTJjX2VuY29kZXIgPSAiYnQ4NTYiLAorCQkubW9kX2VuY29kZXIgPSAiYnQ4NTYiLAorCQkuYWRkcnNfZW5jb2RlciA9IGJ0ODU2X2FkZHJzLAogCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNjAsCiAKIAkJLmlucHV0cyA9IDIsCkBAIC01NzksNyArNTQ5LDcgQEAKIAkJCXsgMCwgIkNvbXBvc2l0ZSIgfSwKIAkJCXsgNywgIlMtVmlkZW8iIH0KIAkJfSwKLQkJLm5vcm1zID0gMiwKKwkJLm5vcm1zID0gVjRMMl9TVERfTlRTQ3xWNEwyX1NURF9QQUwsCiAJCS50dm4gPSB7CiAJCQkmZjUwY2NpcjYwMV9sbWwzMywKIAkJCSZmNjBjY2lyNjAxX2xtbDMzLApAQCAtNTk3LDggKzU2NywxMiBAQAogCX0sIHsKIAkJLnR5cGUgPSBMTUwzM1IxMCwKIAkJLm5hbWUgPSAiTE1MMzNSMTAiLAotCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfU0FBNzExNCwKLQkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0FEVjcxNzAsCisJCS5pMmNfZGVjb2RlciA9ICJzYWE3MTE0IiwKKwkJLm1vZF9kZWNvZGVyID0gInNhYTcxMTUiLAorCQkuYWRkcnNfZGVjb2RlciA9IHNhYTcxMTRfYWRkcnMsCisJCS5pMmNfZW5jb2RlciA9ICJhZHY3MTcwIiwKKwkJLm1vZF9lbmNvZGVyID0gImFkdjcxNzAiLAorCQkuYWRkcnNfZW5jb2RlciA9IGFkdjcxN3hfYWRkcnMsCiAJCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA2MCwKIAogCQkuaW5wdXRzID0gMiwKQEAgLTYwNiw3ICs1ODAsNyBAQAogCQkJeyAwLCAiQ29tcG9zaXRlIiB9LAogCQkJeyA3LCAiUy1WaWRlbyIgfQogCQl9LAotCQkubm9ybXMgPSAyLAorCQkubm9ybXMgPSBWNEwyX1NURF9OVFNDfFY0TDJfU1REX1BBTCwKIAkJLnR2biA9IHsKIAkJCSZmNTBjY2lyNjAxX2xtMzNyMTAsCiAJCQkmZjYwY2NpcjYwMV9sbTMzcjEwLApAQCAtNjI0LDggKzU5OCwxMiBAQAogCX0sIHsKIAkJLnR5cGUgPSBCVVosCiAJCS5uYW1lID0gIkJ1eiIsCi0JCS5pMmNfZGVjb2RlciA9IEkyQ19EUklWRVJJRF9TQUE3MTExQSwKLQkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX1NBQTcxODVCLAorCQkuaTJjX2RlY29kZXIgPSAic2FhNzExMSIsCisJCS5tb2RfZGVjb2RlciA9ICJzYWE3MTE1IiwKKwkJLmFkZHJzX2RlY29kZXIgPSBzYWE3MTExX2FkZHJzLAorCQkuaTJjX2VuY29kZXIgPSAic2FhNzE4NSIsCisJCS5tb2RfZW5jb2RlciA9ICJzYWE3MTg1IiwKKwkJLmFkZHJzX2VuY29kZXIgPSBzYWE3MTg1X2FkZHJzLAogCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNjAsCiAKIAkJLmlucHV0cyA9IDIsCkBAIC02MzMsNyArNjExLDcgQEAKIAkJCXsgMywgIkNvbXBvc2l0ZSIgfSwKIAkJCXsgNywgIlMtVmlkZW8iIH0KIAkJfSwKLQkJLm5vcm1zID0gMywKKwkJLm5vcm1zID0gVjRMMl9TVERfTlRTQ3xWNEwyX1NURF9QQUx8VjRMMl9TVERfU0VDQU0sCiAJCS50dm4gPSB7CiAJCQkmZjUwY2NpcjYwMSwKIAkJCSZmNjBjY2lyNjAxLApAQCAtNjUzLDggKzYzMSwxMiBAQAogCQkubmFtZSA9ICI2LUV5ZXMiLAogCQkvKiBBdmVyTWVkaWEgY2hvc2Ugbm90IHRvIGJyYW5kIHRoZSA2LUV5ZXMuIFRodXMgaXQKIAkJICAgY2FuJ3QgYmUgYXV0b2RldGVjdGVkLCBhbmQgcmVxdWlyZXMgY2FyZD14LiAqLwotCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfS1MwMTI3LAotCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfQlQ4NjYsCisJCS5pMmNfZGVjb2RlciA9ICJrczAxMjciLAorCQkubW9kX2RlY29kZXIgPSAia3MwMTI3IiwKKwkJLmFkZHJzX2RlY29kZXIgPSBrczAxMjdfYWRkcnMsCisJCS5pMmNfZW5jb2RlciA9ICJidDg2NiIsCisJCS5tb2RfZW5jb2RlciA9ICJidDg2NiIsCisJCS5hZGRyc19lbmNvZGVyID0gYnQ4NjZfYWRkcnMsCiAJCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA2MCwKIAogCQkuaW5wdXRzID0gMTAsCkBAIC02NzAsNyArNjUyLDcgQEAKIAkJCXsxMCwgIlMtVmlkZW8gMyIgfSwKIAkJCXsxNSwgIllDYkNyIiB9CiAJCX0sCi0JCS5ub3JtcyA9IDIsCisJCS5ub3JtcyA9IFY0TDJfU1REX05UU0N8VjRMMl9TVERfUEFMLAogCQkudHZuID0gewogCQkJJmY1MGNjaXI2MDFfYXZzNmV5ZXMsCiAJCQkmZjYwY2NpcjYwMV9hdnM2ZXllcywKQEAgLTczNSw2OSArNzE3LDYgQEAKIAlidHdyaXRlKHpyLT5pMmNiciwgWlIzNjA1N19JMkNCUik7CiB9CiAKLXN0YXRpYyBpbnQKLXpvcmFuX2kyY19jbGllbnRfcmVnaXN0ZXIgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCWludCByZXMgPSAwOwotCi0JZHByaW50aygyLAotCQlLRVJOX0RFQlVHICIlczogaTJjX2NsaWVudF9yZWdpc3RlcigpIC0gZHJpdmVyIGlkID0gJWRcbiIsCi0JCVpSX0RFVk5BTUUoenIpLCBjbGllbnQtPmRyaXZlci0+aWQpOwotCi0JbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JaWYgKHpyLT51c2VyID4gMCkgewotCQkvKiB3ZSdyZSBhbHJlYWR5IGJ1c3ksIHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8KLQkJICogdGhlbS4uLiBDb3VsZCBkbyBhIGxvdCBvZiBzdHVmZiBoZXJlLCBidXQgdGhpcwotCQkgKiBpcyBlYXNpZXN0LiAoRGlkIEkgZXZlciBtZW50aW9uIEknbSBhIGxhenkgYXNzPykKLQkJICovCi0JCXJlcyA9IC1FQlVTWTsKLQkJZ290byBjbGllbnRyZWdfdW5sb2NrX2FuZF9yZXR1cm47Ci0JfQotCi0JaWYgKGNsaWVudC0+ZHJpdmVyLT5pZCA9PSB6ci0+Y2FyZC5pMmNfZGVjb2RlcikKLQkJenItPmRlY29kZXIgPSBjbGllbnQ7Ci0JZWxzZSBpZiAoY2xpZW50LT5kcml2ZXItPmlkID09IHpyLT5jYXJkLmkyY19lbmNvZGVyKQotCQl6ci0+ZW5jb2RlciA9IGNsaWVudDsKLQllbHNlIHsKLQkJcmVzID0gLUVOT0RFVjsKLQkJZ290byBjbGllbnRyZWdfdW5sb2NrX2FuZF9yZXR1cm47Ci0JfQotCi1jbGllbnRyZWdfdW5sb2NrX2FuZF9yZXR1cm46Ci0JbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW50Ci16b3Jhbl9pMmNfY2xpZW50X3VucmVnaXN0ZXIgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCWludCByZXMgPSAwOwotCi0JZHByaW50aygyLCBLRVJOX0RFQlVHICIlczogaTJjX2NsaWVudF91bnJlZ2lzdGVyKClcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCWlmICh6ci0+dXNlciA+IDApIHsKLQkJcmVzID0gLUVCVVNZOwotCQlnb3RvIGNsaWVudHVucmVnX3VubG9ja19hbmRfcmV0dXJuOwotCX0KLQotCS8qIHRyeSB0byBsb2NhdGUgaXQgKi8KLQlpZiAoY2xpZW50ID09IHpyLT5lbmNvZGVyKSB7Ci0JCXpyLT5lbmNvZGVyID0gTlVMTDsKLQl9IGVsc2UgaWYgKGNsaWVudCA9PSB6ci0+ZGVjb2RlcikgewotCQl6ci0+ZGVjb2RlciA9IE5VTEw7Ci0JCXNucHJpbnRmKFpSX0RFVk5BTUUoenIpLCBzaXplb2YoWlJfREVWTkFNRSh6cikpLCAiTUpQRUdbJWRdIiwgenItPmlkKTsKLQl9Ci1jbGllbnR1bnJlZ191bmxvY2tfYW5kX3JldHVybjoKLQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQlyZXR1cm4gcmVzOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIHpvcmFuX2kyY19iaXRfZGF0YV90ZW1wbGF0ZSA9IHsKIAkuc2V0c2RhID0gem9yYW5faTJjX3NldHNkYSwKIAkuc2V0c2NsID0gem9yYW5faTJjX3NldHNjbCwKQEAgLTgxMywxMyArNzMyLDEwIEBACiAJbWVtY3B5KCZ6ci0+aTJjX2FsZ28sICZ6b3Jhbl9pMmNfYml0X2RhdGFfdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEpKTsKIAl6ci0+aTJjX2FsZ28uZGF0YSA9IHpyOwotCXpyLT5pMmNfYWRhcHRlci5jbGFzcyA9IEkyQ19DTEFTU19UVl9BTkFMT0c7CiAJenItPmkyY19hZGFwdGVyLmlkID0gSTJDX0hXX0JfWlIzNjA2NzsKLQl6ci0+aTJjX2FkYXB0ZXIuY2xpZW50X3JlZ2lzdGVyID0gem9yYW5faTJjX2NsaWVudF9yZWdpc3RlcjsKLQl6ci0+aTJjX2FkYXB0ZXIuY2xpZW50X3VucmVnaXN0ZXIgPSB6b3Jhbl9pMmNfY2xpZW50X3VucmVnaXN0ZXI7CiAJc3RybGNweSh6ci0+aTJjX2FkYXB0ZXIubmFtZSwgWlJfREVWTkFNRSh6ciksCiAJCXNpemVvZih6ci0+aTJjX2FkYXB0ZXIubmFtZSkpOwotCWkyY19zZXRfYWRhcGRhdGEoJnpyLT5pMmNfYWRhcHRlciwgenIpOworCWkyY19zZXRfYWRhcGRhdGEoJnpyLT5pMmNfYWRhcHRlciwgJnpyLT52NGwyX2Rldik7CiAJenItPmkyY19hZGFwdGVyLmFsZ29fZGF0YSA9ICZ6ci0+aTJjX2FsZ287CiAJenItPmkyY19hZGFwdGVyLmRldi5wYXJlbnQgPSAmenItPnBjaV9kZXYtPmRldjsKIAlyZXR1cm4gaTJjX2JpdF9hZGRfYnVzKCZ6ci0+aTJjX2FkYXB0ZXIpOwpAQCAtODM1LDE5ICs3NTEsMjAgQEAKIAogaW50CiB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MgKHN0cnVjdCB6b3JhbiAgICAgICAgICAgICAgKnpyLAotCQkJICBzdHJ1Y3Qgem9yYW5fanBnX3NldHRpbmdzICpzZXR0aW5ncykKKwkJCSAgc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyAqc2V0dGluZ3MsCisJCQkgIGludCB0cnkpCiB7CiAJaW50IGVyciA9IDAsIGVycjAgPSAwOwogCiAJZHByaW50ayg0LAogCQlLRVJOX0RFQlVHCi0JCSIlczogY2hlY2tfanBnX3NldHRpbmdzKCkgLSBkZWM6ICVkLCBIZGNtOiAlZCwgVmRjbTogJWQsIFRkY206ICVkXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwgc2V0dGluZ3MtPmRlY2ltYXRpb24sIHNldHRpbmdzLT5Ib3JEY20sCisJCSIlczogJXMgLSBkZWM6ICVkLCBIZGNtOiAlZCwgVmRjbTogJWQsIFRkY206ICVkXG4iLAorCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIHNldHRpbmdzLT5kZWNpbWF0aW9uLCBzZXR0aW5ncy0+SG9yRGNtLAogCQlzZXR0aW5ncy0+VmVyRGNtLCBzZXR0aW5ncy0+VG1wRGNtKTsKIAlkcHJpbnRrKDQsCiAJCUtFUk5fREVCVUcKLQkJIiVzOiBjaGVja19qcGdfc2V0dGluZ3MoKSAtIHg6ICVkLCB5OiAlZCwgdzogJWQsIHk6ICVkXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwgc2V0dGluZ3MtPmltZ194LCBzZXR0aW5ncy0+aW1nX3ksCisJCSIlczogJXMgLSB4OiAlZCwgeTogJWQsIHc6ICVkLCB5OiAlZFxuIiwKKwkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBzZXR0aW5ncy0+aW1nX3gsIHNldHRpbmdzLT5pbWdfeSwKIAkJc2V0dGluZ3MtPmltZ193aWR0aCwgc2V0dGluZ3MtPmltZ19oZWlnaHQpOwogCS8qIENoZWNrIGRlY2ltYXRpb24sIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZGVjaW1hdGlvbiA9IDEsIDIsIDQgKi8KIAlzd2l0Y2ggKHNldHRpbmdzLT5kZWNpbWF0aW9uKSB7CkBAIC04NzksOCArNzk2LDggQEAKIAkJaWYgKHpyLT5jYXJkLnR5cGUgPT0gREMxMF9uZXcpIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0RFQlVHCi0JCQkJIiVzOiBjaGVja19qcGdfc2V0dGluZ3MoKSAtIEhEZWMgYnkgNCBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBEQzEwXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkiJXM6ICVzIC0gSERlYyBieSA0IGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIERDMTBcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCWVycjArKzsKIAkJCWJyZWFrOwogCQl9CkBAIC05MDAsNTAgKzgxNyw3MyBAQAogCQkvKiBXZSBoYXZlIHRvIGNoZWNrIHRoZSBkYXRhIHRoZSB1c2VyIGhhcyBzZXQgKi8KIAogCQlpZiAoc2V0dGluZ3MtPkhvckRjbSAhPSAxICYmIHNldHRpbmdzLT5Ib3JEY20gIT0gMiAmJgotCQkgICAgKHpyLT5jYXJkLnR5cGUgPT0gREMxMF9uZXcgfHwgc2V0dGluZ3MtPkhvckRjbSAhPSA0KSkKKwkJICAgICh6ci0+Y2FyZC50eXBlID09IERDMTBfbmV3IHx8IHNldHRpbmdzLT5Ib3JEY20gIT0gNCkpIHsKKwkJCXNldHRpbmdzLT5Ib3JEY20gPSBjbGFtcChzZXR0aW5ncy0+SG9yRGNtLCAxLCAyKTsKIAkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5WZXJEY20gIT0gMSAmJiBzZXR0aW5ncy0+VmVyRGNtICE9IDIpCisJCX0KKwkJaWYgKHNldHRpbmdzLT5WZXJEY20gIT0gMSAmJiBzZXR0aW5ncy0+VmVyRGNtICE9IDIpIHsKKwkJCXNldHRpbmdzLT5WZXJEY20gPSBjbGFtcChzZXR0aW5ncy0+VmVyRGNtLCAxLCAyKTsKIAkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5UbXBEY20gIT0gMSAmJiBzZXR0aW5ncy0+VG1wRGNtICE9IDIpCisJCX0KKwkJaWYgKHNldHRpbmdzLT5UbXBEY20gIT0gMSAmJiBzZXR0aW5ncy0+VG1wRGNtICE9IDIpIHsKKwkJCXNldHRpbmdzLT5UbXBEY20gPSBjbGFtcChzZXR0aW5ncy0+VG1wRGNtLCAxLCAyKTsKIAkJCWVycjArKzsKKwkJfQogCQlpZiAoc2V0dGluZ3MtPmZpZWxkX3Blcl9idWZmICE9IDEgJiYKLQkJICAgIHNldHRpbmdzLT5maWVsZF9wZXJfYnVmZiAhPSAyKQorCQkgICAgc2V0dGluZ3MtPmZpZWxkX3Blcl9idWZmICE9IDIpIHsKKwkJCXNldHRpbmdzLT5maWVsZF9wZXJfYnVmZiA9IGNsYW1wKHNldHRpbmdzLT5maWVsZF9wZXJfYnVmZiwgMSwgMik7CiAJCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+aW1nX3ggPCAwKQorCQl9CisJCWlmIChzZXR0aW5ncy0+aW1nX3ggPCAwKSB7CisJCQlzZXR0aW5ncy0+aW1nX3ggPSAwOwogCQkJZXJyMCsrOwotCQlpZiAoc2V0dGluZ3MtPmltZ195IDwgMCkKKwkJfQorCQlpZiAoc2V0dGluZ3MtPmltZ195IDwgMCkgeworCQkJc2V0dGluZ3MtPmltZ195ID0gMDsKIAkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5pbWdfd2lkdGggPCAwKQorCQl9CisJCWlmIChzZXR0aW5ncy0+aW1nX3dpZHRoIDwgMCB8fCBzZXR0aW5ncy0+aW1nX3dpZHRoID4gQlVaX01BWF9XSURUSCkgeworCQkJc2V0dGluZ3MtPmltZ193aWR0aCA9IGNsYW1wKHNldHRpbmdzLT5pbWdfd2lkdGgsIDAsIChpbnQpQlVaX01BWF9XSURUSCk7CiAJCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+aW1nX2hlaWdodCA8IDApCisJCX0KKwkJaWYgKHNldHRpbmdzLT5pbWdfaGVpZ2h0IDwgMCB8fCBzZXR0aW5ncy0+aW1nX2hlaWdodCA+IEJVWl9NQVhfSEVJR0hUIC8gMikgeworCQkJc2V0dGluZ3MtPmltZ19oZWlnaHQgPSBjbGFtcChzZXR0aW5ncy0+aW1nX2hlaWdodCwgMCwgQlVaX01BWF9IRUlHSFQgLyAyKTsKIAkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5pbWdfeCArIHNldHRpbmdzLT5pbWdfd2lkdGggPiBCVVpfTUFYX1dJRFRIKQorCQl9CisJCWlmIChzZXR0aW5ncy0+aW1nX3ggKyBzZXR0aW5ncy0+aW1nX3dpZHRoID4gQlVaX01BWF9XSURUSCkgeworCQkJc2V0dGluZ3MtPmltZ194ID0gQlVaX01BWF9XSURUSCAtIHNldHRpbmdzLT5pbWdfd2lkdGg7CiAJCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+aW1nX3kgKyBzZXR0aW5ncy0+aW1nX2hlaWdodCA+Ci0JCSAgICBCVVpfTUFYX0hFSUdIVCAvIDIpCisJCX0KKwkJaWYgKHNldHRpbmdzLT5pbWdfeSArIHNldHRpbmdzLT5pbWdfaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQgLyAyKSB7CisJCQlzZXR0aW5ncy0+aW1nX3kgPSBCVVpfTUFYX0hFSUdIVCAvIDIgLSBzZXR0aW5ncy0+aW1nX2hlaWdodDsKIAkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5Ib3JEY20gJiYgc2V0dGluZ3MtPlZlckRjbSkgewotCQkJaWYgKHNldHRpbmdzLT5pbWdfd2lkdGggJQotCQkJICAgICgxNiAqIHNldHRpbmdzLT5Ib3JEY20pICE9IDApCi0JCQkJZXJyMCsrOwotCQkJaWYgKHNldHRpbmdzLT5pbWdfaGVpZ2h0ICUKLQkJCSAgICAoOCAqIHNldHRpbmdzLT5WZXJEY20pICE9IDApCi0JCQkJZXJyMCsrOworCQl9CisJCWlmIChzZXR0aW5ncy0+aW1nX3dpZHRoICUgKDE2ICogc2V0dGluZ3MtPkhvckRjbSkgIT0gMCkgeworCQkJc2V0dGluZ3MtPmltZ193aWR0aCAtPSBzZXR0aW5ncy0+aW1nX3dpZHRoICUgKDE2ICogc2V0dGluZ3MtPkhvckRjbSk7CisJCQlpZiAoc2V0dGluZ3MtPmltZ193aWR0aCA9PSAwKQorCQkJCXNldHRpbmdzLT5pbWdfd2lkdGggPSAxNiAqIHNldHRpbmdzLT5Ib3JEY207CisJCQllcnIwKys7CisJCX0KKwkJaWYgKHNldHRpbmdzLT5pbWdfaGVpZ2h0ICUgKDggKiBzZXR0aW5ncy0+VmVyRGNtKSAhPSAwKSB7CisJCQlzZXR0aW5ncy0+aW1nX2hlaWdodCAtPSBzZXR0aW5ncy0+aW1nX2hlaWdodCAlICg4ICogc2V0dGluZ3MtPlZlckRjbSk7CisJCQlpZiAoc2V0dGluZ3MtPmltZ19oZWlnaHQgPT0gMCkKKwkJCQlzZXR0aW5ncy0+aW1nX2hlaWdodCA9IDggKiBzZXR0aW5ncy0+VmVyRGNtOworCQkJZXJyMCsrOwogCQl9CiAKLQkJaWYgKGVycjApIHsKKwkJaWYgKCF0cnkgJiYgZXJyMCkgewogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBjaGVja19qcGdfc2V0dGluZ3MoKSAtIGVycm9yIGluIHBhcmFtcyBmb3IgZGVjaW1hdGlvbiA9IDBcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSBlcnJvciBpbiBwYXJhbXMgZm9yIGRlY2ltYXRpb24gPSAwXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQllcnIrKzsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBjaGVja19qcGdfc2V0dGluZ3MoKSAtIGRlY2ltYXRpb24gPSAlZCwgbXVzdCBiZSAwLCAxLCAyIG9yIDRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgc2V0dGluZ3MtPmRlY2ltYXRpb24pOworCQkJIiVzOiAlcyAtIGRlY2ltYXRpb24gPSAlZCwgbXVzdCBiZSAwLCAxLCAyIG9yIDRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIHNldHRpbmdzLT5kZWNpbWF0aW9uKTsKIAkJZXJyKys7CiAJCWJyZWFrOwogCX0KQEAgLTEwMjEsMTIgKzk2MSwxMCBAQAogCSAgICAgICBzaXplb2YoenItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fZGF0YSkpOwogCXpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuanBlZ19tYXJrZXJzID0KIAkgICAgSlBFR19NQVJLRVJfREhUIHwgSlBFR19NQVJLRVJfRFFUOwotCWkgPSB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZ6ci0+anBnX3NldHRpbmdzKTsKKwlpID0gem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLCAmenItPmpwZ19zZXR0aW5ncywgMCk7CiAJaWYgKGkpCi0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHpvcmFuX29wZW5faW5pdF9wYXJhbXMoKSBpbnRlcm5hbCBlcnJvclxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6ICVzIGludGVybmFsIGVycm9yXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAogCWNsZWFyX2ludGVycnVwdF9jb3VudGVycyh6cik7CiAJenItPnRlc3RpbmcgPSAwOwpAQCAtMTA2MiwxMyArMTAwMCwxMSBAQAogenIzNjA1N19pbml0IChzdHJ1Y3Qgem9yYW4gKnpyKQogewogCWludCBqLCBlcnI7Ci0JaW50IHR3byA9IDI7Ci0JaW50IHplcm8gPSAwOwogCiAJZHByaW50aygxLAogCQlLRVJOX0lORk8KLQkJIiVzOiB6cjM2MDU3X2luaXQoKSAtIGluaXRpYWxpemluZyBjYXJkWyVkXSwgenI9JXBcbiIsCi0JCVpSX0RFVk5BTUUoenIpLCB6ci0+aWQsIHpyKTsKKwkJIiVzOiAlcyAtIGluaXRpYWxpemluZyBjYXJkWyVkXSwgenI9JXBcbiIsCisJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgenItPmlkLCB6cik7CiAKIAkvKiBkZWZhdWx0IHNldHVwIG9mIGFsbCBwYXJhbWV0ZXJzIHdoaWNoIHdpbGwgcGVyc2lzdCBiZXR3ZWVuIG9wZW5zICovCiAJenItPnVzZXIgPSAwOwpAQCAtMTA3OSwyNCArMTAxNSwzMiBAQAogCXpyLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwogCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwogCi0JenItPmJ1ZmZlci5iYXNlID0gKHZvaWQgKikgdmlkbWVtOwotCXpyLT5idWZmZXIud2lkdGggPSAwOwotCXpyLT5idWZmZXIuaGVpZ2h0ID0gMDsKLQl6ci0+YnVmZmVyLmRlcHRoID0gMDsKLQl6ci0+YnVmZmVyLmJ5dGVzcGVybGluZSA9IDA7CisJenItPnZidWZfYmFzZSA9ICh2b2lkICopIHZpZG1lbTsKKwl6ci0+dmJ1Zl93aWR0aCA9IDA7CisJenItPnZidWZfaGVpZ2h0ID0gMDsKKwl6ci0+dmJ1Zl9kZXB0aCA9IDA7CisJenItPnZidWZfYnl0ZXNwZXJsaW5lID0gMDsKIAogCS8qIEF2b2lkIG5vbnNlbnNlIHNldHRpbmdzIGZyb20gdXNlciBmb3IgZGVmYXVsdCBpbnB1dC9ub3JtICovCi0JaWYgKGRlZmF1bHRfbm9ybSA8IFZJREVPX01PREVfUEFMICYmCi0JICAgIGRlZmF1bHRfbm9ybSA+IFZJREVPX01PREVfU0VDQU0pCi0JCWRlZmF1bHRfbm9ybSA9IFZJREVPX01PREVfUEFMOwotCXpyLT5ub3JtID0gZGVmYXVsdF9ub3JtOwotCWlmICghKHpyLT50aW1pbmcgPSB6ci0+Y2FyZC50dm5benItPm5vcm1dKSkgeworCWlmIChkZWZhdWx0X25vcm0gPCAwICYmIGRlZmF1bHRfbm9ybSA+IDIpCisJCWRlZmF1bHRfbm9ybSA9IDA7CisJaWYgKGRlZmF1bHRfbm9ybSA9PSAwKSB7CisJCXpyLT5ub3JtID0gVjRMMl9TVERfUEFMOworCQl6ci0+dGltaW5nID0genItPmNhcmQudHZuWzBdOworCX0gZWxzZSBpZiAoZGVmYXVsdF9ub3JtID09IDEpIHsKKwkJenItPm5vcm0gPSBWNEwyX1NURF9OVFNDOworCQl6ci0+dGltaW5nID0genItPmNhcmQudHZuWzFdOworCX0gZWxzZSB7CisJCXpyLT5ub3JtID0gVjRMMl9TVERfU0VDQU07CisJCXpyLT50aW1pbmcgPSB6ci0+Y2FyZC50dm5bMl07CisJfQorCWlmICh6ci0+dGltaW5nID09IE5VTEwpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9XQVJOSU5HCi0JCQkiJXM6IHpyMzYwNTdfaW5pdCgpIC0gZGVmYXVsdCBUViBzdGFuZGFyZCBub3Qgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlLiBQQUwgd2lsbCBiZSB1c2VkLlxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJenItPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKLQkJenItPnRpbWluZyA9IHpyLT5jYXJkLnR2blt6ci0+bm9ybV07CisJCQkiJXM6ICVzIC0gZGVmYXVsdCBUViBzdGFuZGFyZCBub3Qgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlLiBQQUwgd2lsbCBiZSB1c2VkLlxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CisJCXpyLT5ub3JtID0gVjRMMl9TVERfUEFMOworCQl6ci0+dGltaW5nID0genItPmNhcmQudHZuWzBdOwogCX0KIAogCWlmIChkZWZhdWx0X2lucHV0ID4genItPmNhcmQuaW5wdXRzLTEpIHsKQEAgLTExMDgsMTIgKzEwNTIsNiBAQAogCX0KIAl6ci0+aW5wdXQgPSBkZWZhdWx0X2lucHV0OwogCi0JLyogU2hvdWxkIHRoZSBmb2xsb3dpbmcgYmUgcmVzZXQgYXQgZXZlcnkgb3BlbiA/ICovCi0JenItPmh1ZSA9IDMyNzY4OwotCXpyLT5jb250cmFzdCA9IDMyNzY4OwotCXpyLT5zYXR1cmF0aW9uID0gMzI3Njg7Ci0JenItPmJyaWdodG5lc3MgPSAzMjc2ODsKLQogCS8qIGRlZmF1bHQgc2V0dXAgKHdpbGwgYmUgcmVwZWF0ZWQgYXQgZXZlcnkgb3BlbikgKi8KIAl6b3Jhbl9vcGVuX2luaXRfcGFyYW1zKHpyKTsKIApAQCAtMTEyNCw4ICsxMDYyLDggQEAKIAlpZiAoIXpyLT5zdGF0X2NvbSB8fCAhenItPnZpZGVvX2RldikgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiB6cjM2MDU3X2luaXQoKSAtIGttYWxsb2MgKFNUQVRfQ09NKSBmYWlsZWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0ga21hbGxvYyAoU1RBVF9DT00pIGZhaWxlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXhpdF9mcmVlOwogCX0KQEAgLTExMzcsNiArMTA3NSw3IEBACiAJICogICBOb3cgYWRkIHRoZSB0ZW1wbGF0ZSBhbmQgcmVnaXN0ZXIgdGhlIGRldmljZSB1bml0LgogCSAqLwogCW1lbWNweSh6ci0+dmlkZW9fZGV2LCAmem9yYW5fdGVtcGxhdGUsIHNpemVvZih6b3Jhbl90ZW1wbGF0ZSkpOworCXpyLT52aWRlb19kZXYtPnBhcmVudCA9ICZ6ci0+cGNpX2Rldi0+ZGV2OwogCXN0cmNweSh6ci0+dmlkZW9fZGV2LT5uYW1lLCBaUl9ERVZOQU1FKHpyKSk7CiAJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHpyLT52aWRlb19kZXYsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yW3pyLT5pZF0pOwogCWlmIChlcnIgPCAwKQpAQCAtMTE0OCw4ICsxMDg3LDEwIEBACiAJCWRldGVjdF9ndWVzdF9hY3Rpdml0eSh6cik7CiAJdGVzdF9pbnRlcnJ1cHRzKHpyKTsKIAlpZiAoIXBhc3NfdGhyb3VnaCkgewotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfRU5BQkxFX09VVFBVVCwgJnplcm8pOwotCQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX0lOUFVULCAmdHdvKTsKKwkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZSA9IHsgMiwgMCB9OworCisJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfc3RyZWFtLCAwKTsKKwkJZW5jb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCX0KIAogCXpyLT56b3Jhbl9wcm9jID0gTlVMTDsKQEAgLTExNjQsNyArMTEwNSw4IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB6b3Jhbl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCB6b3JhbiAqenIgPSB0b196b3Jhbih2NGwyX2Rldik7CiAKIAlpZiAoIXpyLT5pbml0aWFsaXplZCkKIAkJZ290byBleGl0X2ZyZWU7CkBAIC0xMTk3LDcgKzExMzksNyBAQAogCXBjaV9kaXNhYmxlX2RldmljZSh6ci0+cGNpX2Rldik7CiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoenItPnZpZGVvX2Rldik7CiBleGl0X2ZyZWU6Ci0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnpyLT52NGwyX2Rldik7CiAJa2ZyZWUoenIpOwogfQogCkBAIC0xMjE1LDEwICsxMTU3LDggQEAKIAogCW0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9jb2RlY19tYXN0ZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW0pIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogem9yYW5fc2V0dXBfdmlkZW9jb2RlYygpIC0gbm8gbWVtb3J5XG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogJXMgLSBubyBtZW1vcnlcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gbTsKIAl9CiAKQEAgLTEyNTYsNiArMTE5NiwxOCBAQAogCXJldHVybiBtOwogfQogCitzdGF0aWMgdm9pZCB6b3Jhbl9zdWJkZXZfbm90aWZ5KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gdG9fem9yYW4oc2QtPnY0bDJfZGV2KTsKKworCS8qIEJ0ODE5IG5lZWRzIHRvIHJlc2V0IGl0cyBGSUZPIGJ1ZmZlciB1c2luZyAjRlJTVCBwaW4gYW5kCisJICAgTE1MMzMgY2FyZCB1c2VzIEdQSU8oNykgZm9yIHRoYXQuICovCisJaWYgKGNtZCA9PSBCVDgxOV9GSUZPX1JFU0VUX0xPVykKKwkJR1BJTyh6ciwgNywgMCk7CisJZWxzZSBpZiAoY21kID09IEJUODE5X0ZJRk9fUkVTRVRfSElHSCkKKwkJR1BJTyh6ciwgNywgMSk7Cit9CisKIC8qCiAgKiAgIFNjYW4gZm9yIGEgQnV6IGNhcmQgKGFjdHVhbGx5IGZvciB0aGUgUENJIGNvbnRyb2xsZXIgWlIzNjA1NyksCiAgKiAgIHJlcXVlc3QgdGhlIGlycSBhbmQgbWFwIHRoZSBpbyBtZW1vcnkKQEAgLTEyNjksMzQgKzEyMjEsMzMgQEAKIAlzdHJ1Y3QgdmlkZW9jb2RlY19tYXN0ZXIgKm1hc3Rlcl92ZmUgPSBOVUxMOwogCXN0cnVjdCB2aWRlb2NvZGVjX21hc3RlciAqbWFzdGVyX2NvZGVjID0gTlVMTDsKIAlpbnQgY2FyZF9udW07Ci0JY2hhciAqaTJjX2VuY19uYW1lLCAqaTJjX2RlY19uYW1lLCAqY29kZWNfbmFtZSwgKnZmZV9uYW1lOworCWNoYXIgKmNvZGVjX25hbWUsICp2ZmVfbmFtZTsKIAl1bnNpZ25lZCBpbnQgbnI7CiAKIAogCW5yID0gem9yYW5fbnVtKys7CiAJaWYgKG5yID49IEJVWl9NQVgpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogZHJpdmVyIGxpbWl0ZWQgdG8gJWQgY2FyZChzKSBtYXhpbXVtXG4iLAorCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogZHJpdmVyIGxpbWl0ZWQgdG8gJWQgY2FyZChzKSBtYXhpbXVtXG4iLAogCQkJWk9SQU5fTkFNRSwgQlVaX01BWCk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAogCXpyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHpvcmFuKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF6cikgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIGt6YWxsb2MgZmFpbGVkXG4iLAotCQkJWk9SQU5fTkFNRSk7CisJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiAlcyAtIGt6YWxsb2MgZmFpbGVkXG4iLAorCQkJWk9SQU5fTkFNRSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJenItPnY0bDJfZGV2Lm5vdGlmeSA9IHpvcmFuX3N1YmRldl9ub3RpZnk7CisJaWYgKHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZ6ci0+djRsMl9kZXYpKQorCQlnb3RvIHpyX2ZyZWVfbWVtOwogCXpyLT5wY2lfZGV2ID0gcGRldjsKIAl6ci0+aWQgPSBucjsKIAlzbnByaW50ZihaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKFpSX0RFVk5BTUUoenIpKSwgIk1KUEVHWyV1XSIsIHpyLT5pZCk7CiAJc3Bpbl9sb2NrX2luaXQoJnpyLT5zcGlubG9jayk7CiAJbXV0ZXhfaW5pdCgmenItPnJlc291cmNlX2xvY2spOwogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKLQkJZ290byB6cl9mcmVlX21lbTsKKwkJZ290byB6cl91bnJlZzsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZSh6ci0+cGNpX2RldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmenItPnJldmlzaW9uKTsKIAogCWRwcmludGsoMSwKQEAgLTEzMjMsNyArMTI3NCw3IEBACiAJCQkJS0VSTl9FUlIKIAkJCQkiJXM6IEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhdXRvLWRldGVjdCBaUjM2MDU3IGJhc2VkIGNhcmRzXG4iLAogCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCWdvdG8genJfZnJlZV9tZW07CisJCQlnb3RvIHpyX3VucmVnOwogCQl9CiAKIAkJY2FyZF9udW0gPSBlbnQtPmRyaXZlcl9kYXRhOwpAQCAtMTMzMiw3ICsxMjgzLDcgQEAKIAkJCQlLRVJOX0VSUgogCQkJCSIlczogVW5rbm93biBjYXJkLCB0cnkgc3BlY2lmeWluZyBjYXJkPVggbW9kdWxlIHBhcmFtZXRlclxuIiwKIAkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlnb3RvIHpyX2ZyZWVfbWVtOworCQkJZ290byB6cl91bnJlZzsKIAkJfQogCQlkcHJpbnRrKDMsCiAJCQlLRVJOX0RFQlVHCkBAIC0xMzQ1LDcgKzEyOTYsNyBAQAogCQkJCUtFUk5fRVJSCiAJCQkJIiVzOiBVc2VyIHNwZWNpZmllZCBjYXJkIHR5cGUgJWQgb3V0IG9mIHJhbmdlICgwIC4uICVkKVxuIiwKIAkJCQlaUl9ERVZOQU1FKHpyKSwgY2FyZF9udW0sIE5VTV9DQVJEUyAtIDEpOwotCQkJZ290byB6cl9mcmVlX21lbTsKKwkJCWdvdG8genJfdW5yZWc7CiAJCX0KIAl9CiAKQEAgLTEzNjAsMTEgKzEzMTEsOSBAQAogCiAJenItPnpyMzYwNTdfbWVtID0gcGNpX2lvcmVtYXBfYmFyKHpyLT5wY2lfZGV2LCAwKTsKIAlpZiAoIXpyLT56cjM2MDU3X21lbSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiAlcygpIC0gaW9yZW1hcCBmYWlsZWRcbiIsCisJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiAlcygpIC0gaW9yZW1hcCBmYWlsZWRcbiIsCiAJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwotCQlnb3RvIHpyX2ZyZWVfbWVtOworCQlnb3RvIHpyX3VucmVnOwogCX0KIAogCXJlc3VsdCA9IHJlcXVlc3RfaXJxKHpyLT5wY2lfZGV2LT5pcnEsIHpvcmFuX2lycSwKQEAgLTEzNzMsMTggKzEzMjIsMTggQEAKIAkJaWYgKHJlc3VsdCA9PSAtRUlOVkFMKSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gYmFkIGlycSBudW1iZXIgb3IgaGFuZGxlclxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJIiVzOiAlcyAtIGJhZCBpcnEgbnVtYmVyIG9yIGhhbmRsZXJcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJfSBlbHNlIGlmIChyZXN1bHQgPT0gLUVCVVNZKSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gSVJRICVkIGJ1c3ksIGNoYW5nZSB5b3VyIFBuUCBjb25maWcgaW4gQklPU1xuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgenItPnBjaV9kZXYtPmlycSk7CisJCQkJIiVzOiAlcyAtIElSUSAlZCBidXN5LCBjaGFuZ2UgeW91ciBQblAgY29uZmlnIGluIEJJT1NcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCB6ci0+cGNpX2Rldi0+aXJxKTsKIAkJfSBlbHNlIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBjYW4ndCBhc3NpZ24gaXJxLCBlcnJvciBjb2RlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCByZXN1bHQpOworCQkJCSIlczogJXMgLSBjYW4ndCBhc3NpZ24gaXJxLCBlcnJvciBjb2RlICVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgcmVzdWx0KTsKIAkJfQogCQlnb3RvIHpyX3VubWFwOwogCX0KQEAgLTEzOTQsOSArMTM0Myw3IEBACiAJCQkgICAgICZsYXRlbmN5KTsKIAluZWVkX2xhdGVuY3kgPSB6ci0+cmV2aXNpb24gPiAxID8gMzIgOiA0ODsKIAlpZiAobGF0ZW5jeSAhPSBuZWVkX2xhdGVuY3kpIHsKLQkJZHByaW50aygyLAotCQkJS0VSTl9JTkZPCi0JCQkiJXM6IENoYW5naW5nIFBDSSBsYXRlbmN5IGZyb20gJWQgdG8gJWRcbiIsCisJCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogQ2hhbmdpbmcgUENJIGxhdGVuY3kgZnJvbSAlZCB0byAlZFxuIiwKIAkJCVpSX0RFVk5BTUUoenIpLCBsYXRlbmN5LCBuZWVkX2xhdGVuY3kpOwogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoenItPnBjaV9kZXYsIFBDSV9MQVRFTkNZX1RJTUVSLAogCQkJCSAgICAgIG5lZWRfbGF0ZW5jeSk7CkBAIC0xNDA3LDU0ICsxMzU0LDIwIEBACiAJZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiBJbml0aWFsaXppbmcgaTJjIGJ1cy4uLlxuIiwKIAkJWlJfREVWTkFNRSh6cikpOwogCi0JLyogaTJjIGRlY29kZXIgKi8KLQlpZiAoZGVjb2Rlclt6ci0+aWRdICE9IC0xKSB7Ci0JCWkyY19kZWNfbmFtZSA9IGkyY2lkX3RvX21vZHVsZW5hbWUoZGVjb2Rlclt6ci0+aWRdKTsKLQkJenItPmNhcmQuaTJjX2RlY29kZXIgPSBkZWNvZGVyW3pyLT5pZF07Ci0JfSBlbHNlIGlmICh6ci0+Y2FyZC5pMmNfZGVjb2RlciAhPSAwKSB7Ci0JCWkyY19kZWNfbmFtZSA9IGkyY2lkX3RvX21vZHVsZW5hbWUoenItPmNhcmQuaTJjX2RlY29kZXIpOwotCX0gZWxzZSB7Ci0JCWkyY19kZWNfbmFtZSA9IE5VTEw7Ci0JfQotCi0JaWYgKGkyY19kZWNfbmFtZSkgewotCQlyZXN1bHQgPSByZXF1ZXN0X21vZHVsZShpMmNfZGVjX25hbWUpOwotCQlpZiAocmVzdWx0IDwgMCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBmYWlsZWQgdG8gbG9hZCBtb2R1bGUgJXM6ICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBpMmNfZGVjX25hbWUsIHJlc3VsdCk7Ci0JCX0KLQl9Ci0KLQkvKiBpMmMgZW5jb2RlciAqLwotCWlmIChlbmNvZGVyW3pyLT5pZF0gIT0gLTEpIHsKLQkJaTJjX2VuY19uYW1lID0gaTJjaWRfdG9fbW9kdWxlbmFtZShlbmNvZGVyW3pyLT5pZF0pOwotCQl6ci0+Y2FyZC5pMmNfZW5jb2RlciA9IGVuY29kZXJbenItPmlkXTsKLQl9IGVsc2UgaWYgKHpyLT5jYXJkLmkyY19lbmNvZGVyICE9IDApIHsKLQkJaTJjX2VuY19uYW1lID0gaTJjaWRfdG9fbW9kdWxlbmFtZSh6ci0+Y2FyZC5pMmNfZW5jb2Rlcik7Ci0JfSBlbHNlIHsKLQkJaTJjX2VuY19uYW1lID0gTlVMTDsKLQl9Ci0KLQlpZiAoaTJjX2VuY19uYW1lKSB7Ci0JCXJlc3VsdCA9IHJlcXVlc3RfbW9kdWxlKGkyY19lbmNfbmFtZSk7Ci0JCWlmIChyZXN1bHQgPCAwKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IGZhaWxlZCB0byBsb2FkIG1vZHVsZSAlczogJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGkyY19lbmNfbmFtZSwgcmVzdWx0KTsKLQkJfQotCX0KLQogCWlmICh6b3Jhbl9yZWdpc3Rlcl9pMmMoenIpIDwgMCkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIGNhbid0IGluaXRpYWxpemUgaTJjIGJ1c1xuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6ICVzIC0gY2FuJ3QgaW5pdGlhbGl6ZSBpMmMgYnVzXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJZ290byB6cl9mcmVlX2lycTsKIAl9CiAKKwl6ci0+ZGVjb2RlciA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZ6ci0+aTJjX2FkYXB0ZXIsCisJCXpyLT5jYXJkLm1vZF9kZWNvZGVyLCB6ci0+Y2FyZC5pMmNfZGVjb2RlciwgenItPmNhcmQuYWRkcnNfZGVjb2Rlcik7CisKKwlpZiAoenItPmNhcmQubW9kX2VuY29kZXIpCisJCXpyLT5lbmNvZGVyID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJnpyLT5pMmNfYWRhcHRlciwKKwkJCXpyLT5jYXJkLm1vZF9lbmNvZGVyLCB6ci0+Y2FyZC5pMmNfZW5jb2RlciwKKwkJCXpyLT5jYXJkLmFkZHJzX2VuY29kZXIpOworCiAJZHByaW50aygyLAogCQlLRVJOX0lORk8gIiVzOiBJbml0aWFsaXppbmcgdmlkZW9jb2RlYyBidXMuLi5cbiIsCiAJCVpSX0RFVk5BTUUoenIpKTsKQEAgLTE0OTUsMTcgKzE0MDgsMTMgQEAKIAkJCWdvdG8genJfdW5yZWdfaTJjOwogCQl6ci0+Y29kZWMgPSB2aWRlb2NvZGVjX2F0dGFjaChtYXN0ZXJfY29kZWMpOwogCQlpZiAoIXpyLT5jb2RlYykgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIG5vIGNvZGVjIGZvdW5kXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiAlcyAtIG5vIGNvZGVjIGZvdW5kXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlnb3RvIHpyX2ZyZWVfY29kZWM7CiAJCX0KIAkJaWYgKHpyLT5jb2RlYy0+dHlwZSAhPSB6ci0+Y2FyZC52aWRlb19jb2RlYykgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIHdyb25nIGNvZGVjXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiAlcyAtIHdyb25nIGNvZGVjXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlnb3RvIHpyX2RldGFjaF9jb2RlYzsKIAkJfQogCX0KQEAgLTE1MTUsMTcgKzE0MjQsMTMgQEAKIAkJCWdvdG8genJfZGV0YWNoX2NvZGVjOwogCQl6ci0+dmZlID0gdmlkZW9jb2RlY19hdHRhY2gobWFzdGVyX3ZmZSk7CiAJCWlmICghenItPnZmZSkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIG5vIFZGRSBmb3VuZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogJXMgLSBubyBWRkUgZm91bmRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCWdvdG8genJfZnJlZV92ZmU7CiAJCX0KIAkJaWYgKHpyLT52ZmUtPnR5cGUgIT0genItPmNhcmQudmlkZW9fdmZlKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IGZpbmRfenIzNjA1NygpID0gd3JvbmcgVkZFXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiAlcyA9IHdyb25nIFZGRVxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQkJZ290byB6cl9kZXRhY2hfdmZlOwogCQl9CiAJfQpAQCAtMTUzMyw4ICsxNDM4LDcgQEAKIAkvKiB0YWtlIGNhcmUgb2YgTmF0b21hIGNoaXBzZXQgYW5kIGEgcmV2aXNpb24gMSB6cjM2MDU3ICovCiAJaWYgKChwY2lfcGNpX3Byb2JsZW1zICYgUENJUENJX05BVE9NQSkgJiYgenItPnJldmlzaW9uIDw9IDEpIHsKIAkJenItPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91cyA9IDE7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fSU5GTworCQlkcHJpbnRrKDEsIEtFUk5fSU5GTwogCQkJIiVzOiBaUjM2MDU3L05hdG9tYSBidWcsIG1heC4gYnVmZmVyIHNpemUgaXMgMTI4S1xuIiwKIAkJCVpSX0RFVk5BTUUoenIpKTsKIAl9CkBAIC0xNTQ0LDggKzE0NDgsNiBAQAogCiAJem9yYW5fcHJvY19pbml0KHpyKTsKIAotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB6cik7Ci0KIAlyZXR1cm4gMDsKIAogenJfZGV0YWNoX3ZmZToKQEAgLTE1NjMsNiArMTQ2NSw4IEBACiAJZnJlZV9pcnEoenItPnBjaV9kZXYtPmlycSwgenIpOwogenJfdW5tYXA6CiAJaW91bm1hcCh6ci0+enIzNjA1N19tZW0pOworenJfdW5yZWc6CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmenItPnY0bDJfZGV2KTsKIHpyX2ZyZWVfbWVtOgogCWtmcmVlKHpyKTsKIApAQCAtMTYxMyw5ICsxNTE3LDYgQEAKIAkJCVpPUkFOX05BTUUsIHZpZG1lbSk7CiAJfQogCi0JLyogcmFuZG9tIG5vbnNlbnNlICovCi0JZHByaW50ayg2LCBLRVJOX0RFQlVHICJKb3R0aSBpcyBlZW4gaGVsZCFcbiIpOwotCiAJLyogc29tZSBtYWluYm9hcmRzIG1pZ2h0IG5vdCBkbyBQQ0ktUENJIGRhdGEgdHJhbnNmZXIgd2VsbCAqLwogCWlmIChwY2lfcGNpX3Byb2JsZW1zICYgKFBDSVBDSV9GQUlMfFBDSUFHUF9GQUlMfFBDSVBDSV9BTElNQUdJSykpIHsKIAkJZHByaW50aygxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuaAppbmRleCA0NTA3YmRjLi40OTM2ZmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuaApAQCAtNDQsNyArNDQsOCBAQAogZXh0ZXJuIHN0cnVjdCB2aWRlb19kZXZpY2Ugem9yYW5fdGVtcGxhdGU7CiAKIGV4dGVybiBpbnQgem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHN0cnVjdCB6b3JhbiAqenIsCi0JCQkJICAgIHN0cnVjdCB6b3Jhbl9qcGdfc2V0dGluZ3MgKnNldHRpbmdzKTsKKwkJCQkgICAgc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyAqc2V0dGluZ3MsCisJCQkJICAgIGludCB0cnkpOwogZXh0ZXJuIHZvaWQgem9yYW5fb3Blbl9pbml0X3BhcmFtcyhzdHJ1Y3Qgem9yYW4gKnpyKTsKIGV4dGVybiB2b2lkIHpvcmFuX3ZkZXZfcmVsZWFzZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmMKaW5kZXggNWQ5NDhmZi4uZTAyMjNkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5jCkBAIC0zNiwxMyArMzYsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2VtLmg+CiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCkBAIC0zMTIsOSArMzExLDkgQEAKIAljYXNlIEJVWl9NT0RFX01PVElPTl9DT01QUkVTUzoKIAljYXNlIEJVWl9NT0RFX0lETEU6CiAJZGVmYXVsdDoKLQkJaWYgKHpyLT5ub3JtID09IFZJREVPX01PREVfTlRTQyB8fAorCQlpZiAoKHpyLT5ub3JtICYgVjRMMl9TVERfTlRTQykgfHwKIAkJICAgICh6ci0+Y2FyZC50eXBlID09IExNTDMzUjEwICYmCi0JCSAgICAgenItPm5vcm0gPT0gVklERU9fTU9ERV9QQUwpKQorCQkgICAgICh6ci0+bm9ybSAmIFY0TDJfU1REX1BBTCkpKQogCQkJYnRhbmQoflpSMzYwNTdfVkZFU1BGUl9FeHRGbCwgWlIzNjA1N19WRkVTUEZSKTsKIAkJZWxzZQogCQkJYnRvcihaUjM2MDU3X1ZGRVNQRlJfRXh0RmwsIFpSMzYwNTdfVkZFU1BGUik7CkBAIC0zNTUsMTQgKzM1NCw2IEBACiAJZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiBzZXRfdmZlKCkgLSB3aWR0aCA9ICVkLCBoZWlnaHQgPSAlZFxuIiwKIAkJWlJfREVWTkFNRSh6ciksIHZpZGVvX3dpZHRoLCB2aWRlb19oZWlnaHQpOwogCi0JaWYgKHpyLT5ub3JtICE9IFZJREVPX01PREVfUEFMICYmCi0JICAgIHpyLT5ub3JtICE9IFZJREVPX01PREVfTlRTQyAmJgotCSAgICB6ci0+bm9ybSAhPSBWSURFT19NT0RFX1NFQ0FNKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSICIlczogc2V0X3ZmZSgpIC0gbm9ybSA9ICVkIG5vdCB2YWxpZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB6ci0+bm9ybSk7Ci0JCXJldHVybjsKLQl9CiAJaWYgKHZpZGVvX3dpZHRoIDwgQlVaX01JTl9XSURUSCB8fAogCSAgICB2aWRlb19oZWlnaHQgPCBCVVpfTUlOX0hFSUdIVCB8fAogCSAgICB2aWRlb193aWR0aCA+IFdhIHx8IHZpZGVvX2hlaWdodCA+IEhhKSB7CkBAIC00MjYsNyArNDE3LDcgQEAKIAkgKiB3ZSBnZXQgdGhlIGNvcnJlY3QgY29sb3JzIHdoZW4gdW5jb21wcmVzc2luZyB0byB0aGUgc2NyZWVuICAqLwogCS8vcmVnIHw9IFpSMzYwNTdfVkZFU1BGUl9WQ0xLUG9sOyAvKiovCiAJLyogUko6IERvbid0IGtub3cgaWYgdGhhdCBpcyBuZWVkZWQgZm9yIE5UU0MgYWxzbyAqLwotCWlmICh6ci0+bm9ybSAhPSBWSURFT19NT0RFX05UU0MpCisJaWYgKCEoenItPm5vcm0gJiBWNEwyX1NURF9OVFNDKSkKIAkJcmVnIHw9IFpSMzYwNTdfVkZFU1BGUl9FeHRGbDsJLy8gTkVFREVEISEhISEhISBXb2xmZ2FuZwogCXJlZyB8PSBaUjM2MDU3X1ZGRVNQRlJfVG9wRmllbGQ7CiAJaWYgKEhvckRjbSA+PSA0OCkgewpAQCAtNDk3LDExICs0ODgsMTEgQEAKIAkJICogQWxsIGVycm9yIG1lc3NhZ2VzIGFyZSBpbnRlcm5hbCBkcml2ZXIgY2hlY2tpbmcgb25seSEgKi8KIAogCQkvKiB2aWRlbyBkaXNwbGF5IHRvcCBhbmQgYm90dG9tIHJlZ2lzdGVycyAqLwotCQlyZWcgPSAobG9uZykgenItPmJ1ZmZlci5iYXNlICsKKwkJcmVnID0gKGxvbmcpIHpyLT52YnVmX2Jhc2UgKwogCQkgICAgenItPm92ZXJsYXlfc2V0dGluZ3MueCAqCiAJCSAgICAoKHpyLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdC0+ZGVwdGggKyA3KSAvIDgpICsKIAkJICAgIHpyLT5vdmVybGF5X3NldHRpbmdzLnkgKgotCQkgICAgenItPmJ1ZmZlci5ieXRlc3BlcmxpbmU7CisJCSAgICB6ci0+dmJ1Zl9ieXRlc3BlcmxpbmU7CiAJCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZEVFIpOwogCQlpZiAocmVnICYgMykKIAkJCWRwcmludGsoMSwKQEAgLTUwOSwxNSArNTAwLDE1IEBACiAJCQkJIiVzOiB6cjM2MDU3X292ZXJsYXkoKSAtIHZpZGVvX2FkZHJlc3Mgbm90IGFsaWduZWRcbiIsCiAJCQkJWlJfREVWTkFNRSh6cikpOwogCQlpZiAoenItPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQgLyAyKQotCQkJcmVnICs9IHpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lOworCQkJcmVnICs9IHpyLT52YnVmX2J5dGVzcGVybGluZTsKIAkJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkRCUik7CiAKIAkJLyogdmlkZW8gc3RyaWRlLCBzdGF0dXMsIGFuZCBmcmFtZSBncmFiIHJlZ2lzdGVyICovCi0JCXJlZyA9IHpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lIC0KKwkJcmVnID0genItPnZidWZfYnl0ZXNwZXJsaW5lIC0KIAkJICAgIHpyLT5vdmVybGF5X3NldHRpbmdzLndpZHRoICoKIAkJICAgICgoenItPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0LT5kZXB0aCArIDcpIC8gOCk7CiAJCWlmICh6ci0+b3ZlcmxheV9zZXR0aW5ncy5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCAvIDIpCi0JCQlyZWcgKz0genItPmJ1ZmZlci5ieXRlc3BlcmxpbmU7CisJCQlyZWcgKz0genItPnZidWZfYnl0ZXNwZXJsaW5lOwogCQlpZiAocmVnICYgMykKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgpAQCAtNTQ0LDEyICs1MzUsOCBAQAogICogIGFuZCB0aGUgbWF4aW11bSB3aW5kb3cgc2l6ZSBpcyBCVVpfTUFYX1dJRFRIICogQlVaX01BWF9IRUlHSFQgcGl4ZWxzLgogICovCiAKLXZvaWQKLXdyaXRlX292ZXJsYXlfbWFzayAoc3RydWN0IGZpbGUgICAgICAgKmZpbGUsCi0JCSAgICBzdHJ1Y3QgdmlkZW9fY2xpcCAqdnAsCi0JCSAgICBpbnQgICAgICAgICAgICAgICAgY291bnQpCit2b2lkIHdyaXRlX292ZXJsYXlfbWFzayhzdHJ1Y3Qgem9yYW5fZmggKmZoLCBzdHJ1Y3QgdjRsMl9jbGlwICp2cCwgaW50IGNvdW50KQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAl1bnNpZ25lZCBtYXNrX2xpbmVfc2l6ZSA9IChCVVpfTUFYX1dJRFRIICsgMzEpIC8gMzI7CiAJdTMyICptYXNrOwpAQCAtNTYzLDEwICs1NTAsMTAgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAJCS8qIHBpY2sgdXAgbG9jYWwgY29weSBvZiBjbGlwICovCi0JCXggPSB2cFtpXS54OwotCQl5ID0gdnBbaV0ueTsKLQkJd2lkdGggPSB2cFtpXS53aWR0aDsKLQkJaGVpZ2h0ID0gdnBbaV0uaGVpZ2h0OworCQl4ID0gdnBbaV0uYy5sZWZ0OworCQl5ID0gdnBbaV0uYy50b3A7CisJCXdpZHRoID0gdnBbaV0uYy53aWR0aDsKKwkJaGVpZ2h0ID0gdnBbaV0uYy5oZWlnaHQ7CiAKIAkJLyogdHJpbSBjbGlwcyB0aGF0IGV4dGVuZCBiZXlvbmQgdGhlIHdpbmRvdyAqLwogCQlpZiAoeCA8IDApIHsKQEAgLTk4MSwxMSArOTY4LDEwIEBACiB6cjM2MDU3X2VuYWJsZV9qcGcgKHN0cnVjdCB6b3JhbiAgICAgICAgICAqenIsCiAJCSAgICBlbnVtIHpvcmFuX2NvZGVjX21vZGUgIG1vZGUpCiB7Ci0Jc3RhdGljIGludCB6ZXJvOwotCXN0YXRpYyBpbnQgb25lID0gMTsKIAlzdHJ1Y3QgdmZlX3NldHRpbmdzIGNhcDsKIAlpbnQgZmllbGRfc2l6ZSA9CiAJICAgIHpyLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSAvIHpyLT5qcGdfc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmY7CisJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZSA9IHsgMCwgMCB9OwogCiAJenItPmNvZGVjX21vZGUgPSBtb2RlOwogCkBAIC0xMDA3LDggKzk5Myw5IEBACiAJCSAqIHRoZSB2aWRlbyBidXMgZGlyZWN0aW9uIHNldCB0byBpbnB1dC4KIAkJICovCiAJCXNldF92aWRlb2J1c19kaXIoenIsIDApOwotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfRU5BQkxFX09VVFBVVCwgJm9uZSk7Ci0JCWVuY29kZXJfY29tbWFuZCh6ciwgRU5DT0RFUl9TRVRfSU5QVVQsICZ6ZXJvKTsKKwkJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19zdHJlYW0sIDEpOworCQlyb3V0ZS5pbnB1dCA9IDA7CisJCWVuY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAogCQkvKiBUYWtlIHRoZSBKUEVHIGNvZGVjIGFuZCB0aGUgVkZFIG91dCBvZiBzbGVlcCAqLwogCQlqcGVnX2NvZGVjX3NsZWVwKHpyLCAwKTsKQEAgLTEwNTQsOSArMTA0MSwxMCBAQAogCQkvKiBJbiBtb3Rpb24gZGVjb21wcmVzc2lvbiBtb2RlLCB0aGUgZGVjb2RlciBvdXRwdXQgbXVzdCBiZSBkaXNhYmxlZCwgYW5kCiAJCSAqIHRoZSB2aWRlbyBidXMgZGlyZWN0aW9uIHNldCB0byBvdXRwdXQuCiAJCSAqLwotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfRU5BQkxFX09VVFBVVCwgJnplcm8pOworCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBzX3N0cmVhbSwgMCk7CiAJCXNldF92aWRlb2J1c19kaXIoenIsIDEpOwotCQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX0lOUFVULCAmb25lKTsKKwkJcm91dGUuaW5wdXQgPSAxOworCQllbmNvZGVyX2NhbGwoenIsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAKIAkJLyogVGFrZSB0aGUgSlBFRyBjb2RlYyBhbmQgdGhlIFZGRSBvdXQgb2Ygc2xlZXAgKi8KIAkJanBlZ19jb2RlY19zbGVlcCh6ciwgMCk7CkBAIC0xMTAwLDggKzEwODgsOSBAQAogCQlqcGVnX2NvZGVjX3NsZWVwKHpyLCAxKTsKIAkJenIzNjA1N19hZGp1c3RfdmZlKHpyLCBtb2RlKTsKIAotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfRU5BQkxFX09VVFBVVCwgJm9uZSk7Ci0JCWVuY29kZXJfY29tbWFuZCh6ciwgRU5DT0RFUl9TRVRfSU5QVVQsICZ6ZXJvKTsKKwkJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19zdHJlYW0sIDEpOworCQlyb3V0ZS5pbnB1dCA9IDA7CisJCWVuY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAogCQlkcHJpbnRrKDIsIEtFUk5fSU5GTyAiJXM6IGVuYWJsZV9qcGcoSURMRSlcbiIsIFpSX0RFVk5BTUUoenIpKTsKIAkJYnJlYWs7CkBAIC0xMTMyLDcgKzExMjEsNyBAQAogCQkJaWYgKCEoenItPnN0YXRfY29tW2ldICYgY3B1X3RvX2xlMzIoMSkpKQogCQkJCWJyZWFrOwogCQkJenItPnN0YXRfY29tW2ldID0KLQkJCSAgICBjcHVfdG9fbGUzMih6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5mcmFnX3RhYl9idXMpOworCQkJICAgIGNwdV90b19sZTMyKHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLmpwZy5mcmFnX3RhYl9idXMpOwogCQl9IGVsc2UgewogCQkJLyogZmlsbCAyIHN0YXRfY29tIGVudHJpZXMgKi8KIAkJCWkgPSAoKHpyLT5qcGdfZG1hX2hlYWQgLQpAQCAtMTE0MCw5ICsxMTI5LDkgQEAKIAkJCWlmICghKHpyLT5zdGF0X2NvbVtpXSAmIGNwdV90b19sZTMyKDEpKSkKIAkJCQlicmVhazsKIAkJCXpyLT5zdGF0X2NvbVtpXSA9Ci0JCQkgICAgY3B1X3RvX2xlMzIoenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uZnJhZ190YWJfYnVzKTsKKwkJCSAgICBjcHVfdG9fbGUzMih6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5qcGcuZnJhZ190YWJfYnVzKTsKIAkJCXpyLT5zdGF0X2NvbVtpICsgMV0gPQotCQkJICAgIGNwdV90b19sZTMyKHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLmZyYWdfdGFiX2J1cyk7CisJCQkgICAgY3B1X3RvX2xlMzIoenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uanBnLmZyYWdfdGFiX2J1cyk7CiAJCX0KIAkJenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgPSBCVVpfU1RBVEVfRE1BOwogCQl6ci0+anBnX2RtYV9oZWFkKys7CkBAIC0xMTYyLDcgKzExNTEsNyBAQAogCXUzMiBzdGF0X2NvbTsKIAl1bnNpZ25lZCBpbnQgc2VxOwogCXVuc2lnbmVkIGludCBkaWY7Ci0Jc3RydWN0IHpvcmFuX2pwZ19idWZmZXIgKmJ1ZmZlcjsKKwlzdHJ1Y3Qgem9yYW5fYnVmZmVyICpidWZmZXI7CiAJaW50IGZyYW1lOwogCiAJLyogSW4gbW90aW9uIGRlY29tcHJlc3Mgd2UgZG9uJ3QgaGF2ZSBhIGhhcmR3YXJlIGZyYW1lIGNvdW50ZXIsCkBAIC0xMjA4LDIyICsxMTk3LDUyIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCB6b3Jhbl9yZXN0YXJ0KHN0cnVjdCB6b3JhbiAqenIpCit7CisJLyogTm93IHRoZSBzdGF0X2NvbW0gYnVmZmVyIGlzIHJlYWR5IGZvciByZXN0YXJ0ICovCisJaW50IHN0YXR1cyA9IDAsIG1vZGU7CisKKwlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSB7CisJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIGdfaW5wdXRfc3RhdHVzLCAmc3RhdHVzKTsKKwkJbW9kZSA9IENPREVDX0RPX0NPTVBSRVNTSU9OOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IFY0TDJfSU5fU1RfTk9fU0lHTkFMOworCQltb2RlID0gQ09ERUNfRE9fRVhQQU5TSU9OOworCX0KKwlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MgfHwKKwkgICAgIShzdGF0dXMgJiBWNEwyX0lOX1NUX05PX1NJR05BTCkpIHsKKwkJLyoqKioqKioqKiogUkVTVEFSVCBjb2RlICoqKioqKioqKioqKiovCisJCWpwZWdfY29kZWNfcmVzZXQoenIpOworCQl6ci0+Y29kZWMtPnNldF9tb2RlKHpyLT5jb2RlYywgbW9kZSk7CisJCXpyMzYwNTdfc2V0X2pwZyh6ciwgenItPmNvZGVjX21vZGUpOworCQlqcGVnX3N0YXJ0KHpyKTsKKworCQlpZiAoenItPm51bV9lcnJvcnMgPD0gOCkKKwkJCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogUmVzdGFydFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisKKwkJenItPkpQRUdfbWlzc2VkID0gMDsKKwkJenItPkpQRUdfZXJyb3IgPSAyOworCQkvKioqKioqKioqKiBFbmQgUkVTVEFSVCBjb2RlICoqKioqKioqKioqLworCX0KK30KKwogc3RhdGljIHZvaWQKIGVycm9yX2hhbmRsZXIgKHN0cnVjdCB6b3JhbiAqenIsCiAJICAgICAgIHUzMiAgICAgICAgICAgYXN0YXQsCiAJICAgICAgIHUzMiAgICAgICAgICAgc3RhdCkKIHsKKwlpbnQgaSwgajsKKwogCS8qIFRoaXMgaXMgSlBFRyBlcnJvciBoYW5kbGluZyBwYXJ0ICovCi0JaWYgKCh6ci0+Y29kZWNfbW9kZSAhPSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpICYmCi0JICAgICh6ci0+Y29kZWNfbW9kZSAhPSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUykpIHsKLQkJLy9kcHJpbnRrKDEsIEtFUk5fRVJSICIlczogSW50ZXJuYWwgZXJyb3I6IGVycm9yIGhhbmRsaW5nIHJlcXVlc3QgaW4gbW9kZSAlZFxuIiwgWlJfREVWTkFNRSh6ciksIHpyLT5jb2RlY19tb2RlKTsKKwlpZiAoenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTICYmCisJICAgIHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKSB7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoKHN0YXQgJiAxKSA9PSAwICYmCiAJICAgIHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUyAmJgotCSAgICB6ci0+anBnX2RtYV90YWlsIC0genItPmpwZ19xdWVfdGFpbCA+PQotCSAgICAgenItPmpwZ19idWZmZXJzLm51bV9idWZmZXJzKSB7CisJICAgIHpyLT5qcGdfZG1hX3RhaWwgLSB6ci0+anBnX3F1ZV90YWlsID49IHpyLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycykgewogCQkvKiBObyBmcmVlIGJ1ZmZlcnMuLi4gKi8KIAkJem9yYW5fcmVhcF9zdGF0X2NvbSh6cik7CiAJCXpvcmFuX2ZlZWRfc3RhdF9jb20oenIpOwpAQCAtMTIzMiwxNDIgKzEyNTEsOTUgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICh6ci0+SlBFR19lcnJvciAhPSAxKSB7Ci0JCS8qCi0JCSAqIEZpcnN0IGVudHJ5OiBlcnJvciBqdXN0IGhhcHBlbmVkIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uCi0JCSAqCi0JCSAqIEluIEJVWl9NT0RFX01PVElPTl9DT01QUkVTUzoKLQkJICoKLQkJICogUG9zc2libGUgZ2xpdGNoIGluIFRWIHNpZ25hbC4gSW4gdGhpcyBjYXNlIHdlIHNob3VsZAotCQkgKiBzdG9wIHRoZSBjb2RlYyBhbmQgd2FpdCBmb3IgZ29vZCBxdWFsaXR5IHNpZ25hbCBiZWZvcmUKLQkJICogcmVzdGFydGluZyBpdCB0byBhdm9pZCBmdXJ0aGVyIHByb2JsZW1zCi0JCSAqCi0JCSAqIEluIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTOgotCQkgKgotCQkgKiBCYWQgSlBFRyBmcmFtZTogd2UgaGF2ZSB0byBtYXJrIGl0IGFzIHByb2Nlc3NlZCAoY29kZWMgY3Jhc2hlZAotCQkgKiBhbmQgd2FzIG5vdCBhYmxlIHRvIGRvIGl0IGl0c2VsZiksIGFuZCB0byByZW1vdmUgaXQgZnJvbSBxdWV1ZS4KLQkJICovCi0JCWJ0YW5kKH5aUjM2MDU3X0pNQ19Hb19lbiwgWlIzNjA1N19KTUMpOwotCQl1ZGVsYXkoMSk7Ci0JCXN0YXQgPSBzdGF0IHwgKHBvc3Rfb2ZmaWNlX3JlYWQoenIsIDcsIDApICYgMykgPDwgODsKLQkJYnR3cml0ZSgwLCBaUjM2MDU3X0pQQyk7Ci0JCWJ0b3IoWlIzNjA1N19NQ1RDUl9DRmx1c2gsIFpSMzYwNTdfTUNUQ1IpOwotCQlqcGVnX2NvZGVjX3Jlc2V0KHpyKTsKLQkJanBlZ19jb2RlY19zbGVlcCh6ciwgMSk7Ci0JCXpyLT5KUEVHX2Vycm9yID0gMTsKLQkJenItPm51bV9lcnJvcnMrKzsKLQotCQkvKiBSZXBvcnQgZXJyb3IgKi8KLQkJaWYgKHpyMzYwNjdfZGVidWcgPiAxICYmIHpyLT5udW1fZXJyb3JzIDw9IDgpIHsKLQkJCWxvbmcgZnJhbWU7Ci0JCQlmcmFtZSA9Ci0JCQkgICAgenItPmpwZ19wZW5kW3pyLT5qcGdfZG1hX3RhaWwgJiBCVVpfTUFTS19GUkFNRV07Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiJXM6IEpQRUcgZXJyb3Igc3RhdD0weCUwOHgoMHglMDh4KSBxdWV1ZV9zdGF0ZT0lbGQvJWxkLyVsZC8lbGQgc2VxPSVsZCBmcmFtZT0lbGQuIENvZGVjIHN0b3BwZWQuICIsCi0JCQkgICAgICAgWlJfREVWTkFNRSh6ciksIHN0YXQsIHpyLT5sYXN0X2lzciwKLQkJCSAgICAgICB6ci0+anBnX3F1ZV90YWlsLCB6ci0+anBnX2RtYV90YWlsLAotCQkJICAgICAgIHpyLT5qcGdfZG1hX2hlYWQsIHpyLT5qcGdfcXVlX2hlYWQsCi0JCQkgICAgICAgenItPmpwZ19zZXFfbnVtLCBmcmFtZSk7Ci0JCQlwcmludGsoInN0YXRfY29tIGZyYW1lczoiKTsKLQkJCXsKLQkJCQlpbnQgaSwgajsKLQkJCQlmb3IgKGogPSAwOyBqIDwgQlVaX05VTV9TVEFUX0NPTTsgaisrKSB7Ci0JCQkJCWZvciAoaSA9IDA7Ci0JCQkJCSAgICAgaSA8IHpyLT5qcGdfYnVmZmVycy5udW1fYnVmZmVyczsKLQkJCQkJICAgICBpKyspIHsKLQkJCQkJCWlmIChsZTMyX3RvX2NwdSh6ci0+c3RhdF9jb21bal0pID09Ci0JCQkJCQkgICAgenItPmpwZ19idWZmZXJzLgotCQkJCQkJICAgIGJ1ZmZlcltpXS4KLQkJCQkJCSAgICBmcmFnX3RhYl9idXMpIHsKLQkJCQkJCQlwcmludGsoIiUgZC0+JWQiLAotCQkJCQkJCSAgICAgICBqLCBpKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCQlwcmludGsoIlxuIik7Ci0JCQl9Ci0JCX0KLQkJLyogRmluZCBhbiBlbnRyeSBpbiBzdGF0X2NvbSBhbmQgcm90YXRlIGNvbnRlbnRzICovCi0JCXsKLQkJCWludCBpOwotCi0JCQlpZiAoenItPmpwZ19zZXR0aW5ncy5UbXBEY20gPT0gMSkKLQkJCQlpID0gKHpyLT5qcGdfZG1hX3RhaWwgLQotCQkJCSAgICAgenItPmpwZ19lcnJfc2hpZnQpICYgQlVaX01BU0tfU1RBVF9DT007Ci0JCQllbHNlCi0JCQkJaSA9ICgoenItPmpwZ19kbWFfdGFpbCAtCi0JCQkJICAgICAgenItPmpwZ19lcnJfc2hpZnQpICYgMSkgKiAyOwotCQkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKSB7Ci0JCQkJLyogTWltaWMgenIzNjA2NyBvcGVyYXRpb24gKi8KLQkJCQl6ci0+c3RhdF9jb21baV0gfD0gY3B1X3RvX2xlMzIoMSk7Ci0JCQkJaWYgKHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtICE9IDEpCi0JCQkJCXpyLT5zdGF0X2NvbVtpICsgMV0gfD0gY3B1X3RvX2xlMzIoMSk7Ci0JCQkJLyogUmVmaWxsICovCi0JCQkJem9yYW5fcmVhcF9zdGF0X2NvbSh6cik7Ci0JCQkJem9yYW5fZmVlZF9zdGF0X2NvbSh6cik7Ci0JCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ6ci0+anBnX2NhcHEpOwotCQkJCS8qIEZpbmQgYW4gZW50cnkgaW4gc3RhdF9jb20gYWdhaW4gYWZ0ZXIgcmVmaWxsICovCi0JCQkJaWYgKHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtID09IDEpCi0JCQkJCWkgPSAoenItPmpwZ19kbWFfdGFpbCAtCi0JCQkJCSAgICAgenItPmpwZ19lcnJfc2hpZnQpICYKLQkJCQkJICAgIEJVWl9NQVNLX1NUQVRfQ09NOwotCQkJCWVsc2UKLQkJCQkJaSA9ICgoenItPmpwZ19kbWFfdGFpbCAtCi0JCQkJCSAgICAgIHpyLT5qcGdfZXJyX3NoaWZ0KSAmIDEpICogMjsKLQkJCX0KLQkJCWlmIChpKSB7Ci0JCQkJLyogUm90YXRlIHN0YXRfY29tbSBlbnRyaWVzIHRvIG1ha2UgY3VycmVudCBlbnRyeSBmaXJzdCAqLwotCQkJCWludCBqOwotCQkJCV9fbGUzMiBidXNfYWRkcltCVVpfTlVNX1NUQVRfQ09NXTsKLQotCQkJCS8qIEhlcmUgd2UgYXJlIGNvcHlpbmcgdGhlIHN0YXRfY29tIGFycmF5LCB3aGljaAotCQkJCSAqIGlzIGFscmVhZHkgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQsIHNvCi0JCQkJICogbm8gZW5kaWFuIGNvbnZlcnNpb25zIGhlcmUKLQkJCQkgKi8KLQkJCQltZW1jcHkoYnVzX2FkZHIsIHpyLT5zdGF0X2NvbSwKLQkJCQkgICAgICAgc2l6ZW9mKGJ1c19hZGRyKSk7Ci0JCQkJZm9yIChqID0gMDsgaiA8IEJVWl9OVU1fU1RBVF9DT007IGorKykgewotCQkJCQl6ci0+c3RhdF9jb21bal0gPQotCQkJCQkgICAgYnVzX2FkZHJbKGkgKyBqKSAmCi0JCQkJCQkgICAgIEJVWl9NQVNLX1NUQVRfQ09NXTsKLQotCQkJCX0KLQkJCQl6ci0+anBnX2Vycl9zaGlmdCArPSBpOwotCQkJCXpyLT5qcGdfZXJyX3NoaWZ0ICY9IEJVWl9NQVNLX1NUQVRfQ09NOwotCQkJfQotCQkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykKLQkJCQl6ci0+anBnX2Vycl9zZXEgPSB6ci0+anBnX3NlcV9udW07CS8qICsgMTsgKi8KLQkJfQorCWlmICh6ci0+SlBFR19lcnJvciA9PSAxKSB7CisJCXpvcmFuX3Jlc3RhcnQoenIpOworCQlyZXR1cm47CiAJfQogCi0JLyogTm93IHRoZSBzdGF0X2NvbW0gYnVmZmVyIGlzIHJlYWR5IGZvciByZXN0YXJ0ICovCi0JZG8gewotCQlpbnQgc3RhdHVzLCBtb2RlOworCS8qCisJICogRmlyc3QgZW50cnk6IGVycm9yIGp1c3QgaGFwcGVuZWQgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24KKwkgKgorCSAqIEluIEJVWl9NT0RFX01PVElPTl9DT01QUkVTUzoKKwkgKgorCSAqIFBvc3NpYmxlIGdsaXRjaCBpbiBUViBzaWduYWwuIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQKKwkgKiBzdG9wIHRoZSBjb2RlYyBhbmQgd2FpdCBmb3IgZ29vZCBxdWFsaXR5IHNpZ25hbCBiZWZvcmUKKwkgKiByZXN0YXJ0aW5nIGl0IHRvIGF2b2lkIGZ1cnRoZXIgcHJvYmxlbXMKKwkgKgorCSAqIEluIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTOgorCSAqCisJICogQmFkIEpQRUcgZnJhbWU6IHdlIGhhdmUgdG8gbWFyayBpdCBhcyBwcm9jZXNzZWQgKGNvZGVjIGNyYXNoZWQKKwkgKiBhbmQgd2FzIG5vdCBhYmxlIHRvIGRvIGl0IGl0c2VsZiksIGFuZCB0byByZW1vdmUgaXQgZnJvbSBxdWV1ZS4KKwkgKi8KKwlidGFuZCh+WlIzNjA1N19KTUNfR29fZW4sIFpSMzYwNTdfSk1DKTsKKwl1ZGVsYXkoMSk7CisJc3RhdCA9IHN0YXQgfCAocG9zdF9vZmZpY2VfcmVhZCh6ciwgNywgMCkgJiAzKSA8PCA4OworCWJ0d3JpdGUoMCwgWlIzNjA1N19KUEMpOworCWJ0b3IoWlIzNjA1N19NQ1RDUl9DRmx1c2gsIFpSMzYwNTdfTUNUQ1IpOworCWpwZWdfY29kZWNfcmVzZXQoenIpOworCWpwZWdfY29kZWNfc2xlZXAoenIsIDEpOworCXpyLT5KUEVHX2Vycm9yID0gMTsKKwl6ci0+bnVtX2Vycm9ycysrOwogCi0JCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpIHsKLQkJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9HRVRfU1RBVFVTLCAmc3RhdHVzKTsKLQkJCW1vZGUgPSBDT0RFQ19ET19DT01QUkVTU0lPTjsKLQkJfSBlbHNlIHsKLQkJCXN0YXR1cyA9IDA7Ci0JCQltb2RlID0gQ09ERUNfRE9fRVhQQU5TSU9OOworCS8qIFJlcG9ydCBlcnJvciAqLworCWlmICh6cjM2MDY3X2RlYnVnID4gMSAmJiB6ci0+bnVtX2Vycm9ycyA8PSA4KSB7CisJCWxvbmcgZnJhbWU7CisKKwkJZnJhbWUgPSB6ci0+anBnX3BlbmRbenItPmpwZ19kbWFfdGFpbCAmIEJVWl9NQVNLX0ZSQU1FXTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiJXM6IEpQRUcgZXJyb3Igc3RhdD0weCUwOHgoMHglMDh4KSBxdWV1ZV9zdGF0ZT0lbGQvJWxkLyVsZC8lbGQgc2VxPSVsZCBmcmFtZT0lbGQuIENvZGVjIHN0b3BwZWQuICIsCisJCSAgICAgICBaUl9ERVZOQU1FKHpyKSwgc3RhdCwgenItPmxhc3RfaXNyLAorCQkgICAgICAgenItPmpwZ19xdWVfdGFpbCwgenItPmpwZ19kbWFfdGFpbCwKKwkJICAgICAgIHpyLT5qcGdfZG1hX2hlYWQsIHpyLT5qcGdfcXVlX2hlYWQsCisJCSAgICAgICB6ci0+anBnX3NlcV9udW0sIGZyYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAic3RhdF9jb20gZnJhbWVzOiIpOworCQlmb3IgKGogPSAwOyBqIDwgQlVaX05VTV9TVEFUX0NPTTsgaisrKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgenItPmpwZ19idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKKwkJCQlpZiAobGUzMl90b19jcHUoenItPnN0YXRfY29tW2pdKSA9PSB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmpwZy5mcmFnX3RhYl9idXMpCisJCQkJCXByaW50ayhLRVJOX0NPTlQgIiUgZC0+JWQiLCBqLCBpKTsKKwkJCX0KIAkJfQotCQlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MgfHwKLQkJICAgIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19HT09EKSkgewotCQkJLyoqKioqKioqKiogUkVTVEFSVCBjb2RlICoqKioqKioqKioqKiovCi0JCQlqcGVnX2NvZGVjX3Jlc2V0KHpyKTsKLQkJCXpyLT5jb2RlYy0+c2V0X21vZGUoenItPmNvZGVjLCBtb2RlKTsKLQkJCXpyMzYwNTdfc2V0X2pwZyh6ciwgenItPmNvZGVjX21vZGUpOwotCQkJanBlZ19zdGFydCh6cik7CisJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisJfQorCS8qIEZpbmQgYW4gZW50cnkgaW4gc3RhdF9jb20gYW5kIHJvdGF0ZSBjb250ZW50cyAqLworCWlmICh6ci0+anBnX3NldHRpbmdzLlRtcERjbSA9PSAxKQorCQlpID0gKHpyLT5qcGdfZG1hX3RhaWwgLSB6ci0+anBnX2Vycl9zaGlmdCkgJiBCVVpfTUFTS19TVEFUX0NPTTsKKwllbHNlCisJCWkgPSAoKHpyLT5qcGdfZG1hX3RhaWwgLSB6ci0+anBnX2Vycl9zaGlmdCkgJiAxKSAqIDI7CisJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKSB7CisJCS8qIE1pbWljIHpyMzYwNjcgb3BlcmF0aW9uICovCisJCXpyLT5zdGF0X2NvbVtpXSB8PSBjcHVfdG9fbGUzMigxKTsKKwkJaWYgKHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtICE9IDEpCisJCQl6ci0+c3RhdF9jb21baSArIDFdIHw9IGNwdV90b19sZTMyKDEpOworCQkvKiBSZWZpbGwgKi8KKwkJem9yYW5fcmVhcF9zdGF0X2NvbSh6cik7CisJCXpvcmFuX2ZlZWRfc3RhdF9jb20oenIpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnpyLT5qcGdfY2FwcSk7CisJCS8qIEZpbmQgYW4gZW50cnkgaW4gc3RhdF9jb20gYWdhaW4gYWZ0ZXIgcmVmaWxsICovCisJCWlmICh6ci0+anBnX3NldHRpbmdzLlRtcERjbSA9PSAxKQorCQkJaSA9ICh6ci0+anBnX2RtYV90YWlsIC0genItPmpwZ19lcnJfc2hpZnQpICYgQlVaX01BU0tfU1RBVF9DT007CisJCWVsc2UKKwkJCWkgPSAoKHpyLT5qcGdfZG1hX3RhaWwgLSB6ci0+anBnX2Vycl9zaGlmdCkgJiAxKSAqIDI7CisJfQorCWlmIChpKSB7CisJCS8qIFJvdGF0ZSBzdGF0X2NvbW0gZW50cmllcyB0byBtYWtlIGN1cnJlbnQgZW50cnkgZmlyc3QgKi8KKwkJaW50IGo7CisJCV9fbGUzMiBidXNfYWRkcltCVVpfTlVNX1NUQVRfQ09NXTsKIAotCQkJaWYgKHpyLT5udW1fZXJyb3JzIDw9IDgpCi0JCQkJZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiBSZXN0YXJ0XG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCS8qIEhlcmUgd2UgYXJlIGNvcHlpbmcgdGhlIHN0YXRfY29tIGFycmF5LCB3aGljaAorCQkgKiBpcyBhbHJlYWR5IGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0LCBzbworCQkgKiBubyBlbmRpYW4gY29udmVyc2lvbnMgaGVyZQorCQkgKi8KKwkJbWVtY3B5KGJ1c19hZGRyLCB6ci0+c3RhdF9jb20sIHNpemVvZihidXNfYWRkcikpOwogCi0JCQl6ci0+SlBFR19taXNzZWQgPSAwOwotCQkJenItPkpQRUdfZXJyb3IgPSAyOwotCQkJLyoqKioqKioqKiogRW5kIFJFU1RBUlQgY29kZSAqKioqKioqKioqKi8KLQkJfQotCX0gd2hpbGUgKDApOworCQlmb3IgKGogPSAwOyBqIDwgQlVaX05VTV9TVEFUX0NPTTsgaisrKQorCQkJenItPnN0YXRfY29tW2pdID0gYnVzX2FkZHJbKGkgKyBqKSAmIEJVWl9NQVNLX1NUQVRfQ09NXTsKKworCQl6ci0+anBnX2Vycl9zaGlmdCArPSBpOworCQl6ci0+anBnX2Vycl9zaGlmdCAmPSBCVVpfTUFTS19TVEFUX0NPTTsKKwl9CisJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykKKwkJenItPmpwZ19lcnJfc2VxID0genItPmpwZ19zZXFfbnVtOwkvKiArIDE7ICovCisJem9yYW5fcmVzdGFydCh6cik7CiB9CiAKIGlycXJldHVybl90CkBAIC0xNDI1LDEwICsxMzk3LDggQEAKIAkJCSAqIFdlIHNpbXBseSBpZ25vcmUgdGhlbSAqLwogCiAJCQlpZiAoenItPnY0bF9tZW1ncmFiX2FjdGl2ZSkgewotCiAJCQkJLyogQSBsb3QgbW9yZSBjaGVja3Mgc2hvdWxkIGJlIGhlcmUgLi4uICovCi0JCQkJaWYgKChidHJlYWQoWlIzNjA1N19WU1NGR1IpICYKLQkJCQkgICAgIFpSMzYwNTdfVlNTRkdSX1NuYXBTaG90KSA9PSAwKQorCQkJCWlmICgoYnRyZWFkKFpSMzYwNTdfVlNTRkdSKSAmIFpSMzYwNTdfVlNTRkdSX1NuYXBTaG90KSA9PSAwKQogCQkJCQlkcHJpbnRrKDEsCiAJCQkJCQlLRVJOX1dBUk5JTkcKIAkJCQkJCSIlczogQnV6SVJRIHdpdGggU25hcFNob3Qgb2ZmID8/P1xuIiwKQEAgLTE0MzYsMTAgKzE0MDYsNyBAQAogCiAJCQkJaWYgKHpyLT52NGxfZ3JhYl9mcmFtZSAhPSBOT19HUkFCX0FDVElWRSkgewogCQkJCQkvKiBUaGVyZSBpcyBhIGdyYWIgb24gYSBmcmFtZSBnb2luZyBvbiwgY2hlY2sgaWYgaXQgaGFzIGZpbmlzaGVkICovCi0KLQkJCQkJaWYgKChidHJlYWQoWlIzNjA1N19WU1NGR1IpICYKLQkJCQkJICAgICBaUjM2MDU3X1ZTU0ZHUl9GcmFtZUdyYWIpID09Ci0JCQkJCSAgICAwKSB7CisJCQkJCWlmICgoYnRyZWFkKFpSMzYwNTdfVlNTRkdSKSAmIFpSMzYwNTdfVlNTRkdSX0ZyYW1lR3JhYikgPT0gMCkgewogCQkJCQkJLyogaXQgaXMgZmluaXNoZWQsIG5vdGlmeSB0aGUgdXNlciAqLwogCiAJCQkJCQl6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW3pyLT52NGxfZ3JhYl9mcmFtZV0uc3RhdGUgPSBCVVpfU1RBVEVfRE9ORTsKQEAgLTE0NTcsOSArMTQyNCw3IEBACiAKIAkJCQlpZiAoenItPnY0bF9ncmFiX2ZyYW1lID09IE5PX0dSQUJfQUNUSVZFICYmCiAJCQkJICAgIHpyLT52NGxfcGVuZF90YWlsICE9IHpyLT52NGxfcGVuZF9oZWFkKSB7Ci0KLQkJCQkJaW50IGZyYW1lID0genItPnY0bF9wZW5kW3pyLT52NGxfcGVuZF90YWlsICYKLQkJCQkJCQkgVjRMX01BU0tfRlJBTUVdOworCQkJCQlpbnQgZnJhbWUgPSB6ci0+djRsX3BlbmRbenItPnY0bF9wZW5kX3RhaWwgJiBWNExfTUFTS19GUkFNRV07CiAJCQkJCXUzMiByZWc7CiAKIAkJCQkJenItPnY0bF9ncmFiX2ZyYW1lID0gZnJhbWU7CkBAIC0xNDY4LDI3ICsxNDMzLDE3IEBACiAKIAkJCQkJLyogQnVmZmVyIGFkZHJlc3MgKi8KIAotCQkJCQlyZWcgPQotCQkJCQkgICAgenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uCi0JCQkJCSAgICBmYnVmZmVyX2J1czsKKwkJCQkJcmVnID0genItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0udjRsLmZidWZmZXJfYnVzOwogCQkJCQlidHdyaXRlKHJlZywgWlIzNjA1N19WRFRSKTsKLQkJCQkJaWYgKHpyLT52NGxfc2V0dGluZ3MuaGVpZ2h0ID4KLQkJCQkJICAgIEJVWl9NQVhfSEVJR0hUIC8gMikKLQkJCQkJCXJlZyArPQotCQkJCQkJICAgIHpyLT52NGxfc2V0dGluZ3MuCi0JCQkJCQkgICAgYnl0ZXNwZXJsaW5lOworCQkJCQlpZiAoenItPnY0bF9zZXR0aW5ncy5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCAvIDIpCisJCQkJCQlyZWcgKz0genItPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmU7CiAJCQkJCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZEQlIpOwogCiAJCQkJCS8qIHZpZGVvIHN0cmlkZSwgc3RhdHVzLCBhbmQgZnJhbWUgZ3JhYiByZWdpc3RlciAqLwogCQkJCQlyZWcgPSAwOwotCQkJCQlpZiAoenItPnY0bF9zZXR0aW5ncy5oZWlnaHQgPgotCQkJCQkgICAgQlVaX01BWF9IRUlHSFQgLyAyKQotCQkJCQkJcmVnICs9Ci0JCQkJCQkgICAgenItPnY0bF9zZXR0aW5ncy4KLQkJCQkJCSAgICBieXRlc3BlcmxpbmU7Ci0JCQkJCXJlZyA9Ci0JCQkJCSAgICAocmVnIDw8Ci0JCQkJCSAgICAgWlIzNjA1N19WU1NGR1JfRGlzcFN0cmlkZSk7CisJCQkJCWlmICh6ci0+djRsX3NldHRpbmdzLmhlaWdodCA+IEJVWl9NQVhfSEVJR0hUIC8gMikKKwkJCQkJCXJlZyArPSB6ci0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZTsKKwkJCQkJcmVnID0gKHJlZyA8PCBaUjM2MDU3X1ZTU0ZHUl9EaXNwU3RyaWRlKTsKIAkJCQkJcmVnIHw9IFpSMzYwNTdfVlNTRkdSX1ZpZE92ZjsKIAkJCQkJcmVnIHw9IFpSMzYwNTdfVlNTRkdSX1NuYXBTaG90OwogCQkJCQlyZWcgfD0gWlIzNjA1N19WU1NGR1JfRnJhbWVHcmFiOwpAQCAtMTUwNiw3NyArMTQ2MSw2NiBAQAogI2lmIChJUlFfTUFTSyAmIFpSMzYwNTdfSVNSX0NvZFJlcElSUSkKIAkJaWYgKGFzdGF0ICYgWlIzNjA1N19JU1JfQ29kUmVwSVJRKSB7CiAJCQl6ci0+aW50cl9jb3VudGVyX0NvZFJlcElSUSsrOwotCQkJSURFQlVHKHByaW50awotCQkJICAgICAgIChLRVJOX0RFQlVHICIlczogWlIzNjA1N19JU1JfQ29kUmVwSVJRXG4iLAorCQkJSURFQlVHKHByaW50ayhLRVJOX0RFQlVHICIlczogWlIzNjA1N19JU1JfQ29kUmVwSVJRXG4iLAogCQkJCVpSX0RFVk5BTUUoenIpKSk7CiAJCQlidGFuZCh+WlIzNjA1N19JQ1JfQ29kUmVwSVJRLCBaUjM2MDU3X0lDUik7CiAJCX0KICNlbmRpZgkJCQkvKiAoSVJRX01BU0sgJiBaUjM2MDU3X0lTUl9Db2RSZXBJUlEpICovCiAKICNpZiAoSVJRX01BU0sgJiBaUjM2MDU3X0lTUl9KUEVHUmVwSVJRKQotCQlpZiAoYXN0YXQgJiBaUjM2MDU3X0lTUl9KUEVHUmVwSVJRKSB7CisJCWlmICgoYXN0YXQgJiBaUjM2MDU3X0lTUl9KUEVHUmVwSVJRKSAmJgorCQkgICAgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTIHx8CisJCSAgICAgenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSkgeworCQkJaWYgKHpyMzYwNjdfZGVidWcgPiAxICYmICghenItPmZyYW1lX251bSB8fCB6ci0+SlBFR19lcnJvcikpIHsKKwkJCQljaGFyIHNjW10gPSAiMDAwMCI7CisJCQkJY2hhciBzdls1XTsKKwkJCQlpbnQgaTsKIAotCQkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTIHx8Ci0JCQkgICAgenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSB7Ci0JCQkJaWYgKHpyMzYwNjdfZGVidWcgPiAxICYmCi0JCQkJICAgICghenItPmZyYW1lX251bSB8fCB6ci0+SlBFR19lcnJvcikpIHsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCQkgICAgICAgIiVzOiBmaXJzdCBmcmFtZSByZWFkeTogc3RhdGU9MHglMDh4IG9kZF9ldmVuPSVkIGZpZWxkX3Blcl9idWZmPSVkIGRlbGF5PSVkXG4iLAotCQkJCQkgICAgICAgWlJfREVWTkFNRSh6ciksIHN0YXQsCi0JCQkJCSAgICAgICB6ci0+anBnX3NldHRpbmdzLm9kZF9ldmVuLAotCQkJCQkgICAgICAgenItPmpwZ19zZXR0aW5ncy4KLQkJCQkJICAgICAgIGZpZWxkX3Blcl9idWZmLAotCQkJCQkgICAgICAgenItPkpQRUdfbWlzc2VkKTsKLQkJCQkJewotCQkJCQkJY2hhciBzY1tdID0gIjAwMDAiOwotCQkJCQkJY2hhciBzdls1XTsKLQkJCQkJCWludCBpOwotCQkJCQkJc3RyY3B5KHN2LCBzYyk7Ci0JCQkJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQkJCQkJaWYgKGxlMzJfdG9fY3B1KHpyLT5zdGF0X2NvbVtpXSkgJiAxKQotCQkJCQkJCQlzdltpXSA9ICcxJzsKLQkJCQkJCX0KLQkJCQkJCXN2WzRdID0gMDsKLQkJCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkJCSAgICAgICAiJXM6IHN0YXRfY29tPSVzIHF1ZXVlX3N0YXRlPSVsZC8lbGQvJWxkLyVsZFxuIiwKLQkJCQkJCSAgICAgICBaUl9ERVZOQU1FKHpyKSwgc3YsCi0JCQkJCQkgICAgICAgenItPmpwZ19xdWVfdGFpbCwKLQkJCQkJCSAgICAgICB6ci0+anBnX2RtYV90YWlsLAotCQkJCQkJICAgICAgIHpyLT5qcGdfZG1hX2hlYWQsCi0JCQkJCQkgICAgICAgenItPmpwZ19xdWVfaGVhZCk7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoenItPkpQRUdfbWlzc2VkID4genItPkpQRUdfbWF4X21pc3NlZCkJLy8gR2V0IHN0YXRpc3RpY3MKLQkJCQkJCXpyLT5KUEVHX21heF9taXNzZWQgPQotCQkJCQkJICAgIHpyLT5KUEVHX21pc3NlZDsKLQkJCQkJaWYgKHpyLT5KUEVHX21pc3NlZCA8Ci0JCQkJCSAgICB6ci0+SlBFR19taW5fbWlzc2VkKQotCQkJCQkJenItPkpQRUdfbWluX21pc3NlZCA9Ci0JCQkJCQkgICAgenItPkpQRUdfbWlzc2VkOwotCQkJCX0KKwkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJICAgICAgICIlczogZmlyc3QgZnJhbWUgcmVhZHk6IHN0YXRlPTB4JTA4eCBvZGRfZXZlbj0lZCBmaWVsZF9wZXJfYnVmZj0lZCBkZWxheT0lZFxuIiwKKwkJCQkgICAgICAgWlJfREVWTkFNRSh6ciksIHN0YXQsCisJCQkJICAgICAgIHpyLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4sCisJCQkJICAgICAgIHpyLT5qcGdfc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYsCisJCQkJICAgICAgIHpyLT5KUEVHX21pc3NlZCk7CiAKLQkJCQlpZiAoenIzNjA2N19kZWJ1ZyA+IDIgJiYgenItPmZyYW1lX251bSA8IDYpIHsKLQkJCQkJaW50IGk7Ci0JCQkJCXByaW50aygiJXM6IHNlcT0lbGQgc3RhdF9jb206IiwKLQkJCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCB6ci0+anBnX3NlcV9udW0pOwotCQkJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQkJCQlwcmludGsoIiAlMDh4IiwKLQkJCQkJCSAgICAgICBsZTMyX3RvX2NwdSh6ci0+c3RhdF9jb21baV0pKTsKLQkJCQkJfQotCQkJCQlwcmludGsoIlxuIik7CisJCQkJc3RyY3B5KHN2LCBzYyk7CisJCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJCQlpZiAobGUzMl90b19jcHUoenItPnN0YXRfY29tW2ldKSAmIDEpCisJCQkJCQlzdltpXSA9ICcxJzsKIAkJCQl9Ci0JCQkJenItPmZyYW1lX251bSsrOwotCQkJCXpyLT5KUEVHX21pc3NlZCA9IDA7Ci0JCQkJenItPkpQRUdfZXJyb3IgPSAwOwotCQkJCXpvcmFuX3JlYXBfc3RhdF9jb20oenIpOwotCQkJCXpvcmFuX2ZlZWRfc3RhdF9jb20oenIpOwotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmenItPmpwZ19jYXBxKTsKLQkJCX0gLyplbHNlIHsKLQkJCSAgICAgIGRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBKUEVHIGludGVycnVwdCB3aGlsZSBub3QgaW4gbW90aW9uIChkZSljb21wcmVzcyBtb2RlIVxuIiwKLQkJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJfSovCisJCQkJc3ZbNF0gPSAwOworCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkgICAgICAgIiVzOiBzdGF0X2NvbT0lcyBxdWV1ZV9zdGF0ZT0lbGQvJWxkLyVsZC8lbGRcbiIsCisJCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCBzdiwKKwkJCQkgICAgICAgenItPmpwZ19xdWVfdGFpbCwKKwkJCQkgICAgICAgenItPmpwZ19kbWFfdGFpbCwKKwkJCQkgICAgICAgenItPmpwZ19kbWFfaGVhZCwKKwkJCQkgICAgICAgenItPmpwZ19xdWVfaGVhZCk7CisJCQl9IGVsc2UgeworCQkJCS8qIEdldCBzdGF0aXN0aWNzICovCisJCQkJaWYgKHpyLT5KUEVHX21pc3NlZCA+IHpyLT5KUEVHX21heF9taXNzZWQpCisJCQkJCXpyLT5KUEVHX21heF9taXNzZWQgPSB6ci0+SlBFR19taXNzZWQ7CisJCQkJaWYgKHpyLT5KUEVHX21pc3NlZCA8IHpyLT5KUEVHX21pbl9taXNzZWQpCisJCQkJCXpyLT5KUEVHX21pbl9taXNzZWQgPSB6ci0+SlBFR19taXNzZWQ7CisJCQl9CisKKwkJCWlmICh6cjM2MDY3X2RlYnVnID4gMiAmJiB6ci0+ZnJhbWVfbnVtIDwgNikgeworCQkJCWludCBpOworCisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNlcT0lbGQgc3RhdF9jb206IiwKKwkJCQkgICAgICAgWlJfREVWTkFNRSh6ciksIHpyLT5qcGdfc2VxX251bSk7CisJCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJCQlwcmludGsoS0VSTl9DT05UICIgJTA4eCIsCisJCQkJCSAgICAgICBsZTMyX3RvX2NwdSh6ci0+c3RhdF9jb21baV0pKTsKKwkJCQl9CisJCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwkJCX0KKwkJCXpyLT5mcmFtZV9udW0rKzsKKwkJCXpyLT5KUEVHX21pc3NlZCA9IDA7CisJCQl6ci0+SlBFR19lcnJvciA9IDA7CisJCQl6b3Jhbl9yZWFwX3N0YXRfY29tKHpyKTsKKwkJCXpvcmFuX2ZlZWRfc3RhdF9jb20oenIpOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ6ci0+anBnX2NhcHEpOwogCQl9CiAjZW5kaWYJCQkJLyogKElSUV9NQVNLICYgWlIzNjA1N19JU1JfSlBFR1JlcElSUSkgKi8KIApAQCAtMTU4NSw4ICsxNTI5LDcgQEAKIAkJICAgIHpyLT5KUEVHX21pc3NlZCA+IDI1IHx8CiAJCSAgICB6ci0+SlBFR19lcnJvciA9PSAxCXx8CiAJCSAgICAoKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKSAmJgotCQkgICAgICh6ci0+ZnJhbWVfbnVtICYgKHpyLT5KUEVHX21pc3NlZCA+Ci0JCQkJICAgICAgIHpyLT5qcGdfc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYpKSkpIHsKKwkJICAgICAoenItPmZyYW1lX251bSAmICh6ci0+SlBFR19taXNzZWQgPiB6ci0+anBnX3NldHRpbmdzLmZpZWxkX3Blcl9idWZmKSkpKSB7CiAJCQllcnJvcl9oYW5kbGVyKHpyLCBhc3RhdCwgc3RhdCk7CiAJCX0KIApAQCAtMTYyOCw3ICsxNTcxLDcgQEAKIHZvaWQKIHpvcmFuX2luaXRfaGFyZHdhcmUgKHN0cnVjdCB6b3JhbiAqenIpCiB7Ci0JaW50IGosIHplcm8gPSAwOworCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGUgPSB7IDAsIDAgfTsKIAogCS8qIEVuYWJsZSBidXMtbWFzdGVyaW5nICovCiAJem9yYW5fc2V0X3BjaV9tYXN0ZXIoenIsIDEpOwpAQCAtMTYzOCwxNSArMTU4MSwxNiBAQAogCQl6ci0+Y2FyZC5pbml0KHpyKTsKIAl9CiAKLQlqID0genItPmNhcmQuaW5wdXRbenItPmlucHV0XS5tdXhzZWw7CisJcm91dGUuaW5wdXQgPSB6ci0+Y2FyZC5pbnB1dFt6ci0+aW5wdXRdLm11eHNlbDsKIAotCWRlY29kZXJfY29tbWFuZCh6ciwgMCwgTlVMTCk7Ci0JZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9OT1JNLCAmenItPm5vcm0pOwotCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfSU5QVVQsICZqKTsKKwlkZWNvZGVyX2NhbGwoenIsIGNvcmUsIGluaXQsIDApOworCWRlY29kZXJfY2FsbCh6ciwgdHVuZXIsIHNfc3RkLCB6ci0+bm9ybSk7CisJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCi0JZW5jb2Rlcl9jb21tYW5kKHpyLCAwLCBOVUxMKTsKLQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX05PUk0sICZ6ci0+bm9ybSk7Ci0JZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9JTlBVVCwgJnplcm8pOworCWVuY29kZXJfY2FsbCh6ciwgY29yZSwgaW5pdCwgMCk7CisJZW5jb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19zdGRfb3V0cHV0LCB6ci0+bm9ybSk7CisJcm91dGUuaW5wdXQgPSAwOworCWVuY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAogCS8qIHRvZ2dsZSBKUEVHIGNvZGVjIHNsZWVwIHRvIHN5bmMgUExMICovCiAJanBlZ19jb2RlY19zbGVlcCh6ciwgMSk7CkBAIC0xNzA2LDQyICsxNjUwLDMgQEAKIAkJcmVnIHw9IFpSMzYwNTdfVkRDUl9Ucml0b247CiAJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkRDUik7CiB9Ci0KLS8qCi0gKiBJbnRlcmZhY2UgdG8gZGVjb2RlciBhbmQgZW5jb2RlciBjaGlwcyB1c2luZyBpMmMgYnVzCi0gKi8KLQotaW50Ci1kZWNvZGVyX2NvbW1hbmQgKHN0cnVjdCB6b3JhbiAqenIsCi0JCSBpbnQgICAgICAgICAgIGNtZCwKLQkJIHZvaWQgICAgICAgICAqZGF0YSkKLXsKLQlpZiAoenItPmRlY29kZXIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAoenItPmNhcmQudHlwZSA9PSBMTUwzMyAmJgotCSAgICAoY21kID09IERFQ09ERVJfU0VUX05PUk0gfHwgY21kID09IERFQ09ERVJfU0VUX0lOUFVUKSkgewotCQlpbnQgcmVzOwotCi0JCS8vIEJ0ODE5IG5lZWRzIHRvIHJlc2V0IGl0cyBGSUZPIGJ1ZmZlciB1c2luZyAjRlJTVCBwaW4gYW5kCi0JCS8vIExNTDMzIGNhcmQgdXNlcyBHUElPKDcpIGZvciB0aGF0LgotCQlHUElPKHpyLCA3LCAwKTsKLQkJcmVzID0genItPmRlY29kZXItPmRyaXZlci0+Y29tbWFuZCh6ci0+ZGVjb2RlciwgY21kLCBkYXRhKTsKLQkJLy8gUHVsbCAjRlJTVCBoaWdoLgotCQlHUElPKHpyLCA3LCAxKTsKLQkJcmV0dXJuIHJlczsKLQl9IGVsc2UKLQkJcmV0dXJuIHpyLT5kZWNvZGVyLT5kcml2ZXItPmNvbW1hbmQoenItPmRlY29kZXIsIGNtZCwKLQkJCQkJCSAgICBkYXRhKTsKLX0KLQotaW50Ci1lbmNvZGVyX2NvbW1hbmQgKHN0cnVjdCB6b3JhbiAqenIsCi0JCSBpbnQgICAgICAgICAgIGNtZCwKLQkJIHZvaWQgICAgICAgICAqZGF0YSkKLXsKLQlpZiAoenItPmVuY29kZXIgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JcmV0dXJuIHpyLT5lbmNvZGVyLT5kcml2ZXItPmNvbW1hbmQoenItPmVuY29kZXIsIGNtZCwgZGF0YSk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuaAppbmRleCA3NGM2YzhlLi4wN2YyYzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmgKQEAgLTU0LDggKzU0LDggQEAKIC8qIHpyMzYweDcgYWNjZXNzIHRvIHJhdyBjYXB0dXJlICovCiBleHRlcm4gdm9pZCB6cjM2MDU3X292ZXJsYXkoc3RydWN0IHpvcmFuICp6ciwKIAkJCSAgICBpbnQgb24pOwotZXh0ZXJuIHZvaWQgd3JpdGVfb3ZlcmxheV9tYXNrKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICAgICAgIHN0cnVjdCB2aWRlb19jbGlwICp2cCwKK2V4dGVybiB2b2lkIHdyaXRlX292ZXJsYXlfbWFzayhzdHJ1Y3Qgem9yYW5fZmggKmZoLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2NsaXAgKnZwLAogCQkJICAgICAgIGludCBjb3VudCk7CiBleHRlcm4gdm9pZCB6cjM2MDU3X3NldF9tZW1ncmFiKHN0cnVjdCB6b3JhbiAqenIsCiAJCQkJaW50IG1vZGUpOwpAQCAtODcsMTEgKzg3LDkgQEAKIGV4dGVybiBpbnQgcGFzc190aHJvdWdoOwogCiAvKiBpMmMgKi8KLWV4dGVybiBpbnQgZGVjb2Rlcl9jb21tYW5kKHN0cnVjdCB6b3JhbiAqenIsCi0JCQkgICBpbnQgY21kLAotCQkJICAgdm9pZCAqZGF0YSk7Ci1leHRlcm4gaW50IGVuY29kZXJfY29tbWFuZChzdHJ1Y3Qgem9yYW4gKnpyLAotCQkJICAgaW50IGNtZCwKLQkJCSAgIHZvaWQgKmRhdGEpOworI2RlZmluZSBkZWNvZGVyX2NhbGwoenIsIG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX3N1YmRldl9jYWxsKHpyLT5kZWNvZGVyLCBvLCBmLCAjI2FyZ3MpCisjZGVmaW5lIGVuY29kZXJfY2FsbCh6ciwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfc3ViZGV2X2NhbGwoenItPmVuY29kZXIsIG8sIGYsICMjYXJncykKIAogI2VuZGlmCQkJCS8qIF9fWk9SQU5fREVWSUNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKaW5kZXggMTIwZWYyMy4uZjE2ZTU3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCkBAIC01OCwxNiArNTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgogCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNkZWZpbmUgICAgIE1BUF9OUih4KSAgICAgICB2aXJ0X3RvX3BhZ2UoeCkKLSNkZWZpbmUgICAgIFpPUkFOX1ZJRF9UWVBFICAoIFwKLQkJCQlWSURfVFlQRV9DQVBUVVJFIHwgXAotCQkJCVZJRF9UWVBFX09WRVJMQVkgfCBcCi0JCQkJVklEX1RZUEVfQ0xJUFBJTkcgfCBcCi0JCQkJVklEX1RZUEVfRlJBTUVSQU0gfCBcCi0JCQkJVklEX1RZUEVfU0NBTEVTIHwgXAotCQkJCVZJRF9UWVBFX01KUEVHX0RFQ09ERVIgfCBcCi0JCQkJVklEX1RZUEVfTUpQRUdfRU5DT0RFUiBcCi0JCQkgICAgICkKIAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KQEAgLTc5LDM2ICs2OSwxNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogCi0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgInpvcmFuLmgiCiAjaW5jbHVkZSAiem9yYW5fZGV2aWNlLmgiCiAjaW5jbHVkZSAiem9yYW5fY2FyZC5oIgogCi0JLyogd2UgZGVjbGFyZSBzb21lIGNhcmQgdHlwZSBkZWZpbml0aW9ucyBoZXJlLCB0aGV5IG1lYW4KLQkgKiB0aGUgc2FtZSBhcyB0aGUgdjRsMSBaT1JBTl9WSURfVFlQRSBhYm92ZSwgZXhjZXB0IGl0J3MgdjRsMiAqLwotI2RlZmluZSBaT1JBTl9WNEwyX1ZJRF9GTEFHUyAoIFwKLQkJCQlWNEwyX0NBUF9TVFJFQU1JTkcgfFwKLQkJCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHxcCi0JCQkJVjRMMl9DQVBfVklERU9fT1VUUFVUIHxcCi0JCQkJVjRMMl9DQVBfVklERU9fT1ZFUkxBWSBcCi0JCQkgICAgICApCi0KLQotI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUKQotI2RlZmluZSBaRk1UKHBhbCwgZmNjLCBjcykgXAotCS5wYWxldHRlID0gKHBhbCksIC5mb3VyY2MgPSAoZmNjKSwgLmNvbG9yc3BhY2UgPSAoY3MpCi0jZWxzZQotI2RlZmluZSBaRk1UKHBhbCwgZmNjLCBjcykgXAotCS5mb3VyY2MgPSAoZmNjKSwgLmNvbG9yc3BhY2UgPSAoY3MpCi0jZW5kaWYKIAogY29uc3Qgc3RydWN0IHpvcmFuX2Zvcm1hdCB6b3Jhbl9mb3JtYXRzW10gPSB7CiAJewogCQkubmFtZSA9ICIxNS1iaXQgUkdCIExFIiwKLQkJWkZNVChWSURFT19QQUxFVFRFX1JHQjU1NSwKLQkJICAgICBWNEwyX1BJWF9GTVRfUkdCNTU1LCBWNEwyX0NPTE9SU1BBQ0VfU1JHQiksCisJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfUkdCNTU1LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAogCQkuZGVwdGggPSAxNSwKIAkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAogCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLApAQCAtMTE2LDE2ICs4NywxNiBAQAogCQkJICAgWlIzNjA1N19WRkVTUEZSX0xpdHRsZUVuZGlhbiwKIAl9LCB7CiAJCS5uYW1lID0gIjE1LWJpdCBSR0IgQkUiLAotCQlaRk1UKC0xLAotCQkgICAgIFY0TDJfUElYX0ZNVF9SR0I1NTVYLCBWNEwyX0NPTE9SU1BBQ0VfU1JHQiksCisJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfUkdCNTU1WCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKIAkJLmRlcHRoID0gMTUsCiAJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKIAkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKIAkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfUkdCNTU1fFpSMzYwNTdfVkZFU1BGUl9FcnJEaWYsCiAJfSwgewogCQkubmFtZSA9ICIxNi1iaXQgUkdCIExFIiwKLQkJWkZNVChWSURFT19QQUxFVFRFX1JHQjU2NSwKLQkJICAgICBWNEwyX1BJWF9GTVRfUkdCNTY1LCBWNEwyX0NPTE9SU1BBQ0VfU1JHQiksCisJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfUkdCNTY1LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAogCQkuZGVwdGggPSAxNiwKIAkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAogCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLApAQCAtMTMzLDU2ICsxMDQsNTYgQEAKIAkJCSAgIFpSMzYwNTdfVkZFU1BGUl9MaXR0bGVFbmRpYW4sCiAJfSwgewogCQkubmFtZSA9ICIxNi1iaXQgUkdCIEJFIiwKLQkJWkZNVCgtMSwKLQkJICAgICBWNEwyX1BJWF9GTVRfUkdCNTY1WCwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1JHQjU2NVgsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCiAJCS5kZXB0aCA9IDE2LAogCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8CiAJCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCiAJCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1JHQjU2NXxaUjM2MDU3X1ZGRVNQRlJfRXJyRGlmLAogCX0sIHsKIAkJLm5hbWUgPSAiMjQtYml0IFJHQiIsCi0JCVpGTVQoVklERU9fUEFMRVRURV9SR0IyNCwKLQkJICAgICBWNEwyX1BJWF9GTVRfQkdSMjQsIFY0TDJfQ09MT1JTUEFDRV9TUkdCKSwKKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9CR1IyNCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKIAkJLmRlcHRoID0gMjQsCiAJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKIAkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKIAkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfUkdCODg4fFpSMzYwNTdfVkZFU1BGUl9QYWNrMjQsCiAJfSwgewogCQkubmFtZSA9ICIzMi1iaXQgUkdCIExFIiwKLQkJWkZNVChWSURFT19QQUxFVFRFX1JHQjMyLAotCQkgICAgIFY0TDJfUElYX0ZNVF9CR1IzMiwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX0JHUjMyLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAogCQkuZGVwdGggPSAzMiwKIAkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAogCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAogCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9SR0I4ODh8WlIzNjA1N19WRkVTUEZSX0xpdHRsZUVuZGlhbiwKIAl9LCB7CiAJCS5uYW1lID0gIjMyLWJpdCBSR0IgQkUiLAotCQlaRk1UKC0xLAotCQkgICAgIFY0TDJfUElYX0ZNVF9SR0IzMiwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1JHQjMyLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAogCQkuZGVwdGggPSAzMiwKIAkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAogCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAogCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9SR0I4ODgsCiAJfSwgewogCQkubmFtZSA9ICI0OjI6MiwgcGFja2VkLCBZVVlWIiwKLQkJWkZNVChWSURFT19QQUxFVFRFX1lVVjQyMiwKLQkJICAgICBWNEwyX1BJWF9GTVRfWVVZViwgVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSksCisJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfWVVZViwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNLAogCQkuZGVwdGggPSAxNiwKIAkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAogCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAogCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9ZVVY0MjIsCiAJfSwgewogCQkubmFtZSA9ICI0OjI6MiwgcGFja2VkLCBVWVZZIiwKLQkJWkZNVChWSURFT19QQUxFVFRFX1VZVlksCi0JCSAgICAgVjRMMl9QSVhfRk1UX1VZVlksIFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0pLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1VZVlksCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSwKIAkJLmRlcHRoID0gMTYsCiAJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKIAkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKIAkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfWVVWNDIyfFpSMzYwNTdfVkZFU1BGUl9MaXR0bGVFbmRpYW4sCiAJfSwgewogCQkubmFtZSA9ICJIYXJkd2FyZS1lbmNvZGVkIE1vdGlvbi1KUEVHIiwKLQkJWkZNVCgtMSwKLQkJICAgICBWNEwyX1BJWF9GTVRfTUpQRUcsIFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0pLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX01KUEVHLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0sCiAJCS5kZXB0aCA9IDAsCiAJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKIAkJCSBaT1JBTl9GT1JNQVRfUExBWUJBQ0sgfApAQCAtMTkxLDEzICsxNjIsNiBAQAogfTsKICNkZWZpbmUgTlVNX0ZPUk1BVFMgQVJSQVlfU0laRSh6b3Jhbl9mb3JtYXRzKQogCi0vLyBSSjogVGVzdCBvbmx5IC0gd2FudCB0byB0ZXN0IEJVWl9VU0VfSElNRU0gZXZlbiB3aGVuIENPTkZJR19CSUdQSFlTX0FSRUEgaXMgZGVmaW5lZAotCi0KLXN0YXRpYyBpbnQgbG9ja19ub3JtOwkvKiAwID0gZGVmYXVsdCAxID0gRG9uJ3QgY2hhbmdlIFRWIHN0YW5kYXJkIChub3JtKSAqLwotbW9kdWxlX3BhcmFtKGxvY2tfbm9ybSwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MobG9ja19ub3JtLCAiUHJldmVudCBub3JtIGNoYW5nZXMgKDEgPSBpZ25vcmUsID4xID0gZmFpbCkiKTsKLQogCS8qIHNtYWxsIGhlbHBlciBmdW5jdGlvbiBmb3IgY2FsY3VsYXRpbmcgYnVmZmVyc2l6ZXMgZm9yIHY0bDIKIAkgKiB3ZSBjYWxjdWxhdGUgdGhlIG5lYXJlc3QgaGlnaGVyIHBvd2VyLW9mLXR3bywgd2hpY2gKIAkgKiB3aWxsIGJlIHRoZSByZWNvbW1lbmRlZCBidWZmZXJzaXplICovCkBAIC0yMjIsMjIxICsxODYsMTA2IEBACiB9CiAKIC8qIGZvcndhcmQgcmVmZXJlbmNlcyAqLwotc3RhdGljIHZvaWQgdjRsX2ZidWZmZXJfZnJlZShzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1zdGF0aWMgdm9pZCBqcGdfZmJ1ZmZlcl9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyB2b2lkIHY0bF9mYnVmZmVyX2ZyZWUoc3RydWN0IHpvcmFuX2ZoICpmaCk7CitzdGF0aWMgdm9pZCBqcGdfZmJ1ZmZlcl9mcmVlKHN0cnVjdCB6b3Jhbl9maCAqZmgpOworCisvKiBTZXQgbWFwcGluZyBtb2RlICovCitzdGF0aWMgdm9pZCBtYXBfbW9kZV9yYXcoc3RydWN0IHpvcmFuX2ZoICpmaCkKK3sKKwlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9SQVc7CisJZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUgPSB2NGxfYnVmc2l6ZTsKKwlmaC0+YnVmZmVycy5udW1fYnVmZmVycyA9IHY0bF9uYnVmczsKK30KK3N0YXRpYyB2b2lkIG1hcF9tb2RlX2pwZyhzdHJ1Y3Qgem9yYW5fZmggKmZoLCBpbnQgcGxheSkKK3sKKwlmaC0+bWFwX21vZGUgPSBwbGF5ID8gWk9SQU5fTUFQX01PREVfSlBHX1BMQVkgOiBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOworCWZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplID0ganBnX2J1ZnNpemU7CisJZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnMgPSBqcGdfbmJ1ZnM7Cit9CitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKm1vZGVfbmFtZShlbnVtIHpvcmFuX21hcF9tb2RlIG1vZGUpCit7CisJcmV0dXJuIG1vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXID8gIlY0TCIgOiAiSlBHIjsKK30KIAogLyoKICAqICAgQWxsb2NhdGUgdGhlIFY0TCBncmFiIGJ1ZmZlcnMKICAqCiAgKiAgIFRoZXNlIGhhdmUgdG8gYmUgcHlzaWNhbGx5IGNvbnRpZ3VvdXMuCi0gKiAgIElmIHY0bF9idWZzaXplIDw9IE1BWF9LTUFMTE9DX01FTSB3ZSB1c2Uga21hbGxvYwotICogICBlbHNlIHdlIHRyeSB0byBhbGxvY2F0ZSB0aGVtIHdpdGggYmlncGh5c2FyZWFfYWxsb2NfcGFnZXMKLSAqICAgaWYgdGhlIGJpZ3BoeXNhcmVhIHBhdGNoIGlzIHByZXNlbnQgaW4gdGhlIGtlcm5lbCwKLSAqICAgZWxzZSB3ZSB0cnkgdG8gdXNlIGhpZ2ggbWVtb3J5IChpZiB0aGUgdXNlciBoYXMgYm9vdGV0Ci0gKiAgIExpbnV4IHdpdGggdGhlIG5lY2Vzc2FyeSBtZW1vcnkgbGVmdCBvdmVyKS4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZwotZ2V0X2hpZ2hfbWVtICh1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgaW50IHY0bF9mYnVmZmVyX2FsbG9jKHN0cnVjdCB6b3Jhbl9maCAqZmgpCiB7Ci0vKgotICogQ2hlY2sgaWYgdGhlcmUgaXMgdXNhYmxlIG1lbW9yeSBhdCB0aGUgZW5kIG9mIExpbnV4IG1lbW9yeQotICogb2YgYXQgbGVhc3Qgc2l6ZS4gUmV0dXJuIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgbWVtb3J5LAotICogcmV0dXJuIDAgb24gZmFpbHVyZS4KLSAqCi0gKiBUaGUgaWRlYSBpcyBmcm9tIEFsZXhhbmRybyBSdWJpbmkncyBib29rICJMaW51eCBkZXZpY2UgZHJpdmVycyIuCi0gKiBUaGUgZHJpdmVyIGZyb20gaGltIHdoaWNoIGlzIGRvd25sb2FkYWJsZSBmcm9tIE8nUmVpbGx5J3MKLSAqIHdlYiBzaXRlIG1pc3NlcyB0aGUgInZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSkiIHBhcnQKLSAqIChhbmQgdGhlcmVmb3JlIGRvZXNuJ3Qgd29yayBhdCBhbGwgLSBhdCBsZWFzdCB3aXRoIDIuMi54IGtlcm5lbHMpLgotICoKLSAqIEl0IHNob3VsZCBiZSB1bm5lY2Vzc2FyeSB0byBtZW50aW9uIHRoYXQgVEhJUyBJUyBEQU5HRVJPVVMsCi0gKiBpZiBtb3JlIHRoYW4gb25lIGRyaXZlciBhdCBhIHRpbWUgaGFzIHRoZSBpZGVhIHRvIHVzZSB0aGlzIG1lbW9yeSEhISEKLSAqLwotCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX2lvbWVtICptZW07Ci0JdW5zaWduZWQgY2hhciBjOwotCXVuc2lnbmVkIGxvbmcgaGlfbWVtX3BoOwotCXVuc2lnbmVkIGxvbmcgaTsKLQotCS8qIE1hcCB0aGUgaGlnaCBtZW1vcnkgdG8gdXNlciBzcGFjZSAqLwotCi0JaGlfbWVtX3BoID0gdmlydF90b19waHlzKGhpZ2hfbWVtb3J5KTsKLQotCW1lbSA9IGlvcmVtYXAoaGlfbWVtX3BoLCBzaXplKTsKLQlpZiAoIW1lbSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUiAiJXM6IGdldF9oaWdoX21lbSgpIC0gaW9yZW1hcCBmYWlsZWRcbiIsCi0JCQlaT1JBTl9OQU1FKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotCQkvKiBDaGVjayBpZiBpdCBpcyBtZW1vcnkgKi8KLQkJYyA9IGkgJiAweGZmOwotCQl3cml0ZWIoYywgbWVtICsgaSk7Ci0JCWlmIChyZWFkYihtZW0gKyBpKSAhPSBjKQotCQkJYnJlYWs7Ci0JCWMgPSAyNTUgLSBjOwotCQl3cml0ZWIoYywgbWVtICsgaSk7Ci0JCWlmIChyZWFkYihtZW0gKyBpKSAhPSBjKQotCQkJYnJlYWs7Ci0JCXdyaXRlYigwLCBtZW0gKyBpKTsJLyogemVybyBvdXQgbWVtb3J5ICovCi0KLQkJLyogZ2l2ZSB0aGUga2VybmVsIGFpciB0byBicmVhdGggKi8KLQkJaWYgKChpICYgMHgzZmZmZikgPT0gMHgzZmZmZikKLQkJCXNjaGVkdWxlKCk7Ci0JfQotCi0JaW91bm1hcChtZW0pOwotCi0JaWYgKGkgIT0gc2l6ZSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBnZXRfaGlnaF9tZW0oKSAtIHJlcXVlc3RlZCAlbHUsIGF2YWlsICVsdVxuIiwKLQkJCVpPUkFOX05BTUUsIHNpemUsIGkpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gaGlfbWVtX3BoOwotfQotCi1zdGF0aWMgaW50Ci12NGxfZmJ1ZmZlcl9hbGxvYyAoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwogCWludCBpLCBvZmY7CiAJdW5zaWduZWQgY2hhciAqbWVtOwotCXVuc2lnbmVkIGxvbmcgcG1lbSA9IDA7CiAKLQkvKiB3ZSBtaWdodCBoYXZlIG9sZCBidWZmZXJzIGx5aW5nIGFyb3VuZC4uLiAqLwotCWlmIChmaC0+djRsX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQpIHsKLQkJdjRsX2ZidWZmZXJfZnJlZShmaWxlKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKLQkJaWYgKGZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcikKKwlmb3IgKGkgPSAwOyBpIDwgZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykgeworCQlpZiAoZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnY0bC5mYnVmZmVyKQogCQkJZHByaW50aygyLAogCQkJCUtFUk5fV0FSTklORwotCQkJCSIlczogdjRsX2ZidWZmZXJfYWxsb2MoKSAtIGJ1ZmZlciAlZCBhbGxyZWFkeSBhbGxvY2F0ZWQhP1xuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7CisJCQkJIiVzOiAlcyAtIGJ1ZmZlciAlZCBhbHJlYWR5IGFsbG9jYXRlZCE/XG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgaSk7CiAKIAkJLy91ZGVsYXkoMjApOwotCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplIDw9IE1BWF9LTUFMTE9DX01FTSkgewotCQkJLyogVXNlIGttYWxsb2MgKi8KLQotCQkJbWVtID0ga21hbGxvYyhmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOwotCQkJaWYgKCFtZW0pIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogdjRsX2ZidWZmZXJfYWxsb2MoKSAtIGttYWxsb2MgZm9yIFY0TCBidWYgJWQgZmFpbGVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7Ci0JCQkJdjRsX2ZidWZmZXJfZnJlZShmaWxlKTsKLQkJCQlyZXR1cm4gLUVOT0JVRlM7Ci0JCQl9Ci0JCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXIgPSBtZW07Ci0JCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXJfcGh5cyA9Ci0JCQkgICAgdmlydF90b19waHlzKG1lbSk7Ci0JCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXJfYnVzID0KLQkJCSAgICB2aXJ0X3RvX2J1cyhtZW0pOwotCQkJZm9yIChvZmYgPSAwOyBvZmYgPCBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQkgICAgIG9mZiArPSBQQUdFX1NJWkUpCi0JCQkJU2V0UGFnZVJlc2VydmVkKE1BUF9OUihtZW0gKyBvZmYpKTsKLQkJCWRwcmludGsoNCwKLQkJCQlLRVJOX0lORk8KLQkJCQkiJXM6IHY0bF9mYnVmZmVyX2FsbG9jKCkgLSBWNEwgZnJhbWUgJWQgbWVtIDB4JWx4IChidXM6IDB4JWx4KVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgaSwgKHVuc2lnbmVkIGxvbmcpIG1lbSwKLQkJCQl2aXJ0X3RvX2J1cyhtZW0pKTsKLQkJfSBlbHNlIHsKLQotCQkJLyogVXNlIGhpZ2ggbWVtb3J5IHdoaWNoIGhhcyBiZWVuIGxlZnQgYXQgYm9vdCB0aW1lICovCi0KLQkJCS8qIE9rLiwgT2suIHRoaXMgaXMgYW4gZXZpbCBoYWNrIC0gd2UgbWFrZQotCQkJICogdGhlIGFzc3VtcHRpb24gdGhhdCBwaHlzaWNhbCBhZGRyZXNzZXMgYXJlCi0JCQkgKiB0aGUgc2FtZSBhcyBidXMgYWRkcmVzc2VzICh0cnVlIGF0IGxlYXN0Ci0JCQkgKiBmb3IgSW50ZWwgcHJvY2Vzc29ycykuIFRoZSB3aG9sZSBtZXRob2Qgb2YKLQkJCSAqIG9idGFpbmluZyBhbmQgdXNpbmcgdGhpcyBtZW1vcnkgaXMgbm90IHZlcnkKLQkJCSAqIG5pY2UgLSBidXQgSSBob3BlIGl0IHNhdmVzIHNvbWUgcG9vciB1c2VycwotCQkJICogZnJvbSBrZXJuZWwgaGFja2luZywgd2hpY2ggbWlnaHQgaGF2ZSBldmVuCi0JCQkgKiBtb3JlIGV2aWwgcmVzdWx0cyAqLwotCi0JCQlpZiAoaSA9PSAwKSB7Ci0JCQkJaW50IHNpemUgPQotCQkJCSAgICBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgKgotCQkJCSAgICBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0KLQkJCQlwbWVtID0gZ2V0X2hpZ2hfbWVtKHNpemUpOwotCQkJCWlmIChwbWVtID09IDApIHsKLQkJCQkJZHByaW50aygxLAotCQkJCQkJS0VSTl9FUlIKLQkJCQkJCSIlczogdjRsX2ZidWZmZXJfYWxsb2MoKSAtIGdldF9oaWdoX21lbSAoc2l6ZSA9ICVkIEtCKSBmb3IgVjRMIGJ1ZnMgZmFpbGVkXG4iLAotCQkJCQkJWlJfREVWTkFNRSh6ciksIHNpemUgPj4gMTApOwotCQkJCQlyZXR1cm4gLUVOT0JVRlM7Ci0JCQkJfQotCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbMF0uZmJ1ZmZlciA9IE5VTEw7Ci0JCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlclswXS5mYnVmZmVyX3BoeXMgPSBwbWVtOwotCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbMF0uZmJ1ZmZlcl9idXMgPSBwbWVtOwotCQkJCWRwcmludGsoNCwKLQkJCQkJS0VSTl9JTkZPCi0JCQkJCSIlczogdjRsX2ZidWZmZXJfYWxsb2MoKSAtIHVzaW5nICVkIEtCIGhpZ2ggbWVtb3J5XG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgc2l6ZSA+PiAxMCk7Ci0JCQl9IGVsc2UgewotCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlciA9IE5VTEw7Ci0JCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyX3BoeXMgPQotCQkJCSAgICBwbWVtICsgaSAqIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXJfYnVzID0KLQkJCQkgICAgcG1lbSArIGkgKiBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQl9CisJCW1lbSA9IGttYWxsb2MoZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUsCisJCQkgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTsKKwkJaWYgKCFtZW0pIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogJXMgLSBrbWFsbG9jIGZvciBWNEwgYnVmICVkIGZhaWxlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGkpOworCQkJdjRsX2ZidWZmZXJfZnJlZShmaCk7CisJCQlyZXR1cm4gLUVOT0JVRlM7CiAJCX0KKwkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnY0bC5mYnVmZmVyID0gbWVtOworCQlmaC0+YnVmZmVycy5idWZmZXJbaV0udjRsLmZidWZmZXJfcGh5cyA9IHZpcnRfdG9fcGh5cyhtZW0pOworCQlmaC0+YnVmZmVycy5idWZmZXJbaV0udjRsLmZidWZmZXJfYnVzID0gdmlydF90b19idXMobWVtKTsKKwkJZm9yIChvZmYgPSAwOyBvZmYgPCBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZTsKKwkJICAgICBvZmYgKz0gUEFHRV9TSVpFKQorCQkJU2V0UGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShtZW0gKyBvZmYpKTsKKwkJZHByaW50ayg0LAorCQkJS0VSTl9JTkZPCisJCQkiJXM6ICVzIC0gVjRMIGZyYW1lICVkIG1lbSAweCVseCAoYnVzOiAweCVsbHgpXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBpLCAodW5zaWduZWQgbG9uZykgbWVtLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl2aXJ0X3RvX2J1cyhtZW0pKTsKIAl9CiAKLQlmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMTsKKwlmaC0+YnVmZmVycy5hbGxvY2F0ZWQgPSAxOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qIGZyZWUgdGhlIFY0TCBncmFiIGJ1ZmZlcnMgKi8KLXN0YXRpYyB2b2lkCi12NGxfZmJ1ZmZlcl9mcmVlIChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyB2b2lkIHY0bF9mYnVmZmVyX2ZyZWUoc3RydWN0IHpvcmFuX2ZoICpmaCkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJaW50IGksIG9mZjsKIAl1bnNpZ25lZCBjaGFyICptZW07CiAKLQlkcHJpbnRrKDQsIEtFUk5fSU5GTyAiJXM6IHY0bF9mYnVmZmVyX2ZyZWUoKVxuIiwgWlJfREVWTkFNRSh6cikpOworCWRwcmludGsoNCwgS0VSTl9JTkZPICIlczogJXNcbiIsIFpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKLQkJaWYgKCFmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXIpCisJZm9yIChpID0gMDsgaSA8IGZoLT5idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKKwkJaWYgKCFmaC0+YnVmZmVycy5idWZmZXJbaV0udjRsLmZidWZmZXIpCiAJCQljb250aW51ZTsKIAotCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplIDw9IE1BWF9LTUFMTE9DX01FTSkgewotCQkJbWVtID0gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyOwotCQkJZm9yIChvZmYgPSAwOyBvZmYgPCBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQkgICAgIG9mZiArPSBQQUdFX1NJWkUpCi0JCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQoTUFQX05SKG1lbSArIG9mZikpOwotCQkJa2ZyZWUoKHZvaWQgKikgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyKTsKLQkJfQotCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXIgPSBOVUxMOworCQltZW0gPSBmaC0+YnVmZmVycy5idWZmZXJbaV0udjRsLmZidWZmZXI7CisJCWZvciAob2ZmID0gMDsgb2ZmIDwgZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemU7CisJCSAgICAgb2ZmICs9IFBBR0VfU0laRSkKKwkJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShtZW0gKyBvZmYpKTsKKwkJa2ZyZWUoZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnY0bC5mYnVmZmVyKTsKKwkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnY0bC5mYnVmZmVyID0gTlVMTDsKIAl9CiAKLQlmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQlmaC0+djRsX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQgPSAwOworCWZoLT5idWZmZXJzLmFsbG9jYXRlZCA9IDA7CiB9CiAKIC8qCiAgKiAgIEFsbG9jYXRlIHRoZSBNSlBFRyBncmFiIGJ1ZmZlcnMuCiAgKgotICogICBJZiB0aGUgcmVxdWVzdGVkIGJ1ZmZlciBzaXplIGlzIHNtYWxsZXIgdGhhbiBNQVhfS01BTExPQ19NRU0sCi0gKiAgIGttYWxsb2MgaXMgdXNlZCB0byByZXF1ZXN0IGEgcGh5c2ljYWxseSBjb250aWd1b3VzIGFyZWEsCi0gKiAgIGVsc2Ugd2UgYWxsb2NhdGUgdGhlIG1lbW9yeSBpbiBmcmFtZ2VudHMgd2l0aCBnZXRfemVyb2VkX3BhZ2UuCi0gKgogICogICBJZiBhIE5hdG9tYSBjaGlwc2V0IGlzIHByZXNlbnQgYW5kIHRoaXMgaXMgYSByZXZpc2lvbiAxIHpyMzYwNTcsCiAgKiAgIGVhY2ggTUpQRUcgYnVmZmVyIG5lZWRzIHRvIGJlIHBoeXNpY2FsbHkgY29udGlndW91cy4KICAqICAgKFJKOiBUaGlzIHN0YXRlbWVudCBpcyBmcm9tIERhdmUgUGVya3MnIG9yaWdpbmFsIGRyaXZlciwKICAqICAgSSBjb3VsZCBuZXZlciBjaGVjayBpdCBiZWNhdXNlIEkgaGF2ZSBhIHpyMzYwNjcpCi0gKiAgIFRoZSBkcml2ZXIgY2FyZXMgYWJvdXQgdGhpcyBiZWNhdXNlIGl0IHJlZHVjZXMgdGhlIGJ1ZmZlcgotICogICBzaXplIHRvIE1BWF9LTUFMTE9DX01FTSBpbiB0aGF0IGNhc2UgKHdoaWNoIGZvcmNlcyBjb250aWd1b3VzIGFsbG9jYXRpb24pLgogICoKICAqICAgUko6IFRoZSBjb250ZW50cyBncmFiIGJ1ZmZlcnMgbmVlZHMgbmV2ZXIgYmUgYWNjZXNzZWQgaW4gdGhlIGRyaXZlci4KICAqICAgICAgIFRoZXJlZm9yZSB0aGVyZSBpcyBubyBuZWVkIHRvIGFsbG9jYXRlIHRoZW0gd2l0aCB2bWFsbG9jIGluIG9yZGVyCkBAIC00NTgsMTYyICszMDcsMTI4IEBACiAgKiAgICAgICBhbmQgZnJhZ21lbnQgYnVmZmVycyBhcmUgbm90IGxpdHRsZS1lbmRpYW4uCiAgKi8KIAotc3RhdGljIGludAotanBnX2ZidWZmZXJfYWxsb2MgKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBqcGdfZmJ1ZmZlcl9hbGxvYyhzdHJ1Y3Qgem9yYW5fZmggKmZoKQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAlpbnQgaSwgaiwgb2ZmOwotCXVuc2lnbmVkIGxvbmcgbWVtOworCXU4ICptZW07CiAKLQkvKiB3ZSBtaWdodCBoYXZlIG9sZCBidWZmZXJzIGx5aW5nIGFyb3VuZCAqLwotCWlmIChmaC0+anBnX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQpIHsKLQkJanBnX2ZidWZmZXJfZnJlZShmaWxlKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKLQkJaWYgKGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWIpCisJZm9yIChpID0gMDsgaSA8IGZoLT5idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKKwkJaWYgKGZoLT5idWZmZXJzLmJ1ZmZlcltpXS5qcGcuZnJhZ190YWIpCiAJCQlkcHJpbnRrKDIsCiAJCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiBqcGdfZmJ1ZmZlcl9hbGxvYygpIC0gYnVmZmVyICVkIGFsbHJlYWR5IGFsbG9jYXRlZCE/XG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBpKTsKKwkJCQkiJXM6ICVzIC0gYnVmZmVyICVkIGFscmVhZHkgYWxsb2NhdGVkIT9cbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBpKTsKIAogCQkvKiBBbGxvY2F0ZSBmcmFnbWVudCB0YWJsZSBmb3IgdGhpcyBidWZmZXIgKi8KIAotCQltZW0gPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCW1lbSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCQlpZiAobWVtID09IDApIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczoganBnX2ZidWZmZXJfYWxsb2MoKSAtIGdldF96ZXJvZWRfcGFnZSAoZnJhZ190YWIpIGZhaWxlZCBmb3IgYnVmZmVyICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBpKTsKLQkJCWpwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7CisJCQkJIiVzOiAlcyAtIGdldF96ZXJvZWRfcGFnZSAoZnJhZ190YWIpIGZhaWxlZCBmb3IgYnVmZmVyICVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgaSk7CisJCQlqcGdfZmJ1ZmZlcl9mcmVlKGZoKTsKIAkJCXJldHVybiAtRU5PQlVGUzsKIAkJfQotCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiID0gKF9fbGUzMiAqKSBtZW07Ci0JCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJfYnVzID0KLQkJICAgIHZpcnRfdG9fYnVzKCh2b2lkICopIG1lbSk7CisJCWZoLT5idWZmZXJzLmJ1ZmZlcltpXS5qcGcuZnJhZ190YWIgPSAoX19sZTMyICopbWVtOworCQlmaC0+YnVmZmVycy5idWZmZXJbaV0uanBnLmZyYWdfdGFiX2J1cyA9IHZpcnRfdG9fYnVzKG1lbSk7CiAKLQkJLy9pZiAoYWxsb2NfY29udGlnKSB7Ci0JCWlmIChmaC0+anBnX2J1ZmZlcnMubmVlZF9jb250aWd1b3VzKSB7Ci0JCQltZW0gPQotCQkJICAgICh1bnNpZ25lZCBsb25nKSBrbWFsbG9jKGZoLT5qcGdfYnVmZmVycy4KLQkJCQkJCSAgICBidWZmZXJfc2l6ZSwKLQkJCQkJCSAgICBHRlBfS0VSTkVMKTsKLQkJCWlmIChtZW0gPT0gMCkgeworCQlpZiAoZmgtPmJ1ZmZlcnMubmVlZF9jb250aWd1b3VzKSB7CisJCQltZW0gPSBrbWFsbG9jKGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCWlmIChtZW0gPT0gTlVMTCkgewogCQkJCWRwcmludGsoMSwKIAkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBqcGdfZmJ1ZmZlcl9hbGxvYygpIC0ga21hbGxvYyBmYWlsZWQgZm9yIGJ1ZmZlciAlZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGkpOwotCQkJCWpwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7CisJCQkJCSIlczogJXMgLSBrbWFsbG9jIGZhaWxlZCBmb3IgYnVmZmVyICVkXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGkpOworCQkJCWpwZ19mYnVmZmVyX2ZyZWUoZmgpOwogCQkJCXJldHVybiAtRU5PQlVGUzsKIAkJCX0KLQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMF0gPQotCQkJICAgIGNwdV90b19sZTMyKHZpcnRfdG9fYnVzKCh2b2lkICopIG1lbSkpOwotCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsxXSA9Ci0JCQkgICAgY3B1X3RvX2xlMzIoKChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgLyA0KSA8PCAxKSB8IDEpOwotCQkJZm9yIChvZmYgPSAwOyBvZmYgPCBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQkgICAgIG9mZiArPSBQQUdFX1NJWkUpCi0JCQkJU2V0UGFnZVJlc2VydmVkKE1BUF9OUihtZW0gKyBvZmYpKTsKKwkJCWZoLT5idWZmZXJzLmJ1ZmZlcltpXS5qcGcuZnJhZ190YWJbMF0gPQorCQkJCWNwdV90b19sZTMyKHZpcnRfdG9fYnVzKG1lbSkpOworCQkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLmpwZy5mcmFnX3RhYlsxXSA9CisJCQkJY3B1X3RvX2xlMzIoKGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplID4+IDEpIHwgMSk7CisJCQlmb3IgKG9mZiA9IDA7IG9mZiA8IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOyBvZmYgKz0gUEFHRV9TSVpFKQorCQkJCVNldFBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UobWVtICsgb2ZmKSk7CiAJCX0gZWxzZSB7Ci0JCQkvKiBqcGdfYnVmc2l6ZSBpcyBhbGxyZWF5IHBhZ2UgYWxpZ25lZCAqLwotCQkJZm9yIChqID0gMDsKLQkJCSAgICAgaiA8IGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSAvIFBBR0VfU0laRTsKLQkJCSAgICAgaisrKSB7Ci0JCQkJbWVtID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCQkJCWlmIChtZW0gPT0gMCkgeworCQkJLyoganBnX2J1ZnNpemUgaXMgYWxyZWFkeSBwYWdlIGFsaWduZWQgKi8KKwkJCWZvciAoaiA9IDA7IGogPCBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSAvIFBBR0VfU0laRTsgaisrKSB7CisJCQkJbWVtID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCQkJaWYgKG1lbSA9PSBOVUxMKSB7CiAJCQkJCWRwcmludGsoMSwKIAkJCQkJCUtFUk5fRVJSCi0JCQkJCQkiJXM6IGpwZ19mYnVmZmVyX2FsbG9jKCkgLSBnZXRfemVyb2VkX3BhZ2UgZmFpbGVkIGZvciBidWZmZXIgJWRcbiIsCi0JCQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7Ci0JCQkJCWpwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7CisJCQkJCQkiJXM6ICVzIC0gZ2V0X3plcm9lZF9wYWdlIGZhaWxlZCBmb3IgYnVmZmVyICVkXG4iLAorCQkJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBpKTsKKwkJCQkJanBnX2ZidWZmZXJfZnJlZShmaCk7CiAJCQkJCXJldHVybiAtRU5PQlVGUzsKIAkJCQl9CiAKLQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzIgKiBqXSA9Ci0JCQkJICAgIGNwdV90b19sZTMyKHZpcnRfdG9fYnVzKCh2b2lkICopIG1lbSkpOwotCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMiAqIGogKwotCQkJCQkJCQkgICAxXSA9Ci0JCQkJICAgIGNwdV90b19sZTMyKChQQUdFX1NJWkUgLyA0KSA8PCAxKTsKLQkJCQlTZXRQYWdlUmVzZXJ2ZWQoTUFQX05SKG1lbSkpOworCQkJCWZoLT5idWZmZXJzLmJ1ZmZlcltpXS5qcGcuZnJhZ190YWJbMiAqIGpdID0KKwkJCQkJY3B1X3RvX2xlMzIodmlydF90b19idXMobWVtKSk7CisJCQkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLmpwZy5mcmFnX3RhYlsyICogaiArIDFdID0KKwkJCQkJY3B1X3RvX2xlMzIoKFBBR0VfU0laRSA+PiAyKSA8PCAxKTsKKwkJCQlTZXRQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKG1lbSkpOwogCQkJfQogCi0JCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzIgKiBqIC0gMV0gfD0gY3B1X3RvX2xlMzIoMSk7CisJCQlmaC0+YnVmZmVycy5idWZmZXJbaV0uanBnLmZyYWdfdGFiWzIgKiBqIC0gMV0gfD0gY3B1X3RvX2xlMzIoMSk7CiAJCX0KIAl9CiAKIAlkcHJpbnRrKDQsCi0JCUtFUk5fREVCVUcgIiVzOiBqcGdfZmJ1ZmZlcl9hbGxvYygpIC0gJWQgS0IgYWxsb2NhdGVkXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwKLQkJKGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyAqCi0JCSBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUpID4+IDEwKTsKKwkJS0VSTl9ERUJVRyAiJXM6ICVzIC0gJWQgS0IgYWxsb2NhdGVkXG4iLAorCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sCisJCShmaC0+YnVmZmVycy5udW1fYnVmZmVycyAqIGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplKSA+PiAxMCk7CiAKLQlmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMTsKKwlmaC0+YnVmZmVycy5hbGxvY2F0ZWQgPSAxOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qIGZyZWUgdGhlIE1KUEVHIGdyYWIgYnVmZmVycyAqLwotc3RhdGljIHZvaWQKLWpwZ19mYnVmZmVyX2ZyZWUgKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIHZvaWQganBnX2ZidWZmZXJfZnJlZShzdHJ1Y3Qgem9yYW5fZmggKmZoKQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAlpbnQgaSwgaiwgb2ZmOwogCXVuc2lnbmVkIGNoYXIgKm1lbTsKKwlfX2xlMzIgZnJhZ190YWI7CisJc3RydWN0IHpvcmFuX2J1ZmZlciAqYnVmZmVyOwogCi0JZHByaW50ayg0LCBLRVJOX0RFQlVHICIlczoganBnX2ZidWZmZXJfZnJlZSgpXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisJZHByaW50ayg0LCBLRVJOX0RFQlVHICIlczogJXNcbiIsIFpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKLQkJaWYgKCFmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiKQorCWZvciAoaSA9IDAsIGJ1ZmZlciA9ICZmaC0+YnVmZmVycy5idWZmZXJbMF07CisJICAgICBpIDwgZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKywgYnVmZmVyKyspIHsKKwkJaWYgKCFidWZmZXItPmpwZy5mcmFnX3RhYikKIAkJCWNvbnRpbnVlOwogCi0JCS8vaWYgKGFsbG9jX2NvbnRpZykgewotCQlpZiAoZmgtPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91cykgewotCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMF0pIHsKLQkJCQltZW0gPSAodW5zaWduZWQgY2hhciAqKSBidXNfdG9fdmlydChsZTMyX3RvX2NwdSgKLQkJCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlswXSkpOwotCQkJCWZvciAob2ZmID0gMDsKLQkJCQkgICAgIG9mZiA8IGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJCQkgICAgIG9mZiArPSBQQUdFX1NJWkUpCi0JCQkJCUNsZWFyUGFnZVJlc2VydmVkKE1BUF9OUgotCQkJCQkJCSAgKG1lbSArIG9mZikpOworCQlpZiAoZmgtPmJ1ZmZlcnMubmVlZF9jb250aWd1b3VzKSB7CisJCQlmcmFnX3RhYiA9IGJ1ZmZlci0+anBnLmZyYWdfdGFiWzBdOworCisJCQlpZiAoZnJhZ190YWIpIHsKKwkJCQltZW0gPSBidXNfdG9fdmlydChsZTMyX3RvX2NwdShmcmFnX3RhYikpOworCQkJCWZvciAob2ZmID0gMDsgb2ZmIDwgZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemU7IG9mZiArPSBQQUdFX1NJWkUpCisJCQkJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShtZW0gKyBvZmYpKTsKIAkJCQlrZnJlZShtZW0pOwotCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMF0gPSAwOwotCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMV0gPSAwOworCQkJCWJ1ZmZlci0+anBnLmZyYWdfdGFiWzBdID0gMDsKKwkJCQlidWZmZXItPmpwZy5mcmFnX3RhYlsxXSA9IDA7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlmb3IgKGogPSAwOwotCQkJICAgICBqIDwgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplIC8gUEFHRV9TSVpFOwotCQkJICAgICBqKyspIHsKLQkJCQlpZiAoIWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uCi0JCQkJICAgIGZyYWdfdGFiWzIgKiBqXSkKKwkJCWZvciAoaiA9IDA7IGogPCBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSAvIFBBR0VfU0laRTsgaisrKSB7CisJCQkJZnJhZ190YWIgPSBidWZmZXItPmpwZy5mcmFnX3RhYlsyICogal07CisKKwkJCQlpZiAoIWZyYWdfdGFiKQogCQkJCQlicmVhazsKLQkJCQlDbGVhclBhZ2VSZXNlcnZlZChNQVBfTlIKLQkJCQkJCSAgKGJ1c190b192aXJ0Ci0JCQkJCQkgICAobGUzMl90b19jcHUKLQkJCQkJCSAgICAoZmgtPmpwZ19idWZmZXJzLgotCQkJCQkJICAgICBidWZmZXJbaV0uZnJhZ190YWJbMiAqCi0JCQkJCQkJCSAgICAgICBqXSkpKSk7Ci0JCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKQotCQkJCQkgIGJ1c190b192aXJ0Ci0JCQkJCQkgIChsZTMyX3RvX2NwdQotCQkJCQkJICAgKGZoLT5qcGdfYnVmZmVycy4KLQkJCQkJCSAgICAgIGJ1ZmZlcltpXS4KLQkJCQkJCSAgICAgIGZyYWdfdGFiWzIgKiBqXSkpKTsKLQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzIgKiBqXSA9Ci0JCQkJICAgIDA7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsyICogaiArCi0JCQkJCQkJCSAgIDFdID0gMDsKKwkJCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoYnVzX3RvX3ZpcnQobGUzMl90b19jcHUoZnJhZ190YWIpKSkpOworCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidXNfdG9fdmlydChsZTMyX3RvX2NwdShmcmFnX3RhYikpKTsKKwkJCQlidWZmZXItPmpwZy5mcmFnX3RhYlsyICogal0gPSAwOworCQkJCWJ1ZmZlci0+anBnLmZyYWdfdGFiWzIgKiBqICsgMV0gPSAwOwogCQkJfQogCQl9CiAKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLgotCQkJICBmcmFnX3RhYik7Ci0JCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWIgPSBOVUxMOworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyLT5qcGcuZnJhZ190YWIpOworCQlidWZmZXItPmpwZy5mcmFnX3RhYiA9IE5VTEw7CiAJfQogCi0JZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMDsKKwlmaC0+YnVmZmVycy5hbGxvY2F0ZWQgPSAwOwogfQogCiAvKgpAQCAtNjIxLDEyICs0MzYsMTEgQEAKICAqLwogCiBzdGF0aWMgaW50Ci16b3Jhbl92NGxfc2V0X2Zvcm1hdCAoc3RydWN0IGZpbGUgICAgICAgICAgICAgICAqZmlsZSwKK3pvcmFuX3Y0bF9zZXRfZm9ybWF0IChzdHJ1Y3Qgem9yYW5fZmggICAgICAgICAgICpmaCwKIAkJICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCiAJCSAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwKIAkJICAgICAgY29uc3Qgc3RydWN0IHpvcmFuX2Zvcm1hdCAqZm9ybWF0KQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAlpbnQgYnBwOwogCkBAIC02MzYsMTkgKzQ1MCwxOSBAQAogCSAgICBoZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCB8fCB3aWR0aCA+IEJVWl9NQVhfV0lEVEgpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogdjRsX3NldF9mb3JtYXQoKSAtIHdyb25nIGZyYW1lIHNpemUgKCVkeCVkKVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB3aWR0aCwgaGVpZ2h0KTsKKwkJCSIlczogJXMgLSB3cm9uZyBmcmFtZSBzaXplICglZHglZClcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIHdpZHRoLCBoZWlnaHQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlicHAgPSAoZm9ybWF0LT5kZXB0aCArIDcpIC8gODsKIAogCS8qIENoZWNrIGFnYWluc3QgYXZhaWxhYmxlIGJ1ZmZlciBzaXplICovCi0JaWYgKGhlaWdodCAqIHdpZHRoICogYnBwID4gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplKSB7CisJaWYgKGhlaWdodCAqIHdpZHRoICogYnBwID4gZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogdjRsX3NldF9mb3JtYXQoKSAtIHZpZGVvIGJ1ZmZlciBzaXplICglZCBrQikgaXMgdG9vIHNtYWxsXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSA+PiAxMCk7CisJCQkiJXM6ICVzIC0gdmlkZW8gYnVmZmVyIHNpemUgKCVkIGtCKSBpcyB0b28gc21hbGxcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplID4+IDEwKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC02NTcsOCArNDcxLDggQEAKIAlpZiAoKGJwcCA9PSAyICYmICh3aWR0aCAmIDEpKSB8fCAoYnBwID09IDMgJiYgKHdpZHRoICYgMykpKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHY0bF9zZXRfZm9ybWF0KCkgLSB3cm9uZyBmcmFtZSBhbGluZ21lbnRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gd3JvbmcgZnJhbWUgYWxpZ25tZW50XG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC02NzAsNDMgKzQ4NCw0MCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci16b3Jhbl92NGxfcXVldWVfZnJhbWUgKHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICAgICAgaW50ICAgICAgICAgIG51bSkKK3N0YXRpYyBpbnQgem9yYW5fdjRsX3F1ZXVlX2ZyYW1lKHN0cnVjdCB6b3Jhbl9maCAqZmgsIGludCBudW0pCiB7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJlcyA9IDA7CiAKLQlpZiAoIWZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKKwlpZiAoIWZoLT5idWZmZXJzLmFsbG9jYXRlZCkgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiB2NGxfcXVldWVfZnJhbWUoKSAtIGJ1ZmZlcnMgbm90IHlldCBhbGxvY2F0ZWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gYnVmZmVycyBub3QgeWV0IGFsbG9jYXRlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJlcyA9IC1FTk9NRU07CiAJfQogCiAJLyogTm8gZ3JhYmJpbmcgb3V0c2lkZSB0aGUgYnVmZmVyIHJhbmdlISAqLwotCWlmIChudW0gPj0gZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzIHx8IG51bSA8IDApIHsKKwlpZiAobnVtID49IGZoLT5idWZmZXJzLm51bV9idWZmZXJzIHx8IG51bSA8IDApIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogdjRsX3F1ZXVlX2ZyYW1lKCkgLSBidWZmZXIgJWQgaXMgb3V0IG9mIHJhbmdlXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIG51bSk7CisJCQkiJXM6ICVzIC0gYnVmZmVyICVkIGlzIG91dCBvZiByYW5nZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgbnVtKTsKIAkJcmVzID0gLUVJTlZBTDsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CiAKLQlpZiAoZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CisJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CiAJCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKLQkJCXpyLT52NGxfYnVmZmVycyA9IGZoLT52NGxfYnVmZmVyczsKLQkJCWZoLT52NGxfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9BQ1RJVkU7CisJCQl6ci0+djRsX2J1ZmZlcnMgPSBmaC0+YnVmZmVyczsKKwkJCWZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0FDVElWRTsKIAkJfSBlbHNlIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczogdjRsX3F1ZXVlX2ZyYW1lKCkgLSBhbm90aGVyIHNlc3Npb24gaXMgYWxyZWFkeSBjYXB0dXJpbmdcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSBhbm90aGVyIHNlc3Npb24gaXMgYWxyZWFkeSBjYXB0dXJpbmdcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCXJlcyA9IC1FQlVTWTsKIAkJfQogCX0KQEAgLTcxNyw3ICs1MjgsNyBAQAogCQlkZWZhdWx0OgogCQljYXNlIEJVWl9TVEFURV9QRU5EOgogCQkJaWYgKHpyLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgewotCQkJCWZoLT52NGxfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOworCQkJCWZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CiAJCQkJenItPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7CiAJCQl9CiAJCQlyZXMgPSAtRUJVU1k7CS8qIHdoYXQgYXJlIHlvdSBkb2luZz8gKi8KQEAgLTcyNSwxOSArNTM2LDE3IEBACiAJCWNhc2UgQlVaX1NUQVRFX0RPTkU6CiAJCQlkcHJpbnRrKDIsCiAJCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiB2NGxfcXVldWVfZnJhbWUoKSAtIHF1ZXVlaW5nIGJ1ZmZlciAlZCBpbiBzdGF0ZSBET05FIT9cbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIG51bSk7CisJCQkJIiVzOiAlcyAtIHF1ZXVlaW5nIGJ1ZmZlciAlZCBpbiBzdGF0ZSBET05FIT9cbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBudW0pOwogCQljYXNlIEJVWl9TVEFURV9VU0VSOgogCQkJLyogc2luY2UgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHVudXNlZCBidWZmZXIgdGhlcmUncyByb29tIGZvciBhdCBsZWFzdAogCQkJICogb25lIG1vcmUgcGVuZFtdIGVudHJ5ICovCi0JCQl6ci0+djRsX3BlbmRbenItPnY0bF9wZW5kX2hlYWQrKyAmCi0JCQkJCVY0TF9NQVNLX0ZSQU1FXSA9IG51bTsKKwkJCXpyLT52NGxfcGVuZFt6ci0+djRsX3BlbmRfaGVhZCsrICYgVjRMX01BU0tfRlJBTUVdID0gbnVtOwogCQkJenItPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID0gQlVaX1NUQVRFX1BFTkQ7CiAJCQl6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMubGVuZ3RoID0KIAkJCSAgICBmaC0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZSAqCiAJCQkgICAgenItPnY0bF9zZXR0aW5ncy5oZWlnaHQ7Ci0JCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0gPQotCQkJICAgIHpyLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXTsKKwkJCWZoLT5idWZmZXJzLmJ1ZmZlcltudW1dID0genItPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC03NDUsNjUgKzU1NCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CiAKIAlpZiAoIXJlcyAmJiB6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpCi0JCXpyLT52NGxfYnVmZmVycy5hY3RpdmUgPSBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlOwotCi0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludAotdjRsX2dyYWIgKHN0cnVjdCBmaWxlICAgICAgICpmaWxlLAotCSAgc3RydWN0IHZpZGVvX21tYXAgKm1wKQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKLQlpbnQgcmVzID0gMCwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKSB7Ci0JCWlmICh6b3Jhbl9mb3JtYXRzW2ldLnBhbGV0dGUgPT0gbXAtPmZvcm1hdCAmJgotCQkgICAgem9yYW5fZm9ybWF0c1tpXS5mbGFncyAmIFpPUkFOX0ZPUk1BVF9DQVBUVVJFICYmCi0JCSAgICAhKHpvcmFuX2Zvcm1hdHNbaV0uZmxhZ3MgJiBaT1JBTl9GT1JNQVRfQ09NUFJFU1NFRCkpCi0JCQlicmVhazsKLQl9Ci0JaWYgKGkgPT0gTlVNX0ZPUk1BVFMgfHwgem9yYW5fZm9ybWF0c1tpXS5kZXB0aCA9PSAwKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHY0bF9ncmFiKCkgLSB3cm9uZyBieXRlcy1wZXItcGl4ZWwgZm9ybWF0XG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIFRvIG1pbmltaXplIHRoZSB0aW1lIHNwZW50IGluIHRoZSBJUlEgcm91dGluZSwgd2UgYXZvaWQgc2V0dGluZyB1cAotCSAqIHRoZSB2aWRlbyBmcm9udCBlbmQgdGhlcmUuCi0JICogSWYgdGhpcyBncmFiIGhhcyBkaWZmZXJlbnQgcGFyYW1ldGVycyBmcm9tIGEgcnVubmluZyBzdHJlYW1pbmcgY2FwdHVyZQotCSAqIHdlIHN0b3AgdGhlIHN0cmVhbWluZyBjYXB0dXJlIGFuZCBzdGFydCBpdCBvdmVyIGFnYWluLgotCSAqLwotCWlmICh6ci0+djRsX21lbWdyYWJfYWN0aXZlICYmCi0JICAgICh6ci0+djRsX3NldHRpbmdzLndpZHRoICE9IG1wLT53aWR0aCB8fAotCSAgICAgenItPnY0bF9zZXR0aW5ncy5oZWlnaHQgIT0gbXAtPmhlaWdodCB8fAotCSAgICAgenItPnY0bF9zZXR0aW5ncy5mb3JtYXQtPnBhbGV0dGUgIT0gbXAtPmZvcm1hdCkpIHsKLQkJcmVzID0gd2FpdF9ncmFiX3BlbmRpbmcoenIpOwotCQlpZiAocmVzKQotCQkJcmV0dXJuIHJlczsKLQl9Ci0JaWYgKChyZXMgPSB6b3Jhbl92NGxfc2V0X2Zvcm1hdChmaWxlLAotCQkJCQltcC0+d2lkdGgsCi0JCQkJCW1wLT5oZWlnaHQsCi0JCQkJCSZ6b3Jhbl9mb3JtYXRzW2ldKSkpCi0JCXJldHVybiByZXM7Ci0JenItPnY0bF9zZXR0aW5ncyA9IGZoLT52NGxfc2V0dGluZ3M7Ci0KLQkvKiBxdWV1ZSB0aGUgZnJhbWUgaW4gdGhlIHBlbmRpbmcgcXVldWUgKi8KLQlpZiAoKHJlcyA9IHpvcmFuX3Y0bF9xdWV1ZV9mcmFtZShmaWxlLCBtcC0+ZnJhbWUpKSkgewotCQlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKLQkJcmV0dXJuIHJlczsKLQl9Ci0KLQkvKiBwdXQgdGhlIDM2MDU3IGludG8gZnJhbWUgZ3JhYmJpbmcgbW9kZSAqLwotCWlmICghcmVzICYmICF6ci0+djRsX21lbWdyYWJfYWN0aXZlKQotCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAxKTsKLQotCS8vZHByaW50ayg0LCBLRVJOX0lORk8gIiVzOiBGcmFtZSBncmFiIDMuLi5cbiIsIFpSX0RFVk5BTUUoenIpKTsKKwkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IGZoLT5idWZmZXJzLmFjdGl2ZTsKIAogCXJldHVybiByZXM7CiB9CkBAIC04MTIsMjcgKzU2MywyNCBAQAogICogU3luYyBvbiBhIFY0TCBidWZmZXIKICAqLwogCi1zdGF0aWMgaW50Ci12NGxfc3luYyAoc3RydWN0IGZpbGUgKmZpbGUsCi0JICBpbnQgICAgICAgICAgZnJhbWUpCitzdGF0aWMgaW50IHY0bF9zeW5jKHN0cnVjdCB6b3Jhbl9maCAqZmgsIGludCBmcmFtZSkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKKwlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogdjRsX3N5bmMoKSAtIG5vIGdyYWIgYWN0aXZlIGZvciB0aGlzIHNlc3Npb25cbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gbm8gZ3JhYiBhY3RpdmUgZm9yIHRoaXMgc2Vzc2lvblxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIGNoZWNrIHBhc3NlZC1pbiBmcmFtZSBudW1iZXIgKi8KLQlpZiAoZnJhbWUgPj0gZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzIHx8IGZyYW1lIDwgMCkgeworCWlmIChmcmFtZSA+PSBmaC0+YnVmZmVycy5udW1fYnVmZmVycyB8fCBmcmFtZSA8IDApIHsKIAkJZHByaW50aygxLAotCQkJS0VSTl9FUlIgIiVzOiB2NGxfc3luYygpIC0gZnJhbWUgJWQgaXMgaW52YWxpZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBmcmFtZSk7CisJCQlLRVJOX0VSUiAiJXM6ICVzIC0gZnJhbWUgJWQgaXMgaW52YWxpZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgZnJhbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTg0MCwxNSArNTg4LDE0IEBACiAJaWYgKHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID09IEJVWl9TVEFURV9VU0VSKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHY0bF9zeW5jKCkgLSBhdHRlbXB0IHRvIHN5bmMgb24gYSBidWZmZXIgd2hpY2ggd2FzIG5vdCBxdWV1ZWQ/XG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIGF0dGVtcHQgdG8gc3luYyBvbiBhIGJ1ZmZlciB3aGljaCB3YXMgbm90IHF1ZXVlZD9cbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVQUk9UTzsKIAl9CiAKIAkvKiB3YWl0IG9uIHRoaXMgYnVmZmVyIHRvIGdldCByZWFkeSAqLwogCWlmICghd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoenItPnY0bF9jYXBxLAotCQkJCSh6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSAhPSBCVVpfU1RBVEVfUEVORCksCi0JCQkJMTAqSFopKQorCQkoenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgIT0gQlVaX1NUQVRFX1BFTkQpLCAxMCpIWikpCiAJCXJldHVybiAtRVRJTUU7CiAJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwpAQCAtODU2LDExICs2MDMsMTEgQEAKIAkvKiBidWZmZXIgc2hvdWxkIG5vdyBiZSBpbiBCVVpfU1RBVEVfRE9ORSAqLwogCWlmICh6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSAhPSBCVVpfU1RBVEVfRE9ORSkKIAkJZHByaW50aygyLAotCQkJS0VSTl9FUlIgIiVzOiB2NGxfc3luYygpIC0gaW50ZXJuYWwgc3RhdGUgZXJyb3JcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlLRVJOX0VSUiAiJXM6ICVzIC0gaW50ZXJuYWwgc3RhdGUgZXJyb3JcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCiAJenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgPSBCVVpfU1RBVEVfVVNFUjsKLQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXSA9IHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdOworCWZoLT5idWZmZXJzLmJ1ZmZlcltmcmFtZV0gPSB6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKIApAQCAtODY4LDggKzYxNSw3IEBACiAJaWYgKHpyLT52NGxfcGVuZF90YWlsID09IHpyLT52NGxfcGVuZF9oZWFkKSB7CiAJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDApOwogCQlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9BQ1RJVkUpIHsKLQkJCWZoLT52NGxfYnVmZmVycy5hY3RpdmUgPSB6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0KLQkJCSAgICBaT1JBTl9GUkVFOworCQkJZmgtPmJ1ZmZlcnMuYWN0aXZlID0genItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CiAJCQl6ci0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKIAkJfQogCX0KQEAgLTg4MywzMSArNjI5LDI4IEBACiAgKiAgIFF1ZXVlIGEgTUpQRUcgYnVmZmVyIGZvciBjYXB0dXJlL3BsYXliYWNrCiAgKi8KIAotc3RhdGljIGludAotem9yYW5fanBnX3F1ZXVlX2ZyYW1lIChzdHJ1Y3QgZmlsZSAgICAgICAgICAqZmlsZSwKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAgICBudW0sCi0JCSAgICAgICBlbnVtIHpvcmFuX2NvZGVjX21vZGUgbW9kZSkKK3N0YXRpYyBpbnQgem9yYW5fanBnX3F1ZXVlX2ZyYW1lKHN0cnVjdCB6b3Jhbl9maCAqZmgsIGludCBudW0sCisJCQkJIGVudW0gem9yYW5fY29kZWNfbW9kZSBtb2RlKQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXMgPSAwOwogCiAJLyogQ2hlY2sgaWYgYnVmZmVycyBhcmUgYWxsb2NhdGVkICovCi0JaWYgKCFmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkKSB7CisJaWYgKCFmaC0+YnVmZmVycy5hbGxvY2F0ZWQpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczoganBnX3F1ZXVlX2ZyYW1lKCkgLSBidWZmZXJzIG5vdCB5ZXQgYWxsb2NhdGVkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIGJ1ZmZlcnMgbm90IHlldCBhbGxvY2F0ZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAkvKiBObyBncmFiYmluZyBvdXRzaWRlIHRoZSBidWZmZXIgcmFuZ2UhICovCi0JaWYgKG51bSA+PSBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgfHwgbnVtIDwgMCkgeworCWlmIChudW0gPj0gZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnMgfHwgbnVtIDwgMCkgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBqcGdfcXVldWVfZnJhbWUoKSAtIGJ1ZmZlciAlZCBvdXQgb2YgcmFuZ2VcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgbnVtKTsKKwkJCSIlczogJXMgLSBidWZmZXIgJWQgb3V0IG9mIHJhbmdlXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBudW0pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTkxOCwyMCArNjYxLDIwIEBACiAJCS8qIHdyb25nIGNvZGVjIG1vZGUgYWN0aXZlIC0gaW52YWxpZCAqLwogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBqcGdfcXVldWVfZnJhbWUoKSAtIGNvZGVjIGluIHdyb25nIG1vZGVcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gY29kZWMgaW4gd3JvbmcgbW9kZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKKwlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKIAkJaWYgKHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgewotCQkJenItPmpwZ19idWZmZXJzID0gZmgtPmpwZ19idWZmZXJzOwotCQkJZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0FDVElWRTsKKwkJCXpyLT5qcGdfYnVmZmVycyA9IGZoLT5idWZmZXJzOworCQkJZmgtPmJ1ZmZlcnMuYWN0aXZlID0gWk9SQU5fQUNUSVZFOwogCQl9IGVsc2UgewogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBqcGdfcXVldWVfZnJhbWUoKSAtIGFub3RoZXIgc2Vzc2lvbiBpcyBhbHJlYWR5IGNhcHR1cmluZ1xuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJIiVzOiAlcyAtIGFub3RoZXIgc2Vzc2lvbiBpcyBhbHJlYWR5IGNhcHR1cmluZ1xuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQkJcmVzID0gLUVCVVNZOwogCQl9CiAJfQpAQCAtOTQ4LDIzICs2OTEsMjEgQEAKIAkJY2FzZSBCVVpfU1RBVEVfRE9ORToKIAkJCWRwcmludGsoMiwKIAkJCQlLRVJOX1dBUk5JTkcKLQkJCQkiJXM6IGpwZ19xdWV1ZV9mcmFtZSgpIC0gcXVlaW5nIGZyYW1lIGluIEJVWl9TVEFURV9ET05FIHN0YXRlIT9cbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSBxdWVpbmcgZnJhbWUgaW4gQlVaX1NUQVRFX0RPTkUgc3RhdGUhP1xuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQljYXNlIEJVWl9TVEFURV9VU0VSOgogCQkJLyogc2luY2UgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHVudXNlZCBidWZmZXIgdGhlcmUncyByb29tIGZvciBhdAogCQkJICpsZWFzdCBvbmUgbW9yZSBwZW5kW10gZW50cnkgKi8KLQkJCXpyLT5qcGdfcGVuZFt6ci0+anBnX3F1ZV9oZWFkKysgJiBCVVpfTUFTS19GUkFNRV0gPQotCQkJICAgIG51bTsKKwkJCXpyLT5qcGdfcGVuZFt6ci0+anBnX3F1ZV9oZWFkKysgJiBCVVpfTUFTS19GUkFNRV0gPSBudW07CiAJCQl6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPSBCVVpfU1RBVEVfUEVORDsKLQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXSA9Ci0JCQkgICAgenItPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dOworCQkJZmgtPmJ1ZmZlcnMuYnVmZmVyW251bV0gPSB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV07CiAJCQl6b3Jhbl9mZWVkX3N0YXRfY29tKHpyKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQljYXNlIEJVWl9TVEFURV9ETUE6CiAJCWNhc2UgQlVaX1NUQVRFX1BFTkQ6CiAJCQlpZiAoenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CisJCQkJZmgtPmJ1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKIAkJCQl6ci0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKIAkJCX0KIAkJCXJlcyA9IC1FQlVTWTsJLyogd2hhdCBhcmUgeW91IGRvaW5nPyAqLwpAQCAtOTc0LDQ3ICs3MTUsNDEgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwogCi0JaWYgKCFyZXMgJiYgenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7Ci0JCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlOwotCX0KKwlpZiAoIXJlcyAmJiB6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpCisJCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBmaC0+YnVmZmVycy5hY3RpdmU7CiAKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgaW50Ci1qcGdfcWJ1ZiAoc3RydWN0IGZpbGUgICAgICAgICAgKmZpbGUsCi0JICBpbnQgICAgICAgICAgICAgICAgICAgZnJhbWUsCi0JICBlbnVtIHpvcmFuX2NvZGVjX21vZGUgbW9kZSkKK3N0YXRpYyBpbnQganBnX3FidWYoc3RydWN0IHpvcmFuX2ZoICpmaCwgaW50IGZyYW1lLCBlbnVtIHpvcmFuX2NvZGVjX21vZGUgbW9kZSkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJaW50IHJlcyA9IDA7CiAKIAkvKiBEb2VzIHRoZSB1c2VyIHdhbnQgdG8gc3RvcCBzdHJlYW1pbmc/ICovCiAJaWYgKGZyYW1lIDwgMCkgewogCQlpZiAoenItPmNvZGVjX21vZGUgPT0gbW9kZSkgewotCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgeworCQkJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CiAJCQkJZHByaW50aygxLAogCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IGpwZ19xYnVmKC0xKSAtIHNlc3Npb24gbm90IGFjdGl2ZVxuIiwKLQkJCQkJWlJfREVWTkFNRSh6cikpOworCQkJCQkiJXM6ICVzKC0xKSAtIHNlc3Npb24gbm90IGFjdGl2ZVxuIiwKKwkJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KLQkJCWZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPSB6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0KLQkJCSAgICBaT1JBTl9GUkVFOworCQkJZmgtPmJ1ZmZlcnMuYWN0aXZlID0genItPmpwZ19idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CiAJCQl6ci0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKIAkJCXpyMzYwNTdfZW5hYmxlX2pwZyh6ciwgQlVaX01PREVfSURMRSk7CiAJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczoganBnX3FidWYoKSAtIHN0b3Agc3RyZWFtaW5nIGJ1dCBub3QgaW4gc3RyZWFtaW5nIG1vZGVcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSBzdG9wIHN0cmVhbWluZyBidXQgbm90IGluIHN0cmVhbWluZyBtb2RlXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAotCWlmICgocmVzID0gem9yYW5fanBnX3F1ZXVlX2ZyYW1lKGZpbGUsIGZyYW1lLCBtb2RlKSkpCisJaWYgKChyZXMgPSB6b3Jhbl9qcGdfcXVldWVfZnJhbWUoZmgsIGZyYW1lLCBtb2RlKSkpCiAJCXJldHVybiByZXM7CiAKIAkvKiBTdGFydCB0aGUganBlZyBjb2RlYyB3aGVuIHRoZSBmaXJzdCBmcmFtZSBpcyBxdWV1ZWQgICovCkBAIC0xMDI4LDI4ICs3NjMsMjUgQEAKICAqICAgU3luYyBvbiBhIE1KUEVHIGJ1ZmZlcgogICovCiAKLXN0YXRpYyBpbnQKLWpwZ19zeW5jIChzdHJ1Y3QgZmlsZSAgICAgICAqZmlsZSwKLQkgIHN0cnVjdCB6b3Jhbl9zeW5jICpicykKK3N0YXRpYyBpbnQganBnX3N5bmMoc3RydWN0IHpvcmFuX2ZoICpmaCwgc3RydWN0IHpvcmFuX3N5bmMgKmJzKQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBmcmFtZTsKIAotCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKKwlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczoganBnX3N5bmMoKSAtIGNhcHR1cmUgaXMgbm90IGN1cnJlbnRseSBhY3RpdmVcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gY2FwdHVyZSBpcyBub3QgY3VycmVudGx5IGFjdGl2ZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MgJiYKIAkgICAgenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IGpwZ19zeW5jKCkgLSBjb2RlYyBub3QgaW4gc3RyZWFtaW5nIG1vZGVcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gY29kZWMgbm90IGluIHN0cmVhbWluZyBtb2RlXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmICghd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoenItPmpwZ19jYXBxLApAQCAtMTA2NCw4ICs3OTYsOCBAQAogCQkJCQkgICBzaXplb2YoaXNyKSwgJmlzcik7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IGpwZ19zeW5jKCkgLSB0aW1lb3V0OiBjb2RlYyBpc3I9MHglMDJ4XG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGlzcik7CisJCQkiJXM6ICVzIC0gdGltZW91dDogY29kZWMgaXNyPTB4JTAyeFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgaXNyKTsKIAogCQlyZXR1cm4gLUVUSU1FOwogCkBAIC0xMDgzLDI4ICs4MTUsMjYgQEAKIAkvKiBidWZmZXIgc2hvdWxkIG5vdyBiZSBpbiBCVVpfU1RBVEVfRE9ORSAqLwogCWlmICh6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSAhPSBCVVpfU1RBVEVfRE9ORSkKIAkJZHByaW50aygyLAotCQkJS0VSTl9FUlIgIiVzOiBqcGdfc3luYygpIC0gaW50ZXJuYWwgc3RhdGUgZXJyb3JcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlLRVJOX0VSUiAiJXM6ICVzIC0gaW50ZXJuYWwgc3RhdGUgZXJyb3JcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCiAJKmJzID0genItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uYnM7CiAJYnMtPmZyYW1lID0gZnJhbWU7CiAJenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgPSBCVVpfU1RBVEVfVVNFUjsKLQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXSA9IHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdOworCWZoLT5idWZmZXJzLmJ1ZmZlcltmcmFtZV0gPSB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkCi16b3Jhbl9vcGVuX2luaXRfc2Vzc2lvbiAoc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgdm9pZCB6b3Jhbl9vcGVuX2luaXRfc2Vzc2lvbihzdHJ1Y3Qgem9yYW5fZmggKmZoKQogewogCWludCBpOwotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAogCS8qIFBlciBkZWZhdWx0LCBtYXAgdGhlIFY0TCBCdWZmZXJzICovCi0JZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfUkFXOworCW1hcF9tb2RlX3JhdyhmaCk7CiAKIAkvKiB0YWtlIG92ZXIgdGhlIGNhcmQncyBjdXJyZW50IHNldHRpbmdzICovCiAJZmgtPm92ZXJsYXlfc2V0dGluZ3MgPSB6ci0+b3ZlcmxheV9zZXR0aW5nczsKQEAgLTExMTQsNDAgKzg0NCwyMSBAQAogCiAJLyogdjRsIHNldHRpbmdzICovCiAJZmgtPnY0bF9zZXR0aW5ncyA9IHpyLT52NGxfc2V0dGluZ3M7Ci0KLQkvKiB2NGxfYnVmZmVycyAqLwotCW1lbXNldCgmZmgtPnY0bF9idWZmZXJzLCAwLCBzaXplb2Yoc3RydWN0IHpvcmFuX3Y0bF9zdHJ1Y3QpKTsKLQlmb3IgKGkgPSAwOyBpIDwgVklERU9fTUFYX0ZSQU1FOyBpKyspIHsKLQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5zdGF0ZSA9IEJVWl9TVEFURV9VU0VSOwkvKiBub3RoaW5nIGdvaW5nIG9uICovCi0JCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uYnMuZnJhbWUgPSBpOwotCX0KLQlmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQlmaC0+djRsX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQgPSAwOwotCWZoLT52NGxfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOwotCWZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSA9IHY0bF9idWZzaXplOwotCWZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyA9IHY0bF9uYnVmczsKLQogCS8qIGpwZyBzZXR0aW5ncyAqLwogCWZoLT5qcGdfc2V0dGluZ3MgPSB6ci0+anBnX3NldHRpbmdzOwogCi0JLyoganBnX2J1ZmZlcnMgKi8KLQltZW1zZXQoJmZoLT5qcGdfYnVmZmVycywgMCwgc2l6ZW9mKHN0cnVjdCB6b3Jhbl9qcGdfc3RydWN0KSk7Ci0JZm9yIChpID0gMDsgaSA8IEJVWl9NQVhfRlJBTUU7IGkrKykgewotCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLnN0YXRlID0gQlVaX1NUQVRFX1VTRVI7CS8qIG5vdGhpbmcgZ29pbmcgb24gKi8KLQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5icy5mcmFtZSA9IGk7CisJLyogYnVmZmVycyAqLworCW1lbXNldCgmZmgtPmJ1ZmZlcnMsIDAsIHNpemVvZihmaC0+YnVmZmVycykpOworCWZvciAoaSA9IDA7IGkgPCBNQVhfRlJBTUU7IGkrKykgeworCQlmaC0+YnVmZmVycy5idWZmZXJbaV0uc3RhdGUgPSBCVVpfU1RBVEVfVVNFUjsJLyogbm90aGluZyBnb2luZyBvbiAqLworCQlmaC0+YnVmZmVycy5idWZmZXJbaV0uYnMuZnJhbWUgPSBpOwogCX0KLQlmaC0+anBnX2J1ZmZlcnMubmVlZF9jb250aWd1b3VzID0genItPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91czsKLQlmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQlmaC0+anBnX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQgPSAwOwotCWZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOwotCWZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSA9IGpwZ19idWZzaXplOwotCWZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyA9IGpwZ19uYnVmczsKKwlmaC0+YnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCWZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CiB9CiAKLXN0YXRpYyB2b2lkCi16b3Jhbl9jbG9zZV9lbmRfc2Vzc2lvbiAoc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgdm9pZCB6b3Jhbl9jbG9zZV9lbmRfc2Vzc2lvbihzdHJ1Y3Qgem9yYW5fZmggKmZoKQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAogCS8qIG92ZXJsYXkgKi8KQEAgLTExNTksMzYgKzg3MCwzMiBAQAogCQl6ci0+b3ZlcmxheV9tYXNrID0gTlVMTDsKIAl9CiAKLQkvKiB2NGwgY2FwdHVyZSAqLwotCWlmIChmaC0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVykgeworCQkvKiB2NGwgY2FwdHVyZSAqLworCQlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAwKTsKLQkJenItPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JCXpyLT52NGxfYnVmZmVycy5hY3RpdmUgPSBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0KLQkJICAgIFpPUkFOX0ZSRUU7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCX0KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDApOworCQkJenItPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisJCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPmJ1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCQl9CiAKLQkvKiB2NGwgYnVmZmVycyAqLwotCWlmIChmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkIHx8Ci0JICAgIGZoLT52NGxfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCkgewotCQl2NGxfZmJ1ZmZlcl9mcmVlKGZpbGUpOwotCX0KKwkJLyogdjRsIGJ1ZmZlcnMgKi8KKwkJaWYgKGZoLT5idWZmZXJzLmFsbG9jYXRlZCkKKwkJCXY0bF9mYnVmZmVyX2ZyZWUoZmgpOworCX0gZWxzZSB7CisJCS8qIGpwZyBjYXB0dXJlICovCisJCWlmIChmaC0+YnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgeworCQkJenIzNjA1N19lbmFibGVfanBnKHpyLCBCVVpfTU9ERV9JRExFKTsKKwkJCXpyLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCQkJenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9IGZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CisJCX0KIAotCS8qIGpwZyBjYXB0dXJlICovCi0JaWYgKGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgewotCQl6cjM2MDU3X2VuYWJsZV9qcGcoenIsIEJVWl9NT0RFX0lETEUpOwotCQl6ci0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQkJenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9IGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPQotCQkgICAgWk9SQU5fRlJFRTsKLQl9Ci0KLQkvKiBqcGcgYnVmZmVycyAqLwotCWlmIChmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkIHx8Ci0JICAgIGZoLT5qcGdfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCkgewotCQlqcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOworCQkvKiBqcGcgYnVmZmVycyAqLworCQlpZiAoZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkKQorCQkJanBnX2ZidWZmZXJfZnJlZShmaCk7CiAJfQogfQogCkBAIC0xMjAyLDE1ICs5MDksMTEgQEAKIAlzdHJ1Y3Qgem9yYW5fZmggKmZoOwogCWludCByZXMsIGZpcnN0X29wZW4gPSAwOwogCi0JZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiB6b3Jhbl9vcGVuKCVzLCBwaWQ9WyVkXSksIHVzZXJzKC0pPSVkXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIHpyLT51c2VyICsgMSk7CisJZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiAlcyglcywgcGlkPVslZF0pLCB1c2VycygtKT0lZFxuIiwKKwkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgenItPnVzZXIgKyAxKTsKIAogCWxvY2tfa2VybmVsKCk7CiAKLQkvKiBzZWUgZnMvZGV2aWNlLmMgLSB0aGUga2VybmVsIGFscmVhZHkgbG9ja3MgZHVyaW5nIG9wZW4oKSwKLQkgKiBzbyBsb2NraW5nIG91cnNlbHZlcyBvbmx5IGNhdXNlcyBkZWFkbG9ja3MgKi8KLQkvKm11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsqLwotCiAJaWYgKHpyLT51c2VyID49IDIwNDgpIHsKIAkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IHRvbyBtYW55IHVzZXJzICglZCkgb24gZGV2aWNlXG4iLAogCQkJWlJfREVWTkFNRSh6ciksIHpyLT51c2VyKTsKQEAgLTEyMTgsNDEgKzkyMSwxNSBAQAogCQlnb3RvIGZhaWxfdW5sb2NrOwogCX0KIAotCWlmICghenItPmRlY29kZXIpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIgIiVzOiBubyBUViBkZWNvZGVyIGxvYWRlZCBmb3IgZGV2aWNlIVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmVzID0gLUVJTzsKLQkJZ290byBmYWlsX3VubG9jazsKLQl9Ci0KLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHpyLT5kZWNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcikpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogZmFpbGVkIHRvIGdyYWIgb3duZXJzaGlwIG9mIHZpZGVvIGRlY29kZXJcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJlcyA9IC1FSU87Ci0JCWdvdG8gZmFpbF91bmxvY2s7Ci0JfQotCWlmICh6ci0+ZW5jb2RlciAmJgotCSAgICAhdHJ5X21vZHVsZV9nZXQoenItPmVuY29kZXItPmRyaXZlci0+ZHJpdmVyLm93bmVyKSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBmYWlsZWQgdG8gZ3JhYiBvd25lcnNoaXAgb2YgdmlkZW8gZW5jb2RlclxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmVzID0gLUVJTzsKLQkJZ290byBmYWlsX2RlY29kZXI7Ci0JfQotCiAJLyogbm93LCBjcmVhdGUgdGhlIG9wZW4oKS1zcGVjaWZpYyBmaWxlX29wcyBzdHJ1Y3QgKi8KIAlmaCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB6b3Jhbl9maCksIEdGUF9LRVJORUwpOwogCWlmICghZmgpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogem9yYW5fb3BlbigpIC0gYWxsb2NhdGlvbiBvZiB6b3Jhbl9maCBmYWlsZWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gYWxsb2NhdGlvbiBvZiB6b3Jhbl9maCBmYWlsZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXMgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWxfZW5jb2RlcjsKKwkJZ290byBmYWlsX3VubG9jazsKIAl9CiAJLyogdXNlZCB0byBiZSBCVVpfTUFYX1dJRFRIL0hFSUdIVCwgYnV0IHRoYXQgZ2l2ZXMgb3ZlcmZsb3dzCiAJICogb24gbm9ybS1jaGFuZ2UhICovCkBAIC0xMjYxLDggKzkzOCw4IEBACiAJaWYgKCFmaC0+b3ZlcmxheV9tYXNrKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHpvcmFuX29wZW4oKSAtIGFsbG9jYXRpb24gb2Ygb3ZlcmxheV9tYXNrIGZhaWxlZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSBhbGxvY2F0aW9uIG9mIG92ZXJsYXlfbWFzayBmYWlsZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXMgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxfZmg7CiAJfQpAQCAtMTI4NCwxOCArOTYxLDEzIEBACiAJLyogc2V0IGZpbGVfb3BzIHN0dWZmICovCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CiAJZmgtPnpyID0genI7Ci0Jem9yYW5fb3Blbl9pbml0X3Nlc3Npb24oZmlsZSk7CisJem9yYW5fb3Blbl9pbml0X3Nlc3Npb24oZmgpOwogCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiAwOwogCiBmYWlsX2ZoOgogCWtmcmVlKGZoKTsKLWZhaWxfZW5jb2RlcjoKLQlpZiAoenItPmVuY29kZXIpCi0JCW1vZHVsZV9wdXQoenItPmVuY29kZXItPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKLWZhaWxfZGVjb2RlcjoKLQltb2R1bGVfcHV0KHpyLT5kZWNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcik7CiBmYWlsX3VubG9jazoKIAl1bmxvY2tfa2VybmVsKCk7CiAKQEAgLTEzMTEsMTQgKzk4MywxNCBAQAogCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAotCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogem9yYW5fY2xvc2UoJXMsIHBpZD1bJWRdKSwgdXNlcnMoKyk9JWRcbiIsCi0JCVpSX0RFVk5BTUUoenIpLCBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgenItPnVzZXIgLSAxKTsKKwlkcHJpbnRrKDIsIEtFUk5fSU5GTyAiJXM6ICVzKCVzLCBwaWQ9WyVkXSksIHVzZXJzKCspPSVkXG4iLAorCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCB6ci0+dXNlciAtIDEpOwogCiAJLyoga2VybmVsIGxvY2tzIChmcy9kZXZpY2UuYyksIHNvIGRvbid0IGRvIHRoYXQgb3Vyc2VsdmVzCiAJICogKHByZXZlbnRzIGRlYWRsb2NrcykgKi8KIAkvKm11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsqLwogCi0Jem9yYW5fY2xvc2VfZW5kX3Nlc3Npb24oZmlsZSk7CisJem9yYW5fY2xvc2VfZW5kX3Nlc3Npb24oZmgpOwogCiAJaWYgKHpyLT51c2VyLS0gPT0gMSkgewkvKiBMYXN0IHByb2Nlc3MgKi8KIAkJLyogQ2xlYW4gdXAgSlBFRyBwcm9jZXNzICovCkBAIC0xMzQ2LDkgKzEwMTgsMTAgQEAKIAkJem9yYW5fc2V0X3BjaV9tYXN0ZXIoenIsIDApOwogCiAJCWlmICghcGFzc190aHJvdWdoKSB7CS8qIFN3aXRjaCB0byBjb2xvciBiYXIgKi8KLQkJCWludCB6ZXJvID0gMCwgdHdvID0gMjsKLQkJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9FTkFCTEVfT1VUUFVULCAmemVybyk7Ci0JCQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX0lOUFVULCAmdHdvKTsKKwkJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGUgPSB7IDIsIDAgfTsKKworCQkJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19zdHJlYW0sIDApOworCQkJZW5jb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCQl9CiAJfQogCkBAIC0xMzU2LDE0ICsxMDI5LDcgQEAKIAlrZnJlZShmaC0+b3ZlcmxheV9tYXNrKTsKIAlrZnJlZShmaCk7CiAKLQkvKiByZWxlYXNlIGxvY2tzIG9uIHRoZSBpMmMgbW9kdWxlcyAqLwotCW1vZHVsZV9wdXQoenItPmRlY29kZXItPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKLQlpZiAoenItPmVuY29kZXIpCi0JCW1vZHVsZV9wdXQoenItPmVuY29kZXItPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKLQotCS8qbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ki8KLQotCWRwcmludGsoNCwgS0VSTl9JTkZPICIlczogem9yYW5fY2xvc2UoKSBkb25lXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisJZHByaW50ayg0LCBLRVJOX0lORk8gIiVzOiAlcyBkb25lXG4iLCBaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzkxLDE1ICsxMDU3LDEzIEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQKLXNldHVwX2ZidWZmZXIgKHN0cnVjdCBmaWxlICAgICAgICAgICAgICAgKmZpbGUsCitzdGF0aWMgaW50IHNldHVwX2ZidWZmZXIoc3RydWN0IHpvcmFuX2ZoICpmaCwKIAkgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAqYmFzZSwKIAkgICAgICAgY29uc3Qgc3RydWN0IHpvcmFuX2Zvcm1hdCAqZm10LAogCSAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKIAkgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LAogCSAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBieXRlc3BlcmxpbmUpCiB7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwogCiAJLyogKFJvbmFsZCkgdjRsL3Y0bDIgZ3VpZGVsaW5lcyAqLwpAQCAtMTQyNyw4ICsxMDkxLDggQEAKIAkJICogZnJpZW5kbHkgYW5kIHNpbGVudGx5IGRvIGFzIGlmIG5vdGhpbmcgd2VudCB3cm9uZyAqLwogCQlkcHJpbnRrKDMsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBzZXR1cF9mYnVmZmVyKCkgLSBmb3JjZWQgb3ZlcmxheSB0dXJub2ZmIGJlY2F1c2UgZnJhbWVidWZmZXIgY2hhbmdlZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSBmb3JjZWQgb3ZlcmxheSB0dXJub2ZmIGJlY2F1c2UgZnJhbWVidWZmZXIgY2hhbmdlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXpyMzYwNTdfb3ZlcmxheSh6ciwgMCk7CiAJfQogI2VuZGlmCkBAIC0xNDM2LDMxICsxMTAwLDMxIEBACiAJaWYgKCEoZm10LT5mbGFncyAmIFpPUkFOX0ZPUk1BVF9PVkVSTEFZKSkgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBzZXR1cF9mYnVmZmVyKCkgLSBubyB2YWxpZCBvdmVybGF5IGZvcm1hdCBnaXZlblxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSBubyB2YWxpZCBvdmVybGF5IGZvcm1hdCBnaXZlblxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoaGVpZ2h0IDw9IDAgfHwgd2lkdGggPD0gMCB8fCBieXRlc3BlcmxpbmUgPD0gMCkgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBzZXR1cF9mYnVmZmVyKCkgLSBpbnZhbGlkIGhlaWdodC93aWR0aC9icGwgdmFsdWUgKCVkfCVkfCVkKVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB3aWR0aCwgaGVpZ2h0LCBieXRlc3BlcmxpbmUpOworCQkJIiVzOiAlcyAtIGludmFsaWQgaGVpZ2h0L3dpZHRoL2JwbCB2YWx1ZSAoJWR8JWR8JWQpXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCB3aWR0aCwgaGVpZ2h0LCBieXRlc3BlcmxpbmUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGJ5dGVzcGVybGluZSAmIDMpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfZmJ1ZmZlcigpIC0gYnl0ZXNwZXJsaW5lICglZCkgbXVzdCBiZSA0LWJ5dGUgYWxpZ25lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBieXRlc3BlcmxpbmUpOworCQkJIiVzOiAlcyAtIGJ5dGVzcGVybGluZSAoJWQpIG11c3QgYmUgNC1ieXRlIGFsaWduZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGJ5dGVzcGVybGluZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXpyLT5idWZmZXIuYmFzZSA9ICh2b2lkICopICgodW5zaWduZWQgbG9uZykgYmFzZSAmIH4zKTsKLQl6ci0+YnVmZmVyLmhlaWdodCA9IGhlaWdodDsKLQl6ci0+YnVmZmVyLndpZHRoID0gd2lkdGg7Ci0JenItPmJ1ZmZlci5kZXB0aCA9IGZtdC0+ZGVwdGg7CisJenItPnZidWZfYmFzZSA9ICh2b2lkICopICgodW5zaWduZWQgbG9uZykgYmFzZSAmIH4zKTsKKwl6ci0+dmJ1Zl9oZWlnaHQgPSBoZWlnaHQ7CisJenItPnZidWZfd2lkdGggPSB3aWR0aDsKKwl6ci0+dmJ1Zl9kZXB0aCA9IGZtdC0+ZGVwdGg7CiAJenItPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0ID0gZm10OwotCXpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lID0gYnl0ZXNwZXJsaW5lOworCXpyLT52YnVmX2J5dGVzcGVybGluZSA9IGJ5dGVzcGVybGluZTsKIAogCS8qIFRoZSB1c2VyIHNob3VsZCBzZXQgbmV3IHdpbmRvdyBwYXJhbWV0ZXJzICovCiAJenItPm92ZXJsYXlfc2V0dGluZ3MuaXNfc2V0ID0gMDsKQEAgLTE0NjksMzUgKzExMzMsMjcgQEAKIH0KIAogCi1zdGF0aWMgaW50Ci1zZXR1cF93aW5kb3cgKHN0cnVjdCBmaWxlICAgICAgICpmaWxlLAotCSAgICAgIGludCAgICAgICAgICAgICAgICB4LAotCSAgICAgIGludCAgICAgICAgICAgICAgICB5LAotCSAgICAgIGludCAgICAgICAgICAgICAgICB3aWR0aCwKLQkgICAgICBpbnQgICAgICAgICAgICAgICAgaGVpZ2h0LAotCSAgICAgIHN0cnVjdCB2aWRlb19jbGlwIF9fdXNlciAqY2xpcHMsCi0JICAgICAgaW50ICAgICAgICAgICAgICAgIGNsaXBjb3VudCwKLQkgICAgICB2b2lkICAgICAgICAgICAgICBfX3VzZXIgKmJpdG1hcCkKK3N0YXRpYyBpbnQgc2V0dXBfd2luZG93KHN0cnVjdCB6b3Jhbl9maCAqZmgsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorCXN0cnVjdCB2NGwyX2NsaXAgX191c2VyICpjbGlwcywgaW50IGNsaXBjb3VudCwgdm9pZCBfX3VzZXIgKmJpdG1hcCkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0Jc3RydWN0IHZpZGVvX2NsaXAgKnZjcCA9IE5VTEw7CisJc3RydWN0IHY0bDJfY2xpcCAqdmNwID0gTlVMTDsKIAlpbnQgb24sIGVuZDsKIAogCi0JaWYgKCF6ci0+YnVmZmVyLmJhc2UpIHsKKwlpZiAoIXpyLT52YnVmX2Jhc2UpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfd2luZG93KCkgLSBmcmFtZSBidWZmZXIgaGFzIHRvIGJlIHNldCBmaXJzdFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSBmcmFtZSBidWZmZXIgaGFzIHRvIGJlIHNldCBmaXJzdFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICghZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0KSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHNldHVwX3dpbmRvdygpIC0gbm8gb3ZlcmxheSBmb3JtYXQgc2V0XG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIG5vIG92ZXJsYXkgZm9ybWF0IHNldFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTUwNSwxMyArMTE2MSwxMyBAQAogCSAqIFRoZSB2aWRlbyBmcm9udCBlbmQgbmVlZHMgNC1ieXRlIGFsaW5nZWQgbGluZSBzaXplcywgd2UgY29ycmVjdCB0aGF0CiAJICogc2lsZW50bHkgaGVyZSBpZiBuZWNlc3NhcnkKIAkgKi8KLQlpZiAoenItPmJ1ZmZlci5kZXB0aCA9PSAxNSB8fCB6ci0+YnVmZmVyLmRlcHRoID09IDE2KSB7CisJaWYgKHpyLT52YnVmX2RlcHRoID09IDE1IHx8IHpyLT52YnVmX2RlcHRoID09IDE2KSB7CiAJCWVuZCA9ICh4ICsgd2lkdGgpICYgfjE7CS8qIHJvdW5kIGRvd24gKi8KIAkJeCA9ICh4ICsgMSkgJiB+MTsJLyogcm91bmQgdXAgKi8KIAkJd2lkdGggPSBlbmQgLSB4OwogCX0KIAotCWlmICh6ci0+YnVmZmVyLmRlcHRoID09IDI0KSB7CisJaWYgKHpyLT52YnVmX2RlcHRoID09IDI0KSB7CiAJCWVuZCA9ICh4ICsgd2lkdGgpICYgfjM7CS8qIHJvdW5kIGRvd24gKi8KIAkJeCA9ICh4ICsgMykgJiB+MzsJLyogcm91bmQgdXAgKi8KIAkJd2lkdGggPSBlbmQgLSB4OwpAQCAtMTUyNyw4ICsxMTgzLDggQEAKIAkgICAgd2lkdGggPiBCVVpfTUFYX1dJRFRIIHx8IGhlaWdodCA+IEJVWl9NQVhfSEVJR0hUKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHNldHVwX3dpbmRvdygpIC0gd2lkdGggPSAlZCBvciBoZWlnaHQgPSAlZCBpbnZhbGlkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHdpZHRoLCBoZWlnaHQpOworCQkJIiVzOiAlcyAtIHdpZHRoID0gJWQgb3IgaGVpZ2h0ID0gJWQgaW52YWxpZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgd2lkdGgsIGhlaWdodCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTU2NiwyMCArMTIyMiwyMCBAQAogCQl9CiAJfSBlbHNlIGlmIChjbGlwY291bnQgPiAwKSB7CiAJCS8qIHdyaXRlIG91ciBvd24gYml0bWFwIGZyb20gdGhlIGNsaXBzICovCi0JCXZjcCA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCB2aWRlb19jbGlwKSAqIChjbGlwY291bnQgKyA0KSk7CisJCXZjcCA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCB2NGwyX2NsaXApICogKGNsaXBjb3VudCArIDQpKTsKIAkJaWYgKHZjcCA9PSBOVUxMKSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHNldHVwX3dpbmRvdygpIC0gQWxsb2Mgb2YgY2xpcCBtYXNrIGZhaWxlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJIiVzOiAlcyAtIEFsbG9jIG9mIGNsaXAgbWFzayBmYWlsZWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCWlmIChjb3B5X2Zyb21fdXNlcgotCQkgICAgKHZjcCwgY2xpcHMsIHNpemVvZihzdHJ1Y3QgdmlkZW9fY2xpcCkgKiBjbGlwY291bnQpKSB7CisJCSAgICAodmNwLCBjbGlwcywgc2l6ZW9mKHN0cnVjdCB2NGwyX2NsaXApICogY2xpcGNvdW50KSkgewogCQkJdmZyZWUodmNwKTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9Ci0JCXdyaXRlX292ZXJsYXlfbWFzayhmaWxlLCB2Y3AsIGNsaXBjb3VudCk7CisJCXdyaXRlX292ZXJsYXlfbWFzayhmaCwgdmNwLCBjbGlwY291bnQpOwogCQl2ZnJlZSh2Y3ApOwogCX0KIApAQCAtMTU5NSwxMSArMTI1MSw4IEBACiAJcmV0dXJuIHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKIH0KIAotc3RhdGljIGludAotc2V0dXBfb3ZlcmxheSAoc3RydWN0IGZpbGUgKmZpbGUsCi0JICAgICAgIGludCAgICAgICAgICBvbikKK3N0YXRpYyBpbnQgc2V0dXBfb3ZlcmxheShzdHJ1Y3Qgem9yYW5fZmggKmZoLCBpbnQgb24pCiB7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwogCiAJLyogSWYgdGhlcmUgaXMgbm90aGluZyB0byBkbywgcmV0dXJuIGltbWVkaWF0bHkgKi8KQEAgLTE2MTIsMTYgKzEyNjUsMTYgQEAKIAkgICAgZmgtPm92ZXJsYXlfYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfb3ZlcmxheSgpIC0gb3ZlcmxheSBpcyBhbHJlYWR5IGFjdGl2ZSBmb3IgYW5vdGhlciBzZXNzaW9uXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIG92ZXJsYXkgaXMgYWxyZWFkeSBhY3RpdmUgZm9yIGFub3RoZXIgc2Vzc2lvblxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCWlmICghb24gJiYgenItPm92ZXJsYXlfYWN0aXZlICE9IFpPUkFOX0ZSRUUgJiYKIAkgICAgZmgtPm92ZXJsYXlfYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfb3ZlcmxheSgpIC0geW91IGNhbm5vdCBjYW5jZWwgc29tZW9uZSBlbHNlJ3Mgc2Vzc2lvblxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSB5b3UgY2Fubm90IGNhbmNlbCBzb21lb25lIGVsc2UncyBzZXNzaW9uXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKQEAgLTE2MzQsMTggKzEyODcsMTggQEAKIAkJCXpyMzYwNTdfb3ZlcmxheSh6ciwgMCk7CiAJCXpyLT5vdmVybGF5X21hc2sgPSBOVUxMOwogCX0gZWxzZSB7Ci0JCWlmICghenItPmJ1ZmZlci5iYXNlIHx8ICFmaC0+b3ZlcmxheV9zZXR0aW5ncy5pc19zZXQpIHsKKwkJaWYgKCF6ci0+dmJ1Zl9iYXNlIHx8ICFmaC0+b3ZlcmxheV9zZXR0aW5ncy5pc19zZXQpIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczogc2V0dXBfb3ZlcmxheSgpIC0gYnVmZmVyIG9yIHdpbmRvdyBub3Qgc2V0XG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkiJXM6ICVzIC0gYnVmZmVyIG9yIHdpbmRvdyBub3Qgc2V0XG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlpZiAoIWZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCkgewogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBzZXR1cF9vdmVybGF5KCkgLSBubyBvdmVybGF5IGZvcm1hdCBzZXRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSBubyBvdmVybGF5IGZvcm1hdCBzZXRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXpyLT5vdmVybGF5X2FjdGl2ZSA9IGZoLT5vdmVybGF5X2FjdGl2ZSA9IFpPUkFOX0xPQ0tFRDsKQEAgLTE2NjIsNDEgKzEzMTUsNDcgQEAKIAlyZXR1cm4gd2FpdF9ncmFiX3BlbmRpbmcoenIpOwogfQogCi0JLyogZ2V0IHRoZSBzdGF0dXMgb2YgYSBidWZmZXIgaW4gdGhlIGNsaWVudHMgYnVmZmVyIHF1ZXVlICovCi1zdGF0aWMgaW50Ci16b3Jhbl92NGwyX2J1ZmZlcl9zdGF0dXMgKHN0cnVjdCBmaWxlICAgICAgICAqZmlsZSwKLQkJCSAgc3RydWN0IHY0bDJfYnVmZmVyICpidWYsCi0JCQkgIGludCAgICAgICAgICAgICAgICAgbnVtKQorLyogZ2V0IHRoZSBzdGF0dXMgb2YgYSBidWZmZXIgaW4gdGhlIGNsaWVudHMgYnVmZmVyIHF1ZXVlICovCitzdGF0aWMgaW50IHpvcmFuX3Y0bDJfYnVmZmVyX3N0YXR1cyhzdHJ1Y3Qgem9yYW5fZmggKmZoLAorCQkJCSAgICBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiwgaW50IG51bSkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWJ1Zi0+ZmxhZ3MgPSBWNEwyX0JVRl9GTEFHX01BUFBFRDsKIAogCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7CiAJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6Ci0KIAkJLyogY2hlY2sgcmFuZ2UgKi8KLQkJaWYgKG51bSA8IDAgfHwgbnVtID49IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyB8fAotCQkgICAgIWZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkJaWYgKG51bSA8IDAgfHwgbnVtID49IGZoLT5idWZmZXJzLm51bV9idWZmZXJzIHx8CisJCSAgICAhZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkKSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHY0bDJfYnVmZmVyX3N0YXR1cygpIC0gd3JvbmcgbnVtYmVyIG9yIGJ1ZmZlcnMgbm90IGFsbG9jYXRlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJIiVzOiAlcyAtIHdyb25nIG51bWJlciBvciBidWZmZXJzIG5vdCBhbGxvY2F0ZWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCQlkcHJpbnRrKDMsCisJCQlLRVJOX0RFQlVHCisJCQkiJXM6ICVzKCkgLSByYXcgYWN0aXZlPSVjLCBidWZmZXIgJWQ6IHN0YXRlPSVjLCBtYXA9JWNcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sCisJCQkiRkFMIltmaC0+YnVmZmVycy5hY3RpdmVdLCBudW0sCisJCQkiVVBNRCJbenItPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlXSwKKwkJCWZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLm1hcCA/ICdZJyA6ICdOJyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCiAJCWJ1Zi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkJYnVmLT5sZW5ndGggPSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7CisJCWJ1Zi0+bGVuZ3RoID0gZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemU7CiAKIAkJLyogZ2V0IGJ1ZmZlciAqLwotCQlidWYtPmJ5dGVzdXNlZCA9IGZoLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5icy5sZW5ndGg7Ci0JCWlmIChmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPT0gQlVaX1NUQVRFX0RPTkUgfHwKLQkJICAgIGZoLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSA9PSBCVVpfU1RBVEVfVVNFUikgewotCQkJYnVmLT5zZXF1ZW5jZSA9IGZoLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5icy5zZXE7CisJCWJ1Zi0+Ynl0ZXN1c2VkID0gZmgtPmJ1ZmZlcnMuYnVmZmVyW251bV0uYnMubGVuZ3RoOworCQlpZiAoZmgtPmJ1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPT0gQlVaX1NUQVRFX0RPTkUgfHwKKwkJICAgIGZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID09IEJVWl9TVEFURV9VU0VSKSB7CisJCQlidWYtPnNlcXVlbmNlID0gZmgtPmJ1ZmZlcnMuYnVmZmVyW251bV0uYnMuc2VxOwogCQkJYnVmLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX0RPTkU7Ci0JCQlidWYtPnRpbWVzdGFtcCA9Ci0JCQkgICAgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLmJzLnRpbWVzdGFtcDsKKwkJCWJ1Zi0+dGltZXN0YW1wID0gZmgtPmJ1ZmZlcnMuYnVmZmVyW251bV0uYnMudGltZXN0YW1wOwogCQl9IGVsc2UgewogCQkJYnVmLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX1FVRVVFRDsKIAkJfQpAQCAtMTcxMiwyOCArMTM3MSwyNiBAQAogCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6CiAKIAkJLyogY2hlY2sgcmFuZ2UgKi8KLQkJaWYgKG51bSA8IDAgfHwgbnVtID49IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyB8fAotCQkgICAgIWZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkJaWYgKG51bSA8IDAgfHwgbnVtID49IGZoLT5idWZmZXJzLm51bV9idWZmZXJzIHx8CisJCSAgICAhZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkKSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHY0bDJfYnVmZmVyX3N0YXR1cygpIC0gd3JvbmcgbnVtYmVyIG9yIGJ1ZmZlcnMgbm90IGFsbG9jYXRlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJIiVzOiAlcyAtIHdyb25nIG51bWJlciBvciBidWZmZXJzIG5vdCBhbGxvY2F0ZWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJYnVmLT50eXBlID0gKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDKSA/CiAJCQkgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgOgogCQkJICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7Ci0JCWJ1Zi0+bGVuZ3RoID0gZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplOworCQlidWYtPmxlbmd0aCA9IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOwogCiAJCS8qIHRoZXNlIHZhcmlhYmxlcyBhcmUgb25seSB3cml0dGVuIGFmdGVyIGZyYW1lIGhhcyBiZWVuIGNhcHR1cmVkICovCi0JCWlmIChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPT0gQlVaX1NUQVRFX0RPTkUgfHwKLQkJICAgIGZoLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSA9PSBCVVpfU1RBVEVfVVNFUikgewotCQkJYnVmLT5zZXF1ZW5jZSA9IGZoLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXS5icy5zZXE7Ci0JCQlidWYtPnRpbWVzdGFtcCA9Ci0JCQkgICAgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLmJzLnRpbWVzdGFtcDsKLQkJCWJ1Zi0+Ynl0ZXN1c2VkID0KLQkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMubGVuZ3RoOworCQlpZiAoZmgtPmJ1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPT0gQlVaX1NUQVRFX0RPTkUgfHwKKwkJICAgIGZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID09IEJVWl9TVEFURV9VU0VSKSB7CisJCQlidWYtPnNlcXVlbmNlID0gZmgtPmJ1ZmZlcnMuYnVmZmVyW251bV0uYnMuc2VxOworCQkJYnVmLT50aW1lc3RhbXAgPSBmaC0+YnVmZmVycy5idWZmZXJbbnVtXS5icy50aW1lc3RhbXA7CisJCQlidWYtPmJ5dGVzdXNlZCA9IGZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLmJzLmxlbmd0aDsKIAkJCWJ1Zi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19ET05FOwogCQl9IGVsc2UgewogCQkJYnVmLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX1FVRVVFRDsKQEAgLTE3NDEsMTQgKzEzOTgsMTEgQEAKIAogCQkvKiB3aGljaCBmaWVsZHMgYXJlIHRoZXNlPyAqLwogCQlpZiAoZmgtPmpwZ19zZXR0aW5ncy5UbXBEY20gIT0gMSkKLQkJCWJ1Zi0+ZmllbGQgPQotCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuCi0JCQkgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1RPUCA6IFY0TDJfRklFTERfQk9UVE9NOworCQkJYnVmLT5maWVsZCA9IGZoLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4gPworCQkJCVY0TDJfRklFTERfVE9QIDogVjRMMl9GSUVMRF9CT1RUT007CiAJCWVsc2UKLQkJCWJ1Zi0+ZmllbGQgPQotCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuCi0JCQkgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1NFUV9UQiA6Ci0JCQkgICAgVjRMMl9GSUVMRF9TRVFfQlQ7CisJCQlidWYtPmZpZWxkID0gZmgtPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiA/CisJCQkJVjRMMl9GSUVMRF9TRVFfVEIgOiBWNEwyX0ZJRUxEX1NFUV9CVDsKIAogCQlicmVhazsKIApAQCAtMTc1Niw4ICsxNDEwLDggQEAKIAogCQlkcHJpbnRrKDUsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiB2NGwyX2J1ZmZlcl9zdGF0dXMoKSAtIGludmFsaWQgYnVmZmVyIHR5cGV8bWFwX21vZGUgKCVkfCVkKVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7CisJCQkiJXM6ICVzIC0gaW52YWxpZCBidWZmZXIgdHlwZXxtYXBfbW9kZSAoJWR8JWQpXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTc3MCw4MSArMTQyNCw1NSBAQAogCiBzdGF0aWMgaW50CiB6b3Jhbl9zZXRfbm9ybSAoc3RydWN0IHpvcmFuICp6ciwKLQkJaW50ICAgICAgICAgICBub3JtKSAvKiBWSURFT19NT0RFXyogKi8KKwkJdjRsMl9zdGRfaWQgbm9ybSkKIHsKLQlpbnQgbm9ybV9lbmNvZGVyLCBvbjsKKwlpbnQgb247CiAKIAlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFIHx8CiAJICAgIHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX1dBUk5JTkcKLQkJCSIlczogc2V0X25vcm0oKSBjYWxsZWQgd2hpbGUgaW4gcGxheWJhY2svY2FwdHVyZSBtb2RlXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyBjYWxsZWQgd2hpbGUgaW4gcGxheWJhY2svY2FwdHVyZSBtb2RlXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQlpZiAobG9ja19ub3JtICYmIG5vcm0gIT0genItPm5vcm0pIHsKLQkJaWYgKGxvY2tfbm9ybSA+IDEpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX1dBUk5JTkcKLQkJCQkiJXM6IHNldF9ub3JtKCkgLSBUViBzdGFuZGFyZCBpcyBsb2NrZWQsIGNhbiBub3Qgc3dpdGNoIG5vcm1cbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmV0dXJuIC1FUEVSTTsKLQkJfSBlbHNlIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX1dBUk5JTkcKLQkJCQkiJXM6IHNldF9ub3JtKCkgLSBUViBzdGFuZGFyZCBpcyBsb2NrZWQsIG5vcm0gd2FzIG5vdCBjaGFuZ2VkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCW5vcm0gPSB6ci0+bm9ybTsKLQkJfQotCX0KLQotCWlmIChub3JtICE9IFZJREVPX01PREVfQVVUTyAmJgotCSAgICAobm9ybSA8IDAgfHwgbm9ybSA+PSB6ci0+Y2FyZC5ub3JtcyB8fAotCSAgICAgIXpyLT5jYXJkLnR2bltub3JtXSkpIHsKKwlpZiAoIShub3JtICYgenItPmNhcmQubm9ybXMpKSB7CiAJCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSICIlczogc2V0X25vcm0oKSAtIHVuc3VwcG9ydGVkIG5vcm0gJWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgbm9ybSk7CisJCQlLRVJOX0VSUiAiJXM6ICVzIC0gdW5zdXBwb3J0ZWQgbm9ybSAlbGx4XG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBub3JtKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKG5vcm0gPT0gVklERU9fTU9ERV9BVVRPKSB7Ci0JCWludCBzdGF0dXM7CisJaWYgKG5vcm0gPT0gVjRMMl9TVERfQUxMKSB7CisJCWludCBzdGF0dXMgPSAwOworCQl2NGwyX3N0ZF9pZCBzdGQgPSAwOwogCi0JCS8qIGlmIHdlIGhhdmUgYXV0b2RldGVjdCwgLi4uICovCi0JCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgY2FwczsKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0dFVF9DQVBBQklMSVRJRVMsICZjYXBzKTsKLQkJaWYgKCEoY2Fwcy5mbGFncyAmIFZJREVPX0RFQ09ERVJfQVVUTykpIHsKLQkJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBub3JtPWF1dG8gdW5zdXBwb3J0ZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX05PUk0sICZub3JtKTsKKwkJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgcXVlcnlzdGQsICZzdGQpOworCQlkZWNvZGVyX2NhbGwoenIsIHR1bmVyLCBzX3N0ZCwgc3RkKTsKIAogCQkvKiBsZXQgY2hhbmdlcyBjb21lIGludG8gZWZmZWN0ICovCiAJCXNzbGVlcCgyKTsKIAotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfR0VUX1NUQVRVUywgJnN0YXR1cyk7Ci0JCWlmICghKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0dPT0QpKSB7CisJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIGdfaW5wdXRfc3RhdHVzLCAmc3RhdHVzKTsKKwkJaWYgKHN0YXR1cyAmIFY0TDJfSU5fU1RfTk9fU0lHTkFMKSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHNldF9ub3JtKCkgLSBubyBub3JtIGRldGVjdGVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkiJXM6ICVzIC0gbm8gbm9ybSBkZXRlY3RlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQkJLyogcmVzZXQgbm9ybSAqLwotCQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9OT1JNLCAmenItPm5vcm0pOworCQkJZGVjb2Rlcl9jYWxsKHpyLCB0dW5lciwgc19zdGQsIHpyLT5ub3JtKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAKLQkJaWYgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX05UU0MpCi0JCQlub3JtID0gVklERU9fTU9ERV9OVFNDOwotCQllbHNlIGlmIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19TRUNBTSkKLQkJCW5vcm0gPSBWSURFT19NT0RFX1NFQ0FNOwotCQllbHNlCi0JCQlub3JtID0gVklERU9fTU9ERV9QQUw7CisJCW5vcm0gPSBzdGQ7CiAJfQotCXpyLT50aW1pbmcgPSB6ci0+Y2FyZC50dm5bbm9ybV07Ci0Jbm9ybV9lbmNvZGVyID0gbm9ybTsKKwlpZiAobm9ybSAmIFY0TDJfU1REX1NFQ0FNKQorCQl6ci0+dGltaW5nID0genItPmNhcmQudHZuWzJdOworCWVsc2UgaWYgKG5vcm0gJiBWNEwyX1NURF9OVFNDKQorCQl6ci0+dGltaW5nID0genItPmNhcmQudHZuWzFdOworCWVsc2UKKwkJenItPnRpbWluZyA9IHpyLT5jYXJkLnR2blswXTsKIAogCS8qIFdlIHN3aXRjaCBvdmVybGF5IG9mZiBhbmQgb24gc2luY2UgYSBjaGFuZ2UgaW4gdGhlCiAJICogbm9ybSBuZWVkcyBkaWZmZXJlbnQgVkZFIHNldHRpbmdzICovCkBAIC0xODUyLDggKzE0ODAsOCBAQAogCWlmIChvbikKIAkJenIzNjA1N19vdmVybGF5KHpyLCAwKTsKIAotCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfTk9STSwgJm5vcm0pOwotCWVuY29kZXJfY29tbWFuZCh6ciwgRU5DT0RFUl9TRVRfTk9STSwgJm5vcm1fZW5jb2Rlcik7CisJZGVjb2Rlcl9jYWxsKHpyLCB0dW5lciwgc19zdGQsIG5vcm0pOworCWVuY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfc3RkX291dHB1dCwgbm9ybSk7CiAKIAlpZiAob24pCiAJCXpyMzYwNTdfb3ZlcmxheSh6ciwgMSk7CkBAIC0xODY4LDcgKzE0OTYsNyBAQAogem9yYW5fc2V0X2lucHV0IChzdHJ1Y3Qgem9yYW4gKnpyLAogCQkgaW50ICAgICAgICAgICBpbnB1dCkKIHsKLQlpbnQgcmVhbGlucHV0OworCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGUgPSB7IDAsIDAgfTsKIAogCWlmIChpbnB1dCA9PSB6ci0+aW5wdXQpIHsKIAkJcmV0dXJuIDA7CkBAIC0xODc4LDIzICsxNTA2LDIzIEBACiAJICAgIHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX1dBUk5JTkcKLQkJCSIlczogc2V0X2lucHV0KCkgY2FsbGVkIHdoaWxlIGluIHBsYXliYWNrL2NhcHR1cmUgbW9kZVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgY2FsbGVkIHdoaWxlIGluIHBsYXliYWNrL2NhcHR1cmUgbW9kZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSB6ci0+Y2FyZC5pbnB1dHMpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0X2lucHV0KCkgLSB1bm5zdXBwb3J0ZWQgaW5wdXQgJWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgaW5wdXQpOworCQkJIiVzOiAlcyAtIHVubnN1cHBvcnRlZCBpbnB1dCAlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgaW5wdXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZWFsaW5wdXQgPSB6ci0+Y2FyZC5pbnB1dFtpbnB1dF0ubXV4c2VsOworCXJvdXRlLmlucHV0ID0genItPmNhcmQuaW5wdXRbaW5wdXRdLm11eHNlbDsKIAl6ci0+aW5wdXQgPSBpbnB1dDsKIAotCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfSU5QVVQsICZyZWFsaW5wdXQpOworCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTkwMyw0MTAgKzE1MzEsMTQgQEAKICAqICAgaW9jdGwgcm91dGluZQogICovCiAKLXN0YXRpYyBsb25nIHpvcmFuX2RvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCitzdGF0aWMgbG9uZyB6b3Jhbl9kZWZhdWx0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBpbnQgY21kLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCS8qIENBUkVGVUw6IHVzZWQgaW4gbXVsdGlwbGUgcGxhY2VzIGhlcmUgKi8KIAlzdHJ1Y3Qgem9yYW5fanBnX3NldHRpbmdzIHNldHRpbmdzOwogCi0JLyogd2UgbWlnaHQgaGF2ZSBvbGRlciBidWZmZXJzIGx5aW5nIGFyb3VuZC4uLiBXZSBkb24ndCB3YW50Ci0JICogdG8gd2FpdCwgYnV0IHdlIGRvIHdhbnQgdG8gdHJ5IGNsZWFuaW5nIHRoZW0gdXAgQVNBUC4gU28KLQkgKiB3ZSB0cnkgdG8gb2J0YWluIHRoZSBsb2NrIGFuZCBmcmVlIHRoZW0uIElmIHRoYXQgZmFpbHMsIHdlCi0JICogZG9uJ3QgZG8gYW55dGhpbmcgYW5kIHdhaXQgZm9yIHRoZSBuZXh0IHR1cm4uIEluIHRoZSBlbmQsCi0JICogem9yYW5fY2xvc2UoKSBvciBhIG5ldyBhbGxvY2F0aW9uIHdpbGwgc3RpbGwgZnJlZSB0aGVtLi4uCi0JICogVGhpcyBpcyBqdXN0IGEgJ3RoZSBzb29uZXIgdGhlIGJldHRlcicgZXh0cmEgJ2ZlYXR1cmUnCi0JICoKLQkgKiBXZSBkb24ndCBmcmVlIHRoZSBidWZmZXJzIHJpZ2h0IG9uIG11bm1hcCgpIGJlY2F1c2UgdGhhdAotCSAqIGNhdXNlcyBvb3BzZXMgKGtmcmVlKCkgaW5zaWRlIG11bm1hcCgpIG9vcHNlcyBmb3Igbm8KLQkgKiBhcHBhcmVudCByZWFzb24gLSBpdCdzIGFsc28gbm90IHJlcHJvZHVjZWFibGUgaW4gYW55IHdheSwKLQkgKiBidXQgbW92aW5nIHRoZSBmcmVlIGNvZGUgb3V0c2lkZSB0aGUgbXVubWFwKCkgaGFuZGxlciBmaXhlcwotCSAqIGFsbCB0aGlzLi4uIElmIHNvbWVvbmUga25vd3Mgd2h5LCBwbGVhc2UgZXhwbGFpbiBtZSAoUm9uYWxkKQotCSAqLwotCWlmIChtdXRleF90cnlsb2NrKCZ6ci0+cmVzb3VyY2VfbG9jaykpIHsKLQkJLyogd2Ugb2J0YWluZWQgaXQhIExldCdzIHRyeSB0byBmcmVlIHNvbWUgdGhpbmdzICovCi0JCWlmIChmaC0+anBnX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQpCi0JCQlqcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOwotCQlpZiAoZmgtPnY0bF9idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkKQotCQkJdjRsX2ZidWZmZXJfZnJlZShmaWxlKTsKLQotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQl9Ci0KIAlzd2l0Y2ggKGNtZCkgewotCi0JY2FzZSBWSURJT0NHQ0FQOgotCXsKLQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKnZjYXAgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DR0NBUFxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldCh2Y2FwLCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkpKTsKLQkJc3RybmNweSh2Y2FwLT5uYW1lLCBaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKHZjYXAtPm5hbWUpLTEpOwotCQl2Y2FwLT50eXBlID0gWk9SQU5fVklEX1RZUEU7Ci0KLQkJdmNhcC0+Y2hhbm5lbHMgPSB6ci0+Y2FyZC5pbnB1dHM7Ci0JCXZjYXAtPmF1ZGlvcyA9IDA7Ci0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJdmNhcC0+bWF4d2lkdGggPSBCVVpfTUFYX1dJRFRIOwotCQl2Y2FwLT5tYXhoZWlnaHQgPSBCVVpfTUFYX0hFSUdIVDsKLQkJdmNhcC0+bWlud2lkdGggPSBCVVpfTUlOX1dJRFRIOwotCQl2Y2FwLT5taW5oZWlnaHQgPSBCVVpfTUlOX0hFSUdIVDsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DR0NIQU46Ci0JewotCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdmNoYW4gPSBhcmc7Ci0JCWludCBjaGFubmVsID0gdmNoYW4tPmNoYW5uZWw7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DR0NIQU4gLSBjaGFubmVsPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHZjaGFuLT5jaGFubmVsKTsKLQotCQltZW1zZXQodmNoYW4sIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fY2hhbm5lbCkpOwotCQlpZiAoY2hhbm5lbCA+IHpyLT5jYXJkLmlucHV0cyB8fCBjaGFubmVsIDwgMCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NHQ0hBTiBvbiBub3QgZXhpc3RpbmcgY2hhbm5lbCAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgY2hhbm5lbCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCXN0cmNweSh2Y2hhbi0+bmFtZSwgenItPmNhcmQuaW5wdXRbY2hhbm5lbF0ubmFtZSk7Ci0KLQkJdmNoYW4tPnR1bmVycyA9IDA7Ci0JCXZjaGFuLT5mbGFncyA9IDA7Ci0JCXZjaGFuLT50eXBlID0gVklERU9fVFlQRV9DQU1FUkE7Ci0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJdmNoYW4tPm5vcm0gPSB6ci0+bm9ybTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXZjaGFuLT5jaGFubmVsID0gY2hhbm5lbDsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JCS8qIFJKOiB0aGUgZG9jdW1lbnRhdGlvbiBhdCBodHRwOi8vcm9hZHJ1bm5lci5zd2Fuc2VhLmxpbnV4Lm9yZy51ay92NGxhcGkuc2h0bWwgc2F5czoKLQkJICoKLQkJICogKiAiVGhlIFZJRElPQ1NDSEFOIGlvY3RsIHRha2VzIGFuIGludGVnZXIgYXJndW1lbnQgYW5kIHN3aXRjaGVzIHRoZSBjYXB0dXJlIHRvIHRoaXMgaW5wdXQuIgotCQkgKiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXgotCQkgKiAqIFRoZSBmYW1vcyBCVFRWIGRyaXZlciBoYXMgaXQgaW1wbGVtZW50ZWQgd2l0aCBhIHN0cnVjdCB2aWRlb19jaGFubmVsIGFyZ3VtZW50Ci0JCSAqICogYW5kIHdlIGZvbGxvdyBpdCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zCi0JCSAqICoKLQkJICogKiBCVFc6IHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRoZSB1c2VyIGNhbiBzZXQgdGhlIG5vcm0hCi0JCSAqLwotCi0JY2FzZSBWSURJT0NTQ0hBTjoKLQl7Ci0JCXN0cnVjdCB2aWRlb19jaGFubmVsICp2Y2hhbiA9IGFyZzsKLQkJaW50IHJlczsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6IFZJRElPQ1NDSEFOIC0gY2hhbm5lbD0lZCwgbm9ybT0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB2Y2hhbi0+Y2hhbm5lbCwgdmNoYW4tPm5vcm0pOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJaWYgKChyZXMgPSB6b3Jhbl9zZXRfaW5wdXQoenIsIHZjaGFuLT5jaGFubmVsKSkpCi0JCQlnb3RvIHNjaGFuX3VubG9ja19hbmRfcmV0dXJuOwotCQlpZiAoKHJlcyA9IHpvcmFuX3NldF9ub3JtKHpyLCB2Y2hhbi0+bm9ybSkpKQotCQkJZ290byBzY2hhbl91bmxvY2tfYW5kX3JldHVybjsKLQotCQkvKiBNYWtlIHN1cmUgdGhlIGNoYW5nZXMgY29tZSBpbnRvIGVmZmVjdCAqLwotCQlyZXMgPSB3YWl0X2dyYWJfcGVuZGluZyh6cik7Ci0Jc2NoYW5fdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ0dQSUNUOgotCXsKLQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnZwaWN0ID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dQSUNUXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbWVtc2V0KHZwaWN0LCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX3BpY3R1cmUpKTsKLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQl2cGljdC0+aHVlID0genItPmh1ZTsKLQkJdnBpY3QtPmJyaWdodG5lc3MgPSB6ci0+YnJpZ2h0bmVzczsKLQkJdnBpY3QtPmNvbnRyYXN0ID0genItPmNvbnRyYXN0OwotCQl2cGljdC0+Y29sb3VyID0genItPnNhdHVyYXRpb247Ci0JCWlmIChmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQpIHsKLQkJCXZwaWN0LT5kZXB0aCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdC0+ZGVwdGg7Ci0JCQl2cGljdC0+cGFsZXR0ZSA9IGZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdC0+cGFsZXR0ZTsKLQkJfSBlbHNlIHsKLQkJCXZwaWN0LT5kZXB0aCA9IDA7Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DU1BJQ1Q6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqdnBpY3QgPSBhcmc7Ci0JCWludCBpOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DU1BJQ1QgLSBicmk9JWQsIGh1ZT0lZCwgY29sPSVkLCBjb249JWQsIGRlcD0lZCwgcGFsPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHZwaWN0LT5icmlnaHRuZXNzLCB2cGljdC0+aHVlLAotCQkJdnBpY3QtPmNvbG91ciwgdnBpY3QtPmNvbnRyYXN0LCB2cGljdC0+ZGVwdGgsCi0JCQl2cGljdC0+cGFsZXR0ZSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspIHsKLQkJCWNvbnN0IHN0cnVjdCB6b3Jhbl9mb3JtYXQgKmZtdCA9ICZ6b3Jhbl9mb3JtYXRzW2ldOwotCi0JCQlpZiAoZm10LT5wYWxldHRlICE9IC0xICYmCi0JCQkgICAgZm10LT5mbGFncyAmIFpPUkFOX0ZPUk1BVF9PVkVSTEFZICYmCi0JCQkgICAgZm10LT5wYWxldHRlID09IHZwaWN0LT5wYWxldHRlICYmCi0JCQkgICAgZm10LT5kZXB0aCA9PSB2cGljdC0+ZGVwdGgpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGkgPT0gTlVNX0ZPUk1BVFMpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DU1BJQ1QgLSBJbnZhbGlkIHBhbGV0dGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIHZwaWN0LT5wYWxldHRlKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfUElDVFVSRSwgdnBpY3QpOwotCi0JCXpyLT5odWUgPSB2cGljdC0+aHVlOwotCQl6ci0+Y29udHJhc3QgPSB2cGljdC0+Y29udHJhc3Q7Ci0JCXpyLT5zYXR1cmF0aW9uID0gdnBpY3QtPmNvbG91cjsKLQkJenItPmJyaWdodG5lc3MgPSB2cGljdC0+YnJpZ2h0bmVzczsKLQotCQlmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQgPSAmem9yYW5fZm9ybWF0c1tpXTsKLQotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NDQVBUVVJFOgotCXsKLQkJaW50ICpvbiA9IGFyZywgcmVzOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0NBUFRVUkUgLSBvbj0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCAqb24pOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmVzID0gc2V0dXBfb3ZlcmxheShmaWxlLCAqb24pOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ0dXSU46Ci0JewotCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp2d2luID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dXSU5cbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltZW1zZXQodndpbiwgMCwgc2l6ZW9mKHN0cnVjdCB2aWRlb193aW5kb3cpKTsKLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQl2d2luLT54ID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MueDsKLQkJdndpbi0+eSA9IGZoLT5vdmVybGF5X3NldHRpbmdzLnk7Ci0JCXZ3aW4tPndpZHRoID0gZmgtPm92ZXJsYXlfc2V0dGluZ3Mud2lkdGg7Ci0JCXZ3aW4tPmhlaWdodCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLmhlaWdodDsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXZ3aW4tPmNsaXBjb3VudCA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ1NXSU46Ci0JewotCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp2d2luID0gYXJnOwotCQlpbnQgcmVzOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DU1dJTiAtIHg9JWQsIHk9JWQsIHc9JWQsIGg9JWQsIGNsaXBjb3VudD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB2d2luLT54LCB2d2luLT55LCB2d2luLT53aWR0aCwKLQkJCXZ3aW4tPmhlaWdodCwgdndpbi0+Y2xpcGNvdW50KTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9Ci0JCSAgICBzZXR1cF93aW5kb3coZmlsZSwgdndpbi0+eCwgdndpbi0+eSwgdndpbi0+d2lkdGgsCi0JCQkJIHZ3aW4tPmhlaWdodCwgdndpbi0+Y2xpcHMsCi0JCQkJIHZ3aW4tPmNsaXBjb3VudCwgTlVMTCk7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DR0ZCVUY6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fYnVmZmVyICp2YnVmID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dGQlVGXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkqdmJ1ZiA9IHpyLT5idWZmZXI7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NTRkJVRjoKLQl7Ci0JCXN0cnVjdCB2aWRlb19idWZmZXIgKnZidWYgPSBhcmc7Ci0JCWludCBpLCByZXMgPSAwOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DU0ZCVUYgLSBiYXNlPSVwLCB3PSVkLCBoPSVkLCBkZXB0aD0lZCwgYnBsPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHZidWYtPmJhc2UsIHZidWYtPndpZHRoLAotCQkJdmJ1Zi0+aGVpZ2h0LCB2YnVmLT5kZXB0aCwgdmJ1Zi0+Ynl0ZXNwZXJsaW5lKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykKLQkJCWlmICh6b3Jhbl9mb3JtYXRzW2ldLmRlcHRoID09IHZidWYtPmRlcHRoKQotCQkJCWJyZWFrOwotCQlpZiAoaSA9PSBOVU1fRk9STUFUUykgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NTRkJVRiAtIGludmFsaWQgZmJ1ZiBkZXB0aCAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgdmJ1Zi0+ZGVwdGgpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9Ci0JCSAgICBzZXR1cF9mYnVmZmVyKGZpbGUsIHZidWYtPmJhc2UsICZ6b3Jhbl9mb3JtYXRzW2ldLAotCQkJCSAgdmJ1Zi0+d2lkdGgsIHZidWYtPmhlaWdodCwKLQkJCQkgIHZidWYtPmJ5dGVzcGVybGluZSk7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DU1lOQzoKLQl7Ci0JCWludCAqZnJhbWUgPSBhcmcsIHJlczsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NTWU5DIC0gZnJhbWU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgKmZyYW1lKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9IHY0bF9zeW5jKGZpbGUsICpmcmFtZSk7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlpZiAoIXJlcykKLQkJCXpyLT52NGxfc3luY190YWlsKys7Ci0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DTUNBUFRVUkU6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fbW1hcCAqdm1hcCA9IGFyZzsKLQkJaW50IHJlczsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6IFZJRElPQ01DQVBUVVJFIC0gZnJhbWU9JWQsIGdlb209JWR4JWQsIGZtdD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB2bWFwLT5mcmFtZSwgdm1hcC0+d2lkdGgsIHZtYXAtPmhlaWdodCwKLQkJCXZtYXAtPmZvcm1hdCk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPSB2NGxfZ3JhYihmaWxlLCB2bWFwKTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DR01CVUY6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqdm1idWYgPSBhcmc7Ci0JCWludCBpLCByZXMgPSAwOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dNQlVGXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJdm1idWYtPnNpemUgPQotCQkgICAgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzICoKLQkJICAgIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJdm1idWYtPmZyYW1lcyA9IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVyczsKLQkJZm9yIChpID0gMDsgaSA8IHZtYnVmLT5mcmFtZXM7IGkrKykgewotCQkJdm1idWYtPm9mZnNldHNbaV0gPQotCQkJICAgIGkgKiBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgfHwgZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NHTUJVRiAtIGJ1ZmZlcnMgYWxyZWFkeSBhbGxvY2F0ZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gdjRsMXJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCWlmICh2NGxfZmJ1ZmZlcl9hbGxvYyhmaWxlKSkgewotCQkJcmVzID0gLUVOT01FTTsKLQkJCWdvdG8gdjRsMXJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCS8qIFRoZSBuZXh0IG1tYXAgd2lsbCBtYXAgdGhlIFY0TCBidWZmZXJzICovCi0JCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX1JBVzsKLQl2NGwxcmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ0dVTklUOgotCXsKLQkJc3RydWN0IHZpZGVvX3VuaXQgKnZ1bml0ID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dVTklUXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJdnVuaXQtPnZpZGVvID0genItPnZpZGVvX2Rldi0+bWlub3I7Ci0JCXZ1bml0LT52YmkgPSBWSURFT19OT19VTklUOwotCQl2dW5pdC0+cmFkaW8gPSBWSURFT19OT19VTklUOwotCQl2dW5pdC0+YXVkaW8gPSBWSURFT19OT19VTklUOwotCQl2dW5pdC0+dGVsZXRleHQgPSBWSURFT19OT19VTklUOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQkJLyoKLQkJICogUko6IEluIHByaW5jaXBhbCB3ZSBjb3VsZCBzdXBwb3J0IHN1YmNhcHR1cmVzIGZvciBWNEwgZ3JhYmJpbmcuCi0JCSAqICAgICBOb3QgZXZlbiB0aGUgZmFtb3VzIEJUVFYgZHJpdmVyIGhhcyB0aGVtLCBob3dldmVyLgotCQkgKiAgICAgSWYgdGhlcmUgc2hvdWxkIGJlIGEgc3Ryb25nIGRlbWFuZCwgb25lIGNvdWxkIGNvbnNpZGVyCi0JCSAqICAgICB0byBpbXBsZW1lbnQgdGhlbS4KLQkJICovCi0JY2FzZSBWSURJT0NHQ0FQVFVSRToKLQl7Ci0JCWRwcmludGsoMywgS0VSTl9FUlIgIiVzOiBWSURJT0NHQ0FQVFVSRSBub3Qgc3VwcG9ydGVkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NTQ0FQVFVSRToKLQl7Ci0JCWRwcmludGsoMywgS0VSTl9FUlIgIiVzOiBWSURJT0NTQ0FQVFVSRSBub3Qgc3VwcG9ydGVkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JCWJyZWFrOwotCiAJY2FzZSBCVVpJT0NfR19QQVJBTVM6CiAJewogCQlzdHJ1Y3Qgem9yYW5fcGFyYW1zICpicGFyYW1zID0gYXJnOwpAQCAtMjMxOSw3ICsxNTUxLDEzIEBACiAKIAkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCi0JCWJwYXJhbXMtPm5vcm0gPSB6ci0+bm9ybTsKKwkJaWYgKHpyLT5ub3JtICYgVjRMMl9TVERfTlRTQykKKwkJCWJwYXJhbXMtPm5vcm0gPSBWSURFT19NT0RFX05UU0M7CisJCWVsc2UgaWYgKHpyLT5ub3JtICYgVjRMMl9TVERfUEFMKQorCQkJYnBhcmFtcy0+bm9ybSA9IFZJREVPX01PREVfUEFMOworCQllbHNlCisJCQlicGFyYW1zLT5ub3JtID0gVklERU9fTU9ERV9TRUNBTTsKKwogCQlicGFyYW1zLT5pbnB1dCA9IHpyLT5pbnB1dDsKIAogCQlicGFyYW1zLT5kZWNpbWF0aW9uID0gZmgtPmpwZ19zZXR0aW5ncy5kZWNpbWF0aW9uOwpAQCAtMjM1Miw3ICsxNTkwLDYgQEAKIAogCQlyZXR1cm4gMDsKIAl9Ci0JCWJyZWFrOwogCiAJY2FzZSBCVVpJT0NfU19QQVJBTVM6CiAJewpAQCAtMjM5NSwxOCArMTYzMiwxNyBAQAogCiAJCS8qIENoZWNrIHRoZSBwYXJhbXMgZmlyc3QgYmVmb3JlIG92ZXJ3cml0aW5nIG91cgogCQkgKiBudGVybmFsIHZhbHVlcyAqLwotCQlpZiAoem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLCAmc2V0dGluZ3MpKSB7CisJCWlmICh6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZzZXR0aW5ncywgMCkpIHsKIAkJCXJlcyA9IC1FSU5WQUw7CiAJCQlnb3RvIHNwYXJhbXNfdW5sb2NrX2FuZF9yZXR1cm47CiAJCX0KIAogCQlmaC0+anBnX3NldHRpbmdzID0gc2V0dGluZ3M7Ci0Jc3BhcmFtc191bmxvY2tfYW5kX3JldHVybjoKK3NwYXJhbXNfdW5sb2NrX2FuZF9yZXR1cm46CiAJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCXJldHVybiByZXM7CiAJfQotCQlicmVhazsKIAogCWNhc2UgQlVaSU9DX1JFUUJVRlM6CiAJewpAQCAtMjQzMCwzOCArMTY2NiwzNCBAQAogCQkgKiB0YWJsZXMgdG8gYSBNYXhpbXVtIG9mIDIgTUIgKi8KIAkJaWYgKGJyZXEtPnNpemUgPiBqcGdfYnVmc2l6ZSkKIAkJCWJyZXEtPnNpemUgPSBqcGdfYnVmc2l6ZTsKLQkJaWYgKGZoLT5qcGdfYnVmZmVycy5uZWVkX2NvbnRpZ3VvdXMgJiYKLQkJICAgIGJyZXEtPnNpemUgPiBNQVhfS01BTExPQ19NRU0pCi0JCQlicmVxLT5zaXplID0gTUFYX0tNQUxMT0NfTUVNOwogCiAJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAotCQlpZiAoZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCB8fCBmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkKSB7CisJCWlmIChmaC0+YnVmZmVycy5hbGxvY2F0ZWQpIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczogQlVaSU9DX1JFUUJVRlMgLSBidWZmZXJzIGFsbHJlYWR5IGFsbG9jYXRlZFxuIiwKKwkJCQkiJXM6IEJVWklPQ19SRVFCVUZTIC0gYnVmZmVycyBhbHJlYWR5IGFsbG9jYXRlZFxuIiwKIAkJCQlaUl9ERVZOQU1FKHpyKSk7CiAJCQlyZXMgPSAtRUJVU1k7CiAJCQlnb3RvIGpwZ3JlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKIAkJfQogCi0JCWZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyA9IGJyZXEtPmNvdW50OwotCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgPSBicmVxLT5zaXplOworCQkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBNSlBFRyBidWZmZXJzIC0gY291bGQKKwkJICogYWxzbyBiZSAqX1BMQVksIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciBoZXJlICovCisJCW1hcF9tb2RlX2pwZyhmaCwgMCk7CisJCWZoLT5idWZmZXJzLm51bV9idWZmZXJzID0gYnJlcS0+Y291bnQ7CisJCWZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplID0gYnJlcS0+c2l6ZTsKIAotCQlpZiAoanBnX2ZidWZmZXJfYWxsb2MoZmlsZSkpIHsKKwkJaWYgKGpwZ19mYnVmZmVyX2FsbG9jKGZoKSkgewogCQkJcmVzID0gLUVOT01FTTsKIAkJCWdvdG8ganBncmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOwogCQl9CiAKLQkJLyogVGhlIG5leHQgbW1hcCB3aWxsIG1hcCB0aGUgTUpQRUcgYnVmZmVycyAtIGNvdWxkCi0JCSAqIGFsc28gYmUgKl9QTEFZLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIgaGVyZSAqLwotCQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOwotCWpwZ3JlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKK2pwZ3JlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKIAkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAkJcmV0dXJuIHJlczsKIAl9Ci0JCWJyZWFrOwogCiAJY2FzZSBCVVpJT0NfUUJVRl9DQVBUOgogCXsKQEAgLTI0NzEsMTIgKzE3MDMsMTEgQEAKIAkJCVpSX0RFVk5BTUUoenIpLCAqZnJhbWUpOwogCiAJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmVzID0ganBnX3FidWYoZmlsZSwgKmZyYW1lLCBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpOworCQlyZXMgPSBqcGdfcWJ1ZihmaCwgKmZyYW1lLCBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpOwogCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gcmVzOwogCX0KLQkJYnJlYWs7CiAKIAljYXNlIEJVWklPQ19RQlVGX1BMQVk6CiAJewpAQCAtMjQ4NiwxMiArMTcxNywxMSBAQAogCQkJWlJfREVWTkFNRSh6ciksICpmcmFtZSk7CiAKIAkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPSBqcGdfcWJ1ZihmaWxlLCAqZnJhbWUsIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKTsKKwkJcmVzID0ganBnX3FidWYoZmgsICpmcmFtZSwgQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MpOwogCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gcmVzOwogCX0KLQkJYnJlYWs7CiAKIAljYXNlIEJVWklPQ19TWU5DOgogCXsKQEAgLTI1MDEsMTcgKzE3MzEsMjYgQEAKIAkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogQlVaSU9DX1NZTkNcbiIsIFpSX0RFVk5BTUUoenIpKTsKIAogCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9IGpwZ19zeW5jKGZpbGUsIGJzeW5jKTsKKworCQlpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVykgeworCQkJZHByaW50aygyLCBLRVJOX1dBUk5JTkcKKwkJCQkiJXM6ICVzIC0gbm90IGluIGpwZyBjYXB0dXJlIG1vZGVcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKKwkJCXJlcyA9IC1FSU5WQUw7CisJCX0gZWxzZSB7CisJCQlyZXMgPSBqcGdfc3luYyhmaCwgYnN5bmMpOworCQl9CiAJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCXJldHVybiByZXM7CiAJfQotCQlicmVhazsKIAogCWNhc2UgQlVaSU9DX0dfU1RBVFVTOgogCXsKIAkJc3RydWN0IHpvcmFuX3N0YXR1cyAqYnN0YXQgPSBhcmc7Ci0JCWludCBub3JtLCBpbnB1dCwgc3RhdHVzLCByZXMgPSAwOworCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlID0geyAwLCAwIH07CisJCWludCBzdGF0dXMgPSAwLCByZXMgPSAwOworCQl2NGwyX3N0ZF9pZCBub3JtOwogCiAJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IEJVWklPQ19HX1NUQVRVU1xuIiwgWlJfREVWTkFNRSh6cikpOwogCkBAIC0yNTIzLDggKzE3NjIsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlpbnB1dCA9IHpyLT5jYXJkLmlucHV0W2JzdGF0LT5pbnB1dF0ubXV4c2VsOwotCQlub3JtID0gVklERU9fTU9ERV9BVVRPOworCQlyb3V0ZS5pbnB1dCA9IHpyLT5jYXJkLmlucHV0W2JzdGF0LT5pbnB1dF0ubXV4c2VsOwogCiAJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIApAQCAtMjUzNywxNjI5ICsxNzc1LDEyNjIgQEAKIAkJCWdvdG8gZ3N0YXRfdW5sb2NrX2FuZF9yZXR1cm47CiAJCX0KIAotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX0lOUFVULCAmaW5wdXQpOwotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX05PUk0sICZub3JtKTsKKwkJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCiAJCS8qIHNsZWVwIDEgc2Vjb25kICovCiAJCXNzbGVlcCgxKTsKIAogCQkvKiBHZXQgc3RhdHVzIG9mIHZpZGVvIGRlY29kZXIgKi8KLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0dFVF9TVEFUVVMsICZzdGF0dXMpOworCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBxdWVyeXN0ZCwgJm5vcm0pOworCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBnX2lucHV0X3N0YXR1cywgJnN0YXR1cyk7CiAKIAkJLyogcmVzdG9yZSBwcmV2aW91cyBpbnB1dCBhbmQgbm9ybSAqLwotCQlpbnB1dCA9IHpyLT5jYXJkLmlucHV0W3pyLT5pbnB1dF0ubXV4c2VsOwotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX0lOUFVULCAmaW5wdXQpOwotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX05PUk0sICZ6ci0+bm9ybSk7Ci0JZ3N0YXRfdW5sb2NrX2FuZF9yZXR1cm46CisJCXJvdXRlLmlucHV0ID0genItPmNhcmQuaW5wdXRbenItPmlucHV0XS5tdXhzZWw7CisJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKK2dzdGF0X3VubG9ja19hbmRfcmV0dXJuOgogCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlpZiAoIXJlcykgewogCQkJYnN0YXQtPnNpZ25hbCA9Ci0JCQkgICAgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0dPT0QpID8gMSA6IDA7Ci0JCQlpZiAoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfTlRTQykKKwkJCSAgICAoc3RhdHVzICYgVjRMMl9JTl9TVF9OT19TSUdOQUwpID8gMCA6IDE7CisJCQlpZiAobm9ybSAmIFY0TDJfU1REX05UU0MpCiAJCQkJYnN0YXQtPm5vcm0gPSBWSURFT19NT0RFX05UU0M7Ci0JCQllbHNlIGlmIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19TRUNBTSkKKwkJCWVsc2UgaWYgKG5vcm0gJiBWNEwyX1NURF9TRUNBTSkKIAkJCQlic3RhdC0+bm9ybSA9IFZJREVPX01PREVfU0VDQU07CiAJCQllbHNlCiAJCQkJYnN0YXQtPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKIAogCQkJYnN0YXQtPmNvbG9yID0KLQkJCSAgICAoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfQ09MT1IpID8gMSA6IDA7CisJCQkgICAgKHN0YXR1cyAmIFY0TDJfSU5fU1RfTk9fQ09MT1IpID8gMCA6IDE7CiAJCX0KIAogCQlyZXR1cm4gcmVzOwogCX0KLQkJYnJlYWs7Ci0KLQkJLyogVGhlIG5ldyB2aWRlbzRsaW51eDIgY2FwdHVyZSBpbnRlcmZhY2UgLSBtdWNoIG5pY2VyIHRoYW4gdmlkZW80bGludXgxLCBzaW5jZQotCQkgKiBpdCBhbGxvd3MgZm9yIGludGVncmF0aW5nIHRoZSBKUEVHIGNhcHR1cmluZyBjYWxscyBpbnNpZGUgc3RhbmRhcmQgdjRsMgotCQkgKi8KLQotCWNhc2UgVklESU9DX1FVRVJZQ0FQOgotCXsKLQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19RVUVSWUNBUFxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldChjYXAsIDAsIHNpemVvZigqY2FwKSk7Ci0JCXN0cm5jcHkoY2FwLT5jYXJkLCBaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKGNhcC0+Y2FyZCktMSk7Ci0JCXN0cm5jcHkoY2FwLT5kcml2ZXIsICJ6b3JhbiIsIHNpemVvZihjYXAtPmRyaXZlciktMSk7Ci0JCXNucHJpbnRmKGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSwgIlBDSTolcyIsCi0JCQkgcGNpX25hbWUoenItPnBjaV9kZXYpKTsKLQkJY2FwLT52ZXJzaW9uID0KLQkJICAgIEtFUk5FTF9WRVJTSU9OKE1BSk9SX1ZFUlNJT04sIE1JTk9SX1ZFUlNJT04sCi0JCQkJICAgUkVMRUFTRV9WRVJTSU9OKTsKLQkJY2FwLT5jYXBhYmlsaXRpZXMgPSBaT1JBTl9WNEwyX1ZJRF9GTEFHUzsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfRU5VTV9GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQgPSBhcmc7Ci0JCWludCBpbmRleCA9IGZtdC0+aW5kZXgsIG51bSA9IC0xLCBpLCBmbGFnID0gMCwgdHlwZSA9Ci0JCSAgICBmbXQtPnR5cGU7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0VOVU1fRk1UIC0gaW5kZXg9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgZm10LT5pbmRleCk7Ci0KLQkJc3dpdGNoIChmbXQtPnR5cGUpIHsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCQlmbGFnID0gWk9SQU5fRk9STUFUX0NBUFRVUkU7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDoKLQkJCWZsYWcgPSBaT1JBTl9GT1JNQVRfUExBWUJBQ0s7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JCQlmbGFnID0gWk9SQU5fRk9STUFUX09WRVJMQVk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX0VOVU1fRk1UIC0gdW5rbm93biB0eXBlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBmbXQtPnR5cGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykgewotCQkJaWYgKHpvcmFuX2Zvcm1hdHNbaV0uZmxhZ3MgJiBmbGFnKQotCQkJCW51bSsrOwotCQkJaWYgKG51bSA9PSBmbXQtPmluZGV4KQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmIChmbXQtPmluZGV4IDwgMCAvKiBsYXRlLCBidXQgbm90IHRvbyBsYXRlICovICB8fAotCQkgICAgaSA9PSBOVU1fRk9STUFUUykKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW1lbXNldChmbXQsIDAsIHNpemVvZigqZm10KSk7Ci0JCWZtdC0+aW5kZXggPSBpbmRleDsKLQkJZm10LT50eXBlID0gdHlwZTsKLQkJc3RybmNweShmbXQtPmRlc2NyaXB0aW9uLCB6b3Jhbl9mb3JtYXRzW2ldLm5hbWUsIHNpemVvZihmbXQtPmRlc2NyaXB0aW9uKS0xKTsKLQkJZm10LT5waXhlbGZvcm1hdCA9IHpvcmFuX2Zvcm1hdHNbaV0uZm91cmNjOwotCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5mbGFncyAmIFpPUkFOX0ZPUk1BVF9DT01QUkVTU0VEKQotCQkJZm10LT5mbGFncyB8PSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfRk1UOgotCXsKLQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQgPSBhcmc7Ci0JCWludCB0eXBlID0gZm10LT50eXBlOwotCi0JCWRwcmludGsoNSwgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX0ZNVFxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldChmbXQsIDAsIHNpemVvZigqZm10KSk7Ci0JCWZtdC0+dHlwZSA9IHR5cGU7Ci0KLQkJc3dpdGNoIChmbXQtPnR5cGUpIHsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0KLQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJZm10LT5mbXQud2luLncubGVmdCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLng7Ci0JCQlmbXQtPmZtdC53aW4udy50b3AgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy55OwotCQkJZm10LT5mbXQud2luLncud2lkdGggPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aDsKLQkJCWZtdC0+Zm10Lndpbi53LmhlaWdodCA9Ci0JCQkgICAgZmgtPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0OwotCQkJaWYgKGZoLT5vdmVybGF5X3NldHRpbmdzLndpZHRoICogMiA+Ci0JCQkgICAgQlVaX01BWF9IRUlHSFQpCi0JCQkJZm10LT5mbXQud2luLmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwotCQkJZWxzZQotCQkJCWZtdC0+Zm10Lndpbi5maWVsZCA9IFY0TDJfRklFTERfVE9QOwotCi0JCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ6Ci0KLQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgJiYKLQkJCSAgICBmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXKSB7Ci0KLQkJCQlmbXQtPmZtdC5waXgud2lkdGggPQotCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLndpZHRoOwotCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQotCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLmhlaWdodDsKLQkJCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0KLQkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmUgKgotCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLmhlaWdodDsKLQkJCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPQotCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLmZvcm1hdC0+Zm91cmNjOwotCQkJCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0KLQkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5mb3JtYXQtPmNvbG9yc3BhY2U7Ci0JCQkJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9Ci0JCQkJICAgIGZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lOwotCQkJCWlmIChCVVpfTUFYX0hFSUdIVCA8Ci0JCQkJICAgIChmaC0+djRsX3NldHRpbmdzLmhlaWdodCAqIDIpKQotCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQotCQkJCQkgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwotCQkJCWVsc2UKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIFY0TDJfRklFTERfVE9QOwotCi0JCQl9IGVsc2UgewotCi0JCQkJZm10LT5mbXQucGl4LndpZHRoID0KLQkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLwotCQkJCSAgICBmaC0+anBnX3NldHRpbmdzLkhvckRjbTsKLQkJCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0KLQkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5pbWdfaGVpZ2h0IC8KLQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuVmVyRGNtICoKLQkJCQkgICAgIGZoLT5qcGdfc2V0dGluZ3MuVG1wRGNtKTsKLQkJCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0KLQkJCQkgICAgem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJmZoLT4KLQkJCQkJCQkgICAganBnX3NldHRpbmdzKTsKLQkJCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPQotCQkJCSAgICBWNEwyX1BJWF9GTVRfTUpQRUc7Ci0JCQkJaWYgKGZoLT5qcGdfc2V0dGluZ3MuVG1wRGNtID09IDEpCi0JCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9Ci0JCQkJCSAgICAoZmgtPmpwZ19zZXR0aW5ncy4KLQkJCQkJICAgICBvZGRfZXZlbiA/IFY0TDJfRklFTERfU0VRX0JUIDoKLQkJCQkJICAgICBWNEwyX0ZJRUxEX1NFUV9CVCk7Ci0JCQkJZWxzZQotCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQotCQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuCi0JCQkJCSAgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1RPUCA6Ci0JCQkJCSAgICAgVjRMMl9GSUVMRF9CT1RUT00pOwotCi0JCQkJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7Ci0JCQkJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPQotCQkJCSAgICBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOwotCQkJfQotCi0JCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX0dfRk1UIC0gdW5zdXBwb3J0ZWQgdHlwZSAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgZm10LT50eXBlKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOwotCQlpbnQgaSwgcmVzID0gMDsKLQkJX19sZTMyIHByaW50Zm9ybWF0OwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TX0ZNVCAtIHR5cGU9JWQsICIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgZm10LT50eXBlKTsKLQotCQlzd2l0Y2ggKGZtdC0+dHlwZSkgewotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQotCQkJZHByaW50aygzLCAieD0lZCwgeT0lZCwgdz0lZCwgaD0lZCwgY250PSVkLCBtYXA9MHglcFxuIiwKLQkJCQlmbXQtPmZtdC53aW4udy5sZWZ0LCBmbXQtPmZtdC53aW4udy50b3AsCi0JCQkJZm10LT5mbXQud2luLncud2lkdGgsCi0JCQkJZm10LT5mbXQud2luLncuaGVpZ2h0LAotCQkJCWZtdC0+Zm10Lndpbi5jbGlwY291bnQsCi0JCQkJZm10LT5mbXQud2luLmJpdG1hcCk7Ci0JCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCQlyZXMgPQotCQkJICAgIHNldHVwX3dpbmRvdyhmaWxlLCBmbXQtPmZtdC53aW4udy5sZWZ0LAotCQkJCQkgZm10LT5mbXQud2luLncudG9wLAotCQkJCQkgZm10LT5mbXQud2luLncud2lkdGgsCi0JCQkJCSBmbXQtPmZtdC53aW4udy5oZWlnaHQsCi0JCQkJCSAoc3RydWN0IHZpZGVvX2NsaXAgX191c2VyICopCi0JCQkJCSAgIGZtdC0+Zm10Lndpbi5jbGlwcywKLQkJCQkJIGZtdC0+Zm10Lndpbi5jbGlwY291bnQsCi0JCQkJCSBmbXQtPmZtdC53aW4uYml0bWFwKTsKLQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJcmV0dXJuIHJlczsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOgotCi0JCQlwcmludGZvcm1hdCA9Ci0JCQkgICAgX19jcHVfdG9fbGUzMihmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQpOwotCQkJZHByaW50aygzLCAic2l6ZT0lZHglZCwgZm10PTB4JXggKCU0LjRzKVxuIiwKLQkJCQlmbXQtPmZtdC5waXgud2lkdGgsIGZtdC0+Zm10LnBpeC5oZWlnaHQsCi0JCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0LAotCQkJCShjaGFyICopICZwcmludGZvcm1hdCk7Ci0KLQkJCS8qIHdlIGNhbiBiZSByZXF1ZXN0ZWQgdG8gZG8gSlBFRy9yYXcgcGxheWJhY2svY2FwdHVyZSAqLwotCQkJaWYgKCEKLQkJCSAgICAoZm10LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAotCQkJICAgICAoZm10LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICYmCi0JCQkgICAgICBmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0KLQkJCSAgICAgIFY0TDJfUElYX0ZNVF9NSlBFRykpKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IFZJRElPQ19TX0ZNVCAtIHVua25vd24gdHlwZSAlZC8weCV4KCU0LjRzKSBjb21iaW5hdGlvblxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+dHlwZSwKLQkJCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0LAotCQkJCQkoY2hhciAqKSAmcHJpbnRmb3JtYXQpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9NSlBFRykgewotCQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKLQotCQkJCWlmIChmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkIHx8Ci0JCQkJICAgIGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQpIHsKLQkJCQkJZHByaW50aygxLAotCQkJCQkJS0VSTl9FUlIKLQkJCQkJCSIlczogVklESU9DX1NfRk1UIC0gY2Fubm90IGNoYW5nZSBjYXB0dXJlIG1vZGVcbiIsCi0JCQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQkJCXJlcyA9IC1FQlVTWTsKLQkJCQkJZ290byBzZm10anBnX3VubG9ja19hbmRfcmV0dXJuOwotCQkJCX0KLQotCQkJCS8qIHdlIGFjdHVhbGx5IG5lZWQgdG8gc2V0ICdyZWFsJyBwYXJhbWV0ZXJzIG5vdyAqLwotCQkJCWlmICgoZm10LT5mbXQucGl4LmhlaWdodCAqIDIpID4KLQkJCQkgICAgQlVaX01BWF9IRUlHSFQpCi0JCQkJCXNldHRpbmdzLlRtcERjbSA9IDE7Ci0JCQkJZWxzZQotCQkJCQlzZXR0aW5ncy5UbXBEY20gPSAyOwotCQkJCXNldHRpbmdzLmRlY2ltYXRpb24gPSAwOwotCQkJCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0IDw9Ci0JCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodCAvIDIpCi0JCQkJCXNldHRpbmdzLlZlckRjbSA9IDI7Ci0JCQkJZWxzZQotCQkJCQlzZXR0aW5ncy5WZXJEY20gPSAxOwotCQkJCWlmIChmbXQtPmZtdC5waXgud2lkdGggPD0KLQkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyA0KQotCQkJCQlzZXR0aW5ncy5Ib3JEY20gPSA0OwotCQkJCWVsc2UgaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA8PQotCQkJCQkgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyAyKQotCQkJCQlzZXR0aW5ncy5Ib3JEY20gPSAyOwotCQkJCWVsc2UKLQkJCQkJc2V0dGluZ3MuSG9yRGNtID0gMTsKLQkJCQlpZiAoc2V0dGluZ3MuVG1wRGNtID09IDEpCi0JCQkJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMjsKLQkJCQllbHNlCi0JCQkJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMTsKLQotCQkJCS8qIGNoZWNrICovCi0JCQkJaWYgKChyZXMgPQotCQkJCSAgICAgem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLAotCQkJCQkJCSAgICAgICZzZXR0aW5ncykpKQotCQkJCQlnb3RvIHNmbXRqcGdfdW5sb2NrX2FuZF9yZXR1cm47Ci0KLQkJCQkvKiBpdCdzIG9rLCBzbyBzZXQgdGhlbSAqLwotCQkJCWZoLT5qcGdfc2V0dGluZ3MgPSBzZXR0aW5nczsKLQotCQkJCS8qIHRlbGwgdGhlIHVzZXIgd2hhdCB3ZSBhY3R1YWxseSBkaWQgKi8KLQkJCQlmbXQtPmZtdC5waXgud2lkdGggPQotCQkJCSAgICBzZXR0aW5ncy5pbWdfd2lkdGggLyBzZXR0aW5ncy5Ib3JEY207Ci0JCQkJZm10LT5mbXQucGl4LmhlaWdodCA9Ci0JCQkJICAgIHNldHRpbmdzLmltZ19oZWlnaHQgKiAyIC8KLQkJCQkgICAgKHNldHRpbmdzLlRtcERjbSAqIHNldHRpbmdzLlZlckRjbSk7Ci0JCQkJaWYgKHNldHRpbmdzLlRtcERjbSA9PSAxKQotCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQotCQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuCi0JCQkJCSAgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1NFUV9UQiA6Ci0JCQkJCSAgICAgVjRMMl9GSUVMRF9TRVFfQlQpOwotCQkJCWVsc2UKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIChmaC0+anBnX3NldHRpbmdzLgotCQkJCQkgICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9UT1AgOgotCQkJCQkgICAgIFY0TDJfRklFTERfQk9UVE9NKTsKLQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgPQotCQkJCSAgICB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmZmgtPgotCQkJCQkJCSAgICBqcGdfc2V0dGluZ3MpOwotCQkJCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOwotCQkJCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPQotCQkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQkJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPQotCQkJCSAgICBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOwotCi0JCQkJLyogd2UgaGVyZWJ5IGFidXNlIHRoaXMgdmFyaWFibGUgdG8gc2hvdyB0aGF0Ci0JCQkJICogd2UncmUgZ29ubmEgZG8gbWpwZWcgY2FwdHVyZSAqLwotCQkJCWZoLT5tYXBfbW9kZSA9Ci0JCQkJICAgIChmbXQtPnR5cGUgPT0KLQkJCQkgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgPwotCQkJCSAgICBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDIDoKLQkJCQkgICAgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk7Ci0JCQlzZm10anBnX3VubG9ja19hbmRfcmV0dXJuOgotCQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJfSBlbHNlIHsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykKLQkJCQkJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PQotCQkJCQkgICAgem9yYW5fZm9ybWF0c1tpXS5mb3VyY2MpCi0JCQkJCQlicmVhazsKLQkJCQlpZiAoaSA9PSBOVU1fRk9STUFUUykgewotCQkJCQlkcHJpbnRrKDEsCi0JCQkJCQlLRVJOX0VSUgotCQkJCQkJIiVzOiBWSURJT0NfU19GTVQgLSB1bmtub3duL3Vuc3VwcG9ydGVkIGZvcm1hdCAweCV4ICglNC40cylcbiIsCi0JCQkJCQlaUl9ERVZOQU1FKHpyKSwKLQkJCQkJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCwKLQkJCQkJCShjaGFyICopICZwcmludGZvcm1hdCk7Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCX0KLQkJCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgfHwKLQkJCQkgICAgKGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgJiYKLQkJCQkgICAgIGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0KLQkJCQkgICAgIFpPUkFOX0ZSRUUpKSB7Ci0JCQkJCWRwcmludGsoMSwKLQkJCQkJCUtFUk5fRVJSCi0JCQkJCQkiJXM6IFZJRElPQ19TX0ZNVCAtIGNhbm5vdCBjaGFuZ2UgY2FwdHVyZSBtb2RlXG4iLAotCQkJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJCQlyZXMgPSAtRUJVU1k7Ci0JCQkJCWdvdG8gc2ZtdHY0bF91bmxvY2tfYW5kX3JldHVybjsKLQkJCQl9Ci0JCQkJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCkKLQkJCQkJZm10LT5mbXQucGl4LmhlaWdodCA9Ci0JCQkJCSAgICBCVVpfTUFYX0hFSUdIVDsKLQkJCQlpZiAoZm10LT5mbXQucGl4LndpZHRoID4gQlVaX01BWF9XSURUSCkKLQkJCQkJZm10LT5mbXQucGl4LndpZHRoID0gQlVaX01BWF9XSURUSDsKLQotCQkJCWlmICgocmVzID0KLQkJCQkgICAgIHpvcmFuX3Y0bF9zZXRfZm9ybWF0KGZpbGUsCi0JCQkJCQkJICBmbXQtPmZtdC5waXguCi0JCQkJCQkJICB3aWR0aCwKLQkJCQkJCQkgIGZtdC0+Zm10LnBpeC4KLQkJCQkJCQkgIGhlaWdodCwKLQkJCQkJCQkgICZ6b3Jhbl9mb3JtYXRzCi0JCQkJCQkJICBbaV0pKSkKLQkJCQkJZ290byBzZm10djRsX3VubG9ja19hbmRfcmV0dXJuOwotCi0JCQkJLyogdGVsbCB0aGUgdXNlciB0aGUKLQkJCQkgKiByZXN1bHRzL21pc3Npbmcgc3R1ZmYgKi8KLQkJCQlmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0KLQkJCQkJZmgtPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmU7Ci0JCQkJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9Ci0JCQkJCWZoLT52NGxfc2V0dGluZ3MuaGVpZ2h0ICoKLQkJCQkJZmgtPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmU7Ci0JCQkJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPQotCQkJCQlmaC0+djRsX3NldHRpbmdzLmZvcm1hdC0+Y29sb3JzcGFjZTsKLQkJCQlpZiAoQlVaX01BWF9IRUlHSFQgPAotCQkJCSAgICAoZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQgKiAyKSkKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQkJCQllbHNlCi0JCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9Ci0JCQkJCSAgICBWNEwyX0ZJRUxEX1RPUDsKLQotCQkJCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX1JBVzsKLQkJCXNmbXR2NGxfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19TX0ZNVCAtIHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+dHlwZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfRkJVRjoKLQl7Ci0JCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYiA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfR19GQlVGXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbWVtc2V0KGZiLCAwLCBzaXplb2YoKmZiKSk7Ci0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJZmItPmJhc2UgPSB6ci0+YnVmZmVyLmJhc2U7Ci0JCWZiLT5mbXQud2lkdGggPSB6ci0+YnVmZmVyLndpZHRoOwotCQlmYi0+Zm10LmhlaWdodCA9IHpyLT5idWZmZXIuaGVpZ2h0OwotCQlpZiAoenItPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0KSB7Ci0JCQlmYi0+Zm10LnBpeGVsZm9ybWF0ID0KLQkJCQlmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQtPmZvdXJjYzsKLQkJfQotCQlmYi0+Zm10LmJ5dGVzcGVybGluZSA9IHpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJZmItPmZtdC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7Ci0JCWZiLT5mbXQuZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7Ci0JCWZiLT5mbGFncyA9IFY0TDJfRkJVRl9GTEFHX09WRVJMQVk7Ci0JCWZiLT5jYXBhYmlsaXR5ID0gVjRMMl9GQlVGX0NBUF9MSVNUX0NMSVBQSU5HOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX0ZCVUY6Ci0JewotCQlpbnQgaSwgcmVzID0gMDsKLQkJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZiID0gYXJnOwotCQlfX2xlMzIgcHJpbnRmb3JtYXQgPSBfX2NwdV90b19sZTMyKGZiLT5mbXQucGl4ZWxmb3JtYXQpOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DX1NfRkJVRiAtIGJhc2U9MHglcCwgc2l6ZT0lZHglZCwgYnBsPSVkLCBmbXQ9MHgleCAoJTQuNHMpXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGZiLT5iYXNlLCBmYi0+Zm10LndpZHRoLCBmYi0+Zm10LmhlaWdodCwKLQkJCWZiLT5mbXQuYnl0ZXNwZXJsaW5lLCBmYi0+Zm10LnBpeGVsZm9ybWF0LAotCQkJKGNoYXIgKikgJnByaW50Zm9ybWF0KTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykKLQkJCWlmICh6b3Jhbl9mb3JtYXRzW2ldLmZvdXJjYyA9PSBmYi0+Zm10LnBpeGVsZm9ybWF0KQotCQkJCWJyZWFrOwotCQlpZiAoaSA9PSBOVU1fRk9STUFUUykgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfU19GQlVGIC0gZm9ybWF0PTB4JXggKCU0LjRzKSBub3QgYWxsb3dlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgZmItPmZtdC5waXhlbGZvcm1hdCwKLQkJCQkoY2hhciAqKSAmcHJpbnRmb3JtYXQpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9Ci0JCSAgICBzZXR1cF9mYnVmZmVyKGZpbGUsIGZiLT5iYXNlLCAmem9yYW5fZm9ybWF0c1tpXSwKLQkJCQkgIGZiLT5mbXQud2lkdGgsIGZiLT5mbXQuaGVpZ2h0LAotCQkJCSAgZmItPmZtdC5ieXRlc3BlcmxpbmUpOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19PVkVSTEFZOgotCXsKLQkJaW50ICpvbiA9IGFyZywgcmVzOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19QUkVWSUVXIC0gb249JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgKm9uKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9IHNldHVwX292ZXJsYXkoZmlsZSwgKm9uKTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfUkVRQlVGUzoKLQl7Ci0JCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyZXEgPSBhcmc7Ci0JCWludCByZXMgPSAwOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19SRVFCVUZTIC0gdHlwZT0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCByZXEtPnR5cGUpOwotCi0JCWlmIChyZXEtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IG9ubHkgTUVNT1JZX01NQVAgY2FwdHVyZSBpcyBzdXBwb3J0ZWQsIG5vdCAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgcmVxLT5tZW1vcnkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJaWYgKGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgfHwgZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfUkVRQlVGUyAtIGJ1ZmZlcnMgYWxscmVhZHkgYWxsb2NhdGVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FQlVTWTsKLQkJCWdvdG8gdjRsMnJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXICYmCi0JCSAgICByZXEtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7Ci0KLQkJCS8qIGNvbnRyb2wgdXNlciBpbnB1dCAqLwotCQkJaWYgKHJlcS0+Y291bnQgPCAyKQotCQkJCXJlcS0+Y291bnQgPSAyOwotCQkJaWYgKHJlcS0+Y291bnQgPiB2NGxfbmJ1ZnMpCi0JCQkJcmVxLT5jb3VudCA9IHY0bF9uYnVmczsKLQkJCWZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyA9IHJlcS0+Y291bnQ7Ci0KLQkJCWlmICh2NGxfZmJ1ZmZlcl9hbGxvYyhmaWxlKSkgewotCQkJCXJlcyA9IC1FTk9NRU07Ci0JCQkJZ290byB2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBWNEwgYnVmZmVycyAqLwotCQkJZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfUkFXOwotCi0JCX0gZWxzZSBpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19SRUMgfHwKLQkJCSAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWSkgewotCi0JCQkvKiB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBzaXplIG91cnNlbHZlcyBub3cgKi8KLQkJCWlmIChyZXEtPmNvdW50IDwgNCkKLQkJCQlyZXEtPmNvdW50ID0gNDsKLQkJCWlmIChyZXEtPmNvdW50ID4ganBnX25idWZzKQotCQkJCXJlcS0+Y291bnQgPSBqcGdfbmJ1ZnM7Ci0JCQlmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgPSByZXEtPmNvdW50OwotCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplID0KLQkJCSAgICB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmZmgtPmpwZ19zZXR0aW5ncyk7Ci0KLQkJCWlmIChqcGdfZmJ1ZmZlcl9hbGxvYyhmaWxlKSkgewotCQkJCXJlcyA9IC1FTk9NRU07Ci0JCQkJZ290byB2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBNSlBFRyBidWZmZXJzICovCi0JCQlpZiAocmVxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJCQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOwotCQkJZWxzZQotCQkJCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOwotCi0JCX0gZWxzZSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19SRVFCVUZTIC0gdW5rbm93biB0eXBlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCByZXEtPnR5cGUpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gdjRsMnJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCXY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19RVUVSWUJVRjoKLQl7Ci0JCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOwotCQlfX3UzMiB0eXBlID0gYnVmLT50eXBlOwotCQlpbnQgaW5kZXggPSBidWYtPmluZGV4LCByZXM7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiBWSURJT0NfUVVFUllCVUYgLSBpbmRleD0lZCwgdHlwZT0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPmluZGV4LCBidWYtPnR5cGUpOwotCi0JCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7Ci0JCWJ1Zi0+dHlwZSA9IHR5cGU7Ci0JCWJ1Zi0+aW5kZXggPSBpbmRleDsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9IHpvcmFuX3Y0bDJfYnVmZmVyX3N0YXR1cyhmaWxlLCBidWYsIGJ1Zi0+aW5kZXgpOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19RQlVGOgotCXsKLQkJc3RydWN0IHY0bDJfYnVmZmVyICpidWYgPSBhcmc7Ci0JCWludCByZXMgPSAwLCBjb2RlY19tb2RlLCBidWZfdHlwZTsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHICIlczogVklESU9DX1FCVUYgLSB0eXBlPSVkLCBpbmRleD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGJ1Zi0+aW5kZXgpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgewotCQljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKLQkJCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IFZJRElPQ19RQlVGIC0gaW52YWxpZCBidWYtPnR5cGU9JWQgZm9yIG1hcF9tb2RlPSVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOwotCQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQlyZXMgPSB6b3Jhbl92NGxfcXVldWVfZnJhbWUoZmlsZSwgYnVmLT5pbmRleCk7Ci0JCQlpZiAocmVzKQotCQkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCWlmICghenItPnY0bF9tZW1ncmFiX2FjdGl2ZSAmJgotCQkJICAgIGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fTE9DS0VEKQotCQkJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDEpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgotCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgotCQkJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWSkgewotCQkJCWJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7Ci0JCQkJY29kZWNfbW9kZSA9IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTOwotCQkJfSBlbHNlIHsKLQkJCQlidWZfdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkJCQljb2RlY19tb2RlID0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTOwotCQkJfQotCi0JCQlpZiAoYnVmLT50eXBlICE9IGJ1Zl90eXBlKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IFZJRElPQ19RQlVGIC0gaW52YWxpZCBidWYtPnR5cGU9JWQgZm9yIG1hcF9tb2RlPSVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOwotCQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQlyZXMgPQotCQkJICAgIHpvcmFuX2pwZ19xdWV1ZV9mcmFtZShmaWxlLCBidWYtPmluZGV4LAotCQkJCQkJICBjb2RlY19tb2RlKTsKLQkJCWlmIChyZXMgIT0gMCkKLQkJCQlnb3RvIHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfSURMRSAmJgotCQkJICAgIGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fTE9DS0VEKSB7Ci0JCQkJenIzNjA1N19lbmFibGVfanBnKHpyLCBjb2RlY19tb2RlKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19RQlVGIC0gdW5zdXBwb3J0ZWQgdHlwZSAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQlxYnVmX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19EUUJVRjoKLQl7Ci0JCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOwotCQlpbnQgcmVzID0gMCwgYnVmX3R5cGUsIG51bSA9IC0xOwkvKiBjb21waWxlciBib3JrcyBoZXJlICg/KSAqLwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19EUUJVRiAtIHR5cGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6Ci0JCQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSwgZmgtPm1hcF9tb2RlKTsKLQkJCQlyZXMgPSAtRUlOVkFMOwotCQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0KLQkJCW51bSA9IHpyLT52NGxfcGVuZFt6ci0+djRsX3N5bmNfdGFpbCAmIFY0TF9NQVNLX0ZSQU1FXTsKLQkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyAmJgotCQkJICAgIHpyLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSAhPQotCQkJICAgIEJVWl9TVEFURV9ET05FKSB7Ci0JCQkJcmVzID0gLUVBR0FJTjsKLQkJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCQkJcmVzID0gdjRsX3N5bmMoZmlsZSwgbnVtKTsKLQkJCWlmIChyZXMpCi0JCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCWVsc2UKLQkJCQl6ci0+djRsX3N5bmNfdGFpbCsrOwotCQkJcmVzID0gem9yYW5fdjRsMl9idWZmZXJfc3RhdHVzKGZpbGUsIGJ1ZiwgbnVtKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKLQkJewotCQkJc3RydWN0IHpvcmFuX3N5bmMgYnM7Ci0KLQkJCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfSlBHX1BMQVkpCi0JCQkJYnVmX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDsKLQkJCWVsc2UKLQkJCQlidWZfdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQotCQkJaWYgKGJ1Zi0+dHlwZSAhPSBidWZfdHlwZSkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSwgZmgtPm1hcF9tb2RlKTsKLQkJCQlyZXMgPSAtRUlOVkFMOwotCQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0KLQkJCW51bSA9Ci0JCQkgICAgenItPmpwZ19wZW5kW3pyLT4KLQkJCQkJIGpwZ19xdWVfdGFpbCAmIEJVWl9NQVNLX0ZSQU1FXTsKLQotCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLICYmCi0JCQkgICAgenItPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlICE9Ci0JCQkgICAgQlVaX1NUQVRFX0RPTkUpIHsKLQkJCQlyZXMgPSAtRUFHQUlOOwotCQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0JCQlyZXMgPSBqcGdfc3luYyhmaWxlLCAmYnMpOwotCQkJaWYgKHJlcykKLQkJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJcmVzID0KLQkJCSAgICB6b3Jhbl92NGwyX2J1ZmZlcl9zdGF0dXMoZmlsZSwgYnVmLCBicy5mcmFtZSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19EUUJVRiAtIHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCWRxYnVmX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TVFJFQU1PTjoKLQl7Ci0JCWludCByZXMgPSAwOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TVFJFQU1PTlxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgewotCQljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoJLyogcmF3IGNhcHR1cmUgKi8KLQkJCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSB8fAotCQkJICAgIGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fQUNUSVZFKSB7Ci0JCQkJcmVzID0gLUVCVVNZOwotCQkJCWdvdG8gc3RybW9uX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9Ci0JCQkgICAgWk9SQU5fTE9DS0VEOwotCQkJenItPnY0bF9zZXR0aW5ncyA9IGZoLT52NGxfc2V0dGluZ3M7Ci0KLQkJCXpyLT52NGxfc3luY190YWlsID0genItPnY0bF9wZW5kX3RhaWw7Ci0JCQlpZiAoIXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUgJiYKLQkJCSAgICB6ci0+djRsX3BlbmRfaGVhZCAhPSB6ci0+djRsX3BlbmRfdGFpbCkgewotCQkJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDEpOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgotCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgotCQkJLyogd2hhdCBpcyB0aGUgY29kZWMgbW9kZSByaWdodCBub3c/ICovCi0JCQlpZiAoenItPmpwZ19idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9BQ1RJVkUgfHwKLQkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSkgewotCQkJCXJlcyA9IC1FQlVTWTsKLQkJCQlnb3RvIHN0cm1vbl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQotCQkJenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9IGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPQotCQkJICAgIFpPUkFOX0xPQ0tFRDsKLQotCQkJaWYgKHpyLT5qcGdfcXVlX2hlYWQgIT0genItPmpwZ19xdWVfdGFpbCkgewotCQkJCS8qIFN0YXJ0IHRoZSBqcGVnIGNvZGVjIHdoZW4gdGhlIGZpcnN0IGZyYW1lIGlzIHF1ZXVlZCAgKi8KLQkJCQlqcGVnX3N0YXJ0KHpyKTsKLQkJCX0KLQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19TVFJFQU1PTiAtIGludmFsaWQgbWFwIG1vZGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBzdHJtb25fdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQlzdHJtb25fdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NUUkVBTU9GRjoKLQl7Ci0JCWludCBpLCByZXMgPSAwOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TVFJFQU1PRkZcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6CS8qIHJhdyBjYXB0dXJlICovCi0JCQlpZiAoZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFICYmCi0JCQkgICAgenItPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7Ci0JCQkJcmVzID0gLUVQRVJNOwkvKiBzdGF5IG9mZiBvdGhlcidzIHNldHRpbmdzISAqLwotCQkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQkJCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpCi0JCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOwotCi0JCQkvKiB1bmxvYWQgY2FwdHVyZSAqLwotCQkJaWYgKHpyLT52NGxfbWVtZ3JhYl9hY3RpdmUpIHsKLQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCQkJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDApOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCQkJfQotCi0JCQlmb3IgKGkgPSAwOyBpIDwgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzOyBpKyspCi0JCQkJenItPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5zdGF0ZSA9Ci0JCQkJICAgIEJVWl9TVEFURV9VU0VSOwotCQkJZmgtPnY0bF9idWZmZXJzID0genItPnY0bF9idWZmZXJzOwotCi0JCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9Ci0JCQkgICAgWk9SQU5fRlJFRTsKLQotCQkJenItPnY0bF9ncmFiX3NlcSA9IDA7Ci0JCQl6ci0+djRsX3BlbmRfaGVhZCA9IHpyLT52NGxfcGVuZF90YWlsID0gMDsKLQkJCXpyLT52NGxfc3luY190YWlsID0gMDsKLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgotCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgotCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSAmJgotCQkJICAgIHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgewotCQkJCXJlcyA9IC1FUEVSTTsJLyogc3RheSBvZmYgb3RoZXIncyBzZXR0aW5ncyEgKi8KLQkJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0JCQlpZiAoenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKQotCQkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKLQotCQkJcmVzID0KLQkJCSAgICBqcGdfcWJ1ZihmaWxlLCAtMSwKLQkJCQkgICAgIChmaC0+bWFwX21vZGUgPT0KLQkJCQkgICAgICBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDKSA/Ci0JCQkJICAgICBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MgOgotCQkJCSAgICAgQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MpOwotCQkJaWYgKHJlcykKLQkJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX1NUUkVBTU9GRiAtIGludmFsaWQgbWFwIG1vZGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0Jc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfUVVFUllDVFJMOgotCXsKLQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19RVUVSWUNUUkwgLSBpZD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBjdHJsLT5pZCk7Ci0KLQkJLyogd2Ugb25seSBzdXBwb3J0IGh1ZS9zYXR1cmF0aW9uL2NvbnRyYXN0L2JyaWdodG5lc3MgKi8KLQkJaWYgKGN0cmwtPmlkIDwgVjRMMl9DSURfQlJJR0hUTkVTUyB8fAotCQkgICAgY3RybC0+aWQgPiBWNEwyX0NJRF9IVUUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZWxzZSB7Ci0JCQlpbnQgaWQgPSBjdHJsLT5pZDsKLQkJCW1lbXNldChjdHJsLCAwLCBzaXplb2YoKmN0cmwpKTsKLQkJCWN0cmwtPmlkID0gaWQ7Ci0JCX0KLQotCQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkJyaWdodG5lc3MiLCBzaXplb2YoY3RybC0+bmFtZSktMSk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkNvbnRyYXN0Iiwgc2l6ZW9mKGN0cmwtPm5hbWUpLTEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIlNhdHVyYXRpb24iLCBzaXplb2YoY3RybC0+bmFtZSktMSk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJIdWUiLCBzaXplb2YoY3RybC0+bmFtZSktMSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWN0cmwtPm1pbmltdW0gPSAwOwotCQljdHJsLT5tYXhpbXVtID0gNjU1MzU7Ci0JCWN0cmwtPnN0ZXAgPSAxOwotCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMzI3Njg7Ci0JCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JewotCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX0NUUkwgLSBpZD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBjdHJsLT5pZCk7Ci0KLQkJLyogd2Ugb25seSBzdXBwb3J0IGh1ZS9zYXR1cmF0aW9uL2NvbnRyYXN0L2JyaWdodG5lc3MgKi8KLQkJaWYgKGN0cmwtPmlkIDwgVjRMMl9DSURfQlJJR0hUTkVTUyB8fAotCQkgICAgY3RybC0+aWQgPiBWNEwyX0NJRF9IVUUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQkJY3RybC0+dmFsdWUgPSB6ci0+YnJpZ2h0bmVzczsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQkJY3RybC0+dmFsdWUgPSB6ci0+Y29udHJhc3Q7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCQkJY3RybC0+dmFsdWUgPSB6ci0+c2F0dXJhdGlvbjsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0hVRToKLQkJCWN0cmwtPnZhbHVlID0genItPmh1ZTsKLQkJCWJyZWFrOwotCQl9Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JewotCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOwotCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSBwaWN0OwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TX0NUUkwgLSBpZD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBjdHJsLT5pZCk7Ci0KLQkJLyogd2Ugb25seSBzdXBwb3J0IGh1ZS9zYXR1cmF0aW9uL2NvbnRyYXN0L2JyaWdodG5lc3MgKi8KLQkJaWYgKGN0cmwtPmlkIDwgVjRMMl9DSURfQlJJR0hUTkVTUyB8fAotCQkgICAgY3RybC0+aWQgPiBWNEwyX0NJRF9IVUUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gNjU1MzUpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX1NfQ1RSTCAtIGludmFsaWQgdmFsdWUgJWQgZm9yIGlkPSVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBjdHJsLT52YWx1ZSwgY3RybC0+aWQpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQkJenItPmJyaWdodG5lc3MgPSBjdHJsLT52YWx1ZTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQkJenItPmNvbnRyYXN0ID0gY3RybC0+dmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCQkJenItPnNhdHVyYXRpb24gPSBjdHJsLT52YWx1ZTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0hVRToKLQkJCXpyLT5odWUgPSBjdHJsLT52YWx1ZTsKLQkJCWJyZWFrOwotCQl9Ci0JCXBpY3QuYnJpZ2h0bmVzcyA9IHpyLT5icmlnaHRuZXNzOwotCQlwaWN0LmNvbnRyYXN0ID0genItPmNvbnRyYXN0OwotCQlwaWN0LmNvbG91ciA9IHpyLT5zYXR1cmF0aW9uOwotCQlwaWN0Lmh1ZSA9IHpyLT5odWU7Ci0KLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9QSUNUVVJFLCAmcGljdCk7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0VOVU1TVEQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqc3RkID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19FTlVNU1REIC0gaW5kZXg9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgc3RkLT5pbmRleCk7Ci0KLQkJaWYgKHN0ZC0+aW5kZXggPCAwIHx8IHN0ZC0+aW5kZXggPj0gKHpyLT5jYXJkLm5vcm1zICsgMSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZWxzZSB7Ci0JCQlpbnQgaWQgPSBzdGQtPmluZGV4OwotCQkJbWVtc2V0KHN0ZCwgMCwgc2l6ZW9mKCpzdGQpKTsKLQkJCXN0ZC0+aW5kZXggPSBpZDsKLQkJfQotCi0JCWlmIChzdGQtPmluZGV4ID09IHpyLT5jYXJkLm5vcm1zKSB7Ci0JCQkvKiBpZiB3ZSBoYXZlIGF1dG9kZXRlY3QsIC4uLiAqLwotCQkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSBjYXBzOwotCQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0dFVF9DQVBBQklMSVRJRVMsCi0JCQkJCSZjYXBzKTsKLQkJCWlmIChjYXBzLmZsYWdzICYgVklERU9fREVDT0RFUl9BVVRPKSB7Ci0JCQkJc3RkLT5pZCA9IFY0TDJfU1REX0FMTDsKLQkJCQlzdHJuY3B5KHN0ZC0+bmFtZSwgIkF1dG9kZXRlY3QiLCBzaXplb2Yoc3RkLT5uYW1lKS0xKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0gZWxzZQotCQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXN3aXRjaCAoc3RkLT5pbmRleCkgewotCQljYXNlIDA6Ci0JCQlzdGQtPmlkID0gVjRMMl9TVERfUEFMOwotCQkJc3RybmNweShzdGQtPm5hbWUsICJQQUwiLCBzaXplb2Yoc3RkLT5uYW1lKS0xKTsKLQkJCXN0ZC0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTsKLQkJCXN0ZC0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPSAyNTsKLQkJCXN0ZC0+ZnJhbWVsaW5lcyA9IHpyLT5jYXJkLnR2blswXS0+SHQ7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJc3RkLT5pZCA9IFY0TDJfU1REX05UU0M7Ci0JCQlzdHJuY3B5KHN0ZC0+bmFtZSwgIk5UU0MiLCBzaXplb2Yoc3RkLT5uYW1lKS0xKTsKLQkJCXN0ZC0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTAwMTsKLQkJCXN0ZC0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPSAzMDAwMDsKLQkJCXN0ZC0+ZnJhbWVsaW5lcyA9IHpyLT5jYXJkLnR2blsxXS0+SHQ7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJc3RkLT5pZCA9IFY0TDJfU1REX1NFQ0FNOwotCQkJc3RybmNweShzdGQtPm5hbWUsICJTRUNBTSIsIHNpemVvZihzdGQtPm5hbWUpLTEpOwotCQkJc3RkLT5mcmFtZXBlcmlvZC5udW1lcmF0b3IgPSAxOwotCQkJc3RkLT5mcmFtZXBlcmlvZC5kZW5vbWluYXRvciA9IDI1OwotCQkJc3RkLT5mcmFtZWxpbmVzID0genItPmNhcmQudHZuWzJdLT5IdDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfU1REOgotCXsKLQkJdjRsMl9zdGRfaWQgKnN0ZCA9IGFyZzsKLQkJaW50IG5vcm07Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfU1REXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlub3JtID0genItPm5vcm07Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXN3aXRjaCAobm9ybSkgewotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJKnN0ZCA9IFY0TDJfU1REX1BBTDsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCSpzdGQgPSBWNEwyX1NURF9OVFNDOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklERU9fTU9ERV9TRUNBTToKLQkJCSpzdGQgPSBWNEwyX1NURF9TRUNBTTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfU1REOgotCXsKLQkJaW50IG5vcm0gPSAtMSwgcmVzID0gMDsKLQkJdjRsMl9zdGRfaWQgKnN0ZCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU19TVEQgLSBub3JtPTB4JWxseFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCAodW5zaWduZWQgbG9uZyBsb25nKSpzdGQpOwotCi0JCWlmICgoKnN0ZCAmIFY0TDJfU1REX1BBTCkgJiYgISgqc3RkICYgflY0TDJfU1REX1BBTCkpCi0JCQlub3JtID0gVklERU9fTU9ERV9QQUw7Ci0JCWVsc2UgaWYgKCgqc3RkICYgVjRMMl9TVERfTlRTQykgJiYgISgqc3RkICYgflY0TDJfU1REX05UU0MpKQotCQkJbm9ybSA9IFZJREVPX01PREVfTlRTQzsKLQkJZWxzZSBpZiAoKCpzdGQgJiBWNEwyX1NURF9TRUNBTSkgJiYgISgqc3RkICYgflY0TDJfU1REX1NFQ0FNKSkKLQkJCW5vcm0gPSBWSURFT19NT0RFX1NFQ0FNOwotCQllbHNlIGlmICgqc3RkID09IFY0TDJfU1REX0FMTCkKLQkJCW5vcm0gPSBWSURFT19NT0RFX0FVVE87Ci0JCWVsc2UgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfU19TVEQgLSBpbnZhbGlkIG5vcm0gMHglbGx4XG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCAodW5zaWduZWQgbG9uZyBsb25nKSpzdGQpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCWlmICgocmVzID0gem9yYW5fc2V0X25vcm0oenIsIG5vcm0pKSkKLQkJCWdvdG8gc3N0ZF91bmxvY2tfYW5kX3JldHVybjsKLQotCQlyZXMgPSB3YWl0X2dyYWJfcGVuZGluZyh6cik7Ci0Jc3N0ZF91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2lucHV0ICppbnAgPSBhcmc7Ci0JCWludCBzdGF0dXM7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0VOVU1JTlBVVCAtIGluZGV4PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGlucC0+aW5kZXgpOwotCi0JCWlmIChpbnAtPmluZGV4IDwgMCB8fCBpbnAtPmluZGV4ID49IHpyLT5jYXJkLmlucHV0cykKLQkJCXJldHVybiAtRUlOVkFMOwotCQllbHNlIHsKLQkJCWludCBpZCA9IGlucC0+aW5kZXg7Ci0JCQltZW1zZXQoaW5wLCAwLCBzaXplb2YoKmlucCkpOwotCQkJaW5wLT5pbmRleCA9IGlkOwotCQl9Ci0KLQkJc3RybmNweShpbnAtPm5hbWUsIHpyLT5jYXJkLmlucHV0W2lucC0+aW5kZXhdLm5hbWUsCi0JCQlzaXplb2YoaW5wLT5uYW1lKSAtIDEpOwotCQlpbnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwotCQlpbnAtPnN0ZCA9IFY0TDJfU1REX0FMTDsKLQotCQkvKiBHZXQgc3RhdHVzIG9mIHZpZGVvIGRlY29kZXIgKi8KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfR0VUX1NUQVRVUywgJnN0YXR1cyk7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmICghKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0dPT0QpKSB7Ci0JCQlpbnAtPnN0YXR1cyB8PSBWNEwyX0lOX1NUX05PX1BPV0VSOwotCQkJaW5wLT5zdGF0dXMgfD0gVjRMMl9JTl9TVF9OT19TSUdOQUw7Ci0JCX0KLQkJaWYgKCEoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfQ09MT1IpKQotCQkJaW5wLT5zdGF0dXMgfD0gVjRMMl9JTl9TVF9OT19DT0xPUjsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfR19JTlBVVDoKLQl7Ci0JCWludCAqaW5wdXQgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfSU5QVVRcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCSppbnB1dCA9IHpyLT5pbnB1dDsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfSU5QVVQ6Ci0JewotCQlpbnQgKmlucHV0ID0gYXJnLCByZXMgPSAwOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TX0lOUFVUIC0gaW5wdXQ9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgKmlucHV0KTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCWlmICgocmVzID0gem9yYW5fc2V0X2lucHV0KHpyLCAqaW5wdXQpKSkKLQkJCWdvdG8gc2lucHV0X3VubG9ja19hbmRfcmV0dXJuOwotCi0JCS8qIE1ha2Ugc3VyZSB0aGUgY2hhbmdlcyBjb21lIGludG8gZWZmZWN0ICovCi0JCXJlcyA9IHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKLQlzaW5wdXRfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19FTlVNT1VUUFVUOgotCXsKLQkJc3RydWN0IHY0bDJfb3V0cHV0ICpvdXRwID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19FTlVNT1VUUFVUIC0gaW5kZXg9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgb3V0cC0+aW5kZXgpOwotCi0JCWlmIChvdXRwLT5pbmRleCAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJbWVtc2V0KG91dHAsIDAsIHNpemVvZigqb3V0cCkpOwotCQlvdXRwLT5pbmRleCA9IDA7Ci0JCW91dHAtPnR5cGUgPSBWNEwyX09VVFBVVF9UWVBFX0FOQUxPR1ZHQU9WRVJMQVk7Ci0JCXN0cm5jcHkob3V0cC0+bmFtZSwgIkF1dG9kZXRlY3QiLCBzaXplb2Yob3V0cC0+bmFtZSktMSk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfT1VUUFVUOgotCXsKLQkJaW50ICpvdXRwdXQgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfT1VUUFVUXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJKm91dHB1dCA9IDA7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfT1VUUFVUOgotCXsKLQkJaW50ICpvdXRwdXQgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1NfT1VUUFVUIC0gb3V0cHV0PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksICpvdXRwdXQpOwotCi0JCWlmICgqb3V0cHV0ICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JCS8qIGNyb3BwaW5nIChzdWItZnJhbWUgY2FwdHVyZSkgKi8KLQljYXNlIFZJRElPQ19DUk9QQ0FQOgotCXsKLQkJc3RydWN0IHY0bDJfY3JvcGNhcCAqY3JvcGNhcCA9IGFyZzsKLQkJaW50IHR5cGUgPSBjcm9wY2FwLT50eXBlLCByZXMgPSAwOwotCi0JCWRwcmludGsoMywgS0VSTl9FUlIgIiVzOiBWSURJT0NfQ1JPUENBUCAtIHR5cGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgY3JvcGNhcC0+dHlwZSk7Ci0KLQkJbWVtc2V0KGNyb3BjYXAsIDAsIHNpemVvZigqY3JvcGNhcCkpOwotCQljcm9wY2FwLT50eXBlID0gdHlwZTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJaWYgKGNyb3BjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgJiYKLQkJICAgIChjcm9wY2FwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAotCQkgICAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19DUk9QQ0FQIC0gc3ViY2FwdHVyZSBvbmx5IHN1cHBvcnRlZCBmb3IgY29tcHJlc3NlZCBjYXB0dXJlXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGNyb3BjYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQljcm9wY2FwLT5ib3VuZHMudG9wID0gY3JvcGNhcC0+Ym91bmRzLmxlZnQgPSAwOwotCQljcm9wY2FwLT5ib3VuZHMud2lkdGggPSBCVVpfTUFYX1dJRFRIOwotCQljcm9wY2FwLT5ib3VuZHMuaGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQ7Ci0JCWNyb3BjYXAtPmRlZnJlY3QudG9wID0gY3JvcGNhcC0+ZGVmcmVjdC5sZWZ0ID0gMDsKLQkJY3JvcGNhcC0+ZGVmcmVjdC53aWR0aCA9IEJVWl9NSU5fV0lEVEg7Ci0JCWNyb3BjYXAtPmRlZnJlY3QuaGVpZ2h0ID0gQlVaX01JTl9IRUlHSFQ7Ci0JY3JvcGNhcF91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfQ1JPUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Nyb3AgKmNyb3AgPSBhcmc7Ci0JCWludCB0eXBlID0gY3JvcC0+dHlwZSwgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fRVJSICIlczogVklESU9DX0dfQ1JPUCAtIHR5cGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgY3JvcC0+dHlwZSk7Ci0KLQkJbWVtc2V0KGNyb3AsIDAsIHNpemVvZigqY3JvcCkpOwotCQljcm9wLT50eXBlID0gdHlwZTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJaWYgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgJiYKLQkJICAgIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAotCQkgICAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19HX0NST1AgLSBzdWJjYXB0dXJlIG9ubHkgc3VwcG9ydGVkIGZvciBjb21wcmVzc2VkIGNhcHR1cmVcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gZ2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQljcm9wLT5jLnRvcCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3k7Ci0JCWNyb3AtPmMubGVmdCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3g7Ci0JCWNyb3AtPmMud2lkdGggPSBmaC0+anBnX3NldHRpbmdzLmltZ193aWR0aDsKLQkJY3JvcC0+Yy5oZWlnaHQgPSBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQ7Ci0KLQlnY3JvcF91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19DUk9QOgotCXsKLQkJc3RydWN0IHY0bDJfY3JvcCAqY3JvcCA9IGFyZzsKLQkJaW50IHJlcyA9IDA7Ci0KLQkJc2V0dGluZ3MgPSBmaC0+anBnX3NldHRpbmdzOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IFZJRElPQ19TX0NST1AgLSB0eXBlPSVkLCB4PSVkLHk9JWQsdz0lZCxoPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGNyb3AtPnR5cGUsIGNyb3AtPmMubGVmdCwgY3JvcC0+Yy50b3AsCi0JCQljcm9wLT5jLndpZHRoLCBjcm9wLT5jLmhlaWdodCk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmIChmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkIHx8IGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX1NfQ1JPUCAtIGNhbm5vdCBjaGFuZ2Ugc2V0dGluZ3Mgd2hpbGUgYWN0aXZlXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FQlVTWTsKLQkJCWdvdG8gc2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAmJgotCQkgICAgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8Ci0JCSAgICAgZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVykpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX0dfQ1JPUCAtIHN1YmNhcHR1cmUgb25seSBzdXBwb3J0ZWQgZm9yIGNvbXByZXNzZWQgY2FwdHVyZVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBzY3JvcF91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCS8qIG1vdmUgaW50byBhIGZvcm0gdGhhdCB3ZSB1bmRlcnN0YW5kICovCi0JCXNldHRpbmdzLmltZ194ID0gY3JvcC0+Yy5sZWZ0OwotCQlzZXR0aW5ncy5pbWdfeSA9IGNyb3AtPmMudG9wOwotCQlzZXR0aW5ncy5pbWdfd2lkdGggPSBjcm9wLT5jLndpZHRoOwotCQlzZXR0aW5ncy5pbWdfaGVpZ2h0ID0gY3JvcC0+Yy5oZWlnaHQ7Ci0KLQkJLyogY2hlY2sgdmFsaWRpdHkgKi8KLQkJaWYgKChyZXMgPSB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZzZXR0aW5ncykpKQotCQkJZ290byBzY3JvcF91bmxvY2tfYW5kX3JldHVybjsKLQotCQkvKiBhY2NlcHQgKi8KLQkJZmgtPmpwZ19zZXR0aW5ncyA9IHNldHRpbmdzOwotCi0Jc2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0pQRUdDT01QOgotCXsKLQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpwYXJhbXMgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfSlBFR0NPTVBcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcGFyYW1zLT5xdWFsaXR5ID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5xdWFsaXR5OwotCQlwYXJhbXMtPkFQUG4gPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUG47Ci0JCW1lbWNweShwYXJhbXMtPkFQUF9kYXRhLAotCQkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfZGF0YSwKLQkJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2xlbik7Ci0JCXBhcmFtcy0+QVBQX2xlbiA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2xlbjsKLQkJbWVtY3B5KHBhcmFtcy0+Q09NX2RhdGEsCi0JCSAgICAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkNPTV9kYXRhLAotCQkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fbGVuKTsKLQkJcGFyYW1zLT5DT01fbGVuID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fbGVuOwotCQlwYXJhbXMtPmpwZWdfbWFya2VycyA9Ci0JCSAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLmpwZWdfbWFya2VyczsKLQotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19KUEVHQ09NUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqcGFyYW1zID0gYXJnOwotCQlpbnQgcmVzID0gMDsKLQotCQlzZXR0aW5ncyA9IGZoLT5qcGdfc2V0dGluZ3M7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiBWSURJT0NfU19KUEVHQ09NUCAtIHF1YWxpdHk9JWQsIEFQUE49JWQsIEFQUF9sZW49JWQsIENPTV9sZW49JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgcGFyYW1zLT5xdWFsaXR5LCBwYXJhbXMtPkFQUG4sCi0JCQlwYXJhbXMtPkFQUF9sZW4sIHBhcmFtcy0+Q09NX2xlbik7Ci0KLQkJc2V0dGluZ3MuanBnX2NvbXAgPSAqcGFyYW1zOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlpZiAoZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFIHx8Ci0JCSAgICBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX1dBUk5JTkcKLQkJCQkiJXM6IFZJRElPQ19TX0pQRUdDT01QIGNhbGxlZCB3aGlsZSBpbiBwbGF5YmFjay9jYXB0dXJlIG1vZGVcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmVzID0gLUVCVVNZOwotCQkJZ290byBzanBlZ2NfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQlpZiAoKHJlcyA9IHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnNldHRpbmdzKSkpCi0JCQlnb3RvIHNqcGVnY191bmxvY2tfYW5kX3JldHVybjsKLQkJaWYgKCFmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkKQotCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplID0KLQkJCSAgICB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmZmgtPmpwZ19zZXR0aW5ncyk7Ci0JCWZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAgPSAqcGFyYW1zID0gc2V0dGluZ3MuanBnX2NvbXA7Ci0Jc2pwZWdjX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfUVVFUllTVEQ6CS8qIHdoeSBpcyB0aGlzIHVzZWZ1bD8gKi8KLQl7Ci0JCXY0bDJfc3RkX2lkICpzdGQgPSBhcmc7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19RVUVSWV9TVEQgLSBzdGQ9MHglbGx4XG4iLAotCQkJWlJfREVWTkFNRSh6ciksICh1bnNpZ25lZCBsb25nIGxvbmcpKnN0ZCk7Ci0KLQkJaWYgKCpzdGQgPT0gVjRMMl9TVERfQUxMIHx8ICpzdGQgPT0gVjRMMl9TVERfTlRTQyB8fAotCQkgICAgKnN0ZCA9PSBWNEwyX1NURF9QQUwgfHwgKCpzdGQgPT0gVjRMMl9TVERfU0VDQU0gJiYKLQkJCQkJICAgICB6ci0+Y2FyZC5ub3JtcyA9PSAzKSkgewotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfVFJZX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOwotCQlpbnQgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfVFJZX0ZNVCAtIHR5cGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgZm10LT50eXBlKTsKLQotCQlzd2l0Y2ggKGZtdC0+dHlwZSkgewotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJaWYgKGZtdC0+Zm10Lndpbi53LndpZHRoID4gQlVaX01BWF9XSURUSCkKLQkJCQlmbXQtPmZtdC53aW4udy53aWR0aCA9IEJVWl9NQVhfV0lEVEg7Ci0JCQlpZiAoZm10LT5mbXQud2luLncud2lkdGggPCBCVVpfTUlOX1dJRFRIKQotCQkJCWZtdC0+Zm10Lndpbi53LndpZHRoID0gQlVaX01JTl9XSURUSDsKLQkJCWlmIChmbXQtPmZtdC53aW4udy5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCkKLQkJCQlmbXQtPmZtdC53aW4udy5oZWlnaHQgPSBCVVpfTUFYX0hFSUdIVDsKLQkJCWlmIChmbXQtPmZtdC53aW4udy5oZWlnaHQgPCBCVVpfTUlOX0hFSUdIVCkKLQkJCQlmbXQtPmZtdC53aW4udy5oZWlnaHQgPSBCVVpfTUlOX0hFSUdIVDsKLQotCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCQlicmVhazsKLQotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDoKLQkJCWlmIChmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID4gMCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCQlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9NSlBFRykgewotCQkJCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKLQotCQkJCS8qIHdlIGFjdHVhbGx5IG5lZWQgdG8gc2V0ICdyZWFsJyBwYXJhbWV0ZXJzIG5vdyAqLwotCQkJCWlmICgoZm10LT5mbXQucGl4LmhlaWdodCAqIDIpID4KLQkJCQkgICAgQlVaX01BWF9IRUlHSFQpCi0JCQkJCXNldHRpbmdzLlRtcERjbSA9IDE7Ci0JCQkJZWxzZQotCQkJCQlzZXR0aW5ncy5UbXBEY20gPSAyOwotCQkJCXNldHRpbmdzLmRlY2ltYXRpb24gPSAwOwotCQkJCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0IDw9Ci0JCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodCAvIDIpCi0JCQkJCXNldHRpbmdzLlZlckRjbSA9IDI7Ci0JCQkJZWxzZQotCQkJCQlzZXR0aW5ncy5WZXJEY20gPSAxOwotCQkJCWlmIChmbXQtPmZtdC5waXgud2lkdGggPD0KLQkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyA0KQotCQkJCQlzZXR0aW5ncy5Ib3JEY20gPSA0OwotCQkJCWVsc2UgaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA8PQotCQkJCQkgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyAyKQotCQkJCQlzZXR0aW5ncy5Ib3JEY20gPSAyOwotCQkJCWVsc2UKLQkJCQkJc2V0dGluZ3MuSG9yRGNtID0gMTsKLQkJCQlpZiAoc2V0dGluZ3MuVG1wRGNtID09IDEpCi0JCQkJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMjsKLQkJCQllbHNlCi0JCQkJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMTsKLQotCQkJCS8qIGNoZWNrICovCi0JCQkJaWYgKChyZXMgPQotCQkJCSAgICAgem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLAotCQkJCQkJCSAgICAgICZzZXR0aW5ncykpKQotCQkJCQlnb3RvIHRyeWZtdF91bmxvY2tfYW5kX3JldHVybjsKLQotCQkJCS8qIHRlbGwgdGhlIHVzZXIgd2hhdCB3ZSBhY3R1YWxseSBkaWQgKi8KLQkJCQlmbXQtPmZtdC5waXgud2lkdGggPQotCQkJCSAgICBzZXR0aW5ncy5pbWdfd2lkdGggLyBzZXR0aW5ncy5Ib3JEY207Ci0JCQkJZm10LT5mbXQucGl4LmhlaWdodCA9Ci0JCQkJICAgIHNldHRpbmdzLmltZ19oZWlnaHQgKiAyIC8KLQkJCQkgICAgKHNldHRpbmdzLlRtcERjbSAqIHNldHRpbmdzLlZlckRjbSk7Ci0JCQkJaWYgKHNldHRpbmdzLlRtcERjbSA9PSAxKQotCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQotCQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuCi0JCQkJCSAgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1NFUV9UQiA6Ci0JCQkJCSAgICAgVjRMMl9GSUVMRF9TRVFfQlQpOwotCQkJCWVsc2UKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIChmaC0+anBnX3NldHRpbmdzLgotCQkJCQkgICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9UT1AgOgotCQkJCQkgICAgIFY0TDJfRklFTERfQk9UVE9NKTsKLQotCQkJCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPQotCQkJCSAgICB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmc2V0dGluZ3MpOwotCQkJfSBlbHNlIGlmIChmbXQtPnR5cGUgPT0KLQkJCQkgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKLQkJCQlpbnQgaTsKLQotCQkJCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKQotCQkJCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5mb3VyY2MgPT0KLQkJCQkJICAgIGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCkKLQkJCQkJCWJyZWFrOwotCQkJCWlmIChpID09IE5VTV9GT1JNQVRTKSB7Ci0JCQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQkJCWdvdG8gdHJ5Zm10X3VubG9ja19hbmRfcmV0dXJuOwotCQkJCX0KLQotCQkJCWlmIChmbXQtPmZtdC5waXgud2lkdGggPiBCVVpfTUFYX1dJRFRIKQotCQkJCQlmbXQtPmZtdC5waXgud2lkdGggPSBCVVpfTUFYX1dJRFRIOwotCQkJCWlmIChmbXQtPmZtdC5waXgud2lkdGggPCBCVVpfTUlOX1dJRFRIKQotCQkJCQlmbXQtPmZtdC5waXgud2lkdGggPSBCVVpfTUlOX1dJRFRIOwotCQkJCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQpCi0JCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQotCQkJCQkgICAgQlVaX01BWF9IRUlHSFQ7Ci0JCQkJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPCBCVVpfTUlOX0hFSUdIVCkKLQkJCQkJZm10LT5mbXQucGl4LmhlaWdodCA9Ci0JCQkJCSAgICBCVVpfTUlOX0hFSUdIVDsKLQkJCX0gZWxzZSB7Ci0JCQkJcmVzID0gLUVJTlZBTDsKLQkJCQlnb3RvIHRyeWZtdF91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQkJdHJ5Zm10X3VubG9ja19hbmRfcmV0dXJuOgotCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCXJldHVybiByZXM7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogVU5LTk9XTiBpb2N0bCBjbWQ6IDB4JXhcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgY21kKTsKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQkJYnJlYWs7Ci0KKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQorfQorCitzdGF0aWMgaW50IHpvcmFuX3ZpZGlvY2dtYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdmlkZW9fbWJ1ZiAqdm1idWYpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgaSwgcmVzID0gMDsKKworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJaWYgKGZoLT5idWZmZXJzLmFsbG9jYXRlZCkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBWSURJT0NHTUJVRiAtIGJ1ZmZlcnMgYWxyZWFkeSBhbGxvY2F0ZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlcyA9IC1FSU5WQUw7CisJCWdvdG8gdjRsMXJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBWNEwgYnVmZmVycyAqLworCW1hcF9tb2RlX3JhdyhmaCk7CisKKwlpZiAodjRsX2ZidWZmZXJfYWxsb2MoZmgpKSB7CisJCXJlcyA9IC1FTk9NRU07CisJCWdvdG8gdjRsMXJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwl2bWJ1Zi0+c2l6ZSA9IGZoLT5idWZmZXJzLm51bV9idWZmZXJzICogZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemU7CisJdm1idWYtPmZyYW1lcyA9IGZoLT5idWZmZXJzLm51bV9idWZmZXJzOworCWZvciAoaSA9IDA7IGkgPCB2bWJ1Zi0+ZnJhbWVzOyBpKyspCisJCXZtYnVmLT5vZmZzZXRzW2ldID0gaSAqIGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOworCit2NGwxcmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIHJlczsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHpvcmFuX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCW1lbXNldChjYXAsIDAsIHNpemVvZigqY2FwKSk7CisJc3RybmNweShjYXAtPmNhcmQsIFpSX0RFVk5BTUUoenIpLCBzaXplb2YoY2FwLT5jYXJkKS0xKTsKKwlzdHJuY3B5KGNhcC0+ZHJpdmVyLCAiem9yYW4iLCBzaXplb2YoY2FwLT5kcml2ZXIpLTEpOworCXNucHJpbnRmKGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSwgIlBDSTolcyIsCisJCSBwY2lfbmFtZSh6ci0+cGNpX2RldikpOworCWNhcC0+dmVyc2lvbiA9IEtFUk5FTF9WRVJTSU9OKE1BSk9SX1ZFUlNJT04sIE1JTk9SX1ZFUlNJT04sCisJCQkgICBSRUxFQVNFX1ZFUlNJT04pOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfU1RSRUFNSU5HIHwgVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CisJCQkgICAgVjRMMl9DQVBfVklERU9fT1VUUFVUIHwgVjRMMl9DQVBfVklERU9fT1ZFUkxBWTsKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgbG9uZwotem9yYW5faW9jdGwoc3RydWN0IGZpbGUgICpmaWxlLAotCSAgICB1bnNpZ25lZCBpbnQgIGNtZCwKLQkgICAgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHpvcmFuX2VudW1fZm10KHN0cnVjdCB6b3JhbiAqenIsIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCwgaW50IGZsYWcpCiB7Ci0JcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGZpbGUsIGNtZCwgYXJnLCB6b3Jhbl9kb19pb2N0bCk7CisJaW50IG51bSA9IC0xLCBpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspIHsKKwkJaWYgKHpvcmFuX2Zvcm1hdHNbaV0uZmxhZ3MgJiBmbGFnKQorCQkJbnVtKys7CisJCWlmIChudW0gPT0gZm10LT5pbmRleCkKKwkJCWJyZWFrOworCX0KKwlpZiAoZm10LT5pbmRleCA8IDAgLyogbGF0ZSwgYnV0IG5vdCB0b28gbGF0ZSAqLyAgfHwgaSA9PSBOVU1fRk9STUFUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdHJuY3B5KGZtdC0+ZGVzY3JpcHRpb24sIHpvcmFuX2Zvcm1hdHNbaV0ubmFtZSwgc2l6ZW9mKGZtdC0+ZGVzY3JpcHRpb24pLTEpOworCWZtdC0+cGl4ZWxmb3JtYXQgPSB6b3Jhbl9mb3JtYXRzW2ldLmZvdXJjYzsKKwlpZiAoem9yYW5fZm9ybWF0c1tpXS5mbGFncyAmIFpPUkFOX0ZPUk1BVF9DT01QUkVTU0VEKQorCQlmbXQtPmZsYWdzIHw9IFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl9lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJCQkgICAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJcmV0dXJuIHpvcmFuX2VudW1fZm10KHpyLCBmLCBaT1JBTl9GT1JNQVRfQ0FQVFVSRSk7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZW51bV9mbXRfdmlkX291dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkJICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCXJldHVybiB6b3Jhbl9lbnVtX2ZtdCh6ciwgZiwgWk9SQU5fRk9STUFUX1BMQVlCQUNLKTsKK30KKworc3RhdGljIGludCB6b3Jhbl9lbnVtX2ZtdF92aWRfb3ZlcmxheShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkJICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCXJldHVybiB6b3Jhbl9lbnVtX2ZtdCh6ciwgZiwgWk9SQU5fRk9STUFUX09WRVJMQVkpOworfQorCitzdGF0aWMgaW50IHpvcmFuX2dfZm10X3ZpZF9vdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlmbXQtPmZtdC5waXgud2lkdGggPSBmaC0+anBnX3NldHRpbmdzLmltZ193aWR0aCAvIGZoLT5qcGdfc2V0dGluZ3MuSG9yRGNtOworCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQgKiAyIC8KKwkJKGZoLT5qcGdfc2V0dGluZ3MuVmVyRGNtICogZmgtPmpwZ19zZXR0aW5ncy5UbXBEY20pOworCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPSB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmZmgtPmpwZ19zZXR0aW5ncyk7CisJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01KUEVHOworCWlmIChmaC0+anBnX3NldHRpbmdzLlRtcERjbSA9PSAxKQorCQlmbXQtPmZtdC5waXguZmllbGQgPSAoZmgtPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiA/CisJCQkJVjRMMl9GSUVMRF9TRVFfVEIgOiBWNEwyX0ZJRUxEX1NFUV9CVCk7CisJZWxzZQorCQlmbXQtPmZtdC5waXguZmllbGQgPSAoZmgtPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiA/CisJCQkJVjRMMl9GSUVMRF9UT1AgOiBWNEwyX0ZJRUxEX0JPVFRPTSk7CisJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CisJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOworCisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCWlmIChmaC0+bWFwX21vZGUgIT0gWk9SQU5fTUFQX01PREVfUkFXKQorCQlyZXR1cm4gem9yYW5fZ19mbXRfdmlkX291dChmaWxlLCBmaCwgZm10KTsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlmbXQtPmZtdC5waXgud2lkdGggPSBmaC0+djRsX3NldHRpbmdzLndpZHRoOworCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBmaC0+djRsX3NldHRpbmdzLmhlaWdodDsKKwlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0gZmgtPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmUgKgorCQkJCQlmaC0+djRsX3NldHRpbmdzLmhlaWdodDsKKwlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBmaC0+djRsX3NldHRpbmdzLmZvcm1hdC0+Zm91cmNjOworCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0gZmgtPnY0bF9zZXR0aW5ncy5mb3JtYXQtPmNvbG9yc3BhY2U7CisJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lOworCWlmIChCVVpfTUFYX0hFSUdIVCA8IChmaC0+djRsX3NldHRpbmdzLmhlaWdodCAqIDIpKQorCQlmbXQtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJZWxzZQorCQlmbXQtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX1RPUDsKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl9nX2ZtdF92aWRfb3ZlcmxheShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCWZtdC0+Zm10Lndpbi53LmxlZnQgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy54OworCWZtdC0+Zm10Lndpbi53LnRvcCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLnk7CisJZm10LT5mbXQud2luLncud2lkdGggPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aDsKKwlmbXQtPmZtdC53aW4udy5oZWlnaHQgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy5oZWlnaHQ7CisJaWYgKGZoLT5vdmVybGF5X3NldHRpbmdzLndpZHRoICogMiA+IEJVWl9NQVhfSEVJR0hUKQorCQlmbXQtPmZtdC53aW4uZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJZWxzZQorCQlmbXQtPmZtdC53aW4uZmllbGQgPSBWNEwyX0ZJRUxEX1RPUDsKKworCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX3RyeV9mbXRfdmlkX292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlpZiAoZm10LT5mbXQud2luLncud2lkdGggPiBCVVpfTUFYX1dJRFRIKQorCQlmbXQtPmZtdC53aW4udy53aWR0aCA9IEJVWl9NQVhfV0lEVEg7CisJaWYgKGZtdC0+Zm10Lndpbi53LndpZHRoIDwgQlVaX01JTl9XSURUSCkKKwkJZm10LT5mbXQud2luLncud2lkdGggPSBCVVpfTUlOX1dJRFRIOworCWlmIChmbXQtPmZtdC53aW4udy5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCkKKwkJZm10LT5mbXQud2luLncuaGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQ7CisJaWYgKGZtdC0+Zm10Lndpbi53LmhlaWdodCA8IEJVWl9NSU5fSEVJR0hUKQorCQlmbXQtPmZtdC53aW4udy5oZWlnaHQgPSBCVVpfTUlOX0hFSUdIVDsKKworCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX3RyeV9mbXRfdmlkX291dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlzdHJ1Y3Qgem9yYW5fanBnX3NldHRpbmdzIHNldHRpbmdzOworCWludCByZXMgPSAwOworCisJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfTUpQRUcpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKKworCS8qIHdlIGFjdHVhbGx5IG5lZWQgdG8gc2V0ICdyZWFsJyBwYXJhbWV0ZXJzIG5vdyAqLworCWlmICgoZm10LT5mbXQucGl4LmhlaWdodCAqIDIpID4gQlVaX01BWF9IRUlHSFQpCisJCXNldHRpbmdzLlRtcERjbSA9IDE7CisJZWxzZQorCQlzZXR0aW5ncy5UbXBEY20gPSAyOworCXNldHRpbmdzLmRlY2ltYXRpb24gPSAwOworCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0IDw9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodCAvIDIpCisJCXNldHRpbmdzLlZlckRjbSA9IDI7CisJZWxzZQorCQlzZXR0aW5ncy5WZXJEY20gPSAxOworCWlmIChmbXQtPmZtdC5waXgud2lkdGggPD0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyA0KQorCQlzZXR0aW5ncy5Ib3JEY20gPSA0OworCWVsc2UgaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA8PSBmaC0+anBnX3NldHRpbmdzLmltZ193aWR0aCAvIDIpCisJCXNldHRpbmdzLkhvckRjbSA9IDI7CisJZWxzZQorCQlzZXR0aW5ncy5Ib3JEY20gPSAxOworCWlmIChzZXR0aW5ncy5UbXBEY20gPT0gMSkKKwkJc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYgPSAyOworCWVsc2UKKwkJc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYgPSAxOworCisJaWYgKHNldHRpbmdzLkhvckRjbSA+IDEpIHsKKwkJc2V0dGluZ3MuaW1nX3ggPSAoQlVaX01BWF9XSURUSCA9PSA3MjApID8gOCA6IDA7CisJCXNldHRpbmdzLmltZ193aWR0aCA9IChCVVpfTUFYX1dJRFRIID09IDcyMCkgPyA3MDQgOiBCVVpfTUFYX1dJRFRIOworCX0gZWxzZSB7CisJCXNldHRpbmdzLmltZ194ID0gMDsKKwkJc2V0dGluZ3MuaW1nX3dpZHRoID0gQlVaX01BWF9XSURUSDsKKwl9CisKKwkvKiBjaGVjayAqLworCXJlcyA9IHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnNldHRpbmdzLCAxKTsKKwlpZiAocmVzKQorCQlnb3RvIHRyeWZtdF91bmxvY2tfYW5kX3JldHVybjsKKworCS8qIHRlbGwgdGhlIHVzZXIgd2hhdCB3ZSBhY3R1YWxseSBkaWQgKi8KKwlmbXQtPmZtdC5waXgud2lkdGggPSBzZXR0aW5ncy5pbWdfd2lkdGggLyBzZXR0aW5ncy5Ib3JEY207CisJZm10LT5mbXQucGl4LmhlaWdodCA9IHNldHRpbmdzLmltZ19oZWlnaHQgKiAyIC8KKwkJKHNldHRpbmdzLlRtcERjbSAqIHNldHRpbmdzLlZlckRjbSk7CisJaWYgKHNldHRpbmdzLlRtcERjbSA9PSAxKQorCQlmbXQtPmZtdC5waXguZmllbGQgPSAoZmgtPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiA/CisJCQkJVjRMMl9GSUVMRF9TRVFfVEIgOiBWNEwyX0ZJRUxEX1NFUV9CVCk7CisJZWxzZQorCQlmbXQtPmZtdC5waXguZmllbGQgPSAoZmgtPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiA/CisJCQkJVjRMMl9GSUVMRF9UT1AgOiBWNEwyX0ZJRUxEX0JPVFRPTSk7CisKKwlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0gem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJnNldHRpbmdzKTsKKwlmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gMDsKKwlmbXQtPmZtdC5waXguY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07Cit0cnlmbXRfdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl90cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IGJwcDsKKwlpbnQgaTsKKworCWlmIChmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX01KUEVHKQorCQlyZXR1cm4gem9yYW5fdHJ5X2ZtdF92aWRfb3V0KGZpbGUsIGZoLCBmbXQpOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspCisJCWlmICh6b3Jhbl9mb3JtYXRzW2ldLmZvdXJjYyA9PSBmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQpCisJCQlicmVhazsKKworCWlmIChpID09IE5VTV9GT1JNQVRTKSB7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlicHAgPSAoem9yYW5fZm9ybWF0c1tpXS5kZXB0aCArIDcpIC8gODsKKwlmbXQtPmZtdC5waXgud2lkdGggJj0gfigoYnBwID09IDIpID8gMSA6IDMpOworCWlmIChmbXQtPmZtdC5waXgud2lkdGggPiBCVVpfTUFYX1dJRFRIKQorCQlmbXQtPmZtdC5waXgud2lkdGggPSBCVVpfTUFYX1dJRFRIOworCWlmIChmbXQtPmZtdC5waXgud2lkdGggPCBCVVpfTUlOX1dJRFRIKQorCQlmbXQtPmZtdC5waXgud2lkdGggPSBCVVpfTUlOX1dJRFRIOworCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQpCisJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBCVVpfTUFYX0hFSUdIVDsKKwlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA8IEJVWl9NSU5fSEVJR0hUKQorCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0gQlVaX01JTl9IRUlHSFQ7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl9zX2ZtdF92aWRfb3ZlcmxheShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgcmVzOworCisJZHByaW50aygzLCAieD0lZCwgeT0lZCwgdz0lZCwgaD0lZCwgY250PSVkLCBtYXA9MHglcFxuIiwKKwkJCWZtdC0+Zm10Lndpbi53LmxlZnQsIGZtdC0+Zm10Lndpbi53LnRvcCwKKwkJCWZtdC0+Zm10Lndpbi53LndpZHRoLAorCQkJZm10LT5mbXQud2luLncuaGVpZ2h0LAorCQkJZm10LT5mbXQud2luLmNsaXBjb3VudCwKKwkJCWZtdC0+Zm10Lndpbi5iaXRtYXApOworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXMgPSBzZXR1cF93aW5kb3coZmgsIGZtdC0+Zm10Lndpbi53LmxlZnQsIGZtdC0+Zm10Lndpbi53LnRvcCwKKwkJCSAgIGZtdC0+Zm10Lndpbi53LndpZHRoLCBmbXQtPmZtdC53aW4udy5oZWlnaHQsCisJCQkgICAoc3RydWN0IHY0bDJfY2xpcCBfX3VzZXIgKilmbXQtPmZtdC53aW4uY2xpcHMsCisJCQkgICBmbXQtPmZtdC53aW4uY2xpcGNvdW50LCBmbXQtPmZtdC53aW4uYml0bWFwKTsKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX3NfZm10X3ZpZF9vdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJX19sZTMyIHByaW50Zm9ybWF0ID0gX19jcHVfdG9fbGUzMihmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQpOworCXN0cnVjdCB6b3Jhbl9qcGdfc2V0dGluZ3Mgc2V0dGluZ3M7CisJaW50IHJlcyA9IDA7CisKKwlkcHJpbnRrKDMsICJzaXplPSVkeCVkLCBmbXQ9MHgleCAoJTQuNHMpXG4iLAorCQkJZm10LT5mbXQucGl4LndpZHRoLCBmbXQtPmZtdC5waXguaGVpZ2h0LAorCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0LAorCQkJKGNoYXIgKikgJnByaW50Zm9ybWF0KTsKKwlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9NSlBFRykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlpZiAoZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkKSB7CisJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBWSURJT0NfU19GTVQgLSBjYW5ub3QgY2hhbmdlIGNhcHR1cmUgbW9kZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmVzID0gLUVCVVNZOworCQlnb3RvIHNmbXRqcGdfdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCisJc2V0dGluZ3MgPSBmaC0+anBnX3NldHRpbmdzOworCisJLyogd2UgYWN0dWFsbHkgbmVlZCB0byBzZXQgJ3JlYWwnIHBhcmFtZXRlcnMgbm93ICovCisJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgKiAyID4gQlVaX01BWF9IRUlHSFQpCisJCXNldHRpbmdzLlRtcERjbSA9IDE7CisJZWxzZQorCQlzZXR0aW5ncy5UbXBEY20gPSAyOworCXNldHRpbmdzLmRlY2ltYXRpb24gPSAwOworCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0IDw9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodCAvIDIpCisJCXNldHRpbmdzLlZlckRjbSA9IDI7CisJZWxzZQorCQlzZXR0aW5ncy5WZXJEY20gPSAxOworCWlmIChmbXQtPmZtdC5waXgud2lkdGggPD0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyA0KQorCQlzZXR0aW5ncy5Ib3JEY20gPSA0OworCWVsc2UgaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA8PSBmaC0+anBnX3NldHRpbmdzLmltZ193aWR0aCAvIDIpCisJCXNldHRpbmdzLkhvckRjbSA9IDI7CisJZWxzZQorCQlzZXR0aW5ncy5Ib3JEY20gPSAxOworCWlmIChzZXR0aW5ncy5UbXBEY20gPT0gMSkKKwkJc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYgPSAyOworCWVsc2UKKwkJc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYgPSAxOworCisJaWYgKHNldHRpbmdzLkhvckRjbSA+IDEpIHsKKwkJc2V0dGluZ3MuaW1nX3ggPSAoQlVaX01BWF9XSURUSCA9PSA3MjApID8gOCA6IDA7CisJCXNldHRpbmdzLmltZ193aWR0aCA9IChCVVpfTUFYX1dJRFRIID09IDcyMCkgPyA3MDQgOiBCVVpfTUFYX1dJRFRIOworCX0gZWxzZSB7CisJCXNldHRpbmdzLmltZ194ID0gMDsKKwkJc2V0dGluZ3MuaW1nX3dpZHRoID0gQlVaX01BWF9XSURUSDsKKwl9CisKKwkvKiBjaGVjayAqLworCXJlcyA9IHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnNldHRpbmdzLCAwKTsKKwlpZiAocmVzKQorCQlnb3RvIHNmbXRqcGdfdW5sb2NrX2FuZF9yZXR1cm47CisKKwkvKiBpdCdzIG9rLCBzbyBzZXQgdGhlbSAqLworCWZoLT5qcGdfc2V0dGluZ3MgPSBzZXR0aW5nczsKKworCW1hcF9tb2RlX2pwZyhmaCwgZm10LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUKTsKKwlmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSA9IHpvcmFuX3Y0bDJfY2FsY19idWZzaXplKCZmaC0+anBnX3NldHRpbmdzKTsKKworCS8qIHRlbGwgdGhlIHVzZXIgd2hhdCB3ZSBhY3R1YWxseSBkaWQgKi8KKwlmbXQtPmZtdC5waXgud2lkdGggPSBzZXR0aW5ncy5pbWdfd2lkdGggLyBzZXR0aW5ncy5Ib3JEY207CisJZm10LT5mbXQucGl4LmhlaWdodCA9IHNldHRpbmdzLmltZ19oZWlnaHQgKiAyIC8KKwkJKHNldHRpbmdzLlRtcERjbSAqIHNldHRpbmdzLlZlckRjbSk7CisJaWYgKHNldHRpbmdzLlRtcERjbSA9PSAxKQorCQlmbXQtPmZtdC5waXguZmllbGQgPSAoZmgtPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiA/CisJCQkJVjRMMl9GSUVMRF9TRVFfVEIgOiBWNEwyX0ZJRUxEX1NFUV9CVCk7CisJZWxzZQorCQlmbXQtPmZtdC5waXguZmllbGQgPSAoZmgtPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiA/CisJCQkJVjRMMl9GSUVMRF9UT1AgOiBWNEwyX0ZJRUxEX0JPVFRPTSk7CisJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CisJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOworCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKKworc2ZtdGpwZ191bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IGk7CisJaW50IHJlcyA9IDA7CisKKwlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9NSlBFRykKKwkJcmV0dXJuIHpvcmFuX3NfZm10X3ZpZF9vdXQoZmlsZSwgZmgsIGZtdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykKKwkJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSB6b3Jhbl9mb3JtYXRzW2ldLmZvdXJjYykKKwkJCWJyZWFrOworCWlmIChpID09IE5VTV9GT1JNQVRTKSB7CisJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBWSURJT0NfU19GTVQgLSB1bmtub3duL3Vuc3VwcG9ydGVkIGZvcm1hdCAweCV4XG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCWlmICgoZmgtPm1hcF9tb2RlICE9IFpPUkFOX01BUF9NT0RFX1JBVyAmJiBmaC0+YnVmZmVycy5hbGxvY2F0ZWQpIHx8CisJICAgIGZoLT5idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7CisJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBWSURJT0NfU19GTVQgLSBjYW5ub3QgY2hhbmdlIGNhcHR1cmUgbW9kZVxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlcyA9IC1FQlVTWTsKKwkJZ290byBzZm10djRsX3VubG9ja19hbmRfcmV0dXJuOworCX0KKwlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA+IEJVWl9NQVhfSEVJR0hUKQorCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQ7CisJaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA+IEJVWl9NQVhfV0lEVEgpCisJCWZtdC0+Zm10LnBpeC53aWR0aCA9IEJVWl9NQVhfV0lEVEg7CisKKwltYXBfbW9kZV9yYXcoZmgpOworCisJcmVzID0gem9yYW5fdjRsX3NldF9mb3JtYXQoZmgsIGZtdC0+Zm10LnBpeC53aWR0aCwgZm10LT5mbXQucGl4LmhlaWdodCwKKwkJCQkgICAmem9yYW5fZm9ybWF0c1tpXSk7CisJaWYgKHJlcykKKwkJZ290byBzZm10djRsX3VubG9ja19hbmRfcmV0dXJuOworCisJLyogdGVsbCB0aGUgdXNlciB0aGUgcmVzdWx0cy9taXNzaW5nIHN0dWZmICovCisJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lOworCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPSBmaC0+djRsX3NldHRpbmdzLmhlaWdodCAqIGZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lOworCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0gZmgtPnY0bF9zZXR0aW5ncy5mb3JtYXQtPmNvbG9yc3BhY2U7CisJaWYgKEJVWl9NQVhfSEVJR0hUIDwgKGZoLT52NGxfc2V0dGluZ3MuaGVpZ2h0ICogMikpCisJCWZtdC0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwllbHNlCisJCWZtdC0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfVE9QOworCitzZm10djRsX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZ19mYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCW1lbXNldChmYiwgMCwgc2l6ZW9mKCpmYikpOworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlmYi0+YmFzZSA9IHpyLT52YnVmX2Jhc2U7CisJZmItPmZtdC53aWR0aCA9IHpyLT52YnVmX3dpZHRoOworCWZiLT5mbXQuaGVpZ2h0ID0genItPnZidWZfaGVpZ2h0OworCWlmICh6ci0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQpCisJCWZiLT5mbXQucGl4ZWxmb3JtYXQgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQtPmZvdXJjYzsKKwlmYi0+Zm10LmJ5dGVzcGVybGluZSA9IHpyLT52YnVmX2J5dGVzcGVybGluZTsKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlmYi0+Zm10LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQjsKKwlmYi0+Zm10LmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCWZiLT5mbGFncyA9IFY0TDJfRkJVRl9GTEFHX09WRVJMQVk7CisJZmItPmNhcGFiaWxpdHkgPSBWNEwyX0ZCVUZfQ0FQX0xJU1RfQ0xJUFBJTkc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl9zX2ZidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCBpLCByZXMgPSAwOworCV9fbGUzMiBwcmludGZvcm1hdCA9IF9fY3B1X3RvX2xlMzIoZmItPmZtdC5waXhlbGZvcm1hdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykKKwkJaWYgKHpvcmFuX2Zvcm1hdHNbaV0uZm91cmNjID09IGZiLT5mbXQucGl4ZWxmb3JtYXQpCisJCQlicmVhazsKKwlpZiAoaSA9PSBOVU1fRk9STUFUUykgeworCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogVklESU9DX1NfRkJVRiAtIGZvcm1hdD0weCV4ICglNC40cykgbm90IGFsbG93ZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgZmItPmZtdC5waXhlbGZvcm1hdCwKKwkJCShjaGFyICopJnByaW50Zm9ybWF0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJlcyA9IHNldHVwX2ZidWZmZXIoZmgsIGZiLT5iYXNlLCAmem9yYW5fZm9ybWF0c1tpXSwgZmItPmZtdC53aWR0aCwKKwkJCSAgICBmYi0+Zm10LmhlaWdodCwgZmItPmZtdC5ieXRlc3BlcmxpbmUpOworCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCB1bnNpZ25lZCBpbnQgb24pCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgcmVzOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJlcyA9IHNldHVwX292ZXJsYXkoZmgsIG9uKTsKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSk7CisKK3N0YXRpYyBpbnQgem9yYW5fcmVxYnVmcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJlcSkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCByZXMgPSAwOworCisJaWYgKHJlcS0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApIHsKKwkJZHByaW50aygyLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBvbmx5IE1FTU9SWV9NTUFQIGNhcHR1cmUgaXMgc3VwcG9ydGVkLCBub3QgJWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIHJlcS0+bWVtb3J5KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHJlcS0+Y291bnQgPT0gMCkKKwkJcmV0dXJuIHpvcmFuX3N0cmVhbW9mZihmaWxlLCBmaCwgcmVxLT50eXBlKTsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlpZiAoZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkKSB7CisJCWRwcmludGsoMiwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogVklESU9DX1JFUUJVRlMgLSBidWZmZXJzIGFscmVhZHkgYWxsb2NhdGVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmVzID0gLUVCVVNZOworCQlnb3RvIHY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCisJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcgJiYKKwkgICAgcmVxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQkvKiBjb250cm9sIHVzZXIgaW5wdXQgKi8KKwkJaWYgKHJlcS0+Y291bnQgPCAyKQorCQkJcmVxLT5jb3VudCA9IDI7CisJCWlmIChyZXEtPmNvdW50ID4gdjRsX25idWZzKQorCQkJcmVxLT5jb3VudCA9IHY0bF9uYnVmczsKKworCQkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBWNEwgYnVmZmVycyAqLworCQltYXBfbW9kZV9yYXcoZmgpOworCQlmaC0+YnVmZmVycy5udW1fYnVmZmVycyA9IHJlcS0+Y291bnQ7CisKKwkJaWYgKHY0bF9mYnVmZmVyX2FsbG9jKGZoKSkgeworCQkJcmVzID0gLUVOT01FTTsKKwkJCWdvdG8gdjRsMnJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCX0gZWxzZSBpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19SRUMgfHwKKwkJICAgZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19QTEFZKSB7CisJCS8qIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHNpemUgb3Vyc2VsdmVzIG5vdyAqLworCQlpZiAocmVxLT5jb3VudCA8IDQpCisJCQlyZXEtPmNvdW50ID0gNDsKKwkJaWYgKHJlcS0+Y291bnQgPiBqcGdfbmJ1ZnMpCisJCQlyZXEtPmNvdW50ID0ganBnX25idWZzOworCisJCS8qIFRoZSBuZXh0IG1tYXAgd2lsbCBtYXAgdGhlIE1KUEVHIGJ1ZmZlcnMgKi8KKwkJbWFwX21vZGVfanBnKGZoLCByZXEtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQpOworCQlmaC0+YnVmZmVycy5udW1fYnVmZmVycyA9IHJlcS0+Y291bnQ7CisJCWZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplID0gem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJmZoLT5qcGdfc2V0dGluZ3MpOworCisJCWlmIChqcGdfZmJ1ZmZlcl9hbGxvYyhmaCkpIHsKKwkJCXJlcyA9IC1FTk9NRU07CisJCQlnb3RvIHY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKwl9IGVsc2UgeworCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19SRVFCVUZTIC0gdW5rbm93biB0eXBlICVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCByZXEtPnR5cGUpOworCQlyZXMgPSAtRUlOVkFMOworCQlnb3RvIHY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJfQordjRsMnJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHJlczsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXMgPSB6b3Jhbl92NGwyX2J1ZmZlcl9zdGF0dXMoZmgsIGJ1ZiwgYnVmLT5pbmRleCk7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHJlcyA9IDAsIGNvZGVjX21vZGUsIGJ1Zl90eXBlOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKKwljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKKwkJaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJCWRwcmludGsoMSwgS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19RQlVGIC0gaW52YWxpZCBidWYtPnR5cGU9JWQgZm9yIG1hcF9tb2RlPSVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisKKwkJcmVzID0gem9yYW5fdjRsX3F1ZXVlX2ZyYW1lKGZoLCBidWYtPmluZGV4KTsKKwkJaWYgKHJlcykKKwkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJaWYgKCF6ci0+djRsX21lbWdyYWJfYWN0aXZlICYmIGZoLT5idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9MT0NLRUQpCisJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAxKTsKKwkJYnJlYWs7CisKKwljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6CisJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKKwkJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWSkgeworCQkJYnVmX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDsKKwkJCWNvZGVjX21vZGUgPSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUzsKKwkJfSBlbHNlIHsKKwkJCWJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQkJY29kZWNfbW9kZSA9IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUzsKKwkJfQorCisJCWlmIChidWYtPnR5cGUgIT0gYnVmX3R5cGUpIHsKKwkJCWRwcmludGsoMSwgS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19RQlVGIC0gaW52YWxpZCBidWYtPnR5cGU9JWQgZm9yIG1hcF9tb2RlPSVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisKKwkJcmVzID0gem9yYW5fanBnX3F1ZXVlX2ZyYW1lKGZoLCBidWYtPmluZGV4LCBjb2RlY19tb2RlKTsKKwkJaWYgKHJlcyAhPSAwKQorCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfSURMRSAmJgorCQkgICAgZmgtPmJ1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0xPQ0tFRCkKKwkJCXpyMzYwNTdfZW5hYmxlX2pwZyh6ciwgY29kZWNfbW9kZSk7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkcHJpbnRrKDEsIEtFUk5fRVJSCisJCQkiJXM6IFZJRElPQ19RQlVGIC0gdW5zdXBwb3J0ZWQgdHlwZSAlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUpOworCQlyZXMgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CitxYnVmX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgcmVzID0gMCwgYnVmX3R5cGUsIG51bSA9IC0xOwkvKiBjb21waWxlciBib3JrcyBoZXJlICg/KSAqLworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKKwljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKKwkJaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJCWRwcmludGsoMSwgS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19RQlVGIC0gaW52YWxpZCBidWYtPnR5cGU9JWQgZm9yIG1hcF9tb2RlPSVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCW51bSA9IHpyLT52NGxfcGVuZFt6ci0+djRsX3N5bmNfdGFpbCAmIFY0TF9NQVNLX0ZSQU1FXTsKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLICYmCisJCSAgICB6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgIT0gQlVaX1NUQVRFX0RPTkUpIHsKKwkJCXJlcyA9IC1FQUdBSU47CisJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisJCXJlcyA9IHY0bF9zeW5jKGZoLCBudW0pOworCQlpZiAocmVzKQorCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJenItPnY0bF9zeW5jX3RhaWwrKzsKKwkJcmVzID0gem9yYW5fdjRsMl9idWZmZXJfc3RhdHVzKGZoLCBidWYsIG51bSk7CisJCWJyZWFrOworCisJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgorCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6CisJeworCQlzdHJ1Y3Qgem9yYW5fc3luYyBiczsKKworCQlpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19QTEFZKQorCQkJYnVmX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDsKKwkJZWxzZQorCQkJYnVmX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKKwkJaWYgKGJ1Zi0+dHlwZSAhPSBidWZfdHlwZSkgeworCQkJZHByaW50aygxLCBLRVJOX0VSUgorCQkJCSIlczogVklESU9DX1FCVUYgLSBpbnZhbGlkIGJ1Zi0+dHlwZT0lZCBmb3IgbWFwX21vZGU9JWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSwgZmgtPm1hcF9tb2RlKTsKKwkJCXJlcyA9IC1FSU5WQUw7CisJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisKKwkJbnVtID0genItPmpwZ19wZW5kW3pyLT5qcGdfcXVlX3RhaWwgJiBCVVpfTUFTS19GUkFNRV07CisKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLICYmCisJCSAgICB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgIT0gQlVaX1NUQVRFX0RPTkUpIHsKKwkJCXJlcyA9IC1FQUdBSU47CisJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisJCXJlcyA9IGpwZ19zeW5jKGZoLCAmYnMpOworCQlpZiAocmVzKQorCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJcmVzID0gem9yYW5fdjRsMl9idWZmZXJfc3RhdHVzKGZoLCBidWYsIGJzLmZyYW1lKTsKKwkJYnJlYWs7CisJfQorCisJZGVmYXVsdDoKKwkJZHByaW50aygxLCBLRVJOX0VSUgorCQkJIiVzOiBWSURJT0NfRFFCVUYgLSB1bnN1cHBvcnRlZCB0eXBlICVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSk7CisJCXJlcyA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KK2RxYnVmX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgcmVzID0gMDsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7CisJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6CS8qIHJhdyBjYXB0dXJlICovCisJCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSB8fAorCQkgICAgZmgtPmJ1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSkgeworCQkJcmVzID0gLUVCVVNZOworCQkJZ290byBzdHJtb25fdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKworCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPmJ1ZmZlcnMuYWN0aXZlID0gWk9SQU5fTE9DS0VEOworCQl6ci0+djRsX3NldHRpbmdzID0gZmgtPnY0bF9zZXR0aW5nczsKKworCQl6ci0+djRsX3N5bmNfdGFpbCA9IHpyLT52NGxfcGVuZF90YWlsOworCQlpZiAoIXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUgJiYKKwkJICAgIHpyLT52NGxfcGVuZF9oZWFkICE9IHpyLT52NGxfcGVuZF90YWlsKSB7CisJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAxKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKKwljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgorCQkvKiB3aGF0IGlzIHRoZSBjb2RlYyBtb2RlIHJpZ2h0IG5vdz8gKi8KKwkJaWYgKHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fQUNUSVZFIHx8CisJCSAgICBmaC0+YnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fQUNUSVZFKSB7CisJCQlyZXMgPSAtRUJVU1k7CisJCQlnb3RvIHN0cm1vbl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBmaC0+YnVmZmVycy5hY3RpdmUgPSBaT1JBTl9MT0NLRUQ7CisKKwkJaWYgKHpyLT5qcGdfcXVlX2hlYWQgIT0genItPmpwZ19xdWVfdGFpbCkgeworCQkJLyogU3RhcnQgdGhlIGpwZWcgY29kZWMgd2hlbiB0aGUgZmlyc3QgZnJhbWUgaXMgcXVldWVkICAqLworCQkJanBlZ19zdGFydCh6cik7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBWSURJT0NfU1RSRUFNT04gLSBpbnZhbGlkIG1hcCBtb2RlICVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7CisJCXJlcyA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KK3N0cm1vbl91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCBpLCByZXMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgeworCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgkvKiByYXcgY2FwdHVyZSAqLworCQlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUgJiYKKwkJICAgIHpyLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgeworCQkJcmVzID0gLUVQRVJNOwkvKiBzdGF5IG9mZiBvdGhlcidzIHNldHRpbmdzISAqLworCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisJCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpCisJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCQkvKiB1bmxvYWQgY2FwdHVyZSAqLworCQlpZiAoenItPnY0bF9tZW1ncmFiX2FjdGl2ZSkgeworCisJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAwKTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBmaC0+YnVmZmVycy5udW1fYnVmZmVyczsgaSsrKQorCQkJenItPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5zdGF0ZSA9IEJVWl9TVEFURV9VU0VSOworCQlmaC0+YnVmZmVycyA9IHpyLT52NGxfYnVmZmVyczsKKworCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPmJ1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKKworCQl6ci0+djRsX2dyYWJfc2VxID0gMDsKKwkJenItPnY0bF9wZW5kX2hlYWQgPSB6ci0+djRsX3BlbmRfdGFpbCA9IDA7CisJCXpyLT52NGxfc3luY190YWlsID0gMDsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKworCQlicmVhazsKKworCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKKwljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgorCQlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUgJiYKKwkJICAgIHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgeworCQkJcmVzID0gLUVQRVJNOwkvKiBzdGF5IG9mZiBvdGhlcidzIHNldHRpbmdzISAqLworCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisJCWlmICh6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpCisJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47CisKKwkJcmVzID0ganBnX3FidWYoZmgsIC0xLAorCQkJICAgICAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19SRUMpID8KKwkJCSAgICAgQlVaX01PREVfTU9USU9OX0NPTVBSRVNTIDoKKwkJCSAgICAgQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MpOworCQlpZiAocmVzKQorCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKDEsIEtFUk5fRVJSCisJCQkiJXM6IFZJRElPQ19TVFJFQU1PRkYgLSBpbnZhbGlkIG1hcCBtb2RlICVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7CisJCXJlcyA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KK3N0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwkvKiB3ZSBvbmx5IHN1cHBvcnQgaHVlL3NhdHVyYXRpb24vY29udHJhc3QvYnJpZ2h0bmVzcyAqLworCWlmIChjdHJsLT5pZCA8IFY0TDJfQ0lEX0JSSUdIVE5FU1MgfHwKKwkgICAgY3RybC0+aWQgPiBWNEwyX0NJRF9IVUUpCisJCXJldHVybiAtRUlOVkFMOworCisJZGVjb2Rlcl9jYWxsKHpyLCBjb3JlLCBxdWVyeWN0cmwsIGN0cmwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwkvKiB3ZSBvbmx5IHN1cHBvcnQgaHVlL3NhdHVyYXRpb24vY29udHJhc3QvYnJpZ2h0bmVzcyAqLworCWlmIChjdHJsLT5pZCA8IFY0TDJfQ0lEX0JSSUdIVE5FU1MgfHwKKwkgICAgY3RybC0+aWQgPiBWNEwyX0NJRF9IVUUpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCWRlY29kZXJfY2FsbCh6ciwgY29yZSwgZ19jdHJsLCBjdHJsKTsKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJLyogd2Ugb25seSBzdXBwb3J0IGh1ZS9zYXR1cmF0aW9uL2NvbnRyYXN0L2JyaWdodG5lc3MgKi8KKwlpZiAoY3RybC0+aWQgPCBWNEwyX0NJRF9CUklHSFRORVNTIHx8CisJICAgIGN0cmwtPmlkID4gVjRMMl9DSURfSFVFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlkZWNvZGVyX2NhbGwoenIsIGNvcmUsIHNfY3RybCwgY3RybCk7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl9nX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCSpzdGQgPSB6ci0+bm9ybTsKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCByZXMgPSAwOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJlcyA9IHpvcmFuX3NldF9ub3JtKHpyLCAqc3RkKTsKKwlpZiAocmVzKQorCQlnb3RvIHNzdGRfdW5sb2NrX2FuZF9yZXR1cm47CisKKwlyZXMgPSB3YWl0X2dyYWJfcGVuZGluZyh6cik7Citzc3RkX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkgc3RydWN0IHY0bDJfaW5wdXQgKmlucCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJaWYgKGlucC0+aW5kZXggPCAwIHx8IGlucC0+aW5kZXggPj0genItPmNhcmQuaW5wdXRzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlIHsKKwkJaW50IGlkID0gaW5wLT5pbmRleDsKKwkJbWVtc2V0KGlucCwgMCwgc2l6ZW9mKCppbnApKTsKKwkJaW5wLT5pbmRleCA9IGlkOworCX0KKworCXN0cm5jcHkoaW5wLT5uYW1lLCB6ci0+Y2FyZC5pbnB1dFtpbnAtPmluZGV4XS5uYW1lLAorCQlzaXplb2YoaW5wLT5uYW1lKSAtIDEpOworCWlucC0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CisJaW5wLT5zdGQgPSBWNEwyX1NURF9BTEw7CisKKwkvKiBHZXQgc3RhdHVzIG9mIHZpZGVvIGRlY29kZXIgKi8KKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgZ19pbnB1dF9zdGF0dXMsICZpbnAtPnN0YXR1cyk7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgdW5zaWduZWQgaW50ICppbnB1dCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCSppbnB1dCA9IHpyLT5pbnB1dDsKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCByZXM7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmVzID0gem9yYW5fc2V0X2lucHV0KHpyLCBpbnB1dCk7CisJaWYgKHJlcykKKwkJZ290byBzaW5wdXRfdW5sb2NrX2FuZF9yZXR1cm47CisKKwkvKiBNYWtlIHN1cmUgdGhlIGNoYW5nZXMgY29tZSBpbnRvIGVmZmVjdCAqLworCXJlcyA9IHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKK3NpbnB1dF91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX2VudW1fb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJCSAgc3RydWN0IHY0bDJfb3V0cHV0ICpvdXRwKQoreworCWlmIChvdXRwLT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldChvdXRwLCAwLCBzaXplb2YoKm91dHApKTsKKwlvdXRwLT5pbmRleCA9IDA7CisJb3V0cC0+dHlwZSA9IFY0TDJfT1VUUFVUX1RZUEVfQU5BTE9HVkdBT1ZFUkxBWTsKKwlzdHJuY3B5KG91dHAtPm5hbWUsICJBdXRvZGV0ZWN0Iiwgc2l6ZW9mKG91dHAtPm5hbWUpLTEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZ19vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHVuc2lnbmVkIGludCAqb3V0cHV0KQoreworCSpvdXRwdXQgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fc19vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHVuc2lnbmVkIGludCBvdXRwdXQpCit7CisJaWYgKG91dHB1dCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCisvKiBjcm9wcGluZyAoc3ViLWZyYW1lIGNhcHR1cmUpICovCitzdGF0aWMgaW50IHpvcmFuX2Nyb3BjYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNyb3BjYXApCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgdHlwZSA9IGNyb3BjYXAtPnR5cGUsIHJlcyA9IDA7CisKKwltZW1zZXQoY3JvcGNhcCwgMCwgc2l6ZW9mKCpjcm9wY2FwKSk7CisJY3JvcGNhcC0+dHlwZSA9IHR5cGU7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlpZiAoY3JvcGNhcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAmJgorCSAgICAoY3JvcGNhcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKKwkgICAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpKSB7CisJCWRwcmludGsoMSwgS0VSTl9FUlIKKwkJCSIlczogVklESU9DX0NST1BDQVAgLSBzdWJjYXB0dXJlIG9ubHkgc3VwcG9ydGVkIGZvciBjb21wcmVzc2VkIGNhcHR1cmVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlcyA9IC1FSU5WQUw7CisJCWdvdG8gY3JvcGNhcF91bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwljcm9wY2FwLT5ib3VuZHMudG9wID0gY3JvcGNhcC0+Ym91bmRzLmxlZnQgPSAwOworCWNyb3BjYXAtPmJvdW5kcy53aWR0aCA9IEJVWl9NQVhfV0lEVEg7CisJY3JvcGNhcC0+Ym91bmRzLmhlaWdodCA9IEJVWl9NQVhfSEVJR0hUOworCWNyb3BjYXAtPmRlZnJlY3QudG9wID0gY3JvcGNhcC0+ZGVmcmVjdC5sZWZ0ID0gMDsKKwljcm9wY2FwLT5kZWZyZWN0LndpZHRoID0gQlVaX01JTl9XSURUSDsKKwljcm9wY2FwLT5kZWZyZWN0LmhlaWdodCA9IEJVWl9NSU5fSEVJR0hUOworY3JvcGNhcF91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX2dfY3JvcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfY3JvcCAqY3JvcCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCB0eXBlID0gY3JvcC0+dHlwZSwgcmVzID0gMDsKKworCW1lbXNldChjcm9wLCAwLCBzaXplb2YoKmNyb3ApKTsKKwljcm9wLT50eXBlID0gdHlwZTsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCWlmIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICYmCisJICAgIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAorCSAgICAgZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVykpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogVklESU9DX0dfQ1JPUCAtIHN1YmNhcHR1cmUgb25seSBzdXBwb3J0ZWQgZm9yIGNvbXByZXNzZWQgY2FwdHVyZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmVzID0gLUVJTlZBTDsKKwkJZ290byBnY3JvcF91bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwljcm9wLT5jLnRvcCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3k7CisJY3JvcC0+Yy5sZWZ0ID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfeDsKKwljcm9wLT5jLndpZHRoID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGg7CisJY3JvcC0+Yy5oZWlnaHQgPSBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQ7CisKK2djcm9wX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9zX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX2Nyb3AgKmNyb3ApCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgcmVzID0gMDsKKwlzdHJ1Y3Qgem9yYW5fanBnX3NldHRpbmdzIHNldHRpbmdzOworCisJc2V0dGluZ3MgPSBmaC0+anBnX3NldHRpbmdzOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJaWYgKGZoLT5idWZmZXJzLmFsbG9jYXRlZCkgeworCQlkcHJpbnRrKDEsIEtFUk5fRVJSCisJCQkiJXM6IFZJRElPQ19TX0NST1AgLSBjYW5ub3QgY2hhbmdlIHNldHRpbmdzIHdoaWxlIGFjdGl2ZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmVzID0gLUVCVVNZOworCQlnb3RvIHNjcm9wX3VubG9ja19hbmRfcmV0dXJuOworCX0KKworCWlmIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICYmCisJICAgIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAorCSAgICAgZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVykpIHsKKwkJZHByaW50aygxLCBLRVJOX0VSUgorCQkJIiVzOiBWSURJT0NfR19DUk9QIC0gc3ViY2FwdHVyZSBvbmx5IHN1cHBvcnRlZCBmb3IgY29tcHJlc3NlZCBjYXB0dXJlXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXMgPSAtRUlOVkFMOworCQlnb3RvIHNjcm9wX3VubG9ja19hbmRfcmV0dXJuOworCX0KKworCS8qIG1vdmUgaW50byBhIGZvcm0gdGhhdCB3ZSB1bmRlcnN0YW5kICovCisJc2V0dGluZ3MuaW1nX3ggPSBjcm9wLT5jLmxlZnQ7CisJc2V0dGluZ3MuaW1nX3kgPSBjcm9wLT5jLnRvcDsKKwlzZXR0aW5ncy5pbWdfd2lkdGggPSBjcm9wLT5jLndpZHRoOworCXNldHRpbmdzLmltZ19oZWlnaHQgPSBjcm9wLT5jLmhlaWdodDsKKworCS8qIGNoZWNrIHZhbGlkaXR5ICovCisJcmVzID0gem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLCAmc2V0dGluZ3MsIDApOworCWlmIChyZXMpCisJCWdvdG8gc2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm47CisKKwkvKiBhY2NlcHQgKi8KKwlmaC0+anBnX3NldHRpbmdzID0gc2V0dGluZ3M7CisKK3Njcm9wX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZ19qcGVnY29tcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpwYXJhbXMpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwltZW1zZXQocGFyYW1zLCAwLCBzaXplb2YoKnBhcmFtcykpOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcGFyYW1zLT5xdWFsaXR5ID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5xdWFsaXR5OworCXBhcmFtcy0+QVBQbiA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQbjsKKwltZW1jcHkocGFyYW1zLT5BUFBfZGF0YSwKKwkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfZGF0YSwKKwkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfbGVuKTsKKwlwYXJhbXMtPkFQUF9sZW4gPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUF9sZW47CisJbWVtY3B5KHBhcmFtcy0+Q09NX2RhdGEsCisJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2RhdGEsCisJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2xlbik7CisJcGFyYW1zLT5DT01fbGVuID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fbGVuOworCXBhcmFtcy0+anBlZ19tYXJrZXJzID0KKwkgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5qcGVnX21hcmtlcnM7CisKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX3NfanBlZ2NvbXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqcGFyYW1zKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHJlcyA9IDA7CisJc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyBzZXR0aW5nczsKKworCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKKworCXNldHRpbmdzLmpwZ19jb21wID0gKnBhcmFtczsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCWlmIChmaC0+YnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgeworCQlkcHJpbnRrKDEsIEtFUk5fV0FSTklORworCQkJIiVzOiBWSURJT0NfU19KUEVHQ09NUCBjYWxsZWQgd2hpbGUgaW4gcGxheWJhY2svY2FwdHVyZSBtb2RlXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXMgPSAtRUJVU1k7CisJCWdvdG8gc2pwZWdjX3VubG9ja19hbmRfcmV0dXJuOworCX0KKworCXJlcyA9IHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnNldHRpbmdzLCAwKTsKKwlpZiAocmVzKQorCQlnb3RvIHNqcGVnY191bmxvY2tfYW5kX3JldHVybjsKKwlpZiAoIWZoLT5idWZmZXJzLmFsbG9jYXRlZCkKKwkJZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUgPQorCQkJem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJmZoLT5qcGdfc2V0dGluZ3MpOworCWZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAgPSAqcGFyYW1zID0gc2V0dGluZ3MuanBnX2NvbXA7CitzanBlZ2NfdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50CkBAIC00MTkxLDExICszMDYyLDExIEBACiAJCQlLRVJOX0RFQlVHCiAJCQkiJXM6ICVzKCkgcmF3IC0gYWN0aXZlPSVjLCBzeW5jX3RhaWw9JWx1LyVjLCBwZW5kX3RhaWw9JWx1LCBwZW5kX2hlYWQ9JWx1XG4iLAogCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLAotCQkJIkZBTCJbZmgtPnY0bF9idWZmZXJzLmFjdGl2ZV0sIHpyLT52NGxfc3luY190YWlsLAorCQkJIkZBTCJbZmgtPmJ1ZmZlcnMuYWN0aXZlXSwgenItPnY0bF9zeW5jX3RhaWwsCiAJCQkiVVBNRCJbenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGVdLAogCQkJenItPnY0bF9wZW5kX3RhaWwsIHpyLT52NGxfcGVuZF9oZWFkKTsKIAkJLyogUHJvY2VzcyBpcyB0aGUgb25lIGNhcHR1cmluZz8gKi8KLQkJaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSAmJgorCQlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUgJiYKIAkJICAgIC8qIEJ1ZmZlciByZWFkeSB0byBEUUJVRj8gKi8KIAkJICAgIHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID09IEJVWl9TVEFURV9ET05FKQogCQkJcmVzID0gUE9MTElOIHwgUE9MTFJETk9STTsKQEAgLTQyMTMsMTAgKzMwODQsMTAgQEAKIAkJCUtFUk5fREVCVUcKIAkJCSIlczogJXMoKSBqcGcgLSBhY3RpdmU9JWMsIHF1ZV90YWlsPSVsdS8lYywgcXVlX2hlYWQ9JWx1LCBkbWE9JWx1LyVsdVxuIiwKIAkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywKLQkJCSJGQUwiW2ZoLT5qcGdfYnVmZmVycy5hY3RpdmVdLCB6ci0+anBnX3F1ZV90YWlsLAorCQkJIkZBTCJbZmgtPmJ1ZmZlcnMuYWN0aXZlXSwgenItPmpwZ19xdWVfdGFpbCwKIAkJCSJVUE1EIlt6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZV0sCiAJCQl6ci0+anBnX3F1ZV9oZWFkLCB6ci0+anBnX2RtYV90YWlsLCB6ci0+anBnX2RtYV9oZWFkKTsKLQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSAmJgorCQlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUgJiYKIAkJICAgIHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID09IEJVWl9TVEFURV9ET05FKSB7CiAJCQlpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19SRUMpCiAJCQkJcmVzID0gUE9MTElOIHwgUE9MTFJETk9STTsKQEAgLTQyMzAsOCArMzEwMSw4IEBACiAJZGVmYXVsdDoKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogem9yYW5fcG9sbCgpIC0gaW50ZXJuYWwgZXJyb3IsIHVua25vd24gbWFwX21vZGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgZmgtPm1hcF9tb2RlKTsKKwkJCSIlczogJXMgLSBpbnRlcm5hbCBlcnJvciwgdW5rbm93biBtYXBfbW9kZT0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgZmgtPm1hcF9tb2RlKTsKIAkJcmVzID0gUE9MTE5WQUw7CiAJfQogCkBAIC00MjY1LDk4ICszMTM2LDUzIEBACiB6b3Jhbl92bV9jbG9zZSAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IHpvcmFuX21hcHBpbmcgKm1hcCA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBmaWxlICpmaWxlID0gbWFwLT5maWxlOwotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IG1hcC0+ZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJaW50IGk7CiAKLQltYXAtPmNvdW50LS07Ci0JaWYgKG1hcC0+Y291bnQgPT0gMCkgewotCQlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgewotCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6Ci0JCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6CisJaWYgKC0tbWFwLT5jb3VudCA+IDApCisJCXJldHVybjsKIAotCQkJZHByaW50aygzLCBLRVJOX0lORk8gIiVzOiBtdW5tYXAoTUpQRUcpXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwlkcHJpbnRrKDMsIEtFUk5fSU5GTyAiJXM6ICVzIC0gbXVubWFwKCVzKVxuIiwgWlJfREVWTkFNRSh6ciksCisJCV9fZnVuY19fLCBtb2RlX25hbWUoZmgtPm1hcF9tb2RlKSk7CiAKLQkJCWZvciAoaSA9IDA7IGkgPCBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykgewotCQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9PSBtYXApIHsKLQkJCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPQotCQkJCQkgICAgTlVMTDsKLQkJCQl9Ci0JCQl9Ci0JCQlrZnJlZShtYXApOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzOyBpKyspCi0JCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0ubWFwKQotCQkJCQlicmVhazsKLQkJCWlmIChpID09IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycykgewotCQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJCQkJanBnX3FidWYoZmlsZSwgLTEsIHpyLT5jb2RlY19tb2RlKTsKLQkJCQkJenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JCQkJCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPQotCQkJCQkgICAgZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9Ci0JCQkJCSAgICBaT1JBTl9GUkVFOwotCQkJCX0KLQkJCQkvL2pwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMTsKLQotCQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJfQotCi0JCQlicmVhazsKLQotCQljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKLQotCQkJZHByaW50aygzLCBLRVJOX0lORk8gIiVzOiBtdW5tYXAoVjRMKVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykgewotCQkJCWlmIChmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9PSBtYXApIHsKLQkJCQkJLyogdW5xdWV1ZS91bm1hcCAqLwotCQkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9Ci0JCQkJCSAgICBOVUxMOwotCQkJCX0KLQkJCX0KLQkJCWtmcmVlKG1hcCk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykKLQkJCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5tYXApCi0JCQkJCWJyZWFrOwotCQkJaWYgKGkgPT0gZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzKSB7Ci0JCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCQkJaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgewotCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQkJCQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMCk7Ci0JCQkJCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCQkJCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0KLQkJCQkJICAgIGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPQotCQkJCQkgICAgWk9SQU5fRlJFRTsKLQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7Ci0JCQkJfQotCQkJCS8vdjRsX2ZidWZmZXJfZnJlZShmaWxlKTsKLQkJCQlmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQkJCQlmaC0+djRsX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQgPSAxOwotCi0JCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiJXM6IG11bm1hcCgpIC0gaW50ZXJuYWwgZXJyb3IgLSB1bmtub3duIG1hcCBtb2RlICVkXG4iLAotCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCBmaC0+bWFwX21vZGUpOwotCQkJYnJlYWs7Ci0KLQkJfQorCWZvciAoaSA9IDA7IGkgPCBmaC0+YnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7CisJCWlmIChmaC0+YnVmZmVycy5idWZmZXJbaV0ubWFwID09IG1hcCkKKwkJCWZoLT5idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPSBOVUxMOwogCX0KKwlrZnJlZShtYXApOworCisJLyogQW55IGJ1ZmZlcnMgc3RpbGwgbWFwcGVkPyAqLworCWZvciAoaSA9IDA7IGkgPCBmaC0+YnVmZmVycy5udW1fYnVmZmVyczsgaSsrKQorCQlpZiAoZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLm1hcCkKKwkJCXJldHVybjsKKworCWRwcmludGsoMywgS0VSTl9JTkZPICIlczogJXMgLSBmcmVlICVzIGJ1ZmZlcnNcbiIsIFpSX0RFVk5BTUUoenIpLAorCQlfX2Z1bmNfXywgbW9kZV9uYW1lKGZoLT5tYXBfbW9kZSkpOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpIHsKKwkJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAwKTsKKwkJCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCQkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IGZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJfQorCQl2NGxfZmJ1ZmZlcl9mcmVlKGZoKTsKKwl9IGVsc2UgeworCQlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKKwkJCWpwZ19xYnVmKGZoLCAtMSwgenItPmNvZGVjX21vZGUpOworCQkJenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisJCQl6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0gZmgtPmJ1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKKwkJfQorCQlqcGdfZmJ1ZmZlcl9mcmVlKGZoKTsKKwl9CisKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB6b3Jhbl92bV9vcHMgPSB7CkBAIC00Mzc5LDkwICszMjA1LDEwNiBAQAogCWludCByZXMgPSAwOwogCiAJZHByaW50aygzLAotCQlLRVJOX0lORk8gIiVzOiBtbWFwKCVzKSBvZiAweCUwOGx4LTB4JTA4bHggKHNpemU9JWx1KVxuIiwKLQkJWlJfREVWTkFNRSh6ciksCi0JCWZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcgPyAiVjRMIiA6ICJNSlBFRyIsCi0JCXZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLCBzaXplKTsKKwkJS0VSTl9JTkZPICIlczogJXMoJXMpIG9mIDB4JTA4bHgtMHglMDhseCAoc2l6ZT0lbHUpXG4iLAorCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sCisJCW1vZGVfbmFtZShmaC0+bWFwX21vZGUpLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgc2l6ZSk7CiAKIAlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSB8fCAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEKSB8fAogCSAgICAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogbW1hcCgpIC0gbm8gTUFQX1NIQVJFRC9QUk9UX3tSRUFELFdSSVRFfSBnaXZlblxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSBubyBNQVBfU0hBUkVEL1BST1Rfe1JFQUQsV1JJVEV9IGdpdmVuXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKLQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6Ci0JY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKKwlpZiAoIWZoLT5idWZmZXJzLmFsbG9jYXRlZCkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiAlcyglcykgLSBidWZmZXJzIG5vdCB5ZXQgYWxsb2NhdGVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBtb2RlX25hbWUoZmgtPm1hcF9tb2RlKSk7CisJCXJlcyA9IC1FTk9NRU07CisJCWdvdG8gbW1hcF91bmxvY2tfYW5kX3JldHVybjsKKwl9CiAKLQkJLyogbG9jayAqLwotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJZmlyc3QgPSBvZmZzZXQgLyBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZTsKKwlsYXN0ID0gZmlyc3QgLSAxICsgc2l6ZSAvIGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOworCWlmIChvZmZzZXQgJSBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSAhPSAwIHx8CisJICAgIHNpemUgJSBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSAhPSAwIHx8IGZpcnN0IDwgMCB8fAorCSAgICBsYXN0IDwgMCB8fCBmaXJzdCA+PSBmaC0+YnVmZmVycy5udW1fYnVmZmVycyB8fAorCSAgICBsYXN0ID49IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6ICVzKCVzKSAtIG9mZnNldD0lbHUgb3Igc2l6ZT0lbHUgaW52YWxpZCBmb3IgYnVmc2l6ZT0lZCBhbmQgbnVtYnVmcz0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgbW9kZV9uYW1lKGZoLT5tYXBfbW9kZSksIG9mZnNldCwgc2l6ZSwKKwkJCWZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplLAorCQkJZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnMpOworCQlyZXMgPSAtRUlOVkFMOworCQlnb3RvIG1tYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJfQogCi0JCS8qIE1hcCB0aGUgTUpQRUcgYnVmZmVycyAqLwotCQlpZiAoIWZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkvKiBDaGVjayBpZiBhbnkgYnVmZmVycyBhcmUgYWxyZWFkeSBtYXBwZWQgKi8KKwlmb3IgKGkgPSBmaXJzdDsgaSA8PSBsYXN0OyBpKyspIHsKKwkJaWYgKGZoLT5idWZmZXJzLmJ1ZmZlcltpXS5tYXApIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczogem9yYW5fbW1hcChNSlBFRykgLSBidWZmZXJzIG5vdCB5ZXQgYWxsb2NhdGVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FTk9NRU07Ci0JCQlnb3RvIGpwZ19tbWFwX3VubG9ja19hbmRfcmV0dXJuOworCQkJCSIlczogJXMoJXMpIC0gYnVmZmVyICVkIGFscmVhZHkgbWFwcGVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgbW9kZV9uYW1lKGZoLT5tYXBfbW9kZSksIGkpOworCQkJcmVzID0gLUVCVVNZOworCQkJZ290byBtbWFwX3VubG9ja19hbmRfcmV0dXJuOwogCQl9CisJfQogCi0JCWZpcnN0ID0gb2Zmc2V0IC8gZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQlsYXN0ID0gZmlyc3QgLSAxICsgc2l6ZSAvIGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJaWYgKG9mZnNldCAlIGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSAhPSAwIHx8Ci0JCSAgICBzaXplICUgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplICE9IDAgfHwgZmlyc3QgPCAwIHx8Ci0JCSAgICBsYXN0IDwgMCB8fCBmaXJzdCA+PSBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgfHwKLQkJICAgIGxhc3QgPj0gZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IG1tYXAoTUpQRUcpIC0gb2Zmc2V0PSVsdSBvciBzaXplPSVsdSBpbnZhbGlkIGZvciBidWZzaXplPSVkIGFuZCBudW1idWZzPSVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBvZmZzZXQsIHNpemUsCi0JCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplLAotCQkJCWZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBqcGdfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKLQkJfQorCS8qIG1hcCB0aGVzZSBidWZmZXJzICovCisJbWFwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHpvcmFuX21hcHBpbmcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1hcCkgeworCQlyZXMgPSAtRU5PTUVNOworCQlnb3RvIG1tYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCW1hcC0+ZmlsZSA9IGZpbGU7CisJbWFwLT5jb3VudCA9IDE7CisKKwl2bWEtPnZtX29wcyA9ICZ6b3Jhbl92bV9vcHM7CisJdm1hLT52bV9mbGFncyB8PSBWTV9ET05URVhQQU5EOworCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gbWFwOworCisJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpIHsKIAkJZm9yIChpID0gZmlyc3Q7IGkgPD0gbGFzdDsgaSsrKSB7Ci0JCQlpZiAoZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5tYXApIHsKKwkJCXRvZG8gPSBzaXplOworCQkJaWYgKHRvZG8gPiBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSkKKwkJCQl0b2RvID0gZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemU7CisJCQlwYWdlID0gZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnY0bC5mYnVmZmVyX3BoeXM7CisJCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UgPj4gUEFHRV9TSElGVCwKKwkJCQkJCQl0b2RvLCBQQUdFX1NIQVJFRCkpIHsKIAkJCQlkcHJpbnRrKDEsCiAJCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogbW1hcChNSlBFRykgLSBidWZmZXIgJWQgYWxyZWFkeSBtYXBwZWRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBpKTsKLQkJCQlyZXMgPSAtRUJVU1k7Ci0JCQkJZ290byBqcGdfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKKwkJCQkJIiVzOiAlcyhWNEwpIC0gcmVtYXBfcGZuX3JhbmdlIGZhaWxlZFxuIiwKKwkJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKKwkJCQlyZXMgPSAtRUFHQUlOOworCQkJCWdvdG8gbW1hcF91bmxvY2tfYW5kX3JldHVybjsKIAkJCX0KKwkJCXNpemUgLT0gdG9kbzsKKwkJCXN0YXJ0ICs9IHRvZG87CisJCQlmaC0+YnVmZmVycy5idWZmZXJbaV0ubWFwID0gbWFwOworCQkJaWYgKHNpemUgPT0gMCkKKwkJCQlicmVhazsKIAkJfQotCi0JCS8qIG1hcCB0aGVzZSBidWZmZXJzICh2NGxfYnVmZmVyc1tpXSkgKi8KLQkJbWFwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHpvcmFuX21hcHBpbmcpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFtYXApIHsKLQkJCXJlcyA9IC1FTk9NRU07Ci0JCQlnb3RvIGpwZ19tbWFwX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0JCW1hcC0+ZmlsZSA9IGZpbGU7Ci0JCW1hcC0+Y291bnQgPSAxOwotCi0JCXZtYS0+dm1fb3BzID0gJnpvcmFuX3ZtX29wczsKLQkJdm1hLT52bV9mbGFncyB8PSBWTV9ET05URVhQQU5EOwotCQl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9IG1hcDsKLQorCX0gZWxzZSB7CiAJCWZvciAoaSA9IGZpcnN0OyBpIDw9IGxhc3Q7IGkrKykgewogCQkJZm9yIChqID0gMDsKLQkJCSAgICAgaiA8IGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSAvIFBBR0VfU0laRTsKKwkJCSAgICAgaiA8IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplIC8gUEFHRV9TSVpFOwogCQkJICAgICBqKyspIHsKIAkJCQlmcmFnbGVuID0KLQkJCQkgICAgKGxlMzJfdG9fY3B1KGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uCisJCQkJICAgIChsZTMyX3RvX2NwdShmaC0+YnVmZmVycy5idWZmZXJbaV0uanBnLgogCQkJCSAgICAgZnJhZ190YWJbMiAqIGogKyAxXSkgJiB+MSkgPDwgMTsKIAkJCQl0b2RvID0gc2l6ZTsKIAkJCQlpZiAodG9kbyA+IGZyYWdsZW4pCiAJCQkJCXRvZG8gPSBmcmFnbGVuOwogCQkJCXBvcyA9Ci0JCQkJICAgIGxlMzJfdG9fY3B1KGZoLT5qcGdfYnVmZmVycy4KLQkJCQkgICAgYnVmZmVyW2ldLmZyYWdfdGFiWzIgKiBqXSk7CisJCQkJICAgIGxlMzJfdG9fY3B1KGZoLT5idWZmZXJzLgorCQkJCSAgICBidWZmZXJbaV0uanBnLmZyYWdfdGFiWzIgKiBqXSk7CiAJCQkJLyogc2hvdWxkIGp1c3QgYmUgcG9zIG9uIGkzODYgKi8KIAkJCQlwYWdlID0gdmlydF90b19waHlzKGJ1c190b192aXJ0KHBvcykpCiAJCQkJCQkJCT4+IFBBR0VfU0hJRlQ7CkBAIC00NDcwLDEyMyArMzMxMiw4MiBAQAogCQkJCQkJCXRvZG8sIFBBR0VfU0hBUkVEKSkgewogCQkJCQlkcHJpbnRrKDEsCiAJCQkJCQlLRVJOX0VSUgotCQkJCQkJIiVzOiB6b3Jhbl9tbWFwKFY0TCkgLSByZW1hcF9wZm5fcmFuZ2UgZmFpbGVkXG4iLAotCQkJCQkJWlJfREVWTkFNRSh6cikpOworCQkJCQkJIiVzOiAlcyhWNEwpIC0gcmVtYXBfcGZuX3JhbmdlIGZhaWxlZFxuIiwKKwkJCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQkJCXJlcyA9IC1FQUdBSU47Ci0JCQkJCWdvdG8ganBnX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJCQkJCWdvdG8gbW1hcF91bmxvY2tfYW5kX3JldHVybjsKIAkJCQl9CiAJCQkJc2l6ZSAtPSB0b2RvOwogCQkJCXN0YXJ0ICs9IHRvZG87CiAJCQkJaWYgKHNpemUgPT0gMCkKIAkJCQkJYnJlYWs7Ci0JCQkJaWYgKGxlMzJfdG9fY3B1KGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uCisJCQkJaWYgKGxlMzJfdG9fY3B1KGZoLT5idWZmZXJzLmJ1ZmZlcltpXS5qcGcuCiAJCQkJICAgIGZyYWdfdGFiWzIgKiBqICsgMV0pICYgMSkKIAkJCQkJYnJlYWs7CS8qIHdhcyBsYXN0IGZyYWdtZW50ICovCiAJCQl9Ci0JCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9IG1hcDsKKwkJCWZoLT5idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPSBtYXA7CiAJCQlpZiAoc2l6ZSA9PSAwKQogCQkJCWJyZWFrOwogCiAJCX0KLQlqcGdfbW1hcF91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJLyogTWFwIHRoZSBWNEwgYnVmZmVycyAqLwotCQlpZiAoIWZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogem9yYW5fbW1hcChWNEwpIC0gYnVmZmVycyBub3QgeWV0IGFsbG9jYXRlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRU5PTUVNOwotCQkJZ290byB2NGxfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCWZpcnN0ID0gb2Zmc2V0IC8gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQlsYXN0ID0gZmlyc3QgLSAxICsgc2l6ZSAvIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJaWYgKG9mZnNldCAlIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSAhPSAwIHx8Ci0JCSAgICBzaXplICUgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplICE9IDAgfHwgZmlyc3QgPCAwIHx8Ci0JCSAgICBsYXN0IDwgMCB8fCBmaXJzdCA+PSBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgfHwKLQkJICAgIGxhc3QgPj0gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IG1tYXAoVjRMKSAtIG9mZnNldD0lbHUgb3Igc2l6ZT0lbHUgaW52YWxpZCBmb3IgYnVmc2l6ZT0lZCBhbmQgbnVtYnVmcz0lZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgb2Zmc2V0LCBzaXplLAotCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSwKLQkJCQlmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQkJZm9yIChpID0gZmlyc3Q7IGkgPD0gbGFzdDsgaSsrKSB7Ci0JCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5tYXApIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogbW1hcChWNEwpIC0gYnVmZmVyICVkIGFscmVhZHkgbWFwcGVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7Ci0JCQkJcmVzID0gLUVCVVNZOwotCQkJCWdvdG8gdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0JCX0KLQotCQkvKiBtYXAgdGhlc2UgYnVmZmVycyAodjRsX2J1ZmZlcnNbaV0pICovCi0JCW1hcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6b3Jhbl9tYXBwaW5nKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbWFwKSB7Ci0JCQlyZXMgPSAtRU5PTUVNOwotCQkJZ290byB2NGxfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCQltYXAtPmZpbGUgPSBmaWxlOwotCQltYXAtPmNvdW50ID0gMTsKLQotCQl2bWEtPnZtX29wcyA9ICZ6b3Jhbl92bV9vcHM7Ci0JCXZtYS0+dm1fZmxhZ3MgfD0gVk1fRE9OVEVYUEFORDsKLQkJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBtYXA7Ci0KLQkJZm9yIChpID0gZmlyc3Q7IGkgPD0gbGFzdDsgaSsrKSB7Ci0JCQl0b2RvID0gc2l6ZTsKLQkJCWlmICh0b2RvID4gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplKQotCQkJCXRvZG8gPSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQlwYWdlID0gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyX3BoeXM7Ci0JCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UgPj4gUEFHRV9TSElGVCwKLQkJCQkJCQl0b2RvLCBQQUdFX1NIQVJFRCkpIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogem9yYW5fbW1hcChWNEwpaSAtIHJlbWFwX3Bmbl9yYW5nZSBmYWlsZWRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCQlyZXMgPSAtRUFHQUlOOwotCQkJCWdvdG8gdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0JCQlzaXplIC09IHRvZG87Ci0JCQlzdGFydCArPSB0b2RvOwotCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPSBtYXA7Ci0JCQlpZiAoc2l6ZSA9PSAwKQotCQkJCWJyZWFrOwotCQl9Ci0JdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogem9yYW5fbW1hcCgpIC0gaW50ZXJuYWwgZXJyb3IgLSB1bmtub3duIG1hcCBtb2RlICVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7Ci0JCWJyZWFrOwogCX0KIAorbW1hcF91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHpvcmFuX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwICAgIAkJICAgID0gem9yYW5fcXVlcnljYXAsCisJLnZpZGlvY19jcm9wY2FwICAgICAgIAkJICAgID0gem9yYW5fY3JvcGNhcCwKKwkudmlkaW9jX3NfY3JvcCAgICAgICAJCSAgICA9IHpvcmFuX3NfY3JvcCwKKwkudmlkaW9jX2dfY3JvcCAgICAgICAJCSAgICA9IHpvcmFuX2dfY3JvcCwKKwkudmlkaW9jX2VudW1faW5wdXQgICAgIAkJICAgID0gem9yYW5fZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQgICAgICAJCSAgICA9IHpvcmFuX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0ICAgICAgCQkgICAgPSB6b3Jhbl9zX2lucHV0LAorCS52aWRpb2NfZW51bV9vdXRwdXQgICAgCQkgICAgPSB6b3Jhbl9lbnVtX291dHB1dCwKKwkudmlkaW9jX2dfb3V0cHV0ICAgICAJCSAgICA9IHpvcmFuX2dfb3V0cHV0LAorCS52aWRpb2Nfc19vdXRwdXQgICAgIAkJICAgID0gem9yYW5fc19vdXRwdXQsCisJLnZpZGlvY19nX2ZidWYJCQkgICAgPSB6b3Jhbl9nX2ZidWYsCisJLnZpZGlvY19zX2ZidWYJCQkgICAgPSB6b3Jhbl9zX2ZidWYsCisJLnZpZGlvY19nX3N0ZCAJCQkgICAgPSB6b3Jhbl9nX3N0ZCwKKwkudmlkaW9jX3Nfc3RkIAkJCSAgICA9IHpvcmFuX3Nfc3RkLAorCS52aWRpb2NfZ19qcGVnY29tcCAJCSAgICA9IHpvcmFuX2dfanBlZ2NvbXAsCisJLnZpZGlvY19zX2pwZWdjb21wIAkJICAgID0gem9yYW5fc19qcGVnY29tcCwKKwkudmlkaW9jX292ZXJsYXkJCQkgICAgPSB6b3Jhbl9vdmVybGF5LAorCS52aWRpb2NfcmVxYnVmcwkJCSAgICA9IHpvcmFuX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZgkJICAgID0gem9yYW5fcXVlcnlidWYsCisJLnZpZGlvY19xYnVmCQkJICAgID0gem9yYW5fcWJ1ZiwKKwkudmlkaW9jX2RxYnVmCQkJICAgID0gem9yYW5fZHFidWYsCisJLnZpZGlvY19zdHJlYW1vbgkJICAgID0gem9yYW5fc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYJCSAgICA9IHpvcmFuX3N0cmVhbW9mZiwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgCSAgICA9IHpvcmFuX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfb3V0IAkgICAgPSB6b3Jhbl9lbnVtX2ZtdF92aWRfb3V0LAorCS52aWRpb2NfZW51bV9mbXRfdmlkX292ZXJsYXkgCSAgICA9IHpvcmFuX2VudW1fZm10X3ZpZF9vdmVybGF5LAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcCAJCSAgICA9IHpvcmFuX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfb3V0ICAgICAgICAgICAgICAgPSB6b3Jhbl9nX2ZtdF92aWRfb3V0LAorCS52aWRpb2NfZ19mbXRfdmlkX292ZXJsYXkgICAgICAgICAgID0gem9yYW5fZ19mbXRfdmlkX292ZXJsYXksCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwICAJCSAgICA9IHpvcmFuX3NfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfb3V0ICAgICAgICAgICAgICAgPSB6b3Jhbl9zX2ZtdF92aWRfb3V0LAorCS52aWRpb2Nfc19mbXRfdmlkX292ZXJsYXkgICAgICAgICAgID0gem9yYW5fc19mbXRfdmlkX292ZXJsYXksCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgIAkgICAgPSB6b3Jhbl90cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9vdXQgCSAgICA9IHpvcmFuX3RyeV9mbXRfdmlkX291dCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX292ZXJsYXkgCSAgICA9IHpvcmFuX3RyeV9mbXRfdmlkX292ZXJsYXksCisJLnZpZGlvY19xdWVyeWN0cmwgCQkgICAgPSB6b3Jhbl9xdWVyeWN0cmwsCisJLnZpZGlvY19zX2N0cmwgICAgICAgCQkgICAgPSB6b3Jhbl9zX2N0cmwsCisJLnZpZGlvY19nX2N0cmwgICAgICAgCQkgICAgPSB6b3Jhbl9nX2N0cmwsCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCisJLnZpZGlvY19kZWZhdWx0IAkJICAgID0gem9yYW5fZGVmYXVsdCwKKwkudmlkaW9jZ21idWYgCQkJICAgID0gem9yYW5fdmlkaW9jZ21idWYsCisjZW5kaWYKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgem9yYW5fZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHpvcmFuX29wZW4sCiAJLnJlbGVhc2UgPSB6b3Jhbl9jbG9zZSwKLQkuaW9jdGwgPSB6b3Jhbl9pb2N0bCwKKwkuaW9jdGwgPSB2aWRlb19pb2N0bDIsCiAJLnJlYWQgPSB6b3Jhbl9yZWFkLAogCS53cml0ZSA9IHpvcmFuX3dyaXRlLAogCS5tbWFwID0gem9yYW5fbW1hcCwKQEAgLTQ1OTYsNyArMzM5Nyw5IEBACiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHpvcmFuX3RlbXBsYXRlIF9fZGV2aW5pdGRhdGEgPSB7CiAJLm5hbWUgPSBaT1JBTl9OQU1FLAogCS5mb3BzID0gJnpvcmFuX2ZvcHMsCisJLmlvY3RsX29wcyA9ICZ6b3Jhbl9pb2N0bF9vcHMsCiAJLnJlbGVhc2UgPSAmem9yYW5fdmRldl9yZWxlYXNlLAorCS50dm5vcm1zID0gVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNLAogCS5taW5vciA9IC0xCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX3Byb2Nmcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9wcm9jZnMuYwppbmRleCA4NzBiYzVhLi5mMTQyM2I3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX3Byb2Nmcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fcHJvY2ZzLmMKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2VtLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjAxNi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDE2LmMKaW5kZXggMDBkMTMyYi4uMjFjMDg4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDE2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDE2LmMKQEAgLTM0LDE1ICszNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCi0vKiBpbmNsdWRlcyBmb3Igc3RydWN0dXJlcyBhbmQgZGVmaW5lcyByZWdhcmRpbmcgdmlkZW8KLSAgICNpbmNsdWRlPGxpbnV4L3ZpZGVvZGV2Lmg+ICovCi0KIC8qIEkvTyBjb21tYW5kcywgZXJyb3IgY29kZXMgKi8KICNpbmNsdWRlIDxhc20vaW8uaD4KLS8vI2luY2x1ZGU8ZXJybm8uaD4KIAogLyogdjRsICBBUEkgKi8KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogCiAvKiBoZWFkZXJmaWxlIG9mIHRoaXMgbW9kdWxlICovCiAjaW5jbHVkZSJ6cjM2MDE2LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwNTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA1MC5jCmluZGV4IGNmOGIyNzEuLjYzOWRkODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA1MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA1MC5jCkBAIC0zNCwxMiArMzQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCi0vKiBpbmNsdWRlcyBmb3Igc3RydWN0dXJlcyBhbmQgZGVmaW5lcyByZWdhcmRpbmcgdmlkZW8KLSAgICNpbmNsdWRlPGxpbnV4L3ZpZGVvZGV2Lmg+ICovCi0KIC8qIEkvTyBjb21tYW5kcywgZXJyb3IgY29kZXMgKi8KICNpbmNsdWRlIDxhc20vaW8uaD4KLS8vI2luY2x1ZGU8ZXJybm8uaD4KIAogLyogaGVhZGVyZmlsZSBvZiB0aGlzIG1vZHVsZSAqLwogI2luY2x1ZGUgInpyMzYwNTAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA2MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDYwLmMKaW5kZXggOGU3NDA1NC4uMDA4NzQ2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDYwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDYwLmMKQEAgLTM0LDEyICszNCw4IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKLS8qIGluY2x1ZGVzIGZvciBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzIHJlZ2FyZGluZyB2aWRlbwotICAgI2luY2x1ZGU8bGludXgvdmlkZW9kZXYuaD4gKi8KLQogLyogSS9PIGNvbW1hbmRzLCBlcnJvciBjb2RlcyAqLwogI2luY2x1ZGUgPGFzbS9pby5oPgotLy8jaW5jbHVkZTxlcnJuby5oPgogCiAvKiBoZWFkZXJmaWxlIG9mIHRoaXMgbW9kdWxlICovCiAjaW5jbHVkZSAienIzNjA2MC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYwppbmRleCA5MzAyMzU2Li4yMjE0MDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYwpAQCAtOTYsNiArOTYsNyBAQAogCXtVU0JfREVWSUNFKDB4MDZkNiwgMHgwMDNiKSwgLmRyaXZlcl9pbmZvID0gTUVUSE9EMCB9LAogCXtVU0JfREVWSUNFKDB4MGExNywgMHgwMDRlKSwgLmRyaXZlcl9pbmZvID0gTUVUSE9EMiB9LAogCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDVkKSwgLmRyaXZlcl9pbmZvID0gTUVUSE9EMiB9LAorCXtVU0JfREVWSUNFKDB4MDhjYSwgMHgyMTAyKSwgLmRyaXZlcl9pbmZvID0gTUVUSE9EMiB9LAogCXt9CQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKQEAgLTQyNSw3ICs0MjYsNiBAQAogc3RhdGljIGludCB6cjM2NHh4X3ZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkgICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCiB7Ci0JbWVtc2V0KGNhcCwgMCwgc2l6ZW9mKCpjYXApKTsKIAlzdHJjcHkoY2FwLT5kcml2ZXIsIERSSVZFUl9ERVNDKTsKIAljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9SRUFEV1JJVEU7CiAJcmV0dXJuIDA7CkBAIC00MzYsOCArNDM2LDYgQEAKIHsKIAlpZiAoaS0+aW5kZXggIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JbWVtc2V0KGksIDAsIHNpemVvZigqaSkpOwotCWktPmluZGV4ID0gMDsKIAlzdHJjcHkoaS0+bmFtZSwgRFJJVkVSX0RFU0MgIiBDYW1lcmEiKTsKIAlpLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKIAlyZXR1cm4gMDsKQEAgLTUyOSwxMSArNTI3LDYgQEAKIHsKIAlpZiAoZi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsKLQlmLT5pbmRleCA9IDA7Ci0JZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAlmLT5mbGFncyA9IFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRDsKIAlzdHJjcHkoZi0+ZGVzY3JpcHRpb24sICJKUEVHIik7CiAJZi0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfSlBFRzsKQEAgLTU1MCw4ICs1NDMsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKIAotCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX0pQRUcpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChmLT5mbXQucGl4LmZpZWxkICE9IFY0TDJfRklFTERfQU5ZICYmCkBAIC01NzcsMTAgKzU2OCw2IEBACiAJCXJldHVybiAtRU5PREVWOwogCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwogCi0JaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQltZW1zZXQoJmYtPmZtdC5waXgsIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KSk7Ci0JZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0pQRUc7CiAJZi0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKIAlmLT5mbXQucGl4LndpZHRoID0gY2FtLT53aWR0aDsKQEAgLTYwMiw4ICs1ODksNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKIAotCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX0pQRUcpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChmLT5mbXQucGl4LmZpZWxkICE9IFY0TDJfRklFTERfQU5ZICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19wcm9jLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19wcm9jLmMKaW5kZXggOWEzNmI1YS4uNzA0NWM0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fcHJvYy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX3Byb2MuYwpAQCAtMjAzNyw4ICsyMDM3LDYgQEAKIAlpZiAoIWkyb19wcm9jX2Rpcl9yb290KQogCQlyZXR1cm4gLTE7CiAKLQlpMm9fcHJvY19kaXJfcm9vdC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQogCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmkyb19jb250cm9sbGVycywgbGlzdCkKIAkgICAgaTJvX3Byb2NfaW9wX2FkZChpMm9fcHJvY19kaXJfcm9vdCwgYyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDljMzI2YTUuLjk5NjEwZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMzQ0NCwyNSArMzQ0NCwxMiBAQAogICovCiBzdGF0aWMgdm9pZCBib25kX2NyZWF0ZV9wcm9jX2Rpcih2b2lkKQogewotCWludCBsZW4gPSBzdHJsZW4oRFJWX05BTUUpOwotCi0JZm9yIChib25kX3Byb2NfZGlyID0gaW5pdF9uZXQucHJvY19uZXQtPnN1YmRpcjsgYm9uZF9wcm9jX2RpcjsKLQkgICAgIGJvbmRfcHJvY19kaXIgPSBib25kX3Byb2NfZGlyLT5uZXh0KSB7Ci0JCWlmICgoYm9uZF9wcm9jX2Rpci0+bmFtZWxlbiA9PSBsZW4pICYmCi0JCSAgICAhbWVtY21wKGJvbmRfcHJvY19kaXItPm5hbWUsIERSVl9OQU1FLCBsZW4pKSB7Ci0JCQlicmVhazsKLQkJfQotCX0KLQogCWlmICghYm9uZF9wcm9jX2RpcikgewogCQlib25kX3Byb2NfZGlyID0gcHJvY19ta2RpcihEUlZfTkFNRSwgaW5pdF9uZXQucHJvY19uZXQpOwotCQlpZiAoYm9uZF9wcm9jX2RpcikgewotCQkJYm9uZF9wcm9jX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkJfSBlbHNlIHsKKwkJaWYgKCFib25kX3Byb2NfZGlyKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQogCQkJCSI6IFdhcm5pbmc6IGNhbm5vdCBjcmVhdGUgL3Byb2MvbmV0LyVzXG4iLAogCQkJCURSVl9OQU1FKTsKLQkJfQogCX0KIH0KIApAQCAtMzQ3MSwyNSArMzQ1OCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGJvbmRfZGVzdHJveV9wcm9jX2Rpcih2b2lkKQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGU7Ci0KLQlpZiAoIWJvbmRfcHJvY19kaXIpIHsKLQkJcmV0dXJuOwotCX0KLQotCS8qIHZlcmlmeSB0aGF0IHRoZSAvcHJvYyBkaXIgaXMgZW1wdHkgKi8KLQlmb3IgKGRlID0gYm9uZF9wcm9jX2Rpci0+c3ViZGlyOyBkZTsgZGUgPSBkZS0+bmV4dCkgewotCQkvKiBpZ25vcmUgLiBhbmQgLi4gKi8KLQkJaWYgKCooZGUtPm5hbWUpICE9ICcuJykgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoZGUpIHsKLQkJaWYgKGJvbmRfcHJvY19kaXItPm93bmVyID09IFRISVNfTU9EVUxFKSB7Ci0JCQlib25kX3Byb2NfZGlyLT5vd25lciA9IE5VTEw7Ci0JCX0KLQl9IGVsc2UgeworCWlmIChib25kX3Byb2NfZGlyKSB7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KERSVl9OQU1FLCBpbml0X25ldC5wcm9jX25ldCk7CiAJCWJvbmRfcHJvY19kaXIgPSBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMgYi9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jCmluZGV4IGNkOGU5OGIuLjA0OWIwYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMKKysrIGIvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYwpAQCAtMTEyMyw5ICsxMTIzLDkgQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1Mnh4X2ZlY19tYXRjaFtdID0gewotCXsgLnR5cGUgPSAibmV0d29yayIsIC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCB9LAotCXsgLnR5cGUgPSAibmV0d29yayIsIC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWZlYyIsIH0sCi0JeyAudHlwZSA9ICJuZXR3b3JrIiwgLmNvbXBhdGlibGUgPSAibXBjNTIwMC1mZWMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWZlYyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1mZWMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAibXBjNTIwMC1mZWMiLCB9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYwppbmRleCAxMjQzYmM4Li5hYzBlNGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYwpAQCAtMTg3MSwxMyArMTg3MSw2IEBACiAJICogd2l0aG91dCBwcm9jZnMgLSBpdCdzIG5vdCByZXF1aXJlZCBmb3IgdGhlIGRyaXZlciB0byB3b3JrLgogCSAqLwogCXZsc2lfcHJvY19yb290ID0gcHJvY19ta2RpcihQUk9DX0RJUiwgTlVMTCk7Ci0JaWYgKHZsc2lfcHJvY19yb290KSB7Ci0JCS8qIHByb3RlY3QgcmVnaXN0ZXJlZCBwcm9jZGlyIGFnYWluc3QgbW9kdWxlIHJlbW92YWwuCi0JCSAqIEJlY2F1c2Ugd2UgYXJlIGluIHRoZSBtb2R1bGUgaW5pdCBwYXRoIHRoZXJlJ3Mgbm8gcmFjZQotCQkgKiB3aW5kb3cgYWZ0ZXIgY3JlYXRlX3Byb2NfZW50cnkgKGFuZCBubyBiYXJyaWVyIG5lZWRlZCkuCi0JCSAqLwotCQl2bHNpX3Byb2Nfcm9vdC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQl9CiAKIAlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZ2bHNpX2lyZGFfZHJpdmVyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWV0aC5jIGIvZHJpdmVycy9uZXQvbWV0aC5jCmluZGV4IGMzMzZhMWYuLmFhMDg5ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21ldGguYworKysgYi9kcml2ZXJzL25ldC9tZXRoLmMKQEAgLTM5OCw3ICszOTgsNyBAQAogCQkJaW50IGxlbiA9IChzdGF0dXMgJiAweGZmZmYpIC0gNDsgLyogb21pdCBDUkMgKi8KIAkJCS8qIGxlbmd0aCBzYW5pdHkgY2hlY2sgKi8KIAkJCWlmIChsZW4gPCA2MCB8fCBsZW4gPiAxNTE4KSB7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBib2d1cyBwYWNrZXQgc2l6ZTogJWxkLCBzdGF0dXM9JSMybHguXG4iLAorCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogYm9ndXMgcGFja2V0IHNpemU6ICVsZCwgc3RhdHVzPSUjMkx4LlxuIiwKIAkJCQkgICAgICAgZGV2LT5uYW1lLCBwcml2LT5yeF93cml0ZSwKIAkJCQkgICAgICAgcHJpdi0+cnhfcmluZ1twcml2LT5yeF93cml0ZV0tPnN0YXR1cy5yYXcpOwogCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MXguaCBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCmluZGV4IDZjNDRmODYuLjkxMjMwOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCkBAIC0zNDYsMzggKzM0Niw2IEBACiAjZGVmaW5lIFJQQ19MU0FfREVGQVVMVAkJUlBDX0xFRF9UWF9SWAogI2RlZmluZSBSUENfTFNCX0RFRkFVTFQJCVJQQ19MRURfMTAwXzEwCiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTFYMDApCi0KLSNpbmNsdWRlIDxhdTF4eHguaD4KLQotLyogV2UgY2FuIG9ubHkgZG8gMTYtYml0IHJlYWRzIGFuZCB3cml0ZXMgaW4gdGhlIHN0YXRpYyBtZW1vcnkgc3BhY2UuICovCi0jZGVmaW5lIFNNQ19DQU5fVVNFXzhCSVQJMAotI2RlZmluZSBTTUNfQ0FOX1VTRV8xNkJJVAkxCi0jZGVmaW5lIFNNQ19DQU5fVVNFXzMyQklUCTAKLSNkZWZpbmUgU01DX0lPX1NISUZUCQkwCi0jZGVmaW5lIFNNQ19OT1dBSVQJCTEKLQotI2RlZmluZSBTTUNfaW53KGEsIHIpCQlhdV9yZWFkdygodW5zaWduZWQgbG9uZykoKGEpICsgKHIpKSkKLSNkZWZpbmUgU01DX2luc3coYSwgciwgcCwgbCkJXAotCWRvIHsJXAotCQl1bnNpZ25lZCBsb25nIF9hID0gKHVuc2lnbmVkIGxvbmcpKChhKSArIChyKSk7IFwKLQkJaW50IF9sID0gKGwpOyBcCi0JCXUxNiAqX3AgPSAodTE2ICopKHApOyBcCi0JCXdoaWxlIChfbC0tID4gMCkgXAotCQkJKl9wKysgPSBhdV9yZWFkdyhfYSk7IFwKLQl9IHdoaWxlKDApCi0jZGVmaW5lIFNNQ19vdXR3KHYsIGEsIHIpCWF1X3dyaXRldyh2LCAodW5zaWduZWQgbG9uZykoKGEpICsgKHIpKSkKLSNkZWZpbmUgU01DX291dHN3KGEsIHIsIHAsIGwpCVwKLQlkbyB7CVwKLQkJdW5zaWduZWQgbG9uZyBfYSA9ICh1bnNpZ25lZCBsb25nKSgoYSkgKyAocikpOyBcCi0JCWludCBfbCA9IChsKTsgXAotCQljb25zdCB1MTYgKl9wID0gKGNvbnN0IHUxNiAqKShwKTsgXAotCQl3aGlsZSAoX2wtLSA+IDApIFwKLQkJCWF1X3dyaXRldygqX3ArKyAsIF9hKTsgXAotCX0gd2hpbGUoMCkKLQotI2RlZmluZSBTTUNfSVJRX0ZMQUdTCQkoMCkKLQogI2VsaWYJZGVmaW5lZChDT05GSUdfQVJDSF9WRVJTQVRJTEUpCiAKICNkZWZpbmUgU01DX0NBTl9VU0VfOEJJVAkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKaW5kZXggOTMzMDJjMC4uZjIxYTYxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwpAQCAtNDQ5Miw3ICs0NDkyLDYgQEAKIAkJZ290byBmYWlsOwogCWFwcml2LT5wcm9jX2VudHJ5LT51aWQgPSBwcm9jX3VpZDsKIAlhcHJpdi0+cHJvY19lbnRyeS0+Z2lkID0gcHJvY19naWQ7Ci0JYXByaXYtPnByb2NfZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAkvKiBTZXR1cCB0aGUgU3RhdHNEZWx0YSAqLwogCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgiU3RhdHNEZWx0YSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMgYi9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMKaW5kZXggYzNlYTVmYS4uMmM5YWE0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYwpAQCAtNTc0LDcgKzU3NCw3IEBACiAJCXJldHVybiAwOwogfQogCi12b2lkIF9fZXhpdCBidWZmZXJfc3luY19jbGVhbnVwKHZvaWQpCit2b2lkIGJ1ZmZlcl9zeW5jX2NsZWFudXAodm9pZCkKIHsKIAlmcmVlX2NwdW1hc2tfdmFyKG1hcmtlZF9jcHVzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2RtYXIuYyBiL2RyaXZlcnMvcGNpL2RtYXIuYwppbmRleCA1ZjMzMzQwLi5kMzEzMDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9kbWFyLmMKKysrIGIvZHJpdmVycy9wY2kvZG1hci5jCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSA8bGludXgvaW92YS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI3VuZGVmIFBSRUZJWAogI2RlZmluZSBQUkVGSVggIkRNQVI6IgpAQCAtNTA5LDYgKzUxMSw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJaW9tbXUtPnNlcV9pZCA9IGlvbW11X2FsbG9jYXRlZCsrOworCXNwcmludGYgKGlvbW11LT5uYW1lLCAiZG1hciVkIiwgaW9tbXUtPnNlcV9pZCk7CiAKIAlpb21tdS0+cmVnID0gaW9yZW1hcChkcmhkLT5yZWdfYmFzZV9hZGRyLCBWVERfUEFHRV9TSVpFKTsKIAlpZiAoIWlvbW11LT5yZWcpIHsKQEAgLTc1MSw2ICs3NTQsNDIgQEAKIH0KIAogLyoKKyAqIERpc2FibGUgUXVldWVkIEludmFsaWRhdGlvbiBpbnRlcmZhY2UuCisgKi8KK3ZvaWQgZG1hcl9kaXNhYmxlX3FpKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgc3RzOworCWN5Y2xlc190IHN0YXJ0X3RpbWUgPSBnZXRfY3ljbGVzKCk7CisKKwlpZiAoIWVjYXBfcWlzKGlvbW11LT5lY2FwKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFncyk7CisKKwlzdHMgPSAgZG1hcl9yZWFkcShpb21tdS0+cmVnICsgRE1BUl9HU1RTX1JFRyk7CisJaWYgKCEoc3RzICYgRE1BX0dTVFNfUUlFUykpCisJCWdvdG8gZW5kOworCisJLyoKKwkgKiBHaXZlIGEgY2hhbmNlIHRvIEhXIHRvIGNvbXBsZXRlIHRoZSBwZW5kaW5nIGludmFsaWRhdGlvbiByZXF1ZXN0cy4KKwkgKi8KKwl3aGlsZSAoKHJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0lRVF9SRUcpICE9CisJCXJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0lRSF9SRUcpKSAmJgorCQkoRE1BUl9PUEVSQVRJT05fVElNRU9VVCA+IChnZXRfY3ljbGVzKCkgLSBzdGFydF90aW1lKSkpCisJCWNwdV9yZWxheCgpOworCisJaW9tbXUtPmdjbWQgJj0gfkRNQV9HQ01EX1FJRTsKKworCXdyaXRlbChpb21tdS0+Z2NtZCwgaW9tbXUtPnJlZyArIERNQVJfR0NNRF9SRUcpOworCisJSU9NTVVfV0FJVF9PUChpb21tdSwgRE1BUl9HU1RTX1JFRywgcmVhZGwsCisJCSAgICAgICEoc3RzICYgRE1BX0dTVFNfUUlFUyksIHN0cyk7CitlbmQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKK30KKworLyoKICAqIEVuYWJsZSBRdWV1ZWQgSW52YWxpZGF0aW9uIGludGVyZmFjZS4gVGhpcyBpcyBhIG11c3QgdG8gc3VwcG9ydAogICogaW50ZXJydXB0LXJlbWFwcGluZy4gQWxzbyB1c2VkIGJ5IERNQS1yZW1hcHBpbmcsIHdoaWNoIHJlcGxhY2VzCiAgKiByZWdpc3RlciBiYXNlZCBJT1RMQiBpbnZhbGlkYXRpb24uCkBAIC03NzAsMjAgKzgwOSwyMCBAQAogCWlmIChpb21tdS0+cWkpCiAJCXJldHVybiAwOwogCi0JaW9tbXUtPnFpID0ga21hbGxvYyhzaXplb2YoKnFpKSwgR0ZQX0tFUk5FTCk7CisJaW9tbXUtPnFpID0ga21hbGxvYyhzaXplb2YoKnFpKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFpb21tdS0+cWkpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJcWkgPSBpb21tdS0+cWk7CiAKLQlxaS0+ZGVzYyA9ICh2b2lkICopKGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKSk7CisJcWktPmRlc2MgPSAodm9pZCAqKShnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQykpOwogCWlmICghcWktPmRlc2MpIHsKIAkJa2ZyZWUocWkpOwogCQlpb21tdS0+cWkgPSAwOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlxaS0+ZGVzY19zdGF0dXMgPSBrbWFsbG9jKFFJX0xFTkdUSCAqIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKKwlxaS0+ZGVzY19zdGF0dXMgPSBrbWFsbG9jKFFJX0xFTkdUSCAqIHNpemVvZihpbnQpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXFpLT5kZXNjX3N0YXR1cykgewogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHFpLT5kZXNjKTsKIAkJa2ZyZWUocWkpOwpAQCAtODEyLDMgKzg1MSwyNTQgQEAKIAogCXJldHVybiAwOwogfQorCisvKiBpb21tdSBpbnRlcnJ1cHQgaGFuZGxpbmcuIE1vc3Qgc3R1ZmYgYXJlIE1TSS1saWtlLiAqLworCitlbnVtIGZhdWx0dHlwZSB7CisJRE1BX1JFTUFQLAorCUlOVFJfUkVNQVAsCisJVU5LTk9XTiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpkbWFfcmVtYXBfZmF1bHRfcmVhc29uc1tdID0KK3sKKwkiU29mdHdhcmUiLAorCSJQcmVzZW50IGJpdCBpbiByb290IGVudHJ5IGlzIGNsZWFyIiwKKwkiUHJlc2VudCBiaXQgaW4gY29udGV4dCBlbnRyeSBpcyBjbGVhciIsCisJIkludmFsaWQgY29udGV4dCBlbnRyeSIsCisJIkFjY2VzcyBiZXlvbmQgTUdBVyIsCisJIlBURSBXcml0ZSBhY2Nlc3MgaXMgbm90IHNldCIsCisJIlBURSBSZWFkIGFjY2VzcyBpcyBub3Qgc2V0IiwKKwkiTmV4dCBwYWdlIHRhYmxlIHB0ciBpcyBpbnZhbGlkIiwKKwkiUm9vdCB0YWJsZSBhZGRyZXNzIGludmFsaWQiLAorCSJDb250ZXh0IHRhYmxlIHB0ciBpcyBpbnZhbGlkIiwKKwkibm9uLXplcm8gcmVzZXJ2ZWQgZmllbGRzIGluIFJUUCIsCisJIm5vbi16ZXJvIHJlc2VydmVkIGZpZWxkcyBpbiBDVFAiLAorCSJub24temVybyByZXNlcnZlZCBmaWVsZHMgaW4gUFRFIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICppbnRyX3JlbWFwX2ZhdWx0X3JlYXNvbnNbXSA9Cit7CisJIkRldGVjdGVkIHJlc2VydmVkIGZpZWxkcyBpbiB0aGUgZGVjb2RlZCBpbnRlcnJ1cHQtcmVtYXBwZWQgcmVxdWVzdCIsCisJIkludGVycnVwdCBpbmRleCBleGNlZWRlZCB0aGUgaW50ZXJydXB0LXJlbWFwcGluZyB0YWJsZSBzaXplIiwKKwkiUHJlc2VudCBmaWVsZCBpbiB0aGUgSVJURSBlbnRyeSBpcyBjbGVhciIsCisJIkVycm9yIGFjY2Vzc2luZyBpbnRlcnJ1cHQtcmVtYXBwaW5nIHRhYmxlIHBvaW50ZWQgYnkgSVJUQV9SRUciLAorCSJEZXRlY3RlZCByZXNlcnZlZCBmaWVsZHMgaW4gdGhlIElSVEUgZW50cnkiLAorCSJCbG9ja2VkIGEgY29tcGF0aWJpbGl0eSBmb3JtYXQgaW50ZXJydXB0IHJlcXVlc3QiLAorCSJCbG9ja2VkIGFuIGludGVycnVwdCByZXF1ZXN0IGR1ZSB0byBzb3VyY2UtaWQgdmVyaWZpY2F0aW9uIGZhaWx1cmUiLAorfTsKKworI2RlZmluZSBNQVhfRkFVTFRfUkVBU09OX0lEWCAJKEFSUkFZX1NJWkUoZmF1bHRfcmVhc29uX3N0cmluZ3MpIC0gMSkKKworY29uc3QgY2hhciAqZG1hcl9nZXRfZmF1bHRfcmVhc29uKHU4IGZhdWx0X3JlYXNvbiwgaW50ICpmYXVsdF90eXBlKQoreworCWlmIChmYXVsdF9yZWFzb24gPj0gMHgyMCAmJiAoZmF1bHRfcmVhc29uIDw9IDB4MjAgKworCQkJCSAgICAgQVJSQVlfU0laRShpbnRyX3JlbWFwX2ZhdWx0X3JlYXNvbnMpKSkgeworCQkqZmF1bHRfdHlwZSA9IElOVFJfUkVNQVA7CisJCXJldHVybiBpbnRyX3JlbWFwX2ZhdWx0X3JlYXNvbnNbZmF1bHRfcmVhc29uIC0gMHgyMF07CisJfSBlbHNlIGlmIChmYXVsdF9yZWFzb24gPCBBUlJBWV9TSVpFKGRtYV9yZW1hcF9mYXVsdF9yZWFzb25zKSkgeworCQkqZmF1bHRfdHlwZSA9IERNQV9SRU1BUDsKKwkJcmV0dXJuIGRtYV9yZW1hcF9mYXVsdF9yZWFzb25zW2ZhdWx0X3JlYXNvbl07CisJfSBlbHNlIHsKKwkJKmZhdWx0X3R5cGUgPSBVTktOT1dOOworCQlyZXR1cm4gIlVua25vd24iOworCX0KK30KKwordm9pZCBkbWFyX21zaV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZ2V0X2lycV9kYXRhKGlycSk7CisJdW5zaWduZWQgbG9uZyBmbGFnOworCisJLyogdW5tYXNrIGl0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKKwl3cml0ZWwoMCwgaW9tbXUtPnJlZyArIERNQVJfRkVDVExfUkVHKTsKKwkvKiBSZWFkIGEgcmVnIHRvIGZvcmNlIGZsdXNoIHRoZSBwb3N0IHdyaXRlICovCisJcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfRkVDVExfUkVHKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Cit9CisKK3ZvaWQgZG1hcl9tc2lfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKwlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZ2V0X2lycV9kYXRhKGlycSk7CisKKwkvKiBtYXNrIGl0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKKwl3cml0ZWwoRE1BX0ZFQ1RMX0lNLCBpb21tdS0+cmVnICsgRE1BUl9GRUNUTF9SRUcpOworCS8qIFJlYWQgYSByZWcgdG8gZm9yY2UgZmx1c2ggdGhlIHBvc3Qgd3JpdGUgKi8KKwlyZWFkbChpb21tdS0+cmVnICsgRE1BUl9GRUNUTF9SRUcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKK30KKwordm9pZCBkbWFyX21zaV93cml0ZShpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQoreworCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBnZXRfaXJxX2RhdGEoaXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWc7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOworCXdyaXRlbChtc2ctPmRhdGEsIGlvbW11LT5yZWcgKyBETUFSX0ZFREFUQV9SRUcpOworCXdyaXRlbChtc2ctPmFkZHJlc3NfbG8sIGlvbW11LT5yZWcgKyBETUFSX0ZFQUREUl9SRUcpOworCXdyaXRlbChtc2ctPmFkZHJlc3NfaGksIGlvbW11LT5yZWcgKyBETUFSX0ZFVUFERFJfUkVHKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Cit9CisKK3ZvaWQgZG1hcl9tc2lfcmVhZChpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQoreworCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBnZXRfaXJxX2RhdGEoaXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWc7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOworCW1zZy0+ZGF0YSA9IHJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZFREFUQV9SRUcpOworCW1zZy0+YWRkcmVzc19sbyA9IHJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZFQUREUl9SRUcpOworCW1zZy0+YWRkcmVzc19oaSA9IHJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZFVUFERFJfUkVHKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Cit9CisKK3N0YXRpYyBpbnQgZG1hcl9mYXVsdF9kb19vbmUoc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgaW50IHR5cGUsCisJCXU4IGZhdWx0X3JlYXNvbiwgdTE2IHNvdXJjZV9pZCwgdW5zaWduZWQgbG9uZyBsb25nIGFkZHIpCit7CisJY29uc3QgY2hhciAqcmVhc29uOworCWludCBmYXVsdF90eXBlOworCisJcmVhc29uID0gZG1hcl9nZXRfZmF1bHRfcmVhc29uKGZhdWx0X3JlYXNvbiwgJmZhdWx0X3R5cGUpOworCisJaWYgKGZhdWx0X3R5cGUgPT0gSU5UUl9SRU1BUCkKKwkJcHJpbnRrKEtFUk5fRVJSICJJTlRSLVJFTUFQOiBSZXF1ZXN0IGRldmljZSBbWyUwMng6JTAyeC4lZF0gIgorCQkgICAgICAgImZhdWx0IGluZGV4ICVsbHhcbiIKKwkJCSJJTlRSLVJFTUFQOltmYXVsdCByZWFzb24gJTAyZF0gJXNcbiIsCisJCQkoc291cmNlX2lkID4+IDgpLCBQQ0lfU0xPVChzb3VyY2VfaWQgJiAweEZGKSwKKwkJCVBDSV9GVU5DKHNvdXJjZV9pZCAmIDB4RkYpLCBhZGRyID4+IDQ4LAorCQkJZmF1bHRfcmVhc29uLCByZWFzb24pOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiRE1BUjpbJXNdIFJlcXVlc3QgZGV2aWNlIFslMDJ4OiUwMnguJWRdICIKKwkJICAgICAgICJmYXVsdCBhZGRyICVsbHggXG4iCisJCSAgICAgICAiRE1BUjpbZmF1bHQgcmVhc29uICUwMmRdICVzXG4iLAorCQkgICAgICAgKHR5cGUgPyAiRE1BIFJlYWQiIDogIkRNQSBXcml0ZSIpLAorCQkgICAgICAgKHNvdXJjZV9pZCA+PiA4KSwgUENJX1NMT1Qoc291cmNlX2lkICYgMHhGRiksCisJCSAgICAgICBQQ0lfRlVOQyhzb3VyY2VfaWQgJiAweEZGKSwgYWRkciwgZmF1bHRfcmVhc29uLCByZWFzb24pOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFBSSU1BUllfRkFVTFRfUkVHX0xFTiAoMTYpCitpcnFyZXR1cm5fdCBkbWFyX2ZhdWx0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZGV2X2lkOworCWludCByZWcsIGZhdWx0X2luZGV4OworCXUzMiBmYXVsdF9zdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKKwlmYXVsdF9zdGF0dXMgPSByZWFkbChpb21tdS0+cmVnICsgRE1BUl9GU1RTX1JFRyk7CisJaWYgKGZhdWx0X3N0YXR1cykKKwkJcHJpbnRrKEtFUk5fRVJSICJEUkhEOiBoYW5kbGluZyBmYXVsdCBzdGF0dXMgcmVnICV4XG4iLAorCQkgICAgICAgZmF1bHRfc3RhdHVzKTsKKworCS8qIFRCRDogaWdub3JlIGFkdmFuY2VkIGZhdWx0IGxvZyBjdXJyZW50bHkgKi8KKwlpZiAoIShmYXVsdF9zdGF0dXMgJiBETUFfRlNUU19QUEYpKQorCQlnb3RvIGNsZWFyX3Jlc3Q7CisKKwlmYXVsdF9pbmRleCA9IGRtYV9mc3RzX2ZhdWx0X3JlY29yZF9pbmRleChmYXVsdF9zdGF0dXMpOworCXJlZyA9IGNhcF9mYXVsdF9yZWdfb2Zmc2V0KGlvbW11LT5jYXApOworCXdoaWxlICgxKSB7CisJCXU4IGZhdWx0X3JlYXNvbjsKKwkJdTE2IHNvdXJjZV9pZDsKKwkJdTY0IGd1ZXN0X2FkZHI7CisJCWludCB0eXBlOworCQl1MzIgZGF0YTsKKworCQkvKiBoaWdoZXN0IDMyIGJpdHMgKi8KKwkJZGF0YSA9IHJlYWRsKGlvbW11LT5yZWcgKyByZWcgKworCQkJCWZhdWx0X2luZGV4ICogUFJJTUFSWV9GQVVMVF9SRUdfTEVOICsgMTIpOworCQlpZiAoIShkYXRhICYgRE1BX0ZSQ0RfRikpCisJCQlicmVhazsKKworCQlmYXVsdF9yZWFzb24gPSBkbWFfZnJjZF9mYXVsdF9yZWFzb24oZGF0YSk7CisJCXR5cGUgPSBkbWFfZnJjZF90eXBlKGRhdGEpOworCisJCWRhdGEgPSByZWFkbChpb21tdS0+cmVnICsgcmVnICsKKwkJCQlmYXVsdF9pbmRleCAqIFBSSU1BUllfRkFVTFRfUkVHX0xFTiArIDgpOworCQlzb3VyY2VfaWQgPSBkbWFfZnJjZF9zb3VyY2VfaWQoZGF0YSk7CisKKwkJZ3Vlc3RfYWRkciA9IGRtYXJfcmVhZHEoaW9tbXUtPnJlZyArIHJlZyArCisJCQkJZmF1bHRfaW5kZXggKiBQUklNQVJZX0ZBVUxUX1JFR19MRU4pOworCQlndWVzdF9hZGRyID0gZG1hX2ZyY2RfcGFnZV9hZGRyKGd1ZXN0X2FkZHIpOworCQkvKiBjbGVhciB0aGUgZmF1bHQgKi8KKwkJd3JpdGVsKERNQV9GUkNEX0YsIGlvbW11LT5yZWcgKyByZWcgKworCQkJZmF1bHRfaW5kZXggKiBQUklNQVJZX0ZBVUxUX1JFR19MRU4gKyAxMik7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOworCisJCWRtYXJfZmF1bHRfZG9fb25lKGlvbW11LCB0eXBlLCBmYXVsdF9yZWFzb24sCisJCQkJc291cmNlX2lkLCBndWVzdF9hZGRyKTsKKworCQlmYXVsdF9pbmRleCsrOworCQlpZiAoZmF1bHRfaW5kZXggPiBjYXBfbnVtX2ZhdWx0X3JlZ3MoaW9tbXUtPmNhcCkpCisJCQlmYXVsdF9pbmRleCA9IDA7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7CisJfQorY2xlYXJfcmVzdDoKKwkvKiBjbGVhciBhbGwgdGhlIG90aGVyIGZhdWx0cyAqLworCWZhdWx0X3N0YXR1cyA9IHJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZTVFNfUkVHKTsKKwl3cml0ZWwoZmF1bHRfc3RhdHVzLCBpb21tdS0+cmVnICsgRE1BUl9GU1RTX1JFRyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitpbnQgZG1hcl9zZXRfaW50ZXJydXB0KHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpCit7CisJaW50IGlycSwgcmV0OworCisJLyoKKwkgKiBDaGVjayBpZiB0aGUgZmF1bHQgaW50ZXJydXB0IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuCisJICovCisJaWYgKGlvbW11LT5pcnEpCisJCXJldHVybiAwOworCisJaXJxID0gY3JlYXRlX2lycSgpOworCWlmICghaXJxKSB7CisJCXByaW50ayhLRVJOX0VSUiAiSU9NTVU6IG5vIGZyZWUgdmVjdG9yc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNldF9pcnFfZGF0YShpcnEsIGlvbW11KTsKKwlpb21tdS0+aXJxID0gaXJxOworCisJcmV0ID0gYXJjaF9zZXR1cF9kbWFyX21zaShpcnEpOworCWlmIChyZXQpIHsKKwkJc2V0X2lycV9kYXRhKGlycSwgTlVMTCk7CisJCWlvbW11LT5pcnEgPSAwOworCQlkZXN0cm95X2lycShpcnEpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGRtYXJfZmF1bHQsIDAsIGlvbW11LT5uYW1lLCBpb21tdSk7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICJJT01NVTogY2FuJ3QgcmVxdWVzdCBpcnFcbiIpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBfX2luaXQgZW5hYmxlX2RyaGRfZmF1bHRfaGFuZGxpbmcodm9pZCkKK3sKKwlzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQ7CisKKwkvKgorCSAqIEVuYWJsZSBmYXVsdCBjb250cm9sIGludGVycnVwdC4KKwkgKi8KKwlmb3JfZWFjaF9kcmhkX3VuaXQoZHJoZCkgeworCQlpbnQgcmV0OworCQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZHJoZC0+aW9tbXU7CisJCXJldCA9IGRtYXJfc2V0X2ludGVycnVwdChpb21tdSk7CisKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJEUkhEICVMeDogZmFpbGVkIHRvIGVuYWJsZSBmYXVsdCwgIgorCQkJICAgICAgICIgaW50ZXJydXB0LCByZXQgJWRcbiIsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkcmhkLT5yZWdfYmFzZV9hZGRyLCByZXQpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwppbmRleCBmM2Y2ODY1Li40OTQwMmMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCisrKyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKQEAgLTEwMDQsMTk0ICsxMDA0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogaW9tbXUgaW50ZXJydXB0IGhhbmRsaW5nLiBNb3N0IHN0dWZmIGFyZSBNU0ktbGlrZS4gKi8KLQotc3RhdGljIGNvbnN0IGNoYXIgKmZhdWx0X3JlYXNvbl9zdHJpbmdzW10gPQotewotCSJTb2Z0d2FyZSIsCi0JIlByZXNlbnQgYml0IGluIHJvb3QgZW50cnkgaXMgY2xlYXIiLAotCSJQcmVzZW50IGJpdCBpbiBjb250ZXh0IGVudHJ5IGlzIGNsZWFyIiwKLQkiSW52YWxpZCBjb250ZXh0IGVudHJ5IiwKLQkiQWNjZXNzIGJleW9uZCBNR0FXIiwKLQkiUFRFIFdyaXRlIGFjY2VzcyBpcyBub3Qgc2V0IiwKLQkiUFRFIFJlYWQgYWNjZXNzIGlzIG5vdCBzZXQiLAotCSJOZXh0IHBhZ2UgdGFibGUgcHRyIGlzIGludmFsaWQiLAotCSJSb290IHRhYmxlIGFkZHJlc3MgaW52YWxpZCIsCi0JIkNvbnRleHQgdGFibGUgcHRyIGlzIGludmFsaWQiLAotCSJub24temVybyByZXNlcnZlZCBmaWVsZHMgaW4gUlRQIiwKLQkibm9uLXplcm8gcmVzZXJ2ZWQgZmllbGRzIGluIENUUCIsCi0JIm5vbi16ZXJvIHJlc2VydmVkIGZpZWxkcyBpbiBQVEUiLAotfTsKLSNkZWZpbmUgTUFYX0ZBVUxUX1JFQVNPTl9JRFggCShBUlJBWV9TSVpFKGZhdWx0X3JlYXNvbl9zdHJpbmdzKSAtIDEpCi0KLWNvbnN0IGNoYXIgKmRtYXJfZ2V0X2ZhdWx0X3JlYXNvbih1OCBmYXVsdF9yZWFzb24pCi17Ci0JaWYgKGZhdWx0X3JlYXNvbiA+IE1BWF9GQVVMVF9SRUFTT05fSURYKQotCQlyZXR1cm4gIlVua25vd24iOwotCWVsc2UKLQkJcmV0dXJuIGZhdWx0X3JlYXNvbl9zdHJpbmdzW2ZhdWx0X3JlYXNvbl07Ci19Ci0KLXZvaWQgZG1hcl9tc2lfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IGdldF9pcnFfZGF0YShpcnEpOwotCXVuc2lnbmVkIGxvbmcgZmxhZzsKLQotCS8qIHVubWFzayBpdCAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Ci0Jd3JpdGVsKDAsIGlvbW11LT5yZWcgKyBETUFSX0ZFQ1RMX1JFRyk7Ci0JLyogUmVhZCBhIHJlZyB0byBmb3JjZSBmbHVzaCB0aGUgcG9zdCB3cml0ZSAqLwotCXJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZFQ1RMX1JFRyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOwotfQotCi12b2lkIGRtYXJfbXNpX21hc2sodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWc7Ci0Jc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IGdldF9pcnFfZGF0YShpcnEpOwotCi0JLyogbWFzayBpdCAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Ci0Jd3JpdGVsKERNQV9GRUNUTF9JTSwgaW9tbXUtPnJlZyArIERNQVJfRkVDVExfUkVHKTsKLQkvKiBSZWFkIGEgcmVnIHRvIGZvcmNlIGZsdXNoIHRoZSBwb3N0IHdyaXRlICovCi0JcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfRkVDVExfUkVHKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Ci19Ci0KLXZvaWQgZG1hcl9tc2lfd3JpdGUoaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZykKLXsKLQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZ2V0X2lycV9kYXRhKGlycSk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKLQl3cml0ZWwobXNnLT5kYXRhLCBpb21tdS0+cmVnICsgRE1BUl9GRURBVEFfUkVHKTsKLQl3cml0ZWwobXNnLT5hZGRyZXNzX2xvLCBpb21tdS0+cmVnICsgRE1BUl9GRUFERFJfUkVHKTsKLQl3cml0ZWwobXNnLT5hZGRyZXNzX2hpLCBpb21tdS0+cmVnICsgRE1BUl9GRVVBRERSX1JFRyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOwotfQotCi12b2lkIGRtYXJfbXNpX3JlYWQoaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZykKLXsKLQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZ2V0X2lycV9kYXRhKGlycSk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKLQltc2ctPmRhdGEgPSByZWFkbChpb21tdS0+cmVnICsgRE1BUl9GRURBVEFfUkVHKTsKLQltc2ctPmFkZHJlc3NfbG8gPSByZWFkbChpb21tdS0+cmVnICsgRE1BUl9GRUFERFJfUkVHKTsKLQltc2ctPmFkZHJlc3NfaGkgPSByZWFkbChpb21tdS0+cmVnICsgRE1BUl9GRVVBRERSX1JFRyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOwotfQotCi1zdGF0aWMgaW50IGlvbW11X3BhZ2VfZmF1bHRfZG9fb25lKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIGludCB0eXBlLAotCQl1OCBmYXVsdF9yZWFzb24sIHUxNiBzb3VyY2VfaWQsIHVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyKQotewotCWNvbnN0IGNoYXIgKnJlYXNvbjsKLQotCXJlYXNvbiA9IGRtYXJfZ2V0X2ZhdWx0X3JlYXNvbihmYXVsdF9yZWFzb24pOwotCi0JcHJpbnRrKEtFUk5fRVJSCi0JCSJETUFSOlslc10gUmVxdWVzdCBkZXZpY2UgWyUwMng6JTAyeC4lZF0gIgotCQkiZmF1bHQgYWRkciAlbGx4IFxuIgotCQkiRE1BUjpbZmF1bHQgcmVhc29uICUwMmRdICVzXG4iLAotCQkodHlwZSA/ICJETUEgUmVhZCIgOiAiRE1BIFdyaXRlIiksCi0JCShzb3VyY2VfaWQgPj4gOCksIFBDSV9TTE9UKHNvdXJjZV9pZCAmIDB4RkYpLAotCQlQQ0lfRlVOQyhzb3VyY2VfaWQgJiAweEZGKSwgYWRkciwgZmF1bHRfcmVhc29uLCByZWFzb24pOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIFBSSU1BUllfRkFVTFRfUkVHX0xFTiAoMTYpCi1zdGF0aWMgaXJxcmV0dXJuX3QgaW9tbXVfcGFnZV9mYXVsdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IGRldl9pZDsKLQlpbnQgcmVnLCBmYXVsdF9pbmRleDsKLQl1MzIgZmF1bHRfc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgZmxhZzsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Ci0JZmF1bHRfc3RhdHVzID0gcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfRlNUU19SRUcpOwotCi0JLyogVEJEOiBpZ25vcmUgYWR2YW5jZWQgZmF1bHQgbG9nIGN1cnJlbnRseSAqLwotCWlmICghKGZhdWx0X3N0YXR1cyAmIERNQV9GU1RTX1BQRikpCi0JCWdvdG8gY2xlYXJfb3ZlcmZsb3c7Ci0KLQlmYXVsdF9pbmRleCA9IGRtYV9mc3RzX2ZhdWx0X3JlY29yZF9pbmRleChmYXVsdF9zdGF0dXMpOwotCXJlZyA9IGNhcF9mYXVsdF9yZWdfb2Zmc2V0KGlvbW11LT5jYXApOwotCXdoaWxlICgxKSB7Ci0JCXU4IGZhdWx0X3JlYXNvbjsKLQkJdTE2IHNvdXJjZV9pZDsKLQkJdTY0IGd1ZXN0X2FkZHI7Ci0JCWludCB0eXBlOwotCQl1MzIgZGF0YTsKLQotCQkvKiBoaWdoZXN0IDMyIGJpdHMgKi8KLQkJZGF0YSA9IHJlYWRsKGlvbW11LT5yZWcgKyByZWcgKwotCQkJCWZhdWx0X2luZGV4ICogUFJJTUFSWV9GQVVMVF9SRUdfTEVOICsgMTIpOwotCQlpZiAoIShkYXRhICYgRE1BX0ZSQ0RfRikpCi0JCQlicmVhazsKLQotCQlmYXVsdF9yZWFzb24gPSBkbWFfZnJjZF9mYXVsdF9yZWFzb24oZGF0YSk7Ci0JCXR5cGUgPSBkbWFfZnJjZF90eXBlKGRhdGEpOwotCi0JCWRhdGEgPSByZWFkbChpb21tdS0+cmVnICsgcmVnICsKLQkJCQlmYXVsdF9pbmRleCAqIFBSSU1BUllfRkFVTFRfUkVHX0xFTiArIDgpOwotCQlzb3VyY2VfaWQgPSBkbWFfZnJjZF9zb3VyY2VfaWQoZGF0YSk7Ci0KLQkJZ3Vlc3RfYWRkciA9IGRtYXJfcmVhZHEoaW9tbXUtPnJlZyArIHJlZyArCi0JCQkJZmF1bHRfaW5kZXggKiBQUklNQVJZX0ZBVUxUX1JFR19MRU4pOwotCQlndWVzdF9hZGRyID0gZG1hX2ZyY2RfcGFnZV9hZGRyKGd1ZXN0X2FkZHIpOwotCQkvKiBjbGVhciB0aGUgZmF1bHQgKi8KLQkJd3JpdGVsKERNQV9GUkNEX0YsIGlvbW11LT5yZWcgKyByZWcgKwotCQkJZmF1bHRfaW5kZXggKiBQUklNQVJZX0ZBVUxUX1JFR19MRU4gKyAxMik7Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOwotCi0JCWlvbW11X3BhZ2VfZmF1bHRfZG9fb25lKGlvbW11LCB0eXBlLCBmYXVsdF9yZWFzb24sCi0JCQkJc291cmNlX2lkLCBndWVzdF9hZGRyKTsKLQotCQlmYXVsdF9pbmRleCsrOwotCQlpZiAoZmF1bHRfaW5kZXggPiBjYXBfbnVtX2ZhdWx0X3JlZ3MoaW9tbXUtPmNhcCkpCi0JCQlmYXVsdF9pbmRleCA9IDA7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Ci0JfQotY2xlYXJfb3ZlcmZsb3c6Ci0JLyogY2xlYXIgcHJpbWFyeSBmYXVsdCBvdmVyZmxvdyAqLwotCWZhdWx0X3N0YXR1cyA9IHJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZTVFNfUkVHKTsKLQlpZiAoZmF1bHRfc3RhdHVzICYgRE1BX0ZTVFNfUEZPKQotCQl3cml0ZWwoRE1BX0ZTVFNfUEZPLCBpb21tdS0+cmVnICsgRE1BUl9GU1RTX1JFRyk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1pbnQgZG1hcl9zZXRfaW50ZXJydXB0KHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpCi17Ci0JaW50IGlycSwgcmV0OwotCi0JaXJxID0gY3JlYXRlX2lycSgpOwotCWlmICghaXJxKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSU9NTVU6IG5vIGZyZWUgdmVjdG9yc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXNldF9pcnFfZGF0YShpcnEsIGlvbW11KTsKLQlpb21tdS0+aXJxID0gaXJxOwotCi0JcmV0ID0gYXJjaF9zZXR1cF9kbWFyX21zaShpcnEpOwotCWlmIChyZXQpIHsKLQkJc2V0X2lycV9kYXRhKGlycSwgTlVMTCk7Ci0JCWlvbW11LT5pcnEgPSAwOwotCQlkZXN0cm95X2lycShpcnEpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBGb3JjZSBmYXVsdCByZWdpc3RlciBpcyBjbGVhcmVkICovCi0JaW9tbXVfcGFnZV9mYXVsdChpcnEsIGlvbW11KTsKLQotCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgaW9tbXVfcGFnZV9mYXVsdCwgMCwgaW9tbXUtPm5hbWUsIGlvbW11KTsKLQlpZiAocmV0KQotCQlwcmludGsoS0VSTl9FUlIgIklPTU1VOiBjYW4ndCByZXF1ZXN0IGlycVxuIik7Ci0JcmV0dXJuIHJldDsKLX0KIAogc3RhdGljIGludCBpb21tdV9pbml0X2RvbWFpbnMoc3RydWN0IGludGVsX2lvbW11ICppb21tdSkKIHsKQEAgLTE5ODcsNyArMTc5OSw3IEBACiAJc3RydWN0IGRtYXJfcm1ycl91bml0ICpybXJyOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXU7Ci0JaW50IGksIHJldCwgdW5pdCA9IDA7CisJaW50IGksIHJldDsKIAogCS8qCiAJICogZm9yIGVhY2ggZHJoZApAQCAtMjA0MywxMSArMTg1NSw0MCBAQAogCQl9CiAJfQogCisJLyoKKwkgKiBTdGFydCBmcm9tIHRoZSBzYW5lIGlvbW11IGhhcmR3YXJlIHN0YXRlLgorCSAqLwogCWZvcl9lYWNoX2RyaGRfdW5pdChkcmhkKSB7CiAJCWlmIChkcmhkLT5pZ25vcmVkKQogCQkJY29udGludWU7CiAKIAkJaW9tbXUgPSBkcmhkLT5pb21tdTsKKworCQkvKgorCQkgKiBJZiB0aGUgcXVldWVkIGludmFsaWRhdGlvbiBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGJ5IHVzCisJCSAqIChmb3IgZXhhbXBsZSwgd2hpbGUgZW5hYmxpbmcgaW50ZXJydXB0LXJlbWFwcGluZykgdGhlbgorCQkgKiB3ZSBnb3QgdGhlIHRoaW5ncyBhbHJlYWR5IHJvbGxpbmcgZnJvbSBhIHNhbmUgc3RhdGUuCisJCSAqLworCQlpZiAoaW9tbXUtPnFpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogQ2xlYXIgYW55IHByZXZpb3VzIGZhdWx0cy4KKwkJICovCisJCWRtYXJfZmF1bHQoLTEsIGlvbW11KTsKKwkJLyoKKwkJICogRGlzYWJsZSBxdWV1ZWQgaW52YWxpZGF0aW9uIGlmIHN1cHBvcnRlZCBhbmQgYWxyZWFkeSBlbmFibGVkCisJCSAqIGJlZm9yZSBPUyBoYW5kb3Zlci4KKwkJICovCisJCWRtYXJfZGlzYWJsZV9xaShpb21tdSk7CisJfQorCisJZm9yX2VhY2hfZHJoZF91bml0KGRyaGQpIHsKKwkJaWYgKGRyaGQtPmlnbm9yZWQpCisJCQljb250aW51ZTsKKworCQlpb21tdSA9IGRyaGQtPmlvbW11OworCiAJCWlmIChkbWFyX2VuYWJsZV9xaShpb21tdSkpIHsKIAkJCS8qCiAJCQkgKiBRdWV1ZWQgSW52YWxpZGF0ZSBub3QgZW5hYmxlZCwgdXNlIFJlZ2lzdGVyIEJhc2VkCkBAIC0yMTA5LDcgKzE5NTAsNiBAQAogCQlpZiAoZHJoZC0+aWdub3JlZCkKIAkJCWNvbnRpbnVlOwogCQlpb21tdSA9IGRyaGQtPmlvbW11OwotCQlzcHJpbnRmIChpb21tdS0+bmFtZSwgImRtYXIlZCIsIHVuaXQrKyk7CiAKIAkJaW9tbXVfZmx1c2hfd3JpdGVfYnVmZmVyKGlvbW11KTsKIApAQCAtMjI4NCwxMSArMjEyNCwxMyBAQAogCXJldHVybiAwOwogfQogCi1kbWFfYWRkcl90IGludGVsX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIHBoeXNfYWRkcl90IHBhZGRyLAotCQkJICAgIHNpemVfdCBzaXplLCBpbnQgZGlyKQorc3RhdGljIGRtYV9hZGRyX3QgaW50ZWxfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkJIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewotCXJldHVybiBfX2ludGVsX21hcF9zaW5nbGUoaHdkZXYsIHBhZGRyLCBzaXplLCBkaXIsCi0JCQkJICB0b19wY2lfZGV2KGh3ZGV2KS0+ZG1hX21hc2spOworCXJldHVybiBfX2ludGVsX21hcF9zaW5nbGUoZGV2LCBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQsIHNpemUsCisJCQkJICBkaXIsIHRvX3BjaV9kZXYoZGV2KS0+ZG1hX21hc2spOwogfQogCiBzdGF0aWMgdm9pZCBmbHVzaF91bm1hcHModm9pZCkKQEAgLTIzNTIsOCArMjE5NCw5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXN5bmNfdW1hcF9mbHVzaF9sb2NrLCBmbGFncyk7CiB9CiAKLXZvaWQgaW50ZWxfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwgc2l6ZV90IHNpemUsCi0JCQlpbnQgZGlyKQorc3RhdGljIHZvaWQgaW50ZWxfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCisJCQkgICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluOwpAQCAtMjM5Nyw4ICsyMjQwLDE0IEBACiAJfQogfQogCi12b2lkICppbnRlbF9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCi0JCQkgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFncykKK3N0YXRpYyB2b2lkIGludGVsX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsIHNpemVfdCBzaXplLAorCQkJICAgICAgIGludCBkaXIpCit7CisJaW50ZWxfdW5tYXBfcGFnZShkZXYsIGRldl9hZGRyLCBzaXplLCBkaXIsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCAqaW50ZWxfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLAorCQkJCSAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZ3MpCiB7CiAJdm9pZCAqdmFkZHI7CiAJaW50IG9yZGVyOwpAQCAtMjQyMSw4ICsyMjcwLDggQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotdm9pZCBpbnRlbF9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsCi0JCQkgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQorc3RhdGljIHZvaWQgaW50ZWxfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyLAorCQkJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKIHsKIAlpbnQgb3JkZXI7CiAKQEAgLTI0MzUsOCArMjI4NCw5IEBACiAKICNkZWZpbmUgU0dfRU5UX1ZJUlRfQUREUkVTUyhzZykJKHNnX3ZpcnQoKHNnKSkpCiAKLXZvaWQgaW50ZWxfdW5tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAotCQkgICAgaW50IG5lbGVtcywgaW50IGRpcikKK3N0YXRpYyB2b2lkIGludGVsX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKKwkJCSAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCWludCBpOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldihod2Rldik7CkBAIC0yNDkzLDggKzIzNDMsOCBAQAogCXJldHVybiBuZWxlbXM7CiB9CiAKLWludCBpbnRlbF9tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLAotCQkgaW50IGRpcikKK3N0YXRpYyBpbnQgaW50ZWxfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IG5lbGVtcywKKwkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJdm9pZCAqYWRkcjsKIAlpbnQgaTsKQEAgLTI1NzQsMTMgKzI0MjQsMTkgQEAKIAlyZXR1cm4gbmVsZW1zOwogfQogCi1zdGF0aWMgc3RydWN0IGRtYV9tYXBwaW5nX29wcyBpbnRlbF9kbWFfb3BzID0geworc3RhdGljIGludCBpbnRlbF9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcikKK3sKKwlyZXR1cm4gIWRtYV9hZGRyOworfQorCitzdHJ1Y3QgZG1hX21hcF9vcHMgaW50ZWxfZG1hX29wcyA9IHsKIAkuYWxsb2NfY29oZXJlbnQgPSBpbnRlbF9hbGxvY19jb2hlcmVudCwKIAkuZnJlZV9jb2hlcmVudCA9IGludGVsX2ZyZWVfY29oZXJlbnQsCi0JLm1hcF9zaW5nbGUgPSBpbnRlbF9tYXBfc2luZ2xlLAotCS51bm1hcF9zaW5nbGUgPSBpbnRlbF91bm1hcF9zaW5nbGUsCiAJLm1hcF9zZyA9IGludGVsX21hcF9zZywKIAkudW5tYXBfc2cgPSBpbnRlbF91bm1hcF9zZywKKwkubWFwX3BhZ2UgPSBpbnRlbF9tYXBfcGFnZSwKKwkudW5tYXBfcGFnZSA9IGludGVsX3VubWFwX3BhZ2UsCisJLm1hcHBpbmdfZXJyb3IgPSBpbnRlbF9tYXBwaW5nX2Vycm9yLAogfTsKIAogc3RhdGljIGlubGluZSBpbnQgaW9tbXVfZG9tYWluX2NhY2hlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMgYi9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCmluZGV4IDlkMDdhMDUuLmIwNDFhNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKKysrIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwpAQCAtMTE3LDIxICsxMTcsMjIgQEAKIHsKIAlpbnQgaW5kZXg7CiAJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghZW50cnkpCiAJCXJldHVybiAtMTsKIAotCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOwogCWlmICghaXJxX2lvbW11KSB7Ci0JCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJaW5kZXggPSBpcnFfaW9tbXUtPmlydGVfaW5kZXggKyBpcnFfaW9tbXUtPnN1Yl9oYW5kbGU7CiAJKmVudHJ5ID0gKihpcnFfaW9tbXUtPmlvbW11LT5pcl90YWJsZS0+YmFzZSArIGluZGV4KTsKIAotCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0MSw2ICsxNDIsNyBAQAogCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCXUxNiBpbmRleCwgc3RhcnRfaW5kZXg7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKIAlpZiAoIWNvdW50KQpAQCAtMTcwLDcgKzE3Miw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlzcGluX2xvY2soJmlycV8yX2lyX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJZG8gewogCQlmb3IgKGkgPSBpbmRleDsgaSA8IGluZGV4ICsgY291bnQ7IGkrKykKIAkJCWlmICAodGFibGUtPmJhc2VbaV0ucHJlc2VudCkKQEAgLTE4Miw3ICsxODQsNyBAQAogCQlpbmRleCA9IChpbmRleCArIGNvdW50KSAlIElOVFJfUkVNQVBfVEFCTEVfRU5UUklFUzsKIAogCQlpZiAoaW5kZXggPT0gc3RhcnRfaW5kZXgpIHsKLQkJCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAkJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWxsb2NhdGUgYW4gSVJURVxuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KQEAgLTE5Myw3ICsxOTUsNyBAQAogCiAJaXJxX2lvbW11ID0gaXJxXzJfaW9tbXVfYWxsb2MoaXJxKTsKIAlpZiAoIWlycV9pb21tdSkgewotCQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhbGxvY2F0ZSBpcnFfMl9pb21tdVxuIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0yMDMsNyArMjA1LDcgQEAKIAlpcnFfaW9tbXUtPnN1Yl9oYW5kbGUgPSAwOwogCWlycV9pb21tdS0+aXJ0ZV9tYXNrID0gbWFzazsKIAotCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gaW5kZXg7CiB9CkBAIC0yMjMsMzAgKzIyNSwzMiBAQAogewogCWludCBpbmRleDsKIAlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCWlycV9pb21tdSA9IHZhbGlkX2lycV8yX2lvbW11KGlycSk7CiAJaWYgKCFpcnFfaW9tbXUpIHsKLQkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAkqc3ViX2hhbmRsZSA9IGlycV9pb21tdS0+c3ViX2hhbmRsZTsKIAlpbmRleCA9IGlycV9pb21tdS0+aXJ0ZV9pbmRleDsKLQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCXJldHVybiBpbmRleDsKIH0KIAogaW50IHNldF9pcnRlX2lycShpbnQgaXJxLCBzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCB1MTYgaW5kZXgsIHUxNiBzdWJoYW5kbGUpCiB7CiAJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAogCWlycV9pb21tdSA9IGlycV8yX2lvbW11X2FsbG9jKGlycSk7CiAKIAlpZiAoIWlycV9pb21tdSkgewotCQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhbGxvY2F0ZSBpcnFfMl9pb21tdVxuIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0yNTYsNyArMjYwLDcgQEAKIAlpcnFfaW9tbXUtPnN1Yl9oYW5kbGUgPSBzdWJoYW5kbGU7CiAJaXJxX2lvbW11LT5pcnRlX21hc2sgPSAwOwogCi0Jc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjY0LDExICsyNjgsMTIgQEAKIGludCBjbGVhcl9pcnRlX2lycShpbnQgaXJxLCBzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCB1MTYgaW5kZXgpCiB7CiAJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOwogCWlmICghaXJxX2lvbW11KSB7Ci0JCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0yNzcsNyArMjgyLDcgQEAKIAlpcnFfaW9tbXUtPnN1Yl9oYW5kbGUgPSAwOwogCWlycV8yX2lvbW11KGlycSktPmlydGVfbWFzayA9IDA7CiAKLQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODksMTEgKzI5NCwxMiBAQAogCXN0cnVjdCBpcnRlICppcnRlOwogCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXU7CiAJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOwogCWlmICghaXJxX2lvbW11KSB7Ci0JCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0zMDIsMTEgKzMwOCwxMSBAQAogCWluZGV4ID0gaXJxX2lvbW11LT5pcnRlX2luZGV4ICsgaXJxX2lvbW11LT5zdWJfaGFuZGxlOwogCWlydGUgPSAmaW9tbXUtPmlyX3RhYmxlLT5iYXNlW2luZGV4XTsKIAotCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyAqKWlydGUsIGlydGVfbW9kaWZpZWQtPmxvdyB8ICgxIDw8IDEpKTsKKwlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgKilpcnRlLCBpcnRlX21vZGlmaWVkLT5sb3cpOwogCV9faW9tbXVfZmx1c2hfY2FjaGUoaW9tbXUsIGlydGUsIHNpemVvZigqaXJ0ZSkpOwogCiAJcmMgPSBxaV9mbHVzaF9pZWMoaW9tbXUsIGluZGV4LCAwKTsKLQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMzE3LDExICszMjMsMTIgQEAKIAlpbnQgaW5kZXg7CiAJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKIAlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCWlycV9pb21tdSA9IHZhbGlkX2lycV8yX2lvbW11KGlycSk7CiAJaWYgKCFpcnFfaW9tbXUpIHsKLQkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTMzMCw3ICszMzcsNyBAQAogCWluZGV4ID0gaXJxX2lvbW11LT5pcnRlX2luZGV4ICsgaXJxX2lvbW11LT5zdWJfaGFuZGxlOwogCiAJcmMgPSBxaV9mbHVzaF9pZWMoaW9tbXUsIGluZGV4LCBpcnFfaW9tbXUtPmlydGVfbWFzayk7Ci0Jc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTM2MywxMSArMzcwLDEyIEBACiAJc3RydWN0IGlydGUgKmlydGU7CiAJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKIAlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCWlycV9pb21tdSA9IHZhbGlkX2lycV8yX2lvbW11KGlycSk7CiAJaWYgKCFpcnFfaW9tbXUpIHsKLQkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTM3OCw3ICszODYsNyBAQAogCiAJaWYgKCFpcnFfaW9tbXUtPnN1Yl9oYW5kbGUpIHsKIAkJZm9yIChpID0gMDsgaSA8ICgxIDw8IGlycV9pb21tdS0+aXJ0ZV9tYXNrKTsgaSsrKQotCQkJc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nICopaXJ0ZSwgMCk7CisJCQlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgKikoaXJ0ZSArIGkpLCAwKTsKIAkJcmMgPSBxaV9mbHVzaF9pZWMoaW9tbXUsIGluZGV4LCBpcnFfaW9tbXUtPmlydGVfbWFzayk7CiAJfQogCkBAIC0zODcsNyArMzk1LDcgQEAKIAlpcnFfaW9tbXUtPnN1Yl9oYW5kbGUgPSAwOwogCWlycV9pb21tdS0+aXJ0ZV9tYXNrID0gMDsKIAotCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC00MzksMTIgKzQ0NywxMiBAQAogCXN0cnVjdCBwYWdlICpwYWdlczsKIAogCWlyX3RhYmxlID0gaW9tbXUtPmlyX3RhYmxlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlyX3RhYmxlKSwKLQkJCQkJICAgICBHRlBfS0VSTkVMKTsKKwkJCQkJICAgICBHRlBfQVRPTUlDKTsKIAogCWlmICghaW9tbXUtPmlyX3RhYmxlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXBhZ2VzID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIElOVFJfUkVNQVBfUEFHRV9PUkRFUik7CisJcGFnZXMgPSBhbGxvY19wYWdlcyhHRlBfQVRPTUlDIHwgX19HRlBfWkVSTywgSU5UUl9SRU1BUF9QQUdFX09SREVSKTsKIAogCWlmICghcGFnZXMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gYWxsb2NhdGUgcGFnZXMgb2Ygb3JkZXIgJWRcbiIsCkBAIC00NTksMTEgKzQ2Nyw1NSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogRGlzYWJsZSBJbnRlcnJ1cHQgUmVtYXBwaW5nLgorICovCitzdGF0aWMgdm9pZCBkaXNhYmxlX2ludHJfcmVtYXBwaW5nKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgc3RzOworCisJaWYgKCFlY2FwX2lyX3N1cHBvcnQoaW9tbXUtPmVjYXApKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKworCXN0cyA9IGRtYXJfcmVhZHEoaW9tbXUtPnJlZyArIERNQVJfR1NUU19SRUcpOworCWlmICghKHN0cyAmIERNQV9HU1RTX0lSRVMpKQorCQlnb3RvIGVuZDsKKworCWlvbW11LT5nY21kICY9IH5ETUFfR0NNRF9JUkU7CisJd3JpdGVsKGlvbW11LT5nY21kLCBpb21tdS0+cmVnICsgRE1BUl9HQ01EX1JFRyk7CisKKwlJT01NVV9XQUlUX09QKGlvbW11LCBETUFSX0dTVFNfUkVHLAorCQkgICAgICByZWFkbCwgIShzdHMgJiBETUFfR1NUU19JUkVTKSwgc3RzKTsKKworZW5kOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFncyk7Cit9CisKIGludCBfX2luaXQgZW5hYmxlX2ludHJfcmVtYXBwaW5nKGludCBlaW0pCiB7CiAJc3RydWN0IGRtYXJfZHJoZF91bml0ICpkcmhkOwogCWludCBzZXR1cCA9IDA7CiAKKwlmb3JfZWFjaF9kcmhkX3VuaXQoZHJoZCkgeworCQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZHJoZC0+aW9tbXU7CisKKwkJLyoKKwkJICogQ2xlYXIgcHJldmlvdXMgZmF1bHRzLgorCQkgKi8KKwkJZG1hcl9mYXVsdCgtMSwgaW9tbXUpOworCisJCS8qCisJCSAqIERpc2FibGUgaW50ciByZW1hcHBpbmcgYW5kIHF1ZXVlZCBpbnZhbGlkYXRpb24sIGlmIGFscmVhZHkKKwkJICogZW5hYmxlZCBwcmlvciB0byBPUyBoYW5kb3Zlci4KKwkJICovCisJCWRpc2FibGVfaW50cl9yZW1hcHBpbmcoaW9tbXUpOworCisJCWRtYXJfZGlzYWJsZV9xaShpb21tdSk7CisJfQorCiAJLyoKIAkgKiBjaGVjayBmb3IgdGhlIEludGVycnVwdC1yZW1hcHBpbmcgc3VwcG9ydAogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCmluZGV4IDkzZWFjMTQuLjI2N2RlODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTM1Miw1MyArMzUyLDYwIEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKiBwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBwY2lfZHJpdmVyICogZHJ2ID0gcGNpX2Rldi0+ZHJpdmVyOwotCWludCBpID0gMDsKKworCXBjaV9kZXYtPnN0YXRlX3NhdmVkID0gZmFsc2U7CiAKIAlpZiAoZHJ2ICYmIGRydi0+c3VzcGVuZCkgewogCQlwY2lfcG93ZXJfdCBwcmV2ID0gcGNpX2Rldi0+Y3VycmVudF9zdGF0ZTsKKwkJaW50IGVycm9yOwogCi0JCXBjaV9kZXYtPnN0YXRlX3NhdmVkID0gZmFsc2U7CisJCWVycm9yID0gZHJ2LT5zdXNwZW5kKHBjaV9kZXYsIHN0YXRlKTsKKwkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRydi0+c3VzcGVuZCwgZXJyb3IpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CiAKLQkJaSA9IGRydi0+c3VzcGVuZChwY2lfZGV2LCBzdGF0ZSk7Ci0JCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkcnYtPnN1c3BlbmQsIGkpOwotCQlpZiAoaSkKLQkJCXJldHVybiBpOwotCi0JCWlmIChwY2lfZGV2LT5zdGF0ZV9zYXZlZCkKLQkJCWdvdG8gRml4dXA7Ci0KLQkJaWYgKHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgIT0gUENJX0QwCisJCWlmICghcGNpX2Rldi0+c3RhdGVfc2F2ZWQgJiYgcGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDAKIAkJICAgICYmIHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgIT0gUENJX1VOS05PV04pIHsKIAkJCVdBUk5fT05DRShwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IHByZXYsCiAJCQkJIlBDSSBQTTogRGV2aWNlIHN0YXRlIG5vdCBzYXZlZCBieSAlcEZcbiIsCiAJCQkJZHJ2LT5zdXNwZW5kKTsKLQkJCWdvdG8gRml4dXA7CiAJCX0KIAl9CiAKLQlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKLQkvKgotCSAqIFRoaXMgaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBjb2RlIHdpdGggbGVnYWN5IFBNIHN1cHBvcnQuCi0JICovCi0JcGNpX3BtX3NldF91bmtub3duX3N0YXRlKHBjaV9kZXYpOwotCi0gRml4dXA6CiAJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfc3VzcGVuZCwgcGNpX2Rldik7CiAKLQlyZXR1cm4gaTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwY2lfbGVnYWN5X3N1c3BlbmRfbGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqIHBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHBjaV9kcml2ZXIgKiBkcnYgPSBwY2lfZGV2LT5kcml2ZXI7Ci0JaW50IGkgPSAwOwogCiAJaWYgKGRydiAmJiBkcnYtPnN1c3BlbmRfbGF0ZSkgewotCQlpID0gZHJ2LT5zdXNwZW5kX2xhdGUocGNpX2Rldiwgc3RhdGUpOwotCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZHJ2LT5zdXNwZW5kX2xhdGUsIGkpOworCQlwY2lfcG93ZXJfdCBwcmV2ID0gcGNpX2Rldi0+Y3VycmVudF9zdGF0ZTsKKwkJaW50IGVycm9yOworCisJCWVycm9yID0gZHJ2LT5zdXNwZW5kX2xhdGUocGNpX2Rldiwgc3RhdGUpOworCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZHJ2LT5zdXNwZW5kX2xhdGUsIGVycm9yKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCisJCWlmICghcGNpX2Rldi0+c3RhdGVfc2F2ZWQgJiYgcGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDAKKwkJICAgICYmIHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgIT0gUENJX1VOS05PV04pIHsKKwkJCVdBUk5fT05DRShwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IHByZXYsCisJCQkJIlBDSSBQTTogRGV2aWNlIHN0YXRlIG5vdCBzYXZlZCBieSAlcEZcbiIsCisJCQkJZHJ2LT5zdXNwZW5kX2xhdGUpOworCQkJcmV0dXJuIDA7CisJCX0KIAl9Ci0JcmV0dXJuIGk7CisKKwlpZiAoIXBjaV9kZXYtPnN0YXRlX3NhdmVkKQorCQlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKKworCXBjaV9wbV9zZXRfdW5rbm93bl9zdGF0ZShwY2lfZGV2KTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHBjaV9sZWdhY3lfcmVzdW1lX2Vhcmx5KHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTQyMyw2ICs0MzAsMjMgQEAKIAogLyogQXV4aWxpYXJ5IGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBuZXcgcG93ZXIgbWFuYWdlbWVudCBmcmFtZXdvcmsgKi8KIAorLyoqCisgKiBwY2lfcmVzdG9yZV9zdGFuZGFyZF9jb25maWcgLSByZXN0b3JlIHN0YW5kYXJkIGNvbmZpZyByZWdpc3RlcnMgb2YgUENJIGRldmljZQorICogQHBjaV9kZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlCisgKi8KK3N0YXRpYyBpbnQgcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQoreworCXBjaV91cGRhdGVfY3VycmVudF9zdGF0ZShwY2lfZGV2LCBQQ0lfVU5LTk9XTik7CisKKwlpZiAocGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDApIHsKKwkJaW50IGVycm9yID0gcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDApOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJfQorCisJcmV0dXJuIHBjaV9kZXYtPnN0YXRlX3NhdmVkID8gcGNpX3Jlc3RvcmVfc3RhdGUocGNpX2RldikgOiAwOworfQorCiBzdGF0aWMgdm9pZCBwY2lfcG1fZGVmYXVsdF9yZXN1bWVfbm9pcnEoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7CiAJcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnKHBjaV9kZXYpOwpAQCAtNDQzLDcgKzQ2Nyw2IEBACiAJLyogRGlzYWJsZSBub24tYnJpZGdlIGRldmljZXMgd2l0aG91dCBQTSBzdXBwb3J0ICovCiAJaWYgKCFwY2lfaXNfYnJpZGdlKHBjaV9kZXYpKQogCQlwY2lfZGlzYWJsZV9lbmFibGVkX2RldmljZShwY2lfZGV2KTsKLQlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKIH0KIAogc3RhdGljIGJvb2wgcGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKQEAgLTQ5MywxMyArNTE2LDEzIEBACiAJaWYgKHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQocGNpX2RldikpCiAJCXJldHVybiBwY2lfbGVnYWN5X3N1c3BlbmQoZGV2LCBQTVNHX1NVU1BFTkQpOwogCisJcGNpX2Rldi0+c3RhdGVfc2F2ZWQgPSBmYWxzZTsKKwogCWlmICghcG0pIHsKIAkJcGNpX3BtX2RlZmF1bHRfc3VzcGVuZChwY2lfZGV2KTsKIAkJZ290byBGaXh1cDsKIAl9CiAKLQlwY2lfZGV2LT5zdGF0ZV9zYXZlZCA9IGZhbHNlOwotCiAJaWYgKHBtLT5zdXNwZW5kKSB7CiAJCXBjaV9wb3dlcl90IHByZXYgPSBwY2lfZGV2LT5jdXJyZW50X3N0YXRlOwogCQlpbnQgZXJyb3I7CkBAIC01MDksMjQgKzUzMiwxNCBAQAogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7CiAKLQkJaWYgKHBjaV9kZXYtPnN0YXRlX3NhdmVkKQotCQkJZ290byBGaXh1cDsKLQotCQlpZiAocGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDAKKwkJaWYgKCFwY2lfZGV2LT5zdGF0ZV9zYXZlZCAmJiBwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IFBDSV9EMAogCQkgICAgJiYgcGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfVU5LTk9XTikgewogCQkJV0FSTl9PTkNFKHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgIT0gcHJldiwKIAkJCQkiUENJIFBNOiBTdGF0ZSBvZiBkZXZpY2Ugbm90IHNhdmVkIGJ5ICVwRlxuIiwKIAkJCQlwbS0+c3VzcGVuZCk7Ci0JCQlnb3RvIEZpeHVwOwogCQl9CiAJfQogCi0JaWYgKCFwY2lfZGV2LT5zdGF0ZV9zYXZlZCkgewotCQlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKLQkJaWYgKCFwY2lfaXNfYnJpZGdlKHBjaV9kZXYpKQotCQkJcGNpX3ByZXBhcmVfdG9fc2xlZXAocGNpX2Rldik7Ci0JfQotCiAgRml4dXA6CiAJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfc3VzcGVuZCwgcGNpX2Rldik7CiAKQEAgLTUzNiwyMSArNTQ5LDQzIEBACiBzdGF0aWMgaW50IHBjaV9wbV9zdXNwZW5kX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsKLQlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7Ci0JaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CiAKIAlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkKIAkJcmV0dXJuIHBjaV9sZWdhY3lfc3VzcGVuZF9sYXRlKGRldiwgUE1TR19TVVNQRU5EKTsKIAotCWlmIChkcnYgJiYgZHJ2LT5wbSAmJiBkcnYtPnBtLT5zdXNwZW5kX25vaXJxKSB7Ci0JCWVycm9yID0gZHJ2LT5wbS0+c3VzcGVuZF9ub2lycShkZXYpOwotCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZHJ2LT5wbS0+c3VzcGVuZF9ub2lycSwgZXJyb3IpOworCWlmICghcG0pIHsKKwkJcGNpX3NhdmVfc3RhdGUocGNpX2Rldik7CisJCXJldHVybiAwOwogCX0KIAotCWlmICghZXJyb3IpCi0JCXBjaV9wbV9zZXRfdW5rbm93bl9zdGF0ZShwY2lfZGV2KTsKKwlpZiAocG0tPnN1c3BlbmRfbm9pcnEpIHsKKwkJcGNpX3Bvd2VyX3QgcHJldiA9IHBjaV9kZXYtPmN1cnJlbnRfc3RhdGU7CisJCWludCBlcnJvcjsKIAotCXJldHVybiBlcnJvcjsKKwkJZXJyb3IgPSBwbS0+c3VzcGVuZF9ub2lycShkZXYpOworCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQocG0tPnN1c3BlbmRfbm9pcnEsIGVycm9yKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCisJCWlmICghcGNpX2Rldi0+c3RhdGVfc2F2ZWQgJiYgcGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDAKKwkJICAgICYmIHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgIT0gUENJX1VOS05PV04pIHsKKwkJCVdBUk5fT05DRShwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IHByZXYsCisJCQkJIlBDSSBQTTogU3RhdGUgb2YgZGV2aWNlIG5vdCBzYXZlZCBieSAlcEZcbiIsCisJCQkJcG0tPnN1c3BlbmRfbm9pcnEpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAoIXBjaV9kZXYtPnN0YXRlX3NhdmVkKSB7CisJCXBjaV9zYXZlX3N0YXRlKHBjaV9kZXYpOworCQlpZiAoIXBjaV9pc19icmlkZ2UocGNpX2RldikpCisJCQlwY2lfcHJlcGFyZV90b19zbGVlcChwY2lfZGV2KTsKKwl9CisKKwlwY2lfcG1fc2V0X3Vua25vd25fc3RhdGUocGNpX2Rldik7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwY2lfcG1fcmVzdW1lX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTYxNywxMyArNjUyLDEzIEBACiAJaWYgKHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQocGNpX2RldikpCiAJCXJldHVybiBwY2lfbGVnYWN5X3N1c3BlbmQoZGV2LCBQTVNHX0ZSRUVaRSk7CiAKKwlwY2lfZGV2LT5zdGF0ZV9zYXZlZCA9IGZhbHNlOworCiAJaWYgKCFwbSkgewogCQlwY2lfcG1fZGVmYXVsdF9zdXNwZW5kKHBjaV9kZXYpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlwY2lfZGV2LT5zdGF0ZV9zYXZlZCA9IGZhbHNlOwotCiAJaWYgKHBtLT5mcmVlemUpIHsKIAkJaW50IGVycm9yOwogCkBAIC02MzMsOSArNjY4LDYgQEAKIAkJCXJldHVybiBlcnJvcjsKIAl9CiAKLQlpZiAoIXBjaV9kZXYtPnN0YXRlX3NhdmVkKQotCQlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKLQogCXJldHVybiAwOwogfQogCkBAIC02NDMsMjAgKzY3NSwyNSBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKLQlpbnQgZXJyb3IgPSAwOwogCiAJaWYgKHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQocGNpX2RldikpCiAJCXJldHVybiBwY2lfbGVnYWN5X3N1c3BlbmRfbGF0ZShkZXYsIFBNU0dfRlJFRVpFKTsKIAogCWlmIChkcnYgJiYgZHJ2LT5wbSAmJiBkcnYtPnBtLT5mcmVlemVfbm9pcnEpIHsKKwkJaW50IGVycm9yOworCiAJCWVycm9yID0gZHJ2LT5wbS0+ZnJlZXplX25vaXJxKGRldik7CiAJCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkcnYtPnBtLT5mcmVlemVfbm9pcnEsIGVycm9yKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOwogCX0KIAotCWlmICghZXJyb3IpCi0JCXBjaV9wbV9zZXRfdW5rbm93bl9zdGF0ZShwY2lfZGV2KTsKKwlpZiAoIXBjaV9kZXYtPnN0YXRlX3NhdmVkKQorCQlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKIAotCXJldHVybiBlcnJvcjsKKwlwY2lfcG1fc2V0X3Vua25vd25fc3RhdGUocGNpX2Rldik7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwY2lfcG1fdGhhd19ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC02OTksNDYgKzczNiw1NiBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKLQlpbnQgZXJyb3IgPSAwOwogCiAJaWYgKHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQocGNpX2RldikpCiAJCXJldHVybiBwY2lfbGVnYWN5X3N1c3BlbmQoZGV2LCBQTVNHX0hJQkVSTkFURSk7CiAKKwlwY2lfZGV2LT5zdGF0ZV9zYXZlZCA9IGZhbHNlOworCiAJaWYgKCFwbSkgewogCQlwY2lfcG1fZGVmYXVsdF9zdXNwZW5kKHBjaV9kZXYpOwogCQlnb3RvIEZpeHVwOwogCX0KIAotCXBjaV9kZXYtPnN0YXRlX3NhdmVkID0gZmFsc2U7Ci0KIAlpZiAocG0tPnBvd2Vyb2ZmKSB7CisJCWludCBlcnJvcjsKKwogCQllcnJvciA9IHBtLT5wb3dlcm9mZihkZXYpOwogCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQocG0tPnBvd2Vyb2ZmLCBlcnJvcik7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwl9CisKKyBGaXh1cDoKKwlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9zdXNwZW5kLCBwY2lfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaV9wbV9wb3dlcm9mZl9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOworCisJaWYgKHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQodG9fcGNpX2RldihkZXYpKSkKKwkJcmV0dXJuIHBjaV9sZWdhY3lfc3VzcGVuZF9sYXRlKGRldiwgUE1TR19ISUJFUk5BVEUpOworCisJaWYgKCFkcnYgfHwgIWRydi0+cG0pCisJCXJldHVybiAwOworCisJaWYgKGRydi0+cG0tPnBvd2Vyb2ZmX25vaXJxKSB7CisJCWludCBlcnJvcjsKKworCQllcnJvciA9IGRydi0+cG0tPnBvd2Vyb2ZmX25vaXJxKGRldik7CisJCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkcnYtPnBtLT5wb3dlcm9mZl9ub2lycSwgZXJyb3IpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CiAJfQogCiAJaWYgKCFwY2lfZGV2LT5zdGF0ZV9zYXZlZCAmJiAhcGNpX2lzX2JyaWRnZShwY2lfZGV2KSkKIAkJcGNpX3ByZXBhcmVfdG9fc2xlZXAocGNpX2Rldik7CiAKLSBGaXh1cDoKLQlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9zdXNwZW5kLCBwY2lfZGV2KTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIGludCBwY2lfcG1fcG93ZXJvZmZfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKLQlpbnQgZXJyb3IgPSAwOwotCi0JaWYgKHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQodG9fcGNpX2RldihkZXYpKSkKLQkJcmV0dXJuIHBjaV9sZWdhY3lfc3VzcGVuZF9sYXRlKGRldiwgUE1TR19ISUJFUk5BVEUpOwotCi0JaWYgKGRydiAmJiBkcnYtPnBtICYmIGRydi0+cG0tPnBvd2Vyb2ZmX25vaXJxKSB7Ci0JCWVycm9yID0gZHJ2LT5wbS0+cG93ZXJvZmZfbm9pcnEoZGV2KTsKLQkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRydi0+cG0tPnBvd2Vyb2ZmX25vaXJxLCBlcnJvcik7Ci0JfQotCi0JcmV0dXJuIGVycm9yOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHBjaV9wbV9yZXN0b3JlX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggNmQ2MTIwMC4uMDE5NTA2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTQyNiw3ICs0MjYsNiBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlbiBQQ0kgZGV2aWNlCiAgKiBAZGV2OiBQQ0kgZGV2aWNlIHRvIGhhbmRsZS4KICAqIEBzdGF0ZTogUENJIHBvd2VyIHN0YXRlIChEMCwgRDEsIEQyLCBEM2hvdCkgdG8gcHV0IHRoZSBkZXZpY2UgaW50by4KLSAqIEB3YWl0OiBJZiAndHJ1ZScsIHdhaXQgZm9yIHRoZSBkZXZpY2UgdG8gY2hhbmdlIGl0cyBwb3dlciBzdGF0ZQogICoKICAqIFJFVFVSTiBWQUxVRToKICAqIC1FSU5WQUwgaWYgdGhlIHJlcXVlc3RlZCBzdGF0ZSBpcyBpbnZhbGlkLgpAQCAtNDM1LDEyICs0MzQsMTUgQEAKICAqIDAgaWYgZGV2aWNlIGFscmVhZHkgaXMgaW4gdGhlIHJlcXVlc3RlZCBzdGF0ZS4KICAqIDAgaWYgZGV2aWNlJ3MgcG93ZXIgc3RhdGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNoYW5nZWQuCiAgKi8KLXN0YXRpYyBpbnQKLXBjaV9yYXdfc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlLCBib29sIHdhaXQpCitzdGF0aWMgaW50IHBjaV9yYXdfc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlKQogewogCXUxNiBwbWNzcjsKIAlib29sIG5lZWRfcmVzdG9yZSA9IGZhbHNlOwogCisJLyogQ2hlY2sgaWYgd2UncmUgYWxyZWFkeSB0aGVyZSAqLworCWlmIChkZXYtPmN1cnJlbnRfc3RhdGUgPT0gc3RhdGUpCisJCXJldHVybiAwOworCiAJaWYgKCFkZXYtPnBtX2NhcCkKIAkJcmV0dXJuIC1FSU87CiAKQEAgLTQ1MSwxMCArNDUzLDcgQEAKIAkgKiBDYW4gZW50ZXIgRDAgZnJvbSBhbnkgc3RhdGUsIGJ1dCBpZiB3ZSBjYW4gb25seSBnbyBkZWVwZXIgCiAJICogdG8gc2xlZXAgaWYgd2UncmUgYWxyZWFkeSBpbiBhIGxvdyBwb3dlciBzdGF0ZQogCSAqLwotCWlmIChkZXYtPmN1cnJlbnRfc3RhdGUgPT0gc3RhdGUpIHsKLQkJLyogd2UncmUgYWxyZWFkeSB0aGVyZSAqLwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKHN0YXRlICE9IFBDSV9EMCAmJiBkZXYtPmN1cnJlbnRfc3RhdGUgPD0gUENJX0QzY29sZAorCWlmIChzdGF0ZSAhPSBQQ0lfRDAgJiYgZGV2LT5jdXJyZW50X3N0YXRlIDw9IFBDSV9EM2NvbGQKIAkgICAgJiYgZGV2LT5jdXJyZW50X3N0YXRlID4gc3RhdGUpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJpbnZhbGlkIHBvd2VyIHRyYW5zaXRpb24gIgogCQkJIihmcm9tIHN0YXRlICVkIHRvICVkKVxuIiwgZGV2LT5jdXJyZW50X3N0YXRlLCBzdGF0ZSk7CkBAIC00ODEsMTAgKzQ4MCw4IEBACiAJCWJyZWFrOwogCWNhc2UgUENJX1VOS05PV046IC8qIEJvb3QtdXAgKi8KIAkJaWYgKChwbWNzciAmIFBDSV9QTV9DVFJMX1NUQVRFX01BU0spID09IFBDSV9EM2hvdAotCQkgJiYgIShwbWNzciAmIFBDSV9QTV9DVFJMX05PX1NPRlRfUkVTRVQpKSB7CisJCSAmJiAhKHBtY3NyICYgUENJX1BNX0NUUkxfTk9fU09GVF9SRVNFVCkpCiAJCQluZWVkX3Jlc3RvcmUgPSB0cnVlOwotCQkJd2FpdCA9IHRydWU7Ci0JCX0KIAkJLyogRmFsbC10aHJvdWdoOiBmb3JjZSB0byBEMCAqLwogCWRlZmF1bHQ6CiAJCXBtY3NyID0gMDsKQEAgLTQ5NCw5ICs0OTEsNiBAQAogCS8qIGVudGVyIHNwZWNpZmllZCBzdGF0ZSAqLwogCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIGRldi0+cG1fY2FwICsgUENJX1BNX0NUUkwsIHBtY3NyKTsKIAotCWlmICghd2FpdCkKLQkJcmV0dXJuIDA7Ci0KIAkvKiBNYW5kYXRvcnkgcG93ZXIgbWFuYWdlbWVudCB0cmFuc2l0aW9uIGRlbGF5cyAqLwogCS8qIHNlZSBQQ0kgUE0gMS4xIDUuNi4xIHRhYmxlIDE4ICovCiAJaWYgKHN0YXRlID09IFBDSV9EM2hvdCB8fCBkZXYtPmN1cnJlbnRfc3RhdGUgPT0gUENJX0QzaG90KQpAQCAtNTIxLDcgKzUxNSw3IEBACiAJaWYgKG5lZWRfcmVzdG9yZSkKIAkJcGNpX3Jlc3RvcmVfYmFycyhkZXYpOwogCi0JaWYgKHdhaXQgJiYgZGV2LT5idXMtPnNlbGYpCisJaWYgKGRldi0+YnVzLT5zZWxmKQogCQlwY2llX2FzcG1fcG1fc3RhdGVfY2hhbmdlKGRldi0+YnVzLT5zZWxmKTsKIAogCXJldHVybiAwOwpAQCAtNTQ2LDYgKzU0MCw1MyBAQAogfQogCiAvKioKKyAqIHBjaV9wbGF0Zm9ybV9wb3dlcl90cmFuc2l0aW9uIC0gVXNlIHBsYXRmb3JtIHRvIGNoYW5nZSBkZXZpY2UgcG93ZXIgc3RhdGUKKyAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlLgorICogQHN0YXRlOiBTdGF0ZSB0byBwdXQgdGhlIGRldmljZSBpbnRvLgorICovCitzdGF0aWMgaW50IHBjaV9wbGF0Zm9ybV9wb3dlcl90cmFuc2l0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlKQoreworCWludCBlcnJvcjsKKworCWlmIChwbGF0Zm9ybV9wY2lfcG93ZXJfbWFuYWdlYWJsZShkZXYpKSB7CisJCWVycm9yID0gcGxhdGZvcm1fcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIHN0YXRlKTsKKwkJaWYgKCFlcnJvcikKKwkJCXBjaV91cGRhdGVfY3VycmVudF9zdGF0ZShkZXYsIHN0YXRlKTsKKwl9IGVsc2UgeworCQllcnJvciA9IC1FTk9ERVY7CisJCS8qIEZhbGwgYmFjayB0byBQQ0lfRDAgaWYgbmF0aXZlIFBNIGlzIG5vdCBzdXBwb3J0ZWQgKi8KKwkJcGNpX3VwZGF0ZV9jdXJyZW50X3N0YXRlKGRldiwgUENJX0QwKTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogX19wY2lfc3RhcnRfcG93ZXJfdHJhbnNpdGlvbiAtIFN0YXJ0IHBvd2VyIHRyYW5zaXRpb24gb2YgYSBQQ0kgZGV2aWNlCisgKiBAZGV2OiBQQ0kgZGV2aWNlIHRvIGhhbmRsZS4KKyAqIEBzdGF0ZTogU3RhdGUgdG8gcHV0IHRoZSBkZXZpY2UgaW50by4KKyAqLworc3RhdGljIHZvaWQgX19wY2lfc3RhcnRfcG93ZXJfdHJhbnNpdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSkKK3sKKwlpZiAoc3RhdGUgPT0gUENJX0QwKQorCQlwY2lfcGxhdGZvcm1fcG93ZXJfdHJhbnNpdGlvbihkZXYsIFBDSV9EMCk7Cit9CisKKy8qKgorICogX19wY2lfY29tcGxldGVfcG93ZXJfdHJhbnNpdGlvbiAtIENvbXBsZXRlIHBvd2VyIHRyYW5zaXRpb24gb2YgYSBQQ0kgZGV2aWNlCisgKiBAZGV2OiBQQ0kgZGV2aWNlIHRvIGhhbmRsZS4KKyAqIEBzdGF0ZTogU3RhdGUgdG8gcHV0IHRoZSBkZXZpY2UgaW50by4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IGRldmljZSBkcml2ZXJzLgorICovCitpbnQgX19wY2lfY29tcGxldGVfcG93ZXJfdHJhbnNpdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gc3RhdGUgPiBQQ0lfRDAgPworCQkJcGNpX3BsYXRmb3JtX3Bvd2VyX3RyYW5zaXRpb24oZGV2LCBzdGF0ZSkgOiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19wY2lfY29tcGxldGVfcG93ZXJfdHJhbnNpdGlvbik7CisKKy8qKgogICogcGNpX3NldF9wb3dlcl9zdGF0ZSAtIFNldCB0aGUgcG93ZXIgc3RhdGUgb2YgYSBQQ0kgZGV2aWNlCiAgKiBAZGV2OiBQQ0kgZGV2aWNlIHRvIGhhbmRsZS4KICAqIEBzdGF0ZTogUENJIHBvd2VyIHN0YXRlIChEMCwgRDEsIEQyLCBEM2hvdCkgdG8gcHV0IHRoZSBkZXZpY2UgaW50by4KQEAgLTU3NywzMCArNjE4LDIxIEBACiAJCSAqLwogCQlyZXR1cm4gMDsKIAotCWlmIChzdGF0ZSA9PSBQQ0lfRDAgJiYgcGxhdGZvcm1fcGNpX3Bvd2VyX21hbmFnZWFibGUoZGV2KSkgewotCQkvKgotCQkgKiBBbGxvdyB0aGUgcGxhdGZvcm0gdG8gY2hhbmdlIHRoZSBzdGF0ZSwgZm9yIGV4YW1wbGUgdmlhIEFDUEkKLQkJICogX1BSMCwgX1BTMCBhbmQgc29tZSBzdWNoLCBidXQgZG8gbm90IHRydXN0IGl0LgotCQkgKi8KLQkJaW50IHJldCA9IHBsYXRmb3JtX3BjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBQQ0lfRDApOwotCQlpZiAoIXJldCkKLQkJCXBjaV91cGRhdGVfY3VycmVudF9zdGF0ZShkZXYsIFBDSV9EMCk7Ci0JfQorCS8qIENoZWNrIGlmIHdlJ3JlIGFscmVhZHkgdGhlcmUgKi8KKwlpZiAoZGV2LT5jdXJyZW50X3N0YXRlID09IHN0YXRlKQorCQlyZXR1cm4gMDsKKworCV9fcGNpX3N0YXJ0X3Bvd2VyX3RyYW5zaXRpb24oZGV2LCBzdGF0ZSk7CisKIAkvKiBUaGlzIGRldmljZSBpcyBxdWlya2VkIG5vdCB0byBiZSBwdXQgaW50byBEMywgc28KIAkgICBkb24ndCBwdXQgaXQgaW4gRDMgKi8KIAlpZiAoc3RhdGUgPT0gUENJX0QzaG90ICYmIChkZXYtPmRldl9mbGFncyAmIFBDSV9ERVZfRkxBR1NfTk9fRDMpKQogCQlyZXR1cm4gMDsKIAotCWVycm9yID0gcGNpX3Jhd19zZXRfcG93ZXJfc3RhdGUoZGV2LCBzdGF0ZSwgdHJ1ZSk7CisJZXJyb3IgPSBwY2lfcmF3X3NldF9wb3dlcl9zdGF0ZShkZXYsIHN0YXRlKTsKIAotCWlmIChzdGF0ZSA+IFBDSV9EMCAmJiBwbGF0Zm9ybV9wY2lfcG93ZXJfbWFuYWdlYWJsZShkZXYpKSB7Ci0JCS8qIEFsbG93IHRoZSBwbGF0Zm9ybSB0byBmaW5hbGl6ZSB0aGUgdHJhbnNpdGlvbiAqLwotCQlpbnQgcmV0ID0gcGxhdGZvcm1fcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIHN0YXRlKTsKLQkJaWYgKCFyZXQpIHsKLQkJCXBjaV91cGRhdGVfY3VycmVudF9zdGF0ZShkZXYsIHN0YXRlKTsKLQkJCWVycm9yID0gMDsKLQkJfQotCX0KKwlpZiAoIV9fcGNpX2NvbXBsZXRlX3Bvd2VyX3RyYW5zaXRpb24oZGV2LCBzdGF0ZSkpCisJCWVycm9yID0gMDsKIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTEyMzEsNyArMTI2Myw3IEBACiAJaWYgKHRhcmdldF9zdGF0ZSA9PSBQQ0lfUE9XRVJfRVJST1IpCiAJCXJldHVybiAtRUlPOwogCi0JcGNpX2VuYWJsZV93YWtlKGRldiwgdGFyZ2V0X3N0YXRlLCB0cnVlKTsKKwlwY2lfZW5hYmxlX3dha2UoZGV2LCB0YXJnZXRfc3RhdGUsIGRldmljZV9tYXlfd2FrZXVwKCZkZXYtPmRldikpOwogCiAJZXJyb3IgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgdGFyZ2V0X3N0YXRlKTsKIApAQCAtMTM4MSw1MCArMTQxMyw2IEBACiB9CiAKIC8qKgotICogcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnIC0gcmVzdG9yZSBzdGFuZGFyZCBjb25maWcgcmVnaXN0ZXJzIG9mIFBDSSBkZXZpY2UKLSAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlCi0gKgotICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGRldmljZSdzIGNvbmZpZ3VyYXRpb24gc3BhY2UgaXMgYWNjZXNzaWJsZS4KLSAqIElmIHRoZSBkZXZpY2UgbmVlZHMgdG8gYmUgcG93ZXJlZCB1cCwgdGhlIGZ1bmN0aW9uIHdpbGwgd2FpdCBmb3IgaXQgdG8KLSAqIGNoYW5nZSB0aGUgc3RhdGUuCi0gKi8KLWludCBwY2lfcmVzdG9yZV9zdGFuZGFyZF9jb25maWcoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlwY2lfcG93ZXJfdCBwcmV2X3N0YXRlOwotCWludCBlcnJvcjsKLQotCXBjaV91cGRhdGVfY3VycmVudF9zdGF0ZShkZXYsIFBDSV9EMCk7Ci0KLQlwcmV2X3N0YXRlID0gZGV2LT5jdXJyZW50X3N0YXRlOwotCWlmIChwcmV2X3N0YXRlID09IFBDSV9EMCkKLQkJZ290byBSZXN0b3JlOwotCi0JZXJyb3IgPSBwY2lfcmF3X3NldF9wb3dlcl9zdGF0ZShkZXYsIFBDSV9EMCwgZmFsc2UpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JLyoKLQkgKiBUaGlzIGFzc3VtZXMgdGhhdCB3ZSB3b24ndCBnZXQgYSBidXMgaW4gQjIgb3IgQjMgZnJvbSB0aGUgQklPUywgYnV0Ci0JICogd2UndmUgbWFkZSB0aGlzIGFzc3VtcHRpb24gZm9yZXZlciBhbmQgaXQgYXBwZWFycyB0byBiZSB1bml2ZXJzYWxseQotCSAqIHNhdGlzZmllZC4KLQkgKi8KLQlzd2l0Y2gocHJldl9zdGF0ZSkgewotCWNhc2UgUENJX0QzY29sZDoKLQljYXNlIFBDSV9EM2hvdDoKLQkJbWRlbGF5KHBjaV9wbV9kM19kZWxheSk7Ci0JCWJyZWFrOwotCWNhc2UgUENJX0QyOgotCQl1ZGVsYXkoUENJX1BNX0QyX0RFTEFZKTsKLQkJYnJlYWs7Ci0JfQotCi0JcGNpX3VwZGF0ZV9jdXJyZW50X3N0YXRlKGRldiwgUENJX0QwKTsKLQotIFJlc3RvcmU6Ci0JcmV0dXJuIGRldi0+c3RhdGVfc2F2ZWQgPyBwY2lfcmVzdG9yZV9zdGF0ZShkZXYpIDogMDsKLX0KLQotLyoqCiAgKiBwY2lfZW5hYmxlX2FyaSAtIGVuYWJsZSBBUkkgZm9yd2FyZGluZyBpZiBoYXJkd2FyZSBzdXBwb3J0IGl0CiAgKiBAZGV2OiB0aGUgUENJIGRldmljZQogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oCmluZGV4IDA3YzBhYTUuLjE0OWZmZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5oCkBAIC00OSw3ICs0OSw2IEBACiBleHRlcm4gdm9pZCBwY2lfcG1faW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGV4dGVybiB2b2lkIHBsYXRmb3JtX3BjaV93YWtldXBfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGV4dGVybiB2b2lkIHBjaV9hbGxvY2F0ZV9jYXBfc2F2ZV9idWZmZXJzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwotZXh0ZXJuIGludCBwY2lfcmVzdG9yZV9zdGFuZGFyZF9jb25maWcoc3RydWN0IHBjaV9kZXYgKmRldik7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBwY2lfaXNfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYwppbmRleCBkNjNmMjZlLi5iYTFmNzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYwpAQCAtOTg3LDcgKzk4Nyw2IEBACiAJcHJvYy0+d3JpdGVfcHJvYyA9IHdyaXRlZnVuYzsKIAlwcm9jLT5yZWFkX3Byb2MgPSByZWFkZnVuYzsKIAlwcm9jLT5kYXRhID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwotCXByb2MtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJcHJvYy0+dWlkID0gYXN1c191aWQ7CiAJcHJvYy0+Z2lkID0gYXN1c19naWQ7CiAJcmV0dXJuIDA7CkBAIC0xMDIwLDcgKzEwMTksNiBAQAogCWlmIChwcm9jKSB7CiAJCXByb2MtPnJlYWRfcHJvYyA9IHByb2NfcmVhZF9pbmZvOwogCQlwcm9jLT5kYXRhID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwotCQlwcm9jLT5vd25lciA9IFRISVNfTU9EVUxFOwogCQlwcm9jLT51aWQgPSBhc3VzX3VpZDsKIAkJcHJvYy0+Z2lkID0gYXN1c19naWQ7CiAJfSBlbHNlIHsKQEAgLTE0MzYsNyArMTQzNCw2IEBACiAJCXByaW50ayhLRVJOX0VSUiAiQXN1cyBBQ1BJOiBVbmFibGUgdG8gY3JlYXRlIC9wcm9jIGVudHJ5XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWFzdXNfcHJvY19kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlyZXN1bHQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFzdXNfaG90a19kcml2ZXIpOwogCWlmIChyZXN1bHQgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYwppbmRleCAxNmUxMWMyLi5hZjlmNDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCWRhX251bV90b2tlbnMgKz0gdG9rZW5zOwogfQogCi1zdGF0aWMgdm9pZCBmaW5kX3Rva2Vucyhjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqZG0pCitzdGF0aWMgdm9pZCBmaW5kX3Rva2Vucyhjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqZG0sIHZvaWQgKmR1bW15KQogewogCXN3aXRjaCAoZG0tPnR5cGUpIHsKIAljYXNlIDB4ZDQ6IC8qIEluZGV4ZWQgSU8gKi8KQEAgLTM1Niw3ICszNTYsNyBAQAogCWlmICghZG1pX2NoZWNrX3N5c3RlbShkZWxsX2RldmljZV90YWJsZSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JZG1pX3dhbGsoZmluZF90b2tlbnMpOworCWRtaV93YWxrKGZpbmRfdG9rZW5zLCBOVUxMKTsKIAogCWlmICghZGFfdG9rZW5zKSAgewogCQlwcmludGsoS0VSTl9JTkZPICJkZWxsLWxhcHRvcDogVW5hYmxlIHRvIGZpbmQgZG1pIHRva2Vuc1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKaW5kZXggZDI0MzMyMC4uM2RhZDI3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwpAQCAtNjk5Miw3ICs2OTkyLDYgQEAKIAkJCXJldCA9IC1FTk9ERVY7CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KLQkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCWVudHJ5LT5kYXRhID0gaWJtOwogCQllbnRyeS0+cmVhZF9wcm9jID0gJmRpc3BhdGNoX3Byb2Nmc19yZWFkOwogCQlpZiAoaWJtLT53cml0ZSkKQEAgLTc0MDUsNyArNzQwNCw2IEBACiAJCXRoaW5rcGFkX2FjcGlfbW9kdWxlX2V4aXQoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCXByb2NfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0cGFjcGlfcGRyaXZlcik7CiAJaWYgKHJldCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwppbmRleCA0MGU2MGZjLi45ZjE4NzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwpAQCAtNjc5LDggKzY3OSw2IEBACiAJCQkJCSAgICAgIHRvc2hpYmFfcHJvY19kaXIsCiAJCQkJCSAgICAgIChyZWFkX3Byb2NfdCAqKSBkaXNwYXRjaF9yZWFkLAogCQkJCQkgICAgICBpdGVtKTsKLQkJaWYgKHByb2MpCi0JCQlwcm9jLT5vd25lciA9IFRISVNfTU9EVUxFOwogCQlpZiAocHJvYyAmJiBpdGVtLT53cml0ZV9mdW5jKQogCQkJcHJvYy0+d3JpdGVfcHJvYyA9ICh3cml0ZV9wcm9jX3QgKikgZGlzcGF0Y2hfd3JpdGU7CiAJfQpAQCAtNzcyLDcgKzc3MCw2IEBACiAJCXRvc2hpYmFfYWNwaV9leGl0KCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0gZWxzZSB7Ci0JCXRvc2hpYmFfcHJvY19kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCXN0YXR1cyA9IGFkZF9kZXZpY2UoKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQl0b3NoaWJhX2FjcGlfZXhpdCgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wczMvcHMzYXYuYyBiL2RyaXZlcnMvcHMzL3BzM2F2LmMKaW5kZXggNTMyNDk3OC4uMjM1ZTg3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wczMvcHMzYXYuYworKysgYi9kcml2ZXJzL3BzMy9wczNhdi5jCkBAIC04MzgsNyArODM4LDcgQEAKIH0KIAogLyogc2V0IG1vZGUgdXNpbmcgaWQgKi8KLWludCBwczNhdl9zZXRfdmlkZW9fbW9kZSh1MzIgaWQpCitpbnQgcHMzYXZfc2V0X3ZpZGVvX21vZGUoaW50IGlkKQogewogCWludCBzaXplOwogCXUzMiBvcHRpb247CkBAIC05NDAsNyArOTQwLDcgQEAKIHN0YXRpYyBpbnQgcHMzYXZfcHJvYmUoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2KQogewogCWludCByZXM7Ci0JdTMyIGlkOworCWludCBpZDsKIAogCWRldl9kYmcoJmRldi0+Y29yZSwgIiAtPiAlczolZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAlkZXZfZGJnKCZkZXYtPmNvcmUsICIgIHRpbWVvdXQ9JWRcbiIsIHRpbWVvdXQpOwpAQCAtOTYyLDggKzk2MiwxMCBAQAogCWluaXRfY29tcGxldGlvbigmcHMzYXYtPmRvbmUpOwogCWNvbXBsZXRlKCZwczNhdi0+ZG9uZSk7CiAJcHMzYXYtPndxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoInBzM2F2ZCIpOwotCWlmICghcHMzYXYtPndxKQorCWlmICghcHMzYXYtPndxKSB7CisJCXJlcyA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDsKKwl9CiAKIAlzd2l0Y2ggKHBzM19vc19hcmVhX2dldF9hdl9tdWx0aV9vdXQoKSkgewogCWNhc2UgUFMzX1BBUkFNX0FWX01VTFRJX09VVF9OVFNDOgpAQCAtOTk0LDYgKzk5NiwxMiBAQAogCQlzYWZlX21vZGUgPSAxOwogI2VuZGlmIC8qIENPTkZJR19GQiAqLwogCWlkID0gcHMzYXZfYXV0b192aWRlb21vZGUoJnBzM2F2LT5hdl9od19jb25mKTsKKwlpZiAoaWQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgaWQgOiVkXG4iLCBfX2Z1bmNfXywgaWQpOworCQlyZXMgPSAtRUlOVkFMOworCQlnb3RvIGZhaWw7CisJfQorCiAJc2FmZV9tb2RlID0gMDsKIAogCW11dGV4X2xvY2soJnBzM2F2LT5tdXRleCk7CkBAIC0xMDA3LDcgKzEwMTUsNyBAQAogZmFpbDoKIAlrZnJlZShwczNhdik7CiAJcHMzYXYgPSBOVUxMOwotCXJldHVybiAtRU5PTUVNOworCXJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBpbnQgcHMzYXZfcmVtb3ZlKHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcHJvYy5jCmluZGV4IDBjNjI1N2EuLmMwODZmYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXByb2MuYwpAQCAtMTA1LDE0ICsxMDUsOCBAQAogCiB2b2lkIHJ0Y19wcm9jX2FkZF9kZXZpY2Uoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YykKIHsKLQlpZiAocnRjLT5pZCA9PSAwKSB7Ci0JCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50OwotCi0JCWVudCA9IHByb2NfY3JlYXRlX2RhdGEoImRyaXZlci9ydGMiLCAwLCBOVUxMLAotCQkJCSAgICAgICAmcnRjX3Byb2NfZm9wcywgcnRjKTsKLQkJaWYgKGVudCkKLQkJCWVudC0+b3duZXIgPSBydGMtPm93bmVyOwotCX0KKwlpZiAocnRjLT5pZCA9PSAwKQorCQlwcm9jX2NyZWF0ZV9kYXRhKCJkcml2ZXIvcnRjIiwgMCwgTlVMTCwgJnJ0Y19wcm9jX2ZvcHMsIHJ0Yyk7CiB9CiAKIHZvaWQgcnRjX3Byb2NfZGVsX2RldmljZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCmluZGV4IDIwODBiYTYuLjY1NGRhYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKQEAgLTMyMCw3ICszMjAsNiBAQAogCWRhc2RfcHJvY19yb290X2VudHJ5ID0gcHJvY19ta2RpcigiZGFzZCIsIE5VTEwpOwogCWlmICghZGFzZF9wcm9jX3Jvb3RfZW50cnkpCiAJCWdvdG8gb3V0X25vZGFzZDsKLQlkYXNkX3Byb2Nfcm9vdF9lbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlkYXNkX2RldmljZXNfZW50cnkgPSBwcm9jX2NyZWF0ZSgiZGV2aWNlcyIsCiAJCQkJCSBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJCSBkYXNkX3Byb2Nfcm9vdF9lbnRyeSwKQEAgLTMzNCw3ICszMzMsNiBAQAogCQlnb3RvIG91dF9ub3N0YXRpc3RpY3M7CiAJZGFzZF9zdGF0aXN0aWNzX2VudHJ5LT5yZWFkX3Byb2MgPSBkYXNkX3N0YXRpc3RpY3NfcmVhZDsKIAlkYXNkX3N0YXRpc3RpY3NfZW50cnktPndyaXRlX3Byb2MgPSBkYXNkX3N0YXRpc3RpY3Nfd3JpdGU7Ci0JZGFzZF9zdGF0aXN0aWNzX2VudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCXJldHVybiAwOwogCiAgb3V0X25vc3RhdGlzdGljczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYwppbmRleCAwOTliNTQ1Li5iMTM0ODEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9kZXZpbmZvLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZGV2aW5mby5jCkBAIC01OTYsOCArNTk2LDYgQEAKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9Ci0KLQlwLT5vd25lciA9IFRISVNfTU9EVUxFOwogI2VuZGlmIC8qIENPTkZJR19TQ1NJX1BST0NfRlMgKi8KIAogIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3Byb2MuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3Byb2MuYwppbmRleCA4MmY3YjJkLi43N2ZiZGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9wcm9jLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfcHJvYy5jCkBAIC0xMTUsOCArMTE1LDYgQEAKICAgICAgICAgCWlmICghc2h0LT5wcm9jX2RpcikKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHByb2NfbWtkaXIgZmFpbGVkIGZvciAlc1xuIiwKIAkJCSAgICAgICBfX2Z1bmNfXywgc2h0LT5wcm9jX25hbWUpOwotCQllbHNlCi0JCQlzaHQtPnByb2NfZGlyLT5vd25lciA9IHNodC0+bW9kdWxlOwogCX0KIAltdXRleF91bmxvY2soJmdsb2JhbF9ob3N0X3RlbXBsYXRlX211dGV4KTsKIH0KQEAgLTE2Myw3ICsxNjEsNiBAQAogCX0gCiAKIAlwLT53cml0ZV9wcm9jID0gcHJvY19zY3NpX3dyaXRlX3Byb2M7Ci0JcC0+b3duZXIgPSBzaHQtPm1vZHVsZTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKaW5kZXggYmRlNGI0Yi4uNWM2ZWY1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwpAQCAtNDA2LDYgKzQwNiwxOCBAQAogCiAJcHJfZGVidWcoIkNQTSB1YXJ0WyVkXTpzdGFydHVwXG4iLCBwb3J0LT5saW5lKTsKIAorCS8qIElmIHRoZSBwb3J0IGlzIG5vdCB0aGUgY29uc29sZSwgbWFrZSBzdXJlIHJ4IGlzIGRpc2FibGVkLiAqLworCWlmICghKHBpbmZvLT5mbGFncyAmIEZMQUdfQ09OU09MRSkpIHsKKwkJLyogRGlzYWJsZSBVQVJUIHJ4ICovCisJCWlmIChJU19TTUMocGluZm8pKSB7CisJCQljbHJiaXRzMTYoJnBpbmZvLT5zbWNwLT5zbWNfc21jbXIsIFNNQ01SX1JFTik7CisJCQljbHJiaXRzOCgmcGluZm8tPnNtY3AtPnNtY19zbWNtLCBTTUNNX1JYKTsKKwkJfSBlbHNlIHsKKwkJCWNscmJpdHMzMigmcGluZm8tPnNjY3AtPnNjY19nc21ybCwgU0NDX0dTTVJMX0VOUik7CisJCQljbHJiaXRzMTYoJnBpbmZvLT5zY2NwLT5zY2Nfc2NjbSwgVUFSVF9TQ0NNX1JYKTsKKwkJfQorCQljcG1fbGluZV9jcl9jbWQocGluZm8sIENQTV9DUl9JTklUX1RSWCk7CisJfQogCS8qIEluc3RhbGwgaW50ZXJydXB0IGhhbmRsZXIuICovCiAJcmV0dmFsID0gcmVxdWVzdF9pcnEocG9ydC0+aXJxLCBjcG1fdWFydF9pbnQsIDAsICJjcG1fdWFydCIsIHBvcnQpOwogCWlmIChyZXR2YWwpCkBAIC00MjAsOCArNDMyLDYgQEAKIAkJc2V0Yml0czMyKCZwaW5mby0+c2NjcC0+c2NjX2dzbXJsLCAoU0NDX0dTTVJMX0VOUiB8IFNDQ19HU01STF9FTlQpKTsKIAl9CiAKLQlpZiAoIShwaW5mby0+ZmxhZ3MgJiBGTEFHX0NPTlNPTEUpKQotCQljcG1fbGluZV9jcl9jbWQocGluZm8sIENQTV9DUl9JTklUX1RSWCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jIGIvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKaW5kZXggMGMzYTJhYi4uN2Y3MmY4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKQEAgLTUwLDggKzUwLDggQEAKIC8qIE9GIFBsYXRmb3JtIGRldmljZSBVc2FnZSA6CiAgKgogICogVGhpcyBkcml2ZXIgaXMgb25seSB1c2VkIGZvciBQU0NzIGNvbmZpZ3VyZWQgaW4gdWFydCBtb2RlLiAgVGhlIGRldmljZQotICogdHJlZSB3aWxsIGhhdmUgYSBub2RlIGZvciBlYWNoIFBTQyBpbiB1YXJ0IG1vZGUgdy8gZGV2aWNlX3R5cGUgPSAic2VyaWFsIgotICogYW5kICJtcGM1Mnh4LXBzYy11YXJ0IiBpbiB0aGUgY29tcGF0aWJsZSBzdHJpbmcKKyAqIHRyZWUgd2lsbCBoYXZlIGEgbm9kZSBmb3IgZWFjaCBQU0Mgd2l0aCAibXBjNTJ4eC1wc2MtdWFydCIgaW4gdGhlIGNvbXBhdGlibGUKKyAqIGxpc3QuCiAgKgogICogQnkgZGVmYXVsdCwgUFNDIGRldmljZXMgYXJlIGVudW1lcmF0ZWQgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIGZvdW5kLiAgSG93ZXZlcgogICogYSBwYXJ0aWN1bGFyIFBTQyBudW1iZXIgY2FuIGJlIGZvcmNlcyBieSBhZGRpbmcgJ2RldmljZV9ubyA9IDxwb3J0Iz4nCkBAIC01MjIsNyArNTIyLDcgQEAKIAogCS8qIFJlcXVlc3QgSVJRICovCiAJcmV0ID0gcmVxdWVzdF9pcnEocG9ydC0+aXJxLCBtcGM1Mnh4X3VhcnRfaW50LAotCQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NIHwgSVJRRl9TSEFSRUQsCisJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00sCiAJCSJtcGM1Mnh4X3BzY191YXJ0IiwgcG9ydCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTEyMTIsMzAgKzEyMTIsMTggQEAKICNlbmRpZgogCiBzdGF0aWMgdm9pZAotbXBjNTJ4eF91YXJ0X29mX2Fzc2lnbihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBpbnQgaWR4KQorbXBjNTJ4eF91YXJ0X29mX2Fzc2lnbihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewotCWludCBmcmVlX2lkeCA9IC0xOwogCWludCBpOwogCi0JLyogRmluZCB0aGUgZmlyc3QgZnJlZSBub2RlICovCisJLyogRmluZCB0aGUgZmlyc3QgZnJlZSBQU0MgbnVtYmVyICovCiAJZm9yIChpID0gMDsgaSA8IE1QQzUyeHhfUFNDX01BWE5VTTsgaSsrKSB7CiAJCWlmIChtcGM1Mnh4X3VhcnRfbm9kZXNbaV0gPT0gTlVMTCkgewotCQkJZnJlZV9pZHggPSBpOwotCQkJYnJlYWs7CisJCQlvZl9ub2RlX2dldChucCk7CisJCQltcGM1Mnh4X3VhcnRfbm9kZXNbaV0gPSBucDsKKwkJCXJldHVybjsKIAkJfQogCX0KLQotCWlmICgoaWR4IDwgMCkgfHwgKGlkeCA+PSBNUEM1Mnh4X1BTQ19NQVhOVU0pKQotCQlpZHggPSBmcmVlX2lkeDsKLQotCWlmIChpZHggPCAwKQotCQlyZXR1cm47IC8qIE5vIGZyZWUgc2xvdDsgYWJvcnQgKi8KLQotCW9mX25vZGVfZ2V0KG5wKTsKLQkvKiBJZiB0aGUgc2xvdCBpcyBhbHJlYWR5IG9jY3VwaWVkLCB0aGVuIHN3YXAgc2xvdHMgKi8KLQlpZiAobXBjNTJ4eF91YXJ0X25vZGVzW2lkeF0gJiYgKGZyZWVfaWR4ICE9IC0xKSkKLQkJbXBjNTJ4eF91YXJ0X25vZGVzW2ZyZWVfaWR4XSA9IG1wYzUyeHhfdWFydF9ub2Rlc1tpZHhdOwotCW1wYzUyeHhfdWFydF9ub2Rlc1tpZHhdID0gbnA7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMjQzLDIzICsxMjMxLDE3IEBACiB7CiAJc3RhdGljIGludCBlbnVtX2RvbmU7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKLQljb25zdCB1bnNpZ25lZCBpbnQgKmRldm5vOwogCWNvbnN0IHN0cnVjdCAgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAlpbnQgaTsKIAogCWlmIChlbnVtX2RvbmUpCiAJCXJldHVybjsKIAotCWZvcl9lYWNoX25vZGVfYnlfdHlwZShucCwgInNlcmlhbCIpIHsKKwkvKiBBc3NpZ24gaW5kZXggdG8gZWFjaCBQU0MgaW4gZGV2aWNlIHRyZWUgKi8KKwlmb3JfZWFjaF9tYXRjaGluZ19ub2RlKG5wLCBtcGM1Mnh4X3VhcnRfb2ZfbWF0Y2gpIHsKIAkJbWF0Y2ggPSBvZl9tYXRjaF9ub2RlKG1wYzUyeHhfdWFydF9vZl9tYXRjaCwgbnApOwotCQlpZiAoIW1hdGNoKQotCQkJY29udGludWU7Ci0KIAkJcHNjX29wcyA9IG1hdGNoLT5kYXRhOwotCi0JCS8qIElzIGEgcGFydGljdWxhciBkZXZpY2UgbnVtYmVyIHJlcXVlc3RlZD8gKi8KLQkJZGV2bm8gPSBvZl9nZXRfcHJvcGVydHkobnAsICJwb3J0LW51bWJlciIsIE5VTEwpOwotCQltcGM1Mnh4X3VhcnRfb2ZfYXNzaWduKG5wLCBkZXZubyA/ICpkZXZubyA6IC0xKTsKKwkJbXBjNTJ4eF91YXJ0X29mX2Fzc2lnbihucCk7CiAJfQogCiAJZW51bV9kb25lID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2gvbWFwbGUvbWFwbGUuYyBiL2RyaXZlcnMvc2gvbWFwbGUvbWFwbGUuYwppbmRleCBjYWIxYWI3Li45M2MyMGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL21hcGxlL21hcGxlLmMKKysrIGIvZHJpdmVycy9zaC9tYXBsZS9tYXBsZS5jCkBAIC03NzYsNyArNzc2LDcgQEAKIAkJLmJ1cyA9ICZtYXBsZV9idXNfdHlwZSwKIAl9LAogfTsKLS8qKgorLyoKICAqIG1hcGxlX2J1c190eXBlIC0gY29yZSBtYXBsZSBidXMgc3RydWN0dXJlCiAgKi8KIHN0cnVjdCBidXNfdHlwZSBtYXBsZV9idXNfdHlwZSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3hpbGlueF9zcGkuYyBiL2RyaXZlcnMvc3BpL3hpbGlueF9zcGkuYwppbmRleCBmZTdlNWYzLi40OTRkM2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS94aWxpbnhfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkveGlsaW54X3NwaS5jCkBAIC0zNTQsNyArMzU0LDcgQEAKIAlpZiAoeHNwaS0+cmVncyA9PSBOVUxMKSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZGV2X3dhcm4oJm9mZGV2LT5kZXYsICJpb3JlbWFwIGZhaWx1cmVcbiIpOwotCQlnb3RvIHB1dF9tYXN0ZXI7CisJCWdvdG8gcmVsZWFzZV9tZW07CiAJfQogCXhzcGktPmlycSA9IHJfaXJxLT5zdGFydDsKIApAQCAtMzY1LDcgKzM2NSw3IEBACiAJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShvZmRldi0+bm9kZSwgInhsbngsbnVtLXNzLWJpdHMiLCAmbGVuKTsKIAlpZiAoIXByb3AgfHwgbGVuIDwgc2l6ZW9mKCpwcm9wKSkgewogCQlkZXZfd2Fybigmb2ZkZXYtPmRldiwgIm5vICd4bG54LG51bS1zcy1iaXRzJyBwcm9wZXJ0eVxuIik7Ci0JCWdvdG8gcHV0X21hc3RlcjsKKwkJZ290byB1bm1hcF9pbzsKIAl9CiAJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9ICpwcm9wOwogCkBAIC0zOTcsNiArMzk3LDggQEAKIAlmcmVlX2lycSh4c3BpLT5pcnEsIHhzcGkpOwogdW5tYXBfaW86CiAJaW91bm1hcCh4c3BpLT5yZWdzKTsKK3JlbGVhc2VfbWVtOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyX21lbS0+c3RhcnQsIHJlc291cmNlX3NpemUocl9tZW0pKTsKIHB1dF9tYXN0ZXI6CiAJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKIAlyZXR1cm4gcmM7CkBAIC00MDYsNiArNDA4LDcgQEAKIHsKIAlzdHJ1Y3QgeGlsaW54X3NwaSAqeHNwaTsKIAlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCXN0cnVjdCByZXNvdXJjZSByX21lbTsKIAogCW1hc3RlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKG9mZGV2KTsKIAl4c3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwpAQCAtNDEzLDYgKzQxNiw4IEBACiAJc3BpX2JpdGJhbmdfc3RvcCgmeHNwaS0+Yml0YmFuZyk7CiAJZnJlZV9pcnEoeHNwaS0+aXJxLCB4c3BpKTsKIAlpb3VubWFwKHhzcGktPnJlZ3MpOworCWlmICghb2ZfYWRkcmVzc190b19yZXNvdXJjZShvZmRldi0+bm9kZSwgMCwgJnJfbWVtKSkKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJfbWVtLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZyX21lbSkpOwogCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgMCk7CiAJc3BpX21hc3Rlcl9wdXQoeHNwaS0+Yml0YmFuZy5tYXN0ZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jCmluZGV4IGM2ZDdjYzcuLjFkZTBjMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jCkBAIC0yNTgyLDcgKzI1ODIsNyBAQAogCQkgKiBjYWxsaW5nIHBjaV9zZXRfcG93ZXJfc3RhdGUoKQogCQkgKi8KIAkJcmFkZW9uZmJfd2hhY2tfcG93ZXJfc3RhdGUocmluZm8sIFBDSV9EMik7Ci0JCXBjaV9zZXRfcG93ZXJfc3RhdGUocmluZm8tPnBkZXYsIFBDSV9EMik7CisJCV9fcGNpX2NvbXBsZXRlX3Bvd2VyX3RyYW5zaXRpb24ocmluZm8tPnBkZXYsIFBDSV9EMik7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInJhZGVvbmZiICglcyk6IHN3aXRjaGluZyB0byBEMCBzdGF0ZS4uLlxuIiwKIAkJICAgICAgIHBjaV9uYW1lKHJpbmZvLT5wZGV2KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYwppbmRleCAzN2I0MzNhLi5lMzI3Yjg0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCkBAIC0yMDU5LDI1ICsyMDU5LDIxIEBACiAJaWYgKHZpYWZiX2VudHJ5KSB7CiAJCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoImR2cDAiLCAwLCAqdmlhZmJfZW50cnkpOwogCQlpZiAoZW50cnkpIHsKLQkJCWVudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCQkJZW50cnktPnJlYWRfcHJvYyA9IHZpYWZiX2R2cDBfcHJvY19yZWFkOwogCQkJZW50cnktPndyaXRlX3Byb2MgPSB2aWFmYl9kdnAwX3Byb2Nfd3JpdGU7CiAJCX0KIAkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZHZwMSIsIDAsICp2aWFmYl9lbnRyeSk7CiAJCWlmIChlbnRyeSkgewotCQkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCQllbnRyeS0+cmVhZF9wcm9jID0gdmlhZmJfZHZwMV9wcm9jX3JlYWQ7CiAJCQllbnRyeS0+d3JpdGVfcHJvYyA9IHZpYWZiX2R2cDFfcHJvY193cml0ZTsKIAkJfQogCQllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJkZnBoIiwgMCwgKnZpYWZiX2VudHJ5KTsKIAkJaWYgKGVudHJ5KSB7Ci0JCQllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkJCWVudHJ5LT5yZWFkX3Byb2MgPSB2aWFmYl9kZnBoX3Byb2NfcmVhZDsKIAkJCWVudHJ5LT53cml0ZV9wcm9jID0gdmlhZmJfZGZwaF9wcm9jX3dyaXRlOwogCQl9CiAJCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoImRmcGwiLCAwLCAqdmlhZmJfZW50cnkpOwogCQlpZiAoZW50cnkpIHsKLQkJCWVudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCQkJZW50cnktPnJlYWRfcHJvYyA9IHZpYWZiX2RmcGxfcHJvY19yZWFkOwogCQkJZW50cnktPndyaXRlX3Byb2MgPSB2aWFmYl9kZnBsX3Byb2Nfd3JpdGU7CiAJCX0KQEAgLTIwODYsNyArMjA4Miw2IEBACiAJCSAgICB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMi5sdmRzX2NoaXBfbmFtZSkgewogCQkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgidnQxNjM2IiwgMCwgKnZpYWZiX2VudHJ5KTsKIAkJCWlmIChlbnRyeSkgewotCQkJCWVudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCQkJCWVudHJ5LT5yZWFkX3Byb2MgPSB2aWFmYl92dDE2MzZfcHJvY19yZWFkOwogCQkJCWVudHJ5LT53cml0ZV9wcm9jID0gdmlhZmJfdnQxNjM2X3Byb2Nfd3JpdGU7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwppbmRleCA1Nzc3MTk2Li41YzUyMzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKQEAgLTIzLDE1ICsyMywyMSBAQAogCiAjaWZkZWYgREVCVUcKIC8qIEZvciBkZXZlbG9wbWVudCwgd2Ugd2FudCB0byBjcmFzaCB3aGVuZXZlciB0aGUgcmluZyBpcyBzY3Jld2VkLiAqLwotI2RlZmluZSBCQURfUklORyh2cSwgZm10Li4uKQkJCVwKLQlkbyB7IGRldl9lcnIoJnZxLT52cS52ZGV2LT5kZXYsIGZtdCk7IEJVRygpOyB9IHdoaWxlKDApCi0jZGVmaW5lIFNUQVJUX1VTRSh2cSkgXAotCWRvIHsgaWYgKCh2cSktPmluX3VzZSkgcGFuaWMoImluX3VzZSA9ICVpXG4iLCAodnEpLT5pbl91c2UpOyAodnEpLT5pbl91c2UgPSBfX0xJTkVfXzsgbWIoKTsgfSB3aGlsZSgwKQotI2RlZmluZSBFTkRfVVNFKHZxKSBcCi0JZG8geyBCVUdfT04oISh2cSktPmluX3VzZSk7ICh2cSktPmluX3VzZSA9IDA7IG1iKCk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgQkFEX1JJTkcoX3ZxLCBmbXQuLi4pCQkJXAorCWRvIHsgZGV2X2VycigmKF92cSktPnZxLnZkZXYtPmRldiwgZm10KTsgQlVHKCk7IH0gd2hpbGUoMCkKKy8qIENhbGxlciBpcyBzdXBwb3NlZCB0byBndWFyYW50ZWUgbm8gcmVlbnRyeS4gKi8KKyNkZWZpbmUgU1RBUlRfVVNFKF92cSkJCQkJCQlcCisJZG8gewkJCQkJCQlcCisJCWlmICgoX3ZxKS0+aW5fdXNlKQkJCQlcCisJCQlwYW5pYygiaW5fdXNlID0gJWlcbiIsIChfdnEpLT5pbl91c2UpOwlcCisJCShfdnEpLT5pbl91c2UgPSBfX0xJTkVfXzsJCQlcCisJCW1iKCk7CQkJCQkJXAorCX0gd2hpbGUoMCkKKyNkZWZpbmUgRU5EX1VTRShfdnEpIFwKKwlkbyB7IEJVR19PTighKF92cSktPmluX3VzZSk7IChfdnEpLT5pbl91c2UgPSAwOyBtYigpOyB9IHdoaWxlKDApCiAjZWxzZQotI2RlZmluZSBCQURfUklORyh2cSwgZm10Li4uKQkJCVwKLQlkbyB7IGRldl9lcnIoJnZxLT52cS52ZGV2LT5kZXYsIGZtdCk7ICh2cSktPmJyb2tlbiA9IHRydWU7IH0gd2hpbGUoMCkKKyNkZWZpbmUgQkFEX1JJTkcoX3ZxLCBmbXQuLi4pCQkJXAorCWRvIHsgZGV2X2VycigmX3ZxLT52cS52ZGV2LT5kZXYsIGZtdCk7IChfdnEpLT5icm9rZW4gPSB0cnVlOyB9IHdoaWxlKDApCiAjZGVmaW5lIFNUQVJUX1VTRSh2cSkKICNkZWZpbmUgRU5EX1VTRSh2cSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCmluZGV4IDU1ZjY0YWYuLjYzMDI0MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZworKysgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKQEAgLTc3Miw3ICs3NzIsNyBAQAogCiBjb25maWcgR0VGX1dEVAogCXRyaXN0YXRlICJHRSBGYW51YyBXYXRjaGRvZyBUaW1lciIKLQlkZXBlbmRzIG9uIEdFRl9TQkM2MTAKKwlkZXBlbmRzIG9uIEdFRl9TQkM2MTAgfHwgR0VGX1NCQzMxMCB8fCBHRUZfUFBDOUEKIAktLS1oZWxwLS0tCiAJICBXYXRjaGRvZyB0aW1lciBmb3VuZCBpbiBhIG51bWJlciBvZiBHRSBGYW51YyBzaW5nbGUgYm9hcmQgY29tcHV0ZXJzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2hwd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2hwd2R0LmMKaW5kZXggNmNmMTU1ZC4uMzEzNzM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9ocHdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvaHB3ZHQuYwpAQCAtMzgwLDcgKzM4MCw3IEBACiAgKglUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIG9yIG5vdCBhIFNNQklPUy9ETUkgcmVjb3JkIGlzCiAgKgl0aGUgNjRiaXQgQ1JVIGluZm8gb3Igbm90CiAgKi8KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBkbWlfZmluZF9jcnUoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtKQorc3RhdGljIHZvaWQgX19kZXZpbml0IGRtaV9maW5kX2NydShjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqZG0sIHZvaWQgKmR1bW15KQogewogCXN0cnVjdCBzbWJpb3NfY3J1NjRfaW5mbyAqc21iaW9zX2NydTY0X3B0cjsKIAl1bnNpZ25lZCBsb25nIGNydV9waHlzaWNhbF9hZGRyZXNzOwpAQCAtNDAzLDcgKzQwMyw3IEBACiB7CiAJY3J1X3JvbV9hZGRyID0gTlVMTDsKIAotCWRtaV93YWxrKGRtaV9maW5kX2NydSk7CisJZG1pX3dhbGsoZG1pX2ZpbmRfY3J1LCBOVUxMKTsKIAogCS8qIGlmIGNydV9yb21fYWRkciBoYXMgYmVlbiBzZXQgdGhlbiB3ZSBmb3VuZCBhIENSVSBzZXJ2aWNlICovCiAJcmV0dXJuICgoY3J1X3JvbV9hZGRyICE9IE5VTEwpID8gMCA6IC1FTk9ERVYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vbWFuYWdlLmMgYi9kcml2ZXJzL3hlbi9tYW5hZ2UuYwppbmRleCAzY2NkMzQ4Li4wZDYxZGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9tYW5hZ2UuYworKysgYi9kcml2ZXJzL3hlbi9tYW5hZ2UuYwpAQCAtMzksMTIgKzM5LDYgQEAKIAogCUJVR19PTighaXJxc19kaXNhYmxlZCgpKTsKIAotCWVyciA9IGRldmljZV9wb3dlcl9kb3duKFBNU0dfU1VTUEVORCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgInhlbl9zdXNwZW5kOiBkZXZpY2VfcG93ZXJfZG93biBmYWlsZWQ6ICVkXG4iLAotCQkgICAgICAgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAJZXJyID0gc3lzZGV2X3N1c3BlbmQoUE1TR19TVVNQRU5EKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAieGVuX3N1c3BlbmQ6IHN5c2Rldl9zdXNwZW5kIGZhaWxlZDogJWRcbiIsCkBAIC02OSw3ICs2Myw2IEBACiAJeGVuX21tX3VucGluX2FsbCgpOwogCiAJc3lzZGV2X3Jlc3VtZSgpOwotCWRldmljZV9wb3dlcl91cChQTVNHX1JFU1VNRSk7CiAKIAlpZiAoISpjYW5jZWxsZWQpIHsKIAkJeGVuX2lycV9yZXN1bWUoKTsKQEAgLTEwOCw2ICsxMDEsMTIgQEAKIAkvKiBYWFggdXNlIG5vcm1hbCBkZXZpY2UgdHJlZT8gKi8KIAl4ZW5idXNfc3VzcGVuZCgpOwogCisJZXJyID0gZGV2aWNlX3Bvd2VyX2Rvd24oUE1TR19TVVNQRU5EKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZGV2aWNlX3Bvd2VyX2Rvd24gZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwkJZ290byByZXN1bWVfZGV2aWNlczsKKwl9CisKIAllcnIgPSBzdG9wX21hY2hpbmUoeGVuX3N1c3BlbmQsICZjYW5jZWxsZWQsIGNwdW1hc2tfb2YoMCkpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gc3RhcnQgeGVuX3N1c3BlbmQ6ICVkXG4iLCBlcnIpOwpAQCAtMTIwLDYgKzExOSw5IEBACiAJfSBlbHNlCiAJCXhlbmJ1c19zdXNwZW5kX2NhbmNlbCgpOwogCisJZGV2aWNlX3Bvd2VyX3VwKFBNU0dfUkVTVU1FKTsKKworcmVzdW1lX2RldmljZXM6CiAJZGV2aWNlX3Jlc3VtZShQTVNHX1JFU1VNRSk7CiAKIAkvKiBNYWtlIHN1cmUgdGltZXIgZXZlbnRzIGdldCByZXRyaWdnZXJlZCBvbiBhbGwgQ1BVcyAqLwpkaWZmIC0tZ2l0IGEvZnMvYWZzL3Byb2MuYyBiL2ZzL2Fmcy9wcm9jLmMKaW5kZXggNzU3OGMxYS4uODYzMDYxNSAxMDA2NDQKLS0tIGEvZnMvYWZzL3Byb2MuYworKysgYi9mcy9hZnMvcHJvYy5jCkBAIC0xNDYsNyArMTQ2LDYgQEAKIAlwcm9jX2FmcyA9IHByb2NfbWtkaXIoImZzL2FmcyIsIE5VTEwpOwogCWlmICghcHJvY19hZnMpCiAJCWdvdG8gZXJyb3JfZGlyOwotCXByb2NfYWZzLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcCA9IHByb2NfY3JlYXRlKCJjZWxscyIsIDAsIHByb2NfYWZzLCAmYWZzX3Byb2NfY2VsbHNfZm9wcyk7CiAJaWYgKCFwKQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX2RlYnVnLmMgYi9mcy9jaWZzL2NpZnNfZGVidWcuYwppbmRleCA4NzdlNGQ5Li43ZjE5ZmVmIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZGVidWcuYworKysgYi9mcy9jaWZzL2NpZnNfZGVidWcuYwpAQCAtNDA0LDcgKzQwNCw2IEBACiAJaWYgKHByb2NfZnNfY2lmcyA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlwcm9jX2ZzX2NpZnMtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJcHJvY19jcmVhdGUoIkRlYnVnRGF0YSIsIDAsIHByb2NfZnNfY2lmcywgJmNpZnNfZGVidWdfZGF0YV9wcm9jX2ZvcHMpOwogCiAjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMKZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdC5jIGIvZnMvY29tcGF0LmMKaW5kZXggNWUzNzRhYS4uNTVlZmRmZSAxMDA2NDQKLS0tIGEvZnMvY29tcGF0LmMKKysrIGIvZnMvY29tcGF0LmMKQEAgLTE0MjAsMTIgKzE0MjAsMTcgQEAKIHsKIAlzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtOwogCXN0cnVjdCBmaWxlICpmaWxlOworCXN0cnVjdCBmaWxlc19zdHJ1Y3QgKmRpc3BsYWNlZDsKIAlpbnQgcmV0dmFsOwogCisJcmV0dmFsID0gdW5zaGFyZV9maWxlcygmZGlzcGxhY2VkKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dF9yZXQ7CisKIAlyZXR2YWwgPSAtRU5PTUVNOwogCWJwcm0gPSBremFsbG9jKHNpemVvZigqYnBybSksIEdGUF9LRVJORUwpOwogCWlmICghYnBybSkKLQkJZ290byBvdXRfcmV0OworCQlnb3RvIG91dF9maWxlczsKIAogCXJldHZhbCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAlpZiAocmV0dmFsIDwgMCkKQEAgLTE0MzYsNyArMTQ0MSw3IEBACiAJYnBybS0+Y3JlZCA9IHByZXBhcmVfZXhlY19jcmVkcygpOwogCWlmICghYnBybS0+Y3JlZCkKIAkJZ290byBvdXRfdW5sb2NrOwotCWNoZWNrX3Vuc2FmZV9leGVjKGJwcm0sIGN1cnJlbnQtPmZpbGVzKTsKKwljaGVja191bnNhZmVfZXhlYyhicHJtKTsKIAogCWZpbGUgPSBvcGVuX2V4ZWMoZmlsZW5hbWUpOwogCXJldHZhbCA9IFBUUl9FUlIoZmlsZSk7CkBAIC0xNDg3LDYgKzE0OTIsOCBAQAogCW11dGV4X3VubG9jaygmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAlhY2N0X3VwZGF0ZV9pbnRlZ3JhbHMoY3VycmVudCk7CiAJZnJlZV9icHJtKGJwcm0pOworCWlmIChkaXNwbGFjZWQpCisJCXB1dF9maWxlc19zdHJ1Y3QoZGlzcGxhY2VkKTsKIAlyZXR1cm4gcmV0dmFsOwogCiBvdXQ6CkBAIC0xNTA2LDYgKzE1MTMsOSBAQAogb3V0X2ZyZWU6CiAJZnJlZV9icHJtKGJwcm0pOwogCitvdXRfZmlsZXM6CisJaWYgKGRpc3BsYWNlZCkKKwkJcmVzZXRfZmlsZXNfc3RydWN0KGRpc3BsYWNlZCk7CiBvdXRfcmV0OgogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggYjlmMWMxNC4uYzUxMjhmYiAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCisrKyBiL2ZzL2V4ZWMuYwpAQCAtMTA1NiwyOCArMTA1NiwyNCBAQAogICogLSB0aGUgY2FsbGVyIG11c3QgaG9sZCBjdXJyZW50LT5jcmVkX2V4ZWNfbXV0ZXggdG8gcHJvdGVjdCBhZ2FpbnN0CiAgKiAgIFBUUkFDRV9BVFRBQ0gKICAqLwotdm9pZCBjaGVja191bnNhZmVfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcykKK3ZvaWQgY2hlY2tfdW5zYWZlX2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBjdXJyZW50LCAqdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIG5fZnMsIG5fZmlsZXMsIG5fc2lnaGFuZDsKKwl1bnNpZ25lZCBuX2ZzLCBuX3NpZ2hhbmQ7CiAKIAlicHJtLT51bnNhZmUgPSB0cmFjZWhvb2tfdW5zYWZlX2V4ZWMocCk7CiAKIAluX2ZzID0gMTsKLQluX2ZpbGVzID0gMTsKIAluX3NpZ2hhbmQgPSAxOwogCWxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncyk7CiAJZm9yICh0ID0gbmV4dF90aHJlYWQocCk7IHQgIT0gcDsgdCA9IG5leHRfdGhyZWFkKHQpKSB7CiAJCWlmICh0LT5mcyA9PSBwLT5mcykKIAkJCW5fZnMrKzsKLQkJaWYgKHQtPmZpbGVzID09IGZpbGVzKQotCQkJbl9maWxlcysrOwogCQluX3NpZ2hhbmQrKzsKIAl9CiAKIAlpZiAoYXRvbWljX3JlYWQoJnAtPmZzLT5jb3VudCkgPiBuX2ZzIHx8Ci0JICAgIGF0b21pY19yZWFkKCZwLT5maWxlcy0+Y291bnQpID4gbl9maWxlcyB8fAogCSAgICBhdG9taWNfcmVhZCgmcC0+c2lnaGFuZC0+Y291bnQpID4gbl9zaWdoYW5kKQogCQlicHJtLT51bnNhZmUgfD0gTFNNX1VOU0FGRV9TSEFSRTsKIApAQCAtMTMwMCw3ICsxMjk2LDcgQEAKIAlicHJtLT5jcmVkID0gcHJlcGFyZV9leGVjX2NyZWRzKCk7CiAJaWYgKCFicHJtLT5jcmVkKQogCQlnb3RvIG91dF91bmxvY2s7Ci0JY2hlY2tfdW5zYWZlX2V4ZWMoYnBybSwgZGlzcGxhY2VkKTsKKwljaGVja191bnNhZmVfZXhlYyhicHJtKTsKIAogCWZpbGUgPSBvcGVuX2V4ZWMoZmlsZW5hbWUpOwogCXJldHZhbCA9IFBUUl9FUlIoZmlsZSk7CmRpZmYgLS1naXQgYS9mcy9mY250bC5jIGIvZnMvZmNudGwuYwppbmRleCBkODY1Y2E2Ni4uY2M4ZTRkZSAxMDA2NDQKLS0tIGEvZnMvZmNudGwuYworKysgYi9mcy9mY250bC5jCkBAIC01MzEsNiArNTMxLDEyIEBACiAJCWlmICghbmV3KQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQorCisJLyoKKwkgKiBXZSBuZWVkIHRvIHRha2UgZl9sb2NrIGZpcnN0IHNpbmNlIGl0J3Mgbm90IGFuIElSUS1zYWZlCisJICogbG9jay4KKwkgKi8KKwlzcGluX2xvY2soJmZpbHAtPmZfbG9jayk7CiAJd3JpdGVfbG9ja19pcnEoJmZhc3luY19sb2NrKTsKIAlmb3IgKGZwID0gZmFwcDsgKGZhID0gKmZwKSAhPSBOVUxMOyBmcCA9ICZmYS0+ZmFfbmV4dCkgewogCQlpZiAoZmEtPmZhX2ZpbGUgPT0gZmlscCkgewpAQCAtNTU1LDE0ICs1NjEsMTIgQEAKIAkJcmVzdWx0ID0gMTsKIAl9CiBvdXQ6Ci0JLyogRml4IHVwIEZBU1lOQyBiaXQgd2hpbGUgc3RpbGwgaG9sZGluZyBmYXN5bmNfbG9jayAqLwotCXNwaW5fbG9jaygmZmlscC0+Zl9sb2NrKTsKIAlpZiAob24pCiAJCWZpbHAtPmZfZmxhZ3MgfD0gRkFTWU5DOwogCWVsc2UKIAkJZmlscC0+Zl9mbGFncyAmPSB+RkFTWU5DOwotCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2xvY2spOwogCXdyaXRlX3VubG9ja19pcnEoJmZhc3luY19sb2NrKTsKKwlzcGluX3VubG9jaygmZmlscC0+Zl9sb2NrKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jCmluZGV4IGQ5ZmRiN2MuLjgyMWQxMGYgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZmlsZS5jCisrKyBiL2ZzL2Z1c2UvZmlsZS5jCkBAIC0xNDY1LDcgKzE0NjUsNyBAQAogCWNhc2UgU0VFS19FTkQ6CiAJCXJldHZhbCA9IGZ1c2VfdXBkYXRlX2F0dHJpYnV0ZXMoaW5vZGUsIE5VTEwsIGZpbGUsIE5VTEwpOwogCQlpZiAocmV0dmFsKQotCQkJcmV0dXJuIHJldHZhbDsKKwkJCWdvdG8gZXhpdDsKIAkJb2Zmc2V0ICs9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAkJYnJlYWs7CiAJY2FzZSBTRUVLX0NVUjoKQEAgLTE0NzksNiArMTQ3OSw3IEBACiAJCX0KIAkJcmV0dmFsID0gb2Zmc2V0OwogCX0KK2V4aXQ6CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oCmluZGV4IDBkOGFjNDkuLjUzYWY4ODUgMTAwNjQ0Ci0tLSBhL2ZzL2ludGVybmFsLmgKKysrIGIvZnMvaW50ZXJuYWwuaApAQCAtNDMsNyArNDMsNyBAQAogLyoKICAqIGV4ZWMuYwogICovCi1leHRlcm4gdm9pZCBjaGVja191bnNhZmVfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICosIHN0cnVjdCBmaWxlc19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBjaGVja191bnNhZmVfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICopOwogCiAvKgogICogbmFtZXNwYWNlLmMKZGlmZiAtLWdpdCBhL2ZzL2pmcy9LY29uZmlnIGIvZnMvamZzL0tjb25maWcKaW5kZXggOWZmNjE5YS4uNTdjZWYxOSAxMDA2NDQKLS0tIGEvZnMvamZzL0tjb25maWcKKysrIGIvZnMvamZzL0tjb25maWcKQEAgLTEsNiArMSw3IEBACiBjb25maWcgSkZTX0ZTCiAJdHJpc3RhdGUgIkpGUyBmaWxlc3lzdGVtIHN1cHBvcnQiCiAJc2VsZWN0IE5MUworCXNlbGVjdCBDUkMzMgogCWhlbHAKIAkgIFRoaXMgaXMgYSBwb3J0IG9mIElCTSdzIEpvdXJuYWxlZCBGaWxlc3lzdGVtIC4gIE1vcmUgaW5mb3JtYXRpb24gaXMKIAkgIGF2YWlsYWJsZSBpbiB0aGUgZmlsZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2pmcy50eHQ+LgpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19kZWJ1Zy5jIGIvZnMvamZzL2pmc19kZWJ1Zy5jCmluZGV4IDZhNzNkZTguLmRkODI0ZDkgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfZGVidWcuYworKysgYi9mcy9qZnMvamZzX2RlYnVnLmMKQEAgLTkwLDcgKzkwLDYgQEAKIAogCWlmICghKGJhc2UgPSBwcm9jX21rZGlyKCJmcy9qZnMiLCBOVUxMKSkpCiAJCXJldHVybjsKLQliYXNlLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJZm9yIChpID0gMDsgaSA8IE5QUk9DRU5UOyBpKyspCiAJCXByb2NfY3JlYXRlKEVudHJpZXNbaV0ubmFtZSwgMCwgYmFzZSwgRW50cmllc1tpXS5wcm9jX2ZvcHMpOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19leHRlbnQuYyBiL2ZzL2pmcy9qZnNfZXh0ZW50LmMKaW5kZXggMTY5ODAyZS4uYmJiZDVmMiAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19leHRlbnQuYworKysgYi9mcy9qZnMvamZzX2V4dGVudC5jCkBAIC0zNjIsMTEgKzM2MiwxMiBAQAogaW50IGV4dEhpbnQoc3RydWN0IGlub2RlICppcCwgczY0IG9mZnNldCwgeGFkX3QgKiB4cCkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaXAtPmlfc2I7Ci0Jc3RydWN0IHhhZGxpc3QgeGFkbDsKLQlzdHJ1Y3QgbHhkbGlzdCBseGRsOwotCWx4ZF90IGx4ZDsKKwlpbnQgbmJwZXJwYWdlID0gSkZTX1NCSShzYiktPm5icGVycGFnZTsKIAlzNjQgcHJldjsKLQlpbnQgcmMsIG5icGVycGFnZSA9IEpGU19TQkkoc2IpLT5uYnBlcnBhZ2U7CisJaW50IHJjID0gMDsKKwlzNjQgeGFkZHI7CisJaW50IHhsZW47CisJaW50IHhmbGFnOwogCiAJLyogaW5pdCB0aGUgaGludCBhcyAibm8gaGludCBwcm92aWRlZCIgKi8KIAlYQURhZGRyZXNzKHhwLCAwKTsKQEAgLTM3Niw0NiArMzc3LDMwIEBACiAJICovCiAJcHJldiA9ICgob2Zmc2V0ICYgflBPRkZTRVQpID4+IEpGU19TQkkoc2IpLT5sMmJzaXplKSAtIG5icGVycGFnZTsKIAotCS8qIGlmIHRoZSBvZmZzZXRzIGluIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBmaWxlLAotCSAqIG5vIGhpbnQgcHJvdmlkZWQuCisJLyogaWYgdGhlIG9mZnNldCBpcyBpbiB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgZmlsZSwgbm8gaGludCBwcm92aWRlZC4KIAkgKi8KIAlpZiAocHJldiA8IDApCi0JCXJldHVybiAoMCk7CisJCWdvdG8gb3V0OwogCi0JLyogcHJlcGFyZSB0byBsb29rdXAgdGhlIHByZXZpb3VzIHBhZ2UncyBleHRlbnQgaW5mbyAqLwotCWx4ZGwubWF4bmx4ZCA9IDE7Ci0JbHhkbC5ubHhkID0gMTsKLQlseGRsLmx4ZCA9ICZseGQ7Ci0JTFhEb2Zmc2V0KCZseGQsIHByZXYpCi0JTFhEbGVuZ3RoKCZseGQsIG5icGVycGFnZSk7CisJcmMgPSB4dExvb2t1cChpcCwgcHJldiwgbmJwZXJwYWdlLCAmeGZsYWcsICZ4YWRkciwgJnhsZW4sIDApOwogCi0JeGFkbC5tYXhueGFkID0gMTsKLQl4YWRsLm54YWQgPSAwOwotCXhhZGwueGFkID0geHA7CisJaWYgKChyYyA9PSAwKSAmJiB4bGVuKSB7CisJCWlmICh4bGVuICE9IG5icGVycGFnZSkgeworCQkJamZzX2Vycm9yKGlwLT5pX3NiLCAiZXh0SGludDogY29ycnVwdCB4dHJlZSIpOworCQkJcmMgPSAtRUlPOworCQl9CisJCVhBRGFkZHJlc3MoeHAsIHhhZGRyKTsKKwkJWEFEbGVuZ3RoKHhwLCB4bGVuKTsKKwkJLyoKKwkJICogb25seSBwcmVzZXJ2ZSB0aGUgYWJuciBmbGFnIHdpdGhpbiB0aGUgeGFkIGZsYWdzCisJCSAqIG9mIHRoZSByZXR1cm5lZCBoaW50LgorCQkgKi8KKwkJeHAtPmZsYWcgID0geGZsYWcgJiBYQURfTk9UUkVDT1JERUQ7CisJfSBlbHNlCisJCXJjID0gMDsKIAotCS8qIHBlcmZvcm0gdGhlIGxvb2t1cCAqLwotCWlmICgocmMgPSB4dExvb2t1cExpc3QoaXAsICZseGRsLCAmeGFkbCwgMCkpKQotCQlyZXR1cm4gKHJjKTsKLQotCS8qIGNoZWNrIGlmIG5vIGV4dGVudCBleGlzdHMgZm9yIHRoZSBwcmV2aW91cyBwYWdlLgotCSAqIHRoaXMgaXMgcG9zc2libGUgZm9yIHNwYXJzZSBmaWxlcy4KLQkgKi8KLQlpZiAoeGFkbC5ueGFkID09IDApIHsKLS8vCQlhc3NlcnQoSVNTUEFSU0UoaXApKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0KLQkvKiBvbmx5IHByZXNlcnZlIHRoZSBhYm5yIGZsYWcgd2l0aGluIHRoZSB4YWQgZmxhZ3MKLQkgKiBvZiB0aGUgcmV0dXJuZWQgaGludC4KLQkgKi8KLQl4cC0+ZmxhZyAmPSBYQURfTk9UUkVDT1JERUQ7Ci0KLQlpZih4YWRsLm54YWQgIT0gMSB8fCBsZW5ndGhYQUQoeHApICE9IG5icGVycGFnZSkgewotCQlqZnNfZXJyb3IoaXAtPmlfc2IsICJleHRIaW50OiBjb3JydXB0IHh0cmVlIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJldHVybiAoMCk7CitvdXQ6CisJcmV0dXJuIChyYyk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19pbWFwLmMgYi9mcy9qZnMvamZzX2ltYXAuYwppbmRleCAwZjk0MzgxLi4zNDYwNTcyIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2ltYXAuYworKysgYi9mcy9qZnMvamZzX2ltYXAuYwpAQCAtNTcsMTIgKzU3LDYgQEAKICNpbmNsdWRlICJqZnNfZGVidWcuaCIKIAogLyoKLSAqIF9fbWFya19pbm9kZV9kaXJ0eSBleHBlY3RzIGlub2RlcyB0byBiZSBoYXNoZWQuICBTaW5jZSB3ZSBkb24ndCB3YW50Ci0gKiBzcGVjaWFsIGlub2RlcyBpbiB0aGUgZmlsZXNldCBpbm9kZSBzcGFjZSwgd2UgbWFrZSB0aGVtIGFwcGVhciBoYXNoZWQsCi0gKiBidXQgZG8gbm90IHB1dCBvbiBhbnkgbGlzdHMuCi0gKi8KLQotLyoKICAqIGltYXAgbG9ja3MKICAqLwogLyogaWFnIGZyZWUgbGlzdCBsb2NrICovCkBAIC00OTcsNyArNDkxLDkgQEAKIAlyZWxlYXNlX21ldGFwYWdlKG1wKTsKIAogCS8qCi0JICogdGhhdCB3aWxsIGxvb2sgaGFzaGVkLCBidXQgd29uJ3QgYmUgb24gYW55IGxpc3Q7IGhsaXN0X2RlbCgpCisJICogX19tYXJrX2lub2RlX2RpcnR5IGV4cGVjdHMgaW5vZGVzIHRvIGJlIGhhc2hlZC4gIFNpbmNlIHdlIGRvbid0CisJICogd2FudCBzcGVjaWFsIGlub2RlcyBpbiB0aGUgZmlsZXNldCBpbm9kZSBzcGFjZSwgd2UgbWFrZSB0aGVtCisJICogYXBwZWFyIGhhc2hlZCwgYnV0IGRvIG5vdCBwdXQgb24gYW55IGxpc3RzLiAgaGxpc3RfZGVsKCkKIAkgKiB3aWxsIHdvcmsgZmluZSBhbmQgcmVxdWlyZSBubyBsb2NraW5nLgogCSAqLwogCWlwLT5pX2hhc2gucHByZXYgPSAmaXAtPmlfaGFzaC5uZXh0OwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19tZXRhcGFnZS5jIGIvZnMvamZzL2pmc19tZXRhcGFnZS5jCmluZGV4IGMzNTAwNTcuLjA3YjZjNWQgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYworKysgYi9mcy9qZnMvamZzX21ldGFwYWdlLmMKQEAgLTM2OSw2ICszNjksNyBAQAogCXVuc2lnbmVkIGxvbmcgYmlvX2J5dGVzID0gMDsKIAl1bnNpZ25lZCBsb25nIGJpb19vZmZzZXQgPSAwOwogCWludCBvZmZzZXQ7CisJaW50IGJhZF9ibG9ja3MgPSAwOwogCiAJcGFnZV9zdGFydCA9IChzZWN0b3JfdClwYWdlLT5pbmRleCA8PAogCQkgICAgIChQQUdFX0NBQ0hFX1NISUZUIC0gaW5vZGUtPmlfYmxrYml0cyk7CkBAIC0zOTQsNiArMzk1LDcgQEAKIAkJfQogCiAJCWNsZWFyX2JpdChNRVRBX2RpcnR5LCAmbXAtPmZsYWcpOworCQlzZXRfYml0KE1FVEFfaW8sICZtcC0+ZmxhZyk7CiAJCWJsb2NrX29mZnNldCA9IG9mZnNldCA+PiBpbm9kZS0+aV9ibGtiaXRzOwogCQlsYmxvY2sgPSBwYWdlX3N0YXJ0ICsgYmxvY2tfb2Zmc2V0OwogCQlpZiAoYmlvKSB7CkBAIC00MDIsNyArNDA0LDYgQEAKIAkJCQlsZW4gPSBtaW4oeGxlbiwgYmxvY2tzX3Blcl9tcCk7CiAJCQkJeGxlbiAtPSBsZW47CiAJCQkJYmlvX2J5dGVzICs9IGxlbiA8PCBpbm9kZS0+aV9ibGtiaXRzOwotCQkJCXNldF9iaXQoTUVUQV9pbywgJm1wLT5mbGFnKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCS8qIE5vdCBjb250aWd1b3VzICovCkBAIC00MjQsMTIgKzQyNSwxNCBAQAogCQl4bGVuID0gKFBBR0VfQ0FDSEVfU0laRSAtIG9mZnNldCkgPj4gaW5vZGUtPmlfYmxrYml0czsKIAkJcGJsb2NrID0gbWV0YXBhZ2VfZ2V0X2Jsb2Nrcyhpbm9kZSwgbGJsb2NrLCAmeGxlbik7CiAJCWlmICghcGJsb2NrKSB7Ci0JCQkvKiBOZWVkIGJldHRlciBlcnJvciBoYW5kbGluZyAqLwogCQkJcHJpbnRrKEtFUk5fRVJSICJKRlM6IG1ldGFwYWdlX2dldF9ibG9ja3MgZmFpbGVkXG4iKTsKLQkJCWRlY19pbyhwYWdlLCBsYXN0X3dyaXRlX2NvbXBsZXRlKTsKKwkJCS8qCisJCQkgKiBXZSBhbHJlYWR5IGNhbGxlZCBpbmNfaW8oKSwgYnV0IGNhbid0IGNhbmNlbCBpdAorCQkJICogd2l0aCBkZWNfaW8oKSB1bnRpbCB3ZSdyZSBkb25lIHdpdGggdGhlIHBhZ2UKKwkJCSAqLworCQkJYmFkX2Jsb2NrcysrOwogCQkJY29udGludWU7CiAJCX0KLQkJc2V0X2JpdChNRVRBX2lvLCAmbXAtPmZsYWcpOwogCQlsZW4gPSBtaW4oeGxlbiwgKGludClKRlNfU0JJKGlub2RlLT5pX3NiKS0+bmJwZXJwYWdlKTsKIAogCQliaW8gPSBiaW9fYWxsb2MoR0ZQX05PRlMsIDEpOwpAQCAtNDU5LDYgKzQ2Miw5IEBACiAKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAorCWlmIChiYWRfYmxvY2tzKQorCQlnb3RvIGVycl9vdXQ7CisKIAlpZiAobnJfdW5kZXJ3YXkgPT0gMCkKIAkJZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwogCkBAIC00NzQsNyArNDgwLDkgQEAKIAliaW9fcHV0KGJpbyk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJZGVjX2lvKHBhZ2UsIGxhc3Rfd3JpdGVfY29tcGxldGUpOwotCitlcnJfb3V0OgorCXdoaWxlIChiYWRfYmxvY2tzLS0pCisJCWRlY19pbyhwYWdlLCBsYXN0X3dyaXRlX2NvbXBsZXRlKTsKIAlyZXR1cm4gLUVJTzsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc190eXBlcy5oIGIvZnMvamZzL2pmc190eXBlcy5oCmluZGV4IDY0OWY5ODEuLjQzZWEzNzEgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfdHlwZXMuaAorKysgYi9mcy9qZnMvamZzX3R5cGVzLmgKQEAgLTU4LDM1ICs1OCw2IEBACiAjZGVmaW5lCU9ORVMJCTB4ZmZmZmZmZmZ1CS8qIGFsbCBiaXQgb24JCSovCiAKIC8qCi0gKglsb2dpY2FsIHhkIChseGQpCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsZW46MjQ7Ci0JdW5zaWduZWQgb2ZmMTo4OwotCXUzMiBvZmYyOwotfSBseGRfdDsKLQotLyogbHhkX3QgZmllbGQgY29uc3RydWN0aW9uICovCi0jZGVmaW5lCUxYRGxlbmd0aChseGQsIGxlbmd0aDMyKQkoIChseGQpLT5sZW4gPSBsZW5ndGgzMiApCi0jZGVmaW5lCUxYRG9mZnNldChseGQsIG9mZnNldDY0KVwKLXtcCi0JKGx4ZCktPm9mZjEgPSAoKHM2NClvZmZzZXQ2NCkgPj4gMzI7XAotCShseGQpLT5vZmYyID0gKG9mZnNldDY0KSAmIDB4ZmZmZmZmZmY7XAotfQotCi0vKiBseGRfdCBmaWVsZCBleHRyYWN0aW9uICovCi0jZGVmaW5lCWxlbmd0aExYRChseGQpCSggKGx4ZCktPmxlbiApCi0jZGVmaW5lCW9mZnNldExYRChseGQpXAotCSggKChzNjQpKChseGQpLT5vZmYxKSkgPDwgMzIgfCAobHhkKS0+b2ZmMiApCi0KLS8qIGx4ZCBsaXN0ICovCi1zdHJ1Y3QgbHhkbGlzdCB7Ci0JczE2IG1heG5seGQ7Ci0JczE2IG5seGQ7Ci0JbHhkX3QgKmx4ZDsKLX07Ci0KLS8qCiAgKglwaHlzaWNhbCB4ZCAocHhkKQogICovCiB0eXBlZGVmIHN0cnVjdCB7CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX3h0cmVlLmMgYi9mcy9qZnMvamZzX3h0cmVlLmMKaW5kZXggYTI3ZTI2Yy4uZDY1NGE2NCAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc194dHJlZS5jCisrKyBiL2ZzL2pmcy9qZnNfeHRyZWUuYwpAQCAtMTY0LDExICsxNjQsOCBAQAogCQkvKiBpcyBsb29rdXAgb2Zmc2V0IGJleW9uZCBlb2YgPyAqLwogCQlzaXplID0gKCh1NjQpIGlwLT5pX3NpemUgKyAoSkZTX1NCSShpcC0+aV9zYiktPmJzaXplIC0gMSkpID4+CiAJCSAgICBKRlNfU0JJKGlwLT5pX3NiKS0+bDJic2l6ZTsKLQkJaWYgKGxzdGFydCA+PSBzaXplKSB7Ci0JCQlqZnNfZXJyKCJ4dExvb2t1cDogbHN0YXJ0ICgweCVseCkgPj0gc2l6ZSAoMHglbHgpIiwKLQkJCQkodWxvbmcpIGxzdGFydCwgKHVsb25nKSBzaXplKTsKKwkJaWYgKGxzdGFydCA+PSBzaXplKQogCQkJcmV0dXJuIDA7Ci0JCX0KIAl9CiAKIAkvKgpAQCAtMjIwLDI2NCArMjE3LDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLQotLyoKLSAqCXh0TG9va3VwTGlzdCgpCi0gKgotICogZnVuY3Rpb246IG1hcCBhIHNpbmdsZSBsb2dpY2FsIGV4dGVudCBpbnRvIGEgbGlzdCBvZiBwaHlzaWNhbCBleHRlbnQ7Ci0gKgotICogcGFyYW1ldGVyOgotICoJc3RydWN0IGlub2RlCSppcCwKLSAqCXN0cnVjdCBseGRsaXN0CSpseGRsaXN0LAlseGQgbGlzdCAoaW4pCi0gKglzdHJ1Y3QgeGFkbGlzdAkqeGFkbGlzdCwJeGFkIGxpc3QgKGluL291dCkKLSAqCWludAkJZmxhZykKLSAqCi0gKiBjb3ZlcmFnZSBvZiBseGQgYnkgeGFkIHVuZGVyIGFzc3VtcHRpb24gb2YKLSAqIC4gbHhkJ3MgYXJlIG9yZGVyZWQgYW5kIGRpc2pvaW50LgotICogLiB4YWQncyBhcmUgb3JkZXJlZCBhbmQgZGlzam9pbnQuCi0gKgotICogcmV0dXJuOgotICoJMDoJc3VjY2VzcwotICoKLSAqIG5vdGU6IGEgcGFnZSBiZWluZyB3cml0dGVuIChldmVuIGEgc2luZ2xlIGJ5dGUpIGlzIGJhY2tlZCBmdWxseSwKLSAqCWV4Y2VwdCB0aGUgbGFzdCBwYWdlIHdoaWNoIGlzIG9ubHkgYmFja2VkIHdpdGggYmxvY2tzCi0gKglyZXF1aXJlZCB0byBjb3ZlciB0aGUgbGFzdCBieXRlOwotICoJdGhlIGV4dGVudCBiYWNraW5nIGEgcGFnZSBpcyBmdWxseSBjb250YWluZWQgd2l0aGluIGFuIHhhZDsKLSAqLwotaW50IHh0TG9va3VwTGlzdChzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgbHhkbGlzdCAqIGx4ZGxpc3QsCi0JCSBzdHJ1Y3QgeGFkbGlzdCAqIHhhZGxpc3QsIGludCBmbGFnKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGJ0c3RhY2sgYnRzdGFjazsKLQlpbnQgY21wOwotCXM2NCBibjsKLQlzdHJ1Y3QgbWV0YXBhZ2UgKm1wOwotCXh0cGFnZV90ICpwOwotCWludCBpbmRleDsKLQlseGRfdCAqbHhkOwotCXhhZF90ICp4YWQsICpweGQ7Ci0JczY0IHNpemUsIGxzdGFydCwgbGVuZCwgeHN0YXJ0LCB4ZW5kLCBwc3RhcnQ7Ci0JczY0IGxsZW4sIHhsZW4sIHBsZW47Ci0JczY0IHhhZGRyLCBwYWRkcjsKLQlpbnQgbmx4ZCwgbnB4ZCwgbWF4bnB4ZDsKLQotCW5weGQgPSB4YWRsaXN0LT5ueGFkID0gMDsKLQltYXhucHhkID0geGFkbGlzdC0+bWF4bnhhZDsKLQlweGQgPSB4YWRsaXN0LT54YWQ7Ci0KLQlubHhkID0gbHhkbGlzdC0+bmx4ZDsKLQlseGQgPSBseGRsaXN0LT5seGQ7Ci0KLQlsc3RhcnQgPSBvZmZzZXRMWEQobHhkKTsKLQlsbGVuID0gbGVuZ3RoTFhEKGx4ZCk7Ci0JbGVuZCA9IGxzdGFydCArIGxsZW47Ci0KLQlzaXplID0gKGlwLT5pX3NpemUgKyAoSkZTX1NCSShpcC0+aV9zYiktPmJzaXplIC0gMSkpID4+Ci0JICAgIEpGU19TQkkoaXAtPmlfc2IpLT5sMmJzaXplOwotCi0JLyoKLQkgKiBzZWFyY2ggZm9yIHRoZSB4YWQgZW50cnkgY292ZXJpbmcgdGhlIGxvZ2ljYWwgZXh0ZW50Ci0JICovCi0gICAgICBzZWFyY2g6Ci0JaWYgKGxzdGFydCA+PSBzaXplKQotCQlyZXR1cm4gMDsKLQotCWlmICgocmMgPSB4dFNlYXJjaChpcCwgbHN0YXJ0LCBOVUxMLCAmY21wLCAmYnRzdGFjaywgMCkpKQotCQlyZXR1cm4gcmM7Ci0KLQkvKgotCSAqCWNvbXB1dGUgdGhlIHBoeXNpY2FsIGV4dGVudCBjb3ZlcmluZyBsb2dpY2FsIGV4dGVudAotCSAqCi0JICogTi5CLiBzZWFyY2ggbWF5IGhhdmUgZmFpbGVkIChlLmcuLCBob2xlIGluIHNwYXJzZSBmaWxlKSwKLQkgKiBhbmQgcmV0dXJuZWQgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGVudHJ5LgotCSAqLwotLy9tYXA6Ci0JLyogcmV0cmlldmUgc2VhcmNoIHJlc3VsdCAqLwotCVhUX0dFVFNFQVJDSChpcCwgYnRzdGFjay50b3AsIGJuLCBtcCwgcCwgaW5kZXgpOwotCi0JLyogaXMgeGFkIG9uIHRoZSBuZXh0IHNpYmxpbmcgcGFnZSA/ICovCi0JaWYgKGluZGV4ID09IGxlMTZfdG9fY3B1KHAtPmhlYWRlci5uZXh0aW5kZXgpKSB7Ci0JCWlmIChwLT5oZWFkZXIuZmxhZyAmIEJUX1JPT1QpCi0JCQlnb3RvIG1hcGVuZDsKLQotCQlpZiAoKGJuID0gbGU2NF90b19jcHUocC0+aGVhZGVyLm5leHQpKSA9PSAwKQotCQkJZ290byBtYXBlbmQ7Ci0KLQkJWFRfUFVUUEFHRShtcCk7Ci0KLQkJLyogZ2V0IG5leHQgc2libGluZyBwYWdlICovCi0JCVhUX0dFVFBBR0UoaXAsIGJuLCBtcCwgUFNJWkUsIHAsIHJjKTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIHJjOwotCi0JCWluZGV4ID0gWFRFTlRSWVNUQVJUOwotCX0KLQotCXhhZCA9ICZwLT54YWRbaW5kZXhdOwotCi0JLyoKLQkgKiBpcyBseGQgY292ZXJlZCBieSB4YWQgPwotCSAqLwotICAgICAgY29tcGFyZToKLQl4c3RhcnQgPSBvZmZzZXRYQUQoeGFkKTsKLQl4bGVuID0gbGVuZ3RoWEFEKHhhZCk7Ci0JeGVuZCA9IHhzdGFydCArIHhsZW47Ci0JeGFkZHIgPSBhZGRyZXNzWEFEKHhhZCk7Ci0KLSAgICAgIGNvbXBhcmUxOgotCWlmICh4c3RhcnQgPCBsc3RhcnQpCi0JCWdvdG8gY29tcGFyZTI7Ci0KLQkvKiAobHN0YXJ0IDw9IHhzdGFydCkgKi8KLQotCS8qIGx4ZCBpcyBOT1QgY292ZXJlZCBieSB4YWQgKi8KLQlpZiAobGVuZCA8PSB4c3RhcnQpIHsKLQkJLyoKLQkJICogZ2V0IG5leHQgbHhkCi0JCSAqLwotCQlpZiAoLS1ubHhkID09IDApCi0JCQlnb3RvIG1hcGVuZDsKLQkJbHhkKys7Ci0KLQkJbHN0YXJ0ID0gb2Zmc2V0TFhEKGx4ZCk7Ci0JCWxsZW4gPSBsZW5ndGhMWEQobHhkKTsKLQkJbGVuZCA9IGxzdGFydCArIGxsZW47Ci0JCWlmIChsc3RhcnQgPj0gc2l6ZSkKLQkJCWdvdG8gbWFwZW5kOwotCi0JCS8qIGNvbXBhcmUgd2l0aCB0aGUgY3VycmVudCB4YWQgKi8KLQkJZ290byBjb21wYXJlMTsKLQl9Ci0JLyogbHhkIGlzIGNvdmVyZWQgYnkgeGFkICovCi0JZWxzZSB7CQkJLyogKHhzdGFydCA8IGxlbmQpICovCi0KLQkJLyogaW5pdGlhbGl6ZSBuZXcgcHhkICovCi0JCXBzdGFydCA9IHhzdGFydDsKLQkJcGxlbiA9IG1pbihsZW5kIC0geHN0YXJ0LCB4bGVuKTsKLQkJcGFkZHIgPSB4YWRkcjsKLQotCQlnb3RvIGNvdmVyOwotCX0KLQotCS8qICh4c3RhcnQgPCBsc3RhcnQpICovCi0gICAgICBjb21wYXJlMjoKLQkvKiBseGQgaXMgY292ZXJlZCBieSB4YWQgKi8KLQlpZiAobHN0YXJ0IDwgeGVuZCkgewotCQkvKiBpbml0aWFsaXplIG5ldyBweGQgKi8KLQkJcHN0YXJ0ID0gbHN0YXJ0OwotCQlwbGVuID0gbWluKHhlbmQgLSBsc3RhcnQsIGxsZW4pOwotCQlwYWRkciA9IHhhZGRyICsgKGxzdGFydCAtIHhzdGFydCk7Ci0KLQkJZ290byBjb3ZlcjsKLQl9Ci0JLyogbHhkIGlzIE5PVCBjb3ZlcmVkIGJ5IHhhZCAqLwotCWVsc2UgewkJCS8qICh4ZW5kIDw9IGxzdGFydCkgKi8KLQotCQkvKgotCQkgKiBnZXQgbmV4dCB4YWQKLQkJICoKLQkJICogbGluZWFyIHNlYXJjaCBuZXh0IHhhZCBjb3ZlcmluZyBseGQgb24KLQkJICogdGhlIGN1cnJlbnQgeGFkIHBhZ2UsIGFuZCB0aGVuIHRyZWUgc2VhcmNoCi0JCSAqLwotCQlpZiAoaW5kZXggPT0gbGUxNl90b19jcHUocC0+aGVhZGVyLm5leHRpbmRleCkgLSAxKSB7Ci0JCQlpZiAocC0+aGVhZGVyLmZsYWcgJiBCVF9ST09UKQotCQkJCWdvdG8gbWFwZW5kOwotCi0JCQlYVF9QVVRQQUdFKG1wKTsKLQkJCWdvdG8gc2VhcmNoOwotCQl9IGVsc2UgewotCQkJaW5kZXgrKzsKLQkJCXhhZCsrOwotCi0JCQkvKiBjb21wYXJlIHdpdGggbmV3IHhhZCAqLwotCQkJZ290byBjb21wYXJlOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBseGQgaXMgY292ZXJlZCBieSB4YWQgYW5kIGEgbmV3IHB4ZCBoYXMgYmVlbiBpbml0aWFsaXplZAotCSAqIChsc3RhcnQgPD0geHN0YXJ0IDwgbGVuZCkgb3IgKHhzdGFydCA8IGxzdGFydCA8IHhlbmQpCi0JICovCi0gICAgICBjb3ZlcjoKLQkvKiBmaW5hbGl6ZSBweGQgY29ycmVzcG9uZGluZyB0byBjdXJyZW50IHhhZCAqLwotCVhUX1BVVEVOVFJZKHB4ZCwgeGFkLT5mbGFnLCBwc3RhcnQsIHBsZW4sIHBhZGRyKTsKLQotCWlmICgrK25weGQgPj0gbWF4bnB4ZCkKLQkJZ290byBtYXBlbmQ7Ci0JcHhkKys7Ci0KLQkvKgotCSAqIGx4ZCBpcyBmdWxseSBjb3ZlcmVkIGJ5IHhhZAotCSAqLwotCWlmIChsZW5kIDw9IHhlbmQpIHsKLQkJLyoKLQkJICogZ2V0IG5leHQgbHhkCi0JCSAqLwotCQlpZiAoLS1ubHhkID09IDApCi0JCQlnb3RvIG1hcGVuZDsKLQkJbHhkKys7Ci0KLQkJbHN0YXJ0ID0gb2Zmc2V0TFhEKGx4ZCk7Ci0JCWxsZW4gPSBsZW5ndGhMWEQobHhkKTsKLQkJbGVuZCA9IGxzdGFydCArIGxsZW47Ci0JCWlmIChsc3RhcnQgPj0gc2l6ZSkKLQkJCWdvdG8gbWFwZW5kOwotCi0JCS8qCi0JCSAqIHRlc3QgZm9yIG9sZCB4YWQgY292ZXJpbmcgbmV3IGx4ZAotCQkgKiAob2xkIHhzdGFydCA8IG5ldyBsc3RhcnQpCi0JCSAqLwotCQlnb3RvIGNvbXBhcmUyOwotCX0KLQkvKgotCSAqIGx4ZCBpcyBwYXJ0aWFsbHkgY292ZXJlZCBieSB4YWQKLQkgKi8KLQllbHNlIHsJCQkvKiAoeGVuZCA8IGxlbmQpICovCi0KLQkJLyoKLQkJICogZ2V0IG5leHQgeGFkCi0JCSAqCi0JCSAqIGxpbmVhciBzZWFyY2ggbmV4dCB4YWQgY292ZXJpbmcgbHhkIG9uCi0JCSAqIHRoZSBjdXJyZW50IHhhZCBwYWdlLCBhbmQgdGhlbiBuZXh0IHhhZCBwYWdlIHNlYXJjaAotCQkgKi8KLQkJaWYgKGluZGV4ID09IGxlMTZfdG9fY3B1KHAtPmhlYWRlci5uZXh0aW5kZXgpIC0gMSkgewotCQkJaWYgKHAtPmhlYWRlci5mbGFnICYgQlRfUk9PVCkKLQkJCQlnb3RvIG1hcGVuZDsKLQotCQkJaWYgKChibiA9IGxlNjRfdG9fY3B1KHAtPmhlYWRlci5uZXh0KSkgPT0gMCkKLQkJCQlnb3RvIG1hcGVuZDsKLQotCQkJWFRfUFVUUEFHRShtcCk7Ci0KLQkJCS8qIGdldCBuZXh0IHNpYmxpbmcgcGFnZSAqLwotCQkJWFRfR0VUUEFHRShpcCwgYm4sIG1wLCBQU0laRSwgcCwgcmMpOwotCQkJaWYgKHJjKQotCQkJCXJldHVybiByYzsKLQotCQkJaW5kZXggPSBYVEVOVFJZU1RBUlQ7Ci0JCQl4YWQgPSAmcC0+eGFkW2luZGV4XTsKLQkJfSBlbHNlIHsKLQkJCWluZGV4Kys7Ci0JCQl4YWQrKzsKLQkJfQotCi0JCS8qCi0JCSAqIHRlc3QgZm9yIG5ldyB4YWQgY292ZXJpbmcgb2xkIGx4ZAotCQkgKiAob2xkIGxzdGFydCA8IG5ldyB4c3RhcnQpCi0JCSAqLwotCQlnb3RvIGNvbXBhcmU7Ci0JfQotCi0gICAgICBtYXBlbmQ6Ci0JeGFkbGlzdC0+bnhhZCA9IG5weGQ7Ci0KLS8vb3V0OgotCVhUX1BVVFBBR0UobXApOwotCi0JcmV0dXJuIHJjOwotfQotCi0KIC8qCiAgKgl4dFNlYXJjaCgpCiAgKgpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc194dHJlZS5oIGIvZnMvamZzL2pmc194dHJlZS5oCmluZGV4IDcwODE1YzhhMy4uMDhjMGM3NCAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc194dHJlZS5oCisrKyBiL2ZzL2pmcy9qZnNfeHRyZWUuaApAQCAtMTEwLDggKzExMCw2IEBACiAgKi8KIGV4dGVybiBpbnQgeHRMb29rdXAoc3RydWN0IGlub2RlICppcCwgczY0IGxzdGFydCwgczY0IGxsZW4sCiAJCSAgICBpbnQgKnBmbGFnLCBzNjQgKiBwYWRkciwgaW50ICpwbGVuLCBpbnQgZmxhZyk7Ci1leHRlcm4gaW50IHh0TG9va3VwTGlzdChzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgbHhkbGlzdCAqIGx4ZGxpc3QsCi0JCQlzdHJ1Y3QgeGFkbGlzdCAqIHhhZGxpc3QsIGludCBmbGFnKTsKIGV4dGVybiB2b2lkIHh0SW5pdFJvb3QodGlkX3QgdGlkLCBzdHJ1Y3QgaW5vZGUgKmlwKTsKIGV4dGVybiBpbnQgeHRJbnNlcnQodGlkX3QgdGlkLCBzdHJ1Y3QgaW5vZGUgKmlwLAogCQkgICAgaW50IHhmbGFnLCBzNjQgeG9mZiwgaW50IHhsZW4sIHM2NCAqIHhhZGRycCwgaW50IGZsYWcpOwpkaWZmIC0tZ2l0IGEvZnMvamZzL3N1cGVyLmMgYi9mcy9qZnMvc3VwZXIuYwppbmRleCBiMzdkMWY3Li42ZjIxYWRmIDEwMDY0NAotLS0gYS9mcy9qZnMvc3VwZXIuYworKysgYi9mcy9qZnMvc3VwZXIuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZXhwb3J0ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIApAQCAtMTY4LDYgKzE2OSw5IEBACiAJYnVmLT5mX2ZpbGVzID0gbWF4aW5vZGVzOwogCWJ1Zi0+Zl9mZnJlZSA9IG1heGlub2RlcyAtIChhdG9taWNfcmVhZCgmaW1hcC0+aW1fbnVtaW5vcykgLQogCQkJCSAgICBhdG9taWNfcmVhZCgmaW1hcC0+aW1fbnVtZnJlZSkpOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpY3JjMzJfbGUoMCwgc2JpLT51dWlkLCBzaXplb2Yoc2JpLT51dWlkKS8yKTsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSAodTMyKWNyYzMyX2xlKDAsIHNiaS0+dXVpZCArIHNpemVvZihzYmktPnV1aWQpLzIsCisJCQkJCXNpemVvZihzYmktPnV1aWQpLzIpOwogCiAJYnVmLT5mX25hbWVsZW4gPSBKRlNfTkFNRV9NQVg7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9uZnMvY2xpZW50LmMgYi9mcy9uZnMvY2xpZW50LmMKaW5kZXggNTc0MTU4YS4uMjI3NzQyMSAxMDA2NDQKLS0tIGEvZnMvbmZzL2NsaWVudC5jCisrKyBiL2ZzL25mcy9jbGllbnQuYwpAQCAtMTYwNiw4ICsxNjA2LDYgQEAKIAlpZiAoIXByb2NfZnNfbmZzKQogCQlnb3RvIGVycm9yXzA7CiAKLQlwcm9jX2ZzX25mcy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQogCS8qIGEgZmlsZSBvZiBzZXJ2ZXJzIHdpdGggd2hpY2ggd2UncmUgZGVhbGluZyAqLwogCXAgPSBwcm9jX2NyZWF0ZSgic2VydmVycyIsIFNfSUZSRUd8U19JUlVHTywKIAkJCXByb2NfZnNfbmZzLCAmbmZzX3NlcnZlcl9saXN0X2ZvcHMpOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNlLmMgYi9mcy9wcm9jL2Jhc2UuYwppbmRleCBhZWY2ZDU1Li5lMGFmZDMyIDEwMDY0NAotLS0gYS9mcy9wcm9jL2Jhc2UuYworKysgYi9mcy9wcm9jL2Jhc2UuYwpAQCAtMTQ2LDE1ICsxNDYsMjIgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnNfc3RydWN0ICpnZXRfZnNfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3N0YXRpYyBpbnQgZ2V0X2ZzX3BhdGgoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcGF0aCAqcGF0aCwgYm9vbCByb290KQogewogCXN0cnVjdCBmc19zdHJ1Y3QgKmZzOworCWludCByZXN1bHQgPSAtRU5PRU5UOworCiAJdGFza19sb2NrKHRhc2spOwogCWZzID0gdGFzay0+ZnM7Ci0JaWYoZnMpCi0JCWF0b21pY19pbmMoJmZzLT5jb3VudCk7CisJaWYgKGZzKSB7CisJCXJlYWRfbG9jaygmZnMtPmxvY2spOworCQkqcGF0aCA9IHJvb3QgPyBmcy0+cm9vdCA6IGZzLT5wd2Q7CisJCXBhdGhfZ2V0KHBhdGgpOworCQlyZWFkX3VubG9jaygmZnMtPmxvY2spOworCQlyZXN1bHQgPSAwOworCX0KIAl0YXNrX3VubG9jayh0YXNrKTsKLQlyZXR1cm4gZnM7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludCBnZXRfbnJfdGhyZWFkcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKQEAgLTE3Miw0MiArMTc5LDI0IEBACiBzdGF0aWMgaW50IHByb2NfY3dkX2xpbmsoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhdGggKnBhdGgpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gZ2V0X3Byb2NfdGFzayhpbm9kZSk7Ci0Jc3RydWN0IGZzX3N0cnVjdCAqZnMgPSBOVUxMOwogCWludCByZXN1bHQgPSAtRU5PRU5UOwogCiAJaWYgKHRhc2spIHsKLQkJZnMgPSBnZXRfZnNfc3RydWN0KHRhc2spOworCQlyZXN1bHQgPSBnZXRfZnNfcGF0aCh0YXNrLCBwYXRoLCAwKTsKIAkJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwogCX0KLQlpZiAoZnMpIHsKLQkJcmVhZF9sb2NrKCZmcy0+bG9jayk7Ci0JCSpwYXRoID0gZnMtPnB3ZDsKLQkJcGF0aF9nZXQoJmZzLT5wd2QpOwotCQlyZWFkX3VubG9jaygmZnMtPmxvY2spOwotCQlyZXN1bHQgPSAwOwotCQlwdXRfZnNfc3RydWN0KGZzKTsKLQl9CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludCBwcm9jX3Jvb3RfbGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGF0aCAqcGF0aCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBnZXRfcHJvY190YXNrKGlub2RlKTsKLQlzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IE5VTEw7CiAJaW50IHJlc3VsdCA9IC1FTk9FTlQ7CiAKIAlpZiAodGFzaykgewotCQlmcyA9IGdldF9mc19zdHJ1Y3QodGFzayk7CisJCXJlc3VsdCA9IGdldF9mc19wYXRoKHRhc2ssIHBhdGgsIDEpOwogCQlwdXRfdGFza19zdHJ1Y3QodGFzayk7CiAJfQotCWlmIChmcykgewotCQlyZWFkX2xvY2soJmZzLT5sb2NrKTsKLQkJKnBhdGggPSBmcy0+cm9vdDsKLQkJcGF0aF9nZXQoJmZzLT5yb290KTsKLQkJcmVhZF91bmxvY2soJmZzLT5sb2NrKTsKLQkJcmVzdWx0ID0gMDsKLQkJcHV0X2ZzX3N0cnVjdChmcyk7Ci0JfQogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTU5Niw3ICs1ODUsNiBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGdldF9wcm9jX3Rhc2soaW5vZGUpOwogCXN0cnVjdCBuc3Byb3h5ICpuc3A7CiAJc3RydWN0IG1udF9uYW1lc3BhY2UgKm5zID0gTlVMTDsKLQlzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IE5VTEw7CiAJc3RydWN0IHBhdGggcm9vdDsKIAlzdHJ1Y3QgcHJvY19tb3VudHMgKnA7CiAJaW50IHJldCA9IC1FSU5WQUw7CkBAIC02MTAsMjIgKzU5OCwxNiBAQAogCQkJCWdldF9tbnRfbnMobnMpOwogCQl9CiAJCXJjdV9yZWFkX3VubG9jaygpOwotCQlpZiAobnMpCi0JCQlmcyA9IGdldF9mc19zdHJ1Y3QodGFzayk7CisJCWlmIChucyAmJiBnZXRfZnNfcGF0aCh0YXNrLCAmcm9vdCwgMSkgPT0gMCkKKwkJCXJldCA9IDA7CiAJCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKIAl9CiAKIAlpZiAoIW5zKQogCQlnb3RvIGVycjsKLQlpZiAoIWZzKQorCWlmIChyZXQpCiAJCWdvdG8gZXJyX3B1dF9uczsKIAotCXJlYWRfbG9jaygmZnMtPmxvY2spOwotCXJvb3QgPSBmcy0+cm9vdDsKLQlwYXRoX2dldCgmcm9vdCk7Ci0JcmVhZF91bmxvY2soJmZzLT5sb2NrKTsKLQlwdXRfZnNfc3RydWN0KGZzKTsKLQogCXJldCA9IC1FTk9NRU07CiAJcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9jX21vdW50cyksIEdGUF9LRVJORUwpOwogCWlmICghcCkKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvZ2VuZXJpYy5jIGIvZnMvcHJvYy9nZW5lcmljLmMKaW5kZXggNWQyOTg5ZS4uZmE2NzhhYiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9nZW5lcmljLmMKKysrIGIvZnMvcHJvYy9nZW5lcmljLmMKQEAgLTM3LDcgKzM3LDcgQEAKICNkZWZpbmUgUFJPQ19CTE9DS19TSVpFCShQQUdFX1NJWkUgLSAxMDI0KQogCiBzdGF0aWMgc3NpemVfdAotcHJvY19maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsCitfX3Byb2NfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbmJ5dGVzLAogCSAgICAgICBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGlub2RlICogaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwpAQCAtMTgzLDE5ICsxODMsNDcgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKK3Byb2NfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbmJ5dGVzLAorCSAgICAgICBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisJc3NpemVfdCBydiA9IC1FSU87CisKKwlzcGluX2xvY2soJnBkZS0+cGRlX3VubG9hZF9sb2NrKTsKKwlpZiAoIXBkZS0+cHJvY19mb3BzKSB7CisJCXNwaW5fdW5sb2NrKCZwZGUtPnBkZV91bmxvYWRfbG9jayk7CisJCXJldHVybiBydjsKKwl9CisJcGRlLT5wZGVfdXNlcnMrKzsKKwlzcGluX3VubG9jaygmcGRlLT5wZGVfdW5sb2FkX2xvY2spOworCisJcnYgPSBfX3Byb2NfZmlsZV9yZWFkKGZpbGUsIGJ1ZiwgbmJ5dGVzLCBwcG9zKTsKKworCXBkZV91c2Vyc19kZWMocGRlKTsKKwlyZXR1cm4gcnY7Cit9CisKK3N0YXRpYyBzc2l6ZV90CiBwcm9jX2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqIGRwOwotCQotCWRwID0gUERFKGlub2RlKTsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwlzc2l6ZV90IHJ2ID0gLUVJTzsKIAotCWlmICghZHAtPndyaXRlX3Byb2MpCi0JCXJldHVybiAtRUlPOworCWlmIChwZGUtPndyaXRlX3Byb2MpIHsKKwkJc3Bpbl9sb2NrKCZwZGUtPnBkZV91bmxvYWRfbG9jayk7CisJCWlmICghcGRlLT5wcm9jX2ZvcHMpIHsKKwkJCXNwaW5fdW5sb2NrKCZwZGUtPnBkZV91bmxvYWRfbG9jayk7CisJCQlyZXR1cm4gcnY7CisJCX0KKwkJcGRlLT5wZGVfdXNlcnMrKzsKKwkJc3Bpbl91bmxvY2soJnBkZS0+cGRlX3VubG9hZF9sb2NrKTsKIAotCS8qIEZJWE1FOiBkb2VzIHRoaXMgcm91dGluZSBuZWVkIHBwb3M/ICBwcm9iYWJseS4uLiAqLwotCXJldHVybiBkcC0+d3JpdGVfcHJvYyhmaWxlLCBidWZmZXIsIGNvdW50LCBkcC0+ZGF0YSk7CisJCS8qIEZJWE1FOiBkb2VzIHRoaXMgcm91dGluZSBuZWVkIHBwb3M/ICBwcm9iYWJseS4uLiAqLworCQlydiA9IHBkZS0+d3JpdGVfcHJvYyhmaWxlLCBidWZmZXIsIGNvdW50LCBwZGUtPmRhdGEpOworCQlwZGVfdXNlcnNfZGVjKHBkZSk7CisJfQorCXJldHVybiBydjsKIH0KIAogCkBAIC0zMDcsNiArMzM1LDIxIEBACiAvKgogICogUmV0dXJuIGFuIGlub2RlIG51bWJlciBiZXR3ZWVuIFBST0NfRFlOQU1JQ19GSVJTVCBhbmQKICAqIDB4ZmZmZmZmZmYsIG9yIHplcm8gb24gZmFpbHVyZS4KKyAqCisgKiBDdXJyZW50IGlub2RlIGFsbG9jYXRpb25zIGluIHRoZSBwcm9jLWZzIChoZXgtbnVtYmVycyk6CisgKgorICogMDAwMDAwMDAJCXJlc2VydmVkCisgKiAwMDAwMDAwMS0wMDAwMGZmZglzdGF0aWMgZW50cmllcwkoZ29uZXJzKQorICogICAgICAwMDEJCXJvb3QtaW5vCisgKgorICogMDAwMDEwMDAtMDAwMDFmZmYJdW51c2VkCisgKiAwMDAxeHh4eC03ZmZmeHh4eAlwaWQtZGlyIGVudHJpZXMgZm9yIHBpZCAxLTdmZmYKKyAqIDgwMDAwMDAwLWVmZmZmZmZmCXVudXNlZAorICogZjAwMDAwMDAtZmZmZmZmZmYJZHluYW1pYyBlbnRyaWVzCisgKgorICogR29hbDoKKyAqCU9uY2Ugd2Ugc3BsaXQgdGhlIHRoaW5nIGludG8gc2V2ZXJhbCB2aXJ0dWFsIGZpbGVzeXN0ZW1zLAorICoJd2Ugd2lsbCBnZXQgcmlkIG9mIG1hZ2ljYWwgcmFuZ2VzIChhbmQgdGhpcyBjb21tZW50LCBCVFcpLgogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGdldF9pbm9kZV9udW1iZXIodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvaW5vZGUtYWxsb2MudHh0IGIvZnMvcHJvYy9pbm9kZS1hbGxvYy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MjEyZjkuLjAwMDAwMDAKLS0tIGEvZnMvcHJvYy9pbm9kZS1hbGxvYy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1DdXJyZW50IGlub2RlIGFsbG9jYXRpb25zIGluIHRoZSBwcm9jLWZzIChoZXgtbnVtYmVycyk6Ci0KLSAgMDAwMDAwMDAJCXJlc2VydmVkCi0gIDAwMDAwMDAxLTAwMDAwZmZmCXN0YXRpYyBlbnRyaWVzCShnb25lcnMpCi0gICAgICAgMDAxCQlyb290LWlubwotCi0gIDAwMDAxMDAwLTAwMDAxZmZmCXVudXNlZAotICAwMDAxeHh4eC03ZmZmeHh4eAlwaWQtZGlyIGVudHJpZXMgZm9yIHBpZCAxLTdmZmYKLSAgODAwMDAwMDAtZWZmZmZmZmYJdW51c2VkCi0gIGYwMDAwMDAwLWZmZmZmZmZmCWR5bmFtaWMgZW50cmllcwotCi1Hb2FsOgotCWEpIG9uY2Ugd2UnbGwgc3BsaXQgdGhlIHRoaW5nIGludG8gc2V2ZXJhbCB2aXJ0dWFsIGZpbGVzeXN0ZW1zIHdlCi0Jd2lsbCBnZXQgcmlkIG9mIG1hZ2ljYWwgcmFuZ2VzIChhbmQgdGhpcyBmaWxlLCBCVFcpLgpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9pbm9kZS5jIGIvZnMvcHJvYy9pbm9kZS5jCmluZGV4IGQ4YmI1YzYuLmQ3OGFkZTMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvaW5vZGUuYworKysgYi9mcy9wcm9jL2lub2RlLmMKQEAgLTU4LDExICs1OCw4IEBACiAKIAkvKiBMZXQgZ28gb2YgYW55IGFzc29jaWF0ZWQgcHJvYyBkaXJlY3RvcnkgZW50cnkgKi8KIAlkZSA9IFBST0NfSShpbm9kZSktPnBkZTsKLQlpZiAoZGUpIHsKLQkJaWYgKGRlLT5vd25lcikKLQkJCW1vZHVsZV9wdXQoZGUtPm93bmVyKTsKKwlpZiAoZGUpCiAJCWRlX3B1dChkZSk7Ci0JfQogCWlmIChQUk9DX0koaW5vZGUpLT5zeXNjdGwpCiAJCXN5c2N0bF9oZWFkX3B1dChQUk9DX0koaW5vZGUpLT5zeXNjdGwpOwogCWNsZWFyX2lub2RlKGlub2RlKTsKQEAgLTEyNyw3ICsxMjQsNyBAQAogCQljb21wbGV0ZShwZGUtPnBkZV91bmxvYWRfY29tcGxldGlvbik7CiB9CiAKLXN0YXRpYyB2b2lkIHBkZV91c2Vyc19kZWMoc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUpCit2b2lkIHBkZV91c2Vyc19kZWMoc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUpCiB7CiAJc3Bpbl9sb2NrKCZwZGUtPnBkZV91bmxvYWRfbG9jayk7CiAJX19wZGVfdXNlcnNfZGVjKHBkZSk7CkBAIC00NDksMTIgKzQ0Niw5IEBACiB7CiAJc3RydWN0IGlub2RlICogaW5vZGU7CiAKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGRlLT5vd25lcikpCi0JCWdvdG8gb3V0X21vZDsKLQogCWlub2RlID0gaWdldF9sb2NrZWQoc2IsIGlubyk7CiAJaWYgKCFpbm9kZSkKLQkJZ290byBvdXRfaW5vOworCQlyZXR1cm4gTlVMTDsKIAlpZiAoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykgewogCQlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJCVBST0NfSShpbm9kZSktPmZkID0gMDsKQEAgLTQ4NSwxNiArNDc5LDkgQEAKIAkJCX0KIAkJfQogCQl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKLQl9IGVsc2UgewotCSAgICAgICBtb2R1bGVfcHV0KGRlLT5vd25lcik7CisJfSBlbHNlCiAJICAgICAgIGRlX3B1dChkZSk7Ci0JfQogCXJldHVybiBpbm9kZTsKLQotb3V0X2lubzoKLQltb2R1bGVfcHV0KGRlLT5vd25lcik7Ci1vdXRfbW9kOgotCXJldHVybiBOVUxMOwogfQkJCQogCiBpbnQgcHJvY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcykKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvaW50ZXJuYWwuaCBiL2ZzL3Byb2MvaW50ZXJuYWwuaAppbmRleCBjZDUzZmY4Li5mNmRiOTYxIDEwMDY0NAotLS0gYS9mcy9wcm9jL2ludGVybmFsLmgKKysrIGIvZnMvcHJvYy9pbnRlcm5hbC5oCkBAIC05MSwzICs5MSw0IEBACiAJaW50ICgqcmVsZWFzZSkoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwogCXN0cnVjdCBsaXN0X2hlYWQgbGg7CiB9Owordm9pZCBwZGVfdXNlcnNfZGVjKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlKTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcHJvY190dHkuYyBiL2ZzL3Byb2MvcHJvY190dHkuYwppbmRleCBkMTUzOTQ2Li40YTllMGY2IDEwMDY0NAotLS0gYS9mcy9wcm9jL3Byb2NfdHR5LmMKKysrIGIvZnMvcHJvYy9wcm9jX3R0eS5jCkBAIC0xNTIsNyArMTUyLDYgQEAKIAlpZiAoIWVudCkKIAkJcmV0dXJuOwogCWVudC0+cmVhZF9wcm9jID0gZHJpdmVyLT5vcHMtPnJlYWRfcHJvYzsKLQllbnQtPm93bmVyID0gZHJpdmVyLT5vd25lcjsKIAllbnQtPmRhdGEgPSBkcml2ZXI7CiAKIAlkcml2ZXItPnByb2NfZW50cnkgPSBlbnQ7CmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmMKaW5kZXggOTQwNjM4NC4uYjBhZTBiZSAxMDA2NDQKLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jCisrKyBiL2ZzL3Byb2MvdGFza19tbXUuYwpAQCAtNjkzLDggKzY5Myw4IEBACiAJCWdvdG8gb3V0X3BhZ2VzOwogCX0KIAotCXBtLm91dCA9ICh1NjQgKilidWY7Ci0JcG0uZW5kID0gKHU2NCAqKShidWYgKyBjb3VudCk7CisJcG0ub3V0ID0gKHU2NCBfX3VzZXIgKilidWY7CisJcG0uZW5kID0gKHU2NCBfX3VzZXIgKikoYnVmICsgY291bnQpOwogCiAJcGFnZW1hcF93YWxrLnBtZF9lbnRyeSA9IHBhZ2VtYXBfcHRlX3JhbmdlOwogCXBhZ2VtYXBfd2Fsay5wdGVfaG9sZSA9IHBhZ2VtYXBfcHRlX2hvbGU7CkBAIC03MjAsOSArNzIwLDkgQEAKIAlpZiAocmV0ID09IFBNX0VORF9PRl9CVUZGRVIpCiAJCXJldCA9IDA7CiAJLyogZG9uJ3QgbmVlZCBtbWFwX3NlbSBmb3IgdGhlc2UsIGJ1dCB0aGlzIGxvb2tzIGNsZWFuZXIgKi8KLQkqcHBvcyArPSAoY2hhciAqKXBtLm91dCAtIGJ1ZjsKKwkqcHBvcyArPSAoY2hhciBfX3VzZXIgKilwbS5vdXQgLSBidWY7CiAJaWYgKCFyZXQpCi0JCXJldCA9IChjaGFyICopcG0ub3V0IC0gYnVmOworCQlyZXQgPSAoY2hhciBfX3VzZXIgKilwbS5vdXQgLSBidWY7CiAKIG91dF9wYWdlczoKIAlmb3IgKDsgcGFnZWNvdW50OyBwYWdlY291bnQtLSkgewpkaWZmIC0tZ2l0IGEvZnMvcHJvYy91cHRpbWUuYyBiL2ZzL3Byb2MvdXB0aW1lLmMKaW5kZXggZGYyNmFhOC4uMGMxMGEwYiAxMDA2NDQKLS0tIGEvZnMvcHJvYy91cHRpbWUuYworKysgYi9mcy9wcm9jL3VwdGltZS5jCkBAIC0xLDQ1ICsxLDQzIEBACisjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRpbWUuaD4KIAotc3RhdGljIGludCBwcm9jX2NhbGNfbWV0cmljcyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJCQkgaW50IGNvdW50LCBpbnQgKmVvZiwgaW50IGxlbikKLXsKLQlpZiAobGVuIDw9IG9mZiArIGNvdW50KQotCQkqZW9mID0gMTsKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCWxlbiAtPSBvZmY7Ci0JaWYgKGxlbiA+IGNvdW50KQotCQlsZW4gPSBjb3VudDsKLQlpZiAobGVuIDwgMCkKLQkJbGVuID0gMDsKLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgaW50IHVwdGltZV9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwKLQkJCSAgICBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgdXB0aW1lX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJc3RydWN0IHRpbWVzcGVjIHVwdGltZTsKIAlzdHJ1Y3QgdGltZXNwZWMgaWRsZTsKLQlpbnQgbGVuOwogCWNwdXRpbWVfdCBpZGxldGltZSA9IGNwdXRpbWVfYWRkKGluaXRfdGFzay51dGltZSwgaW5pdF90YXNrLnN0aW1lKTsKIAogCWRvX3Bvc2l4X2Nsb2NrX21vbm90b25pY19nZXR0aW1lKCZ1cHRpbWUpOwogCW1vbm90b25pY190b19ib290YmFzZWQoJnVwdGltZSk7CiAJY3B1dGltZV90b190aW1lc3BlYyhpZGxldGltZSwgJmlkbGUpOwotCWxlbiA9IHNwcmludGYocGFnZSwgIiVsdS4lMDJsdSAlbHUuJTAybHVcbiIsCisJc2VxX3ByaW50ZihtLCAiJWx1LiUwMmx1ICVsdS4lMDJsdVxuIiwKIAkJCSh1bnNpZ25lZCBsb25nKSB1cHRpbWUudHZfc2VjLAogCQkJKHVwdGltZS50dl9uc2VjIC8gKE5TRUNfUEVSX1NFQyAvIDEwMCkpLAogCQkJKHVuc2lnbmVkIGxvbmcpIGlkbGUudHZfc2VjLAogCQkJKGlkbGUudHZfbnNlYyAvIChOU0VDX1BFUl9TRUMgLyAxMDApKSk7Ci0JcmV0dXJuIHByb2NfY2FsY19tZXRyaWNzKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdXB0aW1lX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgdXB0aW1lX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVwdGltZV9wcm9jX2ZvcHMgPSB7CisJLm9wZW4JCT0gdXB0aW1lX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgcHJvY191cHRpbWVfaW5pdCh2b2lkKQogewotCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoInVwdGltZSIsIDAsIE5VTEwsIHVwdGltZV9yZWFkX3Byb2MsIE5VTEwpOworCXByb2NfY3JlYXRlKCJ1cHRpbWUiLCAwLCBOVUxMLCAmdXB0aW1lX3Byb2NfZm9wcyk7CiAJcmV0dXJuIDA7CiB9CiBtb2R1bGVfaW5pdChwcm9jX3VwdGltZV9pbml0KTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL01ha2VmaWxlIGIvZnMvcmVpc2VyZnMvTWFrZWZpbGUKaW5kZXggMGViN2FjMC4uN2M1YWI2MyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvTWFrZWZpbGUKKysrIGIvZnMvcmVpc2VyZnMvTWFrZWZpbGUKQEAgLTcsMTAgKzcsMTAgQEAKIHJlaXNlcmZzLW9ianMgOj0gYml0bWFwLm8gZG9fYmFsYW4ubyBuYW1laS5vIGlub2RlLm8gZmlsZS5vIGRpci5vIGZpeF9ub2RlLm8gXAogCQkgc3VwZXIubyBwcmludHMubyBvYmplY3RpZC5vIGxiYWxhbmNlLm8gaWJhbGFuY2UubyBzdHJlZS5vIFwKIAkJIGhhc2hlcy5vIHRhaWxfY29udmVyc2lvbi5vIGpvdXJuYWwubyByZXNpemUubyBcCi0JCSBpdGVtX29wcy5vIGlvY3RsLm8gcHJvY2ZzLm8KKwkJIGl0ZW1fb3BzLm8gaW9jdGwubyBwcm9jZnMubyB4YXR0ci5vCiAKIGlmZXEgKCQoQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSKSx5KQotcmVpc2VyZnMtb2JqcyArPSB4YXR0ci5vIHhhdHRyX3VzZXIubyB4YXR0cl90cnVzdGVkLm8KK3JlaXNlcmZzLW9ianMgKz0geGF0dHJfdXNlci5vIHhhdHRyX3RydXN0ZWQubwogZW5kaWYKIAogaWZlcSAoJChDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFkpLHkpCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9SRUFETUUgYi9mcy9yZWlzZXJmcy9SRUFETUUKaW5kZXggOTBlMTY3MC4uMTRlOGM5ZCAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvUkVBRE1FCisrKyBiL2ZzL3JlaXNlcmZzL1JFQURNRQpAQCAtMSw0ICsxLDQgQEAKLVtMSUNFTlNJTkddIAorW0xJQ0VOU0lOR10KIAogUmVpc2VyRlMgaXMgaGVyZWJ5IGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbAogUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgpAQCAtMzEsNyArMzEsNyBAQAogaXQgd3JvbmdseSwgYW5kIFJpY2hhcmQgU3RhbGxtYW4gYWdyZWVzIHdpdGggbWUsIHdoZW4gY2FyZWZ1bGx5IHJlYWQKIHlvdSBjYW4gc2VlIHRoYXQgdGhvc2UgcmVzdHJpY3Rpb25zIG9uIGFkZGl0aW9uYWwgdGVybXMgZG8gbm90IGFwcGx5CiB0byB0aGUgb3duZXIgb2YgdGhlIGNvcHlyaWdodCwgYW5kIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgc2hhbGwKLWdvdmVybiBmb3IgdGhpcyBsaWNlbnNlLiAgCitnb3Zlcm4gZm9yIHRoaXMgbGljZW5zZS4KIAogRmluYWxseSwgbm90aGluZyBpbiB0aGlzIGxpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gYWxsb3cgeW91IHRvCiBmYWlsIHRvIGZhaXJseSBjcmVkaXQgbWUsIG9yIHRvIHJlbW92ZSBteSBjcmVkaXRzLCB3aXRob3V0IG15CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9iaXRtYXAuYyBiL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCmluZGV4IGYzMmQxNDIuLmU3MTYxNjEgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCisrKyBiL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCkBAIC00MCw4ICs0MCw4IEBACiAKICNkZWZpbmUgU0VUX09QVElPTihvcHRuYW1lKSBcCiAgICBkbyB7IFwKLSAgICAgICAgcmVpc2VyZnNfd2FybmluZyhzLCAicmVpc2VyZnM6IG9wdGlvbiBcIiVzXCIgaXMgc2V0IiwgI29wdG5hbWUpOyBcCi0gICAgICAgIHNldF9iaXQoX0FMTE9DXyAjIyBvcHRuYW1lICwgJlNCX0FMTE9DX09QVFMocykpOyBcCisJcmVpc2VyZnNfaW5mbyhzLCAiYmxvY2sgYWxsb2NhdG9yIG9wdGlvbiBcIiVzXCIgaXMgc2V0IiwgI29wdG5hbWUpOyBcCisJc2V0X2JpdChfQUxMT0NfICMjIG9wdG5hbWUgLCAmU0JfQUxMT0NfT1BUUyhzKSk7IFwKICAgICB9IHdoaWxlKDApCiAjZGVmaW5lIFRFU1RfT1BUSU9OKG9wdG5hbWUsIHMpIFwKICAgICB0ZXN0X2JpdChfQUxMT0NfICMjIG9wdG5hbWUgLCAmU0JfQUxMT0NfT1BUUyhzKSkKQEAgLTY0LDkgKzY0LDkgQEAKIAl1bnNpZ25lZCBpbnQgYm1hcF9jb3VudCA9IHJlaXNlcmZzX2JtYXBfY291bnQocyk7CiAKIAlpZiAoYmxvY2sgPT0gMCB8fCBibG9jayA+PSBTQl9CTE9DS19DT1VOVChzKSkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJICJ2cy00MDEwOiBpc19yZXVzYWJsZTogYmxvY2sgbnVtYmVyIGlzIG91dCBvZiByYW5nZSAlbHUgKCV1KSIsCi0JCQkJIGJsb2NrLCBTQl9CTE9DS19DT1VOVChzKSk7CisJCXJlaXNlcmZzX2Vycm9yKHMsICJ2cy00MDEwIiwKKwkJCSAgICAgICAiYmxvY2sgbnVtYmVyIGlzIG91dCBvZiByYW5nZSAlbHUgKCV1KSIsCisJCQkgICAgICAgYmxvY2ssIFNCX0JMT0NLX0NPVU5UKHMpKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC03OSwzMSArNzksMzAgQEAKIAkJYl9ibG9ja25yX3QgYm1hcDEgPSBSRUlTRVJGU19TQihzKS0+c19zYmgtPmJfYmxvY2tuciArIDE7CiAJCWlmIChibG9jayA+PSBibWFwMSAmJgogCQkgICAgYmxvY2sgPD0gYm1hcDEgKyBibWFwX2NvdW50KSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsICJ2czogNDAxOTogaXNfcmV1c2FibGU6ICIKLQkJCQkJICJiaXRtYXAgYmxvY2sgJWx1KCV1KSBjYW4ndCBiZSBmcmVlZCBvciByZXVzZWQiLAotCQkJCQkgYmxvY2ssIGJtYXBfY291bnQpOworCQkJcmVpc2VyZnNfZXJyb3IocywgInZzLTQwMTkiLCAiYml0bWFwIGJsb2NrICVsdSgldSkgIgorCQkJCSAgICAgICAiY2FuJ3QgYmUgZnJlZWQgb3IgcmV1c2VkIiwKKwkJCQkgICAgICAgYmxvY2ssIGJtYXBfY291bnQpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAob2Zmc2V0ID09IDApIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInZzOiA0MDIwOiBpc19yZXVzYWJsZTogIgotCQkJCQkgImJpdG1hcCBibG9jayAlbHUoJXUpIGNhbid0IGJlIGZyZWVkIG9yIHJldXNlZCIsCi0JCQkJCSBibG9jaywgYm1hcF9jb3VudCk7CisJCQlyZWlzZXJmc19lcnJvcihzLCAidnMtNDAyMCIsICJiaXRtYXAgYmxvY2sgJWx1KCV1KSAiCisJCQkJICAgICAgICJjYW4ndCBiZSBmcmVlZCBvciByZXVzZWQiLAorCQkJCSAgICAgICBibG9jaywgYm1hcF9jb3VudCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAogCWlmIChibWFwID49IGJtYXBfY291bnQpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCSAidnMtNDAzMDogaXNfcmV1c2FibGU6IHRoZXJlIGlzIG5vIHNvIG1hbnkgYml0bWFwIGJsb2NrczogIgotCQkJCSAiYmxvY2s9JWx1LCBiaXRtYXBfbnI9JXUiLCBibG9jaywgYm1hcCk7CisJCXJlaXNlcmZzX2Vycm9yKHMsICJ2cy00MDMwIiwgImJpdG1hcCBmb3IgcmVxdWVzdGVkIGJsb2NrICIKKwkJCSAgICAgICAiaXMgb3V0IG9mIHJhbmdlOiBibG9jaz0lbHUsIGJpdG1hcF9ucj0ldSIsCisJCQkgICAgICAgYmxvY2ssIGJtYXApOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoYml0X3ZhbHVlID09IDAgJiYgYmxvY2sgPT0gU0JfUk9PVF9CTE9DSyhzKSkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJICJ2cy00MDUwOiBpc19yZXVzYWJsZTogdGhpcyBpcyByb290IGJsb2NrICgldSksICIKLQkJCQkgIml0IG11c3QgYmUgYnVzeSIsIFNCX1JPT1RfQkxPQ0socykpOworCQlyZWlzZXJmc19lcnJvcihzLCAidnMtNDA1MCIsICJ0aGlzIGlzIHJvb3QgYmxvY2sgKCV1KSwgIgorCQkJICAgICAgICJpdCBtdXN0IGJlIGJ1c3kiLCBTQl9ST09UX0JMT0NLKHMpKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNTQsOCArMTUzLDggQEAKIC8qIC0gSSBtZWFuIGBhIHdpbmRvdyBvZiB6ZXJvIGJpdHMnIGFzIGluIGRlc2NyaXB0aW9uIG9mIHRoaXMgZnVuY3Rpb24gLSBaYW0uICovCiAKIAlpZiAoIWJpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywgIk5VTEwgYml0bWFwIGluZm8gcG9pbnRlciBmb3IgYml0bWFwICVkIiwKLQkJCQkgYm1hcF9uKTsKKwkJcmVpc2VyZnNfZXJyb3IocywgImpkbS00MDU1IiwgIk5VTEwgYml0bWFwIGluZm8gcG9pbnRlciAiCisJCQkgICAgICAgImZvciBiaXRtYXAgJWQiLCBibWFwX24pOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTQwMCwxMSArMzk5LDggQEAKIAlnZXRfYml0X2FkZHJlc3MocywgYmxvY2ssICZuciwgJm9mZnNldCk7CiAKIAlpZiAobnIgPj0gcmVpc2VyZnNfYm1hcF9jb3VudChzKSkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsICJ2cy00MDc1OiByZWlzZXJmc19mcmVlX2Jsb2NrOiAiCi0JCQkJICJibG9jayAlbHUgaXMgb3V0IG9mIHJhbmdlIG9uICVzICIKLQkJCQkgIihucj0ldSxtYXg9JXUpIiwgYmxvY2ssCi0JCQkJIHJlaXNlcmZzX2JkZXZuYW1lKHMpLCBuciwKLQkJCQkgcmVpc2VyZnNfYm1hcF9jb3VudChzKSk7CisJCXJlaXNlcmZzX2Vycm9yKHMsICJ2cy00MDc1IiwgImJsb2NrICVsdSBpcyBvdXQgb2YgcmFuZ2UiLAorCQkJICAgICAgIGJsb2NrKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDE2LDkgKzQxMiw4IEBACiAKIAkvKiBjbGVhciBiaXQgZm9yIHRoZSBnaXZlbiBibG9jayBpbiBiaXQgbWFwICovCiAJaWYgKCFyZWlzZXJmc190ZXN0X2FuZF9jbGVhcl9sZV9iaXQob2Zmc2V0LCBibWJoLT5iX2RhdGEpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywgInZzLTQwODA6IHJlaXNlcmZzX2ZyZWVfYmxvY2s6ICIKLQkJCQkgImZyZWVfYmxvY2sgKCVzOiVsdSlbZGV2OmJsb2NrbnJdOiBiaXQgYWxyZWFkeSBjbGVhcmVkIiwKLQkJCQkgcmVpc2VyZnNfYmRldm5hbWUocyksIGJsb2NrKTsKKwkJcmVpc2VyZnNfZXJyb3IocywgInZzLTQwODAiLAorCQkJICAgICAgICJibG9jayAlbHU6IGJpdCBhbHJlYWR5IGNsZWFyZWQiLCBibG9jayk7CiAJfQogCWFwYmlbbnJdLmZyZWVfY291bnQrKzsKIAlqb3VybmFsX21hcmtfZGlydHkodGgsIHMsIGJtYmgpOwpAQCAtNDQ1LDcgKzQ0MCw3IEBACiAJCXJldHVybjsKIAogCWlmIChibG9jayA+IHNiX2Jsb2NrX2NvdW50KFJFSVNFUkZTX1NCKHMpLT5zX3JzKSkgewotCQlyZWlzZXJmc19wYW5pYyh0aC0+dF9zdXBlciwgImJpdG1hcC00MDcyIiwKKwkJcmVpc2VyZnNfZXJyb3IodGgtPnRfc3VwZXIsICJiaXRtYXAtNDA3MiIsCiAJCQkgICAgICAgIlRyeWluZyB0byBmcmVlIGJsb2NrIG91dHNpZGUgZmlsZSBzeXN0ZW0gIgogCQkJICAgICAgICJib3VuZGFyaWVzICglbHUgPiAlbHUpIiwKIAkJCSAgICAgICBibG9jaywgc2JfYmxvY2tfY291bnQoUkVJU0VSRlNfU0IocyktPnNfcnMpKTsKQEAgLTQ3Nyw5ICs0NzIsOCBAQAogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogCWlmIChlaS0+aV9wcmVhbGxvY19jb3VudCA8IDApCi0JCXJlaXNlcmZzX3dhcm5pbmcodGgtPnRfc3VwZXIsCi0JCQkJICJ6YW0tNDAwMTolczogaW5vZGUgaGFzIG5lZ2F0aXZlIHByZWFsbG9jIGJsb2NrcyBjb3VudC4iLAotCQkJCSBfX2Z1bmNfXyk7CisJCXJlaXNlcmZzX2Vycm9yKHRoLT50X3N1cGVyLCAiemFtLTQwMDEiLAorCQkJICAgICAgICJpbm9kZSBoYXMgbmVnYXRpdmUgcHJlYWxsb2MgYmxvY2tzIGNvdW50LiIpOwogI2VuZGlmCiAJd2hpbGUgKGVpLT5pX3ByZWFsbG9jX2NvdW50ID4gMCkgewogCQlyZWlzZXJmc19mcmVlX3ByZWFsbG9jX2Jsb2NrKHRoLCBpbm9kZSwgZWktPmlfcHJlYWxsb2NfYmxvY2spOwpAQCAtNTE1LDkgKzUwOSw5IEBACiAJCQkJaV9wcmVhbGxvY19saXN0KTsKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKIAkJaWYgKCFlaS0+aV9wcmVhbGxvY19jb3VudCkgewotCQkJcmVpc2VyZnNfd2FybmluZyh0aC0+dF9zdXBlciwKLQkJCQkJICJ6YW0tNDAwMTolczogaW5vZGUgaXMgaW4gcHJlYWxsb2MgbGlzdCBidXQgaGFzIG5vIHByZWFsbG9jYXRlZCBibG9ja3MuIiwKLQkJCQkJIF9fZnVuY19fKTsKKwkJCXJlaXNlcmZzX2Vycm9yKHRoLT50X3N1cGVyLCAiemFtLTQwMDEiLAorCQkJCSAgICAgICAiaW5vZGUgaXMgaW4gcHJlYWxsb2MgbGlzdCBidXQgaGFzICIKKwkJCQkgICAgICAgIm5vIHByZWFsbG9jYXRlZCBibG9ja3MuIik7CiAJCX0KICNlbmRpZgogCQlfX2Rpc2NhcmRfcHJlYWxsb2ModGgsIGVpKTsKQEAgLTYzMSwxMiArNjI1LDEyIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCXJlaXNlcmZzX3dhcm5pbmcocywgInphbS00MDAxOiAlcyA6IHVua25vd24gb3B0aW9uIC0gJXMiLAotCQkJCSBfX2Z1bmNfXywgdGhpc19jaGFyKTsKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAiemFtLTQwMDEiLCAidW5rbm93biBvcHRpb24gLSAlcyIsCisJCQkJIHRoaXNfY2hhcik7CiAJCXJldHVybiAxOwogCX0KIAotCXJlaXNlcmZzX3dhcm5pbmcocywgImFsbG9jYXRvciBvcHRpb25zID0gWyUwOHhdXG4iLCBTQl9BTExPQ19PUFRTKHMpKTsKKwlyZWlzZXJmc19pbmZvKHMsICJhbGxvY2F0b3Igb3B0aW9ucyA9IFslMDh4XVxuIiwgU0JfQUxMT0NfT1BUUyhzKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMjEsNyArMTIxNSw5IEBACiAJdW5zaWduZWQgbG9uZyAqY3VyID0gKHVuc2lnbmVkIGxvbmcgKikoYmgtPmJfZGF0YSArIGJoLT5iX3NpemUpOwogCiAJLyogVGhlIGZpcnN0IGJpdCBtdXN0IEFMV0FZUyBiZSAxICovCi0JQlVHX09OKCFyZWlzZXJmc190ZXN0X2xlX2JpdCgwLCAodW5zaWduZWQgbG9uZyAqKWJoLT5iX2RhdGEpKTsKKwlpZiAoIXJlaXNlcmZzX3Rlc3RfbGVfYml0KDAsICh1bnNpZ25lZCBsb25nICopYmgtPmJfZGF0YSkpCisJCXJlaXNlcmZzX2Vycm9yKHNiLCAicmVpc2VyZnMtMjAyNSIsICJiaXRtYXAgYmxvY2sgJWx1IGlzICIKKwkJCSAgICAgICAiY29ycnVwdGVkOiBmaXJzdCBiaXQgbXVzdCBiZSAxIiwgYmgtPmJfYmxvY2tucik7CiAKIAlpbmZvLT5mcmVlX2NvdW50ID0gMDsKIApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvZGlyLmMgYi9mcy9yZWlzZXJmcy9kaXIuYwppbmRleCBlNmIwM2QyLi42N2E4MGQ3IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9kaXIuYworKysgYi9mcy9yZWlzZXJmcy9kaXIuYwpAQCAtNDEsMTAgKzQxLDEwIEBACiAKICNkZWZpbmUgc3RvcmVfaWgod2hlcmUsd2hhdCkgY29weV9pdGVtX2hlYWQgKHdoZXJlLCB3aGF0KQogCi0vLwotc3RhdGljIGludCByZWlzZXJmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQoraW50IHJlaXNlcmZzX3JlYWRkaXJfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdm9pZCAqZGlyZW50LAorCQkJICAgZmlsbGRpcl90IGZpbGxkaXIsIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGNwdV9rZXkgcG9zX2tleTsJLyoga2V5IG9mIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGRpcmVjdG9yeSAoa2V5IG9mIGRpcmVjdG9yeSBlbnRyeSkgKi8KIAlJTklUSUFMSVpFX1BBVEgocGF0aF90b19lbnRyeSk7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKQEAgLTY0LDEzICs2NCw5IEBACiAKIAkvKiBmb3JtIGtleSBmb3Igc2VhcmNoIHRoZSBuZXh0IGRpcmVjdG9yeSBlbnRyeSB1c2luZyBmX3BvcyBmaWVsZCBvZgogCSAgIGZpbGUgc3RydWN0dXJlICovCi0JbWFrZV9jcHVfa2V5KCZwb3Nfa2V5LCBpbm9kZSwKLQkJICAgICAoZmlscC0+Zl9wb3MpID8gKGZpbHAtPmZfcG9zKSA6IERPVF9PRkZTRVQsIFRZUEVfRElSRU5UUlksCi0JCSAgICAgMyk7CisJbWFrZV9jcHVfa2V5KCZwb3Nfa2V5LCBpbm9kZSwgKnBvcyA/OiBET1RfT0ZGU0VULCBUWVBFX0RJUkVOVFJZLCAzKTsKIAluZXh0X3BvcyA9IGNwdV9rZXlfa19vZmZzZXQoJnBvc19rZXkpOwogCi0JLyogIHJlaXNlcmZzX3dhcm5pbmcgKGlub2RlLT5pX3NiLCAicmVpc2VyZnNfcmVhZGRpciAxOiBmX3BvcyA9ICVMZCIsIGZpbHAtPmZfcG9zKTsgKi8KLQogCXBhdGhfdG9fZW50cnkucmVhZGEgPSBQQVRIX1JFQURBOwogCXdoaWxlICgxKSB7CiAJICAgICAgcmVzZWFyY2g6CkBAIC0xNDQsNyArMTQwLDcgQEAKIAkJCQkvKiBJZ25vcmUgdGhlIC5yZWlzZXJmc19wcml2IGVudHJ5ICovCiAJCQkJaWYgKHJlaXNlcmZzX3hhdHRycyhpbm9kZS0+aV9zYikgJiYKIAkJCQkgICAgIW9sZF9mb3JtYXRfb25seShpbm9kZS0+aV9zYikgJiYKLQkJCQkgICAgZmlscC0+Zl9wYXRoLmRlbnRyeSA9PSBpbm9kZS0+aV9zYi0+c19yb290ICYmCisJCQkJICAgIGRlbnRyeSA9PSBpbm9kZS0+aV9zYi0+c19yb290ICYmCiAJCQkJICAgIFJFSVNFUkZTX1NCKGlub2RlLT5pX3NiKS0+cHJpdl9yb290ICYmCiAJCQkJICAgIFJFSVNFUkZTX1NCKGlub2RlLT5pX3NiKS0+cHJpdl9yb290LT5kX2lub2RlCiAJCQkJICAgICYmIGRlaF9vYmplY3RpZChkZWgpID09CkBAIC0xNTYsNyArMTUyLDcgQEAKIAkJCQl9CiAKIAkJCQlkX29mZiA9IGRlaF9vZmZzZXQoZGVoKTsKLQkJCQlmaWxwLT5mX3BvcyA9IGRfb2ZmOworCQkJCSpwb3MgPSBkX29mZjsKIAkJCQlkX2lubyA9IGRlaF9vYmplY3RpZChkZWgpOwogCQkJCWlmIChkX3JlY2xlbiA8PSAzMikgewogCQkJCQlsb2NhbF9idWYgPSBzbWFsbF9idWY7CkBAIC0yMjMsMTUgKzIxOSwyMSBAQAogCiAJfQkJCS8qIHdoaWxlICovCiAKLSAgICAgIGVuZDoKLQlmaWxwLT5mX3BvcyA9IG5leHRfcG9zOworZW5kOgorCSpwb3MgPSBuZXh0X3BvczsKIAlwYXRocmVsc2UoJnBhdGhfdG9fZW50cnkpOwogCXJlaXNlcmZzX2NoZWNrX3BhdGgoJnBhdGhfdG9fZW50cnkpOwotICAgICAgb3V0Ogorb3V0OgogCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7CiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCByZWlzZXJmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQoreworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CisJcmV0dXJuIHJlaXNlcmZzX3JlYWRkaXJfZGVudHJ5KGRlbnRyeSwgZGlyZW50LCBmaWxsZGlyLCAmZmlsZS0+Zl9wb3MpOworfQorCiAvKiBjb21wb3NlIGRpcmVjdG9yeSBpdGVtIGNvbnRhaW5pbmcgIi4iIGFuZCAiLi4iIGVudHJpZXMgKGVudHJpZXMgYXJlCiAgICBub3QgYWxpZ25lZCB0byA0IGJ5dGUgYm91bmRhcnkpICovCiAvKiB0aGUgbGFzdCBmb3VyIHBhcmFtcyBhcmUgTEUgKi8KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2RvX2JhbGFuLmMgYi9mcy9yZWlzZXJmcy9kb19iYWxhbi5jCmluZGV4IDJmODdmNWIuLjRiZWI5NjQgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2RvX2JhbGFuLmMKKysrIGIvZnMvcmVpc2VyZnMvZG9fYmFsYW4uYwpAQCAtMjksNiArMjksNDMgQEAKIAkJCQkJICAgaXMgaW50ZXJydXB0aW5nIGRvX2JhbGFuY2UgKi8KICNlbmRpZgogCitzdGF0aWMgaW5saW5lIHZvaWQgYnVmZmVyX2luZm9faW5pdF9sZWZ0KHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2luZm8gKmJpKQoreworCWJpLT50YiAgICAgICAgICA9IHRiOworCWJpLT5iaV9iaCAgICAgICA9IHRiLT5MWzBdOworCWJpLT5iaV9wYXJlbnQgICA9IHRiLT5GTFswXTsKKwliaS0+YmlfcG9zaXRpb24gPSBnZXRfbGVmdF9uZWlnaGJvcl9wb3NpdGlvbih0YiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBidWZmZXJfaW5mb19pbml0X3JpZ2h0KHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJ1ZmZlcl9pbmZvICpiaSkKK3sKKwliaS0+dGIgICAgICAgICAgPSB0YjsKKwliaS0+YmlfYmggICAgICAgPSB0Yi0+UlswXTsKKwliaS0+YmlfcGFyZW50ICAgPSB0Yi0+RlJbMF07CisJYmktPmJpX3Bvc2l0aW9uID0gZ2V0X3JpZ2h0X25laWdoYm9yX3Bvc2l0aW9uKHRiLCAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJ1ZmZlcl9pbmZvX2luaXRfdGJTMChzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJ1ZmZlcl9pbmZvICpiaSkKK3sKKwliaS0+dGIgICAgICAgICAgPSB0YjsKKwliaS0+YmlfYmggICAgICAgID0gUEFUSF9QTEFTVF9CVUZGRVIodGItPnRiX3BhdGgpOworCWJpLT5iaV9wYXJlbnQgICA9IFBBVEhfSF9QUEFSRU5UKHRiLT50Yl9wYXRoLCAwKTsKKwliaS0+YmlfcG9zaXRpb24gPSBQQVRIX0hfUE9TSVRJT04odGItPnRiX3BhdGgsIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYnVmZmVyX2luZm9faW5pdF9iaChzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidWZmZXJfaW5mbyAqYmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCWJpLT50YiAgICAgICAgICA9IHRiOworCWJpLT5iaV9iaCAgICAgICA9IGJoOworCWJpLT5iaV9wYXJlbnQgICA9IE5VTEw7CisJYmktPmJpX3Bvc2l0aW9uID0gMDsKK30KKwogaW5saW5lIHZvaWQgZG9fYmFsYW5jZV9tYXJrX2xlYWZfZGlydHkoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsCiAJCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBmbGFnKQogewpAQCAtMzksMjEgKzc2LDIxIEBACiAjZGVmaW5lIGRvX2JhbGFuY2VfbWFya19pbnRlcm5hbF9kaXJ0eSBkb19iYWxhbmNlX21hcmtfbGVhZl9kaXJ0eQogI2RlZmluZSBkb19iYWxhbmNlX21hcmtfc2JfZGlydHkgZG9fYmFsYW5jZV9tYXJrX2xlYWZfZGlydHkKIAotLyogc3VtbWFyeTogCisvKiBzdW1tYXJ5OgogIGlmIGRlbGV0aW5nIHNvbWV0aGluZyAoIHRiLT5pbnNlcnRfc2l6ZVswXSA8IDAgKQogICAgcmV0dXJuKGJhbGFuY2VfbGVhZl93aGVuX2RlbGV0ZSgpKTsgKGZsYWcgZCBoYW5kbGVkIGhlcmUpCiAgZWxzZQogICAgaWYgbG51bSBpcyBsYXJnZXIgdGhhbiAwIHdlIHB1dCBpdGVtcyBpbnRvIHRoZSBsZWZ0IG5vZGUKICAgIGlmIHJudW0gaXMgbGFyZ2VyIHRoYW4gMCB3ZSBwdXQgaXRlbXMgaW50byB0aGUgcmlnaHQgbm9kZQogICAgaWYgc251bTEgaXMgbGFyZ2VyIHRoYW4gMCB3ZSBwdXQgaXRlbXMgaW50byB0aGUgbmV3IG5vZGUgczEKLSAgIGlmIHNudW0yIGlzIGxhcmdlciB0aGFuIDAgd2UgcHV0IGl0ZW1zIGludG8gdGhlIG5ldyBub2RlIHMyIAorICAgaWYgc251bTIgaXMgbGFyZ2VyIHRoYW4gMCB3ZSBwdXQgaXRlbXMgaW50byB0aGUgbmV3IG5vZGUgczIKIE5vdGUgdGhhdCBhbGwgKm51bSogY291bnQgbmV3IGl0ZW1zIGJlaW5nIGNyZWF0ZWQuCiAKIEl0IHdvdWxkIGJlIGVhc2llciB0byByZWFkIGJhbGFuY2VfbGVhZigpIGlmIGVhY2ggb2YgdGhlc2Ugc3VtbWFyeQogbGluZXMgd2FzIGEgc2VwYXJhdGUgcHJvY2VkdXJlIHJhdGhlciB0aGFuIGJlaW5nIGlubGluZWQuICBJIHRoaW5rCiB0aGF0IHRoZXJlIGFyZSBtYW55IHBhc3NhZ2VzIGhlcmUgYW5kIGluIGJhbGFuY2VfbGVhZl93aGVuX2RlbGV0ZSgpIGluCiB3aGljaCB0d28gY2FsbHMgdG8gb25lIHByb2NlZHVyZSBjYW4gcmVwbGFjZSB0d28gcGFzc2FnZXMsIGFuZCBpdAotbWlnaHQgc2F2ZSBjYWNoZSBzcGFjZSBhbmQgaW1wcm92ZSBzb2Z0d2FyZSBtYWludGVuYW5jZSBjb3N0cyB0byBkbyBzby4gIAorbWlnaHQgc2F2ZSBjYWNoZSBzcGFjZSBhbmQgaW1wcm92ZSBzb2Z0d2FyZSBtYWludGVuYW5jZSBjb3N0cyB0byBkbyBzby4KIAogVmxhZGltaXIgbWFkZSB0aGUgcGVyY2VwdGl2ZSBjb21tZW50IHRoYXQgd2Ugc2hvdWxkIG9mZmxvYWQgbW9zdCBvZgogdGhlIGRlY2lzaW9uIG1ha2luZyBpbiB0aGlzIGZ1bmN0aW9uIGludG8gZml4X25vZGVzL2NoZWNrX2JhbGFuY2UsIGFuZApAQCAtODYsNiArMTIzLDcgQEAKIAkgICAgICAgIlBBUC0xMjAxMDogdHJlZSBjYW4gbm90IGJlIGVtcHR5Iik7CiAKIAlpaCA9IEJfTl9QSVRFTV9IRUFEKHRiUzAsIGl0ZW1fcG9zKTsKKwlidWZmZXJfaW5mb19pbml0X3RiUzAodGIsICZiaSk7CiAKIAkvKiBEZWxldGUgb3IgdHJ1bmNhdGUgdGhlIGl0ZW0gKi8KIApAQCAtOTYsMTAgKzEzNCw2IEBACiAJCSAgICAgICAidnMtMTIwMTM6IG1vZGUgRGVsZXRlLCBpbnNlcnQgc2l6ZSAlZCwgaWggdG8gYmUgZGVsZXRlZCAlaCIsCiAJCSAgICAgICAtdGItPmluc2VydF9zaXplWzBdLCBpaCk7CiAKLQkJYmkudGIgPSB0YjsKLQkJYmkuYmlfYmggPSB0YlMwOwotCQliaS5iaV9wYXJlbnQgPSBQQVRIX0hfUFBBUkVOVCh0Yi0+dGJfcGF0aCwgMCk7Ci0JCWJpLmJpX3Bvc2l0aW9uID0gUEFUSF9IX1BPU0lUSU9OKHRiLT50Yl9wYXRoLCAxKTsKIAkJbGVhZl9kZWxldGVfaXRlbXMoJmJpLCAwLCBpdGVtX3BvcywgMSwgLTEpOwogCiAJCWlmICghaXRlbV9wb3MgJiYgdGItPkNGTFswXSkgewpAQCAtMTIxLDEwICsxNTUsNiBAQAogCQlicmVhazsKIAogCWNhc2UgTV9DVVQ6ewkJLyogY3V0IGl0ZW0gaW4gU1swXSAqLwotCQkJYmkudGIgPSB0YjsKLQkJCWJpLmJpX2JoID0gdGJTMDsKLQkJCWJpLmJpX3BhcmVudCA9IFBBVEhfSF9QUEFSRU5UKHRiLT50Yl9wYXRoLCAwKTsKLQkJCWJpLmJpX3Bvc2l0aW9uID0gUEFUSF9IX1BPU0lUSU9OKHRiLT50Yl9wYXRoLCAxKTsKIAkJCWlmIChpc19kaXJlbnRyeV9sZV9paChpaCkpIHsKIAogCQkJCS8qIFVGUyB1bmxpbmsgc2VtYW50aWNzIGFyZSBzdWNoIHRoYXQgeW91IGNhbiBvbmx5IGRlbGV0ZSBvbmUgZGlyZWN0b3J5IGVudHJ5IGF0IGEgdGltZS4gKi8KQEAgLTE1Myw4ICsxODMsOCBAQAogCiAJZGVmYXVsdDoKIAkJcHJpbnRfY3VyX3RiKCIxMjA0MCIpOwotCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkgICAgICAgIlBBUC0xMjA0MDogYmFsYW5jZV9sZWFmX3doZW5fZGVsZXRlOiB1bmV4cGVjdGFibGUgbW9kZTogJXMoJWQpIiwKKwkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiUEFQLTEyMDQwIiwKKwkJCSAgICAgICAidW5leHBlY3RlZCBtb2RlOiAlcyglZCkiLAogCQkJICAgICAgIChmbGFnID09CiAJCQkJTV9QQVNURSkgPyAiUEFTVEUiIDogKChmbGFnID09CiAJCQkJCQkgICAgICAgTV9JTlNFUlQpID8gIklOU0VSVCIgOgpAQCAtMjU4LDE1ICsyODgsMTUgQEAKICAgICApCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICp0YlMwID0gUEFUSF9QTEFTVF9CVUZGRVIodGItPnRiX3BhdGgpOwotCWludCBpdGVtX3BvcyA9IFBBVEhfTEFTVF9QT1NJVElPTih0Yi0+dGJfcGF0aCk7CS8qICBpbmRleCBpbnRvIHRoZSBhcnJheSBvZiBpdGVtIGhlYWRlcnMgaW4gU1swXSAKKwlpbnQgaXRlbV9wb3MgPSBQQVRIX0xBU1RfUE9TSVRJT04odGItPnRiX3BhdGgpOwkvKiAgaW5kZXggaW50byB0aGUgYXJyYXkgb2YgaXRlbSBoZWFkZXJzIGluIFNbMF0KIAkJCQkJCQkgICBvZiB0aGUgYWZmZWN0ZWQgaXRlbSAqLwogCXN0cnVjdCBidWZmZXJfaW5mbyBiaTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKlNfbmV3WzJdOwkvKiBuZXcgbm9kZXMgYWxsb2NhdGVkIHRvIGhvbGQgd2hhdCBjb3VsZCBub3QgZml0IGludG8gUyAqLwogCWludCBzbnVtWzJdOwkJLyogbnVtYmVyIG9mIGl0ZW1zIHRoYXQgd2lsbCBiZSBwbGFjZWQKIAkJCQkgICBpbnRvIFNfbmV3IChpbmNsdWRlcyBwYXJ0aWFsbHkgc2hpZnRlZAogCQkJCSAgIGl0ZW1zKSAqLwotCWludCBzYnl0ZXNbMl07CQkvKiBpZiBhbiBpdGVtIGlzIHBhcnRpYWxseSBzaGlmdGVkIGludG8gU19uZXcgdGhlbiAKLQkJCQkgICBpZiBpdCBpcyBhIGRpcmVjdG9yeSBpdGVtIAorCWludCBzYnl0ZXNbMl07CQkvKiBpZiBhbiBpdGVtIGlzIHBhcnRpYWxseSBzaGlmdGVkIGludG8gU19uZXcgdGhlbgorCQkJCSAgIGlmIGl0IGlzIGEgZGlyZWN0b3J5IGl0ZW0KIAkJCQkgICBpdCBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgZnJvbSB0aGUgaXRlbSB0aGF0IGFyZSBzaGlmdGVkIGludG8gU19uZXcKIAkJCQkgICBlbHNlCiAJCQkJICAgaXQgaXMgdGhlIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSBpdGVtIHRoYXQgYXJlIHNoaWZ0ZWQgaW50byBTX25ldwpAQCAtMzI1LDExICszNTUsNyBAQAogCQkJCQkgICAgICAgaWhfaXRlbV9sZW4oaWgpKTsKIAogCQkJCQkvKiBJbnNlcnQgbmV3IGl0ZW0gaW50byBMWzBdICovCi0JCQkJCWJpLnRiID0gdGI7Ci0JCQkJCWJpLmJpX2JoID0gdGItPkxbMF07Ci0JCQkJCWJpLmJpX3BhcmVudCA9IHRiLT5GTFswXTsKLQkJCQkJYmkuYmlfcG9zaXRpb24gPQotCQkJCQkgICAgZ2V0X2xlZnRfbmVpZ2hib3JfcG9zaXRpb24odGIsIDApOworCQkJCQlidWZmZXJfaW5mb19pbml0X2xlZnQodGIsICZiaSk7CiAJCQkJCWxlYWZfaW5zZXJ0X2ludG9fYnVmKCZiaSwKIAkJCQkJCQkgICAgIG4gKyBpdGVtX3BvcyAtCiAJCQkJCQkJICAgICByZXRfdmFsLCBpaCwgYm9keSwKQEAgLTM2OSwxMSArMzk1LDcgQEAKIAkJCQkJICAgIGxlYWZfc2hpZnRfbGVmdCh0YiwgdGItPmxudW1bMF0gLSAxLAogCQkJCQkJCSAgICB0Yi0+bGJ5dGVzKTsKIAkJCQkJLyogSW5zZXJ0IG5ldyBpdGVtIGludG8gTFswXSAqLwotCQkJCQliaS50YiA9IHRiOwotCQkJCQliaS5iaV9iaCA9IHRiLT5MWzBdOwotCQkJCQliaS5iaV9wYXJlbnQgPSB0Yi0+RkxbMF07Ci0JCQkJCWJpLmJpX3Bvc2l0aW9uID0KLQkJCQkJICAgIGdldF9sZWZ0X25laWdoYm9yX3Bvc2l0aW9uKHRiLCAwKTsKKwkJCQkJYnVmZmVyX2luZm9faW5pdF9sZWZ0KHRiLCAmYmkpOwogCQkJCQlsZWFmX2luc2VydF9pbnRvX2J1ZigmYmksCiAJCQkJCQkJICAgICBuICsgaXRlbV9wb3MgLQogCQkJCQkJCSAgICAgcmV0X3ZhbCwgaWgsIGJvZHksCkBAIC00MjksMTMgKzQ1MSw3IEBACiAJCQkJCQkJfQogCiAJCQkJCQkJLyogQXBwZW5kIGdpdmVuIGRpcmVjdG9yeSBlbnRyeSB0byBkaXJlY3RvcnkgaXRlbSAqLwotCQkJCQkJCWJpLnRiID0gdGI7Ci0JCQkJCQkJYmkuYmlfYmggPSB0Yi0+TFswXTsKLQkJCQkJCQliaS5iaV9wYXJlbnQgPQotCQkJCQkJCSAgICB0Yi0+RkxbMF07Ci0JCQkJCQkJYmkuYmlfcG9zaXRpb24gPQotCQkJCQkJCSAgICBnZXRfbGVmdF9uZWlnaGJvcl9wb3NpdGlvbgotCQkJCQkJCSAgICAodGIsIDApOworCQkJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfbGVmdCh0YiwgJmJpKTsKIAkJCQkJCQlsZWFmX3Bhc3RlX2luX2J1ZmZlcgogCQkJCQkJCSAgICAoJmJpLAogCQkJCQkJCSAgICAgbiArIGl0ZW1fcG9zIC0KQEAgLTQ0OSw4ICs0NjUsNyBAQAogCQkJCQkJCS8qIHdoZW4gd2UgaGF2ZSBtZXJnZSBkaXJlY3RvcnkgaXRlbSwgcG9zX2luX2l0ZW0gaGFzIGJlZW4gY2hhbmdlZCB0b28gKi8KIAogCQkJCQkJCS8qIHBhc3RlIG5ldyBkaXJlY3RvcnkgZW50cnkuIDEgaXMgZW50cnkgbnVtYmVyICovCi0JCQkJCQkJbGVhZl9wYXN0ZV9lbnRyaWVzKGJpLgotCQkJCQkJCQkJICAgYmlfYmgsCisJCQkJCQkJbGVhZl9wYXN0ZV9lbnRyaWVzKCZiaSwKIAkJCQkJCQkJCSAgIG4gKwogCQkJCQkJCQkJICAgaXRlbV9wb3MKIAkJCQkJCQkJCSAgIC0KQEAgLTUyNCwxMyArNTM5LDcgQEAKIAkJCQkJCQkJCSAgICAgKHRiUzAsCiAJCQkJCQkJCQkgICAgICBpdGVtX3BvcykpKTsKIAkJCQkJCQkvKiBBcHBlbmQgdG8gYm9keSBvZiBpdGVtIGluIExbMF0gKi8KLQkJCQkJCQliaS50YiA9IHRiOwotCQkJCQkJCWJpLmJpX2JoID0gdGItPkxbMF07Ci0JCQkJCQkJYmkuYmlfcGFyZW50ID0KLQkJCQkJCQkgICAgdGItPkZMWzBdOwotCQkJCQkJCWJpLmJpX3Bvc2l0aW9uID0KLQkJCQkJCQkgICAgZ2V0X2xlZnRfbmVpZ2hib3JfcG9zaXRpb24KLQkJCQkJCQkgICAgKHRiLCAwKTsKKwkJCQkJCQlidWZmZXJfaW5mb19pbml0X2xlZnQodGIsICZiaSk7CiAJCQkJCQkJbGVhZl9wYXN0ZV9pbl9idWZmZXIKIAkJCQkJCQkgICAgKCZiaSwKIAkJCQkJCQkgICAgIG4gKyBpdGVtX3BvcyAtCkBAIC02ODEsMTEgKzY5MCw3IEBACiAJCQkJCSAgICBsZWFmX3NoaWZ0X2xlZnQodGIsIHRiLT5sbnVtWzBdLAogCQkJCQkJCSAgICB0Yi0+bGJ5dGVzKTsKIAkJCQkJLyogQXBwZW5kIHRvIGJvZHkgb2YgaXRlbSBpbiBMWzBdICovCi0JCQkJCWJpLnRiID0gdGI7Ci0JCQkJCWJpLmJpX2JoID0gdGItPkxbMF07Ci0JCQkJCWJpLmJpX3BhcmVudCA9IHRiLT5GTFswXTsKLQkJCQkJYmkuYmlfcG9zaXRpb24gPQotCQkJCQkgICAgZ2V0X2xlZnRfbmVpZ2hib3JfcG9zaXRpb24odGIsIDApOworCQkJCQlidWZmZXJfaW5mb19pbml0X2xlZnQodGIsICZiaSk7CiAJCQkJCWxlYWZfcGFzdGVfaW5fYnVmZmVyKCZiaSwKIAkJCQkJCQkgICAgIG4gKyBpdGVtX3BvcyAtCiAJCQkJCQkJICAgICByZXRfdmFsLApAQCAtNjk5LDcgKzcwNCw3IEBACiAJCQkJCQkJICAgbiArIGl0ZW1fcG9zIC0KIAkJCQkJCQkgICByZXRfdmFsKTsKIAkJCQkJaWYgKGlzX2RpcmVudHJ5X2xlX2loKHBhc3RlZCkpCi0JCQkJCQlsZWFmX3Bhc3RlX2VudHJpZXMoYmkuYmlfYmgsCisJCQkJCQlsZWFmX3Bhc3RlX2VudHJpZXMoJmJpLAogCQkJCQkJCQkgICBuICsKIAkJCQkJCQkJICAgaXRlbV9wb3MgLQogCQkJCQkJCQkgICByZXRfdmFsLApAQCAtNzIyLDggKzcyNyw5IEBACiAJCQkJfQogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoJLyogY2FzZXMgZCBhbmQgdCAqLwotCQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCQkJICAgICAgICJQQVAtMTIxMzA6IGJhbGFuY2VfbGVhZjogbG51bSA+IDA6IHVuZXhwZWN0YWJsZSBtb2RlOiAlcyglZCkiLAorCQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgIlBBUC0xMjEzMCIsCisJCQkJCSAgICAgICAibG51bSA+IDA6IHVuZXhwZWN0ZWQgbW9kZTogIgorCQkJCQkgICAgICAgIiAlcyglZCkiLAogCQkJCQkgICAgICAgKGZsYWcgPT0KIAkJCQkJCU1fREVMRVRFKSA/ICJERUxFVEUiIDogKChmbGFnID09CiAJCQkJCQkJCQkgTV9DVVQpCkBAIC03NzYsMTEgKzc4Miw3IEBACiAJCQkJCXNldF9sZV9paF9rX29mZnNldChpaCwgb2Zmc2V0KTsKIAkJCQkJcHV0X2loX2l0ZW1fbGVuKGloLCB0Yi0+cmJ5dGVzKTsKIAkJCQkJLyogSW5zZXJ0IHBhcnQgb2YgdGhlIGl0ZW0gaW50byBSWzBdICovCi0JCQkJCWJpLnRiID0gdGI7Ci0JCQkJCWJpLmJpX2JoID0gdGItPlJbMF07Ci0JCQkJCWJpLmJpX3BhcmVudCA9IHRiLT5GUlswXTsKLQkJCQkJYmkuYmlfcG9zaXRpb24gPQotCQkJCQkgICAgZ2V0X3JpZ2h0X25laWdoYm9yX3Bvc2l0aW9uKHRiLCAwKTsKKwkJCQkJYnVmZmVyX2luZm9faW5pdF9yaWdodCh0YiwgJmJpKTsKIAkJCQkJaWYgKChvbGRfbGVuIC0gdGItPnJieXRlcykgPiB6ZXJvc19udW0pIHsKIAkJCQkJCXJfemVyb3NfbnVtYmVyID0gMDsKIAkJCQkJCXJfYm9keSA9CkBAIC04MTcsMTEgKzgxOSw3IEBACiAJCQkJCQkJICAgICB0Yi0+cm51bVswXSAtIDEsCiAJCQkJCQkJICAgICB0Yi0+cmJ5dGVzKTsKIAkJCQkJLyogSW5zZXJ0IG5ldyBpdGVtIGludG8gUlswXSAqLwotCQkJCQliaS50YiA9IHRiOwotCQkJCQliaS5iaV9iaCA9IHRiLT5SWzBdOwotCQkJCQliaS5iaV9wYXJlbnQgPSB0Yi0+RlJbMF07Ci0JCQkJCWJpLmJpX3Bvc2l0aW9uID0KLQkJCQkJICAgIGdldF9yaWdodF9uZWlnaGJvcl9wb3NpdGlvbih0YiwgMCk7CisJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfcmlnaHQodGIsICZiaSk7CiAJCQkJCWxlYWZfaW5zZXJ0X2ludG9fYnVmKCZiaSwKIAkJCQkJCQkgICAgIGl0ZW1fcG9zIC0gbiArCiAJCQkJCQkJICAgICB0Yi0+cm51bVswXSAtIDEsCkBAIC04ODEsMjEgKzg3OSwxNCBAQAogCQkJCQkJCSAgICBwb3NfaW5faXRlbSAtCiAJCQkJCQkJICAgIGVudHJ5X2NvdW50ICsKIAkJCQkJCQkgICAgdGItPnJieXRlcyAtIDE7Ci0JCQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJCQliaS5iaV9iaCA9IHRiLT5SWzBdOwotCQkJCQkJCWJpLmJpX3BhcmVudCA9Ci0JCQkJCQkJICAgIHRiLT5GUlswXTsKLQkJCQkJCQliaS5iaV9wb3NpdGlvbiA9Ci0JCQkJCQkJICAgIGdldF9yaWdodF9uZWlnaGJvcl9wb3NpdGlvbgotCQkJCQkJCSAgICAodGIsIDApOworCQkJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfcmlnaHQodGIsICZiaSk7CiAJCQkJCQkJbGVhZl9wYXN0ZV9pbl9idWZmZXIKIAkJCQkJCQkgICAgKCZiaSwgMCwKIAkJCQkJCQkgICAgIHBhc3RlX2VudHJ5X3Bvc2l0aW9uLAogCQkJCQkJCSAgICAgdGItPmluc2VydF9zaXplWzBdLAogCQkJCQkJCSAgICAgYm9keSwgemVyb3NfbnVtKTsKIAkJCQkJCQkvKiBwYXN0ZSBlbnRyeSAqLwotCQkJCQkJCWxlYWZfcGFzdGVfZW50cmllcyhiaS4KLQkJCQkJCQkJCSAgIGJpX2JoLAorCQkJCQkJCWxlYWZfcGFzdGVfZW50cmllcygmYmksCiAJCQkJCQkJCQkgICAwLAogCQkJCQkJCQkJICAgcGFzdGVfZW50cnlfcG9zaXRpb24sCiAJCQkJCQkJCQkgICAxLApAQCAtMTAxOSwxMiArMTAxMCw3IEBACiAJCQkJCQkgICAgKHRiLCB0Yi0+Q0ZSWzBdLCAwKTsKIAogCQkJCQkJLyogQXBwZW5kIHBhcnQgb2YgYm9keSBpbnRvIFJbMF0gKi8KLQkJCQkJCWJpLnRiID0gdGI7Ci0JCQkJCQliaS5iaV9iaCA9IHRiLT5SWzBdOwotCQkJCQkJYmkuYmlfcGFyZW50ID0gdGItPkZSWzBdOwotCQkJCQkJYmkuYmlfcG9zaXRpb24gPQotCQkJCQkJICAgIGdldF9yaWdodF9uZWlnaGJvcl9wb3NpdGlvbgotCQkJCQkJICAgICh0YiwgMCk7CisJCQkJCQlidWZmZXJfaW5mb19pbml0X3JpZ2h0KHRiLCAmYmkpOwogCQkJCQkJaWYgKG5fcmVtID4gemVyb3NfbnVtKSB7CiAJCQkJCQkJcl96ZXJvc19udW1iZXIgPSAwOwogCQkJCQkJCXJfYm9keSA9CkBAIC0xMDcxLDEyICsxMDU3LDcgQEAKIAkJCQkJCQkgICAgIHRiLT5yYnl0ZXMpOwogCQkJCQkvKiBhcHBlbmQgaXRlbSBpbiBSWzBdICovCiAJCQkJCWlmIChwb3NfaW5faXRlbSA+PSAwKSB7Ci0JCQkJCQliaS50YiA9IHRiOwotCQkJCQkJYmkuYmlfYmggPSB0Yi0+UlswXTsKLQkJCQkJCWJpLmJpX3BhcmVudCA9IHRiLT5GUlswXTsKLQkJCQkJCWJpLmJpX3Bvc2l0aW9uID0KLQkJCQkJCSAgICBnZXRfcmlnaHRfbmVpZ2hib3JfcG9zaXRpb24KLQkJCQkJCSAgICAodGIsIDApOworCQkJCQkJYnVmZmVyX2luZm9faW5pdF9yaWdodCh0YiwgJmJpKTsKIAkJCQkJCWxlYWZfcGFzdGVfaW5fYnVmZmVyKCZiaSwKIAkJCQkJCQkJICAgICBpdGVtX3BvcyAtCiAJCQkJCQkJCSAgICAgbiArCkBAIC0xMDk2LDcgKzEwNzcsNyBAQAogCQkJCQkJCSAgIHRiLT5ybnVtWzBdKTsKIAkJCQkJaWYgKGlzX2RpcmVudHJ5X2xlX2loKHBhc3RlZCkKIAkJCQkJICAgICYmIHBvc19pbl9pdGVtID49IDApIHsKLQkJCQkJCWxlYWZfcGFzdGVfZW50cmllcyhiaS5iaV9iaCwKKwkJCQkJCWxlYWZfcGFzdGVfZW50cmllcygmYmksCiAJCQkJCQkJCSAgIGl0ZW1fcG9zIC0KIAkJCQkJCQkJICAgbiArCiAJCQkJCQkJCSAgIHRiLT5ybnVtWzBdLApAQCAtMTEzNiw4ICsxMTE3LDggQEAKIAkJCX0KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgkvKiBjYXNlcyBkIGFuZCB0ICovCi0JCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkJICAgICAgICJQQVAtMTIxNzU6IGJhbGFuY2VfbGVhZjogcm51bSA+IDA6IHVuZXhwZWN0YWJsZSBtb2RlOiAlcyglZCkiLAorCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiUEFQLTEyMTc1IiwKKwkJCQkgICAgICAgInJudW0gPiAwOiB1bmV4cGVjdGVkIG1vZGU6ICVzKCVkKSIsCiAJCQkJICAgICAgIChmbGFnID09CiAJCQkJCU1fREVMRVRFKSA/ICJERUxFVEUiIDogKChmbGFnID09CiAJCQkJCQkJCSBNX0NVVCkgPyAiQ1VUIgpAQCAtMTE2Nyw4ICsxMTQ4LDggQEAKIAkJICAgbm90IHNldCBjb3JyZWN0bHkgKi8KIAkJaWYgKHRiLT5DRkxbMF0pIHsKIAkJCWlmICghdGItPkNGUlswXSkKLQkJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkJCSAgICAgICAidnMtMTIxOTU6IGJhbGFuY2VfbGVhZjogQ0ZSIG5vdCBpbml0aWFsaXplZCIpOworCQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgInZzLTEyMTk1IiwKKwkJCQkJICAgICAgICJDRlIgbm90IGluaXRpYWxpemVkIik7CiAJCQljb3B5X2tleShCX05fUERFTElNX0tFWSh0Yi0+Q0ZMWzBdLCB0Yi0+bGtleVswXSksCiAJCQkJIEJfTl9QREVMSU1fS0VZKHRiLT5DRlJbMF0sIHRiLT5ya2V5WzBdKSk7CiAJCQlkb19iYWxhbmNlX21hcmtfaW50ZXJuYWxfZGlydHkodGIsIHRiLT5DRkxbMF0sIDApOwpAQCAtMTIzMiwxMCArMTIxMyw3IEBACiAJCQkJCXB1dF9paF9pdGVtX2xlbihpaCwgc2J5dGVzW2ldKTsKIAogCQkJCQkvKiBJbnNlcnQgcGFydCBvZiB0aGUgaXRlbSBpbnRvIFNfbmV3W2ldIGJlZm9yZSAwLXRoIGl0ZW0gKi8KLQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJYmkuYmlfYmggPSBTX25ld1tpXTsKLQkJCQkJYmkuYmlfcGFyZW50ID0gTlVMTDsKLQkJCQkJYmkuYmlfcG9zaXRpb24gPSAwOworCQkJCQlidWZmZXJfaW5mb19pbml0X2JoKHRiLCAmYmksIFNfbmV3W2ldKTsKIAogCQkJCQlpZiAoKG9sZF9sZW4gLSBzYnl0ZXNbaV0pID4gemVyb3NfbnVtKSB7CiAJCQkJCQlyX3plcm9zX251bWJlciA9IDA7CkBAIC0xMjY3LDEwICsxMjQ1LDcgQEAKIAkJCQkJCQlTX25ld1tpXSk7CiAKIAkJCQkJLyogSW5zZXJ0IG5ldyBpdGVtIGludG8gU19uZXdbaV0gKi8KLQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJYmkuYmlfYmggPSBTX25ld1tpXTsKLQkJCQkJYmkuYmlfcGFyZW50ID0gTlVMTDsKLQkJCQkJYmkuYmlfcG9zaXRpb24gPSAwOworCQkJCQlidWZmZXJfaW5mb19pbml0X2JoKHRiLCAmYmksIFNfbmV3W2ldKTsKIAkJCQkJbGVhZl9pbnNlcnRfaW50b19idWYoJmJpLAogCQkJCQkJCSAgICAgaXRlbV9wb3MgLSBuICsKIAkJCQkJCQkgICAgIHNudW1baV0gLSAxLCBpaCwKQEAgLTEzMjcsMTAgKzEzMDIsNyBAQAogCQkJCQkJCSAgICAgc2J5dGVzW2ldIC0gMSwKIAkJCQkJCQkgICAgIFNfbmV3W2ldKTsKIAkJCQkJCQkvKiBQYXN0ZSBnaXZlbiBkaXJlY3RvcnkgZW50cnkgdG8gZGlyZWN0b3J5IGl0ZW0gKi8KLQkJCQkJCQliaS50YiA9IHRiOwotCQkJCQkJCWJpLmJpX2JoID0gU19uZXdbaV07Ci0JCQkJCQkJYmkuYmlfcGFyZW50ID0gTlVMTDsKLQkJCQkJCQliaS5iaV9wb3NpdGlvbiA9IDA7CisJCQkJCQkJYnVmZmVyX2luZm9faW5pdF9iaCh0YiwgJmJpLCBTX25ld1tpXSk7CiAJCQkJCQkJbGVhZl9wYXN0ZV9pbl9idWZmZXIKIAkJCQkJCQkgICAgKCZiaSwgMCwKIAkJCQkJCQkgICAgIHBvc19pbl9pdGVtIC0KQEAgLTEzMzksOCArMTMxMSw3IEBACiAJCQkJCQkJICAgICB0Yi0+aW5zZXJ0X3NpemVbMF0sCiAJCQkJCQkJICAgICBib2R5LCB6ZXJvc19udW0pOwogCQkJCQkJCS8qIHBhc3RlIG5ldyBkaXJlY3RvcnkgZW50cnkgKi8KLQkJCQkJCQlsZWFmX3Bhc3RlX2VudHJpZXMoYmkuCi0JCQkJCQkJCQkgICBiaV9iaCwKKwkJCQkJCQlsZWFmX3Bhc3RlX2VudHJpZXMoJmJpLAogCQkJCQkJCQkJICAgMCwKIAkJCQkJCQkJCSAgIHBvc19pbl9pdGVtCiAJCQkJCQkJCQkgICAtCkBAIC0xNDAxLDExICsxMzcyLDcgQEAKIAkJCQkJCWlmIChuX3JlbSA8IDApCiAJCQkJCQkJbl9yZW0gPSAwOwogCQkJCQkJLyogQXBwZW5kIHBhcnQgb2YgYm9keSBpbnRvIFNfbmV3WzBdICovCi0JCQkJCQliaS50YiA9IHRiOwotCQkJCQkJYmkuYmlfYmggPSBTX25ld1tpXTsKLQkJCQkJCWJpLmJpX3BhcmVudCA9IE5VTEw7Ci0JCQkJCQliaS5iaV9wb3NpdGlvbiA9IDA7Ci0KKwkJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfYmgodGIsICZiaSwgU19uZXdbaV0pOwogCQkJCQkJaWYgKG5fcmVtID4gemVyb3NfbnVtKSB7CiAJCQkJCQkJcl96ZXJvc19udW1iZXIgPSAwOwogCQkJCQkJCXJfYm9keSA9CkBAIC0xNDc1LDcgKzE0NDIsMTAgQEAKIAkJCQkJICAgICYmIChwb3NfaW5faXRlbSAhPSBpaF9pdGVtX2xlbihpaF9jaGVjaykKIAkJCQkJCXx8IHRiLT5pbnNlcnRfc2l6ZVswXSA8PSAwKSkKIAkJCQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCQkJCQkgICAgICAgIlBBUC0xMjIzNTogYmFsYW5jZV9sZWFmOiBwb3NfaW5faXRlbSBtdXN0IGJlIGVxdWFsIHRvIGloX2l0ZW1fbGVuIik7CisJCQkJCQkJICAgICAiUEFQLTEyMjM1IiwKKwkJCQkJCQkgICAgICJwb3NfaW5faXRlbSAiCisJCQkJCQkJICAgICAibXVzdCBiZSBlcXVhbCAiCisJCQkJCQkJICAgICAidG8gaWhfaXRlbV9sZW4iKTsKICNlbmRpZgkJCQkvKiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgKi8KIAogCQkJCQlsZWFmX21pID0KQEAgLTE0ODksMTAgKzE0NTksNyBAQAogCQkJCQkgICAgICAgbGVhZl9taSk7CiAKIAkJCQkJLyogcGFzdGUgaW50byBpdGVtICovCi0JCQkJCWJpLnRiID0gdGI7Ci0JCQkJCWJpLmJpX2JoID0gU19uZXdbaV07Ci0JCQkJCWJpLmJpX3BhcmVudCA9IE5VTEw7Ci0JCQkJCWJpLmJpX3Bvc2l0aW9uID0gMDsKKwkJCQkJYnVmZmVyX2luZm9faW5pdF9iaCh0YiwgJmJpLCBTX25ld1tpXSk7CiAJCQkJCWxlYWZfcGFzdGVfaW5fYnVmZmVyKCZiaSwKIAkJCQkJCQkgICAgIGl0ZW1fcG9zIC0gbiArCiAJCQkJCQkJICAgICBzbnVtW2ldLApAQCAtMTUwNSw3ICsxNDcyLDcgQEAKIAkJCQkJCQkgICBpdGVtX3BvcyAtIG4gKwogCQkJCQkJCSAgIHNudW1baV0pOwogCQkJCQlpZiAoaXNfZGlyZW50cnlfbGVfaWgocGFzdGVkKSkgewotCQkJCQkJbGVhZl9wYXN0ZV9lbnRyaWVzKGJpLmJpX2JoLAorCQkJCQkJbGVhZl9wYXN0ZV9lbnRyaWVzKCZiaSwKIAkJCQkJCQkJICAgaXRlbV9wb3MgLQogCQkJCQkJCQkgICBuICsgc251bVtpXSwKIAkJCQkJCQkJICAgcG9zX2luX2l0ZW0sCkBAIC0xNTM1LDggKzE1MDIsOCBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CS8qIGNhc2VzIGQgYW5kIHQgKi8KLQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCQkgICAgICAgIlBBUC0xMjI0NTogYmFsYW5jZV9sZWFmOiBibGtudW0gPiAyOiB1bmV4cGVjdGFibGUgbW9kZTogJXMoJWQpIiwKKwkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgIlBBUC0xMjI0NSIsCisJCQkJICAgICAgICJibGtudW0gPiAyOiB1bmV4cGVjdGVkIG1vZGU6ICVzKCVkKSIsCiAJCQkJICAgICAgIChmbGFnID09CiAJCQkJCU1fREVMRVRFKSA/ICJERUxFVEUiIDogKChmbGFnID09CiAJCQkJCQkJCSBNX0NVVCkgPyAiQ1VUIgpAQCAtMTU1OSwxMCArMTUyNiw3IEBACiAKIAkJc3dpdGNoIChmbGFnKSB7CiAJCWNhc2UgTV9JTlNFUlQ6CS8qIGluc2VydCBpdGVtIGludG8gU1swXSAqLwotCQkJYmkudGIgPSB0YjsKLQkJCWJpLmJpX2JoID0gdGJTMDsKLQkJCWJpLmJpX3BhcmVudCA9IFBBVEhfSF9QUEFSRU5UKHRiLT50Yl9wYXRoLCAwKTsKLQkJCWJpLmJpX3Bvc2l0aW9uID0gUEFUSF9IX1BPU0lUSU9OKHRiLT50Yl9wYXRoLCAxKTsKKwkJCWJ1ZmZlcl9pbmZvX2luaXRfdGJTMCh0YiwgJmJpKTsKIAkJCWxlYWZfaW5zZXJ0X2ludG9fYnVmKCZiaSwgaXRlbV9wb3MsIGloLCBib2R5LAogCQkJCQkgICAgIHplcm9zX251bSk7CiAKQEAgLTE1ODksMTQgKzE1NTMsNyBAQAogCQkJCQkJICAgICAgICJQQVAtMTIyNjA6IGluc2VydF9zaXplIGlzIDAgYWxyZWFkeSIpOwogCiAJCQkJCQkvKiBwcmVwYXJlIHNwYWNlICovCi0JCQkJCQliaS50YiA9IHRiOwotCQkJCQkJYmkuYmlfYmggPSB0YlMwOwotCQkJCQkJYmkuYmlfcGFyZW50ID0KLQkJCQkJCSAgICBQQVRIX0hfUFBBUkVOVCh0Yi0+dGJfcGF0aCwKLQkJCQkJCQkJICAgMCk7Ci0JCQkJCQliaS5iaV9wb3NpdGlvbiA9Ci0JCQkJCQkgICAgUEFUSF9IX1BPU0lUSU9OKHRiLT50Yl9wYXRoLAotCQkJCQkJCQkgICAgMSk7CisJCQkJCQlidWZmZXJfaW5mb19pbml0X3RiUzAodGIsICZiaSk7CiAJCQkJCQlsZWFmX3Bhc3RlX2luX2J1ZmZlcigmYmksCiAJCQkJCQkJCSAgICAgaXRlbV9wb3MsCiAJCQkJCQkJCSAgICAgcG9zX2luX2l0ZW0sCkBAIC0xNjA2LDcgKzE1NjMsNyBAQAogCQkJCQkJCQkgICAgIHplcm9zX251bSk7CiAKIAkJCQkJCS8qIHBhc3RlIGVudHJ5ICovCi0JCQkJCQlsZWFmX3Bhc3RlX2VudHJpZXMoYmkuYmlfYmgsCisJCQkJCQlsZWFmX3Bhc3RlX2VudHJpZXMoJmJpLAogCQkJCQkJCQkgICBpdGVtX3BvcywKIAkJCQkJCQkJICAgcG9zX2luX2l0ZW0sCiAJCQkJCQkJCSAgIDEsCkBAIC0xNjQ0LDE0ICsxNjAxLDcgQEAKIAkJCQkJCVJGQUxTRSh0Yi0+aW5zZXJ0X3NpemVbMF0gPD0gMCwKIAkJCQkJCSAgICAgICAiUEFQLTEyMjc1OiBpbnNlcnQgc2l6ZSBtdXN0IG5vdCBiZSAlZCIsCiAJCQkJCQkgICAgICAgdGItPmluc2VydF9zaXplWzBdKTsKLQkJCQkJCWJpLnRiID0gdGI7Ci0JCQkJCQliaS5iaV9iaCA9IHRiUzA7Ci0JCQkJCQliaS5iaV9wYXJlbnQgPQotCQkJCQkJICAgIFBBVEhfSF9QUEFSRU5UKHRiLT50Yl9wYXRoLAotCQkJCQkJCQkgICAwKTsKLQkJCQkJCWJpLmJpX3Bvc2l0aW9uID0KLQkJCQkJCSAgICBQQVRIX0hfUE9TSVRJT04odGItPnRiX3BhdGgsCi0JCQkJCQkJCSAgICAxKTsKKwkJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfdGJTMCh0YiwgJmJpKTsKIAkJCQkJCWxlYWZfcGFzdGVfaW5fYnVmZmVyKCZiaSwKIAkJCQkJCQkJICAgICBpdGVtX3BvcywKIAkJCQkJCQkJICAgICBwb3NfaW5faXRlbSwKQEAgLTE2ODEsMTAgKzE2MzEsMTEgQEAKIAkJCQkJCQlwcmludF9jdXJfdGIoIjEyMjg1Iik7CiAJCQkJCQkJcmVpc2VyZnNfcGFuaWModGItPgogCQkJCQkJCQkgICAgICAgdGJfc2IsCi0JCQkJCQkJCSAgICAgICAiUEFQLTEyMjg1OiBiYWxhbmNlX2xlYWY6IGluc2VydF9zaXplIG11c3QgYmUgMCAoJWQpIiwKLQkJCQkJCQkJICAgICAgIHRiLT4KLQkJCQkJCQkJICAgICAgIGluc2VydF9zaXplCi0JCQkJCQkJCSAgICAgICBbMF0pOworCQkJCQkJCSAgICAiUEFQLTEyMjg1IiwKKwkJCQkJCQkgICAgImluc2VydF9zaXplICIKKwkJCQkJCQkgICAgIm11c3QgYmUgMCAiCisJCQkJCQkJICAgICIoJWQpIiwKKwkJCQkJCQkgICAgdGItPmluc2VydF9zaXplWzBdKTsKIAkJCQkJCX0KIAkJCQkJfQogI2VuZGlmCQkJCS8qIENPTkZJR19SRUlTRVJGU19DSEVDSyAqLwpAQCAtMTY5NywxMSArMTY0OCwxMCBAQAogCWlmIChmbGFnID09IE1fUEFTVEUgJiYgdGItPmluc2VydF9zaXplWzBdKSB7CiAJCXByaW50X2N1cl90YigiMTIyOTAiKTsKIAkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJICAgICAgICJQQVAtMTIyOTA6IGJhbGFuY2VfbGVhZjogaW5zZXJ0X3NpemUgaXMgc3RpbGwgbm90IDAgKCVkKSIsCisJCQkgICAgICAgIlBBUC0xMjI5MCIsICJpbnNlcnRfc2l6ZSBpcyBzdGlsbCBub3QgMCAoJWQpIiwKIAkJCSAgICAgICB0Yi0+aW5zZXJ0X3NpemVbMF0pOwogCX0KICNlbmRpZgkJCQkvKiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgKi8KLQogCXJldHVybiAwOwogfQkJCQkvKiBMZWFmIGxldmVsIG9mIHRoZSB0cmVlIGlzIGJhbGFuY2VkIChlbmQgb2YgYmFsYW5jZV9sZWFmKSAqLwogCkBAIC0xNzI0LDcgKzE2NzQsNiBAQAogc3RydWN0IGJ1ZmZlcl9oZWFkICpnZXRfRkVCKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiKQogewogCWludCBpOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqZmlyc3RfYjsKIAlzdHJ1Y3QgYnVmZmVyX2luZm8gYmk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0ZFQl9TSVpFOyBpKyspCkBAIC0xNzMyLDE5ICsxNjgxLDE1IEBACiAJCQlicmVhazsKIAogCWlmIChpID09IE1BWF9GRUJfU0laRSkKLQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJICAgICAgICJ2cy0xMjMwMDogZ2V0X0ZFQjogRkVCIGxpc3QgaXMgZW1wdHkiKTsKKwkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAidnMtMTIzMDAiLCAiRkVCIGxpc3QgaXMgZW1wdHkiKTsKIAotCWJpLnRiID0gdGI7Ci0JYmkuYmlfYmggPSBmaXJzdF9iID0gdGItPkZFQltpXTsKLQliaS5iaV9wYXJlbnQgPSBOVUxMOwotCWJpLmJpX3Bvc2l0aW9uID0gMDsKKwlidWZmZXJfaW5mb19pbml0X2JoKHRiLCAmYmksIHRiLT5GRUJbaV0pOwogCW1ha2VfZW1wdHlfbm9kZSgmYmkpOwotCXNldF9idWZmZXJfdXB0b2RhdGUoZmlyc3RfYik7CisJc2V0X2J1ZmZlcl91cHRvZGF0ZSh0Yi0+RkVCW2ldKTsKKwl0Yi0+dXNlZFtpXSA9IHRiLT5GRUJbaV07CiAJdGItPkZFQltpXSA9IE5VTEw7Ci0JdGItPnVzZWRbaV0gPSBmaXJzdF9iOwogCi0JcmV0dXJuIChmaXJzdF9iKTsKKwlyZXR1cm4gdGItPnVzZWRbaV07CiB9CiAKIC8qIFRoaXMgaXMgbm93IHVzZWQgYmVjYXVzZSByZWlzZXJmc19mcmVlX2Jsb2NrIGhhcyB0byBiZSBhYmxlIHRvCkBAIC0xNzU1LDE1ICsxNzAwLDE2IEBACiAJaW50IGk7CiAKIAlpZiAoYnVmZmVyX2RpcnR5KGJoKSkKLQkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsCi0JCQkJICJzdG9yZV90aHJvd24gZGVhbHMgd2l0aCBkaXJ0eSBidWZmZXIiKTsKKwkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsICJyZWlzZXJmcy0xMjMyMCIsCisJCQkJICJjYWxsZWQgd2l0aCBkaXJ0eSBidWZmZXIiKTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0Yi0+dGhyb3duKTsgaSsrKQogCQlpZiAoIXRiLT50aHJvd25baV0pIHsKIAkJCXRiLT50aHJvd25baV0gPSBiaDsKIAkJCWdldF9iaChiaCk7CS8qIGZyZWVfdGhyb3duIHB1dHMgdGhpcyAqLwogCQkJcmV0dXJuOwogCQl9Ci0JcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsICJzdG9yZV90aHJvd246IHRvbyBtYW55IHRocm93biBidWZmZXJzIik7CisJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsICJyZWlzZXJmcy0xMjMyMSIsCisJCQkgInRvbyBtYW55IHRocm93biBidWZmZXJzIik7CiB9CiAKIHN0YXRpYyB2b2lkIGZyZWVfdGhyb3duKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiKQpAQCAtMTc3NCw4ICsxNzIwLDggQEAKIAkJaWYgKHRiLT50aHJvd25baV0pIHsKIAkJCWJsb2NrbnIgPSB0Yi0+dGhyb3duW2ldLT5iX2Jsb2NrbnI7CiAJCQlpZiAoYnVmZmVyX2RpcnR5KHRiLT50aHJvd25baV0pKQotCQkJCXJlaXNlcmZzX3dhcm5pbmcodGItPnRiX3NiLAotCQkJCQkJICJmcmVlX3Rocm93biBkZWFscyB3aXRoIGRpcnR5IGJ1ZmZlciAlZCIsCisJCQkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsICJyZWlzZXJmcy0xMjMyMiIsCisJCQkJCQkgImNhbGxlZCB3aXRoIGRpcnR5IGJ1ZmZlciAlZCIsCiAJCQkJCQkgYmxvY2tucik7CiAJCQlicmVsc2UodGItPnRocm93bltpXSk7CS8qIGluY3JlbWVudGVkIGluIHN0b3JlX3Rocm93biAqLwogCQkJcmVpc2VyZnNfZnJlZV9ibG9jayh0Yi0+dHJhbnNhY3Rpb25faGFuZGxlLCBOVUxMLApAQCAtMTg3MywyMCArMTgxOSwxOSBAQAogCWZvciAoaSA9IDA7IGkgPD0gQl9OUl9JVEVNUyhiaCk7IGkrKywgZGMrKykgewogCQlpZiAoIWlzX3JldXNhYmxlKHMsIGRjX2Jsb2NrX251bWJlcihkYyksIDEpKSB7CiAJCQlwcmludF9jdXJfdGIobWVzKTsKLQkJCXJlaXNlcmZzX3BhbmljKHMsCi0JCQkJICAgICAgICJQQVAtMTIzMzg6IGNoZWNrX2ludGVybmFsX25vZGU6IGludmFsaWQgY2hpbGQgcG9pbnRlciAleSBpbiAlYiIsCisJCQlyZWlzZXJmc19wYW5pYyhzLCAiUEFQLTEyMzM4IiwKKwkJCQkgICAgICAgImludmFsaWQgY2hpbGQgcG9pbnRlciAleSBpbiAlYiIsCiAJCQkJICAgICAgIGRjLCBiaCk7CiAJCX0KIAl9CiB9CiAKLXN0YXRpYyBpbnQgbG9ja2VkX29yX25vdF9pbl90cmVlKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGNoYXIgKndoaWNoKQorc3RhdGljIGludCBsb2NrZWRfb3Jfbm90X2luX3RyZWUoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsCisJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBjaGFyICp3aGljaCkKIHsKIAlpZiAoKCFidWZmZXJfam91cm5hbF9wcmVwYXJlZChiaCkgJiYgYnVmZmVyX2xvY2tlZChiaCkpIHx8CiAJICAgICFCX0lTX0lOX1RSRUUoYmgpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkgInZzLTEyMzM5OiBsb2NrZWRfb3Jfbm90X2luX3RyZWU6ICVzICglYikiLAotCQkJCSB3aGljaCwgYmgpOworCQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwgInZzLTEyMzM5IiwgIiVzICglYikiLCB3aGljaCwgYmgpOwogCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xODk3LDI2ICsxODQyLDI4IEBACiAJaW50IHJldHZhbCA9IDA7CiAKIAlpZiAoY3VyX3RiKSB7Ci0JCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgInZzLTEyMzM1OiBjaGVja19iZWZvcmVfYmFsYW5jaW5nOiAiCi0JCQkgICAgICAgInN1c3BlY3QgdGhhdCBzY2hlZHVsZSBvY2N1cnJlZCBiYXNlZCBvbiBjdXJfdGIgbm90IGJlaW5nIG51bGwgYXQgdGhpcyBwb2ludCBpbiBjb2RlLiAiCi0JCQkgICAgICAgImRvX2JhbGFuY2UgY2Fubm90IHByb3Blcmx5IGhhbmRsZSBzY2hlZHVsZSBvY2N1cnJpbmcgd2hpbGUgaXQgcnVucy4iKTsKKwkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAidnMtMTIzMzUiLCAic3VzcGVjdCB0aGF0IHNjaGVkdWxlICIKKwkJCSAgICAgICAib2NjdXJyZWQgYmFzZWQgb24gY3VyX3RiIG5vdCBiZWluZyBudWxsIGF0ICIKKwkJCSAgICAgICAidGhpcyBwb2ludCBpbiBjb2RlLiBkb19iYWxhbmNlIGNhbm5vdCBwcm9wZXJseSAiCisJCQkgICAgICAgImhhbmRsZSBzY2hlZHVsZSBvY2N1cnJpbmcgd2hpbGUgaXQgcnVucy4iKTsKIAl9CiAKIAkvKiBkb3VibGUgY2hlY2sgdGhhdCBidWZmZXJzIHRoYXQgd2Ugd2lsbCBtb2RpZnkgYXJlIHVubG9ja2VkLiAoZml4X25vZGVzIHNob3VsZCBhbHJlYWR5IGhhdmUKIAkgICBwcmVwcGVkIGFsbCBvZiB0aGVzZSBmb3IgdXMpLiAqLwogCWlmICh0Yi0+bG51bVswXSkgewotCQlyZXR2YWwgfD0gbG9ja2VkX29yX25vdF9pbl90cmVlKHRiLT5MWzBdLCAiTFswXSIpOwotCQlyZXR2YWwgfD0gbG9ja2VkX29yX25vdF9pbl90cmVlKHRiLT5GTFswXSwgIkZMWzBdIik7Ci0JCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUodGItPkNGTFswXSwgIkNGTFswXSIpOworCQlyZXR2YWwgfD0gbG9ja2VkX29yX25vdF9pbl90cmVlKHRiLCB0Yi0+TFswXSwgIkxbMF0iKTsKKwkJcmV0dmFsIHw9IGxvY2tlZF9vcl9ub3RfaW5fdHJlZSh0YiwgdGItPkZMWzBdLCAiRkxbMF0iKTsKKwkJcmV0dmFsIHw9IGxvY2tlZF9vcl9ub3RfaW5fdHJlZSh0YiwgdGItPkNGTFswXSwgIkNGTFswXSIpOwogCQljaGVja19sZWFmKHRiLT5MWzBdKTsKIAl9CiAJaWYgKHRiLT5ybnVtWzBdKSB7Ci0JCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUodGItPlJbMF0sICJSWzBdIik7Ci0JCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUodGItPkZSWzBdLCAiRlJbMF0iKTsKLQkJcmV0dmFsIHw9IGxvY2tlZF9vcl9ub3RfaW5fdHJlZSh0Yi0+Q0ZSWzBdLCAiQ0ZSWzBdIik7CisJCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUodGIsIHRiLT5SWzBdLCAiUlswXSIpOworCQlyZXR2YWwgfD0gbG9ja2VkX29yX25vdF9pbl90cmVlKHRiLCB0Yi0+RlJbMF0sICJGUlswXSIpOworCQlyZXR2YWwgfD0gbG9ja2VkX29yX25vdF9pbl90cmVlKHRiLCB0Yi0+Q0ZSWzBdLCAiQ0ZSWzBdIik7CiAJCWNoZWNrX2xlYWYodGItPlJbMF0pOwogCX0KLQlyZXR2YWwgfD0gbG9ja2VkX29yX25vdF9pbl90cmVlKFBBVEhfUExBU1RfQlVGRkVSKHRiLT50Yl9wYXRoKSwgIlNbMF0iKTsKKwlyZXR2YWwgfD0gbG9ja2VkX29yX25vdF9pbl90cmVlKHRiLCBQQVRIX1BMQVNUX0JVRkZFUih0Yi0+dGJfcGF0aCksCisJCQkJCSJTWzBdIik7CiAJY2hlY2tfbGVhZihQQVRIX1BMQVNUX0JVRkZFUih0Yi0+dGJfcGF0aCkpOwogCiAJcmV0dXJuIHJldHZhbDsKQEAgLTE5MzAsOCArMTg3Nyw4IEBACiAJCSAgICBkY19zaXplKEJfTl9DSElMRAogCQkJICAgICh0Yi0+RkxbMF0sIGdldF9sZWZ0X25laWdoYm9yX3Bvc2l0aW9uKHRiLCAwKSkpKSB7CiAJCQlwcmludF9jdXJfdGIoIjEyMjIxIik7Ci0JCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkJICAgICAgICJQQVAtMTIzNTU6IGNoZWNrX2FmdGVyX2JhbGFuY2VfbGVhZjogc2hpZnQgdG8gbGVmdCB3YXMgaW5jb3JyZWN0Iik7CisJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJQQVAtMTIzNTUiLAorCQkJCSAgICAgICAic2hpZnQgdG8gbGVmdCB3YXMgaW5jb3JyZWN0Iik7CiAJCX0KIAl9CiAJaWYgKHRiLT5ybnVtWzBdKSB7CkBAIC0xOTQwLDggKzE4ODcsOCBAQAogCQkgICAgZGNfc2l6ZShCX05fQ0hJTEQKIAkJCSAgICAodGItPkZSWzBdLCBnZXRfcmlnaHRfbmVpZ2hib3JfcG9zaXRpb24odGIsIDApKSkpIHsKIAkJCXByaW50X2N1cl90YigiMTIyMjIiKTsKLQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCQkgICAgICAgIlBBUC0xMjM2MDogY2hlY2tfYWZ0ZXJfYmFsYW5jZV9sZWFmOiBzaGlmdCB0byByaWdodCB3YXMgaW5jb3JyZWN0Iik7CisJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJQQVAtMTIzNjAiLAorCQkJCSAgICAgICAic2hpZnQgdG8gcmlnaHQgd2FzIGluY29ycmVjdCIpOwogCQl9CiAJfQogCWlmIChQQVRIX0hfUEJVRkZFUih0Yi0+dGJfcGF0aCwgMSkgJiYKQEAgLTE5NTUsNyArMTkwMiw3IEBACiAJCQkJCSAgICAgICBQQVRIX0hfUE9TSVRJT04odGItPnRiX3BhdGgsCiAJCQkJCQkJICAgICAgIDEpKSkpOwogCQlwcmludF9jdXJfdGIoIjEyMjIzIik7Ci0JCXJlaXNlcmZzX3dhcm5pbmcodGItPnRiX3NiLAorCQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwgInJlaXNlcmZzLTEyMzYzIiwKIAkJCQkgIkJfRlJFRV9TUEFDRSAoUEFUSF9IX1BCVUZGRVIodGItPnRiX3BhdGgsMCkpID0gJWQ7ICIKIAkJCQkgIk1BWF9DSElMRF9TSVpFICglZCkgLSBkY19zaXplKCAleSwgJWQgKSBbJWRdID0gJWQiLAogCQkJCSBsZWZ0LApAQCAtMTk2Niw4ICsxOTEzLDcgQEAKIAkJCQkJIChQQVRIX0hfUEJVRkZFUih0Yi0+dGJfcGF0aCwgMSksCiAJCQkJCSAgUEFUSF9IX1BPU0lUSU9OKHRiLT50Yl9wYXRoLCAxKSkpLAogCQkJCSByaWdodCk7Ci0JCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCSAgICAgICAiUEFQLTEyMzY1OiBjaGVja19hZnRlcl9iYWxhbmNlX2xlYWY6IFMgaXMgaW5jb3JyZWN0Iik7CisJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgIlBBUC0xMjM2NSIsICJTIGlzIGluY29ycmVjdCIpOwogCX0KIH0KIApAQCAtMjAzNyw3ICsxOTgzLDcgQEAKIAkvKiBzdG9yZV9wcmludF90YiAodGIpOyAqLwogCiAJLyogZG8gbm90IGRlbGV0ZSwganVzdCBjb21tZW50IGl0IG91dCAqLwotLyogICAgcHJpbnRfdGIoZmxhZywgUEFUSF9MQVNUX1BPU0lUSU9OKHRiLT50Yl9wYXRoKSwgdGItPnRiX3BhdGgtPnBvc19pbl9pdGVtLCB0YiwgCisvKiAgICBwcmludF90YihmbGFnLCBQQVRIX0xBU1RfUE9TSVRJT04odGItPnRiX3BhdGgpLCB0Yi0+dGJfcGF0aC0+cG9zX2luX2l0ZW0sIHRiLAogCSAgICAgImNoZWNrIik7Ki8KIAlSRkFMU0UoY2hlY2tfYmVmb3JlX2JhbGFuY2luZyh0YiksICJQQVAtMTIzNDA6IGxvY2tlZCBidWZmZXJzIGluIFRCIik7CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCkBAIC0yMTAyLDE0ICsyMDQ4LDEzIEBACiAJdGItPm5lZWRfYmFsYW5jZV9kaXJ0eSA9IDA7CiAKIAlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHRiKSkgewotCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkgICAgICAgImNsbS02MDAwOiBkb19iYWxhbmNlLCBmcyBnZW5lcmF0aW9uIGhhcyBjaGFuZ2VkXG4iKTsKKwkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiY2xtLTYwMDAiLCAiZnMgZ2VuZXJhdGlvbiBoYXMgIgorCQkJICAgICAgICJjaGFuZ2VkIik7CiAJfQogCS8qIGlmIHdlIGhhdmUgbm8gcmVhbCB3b3JrIHRvIGRvICAqLwogCWlmICghdGItPmluc2VydF9zaXplWzBdKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcodGItPnRiX3NiLAotCQkJCSAiUEFQLTEyMzUwOiBkb19iYWxhbmNlOiBpbnNlcnRfc2l6ZSA9PSAwLCBtb2RlID09ICVjIiwKLQkJCQkgZmxhZyk7CisJCXJlaXNlcmZzX3dhcm5pbmcodGItPnRiX3NiLCAiUEFQLTEyMzUwIiwKKwkJCQkgImluc2VydF9zaXplID09IDAsIG1vZGUgPT0gJWMiLCBmbGFnKTsKIAkJdW5maXhfbm9kZXModGIpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvZmlsZS5jIGIvZnMvcmVpc2VyZnMvZmlsZS5jCmluZGV4IDMzNDA4NDEuLjlmNDM2NjYgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2ZpbGUuYworKysgYi9mcy9yZWlzZXJmcy9maWxlLmMKQEAgLTIwLDE0ICsyMCwxNCBAQAogKiogaW5zZXJ0aW9uL2JhbGFuY2luZywgZm9yIGZpbGVzIHRoYXQgYXJlIHdyaXR0ZW4gaW4gb25lIHdyaXRlLgogKiogSXQgYXZvaWRzIHVubmVjZXNzYXJ5IHRhaWwgcGFja2luZ3MgKGJhbGFuY2VzKSBmb3IgZmlsZXMgdGhhdCBhcmUgd3JpdHRlbiBpbgogKiogbXVsdGlwbGUgd3JpdGVzIGFuZCBhcmUgc21hbGwgZW5vdWdoIHRvIGhhdmUgdGFpbHMuCi0qKiAKKyoqCiAqKiBmaWxlX3JlbGVhc2UgaXMgY2FsbGVkIGJ5IHRoZSBWRlMgbGF5ZXIgd2hlbiB0aGUgZmlsZSBpcyBjbG9zZWQuICBJZgogKiogdGhpcyBpcyB0aGUgbGFzdCBvcGVuIGZpbGUgZGVzY3JpcHRvciwgYW5kIHRoZSBmaWxlCiAqKiBzbWFsbCBlbm91Z2ggdG8gaGF2ZSBhIHRhaWwsIGFuZCB0aGUgdGFpbCBpcyBjdXJyZW50bHkgaW4gYW4KICoqIHVuZm9ybWF0dGVkIG5vZGUsIHRoZSB0YWlsIGlzIGNvbnZlcnRlZCBiYWNrIGludG8gYSBkaXJlY3QgaXRlbS4KLSoqIAorKioKICoqIFdlIHVzZSByZWlzZXJmc190cnVuY2F0ZV9maWxlIHRvIHBhY2sgdGhlIHRhaWwsIHNpbmNlIGl0IGFscmVhZHkgaGFzCi0qKiBhbGwgdGhlIGNvbmRpdGlvbnMgY29kZWQuICAKKyoqIGFsbCB0aGUgY29uZGl0aW9ucyBjb2RlZC4KICovCiBzdGF0aWMgaW50IHJlaXNlcmZzX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKQEAgLTc2LDcgKzc2LDcgQEAKIAkJCSAqIGFuZCBsZXQgdGhlIGFkbWluIGtub3cgd2hhdCBpcyBnb2luZyBvbi4KIAkJCSAqLwogCQkJaWdyYWIoaW5vZGUpOwotCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKKwkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJjbG0tOTAwMSIsCiAJCQkJCSAicGlubmluZyBpbm9kZSAlbHUgYmVjYXVzZSB0aGUgIgogCQkJCQkgInByZWFsbG9jYXRpb24gY2FuJ3QgYmUgZnJlZWQiLAogCQkJCQkgaW5vZGUtPmlfaW5vKTsKQEAgLTEzNCwyMyArMTM0LDIzIEBACiAgKiBiZSByZW1vdmVkLi4uCiAgKi8KIAotc3RhdGljIGludCByZWlzZXJmc19zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKnBfc19maWxwLAotCQkJICAgICAgc3RydWN0IGRlbnRyeSAqcF9zX2RlbnRyeSwgaW50IGRhdGFzeW5jKQorc3RhdGljIGludCByZWlzZXJmc19zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBkYXRhc3luYykKIHsKLQlzdHJ1Y3QgaW5vZGUgKnBfc19pbm9kZSA9IHBfc19kZW50cnktPmRfaW5vZGU7Ci0JaW50IG5fZXJyOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJaW50IGVycjsKIAlpbnQgYmFycmllcl9kb25lOwogCi0JQlVHX09OKCFTX0lTUkVHKHBfc19pbm9kZS0+aV9tb2RlKSk7Ci0Jbl9lcnIgPSBzeW5jX21hcHBpbmdfYnVmZmVycyhwX3NfaW5vZGUtPmlfbWFwcGluZyk7Ci0JcmVpc2VyZnNfd3JpdGVfbG9jayhwX3NfaW5vZGUtPmlfc2IpOwotCWJhcnJpZXJfZG9uZSA9IHJlaXNlcmZzX2NvbW1pdF9mb3JfaW5vZGUocF9zX2lub2RlKTsKLQlyZWlzZXJmc193cml0ZV91bmxvY2socF9zX2lub2RlLT5pX3NiKTsKLQlpZiAoYmFycmllcl9kb25lICE9IDEgJiYgcmVpc2VyZnNfYmFycmllcl9mbHVzaChwX3NfaW5vZGUtPmlfc2IpKQotCQlibGtkZXZfaXNzdWVfZmx1c2gocF9zX2lub2RlLT5pX3NiLT5zX2JkZXYsIE5VTEwpOworCUJVR19PTighU19JU1JFRyhpbm9kZS0+aV9tb2RlKSk7CisJZXJyID0gc3luY19tYXBwaW5nX2J1ZmZlcnMoaW5vZGUtPmlfbWFwcGluZyk7CisJcmVpc2VyZnNfd3JpdGVfbG9jayhpbm9kZS0+aV9zYik7CisJYmFycmllcl9kb25lID0gcmVpc2VyZnNfY29tbWl0X2Zvcl9pbm9kZShpbm9kZSk7CisJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKKwlpZiAoYmFycmllcl9kb25lICE9IDEgJiYgcmVpc2VyZnNfYmFycmllcl9mbHVzaChpbm9kZS0+aV9zYikpCisJCWJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS0+aV9zYi0+c19iZGV2LCBOVUxMKTsKIAlpZiAoYmFycmllcl9kb25lIDwgMCkKIAkJcmV0dXJuIGJhcnJpZXJfZG9uZTsKLQlyZXR1cm4gKG5fZXJyIDwgMCkgPyAtRUlPIDogMDsKKwlyZXR1cm4gKGVyciA8IDApID8gLUVJTyA6IDA7CiB9CiAKIC8qIHRha2VuIGZzL2J1ZmZlci5jOl9fYmxvY2tfY29tbWl0X3dyaXRlICovCkBAIC0yMjMsNyArMjIzLDcgQEAKIH0KIAogLyogV3JpdGUgQGNvdW50IGJ5dGVzIGF0IHBvc2l0aW9uIEBwcG9zIGluIGEgZmlsZSBpbmRpY2F0ZWQgYnkgQGZpbGUKLSAgIGZyb20gdGhlIGJ1ZmZlciBAYnVmLiAgCisgICBmcm9tIHRoZSBidWZmZXIgQGJ1Zi4KIAogICAgZ2VuZXJpY19maWxlX3dyaXRlKCkgaXMgb25seSBhcHByb3ByaWF0ZSBmb3IgZmlsZXN5c3RlbXMgdGhhdCBhcmUgbm90IHNlZWtpbmcgdG8gb3B0aW1pemUgcGVyZm9ybWFuY2UgYW5kIHdhbnQKICAgIHNvbWV0aGluZyBzaW1wbGUgdGhhdCB3b3Jrcy4gIEl0IGlzIG5vdCBmb3Igc2VyaW91cyB1c2UgYnkgZ2VuZXJhbCBwdXJwb3NlIGZpbGVzeXN0ZW1zLCBleGNlcHRpbmcgdGhlIG9uZSB0aGF0IGl0IHdhcwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvZml4X25vZGUuYyBiL2ZzL3JlaXNlcmZzL2ZpeF9ub2RlLmMKaW5kZXggMDdkMDVlMC4uNWU1YTRlNiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvZml4X25vZGUuYworKysgYi9mcy9yZWlzZXJmcy9maXhfbm9kZS5jCkBAIC0zMCw4ICszMCw4IEBACiAgKiogZ2V0X2RpcmVjdF9wYXJlbnQKICAqKiBnZXRfbmVpZ2hib3JzCiAgKiogZml4X25vZGVzCi0gKiogCi0gKiogCisgKioKKyAqKgogICoqLwogCiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgpAQCAtMTM1LDggKzEzNSw3IEBACiAJCXZuLT52bl9mcmVlX3B0ciArPQogCQkgICAgb3BfY3JlYXRlX3ZpKHZuLCB2aSwgaXNfYWZmZWN0ZWQsIHRiLT5pbnNlcnRfc2l6ZVswXSk7CiAJCWlmICh0Yi0+dm5fYnVmICsgdGItPnZuX2J1Zl9zaXplIDwgdm4tPnZuX2ZyZWVfcHRyKQotCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJCSAgICAgICAidnMtODAzMDogY3JlYXRlX3ZpcnR1YWxfbm9kZTogIgorCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAidnMtODAzMCIsCiAJCQkJICAgICAgICJ2aXJ0dWFsIG5vZGUgc3BhY2UgY29uc3VtZWQiKTsKIAogCQlpZiAoIWlzX2FmZmVjdGVkKQpAQCAtMTg2LDggKzE4NSw5IEBACiAJCQkgICAgICYmIElfRU5UUllfQ09VTlQoQl9OX1BJVEVNX0hFQUQoU2gsIDApKSA9PSAxKSkgewogCQkJCS8qIG5vZGUgY29udGFpbnMgbW9yZSB0aGFuIDEgaXRlbSwgb3IgaXRlbSBpcyBub3QgZGlyZWN0b3J5IGl0ZW0sIG9yIHRoaXMgaXRlbSBjb250YWlucyBtb3JlIHRoYW4gMSBlbnRyeSAqLwogCQkJCXByaW50X2Jsb2NrKFNoLCAwLCAtMSwgLTEpOwotCQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCQkJICAgICAgICJ2cy04MDQ1OiBjcmVhdGVfdmlydHVhbF9ub2RlOiByZGtleSAlaywgYWZmZWN0ZWQgaXRlbT09JWQgKG1vZGU9PSVjKSBNdXN0IGJlICVjIiwKKwkJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJ2cy04MDQ1IiwKKwkJCQkJICAgICAgICJyZGtleSAlaywgYWZmZWN0ZWQgaXRlbT09JWQgIgorCQkJCQkgICAgICAgIihtb2RlPT0lYykgTXVzdCBiZSAlYyIsCiAJCQkJCSAgICAgICBrZXksIHZuLT52bl9hZmZlY3RlZF9pdGVtX251bSwKIAkJCQkJICAgICAgIHZuLT52bl9tb2RlLCBNX0RFTEVURSk7CiAJCQl9CkBAIC0zNzcsOSArMzc3LDkgQEAKIAlpbnQgbmVlZGVkX25vZGVzOwogCWludCBzdGFydF9pdGVtLAkJLyogcG9zaXRpb24gb2YgaXRlbSB3ZSBzdGFydCBmaWxsaW5nIG5vZGUgZnJvbSAqLwogCSBlbmRfaXRlbSwJCS8qIHBvc2l0aW9uIG9mIGl0ZW0gd2UgZmluaXNoIGZpbGxpbmcgbm9kZSBieSAqLwotCSBzdGFydF9ieXRlcywJCS8qIG51bWJlciBvZiBmaXJzdCBieXRlcyAoZW50cmllcyBmb3IgZGlyZWN0b3J5KSBvZiBzdGFydF9pdGVtLXRoIGl0ZW0gCisJIHN0YXJ0X2J5dGVzLAkJLyogbnVtYmVyIG9mIGZpcnN0IGJ5dGVzIChlbnRyaWVzIGZvciBkaXJlY3RvcnkpIG9mIHN0YXJ0X2l0ZW0tdGggaXRlbQogCQkJCSAgIHdlIGRvIG5vdCBpbmNsdWRlIGludG8gbm9kZSB0aGF0IGlzIGJlaW5nIGZpbGxlZCAqLwotCSBlbmRfYnl0ZXM7CQkvKiBudW1iZXIgb2YgbGFzdCBieXRlcyAoZW50cmllcyBmb3IgZGlyZWN0b3J5KSBvZiBlbmRfaXRlbS10aCBpdGVtIAorCSBlbmRfYnl0ZXM7CQkvKiBudW1iZXIgb2YgbGFzdCBieXRlcyAoZW50cmllcyBmb3IgZGlyZWN0b3J5KSBvZiBlbmRfaXRlbS10aCBpdGVtCiAJCQkJICAgd2UgZG8gbm9kZSBpbmNsdWRlIGludG8gbm9kZSB0aGF0IGlzIGJlaW5nIGZpbGxlZCAqLwogCWludCBzcGxpdF9pdGVtX3Bvc2l0aW9uc1syXTsJLyogdGhlc2UgYXJlIHBvc2l0aW9ucyBpbiB2aXJ0dWFsIGl0ZW0gb2YKIAkJCQkJICAgaXRlbXMsIHRoYXQgYXJlIHNwbGl0IGJldHdlZW4gU1swXSBhbmQKQEAgLTQ5Niw4ICs0OTYsOCBAQAogCQlzbnVtMDEyW25lZWRlZF9ub2RlcyAtIDEgKyAzXSA9IHVuaXRzOwogCiAJCWlmIChuZWVkZWRfbm9kZXMgPiAyKQotCQkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsICJ2cy04MTExOiBnZXRfbnVtX3ZlcjogIgotCQkJCQkgInNwbGl0X2l0ZW1fcG9zaXRpb24gaXMgb3V0IG9mIGJvdW5kYXJ5Iik7CisJCQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwgInZzLTgxMTEiLAorCQkJCQkgInNwbGl0X2l0ZW1fcG9zaXRpb24gaXMgb3V0IG9mIHJhbmdlIik7CiAJCXNudW0wMTJbbmVlZGVkX25vZGVzIC0gMV0rKzsKIAkJc3BsaXRfaXRlbV9wb3NpdGlvbnNbbmVlZGVkX25vZGVzIC0gMV0gPSBpOwogCQluZWVkZWRfbm9kZXMrKzsKQEAgLTUzMyw4ICs1MzMsOCBAQAogCiAJCWlmICh2bi0+dm5fdmlbc3BsaXRfaXRlbV9udW1dLnZpX2luZGV4ICE9IFRZUEVfRElSRU5UUlkgJiYKIAkJICAgIHZuLT52bl92aVtzcGxpdF9pdGVtX251bV0udmlfaW5kZXggIT0gVFlQRV9JTkRJUkVDVCkKLQkJCXJlaXNlcmZzX3dhcm5pbmcodGItPnRiX3NiLCAidnMtODExNTogZ2V0X251bV92ZXI6IG5vdCAiCi0JCQkJCSAiZGlyZWN0b3J5IG9yIGluZGlyZWN0IGl0ZW0iKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcodGItPnRiX3NiLCAidnMtODExNSIsCisJCQkJCSAibm90IGRpcmVjdG9yeSBvciBpbmRpcmVjdCBpdGVtIik7CiAJfQogCiAJLyogbm93IHdlIGtub3cgUzJieXRlcywgY2FsY3VsYXRlIFMxYnl0ZXMgKi8KQEAgLTU2OSw3ICs1NjksNyBAQAogCiAvKiBTZXQgcGFyYW1ldGVycyBmb3IgYmFsYW5jaW5nLgogICogUGVyZm9ybXMgd3JpdGUgb2YgcmVzdWx0cyBvZiBhbmFseXNpcyBvZiBiYWxhbmNpbmcgaW50byBzdHJ1Y3R1cmUgdGIsCi0gKiB3aGVyZSBpdCB3aWxsIGxhdGVyIGJlIHVzZWQgYnkgdGhlIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5IGRvIHRoZSBiYWxhbmNpbmcuIAorICogd2hlcmUgaXQgd2lsbCBsYXRlciBiZSB1c2VkIGJ5IHRoZSBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSBkbyB0aGUgYmFsYW5jaW5nLgogICogUGFyYW1ldGVyczoKICAqCXRiCXRyZWVfYmFsYW5jZSBzdHJ1Y3R1cmU7CiAgKgloCWN1cnJlbnQgbGV2ZWwgb2YgdGhlIG5vZGU7CkBAIC03NDksMjUgKzc0OSwyNiBAQAogCQkgIC0xLCAtMSk7XAogfQogCi1zdGF0aWMgdm9pZCBmcmVlX2J1ZmZlcnNfaW5fdGIoc3RydWN0IHRyZWVfYmFsYW5jZSAqcF9zX3RiKQorc3RhdGljIHZvaWQgZnJlZV9idWZmZXJzX2luX3RiKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiKQogewotCWludCBuX2NvdW50ZXI7CisJaW50IGk7CiAKLQlkZWNyZW1lbnRfY291bnRlcnNfaW5fcGF0aChwX3NfdGItPnRiX3BhdGgpOworCXBhdGhyZWxzZSh0Yi0+dGJfcGF0aCk7CiAKLQlmb3IgKG5fY291bnRlciA9IDA7IG5fY291bnRlciA8IE1BWF9IRUlHSFQ7IG5fY291bnRlcisrKSB7Ci0JCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5MW25fY291bnRlcl0pOwotCQlwX3NfdGItPkxbbl9jb3VudGVyXSA9IE5VTEw7Ci0JCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5SW25fY291bnRlcl0pOwotCQlwX3NfdGItPlJbbl9jb3VudGVyXSA9IE5VTEw7Ci0JCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5GTFtuX2NvdW50ZXJdKTsKLQkJcF9zX3RiLT5GTFtuX2NvdW50ZXJdID0gTlVMTDsKLQkJZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPkZSW25fY291bnRlcl0pOwotCQlwX3NfdGItPkZSW25fY291bnRlcl0gPSBOVUxMOwotCQlkZWNyZW1lbnRfYmNvdW50KHBfc190Yi0+Q0ZMW25fY291bnRlcl0pOwotCQlwX3NfdGItPkNGTFtuX2NvdW50ZXJdID0gTlVMTDsKLQkJZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPkNGUltuX2NvdW50ZXJdKTsKLQkJcF9zX3RiLT5DRlJbbl9jb3VudGVyXSA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IE1BWF9IRUlHSFQ7IGkrKykgeworCQlicmVsc2UodGItPkxbaV0pOworCQlicmVsc2UodGItPlJbaV0pOworCQlicmVsc2UodGItPkZMW2ldKTsKKwkJYnJlbHNlKHRiLT5GUltpXSk7CisJCWJyZWxzZSh0Yi0+Q0ZMW2ldKTsKKwkJYnJlbHNlKHRiLT5DRlJbaV0pOworCisJCXRiLT5MW2ldID0gTlVMTDsKKwkJdGItPlJbaV0gPSBOVUxMOworCQl0Yi0+RkxbaV0gPSBOVUxMOworCQl0Yi0+RlJbaV0gPSBOVUxMOworCQl0Yi0+Q0ZMW2ldID0gTlVMTDsKKwkJdGItPkNGUltpXSA9IE5VTEw7CiAJfQogfQogCkBAIC03NzcsMTQgKzc3OCwxNCBAQAogICoJICAgICAgICBOT19ESVNLX1NQQUNFIC0gbm8gZGlzayBzcGFjZS4KICAqLwogLyogVGhlIGZ1bmN0aW9uIGlzIE5PVCBTQ0hFRFVMRS1TQUZFISAqLwotc3RhdGljIGludCBnZXRfZW1wdHlfbm9kZXMoc3RydWN0IHRyZWVfYmFsYW5jZSAqcF9zX3RiLCBpbnQgbl9oKQorc3RhdGljIGludCBnZXRfZW1wdHlfbm9kZXMoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsIGludCBoKQogewotCXN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX25ld19iaCwKLQkgICAgKnBfc19TaCA9IFBBVEhfSF9QQlVGRkVSKHBfc190Yi0+dGJfcGF0aCwgbl9oKTsKLQliX2Jsb2NrbnJfdCAqcF9uX2Jsb2NrbnIsIGFfbl9ibG9ja25yc1tNQVhfQU1PVU5UX05FRURFRF0gPSB7IDAsIH07Ci0JaW50IG5fY291bnRlciwgbl9udW1iZXJfb2ZfZnJlZWJsaywgbl9hbW91bnRfbmVlZGVkLAkvKiBudW1iZXIgb2YgbmVlZGVkIGVtcHR5IGJsb2NrcyAqLwotCSBuX3JldHZhbCA9IENBUlJZX09OOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiID0gcF9zX3RiLT50Yl9zYjsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCwKKwkgICAgKlNoID0gUEFUSF9IX1BCVUZGRVIodGItPnRiX3BhdGgsIGgpOworCWJfYmxvY2tucl90ICpibG9ja25yLCBibG9ja25yc1tNQVhfQU1PVU5UX05FRURFRF0gPSB7IDAsIH07CisJaW50IGNvdW50ZXIsIG51bWJlcl9vZl9mcmVlYmxrLCBhbW91bnRfbmVlZGVkLAkvKiBudW1iZXIgb2YgbmVlZGVkIGVtcHR5IGJsb2NrcyAqLworCSByZXR2YWwgPSBDQVJSWV9PTjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gdGItPnRiX3NiOwogCiAJLyogbnVtYmVyX29mX2ZyZWVibGsgaXMgdGhlIG51bWJlciBvZiBlbXB0eSBibG9ja3Mgd2hpY2ggaGF2ZSBiZWVuCiAJICAgYWNxdWlyZWQgZm9yIHVzZSBieSB0aGUgYmFsYW5jaW5nIGFsZ29yaXRobSBtaW51cyB0aGUgbnVtYmVyIG9mCkBAIC03OTIsNyArNzkzLDcgQEAKIAkgICBudW1iZXJfb2ZfZnJlZWJsayA9IHRiLT5jdXJfYmxrbnVtIGNhbiBiZSBub24temVybyBpZiBhIHNjaGVkdWxlIG9jY3VycwogCSAgIGFmdGVyIGVtcHR5IGJsb2NrcyBhcmUgYWNxdWlyZWQsIGFuZCB0aGUgYmFsYW5jaW5nIGFuYWx5c2lzIGlzCiAJICAgdGhlbiByZXN0YXJ0ZWQsIGFtb3VudF9uZWVkZWQgaXMgdGhlIG51bWJlciBuZWVkZWQgYnkgdGhpcyBsZXZlbAotCSAgIChuX2gpIG9mIHRoZSBiYWxhbmNpbmcgYW5hbHlzaXMuCisJICAgKGgpIG9mIHRoZSBiYWxhbmNpbmcgYW5hbHlzaXMuCiAKIAkgICBOb3RlIHRoYXQgZm9yIHN5c3RlbXMgd2l0aCBtYW55IHByb2Nlc3NlcyB3cml0aW5nLCBpdCB3b3VsZCBiZQogCSAgIG1vcmUgbGF5b3V0IG9wdGltYWwgdG8gY2FsY3VsYXRlIHRoZSB0b3RhbCBudW1iZXIgbmVlZGVkIGJ5IGFsbApAQCAtODAwLDU0ICs4MDEsNTQgQEAKIAogCS8qIEluaXRpYXRlIG51bWJlcl9vZl9mcmVlYmxrIHRvIHRoZSBhbW91bnQgYWNxdWlyZWQgcHJpb3IgdG8gdGhlIHJlc3RhcnQgb2YKIAkgICB0aGUgYW5hbHlzaXMgb3IgMCBpZiBub3QgcmVzdGFydGVkLCB0aGVuIHN1YnRyYWN0IHRoZSBhbW91bnQgbmVlZGVkCi0JICAgYnkgYWxsIG9mIHRoZSBsZXZlbHMgb2YgdGhlIHRyZWUgYmVsb3cgbl9oLiAqLwotCS8qIGJsa251bSBpbmNsdWRlcyBTW25faF0sIHNvIHdlIHN1YnRyYWN0IDEgaW4gdGhpcyBjYWxjdWxhdGlvbiAqLwotCWZvciAobl9jb3VudGVyID0gMCwgbl9udW1iZXJfb2ZfZnJlZWJsayA9IHBfc190Yi0+Y3VyX2Jsa251bTsKLQkgICAgIG5fY291bnRlciA8IG5faDsgbl9jb3VudGVyKyspCi0JCW5fbnVtYmVyX29mX2ZyZWVibGsgLT0KLQkJICAgIChwX3NfdGItPmJsa251bVtuX2NvdW50ZXJdKSA/IChwX3NfdGItPmJsa251bVtuX2NvdW50ZXJdIC0KKwkgICBieSBhbGwgb2YgdGhlIGxldmVscyBvZiB0aGUgdHJlZSBiZWxvdyBoLiAqLworCS8qIGJsa251bSBpbmNsdWRlcyBTW2hdLCBzbyB3ZSBzdWJ0cmFjdCAxIGluIHRoaXMgY2FsY3VsYXRpb24gKi8KKwlmb3IgKGNvdW50ZXIgPSAwLCBudW1iZXJfb2ZfZnJlZWJsayA9IHRiLT5jdXJfYmxrbnVtOworCSAgICAgY291bnRlciA8IGg7IGNvdW50ZXIrKykKKwkJbnVtYmVyX29mX2ZyZWVibGsgLT0KKwkJICAgICh0Yi0+YmxrbnVtW2NvdW50ZXJdKSA/ICh0Yi0+YmxrbnVtW2NvdW50ZXJdIC0KIAkJCQkJCSAgIDEpIDogMDsKIAogCS8qIEFsbG9jYXRlIG1pc3NpbmcgZW1wdHkgYmxvY2tzLiAqLwotCS8qIGlmIHBfc19TaCA9PSAwICB0aGVuIHdlIGFyZSBnZXR0aW5nIGEgbmV3IHJvb3QgKi8KLQluX2Ftb3VudF9uZWVkZWQgPSAocF9zX1NoKSA/IChwX3NfdGItPmJsa251bVtuX2hdIC0gMSkgOiAxOworCS8qIGlmIFNoID09IDAgIHRoZW4gd2UgYXJlIGdldHRpbmcgYSBuZXcgcm9vdCAqLworCWFtb3VudF9uZWVkZWQgPSAoU2gpID8gKHRiLT5ibGtudW1baF0gLSAxKSA6IDE7CiAJLyogIEFtb3VudF9uZWVkZWQgPSB0aGUgYW1vdW50IHRoYXQgd2UgbmVlZCBtb3JlIHRoYW4gdGhlIGFtb3VudCB0aGF0IHdlIGhhdmUuICovCi0JaWYgKG5fYW1vdW50X25lZWRlZCA+IG5fbnVtYmVyX29mX2ZyZWVibGspCi0JCW5fYW1vdW50X25lZWRlZCAtPSBuX251bWJlcl9vZl9mcmVlYmxrOworCWlmIChhbW91bnRfbmVlZGVkID4gbnVtYmVyX29mX2ZyZWVibGspCisJCWFtb3VudF9uZWVkZWQgLT0gbnVtYmVyX29mX2ZyZWVibGs7CiAJZWxzZQkJCS8qIElmIHdlIGhhdmUgZW5vdWdoIGFscmVhZHkgdGhlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLiAqLwogCQlyZXR1cm4gQ0FSUllfT047CiAKIAkvKiBObyBuZWVkIHRvIGNoZWNrIHF1b3RhIC0gaXMgbm90IGFsbG9jYXRlZCBmb3IgYmxvY2tzIHVzZWQgZm9yIGZvcm1hdHRlZCBub2RlcyAqLwotCWlmIChyZWlzZXJmc19uZXdfZm9ybV9ibG9ja25ycyhwX3NfdGIsIGFfbl9ibG9ja25ycywKLQkJCQkgICAgICAgbl9hbW91bnRfbmVlZGVkKSA9PSBOT19ESVNLX1NQQUNFKQorCWlmIChyZWlzZXJmc19uZXdfZm9ybV9ibG9ja25ycyh0YiwgYmxvY2tucnMsCisJCQkJICAgICAgIGFtb3VudF9uZWVkZWQpID09IE5PX0RJU0tfU1BBQ0UpCiAJCXJldHVybiBOT19ESVNLX1NQQUNFOwogCiAJLyogZm9yIGVhY2ggYmxvY2tudW1iZXIgd2UganVzdCBnb3QsIGdldCBhIGJ1ZmZlciBhbmQgc3RpY2sgaXQgb24gRkVCICovCi0JZm9yIChwX25fYmxvY2tuciA9IGFfbl9ibG9ja25ycywgbl9jb3VudGVyID0gMDsKLQkgICAgIG5fY291bnRlciA8IG5fYW1vdW50X25lZWRlZDsgcF9uX2Jsb2NrbnIrKywgbl9jb3VudGVyKyspIHsKKwlmb3IgKGJsb2NrbnIgPSBibG9ja25ycywgY291bnRlciA9IDA7CisJICAgICBjb3VudGVyIDwgYW1vdW50X25lZWRlZDsgYmxvY2tucisrLCBjb3VudGVyKyspIHsKIAotCQlSRkFMU0UoISpwX25fYmxvY2tuciwKKwkJUkZBTFNFKCEqYmxvY2tuciwKIAkJICAgICAgICJQQVAtODEzNTogcmVpc2VyZnNfbmV3X2Jsb2NrbnJzIGZhaWxlZCB3aGVuIGdvdCBuZXcgYmxvY2tzIik7CiAKLQkJcF9zX25ld19iaCA9IHNiX2dldGJsayhwX3Nfc2IsICpwX25fYmxvY2tucik7Ci0JCVJGQUxTRShidWZmZXJfZGlydHkocF9zX25ld19iaCkgfHwKLQkJICAgICAgIGJ1ZmZlcl9qb3VybmFsZWQocF9zX25ld19iaCkgfHwKLQkJICAgICAgIGJ1ZmZlcl9qb3VybmFsX2RpcnR5KHBfc19uZXdfYmgpLAorCQluZXdfYmggPSBzYl9nZXRibGsoc2IsICpibG9ja25yKTsKKwkJUkZBTFNFKGJ1ZmZlcl9kaXJ0eShuZXdfYmgpIHx8CisJCSAgICAgICBidWZmZXJfam91cm5hbGVkKG5ld19iaCkgfHwKKwkJICAgICAgIGJ1ZmZlcl9qb3VybmFsX2RpcnR5KG5ld19iaCksCiAJCSAgICAgICAiUEFQLTgxNDA6IGpvdXJubGFsZWQgb3IgZGlydHkgYnVmZmVyICViIGZvciB0aGUgbmV3IGJsb2NrIiwKLQkJICAgICAgIHBfc19uZXdfYmgpOworCQkgICAgICAgbmV3X2JoKTsKIAogCQkvKiBQdXQgZW1wdHkgYnVmZmVycyBpbnRvIHRoZSBhcnJheS4gKi8KLQkJUkZBTFNFKHBfc190Yi0+RkVCW3Bfc190Yi0+Y3VyX2Jsa251bV0sCisJCVJGQUxTRSh0Yi0+RkVCW3RiLT5jdXJfYmxrbnVtXSwKIAkJICAgICAgICJQQVAtODE0MTogYnVzeSBzbG90IGZvciBuZXcgYnVmZmVyIik7CiAKLQkJc2V0X2J1ZmZlcl9qb3VybmFsX25ldyhwX3NfbmV3X2JoKTsKLQkJcF9zX3RiLT5GRUJbcF9zX3RiLT5jdXJfYmxrbnVtKytdID0gcF9zX25ld19iaDsKKwkJc2V0X2J1ZmZlcl9qb3VybmFsX25ldyhuZXdfYmgpOworCQl0Yi0+RkVCW3RiLT5jdXJfYmxrbnVtKytdID0gbmV3X2JoOwogCX0KIAotCWlmIChuX3JldHZhbCA9PSBDQVJSWV9PTiAmJiBGSUxFU1lTVEVNX0NIQU5HRURfVEIocF9zX3RiKSkKLQkJbl9yZXR2YWwgPSBSRVBFQVRfU0VBUkNIOworCWlmIChyZXR2YWwgPT0gQ0FSUllfT04gJiYgRklMRVNZU1RFTV9DSEFOR0VEX1RCKHRiKSkKKwkJcmV0dmFsID0gUkVQRUFUX1NFQVJDSDsKIAotCXJldHVybiBuX3JldHZhbDsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAvKiBHZXQgZnJlZSBzcGFjZSBvZiB0aGUgbGVmdCBuZWlnaGJvciwgd2hpY2ggaXMgc3RvcmVkIGluIHRoZSBwYXJlbnQKQEAgLTg5NSwzNSArODk2LDM2IEBACiB9CiAKIC8qIENoZWNrIHdoZXRoZXIgbGVmdCBuZWlnaGJvciBpcyBpbiBtZW1vcnkuICovCi1zdGF0aWMgaW50IGlzX2xlZnRfbmVpZ2hib3JfaW5fY2FjaGUoc3RydWN0IHRyZWVfYmFsYW5jZSAqcF9zX3RiLCBpbnQgbl9oKQorc3RhdGljIGludCBpc19sZWZ0X25laWdoYm9yX2luX2NhY2hlKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiLCBpbnQgaCkKIHsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19mYXRoZXIsICpsZWZ0OwotCXN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiID0gcF9zX3RiLT50Yl9zYjsKLQliX2Jsb2NrbnJfdCBuX2xlZnRfbmVpZ2hib3JfYmxvY2tucjsKLQlpbnQgbl9sZWZ0X25laWdoYm9yX3Bvc2l0aW9uOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZmF0aGVyLCAqbGVmdDsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gdGItPnRiX3NiOworCWJfYmxvY2tucl90IGxlZnRfbmVpZ2hib3JfYmxvY2tucjsKKwlpbnQgbGVmdF9uZWlnaGJvcl9wb3NpdGlvbjsKIAotCWlmICghcF9zX3RiLT5GTFtuX2hdKQkvKiBGYXRoZXIgb2YgdGhlIGxlZnQgbmVpZ2hib3IgZG9lcyBub3QgZXhpc3QuICovCisJLyogRmF0aGVyIG9mIHRoZSBsZWZ0IG5laWdoYm9yIGRvZXMgbm90IGV4aXN0LiAqLworCWlmICghdGItPkZMW2hdKQogCQlyZXR1cm4gMDsKIAogCS8qIENhbGN1bGF0ZSBmYXRoZXIgb2YgdGhlIG5vZGUgdG8gYmUgYmFsYW5jZWQuICovCi0JcF9zX2ZhdGhlciA9IFBBVEhfSF9QQlVGRkVSKHBfc190Yi0+dGJfcGF0aCwgbl9oICsgMSk7CisJZmF0aGVyID0gUEFUSF9IX1BCVUZGRVIodGItPnRiX3BhdGgsIGggKyAxKTsKIAotCVJGQUxTRSghcF9zX2ZhdGhlciB8fAotCSAgICAgICAhQl9JU19JTl9UUkVFKHBfc19mYXRoZXIpIHx8Ci0JICAgICAgICFCX0lTX0lOX1RSRUUocF9zX3RiLT5GTFtuX2hdKSB8fAotCSAgICAgICAhYnVmZmVyX3VwdG9kYXRlKHBfc19mYXRoZXIpIHx8Ci0JICAgICAgICFidWZmZXJfdXB0b2RhdGUocF9zX3RiLT5GTFtuX2hdKSwKKwlSRkFMU0UoIWZhdGhlciB8fAorCSAgICAgICAhQl9JU19JTl9UUkVFKGZhdGhlcikgfHwKKwkgICAgICAgIUJfSVNfSU5fVFJFRSh0Yi0+RkxbaF0pIHx8CisJICAgICAgICFidWZmZXJfdXB0b2RhdGUoZmF0aGVyKSB8fAorCSAgICAgICAhYnVmZmVyX3VwdG9kYXRlKHRiLT5GTFtoXSksCiAJICAgICAgICJ2cy04MTY1OiBGW2hdICglYikgb3IgRkxbaF0gKCViKSBpcyBpbnZhbGlkIiwKLQkgICAgICAgcF9zX2ZhdGhlciwgcF9zX3RiLT5GTFtuX2hdKTsKKwkgICAgICAgZmF0aGVyLCB0Yi0+RkxbaF0pOwogCiAJLyogR2V0IHBvc2l0aW9uIG9mIHRoZSBwb2ludGVyIHRvIHRoZSBsZWZ0IG5laWdoYm9yIGludG8gdGhlIGxlZnQgZmF0aGVyLiAqLwotCW5fbGVmdF9uZWlnaGJvcl9wb3NpdGlvbiA9IChwX3NfZmF0aGVyID09IHBfc190Yi0+Rkxbbl9oXSkgPwotCSAgICBwX3NfdGItPmxrZXlbbl9oXSA6IEJfTlJfSVRFTVMocF9zX3RiLT5GTFtuX2hdKTsKKwlsZWZ0X25laWdoYm9yX3Bvc2l0aW9uID0gKGZhdGhlciA9PSB0Yi0+RkxbaF0pID8KKwkgICAgdGItPmxrZXlbaF0gOiBCX05SX0lURU1TKHRiLT5GTFtoXSk7CiAJLyogR2V0IGxlZnQgbmVpZ2hib3IgYmxvY2sgbnVtYmVyLiAqLwotCW5fbGVmdF9uZWlnaGJvcl9ibG9ja25yID0KLQkgICAgQl9OX0NISUxEX05VTShwX3NfdGItPkZMW25faF0sIG5fbGVmdF9uZWlnaGJvcl9wb3NpdGlvbik7CisJbGVmdF9uZWlnaGJvcl9ibG9ja25yID0KKwkgICAgQl9OX0NISUxEX05VTSh0Yi0+RkxbaF0sIGxlZnRfbmVpZ2hib3JfcG9zaXRpb24pOwogCS8qIExvb2sgZm9yIHRoZSBsZWZ0IG5laWdoYm9yIGluIHRoZSBjYWNoZS4gKi8KLQlpZiAoKGxlZnQgPSBzYl9maW5kX2dldF9ibG9jayhwX3Nfc2IsIG5fbGVmdF9uZWlnaGJvcl9ibG9ja25yKSkpIHsKKwlpZiAoKGxlZnQgPSBzYl9maW5kX2dldF9ibG9jayhzYiwgbGVmdF9uZWlnaGJvcl9ibG9ja25yKSkpIHsKIAogCQlSRkFMU0UoYnVmZmVyX3VwdG9kYXRlKGxlZnQpICYmICFCX0lTX0lOX1RSRUUobGVmdCksCiAJCSAgICAgICAidnMtODE3MDogbGVmdCBuZWlnaGJvciAoJWIgJXopIGlzIG5vdCBpbiB0aGUgdHJlZSIsCkBAIC05MzgsMTAgKzk0MCwxMCBAQAogI2RlZmluZSBMRUZUX1BBUkVOVFMgICdsJwogI2RlZmluZSBSSUdIVF9QQVJFTlRTICdyJwogCi1zdGF0aWMgdm9pZCBkZWNyZW1lbnRfa2V5KHN0cnVjdCBjcHVfa2V5ICpwX3Nfa2V5KQorc3RhdGljIHZvaWQgZGVjcmVtZW50X2tleShzdHJ1Y3QgY3B1X2tleSAqa2V5KQogewogCS8vIGNhbGwgaXRlbSBzcGVjaWZpYyBmdW5jdGlvbiBmb3IgdGhpcyBrZXkKLQlpdGVtX29wc1tjcHVfa2V5X2tfdHlwZShwX3Nfa2V5KV0tPmRlY3JlbWVudF9rZXkocF9zX2tleSk7CisJaXRlbV9vcHNbY3B1X2tleV9rX3R5cGUoa2V5KV0tPmRlY3JlbWVudF9rZXkoa2V5KTsKIH0KIAogLyogQ2FsY3VsYXRlIGZhciBsZWZ0L3JpZ2h0IHBhcmVudCBvZiB0aGUgbGVmdC9yaWdodCBuZWlnaGJvciBvZiB0aGUgY3VycmVudCBub2RlLCB0aGF0CkBAIC05NTIsNzcgKzk1NCw3NyBAQAogIAkJU0NIRURVTEVfT0NDVVJSRUQgLSBzY2hlZHVsZSBvY2N1cnJlZCB3aGlsZSB0aGUgZnVuY3Rpb24gd29ya2VkOwogICoJICAgICAgICBDQVJSWV9PTiAgICAgICAgIC0gc2NoZWR1bGUgZGlkbid0IG9jY3VyIHdoaWxlIHRoZSBmdW5jdGlvbiB3b3JrZWQ7CiAgKi8KLXN0YXRpYyBpbnQgZ2V0X2Zhcl9wYXJlbnQoc3RydWN0IHRyZWVfYmFsYW5jZSAqcF9zX3RiLAotCQkJICBpbnQgbl9oLAotCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipwcF9zX2ZhdGhlciwKLQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcHBfc19jb21fZmF0aGVyLCBjaGFyIGNfbHJfcGFyKQorc3RhdGljIGludCBnZXRfZmFyX3BhcmVudChzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwKKwkJCSAgaW50IGgsCisJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnBmYXRoZXIsCisJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnBjb21fZmF0aGVyLCBjaGFyIGNfbHJfcGFyKQogewotCXN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX3BhcmVudDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudDsKIAlJTklUSUFMSVpFX1BBVEgoc19wYXRoX3RvX25laWdoYm9yX2ZhdGhlcik7Ci0Jc3RydWN0IHRyZWVwYXRoICpwX3NfcGF0aCA9IHBfc190Yi0+dGJfcGF0aDsKKwlzdHJ1Y3QgdHJlZXBhdGggKnBhdGggPSB0Yi0+dGJfcGF0aDsKIAlzdHJ1Y3QgY3B1X2tleSBzX2xyX2ZhdGhlcl9rZXk7Ci0JaW50IG5fY291bnRlciwKLQkgICAgbl9wb3NpdGlvbiA9IElOVF9NQVgsCi0JICAgIG5fZmlyc3RfbGFzdF9wb3NpdGlvbiA9IDAsCi0JICAgIG5fcGF0aF9vZmZzZXQgPSBQQVRIX0hfUEFUSF9PRkZTRVQocF9zX3BhdGgsIG5faCk7CisJaW50IGNvdW50ZXIsCisJICAgIHBvc2l0aW9uID0gSU5UX01BWCwKKwkgICAgZmlyc3RfbGFzdF9wb3NpdGlvbiA9IDAsCisJICAgIHBhdGhfb2Zmc2V0ID0gUEFUSF9IX1BBVEhfT0ZGU0VUKHBhdGgsIGgpOwogCi0JLyogU3RhcnRpbmcgZnJvbSBGW25faF0gZ28gdXB3YXJkcyBpbiB0aGUgdHJlZSwgYW5kIGxvb2sgZm9yIHRoZSBjb21tb24KLQkgICBhbmNlc3RvciBvZiBGW25faF0sIGFuZCBpdHMgbmVpZ2hib3IgbC9yLCB0aGF0IHNob3VsZCBiZSBvYnRhaW5lZC4gKi8KKwkvKiBTdGFydGluZyBmcm9tIEZbaF0gZ28gdXB3YXJkcyBpbiB0aGUgdHJlZSwgYW5kIGxvb2sgZm9yIHRoZSBjb21tb24KKwkgICBhbmNlc3RvciBvZiBGW2hdLCBhbmQgaXRzIG5laWdoYm9yIGwvciwgdGhhdCBzaG91bGQgYmUgb2J0YWluZWQuICovCiAKLQluX2NvdW50ZXIgPSBuX3BhdGhfb2Zmc2V0OworCWNvdW50ZXIgPSBwYXRoX29mZnNldDsKIAotCVJGQUxTRShuX2NvdW50ZXIgPCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VULAorCVJGQUxTRShjb3VudGVyIDwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCwKIAkgICAgICAgIlBBUC04MTgwOiBpbnZhbGlkIHBhdGggbGVuZ3RoIik7CiAKLQlmb3IgKDsgbl9jb3VudGVyID4gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVDsgbl9jb3VudGVyLS0pIHsKKwlmb3IgKDsgY291bnRlciA+IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQ7IGNvdW50ZXItLSkgewogCQkvKiBDaGVjayB3aGV0aGVyIHBhcmVudCBvZiB0aGUgY3VycmVudCBidWZmZXIgaW4gdGhlIHBhdGggaXMgcmVhbGx5IHBhcmVudCBpbiB0aGUgdHJlZS4gKi8KIAkJaWYgKCFCX0lTX0lOX1RSRUUKLQkJICAgIChwX3NfcGFyZW50ID0gUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfcGF0aCwgbl9jb3VudGVyIC0gMSkpKQorCQkgICAgKHBhcmVudCA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIocGF0aCwgY291bnRlciAtIDEpKSkKIAkJCXJldHVybiBSRVBFQVRfU0VBUkNIOwogCQkvKiBDaGVjayB3aGV0aGVyIHBvc2l0aW9uIGluIHRoZSBwYXJlbnQgaXMgY29ycmVjdC4gKi8KLQkJaWYgKChuX3Bvc2l0aW9uID0KLQkJICAgICBQQVRIX09GRlNFVF9QT1NJVElPTihwX3NfcGF0aCwKLQkJCQkJICBuX2NvdW50ZXIgLSAxKSkgPgotCQkgICAgQl9OUl9JVEVNUyhwX3NfcGFyZW50KSkKKwkJaWYgKChwb3NpdGlvbiA9CisJCSAgICAgUEFUSF9PRkZTRVRfUE9TSVRJT04ocGF0aCwKKwkJCQkJICBjb3VudGVyIC0gMSkpID4KKwkJICAgIEJfTlJfSVRFTVMocGFyZW50KSkKIAkJCXJldHVybiBSRVBFQVRfU0VBUkNIOwogCQkvKiBDaGVjayB3aGV0aGVyIHBhcmVudCBhdCB0aGUgcGF0aCByZWFsbHkgcG9pbnRzIHRvIHRoZSBjaGlsZC4gKi8KLQkJaWYgKEJfTl9DSElMRF9OVU0ocF9zX3BhcmVudCwgbl9wb3NpdGlvbikgIT0KLQkJICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3BhdGgsIG5fY291bnRlciktPmJfYmxvY2tucikKKwkJaWYgKEJfTl9DSElMRF9OVU0ocGFyZW50LCBwb3NpdGlvbikgIT0KKwkJICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIocGF0aCwgY291bnRlciktPmJfYmxvY2tucikKIAkJCXJldHVybiBSRVBFQVRfU0VBUkNIOwogCQkvKiBSZXR1cm4gZGVsaW1pdGluZyBrZXkgaWYgcG9zaXRpb24gaW4gdGhlIHBhcmVudCBpcyBub3QgZXF1YWwgdG8gZmlyc3QvbGFzdCBvbmUuICovCiAJCWlmIChjX2xyX3BhciA9PSBSSUdIVF9QQVJFTlRTKQotCQkJbl9maXJzdF9sYXN0X3Bvc2l0aW9uID0gQl9OUl9JVEVNUyhwX3NfcGFyZW50KTsKLQkJaWYgKG5fcG9zaXRpb24gIT0gbl9maXJzdF9sYXN0X3Bvc2l0aW9uKSB7Ci0JCQkqcHBfc19jb21fZmF0aGVyID0gcF9zX3BhcmVudDsKLQkJCWdldF9iaCgqcHBfc19jb21fZmF0aGVyKTsKLQkJCS8qKCpwcF9zX2NvbV9mYXRoZXIgPSBwX3NfcGFyZW50KS0+Yl9jb3VudCsrOyAqLworCQkJZmlyc3RfbGFzdF9wb3NpdGlvbiA9IEJfTlJfSVRFTVMocGFyZW50KTsKKwkJaWYgKHBvc2l0aW9uICE9IGZpcnN0X2xhc3RfcG9zaXRpb24pIHsKKwkJCSpwY29tX2ZhdGhlciA9IHBhcmVudDsKKwkJCWdldF9iaCgqcGNvbV9mYXRoZXIpOworCQkJLyooKnBjb21fZmF0aGVyID0gcGFyZW50KS0+Yl9jb3VudCsrOyAqLwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKIAkvKiBpZiB3ZSBhcmUgaW4gdGhlIHJvb3Qgb2YgdGhlIHRyZWUsIHRoZW4gdGhlcmUgaXMgbm8gY29tbW9uIGZhdGhlciAqLwotCWlmIChuX2NvdW50ZXIgPT0gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCkgeworCWlmIChjb3VudGVyID09IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQpIHsKIAkJLyogQ2hlY2sgd2hldGhlciBmaXJzdCBidWZmZXIgaW4gdGhlIHBhdGggaXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuICovCiAJCWlmIChQQVRIX09GRlNFVF9QQlVGRkVSCi0JCSAgICAocF9zX3RiLT50Yl9wYXRoLAorCQkgICAgKHRiLT50Yl9wYXRoLAogCQkgICAgIEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQpLT5iX2Jsb2NrbnIgPT0KLQkJICAgIFNCX1JPT1RfQkxPQ0socF9zX3RiLT50Yl9zYikpIHsKLQkJCSpwcF9zX2ZhdGhlciA9ICpwcF9zX2NvbV9mYXRoZXIgPSBOVUxMOworCQkgICAgU0JfUk9PVF9CTE9DSyh0Yi0+dGJfc2IpKSB7CisJCQkqcGZhdGhlciA9ICpwY29tX2ZhdGhlciA9IE5VTEw7CiAJCQlyZXR1cm4gQ0FSUllfT047CiAJCX0KIAkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAJfQogCi0JUkZBTFNFKEJfTEVWRUwoKnBwX3NfY29tX2ZhdGhlcikgPD0gRElTS19MRUFGX05PREVfTEVWRUwsCisJUkZBTFNFKEJfTEVWRUwoKnBjb21fZmF0aGVyKSA8PSBESVNLX0xFQUZfTk9ERV9MRVZFTCwKIAkgICAgICAgIlBBUC04MTg1OiAoJWIgJXopIGxldmVsIHRvbyBzbWFsbCIsCi0JICAgICAgICpwcF9zX2NvbV9mYXRoZXIsICpwcF9zX2NvbV9mYXRoZXIpOworCSAgICAgICAqcGNvbV9mYXRoZXIsICpwY29tX2ZhdGhlcik7CiAKIAkvKiBDaGVjayB3aGV0aGVyIHRoZSBjb21tb24gcGFyZW50IGlzIGxvY2tlZC4gKi8KIAotCWlmIChidWZmZXJfbG9ja2VkKCpwcF9zX2NvbV9mYXRoZXIpKSB7Ci0JCV9fd2FpdF9vbl9idWZmZXIoKnBwX3NfY29tX2ZhdGhlcik7Ci0JCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIocF9zX3RiKSkgewotCQkJZGVjcmVtZW50X2Jjb3VudCgqcHBfc19jb21fZmF0aGVyKTsKKwlpZiAoYnVmZmVyX2xvY2tlZCgqcGNvbV9mYXRoZXIpKSB7CisJCV9fd2FpdF9vbl9idWZmZXIoKnBjb21fZmF0aGVyKTsKKwkJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQih0YikpIHsKKwkJCWJyZWxzZSgqcGNvbV9mYXRoZXIpOwogCQkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAJCX0KIAl9CkBAIC0xMDMyLDEyOCArMTAzNCwxMzEgQEAKIAogCS8qIEZvcm0ga2V5IHRvIGdldCBwYXJlbnQgb2YgdGhlIGxlZnQvcmlnaHQgbmVpZ2hib3IuICovCiAJbGVfa2V5MmNwdV9rZXkoJnNfbHJfZmF0aGVyX2tleSwKLQkJICAgICAgIEJfTl9QREVMSU1fS0VZKCpwcF9zX2NvbV9mYXRoZXIsCisJCSAgICAgICBCX05fUERFTElNX0tFWSgqcGNvbV9mYXRoZXIsCiAJCQkJICAgICAgKGNfbHJfcGFyID09Ci0JCQkJICAgICAgIExFRlRfUEFSRU5UUykgPyAocF9zX3RiLT5sa2V5W25faCAtIDFdID0KLQkJCQkJCQluX3Bvc2l0aW9uIC0KLQkJCQkJCQkxKSA6IChwX3NfdGItPnJrZXlbbl9oIC0KKwkJCQkgICAgICAgTEVGVF9QQVJFTlRTKSA/ICh0Yi0+bGtleVtoIC0gMV0gPQorCQkJCQkJCXBvc2l0aW9uIC0KKwkJCQkJCQkxKSA6ICh0Yi0+cmtleVtoIC0KIAkJCQkJCQkJCSAgIDFdID0KLQkJCQkJCQkgICAgICBuX3Bvc2l0aW9uKSkpOworCQkJCQkJCSAgICAgIHBvc2l0aW9uKSkpOwogCiAJaWYgKGNfbHJfcGFyID09IExFRlRfUEFSRU5UUykKIAkJZGVjcmVtZW50X2tleSgmc19scl9mYXRoZXJfa2V5KTsKIAogCWlmIChzZWFyY2hfYnlfa2V5Ci0JICAgIChwX3NfdGItPnRiX3NiLCAmc19scl9mYXRoZXJfa2V5LCAmc19wYXRoX3RvX25laWdoYm9yX2ZhdGhlciwKLQkgICAgIG5faCArIDEpID09IElPX0VSUk9SKQorCSAgICAodGItPnRiX3NiLCAmc19scl9mYXRoZXJfa2V5LCAmc19wYXRoX3RvX25laWdoYm9yX2ZhdGhlciwKKwkgICAgIGggKyAxKSA9PSBJT19FUlJPUikKIAkJLy8gcGF0aCBpcyByZWxlYXNlZAogCQlyZXR1cm4gSU9fRVJST1I7CiAKLQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHBfc190YikpIHsKLQkJZGVjcmVtZW50X2NvdW50ZXJzX2luX3BhdGgoJnNfcGF0aF90b19uZWlnaGJvcl9mYXRoZXIpOwotCQlkZWNyZW1lbnRfYmNvdW50KCpwcF9zX2NvbV9mYXRoZXIpOworCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIodGIpKSB7CisJCXBhdGhyZWxzZSgmc19wYXRoX3RvX25laWdoYm9yX2ZhdGhlcik7CisJCWJyZWxzZSgqcGNvbV9mYXRoZXIpOwogCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsKIAl9CiAKLQkqcHBfc19mYXRoZXIgPSBQQVRIX1BMQVNUX0JVRkZFUigmc19wYXRoX3RvX25laWdoYm9yX2ZhdGhlcik7CisJKnBmYXRoZXIgPSBQQVRIX1BMQVNUX0JVRkZFUigmc19wYXRoX3RvX25laWdoYm9yX2ZhdGhlcik7CiAKLQlSRkFMU0UoQl9MRVZFTCgqcHBfc19mYXRoZXIpICE9IG5faCArIDEsCi0JICAgICAgICJQQVAtODE5MDogKCViICV6KSBsZXZlbCB0b28gc21hbGwiLCAqcHBfc19mYXRoZXIsICpwcF9zX2ZhdGhlcik7CisJUkZBTFNFKEJfTEVWRUwoKnBmYXRoZXIpICE9IGggKyAxLAorCSAgICAgICAiUEFQLTgxOTA6ICglYiAleikgbGV2ZWwgdG9vIHNtYWxsIiwgKnBmYXRoZXIsICpwZmF0aGVyKTsKIAlSRkFMU0Uoc19wYXRoX3RvX25laWdoYm9yX2ZhdGhlci5wYXRoX2xlbmd0aCA8CiAJICAgICAgIEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQsICJQQVAtODE5MjogcGF0aCBsZW5ndGggaXMgdG9vIHNtYWxsIik7CiAKIAlzX3BhdGhfdG9fbmVpZ2hib3JfZmF0aGVyLnBhdGhfbGVuZ3RoLS07Ci0JZGVjcmVtZW50X2NvdW50ZXJzX2luX3BhdGgoJnNfcGF0aF90b19uZWlnaGJvcl9mYXRoZXIpOworCXBhdGhyZWxzZSgmc19wYXRoX3RvX25laWdoYm9yX2ZhdGhlcik7CiAJcmV0dXJuIENBUlJZX09OOwogfQogCi0vKiBHZXQgcGFyZW50cyBvZiBuZWlnaGJvcnMgb2Ygbm9kZSBpbiB0aGUgcGF0aChTW25fcGF0aF9vZmZzZXRdKSBhbmQgY29tbW9uIHBhcmVudHMgb2YKLSAqIFNbbl9wYXRoX29mZnNldF0gYW5kIExbbl9wYXRoX29mZnNldF0vUltuX3BhdGhfb2Zmc2V0XTogRltuX3BhdGhfb2Zmc2V0XSwgRkxbbl9wYXRoX29mZnNldF0sCi0gKiBGUltuX3BhdGhfb2Zmc2V0XSwgQ0ZMW25fcGF0aF9vZmZzZXRdLCBDRlJbbl9wYXRoX29mZnNldF0uCi0gKiBDYWxjdWxhdGUgbnVtYmVycyBvZiBsZWZ0IGFuZCByaWdodCBkZWxpbWl0aW5nIGtleXMgcG9zaXRpb246IGxrZXlbbl9wYXRoX29mZnNldF0sIHJrZXlbbl9wYXRoX29mZnNldF0uCisvKiBHZXQgcGFyZW50cyBvZiBuZWlnaGJvcnMgb2Ygbm9kZSBpbiB0aGUgcGF0aChTW3BhdGhfb2Zmc2V0XSkgYW5kIGNvbW1vbiBwYXJlbnRzIG9mCisgKiBTW3BhdGhfb2Zmc2V0XSBhbmQgTFtwYXRoX29mZnNldF0vUltwYXRoX29mZnNldF06IEZbcGF0aF9vZmZzZXRdLCBGTFtwYXRoX29mZnNldF0sCisgKiBGUltwYXRoX29mZnNldF0sIENGTFtwYXRoX29mZnNldF0sIENGUltwYXRoX29mZnNldF0uCisgKiBDYWxjdWxhdGUgbnVtYmVycyBvZiBsZWZ0IGFuZCByaWdodCBkZWxpbWl0aW5nIGtleXMgcG9zaXRpb246IGxrZXlbcGF0aF9vZmZzZXRdLCBya2V5W3BhdGhfb2Zmc2V0XS4KICAqIFJldHVybnM6CVNDSEVEVUxFX09DQ1VSUkVEIC0gc2NoZWR1bGUgb2NjdXJyZWQgd2hpbGUgdGhlIGZ1bmN0aW9uIHdvcmtlZDsKICAqCSAgICAgICAgQ0FSUllfT04gLSBzY2hlZHVsZSBkaWRuJ3Qgb2NjdXIgd2hpbGUgdGhlIGZ1bmN0aW9uIHdvcmtlZDsKICAqLwotc3RhdGljIGludCBnZXRfcGFyZW50cyhzdHJ1Y3QgdHJlZV9iYWxhbmNlICpwX3NfdGIsIGludCBuX2gpCitzdGF0aWMgaW50IGdldF9wYXJlbnRzKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiLCBpbnQgaCkKIHsKLQlzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoID0gcF9zX3RiLT50Yl9wYXRoOwotCWludCBuX3Bvc2l0aW9uLAotCSAgICBuX3JldF92YWx1ZSwKLQkgICAgbl9wYXRoX29mZnNldCA9IFBBVEhfSF9QQVRIX09GRlNFVChwX3NfdGItPnRiX3BhdGgsIG5faCk7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfY3VyZiwgKnBfc19jdXJjZjsKKwlzdHJ1Y3QgdHJlZXBhdGggKnBhdGggPSB0Yi0+dGJfcGF0aDsKKwlpbnQgcG9zaXRpb24sCisJICAgIHJldCwKKwkgICAgcGF0aF9vZmZzZXQgPSBQQVRIX0hfUEFUSF9PRkZTRVQodGItPnRiX3BhdGgsIGgpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqY3VyZiwgKmN1cmNmOwogCiAJLyogQ3VycmVudCBub2RlIGlzIHRoZSByb290IG9mIHRoZSB0cmVlIG9yIHdpbGwgYmUgcm9vdCBvZiB0aGUgdHJlZSAqLwotCWlmIChuX3BhdGhfb2Zmc2V0IDw9IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQpIHsKKwlpZiAocGF0aF9vZmZzZXQgPD0gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCkgewogCQkvKiBUaGUgcm9vdCBjYW4gbm90IGhhdmUgcGFyZW50cy4KIAkJICAgUmVsZWFzZSBub2RlcyB3aGljaCBwcmV2aW91c2x5IHdlcmUgb2J0YWluZWQgYXMgcGFyZW50cyBvZiB0aGUgY3VycmVudCBub2RlIG5laWdoYm9ycy4gKi8KLQkJZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPkZMW25faF0pOwotCQlkZWNyZW1lbnRfYmNvdW50KHBfc190Yi0+Q0ZMW25faF0pOwotCQlkZWNyZW1lbnRfYmNvdW50KHBfc190Yi0+RlJbbl9oXSk7Ci0JCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5DRlJbbl9oXSk7Ci0JCXBfc190Yi0+Rkxbbl9oXSA9IHBfc190Yi0+Q0ZMW25faF0gPSBwX3NfdGItPkZSW25faF0gPQotCQkgICAgcF9zX3RiLT5DRlJbbl9oXSA9IE5VTEw7CisJCWJyZWxzZSh0Yi0+RkxbaF0pOworCQlicmVsc2UodGItPkNGTFtoXSk7CisJCWJyZWxzZSh0Yi0+RlJbaF0pOworCQlicmVsc2UodGItPkNGUltoXSk7CisJCXRiLT5GTFtoXSAgPSBOVUxMOworCQl0Yi0+Q0ZMW2hdID0gTlVMTDsKKwkJdGItPkZSW2hdICA9IE5VTEw7CisJCXRiLT5DRlJbaF0gPSBOVUxMOwogCQlyZXR1cm4gQ0FSUllfT047CiAJfQogCi0JLyogR2V0IHBhcmVudCBGTFtuX3BhdGhfb2Zmc2V0XSBvZiBMW25fcGF0aF9vZmZzZXRdLiAqLwotCWlmICgobl9wb3NpdGlvbiA9IFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBfc19wYXRoLCBuX3BhdGhfb2Zmc2V0IC0gMSkpKSB7CisJLyogR2V0IHBhcmVudCBGTFtwYXRoX29mZnNldF0gb2YgTFtwYXRoX29mZnNldF0uICovCisJcG9zaXRpb24gPSBQQVRIX09GRlNFVF9QT1NJVElPTihwYXRoLCBwYXRoX29mZnNldCAtIDEpOworCWlmIChwb3NpdGlvbikgewogCQkvKiBDdXJyZW50IG5vZGUgaXMgbm90IHRoZSBmaXJzdCBjaGlsZCBvZiBpdHMgcGFyZW50LiAqLwotCQkvKihwX3NfY3VyZiA9IHBfc19jdXJjZiA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3BhdGgsIG5fcGF0aF9vZmZzZXQgLSAxKSktPmJfY291bnQgKz0gMjsgKi8KLQkJcF9zX2N1cmYgPSBwX3NfY3VyY2YgPQotCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfcGF0aCwgbl9wYXRoX29mZnNldCAtIDEpOwotCQlnZXRfYmgocF9zX2N1cmYpOwotCQlnZXRfYmgocF9zX2N1cmYpOwotCQlwX3NfdGItPmxrZXlbbl9oXSA9IG5fcG9zaXRpb24gLSAxOworCQljdXJmID0gUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBwYXRoX29mZnNldCAtIDEpOworCQljdXJjZiA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIocGF0aCwgcGF0aF9vZmZzZXQgLSAxKTsKKwkJZ2V0X2JoKGN1cmYpOworCQlnZXRfYmgoY3VyZik7CisJCXRiLT5sa2V5W2hdID0gcG9zaXRpb24gLSAxOwogCX0gZWxzZSB7Ci0JCS8qIENhbGN1bGF0ZSBjdXJyZW50IHBhcmVudCBvZiBMW25fcGF0aF9vZmZzZXRdLCB3aGljaCBpcyB0aGUgbGVmdCBuZWlnaGJvciBvZiB0aGUgY3VycmVudCBub2RlLgotCQkgICBDYWxjdWxhdGUgY3VycmVudCBjb21tb24gcGFyZW50IG9mIExbbl9wYXRoX29mZnNldF0gYW5kIHRoZSBjdXJyZW50IG5vZGUuIE5vdGUgdGhhdAotCQkgICBDRkxbbl9wYXRoX29mZnNldF0gbm90IGVxdWFsIEZMW25fcGF0aF9vZmZzZXRdIGFuZCBDRkxbbl9wYXRoX29mZnNldF0gbm90IGVxdWFsIEZbbl9wYXRoX29mZnNldF0uCi0JCSAgIENhbGN1bGF0ZSBsa2V5W25fcGF0aF9vZmZzZXRdLiAqLwotCQlpZiAoKG5fcmV0X3ZhbHVlID0gZ2V0X2Zhcl9wYXJlbnQocF9zX3RiLCBuX2ggKyAxLCAmcF9zX2N1cmYsCi0JCQkJCQkgICZwX3NfY3VyY2YsCisJCS8qIENhbGN1bGF0ZSBjdXJyZW50IHBhcmVudCBvZiBMW3BhdGhfb2Zmc2V0XSwgd2hpY2ggaXMgdGhlIGxlZnQgbmVpZ2hib3Igb2YgdGhlIGN1cnJlbnQgbm9kZS4KKwkJICAgQ2FsY3VsYXRlIGN1cnJlbnQgY29tbW9uIHBhcmVudCBvZiBMW3BhdGhfb2Zmc2V0XSBhbmQgdGhlIGN1cnJlbnQgbm9kZS4gTm90ZSB0aGF0CisJCSAgIENGTFtwYXRoX29mZnNldF0gbm90IGVxdWFsIEZMW3BhdGhfb2Zmc2V0XSBhbmQgQ0ZMW3BhdGhfb2Zmc2V0XSBub3QgZXF1YWwgRltwYXRoX29mZnNldF0uCisJCSAgIENhbGN1bGF0ZSBsa2V5W3BhdGhfb2Zmc2V0XS4gKi8KKwkJaWYgKChyZXQgPSBnZXRfZmFyX3BhcmVudCh0YiwgaCArIDEsICZjdXJmLAorCQkJCQkJICAmY3VyY2YsCiAJCQkJCQkgIExFRlRfUEFSRU5UUykpICE9IENBUlJZX09OKQotCQkJcmV0dXJuIG5fcmV0X3ZhbHVlOworCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlkZWNyZW1lbnRfYmNvdW50KHBfc190Yi0+Rkxbbl9oXSk7Ci0JcF9zX3RiLT5GTFtuX2hdID0gcF9zX2N1cmY7CS8qIE5ldyBpbml0aWFsaXphdGlvbiBvZiBGTFtuX2hdLiAqLwotCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5DRkxbbl9oXSk7Ci0JcF9zX3RiLT5DRkxbbl9oXSA9IHBfc19jdXJjZjsJLyogTmV3IGluaXRpYWxpemF0aW9uIG9mIENGTFtuX2hdLiAqLworCWJyZWxzZSh0Yi0+RkxbaF0pOworCXRiLT5GTFtoXSA9IGN1cmY7CS8qIE5ldyBpbml0aWFsaXphdGlvbiBvZiBGTFtoXS4gKi8KKwlicmVsc2UodGItPkNGTFtoXSk7CisJdGItPkNGTFtoXSA9IGN1cmNmOwkvKiBOZXcgaW5pdGlhbGl6YXRpb24gb2YgQ0ZMW2hdLiAqLwogCi0JUkZBTFNFKChwX3NfY3VyZiAmJiAhQl9JU19JTl9UUkVFKHBfc19jdXJmKSkgfHwKLQkgICAgICAgKHBfc19jdXJjZiAmJiAhQl9JU19JTl9UUkVFKHBfc19jdXJjZikpLAotCSAgICAgICAiUEFQLTgxOTU6IEZMICglYikgb3IgQ0ZMICglYikgaXMgaW52YWxpZCIsIHBfc19jdXJmLCBwX3NfY3VyY2YpOworCVJGQUxTRSgoY3VyZiAmJiAhQl9JU19JTl9UUkVFKGN1cmYpKSB8fAorCSAgICAgICAoY3VyY2YgJiYgIUJfSVNfSU5fVFJFRShjdXJjZikpLAorCSAgICAgICAiUEFQLTgxOTU6IEZMICglYikgb3IgQ0ZMICglYikgaXMgaW52YWxpZCIsIGN1cmYsIGN1cmNmKTsKIAotLyogR2V0IHBhcmVudCBGUltuX2hdIG9mIFJbbl9oXS4gKi8KKy8qIEdldCBwYXJlbnQgRlJbaF0gb2YgUltoXS4gKi8KIAotLyogQ3VycmVudCBub2RlIGlzIHRoZSBsYXN0IGNoaWxkIG9mIEZbbl9oXS4gRlJbbl9oXSAhPSBGW25faF0uICovCi0JaWYgKG5fcG9zaXRpb24gPT0gQl9OUl9JVEVNUyhQQVRIX0hfUEJVRkZFUihwX3NfcGF0aCwgbl9oICsgMSkpKSB7Ci0vKiBDYWxjdWxhdGUgY3VycmVudCBwYXJlbnQgb2YgUltuX2hdLCB3aGljaCBpcyB0aGUgcmlnaHQgbmVpZ2hib3Igb2YgRltuX2hdLgotICAgQ2FsY3VsYXRlIGN1cnJlbnQgY29tbW9uIHBhcmVudCBvZiBSW25faF0gYW5kIGN1cnJlbnQgbm9kZS4gTm90ZSB0aGF0IENGUltuX2hdCi0gICBub3QgZXF1YWwgRlJbbl9wYXRoX29mZnNldF0gYW5kIENGUltuX2hdIG5vdCBlcXVhbCBGW25faF0uICovCi0JCWlmICgobl9yZXRfdmFsdWUgPQotCQkgICAgIGdldF9mYXJfcGFyZW50KHBfc190Yiwgbl9oICsgMSwgJnBfc19jdXJmLCAmcF9zX2N1cmNmLAorLyogQ3VycmVudCBub2RlIGlzIHRoZSBsYXN0IGNoaWxkIG9mIEZbaF0uIEZSW2hdICE9IEZbaF0uICovCisJaWYgKHBvc2l0aW9uID09IEJfTlJfSVRFTVMoUEFUSF9IX1BCVUZGRVIocGF0aCwgaCArIDEpKSkgeworLyogQ2FsY3VsYXRlIGN1cnJlbnQgcGFyZW50IG9mIFJbaF0sIHdoaWNoIGlzIHRoZSByaWdodCBuZWlnaGJvciBvZiBGW2hdLgorICAgQ2FsY3VsYXRlIGN1cnJlbnQgY29tbW9uIHBhcmVudCBvZiBSW2hdIGFuZCBjdXJyZW50IG5vZGUuIE5vdGUgdGhhdCBDRlJbaF0KKyAgIG5vdCBlcXVhbCBGUltwYXRoX29mZnNldF0gYW5kIENGUltoXSBub3QgZXF1YWwgRltoXS4gKi8KKwkJaWYgKChyZXQgPQorCQkgICAgIGdldF9mYXJfcGFyZW50KHRiLCBoICsgMSwgJmN1cmYsICZjdXJjZiwKIAkJCQkgICAgUklHSFRfUEFSRU5UUykpICE9IENBUlJZX09OKQotCQkJcmV0dXJuIG5fcmV0X3ZhbHVlOworCQkJcmV0dXJuIHJldDsKIAl9IGVsc2UgewotLyogQ3VycmVudCBub2RlIGlzIG5vdCB0aGUgbGFzdCBjaGlsZCBvZiBpdHMgcGFyZW50IEZbbl9oXS4gKi8KLQkJLyoocF9zX2N1cmYgPSBwX3NfY3VyY2YgPSBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19wYXRoLCBuX3BhdGhfb2Zmc2V0IC0gMSkpLT5iX2NvdW50ICs9IDI7ICovCi0JCXBfc19jdXJmID0gcF9zX2N1cmNmID0KLQkJICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3BhdGgsIG5fcGF0aF9vZmZzZXQgLSAxKTsKLQkJZ2V0X2JoKHBfc19jdXJmKTsKLQkJZ2V0X2JoKHBfc19jdXJmKTsKLQkJcF9zX3RiLT5ya2V5W25faF0gPSBuX3Bvc2l0aW9uOworLyogQ3VycmVudCBub2RlIGlzIG5vdCB0aGUgbGFzdCBjaGlsZCBvZiBpdHMgcGFyZW50IEZbaF0uICovCisJCWN1cmYgPSBQQVRIX09GRlNFVF9QQlVGRkVSKHBhdGgsIHBhdGhfb2Zmc2V0IC0gMSk7CisJCWN1cmNmID0gUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBwYXRoX29mZnNldCAtIDEpOworCQlnZXRfYmgoY3VyZik7CisJCWdldF9iaChjdXJmKTsKKwkJdGItPnJrZXlbaF0gPSBwb3NpdGlvbjsKIAl9CiAKLQlkZWNyZW1lbnRfYmNvdW50KHBfc190Yi0+RlJbbl9oXSk7Ci0JcF9zX3RiLT5GUltuX2hdID0gcF9zX2N1cmY7CS8qIE5ldyBpbml0aWFsaXphdGlvbiBvZiBGUltuX3BhdGhfb2Zmc2V0XS4gKi8KKwlicmVsc2UodGItPkZSW2hdKTsKKwkvKiBOZXcgaW5pdGlhbGl6YXRpb24gb2YgRlJbcGF0aF9vZmZzZXRdLiAqLworCXRiLT5GUltoXSA9IGN1cmY7CiAKLQlkZWNyZW1lbnRfYmNvdW50KHBfc190Yi0+Q0ZSW25faF0pOwotCXBfc190Yi0+Q0ZSW25faF0gPSBwX3NfY3VyY2Y7CS8qIE5ldyBpbml0aWFsaXphdGlvbiBvZiBDRlJbbl9wYXRoX29mZnNldF0uICovCisJYnJlbHNlKHRiLT5DRlJbaF0pOworCS8qIE5ldyBpbml0aWFsaXphdGlvbiBvZiBDRlJbcGF0aF9vZmZzZXRdLiAqLworCXRiLT5DRlJbaF0gPSBjdXJjZjsKIAotCVJGQUxTRSgocF9zX2N1cmYgJiYgIUJfSVNfSU5fVFJFRShwX3NfY3VyZikpIHx8Ci0JICAgICAgIChwX3NfY3VyY2YgJiYgIUJfSVNfSU5fVFJFRShwX3NfY3VyY2YpKSwKLQkgICAgICAgIlBBUC04MjA1OiBGUiAoJWIpIG9yIENGUiAoJWIpIGlzIGludmFsaWQiLCBwX3NfY3VyZiwgcF9zX2N1cmNmKTsKKwlSRkFMU0UoKGN1cmYgJiYgIUJfSVNfSU5fVFJFRShjdXJmKSkgfHwKKwkgICAgICAgKGN1cmNmICYmICFCX0lTX0lOX1RSRUUoY3VyY2YpKSwKKwkgICAgICAgIlBBUC04MjA1OiBGUiAoJWIpIG9yIENGUiAoJWIpIGlzIGludmFsaWQiLCBjdXJmLCBjdXJjZik7CiAKIAlyZXR1cm4gQ0FSUllfT047CiB9CkBAIC0xMjAzLDcgKzEyMDgsNyBAQAogICoJaAljdXJyZW50IGxldmVsIG9mIHRoZSBub2RlOwogICoJaW51bQlpdGVtIG51bWJlciBpbiBTW2hdOwogICoJbW9kZQlpIC0gaW5zZXJ0LCBwIC0gcGFzdGU7Ci0gKiBSZXR1cm5zOgkxIC0gc2NoZWR1bGUgb2NjdXJyZWQ7IAorICogUmV0dXJuczoJMSAtIHNjaGVkdWxlIG9jY3VycmVkOwogICoJICAgICAgICAwIC0gYmFsYW5jaW5nIGZvciBoaWdoZXIgbGV2ZWxzIG5lZWRlZDsKICAqCSAgICAgICAtMSAtIG5vIGJhbGFuY2luZyBmb3IgaGlnaGVyIGxldmVscyBuZWVkZWQ7CiAgKgkgICAgICAgLTIgLSBubyBkaXNrIHNwYWNlLgpAQCAtMTIxNyw3ICsxMjIyLDcgQEAKIAkJCQkgICBjb250YWlucyBub2RlIGJlaW5nIGJhbGFuY2VkLiAgVGhlIG1uZW1vbmljIGlzCiAJCQkJICAgdGhhdCB0aGUgYXR0ZW1wdGVkIGNoYW5nZSBpbiBub2RlIHNwYWNlIHVzZWQgbGV2ZWwKIAkJCQkgICBpcyBsZXZieXRlcyBieXRlcy4gKi8KLQkgbl9yZXRfdmFsdWU7CisJIHJldDsKIAogCWludCBsZnJlZSwgc2ZyZWUsIHJmcmVlIC8qIGZyZWUgc3BhY2UgaW4gTCwgUyBhbmQgUiAqLyA7CiAKQEAgLTEyMzgsNyArMTI0Myw3IEBACiAJLyogd2UgcGVyZm9ybSA4IGNhbGxzIHRvIGdldF9udW1fdmVyKCkuICBGb3IgZWFjaCBjYWxsIHdlIGNhbGN1bGF0ZSBmaXZlIHBhcmFtZXRlcnMuCiAJICAgd2hlcmUgNHRoIHBhcmFtZXRlciBpcyBzMWJ5dGVzIGFuZCA1dGggLSBzMmJ5dGVzCiAJICovCi0Jc2hvcnQgc251bTAxMls0MF0gPSB7IDAsIH07CS8qIHMwbnVtLCBzMW51bSwgczJudW0gZm9yIDggY2FzZXMgCisJc2hvcnQgc251bTAxMls0MF0gPSB7IDAsIH07CS8qIHMwbnVtLCBzMW51bSwgczJudW0gZm9yIDggY2FzZXMKIAkJCQkJICAgMCwxIC0gZG8gbm90IHNoaWZ0IGFuZCBkbyBub3Qgc2hpZnQgYnV0IGJvdHRsZQogCQkJCQkgICAyIC0gc2hpZnQgb25seSB3aG9sZSBpdGVtIHRvIGxlZnQKIAkJCQkJICAgMyAtIHNoaWZ0IHRvIGxlZnQgYW5kIGJvdHRsZSBhcyBtdWNoIGFzIHBvc3NpYmxlCkBAIC0xMjU1LDI0ICsxMjYwLDI0IEBACiAJLyogQ2FsY3VsYXRlIGJhbGFuY2UgcGFyYW1ldGVycyBmb3IgY3JlYXRpbmcgbmV3IHJvb3QuICovCiAJaWYgKCFTaCkgewogCQlpZiAoIWgpCi0JCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkJICAgICAgICJ2cy04MjEwOiBpcF9jaGVja19iYWxhbmNlOiBTWzBdIGNhbiBub3QgYmUgMCIpOwotCQlzd2l0Y2ggKG5fcmV0X3ZhbHVlID0gZ2V0X2VtcHR5X25vZGVzKHRiLCBoKSkgeworCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAidnMtODIxMCIsCisJCQkJICAgICAgICJTWzBdIGNhbiBub3QgYmUgMCIpOworCQlzd2l0Y2ggKHJldCA9IGdldF9lbXB0eV9ub2Rlcyh0YiwgaCkpIHsKIAkJY2FzZSBDQVJSWV9PTjoKIAkJCXNldF9wYXJhbWV0ZXJzKHRiLCBoLCAwLCAwLCAxLCBOVUxMLCAtMSwgLTEpOwogCQkJcmV0dXJuIE5PX0JBTEFOQ0lOR19ORUVERUQ7CS8qIG5vIGJhbGFuY2luZyBmb3IgaGlnaGVyIGxldmVscyBuZWVkZWQgKi8KIAogCQljYXNlIE5PX0RJU0tfU1BBQ0U6CiAJCWNhc2UgUkVQRUFUX1NFQVJDSDoKLQkJCXJldHVybiBuX3JldF92YWx1ZTsKKwkJCXJldHVybiByZXQ7CiAJCWRlZmF1bHQ6Ci0JCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkJICAgICAgICJ2cy04MjE1OiBpcF9jaGVja19iYWxhbmNlOiBpbmNvcnJlY3QgcmV0dXJuIHZhbHVlIG9mIGdldF9lbXB0eV9ub2RlcyIpOworCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAidnMtODIxNSIsICJpbmNvcnJlY3QgIgorCQkJCSAgICAgICAicmV0dXJuIHZhbHVlIG9mIGdldF9lbXB0eV9ub2RlcyIpOwogCQl9CiAJfQogCi0JaWYgKChuX3JldF92YWx1ZSA9IGdldF9wYXJlbnRzKHRiLCBoKSkgIT0gQ0FSUllfT04pCS8qIGdldCBwYXJlbnRzIG9mIFNbaF0gbmVpZ2hib3JzLiAqLwotCQlyZXR1cm4gbl9yZXRfdmFsdWU7CisJaWYgKChyZXQgPSBnZXRfcGFyZW50cyh0YiwgaCkpICE9IENBUlJZX09OKQkvKiBnZXQgcGFyZW50cyBvZiBTW2hdIG5laWdoYm9ycy4gKi8KKwkJcmV0dXJuIHJldDsKIAogCXNmcmVlID0gQl9GUkVFX1NQQUNFKFNoKTsKIApAQCAtMTI4Nyw3ICsxMjkyLDcgQEAKIAogCWNyZWF0ZV92aXJ0dWFsX25vZGUodGIsIGgpOwogCi0JLyogIAorCS8qCiAJICAgZGV0ZXJtaW5lIG1heGltYWwgbnVtYmVyIG9mIGl0ZW1zIHdlIGNhbiBzaGlmdCB0byB0aGUgbGVmdCBuZWlnaGJvciAoaW4gdGIgc3RydWN0dXJlKQogCSAgIGFuZCB0aGUgbWF4aW1hbCBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjYW4gZmxvdyB0byB0aGUgbGVmdCBuZWlnaGJvcgogCSAgIGZyb20gdGhlIGxlZnQgbW9zdCBsaXF1aWQgaXRlbSB0aGF0IGNhbm5vdCBiZSBzaGlmdGVkIGZyb20gU1swXSBlbnRpcmVseSAocmV0dXJuZWQgdmFsdWUpCkBAIC0xMzQ4LDEzICsxMzUzLDEzIEBACiAKIAl7CiAJCWludCBscGFyLCBycGFyLCBuc2V0LCBsc2V0LCByc2V0LCBscnNldDsKLQkJLyogCisJCS8qCiAJCSAqIHJlZ3VsYXIgb3ZlcmZsb3dpbmcgb2YgdGhlIG5vZGUKIAkJICovCiAKLQkJLyogZ2V0X251bV92ZXIgd29ya3MgaW4gMiBtb2RlcyAoRkxPVyAmIE5PX0ZMT1cpIAorCQkvKiBnZXRfbnVtX3ZlciB3b3JrcyBpbiAyIG1vZGVzIChGTE9XICYgTk9fRkxPVykKIAkJICAgbHBhciwgcnBhciAtIG51bWJlciBvZiBpdGVtcyB3ZSBjYW4gc2hpZnQgdG8gbGVmdC9yaWdodCBuZWlnaGJvciAoaW5jbHVkaW5nIHNwbGl0dGluZyBpdGVtKQotCQkgICBuc2V0LCBsc2V0LCByc2V0LCBscnNldCAtIHNob3dzLCB3aGV0aGVyIGZsb3dpbmcgaXRlbXMgZ2l2ZSBiZXR0ZXIgcGFja2luZyAKKwkJICAgbnNldCwgbHNldCwgcnNldCwgbHJzZXQgLSBzaG93cywgd2hldGhlciBmbG93aW5nIGl0ZW1zIGdpdmUgYmV0dGVyIHBhY2tpbmcKIAkJICovCiAjZGVmaW5lIEZMT1cgMQogI2RlZmluZSBOT19GTE9XIDAJCS8qIGRvIG5vdCBhbnkgc3BsaXR0aW5nICovCkBAIC0xNTQ0LDcgKzE1NDksNyBAQAogICoJaAljdXJyZW50IGxldmVsIG9mIHRoZSBub2RlOwogICoJaW51bQlpdGVtIG51bWJlciBpbiBTW2hdOwogICoJbW9kZQlpIC0gaW5zZXJ0LCBwIC0gcGFzdGU7Ci0gKiBSZXR1cm5zOgkxIC0gc2NoZWR1bGUgb2NjdXJyZWQ7IAorICogUmV0dXJuczoJMSAtIHNjaGVkdWxlIG9jY3VycmVkOwogICoJICAgICAgICAwIC0gYmFsYW5jaW5nIGZvciBoaWdoZXIgbGV2ZWxzIG5lZWRlZDsKICAqCSAgICAgICAtMSAtIG5vIGJhbGFuY2luZyBmb3IgaGlnaGVyIGxldmVscyBuZWVkZWQ7CiAgKgkgICAgICAgLTIgLSBubyBkaXNrIHNwYWNlLgpAQCAtMTU1OSw3ICsxNTY0LDcgQEAKIAkvKiBTaCBpcyB0aGUgbm9kZSB3aG9zZSBiYWxhbmNlIGlzIGN1cnJlbnRseSBiZWluZyBjaGVja2VkLAogCSAgIGFuZCBGaCBpcyBpdHMgZmF0aGVyLiAgKi8KIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKlNoLCAqRmg7Ci0JaW50IG1heHNpemUsIG5fcmV0X3ZhbHVlOworCWludCBtYXhzaXplLCByZXQ7CiAJaW50IGxmcmVlLCByZnJlZSAvKiBmcmVlIHNwYWNlIGluIEwgYW5kIFIgKi8gOwogCiAJU2ggPSBQQVRIX0hfUEJVRkZFUih0Yi0+dGJfcGF0aCwgaCk7CkBAIC0xNTg0LDggKzE1ODksOCBAQAogCQlyZXR1cm4gQ0FSUllfT047CiAJfQogCi0JaWYgKChuX3JldF92YWx1ZSA9IGdldF9wYXJlbnRzKHRiLCBoKSkgIT0gQ0FSUllfT04pCi0JCXJldHVybiBuX3JldF92YWx1ZTsKKwlpZiAoKHJldCA9IGdldF9wYXJlbnRzKHRiLCBoKSkgIT0gQ0FSUllfT04pCisJCXJldHVybiByZXQ7CiAKIAkvKiBnZXQgZnJlZSBzcGFjZSBvZiBuZWlnaGJvcnMgKi8KIAlyZnJlZSA9IGdldF9yZnJlZSh0YiwgaCk7CkBAIC0xNzI3LDcgKzE3MzIsNyBAQAogICoJaAljdXJyZW50IGxldmVsIG9mIHRoZSBub2RlOwogICoJaW51bQlpdGVtIG51bWJlciBpbiBTW2hdOwogICoJbW9kZQlpIC0gaW5zZXJ0LCBwIC0gcGFzdGU7Ci0gKiBSZXR1cm5zOgkxIC0gc2NoZWR1bGUgb2NjdXJyZWQ7IAorICogUmV0dXJuczoJMSAtIHNjaGVkdWxlIG9jY3VycmVkOwogICoJICAgICAgICAwIC0gYmFsYW5jaW5nIGZvciBoaWdoZXIgbGV2ZWxzIG5lZWRlZDsKICAqCSAgICAgICAtMSAtIG5vIGJhbGFuY2luZyBmb3IgaGlnaGVyIGxldmVscyBuZWVkZWQ7CiAgKgkgICAgICAgLTIgLSBubyBkaXNrIHNwYWNlLgpAQCAtMTc0Miw3ICsxNzQ3LDcgQEAKIAkgICBhdHRlbXB0ZWQgY2hhbmdlIGluIG5vZGUgc3BhY2UgdXNlZCBsZXZlbCBpcyBsZXZieXRlcyBieXRlcy4gKi8KIAlpbnQgbGV2Ynl0ZXM7CiAJLyogdGhlIG1heGltYWwgaXRlbSBzaXplICovCi0JaW50IG1heHNpemUsIG5fcmV0X3ZhbHVlOworCWludCBtYXhzaXplLCByZXQ7CiAJLyogUzAgaXMgdGhlIG5vZGUgd2hvc2UgYmFsYW5jZSBpcyBjdXJyZW50bHkgYmVpbmcgY2hlY2tlZCwKIAkgICBhbmQgRjAgaXMgaXRzIGZhdGhlci4gICovCiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpTMCwgKkYwOwpAQCAtMTc2NCw4ICsxNzY5LDggQEAKIAkJcmV0dXJuIE5PX0JBTEFOQ0lOR19ORUVERUQ7CiAJfQogCi0JaWYgKChuX3JldF92YWx1ZSA9IGdldF9wYXJlbnRzKHRiLCBoKSkgIT0gQ0FSUllfT04pCi0JCXJldHVybiBuX3JldF92YWx1ZTsKKwlpZiAoKHJldCA9IGdldF9wYXJlbnRzKHRiLCBoKSkgIT0gQ0FSUllfT04pCisJCXJldHVybiByZXQ7CiAKIAkvKiBnZXQgZnJlZSBzcGFjZSBvZiBuZWlnaGJvcnMgKi8KIAlyZnJlZSA9IGdldF9yZnJlZSh0YiwgaCk7CkBAIC0xODIxLDcgKzE4MjYsNyBAQAogICoJaAljdXJyZW50IGxldmVsIG9mIHRoZSBub2RlOwogICoJaW51bQlpdGVtIG51bWJlciBpbiBTW2hdOwogICoJbW9kZQlkIC0gZGVsZXRlLCBjIC0gY3V0LgotICogUmV0dXJuczoJMSAtIHNjaGVkdWxlIG9jY3VycmVkOyAKKyAqIFJldHVybnM6CTEgLSBzY2hlZHVsZSBvY2N1cnJlZDsKICAqCSAgICAgICAgMCAtIGJhbGFuY2luZyBmb3IgaGlnaGVyIGxldmVscyBuZWVkZWQ7CiAgKgkgICAgICAgLTEgLSBubyBiYWxhbmNpbmcgZm9yIGhpZ2hlciBsZXZlbHMgbmVlZGVkOwogICoJICAgICAgIC0yIC0gbm8gZGlzayBzcGFjZS4KQEAgLTE4NTAsNyArMTg1NSw3IEBACiAgKgloCWN1cnJlbnQgbGV2ZWwgb2YgdGhlIG5vZGU7CiAgKglpbnVtCWl0ZW0gbnVtYmVyIGluIFNbaF07CiAgKgltb2RlCWkgLSBpbnNlcnQsIHAgLSBwYXN0ZSwgZCAtIGRlbGV0ZSwgYyAtIGN1dC4KLSAqIFJldHVybnM6CTEgLSBzY2hlZHVsZSBvY2N1cnJlZDsgCisgKiBSZXR1cm5zOgkxIC0gc2NoZWR1bGUgb2NjdXJyZWQ7CiAgKgkgICAgICAgIDAgLSBiYWxhbmNpbmcgZm9yIGhpZ2hlciBsZXZlbHMgbmVlZGVkOwogICoJICAgICAgIC0xIC0gbm8gYmFsYW5jaW5nIGZvciBoaWdoZXIgbGV2ZWxzIG5lZWRlZDsKICAqCSAgICAgICAtMiAtIG5vIGRpc2sgc3BhY2UuCkBAIC0xODg0LDEzNyArMTg4OSwxMzggQEAKIH0KIAogLyogQ2hlY2sgd2hldGhlciBwYXJlbnQgYXQgdGhlIHBhdGggaXMgdGhlIHJlYWxseSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgbm9kZS4qLwotc3RhdGljIGludCBnZXRfZGlyZWN0X3BhcmVudChzdHJ1Y3QgdHJlZV9iYWxhbmNlICpwX3NfdGIsIGludCBuX2gpCitzdGF0aWMgaW50IGdldF9kaXJlY3RfcGFyZW50KHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiLCBpbnQgaCkKIHsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19iaDsKLQlzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoID0gcF9zX3RiLT50Yl9wYXRoOwotCWludCBuX3Bvc2l0aW9uLAotCSAgICBuX3BhdGhfb2Zmc2V0ID0gUEFUSF9IX1BBVEhfT0ZGU0VUKHBfc190Yi0+dGJfcGF0aCwgbl9oKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCXN0cnVjdCB0cmVlcGF0aCAqcGF0aCA9IHRiLT50Yl9wYXRoOworCWludCBwb3NpdGlvbiwKKwkgICAgcGF0aF9vZmZzZXQgPSBQQVRIX0hfUEFUSF9PRkZTRVQodGItPnRiX3BhdGgsIGgpOwogCiAJLyogV2UgYXJlIGluIHRoZSByb290IG9yIGluIHRoZSBuZXcgcm9vdC4gKi8KLQlpZiAobl9wYXRoX29mZnNldCA8PSBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSB7CisJaWYgKHBhdGhfb2Zmc2V0IDw9IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQpIHsKIAotCQlSRkFMU0Uobl9wYXRoX29mZnNldCA8IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQgLSAxLAorCQlSRkFMU0UocGF0aF9vZmZzZXQgPCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUIC0gMSwKIAkJICAgICAgICJQQVAtODI2MDogaW52YWxpZCBvZmZzZXQgaW4gdGhlIHBhdGgiKTsKIAotCQlpZiAoUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfcGF0aCwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCktPgotCQkgICAgYl9ibG9ja25yID09IFNCX1JPT1RfQkxPQ0socF9zX3RiLT50Yl9zYikpIHsKKwkJaWYgKFBBVEhfT0ZGU0VUX1BCVUZGRVIocGF0aCwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCktPgorCQkgICAgYl9ibG9ja25yID09IFNCX1JPT1RfQkxPQ0sodGItPnRiX3NiKSkgewogCQkJLyogUm9vdCBpcyBub3QgY2hhbmdlZC4gKi8KLQkJCVBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3BhdGgsIG5fcGF0aF9vZmZzZXQgLSAxKSA9IE5VTEw7Ci0JCQlQQVRIX09GRlNFVF9QT1NJVElPTihwX3NfcGF0aCwgbl9wYXRoX29mZnNldCAtIDEpID0gMDsKKwkJCVBBVEhfT0ZGU0VUX1BCVUZGRVIocGF0aCwgcGF0aF9vZmZzZXQgLSAxKSA9IE5VTEw7CisJCQlQQVRIX09GRlNFVF9QT1NJVElPTihwYXRoLCBwYXRoX29mZnNldCAtIDEpID0gMDsKIAkJCXJldHVybiBDQVJSWV9PTjsKIAkJfQogCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsJLyogUm9vdCBpcyBjaGFuZ2VkIGFuZCB3ZSBtdXN0IHJlY2FsY3VsYXRlIHRoZSBwYXRoLiAqLwogCX0KIAogCWlmICghQl9JU19JTl9UUkVFCi0JICAgIChwX3NfYmggPSBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19wYXRoLCBuX3BhdGhfb2Zmc2V0IC0gMSkpKQorCSAgICAoYmggPSBQQVRIX09GRlNFVF9QQlVGRkVSKHBhdGgsIHBhdGhfb2Zmc2V0IC0gMSkpKQogCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsJLyogUGFyZW50IGluIHRoZSBwYXRoIGlzIG5vdCBpbiB0aGUgdHJlZS4gKi8KIAotCWlmICgobl9wb3NpdGlvbiA9Ci0JICAgICBQQVRIX09GRlNFVF9QT1NJVElPTihwX3NfcGF0aCwKLQkJCQkgIG5fcGF0aF9vZmZzZXQgLSAxKSkgPiBCX05SX0lURU1TKHBfc19iaCkpCisJaWYgKChwb3NpdGlvbiA9CisJICAgICBQQVRIX09GRlNFVF9QT1NJVElPTihwYXRoLAorCQkJCSAgcGF0aF9vZmZzZXQgLSAxKSkgPiBCX05SX0lURU1TKGJoKSkKIAkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAKLQlpZiAoQl9OX0NISUxEX05VTShwX3NfYmgsIG5fcG9zaXRpb24pICE9Ci0JICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3BhdGgsIG5fcGF0aF9vZmZzZXQpLT5iX2Jsb2NrbnIpCisJaWYgKEJfTl9DSElMRF9OVU0oYmgsIHBvc2l0aW9uKSAhPQorCSAgICBQQVRIX09GRlNFVF9QQlVGRkVSKHBhdGgsIHBhdGhfb2Zmc2V0KS0+Yl9ibG9ja25yKQogCQkvKiBQYXJlbnQgaW4gdGhlIHBhdGggaXMgbm90IHBhcmVudCBvZiB0aGUgY3VycmVudCBub2RlIGluIHRoZSB0cmVlLiAqLwogCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsKIAotCWlmIChidWZmZXJfbG9ja2VkKHBfc19iaCkpIHsKLQkJX193YWl0X29uX2J1ZmZlcihwX3NfYmgpOwotCQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHBfc190YikpCisJaWYgKGJ1ZmZlcl9sb2NrZWQoYmgpKSB7CisJCV9fd2FpdF9vbl9idWZmZXIoYmgpOworCQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHRiKSkKIAkJCXJldHVybiBSRVBFQVRfU0VBUkNIOwogCX0KIAogCXJldHVybiBDQVJSWV9PTjsJLyogUGFyZW50IGluIHRoZSBwYXRoIGlzIHVubG9ja2VkIGFuZCByZWFsbHkgcGFyZW50IG9mIHRoZSBjdXJyZW50IG5vZGUuICAqLwogfQogCi0vKiBVc2luZyBsbnVtW25faF0gYW5kIHJudW1bbl9oXSB3ZSBzaG91bGQgZGV0ZXJtaW5lIHdoYXQgbmVpZ2hib3JzCi0gKiBvZiBTW25faF0gd2UKLSAqIG5lZWQgaW4gb3JkZXIgdG8gYmFsYW5jZSBTW25faF0sIGFuZCBnZXQgdGhlbSBpZiBuZWNlc3NhcnkuCisvKiBVc2luZyBsbnVtW2hdIGFuZCBybnVtW2hdIHdlIHNob3VsZCBkZXRlcm1pbmUgd2hhdCBuZWlnaGJvcnMKKyAqIG9mIFNbaF0gd2UKKyAqIG5lZWQgaW4gb3JkZXIgdG8gYmFsYW5jZSBTW2hdLCBhbmQgZ2V0IHRoZW0gaWYgbmVjZXNzYXJ5LgogICogUmV0dXJuczoJU0NIRURVTEVfT0NDVVJSRUQgLSBzY2hlZHVsZSBvY2N1cnJlZCB3aGlsZSB0aGUgZnVuY3Rpb24gd29ya2VkOwogICoJICAgICAgICBDQVJSWV9PTiAtIHNjaGVkdWxlIGRpZG4ndCBvY2N1ciB3aGlsZSB0aGUgZnVuY3Rpb24gd29ya2VkOwogICovCi1zdGF0aWMgaW50IGdldF9uZWlnaGJvcnMoc3RydWN0IHRyZWVfYmFsYW5jZSAqcF9zX3RiLCBpbnQgbl9oKQorc3RhdGljIGludCBnZXRfbmVpZ2hib3JzKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiLCBpbnQgaCkKIHsKLQlpbnQgbl9jaGlsZF9wb3NpdGlvbiwKLQkgICAgbl9wYXRoX29mZnNldCA9IFBBVEhfSF9QQVRIX09GRlNFVChwX3NfdGItPnRiX3BhdGgsIG5faCArIDEpOwotCXVuc2lnbmVkIGxvbmcgbl9zb25fbnVtYmVyOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiID0gcF9zX3RiLT50Yl9zYjsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19iaDsKKwlpbnQgY2hpbGRfcG9zaXRpb24sCisJICAgIHBhdGhfb2Zmc2V0ID0gUEFUSF9IX1BBVEhfT0ZGU0VUKHRiLT50Yl9wYXRoLCBoICsgMSk7CisJdW5zaWduZWQgbG9uZyBzb25fbnVtYmVyOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSB0Yi0+dGJfc2I7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAotCVBST0NfSU5GT19JTkMocF9zX3NiLCBnZXRfbmVpZ2hib3JzW25faF0pOworCVBST0NfSU5GT19JTkMoc2IsIGdldF9uZWlnaGJvcnNbaF0pOwogCi0JaWYgKHBfc190Yi0+bG51bVtuX2hdKSB7Ci0JCS8qIFdlIG5lZWQgbGVmdCBuZWlnaGJvciB0byBiYWxhbmNlIFNbbl9oXS4gKi8KLQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIG5lZWRfbF9uZWlnaGJvcltuX2hdKTsKLQkJcF9zX2JoID0gUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfdGItPnRiX3BhdGgsIG5fcGF0aF9vZmZzZXQpOworCWlmICh0Yi0+bG51bVtoXSkgeworCQkvKiBXZSBuZWVkIGxlZnQgbmVpZ2hib3IgdG8gYmFsYW5jZSBTW2hdLiAqLworCQlQUk9DX0lORk9fSU5DKHNiLCBuZWVkX2xfbmVpZ2hib3JbaF0pOworCQliaCA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIodGItPnRiX3BhdGgsIHBhdGhfb2Zmc2V0KTsKIAotCQlSRkFMU0UocF9zX2JoID09IHBfc190Yi0+Rkxbbl9oXSAmJgotCQkgICAgICAgIVBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBfc190Yi0+dGJfcGF0aCwgbl9wYXRoX29mZnNldCksCisJCVJGQUxTRShiaCA9PSB0Yi0+RkxbaF0gJiYKKwkJICAgICAgICFQQVRIX09GRlNFVF9QT1NJVElPTih0Yi0+dGJfcGF0aCwgcGF0aF9vZmZzZXQpLAogCQkgICAgICAgIlBBUC04MjcwOiBpbnZhbGlkIHBvc2l0aW9uIGluIHRoZSBwYXJlbnQiKTsKIAotCQluX2NoaWxkX3Bvc2l0aW9uID0KLQkJICAgIChwX3NfYmggPT0KLQkJICAgICBwX3NfdGItPkZMW25faF0pID8gcF9zX3RiLT5sa2V5W25faF0gOiBCX05SX0lURU1TKHBfc190Yi0+Ci0JCQkJCQkJCSAgICAgICBGTFtuX2hdKTsKLQkJbl9zb25fbnVtYmVyID0gQl9OX0NISUxEX05VTShwX3NfdGItPkZMW25faF0sIG5fY2hpbGRfcG9zaXRpb24pOwotCQlwX3NfYmggPSBzYl9icmVhZChwX3Nfc2IsIG5fc29uX251bWJlcik7Ci0JCWlmICghcF9zX2JoKQorCQljaGlsZF9wb3NpdGlvbiA9CisJCSAgICAoYmggPT0KKwkJICAgICB0Yi0+RkxbaF0pID8gdGItPmxrZXlbaF0gOiBCX05SX0lURU1TKHRiLT4KKwkJCQkJCQkJICAgICAgIEZMW2hdKTsKKwkJc29uX251bWJlciA9IEJfTl9DSElMRF9OVU0odGItPkZMW2hdLCBjaGlsZF9wb3NpdGlvbik7CisJCWJoID0gc2JfYnJlYWQoc2IsIHNvbl9udW1iZXIpOworCQlpZiAoIWJoKQogCQkJcmV0dXJuIElPX0VSUk9SOwotCQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHBfc190YikpIHsKLQkJCWRlY3JlbWVudF9iY291bnQocF9zX2JoKTsKLQkJCVBST0NfSU5GT19JTkMocF9zX3NiLCBnZXRfbmVpZ2hib3JzX3Jlc3RhcnRbbl9oXSk7CisJCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIodGIpKSB7CisJCQlicmVsc2UoYmgpOworCQkJUFJPQ19JTkZPX0lOQyhzYiwgZ2V0X25laWdoYm9yc19yZXN0YXJ0W2hdKTsKIAkJCXJldHVybiBSRVBFQVRfU0VBUkNIOwogCQl9CiAKLQkJUkZBTFNFKCFCX0lTX0lOX1RSRUUocF9zX3RiLT5GTFtuX2hdKSB8fAotCQkgICAgICAgbl9jaGlsZF9wb3NpdGlvbiA+IEJfTlJfSVRFTVMocF9zX3RiLT5GTFtuX2hdKSB8fAotCQkgICAgICAgQl9OX0NISUxEX05VTShwX3NfdGItPkZMW25faF0sIG5fY2hpbGRfcG9zaXRpb24pICE9Ci0JCSAgICAgICBwX3NfYmgtPmJfYmxvY2tuciwgIlBBUC04Mjc1OiBpbnZhbGlkIHBhcmVudCIpOwotCQlSRkFMU0UoIUJfSVNfSU5fVFJFRShwX3NfYmgpLCAiUEFQLTgyODA6IGludmFsaWQgY2hpbGQiKTsKLQkJUkZBTFNFKCFuX2ggJiYKLQkJICAgICAgIEJfRlJFRV9TUEFDRShwX3NfYmgpICE9Ci0JCSAgICAgICBNQVhfQ0hJTERfU0laRShwX3NfYmgpIC0KLQkJICAgICAgIGRjX3NpemUoQl9OX0NISUxEKHBfc190Yi0+RkxbMF0sIG5fY2hpbGRfcG9zaXRpb24pKSwKKwkJUkZBTFNFKCFCX0lTX0lOX1RSRUUodGItPkZMW2hdKSB8fAorCQkgICAgICAgY2hpbGRfcG9zaXRpb24gPiBCX05SX0lURU1TKHRiLT5GTFtoXSkgfHwKKwkJICAgICAgIEJfTl9DSElMRF9OVU0odGItPkZMW2hdLCBjaGlsZF9wb3NpdGlvbikgIT0KKwkJICAgICAgIGJoLT5iX2Jsb2NrbnIsICJQQVAtODI3NTogaW52YWxpZCBwYXJlbnQiKTsKKwkJUkZBTFNFKCFCX0lTX0lOX1RSRUUoYmgpLCAiUEFQLTgyODA6IGludmFsaWQgY2hpbGQiKTsKKwkJUkZBTFNFKCFoICYmCisJCSAgICAgICBCX0ZSRUVfU1BBQ0UoYmgpICE9CisJCSAgICAgICBNQVhfQ0hJTERfU0laRShiaCkgLQorCQkgICAgICAgZGNfc2l6ZShCX05fQ0hJTEQodGItPkZMWzBdLCBjaGlsZF9wb3NpdGlvbikpLAogCQkgICAgICAgIlBBUC04MjkwOiBpbnZhbGlkIGNoaWxkIHNpemUgb2YgbGVmdCBuZWlnaGJvciIpOwogCi0JCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5MW25faF0pOwotCQlwX3NfdGItPkxbbl9oXSA9IHBfc19iaDsKKwkJYnJlbHNlKHRiLT5MW2hdKTsKKwkJdGItPkxbaF0gPSBiaDsKIAl9CiAKLQlpZiAocF9zX3RiLT5ybnVtW25faF0pIHsJLyogV2UgbmVlZCByaWdodCBuZWlnaGJvciB0byBiYWxhbmNlIFNbbl9wYXRoX29mZnNldF0uICovCi0JCVBST0NfSU5GT19JTkMocF9zX3NiLCBuZWVkX3JfbmVpZ2hib3Jbbl9oXSk7Ci0JCXBfc19iaCA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3RiLT50Yl9wYXRoLCBuX3BhdGhfb2Zmc2V0KTsKKwkvKiBXZSBuZWVkIHJpZ2h0IG5laWdoYm9yIHRvIGJhbGFuY2UgU1twYXRoX29mZnNldF0uICovCisJaWYgKHRiLT5ybnVtW2hdKSB7CS8qIFdlIG5lZWQgcmlnaHQgbmVpZ2hib3IgdG8gYmFsYW5jZSBTW3BhdGhfb2Zmc2V0XS4gKi8KKwkJUFJPQ19JTkZPX0lOQyhzYiwgbmVlZF9yX25laWdoYm9yW2hdKTsKKwkJYmggPSBQQVRIX09GRlNFVF9QQlVGRkVSKHRiLT50Yl9wYXRoLCBwYXRoX29mZnNldCk7CiAKLQkJUkZBTFNFKHBfc19iaCA9PSBwX3NfdGItPkZSW25faF0gJiYKLQkJICAgICAgIFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBfc190Yi0+dGJfcGF0aCwKLQkJCQkJICAgIG5fcGF0aF9vZmZzZXQpID49Ci0JCSAgICAgICBCX05SX0lURU1TKHBfc19iaCksCisJCVJGQUxTRShiaCA9PSB0Yi0+RlJbaF0gJiYKKwkJICAgICAgIFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHRiLT50Yl9wYXRoLAorCQkJCQkgICAgcGF0aF9vZmZzZXQpID49CisJCSAgICAgICBCX05SX0lURU1TKGJoKSwKIAkJICAgICAgICJQQVAtODI5NTogaW52YWxpZCBwb3NpdGlvbiBpbiB0aGUgcGFyZW50Iik7CiAKLQkJbl9jaGlsZF9wb3NpdGlvbiA9Ci0JCSAgICAocF9zX2JoID09IHBfc190Yi0+RlJbbl9oXSkgPyBwX3NfdGItPnJrZXlbbl9oXSArIDEgOiAwOwotCQluX3Nvbl9udW1iZXIgPSBCX05fQ0hJTERfTlVNKHBfc190Yi0+RlJbbl9oXSwgbl9jaGlsZF9wb3NpdGlvbik7Ci0JCXBfc19iaCA9IHNiX2JyZWFkKHBfc19zYiwgbl9zb25fbnVtYmVyKTsKLQkJaWYgKCFwX3NfYmgpCisJCWNoaWxkX3Bvc2l0aW9uID0KKwkJICAgIChiaCA9PSB0Yi0+RlJbaF0pID8gdGItPnJrZXlbaF0gKyAxIDogMDsKKwkJc29uX251bWJlciA9IEJfTl9DSElMRF9OVU0odGItPkZSW2hdLCBjaGlsZF9wb3NpdGlvbik7CisJCWJoID0gc2JfYnJlYWQoc2IsIHNvbl9udW1iZXIpOworCQlpZiAoIWJoKQogCQkJcmV0dXJuIElPX0VSUk9SOwotCQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHBfc190YikpIHsKLQkJCWRlY3JlbWVudF9iY291bnQocF9zX2JoKTsKLQkJCVBST0NfSU5GT19JTkMocF9zX3NiLCBnZXRfbmVpZ2hib3JzX3Jlc3RhcnRbbl9oXSk7CisJCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIodGIpKSB7CisJCQlicmVsc2UoYmgpOworCQkJUFJPQ19JTkZPX0lOQyhzYiwgZ2V0X25laWdoYm9yc19yZXN0YXJ0W2hdKTsKIAkJCXJldHVybiBSRVBFQVRfU0VBUkNIOwogCQl9Ci0JCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5SW25faF0pOwotCQlwX3NfdGItPlJbbl9oXSA9IHBfc19iaDsKKwkJYnJlbHNlKHRiLT5SW2hdKTsKKwkJdGItPlJbaF0gPSBiaDsKIAotCQlSRkFMU0UoIW5faAotCQkgICAgICAgJiYgQl9GUkVFX1NQQUNFKHBfc19iaCkgIT0KLQkJICAgICAgIE1BWF9DSElMRF9TSVpFKHBfc19iaCkgLQotCQkgICAgICAgZGNfc2l6ZShCX05fQ0hJTEQocF9zX3RiLT5GUlswXSwgbl9jaGlsZF9wb3NpdGlvbikpLAorCQlSRkFMU0UoIWgKKwkJICAgICAgICYmIEJfRlJFRV9TUEFDRShiaCkgIT0KKwkJICAgICAgIE1BWF9DSElMRF9TSVpFKGJoKSAtCisJCSAgICAgICBkY19zaXplKEJfTl9DSElMRCh0Yi0+RlJbMF0sIGNoaWxkX3Bvc2l0aW9uKSksCiAJCSAgICAgICAiUEFQLTgzMDA6IGludmFsaWQgY2hpbGQgc2l6ZSBvZiByaWdodCBuZWlnaGJvciAoJWQgIT0gJWQgLSAlZCkiLAotCQkgICAgICAgQl9GUkVFX1NQQUNFKHBfc19iaCksIE1BWF9DSElMRF9TSVpFKHBfc19iaCksCi0JCSAgICAgICBkY19zaXplKEJfTl9DSElMRChwX3NfdGItPkZSWzBdLCBuX2NoaWxkX3Bvc2l0aW9uKSkpOworCQkgICAgICAgQl9GUkVFX1NQQUNFKGJoKSwgTUFYX0NISUxEX1NJWkUoYmgpLAorCQkgICAgICAgZGNfc2l6ZShCX05fQ0hJTEQodGItPkZSWzBdLCBjaGlsZF9wb3NpdGlvbikpKTsKIAogCX0KIAlyZXR1cm4gQ0FSUllfT047CkBAIC0yMDg4LDUyICsyMDk0LDQ2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKLXN0YXRpYyB2b2lkIHRiX2J1ZmZlcl9zYW5pdHlfY2hlY2soc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCi0JCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfYmgsCitzdGF0aWMgdm9pZCB0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKIAkJCQkgICBjb25zdCBjaGFyICpkZXNjciwgaW50IGxldmVsKQogewotCWlmIChwX3NfYmgpIHsKLQkJaWYgKGF0b21pY19yZWFkKCYocF9zX2JoLT5iX2NvdW50KSkgPD0gMCkgeworCWlmIChiaCkgeworCQlpZiAoYXRvbWljX3JlYWQoJihiaC0+Yl9jb3VudCkpIDw9IDApCiAKLQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCQkgICAgICAgImptYWNkLTE6IHRiX2J1ZmZlcl9zYW5pdHlfY2hlY2soKTogbmVnYXRpdmUgb3IgemVybyByZWZlcmVuY2UgY291bnRlciBmb3IgYnVmZmVyICVzWyVkXSAoJWIpXG4iLAotCQkJCSAgICAgICBkZXNjciwgbGV2ZWwsIHBfc19iaCk7Ci0JCX0KKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAiam1hY2QtMSIsICJuZWdhdGl2ZSBvciB6ZXJvICIKKwkJCQkgICAgICAgInJlZmVyZW5jZSBjb3VudGVyIGZvciBidWZmZXIgJXNbJWRdICIKKwkJCQkgICAgICAgIiglYikiLCBkZXNjciwgbGV2ZWwsIGJoKTsKIAotCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShwX3NfYmgpKSB7Ci0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJICAgICAgICJqbWFjZC0yOiB0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKCk6IGJ1ZmZlciBpcyBub3QgdXAgdG8gZGF0ZSAlc1slZF0gKCViKVxuIiwKLQkJCQkgICAgICAgZGVzY3IsIGxldmVsLCBwX3NfYmgpOwotCQl9CisJCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkKKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAiam1hY2QtMiIsICJidWZmZXIgaXMgbm90IHVwICIKKwkJCQkgICAgICAgInRvIGRhdGUgJXNbJWRdICglYikiLAorCQkJCSAgICAgICBkZXNjciwgbGV2ZWwsIGJoKTsKIAotCQlpZiAoIUJfSVNfSU5fVFJFRShwX3NfYmgpKSB7Ci0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJICAgICAgICJqbWFjZC0zOiB0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKCk6IGJ1ZmZlciBpcyBub3QgaW4gdHJlZSAlc1slZF0gKCViKVxuIiwKLQkJCQkgICAgICAgZGVzY3IsIGxldmVsLCBwX3NfYmgpOwotCQl9CisJCWlmICghQl9JU19JTl9UUkVFKGJoKSkKKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAiam1hY2QtMyIsICJidWZmZXIgaXMgbm90ICIKKwkJCQkgICAgICAgImluIHRyZWUgJXNbJWRdICglYikiLAorCQkJCSAgICAgICBkZXNjciwgbGV2ZWwsIGJoKTsKIAotCQlpZiAocF9zX2JoLT5iX2JkZXYgIT0gcF9zX3NiLT5zX2JkZXYpIHsKLQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCQkgICAgICAgImptYWNkLTQ6IHRiX2J1ZmZlcl9zYW5pdHlfY2hlY2soKTogYnVmZmVyIGhhcyB3cm9uZyBkZXZpY2UgJXNbJWRdICglYilcbiIsCi0JCQkJICAgICAgIGRlc2NyLCBsZXZlbCwgcF9zX2JoKTsKLQkJfQorCQlpZiAoYmgtPmJfYmRldiAhPSBzYi0+c19iZGV2KQorCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJqbWFjZC00IiwgImJ1ZmZlciBoYXMgd3JvbmcgIgorCQkJCSAgICAgICAiZGV2aWNlICVzWyVkXSAoJWIpIiwKKwkJCQkgICAgICAgZGVzY3IsIGxldmVsLCBiaCk7CiAKLQkJaWYgKHBfc19iaC0+Yl9zaXplICE9IHBfc19zYi0+c19ibG9ja3NpemUpIHsKLQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCQkgICAgICAgImptYWNkLTU6IHRiX2J1ZmZlcl9zYW5pdHlfY2hlY2soKTogYnVmZmVyIGhhcyB3cm9uZyBibG9ja3NpemUgJXNbJWRdICglYilcbiIsCi0JCQkJICAgICAgIGRlc2NyLCBsZXZlbCwgcF9zX2JoKTsKLQkJfQorCQlpZiAoYmgtPmJfc2l6ZSAhPSBzYi0+c19ibG9ja3NpemUpCisJCQlyZWlzZXJmc19wYW5pYyhzYiwgImptYWNkLTUiLCAiYnVmZmVyIGhhcyB3cm9uZyAiCisJCQkJICAgICAgICJibG9ja3NpemUgJXNbJWRdICglYikiLAorCQkJCSAgICAgICBkZXNjciwgbGV2ZWwsIGJoKTsKIAotCQlpZiAocF9zX2JoLT5iX2Jsb2NrbnIgPiBTQl9CTE9DS19DT1VOVChwX3Nfc2IpKSB7Ci0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJICAgICAgICJqbWFjZC02OiB0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKCk6IGJ1ZmZlciBibG9jayBudW1iZXIgdG9vIGhpZ2ggJXNbJWRdICglYilcbiIsCi0JCQkJICAgICAgIGRlc2NyLCBsZXZlbCwgcF9zX2JoKTsKLQkJfQorCQlpZiAoYmgtPmJfYmxvY2tuciA+IFNCX0JMT0NLX0NPVU5UKHNiKSkKKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAiam1hY2QtNiIsICJidWZmZXIgYmxvY2sgIgorCQkJCSAgICAgICAibnVtYmVyIHRvbyBoaWdoICVzWyVkXSAoJWIpIiwKKwkJCQkgICAgICAgZGVzY3IsIGxldmVsLCBiaCk7CiAJfQogfQogI2Vsc2UKLXN0YXRpYyB2b2lkIHRiX2J1ZmZlcl9zYW5pdHlfY2hlY2soc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCi0JCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfYmgsCitzdGF0aWMgdm9pZCB0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKIAkJCQkgICBjb25zdCBjaGFyICpkZXNjciwgaW50IGxldmVsKQogezsKIH0KQEAgLTIxNDQsNyArMjE0NCw3IEBACiAJcmV0dXJuIHJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwocywgYmgsIDApOwogfQogCi1zdGF0aWMgaW50IHdhaXRfdGJfYnVmZmVyc191bnRpbF91bmxvY2tlZChzdHJ1Y3QgdHJlZV9iYWxhbmNlICpwX3NfdGIpCitzdGF0aWMgaW50IHdhaXRfdGJfYnVmZmVyc191bnRpbF91bmxvY2tlZChzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YikKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmxvY2tlZDsKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKQEAgLTIxNTYsOTUgKzIxNTYsOTQgQEAKIAogCQlsb2NrZWQgPSBOVUxMOwogCi0JCWZvciAoaSA9IHBfc190Yi0+dGJfcGF0aC0+cGF0aF9sZW5ndGg7CisJCWZvciAoaSA9IHRiLT50Yl9wYXRoLT5wYXRoX2xlbmd0aDsKIAkJICAgICAhbG9ja2VkICYmIGkgPiBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQ7IGktLSkgewotCQkJaWYgKFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3RiLT50Yl9wYXRoLCBpKSkgeworCQkJaWYgKFBBVEhfT0ZGU0VUX1BCVUZGRVIodGItPnRiX3BhdGgsIGkpKSB7CiAJCQkJLyogaWYgSSB1bmRlcnN0YW5kIGNvcnJlY3RseSwgd2UgY2FuIG9ubHkgYmUgc3VyZSB0aGUgbGFzdCBidWZmZXIKIAkJCQkgKiogaW4gdGhlIHBhdGggaXMgaW4gdGhlIHRyZWUgLS1jbG0KIAkJCQkgKi8KICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKLQkJCQlpZiAoUEFUSF9QTEFTVF9CVUZGRVIocF9zX3RiLT50Yl9wYXRoKSA9PQotCQkJCSAgICBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc190Yi0+dGJfcGF0aCwgaSkpIHsKLQkJCQkJdGJfYnVmZmVyX3Nhbml0eV9jaGVjayhwX3NfdGItPnRiX3NiLAorCQkJCWlmIChQQVRIX1BMQVNUX0JVRkZFUih0Yi0+dGJfcGF0aCkgPT0KKwkJCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUih0Yi0+dGJfcGF0aCwgaSkpCisJCQkJCXRiX2J1ZmZlcl9zYW5pdHlfY2hlY2sodGItPnRiX3NiLAogCQkJCQkJCSAgICAgICBQQVRIX09GRlNFVF9QQlVGRkVSCi0JCQkJCQkJICAgICAgIChwX3NfdGItPnRiX3BhdGgsCisJCQkJCQkJICAgICAgICh0Yi0+dGJfcGF0aCwKIAkJCQkJCQkJaSksICJTIiwKLQkJCQkJCQkgICAgICAgcF9zX3RiLT50Yl9wYXRoLT4KKwkJCQkJCQkgICAgICAgdGItPnRiX3BhdGgtPgogCQkJCQkJCSAgICAgICBwYXRoX2xlbmd0aCAtIGkpOwotCQkJCX0KICNlbmRpZgotCQkJCWlmICghY2xlYXJfYWxsX2RpcnR5X2JpdHMocF9zX3RiLT50Yl9zYiwKKwkJCQlpZiAoIWNsZWFyX2FsbF9kaXJ0eV9iaXRzKHRiLT50Yl9zYiwKIAkJCQkJCQkgIFBBVEhfT0ZGU0VUX1BCVUZGRVIKLQkJCQkJCQkgIChwX3NfdGItPnRiX3BhdGgsCisJCQkJCQkJICAodGItPnRiX3BhdGgsCiAJCQkJCQkJICAgaSkpKSB7CiAJCQkJCWxvY2tlZCA9Ci0JCQkJCSAgICBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc190Yi0+dGJfcGF0aCwKKwkJCQkJICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIodGItPnRiX3BhdGgsCiAJCQkJCQkJCWkpOwogCQkJCX0KIAkJCX0KIAkJfQogCi0JCWZvciAoaSA9IDA7ICFsb2NrZWQgJiYgaSA8IE1BWF9IRUlHSFQgJiYgcF9zX3RiLT5pbnNlcnRfc2l6ZVtpXTsKKwkJZm9yIChpID0gMDsgIWxvY2tlZCAmJiBpIDwgTUFYX0hFSUdIVCAmJiB0Yi0+aW5zZXJ0X3NpemVbaV07CiAJCSAgICAgaSsrKSB7CiAKLQkJCWlmIChwX3NfdGItPmxudW1baV0pIHsKKwkJCWlmICh0Yi0+bG51bVtpXSkgewogCi0JCQkJaWYgKHBfc190Yi0+TFtpXSkgewotCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHBfc190Yi0+dGJfc2IsCi0JCQkJCQkJICAgICAgIHBfc190Yi0+TFtpXSwKKwkJCQlpZiAodGItPkxbaV0pIHsKKwkJCQkJdGJfYnVmZmVyX3Nhbml0eV9jaGVjayh0Yi0+dGJfc2IsCisJCQkJCQkJICAgICAgIHRiLT5MW2ldLAogCQkJCQkJCSAgICAgICAiTCIsIGkpOwogCQkJCQlpZiAoIWNsZWFyX2FsbF9kaXJ0eV9iaXRzCi0JCQkJCSAgICAocF9zX3RiLT50Yl9zYiwgcF9zX3RiLT5MW2ldKSkKLQkJCQkJCWxvY2tlZCA9IHBfc190Yi0+TFtpXTsKKwkJCQkJICAgICh0Yi0+dGJfc2IsIHRiLT5MW2ldKSkKKwkJCQkJCWxvY2tlZCA9IHRiLT5MW2ldOwogCQkJCX0KIAotCQkJCWlmICghbG9ja2VkICYmIHBfc190Yi0+RkxbaV0pIHsKLQkJCQkJdGJfYnVmZmVyX3Nhbml0eV9jaGVjayhwX3NfdGItPnRiX3NiLAotCQkJCQkJCSAgICAgICBwX3NfdGItPkZMW2ldLAorCQkJCWlmICghbG9ja2VkICYmIHRiLT5GTFtpXSkgeworCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHRiLT50Yl9zYiwKKwkJCQkJCQkgICAgICAgdGItPkZMW2ldLAogCQkJCQkJCSAgICAgICAiRkwiLCBpKTsKIAkJCQkJaWYgKCFjbGVhcl9hbGxfZGlydHlfYml0cwotCQkJCQkgICAgKHBfc190Yi0+dGJfc2IsIHBfc190Yi0+RkxbaV0pKQotCQkJCQkJbG9ja2VkID0gcF9zX3RiLT5GTFtpXTsKKwkJCQkJICAgICh0Yi0+dGJfc2IsIHRiLT5GTFtpXSkpCisJCQkJCQlsb2NrZWQgPSB0Yi0+RkxbaV07CiAJCQkJfQogCi0JCQkJaWYgKCFsb2NrZWQgJiYgcF9zX3RiLT5DRkxbaV0pIHsKLQkJCQkJdGJfYnVmZmVyX3Nhbml0eV9jaGVjayhwX3NfdGItPnRiX3NiLAotCQkJCQkJCSAgICAgICBwX3NfdGItPkNGTFtpXSwKKwkJCQlpZiAoIWxvY2tlZCAmJiB0Yi0+Q0ZMW2ldKSB7CisJCQkJCXRiX2J1ZmZlcl9zYW5pdHlfY2hlY2sodGItPnRiX3NiLAorCQkJCQkJCSAgICAgICB0Yi0+Q0ZMW2ldLAogCQkJCQkJCSAgICAgICAiQ0ZMIiwgaSk7CiAJCQkJCWlmICghY2xlYXJfYWxsX2RpcnR5X2JpdHMKLQkJCQkJICAgIChwX3NfdGItPnRiX3NiLCBwX3NfdGItPkNGTFtpXSkpCi0JCQkJCQlsb2NrZWQgPSBwX3NfdGItPkNGTFtpXTsKKwkJCQkJICAgICh0Yi0+dGJfc2IsIHRiLT5DRkxbaV0pKQorCQkJCQkJbG9ja2VkID0gdGItPkNGTFtpXTsKIAkJCQl9CiAKIAkJCX0KIAotCQkJaWYgKCFsb2NrZWQgJiYgKHBfc190Yi0+cm51bVtpXSkpIHsKKwkJCWlmICghbG9ja2VkICYmICh0Yi0+cm51bVtpXSkpIHsKIAotCQkJCWlmIChwX3NfdGItPlJbaV0pIHsKLQkJCQkJdGJfYnVmZmVyX3Nhbml0eV9jaGVjayhwX3NfdGItPnRiX3NiLAotCQkJCQkJCSAgICAgICBwX3NfdGItPlJbaV0sCisJCQkJaWYgKHRiLT5SW2ldKSB7CisJCQkJCXRiX2J1ZmZlcl9zYW5pdHlfY2hlY2sodGItPnRiX3NiLAorCQkJCQkJCSAgICAgICB0Yi0+UltpXSwKIAkJCQkJCQkgICAgICAgIlIiLCBpKTsKIAkJCQkJaWYgKCFjbGVhcl9hbGxfZGlydHlfYml0cwotCQkJCQkgICAgKHBfc190Yi0+dGJfc2IsIHBfc190Yi0+UltpXSkpCi0JCQkJCQlsb2NrZWQgPSBwX3NfdGItPlJbaV07CisJCQkJCSAgICAodGItPnRiX3NiLCB0Yi0+UltpXSkpCisJCQkJCQlsb2NrZWQgPSB0Yi0+UltpXTsKIAkJCQl9CiAKLQkJCQlpZiAoIWxvY2tlZCAmJiBwX3NfdGItPkZSW2ldKSB7Ci0JCQkJCXRiX2J1ZmZlcl9zYW5pdHlfY2hlY2socF9zX3RiLT50Yl9zYiwKLQkJCQkJCQkgICAgICAgcF9zX3RiLT5GUltpXSwKKwkJCQlpZiAoIWxvY2tlZCAmJiB0Yi0+RlJbaV0pIHsKKwkJCQkJdGJfYnVmZmVyX3Nhbml0eV9jaGVjayh0Yi0+dGJfc2IsCisJCQkJCQkJICAgICAgIHRiLT5GUltpXSwKIAkJCQkJCQkgICAgICAgIkZSIiwgaSk7CiAJCQkJCWlmICghY2xlYXJfYWxsX2RpcnR5X2JpdHMKLQkJCQkJICAgIChwX3NfdGItPnRiX3NiLCBwX3NfdGItPkZSW2ldKSkKLQkJCQkJCWxvY2tlZCA9IHBfc190Yi0+RlJbaV07CisJCQkJCSAgICAodGItPnRiX3NiLCB0Yi0+RlJbaV0pKQorCQkJCQkJbG9ja2VkID0gdGItPkZSW2ldOwogCQkJCX0KIAotCQkJCWlmICghbG9ja2VkICYmIHBfc190Yi0+Q0ZSW2ldKSB7Ci0JCQkJCXRiX2J1ZmZlcl9zYW5pdHlfY2hlY2socF9zX3RiLT50Yl9zYiwKLQkJCQkJCQkgICAgICAgcF9zX3RiLT5DRlJbaV0sCisJCQkJaWYgKCFsb2NrZWQgJiYgdGItPkNGUltpXSkgeworCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHRiLT50Yl9zYiwKKwkJCQkJCQkgICAgICAgdGItPkNGUltpXSwKIAkJCQkJCQkgICAgICAgIkNGUiIsIGkpOwogCQkJCQlpZiAoIWNsZWFyX2FsbF9kaXJ0eV9iaXRzCi0JCQkJCSAgICAocF9zX3RiLT50Yl9zYiwgcF9zX3RiLT5DRlJbaV0pKQotCQkJCQkJbG9ja2VkID0gcF9zX3RiLT5DRlJbaV07CisJCQkJCSAgICAodGItPnRiX3NiLCB0Yi0+Q0ZSW2ldKSkKKwkJCQkJCWxvY2tlZCA9IHRiLT5DRlJbaV07CiAJCQkJfQogCQkJfQogCQl9CkBAIC0yMjU3LDEwICsyMjU2LDEwIEBACiAJCSAqKiAtLWNsbQogCQkgKi8KIAkJZm9yIChpID0gMDsgIWxvY2tlZCAmJiBpIDwgTUFYX0ZFQl9TSVpFOyBpKyspIHsKLQkJCWlmIChwX3NfdGItPkZFQltpXSkgeworCQkJaWYgKHRiLT5GRUJbaV0pIHsKIAkJCQlpZiAoIWNsZWFyX2FsbF9kaXJ0eV9iaXRzCi0JCQkJICAgIChwX3NfdGItPnRiX3NiLCBwX3NfdGItPkZFQltpXSkpCi0JCQkJCWxvY2tlZCA9IHBfc190Yi0+RkVCW2ldOworCQkJCSAgICAodGItPnRiX3NiLCB0Yi0+RkVCW2ldKSkKKwkJCQkJbG9ja2VkID0gdGItPkZFQltpXTsKIAkJCX0KIAkJfQogCkBAIC0yMjY4LDIxICsyMjY3LDIwIEBACiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCiAJCQlyZXBlYXRfY291bnRlcisrOwogCQkJaWYgKChyZXBlYXRfY291bnRlciAlIDEwMDAwKSA9PSAwKSB7Ci0JCQkJcmVpc2VyZnNfd2FybmluZyhwX3NfdGItPnRiX3NiLAotCQkJCQkJICJ3YWl0X3RiX2J1ZmZlcnNfdW50aWxfcmVsZWFzZWQoKTogdG9vIG1hbnkgIgotCQkJCQkJICJpdGVyYXRpb25zIHdhaXRpbmcgZm9yIGJ1ZmZlciB0byB1bmxvY2sgIgorCQkJCXJlaXNlcmZzX3dhcm5pbmcodGItPnRiX3NiLCAicmVpc2VyZnMtODIwMCIsCisJCQkJCQkgInRvbyBtYW55IGl0ZXJhdGlvbnMgd2FpdGluZyAiCisJCQkJCQkgImZvciBidWZmZXIgdG8gdW5sb2NrICIKIAkJCQkJCSAiKCViKSIsIGxvY2tlZCk7CiAKIAkJCQkvKiBEb24ndCBsb29wIGZvcmV2ZXIuICBUcnkgdG8gcmVjb3ZlciBmcm9tIHBvc3NpYmxlIGVycm9yLiAqLwogCi0JCQkJcmV0dXJuIChGSUxFU1lTVEVNX0NIQU5HRURfVEIocF9zX3RiKSkgPworCQkJCXJldHVybiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHRiKSkgPwogCQkJCSAgICBSRVBFQVRfU0VBUkNIIDogQ0FSUllfT047CiAJCQl9CiAjZW5kaWYKIAkJCV9fd2FpdF9vbl9idWZmZXIobG9ja2VkKTsKLQkJCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIocF9zX3RiKSkgeworCQkJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQih0YikpCiAJCQkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7Ci0JCQl9CiAJCX0KIAogCX0gd2hpbGUgKGxvY2tlZCk7CkBAIC0yMjk1LDE1ICsyMjkzLDE1IEBACiAgKglhbmFseXplIHdoYXQgYW5kIHdoZXJlIHNob3VsZCBiZSBtb3ZlZDsKICAqCWdldCBzdWZmaWNpZW50IG51bWJlciBvZiBuZXcgbm9kZXM7CiAgKiBCYWxhbmNpbmcgd2lsbCBzdGFydCBvbmx5IGFmdGVyIGFsbCByZXNvdXJjZXMgd2lsbCBiZSBjb2xsZWN0ZWQgYXQgYSB0aW1lLgotICogCisgKgogICogV2hlbiBwb3J0ZWQgdG8gU01QIGtlcm5lbHMsIG9ubHkgYXQgdGhlIGxhc3QgbW9tZW50IGFmdGVyIGFsbCBuZWVkZWQgbm9kZXMKICAqIGFyZSBjb2xsZWN0ZWQgaW4gY2FjaGUsIHdpbGwgdGhlIHJlc291cmNlcyBiZSBsb2NrZWQgdXNpbmcgdGhlIHVzdWFsCiAgKiB0ZXh0Ym9vayBvcmRlcmVkIGxvY2sgYWNxdWlzaXRpb24gYWxnb3JpdGhtcy4gIE5vdGUgdGhhdCBlbnN1cmluZyB0aGF0CiAgKiB0aGlzIGNvZGUgbmVpdGhlciB3cml0ZSBsb2NrcyB3aGF0IGl0IGRvZXMgbm90IG5lZWQgdG8gd3JpdGUgbG9jayBub3IgbG9ja3Mgb3V0IG9mIG9yZGVyCiAgKiB3aWxsIGJlIGEgcGFpbiBpbiB0aGUgYnV0dCB0aGF0IGNvdWxkIGhhdmUgYmVlbiBhdm9pZGVkLiAgR3J1bWJsZSBncnVtYmxlLiAtSGFucwotICogCisgKgogICogZml4IGlzIG1lYW50IGluIHRoZSBzZW5zZSBvZiByZW5kZXIgdW5jaGFuZ2luZwotICogCisgKgogICogTGF0ZW5jeSBtaWdodCBiZSBpbXByb3ZlZCBieSBmaXJzdCBnYXRoZXJpbmcgYSBsaXN0IG9mIHdoYXQgYnVmZmVycyBhcmUgbmVlZGVkCiAgKiBhbmQgdGhlbiBnZXR0aW5nIGFzIG1hbnkgb2YgdGhlbSBpbiBwYXJhbGxlbCBhcyBwb3NzaWJsZT8gLUhhbnMKICAqCkBAIC0yMzEyLDE1OSArMjMxMCwxNjAgQEAKICAqCXRiCXRyZWVfYmFsYW5jZSBzdHJ1Y3R1cmU7CiAgKglpbnVtCWl0ZW0gbnVtYmVyIGluIFNbaF07CiAgKiAgICAgIHBvc19pbl9pdGVtIC0gY29tbWVudCB0aGlzIGlmIHlvdSBjYW4KLSAqICAgICAgaW5zX2loICYgaW5zX3NkIGFyZSB1c2VkIHdoZW4gaW5zZXJ0aW5nCisgKiAgICAgIGluc19paAlpdGVtIGhlYWQgb2YgaXRlbSBiZWluZyBpbnNlcnRlZAorICoJZGF0YQlpbnNlcnRlZCBpdGVtIG9yIGRhdGEgdG8gYmUgcGFzdGVkCiAgKiBSZXR1cm5zOgkxIC0gc2NoZWR1bGUgb2NjdXJyZWQgd2hpbGUgdGhlIGZ1bmN0aW9uIHdvcmtlZDsKICAqCSAgICAgICAgMCAtIHNjaGVkdWxlIGRpZG4ndCBvY2N1ciB3aGlsZSB0aGUgZnVuY3Rpb24gd29ya2VkOwotICogICAgICAgICAgICAgLTEgLSBpZiBub19kaXNrX3NwYWNlIAorICogICAgICAgICAgICAgLTEgLSBpZiBub19kaXNrX3NwYWNlCiAgKi8KIAotaW50IGZpeF9ub2RlcyhpbnQgbl9vcF9tb2RlLCBzdHJ1Y3QgdHJlZV9iYWxhbmNlICpwX3NfdGIsIHN0cnVjdCBpdGVtX2hlYWQgKnBfc19pbnNfaWgsCS8vIGl0ZW0gaGVhZCBvZiBpdGVtIGJlaW5nIGluc2VydGVkCi0JICAgICAgY29uc3Qgdm9pZCAqZGF0YQkvLyBpbnNlcnRlZCBpdGVtIG9yIGRhdGEgdG8gYmUgcGFzdGVkCi0gICAgKQoraW50IGZpeF9ub2RlcyhpbnQgb3BfbW9kZSwgc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsCisJICAgICAgc3RydWN0IGl0ZW1faGVhZCAqaW5zX2loLCBjb25zdCB2b2lkICpkYXRhKQogewotCWludCBuX3JldF92YWx1ZSwgbl9oLCBuX2l0ZW1fbnVtID0gUEFUSF9MQVNUX1BPU0lUSU9OKHBfc190Yi0+dGJfcGF0aCk7Ci0JaW50IG5fcG9zX2luX2l0ZW07CisJaW50IHJldCwgaCwgaXRlbV9udW0gPSBQQVRIX0xBU1RfUE9TSVRJT04odGItPnRiX3BhdGgpOworCWludCBwb3NfaW5faXRlbTsKIAogCS8qIHdlIHNldCB3YWl0X3RiX2J1ZmZlcnNfcnVuIHdoZW4gd2UgaGF2ZSB0byByZXN0b3JlIGFueSBkaXJ0eSBiaXRzIGNsZWFyZWQKIAkgKiogZHVyaW5nIHdhaXRfdGJfYnVmZmVyc19ydW4KIAkgKi8KIAlpbnQgd2FpdF90Yl9idWZmZXJzX3J1biA9IDA7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfdGJTMCA9IFBBVEhfUExBU1RfQlVGRkVSKHBfc190Yi0+dGJfcGF0aCk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICp0YlMwID0gUEFUSF9QTEFTVF9CVUZGRVIodGItPnRiX3BhdGgpOwogCi0JKytSRUlTRVJGU19TQihwX3NfdGItPnRiX3NiKS0+c19maXhfbm9kZXM7CisJKytSRUlTRVJGU19TQih0Yi0+dGJfc2IpLT5zX2ZpeF9ub2RlczsKIAotCW5fcG9zX2luX2l0ZW0gPSBwX3NfdGItPnRiX3BhdGgtPnBvc19pbl9pdGVtOworCXBvc19pbl9pdGVtID0gdGItPnRiX3BhdGgtPnBvc19pbl9pdGVtOwogCi0JcF9zX3RiLT5mc19nZW4gPSBnZXRfZ2VuZXJhdGlvbihwX3NfdGItPnRiX3NiKTsKKwl0Yi0+ZnNfZ2VuID0gZ2V0X2dlbmVyYXRpb24odGItPnRiX3NiKTsKIAogCS8qIHdlIHByZXBhcmUgYW5kIGxvZyB0aGUgc3VwZXIgaGVyZSBzbyBpdCB3aWxsIGFscmVhZHkgYmUgaW4gdGhlCiAJICoqIHRyYW5zYWN0aW9uIHdoZW4gZG9fYmFsYW5jZSBuZWVkcyB0byBjaGFuZ2UgaXQuCiAJICoqIFRoaXMgd2F5IGRvX2JhbGFuY2Ugd29uJ3QgaGF2ZSB0byBzY2hlZHVsZSB3aGVuIHRyeWluZyB0byBwcmVwYXJlCiAJICoqIHRoZSBzdXBlciBmb3IgbG9nZ2luZwogCSAqLwotCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwocF9zX3RiLT50Yl9zYiwKLQkJCQkgICAgIFNCX0JVRkZFUl9XSVRIX1NCKHBfc190Yi0+dGJfc2IpLCAxKTsKLQlqb3VybmFsX21hcmtfZGlydHkocF9zX3RiLT50cmFuc2FjdGlvbl9oYW5kbGUsIHBfc190Yi0+dGJfc2IsCi0JCQkgICBTQl9CVUZGRVJfV0lUSF9TQihwX3NfdGItPnRiX3NiKSk7Ci0JaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQihwX3NfdGIpKQorCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwodGItPnRiX3NiLAorCQkJCSAgICAgU0JfQlVGRkVSX1dJVEhfU0IodGItPnRiX3NiKSwgMSk7CisJam91cm5hbF9tYXJrX2RpcnR5KHRiLT50cmFuc2FjdGlvbl9oYW5kbGUsIHRiLT50Yl9zYiwKKwkJCSAgIFNCX0JVRkZFUl9XSVRIX1NCKHRiLT50Yl9zYikpOworCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIodGIpKQogCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsKIAogCS8qIGlmIGl0IHBvc3NpYmxlIGluIGluZGlyZWN0X3RvX2RpcmVjdCBjb252ZXJzaW9uICovCi0JaWYgKGJ1ZmZlcl9sb2NrZWQocF9zX3RiUzApKSB7Ci0JCV9fd2FpdF9vbl9idWZmZXIocF9zX3RiUzApOwotCQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHBfc190YikpCisJaWYgKGJ1ZmZlcl9sb2NrZWQodGJTMCkpIHsKKwkJX193YWl0X29uX2J1ZmZlcih0YlMwKTsKKwkJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQih0YikpCiAJCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsKIAl9CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCiAJaWYgKGN1cl90YikgewogCQlwcmludF9jdXJfdGIoImZpeF9ub2RlcyIpOwotCQlyZWlzZXJmc19wYW5pYyhwX3NfdGItPnRiX3NiLAotCQkJICAgICAgICJQQVAtODMwNTogZml4X25vZGVzOiAgdGhlcmUgaXMgcGVuZGluZyBkb19iYWxhbmNlIik7CisJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgIlBBUC04MzA1IiwKKwkJCSAgICAgICAidGhlcmUgaXMgcGVuZGluZyBkb19iYWxhbmNlIik7CiAJfQogCi0JaWYgKCFidWZmZXJfdXB0b2RhdGUocF9zX3RiUzApIHx8ICFCX0lTX0lOX1RSRUUocF9zX3RiUzApKSB7Ci0JCXJlaXNlcmZzX3BhbmljKHBfc190Yi0+dGJfc2IsCi0JCQkgICAgICAgIlBBUC04MzIwOiBmaXhfbm9kZXM6IFNbMF0gKCViICV6KSBpcyBub3QgdXB0b2RhdGUgIgotCQkJICAgICAgICJhdCB0aGUgYmVnaW5uaW5nIG9mIGZpeF9ub2RlcyBvciBub3QgaW4gdHJlZSAobW9kZSAlYykiLAotCQkJICAgICAgIHBfc190YlMwLCBwX3NfdGJTMCwgbl9vcF9tb2RlKTsKLQl9CisJaWYgKCFidWZmZXJfdXB0b2RhdGUodGJTMCkgfHwgIUJfSVNfSU5fVFJFRSh0YlMwKSkKKwkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiUEFQLTgzMjAiLCAiU1swXSAoJWIgJXopIGlzICIKKwkJCSAgICAgICAibm90IHVwdG9kYXRlIGF0IHRoZSBiZWdpbm5pbmcgb2YgZml4X25vZGVzICIKKwkJCSAgICAgICAib3Igbm90IGluIHRyZWUgKG1vZGUgJWMpIiwKKwkJCSAgICAgICB0YlMwLCB0YlMwLCBvcF9tb2RlKTsKIAogCS8qIENoZWNrIHBhcmFtZXRlcnMuICovCi0Jc3dpdGNoIChuX29wX21vZGUpIHsKKwlzd2l0Y2ggKG9wX21vZGUpIHsKIAljYXNlIE1fSU5TRVJUOgotCQlpZiAobl9pdGVtX251bSA8PSAwIHx8IG5faXRlbV9udW0gPiBCX05SX0lURU1TKHBfc190YlMwKSkKLQkJCXJlaXNlcmZzX3BhbmljKHBfc190Yi0+dGJfc2IsCi0JCQkJICAgICAgICJQQVAtODMzMDogZml4X25vZGVzOiBJbmNvcnJlY3QgaXRlbSBudW1iZXIgJWQgKGluIFMwIC0gJWQpIGluIGNhc2Ugb2YgaW5zZXJ0IiwKLQkJCQkgICAgICAgbl9pdGVtX251bSwgQl9OUl9JVEVNUyhwX3NfdGJTMCkpOworCQlpZiAoaXRlbV9udW0gPD0gMCB8fCBpdGVtX251bSA+IEJfTlJfSVRFTVModGJTMCkpCisJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJQQVAtODMzMCIsICJJbmNvcnJlY3QgIgorCQkJCSAgICAgICAiaXRlbSBudW1iZXIgJWQgKGluIFMwIC0gJWQpIGluIGNhc2UgIgorCQkJCSAgICAgICAib2YgaW5zZXJ0IiwgaXRlbV9udW0sCisJCQkJICAgICAgIEJfTlJfSVRFTVModGJTMCkpOwogCQlicmVhazsKIAljYXNlIE1fUEFTVEU6CiAJY2FzZSBNX0RFTEVURToKIAljYXNlIE1fQ1VUOgotCQlpZiAobl9pdGVtX251bSA8IDAgfHwgbl9pdGVtX251bSA+PSBCX05SX0lURU1TKHBfc190YlMwKSkgewotCQkJcHJpbnRfYmxvY2socF9zX3RiUzAsIDAsIC0xLCAtMSk7Ci0JCQlyZWlzZXJmc19wYW5pYyhwX3NfdGItPnRiX3NiLAotCQkJCSAgICAgICAiUEFQLTgzMzU6IGZpeF9ub2RlczogSW5jb3JyZWN0IGl0ZW0gbnVtYmVyKCVkKTsgbW9kZSA9ICVjIGluc2VydF9zaXplID0gJWRcbiIsCi0JCQkJICAgICAgIG5faXRlbV9udW0sIG5fb3BfbW9kZSwKLQkJCQkgICAgICAgcF9zX3RiLT5pbnNlcnRfc2l6ZVswXSk7CisJCWlmIChpdGVtX251bSA8IDAgfHwgaXRlbV9udW0gPj0gQl9OUl9JVEVNUyh0YlMwKSkgeworCQkJcHJpbnRfYmxvY2sodGJTMCwgMCwgLTEsIC0xKTsKKwkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgIlBBUC04MzM1IiwgIkluY29ycmVjdCAiCisJCQkJICAgICAgICJpdGVtIG51bWJlciglZCk7IG1vZGUgPSAlYyAiCisJCQkJICAgICAgICJpbnNlcnRfc2l6ZSA9ICVkIiwKKwkJCQkgICAgICAgaXRlbV9udW0sIG9wX21vZGUsCisJCQkJICAgICAgIHRiLT5pbnNlcnRfc2l6ZVswXSk7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmVpc2VyZnNfcGFuaWMocF9zX3RiLT50Yl9zYiwKLQkJCSAgICAgICAiUEFQLTgzNDA6IGZpeF9ub2RlczogSW5jb3JyZWN0IG1vZGUgb2Ygb3BlcmF0aW9uIik7CisJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgIlBBUC04MzQwIiwgIkluY29ycmVjdCBtb2RlICIKKwkJCSAgICAgICAib2Ygb3BlcmF0aW9uIik7CiAJfQogI2VuZGlmCiAKLQlpZiAoZ2V0X21lbV9mb3JfdmlydHVhbF9ub2RlKHBfc190YikgPT0gUkVQRUFUX1NFQVJDSCkKKwlpZiAoZ2V0X21lbV9mb3JfdmlydHVhbF9ub2RlKHRiKSA9PSBSRVBFQVRfU0VBUkNIKQogCQkvLyBGSVhNRTogbWF5YmUgLUVOT01FTSB3aGVuIHRiLT52bl9idWYgPT0gMD8gTm93IGp1c3QgcmVwZWF0CiAJCXJldHVybiBSRVBFQVRfU0VBUkNIOwogCi0JLyogU3RhcnRpbmcgZnJvbSB0aGUgbGVhZiBsZXZlbDsgZm9yIGFsbCBsZXZlbHMgbl9oIG9mIHRoZSB0cmVlLiAqLwotCWZvciAobl9oID0gMDsgbl9oIDwgTUFYX0hFSUdIVCAmJiBwX3NfdGItPmluc2VydF9zaXplW25faF07IG5faCsrKSB7Ci0JCWlmICgobl9yZXRfdmFsdWUgPSBnZXRfZGlyZWN0X3BhcmVudChwX3NfdGIsIG5faCkpICE9IENBUlJZX09OKSB7CisJLyogU3RhcnRpbmcgZnJvbSB0aGUgbGVhZiBsZXZlbDsgZm9yIGFsbCBsZXZlbHMgaCBvZiB0aGUgdHJlZS4gKi8KKwlmb3IgKGggPSAwOyBoIDwgTUFYX0hFSUdIVCAmJiB0Yi0+aW5zZXJ0X3NpemVbaF07IGgrKykgeworCQlyZXQgPSBnZXRfZGlyZWN0X3BhcmVudCh0YiwgaCk7CisJCWlmIChyZXQgIT0gQ0FSUllfT04pCiAJCQlnb3RvIHJlcGVhdDsKLQkJfQogCi0JCWlmICgobl9yZXRfdmFsdWUgPQotCQkgICAgIGNoZWNrX2JhbGFuY2Uobl9vcF9tb2RlLCBwX3NfdGIsIG5faCwgbl9pdGVtX251bSwKLQkJCQkgICBuX3Bvc19pbl9pdGVtLCBwX3NfaW5zX2loLAotCQkJCSAgIGRhdGEpKSAhPSBDQVJSWV9PTikgewotCQkJaWYgKG5fcmV0X3ZhbHVlID09IE5PX0JBTEFOQ0lOR19ORUVERUQpIHsKKwkJcmV0ID0gY2hlY2tfYmFsYW5jZShvcF9tb2RlLCB0YiwgaCwgaXRlbV9udW0sCisJCQkJICAgIHBvc19pbl9pdGVtLCBpbnNfaWgsIGRhdGEpOworCQlpZiAocmV0ICE9IENBUlJZX09OKSB7CisJCQlpZiAocmV0ID09IE5PX0JBTEFOQ0lOR19ORUVERUQpIHsKIAkJCQkvKiBObyBiYWxhbmNpbmcgZm9yIGhpZ2hlciBsZXZlbHMgbmVlZGVkLiAqLwotCQkJCWlmICgobl9yZXRfdmFsdWUgPQotCQkJCSAgICAgZ2V0X25laWdoYm9ycyhwX3NfdGIsIG5faCkpICE9IENBUlJZX09OKSB7CisJCQkJcmV0ID0gZ2V0X25laWdoYm9ycyh0YiwgaCk7CisJCQkJaWYgKHJldCAhPSBDQVJSWV9PTikKIAkJCQkJZ290byByZXBlYXQ7Ci0JCQkJfQotCQkJCWlmIChuX2ggIT0gTUFYX0hFSUdIVCAtIDEpCi0JCQkJCXBfc190Yi0+aW5zZXJ0X3NpemVbbl9oICsgMV0gPSAwOworCQkJCWlmIChoICE9IE1BWF9IRUlHSFQgLSAxKQorCQkJCQl0Yi0+aW5zZXJ0X3NpemVbaCArIDFdID0gMDsKIAkJCQkvKiBvaywgYW5hbHlzaXMgYW5kIHJlc291cmNlIGdhdGhlcmluZyBhcmUgY29tcGxldGUgKi8KIAkJCQlicmVhazsKIAkJCX0KIAkJCWdvdG8gcmVwZWF0OwogCQl9CiAKLQkJaWYgKChuX3JldF92YWx1ZSA9IGdldF9uZWlnaGJvcnMocF9zX3RiLCBuX2gpKSAhPSBDQVJSWV9PTikgeworCQlyZXQgPSBnZXRfbmVpZ2hib3JzKHRiLCBoKTsKKwkJaWYgKHJldCAhPSBDQVJSWV9PTikKIAkJCWdvdG8gcmVwZWF0OwotCQl9CiAKLQkJaWYgKChuX3JldF92YWx1ZSA9IGdldF9lbXB0eV9ub2RlcyhwX3NfdGIsIG5faCkpICE9IENBUlJZX09OKSB7Ci0JCQlnb3RvIHJlcGVhdDsJLyogTm8gZGlzayBzcGFjZSwgb3Igc2NoZWR1bGUgb2NjdXJyZWQgYW5kCi0JCQkJCSAgIGFuYWx5c2lzIG1heSBiZSBpbnZhbGlkIGFuZCBuZWVkcyB0byBiZSByZWRvbmUuICovCi0JCX0KKwkJLyogTm8gZGlzayBzcGFjZSwgb3Igc2NoZWR1bGUgb2NjdXJyZWQgYW5kIGFuYWx5c2lzIG1heSBiZQorCQkgKiBpbnZhbGlkIGFuZCBuZWVkcyB0byBiZSByZWRvbmUuICovCisJCXJldCA9IGdldF9lbXB0eV9ub2Rlcyh0YiwgaCk7CisJCWlmIChyZXQgIT0gQ0FSUllfT04pCisJCQlnb3RvIHJlcGVhdDsKIAotCQlpZiAoIVBBVEhfSF9QQlVGRkVSKHBfc190Yi0+dGJfcGF0aCwgbl9oKSkgeworCQlpZiAoIVBBVEhfSF9QQlVGRkVSKHRiLT50Yl9wYXRoLCBoKSkgewogCQkJLyogV2UgaGF2ZSBhIHBvc2l0aXZlIGluc2VydCBzaXplIGJ1dCBubyBub2RlcyBleGlzdCBvbiB0aGlzCiAJCQkgICBsZXZlbCwgdGhpcyBtZWFucyB0aGF0IHdlIGFyZSBjcmVhdGluZyBhIG5ldyByb290LiAqLwogCi0JCQlSRkFMU0UocF9zX3RiLT5ibGtudW1bbl9oXSAhPSAxLAorCQkJUkZBTFNFKHRiLT5ibGtudW1baF0gIT0gMSwKIAkJCSAgICAgICAiUEFQLTgzNTA6IGNyZWF0aW5nIG5ldyBlbXB0eSByb290Iik7CiAKLQkJCWlmIChuX2ggPCBNQVhfSEVJR0hUIC0gMSkKLQkJCQlwX3NfdGItPmluc2VydF9zaXplW25faCArIDFdID0gMDsKLQkJfSBlbHNlIGlmICghUEFUSF9IX1BCVUZGRVIocF9zX3RiLT50Yl9wYXRoLCBuX2ggKyAxKSkgewotCQkJaWYgKHBfc190Yi0+YmxrbnVtW25faF0gPiAxKSB7Ci0JCQkJLyogVGhlIHRyZWUgbmVlZHMgdG8gYmUgZ3Jvd24sIHNvIHRoaXMgbm9kZSBTW25faF0KKwkJCWlmIChoIDwgTUFYX0hFSUdIVCAtIDEpCisJCQkJdGItPmluc2VydF9zaXplW2ggKyAxXSA9IDA7CisJCX0gZWxzZSBpZiAoIVBBVEhfSF9QQlVGRkVSKHRiLT50Yl9wYXRoLCBoICsgMSkpIHsKKwkJCWlmICh0Yi0+YmxrbnVtW2hdID4gMSkgeworCQkJCS8qIFRoZSB0cmVlIG5lZWRzIHRvIGJlIGdyb3duLCBzbyB0aGlzIG5vZGUgU1toXQogCQkJCSAgIHdoaWNoIGlzIHRoZSByb290IG5vZGUgaXMgc3BsaXQgaW50byB0d28gbm9kZXMsCi0JCQkJICAgYW5kIGEgbmV3IG5vZGUgKFNbbl9oKzFdKSB3aWxsIGJlIGNyZWF0ZWQgdG8KKwkJCQkgICBhbmQgYSBuZXcgbm9kZSAoU1toKzFdKSB3aWxsIGJlIGNyZWF0ZWQgdG8KIAkJCQkgICBiZWNvbWUgdGhlIHJvb3Qgbm9kZS4gICovCiAKLQkJCQlSRkFMU0Uobl9oID09IE1BWF9IRUlHSFQgLSAxLAorCQkJCVJGQUxTRShoID09IE1BWF9IRUlHSFQgLSAxLAogCQkJCSAgICAgICAiUEFQLTgzNTU6IGF0dGVtcHQgdG8gY3JlYXRlIHRvbyBoaWdoIG9mIGEgdHJlZSIpOwogCi0JCQkJcF9zX3RiLT5pbnNlcnRfc2l6ZVtuX2ggKyAxXSA9CisJCQkJdGItPmluc2VydF9zaXplW2ggKyAxXSA9CiAJCQkJICAgIChEQ19TSVpFICsKLQkJCQkgICAgIEtFWV9TSVpFKSAqIChwX3NfdGItPmJsa251bVtuX2hdIC0gMSkgKworCQkJCSAgICAgS0VZX1NJWkUpICogKHRiLT5ibGtudW1baF0gLSAxKSArCiAJCQkJICAgIERDX1NJWkU7Ci0JCQl9IGVsc2UgaWYgKG5faCA8IE1BWF9IRUlHSFQgLSAxKQotCQkJCXBfc190Yi0+aW5zZXJ0X3NpemVbbl9oICsgMV0gPSAwOworCQkJfSBlbHNlIGlmIChoIDwgTUFYX0hFSUdIVCAtIDEpCisJCQkJdGItPmluc2VydF9zaXplW2ggKyAxXSA9IDA7CiAJCX0gZWxzZQotCQkJcF9zX3RiLT5pbnNlcnRfc2l6ZVtuX2ggKyAxXSA9Ci0JCQkgICAgKERDX1NJWkUgKyBLRVlfU0laRSkgKiAocF9zX3RiLT5ibGtudW1bbl9oXSAtIDEpOworCQkJdGItPmluc2VydF9zaXplW2ggKyAxXSA9CisJCQkgICAgKERDX1NJWkUgKyBLRVlfU0laRSkgKiAodGItPmJsa251bVtoXSAtIDEpOwogCX0KIAotCWlmICgobl9yZXRfdmFsdWUgPSB3YWl0X3RiX2J1ZmZlcnNfdW50aWxfdW5sb2NrZWQocF9zX3RiKSkgPT0gQ0FSUllfT04pIHsKLQkJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQihwX3NfdGIpKSB7CisJcmV0ID0gd2FpdF90Yl9idWZmZXJzX3VudGlsX3VubG9ja2VkKHRiKTsKKwlpZiAocmV0ID09IENBUlJZX09OKSB7CisJCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIodGIpKSB7CiAJCQl3YWl0X3RiX2J1ZmZlcnNfcnVuID0gMTsKLQkJCW5fcmV0X3ZhbHVlID0gUkVQRUFUX1NFQVJDSDsKKwkJCXJldCA9IFJFUEVBVF9TRUFSQ0g7CiAJCQlnb3RvIHJlcGVhdDsKIAkJfSBlbHNlIHsKIAkJCXJldHVybiBDQVJSWV9PTjsKQEAgLTI0ODUsNTcgKzI0ODQsNTcgQEAKIAogCQkvKiBSZWxlYXNlIHBhdGggYnVmZmVycy4gKi8KIAkJaWYgKHdhaXRfdGJfYnVmZmVyc19ydW4pIHsKLQkJCXBhdGhyZWxzZV9hbmRfcmVzdG9yZShwX3NfdGItPnRiX3NiLCBwX3NfdGItPnRiX3BhdGgpOworCQkJcGF0aHJlbHNlX2FuZF9yZXN0b3JlKHRiLT50Yl9zYiwgdGItPnRiX3BhdGgpOwogCQl9IGVsc2UgewotCQkJcGF0aHJlbHNlKHBfc190Yi0+dGJfcGF0aCk7CisJCQlwYXRocmVsc2UodGItPnRiX3BhdGgpOwogCQl9CiAJCS8qIGJyZWxzZSBhbGwgcmVzb3VyY2VzIGNvbGxlY3RlZCBmb3IgYmFsYW5jaW5nICovCiAJCWZvciAoaSA9IDA7IGkgPCBNQVhfSEVJR0hUOyBpKyspIHsKIAkJCWlmICh3YWl0X3RiX2J1ZmZlcnNfcnVuKSB7Ci0JCQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIocF9zX3RiLT50Yl9zYiwKLQkJCQkJCQkJIHBfc190Yi0+TFtpXSk7Ci0JCQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIocF9zX3RiLT50Yl9zYiwKLQkJCQkJCQkJIHBfc190Yi0+UltpXSk7Ci0JCQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIocF9zX3RiLT50Yl9zYiwKLQkJCQkJCQkJIHBfc190Yi0+RkxbaV0pOwotCQkJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHBfc190Yi0+dGJfc2IsCi0JCQkJCQkJCSBwX3NfdGItPkZSW2ldKTsKLQkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihwX3NfdGItPnRiX3NiLAotCQkJCQkJCQkgcF9zX3RiLT4KKwkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcih0Yi0+dGJfc2IsCisJCQkJCQkJCSB0Yi0+TFtpXSk7CisJCQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIodGItPnRiX3NiLAorCQkJCQkJCQkgdGItPlJbaV0pOworCQkJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHRiLT50Yl9zYiwKKwkJCQkJCQkJIHRiLT5GTFtpXSk7CisJCQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIodGItPnRiX3NiLAorCQkJCQkJCQkgdGItPkZSW2ldKTsKKwkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcih0Yi0+dGJfc2IsCisJCQkJCQkJCSB0Yi0+CiAJCQkJCQkJCSBDRkxbaV0pOwotCQkJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHBfc190Yi0+dGJfc2IsCi0JCQkJCQkJCSBwX3NfdGItPgorCQkJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHRiLT50Yl9zYiwKKwkJCQkJCQkJIHRiLT4KIAkJCQkJCQkJIENGUltpXSk7CiAJCQl9CiAKLQkJCWJyZWxzZShwX3NfdGItPkxbaV0pOwotCQkJcF9zX3RiLT5MW2ldID0gTlVMTDsKLQkJCWJyZWxzZShwX3NfdGItPlJbaV0pOwotCQkJcF9zX3RiLT5SW2ldID0gTlVMTDsKLQkJCWJyZWxzZShwX3NfdGItPkZMW2ldKTsKLQkJCXBfc190Yi0+RkxbaV0gPSBOVUxMOwotCQkJYnJlbHNlKHBfc190Yi0+RlJbaV0pOwotCQkJcF9zX3RiLT5GUltpXSA9IE5VTEw7Ci0JCQlicmVsc2UocF9zX3RiLT5DRkxbaV0pOwotCQkJcF9zX3RiLT5DRkxbaV0gPSBOVUxMOwotCQkJYnJlbHNlKHBfc190Yi0+Q0ZSW2ldKTsKLQkJCXBfc190Yi0+Q0ZSW2ldID0gTlVMTDsKKwkJCWJyZWxzZSh0Yi0+TFtpXSk7CisJCQlicmVsc2UodGItPlJbaV0pOworCQkJYnJlbHNlKHRiLT5GTFtpXSk7CisJCQlicmVsc2UodGItPkZSW2ldKTsKKwkJCWJyZWxzZSh0Yi0+Q0ZMW2ldKTsKKwkJCWJyZWxzZSh0Yi0+Q0ZSW2ldKTsKKworCQkJdGItPkxbaV0gPSBOVUxMOworCQkJdGItPlJbaV0gPSBOVUxMOworCQkJdGItPkZMW2ldID0gTlVMTDsKKwkJCXRiLT5GUltpXSA9IE5VTEw7CisJCQl0Yi0+Q0ZMW2ldID0gTlVMTDsKKwkJCXRiLT5DRlJbaV0gPSBOVUxMOwogCQl9CiAKIAkJaWYgKHdhaXRfdGJfYnVmZmVyc19ydW4pIHsKIAkJCWZvciAoaSA9IDA7IGkgPCBNQVhfRkVCX1NJWkU7IGkrKykgewotCQkJCWlmIChwX3NfdGItPkZFQltpXSkgeworCQkJCWlmICh0Yi0+RkVCW2ldKQogCQkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcgotCQkJCQkgICAgKHBfc190Yi0+dGJfc2IsIHBfc190Yi0+RkVCW2ldKTsKLQkJCQl9CisJCQkJCSAgICAodGItPnRiX3NiLCB0Yi0+RkVCW2ldKTsKIAkJCX0KIAkJfQotCQlyZXR1cm4gbl9yZXRfdmFsdWU7CisJCXJldHVybiByZXQ7CiAJfQogCiB9CiAKLS8qIEFuYXRvbHkgd2lsbCBwcm9iYWJseSBmb3JnaXZlIG1lIHJlbmFtaW5nIHBfc190YiB0byB0Yi4gSSBqdXN0CisvKiBBbmF0b2x5IHdpbGwgcHJvYmFibHkgZm9yZ2l2ZSBtZSByZW5hbWluZyB0YiB0byB0Yi4gSSBqdXN0CiAgICB3YW50ZWQgdG8gbWFrZSBsaW5lcyBzaG9ydGVyICovCiB2b2lkIHVuZml4X25vZGVzKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiKQogewpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvaGFzaGVzLmMgYi9mcy9yZWlzZXJmcy9oYXNoZXMuYwppbmRleCBlNjY0YWMxLi42NDcxYzY3IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9oYXNoZXMuYworKysgYi9mcy9yZWlzZXJmcy9oYXNoZXMuYwpAQCAtNyw3ICs3LDcgQEAKICAqIChzZWUgQXBwbGllZCBDcnlwdG9ncmFwaHksIDJuZCBlZGl0aW9uLCBwNDQ4KS4KICAqCiAgKiBKZXJlbXkgRml0emhhcmRpbmdlIDxqZXJlbXlAemlwLmNvbS5hdT4gMTk5OAotICogCisgKgogICogSmVyZW15IGhhcyBhZ3JlZWQgdG8gdGhlIGNvbnRlbnRzIG9mIHJlaXNlcmZzL1JFQURNRS4gLUhhbnMKICAqIFl1cmEncyBmdW5jdGlvbiBpcyBhZGRlZCAoMDQvMDcvMjAwMCkKICAqLwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvaWJhbGFuY2UuYyBiL2ZzL3JlaXNlcmZzL2liYWxhbmNlLmMKaW5kZXggZGUzOTFhOC4uMjA3NGZkOSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvaWJhbGFuY2UuYworKysgYi9mcy9yZWlzZXJmcy9pYmFsYW5jZS5jCkBAIC0xMDUsOCArMTA1LDggQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkgICAgICAgImludGVybmFsX2RlZmluZV9kZXN0X3NyY19pbmZvczogc2hpZnQgdHlwZSBpcyB1bmtub3duICglZCkiLAorCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJpYmFsYW5jZS0xIiwKKwkJCSAgICAgICAic2hpZnQgdHlwZSBpcyB1bmtub3duICglZCkiLAogCQkJICAgICAgIHNoaWZ0X21vZGUpOwogCX0KIH0KQEAgLTI3OCw3ICsyNzgsNyBAQAogCiAvKiBjb3B5IGNweV9udW0gbm9kZSBwb2ludGVycyBhbmQgY3B5X251bSAtIDEgaXRlbXMgZnJvbSBidWZmZXIgc3JjIHRvIGJ1ZmZlciBkZXN0CiAqIGxhc3RfZmlyc3QgPT0gRklSU1RfVE9fTEFTVCBtZWFucywgdGhhdCB3ZSBjb3B5IGZpcnN0IGl0ZW1zIGZyb20gc3JjIHRvIHRhaWwgb2YgZGVzdAotICogbGFzdF9maXJzdCA9PSBMQVNUX1RPX0ZJUlNUIG1lYW5zLCB0aGF0IHdlIGNvcHkgbGFzdCBpdGVtcyBmcm9tIHNyYyB0byBoZWFkIG9mIGRlc3QgCisgKiBsYXN0X2ZpcnN0ID09IExBU1RfVE9fRklSU1QgbWVhbnMsIHRoYXQgd2UgY29weSBsYXN0IGl0ZW1zIGZyb20gc3JjIHRvIGhlYWQgb2YgZGVzdAogICovCiBzdGF0aWMgdm9pZCBpbnRlcm5hbF9jb3B5X3BvaW50ZXJzX2l0ZW1zKHN0cnVjdCBidWZmZXJfaW5mbyAqZGVzdF9iaSwKIAkJCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqc3JjLApAQCAtMzg1LDcgKzM4NSw3IEBACiAJaWYgKGxhc3RfZmlyc3QgPT0gRklSU1RfVE9fTEFTVCkgewkvKiBzaGlmdF9sZWZ0IG9jY3VycyAqLwogCQlmaXJzdF9wb2ludGVyID0gMDsKIAkJZmlyc3RfaXRlbSA9IDA7Ci0JCS8qIGRlbGV0ZSBjcHlfbnVtIC0gZGVsX3BhciBwb2ludGVycyBhbmQga2V5cyBzdGFydGluZyBmb3IgcG9pbnRlcnMgd2l0aCBmaXJzdF9wb2ludGVyLCAKKwkJLyogZGVsZXRlIGNweV9udW0gLSBkZWxfcGFyIHBvaW50ZXJzIGFuZCBrZXlzIHN0YXJ0aW5nIGZvciBwb2ludGVycyB3aXRoIGZpcnN0X3BvaW50ZXIsCiAJCSAgIGZvciBrZXkgLSB3aXRoIGZpcnN0X2l0ZW0gKi8KIAkJaW50ZXJuYWxfZGVsZXRlX3BvaW50ZXJzX2l0ZW1zKHNyY19iaSwgZmlyc3RfcG9pbnRlciwKIAkJCQkJICAgICAgIGZpcnN0X2l0ZW0sIGNweV9udW0gLSBkZWxfcGFyKTsKQEAgLTQ1Myw3ICs0NTMsNyBAQAogCX0KIH0KIAotLyogSW5zZXJ0IGRfa2V5J3RoIChkZWxpbWl0aW5nKSBrZXkgZnJvbSBidWZmZXIgY2ZsIHRvIHRhaWwgb2YgZGVzdC4gCisvKiBJbnNlcnQgZF9rZXkndGggKGRlbGltaXRpbmcpIGtleSBmcm9tIGJ1ZmZlciBjZmwgdG8gdGFpbCBvZiBkZXN0LgogICogQ29weSBwb2ludGVyX2Ftb3VudCBub2RlIHBvaW50ZXJzIGFuZCBwb2ludGVyX2Ftb3VudCAtIDEgaXRlbXMgZnJvbSBidWZmZXIgc3JjIHRvIGJ1ZmZlciBkZXN0LgogICogUmVwbGFjZSAgZF9rZXkndGgga2V5IGluIGJ1ZmZlciBjZmwuCiAgKiBEZWxldGUgcG9pbnRlcl9hbW91bnQgaXRlbXMgYW5kIG5vZGUgcG9pbnRlcnMgZnJvbSBidWZmZXIgc3JjLgpAQCAtNTE4LDcgKzUxOCw3IEBACiAJLyogICAgaW50ZXJuYWxfbW92ZV9wb2ludGVyc19pdGVtcyAodGItPkxbaF0sIHRiLT5TW2hdLCBGSVJTVF9UT19MQVNULCBwb2ludGVyX2Ftb3VudCwgMSk7ICovCiB9CiAKLS8qIEluc2VydCBkX2tleSd0aCAoZGVsaW1pdGluZykga2V5IGZyb20gYnVmZmVyIGNmciB0byBoZWFkIG9mIGRlc3QuIAorLyogSW5zZXJ0IGRfa2V5J3RoIChkZWxpbWl0aW5nKSBrZXkgZnJvbSBidWZmZXIgY2ZyIHRvIGhlYWQgb2YgZGVzdC4KICAqIENvcHkgbiBub2RlIHBvaW50ZXJzIGFuZCBuIC0gMSBpdGVtcyBmcm9tIGJ1ZmZlciBzcmMgdG8gYnVmZmVyIGRlc3QuCiAgKiBSZXBsYWNlICBkX2tleSd0aCBrZXkgaW4gYnVmZmVyIGNmci4KICAqIERlbGV0ZSBuIGl0ZW1zIGFuZCBub2RlIHBvaW50ZXJzIGZyb20gYnVmZmVyIHNyYy4KQEAgLTcwMiw4ICs3MDIsOCBAQAogCiAJCXJldHVybjsKIAl9Ci0JcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkgICAgICAgImJhbGFuY2VfaW50ZXJuYWxfd2hlbl9kZWxldGU6IHVuZXhwZWN0ZWQgdGItPmxudW1bJWRdPT0lZCBvciB0Yi0+cm51bVslZF09PSVkIiwKKwlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJpYmFsYW5jZS0yIiwKKwkJICAgICAgICJ1bmV4cGVjdGVkIHRiLT5sbnVtWyVkXT09JWQgb3IgdGItPnJudW1bJWRdPT0lZCIsCiAJCSAgICAgICBoLCB0Yi0+bG51bVtoXSwgaCwgdGItPnJudW1baF0pOwogfQogCkBAIC03NDksNyArNzQ5LDcgQEAKICAgICAgICB0aGlzIG1lYW5zIHRoYXQgbmV3IHBvaW50ZXJzIGFuZCBpdGVtcyBtdXN0IGJlIGluc2VydGVkIEFGVEVSICoKICAgICAgICBjaGlsZF9wb3MKICAgICAgICB9Ci0gICAgICAgZWxzZSAKKyAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgIGl0IGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGVmdG1vc3QgcG9pbnRlciB0aGF0IG11c3QgYmUgZGVsZXRlZCAodG9nZXRoZXIgd2l0aAogICAgICAgIGl0cyBjb3JyZXNwb25kaW5nIGtleSB0byB0aGUgbGVmdCBvZiB0aGUgcG9pbnRlcikKQEAgLTk0MCw4ICs5NDAsOCBAQAogCQlzdHJ1Y3QgYmxvY2tfaGVhZCAqYmxraDsKIAogCQlpZiAodGItPmJsa251bVtoXSAhPSAxKQotCQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwKLQkJCQkgICAgICAgImJhbGFuY2VfaW50ZXJuYWw6IE9uZSBuZXcgbm9kZSByZXF1aXJlZCBmb3IgY3JlYXRpbmcgdGhlIG5ldyByb290Iik7CisJCQlyZWlzZXJmc19wYW5pYyhOVUxMLCAiaWJhbGFuY2UtMyIsICJPbmUgbmV3IG5vZGUgIgorCQkJCSAgICAgICAicmVxdWlyZWQgZm9yIGNyZWF0aW5nIHRoZSBuZXcgcm9vdCIpOwogCQkvKiBTW2hdID0gZW1wdHkgYnVmZmVyIGZyb20gdGhlIGxpc3QgRkVCLiAqLwogCQl0YlNoID0gZ2V0X0ZFQih0Yik7CiAJCWJsa2ggPSBCX0JMS19IRUFEKHRiU2gpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvaW5vZGUuYyBiL2ZzL3JlaXNlcmZzL2lub2RlLmMKaW5kZXggODIzMjI3YS4uNmZkMGY0NyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvaW5vZGUuYworKysgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCkBAIC0zNjMsNyArMzYzLDcgQEAKIAkJfQogCQkvKiBtYWtlIHN1cmUgd2UgZG9uJ3QgcmVhZCBtb3JlIGJ5dGVzIHRoYW4gYWN0dWFsbHkgZXhpc3QgaW4KIAkJICoqIHRoZSBmaWxlLiAgVGhpcyBjYW4gaGFwcGVuIGluIG9kZCBjYXNlcyB3aGVyZSBpX3NpemUgaXNuJ3QKLQkJICoqIGNvcnJlY3QsIGFuZCB3aGVuIGRpcmVjdCBpdGVtIHBhZGRpbmcgcmVzdWx0cyBpbiBhIGZldyAKKwkJICoqIGNvcnJlY3QsIGFuZCB3aGVuIGRpcmVjdCBpdGVtIHBhZGRpbmcgcmVzdWx0cyBpbiBhIGZldwogCQkgKiogZXh0cmEgYnl0ZXMgYXQgdGhlIGVuZCBvZiB0aGUgZGlyZWN0IGl0ZW0KIAkJICovCiAJCWlmICgobGVfaWhfa19vZmZzZXQoaWgpICsgcGF0aC5wb3NfaW5faXRlbSkgPiBpbm9kZS0+aV9zaXplKQpAQCAtNDM4LDE1ICs0MzgsMTUgQEAKICoqIC1FTk9FTlQgaW5zdGVhZCBvZiBhIHZhbGlkIGJ1ZmZlci4gIGJsb2NrX3ByZXBhcmVfd3JpdGUgZXhwZWN0cyB0bwogKiogYmUgYWJsZSB0byBkbyBpL28gb24gdGhlIGJ1ZmZlcnMgcmV0dXJuZWQsIHVubGVzcyBhbiBlcnJvciB2YWx1ZQogKiogaXMgYWxzbyByZXR1cm5lZC4KLSoqIAorKioKICoqIFNvLCB0aGlzIGFsbG93cyBibG9ja19wcmVwYXJlX3dyaXRlIHRvIGJlIHVzZWQgZm9yIHJlYWRpbmcgYSBzaW5nbGUgYmxvY2sKICoqIGluIGEgcGFnZS4gIFdoZXJlIGl0IGRvZXMgbm90IHByb2R1Y2UgYSB2YWxpZCBwYWdlIGZvciBob2xlcywgb3IgcGFzdCB0aGUKICoqIGVuZCBvZiB0aGUgZmlsZS4gIFRoaXMgdHVybnMgb3V0IHRvIGJlIGV4YWN0bHkgd2hhdCB3ZSBuZWVkIGZvciByZWFkaW5nCiAqKiB0YWlscyBmb3IgY29udmVyc2lvbi4KICoqCiAqKiBUaGUgcG9pbnQgb2YgdGhlIHdyYXBwZXIgaXMgZm9yY2luZyBhIGNlcnRhaW4gdmFsdWUgZm9yIGNyZWF0ZSwgZXZlbgotKiogdGhvdWdoIHRoZSBWRlMgbGF5ZXIgaXMgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggY3JlYXRlPT0xLiAgSWYgeW91IAotKiogZG9uJ3Qgd2FudCB0byBzZW5kIGNyZWF0ZSA9PSBHRVRfQkxPQ0tfTk9fSE9MRSB0byByZWlzZXJmc19nZXRfYmxvY2ssIAorKiogdGhvdWdoIHRoZSBWRlMgbGF5ZXIgaXMgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggY3JlYXRlPT0xLiAgSWYgeW91CisqKiBkb24ndCB3YW50IHRvIHNlbmQgY3JlYXRlID09IEdFVF9CTE9DS19OT19IT0xFIHRvIHJlaXNlcmZzX2dldF9ibG9jaywKICoqIGRvbid0IHVzZSB0aGlzIGZ1bmN0aW9uLgogKi8KIHN0YXRpYyBpbnQgcmVpc2VyZnNfZ2V0X2Jsb2NrX2NyZWF0ZV8wKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLApAQCAtNjAyLDcgKzYwMiw3IEBACiAJaW50IGRvbmU7CiAJaW50IGZzX2dlbjsKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCA9IE5VTEw7Ci0JLyogc3BhY2UgcmVzZXJ2ZWQgaW4gdHJhbnNhY3Rpb24gYmF0Y2g6IAorCS8qIHNwYWNlIHJlc2VydmVkIGluIHRyYW5zYWN0aW9uIGJhdGNoOgogCSAgIC4gMyBiYWxhbmNpbmdzIGluIGRpcmVjdC0+aW5kaXJlY3QgY29udmVyc2lvbgogCSAgIC4gMSBibG9jayBpbnZvbHZlZCBpbnRvIHJlaXNlcmZzX3VwZGF0ZV9zZCgpCiAJICAgWFhYIGluIHByYWN0aWNhbGx5IGltcG9zc2libGUgd29yc3QgY2FzZSBkaXJlY3QyaW5kaXJlY3QoKQpAQCAtNzU0LDcgKzc1NCw3IEBACiAJCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7CiAKIAkJLyogdGhlIGl0ZW0gd2FzIGZvdW5kLCBzbyBuZXcgYmxvY2tzIHdlcmUgbm90IGFkZGVkIHRvIHRoZSBmaWxlCi0JCSAqKiB0aGVyZSBpcyBubyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW5vZGUgaXMgdXBkYXRlZCB3aXRoIHRoaXMgCisJCSAqKiB0aGVyZSBpcyBubyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW5vZGUgaXMgdXBkYXRlZCB3aXRoIHRoaXMKIAkJICoqIHRyYW5zYWN0aW9uCiAJCSAqLwogCQlyZXR1cm4gcmV0dmFsOwpAQCAtODQxLDEwICs4NDEsMTIgQEAKIAkJCQkJCQkgIHRhaWxfb2Zmc2V0KTsKIAkJCQlpZiAocmV0dmFsKSB7CiAJCQkJCWlmIChyZXR2YWwgIT0gLUVOT1NQQykKLQkJCQkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCi0JCQkJCQkJCSAiY2xtLTYwMDQ6IGNvbnZlcnQgdGFpbCBmYWlsZWQgaW5vZGUgJWx1LCBlcnJvciAlZCIsCi0JCQkJCQkJCSBpbm9kZS0+aV9pbm8sCi0JCQkJCQkJCSByZXR2YWwpOworCQkJCQkJcmVpc2VyZnNfZXJyb3IoaW5vZGUtPmlfc2IsCisJCQkJCQkJImNsbS02MDA0IiwKKwkJCQkJCQkiY29udmVydCB0YWlsIGZhaWxlZCAiCisJCQkJCQkJImlub2RlICVsdSwgZXJyb3IgJWQiLAorCQkJCQkJCWlub2RlLT5pX2lubywKKwkJCQkJCQlyZXR2YWwpOwogCQkJCQlpZiAoYWxsb2NhdGVkX2Jsb2NrX25yKSB7CiAJCQkJCQkvKiB0aGUgYml0bWFwLCB0aGUgc3VwZXIsIGFuZCB0aGUgc3RhdCBkYXRhID09IDMgKi8KIAkJCQkJCWlmICghdGgpCkBAIC05ODQsNyArOTg2LDcgQEAKIAogCQkvKiB0aGlzIGxvb3AgY291bGQgbG9nIG1vcmUgYmxvY2tzIHRoYW4gd2UgaGFkIG9yaWdpbmFsbHkgYXNrZWQKIAkJICoqIGZvci4gIFNvLCB3ZSBoYXZlIHRvIGFsbG93IHRoZSB0cmFuc2FjdGlvbiB0byBlbmQgaWYgaXQgaXMKLQkJICoqIHRvbyBiaWcgb3IgdG9vIGZ1bGwuICBVcGRhdGUgdGhlIGlub2RlIHNvIHRoaW5ncyBhcmUgCisJCSAqKiB0b28gYmlnIG9yIHRvbyBmdWxsLiAgVXBkYXRlIHRoZSBpbm9kZSBzbyB0aGluZ3MgYXJlCiAJCSAqKiBjb25zaXN0ZW50IGlmIHdlIGNyYXNoIGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucwogCQkgKioKIAkJICoqIHJlbGVhc2UgdGhlIHBhdGggc28gdGhhdCBhbnlib2R5IHdhaXRpbmcgb24gdGhlIHBhdGggYmVmb3JlCkBAIC05OTUsNyArOTk3LDcgQEAKIAkJCWlmIChyZXR2YWwpCiAJCQkJZ290byBmYWlsdXJlOwogCQl9Ci0JCS8qIGluc2VydGluZyBpbmRpcmVjdCBwb2ludGVycyBmb3IgYSBob2xlIGNhbiB0YWtlIGEgCisJCS8qIGluc2VydGluZyBpbmRpcmVjdCBwb2ludGVycyBmb3IgYSBob2xlIGNhbiB0YWtlIGEKIAkJICoqIGxvbmcgdGltZS4gIHJlc2NoZWR1bGUgaWYgbmVlZGVkCiAJCSAqLwogCQljb25kX3Jlc2NoZWQoKTsKQEAgLTEwMDYsOCArMTAwOCw3IEBACiAJCQlnb3RvIGZhaWx1cmU7CiAJCX0KIAkJaWYgKHJldHZhbCA9PSBQT1NJVElPTl9GT1VORCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCQkJICJ2cy04MjU6IHJlaXNlcmZzX2dldF9ibG9jazogIgorCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgInZzLTgyNSIsCiAJCQkJCSAiJUsgc2hvdWxkIG5vdCBiZSBmb3VuZCIsICZrZXkpOwogCQkJcmV0dmFsID0gLUVFWElTVDsKIAkJCWlmIChhbGxvY2F0ZWRfYmxvY2tfbnIpCkBAIC0xMjk5LDggKzEzMDAsNyBAQAogCWloID0gUEFUSF9QSVRFTV9IRUFEKHBhdGgpOwogCiAJaWYgKCFpc19zdGF0ZGF0YV9sZV9paChpaCkpCi0JCXJlaXNlcmZzX3BhbmljKGlub2RlLT5pX3NiLAotCQkJICAgICAgICJ2cy0xMzA2NTogdXBkYXRlX3N0YXRfZGF0YToga2V5ICVrLCBmb3VuZCBpdGVtICVoIiwKKwkJcmVpc2VyZnNfcGFuaWMoaW5vZGUtPmlfc2IsICJ2cy0xMzA2NSIsICJrZXkgJWssIGZvdW5kIGl0ZW0gJWgiLAogCQkJICAgICAgIElOT0RFX1BLRVkoaW5vZGUpLCBpaCk7CiAKIAlpZiAoc3RhdF9kYXRhX3YxKGloKSkgewpAQCAtMTMzMiwxMCArMTMzMiw5IEBACiAJCS8qIGxvb2sgZm9yIHRoZSBvYmplY3QncyBzdGF0IGRhdGEgKi8KIAkJcmV0dmFsID0gc2VhcmNoX2l0ZW0oaW5vZGUtPmlfc2IsICZrZXksICZwYXRoKTsKIAkJaWYgKHJldHZhbCA9PSBJT19FUlJPUikgewotCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCQkJICJ2cy0xMzA1MDogcmVpc2VyZnNfdXBkYXRlX3NkOiAiCi0JCQkJCSAiaS9vIGZhaWx1cmUgb2NjdXJyZWQgdHJ5aW5nIHRvIHVwZGF0ZSAlSyBzdGF0IGRhdGEiLAotCQkJCQkgJmtleSk7CisJCQlyZWlzZXJmc19lcnJvcihpbm9kZS0+aV9zYiwgInZzLTEzMDUwIiwKKwkJCQkgICAgICAgImkvbyBmYWlsdXJlIG9jY3VycmVkIHRyeWluZyB0byAiCisJCQkJICAgICAgICJ1cGRhdGUgJUsgc3RhdCBkYXRhIiwgJmtleSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJaWYgKHJldHZhbCA9PSBJVEVNX05PVF9GT1VORCkgewpAQCAtMTM0NSw5ICsxMzQ0LDkgQEAKIAkJCQkvKnJlaXNlcmZzX3dhcm5pbmcgKGlub2RlLT5pX3NiLCAidnMtMTMwNTA6IHJlaXNlcmZzX3VwZGF0ZV9zZDogaV9ubGluayA9PSAwLCBzdGF0IGRhdGEgbm90IGZvdW5kIik7ICovCiAJCQkJcmV0dXJuOwogCQkJfQotCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCQkJICJ2cy0xMzA2MDogcmVpc2VyZnNfdXBkYXRlX3NkOiAiCi0JCQkJCSAic3RhdCBkYXRhIG9mIG9iamVjdCAlayAobmxpbmsgPT0gJWQpIG5vdCBmb3VuZCAocG9zICVkKSIsCisJCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAidnMtMTMwNjAiLAorCQkJCQkgInN0YXQgZGF0YSBvZiBvYmplY3QgJWsgKG5saW5rID09ICVkKSAiCisJCQkJCSAibm90IGZvdW5kIChwb3MgJWQpIiwKIAkJCQkJIElOT0RFX1BLRVkoaW5vZGUpLCBpbm9kZS0+aV9ubGluaywKIAkJCQkJIHBvcyk7CiAJCQlyZWlzZXJmc19jaGVja19wYXRoKCZwYXRoKTsKQEAgLTE0MjQsMTAgKzE0MjMsOSBAQAogCS8qIGxvb2sgZm9yIHRoZSBvYmplY3QncyBzdGF0IGRhdGEgKi8KIAlyZXR2YWwgPSBzZWFyY2hfaXRlbShpbm9kZS0+aV9zYiwgJmtleSwgJnBhdGhfdG9fc2QpOwogCWlmIChyZXR2YWwgPT0gSU9fRVJST1IpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCQkgInZzLTEzMDcwOiByZWlzZXJmc19yZWFkX2xvY2tlZF9pbm9kZTogIgotCQkJCSAiaS9vIGZhaWx1cmUgb2NjdXJyZWQgdHJ5aW5nIHRvIGZpbmQgc3RhdCBkYXRhIG9mICVLIiwKLQkJCQkgJmtleSk7CisJCXJlaXNlcmZzX2Vycm9yKGlub2RlLT5pX3NiLCAidnMtMTMwNzAiLAorCQkJICAgICAgICJpL28gZmFpbHVyZSBvY2N1cnJlZCB0cnlpbmcgdG8gZmluZCAiCisJCQkgICAgICAgInN0YXQgZGF0YSBvZiAlSyIsICZrZXkpOwogCQlyZWlzZXJmc19tYWtlX2JhZF9pbm9kZShpbm9kZSk7CiAJCXJldHVybjsKIAl9CkBAIC0xNDQ2LDcgKzE0NDQsNyBAQAogCSAgIHVwZGF0ZSBzZCBvbiB1bmxpbmsgYWxsIHRoYXQgaXMgcmVxdWlyZWQgaXMgdG8gY2hlY2sgZm9yIG5saW5rCiAJICAgaGVyZS4gVGhpcyBidWcgd2FzIGZpcnN0IGZvdW5kIGJ5IFNpemlmIHdoZW4gZGVidWdnaW5nCiAJICAgU3F1aWRORy9CdXR0ZXJmbHksIGZvcmdvdHRlbiwgYW5kIGZvdW5kIGFnYWluIGFmdGVyIFBoaWxpcHBlCi0JICAgR3JhbW91bGxlIDxwaGlsaXBwZS5ncmFtb3VsbGVAbW1hbmlhLmNvbT4gcmVwcm9kdWNlZCBpdC4gCisJICAgR3JhbW91bGxlIDxwaGlsaXBwZS5ncmFtb3VsbGVAbW1hbmlhLmNvbT4gcmVwcm9kdWNlZCBpdC4KIAogCSAgIE1vcmUgbG9naWNhbCBmaXggd291bGQgcmVxdWlyZSBjaGFuZ2VzIGluIGZzL2lub2RlLmM6aXB1dCgpIHRvCiAJICAgcmVtb3ZlIGlub2RlIGZyb20gaGFzaC10YWJsZSBfYWZ0ZXJfIGZzIGNsZWFuZWQgZGlzayBzdHVmZiB1cCBhbmQKQEAgLTE0NTcsOCArMTQ1NSw3IEBACiAJICAgZHVyaW5nIG1vdW50IChmcy9yZWlzZXJmcy9zdXBlci5jOmZpbmlzaF91bmZpbmlzaGVkKCkpLiAqLwogCWlmICgoaW5vZGUtPmlfbmxpbmsgPT0gMCkgJiYKIAkgICAgIVJFSVNFUkZTX1NCKGlub2RlLT5pX3NiKS0+c19pc191bmxpbmtlZF9vaykgewotCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCSAidnMtMTMwNzU6IHJlaXNlcmZzX3JlYWRfbG9ja2VkX2lub2RlOiAiCisJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJ2cy0xMzA3NSIsCiAJCQkJICJkZWFkIGlub2RlIHJlYWQgZnJvbSBkaXNrICVLLiAiCiAJCQkJICJUaGlzIGlzIGxpa2VseSB0byBiZSByYWNlIHdpdGgga25mc2QuIElnbm9yZSIsCiAJCQkJICZrZXkpOwpAQCAtMTU1NSw3ICsxNTUyLDcgQEAKIAkgKi8KIAlpZiAoZmhfdHlwZSA+IGZoX2xlbikgewogCQlpZiAoZmhfdHlwZSAhPSA2IHx8IGZoX2xlbiAhPSA1KQotCQkJcmVpc2VyZnNfd2FybmluZyhzYiwKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJyZWlzZXJmcy0xMzA3NyIsCiAJCQkJIm5mc2QvcmVpc2VyZnMsIGZodHlwZT0lZCwgbGVuPSVkIC0gb2RkIiwKIAkJCQlmaF90eXBlLCBmaF9sZW4pOwogCQlmaF90eXBlID0gNTsKQEAgLTE2MjIsNyArMTYxOSw3IEBACiAJaWYgKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQogCQlyZXR1cm4gLUVST0ZTOwogCS8qIG1lbW9yeSBwcmVzc3VyZSBjYW4gc29tZXRpbWVzIGluaXRpYXRlIHdyaXRlX2lub2RlIGNhbGxzIHdpdGggc3luYyA9PSAxLAotCSAqKiB0aGVzZSBjYXNlcyBhcmUganVzdCB3aGVuIHRoZSBzeXN0ZW0gbmVlZHMgcmFtLCBub3Qgd2hlbiB0aGUgCisJICoqIHRoZXNlIGNhc2VzIGFyZSBqdXN0IHdoZW4gdGhlIHN5c3RlbSBuZWVkcyByYW0sIG5vdCB3aGVuIHRoZQogCSAqKiBpbm9kZSBuZWVkcyB0byByZWFjaCBkaXNrIGZvciBzYWZldHksIGFuZCB0aGV5IGNhbiBzYWZlbHkgYmUKIAkgKiogaWdub3JlZCBiZWNhdXNlIHRoZSBhbHRlcmVkIGlub2RlIGhhcyBhbHJlYWR5IGJlZW4gbG9nZ2VkLgogCSAqLwpAQCAtMTY4MCwxMyArMTY3NywxMyBAQAogCS8qIGxvb2sgZm9yIHBsYWNlIGluIHRoZSB0cmVlIGZvciBuZXcgaXRlbSAqLwogCXJldHZhbCA9IHNlYXJjaF9pdGVtKHNiLCAma2V5LCBwYXRoKTsKIAlpZiAocmV0dmFsID09IElPX0VSUk9SKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJ2cy0xMzA4MDogcmVpc2VyZnNfbmV3X2RpcmVjdG9yeTogIgotCQkJCSAiaS9vIGZhaWx1cmUgb2NjdXJyZWQgY3JlYXRpbmcgbmV3IGRpcmVjdG9yeSIpOworCQlyZWlzZXJmc19lcnJvcihzYiwgInZzLTEzMDgwIiwKKwkJCSAgICAgICAiaS9vIGZhaWx1cmUgb2NjdXJyZWQgY3JlYXRpbmcgbmV3IGRpcmVjdG9yeSIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJaWYgKHJldHZhbCA9PSBJVEVNX0ZPVU5EKSB7CiAJCXBhdGhyZWxzZShwYXRoKTsKLQkJcmVpc2VyZnNfd2FybmluZyhzYiwgInZzLTEzMDcwOiByZWlzZXJmc19uZXdfZGlyZWN0b3J5OiAiCisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJ2cy0xMzA3MCIsCiAJCQkJICJvYmplY3Qgd2l0aCB0aGlzIGtleSBleGlzdHMgKCVrKSIsCiAJCQkJICYoaWgtPmloX2tleSkpOwogCQlyZXR1cm4gLUVFWElTVDsKQEAgLTE3MjAsMTMgKzE3MTcsMTMgQEAKIAkvKiBsb29rIGZvciBwbGFjZSBpbiB0aGUgdHJlZSBmb3IgbmV3IGl0ZW0gKi8KIAlyZXR2YWwgPSBzZWFyY2hfaXRlbShzYiwgJmtleSwgcGF0aCk7CiAJaWYgKHJldHZhbCA9PSBJT19FUlJPUikgewotCQlyZWlzZXJmc193YXJuaW5nKHNiLCAidnMtMTMwODA6IHJlaXNlcmZzX25ld19zeW1saW5pazogIgotCQkJCSAiaS9vIGZhaWx1cmUgb2NjdXJyZWQgY3JlYXRpbmcgbmV3IHN5bWxpbmsiKTsKKwkJcmVpc2VyZnNfZXJyb3Ioc2IsICJ2cy0xMzA4MCIsCisJCQkgICAgICAgImkvbyBmYWlsdXJlIG9jY3VycmVkIGNyZWF0aW5nIG5ldyBzeW1saW5rIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAlpZiAocmV0dmFsID09IElURU1fRk9VTkQpIHsKIAkJcGF0aHJlbHNlKHBhdGgpOwotCQlyZWlzZXJmc193YXJuaW5nKHNiLCAidnMtMTMwODA6IHJlaXNlcmZzX25ld19zeW1saW5rOiAiCisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJ2cy0xMzA4MCIsCiAJCQkJICJvYmplY3Qgd2l0aCB0aGlzIGtleSBleGlzdHMgKCVrKSIsCiAJCQkJICYoaWgtPmloX2tleSkpOwogCQlyZXR1cm4gLUVFWElTVDsKQEAgLTE3MzksNyArMTczNiw3IEBACiAvKiBpbnNlcnRzIHRoZSBzdGF0IGRhdGEgaW50byB0aGUgdHJlZSwgYW5kIHRoZW4gY2FsbHMKICAgIHJlaXNlcmZzX25ld19kaXJlY3RvcnkgKHRvIGluc2VydCAiLiIsICIuLiIgaXRlbSBpZiBuZXcgb2JqZWN0IGlzCiAgICBkaXJlY3RvcnkpIG9yIHJlaXNlcmZzX25ld19zeW1saW5rICh0byBpbnNlcnQgc3ltbGluayBib2R5IGlmIG5ldwotICAgb2JqZWN0IGlzIHN5bWxpbmspIG9yIG5vdGhpbmcgKGlmIG5ldyBvYmplY3QgaXMgcmVndWxhciBmaWxlKSAKKyAgIG9iamVjdCBpcyBzeW1saW5rKSBvciBub3RoaW5nIChpZiBuZXcgb2JqZWN0IGlzIHJlZ3VsYXIgZmlsZSkKIAogICAgTk9URSEgdWlkIGFuZCBnaWQgbXVzdCBhbHJlYWR5IGJlIHNldCBpbiB0aGUgaW5vZGUuICBJZiB3ZSByZXR1cm4KICAgIG5vbi16ZXJvIGR1ZSB0byBhbiBlcnJvciwgd2UgaGF2ZSB0byBkcm9wIHRoZSBxdW90YSBwcmV2aW91c2x5IGFsbG9jYXRlZApAQCAtMTc0NywxMCArMTc0NCwxMSBAQAogICAgaWYgd2UgcmV0dXJuIG5vbi16ZXJvLCB3ZSBhbHNvIGVuZCB0aGUgdHJhbnNhY3Rpb24uICAqLwogaW50IHJlaXNlcmZzX25ld19pbm9kZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKIAkJICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBpbnQgbW9kZSwgY29uc3QgY2hhciAqc3ltbmFtZSwKLQkJICAgICAgIC8qIDAgZm9yIHJlZ3VsYXIsIEVNVFJZX0RJUl9TSVpFIGZvciBkaXJzLCAKKwkJICAgICAgIC8qIDAgZm9yIHJlZ3VsYXIsIEVNVFJZX0RJUl9TSVpFIGZvciBkaXJzLAogCQkgICAgICAgICAgc3RybGVuIChzeW1uYW1lKSBmb3Igc3ltbGlua3MpICovCiAJCSAgICAgICBsb2ZmX3QgaV9zaXplLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQorCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJICAgICAgIHN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgKnNlY3VyaXR5KQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAJc3RydWN0IHJlaXNlcmZzX2lnZXRfYXJncyBhcmdzOwpAQCAtMTc5Niw3ICsxNzk0LDcgQEAKIAkJZ290byBvdXRfYmFkX2lub2RlOwogCX0KIAlpZiAob2xkX2Zvcm1hdF9vbmx5KHNiKSkKLQkJLyogbm90IGEgcGVyZmVjdCBnZW5lcmF0aW9uIGNvdW50LCBhcyBvYmplY3QgaWRzIGNhbiBiZSByZXVzZWQsIGJ1dCAKKwkJLyogbm90IGEgcGVyZmVjdCBnZW5lcmF0aW9uIGNvdW50LCBhcyBvYmplY3QgaWRzIGNhbiBiZSByZXVzZWQsIGJ1dAogCQkgKiogdGhpcyBpcyBhcyBnb29kIGFzIHJlaXNlcmZzIGNhbiBkbyByaWdodCBub3cuCiAJCSAqKiBub3RlIHRoYXQgdGhlIHByaXZhdGUgcGFydCBvZiBpbm9kZSBpc24ndCBmaWxsZWQgaW4geWV0LCB3ZSBoYXZlCiAJCSAqKiB0byB1c2UgdGhlIGRpcmVjdG9yeS4KQEAgLTE5MTcsOSArMTkxNSw4IEBACiAJCWdvdG8gb3V0X2luc2VydGVkX3NkOwogCX0KIAotCS8qIFhYWCBDSEVDSyBUSElTICovCiAJaWYgKHJlaXNlcmZzX3Bvc2l4YWNsKGlub2RlLT5pX3NiKSkgewotCQlyZXR2YWwgPSByZWlzZXJmc19pbmhlcml0X2RlZmF1bHRfYWNsKGRpciwgZGVudHJ5LCBpbm9kZSk7CisJCXJldHZhbCA9IHJlaXNlcmZzX2luaGVyaXRfZGVmYXVsdF9hY2wodGgsIGRpciwgZGVudHJ5LCBpbm9kZSk7CiAJCWlmIChyZXR2YWwpIHsKIAkJCWVyciA9IHJldHZhbDsKIAkJCXJlaXNlcmZzX2NoZWNrX3BhdGgoJnBhdGhfdG9fa2V5KTsKQEAgLTE5MjcsMTAgKzE5MjQsMjMgQEAKIAkJCWdvdG8gb3V0X2luc2VydGVkX3NkOwogCQl9CiAJfSBlbHNlIGlmIChpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX1BPU0lYQUNMKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJBQ0xzIGFyZW4ndCBlbmFibGVkIGluIHRoZSBmcywgIgorCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAiamRtLTEzMDkwIiwKKwkJCQkgIkFDTHMgYXJlbid0IGVuYWJsZWQgaW4gdGhlIGZzLCAiCiAJCQkJICJidXQgdmZzIHRoaW5rcyB0aGV5IGFyZSEiKTsKLQl9IGVsc2UgaWYgKGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGRpcikpIHsKLQkJcmVpc2VyZnNfbWFya19pbm9kZV9wcml2YXRlKGlub2RlKTsKKwl9IGVsc2UgaWYgKElTX1BSSVZBVEUoZGlyKSkKKwkJaW5vZGUtPmlfZmxhZ3MgfD0gU19QUklWQVRFOworCisJaWYgKHNlY3VyaXR5LT5uYW1lKSB7CisJCXJldHZhbCA9IHJlaXNlcmZzX3NlY3VyaXR5X3dyaXRlKHRoLCBpbm9kZSwgc2VjdXJpdHkpOworCQlpZiAocmV0dmFsKSB7CisJCQllcnIgPSByZXR2YWw7CisJCQlyZWlzZXJmc19jaGVja19wYXRoKCZwYXRoX3RvX2tleSk7CisJCQlyZXR2YWwgPSBqb3VybmFsX2VuZCh0aCwgdGgtPnRfc3VwZXIsCisJCQkJCSAgICAgdGgtPnRfYmxvY2tzX2FsbG9jYXRlZCk7CisJCQlpZiAocmV0dmFsKQorCQkJCWVyciA9IHJldHZhbDsKKwkJCWdvdG8gb3V0X2luc2VydGVkX3NkOworCQl9CiAJfQogCiAJcmVpc2VyZnNfdXBkYXRlX3NkKHRoLCBpbm9kZSk7CkBAIC0xOTYwLDE5ICsxOTcwLDcgQEAKIAlpbm9kZS0+aV9ubGluayA9IDA7CiAJdGgtPnRfdHJhbnNfaWQgPSAwOwkvKiBzbyB0aGUgY2FsbGVyIGNhbid0IHVzZSB0aGlzIGhhbmRsZSBsYXRlciAqLwogCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOyAvKiBPSyB0byBkbyBldmVuIGlmIHdlIGhhZG4ndCBsb2NrZWQgaXQgKi8KLQotCS8qIElmIHdlIHdlcmUgaW5oZXJpdGluZyBhbiBBQ0wsIHdlIG5lZWQgdG8gcmVsZWFzZSB0aGUgbG9jayBzbyB0aGF0Ci0JICogaXB1dCBkb2Vzbid0IGRlYWRsb2NrIGluIHJlaXNlcmZzX2RlbGV0ZV94YXR0cnMuIFRoZSBsb2NraW5nCi0JICogY29kZSByZWFsbHkgbmVlZHMgdG8gYmUgcmV3b3JrZWQsIGJ1dCB0aGlzIHdpbGwgdGFrZSBjYXJlIG9mIGl0Ci0JICogZm9yIG5vdy4gLWplZmZtICovCi0jaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTAotCWlmIChSRUlTRVJGU19JKGRpciktPmlfYWNsX2RlZmF1bHQgJiYgIUlTX0VSUihSRUlTRVJGU19JKGRpciktPmlfYWNsX2RlZmF1bHQpKSB7Ci0JCXJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cnMoZGlyLT5pX3NiKTsKLQkJaXB1dChpbm9kZSk7Ci0JCXJlaXNlcmZzX3dyaXRlX2xvY2tfeGF0dHJzKGRpci0+aV9zYik7Ci0JfSBlbHNlCi0jZW5kaWYKLQkJaXB1dChpbm9kZSk7CisJaXB1dChpbm9kZSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTk4OSw3ICsxOTg3LDcgQEAKICoqCiAqKiBvbiBmYWlsdXJlLCBub256ZXJvIGlzIHJldHVybmVkLCBwYWdlX3Jlc3VsdCBhbmQgYmhfcmVzdWx0IGFyZSB1bnRvdWNoZWQuCiAqLwotc3RhdGljIGludCBncmFiX3RhaWxfcGFnZShzdHJ1Y3QgaW5vZGUgKnBfc19pbm9kZSwKK3N0YXRpYyBpbnQgZ3JhYl90YWlsX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgc3RydWN0IHBhZ2UgKipwYWdlX3Jlc3VsdCwKIAkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhfcmVzdWx0KQogewpAQCAtMTk5NywxMSArMTk5NSwxMSBAQAogCS8qIHdlIHdhbnQgdGhlIHBhZ2Ugd2l0aCB0aGUgbGFzdCBieXRlIGluIHRoZSBmaWxlLAogCSAqKiBub3QgdGhlIHBhZ2UgdGhhdCB3aWxsIGhvbGQgdGhlIG5leHQgYnl0ZSBmb3IgYXBwZW5kaW5nCiAJICovCi0JdW5zaWduZWQgbG9uZyBpbmRleCA9IChwX3NfaW5vZGUtPmlfc2l6ZSAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJdW5zaWduZWQgbG9uZyBpbmRleCA9IChpbm9kZS0+aV9zaXplIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAl1bnNpZ25lZCBsb25nIHBvcyA9IDA7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBibG9ja3NpemUgPSBwX3NfaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gKHBfc19pbm9kZS0+aV9zaXplKSAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKKwl1bnNpZ25lZCBsb25nIGJsb2Nrc2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IChpbm9kZS0+aV9zaXplKSAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqaGVhZDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKQEAgLTIwMTUsNyArMjAxMyw3IEBACiAJaWYgKChvZmZzZXQgJiAoYmxvY2tzaXplIC0gMSkpID09IDApIHsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCXBhZ2UgPSBncmFiX2NhY2hlX3BhZ2UocF9zX2lub2RlLT5pX21hcHBpbmcsIGluZGV4KTsKKwlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGluZGV4KTsKIAllcnJvciA9IC1FTk9NRU07CiAJaWYgKCFwYWdlKSB7CiAJCWdvdG8gb3V0OwpAQCAtMjA0NCwxMCArMjA0Miw4IEBACiAJCSAqKiBJJ3ZlIHNjcmV3ZWQgdXAgdGhlIGNvZGUgdG8gZmluZCB0aGUgYnVmZmVyLCBvciB0aGUgY29kZSB0bwogCQkgKiogY2FsbCBwcmVwYXJlX3dyaXRlCiAJCSAqLwotCQlyZWlzZXJmc193YXJuaW5nKHBfc19pbm9kZS0+aV9zYiwKLQkJCQkgImNsbS02MDAwOiBlcnJvciByZWFkaW5nIGJsb2NrICVsdSBvbiBkZXYgJXMiLAotCQkJCSBiaC0+Yl9ibG9ja25yLAotCQkJCSByZWlzZXJmc19iZGV2bmFtZShwX3NfaW5vZGUtPmlfc2IpKTsKKwkJcmVpc2VyZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJjbG0tNjAwMCIsCisJCQkgICAgICAgImVycm9yIHJlYWRpbmcgYmxvY2sgJWx1IiwgYmgtPmJfYmxvY2tucik7CiAJCWVycm9yID0gLUVJTzsKIAkJZ290byB1bmxvY2s7CiAJfQpAQCAtMjA2OSw1NyArMjA2NSw1OCBAQAogKioKICoqIHNvbWUgY29kZSB0YWtlbiBmcm9tIGJsb2NrX3RydW5jYXRlX3BhZ2UKICovCi1pbnQgcmVpc2VyZnNfdHJ1bmNhdGVfZmlsZShzdHJ1Y3QgaW5vZGUgKnBfc19pbm9kZSwgaW50IHVwZGF0ZV90aW1lc3RhbXBzKQoraW50IHJlaXNlcmZzX3RydW5jYXRlX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHVwZGF0ZV90aW1lc3RhbXBzKQogewogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgdGg7CiAJLyogd2Ugd2FudCB0aGUgb2Zmc2V0IGZvciB0aGUgZmlyc3QgYnl0ZSBhZnRlciB0aGUgZW5kIG9mIHRoZSBmaWxlICovCi0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBwX3NfaW5vZGUtPmlfc2l6ZSAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKLQl1bnNpZ25lZCBibG9ja3NpemUgPSBwX3NfaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gaW5vZGUtPmlfc2l6ZSAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKKwl1bnNpZ25lZCBibG9ja3NpemUgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CiAJdW5zaWduZWQgbGVuZ3RoOwogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKIAlpbnQgZXJyb3I7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CiAJaW50IGVycjI7CiAKLQlyZWlzZXJmc193cml0ZV9sb2NrKHBfc19pbm9kZS0+aV9zYik7CisJcmVpc2VyZnNfd3JpdGVfbG9jayhpbm9kZS0+aV9zYik7CiAKLQlpZiAocF9zX2lub2RlLT5pX3NpemUgPiAwKSB7Ci0JCWlmICgoZXJyb3IgPSBncmFiX3RhaWxfcGFnZShwX3NfaW5vZGUsICZwYWdlLCAmYmgpKSkgewotCQkJLy8gLUVOT0VOVCBtZWFucyB3ZSB0cnVuY2F0ZWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBmaWxlLCAKKwlpZiAoaW5vZGUtPmlfc2l6ZSA+IDApIHsKKwkJZXJyb3IgPSBncmFiX3RhaWxfcGFnZShpbm9kZSwgJnBhZ2UsICZiaCk7CisJCWlmIChlcnJvcikgeworCQkJLy8gLUVOT0VOVCBtZWFucyB3ZSB0cnVuY2F0ZWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBmaWxlLAogCQkJLy8gYW5kIGdldF9ibG9ja19jcmVhdGVfMCBjb3VsZCBub3QgZmluZCBhIGJsb2NrIHRvIHJlYWQgaW4sCiAJCQkvLyB3aGljaCBpcyBvay4KIAkJCWlmIChlcnJvciAhPSAtRU5PRU5UKQotCQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX2lub2RlLT5pX3NiLAotCQkJCQkJICJjbG0tNjAwMTogZ3JhYl90YWlsX3BhZ2UgZmFpbGVkICVkIiwKLQkJCQkJCSBlcnJvcik7CisJCQkJcmVpc2VyZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJjbG0tNjAwMSIsCisJCQkJCSAgICAgICAiZ3JhYl90YWlsX3BhZ2UgZmFpbGVkICVkIiwKKwkJCQkJICAgICAgIGVycm9yKTsKIAkJCXBhZ2UgPSBOVUxMOwogCQkJYmggPSBOVUxMOwogCQl9CiAJfQogCi0JLyogc28sIGlmIHBhZ2UgIT0gTlVMTCwgd2UgaGF2ZSBhIGJ1ZmZlciBoZWFkIGZvciB0aGUgb2Zmc2V0IGF0IAotCSAqKiB0aGUgZW5kIG9mIHRoZSBmaWxlLiBpZiB0aGUgYmggaXMgbWFwcGVkLCBhbmQgYmgtPmJfYmxvY2tuciAhPSAwLCAKLQkgKiogdGhlbiB3ZSBoYXZlIGFuIHVuZm9ybWF0dGVkIG5vZGUuICBPdGhlcndpc2UsIHdlIGhhdmUgYSBkaXJlY3QgaXRlbSwgCi0JICoqIGFuZCBubyB6ZXJvaW5nIGlzIHJlcXVpcmVkIG9uIGRpc2suICBXZSB6ZXJvIGFmdGVyIHRoZSB0cnVuY2F0ZSwgCi0JICoqIGJlY2F1c2UgdGhlIHRydW5jYXRlIG1pZ2h0IHBhY2sgdGhlIGl0ZW0gYW55d2F5IAorCS8qIHNvLCBpZiBwYWdlICE9IE5VTEwsIHdlIGhhdmUgYSBidWZmZXIgaGVhZCBmb3IgdGhlIG9mZnNldCBhdAorCSAqKiB0aGUgZW5kIG9mIHRoZSBmaWxlLiBpZiB0aGUgYmggaXMgbWFwcGVkLCBhbmQgYmgtPmJfYmxvY2tuciAhPSAwLAorCSAqKiB0aGVuIHdlIGhhdmUgYW4gdW5mb3JtYXR0ZWQgbm9kZS4gIE90aGVyd2lzZSwgd2UgaGF2ZSBhIGRpcmVjdCBpdGVtLAorCSAqKiBhbmQgbm8gemVyb2luZyBpcyByZXF1aXJlZCBvbiBkaXNrLiAgV2UgemVybyBhZnRlciB0aGUgdHJ1bmNhdGUsCisJICoqIGJlY2F1c2UgdGhlIHRydW5jYXRlIG1pZ2h0IHBhY2sgdGhlIGl0ZW0gYW55d2F5CiAJICoqIChpdCB3aWxsIHVubWFwIGJoIGlmIGl0IHBhY2tzKS4KIAkgKi8KIAkvKiBpdCBpcyBlbm91Z2ggdG8gcmVzZXJ2ZSBzcGFjZSBpbiB0cmFuc2FjdGlvbiBmb3IgMiBiYWxhbmNpbmdzOgogCSAgIG9uZSBmb3IgInNhdmUiIGxpbmsgYWRkaW5nIGFuZCBhbm90aGVyIGZvciB0aGUgZmlyc3QKIAkgICBjdXRfZnJvbV9pdGVtLiAxIGlzIGZvciB1cGRhdGVfc2QgKi8KLQllcnJvciA9IGpvdXJuYWxfYmVnaW4oJnRoLCBwX3NfaW5vZGUtPmlfc2IsCisJZXJyb3IgPSBqb3VybmFsX2JlZ2luKCZ0aCwgaW5vZGUtPmlfc2IsCiAJCQkgICAgICBKT1VSTkFMX1BFUl9CQUxBTkNFX0NOVCAqIDIgKyAxKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwotCXJlaXNlcmZzX3VwZGF0ZV9pbm9kZV90cmFuc2FjdGlvbihwX3NfaW5vZGUpOworCXJlaXNlcmZzX3VwZGF0ZV9pbm9kZV90cmFuc2FjdGlvbihpbm9kZSk7CiAJaWYgKHVwZGF0ZV90aW1lc3RhbXBzKQogCQkvKiB3ZSBhcmUgZG9pbmcgcmVhbCB0cnVuY2F0ZTogaWYgdGhlIHN5c3RlbSBjcmFzaGVzIGJlZm9yZSB0aGUgbGFzdAogCQkgICB0cmFuc2FjdGlvbiBvZiB0cnVuY2F0aW5nIGdldHMgY29tbWl0dGVkIC0gb24gcmVib290IHRoZSBmaWxlCiAJCSAgIGVpdGhlciBhcHBlYXJzIHRydW5jYXRlZCBwcm9wZXJseSBvciBub3QgdHJ1bmNhdGVkIGF0IGFsbCAqLwotCQlhZGRfc2F2ZV9saW5rKCZ0aCwgcF9zX2lub2RlLCAxKTsKLQllcnIyID0gcmVpc2VyZnNfZG9fdHJ1bmNhdGUoJnRoLCBwX3NfaW5vZGUsIHBhZ2UsIHVwZGF0ZV90aW1lc3RhbXBzKTsKKwkJYWRkX3NhdmVfbGluaygmdGgsIGlub2RlLCAxKTsKKwllcnIyID0gcmVpc2VyZnNfZG9fdHJ1bmNhdGUoJnRoLCBpbm9kZSwgcGFnZSwgdXBkYXRlX3RpbWVzdGFtcHMpOwogCWVycm9yID0KLQkgICAgam91cm5hbF9lbmQoJnRoLCBwX3NfaW5vZGUtPmlfc2IsIEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICogMiArIDEpOworCSAgICBqb3VybmFsX2VuZCgmdGgsIGlub2RlLT5pX3NiLCBKT1VSTkFMX1BFUl9CQUxBTkNFX0NOVCAqIDIgKyAxKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0OwogCkBAIC0yMTMwLDcgKzIxMjcsNyBAQAogCX0KIAkKIAlpZiAodXBkYXRlX3RpbWVzdGFtcHMpIHsKLQkJZXJyb3IgPSByZW1vdmVfc2F2ZV9saW5rKHBfc19pbm9kZSwgMSAvKiB0cnVuY2F0ZSAqLyApOworCQllcnJvciA9IHJlbW92ZV9zYXZlX2xpbmsoaW5vZGUsIDEgLyogdHJ1bmNhdGUgKi8pOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dDsKIAl9CkBAIC0yMTQ5LDE0ICsyMTQ2LDE0IEBACiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAl9CiAKLQlyZWlzZXJmc193cml0ZV91bmxvY2socF9zX2lub2RlLT5pX3NiKTsKKwlyZWlzZXJmc193cml0ZV91bmxvY2soaW5vZGUtPmlfc2IpOwogCXJldHVybiAwOwogICAgICAgb3V0OgogCWlmIChwYWdlKSB7CiAJCXVubG9ja19wYWdlKHBhZ2UpOwogCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJfQotCXJlaXNlcmZzX3dyaXRlX3VubG9jayhwX3NfaW5vZGUtPmlfc2IpOworCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0yMjA4LDkgKzIyMDUsOCBAQAogCS8qIHdlJ3ZlIGZvdW5kIGFuIHVuZm9ybWF0dGVkIG5vZGUgKi8KIAlpZiAoaW5kaXJlY3RfaXRlbV9mb3VuZChyZXR2YWwsIGloKSkgewogCQlpZiAoYnl0ZXNfY29waWVkID4gMCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCQkJICJjbG0tNjAwMjogYnl0ZXNfY29waWVkICVkIiwKLQkJCQkJIGJ5dGVzX2NvcGllZCk7CisJCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAiY2xtLTYwMDIiLAorCQkJCQkgImJ5dGVzX2NvcGllZCAlZCIsIGJ5dGVzX2NvcGllZCk7CiAJCX0KIAkJaWYgKCFnZXRfYmxvY2tfbnVtKGl0ZW0sIHBvc19pbl9pdGVtKSkgewogCQkJLyogY3JhcCwgd2UgYXJlIHdyaXRpbmcgdG8gYSBob2xlICovCkBAIC0yMjY3LDkgKzIyNjMsOCBAQAogCQkJZ290byByZXNlYXJjaDsKIAkJfQogCX0gZWxzZSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCi0JCQkJICJjbG0tNjAwMzogYmFkIGl0ZW0gaW5vZGUgJWx1LCBkZXZpY2UgJXMiLAotCQkJCSBpbm9kZS0+aV9pbm8sIHJlaXNlcmZzX2JkZXZuYW1lKGlub2RlLT5pX3NiKSk7CisJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJjbG0tNjAwMyIsCisJCQkJICJiYWQgaXRlbSBpbm9kZSAlbHUiLCBpbm9kZS0+aV9pbm8pOwogCQlyZXR2YWwgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yMzEyLDggKzIzMDcsOCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLS8qIAotICogbWFzb25Ac3VzZS5jb206IHVwZGF0ZWQgaW4gMi41LjU0IHRvIGZvbGxvdyB0aGUgc2FtZSBnZW5lcmFsIGlvIAorLyoKKyAqIG1hc29uQHN1c2UuY29tOiB1cGRhdGVkIGluIDIuNS41NCB0byBmb2xsb3cgdGhlIHNhbWUgZ2VuZXJhbCBpbwogICogc3RhcnQvcmVjb3ZlcnkgcGF0aCBhcyBfX2Jsb2NrX3dyaXRlX2Z1bGxfcGFnZSwgYWxvbmcgd2l0aCBzcGVjaWFsCiAgKiBjb2RlIHRvIGhhbmRsZSByZWlzZXJmcyB0YWlscy4KICAqLwpAQCAtMjQ1Myw3ICsyNDQ4LDcgQEAKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAogCS8qCi0JICogc2luY2UgYW55IGJ1ZmZlciBtaWdodCBiZSB0aGUgb25seSBkaXJ0eSBidWZmZXIgb24gdGhlIHBhZ2UsIAorCSAqIHNpbmNlIGFueSBidWZmZXIgbWlnaHQgYmUgdGhlIG9ubHkgZGlydHkgYnVmZmVyIG9uIHRoZSBwYWdlLAogCSAqIHRoZSBmaXJzdCBzdWJtaXRfYmggY2FuIGJyaW5nIHRoZSBwYWdlIG91dCBvZiB3cml0ZWJhY2suCiAJICogYmUgY2FyZWZ1bCB3aXRoIHRoZSBidWZmZXJzLgogCSAqLwpAQCAtMjQ3Miw4ICsyNDY3LDggQEAKIAlpZiAobnIgPT0gMCkgewogCQkvKgogCQkgKiBpZiB0aGlzIHBhZ2Ugb25seSBoYWQgYSBkaXJlY3QgaXRlbSwgaXQgaXMgdmVyeSBwb3NzaWJsZSBmb3IKLQkJICogbm8gaW8gdG8gYmUgcmVxdWlyZWQgd2l0aG91dCB0aGVyZSBiZWluZyBhbiBlcnJvci4gIE9yLCAKLQkJICogc29tZW9uZSBlbHNlIGNvdWxkIGhhdmUgbG9ja2VkIHRoZW0gYW5kIHNlbnQgdGhlbSBkb3duIHRoZSAKKwkJICogbm8gaW8gdG8gYmUgcmVxdWlyZWQgd2l0aG91dCB0aGVyZSBiZWluZyBhbiBlcnJvci4gIE9yLAorCQkgKiBzb21lb25lIGVsc2UgY291bGQgaGF2ZSBsb2NrZWQgdGhlbSBhbmQgc2VudCB0aGVtIGRvd24gdGhlCiAJCSAqIHBpcGUgd2l0aG91dCBsb2NraW5nIHRoZSBwYWdlCiAJCSAqLwogCQliaCA9IGhlYWQ7CkBAIC0yNDkyLDcgKzI0ODcsNyBAQAogCiAgICAgICBmYWlsOgogCS8qIGNhdGNoZXMgdmFyaW91cyBlcnJvcnMsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIGFueSB2YWxpZCBkaXJ0eSBibG9ja3MKLQkgKiBnZXQgdG8gdGhlIG1lZGlhLiAgVGhlIHBhZ2UgaXMgY3VycmVudGx5IGxvY2tlZCBhbmQgbm90IG1hcmtlZCBmb3IgCisJICogZ2V0IHRvIHRoZSBtZWRpYS4gIFRoZSBwYWdlIGlzIGN1cnJlbnRseSBsb2NrZWQgYW5kIG5vdCBtYXJrZWQgZm9yCiAJICogd3JpdGViYWNrCiAJICovCiAJQ2xlYXJQYWdlVXB0b2RhdGUocGFnZSk7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9pb2N0bC5jIGIvZnMvcmVpc2VyZnMvaW9jdGwuYwppbmRleCA4MzAzMzIwLi4wY2NjM2ZkIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9pb2N0bC5jCisrKyBiL2ZzL3JlaXNlcmZzL2lvY3RsLmMKQEAgLTE4OSw3ICsxODksNyBAQAogCX0KIAogCS8qIHdlIHVucGFjayBieSBmaW5kaW5nIHRoZSBwYWdlIHdpdGggdGhlIHRhaWwsIGFuZCBjYWxsaW5nCi0JICoqIHJlaXNlcmZzX3ByZXBhcmVfd3JpdGUgb24gdGhhdCBwYWdlLiAgVGhpcyB3aWxsIGZvcmNlIGEgCisJICoqIHJlaXNlcmZzX3ByZXBhcmVfd3JpdGUgb24gdGhhdCBwYWdlLiAgVGhpcyB3aWxsIGZvcmNlIGEKIAkgKiogcmVpc2VyZnNfZ2V0X2Jsb2NrIHRvIHVucGFjayB0aGUgdGFpbCBmb3IgdXMuCiAJICovCiAJaW5kZXggPSBpbm9kZS0+aV9zaXplID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9pdGVtX29wcy5jIGIvZnMvcmVpc2VyZnMvaXRlbV9vcHMuYwppbmRleCA5NDc1NTU3Li43MmNiMWNjIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9pdGVtX29wcy5jCisrKyBiL2ZzL3JlaXNlcmZzL2l0ZW1fb3BzLmMKQEAgLTk3LDcgKzk3LDggQEAKIAogc3RhdGljIHZvaWQgc2RfcHJpbnRfdmkoc3RydWN0IHZpcnR1YWxfaXRlbSAqdmkpCiB7Ci0JcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiU1RBVERBVEEsIGluZGV4ICVkLCB0eXBlIDB4JXgsICVoIiwKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy0xNjEwMCIsCisJCQkgIlNUQVREQVRBLCBpbmRleCAlZCwgdHlwZSAweCV4LCAlaCIsCiAJCQkgdmktPnZpX2luZGV4LCB2aS0+dmlfdHlwZSwgdmktPnZpX2loKTsKIH0KIApAQCAtMTkwLDcgKzE5MSw4IEBACiAKIHN0YXRpYyB2b2lkIGRpcmVjdF9wcmludF92aShzdHJ1Y3QgdmlydHVhbF9pdGVtICp2aSkKIHsKLQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJESVJFQ1QsIGluZGV4ICVkLCB0eXBlIDB4JXgsICVoIiwKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy0xNjEwMSIsCisJCQkgIkRJUkVDVCwgaW5kZXggJWQsIHR5cGUgMHgleCwgJWgiLAogCQkJIHZpLT52aV9pbmRleCwgdmktPnZpX3R5cGUsIHZpLT52aV9paCk7CiB9CiAKQEAgLTI3OCw3ICsyODAsNyBAQAogCXVucCA9IChfX2xlMzIgKikgaXRlbTsKIAogCWlmIChpaF9pdGVtX2xlbihpaCkgJSBVTkZNX1BfU0laRSkKLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiaW5kaXJlY3RfcHJpbnRfaXRlbTogaW52YWxpZCBpdGVtIGxlbiIpOworCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy0xNjEwMiIsICJpbnZhbGlkIGl0ZW0gbGVuIik7CiAKIAlwcmludGsoIiVkIHBvaW50ZXJzXG5bICIsIChpbnQpSV9VTkZNX05VTShpaCkpOwogCWZvciAoaiA9IDA7IGogPCBJX1VORk1fTlVNKGloKTsgaisrKSB7CkBAIC0zMzQsNyArMzM2LDggQEAKIAogc3RhdGljIHZvaWQgaW5kaXJlY3RfcHJpbnRfdmkoc3RydWN0IHZpcnR1YWxfaXRlbSAqdmkpCiB7Ci0JcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiSU5ESVJFQ1QsIGluZGV4ICVkLCB0eXBlIDB4JXgsICVoIiwKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy0xNjEwMyIsCisJCQkgIklORElSRUNULCBpbmRleCAlZCwgdHlwZSAweCV4LCAlaCIsCiAJCQkgdmktPnZpX2luZGV4LCB2aS0+dmlfdHlwZSwgdmktPnZpX2loKTsKIH0KIApAQCAtMzU5LDcgKzM2Miw3IEBACiAKIHN0YXRpYyBpbnQgZGlyZW50cnlfYnl0ZXNfbnVtYmVyKHN0cnVjdCBpdGVtX2hlYWQgKmloLCBpbnQgYmxvY2tfc2l6ZSkKIHsKLQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJ2cy0xNjA5MDogZGlyZW50cnlfYnl0ZXNfbnVtYmVyOiAiCisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAidnMtMTYwOTAiLAogCQkJICJieXRlcyBudW1iZXIgaXMgYXNrZWQgZm9yIGRpcmVudHJ5Iik7CiAJcmV0dXJuIDA7CiB9CkBAIC01MTQsOCArNTE3LDkgQEAKIAkJICAgICgoaXNfYWZmZWN0ZWQKIAkJICAgICAgJiYgKHZuLT52bl9tb2RlID09IE1fUEFTVEUKIAkJCSAgfHwgdm4tPnZuX21vZGUgPT0gTV9DVVQpKSA/IGluc2VydF9zaXplIDogMCkpIHsKLQkJCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkJICAgICAgICJ2cy04MDI1OiBzZXRfZW50cnlfc2l6ZXM6IChtb2RlPT0lYywgaW5zZXJ0X3NpemU9PSVkKSwgaW52YWxpZCBsZW5ndGggb2YgZGlyZWN0b3J5IGl0ZW0iLAorCQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgInZzLTgwMjUiLCAiKG1vZGU9PSVjLCAiCisJCQkJICAgICAgICJpbnNlcnRfc2l6ZT09JWQpLCBpbnZhbGlkIGxlbmd0aCBvZiAiCisJCQkJICAgICAgICJkaXJlY3RvcnkgaXRlbSIsCiAJCQkJICAgICAgIHZuLT52bl9tb2RlLCBpbnNlcnRfc2l6ZSk7CiAJCX0KIAl9CkBAIC01NDYsNyArNTUwLDggQEAKIAl9CiAKIAlpZiAoZW50cmllcyA9PSBkaXJfdS0+ZW50cnlfY291bnQpIHsKLQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgImZyZWUgc3BhY2UgJWQsIGVudHJ5X2NvdW50ICVkXG4iLCBmcmVlLAorCQlyZWlzZXJmc19wYW5pYyhOVUxMLCAiaXRlbV9vcHMtMSIsCisJCQkgICAgICAgImZyZWUgc3BhY2UgJWQsIGVudHJ5X2NvdW50ICVkIiwgZnJlZSwKIAkJCSAgICAgICBkaXJfdS0+ZW50cnlfY291bnQpOwogCX0KIApAQCAtNjE0LDcgKzYxOSw4IEBACiAJaW50IGk7CiAJc3RydWN0IGRpcmVudHJ5X3VhcmVhICpkaXJfdSA9IHZpLT52aV91YXJlYTsKIAotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgIkRJUkVOVFJZLCBpbmRleCAlZCwgdHlwZSAweCV4LCAlaCwgZmxhZ3MgMHgleCIsCisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtMTYxMDQiLAorCQkJICJESVJFTlRSWSwgaW5kZXggJWQsIHR5cGUgMHgleCwgJWgsIGZsYWdzIDB4JXgiLAogCQkJIHZpLT52aV9pbmRleCwgdmktPnZpX3R5cGUsIHZpLT52aV9paCwgZGlyX3UtPmZsYWdzKTsKIAlwcmludGsoIiVkIGVudHJpZXM6ICIsIGRpcl91LT5lbnRyeV9jb3VudCk7CiAJZm9yIChpID0gMDsgaSA8IGRpcl91LT5lbnRyeV9jb3VudDsgaSsrKQpAQCAtNjQyLDQzICs2NDgsNDMgQEAKIC8vCiBzdGF0aWMgaW50IGVycmNhdGNoX2J5dGVzX251bWJlcihzdHJ1Y3QgaXRlbV9oZWFkICppaCwgaW50IGJsb2NrX3NpemUpCiB7Ci0JcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJICJncmVlbi0xNjAwMTogSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJncmVlbi0xNjAwMSIsCisJCQkgIkludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGVycmNhdGNoX2RlY3JlbWVudF9rZXkoc3RydWN0IGNwdV9rZXkgKmtleSkKIHsKLQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkgImdyZWVuLTE2MDAyOiBJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOworCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImdyZWVuLTE2MDAyIiwKKwkJCSAiSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKIH0KIAogc3RhdGljIGludCBlcnJjYXRjaF9pc19sZWZ0X21lcmdlYWJsZShzdHJ1Y3QgcmVpc2VyZnNfa2V5ICprZXksCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyBic2l6ZSkKIHsKLQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkgImdyZWVuLTE2MDAzOiBJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOworCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImdyZWVuLTE2MDAzIiwKKwkJCSAiSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZXJyY2F0Y2hfcHJpbnRfaXRlbShzdHJ1Y3QgaXRlbV9oZWFkICppaCwgY2hhciAqaXRlbSkKIHsKLQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkgImdyZWVuLTE2MDA0OiBJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOworCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImdyZWVuLTE2MDA0IiwKKwkJCSAiSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKIH0KIAogc3RhdGljIHZvaWQgZXJyY2F0Y2hfY2hlY2tfaXRlbShzdHJ1Y3QgaXRlbV9oZWFkICppaCwgY2hhciAqaXRlbSkKIHsKLQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkgImdyZWVuLTE2MDA1OiBJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOworCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImdyZWVuLTE2MDA1IiwKKwkJCSAiSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKIH0KIAogc3RhdGljIGludCBlcnJjYXRjaF9jcmVhdGVfdmkoc3RydWN0IHZpcnR1YWxfbm9kZSAqdm4sCiAJCQkgICAgICBzdHJ1Y3QgdmlydHVhbF9pdGVtICp2aSwKIAkJCSAgICAgIGludCBpc19hZmZlY3RlZCwgaW50IGluc2VydF9zaXplKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCSAiZ3JlZW4tMTYwMDY6IEludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiZ3JlZW4tMTYwMDYiLAorCQkJICJJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOwogCXJldHVybiAwOwkJLy8gV2UgbWlnaHQgcmV0dXJuIC0xIGhlcmUgYXMgd2VsbCwgYnV0IGl0IHdvbid0IGhlbHAgYXMgY3JlYXRlX3ZpcnR1YWxfbm9kZSgpIGZyb20gd2hlcmUKIAkvLyB0aGlzIG9wZXJhdGlvbiBpcyBjYWxsZWQgZnJvbSBpcyBvZiByZXR1cm4gdHlwZSB2b2lkLgogfQpAQCAtNjg2LDM2ICs2OTIsMzYgQEAKIHN0YXRpYyBpbnQgZXJyY2F0Y2hfY2hlY2tfbGVmdChzdHJ1Y3QgdmlydHVhbF9pdGVtICp2aSwgaW50IGZyZWUsCiAJCQkgICAgICAgaW50IHN0YXJ0X3NraXAsIGludCBlbmRfc2tpcCkKIHsKLQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkgImdyZWVuLTE2MDA3OiBJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOworCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImdyZWVuLTE2MDA3IiwKKwkJCSAiSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKIAlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyBpbnQgZXJyY2F0Y2hfY2hlY2tfcmlnaHQoc3RydWN0IHZpcnR1YWxfaXRlbSAqdmksIGludCBmcmVlKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCSAiZ3JlZW4tMTYwMDg6IEludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiZ3JlZW4tMTYwMDgiLAorCQkJICJJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOwogCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGludCBlcnJjYXRjaF9wYXJ0X3NpemUoc3RydWN0IHZpcnR1YWxfaXRlbSAqdmksIGludCBmaXJzdCwgaW50IGNvdW50KQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCSAiZ3JlZW4tMTYwMDk6IEludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiZ3JlZW4tMTYwMDkiLAorCQkJICJJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGVycmNhdGNoX3VuaXRfbnVtKHN0cnVjdCB2aXJ0dWFsX2l0ZW0gKnZpKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCSAiZ3JlZW4tMTYwMTA6IEludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiZ3JlZW4tMTYwMTAiLAorCQkJICJJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBlcnJjYXRjaF9wcmludF92aShzdHJ1Y3QgdmlydHVhbF9pdGVtICp2aSkKIHsKLQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkgImdyZWVuLTE2MDExOiBJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOworCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImdyZWVuLTE2MDExIiwKKwkJCSAiSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpdGVtX29wZXJhdGlvbnMgZXJyY2F0Y2hfb3BzID0gewpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvam91cm5hbC5jIGIvZnMvcmVpc2VyZnMvam91cm5hbC5jCmluZGV4IDk2NDNjM2IuLjc3ZjViYjcgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYworKysgYi9mcy9yZWlzZXJmcy9qb3VybmFsLmMKQEAgLTEsMzYgKzEsMzYgQEAKIC8qCiAqKiBXcml0ZSBhaGVhZCBsb2dnaW5nIGltcGxlbWVudGF0aW9uIGNvcHlyaWdodCBDaHJpcyBNYXNvbiAyMDAwCiAqKgotKiogVGhlIGJhY2tncm91bmQgY29tbWl0cyBtYWtlIHRoaXMgY29kZSB2ZXJ5IGludGVyZWxhdGVkLCBhbmQgCisqKiBUaGUgYmFja2dyb3VuZCBjb21taXRzIG1ha2UgdGhpcyBjb2RlIHZlcnkgaW50ZXJlbGF0ZWQsIGFuZAogKiogb3Zlcmx5IGNvbXBsZXguICBJIG5lZWQgdG8gcmV0aGluayB0aGluZ3MgYSBiaXQuLi4uVGhlIG1ham9yIHBsYXllcnM6CiAqKgotKiogam91cm5hbF9iZWdpbiAtLSBjYWxsIHdpdGggdGhlIG51bWJlciBvZiBibG9ja3MgeW91IGV4cGVjdCB0byBsb2cuICAKKyoqIGpvdXJuYWxfYmVnaW4gLS0gY2FsbCB3aXRoIHRoZSBudW1iZXIgb2YgYmxvY2tzIHlvdSBleHBlY3QgdG8gbG9nLgogKiogICAgICAgICAgICAgICAgICBJZiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpcyB0b28KLSoqIAkJICAgIG9sZCwgaXQgd2lsbCBibG9jayB1bnRpbCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpcyAKKyoqIAkJICAgIG9sZCwgaXQgd2lsbCBibG9jayB1bnRpbCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpcwogKiogCQkgICAgZmluaXNoZWQsIGFuZCB0aGVuIHN0YXJ0IGEgbmV3IG9uZS4KLSoqCQkgICAgVXN1YWxseSwgeW91ciB0cmFuc2FjdGlvbiB3aWxsIGdldCBqb2luZWQgaW4gd2l0aCAKKyoqCQkgICAgVXN1YWxseSwgeW91ciB0cmFuc2FjdGlvbiB3aWxsIGdldCBqb2luZWQgaW4gd2l0aAogKiogICAgICAgICAgICAgICAgICBwcmV2aW91cyBvbmVzIGZvciBzcGVlZC4KICoqCi0qKiBqb3VybmFsX2pvaW4gIC0tIHNhbWUgYXMgam91cm5hbF9iZWdpbiwgYnV0IHdvbid0IGJsb2NrIG9uIHRoZSBjdXJyZW50IAorKiogam91cm5hbF9qb2luICAtLSBzYW1lIGFzIGpvdXJuYWxfYmVnaW4sIGJ1dCB3b24ndCBibG9jayBvbiB0aGUgY3VycmVudAogKiogICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbiByZWdhcmRsZXNzIG9mIGFnZS4gIERvbid0IGV2ZXIgY2FsbAotKiogICAgICAgICAgICAgICAgICB0aGlzLiAgRXZlci4gIFRoZXJlIGFyZSBvbmx5IHR3byBwbGFjZXMgaXQgc2hvdWxkIGJlIAorKiogICAgICAgICAgICAgICAgICB0aGlzLiAgRXZlci4gIFRoZXJlIGFyZSBvbmx5IHR3byBwbGFjZXMgaXQgc2hvdWxkIGJlCiAqKiAgICAgICAgICAgICAgICAgIGNhbGxlZCBmcm9tLCBhbmQgdGhleSBhcmUgYm90aCBpbnNpZGUgdGhpcyBmaWxlLgogKioKLSoqIGpvdXJuYWxfbWFya19kaXJ0eSAtLSBhZGRzIGJsb2NrcyBpbnRvIHRoaXMgdHJhbnNhY3Rpb24uICBjbGVhcnMgYW55IGZsYWdzIAorKiogam91cm5hbF9tYXJrX2RpcnR5IC0tIGFkZHMgYmxvY2tzIGludG8gdGhpcyB0cmFuc2FjdGlvbi4gIGNsZWFycyBhbnkgZmxhZ3MKICoqICAgICAgICAgICAgICAgICAgICAgICB0aGF0IG1pZ2h0IG1ha2UgdGhlbSBnZXQgc2VudCB0byBkaXNrCi0qKiAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZW4gbWFya3MgdGhlbSBCSF9KRGlydHkuICBQdXRzIHRoZSBidWZmZXIgaGVhZCAKLSoqICAgICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGhhc2guICAKKyoqICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBtYXJrcyB0aGVtIEJIX0pEaXJ0eS4gIFB1dHMgdGhlIGJ1ZmZlciBoZWFkCisqKiAgICAgICAgICAgICAgICAgICAgICAgaW50byB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBoYXNoLgogKioKICoqIGpvdXJuYWxfZW5kIC0tIGlmIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIGJhdGNoYWJsZSwgaXQgZG9lcyBub3RoaW5nCiAqKiAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UsIGl0IGNvdWxkIGRvIGFuIGFzeW5jL3N5bmNocm9ub3VzIGNvbW1pdCwgb3IKLSoqICAgICAgICAgICAgICAgICAgIGEgZnVsbCBmbHVzaCBvZiBhbGwgbG9nIGFuZCByZWFsIGJsb2NrcyBpbiB0aGUgCisqKiAgICAgICAgICAgICAgICAgICBhIGZ1bGwgZmx1c2ggb2YgYWxsIGxvZyBhbmQgcmVhbCBibG9ja3MgaW4gdGhlCiAqKiAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi4KICoqCi0qKiBmbHVzaF9vbGRfY29tbWl0cyAtLSBpZiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpcyB0b28gb2xkLCBpdCBpcyBlbmRlZCBhbmQgCi0qKiAgICAgICAgICAgICAgICAgICAgICBjb21taXQgYmxvY2tzIGFyZSBzZW50IHRvIGRpc2suICBGb3JjZXMgY29tbWl0IGJsb2NrcyAKLSoqICAgICAgICAgICAgICAgICAgICAgIHRvIGRpc2sgZm9yIGFsbCBiYWNrZ3JvdW5kZWQgY29tbWl0cyB0aGF0IGhhdmUgYmVlbiAKKyoqIGZsdXNoX29sZF9jb21taXRzIC0tIGlmIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIHRvbyBvbGQsIGl0IGlzIGVuZGVkIGFuZAorKiogICAgICAgICAgICAgICAgICAgICAgY29tbWl0IGJsb2NrcyBhcmUgc2VudCB0byBkaXNrLiAgRm9yY2VzIGNvbW1pdCBibG9ja3MKKyoqICAgICAgICAgICAgICAgICAgICAgIHRvIGRpc2sgZm9yIGFsbCBiYWNrZ3JvdW5kZWQgY29tbWl0cyB0aGF0IGhhdmUgYmVlbgogKiogICAgICAgICAgICAgICAgICAgICAgYXJvdW5kIHRvbyBsb25nLgotKioJCSAgICAgLS0gTm90ZSwgaWYgeW91IGNhbGwgdGhpcyBhcyBhbiBpbW1lZGlhdGUgZmx1c2ggZnJvbSAKKyoqCQkgICAgIC0tIE5vdGUsIGlmIHlvdSBjYWxsIHRoaXMgYXMgYW4gaW1tZWRpYXRlIGZsdXNoIGZyb20KICoqCQkgICAgICAgIGZyb20gd2l0aGluIGt1cGRhdGUsIGl0IHdpbGwgaWdub3JlIHRoZSBpbW1lZGlhdGUgZmxhZwogKi8KIApAQCAtOTcsNyArOTcsNyBAQAogCQkJICAgICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpqbCwgaW50IGZsdXNoYWxsKTsKIHN0YXRpYyBpbnQgY2FuX2RpcnR5KHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpjbik7CiBzdGF0aWMgaW50IGpvdXJuYWxfam9pbihzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJCXN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MpOworCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzKTsKIHN0YXRpYyBpbnQgcmVsZWFzZV9qb3VybmFsX2RldihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnN1cGVyLAogCQkJICAgICAgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsKTsKIHN0YXRpYyBpbnQgZGlydHlfb25lX3RyYW5zYWN0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqcywKQEAgLTExMywxMiArMTEzLDEyIEBACiB9OwogCiBzdGF0aWMgaW50IGRvX2pvdXJuYWxfYmVnaW5fcihzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJCSAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorCQkJICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbmJsb2NrcywgaW50IGpvaW4pOwogCi1zdGF0aWMgdm9pZCBpbml0X2pvdXJuYWxfaGFzaChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKK3N0YXRpYyB2b2lkIGluaXRfam91cm5hbF9oYXNoKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAltZW1zZXQoam91cm5hbC0+al9oYXNoX3RhYmxlLCAwLAogCSAgICAgICBKT1VSTkFMX0hBU0hfU0laRSAqIHNpemVvZihzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqKSk7CiB9CkBAIC0xNDUsNyArMTQ1LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCByZWlzZXJmc19iaXRtYXBfbm9kZSAqYWxsb2NhdGVfYml0bWFwX25vZGUoc3RydWN0IHN1cGVyX2Jsb2NrCi0JCQkJCQkJICpwX3Nfc2IpCisJCQkJCQkJICpzYikKIHsKIAlzdHJ1Y3QgcmVpc2VyZnNfYml0bWFwX25vZGUgKmJuOwogCXN0YXRpYyBpbnQgaWQ7CkBAIC0xNTQsNyArMTU0LDcgQEAKIAlpZiAoIWJuKSB7CiAJCXJldHVybiBOVUxMOwogCX0KLQlibi0+ZGF0YSA9IGt6YWxsb2MocF9zX3NiLT5zX2Jsb2Nrc2l6ZSwgR0ZQX05PRlMpOworCWJuLT5kYXRhID0ga3phbGxvYyhzYi0+c19ibG9ja3NpemUsIEdGUF9OT0ZTKTsKIAlpZiAoIWJuLT5kYXRhKSB7CiAJCWtmcmVlKGJuKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0xNjQsOSArMTY0LDkgQEAKIAlyZXR1cm4gYm47CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcmVpc2VyZnNfYml0bWFwX25vZGUgKmdldF9iaXRtYXBfbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKK3N0YXRpYyBzdHJ1Y3QgcmVpc2VyZnNfYml0bWFwX25vZGUgKmdldF9iaXRtYXBfbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9ub2RlICpibiA9IE5VTEw7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnkgPSBqb3VybmFsLT5qX2JpdG1hcF9ub2Rlcy5uZXh0OwogCkBAIC0xNzYsMjEgKzE3NiwyMSBAQAogCWlmIChlbnRyeSAhPSAmam91cm5hbC0+al9iaXRtYXBfbm9kZXMpIHsKIAkJYm4gPSBsaXN0X2VudHJ5KGVudHJ5LCBzdHJ1Y3QgcmVpc2VyZnNfYml0bWFwX25vZGUsIGxpc3QpOwogCQlsaXN0X2RlbChlbnRyeSk7Ci0JCW1lbXNldChibi0+ZGF0YSwgMCwgcF9zX3NiLT5zX2Jsb2Nrc2l6ZSk7CisJCW1lbXNldChibi0+ZGF0YSwgMCwgc2ItPnNfYmxvY2tzaXplKTsKIAkJam91cm5hbC0+al9mcmVlX2JpdG1hcF9ub2Rlcy0tOwogCQlyZXR1cm4gYm47CiAJfQotCWJuID0gYWxsb2NhdGVfYml0bWFwX25vZGUocF9zX3NiKTsKKwlibiA9IGFsbG9jYXRlX2JpdG1hcF9ub2RlKHNiKTsKIAlpZiAoIWJuKSB7CiAJCXlpZWxkKCk7CiAJCWdvdG8gcmVwZWF0OwogCX0KIAlyZXR1cm4gYm47CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9iaXRtYXBfbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2JpdG1hcF9ub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgIHN0cnVjdCByZWlzZXJmc19iaXRtYXBfbm9kZSAqYm4pCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAlqb3VybmFsLT5qX3VzZWRfYml0bWFwX25vZGVzLS07CiAJaWYgKGpvdXJuYWwtPmpfZnJlZV9iaXRtYXBfbm9kZXMgPiBSRUlTRVJGU19NQVhfQklUTUFQX05PREVTKSB7CiAJCWtmcmVlKGJuLT5kYXRhKTsKQEAgLTIwMSw0NiArMjAxLDQ2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhbGxvY2F0ZV9iaXRtYXBfbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IpCitzdGF0aWMgdm9pZCBhbGxvY2F0ZV9iaXRtYXBfbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXN0cnVjdCByZWlzZXJmc19iaXRtYXBfbm9kZSAqYm4gPSBOVUxMOwogCWZvciAoaSA9IDA7IGkgPCBSRUlTRVJGU19NSU5fQklUTUFQX05PREVTOyBpKyspIHsKLQkJYm4gPSBhbGxvY2F0ZV9iaXRtYXBfbm9kZShwX3Nfc2IpOworCQlibiA9IGFsbG9jYXRlX2JpdG1hcF9ub2RlKHNiKTsKIAkJaWYgKGJuKSB7CiAJCQlsaXN0X2FkZCgmYm4tPmxpc3QsICZqb3VybmFsLT5qX2JpdG1hcF9ub2Rlcyk7CiAJCQlqb3VybmFsLT5qX2ZyZWVfYml0bWFwX25vZGVzKys7CiAJCX0gZWxzZSB7Ci0JCQlicmVhazsJLy8gdGhpcyBpcyBvaywgd2UnbGwgdHJ5IGFnYWluIHdoZW4gbW9yZSBhcmUgbmVlZGVkIAorCQkJYnJlYWs7CS8qIHRoaXMgaXMgb2ssIHdlJ2xsIHRyeSBhZ2FpbiB3aGVuIG1vcmUgYXJlIG5lZWRlZCAqLwogCQl9CiAJfQogfQogCi1zdGF0aWMgaW50IHNldF9iaXRfaW5fbGlzdF9iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgaW50IHNldF9iaXRfaW5fbGlzdF9iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgIGJfYmxvY2tucl90IGJsb2NrLAogCQkJCSAgc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICpqYikKIHsKLQl1bnNpZ25lZCBpbnQgYm1hcF9uciA9IGJsb2NrIC8gKHBfc19zYi0+c19ibG9ja3NpemUgPDwgMyk7Ci0JdW5zaWduZWQgaW50IGJpdF9uciA9IGJsb2NrICUgKHBfc19zYi0+c19ibG9ja3NpemUgPDwgMyk7CisJdW5zaWduZWQgaW50IGJtYXBfbnIgPSBibG9jayAvIChzYi0+c19ibG9ja3NpemUgPDwgMyk7CisJdW5zaWduZWQgaW50IGJpdF9uciA9IGJsb2NrICUgKHNiLT5zX2Jsb2Nrc2l6ZSA8PCAzKTsKIAogCWlmICghamItPmJpdG1hcHNbYm1hcF9ucl0pIHsKLQkJamItPmJpdG1hcHNbYm1hcF9ucl0gPSBnZXRfYml0bWFwX25vZGUocF9zX3NiKTsKKwkJamItPmJpdG1hcHNbYm1hcF9ucl0gPSBnZXRfYml0bWFwX25vZGUoc2IpOwogCX0KIAlzZXRfYml0KGJpdF9uciwgKHVuc2lnbmVkIGxvbmcgKilqYi0+Yml0bWFwc1tibWFwX25yXS0+ZGF0YSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFudXBfYml0bWFwX2xpc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgdm9pZCBjbGVhbnVwX2JpdG1hcF9saXN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICpqYikKIHsKIAlpbnQgaTsKIAlpZiAoamItPmJpdG1hcHMgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JZm9yIChpID0gMDsgaSA8IHJlaXNlcmZzX2JtYXBfY291bnQocF9zX3NiKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHJlaXNlcmZzX2JtYXBfY291bnQoc2IpOyBpKyspIHsKIAkJaWYgKGpiLT5iaXRtYXBzW2ldKSB7Ci0JCQlmcmVlX2JpdG1hcF9ub2RlKHBfc19zYiwgamItPmJpdG1hcHNbaV0pOworCQkJZnJlZV9iaXRtYXBfbm9kZShzYiwgamItPmJpdG1hcHNbaV0pOwogCQkJamItPmJpdG1hcHNbaV0gPSBOVUxMOwogCQl9CiAJfQpAQCAtMjQ5LDcgKzI0OSw3IEBACiAvKgogKiogb25seSBjYWxsIHRoaXMgb24gRlMgdW5tb3VudC4KICovCi1zdGF0aWMgaW50IGZyZWVfbGlzdF9iaXRtYXBzKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIGludCBmcmVlX2xpc3RfYml0bWFwcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJICAgICBzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKmpiX2FycmF5KQogewogCWludCBpOwpAQCAtMjU3LDE2ICsyNTcsMTYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgSk9VUk5BTF9OVU1fQklUTUFQUzsgaSsrKSB7CiAJCWpiID0gamJfYXJyYXkgKyBpOwogCQlqYi0+am91cm5hbF9saXN0ID0gTlVMTDsKLQkJY2xlYW51cF9iaXRtYXBfbGlzdChwX3Nfc2IsIGpiKTsKKwkJY2xlYW51cF9iaXRtYXBfbGlzdChzYiwgamIpOwogCQl2ZnJlZShqYi0+Yml0bWFwcyk7CiAJCWpiLT5iaXRtYXBzID0gTlVMTDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZnJlZV9iaXRtYXBfbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IpCitzdGF0aWMgaW50IGZyZWVfYml0bWFwX25vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0ID0gam91cm5hbC0+al9iaXRtYXBfbm9kZXMubmV4dDsKIAlzdHJ1Y3QgcmVpc2VyZnNfYml0bWFwX25vZGUgKmJuOwogCkBAIC0yODMsMTAgKzI4MywxMCBAQAogfQogCiAvKgotKiogZ2V0IG1lbW9yeSBmb3IgSk9VUk5BTF9OVU1fQklUTUFQUyB3b3J0aCBvZiBiaXRtYXBzLiAKKyoqIGdldCBtZW1vcnkgZm9yIEpPVVJOQUxfTlVNX0JJVE1BUFMgd29ydGggb2YgYml0bWFwcy4KICoqIGpiX2FycmF5IGlzIHRoZSBhcnJheSB0byBiZSBmaWxsZWQgaW4uCiAqLwotaW50IHJlaXNlcmZzX2FsbG9jYXRlX2xpc3RfYml0bWFwcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK2ludCByZWlzZXJmc19hbGxvY2F0ZV9saXN0X2JpdG1hcHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICBzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKmpiX2FycmF5LAogCQkJCSAgIHVuc2lnbmVkIGludCBibWFwX25yKQogewpAQCAtMzAwLDMwICszMDAsMzAgQEAKIAkJamItPmpvdXJuYWxfbGlzdCA9IE5VTEw7CiAJCWpiLT5iaXRtYXBzID0gdm1hbGxvYyhtZW0pOwogCQlpZiAoIWpiLT5iaXRtYXBzKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJICJjbG0tMjAwMCwgdW5hYmxlIHRvIGFsbG9jYXRlIGJpdG1hcHMgZm9yIGpvdXJuYWwgbGlzdHMiKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJjbG0tMjAwMCIsICJ1bmFibGUgdG8gIgorCQkJCQkgImFsbG9jYXRlIGJpdG1hcHMgZm9yIGpvdXJuYWwgbGlzdHMiKTsKIAkJCWZhaWxlZCA9IDE7CiAJCQlicmVhazsKIAkJfQogCQltZW1zZXQoamItPmJpdG1hcHMsIDAsIG1lbSk7CiAJfQogCWlmIChmYWlsZWQpIHsKLQkJZnJlZV9saXN0X2JpdG1hcHMocF9zX3NiLCBqYl9hcnJheSk7CisJCWZyZWVfbGlzdF9iaXRtYXBzKHNiLCBqYl9hcnJheSk7CiAJCXJldHVybiAtMTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKIC8qCi0qKiBmaW5kIGFuIGF2YWlsYWJsZSBsaXN0IGJpdG1hcC4gIElmIHlvdSBjYW4ndCBmaW5kIG9uZSwgZmx1c2ggYSBjb21taXQgbGlzdCAKKyoqIGZpbmQgYW4gYXZhaWxhYmxlIGxpc3QgYml0bWFwLiAgSWYgeW91IGNhbid0IGZpbmQgb25lLCBmbHVzaCBhIGNvbW1pdCBsaXN0CiAqKiBhbmQgdHJ5IGFnYWluCiAqLwotc3RhdGljIHN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCAqZ2V0X2xpc3RfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIHN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCAqZ2V0X2xpc3RfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJCQkgICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdAogCQkJCQkJICAgICpqbCkKIHsKIAlpbnQgaSwgajsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCAqamIgPSBOVUxMOwogCiAJZm9yIChqID0gMDsgaiA8IChKT1VSTkFMX05VTV9CSVRNQVBTICogMyk7IGorKykgewpAQCAtMzMxLDcgKzMzMSw3IEBACiAJCWpvdXJuYWwtPmpfbGlzdF9iaXRtYXBfaW5kZXggPSAoaSArIDEpICUgSk9VUk5BTF9OVU1fQklUTUFQUzsKIAkJamIgPSBqb3VybmFsLT5qX2xpc3RfYml0bWFwICsgaTsKIAkJaWYgKGpvdXJuYWwtPmpfbGlzdF9iaXRtYXBbaV0uam91cm5hbF9saXN0KSB7Ci0JCQlmbHVzaF9jb21taXRfbGlzdChwX3Nfc2IsCisJCQlmbHVzaF9jb21taXRfbGlzdChzYiwKIAkJCQkJICBqb3VybmFsLT5qX2xpc3RfYml0bWFwW2ldLgogCQkJCQkgIGpvdXJuYWxfbGlzdCwgMSk7CiAJCQlpZiAoIWpvdXJuYWwtPmpfbGlzdF9iaXRtYXBbaV0uam91cm5hbF9saXN0KSB7CkBAIC0zNDgsNyArMzQ4LDcgQEAKIAlyZXR1cm4gamI7CiB9CiAKLS8qIAorLyoKICoqIGFsbG9jYXRlcyBhIG5ldyBjaHVuayBvZiBYIG5vZGVzLCBhbmQgbGlua3MgdGhlbSBhbGwgdG9nZXRoZXIgYXMgYSBsaXN0LgogKiogVXNlcyB0aGUgY25vZGUtPm5leHQgYW5kIGNub2RlLT5wcmV2IHBvaW50ZXJzCiAqKiByZXR1cm5zIE5VTEwgb24gZmFpbHVyZQpAQCAtMzc2LDE0ICszNzYsMTQgQEAKIH0KIAogLyoKLSoqIHB1bGxzIGEgY25vZGUgb2ZmIHRoZSBmcmVlIGxpc3QsIG9yIHJldHVybnMgTlVMTCBvbiBmYWlsdXJlIAorKiogcHVsbHMgYSBjbm9kZSBvZmYgdGhlIGZyZWUgbGlzdCwgb3IgcmV0dXJucyBOVUxMIG9uIGZhaWx1cmUKICovCi1zdGF0aWMgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmdldF9jbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKK3N0YXRpYyBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqZ2V0X2Nub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmNuOwotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAKLQlyZWlzZXJmc19jaGVja19sb2NrX2RlcHRoKHBfc19zYiwgImdldF9jbm9kZSIpOworCXJlaXNlcmZzX2NoZWNrX2xvY2tfZGVwdGgoc2IsICJnZXRfY25vZGUiKTsKIAogCWlmIChqb3VybmFsLT5qX2Nub2RlX2ZyZWUgPD0gMCkgewogCQlyZXR1cm4gTlVMTDsKQEAgLTQwMywxNCArNDAzLDE0IEBACiB9CiAKIC8qCi0qKiByZXR1cm5zIGEgY25vZGUgdG8gdGhlIGZyZWUgbGlzdCAKKyoqIHJldHVybnMgYSBjbm9kZSB0byB0aGUgZnJlZSBsaXN0CiAqLwotc3RhdGljIHZvaWQgZnJlZV9jbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyB2b2lkIGZyZWVfY25vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJICAgICAgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpjbikKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCi0JcmVpc2VyZnNfY2hlY2tfbG9ja19kZXB0aChwX3Nfc2IsICJmcmVlX2Nub2RlIik7CisJcmVpc2VyZnNfY2hlY2tfbG9ja19kZXB0aChzYiwgImZyZWVfY25vZGUiKTsKIAogCWpvdXJuYWwtPmpfY25vZGVfdXNlZC0tOwogCWpvdXJuYWwtPmpfY25vZGVfZnJlZSsrOwpAQCAtNDM2LDggKzQzNiw4IEBACiB7CiAjaWZkZWYgQ09ORklHX1NNUAogCWlmIChjdXJyZW50LT5sb2NrX2RlcHRoIDwgMCkgewotCQlyZWlzZXJmc19wYW5pYyhzYiwgIiVzIGNhbGxlZCB3aXRob3V0IGtlcm5lbCBsb2NrIGhlbGQiLAotCQkJICAgICAgIGNhbGxlcik7CisJCXJlaXNlcmZzX3BhbmljKHNiLCAiam91cm5hbC0xIiwgIiVzIGNhbGxlZCB3aXRob3V0IGtlcm5lbCAiCisJCQkgICAgICAgImxvY2sgaGVsZCIsIGNhbGxlcik7CiAJfQogI2Vsc2UKIAk7CkBAIC00ODEsMTEgKzQ4MSwxMSBAQAogKiogcmVqZWN0IGl0IG9uIHRoZSBuZXh0IGNhbGwgdG8gcmVpc2VyZnNfaW5fam91cm5hbAogKioKICovCi1pbnQgcmVpc2VyZnNfaW5fam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK2ludCByZWlzZXJmc19pbl9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQl1bnNpZ25lZCBpbnQgYm1hcF9uciwgaW50IGJpdF9uciwgaW50IHNlYXJjaF9hbGwsCiAJCQliX2Jsb2NrbnJfdCAqIG5leHRfemVyb19iaXQpCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqY247CiAJc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICpqYjsKIAlpbnQgaTsKQEAgLTQ5MywxNCArNDkzLDE0IEBACiAKIAkqbmV4dF96ZXJvX2JpdCA9IDA7CS8qIGFsd2F5cyBzdGFydCB0aGlzIGF0IHplcm8uICovCiAKLQlQUk9DX0lORk9fSU5DKHBfc19zYiwgam91cm5hbC5pbl9qb3VybmFsKTsKKwlQUk9DX0lORk9fSU5DKHNiLCBqb3VybmFsLmluX2pvdXJuYWwpOwogCS8qIElmIHdlIGFyZW4ndCBkb2luZyBhIHNlYXJjaF9hbGwsIHRoaXMgaXMgYSBtZXRhYmxvY2ssIGFuZCBpdCB3aWxsIGJlIGxvZ2dlZCBiZWZvcmUgdXNlLgogCSAqKiBpZiB3ZSBjcmFzaCBiZWZvcmUgdGhlIHRyYW5zYWN0aW9uIHRoYXQgZnJlZWQgaXQgY29tbWl0cywgIHRoaXMgdHJhbnNhY3Rpb24gd29uJ3QKIAkgKiogaGF2ZSBjb21taXR0ZWQgZWl0aGVyLCBhbmQgdGhlIGJsb2NrIHdpbGwgbmV2ZXIgYmUgd3JpdHRlbgogCSAqLwogCWlmIChzZWFyY2hfYWxsKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBKT1VSTkFMX05VTV9CSVRNQVBTOyBpKyspIHsKLQkJCVBST0NfSU5GT19JTkMocF9zX3NiLCBqb3VybmFsLmluX2pvdXJuYWxfYml0bWFwKTsKKwkJCVBST0NfSU5GT19JTkMoc2IsIGpvdXJuYWwuaW5fam91cm5hbF9iaXRtYXApOwogCQkJamIgPSBqb3VybmFsLT5qX2xpc3RfYml0bWFwICsgaTsKIAkJCWlmIChqYi0+am91cm5hbF9saXN0ICYmIGpiLT5iaXRtYXBzW2JtYXBfbnJdICYmCiAJCQkgICAgdGVzdF9iaXQoYml0X25yLApAQCAtNTEwLDI4ICs1MTAsMjggQEAKIAkJCQkgICAgZmluZF9uZXh0X3plcm9fYml0KCh1bnNpZ25lZCBsb25nICopCiAJCQkJCQkgICAgICAgKGpiLT5iaXRtYXBzW2JtYXBfbnJdLT4KIAkJCQkJCQlkYXRhKSwKLQkJCQkJCSAgICAgICBwX3Nfc2ItPnNfYmxvY2tzaXplIDw8IDMsCisJCQkJCQkgICAgICAgc2ItPnNfYmxvY2tzaXplIDw8IDMsCiAJCQkJCQkgICAgICAgYml0X25yICsgMSk7CiAJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCX0KIAl9CiAKLQlibCA9IGJtYXBfbnIgKiAocF9zX3NiLT5zX2Jsb2Nrc2l6ZSA8PCAzKSArIGJpdF9ucjsKKwlibCA9IGJtYXBfbnIgKiAoc2ItPnNfYmxvY2tzaXplIDw8IDMpICsgYml0X25yOwogCS8qIGlzIGl0IGluIGFueSBvbGQgdHJhbnNhY3Rpb25zPyAqLwogCWlmIChzZWFyY2hfYWxsCiAJICAgICYmIChjbiA9Ci0JCWdldF9qb3VybmFsX2hhc2hfZGV2KHBfc19zYiwgam91cm5hbC0+al9saXN0X2hhc2hfdGFibGUsIGJsKSkpIHsKKwkJZ2V0X2pvdXJuYWxfaGFzaF9kZXYoc2IsIGpvdXJuYWwtPmpfbGlzdF9oYXNoX3RhYmxlLCBibCkpKSB7CiAJCXJldHVybiAxOwogCX0KIAogCS8qIGlzIGl0IGluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLiAgVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovCi0JaWYgKChjbiA9IGdldF9qb3VybmFsX2hhc2hfZGV2KHBfc19zYiwgam91cm5hbC0+al9oYXNoX3RhYmxlLCBibCkpKSB7CisJaWYgKChjbiA9IGdldF9qb3VybmFsX2hhc2hfZGV2KHNiLCBqb3VybmFsLT5qX2hhc2hfdGFibGUsIGJsKSkpIHsKIAkJQlVHKCk7CiAJCXJldHVybiAxOwogCX0KIAotCVBST0NfSU5GT19JTkMocF9zX3NiLCBqb3VybmFsLmluX2pvdXJuYWxfcmV1c2FibGUpOworCVBST0NfSU5GT19JTkMoc2IsIGpvdXJuYWwuaW5fam91cm5hbF9yZXVzYWJsZSk7CiAJLyogc2FmZSBmb3IgcmV1c2UgKi8KIAlyZXR1cm4gMDsKIH0KQEAgLTU1MywxNiArNTUzLDE2IEBACiB9CiAKIC8qIGxvY2sgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IpCitzdGF0aWMgaW5saW5lIHZvaWQgbG9ja19qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0JUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGpvdXJuYWwubG9ja19qb3VybmFsKTsKLQltdXRleF9sb2NrKCZTQl9KT1VSTkFMKHBfc19zYiktPmpfbXV0ZXgpOworCVBST0NfSU5GT19JTkMoc2IsIGpvdXJuYWwubG9ja19qb3VybmFsKTsKKwltdXRleF9sb2NrKCZTQl9KT1VSTkFMKHNiKS0+al9tdXRleCk7CiB9CiAKIC8qIHVubG9jayB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiAqLwotc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKQorc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0JbXV0ZXhfdW5sb2NrKCZTQl9KT1VSTkFMKHBfc19zYiktPmpfbXV0ZXgpOworCW11dGV4X3VubG9jaygmU0JfSk9VUk5BTChzYiktPmpfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2pvdXJuYWxfbGlzdChzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpqbCkKQEAgLTU3NCw3ICs1NzQsNyBAQAogCQkJCSAgICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpqbCkKIHsKIAlpZiAoamwtPmpfcmVmY291bnQgPCAxKSB7Ci0JCXJlaXNlcmZzX3BhbmljKHMsICJ0cmFucyBpZCAlbHUsIHJlZmNvdW50IGF0ICVkIiwKKwkJcmVpc2VyZnNfcGFuaWMocywgImpvdXJuYWwtMiIsICJ0cmFucyBpZCAldSwgcmVmY291bnQgYXQgJWQiLAogCQkJICAgICAgIGpsLT5qX3RyYW5zX2lkLCBqbC0+al9yZWZjb3VudCk7CiAJfQogCWlmICgtLWpsLT5qX3JlZmNvdW50ID09IDApCkBAIC01ODYsMjAgKzU4NiwyMCBAQAogKiogaXQgZ2V0cyBjYWxsZWQgYnkgZmx1c2hfY29tbWl0X2xpc3QsIGFuZCBjbGVhbnMgdXAgYW55IGRhdGEgc3RvcmVkIGFib3V0IGJsb2NrcyBmcmVlZCBkdXJpbmcgYQogKiogdHJhbnNhY3Rpb24uCiAqLwotc3RhdGljIHZvaWQgY2xlYW51cF9mcmVlZF9mb3Jfam91cm5hbF9saXN0KHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIHZvaWQgY2xlYW51cF9mcmVlZF9mb3Jfam91cm5hbF9saXN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJCSAgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpsKQogewogCiAJc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICpqYiA9IGpsLT5qX2xpc3RfYml0bWFwOwogCWlmIChqYikgewotCQljbGVhbnVwX2JpdG1hcF9saXN0KHBfc19zYiwgamIpOworCQljbGVhbnVwX2JpdG1hcF9saXN0KHNiLCBqYik7CiAJfQogCWpsLT5qX2xpc3RfYml0bWFwLT5qb3VybmFsX2xpc3QgPSBOVUxMOwogCWpsLT5qX2xpc3RfYml0bWFwID0gTlVMTDsKIH0KIAogc3RhdGljIGludCBqb3VybmFsX2xpc3Rfc3RpbGxfYWxpdmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIHRyYW5zX2lkKQorCQkJCSAgICB1bnNpZ25lZCBpbnQgdHJhbnNfaWQpCiB7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHMpOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5ID0gJmpvdXJuYWwtPmpfam91cm5hbF9saXN0OwpAQCAtNjQ0LDggKzY0NCw4IEBACiAJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCiAJaWYgKGJ1ZmZlcl9qb3VybmFsZWQoYmgpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkgImNsbS0yMDg0OiBwaW5uZWQgYnVmZmVyICVsdTolcyBzZW50IHRvIGRpc2siLAorCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJjbG0tMjA4NCIsCisJCQkJICJwaW5uZWQgYnVmZmVyICVsdTolcyBzZW50IHRvIGRpc2siLAogCQkJCSBiaC0+Yl9ibG9ja25yLCBiZGV2bmFtZShiaC0+Yl9iZGV2LCBiKSk7CiAJfQogCWlmICh1cHRvZGF0ZSkKQEAgLTkzMyw5ICs5MzMsOSBAQAogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKm90aGVyX2psOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmZpcnN0X2psOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgdHJhbnNfaWQgPSBqbC0+al90cmFuc19pZDsKLQl1bnNpZ25lZCBsb25nIG90aGVyX3RyYW5zX2lkOwotCXVuc2lnbmVkIGxvbmcgZmlyc3RfdHJhbnNfaWQ7CisJdW5zaWduZWQgaW50IHRyYW5zX2lkID0gamwtPmpfdHJhbnNfaWQ7CisJdW5zaWduZWQgaW50IG90aGVyX3RyYW5zX2lkOworCXVuc2lnbmVkIGludCBmaXJzdF90cmFuc19pZDsKIAogICAgICAgZmluZF9maXJzdDoKIAkvKgpAQCAtMTAxNCw3ICsxMDE0LDcgQEAKIAlpbnQgaTsKIAliX2Jsb2NrbnJfdCBibjsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRiaCA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyB0cmFuc19pZCA9IGpsLT5qX3RyYW5zX2lkOworCXVuc2lnbmVkIGludCB0cmFuc19pZCA9IGpsLT5qX3RyYW5zX2lkOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzKTsKIAlpbnQgYmFycmllciA9IDA7CiAJaW50IHJldHZhbCA9IDA7CkBAIC0xMTIyLDcgKzExMjIsOCBAQAogCQkJc3luY19kaXJ0eV9idWZmZXIodGJoKTsKIAkJaWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUodGJoKSkpIHsKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywgImpvdXJuYWwtNjAxLCBidWZmZXIgd3JpdGUgZmFpbGVkIik7CisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJqb3VybmFsLTYwMSIsCisJCQkJCSAiYnVmZmVyIHdyaXRlIGZhaWxlZCIpOwogI2VuZGlmCiAJCQlyZXR2YWwgPSAtRUlPOwogCQl9CkBAIC0xMTU0LDE0ICsxMTU1LDE0IEBACiAJICogdXAgcHJvcGFnYXRpbmcgdGhlIHdyaXRlIGVycm9yIG91dCB0byB0aGUgZmlsZXN5c3RlbS4gKi8KIAlpZiAodW5saWtlbHkoIWJ1ZmZlcl91cHRvZGF0ZShqbC0+al9jb21taXRfYmgpKSkgewogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotCQlyZWlzZXJmc193YXJuaW5nKHMsICJqb3VybmFsLTYxNTogYnVmZmVyIHdyaXRlIGZhaWxlZCIpOworCQlyZWlzZXJmc193YXJuaW5nKHMsICJqb3VybmFsLTYxNSIsICJidWZmZXIgd3JpdGUgZmFpbGVkIik7CiAjZW5kaWYKIAkJcmV0dmFsID0gLUVJTzsKIAl9CiAJYmZvcmdldChqbC0+al9jb21taXRfYmgpOwogCWlmIChqb3VybmFsLT5qX2xhc3RfY29tbWl0X2lkICE9IDAgJiYKIAkgICAgKGpsLT5qX3RyYW5zX2lkIC0gam91cm5hbC0+al9sYXN0X2NvbW1pdF9pZCkgIT0gMSkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsICJjbG0tMjIwMDogbGFzdCBjb21taXQgJWx1LCBjdXJyZW50ICVsdSIsCisJCXJlaXNlcmZzX3dhcm5pbmcocywgImNsbS0yMjAwIiwgImxhc3QgY29tbWl0ICVsdSwgY3VycmVudCAlbHUiLAogCQkJCSBqb3VybmFsLT5qX2xhc3RfY29tbWl0X2lkLCBqbC0+al90cmFuc19pZCk7CiAJfQogCWpvdXJuYWwtPmpfbGFzdF9jb21taXRfaWQgPSBqbC0+al90cmFuc19pZDsKQEAgLTExOTEsOCArMTE5Miw4IEBACiB9CiAKIC8qCi0qKiBmbHVzaF9qb3VybmFsX2xpc3QgZnJlcXVlbnRseSBuZWVkcyB0byBmaW5kIGEgbmV3ZXIgdHJhbnNhY3Rpb24gZm9yIGEgZ2l2ZW4gYmxvY2suICBUaGlzIGRvZXMgdGhhdCwgb3IgCi0qKiByZXR1cm5zIE5VTEwgaWYgaXQgY2FuJ3QgZmluZCBhbnl0aGluZyAKKyoqIGZsdXNoX2pvdXJuYWxfbGlzdCBmcmVxdWVudGx5IG5lZWRzIHRvIGZpbmQgYSBuZXdlciB0cmFuc2FjdGlvbiBmb3IgYSBnaXZlbiBibG9jay4gIFRoaXMgZG9lcyB0aGF0LCBvcgorKiogcmV0dXJucyBOVUxMIGlmIGl0IGNhbid0IGZpbmQgYW55dGhpbmcKICovCiBzdGF0aWMgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqZmluZF9uZXdlcl9qbF9mb3JfY24oc3RydWN0CiAJCQkJCQkJICByZWlzZXJmc19qb3VybmFsX2Nub2RlCkBAIC0xMjM2LDExICsxMjM3LDExIEBACiAqKiBqb3VybmFsIGxpc3QgZm9yIHRoaXMgdHJhbnNhY3Rpb24uICBBc2lkZSBmcm9tIGZyZWVpbmcgdGhlIGNub2RlLCB0aGlzIGFsc28gYWxsb3dzIHRoZQogKiogYmxvY2sgdG8gYmUgcmVhbGxvY2F0ZWQgZm9yIGRhdGEgYmxvY2tzIGlmIGl0IGhhZCBiZWVuIGRlbGV0ZWQuCiAqLwotc3RhdGljIHZvaWQgcmVtb3ZlX2FsbF9mcm9tX2pvdXJuYWxfbGlzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyB2b2lkIHJlbW92ZV9hbGxfZnJvbV9qb3VybmFsX2xpc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpsLAogCQkJCQkgaW50IGRlYnVnKQogewotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmNuLCAqbGFzdDsKIAljbiA9IGpsLT5qX3JlYWxibG9jazsKIApAQCAtMTI1MCwxOCArMTI1MSwxOCBAQAogCXdoaWxlIChjbikgewogCQlpZiAoY24tPmJsb2NrbnIgIT0gMCkgewogCQkJaWYgKGRlYnVnKSB7Ci0JCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCisJCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgInJlaXNlcmZzLTIyMDEiLAogCQkJCQkJICJibG9jayAldSwgYmggaXMgJWQsIHN0YXRlICVsZCIsCiAJCQkJCQkgY24tPmJsb2NrbnIsIGNuLT5iaCA/IDEgOiAwLAogCQkJCQkJIGNuLT5zdGF0ZSk7CiAJCQl9CiAJCQljbi0+c3RhdGUgPSAwOwotCQkJcmVtb3ZlX2pvdXJuYWxfaGFzaChwX3Nfc2IsIGpvdXJuYWwtPmpfbGlzdF9oYXNoX3RhYmxlLAorCQkJcmVtb3ZlX2pvdXJuYWxfaGFzaChzYiwgam91cm5hbC0+al9saXN0X2hhc2hfdGFibGUsCiAJCQkJCSAgICBqbCwgY24tPmJsb2NrbnIsIDEpOwogCQl9CiAJCWxhc3QgPSBjbjsKIAkJY24gPSBjbi0+bmV4dDsKLQkJZnJlZV9jbm9kZShwX3Nfc2IsIGxhc3QpOworCQlmcmVlX2Nub2RlKHNiLCBsYXN0KTsKIAl9CiAJamwtPmpfcmVhbGJsb2NrID0gTlVMTDsKIH0KQEAgLTEyNzMsMTIgKzEyNzQsMTIgQEAKICoqIGNhbGxlZCBieSBmbHVzaF9qb3VybmFsX2xpc3QsIGJlZm9yZSBpdCBjYWxscyByZW1vdmVfYWxsX2Zyb21fam91cm5hbF9saXN0CiAqKgogKi8KLXN0YXRpYyBpbnQgX3VwZGF0ZV9qb3VybmFsX2hlYWRlcl9ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyBpbnQgX3VwZGF0ZV9qb3VybmFsX2hlYWRlcl9ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCQkJdW5zaWduZWQgbG9uZyB0cmFuc19pZCkKKwkJCQkJdW5zaWduZWQgaW50IHRyYW5zX2lkKQogewogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2hlYWRlciAqamg7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAogCWlmIChyZWlzZXJmc19pc19qb3VybmFsX2Fib3J0ZWQoam91cm5hbCkpCiAJCXJldHVybiAtRUlPOwpAQCAtMTI4OCw4ICsxMjg5LDggQEAKIAkJCXdhaXRfb25fYnVmZmVyKChqb3VybmFsLT5qX2hlYWRlcl9iaCkpOwogCQkJaWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoam91cm5hbC0+al9oZWFkZXJfYmgpKSkgewogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotCQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCQkJICJqb3VybmFsLTY5OTogYnVmZmVyIHdyaXRlIGZhaWxlZCIpOworCQkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTY5OSIsCisJCQkJCQkgImJ1ZmZlciB3cml0ZSBmYWlsZWQiKTsKICNlbmRpZgogCQkJCXJldHVybiAtRUlPOwogCQkJfQpAQCAtMTMwMiw0OSArMTMwMyw0OSBAQAogCQlqaC0+al9maXJzdF91bmZsdXNoZWRfb2Zmc2V0ID0gY3B1X3RvX2xlMzIob2Zmc2V0KTsKIAkJamgtPmpfbW91bnRfaWQgPSBjcHVfdG9fbGUzMihqb3VybmFsLT5qX21vdW50X2lkKTsKIAotCQlpZiAocmVpc2VyZnNfYmFycmllcl9mbHVzaChwX3Nfc2IpKSB7CisJCWlmIChyZWlzZXJmc19iYXJyaWVyX2ZsdXNoKHNiKSkgewogCQkJaW50IHJldDsKIAkJCWxvY2tfYnVmZmVyKGpvdXJuYWwtPmpfaGVhZGVyX2JoKTsKIAkJCXJldCA9IHN1Ym1pdF9iYXJyaWVyX2J1ZmZlcihqb3VybmFsLT5qX2hlYWRlcl9iaCk7CiAJCQlpZiAocmV0ID09IC1FT1BOT1RTVVBQKSB7CiAJCQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShqb3VybmFsLT5qX2hlYWRlcl9iaCk7Ci0JCQkJZGlzYWJsZV9iYXJyaWVyKHBfc19zYik7CisJCQkJZGlzYWJsZV9iYXJyaWVyKHNiKTsKIAkJCQlnb3RvIHN5bmM7CiAJCQl9CiAJCQl3YWl0X29uX2J1ZmZlcihqb3VybmFsLT5qX2hlYWRlcl9iaCk7Ci0JCQljaGVja19iYXJyaWVyX2NvbXBsZXRpb24ocF9zX3NiLCBqb3VybmFsLT5qX2hlYWRlcl9iaCk7CisJCQljaGVja19iYXJyaWVyX2NvbXBsZXRpb24oc2IsIGpvdXJuYWwtPmpfaGVhZGVyX2JoKTsKIAkJfSBlbHNlIHsKIAkJICAgICAgc3luYzoKIAkJCXNldF9idWZmZXJfZGlydHkoam91cm5hbC0+al9oZWFkZXJfYmgpOwogCQkJc3luY19kaXJ0eV9idWZmZXIoam91cm5hbC0+al9oZWFkZXJfYmgpOwogCQl9CiAJCWlmICghYnVmZmVyX3VwdG9kYXRlKGpvdXJuYWwtPmpfaGVhZGVyX2JoKSkgewotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJCSAiam91cm5hbC04Mzc6IElPIGVycm9yIGR1cmluZyBqb3VybmFsIHJlcGxheSIpOworCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtODM3IiwKKwkJCQkJICJJTyBlcnJvciBkdXJpbmcgam91cm5hbCByZXBsYXkiKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVwZGF0ZV9qb3VybmFsX2hlYWRlcl9ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyBpbnQgdXBkYXRlX2pvdXJuYWxfaGVhZGVyX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHRyYW5zX2lkKQorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdHJhbnNfaWQpCiB7Ci0JcmV0dXJuIF91cGRhdGVfam91cm5hbF9oZWFkZXJfYmxvY2socF9zX3NiLCBvZmZzZXQsIHRyYW5zX2lkKTsKKwlyZXR1cm4gX3VwZGF0ZV9qb3VybmFsX2hlYWRlcl9ibG9jayhzYiwgb2Zmc2V0LCB0cmFuc19pZCk7CiB9CiAKLS8qIAotKiogZmx1c2ggYW55IGFuZCBhbGwgam91cm5hbCBsaXN0cyBvbGRlciB0aGFuIHlvdSBhcmUgCisvKgorKiogZmx1c2ggYW55IGFuZCBhbGwgam91cm5hbCBsaXN0cyBvbGRlciB0aGFuIHlvdSBhcmUKICoqIGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIGZsdXNoX2pvdXJuYWxfbGlzdAogKi8KLXN0YXRpYyBpbnQgZmx1c2hfb2xkZXJfam91cm5hbF9saXN0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyBpbnQgZmx1c2hfb2xkZXJfam91cm5hbF9saXN0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamwpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqb3RoZXJfamw7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7Ci0JdW5zaWduZWQgbG9uZyB0cmFuc19pZCA9IGpsLT5qX3RyYW5zX2lkOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CisJdW5zaWduZWQgaW50IHRyYW5zX2lkID0gamwtPmpfdHJhbnNfaWQ7CiAKIAkvKiB3ZSBrbm93IHdlIGFyZSB0aGUgb25seSBvbmVzIGZsdXNoaW5nIHRoaW5ncywgbm8gZXh0cmEgcmFjZQogCSAqIHByb3RlY3Rpb24gaXMgcmVxdWlyZWQuCkBAIC0xMzU4LDcgKzEzNTksNyBAQAogCWlmIChvdGhlcl9qbC0+al90cmFuc19pZCA8IHRyYW5zX2lkKSB7CiAJCUJVR19PTihvdGhlcl9qbC0+al9yZWZjb3VudCA8PSAwKTsKIAkJLyogZG8gbm90IGZsdXNoIGFsbCAqLwotCQlmbHVzaF9qb3VybmFsX2xpc3QocF9zX3NiLCBvdGhlcl9qbCwgMCk7CisJCWZsdXNoX2pvdXJuYWxfbGlzdChzYiwgb3RoZXJfamwsIDApOwogCiAJCS8qIG90aGVyX2psIGlzIG5vdyBkZWxldGVkIGZyb20gdGhlIGxpc3QgKi8KIAkJZ290byByZXN0YXJ0OwpAQCAtMTM4MSw4ICsxMzgyLDggQEAKICoqIGFsd2F5cyBzZXQgZmx1c2hhbGwgdG8gMSwgdW5sZXNzIHlvdSBhcmUgY2FsbGluZyBmcm9tIGluc2lkZQogKiogZmx1c2hfam91cm5hbF9saXN0CiAqKgotKiogSU1QT1JUQU5ULiAgVGhpcyBjYW4gb25seSBiZSBjYWxsZWQgd2hpbGUgdGhlcmUgYXJlIG5vIGpvdXJuYWwgd3JpdGVycywgCi0qKiBhbmQgdGhlIGpvdXJuYWwgaXMgbG9ja2VkLiAgVGhhdCBtZWFucyBpdCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSAKKyoqIElNUE9SVEFOVC4gIFRoaXMgY2FuIG9ubHkgYmUgY2FsbGVkIHdoaWxlIHRoZXJlIGFyZSBubyBqb3VybmFsIHdyaXRlcnMsCisqKiBhbmQgdGhlIGpvdXJuYWwgaXMgbG9ja2VkLiAgVGhhdCBtZWFucyBpdCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbQogKiogZG9fam91cm5hbF9lbmQsIG9yIGJ5IGpvdXJuYWxfcmVsZWFzZQogKi8KIHN0YXRpYyBpbnQgZmx1c2hfam91cm5hbF9saXN0KHN0cnVjdCBzdXBlcl9ibG9jayAqcywKQEAgLTE0MDEsOCArMTQwMiw3IEBACiAJQlVHX09OKGpfbGVuX3NhdmVkIDw9IDApOwogCiAJaWYgKGF0b21pY19yZWFkKCZqb3VybmFsLT5qX3djb3VudCkgIT0gMCkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJICJjbG0tMjA0ODogZmx1c2hfam91cm5hbF9saXN0IGNhbGxlZCB3aXRoIHdjb3VudCAlZCIsCisJCXJlaXNlcmZzX3dhcm5pbmcocywgImNsbS0yMDQ4IiwgImNhbGxlZCB3aXRoIHdjb3VudCAlZCIsCiAJCQkJIGF0b21pY19yZWFkKCZqb3VybmFsLT5qX3djb3VudCkpOwogCX0KIAlCVUdfT04oamwtPmpfdHJhbnNfaWQgPT0gMCk7CkBAIC0xNDE2LDggKzE0MTYsNyBAQAogCiAJY291bnQgPSAwOwogCWlmIChqX2xlbl9zYXZlZCA+IGpvdXJuYWwtPmpfdHJhbnNfbWF4KSB7Ci0JCXJlaXNlcmZzX3BhbmljKHMsCi0JCQkgICAgICAgImpvdXJuYWwtNzE1OiBmbHVzaF9qb3VybmFsX2xpc3QsIGxlbmd0aCBpcyAlbHUsIHRyYW5zIGlkICVsdVxuIiwKKwkJcmVpc2VyZnNfcGFuaWMocywgImpvdXJuYWwtNzE1IiwgImxlbmd0aCBpcyAlbHUsIHRyYW5zIGlkICVsdSIsCiAJCQkgICAgICAgal9sZW5fc2F2ZWQsIGpsLT5qX3RyYW5zX2lkKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTQzMCw3ICsxNDI5LDcgQEAKIAkJZ290byBmbHVzaF9vbGRlcl9hbmRfcmV0dXJuOwogCX0KIAotCS8qIHN0YXJ0IGJ5IHB1dHRpbmcgdGhlIGNvbW1pdCBsaXN0IG9uIGRpc2suICBUaGlzIHdpbGwgYWxzbyBmbHVzaCAKKwkvKiBzdGFydCBieSBwdXR0aW5nIHRoZSBjb21taXQgbGlzdCBvbiBkaXNrLiAgVGhpcyB3aWxsIGFsc28gZmx1c2gKIAkgKiogdGhlIGNvbW1pdCBsaXN0cyBvZiBhbnkgb2xkZXJzIHRyYW5zYWN0aW9ucwogCSAqLwogCWZsdXNoX2NvbW1pdF9saXN0KHMsIGpsLCAxKTsKQEAgLTE0NDUsMTIgKzE0NDQsMTIgQEAKIAkJZ290byBmbHVzaF9vbGRlcl9hbmRfcmV0dXJuOwogCX0KIAotCS8qIGxvb3AgdGhyb3VnaCBlYWNoIGNub2RlLCBzZWUgaWYgd2UgbmVlZCB0byB3cml0ZSBpdCwgCi0JICoqIG9yIHdhaXQgb24gYSBtb3JlIHJlY2VudCB0cmFuc2FjdGlvbiwgb3IganVzdCBpZ25vcmUgaXQgCisJLyogbG9vcCB0aHJvdWdoIGVhY2ggY25vZGUsIHNlZSBpZiB3ZSBuZWVkIHRvIHdyaXRlIGl0LAorCSAqKiBvciB3YWl0IG9uIGEgbW9yZSByZWNlbnQgdHJhbnNhY3Rpb24sIG9yIGp1c3QgaWdub3JlIGl0CiAJICovCiAJaWYgKGF0b21pY19yZWFkKCYoam91cm5hbC0+al93Y291bnQpKSAhPSAwKSB7Ci0JCXJlaXNlcmZzX3BhbmljKHMsCi0JCQkgICAgICAgImpvdXJuYWwtODQ0OiBwYW5pYyBqb3VybmFsIGxpc3QgaXMgZmx1c2hpbmcsIHdjb3VudCBpcyBub3QgMFxuIik7CisJCXJlaXNlcmZzX3BhbmljKHMsICJqb3VybmFsLTg0NCIsICJqb3VybmFsIGxpc3QgaXMgZmx1c2hpbmcsICIKKwkJCSAgICAgICAid2NvdW50IGlzIG5vdCAwIik7CiAJfQogCWNuID0gamwtPmpfcmVhbGJsb2NrOwogCXdoaWxlIChjbikgewpAQCAtMTQ3NCw4ICsxNDczLDggQEAKIAkJaWYgKCFwamwgJiYgY24tPmJoKSB7CiAJCQlzYXZlZF9iaCA9IGNuLT5iaDsKIAotCQkJLyogd2UgZG8gdGhpcyB0byBtYWtlIHN1cmUgbm9ib2R5IHJlbGVhc2VzIHRoZSBidWZmZXIgd2hpbGUgCi0JCQkgKiogd2UgYXJlIHdvcmtpbmcgd2l0aCBpdCAKKwkJCS8qIHdlIGRvIHRoaXMgdG8gbWFrZSBzdXJlIG5vYm9keSByZWxlYXNlcyB0aGUgYnVmZmVyIHdoaWxlCisJCQkgKiogd2UgYXJlIHdvcmtpbmcgd2l0aCBpdAogCQkJICovCiAJCQlnZXRfYmgoc2F2ZWRfYmgpOwogCkBAIC0xNDk4LDggKzE0OTcsOCBAQAogCQkJZ290byBmcmVlX2Nub2RlOwogCQl9CiAKLQkJLyogYmggPT0gTlVMTCB3aGVuIHRoZSBibG9jayBnb3QgdG8gZGlzayBvbiBpdHMgb3duLCBPUiwgCi0JCSAqKiB0aGUgYmxvY2sgZ290IGZyZWVkIGluIGEgZnV0dXJlIHRyYW5zYWN0aW9uIAorCQkvKiBiaCA9PSBOVUxMIHdoZW4gdGhlIGJsb2NrIGdvdCB0byBkaXNrIG9uIGl0cyBvd24sIE9SLAorCQkgKiogdGhlIGJsb2NrIGdvdCBmcmVlZCBpbiBhIGZ1dHVyZSB0cmFuc2FjdGlvbgogCQkgKi8KIAkJaWYgKHNhdmVkX2JoID09IE5VTEwpIHsKIAkJCWdvdG8gZnJlZV9jbm9kZTsKQEAgLTE1MTAsOCArMTUwOSw4IEBACiAJCSAqKiBpcyBub3QgbWFya2VkIEpEaXJ0eV93YWl0CiAJCSAqLwogCQlpZiAoKCF3YXNfandhaXQpICYmICFidWZmZXJfbG9ja2VkKHNhdmVkX2JoKSkgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkgImpvdXJuYWwtODEzOiBCQUQhIGJ1ZmZlciAlbGx1ICVjZGlydHkgJWNqd2FpdCwgIgorCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiam91cm5hbC04MTMiLAorCQkJCQkgIkJBRCEgYnVmZmVyICVsbHUgJWNkaXJ0eSAlY2p3YWl0LCAiCiAJCQkJCSAibm90IGluIGEgbmV3ZXIgdHJhbmFzY3Rpb24iLAogCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylzYXZlZF9iaC0+CiAJCQkJCSBiX2Jsb2NrbnIsIHdhc19kaXJ0eSA/ICcgJyA6ICchJywKQEAgLTE1MjksOCArMTUyOCw4IEBACiAJCQkJdW5sb2NrX2J1ZmZlcihzYXZlZF9iaCk7CiAJCQljb3VudCsrOwogCQl9IGVsc2UgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkgImNsbS0yMDgyOiBVbmFibGUgdG8gZmx1c2ggYnVmZmVyICVsbHUgaW4gJXMiLAorCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiY2xtLTIwODIiLAorCQkJCQkgIlVuYWJsZSB0byBmbHVzaCBidWZmZXIgJWxsdSBpbiAlcyIsCiAJCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKXNhdmVkX2JoLT4KIAkJCQkJIGJfYmxvY2tuciwgX19mdW5jX18pOwogCQl9CkBAIC0xNTQxLDggKzE1NDAsOCBAQAogCQkJLyogd2UgaW5jcmVtZW50ZWQgdGhpcyB0byBrZWVwIG90aGVycyBmcm9tIHRha2luZyB0aGUgYnVmZmVyIGhlYWQgYXdheSAqLwogCQkJcHV0X2JoKHNhdmVkX2JoKTsKIAkJCWlmIChhdG9taWNfcmVhZCgmKHNhdmVkX2JoLT5iX2NvdW50KSkgPCAwKSB7Ci0JCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkJICJqb3VybmFsLTk0NTogc2F2ZWRfYmgtPmJfY291bnQgPCAwIik7CisJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiam91cm5hbC05NDUiLAorCQkJCQkJICJzYXZlZF9iaC0+Yl9jb3VudCA8IDAiKTsKIAkJCX0KIAkJfQogCX0KQEAgLTE1NTEsMTggKzE1NTAsMTggQEAKIAkJd2hpbGUgKGNuKSB7CiAJCQlpZiAodGVzdF9iaXQoQkxPQ0tfTkVFRFNfRkxVU0gsICZjbi0+c3RhdGUpKSB7CiAJCQkJaWYgKCFjbi0+YmgpIHsKLQkJCQkJcmVpc2VyZnNfcGFuaWMocywKLQkJCQkJCSAgICAgICAiam91cm5hbC0xMDExOiBjbi0+YmggaXMgTlVMTFxuIik7CisJCQkJCXJlaXNlcmZzX3BhbmljKHMsICJqb3VybmFsLTEwMTEiLAorCQkJCQkJICAgICAgICJjbi0+YmggaXMgTlVMTCIpOwogCQkJCX0KIAkJCQl3YWl0X29uX2J1ZmZlcihjbi0+YmgpOwogCQkJCWlmICghY24tPmJoKSB7Ci0JCQkJCXJlaXNlcmZzX3BhbmljKHMsCi0JCQkJCQkgICAgICAgImpvdXJuYWwtMTAxMjogY24tPmJoIGlzIE5VTExcbiIpOworCQkJCQlyZWlzZXJmc19wYW5pYyhzLCAiam91cm5hbC0xMDEyIiwKKwkJCQkJCSAgICAgICAiY24tPmJoIGlzIE5VTEwiKTsKIAkJCQl9CiAJCQkJaWYgKHVubGlrZWx5KCFidWZmZXJfdXB0b2RhdGUoY24tPmJoKSkpIHsKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKLQkJCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkJCSAiam91cm5hbC05NDk6IGJ1ZmZlciB3cml0ZSBmYWlsZWRcbiIpOworCQkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJqb3VybmFsLTk0OSIsCisJCQkJCQkJICJidWZmZXIgd3JpdGUgZmFpbGVkIik7CiAjZW5kaWYKIAkJCQkJZXJyID0gLUVJTzsKIAkJCQl9CkBAIC0xNTg3LDcgKzE1ODYsNyBAQAogCQkJICAgICAgIF9fZnVuY19fKTsKICAgICAgIGZsdXNoX29sZGVyX2FuZF9yZXR1cm46CiAKLQkvKiBiZWZvcmUgd2UgY2FuIHVwZGF0ZSB0aGUgam91cm5hbCBoZWFkZXIgYmxvY2ssIHdlIF9tdXN0XyBmbHVzaCBhbGwgCisJLyogYmVmb3JlIHdlIGNhbiB1cGRhdGUgdGhlIGpvdXJuYWwgaGVhZGVyIGJsb2NrLCB3ZSBfbXVzdF8gZmx1c2ggYWxsCiAJICoqIHJlYWwgYmxvY2tzIGZyb20gYWxsIG9sZGVyIHRyYW5zYWN0aW9ucyB0byBkaXNrLiAgVGhpcyBpcyBiZWNhdXNlCiAJICoqIG9uY2UgdGhlIGhlYWRlciBibG9jayBpcyB1cGRhdGVkLCB0aGlzIHRyYW5zYWN0aW9uIHdpbGwgbm90IGJlCiAJICoqIHJlcGxheWVkIGFmdGVyIGEgY3Jhc2gKQEAgLTE1OTcsNyArMTU5Niw3IEBACiAJfQogCiAJZXJyID0gam91cm5hbC0+al9lcnJubzsKLQkvKiBiZWZvcmUgd2UgY2FuIHJlbW92ZSBldmVyeXRoaW5nIGZyb20gdGhlIGhhc2ggdGFibGVzIGZvciB0aGlzIAorCS8qIGJlZm9yZSB3ZSBjYW4gcmVtb3ZlIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgaGFzaCB0YWJsZXMgZm9yIHRoaXMKIAkgKiogdHJhbnNhY3Rpb24sIHdlIG11c3QgbWFrZSBzdXJlIGl0IGNhbiBuZXZlciBiZSByZXBsYXllZAogCSAqKgogCSAqKiBzaW5jZSB3ZSBhcmUgb25seSBjYWxsZWQgZnJvbSBkb19qb3VybmFsX2VuZCwgd2Uga25vdyBmb3Igc3VyZSB0aGVyZQpAQCAtMTYyMyw3ICsxNjIyLDcgQEAKIAogCWlmIChqb3VybmFsLT5qX2xhc3RfZmx1c2hfaWQgIT0gMCAmJgogCSAgICAoamwtPmpfdHJhbnNfaWQgLSBqb3VybmFsLT5qX2xhc3RfZmx1c2hfaWQpICE9IDEpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLCAiY2xtLTIyMDE6IGxhc3QgZmx1c2ggJWx1LCBjdXJyZW50ICVsdSIsCisJCXJlaXNlcmZzX3dhcm5pbmcocywgImNsbS0yMjAxIiwgImxhc3QgZmx1c2ggJWx1LCBjdXJyZW50ICVsdSIsCiAJCQkJIGpvdXJuYWwtPmpfbGFzdF9mbHVzaF9pZCwgamwtPmpfdHJhbnNfaWQpOwogCX0KIAlqb3VybmFsLT5qX2xhc3RfZmx1c2hfaWQgPSBqbC0+al90cmFuc19pZDsKQEAgLTE3NTgsMTMgKzE3NTcsMTMgQEAKIHN0YXRpYyBpbnQga3VwZGF0ZV90cmFuc2FjdGlvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzLAogCQkJCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpsLAogCQkJCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKipuZXh0X2psLAotCQkJCXVuc2lnbmVkIGxvbmcgKm5leHRfdHJhbnNfaWQsCisJCQkJdW5zaWduZWQgaW50ICpuZXh0X3RyYW5zX2lkLAogCQkJCWludCBudW1fYmxvY2tzLCBpbnQgbnVtX3RyYW5zKQogewogCWludCByZXQgPSAwOwogCWludCB3cml0dGVuID0gMDsKIAlpbnQgdHJhbnNhY3Rpb25zX2ZsdXNoZWQgPSAwOwotCXVuc2lnbmVkIGxvbmcgb3JpZ190cmFuc19pZCA9IGpsLT5qX3RyYW5zX2lkOworCXVuc2lnbmVkIGludCBvcmlnX3RyYW5zX2lkID0gamwtPmpfdHJhbnNfaWQ7CiAJc3RydWN0IGJ1ZmZlcl9jaHVuayBjaHVuazsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocyk7CkBAIC0xODMzLDcgKzE4MzIsNyBAQAogCWludCBsaW1pdCA9IDI1NjsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICp0amw7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqZmx1c2hfamw7Ci0JdW5zaWduZWQgbG9uZyB0cmFuc19pZDsKKwl1bnNpZ25lZCBpbnQgdHJhbnNfaWQ7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHMpOwogCiAJZmx1c2hfamwgPSB0amwgPSBqbDsKQEAgLTE5MDksMjIgKzE5MDgsMjIgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfam91cm5hbF9yYW0oc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IpCitzdGF0aWMgdm9pZCBmcmVlX2pvdXJuYWxfcmFtKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAlrZnJlZShqb3VybmFsLT5qX2N1cnJlbnRfamwpOwogCWpvdXJuYWwtPmpfbnVtX2xpc3RzLS07CiAKIAl2ZnJlZShqb3VybmFsLT5qX2Nub2RlX2ZyZWVfb3JpZyk7Ci0JZnJlZV9saXN0X2JpdG1hcHMocF9zX3NiLCBqb3VybmFsLT5qX2xpc3RfYml0bWFwKTsKLQlmcmVlX2JpdG1hcF9ub2RlcyhwX3Nfc2IpOwkvKiBtdXN0IGJlIGFmdGVyIGZyZWVfbGlzdF9iaXRtYXBzICovCisJZnJlZV9saXN0X2JpdG1hcHMoc2IsIGpvdXJuYWwtPmpfbGlzdF9iaXRtYXApOworCWZyZWVfYml0bWFwX25vZGVzKHNiKTsJLyogbXVzdCBiZSBhZnRlciBmcmVlX2xpc3RfYml0bWFwcyAqLwogCWlmIChqb3VybmFsLT5qX2hlYWRlcl9iaCkgewogCQlicmVsc2Uoam91cm5hbC0+al9oZWFkZXJfYmgpOwogCX0KIAkvKiBqX2hlYWRlcl9iaCBpcyBvbiB0aGUgam91cm5hbCBkZXYsIG1ha2Ugc3VyZSBub3QgdG8gcmVsZWFzZSB0aGUgam91cm5hbAogCSAqIGRldiB1bnRpbCB3ZSBicmVsc2Ugal9oZWFkZXJfYmgKIAkgKi8KLQlyZWxlYXNlX2pvdXJuYWxfZGV2KHBfc19zYiwgam91cm5hbCk7CisJcmVsZWFzZV9qb3VybmFsX2RldihzYiwgam91cm5hbCk7CiAJdmZyZWUoam91cm5hbCk7CiB9CiAKQEAgLTE5MzMsMjcgKzE5MzIsMjcgQEAKICoqIG9mIHJlYWRfc3VwZXIoKSB5ZXQuICBBbnkgb3RoZXIgY2FsbGVyIG11c3Qga2VlcCBlcnJvciBhdCAwLgogKi8KIHN0YXRpYyBpbnQgZG9fam91cm5hbF9yZWxlYXNlKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIGludCBlcnJvcikKKwkJCSAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBlcnJvcikKIHsKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIG15dGg7CiAJaW50IGZsdXNoZWQgPSAwOwotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAKIAkvKiB3ZSBvbmx5IHdhbnQgdG8gZmx1c2ggb3V0IHRyYW5zYWN0aW9ucyBpZiB3ZSB3ZXJlIGNhbGxlZCB3aXRoIGVycm9yID09IDAKIAkgKi8KLQlpZiAoIWVycm9yICYmICEocF9zX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgeworCWlmICghZXJyb3IgJiYgIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKIAkJLyogZW5kIHRoZSBjdXJyZW50IHRyYW5zICovCiAJCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwotCQlkb19qb3VybmFsX2VuZCh0aCwgcF9zX3NiLCAxMCwgRkxVU0hfQUxMKTsKKwkJZG9fam91cm5hbF9lbmQodGgsIHNiLCAxMCwgRkxVU0hfQUxMKTsKIAogCQkvKiBtYWtlIHN1cmUgc29tZXRoaW5nIGdldHMgbG9nZ2VkIHRvIGZvcmNlIG91ciB3YXkgaW50byB0aGUgZmx1c2ggY29kZSAqLwotCQlpZiAoIWpvdXJuYWxfam9pbigmbXl0aCwgcF9zX3NiLCAxKSkgewotCQkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChwX3Nfc2IsCi0JCQkJCQkgICAgIFNCX0JVRkZFUl9XSVRIX1NCKHBfc19zYiksCisJCWlmICgham91cm5hbF9qb2luKCZteXRoLCBzYiwgMSkpIHsKKwkJCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwoc2IsCisJCQkJCQkgICAgIFNCX0JVRkZFUl9XSVRIX1NCKHNiKSwKIAkJCQkJCSAgICAgMSk7Ci0JCQlqb3VybmFsX21hcmtfZGlydHkoJm15dGgsIHBfc19zYiwKLQkJCQkJICAgU0JfQlVGRkVSX1dJVEhfU0IocF9zX3NiKSk7Ci0JCQlkb19qb3VybmFsX2VuZCgmbXl0aCwgcF9zX3NiLCAxLCBGTFVTSF9BTEwpOworCQkJam91cm5hbF9tYXJrX2RpcnR5KCZteXRoLCBzYiwKKwkJCQkJICAgU0JfQlVGRkVSX1dJVEhfU0Ioc2IpKTsKKwkJCWRvX2pvdXJuYWxfZW5kKCZteXRoLCBzYiwgMSwgRkxVU0hfQUxMKTsKIAkJCWZsdXNoZWQgPSAxOwogCQl9CiAJfQpAQCAtMTk2MSwyNiArMTk2MCwyNiBAQAogCS8qIHRoaXMgYWxzbyBjYXRjaGVzIGVycm9ycyBkdXJpbmcgdGhlIGRvX2pvdXJuYWxfZW5kIGFib3ZlICovCiAJaWYgKCFlcnJvciAmJiByZWlzZXJmc19pc19qb3VybmFsX2Fib3J0ZWQoam91cm5hbCkpIHsKIAkJbWVtc2V0KCZteXRoLCAwLCBzaXplb2YobXl0aCkpOwotCQlpZiAoIWpvdXJuYWxfam9pbl9hYm9ydCgmbXl0aCwgcF9zX3NiLCAxKSkgewotCQkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChwX3Nfc2IsCi0JCQkJCQkgICAgIFNCX0JVRkZFUl9XSVRIX1NCKHBfc19zYiksCisJCWlmICgham91cm5hbF9qb2luX2Fib3J0KCZteXRoLCBzYiwgMSkpIHsKKwkJCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwoc2IsCisJCQkJCQkgICAgIFNCX0JVRkZFUl9XSVRIX1NCKHNiKSwKIAkJCQkJCSAgICAgMSk7Ci0JCQlqb3VybmFsX21hcmtfZGlydHkoJm15dGgsIHBfc19zYiwKLQkJCQkJICAgU0JfQlVGRkVSX1dJVEhfU0IocF9zX3NiKSk7Ci0JCQlkb19qb3VybmFsX2VuZCgmbXl0aCwgcF9zX3NiLCAxLCBGTFVTSF9BTEwpOworCQkJam91cm5hbF9tYXJrX2RpcnR5KCZteXRoLCBzYiwKKwkJCQkJICAgU0JfQlVGRkVSX1dJVEhfU0Ioc2IpKTsKKwkJCWRvX2pvdXJuYWxfZW5kKCZteXRoLCBzYiwgMSwgRkxVU0hfQUxMKTsKIAkJfQogCX0KIAogCXJlaXNlcmZzX21vdW50ZWRfZnNfY291bnQtLTsKIAkvKiB3YWl0IGZvciBhbGwgY29tbWl0cyB0byBmaW5pc2ggKi8KLQljYW5jZWxfZGVsYXllZF93b3JrKCZTQl9KT1VSTkFMKHBfc19zYiktPmpfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmU0JfSk9VUk5BTChzYiktPmpfd29yayk7CiAJZmx1c2hfd29ya3F1ZXVlKGNvbW1pdF93cSk7CiAJaWYgKCFyZWlzZXJmc19tb3VudGVkX2ZzX2NvdW50KSB7CiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGNvbW1pdF93cSk7CiAJCWNvbW1pdF93cSA9IE5VTEw7CiAJfQogCi0JZnJlZV9qb3VybmFsX3JhbShwX3Nfc2IpOworCWZyZWVfam91cm5hbF9yYW0oc2IpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xOTg5LDQxICsxOTg4LDQxIEBACiAqKiBjYWxsIG9uIHVubW91bnQuICBmbHVzaCBhbGwgam91cm5hbCB0cmFucywgcmVsZWFzZSBhbGwgYWxsb2MnZCByYW0KICovCiBpbnQgam91cm5hbF9yZWxlYXNlKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IpCisJCSAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXJldHVybiBkb19qb3VybmFsX3JlbGVhc2UodGgsIHBfc19zYiwgMCk7CisJcmV0dXJuIGRvX2pvdXJuYWxfcmVsZWFzZSh0aCwgc2IsIDApOwogfQogCiAvKgogKiogb25seSBjYWxsIGZyb20gYW4gZXJyb3IgY29uZGl0aW9uIGluc2lkZSByZWlzZXJmc19yZWFkX3N1cGVyIQogKi8KIGludCBqb3VybmFsX3JlbGVhc2VfZXJyb3Ioc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkgIHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKQorCQkJICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXJldHVybiBkb19qb3VybmFsX3JlbGVhc2UodGgsIHBfc19zYiwgMSk7CisJcmV0dXJuIGRvX2pvdXJuYWxfcmVsZWFzZSh0aCwgc2IsIDEpOwogfQogCiAvKiBjb21wYXJlcyBkZXNjcmlwdGlvbiBibG9jayB3aXRoIGNvbW1pdCBibG9jay4gIHJldHVybnMgMSBpZiB0aGV5IGRpZmZlciwgMCBpZiB0aGV5IGFyZSB0aGUgc2FtZSAqLwotc3RhdGljIGludCBqb3VybmFsX2NvbXBhcmVfZGVzY19jb21taXQoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgaW50IGpvdXJuYWxfY29tcGFyZV9kZXNjX2NvbW1pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgICAgICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9kZXNjICpkZXNjLAogCQkJCSAgICAgICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jb21taXQgKmNvbW1pdCkKIHsKIAlpZiAoZ2V0X2NvbW1pdF90cmFuc19pZChjb21taXQpICE9IGdldF9kZXNjX3RyYW5zX2lkKGRlc2MpIHx8CiAJICAgIGdldF9jb21taXRfdHJhbnNfbGVuKGNvbW1pdCkgIT0gZ2V0X2Rlc2NfdHJhbnNfbGVuKGRlc2MpIHx8Ci0JICAgIGdldF9jb21taXRfdHJhbnNfbGVuKGNvbW1pdCkgPiBTQl9KT1VSTkFMKHBfc19zYiktPmpfdHJhbnNfbWF4IHx8CisJICAgIGdldF9jb21taXRfdHJhbnNfbGVuKGNvbW1pdCkgPiBTQl9KT1VSTkFMKHNiKS0+al90cmFuc19tYXggfHwKIAkgICAgZ2V0X2NvbW1pdF90cmFuc19sZW4oY29tbWl0KSA8PSAwKSB7CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotLyogcmV0dXJucyAwIGlmIGl0IGRpZCBub3QgZmluZCBhIGRlc2NyaXB0aW9uIGJsb2NrICAKKy8qIHJldHVybnMgMCBpZiBpdCBkaWQgbm90IGZpbmQgYSBkZXNjcmlwdGlvbiBibG9jawogKiogcmV0dXJucyAtMSBpZiBpdCBmb3VuZCBhIGNvcnJ1cHQgY29tbWl0IGJsb2NrCi0qKiByZXR1cm5zIDEgaWYgYm90aCBkZXNjIGFuZCBjb21taXQgd2VyZSB2YWxpZCAKKyoqIHJldHVybnMgMSBpZiBib3RoIGRlc2MgYW5kIGNvbW1pdCB3ZXJlIHZhbGlkCiAqLwotc3RhdGljIGludCBqb3VybmFsX3RyYW5zYWN0aW9uX2lzX3ZhbGlkKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIGludCBqb3VybmFsX3RyYW5zYWN0aW9uX2lzX3ZhbGlkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqZF9iaCwKLQkJCQkJdW5zaWduZWQgbG9uZyAqb2xkZXN0X2ludmFsaWRfdHJhbnNfaWQsCisJCQkJCXVuc2lnbmVkIGludCAqb2xkZXN0X2ludmFsaWRfdHJhbnNfaWQsCiAJCQkJCXVuc2lnbmVkIGxvbmcgKm5ld2VzdF9tb3VudF9pZCkKIHsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9kZXNjICpkZXNjOwpAQCAtMjAzOSw3ICsyMDM4LDcgQEAKIAkgICAgJiYgIW1lbWNtcChnZXRfam91cm5hbF9kZXNjX21hZ2ljKGRfYmgpLCBKT1VSTkFMX0RFU0NfTUFHSUMsIDgpKSB7CiAJCWlmIChvbGRlc3RfaW52YWxpZF90cmFuc19pZCAmJiAqb2xkZXN0X2ludmFsaWRfdHJhbnNfaWQKIAkJICAgICYmIGdldF9kZXNjX3RyYW5zX2lkKGRlc2MpID4gKm9sZGVzdF9pbnZhbGlkX3RyYW5zX2lkKSB7Ci0JCQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCisJCQlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKIAkJCQkgICAgICAgImpvdXJuYWwtOTg2OiB0cmFuc2FjdGlvbiAiCiAJCQkJICAgICAgICJpcyB2YWxpZCByZXR1cm5pbmcgYmVjYXVzZSB0cmFuc19pZCAlZCBpcyBncmVhdGVyIHRoYW4gIgogCQkJCSAgICAgICAib2xkZXN0X2ludmFsaWQgJWx1IiwKQEAgLTIwNDksNyArMjA0OCw3IEBACiAJCX0KIAkJaWYgKG5ld2VzdF9tb3VudF9pZAogCQkgICAgJiYgKm5ld2VzdF9tb3VudF9pZCA+IGdldF9kZXNjX21vdW50X2lkKGRlc2MpKSB7Ci0JCQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCisJCQlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKIAkJCQkgICAgICAgImpvdXJuYWwtMTA4NzogdHJhbnNhY3Rpb24gIgogCQkJCSAgICAgICAiaXMgdmFsaWQgcmV0dXJuaW5nIGJlY2F1c2UgbW91bnRfaWQgJWQgaXMgbGVzcyB0aGFuICIKIAkJCQkgICAgICAgIm5ld2VzdF9tb3VudF9pZCAlbHUiLApAQCAtMjA1NywzNiArMjA1NiwzNyBAQAogCQkJCSAgICAgICAqbmV3ZXN0X21vdW50X2lkKTsKIAkJCXJldHVybiAtMTsKIAkJfQotCQlpZiAoZ2V0X2Rlc2NfdHJhbnNfbGVuKGRlc2MpID4gU0JfSk9VUk5BTChwX3Nfc2IpLT5qX3RyYW5zX21heCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJCSAiam91cm5hbC0yMDE4OiBCYWQgdHJhbnNhY3Rpb24gbGVuZ3RoICVkIGVuY291bnRlcmVkLCBpZ25vcmluZyB0cmFuc2FjdGlvbiIsCisJCWlmIChnZXRfZGVzY190cmFuc19sZW4oZGVzYykgPiBTQl9KT1VSTkFMKHNiKS0+al90cmFuc19tYXgpIHsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTIwMTgiLAorCQkJCQkgIkJhZCB0cmFuc2FjdGlvbiBsZW5ndGggJWQgIgorCQkJCQkgImVuY291bnRlcmVkLCBpZ25vcmluZyB0cmFuc2FjdGlvbiIsCiAJCQkJCSBnZXRfZGVzY190cmFuc19sZW4oZGVzYykpOwogCQkJcmV0dXJuIC0xOwogCQl9Ci0JCW9mZnNldCA9IGRfYmgtPmJfYmxvY2tuciAtIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpOworCQlvZmZzZXQgPSBkX2JoLT5iX2Jsb2NrbnIgLSBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpOwogCiAJCS8qIG9rLCB3ZSBoYXZlIGEgam91cm5hbCBkZXNjcmlwdGlvbiBibG9jaywgbGV0cyBzZWUgaWYgdGhlIHRyYW5zYWN0aW9uIHdhcyB2YWxpZCAqLwogCQljX2JoID0KLQkJICAgIGpvdXJuYWxfYnJlYWQocF9zX3NiLAotCQkJCSAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikgKworCQkgICAgam91cm5hbF9icmVhZChzYiwKKwkJCQkgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikgKwogCQkJCSAgKChvZmZzZXQgKyBnZXRfZGVzY190cmFuc19sZW4oZGVzYykgKwotCQkJCSAgICAxKSAlIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSkpOworCQkJCSAgICAxKSAlIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpKSk7CiAJCWlmICghY19iaCkKIAkJCXJldHVybiAwOwogCQljb21taXQgPSAoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY29tbWl0ICopY19iaC0+Yl9kYXRhOwotCQlpZiAoam91cm5hbF9jb21wYXJlX2Rlc2NfY29tbWl0KHBfc19zYiwgZGVzYywgY29tbWl0KSkgewotCQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCQlpZiAoam91cm5hbF9jb21wYXJlX2Rlc2NfY29tbWl0KHNiLCBkZXNjLCBjb21taXQpKSB7CisJCQlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKIAkJCQkgICAgICAgImpvdXJuYWxfdHJhbnNhY3Rpb25faXNfdmFsaWQsIGNvbW1pdCBvZmZzZXQgJWxkIGhhZCBiYWQgIgogCQkJCSAgICAgICAidGltZSAlZCBvciBsZW5ndGggJWQiLAogCQkJCSAgICAgICBjX2JoLT5iX2Jsb2NrbnIgLQotCQkJCSAgICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSwKKwkJCQkgICAgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSwKIAkJCQkgICAgICAgZ2V0X2NvbW1pdF90cmFuc19pZChjb21taXQpLAogCQkJCSAgICAgICBnZXRfY29tbWl0X3RyYW5zX2xlbihjb21taXQpKTsKIAkJCWJyZWxzZShjX2JoKTsKIAkJCWlmIChvbGRlc3RfaW52YWxpZF90cmFuc19pZCkgewogCQkJCSpvbGRlc3RfaW52YWxpZF90cmFuc19pZCA9CiAJCQkJICAgIGdldF9kZXNjX3RyYW5zX2lkKGRlc2MpOwotCQkJCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwkJCQlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKIAkJCQkJICAgICAgICJqb3VybmFsLTEwMDQ6ICIKIAkJCQkJICAgICAgICJ0cmFuc2FjdGlvbl9pc192YWxpZCBzZXR0aW5nIG9sZGVzdCBpbnZhbGlkIHRyYW5zX2lkICIKIAkJCQkJICAgICAgICJ0byAlZCIsCkBAIC0yMDk1LDExICsyMDk1LDExIEBACiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJYnJlbHNlKGNfYmgpOwotCQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCisJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkJICAgICAgICJqb3VybmFsLTEwMDY6IGZvdW5kIHZhbGlkICIKIAkJCSAgICAgICAidHJhbnNhY3Rpb24gc3RhcnQgb2Zmc2V0ICVsbHUsIGxlbiAlZCBpZCAlZCIsCiAJCQkgICAgICAgZF9iaC0+Yl9ibG9ja25yIC0KLQkJCSAgICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSwKKwkJCSAgICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpLAogCQkJICAgICAgIGdldF9kZXNjX3RyYW5zX2xlbihkZXNjKSwKIAkJCSAgICAgICBnZXRfZGVzY190cmFuc19pZChkZXNjKSk7CiAJCXJldHVybiAxOwpAQCAtMjEyMSw2MyArMjEyMSw2MyBAQAogKiogdGhpcyBlaXRoZXIgcmVhZHMgaW4gYSByZXBsYXlzIGEgdHJhbnNhY3Rpb24sIG9yIHJldHVybnMgYmVjYXVzZSB0aGUgdHJhbnNhY3Rpb24KICoqIGlzIGludmFsaWQsIG9yIHRvbyBvbGQuCiAqLwotc3RhdGljIGludCBqb3VybmFsX3JlYWRfdHJhbnNhY3Rpb24oc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgaW50IGpvdXJuYWxfcmVhZF90cmFuc2FjdGlvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIGN1cl9kYmxvY2ssCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgb2xkZXN0X3N0YXJ0LAotCQkJCSAgICB1bnNpZ25lZCBsb25nIG9sZGVzdF90cmFuc19pZCwKKwkJCQkgICAgdW5zaWduZWQgaW50IG9sZGVzdF90cmFuc19pZCwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBuZXdlc3RfbW91bnRfaWQpCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9kZXNjICpkZXNjOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2NvbW1pdCAqY29tbWl0OwotCXVuc2lnbmVkIGxvbmcgdHJhbnNfaWQgPSAwOworCXVuc2lnbmVkIGludCB0cmFuc19pZCA9IDA7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpjX2JoOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZF9iaDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKipsb2dfYmxvY2tzID0gTlVMTDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKipyZWFsX2Jsb2NrcyA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyB0cmFuc19vZmZzZXQ7CisJdW5zaWduZWQgaW50IHRyYW5zX29mZnNldDsKIAlpbnQgaTsKIAlpbnQgdHJhbnNfaGFsZjsKIAotCWRfYmggPSBqb3VybmFsX2JyZWFkKHBfc19zYiwgY3VyX2RibG9jayk7CisJZF9iaCA9IGpvdXJuYWxfYnJlYWQoc2IsIGN1cl9kYmxvY2spOwogCWlmICghZF9iaCkKIAkJcmV0dXJuIDE7CiAJZGVzYyA9IChzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9kZXNjICopZF9iaC0+Yl9kYXRhOwotCXRyYW5zX29mZnNldCA9IGRfYmgtPmJfYmxvY2tuciAtIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpOwotCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwgImpvdXJuYWwtMTAzNzogIgorCXRyYW5zX29mZnNldCA9IGRfYmgtPmJfYmxvY2tuciAtIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYik7CisJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsICJqb3VybmFsLTEwMzc6ICIKIAkJICAgICAgICJqb3VybmFsX3JlYWRfdHJhbnNhY3Rpb24sIG9mZnNldCAlbGx1LCBsZW4gJWQgbW91bnRfaWQgJWQiLAotCQkgICAgICAgZF9iaC0+Yl9ibG9ja25yIC0gU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYiksCisJCSAgICAgICBkX2JoLT5iX2Jsb2NrbnIgLSBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpLAogCQkgICAgICAgZ2V0X2Rlc2NfdHJhbnNfbGVuKGRlc2MpLCBnZXRfZGVzY19tb3VudF9pZChkZXNjKSk7CiAJaWYgKGdldF9kZXNjX3RyYW5zX2lkKGRlc2MpIDwgb2xkZXN0X3RyYW5zX2lkKSB7Ci0JCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwgImpvdXJuYWwtMTAzOTogIgorCQlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwgImpvdXJuYWwtMTAzOTogIgogCQkJICAgICAgICJqb3VybmFsX3JlYWRfdHJhbnMgc2tpcHBpbmcgYmVjYXVzZSAlbHUgaXMgdG9vIG9sZCIsCiAJCQkgICAgICAgY3VyX2RibG9jayAtCi0JCQkgICAgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikpOworCQkJICAgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikpOwogCQlicmVsc2UoZF9iaCk7CiAJCXJldHVybiAxOwogCX0KIAlpZiAoZ2V0X2Rlc2NfbW91bnRfaWQoZGVzYykgIT0gbmV3ZXN0X21vdW50X2lkKSB7Ci0JCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwgImpvdXJuYWwtMTE0NjogIgorCQlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwgImpvdXJuYWwtMTE0NjogIgogCQkJICAgICAgICJqb3VybmFsX3JlYWRfdHJhbnMgc2tpcHBpbmcgYmVjYXVzZSAlZCBpcyAhPSAiCiAJCQkgICAgICAgIm5ld2VzdF9tb3VudF9pZCAlbHUiLCBnZXRfZGVzY19tb3VudF9pZChkZXNjKSwKIAkJCSAgICAgICBuZXdlc3RfbW91bnRfaWQpOwogCQlicmVsc2UoZF9iaCk7CiAJCXJldHVybiAxOwogCX0KLQljX2JoID0gam91cm5hbF9icmVhZChwX3Nfc2IsIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpICsKKwljX2JoID0gam91cm5hbF9icmVhZChzYiwgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSArCiAJCQkgICAgICgodHJhbnNfb2Zmc2V0ICsgZ2V0X2Rlc2NfdHJhbnNfbGVuKGRlc2MpICsgMSkgJQotCQkJICAgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKSk7CisJCQkgICAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSkpOwogCWlmICghY19iaCkgewogCQlicmVsc2UoZF9iaCk7CiAJCXJldHVybiAxOwogCX0KIAljb21taXQgPSAoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY29tbWl0ICopY19iaC0+Yl9kYXRhOwotCWlmIChqb3VybmFsX2NvbXBhcmVfZGVzY19jb21taXQocF9zX3NiLCBkZXNjLCBjb21taXQpKSB7Ci0JCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwlpZiAoam91cm5hbF9jb21wYXJlX2Rlc2NfY29tbWl0KHNiLCBkZXNjLCBjb21taXQpKSB7CisJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkJICAgICAgICJqb3VybmFsX3JlYWRfdHJhbnNhY3Rpb24sICIKIAkJCSAgICAgICAiY29tbWl0IG9mZnNldCAlbGx1IGhhZCBiYWQgdGltZSAlZCBvciBsZW5ndGggJWQiLAogCQkJICAgICAgIGNfYmgtPmJfYmxvY2tuciAtCi0JCQkgICAgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYiksCisJCQkgICAgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSwKIAkJCSAgICAgICBnZXRfY29tbWl0X3RyYW5zX2lkKGNvbW1pdCksCiAJCQkgICAgICAgZ2V0X2NvbW1pdF90cmFuc19sZW4oY29tbWl0KSk7CiAJCWJyZWxzZShjX2JoKTsKQEAgLTIxOTUsMzggKzIxOTUsNDEgQEAKIAkJYnJlbHNlKGRfYmgpOwogCQlrZnJlZShsb2dfYmxvY2tzKTsKIAkJa2ZyZWUocmVhbF9ibG9ja3MpOwotCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkgImpvdXJuYWwtMTE2OToga21hbGxvYyBmYWlsZWQsIHVuYWJsZSB0byBtb3VudCBGUyIpOworCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC0xMTY5IiwKKwkJCQkgImttYWxsb2MgZmFpbGVkLCB1bmFibGUgdG8gbW91bnQgRlMiKTsKIAkJcmV0dXJuIC0xOwogCX0KIAkvKiBnZXQgYWxsIHRoZSBidWZmZXIgaGVhZHMgKi8KLQl0cmFuc19oYWxmID0gam91cm5hbF90cmFuc19oYWxmKHBfc19zYi0+c19ibG9ja3NpemUpOworCXRyYW5zX2hhbGYgPSBqb3VybmFsX3RyYW5zX2hhbGYoc2ItPnNfYmxvY2tzaXplKTsKIAlmb3IgKGkgPSAwOyBpIDwgZ2V0X2Rlc2NfdHJhbnNfbGVuKGRlc2MpOyBpKyspIHsKIAkJbG9nX2Jsb2Nrc1tpXSA9Ci0JCSAgICBqb3VybmFsX2dldGJsayhwX3Nfc2IsCi0JCQkJICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikgKworCQkgICAgam91cm5hbF9nZXRibGsoc2IsCisJCQkJICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSArCiAJCQkJICAgKHRyYW5zX29mZnNldCArIDEgKwotCQkJCSAgICBpKSAlIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSk7CisJCQkJICAgIGkpICUgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikpOwogCQlpZiAoaSA8IHRyYW5zX2hhbGYpIHsKIAkJCXJlYWxfYmxvY2tzW2ldID0KLQkJCSAgICBzYl9nZXRibGsocF9zX3NiLAorCQkJICAgIHNiX2dldGJsayhzYiwKIAkJCQkgICAgICBsZTMyX3RvX2NwdShkZXNjLT5qX3JlYWxibG9ja1tpXSkpOwogCQl9IGVsc2UgewogCQkJcmVhbF9ibG9ja3NbaV0gPQotCQkJICAgIHNiX2dldGJsayhwX3Nfc2IsCisJCQkgICAgc2JfZ2V0YmxrKHNiLAogCQkJCSAgICAgIGxlMzJfdG9fY3B1KGNvbW1pdC0+CiAJCQkJCQkgIGpfcmVhbGJsb2NrW2kgLSB0cmFuc19oYWxmXSkpOwogCQl9Ci0JCWlmIChyZWFsX2Jsb2Nrc1tpXS0+Yl9ibG9ja25yID4gU0JfQkxPQ0tfQ09VTlQocF9zX3NiKSkgewotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJCSAiam91cm5hbC0xMjA3OiBSRVBMQVkgRkFJTFVSRSBmc2NrIHJlcXVpcmVkISBCbG9jayB0byByZXBsYXkgaXMgb3V0c2lkZSBvZiBmaWxlc3lzdGVtIik7CisJCWlmIChyZWFsX2Jsb2Nrc1tpXS0+Yl9ibG9ja25yID4gU0JfQkxPQ0tfQ09VTlQoc2IpKSB7CisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC0xMjA3IiwKKwkJCQkJICJSRVBMQVkgRkFJTFVSRSBmc2NrIHJlcXVpcmVkISAiCisJCQkJCSAiQmxvY2sgdG8gcmVwbGF5IGlzIG91dHNpZGUgb2YgIgorCQkJCQkgImZpbGVzeXN0ZW0iKTsKIAkJCWdvdG8gYWJvcnRfcmVwbGF5OwogCQl9CiAJCS8qIG1ha2Ugc3VyZSB3ZSBkb24ndCB0cnkgdG8gcmVwbGF5IG9udG8gbG9nIG9yIHJlc2VydmVkIGFyZWEgKi8KIAkJaWYgKGlzX2Jsb2NrX2luX2xvZ19vcl9yZXNlcnZlZF9hcmVhCi0JCSAgICAocF9zX3NiLCByZWFsX2Jsb2Nrc1tpXS0+Yl9ibG9ja25yKSkgewotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJCSAiam91cm5hbC0xMjA0OiBSRVBMQVkgRkFJTFVSRSBmc2NrIHJlcXVpcmVkISBUcnlpbmcgdG8gcmVwbGF5IG9udG8gYSBsb2cgYmxvY2siKTsKKwkJICAgIChzYiwgcmVhbF9ibG9ja3NbaV0tPmJfYmxvY2tucikpIHsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTEyMDQiLAorCQkJCQkgIlJFUExBWSBGQUlMVVJFIGZzY2sgcmVxdWlyZWQhICIKKwkJCQkJICJUcnlpbmcgdG8gcmVwbGF5IG9udG8gYSBsb2cgYmxvY2siKTsKIAkJICAgICAgYWJvcnRfcmVwbGF5OgogCQkJYnJlbHNlX2FycmF5KGxvZ19ibG9ja3MsIGkpOwogCQkJYnJlbHNlX2FycmF5KHJlYWxfYmxvY2tzLCBpKTsKQEAgLTIyNDIsOCArMjI0NSw5IEBACiAJZm9yIChpID0gMDsgaSA8IGdldF9kZXNjX3RyYW5zX2xlbihkZXNjKTsgaSsrKSB7CiAJCXdhaXRfb25fYnVmZmVyKGxvZ19ibG9ja3NbaV0pOwogCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShsb2dfYmxvY2tzW2ldKSkgewotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJCSAiam91cm5hbC0xMjEyOiBSRVBMQVkgRkFJTFVSRSBmc2NrIHJlcXVpcmVkISBidWZmZXIgd3JpdGUgZmFpbGVkIik7CisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC0xMjEyIiwKKwkJCQkJICJSRVBMQVkgRkFJTFVSRSBmc2NrIHJlcXVpcmVkISAiCisJCQkJCSAiYnVmZmVyIHdyaXRlIGZhaWxlZCIpOwogCQkJYnJlbHNlX2FycmF5KGxvZ19ibG9ja3MgKyBpLAogCQkJCSAgICAgZ2V0X2Rlc2NfdHJhbnNfbGVuKGRlc2MpIC0gaSk7CiAJCQlicmVsc2VfYXJyYXkocmVhbF9ibG9ja3MsIGdldF9kZXNjX3RyYW5zX2xlbihkZXNjKSk7CkBAIC0yMjY2LDggKzIyNzAsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBnZXRfZGVzY190cmFuc19sZW4oZGVzYyk7IGkrKykgewogCQl3YWl0X29uX2J1ZmZlcihyZWFsX2Jsb2Nrc1tpXSk7CiAJCWlmICghYnVmZmVyX3VwdG9kYXRlKHJlYWxfYmxvY2tzW2ldKSkgewotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJCSAiam91cm5hbC0xMjI2OiBSRVBMQVkgRkFJTFVSRSwgZnNjayByZXF1aXJlZCEgYnVmZmVyIHdyaXRlIGZhaWxlZCIpOworCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtMTIyNiIsCisJCQkJCSAiUkVQTEFZIEZBSUxVUkUsIGZzY2sgcmVxdWlyZWQhICIKKwkJCQkJICJidWZmZXIgd3JpdGUgZmFpbGVkIik7CiAJCQlicmVsc2VfYXJyYXkocmVhbF9ibG9ja3MgKyBpLAogCQkJCSAgICAgZ2V0X2Rlc2NfdHJhbnNfbGVuKGRlc2MpIC0gaSk7CiAJCQlicmVsc2UoY19iaCk7CkBAIC0yMjc5LDE1ICsyMjg0LDE1IEBACiAJCWJyZWxzZShyZWFsX2Jsb2Nrc1tpXSk7CiAJfQogCWN1cl9kYmxvY2sgPQotCSAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSArCisJICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikgKwogCSAgICAoKHRyYW5zX29mZnNldCArIGdldF9kZXNjX3RyYW5zX2xlbihkZXNjKSArCi0JICAgICAgMikgJSBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikpOwotCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwkgICAgICAyKSAlIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpKTsKKwlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKIAkJICAgICAgICJqb3VybmFsLTEwOTU6IHNldHRpbmcgam91cm5hbCAiICJzdGFydCB0byBvZmZzZXQgJWxkIiwKLQkJICAgICAgIGN1cl9kYmxvY2sgLSBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSk7CisJCSAgICAgICBjdXJfZGJsb2NrIC0gU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSk7CiAKIAkvKiBpbml0IHN0YXJ0aW5nIHZhbHVlcyBmb3IgdGhlIGZpcnN0IHRyYW5zYWN0aW9uLCBpbiBjYXNlIHRoaXMgaXMgdGhlIGxhc3QgdHJhbnNhY3Rpb24gdG8gYmUgcmVwbGF5ZWQuICovCi0Jam91cm5hbC0+al9zdGFydCA9IGN1cl9kYmxvY2sgLSBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKTsKKwlqb3VybmFsLT5qX3N0YXJ0ID0gY3VyX2RibG9jayAtIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYik7CiAJam91cm5hbC0+al9sYXN0X2ZsdXNoX3RyYW5zX2lkID0gdHJhbnNfaWQ7CiAJam91cm5hbC0+al90cmFuc19pZCA9IHRyYW5zX2lkICsgMTsKIAkvKiBjaGVjayBmb3IgdHJhbnNfaWQgb3ZlcmZsb3cgKi8KQEAgLTIzNTIsMTIgKzIzNTcsMTIgQEAKICoqCiAqKiBPbiBleGl0LCBpdCBzZXRzIHRoaW5ncyB1cCBzbyB0aGUgZmlyc3QgdHJhbnNhY3Rpb24gd2lsbCB3b3JrIGNvcnJlY3RseS4KICovCi1zdGF0aWMgaW50IGpvdXJuYWxfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKK3N0YXRpYyBpbnQgam91cm5hbF9yZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9kZXNjICpkZXNjOwotCXVuc2lnbmVkIGxvbmcgb2xkZXN0X3RyYW5zX2lkID0gMDsKLQl1bnNpZ25lZCBsb25nIG9sZGVzdF9pbnZhbGlkX3RyYW5zX2lkID0gMDsKKwl1bnNpZ25lZCBpbnQgb2xkZXN0X3RyYW5zX2lkID0gMDsKKwl1bnNpZ25lZCBpbnQgb2xkZXN0X2ludmFsaWRfdHJhbnNfaWQgPSAwOwogCXRpbWVfdCBzdGFydDsKIAl1bnNpZ25lZCBsb25nIG9sZGVzdF9zdGFydCA9IDA7CiAJdW5zaWduZWQgbG9uZyBjdXJfZGJsb2NrID0gMDsKQEAgLTIzNzAsNDYgKzIzNzUsNDYgQEAKIAlpbnQgcmV0OwogCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAotCWN1cl9kYmxvY2sgPSBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKTsKLQlyZWlzZXJmc19pbmZvKHBfc19zYiwgImNoZWNraW5nIHRyYW5zYWN0aW9uIGxvZyAoJXMpXG4iLAorCWN1cl9kYmxvY2sgPSBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpOworCXJlaXNlcmZzX2luZm8oc2IsICJjaGVja2luZyB0cmFuc2FjdGlvbiBsb2cgKCVzKVxuIiwKIAkJICAgICAgYmRldm5hbWUoam91cm5hbC0+al9kZXZfYmQsIGIpKTsKIAlzdGFydCA9IGdldF9zZWNvbmRzKCk7CiAKLQkvKiBzdGVwIDEsIHJlYWQgaW4gdGhlIGpvdXJuYWwgaGVhZGVyIGJsb2NrLiAgQ2hlY2sgdGhlIHRyYW5zYWN0aW9uIGl0IHNheXMgCi0JICoqIGlzIHRoZSBmaXJzdCB1bmZsdXNoZWQsIGFuZCBpZiB0aGF0IHRyYW5zYWN0aW9uIGlzIG5vdCB2YWxpZCwgCisJLyogc3RlcCAxLCByZWFkIGluIHRoZSBqb3VybmFsIGhlYWRlciBibG9jay4gIENoZWNrIHRoZSB0cmFuc2FjdGlvbiBpdCBzYXlzCisJICoqIGlzIHRoZSBmaXJzdCB1bmZsdXNoZWQsIGFuZCBpZiB0aGF0IHRyYW5zYWN0aW9uIGlzIG5vdCB2YWxpZCwKIAkgKiogcmVwbGF5IGlzIGRvbmUKIAkgKi8KLQlqb3VybmFsLT5qX2hlYWRlcl9iaCA9IGpvdXJuYWxfYnJlYWQocF9zX3NiLAotCQkJCQkgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpCi0JCQkJCSAgICAgKyBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikpOworCWpvdXJuYWwtPmpfaGVhZGVyX2JoID0gam91cm5hbF9icmVhZChzYiwKKwkJCQkJICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpCisJCQkJCSAgICAgKyBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSk7CiAJaWYgKCFqb3VybmFsLT5qX2hlYWRlcl9iaCkgewogCQlyZXR1cm4gMTsKIAl9CiAJamggPSAoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfaGVhZGVyICopKGpvdXJuYWwtPmpfaGVhZGVyX2JoLT5iX2RhdGEpOwogCWlmIChsZTMyX3RvX2NwdShqaC0+al9maXJzdF91bmZsdXNoZWRfb2Zmc2V0KSA8Ci0JICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKQorCSAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKQogCSAgICAmJiBsZTMyX3RvX2NwdShqaC0+al9sYXN0X2ZsdXNoX3RyYW5zX2lkKSA+IDApIHsKIAkJb2xkZXN0X3N0YXJ0ID0KLQkJICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpICsKKwkJICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikgKwogCQkgICAgbGUzMl90b19jcHUoamgtPmpfZmlyc3RfdW5mbHVzaGVkX29mZnNldCk7CiAJCW9sZGVzdF90cmFuc19pZCA9IGxlMzJfdG9fY3B1KGpoLT5qX2xhc3RfZmx1c2hfdHJhbnNfaWQpICsgMTsKIAkJbmV3ZXN0X21vdW50X2lkID0gbGUzMl90b19jcHUoamgtPmpfbW91bnRfaWQpOwotCQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCisJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkJICAgICAgICJqb3VybmFsLTExNTM6IGZvdW5kIGluICIKIAkJCSAgICAgICAiaGVhZGVyOiBmaXJzdF91bmZsdXNoZWRfb2Zmc2V0ICVkLCBsYXN0X2ZsdXNoZWRfdHJhbnNfaWQgIgogCQkJICAgICAgICIlbHUiLCBsZTMyX3RvX2NwdShqaC0+al9maXJzdF91bmZsdXNoZWRfb2Zmc2V0KSwKIAkJCSAgICAgICBsZTMyX3RvX2NwdShqaC0+al9sYXN0X2ZsdXNoX3RyYW5zX2lkKSk7CiAJCXZhbGlkX2pvdXJuYWxfaGVhZGVyID0gMTsKIAotCQkvKiBub3csIHdlIHRyeSB0byByZWFkIHRoZSBmaXJzdCB1bmZsdXNoZWQgb2Zmc2V0LiAgSWYgaXQgaXMgbm90IHZhbGlkLCAKLQkJICoqIHRoZXJlIGlzIG5vdGhpbmcgbW9yZSB3ZSBjYW4gZG8sIGFuZCBpdCBtYWtlcyBubyBzZW5zZSB0byByZWFkIAorCQkvKiBub3csIHdlIHRyeSB0byByZWFkIHRoZSBmaXJzdCB1bmZsdXNoZWQgb2Zmc2V0LiAgSWYgaXQgaXMgbm90IHZhbGlkLAorCQkgKiogdGhlcmUgaXMgbm90aGluZyBtb3JlIHdlIGNhbiBkbywgYW5kIGl0IG1ha2VzIG5vIHNlbnNlIHRvIHJlYWQKIAkJICoqIHRocm91Z2ggdGhlIHdob2xlIGxvZy4KIAkJICovCiAJCWRfYmggPQotCQkgICAgam91cm5hbF9icmVhZChwX3Nfc2IsCi0JCQkJICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSArCisJCSAgICBqb3VybmFsX2JyZWFkKHNiLAorCQkJCSAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSArCiAJCQkJICBsZTMyX3RvX2NwdShqaC0+al9maXJzdF91bmZsdXNoZWRfb2Zmc2V0KSk7Ci0JCXJldCA9IGpvdXJuYWxfdHJhbnNhY3Rpb25faXNfdmFsaWQocF9zX3NiLCBkX2JoLCBOVUxMLCBOVUxMKTsKKwkJcmV0ID0gam91cm5hbF90cmFuc2FjdGlvbl9pc192YWxpZChzYiwgZF9iaCwgTlVMTCwgTlVMTCk7CiAJCWlmICghcmV0KSB7CiAJCQljb250aW51ZV9yZXBsYXkgPSAwOwogCQl9CkBAIC0yNDE3LDkgKzI0MjIsOSBAQAogCQlnb3RvIHN0YXJ0X2xvZ19yZXBsYXk7CiAJfQogCi0JaWYgKGNvbnRpbnVlX3JlcGxheSAmJiBiZGV2X3JlYWRfb25seShwX3Nfc2ItPnNfYmRldikpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJICJjbG0tMjA3NjogZGV2aWNlIGlzIHJlYWRvbmx5LCB1bmFibGUgdG8gcmVwbGF5IGxvZyIpOworCWlmIChjb250aW51ZV9yZXBsYXkgJiYgYmRldl9yZWFkX29ubHkoc2ItPnNfYmRldikpIHsKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgImNsbS0yMDc2IiwKKwkJCQkgImRldmljZSBpcyByZWFkb25seSwgdW5hYmxlIHRvIHJlcGxheSBsb2ciKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMjQyOCwxNyArMjQzMywxNyBAQAogCSAqLwogCXdoaWxlIChjb250aW51ZV9yZXBsYXkKIAkgICAgICAgJiYgY3VyX2RibG9jayA8Ci0JICAgICAgIChTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSArCi0JCVNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSkpIHsKKwkgICAgICAgKFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikgKworCQlTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSkpIHsKIAkJLyogTm90ZSB0aGF0IGl0IGlzIHJlcXVpcmVkIGZvciBibG9ja3NpemUgb2YgcHJpbWFyeSBmcyBkZXZpY2UgYW5kIGpvdXJuYWwKIAkJICAgZGV2aWNlIHRvIGJlIHRoZSBzYW1lICovCiAJCWRfYmggPQogCQkgICAgcmVpc2VyZnNfYnJlYWRhKGpvdXJuYWwtPmpfZGV2X2JkLCBjdXJfZGJsb2NrLAotCQkJCSAgICBwX3Nfc2ItPnNfYmxvY2tzaXplLAotCQkJCSAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSArCi0JCQkJICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSk7CisJCQkJICAgIHNiLT5zX2Jsb2Nrc2l6ZSwKKwkJCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSArCisJCQkJICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpKTsKIAkJcmV0ID0KLQkJICAgIGpvdXJuYWxfdHJhbnNhY3Rpb25faXNfdmFsaWQocF9zX3NiLCBkX2JoLAorCQkgICAgam91cm5hbF90cmFuc2FjdGlvbl9pc192YWxpZChzYiwgZF9iaCwKIAkJCQkJCSAmb2xkZXN0X2ludmFsaWRfdHJhbnNfaWQsCiAJCQkJCQkgJm5ld2VzdF9tb3VudF9pZCk7CiAJCWlmIChyZXQgPT0gMSkgewpAQCAtMjQ0NywyNiArMjQ1MiwyNiBAQAogCQkJCW9sZGVzdF90cmFuc19pZCA9IGdldF9kZXNjX3RyYW5zX2lkKGRlc2MpOwogCQkJCW9sZGVzdF9zdGFydCA9IGRfYmgtPmJfYmxvY2tucjsKIAkJCQluZXdlc3RfbW91bnRfaWQgPSBnZXRfZGVzY19tb3VudF9pZChkZXNjKTsKLQkJCQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCisJCQkJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCQkJCSAgICAgICAiam91cm5hbC0xMTc5OiBTZXR0aW5nICIKIAkJCQkJICAgICAgICJvbGRlc3Rfc3RhcnQgdG8gb2Zmc2V0ICVsbHUsIHRyYW5zX2lkICVsdSIsCiAJCQkJCSAgICAgICBvbGRlc3Rfc3RhcnQgLQogCQkJCQkgICAgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLCi0JCQkJCSAgICAgICAocF9zX3NiKSwgb2xkZXN0X3RyYW5zX2lkKTsKKwkJCQkJICAgICAgIChzYiksIG9sZGVzdF90cmFuc19pZCk7CiAJCQl9IGVsc2UgaWYgKG9sZGVzdF90cmFuc19pZCA+IGdldF9kZXNjX3RyYW5zX2lkKGRlc2MpKSB7CiAJCQkJLyogb25lIHdlIGp1c3QgcmVhZCB3YXMgb2xkZXIgKi8KIAkJCQlvbGRlc3RfdHJhbnNfaWQgPSBnZXRfZGVzY190cmFuc19pZChkZXNjKTsKIAkJCQlvbGRlc3Rfc3RhcnQgPSBkX2JoLT5iX2Jsb2NrbnI7Ci0JCQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCQkJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkJCQkgICAgICAgImpvdXJuYWwtMTE4MDogUmVzZXR0aW5nICIKIAkJCQkJICAgICAgICJvbGRlc3Rfc3RhcnQgdG8gb2Zmc2V0ICVsdSwgdHJhbnNfaWQgJWx1IiwKIAkJCQkJICAgICAgIG9sZGVzdF9zdGFydCAtCiAJCQkJCSAgICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0sKLQkJCQkJICAgICAgIChwX3Nfc2IpLCBvbGRlc3RfdHJhbnNfaWQpOworCQkJCQkgICAgICAgKHNiKSwgb2xkZXN0X3RyYW5zX2lkKTsKIAkJCX0KIAkJCWlmIChuZXdlc3RfbW91bnRfaWQgPCBnZXRfZGVzY19tb3VudF9pZChkZXNjKSkgewogCQkJCW5ld2VzdF9tb3VudF9pZCA9IGdldF9kZXNjX21vdW50X2lkKGRlc2MpOwotCQkJCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwkJCQlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKIAkJCQkJICAgICAgICJqb3VybmFsLTEyOTk6IFNldHRpbmcgIgogCQkJCQkgICAgICAgIm5ld2VzdF9tb3VudF9pZCB0byAlZCIsCiAJCQkJCSAgICAgICBnZXRfZGVzY19tb3VudF9pZChkZXNjKSk7CkBAIC0yNDgxLDE3ICsyNDg2LDE3IEBACiAgICAgICBzdGFydF9sb2dfcmVwbGF5OgogCWN1cl9kYmxvY2sgPSBvbGRlc3Rfc3RhcnQ7CiAJaWYgKG9sZGVzdF90cmFuc19pZCkgewotCQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCisJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkJICAgICAgICJqb3VybmFsLTEyMDY6IFN0YXJ0aW5nIHJlcGxheSAiCiAJCQkgICAgICAgImZyb20gb2Zmc2V0ICVsbHUsIHRyYW5zX2lkICVsdSIsCi0JCQkgICAgICAgY3VyX2RibG9jayAtIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpLAorCQkJICAgICAgIGN1cl9kYmxvY2sgLSBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpLAogCQkJICAgICAgIG9sZGVzdF90cmFuc19pZCk7CiAKIAl9CiAJcmVwbGF5X2NvdW50ID0gMDsKIAl3aGlsZSAoY29udGludWVfcmVwbGF5ICYmIG9sZGVzdF90cmFuc19pZCA+IDApIHsKIAkJcmV0ID0KLQkJICAgIGpvdXJuYWxfcmVhZF90cmFuc2FjdGlvbihwX3Nfc2IsIGN1cl9kYmxvY2ssIG9sZGVzdF9zdGFydCwKKwkJICAgIGpvdXJuYWxfcmVhZF90cmFuc2FjdGlvbihzYiwgY3VyX2RibG9jaywgb2xkZXN0X3N0YXJ0LAogCQkJCQkgICAgIG9sZGVzdF90cmFuc19pZCwgbmV3ZXN0X21vdW50X2lkKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXJldHVybiByZXQ7CkBAIC0yNDk5LDE0ICsyNTA0LDE0IEBACiAJCQlicmVhazsKIAkJfQogCQljdXJfZGJsb2NrID0KLQkJICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpICsgam91cm5hbC0+al9zdGFydDsKKwkJICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikgKyBqb3VybmFsLT5qX3N0YXJ0OwogCQlyZXBsYXlfY291bnQrKzsKIAkJaWYgKGN1cl9kYmxvY2sgPT0gb2xkZXN0X3N0YXJ0KQogCQkJYnJlYWs7CiAJfQogCiAJaWYgKG9sZGVzdF90cmFuc19pZCA9PSAwKSB7Ci0JCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwkJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCQkgICAgICAgImpvdXJuYWwtMTIyNTogTm8gdmFsaWQgIiAidHJhbnNhY3Rpb25zIGZvdW5kIik7CiAJfQogCS8qIGpfc3RhcnQgZG9lcyBub3QgZ2V0IHNldCBjb3JyZWN0bHkgaWYgd2UgZG9uJ3QgcmVwbGF5IGFueSB0cmFuc2FjdGlvbnMuCkBAIC0yNTI2LDE2ICsyNTMxLDE2IEBACiAJfSBlbHNlIHsKIAkJam91cm5hbC0+al9tb3VudF9pZCA9IG5ld2VzdF9tb3VudF9pZCArIDE7CiAJfQotCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwgImpvdXJuYWwtMTI5OTogU2V0dGluZyAiCisJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsICJqb3VybmFsLTEyOTk6IFNldHRpbmcgIgogCQkgICAgICAgIm5ld2VzdF9tb3VudF9pZCB0byAlbHUiLCBqb3VybmFsLT5qX21vdW50X2lkKTsKIAlqb3VybmFsLT5qX2ZpcnN0X3VuZmx1c2hlZF9vZmZzZXQgPSBqb3VybmFsLT5qX3N0YXJ0OwogCWlmIChyZXBsYXlfY291bnQgPiAwKSB7Ci0JCXJlaXNlcmZzX2luZm8ocF9zX3NiLAorCQlyZWlzZXJmc19pbmZvKHNiLAogCQkJICAgICAgInJlcGxheWVkICVkIHRyYW5zYWN0aW9ucyBpbiAlbHUgc2Vjb25kc1xuIiwKIAkJCSAgICAgIHJlcGxheV9jb3VudCwgZ2V0X3NlY29uZHMoKSAtIHN0YXJ0KTsKIAl9Ci0JaWYgKCFiZGV2X3JlYWRfb25seShwX3Nfc2ItPnNfYmRldikgJiYKLQkgICAgX3VwZGF0ZV9qb3VybmFsX2hlYWRlcl9ibG9jayhwX3Nfc2IsIGpvdXJuYWwtPmpfc3RhcnQsCisJaWYgKCFiZGV2X3JlYWRfb25seShzYi0+c19iZGV2KSAmJgorCSAgICBfdXBkYXRlX2pvdXJuYWxfaGVhZGVyX2Jsb2NrKHNiLCBqb3VybmFsLT5qX3N0YXJ0LAogCQkJCQkgam91cm5hbC0+al9sYXN0X2ZsdXNoX3RyYW5zX2lkKSkgewogCQkvKiByZXBsYXkgZmFpbGVkLCBjYWxsZXIgbXVzdCBjYWxsIGZyZWVfam91cm5hbF9yYW0gYW5kIGFib3J0CiAJCSAqKiB0aGUgbW91bnQKQEAgLTI1NjAsOSArMjU2NSw5IEBACiAJcmV0dXJuIGpsOwogfQogCi1zdGF0aWMgdm9pZCBqb3VybmFsX2xpc3RfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKK3N0YXRpYyB2b2lkIGpvdXJuYWxfbGlzdF9pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0JU0JfSk9VUk5BTChwX3Nfc2IpLT5qX2N1cnJlbnRfamwgPSBhbGxvY19qb3VybmFsX2xpc3QocF9zX3NiKTsKKwlTQl9KT1VSTkFMKHNiKS0+al9jdXJyZW50X2psID0gYWxsb2Nfam91cm5hbF9saXN0KHNiKTsKIH0KIAogc3RhdGljIGludCByZWxlYXNlX2pvdXJuYWxfZGV2KHN0cnVjdCBzdXBlcl9ibG9jayAqc3VwZXIsCkBAIC0yNTgwLDkgKzI1ODUsOCBAQAogCX0KIAogCWlmIChyZXN1bHQgIT0gMCkgewotCQlyZWlzZXJmc193YXJuaW5nKHN1cGVyLAotCQkJCSAic2gtNDU3OiByZWxlYXNlX2pvdXJuYWxfZGV2OiBDYW5ub3QgcmVsZWFzZSBqb3VybmFsIGRldmljZTogJWkiLAotCQkJCSByZXN1bHQpOworCQlyZWlzZXJmc193YXJuaW5nKHN1cGVyLCAic2gtNDU3IiwKKwkJCQkgIkNhbm5vdCByZWxlYXNlIGpvdXJuYWwgZGV2aWNlOiAlaSIsIHJlc3VsdCk7CiAJfQogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0yNjEyLDcgKzI2MTYsNyBAQAogCQlpZiAoSVNfRVJSKGpvdXJuYWwtPmpfZGV2X2JkKSkgewogCQkJcmVzdWx0ID0gUFRSX0VSUihqb3VybmFsLT5qX2Rldl9iZCk7CiAJCQlqb3VybmFsLT5qX2Rldl9iZCA9IE5VTEw7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHN1cGVyLCAic2gtNDU4OiBqb3VybmFsX2luaXRfZGV2OiAiCisJCQlyZWlzZXJmc193YXJuaW5nKHN1cGVyLCAic2gtNDU4IiwKIAkJCQkJICJjYW5ub3QgaW5pdCBqb3VybmFsIGRldmljZSAnJXMnOiAlaSIsCiAJCQkJCSBfX2JkZXZuYW1lKGpkZXYsIGIpLCByZXN1bHQpOwogCQkJcmV0dXJuIHJlc3VsdDsKQEAgLTI2NjIsMzAgKzI2NjYsMzAgQEAKICAqLwogI2RlZmluZSBSRUlTRVJGU19TVEFOREFSRF9CTEtTSVpFICg0MDk2KQogCi1zdGF0aWMgaW50IGNoZWNrX2FkdmlzZV90cmFuc19wYXJhbXMoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgaW50IGNoZWNrX2FkdmlzZV90cmFuc19wYXJhbXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICAgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsKQogewogICAgICAgICBpZiAoam91cm5hbC0+al90cmFuc19tYXgpIHsKIAkgICAgICAgIC8qIE5vbi1kZWZhdWx0IGpvdXJuYWwgcGFyYW1zLgogCQkgICBEbyBzYW5pdHkgY2hlY2sgZm9yIHRoZW0uICovCiAJICAgICAgICBpbnQgcmF0aW8gPSAxOwotCQlpZiAocF9zX3NiLT5zX2Jsb2Nrc2l6ZSA8IFJFSVNFUkZTX1NUQU5EQVJEX0JMS1NJWkUpCi0JCSAgICAgICAgcmF0aW8gPSBSRUlTRVJGU19TVEFOREFSRF9CTEtTSVpFIC8gcF9zX3NiLT5zX2Jsb2Nrc2l6ZTsKKwkJaWYgKHNiLT5zX2Jsb2Nrc2l6ZSA8IFJFSVNFUkZTX1NUQU5EQVJEX0JMS1NJWkUpCisJCSAgICAgICAgcmF0aW8gPSBSRUlTRVJGU19TVEFOREFSRF9CTEtTSVpFIC8gc2ItPnNfYmxvY2tzaXplOwogCiAJCWlmIChqb3VybmFsLT5qX3RyYW5zX21heCA+IEpPVVJOQUxfVFJBTlNfTUFYX0RFRkFVTFQgLyByYXRpbyB8fAogCQkgICAgam91cm5hbC0+al90cmFuc19tYXggPCBKT1VSTkFMX1RSQU5TX01JTl9ERUZBVUxUIC8gcmF0aW8gfHwKLQkJICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSAvIGpvdXJuYWwtPmpfdHJhbnNfbWF4IDwKKwkJICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpIC8gam91cm5hbC0+al90cmFuc19tYXggPAogCQkgICAgSk9VUk5BTF9NSU5fUkFUSU8pIHsKLQkJICAgICAgICByZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkgInNoLTQ2MjogYmFkIHRyYW5zYWN0aW9uIG1heCBzaXplICgldSkuIEZTQ0s/IiwKLQkJCQkgam91cm5hbC0+al90cmFuc19tYXgpOworCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgInNoLTQ2MiIsCisJCQkJCSAiYmFkIHRyYW5zYWN0aW9uIG1heCBzaXplICgldSkuICIKKwkJCQkJICJGU0NLPyIsIGpvdXJuYWwtPmpfdHJhbnNfbWF4KTsKIAkJCXJldHVybiAxOwogCQl9CiAJCWlmIChqb3VybmFsLT5qX21heF9iYXRjaCAhPSAoam91cm5hbC0+al90cmFuc19tYXgpICoKIAkJICAgICAgICBKT1VSTkFMX01BWF9CQVRDSF9ERUZBVUxUL0pPVVJOQUxfVFJBTlNfTUFYX0RFRkFVTFQpIHsKLQkJICAgICAgICByZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkic2gtNDYzOiBiYWQgdHJhbnNhY3Rpb24gbWF4IGJhdGNoICgldSkuIEZTQ0s/IiwKLQkJCQlqb3VybmFsLT5qX21heF9iYXRjaCk7CisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAic2gtNDYzIiwKKwkJCQkJICJiYWQgdHJhbnNhY3Rpb24gbWF4IGJhdGNoICgldSkuICIKKwkJCQkJICJGU0NLPyIsIGpvdXJuYWwtPmpfbWF4X2JhdGNoKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfSBlbHNlIHsKQEAgLTI2OTMsOSArMjY5NywxMSBAQAogICAgICAgICAgICAgICAgICAgIFRoZSBmaWxlIHN5c3RlbSB3YXMgY3JlYXRlZCBieSBvbGQgdmVyc2lvbgogCQkgICBvZiBta3JlaXNlcmZzLCBzbyBzb21lIGZpZWxkcyBjb250YWluIHplcm9zLAogCQkgICBhbmQgd2UgbmVlZCB0byBhZHZpc2UgcHJvcGVyIHZhbHVlcyBmb3IgdGhlbSAqLwotCSAgICAgICAgaWYgKHBfc19zYi0+c19ibG9ja3NpemUgIT0gUkVJU0VSRlNfU1RBTkRBUkRfQkxLU0laRSkKLQkgICAgICAgICAgICAgICAgcmVpc2VyZnNfcGFuaWMocF9zX3NiLCAic2gtNDY0OiBiYWQgYmxvY2tzaXplICgldSkiLAotCQkJCSAgICAgICBwX3Nfc2ItPnNfYmxvY2tzaXplKTsKKwkJaWYgKHNiLT5zX2Jsb2Nrc2l6ZSAhPSBSRUlTRVJGU19TVEFOREFSRF9CTEtTSVpFKSB7CisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAic2gtNDY0IiwgImJhZCBibG9ja3NpemUgKCV1KSIsCisJCQkJCSBzYi0+c19ibG9ja3NpemUpOworCQkJcmV0dXJuIDE7CisJCX0KIAkJam91cm5hbC0+al90cmFuc19tYXggPSBKT1VSTkFMX1RSQU5TX01BWF9ERUZBVUxUOwogCQlqb3VybmFsLT5qX21heF9iYXRjaCA9IEpPVVJOQUxfTUFYX0JBVENIX0RFRkFVTFQ7CiAJCWpvdXJuYWwtPmpfbWF4X2NvbW1pdF9hZ2UgPSBKT1VSTkFMX01BWF9DT01NSVRfQUdFOwpAQCAtMjcwNiwxMCArMjcxMiwxMCBAQAogLyoKICoqIG11c3QgYmUgY2FsbGVkIG9uY2Ugb24gZnMgbW91bnQuICBjYWxscyBqb3VybmFsX3JlYWQgZm9yIHlvdQogKi8KLWludCBqb3VybmFsX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIGNvbnN0IGNoYXIgKmpfZGV2X25hbWUsCitpbnQgam91cm5hbF9pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKmpfZGV2X25hbWUsCiAJCSBpbnQgb2xkX2Zvcm1hdCwgdW5zaWduZWQgaW50IGNvbW1pdF9tYXhfYWdlKQogewotCWludCBudW1fY25vZGVzID0gU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpICogMjsKKwlpbnQgbnVtX2Nub2RlcyA9IFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpICogMjsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoamg7CiAJc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrICpyczsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9oZWFkZXIgKmpoOwpAQCAtMjcxNywxMCArMjcyMywxMCBAQAogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpsOwogCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAotCWpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYikgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCkpOworCWpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKSA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCByZWlzZXJmc19qb3VybmFsKSk7CiAJaWYgKCFqb3VybmFsKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCSAiam91cm5hbC0xMjU2OiB1bmFibGUgdG8gZ2V0IG1lbW9yeSBmb3Igam91cm5hbCBzdHJ1Y3R1cmUiKTsKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtMTI1NiIsCisJCQkJICJ1bmFibGUgdG8gZ2V0IG1lbW9yeSBmb3Igam91cm5hbCBzdHJ1Y3R1cmUiKTsKIAkJcmV0dXJuIDE7CiAJfQogCW1lbXNldChqb3VybmFsLCAwLCBzaXplb2Yoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwpKTsKQEAgLTI3MjksNTEgKzI3MzUsNTEgQEAKIAlJTklUX0xJU1RfSEVBRCgmam91cm5hbC0+al93b3JraW5nX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZqb3VybmFsLT5qX2pvdXJuYWxfbGlzdCk7CiAJam91cm5hbC0+al9wZXJzaXN0ZW50X3RyYW5zID0gMDsKLQlpZiAocmVpc2VyZnNfYWxsb2NhdGVfbGlzdF9iaXRtYXBzKHBfc19zYiwKKwlpZiAocmVpc2VyZnNfYWxsb2NhdGVfbGlzdF9iaXRtYXBzKHNiLAogCQkJCQkgICBqb3VybmFsLT5qX2xpc3RfYml0bWFwLAotCQkJCQkgICByZWlzZXJmc19ibWFwX2NvdW50KHBfc19zYikpKQorCQkJCQkgICByZWlzZXJmc19ibWFwX2NvdW50KHNiKSkpCiAJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOwotCWFsbG9jYXRlX2JpdG1hcF9ub2RlcyhwX3Nfc2IpOworCWFsbG9jYXRlX2JpdG1hcF9ub2RlcyhzYik7CiAKIAkvKiByZXNlcnZlZCBmb3Igam91cm5hbCBhcmVhIHN1cHBvcnQgKi8KLQlTQl9KT1VSTkFMXzFzdF9SRVNFUlZFRF9CTE9DSyhwX3Nfc2IpID0gKG9sZF9mb3JtYXQgPworCVNCX0pPVVJOQUxfMXN0X1JFU0VSVkVEX0JMT0NLKHNiKSA9IChvbGRfZm9ybWF0ID8KIAkJCQkJCSBSRUlTRVJGU19PTERfRElTS19PRkZTRVRfSU5fQllURVMKLQkJCQkJCSAvIHBfc19zYi0+c19ibG9ja3NpemUgKwotCQkJCQkJIHJlaXNlcmZzX2JtYXBfY291bnQocF9zX3NiKSArCisJCQkJCQkgLyBzYi0+c19ibG9ja3NpemUgKworCQkJCQkJIHJlaXNlcmZzX2JtYXBfY291bnQoc2IpICsKIAkJCQkJCSAxIDoKIAkJCQkJCSBSRUlTRVJGU19ESVNLX09GRlNFVF9JTl9CWVRFUyAvCi0JCQkJCQkgcF9zX3NiLT5zX2Jsb2Nrc2l6ZSArIDIpOworCQkJCQkJIHNiLT5zX2Jsb2Nrc2l6ZSArIDIpOwogCiAJLyogU2FuaXR5IGNoZWNrIHRvIHNlZSBpcyB0aGUgc3RhbmRhcmQgam91cm5hbCBmaXR0aW5nIHdpdGhpbmcgZmlyc3QgYml0bWFwCiAJICAgKGFjdHVhbCBmb3Igc21hbGwgYmxvY2tzaXplcykgKi8KLQlpZiAoIVNCX09ORElTS19KT1VSTkFMX0RFVklDRShwX3Nfc2IpICYmCi0JICAgIChTQl9KT1VSTkFMXzFzdF9SRVNFUlZFRF9CTE9DSyhwX3Nfc2IpICsKLQkgICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSA+IHBfc19zYi0+c19ibG9ja3NpemUgKiA4KSkgewotCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkgImpvdXJuYWwtMTM5Mzogam91cm5hbCBkb2VzIG5vdCBmaXQgZm9yIGFyZWEgIgotCQkJCSAiYWRkcmVzc2VkIGJ5IGZpcnN0IG9mIGJpdG1hcCBibG9ja3MuIEl0IHN0YXJ0cyBhdCAiCisJaWYgKCFTQl9PTkRJU0tfSk9VUk5BTF9ERVZJQ0Uoc2IpICYmCisJICAgIChTQl9KT1VSTkFMXzFzdF9SRVNFUlZFRF9CTE9DSyhzYikgKworCSAgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikgPiBzYi0+c19ibG9ja3NpemUgKiA4KSkgeworCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC0xMzkzIiwKKwkJCQkgImpvdXJuYWwgZG9lcyBub3QgZml0IGZvciBhcmVhIGFkZHJlc3NlZCAiCisJCQkJICJieSBmaXJzdCBvZiBiaXRtYXAgYmxvY2tzLiBJdCBzdGFydHMgYXQgIgogCQkJCSAiJXUgYW5kIGl0cyBzaXplIGlzICV1LiBCbG9jayBzaXplICVsZCIsCi0JCQkJIFNCX0pPVVJOQUxfMXN0X1JFU0VSVkVEX0JMT0NLKHBfc19zYiksCi0JCQkJIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSwKLQkJCQkgcF9zX3NiLT5zX2Jsb2Nrc2l6ZSk7CisJCQkJIFNCX0pPVVJOQUxfMXN0X1JFU0VSVkVEX0JMT0NLKHNiKSwKKwkJCQkgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYiksCisJCQkJIHNiLT5zX2Jsb2Nrc2l6ZSk7CiAJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOwogCX0KIAotCWlmIChqb3VybmFsX2luaXRfZGV2KHBfc19zYiwgam91cm5hbCwgal9kZXZfbmFtZSkgIT0gMCkgewotCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkgInNoLTQ2MjogdW5hYmxlIHRvIGluaXRpYWxpemUgam9ybmFsIGRldmljZSIpOworCWlmIChqb3VybmFsX2luaXRfZGV2KHNiLCBqb3VybmFsLCBqX2Rldl9uYW1lKSAhPSAwKSB7CisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJzaC00NjIiLAorCQkJCSAidW5hYmxlIHRvIGluaXRpYWxpemUgam9ybmFsIGRldmljZSIpOwogCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKIAl9CiAKLQlycyA9IFNCX0RJU0tfU1VQRVJfQkxPQ0socF9zX3NiKTsKKwlycyA9IFNCX0RJU0tfU1VQRVJfQkxPQ0soc2IpOwogCiAJLyogcmVhZCBqb3VybmFsIGhlYWRlciAqLwotCWJoamggPSBqb3VybmFsX2JyZWFkKHBfc19zYiwKLQkJCSAgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikgKwotCQkJICAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikpOworCWJoamggPSBqb3VybmFsX2JyZWFkKHNiLAorCQkJICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpICsKKwkJCSAgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikpOwogCWlmICghYmhqaCkgewotCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkgInNoLTQ1OTogdW5hYmxlIHRvIHJlYWQgam91cm5hbCBoZWFkZXIiKTsKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgInNoLTQ1OSIsCisJCQkJICJ1bmFibGUgdG8gcmVhZCBqb3VybmFsIGhlYWRlciIpOwogCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKIAl9CiAJamggPSAoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfaGVhZGVyICopKGJoamgtPmJfZGF0YSk7CkBAIC0yNzgyLDEwICsyNzg4LDEwIEBACiAJaWYgKGlzX3JlaXNlcmZzX2pyKHJzKQogCSAgICAmJiAobGUzMl90b19jcHUoamgtPmpoX2pvdXJuYWwuanBfam91cm5hbF9tYWdpYykgIT0KIAkJc2JfanBfam91cm5hbF9tYWdpYyhycykpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCSAic2gtNDYwOiBqb3VybmFsIGhlYWRlciBtYWdpYyAleCAiCi0JCQkJICIoZGV2aWNlICVzKSBkb2VzIG5vdCBtYXRjaCB0byBtYWdpYyBmb3VuZCBpbiBzdXBlciAiCi0JCQkJICJibG9jayAleCIsIGpoLT5qaF9qb3VybmFsLmpwX2pvdXJuYWxfbWFnaWMsCisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJzaC00NjAiLAorCQkJCSAiam91cm5hbCBoZWFkZXIgbWFnaWMgJXggKGRldmljZSAlcykgZG9lcyAiCisJCQkJICJub3QgbWF0Y2ggdG8gbWFnaWMgZm91bmQgaW4gc3VwZXIgYmxvY2sgJXgiLAorCQkJCSBqaC0+amhfam91cm5hbC5qcF9qb3VybmFsX21hZ2ljLAogCQkJCSBiZGV2bmFtZShqb3VybmFsLT5qX2Rldl9iZCwgYiksCiAJCQkJIHNiX2pwX2pvdXJuYWxfbWFnaWMocnMpKTsKIAkJYnJlbHNlKGJoamgpOwpAQCAtMjc5OCw3ICsyODA0LDcgQEAKIAkgICAgbGUzMl90b19jcHUoamgtPmpoX2pvdXJuYWwuanBfam91cm5hbF9tYXhfY29tbWl0X2FnZSk7CiAJam91cm5hbC0+al9tYXhfdHJhbnNfYWdlID0gSk9VUk5BTF9NQVhfVFJBTlNfQUdFOwogCi0JaWYgKGNoZWNrX2FkdmlzZV90cmFuc19wYXJhbXMocF9zX3NiLCBqb3VybmFsKSAhPSAwKQorCWlmIChjaGVja19hZHZpc2VfdHJhbnNfcGFyYW1zKHNiLCBqb3VybmFsKSAhPSAwKQogCSAgICAgICAgZ290byBmcmVlX2FuZF9yZXR1cm47CiAJam91cm5hbC0+al9kZWZhdWx0X21heF9jb21taXRfYWdlID0gam91cm5hbC0+al9tYXhfY29tbWl0X2FnZTsKIApAQCAtMjgwNywxMiArMjgxMywxMiBAQAogCQlqb3VybmFsLT5qX21heF90cmFuc19hZ2UgPSBjb21taXRfbWF4X2FnZTsKIAl9CiAKLQlyZWlzZXJmc19pbmZvKHBfc19zYiwgImpvdXJuYWwgcGFyYW1zOiBkZXZpY2UgJXMsIHNpemUgJXUsICIKKwlyZWlzZXJmc19pbmZvKHNiLCAiam91cm5hbCBwYXJhbXM6IGRldmljZSAlcywgc2l6ZSAldSwgIgogCQkgICAgICAiam91cm5hbCBmaXJzdCBibG9jayAldSwgbWF4IHRyYW5zIGxlbiAldSwgbWF4IGJhdGNoICV1LCAiCiAJCSAgICAgICJtYXggY29tbWl0IGFnZSAldSwgbWF4IHRyYW5zIGFnZSAldVxuIiwKIAkJICAgICAgYmRldm5hbWUoam91cm5hbC0+al9kZXZfYmQsIGIpLAotCQkgICAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYiksCi0JCSAgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpLAorCQkgICAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSwKKwkJICAgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSwKIAkJICAgICAgam91cm5hbC0+al90cmFuc19tYXgsCiAJCSAgICAgIGpvdXJuYWwtPmpfbWF4X2JhdGNoLAogCQkgICAgICBqb3VybmFsLT5qX21heF9jb21taXRfYWdlLCBqb3VybmFsLT5qX21heF90cmFuc19hZ2UpOwpAQCAtMjgyMCw3ICsyODI2LDcgQEAKIAlicmVsc2UoYmhqaCk7CiAKIAlqb3VybmFsLT5qX2xpc3RfYml0bWFwX2luZGV4ID0gMDsKLQlqb3VybmFsX2xpc3RfaW5pdChwX3Nfc2IpOworCWpvdXJuYWxfbGlzdF9pbml0KHNiKTsKIAogCW1lbXNldChqb3VybmFsLT5qX2xpc3RfaGFzaF90YWJsZSwgMCwKIAkgICAgICAgSk9VUk5BTF9IQVNIX1NJWkUgKiBzaXplb2Yoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKikpOwpAQCAtMjg1Miw3ICsyODU4LDcgQEAKIAlqb3VybmFsLT5qX211c3Rfd2FpdCA9IDA7CiAKIAlpZiAoam91cm5hbC0+al9jbm9kZV9mcmVlID09IDApIHsKLSAgICAgICAgCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLCAiam91cm5hbC0yMDA0OiBKb3VybmFsIGNub2RlIG1lbW9yeSAiCisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTIwMDQiLCAiSm91cm5hbCBjbm9kZSBtZW1vcnkgIgogCQkgICAgICAgICAgICAgICAgICJhbGxvY2F0aW9uIGZhaWxlZCAoJWxkIGJ5dGVzKS4gSm91cm5hbCBpcyAiCiAJCSAgICAgICAgICAgICAgICAgInRvbyBsYXJnZSBmb3IgYXZhaWxhYmxlIG1lbW9yeS4gVXN1YWxseSAiCiAJCSAgICAgICAgICAgICAgICAgInRoaXMgaXMgZHVlIHRvIGEgam91cm5hbCB0aGF0IGlzIHRvbyBsYXJnZS4iLApAQCAtMjg2MCwxNiArMjg2NiwxNyBAQAogICAgICAgICAJZ290byBmcmVlX2FuZF9yZXR1cm47CiAJfQogCi0JaW5pdF9qb3VybmFsX2hhc2gocF9zX3NiKTsKKwlpbml0X2pvdXJuYWxfaGFzaChzYik7CiAJamwgPSBqb3VybmFsLT5qX2N1cnJlbnRfamw7Ci0JamwtPmpfbGlzdF9iaXRtYXAgPSBnZXRfbGlzdF9iaXRtYXAocF9zX3NiLCBqbCk7CisJamwtPmpfbGlzdF9iaXRtYXAgPSBnZXRfbGlzdF9iaXRtYXAoc2IsIGpsKTsKIAlpZiAoIWpsLT5qX2xpc3RfYml0bWFwKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCSAiam91cm5hbC0yMDA1LCBnZXRfbGlzdF9iaXRtYXAgZmFpbGVkIGZvciBqb3VybmFsIGxpc3QgMCIpOworCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC0yMDA1IiwKKwkJCQkgImdldF9saXN0X2JpdG1hcCBmYWlsZWQgZm9yIGpvdXJuYWwgbGlzdCAwIik7CiAJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOwogCX0KLQlpZiAoam91cm5hbF9yZWFkKHBfc19zYikgPCAwKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLCAiUmVwbGF5IEZhaWx1cmUsIHVuYWJsZSB0byBtb3VudCIpOworCWlmIChqb3VybmFsX3JlYWQoc2IpIDwgMCkgeworCQlyZWlzZXJmc193YXJuaW5nKHNiLCAicmVpc2VyZnMtMjAwNiIsCisJCQkJICJSZXBsYXkgRmFpbHVyZSwgdW5hYmxlIHRvIG1vdW50Iik7CiAJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOwogCX0KIApAQCAtMjg3OCwxMCArMjg4NSwxMCBAQAogCQljb21taXRfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJyZWlzZXJmcyIpOwogCiAJSU5JVF9ERUxBWUVEX1dPUksoJmpvdXJuYWwtPmpfd29yaywgZmx1c2hfYXN5bmNfY29tbWl0cyk7Ci0Jam91cm5hbC0+al93b3JrX3NiID0gcF9zX3NiOworCWpvdXJuYWwtPmpfd29ya19zYiA9IHNiOwogCXJldHVybiAwOwogICAgICAgZnJlZV9hbmRfcmV0dXJuOgotCWZyZWVfam91cm5hbF9yYW0ocF9zX3NiKTsKKwlmcmVlX2pvdXJuYWxfcmFtKHNiKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMjkxMiw3ICsyOTE5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogdGhpcyBtdXN0IGJlIGNhbGxlZCBpbnNpZGUgYSB0cmFuc2FjdGlvbiwgYW5kIHJlcXVpcmVzIHRoZSAKKy8qIHRoaXMgbXVzdCBiZSBjYWxsZWQgaW5zaWRlIGEgdHJhbnNhY3Rpb24sIGFuZCByZXF1aXJlcyB0aGUKICoqIGtlcm5lbF9sb2NrIHRvIGJlIGhlbGQKICovCiB2b2lkIHJlaXNlcmZzX2Jsb2NrX3dyaXRlcyhzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCkKQEAgLTI5NzAsNyArMjk3Nyw3IEBACiAJCXdha2VfdXAoJmpvdXJuYWwtPmpfam9pbl93YWl0KTsKIH0KIAotc3RhdGljIHZvaWQgbGV0X3RyYW5zYWN0aW9uX2dyb3coc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyB0cmFuc19pZCkKK3N0YXRpYyB2b2lkIGxldF90cmFuc2FjdGlvbl9ncm93KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGludCB0cmFuc19pZCkKIHsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXVuc2lnbmVkIGxvbmcgYmNvdW50ID0gam91cm5hbC0+al9iY291bnQ7CkBAIC0yOTk3LDQzICszMDA0LDQzIEBACiAqKiBleHBlY3QgdG8gdXNlIGluIG5ibG9ja3MuCiAqLwogc3RhdGljIGludCBkb19qb3VybmFsX2JlZ2luX3Ioc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzLAorCQkJICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzLAogCQkJICAgICAgaW50IGpvaW4pCiB7CiAJdGltZV90IG5vdyA9IGdldF9zZWNvbmRzKCk7Ci0JaW50IG9sZF90cmFuc19pZDsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwl1bnNpZ25lZCBpbnQgb2xkX3RyYW5zX2lkOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSBteXRoOwogCWludCBzY2hlZF9jb3VudCA9IDA7CiAJaW50IHJldHZhbDsKIAotCXJlaXNlcmZzX2NoZWNrX2xvY2tfZGVwdGgocF9zX3NiLCAiam91cm5hbF9iZWdpbiIpOworCXJlaXNlcmZzX2NoZWNrX2xvY2tfZGVwdGgoc2IsICJqb3VybmFsX2JlZ2luIik7CiAJQlVHX09OKG5ibG9ja3MgPiBqb3VybmFsLT5qX3RyYW5zX21heCk7CiAKLQlQUk9DX0lORk9fSU5DKHBfc19zYiwgam91cm5hbC5qb3VybmFsX2JlaW5nKTsKKwlQUk9DX0lORk9fSU5DKHNiLCBqb3VybmFsLmpvdXJuYWxfYmVpbmcpOwogCS8qIHNldCBoZXJlIGZvciBqb3VybmFsX2pvaW4gKi8KIAl0aC0+dF9yZWZjb3VudCA9IDE7Ci0JdGgtPnRfc3VwZXIgPSBwX3Nfc2I7CisJdGgtPnRfc3VwZXIgPSBzYjsKIAogICAgICAgcmVsb2NrOgotCWxvY2tfam91cm5hbChwX3Nfc2IpOworCWxvY2tfam91cm5hbChzYik7CiAJaWYgKGpvaW4gIT0gSkJFR0lOX0FCT1JUICYmIHJlaXNlcmZzX2lzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsKSkgewotCQl1bmxvY2tfam91cm5hbChwX3Nfc2IpOworCQl1bmxvY2tfam91cm5hbChzYik7CiAJCXJldHZhbCA9IGpvdXJuYWwtPmpfZXJybm87CiAJCWdvdG8gb3V0X2ZhaWw7CiAJfQogCWpvdXJuYWwtPmpfYmNvdW50Kys7CiAKIAlpZiAodGVzdF9iaXQoSl9XUklURVJTX0JMT0NLRUQsICZqb3VybmFsLT5qX3N0YXRlKSkgewotCQl1bmxvY2tfam91cm5hbChwX3Nfc2IpOwotCQlyZWlzZXJmc193YWl0X29uX3dyaXRlX2Jsb2NrKHBfc19zYik7Ci0JCVBST0NfSU5GT19JTkMocF9zX3NiLCBqb3VybmFsLmpvdXJuYWxfcmVsb2NrX3dyaXRlcnMpOworCQl1bmxvY2tfam91cm5hbChzYik7CisJCXJlaXNlcmZzX3dhaXRfb25fd3JpdGVfYmxvY2soc2IpOworCQlQUk9DX0lORk9fSU5DKHNiLCBqb3VybmFsLmpvdXJuYWxfcmVsb2NrX3dyaXRlcnMpOwogCQlnb3RvIHJlbG9jazsKIAl9CiAJbm93ID0gZ2V0X3NlY29uZHMoKTsKIAogCS8qIGlmIHRoZXJlIGlzIG5vIHJvb20gaW4gdGhlIGpvdXJuYWwgT1IKLQkgKiogaWYgdGhpcyB0cmFuc2FjdGlvbiBpcyB0b28gb2xkLCBhbmQgd2Ugd2VyZW4ndCBjYWxsZWQgam9pbmFibGUsIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCBiZWZvcmUgYmVnaW5uaW5nIAorCSAqKiBpZiB0aGlzIHRyYW5zYWN0aW9uIGlzIHRvbyBvbGQsIGFuZCB3ZSB3ZXJlbid0IGNhbGxlZCBqb2luYWJsZSwgd2FpdCBmb3IgaXQgdG8gZmluaXNoIGJlZm9yZSBiZWdpbm5pbmcKIAkgKiogd2UgZG9uJ3Qgc2xlZXAgaWYgdGhlcmUgYXJlbid0IG90aGVyIHdyaXRlcnMKIAkgKi8KIApAQCAtMzA0OCw3ICszMDU1LDcgQEAKIAkgICAgfHwgKCFqb2luICYmIGpvdXJuYWwtPmpfY25vZGVfZnJlZSA8IChqb3VybmFsLT5qX3RyYW5zX21heCAqIDMpKSkgewogCiAJCW9sZF90cmFuc19pZCA9IGpvdXJuYWwtPmpfdHJhbnNfaWQ7Ci0JCXVubG9ja19qb3VybmFsKHBfc19zYik7CS8qIGFsbG93IG90aGVycyB0byBmaW5pc2ggdGhpcyB0cmFuc2FjdGlvbiAqLworCQl1bmxvY2tfam91cm5hbChzYik7CS8qIGFsbG93IG90aGVycyB0byBmaW5pc2ggdGhpcyB0cmFuc2FjdGlvbiAqLwogCiAJCWlmICgham9pbiAmJiAoam91cm5hbC0+al9sZW5fYWxsb2MgKyBuYmxvY2tzICsgMikgPj0KIAkJICAgIGpvdXJuYWwtPmpfbWF4X2JhdGNoICYmCkBAIC0zMDU2LDcgKzMwNjMsNyBAQAogCQkgICAgKGpvdXJuYWwtPmpfbGVuX2FsbG9jICogNzUpKSB7CiAJCQlpZiAoYXRvbWljX3JlYWQoJmpvdXJuYWwtPmpfd2NvdW50KSA+IDEwKSB7CiAJCQkJc2NoZWRfY291bnQrKzsKLQkJCQlxdWV1ZV9sb2dfd3JpdGVyKHBfc19zYik7CisJCQkJcXVldWVfbG9nX3dyaXRlcihzYik7CiAJCQkJZ290byByZWxvY2s7CiAJCQl9CiAJCX0KQEAgLTMwNjYsMjUgKzMwNzMsMjUgQEAKIAkJaWYgKGF0b21pY19yZWFkKCZqb3VybmFsLT5qX2psb2NrKSkgewogCQkJd2hpbGUgKGpvdXJuYWwtPmpfdHJhbnNfaWQgPT0gb2xkX3RyYW5zX2lkICYmCiAJCQkgICAgICAgYXRvbWljX3JlYWQoJmpvdXJuYWwtPmpfamxvY2spKSB7Ci0JCQkJcXVldWVfbG9nX3dyaXRlcihwX3Nfc2IpOworCQkJCXF1ZXVlX2xvZ193cml0ZXIoc2IpOwogCQkJfQogCQkJZ290byByZWxvY2s7CiAJCX0KLQkJcmV0dmFsID0gam91cm5hbF9qb2luKCZteXRoLCBwX3Nfc2IsIDEpOworCQlyZXR2YWwgPSBqb3VybmFsX2pvaW4oJm15dGgsIHNiLCAxKTsKIAkJaWYgKHJldHZhbCkKIAkJCWdvdG8gb3V0X2ZhaWw7CiAKIAkJLyogc29tZW9uZSBtaWdodCBoYXZlIGVuZGVkIHRoZSB0cmFuc2FjdGlvbiB3aGlsZSB3ZSBqb2luZWQgKi8KIAkJaWYgKG9sZF90cmFuc19pZCAhPSBqb3VybmFsLT5qX3RyYW5zX2lkKSB7Ci0JCQlyZXR2YWwgPSBkb19qb3VybmFsX2VuZCgmbXl0aCwgcF9zX3NiLCAxLCAwKTsKKwkJCXJldHZhbCA9IGRvX2pvdXJuYWxfZW5kKCZteXRoLCBzYiwgMSwgMCk7CiAJCX0gZWxzZSB7Ci0JCQlyZXR2YWwgPSBkb19qb3VybmFsX2VuZCgmbXl0aCwgcF9zX3NiLCAxLCBDT01NSVRfTk9XKTsKKwkJCXJldHZhbCA9IGRvX2pvdXJuYWxfZW5kKCZteXRoLCBzYiwgMSwgQ09NTUlUX05PVyk7CiAJCX0KIAogCQlpZiAocmV0dmFsKQogCQkJZ290byBvdXRfZmFpbDsKIAotCQlQUk9DX0lORk9fSU5DKHBfc19zYiwgam91cm5hbC5qb3VybmFsX3JlbG9ja193Y291bnQpOworCQlQUk9DX0lORk9fSU5DKHNiLCBqb3VybmFsLmpvdXJuYWxfcmVsb2NrX3djb3VudCk7CiAJCWdvdG8gcmVsb2NrOwogCX0KIAkvKiB3ZSBhcmUgdGhlIGZpcnN0IHdyaXRlciwgc2V0IHRyYW5zX2lkICovCkBAIC0zMDk2LDcgKzMxMDMsNyBAQAogCXRoLT50X2Jsb2Nrc19sb2dnZWQgPSAwOwogCXRoLT50X2Jsb2Nrc19hbGxvY2F0ZWQgPSBuYmxvY2tzOwogCXRoLT50X3RyYW5zX2lkID0gam91cm5hbC0+al90cmFuc19pZDsKLQl1bmxvY2tfam91cm5hbChwX3Nfc2IpOworCXVubG9ja19qb3VybmFsKHNiKTsKIAlJTklUX0xJU1RfSEVBRCgmdGgtPnRfbGlzdCk7CiAJZ2V0X2ZzX2V4Y2woKTsKIAlyZXR1cm4gMDsKQEAgLTMxMDYsNyArMzExMyw3IEBACiAJLyogUmUtc2V0IHRoLT50X3N1cGVyLCBzbyB3ZSBjYW4gcHJvcGVybHkga2VlcCB0cmFjayBvZiBob3cgbWFueQogCSAqIHBlcnNpc3RlbnQgdHJhbnNhY3Rpb25zIHRoZXJlIGFyZS4gV2UgbmVlZCB0byBkbyB0aGlzIHNvIGlmIHRoaXMKIAkgKiBjYWxsIGlzIHBhcnQgb2YgYSBmYWlsZWQgcmVzdGFydF90cmFuc2FjdGlvbiwgd2UgY2FuIGZyZWUgaXQgbGF0ZXIgKi8KLQl0aC0+dF9zdXBlciA9IHBfc19zYjsKKwl0aC0+dF9zdXBlciA9IHNiOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTMxNTcsNyArMzE2NCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgam91cm5hbF9qb2luKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2NrcykKKwkJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2NrcykKIHsKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICpjdXJfdGggPSBjdXJyZW50LT5qb3VybmFsX2luZm87CiAKQEAgLTMxNjYsMTEgKzMxNzMsMTEgQEAKIAkgKi8KIAl0aC0+dF9oYW5kbGVfc2F2ZSA9IGN1cl90aDsKIAlCVUdfT04oY3VyX3RoICYmIGN1cl90aC0+dF9yZWZjb3VudCA+IDEpOwotCXJldHVybiBkb19qb3VybmFsX2JlZ2luX3IodGgsIHBfc19zYiwgbmJsb2NrcywgSkJFR0lOX0pPSU4pOworCXJldHVybiBkb19qb3VybmFsX2JlZ2luX3IodGgsIHNiLCBuYmxvY2tzLCBKQkVHSU5fSk9JTik7CiB9CiAKIGludCBqb3VybmFsX2pvaW5fYWJvcnQoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCSAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzKQorCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzKQogewogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKmN1cl90aCA9IGN1cnJlbnQtPmpvdXJuYWxfaW5mbzsKIApAQCAtMzE3OSwxMSArMzE4NiwxMSBAQAogCSAqLwogCXRoLT50X2hhbmRsZV9zYXZlID0gY3VyX3RoOwogCUJVR19PTihjdXJfdGggJiYgY3VyX3RoLT50X3JlZmNvdW50ID4gMSk7Ci0JcmV0dXJuIGRvX2pvdXJuYWxfYmVnaW5fcih0aCwgcF9zX3NiLCBuYmxvY2tzLCBKQkVHSU5fQUJPUlQpOworCXJldHVybiBkb19qb3VybmFsX2JlZ2luX3IodGgsIHNiLCBuYmxvY2tzLCBKQkVHSU5fQUJPUlQpOwogfQogCiBpbnQgam91cm5hbF9iZWdpbihzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzKQorCQkgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2NrcykKIHsKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICpjdXJfdGggPSBjdXJyZW50LT5qb3VybmFsX2luZm87CiAJaW50IHJldDsKQEAgLTMxOTEsMjggKzMxOTgsMjkgQEAKIAl0aC0+dF9oYW5kbGVfc2F2ZSA9IE5VTEw7CiAJaWYgKGN1cl90aCkgewogCQkvKiB3ZSBhcmUgbmVzdGluZyBpbnRvIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uICovCi0JCWlmIChjdXJfdGgtPnRfc3VwZXIgPT0gcF9zX3NiKSB7CisJCWlmIChjdXJfdGgtPnRfc3VwZXIgPT0gc2IpIHsKIAkJCUJVR19PTighY3VyX3RoLT50X3JlZmNvdW50KTsKIAkJCWN1cl90aC0+dF9yZWZjb3VudCsrOwogCQkJbWVtY3B5KHRoLCBjdXJfdGgsIHNpemVvZigqdGgpKTsKIAkJCWlmICh0aC0+dF9yZWZjb3VudCA8PSAxKQotCQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCQkJICJCQUQ6IHJlZmNvdW50IDw9IDEsIGJ1dCBqb3VybmFsX2luZm8gIT0gMCIpOworCQkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJyZWlzZXJmcy0yMDA1IiwKKwkJCQkJCSAiQkFEOiByZWZjb3VudCA8PSAxLCBidXQgIgorCQkJCQkJICJqb3VybmFsX2luZm8gIT0gMCIpOwogCQkJcmV0dXJuIDA7CiAJCX0gZWxzZSB7CiAJCQkvKiB3ZSd2ZSBlbmRlZCB1cCB3aXRoIGEgaGFuZGxlIGZyb20gYSBkaWZmZXJlbnQgZmlsZXN5c3RlbS4KIAkJCSAqKiBzYXZlIGl0IGFuZCByZXN0b3JlIG9uIGpvdXJuYWxfZW5kLiAgVGhpcyBzaG91bGQgbmV2ZXIKIAkJCSAqKiByZWFsbHkgaGFwcGVuLi4uCiAJCQkgKi8KLQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCQkgImNsbS0yMTAwOiBuZXN0aW5nIGluZm8gYSBkaWZmZXJlbnQgRlMiKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJjbG0tMjEwMCIsCisJCQkJCSAibmVzdGluZyBpbmZvIGEgZGlmZmVyZW50IEZTIik7CiAJCQl0aC0+dF9oYW5kbGVfc2F2ZSA9IGN1cnJlbnQtPmpvdXJuYWxfaW5mbzsKIAkJCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IHRoOwogCQl9CiAJfSBlbHNlIHsKIAkJY3VycmVudC0+am91cm5hbF9pbmZvID0gdGg7CiAJfQotCXJldCA9IGRvX2pvdXJuYWxfYmVnaW5fcih0aCwgcF9zX3NiLCBuYmxvY2tzLCBKQkVHSU5fUkVHKTsKKwlyZXQgPSBkb19qb3VybmFsX2JlZ2luX3IodGgsIHNiLCBuYmxvY2tzLCBKQkVHSU5fUkVHKTsKIAlCVUdfT04oY3VycmVudC0+am91cm5hbF9pbmZvICE9IHRoKTsKIAogCS8qIEkgZ3Vlc3MgdGhpcyBib2lscyBkb3duIHRvIGJlaW5nIHRoZSByZWNpcHJvY2FsIG9mIGNsbS0yMTAwIGFib3ZlLgpAQCAtMzIzMiwzMiArMzI0MCwzMiBAQAogKioKICoqIGlmIGl0IHdhcyBkaXJ0eSwgY2xlYW5zIGFuZCBmaWxlcyBvbnRvIHRoZSBjbGVhbiBsaXN0LiAgSSBjYW4ndCBsZXQgaXQgYmUgZGlydHkgYWdhaW4gdW50aWwgdGhlCiAqKiB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuCi0qKiAKKyoqCiAqKiBpZiBqX2xlbiwgaXMgYmlnZ2VyIHRoYW4gal9sZW5fYWxsb2MsIGl0IHB1c2hlcyBqX2xlbl9hbGxvYyB0byAxMCArIGpfbGVuLgogKi8KIGludCBqb3VybmFsX21hcmtfZGlydHkoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCSAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKKwkJICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqY24gPSBOVUxMOwogCWludCBjb3VudF9hbHJlYWR5X2luY2QgPSAwOwogCWludCBwcmVwYXJlZCA9IDA7CiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAKLQlQUk9DX0lORk9fSU5DKHBfc19zYiwgam91cm5hbC5tYXJrX2RpcnR5KTsKKwlQUk9DX0lORk9fSU5DKHNiLCBqb3VybmFsLm1hcmtfZGlydHkpOwogCWlmICh0aC0+dF90cmFuc19pZCAhPSBqb3VybmFsLT5qX3RyYW5zX2lkKSB7Ci0JCXJlaXNlcmZzX3BhbmljKHRoLT50X3N1cGVyLAotCQkJICAgICAgICJqb3VybmFsLTE1Nzc6IGhhbmRsZSB0cmFucyBpZCAlbGQgIT0gY3VycmVudCB0cmFucyBpZCAlbGRcbiIsCisJCXJlaXNlcmZzX3BhbmljKHRoLT50X3N1cGVyLCAiam91cm5hbC0xNTc3IiwKKwkJCSAgICAgICAiaGFuZGxlIHRyYW5zIGlkICVsZCAhPSBjdXJyZW50IHRyYW5zIGlkICVsZCIsCiAJCQkgICAgICAgdGgtPnRfdHJhbnNfaWQsIGpvdXJuYWwtPmpfdHJhbnNfaWQpOwogCX0KIAotCXBfc19zYi0+c19kaXJ0ID0gMTsKKwlzYi0+c19kaXJ0ID0gMTsKIAogCXByZXBhcmVkID0gdGVzdF9jbGVhcl9idWZmZXJfam91cm5hbF9wcmVwYXJlZChiaCk7CiAJY2xlYXJfYnVmZmVyX2pvdXJuYWxfcmVzdG9yZV9kaXJ0eShiaCk7CiAJLyogYWxyZWFkeSBpbiB0aGlzIHRyYW5zYWN0aW9uLCB3ZSBhcmUgZG9uZSAqLwogCWlmIChidWZmZXJfam91cm5hbGVkKGJoKSkgewotCQlQUk9DX0lORk9fSU5DKHBfc19zYiwgam91cm5hbC5tYXJrX2RpcnR5X2FscmVhZHkpOworCQlQUk9DX0lORk9fSU5DKHNiLCBqb3VybmFsLm1hcmtfZGlydHlfYWxyZWFkeSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMzI2Niw3ICszMjc0LDggQEAKIAkgKiogY291bGQgZ2V0IHRvIGRpc2sgdG9vIGVhcmx5LiAgTk9UIEdPT0QuCiAJICovCiAJaWYgKCFwcmVwYXJlZCB8fCBidWZmZXJfZGlydHkoYmgpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLCAiam91cm5hbC0xNzc3OiBidWZmZXIgJWxsdSBiYWQgc3RhdGUgIgorCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC0xNzc3IiwKKwkJCQkgImJ1ZmZlciAlbGx1IGJhZCBzdGF0ZSAiCiAJCQkJICIlY1BSRVBBUkVEICVjTE9DS0VEICVjRElSVFkgJWNKRElSVFlfV0FJVCIsCiAJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tuciwKIAkJCQkgcHJlcGFyZWQgPyAnICcgOiAnIScsCkBAIC0zMjc2LDIzICszMjg1LDIzIEBACiAJfQogCiAJaWYgKGF0b21pY19yZWFkKCYoam91cm5hbC0+al93Y291bnQpKSA8PSAwKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCSAiam91cm5hbC0xNDA5OiBqb3VybmFsX21hcmtfZGlydHkgcmV0dXJuaW5nIGJlY2F1c2Ugal93Y291bnQgd2FzICVkIiwKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtMTQwOSIsCisJCQkJICJyZXR1cm5pbmcgYmVjYXVzZSBqX3djb3VudCB3YXMgJWQiLAogCQkJCSBhdG9taWNfcmVhZCgmKGpvdXJuYWwtPmpfd2NvdW50KSkpOwogCQlyZXR1cm4gMTsKIAl9Ci0JLyogdGhpcyBlcnJvciBtZWFucyBJJ3ZlIHNjcmV3ZWQgdXAsIGFuZCB3ZSd2ZSBvdmVyZmxvd2VkIHRoZSB0cmFuc2FjdGlvbi4gIAorCS8qIHRoaXMgZXJyb3IgbWVhbnMgSSd2ZSBzY3Jld2VkIHVwLCBhbmQgd2UndmUgb3ZlcmZsb3dlZCB0aGUgdHJhbnNhY3Rpb24uCiAJICoqIE5vdGhpbmcgY2FuIGJlIGRvbmUgaGVyZSwgZXhjZXB0IG1ha2UgdGhlIEZTIHJlYWRvbmx5IG9yIHBhbmljLgogCSAqLwogCWlmIChqb3VybmFsLT5qX2xlbiA+PSBqb3VybmFsLT5qX3RyYW5zX21heCkgewotCQlyZWlzZXJmc19wYW5pYyh0aC0+dF9zdXBlciwKLQkJCSAgICAgICAiam91cm5hbC0xNDEzOiBqb3VybmFsX21hcmtfZGlydHk6IGpfbGVuICglbHUpIGlzIHRvbyBiaWdcbiIsCisJCXJlaXNlcmZzX3BhbmljKHRoLT50X3N1cGVyLCAiam91cm5hbC0xNDEzIiwKKwkJCSAgICAgICAial9sZW4gKCVsdSkgaXMgdG9vIGJpZyIsCiAJCQkgICAgICAgam91cm5hbC0+al9sZW4pOwogCX0KIAogCWlmIChidWZmZXJfam91cm5hbF9kaXJ0eShiaCkpIHsKIAkJY291bnRfYWxyZWFkeV9pbmNkID0gMTsKLQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGpvdXJuYWwubWFya19kaXJ0eV9ub3Rqb3VybmFsKTsKKwkJUFJPQ19JTkZPX0lOQyhzYiwgam91cm5hbC5tYXJrX2RpcnR5X25vdGpvdXJuYWwpOwogCQljbGVhcl9idWZmZXJfam91cm5hbF9kaXJ0eShiaCk7CiAJfQogCkBAIC0zMzA0LDkgKzMzMTMsOSBAQAogCiAJLyogbm93IHB1dCB0aGlzIGd1eSBvbiB0aGUgZW5kICovCiAJaWYgKCFjbikgewotCQljbiA9IGdldF9jbm9kZShwX3Nfc2IpOworCQljbiA9IGdldF9jbm9kZShzYik7CiAJCWlmICghY24pIHsKLQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwgImdldF9jbm9kZSBmYWlsZWQhXG4iKTsKKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAiam91cm5hbC00IiwgImdldF9jbm9kZSBmYWlsZWQhIik7CiAJCX0KIAogCQlpZiAodGgtPnRfYmxvY2tzX2xvZ2dlZCA9PSB0aC0+dF9ibG9ja3NfYWxsb2NhdGVkKSB7CkBAIC0zMzE4LDcgKzMzMjcsNyBAQAogCiAJCWNuLT5iaCA9IGJoOwogCQljbi0+YmxvY2tuciA9IGJoLT5iX2Jsb2NrbnI7Ci0JCWNuLT5zYiA9IHBfc19zYjsKKwkJY24tPnNiID0gc2I7CiAJCWNuLT5qbGlzdCA9IE5VTEw7CiAJCWluc2VydF9qb3VybmFsX2hhc2goam91cm5hbC0+al9oYXNoX3RhYmxlLCBjbik7CiAJCWlmICghY291bnRfYWxyZWFkeV9pbmNkKSB7CkBAIC0zMzM5LDExICszMzQ4LDExIEBACiB9CiAKIGludCBqb3VybmFsX2VuZChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2NrcykKKwkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzKQogewogCWlmICghY3VycmVudC0+am91cm5hbF9pbmZvICYmIHRoLT50X3JlZmNvdW50ID4gMSkKLQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsICJSRUlTRVItTkVTVElORzogdGggTlVMTCwgcmVmY291bnQgJWQiLAotCQkJCSB0aC0+dF9yZWZjb3VudCk7CisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJSRUlTRVItTkVTVElORyIsCisJCQkJICJ0aCBOVUxMLCByZWZjb3VudCAlZCIsIHRoLT50X3JlZmNvdW50KTsKIAogCWlmICghdGgtPnRfdHJhbnNfaWQpIHsKIAkJV0FSTl9PTigxKTsKQEAgLTMzNjYsMjYgKzMzNzUsMjYgQEAKIAkJfQogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewotCQlyZXR1cm4gZG9fam91cm5hbF9lbmQodGgsIHBfc19zYiwgbmJsb2NrcywgMCk7CisJCXJldHVybiBkb19qb3VybmFsX2VuZCh0aCwgc2IsIG5ibG9ja3MsIDApOwogCX0KIH0KIAotLyogcmVtb3ZlcyBmcm9tIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLCByZWxzaW5nIGFuZCBkZXNjcmVtZW50aW5nIGFueSBjb3VudGVycy4gIAorLyogcmVtb3ZlcyBmcm9tIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLCByZWxzaW5nIGFuZCBkZXNjcmVtZW50aW5nIGFueSBjb3VudGVycy4KICoqIGFsc28gZmlsZXMgdGhlIHJlbW92ZWQgYnVmZmVyIGRpcmVjdGx5IG9udG8gdGhlIGNsZWFuIGxpc3QKICoqCiAqKiBjYWxsZWQgYnkgam91cm5hbF9tYXJrX2ZyZWVkIHdoZW4gYSBibG9jayBoYXMgYmVlbiBkZWxldGVkCiAqKgogKiogcmV0dXJucyAxIGlmIGl0IGNsZWFuZWQgYW5kIHJlbHNlZCB0aGUgYnVmZmVyLiAwIG90aGVyd2lzZQogKi8KLXN0YXRpYyBpbnQgcmVtb3ZlX2Zyb21fdHJhbnNhY3Rpb24oc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgaW50IHJlbW92ZV9mcm9tX3RyYW5zYWN0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgYl9ibG9ja25yX3QgYmxvY2tuciwgaW50IGFscmVhZHlfY2xlYW5lZCkKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpjbjsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCWludCByZXQgPSAwOwogCi0JY24gPSBnZXRfam91cm5hbF9oYXNoX2RldihwX3Nfc2IsIGpvdXJuYWwtPmpfaGFzaF90YWJsZSwgYmxvY2tucik7CisJY24gPSBnZXRfam91cm5hbF9oYXNoX2RldihzYiwgam91cm5hbC0+al9oYXNoX3RhYmxlLCBibG9ja25yKTsKIAlpZiAoIWNuIHx8ICFjbi0+YmgpIHsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0zNDAzLDcgKzM0MTIsNyBAQAogCQlqb3VybmFsLT5qX2xhc3QgPSBjbi0+cHJldjsKIAl9CiAJaWYgKGJoKQotCQlyZW1vdmVfam91cm5hbF9oYXNoKHBfc19zYiwgam91cm5hbC0+al9oYXNoX3RhYmxlLCBOVUxMLAorCQlyZW1vdmVfam91cm5hbF9oYXNoKHNiLCBqb3VybmFsLT5qX2hhc2hfdGFibGUsIE5VTEwsCiAJCQkJICAgIGJoLT5iX2Jsb2NrbnIsIDApOwogCWNsZWFyX2J1ZmZlcl9qb3VybmFsZWQoYmgpOwkvKiBkb24ndCBsb2cgdGhpcyBvbmUgKi8KIApAQCAtMzQxMywxNCArMzQyMiwxNCBAQAogCQljbGVhcl9idWZmZXJfam91cm5hbF90ZXN0KGJoKTsKIAkJcHV0X2JoKGJoKTsKIAkJaWYgKGF0b21pY19yZWFkKCYoYmgtPmJfY291bnQpKSA8IDApIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCQkgImpvdXJuYWwtMTc1MjogcmVtb3ZlIGZyb20gdHJhbnMsIGJfY291bnQgPCAwIik7CisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC0xNzUyIiwKKwkJCQkJICJiX2NvdW50IDwgMCIpOwogCQl9CiAJCXJldCA9IDE7CiAJfQogCWpvdXJuYWwtPmpfbGVuLS07CiAJam91cm5hbC0+al9sZW5fYWxsb2MtLTsKLQlmcmVlX2Nub2RlKHBfc19zYiwgY24pOworCWZyZWVfY25vZGUoc2IsIGNuKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNDY4LDIyICszNDc3LDIyIEBACiB9CiAKIC8qIHN5bmNzIHRoZSBjb21taXQgYmxvY2tzLCBidXQgZG9lcyBub3QgZm9yY2UgdGhlIHJlYWwgYnVmZmVycyB0byBkaXNrCi0qKiB3aWxsIHdhaXQgdW50aWwgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgZG9uZS9jb21taXR0ZWQgYmVmb3JlIHJldHVybmluZyAKKyoqIHdpbGwgd2FpdCB1bnRpbCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpcyBkb25lL2NvbW1pdHRlZCBiZWZvcmUgcmV0dXJuaW5nCiAqLwogaW50IGpvdXJuYWxfZW5kX3N5bmMoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCSAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2NrcykKKwkJICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MpCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCS8qIHlvdSBjYW4gc3luYyB3aGlsZSBuZXN0ZWQsIHZlcnksIHZlcnkgYmFkICovCiAJQlVHX09OKHRoLT50X3JlZmNvdW50ID4gMSk7CiAJaWYgKGpvdXJuYWwtPmpfbGVuID09IDApIHsKLQkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChwX3Nfc2IsIFNCX0JVRkZFUl9XSVRIX1NCKHBfc19zYiksCisJCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwoc2IsIFNCX0JVRkZFUl9XSVRIX1NCKHNiKSwKIAkJCQkJICAgICAxKTsKLQkJam91cm5hbF9tYXJrX2RpcnR5KHRoLCBwX3Nfc2IsIFNCX0JVRkZFUl9XSVRIX1NCKHBfc19zYikpOworCQlqb3VybmFsX21hcmtfZGlydHkodGgsIHNiLCBTQl9CVUZGRVJfV0lUSF9TQihzYikpOwogCX0KLQlyZXR1cm4gZG9fam91cm5hbF9lbmQodGgsIHBfc19zYiwgbmJsb2NrcywgQ09NTUlUX05PVyB8IFdBSVQpOworCXJldHVybiBkb19qb3VybmFsX2VuZCh0aCwgc2IsIG5ibG9ja3MsIENPTU1JVF9OT1cgfCBXQUlUKTsKIH0KIAogLyoKQEAgLTM0OTMsNyArMzUwMiw3IEBACiB7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwsIGpfd29yay53b3JrKTsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiA9IGpvdXJuYWwtPmpfd29ya19zYjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gam91cm5hbC0+al93b3JrX3NiOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpsOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OwogCkBAIC0zNTAyLDcgKzM1MTEsNyBAQAogCQkvKiBsYXN0IGVudHJ5IGlzIHRoZSB5b3VuZ2VzdCwgY29tbWl0IGl0IGFuZCB5b3UgZ2V0IGV2ZXJ5dGhpbmcgKi8KIAkJZW50cnkgPSBqb3VybmFsLT5qX2pvdXJuYWxfbGlzdC5wcmV2OwogCQlqbCA9IEpPVVJOQUxfTElTVF9FTlRSWShlbnRyeSk7Ci0JCWZsdXNoX2NvbW1pdF9saXN0KHBfc19zYiwgamwsIDEpOworCQlmbHVzaF9jb21taXRfbGlzdChzYiwgamwsIDEpOwogCX0KIAl1bmxvY2tfa2VybmVsKCk7CiB9CkBAIC0zNTExLDExICszNTIwLDExIEBACiAqKiBmbHVzaGVzIGFueSBvbGQgdHJhbnNhY3Rpb25zIHRvIGRpc2sKICoqIGVuZHMgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaWYgaXQgaXMgdG9vIG9sZAogKi8KLWludCByZWlzZXJmc19mbHVzaF9vbGRfY29tbWl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKK2ludCByZWlzZXJmc19mbHVzaF9vbGRfY29tbWl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXRpbWVfdCBub3c7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCiAJbm93ID0gZ2V0X3NlY29uZHMoKTsKIAkvKiBzYWZldHkgY2hlY2sgc28gd2UgZG9uJ3QgZmx1c2ggd2hpbGUgd2UgYXJlIHJlcGxheWluZyB0aGUgbG9nIGR1cmluZwpAQCAtMzUzMiwzNSArMzU0MSwzNSBAQAogCSAgICBqb3VybmFsLT5qX3RyYW5zX3N0YXJ0X3RpbWUgPiAwICYmCiAJICAgIGpvdXJuYWwtPmpfbGVuID4gMCAmJgogCSAgICAobm93IC0gam91cm5hbC0+al90cmFuc19zdGFydF90aW1lKSA+IGpvdXJuYWwtPmpfbWF4X3RyYW5zX2FnZSkgewotCQlpZiAoIWpvdXJuYWxfam9pbigmdGgsIHBfc19zYiwgMSkpIHsKLQkJCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwocF9zX3NiLAotCQkJCQkJICAgICBTQl9CVUZGRVJfV0lUSF9TQihwX3Nfc2IpLAorCQlpZiAoIWpvdXJuYWxfam9pbigmdGgsIHNiLCAxKSkgeworCQkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzYiwKKwkJCQkJCSAgICAgU0JfQlVGRkVSX1dJVEhfU0Ioc2IpLAogCQkJCQkJICAgICAxKTsKLQkJCWpvdXJuYWxfbWFya19kaXJ0eSgmdGgsIHBfc19zYiwKLQkJCQkJICAgU0JfQlVGRkVSX1dJVEhfU0IocF9zX3NiKSk7CisJCQlqb3VybmFsX21hcmtfZGlydHkoJnRoLCBzYiwKKwkJCQkJICAgU0JfQlVGRkVSX1dJVEhfU0Ioc2IpKTsKIAogCQkJLyogd2UncmUgb25seSBiZWluZyBjYWxsZWQgZnJvbSBrcmVpc2VyZnNkLCBpdCBtYWtlcyBubyBzZW5zZSB0byBkbwogCQkJICoqIGFuIGFzeW5jIGNvbW1pdCBzbyB0aGF0IGtyZWlzZXJmc2QgY2FuIGRvIGl0IGxhdGVyCiAJCQkgKi8KLQkJCWRvX2pvdXJuYWxfZW5kKCZ0aCwgcF9zX3NiLCAxLCBDT01NSVRfTk9XIHwgV0FJVCk7CisJCQlkb19qb3VybmFsX2VuZCgmdGgsIHNiLCAxLCBDT01NSVRfTk9XIHwgV0FJVCk7CiAJCX0KIAl9Ci0JcmV0dXJuIHBfc19zYi0+c19kaXJ0OworCXJldHVybiBzYi0+c19kaXJ0OwogfQogCiAvKgogKiogcmV0dXJucyAwIGlmIGRvX2pvdXJuYWxfZW5kIHNob3VsZCByZXR1cm4gcmlnaHQgYXdheSwgcmV0dXJucyAxIGlmIGRvX2pvdXJuYWxfZW5kIHNob3VsZCBmaW5pc2ggdGhlIGNvbW1pdAotKiogCi0qKiBpZiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpcyB0b28gb2xkLCBidXQgc3RpbGwgaGFzIHdyaXRlcnMsIHRoaXMgd2lsbCB3YWl0IG9uIGpfam9pbl93YWl0IHVudGlsIGFsbCAKKyoqCisqKiBpZiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpcyB0b28gb2xkLCBidXQgc3RpbGwgaGFzIHdyaXRlcnMsIHRoaXMgd2lsbCB3YWl0IG9uIGpfam9pbl93YWl0IHVudGlsIGFsbAogKiogdGhlIHdyaXRlcnMgYXJlIGRvbmUuICBCeSB0aGUgdGltZSBpdCB3YWtlcyB1cCwgdGhlIHRyYW5zYWN0aW9uIGl0IHdhcyBjYWxsZWQgaGFzIGFscmVhZHkgZW5kZWQsIHNvIGl0IGp1c3QKICoqIGZsdXNoZXMgdGhlIGNvbW1pdCBsaXN0IGFuZCByZXR1cm5zIDAuCiAqKgogKiogV29uJ3QgYmF0Y2ggd2hlbiBmbHVzaCBvciBjb21taXRfbm93IGlzIHNldC4gIEFsc28gd29uJ3QgYmF0Y2ggd2hlbiBvdGhlcnMgYXJlIHdhaXRpbmcgb24gal9qb2luX3dhaXQuCi0qKiAKKyoqCiAqKiBOb3RlLCB3ZSBjYW4ndCBhbGxvdyB0aGUgam91cm5hbF9lbmQgdG8gcHJvY2VlZCB3aGlsZSB0aGVyZSBhcmUgc3RpbGwgd3JpdGVycyBpbiB0aGUgbG9nLgogKi8KIHN0YXRpYyBpbnQgY2hlY2tfam91cm5hbF9lbmQoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MsCisJCQkgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2NrcywKIAkJCSAgICAgaW50IGZsYWdzKQogewogCkBAIC0zNTY5LDEzICszNTc4LDEzIEBACiAJaW50IGNvbW1pdF9ub3cgPSBmbGFncyAmIENPTU1JVF9OT1c7CiAJaW50IHdhaXRfb25fY29tbWl0ID0gZmxhZ3MgJiBXQUlUOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpsOwotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAKIAlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKIAogCWlmICh0aC0+dF90cmFuc19pZCAhPSBqb3VybmFsLT5qX3RyYW5zX2lkKSB7Ci0JCXJlaXNlcmZzX3BhbmljKHRoLT50X3N1cGVyLAotCQkJICAgICAgICJqb3VybmFsLTE1Nzc6IGhhbmRsZSB0cmFucyBpZCAlbGQgIT0gY3VycmVudCB0cmFucyBpZCAlbGRcbiIsCisJCXJlaXNlcmZzX3BhbmljKHRoLT50X3N1cGVyLCAiam91cm5hbC0xNTc3IiwKKwkJCSAgICAgICAiaGFuZGxlIHRyYW5zIGlkICVsZCAhPSBjdXJyZW50IHRyYW5zIGlkICVsZCIsCiAJCQkgICAgICAgdGgtPnRfdHJhbnNfaWQsIGpvdXJuYWwtPmpfdHJhbnNfaWQpOwogCX0KIApAQCAtMzU4NCw3ICszNTkzLDcgQEAKIAkJYXRvbWljX2RlYygmKGpvdXJuYWwtPmpfd2NvdW50KSk7CiAJfQogCi0JLyogQlVHLCBkZWFsIHdpdGggY2FzZSB3aGVyZSBqX2xlbiBpcyAwLCBidXQgcGVvcGxlIHByZXZpb3VzbHkgZnJlZWQgYmxvY2tzIG5lZWQgdG8gYmUgcmVsZWFzZWQgCisJLyogQlVHLCBkZWFsIHdpdGggY2FzZSB3aGVyZSBqX2xlbiBpcyAwLCBidXQgcGVvcGxlIHByZXZpb3VzbHkgZnJlZWQgYmxvY2tzIG5lZWQgdG8gYmUgcmVsZWFzZWQKIAkgKiogd2lsbCBiZSBkZWFsdCB3aXRoIGJ5IG5leHQgdHJhbnNhY3Rpb24gdGhhdCBhY3R1YWxseSB3cml0ZXMgc29tZXRoaW5nLCBidXQgc2hvdWxkIGJlIHRha2VuCiAJICoqIGNhcmUgb2YgaW4gdGhpcyB0cmFucwogCSAqLwpAQCAtMzU5Myw3ICszNjAyLDcgQEAKIAkvKiBpZiB3Y291bnQgPiAwLCBhbmQgd2UgYXJlIGNhbGxlZCB0byB3aXRoIGZsdXNoIG9yIGNvbW1pdF9ub3csCiAJICoqIHdlIHdhaXQgb24gal9qb2luX3dhaXQuICBXZSB3aWxsIHdha2UgdXAgd2hlbiB0aGUgbGFzdCB3cml0ZXIgaGFzCiAJICoqIGZpbmlzaGVkIHRoZSB0cmFuc2FjdGlvbiwgYW5kIHN0YXJ0ZWQgaXQgb24gaXRzIHdheSB0byB0aGUgZGlzay4KLQkgKiogVGhlbiwgd2UgZmx1c2ggdGhlIGNvbW1pdCBvciBqb3VybmFsIGxpc3QsIGFuZCBqdXN0IHJldHVybiAwIAorCSAqKiBUaGVuLCB3ZSBmbHVzaCB0aGUgY29tbWl0IG9yIGpvdXJuYWwgbGlzdCwgYW5kIGp1c3QgcmV0dXJuIDAKIAkgKiogYmVjYXVzZSB0aGUgcmVzdCBvZiBqb3VybmFsIGVuZCB3YXMgYWxyZWFkeSBkb25lIGZvciB0aGlzIHRyYW5zYWN0aW9uLgogCSAqLwogCWlmIChhdG9taWNfcmVhZCgmKGpvdXJuYWwtPmpfd2NvdW50KSkgPiAwKSB7CkBAIC0zNjA4LDMxICszNjE3LDMxIEBACiAJCQlpZiAoZmx1c2gpIHsKIAkJCQlqb3VybmFsLT5qX25leHRfZnVsbF9mbHVzaCA9IDE7CiAJCQl9Ci0JCQl1bmxvY2tfam91cm5hbChwX3Nfc2IpOworCQkJdW5sb2NrX2pvdXJuYWwoc2IpOwogCiAJCQkvKiBzbGVlcCB3aGlsZSB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpcyBzdGlsbCBqX2psb2NrZWQgKi8KIAkJCXdoaWxlIChqb3VybmFsLT5qX3RyYW5zX2lkID09IHRyYW5zX2lkKSB7CiAJCQkJaWYgKGF0b21pY19yZWFkKCZqb3VybmFsLT5qX2psb2NrKSkgewotCQkJCQlxdWV1ZV9sb2dfd3JpdGVyKHBfc19zYik7CisJCQkJCXF1ZXVlX2xvZ193cml0ZXIoc2IpOwogCQkJCX0gZWxzZSB7Ci0JCQkJCWxvY2tfam91cm5hbChwX3Nfc2IpOworCQkJCQlsb2NrX2pvdXJuYWwoc2IpOwogCQkJCQlpZiAoam91cm5hbC0+al90cmFuc19pZCA9PSB0cmFuc19pZCkgewogCQkJCQkJYXRvbWljX3NldCgmKGpvdXJuYWwtPmpfamxvY2spLAogCQkJCQkJCSAgIDEpOwogCQkJCQl9Ci0JCQkJCXVubG9ja19qb3VybmFsKHBfc19zYik7CisJCQkJCXVubG9ja19qb3VybmFsKHNiKTsKIAkJCQl9CiAJCQl9CiAJCQlCVUdfT04oam91cm5hbC0+al90cmFuc19pZCA9PSB0cmFuc19pZCk7CiAJCQkKIAkJCWlmIChjb21taXRfbm93Ci0JCQkgICAgJiYgam91cm5hbF9saXN0X3N0aWxsX2FsaXZlKHBfc19zYiwgdHJhbnNfaWQpCisJCQkgICAgJiYgam91cm5hbF9saXN0X3N0aWxsX2FsaXZlKHNiLCB0cmFuc19pZCkKIAkJCSAgICAmJiB3YWl0X29uX2NvbW1pdCkgewotCQkJCWZsdXNoX2NvbW1pdF9saXN0KHBfc19zYiwgamwsIDEpOworCQkJCWZsdXNoX2NvbW1pdF9saXN0KHNiLCBqbCwgMSk7CiAJCQl9CiAJCQlyZXR1cm4gMDsKIAkJfQotCQl1bmxvY2tfam91cm5hbChwX3Nfc2IpOworCQl1bmxvY2tfam91cm5hbChzYik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMzY0OSwxMyArMzY1OCwxMyBAQAogCSAgICAmJiBqb3VybmFsLT5qX2xlbl9hbGxvYyA8IGpvdXJuYWwtPmpfbWF4X2JhdGNoCiAJICAgICYmIGpvdXJuYWwtPmpfY25vZGVfZnJlZSA+IChqb3VybmFsLT5qX3RyYW5zX21heCAqIDMpKSB7CiAJCWpvdXJuYWwtPmpfYmNvdW50Kys7Ci0JCXVubG9ja19qb3VybmFsKHBfc19zYik7CisJCXVubG9ja19qb3VybmFsKHNiKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKGpvdXJuYWwtPmpfc3RhcnQgPiBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikpIHsKLQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJICAgICAgICJqb3VybmFsLTAwMzogam91cm5hbF9lbmQ6IGpfc3RhcnQgKCVsZCkgaXMgdG9vIGhpZ2hcbiIsCisJaWYgKGpvdXJuYWwtPmpfc3RhcnQgPiBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSkgeworCQlyZWlzZXJmc19wYW5pYyhzYiwgImpvdXJuYWwtMDAzIiwKKwkJCSAgICAgICAial9zdGFydCAoJWxkKSBpcyB0b28gaGlnaCIsCiAJCQkgICAgICAgam91cm5hbC0+al9zdGFydCk7CiAJfQogCXJldHVybiAxOwpAQCAtMzY2NCw3ICszNjczLDcgQEAKIC8qCiAqKiBEb2VzIGFsbCB0aGUgd29yayB0aGF0IG1ha2VzIGRlbGV0aW5nIGJsb2NrcyBzYWZlLgogKiogd2hlbiBkZWxldGluZyBhIGJsb2NrIG1hcmsgQkhfSk5ldywganVzdCByZW1vdmUgaXQgZnJvbSB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgY2xlYW4gaXQncyBidWZmZXJfaGVhZCBhbmQgbW92ZSBvbi4KLSoqIAorKioKICoqIG90aGVyd2lzZToKICoqIHNldCBhIGJpdCBmb3IgdGhlIGJsb2NrIGluIHRoZSBqb3VybmFsIGJpdG1hcC4gIFRoYXQgd2lsbCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgYWxsb2NhdGVkIGZvciB1bmZvcm1hdHRlZCBub2RlcwogKiogYmVmb3JlIHRoaXMgdHJhbnNhY3Rpb24gaGFzIGZpbmlzaGVkLgpAQCAtMzY3NiwxNiArMzY4NSwxNiBAQAogKiogVGhlbiByZW1vdmUgaXQgZnJvbSB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgZGVjcmVtZW50aW5nIGFueSBjb3VudGVycyBhbmQgZmlsaW5nIGl0IG9uIHRoZSBjbGVhbiBsaXN0LgogKi8KIGludCBqb3VybmFsX21hcmtfZnJlZWQoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCSAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgYl9ibG9ja25yX3QgYmxvY2tucikKKwkJICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGJfYmxvY2tucl90IGJsb2NrbnIpCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqY24gPSBOVUxMOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCXN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCAqamIgPSBOVUxMOwogCWludCBjbGVhbmVkID0gMDsKIAlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKIAotCWNuID0gZ2V0X2pvdXJuYWxfaGFzaF9kZXYocF9zX3NiLCBqb3VybmFsLT5qX2hhc2hfdGFibGUsIGJsb2NrbnIpOworCWNuID0gZ2V0X2pvdXJuYWxfaGFzaF9kZXYoc2IsIGpvdXJuYWwtPmpfaGFzaF90YWJsZSwgYmxvY2tucik7CiAJaWYgKGNuICYmIGNuLT5iaCkgewogCQliaCA9IGNuLT5iaDsKIAkJZ2V0X2JoKGJoKTsKQEAgLTM2OTUsMTUgKzM3MDQsMTUgQEAKIAkJY2xlYXJfYnVmZmVyX2pvdXJuYWxfbmV3KGJoKTsKIAkJY2xlYXJfcHJlcGFyZWRfYml0cyhiaCk7CiAJCXJlaXNlcmZzX2NsZWFuX2FuZF9maWxlX2J1ZmZlcihiaCk7Ci0JCWNsZWFuZWQgPSByZW1vdmVfZnJvbV90cmFuc2FjdGlvbihwX3Nfc2IsIGJsb2NrbnIsIGNsZWFuZWQpOworCQljbGVhbmVkID0gcmVtb3ZlX2Zyb21fdHJhbnNhY3Rpb24oc2IsIGJsb2NrbnIsIGNsZWFuZWQpOwogCX0gZWxzZSB7CiAJCS8qIHNldCB0aGUgYml0IGZvciB0aGlzIGJsb2NrIGluIHRoZSBqb3VybmFsIGJpdG1hcCBmb3IgdGhpcyB0cmFuc2FjdGlvbiAqLwogCQlqYiA9IGpvdXJuYWwtPmpfY3VycmVudF9qbC0+al9saXN0X2JpdG1hcDsKIAkJaWYgKCFqYikgewotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCSAgICAgICAiam91cm5hbC0xNzAyOiBqb3VybmFsX21hcmtfZnJlZWQsIGpvdXJuYWxfbGlzdF9iaXRtYXAgaXMgTlVMTFxuIik7CisJCQlyZWlzZXJmc19wYW5pYyhzYiwgImpvdXJuYWwtMTcwMiIsCisJCQkJICAgICAgICJqb3VybmFsX2xpc3RfYml0bWFwIGlzIE5VTEwiKTsKIAkJfQotCQlzZXRfYml0X2luX2xpc3RfYml0bWFwKHBfc19zYiwgYmxvY2tuciwgamIpOworCQlzZXRfYml0X2luX2xpc3RfYml0bWFwKHNiLCBibG9ja25yLCBqYik7CiAKIAkJLyogTm90ZSwgdGhlIGVudGlyZSB3aGlsZSBsb29wIGlzIG5vdCBhbGxvd2VkIHRvIHNjaGVkdWxlLiAgKi8KIApAQCAtMzcxMSwxMyArMzcyMCwxMyBAQAogCQkJY2xlYXJfcHJlcGFyZWRfYml0cyhiaCk7CiAJCQlyZWlzZXJmc19jbGVhbl9hbmRfZmlsZV9idWZmZXIoYmgpOwogCQl9Ci0JCWNsZWFuZWQgPSByZW1vdmVfZnJvbV90cmFuc2FjdGlvbihwX3Nfc2IsIGJsb2NrbnIsIGNsZWFuZWQpOworCQljbGVhbmVkID0gcmVtb3ZlX2Zyb21fdHJhbnNhY3Rpb24oc2IsIGJsb2NrbnIsIGNsZWFuZWQpOwogCiAJCS8qIGZpbmQgYWxsIG9sZGVyIHRyYW5zYWN0aW9ucyB3aXRoIHRoaXMgYmxvY2ssIG1ha2Ugc3VyZSB0aGV5IGRvbid0IHRyeSB0byB3cml0ZSBpdCBvdXQgKi8KLQkJY24gPSBnZXRfam91cm5hbF9oYXNoX2RldihwX3Nfc2IsIGpvdXJuYWwtPmpfbGlzdF9oYXNoX3RhYmxlLAorCQljbiA9IGdldF9qb3VybmFsX2hhc2hfZGV2KHNiLCBqb3VybmFsLT5qX2xpc3RfaGFzaF90YWJsZSwKIAkJCQkJICBibG9ja25yKTsKIAkJd2hpbGUgKGNuKSB7Ci0JCQlpZiAocF9zX3NiID09IGNuLT5zYiAmJiBibG9ja25yID09IGNuLT5ibG9ja25yKSB7CisJCQlpZiAoc2IgPT0gY24tPnNiICYmIGJsb2NrbnIgPT0gY24tPmJsb2NrbnIpIHsKIAkJCQlzZXRfYml0KEJMT0NLX0ZSRUVELCAmY24tPnN0YXRlKTsKIAkJCQlpZiAoY24tPmJoKSB7CiAJCQkJCWlmICghY2xlYW5lZCkgewpAQCAtMzczMyw4ICszNzQyLDkgQEAKIAkJCQkJCXB1dF9iaChjbi0+YmgpOwogCQkJCQkJaWYgKGF0b21pY19yZWFkCiAJCQkJCQkgICAgKCYoY24tPmJoLT5iX2NvdW50KSkgPCAwKSB7Ci0JCQkJCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJCQkJCQkgImpvdXJuYWwtMjEzODogY24tPmJoLT5iX2NvdW50IDwgMCIpOworCQkJCQkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsCisJCQkJCQkJCSAiam91cm5hbC0yMTM4IiwKKwkJCQkJCQkJICJjbi0+YmgtPmJfY291bnQgPCAwIik7CiAJCQkJCQl9CiAJCQkJCX0KIAkJCQkJaWYgKGNuLT5qbGlzdCkgewkvKiBzaW5jZSB3ZSBhcmUgY2xlYXJpbmcgdGhlIGJoLCB3ZSBNVVNUIGRlYyBub256ZXJvbGVuICovCkBAIC0zODI0LDcgKzM4MzQsNyBAQAogCiBpbnQgcmVpc2VyZnNfY29tbWl0X2Zvcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCXVuc2lnbmVkIGxvbmcgaWQgPSBSRUlTRVJGU19JKGlub2RlKS0+aV90cmFuc19pZDsKKwl1bnNpZ25lZCBpbnQgaWQgPSBSRUlTRVJGU19JKGlub2RlKS0+aV90cmFuc19pZDsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpqbCA9IFJFSVNFUkZTX0koaW5vZGUpLT5pX2psOwogCiAJLyogZm9yIHRoZSB3aG9sZSBpbm9kZSwgYXNzdW1lIHVuc2V0IGlkIG1lYW5zIGl0IHdhcwpAQCAtMzgzOSwxOCArMzg0OSwxOCBAQAogCXJldHVybiBfX2NvbW1pdF90cmFuc19qbChpbm9kZSwgaWQsIGpsKTsKIH0KIAotdm9pZCByZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3ZvaWQgcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOwotCVBST0NfSU5GT19JTkMocF9zX3NiLCBqb3VybmFsLnJlc3RvcmVfcHJlcGFyZWQpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CisJUFJPQ19JTkZPX0lOQyhzYiwgam91cm5hbC5yZXN0b3JlX3ByZXBhcmVkKTsKIAlpZiAoIWJoKSB7CiAJCXJldHVybjsKIAl9CiAJaWYgKHRlc3RfY2xlYXJfYnVmZmVyX2pvdXJuYWxfcmVzdG9yZV9kaXJ0eShiaCkgJiYKIAkgICAgYnVmZmVyX2pvdXJuYWxfZGlydHkoYmgpKSB7CiAJCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpjbjsKLQkJY24gPSBnZXRfam91cm5hbF9oYXNoX2RldihwX3Nfc2IsCisJCWNuID0gZ2V0X2pvdXJuYWxfaGFzaF9kZXYoc2IsCiAJCQkJCSAgam91cm5hbC0+al9saXN0X2hhc2hfdGFibGUsCiAJCQkJCSAgYmgtPmJfYmxvY2tucik7CiAJCWlmIChjbiAmJiBjYW5fZGlydHkoY24pKSB7CkBAIC0zODY3LDEyICszODc3LDEyIEBACiAqKiBiZSB3cml0dGVuIHRvIGRpc2sgd2hpbGUgd2UgYXJlIGFsdGVyaW5nIGl0LiAgU28sIHdlIG11c3Q6CiAqKiBjbGVhbiBpdAogKiogd2FpdCBvbiBpdC4KLSoqIAorKioKICovCi1pbnQgcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK2ludCByZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB3YWl0KQogewotCVBST0NfSU5GT19JTkMocF9zX3NiLCBqb3VybmFsLnByZXBhcmUpOworCVBST0NfSU5GT19JTkMoc2IsIGpvdXJuYWwucHJlcGFyZSk7CiAKIAlpZiAoIXRyeWxvY2tfYnVmZmVyKGJoKSkgewogCQlpZiAoIXdhaXQpCkBAIC0zOTA5LDcgKzM5MTksNyBAQAogCX0KIH0KIAotLyogCisvKgogKiogbG9uZyBhbmQgdWdseS4gIElmIGZsdXNoLCB3aWxsIG5vdCByZXR1cm4gdW50aWwgYWxsIGNvbW1pdAogKiogYmxvY2tzIGFuZCBhbGwgcmVhbCBidWZmZXJzIGluIHRoZSB0cmFucyBhcmUgb24gZGlzay4KICoqIElmIG5vX2FzeW5jLCB3b24ndCByZXR1cm4gdW50aWwgYWxsIGNvbW1pdCBibG9ja3MgYXJlIG9uIGRpc2suCkBAIC0zOTIwLDEwICszOTMwLDEwIEBACiAqKiBqb3VybmFsIGxpc3RzLCBldGMganVzdCB3b24ndCBoYXBwZW4uCiAqLwogc3RhdGljIGludCBkb19qb3VybmFsX2VuZChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJCSAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2NrcywKKwkJCSAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzLAogCQkJICBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqY24sICpuZXh0LCAqamxfY247CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmxhc3RfY24gPSBOVUxMOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Rlc2MgKmRlc2M7CkBAIC0zOTM4LDcgKzM5NDgsNyBAQAogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpsLCAqdGVtcF9qbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSwgKnNhZmU7CiAJdW5zaWduZWQgbG9uZyBqaW5kZXg7Ci0JdW5zaWduZWQgbG9uZyBjb21taXRfdHJhbnNfaWQ7CisJdW5zaWduZWQgaW50IGNvbW1pdF90cmFuc19pZDsKIAlpbnQgdHJhbnNfaGFsZjsKIAogCUJVR19PTih0aC0+dF9yZWZjb3VudCA+IDEpOwpAQCAtMzk0NiwyMSArMzk1NiwyMSBAQAogCiAJLyogcHJvdGVjdCBmbHVzaF9vbGRlcl9jb21taXRzIGZyb20gZG9pbmcgbWlzdGFrZXMgaWYgdGhlCiAgICAgICAgICAgIHRyYW5zYWN0aW9uIElEIGNvdW50ZXIgZ2V0cyBvdmVyZmxvd2VkLiAgKi8KLQlpZiAodGgtPnRfdHJhbnNfaWQgPT0gfjBVTCkKKwlpZiAodGgtPnRfdHJhbnNfaWQgPT0gfjBVKQogCQlmbGFncyB8PSBGTFVTSF9BTEwgfCBDT01NSVRfTk9XIHwgV0FJVDsKIAlmbHVzaCA9IGZsYWdzICYgRkxVU0hfQUxMOwogCXdhaXRfb25fY29tbWl0ID0gZmxhZ3MgJiBXQUlUOwogCiAJcHV0X2ZzX2V4Y2woKTsKIAljdXJyZW50LT5qb3VybmFsX2luZm8gPSB0aC0+dF9oYW5kbGVfc2F2ZTsKLQlyZWlzZXJmc19jaGVja19sb2NrX2RlcHRoKHBfc19zYiwgImpvdXJuYWwgZW5kIik7CisJcmVpc2VyZnNfY2hlY2tfbG9ja19kZXB0aChzYiwgImpvdXJuYWwgZW5kIik7CiAJaWYgKGpvdXJuYWwtPmpfbGVuID09IDApIHsKLQkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChwX3Nfc2IsIFNCX0JVRkZFUl9XSVRIX1NCKHBfc19zYiksCisJCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwoc2IsIFNCX0JVRkZFUl9XSVRIX1NCKHNiKSwKIAkJCQkJICAgICAxKTsKLQkJam91cm5hbF9tYXJrX2RpcnR5KHRoLCBwX3Nfc2IsIFNCX0JVRkZFUl9XSVRIX1NCKHBfc19zYikpOworCQlqb3VybmFsX21hcmtfZGlydHkodGgsIHNiLCBTQl9CVUZGRVJfV0lUSF9TQihzYikpOwogCX0KIAotCWxvY2tfam91cm5hbChwX3Nfc2IpOworCWxvY2tfam91cm5hbChzYik7CiAJaWYgKGpvdXJuYWwtPmpfbmV4dF9mdWxsX2ZsdXNoKSB7CiAJCWZsYWdzIHw9IEZMVVNIX0FMTDsKIAkJZmx1c2ggPSAxOwpAQCAtMzk3MCwxMyArMzk4MCwxMyBAQAogCQl3YWl0X29uX2NvbW1pdCA9IDE7CiAJfQogCi0JLyogY2hlY2tfam91cm5hbF9lbmQgbG9ja3MgdGhlIGpvdXJuYWwsIGFuZCB1bmxvY2tzIGlmIGl0IGRvZXMgbm90IHJldHVybiAxIAorCS8qIGNoZWNrX2pvdXJuYWxfZW5kIGxvY2tzIHRoZSBqb3VybmFsLCBhbmQgdW5sb2NrcyBpZiBpdCBkb2VzIG5vdCByZXR1cm4gMQogCSAqKiBpdCB0ZWxscyB1cyBpZiB3ZSBzaG91bGQgY29udGludWUgd2l0aCB0aGUgam91cm5hbF9lbmQsIG9yIGp1c3QgcmV0dXJuCiAJICovCi0JaWYgKCFjaGVja19qb3VybmFsX2VuZCh0aCwgcF9zX3NiLCBuYmxvY2tzLCBmbGFncykpIHsKLQkJcF9zX3NiLT5zX2RpcnQgPSAxOwotCQl3YWtlX3F1ZXVlZF93cml0ZXJzKHBfc19zYik7Ci0JCXJlaXNlcmZzX2FzeW5jX3Byb2dyZXNzX3dhaXQocF9zX3NiKTsKKwlpZiAoIWNoZWNrX2pvdXJuYWxfZW5kKHRoLCBzYiwgbmJsb2NrcywgZmxhZ3MpKSB7CisJCXNiLT5zX2RpcnQgPSAxOworCQl3YWtlX3F1ZXVlZF93cml0ZXJzKHNiKTsKKwkJcmVpc2VyZnNfYXN5bmNfcHJvZ3Jlc3Nfd2FpdChzYik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNDAwNSw4ICs0MDE1LDggQEAKIAogCS8qIHNldHVwIGRlc2NyaXB0aW9uIGJsb2NrICovCiAJZF9iaCA9Ci0JICAgIGpvdXJuYWxfZ2V0YmxrKHBfc19zYiwKLQkJCSAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpICsKKwkgICAgam91cm5hbF9nZXRibGsoc2IsCisJCQkgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpICsKIAkJCSAgIGpvdXJuYWwtPmpfc3RhcnQpOwogCXNldF9idWZmZXJfdXB0b2RhdGUoZF9iaCk7CiAJZGVzYyA9IChzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9kZXNjICopKGRfYmgpLT5iX2RhdGE7CkBAIC00MDE1LDkgKzQwMjUsOSBAQAogCXNldF9kZXNjX3RyYW5zX2lkKGRlc2MsIGpvdXJuYWwtPmpfdHJhbnNfaWQpOwogCiAJLyogc2V0dXAgY29tbWl0IGJsb2NrLiAgRG9uJ3Qgd3JpdGUgKGtlZXAgaXQgY2xlYW4gdG9vKSB0aGlzIG9uZSB1bnRpbCBhZnRlciBldmVyeW9uZSBlbHNlIGlzIHdyaXR0ZW4gKi8KLQljX2JoID0gam91cm5hbF9nZXRibGsocF9zX3NiLCBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSArCisJY19iaCA9IGpvdXJuYWxfZ2V0YmxrKHNiLCBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpICsKIAkJCSAgICAgICgoam91cm5hbC0+al9zdGFydCArIGpvdXJuYWwtPmpfbGVuICsKLQkJCQkxKSAlIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSkpOworCQkJCTEpICUgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikpKTsKIAljb21taXQgPSAoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY29tbWl0ICopY19iaC0+Yl9kYXRhOwogCW1lbXNldChjX2JoLT5iX2RhdGEsIDAsIGNfYmgtPmJfc2l6ZSk7CiAJc2V0X2NvbW1pdF90cmFuc19pZChjb21taXQsIGpvdXJuYWwtPmpfdHJhbnNfaWQpOwpAQCAtNDA1MCwxMyArNDA2MCwxMyBAQAogCSAqKiAgZm9yIGVhY2ggcmVhbCBibG9jaywgYWRkIGl0IHRvIHRoZSBqb3VybmFsIGxpc3QgaGFzaCwKIAkgKiogY29weSBpbnRvIHJlYWwgYmxvY2sgaW5kZXggYXJyYXkgaW4gdGhlIGNvbW1pdCBvciBkZXNjIGJsb2NrCiAJICovCi0JdHJhbnNfaGFsZiA9IGpvdXJuYWxfdHJhbnNfaGFsZihwX3Nfc2ItPnNfYmxvY2tzaXplKTsKKwl0cmFuc19oYWxmID0gam91cm5hbF90cmFuc19oYWxmKHNiLT5zX2Jsb2Nrc2l6ZSk7CiAJZm9yIChpID0gMCwgY24gPSBqb3VybmFsLT5qX2ZpcnN0OyBjbjsgY24gPSBjbi0+bmV4dCwgaSsrKSB7CiAJCWlmIChidWZmZXJfam91cm5hbGVkKGNuLT5iaCkpIHsKLQkJCWpsX2NuID0gZ2V0X2Nub2RlKHBfc19zYik7CisJCQlqbF9jbiA9IGdldF9jbm9kZShzYik7CiAJCQlpZiAoIWpsX2NuKSB7Ci0JCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCQkgICAgICAgImpvdXJuYWwtMTY3NiwgZ2V0X2Nub2RlIHJldHVybmVkIE5VTExcbiIpOworCQkJCXJlaXNlcmZzX3BhbmljKHNiLCAiam91cm5hbC0xNjc2IiwKKwkJCQkJICAgICAgICJnZXRfY25vZGUgcmV0dXJuZWQgTlVMTCIpOwogCQkJfQogCQkJaWYgKGkgPT0gMCkgewogCQkJCWpsLT5qX3JlYWxibG9jayA9IGpsX2NuOwpAQCAtNDA2NywxOCArNDA3NywxOSBAQAogCQkJCWxhc3RfY24tPm5leHQgPSBqbF9jbjsKIAkJCX0KIAkJCWxhc3RfY24gPSBqbF9jbjsKLQkJCS8qIG1ha2Ugc3VyZSB0aGUgYmxvY2sgd2UgYXJlIHRyeWluZyB0byBsb2cgaXMgbm90IGEgYmxvY2sgCisJCQkvKiBtYWtlIHN1cmUgdGhlIGJsb2NrIHdlIGFyZSB0cnlpbmcgdG8gbG9nIGlzIG5vdCBhIGJsb2NrCiAJCQkgICBvZiBqb3VybmFsIG9yIHJlc2VydmVkIGFyZWEgKi8KIAogCQkJaWYgKGlzX2Jsb2NrX2luX2xvZ19vcl9yZXNlcnZlZF9hcmVhCi0JCQkgICAgKHBfc19zYiwgY24tPmJoLT5iX2Jsb2NrbnIpKSB7Ci0JCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCQkgICAgICAgImpvdXJuYWwtMjMzMjogVHJ5aW5nIHRvIGxvZyBibG9jayAlbHUsIHdoaWNoIGlzIGEgbG9nIGJsb2NrXG4iLAorCQkJICAgIChzYiwgY24tPmJoLT5iX2Jsb2NrbnIpKSB7CisJCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJqb3VybmFsLTIzMzIiLAorCQkJCQkgICAgICAgIlRyeWluZyB0byBsb2cgYmxvY2sgJWx1LCAiCisJCQkJCSAgICAgICAid2hpY2ggaXMgYSBsb2cgYmxvY2siLAogCQkJCQkgICAgICAgY24tPmJoLT5iX2Jsb2NrbnIpOwogCQkJfQogCQkJamxfY24tPmJsb2NrbnIgPSBjbi0+YmgtPmJfYmxvY2tucjsKIAkJCWpsX2NuLT5zdGF0ZSA9IDA7Ci0JCQlqbF9jbi0+c2IgPSBwX3Nfc2I7CisJCQlqbF9jbi0+c2IgPSBzYjsKIAkJCWpsX2NuLT5iaCA9IGNuLT5iaDsKIAkJCWpsX2NuLT5qbGlzdCA9IGpsOwogCQkJaW5zZXJ0X2pvdXJuYWxfaGFzaChqb3VybmFsLT5qX2xpc3RfaGFzaF90YWJsZSwgamxfY24pOwpAQCAtNDExOSwxMSArNDEzMCwxMSBAQAogCQkJY2hhciAqYWRkcjsKIAkJCXN0cnVjdCBwYWdlICpwYWdlOwogCQkJdG1wX2JoID0KLQkJCSAgICBqb3VybmFsX2dldGJsayhwX3Nfc2IsCi0JCQkJCSAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpICsKKwkJCSAgICBqb3VybmFsX2dldGJsayhzYiwKKwkJCQkJICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSArCiAJCQkJCSAgICgoY3VyX3dyaXRlX3N0YXJ0ICsKIAkJCQkJICAgICBqaW5kZXgpICUKLQkJCQkJICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSkpOworCQkJCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikpKTsKIAkJCXNldF9idWZmZXJfdXB0b2RhdGUodG1wX2JoKTsKIAkJCXBhZ2UgPSBjbi0+YmgtPmJfcGFnZTsKIAkJCWFkZHIgPSBrbWFwKHBhZ2UpOwpAQCAtNDEzNywxMiArNDE0OCwxMyBAQAogCQkJY2xlYXJfYnVmZmVyX2pvdXJuYWxlZChjbi0+YmgpOwogCQl9IGVsc2UgewogCQkJLyogSkRpcnR5IGNsZWFyZWQgc29tZXRpbWUgZHVyaW5nIHRyYW5zYWN0aW9uLiAgZG9uJ3QgbG9nIHRoaXMgb25lICovCi0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJICJqb3VybmFsLTIwNDg6IGRvX2pvdXJuYWxfZW5kOiBCQUQsIGJ1ZmZlciBpbiBqb3VybmFsIGhhc2gsIGJ1dCBub3QgSkRpcnR5ISIpOworCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtMjA0OCIsCisJCQkJCSAiQkFELCBidWZmZXIgaW4gam91cm5hbCBoYXNoLCAiCisJCQkJCSAiYnV0IG5vdCBKRGlydHkhIik7CiAJCQlicmVsc2UoY24tPmJoKTsKIAkJfQogCQluZXh0ID0gY24tPm5leHQ7Ci0JCWZyZWVfY25vZGUocF9zX3NiLCBjbik7CisJCWZyZWVfY25vZGUoc2IsIGNuKTsKIAkJY24gPSBuZXh0OwogCQljb25kX3Jlc2NoZWQoKTsKIAl9CkBAIC00MTUyLDcgKzQxNjQsNyBAQAogCSAqKiBzbyB3ZSBkaXJ0eS9yZWxzZSBjX2JoIGluIGZsdXNoX2NvbW1pdF9saXN0LCB3aXRoIGNvbW1pdF9sZWZ0IDw9IDEuCiAJICovCiAKLQlqb3VybmFsLT5qX2N1cnJlbnRfamwgPSBhbGxvY19qb3VybmFsX2xpc3QocF9zX3NiKTsKKwlqb3VybmFsLT5qX2N1cnJlbnRfamwgPSBhbGxvY19qb3VybmFsX2xpc3Qoc2IpOwogCiAJLyogbm93IGl0IGlzIHNhZmUgdG8gaW5zZXJ0IHRoaXMgdHJhbnNhY3Rpb24gb24gdGhlIG1haW4gbGlzdCAqLwogCWxpc3RfYWRkX3RhaWwoJmpsLT5qX2xpc3QsICZqb3VybmFsLT5qX2pvdXJuYWxfbGlzdCk7CkBAIC00MTYzLDcgKzQxNzUsNyBAQAogCW9sZF9zdGFydCA9IGpvdXJuYWwtPmpfc3RhcnQ7CiAJam91cm5hbC0+al9zdGFydCA9CiAJICAgIChqb3VybmFsLT5qX3N0YXJ0ICsgam91cm5hbC0+al9sZW4gKwotCSAgICAgMikgJSBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYik7CisJICAgICAyKSAlIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpOwogCWF0b21pY19zZXQoJihqb3VybmFsLT5qX3djb3VudCksIDApOwogCWpvdXJuYWwtPmpfYmNvdW50ID0gMDsKIAlqb3VybmFsLT5qX2xhc3QgPSBOVUxMOwpAQCAtNDE3OCw3ICs0MTkwLDcgQEAKIAlqb3VybmFsLT5qX2xlbl9hbGxvYyA9IDA7CiAJam91cm5hbC0+al9uZXh0X2Z1bGxfZmx1c2ggPSAwOwogCWpvdXJuYWwtPmpfbmV4dF9hc3luY19mbHVzaCA9IDA7Ci0JaW5pdF9qb3VybmFsX2hhc2gocF9zX3NiKTsKKwlpbml0X2pvdXJuYWxfaGFzaChzYik7CiAKIAkvLyBtYWtlIHN1cmUgcmVpc2VyZnNfYWRkX2poIHNlZXMgdGhlIG5ldyBjdXJyZW50X2psIGJlZm9yZSB3ZQogCS8vIHdyaXRlIG91dCB0aGUgdGFpbHMKQEAgLTQyMDcsMTQgKzQyMTksMTQgQEAKIAkgKiogcXVldWUgZG9uJ3Qgd2FpdCBmb3IgdGhpcyBwcm9jIHRvIGZsdXNoIGpvdXJuYWwgbGlzdHMgYW5kIHN1Y2guCiAJICovCiAJaWYgKGZsdXNoKSB7Ci0JCWZsdXNoX2NvbW1pdF9saXN0KHBfc19zYiwgamwsIDEpOwotCQlmbHVzaF9qb3VybmFsX2xpc3QocF9zX3NiLCBqbCwgMSk7CisJCWZsdXNoX2NvbW1pdF9saXN0KHNiLCBqbCwgMSk7CisJCWZsdXNoX2pvdXJuYWxfbGlzdChzYiwgamwsIDEpOwogCX0gZWxzZSBpZiAoIShqbC0+al9zdGF0ZSAmIExJU1RfQ09NTUlUX1BFTkRJTkcpKQogCQlxdWV1ZV9kZWxheWVkX3dvcmsoY29tbWl0X3dxLCAmam91cm5hbC0+al93b3JrLCBIWiAvIDEwKTsKIAotCS8qIGlmIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGhhcyBhbnkgY2hhbmNlIG9mIHdyYXBwaW5nLCBmbHVzaCAKLQkgKiogdHJhbnNhY3Rpb25zIHRoYXQgbWlnaHQgZ2V0IG92ZXJ3cml0dGVuLiAgSWYgYW55IGpvdXJuYWwgbGlzdHMgYXJlIHZlcnkgCi0JICoqIG9sZCBmbHVzaCB0aGVtIGFzIHdlbGwuICAKKwkvKiBpZiB0aGUgbmV4dCB0cmFuc2FjdGlvbiBoYXMgYW55IGNoYW5jZSBvZiB3cmFwcGluZywgZmx1c2gKKwkgKiogdHJhbnNhY3Rpb25zIHRoYXQgbWlnaHQgZ2V0IG92ZXJ3cml0dGVuLiAgSWYgYW55IGpvdXJuYWwgbGlzdHMgYXJlIHZlcnkKKwkgKiogb2xkIGZsdXNoIHRoZW0gYXMgd2VsbC4KIAkgKi8KICAgICAgIGZpcnN0X2psOgogCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgc2FmZSwgJmpvdXJuYWwtPmpfam91cm5hbF9saXN0KSB7CkBAIC00MjIyLDExICs0MjM0LDExIEBACiAJCWlmIChqb3VybmFsLT5qX3N0YXJ0IDw9IHRlbXBfamwtPmpfc3RhcnQpIHsKIAkJCWlmICgoam91cm5hbC0+al9zdGFydCArIGpvdXJuYWwtPmpfdHJhbnNfbWF4ICsgMSkgPj0KIAkJCSAgICB0ZW1wX2psLT5qX3N0YXJ0KSB7Ci0JCQkJZmx1c2hfdXNlZF9qb3VybmFsX2xpc3RzKHBfc19zYiwgdGVtcF9qbCk7CisJCQkJZmx1c2hfdXNlZF9qb3VybmFsX2xpc3RzKHNiLCB0ZW1wX2psKTsKIAkJCQlnb3RvIGZpcnN0X2psOwogCQkJfSBlbHNlIGlmICgoam91cm5hbC0+al9zdGFydCArCiAJCQkJICAgIGpvdXJuYWwtPmpfdHJhbnNfbWF4ICsgMSkgPAotCQkJCSAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSkgeworCQkJCSAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpKSB7CiAJCQkJLyogaWYgd2UgZG9uJ3QgY3Jvc3MgaW50byB0aGUgbmV4dCB0cmFuc2FjdGlvbiBhbmQgd2UgZG9uJ3QKIAkJCQkgKiB3cmFwLCB0aGVyZSBpcyBubyB3YXkgd2UgY2FuIG92ZXJsYXAgYW55IGxhdGVyIHRyYW5zYWN0aW9ucwogCQkJCSAqIGJyZWFrIG5vdwpAQCAtNDIzNSwxMSArNDI0NywxMSBAQAogCQkJfQogCQl9IGVsc2UgaWYgKChqb3VybmFsLT5qX3N0YXJ0ICsKIAkJCSAgICBqb3VybmFsLT5qX3RyYW5zX21heCArIDEpID4KLQkJCSAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSkgeworCQkJICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikpIHsKIAkJCWlmICgoKGpvdXJuYWwtPmpfc3RhcnQgKyBqb3VybmFsLT5qX3RyYW5zX21heCArIDEpICUKLQkJCSAgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKSA+PQorCQkJICAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSkgPj0KIAkJCSAgICB0ZW1wX2psLT5qX3N0YXJ0KSB7Ci0JCQkJZmx1c2hfdXNlZF9qb3VybmFsX2xpc3RzKHBfc19zYiwgdGVtcF9qbCk7CisJCQkJZmx1c2hfdXNlZF9qb3VybmFsX2xpc3RzKHNiLCB0ZW1wX2psKTsKIAkJCQlnb3RvIGZpcnN0X2psOwogCQkJfSBlbHNlIHsKIAkJCQkvKiB3ZSBkb24ndCBvdmVybGFwIGFueXRoaW5nIGZyb20gb3V0IHN0YXJ0IHRvIHRoZSBlbmQgb2YgdGhlCkBAIC00MjUwLDQ2ICs0MjYyLDQ3IEBACiAJCQl9CiAJCX0KIAl9Ci0JZmx1c2hfb2xkX2pvdXJuYWxfbGlzdHMocF9zX3NiKTsKKwlmbHVzaF9vbGRfam91cm5hbF9saXN0cyhzYik7CiAKIAlqb3VybmFsLT5qX2N1cnJlbnRfamwtPmpfbGlzdF9iaXRtYXAgPQotCSAgICBnZXRfbGlzdF9iaXRtYXAocF9zX3NiLCBqb3VybmFsLT5qX2N1cnJlbnRfamwpOworCSAgICBnZXRfbGlzdF9iaXRtYXAoc2IsIGpvdXJuYWwtPmpfY3VycmVudF9qbCk7CiAKIAlpZiAoIShqb3VybmFsLT5qX2N1cnJlbnRfamwtPmpfbGlzdF9iaXRtYXApKSB7Ci0JCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCSAgICAgICAiam91cm5hbC0xOTk2OiBkb19qb3VybmFsX2VuZCwgY291bGQgbm90IGdldCBhIGxpc3QgYml0bWFwXG4iKTsKKwkJcmVpc2VyZnNfcGFuaWMoc2IsICJqb3VybmFsLTE5OTYiLAorCQkJICAgICAgICJjb3VsZCBub3QgZ2V0IGEgbGlzdCBiaXRtYXAiKTsKIAl9CiAKIAlhdG9taWNfc2V0KCYoam91cm5hbC0+al9qbG9jayksIDApOwotCXVubG9ja19qb3VybmFsKHBfc19zYik7CisJdW5sb2NrX2pvdXJuYWwoc2IpOwogCS8qIHdha2UgdXAgYW55IGJvZHkgd2FpdGluZyB0byBqb2luLiAqLwogCWNsZWFyX2JpdChKX1dSSVRFUlNfUVVFVUVELCAmam91cm5hbC0+al9zdGF0ZSk7CiAJd2FrZV91cCgmKGpvdXJuYWwtPmpfam9pbl93YWl0KSk7CiAKIAlpZiAoIWZsdXNoICYmIHdhaXRfb25fY29tbWl0ICYmCi0JICAgIGpvdXJuYWxfbGlzdF9zdGlsbF9hbGl2ZShwX3Nfc2IsIGNvbW1pdF90cmFuc19pZCkpIHsKLQkJZmx1c2hfY29tbWl0X2xpc3QocF9zX3NiLCBqbCwgMSk7CisJICAgIGpvdXJuYWxfbGlzdF9zdGlsbF9hbGl2ZShzYiwgY29tbWl0X3RyYW5zX2lkKSkgeworCQlmbHVzaF9jb21taXRfbGlzdChzYiwgamwsIDEpOwogCX0KICAgICAgIG91dDoKLQlyZWlzZXJmc19jaGVja19sb2NrX2RlcHRoKHBfc19zYiwgImpvdXJuYWwgZW5kMiIpOworCXJlaXNlcmZzX2NoZWNrX2xvY2tfZGVwdGgoc2IsICJqb3VybmFsIGVuZDIiKTsKIAogCW1lbXNldCh0aCwgMCwgc2l6ZW9mKCp0aCkpOwogCS8qIFJlLXNldCB0aC0+dF9zdXBlciwgc28gd2UgY2FuIHByb3Blcmx5IGtlZXAgdHJhY2sgb2YgaG93IG1hbnkKIAkgKiBwZXJzaXN0ZW50IHRyYW5zYWN0aW9ucyB0aGVyZSBhcmUuIFdlIG5lZWQgdG8gZG8gdGhpcyBzbyBpZiB0aGlzCiAJICogY2FsbCBpcyBwYXJ0IG9mIGEgZmFpbGVkIHJlc3RhcnRfdHJhbnNhY3Rpb24sIHdlIGNhbiBmcmVlIGl0IGxhdGVyICovCi0JdGgtPnRfc3VwZXIgPSBwX3Nfc2I7CisJdGgtPnRfc3VwZXIgPSBzYjsKIAogCXJldHVybiBqb3VybmFsLT5qX2Vycm5vOwogfQogCi1zdGF0aWMgdm9pZCBfX3JlaXNlcmZzX2pvdXJuYWxfYWJvcnRfaGFyZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQorLyogU2VuZCB0aGUgZmlsZSBzeXN0ZW0gcmVhZCBvbmx5IGFuZCByZWZ1c2UgbmV3IHRyYW5zYWN0aW9ucyAqLwordm9pZCByZWlzZXJmc19hYm9ydF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBlcnJubykKIHsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCWlmICh0ZXN0X2JpdChKX0FCT1JURUQsICZqb3VybmFsLT5qX3N0YXRlKSkKIAkJcmV0dXJuOwogCi0JcHJpbnRrKEtFUk5fQ1JJVCAiUkVJU0VSRlM6IEFib3J0aW5nIGpvdXJuYWwgZm9yIGZpbGVzeXN0ZW0gb24gJXNcbiIsCi0JICAgICAgIHJlaXNlcmZzX2JkZXZuYW1lKHNiKSk7CisJaWYgKCFqb3VybmFsLT5qX2Vycm5vKQorCQlqb3VybmFsLT5qX2Vycm5vID0gZXJybm87CiAKIAlzYi0+c19mbGFncyB8PSBNU19SRE9OTFk7CiAJc2V0X2JpdChKX0FCT1JURUQsICZqb3VybmFsLT5qX3N0YXRlKTsKQEAgLTQyOTksMTkgKzQzMTIsMyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIF9fcmVpc2VyZnNfam91cm5hbF9hYm9ydF9zb2Z0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBlcnJubykKLXsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwotCWlmICh0ZXN0X2JpdChKX0FCT1JURUQsICZqb3VybmFsLT5qX3N0YXRlKSkKLQkJcmV0dXJuOwotCi0JaWYgKCFqb3VybmFsLT5qX2Vycm5vKQotCQlqb3VybmFsLT5qX2Vycm5vID0gZXJybm87Ci0KLQlfX3JlaXNlcmZzX2pvdXJuYWxfYWJvcnRfaGFyZChzYik7Ci19Ci0KLXZvaWQgcmVpc2VyZnNfam91cm5hbF9hYm9ydChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgZXJybm8pCi17Ci0JX19yZWlzZXJmc19qb3VybmFsX2Fib3J0X3NvZnQoc2IsIGVycm5vKTsKLX0KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2xiYWxhbmNlLmMgYi9mcy9yZWlzZXJmcy9sYmFsYW5jZS5jCmluZGV4IDZkZTA2MGEuLjM4MTc1MGEgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2xiYWxhbmNlLmMKKysrIGIvZnMvcmVpc2VyZnMvbGJhbGFuY2UuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJaXRlbV9udW1faW5fZGVzdCA9CiAJICAgIChsYXN0X2ZpcnN0ID09IEZJUlNUX1RPX0xBU1QpID8gKEJfTlJfSVRFTVMoZGVzdCkgLSAxKSA6IDA7CiAKLQlsZWFmX3Bhc3RlX2VudHJpZXMoZGVzdF9iaS0+YmlfYmgsIGl0ZW1fbnVtX2luX2Rlc3QsCisJbGVhZl9wYXN0ZV9lbnRyaWVzKGRlc3RfYmksIGl0ZW1fbnVtX2luX2Rlc3QsCiAJCQkgICAobGFzdF9maXJzdCA9PQogCQkJICAgIEZJUlNUX1RPX0xBU1QpID8gSV9FTlRSWV9DT1VOVChCX05fUElURU1fSEVBRChkZXN0LAogCQkJCQkJCQkJICBpdGVtX251bV9pbl9kZXN0KSkKQEAgLTExOSw4ICsxMTksOCBAQAogCQkJICAgREVIX1NJWkUgKiBjb3B5X2NvdW50ICsgY29weV9yZWNvcmRzX2xlbik7CiB9CiAKLS8qIENvcHkgdGhlIGZpcnN0IChpZiBsYXN0X2ZpcnN0ID09IEZJUlNUX1RPX0xBU1QpIG9yIGxhc3QgKGxhc3RfZmlyc3QgPT0gTEFTVF9UT19GSVJTVCkgaXRlbSBvciAKLSAgIHBhcnQgb2YgaXQgb3Igbm90aGluZyAoc2VlIHRoZSByZXR1cm4gMCBiZWxvdykgZnJvbSBTT1VSQ0UgdG8gdGhlIGVuZCAKKy8qIENvcHkgdGhlIGZpcnN0IChpZiBsYXN0X2ZpcnN0ID09IEZJUlNUX1RPX0xBU1QpIG9yIGxhc3QgKGxhc3RfZmlyc3QgPT0gTEFTVF9UT19GSVJTVCkgaXRlbSBvcgorICAgcGFydCBvZiBpdCBvciBub3RoaW5nIChzZWUgdGhlIHJldHVybiAwIGJlbG93KSBmcm9tIFNPVVJDRSB0byB0aGUgZW5kCiAgICAoaWYgbGFzdF9maXJzdCkgb3IgYmVnaW5uaW5nICghbGFzdF9maXJzdCkgb2YgdGhlIERFU1QgKi8KIC8qIHJldHVybnMgMSBpZiBhbnl0aGluZyB3YXMgY29waWVkLCBlbHNlIDAgKi8KIHN0YXRpYyBpbnQgbGVhZl9jb3B5X2JvdW5kYXJ5X2l0ZW0oc3RydWN0IGJ1ZmZlcl9pbmZvICpkZXN0X2JpLApAQCAtMTY4LDEwICsxNjgsMTEgQEAKIAkJCWlmIChieXRlc19vcl9lbnRyaWVzID09IGloX2l0ZW1fbGVuKGloKQogCQkJICAgICYmIGlzX2luZGlyZWN0X2xlX2loKGloKSkKIAkJCQlpZiAoZ2V0X2loX2ZyZWVfc3BhY2UoaWgpKQotCQkJCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJCQkJICAgICAgICJ2cy0xMDAyMDogbGVhZl9jb3B5X2JvdW5kYXJ5X2l0ZW06ICIKLQkJCQkJCSAgICAgICAibGFzdCB1bmZvcm1hdHRlZCBub2RlIG11c3QgYmUgZmlsbGVkIGVudGlyZWx5ICglaCkiLAotCQkJCQkJICAgICAgIGloKTsKKwkJCQkJcmVpc2VyZnNfcGFuaWMoc2JfZnJvbV9iaShkZXN0X2JpKSwKKwkJCQkJCSAgICAgICAidnMtMTAwMjAiLAorCQkJCQkJICAgICAgICJsYXN0IHVuZm9ybWF0dGVkIG5vZGUgIgorCQkJCQkJICAgICAgICJtdXN0IGJlIGZpbGxlZCAiCisJCQkJCQkgICAgICAgImVudGlyZWx5ICglaCkiLCBpaCk7CiAJCX0KICNlbmRpZgogCkBAIC0zOTUsNyArMzk2LDcgQEAKIAkJZWxzZSB7CiAJCQlzdHJ1Y3QgaXRlbV9oZWFkIG5faWg7CiAKLQkJCS8qIGNvcHkgcGFydCBvZiB0aGUgYm9keSBvZiB0aGUgaXRlbSBudW1iZXIgJ2l0ZW1fbnVtJyBvZiBTT1VSQ0UgdG8gdGhlIGVuZCBvZiB0aGUgREVTVCAKKwkJCS8qIGNvcHkgcGFydCBvZiB0aGUgYm9keSBvZiB0aGUgaXRlbSBudW1iZXIgJ2l0ZW1fbnVtJyBvZiBTT1VSQ0UgdG8gdGhlIGVuZCBvZiB0aGUgREVTVAogCQkJICAgcGFydCBkZWZpbmVkIGJ5ICdjcHlfYnl0ZXMnOyBjcmVhdGUgbmV3IGl0ZW0gaGVhZGVyOyBjaGFuZ2Ugb2xkIGl0ZW1faGVhZGVyICg/Pz8/KTsKIAkJCSAgIG5faWggPSBuZXcgaXRlbV9oZWFkZXI7CiAJCQkgKi8KQEAgLTQyNSw3ICs0MjYsNyBAQAogCQllbHNlIHsKIAkJCXN0cnVjdCBpdGVtX2hlYWQgbl9paDsKIAotCQkJLyogY29weSBwYXJ0IG9mIHRoZSBib2R5IG9mIHRoZSBpdGVtIG51bWJlciAnaXRlbV9udW0nIG9mIFNPVVJDRSB0byB0aGUgYmVnaW4gb2YgdGhlIERFU1QgCisJCQkvKiBjb3B5IHBhcnQgb2YgdGhlIGJvZHkgb2YgdGhlIGl0ZW0gbnVtYmVyICdpdGVtX251bScgb2YgU09VUkNFIHRvIHRoZSBiZWdpbiBvZiB0aGUgREVTVAogCQkJICAgcGFydCBkZWZpbmVkIGJ5ICdjcHlfYnl0ZXMnOyBjcmVhdGUgbmV3IGl0ZW0gaGVhZGVyOwogCQkJICAgbl9paCA9IG5ldyBpdGVtX2hlYWRlcjsKIAkJCSAqLwpAQCAtNjIyLDkgKzYyMyw4IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwKLQkJCSAgICAgICAidnMtMTAyNTA6IGxlYWZfZGVmaW5lX2Rlc3Rfc3JjX2luZm9zOiBzaGlmdCB0eXBlIGlzIHVua25vd24gKCVkKSIsCi0JCQkgICAgICAgc2hpZnRfbW9kZSk7CisJCXJlaXNlcmZzX3BhbmljKHNiX2Zyb21fYmkoc3JjX2JpKSwgInZzLTEwMjUwIiwKKwkJCSAgICAgICAic2hpZnQgdHlwZSBpcyB1bmtub3duICglZCkiLCBzaGlmdF9tb2RlKTsKIAl9CiAJUkZBTFNFKCFzcmNfYmktPmJpX2JoIHx8ICFkZXN0X2JpLT5iaV9iaCwKIAkgICAgICAgInZzLTEwMjYwOiBtb2RlPT0lZCwgc291cmNlICglcCkgb3IgZGVzdCAoJXApIGJ1ZmZlciBpcyBpbml0aWFsaXplZCBpbmNvcnJlY3RseSIsCkBAIC02NzQsOSArNjc0LDkgQEAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKIAkJCWlmICh0Yi0+dGJfbW9kZSA9PSBNX1BBU1RFIHx8IHRiLT50Yl9tb2RlID09IE1fSU5TRVJUKSB7CiAJCQkJcHJpbnRfY3VyX3RiKCJ2cy0xMDI3NSIpOwotCQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCQkJICAgICAgICJ2cy0xMDI3NTogbGVhZl9zaGlmdF9sZWZ0OiBiYWxhbmNlIGNvbmRpdGlvbiBjb3JydXB0ZWQgKCVjKSIsCi0JCQkJCSAgICAgICB0Yi0+dGJfbW9kZSk7CisJCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAidnMtMTAyNzUiLAorCQkJCQkgICAgICAgImJhbGFuY2UgY29uZGl0aW9uIGNvcnJ1cHRlZCAiCisJCQkJCSAgICAgICAiKCVjKSIsIHRiLT50Yl9tb2RlKTsKIAkJCX0KICNlbmRpZgogCkBAIC03MjQsNyArNzI0LDcgQEAKIHN0YXRpYyB2b2lkIGxlYWZfZGVsZXRlX2l0ZW1zX2VudGlyZWx5KHN0cnVjdCBidWZmZXJfaW5mbyAqYmksCiAJCQkJICAgICAgIGludCBmaXJzdCwgaW50IGRlbF9udW0pOwogLyogIElmIGRlbF9ieXRlcyA9PSAtMSwgc3RhcnRpbmcgZnJvbSBwb3NpdGlvbiAnZmlyc3QnIGRlbGV0ZSBkZWxfbnVtIGl0ZW1zIGluIHdob2xlIGluIGJ1ZmZlciBDVVIuCi0gICAgSWYgbm90LiAKKyAgICBJZiBub3QuCiAgICAgSWYgbGFzdF9maXJzdCA9PSAwLiBTdGFydGluZyBmcm9tIHBvc2l0aW9uICdmaXJzdCcgZGVsZXRlIGRlbF9udW0tMSBpdGVtcyBpbiB3aG9sZS4gRGVsZXRlIHBhcnQgb2YgYm9keSBvZgogICAgIHRoZSBmaXJzdCBpdGVtLiBQYXJ0IGRlZmluZWQgYnkgZGVsX2J5dGVzLiBEb24ndCBkZWxldGUgZmlyc3QgaXRlbSBoZWFkZXIKICAgICBJZiBsYXN0X2ZpcnN0ID09IDEuIFN0YXJ0aW5nIGZyb20gcG9zaXRpb24gJ2ZpcnN0KzEnIGRlbGV0ZSBkZWxfbnVtLTEgaXRlbXMgaW4gd2hvbGUuIERlbGV0ZSBwYXJ0IG9mIGJvZHkgb2YKQEAgLTc4Myw3ICs3ODMsNyBAQAogCQkJCS8qIGxlbiA9IGJvZHkgbGVuIG9mIGl0ZW0gKi8KIAkJCQlsZW4gPSBpaF9pdGVtX2xlbihpaCk7CiAKLQkJCS8qIGRlbGV0ZSB0aGUgcGFydCBvZiB0aGUgbGFzdCBpdGVtIG9mIHRoZSBiaCAKKwkJCS8qIGRlbGV0ZSB0aGUgcGFydCBvZiB0aGUgbGFzdCBpdGVtIG9mIHRoZSBiaAogCQkJICAgZG8gbm90IGRlbGV0ZSBpdGVtIGhlYWRlcgogCQkJICovCiAJCQlsZWFmX2N1dF9mcm9tX2J1ZmZlcihjdXJfYmksIEJfTlJfSVRFTVMoYmgpIC0gMSwKQEAgLTg2NSw3ICs4NjUsNyBAQAogCX0KIH0KIAotLyogcGFzdGUgcGFzdGVfc2l6ZSBieXRlcyB0byBhZmZlY3RlZF9pdGVtX251bS10aCBpdGVtLiAKKy8qIHBhc3RlIHBhc3RlX3NpemUgYnl0ZXMgdG8gYWZmZWN0ZWRfaXRlbV9udW0tdGggaXRlbS4KICAgIFdoZW4gaXRlbSBpcyBhIGRpcmVjdG9yeSwgdGhpcyBvbmx5IHByZXBhcmUgc3BhY2UgZm9yIG5ldyBlbnRyaWVzICovCiB2b2lkIGxlYWZfcGFzdGVfaW5fYnVmZmVyKHN0cnVjdCBidWZmZXJfaW5mbyAqYmksIGludCBhZmZlY3RlZF9pdGVtX251bSwKIAkJCSAgaW50IHBvc19pbl9pdGVtLCBpbnQgcGFzdGVfc2l6ZSwKQEAgLTg4OSw5ICs4ODksMTIgQEAKIAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogCWlmICh6ZXJvc19udW1iZXIgPiBwYXN0ZV9zaXplKSB7CisJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBOVUxMOworCQlpZiAoYmkgJiYgYmktPnRiKQorCQkJc2IgPSBiaS0+dGItPnRiX3NiOwogCQlwcmludF9jdXJfdGIoIjEwMTc3Iik7Ci0JCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkgICAgICAgInZzLTEwMTc3OiBsZWFmX3Bhc3RlX2luX2J1ZmZlcjogZXJvIG51bWJlciA9PSAlZCwgcGFzdGVfc2l6ZSA9PSAlZCIsCisJCXJlaXNlcmZzX3BhbmljKHNiLCAidnMtMTAxNzciLAorCQkJICAgICAgICJ6ZXJvc19udW1iZXIgPT0gJWQsIHBhc3RlX3NpemUgPT0gJWQiLAogCQkJICAgICAgIHplcm9zX251bWJlciwgcGFzdGVfc2l6ZSk7CiAJfQogI2VuZGlmCQkJCS8qIENPTkZJR19SRUlTRVJGU19DSEVDSyAqLwpAQCAtMTAxOSw3ICsxMDIyLDcgQEAKIC8qICB3aGVuIGN1dCBpdGVtIGlzIHBhcnQgb2YgcmVndWxhciBmaWxlCiAgICAgICAgIHBvc19pbl9pdGVtIC0gZmlyc3QgYnl0ZSB0aGF0IG11c3QgYmUgY3V0CiAgICAgICAgIGN1dF9zaXplIC0gbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIGN1dCBiZWdpbm5pbmcgZnJvbSBwb3NfaW5faXRlbQotIAorCiAgICB3aGVuIGN1dCBpdGVtIGlzIHBhcnQgb2YgZGlyZWN0b3J5CiAgICAgICAgIHBvc19pbl9pdGVtIC0gbnVtYmVyIG9mIGZpcnN0IGRlbGV0ZWQgZW50cnkKICAgICAgICAgY3V0X3NpemUgLSBjb3VudCBvZiBkZWxldGVkIGVudHJpZXMKQEAgLTExOTEsNyArMTE5NCw3IEBACiB9CiAKIC8qIHBhc3RlIG5ld19lbnRyeV9jb3VudCBlbnRyaWVzIChuZXdfZGVocywgcmVjb3JkcykgaW50byBwb3NpdGlvbiBiZWZvcmUgdG8gaXRlbV9udW0tdGggaXRlbSAqLwotdm9pZCBsZWFmX3Bhc3RlX2VudHJpZXMoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKK3ZvaWQgbGVhZl9wYXN0ZV9lbnRyaWVzKHN0cnVjdCBidWZmZXJfaW5mbyAqYmksCiAJCQlpbnQgaXRlbV9udW0sCiAJCQlpbnQgYmVmb3JlLAogCQkJaW50IG5ld19lbnRyeV9jb3VudCwKQEAgLTEyMDMsNiArMTIwNiw3IEBACiAJc3RydWN0IHJlaXNlcmZzX2RlX2hlYWQgKmRlaDsKIAljaGFyICppbnNlcnRfcG9pbnQ7CiAJaW50IGksIG9sZF9lbnRyeV9udW07CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IGJpLT5iaV9iaDsKIAogCWlmIChuZXdfZW50cnlfY291bnQgPT0gMCkKIAkJcmV0dXJuOwpAQCAtMTI3MSw3ICsxMjc1LDcgQEAKIAkvKiBjaGFuZ2UgaXRlbSBrZXkgaWYgbmVjZXNzYXJ5ICh3aGVuIHdlIHBhc3RlIGJlZm9yZSAwLXRoIGVudHJ5ICovCiAJaWYgKCFiZWZvcmUpIHsKIAkJc2V0X2xlX2loX2tfb2Zmc2V0KGloLCBkZWhfb2Zmc2V0KG5ld19kZWhzKSk7Ci0vKiAgICAgIG1lbWNweSAoJmloLT5paF9rZXkua19vZmZzZXQsIAorLyogICAgICBtZW1jcHkgKCZpaC0+aWhfa2V5Lmtfb2Zmc2V0LAogCQkgICAgICAgJm5ld19kZWhzLT5kZWhfb2Zmc2V0LCBTSE9SVF9LRVlfU0laRSk7Ki8KIAl9CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCkBAIC0xMjg3LDEzICsxMjkxLDE3IEBACiAJCQlwcmV2ID0gKGkgIT0gMCkgPyBkZWhfbG9jYXRpb24oJihkZWhbaSAtIDFdKSkgOiAwOwogCiAJCQlpZiAocHJldiAmJiBwcmV2IDw9IGRlaF9sb2NhdGlvbigmKGRlaFtpXSkpKQotCQkJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkJCSAidnMtMTAyNDA6IGxlYWZfcGFzdGVfZW50cmllczogZGlyZWN0b3J5IGl0ZW0gKCVoKSBjb3JydXB0ZWQgKHByZXYgJWEsIGN1ciglZCkgJWEpIiwKLQkJCQkJCSBpaCwgZGVoICsgaSAtIDEsIGksIGRlaCArIGkpOworCQkJCXJlaXNlcmZzX2Vycm9yKHNiX2Zyb21fYmkoYmkpLCAidnMtMTAyNDAiLAorCQkJCQkgICAgICAgImRpcmVjdG9yeSBpdGVtICglaCkgIgorCQkJCQkgICAgICAgImNvcnJ1cHRlZCAocHJldiAlYSwgIgorCQkJCQkgICAgICAgImN1ciglZCkgJWEpIiwKKwkJCQkJICAgICAgIGloLCBkZWggKyBpIC0gMSwgaSwgZGVoICsgaSk7CiAJCQlpZiAobmV4dCAmJiBuZXh0ID49IGRlaF9sb2NhdGlvbigmKGRlaFtpXSkpKQotCQkJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkJCSAidnMtMTAyNTA6IGxlYWZfcGFzdGVfZW50cmllczogZGlyZWN0b3J5IGl0ZW0gKCVoKSBjb3JydXB0ZWQgKGN1ciglZCkgJWEsIG5leHQgJWEpIiwKLQkJCQkJCSBpaCwgaSwgZGVoICsgaSwgZGVoICsgaSArIDEpOworCQkJCXJlaXNlcmZzX2Vycm9yKHNiX2Zyb21fYmkoYmkpLCAidnMtMTAyNTAiLAorCQkJCQkgICAgICAgImRpcmVjdG9yeSBpdGVtICglaCkgIgorCQkJCQkgICAgICAgImNvcnJ1cHRlZCAoY3VyKCVkKSAlYSwgIgorCQkJCQkgICAgICAgIm5leHQgJWEpIiwKKwkJCQkJICAgICAgIGloLCBpLCBkZWggKyBpLCBkZWggKyBpICsgMSk7CiAJCX0KIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL25hbWVpLmMgYi9mcy9yZWlzZXJmcy9uYW1laS5jCmluZGV4IDYzOWQ2MzUuLmVmZDRkNzIgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL25hbWVpLmMKKysrIGIvZnMvcmVpc2VyZnMvbmFtZWkuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiBUaGlzIGZ1bmN0aW9uIGZpcnN0IGNhbGxzIHNlYXJjaF9ieV9rZXksIHRoZW4sIGlmIGl0ZW0gd2hvc2UgZmlyc3QKIGVudHJ5IG1hdGNoZXMgaXMgbm90IGZvdW5kIGl0IGxvb2tzIGZvciB0aGUgZW50cnkgaW5zaWRlIGRpcmVjdG9yeQogaXRlbSBmb3VuZCBieSBzZWFyY2hfYnlfa2V5LiBGaWxscyB0aGUgcGF0aCB0byB0aGUgZW50cnksIGFuZCB0byB0aGUKLWVudHJ5IHBvc2l0aW9uIGluIHRoZSBpdGVtIAorZW50cnkgcG9zaXRpb24gaW4gdGhlIGl0ZW0KIAogKi8KIApAQCAtMTIwLDggKzEyMCw4IEBACiAJc3dpdGNoIChyZXR2YWwpIHsKIAljYXNlIElURU1fTk9UX0ZPVU5EOgogCQlpZiAoIVBBVEhfTEFTVF9QT1NJVElPTihwYXRoKSkgewotCQkJcmVpc2VyZnNfd2FybmluZyhzYiwKLQkJCQkJICJ2cy03MDAwOiBzZWFyY2hfYnlfZW50cnlfa2V5OiBzZWFyY2hfYnlfa2V5IHJldHVybmVkIGl0ZW0gcG9zaXRpb24gPT0gMCIpOworCQkJcmVpc2VyZnNfZXJyb3Ioc2IsICJ2cy03MDAwIiwgInNlYXJjaF9ieV9rZXkgIgorCQkJCSAgICAgICAicmV0dXJuZWQgaXRlbSBwb3NpdGlvbiA9PSAwIik7CiAJCQlwYXRocmVsc2UocGF0aCk7CiAJCQlyZXR1cm4gSU9fRVJST1I7CiAJCX0KQEAgLTEzNSw4ICsxMzUsNyBAQAogCiAJZGVmYXVsdDoKIAkJcGF0aHJlbHNlKHBhdGgpOwotCQlyZWlzZXJmc193YXJuaW5nKHNiLAotCQkJCSAidnMtNzAwMjogc2VhcmNoX2J5X2VudHJ5X2tleTogbm8gcGF0aCB0byBoZXJlIik7CisJCXJlaXNlcmZzX2Vycm9yKHNiLCAidnMtNzAwMiIsICJubyBwYXRoIHRvIGhlcmUiKTsKIAkJcmV0dXJuIElPX0VSUk9SOwogCX0KIApAQCAtMTQ2LDEwICsxNDUsOSBAQAogCWlmICghaXNfZGlyZW50cnlfbGVfaWgoZGUtPmRlX2loKSB8fAogCSAgICBDT01QX1NIT1JUX0tFWVMoJihkZS0+ZGVfaWgtPmloX2tleSksIGtleSkpIHsKIAkJcHJpbnRfYmxvY2soZGUtPmRlX2JoLCAwLCAtMSwgLTEpOwotCQlyZWlzZXJmc19wYW5pYyhzYiwKLQkJCSAgICAgICAidnMtNzAwNTogc2VhcmNoX2J5X2VudHJ5X2tleTogZm91bmQgaXRlbSAlaCBpcyBub3QgZGlyZWN0b3J5IGl0ZW0gb3IgIgotCQkJICAgICAgICJkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIGtleSAlSyIsCi0JCQkgICAgICAgZGUtPmRlX2loLCBrZXkpOworCQlyZWlzZXJmc19wYW5pYyhzYiwgInZzLTcwMDUiLCAiZm91bmQgaXRlbSAlaCBpcyBub3QgZGlyZWN0b3J5ICIKKwkJCSAgICAgICAiaXRlbSBvciBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIHNhbWUgZGlyZWN0b3J5ICIKKwkJCSAgICAgICAiYXMga2V5ICVLIiwgZGUtPmRlX2loLCBrZXkpOwogCX0KICNlbmRpZgkJCQkvKiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgKi8KIApAQCAtMzAwLDggKzI5OCw3IEBACiAJCSAgICBzZWFyY2hfYnlfZW50cnlfa2V5KGRpci0+aV9zYiwgJmtleV90b19zZWFyY2gsCiAJCQkJCXBhdGhfdG9fZW50cnksIGRlKTsKIAkJaWYgKHJldHZhbCA9PSBJT19FUlJPUikgewotCQkJcmVpc2VyZnNfd2FybmluZyhkaXItPmlfc2IsICJ6YW0tNzAwMTogaW8gZXJyb3IgaW4gJXMiLAotCQkJCQkgX19mdW5jX18pOworCQkJcmVpc2VyZnNfZXJyb3IoZGlyLT5pX3NiLCAiemFtLTcwMDEiLCAiaW8gZXJyb3IiKTsKIAkJCXJldHVybiBJT19FUlJPUjsKIAkJfQogCkBAIC0zNjEsOSArMzU4LDEwIEBACiAJCQlyZXR1cm4gRVJSX1BUUigtRUFDQ0VTKTsKIAkJfQogCi0JCS8qIFByb3BvZ2F0ZSB0aGUgcHJpdl9vYmplY3QgZmxhZyBzbyB3ZSBrbm93IHdlJ3JlIGluIHRoZSBwcml2IHRyZWUgKi8KLQkJaWYgKGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGRpcikpCi0JCQlyZWlzZXJmc19tYXJrX2lub2RlX3ByaXZhdGUoaW5vZGUpOworCQkvKiBQcm9wYWdhdGUgdGhlIHByaXZhdGUgZmxhZyBzbyB3ZSBrbm93IHdlJ3JlCisJCSAqIGluIHRoZSBwcml2IHRyZWUgKi8KKwkJaWYgKElTX1BSSVZBVEUoZGlyKSkKKwkJCWlub2RlLT5pX2ZsYWdzIHw9IFNfUFJJVkFURTsKIAl9CiAJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGRpci0+aV9zYik7CiAJaWYgKHJldHZhbCA9PSBJT19FUlJPUikgewpAQCAtMzczLDcgKzM3MSw3IEBACiAJcmV0dXJuIGRfc3BsaWNlX2FsaWFzKGlub2RlLCBkZW50cnkpOwogfQogCi0vKiAKKy8qCiAqKiBsb29rcyB1cCB0aGUgZGVudHJ5IG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGZvciBjaGlsZC4KICoqIHRha2VuIGZyb20gZXh0Ml9nZXRfcGFyZW50CiAqLwpAQCAtNDAzLDcgKzQwMSw3IEBACiAJcmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTsKIH0KIAotLyogYWRkIGVudHJ5IHRvIHRoZSBkaXJlY3RvcnkgKGVudHJ5IGNhbiBiZSBoaWRkZW4pLiAKKy8qIGFkZCBlbnRyeSB0byB0aGUgZGlyZWN0b3J5IChlbnRyeSBjYW4gYmUgaGlkZGVuKS4KIAogaW5zZXJ0IGRlZmluaXRpb24gb2Ygd2hlbiBoaWRkZW4gZGlyZWN0b3JpZXMgYXJlIHVzZWQgaGVyZSAtSGFucwogCkBAIC00ODQsMTAgKzQ4Miw5IEBACiAJCX0KIAogCQlpZiAocmV0dmFsICE9IE5BTUVfRk9VTkQpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoZGlyLT5pX3NiLAotCQkJCQkgInphbS03MDAyOiVzOiBcInJlaXNlcmZzX2ZpbmRfZW50cnlcIiAiCi0JCQkJCSAiaGFzIHJldHVybmVkIHVuZXhwZWN0ZWQgdmFsdWUgKCVkKSIsCi0JCQkJCSBfX2Z1bmNfXywgcmV0dmFsKTsKKwkJCXJlaXNlcmZzX2Vycm9yKGRpci0+aV9zYiwgInphbS03MDAyIiwKKwkJCQkgICAgICAgInJlaXNlcmZzX2ZpbmRfZW50cnkoKSByZXR1cm5lZCAiCisJCQkJICAgICAgICJ1bmV4cGVjdGVkIHZhbHVlICglZCkiLCByZXR2YWwpOwogCQl9CiAKIAkJcmV0dXJuIC1FRVhJU1Q7CkBAIC00OTgsOCArNDk1LDkgQEAKIAkJCQlNQVhfR0VORVJBVElPTl9OVU1CRVIgKyAxKTsKIAlpZiAoZ2VuX251bWJlciA+IE1BWF9HRU5FUkFUSU9OX05VTUJFUikgewogCQkvKiB0aGVyZSBpcyBubyBmcmVlIGdlbmVyYXRpb24gbnVtYmVyICovCi0JCXJlaXNlcmZzX3dhcm5pbmcoZGlyLT5pX3NiLAotCQkJCSAicmVpc2VyZnNfYWRkX2VudHJ5OiBDb25ncmF0dWxhdGlvbnMhIHdlIGhhdmUgZ290IGhhc2ggZnVuY3Rpb24gc2NyZXdlZCB1cCIpOworCQlyZWlzZXJmc193YXJuaW5nKGRpci0+aV9zYiwgInJlaXNlcmZzLTcwMTAiLAorCQkJCSAiQ29uZ3JhdHVsYXRpb25zISB3ZSBoYXZlIGdvdCBoYXNoIGZ1bmN0aW9uICIKKwkJCQkgInNjcmV3ZWQgdXAiKTsKIAkJaWYgKGJ1ZmZlciAhPSBzbWFsbF9idWYpCiAJCQlrZnJlZShidWZmZXIpOwogCQlwYXRocmVsc2UoJnBhdGgpOwpAQCAtNTE1LDEwICs1MTMsOSBAQAogCWlmIChnZW5fbnVtYmVyICE9IDApIHsJLyogd2UgbmVlZCB0byByZS1zZWFyY2ggZm9yIHRoZSBpbnNlcnRpb24gcG9pbnQgKi8KIAkJaWYgKHNlYXJjaF9ieV9lbnRyeV9rZXkoZGlyLT5pX3NiLCAmZW50cnlfa2V5LCAmcGF0aCwgJmRlKSAhPQogCQkgICAgTkFNRV9OT1RfRk9VTkQpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoZGlyLT5pX3NiLAotCQkJCQkgInZzLTcwMzI6IHJlaXNlcmZzX2FkZF9lbnRyeTogIgotCQkJCQkgImVudHJ5IHdpdGggdGhpcyBrZXkgKCVLKSBhbHJlYWR5IGV4aXN0cyIsCi0JCQkJCSAmZW50cnlfa2V5KTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoZGlyLT5pX3NiLCAidnMtNzAzMiIsCisJCQkJCSAiZW50cnkgd2l0aCB0aGlzIGtleSAoJUspIGFscmVhZHkgIgorCQkJCQkgImV4aXN0cyIsICZlbnRyeV9rZXkpOwogCiAJCQlpZiAoYnVmZmVyICE9IHNtYWxsX2J1ZikKIAkJCQlrZnJlZShidWZmZXIpOwpAQCAtNTYyLDcgKzU1OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCBkb2VzIHNldHVwIGZvciByZWlzZXJmc19uZXdfaW5vZGUuICAKKy8qIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCBkb2VzIHNldHVwIGZvciByZWlzZXJmc19uZXdfaW5vZGUuCiAqKiB2ZnNfZHFfaW5pdCBuZWVkcyBsb3RzIG9mIGNyZWRpdHMgc28gaXQncyBiZXR0ZXIgdG8gaGF2ZSBpdAogKiogb3V0c2lkZSBvZiBhIHRyYW5zYWN0aW9uLCBzbyB3ZSBoYWQgdG8gcHVsbCBzb21lIGJpdHMgb2YKICoqIHJlaXNlcmZzX25ld19pbm9kZSBvdXQgaW50byB0aGlzIGZ1bmMuCkBAIC02MDEsMjAgKzU5OCwyMiBAQAogCSAgICAyICogKFJFSVNFUkZTX1FVT1RBX0lOSVRfQkxPQ0tTKGRpci0+aV9zYikgKwogCQkgUkVJU0VSRlNfUVVPVEFfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikpOwogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgdGg7Ci0JaW50IGxvY2tlZDsKKwlzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlIHNlY3VyaXR5OwogCiAJaWYgKCEoaW5vZGUgPSBuZXdfaW5vZGUoZGlyLT5pX3NiKSkpIHsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW5ld19pbm9kZV9pbml0KGlub2RlLCBkaXIsIG1vZGUpOwogCi0JbG9ja2VkID0gcmVpc2VyZnNfY2FjaGVfZGVmYXVsdF9hY2woZGlyKTsKLQorCWpiZWdpbl9jb3VudCArPSByZWlzZXJmc19jYWNoZV9kZWZhdWx0X2FjbChkaXIpOworCXJldHZhbCA9IHJlaXNlcmZzX3NlY3VyaXR5X2luaXQoZGlyLCBpbm9kZSwgJnNlY3VyaXR5KTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkcm9wX25ld19pbm9kZShpbm9kZSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCWpiZWdpbl9jb3VudCArPSByZXR2YWw7CiAJcmVpc2VyZnNfd3JpdGVfbG9jayhkaXItPmlfc2IpOwogCi0JaWYgKGxvY2tlZCkKLQkJcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoZGlyLT5pX3NiKTsKLQogCXJldHZhbCA9IGpvdXJuYWxfYmVnaW4oJnRoLCBkaXItPmlfc2IsIGpiZWdpbl9jb3VudCk7CiAJaWYgKHJldHZhbCkgewogCQlkcm9wX25ld19pbm9kZShpbm9kZSk7CkBAIC02MjMsMTUgKzYyMiwxMCBAQAogCiAJcmV0dmFsID0KIAkgICAgcmVpc2VyZnNfbmV3X2lub2RlKCZ0aCwgZGlyLCBtb2RlLCBOVUxMLCAwIC8qaV9zaXplICovICwgZGVudHJ5LAotCQkJICAgICAgIGlub2RlKTsKKwkJCSAgICAgICBpbm9kZSwgJnNlY3VyaXR5KTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dF9mYWlsZWQ7CiAKLQlpZiAobG9ja2VkKSB7Ci0JCXJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cnMoZGlyLT5pX3NiKTsKLQkJbG9ja2VkID0gMDsKLQl9Ci0KIAlpbm9kZS0+aV9vcCA9ICZyZWlzZXJmc19maWxlX2lub2RlX29wZXJhdGlvbnM7CiAJaW5vZGUtPmlfZm9wID0gJnJlaXNlcmZzX2ZpbGVfb3BlcmF0aW9uczsKIAlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZyZWlzZXJmc19hZGRyZXNzX3NwYWNlX29wZXJhdGlvbnM7CkBAIC02NTgsOCArNjUyLDYgQEAKIAlyZXR2YWwgPSBqb3VybmFsX2VuZCgmdGgsIGRpci0+aV9zYiwgamJlZ2luX2NvdW50KTsKIAogICAgICAgb3V0X2ZhaWxlZDoKLQlpZiAobG9ja2VkKQotCQlyZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKGRpci0+aV9zYik7CiAJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGRpci0+aV9zYik7CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTY3MCwxMiArNjYyLDEyIEBACiAJaW50IHJldHZhbDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgdGg7CisJc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSBzZWN1cml0eTsKIAkvKiBXZSBuZWVkIGJsb2NrcyBmb3IgdHJhbnNhY3Rpb24gKyAodXNlcitncm91cCkqKHF1b3RhcyBmb3IgbmV3IGlub2RlICsgdXBkYXRlIG9mIHF1b3RhIGZvciBkaXJlY3Rvcnkgb3duZXIpICovCiAJaW50IGpiZWdpbl9jb3VudCA9CiAJICAgIEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICogMyArCiAJICAgIDIgKiAoUkVJU0VSRlNfUVVPVEFfSU5JVF9CTE9DS1MoZGlyLT5pX3NiKSArCiAJCSBSRUlTRVJGU19RVU9UQV9UUkFOU19CTE9DS1MoZGlyLT5pX3NiKSk7Ci0JaW50IGxvY2tlZDsKIAogCWlmICghbmV3X3ZhbGlkX2RldihyZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02ODUsMTMgKzY3NywxNSBAQAogCX0KIAluZXdfaW5vZGVfaW5pdChpbm9kZSwgZGlyLCBtb2RlKTsKIAotCWxvY2tlZCA9IHJlaXNlcmZzX2NhY2hlX2RlZmF1bHRfYWNsKGRpcik7Ci0KKwlqYmVnaW5fY291bnQgKz0gcmVpc2VyZnNfY2FjaGVfZGVmYXVsdF9hY2woZGlyKTsKKwlyZXR2YWwgPSByZWlzZXJmc19zZWN1cml0eV9pbml0KGRpciwgaW5vZGUsICZzZWN1cml0eSk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZHJvcF9uZXdfaW5vZGUoaW5vZGUpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlqYmVnaW5fY291bnQgKz0gcmV0dmFsOwogCXJlaXNlcmZzX3dyaXRlX2xvY2soZGlyLT5pX3NiKTsKIAotCWlmIChsb2NrZWQpCi0JCXJlaXNlcmZzX3dyaXRlX2xvY2tfeGF0dHJzKGRpci0+aV9zYik7Ci0KIAlyZXR2YWwgPSBqb3VybmFsX2JlZ2luKCZ0aCwgZGlyLT5pX3NiLCBqYmVnaW5fY291bnQpOwogCWlmIChyZXR2YWwpIHsKIAkJZHJvcF9uZXdfaW5vZGUoaW5vZGUpOwpAQCAtNzAwLDE2ICs2OTQsMTEgQEAKIAogCXJldHZhbCA9CiAJICAgIHJlaXNlcmZzX25ld19pbm9kZSgmdGgsIGRpciwgbW9kZSwgTlVMTCwgMCAvKmlfc2l6ZSAqLyAsIGRlbnRyeSwKLQkJCSAgICAgICBpbm9kZSk7CisJCQkgICAgICAgaW5vZGUsICZzZWN1cml0eSk7CiAJaWYgKHJldHZhbCkgewogCQlnb3RvIG91dF9mYWlsZWQ7CiAJfQogCi0JaWYgKGxvY2tlZCkgewotCQlyZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKGRpci0+aV9zYik7Ci0JCWxvY2tlZCA9IDA7Ci0JfQotCiAJaW5vZGUtPmlfb3AgPSAmcmVpc2VyZnNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zOwogCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwgcmRldik7CiAKQEAgLTczOSw4ICs3MjgsNiBAQAogCXJldHZhbCA9IGpvdXJuYWxfZW5kKCZ0aCwgZGlyLT5pX3NiLCBqYmVnaW5fY291bnQpOwogCiAgICAgICBvdXRfZmFpbGVkOgotCWlmIChsb2NrZWQpCi0JCXJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cnMoZGlyLT5pX3NiKTsKIAlyZWlzZXJmc193cml0ZV91bmxvY2soZGlyLT5pX3NiKTsKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtNzUwLDEyICs3MzcsMTIgQEAKIAlpbnQgcmV0dmFsOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKKwlzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlIHNlY3VyaXR5OwogCS8qIFdlIG5lZWQgYmxvY2tzIGZvciB0cmFuc2FjdGlvbiArICh1c2VyK2dyb3VwKSoocXVvdGFzIGZvciBuZXcgaW5vZGUgKyB1cGRhdGUgb2YgcXVvdGEgZm9yIGRpcmVjdG9yeSBvd25lcikgKi8KIAlpbnQgamJlZ2luX2NvdW50ID0KIAkgICAgSk9VUk5BTF9QRVJfQkFMQU5DRV9DTlQgKiAzICsKIAkgICAgMiAqIChSRUlTRVJGU19RVU9UQV9JTklUX0JMT0NLUyhkaXItPmlfc2IpICsKIAkJIFJFSVNFUkZTX1FVT1RBX1RSQU5TX0JMT0NLUyhkaXItPmlfc2IpKTsKLQlpbnQgbG9ja2VkOwogCiAjaWZkZWYgRElTUExBQ0VfTkVXX1BBQ0tJTkdfTE9DQUxJVElFUwogCS8qIHNldCBmbGFnIHRoYXQgbmV3IHBhY2tpbmcgbG9jYWxpdHkgY3JlYXRlZCBhbmQgbmV3IGJsb2NrcyBmb3IgdGhlIGNvbnRlbnQgICAgICogb2YgdGhhdCBkaXJlY3RvcnkgYXJlIG5vdCBkaXNwbGFjZWQgeWV0ICovCkBAIC03NjcsMTEgKzc1NCwxNCBAQAogCX0KIAluZXdfaW5vZGVfaW5pdChpbm9kZSwgZGlyLCBtb2RlKTsKIAotCWxvY2tlZCA9IHJlaXNlcmZzX2NhY2hlX2RlZmF1bHRfYWNsKGRpcik7Ci0KKwlqYmVnaW5fY291bnQgKz0gcmVpc2VyZnNfY2FjaGVfZGVmYXVsdF9hY2woZGlyKTsKKwlyZXR2YWwgPSByZWlzZXJmc19zZWN1cml0eV9pbml0KGRpciwgaW5vZGUsICZzZWN1cml0eSk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZHJvcF9uZXdfaW5vZGUoaW5vZGUpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlqYmVnaW5fY291bnQgKz0gcmV0dmFsOwogCXJlaXNlcmZzX3dyaXRlX2xvY2soZGlyLT5pX3NiKTsKLQlpZiAobG9ja2VkKQotCQlyZWlzZXJmc193cml0ZV9sb2NrX3hhdHRycyhkaXItPmlfc2IpOwogCiAJcmV0dmFsID0gam91cm5hbF9iZWdpbigmdGgsIGRpci0+aV9zYiwgamJlZ2luX2NvdW50KTsKIAlpZiAocmV0dmFsKSB7CkBAIC03ODcsMTcgKzc3NywxMiBAQAogCSAgICByZXR2YWwgPSByZWlzZXJmc19uZXdfaW5vZGUoJnRoLCBkaXIsIG1vZGUsIE5VTEwgLypzeW1saW5rICovICwKIAkJCQkJb2xkX2Zvcm1hdF9vbmx5KGRpci0+aV9zYikgPwogCQkJCQlFTVBUWV9ESVJfU0laRV9WMSA6IEVNUFRZX0RJUl9TSVpFLAotCQkJCQlkZW50cnksIGlub2RlKTsKKwkJCQkJZGVudHJ5LCBpbm9kZSwgJnNlY3VyaXR5KTsKIAlpZiAocmV0dmFsKSB7CiAJCWRpci0+aV9ubGluay0tOwogCQlnb3RvIG91dF9mYWlsZWQ7CiAJfQogCi0JaWYgKGxvY2tlZCkgewotCQlyZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKGRpci0+aV9zYik7Ci0JCWxvY2tlZCA9IDA7Ci0JfQotCiAJcmVpc2VyZnNfdXBkYXRlX2lub2RlX3RyYW5zYWN0aW9uKGlub2RlKTsKIAlyZWlzZXJmc191cGRhdGVfaW5vZGVfdHJhbnNhY3Rpb24oZGlyKTsKIApAQCAtODI3LDggKzgxMiw2IEBACiAJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7CiAJcmV0dmFsID0gam91cm5hbF9lbmQoJnRoLCBkaXItPmlfc2IsIGpiZWdpbl9jb3VudCk7CiAgICAgICBvdXRfZmFpbGVkOgotCWlmIChsb2NrZWQpCi0JCXJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cnMoZGlyLT5pX3NiKTsKIAlyZWlzZXJmc193cml0ZV91bmxvY2soZGlyLT5pX3NiKTsKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtODM3LDcgKzgyMCw3IEBACiB7CiAJLyogd2UgY2FuIGNoZWF0IGJlY2F1c2UgYW4gb2xkIGZvcm1hdCBkaXIgY2Fubm90IGhhdmUKIAkgKiogRU1QVFlfRElSX1NJWkUsIGFuZCBhIG5ldyBmb3JtYXQgZGlyIGNhbm5vdCBoYXZlCi0JICoqIEVNUFRZX0RJUl9TSVpFX1YxLiAgU28sIGlmIHRoZSBpbm9kZSBpcyBlaXRoZXIgc2l6ZSwgCisJICoqIEVNUFRZX0RJUl9TSVpFX1YxLiAgU28sIGlmIHRoZSBpbm9kZSBpcyBlaXRoZXIgc2l6ZSwKIAkgKiogcmVnYXJkbGVzcyBvZiBkaXNrIGZvcm1hdCB2ZXJzaW9uLCB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5LgogCSAqLwogCWlmIChpbm9kZS0+aV9zaXplICE9IEVNUFRZX0RJUl9TSVpFICYmCkBAIC05MDMsOCArODg2LDkgQEAKIAkJZ290byBlbmRfcm1kaXI7CiAKIAlpZiAoaW5vZGUtPmlfbmxpbmsgIT0gMiAmJiBpbm9kZS0+aV9ubGluayAhPSAxKQotCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAiJXM6IGVtcHR5IGRpcmVjdG9yeSBoYXMgbmxpbmsgIgotCQkJCSAiIT0gMiAoJWQpIiwgX19mdW5jX18sIGlub2RlLT5pX25saW5rKTsKKwkJcmVpc2VyZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJyZWlzZXJmcy03MDQwIiwKKwkJCSAgICAgICAiZW1wdHkgZGlyZWN0b3J5IGhhcyBubGluayAhPSAyICglZCkiLAorCQkJICAgICAgIGlub2RlLT5pX25saW5rKTsKIAogCWNsZWFyX25saW5rKGlub2RlKTsKIAlpbm9kZS0+aV9jdGltZSA9IGRpci0+aV9jdGltZSA9IGRpci0+aV9tdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CkBAIC05ODAsMTAgKzk2NCw5IEBACiAJfQogCiAJaWYgKCFpbm9kZS0+aV9ubGluaykgewotCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAiJXM6IGRlbGV0aW5nIG5vbmV4aXN0ZW50IGZpbGUgIgotCQkJCSAiKCVzOiVsdSksICVkIiwgX19mdW5jX18sCi0JCQkJIHJlaXNlcmZzX2JkZXZuYW1lKGlub2RlLT5pX3NiKSwgaW5vZGUtPmlfaW5vLAotCQkJCSBpbm9kZS0+aV9ubGluayk7CisJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJyZWlzZXJmcy03MDQyIiwKKwkJCQkgImRlbGV0aW5nIG5vbmV4aXN0ZW50IGZpbGUgKCVsdSksICVkIiwKKwkJCQkgaW5vZGUtPmlfaW5vLCBpbm9kZS0+aV9ubGluayk7CiAJCWlub2RlLT5pX25saW5rID0gMTsKIAl9CiAKQEAgLTEwMzcsNiArMTAyMCw3IEBACiAJY2hhciAqbmFtZTsKIAlpbnQgaXRlbV9sZW47CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKKwlzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlIHNlY3VyaXR5OwogCWludCBtb2RlID0gU19JRkxOSyB8IFNfSVJXWFVHTzsKIAkvKiBXZSBuZWVkIGJsb2NrcyBmb3IgdHJhbnNhY3Rpb24gKyAodXNlcitncm91cCkqKHF1b3RhcyBmb3IgbmV3IGlub2RlICsgdXBkYXRlIG9mIHF1b3RhIGZvciBkaXJlY3Rvcnkgb3duZXIpICovCiAJaW50IGpiZWdpbl9jb3VudCA9CkBAIC0xMDQ5LDYgKzEwMzMsMTMgQEAKIAl9CiAJbmV3X2lub2RlX2luaXQoaW5vZGUsIHBhcmVudF9kaXIsIG1vZGUpOwogCisJcmV0dmFsID0gcmVpc2VyZnNfc2VjdXJpdHlfaW5pdChwYXJlbnRfZGlyLCBpbm9kZSwgJnNlY3VyaXR5KTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkcm9wX25ld19pbm9kZShpbm9kZSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCWpiZWdpbl9jb3VudCArPSByZXR2YWw7CisKIAlyZWlzZXJmc193cml0ZV9sb2NrKHBhcmVudF9kaXItPmlfc2IpOwogCWl0ZW1fbGVuID0gUk9VTkRfVVAoc3RybGVuKHN5bW5hbWUpKTsKIAlpZiAoaXRlbV9sZW4gPiBNQVhfRElSRUNUX0lURU1fTEVOKHBhcmVudF9kaXItPmlfc2ItPnNfYmxvY2tzaXplKSkgewpAQCAtMTA2Niw4ICsxMDU3LDYgQEAKIAltZW1jcHkobmFtZSwgc3ltbmFtZSwgc3RybGVuKHN5bW5hbWUpKTsKIAlwYWRkX2l0ZW0obmFtZSwgaXRlbV9sZW4sIHN0cmxlbihzeW1uYW1lKSk7CiAKLQkvKiBXZSB3b3VsZCBpbmhlcml0IHRoZSBkZWZhdWx0IEFDTCBoZXJlLCBidXQgc3ltbGlua3MgZG9uJ3QgZ2V0IEFDTHMgKi8KLQogCXJldHZhbCA9IGpvdXJuYWxfYmVnaW4oJnRoLCBwYXJlbnRfZGlyLT5pX3NiLCBqYmVnaW5fY291bnQpOwogCWlmIChyZXR2YWwpIHsKIAkJZHJvcF9uZXdfaW5vZGUoaW5vZGUpOwpAQCAtMTA3Nyw3ICsxMDY2LDcgQEAKIAogCXJldHZhbCA9CiAJICAgIHJlaXNlcmZzX25ld19pbm9kZSgmdGgsIHBhcmVudF9kaXIsIG1vZGUsIG5hbWUsIHN0cmxlbihzeW1uYW1lKSwKLQkJCSAgICAgICBkZW50cnksIGlub2RlKTsKKwkJCSAgICAgICBkZW50cnksIGlub2RlLCAmc2VjdXJpdHkpOwogCWtmcmVlKG5hbWUpOwogCWlmIChyZXR2YWwpIHsJCS8qIHJlaXNlcmZzX25ld19pbm9kZSBpcHV0cyBmb3IgdXMgKi8KIAkJZ290byBvdXRfZmFpbGVkOwpAQCAtMTE3Myw3ICsxMTYyLDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0vLyBkZSBjb250YWlucyBpbmZvcm1hdGlvbiBwb2ludGluZyB0byBhbiBlbnRyeSB3aGljaCAKKy8qIGRlIGNvbnRhaW5zIGluZm9ybWF0aW9uIHBvaW50aW5nIHRvIGFuIGVudHJ5IHdoaWNoICovCiBzdGF0aWMgaW50IGRlX3N0aWxsX3ZhbGlkKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sCiAJCQkgIHN0cnVjdCByZWlzZXJmc19kaXJfZW50cnkgKmRlKQogewpAQCAtMTE5NiwxNSArMTE4NSwxNCBAQAogCiAJaWYgKGlub2RlKSB7CiAJCWlmICghZGVfdmlzaWJsZShkZS0+ZGVfZGVoICsgZGUtPmRlX2VudHJ5X251bSkpCi0JCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJCSAgICAgICAidnMtNzA0MjogZW50cnlfcG9pbnRzX3RvX29iamVjdDogZW50cnkgbXVzdCBiZSB2aXNpYmxlIik7CisJCQlyZWlzZXJmc19wYW5pYyhpbm9kZS0+aV9zYiwgInZzLTcwNDIiLAorCQkJCSAgICAgICAiZW50cnkgbXVzdCBiZSB2aXNpYmxlIik7CiAJCXJldHVybiAoZGUtPmRlX29iamVjdGlkID09IGlub2RlLT5pX2lubykgPyAxIDogMDsKIAl9CiAKIAkvKiB0aGlzIG11c3QgYmUgYWRkZWQgaGlkZGVuIGVudHJ5ICovCiAJaWYgKGRlX3Zpc2libGUoZGUtPmRlX2RlaCArIGRlLT5kZV9lbnRyeV9udW0pKQotCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJICAgICAgICJ2cy03MDQzOiBlbnRyeV9wb2ludHNfdG9fb2JqZWN0OiBlbnRyeSBtdXN0IGJlIHZpc2libGUiKTsKKwkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgInZzLTcwNDMiLCAiZW50cnkgbXVzdCBiZSB2aXNpYmxlIik7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTEyMTgsMTAgKzEyMDYsMTAgQEAKIAlkZS0+ZGVfZGVoW2RlLT5kZV9lbnRyeV9udW1dLmRlaF9vYmplY3RpZCA9IGtleS0+a19vYmplY3RpZDsKIH0KIAotLyogCisvKgogICogcHJvY2VzcywgdGhhdCBpcyBnb2luZyB0byBjYWxsIGZpeF9ub2Rlcy9kb19iYWxhbmNlIG11c3QgaG9sZCBvbmx5CiAgKiBvbmUgcGF0aC4gSWYgaXQgaG9sZHMgMiBvciBtb3JlLCBpdCBjYW4gZ2V0IGludG8gZW5kbGVzcyB3YWl0aW5nIGluCi0gKiBnZXRfZW1wdHlfbm9kZXMgb3IgaXRzIGNsb25lcyAKKyAqIGdldF9lbXB0eV9ub2RlcyBvciBpdHMgY2xvbmVzCiAgKi8KIHN0YXRpYyBpbnQgcmVpc2VyZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAkJCSAgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKQEAgLTEyNzUsNyArMTI2Myw3IEBACiAKIAlvbGRfaW5vZGVfbW9kZSA9IG9sZF9pbm9kZS0+aV9tb2RlOwogCWlmIChTX0lTRElSKG9sZF9pbm9kZV9tb2RlKSkgewotCQkvLyBtYWtlIHN1cmUsIHRoYXQgZGlyZWN0b3J5IGJlaW5nIHJlbmFtZWQgaGFzIGNvcnJlY3QgIi4uIiAKKwkJLy8gbWFrZSBzdXJlLCB0aGF0IGRpcmVjdG9yeSBiZWluZyByZW5hbWVkIGhhcyBjb3JyZWN0ICIuLiIKIAkJLy8gYW5kIHRoYXQgaXRzIG5ldyBwYXJlbnQgZGlyZWN0b3J5IGhhcyBub3QgdG9vIG1hbnkgbGlua3MKIAkJLy8gYWxyZWFkeQogCkBAIC0xMjg2LDggKzEyNzQsOCBAQAogCQkJfQogCQl9CiAKLQkJLyogZGlyZWN0b3J5IGlzIHJlbmFtZWQsIGl0cyBwYXJlbnQgZGlyZWN0b3J5IHdpbGwgYmUgY2hhbmdlZCwgCi0JCSAqKiBzbyBmaW5kICIuLiIgZW50cnkgCisJCS8qIGRpcmVjdG9yeSBpcyByZW5hbWVkLCBpdHMgcGFyZW50IGRpcmVjdG9yeSB3aWxsIGJlIGNoYW5nZWQsCisJCSAqKiBzbyBmaW5kICIuLiIgZW50cnkKIAkJICovCiAJCWRvdF9kb3RfZGUuZGVfZ2VuX251bWJlcl9iaXRfc3RyaW5nID0gTlVMTDsKIAkJcmV0dmFsID0KQEAgLTEzMTgsOCArMTMwNiw4IEBACiAJCQkgICAgICAgbmV3X2RlbnRyeS0+ZF9uYW1lLmxlbiwgb2xkX2lub2RlLCAwKTsKIAlpZiAocmV0dmFsID09IC1FRVhJU1QpIHsKIAkJaWYgKCFuZXdfZGVudHJ5X2lub2RlKSB7Ci0JCQlyZWlzZXJmc19wYW5pYyhvbGRfZGlyLT5pX3NiLAotCQkJCSAgICAgICAidnMtNzA1MDogbmV3IGVudHJ5IGlzIGZvdW5kLCBuZXcgaW5vZGUgPT0gMFxuIik7CisJCQlyZWlzZXJmc19wYW5pYyhvbGRfZGlyLT5pX3NiLCAidnMtNzA1MCIsCisJCQkJICAgICAgICJuZXcgZW50cnkgaXMgZm91bmQsIG5ldyBpbm9kZSA9PSAwIik7CiAJCX0KIAl9IGVsc2UgaWYgKHJldHZhbCkgewogCQlpbnQgZXJyID0gam91cm5hbF9lbmQoJnRoLCBvbGRfZGlyLT5pX3NiLCBqYmVnaW5fY291bnQpOwpAQCAtMTM5Nyw5ICsxMzg1LDkgQEAKIAkJICAgdGhpcyBzdHVmZiwgeWVzPyBUaGVuLCBoYXZpbmcKIAkJICAgZ2F0aGVyZWQgZXZlcnl0aGluZyBpbnRvIFJBTSB3ZQogCQkgICBzaG91bGQgbG9jayB0aGUgYnVmZmVycywgeWVzPyAgLUhhbnMgKi8KLQkJLyogcHJvYmFibHkuICBvdXIgcmVuYW1lIG5lZWRzIHRvIGhvbGQgbW9yZSAKLQkJICoqIHRoYW4gb25lIHBhdGggYXQgb25jZS4gIFRoZSBzZWFscyB3b3VsZCAKLQkJICoqIGhhdmUgdG8gYmUgd3JpdHRlbiB0byBkZWFsIHdpdGggbXVsdGktcGF0aCAKKwkJLyogcHJvYmFibHkuICBvdXIgcmVuYW1lIG5lZWRzIHRvIGhvbGQgbW9yZQorCQkgKiogdGhhbiBvbmUgcGF0aCBhdCBvbmNlLiAgVGhlIHNlYWxzIHdvdWxkCisJCSAqKiBoYXZlIHRvIGJlIHdyaXR0ZW4gdG8gZGVhbCB3aXRoIG11bHRpLXBhdGgKIAkJICoqIGlzc3VlcyAtY2hyaXMKIAkJICovCiAJCS8qIHNhbml0eSBjaGVja2luZyBiZWZvcmUgZG9pbmcgdGhlIHJlbmFtZSAtIGF2b2lkIHJhY2VzIG1hbnkKQEAgLTE0NzcsNyArMTQ2NSw3IEBACiAJfQogCiAJaWYgKFNfSVNESVIob2xkX2lub2RlX21vZGUpKSB7Ci0JCS8vIGFkanVzdCAiLi4iIG9mIHJlbmFtZWQgZGlyZWN0b3J5IAorCQkvKiBhZGp1c3QgIi4uIiBvZiByZW5hbWVkIGRpcmVjdG9yeSAqLwogCQlzZXRfaW5vX2luX2Rpcl9lbnRyeSgmZG90X2RvdF9kZSwgSU5PREVfUEtFWShuZXdfZGlyKSk7CiAJCWpvdXJuYWxfbWFya19kaXJ0eSgmdGgsIG5ld19kaXItPmlfc2IsIGRvdF9kb3RfZGUuZGVfYmgpOwogCkBAIC0xNDk5LDggKzE0ODcsOCBAQAogCWlmIChyZWlzZXJmc19jdXRfZnJvbV9pdGVtCiAJICAgICgmdGgsICZvbGRfZW50cnlfcGF0aCwgJihvbGRfZGUuZGVfZW50cnlfa2V5KSwgb2xkX2RpciwgTlVMTCwKIAkgICAgIDApIDwgMCkKLQkJcmVpc2VyZnNfd2FybmluZyhvbGRfZGlyLT5pX3NiLAotCQkJCSAidnMtNzA2MDogcmVpc2VyZnNfcmVuYW1lOiBjb3VsZG4ndCBub3QgY3V0IG9sZCBuYW1lLiBGc2NrIGxhdGVyPyIpOworCQlyZWlzZXJmc19lcnJvcihvbGRfZGlyLT5pX3NiLCAidnMtNzA2MCIsCisJCQkgICAgICAgImNvdWxkbid0IG5vdCBjdXQgb2xkIG5hbWUuIEZzY2sgbGF0ZXI/Iik7CiAKIAlvbGRfZGlyLT5pX3NpemUgLT0gREVIX1NJWkUgKyBvbGRfZGUuZGVfZW50cnlsZW47CiAKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL29iamVjdGlkLmMgYi9mcy9yZWlzZXJmcy9vYmplY3RpZC5jCmluZGV4IGVhMGNmOGMuLjNhNmRlODEgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL29iamVjdGlkLmMKKysrIGIvZnMvcmVpc2VyZnMvb2JqZWN0aWQuYwpAQCAtMTgsOCArMTgsNyBAQAogc3RhdGljIHZvaWQgY2hlY2tfb2JqZWN0aWRfbWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgX19sZTMyICogbWFwKQogewogCWlmIChsZTMyX3RvX2NwdShtYXBbMF0pICE9IDEpCi0JCXJlaXNlcmZzX3BhbmljKHMsCi0JCQkgICAgICAgInZzLTE1MDEwOiBjaGVja19vYmplY3RpZF9tYXA6IG1hcCBjb3JydXB0ZWQ6ICVseCIsCisJCXJlaXNlcmZzX3BhbmljKHMsICJ2cy0xNTAxMCIsICJtYXAgY29ycnVwdGVkOiAlbHgiLAogCQkJICAgICAgIChsb25nIHVuc2lnbmVkIGludClsZTMyX3RvX2NwdShtYXBbMF0pKTsKIAogCS8vIEZJWE1FOiBhZGQgc29tZXRoaW5nIGVsc2UgaGVyZQpAQCAtNjEsNyArNjAsNyBAQAogCS8qIGNvbW1lbnQgbmVlZGVkIC1IYW5zICovCiAJdW51c2VkX29iamVjdGlkID0gbGUzMl90b19jcHUobWFwWzFdKTsKIAlpZiAodW51c2VkX29iamVjdGlkID09IFUzMl9NQVgpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLCAiJXM6IG5vIG1vcmUgb2JqZWN0IGlkcyIsIF9fZnVuY19fKTsKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAicmVpc2VyZnMtMTUxMDAiLCAibm8gbW9yZSBvYmplY3QgaWRzIik7CiAJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHMsIFNCX0JVRkZFUl9XSVRIX1NCKHMpKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTYwLDkgKzE1OSw4IEBACiAJCWkgKz0gMjsKIAl9CiAKLQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkgInZzLTE1MDExOiByZWlzZXJmc19yZWxlYXNlX29iamVjdGlkOiB0cmllZCB0byBmcmVlIGZyZWUgb2JqZWN0IGlkICglbHUpIiwKLQkJCSAobG9uZyB1bnNpZ25lZClvYmplY3RpZF90b19yZWxlYXNlKTsKKwlyZWlzZXJmc19lcnJvcihzLCAidnMtMTUwMTEiLCAidHJpZWQgdG8gZnJlZSBmcmVlIG9iamVjdCBpZCAoJWx1KSIsCisJCSAgICAgICAobG9uZyB1bnNpZ25lZClvYmplY3RpZF90b19yZWxlYXNlKTsKIH0KIAogaW50IHJlaXNlcmZzX2NvbnZlcnRfb2JqZWN0aWRfbWFwX3YxKHN0cnVjdCBzdXBlcl9ibG9jayAqcykKQEAgLTE4Miw3ICsxODAsNyBAQAogCiAJaWYgKGN1cl9zaXplID4gbmV3X3NpemUpIHsKIAkJLyogbWFyayBldmVyeW9uZSB1c2VkIHRoYXQgd2FzIGxpc3RlZCBhcyBmcmVlIGF0IHRoZSBlbmQgb2YgdGhlIG9iamVjdGlkCi0JCSAqKiBtYXAgCisJCSAqKiBtYXAKIAkJICovCiAJCW9iamVjdGlkX21hcFtuZXdfc2l6ZSAtIDFdID0gb2JqZWN0aWRfbWFwW2N1cl9zaXplIC0gMV07CiAJCXNldF9zYl9vaWRfY3Vyc2l6ZShkaXNrX3NiLCBuZXdfc2l6ZSk7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9wcmludHMuYyBiL2ZzL3JlaXNlcmZzL3ByaW50cy5jCmluZGV4IDc0MGJiOGMuLjUzNmVhY2EgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3ByaW50cy5jCisrKyBiL2ZzL3JlaXNlcmZzL3ByaW50cy5jCkBAIC0xNTcsMTkgKzE1NywxNiBAQAogCQlkY19zaXplKGRjKSk7CiB9CiAKLXN0YXRpYyBjaGFyICppc190aGVyZV9yZWlzZXJmc19zdHJ1Y3QoY2hhciAqZm10LCBpbnQgKndoYXQsIGludCAqc2tpcCkKK3N0YXRpYyBjaGFyICppc190aGVyZV9yZWlzZXJmc19zdHJ1Y3QoY2hhciAqZm10LCBpbnQgKndoYXQpCiB7CiAJY2hhciAqayA9IGZtdDsKIAotCSpza2lwID0gMDsKLQogCXdoaWxlICgoayA9IHN0cmNocihrLCAnJScpKSAhPSBOVUxMKSB7CiAJCWlmIChrWzFdID09ICdrJyB8fCBrWzFdID09ICdLJyB8fCBrWzFdID09ICdoJyB8fCBrWzFdID09ICd0JyB8fAogCQkgICAga1sxXSA9PSAneicgfHwga1sxXSA9PSAnYicgfHwga1sxXSA9PSAneScgfHwga1sxXSA9PSAnYScpIHsKIAkJCSp3aGF0ID0ga1sxXTsKIAkJCWJyZWFrOwogCQl9Ci0JCSgqc2tpcCkrKzsKIAkJaysrOwogCX0KIAlyZXR1cm4gazsKQEAgLTE4MSwzMCArMTc4LDI5IEBACiAgICBhcHByb3ByaWF0aXZlIHByaW50ay4gV2l0aCB0aGlzIHJlaXNlcmZzX3dhcm5pbmcgeW91IGNhbiB1c2UgZm9ybWF0CiAgICBzcGVjaWZpY2F0aW9uIGZvciBjb21wbGV4IHN0cnVjdHVyZXMgbGlrZSB5b3UgdXNlZCB0byBkbyB3aXRoCiAgICBwcmludGZzIGZvciBpbnRlZ2VycywgZG91YmxlcyBhbmQgcG9pbnRlcnMuIEZvciBpbnN0YW5jZSwgdG8gcHJpbnQKLSAgIG91dCBrZXkgc3RydWN0dXJlIHlvdSBoYXZlIHRvIHdyaXRlIGp1c3Q6IAotICAgcmVpc2VyZnNfd2FybmluZyAoImJhZCBrZXkgJWsiLCBrZXkpOyAKLSAgIGluc3RlYWQgb2YgCi0gICBwcmludGsgKCJiYWQga2V5ICVsdSAlbHUgJWx1ICVsdSIsIGtleS0+a19kaXJfaWQsIGtleS0+a19vYmplY3RpZCwgCi0gICAgICAgICAgIGtleS0+a19vZmZzZXQsIGtleS0+a191bmlxdWVuZXNzKTsgCisgICBvdXQga2V5IHN0cnVjdHVyZSB5b3UgaGF2ZSB0byB3cml0ZSBqdXN0OgorICAgcmVpc2VyZnNfd2FybmluZyAoImJhZCBrZXkgJWsiLCBrZXkpOworICAgaW5zdGVhZCBvZgorICAgcHJpbnRrICgiYmFkIGtleSAlbHUgJWx1ICVsdSAlbHUiLCBrZXktPmtfZGlyX2lkLCBrZXktPmtfb2JqZWN0aWQsCisgICAgICAgICAgIGtleS0+a19vZmZzZXQsIGtleS0+a191bmlxdWVuZXNzKTsKICovCi0KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZXJyb3JfbG9jayk7CiBzdGF0aWMgdm9pZCBwcmVwYXJlX2Vycm9yX2J1Zihjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKIHsKIAljaGFyICpmbXQxID0gZm10X2J1ZjsKIAljaGFyICprOwogCWNoYXIgKnAgPSBlcnJvcl9idWY7Ci0JaW50IGksIGosIHdoYXQsIHNraXA7CisJaW50IHdoYXQ7CisKKwlzcGluX2xvY2soJmVycm9yX2xvY2spOwogCiAJc3RyY3B5KGZtdDEsIGZtdCk7CiAKLQl3aGlsZSAoKGsgPSBpc190aGVyZV9yZWlzZXJmc19zdHJ1Y3QoZm10MSwgJndoYXQsICZza2lwKSkgIT0gTlVMTCkgeworCXdoaWxlICgoayA9IGlzX3RoZXJlX3JlaXNlcmZzX3N0cnVjdChmbXQxLCAmd2hhdCkpICE9IE5VTEwpIHsKIAkJKmsgPSAwOwogCiAJCXAgKz0gdnNwcmludGYocCwgZm10MSwgYXJncyk7CiAKLQkJZm9yIChpID0gMDsgaSA8IHNraXA7IGkrKykKLQkJCWogPSB2YV9hcmcoYXJncywgaW50KTsKLQogCQlzd2l0Y2ggKHdoYXQpIHsKIAkJY2FzZSAnayc6CiAJCQlzcHJpbnRmX2xlX2tleShwLCB2YV9hcmcoYXJncywgc3RydWN0IHJlaXNlcmZzX2tleSAqKSk7CkBAIC0yNDMsMTUgKzIzOSwxNiBAQAogCQlmbXQxID0gayArIDI7CiAJfQogCXZzcHJpbnRmKHAsIGZtdDEsIGFyZ3MpOworCXNwaW5fdW5sb2NrKCZlcnJvcl9sb2NrKTsKIAogfQogCiAvKiBpbiBhZGRpdGlvbiB0byB1c3VhbCBjb252ZXJzaW9uIHNwZWNpZmllcnMgdGhpcyBhY2NlcHRzIHJlaXNlcmZzCi0gICBzcGVjaWZpYyBjb252ZXJzaW9uIHNwZWNpZmllcnM6IAotICAgJWsgdG8gcHJpbnQgbGl0dGxlIGVuZGlhbiBrZXksIAotICAgJUsgdG8gcHJpbnQgY3B1IGtleSwgCisgICBzcGVjaWZpYyBjb252ZXJzaW9uIHNwZWNpZmllcnM6CisgICAlayB0byBwcmludCBsaXR0bGUgZW5kaWFuIGtleSwKKyAgICVLIHRvIHByaW50IGNwdSBrZXksCiAgICAlaCB0byBwcmludCBpdGVtX2hlYWQsCi0gICAldCB0byBwcmludCBkaXJlY3RvcnkgZW50cnkgCisgICAldCB0byBwcmludCBkaXJlY3RvcnkgZW50cnkKICAgICV6IHRvIHByaW50IGJsb2NrIGhlYWQgKGFyZyBtdXN0IGJlIHN0cnVjdCBidWZmZXJfaGVhZCAqCiAgICAlYiB0byBwcmludCBidWZmZXJfaGVhZAogKi8KQEAgLTI2NCwxNCArMjYxLDE3IEBACiAgICAgdmFfZW5kKCBhcmdzICk7XAogfQogCi12b2lkIHJlaXNlcmZzX3dhcm5pbmcoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit2b2lkIF9fcmVpc2VyZnNfd2FybmluZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICppZCwKKwkJCSBjb25zdCBjaGFyICpmdW5jdGlvbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJZG9fcmVpc2VyZnNfd2FybmluZyhmbXQpOwogCWlmIChzYikKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUmVpc2VyRlM6ICVzOiB3YXJuaW5nOiAlc1xuIiwKLQkJICAgICAgIHJlaXNlcmZzX2JkZXZuYW1lKHNiKSwgZXJyb3JfYnVmKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkVJU0VSRlMgd2FybmluZyAoZGV2aWNlICVzKTogJXMlcyVzOiAiCisJCSAgICAgICAiJXNcbiIsIHNiLT5zX2lkLCBpZCA/IGlkIDogIiIsIGlkID8gIiAiIDogIiIsCisJCSAgICAgICBmdW5jdGlvbiwgZXJyb3JfYnVmKTsKIAllbHNlCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlJlaXNlckZTOiB3YXJuaW5nOiAlc1xuIiwgZXJyb3JfYnVmKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkVJU0VSRlMgd2FybmluZzogJXMlcyVzOiAlc1xuIiwKKwkJICAgICAgIGlkID8gaWQgOiAiIiwgaWQgPyAiICIgOiAiIiwgZnVuY3Rpb24sIGVycm9yX2J1Zik7CiB9CiAKIC8qIE5vIG5ld2xpbmUuLiByZWlzZXJmc19pbmZvIGNhbGxzIGNhbiBiZSBmb2xsb3dlZCBieSBwcmludGsncyAqLwpAQCAtMjc5LDEwICsyNzksMTAgQEAKIHsKIAlkb19yZWlzZXJmc193YXJuaW5nKGZtdCk7CiAJaWYgKHNiKQotCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJlaXNlckZTOiAlczogJXMiLAotCQkgICAgICAgcmVpc2VyZnNfYmRldm5hbWUoc2IpLCBlcnJvcl9idWYpOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJFSVNFUkZTIChkZXZpY2UgJXMpOiAlcyIsCisJCSAgICAgICBzYi0+c19pZCwgZXJyb3JfYnVmKTsKIAllbHNlCi0JCXByaW50ayhLRVJOX05PVElDRSAiUmVpc2VyRlM6ICVzIiwgZXJyb3JfYnVmKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJSRUlTRVJGUyAlczoiLCBlcnJvcl9idWYpOwogfQogCiAvKiBObyBuZXdsaW5lLi4gcmVpc2VyZnNfcHJpbnRrIGNhbGxzIGNhbiBiZSBmb2xsb3dlZCBieSBwcmludGsncyAqLwpAQCAtMjk3LDEwICsyOTcsMTAgQEAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKIAlkb19yZWlzZXJmc193YXJuaW5nKGZtdCk7CiAJaWYgKHMpCi0JCXByaW50ayhLRVJOX0RFQlVHICJSZWlzZXJGUzogJXM6ICVzXG4iLAotCQkgICAgICAgcmVpc2VyZnNfYmRldm5hbWUocyksIGVycm9yX2J1Zik7CisJCXByaW50ayhLRVJOX0RFQlVHICJSRUlTRVJGUyBkZWJ1ZyAoZGV2aWNlICVzKTogJXNcbiIsCisJCSAgICAgICBzLT5zX2lkLCBlcnJvcl9idWYpOwogCWVsc2UKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlJlaXNlckZTOiAlc1xuIiwgZXJyb3JfYnVmKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlJFSVNFUkZTIGRlYnVnOiAlc1xuIiwgZXJyb3JfYnVmKTsKICNlbmRpZgogfQogCkBAIC0zMTQsMTcgKzMxNCwxNyBAQAogICAgIG1haW50YWluZXItZXJyb3JpZC4gIERvbid0IGJvdGhlciB3aXRoIHJldXNpbmcgZXJyb3JpZHMsIHRoZXJlIGFyZQogICAgIGxvdHMgb2YgbnVtYmVycyBvdXQgdGhlcmUuCiAKLSAgICBFeGFtcGxlOiAKLSAgICAKKyAgICBFeGFtcGxlOgorCiAgICAgcmVpc2VyZnNfcGFuaWMoCiAJcF9zYiwgInJlaXNlci0yOTogcmVpc2VyZnNfbmV3X2Jsb2NrbnJzOiAiCiAJIm9uZSBvZiBzZWFyY2hfc3RhcnQgb3Igcm4oJWQpIGlzIGVxdWFsIHRvIE1BWF9CX05VTSwiCi0JIndoaWNoIG1lYW5zIHRoYXQgd2UgYXJlIG9wdGltaXppbmcgbG9jYXRpb24gYmFzZWQgb24gdGhlIGJvZ3VzIGxvY2F0aW9uIG9mIGEgdGVtcCBidWZmZXIgKCVwKS4iLCAKKwkid2hpY2ggbWVhbnMgdGhhdCB3ZSBhcmUgb3B0aW1pemluZyBsb2NhdGlvbiBiYXNlZCBvbiB0aGUgYm9ndXMgbG9jYXRpb24gb2YgYSB0ZW1wIGJ1ZmZlciAoJXApLiIsCiAJcm4sIGJoCiAgICAgKTsKIAogICAgIFJlZ3VsYXIgcGFuaWMoKXMgc29tZXRpbWVzIGNsZWFyIHRoZSBzY3JlZW4gYmVmb3JlIHRoZSBtZXNzYWdlIGNhbgotICAgIGJlIHJlYWQsIHRodXMgdGhlIG5lZWQgZm9yIHRoZSB3aGlsZSBsb29wLiAgCisgICAgYmUgcmVhZCwgdGh1cyB0aGUgbmVlZCBmb3IgdGhlIHdoaWxlIGxvb3AuCiAKICAgICBOdW1iZXJpbmcgc2NoZW1lIGZvciBwYW5pYyB1c2VkIGJ5IFZsYWRpbWlyIGFuZCBBbmF0b2x5KCBIYW5zIGNvbXBsZXRlbHkgaWdub3JlcyB0aGlzIHNjaGVtZSwgYW5kIGNvbnNpZGVycyBpdAogICAgIHBvaW50bGVzcyBjb21wbGV4aXR5KToKQEAgLTM1MywxNCArMzUzLDQ2IEBACiBleHRlcm4gc3RydWN0IHRyZWVfYmFsYW5jZSAqY3VyX3RiOwogI2VuZGlmCiAKLXZvaWQgcmVpc2VyZnNfcGFuaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit2b2lkIF9fcmVpc2VyZnNfcGFuaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqaWQsCisJCSAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAlkb19yZWlzZXJmc193YXJuaW5nKGZtdCk7CiAKKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKIAlkdW1wX3N0YWNrKCk7CisjZW5kaWYKKwlpZiAoc2IpCisJCXBhbmljKEtFUk5fV0FSTklORyAiUkVJU0VSRlMgcGFuaWMgKGRldmljZSAlcyk6ICVzJXMlczogJXNcbiIsCisJCSAgICAgIHNiLT5zX2lkLCBpZCA/IGlkIDogIiIsIGlkID8gIiAiIDogIiIsCisJCSAgICAgIGZ1bmN0aW9uLCBlcnJvcl9idWYpOworCWVsc2UKKwkJcGFuaWMoS0VSTl9XQVJOSU5HICJSRUlTRVJGUyBwYW5pYzogJXMlcyVzOiAlc1xuIiwKKwkJICAgICAgaWQgPyBpZCA6ICIiLCBpZCA/ICIgIiA6ICIiLCBmdW5jdGlvbiwgZXJyb3JfYnVmKTsKK30KIAotCXBhbmljKEtFUk5fRU1FUkcgIlJFSVNFUkZTOiBwYW5pYyAoZGV2aWNlICVzKTogJXNcbiIsCi0JICAgICAgIHJlaXNlcmZzX2JkZXZuYW1lKHNiKSwgZXJyb3JfYnVmKTsKK3ZvaWQgX19yZWlzZXJmc19lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICppZCwKKwkJICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWRvX3JlaXNlcmZzX3dhcm5pbmcoZm10KTsKKworCUJVR19PTihzYiA9PSBOVUxMKTsKKworCWlmIChyZWlzZXJmc19lcnJvcl9wYW5pYyhzYikpCisJCV9fcmVpc2VyZnNfcGFuaWMoc2IsIGlkLCBmdW5jdGlvbiwgZXJyb3JfYnVmKTsKKworCWlmIChpZCAmJiBpZFswXSkKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiUkVJU0VSRlMgZXJyb3IgKGRldmljZSAlcyk6ICVzICVzOiAlc1xuIiwKKwkJICAgICAgIHNiLT5zX2lkLCBpZCwgZnVuY3Rpb24sIGVycm9yX2J1Zik7CisJZWxzZQorCQlwcmludGsoS0VSTl9DUklUICJSRUlTRVJGUyBlcnJvciAoZGV2aWNlICVzKTogJXM6ICVzXG4iLAorCQkgICAgICAgc2ItPnNfaWQsIGZ1bmN0aW9uLCBlcnJvcl9idWYpOworCisJaWYgKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQorCQlyZXR1cm47CisKKwlyZWlzZXJmc19pbmZvKHNiLCAiUmVtb3VudGluZyBmaWxlc3lzdGVtIHJlYWQtb25seVxuIik7CisJc2ItPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOworCXJlaXNlcmZzX2Fib3J0X2pvdXJuYWwoc2IsIC1FSU8pOwogfQogCiB2b2lkIHJlaXNlcmZzX2Fib3J0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBlcnJubywgY29uc3QgY2hhciAqZm10LCAuLi4pCkBAIC0zNjgsMTggKzQwMCwxOCBAQAogCWRvX3JlaXNlcmZzX3dhcm5pbmcoZm10KTsKIAogCWlmIChyZWlzZXJmc19lcnJvcl9wYW5pYyhzYikpIHsKLQkJcGFuaWMoS0VSTl9DUklUICJSRUlTRVJGUzogcGFuaWMgKGRldmljZSAlcyk6ICVzXG4iLAotCQkgICAgICByZWlzZXJmc19iZGV2bmFtZShzYiksIGVycm9yX2J1Zik7CisJCXBhbmljKEtFUk5fQ1JJVCAiUkVJU0VSRlMgcGFuaWMgKGRldmljZSAlcyk6ICVzXG4iLCBzYi0+c19pZCwKKwkJICAgICAgZXJyb3JfYnVmKTsKIAl9CiAKLQlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCisJaWYgKHJlaXNlcmZzX2lzX2pvdXJuYWxfYWJvcnRlZChTQl9KT1VSTkFMKHNiKSkpCiAJCXJldHVybjsKIAotCXByaW50ayhLRVJOX0NSSVQgIlJFSVNFUkZTOiBhYm9ydCAoZGV2aWNlICVzKTogJXNcbiIsCi0JICAgICAgIHJlaXNlcmZzX2JkZXZuYW1lKHNiKSwgZXJyb3JfYnVmKTsKKwlwcmludGsoS0VSTl9DUklUICJSRUlTRVJGUyBhYm9ydCAoZGV2aWNlICVzKTogJXNcbiIsIHNiLT5zX2lkLAorCSAgICAgICBlcnJvcl9idWYpOwogCiAJc2ItPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOwotCXJlaXNlcmZzX2pvdXJuYWxfYWJvcnQoc2IsIGVycm5vKTsKKwlyZWlzZXJmc19hYm9ydF9qb3VybmFsKHNiLCBlcnJubyk7CiB9CiAKIC8qIHRoaXMgcHJpbnRzIGludGVybmFsIG5vZGVzICg0IGtleXMvaXRlbXMgaW4gbGluZSkgKGRjX251bWJlciwKQEAgLTY4MSwxMiArNzEzLDEwIEBACiAJYmxraCA9IEJfQkxLX0hFQUQoYmgpOwogCW5yID0gYmxraF9ucl9pdGVtKGJsa2gpOwogCWlmIChuciA+IChiaC0+Yl9zaXplIC0gQkxLSF9TSVpFKSAvIElIX1NJWkUpCi0JCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkgICAgICAgInZzLTYwMTA6IGNoZWNrX2xlYWZfYmxvY2tfaGVhZDogaW52YWxpZCBpdGVtIG51bWJlciAleiIsCisJCXJlaXNlcmZzX3BhbmljKE5VTEwsICJ2cy02MDEwIiwgImludmFsaWQgaXRlbSBudW1iZXIgJXoiLAogCQkJICAgICAgIGJoKTsKIAlpZiAoYmxraF9mcmVlX3NwYWNlKGJsa2gpID4gYmgtPmJfc2l6ZSAtIEJMS0hfU0laRSAtIElIX1NJWkUgKiBucikKLQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwKLQkJCSAgICAgICAidnMtNjAyMDogY2hlY2tfbGVhZl9ibG9ja19oZWFkOiBpbnZhbGlkIGZyZWUgc3BhY2UgJXoiLAorCQlyZWlzZXJmc19wYW5pYyhOVUxMLCAidnMtNjAyMCIsICJpbnZhbGlkIGZyZWUgc3BhY2UgJXoiLAogCQkJICAgICAgIGJoKTsKIAogfQpAQCAtNjk3LDIxICs3MjcsMTUgQEAKIAogCWJsa2ggPSBCX0JMS19IRUFEKGJoKTsKIAlpZiAoIShCX0xFVkVMKGJoKSA+IERJU0tfTEVBRl9OT0RFX0xFVkVMICYmIEJfTEVWRUwoYmgpIDw9IE1BWF9IRUlHSFQpKQotCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJICAgICAgICJ2cy02MDI1OiBjaGVja19pbnRlcm5hbF9ibG9ja19oZWFkOiBpbnZhbGlkIGxldmVsICV6IiwKLQkJCSAgICAgICBiaCk7CisJCXJlaXNlcmZzX3BhbmljKE5VTEwsICJ2cy02MDI1IiwgImludmFsaWQgbGV2ZWwgJXoiLCBiaCk7CiAKIAlpZiAoQl9OUl9JVEVNUyhiaCkgPiAoYmgtPmJfc2l6ZSAtIEJMS0hfU0laRSkgLyBJSF9TSVpFKQotCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJICAgICAgICJ2cy02MDMwOiBjaGVja19pbnRlcm5hbF9ibG9ja19oZWFkOiBpbnZhbGlkIGl0ZW0gbnVtYmVyICV6IiwKLQkJCSAgICAgICBiaCk7CisJCXJlaXNlcmZzX3BhbmljKE5VTEwsICJ2cy02MDMwIiwgImludmFsaWQgaXRlbSBudW1iZXIgJXoiLCBiaCk7CiAKIAlpZiAoQl9GUkVFX1NQQUNFKGJoKSAhPQogCSAgICBiaC0+Yl9zaXplIC0gQkxLSF9TSVpFIC0gS0VZX1NJWkUgKiBCX05SX0lURU1TKGJoKSAtCiAJICAgIERDX1NJWkUgKiAoQl9OUl9JVEVNUyhiaCkgKyAxKSkKLQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwKLQkJCSAgICAgICAidnMtNjA0MDogY2hlY2tfaW50ZXJuYWxfYmxvY2tfaGVhZDogaW52YWxpZCBmcmVlIHNwYWNlICV6IiwKLQkJCSAgICAgICBiaCk7CisJCXJlaXNlcmZzX3BhbmljKE5VTEwsICJ2cy02MDQwIiwgImludmFsaWQgZnJlZSBzcGFjZSAleiIsIGJoKTsKIAogfQogCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9wcm9jZnMuYyBiL2ZzL3JlaXNlcmZzL3Byb2Nmcy5jCmluZGV4IDM3MTczZmEuLjkyMjllNTUgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3Byb2Nmcy5jCisrKyBiL2ZzL3JlaXNlcmZzL3Byb2Nmcy5jCkBAIC0zMjEsNyArMzIxLDcgQEAKIAkJICAgLyogaW5jb3JlIGZpZWxkcyAqLwogCQkgICAial8xc3RfcmVzZXJ2ZWRfYmxvY2s6IFx0JWlcbiIKIAkJICAgImpfc3RhdGU6IFx0JWxpXG4iCi0JCSAgICJqX3RyYW5zX2lkOiBcdCVsdVxuIgorCQkgICAial90cmFuc19pZDogXHQldVxuIgogCQkgICAial9tb3VudF9pZDogXHQlbHVcbiIKIAkJICAgImpfc3RhcnQ6IFx0JWx1XG4iCiAJCSAgICJqX2xlbjogXHQlbHVcbiIKQEAgLTMyOSw3ICszMjksNyBAQAogCQkgICAial93Y291bnQ6IFx0JWlcbiIKIAkJICAgImpfYmNvdW50OiBcdCVsdVxuIgogCQkgICAial9maXJzdF91bmZsdXNoZWRfb2Zmc2V0OiBcdCVsdVxuIgotCQkgICAial9sYXN0X2ZsdXNoX3RyYW5zX2lkOiBcdCVsdVxuIgorCQkgICAial9sYXN0X2ZsdXNoX3RyYW5zX2lkOiBcdCV1XG4iCiAJCSAgICJqX3RyYW5zX3N0YXJ0X3RpbWU6IFx0JWxpXG4iCiAJCSAgICJqX2xpc3RfYml0bWFwX2luZGV4OiBcdCVpXG4iCiAJCSAgICJqX211c3Rfd2FpdDogXHQlaVxuIgpAQCAtNDkyLDcgKzQ5Miw2IEBACiAJc3Bpbl9sb2NrX2luaXQoJl9fUElORk8oc2IpLmxvY2spOwogCVJFSVNFUkZTX1NCKHNiKS0+cHJvY2RpciA9IHByb2NfbWtkaXIoYiwgcHJvY19pbmZvX3Jvb3QpOwogCWlmIChSRUlTRVJGU19TQihzYiktPnByb2NkaXIpIHsKLQkJUkVJU0VSRlNfU0Ioc2IpLT5wcm9jZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCQlSRUlTRVJGU19TQihzYiktPnByb2NkaXItPmRhdGEgPSBzYjsKIAkJYWRkX2ZpbGUoc2IsICJ2ZXJzaW9uIiwgc2hvd192ZXJzaW9uKTsKIAkJYWRkX2ZpbGUoc2IsICJzdXBlciIsIHNob3dfc3VwZXIpOwpAQCAtNTAzLDcgKzUwMiw3IEBACiAJCWFkZF9maWxlKHNiLCAiam91cm5hbCIsIHNob3dfam91cm5hbCk7CiAJCXJldHVybiAwOwogCX0KLQlyZWlzZXJmc193YXJuaW5nKHNiLCAicmVpc2VyZnM6IGNhbm5vdCBjcmVhdGUgL3Byb2MvJXMvJXMiLAorCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJjYW5ub3QgY3JlYXRlIC9wcm9jLyVzLyVzIiwKIAkJCSBwcm9jX2luZm9fcm9vdF9uYW1lLCBiKTsKIAlyZXR1cm4gMTsKIH0KQEAgLTU1NiwxMSArNTU1LDggQEAKIHsKIAlpZiAocHJvY19pbmZvX3Jvb3QgPT0gTlVMTCkgewogCQlwcm9jX2luZm9fcm9vdCA9IHByb2NfbWtkaXIocHJvY19pbmZvX3Jvb3RfbmFtZSwgTlVMTCk7Ci0JCWlmIChwcm9jX2luZm9fcm9vdCkgewotCQkJcHJvY19pbmZvX3Jvb3QtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JCX0gZWxzZSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkJCSAicmVpc2VyZnM6IGNhbm5vdCBjcmVhdGUgL3Byb2MvJXMiLAorCQlpZiAoIXByb2NfaW5mb19yb290KSB7CisJCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJjYW5ub3QgY3JlYXRlIC9wcm9jLyVzIiwKIAkJCQkJIHByb2NfaW5mb19yb290X25hbWUpOwogCQkJcmV0dXJuIDE7CiAJCX0KQEAgLTYzNCw3ICs2MzAsNyBAQAogICoKICAqLwogCi0vKiAKKy8qCiAgKiBNYWtlIExpbnVzIGhhcHB5LgogICogTG9jYWwgdmFyaWFibGVzOgogICogYy1pbmRlbnRhdGlvbi1zdHlsZTogIksmUiIKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3Jlc2l6ZS5jIGIvZnMvcmVpc2VyZnMvcmVzaXplLmMKaW5kZXggZjcxYzM5NC4uMjM4ZTlkOSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvcmVzaXplLmMKKysrIGIvZnMvcmVpc2VyZnMvcmVzaXplLmMKQEAgLTEsOCArMSw4IEBACi0vKiAKKy8qCiAgKiBDb3B5cmlnaHQgMjAwMCBieSBIYW5zIFJlaXNlciwgbGljZW5zaW5nIGdvdmVybmVkIGJ5IHJlaXNlcmZzL1JFQURNRQogICovCiAKLS8qIAorLyoKICAqIFdyaXR0ZW4gYnkgQWxleGFuZGVyIFphcm9jaGVudGNldi4KICAqCiAgKiBUaGUga2VybmVsIHBhcnQgb2YgdGhlIChvbi1saW5lKSByZWlzZXJmcyByZXNpemVyLgpAQCAtMTAxLDcgKzEwMSw3IEBACiAJCQltZW1jcHkoamJpdG1hcFtpXS5iaXRtYXBzLCBqYi0+Yml0bWFwcywgY29weV9zaXplKTsKIAogCQkJLyoganVzdCBpbiBjYXNlIHZmcmVlIHNjaGVkdWxlcyBvbiB1cywgY29weSB0aGUgbmV3Ci0JCQkgKiogcG9pbnRlciBpbnRvIHRoZSBqb3VybmFsIHN0cnVjdCBiZWZvcmUgZnJlZWluZyB0aGUgCisJCQkgKiogcG9pbnRlciBpbnRvIHRoZSBqb3VybmFsIHN0cnVjdCBiZWZvcmUgZnJlZWluZyB0aGUKIAkJCSAqKiBvbGQgb25lCiAJCQkgKi8KIAkJCW5vZGVfdG1wID0gamItPmJpdG1hcHM7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9zdHJlZS5jIGIvZnMvcmVpc2VyZnMvc3RyZWUuYwppbmRleCA3M2FhYTMzLi5kMDM2ZWU1IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9zdHJlZS5jCisrKyBiL2ZzL3JlaXNlcmZzL3N0cmVlLmMKQEAgLTIzLDcgKzIzLDYgQEAKICAqIGdldF9ya2V5CiAgKiBrZXlfaW5fYnVmZmVyCiAgKiBkZWNyZW1lbnRfYmNvdW50Ci0gKiBkZWNyZW1lbnRfY291bnRlcnNfaW5fcGF0aAogICogcmVpc2VyZnNfY2hlY2tfcGF0aAogICogcGF0aHJlbHNlX2FuZF9yZXN0b3JlCiAgKiBwYXRocmVsc2UKQEAgLTU3LDI4ICs1NiwyOCBAQAogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAKIC8qIERvZXMgdGhlIGJ1ZmZlciBjb250YWluIGEgZGlzayBibG9jayB3aGljaCBpcyBpbiB0aGUgdHJlZS4gKi8KLWlubGluZSBpbnQgQl9JU19JTl9UUkVFKGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2JoKQoraW5saW5lIGludCBCX0lTX0lOX1RSRUUoY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKIAotCVJGQUxTRShCX0xFVkVMKHBfc19iaCkgPiBNQVhfSEVJR0hULAotCSAgICAgICAiUEFQLTEwMTA6IGJsb2NrICglYikgaGFzIHRvbyBiaWcgbGV2ZWwgKCV6KSIsIHBfc19iaCwgcF9zX2JoKTsKKwlSRkFMU0UoQl9MRVZFTChiaCkgPiBNQVhfSEVJR0hULAorCSAgICAgICAiUEFQLTEwMTA6IGJsb2NrICglYikgaGFzIHRvbyBiaWcgbGV2ZWwgKCV6KSIsIGJoLCBiaCk7CiAKLQlyZXR1cm4gKEJfTEVWRUwocF9zX2JoKSAhPSBGUkVFX0xFVkVMKTsKKwlyZXR1cm4gKEJfTEVWRUwoYmgpICE9IEZSRUVfTEVWRUwpOwogfQogCiAvLwogLy8gdG8gZ2V0cyBpdGVtIGhlYWQgaW4gbGUgZm9ybQogLy8KLWlubGluZSB2b2lkIGNvcHlfaXRlbV9oZWFkKHN0cnVjdCBpdGVtX2hlYWQgKnBfdl90bywKLQkJCSAgIGNvbnN0IHN0cnVjdCBpdGVtX2hlYWQgKnBfdl9mcm9tKQoraW5saW5lIHZvaWQgY29weV9pdGVtX2hlYWQoc3RydWN0IGl0ZW1faGVhZCAqdG8sCisJCQkgICBjb25zdCBzdHJ1Y3QgaXRlbV9oZWFkICpmcm9tKQogewotCW1lbWNweShwX3ZfdG8sIHBfdl9mcm9tLCBJSF9TSVpFKTsKKwltZW1jcHkodG8sIGZyb20sIElIX1NJWkUpOwogfQogCiAvKiBrMSBpcyBwb2ludGVyIHRvIG9uLWRpc2sgc3RydWN0dXJlIHdoaWNoIGlzIHN0b3JlZCBpbiBsaXR0bGUtZW5kaWFuCiAgICBmb3JtLiBrMiBpcyBwb2ludGVyIHRvIGNwdSB2YXJpYWJsZS4gRm9yIGtleSBvZiBpdGVtcyBvZiB0aGUgc2FtZQogICAgb2JqZWN0IHRoaXMgcmV0dXJucyAwLgotICAgUmV0dXJuczogLTEgaWYga2V5MSA8IGtleTIgCisgICBSZXR1cm5zOiAtMSBpZiBrZXkxIDwga2V5MgogICAgMCBpZiBrZXkxID09IGtleTIKICAgIDEgaWYga2V5MSA+IGtleTIgKi8KIGlubGluZSBpbnQgY29tcF9zaG9ydF9rZXlzKGNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgKmxlX2tleSwKQEAgLTEzNiwxNSArMTM1LDE1IEBACiBpbmxpbmUgaW50IGNvbXBfc2hvcnRfbGVfa2V5cyhjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICprZXkxLAogCQkJICAgICAgY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqa2V5MikKIHsKLQlfX3UzMiAqcF9zXzFfdTMyLCAqcF9zXzJfdTMyOwotCWludCBuX2tleV9sZW5ndGggPSBSRUlTRVJGU19TSE9SVF9LRVlfTEVOOworCV9fdTMyICprMV91MzIsICprMl91MzI7CisJaW50IGtleV9sZW5ndGggPSBSRUlTRVJGU19TSE9SVF9LRVlfTEVOOwogCi0JcF9zXzFfdTMyID0gKF9fdTMyICopIGtleTE7Ci0JcF9zXzJfdTMyID0gKF9fdTMyICopIGtleTI7Ci0JZm9yICg7IG5fa2V5X2xlbmd0aC0tOyArK3Bfc18xX3UzMiwgKytwX3NfMl91MzIpIHsKLQkJaWYgKGxlMzJfdG9fY3B1KCpwX3NfMV91MzIpIDwgbGUzMl90b19jcHUoKnBfc18yX3UzMikpCisJazFfdTMyID0gKF9fdTMyICopIGtleTE7CisJazJfdTMyID0gKF9fdTMyICopIGtleTI7CisJZm9yICg7IGtleV9sZW5ndGgtLTsgKytrMV91MzIsICsrazJfdTMyKSB7CisJCWlmIChsZTMyX3RvX2NwdSgqazFfdTMyKSA8IGxlMzJfdG9fY3B1KCprMl91MzIpKQogCQkJcmV0dXJuIC0xOwotCQlpZiAobGUzMl90b19jcHUoKnBfc18xX3UzMikgPiBsZTMyX3RvX2NwdSgqcF9zXzJfdTMyKSkKKwkJaWYgKGxlMzJfdG9fY3B1KCprMV91MzIpID4gbGUzMl90b19jcHUoKmsyX3UzMikpCiAJCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xNzUsNTIgKzE3NCw1MSBAQAogICogIEJpbmFyeSBzZWFyY2ggdG9vbGtpdCBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgU2VhcmNoIGZvciBhbiBpdGVtIGluIHRoZSBhcnJheSBieSB0aGUgaXRlbSBrZXkgICAgICAgICAgICAgICAgICAgICAgICoKICAqICBSZXR1cm5zOiAgICAxIGlmIGZvdW5kLCAgMCBpZiBub3QgZm91bmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICpwX25fcG9zID0gbnVtYmVyIG9mIHRoZSBzZWFyY2hlZCBlbGVtZW50IGlmIGZvdW5kLCBlbHNlIHRoZSAgICAqCi0gKiAgICAgICAgbnVtYmVyIG9mIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgbGFyZ2VyIHRoYW4gcF92X2tleS4gICAgICAgICoKKyAqICAgICAgICAqcG9zID0gbnVtYmVyIG9mIHRoZSBzZWFyY2hlZCBlbGVtZW50IGlmIGZvdW5kLCBlbHNlIHRoZSAgICAgICAgKgorICogICAgICAgIG51bWJlciBvZiB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGlzIGxhcmdlciB0aGFuIGtleS4gICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBGb3IgdGhvc2Ugbm90IGZhbWlsaWFyIHdpdGggYmluYXJ5IHNlYXJjaDogbl9sYm91bmQgaXMgdGhlIGxlZnRtb3N0IGl0ZW0gdGhhdCBpdAotIGNvdWxkIGJlLCBuX3Jib3VuZCB0aGUgcmlnaHRtb3N0IGl0ZW0gdGhhdCBpdCBjb3VsZCBiZS4gIFdlIGV4YW1pbmUgdGhlIGl0ZW0KLSBoYWxmd2F5IGJldHdlZW4gbl9sYm91bmQgYW5kIG5fcmJvdW5kLCBhbmQgdGhhdCB0ZWxscyB1cyBlaXRoZXIgdGhhdCB3ZSBjYW4gaW5jcmVhc2UKLSBuX2xib3VuZCwgb3IgZGVjcmVhc2Ugbl9yYm91bmQsIG9yIHRoYXQgd2UgaGF2ZSBmb3VuZCBpdCwgb3IgaWYgbl9sYm91bmQgPD0gbl9yYm91bmQgdGhhdAorLyogRm9yIHRob3NlIG5vdCBmYW1pbGlhciB3aXRoIGJpbmFyeSBzZWFyY2g6IGxib3VuZCBpcyB0aGUgbGVmdG1vc3QgaXRlbSB0aGF0IGl0CisgY291bGQgYmUsIHJib3VuZCB0aGUgcmlnaHRtb3N0IGl0ZW0gdGhhdCBpdCBjb3VsZCBiZS4gIFdlIGV4YW1pbmUgdGhlIGl0ZW0KKyBoYWxmd2F5IGJldHdlZW4gbGJvdW5kIGFuZCByYm91bmQsIGFuZCB0aGF0IHRlbGxzIHVzIGVpdGhlciB0aGF0IHdlIGNhbiBpbmNyZWFzZQorIGxib3VuZCwgb3IgZGVjcmVhc2UgcmJvdW5kLCBvciB0aGF0IHdlIGhhdmUgZm91bmQgaXQsIG9yIGlmIGxib3VuZCA8PSByYm91bmQgdGhhdAogIHRoZXJlIGFyZSBubyBwb3NzaWJsZSBpdGVtcywgYW5kIHdlIGhhdmUgbm90IGZvdW5kIGl0LiBXaXRoIGVhY2ggZXhhbWluYXRpb24gd2UKICBjdXQgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBpdGVtcyBpdCBjb3VsZCBiZSBieSBvbmUgbW9yZSB0aGFuIGhhbGYgcm91bmRlZCBkb3duLAogIG9yIHdlIGZpbmQgaXQuICovCi1zdGF0aWMgaW5saW5lIGludCBiaW5fc2VhcmNoKGNvbnN0IHZvaWQgKnBfdl9rZXksCS8qIEtleSB0byBzZWFyY2ggZm9yLiAgICAgICAgICAgICAgICAgICAqLwotCQkJICAgICBjb25zdCB2b2lkICpwX3ZfYmFzZSwJLyogRmlyc3QgaXRlbSBpbiB0aGUgYXJyYXkuICAgICAgICAgICAgICovCi0JCQkgICAgIGludCBwX25fbnVtLAkvKiBOdW1iZXIgb2YgaXRlbXMgaW4gdGhlIGFycmF5LiAgICAgICAgKi8KLQkJCSAgICAgaW50IHBfbl93aWR0aCwJLyogSXRlbSBzaXplIGluIHRoZSBhcnJheS4KLQkJCQkJCSAgIHNlYXJjaGVkLiBMZXN0IHRoZSByZWFkZXIgYmUKLQkJCQkJCSAgIGNvbmZ1c2VkLCBub3RlIHRoYXQgdGhpcyBpcyBjcmFmdGVkCi0JCQkJCQkgICBhcyBhIGdlbmVyYWwgZnVuY3Rpb24sIGFuZCB3aGVuIGl0Ci0JCQkJCQkgICBpcyBhcHBsaWVkIHNwZWNpZmljYWxseSB0byB0aGUgYXJyYXkKLQkJCQkJCSAgIG9mIGl0ZW0gaGVhZGVycyBpbiBhIG5vZGUsIHBfbl93aWR0aAotCQkJCQkJICAgaXMgYWN0dWFsbHkgdGhlIGl0ZW0gaGVhZGVyIHNpemUgbm90Ci0JCQkJCQkgICB0aGUgaXRlbSBzaXplLiAgICAgICAgICAgICAgICAgICAgICAqLwotCQkJICAgICBpbnQgKnBfbl9wb3MJLyogTnVtYmVyIG9mIHRoZSBzZWFyY2hlZCBmb3IgZWxlbWVudC4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGJpbl9zZWFyY2goY29uc3Qgdm9pZCAqa2V5LAkvKiBLZXkgdG8gc2VhcmNoIGZvci4gKi8KKwkJCSAgICAgY29uc3Qgdm9pZCAqYmFzZSwJLyogRmlyc3QgaXRlbSBpbiB0aGUgYXJyYXkuICovCisJCQkgICAgIGludCBudW0sCS8qIE51bWJlciBvZiBpdGVtcyBpbiB0aGUgYXJyYXkuICovCisJCQkgICAgIGludCB3aWR0aCwJLyogSXRlbSBzaXplIGluIHRoZSBhcnJheS4KKwkJCQkJICAgc2VhcmNoZWQuIExlc3QgdGhlIHJlYWRlciBiZQorCQkJCQkgICBjb25mdXNlZCwgbm90ZSB0aGF0IHRoaXMgaXMgY3JhZnRlZAorCQkJCQkgICBhcyBhIGdlbmVyYWwgZnVuY3Rpb24sIGFuZCB3aGVuIGl0CisJCQkJCSAgIGlzIGFwcGxpZWQgc3BlY2lmaWNhbGx5IHRvIHRoZSBhcnJheQorCQkJCQkgICBvZiBpdGVtIGhlYWRlcnMgaW4gYSBub2RlLCB3aWR0aAorCQkJCQkgICBpcyBhY3R1YWxseSB0aGUgaXRlbSBoZWFkZXIgc2l6ZSBub3QKKwkJCQkJICAgdGhlIGl0ZW0gc2l6ZS4gKi8KKwkJCSAgICAgaW50ICpwb3MgLyogTnVtYmVyIG9mIHRoZSBzZWFyY2hlZCBmb3IgZWxlbWVudC4gKi8KICAgICApCiB7Ci0JaW50IG5fcmJvdW5kLCBuX2xib3VuZCwgbl9qOworCWludCByYm91bmQsIGxib3VuZCwgajsKIAotCWZvciAobl9qID0gKChuX3Jib3VuZCA9IHBfbl9udW0gLSAxKSArIChuX2xib3VuZCA9IDApKSAvIDI7Ci0JICAgICBuX2xib3VuZCA8PSBuX3Jib3VuZDsgbl9qID0gKG5fcmJvdW5kICsgbl9sYm91bmQpIC8gMikKKwlmb3IgKGogPSAoKHJib3VuZCA9IG51bSAtIDEpICsgKGxib3VuZCA9IDApKSAvIDI7CisJICAgICBsYm91bmQgPD0gcmJvdW5kOyBqID0gKHJib3VuZCArIGxib3VuZCkgLyAyKQogCQlzd2l0Y2ggKGNvbXBfa2V5cwotCQkJKChzdHJ1Y3QgcmVpc2VyZnNfa2V5ICopKChjaGFyICopcF92X2Jhc2UgKwotCQkJCQkJIG5faiAqIHBfbl93aWR0aCksCi0JCQkgKHN0cnVjdCBjcHVfa2V5ICopcF92X2tleSkpIHsKKwkJCSgoc3RydWN0IHJlaXNlcmZzX2tleSAqKSgoY2hhciAqKWJhc2UgKyBqICogd2lkdGgpLAorCQkJIChzdHJ1Y3QgY3B1X2tleSAqKWtleSkpIHsKIAkJY2FzZSAtMToKLQkJCW5fbGJvdW5kID0gbl9qICsgMTsKKwkJCWxib3VuZCA9IGogKyAxOwogCQkJY29udGludWU7CiAJCWNhc2UgMToKLQkJCW5fcmJvdW5kID0gbl9qIC0gMTsKKwkJCXJib3VuZCA9IGogLSAxOwogCQkJY29udGludWU7CiAJCWNhc2UgMDoKLQkJCSpwX25fcG9zID0gbl9qOworCQkJKnBvcyA9IGo7CiAJCQlyZXR1cm4gSVRFTV9GT1VORDsJLyogS2V5IGZvdW5kIGluIHRoZSBhcnJheS4gICovCiAJCX0KIAogCS8qIGJpbl9zZWFyY2ggZGlkIG5vdCBmaW5kIGdpdmVuIGtleSwgaXQgcmV0dXJucyBwb3NpdGlvbiBvZiBrZXksCiAJICAgdGhhdCBpcyBtaW5pbWFsIGFuZCBncmVhdGVyIHRoYW4gdGhlIGdpdmVuIG9uZS4gKi8KLQkqcF9uX3BvcyA9IG5fbGJvdW5kOworCSpwb3MgPSBsYm91bmQ7CiAJcmV0dXJuIElURU1fTk9UX0ZPVU5EOwogfQogCkBAIC0yNDMsOTAgKzI0MSw4OCBAQAogICAgb2YgdGhlIHBhdGgsIGFuZCBnb2luZyB1cHdhcmRzLiAgV2UgbXVzdCBjaGVjayB0aGUgcGF0aCdzIHZhbGlkaXR5IGF0IGVhY2ggc3RlcC4gIElmIHRoZSBrZXkgaXMgbm90IGluCiAgICB0aGUgcGF0aCwgdGhlcmUgaXMgbm8gZGVsaW1pdGluZyBrZXkgaW4gdGhlIHRyZWUgKGJ1ZmZlciBpcyBmaXJzdCBvciBsYXN0IGJ1ZmZlciBpbiB0cmVlKSwgYW5kIGluIHRoaXMKICAgIGNhc2Ugd2UgcmV0dXJuIGEgc3BlY2lhbCBrZXksIGVpdGhlciBNSU5fS0VZIG9yIE1BWF9LRVkuICovCi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgKmdldF9sa2V5KGNvbnN0IHN0cnVjdCB0cmVlcGF0aAotCQkJCQkJICAqcF9zX2Noa19wYXRoLAotCQkJCQkJICBjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sKLQkJCQkJCSAgKnBfc19zYikKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqZ2V0X2xrZXkoY29uc3Qgc3RydWN0IHRyZWVwYXRoICpjaGtfcGF0aCwKKwkJCQkJCSAgY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlpbnQgbl9wb3NpdGlvbiwgbl9wYXRoX29mZnNldCA9IHBfc19jaGtfcGF0aC0+cGF0aF9sZW5ndGg7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfcGFyZW50OworCWludCBwb3NpdGlvbiwgcGF0aF9vZmZzZXQgPSBjaGtfcGF0aC0+cGF0aF9sZW5ndGg7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnQ7CiAKLQlSRkFMU0Uobl9wYXRoX29mZnNldCA8IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQsCisJUkZBTFNFKHBhdGhfb2Zmc2V0IDwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCwKIAkgICAgICAgIlBBUC01MDEwOiBpbnZhbGlkIG9mZnNldCBpbiB0aGUgcGF0aCIpOwogCiAJLyogV2hpbGUgbm90IGhpZ2hlciBpbiBwYXRoIHRoYW4gZmlyc3QgZWxlbWVudC4gKi8KLQl3aGlsZSAobl9wYXRoX29mZnNldC0tID4gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCkgeworCXdoaWxlIChwYXRoX29mZnNldC0tID4gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCkgewogCiAJCVJGQUxTRSghYnVmZmVyX3VwdG9kYXRlCi0JCSAgICAgICAoUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfY2hrX3BhdGgsIG5fcGF0aF9vZmZzZXQpKSwKKwkJICAgICAgIChQQVRIX09GRlNFVF9QQlVGRkVSKGNoa19wYXRoLCBwYXRoX29mZnNldCkpLAogCQkgICAgICAgIlBBUC01MDIwOiBwYXJlbnQgaXMgbm90IHVwdG9kYXRlIik7CiAKIAkJLyogUGFyZW50IGF0IHRoZSBwYXRoIGlzIG5vdCBpbiB0aGUgdHJlZSBub3cuICovCiAJCWlmICghQl9JU19JTl9UUkVFCi0JCSAgICAocF9zX3BhcmVudCA9Ci0JCSAgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfY2hrX3BhdGgsIG5fcGF0aF9vZmZzZXQpKSkKKwkJICAgIChwYXJlbnQgPQorCQkgICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIoY2hrX3BhdGgsIHBhdGhfb2Zmc2V0KSkpCiAJCQlyZXR1cm4gJk1BWF9LRVk7CiAJCS8qIENoZWNrIHdoZXRoZXIgcG9zaXRpb24gaW4gdGhlIHBhcmVudCBpcyBjb3JyZWN0LiAqLwotCQlpZiAoKG5fcG9zaXRpb24gPQotCQkgICAgIFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBfc19jaGtfcGF0aCwKLQkJCQkJICBuX3BhdGhfb2Zmc2V0KSkgPgotCQkgICAgQl9OUl9JVEVNUyhwX3NfcGFyZW50KSkKKwkJaWYgKChwb3NpdGlvbiA9CisJCSAgICAgUEFUSF9PRkZTRVRfUE9TSVRJT04oY2hrX3BhdGgsCisJCQkJCSAgcGF0aF9vZmZzZXQpKSA+CisJCSAgICBCX05SX0lURU1TKHBhcmVudCkpCiAJCQlyZXR1cm4gJk1BWF9LRVk7CiAJCS8qIENoZWNrIHdoZXRoZXIgcGFyZW50IGF0IHRoZSBwYXRoIHJlYWxseSBwb2ludHMgdG8gdGhlIGNoaWxkLiAqLwotCQlpZiAoQl9OX0NISUxEX05VTShwX3NfcGFyZW50LCBuX3Bvc2l0aW9uKSAhPQotCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfY2hrX3BhdGgsCi0JCQkJCW5fcGF0aF9vZmZzZXQgKyAxKS0+Yl9ibG9ja25yKQorCQlpZiAoQl9OX0NISUxEX05VTShwYXJlbnQsIHBvc2l0aW9uKSAhPQorCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihjaGtfcGF0aCwKKwkJCQkJcGF0aF9vZmZzZXQgKyAxKS0+Yl9ibG9ja25yKQogCQkJcmV0dXJuICZNQVhfS0VZOwogCQkvKiBSZXR1cm4gZGVsaW1pdGluZyBrZXkgaWYgcG9zaXRpb24gaW4gdGhlIHBhcmVudCBpcyBub3QgZXF1YWwgdG8gemVyby4gKi8KLQkJaWYgKG5fcG9zaXRpb24pCi0JCQlyZXR1cm4gQl9OX1BERUxJTV9LRVkocF9zX3BhcmVudCwgbl9wb3NpdGlvbiAtIDEpOworCQlpZiAocG9zaXRpb24pCisJCQlyZXR1cm4gQl9OX1BERUxJTV9LRVkocGFyZW50LCBwb3NpdGlvbiAtIDEpOwogCX0KIAkvKiBSZXR1cm4gTUlOX0tFWSBpZiB3ZSBhcmUgaW4gdGhlIHJvb3Qgb2YgdGhlIGJ1ZmZlciB0cmVlLiAqLwotCWlmIChQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19jaGtfcGF0aCwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCktPgotCSAgICBiX2Jsb2NrbnIgPT0gU0JfUk9PVF9CTE9DSyhwX3Nfc2IpKQorCWlmIChQQVRIX09GRlNFVF9QQlVGRkVSKGNoa19wYXRoLCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKS0+CisJICAgIGJfYmxvY2tuciA9PSBTQl9ST09UX0JMT0NLKHNiKSkKIAkJcmV0dXJuICZNSU5fS0VZOwogCXJldHVybiAmTUFYX0tFWTsKIH0KIAogLyogR2V0IGRlbGltaXRpbmcga2V5IG9mIHRoZSBidWZmZXIgYXQgdGhlIHBhdGggYW5kIGl0cyByaWdodCBuZWlnaGJvci4gKi8KLWlubGluZSBjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICpnZXRfcmtleShjb25zdCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19jaGtfcGF0aCwKLQkJCQkJICAgY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IpCitpbmxpbmUgY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqZ2V0X3JrZXkoY29uc3Qgc3RydWN0IHRyZWVwYXRoICpjaGtfcGF0aCwKKwkJCQkJICAgY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlpbnQgbl9wb3NpdGlvbiwgbl9wYXRoX29mZnNldCA9IHBfc19jaGtfcGF0aC0+cGF0aF9sZW5ndGg7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfcGFyZW50OworCWludCBwb3NpdGlvbiwgcGF0aF9vZmZzZXQgPSBjaGtfcGF0aC0+cGF0aF9sZW5ndGg7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnQ7CiAKLQlSRkFMU0Uobl9wYXRoX29mZnNldCA8IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQsCisJUkZBTFNFKHBhdGhfb2Zmc2V0IDwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCwKIAkgICAgICAgIlBBUC01MDMwOiBpbnZhbGlkIG9mZnNldCBpbiB0aGUgcGF0aCIpOwogCi0Jd2hpbGUgKG5fcGF0aF9vZmZzZXQtLSA+IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQpIHsKKwl3aGlsZSAocGF0aF9vZmZzZXQtLSA+IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQpIHsKIAogCQlSRkFMU0UoIWJ1ZmZlcl91cHRvZGF0ZQotCQkgICAgICAgKFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX2Noa19wYXRoLCBuX3BhdGhfb2Zmc2V0KSksCisJCSAgICAgICAoUEFUSF9PRkZTRVRfUEJVRkZFUihjaGtfcGF0aCwgcGF0aF9vZmZzZXQpKSwKIAkJICAgICAgICJQQVAtNTA0MDogcGFyZW50IGlzIG5vdCB1cHRvZGF0ZSIpOwogCiAJCS8qIFBhcmVudCBhdCB0aGUgcGF0aCBpcyBub3QgaW4gdGhlIHRyZWUgbm93LiAqLwogCQlpZiAoIUJfSVNfSU5fVFJFRQotCQkgICAgKHBfc19wYXJlbnQgPQotCQkgICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX2Noa19wYXRoLCBuX3BhdGhfb2Zmc2V0KSkpCisJCSAgICAocGFyZW50ID0KKwkJICAgICBQQVRIX09GRlNFVF9QQlVGRkVSKGNoa19wYXRoLCBwYXRoX29mZnNldCkpKQogCQkJcmV0dXJuICZNSU5fS0VZOwogCQkvKiBDaGVjayB3aGV0aGVyIHBvc2l0aW9uIGluIHRoZSBwYXJlbnQgaXMgY29ycmVjdC4gKi8KLQkJaWYgKChuX3Bvc2l0aW9uID0KLQkJICAgICBQQVRIX09GRlNFVF9QT1NJVElPTihwX3NfY2hrX3BhdGgsCi0JCQkJCSAgbl9wYXRoX29mZnNldCkpID4KLQkJICAgIEJfTlJfSVRFTVMocF9zX3BhcmVudCkpCisJCWlmICgocG9zaXRpb24gPQorCQkgICAgIFBBVEhfT0ZGU0VUX1BPU0lUSU9OKGNoa19wYXRoLAorCQkJCQkgIHBhdGhfb2Zmc2V0KSkgPgorCQkgICAgQl9OUl9JVEVNUyhwYXJlbnQpKQogCQkJcmV0dXJuICZNSU5fS0VZOwogCQkvKiBDaGVjayB3aGV0aGVyIHBhcmVudCBhdCB0aGUgcGF0aCByZWFsbHkgcG9pbnRzIHRvIHRoZSBjaGlsZC4gKi8KLQkJaWYgKEJfTl9DSElMRF9OVU0ocF9zX3BhcmVudCwgbl9wb3NpdGlvbikgIT0KLQkJICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX2Noa19wYXRoLAotCQkJCQluX3BhdGhfb2Zmc2V0ICsgMSktPmJfYmxvY2tucikKKwkJaWYgKEJfTl9DSElMRF9OVU0ocGFyZW50LCBwb3NpdGlvbikgIT0KKwkJICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIoY2hrX3BhdGgsCisJCQkJCXBhdGhfb2Zmc2V0ICsgMSktPmJfYmxvY2tucikKIAkJCXJldHVybiAmTUlOX0tFWTsKIAkJLyogUmV0dXJuIGRlbGltaXRpbmcga2V5IGlmIHBvc2l0aW9uIGluIHRoZSBwYXJlbnQgaXMgbm90IHRoZSBsYXN0IG9uZS4gKi8KLQkJaWYgKG5fcG9zaXRpb24gIT0gQl9OUl9JVEVNUyhwX3NfcGFyZW50KSkKLQkJCXJldHVybiBCX05fUERFTElNX0tFWShwX3NfcGFyZW50LCBuX3Bvc2l0aW9uKTsKKwkJaWYgKHBvc2l0aW9uICE9IEJfTlJfSVRFTVMocGFyZW50KSkKKwkJCXJldHVybiBCX05fUERFTElNX0tFWShwYXJlbnQsIHBvc2l0aW9uKTsKIAl9CiAJLyogUmV0dXJuIE1BWF9LRVkgaWYgd2UgYXJlIGluIHRoZSByb290IG9mIHRoZSBidWZmZXIgdHJlZS4gKi8KLQlpZiAoUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfY2hrX3BhdGgsIEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQpLT4KLQkgICAgYl9ibG9ja25yID09IFNCX1JPT1RfQkxPQ0socF9zX3NiKSkKKwlpZiAoUEFUSF9PRkZTRVRfUEJVRkZFUihjaGtfcGF0aCwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCktPgorCSAgICBiX2Jsb2NrbnIgPT0gU0JfUk9PVF9CTE9DSyhzYikpCiAJCXJldHVybiAmTUFYX0tFWTsKIAlyZXR1cm4gJk1JTl9LRVk7CiB9CkBAIC0zMzYsNjAgKzMzMiwyOSBAQAogICAgdGhlIHBhdGguICBUaGVzZSBkZWxpbWl0aW5nIGtleXMgYXJlIHN0b3JlZCBhdCBsZWFzdCBvbmUgbGV2ZWwgYWJvdmUgdGhhdCBidWZmZXIgaW4gdGhlIHRyZWUuIElmIHRoZQogICAgYnVmZmVyIGlzIHRoZSBmaXJzdCBvciBsYXN0IG5vZGUgaW4gdGhlIHRyZWUgb3JkZXIgdGhlbiBvbmUgb2YgdGhlIGRlbGltaXRpbmcga2V5cyBtYXkgYmUgYWJzZW50LCBhbmQgaW4KICAgIHRoaXMgY2FzZSBnZXRfbGtleSBhbmQgZ2V0X3JrZXkgcmV0dXJuIGEgc3BlY2lhbCBrZXkgd2hpY2ggaXMgTUlOX0tFWSBvciBNQVhfS0VZLiAqLwotc3RhdGljIGlubGluZSBpbnQga2V5X2luX2J1ZmZlcihzdHJ1Y3QgdHJlZXBhdGggKnBfc19jaGtfcGF0aCwJLyogUGF0aCB3aGljaCBzaG91bGQgYmUgY2hlY2tlZC4gICovCi0JCQkJY29uc3Qgc3RydWN0IGNwdV9rZXkgKnBfc19rZXksCS8qIEtleSB3aGljaCBzaG91bGQgYmUgY2hlY2tlZC4gICAqLwotCQkJCXN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiCS8qIFN1cGVyIGJsb2NrIHBvaW50ZXIuICAgICAgICAgICAqLworc3RhdGljIGlubGluZSBpbnQga2V5X2luX2J1ZmZlcihzdHJ1Y3QgdHJlZXBhdGggKmNoa19wYXRoLAkvKiBQYXRoIHdoaWNoIHNob3VsZCBiZSBjaGVja2VkLiAgKi8KKwkJCQljb25zdCBzdHJ1Y3QgY3B1X2tleSAqa2V5LAkvKiBLZXkgd2hpY2ggc2hvdWxkIGJlIGNoZWNrZWQuICAgKi8KKwkJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiCiAgICAgKQogewogCi0JUkZBTFNFKCFwX3Nfa2V5IHx8IHBfc19jaGtfcGF0aC0+cGF0aF9sZW5ndGggPCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUCi0JICAgICAgIHx8IHBfc19jaGtfcGF0aC0+cGF0aF9sZW5ndGggPiBNQVhfSEVJR0hULAorCVJGQUxTRSgha2V5IHx8IGNoa19wYXRoLT5wYXRoX2xlbmd0aCA8IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQKKwkgICAgICAgfHwgY2hrX3BhdGgtPnBhdGhfbGVuZ3RoID4gTUFYX0hFSUdIVCwKIAkgICAgICAgIlBBUC01MDUwOiBwb2ludGVyIHRvIHRoZSBrZXkoJXApIGlzIE5VTEwgb3IgaW52YWxpZCBwYXRoIGxlbmd0aCglZCkiLAotCSAgICAgICBwX3Nfa2V5LCBwX3NfY2hrX3BhdGgtPnBhdGhfbGVuZ3RoKTsKLQlSRkFMU0UoIVBBVEhfUExBU1RfQlVGRkVSKHBfc19jaGtfcGF0aCktPmJfYmRldiwKKwkgICAgICAga2V5LCBjaGtfcGF0aC0+cGF0aF9sZW5ndGgpOworCVJGQUxTRSghUEFUSF9QTEFTVF9CVUZGRVIoY2hrX3BhdGgpLT5iX2JkZXYsCiAJICAgICAgICJQQVAtNTA2MDogZGV2aWNlIG11c3Qgbm90IGJlIE5PREVWIik7CiAKLQlpZiAoY29tcF9rZXlzKGdldF9sa2V5KHBfc19jaGtfcGF0aCwgcF9zX3NiKSwgcF9zX2tleSkgPT0gMSkKKwlpZiAoY29tcF9rZXlzKGdldF9sa2V5KGNoa19wYXRoLCBzYiksIGtleSkgPT0gMSkKIAkJLyogbGVmdCBkZWxpbWl0aW5nIGtleSBpcyBiaWdnZXIsIHRoYXQgdGhlIGtleSB3ZSBsb29rIGZvciAqLwogCQlyZXR1cm4gMDsKLQkvLyAgaWYgKCBjb21wX2tleXMocF9zX2tleSwgZ2V0X3JrZXkocF9zX2Noa19wYXRoLCBwX3Nfc2IpKSAhPSAtMSApCi0JaWYgKGNvbXBfa2V5cyhnZXRfcmtleShwX3NfY2hrX3BhdGgsIHBfc19zYiksIHBfc19rZXkpICE9IDEpCi0JCS8qIHBfc19rZXkgbXVzdCBiZSBsZXNzIHRoYW4gcmlnaHQgZGVsaW1pdGlpbmcga2V5ICovCisJLyogIGlmICggY29tcF9rZXlzKGtleSwgZ2V0X3JrZXkoY2hrX3BhdGgsIHNiKSkgIT0gLTEgKSAqLworCWlmIChjb21wX2tleXMoZ2V0X3JrZXkoY2hrX3BhdGgsIHNiKSwga2V5KSAhPSAxKQorCQkvKiBrZXkgbXVzdCBiZSBsZXNzIHRoYW4gcmlnaHQgZGVsaW1pdGlpbmcga2V5ICovCiAJCXJldHVybiAwOwogCXJldHVybiAxOwogfQogCi1pbmxpbmUgdm9pZCBkZWNyZW1lbnRfYmNvdW50KHN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2JoKQotewotCWlmIChwX3NfYmgpIHsKLQkJaWYgKGF0b21pY19yZWFkKCYocF9zX2JoLT5iX2NvdW50KSkpIHsKLQkJCXB1dF9iaChwX3NfYmgpOwotCQkJcmV0dXJuOwotCQl9Ci0JCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkgICAgICAgIlBBUC01MDcwOiBkZWNyZW1lbnRfYmNvdW50OiB0cnlpbmcgdG8gZnJlZSBmcmVlIGJ1ZmZlciAlYiIsCi0JCQkgICAgICAgcF9zX2JoKTsKLQl9Ci19Ci0KLS8qIERlY3JlbWVudCBiX2NvdW50IGZpZWxkIG9mIHRoZSBhbGwgYnVmZmVycyBpbiB0aGUgcGF0aC4gKi8KLXZvaWQgZGVjcmVtZW50X2NvdW50ZXJzX2luX3BhdGgoc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgpCi17Ci0JaW50IG5fcGF0aF9vZmZzZXQgPSBwX3Nfc2VhcmNoX3BhdGgtPnBhdGhfbGVuZ3RoOwotCi0JUkZBTFNFKG5fcGF0aF9vZmZzZXQgPCBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQgfHwKLQkgICAgICAgbl9wYXRoX29mZnNldCA+IEVYVEVOREVEX01BWF9IRUlHSFQgLSAxLAotCSAgICAgICAiUEFQLTUwODA6IGludmFsaWQgcGF0aCBvZmZzZXQgb2YgJWQiLCBuX3BhdGhfb2Zmc2V0KTsKLQotCXdoaWxlIChuX3BhdGhfb2Zmc2V0ID4gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSB7Ci0JCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0KLQkJYmggPSBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19zZWFyY2hfcGF0aCwgbl9wYXRoX29mZnNldC0tKTsKLQkJZGVjcmVtZW50X2Jjb3VudChiaCk7Ci0JfQotCXBfc19zZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGggPSBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQ7Ci19Ci0KIGludCByZWlzZXJmc19jaGVja19wYXRoKHN0cnVjdCB0cmVlcGF0aCAqcCkKIHsKIAlSRkFMU0UocC0+cGF0aF9sZW5ndGggIT0gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VULApAQCAtMzk3LDQwICszNjIsMzggQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogUmVsZWFzZSBhbGwgYnVmZmVycyBpbiB0aGUgcGF0aC4gUmVzdG9yZSBkaXJ0eSBiaXRzIGNsZWFuCi0qKiB3aGVuIHByZXBhcmluZyB0aGUgYnVmZmVyIGZvciB0aGUgbG9nCi0qKgotKiogb25seSBjYWxsZWQgZnJvbSBmaXhfbm9kZXMoKQotKi8KLXZvaWQgcGF0aHJlbHNlX2FuZF9yZXN0b3JlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgpCisvKiBEcm9wIHRoZSByZWZlcmVuY2UgdG8gZWFjaCBidWZmZXIgaW4gYSBwYXRoIGFuZCByZXN0b3JlCisgKiBkaXJ0eSBiaXRzIGNsZWFuIHdoZW4gcHJlcGFyaW5nIHRoZSBidWZmZXIgZm9yIHRoZSBsb2cuCisgKiBUaGlzIHZlcnNpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gZml4X25vZGVzKCkgKi8KK3ZvaWQgcGF0aHJlbHNlX2FuZF9yZXN0b3JlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkgICBzdHJ1Y3QgdHJlZXBhdGggKnNlYXJjaF9wYXRoKQogewotCWludCBuX3BhdGhfb2Zmc2V0ID0gcF9zX3NlYXJjaF9wYXRoLT5wYXRoX2xlbmd0aDsKKwlpbnQgcGF0aF9vZmZzZXQgPSBzZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGg7CiAKLQlSRkFMU0Uobl9wYXRoX29mZnNldCA8IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCwKKwlSRkFMU0UocGF0aF9vZmZzZXQgPCBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQsCiAJICAgICAgICJjbG0tNDAwMDogaW52YWxpZCBwYXRoIG9mZnNldCIpOwogCi0Jd2hpbGUgKG5fcGF0aF9vZmZzZXQgPiBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQpIHsKLQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIocywKLQkJCQkJCSBQQVRIX09GRlNFVF9QQlVGRkVSCi0JCQkJCQkgKHBfc19zZWFyY2hfcGF0aCwKLQkJCQkJCSAgbl9wYXRoX29mZnNldCkpOwotCQlicmVsc2UoUEFUSF9PRkZTRVRfUEJVRkZFUihwX3Nfc2VhcmNoX3BhdGgsIG5fcGF0aF9vZmZzZXQtLSkpOworCXdoaWxlIChwYXRoX29mZnNldCA+IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCkgeworCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCQliaCA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIoc2VhcmNoX3BhdGgsIHBhdGhfb2Zmc2V0LS0pOworCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihzYiwgYmgpOworCQlicmVsc2UoYmgpOwogCX0KLQlwX3Nfc2VhcmNoX3BhdGgtPnBhdGhfbGVuZ3RoID0gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VUOworCXNlYXJjaF9wYXRoLT5wYXRoX2xlbmd0aCA9IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVDsKIH0KIAotLyogUmVsZWFzZSBhbGwgYnVmZmVycyBpbiB0aGUgcGF0aC4gKi8KLXZvaWQgcGF0aHJlbHNlKHN0cnVjdCB0cmVlcGF0aCAqcF9zX3NlYXJjaF9wYXRoKQorLyogRHJvcCB0aGUgcmVmZXJlbmNlIHRvIGVhY2ggYnVmZmVyIGluIGEgcGF0aCAqLwordm9pZCBwYXRocmVsc2Uoc3RydWN0IHRyZWVwYXRoICpzZWFyY2hfcGF0aCkKIHsKLQlpbnQgbl9wYXRoX29mZnNldCA9IHBfc19zZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGg7CisJaW50IHBhdGhfb2Zmc2V0ID0gc2VhcmNoX3BhdGgtPnBhdGhfbGVuZ3RoOwogCi0JUkZBTFNFKG5fcGF0aF9vZmZzZXQgPCBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQsCisJUkZBTFNFKHBhdGhfb2Zmc2V0IDwgSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VULAogCSAgICAgICAiUEFQLTUwOTA6IGludmFsaWQgcGF0aCBvZmZzZXQiKTsKIAotCXdoaWxlIChuX3BhdGhfb2Zmc2V0ID4gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VUKQotCQlicmVsc2UoUEFUSF9PRkZTRVRfUEJVRkZFUihwX3Nfc2VhcmNoX3BhdGgsIG5fcGF0aF9vZmZzZXQtLSkpOworCXdoaWxlIChwYXRoX29mZnNldCA+IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCkKKwkJYnJlbHNlKFBBVEhfT0ZGU0VUX1BCVUZGRVIoc2VhcmNoX3BhdGgsIHBhdGhfb2Zmc2V0LS0pKTsKIAotCXBfc19zZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGggPSBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQ7CisJc2VhcmNoX3BhdGgtPnBhdGhfbGVuZ3RoID0gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VUOwogfQogCiBzdGF0aWMgaW50IGlzX2xlYWYoY2hhciAqYnVmLCBpbnQgYmxvY2tzaXplLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQpAQCAtNDQ0LDIzICs0MDcsMjQgQEAKIAogCWJsa2ggPSAoc3RydWN0IGJsb2NrX2hlYWQgKilidWY7CiAJaWYgKGJsa2hfbGV2ZWwoYmxraCkgIT0gRElTS19MRUFGX05PREVfTEVWRUwpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJCSAiaXNfbGVhZjogdGhpcyBzaG91bGQgYmUgY2F1Z2h0IGVhcmxpZXIiKTsKKwkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtNTA4MCIsCisJCQkJICJ0aGlzIHNob3VsZCBiZSBjYXVnaHQgZWFybGllciIpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAluciA9IGJsa2hfbnJfaXRlbShibGtoKTsKIAlpZiAobnIgPCAxIHx8IG5yID4gKChibG9ja3NpemUgLSBCTEtIX1NJWkUpIC8gKElIX1NJWkUgKyBNSU5fSVRFTV9MRU4pKSkgewogCQkvKiBpdGVtIG51bWJlciBpcyB0b28gYmlnIG9yIHRvbyBzbWFsbCAqLwotCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJpc19sZWFmOiBucl9pdGVtIHNlZW1zIHdyb25nOiAleiIsIGJoKTsKKwkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtNTA4MSIsCisJCQkJICJucl9pdGVtIHNlZW1zIHdyb25nOiAleiIsIGJoKTsKIAkJcmV0dXJuIDA7CiAJfQogCWloID0gKHN0cnVjdCBpdGVtX2hlYWQgKikoYnVmICsgQkxLSF9TSVpFKSArIG5yIC0gMTsKIAl1c2VkX3NwYWNlID0gQkxLSF9TSVpFICsgSUhfU0laRSAqIG5yICsgKGJsb2Nrc2l6ZSAtIGloX2xvY2F0aW9uKGloKSk7CiAJaWYgKHVzZWRfc3BhY2UgIT0gYmxvY2tzaXplIC0gYmxraF9mcmVlX3NwYWNlKGJsa2gpKSB7CiAJCS8qIGZyZWUgc3BhY2UgZG9lcyBub3QgbWF0Y2ggdG8gY2FsY3VsYXRlZCBhbW91bnQgb2YgdXNlIHNwYWNlICovCi0JCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImlzX2xlYWY6IGZyZWUgc3BhY2Ugc2VlbXMgd3Jvbmc6ICV6IiwKLQkJCQkgYmgpOworCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy01MDgyIiwKKwkJCQkgImZyZWUgc3BhY2Ugc2VlbXMgd3Jvbmc6ICV6IiwgYmgpOwogCQlyZXR1cm4gMDsKIAl9CiAJLy8gRklYTUU6IGl0IGlzX2xlYWYgd2lsbCBoaXQgcGVyZm9ybWFuY2UgdG9vIG11Y2ggLSB3ZSBtYXkgaGF2ZQpAQCAtNDcxLDI5ICs0MzUsMjkgQEAKIAlwcmV2X2xvY2F0aW9uID0gYmxvY2tzaXplOwogCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrLCBpaCsrKSB7CiAJCWlmIChsZV9paF9rX3R5cGUoaWgpID09IFRZUEVfQU5ZKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkJCSAiaXNfbGVhZjogd3JvbmcgaXRlbSB0eXBlIGZvciBpdGVtICVoIiwKKwkJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInJlaXNlcmZzLTUwODMiLAorCQkJCQkgIndyb25nIGl0ZW0gdHlwZSBmb3IgaXRlbSAlaCIsCiAJCQkJCSBpaCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlpZiAoaWhfbG9jYXRpb24oaWgpID49IGJsb2Nrc2l6ZQogCQkgICAgfHwgaWhfbG9jYXRpb24oaWgpIDwgSUhfU0laRSAqIG5yKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkJCSAiaXNfbGVhZjogaXRlbSBsb2NhdGlvbiBzZWVtcyB3cm9uZzogJWgiLAorCQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtNTA4NCIsCisJCQkJCSAiaXRlbSBsb2NhdGlvbiBzZWVtcyB3cm9uZzogJWgiLAogCQkJCQkgaWgpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaWYgKGloX2l0ZW1fbGVuKGloKSA8IDEKIAkJICAgIHx8IGloX2l0ZW1fbGVuKGloKSA+IE1BWF9JVEVNX0xFTihibG9ja3NpemUpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkJCSAiaXNfbGVhZjogaXRlbSBsZW5ndGggc2VlbXMgd3Jvbmc6ICVoIiwKKwkJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInJlaXNlcmZzLTUwODUiLAorCQkJCQkgIml0ZW0gbGVuZ3RoIHNlZW1zIHdyb25nOiAlaCIsCiAJCQkJCSBpaCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlpZiAocHJldl9sb2NhdGlvbiAtIGloX2xvY2F0aW9uKGloKSAhPSBpaF9pdGVtX2xlbihpaCkpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkJICJpc19sZWFmOiBpdGVtIGxvY2F0aW9uIHNlZW1zIHdyb25nIChzZWNvbmQgb25lKTogJWgiLAotCQkJCQkgaWgpOworCQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtNTA4NiIsCisJCQkJCSAiaXRlbSBsb2NhdGlvbiBzZWVtcyB3cm9uZyAiCisJCQkJCSAiKHNlY29uZCBvbmUpOiAlaCIsIGloKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCXByZXZfbG9jYXRpb24gPSBpaF9sb2NhdGlvbihpaCk7CkBAIC01MTQsMjQgKzQ3OCwyMyBAQAogCW5yID0gYmxraF9sZXZlbChibGtoKTsKIAlpZiAobnIgPD0gRElTS19MRUFGX05PREVfTEVWRUwgfHwgbnIgPiBNQVhfSEVJR0hUKSB7CiAJCS8qIHRoaXMgbGV2ZWwgaXMgbm90IHBvc3NpYmxlIGZvciBpbnRlcm5hbCBub2RlcyAqLwotCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkJICJpc19pbnRlcm5hbDogdGhpcyBzaG91bGQgYmUgY2F1Z2h0IGVhcmxpZXIiKTsKKwkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtNTA4NyIsCisJCQkJICJ0aGlzIHNob3VsZCBiZSBjYXVnaHQgZWFybGllciIpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAluciA9IGJsa2hfbnJfaXRlbShibGtoKTsKIAlpZiAobnIgPiAoYmxvY2tzaXplIC0gQkxLSF9TSVpFIC0gRENfU0laRSkgLyAoS0VZX1NJWkUgKyBEQ19TSVpFKSkgewogCQkvKiBmb3IgaW50ZXJuYWwgd2hpY2ggaXMgbm90IHJvb3Qgd2UgbWlnaHQgY2hlY2sgbWluIG51bWJlciBvZiBrZXlzICovCi0JCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkgImlzX2ludGVybmFsOiBudW1iZXIgb2Yga2V5IHNlZW1zIHdyb25nOiAleiIsCi0JCQkJIGJoKTsKKwkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtNTA4OCIsCisJCQkJICJudW1iZXIgb2Yga2V5IHNlZW1zIHdyb25nOiAleiIsIGJoKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJdXNlZF9zcGFjZSA9IEJMS0hfU0laRSArIEtFWV9TSVpFICogbnIgKyBEQ19TSVpFICogKG5yICsgMSk7CiAJaWYgKHVzZWRfc3BhY2UgIT0gYmxvY2tzaXplIC0gYmxraF9mcmVlX3NwYWNlKGJsa2gpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkgImlzX2ludGVybmFsOiBmcmVlIHNwYWNlIHNlZW1zIHdyb25nOiAleiIsIGJoKTsKKwkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtNTA4OSIsCisJCQkJICJmcmVlIHNwYWNlIHNlZW1zIHdyb25nOiAleiIsIGJoKTsKIAkJcmV0dXJuIDA7CiAJfQogCS8vIG9uZSBtYXkgaW1hZ2luZSBtdWNoIG1vcmUgY2hlY2tzCkBAIC01NDMsOCArNTA2LDggQEAKIHN0YXRpYyBpbnQgaXNfdHJlZV9ub2RlKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBsZXZlbCkKIHsKIAlpZiAoQl9MRVZFTChiaCkgIT0gbGV2ZWwpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJCSAiaXNfdHJlZV9ub2RlOiBub2RlIGxldmVsICVkIGRvZXMgbm90IG1hdGNoIHRvIHRoZSBleHBlY3RlZCBvbmUgJWQiLAorCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy01MDkwIiwgIm5vZGUgbGV2ZWwgJWQgZG9lcyAiCisJCQkJICJub3QgbWF0Y2ggdG8gdGhlIGV4cGVjdGVkIG9uZSAlZCIsCiAJCQkJIEJfTEVWRUwoYmgpLCBsZXZlbCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTU4MCwxMCArNTQzLDEwIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEFsZ29yaXRobSAgIFNlYXJjaEJ5S2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogICAgICAgICAgICAgbG9vayBmb3IgaXRlbSBpbiB0aGUgRGlzayBTK1RyZWUgYnkgaXRzIGtleSAgICAgICAgICAgICAgICAqCi0gKiBJbnB1dDogIHBfc19zYiAgIC0gIHN1cGVyIGJsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgcF9zX2tleSAgLSBwb2ludGVyIHRvIHRoZSBrZXkgdG8gc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgKgorICogSW5wdXQ6ICBzYiAgIC0gIHN1cGVyIGJsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgIGtleSAgLSBwb2ludGVyIHRvIHRoZSBrZXkgdG8gc2VhcmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIE91dHB1dDogSVRFTV9GT1VORCwgSVRFTV9OT1RfRk9VTkQgb3IgSU9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICBwX3Nfc2VhcmNoX3BhdGggLSBwYXRoIGZyb20gdGhlIHJvb3QgdG8gdGhlIG5lZWRlZCBsZWFmICAgICAgICAqCisgKiAgICAgICAgIHNlYXJjaF9wYXRoIC0gcGF0aCBmcm9tIHRoZSByb290IHRvIHRoZSBuZWVkZWQgbGVhZiAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogVGhpcyBmdW5jdGlvbiBmaWxscyB1cCB0aGUgcGF0aCBmcm9tIHRoZSByb290IHRvIHRoZSBsZWFmIGFzIGl0CkBAIC02MDAsMjIgKzU2MywyMiBAQAogICAgY29ycmVjdG5lc3Mgb2YgdGhlIHRvcCBvZiB0aGUgcGF0aCBidXQgbmVlZCBub3QgYmUgY2hlY2tlZCBmb3IgdGhlCiAgICBjb3JyZWN0bmVzcyBvZiB0aGUgYm90dG9tIG9mIHRoZSBwYXRoICovCiAvKiBUaGUgZnVuY3Rpb24gaXMgTk9UIFNDSEVEVUxFLVNBRkUhICovCi1pbnQgc2VhcmNoX2J5X2tleShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgY29uc3Qgc3RydWN0IGNwdV9rZXkgKnBfc19rZXksCS8qIEtleSB0byBzZWFyY2guICovCi0JCSAgc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgsLyogVGhpcyBzdHJ1Y3R1cmUgd2FzCitpbnQgc2VhcmNoX2J5X2tleShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqa2V5LAkvKiBLZXkgdG8gc2VhcmNoLiAqLworCQkgIHN0cnVjdCB0cmVlcGF0aCAqc2VhcmNoX3BhdGgsLyogVGhpcyBzdHJ1Y3R1cmUgd2FzCiAJCQkJCQkgICBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkCiAJCQkJCQkgICBieSB0aGUgY2FsbGluZwogCQkJCQkJICAgZnVuY3Rpb24uIEl0IGlzIGZpbGxlZCB1cAogCQkJCQkJICAgYnkgdGhpcyBmdW5jdGlvbi4gICovCi0JCSAgaW50IG5fc3RvcF9sZXZlbAkvKiBIb3cgZmFyIGRvd24gdGhlIHRyZWUgdG8gc2VhcmNoLiBUbworCQkgIGludCBzdG9wX2xldmVsCS8qIEhvdyBmYXIgZG93biB0aGUgdHJlZSB0byBzZWFyY2guIFRvCiAJCQkJCSAgIHN0b3AgYXQgbGVhZiBsZXZlbCAtIHNldCB0bwogCQkJCQkgICBESVNLX0xFQUZfTk9ERV9MRVZFTCAqLwogICAgICkKIHsKLQliX2Jsb2NrbnJfdCBuX2Jsb2NrX251bWJlcjsKKwliX2Jsb2NrbnJfdCBibG9ja19udW1iZXI7CiAJaW50IGV4cGVjdGVkX2xldmVsOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2JoOwotCXN0cnVjdCBwYXRoX2VsZW1lbnQgKnBfc19sYXN0X2VsZW1lbnQ7Ci0JaW50IG5fbm9kZV9sZXZlbCwgbl9yZXR2YWw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKwlzdHJ1Y3QgcGF0aF9lbGVtZW50ICpsYXN0X2VsZW1lbnQ7CisJaW50IG5vZGVfbGV2ZWwsIHJldHZhbDsKIAlpbnQgcmlnaHRfbmVpZ2hib3Jfb2ZfbGVhZl9ub2RlOwogCWludCBmc19nZW47CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWFkYV9iaFtTRUFSQ0hfQllfS0VZX1JFQURBXTsKQEAgLTYyMyw4MCArNTg2LDc5IEBACiAJaW50IHJlYWRhX2NvdW50ID0gMDsKIAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotCWludCBuX3JlcGVhdF9jb3VudGVyID0gMDsKKwlpbnQgcmVwZWF0X2NvdW50ZXIgPSAwOwogI2VuZGlmCiAKLQlQUk9DX0lORk9fSU5DKHBfc19zYiwgc2VhcmNoX2J5X2tleSk7CisJUFJPQ19JTkZPX0lOQyhzYiwgc2VhcmNoX2J5X2tleSk7CiAKIAkvKiBBcyB3ZSBhZGQgZWFjaCBub2RlIHRvIGEgcGF0aCB3ZSBpbmNyZWFzZSBpdHMgY291bnQuICBUaGlzIG1lYW5zIHRoYXQKIAkgICB3ZSBtdXN0IGJlIGNhcmVmdWwgdG8gcmVsZWFzZSBhbGwgbm9kZXMgaW4gYSBwYXRoIGJlZm9yZSB3ZSBlaXRoZXIKIAkgICBkaXNjYXJkIHRoZSBwYXRoIHN0cnVjdCBvciByZS11c2UgdGhlIHBhdGggc3RydWN0LCBhcyB3ZSBkbyBoZXJlLiAqLwogCi0JZGVjcmVtZW50X2NvdW50ZXJzX2luX3BhdGgocF9zX3NlYXJjaF9wYXRoKTsKKwlwYXRocmVsc2Uoc2VhcmNoX3BhdGgpOwogCiAJcmlnaHRfbmVpZ2hib3Jfb2ZfbGVhZl9ub2RlID0gMDsKIAogCS8qIFdpdGggZWFjaCBpdGVyYXRpb24gb2YgdGhpcyBsb29wIHdlIHNlYXJjaCB0aHJvdWdoIHRoZSBpdGVtcyBpbiB0aGUKIAkgICBjdXJyZW50IG5vZGUsIGFuZCBjYWxjdWxhdGUgdGhlIG5leHQgY3VycmVudCBub2RlKG5leHQgcGF0aCBlbGVtZW50KQogCSAgIGZvciB0aGUgbmV4dCBpdGVyYXRpb24gb2YgdGhpcyBsb29wLi4gKi8KLQluX2Jsb2NrX251bWJlciA9IFNCX1JPT1RfQkxPQ0socF9zX3NiKTsKKwlibG9ja19udW1iZXIgPSBTQl9ST09UX0JMT0NLKHNiKTsKIAlleHBlY3RlZF9sZXZlbCA9IC0xOwogCXdoaWxlICgxKSB7CiAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKLQkJaWYgKCEoKytuX3JlcGVhdF9jb3VudGVyICUgNTAwMDApKQotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsICJQQVAtNTEwMDogc2VhcmNoX2J5X2tleTogJXM6IgotCQkJCQkgInRoZXJlIHdlcmUgJWQgaXRlcmF0aW9ucyBvZiB3aGlsZSBsb29wICIKLQkJCQkJICJsb29raW5nIGZvciBrZXkgJUsiLAotCQkJCQkgY3VycmVudC0+Y29tbSwgbl9yZXBlYXRfY291bnRlciwKLQkJCQkJIHBfc19rZXkpOworCQlpZiAoISgrK3JlcGVhdF9jb3VudGVyICUgNTAwMDApKQorCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgIlBBUC01MTAwIiwKKwkJCQkJICIlczogdGhlcmUgd2VyZSAlZCBpdGVyYXRpb25zIG9mICIKKwkJCQkJICJ3aGlsZSBsb29wIGxvb2tpbmcgZm9yIGtleSAlSyIsCisJCQkJCSBjdXJyZW50LT5jb21tLCByZXBlYXRfY291bnRlciwKKwkJCQkJIGtleSk7CiAjZW5kaWYKIAogCQkvKiBwcmVwIHBhdGggdG8gaGF2ZSBhbm90aGVyIGVsZW1lbnQgYWRkZWQgdG8gaXQuICovCi0JCXBfc19sYXN0X2VsZW1lbnQgPQotCQkgICAgUEFUSF9PRkZTRVRfUEVMRU1FTlQocF9zX3NlYXJjaF9wYXRoLAotCQkJCQkgKytwX3Nfc2VhcmNoX3BhdGgtPnBhdGhfbGVuZ3RoKTsKLQkJZnNfZ2VuID0gZ2V0X2dlbmVyYXRpb24ocF9zX3NiKTsKKwkJbGFzdF9lbGVtZW50ID0KKwkJICAgIFBBVEhfT0ZGU0VUX1BFTEVNRU5UKHNlYXJjaF9wYXRoLAorCQkJCQkgKytzZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGgpOworCQlmc19nZW4gPSBnZXRfZ2VuZXJhdGlvbihzYik7CiAKIAkJLyogUmVhZCB0aGUgbmV4dCB0cmVlIG5vZGUsIGFuZCBzZXQgdGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgcGF0aCB0bwogCQkgICBoYXZlIGEgcG9pbnRlciB0byBpdC4gKi8KLQkJaWYgKChwX3NfYmggPSBwX3NfbGFzdF9lbGVtZW50LT5wZV9idWZmZXIgPQotCQkgICAgIHNiX2dldGJsayhwX3Nfc2IsIG5fYmxvY2tfbnVtYmVyKSkpIHsKLQkJCWlmICghYnVmZmVyX3VwdG9kYXRlKHBfc19iaCkgJiYgcmVhZGFfY291bnQgPiAxKSB7Ci0JCQkJc2VhcmNoX2J5X2tleV9yZWFkYShwX3Nfc2IsIHJlYWRhX2JoLAorCQlpZiAoKGJoID0gbGFzdF9lbGVtZW50LT5wZV9idWZmZXIgPQorCQkgICAgIHNiX2dldGJsayhzYiwgYmxvY2tfbnVtYmVyKSkpIHsKKwkJCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSAmJiByZWFkYV9jb3VudCA+IDEpCisJCQkJc2VhcmNoX2J5X2tleV9yZWFkYShzYiwgcmVhZGFfYmgsCiAJCQkJCQkgICAgcmVhZGFfYmxvY2tzLCByZWFkYV9jb3VudCk7Ci0JCQl9Ci0JCQlsbF9yd19ibG9jayhSRUFELCAxLCAmcF9zX2JoKTsKLQkJCXdhaXRfb25fYnVmZmVyKHBfc19iaCk7Ci0JCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShwX3NfYmgpKQorCQkJbGxfcndfYmxvY2soUkVBRCwgMSwgJmJoKTsKKwkJCXdhaXRfb25fYnVmZmVyKGJoKTsKKwkJCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkKIAkJCQlnb3RvIGlvX2Vycm9yOwogCQl9IGVsc2UgewogCQkgICAgICBpb19lcnJvcjoKLQkJCXBfc19zZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGgtLTsKLQkJCXBhdGhyZWxzZShwX3Nfc2VhcmNoX3BhdGgpOworCQkJc2VhcmNoX3BhdGgtPnBhdGhfbGVuZ3RoLS07CisJCQlwYXRocmVsc2Uoc2VhcmNoX3BhdGgpOwogCQkJcmV0dXJuIElPX0VSUk9SOwogCQl9CiAJCXJlYWRhX2NvdW50ID0gMDsKIAkJaWYgKGV4cGVjdGVkX2xldmVsID09IC0xKQotCQkJZXhwZWN0ZWRfbGV2ZWwgPSBTQl9UUkVFX0hFSUdIVChwX3Nfc2IpOworCQkJZXhwZWN0ZWRfbGV2ZWwgPSBTQl9UUkVFX0hFSUdIVChzYik7CiAJCWV4cGVjdGVkX2xldmVsLS07CiAKIAkJLyogSXQgaXMgcG9zc2libGUgdGhhdCBzY2hlZHVsZSBvY2N1cnJlZC4gV2UgbXVzdCBjaGVjayB3aGV0aGVyIHRoZSBrZXkKIAkJICAgdG8gc2VhcmNoIGlzIHN0aWxsIGluIHRoZSB0cmVlIHJvb3RlZCBmcm9tIHRoZSBjdXJyZW50IGJ1ZmZlci4gSWYKIAkJICAgbm90IHRoZW4gcmVwZWF0IHNlYXJjaCBmcm9tIHRoZSByb290LiAqLwotCQlpZiAoZnNfY2hhbmdlZChmc19nZW4sIHBfc19zYikgJiYKLQkJICAgICghQl9JU19JTl9UUkVFKHBfc19iaCkgfHwKLQkJICAgICBCX0xFVkVMKHBfc19iaCkgIT0gZXhwZWN0ZWRfbGV2ZWwgfHwKLQkJICAgICAha2V5X2luX2J1ZmZlcihwX3Nfc2VhcmNoX3BhdGgsIHBfc19rZXksIHBfc19zYikpKSB7Ci0JCQlQUk9DX0lORk9fSU5DKHBfc19zYiwgc2VhcmNoX2J5X2tleV9mc19jaGFuZ2VkKTsKLQkJCVBST0NfSU5GT19JTkMocF9zX3NiLCBzZWFyY2hfYnlfa2V5X3Jlc3RhcnRlZCk7Ci0JCQlQUk9DX0lORk9fSU5DKHBfc19zYiwKKwkJaWYgKGZzX2NoYW5nZWQoZnNfZ2VuLCBzYikgJiYKKwkJICAgICghQl9JU19JTl9UUkVFKGJoKSB8fAorCQkgICAgIEJfTEVWRUwoYmgpICE9IGV4cGVjdGVkX2xldmVsIHx8CisJCSAgICAgIWtleV9pbl9idWZmZXIoc2VhcmNoX3BhdGgsIGtleSwgc2IpKSkgeworCQkJUFJPQ19JTkZPX0lOQyhzYiwgc2VhcmNoX2J5X2tleV9mc19jaGFuZ2VkKTsKKwkJCVBST0NfSU5GT19JTkMoc2IsIHNlYXJjaF9ieV9rZXlfcmVzdGFydGVkKTsKKwkJCVBST0NfSU5GT19JTkMoc2IsCiAJCQkJICAgICAgc2JrX3Jlc3RhcnRlZFtleHBlY3RlZF9sZXZlbCAtIDFdKTsKLQkJCWRlY3JlbWVudF9jb3VudGVyc19pbl9wYXRoKHBfc19zZWFyY2hfcGF0aCk7CisJCQlwYXRocmVsc2Uoc2VhcmNoX3BhdGgpOwogCiAJCQkvKiBHZXQgdGhlIHJvb3QgYmxvY2sgbnVtYmVyIHNvIHRoYXQgd2UgY2FuIHJlcGVhdCB0aGUgc2VhcmNoCiAJCQkgICBzdGFydGluZyBmcm9tIHRoZSByb290LiAqLwotCQkJbl9ibG9ja19udW1iZXIgPSBTQl9ST09UX0JMT0NLKHBfc19zYik7CisJCQlibG9ja19udW1iZXIgPSBTQl9ST09UX0JMT0NLKHNiKTsKIAkJCWV4cGVjdGVkX2xldmVsID0gLTE7CiAJCQlyaWdodF9uZWlnaGJvcl9vZl9sZWFmX25vZGUgPSAwOwogCkBAIC03MDQsNTMgKzY2Niw1MyBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQkvKiBvbmx5IGNoZWNrIHRoYXQgdGhlIGtleSBpcyBpbiB0aGUgYnVmZmVyIGlmIHBfc19rZXkgaXMgbm90CisJCS8qIG9ubHkgY2hlY2sgdGhhdCB0aGUga2V5IGlzIGluIHRoZSBidWZmZXIgaWYga2V5IGlzIG5vdAogCQkgICBlcXVhbCB0byB0aGUgTUFYX0tFWS4gTGF0dGVyIGNhc2UgaXMgb25seSBwb3NzaWJsZSBpbgogCQkgICAiZmluaXNoX3VuZmluaXNoZWQoKSIgcHJvY2Vzc2luZyBkdXJpbmcgbW91bnQuICovCi0JCVJGQUxTRShjb21wX2tleXMoJk1BWF9LRVksIHBfc19rZXkpICYmCi0JCSAgICAgICAha2V5X2luX2J1ZmZlcihwX3Nfc2VhcmNoX3BhdGgsIHBfc19rZXksIHBfc19zYiksCisJCVJGQUxTRShjb21wX2tleXMoJk1BWF9LRVksIGtleSkgJiYKKwkJICAgICAgICFrZXlfaW5fYnVmZmVyKHNlYXJjaF9wYXRoLCBrZXksIHNiKSwKIAkJICAgICAgICJQQVAtNTEzMDoga2V5IGlzIG5vdCBpbiB0aGUgYnVmZmVyIik7CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCiAJCWlmIChjdXJfdGIpIHsKIAkJCXByaW50X2N1cl90YigiNTE0MCIpOwotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCSAgICAgICAiUEFQLTUxNDA6IHNlYXJjaF9ieV9rZXk6IHNjaGVkdWxlIG9jY3VycmVkIGluIGRvX2JhbGFuY2UhIik7CisJCQlyZWlzZXJmc19wYW5pYyhzYiwgIlBBUC01MTQwIiwKKwkJCQkgICAgICAgInNjaGVkdWxlIG9jY3VycmVkIGluIGRvX2JhbGFuY2UhIik7CiAJCX0KICNlbmRpZgogCiAJCS8vIG1ha2Ugc3VyZSwgdGhhdCB0aGUgbm9kZSBjb250ZW50cyBsb29rIGxpa2UgYSBub2RlIG9mCiAJCS8vIGNlcnRhaW4gbGV2ZWwKLQkJaWYgKCFpc190cmVlX25vZGUocF9zX2JoLCBleHBlY3RlZF9sZXZlbCkpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLCAidnMtNTE1MDogc2VhcmNoX2J5X2tleTogIgotCQkJCQkgImludmFsaWQgZm9ybWF0IGZvdW5kIGluIGJsb2NrICVsZC4gRnNjaz8iLAotCQkJCQkgcF9zX2JoLT5iX2Jsb2NrbnIpOwotCQkJcGF0aHJlbHNlKHBfc19zZWFyY2hfcGF0aCk7CisJCWlmICghaXNfdHJlZV9ub2RlKGJoLCBleHBlY3RlZF9sZXZlbCkpIHsKKwkJCXJlaXNlcmZzX2Vycm9yKHNiLCAidnMtNTE1MCIsCisJCQkJICAgICAgICJpbnZhbGlkIGZvcm1hdCBmb3VuZCBpbiBibG9jayAlbGQuICIKKwkJCQkgICAgICAgIkZzY2s/IiwgYmgtPmJfYmxvY2tucik7CisJCQlwYXRocmVsc2Uoc2VhcmNoX3BhdGgpOwogCQkJcmV0dXJuIElPX0VSUk9SOwogCQl9CiAKIAkJLyogb2ssIHdlIGhhdmUgYWNxdWlyZWQgbmV4dCBmb3JtYXR0ZWQgbm9kZSBpbiB0aGUgdHJlZSAqLwotCQluX25vZGVfbGV2ZWwgPSBCX0xFVkVMKHBfc19iaCk7CisJCW5vZGVfbGV2ZWwgPSBCX0xFVkVMKGJoKTsKIAotCQlQUk9DX0lORk9fQkhfU1RBVChwX3Nfc2IsIHBfc19iaCwgbl9ub2RlX2xldmVsIC0gMSk7CisJCVBST0NfSU5GT19CSF9TVEFUKHNiLCBiaCwgbm9kZV9sZXZlbCAtIDEpOwogCi0JCVJGQUxTRShuX25vZGVfbGV2ZWwgPCBuX3N0b3BfbGV2ZWwsCisJCVJGQUxTRShub2RlX2xldmVsIDwgc3RvcF9sZXZlbCwKIAkJICAgICAgICJ2cy01MTUyOiB0cmVlIGxldmVsICglZCkgaXMgbGVzcyB0aGFuIHN0b3AgbGV2ZWwgKCVkKSIsCi0JCSAgICAgICBuX25vZGVfbGV2ZWwsIG5fc3RvcF9sZXZlbCk7CisJCSAgICAgICBub2RlX2xldmVsLCBzdG9wX2xldmVsKTsKIAotCQluX3JldHZhbCA9IGJpbl9zZWFyY2gocF9zX2tleSwgQl9OX1BJVEVNX0hFQUQocF9zX2JoLCAwKSwKLQkJCQkgICAgICBCX05SX0lURU1TKHBfc19iaCksCi0JCQkJICAgICAgKG5fbm9kZV9sZXZlbCA9PQorCQlyZXR2YWwgPSBiaW5fc2VhcmNoKGtleSwgQl9OX1BJVEVNX0hFQUQoYmgsIDApLAorCQkJCSAgICAgIEJfTlJfSVRFTVMoYmgpLAorCQkJCSAgICAgIChub2RlX2xldmVsID09CiAJCQkJICAgICAgIERJU0tfTEVBRl9OT0RFX0xFVkVMKSA/IElIX1NJWkUgOgogCQkJCSAgICAgIEtFWV9TSVpFLAotCQkJCSAgICAgICYocF9zX2xhc3RfZWxlbWVudC0+cGVfcG9zaXRpb24pKTsKLQkJaWYgKG5fbm9kZV9sZXZlbCA9PSBuX3N0b3BfbGV2ZWwpIHsKLQkJCXJldHVybiBuX3JldHZhbDsKKwkJCQkgICAgICAmKGxhc3RfZWxlbWVudC0+cGVfcG9zaXRpb24pKTsKKwkJaWYgKG5vZGVfbGV2ZWwgPT0gc3RvcF9sZXZlbCkgeworCQkJcmV0dXJuIHJldHZhbDsKIAkJfQogCiAJCS8qIHdlIGFyZSBub3QgaW4gdGhlIHN0b3AgbGV2ZWwgKi8KLQkJaWYgKG5fcmV0dmFsID09IElURU1fRk9VTkQpCisJCWlmIChyZXR2YWwgPT0gSVRFTV9GT1VORCkKIAkJCS8qIGl0ZW0gaGFzIGJlZW4gZm91bmQsIHNvIHdlIGNob29zZSB0aGUgcG9pbnRlciB3aGljaCBpcyB0byB0aGUgcmlnaHQgb2YgdGhlIGZvdW5kIG9uZSAqLwotCQkJcF9zX2xhc3RfZWxlbWVudC0+cGVfcG9zaXRpb24rKzsKKwkJCWxhc3RfZWxlbWVudC0+cGVfcG9zaXRpb24rKzsKIAogCQkvKiBpZiBpdGVtIHdhcyBub3QgZm91bmQgd2UgY2hvb3NlIHRoZSBwb3NpdGlvbiB3aGljaCBpcyB0bwogCQkgICB0aGUgbGVmdCBvZiB0aGUgZm91bmQgaXRlbS4gVGhpcyByZXF1aXJlcyBubyBjb2RlLApAQCAtNzU5LDI0ICs3MjEsMjQgQEAKIAkJLyogU28gd2UgaGF2ZSBjaG9zZW4gYSBwb3NpdGlvbiBpbiB0aGUgY3VycmVudCBub2RlIHdoaWNoIGlzCiAJCSAgIGFuIGludGVybmFsIG5vZGUuICBOb3cgd2UgY2FsY3VsYXRlIGNoaWxkIGJsb2NrIG51bWJlciBieQogCQkgICBwb3NpdGlvbiBpbiB0aGUgbm9kZS4gKi8KLQkJbl9ibG9ja19udW1iZXIgPQotCQkgICAgQl9OX0NISUxEX05VTShwX3NfYmgsIHBfc19sYXN0X2VsZW1lbnQtPnBlX3Bvc2l0aW9uKTsKKwkJYmxvY2tfbnVtYmVyID0KKwkJICAgIEJfTl9DSElMRF9OVU0oYmgsIGxhc3RfZWxlbWVudC0+cGVfcG9zaXRpb24pOwogCiAJCS8qIGlmIHdlIGFyZSBnb2luZyB0byByZWFkIGxlYWYgbm9kZXMsIHRyeSBmb3IgcmVhZCBhaGVhZCBhcyB3ZWxsICovCi0JCWlmICgocF9zX3NlYXJjaF9wYXRoLT5yZWFkYSAmIFBBVEhfUkVBREEpICYmCi0JCSAgICBuX25vZGVfbGV2ZWwgPT0gRElTS19MRUFGX05PREVfTEVWRUwgKyAxKSB7Ci0JCQlpbnQgcG9zID0gcF9zX2xhc3RfZWxlbWVudC0+cGVfcG9zaXRpb247Ci0JCQlpbnQgbGltaXQgPSBCX05SX0lURU1TKHBfc19iaCk7CisJCWlmICgoc2VhcmNoX3BhdGgtPnJlYWRhICYgUEFUSF9SRUFEQSkgJiYKKwkJICAgIG5vZGVfbGV2ZWwgPT0gRElTS19MRUFGX05PREVfTEVWRUwgKyAxKSB7CisJCQlpbnQgcG9zID0gbGFzdF9lbGVtZW50LT5wZV9wb3NpdGlvbjsKKwkJCWludCBsaW1pdCA9IEJfTlJfSVRFTVMoYmgpOwogCQkJc3RydWN0IHJlaXNlcmZzX2tleSAqbGVfa2V5OwogCi0JCQlpZiAocF9zX3NlYXJjaF9wYXRoLT5yZWFkYSAmIFBBVEhfUkVBREFfQkFDSykKKwkJCWlmIChzZWFyY2hfcGF0aC0+cmVhZGEgJiBQQVRIX1JFQURBX0JBQ0spCiAJCQkJbGltaXQgPSAwOwogCQkJd2hpbGUgKHJlYWRhX2NvdW50IDwgU0VBUkNIX0JZX0tFWV9SRUFEQSkgewogCQkJCWlmIChwb3MgPT0gbGltaXQpCiAJCQkJCWJyZWFrOwogCQkJCXJlYWRhX2Jsb2Nrc1tyZWFkYV9jb3VudCsrXSA9Ci0JCQkJICAgIEJfTl9DSElMRF9OVU0ocF9zX2JoLCBwb3MpOwotCQkJCWlmIChwX3Nfc2VhcmNoX3BhdGgtPnJlYWRhICYgUEFUSF9SRUFEQV9CQUNLKQorCQkJCSAgICBCX05fQ0hJTERfTlVNKGJoLCBwb3MpOworCQkJCWlmIChzZWFyY2hfcGF0aC0+cmVhZGEgJiBQQVRIX1JFQURBX0JBQ0spCiAJCQkJCXBvcy0tOwogCQkJCWVsc2UKIAkJCQkJcG9zKys7CkBAIC03ODQsOSArNzQ2LDkgQEAKIAkJCQkvKgogCQkJCSAqIGNoZWNrIHRvIG1ha2Ugc3VyZSB3ZSdyZSBpbiB0aGUgc2FtZSBvYmplY3QKIAkJCQkgKi8KLQkJCQlsZV9rZXkgPSBCX05fUERFTElNX0tFWShwX3NfYmgsIHBvcyk7CisJCQkJbGVfa2V5ID0gQl9OX1BERUxJTV9LRVkoYmgsIHBvcyk7CiAJCQkJaWYgKGxlMzJfdG9fY3B1KGxlX2tleS0+a19vYmplY3RpZCkgIT0KLQkJCQkgICAgcF9zX2tleS0+b25fZGlza19rZXkua19vYmplY3RpZCkgeworCQkJCSAgICBrZXktPm9uX2Rpc2tfa2V5Lmtfb2JqZWN0aWQpIHsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQpAQCAtNzk1LDExICs3NTcsMTEgQEAKIH0KIAogLyogRm9ybSB0aGUgcGF0aCB0byBhbiBpdGVtIGFuZCBwb3NpdGlvbiBpbiB0aGlzIGl0ZW0gd2hpY2ggY29udGFpbnMKLSAgIGZpbGUgYnl0ZSBkZWZpbmVkIGJ5IHBfc19rZXkuIElmIHRoZXJlIGlzIG5vIHN1Y2ggaXRlbQorICAgZmlsZSBieXRlIGRlZmluZWQgYnkga2V5LiBJZiB0aGVyZSBpcyBubyBzdWNoIGl0ZW0KICAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGtleSwgd2UgcG9pbnQgdGhlIHBhdGggdG8gdGhlIGl0ZW0gd2l0aAotICAgbWF4aW1hbCBrZXkgbGVzcyB0aGFuIHBfc19rZXksIGFuZCAqcF9uX3Bvc19pbl9pdGVtIGlzIHNldCB0byBvbmUKKyAgIG1heGltYWwga2V5IGxlc3MgdGhhbiBrZXksIGFuZCAqcG9zX2luX2l0ZW0gaXMgc2V0IHRvIG9uZQogICAgcGFzdCB0aGUgbGFzdCBlbnRyeS9ieXRlIGluIHRoZSBpdGVtLiAgSWYgc2VhcmNoaW5nIGZvciBlbnRyeSBpbiBhCi0gICBkaXJlY3RvcnkgaXRlbSwgYW5kIGl0IGlzIG5vdCBmb3VuZCwgKnBfbl9wb3NfaW5faXRlbSBpcyBzZXQgdG8gb25lCisgICBkaXJlY3RvcnkgaXRlbSwgYW5kIGl0IGlzIG5vdCBmb3VuZCwgKnBvc19pbl9pdGVtIGlzIHNldCB0byBvbmUKICAgIGVudHJ5IG1vcmUgdGhhbiB0aGUgZW50cnkgd2l0aCBtYXhpbWFsIGtleSB3aGljaCBpcyBsZXNzIHRoYW4gdGhlCiAgICBzb3VnaHQga2V5LgogCkBAIC04MTAsNDggKzc3Miw0OCBAQAogICAgdW5pdHMgb2YgZGlyZWN0b3J5IGVudHJpZXMuICAqLwogCiAvKiBUaGUgZnVuY3Rpb24gaXMgTk9UIFNDSEVEVUxFLVNBRkUhICovCi1pbnQgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCS8qIFBvaW50ZXIgdG8gdGhlIHN1cGVyIGJsb2NrLiAgICAgICAgICAqLworaW50IHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCS8qIFBvaW50ZXIgdG8gdGhlIHN1cGVyIGJsb2NrLiAgICAgICAgICAqLwogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICpwX2NwdV9rZXksCS8qIEtleSB0byBzZWFyY2ggKGNwdSB2YXJpYWJsZSkgICAgICAgICAqLwotCQkJICAgICAgIHN0cnVjdCB0cmVlcGF0aCAqcF9zX3NlYXJjaF9wYXRoCS8qIEZpbGxlZCB1cCBieSB0aGlzIGZ1bmN0aW9uLiAgICAgICAgICAqLworCQkJICAgICAgIHN0cnVjdCB0cmVlcGF0aCAqc2VhcmNoX3BhdGgJLyogRmlsbGVkIHVwIGJ5IHRoaXMgZnVuY3Rpb24uICAgICAgICAgICovCiAgICAgKQogewogCXN0cnVjdCBpdGVtX2hlYWQgKnBfbGVfaWg7CS8qIHBvaW50ZXIgdG8gb24tZGlzayBzdHJ1Y3R1cmUgKi8KLQlpbnQgbl9ibGtfc2l6ZTsKKwlpbnQgYmxrX3NpemU7CiAJbG9mZl90IGl0ZW1fb2Zmc2V0LCBvZmZzZXQ7CiAJc3RydWN0IHJlaXNlcmZzX2Rpcl9lbnRyeSBkZTsKIAlpbnQgcmV0dmFsOwogCiAJLyogSWYgc2VhcmNoaW5nIGZvciBkaXJlY3RvcnkgZW50cnkuICovCiAJaWYgKGlzX2RpcmVudHJ5X2NwdV9rZXkocF9jcHVfa2V5KSkKLQkJcmV0dXJuIHNlYXJjaF9ieV9lbnRyeV9rZXkocF9zX3NiLCBwX2NwdV9rZXksIHBfc19zZWFyY2hfcGF0aCwKKwkJcmV0dXJuIHNlYXJjaF9ieV9lbnRyeV9rZXkoc2IsIHBfY3B1X2tleSwgc2VhcmNoX3BhdGgsCiAJCQkJCSAgICZkZSk7CiAKIAkvKiBJZiBub3Qgc2VhcmNoaW5nIGZvciBkaXJlY3RvcnkgZW50cnkuICovCiAKIAkvKiBJZiBpdGVtIGlzIGZvdW5kLiAqLwotCXJldHZhbCA9IHNlYXJjaF9pdGVtKHBfc19zYiwgcF9jcHVfa2V5LCBwX3Nfc2VhcmNoX3BhdGgpOworCXJldHZhbCA9IHNlYXJjaF9pdGVtKHNiLCBwX2NwdV9rZXksIHNlYXJjaF9wYXRoKTsKIAlpZiAocmV0dmFsID09IElPX0VSUk9SKQogCQlyZXR1cm4gcmV0dmFsOwogCWlmIChyZXR2YWwgPT0gSVRFTV9GT1VORCkgewogCiAJCVJGQUxTRSghaWhfaXRlbV9sZW4KIAkJICAgICAgIChCX05fUElURU1fSEVBRAotCQkJKFBBVEhfUExBU1RfQlVGRkVSKHBfc19zZWFyY2hfcGF0aCksCi0JCQkgUEFUSF9MQVNUX1BPU0lUSU9OKHBfc19zZWFyY2hfcGF0aCkpKSwKKwkJCShQQVRIX1BMQVNUX0JVRkZFUihzZWFyY2hfcGF0aCksCisJCQkgUEFUSF9MQVNUX1BPU0lUSU9OKHNlYXJjaF9wYXRoKSkpLAogCQkgICAgICAgIlBBUC01MTY1OiBpdGVtIGxlbmd0aCBlcXVhbHMgemVybyIpOwogCi0JCXBvc19pbl9pdGVtKHBfc19zZWFyY2hfcGF0aCkgPSAwOworCQlwb3NfaW5faXRlbShzZWFyY2hfcGF0aCkgPSAwOwogCQlyZXR1cm4gUE9TSVRJT05fRk9VTkQ7CiAJfQogCi0JUkZBTFNFKCFQQVRIX0xBU1RfUE9TSVRJT04ocF9zX3NlYXJjaF9wYXRoKSwKKwlSRkFMU0UoIVBBVEhfTEFTVF9QT1NJVElPTihzZWFyY2hfcGF0aCksCiAJICAgICAgICJQQVAtNTE3MDogcG9zaXRpb24gZXF1YWxzIHplcm8iKTsKIAogCS8qIEl0ZW0gaXMgbm90IGZvdW5kLiBTZXQgcGF0aCB0byB0aGUgcHJldmlvdXMgaXRlbS4gKi8KIAlwX2xlX2loID0KLQkgICAgQl9OX1BJVEVNX0hFQUQoUEFUSF9QTEFTVF9CVUZGRVIocF9zX3NlYXJjaF9wYXRoKSwKLQkJCSAgIC0tUEFUSF9MQVNUX1BPU0lUSU9OKHBfc19zZWFyY2hfcGF0aCkpOwotCW5fYmxrX3NpemUgPSBwX3Nfc2ItPnNfYmxvY2tzaXplOworCSAgICBCX05fUElURU1fSEVBRChQQVRIX1BMQVNUX0JVRkZFUihzZWFyY2hfcGF0aCksCisJCQkgICAtLVBBVEhfTEFTVF9QT1NJVElPTihzZWFyY2hfcGF0aCkpOworCWJsa19zaXplID0gc2ItPnNfYmxvY2tzaXplOwogCiAJaWYgKGNvbXBfc2hvcnRfa2V5cygmKHBfbGVfaWgtPmloX2tleSksIHBfY3B1X2tleSkpIHsKIAkJcmV0dXJuIEZJTEVfTk9UX0ZPVU5EOwpAQCAtODYzLDEwICs4MjUsMTAgQEAKIAogCS8qIE5lZWRlZCBieXRlIGlzIGNvbnRhaW5lZCBpbiB0aGUgaXRlbSBwb2ludGVkIHRvIGJ5IHRoZSBwYXRoLiAqLwogCWlmIChpdGVtX29mZnNldCA8PSBvZmZzZXQgJiYKLQkgICAgaXRlbV9vZmZzZXQgKyBvcF9ieXRlc19udW1iZXIocF9sZV9paCwgbl9ibGtfc2l6ZSkgPiBvZmZzZXQpIHsKLQkJcG9zX2luX2l0ZW0ocF9zX3NlYXJjaF9wYXRoKSA9IG9mZnNldCAtIGl0ZW1fb2Zmc2V0OworCSAgICBpdGVtX29mZnNldCArIG9wX2J5dGVzX251bWJlcihwX2xlX2loLCBibGtfc2l6ZSkgPiBvZmZzZXQpIHsKKwkJcG9zX2luX2l0ZW0oc2VhcmNoX3BhdGgpID0gb2Zmc2V0IC0gaXRlbV9vZmZzZXQ7CiAJCWlmIChpc19pbmRpcmVjdF9sZV9paChwX2xlX2loKSkgewotCQkJcG9zX2luX2l0ZW0ocF9zX3NlYXJjaF9wYXRoKSAvPSBuX2Jsa19zaXplOworCQkJcG9zX2luX2l0ZW0oc2VhcmNoX3BhdGgpIC89IGJsa19zaXplOwogCQl9CiAJCXJldHVybiBQT1NJVElPTl9GT1VORDsKIAl9CkBAIC04NzQsMzAgKzgzNiwzMCBAQAogCS8qIE5lZWRlZCBieXRlIGlzIG5vdCBjb250YWluZWQgaW4gdGhlIGl0ZW0gcG9pbnRlZCB0byBieSB0aGUKIAkgICBwYXRoLiBTZXQgcG9zX2luX2l0ZW0gb3V0IG9mIHRoZSBpdGVtLiAqLwogCWlmIChpc19pbmRpcmVjdF9sZV9paChwX2xlX2loKSkKLQkJcG9zX2luX2l0ZW0ocF9zX3NlYXJjaF9wYXRoKSA9CisJCXBvc19pbl9pdGVtKHNlYXJjaF9wYXRoKSA9CiAJCSAgICBpaF9pdGVtX2xlbihwX2xlX2loKSAvIFVORk1fUF9TSVpFOwogCWVsc2UKLQkJcG9zX2luX2l0ZW0ocF9zX3NlYXJjaF9wYXRoKSA9IGloX2l0ZW1fbGVuKHBfbGVfaWgpOworCQlwb3NfaW5faXRlbShzZWFyY2hfcGF0aCkgPSBpaF9pdGVtX2xlbihwX2xlX2loKTsKIAogCXJldHVybiBQT1NJVElPTl9OT1RfRk9VTkQ7CiB9CiAKIC8qIENvbXBhcmUgZ2l2ZW4gaXRlbSBhbmQgaXRlbSBwb2ludGVkIHRvIGJ5IHRoZSBwYXRoLiAqLwotaW50IGNvbXBfaXRlbXMoY29uc3Qgc3RydWN0IGl0ZW1faGVhZCAqc3RvcmVkX2loLCBjb25zdCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoKQoraW50IGNvbXBfaXRlbXMoY29uc3Qgc3RydWN0IGl0ZW1faGVhZCAqc3RvcmVkX2loLCBjb25zdCBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgpCiB7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfYmg7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IFBBVEhfUExBU1RfQlVGRkVSKHBhdGgpOwogCXN0cnVjdCBpdGVtX2hlYWQgKmloOwogCiAJLyogTGFzdCBidWZmZXIgYXQgdGhlIHBhdGggaXMgbm90IGluIHRoZSB0cmVlLiAqLwotCWlmICghQl9JU19JTl9UUkVFKHBfc19iaCA9IFBBVEhfUExBU1RfQlVGRkVSKHBfc19wYXRoKSkpCisJaWYgKCFCX0lTX0lOX1RSRUUoYmgpKQogCQlyZXR1cm4gMTsKIAogCS8qIExhc3QgcGF0aCBwb3NpdGlvbiBpcyBpbnZhbGlkLiAqLwotCWlmIChQQVRIX0xBU1RfUE9TSVRJT04ocF9zX3BhdGgpID49IEJfTlJfSVRFTVMocF9zX2JoKSkKKwlpZiAoUEFUSF9MQVNUX1BPU0lUSU9OKHBhdGgpID49IEJfTlJfSVRFTVMoYmgpKQogCQlyZXR1cm4gMTsKIAogCS8qIHdlIG5lZWQgb25seSB0byBrbm93LCB3aGV0aGVyIGl0IGlzIHRoZSBzYW1lIGl0ZW0gKi8KLQlpaCA9IGdldF9paChwX3NfcGF0aCk7CisJaWggPSBnZXRfaWgocGF0aCk7CiAJcmV0dXJuIG1lbWNtcChzdG9yZWRfaWgsIGloLCBJSF9TSVpFKTsKIH0KIApAQCAtOTI0LDkgKzg4Niw5IEBACiAJfQogCS8vIG5ldyBmaWxlIGdldHMgdHJ1bmNhdGVkCiAJaWYgKGdldF9pbm9kZV9pdGVtX2tleV92ZXJzaW9uKGlub2RlKSA9PSBLRVlfRk9STUFUXzNfNikgewotCQkvLyAKKwkJLy8KIAkJcm91bmRfbGVuID0gUk9VTkRfVVAobmV3X2ZpbGVfbGVuZ3RoKTsKLQkJLyogdGhpcyB3YXMgbl9uZXdfZmlsZV9sZW5ndGggPCBsZV9paCAuLi4gKi8KKwkJLyogdGhpcyB3YXMgbmV3X2ZpbGVfbGVuZ3RoIDwgbGVfaWggLi4uICovCiAJCWlmIChyb3VuZF9sZW4gPCBsZV9paF9rX29mZnNldChsZV9paCkpIHsKIAkJCSpjdXRfc2l6ZSA9IC0oSUhfU0laRSArIGloX2l0ZW1fbGVuKGxlX2loKSk7CiAJCQlyZXR1cm4gTV9ERUxFVEU7CS8qIERlbGV0ZSB0aGlzIGl0ZW0uICovCkBAIC05ODYsOTYgKzk0OCw5NSBAQAogICAgIEluIGNhc2Ugb2YgZmlsZSB0cnVuY2F0ZSBjYWxjdWxhdGUgd2hldGhlciB0aGlzIGl0ZW0gbXVzdCBiZSBkZWxldGVkL3RydW5jYXRlZCBvciBsYXN0CiAgICAgdW5mb3JtYXR0ZWQgbm9kZSBvZiB0aGlzIGl0ZW0gd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBkaXJlY3QgaXRlbS4KICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBkZXRlcm1pbmF0aW9uIG9mIHdoYXQgYmFsYW5jZSBtb2RlIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIHNob3VsZCBlbXBsb3kuICovCi1zdGF0aWMgY2hhciBwcmVwYXJlX2Zvcl9kZWxldGVfb3JfY3V0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoLCBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqcF9zX2l0ZW1fa2V5LCBpbnQgKnBfbl9yZW1vdmVkLAkvKiBOdW1iZXIgb2YgdW5mb3JtYXR0ZWQgbm9kZXMgd2hpY2ggd2VyZSByZW1vdmVkCitzdGF0aWMgY2hhciBwcmVwYXJlX2Zvcl9kZWxldGVfb3JfY3V0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICppdGVtX2tleSwgaW50ICpyZW1vdmVkLAkvKiBOdW1iZXIgb2YgdW5mb3JtYXR0ZWQgbm9kZXMgd2hpY2ggd2VyZSByZW1vdmVkCiAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJICAgZnJvbSBlbmQgb2YgdGhlIGZpbGUuICovCi0JCQkJICAgICAgaW50ICpwX25fY3V0X3NpemUsIHVuc2lnbmVkIGxvbmcgbG9uZyBuX25ld19maWxlX2xlbmd0aAkvKiBNQVhfS0VZX09GRlNFVCBpbiBjYXNlIG9mIGRlbGV0ZS4gKi8KKwkJCQkgICAgICBpbnQgKmN1dF9zaXplLCB1bnNpZ25lZCBsb25nIGxvbmcgbmV3X2ZpbGVfbGVuZ3RoCS8qIE1BWF9LRVlfT0ZGU0VUIGluIGNhc2Ugb2YgZGVsZXRlLiAqLwogICAgICkKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiA9IGlub2RlLT5pX3NiOwotCXN0cnVjdCBpdGVtX2hlYWQgKnBfbGVfaWggPSBQQVRIX1BJVEVNX0hFQUQocF9zX3BhdGgpOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2JoID0gUEFUSF9QTEFTVF9CVUZGRVIocF9zX3BhdGgpOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlzdHJ1Y3QgaXRlbV9oZWFkICpwX2xlX2loID0gUEFUSF9QSVRFTV9IRUFEKHBhdGgpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBQQVRIX1BMQVNUX0JVRkZFUihwYXRoKTsKIAogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCiAJLyogU3RhdF9kYXRhIGl0ZW0uICovCiAJaWYgKGlzX3N0YXRkYXRhX2xlX2loKHBfbGVfaWgpKSB7CiAKLQkJUkZBTFNFKG5fbmV3X2ZpbGVfbGVuZ3RoICE9IG1heF9yZWlzZXJmc19vZmZzZXQoaW5vZGUpLAorCQlSRkFMU0UobmV3X2ZpbGVfbGVuZ3RoICE9IG1heF9yZWlzZXJmc19vZmZzZXQoaW5vZGUpLAogCQkgICAgICAgIlBBUC01MjEwOiBtb2RlIG11c3QgYmUgTV9ERUxFVEUiKTsKIAotCQkqcF9uX2N1dF9zaXplID0gLShJSF9TSVpFICsgaWhfaXRlbV9sZW4ocF9sZV9paCkpOworCQkqY3V0X3NpemUgPSAtKElIX1NJWkUgKyBpaF9pdGVtX2xlbihwX2xlX2loKSk7CiAJCXJldHVybiBNX0RFTEVURTsKIAl9CiAKIAkvKiBEaXJlY3RvcnkgaXRlbS4gKi8KIAlpZiAoaXNfZGlyZW50cnlfbGVfaWgocF9sZV9paCkpCi0JCXJldHVybiBwcmVwYXJlX2Zvcl9kaXJlbnRyeV9pdGVtKHBfc19wYXRoLCBwX2xlX2loLCBpbm9kZSwKLQkJCQkJCSBuX25ld19maWxlX2xlbmd0aCwKLQkJCQkJCSBwX25fY3V0X3NpemUpOworCQlyZXR1cm4gcHJlcGFyZV9mb3JfZGlyZW50cnlfaXRlbShwYXRoLCBwX2xlX2loLCBpbm9kZSwKKwkJCQkJCSBuZXdfZmlsZV9sZW5ndGgsCisJCQkJCQkgY3V0X3NpemUpOwogCiAJLyogRGlyZWN0IGl0ZW0uICovCiAJaWYgKGlzX2RpcmVjdF9sZV9paChwX2xlX2loKSkKLQkJcmV0dXJuIHByZXBhcmVfZm9yX2RpcmVjdF9pdGVtKHBfc19wYXRoLCBwX2xlX2loLCBpbm9kZSwKLQkJCQkJICAgICAgIG5fbmV3X2ZpbGVfbGVuZ3RoLCBwX25fY3V0X3NpemUpOworCQlyZXR1cm4gcHJlcGFyZV9mb3JfZGlyZWN0X2l0ZW0ocGF0aCwgcF9sZV9paCwgaW5vZGUsCisJCQkJCSAgICAgICBuZXdfZmlsZV9sZW5ndGgsIGN1dF9zaXplKTsKIAogCS8qIENhc2Ugb2YgYW4gaW5kaXJlY3QgaXRlbS4gKi8KIAl7Ci0JICAgIGludCBibGtfc2l6ZSA9IHBfc19zYi0+c19ibG9ja3NpemU7CisJICAgIGludCBibGtfc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKIAkgICAgc3RydWN0IGl0ZW1faGVhZCBzX2loOwogCSAgICBpbnQgbmVlZF9yZV9zZWFyY2g7CiAJICAgIGludCBkZWxldGUgPSAwOwogCSAgICBpbnQgcmVzdWx0ID0gTV9DVVQ7CiAJICAgIGludCBwb3MgPSAwOwogCi0JICAgIGlmICggbl9uZXdfZmlsZV9sZW5ndGggPT0gbWF4X3JlaXNlcmZzX29mZnNldCAoaW5vZGUpICkgeworCSAgICBpZiAoIG5ld19maWxlX2xlbmd0aCA9PSBtYXhfcmVpc2VyZnNfb2Zmc2V0IChpbm9kZSkgKSB7CiAJCS8qIHByZXBhcmVfZm9yX2RlbGV0ZV9vcl9jdXQoKSBpcyBjYWxsZWQgYnkKIAkJICogcmVpc2VyZnNfZGVsZXRlX2l0ZW0oKSAqLwotCQluX25ld19maWxlX2xlbmd0aCA9IDA7CisJCW5ld19maWxlX2xlbmd0aCA9IDA7CiAJCWRlbGV0ZSA9IDE7CiAJICAgIH0KIAogCSAgICBkbyB7CiAJCW5lZWRfcmVfc2VhcmNoID0gMDsKLQkJKnBfbl9jdXRfc2l6ZSA9IDA7Ci0JCXBfc19iaCA9IFBBVEhfUExBU1RfQlVGRkVSKHBfc19wYXRoKTsKLQkJY29weV9pdGVtX2hlYWQoJnNfaWgsIFBBVEhfUElURU1fSEVBRChwX3NfcGF0aCkpOworCQkqY3V0X3NpemUgPSAwOworCQliaCA9IFBBVEhfUExBU1RfQlVGRkVSKHBhdGgpOworCQljb3B5X2l0ZW1faGVhZCgmc19paCwgUEFUSF9QSVRFTV9IRUFEKHBhdGgpKTsKIAkJcG9zID0gSV9VTkZNX05VTSgmc19paCk7CiAKLQkJd2hpbGUgKGxlX2loX2tfb2Zmc2V0ICgmc19paCkgKyAocG9zIC0gMSkgKiBibGtfc2l6ZSA+IG5fbmV3X2ZpbGVfbGVuZ3RoKSB7CisJCXdoaWxlIChsZV9paF9rX29mZnNldCAoJnNfaWgpICsgKHBvcyAtIDEpICogYmxrX3NpemUgPiBuZXdfZmlsZV9sZW5ndGgpIHsKIAkJICAgIF9fbGUzMiAqdW5mbTsKIAkJICAgIF9fdTMyIGJsb2NrOwogCiAJCSAgICAvKiBFYWNoIHVuZm9ybWF0dGVkIGJsb2NrIGRlbGV0aW9uIG1heSBpbnZvbHZlIG9uZSBhZGRpdGlvbmFsCiAJCSAgICAgKiBiaXRtYXAgYmxvY2sgaW50byB0aGUgdHJhbnNhY3Rpb24sIHRoZXJlYnkgdGhlIGluaXRpYWwKIAkJICAgICAqIGpvdXJuYWwgc3BhY2UgcmVzZXJ2YXRpb24gbWlnaHQgbm90IGJlIGVub3VnaC4gKi8KLQkJICAgIGlmICghZGVsZXRlICYmICgqcF9uX2N1dF9zaXplKSAhPSAwICYmCi0JCQlyZWlzZXJmc190cmFuc2FjdGlvbl9mcmVlX3NwYWNlKHRoKSA8IEpPVVJOQUxfRk9SX0ZSRUVfQkxPQ0tfQU5EX1VQREFURV9TRCkgeworCQkgICAgaWYgKCFkZWxldGUgJiYgKCpjdXRfc2l6ZSkgIT0gMCAmJgorCQkJcmVpc2VyZnNfdHJhbnNhY3Rpb25fZnJlZV9zcGFjZSh0aCkgPCBKT1VSTkFMX0ZPUl9GUkVFX0JMT0NLX0FORF9VUERBVEVfU0QpCiAJCQlicmVhazsKLQkJICAgIH0KIAotCQkgICAgdW5mbSA9IChfX2xlMzIgKilCX0lfUElURU0ocF9zX2JoLCAmc19paCkgKyBwb3MgLSAxOworCQkgICAgdW5mbSA9IChfX2xlMzIgKilCX0lfUElURU0oYmgsICZzX2loKSArIHBvcyAtIDE7CiAJCSAgICBibG9jayA9IGdldF9ibG9ja19udW0odW5mbSwgMCk7CiAKIAkJICAgIGlmIChibG9jayAhPSAwKSB7Ci0JCQlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHBfc19zYiwgcF9zX2JoLCAxKTsKKwkJCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwoc2IsIGJoLCAxKTsKIAkJCXB1dF9ibG9ja19udW0odW5mbSwgMCwgMCk7Ci0JCQlqb3VybmFsX21hcmtfZGlydHkgKHRoLCBwX3Nfc2IsIHBfc19iaCk7CisJCQlqb3VybmFsX21hcmtfZGlydHkodGgsIHNiLCBiaCk7CiAJCQlyZWlzZXJmc19mcmVlX2Jsb2NrKHRoLCBpbm9kZSwgYmxvY2ssIDEpOwogCQkgICAgfQogCiAJCSAgICBjb25kX3Jlc2NoZWQoKTsKIAotCQkgICAgaWYgKGl0ZW1fbW92ZWQgKCZzX2loLCBwX3NfcGF0aCkpICB7CisJCSAgICBpZiAoaXRlbV9tb3ZlZCAoJnNfaWgsIHBhdGgpKSAgewogCQkJbmVlZF9yZV9zZWFyY2ggPSAxOwogCQkJYnJlYWs7CiAJCSAgICB9CiAKIAkJICAgIHBvcyAtLTsKLQkJICAgICgqcF9uX3JlbW92ZWQpICsrOwotCQkgICAgKCpwX25fY3V0X3NpemUpIC09IFVORk1fUF9TSVpFOworCQkgICAgKCpyZW1vdmVkKSsrOworCQkgICAgKCpjdXRfc2l6ZSkgLT0gVU5GTV9QX1NJWkU7CiAKIAkJICAgIGlmIChwb3MgPT0gMCkgewotCQkJKCpwX25fY3V0X3NpemUpIC09IElIX1NJWkU7CisJCQkoKmN1dF9zaXplKSAtPSBJSF9TSVpFOwogCQkJcmVzdWx0ID0gTV9ERUxFVEU7CiAJCQlicmVhazsKIAkJICAgIH0KQEAgLTEwODMsMTIgKzEwNDQsMTIgQEAKIAkJLyogYSB0cmljay4gIElmIHRoZSBidWZmZXIgaGFzIGJlZW4gbG9nZ2VkLCB0aGlzIHdpbGwgZG8gbm90aGluZy4gIElmCiAJCSoqIHdlJ3ZlIGJyb2tlbiB0aGUgbG9vcCB3aXRob3V0IGxvZ2dpbmcgaXQsIGl0IHdpbGwgcmVzdG9yZSB0aGUKIAkJKiogYnVmZmVyICovCi0JCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHBfc19zYiwgcF9zX2JoKTsKKwkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIoc2IsIGJoKTsKIAkgICAgfSB3aGlsZSAobmVlZF9yZV9zZWFyY2ggJiYKLQkJICAgICBzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShwX3Nfc2IsIHBfc19pdGVtX2tleSwgcF9zX3BhdGgpID09IFBPU0lUSU9OX0ZPVU5EKTsKLQkgICAgcG9zX2luX2l0ZW0ocF9zX3BhdGgpID0gcG9zICogVU5GTV9QX1NJWkU7CisJCSAgICAgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkoc2IsIGl0ZW1fa2V5LCBwYXRoKSA9PSBQT1NJVElPTl9GT1VORCk7CisJICAgIHBvc19pbl9pdGVtKHBhdGgpID0gcG9zICogVU5GTV9QX1NJWkU7CiAKLQkgICAgaWYgKCpwX25fY3V0X3NpemUgPT0gMCkgeworCSAgICBpZiAoKmN1dF9zaXplID09IDApIHsKIAkJLyogTm90aGluZyB3ZXJlIGN1dC4gbWF5YmUgY29udmVydCBsYXN0IHVuZm9ybWF0dGVkIG5vZGUgdG8gdGhlCiAJCSAqIGRpcmVjdCBpdGVtPyAqLwogCQlyZXN1bHQgPSBNX0NPTlZFUlQ7CkBAIC0xMDk4LDQ1ICsxMDU5LDQ1IEBACiB9CiAKIC8qIENhbGN1bGF0ZSBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggd2lsbCBiZSBkZWxldGVkIG9yIGN1dCBkdXJpbmcgYmFsYW5jZSAqLwotc3RhdGljIGludCBjYWxjX2RlbGV0ZWRfYnl0ZXNfbnVtYmVyKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnBfc190YiwgY2hhciBjX21vZGUpCitzdGF0aWMgaW50IGNhbGNfZGVsZXRlZF9ieXRlc19udW1iZXIoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsIGNoYXIgbW9kZSkKIHsKLQlpbnQgbl9kZWxfc2l6ZTsKLQlzdHJ1Y3QgaXRlbV9oZWFkICpwX2xlX2loID0gUEFUSF9QSVRFTV9IRUFEKHBfc190Yi0+dGJfcGF0aCk7CisJaW50IGRlbF9zaXplOworCXN0cnVjdCBpdGVtX2hlYWQgKnBfbGVfaWggPSBQQVRIX1BJVEVNX0hFQUQodGItPnRiX3BhdGgpOwogCiAJaWYgKGlzX3N0YXRkYXRhX2xlX2loKHBfbGVfaWgpKQogCQlyZXR1cm4gMDsKIAotCW5fZGVsX3NpemUgPQotCSAgICAoY19tb2RlID09Ci0JICAgICBNX0RFTEVURSkgPyBpaF9pdGVtX2xlbihwX2xlX2loKSA6IC1wX3NfdGItPmluc2VydF9zaXplWzBdOworCWRlbF9zaXplID0KKwkgICAgKG1vZGUgPT0KKwkgICAgIE1fREVMRVRFKSA/IGloX2l0ZW1fbGVuKHBfbGVfaWgpIDogLXRiLT5pbnNlcnRfc2l6ZVswXTsKIAlpZiAoaXNfZGlyZW50cnlfbGVfaWgocF9sZV9paCkpIHsKLQkJLy8gcmV0dXJuIEVNUFRZX0RJUl9TSVpFOyAvKiBXZSBkZWxldGUgZW10eSBkaXJlY3RvcmlzIG9ubHkuICovCi0JCS8vIHdlIGNhbid0IHVzZSBFTVBUWV9ESVJfU0laRSwgYXMgb2xkIGZvcm1hdCBkaXJzIGhhdmUgYSBkaWZmZXJlbnQKLQkJLy8gZW1wdHkgc2l6ZS4gIGljay4gRklYTUUsIGlzIHRoaXMgcmlnaHQ/Ci0JCS8vCi0JCXJldHVybiBuX2RlbF9zaXplOworCQkvKiByZXR1cm4gRU1QVFlfRElSX1NJWkU7IFdlIGRlbGV0ZSBlbXR5IGRpcmVjdG9yaXMgb25seS4KKwkJICogd2UgY2FuJ3QgdXNlIEVNUFRZX0RJUl9TSVpFLCBhcyBvbGQgZm9ybWF0IGRpcnMgaGF2ZSBhIGRpZmZlcmVudAorCQkgKiBlbXB0eSBzaXplLiAgaWNrLiBGSVhNRSwgaXMgdGhpcyByaWdodD8gKi8KKwkJcmV0dXJuIGRlbF9zaXplOwogCX0KIAogCWlmIChpc19pbmRpcmVjdF9sZV9paChwX2xlX2loKSkKLQkJbl9kZWxfc2l6ZSA9IChuX2RlbF9zaXplIC8gVU5GTV9QX1NJWkUpICogKFBBVEhfUExBU1RfQlVGRkVSKHBfc190Yi0+dGJfcGF0aCktPmJfc2l6ZSk7CS8vIC0gZ2V0X2loX2ZyZWVfc3BhY2UgKHBfbGVfaWgpOwotCXJldHVybiBuX2RlbF9zaXplOworCQlkZWxfc2l6ZSA9IChkZWxfc2l6ZSAvIFVORk1fUF9TSVpFKSAqCisJCQkJKFBBVEhfUExBU1RfQlVGRkVSKHRiLT50Yl9wYXRoKS0+Yl9zaXplKTsKKwlyZXR1cm4gZGVsX3NpemU7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRfdGJfc3RydWN0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJICAgc3RydWN0IHRyZWVfYmFsYW5jZSAqcF9zX3RiLAotCQkJICAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCi0JCQkgICBzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoLCBpbnQgbl9zaXplKQorCQkJICAgc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsCisJCQkgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJICAgc3RydWN0IHRyZWVwYXRoICpwYXRoLCBpbnQgc2l6ZSkKIHsKIAogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCi0JbWVtc2V0KHBfc190YiwgJ1wwJywgc2l6ZW9mKHN0cnVjdCB0cmVlX2JhbGFuY2UpKTsKLQlwX3NfdGItPnRyYW5zYWN0aW9uX2hhbmRsZSA9IHRoOwotCXBfc190Yi0+dGJfc2IgPSBwX3Nfc2I7Ci0JcF9zX3RiLT50Yl9wYXRoID0gcF9zX3BhdGg7Ci0JUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfcGF0aCwgSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSA9IE5VTEw7Ci0JUEFUSF9PRkZTRVRfUE9TSVRJT04ocF9zX3BhdGgsIElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCkgPSAwOwotCXBfc190Yi0+aW5zZXJ0X3NpemVbMF0gPSBuX3NpemU7CisJbWVtc2V0KHRiLCAnXDAnLCBzaXplb2Yoc3RydWN0IHRyZWVfYmFsYW5jZSkpOworCXRiLT50cmFuc2FjdGlvbl9oYW5kbGUgPSB0aDsKKwl0Yi0+dGJfc2IgPSBzYjsKKwl0Yi0+dGJfcGF0aCA9IHBhdGg7CisJUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQpID0gTlVMTDsKKwlQQVRIX09GRlNFVF9QT1NJVElPTihwYXRoLCBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQpID0gMDsKKwl0Yi0+aW5zZXJ0X3NpemVbMF0gPSBzaXplOwogfQogCiB2b2lkIHBhZGRfaXRlbShjaGFyICppdGVtLCBpbnQgdG90YWxfbGVuZ3RoLCBpbnQgbGVuZ3RoKQpAQCAtMTE3NSw3MyArMTEzNiw3NyBAQAogfQogI2VuZGlmCiAKLS8qIERlbGV0ZSBvYmplY3QgaXRlbS4gKi8KLWludCByZWlzZXJmc19kZWxldGVfaXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgc3RydWN0IHRyZWVwYXRoICpwX3NfcGF0aCwJLyogUGF0aCB0byB0aGUgZGVsZXRlZCBpdGVtLiAqLwotCQkJIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICpwX3NfaXRlbV9rZXksCS8qIEtleSB0byBzZWFyY2ggZm9yIHRoZSBkZWxldGVkIGl0ZW0uICAqLwotCQkJIHN0cnVjdCBpbm9kZSAqcF9zX2lub2RlLAkvKiBpbm9kZSBpcyBoZXJlIGp1c3QgdG8gdXBkYXRlIGlfYmxvY2tzIGFuZCBxdW90YXMgKi8KLQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc191bl9iaCkKLXsJCQkJLyogTlVMTCBvciB1bmZvcm1hdHRlZCBub2RlIHBvaW50ZXIuICAgICovCi0Jc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IgPSBwX3NfaW5vZGUtPmlfc2I7CisvKiBEZWxldGUgb2JqZWN0IGl0ZW0uCisgKiB0aCAgICAgICAtIGFjdGl2ZSB0cmFuc2FjdGlvbiBoYW5kbGUKKyAqIHBhdGggICAgIC0gcGF0aCB0byB0aGUgZGVsZXRlZCBpdGVtCisgKiBpdGVtX2tleSAtIGtleSB0byBzZWFyY2ggZm9yIHRoZSBkZWxldGVkIGl0ZW0KKyAqIGluZG9kZSAgIC0gdXNlZCBmb3IgdXBkYXRpbmcgaV9ibG9ja3MgYW5kIHF1b3RhcworICogdW5fYmggICAgLSBOVUxMIG9yIHVuZm9ybWF0dGVkIG5vZGUgcG9pbnRlcgorICovCitpbnQgcmVpc2VyZnNfZGVsZXRlX2l0ZW0oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCQkgc3RydWN0IHRyZWVwYXRoICpwYXRoLCBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqaXRlbV9rZXksCisJCQkgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICp1bl9iaCkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJc3RydWN0IHRyZWVfYmFsYW5jZSBzX2RlbF9iYWxhbmNlOwogCXN0cnVjdCBpdGVtX2hlYWQgc19paDsKIAlzdHJ1Y3QgaXRlbV9oZWFkICpxX2loOwogCWludCBxdW90YV9jdXRfYnl0ZXM7Ci0JaW50IG5fcmV0X3ZhbHVlLCBuX2RlbF9zaXplLCBuX3JlbW92ZWQ7CisJaW50IHJldF92YWx1ZSwgZGVsX3NpemUsIHJlbW92ZWQ7CiAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKLQljaGFyIGNfbW9kZTsKLQlpbnQgbl9pdGVyID0gMDsKKwljaGFyIG1vZGU7CisJaW50IGl0ZXIgPSAwOwogI2VuZGlmCiAKIAlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKIAotCWluaXRfdGJfc3RydWN0KHRoLCAmc19kZWxfYmFsYW5jZSwgcF9zX3NiLCBwX3NfcGF0aCwKKwlpbml0X3RiX3N0cnVjdCh0aCwgJnNfZGVsX2JhbGFuY2UsIHNiLCBwYXRoLAogCQkgICAgICAgMCAvKnNpemUgaXMgdW5rbm93biAqLyApOwogCiAJd2hpbGUgKDEpIHsKLQkJbl9yZW1vdmVkID0gMDsKKwkJcmVtb3ZlZCA9IDA7CiAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKLQkJbl9pdGVyKys7Ci0JCWNfbW9kZSA9CisJCWl0ZXIrKzsKKwkJbW9kZSA9CiAjZW5kaWYKLQkJICAgIHByZXBhcmVfZm9yX2RlbGV0ZV9vcl9jdXQodGgsIHBfc19pbm9kZSwgcF9zX3BhdGgsCi0JCQkJCSAgICAgIHBfc19pdGVtX2tleSwgJm5fcmVtb3ZlZCwKLQkJCQkJICAgICAgJm5fZGVsX3NpemUsCi0JCQkJCSAgICAgIG1heF9yZWlzZXJmc19vZmZzZXQocF9zX2lub2RlKSk7CisJCSAgICBwcmVwYXJlX2Zvcl9kZWxldGVfb3JfY3V0KHRoLCBpbm9kZSwgcGF0aCwKKwkJCQkJICAgICAgaXRlbV9rZXksICZyZW1vdmVkLAorCQkJCQkgICAgICAmZGVsX3NpemUsCisJCQkJCSAgICAgIG1heF9yZWlzZXJmc19vZmZzZXQoaW5vZGUpKTsKIAotCQlSRkFMU0UoY19tb2RlICE9IE1fREVMRVRFLCAiUEFQLTUzMjA6IG1vZGUgbXVzdCBiZSBNX0RFTEVURSIpOworCQlSRkFMU0UobW9kZSAhPSBNX0RFTEVURSwgIlBBUC01MzIwOiBtb2RlIG11c3QgYmUgTV9ERUxFVEUiKTsKIAotCQljb3B5X2l0ZW1faGVhZCgmc19paCwgUEFUSF9QSVRFTV9IRUFEKHBfc19wYXRoKSk7Ci0JCXNfZGVsX2JhbGFuY2UuaW5zZXJ0X3NpemVbMF0gPSBuX2RlbF9zaXplOworCQljb3B5X2l0ZW1faGVhZCgmc19paCwgUEFUSF9QSVRFTV9IRUFEKHBhdGgpKTsKKwkJc19kZWxfYmFsYW5jZS5pbnNlcnRfc2l6ZVswXSA9IGRlbF9zaXplOwogCi0JCW5fcmV0X3ZhbHVlID0gZml4X25vZGVzKE1fREVMRVRFLCAmc19kZWxfYmFsYW5jZSwgTlVMTCwgTlVMTCk7Ci0JCWlmIChuX3JldF92YWx1ZSAhPSBSRVBFQVRfU0VBUkNIKQorCQlyZXRfdmFsdWUgPSBmaXhfbm9kZXMoTV9ERUxFVEUsICZzX2RlbF9iYWxhbmNlLCBOVUxMLCBOVUxMKTsKKwkJaWYgKHJldF92YWx1ZSAhPSBSRVBFQVRfU0VBUkNIKQogCQkJYnJlYWs7CiAKLQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGRlbGV0ZV9pdGVtX3Jlc3RhcnRlZCk7CisJCVBST0NfSU5GT19JTkMoc2IsIGRlbGV0ZV9pdGVtX3Jlc3RhcnRlZCk7CiAKIAkJLy8gZmlsZSBzeXN0ZW0gY2hhbmdlZCwgcmVwZWF0IHNlYXJjaAotCQluX3JldF92YWx1ZSA9Ci0JCSAgICBzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShwX3Nfc2IsIHBfc19pdGVtX2tleSwgcF9zX3BhdGgpOwotCQlpZiAobl9yZXRfdmFsdWUgPT0gSU9fRVJST1IpCisJCXJldF92YWx1ZSA9CisJCSAgICBzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShzYiwgaXRlbV9rZXksIHBhdGgpOworCQlpZiAocmV0X3ZhbHVlID09IElPX0VSUk9SKQogCQkJYnJlYWs7Ci0JCWlmIChuX3JldF92YWx1ZSA9PSBGSUxFX05PVF9GT1VORCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJCSAidnMtNTM0MDogcmVpc2VyZnNfZGVsZXRlX2l0ZW06ICIKKwkJaWYgKHJldF92YWx1ZSA9PSBGSUxFX05PVF9GT1VORCkgeworCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgInZzLTUzNDAiLAogCQkJCQkgIm5vIGl0ZW1zIG9mIHRoZSBmaWxlICVLIGZvdW5kIiwKLQkJCQkJIHBfc19pdGVtX2tleSk7CisJCQkJCSBpdGVtX2tleSk7CiAJCQlicmVhazsKIAkJfQogCX0JCQkvKiB3aGlsZSAoMSkgKi8KIAotCWlmIChuX3JldF92YWx1ZSAhPSBDQVJSWV9PTikgeworCWlmIChyZXRfdmFsdWUgIT0gQ0FSUllfT04pIHsKIAkJdW5maXhfbm9kZXMoJnNfZGVsX2JhbGFuY2UpOwogCQlyZXR1cm4gMDsKIAl9CiAJLy8gcmVpc2VyZnNfZGVsZXRlX2l0ZW0gcmV0dXJucyBpdGVtIGxlbmd0aCB3aGVuIHN1Y2Nlc3MKLQluX3JldF92YWx1ZSA9IGNhbGNfZGVsZXRlZF9ieXRlc19udW1iZXIoJnNfZGVsX2JhbGFuY2UsIE1fREVMRVRFKTsKLQlxX2loID0gZ2V0X2loKHBfc19wYXRoKTsKKwlyZXRfdmFsdWUgPSBjYWxjX2RlbGV0ZWRfYnl0ZXNfbnVtYmVyKCZzX2RlbF9iYWxhbmNlLCBNX0RFTEVURSk7CisJcV9paCA9IGdldF9paChwYXRoKTsKIAlxdW90YV9jdXRfYnl0ZXMgPSBpaF9pdGVtX2xlbihxX2loKTsKIAogCS8qIGhhY2sgc28gdGhlIHF1b3RhIGNvZGUgZG9lc24ndCBoYXZlIHRvIGd1ZXNzIGlmIHRoZSBmaWxlCkBAIC0xMjUwLDE1ICsxMjE1LDE1IEBACiAJICoqIHNwbGl0IGludG8gbXVsdGlwbGUgaXRlbXMsIGFuZCB3ZSBvbmx5IHdhbnQgdG8gZGVjcmVtZW50IGZvcgogCSAqKiB0aGUgdW5mbSBub2RlIG9uY2UKIAkgKi8KLQlpZiAoIVNfSVNMTksocF9zX2lub2RlLT5pX21vZGUpICYmIGlzX2RpcmVjdF9sZV9paChxX2loKSkgewotCQlpZiAoKGxlX2loX2tfb2Zmc2V0KHFfaWgpICYgKHBfc19zYi0+c19ibG9ja3NpemUgLSAxKSkgPT0gMSkgewotCQkJcXVvdGFfY3V0X2J5dGVzID0gcF9zX3NiLT5zX2Jsb2Nrc2l6ZSArIFVORk1fUF9TSVpFOworCWlmICghU19JU0xOSyhpbm9kZS0+aV9tb2RlKSAmJiBpc19kaXJlY3RfbGVfaWgocV9paCkpIHsKKwkJaWYgKChsZV9paF9rX29mZnNldChxX2loKSAmIChzYi0+c19ibG9ja3NpemUgLSAxKSkgPT0gMSkgeworCQkJcXVvdGFfY3V0X2J5dGVzID0gc2ItPnNfYmxvY2tzaXplICsgVU5GTV9QX1NJWkU7CiAJCX0gZWxzZSB7CiAJCQlxdW90YV9jdXRfYnl0ZXMgPSAwOwogCQl9CiAJfQogCi0JaWYgKHBfc191bl9iaCkgeworCWlmICh1bl9iaCkgewogCQlpbnQgb2ZmOwogCQljaGFyICpkYXRhOwogCkBAIC0xMjc2LDMxICsxMjQxLDMxIEBACiAJCSAqKiBUaGUgdW5mb3JtYXR0ZWQgbm9kZSBtdXN0IGJlIGRpcnRpZWQgbGF0ZXIgb24uICBXZSBjYW4ndCBiZQogCQkgKiogc3VyZSBoZXJlIGlmIHRoZSBlbnRpcmUgdGFpbCBoYXMgYmVlbiBkZWxldGVkIHlldC4KIAkJICoqCi0JCSAqKiBwX3NfdW5fYmggaXMgZnJvbSB0aGUgcGFnZSBjYWNoZSAoYWxsIHVuZm9ybWF0dGVkIG5vZGVzIGFyZQorCQkgKiogdW5fYmggaXMgZnJvbSB0aGUgcGFnZSBjYWNoZSAoYWxsIHVuZm9ybWF0dGVkIG5vZGVzIGFyZQogCQkgKiogZnJvbSB0aGUgcGFnZSBjYWNoZSkgYW5kIG1pZ2h0IGJlIGEgaGlnaG1lbSBwYWdlLiAgU28sIHdlCi0JCSAqKiBjYW4ndCB1c2UgcF9zX3VuX2JoLT5iX2RhdGEuCisJCSAqKiBjYW4ndCB1c2UgdW5fYmgtPmJfZGF0YS4KIAkJICoqIC1jbG0KIAkJICovCiAKLQkJZGF0YSA9IGttYXBfYXRvbWljKHBfc191bl9iaC0+Yl9wYWdlLCBLTV9VU0VSMCk7CisJCWRhdGEgPSBrbWFwX2F0b21pYyh1bl9iaC0+Yl9wYWdlLCBLTV9VU0VSMCk7CiAJCW9mZiA9ICgobGVfaWhfa19vZmZzZXQoJnNfaWgpIC0gMSkgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSkpOwogCQltZW1jcHkoZGF0YSArIG9mZiwKLQkJICAgICAgIEJfSV9QSVRFTShQQVRIX1BMQVNUX0JVRkZFUihwX3NfcGF0aCksICZzX2loKSwKLQkJICAgICAgIG5fcmV0X3ZhbHVlKTsKKwkJICAgICAgIEJfSV9QSVRFTShQQVRIX1BMQVNUX0JVRkZFUihwYXRoKSwgJnNfaWgpLAorCQkgICAgICAgcmV0X3ZhbHVlKTsKIAkJa3VubWFwX2F0b21pYyhkYXRhLCBLTV9VU0VSMCk7CiAJfQogCS8qIFBlcmZvcm0gYmFsYW5jaW5nIGFmdGVyIGFsbCByZXNvdXJjZXMgaGF2ZSBiZWVuIGNvbGxlY3RlZCBhdCBvbmNlLiAqLwogCWRvX2JhbGFuY2UoJnNfZGVsX2JhbGFuY2UsIE5VTEwsIE5VTEwsIE1fREVMRVRFKTsKIAogI2lmZGVmIFJFSVNFUlFVT1RBX0RFQlVHCi0JcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkgICAgICAgInJlaXNlcnF1b3RhIGRlbGV0ZV9pdGVtKCk6IGZyZWVpbmcgJXUsIGlkPSV1IHR5cGU9JWMiLAotCQkgICAgICAgcXVvdGFfY3V0X2J5dGVzLCBwX3NfaW5vZGUtPmlfdWlkLCBoZWFkMnR5cGUoJnNfaWgpKTsKKwkJICAgICAgIHF1b3RhX2N1dF9ieXRlcywgaW5vZGUtPmlfdWlkLCBoZWFkMnR5cGUoJnNfaWgpKTsKICNlbmRpZgotCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkocF9zX2lub2RlLCBxdW90YV9jdXRfYnl0ZXMpOworCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsIHF1b3RhX2N1dF9ieXRlcyk7CiAKIAkvKiBSZXR1cm4gZGVsZXRlZCBib2R5IGxlbmd0aCAqLwotCXJldHVybiBuX3JldF92YWx1ZTsKKwlyZXR1cm4gcmV0X3ZhbHVlOwogfQogCiAvKiBTdW1tYXJ5IE9mIE1lY2hhbmlzbXMgRm9yIEhhbmRsaW5nIENvbGxpc2lvbnMgQmV0d2VlbiBQcm9jZXNzZXM6CkBAIC0xMzM4LDEwICsxMzAzLDkgQEAKIAl3aGlsZSAoMSkgewogCQlyZXR2YWwgPSBzZWFyY2hfaXRlbSh0aC0+dF9zdXBlciwgJmNwdV9rZXksICZwYXRoKTsKIAkJaWYgKHJldHZhbCA9PSBJT19FUlJPUikgewotCQkJcmVpc2VyZnNfd2FybmluZyh0aC0+dF9zdXBlciwKLQkJCQkJICJ2cy01MzUwOiByZWlzZXJmc19kZWxldGVfc29saWRfaXRlbTogIgotCQkJCQkgImkvbyBmYWlsdXJlIG9jY3VycmVkIHRyeWluZyB0byBkZWxldGUgJUsiLAotCQkJCQkgJmNwdV9rZXkpOworCQkJcmVpc2VyZnNfZXJyb3IodGgtPnRfc3VwZXIsICJ2cy01MzUwIiwKKwkJCQkgICAgICAgImkvbyBmYWlsdXJlIG9jY3VycmVkIHRyeWluZyAiCisJCQkJICAgICAgICJ0byBkZWxldGUgJUsiLCAmY3B1X2tleSk7CiAJCQlicmVhazsKIAkJfQogCQlpZiAocmV0dmFsICE9IElURU1fRk9VTkQpIHsKQEAgLTEzNTUsOSArMTMxOSw4IEBACiAJCQkgICAgIEdFVF9HRU5FUkFUSU9OX05VTUJFUihsZV9rZXlfa19vZmZzZXQKIAkJCQkJCSAgIChsZV9rZXlfdmVyc2lvbihrZXkpLAogCQkJCQkJICAgIGtleSkpID09IDEpKQotCQkJCXJlaXNlcmZzX3dhcm5pbmcodGgtPnRfc3VwZXIsCi0JCQkJCQkgInZzLTUzNTU6IHJlaXNlcmZzX2RlbGV0ZV9zb2xpZF9pdGVtOiAlayBub3QgZm91bmQiLAotCQkJCQkJIGtleSk7CisJCQkJcmVpc2VyZnNfd2FybmluZyh0aC0+dF9zdXBlciwgInZzLTUzNTUiLAorCQkJCQkJICIlayBub3QgZm91bmQiLCBrZXkpOwogCQkJYnJlYWs7CiAJCX0KIAkJaWYgKCF0Yl9pbml0KSB7CkBAIC0xMzg5LDggKzEzNTIsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJLy8gSU9fRVJST1IsIE5PX0RJU0tfU1BBQ0UsIGV0YwotCQlyZWlzZXJmc193YXJuaW5nKHRoLT50X3N1cGVyLAotCQkJCSAidnMtNTM2MDogcmVpc2VyZnNfZGVsZXRlX3NvbGlkX2l0ZW06ICIKKwkJcmVpc2VyZnNfd2FybmluZyh0aC0+dF9zdXBlciwgInZzLTUzNjAiLAogCQkJCSAiY291bGQgbm90IGRlbGV0ZSAlSyBkdWUgdG8gZml4X25vZGVzIGZhaWx1cmUiLAogCQkJCSAmY3B1X2tleSk7CiAJCXVuZml4X25vZGVzKCZ0Yik7CkBAIC0xNDYyLDM2ICsxNDI0LDM3IEBACiB9CiAKIHN0YXRpYyBpbnQgbWF5YmVfaW5kaXJlY3RfdG9fZGlyZWN0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKnBfc19pbm9kZSwKKwkJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJICAgIHN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGgsCi0JCQkJICAgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICpwX3NfaXRlbV9rZXksCi0JCQkJICAgIGxvZmZfdCBuX25ld19maWxlX3NpemUsIGNoYXIgKnBfY19tb2RlKQorCQkJCSAgICBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICppdGVtX2tleSwKKwkJCQkgICAgbG9mZl90IG5ld19maWxlX3NpemUsIGNoYXIgKm1vZGUpCiB7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IgPSBwX3NfaW5vZGUtPmlfc2I7Ci0JaW50IG5fYmxvY2tfc2l6ZSA9IHBfc19zYi0+c19ibG9ja3NpemU7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCWludCBibG9ja19zaXplID0gc2ItPnNfYmxvY2tzaXplOwogCWludCBjdXRfYnl0ZXM7CiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7Ci0JQlVHX09OKG5fbmV3X2ZpbGVfc2l6ZSAhPSBwX3NfaW5vZGUtPmlfc2l6ZSk7CisJQlVHX09OKG5ld19maWxlX3NpemUgIT0gaW5vZGUtPmlfc2l6ZSk7CiAKIAkvKiB0aGUgcGFnZSBiZWluZyBzZW50IGluIGNvdWxkIGJlIE5VTEwgaWYgdGhlcmUgd2FzIGFuIGkvbyBlcnJvcgogCSAqKiByZWFkaW5nIGluIHRoZSBsYXN0IGJsb2NrLiAgVGhlIHVzZXIgd2lsbCBoaXQgcHJvYmxlbXMgdHJ5aW5nIHRvCiAJICoqIHJlYWQgdGhlIGZpbGUsIGJ1dCBmb3Igbm93IHdlIGp1c3Qgc2tpcCB0aGUgaW5kaXJlY3QyZGlyZWN0CiAJICovCi0JaWYgKGF0b21pY19yZWFkKCZwX3NfaW5vZGUtPmlfY291bnQpID4gMSB8fAotCSAgICAhdGFpbF9oYXNfdG9fYmVfcGFja2VkKHBfc19pbm9kZSkgfHwKLQkgICAgIXBhZ2UgfHwgKFJFSVNFUkZTX0kocF9zX2lub2RlKS0+aV9mbGFncyAmIGlfbm9wYWNrX21hc2spKSB7Ci0JCS8vIGxlYXZlIHRhaWwgaW4gYW4gdW5mb3JtYXR0ZWQgbm9kZSAgICAKLQkJKnBfY19tb2RlID0gTV9TS0lQX0JBTEFOQ0lORzsKKwlpZiAoYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSA+IDEgfHwKKwkgICAgIXRhaWxfaGFzX3RvX2JlX3BhY2tlZChpbm9kZSkgfHwKKwkgICAgIXBhZ2UgfHwgKFJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzICYgaV9ub3BhY2tfbWFzaykpIHsKKwkJLyogbGVhdmUgdGFpbCBpbiBhbiB1bmZvcm1hdHRlZCBub2RlICovCisJCSptb2RlID0gTV9TS0lQX0JBTEFOQ0lORzsKIAkJY3V0X2J5dGVzID0KLQkJICAgIG5fYmxvY2tfc2l6ZSAtIChuX25ld19maWxlX3NpemUgJiAobl9ibG9ja19zaXplIC0gMSkpOwotCQlwYXRocmVsc2UocF9zX3BhdGgpOworCQkgICAgYmxvY2tfc2l6ZSAtIChuZXdfZmlsZV9zaXplICYgKGJsb2NrX3NpemUgLSAxKSk7CisJCXBhdGhyZWxzZShwYXRoKTsKIAkJcmV0dXJuIGN1dF9ieXRlczsKIAl9Ci0JLyogUGVybW9ybSB0aGUgY29udmVyc2lvbiB0byBhIGRpcmVjdF9pdGVtLiAqLwotCS8qcmV0dXJuIGluZGlyZWN0X3RvX2RpcmVjdCAocF9zX2lub2RlLCBwX3NfcGF0aCwgcF9zX2l0ZW1fa2V5LCBuX25ld19maWxlX3NpemUsIHBfY19tb2RlKTsgKi8KLQlyZXR1cm4gaW5kaXJlY3QyZGlyZWN0KHRoLCBwX3NfaW5vZGUsIHBhZ2UsIHBfc19wYXRoLCBwX3NfaXRlbV9rZXksCi0JCQkgICAgICAgbl9uZXdfZmlsZV9zaXplLCBwX2NfbW9kZSk7CisJLyogUGVyZm9ybSB0aGUgY29udmVyc2lvbiB0byBhIGRpcmVjdF9pdGVtLiAqLworCS8qIHJldHVybiBpbmRpcmVjdF90b19kaXJlY3QoaW5vZGUsIHBhdGgsIGl0ZW1fa2V5LAorCQkJCSAgbmV3X2ZpbGVfc2l6ZSwgbW9kZSk7ICovCisJcmV0dXJuIGluZGlyZWN0MmRpcmVjdCh0aCwgaW5vZGUsIHBhZ2UsIHBhdGgsIGl0ZW1fa2V5LAorCQkJICAgICAgIG5ld19maWxlX3NpemUsIG1vZGUpOwogfQogCiAvKiB3ZSBkaWQgaW5kaXJlY3RfdG9fZGlyZWN0IGNvbnZlcnNpb24uIEFuZCB3ZSBoYXZlIGluc2VydGVkIGRpcmVjdApAQCAtMTUxNSw4ICsxNDc4LDggQEAKIAkJLyogbG9vayBmb3IgdGhlIGxhc3QgYnl0ZSBvZiB0aGUgdGFpbCAqLwogCQlpZiAoc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkoaW5vZGUtPmlfc2IsICZ0YWlsX2tleSwgcGF0aCkgPT0KIAkJICAgIFBPU0lUSU9OX05PVF9GT1VORCkKLQkJCXJlaXNlcmZzX3BhbmljKGlub2RlLT5pX3NiLAotCQkJCSAgICAgICAidnMtNTYxNTogaW5kaXJlY3RfdG9fZGlyZWN0X3JvbGxfYmFjazogZm91bmQgaW52YWxpZCBpdGVtIik7CisJCQlyZWlzZXJmc19wYW5pYyhpbm9kZS0+aV9zYiwgInZzLTU2MTUiLAorCQkJCSAgICAgICAiZm91bmQgaW52YWxpZCBpdGVtIik7CiAJCVJGQUxTRShwYXRoLT5wb3NfaW5faXRlbSAhPQogCQkgICAgICAgaWhfaXRlbV9sZW4oUEFUSF9QSVRFTV9IRUFEKHBhdGgpKSAtIDEsCiAJCSAgICAgICAidnMtNTYxNjogYXBwZW5kZWQgYnl0ZXMgZm91bmQiKTsKQEAgLTE1MzMsMzggKzE0OTYsMzkgQEAKIAkJc2V0X2NwdV9rZXlfa19vZmZzZXQoJnRhaWxfa2V5LAogCQkJCSAgICAgY3B1X2tleV9rX29mZnNldCgmdGFpbF9rZXkpIC0gcmVtb3ZlZCk7CiAJfQotCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCi0JCQkgImluZGlyZWN0X3RvX2RpcmVjdF9yb2xsX2JhY2s6IGluZGlyZWN0X3RvX2RpcmVjdCBjb252ZXJzaW9uIGhhcyBiZWVuIHJvbGxlZCBiYWNrIGR1ZSB0byBsYWNrIG9mIGRpc2sgc3BhY2UiKTsKKwlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAicmVpc2VyZnMtNTA5MSIsICJpbmRpcmVjdF90b19kaXJlY3QgIgorCQkJICJjb252ZXJzaW9uIGhhcyBiZWVuIHJvbGxlZCBiYWNrIGR1ZSB0byAiCisJCQkgImxhY2sgb2YgZGlzayBzcGFjZSIpOwogCS8vbWFya19maWxlX3dpdGhvdXRfdGFpbCAoaW5vZGUpOwogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogfQogCiAvKiAoVHJ1bmNhdGUgb3IgY3V0IGVudHJ5KSBvciBkZWxldGUgb2JqZWN0IGl0ZW0uIFJldHVybnMgPCAwIG9uIGZhaWx1cmUgKi8KIGludCByZWlzZXJmc19jdXRfZnJvbV9pdGVtKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJICAgc3RydWN0IHRyZWVwYXRoICpwX3NfcGF0aCwKLQkJCSAgIHN0cnVjdCBjcHVfa2V5ICpwX3NfaXRlbV9rZXksCi0JCQkgICBzdHJ1Y3QgaW5vZGUgKnBfc19pbm9kZSwKLQkJCSAgIHN0cnVjdCBwYWdlICpwYWdlLCBsb2ZmX3Qgbl9uZXdfZmlsZV9zaXplKQorCQkJICAgc3RydWN0IHRyZWVwYXRoICpwYXRoLAorCQkJICAgc3RydWN0IGNwdV9rZXkgKml0ZW1fa2V5LAorCQkJICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgIHN0cnVjdCBwYWdlICpwYWdlLCBsb2ZmX3QgbmV3X2ZpbGVfc2l6ZSkKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiA9IHBfc19pbm9kZS0+aV9zYjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJLyogRXZlcnkgZnVuY3Rpb24gd2hpY2ggaXMgZ29pbmcgdG8gY2FsbCBkb19iYWxhbmNlIG11c3QgZmlyc3QKIAkgICBjcmVhdGUgYSB0cmVlX2JhbGFuY2Ugc3RydWN0dXJlLiAgVGhlbiBpdCBtdXN0IGZpbGwgdXAgdGhpcwogCSAgIHN0cnVjdHVyZSBieSB1c2luZyB0aGUgaW5pdF90Yl9zdHJ1Y3QgYW5kIGZpeF9ub2RlcyBmdW5jdGlvbnMuCiAJICAgQWZ0ZXIgdGhhdCB3ZSBjYW4gbWFrZSB0cmVlIGJhbGFuY2luZy4gKi8KIAlzdHJ1Y3QgdHJlZV9iYWxhbmNlIHNfY3V0X2JhbGFuY2U7CiAJc3RydWN0IGl0ZW1faGVhZCAqcF9sZV9paDsKLQlpbnQgbl9jdXRfc2l6ZSA9IDAsCS8qIEFtb3VudCB0byBiZSBjdXQuICovCi0JICAgIG5fcmV0X3ZhbHVlID0gQ0FSUllfT04sIG5fcmVtb3ZlZCA9IDAsCS8qIE51bWJlciBvZiB0aGUgcmVtb3ZlZCB1bmZvcm1hdHRlZCBub2Rlcy4gKi8KLQkgICAgbl9pc19pbm9kZV9sb2NrZWQgPSAwOwotCWNoYXIgY19tb2RlOwkJLyogTW9kZSBvZiB0aGUgYmFsYW5jZS4gKi8KKwlpbnQgY3V0X3NpemUgPSAwLAkvKiBBbW91bnQgdG8gYmUgY3V0LiAqLworCSAgICByZXRfdmFsdWUgPSBDQVJSWV9PTiwgcmVtb3ZlZCA9IDAsCS8qIE51bWJlciBvZiB0aGUgcmVtb3ZlZCB1bmZvcm1hdHRlZCBub2Rlcy4gKi8KKwkgICAgaXNfaW5vZGVfbG9ja2VkID0gMDsKKwljaGFyIG1vZGU7CQkvKiBNb2RlIG9mIHRoZSBiYWxhbmNlLiAqLwogCWludCByZXR2YWwyID0gLTE7CiAJaW50IHF1b3RhX2N1dF9ieXRlczsKIAlsb2ZmX3QgdGFpbF9wb3MgPSAwOwogCiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAKLQlpbml0X3RiX3N0cnVjdCh0aCwgJnNfY3V0X2JhbGFuY2UsIHBfc19pbm9kZS0+aV9zYiwgcF9zX3BhdGgsCi0JCSAgICAgICBuX2N1dF9zaXplKTsKKwlpbml0X3RiX3N0cnVjdCh0aCwgJnNfY3V0X2JhbGFuY2UsIGlub2RlLT5pX3NiLCBwYXRoLAorCQkgICAgICAgY3V0X3NpemUpOwogCiAJLyogUmVwZWF0IHRoaXMgbG9vcCB1bnRpbCB3ZSBlaXRoZXIgY3V0IHRoZSBpdGVtIHdpdGhvdXQgbmVlZGluZwogCSAgIHRvIGJhbGFuY2UsIG9yIHdlIGZpeF9ub2RlcyB3aXRob3V0IHNjaGVkdWxlIG9jY3VycmluZyAqLwpAQCAtMTU3NCwxNDQgKzE1MzgsMTQyIEBACiAJCSAgIGZyZWUgdW5mb3JtYXR0ZWQgbm9kZXMgd2hpY2ggYXJlIHBvaW50ZWQgdG8gYnkgdGhlIGN1dAogCQkgICBwb2ludGVycy4gKi8KIAotCQljX21vZGUgPQotCQkgICAgcHJlcGFyZV9mb3JfZGVsZXRlX29yX2N1dCh0aCwgcF9zX2lub2RlLCBwX3NfcGF0aCwKLQkJCQkJICAgICAgcF9zX2l0ZW1fa2V5LCAmbl9yZW1vdmVkLAotCQkJCQkgICAgICAmbl9jdXRfc2l6ZSwgbl9uZXdfZmlsZV9zaXplKTsKLQkJaWYgKGNfbW9kZSA9PSBNX0NPTlZFUlQpIHsKKwkJbW9kZSA9CisJCSAgICBwcmVwYXJlX2Zvcl9kZWxldGVfb3JfY3V0KHRoLCBpbm9kZSwgcGF0aCwKKwkJCQkJICAgICAgaXRlbV9rZXksICZyZW1vdmVkLAorCQkJCQkgICAgICAmY3V0X3NpemUsIG5ld19maWxlX3NpemUpOworCQlpZiAobW9kZSA9PSBNX0NPTlZFUlQpIHsKIAkJCS8qIGNvbnZlcnQgbGFzdCB1bmZvcm1hdHRlZCBub2RlIHRvIGRpcmVjdCBpdGVtIG9yIGxlYXZlCiAJCQkgICB0YWlsIGluIHRoZSB1bmZvcm1hdHRlZCBub2RlICovCi0JCQlSRkFMU0Uobl9yZXRfdmFsdWUgIT0gQ0FSUllfT04sCisJCQlSRkFMU0UocmV0X3ZhbHVlICE9IENBUlJZX09OLAogCQkJICAgICAgICJQQVAtNTU3MDogY2FuIG5vdCBjb252ZXJ0IHR3aWNlIik7CiAKLQkJCW5fcmV0X3ZhbHVlID0KLQkJCSAgICBtYXliZV9pbmRpcmVjdF90b19kaXJlY3QodGgsIHBfc19pbm9kZSwgcGFnZSwKLQkJCQkJCSAgICAgcF9zX3BhdGgsIHBfc19pdGVtX2tleSwKLQkJCQkJCSAgICAgbl9uZXdfZmlsZV9zaXplLCAmY19tb2RlKTsKLQkJCWlmIChjX21vZGUgPT0gTV9TS0lQX0JBTEFOQ0lORykKKwkJCXJldF92YWx1ZSA9CisJCQkgICAgbWF5YmVfaW5kaXJlY3RfdG9fZGlyZWN0KHRoLCBpbm9kZSwgcGFnZSwKKwkJCQkJCSAgICAgcGF0aCwgaXRlbV9rZXksCisJCQkJCQkgICAgIG5ld19maWxlX3NpemUsICZtb2RlKTsKKwkJCWlmIChtb2RlID09IE1fU0tJUF9CQUxBTkNJTkcpCiAJCQkJLyogdGFpbCBoYXMgYmVlbiBsZWZ0IGluIHRoZSB1bmZvcm1hdHRlZCBub2RlICovCi0JCQkJcmV0dXJuIG5fcmV0X3ZhbHVlOworCQkJCXJldHVybiByZXRfdmFsdWU7CiAKLQkJCW5faXNfaW5vZGVfbG9ja2VkID0gMTsKKwkJCWlzX2lub2RlX2xvY2tlZCA9IDE7CiAKIAkJCS8qIHJlbW92aW5nIG9mIGxhc3QgdW5mb3JtYXR0ZWQgbm9kZSB3aWxsIGNoYW5nZSB2YWx1ZSB3ZQogCQkJICAgaGF2ZSB0byByZXR1cm4gdG8gdHJ1bmNhdGUuIFNhdmUgaXQgKi8KLQkJCXJldHZhbDIgPSBuX3JldF92YWx1ZTsKLQkJCS8qcmV0dmFsMiA9IHBfc19zYi0+c19ibG9ja3NpemUgLSAobl9uZXdfZmlsZV9zaXplICYgKHBfc19zYi0+c19ibG9ja3NpemUgLSAxKSk7ICovCisJCQlyZXR2YWwyID0gcmV0X3ZhbHVlOworCQkJLypyZXR2YWwyID0gc2ItPnNfYmxvY2tzaXplIC0gKG5ld19maWxlX3NpemUgJiAoc2ItPnNfYmxvY2tzaXplIC0gMSkpOyAqLwogCiAJCQkvKiBTbywgd2UgaGF2ZSBwZXJmb3JtZWQgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGNvbnZlcnNpb246CiAJCQkgICBpbnNlcnRpbmcgdGhlIG5ldyBkaXJlY3QgaXRlbS4gIE5vdyB3ZSBhcmUgcmVtb3ZpbmcgdGhlCiAJCQkgICBsYXN0IHVuZm9ybWF0dGVkIG5vZGUgcG9pbnRlci4gU2V0IGtleSB0byBzZWFyY2ggZm9yCiAJCQkgICBpdC4gKi8KLQkJCXNldF9jcHVfa2V5X2tfdHlwZShwX3NfaXRlbV9rZXksIFRZUEVfSU5ESVJFQ1QpOwotCQkJcF9zX2l0ZW1fa2V5LT5rZXlfbGVuZ3RoID0gNDsKLQkJCW5fbmV3X2ZpbGVfc2l6ZSAtPQotCQkJICAgIChuX25ld19maWxlX3NpemUgJiAocF9zX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpKTsKLQkJCXRhaWxfcG9zID0gbl9uZXdfZmlsZV9zaXplOwotCQkJc2V0X2NwdV9rZXlfa19vZmZzZXQocF9zX2l0ZW1fa2V5LCBuX25ld19maWxlX3NpemUgKyAxKTsKKwkJCXNldF9jcHVfa2V5X2tfdHlwZShpdGVtX2tleSwgVFlQRV9JTkRJUkVDVCk7CisJCQlpdGVtX2tleS0+a2V5X2xlbmd0aCA9IDQ7CisJCQluZXdfZmlsZV9zaXplIC09CisJCQkgICAgKG5ld19maWxlX3NpemUgJiAoc2ItPnNfYmxvY2tzaXplIC0gMSkpOworCQkJdGFpbF9wb3MgPSBuZXdfZmlsZV9zaXplOworCQkJc2V0X2NwdV9rZXlfa19vZmZzZXQoaXRlbV9rZXksIG5ld19maWxlX3NpemUgKyAxKTsKIAkJCWlmIChzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleQotCQkJICAgIChwX3Nfc2IsIHBfc19pdGVtX2tleSwKLQkJCSAgICAgcF9zX3BhdGgpID09IFBPU0lUSU9OX05PVF9GT1VORCkgewotCQkJCXByaW50X2Jsb2NrKFBBVEhfUExBU1RfQlVGRkVSKHBfc19wYXRoKSwgMywKLQkJCQkJICAgIFBBVEhfTEFTVF9QT1NJVElPTihwX3NfcGF0aCkgLSAxLAotCQkJCQkgICAgUEFUSF9MQVNUX1BPU0lUSU9OKHBfc19wYXRoKSArIDEpOwotCQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCQkJICAgICAgICJQQVAtNTU4MDogcmVpc2VyZnNfY3V0X2Zyb21faXRlbTogaXRlbSB0byBjb252ZXJ0IGRvZXMgbm90IGV4aXN0ICglSykiLAotCQkJCQkgICAgICAgcF9zX2l0ZW1fa2V5KTsKKwkJCSAgICAoc2IsIGl0ZW1fa2V5LAorCQkJICAgICBwYXRoKSA9PSBQT1NJVElPTl9OT1RfRk9VTkQpIHsKKwkJCQlwcmludF9ibG9jayhQQVRIX1BMQVNUX0JVRkZFUihwYXRoKSwgMywKKwkJCQkJICAgIFBBVEhfTEFTVF9QT1NJVElPTihwYXRoKSAtIDEsCisJCQkJCSAgICBQQVRIX0xBU1RfUE9TSVRJT04ocGF0aCkgKyAxKTsKKwkJCQlyZWlzZXJmc19wYW5pYyhzYiwgIlBBUC01NTgwIiwgIml0ZW0gdG8gIgorCQkJCQkgICAgICAgImNvbnZlcnQgZG9lcyBub3QgZXhpc3QgKCVLKSIsCisJCQkJCSAgICAgICBpdGVtX2tleSk7CiAJCQl9CiAJCQljb250aW51ZTsKIAkJfQotCQlpZiAobl9jdXRfc2l6ZSA9PSAwKSB7Ci0JCQlwYXRocmVsc2UocF9zX3BhdGgpOworCQlpZiAoY3V0X3NpemUgPT0gMCkgeworCQkJcGF0aHJlbHNlKHBhdGgpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAotCQlzX2N1dF9iYWxhbmNlLmluc2VydF9zaXplWzBdID0gbl9jdXRfc2l6ZTsKKwkJc19jdXRfYmFsYW5jZS5pbnNlcnRfc2l6ZVswXSA9IGN1dF9zaXplOwogCi0JCW5fcmV0X3ZhbHVlID0gZml4X25vZGVzKGNfbW9kZSwgJnNfY3V0X2JhbGFuY2UsIE5VTEwsIE5VTEwpOwotCQlpZiAobl9yZXRfdmFsdWUgIT0gUkVQRUFUX1NFQVJDSCkKKwkJcmV0X3ZhbHVlID0gZml4X25vZGVzKG1vZGUsICZzX2N1dF9iYWxhbmNlLCBOVUxMLCBOVUxMKTsKKwkJaWYgKHJldF92YWx1ZSAhPSBSRVBFQVRfU0VBUkNIKQogCQkJYnJlYWs7CiAKLQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGN1dF9mcm9tX2l0ZW1fcmVzdGFydGVkKTsKKwkJUFJPQ19JTkZPX0lOQyhzYiwgY3V0X2Zyb21faXRlbV9yZXN0YXJ0ZWQpOwogCi0JCW5fcmV0X3ZhbHVlID0KLQkJICAgIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHBfc19zYiwgcF9zX2l0ZW1fa2V5LCBwX3NfcGF0aCk7Ci0JCWlmIChuX3JldF92YWx1ZSA9PSBQT1NJVElPTl9GT1VORCkKKwkJcmV0X3ZhbHVlID0KKwkJICAgIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHNiLCBpdGVtX2tleSwgcGF0aCk7CisJCWlmIChyZXRfdmFsdWUgPT0gUE9TSVRJT05fRk9VTkQpCiAJCQljb250aW51ZTsKIAotCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkgIlBBUC01NjEwOiByZWlzZXJmc19jdXRfZnJvbV9pdGVtOiBpdGVtICVLIG5vdCBmb3VuZCIsCi0JCQkJIHBfc19pdGVtX2tleSk7CisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJQQVAtNTYxMCIsICJpdGVtICVLIG5vdCBmb3VuZCIsCisJCQkJIGl0ZW1fa2V5KTsKIAkJdW5maXhfbm9kZXMoJnNfY3V0X2JhbGFuY2UpOwotCQlyZXR1cm4gKG5fcmV0X3ZhbHVlID09IElPX0VSUk9SKSA/IC1FSU8gOiAtRU5PRU5UOworCQlyZXR1cm4gKHJldF92YWx1ZSA9PSBJT19FUlJPUikgPyAtRUlPIDogLUVOT0VOVDsKIAl9CQkJLyogd2hpbGUgKi8KIAogCS8vIGNoZWNrIGZpeF9ub2RlcyByZXN1bHRzIChJT19FUlJPUiBvciBOT19ESVNLX1NQQUNFKQotCWlmIChuX3JldF92YWx1ZSAhPSBDQVJSWV9PTikgewotCQlpZiAobl9pc19pbm9kZV9sb2NrZWQpIHsKKwlpZiAocmV0X3ZhbHVlICE9IENBUlJZX09OKSB7CisJCWlmIChpc19pbm9kZV9sb2NrZWQpIHsKIAkJCS8vIEZJWE1FOiB0aGlzIHNlZW1zIHRvIGJlIG5vdCBuZWVkZWQ6IHdlIGFyZSBhbHdheXMgYWJsZQogCQkJLy8gdG8gY3V0IGl0ZW0KLQkJCWluZGlyZWN0X3RvX2RpcmVjdF9yb2xsX2JhY2sodGgsIHBfc19pbm9kZSwgcF9zX3BhdGgpOworCQkJaW5kaXJlY3RfdG9fZGlyZWN0X3JvbGxfYmFjayh0aCwgaW5vZGUsIHBhdGgpOwogCQl9Ci0JCWlmIChuX3JldF92YWx1ZSA9PSBOT19ESVNLX1NQQUNFKQotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsICJOT19ESVNLX1NQQUNFIik7CisJCWlmIChyZXRfdmFsdWUgPT0gTk9fRElTS19TUEFDRSkKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJyZWlzZXJmcy01MDkyIiwKKwkJCQkJICJOT19ESVNLX1NQQUNFIik7CiAJCXVuZml4X25vZGVzKCZzX2N1dF9iYWxhbmNlKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJLyogZ28gYWhlYWQgYW5kIHBlcmZvcm0gYmFsYW5jaW5nICovCiAKLQlSRkFMU0UoY19tb2RlID09IE1fUEFTVEUgfHwgY19tb2RlID09IE1fSU5TRVJULCAiaW52YWxpZCBtb2RlIik7CisJUkZBTFNFKG1vZGUgPT0gTV9QQVNURSB8fCBtb2RlID09IE1fSU5TRVJULCAiaW52YWxpZCBtb2RlIik7CiAKIAkvKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgbmVlZCB0byBiZSBjdXQgZnJvbSB0aGUgaXRlbS4gKi8KIAlxdW90YV9jdXRfYnl0ZXMgPQotCSAgICAoY19tb2RlID09Ci0JICAgICBNX0RFTEVURSkgPyBpaF9pdGVtX2xlbihnZXRfaWgocF9zX3BhdGgpKSA6IC1zX2N1dF9iYWxhbmNlLgorCSAgICAobW9kZSA9PQorCSAgICAgTV9ERUxFVEUpID8gaWhfaXRlbV9sZW4oZ2V0X2loKHBhdGgpKSA6IC1zX2N1dF9iYWxhbmNlLgogCSAgICBpbnNlcnRfc2l6ZVswXTsKIAlpZiAocmV0dmFsMiA9PSAtMSkKLQkJbl9yZXRfdmFsdWUgPSBjYWxjX2RlbGV0ZWRfYnl0ZXNfbnVtYmVyKCZzX2N1dF9iYWxhbmNlLCBjX21vZGUpOworCQlyZXRfdmFsdWUgPSBjYWxjX2RlbGV0ZWRfYnl0ZXNfbnVtYmVyKCZzX2N1dF9iYWxhbmNlLCBtb2RlKTsKIAllbHNlCi0JCW5fcmV0X3ZhbHVlID0gcmV0dmFsMjsKKwkJcmV0X3ZhbHVlID0gcmV0dmFsMjsKIAogCS8qIEZvciBkaXJlY3QgaXRlbXMsIHdlIG9ubHkgY2hhbmdlIHRoZSBxdW90YSB3aGVuIGRlbGV0aW5nIHRoZSBsYXN0CiAJICoqIGl0ZW0uCiAJICovCiAJcF9sZV9paCA9IFBBVEhfUElURU1fSEVBRChzX2N1dF9iYWxhbmNlLnRiX3BhdGgpOwotCWlmICghU19JU0xOSyhwX3NfaW5vZGUtPmlfbW9kZSkgJiYgaXNfZGlyZWN0X2xlX2loKHBfbGVfaWgpKSB7Ci0JCWlmIChjX21vZGUgPT0gTV9ERUxFVEUgJiYKLQkJICAgIChsZV9paF9rX29mZnNldChwX2xlX2loKSAmIChwX3Nfc2ItPnNfYmxvY2tzaXplIC0gMSkpID09CisJaWYgKCFTX0lTTE5LKGlub2RlLT5pX21vZGUpICYmIGlzX2RpcmVjdF9sZV9paChwX2xlX2loKSkgeworCQlpZiAobW9kZSA9PSBNX0RFTEVURSAmJgorCQkgICAgKGxlX2loX2tfb2Zmc2V0KHBfbGVfaWgpICYgKHNiLT5zX2Jsb2Nrc2l6ZSAtIDEpKSA9PQogCQkgICAgMSkgewogCQkJLy8gRklYTUU6IHRoaXMgaXMgdG8ga2VlcCAzLjUgaGFwcHkKLQkJCVJFSVNFUkZTX0kocF9zX2lub2RlKS0+aV9maXJzdF9kaXJlY3RfYnl0ZSA9IFUzMl9NQVg7Ci0JCQlxdW90YV9jdXRfYnl0ZXMgPSBwX3Nfc2ItPnNfYmxvY2tzaXplICsgVU5GTV9QX1NJWkU7CisJCQlSRUlTRVJGU19JKGlub2RlKS0+aV9maXJzdF9kaXJlY3RfYnl0ZSA9IFUzMl9NQVg7CisJCQlxdW90YV9jdXRfYnl0ZXMgPSBzYi0+c19ibG9ja3NpemUgKyBVTkZNX1BfU0laRTsKIAkJfSBlbHNlIHsKIAkJCXF1b3RhX2N1dF9ieXRlcyA9IDA7CiAJCX0KIAl9CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCi0JaWYgKG5faXNfaW5vZGVfbG9ja2VkKSB7CisJaWYgKGlzX2lub2RlX2xvY2tlZCkgewogCQlzdHJ1Y3QgaXRlbV9oZWFkICpsZV9paCA9CiAJCSAgICBQQVRIX1BJVEVNX0hFQUQoc19jdXRfYmFsYW5jZS50Yl9wYXRoKTsKIAkJLyogd2UgYXJlIGdvaW5nIHRvIGNvbXBsZXRlIGluZGlyZWN0MmRpcmVjdCBjb252ZXJzaW9uLiBNYWtlCiAJCSAgIHN1cmUsIHRoYXQgd2UgZXhhY3RseSByZW1vdmUgbGFzdCB1bmZvcm1hdHRlZCBub2RlIHBvaW50ZXIKIAkJICAgb2YgdGhlIGl0ZW0gKi8KIAkJaWYgKCFpc19pbmRpcmVjdF9sZV9paChsZV9paCkpCi0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJICAgICAgICJ2cy01NjUyOiByZWlzZXJmc19jdXRfZnJvbV9pdGVtOiAiCisJCQlyZWlzZXJmc19wYW5pYyhzYiwgInZzLTU2NTIiLAogCQkJCSAgICAgICAiaXRlbSBtdXN0IGJlIGluZGlyZWN0ICVoIiwgbGVfaWgpOwogCi0JCWlmIChjX21vZGUgPT0gTV9ERUxFVEUgJiYgaWhfaXRlbV9sZW4obGVfaWgpICE9IFVORk1fUF9TSVpFKQotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCSAgICAgICAidnMtNTY1MzogcmVpc2VyZnNfY3V0X2Zyb21faXRlbTogIgotCQkJCSAgICAgICAiY29tcGxldGluZyBpbmRpcmVjdDJkaXJlY3QgY29udmVyc2lvbiBpbmRpcmVjdCBpdGVtICVoICIKLQkJCQkgICAgICAgImJlaW5nIGRlbGV0ZWQgbXVzdCBiZSBvZiA0IGJ5dGUgbG9uZyIsCi0JCQkJICAgICAgIGxlX2loKTsKKwkJaWYgKG1vZGUgPT0gTV9ERUxFVEUgJiYgaWhfaXRlbV9sZW4obGVfaWgpICE9IFVORk1fUF9TSVpFKQorCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJ2cy01NjUzIiwgImNvbXBsZXRpbmcgIgorCQkJCSAgICAgICAiaW5kaXJlY3QyZGlyZWN0IGNvbnZlcnNpb24gaW5kaXJlY3QgIgorCQkJCSAgICAgICAiaXRlbSAlaCBiZWluZyBkZWxldGVkIG11c3QgYmUgb2YgIgorCQkJCSAgICAgICAiNCBieXRlIGxvbmciLCBsZV9paCk7CiAKLQkJaWYgKGNfbW9kZSA9PSBNX0NVVAorCQlpZiAobW9kZSA9PSBNX0NVVAogCQkgICAgJiYgc19jdXRfYmFsYW5jZS5pbnNlcnRfc2l6ZVswXSAhPSAtVU5GTV9QX1NJWkUpIHsKLQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCQkgICAgICAgInZzLTU2NTQ6IHJlaXNlcmZzX2N1dF9mcm9tX2l0ZW06ICIKLQkJCQkgICAgICAgImNhbiBub3QgY29tcGxldGUgaW5kaXJlY3QyZGlyZWN0IGNvbnZlcnNpb24gb2YgJWggKENVVCwgaW5zZXJ0X3NpemU9PSVkKSIsCisJCQlyZWlzZXJmc19wYW5pYyhzYiwgInZzLTU2NTQiLCAiY2FuIG5vdCBjb21wbGV0ZSAiCisJCQkJICAgICAgICJpbmRpcmVjdDJkaXJlY3QgY29udmVyc2lvbiBvZiAlaCAiCisJCQkJICAgICAgICIoQ1VULCBpbnNlcnRfc2l6ZT09JWQpIiwKIAkJCQkgICAgICAgbGVfaWgsIHNfY3V0X2JhbGFuY2UuaW5zZXJ0X3NpemVbMF0pOwogCQl9CiAJCS8qIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBtYWtlIHN1cmUsIHRoYXQgcmlnaHQgbmVpZ2hib3JpbmcKQEAgLTE3MTksMjMgKzE2ODEsMjMgQEAKIAl9CiAjZW5kaWYKIAotCWRvX2JhbGFuY2UoJnNfY3V0X2JhbGFuY2UsIE5VTEwsIE5VTEwsIGNfbW9kZSk7Ci0JaWYgKG5faXNfaW5vZGVfbG9ja2VkKSB7CisJZG9fYmFsYW5jZSgmc19jdXRfYmFsYW5jZSwgTlVMTCwgTlVMTCwgbW9kZSk7CisJaWYgKGlzX2lub2RlX2xvY2tlZCkgewogCQkvKiB3ZSd2ZSBkb25lIGFuIGluZGlyZWN0LT5kaXJlY3QgY29udmVyc2lvbi4gIHdoZW4gdGhlIGRhdGEgYmxvY2sKIAkJICoqIHdhcyBmcmVlZCwgaXQgd2FzIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBvZiBibG9ja3MgdGhhdCBtdXN0CiAJCSAqKiBiZSBmbHVzaGVkIGJlZm9yZSB0aGUgdHJhbnNhY3Rpb24gY29tbWl0cywgbWFrZSBzdXJlIHRvCiAJCSAqKiB1bm1hcCBhbmQgaW52YWxpZGF0ZSBpdAogCQkgKi8KIAkJdW5tYXBfYnVmZmVycyhwYWdlLCB0YWlsX3Bvcyk7Ci0JCVJFSVNFUkZTX0kocF9zX2lub2RlKS0+aV9mbGFncyAmPSB+aV9wYWNrX29uX2Nsb3NlX21hc2s7CisJCVJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzICY9IH5pX3BhY2tfb25fY2xvc2VfbWFzazsKIAl9CiAjaWZkZWYgUkVJU0VSUVVPVEFfREVCVUcKLQlyZWlzZXJmc19kZWJ1ZyhwX3NfaW5vZGUtPmlfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCisJcmVpc2VyZnNfZGVidWcoaW5vZGUtPmlfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCSAgICAgICAicmVpc2VycXVvdGEgY3V0X2Zyb21faXRlbSgpOiBmcmVlaW5nICV1IGlkPSV1IHR5cGU9JWMiLAotCQkgICAgICAgcXVvdGFfY3V0X2J5dGVzLCBwX3NfaW5vZGUtPmlfdWlkLCAnPycpOworCQkgICAgICAgcXVvdGFfY3V0X2J5dGVzLCBpbm9kZS0+aV91aWQsICc/Jyk7CiAjZW5kaWYKLQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KHBfc19pbm9kZSwgcXVvdGFfY3V0X2J5dGVzKTsKLQlyZXR1cm4gbl9yZXRfdmFsdWU7CisJdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgcXVvdGFfY3V0X2J5dGVzKTsKKwlyZXR1cm4gcmV0X3ZhbHVlOwogfQogCiBzdGF0aWMgdm9pZCB0cnVuY2F0ZV9kaXJlY3Rvcnkoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCkBAIC0xNzQzLDggKzE3MDUsNyBAQAogewogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCWlmIChpbm9kZS0+aV9ubGluaykKLQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCQkgInZzLTU2NTU6IHRydW5jYXRlX2RpcmVjdG9yeTogbGluayBjb3VudCAhPSAwIik7CisJCXJlaXNlcmZzX2Vycm9yKGlub2RlLT5pX3NiLCAidnMtNTY1NSIsICJsaW5rIGNvdW50ICE9IDAiKTsKIAogCXNldF9sZV9rZXlfa19vZmZzZXQoS0VZX0ZPUk1BVF8zXzUsIElOT0RFX1BLRVkoaW5vZGUpLCBET1RfT0ZGU0VUKTsKIAlzZXRfbGVfa2V5X2tfdHlwZShLRVlfRk9STUFUXzNfNSwgSU5PREVfUEtFWShpbm9kZSksIFRZUEVfRElSRU5UUlkpOwpAQCAtMTc1Niw4ICsxNzE3LDggQEAKIAogLyogVHJ1bmNhdGUgZmlsZSB0byB0aGUgbmV3IHNpemUuIE5vdGUsIHRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHRyYW5zYWN0aW9uCiAgICBhbHJlYWR5IHN0YXJ0ZWQgKi8KLWludCByZWlzZXJmc19kb190cnVuY2F0ZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgc3RydWN0IGlub2RlICpwX3NfaW5vZGUsCS8qIC0+aV9zaXplIGNvbnRhaW5zIG5ldwotCQkJCQkJCQkJCQkJICAgc2l6ZSAqLworaW50IHJlaXNlcmZzX2RvX3RydW5jYXRlKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAorCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAkvKiAtPmlfc2l6ZSBjb250YWlucyBuZXcgc2l6ZSAqLwogCQkJIHN0cnVjdCBwYWdlICpwYWdlLAkvKiB1cCB0byBkYXRlIGZvciBsYXN0IGJsb2NrICovCiAJCQkgaW50IHVwZGF0ZV90aW1lc3RhbXBzCS8qIHdoZW4gaXQgaXMgY2FsbGVkIGJ5CiAJCQkJCQkgICBmaWxlX3JlbGVhc2UgdG8gY29udmVydApAQCAtMTc2OCw0NyArMTcyOSw0NSBAQAogCUlOSVRJQUxJWkVfUEFUSChzX3NlYXJjaF9wYXRoKTsJLyogUGF0aCB0byB0aGUgY3VycmVudCBvYmplY3QgaXRlbS4gKi8KIAlzdHJ1Y3QgaXRlbV9oZWFkICpwX2xlX2loOwkvKiBQb2ludGVyIHRvIGFuIGl0ZW0gaGVhZGVyLiAqLwogCXN0cnVjdCBjcHVfa2V5IHNfaXRlbV9rZXk7CS8qIEtleSB0byBzZWFyY2ggZm9yIGEgcHJldmlvdXMgZmlsZSBpdGVtLiAqLwotCWxvZmZfdCBuX2ZpbGVfc2l6ZSwJLyogT2xkIGZpbGUgc2l6ZS4gKi8KLQkgbl9uZXdfZmlsZV9zaXplOwkvKiBOZXcgZmlsZSBzaXplLiAqLwotCWludCBuX2RlbGV0ZWQ7CQkvKiBOdW1iZXIgb2YgZGVsZXRlZCBvciB0cnVuY2F0ZWQgYnl0ZXMuICovCisJbG9mZl90IGZpbGVfc2l6ZSwJLyogT2xkIGZpbGUgc2l6ZS4gKi8KKwkgbmV3X2ZpbGVfc2l6ZTsJLyogTmV3IGZpbGUgc2l6ZS4gKi8KKwlpbnQgZGVsZXRlZDsJCS8qIE51bWJlciBvZiBkZWxldGVkIG9yIHRydW5jYXRlZCBieXRlcy4gKi8KIAlpbnQgcmV0dmFsOwogCWludCBlcnIgPSAwOwogCiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAJaWYgKCEKLQkgICAgKFNfSVNSRUcocF9zX2lub2RlLT5pX21vZGUpIHx8IFNfSVNESVIocF9zX2lub2RlLT5pX21vZGUpCi0JICAgICB8fCBTX0lTTE5LKHBfc19pbm9kZS0+aV9tb2RlKSkpCisJICAgIChTX0lTUkVHKGlub2RlLT5pX21vZGUpIHx8IFNfSVNESVIoaW5vZGUtPmlfbW9kZSkKKwkgICAgIHx8IFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpKQogCQlyZXR1cm4gMDsKIAotCWlmIChTX0lTRElSKHBfc19pbm9kZS0+aV9tb2RlKSkgeworCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7CiAJCS8vIGRlbGV0aW9uIG9mIGRpcmVjdG9yeSAtIG5vIG5lZWQgdG8gdXBkYXRlIHRpbWVzdGFtcHMKLQkJdHJ1bmNhdGVfZGlyZWN0b3J5KHRoLCBwX3NfaW5vZGUpOworCQl0cnVuY2F0ZV9kaXJlY3RvcnkodGgsIGlub2RlKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJLyogR2V0IG5ldyBmaWxlIHNpemUuICovCi0Jbl9uZXdfZmlsZV9zaXplID0gcF9zX2lub2RlLT5pX3NpemU7CisJbmV3X2ZpbGVfc2l6ZSA9IGlub2RlLT5pX3NpemU7CiAKIAkvLyBGSVhNRTogbm90ZSwgdGhhdCBrZXkgdHlwZSBpcyB1bmltcG9ydGFudCBoZXJlCi0JbWFrZV9jcHVfa2V5KCZzX2l0ZW1fa2V5LCBwX3NfaW5vZGUsIG1heF9yZWlzZXJmc19vZmZzZXQocF9zX2lub2RlKSwKKwltYWtlX2NwdV9rZXkoJnNfaXRlbV9rZXksIGlub2RlLCBtYXhfcmVpc2VyZnNfb2Zmc2V0KGlub2RlKSwKIAkJICAgICBUWVBFX0RJUkVDVCwgMyk7CiAKIAlyZXR2YWwgPQotCSAgICBzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShwX3NfaW5vZGUtPmlfc2IsICZzX2l0ZW1fa2V5LAorCSAgICBzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShpbm9kZS0+aV9zYiwgJnNfaXRlbV9rZXksCiAJCQkJICAgICAgICZzX3NlYXJjaF9wYXRoKTsKIAlpZiAocmV0dmFsID09IElPX0VSUk9SKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX2lub2RlLT5pX3NiLAotCQkJCSAidnMtNTY1NzogcmVpc2VyZnNfZG9fdHJ1bmNhdGU6ICIKLQkJCQkgImkvbyBmYWlsdXJlIG9jY3VycmVkIHRyeWluZyB0byB0cnVuY2F0ZSAlSyIsCi0JCQkJICZzX2l0ZW1fa2V5KTsKKwkJcmVpc2VyZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJ2cy01NjU3IiwKKwkJCSAgICAgICAiaS9vIGZhaWx1cmUgb2NjdXJyZWQgdHJ5aW5nIHRvIHRydW5jYXRlICVLIiwKKwkJCSAgICAgICAmc19pdGVtX2tleSk7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KIAlpZiAocmV0dmFsID09IFBPU0lUSU9OX0ZPVU5EIHx8IHJldHZhbCA9PSBGSUxFX05PVF9GT1VORCkgewotCQlyZWlzZXJmc193YXJuaW5nKHBfc19pbm9kZS0+aV9zYiwKLQkJCQkgIlBBUC01NjYwOiByZWlzZXJmc19kb190cnVuY2F0ZTogIgotCQkJCSAid3JvbmcgcmVzdWx0ICVkIG9mIHNlYXJjaCBmb3IgJUsiLCByZXR2YWwsCi0JCQkJICZzX2l0ZW1fa2V5KTsKKwkJcmVpc2VyZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJQQVAtNTY2MCIsCisJCQkgICAgICAgIndyb25nIHJlc3VsdCAlZCBvZiBzZWFyY2ggZm9yICVLIiwgcmV0dmFsLAorCQkJICAgICAgICZzX2l0ZW1fa2V5KTsKIAogCQllcnIgPSAtRUlPOwogCQlnb3RvIG91dDsKQEAgLTE4MTksNTYgKzE3NzgsNTYgQEAKIAkvKiBHZXQgcmVhbCBmaWxlIHNpemUgKHRvdGFsIGxlbmd0aCBvZiBhbGwgZmlsZSBpdGVtcykgKi8KIAlwX2xlX2loID0gUEFUSF9QSVRFTV9IRUFEKCZzX3NlYXJjaF9wYXRoKTsKIAlpZiAoaXNfc3RhdGRhdGFfbGVfaWgocF9sZV9paCkpCi0JCW5fZmlsZV9zaXplID0gMDsKKwkJZmlsZV9zaXplID0gMDsKIAllbHNlIHsKIAkJbG9mZl90IG9mZnNldCA9IGxlX2loX2tfb2Zmc2V0KHBfbGVfaWgpOwogCQlpbnQgYnl0ZXMgPQotCQkgICAgb3BfYnl0ZXNfbnVtYmVyKHBfbGVfaWgsIHBfc19pbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOworCQkgICAgb3BfYnl0ZXNfbnVtYmVyKHBfbGVfaWgsIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7CiAKIAkJLyogdGhpcyBtYXkgbWlzbWF0Y2ggd2l0aCByZWFsIGZpbGUgc2l6ZTogaWYgbGFzdCBkaXJlY3QgaXRlbQogCQkgICBoYWQgbm8gcGFkZGluZyB6ZXJvcyBhbmQgbGFzdCB1bmZvcm1hdHRlZCBub2RlIGhhZCBubyBmcmVlCiAJCSAgIHNwYWNlLCB0aGlzIGZpbGUgd291bGQgaGF2ZSB0aGlzIGZpbGUgc2l6ZSAqLwotCQluX2ZpbGVfc2l6ZSA9IG9mZnNldCArIGJ5dGVzIC0gMTsKKwkJZmlsZV9zaXplID0gb2Zmc2V0ICsgYnl0ZXMgLSAxOwogCX0KIAkvKgogCSAqIGFyZSB3ZSBkb2luZyBhIGZ1bGwgdHJ1bmNhdGUgb3IgZGVsZXRlLCBpZiBzbwogCSAqIGtpY2sgaW4gdGhlIHJlYWRhIGNvZGUKIAkgKi8KLQlpZiAobl9uZXdfZmlsZV9zaXplID09IDApCisJaWYgKG5ld19maWxlX3NpemUgPT0gMCkKIAkJc19zZWFyY2hfcGF0aC5yZWFkYSA9IFBBVEhfUkVBREEgfCBQQVRIX1JFQURBX0JBQ0s7CiAKLQlpZiAobl9maWxlX3NpemUgPT0gMCB8fCBuX2ZpbGVfc2l6ZSA8IG5fbmV3X2ZpbGVfc2l6ZSkgeworCWlmIChmaWxlX3NpemUgPT0gMCB8fCBmaWxlX3NpemUgPCBuZXdfZmlsZV9zaXplKSB7CiAJCWdvdG8gdXBkYXRlX2FuZF9vdXQ7CiAJfQogCiAJLyogVXBkYXRlIGtleSB0byBzZWFyY2ggZm9yIHRoZSBsYXN0IGZpbGUgaXRlbS4gKi8KLQlzZXRfY3B1X2tleV9rX29mZnNldCgmc19pdGVtX2tleSwgbl9maWxlX3NpemUpOworCXNldF9jcHVfa2V5X2tfb2Zmc2V0KCZzX2l0ZW1fa2V5LCBmaWxlX3NpemUpOwogCiAJZG8gewogCQkvKiBDdXQgb3IgZGVsZXRlIGZpbGUgaXRlbS4gKi8KLQkJbl9kZWxldGVkID0KKwkJZGVsZXRlZCA9CiAJCSAgICByZWlzZXJmc19jdXRfZnJvbV9pdGVtKHRoLCAmc19zZWFyY2hfcGF0aCwgJnNfaXRlbV9rZXksCi0JCQkJCSAgIHBfc19pbm9kZSwgcGFnZSwgbl9uZXdfZmlsZV9zaXplKTsKLQkJaWYgKG5fZGVsZXRlZCA8IDApIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX2lub2RlLT5pX3NiLAotCQkJCQkgInZzLTU2NjU6IHJlaXNlcmZzX2RvX3RydW5jYXRlOiByZWlzZXJmc19jdXRfZnJvbV9pdGVtIGZhaWxlZCIpOworCQkJCQkgICBpbm9kZSwgcGFnZSwgbmV3X2ZpbGVfc2l6ZSk7CisJCWlmIChkZWxldGVkIDwgMCkgeworCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgInZzLTU2NjUiLAorCQkJCQkgInJlaXNlcmZzX2N1dF9mcm9tX2l0ZW0gZmFpbGVkIik7CiAJCQlyZWlzZXJmc19jaGVja19wYXRoKCZzX3NlYXJjaF9wYXRoKTsKIAkJCXJldHVybiAwOwogCQl9CiAKLQkJUkZBTFNFKG5fZGVsZXRlZCA+IG5fZmlsZV9zaXplLAorCQlSRkFMU0UoZGVsZXRlZCA+IGZpbGVfc2l6ZSwKIAkJICAgICAgICJQQVAtNTY3MDogcmVpc2VyZnNfY3V0X2Zyb21faXRlbTogdG9vIG1hbnkgYnl0ZXMgZGVsZXRlZDogZGVsZXRlZCAlZCwgZmlsZV9zaXplICVsdSwgaXRlbV9rZXkgJUsiLAotCQkgICAgICAgbl9kZWxldGVkLCBuX2ZpbGVfc2l6ZSwgJnNfaXRlbV9rZXkpOworCQkgICAgICAgZGVsZXRlZCwgZmlsZV9zaXplLCAmc19pdGVtX2tleSk7CiAKIAkJLyogQ2hhbmdlIGtleSB0byBzZWFyY2ggdGhlIGxhc3QgZmlsZSBpdGVtLiAqLwotCQluX2ZpbGVfc2l6ZSAtPSBuX2RlbGV0ZWQ7CisJCWZpbGVfc2l6ZSAtPSBkZWxldGVkOwogCi0JCXNldF9jcHVfa2V5X2tfb2Zmc2V0KCZzX2l0ZW1fa2V5LCBuX2ZpbGVfc2l6ZSk7CisJCXNldF9jcHVfa2V5X2tfb2Zmc2V0KCZzX2l0ZW1fa2V5LCBmaWxlX3NpemUpOwogCiAJCS8qIFdoaWxlIHRoZXJlIGFyZSBieXRlcyB0byB0cnVuY2F0ZSBhbmQgcHJldmlvdXMgZmlsZSBpdGVtIGlzIHByZXNlbnRlZCBpbiB0aGUgdHJlZS4gKi8KIAogCQkvKgotCQkgKiogVGhpcyBsb29wIGNvdWxkIHRha2UgYSByZWFsbHkgbG9uZyB0aW1lLCBhbmQgY291bGQgbG9nIAorCQkgKiogVGhpcyBsb29wIGNvdWxkIHRha2UgYSByZWFsbHkgbG9uZyB0aW1lLCBhbmQgY291bGQgbG9nCiAJCSAqKiBtYW55IG1vcmUgYmxvY2tzIHRoYW4gYSB0cmFuc2FjdGlvbiBjYW4gaG9sZC4gIFNvLCB3ZSBkbyBhIHBvbGl0ZQogCQkgKiogam91cm5hbCBlbmQgaGVyZSwgYW5kIGlmIHRoZSB0cmFuc2FjdGlvbiBuZWVkcyBlbmRpbmcsIHdlIG1ha2UKIAkJICoqIHN1cmUgdGhlIGZpbGUgaXMgY29uc2lzdGVudCBiZWZvcmUgZW5kaW5nIHRoZSBjdXJyZW50IHRyYW5zCkBAIC0xODc3LDM3ICsxODM2LDM4IEBACiAJCWlmIChqb3VybmFsX3RyYW5zYWN0aW9uX3Nob3VsZF9lbmQodGgsIDApIHx8CiAJCSAgICByZWlzZXJmc190cmFuc2FjdGlvbl9mcmVlX3NwYWNlKHRoKSA8PSBKT1VSTkFMX0ZPUl9GUkVFX0JMT0NLX0FORF9VUERBVEVfU0QpIHsKIAkJCWludCBvcmlnX2xlbl9hbGxvYyA9IHRoLT50X2Jsb2Nrc19hbGxvY2F0ZWQ7Ci0JCQlkZWNyZW1lbnRfY291bnRlcnNfaW5fcGF0aCgmc19zZWFyY2hfcGF0aCk7CisJCQlwYXRocmVsc2UoJnNfc2VhcmNoX3BhdGgpOwogCiAJCQlpZiAodXBkYXRlX3RpbWVzdGFtcHMpIHsKLQkJCQlwX3NfaW5vZGUtPmlfbXRpbWUgPSBwX3NfaW5vZGUtPmlfY3RpbWUgPQotCQkJCSAgICBDVVJSRU5UX1RJTUVfU0VDOworCQkJCWlub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKKwkJCQlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJCQl9Ci0JCQlyZWlzZXJmc191cGRhdGVfc2QodGgsIHBfc19pbm9kZSk7CisJCQlyZWlzZXJmc191cGRhdGVfc2QodGgsIGlub2RlKTsKIAotCQkJZXJyID0gam91cm5hbF9lbmQodGgsIHBfc19pbm9kZS0+aV9zYiwgb3JpZ19sZW5fYWxsb2MpOworCQkJZXJyID0gam91cm5hbF9lbmQodGgsIGlub2RlLT5pX3NiLCBvcmlnX2xlbl9hbGxvYyk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gb3V0OwotCQkJZXJyID0gam91cm5hbF9iZWdpbih0aCwgcF9zX2lub2RlLT5pX3NiLAorCQkJZXJyID0gam91cm5hbF9iZWdpbih0aCwgaW5vZGUtPmlfc2IsCiAJCQkJCSAgICBKT1VSTkFMX0ZPUl9GUkVFX0JMT0NLX0FORF9VUERBVEVfU0QgKyBKT1VSTkFMX1BFUl9CQUxBTkNFX0NOVCAqIDQpIDsKIAkJCWlmIChlcnIpCiAJCQkJZ290byBvdXQ7Ci0JCQlyZWlzZXJmc191cGRhdGVfaW5vZGVfdHJhbnNhY3Rpb24ocF9zX2lub2RlKTsKKwkJCXJlaXNlcmZzX3VwZGF0ZV9pbm9kZV90cmFuc2FjdGlvbihpbm9kZSk7CiAJCX0KLQl9IHdoaWxlIChuX2ZpbGVfc2l6ZSA+IFJPVU5EX1VQKG5fbmV3X2ZpbGVfc2l6ZSkgJiYKLQkJIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHBfc19pbm9kZS0+aV9zYiwgJnNfaXRlbV9rZXksCisJfSB3aGlsZSAoZmlsZV9zaXplID4gUk9VTkRfVVAobmV3X2ZpbGVfc2l6ZSkgJiYKKwkJIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KGlub2RlLT5pX3NiLCAmc19pdGVtX2tleSwKIAkJCQkJICAgICZzX3NlYXJjaF9wYXRoKSA9PSBQT1NJVElPTl9GT1VORCk7CiAKLQlSRkFMU0Uobl9maWxlX3NpemUgPiBST1VORF9VUChuX25ld19maWxlX3NpemUpLAorCVJGQUxTRShmaWxlX3NpemUgPiBST1VORF9VUChuZXdfZmlsZV9zaXplKSwKIAkgICAgICAgIlBBUC01NjgwOiB0cnVuY2F0ZSBkaWQgbm90IGZpbmlzaDogbmV3X2ZpbGVfc2l6ZSAlTGQsIGN1cnJlbnQgJUxkLCBvaWQgJWQiLAotCSAgICAgICBuX25ld19maWxlX3NpemUsIG5fZmlsZV9zaXplLCBzX2l0ZW1fa2V5Lm9uX2Rpc2tfa2V5Lmtfb2JqZWN0aWQpOworCSAgICAgICBuZXdfZmlsZV9zaXplLCBmaWxlX3NpemUsIHNfaXRlbV9rZXkub25fZGlza19rZXkua19vYmplY3RpZCk7CiAKICAgICAgIHVwZGF0ZV9hbmRfb3V0OgogCWlmICh1cGRhdGVfdGltZXN0YW1wcykgewogCQkvLyB0aGlzIGlzIHRydW5jYXRlLCBub3QgZmlsZSBjbG9zaW5nCi0JCXBfc19pbm9kZS0+aV9tdGltZSA9IHBfc19pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CisJCWlub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKKwkJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCX0KLQlyZWlzZXJmc191cGRhdGVfc2QodGgsIHBfc19pbm9kZSk7CisJcmVpc2VyZnNfdXBkYXRlX3NkKHRoLCBpbm9kZSk7CiAKICAgICAgIG91dDoKIAlwYXRocmVsc2UoJnNfc2VhcmNoX3BhdGgpOwpAQCAtMTkxNyw3ICsxODc3LDcgQEAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKIC8vIHRoaXMgbWFrZXMgc3VyZSwgdGhhdCB3ZSBfX2FwcGVuZF9fLCBub3Qgb3ZlcndyaXRlIG9yIGFkZCBob2xlcwogc3RhdGljIHZvaWQgY2hlY2tfcmVzZWFyY2hfZm9yX3Bhc3RlKHN0cnVjdCB0cmVlcGF0aCAqcGF0aCwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICpwX3Nfa2V5KQorCQkJCSAgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKmtleSkKIHsKIAlzdHJ1Y3QgaXRlbV9oZWFkICpmb3VuZF9paCA9IGdldF9paChwYXRoKTsKIApAQCAtMTkyNSwzNiArMTg4NSwzNiBAQAogCQlpZiAobGVfaWhfa19vZmZzZXQoZm91bmRfaWgpICsKIAkJICAgIG9wX2J5dGVzX251bWJlcihmb3VuZF9paCwKIAkJCQkgICAgZ2V0X2xhc3RfYmgocGF0aCktPmJfc2l6ZSkgIT0KLQkJICAgIGNwdV9rZXlfa19vZmZzZXQocF9zX2tleSkKKwkJICAgIGNwdV9rZXlfa19vZmZzZXQoa2V5KQogCQkgICAgfHwgb3BfYnl0ZXNfbnVtYmVyKGZvdW5kX2loLAogCQkJCSAgICAgICBnZXRfbGFzdF9iaChwYXRoKS0+Yl9zaXplKSAhPQogCQkgICAgcG9zX2luX2l0ZW0ocGF0aCkpCi0JCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJCSAgICAgICAiUEFQLTU3MjA6IGNoZWNrX3Jlc2VhcmNoX2Zvcl9wYXN0ZTogIgotCQkJCSAgICAgICAiZm91bmQgZGlyZWN0IGl0ZW0gJWggb3IgcG9zaXRpb24gKCVkKSBkb2VzIG5vdCBtYXRjaCB0byBrZXkgJUsiLAotCQkJCSAgICAgICBmb3VuZF9paCwgcG9zX2luX2l0ZW0ocGF0aCksIHBfc19rZXkpOworCQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgIlBBUC01NzIwIiwgImZvdW5kIGRpcmVjdCBpdGVtICIKKwkJCQkgICAgICAgIiVoIG9yIHBvc2l0aW9uICglZCkgZG9lcyBub3QgbWF0Y2ggIgorCQkJCSAgICAgICAidG8ga2V5ICVLIiwgZm91bmRfaWgsCisJCQkJICAgICAgIHBvc19pbl9pdGVtKHBhdGgpLCBrZXkpOwogCX0KIAlpZiAoaXNfaW5kaXJlY3RfbGVfaWgoZm91bmRfaWgpKSB7CiAJCWlmIChsZV9paF9rX29mZnNldChmb3VuZF9paCkgKwogCQkgICAgb3BfYnl0ZXNfbnVtYmVyKGZvdW5kX2loLAogCQkJCSAgICBnZXRfbGFzdF9iaChwYXRoKS0+Yl9zaXplKSAhPQotCQkgICAgY3B1X2tleV9rX29mZnNldChwX3Nfa2V5KQorCQkgICAgY3B1X2tleV9rX29mZnNldChrZXkpCiAJCSAgICB8fCBJX1VORk1fTlVNKGZvdW5kX2loKSAhPSBwb3NfaW5faXRlbShwYXRoKQogCQkgICAgfHwgZ2V0X2loX2ZyZWVfc3BhY2UoZm91bmRfaWgpICE9IDApCi0JCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJCSAgICAgICAiUEFQLTU3MzA6IGNoZWNrX3Jlc2VhcmNoX2Zvcl9wYXN0ZTogIgotCQkJCSAgICAgICAiZm91bmQgaW5kaXJlY3QgaXRlbSAoJWgpIG9yIHBvc2l0aW9uICglZCkgZG9lcyBub3QgbWF0Y2ggdG8ga2V5ICglSykiLAotCQkJCSAgICAgICBmb3VuZF9paCwgcG9zX2luX2l0ZW0ocGF0aCksIHBfc19rZXkpOworCQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgIlBBUC01NzMwIiwgImZvdW5kIGluZGlyZWN0ICIKKwkJCQkgICAgICAgIml0ZW0gKCVoKSBvciBwb3NpdGlvbiAoJWQpIGRvZXMgbm90ICIKKwkJCQkgICAgICAgIm1hdGNoIHRvIGtleSAoJUspIiwKKwkJCQkgICAgICAgZm91bmRfaWgsIHBvc19pbl9pdGVtKHBhdGgpLCBrZXkpOwogCX0KIH0KICNlbmRpZgkJCQkvKiBjb25maWcgcmVpc2VyZnMgY2hlY2sgKi8KIAogLyogUGFzdGUgYnl0ZXMgdG8gdGhlIGV4aXN0aW5nIGl0ZW0uIFJldHVybnMgYnl0ZXMgbnVtYmVyIHBhc3RlZCBpbnRvIHRoZSBpdGVtLiAqLwotaW50IHJlaXNlcmZzX3Bhc3RlX2ludG9faXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgsCS8qIFBhdGggdG8gdGhlIHBhc3RlZCBpdGVtLiAgICAgICAgICAqLwotCQkJICAgICBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqcF9zX2tleSwJLyogS2V5IHRvIHNlYXJjaCBmb3IgdGhlIG5lZWRlZCBpdGVtLiAqLworaW50IHJlaXNlcmZzX3Bhc3RlX2ludG9faXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgc3RydWN0IHRyZWVwYXRoICpzZWFyY2hfcGF0aCwJLyogUGF0aCB0byB0aGUgcGFzdGVkIGl0ZW0uCSAgKi8KKwkJCSAgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKmtleSwJLyogS2V5IHRvIHNlYXJjaCBmb3IgdGhlIG5lZWRlZCBpdGVtLiAqLwogCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAkvKiBJbm9kZSBpdGVtIGJlbG9uZ3MgdG8gKi8KLQkJCSAgICAgY29uc3QgY2hhciAqcF9jX2JvZHksCS8qIFBvaW50ZXIgdG8gdGhlIGJ5dGVzIHRvIHBhc3RlLiAgICAqLwotCQkJICAgICBpbnQgbl9wYXN0ZWRfc2l6ZSkKKwkJCSAgICAgY29uc3QgY2hhciAqYm9keSwJLyogUG9pbnRlciB0byB0aGUgYnl0ZXMgdG8gcGFzdGUuICAgICovCisJCQkgICAgIGludCBwYXN0ZWRfc2l6ZSkKIHsJCQkJLyogU2l6ZSBvZiBwYXN0ZWQgYnl0ZXMuICAgICAgICAgICAgICovCiAJc3RydWN0IHRyZWVfYmFsYW5jZSBzX3Bhc3RlX2JhbGFuY2U7CiAJaW50IHJldHZhbDsKQEAgLTE5NjcsMTggKzE5MjcsMTggQEAKICNpZmRlZiBSRUlTRVJRVU9UQV9ERUJVRwogCXJlaXNlcmZzX2RlYnVnKGlub2RlLT5pX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkgICAgICAgInJlaXNlcnF1b3RhIHBhc3RlX2ludG9faXRlbSgpOiBhbGxvY2F0aW5nICV1IGlkPSV1IHR5cGU9JWMiLAotCQkgICAgICAgbl9wYXN0ZWRfc2l6ZSwgaW5vZGUtPmlfdWlkLAotCQkgICAgICAga2V5MnR5cGUoJihwX3Nfa2V5LT5vbl9kaXNrX2tleSkpKTsKKwkJICAgICAgIHBhc3RlZF9zaXplLCBpbm9kZS0+aV91aWQsCisJCSAgICAgICBrZXkydHlwZSgmKGtleS0+b25fZGlza19rZXkpKSk7CiAjZW5kaWYKIAotCWlmICh2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgbl9wYXN0ZWRfc2l6ZSkpIHsKLQkJcGF0aHJlbHNlKHBfc19zZWFyY2hfcGF0aCk7CisJaWYgKHZmc19kcV9hbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLCBwYXN0ZWRfc2l6ZSkpIHsKKwkJcGF0aHJlbHNlKHNlYXJjaF9wYXRoKTsKIAkJcmV0dXJuIC1FRFFVT1Q7CiAJfQotCWluaXRfdGJfc3RydWN0KHRoLCAmc19wYXN0ZV9iYWxhbmNlLCB0aC0+dF9zdXBlciwgcF9zX3NlYXJjaF9wYXRoLAotCQkgICAgICAgbl9wYXN0ZWRfc2l6ZSk7CisJaW5pdF90Yl9zdHJ1Y3QodGgsICZzX3Bhc3RlX2JhbGFuY2UsIHRoLT50X3N1cGVyLCBzZWFyY2hfcGF0aCwKKwkJICAgICAgIHBhc3RlZF9zaXplKTsKICNpZmRlZiBESVNQTEFDRV9ORVdfUEFDS0lOR19MT0NBTElUSUVTCi0Jc19wYXN0ZV9iYWxhbmNlLmtleSA9IHBfc19rZXktPm9uX2Rpc2tfa2V5OworCXNfcGFzdGVfYmFsYW5jZS5rZXkgPSBrZXktPm9uX2Rpc2tfa2V5OwogI2VuZGlmCiAKIAkvKiBEUVVPVF8qIGNhbiBzY2hlZHVsZSwgbXVzdCBjaGVjayBiZWZvcmUgdGhlIGZpeF9ub2RlcyAqLwpAQCAtMTk4OCwzMyArMTk0OCwzMyBAQAogCiAJd2hpbGUgKChyZXR2YWwgPQogCQlmaXhfbm9kZXMoTV9QQVNURSwgJnNfcGFzdGVfYmFsYW5jZSwgTlVMTCwKLQkJCSAgcF9jX2JvZHkpKSA9PSBSRVBFQVRfU0VBUkNIKSB7CisJCQkgIGJvZHkpKSA9PSBSRVBFQVRfU0VBUkNIKSB7CiAJICAgICAgc2VhcmNoX2FnYWluOgogCQkvKiBmaWxlIHN5c3RlbSBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgaW4gdGhlIGZpeF9ub2RlcyAqLwogCQlQUk9DX0lORk9fSU5DKHRoLT50X3N1cGVyLCBwYXN0ZV9pbnRvX2l0ZW1fcmVzdGFydGVkKTsKIAkJcmV0dmFsID0KLQkJICAgIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHRoLT50X3N1cGVyLCBwX3Nfa2V5LAotCQkJCQkgICAgICAgcF9zX3NlYXJjaF9wYXRoKTsKKwkJICAgIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHRoLT50X3N1cGVyLCBrZXksCisJCQkJCSAgICAgICBzZWFyY2hfcGF0aCk7CiAJCWlmIChyZXR2YWwgPT0gSU9fRVJST1IpIHsKIAkJCXJldHZhbCA9IC1FSU87CiAJCQlnb3RvIGVycm9yX291dDsKIAkJfQogCQlpZiAocmV0dmFsID09IFBPU0lUSU9OX0ZPVU5EKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCQkgIlBBUC01NzEwOiByZWlzZXJmc19wYXN0ZV9pbnRvX2l0ZW06IGVudHJ5IG9yIHBhc3RlZCBieXRlICglSykgZXhpc3RzIiwKLQkJCQkJIHBfc19rZXkpOworCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgIlBBUC01NzEwIiwKKwkJCQkJICJlbnRyeSBvciBwYXN0ZWQgYnl0ZSAoJUspIGV4aXN0cyIsCisJCQkJCSBrZXkpOwogCQkJcmV0dmFsID0gLUVFWElTVDsKIAkJCWdvdG8gZXJyb3Jfb3V0OwogCQl9CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCi0JCWNoZWNrX3Jlc2VhcmNoX2Zvcl9wYXN0ZShwX3Nfc2VhcmNoX3BhdGgsIHBfc19rZXkpOworCQljaGVja19yZXNlYXJjaF9mb3JfcGFzdGUoc2VhcmNoX3BhdGgsIGtleSk7CiAjZW5kaWYKIAl9CiAKIAkvKiBQZXJmb3JtIGJhbGFuY2luZyBhZnRlciBhbGwgcmVzb3VyY2VzIGFyZSBjb2xsZWN0ZWQgYnkgZml4X25vZGVzLCBhbmQKIAkgICBhY2Nlc3NpbmcgdGhlbSB3aWxsIG5vdCByaXNrIHRyaWdnZXJpbmcgc2NoZWR1bGUuICovCiAJaWYgKHJldHZhbCA9PSBDQVJSWV9PTikgewotCQlkb19iYWxhbmNlKCZzX3Bhc3RlX2JhbGFuY2UsIE5VTEwgLyppaCAqLyAsIHBfY19ib2R5LCBNX1BBU1RFKTsKKwkJZG9fYmFsYW5jZSgmc19wYXN0ZV9iYWxhbmNlLCBOVUxMIC8qaWggKi8gLCBib2R5LCBNX1BBU1RFKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHZhbCA9IChyZXR2YWwgPT0gTk9fRElTS19TUEFDRSkgPyAtRU5PU1BDIDogLUVJTzsKQEAgLTIwMjQsMTggKzE5ODQsMjQgQEAKICNpZmRlZiBSRUlTRVJRVU9UQV9ERUJVRwogCXJlaXNlcmZzX2RlYnVnKGlub2RlLT5pX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkgICAgICAgInJlaXNlcnF1b3RhIHBhc3RlX2ludG9faXRlbSgpOiBmcmVlaW5nICV1IGlkPSV1IHR5cGU9JWMiLAotCQkgICAgICAgbl9wYXN0ZWRfc2l6ZSwgaW5vZGUtPmlfdWlkLAotCQkgICAgICAga2V5MnR5cGUoJihwX3Nfa2V5LT5vbl9kaXNrX2tleSkpKTsKKwkJICAgICAgIHBhc3RlZF9zaXplLCBpbm9kZS0+aV91aWQsCisJCSAgICAgICBrZXkydHlwZSgmKGtleS0+b25fZGlza19rZXkpKSk7CiAjZW5kaWYKLQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBuX3Bhc3RlZF9zaXplKTsKKwl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBwYXN0ZWRfc2l6ZSk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAotLyogSW5zZXJ0IG5ldyBpdGVtIGludG8gdGhlIGJ1ZmZlciBhdCB0aGUgcGF0aC4gKi8KLWludCByZWlzZXJmc19pbnNlcnRfaXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgc3RydWN0IHRyZWVwYXRoICpwX3NfcGF0aCwJLyogUGF0aCB0byB0aGUgaW5zZXJ0ZWRlZCBpdGVtLiAgICAgICAgICovCi0JCQkgY29uc3Qgc3RydWN0IGNwdV9rZXkgKmtleSwgc3RydWN0IGl0ZW1faGVhZCAqcF9zX2loLAkvKiBQb2ludGVyIHRvIHRoZSBpdGVtIGhlYWRlciB0byBpbnNlcnQuICovCi0JCQkgc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqcF9jX2JvZHkpCi17CQkJCS8qIFBvaW50ZXIgdG8gdGhlIGJ5dGVzIHRvIGluc2VydC4gICAgICAqLworLyogSW5zZXJ0IG5ldyBpdGVtIGludG8gdGhlIGJ1ZmZlciBhdCB0aGUgcGF0aC4KKyAqIHRoICAgLSBhY3RpdmUgdHJhbnNhY3Rpb24gaGFuZGxlCisgKiBwYXRoIC0gcGF0aCB0byB0aGUgaW5zZXJ0ZWQgaXRlbQorICogaWggICAtIHBvaW50ZXIgdG8gdGhlIGl0ZW0gaGVhZGVyIHRvIGluc2VydAorICogYm9keSAtIHBvaW50ZXIgdG8gdGhlIGJ5dGVzIHRvIGluc2VydAorICovCitpbnQgcmVpc2VyZnNfaW5zZXJ0X2l0ZW0oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCQkgc3RydWN0IHRyZWVwYXRoICpwYXRoLCBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqa2V5LAorCQkJIHN0cnVjdCBpdGVtX2hlYWQgKmloLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJIGNvbnN0IGNoYXIgKmJvZHkpCit7CiAJc3RydWN0IHRyZWVfYmFsYW5jZSBzX2luc19iYWxhbmNlOwogCWludCByZXR2YWw7CiAJaW50IGZzX2dlbiA9IDA7CkBAIC0yMDQ1LDI4ICsyMDExLDI3IEBACiAKIAlpZiAoaW5vZGUpIHsJCS8qIERvIHdlIGNvdW50IHF1b3RhcyBmb3IgaXRlbT8gKi8KIAkJZnNfZ2VuID0gZ2V0X2dlbmVyYXRpb24oaW5vZGUtPmlfc2IpOwotCQlxdW90YV9ieXRlcyA9IGloX2l0ZW1fbGVuKHBfc19paCk7CisJCXF1b3RhX2J5dGVzID0gaWhfaXRlbV9sZW4oaWgpOwogCiAJCS8qIGhhY2sgc28gdGhlIHF1b3RhIGNvZGUgZG9lc24ndCBoYXZlIHRvIGd1ZXNzIGlmIHRoZSBmaWxlIGhhcwogCQkgKiogYSB0YWlsLCBsaW5rcyBhcmUgYWx3YXlzIHRhaWxzLCBzbyB0aGVyZSdzIG5vIGd1ZXNzaW5nIG5lZWRlZAogCQkgKi8KLQkJaWYgKCFTX0lTTE5LKGlub2RlLT5pX21vZGUpICYmIGlzX2RpcmVjdF9sZV9paChwX3NfaWgpKSB7CisJCWlmICghU19JU0xOSyhpbm9kZS0+aV9tb2RlKSAmJiBpc19kaXJlY3RfbGVfaWgoaWgpKQogCQkJcXVvdGFfYnl0ZXMgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgKyBVTkZNX1BfU0laRTsKLQkJfQogI2lmZGVmIFJFSVNFUlFVT1RBX0RFQlVHCiAJCXJlaXNlcmZzX2RlYnVnKGlub2RlLT5pX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkJICAgICAgICJyZWlzZXJxdW90YSBpbnNlcnRfaXRlbSgpOiBhbGxvY2F0aW5nICV1IGlkPSV1IHR5cGU9JWMiLAotCQkJICAgICAgIHF1b3RhX2J5dGVzLCBpbm9kZS0+aV91aWQsIGhlYWQydHlwZShwX3NfaWgpKTsKKwkJCSAgICAgICBxdW90YV9ieXRlcywgaW5vZGUtPmlfdWlkLCBoZWFkMnR5cGUoaWgpKTsKICNlbmRpZgogCQkvKiBXZSBjYW4ndCBkaXJ0eSBpbm9kZSBoZXJlLiBJdCB3b3VsZCBiZSBpbW1lZGlhdGVseSB3cml0dGVuIGJ1dAogCQkgKiBhcHByb3ByaWF0ZSBzdGF0IGl0ZW0gaXNuJ3QgaW5zZXJ0ZWQgeWV0Li4uICovCiAJCWlmICh2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgcXVvdGFfYnl0ZXMpKSB7Ci0JCQlwYXRocmVsc2UocF9zX3BhdGgpOworCQkJcGF0aHJlbHNlKHBhdGgpOwogCQkJcmV0dXJuIC1FRFFVT1Q7CiAJCX0KIAl9Ci0JaW5pdF90Yl9zdHJ1Y3QodGgsICZzX2luc19iYWxhbmNlLCB0aC0+dF9zdXBlciwgcF9zX3BhdGgsCi0JCSAgICAgICBJSF9TSVpFICsgaWhfaXRlbV9sZW4ocF9zX2loKSk7CisJaW5pdF90Yl9zdHJ1Y3QodGgsICZzX2luc19iYWxhbmNlLCB0aC0+dF9zdXBlciwgcGF0aCwKKwkJICAgICAgIElIX1NJWkUgKyBpaF9pdGVtX2xlbihpaCkpOwogI2lmZGVmIERJU1BMQUNFX05FV19QQUNLSU5HX0xPQ0FMSVRJRVMKIAlzX2luc19iYWxhbmNlLmtleSA9IGtleS0+b25fZGlza19rZXk7CiAjZW5kaWYKQEAgLTIwNzYsMTkgKzIwNDEsMTggQEAKIAl9CiAKIAl3aGlsZSAoKHJldHZhbCA9Ci0JCWZpeF9ub2RlcyhNX0lOU0VSVCwgJnNfaW5zX2JhbGFuY2UsIHBfc19paCwKLQkJCSAgcF9jX2JvZHkpKSA9PSBSRVBFQVRfU0VBUkNIKSB7CisJCWZpeF9ub2RlcyhNX0lOU0VSVCwgJnNfaW5zX2JhbGFuY2UsIGloLAorCQkJICBib2R5KSkgPT0gUkVQRUFUX1NFQVJDSCkgewogCSAgICAgIHNlYXJjaF9hZ2FpbjoKIAkJLyogZmlsZSBzeXN0ZW0gY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGluIHRoZSBmaXhfbm9kZXMgKi8KIAkJUFJPQ19JTkZPX0lOQyh0aC0+dF9zdXBlciwgaW5zZXJ0X2l0ZW1fcmVzdGFydGVkKTsKLQkJcmV0dmFsID0gc2VhcmNoX2l0ZW0odGgtPnRfc3VwZXIsIGtleSwgcF9zX3BhdGgpOworCQlyZXR2YWwgPSBzZWFyY2hfaXRlbSh0aC0+dF9zdXBlciwga2V5LCBwYXRoKTsKIAkJaWYgKHJldHZhbCA9PSBJT19FUlJPUikgewogCQkJcmV0dmFsID0gLUVJTzsKIAkJCWdvdG8gZXJyb3Jfb3V0OwogCQl9CiAJCWlmIChyZXR2YWwgPT0gSVRFTV9GT1VORCkgewotCQkJcmVpc2VyZnNfd2FybmluZyh0aC0+dF9zdXBlciwKLQkJCQkJICJQQVAtNTc2MDogcmVpc2VyZnNfaW5zZXJ0X2l0ZW06ICIKKwkJCXJlaXNlcmZzX3dhcm5pbmcodGgtPnRfc3VwZXIsICJQQVAtNTc2MCIsCiAJCQkJCSAia2V5ICVLIGFscmVhZHkgZXhpc3RzIGluIHRoZSB0cmVlIiwKIAkJCQkJIGtleSk7CiAJCQlyZXR2YWwgPSAtRUVYSVNUOwpAQCAtMjA5OCw3ICsyMDYyLDcgQEAKIAogCS8qIG1ha2UgYmFsYW5jaW5nIGFmdGVyIGFsbCByZXNvdXJjZXMgd2lsbCBiZSBjb2xsZWN0ZWQgYXQgYSB0aW1lICovCiAJaWYgKHJldHZhbCA9PSBDQVJSWV9PTikgewotCQlkb19iYWxhbmNlKCZzX2luc19iYWxhbmNlLCBwX3NfaWgsIHBfY19ib2R5LCBNX0lOU0VSVCk7CisJCWRvX2JhbGFuY2UoJnNfaW5zX2JhbGFuY2UsIGloLCBib2R5LCBNX0lOU0VSVCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjEwOSw3ICsyMDczLDcgQEAKICNpZmRlZiBSRUlTRVJRVU9UQV9ERUJVRwogCXJlaXNlcmZzX2RlYnVnKHRoLT50X3N1cGVyLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkgICAgICAgInJlaXNlcnF1b3RhIGluc2VydF9pdGVtKCk6IGZyZWVpbmcgJXUgaWQ9JXUgdHlwZT0lYyIsCi0JCSAgICAgICBxdW90YV9ieXRlcywgaW5vZGUtPmlfdWlkLCBoZWFkMnR5cGUocF9zX2loKSk7CisJCSAgICAgICBxdW90YV9ieXRlcywgaW5vZGUtPmlfdWlkLCBoZWFkMnR5cGUoaWgpKTsKICNlbmRpZgogCWlmIChpbm9kZSkKIAkJdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgcXVvdGFfYnl0ZXMpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvc3VwZXIuYyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKaW5kZXggNWRiYWZiNy4uOTcyMjUwYzYgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMKKysrIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwpAQCAtMTgzLDkgKzE4Myw5IEBACiAJCWlmIChSRUlTRVJGU19TQihzKS0+c19xZl9uYW1lc1tpXSkgewogCQkJaW50IHJldCA9IHJlaXNlcmZzX3F1b3RhX29uX21vdW50KHMsIGkpOwogCQkJaWYgKHJldCA8IDApCi0JCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkJICJyZWlzZXJmczogY2Fubm90IHR1cm4gb24gam91cm5hbGVkIHF1b3RhOiBlcnJvciAlZCIsCi0JCQkJCQkgcmV0KTsKKwkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJyZWlzZXJmcy0yNTAwIiwKKwkJCQkJCSAiY2Fubm90IHR1cm4gb24gam91cm5hbGVkICIKKwkJCQkJCSAicXVvdGE6IGVycm9yICVkIiwgcmV0KTsKIAkJfQogCX0KICNlbmRpZgpAQCAtMTk1LDE3ICsxOTUsMTYgQEAKIAl3aGlsZSAoIXJldHZhbCkgewogCQlyZXR2YWwgPSBzZWFyY2hfaXRlbShzLCAmbWF4X2NwdV9rZXksICZwYXRoKTsKIAkJaWYgKHJldHZhbCAhPSBJVEVNX05PVF9GT1VORCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkgInZzLTIxNDA6IGZpbmlzaF91bmZpbmlzaGVkOiBzZWFyY2hfYnlfa2V5IHJldHVybmVkICVkIiwKLQkJCQkJIHJldHZhbCk7CisJCQlyZWlzZXJmc19lcnJvcihzLCAidnMtMjE0MCIsCisJCQkJICAgICAgICJzZWFyY2hfYnlfa2V5IHJldHVybmVkICVkIiwgcmV0dmFsKTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJYmggPSBnZXRfbGFzdF9iaCgmcGF0aCk7CiAJCWl0ZW1fcG9zID0gZ2V0X2l0ZW1fcG9zKCZwYXRoKTsKIAkJaWYgKGl0ZW1fcG9zICE9IEJfTlJfSVRFTVMoYmgpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAidnMtMjA2MDogZmluaXNoX3VuZmluaXNoZWQ6IHdyb25nIHBvc2l0aW9uIGZvdW5kIik7CisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJ2cy0yMDYwIiwKKwkJCQkJICJ3cm9uZyBwb3NpdGlvbiBmb3VuZCIpOwogCQkJYnJlYWs7CiAJCX0KIAkJaXRlbV9wb3MtLTsKQEAgLTIzNSw4ICsyMzQsNyBAQAogCQlpZiAoIWlub2RlKSB7CiAJCQkvKiB0aGUgdW5saW5rIGFsbW9zdCBjb21wbGV0ZWQsIGl0IGp1c3QgZGlkIG5vdCBtYW5hZ2UgdG8gcmVtb3ZlCiAJCQkgICAic2F2ZSIgbGluayBhbmQgcmVsZWFzZSBvYmplY3RpZCAqLwotCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkgInZzLTIxODA6IGZpbmlzaF91bmZpbmlzaGVkOiBpZ2V0IGZhaWxlZCBmb3IgJUsiLAorCQkJcmVpc2VyZnNfd2FybmluZyhzLCAidnMtMjE4MCIsICJpZ2V0IGZhaWxlZCBmb3IgJUsiLAogCQkJCQkgJm9ial9rZXkpOwogCQkJcmV0dmFsID0gcmVtb3ZlX3NhdmVfbGlua19vbmx5KHMsICZzYXZlX2xpbmtfa2V5LCAxKTsKIAkJCWNvbnRpbnVlOwpAQCAtMjQ0LDggKzI0Miw4IEBACiAKIAkJaWYgKCF0cnVuY2F0ZSAmJiBpbm9kZS0+aV9ubGluaykgewogCQkJLyogZmlsZSBpcyBub3QgdW5saW5rZWQgKi8KLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJ2cy0yMTg1OiBmaW5pc2hfdW5maW5pc2hlZDogZmlsZSAlSyBpcyBub3QgdW5saW5rZWQiLAorCQkJcmVpc2VyZnNfd2FybmluZyhzLCAidnMtMjE4NSIsCisJCQkJCSAiZmlsZSAlSyBpcyBub3QgdW5saW5rZWQiLAogCQkJCQkgJm9ial9rZXkpOwogCQkJcmV0dmFsID0gcmVtb3ZlX3NhdmVfbGlua19vbmx5KHMsICZzYXZlX2xpbmtfa2V5LCAwKTsKIAkJCWNvbnRpbnVlOwpAQCAtMjU3LDggKzI1NSw5IEBACiAJCQkgICBUaGUgb25seSBpbWFnaW5hYmxlIHdheSBpcyB0byBleGVjdXRlIHVuZmluaXNoZWQgdHJ1bmNhdGUgcmVxdWVzdAogCQkJICAgdGhlbiBib290IGludG8gb2xkIGtlcm5lbCwgcmVtb3ZlIHRoZSBmaWxlIGFuZCBjcmVhdGUgZGlyIHdpdGgKIAkJCSAgIHRoZSBzYW1lIGtleS4gKi8KLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJncmVlbi0yMTAxOiBpbXBvc3NpYmxlIHRydW5jYXRlIG9uIGEgZGlyZWN0b3J5ICVrLiBQbGVhc2UgcmVwb3J0IiwKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgImdyZWVuLTIxMDEiLAorCQkJCQkgImltcG9zc2libGUgdHJ1bmNhdGUgb24gYSAiCisJCQkJCSAiZGlyZWN0b3J5ICVrLiBQbGVhc2UgcmVwb3J0IiwKIAkJCQkJIElOT0RFX1BLRVkoaW5vZGUpKTsKIAkJCXJldHZhbCA9IHJlbW92ZV9zYXZlX2xpbmtfb25seShzLCAmc2F2ZV9saW5rX2tleSwgMCk7CiAJCQl0cnVuY2F0ZSA9IDA7CkBAIC0yODgsOSArMjg3LDEwIEBACiAJCQkJLyogcmVtb3ZhbCBnZXRzIGNvbXBsZXRlZCBpbiBpcHV0ICovCiAJCQkJcmV0dmFsID0gMDsKIAkJCX0gZWxzZSB7Ci0JCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiRGVhZCBsb29wIGluICIKLQkJCQkJCSJmaW5pc2hfdW5maW5pc2hlZCBkZXRlY3RlZCwgIgotCQkJCQkJImp1c3QgcmVtb3ZlIHNhdmUgbGlua1xuIik7CisJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItMjE4OSIsICJEZWFkIGxvb3AgIgorCQkJCQkJICJpbiBmaW5pc2hfdW5maW5pc2hlZCAiCisJCQkJCQkgImRldGVjdGVkLCBqdXN0IHJlbW92ZSAiCisJCQkJCQkgInNhdmUgbGlua1xuIik7CiAJCQkJcmV0dmFsID0gcmVtb3ZlX3NhdmVfbGlua19vbmx5KHMsCiAJCQkJCQkJJnNhdmVfbGlua19rZXksIDApOwogCQkJfQpAQCAtMzYwLDggKzM2MCw5IEBACiAJfSBlbHNlIHsKIAkJLyogdHJ1bmNhdGUgKi8KIAkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCi0JCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCQkgImdyZWVuLTIxMDI6IEFkZGluZyBhIHRydW5jYXRlIHNhdmVsaW5rIGZvciBhIGRpcmVjdG9yeSAlayEgUGxlYXNlIHJlcG9ydCIsCisJCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAiZ3JlZW4tMjEwMiIsCisJCQkJCSAiQWRkaW5nIGEgdHJ1bmNhdGUgc2F2ZWxpbmsgZm9yICIKKwkJCQkJICJhIGRpcmVjdG9yeSAlayEgUGxlYXNlIHJlcG9ydCIsCiAJCQkJCSBJTk9ERV9QS0VZKGlub2RlKSk7CiAJCXNldF9jcHVfa2V5X2tfb2Zmc2V0KCZrZXksIDEpOwogCQlzZXRfY3B1X2tleV9rX3R5cGUoJmtleSwgVFlQRV9JTkRJUkVDVCk7CkBAIC0zNzYsOSArMzc3LDkgQEAKIAlyZXR2YWwgPSBzZWFyY2hfaXRlbShpbm9kZS0+aV9zYiwgJmtleSwgJnBhdGgpOwogCWlmIChyZXR2YWwgIT0gSVRFTV9OT1RfRk9VTkQpIHsKIAkJaWYgKHJldHZhbCAhPSAtRU5PU1BDKQotCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgInZzLTIxMDA6IGFkZF9zYXZlX2xpbms6IgotCQkJCQkgInNlYXJjaF9ieV9rZXkgKCVLKSByZXR1cm5lZCAlZCIsICZrZXksCi0JCQkJCSByZXR2YWwpOworCQkJcmVpc2VyZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJ2cy0yMTAwIiwKKwkJCQkgICAgICAgInNlYXJjaF9ieV9rZXkgKCVLKSByZXR1cm5lZCAlZCIsICZrZXksCisJCQkJICAgICAgIHJldHZhbCk7CiAJCXBhdGhyZWxzZSgmcGF0aCk7CiAJCXJldHVybjsKIAl9CkBAIC0zOTEsOSArMzkyLDggQEAKIAkgICAgcmVpc2VyZnNfaW5zZXJ0X2l0ZW0odGgsICZwYXRoLCAma2V5LCAmaWgsIE5VTEwsIChjaGFyICopJmxpbmspOwogCWlmIChyZXR2YWwpIHsKIAkJaWYgKHJldHZhbCAhPSAtRU5PU1BDKQotCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCQkJICJ2cy0yMTIwOiBhZGRfc2F2ZV9saW5rOiBpbnNlcnRfaXRlbSByZXR1cm5lZCAlZCIsCi0JCQkJCSByZXR2YWwpOworCQkJcmVpc2VyZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJ2cy0yMTIwIiwKKwkJCQkgICAgICAgImluc2VydF9pdGVtIHJldHVybmVkICVkIiwgcmV0dmFsKTsKIAl9IGVsc2UgewogCQlpZiAodHJ1bmNhdGUpCiAJCQlSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyB8PQpAQCAtNDkyLDggKzQ5Miw3IEBACiAJcHJpbnRfc3RhdGlzdGljcyhzKTsKIAogCWlmIChSRUlTRVJGU19TQihzKS0+cmVzZXJ2ZWRfYmxvY2tzICE9IDApIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCSAiZ3JlZW4tMjAwNTogcmVpc2VyZnNfcHV0X3N1cGVyOiByZXNlcnZlZCBibG9ja3MgbGVmdCAlZCIsCisJCXJlaXNlcmZzX3dhcm5pbmcocywgImdyZWVuLTIwMDUiLCAicmVzZXJ2ZWQgYmxvY2tzIGxlZnQgJWQiLAogCQkJCSBSRUlTRVJGU19TQihzKS0+cmVzZXJ2ZWRfYmxvY2tzKTsKIAl9CiAKQEAgLTU1OSw4ICs1NTgsOCBAQAogCiAJaW50IGVyciA9IDA7CiAJaWYgKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCi0JCQkJICJjbG0tNjAwNjogd3JpdGluZyBpbm9kZSAlbHUgb24gcmVhZG9ubHkgRlMiLAorCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAiY2xtLTYwMDYiLAorCQkJCSAid3JpdGluZyBpbm9kZSAlbHUgb24gcmVhZG9ubHkgRlMiLAogCQkJCSBpbm9kZS0+aV9pbm8pOwogCQlyZXR1cm47CiAJfQpAQCAtNzU3LDcgKzc1Niw3IEBACiAJCQkgICBjaGFyICoqb3B0X2FyZywgdW5zaWduZWQgbG9uZyAqYml0X2ZsYWdzKQogewogCWNoYXIgKnA7Ci0JLyogZm9vPWJhciwgCisJLyogZm9vPWJhciwKIAkgICBeICAgXiAgXgogCSAgIHwgICB8ICArLS0gb3B0aW9uX2VuZAogCSAgIHwgICArLS0gYXJnX3N0YXJ0CkBAIC03OTIsMTMgKzc5MSwxNSBAQAogCQkJaWYgKGJpdF9mbGFncykgewogCQkJCWlmIChvcHQtPmNscm1hc2sgPT0KIAkJCQkgICAgKDEgPDwgUkVJU0VSRlNfVU5TVVBQT1JURURfT1BUKSkKLQkJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiJXMgbm90IHN1cHBvcnRlZC4iLAorCQkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTAwIiwKKwkJCQkJCQkgIiVzIG5vdCBzdXBwb3J0ZWQuXG4iLAogCQkJCQkJCSBwKTsKIAkJCQllbHNlCiAJCQkJCSpiaXRfZmxhZ3MgJj0gfm9wdC0+Y2xybWFzazsKIAkJCQlpZiAob3B0LT5zZXRtYXNrID09CiAJCQkJICAgICgxIDw8IFJFSVNFUkZTX1VOU1VQUE9SVEVEX09QVCkpCi0JCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgIiVzIG5vdCBzdXBwb3J0ZWQuIiwKKwkJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUwMSIsCisJCQkJCQkJICIlcyBub3Qgc3VwcG9ydGVkLlxuIiwKIAkJCQkJCQkgcCk7CiAJCQkJZWxzZQogCQkJCQkqYml0X2ZsYWdzIHw9IG9wdC0+c2V0bWFzazsKQEAgLTgwNyw3ICs4MDgsOCBAQAogCQl9CiAJfQogCWlmICghb3B0LT5vcHRpb25fbmFtZSkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsICJ1bmtub3duIG1vdW50IG9wdGlvbiBcIiVzXCIiLCBwKTsKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUwMiIsCisJCQkJICJ1bmtub3duIG1vdW50IG9wdGlvbiBcIiVzXCIiLCBwKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtODE1LDggKzgxNyw5IEBACiAJc3dpdGNoICgqcCkgewogCWNhc2UgJz0nOgogCQlpZiAoIW9wdC0+YXJnX3JlcXVpcmVkKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAidGhlIG9wdGlvbiBcIiVzXCIgZG9lcyBub3QgcmVxdWlyZSBhbiBhcmd1bWVudCIsCisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTAzIiwKKwkJCQkJICJ0aGUgb3B0aW9uIFwiJXNcIiBkb2VzIG5vdCAiCisJCQkJCSAicmVxdWlyZSBhbiBhcmd1bWVudFxuIiwKIAkJCQkJIG9wdC0+b3B0aW9uX25hbWUpOwogCQkJcmV0dXJuIC0xOwogCQl9CkBAIC04MjQsMTQgKzgyNywxNSBAQAogCiAJY2FzZSAwOgogCQlpZiAob3B0LT5hcmdfcmVxdWlyZWQpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJ0aGUgb3B0aW9uIFwiJXNcIiByZXF1aXJlcyBhbiBhcmd1bWVudCIsCi0JCQkJCSBvcHQtPm9wdGlvbl9uYW1lKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MDQiLAorCQkJCQkgInRoZSBvcHRpb24gXCIlc1wiIHJlcXVpcmVzIGFuICIKKwkJCQkJICJhcmd1bWVudFxuIiwgb3B0LT5vcHRpb25fbmFtZSk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmVpc2VyZnNfd2FybmluZyhzLCAiaGVhZCBvZiBvcHRpb24gXCIlc1wiIGlzIG9ubHkgY29ycmVjdCIsCisJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MDUiLAorCQkJCSAiaGVhZCBvZiBvcHRpb24gXCIlc1wiIGlzIG9ubHkgY29ycmVjdFxuIiwKIAkJCQkgb3B0LT5vcHRpb25fbmFtZSk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC04NDMsNyArODQ3LDggQEAKIAkgICAgJiYgIShvcHQtPmFyZ19yZXF1aXJlZCAmICgxIDw8IFJFSVNFUkZTX09QVF9BTExPV0VNUFRZKSkKIAkgICAgJiYgIXN0cmxlbihwKSkgewogCQkvKiB0aGlzIGNhdGNoZXMgIm9wdGlvbj0sIiBpZiBub3QgYWxsb3dlZCAqLwotCQlyZWlzZXJmc193YXJuaW5nKHMsICJlbXB0eSBhcmd1bWVudCBmb3IgXCIlc1wiIiwKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUwNiIsCisJCQkJICJlbXB0eSBhcmd1bWVudCBmb3IgXCIlc1wiXG4iLAogCQkJCSBvcHQtPm9wdGlvbl9uYW1lKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTg2NSw3ICs4NzAsOCBAQAogCQl9CiAJfQogCi0JcmVpc2VyZnNfd2FybmluZyhzLCAiYmFkIHZhbHVlIFwiJXNcIiBmb3Igb3B0aW9uIFwiJXNcIiIsIHAsCisJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUwNiIsCisJCQkgImJhZCB2YWx1ZSBcIiVzXCIgZm9yIG9wdGlvbiBcIiVzXCJcbiIsIHAsCiAJCQkgb3B0LT5vcHRpb25fbmFtZSk7CiAJcmV0dXJuIC0xOwogfQpAQCAtOTU1LDkgKzk2MSw5IEBACiAJCQkJKmJsb2NrcyA9IHNpbXBsZV9zdHJ0b3VsKGFyZywgJnAsIDApOwogCQkJCWlmICgqcCAhPSAnXDAnKSB7CiAJCQkJCS8qIE5OTiBkb2VzIG5vdCBsb29rIGxpa2UgYSBudW1iZXIgKi8KLQkJCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkJCSAicmVpc2VyZnNfcGFyc2Vfb3B0aW9uczogYmFkIHZhbHVlICVzIiwKLQkJCQkJCQkgYXJnKTsKKwkJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUwNyIsCisJCQkJCQkJICJiYWQgdmFsdWUgJXMgZm9yICIKKwkJCQkJCQkgIi1vcmVzaXplXG4iLCBhcmcpOwogCQkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQl9CkBAIC05NjgsOCArOTc0LDggQEAKIAkJCXVuc2lnbmVkIGxvbmcgdmFsID0gc2ltcGxlX3N0cnRvdWwoYXJnLCAmcCwgMCk7CiAJCQkvKiBjb21taXQ9Tk5OICh0aW1lIGluIHNlY29uZHMpICovCiAJCQlpZiAoKnAgIT0gJ1wwJyB8fCB2YWwgPj0gKHVuc2lnbmVkIGludCktMSkgewotCQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJCSAicmVpc2VyZnNfcGFyc2Vfb3B0aW9uczogYmFkIHZhbHVlICVzIiwKKwkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTA4IiwKKwkJCQkJCSAiYmFkIHZhbHVlICVzIGZvciAtb2NvbW1pdFxuIiwKIAkJCQkJCSBhcmcpOwogCQkJCXJldHVybiAwOwogCQkJfQpAQCAtOTc3LDE2ICs5ODMsMTggQEAKIAkJfQogCiAJCWlmIChjID09ICd3JykgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLCAicmVpc2VyZnM6IG5vbGFyZ2VpbyBvcHRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpOworCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUwOSIsICJub2xhcmdlaW8gb3B0aW9uICIKKwkJCQkJICJpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCiAJCWlmIChjID09ICdqJykgewogCQkJaWYgKGFyZyAmJiAqYXJnICYmIGpkZXZfbmFtZSkgewogCQkJCWlmICgqamRldl9uYW1lKSB7CS8vSG0sIGFscmVhZHkgYXNzaWduZWQ/Ci0JCQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJCQkgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IGpvdXJuYWwgZGV2aWNlIHdhcyBhbHJlYWR5ICBzcGVjaWZpZWQgdG8gYmUgJXMiLAotCQkJCQkJCSAqamRldl9uYW1lKTsKKwkJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUxMCIsCisJCQkJCQkJICJqb3VybmFsIGRldmljZSB3YXMgIgorCQkJCQkJCSAiYWxyZWFkeSBzcGVjaWZpZWQgdG8gIgorCQkJCQkJCSAiYmUgJXMiLCAqamRldl9uYW1lKTsKIAkJCQkJcmV0dXJuIDA7CiAJCQkJfQogCQkJCSpqZGV2X25hbWUgPSBhcmc7CkBAIC05OTgsMjkgKzEwMDYsMzUgQEAKIAogCQkJaWYgKHNiX2FueV9xdW90YV9sb2FkZWQocykgJiYKIAkJCSAgICAoISphcmcgIT0gIVJFSVNFUkZTX1NCKHMpLT5zX3FmX25hbWVzW3F0eXBlXSkpIHsKLQkJCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCQkgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IGNhbm5vdCBjaGFuZ2Ugam91cm5hbGVkIHF1b3RhIG9wdGlvbnMgd2hlbiBxdW90YSB0dXJuZWQgb24uIik7CisJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUxMSIsCisJCQkJCQkgImNhbm5vdCBjaGFuZ2Ugam91cm5hbGVkICIKKwkJCQkJCSAicXVvdGEgb3B0aW9ucyB3aGVuIHF1b3RhICIKKwkJCQkJCSAidHVybmVkIG9uLiIpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQkJaWYgKCphcmcpIHsJLyogU29tZSBmaWxlbmFtZSBzcGVjaWZpZWQ/ICovCiAJCQkJaWYgKFJFSVNFUkZTX1NCKHMpLT5zX3FmX25hbWVzW3F0eXBlXQogCQkJCSAgICAmJiBzdHJjbXAoUkVJU0VSRlNfU0IocyktPnNfcWZfbmFtZXNbcXR5cGVdLAogCQkJCQkgICAgICBhcmcpKSB7Ci0JCQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJCQkgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6ICVzIHF1b3RhIGZpbGUgYWxyZWFkeSBzcGVjaWZpZWQuIiwKKwkJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUxMiIsCisJCQkJCQkJICIlcyBxdW90YSBmaWxlICIKKwkJCQkJCQkgImFscmVhZHkgc3BlY2lmaWVkLiIsCiAJCQkJCQkJIFFUWVBFMk5BTUUocXR5cGUpKTsKIAkJCQkJcmV0dXJuIDA7CiAJCQkJfQogCQkJCWlmIChzdHJjaHIoYXJnLCAnLycpKSB7Ci0JCQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJCQkgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IHF1b3RhZmlsZSBtdXN0IGJlIG9uIGZpbGVzeXN0ZW0gcm9vdC4iKTsKKwkJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUxMyIsCisJCQkJCQkJICJxdW90YWZpbGUgbXVzdCBiZSAiCisJCQkJCQkJICJvbiBmaWxlc3lzdGVtIHJvb3QuIik7CiAJCQkJCXJldHVybiAwOwogCQkJCX0KIAkJCQlxZl9uYW1lc1txdHlwZV0gPQogCQkJCSAgICBrbWFsbG9jKHN0cmxlbihhcmcpICsgMSwgR0ZQX0tFUk5FTCk7CiAJCQkJaWYgKCFxZl9uYW1lc1txdHlwZV0pIHsKLQkJCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkJCSAicmVpc2VyZnNfcGFyc2Vfb3B0aW9uczogbm90IGVub3VnaCBtZW1vcnkgZm9yIHN0b3JpbmcgcXVvdGFmaWxlIG5hbWUuIik7CisJCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInJlaXNlcmZzLTI1MDIiLAorCQkJCQkJCSAibm90IGVub3VnaCBtZW1vcnkgIgorCQkJCQkJCSAiZm9yIHN0b3JpbmcgIgorCQkJCQkJCSAicXVvdGFmaWxlIG5hbWUuIik7CiAJCQkJCXJldHVybiAwOwogCQkJCX0KIAkJCQlzdHJjcHkocWZfbmFtZXNbcXR5cGVdLCBhcmcpOwpAQCAtMTAzOCwyMSArMTA1MiwyNCBAQAogCQkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJ2ZnN2MCIpKQogCQkJCSpxZm10ID0gUUZNVF9WRlNfVjA7CiAJCQllbHNlIHsKLQkJCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCQkgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IHVua25vd24gcXVvdGEgZm9ybWF0IHNwZWNpZmllZC4iKTsKKwkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTE0IiwKKwkJCQkJCSAidW5rbm93biBxdW90YSBmb3JtYXQgIgorCQkJCQkJICJzcGVjaWZpZWQuIik7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCQlpZiAoc2JfYW55X3F1b3RhX2xvYWRlZChzKSAmJgogCQkJICAgICpxZm10ICE9IFJFSVNFUkZTX1NCKHMpLT5zX2pxdW90YV9mbXQpIHsKLQkJCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCQkgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IGNhbm5vdCBjaGFuZ2Ugam91cm5hbGVkIHF1b3RhIG9wdGlvbnMgd2hlbiBxdW90YSB0dXJuZWQgb24uIik7CisJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUxNSIsCisJCQkJCQkgImNhbm5vdCBjaGFuZ2Ugam91cm5hbGVkICIKKwkJCQkJCSAicXVvdGEgb3B0aW9ucyB3aGVuIHF1b3RhICIKKwkJCQkJCSAidHVybmVkIG9uLiIpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQl9CiAjZWxzZQogCQlpZiAoYyA9PSAndScgfHwgYyA9PSAnZycgfHwgYyA9PSAnZicpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJyZWlzZXJmc19wYXJzZV9vcHRpb25zOiBqb3VybmFsZWQgcXVvdGEgb3B0aW9ucyBub3Qgc3VwcG9ydGVkLiIpOworCQkJcmVpc2VyZnNfd2FybmluZyhzLCAicmVpc2VyZnMtMjUwMyIsICJqb3VybmFsZWQgIgorCQkJCQkgInF1b3RhIG9wdGlvbnMgbm90IHN1cHBvcnRlZC4iKTsKIAkJCXJldHVybiAwOwogCQl9CiAjZW5kaWYKQEAgLTEwNjEsMTUgKzEwNzgsMTUgQEAKICNpZmRlZiBDT05GSUdfUVVPVEEKIAlpZiAoIVJFSVNFUkZTX1NCKHMpLT5zX2pxdW90YV9mbXQgJiYgISpxZm10CiAJICAgICYmIChxZl9uYW1lc1tVU1JRVU9UQV0gfHwgcWZfbmFtZXNbR1JQUVVPVEFdKSkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJICJyZWlzZXJmc19wYXJzZV9vcHRpb25zOiBqb3VybmFsZWQgcXVvdGEgZm9ybWF0IG5vdCBzcGVjaWZpZWQuIik7CisJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MTUiLAorCQkJCSAiam91cm5hbGVkIHF1b3RhIGZvcm1hdCBub3Qgc3BlY2lmaWVkLiIpOwogCQlyZXR1cm4gMDsKIAl9CiAJLyogVGhpcyBjaGVja2luZyBpcyBub3QgcHJlY2lzZSB3cnQgdGhlIHF1b3RhIHR5cGUgYnV0IGZvciBvdXIgcHVycG9zZXMgaXQgaXMgc3VmZmljaWVudCAqLwogCWlmICghKCptb3VudF9vcHRpb25zICYgKDEgPDwgUkVJU0VSRlNfUVVPVEEpKQogCSAgICAmJiBzYl9hbnlfcXVvdGFfbG9hZGVkKHMpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IHF1b3RhIG9wdGlvbnMgbXVzdCBiZSBwcmVzZW50IHdoZW4gcXVvdGEgaXMgdHVybmVkIG9uLiIpOworCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTE2IiwgInF1b3RhIG9wdGlvbnMgbXVzdCAiCisJCQkJICJiZSBwcmVzZW50IHdoZW4gcXVvdGEgaXMgdHVybmVkIG9uLiIpOwogCQlyZXR1cm4gMDsKIAl9CiAjZW5kaWYKQEAgLTExMjksMTQgKzExNDYsMTUgQEAKIAogCWlmIChyZWlzZXJmc19hdHRycyhzKSkgewogCQlpZiAob2xkX2Zvcm1hdF9vbmx5KHMpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAicmVpc2VyZnM6IGNhbm5vdCBzdXBwb3J0IGF0dHJpYnV0ZXMgb24gMy41LnggZGlzayBmb3JtYXQiKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MTciLCAiY2Fubm90IHN1cHBvcnQgIgorCQkJCQkgImF0dHJpYnV0ZXMgb24gMy41LnggZGlzayBmb3JtYXQiKTsKIAkJCVJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmPSB+KDEgPDwgUkVJU0VSRlNfQVRUUlMpOwogCQkJcmV0dXJuOwogCQl9CiAJCWlmICghKGxlMzJfdG9fY3B1KHJzLT5zX2ZsYWdzKSAmIHJlaXNlcmZzX2F0dHJzX2NsZWFyZWQpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAicmVpc2VyZnM6IGNhbm5vdCBzdXBwb3J0IGF0dHJpYnV0ZXMgdW50aWwgZmxhZyBpcyBzZXQgaW4gc3VwZXItYmxvY2siKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MTgiLCAiY2Fubm90IHN1cHBvcnQgIgorCQkJCQkgImF0dHJpYnV0ZXMgdW50aWwgZmxhZyBpcyBzZXQgaW4gIgorCQkJCQkgInN1cGVyLWJsb2NrIik7CiAJCQlSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQgJj0gfigxIDw8IFJFSVNFUkZTX0FUVFJTKTsKIAkJfQogCX0KQEAgLTEyNzgsNiArMTI5Niw4IEBACiAJCVJFSVNFUkZTX1NCKHMpLT5zX21vdW50X3N0YXRlID0gc2JfdW1vdW50X3N0YXRlKHJzKTsKIAkJcy0+c19mbGFncyAmPSB+TVNfUkRPTkxZOwogCQlzZXRfc2JfdW1vdW50X3N0YXRlKHJzLCBSRUlTRVJGU19FUlJPUl9GUyk7CisJCWlmICghb2xkX2Zvcm1hdF9vbmx5KHMpKQorCQkJc2V0X3NiX21udF9jb3VudChycywgc2JfbW50X2NvdW50KHJzKSArIDEpOwogCQkvKiBtYXJrX2J1ZmZlcl9kaXJ0eSAoU0JfQlVGRkVSX1dJVEhfU0IgKHMpLCAxKTsgKi8KIAkJam91cm5hbF9tYXJrX2RpcnR5KCZ0aCwgcywgU0JfQlVGRkVSX1dJVEhfU0IocykpOwogCQlSRUlTRVJGU19TQihzKS0+c19tb3VudF9zdGF0ZSA9IFJFSVNFUkZTX1ZBTElEX0ZTOwpAQCAtMTMxMiw3ICsxMzMyLDcgQEAKIAogCWJoID0gc2JfYnJlYWQocywgb2Zmc2V0IC8gcy0+c19ibG9ja3NpemUpOwogCWlmICghYmgpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLCAic2gtMjAwNjogcmVhZF9zdXBlcl9ibG9jazogIgorCQlyZWlzZXJmc193YXJuaW5nKHMsICJzaC0yMDA2IiwKIAkJCQkgImJyZWFkIGZhaWxlZCAoZGV2ICVzLCBibG9jayAlbHUsIHNpemUgJWx1KSIsCiAJCQkJIHJlaXNlcmZzX2JkZXZuYW1lKHMpLCBvZmZzZXQgLyBzLT5zX2Jsb2Nrc2l6ZSwKIAkJCQkgcy0+c19ibG9ja3NpemUpOwpAQCAtMTMyNiwxNSArMTM0NiwxNSBAQAogCX0KIAkvLwogCS8vIG9rLCByZWlzZXJmcyBzaWduYXR1cmUgKG9sZCBvciBuZXcpIGZvdW5kIGluIGF0IHRoZSBnaXZlbiBvZmZzZXQKLQkvLyAgICAKKwkvLwogCWZzX2Jsb2Nrc2l6ZSA9IHNiX2Jsb2Nrc2l6ZShycyk7CiAJYnJlbHNlKGJoKTsKIAlzYl9zZXRfYmxvY2tzaXplKHMsIGZzX2Jsb2Nrc2l6ZSk7CiAKIAliaCA9IHNiX2JyZWFkKHMsIG9mZnNldCAvIHMtPnNfYmxvY2tzaXplKTsKIAlpZiAoIWJoKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywgInNoLTIwMDc6IHJlYWRfc3VwZXJfYmxvY2s6ICIKLQkJCQkgImJyZWFkIGZhaWxlZCAoZGV2ICVzLCBibG9jayAlbHUsIHNpemUgJWx1KVxuIiwKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAic2gtMjAwNyIsCisJCQkJICJicmVhZCBmYWlsZWQgKGRldiAlcywgYmxvY2sgJWx1LCBzaXplICVsdSkiLAogCQkJCSByZWlzZXJmc19iZGV2bmFtZShzKSwgb2Zmc2V0IC8gcy0+c19ibG9ja3NpemUsCiAJCQkJIHMtPnNfYmxvY2tzaXplKTsKIAkJcmV0dXJuIDE7CkBAIC0xMzQyLDggKzEzNjIsOCBAQAogCiAJcnMgPSAoc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrICopYmgtPmJfZGF0YTsKIAlpZiAoc2JfYmxvY2tzaXplKHJzKSAhPSBzLT5zX2Jsb2Nrc2l6ZSkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsICJzaC0yMDExOiByZWFkX3N1cGVyX2Jsb2NrOiAiCi0JCQkJICJjYW4ndCBmaW5kIGEgcmVpc2VyZnMgZmlsZXN5c3RlbSBvbiAoZGV2ICVzLCBibG9jayAlTHUsIHNpemUgJWx1KVxuIiwKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAic2gtMjAxMSIsICJjYW4ndCBmaW5kIGEgcmVpc2VyZnMgIgorCQkJCSAiZmlsZXN5c3RlbSBvbiAoZGV2ICVzLCBibG9jayAlTHUsIHNpemUgJWx1KSIsCiAJCQkJIHJlaXNlcmZzX2JkZXZuYW1lKHMpLAogCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIsCiAJCQkJIHMtPnNfYmxvY2tzaXplKTsKQEAgLTEzNTMsOSArMTM3MywxMCBAQAogCiAJaWYgKHJzLT5zX3YxLnNfcm9vdF9ibG9jayA9PSBjcHVfdG9fbGUzMigtMSkpIHsKIAkJYnJlbHNlKGJoKTsKLQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCSAiVW5maW5pc2hlZCByZWlzZXJmc2NrIC0tcmVidWlsZC10cmVlIHJ1biBkZXRlY3RlZC4gUGxlYXNlIHJ1blxuIgotCQkJCSAicmVpc2VyZnNjayAtLXJlYnVpbGQtdHJlZSBhbmQgd2FpdCBmb3IgYSBjb21wbGV0aW9uLiBJZiB0aGF0IGZhaWxzXG4iCisJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MTkiLCAiVW5maW5pc2hlZCByZWlzZXJmc2NrICIKKwkJCQkgIi0tcmVidWlsZC10cmVlIHJ1biBkZXRlY3RlZC4gUGxlYXNlIHJ1blxuIgorCQkJCSAicmVpc2VyZnNjayAtLXJlYnVpbGQtdHJlZSBhbmQgd2FpdCBmb3IgYSAiCisJCQkJICJjb21wbGV0aW9uLiBJZiB0aGF0IGZhaWxzXG4iCiAJCQkJICJnZXQgbmV3ZXIgcmVpc2VyZnNwcm9ncyBwYWNrYWdlIik7CiAJCXJldHVybiAxOwogCX0KQEAgLTEzNjcsMTggKzEzODgsMTUgQEAKIAkJLyogbWFnaWMgaXMgb2Ygbm9uLXN0YW5kYXJkIGpvdXJuYWwgZmlsZXN5c3RlbSwgbG9vayBhdCBzX3ZlcnNpb24gdG8KIAkJICAgZmluZCB3aGljaCBmb3JtYXQgaXMgaW4gdXNlICovCiAJCWlmIChzYl92ZXJzaW9uKHJzKSA9PSBSRUlTRVJGU19WRVJTSU9OXzIpCi0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAicmVhZF9zdXBlcl9ibG9jazogZm91bmQgcmVpc2VyZnMgZm9ybWF0IFwiMy42XCIiCi0JCQkJCSAiIHdpdGggbm9uLXN0YW5kYXJkIGpvdXJuYWwiKTsKKwkJCXJlaXNlcmZzX2luZm8ocywgImZvdW5kIHJlaXNlcmZzIGZvcm1hdCBcIjMuNlwiIgorCQkJCSAgICAgICIgd2l0aCBub24tc3RhbmRhcmQgam91cm5hbFxuIik7CiAJCWVsc2UgaWYgKHNiX3ZlcnNpb24ocnMpID09IFJFSVNFUkZTX1ZFUlNJT05fMSkKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJyZWFkX3N1cGVyX2Jsb2NrOiBmb3VuZCByZWlzZXJmcyBmb3JtYXQgXCIzLjVcIiIKLQkJCQkJICIgd2l0aCBub24tc3RhbmRhcmQgam91cm5hbCIpOworCQkJcmVpc2VyZnNfaW5mbyhzLCAiZm91bmQgcmVpc2VyZnMgZm9ybWF0IFwiMy41XCIiCisJCQkJICAgICAgIiB3aXRoIG5vbi1zdGFuZGFyZCBqb3VybmFsXG4iKTsKIAkJZWxzZSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAic2gtMjAxMjogcmVhZF9zdXBlcl9ibG9jazogZm91bmQgdW5rbm93biAiCi0JCQkJCSAiZm9ybWF0IFwiJXVcIiBvZiByZWlzZXJmcyB3aXRoIG5vbi1zdGFuZGFyZCBtYWdpYyIsCi0JCQkJCSBzYl92ZXJzaW9uKHJzKSk7CisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzaC0yMDEyIiwgImZvdW5kIHVua25vd24gIgorCQkJCQkgImZvcm1hdCBcIiV1XCIgb2YgcmVpc2VyZnMgd2l0aCAiCisJCQkJCSAibm9uLXN0YW5kYXJkIG1hZ2ljIiwgc2JfdmVyc2lvbihycykpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9IGVsc2UKQEAgLTE0MDgsOCArMTQyNiw3IEBACiAJbGxfcndfYmxvY2soUkVBRCwgMSwgJihTQl9CVUZGRVJfV0lUSF9TQihzKSkpOwogCXdhaXRfb25fYnVmZmVyKFNCX0JVRkZFUl9XSVRIX1NCKHMpKTsKIAlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShTQl9CVUZGRVJfV0lUSF9TQihzKSkpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCSAicmVyZWFkX21ldGFfYmxvY2tzLCBlcnJvciByZWFkaW5nIHRoZSBzdXBlciIpOworCQlyZWlzZXJmc193YXJuaW5nKHMsICJyZWlzZXJmcy0yNTA0IiwgImVycm9yIHJlYWRpbmcgdGhlIHN1cGVyIik7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMTQ1Miw4ICsxNDY5LDggQEAKIAkJCWlmIChyZWlzZXJmc19ydXBhc292X2hhc2gocykpIHsKIAkJCQloYXNoID0gWVVSQV9IQVNIOwogCQkJfQotCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiRlMgc2VlbXMgdG8gYmUgZW1wdHksIGF1dG9kZXRlY3QgIgotCQkJCQkgImlzIHVzaW5nIHRoZSBkZWZhdWx0IGhhc2giKTsKKwkJCXJlaXNlcmZzX2luZm8ocywgIkZTIHNlZW1zIHRvIGJlIGVtcHR5LCBhdXRvZGV0ZWN0ICIKKwkJCQkJICJpcyB1c2luZyB0aGUgZGVmYXVsdCBoYXNoXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJCXI1aGFzaCA9IEdFVF9IQVNIX1ZBTFVFKHI1X2hhc2goZGUuZGVfbmFtZSwgZGUuZGVfbmFtZWxlbikpOwpAQCAtMTQ3MywxMCArMTQ5MCwxMCBAQAogCQkJJiYgKHl1cmFoYXNoID09CiAJCQkgICAgR0VUX0hBU0hfVkFMVUUoZGVoX29mZnNldAogCQkJCQkgICAoJihkZS5kZV9kZWhbZGUuZGVfZW50cnlfbnVtXSkpKSkpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAiVW5hYmxlIHRvIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IGhhc2ggZnVuY3Rpb24uICIKLQkJCQkJICJQbGVhc2UgbW91bnQgd2l0aCAtbyBoYXNoPXt0ZWEscnVwYXNvdixyNX0iLAotCQkJCQkgcmVpc2VyZnNfYmRldm5hbWUocykpOworCQkJcmVpc2VyZnNfd2FybmluZyhzLCAicmVpc2VyZnMtMjUwNiIsICJVbmFibGUgdG8gIgorCQkJCQkgImF1dG9tYXRpY2FsbHkgZGV0ZWN0IGhhc2ggZnVuY3Rpb24uICIKKwkJCQkJICJQbGVhc2UgbW91bnQgd2l0aCAtbyAiCisJCQkJCSAiaGFzaD17dGVhLHJ1cGFzb3YscjV9Iik7CiAJCQloYXNoID0gVU5TRVRfSEFTSDsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNDkwLDcgKzE1MDcsOCBAQAogCQkJIChkZWhfb2Zmc2V0KCYoZGUuZGVfZGVoW2RlLmRlX2VudHJ5X251bV0pKSkgPT0gcjVoYXNoKQogCQkJaGFzaCA9IFI1X0hBU0g7CiAJCWVsc2UgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiVW5yZWNvZ25pc2VkIGhhc2ggZnVuY3Rpb24iKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInJlaXNlcmZzLTI1MDYiLAorCQkJCQkgIlVucmVjb2duaXNlZCBoYXNoIGZ1bmN0aW9uIik7CiAJCQloYXNoID0gVU5TRVRfSEFTSDsKIAkJfQogCX0gd2hpbGUgKDApOwpAQCAtMTUxNCwyMSArMTUzMiwyNCBAQAogCQljb2RlID0gZmluZF9oYXNoX291dChzKTsKIAogCWlmIChjb2RlICE9IFVOU0VUX0hBU0ggJiYgcmVpc2VyZnNfaGFzaF9kZXRlY3QocykpIHsKLQkJLyogZGV0ZWN0aW9uIGhhcyBmb3VuZCB0aGUgaGFzaCwgYW5kIHdlIG11c3QgY2hlY2sgYWdhaW5zdCB0aGUgCi0JCSAqKiBtb3VudCBvcHRpb25zIAorCQkvKiBkZXRlY3Rpb24gaGFzIGZvdW5kIHRoZSBoYXNoLCBhbmQgd2UgbXVzdCBjaGVjayBhZ2FpbnN0IHRoZQorCQkgKiogbW91bnQgb3B0aW9ucwogCQkgKi8KIAkJaWYgKHJlaXNlcmZzX3J1cGFzb3ZfaGFzaChzKSAmJiBjb2RlICE9IFlVUkFfSEFTSCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiRXJyb3IsICVzIGhhc2ggZGV0ZWN0ZWQsICIKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInJlaXNlcmZzLTI1MDciLAorCQkJCQkgIkVycm9yLCAlcyBoYXNoIGRldGVjdGVkLCAiCiAJCQkJCSAidW5hYmxlIHRvIGZvcmNlIHJ1cGFzb3YgaGFzaCIsCiAJCQkJCSByZWlzZXJmc19oYXNobmFtZShjb2RlKSk7CiAJCQljb2RlID0gVU5TRVRfSEFTSDsKIAkJfSBlbHNlIGlmIChyZWlzZXJmc190ZWFfaGFzaChzKSAmJiBjb2RlICE9IFRFQV9IQVNIKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsICJFcnJvciwgJXMgaGFzaCBkZXRlY3RlZCwgIgorCQkJcmVpc2VyZnNfd2FybmluZyhzLCAicmVpc2VyZnMtMjUwOCIsCisJCQkJCSAiRXJyb3IsICVzIGhhc2ggZGV0ZWN0ZWQsICIKIAkJCQkJICJ1bmFibGUgdG8gZm9yY2UgdGVhIGhhc2giLAogCQkJCQkgcmVpc2VyZnNfaGFzaG5hbWUoY29kZSkpOwogCQkJY29kZSA9IFVOU0VUX0hBU0g7CiAJCX0gZWxzZSBpZiAocmVpc2VyZnNfcjVfaGFzaChzKSAmJiBjb2RlICE9IFI1X0hBU0gpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywgIkVycm9yLCAlcyBoYXNoIGRldGVjdGVkLCAiCisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJyZWlzZXJmcy0yNTA5IiwKKwkJCQkJICJFcnJvciwgJXMgaGFzaCBkZXRlY3RlZCwgIgogCQkJCQkgInVuYWJsZSB0byBmb3JjZSByNSBoYXNoIiwKIAkJCQkJIHJlaXNlcmZzX2hhc2huYW1lKGNvZGUpKTsKIAkJCWNvZGUgPSBVTlNFVF9IQVNIOwpAQCAtMTU0NCw3ICsxNTY1LDcgQEAKIAkJfQogCX0KIAotCS8qIGlmIHdlIGFyZSBtb3VudGVkIFJXLCBhbmQgd2UgaGF2ZSBhIG5ldyB2YWxpZCBoYXNoIGNvZGUsIHVwZGF0ZSAKKwkvKiBpZiB3ZSBhcmUgbW91bnRlZCBSVywgYW5kIHdlIGhhdmUgYSBuZXcgdmFsaWQgaGFzaCBjb2RlLCB1cGRhdGUKIAkgKiogdGhlIHN1cGVyCiAJICovCiAJaWYgKGNvZGUgIT0gVU5TRVRfSEFTSCAmJgpAQCAtMTU4Nyw5ICsxNjA4LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBTV0FSTihzaWxlbnQsIHMsIC4uLikJCQlcCisjZGVmaW5lIFNXQVJOKHNpbGVudCwgcywgaWQsIC4uLikJCQlcCiAJaWYgKCEoc2lsZW50KSkJCQkJXAotCQlyZWlzZXJmc193YXJuaW5nIChzLCBfX1ZBX0FSR1NfXykKKwkJcmVpc2VyZnNfd2FybmluZyhzLCBpZCwgX19WQV9BUkdTX18pCiAKIHN0YXRpYyBpbnQgcmVpc2VyZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHZvaWQgKmRhdGEsIGludCBzaWxlbnQpCiB7CkBAIC0xNjIzLDEwICsxNjQ0LDYgQEAKIAlSRUlTRVJGU19TQihzKS0+c19hbGxvY19vcHRpb25zLnByZWFsbG9jbWluID0gMDsKIAkvKiBQcmVhbGxvY2F0ZSBieSAxNiBibG9ja3MgKDE3LTEpIGF0IG9uY2UgKi8KIAlSRUlTRVJGU19TQihzKS0+c19hbGxvY19vcHRpb25zLnByZWFsbG9jc2l6ZSA9IDE3OwotI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19YQVRUUgotCS8qIEluaXRpYWxpemUgdGhlIHJ3c2VtIGZvciB4YXR0ciBkaXIgKi8KLQlpbml0X3J3c2VtKCZSRUlTRVJGU19TQihzKS0+eGF0dHJfZGlyX3NlbSk7Ci0jZW5kaWYKIAkvKiBzZXR1cCBkZWZhdWx0IGJsb2NrIGFsbG9jYXRvciBvcHRpb25zICovCiAJcmVpc2VyZnNfaW5pdF9hbGxvY19vcHRpb25zKHMpOwogCkBAIC0xNjQxLDggKzE2NTgsNyBAQAogI2VuZGlmCiAKIAlpZiAoYmxvY2tzKSB7Ci0JCVNXQVJOKHNpbGVudCwgcywgImptYWNkLTc6IHJlaXNlcmZzX2ZpbGxfc3VwZXI6IHJlc2l6ZSBvcHRpb24gIgotCQkgICAgICAiZm9yIHJlbW91bnQgb25seSIpOworCQlTV0FSTihzaWxlbnQsIHMsICJqbWFjZC03IiwgInJlc2l6ZSBvcHRpb24gZm9yIHJlbW91bnQgb25seSIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMTY1MSw4ICsxNjY3LDcgQEAKIAkJb2xkX2Zvcm1hdCA9IDE7CiAJLyogdHJ5IG5ldyBmb3JtYXQgKDY0LXRoIDFrIGJsb2NrKSwgd2hpY2ggY2FuIGNvbnRhaW4gcmVpc2VyZnMgc3VwZXIgYmxvY2sgKi8KIAllbHNlIGlmIChyZWFkX3N1cGVyX2Jsb2NrKHMsIFJFSVNFUkZTX0RJU0tfT0ZGU0VUX0lOX0JZVEVTKSkgewotCQlTV0FSTihzaWxlbnQsIHMsCi0JCSAgICAgICJzaC0yMDIxOiByZWlzZXJmc19maWxsX3N1cGVyOiBjYW4gbm90IGZpbmQgcmVpc2VyZnMgb24gJXMiLAorCQlTV0FSTihzaWxlbnQsIHMsICJzaC0yMDIxIiwgImNhbiBub3QgZmluZCByZWlzZXJmcyBvbiAlcyIsCiAJCSAgICAgIHJlaXNlcmZzX2JkZXZuYW1lKHMpKTsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC0xNjY0LDEzICsxNjc5LDEyIEBACiAJaWYgKHMtPnNfYmRldiAmJiBzLT5zX2JkZXYtPmJkX2lub2RlCiAJICAgICYmIGlfc2l6ZV9yZWFkKHMtPnNfYmRldi0+YmRfaW5vZGUpIDwKIAkgICAgc2JfYmxvY2tfY291bnQocnMpICogc2JfYmxvY2tzaXplKHJzKSkgewotCQlTV0FSTihzaWxlbnQsIHMsCi0JCSAgICAgICJGaWxlc3lzdGVtIG9uICVzIGNhbm5vdCBiZSBtb3VudGVkIGJlY2F1c2UgaXQgaXMgYmlnZ2VyIHRoYW4gdGhlIGRldmljZSIsCi0JCSAgICAgIHJlaXNlcmZzX2JkZXZuYW1lKHMpKTsKLQkJU1dBUk4oc2lsZW50LCBzLAotCQkgICAgICAiWW91IG1heSBuZWVkIHRvIHJ1biBmc2NrIG9yIGluY3JlYXNlIHNpemUgb2YgeW91ciBMVk0gcGFydGl0aW9uIik7Ci0JCVNXQVJOKHNpbGVudCwgcywKLQkJICAgICAgIk9yIG1heSBiZSB5b3UgZm9yZ290IHRvIHJlYm9vdCBhZnRlciBmZGlzayB3aGVuIGl0IHRvbGQgeW91IHRvIik7CisJCVNXQVJOKHNpbGVudCwgcywgIiIsICJGaWxlc3lzdGVtIGNhbm5vdCBiZSAiCisJCSAgICAgICJtb3VudGVkIGJlY2F1c2UgaXQgaXMgYmlnZ2VyIHRoYW4gdGhlIGRldmljZSIpOworCQlTV0FSTihzaWxlbnQsIHMsICIiLCAiWW91IG1heSBuZWVkIHRvIHJ1biBmc2NrICIKKwkJICAgICAgIm9yIGluY3JlYXNlIHNpemUgb2YgeW91ciBMVk0gcGFydGl0aW9uIik7CisJCVNXQVJOKHNpbGVudCwgcywgIiIsICJPciBtYXkgYmUgeW91IGZvcmdvdCB0byAiCisJCSAgICAgICJyZWJvb3QgYWZ0ZXIgZmRpc2sgd2hlbiBpdCB0b2xkIHlvdSB0byIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMTY3OCwxNCArMTY5MiwxMyBAQAogCXNiaS0+c19tb3VudF9zdGF0ZSA9IFJFSVNFUkZTX1ZBTElEX0ZTOwogCiAJaWYgKChlcnJ2YWwgPSByZWlzZXJmc19pbml0X2JpdG1hcF9jYWNoZShzKSkpIHsKLQkJU1dBUk4oc2lsZW50LCBzLAotCQkgICAgICAiam1hY2QtODogcmVpc2VyZnNfZmlsbF9zdXBlcjogdW5hYmxlIHRvIHJlYWQgYml0bWFwIik7CisJCVNXQVJOKHNpbGVudCwgcywgImptYWNkLTgiLCAidW5hYmxlIHRvIHJlYWQgYml0bWFwIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCWVycnZhbCA9IC1FSU5WQUw7CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCi0JU1dBUk4oc2lsZW50LCBzLCAiQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIHNldCBPTiIpOwotCVNXQVJOKHNpbGVudCwgcywgIi0gaXQgaXMgc2xvdyBtb2RlIGZvciBkZWJ1Z2dpbmcuIik7CisJU1dBUk4oc2lsZW50LCBzLCAiIiwgIkNPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBzZXQgT04iKTsKKwlTV0FSTihzaWxlbnQsIHMsICIiLCAiLSBpdCBpcyBzbG93IG1vZGUgZm9yIGRlYnVnZ2luZy4iKTsKICNlbmRpZgogCiAJLyogbWFrZSBkYXRhPW9yZGVyZWQgdGhlIGRlZmF1bHQgKi8KQEAgLTE3MDYsOCArMTcxOSw4IEBACiAJfQogCS8vIHNldF9kZXZpY2Vfcm8ocy0+c19kZXYsIDEpIDsKIAlpZiAoam91cm5hbF9pbml0KHMsIGpkZXZfbmFtZSwgb2xkX2Zvcm1hdCwgY29tbWl0X21heF9hZ2UpKSB7Ci0JCVNXQVJOKHNpbGVudCwgcywKLQkJICAgICAgInNoLTIwMjI6IHJlaXNlcmZzX2ZpbGxfc3VwZXI6IHVuYWJsZSB0byBpbml0aWFsaXplIGpvdXJuYWwgc3BhY2UiKTsKKwkJU1dBUk4oc2lsZW50LCBzLCAic2gtMjAyMiIsCisJCSAgICAgICJ1bmFibGUgdG8gaW5pdGlhbGl6ZSBqb3VybmFsIHNwYWNlIik7CiAJCWdvdG8gZXJyb3I7CiAJfSBlbHNlIHsKIAkJamluaXRfZG9uZSA9IDE7CS8qIG9uY2UgdGhpcyBpcyBzZXQsIGpvdXJuYWxfcmVsZWFzZSBtdXN0IGJlIGNhbGxlZApAQCAtMTcxNSw4ICsxNzI4LDggQEAKIAkJCQkgKi8KIAl9CiAJaWYgKHJlcmVhZF9tZXRhX2Jsb2NrcyhzKSkgewotCQlTV0FSTihzaWxlbnQsIHMsCi0JCSAgICAgICJqbWFjZC05OiByZWlzZXJmc19maWxsX3N1cGVyOiB1bmFibGUgdG8gcmVyZWFkIG1ldGEgYmxvY2tzIGFmdGVyIGpvdXJuYWwgaW5pdCIpOworCQlTV0FSTihzaWxlbnQsIHMsICJqbWFjZC05IiwKKwkJICAgICAgInVuYWJsZSB0byByZXJlYWQgbWV0YSBibG9ja3MgYWZ0ZXIgam91cm5hbCBpbml0Iik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0xNzI0LDggKzE3MzcsOCBAQAogCQlnb3RvIGVycm9yOwogCiAJaWYgKGJkZXZfcmVhZF9vbmx5KHMtPnNfYmRldikgJiYgIShzLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgewotCQlTV0FSTihzaWxlbnQsIHMsCi0JCSAgICAgICJjbG0tNzAwMDogRGV0ZWN0ZWQgcmVhZG9ubHkgZGV2aWNlLCBtYXJraW5nIEZTIHJlYWRvbmx5Iik7CisJCVNXQVJOKHNpbGVudCwgcywgImNsbS03MDAwIiwKKwkJICAgICAgIkRldGVjdGVkIHJlYWRvbmx5IGRldmljZSwgbWFya2luZyBGUyByZWFkb25seSIpOwogCQlzLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKIAl9CiAJYXJncy5vYmplY3RpZCA9IFJFSVNFUkZTX1JPT1RfT0JKRUNUSUQ7CkBAIC0xNzM0LDggKzE3NDcsNyBAQAogCSAgICBpZ2V0NV9sb2NrZWQocywgUkVJU0VSRlNfUk9PVF9PQkpFQ1RJRCwgcmVpc2VyZnNfZmluZF9hY3RvciwKIAkJCSByZWlzZXJmc19pbml0X2xvY2tlZF9pbm9kZSwgKHZvaWQgKikoJmFyZ3MpKTsKIAlpZiAoIXJvb3RfaW5vZGUpIHsKLQkJU1dBUk4oc2lsZW50LCBzLAotCQkgICAgICAiam1hY2QtMTA6IHJlaXNlcmZzX2ZpbGxfc3VwZXI6IGdldCByb290IGlub2RlIGZhaWxlZCIpOworCQlTV0FSTihzaWxlbnQsIHMsICJqbWFjZC0xMCIsICJnZXQgcm9vdCBpbm9kZSBmYWlsZWQiKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTE3ODQsNyArMTc5Niw3IEBACiAJCSAqIGF2b2lkaW5nIGNvcnJ1cHRpb24uIC1qZWZmbSAqLwogCQlpZiAoYm1hcF93b3VsZF93cmFwKHJlaXNlcmZzX2JtYXBfY291bnQocykpICYmCiAJCSAgICBzYl9ibWFwX25yKHJzKSAhPSAwKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci0yMDMwOiBUaGlzIGZpbGUgc3lzdGVtICIKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTIwMzAiLCAiVGhpcyBmaWxlIHN5c3RlbSAiCiAJCQkJCSJjbGFpbXMgdG8gdXNlICV1IGJpdG1hcCBibG9ja3MgaW4gIgogCQkJCQkiaXRzIHN1cGVyIGJsb2NrLCBidXQgcmVxdWlyZXMgJXUuICIKIAkJCQkJIkNsZWFyaW5nIHRvIHplcm8uIiwgc2JfYm1hcF9ucihycyksCkBAIC0xODE3LDcgKzE4MjksOSBAQAogCQkJfSBlbHNlIGlmICghc2lsZW50KSB7CiAJCQkJcmVpc2VyZnNfaW5mbyhzLCAidXNpbmcgMy41LnggZGlzayBmb3JtYXRcbiIpOwogCQkJfQotCQl9CisJCX0gZWxzZQorCQkJc2V0X3NiX21udF9jb3VudChycywgc2JfbW50X2NvdW50KHJzKSArIDEpOworCiAKIAkJam91cm5hbF9tYXJrX2RpcnR5KCZ0aCwgcywgU0JfQlVGRkVSX1dJVEhfU0IocykpOwogCQllcnJ2YWwgPSBqb3VybmFsX2VuZCgmdGgsIHMsIDEpOwpAQCAtMjAzMSw4ICsyMDQ1LDggQEAKIAlpZiAoIShSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyAmIGlfbm9wYWNrX21hc2spKSB7CiAJCWVyciA9IHJlaXNlcmZzX3VucGFjayhpbm9kZSwgTlVMTCk7CiAJCWlmIChlcnIpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsCi0JCQkJInJlaXNlcmZzOiBVbnBhY2tpbmcgdGFpbCBvZiBxdW90YSBmaWxlIGZhaWxlZCIKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJzdXBlci02NTIwIiwKKwkJCQkiVW5wYWNraW5nIHRhaWwgb2YgcXVvdGEgZmlsZSBmYWlsZWQiCiAJCQkJIiAoJWQpLiBDYW5ub3QgdHVybiBvbiBxdW90YXMuIiwgZXJyKTsKIAkJCWVyciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKQEAgLTIwNDMsOCArMjA1Nyw4IEBACiAJaWYgKFJFSVNFUkZTX1NCKHNiKS0+c19xZl9uYW1lc1t0eXBlXSkgewogCQkvKiBRdW90YWZpbGUgbm90IG9mIGZzIHJvb3Q/ICovCiAJCWlmIChwYXRoLmRlbnRyeS0+ZF9wYXJlbnQgIT0gc2ItPnNfcm9vdCkKLQkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsCi0JCQkJICJyZWlzZXJmczogUXVvdGEgZmlsZSBub3Qgb24gZmlsZXN5c3RlbSByb290LiAiCisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAic3VwZXItNjUyMSIsCisJCQkJICJRdW90YSBmaWxlIG5vdCBvbiBmaWxlc3lzdGVtIHJvb3QuICIKIAkJCQkgIkpvdXJuYWxsZWQgcXVvdGEgd2lsbCBub3Qgd29yay4iKTsKIAl9CiAKQEAgLTIxOTUsOSArMjIwOSw2IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKChyZXQgPSByZWlzZXJmc194YXR0cl9yZWdpc3Rlcl9oYW5kbGVycygpKSkKLQkJZ290byBmYWlsZWRfcmVpc2VyZnNfeGF0dHJfcmVnaXN0ZXJfaGFuZGxlcnM7Ci0KIAlyZWlzZXJmc19wcm9jX2luZm9fZ2xvYmFsX2luaXQoKTsKIAlyZWlzZXJmc19wcm9jX3JlZ2lzdGVyX2dsb2JhbCgidmVyc2lvbiIsCiAJCQkJICAgICAgcmVpc2VyZnNfZ2xvYmFsX3ZlcnNpb25faW5fcHJvYyk7CkBAIC0yMjA4LDkgKzIyMTksNiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZWlzZXJmc194YXR0cl91bnJlZ2lzdGVyX2hhbmRsZXJzKCk7Ci0KLSAgICAgIGZhaWxlZF9yZWlzZXJmc194YXR0cl9yZWdpc3Rlcl9oYW5kbGVyczoKIAlyZWlzZXJmc19wcm9jX3VucmVnaXN0ZXJfZ2xvYmFsKCJ2ZXJzaW9uIik7CiAJcmVpc2VyZnNfcHJvY19pbmZvX2dsb2JhbF9kb25lKCk7CiAJZGVzdHJveV9pbm9kZWNhY2hlKCk7CkBAIC0yMjIwLDcgKzIyMjgsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yZWlzZXJmc19mcyh2b2lkKQogewotCXJlaXNlcmZzX3hhdHRyX3VucmVnaXN0ZXJfaGFuZGxlcnMoKTsKIAlyZWlzZXJmc19wcm9jX3VucmVnaXN0ZXJfZ2xvYmFsKCJ2ZXJzaW9uIik7CiAJcmVpc2VyZnNfcHJvY19pbmZvX2dsb2JhbF9kb25lKCk7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZyZWlzZXJmc19mc190eXBlKTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3RhaWxfY29udmVyc2lvbi5jIGIvZnMvcmVpc2VyZnMvdGFpbF9jb252ZXJzaW9uLmMKaW5kZXggZjgxMjFhMS4uZDdmNmU1MSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvdGFpbF9jb252ZXJzaW9uLmMKKysrIGIvZnMvcmVpc2VyZnMvdGFpbF9jb252ZXJzaW9uLmMKQEAgLTI2LDcgKzI2LDcgQEAKIAkJCQkgICBjb252ZXJ0ZWQgaXRlbS4gKi8KIAlzdHJ1Y3QgaXRlbV9oZWFkIGluZF9paDsJLyogbmV3IGluZGlyZWN0IGl0ZW0gdG8gYmUgaW5zZXJ0ZWQgb3IKIAkJCQkJICAga2V5IG9mIHVuZm0gcG9pbnRlciB0byBiZSBwYXN0ZWQgKi8KLQlpbnQgbl9ibGtfc2l6ZSwgbl9yZXR2YWw7CS8qIHJldHVybmVkIHZhbHVlIGZvciByZWlzZXJmc19pbnNlcnRfaXRlbSBhbmQgY2xvbmVzICovCisJaW50IGJsa19zaXplLCByZXR2YWw7CS8qIHJldHVybmVkIHZhbHVlIGZvciByZWlzZXJmc19pbnNlcnRfaXRlbSBhbmQgY2xvbmVzICovCiAJdW5wX3QgdW5mbV9wdHI7CQkvKiBIYW5kbGUgb24gYW4gdW5mb3JtYXR0ZWQgbm9kZQogCQkJCSAgIHRoYXQgd2lsbCBiZSBpbnNlcnRlZCBpbiB0aGUKIAkJCQkgICB0cmVlLiAqLwpAQCAtMzUsNyArMzUsNyBAQAogCiAJUkVJU0VSRlNfU0Ioc2IpLT5zX2RpcmVjdDJpbmRpcmVjdCsrOwogCi0Jbl9ibGtfc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKKwlibGtfc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKIAogCS8qIGFuZCBrZXkgdG8gc2VhcmNoIGZvciBhcHBlbmQgb3IgaW5zZXJ0IHBvaW50ZXIgdG8gdGhlIG5ldwogCSAgIHVuZm9ybWF0dGVkIG5vZGUuICovCkBAIC00NiwxMSArNDYsMTEgQEAKIAkvKiBTZXQgdGhlIGtleSB0byBzZWFyY2ggZm9yIHRoZSBwbGFjZSBmb3IgbmV3IHVuZm0gcG9pbnRlciAqLwogCW1ha2VfY3B1X2tleSgmZW5kX2tleSwgaW5vZGUsIHRhaWxfb2Zmc2V0LCBUWVBFX0lORElSRUNULCA0KTsKIAotCS8vIEZJWE1FOiB3ZSBjb3VsZCBhdm9pZCB0aGlzIAorCS8qIEZJWE1FOiB3ZSBjb3VsZCBhdm9pZCB0aGlzICovCiAJaWYgKHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHNiLCAmZW5kX2tleSwgcGF0aCkgPT0gUE9TSVRJT05fRk9VTkQpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzYiwgIlBBUC0xNDAzMDogZGlyZWN0MmluZGlyZWN0OiAiCi0JCQkJICJwYXN0ZWQgb3IgaW5zZXJ0ZWQgYnl0ZSBleGlzdHMgaW4gdGhlIHRyZWUgJUsuICIKLQkJCQkgIlVzZSBmc2NrIHRvIHJlcGFpci4iLCAmZW5kX2tleSk7CisJCXJlaXNlcmZzX2Vycm9yKHNiLCAiUEFQLTE0MDMwIiwKKwkJCSAgICAgICAicGFzdGVkIG9yIGluc2VydGVkIGJ5dGUgZXhpc3RzIGluICIKKwkJCSAgICAgICAidGhlIHRyZWUgJUsuIFVzZSBmc2NrIHRvIHJlcGFpci4iLCAmZW5kX2tleSk7CiAJCXBhdGhyZWxzZShwYXRoKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtNjQsMTcgKzY0LDE3IEBACiAJCXNldF9paF9mcmVlX3NwYWNlKCZpbmRfaWgsIDApOwkvKiBkZWxldGUgYXQgbmVhcmVzdCBmdXR1cmUgKi8KIAkJcHV0X2loX2l0ZW1fbGVuKCZpbmRfaWgsIFVORk1fUF9TSVpFKTsKIAkJUEFUSF9MQVNUX1BPU0lUSU9OKHBhdGgpKys7Ci0JCW5fcmV0dmFsID0KKwkJcmV0dmFsID0KIAkJICAgIHJlaXNlcmZzX2luc2VydF9pdGVtKHRoLCBwYXRoLCAmZW5kX2tleSwgJmluZF9paCwgaW5vZGUsCiAJCQkJCSAoY2hhciAqKSZ1bmZtX3B0cik7CiAJfSBlbHNlIHsKIAkJLyogUGFzdGUgaW50byBsYXN0IGluZGlyZWN0IGl0ZW0gb2YgYW4gb2JqZWN0LiAqLwotCQluX3JldHZhbCA9IHJlaXNlcmZzX3Bhc3RlX2ludG9faXRlbSh0aCwgcGF0aCwgJmVuZF9rZXksIGlub2RlLAorCQlyZXR2YWwgPSByZWlzZXJmc19wYXN0ZV9pbnRvX2l0ZW0odGgsIHBhdGgsICZlbmRfa2V5LCBpbm9kZSwKIAkJCQkJCSAgICAoY2hhciAqKSZ1bmZtX3B0ciwKIAkJCQkJCSAgICBVTkZNX1BfU0laRSk7CiAJfQotCWlmIChuX3JldHZhbCkgewotCQlyZXR1cm4gbl9yZXR2YWw7CisJaWYgKHJldHZhbCkgeworCQlyZXR1cm4gcmV0dmFsOwogCX0KIAkvLyBub3RlOiBmcm9tIGhlcmUgdGhlcmUgYXJlIHR3byBrZXlzIHdoaWNoIGhhdmUgbWF0Y2hpbmcgZmlyc3QKIAkvLyB0aHJlZSBrZXkgY29tcG9uZW50cy4gVGhleSBvbmx5IGRpZmZlciBieSB0aGUgZm91cnRoIG9uZS4KQEAgLTkyLDE0ICs5MiwxMyBAQAogCQkgICBsYXN0IGl0ZW0gb2YgdGhlIGZpbGUgKi8KIAkJaWYgKHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHNiLCAmZW5kX2tleSwgcGF0aCkgPT0KIAkJICAgIFBPU0lUSU9OX0ZPVU5EKQotCQkJcmVpc2VyZnNfcGFuaWMoc2IsCi0JCQkJICAgICAgICJQQVAtMTQwNTA6IGRpcmVjdDJpbmRpcmVjdDogIgorCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJQQVAtMTQwNTAiLAogCQkJCSAgICAgICAiZGlyZWN0IGl0ZW0gKCVLKSBub3QgZm91bmQiLCAmZW5kX2tleSk7CiAJCXBfbGVfaWggPSBQQVRIX1BJVEVNX0hFQUQocGF0aCk7CiAJCVJGQUxTRSghaXNfZGlyZWN0X2xlX2loKHBfbGVfaWgpLAogCQkgICAgICAgInZzLTE0MDU1OiBkaXJlY3QgaXRlbSBleHBlY3RlZCglSyksIGZvdW5kICVoIiwKIAkJICAgICAgICZlbmRfa2V5LCBwX2xlX2loKTsKLQkJdGFpbF9zaXplID0gKGxlX2loX2tfb2Zmc2V0KHBfbGVfaWgpICYgKG5fYmxrX3NpemUgLSAxKSkKKwkJdGFpbF9zaXplID0gKGxlX2loX2tfb2Zmc2V0KHBfbGVfaWgpICYgKGJsa19zaXplIC0gMSkpCiAJCSAgICArIGloX2l0ZW1fbGVuKHBfbGVfaWgpIC0gMTsKIAogCQkvKiB3ZSBvbmx5IHNlbmQgdGhlIHVuYmggcG9pbnRlciBpZiB0aGUgYnVmZmVyIGlzIG5vdCB1cCB0byBkYXRlLgpAQCAtMTE0LDExICsxMTMsMTEgQEAKIAkJfSBlbHNlIHsKIAkJCXVwX3RvX2RhdGVfYmggPSB1bmJoOwogCQl9Ci0JCW5fcmV0dmFsID0gcmVpc2VyZnNfZGVsZXRlX2l0ZW0odGgsIHBhdGgsICZlbmRfa2V5LCBpbm9kZSwKKwkJcmV0dmFsID0gcmVpc2VyZnNfZGVsZXRlX2l0ZW0odGgsIHBhdGgsICZlbmRfa2V5LCBpbm9kZSwKIAkJCQkJCXVwX3RvX2RhdGVfYmgpOwogCi0JCXRvdGFsX3RhaWwgKz0gbl9yZXR2YWw7Ci0JCWlmICh0YWlsX3NpemUgPT0gbl9yZXR2YWwpCisJCXRvdGFsX3RhaWwgKz0gcmV0dmFsOworCQlpZiAodGFpbF9zaXplID09IHJldHZhbCkKIAkJCS8vIGRvbmU6IGZpbGUgZG9lcyBub3QgaGF2ZSBkaXJlY3QgaXRlbXMgYW55bW9yZQogCQkJYnJlYWs7CiAKQEAgLTEzMCw3ICsxMjksNyBAQAogCQl1bnNpZ25lZCBwZ29mZiA9CiAJCSAgICAodGFpbF9vZmZzZXQgKyB0b3RhbF90YWlsIC0gMSkgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CiAJCWNoYXIgKmthZGRyID0ga21hcF9hdG9taWModXBfdG9fZGF0ZV9iaC0+Yl9wYWdlLCBLTV9VU0VSMCk7Ci0JCW1lbXNldChrYWRkciArIHBnb2ZmLCAwLCBuX2Jsa19zaXplIC0gdG90YWxfdGFpbCk7CisJCW1lbXNldChrYWRkciArIHBnb2ZmLCAwLCBibGtfc2l6ZSAtIHRvdGFsX3RhaWwpOwogCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CiAJfQogCkBAIC0xNzEsMTQgKzE3MCwxOCBAQAogICAgd2hhdCB3ZSBleHBlY3QgZnJvbSBpdCAobnVtYmVyIG9mIGN1dCBieXRlcykuIEJ1dCB3aGVuIHRhaWwgcmVtYWlucwogICAgaW4gdGhlIHVuZm9ybWF0dGVkIG5vZGUsIHdlIHNldCBtb2RlIHRvIFNLSVBfQkFMQU5DSU5HIGFuZCB1bmxvY2sKICAgIGlub2RlICovCi1pbnQgaW5kaXJlY3QyZGlyZWN0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgaW5vZGUgKnBfc19pbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGgsCS8qIHBhdGggdG8gdGhlIGluZGlyZWN0IGl0ZW0uICovCi0JCSAgICBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqcF9zX2l0ZW1fa2V5LAkvKiBLZXkgdG8gbG9vayBmb3IgdW5mb3JtYXR0ZWQgbm9kZSBwb2ludGVyIHRvIGJlIGN1dC4gKi8KK2ludCBpbmRpcmVjdDJkaXJlY3Qoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJICAgIHN0cnVjdCB0cmVlcGF0aCAqcGF0aCwJLyogcGF0aCB0byB0aGUgaW5kaXJlY3QgaXRlbS4gKi8KKwkJICAgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICppdGVtX2tleSwJLyogS2V5IHRvIGxvb2sgZm9yCisJCQkJCQkJICogdW5mb3JtYXR0ZWQgbm9kZQorCQkJCQkJCSAqIHBvaW50ZXIgdG8gYmUgY3V0LiAqLwogCQkgICAgbG9mZl90IG5fbmV3X2ZpbGVfc2l6ZSwJLyogTmV3IGZpbGUgc2l6ZS4gKi8KLQkJICAgIGNoYXIgKnBfY19tb2RlKQorCQkgICAgY2hhciAqbW9kZSkKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiA9IHBfc19pbm9kZS0+aV9zYjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJc3RydWN0IGl0ZW1faGVhZCBzX2loOwotCXVuc2lnbmVkIGxvbmcgbl9ibG9ja19zaXplID0gcF9zX3NiLT5zX2Jsb2Nrc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGJsb2NrX3NpemUgPSBzYi0+c19ibG9ja3NpemU7CiAJY2hhciAqdGFpbDsKIAlpbnQgdGFpbF9sZW4sIHJvdW5kX3RhaWxfbGVuOwogCWxvZmZfdCBwb3MsIHBvczE7CS8qIHBvc2l0aW9uIG9mIGZpcnN0IGJ5dGUgb2YgdGhlIHRhaWwgKi8KQEAgLTE4NiwyMiArMTg5LDIyIEBACiAKIAlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKIAotCVJFSVNFUkZTX1NCKHBfc19zYiktPnNfaW5kaXJlY3QyZGlyZWN0Kys7CisJUkVJU0VSRlNfU0Ioc2IpLT5zX2luZGlyZWN0MmRpcmVjdCsrOwogCi0JKnBfY19tb2RlID0gTV9TS0lQX0JBTEFOQ0lORzsKKwkqbW9kZSA9IE1fU0tJUF9CQUxBTkNJTkc7CiAKIAkvKiBzdG9yZSBpdGVtIGhlYWQgcGF0aCBwb2ludHMgdG8uICovCi0JY29weV9pdGVtX2hlYWQoJnNfaWgsIFBBVEhfUElURU1fSEVBRChwX3NfcGF0aCkpOworCWNvcHlfaXRlbV9oZWFkKCZzX2loLCBQQVRIX1BJVEVNX0hFQUQocGF0aCkpOwogCi0JdGFpbF9sZW4gPSAobl9uZXdfZmlsZV9zaXplICYgKG5fYmxvY2tfc2l6ZSAtIDEpKTsKLQlpZiAoZ2V0X2lub2RlX3NkX3ZlcnNpb24ocF9zX2lub2RlKSA9PSBTVEFUX0RBVEFfVjIpCisJdGFpbF9sZW4gPSAobl9uZXdfZmlsZV9zaXplICYgKGJsb2NrX3NpemUgLSAxKSk7CisJaWYgKGdldF9pbm9kZV9zZF92ZXJzaW9uKGlub2RlKSA9PSBTVEFUX0RBVEFfVjIpCiAJCXJvdW5kX3RhaWxfbGVuID0gUk9VTkRfVVAodGFpbF9sZW4pOwogCWVsc2UKIAkJcm91bmRfdGFpbF9sZW4gPSB0YWlsX2xlbjsKIAogCXBvcyA9CiAJICAgIGxlX2loX2tfb2Zmc2V0KCZzX2loKSAtIDEgKyAoaWhfaXRlbV9sZW4oJnNfaWgpIC8gVU5GTV9QX1NJWkUgLQotCQkJCQkgMSkgKiBwX3Nfc2ItPnNfYmxvY2tzaXplOworCQkJCQkgMSkgKiBzYi0+c19ibG9ja3NpemU7CiAJcG9zMSA9IHBvczsKIAogCS8vIHdlIGFyZSBwcm90ZWN0ZWQgYnkgaV9tdXRleC4gVGhlIHRhaWwgY2FuIG5vdCBkaXNhcHBlciwgbm90CkBAIC0yMTAsMjcgKzIxMywyNiBAQAogCiAJdGFpbCA9IChjaGFyICopa21hcChwYWdlKTsJLyogdGhpcyBjYW4gc2NoZWR1bGUgKi8KIAotCWlmIChwYXRoX2NoYW5nZWQoJnNfaWgsIHBfc19wYXRoKSkgeworCWlmIChwYXRoX2NoYW5nZWQoJnNfaWgsIHBhdGgpKSB7CiAJCS8qIHJlLXNlYXJjaCBpbmRpcmVjdCBpdGVtICovCi0JCWlmIChzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShwX3Nfc2IsIHBfc19pdGVtX2tleSwgcF9zX3BhdGgpCisJCWlmIChzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShzYiwgaXRlbV9rZXksIHBhdGgpCiAJCSAgICA9PSBQT1NJVElPTl9OT1RfRk9VTkQpCi0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJICAgICAgICJQQVAtNTUyMDogaW5kaXJlY3QyZGlyZWN0OiAiCisJCQlyZWlzZXJmc19wYW5pYyhzYiwgIlBBUC01NTIwIiwKIAkJCQkgICAgICAgIml0ZW0gdG8gYmUgY29udmVydGVkICVLIGRvZXMgbm90IGV4aXN0IiwKLQkJCQkgICAgICAgcF9zX2l0ZW1fa2V5KTsKLQkJY29weV9pdGVtX2hlYWQoJnNfaWgsIFBBVEhfUElURU1fSEVBRChwX3NfcGF0aCkpOworCQkJCSAgICAgICBpdGVtX2tleSk7CisJCWNvcHlfaXRlbV9oZWFkKCZzX2loLCBQQVRIX1BJVEVNX0hFQUQocGF0aCkpOwogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogCQlwb3MgPSBsZV9paF9rX29mZnNldCgmc19paCkgLSAxICsKIAkJICAgIChpaF9pdGVtX2xlbigmc19paCkgLyBVTkZNX1BfU0laRSAtCi0JCSAgICAgMSkgKiBwX3Nfc2ItPnNfYmxvY2tzaXplOworCQkgICAgIDEpICogc2ItPnNfYmxvY2tzaXplOwogCQlpZiAocG9zICE9IHBvczEpCi0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsICJ2cy01NTMwOiBpbmRpcmVjdDJkaXJlY3Q6ICIKLQkJCQkgICAgICAgInRhaWwgcG9zaXRpb24gY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIHJlYWRpbmcgaXQiKTsKKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAidnMtNTUzMCIsICJ0YWlsIHBvc2l0aW9uICIKKwkJCQkgICAgICAgImNoYW5nZWQgd2hpbGUgd2Ugd2VyZSByZWFkaW5nIGl0Iik7CiAjZW5kaWYKIAl9CiAKIAkvKiBTZXQgZGlyZWN0IGl0ZW0gaGVhZGVyIHRvIGluc2VydC4gKi8KLQltYWtlX2xlX2l0ZW1faGVhZCgmc19paCwgTlVMTCwgZ2V0X2lub2RlX2l0ZW1fa2V5X3ZlcnNpb24ocF9zX2lub2RlKSwKKwltYWtlX2xlX2l0ZW1faGVhZCgmc19paCwgTlVMTCwgZ2V0X2lub2RlX2l0ZW1fa2V5X3ZlcnNpb24oaW5vZGUpLAogCQkJICBwb3MxICsgMSwgVFlQRV9ESVJFQ1QsIHJvdW5kX3RhaWxfbGVuLAogCQkJICAweGZmZmYgLyppaF9mcmVlX3NwYWNlICovICk7CiAKQEAgLTI0MCwxMyArMjQyLDEzIEBACiAJICovCiAJdGFpbCA9IHRhaWwgKyAocG9zICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpKTsKIAotCVBBVEhfTEFTVF9QT1NJVElPTihwX3NfcGF0aCkrKzsKKwlQQVRIX0xBU1RfUE9TSVRJT04ocGF0aCkrKzsKIAotCWtleSA9ICpwX3NfaXRlbV9rZXk7CisJa2V5ID0gKml0ZW1fa2V5OwogCXNldF9jcHVfa2V5X2tfdHlwZSgma2V5LCBUWVBFX0RJUkVDVCk7CiAJa2V5LmtleV9sZW5ndGggPSA0OwogCS8qIEluc2VydCB0YWlsIGFzIG5ldyBkaXJlY3QgaXRlbSBpbiB0aGUgdHJlZSAqLwotCWlmIChyZWlzZXJmc19pbnNlcnRfaXRlbSh0aCwgcF9zX3BhdGgsICZrZXksICZzX2loLCBwX3NfaW5vZGUsCisJaWYgKHJlaXNlcmZzX2luc2VydF9pdGVtKHRoLCBwYXRoLCAma2V5LCAmc19paCwgaW5vZGUsCiAJCQkJIHRhaWwgPyB0YWlsIDogTlVMTCkgPCAwKSB7CiAJCS8qIE5vIGRpc2sgbWVtb3J5LiBTbyB3ZSBjYW4gbm90IGNvbnZlcnQgbGFzdCB1bmZvcm1hdHRlZCBub2RlCiAJCSAgIHRvIHRoZSBkaXJlY3QgaXRlbS4gIEluIHRoaXMgY2FzZSB3ZSB1c2VkIHRvIGFkanVzdApAQCAtMjU1LDEyICsyNTcsMTIgQEAKIAkJICAgdW5mb3JtYXR0ZWQgbm9kZS4gRm9yIG5vdyBpX3NpemUgaXMgY29uc2lkZXJlZCBhcyBndWFyZCBmb3IKIAkJICAgZ29pbmcgb3V0IG9mIGZpbGUgc2l6ZSAqLwogCQlrdW5tYXAocGFnZSk7Ci0JCXJldHVybiBuX2Jsb2NrX3NpemUgLSByb3VuZF90YWlsX2xlbjsKKwkJcmV0dXJuIGJsb2NrX3NpemUgLSByb3VuZF90YWlsX2xlbjsKIAl9CiAJa3VubWFwKHBhZ2UpOwogCiAJLyogbWFrZSBzdXJlIHRvIGdldCB0aGUgaV9ibG9ja3MgY2hhbmdlcyBmcm9tIHJlaXNlcmZzX2luc2VydF9pdGVtICovCi0JcmVpc2VyZnNfdXBkYXRlX3NkKHRoLCBwX3NfaW5vZGUpOworCXJlaXNlcmZzX3VwZGF0ZV9zZCh0aCwgaW5vZGUpOwogCiAJLy8gbm90ZTogd2UgaGF2ZSBub3cgdGhlIHNhbWUgYXMgaW4gYWJvdmUgZGlyZWN0MmluZGlyZWN0CiAJLy8gY29udmVyc2lvbjogdGhlcmUgYXJlIHR3byBrZXlzIHdoaWNoIGhhdmUgbWF0Y2hpbmcgZmlyc3QgdGhyZWUKQEAgLTI2OCwxMSArMjcwLDExIEBACiAKIAkvKiBXZSBoYXZlIGluc2VydGVkIG5ldyBkaXJlY3QgaXRlbSBhbmQgbXVzdCByZW1vdmUgbGFzdAogCSAgIHVuZm9ybWF0dGVkIG5vZGUuICovCi0JKnBfY19tb2RlID0gTV9DVVQ7CisJKm1vZGUgPSBNX0NVVDsKIAogCS8qIHdlIHN0b3JlIHBvc2l0aW9uIG9mIGZpcnN0IGRpcmVjdCBpdGVtIGluIHRoZSBpbi1jb3JlIGlub2RlICovCi0JLy9tYXJrX2ZpbGVfd2l0aF90YWlsIChwX3NfaW5vZGUsIHBvczEgKyAxKTsKLQlSRUlTRVJGU19JKHBfc19pbm9kZSktPmlfZmlyc3RfZGlyZWN0X2J5dGUgPSBwb3MxICsgMTsKKwkvKiBtYXJrX2ZpbGVfd2l0aF90YWlsIChpbm9kZSwgcG9zMSArIDEpOyAqLworCVJFSVNFUkZTX0koaW5vZGUpLT5pX2ZpcnN0X2RpcmVjdF9ieXRlID0gcG9zMSArIDE7CiAKLQlyZXR1cm4gbl9ibG9ja19zaXplIC0gcm91bmRfdGFpbF9sZW47CisJcmV0dXJuIGJsb2NrX3NpemUgLSByb3VuZF90YWlsX2xlbjsKIH0KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMgYi9mcy9yZWlzZXJmcy94YXR0ci5jCmluZGV4IGFlODgxY2MuLmY4M2Y1MmIgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHIuYwpAQCAtMjcsNiArMjcsMTAgQEAKICAqIHRoZXNlIGFyZSBzcGVjaWFsIGNhc2VzIGZvciBmaWxlc3lzdGVtIEFDTHMsIHRoZXkgYXJlIGludGVycHJldGVkIGJ5IHRoZQogICoga2VybmVsLCBpbiBhZGRpdGlvbiwgdGhleSBhcmUgbmVnYXRpdmVseSBhbmQgcG9zaXRpdmVseSBjYWNoZWQgYW5kIGF0dGFjaGVkCiAgKiB0byB0aGUgaW5vZGUgc28gdGhhdCB1bm5lY2Vzc2FyeSBsb29rdXBzIGFyZSBhdm9pZGVkLgorICoKKyAqIExvY2tpbmcgd29ya3MgbGlrZSBzbzoKKyAqIERpcmVjdG9yeSBjb21wb25lbnRzICh4YXR0ciByb290LCB4YXR0ciBkaXIpIGFyZSBwcm90ZWN0ZCBieSB0aGVpciBpX211dGV4LgorICogVGhlIHhhdHRycyB0aGVtc2VsdmVzIGFyZSBwcm90ZWN0ZWQgYnkgdGhlIHhhdHRyX3NlbS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvcmVpc2VyZnNfZnMuaD4KQEAgLTQ0LDMzMCArNDgsMzM2IEBACiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KIAotI2RlZmluZSBGTF9SRUFET05MWSAxMjgKLSNkZWZpbmUgRkxfRElSX1NFTV9IRUxEIDI1NgogI2RlZmluZSBQUklWUk9PVF9OQU1FICIucmVpc2VyZnNfcHJpdiIKICNkZWZpbmUgWEFST09UX05BTUUgICAieGF0dHJzIgogCi1zdGF0aWMgc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgKmZpbmRfeGF0dHJfaGFuZGxlcl9wcmVmaXgoY29uc3QgY2hhcgotCQkJCQkJCQkqcHJlZml4KTsKIAotLyogUmV0dXJucyB0aGUgZGVudHJ5IHJlZmVycmluZyB0byB0aGUgcm9vdCBvZiB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlCi0gKiBkaXJlY3RvcnkgdHJlZS4gSWYgaXQgaGFzIGFscmVhZHkgYmVlbiByZXRyaWV2ZWQsIGl0IGlzIHVzZWQuIElmIGl0Ci0gKiBoYXNuJ3QgYmVlbiBjcmVhdGVkIGFuZCB0aGUgZmxhZ3MgaW5kaWNhdGUgY3JlYXRpb24gaXMgYWxsb3dlZCwgd2UKLSAqIGF0dGVtcHQgdG8gY3JlYXRlIGl0LiBPbiBlcnJvciwgd2UgcmV0dXJuIGEgcG9pbnRlci1lbmNvZGVkIGVycm9yLgotICovCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZ2V0X3hhX3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGZsYWdzKQorLyogSGVscGVycyBmb3IgaW5vZGUgb3BzLiBXZSBkbyB0aGlzIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSBhbGwgdGhlIFZGUworICogb3ZlcmhlYWQgYW5kIGFsc28gZm9yIHByb3BlciBpX211dGV4IGFubm90YXRpb24uCisgKiBkaXItPmlfbXV0ZXggbXVzdCBiZSBoZWxkIGZvciBhbGwgb2YgdGhlbS4gKi8KKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIKK3N0YXRpYyBpbnQgeGF0dHJfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlKQogewotCXN0cnVjdCBkZW50cnkgKnByaXZyb290ID0gZGdldChSRUlTRVJGU19TQihzYiktPnByaXZfcm9vdCk7Ci0Jc3RydWN0IGRlbnRyeSAqeGFyb290OworCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkaXItPmlfbXV0ZXgpKTsKKwl2ZnNfZHFfaW5pdChkaXIpOworCXJldHVybiBkaXItPmlfb3AtPmNyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSwgTlVMTCk7Cit9CisjZW5kaWYKIAotCS8qIFRoaXMgbmVlZHMgdG8gYmUgY3JlYXRlZCBhdCBtb3VudC10aW1lICovCi0JaWYgKCFwcml2cm9vdCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RBVEEpOwotCi0JbXV0ZXhfbG9ja19uZXN0ZWQoJnByaXZyb290LT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX1hBVFRSKTsKLQlpZiAoUkVJU0VSRlNfU0Ioc2IpLT54YXR0cl9yb290KSB7Ci0JCXhhcm9vdCA9IGRnZXQoUkVJU0VSRlNfU0Ioc2IpLT54YXR0cl9yb290KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JeGFyb290ID0gbG9va3VwX29uZV9sZW4oWEFST09UX05BTUUsIHByaXZyb290LCBzdHJsZW4oWEFST09UX05BTUUpKTsKLQlpZiAoSVNfRVJSKHhhcm9vdCkpIHsKLQkJZ290byBvdXQ7Ci0JfSBlbHNlIGlmICgheGFyb290LT5kX2lub2RlKSB7Ci0JCWludCBlcnIgPSAtRU5PREFUQTsKLQkJaWYgKGZsYWdzID09IDAgfHwgZmxhZ3MgJiBYQVRUUl9DUkVBVEUpCi0JCQllcnIgPSBwcml2cm9vdC0+ZF9pbm9kZS0+aV9vcC0+bWtkaXIocHJpdnJvb3QtPmRfaW5vZGUsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGFyb290LCAwNzAwKTsKLQkJaWYgKGVycikgewotCQkJZHB1dCh4YXJvb3QpOwotCQkJeGFyb290ID0gRVJSX1BUUihlcnIpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0JUkVJU0VSRlNfU0Ioc2IpLT54YXR0cl9yb290ID0gZGdldCh4YXJvb3QpOwotCi0gICAgICBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZwcml2cm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7Ci0JZHB1dChwcml2cm9vdCk7Ci0JcmV0dXJuIHhhcm9vdDsKK3N0YXRpYyBpbnQgeGF0dHJfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCit7CisJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRpci0+aV9tdXRleCkpOworCXZmc19kcV9pbml0KGRpcik7CisJcmV0dXJuIGRpci0+aV9vcC0+bWtkaXIoZGlyLCBkZW50cnksIG1vZGUpOwogfQogCi0vKiBPcGVucyB0aGUgZGlyZWN0b3J5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGlub2RlJ3MgZXh0ZW5kZWQgYXR0cmlidXRlIHN0b3JlLgotICogSWYgZmxhZ3MgYWxsb3csIHRoZSB0cmVlIHRvIHRoZSBkaXJlY3RvcnkgbWF5IGJlIGNyZWF0ZWQuIElmIGNyZWF0aW9uIGlzCi0gKiBwcm9oaWJpdGVkLCAtRU5PREFUQSBpcyByZXR1cm5lZC4gKi8KKy8qIFdlIHVzZSBJX01VVEVYX0NISUxEIGhlcmUgdG8gc2lsZW5jZSBsb2NrZGVwLiBJdCdzIHNhZmUgYmVjYXVzZSB4YXR0cgorICogbXV0YXRpb24gb3BzIGFyZW4ndCBjYWxsZWQgZHVyaW5nIHJlbmFtZSBvciBzcGxhY2UsIHdoaWNoIGFyZSB0aGUKKyAqIG9ubHkgb3RoZXIgdXNlcnMgb2YgSV9NVVRFWF9DSElMRC4gSXQgdmlvbGF0ZXMgdGhlIG9yZGVyaW5nLCBidXQgdGhhdCdzCisgKiBiZXR0ZXIgdGhhbiBhbGxvY2F0aW5nIGFub3RoZXIgc3ViY2xhc3MganVzdCBmb3IgdGhpcyBjb2RlLiAqLworc3RhdGljIGludCB4YXR0cl91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpbnQgZXJyb3I7CisJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRpci0+aV9tdXRleCkpOworCXZmc19kcV9pbml0KGRpcik7CisKKwltdXRleF9sb2NrX25lc3RlZCgmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX0NISUxEKTsKKwllcnJvciA9IGRpci0+aV9vcC0+dW5saW5rKGRpciwgZGVudHJ5KTsKKwltdXRleF91bmxvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisKKwlpZiAoIWVycm9yKQorCQlkX2RlbGV0ZShkZW50cnkpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCB4YXR0cl9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCWludCBlcnJvcjsKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGlyLT5pX211dGV4KSk7CisJdmZzX2RxX2luaXQoZGlyKTsKKworCW11dGV4X2xvY2tfbmVzdGVkKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfQ0hJTEQpOworCWRlbnRyeV91bmhhc2goZGVudHJ5KTsKKwllcnJvciA9IGRpci0+aV9vcC0+cm1kaXIoZGlyLCBkZW50cnkpOworCWlmICghZXJyb3IpCisJCWRlbnRyeS0+ZF9pbm9kZS0+aV9mbGFncyB8PSBTX0RFQUQ7CisJbXV0ZXhfdW5sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCWlmICghZXJyb3IpCisJCWRfZGVsZXRlKGRlbnRyeSk7CisJZHB1dChkZW50cnkpOworCisJcmV0dXJuIGVycm9yOworfQorCisjZGVmaW5lIHhhdHRyX21heV9jcmVhdGUoZmxhZ3MpCSghZmxhZ3MgfHwgZmxhZ3MgJiBYQVRUUl9DUkVBVEUpCisKKy8qIFJldHVybnMgYW5kIHBvc3NpYmx5IGNyZWF0ZXMgdGhlIHhhdHRyIGRpci4gKi8KK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3JfY3JlYXRlX2RpcihzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCQkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCUJVR19PTighcGFyZW50KTsKKworCWRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHBhcmVudCwgc3RybGVuKG5hbWUpKTsKKwlpZiAoSVNfRVJSKGRlbnRyeSkpCisJCXJldHVybiBkZW50cnk7CisJZWxzZSBpZiAoIWRlbnRyeS0+ZF9pbm9kZSkgeworCQlpbnQgZXJyID0gLUVOT0RBVEE7CisKKwkJaWYgKHhhdHRyX21heV9jcmVhdGUoZmxhZ3MpKSB7CisJCQltdXRleF9sb2NrX25lc3RlZCgmcGFyZW50LT5kX2lub2RlLT5pX211dGV4LAorCQkJCQkgIElfTVVURVhfWEFUVFIpOworCQkJZXJyID0geGF0dHJfbWtkaXIocGFyZW50LT5kX2lub2RlLCBkZW50cnksIDA3MDApOworCQkJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOworCQl9CisKKwkJaWYgKGVycikgeworCQkJZHB1dChkZW50cnkpOworCQkJZGVudHJ5ID0gRVJSX1BUUihlcnIpOworCQl9CisJfQorCisJcmV0dXJuIGRlbnRyeTsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKm9wZW5feGFfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGRlbnRyeSAqcHJpdnJvb3QgPSBSRUlTRVJGU19TQihzYiktPnByaXZfcm9vdDsKKwlpZiAoIXByaXZyb290KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREFUQSk7CisJcmV0dXJuIGxvb2t1cF9vcl9jcmVhdGVfZGlyKHByaXZyb290LCBYQVJPT1RfTkFNRSwgZmxhZ3MpOworfQorCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqb3Blbl94YV9kaXIoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgaW50IGZsYWdzKQogewogCXN0cnVjdCBkZW50cnkgKnhhcm9vdCwgKnhhZGlyOwogCWNoYXIgbmFtZWJ1ZlsxN107CiAKLQl4YXJvb3QgPSBnZXRfeGFfcm9vdChpbm9kZS0+aV9zYiwgZmxhZ3MpOworCXhhcm9vdCA9IG9wZW5feGFfcm9vdChpbm9kZS0+aV9zYiwgZmxhZ3MpOwogCWlmIChJU19FUlIoeGFyb290KSkKIAkJcmV0dXJuIHhhcm9vdDsKIAotCS8qIG9rLCB3ZSBoYXZlIHhhcm9vdCBvcGVuICovCiAJc25wcmludGYobmFtZWJ1Ziwgc2l6ZW9mKG5hbWVidWYpLCAiJVguJVgiLAogCQkgbGUzMl90b19jcHUoSU5PREVfUEtFWShpbm9kZSktPmtfb2JqZWN0aWQpLAogCQkgaW5vZGUtPmlfZ2VuZXJhdGlvbik7Ci0JeGFkaXIgPSBsb29rdXBfb25lX2xlbihuYW1lYnVmLCB4YXJvb3QsIHN0cmxlbihuYW1lYnVmKSk7Ci0JaWYgKElTX0VSUih4YWRpcikpIHsKLQkJZHB1dCh4YXJvb3QpOwotCQlyZXR1cm4geGFkaXI7Ci0JfQogCi0JaWYgKCF4YWRpci0+ZF9pbm9kZSkgewotCQlpbnQgZXJyOwotCQlpZiAoZmxhZ3MgPT0gMCB8fCBmbGFncyAmIFhBVFRSX0NSRUFURSkgewotCQkJLyogQWx0aG91Z2ggdGhlcmUgaXMgbm90aGluZyBlbHNlIHRyeWluZyB0byBjcmVhdGUgdGhpcyBkaXJlY3RvcnksCi0JCQkgKiBhbm90aGVyIGRpcmVjdG9yeSB3aXRoIHRoZSBzYW1lIGhhc2ggbWF5IGJlIGNyZWF0ZWQsIHNvIHdlIG5lZWQKLQkJCSAqIHRvIHByb3RlY3QgYWdhaW5zdCB0aGF0ICovCi0JCQllcnIgPQotCQkJICAgIHhhcm9vdC0+ZF9pbm9kZS0+aV9vcC0+bWtkaXIoeGFyb290LT5kX2lub2RlLCB4YWRpciwKLQkJCQkJCQkgMDcwMCk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJZHB1dCh4YXJvb3QpOwotCQkJCWRwdXQoeGFkaXIpOwotCQkJCXJldHVybiBFUlJfUFRSKGVycik7Ci0JCQl9Ci0JCX0KLQkJaWYgKCF4YWRpci0+ZF9pbm9kZSkgewotCQkJZHB1dCh4YXJvb3QpOwotCQkJZHB1dCh4YWRpcik7Ci0JCQlyZXR1cm4gRVJSX1BUUigtRU5PREFUQSk7Ci0JCX0KLQl9Ci0KKwl4YWRpciA9IGxvb2t1cF9vcl9jcmVhdGVfZGlyKHhhcm9vdCwgbmFtZWJ1ZiwgZmxhZ3MpOwogCWRwdXQoeGFyb290KTsKIAlyZXR1cm4geGFkaXI7CisKIH0KIAorLyogVGhlIGZvbGxvd2luZyBhcmUgc2lkZSBlZmZlY3RzIG9mIG90aGVyIG9wZXJhdGlvbnMgdGhhdCBhcmVuJ3QgZXhwbGljaXRseQorICogbW9kaWZ5aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIFRoaXMgaW5jbHVkZXMgb3BlcmF0aW9ucyBzdWNoIGFzIHBlcm1pc3Npb25zCisgKiBvciBvd25lcnNoaXAgY2hhbmdlcywgb2JqZWN0IGRlbGV0aW9ucywgZXRjLiAqLworc3RydWN0IHJlaXNlcmZzX2RlbnRyeV9idWYgeworCXN0cnVjdCBkZW50cnkgKnhhZGlyOworCWludCBjb3VudDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cmllc1s4XTsKK307CisKK3N0YXRpYyBpbnQKK2ZpbGxfd2l0aF9kZW50cmllcyh2b2lkICpidWYsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBsb2ZmX3Qgb2Zmc2V0LAorCQkgICAgdTY0IGlubywgdW5zaWduZWQgaW50IGRfdHlwZSkKK3sKKwlzdHJ1Y3QgcmVpc2VyZnNfZGVudHJ5X2J1ZiAqZGJ1ZiA9IGJ1ZjsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisKKwlpZiAoZGJ1Zi0+Y291bnQgPT0gQVJSQVlfU0laRShkYnVmLT5kZW50cmllcykpCisJCXJldHVybiAtRU5PU1BDOworCisJaWYgKG5hbWVbMF0gPT0gJy4nICYmIChuYW1lWzFdID09ICdcMCcgfHwKKwkJCSAgICAgICAobmFtZVsxXSA9PSAnLicgJiYgbmFtZVsyXSA9PSAnXDAnKSkpCisJCXJldHVybiAwOworCisJZGVudHJ5ID0gbG9va3VwX29uZV9sZW4obmFtZSwgZGJ1Zi0+eGFkaXIsIG5hbWVsZW4pOworCWlmIChJU19FUlIoZGVudHJ5KSkgeworCQlyZXR1cm4gUFRSX0VSUihkZW50cnkpOworCX0gZWxzZSBpZiAoIWRlbnRyeS0+ZF9pbm9kZSkgeworCQkvKiBBIGRpcmVjdG9yeSBlbnRyeSBleGlzdHMsIGJ1dCBubyBmaWxlPyAqLworCQlyZWlzZXJmc19lcnJvcihkZW50cnktPmRfc2IsICJ4YXR0ci0yMDAwMyIsCisJCQkgICAgICAgIkNvcnJ1cHRlZCBkaXJlY3Rvcnk6IHhhdHRyICVzIGxpc3RlZCBidXQgIgorCQkJICAgICAgICJub3QgZm91bmQgZm9yIGZpbGUgJXMuXG4iLAorCQkJICAgICAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRidWYtPnhhZGlyLT5kX25hbWUubmFtZSk7CisJCWRwdXQoZGVudHJ5KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGJ1Zi0+ZGVudHJpZXNbZGJ1Zi0+Y291bnQrK10gPSBkZW50cnk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhbnVwX2RlbnRyeV9idWYoc3RydWN0IHJlaXNlcmZzX2RlbnRyeV9idWYgKmJ1ZikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYnVmLT5jb3VudDsgaSsrKQorCQlpZiAoYnVmLT5kZW50cmllc1tpXSkKKwkJCWRwdXQoYnVmLT5kZW50cmllc1tpXSk7Cit9CisKK3N0YXRpYyBpbnQgcmVpc2VyZnNfZm9yX2VhY2hfeGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICBpbnQgKCphY3Rpb24pKHN0cnVjdCBkZW50cnkgKiwgdm9pZCAqKSwKKwkJCQkgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkZW50cnkgKmRpcjsKKwlpbnQgaSwgZXJyID0gMDsKKwlsb2ZmX3QgcG9zID0gMDsKKwlzdHJ1Y3QgcmVpc2VyZnNfZGVudHJ5X2J1ZiBidWYgPSB7CisJCS5jb3VudCA9IDAsCisJfTsKKworCS8qIFNraXAgb3V0LCBhbiB4YXR0ciBoYXMgbm8geGF0dHJzIGFzc29jaWF0ZWQgd2l0aCBpdCAqLworCWlmIChJU19QUklWQVRFKGlub2RlKSB8fCBnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQorCQlyZXR1cm4gMDsKKworCWRpciA9IG9wZW5feGFfZGlyKGlub2RlLCBYQVRUUl9SRVBMQUNFKTsKKwlpZiAoSVNfRVJSKGRpcikpIHsKKwkJZXJyID0gUFRSX0VSUihkaXIpOworCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKCFkaXItPmRfaW5vZGUpIHsKKwkJZXJyID0gMDsKKwkJZ290byBvdXRfZGlyOworCX0KKworCW11dGV4X2xvY2tfbmVzdGVkKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfWEFUVFIpOworCWJ1Zi54YWRpciA9IGRpcjsKKwllcnIgPSByZWlzZXJmc19yZWFkZGlyX2RlbnRyeShkaXIsICZidWYsIGZpbGxfd2l0aF9kZW50cmllcywgJnBvcyk7CisJd2hpbGUgKChlcnIgPT0gMCB8fCBlcnIgPT0gLUVOT1NQQykgJiYgYnVmLmNvdW50KSB7CisJCWVyciA9IDA7CisKKwkJZm9yIChpID0gMDsgaSA8IGJ1Zi5jb3VudCAmJiBidWYuZGVudHJpZXNbaV07IGkrKykgeworCQkJaW50IGxlcnIgPSAwOworCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gYnVmLmRlbnRyaWVzW2ldOworCisJCQlpZiAoZXJyID09IDAgJiYgIVNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQorCQkJCWxlcnIgPSBhY3Rpb24oZGVudHJ5LCBkYXRhKTsKKworCQkJZHB1dChkZW50cnkpOworCQkJYnVmLmRlbnRyaWVzW2ldID0gTlVMTDsKKwkJCWVyciA9IGxlcnIgPzogZXJyOworCQl9CisJCWJ1Zi5jb3VudCA9IDA7CisJCWlmICghZXJyKQorCQkJZXJyID0gcmVpc2VyZnNfcmVhZGRpcl9kZW50cnkoZGlyLCAmYnVmLAorCQkJCQkJICAgICAgZmlsbF93aXRoX2RlbnRyaWVzLCAmcG9zKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOworCisJLyogQ2xlYW4gdXAgYWZ0ZXIgYSBmYWlsZWQgcmVhZGRpciAqLworCWNsZWFudXBfZGVudHJ5X2J1ZigmYnVmKTsKKworCWlmICghZXJyKSB7CisJCS8qIFdlIHN0YXJ0IGEgdHJhbnNhY3Rpb24gaGVyZSB0byBhdm9pZCBhIEFCQkEgc2l0dWF0aW9uCisJCSAqIGJldHdlZW4gdGhlIHhhdHRyIHJvb3QncyBpX211dGV4IGFuZCB0aGUgam91cm5hbCBsb2NrLgorCQkgKiBUaGlzIGRvZXNuJ3QgaW5jdXIgbXVjaCBhZGRpdGlvbmFsIG92ZXJoZWFkIHNpbmNlIHRoZQorCQkgKiBuZXcgdHJhbnNhY3Rpb24gd2lsbCBqdXN0IG5lc3QgaW5zaWRlIHRoZQorCQkgKiBvdXRlciB0cmFuc2FjdGlvbi4gKi8KKwkJaW50IGJsb2NrcyA9IEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICogMiArIDIgKworCQkJICAgICA0ICogUkVJU0VSRlNfUVVPVEFfVFJBTlNfQkxPQ0tTKGlub2RlLT5pX3NiKTsKKwkJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKKwkJZXJyID0gam91cm5hbF9iZWdpbigmdGgsIGlub2RlLT5pX3NiLCBibG9ja3MpOworCQlpZiAoIWVycikgeworCQkJaW50IGplcnJvcjsKKwkJCW11dGV4X2xvY2tfbmVzdGVkKCZkaXItPmRfcGFyZW50LT5kX2lub2RlLT5pX211dGV4LAorCQkJCQkgIElfTVVURVhfWEFUVFIpOworCQkJZXJyID0gYWN0aW9uKGRpciwgZGF0YSk7CisJCQlqZXJyb3IgPSBqb3VybmFsX2VuZCgmdGgsIGlub2RlLT5pX3NiLCBibG9ja3MpOworCQkJbXV0ZXhfdW5sb2NrKCZkaXItPmRfcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKKwkJCWVyciA9IGplcnJvciA/OiBlcnI7CisJCX0KKwl9CitvdXRfZGlyOgorCWRwdXQoZGlyKTsKK291dDoKKwkvKiAtRU5PREFUQSBpc24ndCBhbiBlcnJvciAqLworCWlmIChlcnIgPT0gLUVOT0RBVEEpCisJCWVyciA9IDA7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBkZWxldGVfb25lX3hhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmRpciA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGU7CisKKwkvKiBUaGlzIGlzIHRoZSB4YXR0ciBkaXIsIGhhbmRsZSBzcGVjaWFsbHkuICovCisJaWYgKFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQorCQlyZXR1cm4geGF0dHJfcm1kaXIoZGlyLCBkZW50cnkpOworCisJcmV0dXJuIHhhdHRyX3VubGluayhkaXIsIGRlbnRyeSk7Cit9CisKK3N0YXRpYyBpbnQgY2hvd25fb25lX3hhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaWF0dHIgKmF0dHJzID0gZGF0YTsKKwlyZXR1cm4gcmVpc2VyZnNfc2V0YXR0cihkZW50cnksIGF0dHJzKTsKK30KKworLyogTm8gaV9tdXRleCwgYnV0IHRoZSBpbm9kZSBpcyB1bmNvbm5lY3RlZC4gKi8KK2ludCByZWlzZXJmc19kZWxldGVfeGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaW50IGVyciA9IHJlaXNlcmZzX2Zvcl9lYWNoX3hhdHRyKGlub2RlLCBkZWxldGVfb25lX3hhdHRyLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAiamRtLTIwMDA0IiwKKwkJCQkgIkNvdWxkbid0IGRlbGV0ZSBhbGwgeGF0dHJzICglZClcbiIsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworLyogaW5vZGUtPmlfbXV0ZXg6IGRvd24gKi8KK2ludCByZWlzZXJmc19jaG93bl94YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICphdHRycykKK3sKKwlpbnQgZXJyID0gcmVpc2VyZnNfZm9yX2VhY2hfeGF0dHIoaW5vZGUsIGNob3duX29uZV94YXR0ciwgYXR0cnMpOworCWlmIChlcnIpCisJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJqZG0tMjAwMDciLAorCQkJCSAiQ291bGRuJ3QgY2hvd24gYWxsIHhhdHRycyAoJWQpXG4iLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIKIC8qIFJldHVybnMgYSBkZW50cnkgY29ycmVzcG9uZGluZyB0byBhIHNwZWNpZmljIGV4dGVuZGVkIGF0dHJpYnV0ZSBmaWxlCiAgKiBmb3IgdGhlIGlub2RlLiBJZiBmbGFncyBhbGxvdywgdGhlIGZpbGUgaXMgY3JlYXRlZC4gT3RoZXJ3aXNlLCBhCiAgKiB2YWxpZCBvciBuZWdhdGl2ZSBkZW50cnksIG9yIGFuIGVycm9yIGlzIHJldHVybmVkLiAqLwotc3RhdGljIHN0cnVjdCBkZW50cnkgKmdldF94YV9maWxlX2RlbnRyeShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzKQorc3RhdGljIHN0cnVjdCBkZW50cnkgKnhhdHRyX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGRlbnRyeSAqeGFkaXIsICp4YWZpbGU7CiAJaW50IGVyciA9IDA7CiAKIAl4YWRpciA9IG9wZW5feGFfZGlyKGlub2RlLCBmbGFncyk7Ci0JaWYgKElTX0VSUih4YWRpcikpIHsKKwlpZiAoSVNfRVJSKHhhZGlyKSkKIAkJcmV0dXJuIEVSUl9DQVNUKHhhZGlyKTsKLQl9IGVsc2UgaWYgKCF4YWRpci0+ZF9pbm9kZSkgewotCQlkcHV0KHhhZGlyKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RBVEEpOwotCX0KIAogCXhhZmlsZSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHhhZGlyLCBzdHJsZW4obmFtZSkpOwogCWlmIChJU19FUlIoeGFmaWxlKSkgewotCQlkcHV0KHhhZGlyKTsKLQkJcmV0dXJuIEVSUl9DQVNUKHhhZmlsZSk7Ci0JfQotCi0JaWYgKHhhZmlsZS0+ZF9pbm9kZSkgewkvKiBmaWxlIGV4aXN0cyAqLwotCQlpZiAoZmxhZ3MgJiBYQVRUUl9DUkVBVEUpIHsKLQkJCWVyciA9IC1FRVhJU1Q7Ci0JCQlkcHV0KHhhZmlsZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0gZWxzZSBpZiAoZmxhZ3MgJiBYQVRUUl9SRVBMQUNFIHx8IGZsYWdzICYgRkxfUkVBRE9OTFkpIHsKKwkJZXJyID0gUFRSX0VSUih4YWZpbGUpOwogCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQkvKiBpbm9kZS0+aV9tdXRleCBpcyBkb3duLCBzbyBub3RoaW5nIGVsc2UgY2FuIHRyeSB0byBjcmVhdGUKLQkJICogdGhlIHNhbWUgeGF0dHIgKi8KLQkJZXJyID0geGFkaXItPmRfaW5vZGUtPmlfb3AtPmNyZWF0ZSh4YWRpci0+ZF9pbm9kZSwgeGFmaWxlLAotCQkJCQkJICAgMDcwMCB8IFNfSUZSRUcsIE5VTEwpOworCX0KIAotCQlpZiAoZXJyKSB7Ci0JCQlkcHV0KHhhZmlsZSk7Ci0JCQlnb3RvIG91dDsKKwlpZiAoeGFmaWxlLT5kX2lub2RlICYmIChmbGFncyAmIFhBVFRSX0NSRUFURSkpCisJCWVyciA9IC1FRVhJU1Q7CisKKwlpZiAoIXhhZmlsZS0+ZF9pbm9kZSkgeworCQllcnIgPSAtRU5PREFUQTsKKwkJaWYgKHhhdHRyX21heV9jcmVhdGUoZmxhZ3MpKSB7CisJCQltdXRleF9sb2NrX25lc3RlZCgmeGFkaXItPmRfaW5vZGUtPmlfbXV0ZXgsCisJCQkJCSAgSV9NVVRFWF9YQVRUUik7CisJCQllcnIgPSB4YXR0cl9jcmVhdGUoeGFkaXItPmRfaW5vZGUsIHhhZmlsZSwKKwkJCQkJICAgICAgMDcwMHxTX0lGUkVHKTsKKwkJCW11dGV4X3VubG9jaygmeGFkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOwogCQl9CiAJfQogCi0gICAgICBvdXQ6CisJaWYgKGVycikKKwkJZHB1dCh4YWZpbGUpOworb3V0OgogCWRwdXQoeGFkaXIpOwogCWlmIChlcnIpCi0JCXhhZmlsZSA9IEVSUl9QVFIoZXJyKTsKLQllbHNlIGlmICgheGFmaWxlLT5kX2lub2RlKSB7Ci0JCWRwdXQoeGFmaWxlKTsKLQkJeGFmaWxlID0gRVJSX1BUUigtRU5PREFUQSk7Ci0JfQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCXJldHVybiB4YWZpbGU7CiB9CiAKLS8qCi0gKiB0aGlzIGlzIHZlcnkgc2ltaWxhciB0byBmcy9yZWlzZXJmcy9kaXIuYzpyZWlzZXJmc19yZWFkZGlyLCBidXQKLSAqIHdlIG5lZWQgdG8gZHJvcCB0aGUgcGF0aCBiZWZvcmUgY2FsbGluZyB0aGUgZmlsbGRpciBzdHJ1Y3QuICBUaGF0Ci0gKiB3b3VsZCBiZSBhIGJpZyBwZXJmb3JtYW5jZSBoaXQgdG8gdGhlIG5vbi14YXR0ciBjYXNlLCBzbyBJJ3ZlIGNvcGllZAotICogdGhlIHdob2xlIHRoaW5nIGZvciBub3cuIC0tY2xtCi0gKgotICogdGhlIGJpZyBkaWZmZXJlbmNlIGlzIHRoYXQgSSBnbyBiYWNrd2FyZHMgdGhyb3VnaCB0aGUgZGlyZWN0b3J5LAotICogYW5kIGRvbid0IG1lc3Mgd2l0aCBmLT5mX3BvcywgYnV0IHRoZSBpZGVhIGlzIHRoZSBzYW1lLiAgRG8gc29tZQotICogYWN0aW9uIG9uIGVhY2ggYW5kIGV2ZXJ5IGVudHJ5IGluIHRoZSBkaXJlY3RvcnkuCi0gKgotICogd2UncmUgY2FsbGVkIHdpdGggaV9tdXRleCBoZWxkLCBzbyB0aGVyZSBhcmUgbm8gd29ycmllcyBhYm91dCB0aGUgZGlyZWN0b3J5Ci0gKiBjaGFuZ2luZyB1bmRlcm5lYXRoIHVzLgotICovCi1zdGF0aWMgaW50IF9feGF0dHJfcmVhZGRpcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQotewotCXN0cnVjdCBjcHVfa2V5IHBvc19rZXk7CS8qIGtleSBvZiBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBkaXJlY3RvcnkgKGtleSBvZiBkaXJlY3RvcnkgZW50cnkpICovCi0JSU5JVElBTElaRV9QQVRIKHBhdGhfdG9fZW50cnkpOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0JaW50IGVudHJ5X251bTsKLQlzdHJ1Y3QgaXRlbV9oZWFkICppaCwgdG1wX2loOwotCWludCBzZWFyY2hfcmVzOwotCWNoYXIgKmxvY2FsX2J1ZjsKLQlsb2ZmX3QgbmV4dF9wb3M7Ci0JY2hhciBzbWFsbF9idWZbMzJdOwkvKiBhdm9pZCBrbWFsbG9jIGlmIHdlIGNhbiAqLwotCXN0cnVjdCByZWlzZXJmc19kZV9oZWFkICpkZWg7Ci0JaW50IGRfcmVjbGVuOwotCWNoYXIgKmRfbmFtZTsKLQlvZmZfdCBkX29mZjsKLQlpbm9fdCBkX2lubzsKLQlzdHJ1Y3QgcmVpc2VyZnNfZGlyX2VudHJ5IGRlOwotCi0JLyogZm9ybSBrZXkgZm9yIHNlYXJjaCB0aGUgbmV4dCBkaXJlY3RvcnkgZW50cnkgdXNpbmcgZl9wb3MgZmllbGQgb2YKLQkgICBmaWxlIHN0cnVjdHVyZSAqLwotCW5leHRfcG9zID0gbWF4X3JlaXNlcmZzX29mZnNldChpbm9kZSk7Ci0KLQl3aGlsZSAoMSkgewotCSAgICAgIHJlc2VhcmNoOgotCQlpZiAobmV4dF9wb3MgPD0gRE9UX0RPVF9PRkZTRVQpCi0JCQlicmVhazsKLQkJbWFrZV9jcHVfa2V5KCZwb3Nfa2V5LCBpbm9kZSwgbmV4dF9wb3MsIFRZUEVfRElSRU5UUlksIDMpOwotCi0JCXNlYXJjaF9yZXMgPQotCQkgICAgc2VhcmNoX2J5X2VudHJ5X2tleShpbm9kZS0+aV9zYiwgJnBvc19rZXksICZwYXRoX3RvX2VudHJ5LAotCQkJCQkmZGUpOwotCQlpZiAoc2VhcmNoX3JlcyA9PSBJT19FUlJPUikgewotCQkJLy8gRklYTUU6IHdlIGNvdWxkIGp1c3Qgc2tpcCBwYXJ0IG9mIGRpcmVjdG9yeSB3aGljaCBjb3VsZAotCQkJLy8gbm90IGJlIHJlYWQKLQkJCXBhdGhyZWxzZSgmcGF0aF90b19lbnRyeSk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCi0JCWlmIChzZWFyY2hfcmVzID09IE5BTUVfTk9UX0ZPVU5EKQotCQkJZGUuZGVfZW50cnlfbnVtLS07Ci0KLQkJc2V0X2RlX25hbWVfYW5kX25hbWVsZW4oJmRlKTsKLQkJZW50cnlfbnVtID0gZGUuZGVfZW50cnlfbnVtOwotCQlkZWggPSAmKGRlLmRlX2RlaFtlbnRyeV9udW1dKTsKLQotCQliaCA9IGRlLmRlX2JoOwotCQlpaCA9IGRlLmRlX2loOwotCi0JCWlmICghaXNfZGlyZW50cnlfbGVfaWgoaWgpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAibm90IGRpcmVudHJ5ICVoIiwgaWgpOwotCQkJYnJlYWs7Ci0JCX0KLQkJY29weV9pdGVtX2hlYWQoJnRtcF9paCwgaWgpOwotCi0JCS8qIHdlIG11c3QgaGF2ZSBmb3VuZCBpdGVtLCB0aGF0IGlzIGl0ZW0gb2YgdGhpcyBkaXJlY3RvcnksICovCi0JCVJGQUxTRShDT01QX1NIT1JUX0tFWVMoJihpaC0+aWhfa2V5KSwgJnBvc19rZXkpLAotCQkgICAgICAgInZzLTkwMDA6IGZvdW5kIGl0ZW0gJWggZG9lcyBub3QgbWF0Y2ggdG8gZGlyIHdlIHJlYWRkaXIgJUsiLAotCQkgICAgICAgaWgsICZwb3Nfa2V5KTsKLQotCQlpZiAoZGVoX29mZnNldChkZWgpIDw9IERPVF9ET1RfT0ZGU0VUKSB7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIGxvb2sgZm9yIHRoZSBwcmV2aW91cyBlbnRyeSBpbiB0aGUgZGlyZWN0b3J5ICovCi0JCW5leHRfcG9zID0gZGVoX29mZnNldChkZWgpIC0gMTsKLQotCQlpZiAoIWRlX3Zpc2libGUoZGVoKSkKLQkJCS8qIGl0IGlzIGhpZGRlbiBlbnRyeSAqLwotCQkJY29udGludWU7Ci0KLQkJZF9yZWNsZW4gPSBlbnRyeV9sZW5ndGgoYmgsIGloLCBlbnRyeV9udW0pOwotCQlkX25hbWUgPSBCX0lfREVIX0VOVFJZX0ZJTEVfTkFNRShiaCwgaWgsIGRlaCk7Ci0JCWRfb2ZmID0gZGVoX29mZnNldChkZWgpOwotCQlkX2lubyA9IGRlaF9vYmplY3RpZChkZWgpOwotCi0JCWlmICghZF9uYW1lW2RfcmVjbGVuIC0gMV0pCi0JCQlkX3JlY2xlbiA9IHN0cmxlbihkX25hbWUpOwotCi0JCWlmIChkX3JlY2xlbiA+IFJFSVNFUkZTX01BWF9OQU1FKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkpIHsKLQkJCS8qIHRvbyBiaWcgdG8gc2VuZCBiYWNrIHRvIFZGUyAqLwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBJZ25vcmUgdGhlIC5yZWlzZXJmc19wcml2IGVudHJ5ICovCi0JCWlmIChyZWlzZXJmc194YXR0cnMoaW5vZGUtPmlfc2IpICYmCi0JCSAgICAhb2xkX2Zvcm1hdF9vbmx5KGlub2RlLT5pX3NiKSAmJgotCQkgICAgZGVoX29iamVjdGlkKGRlaCkgPT0KLQkJICAgIGxlMzJfdG9fY3B1KElOT0RFX1BLRVkKLQkJCQkoUkVJU0VSRlNfU0IoaW5vZGUtPmlfc2IpLT5wcml2X3Jvb3QtPmRfaW5vZGUpLT4KLQkJCQlrX29iamVjdGlkKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChkX3JlY2xlbiA8PSAzMikgewotCQkJbG9jYWxfYnVmID0gc21hbGxfYnVmOwotCQl9IGVsc2UgewotCQkJbG9jYWxfYnVmID0ga21hbGxvYyhkX3JlY2xlbiwgR0ZQX05PRlMpOwotCQkJaWYgKCFsb2NhbF9idWYpIHsKLQkJCQlwYXRocmVsc2UoJnBhdGhfdG9fZW50cnkpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCQkJaWYgKGl0ZW1fbW92ZWQoJnRtcF9paCwgJnBhdGhfdG9fZW50cnkpKSB7Ci0JCQkJa2ZyZWUobG9jYWxfYnVmKTsKLQotCQkJCS8qIHNpZ2gsIG11c3QgcmV0cnkuICBEbyB0aGlzIHNhbWUgb2Zmc2V0IGFnYWluICovCi0JCQkJbmV4dF9wb3MgPSBkX29mZjsKLQkJCQlnb3RvIHJlc2VhcmNoOwotCQkJfQotCQl9Ci0KLQkJLy8gTm90ZSwgdGhhdCB3ZSBjb3B5IG5hbWUgdG8gdXNlciBzcGFjZSB2aWEgdGVtcG9yYXJ5Ci0JCS8vIGJ1ZmZlciAobG9jYWxfYnVmKSBiZWNhdXNlIGZpbGxkaXIgd2lsbCBibG9jayBpZgotCQkvLyB1c2VyIHNwYWNlIGJ1ZmZlciBpcyBzd2FwcGVkIG91dC4gQXQgdGhhdCB0aW1lCi0JCS8vIGVudHJ5IGNhbiBtb3ZlIHRvIHNvbWV3aGVyZSBlbHNlCi0JCW1lbWNweShsb2NhbF9idWYsIGRfbmFtZSwgZF9yZWNsZW4pOwotCi0JCS8qIHRoZSBmaWxsZGlyIGZ1bmN0aW9uIG1pZ2h0IG5lZWQgdG8gc3RhcnQgdHJhbnNhY3Rpb25zLAotCQkgKiBvciBkbyB3aG8ga25vd3Mgd2hhdC4gIFJlbGVhc2UgdGhlIHBhdGggbm93IHRoYXQgd2UndmUKLQkJICogY29waWVkIGFsbCB0aGUgaW1wb3J0YW50IHN0dWZmIG91dCBvZiB0aGUgZGVoCi0JCSAqLwotCQlwYXRocmVsc2UoJnBhdGhfdG9fZW50cnkpOwotCi0JCWlmIChmaWxsZGlyKGRpcmVudCwgbG9jYWxfYnVmLCBkX3JlY2xlbiwgZF9vZmYsIGRfaW5vLAotCQkJICAgIERUX1VOS05PV04pIDwgMCkgewotCQkJaWYgKGxvY2FsX2J1ZiAhPSBzbWFsbF9idWYpIHsKLQkJCQlrZnJlZShsb2NhbF9idWYpOwotCQkJfQotCQkJZ290byBlbmQ7Ci0JCX0KLQkJaWYgKGxvY2FsX2J1ZiAhPSBzbWFsbF9idWYpIHsKLQkJCWtmcmVlKGxvY2FsX2J1Zik7Ci0JCX0KLQl9CQkJLyogd2hpbGUgKi8KLQotICAgICAgZW5kOgotCXBhdGhyZWxzZSgmcGF0aF90b19lbnRyeSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiB0aGlzIGNvdWxkIGJlIGRvbmUgd2l0aCBkZWRpY2F0ZWQgcmVhZGRpciBvcHMgZm9yIHRoZSB4YXR0ciBmaWxlcywKLSAqIGJ1dCBJIHdhbnQgdG8gZ2V0IHNvbWV0aGluZyB3b3JraW5nIGFzYXAKLSAqIHRoaXMgaXMgc3RvbGVuIGZyb20gdmZzX3JlYWRkaXIKLSAqCi0gKi8KLXN0YXRpYwotaW50IHhhdHRyX3JlYWRkaXIoc3RydWN0IGlub2RlICppbm9kZSwgZmlsbGRpcl90IGZpbGxlciwgdm9pZCAqYnVmKQotewotCWludCByZXMgPSAtRU5PRU5UOwotCW11dGV4X2xvY2tfbmVzdGVkKCZpbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9YQVRUUik7Ci0JaWYgKCFJU19ERUFERElSKGlub2RlKSkgewotCQlsb2NrX2tlcm5lbCgpOwotCQlyZXMgPSBfX3hhdHRyX3JlYWRkaXIoaW5vZGUsIGJ1ZiwgZmlsbGVyKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCX0KLQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQlyZXR1cm4gcmVzOwotfQotCiAvKiBJbnRlcm5hbCBvcGVyYXRpb25zIG9uIGZpbGUgZGF0YSAqLwogc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX3B1dF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtMzc1LDE0ICszODUsMTQgQEAKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqcmVpc2VyZnNfZ2V0X3BhZ2Uoc3RydWN0IGlub2RlICpkaXIsIHVuc2lnbmVkIGxvbmcgbikKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqcmVpc2VyZnNfZ2V0X3BhZ2Uoc3RydWN0IGlub2RlICpkaXIsIHNpemVfdCBuKQogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZGlyLT5pX21hcHBpbmc7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJLyogV2UgY2FuIGRlYWRsb2NrIGlmIHdlIHRyeSB0byBmcmVlIGRlbnRyaWVzLAogCSAgIGFuZCBhbiB1bmxpbmsvcm1kaXIgaGFzIGp1c3Qgb2NjdXJlZCAtIEdGUF9OT0ZTIGF2b2lkcyB0aGlzICovCiAJbWFwcGluZ19zZXRfZ2ZwX21hc2sobWFwcGluZywgR0ZQX05PRlMpOwotCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBuLCBOVUxMKTsKKwlwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgbiA+PiBQQUdFX0NBQ0hFX1NISUZULCBOVUxMKTsKIAlpZiAoIUlTX0VSUihwYWdlKSkgewogCQlrbWFwKHBhZ2UpOwogCQlpZiAoUGFnZUVycm9yKHBhZ2UpKQpAQCAtNDA1LDYgKzQxNSw0NSBAQAogaW50IHJlaXNlcmZzX3ByZXBhcmVfd3JpdGUoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBwYWdlICpwYWdlLAogCQkJICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pOwogCitzdGF0aWMgdm9pZCB1cGRhdGVfY3RpbWUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgbm93ID0gY3VycmVudF9mc190aW1lKGlub2RlLT5pX3NiKTsKKwlpZiAoaGxpc3RfdW5oYXNoZWQoJmlub2RlLT5pX2hhc2gpIHx8ICFpbm9kZS0+aV9ubGluayB8fAorCSAgICB0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfY3RpbWUsICZub3cpKQorCQlyZXR1cm47CisKKwlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Cit9CisKK3N0YXRpYyBpbnQgbG9va3VwX2FuZF9kZWxldGVfeGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksICp4YWRpcjsKKworCXhhZGlyID0gb3Blbl94YV9kaXIoaW5vZGUsIFhBVFRSX1JFUExBQ0UpOworCWlmIChJU19FUlIoeGFkaXIpKQorCQlyZXR1cm4gUFRSX0VSUih4YWRpcik7CisKKwlkZW50cnkgPSBsb29rdXBfb25lX2xlbihuYW1lLCB4YWRpciwgc3RybGVuKG5hbWUpKTsKKwlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKKwkJZXJyID0gUFRSX0VSUihkZW50cnkpOworCQlnb3RvIG91dF9kcHV0OworCX0KKworCWlmIChkZW50cnktPmRfaW5vZGUpIHsKKwkJbXV0ZXhfbG9ja19uZXN0ZWQoJnhhZGlyLT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX1hBVFRSKTsKKwkJZXJyID0geGF0dHJfdW5saW5rKHhhZGlyLT5kX2lub2RlLCBkZW50cnkpOworCQltdXRleF91bmxvY2soJnhhZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwkJdXBkYXRlX2N0aW1lKGlub2RlKTsKKwl9CisKKwlkcHV0KGRlbnRyeSk7CitvdXRfZHB1dDoKKwlkcHV0KHhhZGlyKTsKKwlyZXR1cm4gZXJyOworfQorCiAKIC8qIEdlbmVyaWMgZXh0ZW5kZWQgYXR0cmlidXRlIG9wZXJhdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCBieSB4YSBwbHVnaW5zICovCiAKQEAgLTQxMiw1OCArNDYxLDMyIEBACiAgKiBpbm9kZS0+aV9tdXRleDogZG93bgogICovCiBpbnQKLXJlaXNlcmZzX3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCi0JCSAgIHNpemVfdCBidWZmZXJfc2l6ZSwgaW50IGZsYWdzKQorcmVpc2VyZnNfeGF0dHJfc2V0X2hhbmRsZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCSAgc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUsIGludCBmbGFncykKIHsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJY2hhciAqZGF0YTsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAlzaXplX3QgZmlsZV9wb3MgPSAwOwogCXNpemVfdCBidWZmZXJfcG9zID0gMDsKLQlzdHJ1Y3QgaW5vZGUgKnhpbm9kZTsKLQlzdHJ1Y3QgaWF0dHIgbmV3YXR0cnM7CisJc2l6ZV90IG5ld19zaXplOwogCV9fdTMyIHhhaGFzaCA9IDA7CiAKIAlpZiAoZ2V0X2lub2RlX3NkX3ZlcnNpb24oaW5vZGUpID09IFNUQVRfREFUQV9WMSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JLyogRW1wdHkgeGF0dHJzIGFyZSBvaywgdGhleSdyZSBqdXN0IGVtcHR5IGZpbGVzLCBubyBoYXNoICovCi0JaWYgKGJ1ZmZlciAmJiBidWZmZXJfc2l6ZSkKLQkJeGFoYXNoID0geGF0dHJfaGFzaChidWZmZXIsIGJ1ZmZlcl9zaXplKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIGxvb2t1cF9hbmRfZGVsZXRlX3hhdHRyKGlub2RlLCBuYW1lKTsKIAotICAgICAgb3Blbl9maWxlOgotCWRlbnRyeSA9IGdldF94YV9maWxlX2RlbnRyeShpbm9kZSwgbmFtZSwgZmxhZ3MpOwotCWlmIChJU19FUlIoZGVudHJ5KSkgewotCQllcnIgPSBQVFJfRVJSKGRlbnRyeSk7Ci0JCWdvdG8gb3V0OwotCX0KKwlkZW50cnkgPSB4YXR0cl9sb29rdXAoaW5vZGUsIG5hbWUsIGZsYWdzKTsKKwlpZiAoSVNfRVJSKGRlbnRyeSkpCisJCXJldHVybiBQVFJfRVJSKGRlbnRyeSk7CiAKLQl4aW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0JUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgfD0gaV9oYXNfeGF0dHJfZGlyOworCWRvd25fd3JpdGUoJlJFSVNFUkZTX0koaW5vZGUpLT5pX3hhdHRyX3NlbSk7CiAKLQkvKiB3ZSBuZWVkIHRvIGNvcHkgaXQgb2ZmLi4gKi8KLQlpZiAoeGlub2RlLT5pX25saW5rID4gMSkgewotCQlkcHV0KGRlbnRyeSk7Ci0JCWVyciA9IHJlaXNlcmZzX3hhdHRyX2RlbChpbm9kZSwgbmFtZSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBvdXQ7Ci0JCS8qIFdlIGp1c3Qga2lsbGVkIHRoZSBvbGQgb25lLCB3ZSdyZSBub3QgcmVwbGFjaW5nIGFueW1vcmUgKi8KLQkJaWYgKGZsYWdzICYgWEFUVFJfUkVQTEFDRSkKLQkJCWZsYWdzICY9IH5YQVRUUl9SRVBMQUNFOwotCQlnb3RvIG9wZW5fZmlsZTsKLQl9Ci0KLQkvKiBSZXNpemUgaXQgc28gd2UncmUgb2sgdG8gd3JpdGUgdGhlcmUgKi8KLQluZXdhdHRycy5pYV9zaXplID0gYnVmZmVyX3NpemU7Ci0JbmV3YXR0cnMuaWFfdmFsaWQgPSBBVFRSX1NJWkUgfCBBVFRSX0NUSU1FOwotCW11dGV4X2xvY2tfbmVzdGVkKCZ4aW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfWEFUVFIpOwotCWVyciA9IG5vdGlmeV9jaGFuZ2UoZGVudHJ5LCAmbmV3YXR0cnMpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2ZpbHA7Ci0KLQltYXBwaW5nID0geGlub2RlLT5pX21hcHBpbmc7CisJeGFoYXNoID0geGF0dHJfaGFzaChidWZmZXIsIGJ1ZmZlcl9zaXplKTsKIAl3aGlsZSAoYnVmZmVyX3BvcyA8IGJ1ZmZlcl9zaXplIHx8IGJ1ZmZlcl9wb3MgPT0gMCkgewogCQlzaXplX3QgY2h1bms7CiAJCXNpemVfdCBza2lwID0gMDsKQEAgLTQ3MywxMCArNDk2LDEwIEBACiAJCWVsc2UKIAkJCWNodW5rID0gYnVmZmVyX3NpemUgLSBidWZmZXJfcG9zOwogCi0JCXBhZ2UgPSByZWlzZXJmc19nZXRfcGFnZSh4aW5vZGUsIGZpbGVfcG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQpOworCQlwYWdlID0gcmVpc2VyZnNfZ2V0X3BhZ2UoZGVudHJ5LT5kX2lub2RlLCBmaWxlX3Bvcyk7CiAJCWlmIChJU19FUlIocGFnZSkpIHsKIAkJCWVyciA9IFBUUl9FUlIocGFnZSk7Ci0JCQlnb3RvIG91dF9maWxwOworCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAKIAkJbG9ja19wYWdlKHBhZ2UpOwpAQCAtNTEwLDI4ICs1MzMsNjEgQEAKIAkJCWJyZWFrOwogCX0KIAotCS8qIFdlIGNhbid0IG1hcmsgdGhlIGlub2RlIGRpcnR5IGlmIGl0J3Mgbm90IGhhc2hlZC4gVGhpcyBpcyB0aGUgY2FzZQotCSAqIHdoZW4gd2UncmUgaW5oZXJpdGluZyB0aGUgZGVmYXVsdCBBQ0wuIElmIHdlIGRpcnR5IGl0LCB0aGUgaW5vZGUKLQkgKiBnZXRzIG1hcmtlZCBkaXJ0eSwgYnV0IHdvbid0IChldmVyKSBtYWtlIGl0IG9udG8gdGhlIGRpcnR5IGxpc3QgdW50aWwKLQkgKiBpdCdzIHN5bmNlZCBleHBsaWNpdGx5IHRvIGNsZWFyIElfRElSVFkuIFRoaXMgaXMgYmFkLiAqLwotCWlmICghaGxpc3RfdW5oYXNoZWQoJmlub2RlLT5pX2hhc2gpKSB7Ci0JCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKLQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJbmV3X3NpemUgPSBidWZmZXJfc2l6ZSArIHNpemVvZihzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGVhZGVyKTsKKwlpZiAoIWVyciAmJiBuZXdfc2l6ZSA8IGlfc2l6ZV9yZWFkKGRlbnRyeS0+ZF9pbm9kZSkpIHsKKwkJc3RydWN0IGlhdHRyIG5ld2F0dHJzID0geworCQkJLmlhX2N0aW1lID0gY3VycmVudF9mc190aW1lKGlub2RlLT5pX3NiKSwKKwkJCS5pYV9zaXplID0gYnVmZmVyX3NpemUsCisJCQkuaWFfdmFsaWQgPSBBVFRSX1NJWkUgfCBBVFRSX0NUSU1FLAorCQl9OworCQltdXRleF9sb2NrX25lc3RlZCgmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX1hBVFRSKTsKKwkJZG93bl93cml0ZSgmZGVudHJ5LT5kX2lub2RlLT5pX2FsbG9jX3NlbSk7CisJCWVyciA9IHJlaXNlcmZzX3NldGF0dHIoZGVudHJ5LCAmbmV3YXR0cnMpOworCQl1cF93cml0ZSgmZGVudHJ5LT5kX2lub2RlLT5pX2FsbG9jX3NlbSk7CisJCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwl9IGVsc2UKKwkJdXBkYXRlX2N0aW1lKGlub2RlKTsKK291dF91bmxvY2s6CisJdXBfd3JpdGUoJlJFSVNFUkZTX0koaW5vZGUpLT5pX3hhdHRyX3NlbSk7CisJZHB1dChkZW50cnkpOworCXJldHVybiBlcnI7Cit9CisKKy8qIFdlIG5lZWQgdG8gc3RhcnQgYSB0cmFuc2FjdGlvbiB0byBtYWludGFpbiBsb2NrIG9yZGVyaW5nICovCitpbnQgcmVpc2VyZnNfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgICBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSwgaW50IGZsYWdzKQoreworCisJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKKwlpbnQgZXJyb3IsIGVycm9yMjsKKwlzaXplX3QgamJlZ2luX2NvdW50ID0gcmVpc2VyZnNfeGF0dHJfbmJsb2Nrcyhpbm9kZSwgYnVmZmVyX3NpemUpOworCisJaWYgKCEoZmxhZ3MgJiBYQVRUUl9SRVBMQUNFKSkKKwkJamJlZ2luX2NvdW50ICs9IHJlaXNlcmZzX3hhdHRyX2pjcmVhdGVfbmJsb2Nrcyhpbm9kZSk7CisKKwlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKKwllcnJvciA9IGpvdXJuYWxfYmVnaW4oJnRoLCBpbm9kZS0+aV9zYiwgamJlZ2luX2NvdW50KTsKKwlpZiAoZXJyb3IpIHsKKwkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKKwkJcmV0dXJuIGVycm9yOwogCX0KIAotICAgICAgb3V0X2ZpbHA6Ci0JbXV0ZXhfdW5sb2NrKCZ4aW5vZGUtPmlfbXV0ZXgpOwotCWRwdXQoZGVudHJ5KTsKKwllcnJvciA9IHJlaXNlcmZzX3hhdHRyX3NldF9oYW5kbGUoJnRoLCBpbm9kZSwgbmFtZSwKKwkJCQkJICBidWZmZXIsIGJ1ZmZlcl9zaXplLCBmbGFncyk7CiAKLSAgICAgIG91dDoKLQlyZXR1cm4gZXJyOworCWVycm9yMiA9IGpvdXJuYWxfZW5kKCZ0aCwgaW5vZGUtPmlfc2IsIGpiZWdpbl9jb3VudCk7CisJaWYgKGVycm9yID09IDApCisJCWVycm9yID0gZXJyb3IyOworCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7CisKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qCiAgKiBpbm9kZS0+aV9tdXRleDogZG93bgogICovCiBpbnQKLXJlaXNlcmZzX3hhdHRyX2dldChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsCityZWlzZXJmc194YXR0cl9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAogCQkgICBzaXplX3QgYnVmZmVyX3NpemUpCiB7CiAJc3NpemVfdCBlcnIgPSAwOwpAQCAtNTQwLDcgKzU5Niw2IEBACiAJc2l6ZV90IGZpbGVfcG9zID0gMDsKIAlzaXplX3QgYnVmZmVyX3BvcyA9IDA7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0Jc3RydWN0IGlub2RlICp4aW5vZGU7CiAJX191MzIgaGFzaCA9IDA7CiAKIAlpZiAobmFtZSA9PSBOVUxMKQpAQCAtNTUxLDI1ICs2MDYsMjUgQEAKIAlpZiAoZ2V0X2lub2RlX3NkX3ZlcnNpb24oaW5vZGUpID09IFNUQVRfREFUQV9WMSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JZGVudHJ5ID0gZ2V0X3hhX2ZpbGVfZGVudHJ5KGlub2RlLCBuYW1lLCBGTF9SRUFET05MWSk7CisJZGVudHJ5ID0geGF0dHJfbG9va3VwKGlub2RlLCBuYW1lLCBYQVRUUl9SRVBMQUNFKTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKIAkJZXJyID0gUFRSX0VSUihkZW50cnkpOwogCQlnb3RvIG91dDsKIAl9CiAKLQl4aW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0JaXNpemUgPSB4aW5vZGUtPmlfc2l6ZTsKLQlSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyB8PSBpX2hhc194YXR0cl9kaXI7CisJZG93bl9yZWFkKCZSRUlTRVJGU19JKGlub2RlKS0+aV94YXR0cl9zZW0pOworCisJaXNpemUgPSBpX3NpemVfcmVhZChkZW50cnktPmRfaW5vZGUpOwogCiAJLyogSnVzdCByZXR1cm4gdGhlIHNpemUgbmVlZGVkICovCiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CiAJCWVyciA9IGlzaXplIC0gc2l6ZW9mKHN0cnVjdCByZWlzZXJmc194YXR0cl9oZWFkZXIpOwotCQlnb3RvIG91dF9kcHV0OworCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJaWYgKGJ1ZmZlcl9zaXplIDwgaXNpemUgLSBzaXplb2Yoc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hlYWRlcikpIHsKIAkJZXJyID0gLUVSQU5HRTsKLQkJZ290byBvdXRfZHB1dDsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCXdoaWxlIChmaWxlX3BvcyA8IGlzaXplKSB7CkBAIC01ODEsMTAgKzYzNiwxMCBAQAogCQllbHNlCiAJCQljaHVuayA9IGlzaXplIC0gZmlsZV9wb3M7CiAKLQkJcGFnZSA9IHJlaXNlcmZzX2dldF9wYWdlKHhpbm9kZSwgZmlsZV9wb3MgPj4gUEFHRV9DQUNIRV9TSElGVCk7CisJCXBhZ2UgPSByZWlzZXJmc19nZXRfcGFnZShkZW50cnktPmRfaW5vZGUsIGZpbGVfcG9zKTsKIAkJaWYgKElTX0VSUihwYWdlKSkgewogCQkJZXJyID0gUFRSX0VSUihwYWdlKTsKLQkJCWdvdG8gb3V0X2RwdXQ7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAogCQlsb2NrX3BhZ2UocGFnZSk7CkBAIC01OTgsMTIgKzY1MywxMiBAQAogCQkJaWYgKHJ4aC0+aF9tYWdpYyAhPSBjcHVfdG9fbGUzMihSRUlTRVJGU19YQVRUUl9NQUdJQykpIHsKIAkJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJCQlyZWlzZXJmc19wdXRfcGFnZShwYWdlKTsKLQkJCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAorCQkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJqZG0tMjAwMDEiLAogCQkJCQkJICJJbnZhbGlkIG1hZ2ljIGZvciB4YXR0ciAoJXMpICIKIAkJCQkJCSAiYXNzb2NpYXRlZCB3aXRoICVrIiwgbmFtZSwKIAkJCQkJCSBJTk9ERV9QS0VZKGlub2RlKSk7CiAJCQkJZXJyID0gLUVJTzsKLQkJCQlnb3RvIG91dF9kcHV0OworCQkJCWdvdG8gb3V0X3VubG9jazsKIAkJCX0KIAkJCWhhc2ggPSBsZTMyX3RvX2NwdShyeGgtPmhfaGFzaCk7CiAJCX0KQEAgLTYxOCwyNTYgKzY3Myw4MyBAQAogCiAJaWYgKHhhdHRyX2hhc2goYnVmZmVyLCBpc2l6ZSAtIHNpemVvZihzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGVhZGVyKSkgIT0KIAkgICAgaGFzaCkgewotCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAorCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAiamRtLTIwMDAyIiwKIAkJCQkgIkludmFsaWQgaGFzaCBmb3IgeGF0dHIgKCVzKSBhc3NvY2lhdGVkICIKIAkJCQkgIndpdGggJWsiLCBuYW1lLCBJTk9ERV9QS0VZKGlub2RlKSk7CiAJCWVyciA9IC1FSU87CiAJfQogCi0gICAgICBvdXRfZHB1dDoKK291dF91bmxvY2s6CisJdXBfcmVhZCgmUkVJU0VSRlNfSShpbm9kZSktPmlfeGF0dHJfc2VtKTsKIAlkcHV0KGRlbnRyeSk7CiAKLSAgICAgIG91dDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50Ci1fX3JlaXNlcmZzX3hhdHRyX2RlbChzdHJ1Y3QgZGVudHJ5ICp4YWRpciwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pCi17Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5OwotCXN0cnVjdCBpbm9kZSAqZGlyID0geGFkaXItPmRfaW5vZGU7Ci0JaW50IGVyciA9IDA7Ci0KLQlkZW50cnkgPSBsb29rdXBfb25lX2xlbihuYW1lLCB4YWRpciwgbmFtZWxlbik7Ci0JaWYgKElTX0VSUihkZW50cnkpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZGVudHJ5KTsKLQkJZ290byBvdXQ7Ci0JfSBlbHNlIGlmICghZGVudHJ5LT5kX2lub2RlKSB7Ci0JCWVyciA9IC1FTk9EQVRBOwotCQlnb3RvIG91dF9maWxlOwotCX0KLQotCS8qIFNraXAgZGlyZWN0b3JpZXMuLiAqLwotCWlmIChTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkKLQkJZ290byBvdXRfZmlsZTsKLQotCWlmICghaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoZGVudHJ5LT5kX2lub2RlKSkgewotCQlyZWlzZXJmc193YXJuaW5nKGRpci0+aV9zYiwgIk9JRCAlMDh4IFslLipzLyUuKnNdIGRvZXNuJ3QgaGF2ZSAiCi0JCQkJICJwcml2IGZsYWcgc2V0IFtwYXJlbnQgaXMgJXNzZXRdLiIsCi0JCQkJIGxlMzJfdG9fY3B1KElOT0RFX1BLRVkoZGVudHJ5LT5kX2lub2RlKS0+Ci0JCQkJCSAgICAga19vYmplY3RpZCksIHhhZGlyLT5kX25hbWUubGVuLAotCQkJCSB4YWRpci0+ZF9uYW1lLm5hbWUsIG5hbWVsZW4sIG5hbWUsCi0JCQkJIGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KHhhZGlyLT4KLQkJCQkJCQkgZF9pbm9kZSkgPyAiIiA6Ci0JCQkJICJub3QgIik7Ci0JCWRwdXQoZGVudHJ5KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JZXJyID0gZGlyLT5pX29wLT51bmxpbmsoZGlyLCBkZW50cnkpOwotCWlmICghZXJyKQotCQlkX2RlbGV0ZShkZW50cnkpOwotCi0gICAgICBvdXRfZmlsZToKLQlkcHV0KGRlbnRyeSk7Ci0KLSAgICAgIG91dDoKLQlyZXR1cm4gZXJyOwotfQotCi1pbnQgcmVpc2VyZnNfeGF0dHJfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IGRlbnRyeSAqZGlyOwotCWludCBlcnI7Ci0KLQlkaXIgPSBvcGVuX3hhX2Rpcihpbm9kZSwgRkxfUkVBRE9OTFkpOwotCWlmIChJU19FUlIoZGlyKSkgewotCQllcnIgPSBQVFJfRVJSKGRpcik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWVyciA9IF9fcmVpc2VyZnNfeGF0dHJfZGVsKGRpciwgbmFtZSwgc3RybGVuKG5hbWUpKTsKLQlkcHV0KGRpcik7Ci0KLQlpZiAoIWVycikgewotCQlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7Ci0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCX0KLQotICAgICAgb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qIFRoZSBmb2xsb3dpbmcgYXJlIHNpZGUgZWZmZWN0cyBvZiBvdGhlciBvcGVyYXRpb25zIHRoYXQgYXJlbid0IGV4cGxpY2l0bHkKLSAqIG1vZGlmeWluZyBleHRlbmRlZCBhdHRyaWJ1dGVzLiBUaGlzIGluY2x1ZGVzIG9wZXJhdGlvbnMgc3VjaCBhcyBwZXJtaXNzaW9ucwotICogb3Igb3duZXJzaGlwIGNoYW5nZXMsIG9iamVjdCBkZWxldGlvbnMsIGV0Yy4gKi8KLQotc3RhdGljIGludAotcmVpc2VyZnNfZGVsZXRlX3hhdHRyc19maWxsZXIodm9pZCAqYnVmLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKLQkJCSAgICAgIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCi17Ci0Jc3RydWN0IGRlbnRyeSAqeGFkaXIgPSAoc3RydWN0IGRlbnRyeSAqKWJ1ZjsKLQotCXJldHVybiBfX3JlaXNlcmZzX3hhdHRyX2RlbCh4YWRpciwgbmFtZSwgbmFtZWxlbik7Ci0KLX0KLQotLyogVGhpcyBpcyBjYWxsZWQgdy8gaW5vZGUtPmlfbXV0ZXggZG93bmVkICovCi1pbnQgcmVpc2VyZnNfZGVsZXRlX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXN0cnVjdCBkZW50cnkgKmRpciwgKnJvb3Q7Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBTa2lwIG91dCwgYW4geGF0dHIgaGFzIG5vIHhhdHRycyBhc3NvY2lhdGVkIHdpdGggaXQgKi8KLQlpZiAoaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpIHx8Ci0JICAgIGdldF9pbm9kZV9zZF92ZXJzaW9uKGlub2RlKSA9PSBTVEFUX0RBVEFfVjEgfHwKLQkgICAgIXJlaXNlcmZzX3hhdHRycyhpbm9kZS0+aV9zYikpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCXJlaXNlcmZzX3JlYWRfbG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwotCWRpciA9IG9wZW5feGFfZGlyKGlub2RlLCBGTF9SRUFET05MWSk7Ci0JcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQlpZiAoSVNfRVJSKGRpcikpIHsKLQkJZXJyID0gUFRSX0VSUihkaXIpOwotCQlnb3RvIG91dDsKLQl9IGVsc2UgaWYgKCFkaXItPmRfaW5vZGUpIHsKLQkJZHB1dChkaXIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlsb2NrX2tlcm5lbCgpOwotCWVyciA9IHhhdHRyX3JlYWRkaXIoZGlyLT5kX2lub2RlLCByZWlzZXJmc19kZWxldGVfeGF0dHJzX2ZpbGxlciwgZGlyKTsKLQlpZiAoZXJyKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJZ290byBvdXRfZGlyOwotCX0KLQotCS8qIExlZnRvdmVycyBiZXNpZGVzIC4gYW5kIC4uIC0tIHRoYXQncyBub3QgZ29vZC4gKi8KLQlpZiAoZGlyLT5kX2lub2RlLT5pX25saW5rIDw9IDIpIHsKLQkJcm9vdCA9IGdldF94YV9yb290KGlub2RlLT5pX3NiLCBYQVRUUl9SRVBMQUNFKTsKLQkJcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwotCQllcnIgPSB2ZnNfcm1kaXIocm9vdC0+ZF9pbm9kZSwgZGlyKTsKLQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7Ci0JCWRwdXQocm9vdCk7Ci0JfSBlbHNlIHsKLQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCQkgIkNvdWxkbid0IHJlbW92ZSBhbGwgZW50cmllcyBpbiBkaXJlY3RvcnkiKTsKLQl9Ci0JdW5sb2NrX2tlcm5lbCgpOwotCi0gICAgICBvdXRfZGlyOgotCWRwdXQoZGlyKTsKLQotICAgICAgb3V0OgotCWlmICghZXJyKQotCQlSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyA9Ci0JCSAgICBSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyAmIH5pX2hhc194YXR0cl9kaXI7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RydWN0IHJlaXNlcmZzX2Nob3duX2J1ZiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQlzdHJ1Y3QgZGVudHJ5ICp4YWRpcjsKLQlzdHJ1Y3QgaWF0dHIgKmF0dHJzOwotfTsKLQotLyogWFhYOiBJZiB0aGVyZSBpcyBhIGJldHRlciB3YXkgdG8gZG8gdGhpcywgSSdkIGxvdmUgdG8gaGVhciBhYm91dCBpdCAqLwotc3RhdGljIGludAotcmVpc2VyZnNfY2hvd25feGF0dHJzX2ZpbGxlcih2b2lkICpidWYsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAotCQkJICAgICBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKQotewotCXN0cnVjdCByZWlzZXJmc19jaG93bl9idWYgKmNob3duX2J1ZiA9IChzdHJ1Y3QgcmVpc2VyZnNfY2hvd25fYnVmICopYnVmOwotCXN0cnVjdCBkZW50cnkgKnhhZmlsZSwgKnhhZGlyID0gY2hvd25fYnVmLT54YWRpcjsKLQlzdHJ1Y3QgaWF0dHIgKmF0dHJzID0gY2hvd25fYnVmLT5hdHRyczsKLQlpbnQgZXJyID0gMDsKLQotCXhhZmlsZSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHhhZGlyLCBuYW1lbGVuKTsKLQlpZiAoSVNfRVJSKHhhZmlsZSkpCi0JCXJldHVybiBQVFJfRVJSKHhhZmlsZSk7Ci0JZWxzZSBpZiAoIXhhZmlsZS0+ZF9pbm9kZSkgewotCQlkcHV0KHhhZmlsZSk7Ci0JCXJldHVybiAtRU5PREFUQTsKLQl9Ci0KLQlpZiAoIVNfSVNESVIoeGFmaWxlLT5kX2lub2RlLT5pX21vZGUpKQotCQllcnIgPSBub3RpZnlfY2hhbmdlKHhhZmlsZSwgYXR0cnMpOwotCWRwdXQoeGFmaWxlKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLWludCByZWlzZXJmc19jaG93bl94YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICphdHRycykKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpkaXI7Ci0JaW50IGVyciA9IDA7Ci0Jc3RydWN0IHJlaXNlcmZzX2Nob3duX2J1ZiBidWY7Ci0JdW5zaWduZWQgaW50IGlhX3ZhbGlkID0gYXR0cnMtPmlhX3ZhbGlkOwotCi0JLyogU2tpcCBvdXQsIGFuIHhhdHRyIGhhcyBubyB4YXR0cnMgYXNzb2NpYXRlZCB3aXRoIGl0ICovCi0JaWYgKGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGlub2RlKSB8fAotCSAgICBnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxIHx8Ci0JICAgICFyZWlzZXJmc194YXR0cnMoaW5vZGUtPmlfc2IpKSB7Ci0JCXJldHVybiAwOwotCX0KLQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQlkaXIgPSBvcGVuX3hhX2Rpcihpbm9kZSwgRkxfUkVBRE9OTFkpOwotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7Ci0JaWYgKElTX0VSUihkaXIpKSB7Ci0JCWlmIChQVFJfRVJSKGRpcikgIT0gLUVOT0RBVEEpCi0JCQllcnIgPSBQVFJfRVJSKGRpcik7Ci0JCWdvdG8gb3V0OwotCX0gZWxzZSBpZiAoIWRpci0+ZF9pbm9kZSkgewotCQlkcHV0KGRpcik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWxvY2tfa2VybmVsKCk7Ci0KLQlhdHRycy0+aWFfdmFsaWQgJj0gKEFUVFJfVUlEIHwgQVRUUl9HSUQgfCBBVFRSX0NUSU1FKTsKLQlidWYueGFkaXIgPSBkaXI7Ci0JYnVmLmF0dHJzID0gYXR0cnM7Ci0JYnVmLmlub2RlID0gaW5vZGU7Ci0KLQllcnIgPSB4YXR0cl9yZWFkZGlyKGRpci0+ZF9pbm9kZSwgcmVpc2VyZnNfY2hvd25feGF0dHJzX2ZpbGxlciwgJmJ1Zik7Ci0JaWYgKGVycikgewotCQl1bmxvY2tfa2VybmVsKCk7Ci0JCWdvdG8gb3V0X2RpcjsKLQl9Ci0KLQllcnIgPSBub3RpZnlfY2hhbmdlKGRpciwgYXR0cnMpOwotCXVubG9ja19rZXJuZWwoKTsKLQotICAgICAgb3V0X2RpcjoKLQlkcHV0KGRpcik7Ci0KLSAgICAgIG91dDoKLQlhdHRycy0+aWFfdmFsaWQgPSBpYV92YWxpZDsKK291dDoKIAlyZXR1cm4gZXJyOwogfQogCiAvKiBBY3R1YWwgb3BlcmF0aW9ucyB0aGF0IGFyZSBleHBvcnRlZCB0byBWRlMtbGFuZCAqLworc3RydWN0IHhhdHRyX2hhbmRsZXIgKnJlaXNlcmZzX3hhdHRyX2hhbmRsZXJzW10gPSB7CisJJnJlaXNlcmZzX3hhdHRyX3VzZXJfaGFuZGxlciwKKwkmcmVpc2VyZnNfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLAorI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWQorCSZyZWlzZXJmc194YXR0cl9zZWN1cml0eV9oYW5kbGVyLAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTAorCSZyZWlzZXJmc19wb3NpeF9hY2xfYWNjZXNzX2hhbmRsZXIsCisJJnJlaXNlcmZzX3Bvc2l4X2FjbF9kZWZhdWx0X2hhbmRsZXIsCisjZW5kaWYKKwlOVUxMCit9OworCisvKgorICogSW4gb3JkZXIgdG8gaW1wbGVtZW50IGRpZmZlcmVudCBzZXRzIG9mIHhhdHRyIG9wZXJhdGlvbnMgZm9yIGVhY2ggeGF0dHIKKyAqIHByZWZpeCB3aXRoIHRoZSBnZW5lcmljIHhhdHRyIEFQSSwgYSBmaWxlc3lzdGVtIHNob3VsZCBjcmVhdGUgYQorICogbnVsbC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cnVjdCB4YXR0cl9oYW5kbGVyIChvbmUgZm9yIGVhY2ggcHJlZml4KSBhbmQKKyAqIGhhbmcgYSBwb2ludGVyIHRvIGl0IG9mZiBvZiB0aGUgc194YXR0ciBmaWVsZCBvZiB0aGUgc3VwZXJibG9jay4KKyAqCisgKiBUaGUgZ2VuZXJpY19mb294YXR0cigpIGZ1bmN0aW9ucyB3aWxsIHVzZSB0aGlzIGxpc3QgdG8gZGlzcGF0Y2ggeGF0dHIKKyAqIG9wZXJhdGlvbnMgdG8gdGhlIGNvcnJlY3QgeGF0dHJfaGFuZGxlci4KKyAqLworI2RlZmluZSBmb3JfZWFjaF94YXR0cl9oYW5kbGVyKGhhbmRsZXJzLCBoYW5kbGVyKQkJXAorCQlmb3IgKChoYW5kbGVyKSA9ICooaGFuZGxlcnMpKys7CQkJXAorCQkJKGhhbmRsZXIpICE9IE5VTEw7CQkJXAorCQkJKGhhbmRsZXIpID0gKihoYW5kbGVycykrKykKKworLyogVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZSB4YXR0ciBwbHVnaW4gaW5mcmFzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyX2hhbmRsZXIgKgorZmluZF94YXR0cl9oYW5kbGVyX3ByZWZpeChzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqKmhhbmRsZXJzLAorCQkJICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqeGFoOworCisJaWYgKCFoYW5kbGVycykKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3JfZWFjaF94YXR0cl9oYW5kbGVyKGhhbmRsZXJzLCB4YWgpIHsKKwkJaWYgKHN0cm5jbXAoeGFoLT5wcmVmaXgsIG5hbWUsIHN0cmxlbih4YWgtPnByZWZpeCkpID09IDApCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4geGFoOworfQorCiAKIC8qCiAgKiBJbm9kZSBvcGVyYXRpb24gZ2V0eGF0dHIoKQotICogUHJlbGltaW5hcnkgbG9ja2luZzogd2UgZG93biBkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgKICAqLwogc3NpemVfdAogcmVpc2VyZnNfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAogCQkgIHNpemVfdCBzaXplKQogewotCXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyICp4YWggPSBmaW5kX3hhdHRyX2hhbmRsZXJfcHJlZml4KG5hbWUpOwotCWludCBlcnI7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcjsKIAotCWlmICgheGFoIHx8ICFyZWlzZXJmc194YXR0cnMoZGVudHJ5LT5kX3NiKSB8fAotCSAgICBnZXRfaW5vZGVfc2RfdmVyc2lvbihkZW50cnktPmRfaW5vZGUpID09IFNUQVRfREFUQV9WMSkKKwloYW5kbGVyID0gZmluZF94YXR0cl9oYW5kbGVyX3ByZWZpeChpbm9kZS0+aV9zYi0+c194YXR0ciwgbmFtZSk7CisKKwlpZiAoIWhhbmRsZXIgfHwgZ2V0X2lub2RlX3NkX3ZlcnNpb24oaW5vZGUpID09IFNUQVRfREFUQV9WMSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRyX2koZGVudHJ5LT5kX2lub2RlKTsKLQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKGRlbnRyeS0+ZF9zYik7Ci0JZXJyID0geGFoLT5nZXQoZGVudHJ5LT5kX2lub2RlLCBuYW1lLCBidWZmZXIsIHNpemUpOwotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhkZW50cnktPmRfc2IpOwotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRyX2koZGVudHJ5LT5kX2lub2RlKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiBoYW5kbGVyLT5nZXQoaW5vZGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7CiB9CiAKIC8qCkBAIC04NzksMjcgKzc2MSwxNSBAQAogcmVpc2VyZnNfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwKIAkJICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewotCXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyICp4YWggPSBmaW5kX3hhdHRyX2hhbmRsZXJfcHJlZml4KG5hbWUpOwotCWludCBlcnI7Ci0JaW50IGxvY2s7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcjsKIAotCWlmICgheGFoIHx8ICFyZWlzZXJmc194YXR0cnMoZGVudHJ5LT5kX3NiKSB8fAotCSAgICBnZXRfaW5vZGVfc2RfdmVyc2lvbihkZW50cnktPmRfaW5vZGUpID09IFNUQVRfREFUQV9WMSkKKwloYW5kbGVyID0gZmluZF94YXR0cl9oYW5kbGVyX3ByZWZpeChpbm9kZS0+aV9zYi0+c194YXR0ciwgbmFtZSk7CisKKwlpZiAoIWhhbmRsZXIgfHwgZ2V0X2lub2RlX3NkX3ZlcnNpb24oaW5vZGUpID09IFNUQVRfREFUQV9WMSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cl9pKGRlbnRyeS0+ZF9pbm9kZSk7Ci0JbG9jayA9ICFoYXNfeGF0dHJfZGlyKGRlbnRyeS0+ZF9pbm9kZSk7Ci0JaWYgKGxvY2spCi0JCXJlaXNlcmZzX3dyaXRlX2xvY2tfeGF0dHJzKGRlbnRyeS0+ZF9zYik7Ci0JZWxzZQotCQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKGRlbnRyeS0+ZF9zYik7Ci0JZXJyID0geGFoLT5zZXQoZGVudHJ5LT5kX2lub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOwotCWlmIChsb2NrKQotCQlyZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKGRlbnRyeS0+ZF9zYik7Ci0JZWxzZQotCQlyZWlzZXJmc19yZWFkX3VubG9ja194YXR0cnMoZGVudHJ5LT5kX3NiKTsKLQlyZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJfaShkZW50cnktPmRfaW5vZGUpOwotCXJldHVybiBlcnI7CisJcmV0dXJuIGhhbmRsZXItPnNldChpbm9kZSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKIH0KIAogLyoKQEAgLTkwOSw4NiArNzc5LDY2IEBACiAgKi8KIGludCByZWlzZXJmc19yZW1vdmV4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0JaW50IGVycjsKLQlzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciAqeGFoID0gZmluZF94YXR0cl9oYW5kbGVyX3ByZWZpeChuYW1lKTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyOworCWhhbmRsZXIgPSBmaW5kX3hhdHRyX2hhbmRsZXJfcHJlZml4KGlub2RlLT5pX3NiLT5zX3hhdHRyLCBuYW1lKTsKIAotCWlmICgheGFoIHx8ICFyZWlzZXJmc194YXR0cnMoZGVudHJ5LT5kX3NiKSB8fAotCSAgICBnZXRfaW5vZGVfc2RfdmVyc2lvbihkZW50cnktPmRfaW5vZGUpID09IFNUQVRfREFUQV9WMSkKKwlpZiAoIWhhbmRsZXIgfHwgZ2V0X2lub2RlX3NkX3ZlcnNpb24oaW5vZGUpID09IFNUQVRfREFUQV9WMSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cl9pKGRlbnRyeS0+ZF9pbm9kZSk7Ci0JcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhkZW50cnktPmRfc2IpOwotCi0JLyogRGVsZXRpb24gcHJlLW9wZXJhdGlvbiAqLwotCWlmICh4YWgtPmRlbCkgewotCQllcnIgPSB4YWgtPmRlbChkZW50cnktPmRfaW5vZGUsIG5hbWUpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0JfQotCi0JZXJyID0gcmVpc2VyZnNfeGF0dHJfZGVsKGRlbnRyeS0+ZF9pbm9kZSwgbmFtZSk7Ci0KLQlkZW50cnktPmRfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCW1hcmtfaW5vZGVfZGlydHkoZGVudHJ5LT5kX2lub2RlKTsKLQotICAgICAgb3V0OgotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhkZW50cnktPmRfc2IpOwotCXJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cl9pKGRlbnRyeS0+ZF9pbm9kZSk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gaGFuZGxlci0+c2V0KGlub2RlLCBuYW1lLCBOVUxMLCAwLCBYQVRUUl9SRVBMQUNFKTsKIH0KIAotLyogVGhpcyBpcyB3aGF0IGZpbGxkaXIgd2lsbCB1c2U6Ci0gKiByX3BvcyB3aWxsIGFsd2F5cyBjb250YWluIHRoZSBhbW91bnQgb2Ygc3BhY2UgcmVxdWlyZWQgZm9yIHRoZSBlbnRpcmUKLSAqIGxpc3QuIElmIHJfcG9zIGJlY29tZXMgbGFyZ2VyIHRoYW4gcl9zaXplLCB3ZSBuZWVkIG1vcmUgc3BhY2UgYW5kIHdlCi0gKiByZXR1cm4gYW4gZXJyb3IgaW5kaWNhdGluZyB0aGlzLiBJZiByX3BvcyBpcyBsZXNzIHRoYW4gcl9zaXplLCB0aGVuIHdlJ3ZlCi0gKiBmaWxsZWQgdGhlIGJ1ZmZlciBzdWNjZXNzZnVsbHkgYW5kIHdlIHJldHVybiBzdWNjZXNzICovCi1zdHJ1Y3QgcmVpc2VyZnNfbGlzdHhhdHRyX2J1ZiB7Ci0JaW50IHJfcG9zOwotCWludCByX3NpemU7Ci0JY2hhciAqcl9idWY7Ci0Jc3RydWN0IGlub2RlICpyX2lub2RlOworc3RydWN0IGxpc3R4YXR0cl9idWYgeworCXNpemVfdCBzaXplOworCXNpemVfdCBwb3M7CisJY2hhciAqYnVmOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiB9OwogCi1zdGF0aWMgaW50Ci1yZWlzZXJmc19saXN0eGF0dHJfZmlsbGVyKHZvaWQgKmJ1ZiwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCi0JCQkgIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCitzdGF0aWMgaW50IGxpc3R4YXR0cl9maWxsZXIodm9pZCAqYnVmLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJCSAgICBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKQogewotCXN0cnVjdCByZWlzZXJmc19saXN0eGF0dHJfYnVmICpiID0gKHN0cnVjdCByZWlzZXJmc19saXN0eGF0dHJfYnVmICopYnVmOwotCWludCBsZW4gPSAwOwotCWlmIChuYW1lWzBdICE9ICcuJwotCSAgICB8fCAobmFtZWxlbiAhPSAxICYmIChuYW1lWzFdICE9ICcuJyB8fCBuYW1lbGVuICE9IDIpKSkgewotCQlzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciAqeGFoID0KLQkJICAgIGZpbmRfeGF0dHJfaGFuZGxlcl9wcmVmaXgobmFtZSk7Ci0JCWlmICgheGFoKQotCQkJcmV0dXJuIDA7CS8qIFVuc3VwcG9ydGVkIHhhdHRyIG5hbWUsIHNraXAgaXQgKi8KLQotCQkvKiBXZSBjYWxsIC0+bGlzdCgpIHR3aWNlIGJlY2F1c2UgdGhlIG9wZXJhdGlvbiBpc24ndCByZXF1aXJlZCB0byBqdXN0Ci0JCSAqIHJldHVybiB0aGUgbmFtZSBiYWNrIC0gd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgKi8KLQkJbGVuICs9IHhhaC0+bGlzdChiLT5yX2lub2RlLCBuYW1lLCBuYW1lbGVuLCBOVUxMKTsKLQotCQlpZiAobGVuKSB7Ci0JCQlpZiAoYi0+cl9wb3MgKyBsZW4gKyAxIDw9IGItPnJfc2l6ZSkgewotCQkJCWNoYXIgKnAgPSBiLT5yX2J1ZiArIGItPnJfcG9zOwotCQkJCXAgKz0geGFoLT5saXN0KGItPnJfaW5vZGUsIG5hbWUsIG5hbWVsZW4sIHApOwotCQkJCSpwKysgPSAnXDAnOwotCQkJfQotCQkJYi0+cl9wb3MgKz0gbGVuICsgMTsKKwlzdHJ1Y3QgbGlzdHhhdHRyX2J1ZiAqYiA9IChzdHJ1Y3QgbGlzdHhhdHRyX2J1ZiAqKWJ1ZjsKKwlzaXplX3Qgc2l6ZTsKKwlpZiAobmFtZVswXSAhPSAnLicgfHwKKwkgICAgKG5hbWVsZW4gIT0gMSAmJiAobmFtZVsxXSAhPSAnLicgfHwgbmFtZWxlbiAhPSAyKSkpIHsKKwkJc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXI7CisJCWhhbmRsZXIgPSBmaW5kX3hhdHRyX2hhbmRsZXJfcHJlZml4KGItPmlub2RlLT5pX3NiLT5zX3hhdHRyLAorCQkJCQkJICAgIG5hbWUpOworCQlpZiAoIWhhbmRsZXIpCS8qIFVuc3VwcG9ydGVkIHhhdHRyIG5hbWUgKi8KKwkJCXJldHVybiAwOworCQlpZiAoYi0+YnVmKSB7CisJCQlzaXplID0gaGFuZGxlci0+bGlzdChiLT5pbm9kZSwgYi0+YnVmICsgYi0+cG9zLAorCQkJCQkgYi0+c2l6ZSwgbmFtZSwgbmFtZWxlbik7CisJCQlpZiAoc2l6ZSA+IGItPnNpemUpCisJCQkJcmV0dXJuIC1FUkFOR0U7CisJCX0gZWxzZSB7CisJCQlzaXplID0gaGFuZGxlci0+bGlzdChiLT5pbm9kZSwgTlVMTCwgMCwgbmFtZSwgbmFtZWxlbik7CiAJCX0KLQl9CiAKKwkJYi0+cG9zICs9IHNpemU7CisJfQogCXJldHVybiAwOwogfQogCiAvKgogICogSW5vZGUgb3BlcmF0aW9uIGxpc3R4YXR0cigpCiAgKgotICogUHJlbGltaW5hcnkgbG9ja2luZzogd2UgZG93biBkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgKKyAqIFdlIHRvdGFsbHkgaWdub3JlIHRoZSBnZW5lcmljIGxpc3R4YXR0ciBoZXJlIGJlY2F1c2UgaXQgd291bGQgYmUgc3R1cGlkCisgKiBub3QgdG8uIFNpbmNlIHRoZSB4YXR0cnMgYXJlIG9yZ2FuaXplZCBpbiBhIGRpcmVjdG9yeSwgd2UgY2FuIGp1c3QKKyAqIHJlYWRkaXIgdG8gZmluZCB0aGVtLgogICovCiBzc2l6ZV90IHJlaXNlcmZzX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQogewogCXN0cnVjdCBkZW50cnkgKmRpcjsKIAlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgcmVpc2VyZnNfbGlzdHhhdHRyX2J1ZiBidWY7CisJbG9mZl90IHBvcyA9IDA7CisJc3RydWN0IGxpc3R4YXR0cl9idWYgYnVmID0geworCQkuaW5vZGUgPSBkZW50cnktPmRfaW5vZGUsCisJCS5idWYgPSBidWZmZXIsCisJCS5zaXplID0gYnVmZmVyID8gc2l6ZSA6IDAsCisJfTsKIAogCWlmICghZGVudHJ5LT5kX2lub2RlKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTk5NywxMjkgKzg0NywxMDMgQEAKIAkgICAgZ2V0X2lub2RlX3NkX3ZlcnNpb24oZGVudHJ5LT5kX2lub2RlKSA9PSBTVEFUX0RBVEFfVjEpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJlaXNlcmZzX3JlYWRfbG9ja194YXR0cl9pKGRlbnRyeS0+ZF9pbm9kZSk7Ci0JcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhkZW50cnktPmRfc2IpOwotCWRpciA9IG9wZW5feGFfZGlyKGRlbnRyeS0+ZF9pbm9kZSwgRkxfUkVBRE9OTFkpOwotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhkZW50cnktPmRfc2IpOworCWRpciA9IG9wZW5feGFfZGlyKGRlbnRyeS0+ZF9pbm9kZSwgWEFUVFJfUkVQTEFDRSk7CiAJaWYgKElTX0VSUihkaXIpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGlyKTsKIAkJaWYgKGVyciA9PSAtRU5PREFUQSkKLQkJCWVyciA9IDA7CS8qIE5vdCBhbiBlcnJvciBpZiB0aGVyZSBhcmVuJ3QgYW55IHhhdHRycyAqLworCQkJZXJyID0gMDsgIC8qIE5vdCBhbiBlcnJvciBpZiB0aGVyZSBhcmVuJ3QgYW55IHhhdHRycyAqLwogCQlnb3RvIG91dDsKIAl9CiAKLQlidWYucl9idWYgPSBidWZmZXI7Ci0JYnVmLnJfc2l6ZSA9IGJ1ZmZlciA/IHNpemUgOiAwOwotCWJ1Zi5yX3BvcyA9IDA7Ci0JYnVmLnJfaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJmRpci0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9YQVRUUik7CisJZXJyID0gcmVpc2VyZnNfcmVhZGRpcl9kZW50cnkoZGlyLCAmYnVmLCBsaXN0eGF0dHJfZmlsbGVyLCAmcG9zKTsKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKLQlSRUlTRVJGU19JKGRlbnRyeS0+ZF9pbm9kZSktPmlfZmxhZ3MgfD0gaV9oYXNfeGF0dHJfZGlyOworCWlmICghZXJyKQorCQllcnIgPSBidWYucG9zOwogCi0JZXJyID0geGF0dHJfcmVhZGRpcihkaXItPmRfaW5vZGUsIHJlaXNlcmZzX2xpc3R4YXR0cl9maWxsZXIsICZidWYpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2RpcjsKLQotCWlmIChidWYucl9wb3MgPiBidWYucl9zaXplICYmIGJ1ZmZlciAhPSBOVUxMKQotCQllcnIgPSAtRVJBTkdFOwotCWVsc2UKLQkJZXJyID0gYnVmLnJfcG9zOwotCi0gICAgICBvdXRfZGlyOgogCWRwdXQoZGlyKTsKLQotICAgICAgb3V0OgotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRyX2koZGVudHJ5LT5kX2lub2RlKTsKK291dDoKIAlyZXR1cm4gZXJyOwogfQogCi0vKiBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHhhdHRyIHBsdWdpbiBpbmZyYXN0cnVjdHVyZSAqLwotc3RhdGljIExJU1RfSEVBRCh4YXR0cl9oYW5kbGVycyk7Ci1zdGF0aWMgREVGSU5FX1JXTE9DSyhoYW5kbGVyX2xvY2spOwotCi1zdGF0aWMgc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgKmZpbmRfeGF0dHJfaGFuZGxlcl9wcmVmaXgoY29uc3QgY2hhcgotCQkJCQkJCQkqcHJlZml4KQorc3RhdGljIGludCByZWlzZXJmc19jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgKnhhaCA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CisJaW50IGVycm9yID0gLUVBR0FJTjsgLyogZG8gcmVndWxhciB1bml4IHBlcm1pc3Npb24gY2hlY2tzIGJ5IGRlZmF1bHQgKi8KIAotCXJlYWRfbG9jaygmaGFuZGxlcl9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoKHAsICZ4YXR0cl9oYW5kbGVycykgewotCQl4YWggPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyLCBoYW5kbGVycyk7Ci0JCWlmIChzdHJuY21wKHhhaC0+cHJlZml4LCBwcmVmaXgsIHN0cmxlbih4YWgtPnByZWZpeCkpID09IDApCi0JCQlicmVhazsKLQkJeGFoID0gTlVMTDsKKwlhY2wgPSByZWlzZXJmc19nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MpOworCisJaWYgKGFjbCkgeworCQlpZiAoIUlTX0VSUihhY2wpKSB7CisJCQllcnJvciA9IHBvc2l4X2FjbF9wZXJtaXNzaW9uKGlub2RlLCBhY2wsIG1hc2spOworCQkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKKwkJfSBlbHNlIGlmIChQVFJfRVJSKGFjbCkgIT0gLUVOT0RBVEEpCisJCQllcnJvciA9IFBUUl9FUlIoYWNsKTsKIAl9CiAKLQlyZWFkX3VubG9jaygmaGFuZGxlcl9sb2NrKTsKLQlyZXR1cm4geGFoOworCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHZvaWQgX191bnJlZ2lzdGVyX2hhbmRsZXJzKHZvaWQpCitpbnQgcmVpc2VyZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciAqeGFoOwotCXN0cnVjdCBsaXN0X2hlYWQgKnAsICp0bXA7Ci0KLQlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgdG1wLCAmeGF0dHJfaGFuZGxlcnMpIHsKLQkJeGFoID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciwgaGFuZGxlcnMpOwotCQlpZiAoeGFoLT5leGl0KQotCQkJeGFoLT5leGl0KCk7Ci0KLQkJbGlzdF9kZWxfaW5pdChwKTsKLQl9Ci0JSU5JVF9MSVNUX0hFQUQoJnhhdHRyX2hhbmRsZXJzKTsKLX0KLQotaW50IF9faW5pdCByZWlzZXJmc194YXR0cl9yZWdpc3Rlcl9oYW5kbGVycyh2b2lkKQotewotCWludCBlcnIgPSAwOwotCXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyICp4YWg7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcDsKLQotCXdyaXRlX2xvY2soJmhhbmRsZXJfbG9jayk7Ci0KLQkvKiBJZiB3ZSdyZSBhbHJlYWR5IGluaXRpYWxpemVkLCBub3RoaW5nIHRvIGRvICovCi0JaWYgKCFsaXN0X2VtcHR5KCZ4YXR0cl9oYW5kbGVycykpIHsKLQkJd3JpdGVfdW5sb2NrKCZoYW5kbGVyX2xvY2spOworCS8qCisJICogV2UgZG9uJ3QgZG8gcGVybWlzc2lvbiBjaGVja3Mgb24gdGhlIGludGVybmFsIG9iamVjdHMuCisJICogUGVybWlzc2lvbnMgYXJlIGRldGVybWluZWQgYnkgdGhlICJvd25pbmciIG9iamVjdC4KKwkgKi8KKwlpZiAoSVNfUFJJVkFURShpbm9kZSkpCiAJCXJldHVybiAwOworCS8qCisJICogU3RhdCBkYXRhIHYxIGRvZXNuJ3Qgc3VwcG9ydCBBQ0xzLgorCSAqLworCWlmIChnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQorCQlyZXR1cm4gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBOVUxMKTsKKwllbHNlCisJCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIHJlaXNlcmZzX2NoZWNrX2FjbCk7Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRlX3ByaXZyb290KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlOworCW11dGV4X2xvY2tfbmVzdGVkKCZpbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9YQVRUUik7CisJZXJyID0geGF0dHJfbWtkaXIoaW5vZGUsIGRlbnRyeSwgMDcwMCk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJaWYgKGVycikgeworCQlkcHV0KGRlbnRyeSk7CisJCWRlbnRyeSA9IE5VTEw7CiAJfQogCi0JLyogQWRkIHRoZSBoYW5kbGVycyAqLwotCWxpc3RfYWRkX3RhaWwoJnVzZXJfaGFuZGxlci5oYW5kbGVycywgJnhhdHRyX2hhbmRsZXJzKTsKLQlsaXN0X2FkZF90YWlsKCZ0cnVzdGVkX2hhbmRsZXIuaGFuZGxlcnMsICZ4YXR0cl9oYW5kbGVycyk7Ci0jaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZCi0JbGlzdF9hZGRfdGFpbCgmc2VjdXJpdHlfaGFuZGxlci5oYW5kbGVycywgJnhhdHRyX2hhbmRsZXJzKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0wKLQlsaXN0X2FkZF90YWlsKCZwb3NpeF9hY2xfYWNjZXNzX2hhbmRsZXIuaGFuZGxlcnMsICZ4YXR0cl9oYW5kbGVycyk7Ci0JbGlzdF9hZGRfdGFpbCgmcG9zaXhfYWNsX2RlZmF1bHRfaGFuZGxlci5oYW5kbGVycywgJnhhdHRyX2hhbmRsZXJzKTsKLSNlbmRpZgorCWlmIChkZW50cnkgJiYgZGVudHJ5LT5kX2lub2RlKQorCQlyZWlzZXJmc19pbmZvKGRlbnRyeS0+ZF9zYiwgIkNyZWF0ZWQgJXMgLSByZXNlcnZlZCBmb3IgeGF0dHIgIgorCQkJICAgICAgInN0b3JhZ2UuXG4iLCBQUklWUk9PVF9OQU1FKTsKIAotCS8qIFJ1biBpbml0aWFsaXplcnMsIGlmIGF2YWlsYWJsZSAqLwotCWxpc3RfZm9yX2VhY2gocCwgJnhhdHRyX2hhbmRsZXJzKSB7Ci0JCXhhaCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIsIGhhbmRsZXJzKTsKLQkJaWYgKHhhaC0+aW5pdCkgewotCQkJZXJyID0geGFoLT5pbml0KCk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJbGlzdF9kZWxfaW5pdChwKTsKLQkJCQlicmVhazsKLQkJCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHhhdHRyX21vdW50X2NoZWNrKHN0cnVjdCBzdXBlcl9ibG9jayAqcykKK3sKKwkvKiBXZSBuZWVkIGdlbmVyYXRpb24gbnVtYmVycyB0byBlbnN1cmUgdGhhdCB0aGUgb2lkIG1hcHBpbmcgaXMgY29ycmVjdAorCSAqIHYzLjUgZmlsZXN5c3RlbXMgZG9uJ3QgaGF2ZSB0aGVtLiAqLworCWlmIChvbGRfZm9ybWF0X29ubHkocykpIHsKKwkJaWYgKHJlaXNlcmZzX3hhdHRyc19vcHRpb25hbChzKSkgeworCQkJLyogT2xkIGZvcm1hdCBmaWxlc3lzdGVtLCBidXQgb3B0aW9uYWwgeGF0dHJzIGhhdmUKKwkJCSAqIGJlZW4gZW5hYmxlZC4gRXJyb3Igb3V0LiAqLworCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiamRtLTIwMDUiLAorCQkJCQkgInhhdHRycy9BQ0xzIG5vdCBzdXBwb3J0ZWQgIgorCQkJCQkgIm9uIHByZS12My42IGZvcm1hdCBmaWxlc3lzdGVtcy4gIgorCQkJCQkgIkZhaWxpbmcgbW91bnQuIik7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJCX0KIAl9CiAKLQkvKiBDbGVhbiB1cCBvdGhlciBoYW5kbGVycywgaWYgYW55IGZhaWxlZCAqLwotCWlmIChlcnIpCi0JCV9fdW5yZWdpc3Rlcl9oYW5kbGVycygpOwotCi0Jd3JpdGVfdW5sb2NrKCZoYW5kbGVyX2xvY2spOwotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CiB9CiAKLXZvaWQgcmVpc2VyZnNfeGF0dHJfdW5yZWdpc3Rlcl9oYW5kbGVycyh2b2lkKQotewotCXdyaXRlX2xvY2soJmhhbmRsZXJfbG9jayk7Ci0JX191bnJlZ2lzdGVyX2hhbmRsZXJzKCk7Ci0Jd3JpdGVfdW5sb2NrKCZoYW5kbGVyX2xvY2spOwotfQorI2Vsc2UKK2ludCBfX2luaXQgcmVpc2VyZnNfeGF0dHJfcmVnaXN0ZXJfaGFuZGxlcnModm9pZCkgeyByZXR1cm4gMDsgfQordm9pZCByZWlzZXJmc194YXR0cl91bnJlZ2lzdGVyX2hhbmRsZXJzKHZvaWQpIHt9CisjZW5kaWYKIAogLyogVGhpcyB3aWxsIGNhdGNoIGxvb2t1cHMgZnJvbSB0aGUgZnMgcm9vdCB0byAucmVpc2VyZnNfcHJpdiAqLwogc3RhdGljIGludApAQCAtMTE0Nyw0OCArOTcxLDIzIEBACiB7CiAJaW50IGVyciA9IDA7CiAKLQkvKiBXZSBuZWVkIGdlbmVyYXRpb24gbnVtYmVycyB0byBlbnN1cmUgdGhhdCB0aGUgb2lkIG1hcHBpbmcgaXMgY29ycmVjdAotCSAqIHYzLjUgZmlsZXN5c3RlbXMgZG9uJ3QgaGF2ZSB0aGVtLiAqLwotCWlmICghb2xkX2Zvcm1hdF9vbmx5KHMpKSB7Ci0JCXNldF9iaXQoUkVJU0VSRlNfWEFUVFJTLCAmKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCkpOwotCX0gZWxzZSBpZiAocmVpc2VyZnNfeGF0dHJzX29wdGlvbmFsKHMpKSB7Ci0JCS8qIE9sZCBmb3JtYXQgZmlsZXN5c3RlbSwgYnV0IG9wdGlvbmFsIHhhdHRycyBoYXZlIGJlZW4gZW5hYmxlZAotCQkgKiBhdCBtb3VudCB0aW1lLiBFcnJvciBvdXQuICovCi0JCXJlaXNlcmZzX3dhcm5pbmcocywgInhhdHRycy9BQ0xzIG5vdCBzdXBwb3J0ZWQgb24gcHJlIHYzLjYgIgotCQkJCSAiZm9ybWF0IGZpbGVzeXN0ZW0uIEZhaWxpbmcgbW91bnQuIik7Ci0JCWVyciA9IC1FT1BOT1RTVVBQOworI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19YQVRUUgorCWVyciA9IHhhdHRyX21vdW50X2NoZWNrKHMpOworCWlmIChlcnIpCiAJCWdvdG8gZXJyb3I7Ci0JfSBlbHNlIHsKLQkJLyogT2xkIGZvcm1hdCBmaWxlc3lzdGVtLCBidXQgbm8gb3B0aW9uYWwgeGF0dHJzIGhhdmUgYmVlbiBlbmFibGVkLiBUaGlzCi0JCSAqIG1lYW5zIHdlIHNpbGVudGx5IGRpc2FibGUgeGF0dHJzIG9uIHRoZSBmaWxlc3lzdGVtLiAqLwotCQljbGVhcl9iaXQoUkVJU0VSRlNfWEFUVFJTLCAmKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCkpOwotCX0KKyNlbmRpZgogCiAJLyogSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgcHJpdnJvb3QgbG9jYXRlZCB5ZXQgLSBnbyBmaW5kIGl0ICovCi0JaWYgKHJlaXNlcmZzX3hhdHRycyhzKSAmJiAhUkVJU0VSRlNfU0IocyktPnByaXZfcm9vdCkgeworCWlmICghUkVJU0VSRlNfU0IocyktPnByaXZfcm9vdCkgewogCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJCWRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKFBSSVZST09UX05BTUUsIHMtPnNfcm9vdCwKIAkJCQkJc3RybGVuKFBSSVZST09UX05BTUUpKTsKIAkJaWYgKCFJU19FUlIoZGVudHJ5KSkgewotCQkJaWYgKCEobW91bnRfZmxhZ3MgJiBNU19SRE9OTFkpICYmICFkZW50cnktPmRfaW5vZGUpIHsKLQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZTsKLQkJCQltdXRleF9sb2NrX25lc3RlZCgmaW5vZGUtPmlfbXV0ZXgsCi0JCQkJCQkgIElfTVVURVhfWEFUVFIpOwotCQkJCWVyciA9IGlub2RlLT5pX29wLT5ta2Rpcihpbm9kZSwgZGVudHJ5LCAwNzAwKTsKLQkJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCQlpZiAoZXJyKSB7Ci0JCQkJCWRwdXQoZGVudHJ5KTsKLQkJCQkJZGVudHJ5ID0gTlVMTDsKLQkJCQl9Ci0KLQkJCQlpZiAoZGVudHJ5ICYmIGRlbnRyeS0+ZF9pbm9kZSkKLQkJCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkJCSAiQ3JlYXRlZCAlcyBvbiAlcyAtIHJlc2VydmVkIGZvciAiCi0JCQkJCQkJICJ4YXR0ciBzdG9yYWdlLiIsCi0JCQkJCQkJIFBSSVZST09UX05BTUUsCi0JCQkJCQkJIHJlaXNlcmZzX2JkZXZuYW1lCi0JCQkJCQkJIChpbm9kZS0+aV9zYikpOwotCQkJfSBlbHNlIGlmICghZGVudHJ5LT5kX2lub2RlKSB7CisjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSCisJCQlpZiAoIShtb3VudF9mbGFncyAmIE1TX1JET05MWSkgJiYgIWRlbnRyeS0+ZF9pbm9kZSkKKwkJCQllcnIgPSBjcmVhdGVfcHJpdnJvb3QoZGVudHJ5KTsKKyNlbmRpZgorCQkJaWYgKCFkZW50cnktPmRfaW5vZGUpIHsKIAkJCQlkcHV0KGRlbnRyeSk7CiAJCQkJZGVudHJ5ID0gTlVMTDsKIAkJCX0KQEAgLTExOTcsNzMgKzk5Niw0MSBAQAogCiAJCWlmICghZXJyICYmIGRlbnRyeSkgewogCQkJcy0+c19yb290LT5kX29wID0gJnhhdHRyX2xvb2t1cF9wb2lzb25fb3BzOwotCQkJcmVpc2VyZnNfbWFya19pbm9kZV9wcml2YXRlKGRlbnRyeS0+ZF9pbm9kZSk7CisJCQlkZW50cnktPmRfaW5vZGUtPmlfZmxhZ3MgfD0gU19QUklWQVRFOwogCQkJUkVJU0VSRlNfU0IocyktPnByaXZfcm9vdCA9IGRlbnRyeTsKLQkJfSBlbHNlIGlmICghKG1vdW50X2ZsYWdzICYgTVNfUkRPTkxZKSkgewkvKiB4YXR0cnMgYXJlIHVuYXZhaWxhYmxlICovCi0JCQkvKiBJZiB3ZSdyZSByZWFkLW9ubHkgaXQganVzdCBtZWFucyB0aGF0IHRoZSBkaXIgaGFzbid0IGJlZW4KLQkJCSAqIGNyZWF0ZWQuIE5vdCBhbiBlcnJvciAtLSBqdXN0IG5vIHhhdHRycyBvbiB0aGUgZnMuIFdlJ2xsCi0JCQkgKiBjaGVjayBhZ2FpbiBpZiB3ZSBnbyByZWFkLXdyaXRlICovCi0JCQlyZWlzZXJmc193YXJuaW5nKHMsICJ4YXR0cnMvQUNMcyBlbmFibGVkIGFuZCBjb3VsZG4ndCAiCi0JCQkJCSAiZmluZC9jcmVhdGUgLnJlaXNlcmZzX3ByaXYuIEZhaWxpbmcgbW91bnQuIik7CisjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSCisJCS8qIHhhdHRycyBhcmUgdW5hdmFpbGFibGUgKi8KKwkJfSBlbHNlIGlmICghKG1vdW50X2ZsYWdzICYgTVNfUkRPTkxZKSkgeworCQkJLyogSWYgd2UncmUgcmVhZC1vbmx5IGl0IGp1c3QgbWVhbnMgdGhhdCB0aGUgZGlyCisJCQkgKiBoYXNuJ3QgYmVlbiBjcmVhdGVkLiBOb3QgYW4gZXJyb3IgLS0ganVzdCBubworCQkJICogeGF0dHJzIG9uIHRoZSBmcy4gV2UnbGwgY2hlY2sgYWdhaW4gaWYgd2UKKwkJCSAqIGdvIHJlYWQtd3JpdGUgKi8KKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgImpkbS0yMDAwNiIsCisJCQkJCSAieGF0dHJzL0FDTHMgZW5hYmxlZCBhbmQgY291bGRuJ3QgIgorCQkJCQkgImZpbmQvY3JlYXRlIC5yZWlzZXJmc19wcml2LiAiCisJCQkJCSAiRmFpbGluZyBtb3VudC4iKTsKIAkJCWVyciA9IC1FT1BOT1RTVVBQOworI2VuZGlmCiAJCX0KIAl9CiAKLSAgICAgIGVycm9yOgotCS8qIFRoaXMgaXMgb25seSBub256ZXJvIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBpbml0aWFsaXppbmcgdGhlIHhhdHRyCi0JICogZGlyZWN0b3J5IG9yIGlmIHRoZXJlIGlzIGEgY29uZGl0aW9uIHdoZXJlIHdlIGRvbid0IHN1cHBvcnQgdGhlbS4gKi8KKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIKKwlpZiAoIWVycikKKwkJcy0+c194YXR0ciA9IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXJzOworCitlcnJvcjoKIAlpZiAoZXJyKSB7Ci0JCWNsZWFyX2JpdChSRUlTRVJGU19YQVRUUlMsICYoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0KSk7CiAJCWNsZWFyX2JpdChSRUlTRVJGU19YQVRUUlNfVVNFUiwgJihSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQpKTsKIAkJY2xlYXJfYml0KFJFSVNFUkZTX1BPU0lYQUNMLCAmKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCkpOwogCX0KKyNlbmRpZgogCiAJLyogVGhlIHN1cGVyX2Jsb2NrIE1TX1BPU0lYQUNMIG11c3QgbWlycm9yIHRoZSAobm8pYWNsIG1vdW50IG9wdGlvbi4gKi8KIAlzLT5zX2ZsYWdzID0gcy0+c19mbGFncyAmIH5NU19QT1NJWEFDTDsKKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMCiAJaWYgKHJlaXNlcmZzX3Bvc2l4YWNsKHMpKQogCQlzLT5zX2ZsYWdzIHw9IE1TX1BPU0lYQUNMOworI2VuZGlmCiAKIAlyZXR1cm4gZXJyOwogfQotCi1zdGF0aWMgaW50IHJlaXNlcmZzX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKLXsKLQlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7Ci0JaW50IGVycm9yID0gLUVBR0FJTjsgLyogZG8gcmVndWxhciB1bml4IHBlcm1pc3Npb24gY2hlY2tzIGJ5IGRlZmF1bHQgKi8KLQotCXJlaXNlcmZzX3JlYWRfbG9ja194YXR0cl9pKGlub2RlKTsKLQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQotCWFjbCA9IHJlaXNlcmZzX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUyk7Ci0KLQlyZWlzZXJmc19yZWFkX3VubG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRyX2koaW5vZGUpOwotCi0JaWYgKGFjbCkgewotCQlpZiAoIUlTX0VSUihhY2wpKSB7Ci0JCQllcnJvciA9IHBvc2l4X2FjbF9wZXJtaXNzaW9uKGlub2RlLCBhY2wsIG1hc2spOwotCQkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKLQkJfSBlbHNlIGlmIChQVFJfRVJSKGFjbCkgIT0gLUVOT0RBVEEpCi0JCQllcnJvciA9IFBUUl9FUlIoYWNsKTsKLQl9Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLWludCByZWlzZXJmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQotewotCS8qCi0JICogV2UgZG9uJ3QgZG8gcGVybWlzc2lvbiBjaGVja3Mgb24gdGhlIGludGVybmFsIG9iamVjdHMuCi0JICogUGVybWlzc2lvbnMgYXJlIGRldGVybWluZWQgYnkgdGhlICJvd25pbmciIG9iamVjdC4KLQkgKi8KLQlpZiAoaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogU3RhdCBkYXRhIHYxIGRvZXNuJ3Qgc3VwcG9ydCBBQ0xzLgotCSAqLwotCWlmIChnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQotCQlyZXR1cm4gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBOVUxMKTsKLQllbHNlCi0JCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIHJlaXNlcmZzX2NoZWNrX2FjbCk7Ci19CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy94YXR0cl9hY2wuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jCmluZGV4IGI3ZTRmYTQuLmQ0MjM0MTYgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jCisrKyBiL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jCkBAIC0xMCwxNSArMTAsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWlzZXJmc19hY2wuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi1zdGF0aWMgaW50IHJlaXNlcmZzX3NldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsCitzdGF0aWMgaW50IHJlaXNlcmZzX3NldF9hY2woc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsCiAJCQkgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsKTsKIAogc3RhdGljIGludAogeGF0dHJfc2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQogewogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKLQlpbnQgZXJyb3I7Ci0KKwlpbnQgZXJyb3IsIGVycm9yMjsKKwlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOworCXNpemVfdCBqY3JlYXRlX2Jsb2NrczsKIAlpZiAoIXJlaXNlcmZzX3Bvc2l4YWNsKGlub2RlLT5pX3NiKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKQEAgLTM2LDcgKzM4LDIxIEBACiAJfSBlbHNlCiAJCWFjbCA9IE5VTEw7CiAKLQllcnJvciA9IHJlaXNlcmZzX3NldF9hY2woaW5vZGUsIHR5cGUsIGFjbCk7CisJLyogUGVzc2ltaXNtOiBXZSBjYW4ndCBhc3N1bWUgdGhhdCBhbnl0aGluZyBmcm9tIHRoZSB4YXR0ciByb290IHVwCisJICogaGFzIGJlZW4gY3JlYXRlZC4gKi8KKworCWpjcmVhdGVfYmxvY2tzID0gcmVpc2VyZnNfeGF0dHJfamNyZWF0ZV9uYmxvY2tzKGlub2RlKSArCisJCQkgcmVpc2VyZnNfeGF0dHJfbmJsb2Nrcyhpbm9kZSwgc2l6ZSkgKiAyOworCisJcmVpc2VyZnNfd3JpdGVfbG9jayhpbm9kZS0+aV9zYik7CisJZXJyb3IgPSBqb3VybmFsX2JlZ2luKCZ0aCwgaW5vZGUtPmlfc2IsIGpjcmVhdGVfYmxvY2tzKTsKKwlpZiAoZXJyb3IgPT0gMCkgeworCQllcnJvciA9IHJlaXNlcmZzX3NldF9hY2woJnRoLCBpbm9kZSwgdHlwZSwgYWNsKTsKKwkJZXJyb3IyID0gam91cm5hbF9lbmQoJnRoLCBpbm9kZS0+aV9zYiwgamNyZWF0ZV9ibG9ja3MpOworCQlpZiAoZXJyb3IyKQorCQkJZXJyb3IgPSBlcnJvcjI7CisJfQorCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7CiAKICAgICAgIHJlbGVhc2VfYW5kX291dDoKIAlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwpAQCAtMTcyLDYgKzE4OCwyOSBAQAogCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaXNldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBvc2l4X2FjbCAqKmlfYWNsLAorCQkJICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCkKK3sKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCWlmICgqaV9hY2wgIT0gRVJSX1BUUigtRU5PREFUQSkpCisJCXBvc2l4X2FjbF9yZWxlYXNlKCppX2FjbCk7CisJKmlfYWNsID0gcG9zaXhfYWNsX2R1cChhY2wpOworCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcG9zaXhfYWNsICppZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgc3RydWN0IHBvc2l4X2FjbCAqKmlfYWNsKQoreworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IEVSUl9QVFIoLUVOT0RBVEEpOworCisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlpZiAoKmlfYWNsICE9IEVSUl9QVFIoLUVOT0RBVEEpKQorCQlhY2wgPSBwb3NpeF9hY2xfZHVwKCppX2FjbCk7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCisJcmV0dXJuIGFjbDsKK30KKwogLyoKICAqIElub2RlIG9wZXJhdGlvbiBnZXRfcG9zaXhfYWNsKCkuCiAgKgpAQCAtMTk5LDExICsyMzgsMTEgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCi0JaWYgKElTX0VSUigqcF9hY2wpKSB7Ci0JCWlmIChQVFJfRVJSKCpwX2FjbCkgPT0gLUVOT0RBVEEpCi0JCQlyZXR1cm4gTlVMTDsKLQl9IGVsc2UgaWYgKCpwX2FjbCAhPSBOVUxMKQotCQlyZXR1cm4gcG9zaXhfYWNsX2R1cCgqcF9hY2wpOworCWFjbCA9IGlnZXRfYWNsKGlub2RlLCBwX2FjbCk7CisJaWYgKGFjbCAmJiAhSVNfRVJSKGFjbCkpCisJCXJldHVybiBhY2w7CisJZWxzZSBpZiAoUFRSX0VSUihhY2wpID09IC1FTk9EQVRBKQorCQlyZXR1cm4gTlVMTDsKIAogCXNpemUgPSByZWlzZXJmc194YXR0cl9nZXQoaW5vZGUsIG5hbWUsIE5VTEwsIDApOwogCWlmIChzaXplIDwgMCkgewpAQCAtMjI5LDcgKzI2OCw3IEBACiAJfSBlbHNlIHsKIAkJYWNsID0gcG9zaXhfYWNsX2Zyb21fZGlzayh2YWx1ZSwgcmV0dmFsKTsKIAkJaWYgKCFJU19FUlIoYWNsKSkKLQkJCSpwX2FjbCA9IHBvc2l4X2FjbF9kdXAoYWNsKTsKKwkJCWlzZXRfYWNsKGlub2RlLCBwX2FjbCwgYWNsKTsKIAl9CiAKIAlrZnJlZSh2YWx1ZSk7CkBAIC0yNDMsMTIgKzI4MiwxMyBAQAogICogQktMIGhlbGQgW2JlZm9yZSAyLjUueF0KICAqLwogc3RhdGljIGludAotcmVpc2VyZnNfc2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgc3RydWN0IHBvc2l4X2FjbCAqYWNsKQorcmVpc2VyZnNfc2V0X2FjbChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJIGludCB0eXBlLCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wpCiB7CiAJY2hhciAqbmFtZTsKIAl2b2lkICp2YWx1ZSA9IE5VTEw7CiAJc3RydWN0IHBvc2l4X2FjbCAqKnBfYWNsOwotCXNpemVfdCBzaXplOworCXNpemVfdCBzaXplID0gMDsKIAlpbnQgZXJyb3I7CiAJc3RydWN0IHJlaXNlcmZzX2lub2RlX2luZm8gKnJlaXNlcmZzX2kgPSBSRUlTRVJGU19JKGlub2RlKTsKIApAQCAtMjg1LDMxICszMjUsMjggQEAKIAkJdmFsdWUgPSBwb3NpeF9hY2xfdG9fZGlzayhhY2wsICZzaXplKTsKIAkJaWYgKElTX0VSUih2YWx1ZSkpCiAJCQlyZXR1cm4gKGludClQVFJfRVJSKHZhbHVlKTsKLQkJZXJyb3IgPSByZWlzZXJmc194YXR0cl9zZXQoaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplLCAwKTsKLQl9IGVsc2UgewotCQllcnJvciA9IHJlaXNlcmZzX3hhdHRyX2RlbChpbm9kZSwgbmFtZSk7Ci0JCWlmIChlcnJvciA9PSAtRU5PREFUQSkgewotCQkJLyogVGhpcyBtYXkgc2VlbSBvZGQgaGVyZSwgYnV0IGl0IG1lYW5zIHRoYXQgdGhlIEFDTCB3YXMgc2V0Ci0JCQkgKiB3aXRoIGEgdmFsdWUgcmVwcmVzZW50YWJsZSB3aXRoIG1vZGUgYml0cy4gSWYgdGhlcmUgd2FzCi0JCQkgKiBhbiBBQ0wgYmVmb3JlLCByZWlzZXJmc194YXR0cl9kZWwgYWxyZWFkeSBkaXJ0aWVkIHRoZSBpbm9kZS4KLQkJCSAqLworCX0KKworCWVycm9yID0gcmVpc2VyZnNfeGF0dHJfc2V0X2hhbmRsZSh0aCwgaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplLCAwKTsKKworCS8qCisJICogRW5zdXJlIHRoYXQgdGhlIGlub2RlIGdldHMgZGlydGllZCBpZiB3ZSdyZSBvbmx5IHVzaW5nCisJICogdGhlIG1vZGUgYml0cyBhbmQgYW4gb2xkIEFDTCBkaWRuJ3QgZXhpc3QuIFdlIGRvbid0IG5lZWQKKwkgKiB0byBjaGVjayBpZiB0aGUgaW5vZGUgaXMgaGFzaGVkIGhlcmUgc2luY2Ugd2Ugd29uJ3QgZ2V0CisJICogY2FsbGVkIGJ5IHJlaXNlcmZzX2luaGVyaXRfZGVmYXVsdF9hY2woKS4KKwkgKi8KKwlpZiAoZXJyb3IgPT0gLUVOT0RBVEEpIHsKKwkJZXJyb3IgPSAwOworCQlpZiAodHlwZSA9PSBBQ0xfVFlQRV9BQ0NFU1MpIHsKKwkJCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCQkJZXJyb3IgPSAwOwogCQl9CiAJfQogCiAJa2ZyZWUodmFsdWUpOwogCi0JaWYgKCFlcnJvcikgewotCQkvKiBSZWxlYXNlIHRoZSBvbGQgb25lICovCi0JCWlmICghSVNfRVJSKCpwX2FjbCkgJiYgKnBfYWNsKQotCQkJcG9zaXhfYWNsX3JlbGVhc2UoKnBfYWNsKTsKLQotCQlpZiAoYWNsID09IE5VTEwpCi0JCQkqcF9hY2wgPSBFUlJfUFRSKC1FTk9EQVRBKTsKLQkJZWxzZQotCQkJKnBfYWNsID0gcG9zaXhfYWNsX2R1cChhY2wpOwotCX0KKwlpZiAoIWVycm9yKQorCQlpc2V0X2FjbChpbm9kZSwgcF9hY2wsIGFjbCk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0zMTcsNyArMzU0LDggQEAKIC8qIGRpci0+aV9tdXRleDogbG9ja2VkLAogICogaW5vZGUgaXMgbmV3IGFuZCBub3QgcmVsZWFzZWQgaW50byB0aGUgd2lsZCB5ZXQgKi8KIGludAotcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCSAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CkBAIC0zMzUsOCArMzczLDggQEAKIAkvKiBEb24ndCBhcHBseSBBQ0xzIHRvIG9iamVjdHMgaW4gdGhlIC5yZWlzZXJmc19wcml2IHRyZWUuLiBUaGlzCiAJICogd291bGQgYmUgdXNlbGVzcyBzaW5jZSBwZXJtaXNzaW9ucyBhcmUgaWdub3JlZCwgYW5kIGEgcGFpbiBiZWNhdXNlCiAJICogaXQgaW50cm9kdWNlcyBsb2NraW5nIGN5Y2xlcyAqLwotCWlmIChpc19yZWlzZXJmc19wcml2X29iamVjdChkaXIpKSB7Ci0JCXJlaXNlcmZzX21hcmtfaW5vZGVfcHJpdmF0ZShpbm9kZSk7CisJaWYgKElTX1BSSVZBVEUoZGlyKSkgeworCQlpbm9kZS0+aV9mbGFncyB8PSBTX1BSSVZBVEU7CiAJCWdvdG8gYXBwbHlfdW1hc2s7CiAJfQogCkBAIC0zNTQsNyArMzkyLDggQEAKIAogCQkvKiBDb3B5IHRoZSBkZWZhdWx0IEFDTCB0byB0aGUgZGVmYXVsdCBBQ0wgb2YgYSBuZXcgZGlyZWN0b3J5ICovCiAJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7Ci0JCQllcnIgPSByZWlzZXJmc19zZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxULCBhY2wpOworCQkJZXJyID0gcmVpc2VyZnNfc2V0X2FjbCh0aCwgaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQsCisJCQkJCSAgICAgICBhY2wpOwogCQkJaWYgKGVycikKIAkJCQlnb3RvIGNsZWFudXA7CiAJCX0KQEAgLTM3NSw5ICs0MTQsOSBAQAogCiAJCQkvKiBJZiB3ZSBuZWVkIGFuIEFDTC4uICovCiAJCQlpZiAobmVlZF9hY2wgPiAwKSB7Ci0JCQkJZXJyID0KLQkJCQkgICAgcmVpc2VyZnNfc2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTLAotCQkJCQkJICAgICBhY2xfY29weSk7CisJCQkJZXJyID0gcmVpc2VyZnNfc2V0X2FjbCh0aCwgaW5vZGUsCisJCQkJCQkgICAgICAgQUNMX1RZUEVfQUNDRVNTLAorCQkJCQkJICAgICAgIGFjbF9jb3B5KTsKIAkJCQlpZiAoZXJyKQogCQkJCQlnb3RvIGNsZWFudXBfY29weTsKIAkJCX0KQEAgLTM5NSwyNSArNDM0LDQ1IEBACiAJcmV0dXJuIGVycjsKIH0KIAotLyogTG9va3MgdXAgYW5kIGNhY2hlcyB0aGUgcmVzdWx0IG9mIHRoZSBkZWZhdWx0IEFDTC4KLSAqIFdlIGRvIHRoaXMgc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGNhcnJ5IHRoZSB4YXR0cl9zZW0gaW50bwotICogcmVpc2VyZnNfbmV3X2lub2RlIGlmIHdlIGRvbid0IG5lZWQgdG8gKi8KKy8qIFRoaXMgaXMgdXNlZCB0byBjYWNoZSB0aGUgZGVmYXVsdCBhY2wgYmVmb3JlIGEgbmV3IG9iamVjdCBpcyBjcmVhdGVkLgorICogVGhlIGJpZ2dlc3QgcmVhc29uIGZvciB0aGlzIGlzIHRvIGdldCBhbiBpZGVhIG9mIGhvdyBtYW55IGJsb2NrcyB3aWxsCisgKiBhY3R1YWxseSBiZSByZXF1aXJlZCBmb3IgdGhlIGNyZWF0ZSBvcGVyYXRpb24gaWYgd2UgbXVzdCBpbmhlcml0IGFuIEFDTC4KKyAqIEFuIEFDTCB3cml0ZSBjYW4gYWRkIHVwIHRvIDMgb2JqZWN0IGNyZWF0aW9ucyBhbmQgYW4gYWRkaXRpb25hbCBmaWxlIHdyaXRlCisgKiBzbyB3ZSdkIHByZWZlciBub3QgdG8gcmVzZXJ2ZSB0aGF0IG1hbnkgYmxvY2tzIGluIHRoZSBqb3VybmFsIGlmIHdlIGNhbi4KKyAqIEl0IGFsc28gaGFzIHRoZSBhZHZhbnRhZ2Ugb2Ygbm90IGxvYWRpbmcgdGhlIEFDTCB3aXRoIGEgdHJhbnNhY3Rpb24gb3BlbiwKKyAqIHRoaXMgbWF5IHNlZW0gc2lsbHksIGJ1dCBpZiB0aGUgb3duZXIgb2YgdGhlIGRpcmVjdG9yeSBpcyBkb2luZyB0aGUKKyAqIGNyZWF0aW9uLCB0aGUgQUNMIG1heSBub3QgYmUgbG9hZGVkIHNpbmNlIHRoZSBwZXJtaXNzaW9ucyB3b3VsZG4ndCByZXF1aXJlCisgKiBpdC4KKyAqIFdlIHJldHVybiB0aGUgbnVtYmVyIG9mIGJsb2NrcyByZXF1aXJlZCBmb3IgdGhlIHRyYW5zYWN0aW9uLgorICovCiBpbnQgcmVpc2VyZnNfY2FjaGVfZGVmYXVsdF9hY2woc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlpbnQgcmV0ID0gMDsKLQlpZiAocmVpc2VyZnNfcG9zaXhhY2woaW5vZGUtPmlfc2IpICYmICFpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkpIHsKLQkJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwotCQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJfaShpbm9kZSk7Ci0JCXJlaXNlcmZzX3JlYWRfbG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwotCQlhY2wgPSByZWlzZXJmc19nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxUKTsKLQkJcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQkJcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJfaShpbm9kZSk7Ci0JCXJldCA9IChhY2wgJiYgIUlTX0VSUihhY2wpKTsKLQkJaWYgKHJldCkKLQkJCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CisJc3RydWN0IHBvc2l4X2FjbCAqYWNsOworCWludCBuYmxvY2tzID0gMDsKKworCWlmIChJU19QUklWQVRFKGlub2RlKSkKKwkJcmV0dXJuIDA7CisKKwlhY2wgPSByZWlzZXJmc19nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxUKTsKKworCWlmIChhY2wgJiYgIUlTX0VSUihhY2wpKSB7CisJCWludCBzaXplID0gcmVpc2VyZnNfYWNsX3NpemUoYWNsLT5hX2NvdW50KTsKKworCQkvKiBPdGhlciB4YXR0cnMgY2FuIGJlIGNyZWF0ZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uLiBXZSBkb24ndAorCQkgKiB3YW50IHRvIGNsYWltIHRvbyBtYW55IGJsb2Nrcywgc28gd2UgY2hlY2sgdG8gc2VlIGlmIHdlCisJCSAqIHdlIG5lZWQgdG8gY3JlYXRlIHRoZSB0cmVlIHRvIHRoZSB4YXR0cnMsIGFuZCB0aGVuIHdlCisJCSAqIGp1c3Qgd2FudCB0d28gZmlsZXMuICovCisJCW5ibG9ja3MgPSByZWlzZXJmc194YXR0cl9qY3JlYXRlX25ibG9ja3MoaW5vZGUpOworCQluYmxvY2tzICs9IEpPVVJOQUxfQkxPQ0tTX1BFUl9PQkpFQ1QoaW5vZGUtPmlfc2IpOworCisJCVJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzIHw9IGlfaGFzX3hhdHRyX2RpcjsKKworCQkvKiBXZSBuZWVkIHRvIGFjY291bnQgZm9yIHdyaXRlcyArIGJpdG1hcHMgZm9yIHR3byBmaWxlcyAqLworCQluYmxvY2tzICs9IHJlaXNlcmZzX3hhdHRyX25ibG9ja3MoaW5vZGUsIHNpemUpICogNDsKKwkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKIAl9CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiBuYmxvY2tzOwogfQogCiBpbnQgcmVpc2VyZnNfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUpCkBAIC00MjksOSArNDg4LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7CiAJYWNsID0gcmVpc2VyZnNfZ2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTKTsKLQlyZWlzZXJmc19yZWFkX3VubG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwogCWlmICghYWNsKQogCQlyZXR1cm4gMDsKIAlpZiAoSVNfRVJSKGFjbCkpCkBAIC00NDIsMTggKzQ5OSwyMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAllcnJvciA9IHBvc2l4X2FjbF9jaG1vZF9tYXNxKGNsb25lLCBpbm9kZS0+aV9tb2RlKTsKIAlpZiAoIWVycm9yKSB7Ci0JCWludCBsb2NrID0gIWhhc194YXR0cl9kaXIoaW5vZGUpOwotCQlyZWlzZXJmc193cml0ZV9sb2NrX3hhdHRyX2koaW5vZGUpOwotCQlpZiAobG9jaykKLQkJCXJlaXNlcmZzX3dyaXRlX2xvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQkJZWxzZQotCQkJcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7Ci0JCWVycm9yID0gcmVpc2VyZnNfc2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTLCBjbG9uZSk7Ci0JCWlmIChsb2NrKQotCQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7Ci0JCWVsc2UKLQkJCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7Ci0JCXJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cl9pKGlub2RlKTsKKwkJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKKwkJc2l6ZV90IHNpemUgPSByZWlzZXJmc194YXR0cl9uYmxvY2tzKGlub2RlLAorCQkJCQkgICAgIHJlaXNlcmZzX2FjbF9zaXplKGNsb25lLT5hX2NvdW50KSk7CisJCXJlaXNlcmZzX3dyaXRlX2xvY2soaW5vZGUtPmlfc2IpOworCQllcnJvciA9IGpvdXJuYWxfYmVnaW4oJnRoLCBpbm9kZS0+aV9zYiwgc2l6ZSAqIDIpOworCQlpZiAoIWVycm9yKSB7CisJCQlpbnQgZXJyb3IyOworCQkJZXJyb3IgPSByZWlzZXJmc19zZXRfYWNsKCZ0aCwgaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUywKKwkJCQkJCSBjbG9uZSk7CisJCQllcnJvcjIgPSBqb3VybmFsX2VuZCgmdGgsIGlub2RlLT5pX3NiLCBzaXplICogMik7CisJCQlpZiAoZXJyb3IyKQorCQkJCWVycm9yID0gZXJyb3IyOworCQl9CisJCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7CiAJfQogCXBvc2l4X2FjbF9yZWxlYXNlKGNsb25lKTsKIAlyZXR1cm4gZXJyb3I7CkBAIC00NzcsMzggKzUzNiwyMiBAQAogCXJldHVybiB4YXR0cl9zZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIHZhbHVlLCBzaXplKTsKIH0KIAotc3RhdGljIGludCBwb3NpeF9hY2xfYWNjZXNzX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIHNpemVfdCBwb3NpeF9hY2xfYWNjZXNzX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwKKwkJCQkgICAgc2l6ZV90IGxpc3Rfc2l6ZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgc2l6ZV90IG5hbWVfbGVuKQogewotCXN0cnVjdCByZWlzZXJmc19pbm9kZV9pbmZvICpyZWlzZXJmc19pID0gUkVJU0VSRlNfSShpbm9kZSk7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqKmFjbCA9ICZyZWlzZXJmc19pLT5pX2FjbF9hY2Nlc3M7Ci0JaWYgKHN0cmxlbihuYW1lKSAhPSBzaXplb2YoUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUykgLSAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoIUlTX0VSUigqYWNsKSAmJiAqYWNsKSB7Ci0JCXBvc2l4X2FjbF9yZWxlYXNlKCphY2wpOwotCQkqYWNsID0gRVJSX1BUUigtRU5PREFUQSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXBvc2l4X2FjbF9hY2Nlc3NfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKLQkJICAgICAgY2hhciAqb3V0KQotewotCWludCBsZW4gPSBuYW1lbGVuOworCWNvbnN0IHNpemVfdCBzaXplID0gc2l6ZW9mKFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1MpOwogCWlmICghcmVpc2VyZnNfcG9zaXhhY2woaW5vZGUtPmlfc2IpKQogCQlyZXR1cm4gMDsKLQlpZiAob3V0KQotCQltZW1jcHkob3V0LCBuYW1lLCBsZW4pOwotCi0JcmV0dXJuIGxlbjsKKwlpZiAobGlzdCAmJiBzaXplIDw9IGxpc3Rfc2l6ZSkKKwkJbWVtY3B5KGxpc3QsIFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1MsIHNpemUpOworCXJldHVybiBzaXplOwogfQogCi1zdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciBwb3NpeF9hY2xfYWNjZXNzX2hhbmRsZXIgPSB7CitzdHJ1Y3QgeGF0dHJfaGFuZGxlciByZWlzZXJmc19wb3NpeF9hY2xfYWNjZXNzX2hhbmRsZXIgPSB7CiAJLnByZWZpeCA9IFBPU0lYX0FDTF9YQVRUUl9BQ0NFU1MsCiAJLmdldCA9IHBvc2l4X2FjbF9hY2Nlc3NfZ2V0LAogCS5zZXQgPSBwb3NpeF9hY2xfYWNjZXNzX3NldCwKLQkuZGVsID0gcG9zaXhfYWNsX2FjY2Vzc19kZWwsCiAJLmxpc3QgPSBwb3NpeF9hY2xfYWNjZXNzX2xpc3QsCiB9OwogCkBAIC01MzAsMzcgKzU3MywyMSBAQAogCXJldHVybiB4YXR0cl9zZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxULCB2YWx1ZSwgc2l6ZSk7CiB9CiAKLXN0YXRpYyBpbnQgcG9zaXhfYWNsX2RlZmF1bHRfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgc2l6ZV90IHBvc2l4X2FjbF9kZWZhdWx0X2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwKKwkJCQkgICAgIHNpemVfdCBsaXN0X3NpemUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICBzaXplX3QgbmFtZV9sZW4pCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2lub2RlX2luZm8gKnJlaXNlcmZzX2kgPSBSRUlTRVJGU19JKGlub2RlKTsKLQlzdHJ1Y3QgcG9zaXhfYWNsICoqYWNsID0gJnJlaXNlcmZzX2ktPmlfYWNsX2RlZmF1bHQ7Ci0JaWYgKHN0cmxlbihuYW1lKSAhPSBzaXplb2YoUE9TSVhfQUNMX1hBVFRSX0RFRkFVTFQpIC0gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFJU19FUlIoKmFjbCkgJiYgKmFjbCkgewotCQlwb3NpeF9hY2xfcmVsZWFzZSgqYWNsKTsKLQkJKmFjbCA9IEVSUl9QVFIoLUVOT0RBVEEpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1wb3NpeF9hY2xfZGVmYXVsdF9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAotCQkgICAgICAgY2hhciAqb3V0KQotewotCWludCBsZW4gPSBuYW1lbGVuOworCWNvbnN0IHNpemVfdCBzaXplID0gc2l6ZW9mKFBPU0lYX0FDTF9YQVRUUl9ERUZBVUxUKTsKIAlpZiAoIXJlaXNlcmZzX3Bvc2l4YWNsKGlub2RlLT5pX3NiKSkKIAkJcmV0dXJuIDA7Ci0JaWYgKG91dCkKLQkJbWVtY3B5KG91dCwgbmFtZSwgbGVuKTsKLQotCXJldHVybiBsZW47CisJaWYgKGxpc3QgJiYgc2l6ZSA8PSBsaXN0X3NpemUpCisJCW1lbWNweShsaXN0LCBQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCwgc2l6ZSk7CisJcmV0dXJuIHNpemU7CiB9CiAKLXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHBvc2l4X2FjbF9kZWZhdWx0X2hhbmRsZXIgPSB7CitzdHJ1Y3QgeGF0dHJfaGFuZGxlciByZWlzZXJmc19wb3NpeF9hY2xfZGVmYXVsdF9oYW5kbGVyID0gewogCS5wcmVmaXggPSBQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCwKIAkuZ2V0ID0gcG9zaXhfYWNsX2RlZmF1bHRfZ2V0LAogCS5zZXQgPSBwb3NpeF9hY2xfZGVmYXVsdF9zZXQsCi0JLmRlbCA9IHBvc2l4X2FjbF9kZWZhdWx0X2RlbCwKIAkubGlzdCA9IHBvc2l4X2FjbF9kZWZhdWx0X2xpc3QsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0dHJfc2VjdXJpdHkuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyX3NlY3VyaXR5LmMKaW5kZXggMDU2MDA4ZC4uNGQzYzIwZSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMveGF0dHJfc2VjdXJpdHkuYworKysgYi9mcy9yZWlzZXJmcy94YXR0cl9zZWN1cml0eS5jCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX3hhdHRyLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiBzdGF0aWMgaW50CkBAIC0xMiw3ICsxMyw3IEBACiAJaWYgKHN0cmxlbihuYW1lKSA8IHNpemVvZihYQVRUUl9TRUNVUklUWV9QUkVGSVgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkpCisJaWYgKElTX1BSSVZBVEUoaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJcmV0dXJuIHJlaXNlcmZzX3hhdHRyX2dldChpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKQEAgLTI1LDQxICsyNiw4NCBAQAogCWlmIChzdHJsZW4obmFtZSkgPCBzaXplb2YoWEFUVFJfU0VDVVJJVFlfUFJFRklYKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpKQorCWlmIChJU19QUklWQVRFKGlub2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAogCXJldHVybiByZWlzZXJmc194YXR0cl9zZXQoaW5vZGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IHNlY3VyaXR5X2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIHNpemVfdCBzZWN1cml0eV9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X2xlbiwKKwkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbikKIHsKLQlpZiAoc3RybGVuKG5hbWUpIDwgc2l6ZW9mKFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCkpCi0JCXJldHVybiAtRUlOVkFMOworCWNvbnN0IHNpemVfdCBsZW4gPSBuYW1lbGVuICsgMTsKIAotCWlmIChpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotc2VjdXJpdHlfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgY2hhciAqb3V0KQotewotCWludCBsZW4gPSBuYW1lbGVuOwotCi0JaWYgKGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGlub2RlKSkKKwlpZiAoSVNfUFJJVkFURShpbm9kZSkpCiAJCXJldHVybiAwOwogCi0JaWYgKG91dCkKLQkJbWVtY3B5KG91dCwgbmFtZSwgbGVuKTsKKwlpZiAobGlzdCAmJiBsZW4gPD0gbGlzdF9sZW4pIHsKKwkJbWVtY3B5KGxpc3QsIG5hbWUsIG5hbWVsZW4pOworCQlsaXN0W25hbWVsZW5dID0gJ1wwJzsKKwl9CiAKIAlyZXR1cm4gbGVuOwogfQogCi1zdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciBzZWN1cml0eV9oYW5kbGVyID0geworLyogSW5pdGlhbGl6ZXMgdGhlIHNlY3VyaXR5IGNvbnRleHQgZm9yIGEgbmV3IGlub2RlIGFuZCByZXR1cm5zIHRoZSBudW1iZXIKKyAqIG9mIGJsb2NrcyBuZWVkZWQgZm9yIHRoZSB0cmFuc2FjdGlvbi4gSWYgc3VjY2Vzc2Z1bCwgcmVpc2VyZnNfc2VjdXJpdHkKKyAqIG11c3QgYmUgcmVsZWFzZWQgdXNpbmcgcmVpc2VyZnNfc2VjdXJpdHlfZnJlZSB3aGVuIHRoZSBjYWxsZXIgaXMgZG9uZS4gKi8KK2ludCByZWlzZXJmc19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSAqc2VjKQoreworCWludCBibG9ja3MgPSAwOworCWludCBlcnJvciA9IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgJnNlYy0+bmFtZSwKKwkJCQkJCSAmc2VjLT52YWx1ZSwgJnNlYy0+bGVuZ3RoKTsKKwlpZiAoZXJyb3IpIHsKKwkJaWYgKGVycm9yID09IC1FT1BOT1RTVVBQKQorCQkJZXJyb3IgPSAwOworCisJCXNlYy0+bmFtZSA9IE5VTEw7CisJCXNlYy0+dmFsdWUgPSBOVUxMOworCQlzZWMtPmxlbmd0aCA9IDA7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlpZiAoc2VjLT5sZW5ndGgpIHsKKwkJYmxvY2tzID0gcmVpc2VyZnNfeGF0dHJfamNyZWF0ZV9uYmxvY2tzKGlub2RlKSArCisJCQkgcmVpc2VyZnNfeGF0dHJfbmJsb2Nrcyhpbm9kZSwgc2VjLT5sZW5ndGgpOworCQkvKiBXZSBkb24ndCB3YW50IHRvIGNvdW50IHRoZSBkaXJlY3RvcmllcyB0d2ljZSBpZiB3ZSBoYXZlCisJCSAqIGEgZGVmYXVsdCBBQ0wuICovCisJCVJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzIHw9IGlfaGFzX3hhdHRyX2RpcjsKKwl9CisJcmV0dXJuIGJsb2NrczsKK30KKworaW50IHJlaXNlcmZzX3NlY3VyaXR5X3dyaXRlKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAorCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSAqc2VjKQoreworCWludCBlcnJvcjsKKwlpZiAoc3RybGVuKHNlYy0+bmFtZSkgPCBzaXplb2YoWEFUVFJfU0VDVVJJVFlfUFJFRklYKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnJvciA9IHJlaXNlcmZzX3hhdHRyX3NldF9oYW5kbGUodGgsIGlub2RlLCBzZWMtPm5hbWUsIHNlYy0+dmFsdWUsCisJCQkJCSAgc2VjLT5sZW5ndGgsIFhBVFRSX0NSRUFURSk7CisJaWYgKGVycm9yID09IC1FTk9EQVRBIHx8IGVycm9yID09IC1FT1BOT1RTVVBQKQorCQllcnJvciA9IDA7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3ZvaWQgcmVpc2VyZnNfc2VjdXJpdHlfZnJlZShzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlICpzZWMpCit7CisJa2ZyZWUoc2VjLT5uYW1lKTsKKwlrZnJlZShzZWMtPnZhbHVlKTsKKwlzZWMtPm5hbWUgPSBOVUxMOworCXNlYy0+dmFsdWUgPSBOVUxMOworfQorCitzdHJ1Y3QgeGF0dHJfaGFuZGxlciByZWlzZXJmc194YXR0cl9zZWN1cml0eV9oYW5kbGVyID0gewogCS5wcmVmaXggPSBYQVRUUl9TRUNVUklUWV9QUkVGSVgsCiAJLmdldCA9IHNlY3VyaXR5X2dldCwKIAkuc2V0ID0gc2VjdXJpdHlfc2V0LAotCS5kZWwgPSBzZWN1cml0eV9kZWwsCiAJLmxpc3QgPSBzZWN1cml0eV9saXN0LAogfTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyX3RydXN0ZWQuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyX3RydXN0ZWQuYwppbmRleCA2MGFiZTJiLi5hODY1MDQyIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy94YXR0cl90cnVzdGVkLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHJfdHJ1c3RlZC5jCkBAIC0xMywxMCArMTMsNyBAQAogCWlmIChzdHJsZW4obmFtZSkgPCBzaXplb2YoWEFUVFJfVFJVU1RFRF9QUkVGSVgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghcmVpc2VyZnNfeGF0dHJzKGlub2RlLT5pX3NiKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKCEoY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCBpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkpKQorCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCBJU19QUklWQVRFKGlub2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAogCXJldHVybiByZWlzZXJmc194YXR0cl9nZXQoaW5vZGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7CkBAIC0yOSw1MCArMjYsMzAgQEAKIAlpZiAoc3RybGVuKG5hbWUpIDwgc2l6ZW9mKFhBVFRSX1RSVVNURURfUFJFRklYKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIXJlaXNlcmZzX3hhdHRycyhpbm9kZS0+aV9zYikpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCWlmICghKGNhcGFibGUoQ0FQX1NZU19BRE1JTikgfHwgaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpKSkKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgfHwgSVNfUFJJVkFURShpbm9kZSkpCiAJCXJldHVybiAtRVBFUk07CiAKIAlyZXR1cm4gcmVpc2VyZnNfeGF0dHJfc2V0KGlub2RlLCBuYW1lLCBidWZmZXIsIHNpemUsIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCB0cnVzdGVkX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIHNpemVfdCB0cnVzdGVkX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKKwkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbikKIHsKLQlpZiAoc3RybGVuKG5hbWUpIDwgc2l6ZW9mKFhBVFRSX1RSVVNURURfUFJFRklYKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJY29uc3Qgc2l6ZV90IGxlbiA9IG5hbWVfbGVuICsgMTsKIAotCWlmICghcmVpc2VyZnNfeGF0dHJzKGlub2RlLT5pX3NiKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKCEoY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCBpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkpKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXRydXN0ZWRfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgY2hhciAqb3V0KQotewotCWludCBsZW4gPSBuYW1lbGVuOwotCi0JaWYgKCFyZWlzZXJmc194YXR0cnMoaW5vZGUtPmlfc2IpKQorCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCBJU19QUklWQVRFKGlub2RlKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIShjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8IGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGlub2RlKSkpCi0JCXJldHVybiAwOwotCi0JaWYgKG91dCkKLQkJbWVtY3B5KG91dCwgbmFtZSwgbGVuKTsKLQorCWlmIChsaXN0ICYmIGxlbiA8PSBsaXN0X3NpemUpIHsKKwkJbWVtY3B5KGxpc3QsIG5hbWUsIG5hbWVfbGVuKTsKKwkJbGlzdFtuYW1lX2xlbl0gPSAnXDAnOworCX0KIAlyZXR1cm4gbGVuOwogfQogCi1zdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciB0cnVzdGVkX2hhbmRsZXIgPSB7CitzdHJ1Y3QgeGF0dHJfaGFuZGxlciByZWlzZXJmc194YXR0cl90cnVzdGVkX2hhbmRsZXIgPSB7CiAJLnByZWZpeCA9IFhBVFRSX1RSVVNURURfUFJFRklYLAogCS5nZXQgPSB0cnVzdGVkX2dldCwKIAkuc2V0ID0gdHJ1c3RlZF9zZXQsCi0JLmRlbCA9IHRydXN0ZWRfZGVsLAogCS5saXN0ID0gdHJ1c3RlZF9saXN0LAogfTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyX3VzZXIuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyX3VzZXIuYwppbmRleCAxMzg0ZWZjLi5lMzIzOGRjIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy94YXR0cl91c2VyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHJfdXNlci5jCkBAIC02LDEwICs2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9yZWlzZXJmc194YXR0ci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMCi0jIGluY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX2FjbC5oPgotI2VuZGlmCi0KIHN0YXRpYyBpbnQKIHVzZXJfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCiB7CkBAIC0yNSw3ICsyMSw2IEBACiB1c2VyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCiAJIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7Ci0KIAlpZiAoc3RybGVuKG5hbWUpIDwgc2l6ZW9mKFhBVFRSX1VTRVJfUFJFRklYKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTM0LDMzICsyOSwyMyBAQAogCXJldHVybiByZWlzZXJmc194YXR0cl9zZXQoaW5vZGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IHVzZXJfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgc2l6ZV90IHVzZXJfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAorCQkJY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQogewotCWlmIChzdHJsZW4obmFtZSkgPCBzaXplb2YoWEFUVFJfVVNFUl9QUkVGSVgpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwljb25zdCBzaXplX3QgbGVuID0gbmFtZV9sZW4gKyAxOwogCiAJaWYgKCFyZWlzZXJmc194YXR0cnNfdXNlcihpbm9kZS0+aV9zYikpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotdXNlcl9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBjaGFyICpvdXQpCi17Ci0JaW50IGxlbiA9IG5hbWVsZW47Ci0JaWYgKCFyZWlzZXJmc194YXR0cnNfdXNlcihpbm9kZS0+aV9zYikpCiAJCXJldHVybiAwOwotCi0JaWYgKG91dCkKLQkJbWVtY3B5KG91dCwgbmFtZSwgbGVuKTsKLQorCWlmIChsaXN0ICYmIGxlbiA8PSBsaXN0X3NpemUpIHsKKwkJbWVtY3B5KGxpc3QsIG5hbWUsIG5hbWVfbGVuKTsKKwkJbGlzdFtuYW1lX2xlbl0gPSAnXDAnOworCX0KIAlyZXR1cm4gbGVuOwogfQogCi1zdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciB1c2VyX2hhbmRsZXIgPSB7CitzdHJ1Y3QgeGF0dHJfaGFuZGxlciByZWlzZXJmc194YXR0cl91c2VyX2hhbmRsZXIgPSB7CiAJLnByZWZpeCA9IFhBVFRSX1VTRVJfUFJFRklYLAogCS5nZXQgPSB1c2VyX2dldCwKIAkuc2V0ID0gdXNlcl9zZXQsCi0JLmRlbCA9IHVzZXJfZGVsLAogCS5saXN0ID0gdXNlcl9saXN0LAogfTsKZGlmZiAtLWdpdCBhL2ZzL3NlcV9maWxlLmMgYi9mcy9zZXFfZmlsZS5jCmluZGV4IGExYTRjZmUuLjdmNDBmMzAgMTAwNjQ0Ci0tLSBhL2ZzL3NlcV9maWxlLmMKKysrIGIvZnMvc2VxX2ZpbGUuYwpAQCAtNTEzLDcgKzUxMyw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNlcV9iaXRtYXApOwogCi1pbnQgc2VxX2JpdG1hcF9saXN0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5zaWduZWQgbG9uZyAqYml0cywKK2ludCBzZXFfYml0bWFwX2xpc3Qoc3RydWN0IHNlcV9maWxlICptLCBjb25zdCB1bnNpZ25lZCBsb25nICpiaXRzLAogCQl1bnNpZ25lZCBpbnQgbnJfYml0cykKIHsKIAlpZiAobS0+Y291bnQgPCBtLT5zaXplKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3RvcG9sb2d5LmgKaW5kZXggMGU5ZTJiYy4uODhiYWRhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90b3BvbG9neS5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdG9wb2xvZ3kuaApAQCAtNDMsMjAgKzQzLDEwIEBACiAjaWZuZGVmIGNwdW1hc2tfb2Zfbm9kZQogI2RlZmluZSBjcHVtYXNrX29mX25vZGUobm9kZSkJKCh2b2lkKW5vZGUsIGNwdV9vbmxpbmVfbWFzaykKICNlbmRpZgotI2lmbmRlZiBub2RlX3RvX2ZpcnN0X2NwdQotI2RlZmluZSBub2RlX3RvX2ZpcnN0X2NwdShub2RlKQkoKHZvaWQpKG5vZGUpLDApCi0jZW5kaWYKICNpZm5kZWYgcGNpYnVzX3RvX25vZGUKICNkZWZpbmUgcGNpYnVzX3RvX25vZGUoYnVzKQkoKHZvaWQpKGJ1cyksIC0xKQogI2VuZGlmCiAKLSNpZm5kZWYgcGNpYnVzX3RvX2NwdW1hc2sKLSNkZWZpbmUgcGNpYnVzX3RvX2NwdW1hc2soYnVzKQkocGNpYnVzX3RvX25vZGUoYnVzKSA9PSAtMSA/IFwKLQkJCQkJQ1BVX01BU0tfQUxMIDogXAotCQkJCQlub2RlX3RvX2NwdW1hc2socGNpYnVzX3RvX25vZGUoYnVzKSkgXAotCQkJCSkKLSNlbmRpZgotCiAjaWZuZGVmIGNwdW1hc2tfb2ZfcGNpYnVzCiAjZGVmaW5lIGNwdW1hc2tfb2ZfcGNpYnVzKGJ1cykJKHBjaWJ1c190b19ub2RlKGJ1cykgPT0gLTEgPwkJXAogCQkJCSBjcHVfYWxsX21hc2sgOgkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2RybS9kcm1QLmgKaW5kZXggYzE5YTkzYy4uYzhjNDIyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtUC5oCisrKyBiL2luY2x1ZGUvZHJtL2RybVAuaApAQCAtMjgxLDE2ICsyODEsMTYgQEAKIAogc3RydWN0IGRybV9pb2N0bF9kZXNjIHsKIAl1bnNpZ25lZCBpbnQgY21kOwotCWRybV9pb2N0bF90ICpmdW5jOwogCWludCBmbGFnczsKKwlkcm1faW9jdGxfdCAqZnVuYzsKIH07CiAKIC8qKgogICogQ3JlYXRlcyBhIGRyaXZlciBvciBnZW5lcmFsIGRybV9pb2N0bF9kZXNjIGFycmF5IGVudHJ5IGZvciB0aGUgZ2l2ZW4KICAqIGlvY3RsLCBmb3IgdXNlIGJ5IGRybV9pb2N0bCgpLgogICovCi0jZGVmaW5lIERSTV9JT0NUTF9ERUYoaW9jdGwsIGZ1bmMsIGZsYWdzKSBcCi0JW0RSTV9JT0NUTF9OUihpb2N0bCldID0ge2lvY3RsLCBmdW5jLCBmbGFnc30KKyNkZWZpbmUgRFJNX0lPQ1RMX0RFRihpb2N0bCwgX2Z1bmMsIF9mbGFncykgXAorCVtEUk1fSU9DVExfTlIoaW9jdGwpXSA9IHsuY21kID0gaW9jdGwsIC5mdW5jID0gX2Z1bmMsIC5mbGFncyA9IF9mbGFnc30KIAogc3RydWN0IGRybV9tYWdpY19lbnRyeSB7CiAJc3RydWN0IGxpc3RfaGVhZCBoZWFkOwpAQCAtNTIzLDE5ICs1MjMsMzIgQEAKIAogCiAvKioKKyAqIEtlcm5lbCBzaWRlIG9mIGEgbWFwcGluZworICovCitzdHJ1Y3QgZHJtX2xvY2FsX21hcCB7CisJcmVzb3VyY2Vfc2l6ZV90IG9mZnNldDsJIC8qKjwgUmVxdWVzdGVkIHBoeXNpY2FsIGFkZHJlc3MgKDAgZm9yIFNBUkVBKSovCisJdW5zaWduZWQgbG9uZyBzaXplOwkgLyoqPCBSZXF1ZXN0ZWQgcGh5c2ljYWwgc2l6ZSAoYnl0ZXMpICovCisJZW51bSBkcm1fbWFwX3R5cGUgdHlwZTsJIC8qKjwgVHlwZSBvZiBtZW1vcnkgdG8gbWFwICovCisJZW51bSBkcm1fbWFwX2ZsYWdzIGZsYWdzOwkgLyoqPCBGbGFncyAqLworCXZvaWQgKmhhbmRsZTsJCSAvKio8IFVzZXItc3BhY2U6ICJIYW5kbGUiIHRvIHBhc3MgdG8gbW1hcCgpICovCisJCQkJIC8qKjwgS2VybmVsLXNwYWNlOiBrZXJuZWwtdmlydHVhbCBhZGRyZXNzICovCisJaW50IG10cnI7CQkgLyoqPCBNVFJSIHNsb3QgdXNlZCAqLworfTsKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX2xvY2FsX21hcCBkcm1fbG9jYWxfbWFwX3Q7CisKKy8qKgogICogTWFwcGluZ3MgbGlzdAogICovCiBzdHJ1Y3QgZHJtX21hcF9saXN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CQkvKio8IGxpc3QgaGVhZCAqLwogCXN0cnVjdCBkcm1faGFzaF9pdGVtIGhhc2g7Ci0Jc3RydWN0IGRybV9tYXAgKm1hcDsJCQkvKio8IG1hcHBpbmcgKi8KKwlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwOwkvKio8IG1hcHBpbmcgKi8KIAl1aW50NjRfdCB1c2VyX3Rva2VuOwogCXN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXI7CiAJc3RydWN0IGRybV9tbV9ub2RlICpmaWxlX29mZnNldF9ub2RlOwkvKio8IGZha2Ugb2Zmc2V0ICovCiB9OwogCi10eXBlZGVmIHN0cnVjdCBkcm1fbWFwIGRybV9sb2NhbF9tYXBfdDsKLQogLyoqCiAgKiBDb250ZXh0IGhhbmRsZSBsaXN0CiAgKi8KQEAgLTU2MCw3ICs1NzMsNyBAQAogCWRtYV9hZGRyX3QgYnVzX2FkZHI7CiAJZG1hX2FkZHJfdCB0YWJsZV9tYXNrOwogCXN0cnVjdCBkcm1fZG1hX2hhbmRsZSAqdGFibGVfaGFuZGxlOwotCWRybV9sb2NhbF9tYXBfdCBtYXBwaW5nOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwIG1hcHBpbmc7CiAJaW50IHRhYmxlX3NpemU7CiB9OwogCkBAIC02NzUsNyArNjg4LDYgQEAKIAlpbnQgKCprZXJuZWxfY29udGV4dF9zd2l0Y2gpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgb2xkLAogCQkJCSAgICAgIGludCBuZXcpOwogCXZvaWQgKCprZXJuZWxfY29udGV4dF9zd2l0Y2hfdW5sb2NrKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci0JaW50ICgqZHJpX2xpYnJhcnlfbmFtZSkgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGNoYXIgKmJ1Zik7CiAKIAkvKioKIAkgKiBnZXRfdmJsYW5rX2NvdW50ZXIgLSBnZXQgcmF3IGhhcmR3YXJlIHZibGFuayBjb3VudGVyCkBAIC03NDcsOCArNzU5LDggQEAKIAkJCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogCXZvaWQgKCpyZWNsYWltX2J1ZmZlcnNfaWRsZWxvY2tlZCkgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Ci0JdW5zaWduZWQgbG9uZyAoKmdldF9tYXBfb2ZzKSAoc3RydWN0IGRybV9tYXAgKiBtYXApOwotCXVuc2lnbmVkIGxvbmcgKCpnZXRfcmVnX29mcykgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCXJlc291cmNlX3NpemVfdCAoKmdldF9tYXBfb2ZzKSAoc3RydWN0IGRybV9sb2NhbF9tYXAgKiBtYXApOworCXJlc291cmNlX3NpemVfdCAoKmdldF9yZWdfb2ZzKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAJdm9pZCAoKnNldF92ZXJzaW9uKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCSAgICAgc3RydWN0IGRybV9zZXRfdmVyc2lvbiAqc3YpOwogCkBAIC05ODEsNyArOTkzLDcgQEAKIAlzaWdzZXRfdCBzaWdtYXNrOwogCiAJc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlcjsKLQlkcm1fbG9jYWxfbWFwX3QgKmFncF9idWZmZXJfbWFwOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICphZ3BfYnVmZmVyX21hcDsKIAl1bnNpZ25lZCBpbnQgYWdwX2J1ZmZlcl90b2tlbjsKIAlzdHJ1Y3QgZHJtX21pbm9yICpjb250cm9sOwkJLyoqPCBDb250cm9sIG5vZGUgZm9yIGNhcmQgKi8KIAlzdHJ1Y3QgZHJtX21pbm9yICpwcmltYXJ5OwkJLyoqPCByZW5kZXIgdHlwZSBwcmltYXJ5IHNjcmVlbiBoZWFkICovCkBAIC0xMDk4LDggKzExMTAsOCBAQAogZXh0ZXJuIGludCBkcm1fbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogZXh0ZXJuIGludCBkcm1fbW1hcF9sb2NrZWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIGV4dGVybiB2b2lkIGRybV92bV9vcGVuX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBkcm1fY29yZV9nZXRfbWFwX29mcyhzdHJ1Y3QgZHJtX21hcCAqIG1hcCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBkcm1fY29yZV9nZXRfcmVnX29mcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiByZXNvdXJjZV9zaXplX3QgZHJtX2NvcmVfZ2V0X21hcF9vZnMoc3RydWN0IGRybV9sb2NhbF9tYXAgKiBtYXApOworZXh0ZXJuIHJlc291cmNlX3NpemVfdCBkcm1fY29yZV9nZXRfcmVnX29mcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZHJtX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCk7CiAKIAkJCQkvKiBNZW1vcnkgbWFuYWdlbWVudCBzdXBwb3J0IChkcm1fbWVtb3J5LmgpICovCkBAIC0xMjAyLDEzICsxMjE0LDEzIEBACiAJCQkJLyogQnVmZmVyIG1hbmFnZW1lbnQgc3VwcG9ydCAoZHJtX2J1ZnMuaCkgKi8KIGV4dGVybiBpbnQgZHJtX2FkZGJ1ZnNfYWdwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYnVmX2Rlc2MgKiByZXF1ZXN0KTsKIGV4dGVybiBpbnQgZHJtX2FkZGJ1ZnNfcGNpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYnVmX2Rlc2MgKiByZXF1ZXN0KTsKLWV4dGVybiBpbnQgZHJtX2FkZG1hcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorZXh0ZXJuIGludCBkcm1fYWRkbWFwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHJlc291cmNlX3NpemVfdCBvZmZzZXQsCiAJCSAgICAgIHVuc2lnbmVkIGludCBzaXplLCBlbnVtIGRybV9tYXBfdHlwZSB0eXBlLAotCQkgICAgICBlbnVtIGRybV9tYXBfZmxhZ3MgZmxhZ3MsIGRybV9sb2NhbF9tYXBfdCAqKiBtYXBfcHRyKTsKKwkJICAgICAgZW51bSBkcm1fbWFwX2ZsYWdzIGZsYWdzLCBzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqKm1hcF9wdHIpOwogZXh0ZXJuIGludCBkcm1fYWRkbWFwX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotZXh0ZXJuIGludCBkcm1fcm1tYXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZHJtX2xvY2FsX21hcF90ICptYXApOwotZXh0ZXJuIGludCBkcm1fcm1tYXBfbG9ja2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGRybV9sb2NhbF9tYXBfdCAqbWFwKTsKK2V4dGVybiBpbnQgZHJtX3JtbWFwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXApOworZXh0ZXJuIGludCBkcm1fcm1tYXBfbG9ja2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXApOwogZXh0ZXJuIGludCBkcm1fcm1tYXBfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpbnQgZHJtX2FkZGJ1ZnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKQEAgLTEyMjIsMTAgKzEyMzQsMTAgQEAKIGV4dGVybiBpbnQgZHJtX21hcGJ1ZnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpbnQgZHJtX29yZGVyKHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCitleHRlcm4gcmVzb3VyY2Vfc2l6ZV90IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IHJlc291cmNlKTsKK2V4dGVybiByZXNvdXJjZV9zaXplX3QgZHJtX2dldF9yZXNvdXJjZV9sZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkJICAgIHVuc2lnbmVkIGludCByZXNvdXJjZSk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBkcm1fZ2V0X3Jlc291cmNlX2xlbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCQkgIHVuc2lnbmVkIGludCByZXNvdXJjZSk7CiAKIAkJCQkvKiBETUEgc3VwcG9ydCAoZHJtX2RtYS5oKSAqLwogZXh0ZXJuIGludCBkcm1fZG1hX3NldHVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwpAQCAtMTMwMSw3ICsxMzEzLDcgQEAKIGV4dGVybiB2b2lkIGRybV9tYXN0ZXJfcHV0KHN0cnVjdCBkcm1fbWFzdGVyICoqbWFzdGVyKTsKIGV4dGVybiBpbnQgZHJtX2dldF9kZXYoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQsCiAJCSAgICAgICBzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyKTsKLWV4dGVybiBpbnQgZHJtX3B1dF9kZXYoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBkcm1fcHV0X2RldihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgZHJtX3B1dF9taW5vcihzdHJ1Y3QgZHJtX21pbm9yICoqbWlub3IpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBkcm1fZGVidWc7CiAKQEAgLTEzMTEsNyArMTMyMyw3IEBACiAKIGV4dGVybiBzdHJ1Y3QgaWRyIGRybV9taW5vcnNfaWRyOwogCi1leHRlcm4gZHJtX2xvY2FsX21hcF90ICpkcm1fZ2V0c2FyZWEoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gc3RydWN0IGRybV9sb2NhbF9tYXAgKmRybV9nZXRzYXJlYShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAogCQkJCS8qIFByb2Mgc3VwcG9ydCAoZHJtX3Byb2MuaCkgKi8KIGV4dGVybiBpbnQgZHJtX3Byb2NfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vciwgaW50IG1pbm9yX2lkLApAQCAtMTQ1MywxMiArMTQ2NSwxMiBAQAogdm9pZCBkcm1fZ2VtX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpOwogdm9pZCBkcm1fZ2VtX3JlbGVhc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpOwogCi1leHRlcm4gdm9pZCBkcm1fY29yZV9pb3JlbWFwKHN0cnVjdCBkcm1fbWFwICptYXAsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgZHJtX2NvcmVfaW9yZW1hcF93YyhzdHJ1Y3QgZHJtX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLWV4dGVybiB2b2lkIGRybV9jb3JlX2lvcmVtYXBmcmVlKHN0cnVjdCBkcm1fbWFwICptYXAsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgZHJtX2NvcmVfaW9yZW1hcChzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGRybV9jb3JlX2lvcmVtYXBfd2Moc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBkcm1fY29yZV9pb3JlbWFwZnJlZShzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAotc3RhdGljIF9faW5saW5lX18gc3RydWN0IGRybV9tYXAgKmRybV9jb3JlX2ZpbmRtYXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQkJCSAgIHVuc2lnbmVkIGludCB0b2tlbikKK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBkcm1fbG9jYWxfbWFwICpkcm1fY29yZV9maW5kbWFwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCQkJIHVuc2lnbmVkIGludCB0b2tlbikKIHsKIAlzdHJ1Y3QgZHJtX21hcF9saXN0ICpfZW50cnk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShfZW50cnksICZkZXYtPm1hcGxpc3QsIGhlYWQpCkBAIC0xNDg1LDcgKzE0OTcsNyBAQAogCXJldHVybiBwY2lfZmluZF9jYXBhYmlsaXR5KGRldi0+cGRldiwgUENJX0NBUF9JRF9FWFApOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRybV9jb3JlX2Ryb3BtYXAoc3RydWN0IGRybV9tYXAgKm1hcCkKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgZHJtX2NvcmVfZHJvcG1hcChzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwKQogewogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAppbmRleCA1ZGVkMWFjLi4zYzE5MjRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKQEAgLTU1MCw3ICs1NTAsNyBAQAogCWludCBtaW5fd2lkdGgsIG1pbl9oZWlnaHQ7CiAJaW50IG1heF93aWR0aCwgbWF4X2hlaWdodDsKIAlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzICpmdW5jczsKLQl1bnNpZ25lZCBsb25nIGZiX2Jhc2U7CisJcmVzb3VyY2Vfc2l6ZV90IGZiX2Jhc2U7CiAKIAkvKiBwb2ludGVycyB0byBzdGFuZGFyZCBwcm9wZXJ0aWVzICovCiAJc3RydWN0IGxpc3RfaGVhZCBwcm9wZXJ0eV9ibG9iX2xpc3Q7CkBAIC02MTMsNyArNjEzLDggQEAKIGV4dGVybiBpbnQgZHJtX21vZGVfZ3JvdXBfaW5pdF9sZWdhY3lfZ3JvdXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9tb2RlX2dyb3VwICpncm91cCk7CiBleHRlcm4gc3RydWN0IGVkaWQgKmRybV9nZXRfZWRpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJCSBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOwotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKmRybV9kb19wcm9iZV9kZGNfZWRpZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIGludCBkcm1fZG9fcHJvYmVfZGRjX2VkaWQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJCSB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pOwogZXh0ZXJuIGludCBkcm1fYWRkX2VkaWRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGVkaWQgKmVkaWQpOwogZXh0ZXJuIHZvaWQgZHJtX21vZGVfcHJvYmVkX2FkZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CiBleHRlcm4gdm9pZCBkcm1fbW9kZV9yZW1vdmUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOwpAQCAtNzMxLDQgKzczMiw1IEBACiAJCQkJICAgIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpbnQgZHJtX21vZGVfZ2FtbWFfc2V0X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiBib29sIGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKHN0cnVjdCBlZGlkICplZGlkKTsKICNlbmRpZiAvKiBfX0RSTV9DUlRDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX29zX2xpbnV4LmggYi9pbmNsdWRlL2RybS9kcm1fb3NfbGludXguaAppbmRleCA4ZGJkMjU3Li4wMTM1NTFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fb3NfbGludXguaAorKysgYi9pbmNsdWRlL2RybS9kcm1fb3NfbGludXguaApAQCAtNiw2ICs2LDE5IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CS8qIEZvciB0YXNrIHF1ZXVlIHN1cHBvcnQgKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCisjaWZuZGVmIHJlYWRxCitzdGF0aWMgdTY0IHJlYWRxKHZvaWQgX19pb21lbSAqcmVnKQoreworCXJldHVybiAoKHU2NCkgcmVhZGwocmVnKSkgfCAoKCh1NjQpIHJlYWRsKHJlZyArIDRVTCkpIDw8IDMyKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVxKHU2NCB2YWwsIHZvaWQgX19pb21lbSAqcmVnKQoreworCXdyaXRlbCh2YWwgJiAweGZmZmZmZmZmLCByZWcpOworCXdyaXRlbCh2YWwgPj4gMzIsIHJlZyArIDB4NFVMKTsKK30KKyNlbmRpZgorCiAvKiogQ3VycmVudCBwcm9jZXNzIElEICovCiAjZGVmaW5lIERSTV9DVVJSRU5UUElECQkJdGFza19waWRfbnIoY3VycmVudCkKICNkZWZpbmUgRFJNX1NVU0VSKHApCQkJY2FwYWJsZShDQVBfU1lTX0FETUlOKQpAQCAtMjMsNiArMzYsMTIgQEAKIC8qKiBXcml0ZSBhIGR3b3JkIGludG8gYSBNTUlPIHJlZ2lvbiAqLwogI2RlZmluZSBEUk1fV1JJVEUzMihtYXAsIG9mZnNldCwgdmFsKQl3cml0ZWwodmFsLCAoKHZvaWQgX19pb21lbSAqKShtYXApLT5oYW5kbGUpICsgKG9mZnNldCkpCiAvKiogUmVhZCBtZW1vcnkgYmFycmllciAqLworCisvKiogUmVhZCBhIHF3b3JkIGZyb20gYSBNTUlPIHJlZ2lvbiAtIGJlIGNhcmVmdWwgdXNpbmcgdGhlc2UgdW5sZXNzIHlvdSByZWFsbHkgdW5kZXJzdGFuZCB0aGVtICovCisjZGVmaW5lIERSTV9SRUFENjQobWFwLCBvZmZzZXQpCQlyZWFkcSgoKHZvaWQgX19pb21lbSAqKShtYXApLT5oYW5kbGUpICsgKG9mZnNldCkpCisvKiogV3JpdGUgYSBxd29yZCBpbnRvIGEgTU1JTyByZWdpb24gKi8KKyNkZWZpbmUgRFJNX1dSSVRFNjQobWFwLCBvZmZzZXQsIHZhbCkJd3JpdGVxKHZhbCwgKCh2b2lkIF9faW9tZW0gKikobWFwKS0+aGFuZGxlKSArIChvZmZzZXQpKQorCiAjZGVmaW5lIERSTV9SRUFETUVNT1JZQkFSUklFUigpCQlybWIoKQogLyoqIFdyaXRlIG1lbW9yeSBiYXJyaWVyICovCiAjZGVmaW5lIERSTV9XUklURU1FTU9SWUJBUlJJRVIoKQl3bWIoKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCmluZGV4IDc2YzRjODIuLjJkZjc0ZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKQEAgLTIzOSwxMCArMjM5LDEyMyBAQAogCXsweDEwMDIsIDB4NzgzNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzMwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDc5MWUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM2OTB8UkFERU9OX0lTX0lHUHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQR0FSVH0sIFwKIAl7MHgxMDAyLCAweDc5MWYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM2OTB8UkFERU9OX0lTX0lHUHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQR0FSVH0sIFwKKwl7MHgxMDAyLCAweDc5M2YsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM2MDB8UkFERU9OX0lTX0lHUHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDc5NDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM2MDB8UkFERU9OX0lTX0lHUHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDc5NDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM2MDB8UkFERU9OX0lTX0lHUHxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDc5NmMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3NDB8UkFERU9OX0lTX0lHUHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQR0FSVH0sIFwKIAl7MHgxMDAyLCAweDc5NmQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3NDB8UkFERU9OX0lTX0lHUHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQR0FSVH0sIFwKIAl7MHgxMDAyLCAweDc5NmUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3NDB8UkFERU9OX0lTX0lHUHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQR0FSVH0sIFwKIAl7MHgxMDAyLCAweDc5NmYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3NDB8UkFERU9OX0lTX0lHUHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQR0FSVH0sIFwKKwl7MHgxMDAyLCAweDk0MDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjYwMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0MDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjYwMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0MDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjYwMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0MDMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjYwMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0MDUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjYwMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0MEEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjYwMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0MEIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjYwMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0MEYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjYwMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0NDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDQxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ0MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0NDQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDQ2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ0QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDRCLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0NEMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDRFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0NTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDU2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ1QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDVCLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0NkEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ2QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDdBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0N0IsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ4MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjczMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDg3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzMwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ4OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjczMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDg5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzMwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0OEYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDkwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzMwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ5MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjczMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDk4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzMwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ5QywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjczMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0OUUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDlGLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzMwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTRDMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0QzEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NEMzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTRDNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0QzUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NEM2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTRDNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0QzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MTB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTRDOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYxMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NENCLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjEwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0Q0MsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NENELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTUwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjY3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1MDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTA0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjcwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1MDUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTA2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjcwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1MDcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTA4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjcwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1MDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2NzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTUwRiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjY3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1MTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTE1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTUxNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjY3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1MTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU0MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjcxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1NDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTRFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU0RiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjcxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1NTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MTB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU1MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjcxMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTU1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzEwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1ODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTgxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjMwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1ODMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU4NiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1ODcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTg4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjMwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU4OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1OEEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NThCLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjMwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1OEMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NThELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjMwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU4RSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1OEYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU5MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzNXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1OTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzV8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU5MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzNXxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTk1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjM1fFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1OTYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzV8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTk3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjM1fFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU5OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzNXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1OTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzV8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTlCLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjM1fFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1QzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NUM1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTVDNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1QzcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NUM5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTVDMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYyMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NUM0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjIwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1Q0MsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NUNELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTVDRSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1Q0YsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NjEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzgwfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5NjExLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzgwfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5NjEyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzgwfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5NjEzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzgwfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5NjE0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzgwfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5NjE1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzgwfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5NjE2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzgwfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCiAJezAsIDAsIDB9CiAKICNkZWZpbmUgcjEyOF9QQ0lfSURTIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaCBiL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAppbmRleCA3MmVjZjY3Li5mZTNlM2E0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCkBAIC0zMDYsNiArMzA2LDggQEAKIAogI2RlZmluZSBSQURFT05fU0NSQVRDSF9SRUdfT0ZGU0VUCTMyCiAKKyNkZWZpbmUgUjYwMF9TQ1JBVENIX1JFR19PRkZTRVQgICAgICAgICAyNTYKKwogI2RlZmluZSBSQURFT05fTlJfU0FSRUFfQ0xJUFJFQ1RTCTEyCiAKIC8qIFRoZXJlIGFyZSAyIGhlYXBzIChsb2NhbC9HQVJUKS4gIEVhY2ggcmVnaW9uIHdpdGhpbiBhIGhlYXAgaXMgYQpAQCAtNTI4LDcgKzUzMCw4IEBACiAJCVJBREVPTl9JTklUX0NQID0gMHgwMSwKIAkJUkFERU9OX0NMRUFOVVBfQ1AgPSAweDAyLAogCQlSQURFT05fSU5JVF9SMjAwX0NQID0gMHgwMywKLQkJUkFERU9OX0lOSVRfUjMwMF9DUCA9IDB4MDQKKwkJUkFERU9OX0lOSVRfUjMwMF9DUCA9IDB4MDQsCisJCVJBREVPTl9JTklUX1I2MDBfQ1AgPSAweDA1CiAJfSBmdW5jOwogCXVuc2lnbmVkIGxvbmcgc2FyZWFfcHJpdl9vZmZzZXQ7CiAJaW50IGlzX3BjaTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKaW5kZXggZTk1ODFmZC4uYTY3YjYyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKQEAgLTE1OCw4ICsxNTgsNiBAQAogaGVhZGVyLXkgKz0gdW4uaAogaGVhZGVyLXkgKz0gdXRpbWUuaAogaGVhZGVyLXkgKz0gdmV0aC5oCi1oZWFkZXIteSArPSB2aWRlb19kZWNvZGVyLmgKLWhlYWRlci15ICs9IHZpZGVvX2VuY29kZXIuaAogaGVhZGVyLXkgKz0gdmlkZW90ZXh0LmgKIGhlYWRlci15ICs9IHgyNS5oCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1c2V0LmggYi9pbmNsdWRlL2xpbnV4L2NwdXNldC5oCmluZGV4IDkwYzYwNzQuLjJlMGQ3OTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1c2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVzZXQuaApAQCAtOTAsMTIgKzkwLDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1c2V0X2NwdXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCQkJICAgICAgIHN0cnVjdCBjcHVtYXNrICptYXNrKQogewotCSptYXNrID0gY3B1X3Bvc3NpYmxlX21hcDsKKwljcHVtYXNrX2NvcHkobWFzaywgY3B1X3Bvc3NpYmxlX21hc2spOwogfQogc3RhdGljIGlubGluZSB2b2lkIGNwdXNldF9jcHVzX2FsbG93ZWRfbG9ja2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJCQkJICAgICAgc3RydWN0IGNwdW1hc2sgKm1hc2spCiB7Ci0JKm1hc2sgPSBjcHVfcG9zc2libGVfbWFwOworCWNwdW1hc2tfY29weShtYXNrLCBjcHVfcG9zc2libGVfbWFzayk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgbm9kZW1hc2tfdCBjcHVzZXRfbWVtc19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLWRlYnVnLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZDUzY2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2RtYS1kZWJ1Zy5oCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBBdXRob3I6IEpvZXJnIFJvZWRlbCA8am9lcmcucm9lZGVsQGFtZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0RNQV9ERUJVR19ICisjZGVmaW5lIF9fRE1BX0RFQlVHX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBkZXZpY2U7CitzdHJ1Y3Qgc2NhdHRlcmxpc3Q7CitzdHJ1Y3QgYnVzX3R5cGU7CisKKyNpZmRlZiBDT05GSUdfRE1BX0FQSV9ERUJVRworCitleHRlcm4gdm9pZCBkbWFfZGVidWdfYWRkX2J1cyhzdHJ1Y3QgYnVzX3R5cGUgKmJ1cyk7CisKK2V4dGVybiB2b2lkIGRtYV9kZWJ1Z19pbml0KHUzMiBudW1fZW50cmllcyk7CisKK2V4dGVybiB2b2lkIGRlYnVnX2RtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJICAgICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJICAgICAgIGludCBkaXJlY3Rpb24sIGRtYV9hZGRyX3QgZG1hX2FkZHIsCisJCQkgICAgICAgYm9vbCBtYXBfc2luZ2xlKTsKKworZXh0ZXJuIHZvaWQgZGVidWdfZG1hX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsCisJCQkJIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uLCBib29sIG1hcF9zaW5nbGUpOworCitleHRlcm4gdm9pZCBkZWJ1Z19kbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSAgICAgaW50IG5lbnRzLCBpbnQgbWFwcGVkX2VudHMsIGludCBkaXJlY3Rpb24pOworCitleHRlcm4gdm9pZCBkZWJ1Z19kbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKKwkJCSAgICAgICBpbnQgbmVsZW1zLCBpbnQgZGlyKTsKKworZXh0ZXJuIHZvaWQgZGVidWdfZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJICAgICBkbWFfYWRkcl90IGRtYV9hZGRyLCB2b2lkICp2aXJ0KTsKKworZXh0ZXJuIHZvaWQgZGVidWdfZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgdm9pZCAqdmlydCwgZG1hX2FkZHJfdCBhZGRyKTsKKworZXh0ZXJuIHZvaWQgZGVidWdfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCisJCQkJCSAgaW50IGRpcmVjdGlvbik7CisKK2V4dGVybiB2b2lkIGRlYnVnX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCSAgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOworCitleHRlcm4gdm9pZCBkZWJ1Z19kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJCXNpemVfdCBzaXplLAorCQkJCQkJaW50IGRpcmVjdGlvbik7CisKK2V4dGVybiB2b2lkIGRlYnVnX2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCSAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCQkJICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOworCitleHRlcm4gdm9pZCBkZWJ1Z19kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCSAgICAgIGludCBuZWxlbXMsIGludCBkaXJlY3Rpb24pOworCitleHRlcm4gdm9pZCBkZWJ1Z19kbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJCSBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKTsKKworZXh0ZXJuIHZvaWQgZGVidWdfZG1hX2R1bXBfbWFwcGluZ3Moc3RydWN0IGRldmljZSAqZGV2KTsKKworI2Vsc2UgLyogQ09ORklHX0RNQV9BUElfREVCVUcgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9kZWJ1Z19hZGRfYnVzKHN0cnVjdCBidXNfdHlwZSAqYnVzKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2RlYnVnX2luaXQodTMyIG51bV9lbnRyaWVzKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICAgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJICAgICAgaW50IGRpcmVjdGlvbiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKKwkJCQkgICAgICBib29sIG1hcF9zaW5nbGUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19kbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwKKwkJCQkJc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24sCisJCQkJCWJvb2wgbWFwX3NpbmdsZSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2RtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCSAgICBpbnQgbmVudHMsIGludCBtYXBwZWRfZW50cywgaW50IGRpcmVjdGlvbikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2RtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCisJCQkJICAgICAgaW50IG5lbGVtcywgaW50IGRpcikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2RtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCQkgICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgdm9pZCAqdmlydCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2RtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJCSAgIHZvaWQgKnZpcnQsIGRtYV9hZGRyX3QgYWRkcikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCSBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCQkgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQkgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCQkJICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJICAgICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJCSAgICAgICBzaXplX3Qgc2l6ZSwKKwkJCQkJCSAgICAgICBpbnQgZGlyZWN0aW9uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJCSAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCQkJCSAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCQkJICBzaXplX3Qgc2l6ZSwKKwkJCQkJCQkgIGludCBkaXJlY3Rpb24pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCQkgICAgIGludCBuZWxlbXMsIGludCBkaXJlY3Rpb24pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19kbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJCQlpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfZG1hX2R1bXBfbWFwcGluZ3Moc3RydWN0IGRldmljZSAqZGV2KQoreworfQorCisjZW5kaWYgLyogQ09ORklHX0RNQV9BUElfREVCVUcgKi8KKworI2VuZGlmIC8qIF9fRE1BX0RFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaAppbmRleCBiYTkxMTRlLi5kN2QwOTBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oCkBAIC0zLDYgKzMsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWF0dHJzLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIAogLyogVGhlc2UgZGVmaW5pdGlvbnMgbWlycm9yIHRob3NlIGluIHBjaS5oLCBzbyB0aGV5IGNhbiBiZSB1c2VkCiAgKiBpbnRlcmNoYW5nZWFibHkgd2l0aCB0aGVpciBQQ0lfIGNvdW50ZXJwYXJ0cyAqLwpAQCAtMTMsNiArMTUsNTIgQEAKIAlETUFfTk9ORSA9IDMsCiB9OwogCitzdHJ1Y3QgZG1hX21hcF9vcHMgeworCXZvaWQqICgqYWxsb2NfY29oZXJlbnQpKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwKTsKKwl2b2lkICgqZnJlZV9jb2hlcmVudCkoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpOworCWRtYV9hZGRyX3QgKCptYXBfcGFnZSkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJICAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKKwl2b2lkICgqdW5tYXBfcGFnZSkoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworCWludCAoKm1hcF9zZykoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkgICAgICBpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworCXZvaWQgKCp1bm1hcF9zZykoc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworCXZvaWQgKCpzeW5jX3NpbmdsZV9mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCisJCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CisJdm9pZCAoKnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UpKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKKwl2b2lkICgqc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSkoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJICBzaXplX3Qgc2l6ZSwKKwkJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOworCXZvaWQgKCpzeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCQkgICAgIHNpemVfdCBzaXplLAorCQkJCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CisJdm9pZCAoKnN5bmNfc2dfZm9yX2NwdSkoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOworCXZvaWQgKCpzeW5jX3NnX2Zvcl9kZXZpY2UpKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKKwlpbnQgKCptYXBwaW5nX2Vycm9yKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpOworCWludCAoKmRtYV9zdXBwb3J0ZWQpKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spOworCWludCBpc19waHlzOworfTsKKwogI2RlZmluZSBETUFfQklUX01BU0sobikJKCgobikgPT0gNjQpID8gfjBVTEwgOiAoKDFVTEw8PChuKSktMSkpCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYXIuaCBiL2luY2x1ZGUvbGludXgvZG1hci5oCmluZGV4IGYyODQ0MDcuLjJmMzQyNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hci5oCisrKyBiL2luY2x1ZGUvbGludXgvZG1hci5oCkBAIC0yNCwxMCArMjQsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tc2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KIAotI2lmIGRlZmluZWQoQ09ORklHX0RNQVIpIHx8IGRlZmluZWQoQ09ORklHX0lOVFJfUkVNQVApCiBzdHJ1Y3QgaW50ZWxfaW9tbXU7Ci0KKyNpZiBkZWZpbmVkKENPTkZJR19ETUFSKSB8fCBkZWZpbmVkKENPTkZJR19JTlRSX1JFTUFQKQogc3RydWN0IGRtYXJfZHJoZF91bml0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiBsaXN0IG9mIGRyaGQgdW5pdHMJKi8KIAlzdHJ1Y3QgIGFjcGlfZG1hcl9oZWFkZXIgKmhkcjsJLyogQUNQSSBoZWFkZXIJCSovCkBAIC00OSw3ICs0OSw3IEBACiAKIC8qIEludGVsIElPTU1VIGRldGVjdGlvbiAqLwogZXh0ZXJuIHZvaWQgZGV0ZWN0X2ludGVsX2lvbW11KHZvaWQpOwotCitleHRlcm4gaW50IGVuYWJsZV9kcmhkX2ZhdWx0X2hhbmRsaW5nKHZvaWQpOwogCiBleHRlcm4gaW50IHBhcnNlX2lvYXBpY3NfdW5kZXJfaXIodm9pZCk7CiBleHRlcm4gaW50IGFsbG9jX2lvbW11KHN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqKTsKQEAgLTYzLDEyICs2MywxMiBAQAogewogCXJldHVybiAtRU5PREVWOwogfQorc3RhdGljIGlubGluZSBpbnQgZW5hYmxlX2RyaGRfZmF1bHRfaGFuZGxpbmcodm9pZCkKK3sKKwlyZXR1cm4gLTE7Cit9CiAjZW5kaWYgLyogIUNPTkZJR19ETUFSICYmICFDT05GSUdfSU5UUl9SRU1BUCAqLwogCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLWV4dGVybiBpbnQgaW50cl9yZW1hcHBpbmdfZW5hYmxlZDsKLWV4dGVybiBpbnQgZW5hYmxlX2ludHJfcmVtYXBwaW5nKGludCk7Ci0KIHN0cnVjdCBpcnRlIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7CkBAIC05Nyw2ICs5NywxMCBAQAogCQlfX3U2NCBoaWdoOwogCX07CiB9OworI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCitleHRlcm4gaW50IGludHJfcmVtYXBwaW5nX2VuYWJsZWQ7CitleHRlcm4gaW50IGVuYWJsZV9pbnRyX3JlbWFwcGluZyhpbnQpOworCiBleHRlcm4gaW50IGdldF9pcnRlKGludCBpcnEsIHN0cnVjdCBpcnRlICplbnRyeSk7CiBleHRlcm4gaW50IG1vZGlmeV9pcnRlKGludCBpcnEsIHN0cnVjdCBpcnRlICppcnRlX21vZGlmaWVkKTsKIGV4dGVybiBpbnQgYWxsb2NfaXJ0ZShzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCBpbnQgaXJxLCB1MTYgY291bnQpOwpAQCAtMTExLDE0ICsxMTUsNDAgQEAKIGV4dGVybiBzdHJ1Y3QgaW50ZWxfaW9tbXUgKm1hcF9kZXZfdG9faXIoc3RydWN0IHBjaV9kZXYgKmRldik7CiBleHRlcm4gc3RydWN0IGludGVsX2lvbW11ICptYXBfaW9hcGljX3RvX2lyKGludCBhcGljKTsKICNlbHNlCitzdGF0aWMgaW5saW5lIGludCBhbGxvY19pcnRlKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIGludCBpcnEsIHUxNiBjb3VudCkKK3sKKwlyZXR1cm4gLTE7Cit9CitzdGF0aWMgaW5saW5lIGludCBtb2RpZnlfaXJ0ZShpbnQgaXJxLCBzdHJ1Y3QgaXJ0ZSAqaXJ0ZV9tb2RpZmllZCkKK3sKKwlyZXR1cm4gLTE7Cit9CitzdGF0aWMgaW5saW5lIGludCBmcmVlX2lydGUoaW50IGlycSkKK3sKKwlyZXR1cm4gLTE7Cit9CitzdGF0aWMgaW5saW5lIGludCBtYXBfaXJxX3RvX2lydGVfaGFuZGxlKGludCBpcnEsIHUxNiAqc3ViX2hhbmRsZSkKK3sKKwlyZXR1cm4gLTE7Cit9CitzdGF0aWMgaW5saW5lIGludCBzZXRfaXJ0ZV9pcnEoaW50IGlycSwgc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgdTE2IGluZGV4LAorCQkJICAgICAgIHUxNiBzdWJfaGFuZGxlKQoreworCXJldHVybiAtMTsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGludGVsX2lvbW11ICptYXBfZGV2X3RvX2lyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcmV0dXJuIE5VTEw7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbnRlbF9pb21tdSAqbWFwX2lvYXBpY190b19pcihpbnQgYXBpYykKK3sKKwlyZXR1cm4gTlVMTDsKK30KICNkZWZpbmUgaXJxX3JlbWFwcGVkKGlycSkJCSgwKQogI2RlZmluZSBlbmFibGVfaW50cl9yZW1hcHBpbmcobW9kZSkJKC0xKQogI2RlZmluZSBpbnRyX3JlbWFwcGluZ19lbmFibGVkCQkoMCkKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0RNQVIKLWV4dGVybiBjb25zdCBjaGFyICpkbWFyX2dldF9mYXVsdF9yZWFzb24odTggZmF1bHRfcmVhc29uKTsKLQogLyogQ2FuJ3QgdXNlIHRoZSBjb21tb24gTVNJIGludGVycnVwdCBmdW5jdGlvbnMKICAqIHNpbmNlIERNQVIgaXMgbm90IGEgcGNpIGRldmljZQogICovCkBAIC0xMjcsOCArMTU3LDEwIEBACiBleHRlcm4gdm9pZCBkbWFyX21zaV9yZWFkKGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpOwogZXh0ZXJuIHZvaWQgZG1hcl9tc2lfd3JpdGUoaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7CiBleHRlcm4gaW50IGRtYXJfc2V0X2ludGVycnVwdChzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KTsKK2V4dGVybiBpcnFyZXR1cm5fdCBkbWFyX2ZhdWx0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBleHRlcm4gaW50IGFyY2hfc2V0dXBfZG1hcl9tc2kodW5zaWduZWQgaW50IGlycSk7CiAKKyNpZmRlZiBDT05GSUdfRE1BUgogZXh0ZXJuIGludCBpb21tdV9kZXRlY3RlZCwgbm9faW9tbXU7CiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBkbWFyX3JtcnJfdW5pdHM7CiBzdHJ1Y3QgZG1hcl9ybXJyX3VuaXQgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWkuaCBiL2luY2x1ZGUvbGludXgvZG1pLmgKaW5kZXggZDc0MWI5Yy4uYmI1NDg5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtaS5oCkBAIC00Nyw3ICs0Nyw4IEBACiBleHRlcm4gaW50IGRtaV9uYW1lX2luX3ZlbmRvcnMoY29uc3QgY2hhciAqc3RyKTsKIGV4dGVybiBpbnQgZG1pX25hbWVfaW5fc2VyaWFsKGNvbnN0IGNoYXIgKnN0cik7CiBleHRlcm4gaW50IGRtaV9hdmFpbGFibGU7Ci1leHRlcm4gaW50IGRtaV93YWxrKHZvaWQgKCpkZWNvZGUpKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICopKTsKK2V4dGVybiBpbnQgZG1pX3dhbGsodm9pZCAoKmRlY29kZSkoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKiwgdm9pZCAqKSwKKwl2b2lkICpwcml2YXRlX2RhdGEpOwogZXh0ZXJuIGJvb2wgZG1pX21hdGNoKGVudW0gZG1pX2ZpZWxkIGYsIGNvbnN0IGNoYXIgKnN0cik7CiAKICNlbHNlCkBAIC02MSw4ICs2Miw4IEBACiBzdGF0aWMgaW5saW5lIGludCBkbWlfbmFtZV9pbl92ZW5kb3JzKGNvbnN0IGNoYXIgKnMpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGRtaV9uYW1lX2luX3NlcmlhbChjb25zdCBjaGFyICpzKSB7IHJldHVybiAwOyB9CiAjZGVmaW5lIGRtaV9hdmFpbGFibGUgMAotc3RhdGljIGlubGluZSBpbnQgZG1pX3dhbGsodm9pZCAoKmRlY29kZSkoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKikpCi0JeyByZXR1cm4gLTE7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGRtaV93YWxrKHZvaWQgKCpkZWNvZGUpKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICosIHZvaWQgKiksCisJdm9pZCAqcHJpdmF0ZV9kYXRhKSB7IHJldHVybiAtMTsgfQogc3RhdGljIGlubGluZSBib29sIGRtaV9tYXRjaChlbnVtIGRtaV9maWVsZCBmLCBjb25zdCBjaGFyICpzdHIpCiAJeyByZXR1cm4gZmFsc2U7IH0KIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDQyNDM2YWUuLjg3ZTdiZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTg0OSw3ICs4NDksNyBAQAogI2RlZmluZSBmX2RlbnRyeQlmX3BhdGguZGVudHJ5CiAjZGVmaW5lIGZfdmZzbW50CWZfcGF0aC5tbnQKIAljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCSpmX29wOwotCXNwaW5sb2NrX3QJCWZfbG9jazsgIC8qIGZfZXBfbGlua3MsIGZfZmxhZ3MgKi8KKwlzcGlubG9ja190CQlmX2xvY2s7ICAvKiBmX2VwX2xpbmtzLCBmX2ZsYWdzLCBubyBJUlEgKi8KIAlhdG9taWNfbG9uZ190CQlmX2NvdW50OwogCXVuc2lnbmVkIGludCAJCWZfZmxhZ3M7CiAJZm1vZGVfdAkJCWZfbW9kZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmggYi9pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oCmluZGV4IGE5N2MwNTMuLjE4YjQ2N2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaApAQCAtNCw3ICs0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvcGF0aC5oPgogCiBzdHJ1Y3QgZnNfc3RydWN0IHsKLQlhdG9taWNfdCBjb3VudDsKKwlhdG9taWNfdCBjb3VudDsJLyogVGhpcyB1c2FnZSBjb3VudCBpcyB1c2VkIGJ5IGNoZWNrX3Vuc2FmZV9leGVjKCkgZm9yCisJCQkgKiBzZWN1cml0eSBjaGVja2luZyBwdXJwb3NlcyAtIHRoZXJlZm9yZSBpdCBtYXkgbm90IGJlCisJCQkgKiBpbmNyZW1lbnRlZCwgZXhjZXB0IGJ5IGNsb25lKENMT05FX0ZTKS4KKwkJCSAqLwogCXJ3bG9ja190IGxvY2s7CiAJaW50IHVtYXNrOwogCXN0cnVjdCBwYXRoIHJvb3QsIHB3ZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnRyYWNlLmggYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCmluZGV4IDY3NzQzMmIuLmE3ZjgxMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9mdHJhY2UuaApAQCAtMzgwLDYgKzM4MCwzMCBAQAogI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAogLyoKKyAqIFN0YWNrIG9mIHJldHVybiBhZGRyZXNzZXMgZm9yIGZ1bmN0aW9ucworICogb2YgYSB0aHJlYWQuCisgKiBVc2VkIGluIHN0cnVjdCB0aHJlYWRfaW5mbworICovCitzdHJ1Y3QgZnRyYWNlX3JldF9zdGFjayB7CisJdW5zaWduZWQgbG9uZyByZXQ7CisJdW5zaWduZWQgbG9uZyBmdW5jOworCXVuc2lnbmVkIGxvbmcgbG9uZyBjYWxsdGltZTsKK307CisKKy8qCisgKiBQcmltYXJ5IGhhbmRsZXIgb2YgYSBmdW5jdGlvbiByZXR1cm4uCisgKiBJdCByZWxheXMgb24gZnRyYWNlX3JldHVybl90b19oYW5kbGVyLgorICogRGVmaW5lZCBpbiBlbnRyeV8zMi82NC5TCisgKi8KK2V4dGVybiB2b2lkIHJldHVybl90b19oYW5kbGVyKHZvaWQpOworCitleHRlcm4gaW50CitmdHJhY2VfcHVzaF9yZXR1cm5fdHJhY2UodW5zaWduZWQgbG9uZyByZXQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lLAorCQkJIHVuc2lnbmVkIGxvbmcgZnVuYywgaW50ICpkZXB0aCk7CitleHRlcm4gdm9pZAorZnRyYWNlX3BvcF9yZXR1cm5fdHJhY2Uoc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLCB1bnNpZ25lZCBsb25nICpyZXQpOworCisvKgogICogU29tZXRpbWVzIHdlIGRvbid0IHdhbnQgdG8gdHJhY2UgYSBmdW5jdGlvbiB3aXRoIHRoZSBmdW5jdGlvbgogICogZ3JhcGggdHJhY2VyIGJ1dCB3ZSB3YW50IHRoZW0gdG8ga2VlcCB0cmFjZWQgYnkgdGhlIHVzdWFsIGZ1bmN0aW9uCiAgKiB0cmFjZXIgaWYgdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciBpcyBub3QgY29uZmlndXJlZC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLWlkLmggYi9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCmluZGV4IDFmZmMyM2IuLmYyNzYwNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLWlkLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMtaWQuaApAQCAtNzEsNiArNzEsNyBAQAogI2RlZmluZSBJMkNfRFJJVkVSSURfVlAyN1NNUFgJOTMJLyogUGFuYXNvbmljIFZQMjdzIHR1bmVyIGludGVybmFsIE1QWCAqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfTTUyNzkwIAk5NSAgICAgIC8qIE1pdHN1YmlzaGkgTTUyNzkwU1AvRlAgQVYgc3dpdGNoICovCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9DUzUzNDUJOTYJLyogY3M1MzQ1IGF1ZGlvIHByb2Nlc3NvcgkqLworI2RlZmluZSBJMkNfRFJJVkVSSURfQVU4NTIyCTk3CS8qIEF1dml0ZWsgYXU4NTIyICAgICAgICovCiAKICNkZWZpbmUgSTJDX0RSSVZFUklEX09WNzY3MCAxMDQ4CS8qIE9tbml2aXNpb24gNzY3MCBjYW1lcmEgKi8KIApAQCAtODcsNiArODgsNyBAQAogI2RlZmluZSBJMkNfSFdfQl9DWDIzNDFYCTB4MDEwMDIwIC8qIENvbmV4YW50IENYMjM0MVggTVBFRyBlbmNvZGVyIGNhcmRzICovCiAjZGVmaW5lIEkyQ19IV19CX0NYMjM4ODUJMHgwMTAwMjIgLyogY29uZXhhbnQgMjM4ODUgYmFzZWQgdHYgY2FyZHMgKGJ1czEpICovCiAjZGVmaW5lIEkyQ19IV19CX0FVMDgyOAkJMHgwMTAwMjMgLyogYXV2aXRlayBhdTA4MjggdXNiIGJyaWRnZSAqLworI2RlZmluZSBJMkNfSFdfQl9IRFBWUgkJMHgwMTAwMjUgLyogSGF1cHBhdWdlIEhEIFBWUiAqLwogCiAvKiAtLS0gU0dJIGFkYXB0ZXJzCQkJCQkJCSovCiAjZGVmaW5lIEkyQ19IV19TR0lfVklOTwkJMHgxNjAwMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRlLmggYi9pbmNsdWRlL2xpbnV4L2lkZS5oCmluZGV4IDg1NGViYTguLmQ1ZDgzMjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZGUuaApAQCAtNDAsNiArNDAsMTMgQEAKICNkZWZpbmUgRVJST1JfUkVTRVQJMwkvKiBSZXNldCBjb250cm9sbGVyIGV2ZXJ5IDR0aCByZXRyeSAqLwogI2RlZmluZSBFUlJPUl9SRUNBTAkxCS8qIFJlY2FsaWJyYXRlIGV2ZXJ5IDJuZCByZXRyeSAqLwogCisvKiBFcnJvciBjb2RlcyByZXR1cm5lZCBpbiBycS0+ZXJyb3JzIHRvIHRoZSBoaWdoZXIgcGFydCBvZiB0aGUgZHJpdmVyLiAqLworZW51bSB7CisJSURFX0RSVl9FUlJPUl9HRU5FUkFMCT0gMTAxLAorCUlERV9EUlZfRVJST1JfRklMRU1BUksJPSAxMDIsCisJSURFX0RSVl9FUlJPUl9FT0QJPSAxMDMsCit9OworCiAvKgogICogRGVmaW5pdGlvbnMgZm9yIGFjY2Vzc2luZyBJREUgY29udHJvbGxlciByZWdpc3RlcnMKICAqLwpAQCAtMTkzLDI2ICsyMDAsOCBAQAogCWh3LT5pb19wb3J0cy5jdGxfYWRkciA9IGN0bF9hZGRyOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJNKSB8fCBkZWZpbmVkKENPTkZJR19NNjhLKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfUEFSSVNDKSB8fCBkZWZpbmVkKENPTkZJR19QUEMpIHx8IGRlZmluZWQoQ09ORklHX1NQQVJDKQotI2luY2x1ZGUgPGFzbS9pZGUuaD4KLSNlbHNlCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KLSNlbmRpZgotCiAjZGVmaW5lIE1BWF9IV0lGUwkxMAogCi0vKiBDdXJyZW50bHkgb25seSBtNjhrLCBhcHVzIGFuZCBtOHh4IG5lZWQgaXQgKi8KLSNpZm5kZWYgSURFX0FSQ0hfQUNLX0lOVFIKLSMgZGVmaW5lIGlkZV9hY2tfaW50cihod2lmKSAoMSkKLSNlbmRpZgotCi0vKiBDdXJyZW50bHkgb25seSBBdGFyaSBuZWVkcyBpdCAqLwotI2lmbmRlZiBJREVfQVJDSF9MT0NLCi0jIGRlZmluZSBpZGVfcmVsZWFzZV9sb2NrKCkJCQlkbyB7fSB3aGlsZSAoMCkKLSMgZGVmaW5lIGlkZV9nZXRfbG9jayhoZGxyLCBkYXRhKQkJZG8ge30gd2hpbGUgKDApCi0jZW5kaWYgLyogSURFX0FSQ0hfTE9DSyAqLwotCiAvKgogICogTm93IGZvciB0aGUgZGF0YSB3ZSBuZWVkIHRvIG1haW50YWluIHBlci1kcml2ZTogIGlkZV9kcml2ZV90CiAgKi8KQEAgLTI1Miw1NiArMjQxLDUyIEBACiAKIGVudW0gewogCUlERV9URkxBR19MQkE0OAkJCT0gKDEgPDwgMCksCi0JSURFX1RGTEFHX0ZMQUdHRUQJCT0gKDEgPDwgMiksCi0JSURFX1RGTEFHX09VVF9EQVRBCQk9ICgxIDw8IDMpLAotCUlERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUJPSAoMSA8PCA0KSwKLQlJREVfVEZMQUdfT1VUX0hPQl9OU0VDVAkJPSAoMSA8PCA1KSwKLQlJREVfVEZMQUdfT1VUX0hPQl9MQkFMCQk9ICgxIDw8IDYpLAotCUlERV9URkxBR19PVVRfSE9CX0xCQU0JCT0gKDEgPDwgNyksCi0JSURFX1RGTEFHX09VVF9IT0JfTEJBSAkJPSAoMSA8PCA4KSwKKwlJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFCT0gKDEgPDwgMSksCisJSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QJCT0gKDEgPDwgMiksCisJSURFX1RGTEFHX09VVF9IT0JfTEJBTAkJPSAoMSA8PCAzKSwKKwlJREVfVEZMQUdfT1VUX0hPQl9MQkFNCQk9ICgxIDw8IDQpLAorCUlERV9URkxBR19PVVRfSE9CX0xCQUgJCT0gKDEgPDwgNSksCiAJSURFX1RGTEFHX09VVF9IT0IJCT0gSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSB8CiAJCQkJCSAgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QgfAogCQkJCQkgIElERV9URkxBR19PVVRfSE9CX0xCQUwgfAogCQkJCQkgIElERV9URkxBR19PVVRfSE9CX0xCQU0gfAogCQkJCQkgIElERV9URkxBR19PVVRfSE9CX0xCQUgsCi0JSURFX1RGTEFHX09VVF9GRUFUVVJFCQk9ICgxIDw8IDkpLAotCUlERV9URkxBR19PVVRfTlNFQ1QJCT0gKDEgPDwgMTApLAotCUlERV9URkxBR19PVVRfTEJBTAkJPSAoMSA8PCAxMSksCi0JSURFX1RGTEFHX09VVF9MQkFNCQk9ICgxIDw8IDEyKSwKLQlJREVfVEZMQUdfT1VUX0xCQUgJCT0gKDEgPDwgMTMpLAorCUlERV9URkxBR19PVVRfRkVBVFVSRQkJPSAoMSA8PCA2KSwKKwlJREVfVEZMQUdfT1VUX05TRUNUCQk9ICgxIDw8IDcpLAorCUlERV9URkxBR19PVVRfTEJBTAkJPSAoMSA8PCA4KSwKKwlJREVfVEZMQUdfT1VUX0xCQU0JCT0gKDEgPDwgOSksCisJSURFX1RGTEFHX09VVF9MQkFICQk9ICgxIDw8IDEwKSwKIAlJREVfVEZMQUdfT1VUX1RGCQk9IElERV9URkxBR19PVVRfRkVBVFVSRSB8CiAJCQkJCSAgSURFX1RGTEFHX09VVF9OU0VDVCB8CiAJCQkJCSAgSURFX1RGTEFHX09VVF9MQkFMIHwKIAkJCQkJICBJREVfVEZMQUdfT1VUX0xCQU0gfAogCQkJCQkgIElERV9URkxBR19PVVRfTEJBSCwKLQlJREVfVEZMQUdfT1VUX0RFVklDRQkJPSAoMSA8PCAxNCksCi0JSURFX1RGTEFHX1dSSVRFCQkJPSAoMSA8PCAxNSksCi0JSURFX1RGTEFHX0ZMQUdHRURfU0VUX0lOX0ZMQUdTCT0gKDEgPDwgMTYpLAotCUlERV9URkxBR19JTl9EQVRBCQk9ICgxIDw8IDE3KSwKLQlJREVfVEZMQUdfQ1VTVE9NX0hBTkRMRVIJPSAoMSA8PCAxOCksCi0JSURFX1RGTEFHX0RNQV9QSU9fRkFMTEJBQ0sJPSAoMSA8PCAxOSksCi0JSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFCT0gKDEgPDwgMjApLAotCUlERV9URkxBR19JTl9IT0JfTlNFQ1QJCT0gKDEgPDwgMjEpLAotCUlERV9URkxBR19JTl9IT0JfTEJBTAkJPSAoMSA8PCAyMiksCi0JSURFX1RGTEFHX0lOX0hPQl9MQkFNCQk9ICgxIDw8IDIzKSwKLQlJREVfVEZMQUdfSU5fSE9CX0xCQUgJCT0gKDEgPDwgMjQpLAorCUlERV9URkxBR19PVVRfREVWSUNFCQk9ICgxIDw8IDExKSwKKwlJREVfVEZMQUdfV1JJVEUJCQk9ICgxIDw8IDEyKSwKKwlJREVfVEZMQUdfQ1VTVE9NX0hBTkRMRVIJPSAoMSA8PCAxMyksCisJSURFX1RGTEFHX0RNQV9QSU9fRkFMTEJBQ0sJPSAoMSA8PCAxNCksCisJSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFCT0gKDEgPDwgMTUpLAorCUlERV9URkxBR19JTl9IT0JfTlNFQ1QJCT0gKDEgPDwgMTYpLAorCUlERV9URkxBR19JTl9IT0JfTEJBTAkJPSAoMSA8PCAxNyksCisJSURFX1RGTEFHX0lOX0hPQl9MQkFNCQk9ICgxIDw8IDE4KSwKKwlJREVfVEZMQUdfSU5fSE9CX0xCQUgJCT0gKDEgPDwgMTkpLAogCUlERV9URkxBR19JTl9IT0JfTEJBCQk9IElERV9URkxBR19JTl9IT0JfTEJBTCB8CiAJCQkJCSAgSURFX1RGTEFHX0lOX0hPQl9MQkFNIHwKIAkJCQkJICBJREVfVEZMQUdfSU5fSE9CX0xCQUgsCiAJSURFX1RGTEFHX0lOX0hPQgkJPSBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUgfAogCQkJCQkgIElERV9URkxBR19JTl9IT0JfTlNFQ1QgfAogCQkJCQkgIElERV9URkxBR19JTl9IT0JfTEJBLAotCUlERV9URkxBR19JTl9GRUFUVVJFCQk9ICgxIDw8IDEpLAotCUlERV9URkxBR19JTl9OU0VDVAkJPSAoMSA8PCAyNSksCi0JSURFX1RGTEFHX0lOX0xCQUwJCT0gKDEgPDwgMjYpLAotCUlERV9URkxBR19JTl9MQkFNCQk9ICgxIDw8IDI3KSwKLQlJREVfVEZMQUdfSU5fTEJBSAkJPSAoMSA8PCAyOCksCisJSURFX1RGTEFHX0lOX0ZFQVRVUkUJCT0gKDEgPDwgMjApLAorCUlERV9URkxBR19JTl9OU0VDVAkJPSAoMSA8PCAyMSksCisJSURFX1RGTEFHX0lOX0xCQUwJCT0gKDEgPDwgMjIpLAorCUlERV9URkxBR19JTl9MQkFNCQk9ICgxIDw8IDIzKSwKKwlJREVfVEZMQUdfSU5fTEJBSAkJPSAoMSA8PCAyNCksCiAJSURFX1RGTEFHX0lOX0xCQQkJPSBJREVfVEZMQUdfSU5fTEJBTCB8CiAJCQkJCSAgSURFX1RGTEFHX0lOX0xCQU0gfAogCQkJCQkgIElERV9URkxBR19JTl9MQkFILAogCUlERV9URkxBR19JTl9URgkJCT0gSURFX1RGTEFHX0lOX05TRUNUIHwKIAkJCQkJICBJREVfVEZMQUdfSU5fTEJBLAotCUlERV9URkxBR19JTl9ERVZJQ0UJCT0gKDEgPDwgMjkpLAorCUlERV9URkxBR19JTl9ERVZJQ0UJCT0gKDEgPDwgMjUpLAogCUlERV9URkxBR19IT0IJCQk9IElERV9URkxBR19PVVRfSE9CIHwKIAkJCQkJICBJREVfVEZMQUdfSU5fSE9CLAogCUlERV9URkxBR19URgkJCT0gSURFX1RGTEFHX09VVF9URiB8CkBAIC0zMDksOSArMjk0LDE4IEBACiAJSURFX1RGTEFHX0RFVklDRQkJPSBJREVfVEZMQUdfT1VUX0RFVklDRSB8CiAJCQkJCSAgSURFX1RGTEFHX0lOX0RFVklDRSwKIAkvKiBmb3JjZSAxNi1iaXQgSS9PIG9wZXJhdGlvbnMgKi8KLQlJREVfVEZMQUdfSU9fMTZCSVQJCT0gKDEgPDwgMzApLAotCS8qIGlkZV90YXNrX3Qgd2FzIGFsbG9jYXRlZCB1c2luZyBrbWFsbG9jKCkgKi8KLQlJREVfVEZMQUdfRFlOCQkJPSAoMSA8PCAzMSksCisJSURFX1RGTEFHX0lPXzE2QklUCQk9ICgxIDw8IDI2KSwKKwkvKiBzdHJ1Y3QgaWRlX2NtZCB3YXMgYWxsb2NhdGVkIHVzaW5nIGttYWxsb2MoKSAqLworCUlERV9URkxBR19EWU4JCQk9ICgxIDw8IDI3KSwKKwlJREVfVEZMQUdfRlMJCQk9ICgxIDw8IDI4KSwKKwlJREVfVEZMQUdfTVVMVElfUElPCQk9ICgxIDw8IDI5KSwKK307CisKK2VudW0geworCUlERV9GVEZMQUdfRkxBR0dFRAkJPSAoMSA8PCAwKSwKKwlJREVfRlRGTEFHX1NFVF9JTl9GTEFHUwkJPSAoMSA8PCAxKSwKKwlJREVfRlRGTEFHX09VVF9EQVRBCQk9ICgxIDw8IDIpLAorCUlERV9GVEZMQUdfSU5fREFUQQkJPSAoMSA8PCAzKSwKIH07CiAKIHN0cnVjdCBpZGVfdGFza2ZpbGUgewpAQCAtMzQzLDE2ICszMzcsMjcgQEAKIAl9OwogfTsKIAotdHlwZWRlZiBzdHJ1Y3QgaWRlX3Rhc2tfcyB7CitzdHJ1Y3QgaWRlX2NtZCB7CiAJdW5pb24gewogCQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlCXRmOwogCQl1OAkJCXRmX2FycmF5WzE0XTsKIAl9OworCXU4CQkJZnRmX2ZsYWdzOwkvKiBmb3IgVEFTS0ZJTEUgaW9jdGwgKi8KIAl1MzIJCQl0Zl9mbGFnczsKLQlpbnQJCQlkYXRhX3BoYXNlOworCWludAkJCXByb3RvY29sOworCisJaW50CQkJc2dfbmVudHM7CSAgLyogbnVtYmVyIG9mIHNnIGVudHJpZXMgKi8KKwlpbnQJCQlvcmlnX3NnX25lbnRzOworCWludAkJCXNnX2RtYV9kaXJlY3Rpb247IC8qIERNQSB0cmFuc2ZlciBkaXJlY3Rpb24gKi8KKworCXVuc2lnbmVkIGludAkJbmJ5dGVzOworCXVuc2lnbmVkIGludAkJbmxlZnQ7CisJc3RydWN0IHNjYXR0ZXJsaXN0CSpjdXJzZzsKKwl1bnNpZ25lZCBpbnQJCWN1cnNnX29mczsKKwogCXN0cnVjdCByZXF1ZXN0CQkqcnE7CQkvKiBjb3B5IG9mIHJlcXVlc3QgKi8KIAl2b2lkCQkJKnNwZWNpYWw7CS8qIHZhbGlkX3QgZ2VuZXJhbGx5ICovCi19IGlkZV90YXNrX3Q7Cit9OwogCiAvKiBBVEFQSSBwYWNrZXQgY29tbWFuZCBmbGFncyAqLwogZW51bSB7CkBAIC0zNjQsOCArMzY5LDYgQEAKIAlQQ19GTEFHX0RNQV9JTl9QUk9HUkVTUwkJPSAoMSA8PCA0KSwKIAlQQ19GTEFHX0RNQV9FUlJPUgkJPSAoMSA8PCA1KSwKIAlQQ19GTEFHX1dSSVRJTkcJCQk9ICgxIDw8IDYpLAotCS8qIGNvbW1hbmQgdGltZWQgb3V0ICovCi0JUENfRkxBR19USU1FRE9VVAkJPSAoMSA8PCA3KSwKIH07CiAKIC8qCkBAIC00MzYsNyArNDM5LDYgQEAKIAkJCQkJaW50KTsKIAlpZGVfc3RhcnRzdG9wX3QJKCpkb19yZXF1ZXN0KShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgc3RydWN0IHJlcXVlc3QgKiwKIAkJCQkgICAgICBzZWN0b3JfdCk7Ci0JaW50CQkoKmVuZF9yZXF1ZXN0KShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgaW50LCBpbnQpOwogCWludAkJKCppb2N0bCkoc3RydWN0IGlkZV9kcml2ZV9zICosIHN0cnVjdCBibG9ja19kZXZpY2UgKiwKIAkJCQkgZm1vZGVfdCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIH07CkBAIC01MTIsOCArNTE0LDYgQEAKIAlJREVfREZMQUdfTklDRTEJCQk9ICgxIDw8IDUpLAogCS8qIGRldmljZSBpcyBwaHlzaWNhbGx5IHByZXNlbnQgKi8KIAlJREVfREZMQUdfUFJFU0VOVAkJPSAoMSA8PCA2KSwKLQkvKiBkZXZpY2UgZWplY3RlZCBoaW50ICovCi0JSURFX0RGTEFHX0RFQUQJCQk9ICgxIDw8IDcpLAogCS8qIGlkIHJlYWQgZnJvbSBkZXZpY2UgKHN5bnRoZXRpYyBpZiBub3Qgc2V0KSAqLwogCUlERV9ERkxBR19JRF9SRUFECQk9ICgxIDw8IDgpLAogCUlERV9ERkxBR19OT1BST0JFCQk9ICgxIDw8IDkpLApAQCAtNjI3LDggKzYyNywxMSBAQAogCS8qIGN1cnJlbnQgcGFja2V0IGNvbW1hbmQgKi8KIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYzsKIAorCS8qIGxhc3QgZmFpbGVkIHBhY2tldCBjb21tYW5kICovCisJc3RydWN0IGlkZV9hdGFwaV9wYyAqZmFpbGVkX3BjOworCiAJLyogY2FsbGJhY2sgZm9yIHBhY2tldCBjb21tYW5kcyAqLwotCXZvaWQgKCpwY19jYWxsYmFjaykoc3RydWN0IGlkZV9kcml2ZV9zICosIGludCk7CisJaW50ICAoKnBjX2NhbGxiYWNrKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgaW50KTsKIAogCXZvaWQgKCpwY191cGRhdGVfYnVmZmVycykoc3RydWN0IGlkZV9kcml2ZV9zICosIHN0cnVjdCBpZGVfYXRhcGlfcGMgKik7CiAJaW50ICAoKnBjX2lvX2J1ZmZlcnMpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICosCkBAIC02NjEsMTMgKzY2NCwxMyBAQAogCiAJdm9pZAkoKnNldF9pcnEpKHN0cnVjdCBod2lmX3MgKiwgaW50KTsKIAotCXZvaWQJKCp0Zl9sb2FkKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX3Rhc2tfcyAqKTsKLQl2b2lkCSgqdGZfcmVhZCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV90YXNrX3MgKik7CisJdm9pZAkoKnRmX2xvYWQpKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICopOworCXZvaWQJKCp0Zl9yZWFkKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKIAotCXZvaWQJKCppbnB1dF9kYXRhKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCB2b2lkICosCi0JCQkgICAgICB1bnNpZ25lZCBpbnQpOwotCXZvaWQJKCpvdXRwdXRfZGF0YSkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgdm9pZCAqLAotCQkJICAgICAgIHVuc2lnbmVkIGludCk7CisJdm9pZAkoKmlucHV0X2RhdGEpKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICosCisJCQkgICAgICB2b2lkICosIHVuc2lnbmVkIGludCk7CisJdm9pZAkoKm91dHB1dF9kYXRhKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqLAorCQkJICAgICAgIHZvaWQgKiwgdW5zaWduZWQgaW50KTsKIH07CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyBkZWZhdWx0X3RwX29wczsKQEAgLTcxMSwxMiArNzE0LDEyIEBACiAKIHN0cnVjdCBpZGVfZG1hX29wcyB7CiAJdm9pZAkoKmRtYV9ob3N0X3NldCkoc3RydWN0IGlkZV9kcml2ZV9zICosIGludCk7Ci0JaW50CSgqZG1hX3NldHVwKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7Ci0Jdm9pZAkoKmRtYV9leGVjX2NtZCkoc3RydWN0IGlkZV9kcml2ZV9zICosIHU4KTsKKwlpbnQJKCpkbWFfc2V0dXApKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKIAl2b2lkCSgqZG1hX3N0YXJ0KShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7CiAJaW50CSgqZG1hX2VuZCkoc3RydWN0IGlkZV9kcml2ZV9zICopOwogCWludAkoKmRtYV90ZXN0X2lycSkoc3RydWN0IGlkZV9kcml2ZV9zICopOwogCXZvaWQJKCpkbWFfbG9zdF9pcnEpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKKwlpbnQJKCpkbWFfdGltZXJfZXhwaXJ5KShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7CiAJdm9pZAkoKmRtYV90aW1lb3V0KShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7CiAJLyoKIAkgKiBUaGUgZm9sbG93aW5nIG1ldGhvZCBpcyBvcHRpb25hbCBhbmQgb25seSByZXF1aXJlZCB0byBiZQpAQCAtNzgwLDE5ICs3ODMsOCBAQAogCS8qIFNjYXR0ZXItZ2F0aGVyIGxpc3QgdXNlZCB0byBidWlsZCB0aGUgYWJvdmUgKi8KIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3RhYmxlOwogCWludCBzZ19tYXhfbmVudHM7CQkvKiBNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIGl0ICovCi0JaW50IHNnX25lbnRzOwkJCS8qIEN1cnJlbnQgbnVtYmVyIG9mIGVudHJpZXMgaW4gaXQgKi8KLQlpbnQgb3JpZ19zZ19uZW50czsKLQlpbnQgc2dfZG1hX2RpcmVjdGlvbjsJCS8qIGRtYSB0cmFuc2ZlciBkaXJlY3Rpb24gKi8KIAotCS8qIGRhdGEgcGhhc2Ugb2YgdGhlIGFjdGl2ZSBjb21tYW5kIChjdXJyZW50bHkgb25seSB2YWxpZCBmb3IgUElPL0RNQSkgKi8KLQlpbnQJCWRhdGFfcGhhc2U7Ci0KLQlzdHJ1Y3QgaWRlX3Rhc2tfcyB0YXNrOwkJLyogY3VycmVudCBjb21tYW5kICovCi0KLQl1bnNpZ25lZCBpbnQgbnNlY3Q7Ci0JdW5zaWduZWQgaW50IG5sZWZ0OwotCXN0cnVjdCBzY2F0dGVybGlzdCAqY3Vyc2c7Ci0JdW5zaWduZWQgaW50IGN1cnNnX29mczsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CQkvKiBjdXJyZW50IGNvbW1hbmQgKi8KIAogCWludAkJcnFzaXplOwkJLyogbWF4IHNlY3RvcnMgcGVyIHJlcXVlc3QgKi8KIAlpbnQJCWlycTsJCS8qIG91ciBpcnEgbnVtYmVyICovCkBAIC04NTAsOSArODQyLDE4IEBACiAJaWRlX2h3aWZfdAkqcG9ydHNbTUFYX0hPU1RfUE9SVFMgKyAxXTsKIAl1bnNpZ25lZCBpbnQJbl9wb3J0czsKIAlzdHJ1Y3QgZGV2aWNlCSpkZXZbMl07CisKIAlpbnQJCSgqaW5pdF9jaGlwc2V0KShzdHJ1Y3QgcGNpX2RldiAqKTsKKworCXZvaWQJCSgqZ2V0X2xvY2spKGlycV9oYW5kbGVyX3QsIHZvaWQgKik7CisJdm9pZAkJKCpyZWxlYXNlX2xvY2spKHZvaWQpOworCiAJaXJxX2hhbmRsZXJfdAlpcnFfaGFuZGxlcjsKKwogCXVuc2lnbmVkIGxvbmcJaG9zdF9mbGFnczsKKworCWludAkJaXJxX2ZsYWdzOworCiAJdm9pZAkJKmhvc3RfcHJpdjsKIAlpZGVfaHdpZl90CSpjdXJfcG9ydDsJLyogZm9yIGhvc3RzIHJlcXVpcmluZyBzZXJpYWxpemF0aW9uICovCiAKQEAgLTg2OSw3ICs4NzAsNyBAQAogdHlwZWRlZiBpbnQgKGlkZV9leHBpcnlfdCkoaWRlX2RyaXZlX3QgKik7CiAKIC8qIHVzZWQgYnkgaWRlLWNkLCBpZGUtZmxvcHB5LCBldGMuICovCi10eXBlZGVmIHZvaWQgKHhmZXJfZnVuY190KShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKiwgdW5zaWduZWQpOwordHlwZWRlZiB2b2lkICh4ZmVyX2Z1bmNfdCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKiwgdm9pZCAqLCB1bnNpZ25lZCk7CiAKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggaWRlX3NldHRpbmdfbXR4OwogCkBAIC0xMDQ1LDEwICsxMDQ2LDExIEBACiB9OwogCiAvKiBEUlZfTkFNRSBoYXMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgZHJpdmVyIGJlZm9yZSB1c2luZyB0aGUgbWFjcm8gYmVsb3cgKi8KLSNkZWZpbmUgX19pZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKQkJCVwKLXsJCQkJCQkJCVwKLQlpZiAodW5saWtlbHkoZHJpdmUtPmRlYnVnX21hc2sgJiBsdmwpKQkJCVwKLQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiAiIGZtdCwgIyMgYXJncyk7CVwKKyNkZWZpbmUgX19pZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKQkJCQlcCit7CQkJCQkJCQkJXAorCWlmICh1bmxpa2VseShkcml2ZS0+ZGVidWdfbWFzayAmIGx2bCkpCQkJCVwKKwkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiAlczogIiBmbXQgIlxuIiwJCVwKKwkJCQkJICBfX2Z1bmNfXywgIyMgYXJncyk7CQlcCiB9CiAKIC8qCkBAIC0xMDg3LDcgKzEwODksNyBAQAogCiB2b2lkIGlkZV9jb21wbGV0ZV9wb3dlcl9zdGVwKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwogaWRlX3N0YXJ0c3RvcF90IGlkZV9zdGFydF9wb3dlcl9zdGVwKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwotdm9pZCBpZGVfY29tcGxldGVfcG1fcmVxdWVzdChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK3ZvaWQgaWRlX2NvbXBsZXRlX3BtX3JxKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwogdm9pZCBpZGVfY2hlY2tfcG1fc3RhdGUoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CiAKIC8qCkBAIC0xMDk5LDcgKzExMDEsNiBAQAogc3RydWN0IGlkZV9kcml2ZXIgewogCWNvbnN0IGNoYXIJCQkqdmVyc2lvbjsKIAlpZGVfc3RhcnRzdG9wX3QJKCpkb19yZXF1ZXN0KShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBzZWN0b3JfdCk7Ci0JaW50CQkoKmVuZF9yZXF1ZXN0KShpZGVfZHJpdmVfdCAqLCBpbnQsIGludCk7CiAJc3RydWN0IGRldmljZV9kcml2ZXIJZ2VuX2RyaXZlcjsKIAlpbnQJCSgqcHJvYmUpKGlkZV9kcml2ZV90ICopOwogCXZvaWQJCSgqcmVtb3ZlKShpZGVfZHJpdmVfdCAqKTsKQEAgLTExMzAsMTkgKzExMzEsMTUgQEAKIGV4dGVybiBpbnQgaWRlX3ZsYl9jbGs7CiBleHRlcm4gaW50IGlkZV9wY2lfY2xrOwogCi1pbnQgaWRlX2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICosIGludCwgaW50KTsKLWludCBpZGVfZW5kX2RlcXVldWVkX3JlcXVlc3QoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgaW50LCBpbnQpOwordW5zaWduZWQgaW50IGlkZV9ycV9ieXRlcyhzdHJ1Y3QgcmVxdWVzdCAqKTsKK2ludCBpZGVfZW5kX3JxKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIGludCwgdW5zaWduZWQgaW50KTsKIHZvaWQgaWRlX2tpbGxfcnEoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CiAKLXZvaWQgX19pZGVfc2V0X2hhbmRsZXIoaWRlX2RyaXZlX3QgKiwgaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQsCi0JCSAgICAgICBpZGVfZXhwaXJ5X3QgKik7Ci12b2lkIGlkZV9zZXRfaGFuZGxlcihpZGVfZHJpdmVfdCAqLCBpZGVfaGFuZGxlcl90ICosIHVuc2lnbmVkIGludCwKLQkJICAgICBpZGVfZXhwaXJ5X3QgKik7Cit2b2lkIF9faWRlX3NldF9oYW5kbGVyKGlkZV9kcml2ZV90ICosIGlkZV9oYW5kbGVyX3QgKiwgdW5zaWduZWQgaW50KTsKK3ZvaWQgaWRlX3NldF9oYW5kbGVyKGlkZV9kcml2ZV90ICosIGlkZV9oYW5kbGVyX3QgKiwgdW5zaWduZWQgaW50KTsKIAotdm9pZCBpZGVfZXhlY3V0ZV9jb21tYW5kKGlkZV9kcml2ZV90ICosIHU4LCBpZGVfaGFuZGxlcl90ICosIHVuc2lnbmVkIGludCwKLQkJCSBpZGVfZXhwaXJ5X3QgKik7Ci0KLXZvaWQgaWRlX2V4ZWN1dGVfcGt0X2NtZChpZGVfZHJpdmVfdCAqKTsKK3ZvaWQgaWRlX2V4ZWN1dGVfY29tbWFuZChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqLCBpZGVfaGFuZGxlcl90ICosCisJCQkgdW5zaWduZWQgaW50KTsKIAogdm9pZCBpZGVfcGFkX3RyYW5zZmVyKGlkZV9kcml2ZV90ICosIGludCwgaW50KTsKIApAQCAtMTE2NCw3ICsxMTYxLDggQEAKIGV4dGVybiBpbnQgaWRlX2RldnNldF9leGVjdXRlKGlkZV9kcml2ZV90ICpkcml2ZSwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBpZGVfZGV2c2V0ICpzZXR0aW5nLCBpbnQgYXJnKTsKIAotZXh0ZXJuIHZvaWQgaWRlX2VuZF9kcml2ZV9jbWQoaWRlX2RyaXZlX3QgKiwgdTgsIHU4KTsKK3ZvaWQgaWRlX2NvbXBsZXRlX2NtZChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqLCB1OCwgdTgpOworaW50IGlkZV9jb21wbGV0ZV9ycShpZGVfZHJpdmVfdCAqLCBpbnQsIHVuc2lnbmVkIGludCk7CiAKIHZvaWQgaWRlX3RmX2R1bXAoY29uc3QgY2hhciAqLCBzdHJ1Y3QgaWRlX3Rhc2tmaWxlICopOwogCkBAIC0xMTc0LDExICsxMTcyLDExIEBACiAKIHZvaWQgaWRlX3NldF9pcnEoaWRlX2h3aWZfdCAqLCBpbnQpOwogCi12b2lkIGlkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICosIGlkZV90YXNrX3QgKik7Ci12b2lkIGlkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICosIGlkZV90YXNrX3QgKik7Cit2b2lkIGlkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICopOwordm9pZCBpZGVfdGZfcmVhZChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKIAotdm9pZCBpZGVfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCB2b2lkICosIHVuc2lnbmVkIGludCk7Ci12b2lkIGlkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCB2b2lkICosIHVuc2lnbmVkIGludCk7Cit2b2lkIGlkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICosIHZvaWQgKiwgdW5zaWduZWQgaW50KTsKK3ZvaWQgaWRlX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICosIHZvaWQgKiwgdW5zaWduZWQgaW50KTsKIAogaW50IGlkZV9pb19idWZmZXJzKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfYXRhcGlfcGMgKiwgdW5zaWduZWQgaW50LCBpbnQpOwogCkBAIC0xMjI0LDE2ICsxMjIyLDE2IEBACiAKIGludCBpZGVfY2RfZ2V0X3hmZXJsZW4oc3RydWN0IHJlcXVlc3QgKik7CiAKLWlkZV9zdGFydHN0b3BfdCBpZGVfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKik7CitpZGVfc3RhcnRzdG9wX3QgaWRlX2lzc3VlX3BjKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICopOwogCi1pZGVfc3RhcnRzdG9wX3QgZG9fcndfdGFza2ZpbGUoaWRlX2RyaXZlX3QgKiwgaWRlX3Rhc2tfdCAqKTsKK2lkZV9zdGFydHN0b3BfdCBkb19yd190YXNrZmlsZShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKIAotdm9pZCB0YXNrX2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHU4KTsKK3ZvaWQgaWRlX2ZpbmlzaF9jbWQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKiwgdTgpOwogCi1pbnQgaWRlX3Jhd190YXNrZmlsZShpZGVfZHJpdmVfdCAqLCBpZGVfdGFza190ICosIHU4ICosIHUxNik7Ci1pbnQgaWRlX25vX2RhdGFfdGFza2ZpbGUoaWRlX2RyaXZlX3QgKiwgaWRlX3Rhc2tfdCAqKTsKK2ludCBpZGVfcmF3X3Rhc2tmaWxlKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICosIHU4ICosIHUxNik7CitpbnQgaWRlX25vX2RhdGFfdGFza2ZpbGUoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CiAKLWludCBpZGVfdGFza2ZpbGVfaW9jdGwoaWRlX2RyaXZlX3QgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKK2ludCBpZGVfdGFza2ZpbGVfaW9jdGwoaWRlX2RyaXZlX3QgKiwgdW5zaWduZWQgbG9uZyk7CiAKIGludCBpZGVfZGV2X3JlYWRfaWQoaWRlX2RyaXZlX3QgKiwgdTgsIHUxNiAqKTsKIApAQCAtMTMzNSw2ICsxMzMzLDEwIEBACiAJSURFX0hGTEFHX0VSUk9SX1NUT1BTX0ZJRk8JPSAoMSA8PCAxOSksCiAJLyogc2VyaWFsaXplIHBvcnRzICovCiAJSURFX0hGTEFHX1NFUklBTElaRQkJPSAoMSA8PCAyMCksCisJLyogaG9zdCBpcyBEVEMyMjc4ICovCisJSURFX0hGTEFHX0RUQzIyNzgJCT0gKDEgPDwgMjEpLAorCS8qIDQgZGV2aWNlcyBvbiBhIHNpbmdsZSBzZXQgb2YgSS9PIHBvcnRzICovCisJSURFX0hGTEFHXzREUklWRVMJCT0gKDEgPDwgMjIpLAogCS8qIGhvc3QgaXMgVFJNMjkwICovCiAJSURFX0hGTEFHX1RSTTI5MAkJPSAoMSA8PCAyMyksCiAJLyogdXNlIDMyLWJpdCBJL08gb3BzICovCkBAIC0xMzYyLDcgKzEzNjQsMTIgQEAKIAogc3RydWN0IGlkZV9wb3J0X2luZm8gewogCWNoYXIJCQkqbmFtZTsKKwogCWludAkJCSgqaW5pdF9jaGlwc2V0KShzdHJ1Y3QgcGNpX2RldiAqKTsKKworCXZvaWQJCQkoKmdldF9sb2NrKShpcnFfaGFuZGxlcl90LCB2b2lkICopOworCXZvaWQJCQkoKnJlbGVhc2VfbG9jaykodm9pZCk7CisKIAl2b2lkCQkJKCppbml0X2lvcHMpKGlkZV9od2lmX3QgKik7CiAJdm9pZCAgICAgICAgICAgICAgICAgICAgKCppbml0X2h3aWYpKGlkZV9od2lmX3QgKik7CiAJaW50CQkJKCppbml0X2RtYSkoaWRlX2h3aWZfdCAqLApAQCAtMTM3OSw2ICsxMzg2LDkgQEAKIAl1MTYJCQltYXhfc2VjdG9yczsJLyogaWYgPCB0aGFuIHRoZSBkZWZhdWx0IG9uZSAqLwogCiAJdTMyCQkJaG9zdF9mbGFnczsKKworCWludAkJCWlycV9mbGFnczsKKwogCXU4CQkJcGlvX21hc2s7CiAJdTgJCQlzd2RtYV9tYXNrOwogCXU4CQkJbXdkbWFfbWFzazsKQEAgLTEzOTgsOCArMTQwOCw4IEBACiAjZGVmaW5lIGlkZV9wY2lfcmVzdW1lIE5VTEwKICNlbmRpZgogCi12b2lkIGlkZV9tYXBfc2coaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Ci12b2lkIGlkZV9pbml0X3NnX2NtZChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK3ZvaWQgaWRlX21hcF9zZyhpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKK3ZvaWQgaWRlX2luaXRfc2dfY21kKHN0cnVjdCBpZGVfY21kICosIHVuc2lnbmVkIGludCk7CiAKICNkZWZpbmUgQkFEX0RNQV9EUklWRQkJMAogI2RlZmluZSBHT09EX0RNQV9EUklWRQkJMQpAQCAtMTQzMywxOCArMTQ0MywxOCBAQAogaW50IGlkZV9hbGxvY2F0ZV9kbWFfZW5naW5lKGlkZV9od2lmX3QgKik7CiB2b2lkIGlkZV9yZWxlYXNlX2RtYV9lbmdpbmUoaWRlX2h3aWZfdCAqKTsKIAotaW50IGlkZV9idWlsZF9zZ2xpc3QoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CitpbnQgaWRlX2J1aWxkX3NnbGlzdChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKIHZvaWQgaWRlX2Rlc3Ryb3lfZG1hdGFibGUoaWRlX2RyaXZlX3QgKik7CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGCiBpbnQgY29uZmlnX2RyaXZlX2Zvcl9kbWEoaWRlX2RyaXZlX3QgKik7Ci1leHRlcm4gaW50IGlkZV9idWlsZF9kbWF0YWJsZShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK2ludCBpZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CiB2b2lkIGlkZV9kbWFfaG9zdF9zZXQoaWRlX2RyaXZlX3QgKiwgaW50KTsKLWV4dGVybiBpbnQgaWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqKTsKLXZvaWQgaWRlX2RtYV9leGVjX2NtZChpZGVfZHJpdmVfdCAqLCB1OCk7CitpbnQgaWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKIGV4dGVybiB2b2lkIGlkZV9kbWFfc3RhcnQoaWRlX2RyaXZlX3QgKik7CiBpbnQgaWRlX2RtYV9lbmQoaWRlX2RyaXZlX3QgKik7CiBpbnQgaWRlX2RtYV90ZXN0X2lycShpZGVfZHJpdmVfdCAqKTsKK2ludCBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnkoaWRlX2RyaXZlX3QgKik7CiB1OCBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cyhpZGVfaHdpZl90ICopOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBzZmZfZG1hX29wczsKICNlbHNlCkBAIC0xNDY1LDggKzE0NzUsMTEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfZG1hX3ZlcmJvc2UoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IDsgfQogc3RhdGljIGlubGluZSBpbnQgaWRlX3NldF9kbWEoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IHJldHVybiAxOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2NoZWNrX2RtYV9jcmMoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IDsgfQorc3RhdGljIGlubGluZSBpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV9pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSkgeyByZXR1cm4gaWRlX3N0b3BwZWQ7IH0KIHN0YXRpYyBpbmxpbmUgaWRlX3N0YXJ0c3RvcF90IGlkZV9kbWFfdGltZW91dF9yZXRyeShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBlcnJvcikgeyByZXR1cm4gaWRlX3N0b3BwZWQ7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfcmVsZWFzZV9kbWFfZW5naW5lKGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9CitzdGF0aWMgaW5saW5lIGludCBpZGVfYnVpbGRfc2dsaXN0KGlkZV9kcml2ZV90ICpkcml2ZSwKKwkJCQkgICBzdHJ1Y3QgaWRlX2NtZCAqY21kKSB7IHJldHVybiAwOyB9CiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFRE1BICovCiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVBQ1BJCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVsLWlvbW11LmggYi9pbmNsdWRlL2xpbnV4L2ludGVsLWlvbW11LmgKaW5kZXggZDJlM2NiZi4uMWQ2YzcxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oCisrKyBiL2luY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaApAQCAtMjkyLDYgKzI5Miw4IEBACiAJc3BpbmxvY2tfdAlyZWdpc3Rlcl9sb2NrOyAvKiBwcm90ZWN0IHJlZ2lzdGVyIGhhbmRsaW5nICovCiAJaW50CQlzZXFfaWQ7CS8qIHNlcXVlbmNlIGlkIG9mIHRoZSBpb21tdSAqLwogCWludAkJYWdhdzsgLyogYWdhdyBvZiB0aGlzIGlvbW11ICovCisJdW5zaWduZWQgaW50IAlpcnE7CisJdW5zaWduZWQgY2hhciAJbmFtZVsxM107ICAgIC8qIERldmljZSBOYW1lICovCiAKICNpZmRlZiBDT05GSUdfRE1BUgogCXVuc2lnbmVkIGxvbmcgCSpkb21haW5faWRzOyAvKiBiaXRtYXAgb2YgZG9tYWlucyAqLwpAQCAtMjk5LDggKzMwMSw2IEBACiAJc3BpbmxvY2tfdAlsb2NrOyAvKiBwcm90ZWN0IGNvbnRleHQsIGRvbWFpbiBpZHMgKi8KIAlzdHJ1Y3Qgcm9vdF9lbnRyeSAqcm9vdF9lbnRyeTsgLyogdmlydHVhbCBhZGRyZXNzICovCiAKLQl1bnNpZ25lZCBpbnQgaXJxOwotCXVuc2lnbmVkIGNoYXIgbmFtZVs3XTsgICAgLyogRGV2aWNlIE5hbWUgKi8KIAlzdHJ1Y3QgaW9tbXVfZmx1c2ggZmx1c2g7CiAjZW5kaWYKIAlzdHJ1Y3QgcV9pbnZhbCAgKnFpOyAgICAgICAgICAgIC8qIFF1ZXVlZCBpbnZhbGlkYXRpb24gaW5mbyAqLwpAQCAtMzIxLDYgKzMyMSw3IEBACiBleHRlcm4gaW50IGFsbG9jX2lvbW11KHN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqZHJoZCk7CiBleHRlcm4gdm9pZCBmcmVlX2lvbW11KHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpOwogZXh0ZXJuIGludCBkbWFyX2VuYWJsZV9xaShzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KTsKK2V4dGVybiB2b2lkIGRtYXJfZGlzYWJsZV9xaShzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KTsKIGV4dGVybiB2b2lkIHFpX2dsb2JhbF9pZWMoc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7CiAKIGV4dGVybiBpbnQgcWlfZmx1c2hfY29udGV4dChzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCB1MTYgZGlkLCB1MTYgc2lkLApAQCAtMzMxLDExICszMzIsNCBAQAogCiBleHRlcm4gaW50IHFpX3N1Ym1pdF9zeW5jKHN0cnVjdCBxaV9kZXNjICpkZXNjLCBzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KTsKIAotZXh0ZXJuIHZvaWQgKmludGVsX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKiwgc2l6ZV90LCBkbWFfYWRkcl90ICosIGdmcF90KTsKLWV4dGVybiB2b2lkIGludGVsX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqLCBzaXplX3QsIHZvaWQgKiwgZG1hX2FkZHJfdCk7Ci1leHRlcm4gZG1hX2FkZHJfdCBpbnRlbF9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKiwgcGh5c19hZGRyX3QsIHNpemVfdCwgaW50KTsKLWV4dGVybiB2b2lkIGludGVsX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICosIGRtYV9hZGRyX3QsIHNpemVfdCwgaW50KTsKLWV4dGVybiBpbnQgaW50ZWxfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgaW50KTsKLWV4dGVybiB2b2lkIGludGVsX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgaW50KTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAppbmRleCAwYzljYjYzLi5jNjhiZmZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKQEAgLTExNyw2ICsxMTcsMTUgQEAKIGV4dGVybiB2b2lkIGRpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpOwogZXh0ZXJuIHZvaWQgZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIAorLyogVGhlIGZvbGxvd2luZyB0aHJlZSBmdW5jdGlvbnMgYXJlIGZvciB0aGUgY29yZSBrZXJuZWwgdXNlIG9ubHkuICovCitleHRlcm4gdm9pZCBzdXNwZW5kX2RldmljZV9pcnFzKHZvaWQpOworZXh0ZXJuIHZvaWQgcmVzdW1lX2RldmljZV9pcnFzKHZvaWQpOworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorZXh0ZXJuIGludCBjaGVja193YWtldXBfaXJxcyh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBjaGVja193YWtldXBfaXJxcyh2b2lkKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgZGVmaW5lZChDT05GSUdfR0VORVJJQ19IQVJESVJRUykKIAogZXh0ZXJuIGNwdW1hc2tfdmFyX3QgaXJxX2RlZmF1bHRfYWZmaW5pdHk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwbWlfc21pLmggYi9pbmNsdWRlL2xpbnV4L2lwbWlfc21pLmgKaW5kZXggNjJiNzM2Ni4uZjdjOWM3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcG1pX3NtaS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXBtaV9zbWkuaApAQCAtMjMwLDYgKzIzMCw2IEBACiAgICBhdXRvbWF0aWNhbGx5IGJlIGRzdHJveWVkIHdoZW4gdGhlIGludGVyZmFjZSBpcyBkZXN0cm95ZWQuICovCiBpbnQgaXBtaV9zbWlfYWRkX3Byb2NfZW50cnkoaXBtaV9zbWlfdCBzbWksIGNoYXIgKm5hbWUsCiAJCQkgICAgcmVhZF9wcm9jX3QgKnJlYWRfcHJvYywKLQkJCSAgICB2b2lkICpkYXRhLCBzdHJ1Y3QgbW9kdWxlICpvd25lcik7CisJCQkgICAgdm9pZCAqZGF0YSk7CiAKICNlbmRpZiAvKiBfX0xJTlVYX0lQTUlfU01JX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxLmggYi9pbmNsdWRlL2xpbnV4L2lycS5oCmluZGV4IDg3M2U0YWMuLjk3NDg5MGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnEuaApAQCAtMTcsOSArMTcsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgogI2luY2x1ZGUgPGxpbnV4L2lycW5yLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KQEAgLTY1LDYgKzY3LDcgQEAKICNkZWZpbmUgSVJRX1NQVVJJT1VTX0RJU0FCTEVECTB4MDA4MDAwMDAJLyogSVJRIHdhcyBkaXNhYmxlZCBieSB0aGUgc3B1cmlvdXMgdHJhcCAqLwogI2RlZmluZSBJUlFfTU9WRV9QQ05UWFQJCTB4MDEwMDAwMDAJLyogSVJRIG1pZ3JhdGlvbiBmcm9tIHByb2Nlc3MgY29udGV4dCAqLwogI2RlZmluZSBJUlFfQUZGSU5JVFlfU0VUCTB4MDIwMDAwMDAJLyogSVJRIGFmZmluaXR5IHdhcyBzZXQgZnJvbSB1c2Vyc3BhY2UqLworI2RlZmluZSBJUlFfU1VTUEVOREVECQkweDA0MDAwMDAwCS8qIElSUSBoYXMgZ29uZSB0aHJvdWdoIHN1c3BlbmQgc2VxdWVuY2UgKi8KIAogI2lmZGVmIENPTkZJR19JUlFfUEVSX0NQVQogIyBkZWZpbmUgQ0hFQ0tfSVJRX1BFUl9DUFUodmFyKSAoKHZhcikgJiBJUlFfUEVSX0NQVSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXZ0di5oIGIvaW5jbHVkZS9saW51eC9pdnR2LmgKaW5kZXggZjI3MjAyOC4uMDYyZDIwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pdnR2LmgKKysrIGIvaW5jbHVkZS9saW51eC9pdnR2LmgKQEAgLTYwLDEwICs2MCwxMCBAQAogCiAjZGVmaW5lIElWVFZfSU9DX0RNQV9GUkFNRSAgX0lPVyAoJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFKzAsIHN0cnVjdCBpdnR2X2RtYV9mcmFtZSkKIAotLyogVGhlc2UgYXJlIHRoZSBWQkkgdHlwZXMgYXMgdGhleSBhcHBlYXIgaW4gdGhlIGVtYmVkZGVkIFZCSSBwcml2YXRlIHBhY2tldHMuICovCi0jZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfVEVMRVRFWFRfQiAgICAgKDEpCi0jZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfQ0FQVElPTl81MjUgICAgKDQpCi0jZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfV1NTXzYyNSAgICAgICAgKDUpCi0jZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfVlBTICAgICAgICAgICAgKDcpCisvKiBEZXByZWNhdGVkIGRlZmluZXM6IGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZSBkZWZpbmVzIGZyb20gdmlkZW9kZXYyLmggKi8KKyNkZWZpbmUgSVZUVl9TTElDRURfVFlQRV9URUxFVEVYVF9CICAgICBWNEwyX01QRUdfVkJJX0lWVFZfVEVMRVRFWFRfQgorI2RlZmluZSBJVlRWX1NMSUNFRF9UWVBFX0NBUFRJT05fNTI1ICAgIFY0TDJfTVBFR19WQklfSVZUVl9DQVBUSU9OXzUyNQorI2RlZmluZSBJVlRWX1NMSUNFRF9UWVBFX1dTU182MjUgICAgICAgIFY0TDJfTVBFR19WQklfSVZUVl9XU1NfNjI1CisjZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfVlBTICAgICAgICAgICAgVjRMMl9NUEVHX1ZCSV9JVlRWX1ZQUwogCiAjZW5kaWYgLyogX0xJTlVYX0lWVFZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaAppbmRleCAyM2JmMDJmLi41YTU4ZWEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaApAQCAtMjAsNDMgKzIwLDEwIEBACiAjaW5jbHVkZSA8bGludXgvc3RhY2t0cmFjZS5oPgogCiAvKgotICogTG9jay1jbGFzcyB1c2FnZS1zdGF0ZSBiaXRzOgorICogV2UnZCByYXRoZXIgbm90IGV4cG9zZSBrZXJuZWwvbG9ja2RlcF9zdGF0ZXMuaCB0aGlzIHdpZGUsIGJ1dCB3ZSBkbyBuZWVkCisgKiB0aGUgdG90YWwgbnVtYmVyIG9mIHN0YXRlcy4uLiA6LSgKICAqLwotZW51bSBsb2NrX3VzYWdlX2JpdAotewotCUxPQ0tfVVNFRCA9IDAsCi0JTE9DS19VU0VEX0lOX0hBUkRJUlEsCi0JTE9DS19VU0VEX0lOX1NPRlRJUlEsCi0JTE9DS19FTkFCTEVEX1NPRlRJUlFTLAotCUxPQ0tfRU5BQkxFRF9IQVJESVJRUywKLQlMT0NLX1VTRURfSU5fSEFSRElSUV9SRUFELAotCUxPQ0tfVVNFRF9JTl9TT0ZUSVJRX1JFQUQsCi0JTE9DS19FTkFCTEVEX1NPRlRJUlFTX1JFQUQsCi0JTE9DS19FTkFCTEVEX0hBUkRJUlFTX1JFQUQsCi0JTE9DS19VU0FHRV9TVEFURVMKLX07Ci0KLS8qCi0gKiBVc2FnZS1zdGF0ZSBiaXRtYXNrczoKLSAqLwotI2RlZmluZSBMT0NLRl9VU0VECQkJKDEgPDwgTE9DS19VU0VEKQotI2RlZmluZSBMT0NLRl9VU0VEX0lOX0hBUkRJUlEJCSgxIDw8IExPQ0tfVVNFRF9JTl9IQVJESVJRKQotI2RlZmluZSBMT0NLRl9VU0VEX0lOX1NPRlRJUlEJCSgxIDw8IExPQ0tfVVNFRF9JTl9TT0ZUSVJRKQotI2RlZmluZSBMT0NLRl9FTkFCTEVEX0hBUkRJUlFTCQkoMSA8PCBMT0NLX0VOQUJMRURfSEFSRElSUVMpCi0jZGVmaW5lIExPQ0tGX0VOQUJMRURfU09GVElSUVMJCSgxIDw8IExPQ0tfRU5BQkxFRF9TT0ZUSVJRUykKLQotI2RlZmluZSBMT0NLRl9FTkFCTEVEX0lSUVMgKExPQ0tGX0VOQUJMRURfSEFSRElSUVMgfCBMT0NLRl9FTkFCTEVEX1NPRlRJUlFTKQotI2RlZmluZSBMT0NLRl9VU0VEX0lOX0lSUSAoTE9DS0ZfVVNFRF9JTl9IQVJESVJRIHwgTE9DS0ZfVVNFRF9JTl9TT0ZUSVJRKQotCi0jZGVmaW5lIExPQ0tGX1VTRURfSU5fSEFSRElSUV9SRUFECSgxIDw8IExPQ0tfVVNFRF9JTl9IQVJESVJRX1JFQUQpCi0jZGVmaW5lIExPQ0tGX1VTRURfSU5fU09GVElSUV9SRUFECSgxIDw8IExPQ0tfVVNFRF9JTl9TT0ZUSVJRX1JFQUQpCi0jZGVmaW5lIExPQ0tGX0VOQUJMRURfSEFSRElSUVNfUkVBRAkoMSA8PCBMT0NLX0VOQUJMRURfSEFSRElSUVNfUkVBRCkKLSNkZWZpbmUgTE9DS0ZfRU5BQkxFRF9TT0ZUSVJRU19SRUFECSgxIDw8IExPQ0tfRU5BQkxFRF9TT0ZUSVJRU19SRUFEKQotCi0jZGVmaW5lIExPQ0tGX0VOQUJMRURfSVJRU19SRUFEIFwKLQkJKExPQ0tGX0VOQUJMRURfSEFSRElSUVNfUkVBRCB8IExPQ0tGX0VOQUJMRURfU09GVElSUVNfUkVBRCkKLSNkZWZpbmUgTE9DS0ZfVVNFRF9JTl9JUlFfUkVBRCBcCi0JCShMT0NLRl9VU0VEX0lOX0hBUkRJUlFfUkVBRCB8IExPQ0tGX1VTRURfSU5fU09GVElSUV9SRUFEKQorI2RlZmluZSBYWFhfTE9DS19VU0FHRV9TVEFURVMJCSgxKzMqNCkKIAogI2RlZmluZSBNQVhfTE9DS0RFUF9TVUJDTEFTU0VTCQk4VUwKIApAQCAtOTcsNyArNjQsNyBAQAogCSAqIElSUS9zb2Z0aXJxIHVzYWdlIHRyYWNraW5nIGJpdHM6CiAJICovCiAJdW5zaWduZWQgbG9uZwkJCXVzYWdlX21hc2s7Ci0Jc3RydWN0IHN0YWNrX3RyYWNlCQl1c2FnZV90cmFjZXNbTE9DS19VU0FHRV9TVEFURVNdOworCXN0cnVjdCBzdGFja190cmFjZQkJdXNhZ2VfdHJhY2VzW1hYWF9MT0NLX1VTQUdFX1NUQVRFU107CiAKIAkvKgogCSAqIFRoZXNlIGZpZWxkcyByZXByZXNlbnQgYSBkaXJlY3RlZCBncmFwaCBvZiBsb2NrIGRlcGVuZGVuY2llcywKQEAgLTMyNCw3ICsyOTEsMTEgQEAKIAlsb2NrX3NldF9jbGFzcyhsb2NrLCBsb2NrLT5uYW1lLCBsb2NrLT5rZXksIHN1YmNsYXNzLCBpcCk7CiB9CiAKLSMgZGVmaW5lIElOSVRfTE9DS0RFUAkJCQkubG9ja2RlcF9yZWN1cnNpb24gPSAwLAorZXh0ZXJuIHZvaWQgbG9ja2RlcF9zZXRfY3VycmVudF9yZWNsYWltX3N0YXRlKGdmcF90IGdmcF9tYXNrKTsKK2V4dGVybiB2b2lkIGxvY2tkZXBfY2xlYXJfY3VycmVudF9yZWNsYWltX3N0YXRlKHZvaWQpOworZXh0ZXJuIHZvaWQgbG9ja2RlcF90cmFjZV9hbGxvYyhnZnBfdCBtYXNrKTsKKworIyBkZWZpbmUgSU5JVF9MT0NLREVQCQkJCS5sb2NrZGVwX3JlY3Vyc2lvbiA9IDAsIC5sb2NrZGVwX3JlY2xhaW1fZ2ZwID0gMCwKIAogI2RlZmluZSBsb2NrZGVwX2RlcHRoKHRzaykJKGRlYnVnX2xvY2tzID8gKHRzayktPmxvY2tkZXBfZGVwdGggOiAwKQogCkBAIC0zNDIsNiArMzEzLDkgQEAKICMgZGVmaW5lIGxvY2tfcmVsZWFzZShsLCBuLCBpKQkJCWRvIHsgfSB3aGlsZSAoMCkKICMgZGVmaW5lIGxvY2tfc2V0X2NsYXNzKGwsIG4sIGssIHMsIGkpCQlkbyB7IH0gd2hpbGUgKDApCiAjIGRlZmluZSBsb2NrX3NldF9zdWJjbGFzcyhsLCBzLCBpKQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgbG9ja2RlcF9zZXRfY3VycmVudF9yZWNsYWltX3N0YXRlKGcpCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIGxvY2tkZXBfY2xlYXJfY3VycmVudF9yZWNsYWltX3N0YXRlKCkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgbG9ja2RlcF90cmFjZV9hbGxvYyhnKQkJCWRvIHsgfSB3aGlsZSAoMCkKICMgZGVmaW5lIGxvY2tkZXBfaW5pdCgpCQkJCWRvIHsgfSB3aGlsZSAoMCkKICMgZGVmaW5lIGxvY2tkZXBfaW5mbygpCQkJCWRvIHsgfSB3aGlsZSAoMCkKICMgZGVmaW5lIGxvY2tkZXBfaW5pdF9tYXAobG9jaywgbmFtZSwga2V5LCBzdWIpIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCAwNjVjZGY4Li5iMWVhMzdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0xMDQsNiArMTA0LDcgQEAKICNkZWZpbmUgVk1fQ0FOX05PTkxJTkVBUiAweDA4MDAwMDAwCS8qIEhhcyAtPmZhdWx0ICYgZG9lcyBub25saW5lYXIgcGFnZXMgKi8KICNkZWZpbmUgVk1fTUlYRURNQVAJMHgxMDAwMDAwMAkvKiBDYW4gY29udGFpbiAic3RydWN0IHBhZ2UiIGFuZCBwdXJlIFBGTiBwYWdlcyAqLwogI2RlZmluZSBWTV9TQU8JCTB4MjAwMDAwMDAJLyogU3Ryb25nIEFjY2VzcyBPcmRlcmluZyAocG93ZXJwYykgKi8KKyNkZWZpbmUgVk1fUEZOX0FUX01NQVAJMHg0MDAwMDAwMAkvKiBQRk5NQVAgdm1hIHRoYXQgaXMgZnVsbHkgbWFwcGVkIGF0IG1tYXAgdGltZSAqLwogCiAjaWZuZGVmIFZNX1NUQUNLX0RFRkFVTFRfRkxBR1MJCS8qIGFyY2ggY2FuIG92ZXJyaWRlIHRoaXMgKi8KICNkZWZpbmUgVk1fU1RBQ0tfREVGQVVMVF9GTEFHUyBWTV9EQVRBX0RFRkFVTFRfRkxBR1MKQEAgLTE0NSw3ICsxNDYsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBpc19saW5lYXJfcGZuX21hcHBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0JcmV0dXJuICgodm1hLT52bV9mbGFncyAmIFZNX1BGTk1BUCkgJiYgdm1hLT52bV9wZ29mZik7CisJcmV0dXJuICh2bWEtPnZtX2ZsYWdzICYgVk1fUEZOX0FUX01NQVApOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpc19wZm5fbWFwcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXV0ZXguaCBiL2luY2x1ZGUvbGludXgvbXV0ZXguaAppbmRleCA3YTBlNWM0Li4zMDY5ZWM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L211dGV4LmgKKysrIGIvaW5jbHVkZS9saW51eC9tdXRleC5oCkBAIC01MCw4ICs1MCwxMCBAQAogCWF0b21pY190CQljb3VudDsKIAlzcGlubG9ja190CQl3YWl0X2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAl3YWl0X2xpc3Q7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX01VVEVYRVMKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19NVVRFWEVTKSB8fCBkZWZpbmVkKENPTkZJR19TTVApCiAJc3RydWN0IHRocmVhZF9pbmZvCSpvd25lcjsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19ERUJVR19NVVRFWEVTCiAJY29uc3QgY2hhciAJCSpuYW1lOwogCXZvaWQJCQkqbWFnaWM7CiAjZW5kaWYKQEAgLTY4LDcgKzcwLDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiAJc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOwogI2lmZGVmIENPTkZJR19ERUJVR19NVVRFWEVTCi0Jc3RydWN0IG11dGV4CQkqbG9jazsKIAl2b2lkCQkJKm1hZ2ljOwogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggN2JkNjI0Yi4uZGYzNjQ0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC02ODksNiArNjg5LDcgQEAKIC8qIFBvd2VyIG1hbmFnZW1lbnQgcmVsYXRlZCByb3V0aW5lcyAqLwogaW50IHBjaV9zYXZlX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogaW50IHBjaV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworaW50IF9fcGNpX2NvbXBsZXRlX3Bvd2VyX3RyYW5zaXRpb24oc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUpOwogaW50IHBjaV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUpOwogcGNpX3Bvd2VyX3QgcGNpX2Nob29zZV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogYm9vbCBwY2lfcG1lX2NhcGFibGUoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCAyYzllODA4Li5lNTgxNmRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtMjIzMiw2ICsyMjMyLDE0IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVERJX0VIQ0kgICAgICAgICAgMHgwMTAxCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9GUkVFU0NBTEUJCTB4MTk1NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01QQzgzMTVFCQkweDAwYjQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4MzE1CQkweDAwYjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4MzE0RQkJMHgwMGI2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVBDODMxNAkJMHgwMGI3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVBDODM3OEUJCTB4MDBjNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01QQzgzNzgJCTB4MDBjNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01QQzgzNzdFCQkweDAwYzYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4Mzc3CQkweDAwYzcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4NTQ4RQkJMHgwMDEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVBDODU0OAkJMHgwMDEzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVBDODU0M0UJCTB4MDAxNApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaAppbmRleCBiOGJkYjk2Li5mYmZhM2Q0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaApAQCAtNDEsOSArNDEsNiBAQAogICogd2hpbGUgcGFyZW50L3N1YmRpciBjcmVhdGUgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgKGV2ZXJ5CiAgKiAvcHJvYyBmaWxlIGhhcyBhIHBhcmVudCwgYnV0ICJzdWJkaXIiIGlzIE5VTEwgZm9yIGFsbAogICogbm9uLWRpcmVjdG9yeSBlbnRyaWVzKS4KLSAqCi0gKiAib3duZXIiIGlzIHVzZWQgdG8gcHJvdGVjdCBtb2R1bGUKLSAqIGZyb20gdW5sb2FkaW5nIHdoaWxlIHByb2NfZGlyX2VudHJ5IGlzIGluIHVzZQogICovCiAKIHR5cGVkZWYJaW50IChyZWFkX3Byb2NfdCkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCkBAIC03MCw3ICs2Nyw2IEBACiAJICogc29tZXdoZXJlLgogCSAqLwogCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKnByb2NfZm9wczsKLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKm5leHQsICpwYXJlbnQsICpzdWJkaXI7CiAJdm9pZCAqZGF0YTsKIAlyZWFkX3Byb2NfdCAqcmVhZF9wcm9jOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19hY2wuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfYWNsLmgKaW5kZXggZmUwMGY3OC4uOGNjNjU3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19hY2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2FjbC5oCkBAIC00OSwxMyArNDksMTIgQEAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMCiBzdHJ1Y3QgcG9zaXhfYWNsICpyZWlzZXJmc19nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKTsKIGludCByZWlzZXJmc19hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSk7Ci1pbnQgcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAoraW50IHJlaXNlcmZzX2luaGVyaXRfZGVmYXVsdF9hY2woc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCQkJIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW50IHJlaXNlcmZzX2NhY2hlX2RlZmF1bHRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyKTsKLWV4dGVybiBpbnQgcmVpc2VyZnNfeGF0dHJfcG9zaXhfYWNsX2luaXQodm9pZCkgX19pbml0OwotZXh0ZXJuIGludCByZWlzZXJmc194YXR0cl9wb3NpeF9hY2xfZXhpdCh2b2lkKTsKLWV4dGVybiBzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciBwb3NpeF9hY2xfZGVmYXVsdF9oYW5kbGVyOwotZXh0ZXJuIHN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHBvc2l4X2FjbF9hY2Nlc3NfaGFuZGxlcjsKK2V4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciByZWlzZXJmc19wb3NpeF9hY2xfZGVmYXVsdF9oYW5kbGVyOworZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIHJlaXNlcmZzX3Bvc2l4X2FjbF9hY2Nlc3NfaGFuZGxlcjsKIAogc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX2luaXRfYWNsX2FjY2VzcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpAQCAtNzUsMjMgKzc0LDE0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX3hhdHRyX3Bvc2l4X2FjbF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX3hhdHRyX3Bvc2l4X2FjbF9leGl0KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludAotcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbChjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAppbmRleCBlMzU2Yzk5Li4yMjQ1Yzc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCkBAIC01OCw4ICs1OCw2IEBACiAjZGVmaW5lIHJlaXNlcmZzX3dyaXRlX2xvY2soIHNiICkgbG9ja19rZXJuZWwoKQogI2RlZmluZSByZWlzZXJmc193cml0ZV91bmxvY2soIHNiICkgdW5sb2NrX2tlcm5lbCgpCiAKLS8qIHhhdHRyIHN0dWZmICovCi0jZGVmaW5lIFJFSVNFUkZTX1hBVFRSX0RJUl9TRU0ocykgKFJFSVNFUkZTX1NCKHMpLT54YXR0cl9kaXJfc2VtKQogc3RydWN0IGZpZDsKIAogLyogaW4gcmVhZGluZyB0aGUgI2RlZmluZXMsIGl0IG1heSBoZWxwIHRvIHVuZGVyc3RhbmQgdGhhdCB0aGV5IGVtcGxveQpAQCAtMTA0LDE1ICsxMDIsMjEgQEAKICovCiAjZGVmaW5lIFJFSVNFUkZTX0RFQlVHX0NPREUgNQkvKiBleHRyYSBtZXNzYWdlcyB0byBoZWxwIGZpbmQvZGVidWcgZXJyb3JzICovCiAKLXZvaWQgcmVpc2VyZnNfd2FybmluZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3ZvaWQgX19yZWlzZXJmc193YXJuaW5nKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgY29uc3QgY2hhciAqaWQsCisJCQkgY29uc3QgY2hhciAqZnVuYywgY29uc3QgY2hhciAqZm10LCAuLi4pOworI2RlZmluZSByZWlzZXJmc193YXJuaW5nKHMsIGlkLCBmbXQsIGFyZ3MuLi4pIFwKKwkgX19yZWlzZXJmc193YXJuaW5nKHMsIGlkLCBfX2Z1bmNfXywgZm10LCAjI2FyZ3MpCiAvKiBhc3NlcnRpb25zIGhhbmRsaW5nICovCiAKIC8qKiBhbHdheXMgY2hlY2sgYSBjb25kaXRpb24gYW5kIHBhbmljIGlmIGl0J3MgZmFsc2UuICovCi0jZGVmaW5lIF9fUkFTU0VSVCggY29uZCwgc2NvbmQsIGZvcm1hdCwgYXJncy4uLiApCQkJCQlcCi1pZiggISggY29uZCApICkgCQkJCQkJCQlcCi0gIHJlaXNlcmZzX3BhbmljKCBOVUxMLCAicmVpc2VyZnNbJWldOiBhc3NlcnRpb24gIiBzY29uZCAiIGZhaWxlZCBhdCAiCVwKLQkJICBfX0ZJTEVfXyAiOiVpOiVzOiAiIGZvcm1hdCAiXG4iLAkJXAotCQkgIGluX2ludGVycnVwdCgpID8gLTEgOiB0YXNrX3BpZF9ucihjdXJyZW50KSwgX19MSU5FX18gLCBfX2Z1bmNfXyAsICMjYXJncyApCisjZGVmaW5lIF9fUkFTU0VSVChjb25kLCBzY29uZCwgZm9ybWF0LCBhcmdzLi4uKQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKCEoY29uZCkpCQkJCQkJCVwKKwkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgImFzc2VydGlvbiBmYWlsdXJlIiwgIigiICNjb25kICIpIGF0ICIgXAorCQkJICAgICAgIF9fRklMRV9fICI6JWk6JXM6ICIgZm9ybWF0ICJcbiIsCQlcCisJCQkgICAgICAgaW5faW50ZXJydXB0KCkgPyAtMSA6IHRhc2tfcGlkX25yKGN1cnJlbnQpLCBcCisJCQkgICAgICAgX19MSU5FX18sIF9fZnVuY19fICwgIyNhcmdzKTsJCVwKK30gd2hpbGUgKDApCiAKICNkZWZpbmUgUkFTU0VSVChjb25kLCBmb3JtYXQsIGFyZ3MuLi4pIF9fUkFTU0VSVChjb25kLCAjY29uZCwgZm9ybWF0LCAjI2FyZ3MpCiAKQEAgLTE5Niw3ICsyMDAsMTEgQEAKIAlfX2xlMzIgc19mbGFnczsJCS8qIFJpZ2h0IG5vdyB1c2VkIG9ubHkgYnkgaW5vZGUtYXR0cmlidXRlcywgaWYgZW5hYmxlZCAqLwogCXVuc2lnbmVkIGNoYXIgc191dWlkWzE2XTsJLyogZmlsZXN5c3RlbSB1bmlxdWUgaWRlbnRpZmllciAqLwogCXVuc2lnbmVkIGNoYXIgc19sYWJlbFsxNl07CS8qIGZpbGVzeXN0ZW0gdm9sdW1lIGxhYmVsICovCi0JY2hhciBzX3VudXNlZFs4OF07CS8qIHplcm8gZmlsbGVkIGJ5IG1rcmVpc2VyZnMgYW5kCisJX19sZTE2IHNfbW50X2NvdW50OwkJLyogQ291bnQgb2YgbW91bnRzIHNpbmNlIGxhc3QgZnNjayAqLworCV9fbGUxNiBzX21heF9tbnRfY291bnQ7CQkvKiBNYXhpbXVtIG1vdW50cyBiZWZvcmUgY2hlY2sgKi8KKwlfX2xlMzIgc19sYXN0Y2hlY2s7CQkvKiBUaW1lc3RhbXAgb2YgbGFzdCBmc2NrICovCisJX19sZTMyIHNfY2hlY2tfaW50ZXJ2YWw7CS8qIEludGVydmFsIGJldHdlZW4gY2hlY2tzICovCisJY2hhciBzX3VudXNlZFs3Nl07CS8qIHplcm8gZmlsbGVkIGJ5IG1rcmVpc2VyZnMgYW5kCiAJCQkJICogcmVpc2VyZnNfY29udmVydF9vYmplY3RpZF9tYXBfdjEoKQogCQkJCSAqIHNvIGFueSBhZGRpdGlvbnMgbXVzdCBiZSB1cGRhdGVkCiAJCQkJICogdGhlcmUgYXMgd2VsbC4gKi8KQEAgLTU3OCwxMCArNTg2LDggQEAKIAkJcmV0dXJuIFRZUEVfRElSRUNUOwogCWNhc2UgVjFfRElSRU5UUllfVU5JUVVFTkVTUzoKIAkJcmV0dXJuIFRZUEVfRElSRU5UUlk7Ci0JZGVmYXVsdDoKLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAidnMtNTAwOiB1bmtub3duIHVuaXF1ZW5lc3MgJWQiLAotCQkJCSB1bmlxdWVuZXNzKTsKIAljYXNlIFYxX0FOWV9VTklRVUVORVNTOgorCWRlZmF1bHQ6CiAJCXJldHVybiBUWVBFX0FOWTsKIAl9CiB9CkBAIC01OTgsOSArNjA0LDggQEAKIAkJcmV0dXJuIFYxX0RJUkVDVF9VTklRVUVORVNTOwogCWNhc2UgVFlQRV9ESVJFTlRSWToKIAkJcmV0dXJuIFYxX0RJUkVOVFJZX1VOSVFVRU5FU1M7Ci0JZGVmYXVsdDoKLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAidnMtNTAxOiB1bmtub3duIHR5cGUgJWQiLCB0eXBlKTsKIAljYXNlIFRZUEVfQU5ZOgorCWRlZmF1bHQ6CiAJCXJldHVybiBWMV9BTllfVU5JUVVFTkVTUzsKIAl9CiB9CkBAIC03MTIsOSArNzE3LDkgQEAKICNkZWZpbmUgaXNfaW5kaXJlY3RfY3B1X2loKGloKSAoaXNfaW5kaXJlY3RfY3B1X2tleSAoJigoaWgpLT5paF9rZXkpKSkKICNkZWZpbmUgaXNfc3RhdGRhdGFfY3B1X2loKGloKSAoaXNfc3RhdGRhdGFfY3B1X2tleSAoJigoaWgpLT5paF9rZXkpKSkKIAotI2RlZmluZSBJX0tfS0VZX0lOX0lURU0ocF9zX2loLCBwX3Nfa2V5LCBuX2Jsb2Nrc2l6ZSkgXAotICAgICggISBDT01QX1NIT1JUX0tFWVMocF9zX2loLCBwX3Nfa2V5KSAmJiBcCi0gICAgICAgICAgSV9PRkZfQllURV9JTl9JVEVNKHBfc19paCwga19vZmZzZXQgKHBfc19rZXkpLCBuX2Jsb2Nrc2l6ZSkgKQorI2RlZmluZSBJX0tfS0VZX0lOX0lURU0oaWgsIGtleSwgbl9ibG9ja3NpemUpIFwKKyAgICAoIUNPTVBfU0hPUlRfS0VZUyhpaCwga2V5KSAmJiBcCisJICBJX09GRl9CWVRFX0lOX0lURU0oaWgsIGtfb2Zmc2V0KGtleSksIG5fYmxvY2tzaXplKSkKIAogLyogbWF4aW1hbCBsZW5ndGggb2YgaXRlbSAqLwogI2RlZmluZSBNQVhfSVRFTV9MRU4oYmxvY2tfc2l6ZSkgKGJsb2NrX3NpemUgLSBCTEtIX1NJWkUgLSBJSF9TSVpFKQpAQCAtNzcwLDI1ICs3NzUsMjUgQEAKICNkZWZpbmUgRElTS19MRUFGX05PREVfTEVWRUwgIDEJLyogTGVhZiBub2RlIGxldmVsLiAqLwogCiAvKiBHaXZlbiB0aGUgYnVmZmVyIGhlYWQgb2YgYSBmb3JtYXR0ZWQgbm9kZSwgcmVzb2x2ZSB0byB0aGUgYmxvY2sgaGVhZCBvZiB0aGF0IG5vZGUuICovCi0jZGVmaW5lIEJfQkxLX0hFQUQocF9zX2JoKSAgICAgICAgICAgICgoc3RydWN0IGJsb2NrX2hlYWQgKikoKHBfc19iaCktPmJfZGF0YSkpCisjZGVmaW5lIEJfQkxLX0hFQUQoYmgpCQkJKChzdHJ1Y3QgYmxvY2tfaGVhZCAqKSgoYmgpLT5iX2RhdGEpKQogLyogTnVtYmVyIG9mIGl0ZW1zIHRoYXQgYXJlIGluIGJ1ZmZlci4gKi8KLSNkZWZpbmUgQl9OUl9JVEVNUyhwX3NfYmgpICAgICAgICAgICAgKGJsa2hfbnJfaXRlbShCX0JMS19IRUFEKHBfc19iaCkpKQotI2RlZmluZSBCX0xFVkVMKHBfc19iaCkgICAgICAgICAgICAgICAoYmxraF9sZXZlbChCX0JMS19IRUFEKHBfc19iaCkpKQotI2RlZmluZSBCX0ZSRUVfU1BBQ0UocF9zX2JoKSAgICAgICAgICAoYmxraF9mcmVlX3NwYWNlKEJfQkxLX0hFQUQocF9zX2JoKSkpCisjZGVmaW5lIEJfTlJfSVRFTVMoYmgpCQkJKGJsa2hfbnJfaXRlbShCX0JMS19IRUFEKGJoKSkpCisjZGVmaW5lIEJfTEVWRUwoYmgpCQkJKGJsa2hfbGV2ZWwoQl9CTEtfSEVBRChiaCkpKQorI2RlZmluZSBCX0ZSRUVfU1BBQ0UoYmgpCQkoYmxraF9mcmVlX3NwYWNlKEJfQkxLX0hFQUQoYmgpKSkKIAotI2RlZmluZSBQVVRfQl9OUl9JVEVNUyhwX3NfYmgsdmFsKSAgICBkbyB7IHNldF9ibGtoX25yX2l0ZW0oQl9CTEtfSEVBRChwX3NfYmgpLHZhbCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFBVVF9CX0xFVkVMKHBfc19iaCx2YWwpICAgICAgIGRvIHsgc2V0X2Jsa2hfbGV2ZWwoQl9CTEtfSEVBRChwX3NfYmgpLHZhbCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFBVVF9CX0ZSRUVfU1BBQ0UocF9zX2JoLHZhbCkgIGRvIHsgc2V0X2Jsa2hfZnJlZV9zcGFjZShCX0JMS19IRUFEKHBfc19iaCksdmFsKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUFVUX0JfTlJfSVRFTVMoYmgsIHZhbCkJCWRvIHsgc2V0X2Jsa2hfbnJfaXRlbShCX0JMS19IRUFEKGJoKSwgdmFsKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUFVUX0JfTEVWRUwoYmgsIHZhbCkJCWRvIHsgc2V0X2Jsa2hfbGV2ZWwoQl9CTEtfSEVBRChiaCksIHZhbCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFBVVF9CX0ZSRUVfU1BBQ0UoYmgsIHZhbCkJZG8geyBzZXRfYmxraF9mcmVlX3NwYWNlKEJfQkxLX0hFQUQoYmgpLCB2YWwpOyB9IHdoaWxlICgwKQogCiAvKiBHZXQgcmlnaHQgZGVsaW1pdGluZyBrZXkuIC0tIGxpdHRsZSBlbmRpYW4gKi8KLSNkZWZpbmUgQl9QUklHSFRfREVMSU1fS0VZKHBfc19iaCkgICAoJihibGtfcmlnaHRfZGVsaW1fa2V5KEJfQkxLX0hFQUQocF9zX2JoKSkpKQorI2RlZmluZSBCX1BSSUdIVF9ERUxJTV9LRVkoYmgpCQkoJihibGtfcmlnaHRfZGVsaW1fa2V5KEJfQkxLX0hFQUQoYmgpKSkpCiAKIC8qIERvZXMgdGhlIGJ1ZmZlciBjb250YWluIGEgZGlzayBsZWFmLiAqLwotI2RlZmluZSBCX0lTX0lURU1TX0xFVkVMKHBfc19iaCkgICAgIChCX0xFVkVMKHBfc19iaCkgPT0gRElTS19MRUFGX05PREVfTEVWRUwpCisjZGVmaW5lIEJfSVNfSVRFTVNfTEVWRUwoYmgpCQkoQl9MRVZFTChiaCkgPT0gRElTS19MRUFGX05PREVfTEVWRUwpCiAKIC8qIERvZXMgdGhlIGJ1ZmZlciBjb250YWluIGEgZGlzayBpbnRlcm5hbCBub2RlICovCi0jZGVmaW5lIEJfSVNfS0VZU19MRVZFTChwX3NfYmgpICAgICAgKEJfTEVWRUwocF9zX2JoKSA+IERJU0tfTEVBRl9OT0RFX0xFVkVMIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgQl9MRVZFTChwX3NfYmgpIDw9IE1BWF9IRUlHSFQpCisjZGVmaW5lIEJfSVNfS0VZU19MRVZFTChiaCkgICAgICAoQl9MRVZFTChiaCkgPiBESVNLX0xFQUZfTk9ERV9MRVZFTCBcCisJCQkJCSAgICAmJiBCX0xFVkVMKGJoKSA8PSBNQVhfSEVJR0hUKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQVQgREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTExMzgsMTIgKzExNDMsMTMgQEAKICNkZWZpbmUgcHV0X2RjX3NpemUoZGNfcCwgdmFsKSAgIGRvIHsgKGRjX3ApLT5kY19zaXplID0gY3B1X3RvX2xlMTYodmFsKTsgfSB3aGlsZSgwKQogCiAvKiBHZXQgZGlzayBjaGlsZCBieSBidWZmZXIgaGVhZGVyIGFuZCBwb3NpdGlvbiBpbiB0aGUgdHJlZSBub2RlLiAqLwotI2RlZmluZSBCX05fQ0hJTEQocF9zX2JoLG5fcG9zKSAgKChzdHJ1Y3QgZGlza19jaGlsZCAqKVwKLSgocF9zX2JoKS0+Yl9kYXRhK0JMS0hfU0laRStCX05SX0lURU1TKHBfc19iaCkqS0VZX1NJWkUrRENfU0laRSoobl9wb3MpKSkKKyNkZWZpbmUgQl9OX0NISUxEKGJoLCBuX3BvcykgICgoc3RydWN0IGRpc2tfY2hpbGQgKilcCisoKGJoKS0+Yl9kYXRhICsgQkxLSF9TSVpFICsgQl9OUl9JVEVNUyhiaCkgKiBLRVlfU0laRSArIERDX1NJWkUgKiAobl9wb3MpKSkKIAogLyogR2V0IGRpc2sgY2hpbGQgbnVtYmVyIGJ5IGJ1ZmZlciBoZWFkZXIgYW5kIHBvc2l0aW9uIGluIHRoZSB0cmVlIG5vZGUuICovCi0jZGVmaW5lIEJfTl9DSElMRF9OVU0ocF9zX2JoLG5fcG9zKSAoZGNfYmxvY2tfbnVtYmVyKEJfTl9DSElMRChwX3NfYmgsbl9wb3MpKSkKLSNkZWZpbmUgUFVUX0JfTl9DSElMRF9OVU0ocF9zX2JoLG5fcG9zLCB2YWwpIChwdXRfZGNfYmxvY2tfbnVtYmVyKEJfTl9DSElMRChwX3NfYmgsbl9wb3MpLCB2YWwgKSkKKyNkZWZpbmUgQl9OX0NISUxEX05VTShiaCwgbl9wb3MpIChkY19ibG9ja19udW1iZXIoQl9OX0NISUxEKGJoLCBuX3BvcykpKQorI2RlZmluZSBQVVRfQl9OX0NISUxEX05VTShiaCwgbl9wb3MsIHZhbCkgXAorCQkJCShwdXRfZGNfYmxvY2tfbnVtYmVyKEJfTl9DSElMRChiaCwgbl9wb3MpLCB2YWwpKQogCiAgLyogbWF4aW1hbCB2YWx1ZSBvZiBmaWVsZCBjaGlsZF9zaXplIGluIHN0cnVjdHVyZSBkaXNrX2NoaWxkICovCiAgLyogY2hpbGQgc2l6ZSBpcyB0aGUgY29tYmluZWQgc2l6ZSBvZiBhbGwgaXRlbXMgYW5kIHRoZWlyIGhlYWRlcnMgKi8KQEAgLTEyMTQsMzMgKzEyMjAsMzMgQEAKIHN0cnVjdCB0cmVlcGF0aCB2YXIgPSB7LnBhdGhfbGVuZ3RoID0gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VULCAucmVhZGEgPSAwLH0KIAogLyogR2V0IHBhdGggZWxlbWVudCBieSBwYXRoIGFuZCBwYXRoIHBvc2l0aW9uLiAqLwotI2RlZmluZSBQQVRIX09GRlNFVF9QRUxFTUVOVChwX3NfcGF0aCxuX29mZnNldCkgICgocF9zX3BhdGgpLT5wYXRoX2VsZW1lbnRzICsobl9vZmZzZXQpKQorI2RlZmluZSBQQVRIX09GRlNFVF9QRUxFTUVOVChwYXRoLCBuX29mZnNldCkgICgocGF0aCktPnBhdGhfZWxlbWVudHMgKyAobl9vZmZzZXQpKQogCiAvKiBHZXQgYnVmZmVyIGhlYWRlciBhdCB0aGUgcGF0aCBieSBwYXRoIGFuZCBwYXRoIHBvc2l0aW9uLiAqLwotI2RlZmluZSBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19wYXRoLG5fb2Zmc2V0KSAgIChQQVRIX09GRlNFVF9QRUxFTUVOVChwX3NfcGF0aCxuX29mZnNldCktPnBlX2J1ZmZlcikKKyNkZWZpbmUgUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBuX29mZnNldCkgICAoUEFUSF9PRkZTRVRfUEVMRU1FTlQocGF0aCwgbl9vZmZzZXQpLT5wZV9idWZmZXIpCiAKIC8qIEdldCBwb3NpdGlvbiBpbiB0aGUgZWxlbWVudCBhdCB0aGUgcGF0aCBieSBwYXRoIGFuZCBwYXRoIHBvc2l0aW9uLiAqLwotI2RlZmluZSBQQVRIX09GRlNFVF9QT1NJVElPTihwX3NfcGF0aCxuX29mZnNldCkgKFBBVEhfT0ZGU0VUX1BFTEVNRU5UKHBfc19wYXRoLG5fb2Zmc2V0KS0+cGVfcG9zaXRpb24pCisjZGVmaW5lIFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBhdGgsIG5fb2Zmc2V0KSAoUEFUSF9PRkZTRVRfUEVMRU1FTlQocGF0aCwgbl9vZmZzZXQpLT5wZV9wb3NpdGlvbikKIAotI2RlZmluZSBQQVRIX1BMQVNUX0JVRkZFUihwX3NfcGF0aCkgKFBBVEhfT0ZGU0VUX1BCVUZGRVIoKHBfc19wYXRoKSwgKHBfc19wYXRoKS0+cGF0aF9sZW5ndGgpKQorI2RlZmluZSBQQVRIX1BMQVNUX0JVRkZFUihwYXRoKSAoUEFUSF9PRkZTRVRfUEJVRkZFUigocGF0aCksIChwYXRoKS0+cGF0aF9sZW5ndGgpKQogCQkJCS8qIHlvdSBrbm93LCB0byB0aGUgcGVyc29uIHdobyBkaWRuJ3QKIAkJCQkgICB3cml0ZSB0aGlzIHRoZSBtYWNybyBuYW1lIGRvZXMgbm90CiAJCQkJICAgYXQgZmlyc3Qgc3VnZ2VzdCB3aGF0IGl0IGRvZXMuCiAJCQkJICAgTWF5YmUgUE9TSVRJT05fRlJPTV9QQVRIX0VORD8gT3IKIAkJCQkgICBtYXliZSB3ZSBzaG91bGQganVzdCBmb2N1cyBvbgogCQkJCSAgIGR1bXBpbmcgcGF0aHMuLi4gLUhhbnMgKi8KLSNkZWZpbmUgUEFUSF9MQVNUX1BPU0lUSU9OKHBfc19wYXRoKSAoUEFUSF9PRkZTRVRfUE9TSVRJT04oKHBfc19wYXRoKSwgKHBfc19wYXRoKS0+cGF0aF9sZW5ndGgpKQorI2RlZmluZSBQQVRIX0xBU1RfUE9TSVRJT04ocGF0aCkgKFBBVEhfT0ZGU0VUX1BPU0lUSU9OKChwYXRoKSwgKHBhdGgpLT5wYXRoX2xlbmd0aCkpCiAKLSNkZWZpbmUgUEFUSF9QSVRFTV9IRUFEKHBfc19wYXRoKSAgICBCX05fUElURU1fSEVBRChQQVRIX1BMQVNUX0JVRkZFUihwX3NfcGF0aCksUEFUSF9MQVNUX1BPU0lUSU9OKHBfc19wYXRoKSkKKyNkZWZpbmUgUEFUSF9QSVRFTV9IRUFEKHBhdGgpICAgIEJfTl9QSVRFTV9IRUFEKFBBVEhfUExBU1RfQlVGRkVSKHBhdGgpLCBQQVRIX0xBU1RfUE9TSVRJT04ocGF0aCkpCiAKIC8qIGluIGRvX2JhbGFuY2UgbGVhZiBoYXMgaCA9PSAwIGluIGNvbnRyYXN0IHdpdGggcGF0aCBzdHJ1Y3R1cmUsCiAgICB3aGVyZSByb290IGhhcyBsZXZlbCA9PSAwLiBUaGF0IGlzIHdoeSB3ZSBuZWVkIHRoZXNlIGRlZmluZXMgKi8KLSNkZWZpbmUgUEFUSF9IX1BCVUZGRVIocF9zX3BhdGgsIGgpIFBBVEhfT0ZGU0VUX1BCVUZGRVIgKHBfc19wYXRoLCBwX3NfcGF0aC0+cGF0aF9sZW5ndGggLSAoaCkpCS8qIHRiLT5TW2hdICovCisjZGVmaW5lIFBBVEhfSF9QQlVGRkVSKHBhdGgsIGgpIFBBVEhfT0ZGU0VUX1BCVUZGRVIgKHBhdGgsIHBhdGgtPnBhdGhfbGVuZ3RoIC0gKGgpKQkvKiB0Yi0+U1toXSAqLwogI2RlZmluZSBQQVRIX0hfUFBBUkVOVChwYXRoLCBoKSBQQVRIX0hfUEJVRkZFUiAocGF0aCwgKGgpICsgMSkJLyogdGItPkZbaF0gb3IgdGItPlNbMF0tPmJfcGFyZW50ICovCiAjZGVmaW5lIFBBVEhfSF9QT1NJVElPTihwYXRoLCBoKSBQQVRIX09GRlNFVF9QT1NJVElPTiAocGF0aCwgcGF0aC0+cGF0aF9sZW5ndGggLSAoaCkpCiAjZGVmaW5lIFBBVEhfSF9CX0lURU1fT1JERVIocGF0aCwgaCkgUEFUSF9IX1BPU0lUSU9OKHBhdGgsIGggKyAxKQkvKiB0Yi0+U1toXS0+Yl9pdGVtX29yZGVyICovCiAKLSNkZWZpbmUgUEFUSF9IX1BBVEhfT0ZGU0VUKHBfc19wYXRoLCBuX2gpICgocF9zX3BhdGgpLT5wYXRoX2xlbmd0aCAtIChuX2gpKQorI2RlZmluZSBQQVRIX0hfUEFUSF9PRkZTRVQocGF0aCwgbl9oKSAoKHBhdGgpLT5wYXRoX2xlbmd0aCAtIChuX2gpKQogCiAjZGVmaW5lIGdldF9sYXN0X2JoKHBhdGgpIFBBVEhfUExBU1RfQlVGRkVSKHBhdGgpCiAjZGVmaW5lIGdldF9paChwYXRoKSBQQVRIX1BJVEVNX0hFQUQocGF0aCkKQEAgLTE0NzAsNiArMTQ3NiwxNiBAQAogCWludCBiaV9wb3NpdGlvbjsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN1cGVyX2Jsb2NrICpzYl9mcm9tX3RiKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiKQoreworCXJldHVybiB0YiA/IHRiLT50Yl9zYiA6IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN1cGVyX2Jsb2NrICpzYl9mcm9tX2JpKHN0cnVjdCBidWZmZXJfaW5mbyAqYmkpCit7CisJcmV0dXJuIGJpID8gc2JfZnJvbV90YihiaS0+dGIpIDogTlVMTDsKK30KKwogLyogdGhlcmUgYXJlIDQgdHlwZXMgb2YgaXRlbXM6IHN0YXQgZGF0YSwgZGlyZWN0b3J5IGl0ZW0sIGluZGlyZWN0LCBkaXJlY3QuCiArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwogfAkgICAgICAgICAgICB8ICBrX29mZnNldCAgfCBrX3VuaXF1ZW5lc3MgfCBtZXJnZWFibGU/IHwKQEAgLTE1MjAsNyArMTUzNiw3IEBACiAjZGVmaW5lIENPTVBfU0hPUlRfS0VZUyBjb21wX3Nob3J0X2tleXMKIAogLyogbnVtYmVyIG9mIGJsb2NrcyBwb2ludGVkIHRvIGJ5IHRoZSBpbmRpcmVjdCBpdGVtICovCi0jZGVmaW5lIElfVU5GTV9OVU0ocF9zX2loKQkoIGloX2l0ZW1fbGVuKHBfc19paCkgLyBVTkZNX1BfU0laRSApCisjZGVmaW5lIElfVU5GTV9OVU0oaWgpCShpaF9pdGVtX2xlbihpaCkgLyBVTkZNX1BfU0laRSkKIAogLyogdGhlIHVzZWQgc3BhY2Ugd2l0aGluIHRoZSB1bmZvcm1hdHRlZCBub2RlIGNvcnJlc3BvbmRpbmcgdG8gcG9zIHdpdGhpbiB0aGUgaXRlbSBwb2ludGVkIHRvIGJ5IGloICovCiAjZGVmaW5lIElfUE9TX1VORk1fU0laRShpaCxwb3Msc2l6ZSkgKCgocG9zKSA9PSBJX1VORk1fTlVNKGloKSAtIDEgKSA/IChzaXplKSAtIGloX2ZyZWVfc3BhY2UoaWgpIDogKHNpemUpKQpAQCAtMTYyMyw2ICsxNjM5LDEwIEBACiAjZGVmaW5lIEpPVVJOQUxfTUFYX0NPTU1JVF9BR0UgMzAKICNkZWZpbmUgSk9VUk5BTF9NQVhfVFJBTlNfQUdFIDMwCiAjZGVmaW5lIEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICgzICogKE1BWF9IRUlHSFQtMikgKyA5KQorI2RlZmluZSBKT1VSTkFMX0JMT0NLU19QRVJfT0JKRUNUKHNiKSAgKEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICogMyArIFwKKwkJCQkJIDIgKiAoUkVJU0VSRlNfUVVPVEFfSU5JVF9CTE9DS1Moc2IpICsgXAorCQkJCQkgICAgICBSRUlTRVJGU19RVU9UQV9UUkFOU19CTE9DS1Moc2IpKSkKKwogI2lmZGVmIENPTkZJR19RVU9UQQogLyogV2UgbmVlZCB0byB1cGRhdGUgZGF0YSBhbmQgaW5vZGUgKGF0aW1lKSAqLwogI2RlZmluZSBSRUlTRVJGU19RVU9UQV9UUkFOU19CTE9DS1MocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxPDxSRUlTRVJGU19RVU9UQSkgPyAyIDogMCkKQEAgLTE2OTcsNyArMTcxNyw3IEBACiAJaW50IHRfcmVmY291bnQ7CiAJaW50IHRfYmxvY2tzX2xvZ2dlZDsJLyogbnVtYmVyIG9mIGJsb2NrcyB0aGlzIHdyaXRlciBoYXMgbG9nZ2VkICovCiAJaW50IHRfYmxvY2tzX2FsbG9jYXRlZDsJLyogbnVtYmVyIG9mIGJsb2NrcyB0aGlzIHdyaXRlciBhbGxvY2F0ZWQgKi8KLQl1bnNpZ25lZCBsb25nIHRfdHJhbnNfaWQ7CS8qIHNhbml0eSBjaGVjaywgZXF1YWxzIHRoZSBjdXJyZW50IHRyYW5zIGlkICovCisJdW5zaWduZWQgaW50IHRfdHJhbnNfaWQ7CS8qIHNhbml0eSBjaGVjaywgZXF1YWxzIHRoZSBjdXJyZW50IHRyYW5zIGlkICovCiAJdm9pZCAqdF9oYW5kbGVfc2F2ZTsJLyogc2F2ZSBleGlzdGluZyBjdXJyZW50LT5qb3VybmFsX2luZm8gKi8KIAl1bnNpZ25lZCBkaXNwbGFjZV9uZXdfYmxvY2tzOjE7CS8qIGlmIG5ldyBibG9jayBhbGxvY2F0aW9uIG9jY3VycmVzLCB0aGF0IGJsb2NrCiAJCQkJCSAgIHNob3VsZCBiZSBkaXNwbGFjZWQgZnJvbSBvdGhlcnMgKi8KQEAgLTE3NzMsMTMgKzE3OTMsMTMgQEAKIGludCBqb3VybmFsX21hcmtfZnJlZWQoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqLAogCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICosIGJfYmxvY2tucl90IGJsb2NrbnIpOwogaW50IGpvdXJuYWxfdHJhbnNhY3Rpb25fc2hvdWxkX2VuZChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICosIGludCk7Ci1pbnQgcmVpc2VyZnNfaW5fam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgaW50IGJtYXBfbnIsCi0JCQlpbnQgYml0X25yLCBpbnQgc2VhcmNoYWxsLCBiX2Jsb2NrbnJfdCAqbmV4dCk7CitpbnQgcmVpc2VyZnNfaW5fam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgYm1hcF9uciwKKwkJCSBpbnQgYml0X25yLCBpbnQgc2VhcmNoYWxsLCBiX2Jsb2NrbnJfdCAqbmV4dCk7CiBpbnQgam91cm5hbF9iZWdpbihzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICosCi0JCSAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIHVuc2lnbmVkIGxvbmcpOworCQkgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcpOwogaW50IGpvdXJuYWxfam9pbl9hYm9ydChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICosCi0JCSAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgbG9uZyk7Ci12b2lkIHJlaXNlcmZzX2pvdXJuYWxfYWJvcnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGVycm5vKTsKKwkJICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcpOwordm9pZCByZWlzZXJmc19hYm9ydF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBlcnJubyk7CiB2b2lkIHJlaXNlcmZzX2Fib3J0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBlcnJubywgY29uc3QgY2hhciAqZm10LCAuLi4pOwogaW50IHJlaXNlcmZzX2FsbG9jYXRlX2xpc3RfYml0bWFwcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsCiAJCQkJICAgc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICosIHVuc2lnbmVkIGludCk7CkBAIC0xNzk2LDggKzE4MTYsOCBAQAogCiAvKiBzdHJlZS5jICovCiBpbnQgQl9JU19JTl9UUkVFKGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKLWV4dGVybiB2b2lkIGNvcHlfaXRlbV9oZWFkKHN0cnVjdCBpdGVtX2hlYWQgKnBfdl90bywKLQkJCSAgIGNvbnN0IHN0cnVjdCBpdGVtX2hlYWQgKnBfdl9mcm9tKTsKK2V4dGVybiB2b2lkIGNvcHlfaXRlbV9oZWFkKHN0cnVjdCBpdGVtX2hlYWQgKnRvLAorCQkJICAgY29uc3Qgc3RydWN0IGl0ZW1faGVhZCAqZnJvbSk7CiAKIC8vIGZpcnN0IGtleSBpcyBpbiBjcHUgZm9ybSwgc2Vjb25kIC0gbGUKIGV4dGVybiBpbnQgY29tcF9zaG9ydF9rZXlzKGNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgKmxlX2tleSwKQEAgLTE4MzIsMjAgKzE4NTIsMjAgQEAKIAltZW1jcHkodG8sIGZyb20sIEtFWV9TSVpFKTsKIH0KIAotaW50IGNvbXBfaXRlbXMoY29uc3Qgc3RydWN0IGl0ZW1faGVhZCAqc3RvcmVkX2loLCBjb25zdCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoKTsKLWNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgKmdldF9ya2V5KGNvbnN0IHN0cnVjdCB0cmVlcGF0aCAqcF9zX2Noa19wYXRoLAotCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYik7CitpbnQgY29tcF9pdGVtcyhjb25zdCBzdHJ1Y3QgaXRlbV9oZWFkICpzdG9yZWRfaWgsIGNvbnN0IHN0cnVjdCB0cmVlcGF0aCAqcGF0aCk7Citjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICpnZXRfcmtleShjb25zdCBzdHJ1Y3QgdHJlZXBhdGggKmNoa19wYXRoLAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIGludCBzZWFyY2hfYnlfa2V5KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqLAogCQkgIHN0cnVjdCB0cmVlcGF0aCAqLCBpbnQpOwogI2RlZmluZSBzZWFyY2hfaXRlbShzLGtleSxwYXRoKSBzZWFyY2hfYnlfa2V5IChzLCBrZXksIHBhdGgsIERJU0tfTEVBRl9OT0RFX0xFVkVMKQotaW50IHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICpwX3NfY3B1X2tleSwKLQkJCSAgICAgICBzdHJ1Y3QgdHJlZXBhdGggKnBfc19zZWFyY2hfcGF0aCk7Ci1leHRlcm4gdm9pZCBkZWNyZW1lbnRfYmNvdW50KHN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2JoKTsKLXZvaWQgZGVjcmVtZW50X2NvdW50ZXJzX2luX3BhdGgoc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgpOwotdm9pZCBwYXRocmVsc2Uoc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgpOworaW50IHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKmNwdV9rZXksCisJCQkgICAgICAgc3RydWN0IHRyZWVwYXRoICpzZWFyY2hfcGF0aCk7CitleHRlcm4gdm9pZCBkZWNyZW1lbnRfYmNvdW50KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwordm9pZCBkZWNyZW1lbnRfY291bnRlcnNfaW5fcGF0aChzdHJ1Y3QgdHJlZXBhdGggKnNlYXJjaF9wYXRoKTsKK3ZvaWQgcGF0aHJlbHNlKHN0cnVjdCB0cmVlcGF0aCAqc2VhcmNoX3BhdGgpOwogaW50IHJlaXNlcmZzX2NoZWNrX3BhdGgoc3RydWN0IHRyZWVwYXRoICpwKTsKLXZvaWQgcGF0aHJlbHNlX2FuZF9yZXN0b3JlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgpOwordm9pZCBwYXRocmVsc2VfYW5kX3Jlc3RvcmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgdHJlZXBhdGggKnNlYXJjaF9wYXRoKTsKIAogaW50IHJlaXNlcmZzX2luc2VydF9pdGVtKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAogCQkJIHN0cnVjdCB0cmVlcGF0aCAqcGF0aCwKQEAgLTE4NjgsMTQgKzE4ODgsMTQgQEAKIGludCByZWlzZXJmc19kZWxldGVfaXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKIAkJCSBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsCiAJCQkgY29uc3Qgc3RydWN0IGNwdV9rZXkgKmtleSwKLQkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc191bl9iaCk7CisJCQkgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICp1bl9iaCk7CiAKIHZvaWQgcmVpc2VyZnNfZGVsZXRlX3NvbGlkX2l0ZW0oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCiAJCQkJc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHJlaXNlcmZzX2tleSAqa2V5KTsKIGludCByZWlzZXJmc19kZWxldGVfb2JqZWN0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJICAgc3RydWN0IGlub2RlICpwX3NfaW5vZGUpOworCQkJICAgc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgcmVpc2VyZnNfZG9fdHJ1bmNhdGUoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkgc3RydWN0IGlub2RlICpwX3NfaW5vZGUsIHN0cnVjdCBwYWdlICosCisJCQkgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKiwKIAkJCSBpbnQgdXBkYXRlX3RpbWVzdGFtcHMpOwogCiAjZGVmaW5lIGlfYmxvY2tfc2l6ZShpbm9kZSkgKChpbm9kZSktPmlfc2ItPnNfYmxvY2tzaXplKQpAQCAtMTkxOSwxMCArMTkzOSwxMiBAQAogCQkgICAgICAgbG9mZl90IG9mZnNldCwgaW50IHR5cGUsIGludCBsZW5ndGgsIGludCBlbnRyeV9jb3VudCk7CiBzdHJ1Y3QgaW5vZGUgKnJlaXNlcmZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqa2V5KTsKIAorc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZTsKIGludCByZWlzZXJmc19uZXdfaW5vZGUoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCiAJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgaW50IG1vZGUsCiAJCSAgICAgICBjb25zdCBjaGFyICpzeW1uYW1lLCBsb2ZmX3QgaV9zaXplLAotCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKKwkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJICAgICAgIHN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgKnNlY3VyaXR5KTsKIAogdm9pZCByZWlzZXJmc191cGRhdGVfc2Rfc2l6ZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKIAkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpOwpAQCAtMTk4MCw3ICsyMDAyLDcgQEAKICNkZWZpbmUgUFJPQ19JTkZPX01BWCggc2IsIGZpZWxkLCB2YWx1ZSApIFZPSURfVgogI2RlZmluZSBQUk9DX0lORk9fSU5DKCBzYiwgZmllbGQgKSBWT0lEX1YKICNkZWZpbmUgUFJPQ19JTkZPX0FERCggc2IsIGZpZWxkLCB2YWwgKSBWT0lEX1YKLSNkZWZpbmUgUFJPQ19JTkZPX0JIX1NUQVQoIHBfc19zYiwgcF9zX2JoLCBuX25vZGVfbGV2ZWwgKSBWT0lEX1YKKyNkZWZpbmUgUFJPQ19JTkZPX0JIX1NUQVQoc2IsIGJoLCBuX25vZGVfbGV2ZWwpIFZPSURfVgogI2VuZGlmCiAKIC8qIGRpci5jICovCkBAIC0xOTg4LDYgKzIwMTAsNyBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHJlaXNlcmZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyByZWlzZXJmc19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZWlzZXJmc19kaXJfb3BlcmF0aW9uczsKK2ludCByZWlzZXJmc19yZWFkZGlyX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICosIHZvaWQgKiwgZmlsbGRpcl90LCBsb2ZmX3QgKik7CiAKIC8qIHRhaWxfY29udmVyc2lvbi5jICovCiBpbnQgZGlyZWN0MmluZGlyZWN0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKiwgc3RydWN0IGlub2RlICosCkBAIC0yMDA0LDEzICsyMDI3LDIwIEBACiAKIC8qIGZpeF9ub2Rlcy5jICovCiAKLWludCBmaXhfbm9kZXMoaW50IG5fb3BfbW9kZSwgc3RydWN0IHRyZWVfYmFsYW5jZSAqcF9zX3RiLAotCSAgICAgIHN0cnVjdCBpdGVtX2hlYWQgKnBfc19pbnNfaWgsIGNvbnN0IHZvaWQgKik7CitpbnQgZml4X25vZGVzKGludCBuX29wX21vZGUsIHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiLAorCSAgICAgIHN0cnVjdCBpdGVtX2hlYWQgKmluc19paCwgY29uc3Qgdm9pZCAqKTsKIHZvaWQgdW5maXhfbm9kZXMoc3RydWN0IHRyZWVfYmFsYW5jZSAqKTsKIAogLyogcHJpbnRzLmMgKi8KLXZvaWQgcmVpc2VyZnNfcGFuaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3ZvaWQgX19yZWlzZXJmc19wYW5pYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGNvbnN0IGNoYXIgKmlkLAorCQkgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CisjZGVmaW5lIHJlaXNlcmZzX3BhbmljKHMsIGlkLCBmbXQsIGFyZ3MuLi4pIFwKKwlfX3JlaXNlcmZzX3BhbmljKHMsIGlkLCBfX2Z1bmNfXywgZm10LCAjI2FyZ3MpCit2b2lkIF9fcmVpc2VyZnNfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBjb25zdCBjaGFyICppZCwKKwkJICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKyNkZWZpbmUgcmVpc2VyZnNfZXJyb3IocywgaWQsIGZtdCwgYXJncy4uLikgXAorCSBfX3JlaXNlcmZzX2Vycm9yKHMsIGlkLCBfX2Z1bmNfXywgZm10LCAjI2FyZ3MpCiB2b2lkIHJlaXNlcmZzX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CiB2b2lkIHJlaXNlcmZzX2RlYnVnKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgaW50IGxldmVsLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CiB2b2lkIHByaW50X2luZGlyZWN0X2l0ZW0oc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IGl0ZW1fbnVtKTsKQEAgLTIwNDcsNyArMjA3Nyw3IEBACiAJCQkgIGludCB6ZXJvc19udW1iZXIpOwogdm9pZCBsZWFmX2N1dF9mcm9tX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2luZm8gKmJpLCBpbnQgY3V0X2l0ZW1fbnVtLAogCQkJICBpbnQgcG9zX2luX2l0ZW0sIGludCBjdXRfc2l6ZSk7Ci12b2lkIGxlYWZfcGFzdGVfZW50cmllcyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgaXRlbV9udW0sIGludCBiZWZvcmUsCit2b2lkIGxlYWZfcGFzdGVfZW50cmllcyhzdHJ1Y3QgYnVmZmVyX2luZm8gKmJpLCBpbnQgaXRlbV9udW0sIGludCBiZWZvcmUsCiAJCQlpbnQgbmV3X2VudHJ5X2NvdW50LCBzdHJ1Y3QgcmVpc2VyZnNfZGVfaGVhZCAqbmV3X2RlaHMsCiAJCQljb25zdCBjaGFyICpyZWNvcmRzLCBpbnQgcGFzdGVfc2l6ZSk7CiAvKiBpYmFsYW5jZS5jICovCkBAIC0yMjAzLDYgKzIyMzMsNiBAQAogCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBpbnQgcmVpc2VyZnNfdW5wYWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKIAotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLworCiAjZW5kaWYJCQkJLyogX0xJTlVYX1JFSVNFUl9GU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX2kuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfaS5oCmluZGV4IGNlMzY2M2YuLjc2MzYwYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfaS5oCkBAIC01MSw3ICs1MSw3IEBACiAJLyogd2UgdXNlIHRoZXNlIGZvciBmc3luYyBvciBPX1NZTkMgdG8gZGVjaWRlIHdoaWNoIHRyYW5zYWN0aW9uCiAJICoqIG5lZWRzIHRvIGJlIGNvbW1pdHRlZCBpbiBvcmRlciBmb3IgdGhpcyBpbm9kZSB0byBiZSBwcm9wZXJseQogCSAqKiBmbHVzaGVkICovCi0JdW5zaWduZWQgbG9uZyBpX3RyYW5zX2lkOworCXVuc2lnbmVkIGludCBpX3RyYW5zX2lkOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmlfamw7CiAJc3RydWN0IG11dGV4IGlfbW1hcDsKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMCkBAIC01OSw3ICs1OSw3IEBACiAJc3RydWN0IHBvc2l4X2FjbCAqaV9hY2xfZGVmYXVsdDsKICNlbmRpZgogI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19YQVRUUgotCXN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtOworCXN0cnVjdCByd19zZW1hcGhvcmUgaV94YXR0cl9zZW07CiAjZW5kaWYKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaAppbmRleCBiZGE2YjU2Li41NjIxZDg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19zYi5oCkBAIC0xNCw3ICsxNCw3IEBACiB9IHJlaXNlcmZzX3N1cGVyX2Jsb2NrX2ZsYWdzOwogCiAvKiBzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2sgYWNjZXNzb3JzL211dGF0b3JzCi0gKiBzaW5jZSB0aGlzIGlzIGEgZGlzayBzdHJ1Y3R1cmUsIGl0IHdpbGwgYWx3YXlzIGJlIGluIAorICogc2luY2UgdGhpcyBpcyBhIGRpc2sgc3RydWN0dXJlLCBpdCB3aWxsIGFsd2F5cyBiZSBpbgogICogbGl0dGxlIGVuZGlhbiBmb3JtYXQuICovCiAjZGVmaW5lIHNiX2Jsb2NrX2NvdW50KHNicCkgICAgICAgICAobGUzMl90b19jcHUoKHNicCktPnNfdjEuc19ibG9ja19jb3VudCkpCiAjZGVmaW5lIHNldF9zYl9ibG9ja19jb3VudChzYnAsdikgICAoKHNicCktPnNfdjEuc19ibG9ja19jb3VudCA9IGNwdV90b19sZTMyKHYpKQpAQCAtNzMsNiArNzMsOSBAQAogI2RlZmluZSBzYl92ZXJzaW9uKHNicCkgICAgICAgICAgICAobGUxNl90b19jcHUoKHNicCktPnNfdjEuc192ZXJzaW9uKSkKICNkZWZpbmUgc2V0X3NiX3ZlcnNpb24oc2JwLHYpICAgICAgKChzYnApLT5zX3YxLnNfdmVyc2lvbiA9IGNwdV90b19sZTE2KHYpKQogCisjZGVmaW5lIHNiX21udF9jb3VudChzYnApCSAgIChsZTE2X3RvX2NwdSgoc2JwKS0+c19tbnRfY291bnQpKQorI2RlZmluZSBzZXRfc2JfbW50X2NvdW50KHNicCwgdikgICAoKHNicCktPnNfbW50X2NvdW50ID0gY3B1X3RvX2xlMTYodikpCisKICNkZWZpbmUgc2JfcmVzZXJ2ZWRfZm9yX2pvdXJuYWwoc2JwKSBcCiAgICAgICAgICAgICAgIChsZTE2X3RvX2NwdSgoc2JwKS0+c192MS5zX3Jlc2VydmVkX2Zvcl9qb3VybmFsKSkKICNkZWZpbmUgc2V0X3NiX3Jlc2VydmVkX2Zvcl9qb3VybmFsKHNicCx2KSBcCkBAIC04MCwxNiArODMsMTYgQEAKIAogLyogTE9HR0lORyAtLSAqLwogCi0vKiBUaGVzZSBhbGwgaW50ZXJlbGF0ZSBmb3IgcGVyZm9ybWFuY2UuICAKKy8qIFRoZXNlIGFsbCBpbnRlcmVsYXRlIGZvciBwZXJmb3JtYW5jZS4KICoqCi0qKiBJZiB0aGUgam91cm5hbCBibG9jayBjb3VudCBpcyBzbWFsbGVyIHRoYW4gbiB0cmFuc2FjdGlvbnMsIHlvdSBsb3NlIHNwZWVkLiAKKyoqIElmIHRoZSBqb3VybmFsIGJsb2NrIGNvdW50IGlzIHNtYWxsZXIgdGhhbiBuIHRyYW5zYWN0aW9ucywgeW91IGxvc2Ugc3BlZWQuCiAqKiBJIGRvbid0IGtub3cgd2hhdCBuIGlzIHlldCwgSSdtIGd1ZXNzaW5nIDgtMTYuCiAqKgogKiogdHlwaWNhbCB0cmFuc2FjdGlvbiBzaXplIGRlcGVuZHMgb24gdGhlIGFwcGxpY2F0aW9uLCBob3cgb2Z0ZW4gZnN5bmMgaXMKLSoqIGNhbGxlZCwgYW5kIGhvdyBtYW55IG1ldGFkYXRhIGJsb2NrcyB5b3UgZGlydHkgaW4gYSAzMCBzZWNvbmQgcGVyaW9kLiAgCisqKiBjYWxsZWQsIGFuZCBob3cgbWFueSBtZXRhZGF0YSBibG9ja3MgeW91IGRpcnR5IGluIGEgMzAgc2Vjb25kIHBlcmlvZC4KICoqIFRoZSBtb3JlIHNtYWxsIGZpbGVzICg8MTZrKSB5b3UgdXNlLCB0aGUgbGFyZ2VyIHlvdXIgdHJhbnNhY3Rpb25zIHdpbGwKICoqIGJlLgotKiogCisqKgogKiogSWYgeW91ciBqb3VybmFsIGZpbGxzIGZhc3RlciB0aGFuIGRpcnR5IGJ1ZmZlcnMgZ2V0IGZsdXNoZWQgdG8gZGlzaywgaXQgbXVzdCBmbHVzaCB0aGVtIGJlZm9yZSBhbGxvd2luZyB0aGUgam91cm5hbAogKiogdG8gd3JhcCwgd2hpY2ggc2xvd3MgdGhpbmdzIGRvd24uICBJZiB5b3UgbmVlZCBoaWdoIHNwZWVkIG1ldGEgZGF0YSB1cGRhdGVzLCB0aGUgam91cm5hbCBzaG91bGQgYmUgYmlnIGVub3VnaAogKiogdG8gcHJldmVudCB3cmFwcGluZyBiZWZvcmUgZGlydHkgbWV0YSBibG9ja3MgZ2V0IHRvIGRpc2suCkBAIC0xNTMsNyArMTU2LDcgQEAKIAlhdG9taWNfdCBqX2NvbW1pdF9sZWZ0OwogCWF0b21pY190IGpfb2xkZXJfY29tbWl0c19kb25lOwkvKiBhbGwgY29tbWl0cyBvbGRlciB0aGFuIHRoaXMgb24gZGlzayAqLwogCXN0cnVjdCBtdXRleCBqX2NvbW1pdF9tdXRleDsKLQl1bnNpZ25lZCBsb25nIGpfdHJhbnNfaWQ7CisJdW5zaWduZWQgaW50IGpfdHJhbnNfaWQ7CiAJdGltZV90IGpfdGltZXN0YW1wOwogCXN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCAqal9saXN0X2JpdG1hcDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmpfY29tbWl0X2JoOwkvKiBjb21taXQgYnVmZmVyIGhlYWQgKi8KQEAgLTE4Miw3ICsxODUsNyBAQAogCWludCBqXzFzdF9yZXNlcnZlZF9ibG9jazsJLyogZmlyc3QgYmxvY2sgb24gc19kZXYgb2YgcmVzZXJ2ZWQgYXJlYSBqb3VybmFsICovCiAKIAl1bnNpZ25lZCBsb25nIGpfc3RhdGU7Ci0JdW5zaWduZWQgbG9uZyBqX3RyYW5zX2lkOworCXVuc2lnbmVkIGludCBqX3RyYW5zX2lkOwogCXVuc2lnbmVkIGxvbmcgal9tb3VudF9pZDsKIAl1bnNpZ25lZCBsb25nIGpfc3RhcnQ7CS8qIHN0YXJ0IG9mIGN1cnJlbnQgd2FpdGluZyBjb21taXQgKGluZGV4IGludG8gal9hcF9ibG9ja3MpICovCiAJdW5zaWduZWQgbG9uZyBqX2xlbjsJLyogbGVuZ3RoIG9mIGN1cnJlbnQgd2FpdGluZyBjb21taXQgKi8KQEAgLTIyMywxMCArMjI2LDEwIEBACiAJaW50IGpfbnVtX3dvcmtfbGlzdHM7CS8qIG51bWJlciB0aGF0IG5lZWQgYXR0ZW50aW9uIGZyb20ga3JlaXNlcmZzZCAqLwogCiAJLyogZGVidWdnaW5nIHRvIG1ha2Ugc3VyZSB0aGluZ3MgYXJlIGZsdXNoZWQgaW4gb3JkZXIgKi8KLQlpbnQgal9sYXN0X2ZsdXNoX2lkOworCXVuc2lnbmVkIGludCBqX2xhc3RfZmx1c2hfaWQ7CiAKIAkvKiBkZWJ1Z2dpbmcgdG8gbWFrZSBzdXJlIHRoaW5ncyBhcmUgY29tbWl0dGVkIGluIG9yZGVyICovCi0JaW50IGpfbGFzdF9jb21taXRfaWQ7CisJdW5zaWduZWQgaW50IGpfbGFzdF9jb21taXRfaWQ7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGpfYml0bWFwX25vZGVzOwogCXN0cnVjdCBsaXN0X2hlYWQgal9kaXJ0eV9idWZmZXJzOwpAQCAtMjM5LDcgKzI0Miw3IEBACiAKIAlzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgal9saXN0X2JpdG1hcFtKT1VSTkFMX05VTV9CSVRNQVBTXTsJLyogYXJyYXkgb2YgYml0bWFwcyB0byByZWNvcmQgdGhlIGRlbGV0ZWQgYmxvY2tzICovCiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpfaGFzaF90YWJsZVtKT1VSTkFMX0hBU0hfU0laRV07CS8qIGhhc2ggdGFibGUgZm9yIHJlYWwgYnVmZmVyIGhlYWRzIGluIGN1cnJlbnQgdHJhbnMgKi8KLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqal9saXN0X2hhc2hfdGFibGVbSk9VUk5BTF9IQVNIX1NJWkVdOwkvKiBoYXNoIHRhYmxlIGZvciBhbGwgdGhlIHJlYWwgYnVmZmVyIGhlYWRzIGluIGFsbCAKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqal9saXN0X2hhc2hfdGFibGVbSk9VUk5BTF9IQVNIX1NJWkVdOwkvKiBoYXNoIHRhYmxlIGZvciBhbGwgdGhlIHJlYWwgYnVmZmVyIGhlYWRzIGluIGFsbAogCQkJCQkJCQkJCSAgIHRoZSB0cmFuc2FjdGlvbnMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGpfcHJlYWxsb2NfbGlzdDsJLyogbGlzdCBvZiBpbm9kZXMgd2hpY2ggaGF2ZSBwcmVhbGxvY2F0ZWQgYmxvY2tzICovCiAJaW50IGpfcGVyc2lzdGVudF90cmFuczsKQEAgLTM5OSwxMCArNDAyLDcgQEAKIAlpbnQgcmVzZXJ2ZWRfYmxvY2tzOwkvKiBhbW91bnQgb2YgYmxvY2tzIHJlc2VydmVkIGZvciBmdXJ0aGVyIGFsbG9jYXRpb25zICovCiAJc3BpbmxvY2tfdCBiaXRtYXBfbG9jazsJLyogdGhpcyBsb2NrIG9uIG5vdyBvbmx5IHVzZWQgdG8gcHJvdGVjdCByZXNlcnZlZF9ibG9ja3MgdmFyaWFibGUgKi8KIAlzdHJ1Y3QgZGVudHJ5ICpwcml2X3Jvb3Q7CS8qIHJvb3Qgb2YgLy5yZWlzZXJmc19wcml2ICovCi0jaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSCiAJc3RydWN0IGRlbnRyeSAqeGF0dHJfcm9vdDsJLyogcm9vdCBvZiAvLnJlaXNlcmZzX3ByaXYvLnhhICovCi0Jc3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9kaXJfc2VtOwotI2VuZGlmCiAJaW50IGpfZXJybm87CiAjaWZkZWYgQ09ORklHX1FVT1RBCiAJY2hhciAqc19xZl9uYW1lc1tNQVhRVU9UQVNdOwpAQCAtNDI2LDcgKzQyNiw3IEBACiAJCQkJICAgcGFydGl0aW9uIHdpbGwgYmUgZGVhbHQgd2l0aCBpbiBhCiAJCQkJICAgbWFubmVyIG9mIDMuNS54ICovCiAKLS8qIC1vIGhhc2g9e3RlYSwgcnVwYXNvdiwgcjUsIGRldGVjdH0gaXMgbWVhbnQgZm9yIHByb3Blcmx5IG1vdW50aW5nIAorLyogLW8gaGFzaD17dGVhLCBydXBhc292LCByNSwgZGV0ZWN0fSBpcyBtZWFudCBmb3IgcHJvcGVybHkgbW91bnRpbmcKICoqIHJlaXNlcmZzIGRpc2tzIGZyb20gMy41LjE5IG9yIGVhcmxpZXIuICA5OSUgb2YgdGhlIHRpbWUsIHRoaXMgb3B0aW9uCiAqKiBpcyBub3QgcmVxdWlyZWQuICBJZiB0aGUgbm9ybWFsIGF1dG9kZWN0aW9uIGNvZGUgY2FuJ3QgZGV0ZXJtaW5lIHdoaWNoCiAqKiBoYXNoIHRvIHVzZSAoYmVjYXVzZSBib3RoIGhhc2hlcyBoYWQgdGhlIHNhbWUgdmFsdWUgZm9yIGEgZmlsZSkKQEAgLTQ1MSw3ICs0NTEsNiBAQAogCVJFSVNFUkZTX05PX1VOSEFTSEVEX1JFTE9DQVRJT04sCiAJUkVJU0VSRlNfSEFTSEVEX1JFTE9DQVRJT04sCiAJUkVJU0VSRlNfQVRUUlMsCi0JUkVJU0VSRlNfWEFUVFJTLAogCVJFSVNFUkZTX1hBVFRSU19VU0VSLAogCVJFSVNFUkZTX1BPU0lYQUNMLAogCVJFSVNFUkZTX0JBUlJJRVJfTk9ORSwKQEAgLTQ4OSw3ICs0ODgsNyBAQAogI2RlZmluZSByZWlzZXJmc19kYXRhX2xvZyhzKSAoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0ICYgKDEgPDwgUkVJU0VSRlNfREFUQV9MT0cpKQogI2RlZmluZSByZWlzZXJmc19kYXRhX29yZGVyZWQocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxIDw8IFJFSVNFUkZTX0RBVEFfT1JERVJFRCkpCiAjZGVmaW5lIHJlaXNlcmZzX2RhdGFfd3JpdGViYWNrKHMpIChSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQgJiAoMSA8PCBSRUlTRVJGU19EQVRBX1dSSVRFQkFDSykpCi0jZGVmaW5lIHJlaXNlcmZzX3hhdHRycyhzKSAoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0ICYgKDEgPDwgUkVJU0VSRlNfWEFUVFJTKSkKKyNkZWZpbmUgcmVpc2VyZnNfeGF0dHJzKHMpICgocyktPnNfeGF0dHIgIT0gTlVMTCkKICNkZWZpbmUgcmVpc2VyZnNfeGF0dHJzX3VzZXIocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxIDw8IFJFSVNFUkZTX1hBVFRSU19VU0VSKSkKICNkZWZpbmUgcmVpc2VyZnNfcG9zaXhhY2wocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxIDw8IFJFSVNFUkZTX1BPU0lYQUNMKSkKICNkZWZpbmUgcmVpc2VyZnNfeGF0dHJzX29wdGlvbmFsKHMpIChyZWlzZXJmc194YXR0cnNfdXNlcihzKSB8fCByZWlzZXJmc19wb3NpeGFjbChzKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfeGF0dHIuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfeGF0dHIuaAppbmRleCBhZjEzNWFlLi5kY2FlMDFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc194YXR0ci5oCkBAIC0xNSw2ICsxNSwxMiBAQAogCV9fbGUzMiBoX2hhc2g7CQkvKiBoYXNoIG9mIHRoZSB2YWx1ZSAqLwogfTsKIAorc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSB7CisJY2hhciAqbmFtZTsKKwl2b2lkICp2YWx1ZTsKKwlzaXplX3QgbGVuZ3RoOworfTsKKwogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTI5LDIyICszNSwxMyBAQAogc3RydWN0IHN1cGVyX2Jsb2NrOwogc3RydWN0IG5hbWVpZGF0YTsKIAotc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgewotCWNoYXIgKnByZWZpeDsKLQlpbnQgKCppbml0KSAodm9pZCk7Ci0Jdm9pZCAoKmV4aXQpICh2b2lkKTsKLQlpbnQgKCpnZXQpIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAotCQkgICAgc2l6ZV90IHNpemUpOwotCWludCAoKnNldCkgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCi0JCSAgICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKLQlpbnQgKCpkZWwpIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgY29uc3QgY2hhciAqbmFtZSk7Ci0JaW50ICgqbGlzdCkgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKLQkJICAgICBjaGFyICpvdXQpOwotCXN0cnVjdCBsaXN0X2hlYWQgaGFuZGxlcnM7Ci19OworaW50IHJlaXNlcmZzX3hhdHRyX3JlZ2lzdGVyX2hhbmRsZXJzKHZvaWQpIF9faW5pdDsKK3ZvaWQgcmVpc2VyZnNfeGF0dHJfdW5yZWdpc3Rlcl9oYW5kbGVycyh2b2lkKTsKK2ludCByZWlzZXJmc194YXR0cl9pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb3VudF9mbGFncyk7CitpbnQgcmVpc2VyZnNfZGVsZXRlX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2ludCByZWlzZXJmc19jaG93bl94YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICphdHRycyk7CiAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIKLSNkZWZpbmUgaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpIElTX1BSSVZBVEUoaW5vZGUpCiAjZGVmaW5lIGhhc194YXR0cl9kaXIoaW5vZGUpIChSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyAmIGlfaGFzX3hhdHRyX2RpcikKIHNzaXplX3QgcmVpc2VyZnNfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAogCQkJICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKQEAgLTUyLDEwNSArNDksOTggQEAKIAkJICAgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOwogc3NpemVfdCByZWlzZXJmc19saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKTsKIGludCByZWlzZXJmc19yZW1vdmV4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpOwotaW50IHJlaXNlcmZzX2RlbGV0ZV94YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSk7Ci1pbnQgcmVpc2VyZnNfY2hvd25feGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpYXR0ciAqYXR0cnMpOwotaW50IHJlaXNlcmZzX3hhdHRyX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG1vdW50X2ZsYWdzKTsKIGludCByZWlzZXJmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKIAotaW50IHJlaXNlcmZzX3hhdHRyX2RlbChzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgY2hhciAqKTsKLWludCByZWlzZXJmc194YXR0cl9nZXQoY29uc3Qgc3RydWN0IGlub2RlICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpOworaW50IHJlaXNlcmZzX3hhdHRyX2dldChzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgY2hhciAqLCB2b2lkICosIHNpemVfdCk7CiBpbnQgcmVpc2VyZnNfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqLCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOworaW50IHJlaXNlcmZzX3hhdHRyX3NldF9oYW5kbGUoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqLAorCQkJICAgICAgc3RydWN0IGlub2RlICosIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLAorCQkJICAgICAgc2l6ZV90LCBpbnQpOwogCi1leHRlcm4gc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgdXNlcl9oYW5kbGVyOwotZXh0ZXJuIHN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHRydXN0ZWRfaGFuZGxlcjsKLWV4dGVybiBzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciBzZWN1cml0eV9oYW5kbGVyOworZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIHJlaXNlcmZzX3hhdHRyX3VzZXJfaGFuZGxlcjsKK2V4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciByZWlzZXJmc194YXR0cl90cnVzdGVkX2hhbmRsZXI7CitleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgcmVpc2VyZnNfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcjsKKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFkKK2ludCByZWlzZXJmc19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSAqc2VjKTsKK2ludCByZWlzZXJmc19zZWN1cml0eV93cml0ZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgIHN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgKnNlYyk7Cit2b2lkIHJlaXNlcmZzX3NlY3VyaXR5X2ZyZWUoc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSAqc2VjKTsKKyNlbmRpZgogCi1pbnQgcmVpc2VyZnNfeGF0dHJfcmVnaXN0ZXJfaGFuZGxlcnModm9pZCkgX19pbml0Owotdm9pZCByZWlzZXJmc194YXR0cl91bnJlZ2lzdGVyX2hhbmRsZXJzKHZvaWQpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKKyNkZWZpbmUgeGF0dHJfc2l6ZShzaXplKSAoKHNpemUpICsgc2l6ZW9mKHN0cnVjdCByZWlzZXJmc194YXR0cl9oZWFkZXIpKQorc3RhdGljIGlubGluZSBsb2ZmX3QgcmVpc2VyZnNfeGF0dHJfbmJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSkKIHsKLQlkb3duX3dyaXRlKCZSRUlTRVJGU19YQVRUUl9ESVJfU0VNKHNiKSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXVwX3dyaXRlKCZSRUlTRVJGU19YQVRUUl9ESVJfU0VNKHNiKSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCWRvd25fcmVhZCgmUkVJU0VSRlNfWEFUVFJfRElSX1NFTShzYikpOworCWxvZmZfdCByZXQgPSAwOworCWlmIChyZWlzZXJmc19maWxlX2RhdGFfbG9nKGlub2RlKSkgeworCQlyZXQgPSBfUk9VTkRfVVAoeGF0dHJfc2l6ZShzaXplKSwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsKKwkJcmV0ID4+PSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKKwl9CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQorLyogV2UgbWF5IGhhdmUgdG8gY3JlYXRlIHVwIHRvIDMgb2JqZWN0czogeGF0dHIgcm9vdCwgeGF0dHIgZGlyLCB4YXR0ciBmaWxlLgorICogTGV0J3MgdHJ5IHRvIGJlIHNtYXJ0IGFib3V0IGl0LgorICogeGF0dHIgcm9vdDogV2UgY2FjaGUgaXQuIElmIGl0J3Mgbm90IGNhY2hlZCwgd2UgbWF5IG5lZWQgdG8gY3JlYXRlIGl0LgorICogeGF0dHIgZGlyOiBJZiBhbnl0aGluZyBoYXMgYmVlbiBsb2FkZWQgZm9yIHRoaXMgaW5vZGUsIHdlIGNhbiBzZXQgYSBmbGFnCisgKiAgICAgICAgICAgIHNheWluZyBzby4KKyAqIHhhdHRyIGZpbGU6IFNpbmNlIHdlIGRvbid0IGNhY2hlIHhhdHRycywgd2UgY2FuJ3QgdGVsbC4gV2UgYWx3YXlzIGluY2x1ZGUKKyAqICAgICAgICAgICAgIGJsb2NrcyBmb3IgaXQuCisgKgorICogSG93ZXZlciwgc2luY2Ugcm9vdCBhbmQgZGlyIGNhbiBiZSBjcmVhdGVkIGJldHdlZW4gY2FsbHMgLSBZT1UgTVVTVCBTQVZFCisgKiBUSElTIFZBTFVFLgorICovCitzdGF0aWMgaW5saW5lIHNpemVfdCByZWlzZXJmc194YXR0cl9qY3JlYXRlX25ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQl1cF9yZWFkKCZSRUlTRVJGU19YQVRUUl9ESVJfU0VNKHNiKSk7Ci19CisJc2l6ZV90IG5ibG9ja3MgPSBKT1VSTkFMX0JMT0NLU19QRVJfT0JKRUNUKGlub2RlLT5pX3NiKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX3dyaXRlX2xvY2tfeGF0dHJfaShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWRvd25fd3JpdGUoJlJFSVNFUkZTX0koaW5vZGUpLT54YXR0cl9zZW0pOwotfQotc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cl9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JdXBfd3JpdGUoJlJFSVNFUkZTX0koaW5vZGUpLT54YXR0cl9zZW0pOwotfQotc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX3JlYWRfbG9ja194YXR0cl9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JZG93bl9yZWFkKCZSRUlTRVJGU19JKGlub2RlKS0+eGF0dHJfc2VtKTsKLX0KKwlpZiAoKFJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzICYgaV9oYXNfeGF0dHJfZGlyKSA9PSAwKSB7CisJCW5ibG9ja3MgKz0gSk9VUk5BTF9CTE9DS1NfUEVSX09CSkVDVChpbm9kZS0+aV9zYik7CisJCWlmIChSRUlTRVJGU19TQihpbm9kZS0+aV9zYiktPnhhdHRyX3Jvb3QgPT0gTlVMTCkKKwkJCW5ibG9ja3MgKz0gSk9VUk5BTF9CTE9DS1NfUEVSX09CSkVDVChpbm9kZS0+aV9zYik7CisJfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJfaShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXVwX3JlYWQoJlJFSVNFUkZTX0koaW5vZGUpLT54YXR0cl9zZW0pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfbWFya19pbm9kZV9wcml2YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JaW5vZGUtPmlfZmxhZ3MgfD0gU19QUklWQVRFOworCXJldHVybiBuYmxvY2tzOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfaW5pdF94YXR0cl9yd3NlbShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWluaXRfcndzZW0oJlJFSVNFUkZTX0koaW5vZGUpLT54YXR0cl9zZW0pOworCWluaXRfcndzZW0oJlJFSVNFUkZTX0koaW5vZGUpLT5pX3hhdHRyX3NlbSk7CiB9CiAKICNlbHNlCiAKLSNkZWZpbmUgaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpIDAKLSNkZWZpbmUgcmVpc2VyZnNfbWFya19pbm9kZV9wcml2YXRlKGlub2RlKSBkbyB7O30gd2hpbGUoMCkKICNkZWZpbmUgcmVpc2VyZnNfZ2V0eGF0dHIgTlVMTAogI2RlZmluZSByZWlzZXJmc19zZXR4YXR0ciBOVUxMCiAjZGVmaW5lIHJlaXNlcmZzX2xpc3R4YXR0ciBOVUxMCiAjZGVmaW5lIHJlaXNlcmZzX3JlbW92ZXhhdHRyIE5VTEwKLSNkZWZpbmUgcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoc2IpIGRvIHs7fSB3aGlsZSgwKQotI2RlZmluZSByZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKHNiKSBkbyB7O30gd2hpbGUoMCkKLSNkZWZpbmUgcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhzYikKLSNkZWZpbmUgcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJzKHNiKQogCiAjZGVmaW5lIHJlaXNlcmZzX3Blcm1pc3Npb24gTlVMTAogCi0jZGVmaW5lIHJlaXNlcmZzX3hhdHRyX3JlZ2lzdGVyX2hhbmRsZXJzKCkgMAotI2RlZmluZSByZWlzZXJmc194YXR0cl91bnJlZ2lzdGVyX2hhbmRsZXJzKCkKLQotc3RhdGljIGlubGluZSBpbnQgcmVpc2VyZnNfZGVsZXRlX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXJldHVybiAwOwotfTsKLXN0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX2Nob3duX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQlzdHJ1Y3QgaWF0dHIgKmF0dHJzKQotewotCXJldHVybiAwOwotfTsKLXN0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX3hhdHRyX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG1vdW50X2ZsYWdzKQotewotCXNiLT5zX2ZsYWdzID0gKHNiLT5zX2ZsYWdzICYgfk1TX1BPU0lYQUNMKTsJLyogdG8gYmUgc3VyZSAqLwotCXJldHVybiAwOwotfTsKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWlzZXJmc19pbml0X3hhdHRyX3J3c2VtKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiB9CiAjZW5kaWYgIC8qICBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIgICovCiAKKyNpZm5kZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZCitzdGF0aWMgaW5saW5lIGludCByZWlzZXJmc19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCQkgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJIHN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgKnNlYykKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50CityZWlzZXJmc19zZWN1cml0eV93cml0ZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQlzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlICpzZWMpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfc2VjdXJpdHlfZnJlZShzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlICpzZWMpCit7fQorI2VuZGlmCisKICNlbmRpZiAgLyogIF9fS0VSTkVMX18gICovCiAKICNlbmRpZiAgLyogIF9MSU5VWF9SRUlTRVJGU19YQVRUUl9IICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDFkMTljMDIuLjI5ZGY2MzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTMzMSw3ICszMzEsOSBAQAogZXh0ZXJuIHNpZ25lZCBsb25nIHNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShzaWduZWQgbG9uZyB0aW1lb3V0KTsKIGV4dGVybiBzaWduZWQgbG9uZyBzY2hlZHVsZV90aW1lb3V0X2tpbGxhYmxlKHNpZ25lZCBsb25nIHRpbWVvdXQpOwogZXh0ZXJuIHNpZ25lZCBsb25nIHNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKHNpZ25lZCBsb25nIHRpbWVvdXQpOworYXNtbGlua2FnZSB2b2lkIF9fc2NoZWR1bGUodm9pZCk7CiBhc21saW5rYWdlIHZvaWQgc2NoZWR1bGUodm9pZCk7CitleHRlcm4gaW50IG11dGV4X3NwaW5fb25fb3duZXIoc3RydWN0IG11dGV4ICpsb2NrLCBzdHJ1Y3QgdGhyZWFkX2luZm8gKm93bmVyKTsKIAogc3RydWN0IG5zcHJveHk7CiBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2U7CkBAIC0xMzM0LDYgKzEzMzYsNyBAQAogCWludCBsb2NrZGVwX2RlcHRoOwogCXVuc2lnbmVkIGludCBsb2NrZGVwX3JlY3Vyc2lvbjsKIAlzdHJ1Y3QgaGVsZF9sb2NrIGhlbGRfbG9ja3NbTUFYX0xPQ0tfREVQVEhdOworCWdmcF90IGxvY2tkZXBfcmVjbGFpbV9nZnA7CiAjZW5kaWYKIAogLyogam91cm5hbGxpbmcgZmlsZXN5c3RlbSBpbmZvICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggMWYyYWI2My4uNTRlZDE1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtODgwLDExICs4ODAsNiBAQAogICoJQHNvY2sgY29udGFpbnMgdGhlIGxpc3RlbmluZyBzb2NrZXQgc3RydWN0dXJlLgogICoJQG5ld3NvY2sgY29udGFpbnMgdGhlIG5ld2x5IGNyZWF0ZWQgc2VydmVyIHNvY2tldCBmb3IgY29ubmVjdGlvbi4KICAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KLSAqIEBzb2NrZXRfcG9zdF9hY2NlcHQ6Ci0gKglUaGlzIGhvb2sgYWxsb3dzIGEgc2VjdXJpdHkgbW9kdWxlIHRvIGNvcHkgc2VjdXJpdHkKLSAqCWluZm9ybWF0aW9uIGludG8gdGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0J3MgaW5vZGUuCi0gKglAc29jayBjb250YWlucyB0aGUgbGlzdGVuaW5nIHNvY2tldCBzdHJ1Y3R1cmUuCi0gKglAbmV3c29jayBjb250YWlucyB0aGUgbmV3bHkgY3JlYXRlZCBzZXJ2ZXIgc29ja2V0IGZvciBjb25uZWN0aW9uLgogICogQHNvY2tldF9zZW5kbXNnOgogICoJQ2hlY2sgcGVybWlzc2lvbiBiZWZvcmUgdHJhbnNtaXR0aW5nIGEgbWVzc2FnZSB0byBhbm90aGVyIHNvY2tldC4KICAqCUBzb2NrIGNvbnRhaW5zIHRoZSBzb2NrZXQgc3RydWN0dXJlLgpAQCAtMTU1NCw4ICsxNTQ5LDYgQEAKIAkJCSAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MsIGludCBhZGRybGVuKTsKIAlpbnQgKCpzb2NrZXRfbGlzdGVuKSAoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGJhY2tsb2cpOwogCWludCAoKnNvY2tldF9hY2NlcHQpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrKTsKLQl2b2lkICgqc29ja2V0X3Bvc3RfYWNjZXB0KSAoc3RydWN0IHNvY2tldCAqc29jaywKLQkJCQkgICAgc3RydWN0IHNvY2tldCAqbmV3c29jayk7CiAJaW50ICgqc29ja2V0X3NlbmRtc2cpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQkJICAgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHNpemUpOwogCWludCAoKnNvY2tldF9yZWN2bXNnKSAoc3RydWN0IHNvY2tldCAqc29jaywKQEAgLTI1MzcsNyArMjUzMCw2IEBACiBpbnQgc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLCBpbnQgYWRkcmxlbik7CiBpbnQgc2VjdXJpdHlfc29ja2V0X2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZyk7CiBpbnQgc2VjdXJpdHlfc29ja2V0X2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrKTsKLXZvaWQgc2VjdXJpdHlfc29ja2V0X3Bvc3RfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2spOwogaW50IHNlY3VyaXR5X3NvY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHNpemUpOwogaW50IHNlY3VyaXR5X3NvY2tldF9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJCSAgICBpbnQgc2l6ZSwgaW50IGZsYWdzKTsKQEAgLTI2MTYsMTEgKzI2MDgsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VjdXJpdHlfc29ja2V0X3Bvc3RfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0JCQkJCSAgICAgICBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrKQotewotfQotCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zb2NrZXRfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQkJCQkgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHNpemUpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcV9maWxlLmggYi9pbmNsdWRlL2xpbnV4L3NlcV9maWxlLmgKaW5kZXggZjYxNmYzMS4uMDA0ZjNiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXFfZmlsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaApAQCAtNTUsNyArNTUsNyBAQAogCQkJCSAgIHVuc2lnbmVkIGludCBucl9iaXRzKTsKIHN0YXRpYyBpbmxpbmUgaW50IHNlcV9jcHVtYXNrKHN0cnVjdCBzZXFfZmlsZSAqbSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCiB7Ci0JcmV0dXJuIHNlcV9iaXRtYXAobSwgbWFzay0+Yml0cywgbnJfY3B1X2lkcyk7CisJcmV0dXJuIHNlcV9iaXRtYXAobSwgY3B1bWFza19iaXRzKG1hc2spLCBucl9jcHVfaWRzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc2VxX25vZGVtYXNrKHN0cnVjdCBzZXFfZmlsZSAqbSwgbm9kZW1hc2tfdCAqbWFzaykKQEAgLTYzLDEyICs2MywxMyBAQAogCXJldHVybiBzZXFfYml0bWFwKG0sIG1hc2stPmJpdHMsIE1BWF9OVU1OT0RFUyk7CiB9CiAKLWludCBzZXFfYml0bWFwX2xpc3Qoc3RydWN0IHNlcV9maWxlICptLCB1bnNpZ25lZCBsb25nICpiaXRzLAoraW50IHNlcV9iaXRtYXBfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdHMsCiAJCXVuc2lnbmVkIGludCBucl9iaXRzKTsKIAotc3RhdGljIGlubGluZSBpbnQgc2VxX2NwdW1hc2tfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNwdW1hc2tfdCAqbWFzaykKK3N0YXRpYyBpbmxpbmUgaW50IHNlcV9jcHVtYXNrX2xpc3Qoc3RydWN0IHNlcV9maWxlICptLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQogewotCXJldHVybiBzZXFfYml0bWFwX2xpc3QobSwgbWFzay0+Yml0cywgTlJfQ1BVUyk7CisJcmV0dXJuIHNlcV9iaXRtYXBfbGlzdChtLCBjcHVtYXNrX2JpdHMobWFzayksIG5yX2NwdV9pZHMpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzZXFfbm9kZW1hc2tfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIG5vZGVtYXNrX3QgKm1hc2spCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3aW90bGIuaCBiL2luY2x1ZGUvbGludXgvc3dpb3RsYi5oCmluZGV4IGRlZGQzYzAuLmFjOWZmNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dpb3RsYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3dpb3RsYi5oCkBAIC0zMSw3ICszMSw3IEBACiAJCQkJICAgICAgcGh5c19hZGRyX3QgYWRkcmVzcyk7CiBleHRlcm4gcGh5c19hZGRyX3Qgc3dpb3RsYl9idXNfdG9fcGh5cyhkbWFfYWRkcl90IGFkZHJlc3MpOwogCi1leHRlcm4gaW50IHN3aW90bGJfYXJjaF9yYW5nZV9uZWVkc19tYXBwaW5nKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworZXh0ZXJuIGludCBzd2lvdGxiX2FyY2hfcmFuZ2VfbmVlZHNfbWFwcGluZyhwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUpOwogCiBleHRlcm4gdm9pZAogKnN3aW90bGJfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLApAQCAtNDEsMjAgKzQxLDEzIEBACiBzd2lvdGxiX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLAogCQkgICAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKIAotZXh0ZXJuIGRtYV9hZGRyX3QKLXN3aW90bGJfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgaW50IGRpcik7Ci0KLWV4dGVybiB2b2lkCi1zd2lvdGxiX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcik7Ci0KLWV4dGVybiBkbWFfYWRkcl90Ci1zd2lvdGxiX21hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqaHdkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCi0JCQkgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOwotCi1leHRlcm4gdm9pZAotc3dpb3RsYl91bm1hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCi0JCQkgICBzaXplX3Qgc2l6ZSwgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworZXh0ZXJuIGRtYV9hZGRyX3Qgc3dpb3RsYl9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkJICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworZXh0ZXJuIHZvaWQgc3dpb3RsYl91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAorCQkJICAgICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOwogCiBleHRlcm4gaW50CiBzd2lvdGxiX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLApAQCAtNjYsMzYgKzU5LDM4IEBACiAKIGV4dGVybiBpbnQKIHN3aW90bGJfbWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgaW50IG5lbGVtcywKLQkJICAgICBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7CisJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7CiAKIGV4dGVybiB2b2lkCiBzd2lvdGxiX3VubWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKLQkJICAgICAgIGludCBuZWxlbXMsIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKKwkJICAgICAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJICAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKIAogZXh0ZXJuIHZvaWQKIHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCSAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CisJCQkgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CiAKIGV4dGVybiB2b2lkCiBzd2lvdGxiX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCWludCBuZWxlbXMsIGludCBkaXIpOworCQkJaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKIAogZXh0ZXJuIHZvaWQKIHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCSAgICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CisJCQkgICAgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CiAKIGV4dGVybiB2b2lkCiBzd2lvdGxiX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCSAgIGludCBuZWxlbXMsIGludCBkaXIpOworCQkJICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKIAogZXh0ZXJuIHZvaWQKIHN3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CisJCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOwogCiBleHRlcm4gdm9pZAogc3dpb3RsYl9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCQkJCSAgICAgaW50IGRpcik7CisJCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOwogCiBleHRlcm4gaW50CiBzd2lvdGxiX2RtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXIuaCBiL2luY2x1ZGUvbGludXgvdGltZXIuaAppbmRleCBlMmQ2NjJlLi42Y2RiNmYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lci5oCkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdvYmplY3RzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAKIHN0cnVjdCB0dmVjX2Jhc2U7CiAKQEAgLTIxLDUyICsyMiwxMjYgQEAKIAljaGFyIHN0YXJ0X2NvbW1bMTZdOwogCWludCBzdGFydF9waWQ7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfTE9DS0RFUAorCXN0cnVjdCBsb2NrZGVwX21hcCBsb2NrZGVwX21hcDsKKyNlbmRpZgogfTsKIAogZXh0ZXJuIHN0cnVjdCB0dmVjX2Jhc2UgYm9vdF90dmVjX2Jhc2VzOwogCisjaWZkZWYgQ09ORklHX0xPQ0tERVAKKy8qCisgKiBOQjogYmVjYXVzZSB3ZSBoYXZlIHRvIGNvcHkgdGhlIGxvY2tkZXBfbWFwLCBzZXR0aW5nIHRoZSBsb2NrZGVwX21hcCBrZXkKKyAqIChzZWNvbmQgYXJndW1lbnQpIGhlcmUgaXMgcmVxdWlyZWQsIG90aGVyd2lzZSBpdCBjb3VsZCBiZSBpbml0aWFsaXNlZCB0bworICogdGhlIGNvcHkgb2YgdGhlIGxvY2tkZXBfbWFwIGxhdGVyISBXZSB1c2UgdGhlIHBvaW50ZXIgdG8gYW5kIHRoZSBzdHJpbmcKKyAqICI8ZmlsZT46PGxpbmU+IiBhcyB0aGUga2V5IHJlc3AuIHRoZSBuYW1lIG9mIHRoZSBsb2NrZGVwX21hcC4KKyAqLworI2RlZmluZSBfX1RJTUVSX0xPQ0tERVBfTUFQX0lOSVRJQUxJWkVSKF9rbikJCQkJXAorCS5sb2NrZGVwX21hcCA9IFNUQVRJQ19MT0NLREVQX01BUF9JTklUKF9rbiwgJl9rbiksCisjZWxzZQorI2RlZmluZSBfX1RJTUVSX0xPQ0tERVBfTUFQX0lOSVRJQUxJWkVSKF9rbikKKyNlbmRpZgorCiAjZGVmaW5lIFRJTUVSX0lOSVRJQUxJWkVSKF9mdW5jdGlvbiwgX2V4cGlyZXMsIF9kYXRhKSB7CQlcCiAJCS5lbnRyeSA9IHsgLnByZXYgPSBUSU1FUl9FTlRSWV9TVEFUSUMgfSwJXAogCQkuZnVuY3Rpb24gPSAoX2Z1bmN0aW9uKSwJCQlcCiAJCS5leHBpcmVzID0gKF9leHBpcmVzKSwJCQkJXAogCQkuZGF0YSA9IChfZGF0YSksCQkJCVwKIAkJLmJhc2UgPSAmYm9vdF90dmVjX2Jhc2VzLAkJCVwKKwkJX19USU1FUl9MT0NLREVQX01BUF9JTklUSUFMSVpFUigJCVwKKwkJCV9fRklMRV9fICI6IiBfX3N0cmluZ2lmeShfX0xJTkVfXykpCVwKIAl9CiAKICNkZWZpbmUgREVGSU5FX1RJTUVSKF9uYW1lLCBfZnVuY3Rpb24sIF9leHBpcmVzLCBfZGF0YSkJCVwKIAlzdHJ1Y3QgdGltZXJfbGlzdCBfbmFtZSA9CQkJCVwKIAkJVElNRVJfSU5JVElBTElaRVIoX2Z1bmN0aW9uLCBfZXhwaXJlcywgX2RhdGEpCiAKLXZvaWQgaW5pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpOwotdm9pZCBpbml0X3RpbWVyX2RlZmVycmFibGUoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTsKK3ZvaWQgaW5pdF90aW1lcl9rZXkoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLAorCQkgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKK3ZvaWQgaW5pdF90aW1lcl9kZWZlcnJhYmxlX2tleShzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsCisJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSk7CisKKyNpZmRlZiBDT05GSUdfTE9DS0RFUAorI2RlZmluZSBpbml0X3RpbWVyKHRpbWVyKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7CQkJXAorCQlpbml0X3RpbWVyX2tleSgodGltZXIpLCAjdGltZXIsICZfX2tleSk7CQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBpbml0X3RpbWVyX2RlZmVycmFibGUodGltZXIpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OwkJCVwKKwkJaW5pdF90aW1lcl9kZWZlcnJhYmxlX2tleSgodGltZXIpLCAjdGltZXIsICZfX2tleSk7CVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGluaXRfdGltZXJfb25fc3RhY2sodGltZXIpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OwkJCVwKKwkJaW5pdF90aW1lcl9vbl9zdGFja19rZXkoKHRpbWVyKSwgI3RpbWVyLCAmX19rZXkpOwlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBzZXR1cF90aW1lcih0aW1lciwgZm4sIGRhdGEpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OwkJCVwKKwkJc2V0dXBfdGltZXJfa2V5KCh0aW1lciksICN0aW1lciwgJl9fa2V5LCAoZm4pLCAoZGF0YSkpO1wKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIHNldHVwX3RpbWVyX29uX3N0YWNrKHRpbWVyLCBmbiwgZGF0YSkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTsJCQlcCisJCXNldHVwX3RpbWVyX29uX3N0YWNrX2tleSgodGltZXIpLCAjdGltZXIsICZfX2tleSwJXAorCQkJCQkgKGZuKSwgKGRhdGEpKTsJCQlcCisJfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIGluaXRfdGltZXIodGltZXIpXAorCWluaXRfdGltZXJfa2V5KCh0aW1lciksIE5VTEwsIE5VTEwpCisjZGVmaW5lIGluaXRfdGltZXJfZGVmZXJyYWJsZSh0aW1lcilcCisJaW5pdF90aW1lcl9kZWZlcnJhYmxlX2tleSgodGltZXIpLCBOVUxMLCBOVUxMKQorI2RlZmluZSBpbml0X3RpbWVyX29uX3N0YWNrKHRpbWVyKVwKKwlpbml0X3RpbWVyX29uX3N0YWNrX2tleSgodGltZXIpLCBOVUxMLCBOVUxMKQorI2RlZmluZSBzZXR1cF90aW1lcih0aW1lciwgZm4sIGRhdGEpXAorCXNldHVwX3RpbWVyX2tleSgodGltZXIpLCBOVUxMLCBOVUxMLCAoZm4pLCAoZGF0YSkpCisjZGVmaW5lIHNldHVwX3RpbWVyX29uX3N0YWNrKHRpbWVyLCBmbiwgZGF0YSlcCisJc2V0dXBfdGltZXJfb25fc3RhY2tfa2V5KCh0aW1lciksIE5VTEwsIE5VTEwsIChmbiksIChkYXRhKSkKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0RFQlVHX09CSkVDVFNfVElNRVJTCi1leHRlcm4gdm9pZCBpbml0X3RpbWVyX29uX3N0YWNrKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcik7CitleHRlcm4gdm9pZCBpbml0X3RpbWVyX29uX3N0YWNrX2tleShzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsCisJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKIGV4dGVybiB2b2lkIGRlc3Ryb3lfdGltZXJfb25fc3RhY2soc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgZGVzdHJveV90aW1lcl9vbl9zdGFjayhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfdGltZXJfb25fc3RhY2soc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQorc3RhdGljIGlubGluZSB2b2lkIGluaXRfdGltZXJfb25fc3RhY2tfa2V5KHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKKwkJCQkJICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpCiB7Ci0JaW5pdF90aW1lcih0aW1lcik7CisJaW5pdF90aW1lcl9rZXkodGltZXIsIG5hbWUsIGtleSk7CiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICogdGltZXIsCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfdGltZXJfa2V5KHN0cnVjdCB0aW1lcl9saXN0ICogdGltZXIsCisJCQkJY29uc3QgY2hhciAqbmFtZSwKKwkJCQlzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSwKIAkJCQl2b2lkICgqZnVuY3Rpb24pKHVuc2lnbmVkIGxvbmcpLAogCQkJCXVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAl0aW1lci0+ZnVuY3Rpb24gPSBmdW5jdGlvbjsKIAl0aW1lci0+ZGF0YSA9IGRhdGE7Ci0JaW5pdF90aW1lcih0aW1lcik7CisJaW5pdF90aW1lcl9rZXkodGltZXIsIG5hbWUsIGtleSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF90aW1lcl9vbl9zdGFjayhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfdGltZXJfb25fc3RhY2tfa2V5KHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKKwkJCQkJY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXksCiAJCQkJCXZvaWQgKCpmdW5jdGlvbikodW5zaWduZWQgbG9uZyksCiAJCQkJCXVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAl0aW1lci0+ZnVuY3Rpb24gPSBmdW5jdGlvbjsKIAl0aW1lci0+ZGF0YSA9IGRhdGE7Ci0JaW5pdF90aW1lcl9vbl9zdGFjayh0aW1lcik7CisJaW5pdF90aW1lcl9vbl9zdGFja19rZXkodGltZXIsIG5hbWUsIGtleSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb19kZWNvZGVyLmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvX2RlY29kZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI2YzBjOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvX2RlY29kZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLSNpZm5kZWYgX0xJTlVYX1ZJREVPX0RFQ09ERVJfSAotI2RlZmluZSBfTElOVVhfVklERU9fREVDT0RFUl9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jZGVmaW5lIEhBVkVfVklERU9fREVDT0RFUiAxCi0KLXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgeyAvKiB0aGlzIG5hbWUgaXMgdG9vIGxvbmcgKi8KLQlfX3UzMglmbGFnczsKLSNkZWZpbmUJVklERU9fREVDT0RFUl9QQUwJMQkvKiBjYW4gZGVjb2RlIFBBTCBzaWduYWwgKi8KLSNkZWZpbmUJVklERU9fREVDT0RFUl9OVFNDCTIJLyogY2FuIGRlY29kZSBOVFNDICovCi0jZGVmaW5lCVZJREVPX0RFQ09ERVJfU0VDQU0JNAkvKiBjYW4gZGVjb2RlIFNFQ0FNICovCi0jZGVmaW5lCVZJREVPX0RFQ09ERVJfQVVUTwk4CS8qIGNhbiBhdXRvc2Vuc2Ugbm9ybSAqLwotI2RlZmluZQlWSURFT19ERUNPREVSX0NDSVIJMTYJLyogQ0NJUi02MDEgcGl4ZWwgcmF0ZSAoNzIwIHBpeGVscyBwZXIgbGluZSkgaW5zdGVhZCBvZiBzcXVhcmUgcGl4ZWwgcmF0ZSAqLwotCWludAlpbnB1dHM7CQkJLyogbnVtYmVyIG9mIGlucHV0cyAqLwotCWludAlvdXRwdXRzOwkJLyogbnVtYmVyIG9mIG91dHB1dHMgKi8KLX07Ci0KLS8qCi1ERUNPREVSX0dFVF9TVEFUVVMgcmV0dXJucyB0aGUgZm9sbG93aW5nIGZsYWdzLiAgVGhlIG9ubHkgb25lIHlvdSBuZWVkIGlzCi1ERUNPREVSX1NUQVRVU19HT09ELCB0aGUgb3RoZXJzIGFyZSBqdXN0IG5pY2UgdGhpbmdzIHRvIGtub3cuCi0qLwotI2RlZmluZQlERUNPREVSX1NUQVRVU19HT09ECTEJLyogcmVjZWl2aW5nIGFjY2VwdGFibGUgaW5wdXQgKi8KLSNkZWZpbmUJREVDT0RFUl9TVEFUVVNfQ09MT1IJMgkvKiByZWNlaXZpbmcgY29sb3IgaW5mb3JtYXRpb24gKi8KLSNkZWZpbmUJREVDT0RFUl9TVEFUVVNfUEFMCTQJLyogYXV0byBkZXRlY3RlZCAqLwotI2RlZmluZQlERUNPREVSX1NUQVRVU19OVFNDCTgJLyogYXV0byBkZXRlY3RlZCAqLwotI2RlZmluZQlERUNPREVSX1NUQVRVU19TRUNBTQkxNgkvKiBhdXRvIGRldGVjdGVkICovCi0KLXN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgewotCXVuc2lnbmVkIGNoYXIgbGVuOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci19OwotCi0jZGVmaW5lCURFQ09ERVJfR0VUX0NBUEFCSUxJVElFUyBfSU9SKCdkJywgMSwgc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSkKLSNkZWZpbmUJREVDT0RFUl9HRVRfU1RBVFVTICAgIAlfSU9SKCdkJywgMiwgaW50KQotI2RlZmluZQlERUNPREVSX1NFVF9OT1JNCV9JT1coJ2QnLCAzLCBpbnQpCi0jZGVmaW5lCURFQ09ERVJfU0VUX0lOUFVUCV9JT1coJ2QnLCA0LCBpbnQpCS8qIDAgPD0gaW5wdXQgPCAjaW5wdXRzICovCi0jZGVmaW5lCURFQ09ERVJfU0VUX09VVFBVVAlfSU9XKCdkJywgNSwgaW50KQkvKiAwIDw9IG91dHB1dCA8ICNvdXRwdXRzICovCi0jZGVmaW5lCURFQ09ERVJfRU5BQkxFX09VVFBVVAlfSU9XKCdkJywgNiwgaW50KQkvKiBib29sZWFuIG91dHB1dCBlbmFibGUgY29udHJvbCAqLwotI2RlZmluZQlERUNPREVSX1NFVF9QSUNUVVJFICAgCV9JT1coJ2QnLCA3LCBzdHJ1Y3QgdmlkZW9fcGljdHVyZSkKLSNkZWZpbmUJREVDT0RFUl9TRVRfR1BJTwlfSU9XKCdkJywgOCwgaW50KQkvKiBzd2l0Y2ggZ2VuZXJhbCBwdXJwb3NlIHBpbiAqLwotI2RlZmluZQlERUNPREVSX0lOSVQJCV9JT1coJ2QnLCA5LCBzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0KQkvKiBpbml0IGludGVybmFsIHJlZ2lzdGVycyBhdCBvbmNlICovCi0jZGVmaW5lCURFQ09ERVJfU0VUX1ZCSV9CWVBBU1MJX0lPVygnZCcsIDEwLCBpbnQpCS8qIHN3aXRjaCB2YmkgYnlwYXNzICovCi0KLSNkZWZpbmUJREVDT0RFUl9EVU1QCQlfSU8oJ2QnLCAxOTIpCQkvKiBkZWJ1ZyBob29rICovCi0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvX2VuY29kZXIuaCBiL2luY2x1ZGUvbGludXgvdmlkZW9fZW5jb2Rlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2I2NDIzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvdmlkZW9fZW5jb2Rlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotI2lmbmRlZiBfTElOVVhfVklERU9fRU5DT0RFUl9ICi0jZGVmaW5lIF9MSU5VWF9WSURFT19FTkNPREVSX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLXN0cnVjdCB2aWRlb19lbmNvZGVyX2NhcGFiaWxpdHkgeyAvKiB0aGlzIG5hbWUgaXMgdG9vIGxvbmcgKi8KLQlfX3UzMglmbGFnczsKLSNkZWZpbmUJVklERU9fRU5DT0RFUl9QQUwJMQkvKiBjYW4gZW5jb2RlIFBBTCBzaWduYWwgKi8KLSNkZWZpbmUJVklERU9fRU5DT0RFUl9OVFNDCTIJLyogY2FuIGVuY29kZSBOVFNDICovCi0jZGVmaW5lCVZJREVPX0VOQ09ERVJfU0VDQU0JNAkvKiBjYW4gZW5jb2RlIFNFQ0FNICovCi0jZGVmaW5lCVZJREVPX0VOQ09ERVJfQ0NJUgkxNgkvKiBDQ0lSLTYwMSBwaXhlbCByYXRlICg3MjAgcGl4ZWxzIHBlciBsaW5lKSBpbnN0ZWFkIG9mIHNxdWFyZSBwaXhlbCByYXRlICovCi0JaW50CWlucHV0czsJCQkvKiBudW1iZXIgb2YgaW5wdXRzICovCi0JaW50CW91dHB1dHM7CQkvKiBudW1iZXIgb2Ygb3V0cHV0cyAqLwotfTsKLQotI2RlZmluZQlFTkNPREVSX0dFVF9DQVBBQklMSVRJRVMgX0lPUignZScsIDEsIHN0cnVjdCB2aWRlb19lbmNvZGVyX2NhcGFiaWxpdHkpCi0jZGVmaW5lCUVOQ09ERVJfU0VUX05PUk0JX0lPVygnZScsIDIsIGludCkKLSNkZWZpbmUJRU5DT0RFUl9TRVRfSU5QVVQJX0lPVygnZScsIDMsIGludCkJLyogMCA8PSBpbnB1dCA8ICNpbnB1dHMgKi8KLSNkZWZpbmUJRU5DT0RFUl9TRVRfT1VUUFVUCV9JT1coJ2UnLCA0LCBpbnQpCS8qIDAgPD0gb3V0cHV0IDwgI291dHB1dHMgKi8KLSNkZWZpbmUJRU5DT0RFUl9FTkFCTEVfT1VUUFVUCV9JT1coJ2UnLCA1LCBpbnQpCS8qIGJvb2xlYW4gb3V0cHV0IGVuYWJsZSBjb250cm9sICovCi0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmgKaW5kZXggODM3ZjM5Mi4uYjE5ZWFiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aWRlb2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYuaApAQCAtMTYsNiArMTYsMjMgQEAKICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCisjaWYgZGVmaW5lZChfX01JTl9WNEwxKSAmJiBkZWZpbmVkIChfX0tFUk5FTF9fKQorCisvKgorICogVXNlZCBieSB0aG9zZSBWNEwyIGNvcmUgZnVuY3Rpb25zIHRoYXQgbmVlZCBhIG1pbmltdW0gVjRMMSBzdXBwb3J0LAorICogaW4gb3JkZXIgdG8gYWxsb3cgVjRMMSBDb21wYXRpYmlsdHkgY29kZSBjb21waWxhdGlvbi4KKyAqLworCitzdHJ1Y3QgdmlkZW9fbWJ1ZgoreworCWludAlzaXplOwkJLyogVG90YWwgbWVtb3J5IHRvIG1hcCAqLworCWludAlmcmFtZXM7CQkvKiBGcmFtZXMgKi8KKwlpbnQJb2Zmc2V0c1tWSURFT19NQVhfRlJBTUVdOworfTsKKworI2RlZmluZSBWSURJT0NHTUJVRgkJX0lPUigndicsMjAsIHN0cnVjdCB2aWRlb19tYnVmKQkJLyogTWVtb3J5IG1hcCBidWZmZXIgaW5mbyAqLworCisjZWxzZQogI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUKSB8fCAhZGVmaW5lZCAoX19LRVJORUxfXykKIAogI2RlZmluZSBWSURfVFlQRV9DQVBUVVJFCTEJLyogQ2FuIGNhcHR1cmUgKi8KQEAgLTMxMiw2ICszMjksNyBAQAogI2RlZmluZSBWSURfUExBWV9FTkRfTUFSSwkJMTQKIAogI2VuZGlmIC8qIENPTkZJR19WSURFT19WNEwxX0NPTVBBVCAqLworI2VuZGlmIC8qIF9fTUlOX1Y0TDEgKi8KIAogI2VuZGlmIC8qIF9fTElOVVhfVklERU9ERVZfSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAppbmRleCA1NTcxZGJlLi4xMzlkMjM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKQEAgLTM0NCw2ICszNDQsOCBAQAogI2RlZmluZSBWNEwyX1BJWF9GTVRfU1BDQTUwOCAgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICcwJywgJzgnKSAvKiBZVVZZIHBlciBsaW5lICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUENBNTYxICB2NGwyX2ZvdXJjYygnUycsICc1JywgJzYnLCAnMScpIC8qIGNvbXByZXNzZWQgR0JSRyBiYXllciAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfUEFDMjA3ICAgdjRsMl9mb3VyY2MoJ1AnLCAnMicsICcwJywgJzcnKSAvKiBjb21wcmVzc2VkIEJHR1IgYmF5ZXIgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX01SOTczMTBBIHY0bDJfZm91cmNjKCdNJywgJzMnLCAnMScsICcwJykgLyogY29tcHJlc3NlZCBCR0dSIGJheWVyICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUTkwNUMgICB2NGwyX2ZvdXJjYygnOScsICcwJywgJzUnLCAnQycpIC8qIGNvbXByZXNzZWQgUkdHQiBiYXllciAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfUEpQRyAgICAgdjRsMl9mb3VyY2MoJ1AnLCAnSicsICdQJywgJ0cnKSAvKiBQaXhhcnQgNzN4eCBKUEVHICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVllVICAgIHY0bDJfZm91cmNjKCdZJywgJ1YnLCAnWScsICdVJykgLyogMTYgIFlWVSA0OjI6MiAgICAgKi8KIApAQCAtODI5LDYgKzgzMSw3IEBACiAjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1VQREFURSAJCTB4MDAwOAogI2RlZmluZSBWNEwyX0NUUkxfRkxBR19JTkFDVElWRSAJMHgwMDEwCiAjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1NMSURFUiAJCTB4MDAyMAorI2RlZmluZSBWNEwyX0NUUkxfRkxBR19XUklURV9PTkxZIAkweDAwNDAKIAogLyogIFF1ZXJ5IGZsYWcsIHRvIGJlIE9SZWQgd2l0aCB0aGUgY29udHJvbCBJRCAqLwogI2RlZmluZSBWNEwyX0NUUkxfRkxBR19ORVhUX0NUUkwJMHg4MDAwMDAwMApAQCAtODc5LDggKzg4MiwxNSBAQAogI2RlZmluZSBWNEwyX0NJRF9CQUNLTElHSFRfQ09NUEVOU0FUSU9OIAkoVjRMMl9DSURfQkFTRSsyOCkKICNkZWZpbmUgVjRMMl9DSURfQ0hST01BX0FHQyAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzI5KQogI2RlZmluZSBWNEwyX0NJRF9DT0xPUl9LSUxMRVIgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMzApCisjZGVmaW5lIFY0TDJfQ0lEX0NPTE9SRlgJCQkoVjRMMl9DSURfQkFTRSszMSkKK2VudW0gdjRsMl9jb2xvcmZ4IHsKKwlWNEwyX0NPTE9SRlhfTk9ORQk9IDAsCisJVjRMMl9DT0xPUkZYX0JXCQk9IDEsCisJVjRMMl9DT0xPUkZYX1NFUElBCT0gMiwKK307CisKIC8qIGxhc3QgQ0lEICsgMSAqLwotI2RlZmluZSBWNEwyX0NJRF9MQVNUUDEgICAgICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMzEpCisjZGVmaW5lIFY0TDJfQ0lEX0xBU1RQMSAgICAgICAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSszMikKIAogLyogIE1QRUctY2xhc3MgY29udHJvbCBJRHMgZGVmaW5lZCBieSBWNEwyICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQkFTRSAJCQkoVjRMMl9DVFJMX0NMQVNTX01QRUcgfCAweDkwMCkKQEAgLTEzMzksNiArMTM0OSw1MyBAQAogfTsKIAogLyoKKyAqIFNsaWNlZCBWQkkgZGF0YSBpbnNlcnRlZCBpbnRvIE1QRUcgU3RyZWFtcworICovCisKKy8qCisgKiBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUVjoKKyAqCisgKiBTdHJ1Y3R1cmUgb2YgcGF5bG9hZCBjb250YWluZWQgaW4gYW4gTVBFRyAyIFByaXZhdGUgU3RyZWFtIDEgUEVTIFBhY2tldCBpbiBhbgorICogTVBFRy0yIFByb2dyYW0gUGFjayB0aGF0IGNvbnRhaW5zIFY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9JVlRWIFNsaWNlZCBWQkkKKyAqIGRhdGEKKyAqCisgKiBOb3RlLCB0aGUgTVBFRy0yIFByb2dyYW0gUGFjayBhbmQgUHJpdmF0ZSBTdHJlYW0gMSBQRVMgcGFja2V0IGhlYWRlcgorICogZGVmaW5pdGlvbnMgYXJlIG5vdCBpbmNsdWRlZCBoZXJlLiAgU2VlIHRoZSBNUEVHLTIgc3BlY2lmaWNhdGlvbnMgZm9yIGRldGFpbHMKKyAqIG9uIHRoZXNlIGhlYWRlcnMuCisgKi8KKworLyogTGluZSB0eXBlIElEcyAqLworI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfVEVMRVRFWFRfQiAgICAgKDEpCisjZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9DQVBUSU9OXzUyNSAgICAoNCkKKyNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX1dTU182MjUgICAgICAgICg1KQorI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfVlBTICAgICAgICAgICAgKDcpCisKK3N0cnVjdCB2NGwyX21wZWdfdmJpX2l0djBfbGluZSB7CisJX191OCBpZDsJLyogT25lIG9mIFY0TDJfTVBFR19WQklfSVZUVl8qIGFib3ZlICovCisJX191OCBkYXRhWzQyXTsJLyogU2xpY2VkIFZCSSBkYXRhIGZvciB0aGUgbGluZSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB2NGwyX21wZWdfdmJpX2l0djAgeworCV9fbGUzMiBsaW5lbWFza1syXTsgLyogQml0bWFza3Mgb2YgVkJJIHNlcnZpY2UgbGluZXMgcHJlc2VudCAqLworCXN0cnVjdCB2NGwyX21wZWdfdmJpX2l0djBfbGluZSBsaW5lWzM1XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9JVFYwIHsKKwlzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9pdHYwX2xpbmUgbGluZVszNl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfTUFHSUMwCSJpdHYwIgorI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfTUFHSUMxCSJJVFYwIgorCitzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9mbXRfaXZ0diB7CisJX191OCBtYWdpY1s0XTsKKwl1bmlvbiB7CisJCXN0cnVjdCB2NGwyX21wZWdfdmJpX2l0djAgaXR2MDsKKwkJc3RydWN0IHY0bDJfbXBlZ192YmlfSVRWMCBJVFYwOworCX07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKICAqCUEgRyBHIFIgRSBHIEEgVCBFICAgUyBUIFIgVSBDIFQgVSBSIEUgUwogICovCiAKQEAgLTE0MDMsMTQgKzE0NjAsNiBAQAogCV9fdTMyIHJldmlzaW9uOyAgICAvKiBjaGlwIHJldmlzaW9uLCBjaGlwIHNwZWNpZmljICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotLyogVklESU9DX0dfQ0hJUF9JREVOVF9PTEQ6IERlcHJlY2F0ZWQsIGRvIG5vdCB1c2UgKi8KLXN0cnVjdCB2NGwyX2NoaXBfaWRlbnRfb2xkIHsKLQlfX3UzMiBtYXRjaF90eXBlOyAgLyogTWF0Y2ggdHlwZSAqLwotCV9fdTMyIG1hdGNoX2NoaXA7ICAvKiBNYXRjaCB0aGlzIGNoaXAsIG1lYW5pbmcgZGV0ZXJtaW5lZCBieSBtYXRjaF90eXBlICovCi0JX191MzIgaWRlbnQ7ICAgICAgIC8qIGNoaXAgaWRlbnRpZmllciBhcyBzcGVjaWZpZWQgaW4gPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPiAqLwotCV9fdTMyIHJldmlzaW9uOyAgICAvKiBjaGlwIHJldmlzaW9uLCBjaGlwIHNwZWNpZmljICovCi19OwotCiAvKgogICoJSSBPIEMgVCBMICAgQyBPIEQgRSBTICAgRiBPIFIgICBWIEkgRCBFIE8gICBEIEUgViBJIEMgRSBTCiAgKgpAQCAtMTQ4OCw4ICsxNTM3LDYgQEAKIC8qIEV4cGVyaW1lbnRhbCwgbWVhbnQgZm9yIGRlYnVnZ2luZywgdGVzdGluZyBhbmQgaW50ZXJuYWwgdXNlLgogICAgTmV2ZXIgdXNlIHRoaXMgaW9jdGwgaW4gYXBwbGljYXRpb25zISAqLwogI2RlZmluZSBWSURJT0NfREJHX0dfQ0hJUF9JREVOVCBfSU9XUignVicsIDgxLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCkKLS8qIFRoaXMgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBnbyBhd2F5IGluIDIuNi4zMCAqLwotI2RlZmluZSBWSURJT0NfR19DSElQX0lERU5UX09MRCBfSU9XUignVicsIDgxLCBzdHJ1Y3QgdjRsMl9jaGlwX2lkZW50X29sZCkKICNlbmRpZgogCiAjZGVmaW5lIFZJRElPQ19TX0hXX0ZSRVFfU0VFSwkgX0lPVygnVicsIDgyLCBzdHJ1Y3QgdjRsMl9od19mcmVxX3NlZWspCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2J0ODE5LmggYi9pbmNsdWRlL21lZGlhL2J0ODE5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmNjY2YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvYnQ4MTkuaApAQCAtMCwwICsxLDMzIEBACisvKgorICAgIGJ0ODE5LmggLSBidDgxOSBub3RpZmljYXRpb25zCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgSGFucyBWZXJrdWlsIChodmVya3VpbEB4czRhbGwubmwpCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpZm5kZWYgX0JUODE5X0hfCisjZGVmaW5lIF9CVDgxOV9IXworCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworLyogdjRsMl9kZXZpY2Ugbm90aWZpY2F0aW9ucy4gKi8KKworLyogTmVlZGVkIHRvIHJlc2V0IHRoZSBGSUZPIGJ1ZmZlciB3aGVuIGNoYW5naW5nIHRoZSBpbnB1dAorICAgb3IgdGhlIHZpZGVvIHN0YW5kYXJkLiAqLworI2RlZmluZSBCVDgxOV9GSUZPX1JFU0VUX0xPVyAJX0lPKCdiJywgMCkKKyNkZWZpbmUgQlQ4MTlfRklGT19SRVNFVF9ISUdIIAlfSU8oJ2InLCAxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvY3gyMzQxeC5oIGIvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmgKaW5kZXggOWVjNGQ1OC4uOWViZTg1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICAgIGN4MjM0MTUvNiBoZWFkZXIgY29udGFpbmluZyBjb21tb24gZGVmaW5lcy4KKyAgICBjeDIzNDE1LzYvOCBoZWFkZXIgY29udGFpbmluZyBjb21tb24gZGVmaW5lcy4KIAogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI4LDYgKzI4LDcgQEAKIGVudW0gY3gyMzQxeF9jYXAgewogCUNYMjM0MVhfQ0FQX0hBU19TTElDRURfVkJJID0gMSA8PCAwLAogCUNYMjM0MVhfQ0FQX0hBU19UUyAJICAgPSAxIDw8IDEsCisJQ1gyMzQxWF9DQVBfSEFTX0FDMyAJICAgPSAxIDw8IDIsCiB9OwogCiBzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyB7CkBAIC00NywxMSArNDgsMTIgQEAKIAllbnVtIHY0bDJfbXBlZ19hdWRpb19zYW1wbGluZ19mcmVxIGF1ZGlvX3NhbXBsaW5nX2ZyZXE7CiAJZW51bSB2NGwyX21wZWdfYXVkaW9fZW5jb2RpbmcgYXVkaW9fZW5jb2Rpbmc7CiAJZW51bSB2NGwyX21wZWdfYXVkaW9fbDJfYml0cmF0ZSBhdWRpb19sMl9iaXRyYXRlOworCWVudW0gdjRsMl9tcGVnX2F1ZGlvX2FjM19iaXRyYXRlIGF1ZGlvX2FjM19iaXRyYXRlOwogCWVudW0gdjRsMl9tcGVnX2F1ZGlvX21vZGUgYXVkaW9fbW9kZTsKIAllbnVtIHY0bDJfbXBlZ19hdWRpb19tb2RlX2V4dGVuc2lvbiBhdWRpb19tb2RlX2V4dGVuc2lvbjsKIAllbnVtIHY0bDJfbXBlZ19hdWRpb19lbXBoYXNpcyBhdWRpb19lbXBoYXNpczsKIAllbnVtIHY0bDJfbXBlZ19hdWRpb19jcmMgYXVkaW9fY3JjOwotCXUxNiBhdWRpb19wcm9wZXJ0aWVzOworCXUzMiBhdWRpb19wcm9wZXJ0aWVzOwogCXUxNiBhdWRpb19tdXRlOwogCiAJLyogdmlkZW8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvY3gyNTg0MC5oIGIvaW5jbHVkZS9tZWRpYS9jeDI1ODQwLmgKaW5kZXggZGI0MzFkNS4uMmMzZmJhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9jeDI1ODQwLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9jeDI1ODQwLmgKQEAgLTIxLDYgKzIxLDE4IEBACiAjaWZuZGVmIF9DWDI1ODQwX0hfCiAjZGVmaW5lIF9DWDI1ODQwX0hfCiAKKy8qIE5vdGUgdGhhdCB0aGUgY3gyNTg0MCBkcml2ZXIgcmVxdWlyZXMgdGhhdCB0aGUgYnJpZGdlIGRyaXZlciBjYWxscyB0aGUKKyAgIHY0bDJfc3ViZGV2J3MgaW5pdCBvcGVyYXRpb24gaW4gb3JkZXIgdG8gbG9hZCB0aGUgZHJpdmVyJ3MgZmlybXdhcmUuCisgICBXaXRob3V0IHRoaXMgdGhlIGF1ZGlvIHN0YW5kYXJkIGRldGVjdGlvbiB3aWxsIGZhaWwgYW5kIHlvdSB3aWxsCisgICBvbmx5IGdldCBtb25vLgorCisgICBTaW5jZSBsb2FkaW5nIHRoZSBmaXJtd2FyZSBpcyBvZnRlbiBwcm9ibGVtYXRpYyB3aGVuIHRoZSBkcml2ZXIgaXMKKyAgIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBJIHJlY29tbWVuZCBwb3N0cG9uaW5nIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgorICAgdW50aWwgdGhlIGZpcnN0IG9wZW4gb2YgdGhlIHZpZGVvIGRldmljZS4gQW5vdGhlciByZWFzb24gZm9yCisgICBwb3N0cG9uaW5nIGl0IGlzIHRoYXQgbG9hZGluZyB0aGlzIGZpcm13YXJlIHRha2VzIGEgbG9uZyB0aW1lIChzZWNvbmRzKQorICAgZHVlIHRvIHRoZSBzbG93IGkyYyBidXMgc3BlZWQuIFNvIGl0IHdpbGwgc3BlZWQgdXAgdGhlIGJvb3QgcHJvY2VzcyBpZgorICAgeW91IGNhbiBhdm9pZCBsb2FkaW5nIHRoZSBmdyBhcyBsb25nIGFzIHRoZSB2aWRlbyBkZXZpY2UgaXNuJ3QgdXNlZC4gKi8KKwogZW51bSBjeDI1ODQwX3ZpZGVvX2lucHV0IHsKIAkvKiBDb21wb3NpdGUgdmlkZW8gaW5wdXRzIEluMS1JbjggKi8KIAlDWDI1ODQwX0NPTVBPU0lURTEgPSAxLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaCBiL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKaW5kZXggNWJmMmVhMC4uN2I1YjkxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCkBAIC0xMTEsNiArMTExLDcgQEAKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdmVybWVkaWFbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYV9kdmJ0W0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdmVybWVkaWFfbTEzNWFbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYV9jYXJkYnVzW0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hcGFjX3ZpZXdjb21wW0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19waXhlbHZpZXdbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3BpeGVsdmlld19uZXdbSVJfS0VZVEFCX1NJWkVdOwpAQCAtMTU5LDYgKzE2MCw4IEBACiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfbXNpX3R2YW55d2hlcmVfcGx1c1tJUl9LRVlUQUJfU0laRV07CiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXRpX3R2X3dvbmRlcl9oZF82MDBbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2t3b3JsZF9wbHVzX3R2X2FuYWxvZ1tJUl9LRVlUQUJfU0laRV07CitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfa2Fpb215W0lSX0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19kbTExMDVfbmVjW0lSX0tFWVRBQl9TSVpFXTsKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1rYmQtaTJjLmggYi9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaAppbmRleCAwMGZhNTdlLi4wNzk2M2Q3IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaApAQCAtMTQsOCArMTQsNyBAQAogCS8qIFVzZWQgdG8gYXZvaWQgZmFzdCByZXBlYXRpbmcgKi8KIAl1bnNpZ25lZCBjaGFyICAgICAgICAgIG9sZDsKIAotCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgd29yazsKLQlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgIHRpbWVyOworCXN0cnVjdCBkZWxheWVkX3dvcmsgICAgd29yazsKIAljaGFyICAgICAgICAgICAgICAgICAgIHBoeXNbMzJdOwogCWludCAgICAgICAgICAgICAgICAgICAgKCpnZXRfa2V5KShzdHJ1Y3QgSVJfaTJjKiwgdTMyKiwgdTMyKik7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9vdjc3MnguaCBiL2luY2x1ZGUvbWVkaWEvb3Y3NzJ4LmgKaW5kZXggZTM5MWQ1NS4uNTdkYjQ4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9vdjc3MnguaAorKysgYi9pbmNsdWRlL21lZGlhL292NzcyeC5oCkBAIC0xMyw4ICsxMywxMyBAQAogCiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogCisvKiBmb3IgZmxhZ3MgKi8KKyNkZWZpbmUgT1Y3NzJYX0ZMQUdfVkZMSVAgICAgIDB4MDAwMDAwMDEgLyogVmVydGljYWwgZmxpcCBpbWFnZSAqLworI2RlZmluZSBPVjc3MlhfRkxBR19IRkxJUCAgICAgMHgwMDAwMDAwMiAvKiBIb3Jpem9udGFsIGZsaXAgaW1hZ2UgKi8KKwogc3RydWN0IG92NzcyeF9jYW1lcmFfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyAgICAgICAgICBidXN3aWR0aDsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgIGZsYWdzOwogCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgbGluazsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Ni5oIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKaW5kZXggYzVhNmUyMi4uZmZmNDIzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4JLyogZm9yIHZtYWxsb2MoKSAqLwogI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiBmb3Igdm1hbGxvY190b19wYWdlKCkgKi8KQEAgLTExMCw2ICsxMTEsOCBAQAogCiAJc3RydWN0IGxpc3RfaGVhZAkJaXRlbTsKIAorCXN0cnVjdCB2NGwyX2RldmljZSAJCXY0bDJfZGV2OworCiAJLyogZGlmZmVyZW50IGRldmljZSBsb2NrcyAqLwogCXNwaW5sb2NrX3QJCQlzbG9jazsKIAlzdHJ1Y3QgbXV0ZXgJCQlsb2NrOwpAQCAtMTQ1LDYgKzE0OCwxMSBAQAogCXN0cnVjdCBzYWE3MTQ2X2RtYQkJZF9ycHMxOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKnRvX3NhYTcxNDZfZGV2KHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IHNhYTcxNDZfZGV2LCB2NGwyX2Rldik7Cit9CisKIC8qIGZyb20gc2FhNzE0Nl9pMmMuYyAqLwogaW50IHNhYTcxNDZfaTJjX2FkYXB0ZXJfcHJlcGFyZShzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcHRlciwgdTMyIGJpdHJhdGUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaCBiL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oCmluZGV4IGM4ZDBiMjMuLmVlZDVmY2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oCkBAIC0xNTAsMTYgKzE1MCw2IEBACiAJdW5zaWduZWQgaW50IHJlc291cmNlczsJLyogcmVzb3VyY2UgbWFuYWdlbWVudCBmb3IgZGV2aWNlICovCiB9OwogCi0jZGVmaW5lIFNBQTcxNDZfRVhDTFVTSVZFCTB4MQotI2RlZmluZSBTQUE3MTQ2X0JFRk9SRQkJMHgyCi0jZGVmaW5lIFNBQTcxNDZfQUZURVIJCTB4NAotCi1zdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb25faW9jdGxzCi17Ci0JdW5zaWduZWQgaW50CWNtZDsKLQlpbnQJCWZsYWdzOwotfTsKLQogLyogZmxhZ3MgKi8KICNkZWZpbmUgU0FBNzE0Nl9VU0VfUE9SVF9CX0ZPUl9WQkkJMHgyICAgICAvKiB1c2UgaW5wdXQgcG9ydCBiIGZvciB2YmkgaGFyZHdhcmUgYnVnIHdvcmthcm91bmQgKi8KIApAQCAtMTc2LDggKzE2NiwxMCBAQAogCWludCBudW1fc3RkczsKIAlpbnQgKCpzdGRfY2FsbGJhY2spKHN0cnVjdCBzYWE3MTQ2X2RldiosIHN0cnVjdCBzYWE3MTQ2X3N0YW5kYXJkICopOwogCi0Jc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uX2lvY3RscyAqaW9jdGxzOwotCWxvbmcgKCppb2N0bCkoc3RydWN0IHNhYTcxNDZfZmggKiwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKKwkvKiB0aGUgZXh0ZW5zaW9uIGNhbiBvdmVycmlkZSB0aGlzICovCisJc3RydWN0IHY0bDJfaW9jdGxfb3BzIG9wczsKKwkvKiBwb2ludGVyIHRvIHRoZSBzYWE3MTQ2IGNvcmUgb3BzICovCisJY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzICpjb3JlX29wczsKIAogCXN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2YmlfZm9wczsKIH07CkBAIC0yMTMsNiArMjA1LDcgQEAKIHZvaWQgc2FhNzE0Nl9zZXRfZ3BpbyhzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKnNhYSwgdTggcGluLCB1OCBkYXRhKTsKIAogLyogZnJvbSBzYWE3MTQ2X3ZpZGVvLmMgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgc2FhNzE0Nl92aWRlb19pb2N0bF9vcHM7CiBleHRlcm4gc3RydWN0IHNhYTcxNDZfdXNlX29wcyBzYWE3MTQ2X3ZpZGVvX3VvcHM7CiBpbnQgc2FhNzE0Nl9zdGFydF9wcmV2aWV3KHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCk7CiBpbnQgc2FhNzE0Nl9zdG9wX3ByZXZpZXcoc3RydWN0IHNhYTcxNDZfZmggKmZoKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2hfbW9iaWxlX2NldS5oIGIvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY2V1LmgKaW5kZXggYjVkYmVmZS4uMGYzNTI0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY2V1LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY2V1LmgKQEAgLTEsMTAgKzEsMTEgQEAKICNpZm5kZWYgX19BU01fU0hfTU9CSUxFX0NFVV9IX18KICNkZWZpbmUgX19BU01fU0hfTU9CSUxFX0NFVV9IX18KIAotI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KKyNkZWZpbmUgU0hfQ0VVX0ZMQUdfVVNFXzhCSVRfQlVTCSgxIDw8IDApIC8qIHVzZSAgOGJpdCBidXMgd2lkdGggKi8KKyNkZWZpbmUgU0hfQ0VVX0ZMQUdfVVNFXzE2QklUX0JVUwkoMSA8PCAxKSAvKiB1c2UgMTZiaXQgYnVzIHdpZHRoICovCiAKIHN0cnVjdCBzaF9tb2JpbGVfY2V1X2luZm8gewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7IC8qIFNPQ0FNXy4uLiAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiB9OwogCiAjZW5kaWYgLyogX19BU01fU0hfTU9CSUxFX0NFVV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKaW5kZXggNzQ0MGQ5Mi4uMzcwMTM2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKQEAgLTQ1LDYgKzQ1LDcgQEAKIAlpbnQgbnVtX2Zvcm1hdHM7CiAJc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp1c2VyX2Zvcm1hdHM7CiAJaW50IG51bV91c2VyX2Zvcm1hdHM7CisJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOwkJLyogUHJlc2VydmUgZmllbGQgb3ZlciBjbG9zZSgpICovCiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJdm9pZCAqaG9zdF9wcml2OwkJLyogUGVyLWRldmljZSBob3N0IHByaXZhdGUgZGF0YSAqLwogCS8qIHNvY19jYW1lcmEuYyBwcml2YXRlIGNvdW50LiBPbmx5IGFjY2Vzc2VkIHdpdGggLnZpZGVvX2xvY2sgaGVsZCAqLwpAQCAtNzQsNyArNzUsOCBAQAogCWludCAoKnJlc3VtZSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwogCWludCAoKmdldF9mb3JtYXRzKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgaW50LAogCQkJICAgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICopOwotCWludCAoKnNldF9mbXQpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBfX3UzMiwgc3RydWN0IHY0bDJfcmVjdCAqKTsKKwlpbnQgKCpzZXRfY3JvcCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX3JlY3QgKik7CisJaW50ICgqc2V0X2ZtdCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2Zvcm1hdCAqKTsKIAlpbnQgKCp0cnlfZm10KShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfZm9ybWF0ICopOwogCXZvaWQgKCppbml0X3ZpZGVvYnVmKShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKiwKIAkJCSAgICAgIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKQEAgLTkzLDEzICs5NSwxOCBAQAogc3RydWN0IHNvY19jYW1lcmFfbGluayB7CiAJLyogQ2FtZXJhIGJ1cyBpZCwgdXNlZCB0byBtYXRjaCBhIGNhbWVyYSBhbmQgYSBidXMgKi8KIAlpbnQgYnVzX2lkOwotCS8qIEdQSU8gbnVtYmVyIHRvIHN3aXRjaCBiZXR3ZWVuIDggYW5kIDEwIGJpdCBtb2RlcyAqLwotCXVuc2lnbmVkIGludCBncGlvOwogCS8qIFBlciBjYW1lcmEgU09DQU1fU0VOU09SXyogYnVzIGZsYWdzICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkvKiBPcHRpb25hbCBjYWxsYmFja3MgdG8gcG93ZXIgb24gb3Igb2ZmIGFuZCByZXNldCB0aGUgc2Vuc29yICovCiAJaW50ICgqcG93ZXIpKHN0cnVjdCBkZXZpY2UgKiwgaW50KTsKIAlpbnQgKCpyZXNldCkoc3RydWN0IGRldmljZSAqKTsKKwkvKgorCSAqIHNvbWUgcGxhdGZvcm1zIG1heSBzdXBwb3J0IGRpZmZlcmVudCBkYXRhIHdpZHRocyB0aGFuIHRoZSBzZW5zb3JzCisJICogbmF0aXZlIG9uZXMgZHVlIHRvIGRpZmZlcmVudCBkYXRhIGxpbmUgcm91dGluZy4gTGV0IHRoZSBib2FyZCBjb2RlCisJICogb3ZlcndyaXRlIHRoZSB3aWR0aCBmbGFncy4KKwkgKi8KKwlpbnQgKCpzZXRfYnVzX3BhcmFtKShzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICosIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCXVuc2lnbmVkIGxvbmcgKCpxdWVyeV9idXNfcGFyYW0pKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKik7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqdG9fc29jX2NhbWVyYV9kZXYoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMTU5LDcgKzE2Niw4IEBACiAJaW50ICgqcmVsZWFzZSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwogCWludCAoKnN0YXJ0X2NhcHR1cmUpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKIAlpbnQgKCpzdG9wX2NhcHR1cmUpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKLQlpbnQgKCpzZXRfZm10KShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgX191MzIsIHN0cnVjdCB2NGwyX3JlY3QgKik7CisJaW50ICgqc2V0X2Nyb3ApKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9yZWN0ICopOworCWludCAoKnNldF9mbXQpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKik7CiAJaW50ICgqdHJ5X2ZtdCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2Zvcm1hdCAqKTsKIAl1bnNpZ25lZCBsb25nICgqcXVlcnlfYnVzX3BhcmFtKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7CiAJaW50ICgqc2V0X2J1c19wYXJhbSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcpOwpAQCAtMjM5LDE1ICsyNDcsMTkgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzb2NfY2FtZXJhX2J1c19wYXJhbV9jb21wYXRpYmxlKAogCQkJdW5zaWduZWQgbG9uZyBjYW1lcmFfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgYnVzX2ZsYWdzKQogewotCXVuc2lnbmVkIGxvbmcgY29tbW9uX2ZsYWdzLCBoc3luYywgdnN5bmMsIHBjbGs7CisJdW5zaWduZWQgbG9uZyBjb21tb25fZmxhZ3MsIGhzeW5jLCB2c3luYywgcGNsaywgZGF0YSwgYnVzd2lkdGgsIG1vZGU7CiAKIAljb21tb25fZmxhZ3MgPSBjYW1lcmFfZmxhZ3MgJiBidXNfZmxhZ3M7CiAKIAloc3luYyA9IGNvbW1vbl9mbGFncyAmIChTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX0hTWU5DX0FDVElWRV9MT1cpOwogCXZzeW5jID0gY29tbW9uX2ZsYWdzICYgKFNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fVlNZTkNfQUNUSVZFX0xPVyk7CiAJcGNsayA9IGNvbW1vbl9mbGFncyAmIChTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfCBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HKTsKKwlkYXRhID0gY29tbW9uX2ZsYWdzICYgKFNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfCBTT0NBTV9EQVRBX0FDVElWRV9MT1cpOworCW1vZGUgPSBjb21tb25fZmxhZ3MgJiAoU09DQU1fTUFTVEVSIHwgU09DQU1fU0xBVkUpOworCWJ1c3dpZHRoID0gY29tbW9uX2ZsYWdzICYgU09DQU1fREFUQVdJRFRIX01BU0s7CiAKLQlyZXR1cm4gKCFoc3luYyB8fCAhdnN5bmMgfHwgIXBjbGspID8gMCA6IGNvbW1vbl9mbGFnczsKKwlyZXR1cm4gKCFoc3luYyB8fCAhdnN5bmMgfHwgIXBjbGsgfHwgIWRhdGEgfHwgIW1vZGUgfHwgIWJ1c3dpZHRoKSA/IDAgOgorCQljb21tb25fZmxhZ3M7CiB9CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oCmluZGV4IDlhYWY2NTIuLjFiZTQ2MWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaApAQCAtMzcsMTAgKzM3LDggQEAKIAkvKiBtb2R1bGUgc2FhNzExMDoganVzdCBpZGVudCAxMDAgKi8KIAlWNEwyX0lERU5UX1NBQTcxMTAgPSAxMDAsCiAKLQkvKiBtb2R1bGUgc2FhNzExMToganVzdCBpZGVudCAxMDEgKi8KKwkvKiBtb2R1bGUgc2FhNzExNTogcmVzZXJ2ZWQgcmFuZ2UgMTAxLTE0OSAqLwogCVY0TDJfSURFTlRfU0FBNzExMSA9IDEwMSwKLQotCS8qIG1vZHVsZSBzYWE3MTE1OiByZXNlcnZlZCByYW5nZSAxMDItMTQ5ICovCiAJVjRMMl9JREVOVF9TQUE3MTEzID0gMTAzLAogCVY0TDJfSURFTlRfU0FBNzExNCA9IDEwNCwKIAlWNEwyX0lERU5UX1NBQTcxMTUgPSAxMDUsCkBAIC02Myw0NSArNjEsOTcgQEAKIAlWNEwyX0lERU5UX09WNzcyMCA9IDI1MSwKIAlWNEwyX0lERU5UX09WNzcyNSA9IDI1MiwKIAotCS8qIENvbmV4YW50IE1QRUcgZW5jb2Rlci9kZWNvZGVyczogcmVzZXJ2ZWQgcmFuZ2UgNDEwLTQyMCAqLworCS8qIG1vZHVsZSBzYWE3MTQ2OiByZXNlcnZlZCByYW5nZSAzMDAtMzA5ICovCisJVjRMMl9JREVOVF9TQUE3MTQ2ID0gMzAwLAorCisJLyogQ29uZXhhbnQgTVBFRyBlbmNvZGVyL2RlY29kZXJzOiByZXNlcnZlZCByYW5nZSA0MDAtNDIwICovCisJVjRMMl9JREVOVF9DWDIzNDE4Xzg0MyA9IDQwMywgLyogSW50ZWdyYXRlZCBBL1YgRGVjb2RlciBvbiB0aGUgJzQxOCAqLwogCVY0TDJfSURFTlRfQ1gyMzQxNSA9IDQxNSwKIAlWNEwyX0lERU5UX0NYMjM0MTYgPSA0MTYsCiAJVjRMMl9JREVOVF9DWDIzNDE4ID0gNDE4LAogCisJLyogbW9kdWxlIGF1MDgyOCAqLworCVY0TDJfSURFTlRfQVUwODI4ID0gODI4LAorCisJLyogbW9kdWxlIGluZHljYW06IGp1c3QgaWRlbnQgMjAwMCAqLworCVY0TDJfSURFTlRfSU5EWUNBTSA9IDIwMDAsCisKKwkvKiBtb2R1bGUgYnQ4MTk6IHJlc2VydmVkIHJhbmdlIDgxMC04MTkgKi8KKwlWNEwyX0lERU5UX0JUODE1QSA9IDgxNSwKKwlWNEwyX0lERU5UX0JUODE3QSA9IDgxNywKKwlWNEwyX0lERU5UX0JUODE5QSA9IDgxOSwKKworCS8qIG1vZHVsZSBidDg1NjoganVzdCBpZGVudCA4NTYgKi8KKwlWNEwyX0lERU5UX0JUODU2ID0gODU2LAorCisJLyogbW9kdWxlIGJ0ODY2OiBqdXN0IGlkZW50IDg2NiAqLworCVY0TDJfSURFTlRfQlQ4NjYgPSA4NjYsCisKKwkvKiBtb2R1bGUga3MwMTI3OiByZXNlcnZlZCByYW5nZSAxMTIwLTExMjkgKi8KKwlWNEwyX0lERU5UX0tTMDEyMlMgPSAxMTIyLAorCVY0TDJfSURFTlRfS1MwMTI3ICA9IDExMjcsCisJVjRMMl9JREVOVF9LUzAxMjdCID0gMTEyOCwKKwogCS8qIG1vZHVsZSB2cDI3c21weDoganVzdCBpZGVudCAyNzAwICovCiAJVjRMMl9JREVOVF9WUDI3U01QWCA9IDI3MDAsCiAKKwkvKiBtb2R1bGUgdnB4MzIyMDogcmVzZXJ2ZWQgcmFuZ2U6IDMyMTAtMzIyOSAqLworCVY0TDJfSURFTlRfVlBYMzIxNEMgPSAzMjE0LAorCVY0TDJfSURFTlRfVlBYMzIxNkIgPSAzMjE2LAorCVY0TDJfSURFTlRfVlBYMzIyMEEgPSAzMjIwLAorCiAJLyogbW9kdWxlIHR2cDUxNTAgKi8KIAlWNEwyX0lERU5UX1RWUDUxNTAgPSA1MTUwLAogCisJLyogbW9kdWxlIHNhYTUyNDZhOiBqdXN0IGlkZW50IDUyNDYgKi8KKwlWNEwyX0lERU5UX1NBQTUyNDZBID0gNTI0NiwKKworCS8qIG1vZHVsZSBzYWE1MjQ5OiBqdXN0IGlkZW50IDUyNDkgKi8KKwlWNEwyX0lERU5UX1NBQTUyNDkgPSA1MjQ5LAorCiAJLyogbW9kdWxlIGNzNTM0NToganVzdCBpZGVudCA1MzQ1ICovCiAJVjRMMl9JREVOVF9DUzUzNDUgPSA1MzQ1LAogCisJLyogbW9kdWxlIHRlYTY0MTVjOiBqdXN0IGlkZW50IDY0MTUgKi8KKwlWNEwyX0lERU5UX1RFQTY0MTVDID0gNjQxNSwKKworCS8qIG1vZHVsZSB0ZWE2NDIwOiBqdXN0IGlkZW50IDY0MjAgKi8KKwlWNEwyX0lERU5UX1RFQTY0MjAgPSA2NDIwLAorCisJLyogbW9kdWxlIHNhYTY1ODg6IGp1c3QgaWRlbnQgNjU4OCAqLworCVY0TDJfSURFTlRfU0FBNjU4OCA9IDY1ODgsCisKIAkvKiBtb2R1bGUgc2FhNjc1MmhzOiByZXNlcnZlZCByYW5nZSA2NzUwLTY3NTkgKi8KIAlWNEwyX0lERU5UX1NBQTY3NTJIUyA9IDY3NTIsCiAJVjRMMl9JREVOVF9TQUE2NzUySFNfQUMzID0gNjc1MywKIAorCS8qIG1vZHVsZSBhZHY3MTcwOiBqdXN0IGlkZW50IDcxNzAgKi8KKwlWNEwyX0lERU5UX0FEVjcxNzAgPSA3MTcwLAorCisJLyogbW9kdWxlIGFkdjcxNzU6IGp1c3QgaWRlbnQgNzE3NSAqLworCVY0TDJfSURFTlRfQURWNzE3NSA9IDcxNzUsCisKKwkvKiBtb2R1bGUgc2FhNzE4NToganVzdCBpZGVudCA3MTg1ICovCisJVjRMMl9JREVOVF9TQUE3MTg1ID0gNzE4NSwKKworCS8qIG1vZHVsZSBzYWE3MTkxOiBqdXN0IGlkZW50IDcxOTEgKi8KKwlWNEwyX0lERU5UX1NBQTcxOTEgPSA3MTkxLAorCiAJLyogbW9kdWxlIHdtODczOToganVzdCBpZGVudCA4NzM5ICovCiAJVjRMMl9JREVOVF9XTTg3MzkgPSA4NzM5LAogCiAJLyogbW9kdWxlIHdtODc3NToganVzdCBpZGVudCA4Nzc1ICovCiAJVjRMMl9JREVOVF9XTTg3NzUgPSA4Nzc1LAogCisJLyogbW9kdWxlIHRkYTk4NDA6IGp1c3QgaWRlbnQgOTg0MCAqLworCVY0TDJfSURFTlRfVERBOTg0MCA9IDk4NDAsCisKKwkvKiBtb2R1bGUgY2FmZV9jY2ljLCBqdXN0IGlkZW50IDg4MDEgKi8KKwlWNEwyX0lERU5UX0NBRkUgPSA4ODAxLAorCiAJLyogbW9kdWxlIHR3OTkxMDoganVzdCBpZGVudCA5OTEwICovCiAJVjRMMl9JREVOVF9UVzk5MTAgPSA5OTEwLAogCi0JLyogbW9kdWxlIGNzNTMxMzJhOiBqdXN0IGlkZW50IDUzMTMyICovCi0JVjRMMl9JREVOVF9DUzUzbDMyQSA9IDUzMTMyLAotCi0JLyogbW9kdWxlIHVwZDY0MDMxYToganVzdCBpZGVudCA2NDAzMSAqLwotCVY0TDJfSURFTlRfVVBENjQwMzFBID0gNjQwMzEsCi0KLQkvKiBtb2R1bGUgdXBkNjQwODM6IGp1c3QgaWRlbnQgNjQwODMgKi8KLQlWNEwyX0lERU5UX1VQRDY0MDgzID0gNjQwODMsCi0KLQkvKiBtb2R1bGUgbTUyNzkwOiBqdXN0IGlkZW50IDUyNzkwICovCi0JVjRMMl9JREVOVF9NNTI3OTAgPSA1Mjc5MCwKLQogCS8qIG1vZHVsZSBtc3AzNDAwOiByZXNlcnZlZCByYW5nZSAzNDAwMC0zNDk5OSBhbmQgNDQwMDAtNDQ5OTkgKi8KIAlWNEwyX0lERU5UX01TUFg0WFggID0gMzQwMDAsIC8qIGdlbmVyaWMgTVNQWDRYWCBpZGVudGlmaWVyLCBvbmx5CiAJCQkJCXVzZSBpbnRlcm5hbGx5ICh0dmVlcHJvbS5jKS4gKi8KQEAgLTE3OCw2ICsyMjgsMTggQEAKIAlWNEwyX0lERU5UX01UOVYwMjJJWDdBVEMJPSA0NTAxMCwgLyogTm8gd2F5IHRvIGRldGVjdCAibm9ybWFsIiBJNzdBVHggKi8KIAlWNEwyX0lERU5UX01UOVYwMjJJWDdBVE0JPSA0NTAxNSwgLyogYW5kICJsZWFkIGZyZWUiIElBN0FUeCBjaGlwcyAqLwogCVY0TDJfSURFTlRfTVQ5VDAzMQkJPSA0NTAyMCwKKworCS8qIG1vZHVsZSBjczUzMTMyYToganVzdCBpZGVudCA1MzEzMiAqLworCVY0TDJfSURFTlRfQ1M1M2wzMkEgPSA1MzEzMiwKKworCS8qIG1vZHVsZSB1cGQ2NDAzMWE6IGp1c3QgaWRlbnQgNjQwMzEgKi8KKwlWNEwyX0lERU5UX1VQRDY0MDMxQSA9IDY0MDMxLAorCisJLyogbW9kdWxlIHVwZDY0MDgzOiBqdXN0IGlkZW50IDY0MDgzICovCisJVjRMMl9JREVOVF9VUEQ2NDA4MyA9IDY0MDgzLAorCisJLyogbW9kdWxlIG01Mjc5MDoganVzdCBpZGVudCA1Mjc5MCAqLworCVY0TDJfSURFTlRfTTUyNzkwID0gNTI3OTAsCiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaAppbmRleCA5NWU3NGYxLi4zYTY5MDU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oCkBAIC0xMDIsMTEgKzEwMiwxNSBAQAogY29uc3QgY2hhciAqdjRsMl9jdHJsX2dldF9uYW1lKHUzMiBpZCk7CiBjb25zdCBjaGFyICoqdjRsMl9jdHJsX2dldF9tZW51KHUzMiBpZCk7CiBpbnQgdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwoc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCwgczMyIG1pbiwgczMyIG1heCwgczMyIHN0ZXAsIHMzMiBkZWYpOwotaW50IHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsKTsKIGludCB2NGwyX2N0cmxfcXVlcnlfbWVudShzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnFtZW51LAogCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsLCBjb25zdCBjaGFyICoqbWVudV9pdGVtcyk7CiAjZGVmaW5lIFY0TDJfQ1RSTF9NRU5VX0lEU19FTkQgKDB4ZmZmZmZmZmYpCiBpbnQgdjRsMl9jdHJsX3F1ZXJ5X21lbnVfdmFsaWRfaXRlbXMoc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbWVudSwgY29uc3QgdTMyICppZHMpOworCisvKiBOb3RlOiBjdHJsX2NsYXNzZXMgcG9pbnRzIHRvIGFuIGFycmF5IG9mIHUzMiBwb2ludGVycy4gRWFjaCB1MzIgYXJyYXkgaXMgYQorICAgMC10ZXJtaW5hdGVkIGFycmF5IG9mIGNvbnRyb2wgSURzLiBFYWNoIGFycmF5IG11c3QgYmUgc29ydGVkIGxvdyB0byBoaWdoCisgICBhbmQgYmVsb25nIHRvIHRoZSBzYW1lIGNvbnRyb2wgY2xhc3MuIFRoZSBhcnJheSBvZiB1MzIgcG9pbnRlcnMgbXVzdCBhbHNvCisgICBiZSBzb3J0ZWQsIGZyb20gbG93IGNsYXNzIElEcyB0byBoaWdoIGNsYXNzIElEcy4gKi8KIHUzMiB2NGwyX2N0cmxfbmV4dChjb25zdCB1MzIgKiBjb25zdCAqY3RybF9jbGFzc2VzLCB1MzIgaWQpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xNDksNiArMTUzLDIxIEBACiAvKiBJbml0aWFsaXplIGFuIHY0bDJfc3ViZGV2IHdpdGggZGF0YSBmcm9tIGFuIGkyY19jbGllbnQgc3RydWN0ICovCiB2b2lkIHY0bDJfaTJjX3N1YmRldl9pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCWNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgKm9wcyk7CisvKiBSZXR1cm4gaTJjIGNsaWVudCBhZGRyZXNzIG9mIHY0bDJfc3ViZGV2LiAqLwordW5zaWduZWQgc2hvcnQgdjRsMl9pMmNfc3ViZGV2X2FkZHIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCk7CisKK2VudW0gdjRsMl9pMmNfdHVuZXJfdHlwZSB7CisJQUREUlNfUkFESU8sCS8qIFJhZGlvIHR1bmVyIGFkZHJlc3NlcyAqLworCUFERFJTX0RFTU9ELAkvKiBEZW1vZCB0dW5lciBhZGRyZXNzZXMgKi8KKwlBRERSU19UViwJLyogVFYgdHVuZXIgYWRkcmVzc2VzICovCisJLyogVFYgdHVuZXIgYWRkcmVzc2VzIGlmIGRlbW9kIGlzIHByZXNlbnQsIHRoaXMgZXhjbHVkZXMKKwkgICBhZGRyZXNzZXMgdXNlZCBieSB0aGUgZGVtb2R1bGF0b3IgZnJvbSB0aGUgbGlzdCBvZgorCSAgIGNhbmRpZGF0ZXMuICovCisJQUREUlNfVFZfV0lUSF9ERU1PRCwKK307CisvKiBSZXR1cm4gYSBsaXN0IG9mIEkyQyB0dW5lciBhZGRyZXNzZXMgdG8gcHJvYmUuIFVzZSBvbmx5IGlmIHRoZSB0dW5lcgorICAgYWRkcmVzc2VzIGFyZSB1bmtub3duLiAqLworY29uc3QgdW5zaWduZWQgc2hvcnQgKnY0bDJfaTJjX3R1bmVyX2FkZHJzKGVudW0gdjRsMl9pMmNfdHVuZXJfdHlwZSB0eXBlKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0yODQsNCArMzAzLDcgQEAKICAgIGEgdjRsMl9ncGlvIHN0cnVjdCBpZiBhIGRpcmVjdGlvbiBpcyBhbHNvIG5lZWRlZC4gKi8KICNkZWZpbmUgVklESU9DX0lOVF9TX0dQSU8JCV9JT1coJ2QnLCAxMTcsIHUzMikKIAorLyogR2V0IGlucHV0IHN0YXR1cy4gU2FtZSBhcyB0aGUgc3RhdHVzIGZpZWxkIGluIHRoZSB2NGwyX2lucHV0IHN0cnVjdC4gKi8KKyNkZWZpbmUgVklESU9DX0lOVF9HX0lOUFVUX1NUQVRVUwlfSU9SKCdkJywgMTE4LCB1MzIpCisKICNlbmRpZiAvKiBWNEwyX0NPTU1PTl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCmluZGV4IGUzNmZhYWIuLjIwNThkZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKQEAgLTQwLDYgKzQwLDggQEAKIAl1bnNpZ25lZCBpbnQgKCpwb2xsKSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOwogCWxvbmcgKCppb2N0bCkgKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiAJbG9uZyAoKnVubG9ja2VkX2lvY3RsKSAoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKKwl1bnNpZ25lZCBsb25nICgqZ2V0X3VubWFwcGVkX2FyZWEpIChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLAorCQkJCXVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogCWludCAoKm1tYXApIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiAJaW50ICgqb3BlbikgKHN0cnVjdCBmaWxlICopOwogCWludCAoKnJlbGVhc2UpIChzdHJ1Y3QgZmlsZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXZpY2UuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXZpY2UuaAppbmRleCA1NWU0MWFmLi4wZGQzZThlIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldmljZS5oCkBAIC0zMyw3ICszMyw5IEBACiAjZGVmaW5lIFY0TDJfREVWSUNFX05BTUVfU0laRSAoQlVTX0lEX1NJWkUgKyAxNikKIAogc3RydWN0IHY0bDJfZGV2aWNlIHsKLQkvKiBkZXYtPmRyaXZlcl9kYXRhIHBvaW50cyB0byB0aGlzIHN0cnVjdCAqLworCS8qIGRldi0+ZHJpdmVyX2RhdGEgcG9pbnRzIHRvIHRoaXMgc3RydWN0LgorCSAgIE5vdGU6IGRldiBtaWdodCBiZSBOVUxMIGlmIHRoZXJlIGlzIG5vIHBhcmVudCBkZXZpY2UKKwkgICBhcyBpcyB0aGUgY2FzZSB3aXRoIGUuZy4gSVNBIGRldmljZXMuICovCiAJc3RydWN0IGRldmljZSAqZGV2OwogCS8qIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgcmVnaXN0ZXJlZCBzdWJkZXZzICovCiAJc3RydWN0IGxpc3RfaGVhZCBzdWJkZXZzOwpAQCAtNDIsMzMgKzQ0LDQzIEBACiAJc3BpbmxvY2tfdCBsb2NrOwogCS8qIHVuaXF1ZSBkZXZpY2UgbmFtZSwgYnkgZGVmYXVsdCB0aGUgZHJpdmVyIG5hbWUgKyBidXMgSUQgKi8KIAljaGFyIG5hbWVbVjRMMl9ERVZJQ0VfTkFNRV9TSVpFXTsKKwkvKiBub3RpZnkgY2FsbGJhY2sgY2FsbGVkIGJ5IHNvbWUgc3ViLWRldmljZXMuICovCisJdm9pZCAoKm5vdGlmeSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCXVuc2lnbmVkIGludCBub3RpZmljYXRpb24sIHZvaWQgKmFyZyk7CiB9OwogCi0vKiBJbml0aWFsaXplIHY0bDJfZGV2IGFuZCBtYWtlIGRldi0+ZHJpdmVyX2RhdGEgcG9pbnQgdG8gdjRsMl9kZXYgKi8KKy8qIEluaXRpYWxpemUgdjRsMl9kZXYgYW5kIG1ha2UgZGV2LT5kcml2ZXJfZGF0YSBwb2ludCB0byB2NGwyX2Rldi4KKyAgIGRldiBtYXkgYmUgTlVMTCBpbiByYXJlIGNhc2VzIChJU0EgZGV2aWNlcykuIEluIHRoYXQgY2FzZSB5b3UKKyAgIG11c3QgZmlsbCBpbiB0aGUgdjRsMl9kZXYtPm5hbWUgZmllbGQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gKi8KIGludCBfX211c3RfY2hlY2sgdjRsMl9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KTsKLS8qIFNldCB2NGwyX2Rldi0+ZGV2LT5kcml2ZXJfZGF0YSB0byBOVUxMIGFuZCB1bnJlZ2lzdGVyIGFsbCBzdWItZGV2aWNlcyAqLworLyogU2V0IHY0bDJfZGV2LT5kZXYgdG8gTlVMTC4gQ2FsbCB3aGVuIHRoZSBVU0IgcGFyZW50IGRpc2Nvbm5lY3RzLgorICAgU2luY2UgdGhlIHBhcmVudCBkaXNhcHBlYXJzIHRoaXMgZW5zdXJlcyB0aGF0IHY0bDJfZGV2IGRvZXNuJ3QgaGF2ZSBhbgorICAgaW52YWxpZCBwYXJlbnQgcG9pbnRlci4gKi8KK3ZvaWQgdjRsMl9kZXZpY2VfZGlzY29ubmVjdChzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KTsKKy8qIFVucmVnaXN0ZXIgYWxsIHN1Yi1kZXZpY2VzIGFuZCBhbnkgb3RoZXIgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gdjRsMl9kZXYuICovCiB2b2lkIHY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2Rldik7CiAKIC8qIFJlZ2lzdGVyIGEgc3ViZGV2IHdpdGggYSB2NGwyIGRldmljZS4gV2hpbGUgcmVnaXN0ZXJlZCB0aGUgc3ViZGV2IG1vZHVsZQogICAgaXMgbWFya2VkIGFzIGluLXVzZS4gQW4gZXJyb3IgaXMgcmV0dXJuZWQgaWYgdGhlIG1vZHVsZSBpcyBubyBsb25nZXIKICAgIGxvYWRlZCB3aGVuIHlvdSBhdHRlbXB0IHRvIHJlZ2lzdGVyIGl0LiAqLwotaW50IF9fbXVzdF9jaGVjayB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoc3RydWN0IHY0bDJfZGV2aWNlICpkZXYsIHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpOworaW50IF9fbXVzdF9jaGVjayB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiwKKwkJCQkJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QpOwogLyogVW5yZWdpc3RlciBhIHN1YmRldiB3aXRoIGEgdjRsMiBkZXZpY2UuIENhbiBhbHNvIGJlIGNhbGxlZCBpZiB0aGUgc3ViZGV2CiAgICB3YXNuJ3QgcmVnaXN0ZXJlZC4gSW4gdGhhdCBjYXNlIGl0IHdpbGwgZG8gbm90aGluZy4gKi8KIHZvaWQgdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCk7CiAKIC8qIEl0ZXJhdGUgb3ZlciBhbGwgc3ViZGV2cy4gKi8KLSNkZWZpbmUgdjRsMl9kZXZpY2VfZm9yX2VhY2hfc3ViZGV2KHNkLCBkZXYpCQkJCVwKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkLCAmKGRldiktPnN1YmRldnMsIGxpc3QpCisjZGVmaW5lIHY0bDJfZGV2aWNlX2Zvcl9lYWNoX3N1YmRldihzZCwgdjRsMl9kZXYpCQkJXAorCWxpc3RfZm9yX2VhY2hfZW50cnkoc2QsICYodjRsMl9kZXYpLT5zdWJkZXZzLCBsaXN0KQogCiAvKiBDYWxsIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZm9yIGFsbCBzdWJkZXZzIG1hdGNoaW5nIHRoZSBjb25kaXRpb24uCiAgICBJZ25vcmUgYW55IGVycm9ycy4gTm90ZSB0aGF0IHlvdSBjYW5ub3QgYWRkIG9yIGRlbGV0ZSBhIHN1YmRldgogICAgd2hpbGUgd2Fsa2luZyB0aGUgc3ViZGV2cyBsaXN0LiAqLwotI2RlZmluZSBfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2cyhkZXYsIGNvbmQsIG8sIGYsIGFyZ3MuLi4pIAkJXAorI2RlZmluZSBfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2cyh2NGwyX2RldiwgY29uZCwgbywgZiwgYXJncy4uLikgCVwKIAlkbyB7IAkJCQkJCQkJXAogCQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOyAJCQkJXAogCQkJCQkJCQkJXAotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkLCAmKGRldiktPnN1YmRldnMsIGxpc3QpICAgCVwKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShzZCwgJih2NGwyX2RldiktPnN1YmRldnMsIGxpc3QpICAgCVwKIAkJCWlmICgoY29uZCkgJiYgc2QtPm9wcy0+byAmJiBzZC0+b3BzLT5vLT5mKSAJXAogCQkJCXNkLT5vcHMtPm8tPmYoc2QgLCAjI2FyZ3MpOyAJCVwKIAl9IHdoaWxlICgwKQpAQCAtNzcsMTIgKzg5LDEyIEBACiAgICBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBhbiBlcnJvciBvdGhlciB0aGFuIDAgb3IgLUVOT0lPQ1RMQ01ELCB0aGVuCiAgICByZXR1cm4gd2l0aCB0aGF0IGVycm9yIGNvZGUuIE5vdGUgdGhhdCB5b3UgY2Fubm90IGFkZCBvciBkZWxldGUgYQogICAgc3ViZGV2IHdoaWxlIHdhbGtpbmcgdGhlIHN1YmRldnMgbGlzdC4gKi8KLSNkZWZpbmUgX192NGwyX2RldmljZV9jYWxsX3N1YmRldnNfdW50aWxfZXJyKGRldiwgY29uZCwgbywgZiwgYXJncy4uLikgIFwKKyNkZWZpbmUgX192NGwyX2RldmljZV9jYWxsX3N1YmRldnNfdW50aWxfZXJyKHY0bDJfZGV2LCBjb25kLCBvLCBmLCBhcmdzLi4uKSBcCiAoeyAJCQkJCQkJCQlcCiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsgCQkJCQlcCiAJbG9uZyBlcnIgPSAwOyAJCQkJCQkJXAogCQkJCQkJCQkJXAotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2QsICYoZGV2KS0+c3ViZGV2cywgbGlzdCkgeyAJCVwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkLCAmKHY0bDJfZGV2KS0+c3ViZGV2cywgbGlzdCkgeyAJCVwKIAkJaWYgKChjb25kKSAmJiBzZC0+b3BzLT5vICYmIHNkLT5vcHMtPm8tPmYpIAkJXAogCQkJZXJyID0gc2QtPm9wcy0+by0+ZihzZCAsICMjYXJncyk7IAkJXAogCQlpZiAoZXJyICYmIGVyciAhPSAtRU5PSU9DVExDTUQpCQkJCVwKQEAgLTk0LDE2ICsxMDYsMTYgQEAKIC8qIENhbGwgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBmb3IgYWxsIHN1YmRldnMgbWF0Y2hpbmcgZ3JwX2lkIChpZiAwLCB0aGVuCiAgICBtYXRjaCB0aGVtIGFsbCkuIElnbm9yZSBhbnkgZXJyb3JzLiBOb3RlIHRoYXQgeW91IGNhbm5vdCBhZGQgb3IgZGVsZXRlCiAgICBhIHN1YmRldiB3aGlsZSB3YWxraW5nIHRoZSBzdWJkZXZzIGxpc3QuICovCi0jZGVmaW5lIHY0bDJfZGV2aWNlX2NhbGxfYWxsKGRldiwgZ3JwaWQsIG8sIGYsIGFyZ3MuLi4pIAkJXAotCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzKGRldiwgCQkJCVwKKyNkZWZpbmUgdjRsMl9kZXZpY2VfY2FsbF9hbGwodjRsMl9kZXYsIGdycGlkLCBvLCBmLCBhcmdzLi4uKSAJCVwKKwlfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2cyh2NGwyX2RldiwgCQkJCVwKIAkJCSEoZ3JwaWQpIHx8IHNkLT5ncnBfaWQgPT0gKGdycGlkKSwgbywgZiAsICMjYXJncykKIAogLyogQ2FsbCB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIGZvciBhbGwgc3ViZGV2cyBtYXRjaGluZyBncnBfaWQgKGlmIDAsIHRoZW4KICAgIG1hdGNoIHRoZW0gYWxsKS4gSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgYW4gZXJyb3Igb3RoZXIgdGhhbiAwIG9yCiAgICAtRU5PSU9DVExDTUQsIHRoZW4gcmV0dXJuIHdpdGggdGhhdCBlcnJvciBjb2RlLiBOb3RlIHRoYXQgeW91IGNhbm5vdAogICAgYWRkIG9yIGRlbGV0ZSBhIHN1YmRldiB3aGlsZSB3YWxraW5nIHRoZSBzdWJkZXZzIGxpc3QuICovCi0jZGVmaW5lIHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKGRldiwgZ3JwaWQsIG8sIGYsIGFyZ3MuLi4pIAkJXAotCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzX3VudGlsX2VycihkZXYsCQkJXAorI2RlZmluZSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2Vycih2NGwyX2RldiwgZ3JwaWQsIG8sIGYsIGFyZ3MuLi4pIAlcCisJX192NGwyX2RldmljZV9jYWxsX3N1YmRldnNfdW50aWxfZXJyKHY0bDJfZGV2LAkJCVwKIAkJICAgICAgICEoZ3JwaWQpIHx8IHNkLT5ncnBfaWQgPT0gKGdycGlkKSwgbywgZiAsICMjYXJncykKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItaW9jdGwuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCmluZGV4IGIwMWMwNDQuLjdhNDUyOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPiAvKiBuZWVkIF9fdXNlciAqLwogI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorI2RlZmluZSBfX01JTl9WNEwxCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNlbHNlCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CkBAIC0yNjcsNiArMjY4LDcgQEAKIAogLyogIFZpZGVvIHN0YW5kYXJkIGZ1bmN0aW9ucyAgKi8KIGV4dGVybiBjb25zdCBjaGFyICp2NGwyX25vcm1fdG9fbmFtZSh2NGwyX3N0ZF9pZCBpZCk7CitleHRlcm4gdm9pZCB2NGwyX3ZpZGVvX3N0ZF9mcmFtZV9wZXJpb2QoaW50IGlkLCBzdHJ1Y3QgdjRsMl9mcmFjdCAqZnJhbWVwZXJpb2QpOwogZXh0ZXJuIGludCB2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3Qoc3RydWN0IHY0bDJfc3RhbmRhcmQgKnZzLAogCQkJCSAgICBpbnQgaWQsIGNvbnN0IGNoYXIgKm5hbWUpOwogLyogUHJpbnRzIHRoZSBpb2N0bCBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm1hdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oCmluZGV4IDM3YjA5ZTUuLjFkMTgxYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItc3ViZGV2LmgKQEAgLTc4LDYgKzc4LDkgQEAKIAlpbnQgKCpxdWVyeWN0cmwpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpOwogCWludCAoKmdfY3RybCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCk7CiAJaW50ICgqc19jdHJsKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKTsKKwlpbnQgKCpnX2V4dF9jdHJscykoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjdHJscyk7CisJaW50ICgqc19leHRfY3RybHMpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpOworCWludCAoKnRyeV9leHRfY3RybHMpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpOwogCWludCAoKnF1ZXJ5bWVudSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbSk7CiAJbG9uZyAoKmlvY3RsKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKQEAgLTExMiw5ICsxMTUsMTcgQEAKIAlpbnQgKCpnX3ZiaV9kYXRhKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEgKnZiaV9kYXRhKTsKIAlpbnQgKCpnX3NsaWNlZF92YmlfY2FwKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCAqY2FwKTsKIAlpbnQgKCpzX3N0ZF9vdXRwdXQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZCk7CisJaW50ICgqcXVlcnlzdGQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkICpzdGQpOworCWludCAoKmdfaW5wdXRfc3RhdHVzKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKnN0YXR1cyk7CiAJaW50ICgqc19zdHJlYW0pKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpOwotCWludCAoKnNfZm10KShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCk7CisJaW50ICgqZW51bV9mbXQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdGRlc2MpOwogCWludCAoKmdfZm10KShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCk7CisJaW50ICgqdHJ5X2ZtdCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpOworCWludCAoKnNfZm10KShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCk7CisJaW50ICgqZ19wYXJtKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJhbSk7CisJaW50ICgqc19wYXJtKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJhbSk7CisJaW50ICgqZW51bV9mcmFtZXNpemVzKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mcm1zaXplZW51bSAqZnNpemUpOworCWludCAoKmVudW1fZnJhbWVpbnRlcnZhbHMpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2ZybWl2YWxlbnVtICpmaXZhbCk7CiB9OwogCiBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHsKQEAgLTEzMiw3ICsxNDMsNyBAQAogc3RydWN0IHY0bDJfc3ViZGV2IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0Jc3RydWN0IHY0bDJfZGV2aWNlICpkZXY7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldjsKIAljb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzICpvcHM7CiAJLyogbmFtZSBtdXN0IGJlIHVuaXF1ZSAqLwogCWNoYXIgbmFtZVtWNEwyX1NVQkRFVl9OQU1FX1NJWkVdOwpAQCAtMTcxLDcgKzE4Miw3IEBACiAJLyogb3BzLT5jb3JlIE1VU1QgYmUgc2V0ICovCiAJQlVHX09OKCFvcHMgfHwgIW9wcy0+Y29yZSk7CiAJc2QtPm9wcyA9IG9wczsKLQlzZC0+ZGV2ID0gTlVMTDsKKwlzZC0+djRsMl9kZXYgPSBOVUxMOwogCXNkLT5uYW1lWzBdID0gJ1wwJzsKIAlzZC0+Z3JwX2lkID0gMDsKIAlzZC0+cHJpdiA9IE5VTEw7CkBAIC0xODYsNCArMTk3LDkgQEAKIAkoIShzZCkgPyAtRU5PREVWIDogKCgoc2QpICYmIChzZCktPm9wcy0+byAmJiAoc2QpLT5vcHMtPm8tPmYpID8JXAogCQkoc2QpLT5vcHMtPm8tPmYoKHNkKSAsICMjYXJncykgOiAtRU5PSU9DVExDTUQpKQogCisvKiBTZW5kIGEgbm90aWZpY2F0aW9uIHRvIHY0bDJfZGV2aWNlLiAqLworI2RlZmluZSB2NGwyX3N1YmRldl9ub3RpZnkoc2QsIG5vdGlmaWNhdGlvbiwgYXJnKQkJCSAgIFwKKwkoKCEoc2QpIHx8ICEoc2QpLT52NGwyX2RldiB8fCAhKHNkKS0+djRsMl9kZXYtPm5vdGlmeSkgPyAtRU5PREVWIDogXAorCSAoc2QpLT52NGwyX2Rldi0+bm90aWZ5KChzZCksIChub3RpZmljYXRpb24pLCAoYXJnKSkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1jb3JlLmggYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWNvcmUuaAppbmRleCA4NzRmMTM0Li4xYzU5NDZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWNvcmUuaAorKysgYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWNvcmUuaApAQCAtMTgsNiArMTgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorI2RlZmluZSBfX01JTl9WNEwxCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2lwc29faXB2NC5oIGIvaW5jbHVkZS9uZXQvY2lwc29faXB2NC5oCmluZGV4IGJlZGM3ZjYuLmFiZDQ0MzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NpcHNvX2lwdjQuaAorKysgYi9pbmNsdWRlL25ldC9jaXBzb19pcHY0LmgKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxuZXQvbmV0bGFiZWwuaD4KKyNpbmNsdWRlIDxuZXQvcmVxdWVzdF9zb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiAvKiBrbm93biBkb2kgdmFsdWVzICovCkBAIC0yMTUsNiArMjE2LDEwIEBACiAJCQkgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOwogdm9pZCBjaXBzb192NF9zb2NrX2RlbGF0dHIoc3RydWN0IHNvY2sgKnNrKTsKIGludCBjaXBzb192NF9zb2NrX2dldGF0dHIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKTsKK2ludCBjaXBzb192NF9yZXFfc2V0YXR0cihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCisJCQkgY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKKwkJCSBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKTsKK3ZvaWQgY2lwc29fdjRfcmVxX2RlbGF0dHIoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKIGludCBjaXBzb192NF9za2J1ZmZfc2V0YXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgIGNvbnN0IHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYsCiAJCQkgICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cik7CkBAIC0yNDcsNiArMjUyLDE4IEBACiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGNpcHNvX3Y0X3JlcV9zZXRhdHRyKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNpcHNvX3Y0X3JlcV9kZWxhdHRyKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKK3sKKwlyZXR1cm47Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGNpcHNvX3Y0X3NrYnVmZl9zZXRhdHRyKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bGFiZWwuaCBiL2luY2x1ZGUvbmV0L25ldGxhYmVsLmgKaW5kZXggNzQ5MDExZS4uNjBlYmJjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bGFiZWwuaAorKysgYi9pbmNsdWRlL25ldC9uZXRsYWJlbC5oCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgorI2luY2x1ZGUgPG5ldC9yZXF1ZXN0X3NvY2suaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIHN0cnVjdCBjaXBzb192NF9kb2k7CkBAIC00MDYsNiArNDA3LDcgQEAKICAqLwogaW50IG5ldGxibF9lbmFibGVkKHZvaWQpOwogaW50IG5ldGxibF9zb2NrX3NldGF0dHIoc3RydWN0IHNvY2sgKnNrLAorCQkJdTE2IGZhbWlseSwKIAkJCWNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOwogdm9pZCBuZXRsYmxfc29ja19kZWxhdHRyKHN0cnVjdCBzb2NrICpzayk7CiBpbnQgbmV0bGJsX3NvY2tfZ2V0YXR0cihzdHJ1Y3Qgc29jayAqc2ssCkBAIC00MTMsNiArNDE1LDkgQEAKIGludCBuZXRsYmxfY29ubl9zZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKIAkJCXN0cnVjdCBzb2NrYWRkciAqYWRkciwKIAkJCWNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOworaW50IG5ldGxibF9yZXFfc2V0YXR0cihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKTsKK3ZvaWQgbmV0bGJsX3JlcV9kZWxhdHRyKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7CiBpbnQgbmV0bGJsX3NrYnVmZl9zZXRhdHRyKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHUxNiBmYW1pbHksCiAJCQkgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOwpAQCAtNTE5LDcgKzUyNCw4IEBACiAJcmV0dXJuIDA7CiB9CiBzdGF0aWMgaW5saW5lIGludCBuZXRsYmxfc29ja19zZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCisJCQkJICAgICAgdTE2IGZhbWlseSwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogewogCXJldHVybiAtRU5PU1lTOwogfQpAQCAtNTM3LDYgKzU0MywxNSBAQAogewogCXJldHVybiAtRU5PU1lTOwogfQorc3RhdGljIGlubGluZSBpbnQgbmV0bGJsX3JlcV9zZXRhdHRyKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbmV0bGJsX3JlcV9kZWxhdHRyKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKK3sKKwlyZXR1cm47Cit9CiBzdGF0aWMgaW5saW5lIGludCBuZXRsYmxfc2tidWZmX3NldGF0dHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgICB1MTYgZmFtaWx5LAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3RlYTU3NXgtdHVuZXIuaCBiL2luY2x1ZGUvc291bmQvdGVhNTc1eC10dW5lci5oCmluZGV4IDQyNjg5OWUuLjU3MThhMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvdGVhNTc1eC10dW5lci5oCisrKyBiL2luY2x1ZGUvc291bmQvdGVhNTc1eC10dW5lci5oCkBAIC0yMiw4ICsyMiw5IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCiBzdHJ1Y3Qgc25kX3RlYTU3NXg7CiAKQEAgLTM1LDExICszNiwxMCBAQAogCiBzdHJ1Y3Qgc25kX3RlYTU3NXggewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkOwkJLyogdmlkZW8gZGV2aWNlICovCi0Jc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIGZvcHM7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmQ7CS8qIHZpZGVvIGRldmljZSAqLwogCWludCBkZXZfbnI7CQkJLyogcmVxdWVzdGVkIGRldmljZSBudW1iZXIgKyAxICovCi0JaW50IHZkX3JlZ2lzdGVyZWQ7CQkvKiB2aWRlbyBkZXZpY2UgaXMgcmVnaXN0ZXJlZCAqLwogCWludCB0ZWE1NzU5OwkJCS8qIDU3NTkgY2hpcCBpcyBwcmVzZW50ICovCisJaW50IG11dGU7CQkJLyogRGV2aWNlIGlzIG11dGVkPyAqLwogCXVuc2lnbmVkIGludCBmcmVxX2ZpeHVwOwkvKiBjcnlzdGFsIG9uYm9hcmQgKi8KIAl1bnNpZ25lZCBpbnQgdmFsOwkJLyogaHcgdmFsdWUgKi8KIAl1bnNpZ25lZCBsb25nIGZyZXE7CQkvKiBmcmVxdWVuY3kgKi8KZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggNmJmODNhZi4uZDZiMzg4ZiAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTQwNyw4ICs0MDcsNyBAQAogCSAqIFNldCB1cCB0aGUgY3VycmVudCBDUFUgYXMgcG9zc2libGUgdG8gbWlncmF0ZSB0by4KIAkgKiBUaGUgb3RoZXIgb25lcyB3aWxsIGJlIGRvbmUgYnkgY3B1X3VwL2NwdV9kb3duKCkKIAkgKi8KLQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JY3B1X3NldChjcHUsIGNwdV9hY3RpdmVfbWFwKTsKKwlzZXRfY3B1X2FjdGl2ZShzbXBfcHJvY2Vzc29yX2lkKCksIHRydWUpOwogCiAJLyogRklYTUU6IFRoaXMgc2hvdWxkIGJlIGRvbmUgaW4gdXNlcnNwYWNlIC0tUlIgKi8KIAlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKQEAgLTg0Miw3ICs4NDEsNyBAQAogCS8qCiAJICogaW5pdCBjYW4gcnVuIG9uIGFueSBjcHUuCiAJICovCi0Jc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgQ1BVX01BU0tfQUxMX1BUUik7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgY3B1X2FsbF9tYXNrKTsKIAkvKgogCSAqIFRlbGwgdGhlIHdvcmxkIHRoYXQgd2UncmUgZ29pbmcgdG8gYmUgdGhlIGdyaW0KIAkgKiByZWFwZXIgb2YgaW5ub2NlbnQgb3JwaGFuZWQgY2hpbGRyZW4uCmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1LmMgYi9rZXJuZWwvY3B1LmMKaW5kZXggNzllNDBmMC4uMzk1YjY5NyAxMDA2NDQKLS0tIGEva2VybmVsL2NwdS5jCisrKyBiL2tlcm5lbC9jcHUuYwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWNwdV9jbGVhcihjcHUsIGNwdV9hY3RpdmVfbWFwKTsKKwlzZXRfY3B1X2FjdGl2ZShjcHUsIGZhbHNlKTsKIAogCS8qCiAJICogTWFrZSBzdXJlIHRoZSBhbGwgY3B1cyBkaWQgdGhlIHJlc2NoZWR1bGUgYW5kIGFyZSBub3QKQEAgLTI5Niw3ICsyOTYsNyBAQAogCWVyciA9IF9jcHVfZG93bihjcHUsIDApOwogCiAJaWYgKGNwdV9vbmxpbmUoY3B1KSkKLQkJY3B1X3NldChjcHUsIGNwdV9hY3RpdmVfbWFwKTsKKwkJc2V0X2NwdV9hY3RpdmUoY3B1LCB0cnVlKTsKIAogb3V0OgogCWNwdV9tYXBzX3VwZGF0ZV9kb25lKCk7CkBAIC0zMzMsNyArMzMzLDcgQEAKIAkJZ290byBvdXRfbm90aWZ5OwogCUJVR19PTighY3B1X29ubGluZShjcHUpKTsKIAotCWNwdV9zZXQoY3B1LCBjcHVfYWN0aXZlX21hcCk7CisJc2V0X2NwdV9hY3RpdmUoY3B1LCB0cnVlKTsKIAogCS8qIE5vdyBjYWxsIG5vdGlmaWVyIGluIHByZXBhcmF0aW9uLiAqLwogCXJhd19ub3RpZmllcl9jYWxsX2NoYWluKCZjcHVfY2hhaW4sIENQVV9PTkxJTkUgfCBtb2QsIGhjcHUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggNjcxNWViYy4uNDdjMTU4NCAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAltbS0+ZnJlZV9hcmVhX2NhY2hlID0gb2xkbW0tPm1tYXBfYmFzZTsKIAltbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IH4wVUw7CiAJbW0tPm1hcF9jb3VudCA9IDA7Ci0JY3B1c19jbGVhcihtbS0+Y3B1X3ZtX21hc2spOworCWNwdW1hc2tfY2xlYXIobW1fY3B1bWFzayhtbSkpOwogCW1tLT5tbV9yYiA9IFJCX1JPT1Q7CiAJcmJfbGluayA9ICZtbS0+bW1fcmIucmJfbm9kZTsKIAlyYl9wYXJlbnQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4LmMgYi9rZXJuZWwvZnV0ZXguYwppbmRleCA0Mzg3MDFhLi42YjUwYTAyIDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXguYworKysgYi9rZXJuZWwvZnV0ZXguYwpAQCAtMTE0LDcgKzExNCw5IEBACiB9OwogCiAvKgotICogU3BsaXQgdGhlIGdsb2JhbCBmdXRleF9sb2NrIGludG8gZXZlcnkgaGFzaCBsaXN0IGxvY2suCisgKiBIYXNoIGJ1Y2tldHMgYXJlIHNoYXJlZCBieSBhbGwgdGhlIGZ1dGV4X2tleXMgdGhhdCBoYXNoIHRvIHRoZSBzYW1lCisgKiBsb2NhdGlvbi4gIEVhY2gga2V5IG1heSBoYXZlIG11bHRpcGxlIGZ1dGV4X3Egc3RydWN0dXJlcywgb25lIGZvciBlYWNoIHRhc2sKKyAqIHdhaXRpbmcgb24gYSBmdXRleC4KICAqLwogc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0IHsKIAlzcGlubG9ja190IGxvY2s7CkBAIC0xODksOCArMTkxLDcgQEAKIC8qKgogICogZ2V0X2Z1dGV4X2tleSAtIEdldCBwYXJhbWV0ZXJzIHdoaWNoIGFyZSB0aGUga2V5cyBmb3IgYSBmdXRleC4KICAqIEB1YWRkcjogdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBmdXRleAotICogQHNoYXJlZDogTlVMTCBmb3IgYSBQUk9DRVNTX1BSSVZBVEUgZnV0ZXgsCi0gKgkmY3VycmVudC0+bW0tPm1tYXBfc2VtIGZvciBhIFBST0NFU1NfU0hBUkVEIGZ1dGV4CisgKiBAZnNoYXJlZDogMCBmb3IgYSBQUk9DRVNTX1BSSVZBVEUgZnV0ZXgsIDEgZm9yIFBST0NFU1NfU0hBUkVECiAgKiBAa2V5OiBhZGRyZXNzIHdoZXJlIHJlc3VsdCBpcyBzdG9yZWQuCiAgKgogICogUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3IgMApAQCAtMjAwLDkgKzIwMSw3IEBACiAgKiBvZmZzZXRfd2l0aGluX3BhZ2UpLiAgRm9yIHByaXZhdGUgbWFwcGluZ3MsIGl0J3MgKHVhZGRyLCBjdXJyZW50LT5tbSkuCiAgKiBXZSBjYW4gdXN1YWxseSB3b3JrIG91dCB0aGUgaW5kZXggd2l0aG91dCBzd2FwcGluZyBpbiB0aGUgcGFnZS4KICAqCi0gKiBmc2hhcmVkIGlzIE5VTEwgZm9yIFBST0NFU1NfUFJJVkFURSBmdXRleGVzCi0gKiBGb3Igb3RoZXIgZnV0ZXhlcywgaXQgcG9pbnRzIHRvICZjdXJyZW50LT5tbS0+bW1hcF9zZW0gYW5kCi0gKiBjYWxsZXIgbXVzdCBoYXZlIHRha2VuIHRoZSByZWFkZXIgbG9jay4gYnV0IE5PVCBhbnkgc3BpbmxvY2tzLgorICogbG9ja19wYWdlKCkgbWlnaHQgc2xlZXAsIHRoZSBjYWxsZXIgc2hvdWxkIG5vdCBob2xkIGEgc3BpbmxvY2suCiAgKi8KIHN0YXRpYyBpbnQgZ2V0X2Z1dGV4X2tleSh1MzIgX191c2VyICp1YWRkciwgaW50IGZzaGFyZWQsIHVuaW9uIGZ1dGV4X2tleSAqa2V5KQogewpAQCAtMjk5LDQxICsyOTgsNiBAQAogCXJldHVybiByZXQgPyAtRUZBVUxUIDogMDsKIH0KIAotLyoKLSAqIEZhdWx0IGhhbmRsaW5nLgotICovCi1zdGF0aWMgaW50IGZ1dGV4X2hhbmRsZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBhdHRlbXB0KQotewotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYTsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwotCWludCByZXQgPSAtRUZBVUxUOwotCi0JaWYgKGF0dGVtcHQgPiAyKQotCQlyZXR1cm4gcmV0OwotCi0JZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyZXNzKTsKLQlpZiAodm1hICYmIGFkZHJlc3MgPj0gdm1hLT52bV9zdGFydCAmJgotCSAgICAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkgewotCQlpbnQgZmF1bHQ7Ci0JCWZhdWx0ID0gaGFuZGxlX21tX2ZhdWx0KG1tLCB2bWEsIGFkZHJlc3MsIDEpOwotCQlpZiAodW5saWtlbHkoKGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSkgewotI2lmIDAKLQkJCS8qIFhYWDogbGV0J3MgZG8gdGhpcyB3aGVuIHdlIHZlcmlmeSBpdCBpcyBPSyAqLwotCQkJaWYgKHJldCAmIFZNX0ZBVUxUX09PTSkKLQkJCQlyZXQgPSAtRU5PTUVNOwotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQlyZXQgPSAwOwotCQkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfTUFKT1IpCi0JCQkJY3VycmVudC0+bWFqX2ZsdCsrOwotCQkJZWxzZQotCQkJCWN1cnJlbnQtPm1pbl9mbHQrKzsKLQkJfQotCX0KLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCXJldHVybiByZXQ7Ci19CiAKIC8qCiAgKiBQSSBjb2RlOgpAQCAtNTg5LDEwICs1NTMsOSBAQAogCSAqIFRoZSB3YWl0aW5nIHRhc2sgY2FuIGZyZWUgdGhlIGZ1dGV4X3EgYXMgc29vbiBhcyB0aGlzIGlzIHdyaXR0ZW4sCiAJICogd2l0aG91dCB0YWtpbmcgYW55IGxvY2tzLiAgVGhpcyBtdXN0IGNvbWUgbGFzdC4KIAkgKgotCSAqIEEgbWVtb3J5IGJhcnJpZXIgaXMgcmVxdWlyZWQgaGVyZSB0byBwcmV2ZW50IHRoZSBmb2xsb3dpbmcgc3RvcmUKLQkgKiB0byBsb2NrX3B0ciBmcm9tIGdldHRpbmcgYWhlYWQgb2YgdGhlIHdha2V1cC4gQ2xlYXJpbmcgdGhlIGxvY2sKLQkgKiBhdCB0aGUgZW5kIG9mIHdha2VfdXBfYWxsKCkgZG9lcyBub3QgcHJldmVudCB0aGlzIHN0b3JlIGZyb20KLQkgKiBtb3ZpbmcuCisJICogQSBtZW1vcnkgYmFycmllciBpcyByZXF1aXJlZCBoZXJlIHRvIHByZXZlbnQgdGhlIGZvbGxvd2luZyBzdG9yZSB0bworCSAqIGxvY2tfcHRyIGZyb20gZ2V0dGluZyBhaGVhZCBvZiB0aGUgd2FrZXVwLiBDbGVhcmluZyB0aGUgbG9jayBhdCB0aGUKKwkgKiBlbmQgb2Ygd2FrZV91cCgpIGRvZXMgbm90IHByZXZlbnQgdGhpcyBzdG9yZSBmcm9tIG1vdmluZy4KIAkgKi8KIAlzbXBfd21iKCk7CiAJcS0+bG9ja19wdHIgPSBOVUxMOwpAQCAtNjkyLDkgKzY1NSwxNiBAQAogCX0KIH0KIAorc3RhdGljIGlubGluZSB2b2lkCitkb3VibGVfdW5sb2NrX2hiKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMikKK3sKKwlzcGluX3VubG9jaygmaGIxLT5sb2NrKTsKKwlpZiAoaGIxICE9IGhiMikKKwkJc3Bpbl91bmxvY2soJmhiMi0+bG9jayk7Cit9CisKIC8qCi0gKiBXYWtlIHVwIGFsbCB3YWl0ZXJzIGhhc2hlZCBvbiB0aGUgcGh5c2ljYWwgcGFnZSB0aGF0IGlzIG1hcHBlZAotICogdG8gdGhpcyB2aXJ0dWFsIGFkZHJlc3M6CisgKiBXYWtlIHVwIHdhaXRlcnMgbWF0Y2hpbmcgYml0c2V0IHF1ZXVlZCBvbiB0aGlzIGZ1dGV4ICh1YWRkcikuCiAgKi8KIHN0YXRpYyBpbnQgZnV0ZXhfd2FrZSh1MzIgX191c2VyICp1YWRkciwgaW50IGZzaGFyZWQsIGludCBucl93YWtlLCB1MzIgYml0c2V0KQogewpAQCAtNzUwLDkgKzcyMCw5IEBACiAJc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjEsICpoYjI7CiAJc3RydWN0IHBsaXN0X2hlYWQgKmhlYWQ7CiAJc3RydWN0IGZ1dGV4X3EgKnRoaXMsICpuZXh0OwotCWludCByZXQsIG9wX3JldCwgYXR0ZW1wdCA9IDA7CisJaW50IHJldCwgb3BfcmV0OwogCi1yZXRyeWZ1bGw6CityZXRyeToKIAlyZXQgPSBnZXRfZnV0ZXhfa2V5KHVhZGRyMSwgZnNoYXJlZCwgJmtleTEpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0OwpAQCAtNzYzLDE2ICs3MzMsMTMgQEAKIAloYjEgPSBoYXNoX2Z1dGV4KCZrZXkxKTsKIAloYjIgPSBoYXNoX2Z1dGV4KCZrZXkyKTsKIAotcmV0cnk6CiAJZG91YmxlX2xvY2tfaGIoaGIxLCBoYjIpOwotCityZXRyeV9wcml2YXRlOgogCW9wX3JldCA9IGZ1dGV4X2F0b21pY19vcF9pbnVzZXIob3AsIHVhZGRyMik7CiAJaWYgKHVubGlrZWx5KG9wX3JldCA8IDApKSB7CiAJCXUzMiBkdW1teTsKIAotCQlzcGluX3VubG9jaygmaGIxLT5sb2NrKTsKLQkJaWYgKGhiMSAhPSBoYjIpCi0JCQlzcGluX3VubG9jaygmaGIyLT5sb2NrKTsKKwkJZG91YmxlX3VubG9ja19oYihoYjEsIGhiMik7CiAKICNpZm5kZWYgQ09ORklHX01NVQogCQkvKgpAQCAtNzg4LDI2ICs3NTUsMTYgQEAKIAkJCWdvdG8gb3V0X3B1dF9rZXlzOwogCQl9CiAKLQkJLyoKLQkJICogZnV0ZXhfYXRvbWljX29wX2ludXNlciBuZWVkcyB0byBib3RoIHJlYWQgYW5kIHdyaXRlCi0JCSAqICooaW50IF9fdXNlciAqKXVhZGRyMiwgYnV0IHdlIGNhbid0IG1vZGlmeSBpdAotCQkgKiBub24tYXRvbWljYWxseS4gIFRoZXJlZm9yZSwgaWYgZ2V0X3VzZXIgYmVsb3cgaXMgbm90Ci0JCSAqIGVub3VnaCwgd2UgbmVlZCB0byBoYW5kbGUgdGhlIGZhdWx0IG91cnNlbHZlcywgd2hpbGUKLQkJICogc3RpbGwgaG9sZGluZyB0aGUgbW1hcF9zZW0uCi0JCSAqLwotCQlpZiAoYXR0ZW1wdCsrKSB7Ci0JCQlyZXQgPSBmdXRleF9oYW5kbGVfZmF1bHQoKHVuc2lnbmVkIGxvbmcpdWFkZHIyLAotCQkJCQkJIGF0dGVtcHQpOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIG91dF9wdXRfa2V5czsKLQkJCWdvdG8gcmV0cnk7Ci0JCX0KLQogCQlyZXQgPSBnZXRfdXNlcihkdW1teSwgdWFkZHIyKTsKIAkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIG91dF9wdXRfa2V5czsKIAotCQlnb3RvIHJldHJ5ZnVsbDsKKwkJaWYgKCFmc2hhcmVkKQorCQkJZ290byByZXRyeV9wcml2YXRlOworCisJCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJmtleTIpOworCQlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZrZXkxKTsKKwkJZ290byByZXRyeTsKIAl9CiAKIAloZWFkID0gJmhiMS0+Y2hhaW47CkBAIC04MzQsOSArNzkxLDcgQEAKIAkJcmV0ICs9IG9wX3JldDsKIAl9CiAKLQlzcGluX3VubG9jaygmaGIxLT5sb2NrKTsKLQlpZiAoaGIxICE9IGhiMikKLQkJc3Bpbl91bmxvY2soJmhiMi0+bG9jayk7CisJZG91YmxlX3VubG9ja19oYihoYjEsIGhiMik7CiBvdXRfcHV0X2tleXM6CiAJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAma2V5Mik7CiBvdXRfcHV0X2tleTE6CkBAIC04NjksNiArODI0LDcgQEAKIAloYjEgPSBoYXNoX2Z1dGV4KCZrZXkxKTsKIAloYjIgPSBoYXNoX2Z1dGV4KCZrZXkyKTsKIAorcmV0cnlfcHJpdmF0ZToKIAlkb3VibGVfbG9ja19oYihoYjEsIGhiMik7CiAKIAlpZiAobGlrZWx5KGNtcHZhbCAhPSBOVUxMKSkgewpAQCAtODc3LDE2ICs4MzMsMTggQEAKIAkJcmV0ID0gZ2V0X2Z1dGV4X3ZhbHVlX2xvY2tlZCgmY3VydmFsLCB1YWRkcjEpOwogCiAJCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCQlzcGluX3VubG9jaygmaGIxLT5sb2NrKTsKLQkJCWlmIChoYjEgIT0gaGIyKQotCQkJCXNwaW5fdW5sb2NrKCZoYjItPmxvY2spOworCQkJZG91YmxlX3VubG9ja19oYihoYjEsIGhiMik7CiAKIAkJCXJldCA9IGdldF91c2VyKGN1cnZhbCwgdWFkZHIxKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBvdXRfcHV0X2tleXM7CiAKLQkJCWlmICghcmV0KQotCQkJCWdvdG8gcmV0cnk7CisJCQlpZiAoIWZzaGFyZWQpCisJCQkJZ290byByZXRyeV9wcml2YXRlOwogCi0JCQlnb3RvIG91dF9wdXRfa2V5czsKKwkJCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJmtleTIpOworCQkJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAma2V5MSk7CisJCQlnb3RvIHJldHJ5OwogCQl9CiAJCWlmIChjdXJ2YWwgIT0gKmNtcHZhbCkgewogCQkJcmV0ID0gLUVBR0FJTjsKQEAgLTkyMyw5ICs4ODEsNyBAQAogCX0KIAogb3V0X3VubG9jazoKLQlzcGluX3VubG9jaygmaGIxLT5sb2NrKTsKLQlpZiAoaGIxICE9IGhiMikKLQkJc3Bpbl91bmxvY2soJmhiMi0+bG9jayk7CisJZG91YmxlX3VubG9ja19oYihoYjEsIGhiMik7CiAKIAkvKiBkcm9wX2Z1dGV4X2tleV9yZWZzKCkgbXVzdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGUgc3BpbmxvY2tzLiAqLwogCXdoaWxlICgtLWRyb3BfY291bnQgPj0gMCkKQEAgLTEwNjMsNyArMTAxOSw3IEBACiAJc3RydWN0IGZ1dGV4X3BpX3N0YXRlICpwaV9zdGF0ZSA9IHEtPnBpX3N0YXRlOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqb2xkb3duZXIgPSBwaV9zdGF0ZS0+b3duZXI7CiAJdTMyIHV2YWwsIGN1cnZhbCwgbmV3dmFsOwotCWludCByZXQsIGF0dGVtcHQgPSAwOworCWludCByZXQ7CiAKIAkvKiBPd25lciBkaWVkPyAqLwogCWlmICghcGlfc3RhdGUtPm93bmVyKQpAQCAtMTA3NiwxMSArMTAzMiw5IEBACiAJICogaW4gdGhlIHVzZXIgc3BhY2UgdmFyaWFibGUuIFRoaXMgbXVzdCBiZSBhdG9taWMgYXMgd2UgaGF2ZQogCSAqIHRvIHByZXNlcnZlIHRoZSBvd25lciBkaWVkIGJpdCBoZXJlLgogCSAqCi0JICogTm90ZTogV2Ugd3JpdGUgdGhlIHVzZXIgc3BhY2UgdmFsdWUgX2JlZm9yZV8gY2hhbmdpbmcgdGhlCi0JICogcGlfc3RhdGUgYmVjYXVzZSB3ZSBjYW4gZmF1bHQgaGVyZS4gSW1hZ2luZSBzd2FwcGVkIG91dAotCSAqIHBhZ2VzIG9yIGEgZm9yaywgd2hpY2ggd2FzIHJ1bm5pbmcgcmlnaHQgYmVmb3JlIHdlIGFjcXVpcmVkCi0JICogbW1hcF9zZW0sIHRoYXQgbWFya2VkIGFsbCB0aGUgYW5vbnltb3VzIG1lbW9yeSByZWFkb25seSBmb3IKLQkgKiBjb3cuCisJICogTm90ZTogV2Ugd3JpdGUgdGhlIHVzZXIgc3BhY2UgdmFsdWUgX2JlZm9yZV8gY2hhbmdpbmcgdGhlIHBpX3N0YXRlCisJICogYmVjYXVzZSB3ZSBjYW4gZmF1bHQgaGVyZS4gSW1hZ2luZSBzd2FwcGVkIG91dCBwYWdlcyBvciBhIGZvcmsKKwkgKiB0aGF0IG1hcmtlZCBhbGwgdGhlIGFub255bW91cyBtZW1vcnkgcmVhZG9ubHkgZm9yIGNvdy4KIAkgKgogCSAqIE1vZGlmeWluZyBwaV9zdGF0ZSBfYmVmb3JlXyB0aGUgdXNlciBzcGFjZSB2YWx1ZSB3b3VsZAogCSAqIGxlYXZlIHRoZSBwaV9zdGF0ZSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgd2hlbiB3ZSBmYXVsdApAQCAtMTEzNiw3ICsxMDkwLDcgQEAKIGhhbmRsZV9mYXVsdDoKIAlzcGluX3VubG9jayhxLT5sb2NrX3B0cik7CiAKLQlyZXQgPSBmdXRleF9oYW5kbGVfZmF1bHQoKHVuc2lnbmVkIGxvbmcpdWFkZHIsIGF0dGVtcHQrKyk7CisJcmV0ID0gZ2V0X3VzZXIodXZhbCwgdWFkZHIpOwogCiAJc3Bpbl9sb2NrKHEtPmxvY2tfcHRyKTsKIApAQCAtMTE4NSwxMCArMTEzOSwxMSBAQAogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0OwogCityZXRyeV9wcml2YXRlOgogCWhiID0gcXVldWVfbG9jaygmcSk7CiAKIAkvKgotCSAqIEFjY2VzcyB0aGUgcGFnZSBBRlRFUiB0aGUgZnV0ZXggaXMgcXVldWVkLgorCSAqIEFjY2VzcyB0aGUgcGFnZSBBRlRFUiB0aGUgaGFzaC1idWNrZXQgaXMgbG9ja2VkLgogCSAqIE9yZGVyIGlzIGltcG9ydGFudDoKIAkgKgogCSAqICAgVXNlcnNwYWNlIHdhaXRlcjogdmFsID0gdmFyOyBpZiAoY29uZCh2YWwpKSBmdXRleF93YWl0KCZ2YXIsIHZhbCk7CkBAIC0xMjA0LDIwICsxMTU5LDIzIEBACiAJICogYSB3YWtldXAgd2hlbiAqdWFkZHIgIT0gdmFsIG9uIGVudHJ5IHRvIHRoZSBzeXNjYWxsLiAgVGhpcyBpcwogCSAqIHJhcmUsIGJ1dCBub3JtYWwuCiAJICoKLQkgKiBmb3Igc2hhcmVkIGZ1dGV4ZXMsIHdlIGhvbGQgdGhlIG1tYXAgc2VtYXBob3JlLCBzbyB0aGUgbWFwcGluZworCSAqIEZvciBzaGFyZWQgZnV0ZXhlcywgd2UgaG9sZCB0aGUgbW1hcCBzZW1hcGhvcmUsIHNvIHRoZSBtYXBwaW5nCiAJICogY2Fubm90IGhhdmUgY2hhbmdlZCBzaW5jZSB3ZSBsb29rZWQgaXQgdXAgaW4gZ2V0X2Z1dGV4X2tleS4KIAkgKi8KIAlyZXQgPSBnZXRfZnV0ZXhfdmFsdWVfbG9ja2VkKCZ1dmFsLCB1YWRkcik7CiAKIAlpZiAodW5saWtlbHkocmV0KSkgewogCQlxdWV1ZV91bmxvY2soJnEsIGhiKTsKLQkJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAmcS5rZXkpOwogCiAJCXJldCA9IGdldF91c2VyKHV2YWwsIHVhZGRyKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X3B1dF9rZXk7CiAKLQkJaWYgKCFyZXQpCi0JCQlnb3RvIHJldHJ5OwotCQlnb3RvIG91dDsKKwkJaWYgKCFmc2hhcmVkKQorCQkJZ290byByZXRyeV9wcml2YXRlOworCisJCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJnEua2V5KTsKKwkJZ290byByZXRyeTsKIAl9CiAJcmV0ID0gLUVXT1VMREJMT0NLOwogCWlmICh1bmxpa2VseSh1dmFsICE9IHZhbCkpIHsKQEAgLTEyNDgsMTYgKzEyMDYsMTMgQEAKIAkJaWYgKCFhYnNfdGltZSkKIAkJCXNjaGVkdWxlKCk7CiAJCWVsc2UgewotCQkJdW5zaWduZWQgbG9uZyBzbGFjazsKLQkJCXNsYWNrID0gY3VycmVudC0+dGltZXJfc2xhY2tfbnM7Ci0JCQlpZiAocnRfdGFzayhjdXJyZW50KSkKLQkJCQlzbGFjayA9IDA7CiAJCQlocnRpbWVyX2luaXRfb25fc3RhY2soJnQudGltZXIsCiAJCQkJCSAgICAgIGNsb2NrcnQgPyBDTE9DS19SRUFMVElNRSA6CiAJCQkJCSAgICAgIENMT0NLX01PTk9UT05JQywKIAkJCQkJICAgICAgSFJUSU1FUl9NT0RFX0FCUyk7CiAJCQlocnRpbWVyX2luaXRfc2xlZXBlcigmdCwgY3VycmVudCk7Ci0JCQlocnRpbWVyX3NldF9leHBpcmVzX3JhbmdlX25zKCZ0LnRpbWVyLCAqYWJzX3RpbWUsIHNsYWNrKTsKKwkJCWhydGltZXJfc2V0X2V4cGlyZXNfcmFuZ2VfbnMoJnQudGltZXIsICphYnNfdGltZSwKKwkJCQkJCSAgICAgY3VycmVudC0+dGltZXJfc2xhY2tfbnMpOwogCiAJCQlocnRpbWVyX3N0YXJ0X2V4cGlyZXMoJnQudGltZXIsIEhSVElNRVJfTU9ERV9BQlMpOwogCQkJaWYgKCFocnRpbWVyX2FjdGl2ZSgmdC50aW1lcikpCkBAIC0xMzU0LDcgKzEzMDksNyBAQAogCXN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGI7CiAJdTMyIHV2YWwsIG5ld3ZhbCwgY3VydmFsOwogCXN0cnVjdCBmdXRleF9xIHE7Ci0JaW50IHJldCwgbG9ja190YWtlbiwgb3duZXJkaWVkID0gMCwgYXR0ZW1wdCA9IDA7CisJaW50IHJldCwgbG9ja190YWtlbiwgb3duZXJkaWVkID0gMDsKIAogCWlmIChyZWZpbGxfcGlfc3RhdGVfY2FjaGUoKSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMzc0LDcgKzEzMjksNyBAQAogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0OwogCi1yZXRyeV91bmxvY2tlZDoKK3JldHJ5X3ByaXZhdGU6CiAJaGIgPSBxdWV1ZV9sb2NrKCZxKTsKIAogcmV0cnlfbG9ja2VkOgpAQCAtMTQ1OCw2ICsxNDEzLDcgQEAKIAkJCSAqIGV4aXQgdG8gY29tcGxldGUuCiAJCQkgKi8KIAkJCXF1ZXVlX3VubG9jaygmcSwgaGIpOworCQkJcHV0X2Z1dGV4X2tleShmc2hhcmVkLCAmcS5rZXkpOwogCQkJY29uZF9yZXNjaGVkKCk7CiAJCQlnb3RvIHJldHJ5OwogCkBAIC0xNTY0LDYgKzE1MjAsMTMgQEAKIAkJfQogCX0KIAorCS8qCisJICogSWYgZml4dXBfcGlfc3RhdGVfb3duZXIoKSBmYXVsdGVkIGFuZCB3YXMgdW5hYmxlIHRvIGhhbmRsZSB0aGUKKwkgKiBmYXVsdCwgdW5sb2NrIGl0IGFuZCByZXR1cm4gdGhlIGZhdWx0IHRvIHVzZXJzcGFjZS4KKwkgKi8KKwlpZiAocmV0ICYmIChydF9tdXRleF9vd25lcigmcS5waV9zdGF0ZS0+cGlfbXV0ZXgpID09IGN1cnJlbnQpKQorCQlydF9tdXRleF91bmxvY2soJnEucGlfc3RhdGUtPnBpX211dGV4KTsKKwogCS8qIFVucXVldWUgYW5kIGRyb3AgdGhlIGxvY2sgKi8KIAl1bnF1ZXVlX21lX3BpKCZxKTsKIApAQCAtMTU5MSwyMiArMTU1NCwxOCBAQAogCSAqLwogCXF1ZXVlX3VubG9jaygmcSwgaGIpOwogCi0JaWYgKGF0dGVtcHQrKykgewotCQlyZXQgPSBmdXRleF9oYW5kbGVfZmF1bHQoKHVuc2lnbmVkIGxvbmcpdWFkZHIsIGF0dGVtcHQpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXRfcHV0X2tleTsKLQkJZ290byByZXRyeV91bmxvY2tlZDsKLQl9Ci0KIAlyZXQgPSBnZXRfdXNlcih1dmFsLCB1YWRkcik7Ci0JaWYgKCFyZXQpCi0JCWdvdG8gcmV0cnk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfcHV0X2tleTsKIAotCWlmICh0bykKLQkJZGVzdHJveV9ocnRpbWVyX29uX3N0YWNrKCZ0by0+dGltZXIpOwotCXJldHVybiByZXQ7CisJaWYgKCFmc2hhcmVkKQorCQlnb3RvIHJldHJ5X3ByaXZhdGU7CisKKwlwdXRfZnV0ZXhfa2V5KGZzaGFyZWQsICZxLmtleSk7CisJZ290byByZXRyeTsKIH0KIAorCiAvKgogICogVXNlcnNwYWNlIGF0dGVtcHRlZCBhIFRJRCAtPiAwIGF0b21pYyB0cmFuc2l0aW9uLCBhbmQgZmFpbGVkLgogICogVGhpcyBpcyB0aGUgaW4ta2VybmVsIHNsb3dwYXRoOiB3ZSBsb29rIHVwIHRoZSBQSSBzdGF0ZSAoaWYgYW55KSwKQEAgLTE2MTksNyArMTU3OCw3IEBACiAJdTMyIHV2YWw7CiAJc3RydWN0IHBsaXN0X2hlYWQgKmhlYWQ7CiAJdW5pb24gZnV0ZXhfa2V5IGtleSA9IEZVVEVYX0tFWV9JTklUOwotCWludCByZXQsIGF0dGVtcHQgPSAwOworCWludCByZXQ7CiAKIHJldHJ5OgogCWlmIChnZXRfdXNlcih1dmFsLCB1YWRkcikpCkBAIC0xNjM1LDcgKzE1OTQsNiBAQAogCQlnb3RvIG91dDsKIAogCWhiID0gaGFzaF9mdXRleCgma2V5KTsKLXJldHJ5X3VubG9ja2VkOgogCXNwaW5fbG9jaygmaGItPmxvY2spOwogCiAJLyoKQEAgLTE3MDAsMTQgKzE2NTgsNyBAQAogCSAqIHdlIGhhdmUgdG8gZHJvcCB0aGUgbW1hcF9zZW0gaW4gb3JkZXIgdG8gY2FsbCBnZXRfdXNlcigpLgogCSAqLwogCXNwaW5fdW5sb2NrKCZoYi0+bG9jayk7Ci0KLQlpZiAoYXR0ZW1wdCsrKSB7Ci0JCXJldCA9IGZ1dGV4X2hhbmRsZV9mYXVsdCgodW5zaWduZWQgbG9uZyl1YWRkciwgYXR0ZW1wdCk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQkJdXZhbCA9IDA7Ci0JCWdvdG8gcmV0cnlfdW5sb2NrZWQ7Ci0JfQorCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJmtleSk7CiAKIAlyZXQgPSBnZXRfdXNlcih1dmFsLCB1YWRkcik7CiAJaWYgKCFyZXQpCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL01ha2VmaWxlIGIva2VybmVsL2lycS9NYWtlZmlsZQppbmRleCA0ZGQ1YjFlLi4zMzk0ZjhmIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL01ha2VmaWxlCisrKyBiL2tlcm5lbC9pcnEvTWFrZWZpbGUKQEAgLTQsMyArNCw0IEBACiBvYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCiBvYmotJChDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSkgKz0gbWlncmF0aW9uLm8KIG9iai0kKENPTkZJR19OVU1BX01JR1JBVEVfSVJRX0RFU0MpICs9IG51bWFfbWlncmF0ZS5vCitvYmotJChDT05GSUdfUE1fU0xFRVApICs9IHBtLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmggYi9rZXJuZWwvaXJxL2ludGVybmFscy5oCmluZGV4IGVlMWFhOWYuLjAxY2UyMGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKKysrIGIva2VybmVsL2lycS9pbnRlcm5hbHMuaApAQCAtMTIsNiArMTIsOCBAQAogCiBleHRlcm4gaW50IF9faXJxX3NldF90cmlnZ2VyKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgdW5zaWduZWQgaW50IGlycSwKIAkJdW5zaWduZWQgbG9uZyBmbGFncyk7CitleHRlcm4gdm9pZCBfX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgdW5zaWduZWQgaW50IGlycSwgYm9vbCBzdXNwKTsKK2V4dGVybiB2b2lkIF9fZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEsIGJvb2wgcmVzdW1lKTsKIAogZXh0ZXJuIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBpcnFfZGVzY19sb2NrX2NsYXNzOwogZXh0ZXJuIHZvaWQgaW5pdF9rc3RhdF9pcnFzKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgaW50IGNwdSwgaW50IG5yKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWFuYWdlLmMgYi9rZXJuZWwvaXJxL21hbmFnZS5jCmluZGV4IDY0NThlOTkuLjE1MTZhYjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtMTYyLDYgKzE2MiwyMCBAQAogfQogI2VuZGlmCiAKK3ZvaWQgX19kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEsIGJvb2wgc3VzcGVuZCkKK3sKKwlpZiAoc3VzcGVuZCkgeworCQlpZiAoIWRlc2MtPmFjdGlvbiB8fCAoZGVzYy0+YWN0aW9uLT5mbGFncyAmIElSUUZfVElNRVIpKQorCQkJcmV0dXJuOworCQlkZXNjLT5zdGF0dXMgfD0gSVJRX1NVU1BFTkRFRDsKKwl9CisKKwlpZiAoIWRlc2MtPmRlcHRoKyspIHsKKwkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRDsKKwkJZGVzYy0+Y2hpcC0+ZGlzYWJsZShpcnEpOworCX0KK30KKwogLyoqCiAgKglkaXNhYmxlX2lycV9ub3N5bmMgLSBkaXNhYmxlIGFuIGlycSB3aXRob3V0IHdhaXRpbmcKICAqCUBpcnE6IEludGVycnVwdCB0byBkaXNhYmxlCkBAIC0xODIsMTAgKzE5Niw3IEBACiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JaWYgKCFkZXNjLT5kZXB0aCsrKSB7Ci0JCWRlc2MtPnN0YXR1cyB8PSBJUlFfRElTQUJMRUQ7Ci0JCWRlc2MtPmNoaXAtPmRpc2FibGUoaXJxKTsKLQl9CisJX19kaXNhYmxlX2lycShkZXNjLCBpcnEsIGZhbHNlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGRpc2FibGVfaXJxX25vc3luYyk7CkBAIC0yMTUsMTUgKzIyNiwyMSBAQAogfQogRVhQT1JUX1NZTUJPTChkaXNhYmxlX2lycSk7CiAKLXN0YXRpYyB2b2lkIF9fZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEpCit2b2lkIF9fZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEsIGJvb2wgcmVzdW1lKQogeworCWlmIChyZXN1bWUpCisJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1NVU1BFTkRFRDsKKwogCXN3aXRjaCAoZGVzYy0+ZGVwdGgpIHsKIAljYXNlIDA6CisgZXJyX291dDoKIAkJV0FSTigxLCBLRVJOX1dBUk5JTkcgIlVuYmFsYW5jZWQgZW5hYmxlIGZvciBJUlEgJWRcbiIsIGlycSk7CiAJCWJyZWFrOwogCWNhc2UgMTogewogCQl1bnNpZ25lZCBpbnQgc3RhdHVzID0gZGVzYy0+c3RhdHVzICYgfklSUV9ESVNBQkxFRDsKIAorCQlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX1NVU1BFTkRFRCkKKwkJCWdvdG8gZXJyX291dDsKIAkJLyogUHJldmVudCBwcm9iaW5nIG9uIHRoaXMgaXJxOiAqLwogCQlkZXNjLT5zdGF0dXMgPSBzdGF0dXMgfCBJUlFfTk9QUk9CRTsKIAkJY2hlY2tfaXJxX3Jlc2VuZChkZXNjLCBpcnEpOwpAQCAtMjUzLDcgKzI3MCw3IEBACiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JX19lbmFibGVfaXJxKGRlc2MsIGlycSk7CisJX19lbmFibGVfaXJxKGRlc2MsIGlycSwgZmFsc2UpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woZW5hYmxlX2lycSk7CkBAIC01MTEsNyArNTI4LDcgQEAKIAkgKi8KIAlpZiAoc2hhcmVkICYmIChkZXNjLT5zdGF0dXMgJiBJUlFfU1BVUklPVVNfRElTQUJMRUQpKSB7CiAJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1NQVVJJT1VTX0RJU0FCTEVEOwotCQlfX2VuYWJsZV9pcnEoZGVzYywgaXJxKTsKKwkJX19lbmFibGVfaXJxKGRlc2MsIGlycSwgZmFsc2UpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvcG0uYyBiL2tlcm5lbC9pcnEvcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzhkOGJlCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2lycS9wbS5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBsaW51eC9rZXJuZWwvaXJxL3BtLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPiwgTm92ZWxsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcG93ZXIgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmVsYXRlZCB0byBpbnRlcnJ1cHRzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgImludGVybmFscy5oIgorCisvKioKKyAqIHN1c3BlbmRfZGV2aWNlX2lycXMgLSBkaXNhYmxlIGFsbCBjdXJyZW50bHkgZW5hYmxlZCBpbnRlcnJ1cHQgbGluZXMKKyAqCisgKiBEdXJpbmcgc3lzdGVtLXdpZGUgc3VzcGVuZCBvciBoaWJlcm5hdGlvbiBkZXZpY2UgaW50ZXJydXB0cyBuZWVkIHRvIGJlCisgKiBkaXNhYmxlZCBhdCB0aGUgY2hpcCBsZXZlbCBhbmQgdGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlZCBmb3IgdGhpcyBwdXJwb3NlLgorICogSXQgZGlzYWJsZXMgYWxsIGludGVycnVwdCBsaW5lcyB0aGF0IGFyZSBlbmFibGVkIGF0IHRoZSBtb21lbnQgYW5kIHNldHMgdGhlCisgKiBJUlFfU1VTUEVOREVEIGZsYWcgZm9yIHRoZW0uCisgKi8KK3ZvaWQgc3VzcGVuZF9kZXZpY2VfaXJxcyh2b2lkKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlpbnQgaXJxOworCisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJX19kaXNhYmxlX2lycShkZXNjLCBpcnEsIHRydWUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJfQorCisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKQorCQlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX1NVU1BFTkRFRCkKKwkJCXN5bmNocm9uaXplX2lycShpcnEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3VzcGVuZF9kZXZpY2VfaXJxcyk7CisKKy8qKgorICogcmVzdW1lX2RldmljZV9pcnFzIC0gZW5hYmxlIGludGVycnVwdCBsaW5lcyBkaXNhYmxlZCBieSBzdXNwZW5kX2RldmljZV9pcnFzKCkKKyAqCisgKiBFbmFibGUgYWxsIGludGVycnVwdCBsaW5lcyBwcmV2aW91c2x5IGRpc2FibGVkIGJ5IHN1c3BlbmRfZGV2aWNlX2lycXMoKSB0aGF0CisgKiBoYXZlIHRoZSBJUlFfU1VTUEVOREVEIGZsYWcgc2V0LgorICovCit2b2lkIHJlc3VtZV9kZXZpY2VfaXJxcyh2b2lkKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlpbnQgaXJxOworCisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJaWYgKCEoZGVzYy0+c3RhdHVzICYgSVJRX1NVU1BFTkRFRCkpCisJCQljb250aW51ZTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQlfX2VuYWJsZV9pcnEoZGVzYywgaXJxLCB0cnVlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlc3VtZV9kZXZpY2VfaXJxcyk7CisKKy8qKgorICogY2hlY2tfd2FrZXVwX2lycXMgLSBjaGVjayBpZiBhbnkgd2FrZS11cCBpbnRlcnJ1cHRzIGFyZSBwZW5kaW5nCisgKi8KK2ludCBjaGVja193YWtldXBfaXJxcyh2b2lkKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlpbnQgaXJxOworCisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKQorCQlpZiAoKGRlc2MtPnN0YXR1cyAmIElSUV9XQUtFVVApICYmIChkZXNjLT5zdGF0dXMgJiBJUlFfUEVORElORykpCisJCQlyZXR1cm4gLUVCVVNZOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWMuYyBiL2tlcm5lbC9rZXhlYy5jCmluZGV4IGM3ZmQ2NjkuLjkzZWVkODUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlYy5jCisrKyBiL2tlcm5lbC9rZXhlYy5jCkBAIC0xNDUwLDExICsxNDUwLDcgQEAKIAkJZXJyb3IgPSBkZXZpY2Vfc3VzcGVuZChQTVNHX0ZSRUVaRSk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gUmVzdW1lX2NvbnNvbGU7Ci0JCWVycm9yID0gZGlzYWJsZV9ub25ib290X2NwdXMoKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBSZXN1bWVfZGV2aWNlczsKIAkJZGV2aWNlX3BtX2xvY2soKTsKLQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJLyogQXQgdGhpcyBwb2ludCwgZGV2aWNlX3N1c3BlbmQoKSBoYXMgYmVlbiBjYWxsZWQsCiAJCSAqIGJ1dCAqbm90KiBkZXZpY2VfcG93ZXJfZG93bigpLiBXZSAqbXVzdCoKIAkJICogZGV2aWNlX3Bvd2VyX2Rvd24oKSBub3cuICBPdGhlcndpc2UsIGRyaXZlcnMgZm9yCkBAIC0xNDY0LDEyICsxNDYwLDE1IEBACiAJCSAqLwogCQllcnJvciA9IGRldmljZV9wb3dlcl9kb3duKFBNU0dfRlJFRVpFKTsKIAkJaWYgKGVycm9yKQotCQkJZ290byBFbmFibGVfaXJxczsKLQorCQkJZ290byBSZXN1bWVfZGV2aWNlczsKKwkJZXJyb3IgPSBkaXNhYmxlX25vbmJvb3RfY3B1cygpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIEVuYWJsZV9jcHVzOworCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCQkvKiBTdXNwZW5kIHN5c3RlbSBkZXZpY2VzICovCiAJCWVycm9yID0gc3lzZGV2X3N1c3BlbmQoUE1TR19GUkVFWkUpOwogCQlpZiAoZXJyb3IpCi0JCQlnb3RvIFBvd2VyX3VwX2RldmljZXM7CisJCQlnb3RvIEVuYWJsZV9pcnFzOwogCX0gZWxzZQogI2VuZGlmCiAJewpAQCAtMTQ4MywxMyArMTQ4MiwxMyBAQAogI2lmZGVmIENPTkZJR19LRVhFQ19KVU1QCiAJaWYgKGtleGVjX2ltYWdlLT5wcmVzZXJ2ZV9jb250ZXh0KSB7CiAJCXN5c2Rldl9yZXN1bWUoKTsKLSBQb3dlcl91cF9kZXZpY2VzOgotCQlkZXZpY2VfcG93ZXJfdXAoUE1TR19SRVNUT1JFKTsKICBFbmFibGVfaXJxczoKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCQlkZXZpY2VfcG1fdW5sb2NrKCk7CisgRW5hYmxlX2NwdXM6CiAJCWVuYWJsZV9ub25ib290X2NwdXMoKTsKKwkJZGV2aWNlX3Bvd2VyX3VwKFBNU0dfUkVTVE9SRSk7CiAgUmVzdW1lX2RldmljZXM6CisJCWRldmljZV9wbV91bmxvY2soKTsKIAkJZGV2aWNlX3Jlc3VtZShQTVNHX1JFU1RPUkUpOwogIFJlc3VtZV9jb25zb2xlOgogCQlyZXN1bWVfY29uc29sZSgpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2ttb2QuYyBiL2tlcm5lbC9rbW9kLmMKaW5kZXggYTI3YTVmNi4uZjBjOGY1NCAxMDA2NDQKLS0tIGEva2VybmVsL2ttb2QuYworKysgYi9rZXJuZWwva21vZC5jCkBAIC0xNjcsNyArMTY3LDcgQEAKIAl9CiAKIAkvKiBXZSBjYW4gcnVuIGFueXdoZXJlLCB1bmxpa2Ugb3VyIHBhcmVudCBrZXZlbnRkKCkuICovCi0Jc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgQ1BVX01BU0tfQUxMX1BUUik7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgY3B1X2FsbF9tYXNrKTsKIAogCS8qCiAJICogT3VyIHBhcmVudCBpcyBrZXZlbnRkLCB3aGljaCBydW5zIHdpdGggZWxldmF0ZWQgc2NoZWR1bGluZyBwcmlvcml0eS4KZGlmZiAtLWdpdCBhL2tlcm5lbC9rdGhyZWFkLmMgYi9rZXJuZWwva3RocmVhZC5jCmluZGV4IDRmYmM0NTYuLjg0YmJhZGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rdGhyZWFkLmMKKysrIGIva2VybmVsL2t0aHJlYWQuYwpAQCAtMTEwLDcgKzExMCw3IEBACiAJCSAqLwogCQlzY2hlZF9zZXRzY2hlZHVsZXIoY3JlYXRlLT5yZXN1bHQsIFNDSEVEX05PUk1BTCwgJnBhcmFtKTsKIAkJc2V0X3VzZXJfbmljZShjcmVhdGUtPnJlc3VsdCwgS1RIUkVBRF9OSUNFX0xFVkVMKTsKLQkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3JlYXRlLT5yZXN1bHQsIENQVV9NQVNLX0FMTF9QVFIpOworCQlzZXRfY3B1c19hbGxvd2VkX3B0cihjcmVhdGUtPnJlc3VsdCwgY3B1X2FsbF9tYXNrKTsKIAl9CiAJY29tcGxldGUoJmNyZWF0ZS0+ZG9uZSk7CiB9CkBAIC0yNDAsNyArMjQwLDcgQEAKIAlzZXRfdGFza19jb21tKHRzaywgImt0aHJlYWRkIik7CiAJaWdub3JlX3NpZ25hbHModHNrKTsKIAlzZXRfdXNlcl9uaWNlKHRzaywgS1RIUkVBRF9OSUNFX0xFVkVMKTsKLQlzZXRfY3B1c19hbGxvd2VkX3B0cih0c2ssIENQVV9NQVNLX0FMTF9QVFIpOworCXNldF9jcHVzX2FsbG93ZWRfcHRyKHRzaywgY3B1X2FsbF9tYXNrKTsKIAogCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFIHwgUEZfRlJFRVpFUl9OT1NJRzsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NrZGVwLmMKaW5kZXggMDZiMGMzNS4uMzY3M2EzZiAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXAuYworKysgYi9rZXJuZWwvbG9ja2RlcC5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KIAogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogCkBAIC0zMTAsMTIgKzMxMSwxNCBAQAogI2lmIFZFUkJPU0UKICMgZGVmaW5lIEhBUkRJUlFfVkVSQk9TRQkxCiAjIGRlZmluZSBTT0ZUSVJRX1ZFUkJPU0UJMQorIyBkZWZpbmUgUkVDTEFJTV9WRVJCT1NFCTEKICNlbHNlCiAjIGRlZmluZSBIQVJESVJRX1ZFUkJPU0UJMAogIyBkZWZpbmUgU09GVElSUV9WRVJCT1NFCTAKKyMgZGVmaW5lIFJFQ0xBSU1fVkVSQk9TRQkwCiAjZW5kaWYKIAotI2lmIFZFUkJPU0UgfHwgSEFSRElSUV9WRVJCT1NFIHx8IFNPRlRJUlFfVkVSQk9TRQorI2lmIFZFUkJPU0UgfHwgSEFSRElSUV9WRVJCT1NFIHx8IFNPRlRJUlFfVkVSQk9TRSB8fCBSRUNMQUlNX1ZFUkJPU0UKIC8qCiAgKiBRdWljayBmaWx0ZXJpbmcgZm9yIGludGVyZXN0aW5nIGV2ZW50czoKICAqLwpAQCAtNDQzLDE3ICs0NDYsMTggQEAKICAqIExvY2tpbmcgcHJpbnRvdXRzOgogICovCiAKKyNkZWZpbmUgX19VU0FHRShfX1NUQVRFKQkJCQkJCVwKKwlbTE9DS19VU0VEX0lOXyMjX19TVEFURV0gPSAiSU4tIl9fc3RyaW5naWZ5KF9fU1RBVEUpIi1XIiwJXAorCVtMT0NLX0VOQUJMRURfIyNfX1NUQVRFXSA9IF9fc3RyaW5naWZ5KF9fU1RBVEUpIi1PTi1XIiwJCVwKKwlbTE9DS19VU0VEX0lOXyMjX19TVEFURSMjX1JFQURdID0gIklOLSJfX3N0cmluZ2lmeShfX1NUQVRFKSItUiIsXAorCVtMT0NLX0VOQUJMRURfIyNfX1NUQVRFIyNfUkVBRF0gPSBfX3N0cmluZ2lmeShfX1NUQVRFKSItT04tUiIsCisKIHN0YXRpYyBjb25zdCBjaGFyICp1c2FnZV9zdHJbXSA9CiB7Ci0JW0xPQ0tfVVNFRF0gPQkJCSJpbml0aWFsLXVzZSAiLAotCVtMT0NLX1VTRURfSU5fSEFSRElSUV0gPQkiaW4taGFyZGlycS1XIiwKLQlbTE9DS19VU0VEX0lOX1NPRlRJUlFdID0JImluLXNvZnRpcnEtVyIsCi0JW0xPQ0tfRU5BQkxFRF9TT0ZUSVJRU10gPQkic29mdGlycS1vbi1XIiwKLQlbTE9DS19FTkFCTEVEX0hBUkRJUlFTXSA9CSJoYXJkaXJxLW9uLVciLAotCVtMT0NLX1VTRURfSU5fSEFSRElSUV9SRUFEXSA9CSJpbi1oYXJkaXJxLVIiLAotCVtMT0NLX1VTRURfSU5fU09GVElSUV9SRUFEXSA9CSJpbi1zb2Z0aXJxLVIiLAotCVtMT0NLX0VOQUJMRURfU09GVElSUVNfUkVBRF0gPQkic29mdGlycS1vbi1SIiwKLQlbTE9DS19FTkFCTEVEX0hBUkRJUlFTX1JFQURdID0JImhhcmRpcnEtb24tUiIsCisjZGVmaW5lIExPQ0tERVBfU1RBVEUoX19TVEFURSkgX19VU0FHRShfX1NUQVRFKQorI2luY2x1ZGUgImxvY2tkZXBfc3RhdGVzLmgiCisjdW5kZWYgTE9DS0RFUF9TVEFURQorCVtMT0NLX1VTRURdID0gIklOSVRJQUwgVVNFIiwKIH07CiAKIGNvbnN0IGNoYXIgKiBfX2dldF9rZXlfbmFtZShzdHJ1Y3QgbG9ja2RlcF9zdWJjbGFzc19rZXkgKmtleSwgY2hhciAqc3RyKQpAQCAtNDYxLDQ2ICs0NjUsNDUgQEAKIAlyZXR1cm4ga2FsbHN5bXNfbG9va3VwKCh1bnNpZ25lZCBsb25nKWtleSwgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKIH0KIAotdm9pZAotZ2V0X3VzYWdlX2NoYXJzKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcywgY2hhciAqYzEsIGNoYXIgKmMyLCBjaGFyICpjMywgY2hhciAqYzQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9ja19mbGFnKGVudW0gbG9ja191c2FnZV9iaXQgYml0KQogewotCSpjMSA9ICcuJywgKmMyID0gJy4nLCAqYzMgPSAnLicsICpjNCA9ICcuJzsKKwlyZXR1cm4gMVVMIDw8IGJpdDsKK30KIAotCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX1VTRURfSU5fSEFSRElSUSkKLQkJKmMxID0gJysnOwotCWVsc2UKLQkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfRU5BQkxFRF9IQVJESVJRUykKLQkJCSpjMSA9ICctJzsKK3N0YXRpYyBjaGFyIGdldF91c2FnZV9jaGFyKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcywgZW51bSBsb2NrX3VzYWdlX2JpdCBiaXQpCit7CisJY2hhciBjID0gJy4nOwogCi0JaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfVVNFRF9JTl9TT0ZUSVJRKQotCQkqYzIgPSAnKyc7Ci0JZWxzZQotCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX1NPRlRJUlFTKQotCQkJKmMyID0gJy0nOwotCi0JaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfRU5BQkxFRF9IQVJESVJRU19SRUFEKQotCQkqYzMgPSAnLSc7Ci0JaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfVVNFRF9JTl9IQVJESVJRX1JFQUQpIHsKLQkJKmMzID0gJysnOwotCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX0hBUkRJUlFTX1JFQUQpCi0JCQkqYzMgPSAnPyc7CisJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgbG9ja19mbGFnKGJpdCArIDIpKQorCQljID0gJysnOworCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIGxvY2tfZmxhZyhiaXQpKSB7CisJCWMgPSAnLSc7CisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIGxvY2tfZmxhZyhiaXQgKyAyKSkKKwkJCWMgPSAnPyc7CiAJfQogCi0JaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfRU5BQkxFRF9TT0ZUSVJRU19SRUFEKQotCQkqYzQgPSAnLSc7Ci0JaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfVVNFRF9JTl9TT0ZUSVJRX1JFQUQpIHsKLQkJKmM0ID0gJysnOwotCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX1NPRlRJUlFTX1JFQUQpCi0JCQkqYzQgPSAnPyc7Ci0JfQorCXJldHVybiBjOworfQorCit2b2lkIGdldF91c2FnZV9jaGFycyhzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MsIGNoYXIgdXNhZ2VbTE9DS19VU0FHRV9DSEFSU10pCit7CisJaW50IGkgPSAwOworCisjZGVmaW5lIExPQ0tERVBfU1RBVEUoX19TVEFURSkgCQkJCQkJXAorCXVzYWdlW2krK10gPSBnZXRfdXNhZ2VfY2hhcihjbGFzcywgTE9DS19VU0VEX0lOXyMjX19TVEFURSk7CVwKKwl1c2FnZVtpKytdID0gZ2V0X3VzYWdlX2NoYXIoY2xhc3MsIExPQ0tfVVNFRF9JTl8jI19fU1RBVEUjI19SRUFEKTsKKyNpbmNsdWRlICJsb2NrZGVwX3N0YXRlcy5oIgorI3VuZGVmIExPQ0tERVBfU1RBVEUKKworCXVzYWdlW2ldID0gJ1wwJzsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfbG9ja19uYW1lKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcykKIHsKLQljaGFyIHN0cltLU1lNX05BTUVfTEVOXSwgYzEsIGMyLCBjMywgYzQ7CisJY2hhciBzdHJbS1NZTV9OQU1FX0xFTl0sIHVzYWdlW0xPQ0tfVVNBR0VfQ0hBUlNdOwogCWNvbnN0IGNoYXIgKm5hbWU7CiAKLQlnZXRfdXNhZ2VfY2hhcnMoY2xhc3MsICZjMSwgJmMyLCAmYzMsICZjNCk7CisJZ2V0X3VzYWdlX2NoYXJzKGNsYXNzLCB1c2FnZSk7CiAKIAluYW1lID0gY2xhc3MtPm5hbWU7CiAJaWYgKCFuYW1lKSB7CkBAIC01MTMsNyArNTE2LDcgQEAKIAkJaWYgKGNsYXNzLT5zdWJjbGFzcykKIAkJCXByaW50aygiLyVkIiwgY2xhc3MtPnN1YmNsYXNzKTsKIAl9Ci0JcHJpbnRrKCIpeyVjJWMlYyVjfSIsIGMxLCBjMiwgYzMsIGM0KTsKKwlwcmludGsoIil7JXN9IiwgdXNhZ2UpOwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9sb2NrZGVwX2NhY2hlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaykKQEAgLTEyNjMsOSArMTI2Niw0OSBAQAogCQkJYml0X2JhY2t3YXJkcywgYml0X2ZvcndhcmRzLCBpcnFjbGFzcyk7CiB9CiAKLXN0YXRpYyBpbnQKLWNoZWNrX3ByZXZfYWRkX2lycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHN0cnVjdCBoZWxkX2xvY2sgKnByZXYsCi0JCXN0cnVjdCBoZWxkX2xvY2sgKm5leHQpCitzdGF0aWMgY29uc3QgY2hhciAqc3RhdGVfbmFtZXNbXSA9IHsKKyNkZWZpbmUgTE9DS0RFUF9TVEFURShfX1NUQVRFKSBcCisJX19zdHJpbmdpZnkoX19TVEFURSksCisjaW5jbHVkZSAibG9ja2RlcF9zdGF0ZXMuaCIKKyN1bmRlZiBMT0NLREVQX1NUQVRFCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc3RhdGVfcm5hbWVzW10gPSB7CisjZGVmaW5lIExPQ0tERVBfU1RBVEUoX19TVEFURSkgXAorCV9fc3RyaW5naWZ5KF9fU1RBVEUpIi1SRUFEIiwKKyNpbmNsdWRlICJsb2NrZGVwX3N0YXRlcy5oIgorI3VuZGVmIExPQ0tERVBfU1RBVEUKK307CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqc3RhdGVfbmFtZShlbnVtIGxvY2tfdXNhZ2VfYml0IGJpdCkKK3sKKwlyZXR1cm4gKGJpdCAmIDEpID8gc3RhdGVfcm5hbWVzW2JpdCA+PiAyXSA6IHN0YXRlX25hbWVzW2JpdCA+PiAyXTsKK30KKworc3RhdGljIGludCBleGNsdXNpdmVfYml0KGludCBuZXdfYml0KQoreworCS8qCisJICogVVNFRF9JTgorCSAqIFVTRURfSU5fUkVBRAorCSAqIEVOQUJMRUQKKwkgKiBFTkFCTEVEX1JFQUQKKwkgKgorCSAqIGJpdCAwIC0gd3JpdGUvcmVhZAorCSAqIGJpdCAxIC0gdXNlZF9pbi9lbmFibGVkCisJICogYml0IDIrICBzdGF0ZQorCSAqLworCisJaW50IHN0YXRlID0gbmV3X2JpdCAmIH4zOworCWludCBkaXIgPSBuZXdfYml0ICYgMjsKKworCS8qCisJICoga2VlcCBzdGF0ZSwgYml0IGZsaXAgdGhlIGRpcmVjdGlvbiBhbmQgc3RyaXAgcmVhZC4KKwkgKi8KKwlyZXR1cm4gc3RhdGUgfCAoZGlyIF4gMik7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfaXJxX3VzYWdlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vyciwgc3RydWN0IGhlbGRfbG9jayAqcHJldiwKKwkJCSAgIHN0cnVjdCBoZWxkX2xvY2sgKm5leHQsIGVudW0gbG9ja191c2FnZV9iaXQgYml0KQogewogCS8qCiAJICogUHJvdmUgdGhhdCB0aGUgbmV3IGRlcGVuZGVuY3kgZG9lcyBub3QgY29ubmVjdCBhIGhhcmRpcnEtc2FmZQpAQCAtMTI3MywzOCArMTMxNiwzNCBAQAogCSAqIHRoZSBiYWNrd2FyZHMtc3ViZ3JhcGggc3RhcnRpbmcgYXQgPHByZXY+LCBhbmQgdGhlCiAJICogZm9yd2FyZHMtc3ViZ3JhcGggc3RhcnRpbmcgYXQgPG5leHQ+OgogCSAqLwotCWlmICghY2hlY2tfdXNhZ2UoY3VyciwgcHJldiwgbmV4dCwgTE9DS19VU0VEX0lOX0hBUkRJUlEsCi0JCQkJCUxPQ0tfRU5BQkxFRF9IQVJESVJRUywgImhhcmQiKSkKKwlpZiAoIWNoZWNrX3VzYWdlKGN1cnIsIHByZXYsIG5leHQsIGJpdCwKKwkJCSAgIGV4Y2x1c2l2ZV9iaXQoYml0KSwgc3RhdGVfbmFtZShiaXQpKSkKIAkJcmV0dXJuIDA7CiAKKwliaXQrKzsgLyogX1JFQUQgKi8KKwogCS8qCiAJICogUHJvdmUgdGhhdCB0aGUgbmV3IGRlcGVuZGVuY3kgZG9lcyBub3QgY29ubmVjdCBhIGhhcmRpcnEtc2FmZS1yZWFkCiAJICogbG9jayB3aXRoIGEgaGFyZGlycS11bnNhZmUgbG9jayAtIHRvIGFjaGlldmUgdGhpcyB3ZSBzZWFyY2gKIAkgKiB0aGUgYmFja3dhcmRzLXN1YmdyYXBoIHN0YXJ0aW5nIGF0IDxwcmV2PiwgYW5kIHRoZQogCSAqIGZvcndhcmRzLXN1YmdyYXBoIHN0YXJ0aW5nIGF0IDxuZXh0PjoKIAkgKi8KLQlpZiAoIWNoZWNrX3VzYWdlKGN1cnIsIHByZXYsIG5leHQsIExPQ0tfVVNFRF9JTl9IQVJESVJRX1JFQUQsCi0JCQkJCUxPQ0tfRU5BQkxFRF9IQVJESVJRUywgImhhcmQtcmVhZCIpKQorCWlmICghY2hlY2tfdXNhZ2UoY3VyciwgcHJldiwgbmV4dCwgYml0LAorCQkJICAgZXhjbHVzaXZlX2JpdChiaXQpLCBzdGF0ZV9uYW1lKGJpdCkpKQogCQlyZXR1cm4gMDsKIAotCS8qCi0JICogUHJvdmUgdGhhdCB0aGUgbmV3IGRlcGVuZGVuY3kgZG9lcyBub3QgY29ubmVjdCBhIHNvZnRpcnEtc2FmZQotCSAqIGxvY2sgd2l0aCBhIHNvZnRpcnEtdW5zYWZlIGxvY2sgLSB0byBhY2hpZXZlIHRoaXMgd2Ugc2VhcmNoCi0JICogdGhlIGJhY2t3YXJkcy1zdWJncmFwaCBzdGFydGluZyBhdCA8cHJldj4sIGFuZCB0aGUKLQkgKiBmb3J3YXJkcy1zdWJncmFwaCBzdGFydGluZyBhdCA8bmV4dD46Ci0JICovCi0JaWYgKCFjaGVja191c2FnZShjdXJyLCBwcmV2LCBuZXh0LCBMT0NLX1VTRURfSU5fU09GVElSUSwKLQkJCQkJTE9DS19FTkFCTEVEX1NPRlRJUlFTLCAic29mdCIpKQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitjaGVja19wcmV2X2FkZF9pcnEoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBzdHJ1Y3QgaGVsZF9sb2NrICpwcmV2LAorCQlzdHJ1Y3QgaGVsZF9sb2NrICpuZXh0KQoreworI2RlZmluZSBMT0NLREVQX1NUQVRFKF9fU1RBVEUpCQkJCQkJXAorCWlmICghY2hlY2tfaXJxX3VzYWdlKGN1cnIsIHByZXYsIG5leHQsIExPQ0tfVVNFRF9JTl8jI19fU1RBVEUpKQlcCiAJCXJldHVybiAwOwotCS8qCi0JICogUHJvdmUgdGhhdCB0aGUgbmV3IGRlcGVuZGVuY3kgZG9lcyBub3QgY29ubmVjdCBhIHNvZnRpcnEtc2FmZS1yZWFkCi0JICogbG9jayB3aXRoIGEgc29mdGlycS11bnNhZmUgbG9jayAtIHRvIGFjaGlldmUgdGhpcyB3ZSBzZWFyY2gKLQkgKiB0aGUgYmFja3dhcmRzLXN1YmdyYXBoIHN0YXJ0aW5nIGF0IDxwcmV2PiwgYW5kIHRoZQotCSAqIGZvcndhcmRzLXN1YmdyYXBoIHN0YXJ0aW5nIGF0IDxuZXh0PjoKLQkgKi8KLQlpZiAoIWNoZWNrX3VzYWdlKGN1cnIsIHByZXYsIG5leHQsIExPQ0tfVVNFRF9JTl9TT0ZUSVJRX1JFQUQsCi0JCQkJCUxPQ0tfRU5BQkxFRF9TT0ZUSVJRUywgInNvZnQiKSkKLQkJcmV0dXJuIDA7CisjaW5jbHVkZSAibG9ja2RlcF9zdGF0ZXMuaCIKKyN1bmRlZiBMT0NLREVQX1NUQVRFCiAKIAlyZXR1cm4gMTsKIH0KQEAgLTE5MzMsNyArMTk3Miw3IEBACiAJcHJpbnRfaXBfc3ltKGN1cnItPnNvZnRpcnFfZGlzYWJsZV9pcCk7CiB9CiAKLXN0YXRpYyBpbnQgaGFyZGlycV92ZXJib3NlKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcykKK3N0YXRpYyBpbnQgSEFSRElSUV92ZXJib3NlKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcykKIHsKICNpZiBIQVJESVJRX1ZFUkJPU0UKIAlyZXR1cm4gY2xhc3NfZmlsdGVyKGNsYXNzKTsKQEAgLTE5NDEsNyArMTk4MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc29mdGlycV92ZXJib3NlKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcykKK3N0YXRpYyBpbnQgU09GVElSUV92ZXJib3NlKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcykKIHsKICNpZiBTT0ZUSVJRX1ZFUkJPU0UKIAlyZXR1cm4gY2xhc3NfZmlsdGVyKGNsYXNzKTsKQEAgLTE5NDksMTg1ICsxOTg4LDk0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgUkVDTEFJTV9GU192ZXJib3NlKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcykKK3sKKyNpZiBSRUNMQUlNX1ZFUkJPU0UKKwlyZXR1cm4gY2xhc3NfZmlsdGVyKGNsYXNzKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCiAjZGVmaW5lIFNUUklDVF9SRUFEX0NIRUNLUwkxCiAKLXN0YXRpYyBpbnQgbWFya19sb2NrX2lycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHN0cnVjdCBoZWxkX2xvY2sgKnRoaXMsCi0JCWVudW0gbG9ja191c2FnZV9iaXQgbmV3X2JpdCkKLXsKLQlpbnQgcmV0ID0gMTsKK3N0YXRpYyBpbnQgKCpzdGF0ZV92ZXJib3NlX2ZbXSkoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzKSA9IHsKKyNkZWZpbmUgTE9DS0RFUF9TVEFURShfX1NUQVRFKSBcCisJX19TVEFURSMjX3ZlcmJvc2UsCisjaW5jbHVkZSAibG9ja2RlcF9zdGF0ZXMuaCIKKyN1bmRlZiBMT0NLREVQX1NUQVRFCit9OwogCi0Jc3dpdGNoKG5ld19iaXQpIHsKLQljYXNlIExPQ0tfVVNFRF9JTl9IQVJESVJROgotCQlpZiAoIXZhbGlkX3N0YXRlKGN1cnIsIHRoaXMsIG5ld19iaXQsIExPQ0tfRU5BQkxFRF9IQVJESVJRUykpCitzdGF0aWMgaW5saW5lIGludCBzdGF0ZV92ZXJib3NlKGVudW0gbG9ja191c2FnZV9iaXQgYml0LAorCQkJCXN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcykKK3sKKwlyZXR1cm4gc3RhdGVfdmVyYm9zZV9mW2JpdCA+PiAyXShjbGFzcyk7Cit9CisKK3R5cGVkZWYgaW50ICgqY2hlY2tfdXNhZ2VfZikoc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCBoZWxkX2xvY2sgKiwKKwkJCSAgICAgZW51bSBsb2NrX3VzYWdlX2JpdCBiaXQsIGNvbnN0IGNoYXIgKm5hbWUpOworCitzdGF0aWMgaW50CittYXJrX2xvY2tfaXJxKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vyciwgc3RydWN0IGhlbGRfbG9jayAqdGhpcywgaW50IG5ld19iaXQpCit7CisJaW50IGV4Y2xfYml0ID0gZXhjbHVzaXZlX2JpdChuZXdfYml0KTsKKwlpbnQgcmVhZCA9IG5ld19iaXQgJiAxOworCWludCBkaXIgPSBuZXdfYml0ICYgMjsKKworCS8qCisJICogbWFyayBVU0VEX0lOIGhhcyB0byBsb29rIGZvcndhcmRzIC0tIHRvIGVuc3VyZSBubyBkZXBlbmRlbmN5CisJICogaGFzIEVOQUJMRUQgc3RhdGUsIHdoaWNoIHdvdWxkIGFsbG93IHJlY3Vyc2lvbiBkZWFkbG9ja3MuCisJICoKKwkgKiBtYXJrIEVOQUJMRUQgaGFzIHRvIGxvb2sgYmFja3dhcmRzIC0tIHRvIGVuc3VyZSBubyBkZXBlbmRlZQorCSAqIGhhcyBVU0VEX0lOIHN0YXRlLCB3aGljaCwgYWdhaW4sIHdvdWxkIGFsbG93ICByZWN1cnNpb24gZGVhZGxvY2tzLgorCSAqLworCWNoZWNrX3VzYWdlX2YgdXNhZ2UgPSBkaXIgPworCQljaGVja191c2FnZV9iYWNrd2FyZHMgOiBjaGVja191c2FnZV9mb3J3YXJkczsKKworCS8qCisJICogVmFsaWRhdGUgdGhhdCB0aGlzIHBhcnRpY3VsYXIgbG9jayBkb2VzIG5vdCBoYXZlIGNvbmZsaWN0aW5nCisJICogdXNhZ2Ugc3RhdGVzLgorCSAqLworCWlmICghdmFsaWRfc3RhdGUoY3VyciwgdGhpcywgbmV3X2JpdCwgZXhjbF9iaXQpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVmFsaWRhdGUgdGhhdCB0aGUgbG9jayBkZXBlbmRlbmNpZXMgZG9uJ3QgaGF2ZSBjb25mbGljdGluZyB1c2FnZQorCSAqIHN0YXRlcy4KKwkgKi8KKwlpZiAoKCFyZWFkIHx8ICFkaXIgfHwgU1RSSUNUX1JFQURfQ0hFQ0tTKSAmJgorCQkJIXVzYWdlKGN1cnIsIHRoaXMsIGV4Y2xfYml0LCBzdGF0ZV9uYW1lKG5ld19iaXQpKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIENoZWNrIGZvciByZWFkIGluIHdyaXRlIGNvbmZsaWN0cworCSAqLworCWlmICghcmVhZCkgeworCQlpZiAoIXZhbGlkX3N0YXRlKGN1cnIsIHRoaXMsIG5ld19iaXQsIGV4Y2xfYml0ICsgMSkpCiAJCQlyZXR1cm4gMDsKLQkJaWYgKCF2YWxpZF9zdGF0ZShjdXJyLCB0aGlzLCBuZXdfYml0LAotCQkJCSBMT0NLX0VOQUJMRURfSEFSRElSUVNfUkVBRCkpCisKKwkJaWYgKFNUUklDVF9SRUFEX0NIRUNLUyAmJgorCQkJIXVzYWdlKGN1cnIsIHRoaXMsIGV4Y2xfYml0ICsgMSwKKwkJCQlzdGF0ZV9uYW1lKG5ld19iaXQgKyAxKSkpCiAJCQlyZXR1cm4gMDsKLQkJLyoKLQkJICoganVzdCBtYXJrZWQgaXQgaGFyZGlycS1zYWZlLCBjaGVjayB0aGF0IHRoaXMgbG9jawotCQkgKiB0b29rIG5vIGhhcmRpcnEtdW5zYWZlIGxvY2sgaW4gdGhlIHBhc3Q6Ci0JCSAqLwotCQlpZiAoIWNoZWNrX3VzYWdlX2ZvcndhcmRzKGN1cnIsIHRoaXMsCi0JCQkJCSAgTE9DS19FTkFCTEVEX0hBUkRJUlFTLCAiaGFyZCIpKQotCQkJcmV0dXJuIDA7Ci0jaWYgU1RSSUNUX1JFQURfQ0hFQ0tTCi0JCS8qCi0JCSAqIGp1c3QgbWFya2VkIGl0IGhhcmRpcnEtc2FmZSwgY2hlY2sgdGhhdCB0aGlzIGxvY2sKLQkJICogdG9vayBubyBoYXJkaXJxLXVuc2FmZS1yZWFkIGxvY2sgaW4gdGhlIHBhc3Q6Ci0JCSAqLwotCQlpZiAoIWNoZWNrX3VzYWdlX2ZvcndhcmRzKGN1cnIsIHRoaXMsCi0JCQkJTE9DS19FTkFCTEVEX0hBUkRJUlFTX1JFQUQsICJoYXJkLXJlYWQiKSkKLQkJCXJldHVybiAwOwotI2VuZGlmCi0JCWlmIChoYXJkaXJxX3ZlcmJvc2UoaGxvY2tfY2xhc3ModGhpcykpKQotCQkJcmV0ID0gMjsKLQkJYnJlYWs7Ci0JY2FzZSBMT0NLX1VTRURfSU5fU09GVElSUToKLQkJaWYgKCF2YWxpZF9zdGF0ZShjdXJyLCB0aGlzLCBuZXdfYml0LCBMT0NLX0VOQUJMRURfU09GVElSUVMpKQotCQkJcmV0dXJuIDA7Ci0JCWlmICghdmFsaWRfc3RhdGUoY3VyciwgdGhpcywgbmV3X2JpdCwKLQkJCQkgTE9DS19FTkFCTEVEX1NPRlRJUlFTX1JFQUQpKQotCQkJcmV0dXJuIDA7Ci0JCS8qCi0JCSAqIGp1c3QgbWFya2VkIGl0IHNvZnRpcnEtc2FmZSwgY2hlY2sgdGhhdCB0aGlzIGxvY2sKLQkJICogdG9vayBubyBzb2Z0aXJxLXVuc2FmZSBsb2NrIGluIHRoZSBwYXN0OgotCQkgKi8KLQkJaWYgKCFjaGVja191c2FnZV9mb3J3YXJkcyhjdXJyLCB0aGlzLAotCQkJCQkgIExPQ0tfRU5BQkxFRF9TT0ZUSVJRUywgInNvZnQiKSkKLQkJCXJldHVybiAwOwotI2lmIFNUUklDVF9SRUFEX0NIRUNLUwotCQkvKgotCQkgKiBqdXN0IG1hcmtlZCBpdCBzb2Z0aXJxLXNhZmUsIGNoZWNrIHRoYXQgdGhpcyBsb2NrCi0JCSAqIHRvb2sgbm8gc29mdGlycS11bnNhZmUtcmVhZCBsb2NrIGluIHRoZSBwYXN0OgotCQkgKi8KLQkJaWYgKCFjaGVja191c2FnZV9mb3J3YXJkcyhjdXJyLCB0aGlzLAotCQkJCUxPQ0tfRU5BQkxFRF9TT0ZUSVJRU19SRUFELCAic29mdC1yZWFkIikpCi0JCQlyZXR1cm4gMDsKLSNlbmRpZgotCQlpZiAoc29mdGlycV92ZXJib3NlKGhsb2NrX2NsYXNzKHRoaXMpKSkKLQkJCXJldCA9IDI7Ci0JCWJyZWFrOwotCWNhc2UgTE9DS19VU0VEX0lOX0hBUkRJUlFfUkVBRDoKLQkJaWYgKCF2YWxpZF9zdGF0ZShjdXJyLCB0aGlzLCBuZXdfYml0LCBMT0NLX0VOQUJMRURfSEFSRElSUVMpKQotCQkJcmV0dXJuIDA7Ci0JCS8qCi0JCSAqIGp1c3QgbWFya2VkIGl0IGhhcmRpcnEtcmVhZC1zYWZlLCBjaGVjayB0aGF0IHRoaXMgbG9jawotCQkgKiB0b29rIG5vIGhhcmRpcnEtdW5zYWZlIGxvY2sgaW4gdGhlIHBhc3Q6Ci0JCSAqLwotCQlpZiAoIWNoZWNrX3VzYWdlX2ZvcndhcmRzKGN1cnIsIHRoaXMsCi0JCQkJCSAgTE9DS19FTkFCTEVEX0hBUkRJUlFTLCAiaGFyZCIpKQotCQkJcmV0dXJuIDA7Ci0JCWlmIChoYXJkaXJxX3ZlcmJvc2UoaGxvY2tfY2xhc3ModGhpcykpKQotCQkJcmV0ID0gMjsKLQkJYnJlYWs7Ci0JY2FzZSBMT0NLX1VTRURfSU5fU09GVElSUV9SRUFEOgotCQlpZiAoIXZhbGlkX3N0YXRlKGN1cnIsIHRoaXMsIG5ld19iaXQsIExPQ0tfRU5BQkxFRF9TT0ZUSVJRUykpCi0JCQlyZXR1cm4gMDsKLQkJLyoKLQkJICoganVzdCBtYXJrZWQgaXQgc29mdGlycS1yZWFkLXNhZmUsIGNoZWNrIHRoYXQgdGhpcyBsb2NrCi0JCSAqIHRvb2sgbm8gc29mdGlycS11bnNhZmUgbG9jayBpbiB0aGUgcGFzdDoKLQkJICovCi0JCWlmICghY2hlY2tfdXNhZ2VfZm9yd2FyZHMoY3VyciwgdGhpcywKLQkJCQkJICBMT0NLX0VOQUJMRURfU09GVElSUVMsICJzb2Z0IikpCi0JCQlyZXR1cm4gMDsKLQkJaWYgKHNvZnRpcnFfdmVyYm9zZShobG9ja19jbGFzcyh0aGlzKSkpCi0JCQlyZXQgPSAyOwotCQlicmVhazsKLQljYXNlIExPQ0tfRU5BQkxFRF9IQVJESVJRUzoKLQkJaWYgKCF2YWxpZF9zdGF0ZShjdXJyLCB0aGlzLCBuZXdfYml0LCBMT0NLX1VTRURfSU5fSEFSRElSUSkpCi0JCQlyZXR1cm4gMDsKLQkJaWYgKCF2YWxpZF9zdGF0ZShjdXJyLCB0aGlzLCBuZXdfYml0LAotCQkJCSBMT0NLX1VTRURfSU5fSEFSRElSUV9SRUFEKSkKLQkJCXJldHVybiAwOwotCQkvKgotCQkgKiBqdXN0IG1hcmtlZCBpdCBoYXJkaXJxLXVuc2FmZSwgY2hlY2sgdGhhdCBubyBoYXJkaXJxLXNhZmUKLQkJICogbG9jayBpbiB0aGUgc3lzdGVtIGV2ZXIgdG9vayBpdCBpbiB0aGUgcGFzdDoKLQkJICovCi0JCWlmICghY2hlY2tfdXNhZ2VfYmFja3dhcmRzKGN1cnIsIHRoaXMsCi0JCQkJCSAgIExPQ0tfVVNFRF9JTl9IQVJESVJRLCAiaGFyZCIpKQotCQkJcmV0dXJuIDA7Ci0jaWYgU1RSSUNUX1JFQURfQ0hFQ0tTCi0JCS8qCi0JCSAqIGp1c3QgbWFya2VkIGl0IGhhcmRpcnEtdW5zYWZlLCBjaGVjayB0aGF0IG5vCi0JCSAqIGhhcmRpcnEtc2FmZS1yZWFkIGxvY2sgaW4gdGhlIHN5c3RlbSBldmVyIHRvb2sKLQkJICogaXQgaW4gdGhlIHBhc3Q6Ci0JCSAqLwotCQlpZiAoIWNoZWNrX3VzYWdlX2JhY2t3YXJkcyhjdXJyLCB0aGlzLAotCQkJCSAgIExPQ0tfVVNFRF9JTl9IQVJESVJRX1JFQUQsICJoYXJkLXJlYWQiKSkKLQkJCXJldHVybiAwOwotI2VuZGlmCi0JCWlmIChoYXJkaXJxX3ZlcmJvc2UoaGxvY2tfY2xhc3ModGhpcykpKQotCQkJcmV0ID0gMjsKLQkJYnJlYWs7Ci0JY2FzZSBMT0NLX0VOQUJMRURfU09GVElSUVM6Ci0JCWlmICghdmFsaWRfc3RhdGUoY3VyciwgdGhpcywgbmV3X2JpdCwgTE9DS19VU0VEX0lOX1NPRlRJUlEpKQotCQkJcmV0dXJuIDA7Ci0JCWlmICghdmFsaWRfc3RhdGUoY3VyciwgdGhpcywgbmV3X2JpdCwKLQkJCQkgTE9DS19VU0VEX0lOX1NPRlRJUlFfUkVBRCkpCi0JCQlyZXR1cm4gMDsKLQkJLyoKLQkJICoganVzdCBtYXJrZWQgaXQgc29mdGlycS11bnNhZmUsIGNoZWNrIHRoYXQgbm8gc29mdGlycS1zYWZlCi0JCSAqIGxvY2sgaW4gdGhlIHN5c3RlbSBldmVyIHRvb2sgaXQgaW4gdGhlIHBhc3Q6Ci0JCSAqLwotCQlpZiAoIWNoZWNrX3VzYWdlX2JhY2t3YXJkcyhjdXJyLCB0aGlzLAotCQkJCQkgICBMT0NLX1VTRURfSU5fU09GVElSUSwgInNvZnQiKSkKLQkJCXJldHVybiAwOwotI2lmIFNUUklDVF9SRUFEX0NIRUNLUwotCQkvKgotCQkgKiBqdXN0IG1hcmtlZCBpdCBzb2Z0aXJxLXVuc2FmZSwgY2hlY2sgdGhhdCBubwotCQkgKiBzb2Z0aXJxLXNhZmUtcmVhZCBsb2NrIGluIHRoZSBzeXN0ZW0gZXZlciB0b29rCi0JCSAqIGl0IGluIHRoZSBwYXN0OgotCQkgKi8KLQkJaWYgKCFjaGVja191c2FnZV9iYWNrd2FyZHMoY3VyciwgdGhpcywKLQkJCQkgICBMT0NLX1VTRURfSU5fU09GVElSUV9SRUFELCAic29mdC1yZWFkIikpCi0JCQlyZXR1cm4gMDsKLSNlbmRpZgotCQlpZiAoc29mdGlycV92ZXJib3NlKGhsb2NrX2NsYXNzKHRoaXMpKSkKLQkJCXJldCA9IDI7Ci0JCWJyZWFrOwotCWNhc2UgTE9DS19FTkFCTEVEX0hBUkRJUlFTX1JFQUQ6Ci0JCWlmICghdmFsaWRfc3RhdGUoY3VyciwgdGhpcywgbmV3X2JpdCwgTE9DS19VU0VEX0lOX0hBUkRJUlEpKQotCQkJcmV0dXJuIDA7Ci0jaWYgU1RSSUNUX1JFQURfQ0hFQ0tTCi0JCS8qCi0JCSAqIGp1c3QgbWFya2VkIGl0IGhhcmRpcnEtcmVhZC11bnNhZmUsIGNoZWNrIHRoYXQgbm8KLQkJICogaGFyZGlycS1zYWZlIGxvY2sgaW4gdGhlIHN5c3RlbSBldmVyIHRvb2sgaXQgaW4gdGhlIHBhc3Q6Ci0JCSAqLwotCQlpZiAoIWNoZWNrX3VzYWdlX2JhY2t3YXJkcyhjdXJyLCB0aGlzLAotCQkJCQkgICBMT0NLX1VTRURfSU5fSEFSRElSUSwgImhhcmQiKSkKLQkJCXJldHVybiAwOwotI2VuZGlmCi0JCWlmIChoYXJkaXJxX3ZlcmJvc2UoaGxvY2tfY2xhc3ModGhpcykpKQotCQkJcmV0ID0gMjsKLQkJYnJlYWs7Ci0JY2FzZSBMT0NLX0VOQUJMRURfU09GVElSUVNfUkVBRDoKLQkJaWYgKCF2YWxpZF9zdGF0ZShjdXJyLCB0aGlzLCBuZXdfYml0LCBMT0NLX1VTRURfSU5fU09GVElSUSkpCi0JCQlyZXR1cm4gMDsKLSNpZiBTVFJJQ1RfUkVBRF9DSEVDS1MKLQkJLyoKLQkJICoganVzdCBtYXJrZWQgaXQgc29mdGlycS1yZWFkLXVuc2FmZSwgY2hlY2sgdGhhdCBubwotCQkgKiBzb2Z0aXJxLXNhZmUgbG9jayBpbiB0aGUgc3lzdGVtIGV2ZXIgdG9vayBpdCBpbiB0aGUgcGFzdDoKLQkJICovCi0JCWlmICghY2hlY2tfdXNhZ2VfYmFja3dhcmRzKGN1cnIsIHRoaXMsCi0JCQkJCSAgIExPQ0tfVVNFRF9JTl9TT0ZUSVJRLCAic29mdCIpKQotCQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQkJaWYgKHNvZnRpcnFfdmVyYm9zZShobG9ja19jbGFzcyh0aGlzKSkpCi0JCQlyZXQgPSAyOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlXQVJOX09OKDEpOwotCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gcmV0OworCWlmIChzdGF0ZV92ZXJib3NlKG5ld19iaXQsIGhsb2NrX2NsYXNzKHRoaXMpKSkKKwkJcmV0dXJuIDI7CisKKwlyZXR1cm4gMTsKIH0KIAorZW51bSBtYXJrX3R5cGUgeworI2RlZmluZSBMT0NLREVQX1NUQVRFKF9fU1RBVEUpCV9fU1RBVEUsCisjaW5jbHVkZSAibG9ja2RlcF9zdGF0ZXMuaCIKKyN1bmRlZiBMT0NLREVQX1NUQVRFCit9OworCiAvKgogICogTWFyayBhbGwgaGVsZCBsb2NrcyB3aXRoIGEgdXNhZ2UgYml0OgogICovCiBzdGF0aWMgaW50Ci1tYXJrX2hlbGRfbG9ja3Moc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBpbnQgaGFyZGlycSkKK21hcmtfaGVsZF9sb2NrcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIGVudW0gbWFya190eXBlIG1hcmspCiB7CiAJZW51bSBsb2NrX3VzYWdlX2JpdCB1c2FnZV9iaXQ7CiAJc3RydWN0IGhlbGRfbG9jayAqaGxvY2s7CkBAIC0yMTM2LDE3ICsyMDg0LDEyIEBACiAJZm9yIChpID0gMDsgaSA8IGN1cnItPmxvY2tkZXBfZGVwdGg7IGkrKykgewogCQlobG9jayA9IGN1cnItPmhlbGRfbG9ja3MgKyBpOwogCi0JCWlmIChoYXJkaXJxKSB7Ci0JCQlpZiAoaGxvY2stPnJlYWQpCi0JCQkJdXNhZ2VfYml0ID0gTE9DS19FTkFCTEVEX0hBUkRJUlFTX1JFQUQ7Ci0JCQllbHNlCi0JCQkJdXNhZ2VfYml0ID0gTE9DS19FTkFCTEVEX0hBUkRJUlFTOwotCQl9IGVsc2UgewotCQkJaWYgKGhsb2NrLT5yZWFkKQotCQkJCXVzYWdlX2JpdCA9IExPQ0tfRU5BQkxFRF9TT0ZUSVJRU19SRUFEOwotCQkJZWxzZQotCQkJCXVzYWdlX2JpdCA9IExPQ0tfRU5BQkxFRF9TT0ZUSVJRUzsKLQkJfQorCQl1c2FnZV9iaXQgPSAyICsgKG1hcmsgPDwgMik7IC8qIEVOQUJMRUQgKi8KKwkJaWYgKGhsb2NrLT5yZWFkKQorCQkJdXNhZ2VfYml0ICs9IDE7IC8qIFJFQUQgKi8KKworCQlCVUdfT04odXNhZ2VfYml0ID49IExPQ0tfVVNBR0VfU1RBVEVTKTsKKwogCQlpZiAoIW1hcmtfbG9jayhjdXJyLCBobG9jaywgdXNhZ2VfYml0KSkKIAkJCXJldHVybiAwOwogCX0KQEAgLTIyMDAsNyArMjE0Myw3IEBACiAJICogV2UgYXJlIGdvaW5nIHRvIHR1cm4gaGFyZGlycXMgb24sIHNvIHNldCB0aGUKIAkgKiB1c2FnZSBiaXQgZm9yIGFsbCBoZWxkIGxvY2tzOgogCSAqLwotCWlmICghbWFya19oZWxkX2xvY2tzKGN1cnIsIDEpKQorCWlmICghbWFya19oZWxkX2xvY2tzKGN1cnIsIEhBUkRJUlEpKQogCQlyZXR1cm47CiAJLyoKIAkgKiBJZiB3ZSBoYXZlIHNvZnRpcnFzIGVuYWJsZWQsIHRoZW4gc2V0IHRoZSB1c2FnZQpAQCAtMjIwOCw3ICsyMTUxLDcgQEAKIAkgKiB0aGlzIGJpdCBmcm9tIGJlaW5nIHNldCBiZWZvcmUpCiAJICovCiAJaWYgKGN1cnItPnNvZnRpcnFzX2VuYWJsZWQpCi0JCWlmICghbWFya19oZWxkX2xvY2tzKGN1cnIsIDApKQorCQlpZiAoIW1hcmtfaGVsZF9sb2NrcyhjdXJyLCBTT0ZUSVJRKSkKIAkJCXJldHVybjsKIAogCWN1cnItPmhhcmRpcnFfZW5hYmxlX2lwID0gaXA7CkBAIC0yMjg4LDcgKzIyMzEsNyBAQAogCSAqIGVuYWJsZWQgdG9vOgogCSAqLwogCWlmIChjdXJyLT5oYXJkaXJxc19lbmFibGVkKQotCQltYXJrX2hlbGRfbG9ja3MoY3VyciwgMCk7CisJCW1hcmtfaGVsZF9sb2NrcyhjdXJyLCBTT0ZUSVJRKTsKIH0KIAogLyoKQEAgLTIzMTcsNiArMjI2MCw0OCBAQAogCQlkZWJ1Z19hdG9taWNfaW5jKCZyZWR1bmRhbnRfc29mdGlycXNfb2ZmKTsKIH0KIAorc3RhdGljIHZvaWQgX19sb2NrZGVwX3RyYWNlX2FsbG9jKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7CisKKwlpZiAodW5saWtlbHkoIWRlYnVnX2xvY2tzKSkKKwkJcmV0dXJuOworCisJLyogbm8gcmVjbGFpbSB3aXRob3V0IHdhaXRpbmcgb24gaXQgKi8KKwlpZiAoIShnZnBfbWFzayAmIF9fR0ZQX1dBSVQpKQorCQlyZXR1cm47CisKKwkvKiB0aGlzIGd1eSB3b24ndCBlbnRlciByZWNsYWltICovCisJaWYgKChjdXJyLT5mbGFncyAmIFBGX01FTUFMTE9DKSAmJiAhKGdmcF9tYXNrICYgX19HRlBfTk9NRU1BTExPQykpCisJCXJldHVybjsKKworCS8qIFdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBfX0dGUF9GUyBhbGxvY2F0aW9ucyBmb3Igbm93ICovCisJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9GUykpCisJCXJldHVybjsKKworCWlmIChERUJVR19MT0NLU19XQVJOX09OKGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpKSkKKwkJcmV0dXJuOworCisJbWFya19oZWxkX2xvY2tzKGN1cnIsIFJFQ0xBSU1fRlMpOworfQorCitzdGF0aWMgdm9pZCBjaGVja19mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKTsKKwordm9pZCBsb2NrZGVwX3RyYWNlX2FsbG9jKGdmcF90IGdmcF9tYXNrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodW5saWtlbHkoY3VycmVudC0+bG9ja2RlcF9yZWN1cnNpb24pKQorCQlyZXR1cm47CisKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWNoZWNrX2ZsYWdzKGZsYWdzKTsKKwljdXJyZW50LT5sb2NrZGVwX3JlY3Vyc2lvbiA9IDE7CisJX19sb2NrZGVwX3RyYWNlX2FsbG9jKGdmcF9tYXNrLCBmbGFncyk7CisJY3VycmVudC0+bG9ja2RlcF9yZWN1cnNpb24gPSAwOworCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKIHN0YXRpYyBpbnQgbWFya19pcnFmbGFncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrKQogewogCS8qCkBAIC0yMzQ1LDE5ICsyMzMwLDM1IEBACiAJaWYgKCFobG9jay0+aGFyZGlycXNfb2ZmKSB7CiAJCWlmIChobG9jay0+cmVhZCkgewogCQkJaWYgKCFtYXJrX2xvY2soY3VyciwgaGxvY2ssCi0JCQkJCUxPQ0tfRU5BQkxFRF9IQVJESVJRU19SRUFEKSkKKwkJCQkJTE9DS19FTkFCTEVEX0hBUkRJUlFfUkVBRCkpCiAJCQkJcmV0dXJuIDA7CiAJCQlpZiAoY3Vyci0+c29mdGlycXNfZW5hYmxlZCkKIAkJCQlpZiAoIW1hcmtfbG9jayhjdXJyLCBobG9jaywKLQkJCQkJCUxPQ0tfRU5BQkxFRF9TT0ZUSVJRU19SRUFEKSkKKwkJCQkJCUxPQ0tfRU5BQkxFRF9TT0ZUSVJRX1JFQUQpKQogCQkJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIHsKIAkJCWlmICghbWFya19sb2NrKGN1cnIsIGhsb2NrLAotCQkJCQlMT0NLX0VOQUJMRURfSEFSRElSUVMpKQorCQkJCQlMT0NLX0VOQUJMRURfSEFSRElSUSkpCiAJCQkJcmV0dXJuIDA7CiAJCQlpZiAoY3Vyci0+c29mdGlycXNfZW5hYmxlZCkKIAkJCQlpZiAoIW1hcmtfbG9jayhjdXJyLCBobG9jaywKLQkJCQkJCUxPQ0tfRU5BQkxFRF9TT0ZUSVJRUykpCisJCQkJCQlMT0NLX0VOQUJMRURfU09GVElSUSkpCisJCQkJCXJldHVybiAwOworCQl9CisJfQorCisJLyoKKwkgKiBXZSByZXVzZSB0aGUgaXJxIGNvbnRleHQgaW5mcmFzdHJ1Y3R1cmUgbW9yZSBicm9hZGx5IGFzIGEgZ2VuZXJhbAorCSAqIGNvbnRleHQgY2hlY2tpbmcgY29kZS4gVGhpcyB0ZXN0cyBHRlBfRlMgcmVjdXJzaW9uIChhIGxvY2sgdGFrZW4KKwkgKiBkdXJpbmcgcmVjbGFpbSBmb3IgYSBHRlBfRlMgYWxsb2NhdGlvbiBpcyBoZWxkIG92ZXIgYSBHRlBfRlMKKwkgKiBhbGxvY2F0aW9uKS4KKwkgKi8KKwlpZiAoIWhsb2NrLT50cnlsb2NrICYmIChjdXJyLT5sb2NrZGVwX3JlY2xhaW1fZ2ZwICYgX19HRlBfRlMpKSB7CisJCWlmIChobG9jay0+cmVhZCkgeworCQkJaWYgKCFtYXJrX2xvY2soY3VyciwgaGxvY2ssIExPQ0tfVVNFRF9JTl9SRUNMQUlNX0ZTX1JFQUQpKQorCQkJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCWlmICghbWFya19sb2NrKGN1cnIsIGhsb2NrLCBMT0NLX1VTRURfSU5fUkVDTEFJTV9GUykpCiAJCQkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtMjQxMiw2ICsyNDEzLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgbG9ja2RlcF90cmFjZV9hbGxvYyhnZnBfdCBnZnBfbWFzaykKK3sKK30KKwogI2VuZGlmCiAKIC8qCkBAIC0yNDQ1LDE0ICsyNDUwLDEzIEBACiAJCXJldHVybiAwOwogCiAJc3dpdGNoIChuZXdfYml0KSB7Ci0JY2FzZSBMT0NLX1VTRURfSU5fSEFSRElSUToKLQljYXNlIExPQ0tfVVNFRF9JTl9TT0ZUSVJROgotCWNhc2UgTE9DS19VU0VEX0lOX0hBUkRJUlFfUkVBRDoKLQljYXNlIExPQ0tfVVNFRF9JTl9TT0ZUSVJRX1JFQUQ6Ci0JY2FzZSBMT0NLX0VOQUJMRURfSEFSRElSUVM6Ci0JY2FzZSBMT0NLX0VOQUJMRURfU09GVElSUVM6Ci0JY2FzZSBMT0NLX0VOQUJMRURfSEFSRElSUVNfUkVBRDoKLQljYXNlIExPQ0tfRU5BQkxFRF9TT0ZUSVJRU19SRUFEOgorI2RlZmluZSBMT0NLREVQX1NUQVRFKF9fU1RBVEUpCQkJXAorCWNhc2UgTE9DS19VU0VEX0lOXyMjX19TVEFURToJCVwKKwljYXNlIExPQ0tfVVNFRF9JTl8jI19fU1RBVEUjI19SRUFEOglcCisJY2FzZSBMT0NLX0VOQUJMRURfIyNfX1NUQVRFOgkJXAorCWNhc2UgTE9DS19FTkFCTEVEXyMjX19TVEFURSMjX1JFQUQ6CisjaW5jbHVkZSAibG9ja2RlcF9zdGF0ZXMuaCIKKyN1bmRlZiBMT0NLREVQX1NUQVRFCiAJCXJldCA9IG1hcmtfbG9ja19pcnEoY3VyciwgdGhpcywgbmV3X2JpdCk7CiAJCWlmICghcmV0KQogCQkJcmV0dXJuIDA7CkBAIC0yOTY2LDYgKzI5NzAsMTYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxvY2tfcmVsZWFzZSk7CiAKK3ZvaWQgbG9ja2RlcF9zZXRfY3VycmVudF9yZWNsYWltX3N0YXRlKGdmcF90IGdmcF9tYXNrKQoreworCWN1cnJlbnQtPmxvY2tkZXBfcmVjbGFpbV9nZnAgPSBnZnBfbWFzazsKK30KKwordm9pZCBsb2NrZGVwX2NsZWFyX2N1cnJlbnRfcmVjbGFpbV9zdGF0ZSh2b2lkKQoreworCWN1cnJlbnQtPmxvY2tkZXBfcmVjbGFpbV9nZnAgPSAwOworfQorCiAjaWZkZWYgQ09ORklHX0xPQ0tfU1RBVAogc3RhdGljIGludAogcHJpbnRfbG9ja19jb250ZW50aW9uX2J1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NrZGVwX2ludGVybmFscy5oIGIva2VybmVsL2xvY2tkZXBfaW50ZXJuYWxzLmgKaW5kZXggNTZiMTk2OS4uYTJjYzdlOSAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXBfaW50ZXJuYWxzLmgKKysrIGIva2VybmVsL2xvY2tkZXBfaW50ZXJuYWxzLmgKQEAgLTcsNiArNyw0NSBAQAogICovCiAKIC8qCisgKiBMb2NrLWNsYXNzIHVzYWdlLXN0YXRlIGJpdHM6CisgKi8KK2VudW0gbG9ja191c2FnZV9iaXQgeworI2RlZmluZSBMT0NLREVQX1NUQVRFKF9fU1RBVEUpCQlcCisJTE9DS19VU0VEX0lOXyMjX19TVEFURSwJCVwKKwlMT0NLX1VTRURfSU5fIyNfX1NUQVRFIyNfUkVBRCwJXAorCUxPQ0tfRU5BQkxFRF8jI19fU1RBVEUsCQlcCisJTE9DS19FTkFCTEVEXyMjX19TVEFURSMjX1JFQUQsCisjaW5jbHVkZSAibG9ja2RlcF9zdGF0ZXMuaCIKKyN1bmRlZiBMT0NLREVQX1NUQVRFCisJTE9DS19VU0VELAorCUxPQ0tfVVNBR0VfU1RBVEVTCit9OworCisvKgorICogVXNhZ2Utc3RhdGUgYml0bWFza3M6CisgKi8KKyNkZWZpbmUgX19MT0NLRihfX1NUQVRFKQlMT0NLRl8jI19fU1RBVEUgPSAoMSA8PCBMT0NLXyMjX19TVEFURSksCisKK2VudW0geworI2RlZmluZSBMT0NLREVQX1NUQVRFKF9fU1RBVEUpCQkJCQkJXAorCV9fTE9DS0YoVVNFRF9JTl8jI19fU1RBVEUpCQkJCQlcCisJX19MT0NLRihVU0VEX0lOXyMjX19TVEFURSMjX1JFQUQpCQkJCVwKKwlfX0xPQ0tGKEVOQUJMRURfIyNfX1NUQVRFKQkJCQkJXAorCV9fTE9DS0YoRU5BQkxFRF8jI19fU1RBVEUjI19SRUFEKQorI2luY2x1ZGUgImxvY2tkZXBfc3RhdGVzLmgiCisjdW5kZWYgTE9DS0RFUF9TVEFURQorCV9fTE9DS0YoVVNFRCkKK307CisKKyNkZWZpbmUgTE9DS0ZfRU5BQkxFRF9JUlEgKExPQ0tGX0VOQUJMRURfSEFSRElSUSB8IExPQ0tGX0VOQUJMRURfU09GVElSUSkKKyNkZWZpbmUgTE9DS0ZfVVNFRF9JTl9JUlEgKExPQ0tGX1VTRURfSU5fSEFSRElSUSB8IExPQ0tGX1VTRURfSU5fU09GVElSUSkKKworI2RlZmluZSBMT0NLRl9FTkFCTEVEX0lSUV9SRUFEIFwKKwkJKExPQ0tGX0VOQUJMRURfSEFSRElSUV9SRUFEIHwgTE9DS0ZfRU5BQkxFRF9TT0ZUSVJRX1JFQUQpCisjZGVmaW5lIExPQ0tGX1VTRURfSU5fSVJRX1JFQUQgXAorCQkoTE9DS0ZfVVNFRF9JTl9IQVJESVJRX1JFQUQgfCBMT0NLRl9VU0VEX0lOX1NPRlRJUlFfUkVBRCkKKworLyoKICAqIE1BWF9MT0NLREVQX0VOVFJJRVMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxvY2sgZGVwZW5kZW5jaWVzCiAgKiB3ZSB0cmFjay4KICAqCkBAIC0zMSw4ICs3MCwxMCBAQAogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgYWxsX2xvY2tfY2xhc3NlczsKIGV4dGVybiBzdHJ1Y3QgbG9ja19jaGFpbiBsb2NrX2NoYWluc1tdOwogCi1leHRlcm4gdm9pZAotZ2V0X3VzYWdlX2NoYXJzKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcywgY2hhciAqYzEsIGNoYXIgKmMyLCBjaGFyICpjMywgY2hhciAqYzQpOworI2RlZmluZSBMT0NLX1VTQUdFX0NIQVJTICgxK0xPQ0tfVVNBR0VfU1RBVEVTLzIpCisKK2V4dGVybiB2b2lkIGdldF91c2FnZV9jaGFycyhzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MsCisJCQkgICAgY2hhciB1c2FnZVtMT0NLX1VTQUdFX0NIQVJTXSk7CiAKIGV4dGVybiBjb25zdCBjaGFyICogX19nZXRfa2V5X25hbWUoc3RydWN0IGxvY2tkZXBfc3ViY2xhc3Nfa2V5ICprZXksIGNoYXIgKnN0cik7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NrZGVwX3Byb2MuYyBiL2tlcm5lbC9sb2NrZGVwX3Byb2MuYwppbmRleCAxMzcxNmI4Li5kNzEzNWFhIDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2RlcF9wcm9jLmMKKysrIGIva2VybmVsL2xvY2tkZXBfcHJvYy5jCkBAIC04NCw3ICs4NCw3IEBACiB7CiAJc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gdjsKIAlzdHJ1Y3QgbG9ja19saXN0ICplbnRyeTsKLQljaGFyIGMxLCBjMiwgYzMsIGM0OworCWNoYXIgdXNhZ2VbTE9DS19VU0FHRV9DSEFSU107CiAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKIAkJc2VxX3ByaW50ZihtLCAiYWxsIGxvY2sgY2xhc3NlczpcbiIpOwpAQCAtMTAwLDggKzEwMCw4IEBACiAJc2VxX3ByaW50ZihtLCAiIEJEOiU1bGQiLCBsb2NrZGVwX2NvdW50X2JhY2t3YXJkX2RlcHMoY2xhc3MpKTsKICNlbmRpZgogCi0JZ2V0X3VzYWdlX2NoYXJzKGNsYXNzLCAmYzEsICZjMiwgJmMzLCAmYzQpOwotCXNlcV9wcmludGYobSwgIiAlYyVjJWMlYyIsIGMxLCBjMiwgYzMsIGM0KTsKKwlnZXRfdXNhZ2VfY2hhcnMoY2xhc3MsIHVzYWdlKTsKKwlzZXFfcHJpbnRmKG0sICIgJXMiLCB1c2FnZSk7CiAKIAlzZXFfcHJpbnRmKG0sICI6ICIpOwogCXByaW50X25hbWUobSwgY2xhc3MpOwpAQCAtMzAwLDI3ICszMDAsMjcgQEAKIAkJCW5yX3VuY2F0ZWdvcml6ZWQrKzsKIAkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfVVNFRF9JTl9JUlEpCiAJCQlucl9pcnFfc2FmZSsrOwotCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX0lSUVMpCisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfSVJRKQogCQkJbnJfaXJxX3Vuc2FmZSsrOwogCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9VU0VEX0lOX1NPRlRJUlEpCiAJCQlucl9zb2Z0aXJxX3NhZmUrKzsKLQkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfRU5BQkxFRF9TT0ZUSVJRUykKKwkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfRU5BQkxFRF9TT0ZUSVJRKQogCQkJbnJfc29mdGlycV91bnNhZmUrKzsKIAkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfVVNFRF9JTl9IQVJESVJRKQogCQkJbnJfaGFyZGlycV9zYWZlKys7Ci0JCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfSEFSRElSUVMpCisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfSEFSRElSUSkKIAkJCW5yX2hhcmRpcnFfdW5zYWZlKys7CiAJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX1VTRURfSU5fSVJRX1JFQUQpCiAJCQlucl9pcnFfcmVhZF9zYWZlKys7Ci0JCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfSVJRU19SRUFEKQorCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX0lSUV9SRUFEKQogCQkJbnJfaXJxX3JlYWRfdW5zYWZlKys7CiAJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX1VTRURfSU5fU09GVElSUV9SRUFEKQogCQkJbnJfc29mdGlycV9yZWFkX3NhZmUrKzsKLQkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfRU5BQkxFRF9TT0ZUSVJRU19SRUFEKQorCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX1NPRlRJUlFfUkVBRCkKIAkJCW5yX3NvZnRpcnFfcmVhZF91bnNhZmUrKzsKIAkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfVVNFRF9JTl9IQVJESVJRX1JFQUQpCiAJCQlucl9oYXJkaXJxX3JlYWRfc2FmZSsrOwotCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX0hBUkRJUlFTX1JFQUQpCisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfSEFSRElSUV9SRUFEKQogCQkJbnJfaGFyZGlycV9yZWFkX3Vuc2FmZSsrOwogCiAjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKQEAgLTYwMSw2ICs2MDEsMTAgQEAKIHN0YXRpYyB2b2lkIHNlcV9oZWFkZXIoc3RydWN0IHNlcV9maWxlICptKQogewogCXNlcV9wcmludGYobSwgImxvY2tfc3RhdCB2ZXJzaW9uIDAuM1xuIik7CisKKwlpZiAodW5saWtlbHkoIWRlYnVnX2xvY2tzKSkKKwkJc2VxX3ByaW50ZihtLCAiKldBUk5JTkcqIGxvY2sgZGVidWdnaW5nIGRpc2FibGVkISEgLSBwb3NzaWJseSBkdWUgdG8gYSBsb2NrZGVwIHdhcm5pbmdcbiIpOworCiAJc2VxX2xpbmUobSwgJy0nLCAwLCA0MCArIDEgKyAxMCAqICgxNCArIDEpKTsKIAlzZXFfcHJpbnRmKG0sICIlNDBzICUxNHMgJTE0cyAlMTRzICUxNHMgJTE0cyAlMTRzICUxNHMgJTE0cyAiCiAJCQkiJTE0cyAlMTRzXG4iLApkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXBfc3RhdGVzLmggYi9rZXJuZWwvbG9ja2RlcF9zdGF0ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTViMGNjCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2xvY2tkZXBfc3RhdGVzLmgKQEAgLTAsMCArMSw5IEBACisvKgorICogTG9ja2RlcCBzdGF0ZXMsCisgKgorICogcGxlYXNlIHVwZGF0ZSBYWFhfTE9DS19VU0FHRV9TVEFURVMgaW4gaW5jbHVkZS9saW51eC9sb2NrZGVwLmggd2hlbmV2ZXIKKyAqIHlvdSBhZGQgb25lLCBvciBjb21lIHVwIHdpdGggYSBuaWNlIGR5bmFtaWMgc29sdXRpb24uCisgKi8KK0xPQ0tERVBfU1RBVEUoSEFSRElSUSkKK0xPQ0tERVBfU1RBVEUoU09GVElSUSkKK0xPQ0tERVBfU1RBVEUoUkVDTEFJTV9GUykKZGlmZiAtLWdpdCBhL2tlcm5lbC9tdXRleC1kZWJ1Zy5jIGIva2VybmVsL211dGV4LWRlYnVnLmMKaW5kZXggMWQ5NDE2MC4uNTBkMDIyZSAxMDA2NDQKLS0tIGEva2VybmVsL211dGV4LWRlYnVnLmMKKysrIGIva2VybmVsL211dGV4LWRlYnVnLmMKQEAgLTI2LDExICsyNiw2IEBACiAvKgogICogTXVzdCBiZSBjYWxsZWQgd2l0aCBsb2NrLT53YWl0X2xvY2sgaGVsZC4KICAqLwotdm9pZCBkZWJ1Z19tdXRleF9zZXRfb3duZXIoc3RydWN0IG11dGV4ICpsb2NrLCBzdHJ1Y3QgdGhyZWFkX2luZm8gKm5ld19vd25lcikKLXsKLQlsb2NrLT5vd25lciA9IG5ld19vd25lcjsKLX0KLQogdm9pZCBkZWJ1Z19tdXRleF9sb2NrX2NvbW1vbihzdHJ1Y3QgbXV0ZXggKmxvY2ssIHN0cnVjdCBtdXRleF93YWl0ZXIgKndhaXRlcikKIHsKIAltZW1zZXQod2FpdGVyLCBNVVRFWF9ERUJVR19JTklULCBzaXplb2YoKndhaXRlcikpOwpAQCAtNTksNyArNTQsNiBAQAogCiAJLyogTWFyayB0aGUgY3VycmVudCB0aHJlYWQgYXMgYmxvY2tlZCBvbiB0aGUgbG9jazogKi8KIAl0aS0+dGFzay0+YmxvY2tlZF9vbiA9IHdhaXRlcjsKLQl3YWl0ZXItPmxvY2sgPSBsb2NrOwogfQogCiB2b2lkIG11dGV4X3JlbW92ZV93YWl0ZXIoc3RydWN0IG11dGV4ICpsb2NrLCBzdHJ1Y3QgbXV0ZXhfd2FpdGVyICp3YWl0ZXIsCkBAIC04Miw3ICs3Niw3IEBACiAJREVCVUdfTE9DS1NfV0FSTl9PTihsb2NrLT5tYWdpYyAhPSBsb2NrKTsKIAlERUJVR19MT0NLU19XQVJOX09OKGxvY2stPm93bmVyICE9IGN1cnJlbnRfdGhyZWFkX2luZm8oKSk7CiAJREVCVUdfTE9DS1NfV0FSTl9PTighbG9jay0+d2FpdF9saXN0LnByZXYgJiYgIWxvY2stPndhaXRfbGlzdC5uZXh0KTsKLQlERUJVR19MT0NLU19XQVJOX09OKGxvY2stPm93bmVyICE9IGN1cnJlbnRfdGhyZWFkX2luZm8oKSk7CisJbXV0ZXhfY2xlYXJfb3duZXIobG9jayk7CiB9CiAKIHZvaWQgZGVidWdfbXV0ZXhfaW5pdChzdHJ1Y3QgbXV0ZXggKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsCkBAIC05NSw3ICs4OSw2IEBACiAJZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQoKHZvaWQgKilsb2NrLCBzaXplb2YoKmxvY2spKTsKIAlsb2NrZGVwX2luaXRfbWFwKCZsb2NrLT5kZXBfbWFwLCBuYW1lLCBrZXksIDApOwogI2VuZGlmCi0JbG9jay0+b3duZXIgPSBOVUxMOwogCWxvY2stPm1hZ2ljID0gbG9jazsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL211dGV4LWRlYnVnLmggYi9rZXJuZWwvbXV0ZXgtZGVidWcuaAppbmRleCBiYWJmYmRmLi42YjJkNzM1IDEwMDY0NAotLS0gYS9rZXJuZWwvbXV0ZXgtZGVidWcuaAorKysgYi9rZXJuZWwvbXV0ZXgtZGVidWcuaApAQCAtMTMsMTQgKzEzLDYgQEAKIC8qCiAgKiBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggbG9jay0+d2FpdF9sb2NrIGhlbGQuCiAgKi8KLWV4dGVybiB2b2lkCi1kZWJ1Z19tdXRleF9zZXRfb3duZXIoc3RydWN0IG11dGV4ICpsb2NrLCBzdHJ1Y3QgdGhyZWFkX2luZm8gKm5ld19vd25lcik7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19tdXRleF9jbGVhcl9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2spCi17Ci0JbG9jay0+b3duZXIgPSBOVUxMOwotfQotCiBleHRlcm4gdm9pZCBkZWJ1Z19tdXRleF9sb2NrX2NvbW1vbihzdHJ1Y3QgbXV0ZXggKmxvY2ssCiAJCQkJICAgIHN0cnVjdCBtdXRleF93YWl0ZXIgKndhaXRlcik7CiBleHRlcm4gdm9pZCBkZWJ1Z19tdXRleF93YWtlX3dhaXRlcihzdHJ1Y3QgbXV0ZXggKmxvY2ssCkBAIC0zNSw2ICsyNywxNiBAQAogZXh0ZXJuIHZvaWQgZGVidWdfbXV0ZXhfaW5pdChzdHJ1Y3QgbXV0ZXggKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkgICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKIAorc3RhdGljIGlubGluZSB2b2lkIG11dGV4X3NldF9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2spCit7CisJbG9jay0+b3duZXIgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdXRleF9jbGVhcl9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2spCit7CisJbG9jay0+b3duZXIgPSBOVUxMOworfQorCiAjZGVmaW5lIHNwaW5fbG9ja19tdXRleChsb2NrLCBmbGFncykJCQlcCiAJZG8gewkJCQkJCVwKIAkJc3RydWN0IG11dGV4ICpsID0gY29udGFpbmVyX29mKGxvY2ssIHN0cnVjdCBtdXRleCwgd2FpdF9sb2NrKTsgXApkaWZmIC0tZ2l0IGEva2VybmVsL211dGV4LmMgYi9rZXJuZWwvbXV0ZXguYwppbmRleCA0ZjQ1ZDRiLi41ZDc5NzgxIDEwMDY0NAotLS0gYS9rZXJuZWwvbXV0ZXguYworKysgYi9rZXJuZWwvbXV0ZXguYwpAQCAtMTAsNiArMTAsMTEgQEAKICAqIE1hbnkgdGhhbmtzIHRvIEFyamFuIHZhbiBkZSBWZW4sIFRob21hcyBHbGVpeG5lciwgU3RldmVuIFJvc3RlZHQgYW5kCiAgKiBEYXZpZCBIb3dlbGxzIGZvciBzdWdnZXN0aW9ucyBhbmQgaW1wcm92ZW1lbnRzLgogICoKKyAqICAtIEFkYXB0aXZlIHNwaW5uaW5nIGZvciBtdXRleGVzIGJ5IFBldGVyIFppamxzdHJhLiAoUG9ydGVkIHRvIG1haW5saW5lCisgKiAgICBmcm9tIHRoZSAtcnQgdHJlZSwgd2hlcmUgaXQgd2FzIG9yaWdpbmFsbHkgaW1wbGVtZW50ZWQgZm9yIHJ0bXV0ZXhlcworICogICAgYnkgU3RldmVuIFJvc3RlZHQsIGJhc2VkIG9uIHdvcmsgYnkgR3JlZ29yeSBIYXNraW5zLCBQZXRlciBNb3JyZWFsZQorICogICAgYW5kIFN2ZW4gRGlldHJpY2guCisgKgogICogQWxzbyBzZWUgRG9jdW1lbnRhdGlvbi9tdXRleC1kZXNpZ24udHh0LgogICovCiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KQEAgLTQ2LDYgKzUxLDcgQEAKIAlhdG9taWNfc2V0KCZsb2NrLT5jb3VudCwgMSk7CiAJc3Bpbl9sb2NrX2luaXQoJmxvY2stPndhaXRfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmxvY2stPndhaXRfbGlzdCk7CisJbXV0ZXhfY2xlYXJfb3duZXIobG9jayk7CiAKIAlkZWJ1Z19tdXRleF9pbml0KGxvY2ssIG5hbWUsIGtleSk7CiB9CkBAIC05MSw2ICs5Nyw3IEBACiAJICogJ3VubG9ja2VkJyBpbnRvICdsb2NrZWQnIHN0YXRlLgogCSAqLwogCV9fbXV0ZXhfZmFzdHBhdGhfbG9jaygmbG9jay0+Y291bnQsIF9fbXV0ZXhfbG9ja19zbG93cGF0aCk7CisJbXV0ZXhfc2V0X293bmVyKGxvY2spOwogfQogCiBFWFBPUlRfU1lNQk9MKG11dGV4X2xvY2spOwpAQCAtMTE1LDYgKzEyMiwxNCBAQAogCSAqIFRoZSB1bmxvY2tpbmcgZmFzdHBhdGggaXMgdGhlIDAtPjEgdHJhbnNpdGlvbiBmcm9tICdsb2NrZWQnCiAJICogaW50byAndW5sb2NrZWQnIHN0YXRlOgogCSAqLworI2lmbmRlZiBDT05GSUdfREVCVUdfTVVURVhFUworCS8qCisJICogV2hlbiBkZWJ1Z2dpbmcgaXMgZW5hYmxlZCB3ZSBtdXN0IG5vdCBjbGVhciB0aGUgb3duZXIgYmVmb3JlIHRpbWUsCisJICogdGhlIHNsb3cgcGF0aCB3aWxsIGFsd2F5cyBiZSB0YWtlbiwgYW5kIHRoYXQgY2xlYXJzIHRoZSBvd25lciBmaWVsZAorCSAqIGFmdGVyIHZlcmlmeWluZyB0aGF0IGl0IHdhcyBpbmRlZWQgY3VycmVudC4KKwkgKi8KKwltdXRleF9jbGVhcl9vd25lcihsb2NrKTsKKyNlbmRpZgogCV9fbXV0ZXhfZmFzdHBhdGhfdW5sb2NrKCZsb2NrLT5jb3VudCwgX19tdXRleF91bmxvY2tfc2xvd3BhdGgpOwogfQogCkBAIC0xMjksMjEgKzE0NCw3NSBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGN1cnJlbnQ7CiAJc3RydWN0IG11dGV4X3dhaXRlciB3YWl0ZXI7Ci0JdW5zaWduZWQgaW50IG9sZF92YWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXByZWVtcHRfZGlzYWJsZSgpOworCW11dGV4X2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIHN1YmNsYXNzLCAwLCBpcCk7CisjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiAhZGVmaW5lZChDT05GSUdfREVCVUdfTVVURVhFUykKKwkvKgorCSAqIE9wdGltaXN0aWMgc3Bpbm5pbmcuCisJICoKKwkgKiBXZSB0cnkgdG8gc3BpbiBmb3IgYWNxdWlzaXRpb24gd2hlbiB3ZSBmaW5kIHRoYXQgdGhlcmUgYXJlIG5vCisJICogcGVuZGluZyB3YWl0ZXJzIGFuZCB0aGUgbG9jayBvd25lciBpcyBjdXJyZW50bHkgcnVubmluZyBvbiBhCisJICogKGRpZmZlcmVudCkgQ1BVLgorCSAqCisJICogVGhlIHJhdGlvbmFsZSBpcyB0aGF0IGlmIHRoZSBsb2NrIG93bmVyIGlzIHJ1bm5pbmcsIGl0IGlzIGxpa2VseSB0bworCSAqIHJlbGVhc2UgdGhlIGxvY2sgc29vbi4KKwkgKgorCSAqIFNpbmNlIHRoaXMgbmVlZHMgdGhlIGxvY2sgb3duZXIsIGFuZCB0aGlzIG11dGV4IGltcGxlbWVudGF0aW9uCisJICogZG9lc24ndCB0cmFjayB0aGUgb3duZXIgYXRvbWljYWxseSBpbiB0aGUgbG9jayBmaWVsZCwgd2UgbmVlZCB0bworCSAqIHRyYWNrIGl0IG5vbi1hdG9taWNhbGx5LgorCSAqCisJICogV2UgY2FuJ3QgZG8gdGhpcyBmb3IgREVCVUdfTVVURVhFUyBiZWNhdXNlIHRoYXQgcmVsaWVzIG9uIHdhaXRfbG9jaworCSAqIHRvIHNlcmlhbGl6ZSBldmVyeXRoaW5nLgorCSAqLworCisJZm9yICg7OykgeworCQlzdHJ1Y3QgdGhyZWFkX2luZm8gKm93bmVyOworCisJCS8qCisJCSAqIElmIHRoZXJlJ3MgYW4gb3duZXIsIHdhaXQgZm9yIGl0IHRvIGVpdGhlcgorCQkgKiByZWxlYXNlIHRoZSBsb2NrIG9yIGdvIHRvIHNsZWVwLgorCQkgKi8KKwkJb3duZXIgPSBBQ0NFU1NfT05DRShsb2NrLT5vd25lcik7CisJCWlmIChvd25lciAmJiAhbXV0ZXhfc3Bpbl9vbl9vd25lcihsb2NrLCBvd25lcikpCisJCQlicmVhazsKKworCQlpZiAoYXRvbWljX2NtcHhjaGcoJmxvY2stPmNvdW50LCAxLCAwKSA9PSAxKSB7CisJCQlsb2NrX2FjcXVpcmVkKCZsb2NrLT5kZXBfbWFwLCBpcCk7CisJCQltdXRleF9zZXRfb3duZXIobG9jayk7CisJCQlwcmVlbXB0X2VuYWJsZSgpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKgorCQkgKiBXaGVuIHRoZXJlJ3Mgbm8gb3duZXIsIHdlIG1pZ2h0IGhhdmUgcHJlZW1wdGVkIGJldHdlZW4gdGhlCisJCSAqIG93bmVyIGFjcXVpcmluZyB0aGUgbG9jayBhbmQgc2V0dGluZyB0aGUgb3duZXIgZmllbGQuIElmCisJCSAqIHdlJ3JlIGFuIFJUIHRhc2sgdGhhdCB3aWxsIGxpdmUtbG9jayBiZWNhdXNlIHdlIHdvbid0IGxldAorCQkgKiB0aGUgb3duZXIgY29tcGxldGUuCisJCSAqLworCQlpZiAoIW93bmVyICYmIChuZWVkX3Jlc2NoZWQoKSB8fCBydF90YXNrKHRhc2spKSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIFRoZSBjcHVfcmVsYXgoKSBjYWxsIGlzIGEgY29tcGlsZXIgYmFycmllciB3aGljaCBmb3JjZXMKKwkJICogZXZlcnl0aGluZyBpbiB0aGlzIGxvb3AgdG8gYmUgcmUtbG9hZGVkLiBXZSBkb24ndCBuZWVkCisJCSAqIG1lbW9yeSBiYXJyaWVycyBhcyB3ZSdsbCBldmVudHVhbGx5IG9ic2VydmUgdGhlIHJpZ2h0CisJCSAqIHZhbHVlcyBhdCB0aGUgY29zdCBvZiBhIGZldyBleHRyYSBzcGlucy4KKwkJICovCisJCWNwdV9yZWxheCgpOworCX0KKyNlbmRpZgogCXNwaW5fbG9ja19tdXRleCgmbG9jay0+d2FpdF9sb2NrLCBmbGFncyk7CiAKIAlkZWJ1Z19tdXRleF9sb2NrX2NvbW1vbihsb2NrLCAmd2FpdGVyKTsKLQltdXRleF9hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCBzdWJjbGFzcywgMCwgaXApOwogCWRlYnVnX211dGV4X2FkZF93YWl0ZXIobG9jaywgJndhaXRlciwgdGFza190aHJlYWRfaW5mbyh0YXNrKSk7CiAKIAkvKiBhZGQgd2FpdGluZyB0YXNrcyB0byB0aGUgZW5kIG9mIHRoZSB3YWl0cXVldWUgKEZJRk8pOiAqLwogCWxpc3RfYWRkX3RhaWwoJndhaXRlci5saXN0LCAmbG9jay0+d2FpdF9saXN0KTsKIAl3YWl0ZXIudGFzayA9IHRhc2s7CiAKLQlvbGRfdmFsID0gYXRvbWljX3hjaGcoJmxvY2stPmNvdW50LCAtMSk7Ci0JaWYgKG9sZF92YWwgPT0gMSkKKwlpZiAoYXRvbWljX3hjaGcoJmxvY2stPmNvdW50LCAtMSkgPT0gMSkKIAkJZ290byBkb25lOwogCiAJbG9ja19jb250ZW5kZWQoJmxvY2stPmRlcF9tYXAsIGlwKTsKQEAgLTE1OCw4ICsyMjcsNyBAQAogCQkgKiB0aGF0IHdoZW4gd2UgcmVsZWFzZSB0aGUgbG9jaywgd2UgcHJvcGVybHkgd2FrZSB1cCB0aGUKIAkJICogb3RoZXIgd2FpdGVyczoKIAkJICovCi0JCW9sZF92YWwgPSBhdG9taWNfeGNoZygmbG9jay0+Y291bnQsIC0xKTsKLQkJaWYgKG9sZF92YWwgPT0gMSkKKwkJaWYgKGF0b21pY194Y2hnKCZsb2NrLT5jb3VudCwgLTEpID09IDEpCiAJCQlicmVhazsKIAogCQkvKgpAQCAtMTczLDIxICsyNDEsMjIgQEAKIAkJCXNwaW5fdW5sb2NrX211dGV4KCZsb2NrLT53YWl0X2xvY2ssIGZsYWdzKTsKIAogCQkJZGVidWdfbXV0ZXhfZnJlZV93YWl0ZXIoJndhaXRlcik7CisJCQlwcmVlbXB0X2VuYWJsZSgpOwogCQkJcmV0dXJuIC1FSU5UUjsKIAkJfQogCQlfX3NldF90YXNrX3N0YXRlKHRhc2ssIHN0YXRlKTsKIAogCQkvKiBkaWRudCBnZXQgdGhlIGxvY2ssIGdvIHRvIHNsZWVwOiAqLwogCQlzcGluX3VubG9ja19tdXRleCgmbG9jay0+d2FpdF9sb2NrLCBmbGFncyk7Ci0JCXNjaGVkdWxlKCk7CisJCV9fc2NoZWR1bGUoKTsKIAkJc3Bpbl9sb2NrX211dGV4KCZsb2NrLT53YWl0X2xvY2ssIGZsYWdzKTsKIAl9CiAKIGRvbmU6CiAJbG9ja19hY3F1aXJlZCgmbG9jay0+ZGVwX21hcCwgaXApOwogCS8qIGdvdCB0aGUgbG9jayAtIHJlam9pY2UhICovCi0JbXV0ZXhfcmVtb3ZlX3dhaXRlcihsb2NrLCAmd2FpdGVyLCB0YXNrX3RocmVhZF9pbmZvKHRhc2spKTsKLQlkZWJ1Z19tdXRleF9zZXRfb3duZXIobG9jaywgdGFza190aHJlYWRfaW5mbyh0YXNrKSk7CisJbXV0ZXhfcmVtb3ZlX3dhaXRlcihsb2NrLCAmd2FpdGVyLCBjdXJyZW50X3RocmVhZF9pbmZvKCkpOworCW11dGV4X3NldF9vd25lcihsb2NrKTsKIAogCS8qIHNldCBpdCB0byAwIGlmIHRoZXJlIGFyZSBubyB3YWl0ZXJzIGxlZnQ6ICovCiAJaWYgKGxpa2VseShsaXN0X2VtcHR5KCZsb2NrLT53YWl0X2xpc3QpKSkKQEAgLTE5Niw2ICsyNjUsNyBAQAogCXNwaW5fdW5sb2NrX211dGV4KCZsb2NrLT53YWl0X2xvY2ssIGZsYWdzKTsKIAogCWRlYnVnX211dGV4X2ZyZWVfd2FpdGVyKCZ3YWl0ZXIpOworCXByZWVtcHRfZW5hYmxlKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMiw3ICsyOTIsOCBAQAogbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlX25lc3RlZChzdHJ1Y3QgbXV0ZXggKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcykKIHsKIAltaWdodF9zbGVlcCgpOwotCXJldHVybiBfX211dGV4X2xvY2tfY29tbW9uKGxvY2ssIFRBU0tfSU5URVJSVVBUSUJMRSwgc3ViY2xhc3MsIF9SRVRfSVBfKTsKKwlyZXR1cm4gX19tdXRleF9sb2NrX2NvbW1vbihsb2NrLCBUQVNLX0lOVEVSUlVQVElCTEUsCisJCQkJICAgc3ViY2xhc3MsIF9SRVRfSVBfKTsKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlX25lc3RlZCk7CkBAIC0yNjAsOCArMzMxLDYgQEAKIAkJd2FrZV91cF9wcm9jZXNzKHdhaXRlci0+dGFzayk7CiAJfQogCi0JZGVidWdfbXV0ZXhfY2xlYXJfb3duZXIobG9jayk7Ci0KIAlzcGluX3VubG9ja19tdXRleCgmbG9jay0+d2FpdF9sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTI5OCwxOCArMzY3LDMwIEBACiAgKi8KIGludCBfX3NjaGVkIG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShzdHJ1Y3QgbXV0ZXggKmxvY2spCiB7CisJaW50IHJldDsKKwogCW1pZ2h0X3NsZWVwKCk7Ci0JcmV0dXJuIF9fbXV0ZXhfZmFzdHBhdGhfbG9ja19yZXR2YWwKKwlyZXQgPSAgX19tdXRleF9mYXN0cGF0aF9sb2NrX3JldHZhbAogCQkJKCZsb2NrLT5jb3VudCwgX19tdXRleF9sb2NrX2ludGVycnVwdGlibGVfc2xvd3BhdGgpOworCWlmICghcmV0KQorCQltdXRleF9zZXRfb3duZXIobG9jayk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBFWFBPUlRfU1lNQk9MKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSk7CiAKIGludCBfX3NjaGVkIG11dGV4X2xvY2tfa2lsbGFibGUoc3RydWN0IG11dGV4ICpsb2NrKQogeworCWludCByZXQ7CisKIAltaWdodF9zbGVlcCgpOwotCXJldHVybiBfX211dGV4X2Zhc3RwYXRoX2xvY2tfcmV0dmFsCisJcmV0ID0gX19tdXRleF9mYXN0cGF0aF9sb2NrX3JldHZhbAogCQkJKCZsb2NrLT5jb3VudCwgX19tdXRleF9sb2NrX2tpbGxhYmxlX3Nsb3dwYXRoKTsKKwlpZiAoIXJldCkKKwkJbXV0ZXhfc2V0X293bmVyKGxvY2spOworCisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wobXV0ZXhfbG9ja19raWxsYWJsZSk7CiAKQEAgLTM1Miw5ICs0MzMsMTAgQEAKIAogCXByZXYgPSBhdG9taWNfeGNoZygmbG9jay0+Y291bnQsIC0xKTsKIAlpZiAobGlrZWx5KHByZXYgPT0gMSkpIHsKLQkJZGVidWdfbXV0ZXhfc2V0X293bmVyKGxvY2ssIGN1cnJlbnRfdGhyZWFkX2luZm8oKSk7CisJCW11dGV4X3NldF9vd25lcihsb2NrKTsKIAkJbXV0ZXhfYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMSwgX1JFVF9JUF8pOwogCX0KKwogCS8qIFNldCBpdCBiYWNrIHRvIDAgaWYgdGhlcmUgYXJlIG5vIHdhaXRlcnM6ICovCiAJaWYgKGxpa2VseShsaXN0X2VtcHR5KCZsb2NrLT53YWl0X2xpc3QpKSkKIAkJYXRvbWljX3NldCgmbG9jay0+Y291bnQsIDApOwpAQCAtMzgwLDggKzQ2MiwxMyBAQAogICovCiBpbnQgX19zY2hlZCBtdXRleF90cnlsb2NrKHN0cnVjdCBtdXRleCAqbG9jaykKIHsKLQlyZXR1cm4gX19tdXRleF9mYXN0cGF0aF90cnlsb2NrKCZsb2NrLT5jb3VudCwKLQkJCQkJX19tdXRleF90cnlsb2NrX3Nsb3dwYXRoKTsKKwlpbnQgcmV0OworCisJcmV0ID0gX19tdXRleF9mYXN0cGF0aF90cnlsb2NrKCZsb2NrLT5jb3VudCwgX19tdXRleF90cnlsb2NrX3Nsb3dwYXRoKTsKKwlpZiAocmV0KQorCQltdXRleF9zZXRfb3duZXIobG9jayk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBFWFBPUlRfU1lNQk9MKG11dGV4X3RyeWxvY2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL211dGV4LmggYi9rZXJuZWwvbXV0ZXguaAppbmRleCBhMDc1ZGFmLi42NzU3OGNhIDEwMDY0NAotLS0gYS9rZXJuZWwvbXV0ZXguaAorKysgYi9rZXJuZWwvbXV0ZXguaApAQCAtMTYsOCArMTYsMjYgQEAKICNkZWZpbmUgbXV0ZXhfcmVtb3ZlX3dhaXRlcihsb2NrLCB3YWl0ZXIsIHRpKSBcCiAJCV9fbGlzdF9kZWwoKHdhaXRlciktPmxpc3QucHJldiwgKHdhaXRlciktPmxpc3QubmV4dCkKIAotI2RlZmluZSBkZWJ1Z19tdXRleF9zZXRfb3duZXIobG9jaywgbmV3X293bmVyKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBkZWJ1Z19tdXRleF9jbGVhcl9vd25lcihsb2NrKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgaW5saW5lIHZvaWQgbXV0ZXhfc2V0X293bmVyKHN0cnVjdCBtdXRleCAqbG9jaykKK3sKKwlsb2NrLT5vd25lciA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG11dGV4X2NsZWFyX293bmVyKHN0cnVjdCBtdXRleCAqbG9jaykKK3sKKwlsb2NrLT5vd25lciA9IE5VTEw7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG11dGV4X3NldF9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2spCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdXRleF9jbGVhcl9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2spCit7Cit9CisjZW5kaWYKKwogI2RlZmluZSBkZWJ1Z19tdXRleF93YWtlX3dhaXRlcihsb2NrLCB3YWl0ZXIpCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGRlYnVnX211dGV4X2ZyZWVfd2FpdGVyKHdhaXRlcikJCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGRlYnVnX211dGV4X2FkZF93YWl0ZXIobG9jaywgd2FpdGVyLCB0aSkJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL2Rpc2suYyBiL2tlcm5lbC9wb3dlci9kaXNrLmMKaW5kZXggNGE0YTIwNi4uZTg4NmQxMyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL2Rpc2suYworKysgYi9rZXJuZWwvcG93ZXIvZGlzay5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJZGV2aWNlX3BtX2xvY2soKTsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCiAJLyogQXQgdGhpcyBwb2ludCwgZGV2aWNlX3N1c3BlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGJ1dCAqbm90KgogCSAqIGRldmljZV9wb3dlcl9kb3duKCkuIFdlICptdXN0KiBjYWxsIGRldmljZV9wb3dlcl9kb3duKCkgbm93LgogCSAqIE90aGVyd2lzZSwgZHJpdmVycyBmb3Igc29tZSBkZXZpY2VzIChlLmcuIGludGVycnVwdCBjb250cm9sbGVycykKQEAgLTIyNSwxMyArMjI1LDI1IEBACiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUE06IFNvbWUgZGV2aWNlcyBmYWlsZWQgdG8gcG93ZXIgZG93biwgIgogCQkJImFib3J0aW5nIGhpYmVybmF0aW9uXG4iKTsKLQkJZ290byBFbmFibGVfaXJxczsKKwkJZ290byBVbmxvY2s7CiAJfQorCisJZXJyb3IgPSBwbGF0Zm9ybV9wcmVfc25hcHNob3QocGxhdGZvcm1fbW9kZSk7CisJaWYgKGVycm9yIHx8IGhpYmVybmF0aW9uX3Rlc3QoVEVTVF9QTEFURk9STSkpCisJCWdvdG8gUGxhdGZvcm1fZmluaXNoOworCisJZXJyb3IgPSBkaXNhYmxlX25vbmJvb3RfY3B1cygpOworCWlmIChlcnJvciB8fCBoaWJlcm5hdGlvbl90ZXN0KFRFU1RfQ1BVUykKKwkgICAgfHwgaGliZXJuYXRpb25fdGVzdG1vZGUoSElCRVJOQVRJT05fVEVTVCkpCisJCWdvdG8gRW5hYmxlX2NwdXM7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCiAJc3lzZGV2X3N1c3BlbmQoUE1TR19GUkVFWkUpOwogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgIlBNOiBTb21lIGRldmljZXMgZmFpbGVkIHRvIHBvd2VyIGRvd24sICIKIAkJCSJhYm9ydGluZyBoaWJlcm5hdGlvblxuIik7Ci0JCWdvdG8gUG93ZXJfdXBfZGV2aWNlczsKKwkJZ290byBFbmFibGVfaXJxczsKIAl9CiAKIAlpZiAoaGliZXJuYXRpb25fdGVzdChURVNUX0NPUkUpKQpAQCAtMjQ3LDE3ICsyNTksMjggQEAKIAlyZXN0b3JlX3Byb2Nlc3Nvcl9zdGF0ZSgpOwogCWlmICghaW5fc3VzcGVuZCkKIAkJcGxhdGZvcm1fbGVhdmUocGxhdGZvcm1fbW9kZSk7CisKICBQb3dlcl91cDoKIAlzeXNkZXZfcmVzdW1lKCk7CiAJLyogTk9URTogIGRldmljZV9wb3dlcl91cCgpIGlzIGp1c3QgYSByZXN1bWUoKSBmb3IgZGV2aWNlcwogCSAqIHRoYXQgc3VzcGVuZGVkIHdpdGggaXJxcyBvZmYgLi4uIG5vIG92ZXJhbGwgcG93ZXJ1cC4KIAkgKi8KLSBQb3dlcl91cF9kZXZpY2VzOgotCWRldmljZV9wb3dlcl91cChpbl9zdXNwZW5kID8KLQkJKGVycm9yID8gUE1TR19SRUNPVkVSIDogUE1TR19USEFXKSA6IFBNU0dfUkVTVE9SRSk7CisKICBFbmFibGVfaXJxczoKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKyBFbmFibGVfY3B1czoKKwllbmFibGVfbm9uYm9vdF9jcHVzKCk7CisKKyBQbGF0Zm9ybV9maW5pc2g6CisJcGxhdGZvcm1fZmluaXNoKHBsYXRmb3JtX21vZGUpOworCisJZGV2aWNlX3Bvd2VyX3VwKGluX3N1c3BlbmQgPworCQkoZXJyb3IgPyBQTVNHX1JFQ09WRVIgOiBQTVNHX1RIQVcpIDogUE1TR19SRVNUT1JFKTsKKworIFVubG9jazoKIAlkZXZpY2VfcG1fdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTI5MSwyNSArMzE0LDkgQEAKIAlpZiAoaGliZXJuYXRpb25fdGVzdChURVNUX0RFVklDRVMpKQogCQlnb3RvIFJlY292ZXJfcGxhdGZvcm07CiAKLQllcnJvciA9IHBsYXRmb3JtX3ByZV9zbmFwc2hvdChwbGF0Zm9ybV9tb2RlKTsKLQlpZiAoZXJyb3IgfHwgaGliZXJuYXRpb25fdGVzdChURVNUX1BMQVRGT1JNKSkKLQkJZ290byBGaW5pc2g7CisJZXJyb3IgPSBjcmVhdGVfaW1hZ2UocGxhdGZvcm1fbW9kZSk7CisJLyogQ29udHJvbCByZXR1cm5zIGhlcmUgYWZ0ZXIgc3VjY2Vzc2Z1bCByZXN0b3JlICovCiAKLQllcnJvciA9IGRpc2FibGVfbm9uYm9vdF9jcHVzKCk7Ci0JaWYgKCFlcnJvcikgewotCQlpZiAoaGliZXJuYXRpb25fdGVzdChURVNUX0NQVVMpKQotCQkJZ290byBFbmFibGVfY3B1czsKLQotCQlpZiAoaGliZXJuYXRpb25fdGVzdG1vZGUoSElCRVJOQVRJT05fVEVTVCkpCi0JCQlnb3RvIEVuYWJsZV9jcHVzOwotCi0JCWVycm9yID0gY3JlYXRlX2ltYWdlKHBsYXRmb3JtX21vZGUpOwotCQkvKiBDb250cm9sIHJldHVybnMgaGVyZSBhZnRlciBzdWNjZXNzZnVsIHJlc3RvcmUgKi8KLQl9Ci0gRW5hYmxlX2NwdXM6Ci0JZW5hYmxlX25vbmJvb3RfY3B1cygpOwotIEZpbmlzaDoKLQlwbGF0Zm9ybV9maW5pc2gocGxhdGZvcm1fbW9kZSk7CiAgUmVzdW1lX2RldmljZXM6CiAJZGV2aWNlX3Jlc3VtZShpbl9zdXNwZW5kID8KIAkJKGVycm9yID8gUE1TR19SRUNPVkVSIDogUE1TR19USEFXKSA6IFBNU0dfUkVTVE9SRSk7CkBAIC0zMzEsMTkgKzMzOCwzMyBAQAogICoJa2VybmVsLgogICovCiAKLXN0YXRpYyBpbnQgcmVzdW1lX3RhcmdldF9rZXJuZWwodm9pZCkKK3N0YXRpYyBpbnQgcmVzdW1lX3RhcmdldF9rZXJuZWwoYm9vbCBwbGF0Zm9ybV9tb2RlKQogewogCWludCBlcnJvcjsKIAogCWRldmljZV9wbV9sb2NrKCk7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwogCWVycm9yID0gZGV2aWNlX3Bvd2VyX2Rvd24oUE1TR19RVUlFU0NFKTsKIAlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJQTTogU29tZSBkZXZpY2VzIGZhaWxlZCB0byBwb3dlciBkb3duLCAiCiAJCQkiYWJvcnRpbmcgcmVzdW1lXG4iKTsKLQkJZ290byBFbmFibGVfaXJxczsKKwkJZ290byBVbmxvY2s7CiAJfQotCXN5c2Rldl9zdXNwZW5kKFBNU0dfUVVJRVNDRSk7CisKKwllcnJvciA9IHBsYXRmb3JtX3ByZV9yZXN0b3JlKHBsYXRmb3JtX21vZGUpOworCWlmIChlcnJvcikKKwkJZ290byBDbGVhbnVwOworCisJZXJyb3IgPSBkaXNhYmxlX25vbmJvb3RfY3B1cygpOworCWlmIChlcnJvcikKKwkJZ290byBFbmFibGVfY3B1czsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwllcnJvciA9IHN5c2Rldl9zdXNwZW5kKFBNU0dfUVVJRVNDRSk7CisJaWYgKGVycm9yKQorCQlnb3RvIEVuYWJsZV9pcnFzOworCiAJLyogV2UnbGwgaWdub3JlIHNhdmVkIHN0YXRlLCBidXQgdGhpcyBnZXRzIHByZWVtcHQgY291bnQgKGV0YykgcmlnaHQgKi8KIAlzYXZlX3Byb2Nlc3Nvcl9zdGF0ZSgpOwogCWVycm9yID0gcmVzdG9yZV9oaWdobWVtKCk7CkBAIC0zNjYsMTEgKzM4NywyMyBAQAogCXN3c3VzcF9mcmVlKCk7CiAJcmVzdG9yZV9wcm9jZXNzb3Jfc3RhdGUoKTsKIAl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CisKIAlzeXNkZXZfcmVzdW1lKCk7Ci0JZGV2aWNlX3Bvd2VyX3VwKFBNU0dfUkVDT1ZFUik7CisKICBFbmFibGVfaXJxczoKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKyBFbmFibGVfY3B1czoKKwllbmFibGVfbm9uYm9vdF9jcHVzKCk7CisKKyBDbGVhbnVwOgorCXBsYXRmb3JtX3Jlc3RvcmVfY2xlYW51cChwbGF0Zm9ybV9tb2RlKTsKKworCWRldmljZV9wb3dlcl91cChQTVNHX1JFQ09WRVIpOworCisgVW5sb2NrOgogCWRldmljZV9wbV91bmxvY2soKTsKKwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMzkwLDE5ICs0MjMsMTAgQEAKIAlwbV9wcmVwYXJlX2NvbnNvbGUoKTsKIAlzdXNwZW5kX2NvbnNvbGUoKTsKIAllcnJvciA9IGRldmljZV9zdXNwZW5kKFBNU0dfUVVJRVNDRSk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIEZpbmlzaDsKLQotCWVycm9yID0gcGxhdGZvcm1fcHJlX3Jlc3RvcmUocGxhdGZvcm1fbW9kZSk7CiAJaWYgKCFlcnJvcikgewotCQllcnJvciA9IGRpc2FibGVfbm9uYm9vdF9jcHVzKCk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IHJlc3VtZV90YXJnZXRfa2VybmVsKCk7Ci0JCWVuYWJsZV9ub25ib290X2NwdXMoKTsKKwkJZXJyb3IgPSByZXN1bWVfdGFyZ2V0X2tlcm5lbChwbGF0Zm9ybV9tb2RlKTsKKwkJZGV2aWNlX3Jlc3VtZShQTVNHX1JFQ09WRVIpOwogCX0KLQlwbGF0Zm9ybV9yZXN0b3JlX2NsZWFudXAocGxhdGZvcm1fbW9kZSk7Ci0JZGV2aWNlX3Jlc3VtZShQTVNHX1JFQ09WRVIpOwotIEZpbmlzaDoKIAlyZXN1bWVfY29uc29sZSgpOwogCXBtX3Jlc3RvcmVfY29uc29sZSgpOwogCXJldHVybiBlcnJvcjsKQEAgLTQzOCwzOCArNDYyLDQ2IEBACiAJCWdvdG8gUmVzdW1lX2RldmljZXM7CiAJfQogCisJZGV2aWNlX3BtX2xvY2soKTsKKworCWVycm9yID0gZGV2aWNlX3Bvd2VyX2Rvd24oUE1TR19ISUJFUk5BVEUpOworCWlmIChlcnJvcikKKwkJZ290byBVbmxvY2s7CisKIAllcnJvciA9IGhpYmVybmF0aW9uX29wcy0+cHJlcGFyZSgpOwogCWlmIChlcnJvcikKLQkJZ290byBSZXN1bWVfZGV2aWNlczsKKwkJZ290byBQbGF0b2ZybV9maW5pc2g7CiAKIAllcnJvciA9IGRpc2FibGVfbm9uYm9vdF9jcHVzKCk7CiAJaWYgKGVycm9yKQotCQlnb3RvIEZpbmlzaDsKKwkJZ290byBQbGF0b2ZybV9maW5pc2g7CiAKLQlkZXZpY2VfcG1fbG9jaygpOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JZXJyb3IgPSBkZXZpY2VfcG93ZXJfZG93bihQTVNHX0hJQkVSTkFURSk7Ci0JaWYgKCFlcnJvcikgewotCQlzeXNkZXZfc3VzcGVuZChQTVNHX0hJQkVSTkFURSk7Ci0JCWhpYmVybmF0aW9uX29wcy0+ZW50ZXIoKTsKLQkJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCi0JCXdoaWxlICgxKTsKLQl9Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOwotCWRldmljZV9wbV91bmxvY2soKTsKKwlzeXNkZXZfc3VzcGVuZChQTVNHX0hJQkVSTkFURSk7CisJaGliZXJuYXRpb25fb3BzLT5lbnRlcigpOworCS8qIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLworCXdoaWxlICgxKTsKIAogCS8qCiAJICogV2UgZG9uJ3QgbmVlZCB0byByZWVuYWJsZSB0aGUgbm9uYm9vdCBDUFVzIG9yIHJlc3VtZSBjb25zb2xlcywgc2luY2UKIAkgKiB0aGUgc3lzdGVtIGlzIGdvaW5nIHRvIGJlIGhhbHRlZCBhbnl3YXkuCiAJICovCi0gRmluaXNoOgorIFBsYXRvZnJtX2ZpbmlzaDoKIAloaWJlcm5hdGlvbl9vcHMtPmZpbmlzaCgpOworCisJZGV2aWNlX3Bvd2VyX3VwKFBNU0dfUkVTVE9SRSk7CisKKyBVbmxvY2s6CisJZGV2aWNlX3BtX3VubG9jaygpOworCiAgUmVzdW1lX2RldmljZXM6CiAJZW50ZXJpbmdfcGxhdGZvcm1faGliZXJuYXRpb24gPSBmYWxzZTsKIAlkZXZpY2VfcmVzdW1lKFBNU0dfUkVTVE9SRSk7CiAJcmVzdW1lX2NvbnNvbGUoKTsKKwogIENsb3NlOgogCWhpYmVybmF0aW9uX29wcy0+ZW5kKCk7CisKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCmluZGV4IGM5NjMyZjguLmYxNzJmNDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9tYWluLmMKKysrIGIva2VybmVsL3Bvd2VyL21haW4uYwpAQCAtMjg3LDE3ICsyODcsMzIgQEAKICAqLwogc3RhdGljIGludCBzdXNwZW5kX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKIHsKLQlpbnQgZXJyb3IgPSAwOworCWludCBlcnJvcjsKIAogCWRldmljZV9wbV9sb2NrKCk7Ci0JYXJjaF9zdXNwZW5kX2Rpc2FibGVfaXJxcygpOwotCUJVR19PTighaXJxc19kaXNhYmxlZCgpKTsKIAotCWlmICgoZXJyb3IgPSBkZXZpY2VfcG93ZXJfZG93bihQTVNHX1NVU1BFTkQpKSkgeworCWVycm9yID0gZGV2aWNlX3Bvd2VyX2Rvd24oUE1TR19TVVNQRU5EKTsKKwlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJQTTogU29tZSBkZXZpY2VzIGZhaWxlZCB0byBwb3dlciBkb3duXG4iKTsKIAkJZ290byBEb25lOwogCX0KIAorCWlmIChzdXNwZW5kX29wcy0+cHJlcGFyZSkgeworCQllcnJvciA9IHN1c3BlbmRfb3BzLT5wcmVwYXJlKCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gUG93ZXJfdXBfZGV2aWNlczsKKwl9CisKKwlpZiAoc3VzcGVuZF90ZXN0KFRFU1RfUExBVEZPUk0pKQorCQlnb3RvIFBsYXRmcm9tX2ZpbmlzaDsKKworCWVycm9yID0gZGlzYWJsZV9ub25ib290X2NwdXMoKTsKKwlpZiAoZXJyb3IgfHwgc3VzcGVuZF90ZXN0KFRFU1RfQ1BVUykpCisJCWdvdG8gRW5hYmxlX2NwdXM7CisKKwlhcmNoX3N1c3BlbmRfZGlzYWJsZV9pcnFzKCk7CisJQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOworCiAJZXJyb3IgPSBzeXNkZXZfc3VzcGVuZChQTVNHX1NVU1BFTkQpOwogCWlmICghZXJyb3IpIHsKIAkJaWYgKCFzdXNwZW5kX3Rlc3QoVEVTVF9DT1JFKSkKQEAgLTMwNSwxMSArMzIwLDIyIEBACiAJCXN5c2Rldl9yZXN1bWUoKTsKIAl9CiAKLQlkZXZpY2VfcG93ZXJfdXAoUE1TR19SRVNVTUUpOwotIERvbmU6CiAJYXJjaF9zdXNwZW5kX2VuYWJsZV9pcnFzKCk7CiAJQlVHX09OKGlycXNfZGlzYWJsZWQoKSk7CisKKyBFbmFibGVfY3B1czoKKwllbmFibGVfbm9uYm9vdF9jcHVzKCk7CisKKyBQbGF0ZnJvbV9maW5pc2g6CisJaWYgKHN1c3BlbmRfb3BzLT5maW5pc2gpCisJCXN1c3BlbmRfb3BzLT5maW5pc2goKTsKKworIFBvd2VyX3VwX2RldmljZXM6CisJZGV2aWNlX3Bvd2VyX3VwKFBNU0dfUkVTVU1FKTsKKworIERvbmU6CiAJZGV2aWNlX3BtX3VubG9jaygpOworCiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0zNDEsMjMgKzM2Nyw4IEBACiAJaWYgKHN1c3BlbmRfdGVzdChURVNUX0RFVklDRVMpKQogCQlnb3RvIFJlY292ZXJfcGxhdGZvcm07CiAKLQlpZiAoc3VzcGVuZF9vcHMtPnByZXBhcmUpIHsKLQkJZXJyb3IgPSBzdXNwZW5kX29wcy0+cHJlcGFyZSgpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIFJlc3VtZV9kZXZpY2VzOwotCX0KKwlzdXNwZW5kX2VudGVyKHN0YXRlKTsKIAotCWlmIChzdXNwZW5kX3Rlc3QoVEVTVF9QTEFURk9STSkpCi0JCWdvdG8gRmluaXNoOwotCi0JZXJyb3IgPSBkaXNhYmxlX25vbmJvb3RfY3B1cygpOwotCWlmICghZXJyb3IgJiYgIXN1c3BlbmRfdGVzdChURVNUX0NQVVMpKQotCQlzdXNwZW5kX2VudGVyKHN0YXRlKTsKLQotCWVuYWJsZV9ub25ib290X2NwdXMoKTsKLSBGaW5pc2g6Ci0JaWYgKHN1c3BlbmRfb3BzLT5maW5pc2gpCi0JCXN1c3BlbmRfb3BzLT5maW5pc2goKTsKICBSZXN1bWVfZGV2aWNlczoKIAlzdXNwZW5kX3Rlc3Rfc3RhcnQoKTsKIAlkZXZpY2VfcmVzdW1lKFBNU0dfUkVTVU1FKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCmluZGV4IDdjNDE0MmEuLjliNGE5NzUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0b3J0dXJlLmMKKysrIGIva2VybmVsL3JjdXRvcnR1cmUuYwpAQCAtMTI2LDYgKzEyNiw3IEBACiBzdGF0aWMgYXRvbWljX3Qgbl9yY3VfdG9ydHVyZV9lcnJvcjsKIHN0YXRpYyBsb25nIG5fcmN1X3RvcnR1cmVfdGltZXJzID0gMDsKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIHJjdV90b3J0dXJlX3JlbW92ZWQ7CitzdGF0aWMgY3B1bWFza192YXJfdCBzaHVmZmxlX3RtcF9tYXNrOwogCiBzdGF0aWMgaW50IHN0dXR0ZXJfcGF1c2VfdGVzdCA9IDA7CiAKQEAgLTg4OSwxMCArODkwLDkgQEAKICAqLwogc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfc2h1ZmZsZV90YXNrcyh2b2lkKQogewotCWNwdW1hc2tfdCB0bXBfbWFzazsKIAlpbnQgaTsKIAotCWNwdXNfc2V0YWxsKHRtcF9tYXNrKTsKKwljcHVtYXNrX3NldGFsbChzaHVmZmxlX3RtcF9tYXNrKTsKIAlnZXRfb25saW5lX2NwdXMoKTsKIAogCS8qIE5vIHBvaW50IGluIHNodWZmbGluZyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBvbmxpbmUgQ1BVIChleDogVVApICovCkBAIC05MDIsMjkgKzkwMiwyOSBAQAogCX0KIAogCWlmIChyY3VfaWRsZV9jcHUgIT0gLTEpCi0JCWNwdV9jbGVhcihyY3VfaWRsZV9jcHUsIHRtcF9tYXNrKTsKKwkJY3B1bWFza19jbGVhcl9jcHUocmN1X2lkbGVfY3B1LCBzaHVmZmxlX3RtcF9tYXNrKTsKIAotCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZ0bXBfbWFzayk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgc2h1ZmZsZV90bXBfbWFzayk7CiAKIAlpZiAocmVhZGVyX3Rhc2tzKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBucmVhbHJlYWRlcnM7IGkrKykKIAkJCWlmIChyZWFkZXJfdGFza3NbaV0pCiAJCQkJc2V0X2NwdXNfYWxsb3dlZF9wdHIocmVhZGVyX3Rhc2tzW2ldLAotCQkJCQkJICAgICAmdG1wX21hc2spOworCQkJCQkJICAgICBzaHVmZmxlX3RtcF9tYXNrKTsKIAl9CiAKIAlpZiAoZmFrZXdyaXRlcl90YXNrcykgewogCQlmb3IgKGkgPSAwOyBpIDwgbmZha2V3cml0ZXJzOyBpKyspCiAJCQlpZiAoZmFrZXdyaXRlcl90YXNrc1tpXSkKIAkJCQlzZXRfY3B1c19hbGxvd2VkX3B0cihmYWtld3JpdGVyX3Rhc2tzW2ldLAotCQkJCQkJICAgICAmdG1wX21hc2spOworCQkJCQkJICAgICBzaHVmZmxlX3RtcF9tYXNrKTsKIAl9CiAKIAlpZiAod3JpdGVyX3Rhc2spCi0JCXNldF9jcHVzX2FsbG93ZWRfcHRyKHdyaXRlcl90YXNrLCAmdG1wX21hc2spOworCQlzZXRfY3B1c19hbGxvd2VkX3B0cih3cml0ZXJfdGFzaywgc2h1ZmZsZV90bXBfbWFzayk7CiAKIAlpZiAoc3RhdHNfdGFzaykKLQkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoc3RhdHNfdGFzaywgJnRtcF9tYXNrKTsKKwkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoc3RhdHNfdGFzaywgc2h1ZmZsZV90bXBfbWFzayk7CiAKIAlpZiAocmN1X2lkbGVfY3B1ID09IC0xKQogCQlyY3VfaWRsZV9jcHUgPSBudW1fb25saW5lX2NwdXMoKSAtIDE7CkBAIC0xMDEyLDYgKzEwMTIsNyBAQAogCWlmIChzaHVmZmxlcl90YXNrKSB7CiAJCVZFUkJPU0VfUFJJTlRLX1NUUklORygiU3RvcHBpbmcgcmN1X3RvcnR1cmVfc2h1ZmZsZSB0YXNrIik7CiAJCWt0aHJlYWRfc3RvcChzaHVmZmxlcl90YXNrKTsKKwkJZnJlZV9jcHVtYXNrX3ZhcihzaHVmZmxlX3RtcF9tYXNrKTsKIAl9CiAJc2h1ZmZsZXJfdGFzayA9IE5VTEw7CiAKQEAgLTExOTAsMTAgKzExOTEsMTggQEAKIAl9CiAJaWYgKHRlc3Rfbm9faWRsZV9oeikgewogCQlyY3VfaWRsZV9jcHUgPSBudW1fb25saW5lX2NwdXMoKSAtIDE7CisKKwkJaWYgKCFhbGxvY19jcHVtYXNrX3Zhcigmc2h1ZmZsZV90bXBfbWFzaywgR0ZQX0tFUk5FTCkpIHsKKwkJCWZpcnN0ZXJyID0gLUVOT01FTTsKKwkJCVZFUkJPU0VfUFJJTlRLX0VSUlNUUklORygiRmFpbGVkIHRvIGFsbG9jIG1hc2siKTsKKwkJCWdvdG8gdW53aW5kOworCQl9CisKIAkJLyogQ3JlYXRlIHRoZSBzaHVmZmxlciB0aHJlYWQgKi8KIAkJc2h1ZmZsZXJfdGFzayA9IGt0aHJlYWRfcnVuKHJjdV90b3J0dXJlX3NodWZmbGUsIE5VTEwsCiAJCQkJCSAgInJjdV90b3J0dXJlX3NodWZmbGUiKTsKIAkJaWYgKElTX0VSUihzaHVmZmxlcl90YXNrKSkgeworCQkJZnJlZV9jcHVtYXNrX3ZhcihzaHVmZmxlX3RtcF9tYXNrKTsKIAkJCWZpcnN0ZXJyID0gUFRSX0VSUihzaHVmZmxlcl90YXNrKTsKIAkJCVZFUkJPU0VfUFJJTlRLX0VSUlNUUklORygiRmFpbGVkIHRvIGNyZWF0ZSBzaHVmZmxlciIpOwogCQkJc2h1ZmZsZXJfdGFzayA9IE5VTEw7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IGY0YzQxM2IuLjE5NmQ0OGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC0zMTkwLDcgKzMxOTAsNyBAQAogCXJldHVybiAwOwogfQogLyoqKioqKioqKiogSGVscGVycyBmb3IgZmluZF9idXNpZXN0X2dyb3VwICoqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKgorLyoKICAqIHNkX2xiX3N0YXRzIC0gU3RydWN0dXJlIHRvIHN0b3JlIHRoZSBzdGF0aXN0aWNzIG9mIGEgc2NoZWRfZG9tYWluCiAgKiAJCWR1cmluZyBsb2FkIGJhbGFuY2luZy4KICAqLwpAQCAtMzIyMiw3ICszMjIyLDcgQEAKICNlbmRpZgogfTsKIAotLyoqCisvKgogICogc2dfbGJfc3RhdHMgLSBzdGF0cyBvZiBhIHNjaGVkX2dyb3VwIHJlcXVpcmVkIGZvciBsb2FkX2JhbGFuY2luZwogICovCiBzdHJ1Y3Qgc2dfbGJfc3RhdHMgewpAQCAtMzM2MCwxNiArMzM2MCwxNyBAQAogfQogCiAvKioKLSAqIGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cCAtIENoZWNrIGlmIHdlIGhhdmUgcG90ZW50aWFsIHRvIHBlcmZvcm0KLSAqCXNvbWUgcG93ZXItc2F2aW5ncyBiYWxhbmNlLiBJZiB5ZXMsIHNldCB0aGUgYnVzaWVzdCBncm91cCB0byBiZQotICoJdGhlIGxlYXN0IGxvYWRlZCBncm91cCBpbiB0aGUgc2NoZWRfZG9tYWluLCBzbyB0aGF0IGl0J3MgQ1BVcyBjYW4KLSAqCWJlIHB1dCB0byBpZGxlLgotICoKKyAqIGNoZWNrX3Bvd2VyX3NhdmVfYnVzaWVzdF9ncm91cCAtIHNlZSBpZiB0aGVyZSBpcyBwb3RlbnRpYWwgZm9yIHNvbWUgcG93ZXItc2F2aW5ncyBiYWxhbmNlCiAgKiBAc2RzOiBWYXJpYWJsZSBjb250YWluaW5nIHRoZSBzdGF0aXN0aWNzIG9mIHRoZSBzY2hlZF9kb21haW4KICAqCXVuZGVyIGNvbnNpZGVyYXRpb24uCiAgKiBAdGhpc19jcHU6IENwdSBhdCB3aGljaCB3ZSdyZSBjdXJyZW50bHkgcGVyZm9ybWluZyBsb2FkLWJhbGFuY2luZy4KICAqIEBpbWJhbGFuY2U6IFZhcmlhYmxlIHRvIHN0b3JlIHRoZSBpbWJhbGFuY2UuCiAgKgorICogRGVzY3JpcHRpb246CisgKiBDaGVjayBpZiB3ZSBoYXZlIHBvdGVudGlhbCB0byBwZXJmb3JtIHNvbWUgcG93ZXItc2F2aW5ncyBiYWxhbmNlLgorICogSWYgeWVzLCBzZXQgdGhlIGJ1c2llc3QgZ3JvdXAgdG8gYmUgdGhlIGxlYXN0IGxvYWRlZCBncm91cCBpbiB0aGUKKyAqIHNjaGVkX2RvbWFpbiwgc28gdGhhdCBpdCdzIENQVXMgY2FuIGJlIHB1dCB0byBpZGxlLgorICoKICAqIFJldHVybnMgMSBpZiB0aGVyZSBpcyBwb3RlbnRpYWwgdG8gcGVyZm9ybSBwb3dlci1zYXZpbmdzIGJhbGFuY2UuCiAgKiBFbHNlIHJldHVybnMgMC4KICAqLwpAQCAtNDk0MSwxNSArNDk0MiwxMyBAQAogLyoKICAqIHNjaGVkdWxlKCkgaXMgdGhlIG1haW4gc2NoZWR1bGVyIGZ1bmN0aW9uLgogICovCi1hc21saW5rYWdlIHZvaWQgX19zY2hlZCBzY2hlZHVsZSh2b2lkKQorYXNtbGlua2FnZSB2b2lkIF9fc2NoZWQgX19zY2hlZHVsZSh2b2lkKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgKm5leHQ7CiAJdW5zaWduZWQgbG9uZyAqc3dpdGNoX2NvdW50OwogCXN0cnVjdCBycSAqcnE7CiAJaW50IGNwdTsKIAotbmVlZF9yZXNjaGVkOgotCXByZWVtcHRfZGlzYWJsZSgpOwogCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlycSA9IGNwdV9ycShjcHUpOwogCXJjdV9xc2N0cl9pbmMoY3B1KTsKQEAgLTUwMDYsMTMgKzUwMDUsODAgQEAKIAogCWlmICh1bmxpa2VseShyZWFjcXVpcmVfa2VybmVsX2xvY2soY3VycmVudCkgPCAwKSkKIAkJZ290byBuZWVkX3Jlc2NoZWRfbm9ucHJlZW1wdGlibGU7Cit9CiAKK2FzbWxpbmthZ2Ugdm9pZCBfX3NjaGVkIHNjaGVkdWxlKHZvaWQpCit7CituZWVkX3Jlc2NoZWQ6CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJX19zY2hlZHVsZSgpOwogCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAlpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfTkVFRF9SRVNDSEVEKSkpCiAJCWdvdG8gbmVlZF9yZXNjaGVkOwogfQogRVhQT1JUX1NZTUJPTChzY2hlZHVsZSk7CiAKKyNpZmRlZiBDT05GSUdfU01QCisvKgorICogTG9vayBvdXQhICJvd25lciIgaXMgYW4gZW50aXJlbHkgc3BlY3VsYXRpdmUgcG9pbnRlcgorICogYWNjZXNzIGFuZCBub3QgcmVsaWFibGUuCisgKi8KK2ludCBtdXRleF9zcGluX29uX293bmVyKHN0cnVjdCBtdXRleCAqbG9jaywgc3RydWN0IHRocmVhZF9pbmZvICpvd25lcikKK3sKKwl1bnNpZ25lZCBpbnQgY3B1OworCXN0cnVjdCBycSAqcnE7CisKKwlpZiAoIXNjaGVkX2ZlYXQoT1dORVJfU1BJTikpCisJCXJldHVybiAwOworCisjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQworCS8qCisJICogTmVlZCB0byBhY2Nlc3MgdGhlIGNwdSBmaWVsZCBrbm93aW5nIHRoYXQKKwkgKiBERUJVR19QQUdFQUxMT0MgY291bGQgaGF2ZSB1bm1hcHBlZCBpdCBpZgorCSAqIHRoZSBtdXRleCBvd25lciBqdXN0IHJlbGVhc2VkIGl0IGFuZCBleGl0ZWQuCisJICovCisJaWYgKHByb2JlX2tlcm5lbF9hZGRyZXNzKCZvd25lci0+Y3B1LCBjcHUpKQorCQlnb3RvIG91dDsKKyNlbHNlCisJY3B1ID0gb3duZXItPmNwdTsKKyNlbmRpZgorCisJLyoKKwkgKiBFdmVuIGlmIHRoZSBhY2Nlc3Mgc3VjY2VlZGVkIChsaWtlbHkgY2FzZSksCisJICogdGhlIGNwdSBmaWVsZCBtYXkgbm8gbG9uZ2VyIGJlIHZhbGlkLgorCSAqLworCWlmIChjcHUgPj0gbnJfY3B1bWFza19iaXRzKQorCQlnb3RvIG91dDsKKworCS8qCisJICogV2UgbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHdlIGNhbiBkbyBhCisJICogZ2V0X2NwdSgpIGFuZCB0aGF0IHdlIGhhdmUgdGhlIHBlcmNwdSBhcmVhLgorCSAqLworCWlmICghY3B1X29ubGluZShjcHUpKQorCQlnb3RvIG91dDsKKworCXJxID0gY3B1X3JxKGNwdSk7CisKKwlmb3IgKDs7KSB7CisJCS8qCisJCSAqIE93bmVyIGNoYW5nZWQsIGJyZWFrIHRvIHJlLWFzc2VzcyBzdGF0ZS4KKwkJICovCisJCWlmIChsb2NrLT5vd25lciAhPSBvd25lcikKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIElzIHRoYXQgb3duZXIgcmVhbGx5IHJ1bm5pbmcgb24gdGhhdCBjcHU/CisJCSAqLworCQlpZiAodGFza190aHJlYWRfaW5mbyhycS0+Y3VycikgIT0gb3duZXIgfHwgbmVlZF9yZXNjaGVkKCkpCisJCQlyZXR1cm4gMDsKKworCQljcHVfcmVsYXgoKTsKKwl9CitvdXQ6CisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19QUkVFTVBUCiAvKgogICogdGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgdG8gc2NoZWR1bGUoKSBmcm9tIGluLWtlcm5lbCBwcmVlbXB0aW9uCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfY3B1cHJpLmggYi9rZXJuZWwvc2NoZWRfY3B1cHJpLmgKaW5kZXggNjQyYTk0ZS4uOWE3ZTg1OSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2NwdXByaS5oCisrKyBiL2tlcm5lbC9zY2hlZF9jcHVwcmkuaApAQCAtMjUsNyArMjUsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogaW50ICBjcHVwcmlfZmluZChzdHJ1Y3QgY3B1cHJpICpjcCwKLQkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY3B1bWFza190ICpsb3dlc3RfbWFzayk7CisJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBjcHVtYXNrICpsb3dlc3RfbWFzayk7CiB2b2lkIGNwdXByaV9zZXQoc3RydWN0IGNwdXByaSAqY3AsIGludCBjcHUsIGludCBwcmkpOwogaW50IGNwdXByaV9pbml0KHN0cnVjdCBjcHVwcmkgKmNwLCBib29sIGJvb3RtZW0pOwogdm9pZCBjcHVwcmlfY2xlYW51cChzdHJ1Y3QgY3B1cHJpICpjcCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaCBiL2tlcm5lbC9zY2hlZF9mZWF0dXJlcy5oCmluZGV4IDc2ZjYxNzUuLjQ1NjliZmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mZWF0dXJlcy5oCisrKyBiL2tlcm5lbC9zY2hlZF9mZWF0dXJlcy5oCkBAIC0xNCwzICsxNCw0IEBACiBTQ0hFRF9GRUFUKEFTWU1fRUZGX0xPQUQsIDEpCiBTQ0hFRF9GRUFUKFdBS0VVUF9PVkVSTEFQLCAwKQogU0NIRURfRkVBVChMQVNUX0JVRERZLCAxKQorU0NIRURfRkVBVChPV05FUl9TUElOLCAxKQpkaWZmIC0tZ2l0IGEva2VybmVsL3N0b3BfbWFjaGluZS5jIGIva2VybmVsL3N0b3BfbWFjaGluZS5jCmluZGV4IDc0NTQxY2EuLjkxMjgyM2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zdG9wX21hY2hpbmUuYworKysgYi9rZXJuZWwvc3RvcF9tYWNoaW5lLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIHN0YXRpYyBpbnQgcmVmY291bnQ7CiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnN0b3BfbWFjaGluZV93cTsKIHN0YXRpYyBzdHJ1Y3Qgc3RvcF9tYWNoaW5lX2RhdGEgYWN0aXZlLCBpZGxlOwotc3RhdGljIGNvbnN0IGNwdW1hc2tfdCAqYWN0aXZlX2NwdXM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFjdGl2ZV9jcHVzOwogc3RhdGljIHZvaWQgKnN0b3BfbWFjaGluZV93b3JrOwogCiBzdGF0aWMgdm9pZCBzZXRfc3RhdGUoZW51bSBzdG9wbWFjaGluZV9zdGF0ZSBuZXdzdGF0ZSkKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lci5jIGIva2VybmVsL3RpbWVyLmMKaW5kZXggOWI3N2ZjOS4uYjQ1NTU1NiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWVyLmMKKysrIGIva2VybmVsL3RpbWVyLmMKQEAgLTQ5MSwxNCArNDkxLDE4IEBACiAJZGVidWdfb2JqZWN0X2ZyZWUodGltZXIsICZ0aW1lcl9kZWJ1Z19kZXNjcik7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpOworc3RhdGljIHZvaWQgX19pbml0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKKwkJCSBjb25zdCBjaGFyICpuYW1lLAorCQkJIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKIAotdm9pZCBpbml0X3RpbWVyX29uX3N0YWNrKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKK3ZvaWQgaW5pdF90aW1lcl9vbl9zdGFja19rZXkoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLAorCQkJICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSkKIHsKIAlkZWJ1Z19vYmplY3RfaW5pdF9vbl9zdGFjayh0aW1lciwgJnRpbWVyX2RlYnVnX2Rlc2NyKTsKLQlfX2luaXRfdGltZXIodGltZXIpOworCV9faW5pdF90aW1lcih0aW1lciwgbmFtZSwga2V5KTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGluaXRfdGltZXJfb25fc3RhY2spOworRVhQT1JUX1NZTUJPTF9HUEwoaW5pdF90aW1lcl9vbl9zdGFja19rZXkpOwogCiB2b2lkIGRlc3Ryb3lfdGltZXJfb25fc3RhY2soc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQogewpAQCAtNTEyLDcgKzUxNiw5IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfdGltZXJfZGVhY3RpdmF0ZShzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpIHsgfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIF9faW5pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCitzdGF0aWMgdm9pZCBfX2luaXRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLAorCQkJIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpCiB7CiAJdGltZXItPmVudHJ5Lm5leHQgPSBOVUxMOwogCXRpbWVyLT5iYXNlID0gX19yYXdfZ2V0X2NwdV92YXIodHZlY19iYXNlcyk7CkBAIC01MjEsNiArNTI3LDcgQEAKIAl0aW1lci0+c3RhcnRfcGlkID0gLTE7CiAJbWVtc2V0KHRpbWVyLT5zdGFydF9jb21tLCAwLCBUQVNLX0NPTU1fTEVOKTsKICNlbmRpZgorCWxvY2tkZXBfaW5pdF9tYXAoJnRpbWVyLT5sb2NrZGVwX21hcCwgbmFtZSwga2V5LCAwKTsKIH0KIAogLyoqCkBAIC01MzAsMTkgKzUzNywyMyBAQAogICogaW5pdF90aW1lcigpIG11c3QgYmUgZG9uZSB0byBhIHRpbWVyIHByaW9yIGNhbGxpbmcgKmFueSogb2YgdGhlCiAgKiBvdGhlciB0aW1lciBmdW5jdGlvbnMuCiAgKi8KLXZvaWQgaW5pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCit2b2lkIGluaXRfdGltZXJfa2V5KHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKKwkJICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSkKIHsKIAlkZWJ1Z190aW1lcl9pbml0KHRpbWVyKTsKLQlfX2luaXRfdGltZXIodGltZXIpOworCV9faW5pdF90aW1lcih0aW1lciwgbmFtZSwga2V5KTsKIH0KLUVYUE9SVF9TWU1CT0woaW5pdF90aW1lcik7CitFWFBPUlRfU1lNQk9MKGluaXRfdGltZXJfa2V5KTsKIAotdm9pZCBpbml0X3RpbWVyX2RlZmVycmFibGUoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQordm9pZCBpbml0X3RpbWVyX2RlZmVycmFibGVfa2V5KHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKKwkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KQogewotCWluaXRfdGltZXIodGltZXIpOworCWluaXRfdGltZXJfa2V5KHRpbWVyLCBuYW1lLCBrZXkpOwogCXRpbWVyX3NldF9kZWZlcnJhYmxlKHRpbWVyKTsKIH0KLUVYUE9SVF9TWU1CT0woaW5pdF90aW1lcl9kZWZlcnJhYmxlKTsKK0VYUE9SVF9TWU1CT0woaW5pdF90aW1lcl9kZWZlcnJhYmxlX2tleSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXRhY2hfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLAogCQkJCWludCBjbGVhcl9wZW5kaW5nKQpAQCAtODI2LDYgKzgzNywxNSBAQAogICovCiBpbnQgZGVsX3RpbWVyX3N5bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQogeworI2lmZGVmIENPTkZJR19MT0NLREVQCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlsb2NrX21hcF9hY3F1aXJlKCZ0aW1lci0+bG9ja2RlcF9tYXApOworCWxvY2tfbWFwX3JlbGVhc2UoJnRpbWVyLT5sb2NrZGVwX21hcCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworI2VuZGlmCisKIAlmb3IgKDs7KSB7CiAJCWludCByZXQgPSB0cnlfdG9fZGVsX3RpbWVyX3N5bmModGltZXIpOwogCQlpZiAocmV0ID49IDApCkBAIC04OTcsMTAgKzkxNywzNiBAQAogCiAJCQlzZXRfcnVubmluZ190aW1lcihiYXNlLCB0aW1lcik7CiAJCQlkZXRhY2hfdGltZXIodGltZXIsIDEpOworCiAJCQlzcGluX3VubG9ja19pcnEoJmJhc2UtPmxvY2spOwogCQkJewogCQkJCWludCBwcmVlbXB0X2NvdW50ID0gcHJlZW1wdF9jb3VudCgpOworCisjaWZkZWYgQ09ORklHX0xPQ0tERVAKKwkJCQkvKgorCQkJCSAqIEl0IGlzIHBlcm1pc3NpYmxlIHRvIGZyZWUgdGhlIHRpbWVyIGZyb20KKwkJCQkgKiBpbnNpZGUgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGZyb20KKwkJCQkgKiBpdCwgdGhpcyB3ZSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IGZvcgorCQkJCSAqIGxvY2tkZXAgdG9vLiBUbyBhdm9pZCBib2d1cyAiaGVsZCBsb2NrCisJCQkJICogZnJlZWQiIHdhcm5pbmdzIGFzIHdlbGwgYXMgcHJvYmxlbXMgd2hlbgorCQkJCSAqIGxvb2tpbmcgaW50byB0aW1lci0+bG9ja2RlcF9tYXAsIG1ha2UgYQorCQkJCSAqIGNvcHkgYW5kIHVzZSB0aGF0IGhlcmUuCisJCQkJICovCisJCQkJc3RydWN0IGxvY2tkZXBfbWFwIGxvY2tkZXBfbWFwID0KKwkJCQkJdGltZXItPmxvY2tkZXBfbWFwOworI2VuZGlmCisJCQkJLyoKKwkJCQkgKiBDb3VwbGUgdGhlIGxvY2sgY2hhaW4gd2l0aCB0aGUgbG9jayBjaGFpbiBhdAorCQkJCSAqIGRlbF90aW1lcl9zeW5jKCkgYnkgYWNxdWlyaW5nIHRoZSBsb2NrX21hcAorCQkJCSAqIGFyb3VuZCB0aGUgZm4oKSBjYWxsIGhlcmUgYW5kIGluCisJCQkJICogZGVsX3RpbWVyX3N5bmMoKS4KKwkJCQkgKi8KKwkJCQlsb2NrX21hcF9hY3F1aXJlKCZsb2NrZGVwX21hcCk7CisKIAkJCQlmbihkYXRhKTsKKworCQkJCWxvY2tfbWFwX3JlbGVhc2UoJmxvY2tkZXBfbWFwKTsKKwogCQkJCWlmIChwcmVlbXB0X2NvdW50ICE9IHByZWVtcHRfY291bnQoKSkgewogCQkJCQlwcmludGsoS0VSTl9FUlIgImh1aCwgZW50ZXJlZCAlcCAiCiAJCQkJCSAgICAgICAid2l0aCBwcmVlbXB0X2NvdW50ICUwOHgsIGV4aXRlZCIKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYyBiL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYwppbmRleCA5MzBjMDhlLi5kY2U3MWE1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCkBAIC00Miw2ICs0Miw4MSBAQAogLyogcGlkIG9uIHRoZSBsYXN0IHRyYWNlIHByb2Nlc3NlZCAqLwogc3RhdGljIHBpZF90IGxhc3RfcGlkW05SX0NQVVNdID0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IC0xIH07CiAKKy8qIEFkZCBhIGZ1bmN0aW9uIHJldHVybiBhZGRyZXNzIHRvIHRoZSB0cmFjZSBzdGFjayBvbiB0aHJlYWQgaW5mby4qLworaW50CitmdHJhY2VfcHVzaF9yZXR1cm5fdHJhY2UodW5zaWduZWQgbG9uZyByZXQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lLAorCQkJIHVuc2lnbmVkIGxvbmcgZnVuYywgaW50ICpkZXB0aCkKK3sKKwlpbnQgaW5kZXg7CisKKwlpZiAoIWN1cnJlbnQtPnJldF9zdGFjaykKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIFRoZSByZXR1cm4gdHJhY2Ugc3RhY2sgaXMgZnVsbCAqLworCWlmIChjdXJyZW50LT5jdXJyX3JldF9zdGFjayA9PSBGVFJBQ0VfUkVURlVOQ19ERVBUSCAtIDEpIHsKKwkJYXRvbWljX2luYygmY3VycmVudC0+dHJhY2Vfb3ZlcnJ1bik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaW5kZXggPSArK2N1cnJlbnQtPmN1cnJfcmV0X3N0YWNrOworCWJhcnJpZXIoKTsKKwljdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLnJldCA9IHJldDsKKwljdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLmZ1bmMgPSBmdW5jOworCWN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uY2FsbHRpbWUgPSB0aW1lOworCSpkZXB0aCA9IGluZGV4OworCisJcmV0dXJuIDA7Cit9CisKKy8qIFJldHJpZXZlIGEgZnVuY3Rpb24gcmV0dXJuIGFkZHJlc3MgdG8gdGhlIHRyYWNlIHN0YWNrIG9uIHRocmVhZCBpbmZvLiovCit2b2lkCitmdHJhY2VfcG9wX3JldHVybl90cmFjZShzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsIHVuc2lnbmVkIGxvbmcgKnJldCkKK3sKKwlpbnQgaW5kZXg7CisKKwlpbmRleCA9IGN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrOworCisJaWYgKHVubGlrZWx5KGluZGV4IDwgMCkpIHsKKwkJZnRyYWNlX2dyYXBoX3N0b3AoKTsKKwkJV0FSTl9PTigxKTsKKwkJLyogTWlnaHQgYXMgd2VsbCBwYW5pYywgb3RoZXJ3aXNlIHdlIGhhdmUgbm8gd2hlcmUgdG8gZ28gKi8KKwkJKnJldCA9ICh1bnNpZ25lZCBsb25nKXBhbmljOworCQlyZXR1cm47CisJfQorCisJKnJldCA9IGN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0ucmV0OworCXRyYWNlLT5mdW5jID0gY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5mdW5jOworCXRyYWNlLT5jYWxsdGltZSA9IGN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uY2FsbHRpbWU7CisJdHJhY2UtPm92ZXJydW4gPSBhdG9taWNfcmVhZCgmY3VycmVudC0+dHJhY2Vfb3ZlcnJ1bik7CisJdHJhY2UtPmRlcHRoID0gaW5kZXg7CisJYmFycmllcigpOworCWN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrLS07CisKK30KKworLyoKKyAqIFNlbmQgdGhlIHRyYWNlIHRvIHRoZSByaW5nLWJ1ZmZlci4KKyAqIEByZXR1cm4gdGhlIG9yaWdpbmFsIHJldHVybiBhZGRyZXNzLgorICovCit1bnNpZ25lZCBsb25nIGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcih2b2lkKQoreworCXN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0IHRyYWNlOworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJZnRyYWNlX3BvcF9yZXR1cm5fdHJhY2UoJnRyYWNlLCAmcmV0KTsKKwl0cmFjZS5yZXR0aW1lID0gY3B1X2Nsb2NrKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworCWZ0cmFjZV9ncmFwaF9yZXR1cm4oJnRyYWNlKTsKKworCWlmICh1bmxpa2VseSghcmV0KSkgeworCQlmdHJhY2VfZ3JhcGhfc3RvcCgpOworCQlXQVJOX09OKDEpOworCQkvKiBNaWdodCBhcyB3ZWxsIHBhbmljLiBXaGF0IGVsc2UgdG8gZG8/ICovCisJCXJldCA9ICh1bnNpZ25lZCBsb25nKXBhbmljOworCX0KKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgZ3JhcGhfdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCWludCBjcHUsIHJldDsKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCAxZjBjNTA5Li45YWVkZDlmIDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC00MTYsNyArNDE2LDcgQEAKIAltaWdodF9zbGVlcCgpOwogCWxvY2tfbWFwX2FjcXVpcmUoJndxLT5sb2NrZGVwX21hcCk7CiAJbG9ja19tYXBfcmVsZWFzZSgmd3EtPmxvY2tkZXBfbWFwKTsKLQlmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsICpjcHVfbWFwKQorCWZvcl9lYWNoX2NwdShjcHUsIGNwdV9tYXApCiAJCWZsdXNoX2NwdV93b3JrcXVldWUocGVyX2NwdV9wdHIod3EtPmNwdV93cSwgY3B1KSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmbHVzaF93b3JrcXVldWUpOwpAQCAtNTQ3LDcgKzU0Nyw3IEBACiAJd3EgPSBjd3EtPndxOwogCWNwdV9tYXAgPSB3cV9jcHVfbWFwKHdxKTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgKmNwdV9tYXApCisJZm9yX2VhY2hfY3B1KGNwdSwgY3B1X21hcCkKIAkJd2FpdF9vbl9jcHVfd29yayhwZXJfY3B1X3B0cih3cS0+Y3B1X3dxLCBjcHUpLCB3b3JrKTsKIH0KIApAQCAtOTExLDcgKzkxMSw3IEBACiAJbGlzdF9kZWwoJndxLT5saXN0KTsKIAlzcGluX3VubG9jaygmd29ya3F1ZXVlX2xvY2spOwogCi0JZm9yX2VhY2hfY3B1X21hc2tfbnIoY3B1LCAqY3B1X21hcCkKKwlmb3JfZWFjaF9jcHUoY3B1LCBjcHVfbWFwKQogCQljbGVhbnVwX3dvcmtxdWV1ZV90aHJlYWQocGVyX2NwdV9wdHIod3EtPmNwdV93cSwgY3B1KSk7CiAgCWNwdV9tYXBzX3VwZGF0ZV9kb25lKCk7CiAKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggMDYyNmZhNC4uNThiZmU3ZSAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTkxMiw2ICs5MTIsMTcgQEAKIAogCSAgU2VlIERvY3VtZW50YXRpb24vZHluYW1pYy1kZWJ1Zy1ob3d0by50eHQgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCiAKK2NvbmZpZyBETUFfQVBJX0RFQlVHCisJYm9vbCAiRW5hYmxlIGRlYnVnZ2luZyBvZiBETUEtQVBJIHVzYWdlIgorCWRlcGVuZHMgb24gSEFWRV9ETUFfQVBJX0RFQlVHCisJaGVscAorCSAgRW5hYmxlIHRoaXMgb3B0aW9uIHRvIGRlYnVnIHRoZSB1c2Ugb2YgdGhlIERNQSBBUEkgYnkgZGV2aWNlIGRyaXZlcnMuCisJICBXaXRoIHRoaXMgb3B0aW9uIHlvdSB3aWxsIGJlIGFibGUgdG8gZGV0ZWN0IGNvbW1vbiBidWdzIGluIGRldmljZQorCSAgZHJpdmVycyBsaWtlIGRvdWJsZS1mcmVlaW5nIG9mIERNQSBtYXBwaW5ncyBvciBmcmVlaW5nIG1hcHBpbmdzIHRoYXQKKwkgIHdlcmUgbmV2ZXIgYWxsb2NhdGVkLgorCSAgVGhpcyBvcHRpb24gY2F1c2VzIGEgcGVyZm9ybWFuY2UgZGVncmVkYXRpb24uICBVc2Ugb25seSBpZiB5b3Ugd2FudAorCSAgdG8gZGVidWcgZGV2aWNlIGRyaXZlcnMuIElmIHVuc3VyZSwgc2F5IE4uCisKIHNvdXJjZSAic2FtcGxlcy9LY29uZmlnIgogCiBzb3VyY2UgImxpYi9LY29uZmlnLmtnZGIiCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGUKaW5kZXggMDUxYTMzYS4uZDZlZGQ2NyAxMDA2NDQKLS0tIGEvbGliL01ha2VmaWxlCisrKyBiL2xpYi9NYWtlZmlsZQpAQCAtOTAsNiArOTAsOCBAQAogCiBvYmotJChDT05GSUdfTkxBVFRSKSArPSBubGF0dHIubwogCitvYmotJChDT05GSUdfRE1BX0FQSV9ERUJVRykgKz0gZG1hLWRlYnVnLm8KKwogaG9zdHByb2dzLXkJOj0gZ2VuX2NyYzMydGFibGUKIGNsZWFuLWZpbGVzCTo9IGNyYzMydGFibGUuaAogCmRpZmYgLS1naXQgYS9saWIvZG1hLWRlYnVnLmMgYi9saWIvZG1hLWRlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNkYTdlZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9kbWEtZGVidWcuYwpAQCAtMCwwICsxLDk1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogQXV0aG9yOiBKb2VyZyBSb2VkZWwgPGpvZXJnLnJvZWRlbEBhbWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc3RhY2t0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1kZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisKKyNkZWZpbmUgSEFTSF9TSVpFICAgICAgIDEwMjRVTEwKKyNkZWZpbmUgSEFTSF9GTl9TSElGVCAgIDEzCisjZGVmaW5lIEhBU0hfRk5fTUFTSyAgICAoSEFTSF9TSVpFIC0gMSkKKworZW51bSB7CisJZG1hX2RlYnVnX3NpbmdsZSwKKwlkbWFfZGVidWdfcGFnZSwKKwlkbWFfZGVidWdfc2csCisJZG1hX2RlYnVnX2NvaGVyZW50LAorfTsKKworI2RlZmluZSBETUFfREVCVUdfU1RBQ0tUUkFDRV9FTlRSSUVTIDUKKworc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBkZXZpY2UgICAgKmRldjsKKwlpbnQgICAgICAgICAgICAgIHR5cGU7CisJcGh5c19hZGRyX3QgICAgICBwYWRkcjsKKwl1NjQgICAgICAgICAgICAgIGRldl9hZGRyOworCXU2NCAgICAgICAgICAgICAgc2l6ZTsKKwlpbnQgICAgICAgICAgICAgIGRpcmVjdGlvbjsKKwlpbnQJCSBzZ19jYWxsX2VudHM7CisJaW50CQkgc2dfbWFwcGVkX2VudHM7CisjaWZkZWYgQ09ORklHX1NUQUNLVFJBQ0UKKwlzdHJ1Y3QJCSBzdGFja190cmFjZSBzdGFja3RyYWNlOworCXVuc2lnbmVkIGxvbmcJIHN0X2VudHJpZXNbRE1BX0RFQlVHX1NUQUNLVFJBQ0VfRU5UUklFU107CisjZW5kaWYKK307CisKK3N0cnVjdCBoYXNoX2J1Y2tldCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXNwaW5sb2NrX3QgbG9jazsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKKworLyogSGFzaCBsaXN0IHRvIHNhdmUgdGhlIGFsbG9jYXRlZCBkbWEgYWRkcmVzc2VzICovCitzdGF0aWMgc3RydWN0IGhhc2hfYnVja2V0IGRtYV9lbnRyeV9oYXNoW0hBU0hfU0laRV07CisvKiBMaXN0IG9mIHByZS1hbGxvY2F0ZWQgZG1hX2RlYnVnX2VudHJ5J3MgKi8KK3N0YXRpYyBMSVNUX0hFQUQoZnJlZV9lbnRyaWVzKTsKKy8qIExvY2sgZm9yIHRoZSBsaXN0IGFib3ZlICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGZyZWVfZW50cmllc19sb2NrKTsKKworLyogR2xvYmFsIGRpc2FibGUgZmxhZyAtIHdpbGwgYmUgc2V0IGluIGNhc2Ugb2YgYW4gZXJyb3IgKi8KK3N0YXRpYyBib29sIGdsb2JhbF9kaXNhYmxlIF9fcmVhZF9tb3N0bHk7CisKKy8qIEdsb2JhbCBlcnJvciBjb3VudCAqLworc3RhdGljIHUzMiBlcnJvcl9jb3VudDsKKworLyogR2xvYmFsIGVycm9yIHNob3cgZW5hYmxlKi8KK3N0YXRpYyB1MzIgc2hvd19hbGxfZXJyb3JzIF9fcmVhZF9tb3N0bHk7CisvKiBOdW1iZXIgb2YgZXJyb3JzIHRvIHNob3cgKi8KK3N0YXRpYyB1MzIgc2hvd19udW1fZXJyb3JzID0gMTsKKworc3RhdGljIHUzMiBudW1fZnJlZV9lbnRyaWVzOworc3RhdGljIHUzMiBtaW5fZnJlZV9lbnRyaWVzOworCisvKiBudW1iZXIgb2YgcHJlYWxsb2NhdGVkIGVudHJpZXMgcmVxdWVzdGVkIGJ5IGtlcm5lbCBjbWRsaW5lICovCitzdGF0aWMgdTMyIHJlcV9lbnRyaWVzOworCisvKiBkZWJ1Z2ZzIGRlbnRyeSdzIGZvciB0aGUgc3R1ZmYgYWJvdmUgKi8KK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkbWFfZGVidWdfZGVudCAgICAgICAgX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpnbG9iYWxfZGlzYWJsZV9kZW50ICAgX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICplcnJvcl9jb3VudF9kZW50ICAgICAgX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpzaG93X2FsbF9lcnJvcnNfZGVudCAgX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpzaG93X251bV9lcnJvcnNfZGVudCAgX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpudW1fZnJlZV9lbnRyaWVzX2RlbnQgX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptaW5fZnJlZV9lbnRyaWVzX2RlbnQgX19yZWFkX21vc3RseTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnR5cGUybmFtZVs0XSA9IHsgInNpbmdsZSIsICJwYWdlIiwKKwkJCQkgICAgInNjYXRoZXItZ2F0aGVyIiwgImNvaGVyZW50IiB9OworCitzdGF0aWMgY29uc3QgY2hhciAqZGlyMm5hbWVbNF0gPSB7ICJETUFfQklESVJFQ1RJT05BTCIsICJETUFfVE9fREVWSUNFIiwKKwkJCQkgICAiRE1BX0ZST01fREVWSUNFIiwgIkRNQV9OT05FIiB9OworCisvKgorICogVGhlIGFjY2VzcyB0byBzb21lIHZhcmlhYmxlcyBpbiB0aGlzIG1hY3JvIGlzIHJhY3kuIFdlIGNhbid0IHVzZSBhdG9taWNfdAorICogaGVyZSBiZWNhdXNlIGFsbCB0aGVzZSB2YXJpYWJsZXMgYXJlIGV4cG9ydGVkIHRvIGRlYnVnZnMuIFNvbWUgb2YgdGhlbSBldmVuCisgKiB3cml0ZWFibGUuIFRoaXMgaXMgYWxzbyB0aGUgcmVhc29uIHdoeSBhIGxvY2sgd29uJ3QgaGVscCBtdWNoLiBCdXQgYW55d2F5LAorICogdGhlIHJhY2VzIGFyZSBubyBiaWcgZGVhbC4gSGVyZSBpcyB3aHk6CisgKgorICogICBlcnJvcl9jb3VudDogdGhlIGFkZGl0aW9uIGlzIHJhY3ksIGJ1dCB0aGUgd29yc3QgdGhpbmcgdGhhdCBjYW4gaGFwcGVuIGlzCisgKiAgICAgICAgICAgICAgICB0aGF0IHdlIGRvbid0IGNvdW50IHNvbWUgZXJyb3JzCisgKiAgIHNob3dfbnVtX2Vycm9yczogdGhlIHN1YnRyYWN0aW9uIGlzIHJhY3kuIEFsc28gbm8gYmlnIGRlYWwgYmVjYXVzZSBpbgorICogICAgICAgICAgICAgICAgICAgIHdvcnN0IGNhc2UgdGhpcyB3aWxsIHJlc3VsdCBpbiBvbmUgd2FybmluZyBtb3JlIGluIHRoZQorICogICAgICAgICAgICAgICAgICAgIHN5c3RlbSBsb2cgdGhhbiB0aGUgdXNlciBjb25maWd1cmVkLiBUaGlzIHZhcmlhYmxlIGlzCisgKiAgICAgICAgICAgICAgICAgICAgd3JpdGVhYmxlIHZpYSBkZWJ1Z2ZzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9lbnRyeV90cmFjZShzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICplbnRyeSkKK3sKKyNpZmRlZiBDT05GSUdfU1RBQ0tUUkFDRQorCWlmIChlbnRyeSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJNYXBwZWQgYXQ6XG4iKTsKKwkJcHJpbnRfc3RhY2tfdHJhY2UoJmVudHJ5LT5zdGFja3RyYWNlLCAwKTsKKwl9CisjZW5kaWYKK30KKworI2RlZmluZSBlcnJfcHJpbnRrKGRldiwgZW50cnksIGZvcm1hdCwgYXJnLi4uKSBkbyB7CQlcCisJCWVycm9yX2NvdW50ICs9IDE7CQkJCVwKKwkJaWYgKHNob3dfYWxsX2Vycm9ycyB8fCBzaG93X251bV9lcnJvcnMgPiAwKSB7CVwKKwkJCVdBUk4oMSwgIiVzICVzOiAiIGZvcm1hdCwJCVwKKwkJCSAgICAgZGV2X2RyaXZlcl9zdHJpbmcoZGV2KSwJCVwKKwkJCSAgICAgZGV2X25hbWUoZGV2KSAsICMjIGFyZyk7CQlcCisJCQlkdW1wX2VudHJ5X3RyYWNlKGVudHJ5KTsJCVwKKwkJfQkJCQkJCVwKKwkJaWYgKCFzaG93X2FsbF9lcnJvcnMgJiYgc2hvd19udW1fZXJyb3JzID4gMCkJXAorCQkJc2hvd19udW1fZXJyb3JzIC09IDE7CQkJXAorCX0gd2hpbGUgKDApOworCisvKgorICogSGFzaCByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqIEV2ZXJ5IERNQS1BUEkgcmVxdWVzdCBpcyBzYXZlZCBpbnRvIGEgc3RydWN0IGRtYV9kZWJ1Z19lbnRyeS4gVG8KKyAqIGhhdmUgcXVpY2sgYWNjZXNzIHRvIHRoZXNlIHN0cnVjdHMgdGhleSBhcmUgc3RvcmVkIGludG8gYSBoYXNoLgorICovCitzdGF0aWMgaW50IGhhc2hfZm4oc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnkpCit7CisJLyoKKwkgKiBIYXNoIGZ1bmN0aW9uIGlzIGJhc2VkIG9uIHRoZSBkbWEgYWRkcmVzcy4KKwkgKiBXZSB1c2UgYml0cyAyMC0yNyBoZXJlIGFzIHRoZSBpbmRleCBpbnRvIHRoZSBoYXNoCisJICovCisJcmV0dXJuIChlbnRyeS0+ZGV2X2FkZHIgPj4gSEFTSF9GTl9TSElGVCkgJiBIQVNIX0ZOX01BU0s7Cit9CisKKy8qCisgKiBSZXF1ZXN0IGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gYSBoYXNoIGJ1Y2tldCBmb3IgYSBnaXZlbiBkbWFfZGVidWdfZW50cnkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGFzaF9idWNrZXQgKmdldF9oYXNoX2J1Y2tldChzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICplbnRyeSwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCit7CisJaW50IGlkeCA9IGhhc2hfZm4oZW50cnkpOworCXVuc2lnbmVkIGxvbmcgX19mbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfZW50cnlfaGFzaFtpZHhdLmxvY2ssIF9fZmxhZ3MpOworCSpmbGFncyA9IF9fZmxhZ3M7CisJcmV0dXJuICZkbWFfZW50cnlfaGFzaFtpZHhdOworfQorCisvKgorICogR2l2ZSB1cCBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBoYXNoIGJ1Y2tldAorICovCitzdGF0aWMgdm9pZCBwdXRfaGFzaF9idWNrZXQoc3RydWN0IGhhc2hfYnVja2V0ICpidWNrZXQsCisJCQkgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCit7CisJdW5zaWduZWQgbG9uZyBfX2ZsYWdzID0gKmZsYWdzOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVja2V0LT5sb2NrLCBfX2ZsYWdzKTsKK30KKworLyoKKyAqIFNlYXJjaCBhIGdpdmVuIGVudHJ5IGluIHRoZSBoYXNoIGJ1Y2tldCBsaXN0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICpoYXNoX2J1Y2tldF9maW5kKHN0cnVjdCBoYXNoX2J1Y2tldCAqYnVja2V0LAorCQkJCQkJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqcmVmKQoreworCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmJ1Y2tldC0+bGlzdCwgbGlzdCkgeworCQlpZiAoKGVudHJ5LT5kZXZfYWRkciA9PSByZWYtPmRldl9hZGRyKSAmJgorCQkgICAgKGVudHJ5LT5kZXYgPT0gcmVmLT5kZXYpKQorCQkJcmV0dXJuIGVudHJ5OworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogQWRkIGFuIGVudHJ5IHRvIGEgaGFzaCBidWNrZXQKKyAqLworc3RhdGljIHZvaWQgaGFzaF9idWNrZXRfYWRkKHN0cnVjdCBoYXNoX2J1Y2tldCAqYnVja2V0LAorCQkJICAgIHN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5KQoreworCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5saXN0LCAmYnVja2V0LT5saXN0KTsKK30KKworLyoKKyAqIFJlbW92ZSBlbnRyeSBmcm9tIGEgaGFzaCBidWNrZXQgbGlzdAorICovCitzdGF0aWMgdm9pZCBoYXNoX2J1Y2tldF9kZWwoc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnkpCit7CisJbGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKK30KKworLyoKKyAqIER1bXAgbWFwcGluZyBlbnRyaWVzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKKyAqLwordm9pZCBkZWJ1Z19kbWFfZHVtcF9tYXBwaW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGlkeDsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgSEFTSF9TSVpFOyBpZHgrKykgeworCQlzdHJ1Y3QgaGFzaF9idWNrZXQgKmJ1Y2tldCA9ICZkbWFfZW50cnlfaGFzaFtpZHhdOworCQlzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICplbnRyeTsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYnVja2V0LT5sb2NrLCBmbGFncyk7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmJ1Y2tldC0+bGlzdCwgbGlzdCkgeworCQkJaWYgKCFkZXYgfHwgZGV2ID09IGVudHJ5LT5kZXYpIHsKKwkJCQlkZXZfaW5mbyhlbnRyeS0+ZGV2LAorCQkJCQkgIiVzIGlkeCAlZCBQPSVMeCBEPSVMeCBMPSVMeCAlc1xuIiwKKwkJCQkJIHR5cGUybmFtZVtlbnRyeS0+dHlwZV0sIGlkeCwKKwkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpZW50cnktPnBhZGRyLAorCQkJCQkgZW50cnktPmRldl9hZGRyLCBlbnRyeS0+c2l6ZSwKKwkJCQkJIGRpcjJuYW1lW2VudHJ5LT5kaXJlY3Rpb25dKTsKKwkJCX0KKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1Y2tldC0+bG9jaywgZmxhZ3MpOworCX0KK30KK0VYUE9SVF9TWU1CT0woZGVidWdfZG1hX2R1bXBfbWFwcGluZ3MpOworCisvKgorICogV3JhcHBlciBmdW5jdGlvbiBmb3IgYWRkaW5nIGFuIGVudHJ5IHRvIHRoZSBoYXNoLgorICogVGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIGxvY2tpbmcgaXRzZWxmLgorICovCitzdGF0aWMgdm9pZCBhZGRfZG1hX2VudHJ5KHN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBoYXNoX2J1Y2tldCAqYnVja2V0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlidWNrZXQgPSBnZXRfaGFzaF9idWNrZXQoZW50cnksICZmbGFncyk7CisJaGFzaF9idWNrZXRfYWRkKGJ1Y2tldCwgZW50cnkpOworCXB1dF9oYXNoX2J1Y2tldChidWNrZXQsICZmbGFncyk7Cit9CisKKy8qIHN0cnVjdCBkbWFfZW50cnkgYWxsb2NhdG9yCisgKgorICogVGhlIG5leHQgdHdvIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIGFsbG9jYXRvciBmb3IKKyAqIHN0cnVjdCBkbWFfZGVidWdfZW50cmllcy4KKyAqLworc3RhdGljIHN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmRtYV9lbnRyeV9hbGxvYyh2b2lkKQoreworCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZyZWVfZW50cmllc19sb2NrLCBmbGFncyk7CisKKwlpZiAobGlzdF9lbXB0eSgmZnJlZV9lbnRyaWVzKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkRNQS1BUEk6IGRlYnVnZ2luZyBvdXQgb2YgbWVtb3J5ICIKKwkJCQkiLSBkaXNhYmxpbmdcbiIpOworCQlnbG9iYWxfZGlzYWJsZSA9IHRydWU7CisJCWdvdG8gb3V0OworCX0KKworCWVudHJ5ID0gbGlzdF9lbnRyeShmcmVlX2VudHJpZXMubmV4dCwgc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSwgbGlzdCk7CisJbGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKKwltZW1zZXQoZW50cnksIDAsIHNpemVvZigqZW50cnkpKTsKKworI2lmZGVmIENPTkZJR19TVEFDS1RSQUNFCisJZW50cnktPnN0YWNrdHJhY2UubWF4X2VudHJpZXMgPSBETUFfREVCVUdfU1RBQ0tUUkFDRV9FTlRSSUVTOworCWVudHJ5LT5zdGFja3RyYWNlLmVudHJpZXMgPSBlbnRyeS0+c3RfZW50cmllczsKKwllbnRyeS0+c3RhY2t0cmFjZS5za2lwID0gMjsKKwlzYXZlX3N0YWNrX3RyYWNlKCZlbnRyeS0+c3RhY2t0cmFjZSk7CisjZW5kaWYKKwludW1fZnJlZV9lbnRyaWVzIC09IDE7CisJaWYgKG51bV9mcmVlX2VudHJpZXMgPCBtaW5fZnJlZV9lbnRyaWVzKQorCQltaW5fZnJlZV9lbnRyaWVzID0gbnVtX2ZyZWVfZW50cmllczsKKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZyZWVfZW50cmllc19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gZW50cnk7Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9lbnRyeV9mcmVlKHN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIGFkZCB0byBiZWdpbm5pbmcgb2YgdGhlIGxpc3QgLSB0aGlzIHdheSB0aGUgZW50cmllcyBhcmUKKwkgKiBtb3JlIGxpa2VseSBjYWNoZSBob3Qgd2hlbiB0aGV5IGFyZSByZWFsbG9jYXRlZC4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnJlZV9lbnRyaWVzX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmZW50cnktPmxpc3QsICZmcmVlX2VudHJpZXMpOworCW51bV9mcmVlX2VudHJpZXMgKz0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmcmVlX2VudHJpZXNfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogRE1BLUFQSSBkZWJ1Z2dpbmcgaW5pdCBjb2RlCisgKgorICogVGhlIGluaXQgY29kZSBkb2VzIHR3byB0aGluZ3M6CisgKiAgIDEuIEluaXRpYWxpemUgY29yZSBkYXRhIHN0cnVjdHVyZXMKKyAqICAgMi4gUHJlYWxsb2NhdGUgYSBnaXZlbiBudW1iZXIgb2YgZG1hX2RlYnVnX2VudHJ5IHN0cnVjdHMKKyAqLworCitzdGF0aWMgaW50IHByZWFsbG9jX21lbW9yeSh1MzIgbnVtX2VudHJpZXMpCit7CisJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnksICpuZXh0X2VudHJ5OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9lbnRyaWVzOyArK2kpIHsKKwkJZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFlbnRyeSkKKwkJCWdvdG8gb3V0X2VycjsKKworCQlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgJmZyZWVfZW50cmllcyk7CisJfQorCisJbnVtX2ZyZWVfZW50cmllcyA9IG51bV9lbnRyaWVzOworCW1pbl9mcmVlX2VudHJpZXMgPSBudW1fZW50cmllczsKKworCXByaW50ayhLRVJOX0lORk8gIkRNQS1BUEk6IHByZWFsbG9jYXRlZCAlZCBkZWJ1ZyBlbnRyaWVzXG4iLAorCQkJbnVtX2VudHJpZXMpOworCisJcmV0dXJuIDA7CisKK291dF9lcnI6CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHRfZW50cnksICZmcmVlX2VudHJpZXMsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKKwkJa2ZyZWUoZW50cnkpOworCX0KKworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgaW50IGRtYV9kZWJ1Z19mc19pbml0KHZvaWQpCit7CisJZG1hX2RlYnVnX2RlbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImRtYS1hcGkiLCBOVUxMKTsKKwlpZiAoIWRtYV9kZWJ1Z19kZW50KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRE1BLUFQSTogY2FuIG5vdCBjcmVhdGUgZGVidWdmcyBkaXJlY3RvcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlnbG9iYWxfZGlzYWJsZV9kZW50ID0gZGVidWdmc19jcmVhdGVfYm9vbCgiZGlzYWJsZWQiLCAwNDQ0LAorCQkJZG1hX2RlYnVnX2RlbnQsCisJCQkodTMyICopJmdsb2JhbF9kaXNhYmxlKTsKKwlpZiAoIWdsb2JhbF9kaXNhYmxlX2RlbnQpCisJCWdvdG8gb3V0X2VycjsKKworCWVycm9yX2NvdW50X2RlbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV91MzIoImVycm9yX2NvdW50IiwgMDQ0NCwKKwkJCWRtYV9kZWJ1Z19kZW50LCAmZXJyb3JfY291bnQpOworCWlmICghZXJyb3JfY291bnRfZGVudCkKKwkJZ290byBvdXRfZXJyOworCisJc2hvd19hbGxfZXJyb3JzX2RlbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV91MzIoImFsbF9lcnJvcnMiLCAwNjQ0LAorCQkJZG1hX2RlYnVnX2RlbnQsCisJCQkmc2hvd19hbGxfZXJyb3JzKTsKKwlpZiAoIXNob3dfYWxsX2Vycm9yc19kZW50KQorCQlnb3RvIG91dF9lcnI7CisKKwlzaG93X251bV9lcnJvcnNfZGVudCA9IGRlYnVnZnNfY3JlYXRlX3UzMigibnVtX2Vycm9ycyIsIDA2NDQsCisJCQlkbWFfZGVidWdfZGVudCwKKwkJCSZzaG93X251bV9lcnJvcnMpOworCWlmICghc2hvd19udW1fZXJyb3JzX2RlbnQpCisJCWdvdG8gb3V0X2VycjsKKworCW51bV9mcmVlX2VudHJpZXNfZGVudCA9IGRlYnVnZnNfY3JlYXRlX3UzMigibnVtX2ZyZWVfZW50cmllcyIsIDA0NDQsCisJCQlkbWFfZGVidWdfZGVudCwKKwkJCSZudW1fZnJlZV9lbnRyaWVzKTsKKwlpZiAoIW51bV9mcmVlX2VudHJpZXNfZGVudCkKKwkJZ290byBvdXRfZXJyOworCisJbWluX2ZyZWVfZW50cmllc19kZW50ID0gZGVidWdmc19jcmVhdGVfdTMyKCJtaW5fZnJlZV9lbnRyaWVzIiwgMDQ0NCwKKwkJCWRtYV9kZWJ1Z19kZW50LAorCQkJJm1pbl9mcmVlX2VudHJpZXMpOworCWlmICghbWluX2ZyZWVfZW50cmllc19kZW50KQorCQlnb3RvIG91dF9lcnI7CisKKwlyZXR1cm4gMDsKKworb3V0X2VycjoKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZG1hX2RlYnVnX2RlbnQpOworCisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgZGV2aWNlX2RtYV9hbGxvY2F0aW9ucyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY291bnQgPSAwLCBpOworCisJZm9yIChpID0gMDsgaSA8IEhBU0hfU0laRTsgKytpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfZW50cnlfaGFzaFtpXS5sb2NrLCBmbGFncyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkbWFfZW50cnlfaGFzaFtpXS5saXN0LCBsaXN0KSB7CisJCQlpZiAoZW50cnktPmRldiA9PSBkZXYpCisJCQkJY291bnQgKz0gMTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfZW50cnlfaGFzaFtpXS5sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IGRtYV9kZWJ1Z19kZXZpY2VfY2hhbmdlKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7CisJaW50IGNvdW50OworCisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQlVTX05PVElGWV9VTkJJTkRfRFJJVkVSOgorCQljb3VudCA9IGRldmljZV9kbWFfYWxsb2NhdGlvbnMoZGV2KTsKKwkJaWYgKGNvdW50ID09IDApCisJCQlicmVhazsKKwkJZXJyX3ByaW50ayhkZXYsIE5VTEwsICJETUEtQVBJOiBkZXZpY2UgZHJpdmVyIGhhcyBwZW5kaW5nICIKKwkJCQkiRE1BIGFsbG9jYXRpb25zIHdoaWxlIHJlbGVhc2VkIGZyb20gZGV2aWNlICIKKwkJCQkiW2NvdW50PSVkXVxuIiwgY291bnQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkbWFfZGVidWdfYWRkX2J1cyhzdHJ1Y3QgYnVzX3R5cGUgKmJ1cykKK3sKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iOworCisJbmIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2spLCBHRlBfS0VSTkVMKTsKKwlpZiAobmIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImRtYV9kZWJ1Z19hZGRfYnVzOiBvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuOworCX0KKworCW5iLT5ub3RpZmllcl9jYWxsID0gZG1hX2RlYnVnX2RldmljZV9jaGFuZ2U7CisKKwlidXNfcmVnaXN0ZXJfbm90aWZpZXIoYnVzLCBuYik7Cit9CisKKy8qCisgKiBMZXQgdGhlIGFyY2hpdGVjdHVyZXMgZGVjaWRlIGhvdyBtYW55IGVudHJpZXMgc2hvdWxkIGJlIHByZWFsbG9jYXRlZC4KKyAqLwordm9pZCBkbWFfZGVidWdfaW5pdCh1MzIgbnVtX2VudHJpZXMpCit7CisJaW50IGk7CisKKwlpZiAoZ2xvYmFsX2Rpc2FibGUpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBIQVNIX1NJWkU7ICsraSkgeworCQlJTklUX0xJU1RfSEVBRCgmZG1hX2VudHJ5X2hhc2hbaV0ubGlzdCk7CisJCWRtYV9lbnRyeV9oYXNoW2ldLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisJfQorCisJaWYgKGRtYV9kZWJ1Z19mc19pbml0KCkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkRNQS1BUEk6IGVycm9yIGNyZWF0aW5nIGRlYnVnZnMgZW50cmllcyAiCisJCQkJIi0gZGlzYWJsaW5nXG4iKTsKKwkJZ2xvYmFsX2Rpc2FibGUgPSB0cnVlOworCisJCXJldHVybjsKKwl9CisKKwlpZiAocmVxX2VudHJpZXMpCisJCW51bV9lbnRyaWVzID0gcmVxX2VudHJpZXM7CisKKwlpZiAocHJlYWxsb2NfbWVtb3J5KG51bV9lbnRyaWVzKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRE1BLUFQSTogZGVidWdnaW5nIG91dCBvZiBtZW1vcnkgZXJyb3IgIgorCQkJCSItIGRpc2FibGVkXG4iKTsKKwkJZ2xvYmFsX2Rpc2FibGUgPSB0cnVlOworCisJCXJldHVybjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJETUEtQVBJOiBkZWJ1Z2dpbmcgZW5hYmxlZCBieSBrZXJuZWwgY29uZmlnXG4iKTsKK30KKworc3RhdGljIF9faW5pdCBpbnQgZG1hX2RlYnVnX2NtZGxpbmUoY2hhciAqc3RyKQoreworCWlmICghc3RyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzdHJuY21wKHN0ciwgIm9mZiIsIDMpID09IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRE1BLUFQSTogZGVidWdnaW5nIGRpc2FibGVkIG9uIGtlcm5lbCAiCisJCQkJICJjb21tYW5kIGxpbmVcbiIpOworCQlnbG9iYWxfZGlzYWJsZSA9IHRydWU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IGRtYV9kZWJ1Z19lbnRyaWVzX2NtZGxpbmUoY2hhciAqc3RyKQoreworCWludCByZXM7CisKKwlpZiAoIXN0cikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXMgPSBnZXRfb3B0aW9uKCZzdHIsICZyZXFfZW50cmllcyk7CisKKwlpZiAoIXJlcykKKwkJcmVxX2VudHJpZXMgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK19fc2V0dXAoImRtYV9kZWJ1Zz0iLCBkbWFfZGVidWdfY21kbGluZSk7CitfX3NldHVwKCJkbWFfZGVidWdfZW50cmllcz0iLCBkbWFfZGVidWdfZW50cmllc19jbWRsaW5lKTsKKworc3RhdGljIHZvaWQgY2hlY2tfdW5tYXAoc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqcmVmKQoreworCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5OworCXN0cnVjdCBoYXNoX2J1Y2tldCAqYnVja2V0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IocmVmLT5kZXYsIHJlZi0+ZGV2X2FkZHIpKSB7CisJCWVycl9wcmludGsocmVmLT5kZXYsIE5VTEwsICJETUEtQVBJOiBkZXZpY2UgZHJpdmVyIHRyaWVzICIKKwkJCSAgICJ0byBmcmVlIGFuIGludmFsaWQgRE1BIG1lbW9yeSBhZGRyZXNzXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWJ1Y2tldCA9IGdldF9oYXNoX2J1Y2tldChyZWYsICZmbGFncyk7CisJZW50cnkgPSBoYXNoX2J1Y2tldF9maW5kKGJ1Y2tldCwgcmVmKTsKKworCWlmICghZW50cnkpIHsKKwkJZXJyX3ByaW50ayhyZWYtPmRldiwgTlVMTCwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgdHJpZXMgIgorCQkJICAgInRvIGZyZWUgRE1BIG1lbW9yeSBpdCBoYXMgbm90IGFsbG9jYXRlZCAiCisJCQkgICAiW2RldmljZSBhZGRyZXNzPTB4JTAxNmxseF0gW3NpemU9JWxsdSBieXRlc11cbiIsCisJCQkgICByZWYtPmRldl9hZGRyLCByZWYtPnNpemUpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocmVmLT5zaXplICE9IGVudHJ5LT5zaXplKSB7CisJCWVycl9wcmludGsocmVmLT5kZXYsIGVudHJ5LCAiRE1BLUFQSTogZGV2aWNlIGRyaXZlciBmcmVlcyAiCisJCQkgICAiRE1BIG1lbW9yeSB3aXRoIGRpZmZlcmVudCBzaXplICIKKwkJCSAgICJbZGV2aWNlIGFkZHJlc3M9MHglMDE2bGx4XSBbbWFwIHNpemU9JWxsdSBieXRlc10gIgorCQkJICAgIlt1bm1hcCBzaXplPSVsbHUgYnl0ZXNdXG4iLAorCQkJICAgcmVmLT5kZXZfYWRkciwgZW50cnktPnNpemUsIHJlZi0+c2l6ZSk7CisJfQorCisJaWYgKHJlZi0+dHlwZSAhPSBlbnRyeS0+dHlwZSkgeworCQllcnJfcHJpbnRrKHJlZi0+ZGV2LCBlbnRyeSwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgZnJlZXMgIgorCQkJICAgIkRNQSBtZW1vcnkgd2l0aCB3cm9uZyBmdW5jdGlvbiAiCisJCQkgICAiW2RldmljZSBhZGRyZXNzPTB4JTAxNmxseF0gW3NpemU9JWxsdSBieXRlc10gIgorCQkJICAgIlttYXBwZWQgYXMgJXNdIFt1bm1hcHBlZCBhcyAlc11cbiIsCisJCQkgICByZWYtPmRldl9hZGRyLCByZWYtPnNpemUsCisJCQkgICB0eXBlMm5hbWVbZW50cnktPnR5cGVdLCB0eXBlMm5hbWVbcmVmLT50eXBlXSk7CisJfSBlbHNlIGlmICgoZW50cnktPnR5cGUgPT0gZG1hX2RlYnVnX2NvaGVyZW50KSAmJgorCQkgICAocmVmLT5wYWRkciAhPSBlbnRyeS0+cGFkZHIpKSB7CisJCWVycl9wcmludGsocmVmLT5kZXYsIGVudHJ5LCAiRE1BLUFQSTogZGV2aWNlIGRyaXZlciBmcmVlcyAiCisJCQkgICAiRE1BIG1lbW9yeSB3aXRoIGRpZmZlcmVudCBDUFUgYWRkcmVzcyAiCisJCQkgICAiW2RldmljZSBhZGRyZXNzPTB4JTAxNmxseF0gW3NpemU9JWxsdSBieXRlc10gIgorCQkJICAgIltjcHUgYWxsb2MgYWRkcmVzcz0lcF0gW2NwdSBmcmVlIGFkZHJlc3M9JXBdIiwKKwkJCSAgIHJlZi0+ZGV2X2FkZHIsIHJlZi0+c2l6ZSwKKwkJCSAgICh2b2lkICopZW50cnktPnBhZGRyLCAodm9pZCAqKXJlZi0+cGFkZHIpOworCX0KKworCWlmIChyZWYtPnNnX2NhbGxfZW50cyAmJiByZWYtPnR5cGUgPT0gZG1hX2RlYnVnX3NnICYmCisJICAgIHJlZi0+c2dfY2FsbF9lbnRzICE9IGVudHJ5LT5zZ19jYWxsX2VudHMpIHsKKwkJZXJyX3ByaW50ayhyZWYtPmRldiwgZW50cnksICJETUEtQVBJOiBkZXZpY2UgZHJpdmVyIGZyZWVzICIKKwkJCSAgICJETUEgc2cgbGlzdCB3aXRoIGRpZmZlcmVudCBlbnRyeSBjb3VudCAiCisJCQkgICAiW21hcCBjb3VudD0lZF0gW3VubWFwIGNvdW50PSVkXVxuIiwKKwkJCSAgIGVudHJ5LT5zZ19jYWxsX2VudHMsIHJlZi0+c2dfY2FsbF9lbnRzKTsKKwl9CisKKwkvKgorCSAqIFRoaXMgbWF5IGJlIG5vIGJ1ZyBpbiByZWFsaXR5IC0gYnV0IG1vc3QgaW1wbGVtZW50YXRpb25zIG9mIHRoZQorCSAqIERNQSBBUEkgZG9uJ3QgaGFuZGxlIHRoaXMgcHJvcGVybHksIHNvIGNoZWNrIGZvciBpdCBoZXJlCisJICovCisJaWYgKHJlZi0+ZGlyZWN0aW9uICE9IGVudHJ5LT5kaXJlY3Rpb24pIHsKKwkJZXJyX3ByaW50ayhyZWYtPmRldiwgZW50cnksICJETUEtQVBJOiBkZXZpY2UgZHJpdmVyIGZyZWVzICIKKwkJCSAgICJETUEgbWVtb3J5IHdpdGggZGlmZmVyZW50IGRpcmVjdGlvbiAiCisJCQkgICAiW2RldmljZSBhZGRyZXNzPTB4JTAxNmxseF0gW3NpemU9JWxsdSBieXRlc10gIgorCQkJICAgIlttYXBwZWQgd2l0aCAlc10gW3VubWFwcGVkIHdpdGggJXNdXG4iLAorCQkJICAgcmVmLT5kZXZfYWRkciwgcmVmLT5zaXplLAorCQkJICAgZGlyMm5hbWVbZW50cnktPmRpcmVjdGlvbl0sCisJCQkgICBkaXIybmFtZVtyZWYtPmRpcmVjdGlvbl0pOworCX0KKworCWhhc2hfYnVja2V0X2RlbChlbnRyeSk7CisJZG1hX2VudHJ5X2ZyZWUoZW50cnkpOworCitvdXQ6CisJcHV0X2hhc2hfYnVja2V0KGJ1Y2tldCwgJmZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfZm9yX3N0YWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKK3sKKwlpZiAob2JqZWN0X2lzX29uX3N0YWNrKGFkZHIpKQorCQllcnJfcHJpbnRrKGRldiwgTlVMTCwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgbWFwcyBtZW1vcnkgZnJvbSIKKwkJCQkic3RhY2sgW2FkZHI9JXBdXG4iLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSBib29sIG92ZXJsYXAodm9pZCAqYWRkciwgdTY0IHNpemUsIHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCit7CisJdm9pZCAqYWRkcjIgPSAoY2hhciAqKWFkZHIgKyBzaXplOworCisJcmV0dXJuICgoYWRkciA+PSBzdGFydCAmJiBhZGRyIDwgZW5kKSB8fAorCQkoYWRkcjIgPj0gc3RhcnQgJiYgYWRkcjIgPCBlbmQpIHx8CisJCSgoYWRkciA8IHN0YXJ0KSAmJiAoYWRkcjIgPj0gZW5kKSkpOworfQorCitzdGF0aWMgdm9pZCBjaGVja19mb3JfaWxsZWdhbF9hcmVhKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYWRkciwgdTY0IHNpemUpCit7CisJaWYgKG92ZXJsYXAoYWRkciwgc2l6ZSwgX3RleHQsIF9ldGV4dCkgfHwKKwkgICAgb3ZlcmxhcChhZGRyLCBzaXplLCBfX3N0YXJ0X3JvZGF0YSwgX19lbmRfcm9kYXRhKSkKKwkJZXJyX3ByaW50ayhkZXYsIE5VTEwsICJETUEtQVBJOiBkZXZpY2UgZHJpdmVyIG1hcHMgIgorCQkJCSJtZW1vcnkgZnJvbSBrZXJuZWwgdGV4dCBvciByb2RhdGEgIgorCQkJCSJbYWRkcj0lcF0gW3NpemU9JWxsdV1cbiIsIGFkZHIsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCBjaGVja19zeW5jKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLAorCQkgICAgICAgdTY0IHNpemUsIHU2NCBvZmZzZXQsIGludCBkaXJlY3Rpb24sIGJvb2wgdG9fY3B1KQoreworCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgcmVmID0geworCQkuZGV2ICAgICAgICAgICAgPSBkZXYsCisJCS5kZXZfYWRkciAgICAgICA9IGFkZHIsCisJCS5zaXplICAgICAgICAgICA9IHNpemUsCisJCS5kaXJlY3Rpb24gICAgICA9IGRpcmVjdGlvbiwKKwl9OworCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5OworCXN0cnVjdCBoYXNoX2J1Y2tldCAqYnVja2V0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlidWNrZXQgPSBnZXRfaGFzaF9idWNrZXQoJnJlZiwgJmZsYWdzKTsKKworCWVudHJ5ID0gaGFzaF9idWNrZXRfZmluZChidWNrZXQsICZyZWYpOworCisJaWYgKCFlbnRyeSkgeworCQllcnJfcHJpbnRrKGRldiwgTlVMTCwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgdHJpZXMgIgorCQkJCSJ0byBzeW5jIERNQSBtZW1vcnkgaXQgaGFzIG5vdCBhbGxvY2F0ZWQgIgorCQkJCSJbZGV2aWNlIGFkZHJlc3M9MHglMDE2bGx4XSBbc2l6ZT0lbGx1IGJ5dGVzXVxuIiwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKWFkZHIsIHNpemUpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoKG9mZnNldCArIHNpemUpID4gZW50cnktPnNpemUpIHsKKwkJZXJyX3ByaW50ayhkZXYsIGVudHJ5LCAiRE1BLUFQSTogZGV2aWNlIGRyaXZlciBzeW5jcyIKKwkJCQkiIERNQSBtZW1vcnkgb3V0c2lkZSBhbGxvY2F0ZWQgcmFuZ2UgIgorCQkJCSJbZGV2aWNlIGFkZHJlc3M9MHglMDE2bGx4XSAiCisJCQkJIlthbGxvY2F0aW9uIHNpemU9JWxsdSBieXRlc10gW3N5bmMgb2Zmc2V0PSVsbHVdICIKKwkJCQkiW3N5bmMgc2l6ZT0lbGx1XVxuIiwgZW50cnktPmRldl9hZGRyLCBlbnRyeS0+c2l6ZSwKKwkJCQlvZmZzZXQsIHNpemUpOworCX0KKworCWlmIChkaXJlY3Rpb24gIT0gZW50cnktPmRpcmVjdGlvbikgeworCQllcnJfcHJpbnRrKGRldiwgZW50cnksICJETUEtQVBJOiBkZXZpY2UgZHJpdmVyIHN5bmNzICIKKwkJCQkiRE1BIG1lbW9yeSB3aXRoIGRpZmZlcmVudCBkaXJlY3Rpb24gIgorCQkJCSJbZGV2aWNlIGFkZHJlc3M9MHglMDE2bGx4XSBbc2l6ZT0lbGx1IGJ5dGVzXSAiCisJCQkJIlttYXBwZWQgd2l0aCAlc10gW3N5bmNlZCB3aXRoICVzXVxuIiwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKWFkZHIsIGVudHJ5LT5zaXplLAorCQkJCWRpcjJuYW1lW2VudHJ5LT5kaXJlY3Rpb25dLAorCQkJCWRpcjJuYW1lW2RpcmVjdGlvbl0pOworCX0KKworCWlmIChlbnRyeS0+ZGlyZWN0aW9uID09IERNQV9CSURJUkVDVElPTkFMKQorCQlnb3RvIG91dDsKKworCWlmICh0b19jcHUgJiYgIShlbnRyeS0+ZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkgJiYKKwkJICAgICAgIShkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkpCisJCWVycl9wcmludGsoZGV2LCBlbnRyeSwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgc3luY3MgIgorCQkJCSJkZXZpY2UgcmVhZC1vbmx5IERNQSBtZW1vcnkgZm9yIGNwdSAiCisJCQkJIltkZXZpY2UgYWRkcmVzcz0weCUwMTZsbHhdIFtzaXplPSVsbHUgYnl0ZXNdICIKKwkJCQkiW21hcHBlZCB3aXRoICVzXSBbc3luY2VkIHdpdGggJXNdXG4iLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYWRkciwgZW50cnktPnNpemUsCisJCQkJZGlyMm5hbWVbZW50cnktPmRpcmVjdGlvbl0sCisJCQkJZGlyMm5hbWVbZGlyZWN0aW9uXSk7CisKKwlpZiAoIXRvX2NwdSAmJiAhKGVudHJ5LT5kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkgJiYKKwkJICAgICAgICEoZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkpCisJCWVycl9wcmludGsoZGV2LCBlbnRyeSwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgc3luY3MgIgorCQkJCSJkZXZpY2Ugd3JpdGUtb25seSBETUEgbWVtb3J5IHRvIGRldmljZSAiCisJCQkJIltkZXZpY2UgYWRkcmVzcz0weCUwMTZsbHhdIFtzaXplPSVsbHUgYnl0ZXNdICIKKwkJCQkiW21hcHBlZCB3aXRoICVzXSBbc3luY2VkIHdpdGggJXNdXG4iLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYWRkciwgZW50cnktPnNpemUsCisJCQkJZGlyMm5hbWVbZW50cnktPmRpcmVjdGlvbl0sCisJCQkJZGlyMm5hbWVbZGlyZWN0aW9uXSk7CisKK291dDoKKwlwdXRfaGFzaF9idWNrZXQoYnVja2V0LCAmZmxhZ3MpOworCit9CisKK3ZvaWQgZGVidWdfZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBvZmZzZXQsCisJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKKwkJCWJvb2wgbWFwX3NpbmdsZSkKK3sKKwlzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICplbnRyeTsKKworCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJCXJldHVybjsKKworCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRtYV9hZGRyKSkpCisJCXJldHVybjsKKworCWVudHJ5ID0gZG1hX2VudHJ5X2FsbG9jKCk7CisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuOworCisJZW50cnktPmRldiAgICAgICA9IGRldjsKKwllbnRyeS0+dHlwZSAgICAgID0gZG1hX2RlYnVnX3BhZ2U7CisJZW50cnktPnBhZGRyICAgICA9IHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldDsKKwllbnRyeS0+ZGV2X2FkZHIgID0gZG1hX2FkZHI7CisJZW50cnktPnNpemUgICAgICA9IHNpemU7CisJZW50cnktPmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKworCWlmIChtYXBfc2luZ2xlKQorCQllbnRyeS0+dHlwZSA9IGRtYV9kZWJ1Z19zaW5nbGU7CisKKwlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKSB7CisJCXZvaWQgKmFkZHIgPSAoKGNoYXIgKilwYWdlX2FkZHJlc3MocGFnZSkpICsgb2Zmc2V0OworCQljaGVja19mb3Jfc3RhY2soZGV2LCBhZGRyKTsKKwkJY2hlY2tfZm9yX2lsbGVnYWxfYXJlYShkZXYsIGFkZHIsIHNpemUpOworCX0KKworCWFkZF9kbWFfZW50cnkoZW50cnkpOworfQorRVhQT1JUX1NZTUJPTChkZWJ1Z19kbWFfbWFwX3BhZ2UpOworCit2b2lkIGRlYnVnX2RtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLAorCQkJICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbiwgYm9vbCBtYXBfc2luZ2xlKQoreworCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgcmVmID0geworCQkudHlwZSAgICAgICAgICAgPSBkbWFfZGVidWdfcGFnZSwKKwkJLmRldiAgICAgICAgICAgID0gZGV2LAorCQkuZGV2X2FkZHIgICAgICAgPSBhZGRyLAorCQkuc2l6ZSAgICAgICAgICAgPSBzaXplLAorCQkuZGlyZWN0aW9uICAgICAgPSBkaXJlY3Rpb24sCisJfTsKKworCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJCXJldHVybjsKKworCWlmIChtYXBfc2luZ2xlKQorCQlyZWYudHlwZSA9IGRtYV9kZWJ1Z19zaW5nbGU7CisKKwljaGVja191bm1hcCgmcmVmKTsKK30KK0VYUE9SVF9TWU1CT0woZGVidWdfZG1hX3VubWFwX3BhZ2UpOworCit2b2lkIGRlYnVnX2RtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkgICAgICBpbnQgbmVudHMsIGludCBtYXBwZWRfZW50cywgaW50IGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnM7CisJaW50IGk7CisKKwlpZiAodW5saWtlbHkoZ2xvYmFsX2Rpc2FibGUpKQorCQlyZXR1cm47CisKKwlmb3JfZWFjaF9zZyhzZywgcywgbWFwcGVkX2VudHMsIGkpIHsKKwkJZW50cnkgPSBkbWFfZW50cnlfYWxsb2MoKTsKKwkJaWYgKCFlbnRyeSkKKwkJCXJldHVybjsKKworCQllbnRyeS0+dHlwZSAgICAgICAgICAgPSBkbWFfZGVidWdfc2c7CisJCWVudHJ5LT5kZXYgICAgICAgICAgICA9IGRldjsKKwkJZW50cnktPnBhZGRyICAgICAgICAgID0gc2dfcGh5cyhzKTsKKwkJZW50cnktPnNpemUgICAgICAgICAgID0gcy0+bGVuZ3RoOworCQllbnRyeS0+ZGV2X2FkZHIgICAgICAgPSBzLT5kbWFfYWRkcmVzczsKKwkJZW50cnktPmRpcmVjdGlvbiAgICAgID0gZGlyZWN0aW9uOworCQllbnRyeS0+c2dfY2FsbF9lbnRzICAgPSBuZW50czsKKwkJZW50cnktPnNnX21hcHBlZF9lbnRzID0gbWFwcGVkX2VudHM7CisKKwkJaWYgKCFQYWdlSGlnaE1lbShzZ19wYWdlKHMpKSkgeworCQkJY2hlY2tfZm9yX3N0YWNrKGRldiwgc2dfdmlydChzKSk7CisJCQljaGVja19mb3JfaWxsZWdhbF9hcmVhKGRldiwgc2dfdmlydChzKSwgcy0+bGVuZ3RoKTsKKwkJfQorCisJCWFkZF9kbWFfZW50cnkoZW50cnkpOworCX0KK30KK0VYUE9SVF9TWU1CT0woZGVidWdfZG1hX21hcF9zZyk7CisKK3ZvaWQgZGVidWdfZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCisJCQlpbnQgbmVsZW1zLCBpbnQgZGlyKQoreworCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5OworCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKKwlpbnQgbWFwcGVkX2VudHMgPSAwLCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodW5saWtlbHkoZ2xvYmFsX2Rpc2FibGUpKQorCQlyZXR1cm47CisKKwlmb3JfZWFjaF9zZyhzZ2xpc3QsIHMsIG5lbGVtcywgaSkgeworCisJCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgcmVmID0geworCQkJLnR5cGUgICAgICAgICAgID0gZG1hX2RlYnVnX3NnLAorCQkJLmRldiAgICAgICAgICAgID0gZGV2LAorCQkJLnBhZGRyICAgICAgICAgID0gc2dfcGh5cyhzKSwKKwkJCS5kZXZfYWRkciAgICAgICA9IHMtPmRtYV9hZGRyZXNzLAorCQkJLnNpemUgICAgICAgICAgID0gcy0+bGVuZ3RoLAorCQkJLmRpcmVjdGlvbiAgICAgID0gZGlyLAorCQkJLnNnX2NhbGxfZW50cyAgID0gMCwKKwkJfTsKKworCQlpZiAobWFwcGVkX2VudHMgJiYgaSA+PSBtYXBwZWRfZW50cykKKwkJCWJyZWFrOworCisJCWlmIChtYXBwZWRfZW50cyA9PSAwKSB7CisJCQlzdHJ1Y3QgaGFzaF9idWNrZXQgKmJ1Y2tldDsKKwkJCXJlZi5zZ19jYWxsX2VudHMgPSBuZWxlbXM7CisJCQlidWNrZXQgPSBnZXRfaGFzaF9idWNrZXQoJnJlZiwgJmZsYWdzKTsKKwkJCWVudHJ5ID0gaGFzaF9idWNrZXRfZmluZChidWNrZXQsICZyZWYpOworCQkJaWYgKGVudHJ5KQorCQkJCW1hcHBlZF9lbnRzID0gZW50cnktPnNnX21hcHBlZF9lbnRzOworCQkJcHV0X2hhc2hfYnVja2V0KGJ1Y2tldCwgJmZsYWdzKTsKKwkJfQorCisJCWNoZWNrX3VubWFwKCZyZWYpOworCX0KK30KK0VYUE9SVF9TWU1CT0woZGVidWdfZG1hX3VubWFwX3NnKTsKKwordm9pZCBkZWJ1Z19kbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHZvaWQgKnZpcnQpCit7CisJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnk7CisKKwlpZiAodW5saWtlbHkoZ2xvYmFsX2Rpc2FibGUpKQorCQlyZXR1cm47CisKKwlpZiAodW5saWtlbHkodmlydCA9PSBOVUxMKSkKKwkJcmV0dXJuOworCisJZW50cnkgPSBkbWFfZW50cnlfYWxsb2MoKTsKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm47CisKKwllbnRyeS0+dHlwZSAgICAgID0gZG1hX2RlYnVnX2NvaGVyZW50OworCWVudHJ5LT5kZXYgICAgICAgPSBkZXY7CisJZW50cnktPnBhZGRyICAgICA9IHZpcnRfdG9fcGh5cyh2aXJ0KTsKKwllbnRyeS0+c2l6ZSAgICAgID0gc2l6ZTsKKwllbnRyeS0+ZGV2X2FkZHIgID0gZG1hX2FkZHI7CisJZW50cnktPmRpcmVjdGlvbiA9IERNQV9CSURJUkVDVElPTkFMOworCisJYWRkX2RtYV9lbnRyeShlbnRyeSk7Cit9CitFWFBPUlRfU1lNQk9MKGRlYnVnX2RtYV9hbGxvY19jb2hlcmVudCk7CisKK3ZvaWQgZGVidWdfZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSB2b2lkICp2aXJ0LCBkbWFfYWRkcl90IGFkZHIpCit7CisJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSByZWYgPSB7CisJCS50eXBlICAgICAgICAgICA9IGRtYV9kZWJ1Z19jb2hlcmVudCwKKwkJLmRldiAgICAgICAgICAgID0gZGV2LAorCQkucGFkZHIgICAgICAgICAgPSB2aXJ0X3RvX3BoeXModmlydCksCisJCS5kZXZfYWRkciAgICAgICA9IGFkZHIsCisJCS5zaXplICAgICAgICAgICA9IHNpemUsCisJCS5kaXJlY3Rpb24gICAgICA9IERNQV9CSURJUkVDVElPTkFMLAorCX07CisKKwlpZiAodW5saWtlbHkoZ2xvYmFsX2Rpc2FibGUpKQorCQlyZXR1cm47CisKKwljaGVja191bm1hcCgmcmVmKTsKK30KK0VYUE9SVF9TWU1CT0woZGVidWdfZG1hX2ZyZWVfY29oZXJlbnQpOworCit2b2lkIGRlYnVnX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCSAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJCXJldHVybjsKKworCWNoZWNrX3N5bmMoZGV2LCBkbWFfaGFuZGxlLCBzaXplLCAwLCBkaXJlY3Rpb24sIHRydWUpOworfQorRVhQT1JUX1NZTUJPTChkZWJ1Z19kbWFfc3luY19zaW5nbGVfZm9yX2NwdSk7CisKK3ZvaWQgZGVidWdfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCisJCQkJICAgICAgaW50IGRpcmVjdGlvbikKK3sKKwlpZiAodW5saWtlbHkoZ2xvYmFsX2Rpc2FibGUpKQorCQlyZXR1cm47CisKKwljaGVja19zeW5jKGRldiwgZG1hX2hhbmRsZSwgc2l6ZSwgMCwgZGlyZWN0aW9uLCBmYWxzZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRlYnVnX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKTsKKwordm9pZCBkZWJ1Z19kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJCSBpbnQgZGlyZWN0aW9uKQoreworCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJCXJldHVybjsKKworCWNoZWNrX3N5bmMoZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBvZmZzZXQsIGRpcmVjdGlvbiwgdHJ1ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRlYnVnX2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KTsKKwordm9pZCBkZWJ1Z19kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJCXJldHVybjsKKworCWNoZWNrX3N5bmMoZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBvZmZzZXQsIGRpcmVjdGlvbiwgZmFsc2UpOworfQorRVhQT1JUX1NZTUJPTChkZWJ1Z19kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSk7CisKK3ZvaWQgZGVidWdfZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgICAgICAgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnM7CisJaW50IGk7CisKKwlpZiAodW5saWtlbHkoZ2xvYmFsX2Rpc2FibGUpKQorCQlyZXR1cm47CisKKwlmb3JfZWFjaF9zZyhzZywgcywgbmVsZW1zLCBpKSB7CisJCWNoZWNrX3N5bmMoZGV2LCBzLT5kbWFfYWRkcmVzcywgcy0+ZG1hX2xlbmd0aCwgMCwKKwkJCQlkaXJlY3Rpb24sIHRydWUpOworCX0KK30KK0VYUE9SVF9TWU1CT0woZGVidWdfZG1hX3N5bmNfc2dfZm9yX2NwdSk7CisKK3ZvaWQgZGVidWdfZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJICBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKKwlpbnQgaTsKKworCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJCXJldHVybjsKKworCWZvcl9lYWNoX3NnKHNnLCBzLCBuZWxlbXMsIGkpIHsKKwkJY2hlY2tfc3luYyhkZXYsIHMtPmRtYV9hZGRyZXNzLCBzLT5kbWFfbGVuZ3RoLCAwLAorCQkJCWRpcmVjdGlvbiwgZmFsc2UpOworCX0KK30KK0VYUE9SVF9TWU1CT0woZGVidWdfZG1hX3N5bmNfc2dfZm9yX2RldmljZSk7CisKZGlmZiAtLWdpdCBhL2xpYi9sbWIuYyBiL2xpYi9sbWIuYwppbmRleCA5N2U1NDcwMy4uZTRhNjQ4MiAxMDA2NDQKLS0tIGEvbGliL2xtYi5jCisrKyBiL2xpYi9sbWIuYwpAQCAtMjksMzMgKzI5LDMzIEBACiB9CiBlYXJseV9wYXJhbSgibG1iIiwgZWFybHlfbG1iKTsKIAorc3RhdGljIHZvaWQgbG1iX2R1bXAoc3RydWN0IGxtYl9yZWdpb24gKnJlZ2lvbiwgY2hhciAqbmFtZSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgYmFzZSwgc2l6ZTsKKwlpbnQgaTsKKworCXByX2luZm8oIiAlcy5jbnQgID0gMHglbHhcbiIsIG5hbWUsIHJlZ2lvbi0+Y250KTsKKworCWZvciAoaSA9IDA7IGkgPCByZWdpb24tPmNudDsgaSsrKSB7CisJCWJhc2UgPSByZWdpb24tPnJlZ2lvbltpXS5iYXNlOworCQlzaXplID0gcmVnaW9uLT5yZWdpb25baV0uc2l6ZTsKKworCQlwcl9pbmZvKCIgJXNbMHgleF1cdDB4JTAxNmxseCAtIDB4JTAxNmxseCwgMHglbGx4IGJ5dGVzXG4iLAorCQkgICAgbmFtZSwgaSwgYmFzZSwgYmFzZSArIHNpemUgLSAxLCBzaXplKTsKKwl9Cit9CisKIHZvaWQgbG1iX2R1bXBfYWxsKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBpOwotCiAJaWYgKCFsbWJfZGVidWcpCiAJCXJldHVybjsKIAotCXByX2luZm8oImxtYl9kdW1wX2FsbDpcbiIpOwotCXByX2luZm8oIiAgICBtZW1vcnkuY250CQkgID0gMHglbHhcbiIsIGxtYi5tZW1vcnkuY250KTsKLQlwcl9pbmZvKCIgICAgbWVtb3J5LnNpemUJCSAgPSAweCVsbHhcbiIsCi0JICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbG1iLm1lbW9yeS5zaXplKTsKLQlmb3IgKGk9MDsgaSA8IGxtYi5tZW1vcnkuY250IDtpKyspIHsKLQkJcHJfaW5mbygiICAgIG1lbW9yeS5yZWdpb25bMHglbHhdLmJhc2UgICAgICAgPSAweCVsbHhcbiIsCi0JCSAgICBpLCAodW5zaWduZWQgbG9uZyBsb25nKWxtYi5tZW1vcnkucmVnaW9uW2ldLmJhc2UpOwotCQlwcl9pbmZvKCIJCSAgICAgIC5zaXplICAgICA9IDB4JWxseFxuIiwKLQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbG1iLm1lbW9yeS5yZWdpb25baV0uc2l6ZSk7Ci0JfQorCXByX2luZm8oIkxNQiBjb25maWd1cmF0aW9uOlxuIik7CisJcHJfaW5mbygiIHJtb19zaXplICAgID0gMHglbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWxtYi5ybW9fc2l6ZSk7CisJcHJfaW5mbygiIG1lbW9yeS5zaXplID0gMHglbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWxtYi5tZW1vcnkuc2l6ZSk7CiAKLQlwcl9pbmZvKCIgICAgcmVzZXJ2ZWQuY250CSAgPSAweCVseFxuIiwgbG1iLnJlc2VydmVkLmNudCk7Ci0JcHJfaW5mbygiICAgIHJlc2VydmVkLnNpemUJICA9IDB4JWxseFxuIiwKLQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsbWIubWVtb3J5LnNpemUpOwotCWZvciAoaT0wOyBpIDwgbG1iLnJlc2VydmVkLmNudCA7aSsrKSB7Ci0JCXByX2luZm8oIiAgICByZXNlcnZlZC5yZWdpb25bMHglbHhdLmJhc2UgICAgICAgPSAweCVsbHhcbiIsCi0JCSAgICBpLCAodW5zaWduZWQgbG9uZyBsb25nKWxtYi5yZXNlcnZlZC5yZWdpb25baV0uYmFzZSk7Ci0JCXByX2luZm8oIgkJICAgICAgLnNpemUgICAgID0gMHglbGx4XG4iLAotCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLnNpemUpOwotCX0KKwlsbWJfZHVtcCgmbG1iLm1lbW9yeSwgIm1lbW9yeSIpOworCWxtYl9kdW1wKCZsbWIucmVzZXJ2ZWQsICJyZXNlcnZlZCIpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsbWJfYWRkcnNfb3ZlcmxhcCh1NjQgYmFzZTEsIHU2NCBzaXplMSwgdTY0IGJhc2UyLApkaWZmIC0tZ2l0IGEvbGliL3N3aW90bGIuYyBiL2xpYi9zd2lvdGxiLmMKaW5kZXggMWY5OTFhYy4uMzJlMmJkMyAxMDA2NDQKLS0tIGEvbGliL3N3aW90bGIuYworKysgYi9saWIvc3dpb3RsYi5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAlyZXR1cm4gcGh5c190b192aXJ0KHN3aW90bGJfYnVzX3RvX3BoeXMoYWRkcmVzcykpOwogfQogCi1pbnQgX193ZWFrIHN3aW90bGJfYXJjaF9yYW5nZV9uZWVkc19tYXBwaW5nKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCitpbnQgX193ZWFrIHN3aW90bGJfYXJjaF9yYW5nZV9uZWVkc19tYXBwaW5nKHBoeXNfYWRkcl90IHBhZGRyLCBzaXplX3Qgc2l6ZSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTMxNSw5ICszMTUsOSBAQAogCXJldHVybiAhaXNfYnVmZmVyX2RtYV9jYXBhYmxlKGRtYV9nZXRfbWFzayhod2RldiksIGFkZHIsIHNpemUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCByYW5nZV9uZWVkc19tYXBwaW5nKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCitzdGF0aWMgaW5saW5lIGludCByYW5nZV9uZWVkc19tYXBwaW5nKHBoeXNfYWRkcl90IHBhZGRyLCBzaXplX3Qgc2l6ZSkKIHsKLQlyZXR1cm4gc3dpb3RsYl9mb3JjZSB8fCBzd2lvdGxiX2FyY2hfcmFuZ2VfbmVlZHNfbWFwcGluZyhwdHIsIHNpemUpOworCXJldHVybiBzd2lvdGxiX2ZvcmNlIHx8IHN3aW90bGJfYXJjaF9yYW5nZV9uZWVkc19tYXBwaW5nKHBhZGRyLCBzaXplKTsKIH0KIAogc3RhdGljIGludCBpc19zd2lvdGxiX2J1ZmZlcihjaGFyICphZGRyKQpAQCAtNjM2LDExICs2MzYsMTQgQEAKICAqIE9uY2UgdGhlIGRldmljZSBpcyBnaXZlbiB0aGUgZG1hIGFkZHJlc3MsIHRoZSBkZXZpY2Ugb3ducyB0aGlzIG1lbW9yeSB1bnRpbAogICogZWl0aGVyIHN3aW90bGJfdW5tYXBfc2luZ2xlIG9yIHN3aW90bGJfZG1hX3N5bmNfc2luZ2xlIGlzIHBlcmZvcm1lZC4KICAqLwotZG1hX2FkZHJfdAotc3dpb3RsYl9tYXBfc2luZ2xlX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB2b2lkICpwdHIsIHNpemVfdCBzaXplLAotCQkJIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQorZG1hX2FkZHJfdCBzd2lvdGxiX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKLQlkbWFfYWRkcl90IGRldl9hZGRyID0gc3dpb3RsYl92aXJ0X3RvX2J1cyhod2RldiwgcHRyKTsKKwlwaHlzX2FkZHJfdCBwaHlzID0gcGFnZV90b19waHlzKHBhZ2UpICsgb2Zmc2V0OworCXZvaWQgKnB0ciA9IHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldDsKKwlkbWFfYWRkcl90IGRldl9hZGRyID0gc3dpb3RsYl9waHlzX3RvX2J1cyhkZXYsIHBoeXMpOwogCXZvaWQgKm1hcDsKIAogCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOwpAQCAtNjQ5LDM3ICs2NTIsMzAgQEAKIAkgKiB3ZSBjYW4gc2FmZWx5IHJldHVybiB0aGUgZGV2aWNlIGFkZHIgYW5kIG5vdCB3b3JyeSBhYm91dCBib3VuY2UKIAkgKiBidWZmZXJpbmcgaXQuCiAJICovCi0JaWYgKCFhZGRyZXNzX25lZWRzX21hcHBpbmcoaHdkZXYsIGRldl9hZGRyLCBzaXplKSAmJgotCSAgICAhcmFuZ2VfbmVlZHNfbWFwcGluZyhwdHIsIHNpemUpKQorCWlmICghYWRkcmVzc19uZWVkc19tYXBwaW5nKGRldiwgZGV2X2FkZHIsIHNpemUpICYmCisJICAgICFyYW5nZV9uZWVkc19tYXBwaW5nKHZpcnRfdG9fcGh5cyhwdHIpLCBzaXplKSkKIAkJcmV0dXJuIGRldl9hZGRyOwogCiAJLyoKIAkgKiBPaCB3ZWxsLCBoYXZlIHRvIGFsbG9jYXRlIGFuZCBtYXAgYSBib3VuY2UgYnVmZmVyLgogCSAqLwotCW1hcCA9IG1hcF9zaW5nbGUoaHdkZXYsIHZpcnRfdG9fcGh5cyhwdHIpLCBzaXplLCBkaXIpOworCW1hcCA9IG1hcF9zaW5nbGUoZGV2LCBwaHlzLCBzaXplLCBkaXIpOwogCWlmICghbWFwKSB7Ci0JCXN3aW90bGJfZnVsbChod2Rldiwgc2l6ZSwgZGlyLCAxKTsKKwkJc3dpb3RsYl9mdWxsKGRldiwgc2l6ZSwgZGlyLCAxKTsKIAkJbWFwID0gaW9fdGxiX292ZXJmbG93X2J1ZmZlcjsKIAl9CiAKLQlkZXZfYWRkciA9IHN3aW90bGJfdmlydF90b19idXMoaHdkZXYsIG1hcCk7CisJZGV2X2FkZHIgPSBzd2lvdGxiX3ZpcnRfdG9fYnVzKGRldiwgbWFwKTsKIAogCS8qCiAJICogRW5zdXJlIHRoYXQgdGhlIGFkZHJlc3MgcmV0dXJuZWQgaXMgRE1BJ2JsZQogCSAqLwotCWlmIChhZGRyZXNzX25lZWRzX21hcHBpbmcoaHdkZXYsIGRldl9hZGRyLCBzaXplKSkKKwlpZiAoYWRkcmVzc19uZWVkc19tYXBwaW5nKGRldiwgZGV2X2FkZHIsIHNpemUpKQogCQlwYW5pYygibWFwX3NpbmdsZTogYm91bmNlIGJ1ZmZlciBpcyBub3QgRE1BJ2JsZSIpOwogCiAJcmV0dXJuIGRldl9hZGRyOwogfQotRVhQT1JUX1NZTUJPTChzd2lvdGxiX21hcF9zaW5nbGVfYXR0cnMpOwotCi1kbWFfYWRkcl90Ci1zd2lvdGxiX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIGludCBkaXIpCi17Ci0JcmV0dXJuIHN3aW90bGJfbWFwX3NpbmdsZV9hdHRycyhod2RldiwgcHRyLCBzaXplLCBkaXIsIE5VTEwpOwotfQotRVhQT1JUX1NZTUJPTChzd2lvdGxiX21hcF9zaW5nbGUpOworRVhQT1JUX1NZTUJPTF9HUEwoc3dpb3RsYl9tYXBfcGFnZSk7CiAKIC8qCiAgKiBVbm1hcCBhIHNpbmdsZSBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb24uICBUaGUgZG1hX2FkZHIgYW5kIHNpemUgbXVzdApAQCAtNjg5LDkgKzY4NSw5IEBACiAgKiBBZnRlciB0aGlzIGNhbGwsIHJlYWRzIGJ5IHRoZSBjcHUgdG8gdGhlIGJ1ZmZlciBhcmUgZ3VhcmFudGVlZCB0byBzZWUKICAqIHdoYXRldmVyIHRoZSBkZXZpY2Ugd3JvdGUgdGhlcmUuCiAgKi8KLXZvaWQKLXN3aW90bGJfdW5tYXBfc2luZ2xlX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAotCQkJICAgc2l6ZV90IHNpemUsIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQordm9pZCBzd2lvdGxiX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCisJCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJY2hhciAqZG1hX2FkZHIgPSBzd2lvdGxiX2J1c190b192aXJ0KGRldl9hZGRyKTsKIApAQCAtNzAxLDE1ICs2OTcsNyBAQAogCWVsc2UgaWYgKGRpciA9PSBETUFfRlJPTV9ERVZJQ0UpCiAJCWRtYV9tYXJrX2NsZWFuKGRtYV9hZGRyLCBzaXplKTsKIH0KLUVYUE9SVF9TWU1CT0woc3dpb3RsYl91bm1hcF9zaW5nbGVfYXR0cnMpOwotCi12b2lkCi1zd2lvdGxiX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwgc2l6ZV90IHNpemUsCi0JCSAgICAgaW50IGRpcikKLXsKLQlyZXR1cm4gc3dpb3RsYl91bm1hcF9zaW5nbGVfYXR0cnMoaHdkZXYsIGRldl9hZGRyLCBzaXplLCBkaXIsIE5VTEwpOwotfQotRVhQT1JUX1NZTUJPTChzd2lvdGxiX3VubWFwX3NpbmdsZSk7CitFWFBPUlRfU1lNQk9MX0dQTChzd2lvdGxiX3VubWFwX3BhZ2UpOwogCiAvKgogICogTWFrZSBwaHlzaWNhbCBtZW1vcnkgY29uc2lzdGVudCBmb3IgYSBzaW5nbGUgc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9uCkBAIC03MzYsNyArNzI0LDcgQEAKIAogdm9pZAogc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAotCQkJICAgIHNpemVfdCBzaXplLCBpbnQgZGlyKQorCQkJICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CiAJc3dpb3RsYl9zeW5jX3NpbmdsZShod2RldiwgZGV2X2FkZHIsIHNpemUsIGRpciwgU1lOQ19GT1JfQ1BVKTsKIH0KQEAgLTc0NCw3ICs3MzIsNyBAQAogCiB2b2lkCiBzd2lvdGxiX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCi0JCQkgICAgICAgc2l6ZV90IHNpemUsIGludCBkaXIpCisJCQkgICAgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlzd2lvdGxiX3N5bmNfc2luZ2xlKGh3ZGV2LCBkZXZfYWRkciwgc2l6ZSwgZGlyLCBTWU5DX0ZPUl9ERVZJQ0UpOwogfQpAQCAtNzY5LDcgKzc1Nyw4IEBACiAKIHZvaWQKIHN3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGRpcikKKwkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlzd2lvdGxiX3N5bmNfc2luZ2xlX3JhbmdlKGh3ZGV2LCBkZXZfYWRkciwgb2Zmc2V0LCBzaXplLCBkaXIsCiAJCQkJICBTWU5DX0ZPUl9DUFUpOwpAQCAtNzc4LDcgKzc2Nyw4IEBACiAKIHZvaWQKIHN3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGRpcikKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlzd2lvdGxiX3N5bmNfc2luZ2xlX3JhbmdlKGh3ZGV2LCBkZXZfYWRkciwgb2Zmc2V0LCBzaXplLCBkaXIsCiAJCQkJICBTWU5DX0ZPUl9ERVZJQ0UpOwpAQCAtODAzLDcgKzc5Myw3IEBACiAgKi8KIGludAogc3dpb3RsYl9tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCBpbnQgbmVsZW1zLAotCQkgICAgIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQorCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAlpbnQgaTsKQEAgLTgxMSwxMCArODAxLDEwIEBACiAJQlVHX09OKGRpciA9PSBETUFfTk9ORSk7CiAKIAlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBuZWxlbXMsIGkpIHsKLQkJdm9pZCAqYWRkciA9IHNnX3ZpcnQoc2cpOwotCQlkbWFfYWRkcl90IGRldl9hZGRyID0gc3dpb3RsYl92aXJ0X3RvX2J1cyhod2RldiwgYWRkcik7CisJCXBoeXNfYWRkcl90IHBhZGRyID0gc2dfcGh5cyhzZyk7CisJCWRtYV9hZGRyX3QgZGV2X2FkZHIgPSBzd2lvdGxiX3BoeXNfdG9fYnVzKGh3ZGV2LCBwYWRkcik7CiAKLQkJaWYgKHJhbmdlX25lZWRzX21hcHBpbmcoYWRkciwgc2ctPmxlbmd0aCkgfHwKKwkJaWYgKHJhbmdlX25lZWRzX21hcHBpbmcocGFkZHIsIHNnLT5sZW5ndGgpIHx8CiAJCSAgICBhZGRyZXNzX25lZWRzX21hcHBpbmcoaHdkZXYsIGRldl9hZGRyLCBzZy0+bGVuZ3RoKSkgewogCQkJdm9pZCAqbWFwID0gbWFwX3NpbmdsZShod2Rldiwgc2dfcGh5cyhzZyksCiAJCQkJCSAgICAgICBzZy0+bGVuZ3RoLCBkaXIpOwpAQCAtODUwLDcgKzg0MCw3IEBACiAgKi8KIHZvaWQKIHN3aW90bGJfdW5tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAotCQkgICAgICAgaW50IG5lbGVtcywgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCisJCSAgICAgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJaW50IGk7CkBAIC04NTgsMTEgKzg0OCwxMSBAQAogCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOwogCiAJZm9yX2VhY2hfc2coc2dsLCBzZywgbmVsZW1zLCBpKSB7Ci0JCWlmIChzZy0+ZG1hX2FkZHJlc3MgIT0gc3dpb3RsYl92aXJ0X3RvX2J1cyhod2Rldiwgc2dfdmlydChzZykpKQorCQlpZiAoc2ctPmRtYV9hZGRyZXNzICE9IHN3aW90bGJfcGh5c190b19idXMoaHdkZXYsIHNnX3BoeXMoc2cpKSkKIAkJCXVubWFwX3NpbmdsZShod2Rldiwgc3dpb3RsYl9idXNfdG9fdmlydChzZy0+ZG1hX2FkZHJlc3MpLAogCQkJCSAgICAgc2ctPmRtYV9sZW5ndGgsIGRpcik7CiAJCWVsc2UgaWYgKGRpciA9PSBETUFfRlJPTV9ERVZJQ0UpCi0JCQlkbWFfbWFya19jbGVhbihzZ192aXJ0KHNnKSwgc2ctPmRtYV9sZW5ndGgpOworCQkJZG1hX21hcmtfY2xlYW4oc3dpb3RsYl9idXNfdG9fdmlydChzZy0+ZG1hX2FkZHJlc3MpLCBzZy0+ZG1hX2xlbmd0aCk7CiAJfQogfQogRVhQT1JUX1NZTUJPTChzd2lvdGxiX3VubWFwX3NnX2F0dHJzKTsKQEAgLTg5MiwxNyArODgyLDE3IEBACiAJQlVHX09OKGRpciA9PSBETUFfTk9ORSk7CiAKIAlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBuZWxlbXMsIGkpIHsKLQkJaWYgKHNnLT5kbWFfYWRkcmVzcyAhPSBzd2lvdGxiX3ZpcnRfdG9fYnVzKGh3ZGV2LCBzZ192aXJ0KHNnKSkpCisJCWlmIChzZy0+ZG1hX2FkZHJlc3MgIT0gc3dpb3RsYl9waHlzX3RvX2J1cyhod2Rldiwgc2dfcGh5cyhzZykpKQogCQkJc3luY19zaW5nbGUoaHdkZXYsIHN3aW90bGJfYnVzX3RvX3ZpcnQoc2ctPmRtYV9hZGRyZXNzKSwKIAkJCQkgICAgc2ctPmRtYV9sZW5ndGgsIGRpciwgdGFyZ2V0KTsKIAkJZWxzZSBpZiAoZGlyID09IERNQV9GUk9NX0RFVklDRSkKLQkJCWRtYV9tYXJrX2NsZWFuKHNnX3ZpcnQoc2cpLCBzZy0+ZG1hX2xlbmd0aCk7CisJCQlkbWFfbWFya19jbGVhbihzd2lvdGxiX2J1c190b192aXJ0KHNnLT5kbWFfYWRkcmVzcyksIHNnLT5kbWFfbGVuZ3RoKTsKIAl9CiB9CiAKIHZvaWQKIHN3aW90bGJfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJaW50IG5lbGVtcywgaW50IGRpcikKKwkJCWludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlzd2lvdGxiX3N5bmNfc2coaHdkZXYsIHNnLCBuZWxlbXMsIGRpciwgU1lOQ19GT1JfQ1BVKTsKIH0KQEAgLTkxMCw3ICs5MDAsNyBAQAogCiB2b2lkCiBzd2lvdGxiX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCSAgIGludCBuZWxlbXMsIGludCBkaXIpCisJCQkgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CiAJc3dpb3RsYl9zeW5jX3NnKGh3ZGV2LCBzZywgbmVsZW1zLCBkaXIsIFNZTkNfRk9SX0RFVklDRSk7CiB9CmRpZmYgLS1naXQgYS9tbS9hbGxvY3BlcmNwdS5jIGIvbW0vYWxsb2NwZXJjcHUuYwppbmRleCAxODgyOTIzLi4xMzlkNWI3IDEwMDY0NAotLS0gYS9tbS9hbGxvY3BlcmNwdS5jCisrKyBiL21tL2FsbG9jcGVyY3B1LmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogewogCWlmICh1bmxpa2VseSghX19wZGF0YSkpCiAJCXJldHVybjsKLQlfX3BlcmNwdV9kZXBvcHVsYXRlX21hc2soX19wZGF0YSwgJmNwdV9wb3NzaWJsZV9tYXApOworCV9fcGVyY3B1X2RlcG9wdWxhdGVfbWFzayhfX3BkYXRhLCBjcHVfcG9zc2libGVfbWFzayk7CiAJa2ZyZWUoX19wZXJjcHVfZGlzZ3Vpc2UoX19wZGF0YSkpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZnJlZV9wZXJjcHUpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCBiYWE5OTllLi4yMDMyYWQyIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtMTY2NSw5ICsxNjY1LDEwIEBACiAJICogYmVoYXZpb3VyIHRoYXQgc29tZSBwcm9ncmFtcyBkZXBlbmQgb24uIFdlIG1hcmsgdGhlICJvcmlnaW5hbCIKIAkgKiB1bi1DT1cnZWQgcGFnZXMgYnkgbWF0Y2hpbmcgdGhlbSB1cCB3aXRoICJ2bWEtPnZtX3Bnb2ZmIi4KIAkgKi8KLQlpZiAoYWRkciA9PSB2bWEtPnZtX3N0YXJ0ICYmIGVuZCA9PSB2bWEtPnZtX2VuZCkKKwlpZiAoYWRkciA9PSB2bWEtPnZtX3N0YXJ0ICYmIGVuZCA9PSB2bWEtPnZtX2VuZCkgewogCQl2bWEtPnZtX3Bnb2ZmID0gcGZuOwotCWVsc2UgaWYgKGlzX2Nvd19tYXBwaW5nKHZtYS0+dm1fZmxhZ3MpKQorCQl2bWEtPnZtX2ZsYWdzIHw9IFZNX1BGTl9BVF9NTUFQOworCX0gZWxzZSBpZiAoaXNfY293X21hcHBpbmcodm1hLT52bV9mbGFncykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJdm1hLT52bV9mbGFncyB8PSBWTV9JTyB8IFZNX1JFU0VSVkVEIHwgVk1fUEZOTUFQOwpAQCAtMTY3OSw2ICsxNjgwLDcgQEAKIAkJICogbmVlZGVkIGZyb20gaGlnaGVyIGxldmVsIHJvdXRpbmUgY2FsbGluZyB1bm1hcF92bWFzCiAJCSAqLwogCQl2bWEtPnZtX2ZsYWdzICY9IH4oVk1fSU8gfCBWTV9SRVNFUlZFRCB8IFZNX1BGTk1BUCk7CisJCXZtYS0+dm1fZmxhZ3MgJj0gflZNX1BGTl9BVF9NTUFQOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCA1YzQ0ZWQ0Li5hMzgwM2VhIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC0xNDc5LDYgKzE0NzksOCBAQAogCXVuc2lnbmVkIGxvbmcgZGlkX3NvbWVfcHJvZ3Jlc3M7CiAJdW5zaWduZWQgbG9uZyBwYWdlc19yZWNsYWltZWQgPSAwOwogCisJbG9ja2RlcF90cmFjZV9hbGxvYyhnZnBfbWFzayk7CisKIAltaWdodF9zbGVlcF9pZih3YWl0KTsKIAogCWlmIChzaG91bGRfZmFpbF9hbGxvY19wYWdlKGdmcF9tYXNrLCBvcmRlcikpCkBAIC0xNTc4LDEyICsxNTgwLDE1IEBACiAJICovCiAJY3B1c2V0X3VwZGF0ZV90YXNrX21lbW9yeV9zdGF0ZSgpOwogCXAtPmZsYWdzIHw9IFBGX01FTUFMTE9DOworCisJbG9ja2RlcF9zZXRfY3VycmVudF9yZWNsYWltX3N0YXRlKGdmcF9tYXNrKTsKIAlyZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiID0gMDsKIAlwLT5yZWNsYWltX3N0YXRlID0gJnJlY2xhaW1fc3RhdGU7CiAKIAlkaWRfc29tZV9wcm9ncmVzcyA9IHRyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBvcmRlciwgZ2ZwX21hc2spOwogCiAJcC0+cmVjbGFpbV9zdGF0ZSA9IE5VTEw7CisJbG9ja2RlcF9jbGVhcl9jdXJyZW50X3JlY2xhaW1fc3RhdGUoKTsKIAlwLT5mbGFncyAmPSB+UEZfTUVNQUxMT0M7CiAKIAljb25kX3Jlc2NoZWQoKTsKZGlmZiAtLWdpdCBhL21tL3BkZmx1c2guYyBiL21tL3BkZmx1c2guYwppbmRleCAxNWRlNTA5Li4xMTg5MDVlIDEwMDY0NAotLS0gYS9tbS9wZGZsdXNoLmMKKysrIGIvbW0vcGRmbHVzaC5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAogCS8qCiAJICogU29tZSBjb25maWdzIHB1dCBvdXIgcGFyZW50IGt0aHJlYWQgaW4gYSBsaW1pdGVkIGNwdXNldCwKLQkgKiB3aGljaCBrdGhyZWFkKCkgb3ZlcnJpZGVzLCBmb3JjaW5nIGNwdXNfYWxsb3dlZCA9PSBDUFVfTUFTS19BTEwuCisJICogd2hpY2gga3RocmVhZCgpIG92ZXJyaWRlcywgZm9yY2luZyBjcHVzX2FsbG93ZWQgPT0gY3B1X2FsbF9tYXNrLgogCSAqIE91ciBuZWVkcyBhcmUgbW9yZSBtb2Rlc3QgLSBjdXQgYmFjayB0byBvdXIgY3B1c2V0cyBjcHVzX2FsbG93ZWQuCiAJICogVGhpcyBpcyBuZWVkZWQgYXMgcGRmbHVzaCdzIGFyZSBkeW5hbWljYWxseSBjcmVhdGVkIGFuZCBkZXN0cm95ZWQuCiAJICogVGhlIGJvb3R0aW1lIHBkZmx1c2gncyBhcmUgZWFzaWx5IHBsYWNlZCB3L28gdGhlc2UgMiBsaW5lcy4KZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCA0ZDAwODU1Li44MjVjNjA2IDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC0zMzE4LDYgKzMzMTgsOCBAQAogCXVuc2lnbmVkIGxvbmcgc2F2ZV9mbGFnczsKIAl2b2lkICpwdHI7CiAKKwlsb2NrZGVwX3RyYWNlX2FsbG9jKGZsYWdzKTsKKwogCWlmIChzbGFiX3Nob3VsZF9mYWlsc2xhYihjYWNoZXAsIGZsYWdzKSkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTMzOTQsNiArMzM5Niw4IEBACiAJdW5zaWduZWQgbG9uZyBzYXZlX2ZsYWdzOwogCXZvaWQgKm9ianA7CiAKKwlsb2NrZGVwX3RyYWNlX2FsbG9jKGZsYWdzKTsKKwogCWlmIChzbGFiX3Nob3VsZF9mYWlsc2xhYihjYWNoZXAsIGZsYWdzKSkKIAkJcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL21tL3Nsb2IuYyBiL21tL3Nsb2IuYwppbmRleCAwYmZhNjgwLi43YTM0MTE1IDEwMDY0NAotLS0gYS9tbS9zbG9iLmMKKysrIGIvbW0vc2xvYi5jCkBAIC00NzUsNiArNDc1LDggQEAKIAl1bnNpZ25lZCBpbnQgKm07CiAJaW50IGFsaWduID0gbWF4KEFSQ0hfS01BTExPQ19NSU5BTElHTiwgQVJDSF9TTEFCX01JTkFMSUdOKTsKIAorCWxvY2tkZXBfdHJhY2VfYWxsb2MoZ2ZwKTsKKwogCWlmIChzaXplIDwgUEFHRV9TSVpFIC0gYWxpZ24pIHsKIAkJaWYgKCFzaXplKQogCQkJcmV0dXJuIFpFUk9fU0laRV9QVFI7CmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggYzY1YTRlZC4uYzRlYTkxNSAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCisrKyBiL21tL3NsdWIuYwpAQCAtMTU5MCw2ICsxNTkwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBvYmpzaXplOwogCisJbG9ja2RlcF90cmFjZV9hbGxvYyhnZnBmbGFncyk7CiAJbWlnaHRfc2xlZXBfaWYoZ2ZwZmxhZ3MgJiBfX0dGUF9XQUlUKTsKIAogCWlmIChzaG91bGRfZmFpbHNsYWIocy0+b2Jqc2l6ZSwgZ2ZwZmxhZ3MpKQpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA1NmRkZjQxLi40NzllNDY3IDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYworKysgYi9tbS92bXNjYW4uYwpAQCAtMTk2NSw2ICsxOTY1LDggQEAKIAl9OwogCW5vZGVfdG9fY3B1bWFza19wdHIoY3B1bWFzaywgcGdkYXQtPm5vZGVfaWQpOwogCisJbG9ja2RlcF9zZXRfY3VycmVudF9yZWNsYWltX3N0YXRlKEdGUF9LRVJORUwpOworCiAJaWYgKCFjcHVtYXNrX2VtcHR5KGNwdW1hc2spKQogCQlzZXRfY3B1c19hbGxvd2VkX3B0cih0c2ssIGNwdW1hc2spOwogCWN1cnJlbnQtPnJlY2xhaW1fc3RhdGUgPSAmcmVjbGFpbV9zdGF0ZTsKZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmMKaW5kZXggOTExNDk3NC4uOGNkODFlYSAxMDA2NDQKLS0tIGEvbW0vdm1zdGF0LmMKKysrIGIvbW0vdm1zdGF0LmMKQEAgLTI3LDcgKzI3LDcgQEAKIAogCW1lbXNldChyZXQsIDAsIE5SX1ZNX0VWRU5UX0lURU1TICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgKmNwdW1hc2spIHsKKwlmb3JfZWFjaF9jcHUoY3B1LCBjcHVtYXNrKSB7CiAJCXN0cnVjdCB2bV9ldmVudF9zdGF0ZSAqdGhpcyA9ICZwZXJfY3B1KHZtX2V2ZW50X3N0YXRlcywgY3B1KTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgTlJfVk1fRVZFTlRfSVRFTVM7IGkrKykKZGlmZiAtLWdpdCBhL25ldC9hcHBsZXRhbGsvYXRhbGtfcHJvYy5jIGIvbmV0L2FwcGxldGFsay9hdGFsa19wcm9jLmMKaW5kZXggMTYyMTk5YS4uZmQ4ZTA4NCAxMDA2NDQKLS0tIGEvbmV0L2FwcGxldGFsay9hdGFsa19wcm9jLmMKKysrIGIvbmV0L2FwcGxldGFsay9hdGFsa19wcm9jLmMKQEAgLTI4MSw3ICsyODEsNiBAQAogCWF0YWxrX3Byb2NfZGlyID0gcHJvY19ta2RpcigiYXRhbGsiLCBpbml0X25ldC5wcm9jX25ldCk7CiAJaWYgKCFhdGFsa19wcm9jX2RpcikKIAkJZ290byBvdXQ7Ci0JYXRhbGtfcHJvY19kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlwID0gcHJvY19jcmVhdGUoImludGVyZmFjZSIsIFNfSVJVR08sIGF0YWxrX3Byb2NfZGlyLAogCQkJJmF0YWxrX3NlcV9pbnRlcmZhY2VfZm9wcyk7CmRpZmYgLS1naXQgYS9uZXQvYXRtL21wb2FfcHJvYy5jIGIvbmV0L2F0bS9tcG9hX3Byb2MuYwppbmRleCA0OTkwNTQxLi4xYTBmNWNjIDEwMDY0NAotLS0gYS9uZXQvYXRtL21wb2FfcHJvYy5jCisrKyBiL25ldC9hdG0vbXBvYV9wcm9jLmMKQEAgLTI4MSw3ICsyODEsNiBAQAogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBpbml0aWFsaXplIC9wcm9jL2F0bS8lc1xuIiwgU1RBVF9GSUxFX05BTUUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JcC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcm9jLmMgYi9uZXQvYXRtL3Byb2MuYwppbmRleCA0OTQ4N2IzLi5lN2IzYjI3MyAxMDA2NDQKLS0tIGEvbmV0L2F0bS9wcm9jLmMKKysrIGIvbmV0L2F0bS9wcm9jLmMKQEAgLTQ3Niw3ICs0NzYsNiBAQAogCQkJCSAgICAgYXRtX3Byb2Nfcm9vdCwgZS0+cHJvY19mb3BzKTsKIAkJaWYgKCFkaXJlbnQpCiAJCQlnb3RvIGVycl9vdXRfcmVtb3ZlOwotCQlkaXJlbnQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCWUtPmRpcmVudCA9IGRpcmVudDsKIAl9CiAJcmV0ID0gMDsKZGlmZiAtLWdpdCBhL25ldC9jYW4vYmNtLmMgYi9uZXQvY2FuL2JjbS5jCmluZGV4IGI3YzdkNDYuLjk1ZDdmMzIgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vYmNtLmMKKysrIGIvbmV0L2Nhbi9iY20uYwpAQCAtMTYwNCwxMCArMTYwNCw2IEBACiAKIAkvKiBjcmVhdGUgL3Byb2MvbmV0L2Nhbi1iY20gZGlyZWN0b3J5ICovCiAJcHJvY19kaXIgPSBwcm9jX21rZGlyKCJjYW4tYmNtIiwgaW5pdF9uZXQucHJvY19uZXQpOwotCi0JaWYgKHByb2NfZGlyKQotCQlwcm9jX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvY2FuL3Byb2MuYyBiL25ldC9jYW4vcHJvYy5jCmluZGV4IDUyMGZlZjUuLjE0NjM2NTMgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vcHJvYy5jCisrKyBiL25ldC9jYW4vcHJvYy5jCkBAIC00NzMsOCArNDczLDYgQEAKIAkJcmV0dXJuOwogCX0KIAotCWNhbl9kaXItPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KIAkvKiBvd24gcHJvY2ZzIGVudHJpZXMgZnJvbSB0aGUgQUZfQ0FOIGNvcmUgKi8KIAlwZGVfdmVyc2lvbiAgICAgPSBjYW5fY3JlYXRlX3Byb2NfcmVhZGVudHJ5KENBTl9QUk9DX1ZFUlNJT04sIDA2NDQsCiAJCQkJCWNhbl9wcm9jX3JlYWRfdmVyc2lvbiwgTlVMTCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IDMyZDQxOWYuLjM3NzljMTQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BrdGdlbi5jCisrKyBiL25ldC9jb3JlL3BrdGdlbi5jCkBAIC0zODA2LDcgKzM4MDYsNiBAQAogCXBnX3Byb2NfZGlyID0gcHJvY19ta2RpcihQR19QUk9DX0RJUiwgaW5pdF9uZXQucHJvY19uZXQpOwogCWlmICghcGdfcHJvY19kaXIpCiAJCXJldHVybiAtRU5PREVWOwotCXBnX3Byb2NfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcGUgPSBwcm9jX2NyZWF0ZShQR0NUUkwsIDA2MDAsIHBnX3Byb2NfZGlyLCAmcGt0Z2VuX2ZvcHMpOwogCWlmIChwZSA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9jaXBzb19pcHY0LmMgYi9uZXQvaXB2NC9jaXBzb19pcHY0LmMKaW5kZXggN2JjOTkyOS4uMDM5Y2MxZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvY2lwc29faXB2NC5jCisrKyBiL25ldC9pcHY0L2NpcHNvX2lwdjQuYwpAQCAtMTk0MiwyMyArMTk0Miw4NSBAQAogfQogCiAvKioKLSAqIGNpcHNvX3Y0X3NvY2tfZGVsYXR0ciAtIERlbGV0ZSB0aGUgQ0lQU08gb3B0aW9uIGZyb20gYSBzb2NrZXQKLSAqIEBzazogdGhlIHNvY2tldAorICogY2lwc29fdjRfcmVxX3NldGF0dHIgLSBBZGQgYSBDSVBTTyBvcHRpb24gdG8gYSBjb25uZWN0aW9uIHJlcXVlc3Qgc29ja2V0CisgKiBAcmVxOiB0aGUgY29ubmVjdGlvbiByZXF1ZXN0IHNvY2tldAorICogQGRvaV9kZWY6IHRoZSBDSVBTTyBET0kgdG8gdXNlCisgKiBAc2VjYXR0cjogdGhlIHNwZWNpZmljIHNlY3VyaXR5IGF0dHJpYnV0ZXMgb2YgdGhlIHNvY2tldAogICoKICAqIERlc2NyaXB0aW9uOgotICogUmVtb3ZlcyB0aGUgQ0lQU08gb3B0aW9uIGZyb20gYSBzb2NrZXQsIGlmIHByZXNlbnQuCisgKiBTZXQgdGhlIENJUFNPIG9wdGlvbiBvbiB0aGUgZ2l2ZW4gc29ja2V0IHVzaW5nIHRoZSBET0kgZGVmaW5pdGlvbiBhbmQKKyAqIHNlY3VyaXR5IGF0dHJpYnV0ZXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzIGFuZAorICogbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCiAgKgogICovCi12b2lkIGNpcHNvX3Y0X3NvY2tfZGVsYXR0cihzdHJ1Y3Qgc29jayAqc2spCitpbnQgY2lwc29fdjRfcmVxX3NldGF0dHIoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAorCQkJIGNvbnN0IHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYsCisJCQkgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKIHsKLQl1OCBoZHJfZGVsdGE7Ci0Jc3RydWN0IGlwX29wdGlvbnMgKm9wdDsKLQlzdHJ1Y3QgaW5ldF9zb2NrICpza19pbmV0OworCWludCByZXRfdmFsID0gLUVQRVJNOworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7CisJdTMyIGJ1Zl9sZW47CisJdTMyIG9wdF9sZW47CisJc3RydWN0IGlwX29wdGlvbnMgKm9wdCA9IE5VTEw7CisJc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICpyZXFfaW5ldDsKIAotCXNrX2luZXQgPSBpbmV0X3NrKHNrKTsKLQlvcHQgPSBza19pbmV0LT5vcHQ7Ci0JaWYgKG9wdCA9PSBOVUxMIHx8IG9wdC0+Y2lwc28gPT0gMCkKLQkJcmV0dXJuOworCS8qIFdlIGFsbG9jYXRlIHRoZSBtYXhpbXVtIENJUFNPIG9wdGlvbiBzaXplIGhlcmUgc28gd2UgYXJlIHByb2JhYmx5CisJICogYmVpbmcgYSBsaXR0bGUgd2FzdGVmdWwsIGJ1dCBpdCBtYWtlcyBvdXIgbGlmZSBfbXVjaF8gZWFzaWVyIGxhdGVyCisJICogb24gYW5kIGFmdGVyIGFsbCB3ZSBhcmUgb25seSB0YWxraW5nIGFib3V0IDQwIGJ5dGVzLiAqLworCWJ1Zl9sZW4gPSBDSVBTT19WNF9PUFRfTEVOX01BWDsKKwlidWYgPSBrbWFsbG9jKGJ1Zl9sZW4sIEdGUF9BVE9NSUMpOworCWlmIChidWYgPT0gTlVMTCkgeworCQlyZXRfdmFsID0gLUVOT01FTTsKKwkJZ290byByZXFfc2V0YXR0cl9mYWlsdXJlOworCX0KKworCXJldF92YWwgPSBjaXBzb192NF9nZW5vcHQoYnVmLCBidWZfbGVuLCBkb2lfZGVmLCBzZWNhdHRyKTsKKwlpZiAocmV0X3ZhbCA8IDApCisJCWdvdG8gcmVxX3NldGF0dHJfZmFpbHVyZTsKKwlidWZfbGVuID0gcmV0X3ZhbDsKKworCS8qIFdlIGNhbid0IHVzZSBpcF9vcHRpb25zX2dldCgpIGRpcmVjdGx5IGJlY2F1c2UgaXQgbWFrZXMgYSBjYWxsIHRvCisJICogaXBfb3B0aW9uc19nZXRfYWxsb2MoKSB3aGljaCBhbGxvY2F0ZXMgbWVtb3J5IHdpdGggR0ZQX0tFUk5FTCBhbmQKKwkgKiB3ZSB3b24ndCBhbHdheXMgaGF2ZSBDQVBfTkVUX1JBVyBldmVuIHRob3VnaCB3ZSBfYWx3YXlzXyB3YW50IHRvCisJICogc2V0IHRoZSBJUE9QVF9DSVBTTyBvcHRpb24uICovCisJb3B0X2xlbiA9IChidWZfbGVuICsgMykgJiB+MzsKKwlvcHQgPSBremFsbG9jKHNpemVvZigqb3B0KSArIG9wdF9sZW4sIEdGUF9BVE9NSUMpOworCWlmIChvcHQgPT0gTlVMTCkgeworCQlyZXRfdmFsID0gLUVOT01FTTsKKwkJZ290byByZXFfc2V0YXR0cl9mYWlsdXJlOworCX0KKwltZW1jcHkob3B0LT5fX2RhdGEsIGJ1ZiwgYnVmX2xlbik7CisJb3B0LT5vcHRsZW4gPSBvcHRfbGVuOworCW9wdC0+Y2lwc28gPSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKKwlrZnJlZShidWYpOworCWJ1ZiA9IE5VTEw7CisKKwlyZXFfaW5ldCA9IGluZXRfcnNrKHJlcSk7CisJb3B0ID0geGNoZygmcmVxX2luZXQtPm9wdCwgb3B0KTsKKwlrZnJlZShvcHQpOworCisJcmV0dXJuIDA7CisKK3JlcV9zZXRhdHRyX2ZhaWx1cmU6CisJa2ZyZWUoYnVmKTsKKwlrZnJlZShvcHQpOworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqIGNpcHNvX3Y0X2RlbG9wdCAtIERlbGV0ZSB0aGUgQ0lQU08gb3B0aW9uIGZyb20gYSBzZXQgb2YgSVAgb3B0aW9ucworICogQG9wdF9wdHI6IElQIG9wdGlvbiBwb2ludGVyCisgKgorICogRGVzY3JpcHRpb246CisgKiBEZWxldGVzIHRoZSBDSVBTTyBJUCBvcHRpb24gZnJvbSBhIHNldCBvZiBJUCBvcHRpb25zIGFuZCBtYWtlcyB0aGUgbmVjZXNzYXJ5CisgKiBhZGp1c3RtZW50cyB0byB0aGUgSVAgb3B0aW9uIHN0cnVjdHVyZS4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZQorICogdmFsdWVzIG9uIGZhaWx1cmUuCisgKgorICovCitpbnQgY2lwc29fdjRfZGVsb3B0KHN0cnVjdCBpcF9vcHRpb25zICoqb3B0X3B0cikKK3sKKwlpbnQgaGRyX2RlbHRhID0gMDsKKwlzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0ID0gKm9wdF9wdHI7CiAKIAlpZiAob3B0LT5zcnIgfHwgb3B0LT5yciB8fCBvcHQtPnRzIHx8IG9wdC0+cm91dGVyX2FsZXJ0KSB7CiAJCXU4IGNpcHNvX2xlbjsKQEAgLTIwMDMsMTEgKzIwNjUsMzQgQEAKIAl9IGVsc2UgewogCQkvKiBvbmx5IHRoZSBjaXBzbyBvcHRpb24gd2FzIHByZXNlbnQgb24gdGhlIHNvY2tldCBzbyB3ZSBjYW4KIAkJICogcmVtb3ZlIHRoZSBlbnRpcmUgb3B0aW9uIHN0cnVjdCAqLwotCQlza19pbmV0LT5vcHQgPSBOVUxMOworCQkqb3B0X3B0ciA9IE5VTEw7CiAJCWhkcl9kZWx0YSA9IG9wdC0+b3B0bGVuOwogCQlrZnJlZShvcHQpOwogCX0KIAorCXJldHVybiBoZHJfZGVsdGE7Cit9CisKKy8qKgorICogY2lwc29fdjRfc29ja19kZWxhdHRyIC0gRGVsZXRlIHRoZSBDSVBTTyBvcHRpb24gZnJvbSBhIHNvY2tldAorICogQHNrOiB0aGUgc29ja2V0CisgKgorICogRGVzY3JpcHRpb246CisgKiBSZW1vdmVzIHRoZSBDSVBTTyBvcHRpb24gZnJvbSBhIHNvY2tldCwgaWYgcHJlc2VudC4KKyAqCisgKi8KK3ZvaWQgY2lwc29fdjRfc29ja19kZWxhdHRyKHN0cnVjdCBzb2NrICpzaykKK3sKKwlpbnQgaGRyX2RlbHRhOworCXN0cnVjdCBpcF9vcHRpb25zICpvcHQ7CisJc3RydWN0IGluZXRfc29jayAqc2tfaW5ldDsKKworCXNrX2luZXQgPSBpbmV0X3NrKHNrKTsKKwlvcHQgPSBza19pbmV0LT5vcHQ7CisJaWYgKG9wdCA9PSBOVUxMIHx8IG9wdC0+Y2lwc28gPT0gMCkKKwkJcmV0dXJuOworCisJaGRyX2RlbHRhID0gY2lwc29fdjRfZGVsb3B0KCZza19pbmV0LT5vcHQpOwogCWlmIChza19pbmV0LT5pc19pY3NrICYmIGhkcl9kZWx0YSA+IDApIHsKIAkJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICpza19jb25uID0gaW5ldF9jc2soc2spOwogCQlza19jb25uLT5pY3NrX2V4dF9oZHJfbGVuIC09IGhkcl9kZWx0YTsKQEAgLTIwMTYsNiArMjEwMSwyNyBAQAogfQogCiAvKioKKyAqIGNpcHNvX3Y0X3JlcV9kZWxhdHRyIC0gRGVsZXRlIHRoZSBDSVBTTyBvcHRpb24gZnJvbSBhIHJlcXVlc3Qgc29ja2V0CisgKiBAcmVnOiB0aGUgcmVxdWVzdCBzb2NrZXQKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFJlbW92ZXMgdGhlIENJUFNPIG9wdGlvbiBmcm9tIGEgcmVxdWVzdCBzb2NrZXQsIGlmIHByZXNlbnQuCisgKgorICovCit2b2lkIGNpcHNvX3Y0X3JlcV9kZWxhdHRyKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKK3sKKwlzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0OworCXN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqcmVxX2luZXQ7CisKKwlyZXFfaW5ldCA9IGluZXRfcnNrKHJlcSk7CisJb3B0ID0gcmVxX2luZXQtPm9wdDsKKwlpZiAob3B0ID09IE5VTEwgfHwgb3B0LT5jaXBzbyA9PSAwKQorCQlyZXR1cm47CisKKwljaXBzb192NF9kZWxvcHQoJnJlcV9pbmV0LT5vcHQpOworfQorCisvKioKICAqIGNpcHNvX3Y0X2dldGF0dHIgLSBIZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBjaXBzb192NF8qX2dldGF0dHIgZnVuY3Rpb25zCiAgKiBAY2lwc286IHRoZSBDSVBTTyB2NCBvcHRpb24KICAqIEBzZWNhdHRyOiB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3luY29va2llcy5jIGIvbmV0L2lwdjQvc3luY29va2llcy5jCmluZGV4IGQzNDZjMjIuLmIzNWE5NTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3N5bmNvb2tpZXMuYworKysgYi9uZXQvaXB2NC9zeW5jb29raWVzLmMKQEAgLTI4OCwxMCArMjg4LDYgQEAKIAlpZiAoIXJlcSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoc2VjdXJpdHlfaW5ldF9jb25uX3JlcXVlc3Qoc2ssIHNrYiwgcmVxKSkgewotCQlyZXFza19mcmVlKHJlcSk7Ci0JCWdvdG8gb3V0OwotCX0KIAlpcmVxID0gaW5ldF9yc2socmVxKTsKIAl0cmVxID0gdGNwX3JzayhyZXEpOwogCXRyZXEtPnJjdl9pc24JCT0gbnRvaGwodGgtPnNlcSkgLSAxOwpAQCAtMzIyLDYgKzMxOCwxMSBAQAogCQl9CiAJfQogCisJaWYgKHNlY3VyaXR5X2luZXRfY29ubl9yZXF1ZXN0KHNrLCBza2IsIHJlcSkpIHsKKwkJcmVxc2tfZnJlZShyZXEpOworCQlnb3RvIG91dDsKKwl9CisKIAlyZXEtPmV4cGlyZXMJPSAwVUw7CiAJcmVxLT5yZXRyYW5zCT0gMDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lwdjQuYyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKaW5kZXggZDBhMzE0OC4uNWQ0MjdmOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lwdjQuYworKysgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCkBAIC0xMjMwLDE0ICsxMjMwLDE1IEBACiAKIAl0Y3Bfb3BlbnJlcV9pbml0KHJlcSwgJnRtcF9vcHQsIHNrYik7CiAKLQlpZiAoc2VjdXJpdHlfaW5ldF9jb25uX3JlcXVlc3Qoc2ssIHNrYiwgcmVxKSkKLQkJZ290byBkcm9wX2FuZF9mcmVlOwotCiAJaXJlcSA9IGluZXRfcnNrKHJlcSk7CiAJaXJlcS0+bG9jX2FkZHIgPSBkYWRkcjsKIAlpcmVxLT5ybXRfYWRkciA9IHNhZGRyOwogCWlyZXEtPm5vX3NyY2NoZWNrID0gaW5ldF9zayhzayktPnRyYW5zcGFyZW50OwogCWlyZXEtPm9wdCA9IHRjcF92NF9zYXZlX29wdGlvbnMoc2ssIHNrYik7CisKKwlpZiAoc2VjdXJpdHlfaW5ldF9jb25uX3JlcXVlc3Qoc2ssIHNrYiwgcmVxKSkKKwkJZ290byBkcm9wX2FuZF9mcmVlOworCiAJaWYgKCF3YW50X2Nvb2tpZSkKIAkJVENQX0VDTl9jcmVhdGVfcmVxdWVzdChyZXEsIHRjcF9oZHIoc2tiKSk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lycHJvYy5jIGIvbmV0L2lyZGEvaXJwcm9jLmMKaW5kZXggODhlODBhMy4uOGZmMTg2MSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJwcm9jLmMKKysrIGIvbmV0L2lyZGEvaXJwcm9jLmMKQEAgLTcwLDcgKzcwLDYgQEAKIAlwcm9jX2lyZGEgPSBwcm9jX21rZGlyKCJpcmRhIiwgaW5pdF9uZXQucHJvY19uZXQpOwogCWlmIChwcm9jX2lyZGEgPT0gTlVMTCkKIAkJcmV0dXJuOwotCXByb2NfaXJkYS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlyZGFfZGlycyk7IGkrKykKIAkJZCA9IHByb2NfY3JlYXRlKGlyZGFfZGlyc1tpXS5uYW1lLCAwLCBwcm9jX2lyZGEsCmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19wcm9jLmMgYi9uZXQvbGxjL2xsY19wcm9jLmMKaW5kZXggYjU4YmQ3Yy4uZDIwOGIzMyAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfcHJvYy5jCisrKyBiL25ldC9sbGMvbGxjX3Byb2MuYwpAQCAtMjM2LDcgKzIzNiw2IEBACiAJbGxjX3Byb2NfZGlyID0gcHJvY19ta2RpcigibGxjIiwgaW5pdF9uZXQucHJvY19uZXQpOwogCWlmICghbGxjX3Byb2NfZGlyKQogCQlnb3RvIG91dDsKLQlsbGNfcHJvY19kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlwID0gcHJvY19jcmVhdGUoInNvY2tldCIsIFNfSVJVR08sIGxsY19wcm9jX2RpciwgJmxsY19zZXFfc29ja2V0X2ZvcHMpOwogCWlmICghcCkKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfa2FwaS5jCmluZGV4IGZkOTIyOWQuLmIwZTU4MmYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2thcGkuYwpAQCAtNjE5LDggKzYxOSw5IEBACiB9CiAKIC8qKgotICogbmV0bGJsX3NvY2tldF9zZXRhdHRyIC0gTGFiZWwgYSBzb2NrZXQgdXNpbmcgdGhlIGNvcnJlY3QgcHJvdG9jb2wKKyAqIG5ldGxibF9zb2NrX3NldGF0dHIgLSBMYWJlbCBhIHNvY2tldCB1c2luZyB0aGUgY29ycmVjdCBwcm90b2NvbAogICogQHNrOiB0aGUgc29ja2V0IHRvIGxhYmVsCisgKiBAZmFtaWx5OiBwcm90b2NvbCBmYW1pbHkKICAqIEBzZWNhdHRyOiB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcwogICoKICAqIERlc2NyaXB0aW9uOgpAQCAtNjMzLDI5ICs2MzQsNDUgQEAKICAqCiAgKi8KIGludCBuZXRsYmxfc29ja19zZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKKwkJCXUxNiBmYW1pbHksCiAJCQljb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogewotCWludCByZXRfdmFsID0gLUVOT0VOVDsKKwlpbnQgcmV0X3ZhbDsKIAlzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmRvbV9lbnRyeTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlkb21fZW50cnkgPSBuZXRsYmxfZG9taHNoX2dldGVudHJ5KHNlY2F0dHItPmRvbWFpbik7Ci0JaWYgKGRvbV9lbnRyeSA9PSBOVUxMKQorCWlmIChkb21fZW50cnkgPT0gTlVMTCkgeworCQlyZXRfdmFsID0gLUVOT0VOVDsKIAkJZ290byBzb2NrZXRfc2V0YXR0cl9yZXR1cm47Ci0Jc3dpdGNoIChkb21fZW50cnktPnR5cGUpIHsKLQljYXNlIE5FVExCTF9OTFRZUEVfQUREUlNFTEVDVDoKLQkJcmV0X3ZhbCA9IC1FREVTVEFERFJSRVE7CisJfQorCXN3aXRjaCAoZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlzd2l0Y2ggKGRvbV9lbnRyeS0+dHlwZSkgeworCQljYXNlIE5FVExCTF9OTFRZUEVfQUREUlNFTEVDVDoKKwkJCXJldF92YWwgPSAtRURFU1RBRERSUkVROworCQkJYnJlYWs7CisJCWNhc2UgTkVUTEJMX05MVFlQRV9DSVBTT1Y0OgorCQkJcmV0X3ZhbCA9IGNpcHNvX3Y0X3NvY2tfc2V0YXR0cihzaywKKwkJCQkJCSAgICBkb21fZW50cnktPnR5cGVfZGVmLmNpcHNvdjQsCisJCQkJCQkgICAgc2VjYXR0cik7CisJCQlicmVhazsKKwkJY2FzZSBORVRMQkxfTkxUWVBFX1VOTEFCRUxFRDoKKwkJCXJldF92YWwgPSAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXRfdmFsID0gLUVOT0VOVDsKKwkJfQogCQlicmVhazsKLQljYXNlIE5FVExCTF9OTFRZUEVfQ0lQU09WNDoKLQkJcmV0X3ZhbCA9IGNpcHNvX3Y0X3NvY2tfc2V0YXR0cihzaywKLQkJCQkJCWRvbV9lbnRyeS0+dHlwZV9kZWYuY2lwc292NCwKLQkJCQkJCXNlY2F0dHIpOwotCQlicmVhazsKLQljYXNlIE5FVExCTF9OTFRZUEVfVU5MQUJFTEVEOgorI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCWNhc2UgQUZfSU5FVDY6CisJCS8qIHNpbmNlIHdlIGRvbid0IHN1cHBvcnQgYW55IElQdjYgbGFiZWxpbmcgcHJvdG9jb2xzIHJpZ2h0CisJCSAqIG5vdyB3ZSBjYW4gb3B0aW1pemUgZXZlcnl0aGluZyBhd2F5IHVudGlsIHdlIGRvICovCiAJCXJldF92YWwgPSAwOwogCQlicmVhazsKKyNlbmRpZiAvKiBJUHY2ICovCiAJZGVmYXVsdDoKLQkJcmV0X3ZhbCA9IC1FTk9FTlQ7CisJCXJldF92YWwgPSAtRVBST1RPTk9TVVBQT1JUOwogCX0KIAogc29ja2V0X3NldGF0dHJfcmV0dXJuOgpAQCAtNjg5LDkgKzcwNiwyNSBAQAogICogb24gZmFpbHVyZS4KICAqCiAgKi8KLWludCBuZXRsYmxfc29ja19nZXRhdHRyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKK2ludCBuZXRsYmxfc29ja19nZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKKwkJCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCiB7Ci0JcmV0dXJuIGNpcHNvX3Y0X3NvY2tfZ2V0YXR0cihzaywgc2VjYXR0cik7CisJaW50IHJldF92YWw7CisKKwlzd2l0Y2ggKHNrLT5za19mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCXJldF92YWwgPSBjaXBzb192NF9zb2NrX2dldGF0dHIoc2ssIHNlY2F0dHIpOworCQlicmVhazsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwljYXNlIEFGX0lORVQ2OgorCQlyZXRfdmFsID0gLUVOT01TRzsKKwkJYnJlYWs7CisjZW5kaWYgLyogSVB2NiAqLworCWRlZmF1bHQ6CisJCXJldF92YWwgPSAtRVBST1RPTk9TVVBQT1JUOworCX0KKworCXJldHVybiByZXRfdmFsOwogfQogCiAvKioKQEAgLTc0OCw3ICs3ODEsNyBAQAogCQlicmVhazsKICNlbmRpZiAvKiBJUHY2ICovCiAJZGVmYXVsdDoKLQkJcmV0X3ZhbCA9IDA7CisJCXJldF92YWwgPSAtRVBST1RPTk9TVVBQT1JUOwogCX0KIAogY29ubl9zZXRhdHRyX3JldHVybjoKQEAgLTc1Nyw2ICs3OTAsOTAgQEAKIH0KIAogLyoqCisgKiBuZXRsYmxfcmVxX3NldGF0dHIgLSBMYWJlbCBhIHJlcXVlc3Qgc29ja2V0IHVzaW5nIHRoZSBjb3JyZWN0IHByb3RvY29sCisgKiBAcmVxOiB0aGUgcmVxdWVzdCBzb2NrZXQgdG8gbGFiZWwKKyAqIEBzZWNhdHRyOiB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcworICoKKyAqIERlc2NyaXB0aW9uOgorICogQXR0YWNoIHRoZSBjb3JyZWN0IGxhYmVsIHRvIHRoZSBnaXZlbiBzb2NrZXQgdXNpbmcgdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKKyAqIHNwZWNpZmllZCBpbiBAc2VjYXR0ci4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KKyAqCisgKi8KK2ludCBuZXRsYmxfcmVxX3NldGF0dHIoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAorCQkgICAgICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKK3sKKwlpbnQgcmV0X3ZhbDsKKwlzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmRvbV9lbnRyeTsKKwlzdHJ1Y3QgbmV0bGJsX2RvbWFkZHI0X21hcCAqYWY0X2VudHJ5OworCXUzMiBwcm90b190eXBlOworCXN0cnVjdCBjaXBzb192NF9kb2kgKnByb3RvX2N2NDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlkb21fZW50cnkgPSBuZXRsYmxfZG9taHNoX2dldGVudHJ5KHNlY2F0dHItPmRvbWFpbik7CisJaWYgKGRvbV9lbnRyeSA9PSBOVUxMKSB7CisJCXJldF92YWwgPSAtRU5PRU5UOworCQlnb3RvIHJlcV9zZXRhdHRyX3JldHVybjsKKwl9CisJc3dpdGNoIChyZXEtPnJza19vcHMtPmZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJaWYgKGRvbV9lbnRyeS0+dHlwZSA9PSBORVRMQkxfTkxUWVBFX0FERFJTRUxFQ1QpIHsKKwkJCXN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqcmVxX2luZXQgPSBpbmV0X3JzayhyZXEpOworCQkJYWY0X2VudHJ5ID0gbmV0bGJsX2RvbWhzaF9nZXRlbnRyeV9hZjQoc2VjYXR0ci0+ZG9tYWluLAorCQkJCQkJCSAgICByZXFfaW5ldC0+cm10X2FkZHIpOworCQkJaWYgKGFmNF9lbnRyeSA9PSBOVUxMKSB7CisJCQkJcmV0X3ZhbCA9IC1FTk9FTlQ7CisJCQkJZ290byByZXFfc2V0YXR0cl9yZXR1cm47CisJCQl9CisJCQlwcm90b190eXBlID0gYWY0X2VudHJ5LT50eXBlOworCQkJcHJvdG9fY3Y0ID0gYWY0X2VudHJ5LT50eXBlX2RlZi5jaXBzb3Y0OworCQl9IGVsc2UgeworCQkJcHJvdG9fdHlwZSA9IGRvbV9lbnRyeS0+dHlwZTsKKwkJCXByb3RvX2N2NCA9IGRvbV9lbnRyeS0+dHlwZV9kZWYuY2lwc292NDsKKwkJfQorCQlzd2l0Y2ggKHByb3RvX3R5cGUpIHsKKwkJY2FzZSBORVRMQkxfTkxUWVBFX0NJUFNPVjQ6CisJCQlyZXRfdmFsID0gY2lwc29fdjRfcmVxX3NldGF0dHIocmVxLCBwcm90b19jdjQsIHNlY2F0dHIpOworCQkJYnJlYWs7CisJCWNhc2UgTkVUTEJMX05MVFlQRV9VTkxBQkVMRUQ6CisJCQkvKiBqdXN0IGRlbGV0ZSB0aGUgcHJvdG9jb2xzIHdlIHN1cHBvcnQgZm9yIHJpZ2h0IG5vdworCQkJICogYnV0IHdlIGNvdWxkIHJlbW92ZSBvdGhlciBwcm90b2NvbHMgaWYgbmVlZGVkICovCisJCQljaXBzb192NF9yZXFfZGVsYXR0cihyZXEpOworCQkJcmV0X3ZhbCA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldF92YWwgPSAtRU5PRU5UOworCQl9CisJCWJyZWFrOworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCWNhc2UgQUZfSU5FVDY6CisJCS8qIHNpbmNlIHdlIGRvbid0IHN1cHBvcnQgYW55IElQdjYgbGFiZWxpbmcgcHJvdG9jb2xzIHJpZ2h0CisJCSAqIG5vdyB3ZSBjYW4gb3B0aW1pemUgZXZlcnl0aGluZyBhd2F5IHVudGlsIHdlIGRvICovCisJCXJldF92YWwgPSAwOworCQlicmVhazsKKyNlbmRpZiAvKiBJUHY2ICovCisJZGVmYXVsdDoKKwkJcmV0X3ZhbCA9IC1FUFJPVE9OT1NVUFBPUlQ7CisJfQorCityZXFfc2V0YXR0cl9yZXR1cm46CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorKiBuZXRsYmxfcmVxX2RlbGF0dHIgLSBEZWxldGUgYWxsIHRoZSBOZXRMYWJlbCBsYWJlbHMgb24gYSBzb2NrZXQKKyogQHJlcTogdGhlIHNvY2tldAorKgorKiBEZXNjcmlwdGlvbjoKKyogUmVtb3ZlIGFsbCB0aGUgTmV0TGFiZWwgbGFiZWxpbmcgZnJvbSBAcmVxLgorKgorKi8KK3ZvaWQgbmV0bGJsX3JlcV9kZWxhdHRyKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKK3sKKwljaXBzb192NF9yZXFfZGVsYXR0cihyZXEpOworfQorCisvKioKICAqIG5ldGxibF9za2J1ZmZfc2V0YXR0ciAtIExhYmVsIGEgcGFja2V0IHVzaW5nIHRoZSBjb3JyZWN0IHByb3RvY29sCiAgKiBAc2tiOiB0aGUgcGFja2V0CiAgKiBAZmFtaWx5OiBwcm90b2NvbCBmYW1pbHkKQEAgLTgwOCw3ICs5MjUsNyBAQAogCQlicmVhazsKICNlbmRpZiAvKiBJUHY2ICovCiAJZGVmYXVsdDoKLQkJcmV0X3ZhbCA9IDA7CisJCXJldF92YWwgPSAtRVBST1RPTk9TVVBQT1JUOwogCX0KIAogc2tidWZmX3NldGF0dHJfcmV0dXJuOgpAQCAtODMzLDkgKzk1MCwxNyBAQAogCQkJICB1MTYgZmFtaWx5LAogCQkJICBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogewotCWlmIChDSVBTT19WNF9PUFRFWElTVChza2IpICYmCi0JICAgIGNpcHNvX3Y0X3NrYnVmZl9nZXRhdHRyKHNrYiwgc2VjYXR0cikgPT0gMCkKLQkJcmV0dXJuIDA7CisJc3dpdGNoIChmYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCWlmIChDSVBTT19WNF9PUFRFWElTVChza2IpICYmCisJCSAgICBjaXBzb192NF9za2J1ZmZfZ2V0YXR0cihza2IsIHNlY2F0dHIpID09IDApCisJCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJY2FzZSBBRl9JTkVUNjoKKwkJYnJlYWs7CisjZW5kaWYgLyogSVB2NiAqLworCX0KIAogCXJldHVybiBuZXRsYmxfdW5sYWJlbF9nZXRhdHRyKHNrYiwgZmFtaWx5LCBzZWNhdHRyKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9zY3RwL3Byb3RvY29sLmMgYi9uZXQvc2N0cC9wcm90b2NvbC5jCmluZGV4IGNiMTk4YWYuLjhlYjNlNjEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3Byb3RvY29sLmMKKysrIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwpAQCAtMTA2LDEyICsxMDYsOCBAQAogCQlnb3RvIG91dF9ub21lbTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCWlmICghcHJvY19uZXRfc2N0cCkgewotCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKLQkJZW50ID0gcHJvY19ta2Rpcigic2N0cCIsIGluaXRfbmV0LnByb2NfbmV0KTsKLQkJaWYgKGVudCkgewotCQkJZW50LT5vd25lciA9IFRISVNfTU9EVUxFOwotCQkJcHJvY19uZXRfc2N0cCA9IGVudDsKLQkJfSBlbHNlCisJCXByb2NfbmV0X3NjdHAgPSBwcm9jX21rZGlyKCJzY3RwIiwgaW5pdF9uZXQucHJvY19uZXQpOworCQlpZiAoIXByb2NfbmV0X3NjdHApCiAJCQlnb3RvIG91dF9mcmVlX3BlcmNwdTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuYwppbmRleCAwYjE0Yjc5Li45MWQwYzAyIDEwMDY0NAotLS0gYS9uZXQvc29ja2V0LmMKKysrIGIvbmV0L3NvY2tldC5jCkBAIC0xNTM2LDggKzE1MzYsNiBAQAogCWZkX2luc3RhbGwobmV3ZmQsIG5ld2ZpbGUpOwogCWVyciA9IG5ld2ZkOwogCi0Jc2VjdXJpdHlfc29ja2V0X3Bvc3RfYWNjZXB0KHNvY2ssIG5ld3NvY2spOwotCiBvdXRfcHV0OgogCWZwdXRfbGlnaHQoc29jay0+ZmlsZSwgZnB1dF9uZWVkZWQpOwogb3V0OgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9jYWNoZS5jIGIvbmV0L3N1bnJwYy9jYWNoZS5jCmluZGV4IDQ3MzVjYWEuLjIwMDI5YTcgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvY2FjaGUuYworKysgYi9uZXQvc3VucnBjL2NhY2hlLmMKQEAgLTMxMyw3ICszMTMsNiBAQAogCWNkLT5wcm9jX2VudCA9IHByb2NfbWtkaXIoY2QtPm5hbWUsIHByb2NfbmV0X3JwYyk7CiAJaWYgKGNkLT5wcm9jX2VudCA9PSBOVUxMKQogCQlnb3RvIG91dF9ub21lbTsKLQljZC0+cHJvY19lbnQtPm93bmVyID0gY2QtPm93bmVyOwogCWNkLT5jaGFubmVsX2VudCA9IGNkLT5jb250ZW50X2VudCA9IE5VTEw7CiAKIAlwID0gcHJvY19jcmVhdGVfZGF0YSgiZmx1c2giLCBTX0lGUkVHfFNfSVJVU1J8U19JV1VTUiwKQEAgLTMyMSw3ICszMjAsNiBAQAogCWNkLT5mbHVzaF9lbnQgPSBwOwogCWlmIChwID09IE5VTEwpCiAJCWdvdG8gb3V0X25vbWVtOwotCXAtPm93bmVyID0gY2QtPm93bmVyOwogCiAJaWYgKGNkLT5jYWNoZV9yZXF1ZXN0IHx8IGNkLT5jYWNoZV9wYXJzZSkgewogCQlwID0gcHJvY19jcmVhdGVfZGF0YSgiY2hhbm5lbCIsIFNfSUZSRUd8U19JUlVTUnxTX0lXVVNSLApAQCAtMzI5LDcgKzMyNyw2IEBACiAJCWNkLT5jaGFubmVsX2VudCA9IHA7CiAJCWlmIChwID09IE5VTEwpCiAJCQlnb3RvIG91dF9ub21lbTsKLQkJcC0+b3duZXIgPSBjZC0+b3duZXI7CiAJfQogCWlmIChjZC0+Y2FjaGVfc2hvdykgewogCQlwID0gcHJvY19jcmVhdGVfZGF0YSgiY29udGVudCIsIFNfSUZSRUd8U19JUlVTUnxTX0lXVVNSLApAQCAtMzM3LDcgKzMzNCw2IEBACiAJCWNkLT5jb250ZW50X2VudCA9IHA7CiAJCWlmIChwID09IE5VTEwpCiAJCQlnb3RvIG91dF9ub21lbTsKLQkJcC0+b3duZXIgPSBjZC0+b3duZXI7CiAJfQogCXJldHVybiAwOwogb3V0X25vbWVtOgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdGF0cy5jIGIvbmV0L3N1bnJwYy9zdGF0cy5jCmluZGV4IDA4NTM3MmUuLjFlZjZlNDYgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3RhdHMuYworKysgYi9uZXQvc3VucnBjL3N0YXRzLmMKQEAgLTI2MiwxNCArMjYyLDggQEAKIHJwY19wcm9jX2luaXQodm9pZCkKIHsKIAlkcHJpbnRrKCJSUEM6ICAgICAgIHJlZ2lzdGVyaW5nIC9wcm9jL25ldC9ycGNcbiIpOwotCWlmICghcHJvY19uZXRfcnBjKSB7Ci0JCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50OwotCQllbnQgPSBwcm9jX21rZGlyKCJycGMiLCBpbml0X25ldC5wcm9jX25ldCk7Ci0JCWlmIChlbnQpIHsKLQkJCWVudC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkJCXByb2NfbmV0X3JwYyA9IGVudDsKLQkJfQotCX0KKwlpZiAoIXByb2NfbmV0X3JwYykKKwkJcHJvY19uZXRfcnBjID0gcHJvY19ta2RpcigicnBjIiwgaW5pdF9uZXQucHJvY19uZXQpOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Yy5jIGIvbmV0L3N1bnJwYy9zdmMuYwppbmRleCBjNTFmZWQ0Li5iYjUwN2UyIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Yy5jCisrKyBiL25ldC9zdW5ycGMvc3ZjLmMKQEAgLTMxMiw3ICszMTIsNyBAQAogCXN3aXRjaCAobS0+bW9kZSkgewogCWNhc2UgU1ZDX1BPT0xfUEVSQ1BVOgogCXsKLQkJc2V0X2NwdXNfYWxsb3dlZF9wdHIodGFzaywgJmNwdW1hc2tfb2ZfY3B1KG5vZGUpKTsKKwkJc2V0X2NwdXNfYWxsb3dlZF9wdHIodGFzaywgY3B1bWFza19vZihub2RlKSk7CiAJCWJyZWFrOwogCX0KIAljYXNlIFNWQ19QT09MX1BFUk5PREU6CmRpZmYgLS1naXQgYS9zZWN1cml0eS9jYXBhYmlsaXR5LmMgYi9zZWN1cml0eS9jYXBhYmlsaXR5LmMKaW5kZXggYzU0NWJkMS4uMjFiNmNlYSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvY2FwYWJpbGl0eS5jCisrKyBiL3NlY3VyaXR5L2NhcGFiaWxpdHkuYwpAQCAtNjIwLDEwICs2MjAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjYXBfc29ja2V0X3Bvc3RfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2spCi17Ci19Ci0KIHN0YXRpYyBpbnQgY2FwX3NvY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHNpemUpCiB7CiAJcmV0dXJuIDA7CkBAIC0xMDE0LDcgKzEwMTAsNiBAQAogCXNldF90b19jYXBfaWZfbnVsbChvcHMsIHNvY2tldF9jb25uZWN0KTsKIAlzZXRfdG9fY2FwX2lmX251bGwob3BzLCBzb2NrZXRfbGlzdGVuKTsKIAlzZXRfdG9fY2FwX2lmX251bGwob3BzLCBzb2NrZXRfYWNjZXB0KTsKLQlzZXRfdG9fY2FwX2lmX251bGwob3BzLCBzb2NrZXRfcG9zdF9hY2NlcHQpOwogCXNldF90b19jYXBfaWZfbnVsbChvcHMsIHNvY2tldF9zZW5kbXNnKTsKIAlzZXRfdG9fY2FwX2lmX251bGwob3BzLCBzb2NrZXRfcmVjdm1zZyk7CiAJc2V0X3RvX2NhcF9pZl9udWxsKG9wcywgc29ja2V0X2dldHNvY2tuYW1lKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IGMzNTg2YzAuLjIwNmU1MzggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtMTAwNywxMSArMTAwNyw2IEBACiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+c29ja2V0X2FjY2VwdChzb2NrLCBuZXdzb2NrKTsKIH0KIAotdm9pZCBzZWN1cml0eV9zb2NrZXRfcG9zdF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaykKLXsKLQlzZWN1cml0eV9vcHMtPnNvY2tldF9wb3N0X2FjY2VwdChzb2NrLCBuZXdzb2NrKTsKLX0KLQogaW50IHNlY3VyaXR5X3NvY2tldF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IHNpemUpCiB7CiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+c29ja2V0X3NlbmRtc2coc29jaywgbXNnLCBzaXplKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCA3YzUyYmEyLi5iYTgwOGVmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC05Myw3ICs5Myw2IEBACiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgcG9saWN5ZGJfbG9hZGVkX3ZlcnNpb247CiBleHRlcm4gaW50IHNlbGludXhfbmxtc2dfbG9va3VwKHUxNiBzY2xhc3MsIHUxNiBubG1zZ190eXBlLCB1MzIgKnBlcm0pOwotZXh0ZXJuIGludCBzZWxpbnV4X2NvbXBhdF9uZXQ7CiBleHRlcm4gc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgKnNlY3VyaXR5X29wczsKIAogLyogU0VDTUFSSyByZWZlcmVuY2UgY291bnQgKi8KQEAgLTMxMSw3ICszMTAsNyBAQAogCXNzZWMtPnNpZCA9IFNFQ0lOSVRTSURfVU5MQUJFTEVEOwogCXNrLT5za19zZWN1cml0eSA9IHNzZWM7CiAKLQlzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldChzc2VjLCBmYW1pbHkpOworCXNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0KHNzZWMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yOTQ1LDcgKzI5NDQsNiBAQAogc3RhdGljIGludCBzZWxpbnV4X3JldmFsaWRhdGVfZmlsZV9wZXJtaXNzaW9uKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbWFzaykKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwotCWludCByYzsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAogCWlmICghbWFzaykgewpAQCAtMjk1NywyOSArMjk1NSwxNSBAQAogCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSAmJiAobWFzayAmIE1BWV9XUklURSkpCiAJCW1hc2sgfD0gTUFZX0FQUEVORDsKIAotCXJjID0gZmlsZV9oYXNfcGVybShjcmVkLCBmaWxlLAotCQkJICAgZmlsZV9tYXNrX3RvX2F2KGlub2RlLT5pX21vZGUsIG1hc2spKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCXJldHVybiBzZWxpbnV4X25ldGxibF9pbm9kZV9wZXJtaXNzaW9uKGlub2RlLCBtYXNrKTsKKwlyZXR1cm4gZmlsZV9oYXNfcGVybShjcmVkLCBmaWxlLAorCQkJICAgICBmaWxlX21hc2tfdG9fYXYoaW5vZGUtPmlfbW9kZSwgbWFzaykpOwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfZmlsZV9wZXJtaXNzaW9uKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbWFzaykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgZmlsZV9zZWN1cml0eV9zdHJ1Y3QgKmZzZWMgPSBmaWxlLT5mX3NlY3VyaXR5OwotCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKLQl1MzIgc2lkID0gY3VycmVudF9zaWQoKTsKLQotCWlmICghbWFzaykgeworCWlmICghbWFzaykKIAkJLyogTm8gcGVybWlzc2lvbiB0byBjaGVjay4gIEV4aXN0ZW5jZSB0ZXN0LiAqLwogCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoc2lkID09IGZzZWMtPnNpZCAmJiBmc2VjLT5pc2lkID09IGlzZWMtPnNpZAotCSAgICAmJiBmc2VjLT5wc2Vxbm8gPT0gYXZjX3BvbGljeV9zZXFubygpKQotCQlyZXR1cm4gc2VsaW51eF9uZXRsYmxfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7CiAKIAlyZXR1cm4gc2VsaW51eF9yZXZhbGlkYXRlX2ZpbGVfcGVybWlzc2lvbihmaWxlLCBtYXNrKTsKIH0KQEAgLTM3MjMsNyArMzcwNyw3IEBACiAJCXNrc2VjID0gc29jay0+c2stPnNrX3NlY3VyaXR5OwogCQlza3NlYy0+c2lkID0gaXNlYy0+c2lkOwogCQlza3NlYy0+c2NsYXNzID0gaXNlYy0+c2NsYXNzOwotCQllcnIgPSBzZWxpbnV4X25ldGxibF9zb2NrZXRfcG9zdF9jcmVhdGUoc29jayk7CisJCWVyciA9IHNlbGludXhfbmV0bGJsX3NvY2tldF9wb3N0X2NyZWF0ZShzb2NrLT5zaywgZmFtaWx5KTsKIAl9CiAKIAlyZXR1cm4gZXJyOwpAQCAtMzkxNCwxMyArMzg5OCw3IEBACiBzdGF0aWMgaW50IHNlbGludXhfc29ja2V0X3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAogCQkJCSAgaW50IHNpemUpCiB7Ci0JaW50IHJjOwotCi0JcmMgPSBzb2NrZXRfaGFzX3Blcm0oY3VycmVudCwgc29jaywgU09DS0VUX19XUklURSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlyZXR1cm4gc2VsaW51eF9uZXRsYmxfaW5vZGVfcGVybWlzc2lvbihTT0NLX0lOT0RFKHNvY2spLCBNQVlfV1JJVEUpOworCXJldHVybiBzb2NrZXRfaGFzX3Blcm0oY3VycmVudCwgc29jaywgU09DS0VUX19XUklURSk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCkBAIC00MDQwLDcyICs0MDE4LDYgQEAKIAkJCSAgICBTRUNDTEFTU19OT0RFLCBOT0RFX19SRUNWRlJPTSwgYWQpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfc29ja19yY3Zfc2tiX2lwdGFibGVzX2NvbXBhdChzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkJc3RydWN0IGF2Y19hdWRpdF9kYXRhICphZCwKLQkJCQkJCXUxNiBmYW1pbHksCi0JCQkJCQljaGFyICphZGRycCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc2stPnNrX3NlY3VyaXR5OwotCXUxNiBza19jbGFzczsKLQl1MzIgbmV0aWZfcGVybSwgbm9kZV9wZXJtLCByZWN2X3Blcm07Ci0JdTMyIHBvcnRfc2lkLCBub2RlX3NpZCwgaWZfc2lkLCBza19zaWQ7Ci0KLQlza19zaWQgPSBza3NlYy0+c2lkOwotCXNrX2NsYXNzID0gc2tzZWMtPnNjbGFzczsKLQotCXN3aXRjaCAoc2tfY2xhc3MpIHsKLQljYXNlIFNFQ0NMQVNTX1VEUF9TT0NLRVQ6Ci0JCW5ldGlmX3Blcm0gPSBORVRJRl9fVURQX1JFQ1Y7Ci0JCW5vZGVfcGVybSA9IE5PREVfX1VEUF9SRUNWOwotCQlyZWN2X3Blcm0gPSBVRFBfU09DS0VUX19SRUNWX01TRzsKLQkJYnJlYWs7Ci0JY2FzZSBTRUNDTEFTU19UQ1BfU09DS0VUOgotCQluZXRpZl9wZXJtID0gTkVUSUZfX1RDUF9SRUNWOwotCQlub2RlX3Blcm0gPSBOT0RFX19UQ1BfUkVDVjsKLQkJcmVjdl9wZXJtID0gVENQX1NPQ0tFVF9fUkVDVl9NU0c7Ci0JCWJyZWFrOwotCWNhc2UgU0VDQ0xBU1NfRENDUF9TT0NLRVQ6Ci0JCW5ldGlmX3Blcm0gPSBORVRJRl9fRENDUF9SRUNWOwotCQlub2RlX3Blcm0gPSBOT0RFX19EQ0NQX1JFQ1Y7Ci0JCXJlY3ZfcGVybSA9IERDQ1BfU09DS0VUX19SRUNWX01TRzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbmV0aWZfcGVybSA9IE5FVElGX19SQVdJUF9SRUNWOwotCQlub2RlX3Blcm0gPSBOT0RFX19SQVdJUF9SRUNWOwotCQlyZWN2X3Blcm0gPSAwOwotCQlicmVhazsKLQl9Ci0KLQllcnIgPSBzZWxfbmV0aWZfc2lkKHNrYi0+aWlmLCAmaWZfc2lkKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCWVyciA9IGF2Y19oYXNfcGVybShza19zaWQsIGlmX3NpZCwgU0VDQ0xBU1NfTkVUSUYsIG5ldGlmX3Blcm0sIGFkKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gc2VsX25ldG5vZGVfc2lkKGFkZHJwLCBmYW1pbHksICZub2RlX3NpZCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBhdmNfaGFzX3Blcm0oc2tfc2lkLCBub2RlX3NpZCwgU0VDQ0xBU1NfTk9ERSwgbm9kZV9wZXJtLCBhZCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWlmICghcmVjdl9wZXJtKQotCQlyZXR1cm4gMDsKLQllcnIgPSBzZWxfbmV0cG9ydF9zaWQoc2stPnNrX3Byb3RvY29sLAotCQkJICAgICAgbnRvaHMoYWQtPnUubmV0LnNwb3J0KSwgJnBvcnRfc2lkKTsKLQlpZiAodW5saWtlbHkoZXJyKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiU0VMaW51eDogZmFpbHVyZSBpbiIKLQkJICAgICAgICIgc2VsaW51eF9zb2NrX3Jjdl9za2JfaXB0YWJsZXNfY29tcGF0KCksIgotCQkgICAgICAgIiBuZXR3b3JrIHBvcnQgbGFiZWwgbm90IGZvdW5kXG4iKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIGF2Y19oYXNfcGVybShza19zaWQsIHBvcnRfc2lkLCBza19jbGFzcywgcmVjdl9wZXJtLCBhZCk7Ci19Ci0KIHN0YXRpYyBpbnQgc2VsaW51eF9zb2NrX3Jjdl9za2JfY29tcGF0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgICAgdTE2IGZhbWlseSkKIHsKQEAgLTQxMjMsMTQgKzQwMzUsMTIgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKHNlbGludXhfY29tcGF0X25ldCkKLQkJZXJyID0gc2VsaW51eF9zb2NrX3Jjdl9za2JfaXB0YWJsZXNfY29tcGF0KHNrLCBza2IsICZhZCwKLQkJCQkJCQkgICBmYW1pbHksIGFkZHJwKTsKLQllbHNlIGlmIChzZWxpbnV4X3NlY21hcmtfZW5hYmxlZCgpKQorCWlmIChzZWxpbnV4X3NlY21hcmtfZW5hYmxlZCgpKSB7CiAJCWVyciA9IGF2Y19oYXNfcGVybShza19zaWQsIHNrYi0+c2VjbWFyaywgU0VDQ0xBU1NfUEFDS0VULAogCQkJCSAgIFBBQ0tFVF9fUkVDViwgJmFkKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CiAKIAlpZiAoc2VsaW51eF9wb2xpY3ljYXBfbmV0cGVlcikgewogCQllcnIgPSBzZWxpbnV4X3NrYl9wZWVybGJsX3NpZChza2IsIGZhbWlseSwgJnBlZXJfc2lkKTsKQEAgLTQxNzIsNyArNDA4Miw3IEBACiAJICogdG8gdGhlIHNlbGludXhfc29ja19yY3Zfc2tiX2NvbXBhdCgpIGZ1bmN0aW9uIHRvIGRlYWwgd2l0aCB0aGUKIAkgKiBzcGVjaWFsIGhhbmRsaW5nLiAgV2UgZG8gdGhpcyBpbiBhbiBhdHRlbXB0IHRvIGtlZXAgdGhpcyBmdW5jdGlvbgogCSAqIGFzIGZhc3QgYW5kIGFzIGNsZWFuIGFzIHBvc3NpYmxlLiAqLwotCWlmIChzZWxpbnV4X2NvbXBhdF9uZXQgfHwgIXNlbGludXhfcG9saWN5Y2FwX25ldHBlZXIpCisJaWYgKCFzZWxpbnV4X3BvbGljeWNhcF9uZXRwZWVyKQogCQlyZXR1cm4gc2VsaW51eF9zb2NrX3Jjdl9za2JfY29tcGF0KHNrLCBza2IsIGZhbWlseSk7CiAKIAlzZWNtYXJrX2FjdGl2ZSA9IHNlbGludXhfc2VjbWFya19lbmFibGVkKCk7CkBAIC00MzA0LDcgKzQyMTQsNyBAQAogCW5ld3NzZWMtPnBlZXJfc2lkID0gc3NlYy0+cGVlcl9zaWQ7CiAJbmV3c3NlYy0+c2NsYXNzID0gc3NlYy0+c2NsYXNzOwogCi0Jc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfcmVzZXQobmV3c3NlYywgbmV3c2stPnNrX2ZhbWlseSk7CisJc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfcmVzZXQobmV3c3NlYyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlbGludXhfc2tfZ2V0c2VjaWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgKnNlY2lkKQpAQCAtNDM0OCwxNiArNDI1OCwxNSBAQAogCWlmIChwZWVyc2lkID09IFNFQ1NJRF9OVUxMKSB7CiAJCXJlcS0+c2VjaWQgPSBza3NlYy0+c2lkOwogCQlyZXEtPnBlZXJfc2VjaWQgPSBTRUNTSURfTlVMTDsKLQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJZXJyID0gc2VjdXJpdHlfc2lkX21sc19jb3B5KHNrc2VjLT5zaWQsIHBlZXJzaWQsICZuZXdzaWQpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJcmVxLT5zZWNpZCA9IG5ld3NpZDsKKwkJcmVxLT5wZWVyX3NlY2lkID0gcGVlcnNpZDsKIAl9CiAKLQllcnIgPSBzZWN1cml0eV9zaWRfbWxzX2NvcHkoc2tzZWMtPnNpZCwgcGVlcnNpZCwgJm5ld3NpZCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCXJlcS0+c2VjaWQgPSBuZXdzaWQ7Ci0JcmVxLT5wZWVyX3NlY2lkID0gcGVlcnNpZDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX3JlcXVlc3QocmVxLCBmYW1pbHkpOwogfQogCiBzdGF0aWMgdm9pZCBzZWxpbnV4X2luZXRfY3NrX2Nsb25lKHN0cnVjdCBzb2NrICpuZXdzaywKQEAgLTQzNzQsNyArNDI4Myw3IEBACiAKIAkvKiBXZSBkb24ndCBuZWVkIHRvIHRha2UgYW55IHNvcnQgb2YgbG9jayBoZXJlIGFzIHdlIGFyZSB0aGUgb25seQogCSAqIHRocmVhZCB3aXRoIGFjY2VzcyB0byBuZXdza3NlYyAqLwotCXNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0KG5ld3Nrc2VjLCByZXEtPnJza19vcHMtPmZhbWlseSk7CisJc2VsaW51eF9uZXRsYmxfaW5ldF9jc2tfY2xvbmUobmV3c2ssIHJlcS0+cnNrX29wcy0+ZmFtaWx5KTsKIH0KIAogc3RhdGljIHZvaWQgc2VsaW51eF9pbmV0X2Nvbm5fZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtNDM4Nyw4ICs0Mjk2LDYgQEAKIAkJZmFtaWx5ID0gUEZfSU5FVDsKIAogCXNlbGludXhfc2tiX3BlZXJsYmxfc2lkKHNrYiwgZmFtaWx5LCAmc2tzZWMtPnBlZXJfc2lkKTsKLQotCXNlbGludXhfbmV0bGJsX2luZXRfY29ubl9lc3RhYmxpc2hlZChzaywgZmFtaWx5KTsKIH0KIAogc3RhdGljIHZvaWQgc2VsaW51eF9yZXFfY2xhc3NpZnlfZmxvdyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCkBAIC00NTQwLDcxICs0NDQ3LDYgQEAKIAlyZXR1cm4gc2VsaW51eF9pcF9vdXRwdXQoc2tiLCBQRl9JTkVUKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X2lwX3Bvc3Ryb3V0ZV9pcHRhYmxlc19jb21wYXQoc3RydWN0IHNvY2sgKnNrLAotCQkJCQkJaW50IGlmaW5kZXgsCi0JCQkJCQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmFkLAotCQkJCQkJdTE2IGZhbWlseSwgY2hhciAqYWRkcnApCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYyA9IHNrLT5za19zZWN1cml0eTsKLQl1MTYgc2tfY2xhc3M7Ci0JdTMyIG5ldGlmX3Blcm0sIG5vZGVfcGVybSwgc2VuZF9wZXJtOwotCXUzMiBwb3J0X3NpZCwgbm9kZV9zaWQsIGlmX3NpZCwgc2tfc2lkOwotCi0Jc2tfc2lkID0gc2tzZWMtPnNpZDsKLQlza19jbGFzcyA9IHNrc2VjLT5zY2xhc3M7Ci0KLQlzd2l0Y2ggKHNrX2NsYXNzKSB7Ci0JY2FzZSBTRUNDTEFTU19VRFBfU09DS0VUOgotCQluZXRpZl9wZXJtID0gTkVUSUZfX1VEUF9TRU5EOwotCQlub2RlX3Blcm0gPSBOT0RFX19VRFBfU0VORDsKLQkJc2VuZF9wZXJtID0gVURQX1NPQ0tFVF9fU0VORF9NU0c7Ci0JCWJyZWFrOwotCWNhc2UgU0VDQ0xBU1NfVENQX1NPQ0tFVDoKLQkJbmV0aWZfcGVybSA9IE5FVElGX19UQ1BfU0VORDsKLQkJbm9kZV9wZXJtID0gTk9ERV9fVENQX1NFTkQ7Ci0JCXNlbmRfcGVybSA9IFRDUF9TT0NLRVRfX1NFTkRfTVNHOwotCQlicmVhazsKLQljYXNlIFNFQ0NMQVNTX0RDQ1BfU09DS0VUOgotCQluZXRpZl9wZXJtID0gTkVUSUZfX0RDQ1BfU0VORDsKLQkJbm9kZV9wZXJtID0gTk9ERV9fRENDUF9TRU5EOwotCQlzZW5kX3Blcm0gPSBEQ0NQX1NPQ0tFVF9fU0VORF9NU0c7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCW5ldGlmX3Blcm0gPSBORVRJRl9fUkFXSVBfU0VORDsKLQkJbm9kZV9wZXJtID0gTk9ERV9fUkFXSVBfU0VORDsKLQkJc2VuZF9wZXJtID0gMDsKLQkJYnJlYWs7Ci0JfQotCi0JZXJyID0gc2VsX25ldGlmX3NpZChpZmluZGV4LCAmaWZfc2lkKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCWVyciA9IGF2Y19oYXNfcGVybShza19zaWQsIGlmX3NpZCwgU0VDQ0xBU1NfTkVUSUYsIG5ldGlmX3Blcm0sIGFkKTsKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IHNlbF9uZXRub2RlX3NpZChhZGRycCwgZmFtaWx5LCAmbm9kZV9zaWQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gYXZjX2hhc19wZXJtKHNrX3NpZCwgbm9kZV9zaWQsIFNFQ0NMQVNTX05PREUsIG5vZGVfcGVybSwgYWQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlpZiAoc2VuZF9wZXJtICE9IDApCi0JCXJldHVybiAwOwotCi0JZXJyID0gc2VsX25ldHBvcnRfc2lkKHNrLT5za19wcm90b2NvbCwKLQkJCSAgICAgIG50b2hzKGFkLT51Lm5ldC5kcG9ydCksICZwb3J0X3NpZCk7Ci0JaWYgKHVubGlrZWx5KGVycikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIlNFTGludXg6IGZhaWx1cmUgaW4iCi0JCSAgICAgICAiIHNlbGludXhfaXBfcG9zdHJvdXRlX2lwdGFibGVzX2NvbXBhdCgpLCIKLQkJICAgICAgICIgbmV0d29yayBwb3J0IGxhYmVsIG5vdCBmb3VuZFxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCXJldHVybiBhdmNfaGFzX3Blcm0oc2tfc2lkLCBwb3J0X3NpZCwgc2tfY2xhc3MsIHNlbmRfcGVybSwgYWQpOwotfQotCiBzdGF0aWMgdW5zaWduZWQgaW50IHNlbGludXhfaXBfcG9zdHJvdXRlX2NvbXBhdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkJaW50IGlmaW5kZXgsCiAJCQkJCQl1MTYgZmFtaWx5KQpAQCAtNDYyNSwxNSArNDQ2NywxMCBAQAogCWlmIChzZWxpbnV4X3BhcnNlX3NrYihza2IsICZhZCwgJmFkZHJwLCAwLCAmcHJvdG8pKQogCQlyZXR1cm4gTkZfRFJPUDsKIAotCWlmIChzZWxpbnV4X2NvbXBhdF9uZXQpIHsKLQkJaWYgKHNlbGludXhfaXBfcG9zdHJvdXRlX2lwdGFibGVzX2NvbXBhdChza2ItPnNrLCBpZmluZGV4LAotCQkJCQkJCSAmYWQsIGZhbWlseSwgYWRkcnApKQotCQkJcmV0dXJuIE5GX0RST1A7Ci0JfSBlbHNlIGlmIChzZWxpbnV4X3NlY21hcmtfZW5hYmxlZCgpKSB7CisJaWYgKHNlbGludXhfc2VjbWFya19lbmFibGVkKCkpCiAJCWlmIChhdmNfaGFzX3Blcm0oc2tzZWMtPnNpZCwgc2tiLT5zZWNtYXJrLAogCQkJCSBTRUNDTEFTU19QQUNLRVQsIFBBQ0tFVF9fU0VORCwgJmFkKSkKIAkJCXJldHVybiBORl9EUk9QOwotCX0KIAogCWlmIChzZWxpbnV4X3BvbGljeWNhcF9uZXRwZWVyKQogCQlpZiAoc2VsaW51eF94ZnJtX3Bvc3Ryb3V0ZV9sYXN0KHNrc2VjLT5zaWQsIHNrYiwgJmFkLCBwcm90bykpCkBAIC00NjU3LDcgKzQ0OTQsNyBAQAogCSAqIHRvIHRoZSBzZWxpbnV4X2lwX3Bvc3Ryb3V0ZV9jb21wYXQoKSBmdW5jdGlvbiB0byBkZWFsIHdpdGggdGhlCiAJICogc3BlY2lhbCBoYW5kbGluZy4gIFdlIGRvIHRoaXMgaW4gYW4gYXR0ZW1wdCB0byBrZWVwIHRoaXMgZnVuY3Rpb24KIAkgKiBhcyBmYXN0IGFuZCBhcyBjbGVhbiBhcyBwb3NzaWJsZS4gKi8KLQlpZiAoc2VsaW51eF9jb21wYXRfbmV0IHx8ICFzZWxpbnV4X3BvbGljeWNhcF9uZXRwZWVyKQorCWlmICghc2VsaW51eF9wb2xpY3ljYXBfbmV0cGVlcikKIAkJcmV0dXJuIHNlbGludXhfaXBfcG9zdHJvdXRlX2NvbXBhdChza2IsIGlmaW5kZXgsIGZhbWlseSk7CiAjaWZkZWYgQ09ORklHX1hGUk0KIAkvKiBJZiBza2ItPmRzdC0+eGZybSBpcyBub24tTlVMTCB0aGVuIHRoZSBwYWNrZXQgaXMgdW5kZXJnb2luZyBhbiBJUHNlYwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL25ldGxhYmVsLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaAppbmRleCBiOTEzYzhkLi5iNGI1YjliIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvbmV0bGFiZWwuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bmV0L3JlcXVlc3Rfc29jay5oPgogCiAjaW5jbHVkZSAiYXZjLmgiCiAjaW5jbHVkZSAib2Jqc2VjLmgiCkBAIC00Miw4ICs0Myw3IEBACiB2b2lkIHNlbGludXhfbmV0bGJsX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyb3IsIGludCBnYXRld2F5KTsKIAogdm9pZCBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9mcmVlKHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNzZWMpOwotdm9pZCBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldChzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjLAotCQkJCSAgICAgIGludCBmYW1pbHkpOwordm9pZCBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldChzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjKTsKIAogaW50IHNlbGludXhfbmV0bGJsX3NrYnVmZl9nZXRzaWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgdTE2IGZhbWlseSwKQEAgLTUzLDkgKzUzLDkgQEAKIAkJCQkgdTE2IGZhbWlseSwKIAkJCQkgdTMyIHNpZCk7CiAKLXZvaWQgc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywgdTE2IGZhbWlseSk7Ci1pbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrZXQgKnNvY2spOwotaW50IHNlbGludXhfbmV0bGJsX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spOworaW50IHNlbGludXhfbmV0bGJsX2luZXRfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgdTE2IGZhbWlseSk7Cit2b2lkIHNlbGludXhfbmV0bGJsX2luZXRfY3NrX2Nsb25lKHN0cnVjdCBzb2NrICpzaywgdTE2IGZhbWlseSk7CitpbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrICpzaywgdTE2IGZhbWlseSk7CiBpbnQgc2VsaW51eF9uZXRsYmxfc29ja19yY3Zfc2tiKHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjLAogCQkJCXN0cnVjdCBza19idWZmICpza2IsCiAJCQkJdTE2IGZhbWlseSwKQEAgLTg1LDggKzg1LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0KAotCQkJCQkgICAgICAgc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc3NlYywKLQkJCQkJICAgICAgIGludCBmYW1pbHkpCisJCQkJCSAgICAgICBzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjKQogewogCXJldHVybjsKIH0KQEAgLTExMywxNyArMTEyLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZWxpbnV4X25ldGxibF9pbmV0X2Nvbm5fZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLAotCQkJCQkJCXUxNiBmYW1pbHkpCi17Ci0JcmV0dXJuOwotfQotc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrZXQgKnNvY2spCitzdGF0aWMgaW5saW5lIGludCBzZWxpbnV4X25ldGxibF9pbmV0X2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCisJCQkJCQkgICB1MTYgZmFtaWx5KQogewogCXJldHVybiAwOwogfQotc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9uZXRsYmxfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkJICBpbnQgbWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWxpbnV4X25ldGxibF9pbmV0X2Nza19jbG9uZShzdHJ1Y3Qgc29jayAqc2ssIHUxNiBmYW1pbHkpCit7CisJcmV0dXJuOworfQorc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSAgICB1MTYgZmFtaWx5KQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9uZXRsYWJlbC5jIGIvc2VjdXJpdHkvc2VsaW51eC9uZXRsYWJlbC5jCmluZGV4IDM1MDc5NGEuLjJlOTg0NDEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvbmV0bGFiZWwuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L25ldGxhYmVsLmMKQEAgLTEwMCw0MSArMTAwLDYgQEAKIH0KIAogLyoqCi0gKiBzZWxpbnV4X25ldGxibF9zb2NrX3NldHNpZCAtIExhYmVsIGEgc29ja2V0IHVzaW5nIHRoZSBOZXRMYWJlbCBtZWNoYW5pc20KLSAqIEBzazogdGhlIHNvY2tldCB0byBsYWJlbAotICoKLSAqIERlc2NyaXB0aW9uOgotICogQXR0ZW1wdCB0byBsYWJlbCBhIHNvY2tldCB1c2luZyB0aGUgTmV0TGFiZWwgbWVjaGFuaXNtLiAgUmV0dXJucyB6ZXJvIHZhbHVlcwotICogb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCi0gKgotICovCi1zdGF0aWMgaW50IHNlbGludXhfbmV0bGJsX3NvY2tfc2V0c2lkKHN0cnVjdCBzb2NrICpzaykKLXsKLQlpbnQgcmM7Ci0Jc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7Ci0Jc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cjsKLQotCWlmIChza3NlYy0+bmxibF9zdGF0ZSAhPSBOTEJMX1JFUVVJUkUpCi0JCXJldHVybiAwOwotCi0Jc2VjYXR0ciA9IHNlbGludXhfbmV0bGJsX3NvY2tfZ2VuYXR0cihzayk7Ci0JaWYgKHNlY2F0dHIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmMgPSBuZXRsYmxfc29ja19zZXRhdHRyKHNrLCBzZWNhdHRyKTsKLQlzd2l0Y2ggKHJjKSB7Ci0JY2FzZSAwOgotCQlza3NlYy0+bmxibF9zdGF0ZSA9IE5MQkxfTEFCRUxFRDsKLQkJYnJlYWs7Ci0JY2FzZSAtRURFU1RBRERSUkVROgotCQlza3NlYy0+bmxibF9zdGF0ZSA9IE5MQkxfUkVRU0tCOwotCQlyYyA9IDA7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotLyoqCiAgKiBzZWxpbnV4X25ldGxibF9jYWNoZV9pbnZhbGlkYXRlIC0gSW52YWxpZGF0ZSB0aGUgTmV0TGFiZWwgY2FjaGUKICAqCiAgKiBEZXNjcmlwdGlvbjoKQEAgLTE4OCwxMyArMTUzLDkgQEAKICAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2liaWxlIGZvciBhbGwgdGhlIE5ldExhYmVsIHNrX3NlY3VyaXR5X3N0cnVjdCBsb2NraW5nLgogICoKICAqLwotdm9pZCBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldChzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjLAotCQkJCSAgICAgIGludCBmYW1pbHkpCit2b2lkIHNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0KHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNzZWMpCiB7Ci0JaWYgKGZhbWlseSA9PSBQRl9JTkVUKQotCQlzc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9SRVFVSVJFOwotCWVsc2UKLQkJc3NlYy0+bmxibF9zdGF0ZSA9IE5MQkxfVU5TRVQ7CisJc3NlYy0+bmxibF9zdGF0ZSA9IE5MQkxfVU5TRVQ7CiB9CiAKIC8qKgpAQCAtMjgxLDEyNyArMjQyLDg2IEBACiB9CiAKIC8qKgotICogc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX2VzdGFibGlzaGVkIC0gTmV0bGFiZWwgdGhlIG5ld2x5IGFjY2VwdGVkIGNvbm5lY3Rpb24KLSAqIEBzazogdGhlIG5ldyBjb25uZWN0aW9uCisgKiBzZWxpbnV4X25ldGxibF9pbmV0X2Nvbm5fcmVxdWVzdCAtIExhYmVsIGFuIGluY29taW5nIHN0cmVhbSBjb25uZWN0aW9uCisgKiBAcmVxOiBpbmNvbWluZyBjb25uZWN0aW9uIHJlcXVlc3Qgc29ja2V0CiAgKgogICogRGVzY3JpcHRpb246Ci0gKiBBIG5ldyBjb25uZWN0aW9uIGhhcyBiZWVuIGVzdGFibGlzaGVkIG9uIEBzayBzbyBtYWtlIHN1cmUgaXQgaXMgbGFiZWxlZAotICogY29ycmVjdGx5IHdpdGggdGhlIE5ldExhYmVsIHN1c2JzeXN0ZW0uCisgKiBBIG5ldyBpbmNvbWluZyBjb25uZWN0aW9uIHJlcXVlc3QgaXMgcmVwcmVzZW50ZWQgYnkgQHJlcSwgd2UgbmVlZCB0byBsYWJlbAorICogdGhlIG5ldyByZXF1ZXN0X3NvY2sgaGVyZSBhbmQgdGhlIHN0YWNrIHdpbGwgZW5zdXJlIHRoZSBvbi10aGUtd2lyZSBsYWJlbAorICogd2lsbCBnZXQgcHJlc2VydmVkIHdoZW4gYSBmdWxsIHNvY2sgaXMgY3JlYXRlZCBvbmNlIHRoZSBjb25uZWN0aW9uIGhhbmRzaGFrZQorICogaXMgY29tcGxldGUuICBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCiAgKgogICovCi12b2lkIHNlbGludXhfbmV0bGJsX2luZXRfY29ubl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHUxNiBmYW1pbHkpCitpbnQgc2VsaW51eF9uZXRsYmxfaW5ldF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1MTYgZmFtaWx5KQogewogCWludCByYzsKKwlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyIHNlY2F0dHI7CisKKwlpZiAoZmFtaWx5ICE9IFBGX0lORVQpCisJCXJldHVybiAwOworCisJbmV0bGJsX3NlY2F0dHJfaW5pdCgmc2VjYXR0cik7CisJcmMgPSBzZWN1cml0eV9uZXRsYmxfc2lkX3RvX3NlY2F0dHIocmVxLT5zZWNpZCwgJnNlY2F0dHIpOworCWlmIChyYyAhPSAwKQorCQlnb3RvIGluZXRfY29ubl9yZXF1ZXN0X3JldHVybjsKKwlyYyA9IG5ldGxibF9yZXFfc2V0YXR0cihyZXEsICZzZWNhdHRyKTsKK2luZXRfY29ubl9yZXF1ZXN0X3JldHVybjoKKwluZXRsYmxfc2VjYXR0cl9kZXN0cm95KCZzZWNhdHRyKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogc2VsaW51eF9uZXRsYmxfaW5ldF9jc2tfY2xvbmUgLSBJbml0aWFsaXplIHRoZSBuZXdseSBjcmVhdGVkIHNvY2sKKyAqIEBzazogdGhlIG5ldyBzb2NrCisgKgorICogRGVzY3JpcHRpb246CisgKiBBIG5ldyBjb25uZWN0aW9uIGhhcyBiZWVuIGVzdGFibGlzaGVkIHVzaW5nIEBzaywgd2UndmUgYWxyZWFkeSBsYWJlbGVkIHRoZQorICogc29ja2V0IHZpYSB0aGUgcmVxdWVzdF9zb2NrIHN0cnVjdCBpbiBzZWxpbnV4X25ldGxibF9pbmV0X2Nvbm5fcmVxdWVzdCgpIGJ1dAorICogd2UgbmVlZCB0byBzZXQgdGhlIE5ldExhYmVsIHN0YXRlIGhlcmUgc2luY2Ugd2Ugbm93IGhhdmUgYSBzb2NrIHN0cnVjdHVyZS4KKyAqCisgKi8KK3ZvaWQgc2VsaW51eF9uZXRsYmxfaW5ldF9jc2tfY2xvbmUoc3RydWN0IHNvY2sgKnNrLCB1MTYgZmFtaWx5KQorewogCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc2stPnNrX3NlY3VyaXR5OwotCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHI7Ci0Jc3RydWN0IGluZXRfc29jayAqc2tfaW5ldCA9IGluZXRfc2soc2spOwotCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwogCi0JaWYgKHNrc2VjLT5ubGJsX3N0YXRlICE9IE5MQkxfUkVRVUlSRSkKLQkJcmV0dXJuOwotCi0Jc2VjYXR0ciA9IHNlbGludXhfbmV0bGJsX3NvY2tfZ2VuYXR0cihzayk7Ci0JaWYgKHNlY2F0dHIgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JcmMgPSBuZXRsYmxfc29ja19zZXRhdHRyKHNrLCBzZWNhdHRyKTsKLQlzd2l0Y2ggKHJjKSB7Ci0JY2FzZSAwOgorCWlmIChmYW1pbHkgPT0gUEZfSU5FVCkKIAkJc2tzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX0xBQkVMRUQ7Ci0JCWJyZWFrOwotCWNhc2UgLUVERVNUQUREUlJFUToKLQkJLyogbm8gUEZfSU5FVDYgc3VwcG9ydCB5ZXQgYmVjYXVzZSB3ZSBkb24ndCBzdXBwb3J0IGFueSBJUHY2Ci0JCSAqIGxhYmVsaW5nIHByb3RvY29scyAqLwotCQlpZiAoZmFtaWx5ICE9IFBGX0lORVQpIHsKLQkJCXNrc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9VTlNFVDsKLQkJCXJldHVybjsKLQkJfQotCi0JCWFkZHIuc2luX2ZhbWlseSA9IGZhbWlseTsKLQkJYWRkci5zaW5fYWRkci5zX2FkZHIgPSBza19pbmV0LT5kYWRkcjsKLQkJaWYgKG5ldGxibF9jb25uX3NldGF0dHIoc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwKLQkJCQkJc2VjYXR0cikgIT0gMCkgewotCQkJLyogd2UgZmFpbGVkIHRvIGxhYmVsIHRoZSBjb25uZWN0ZWQgc29ja2V0IChjb3VsZCBiZQotCQkJICogZm9yIGEgdmFyaWV0eSBvZiByZWFzb25zLCB0aGUgYWN0dWFsICJ3aHkiIGlzbid0Ci0JCQkgKiBpbXBvcnRhbnQgaGVyZSkgc28gd2UgaGF2ZSB0byBnbyB0byBvdXIgYmFja3VwIHBsYW4sCi0JCQkgKiBsYWJlbGluZyB0aGUgcGFja2V0cyBpbmRpdmlkdWFsbHkgaW4gdGhlIG5ldGZpbHRlcgotCQkJICogbG9jYWwgb3V0cHV0IGhvb2suICB0aGlzIGlzIG9rYXkgYnV0IHdlIG5lZWQgdG8KLQkJCSAqIGFkanVzdCB0aGUgTVNTIG9mIHRoZSBjb25uZWN0aW9uIHRvIHRha2UgaW50bwotCQkJICogYWNjb3VudCBhbnkgbGFiZWxpbmcgb3ZlcmhlYWQsIHNpbmNlIHdlIGRvbid0IGtub3cKLQkJCSAqIHRoZSBleGFjdCBvdmVyaGVhZCBhdCB0aGlzIHBvaW50IHdlJ2xsIHVzZSB0aGUgd29yc3QKLQkJCSAqIGNhc2UgdmFsdWUgd2hpY2ggaXMgNDAgYnl0ZXMgZm9yIElQdjQgKi8KLQkJCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqc2tfY29ubiA9IGluZXRfY3NrKHNrKTsKLQkJCXNrX2Nvbm4tPmljc2tfZXh0X2hkcl9sZW4gKz0gNDAgLQotCQkJCSAgICAgIChza19pbmV0LT5vcHQgPyBza19pbmV0LT5vcHQtPm9wdGxlbiA6IDApOwotCQkJc2tfY29ubi0+aWNza19zeW5jX21zcyhzaywgc2tfY29ubi0+aWNza19wbXR1X2Nvb2tpZSk7Ci0KLQkJCXNrc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9SRVFTS0I7Ci0JCX0gZWxzZQotCQkJc2tzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX0NPTk5MQUJFTEVEOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBub3RlIHRoYXQgd2UgYXJlIGZhaWxpbmcgdG8gbGFiZWwgdGhlIHNvY2tldCB3aGljaCBjb3VsZCBiZQotCQkgKiBhIGJhZCB0aGluZyBzaW5jZSBpdCBtZWFucyB0cmFmZmljIGNvdWxkIGxlYXZlIHRoZSBzeXN0ZW0KLQkJICogd2l0aG91dCB0aGUgZGVzaXJlZCBsYWJlbGluZywgaG93ZXZlciwgYWxsIGlzIG5vdCBsb3N0IGFzCi0JCSAqIHdlIGhhdmUgYSBjaGVjayBpbiBzZWxpbnV4X25ldGxibF9pbm9kZV9wZXJtaXNzaW9uKCkgdG8KLQkJICogcGljayB1cCB0aGUgcGllY2VzIHRoYXQgd2UgbWlnaHQgZHJvcCBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QKLQkJICogcmV0dXJuIGFuIGVycm9yIGNvZGUgKi8KLQkJYnJlYWs7Ci0JfQorCWVsc2UKKwkJc2tzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX1VOU0VUOwogfQogCiAvKioKICAqIHNlbGludXhfbmV0bGJsX3NvY2tldF9wb3N0X2NyZWF0ZSAtIExhYmVsIGEgc29ja2V0IHVzaW5nIE5ldExhYmVsCiAgKiBAc29jazogdGhlIHNvY2tldCB0byBsYWJlbAorICogQGZhbWlseTogcHJvdG9jb2wgZmFtaWx5CiAgKgogICogRGVzY3JpcHRpb246CiAgKiBBdHRlbXB0IHRvIGxhYmVsIGEgc29ja2V0IHVzaW5nIHRoZSBOZXRMYWJlbCBtZWNoYW5pc20gdXNpbmcgdGhlIGdpdmVuCiAgKiBTSUQuICBSZXR1cm5zIHplcm8gdmFsdWVzIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgogICoKICAqLwotaW50IHNlbGludXhfbmV0bGJsX3NvY2tldF9wb3N0X2NyZWF0ZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQotewotCXJldHVybiBzZWxpbnV4X25ldGxibF9zb2NrX3NldHNpZChzb2NrLT5zayk7Ci19Ci0KLS8qKgotICogc2VsaW51eF9uZXRsYmxfaW5vZGVfcGVybWlzc2lvbiAtIFZlcmlmeSB0aGUgc29ja2V0IGlzIE5ldExhYmVsIGxhYmVsZWQKLSAqIEBpbm9kZTogdGhlIGZpbGUgZGVzY3JpcHRvcidzIGlub2RlCi0gKiBAbWFzazogdGhlIHBlcm1pc3Npb24gbWFzawotICoKLSAqIERlc2NyaXB0aW9uOgotICogTG9va3MgYXQgYSBmaWxlJ3MgaW5vZGUgYW5kIGlmIGl0IGlzIG1hcmtlZCBhcyBhIHNvY2tldCBwcm90ZWN0ZWQgYnkKLSAqIE5ldExhYmVsIHRoZW4gdmVyaWZ5IHRoYXQgdGhlIHNvY2tldCBoYXMgYmVlbiBsYWJlbGVkLCBpZiBub3QgdHJ5IHRvIGxhYmVsCi0gKiB0aGUgc29ja2V0IG5vdyB3aXRoIHRoZSBpbm9kZSdzIFNJRC4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZQotICogdmFsdWVzIG9uIGZhaWx1cmUuCi0gKgotICovCi1pbnQgc2VsaW51eF9uZXRsYmxfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK2ludCBzZWxpbnV4X25ldGxibF9zb2NrZXRfcG9zdF9jcmVhdGUoc3RydWN0IHNvY2sgKnNrLCB1MTYgZmFtaWx5KQogewogCWludCByYzsKLQlzdHJ1Y3Qgc29jayAqc2s7Ci0Jc3RydWN0IHNvY2tldCAqc29jazsKLQlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYzsKKwlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYyA9IHNrLT5za19zZWN1cml0eTsKKwlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyOwogCi0JaWYgKCFTX0lTU09DSyhpbm9kZS0+aV9tb2RlKSB8fAotCSAgICAoKG1hc2sgJiAoTUFZX1dSSVRFIHwgTUFZX0FQUEVORCkpID09IDApKQotCQlyZXR1cm4gMDsKLQlzb2NrID0gU09DS0VUX0koaW5vZGUpOwotCXNrID0gc29jay0+c2s7Ci0JaWYgKHNrID09IE5VTEwpCi0JCXJldHVybiAwOwotCXNrc2VjID0gc2stPnNrX3NlY3VyaXR5OwotCWlmIChza3NlYyA9PSBOVUxMIHx8IHNrc2VjLT5ubGJsX3N0YXRlICE9IE5MQkxfUkVRVUlSRSkKKwlpZiAoZmFtaWx5ICE9IFBGX0lORVQpCiAJCXJldHVybiAwOwogCi0JbG9jYWxfYmhfZGlzYWJsZSgpOwotCWJoX2xvY2tfc29ja19uZXN0ZWQoc2spOwotCWlmIChsaWtlbHkoc2tzZWMtPm5sYmxfc3RhdGUgPT0gTkxCTF9SRVFVSVJFKSkKLQkJcmMgPSBzZWxpbnV4X25ldGxibF9zb2NrX3NldHNpZChzayk7Ci0JZWxzZQorCXNlY2F0dHIgPSBzZWxpbnV4X25ldGxibF9zb2NrX2dlbmF0dHIoc2spOworCWlmIChzZWNhdHRyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXJjID0gbmV0bGJsX3NvY2tfc2V0YXR0cihzaywgZmFtaWx5LCBzZWNhdHRyKTsKKwlzd2l0Y2ggKHJjKSB7CisJY2FzZSAwOgorCQlza3NlYy0+bmxibF9zdGF0ZSA9IE5MQkxfTEFCRUxFRDsKKwkJYnJlYWs7CisJY2FzZSAtRURFU1RBRERSUkVROgorCQlza3NlYy0+bmxibF9zdGF0ZSA9IE5MQkxfUkVRU0tCOwogCQlyYyA9IDA7Ci0JYmhfdW5sb2NrX3NvY2soc2spOwotCWxvY2FsX2JoX2VuYWJsZSgpOworCQlicmVhazsKKwl9CiAKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYwppbmRleCBkM2M4Yjk4Li4yZDUxMzZlIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKQEAgLTQ3LDggKzQ3LDYgQEAKIAogdW5zaWduZWQgaW50IHNlbGludXhfY2hlY2tyZXFwcm90ID0gQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQ0hFQ0tSRVFQUk9UX1ZBTFVFOwogCi1pbnQgc2VsaW51eF9jb21wYXRfbmV0ID0gMDsKLQogc3RhdGljIGludCBfX2luaXQgY2hlY2tyZXFwcm90X3NldHVwKGNoYXIgKnN0cikKIHsKIAl1bnNpZ25lZCBsb25nIGNoZWNrcmVxcHJvdDsKQEAgLTU4LDE2ICs1Niw2IEBACiB9CiBfX3NldHVwKCJjaGVja3JlcXByb3Q9IiwgY2hlY2tyZXFwcm90X3NldHVwKTsKIAotc3RhdGljIGludCBfX2luaXQgc2VsaW51eF9jb21wYXRfbmV0X3NldHVwKGNoYXIgKnN0cikKLXsKLQl1bnNpZ25lZCBsb25nIGNvbXBhdF9uZXQ7Ci0JaWYgKCFzdHJpY3Rfc3RydG91bChzdHIsIDAsICZjb21wYXRfbmV0KSkKLQkJc2VsaW51eF9jb21wYXRfbmV0ID0gY29tcGF0X25ldCA/IDEgOiAwOwotCXJldHVybiAxOwotfQotX19zZXR1cCgic2VsaW51eF9jb21wYXRfbmV0PSIsIHNlbGludXhfY29tcGF0X25ldF9zZXR1cCk7Ci0KLQogc3RhdGljIERFRklORV9NVVRFWChzZWxfbXV0ZXgpOwogCiAvKiBnbG9iYWwgZGF0YSBmb3IgYm9vbGVhbnMgKi8KQEAgLTQ1MCw2MSArNDM4LDYgQEAKIAkud3JpdGUJCT0gc2VsX3dyaXRlX2NoZWNrcmVxcHJvdCwKIH07CiAKLXN0YXRpYyBzc2l6ZV90IHNlbF9yZWFkX2NvbXBhdF9uZXQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsCi0JCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0JY2hhciB0bXBidWZbVE1QQlVGTEVOXTsKLQlzc2l6ZV90IGxlbmd0aDsKLQotCWxlbmd0aCA9IHNjbnByaW50Zih0bXBidWYsIFRNUEJVRkxFTiwgIiVkIiwgc2VsaW51eF9jb21wYXRfbmV0KTsKLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcHBvcywgdG1wYnVmLCBsZW5ndGgpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfY29tcGF0X25ldChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0JY2hhciAqcGFnZTsKLQlzc2l6ZV90IGxlbmd0aDsKLQlpbnQgbmV3X3ZhbHVlOwotCi0JbGVuZ3RoID0gdGFza19oYXNfc2VjdXJpdHkoY3VycmVudCwgU0VDVVJJVFlfX0xPQURfUE9MSUNZKTsKLQlpZiAobGVuZ3RoKQotCQlyZXR1cm4gbGVuZ3RoOwotCi0JaWYgKGNvdW50ID49IFBBR0VfU0laRSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKCpwcG9zICE9IDApIHsKLQkJLyogTm8gcGFydGlhbCB3cml0ZXMuICovCi0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlwYWdlID0gKGNoYXIgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwYWdlKQotCQlyZXR1cm4gLUVOT01FTTsKLQlsZW5ndGggPSAtRUZBVUxUOwotCWlmIChjb3B5X2Zyb21fdXNlcihwYWdlLCBidWYsIGNvdW50KSkKLQkJZ290byBvdXQ7Ci0KLQlsZW5ndGggPSAtRUlOVkFMOwotCWlmIChzc2NhbmYocGFnZSwgIiVkIiwgJm5ld192YWx1ZSkgIT0gMSkKLQkJZ290byBvdXQ7Ci0KLQlpZiAobmV3X3ZhbHVlKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRQotCQkgICAgICAgIlNFTGludXg6IGNvbXBhdF9uZXQgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBzZWNtYXJrIgotCQkgICAgICAgIiBpbnN0ZWFkXG4iKTsKLQkJc2VsaW51eF9jb21wYXRfbmV0ID0gMTsKLQl9IGVsc2UKLQkJc2VsaW51eF9jb21wYXRfbmV0ID0gMDsKLQlsZW5ndGggPSBjb3VudDsKLW91dDoKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2UpOwotCXJldHVybiBsZW5ndGg7Ci19Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZWxfY29tcGF0X25ldF9vcHMgPSB7Ci0JLnJlYWQJCT0gc2VsX3JlYWRfY29tcGF0X25ldCwKLQkud3JpdGUJCT0gc2VsX3dyaXRlX2NvbXBhdF9uZXQsCi19OwotCiAvKgogICogUmVtYWluaW5nIG5vZGVzIHVzZSB0cmFuc2FjdGlvbiBiYXNlZCBJTyBtZXRob2RzIGxpa2UgbmZzZC9uZnNjdGwuYwogICovCkBAIC0xNjY1LDcgKzE1OTgsNiBAQAogCQlbU0VMX0RJU0FCTEVdID0geyJkaXNhYmxlIiwgJnNlbF9kaXNhYmxlX29wcywgU19JV1VTUn0sCiAJCVtTRUxfTUVNQkVSXSA9IHsibWVtYmVyIiwgJnRyYW5zYWN0aW9uX29wcywgU19JUlVHT3xTX0lXVUdPfSwKIAkJW1NFTF9DSEVDS1JFUVBST1RdID0geyJjaGVja3JlcXByb3QiLCAmc2VsX2NoZWNrcmVxcHJvdF9vcHMsIFNfSVJVR098U19JV1VTUn0sCi0JCVtTRUxfQ09NUEFUX05FVF0gPSB7ImNvbXBhdF9uZXQiLCAmc2VsX2NvbXBhdF9uZXRfb3BzLCBTX0lSVUdPfFNfSVdVU1J9LAogCQlbU0VMX1JFSkVDVF9VTktOT1dOXSA9IHsicmVqZWN0X3Vua25vd24iLCAmc2VsX2hhbmRsZV91bmtub3duX29wcywgU19JUlVHT30sCiAJCVtTRUxfREVOWV9VTktOT1dOXSA9IHsiZGVueV91bmtub3duIiwgJnNlbF9oYW5kbGVfdW5rbm93bl9vcHMsIFNfSVJVR099LAogCQkvKiBsYXN0IG9uZSAqLyB7IiJ9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFjay5oIGIvc2VjdXJpdHkvc21hY2svc21hY2suaAppbmRleCBiNzk1ODJlLi40MmVmMzEzIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFjay5oCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrLmgKQEAgLTE4LDYgKzE4LDggQEAKICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bmV0L25ldGxhYmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KIAogLyoKICAqIFdoeSAyMz8gQ0lQU08gaXMgY29uc3RyYWluZWQgdG8gMzAsIHNvIGEgMzIgYnl0ZSBidWZmZXIgaXMKQEAgLTQwLDcgKzQyLDYgQEAKIHN0cnVjdCBzb2NrZXRfc21hY2sgewogCWNoYXIJCSpzbWtfb3V0OwkJCS8qIG91dGJvdW5kIGxhYmVsICovCiAJY2hhcgkJKnNta19pbjsJCQkvKiBpbmJvdW5kIGxhYmVsICovCi0JaW50CQlzbWtfbGFiZWxlZDsJCQkvKiBsYWJlbCBzY2hlbWUgKi8KIAljaGFyCQlzbWtfcGFja2V0W1NNS19MQUJFTExFTl07CS8qIFRDUCBwZWVyIGxhYmVsICovCiB9OwogCkBAIC01OSwxNyArNjAsMTAgQEAKICAqIEEgbGFiZWwgYWNjZXNzIHJ1bGUuCiAgKi8KIHN0cnVjdCBzbWFja19ydWxlIHsKLQljaGFyCSpzbWtfc3ViamVjdDsKLQljaGFyCSpzbWtfb2JqZWN0OwotCWludAlzbWtfYWNjZXNzOwotfTsKLQotLyoKLSAqIEFuIGVudHJ5IGluIHRoZSB0YWJsZSBvZiBwZXJtaXR0ZWQgbGFiZWwgYWNjZXNzZXMuCi0gKi8KLXN0cnVjdCBzbWtfbGlzdF9lbnRyeSB7Ci0Jc3RydWN0IHNta19saXN0X2VudHJ5CSpzbWtfbmV4dDsKLQlzdHJ1Y3Qgc21hY2tfcnVsZQlzbWtfcnVsZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJY2hhcgkJCSpzbWtfc3ViamVjdDsKKwljaGFyCQkJKnNta19vYmplY3Q7CisJaW50CQkJc21rX2FjY2VzczsKIH07CiAKIC8qCkBAIC04NSw3ICs3OSw3IEBACiAgKiBBbiBlbnRyeSBpbiB0aGUgdGFibGUgaWRlbnRpZnlpbmcgaG9zdHMuCiAgKi8KIHN0cnVjdCBzbWtfbmV0bGJsYWRkciB7Ci0Jc3RydWN0IHNta19uZXRsYmxhZGRyCSpzbWtfbmV4dDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiAJc3RydWN0IHNvY2thZGRyX2luCXNta19ob3N0OwkvKiBuZXR3b3JrIGFkZHJlc3MgKi8KIAlzdHJ1Y3QgaW5fYWRkcgkJc21rX21hc2s7CS8qIG5ldHdvcmsgbWFzayAqLwogCWNoYXIJCQkqc21rX2xhYmVsOwkvKiBsYWJlbCAqLwpAQCAtMTEzLDcgKzEwNyw3IEBACiAgKiB0aGUgY2lwc28gZGlyZWN0IG1hcHBpbmcgaW4gdXNlZCBpbnRlcm5hbGx5LgogICovCiBzdHJ1Y3Qgc21hY2tfa25vd24gewotCXN0cnVjdCBzbWFja19rbm93bgkqc21rX25leHQ7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCWNoYXIJCQlzbWtfa25vd25bU01LX0xBQkVMTEVOXTsKIAl1MzIJCQlzbWtfc2VjaWQ7CiAJc3RydWN0IHNtYWNrX2NpcHNvCSpzbWtfY2lwc287CkBAIC0xMzgsNiArMTMyLDggQEAKICNkZWZpbmUgWEFUVFJfTkFNRV9TTUFDS0lQSU4JWEFUVFJfU0VDVVJJVFlfUFJFRklYIFhBVFRSX1NNQUNLX0lQSU4KICNkZWZpbmUgWEFUVFJfTkFNRV9TTUFDS0lQT1VUCVhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9TTUFDS19JUE9VVAogCisjZGVmaW5lIFNNQUNLX0NJUFNPX09QVElPTiAJIi1DSVBTTyIKKwogLyoKICAqIEhvdyBjb21tdW5pY2F0aW9ucyBvbiB0aGlzIHNvY2tldCBhcmUgdHJlYXRlZC4KICAqIFVzdWFsbHkgaXQncyBkZXRlcm1pbmVkIGJ5IHRoZSB1bmRlcmx5aW5nIG5ldGxhYmVsIGNvZGUKQEAgLTIwNSw4ICsyMDEsOCBAQAogZXh0ZXJuIGludCBzbWFja19jaXBzb19kaXJlY3Q7CiBleHRlcm4gY2hhciAqc21hY2tfbmV0X2FtYmllbnQ7CiBleHRlcm4gY2hhciAqc21hY2tfb25seWNhcDsKK2V4dGVybiBjb25zdCBjaGFyICpzbWFja19jaXBzb19vcHRpb247CiAKLWV4dGVybiBzdHJ1Y3Qgc21hY2tfa25vd24gKnNtYWNrX2tub3duOwogZXh0ZXJuIHN0cnVjdCBzbWFja19rbm93biBzbWFja19rbm93bl9mbG9vcjsKIGV4dGVybiBzdHJ1Y3Qgc21hY2tfa25vd24gc21hY2tfa25vd25faGF0OwogZXh0ZXJuIHN0cnVjdCBzbWFja19rbm93biBzbWFja19rbm93bl9odWg7CkBAIC0yMTQsOCArMjEwLDEwIEBACiBleHRlcm4gc3RydWN0IHNtYWNrX2tub3duIHNtYWNrX2tub3duX3N0YXI7CiBleHRlcm4gc3RydWN0IHNtYWNrX2tub3duIHNtYWNrX2tub3duX3dlYjsKIAotZXh0ZXJuIHN0cnVjdCBzbWtfbGlzdF9lbnRyeSAqc21hY2tfbGlzdDsKLWV4dGVybiBzdHJ1Y3Qgc21rX25ldGxibGFkZHIgKnNtYWNrX25ldGxibGFkZHJzOworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgc21hY2tfa25vd25fbGlzdDsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHNtYWNrX3J1bGVfbGlzdDsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHNta19uZXRsYmxhZGRyX2xpc3Q7CisKIGV4dGVybiBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyBzbWFja19vcHM7CiAKIC8qCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19hY2Nlc3MuYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2FjY2Vzcy5jCmluZGV4IGNmYTE5Y2EuLmFjMGEyNzAgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2FjY2Vzcy5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2FjY2Vzcy5jCkBAIC0xNiw0OCArMTYsNDIgQEAKICNpbmNsdWRlICJzbWFjay5oIgogCiBzdHJ1Y3Qgc21hY2tfa25vd24gc21hY2tfa25vd25faHVoID0gewotCS5zbWtfbmV4dAk9IE5VTEwsCiAJLnNta19rbm93bgk9ICI/IiwKIAkuc21rX3NlY2lkCT0gMiwKIAkuc21rX2NpcHNvCT0gTlVMTCwKIH07CiAKIHN0cnVjdCBzbWFja19rbm93biBzbWFja19rbm93bl9oYXQgPSB7Ci0JLnNta19uZXh0CT0gJnNtYWNrX2tub3duX2h1aCwKIAkuc21rX2tub3duCT0gIl4iLAogCS5zbWtfc2VjaWQJPSAzLAogCS5zbWtfY2lwc28JPSBOVUxMLAogfTsKIAogc3RydWN0IHNtYWNrX2tub3duIHNtYWNrX2tub3duX3N0YXIgPSB7Ci0JLnNta19uZXh0CT0gJnNtYWNrX2tub3duX2hhdCwKIAkuc21rX2tub3duCT0gIioiLAogCS5zbWtfc2VjaWQJPSA0LAogCS5zbWtfY2lwc28JPSBOVUxMLAogfTsKIAogc3RydWN0IHNtYWNrX2tub3duIHNtYWNrX2tub3duX2Zsb29yID0gewotCS5zbWtfbmV4dAk9ICZzbWFja19rbm93bl9zdGFyLAogCS5zbWtfa25vd24JPSAiXyIsCiAJLnNta19zZWNpZAk9IDUsCiAJLnNta19jaXBzbwk9IE5VTEwsCiB9OwogCiBzdHJ1Y3Qgc21hY2tfa25vd24gc21hY2tfa25vd25faW52YWxpZCA9IHsKLQkuc21rX25leHQJPSAmc21hY2tfa25vd25fZmxvb3IsCiAJLnNta19rbm93bgk9ICIiLAogCS5zbWtfc2VjaWQJPSA2LAogCS5zbWtfY2lwc28JPSBOVUxMLAogfTsKIAogc3RydWN0IHNtYWNrX2tub3duIHNtYWNrX2tub3duX3dlYiA9IHsKLQkuc21rX25leHQJPSAmc21hY2tfa25vd25faW52YWxpZCwKIAkuc21rX2tub3duCT0gIkAiLAogCS5zbWtfc2VjaWQJPSA3LAogCS5zbWtfY2lwc28JPSBOVUxMLAogfTsKIAotc3RydWN0IHNtYWNrX2tub3duICpzbWFja19rbm93biA9ICZzbWFja19rbm93bl93ZWI7CitMSVNUX0hFQUQoc21hY2tfa25vd25fbGlzdCk7CiAKIC8qCiAgKiBUaGUgaW5pdGlhbCB2YWx1ZSBuZWVkcyB0byBiZSBiaWdnZXIgdGhhbiBhbnkgb2YgdGhlCkBAIC04Nyw3ICs4MSw2IEBACiBpbnQgc21rX2FjY2VzcyhjaGFyICpzdWJqZWN0X2xhYmVsLCBjaGFyICpvYmplY3RfbGFiZWwsIGludCByZXF1ZXN0KQogewogCXUzMiBtYXkgPSBNQVlfTk9UOwotCXN0cnVjdCBzbWtfbGlzdF9lbnRyeSAqc3A7CiAJc3RydWN0IHNtYWNrX3J1bGUgKnNycDsKIAogCS8qCkBAIC0xMzksOSArMTMyLDggQEAKIAkgKiBhY2Nlc3MgKGUuZy4gcmVhZCBpcyBpbmNsdWRlZCBpbiByZWFkd3JpdGUpIGl0J3MKIAkgKiBnb29kLgogCSAqLwotCWZvciAoc3AgPSBzbWFja19saXN0OyBzcCAhPSBOVUxMOyBzcCA9IHNwLT5zbWtfbmV4dCkgewotCQlzcnAgPSAmc3AtPnNta19ydWxlOwotCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNycCwgJnNtYWNrX3J1bGVfbGlzdCwgbGlzdCkgewogCQlpZiAoc3JwLT5zbWtfc3ViamVjdCA9PSBzdWJqZWN0X2xhYmVsIHx8CiAJCSAgICBzdHJjbXAoc3JwLT5zbWtfc3ViamVjdCwgc3ViamVjdF9sYWJlbCkgPT0gMCkgewogCQkJaWYgKHNycC0+c21rX29iamVjdCA9PSBvYmplY3RfbGFiZWwgfHwKQEAgLTE1MSw2ICsxNDMsNyBAQAogCQkJfQogCQl9CiAJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCS8qCiAJICogVGhpcyBpcyBhIGJpdCBtYXAgb3BlcmF0aW9uLgogCSAqLwpAQCAtMjI4LDE0ICsyMjEsMTcgQEAKIAogCW11dGV4X2xvY2soJnNtYWNrX2tub3duX2xvY2spOwogCi0JZm9yIChza3AgPSBzbWFja19rbm93bjsgc2twICE9IE5VTEw7IHNrcCA9IHNrcC0+c21rX25leHQpCi0JCWlmIChzdHJuY21wKHNrcC0+c21rX2tub3duLCBzbWFjaywgU01LX01BWExFTikgPT0gMCkKKwlmb3VuZCA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2twLCAmc21hY2tfa25vd25fbGlzdCwgbGlzdCkgeworCQlpZiAoc3RybmNtcChza3AtPnNta19rbm93biwgc21hY2ssIFNNS19NQVhMRU4pID09IDApIHsKKwkJCWZvdW5kID0gMTsKIAkJCWJyZWFrOworCQl9CisJfQogCi0JaWYgKHNrcCA9PSBOVUxMKSB7CisJaWYgKGZvdW5kID09IDApIHsKIAkJc2twID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNtYWNrX2tub3duKSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChza3AgIT0gTlVMTCkgewotCQkJc2twLT5zbWtfbmV4dCA9IHNtYWNrX2tub3duOwogCQkJc3RybmNweShza3AtPnNta19rbm93biwgc21hY2ssIFNNS19NQVhMRU4pOwogCQkJc2twLT5zbWtfc2VjaWQgPSBzbWFja19uZXh0X3NlY2lkKys7CiAJCQlza3AtPnNta19jaXBzbyA9IE5VTEw7CkBAIC0yNDQsOCArMjQwLDcgQEAKIAkJCSAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBlbnRyeSBpcyBhY3R1YWxseQogCQkJICogZmlsbGVkIGJlZm9yZSBwdXR0aW5nIGl0IG9uIHRoZSBsaXN0LgogCQkJICovCi0JCQlzbXBfbWIoKTsKLQkJCXNtYWNrX2tub3duID0gc2twOworCQkJbGlzdF9hZGRfcmN1KCZza3AtPmxpc3QsICZzbWFja19rbm93bl9saXN0KTsKIAkJfQogCX0KIApAQCAtMjY2LDYgKzI2MSw5IEBACiB7CiAJc3RydWN0IHNtYWNrX2tub3duICpza3A7CiAKKwkvKiBsYWJlbHMgY2Fubm90IGJlZ2luIHdpdGggYSAnLScgKi8KKwlpZiAoc3RyaW5nWzBdID09ICctJykKKwkJcmV0dXJuIE5VTEw7CiAJc2twID0gc21rX2ltcG9ydF9lbnRyeShzdHJpbmcsIGxlbik7CiAJaWYgKHNrcCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKQEAgLTI4MywxNCArMjgxLDE5IEBACiB7CiAJc3RydWN0IHNtYWNrX2tub3duICpza3A7CiAKLQlmb3IgKHNrcCA9IHNtYWNrX2tub3duOyBza3AgIT0gTlVMTDsgc2twID0gc2twLT5zbWtfbmV4dCkKLQkJaWYgKHNrcC0+c21rX3NlY2lkID09IHNlY2lkKQorCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShza3AsICZzbWFja19rbm93bl9saXN0LCBsaXN0KSB7CisJCWlmIChza3AtPnNta19zZWNpZCA9PSBzZWNpZCkgeworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlyZXR1cm4gc2twLT5zbWtfa25vd247CisJCX0KKwl9CiAKIAkvKgogCSAqIElmIHdlIGdvdCB0aGlzIGZhciBzb21lb25lIGFza2VkIGZvciB0aGUgdHJhbnNsYXRpb24KIAkgKiBvZiBhIHNlY2lkIHRoYXQgaXMgbm90IG9uIHRoZSBsaXN0LgogCSAqLworCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBzbWFja19rbm93bl9pbnZhbGlkLnNta19rbm93bjsKIH0KIApAQCAtMzA1LDkgKzMwOCwxNCBAQAogewogCXN0cnVjdCBzbWFja19rbm93biAqc2twOwogCi0JZm9yIChza3AgPSBzbWFja19rbm93bjsgc2twICE9IE5VTEw7IHNrcCA9IHNrcC0+c21rX25leHQpCi0JCWlmIChzdHJuY21wKHNrcC0+c21rX2tub3duLCBzbWFjaywgU01LX01BWExFTikgPT0gMCkKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2twLCAmc21hY2tfa25vd25fbGlzdCwgbGlzdCkgeworCQlpZiAoc3RybmNtcChza3AtPnNta19rbm93biwgc21hY2ssIFNNS19NQVhMRU4pID09IDApIHsKKwkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuIHNrcC0+c21rX3NlY2lkOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiAwOwogfQogCkBAIC0zMzIsNyArMzQwLDggQEAKIAlzdHJ1Y3Qgc21hY2tfa25vd24gKmtwOwogCWNoYXIgKmZpbmFsID0gTlVMTDsKIAotCWZvciAoa3AgPSBzbWFja19rbm93bjsgZmluYWwgPT0gTlVMTCAmJiBrcCAhPSBOVUxMOyBrcCA9IGtwLT5zbWtfbmV4dCkgeworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGtwLCAmc21hY2tfa25vd25fbGlzdCwgbGlzdCkgewogCQlpZiAoa3AtPnNta19jaXBzbyA9PSBOVUxMKQogCQkJY29udGludWU7CiAKQEAgLTM0NCw2ICszNTMsNyBAQAogCiAJCXNwaW5fdW5sb2NrX2JoKCZrcC0+c21rX2NpcHNvbG9jayk7CiAJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCWlmIChmaW5hbCA9PSBOVUxMKQogCQlmaW5hbCA9IHNtYWNrX2tub3duX2h1aC5zbWtfa25vd247CiAJc3RybmNweShyZXN1bHQsIGZpbmFsLCBTTUtfTUFYTEVOKTsKQEAgLTM2MCwxMyArMzcwLDE5IEBACiBpbnQgc21hY2tfdG9fY2lwc28oY29uc3QgY2hhciAqc21hY2ssIHN0cnVjdCBzbWFja19jaXBzbyAqY3ApCiB7CiAJc3RydWN0IHNtYWNrX2tub3duICprcDsKKwlpbnQgZm91bmQgPSAwOwogCi0JZm9yIChrcCA9IHNtYWNrX2tub3duOyBrcCAhPSBOVUxMOyBrcCA9IGtwLT5zbWtfbmV4dCkKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoa3AsICZzbWFja19rbm93bl9saXN0LCBsaXN0KSB7CiAJCWlmIChrcC0+c21rX2tub3duID09IHNtYWNrIHx8Ci0JCSAgICBzdHJjbXAoa3AtPnNta19rbm93biwgc21hY2spID09IDApCisJCSAgICBzdHJjbXAoa3AtPnNta19rbm93biwgc21hY2spID09IDApIHsKKwkJCWZvdW5kID0gMTsKIAkJCWJyZWFrOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCi0JaWYgKGtwID09IE5VTEwgfHwga3AtPnNta19jaXBzbyA9PSBOVUxMKQorCWlmIChmb3VuZCA9PSAwIHx8IGtwLT5zbWtfY2lwc28gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAltZW1jcHkoY3AsIGtwLT5zbWtfY2lwc28sIHNpemVvZihzdHJ1Y3Qgc21hY2tfY2lwc28pKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKaW5kZXggODRiNjJiNS4uOTIxNTE0OSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKQEAgLTcsNiArNyw4IEBACiAgKglDYXNleSBTY2hhdWZsZXIgPGNhc2V5QHNjaGF1Zmxlci1jYS5jb20+CiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYXNleSBTY2hhdWZsZXIgPGNhc2V5QHNjaGF1Zmxlci1jYS5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCisgKiAgICAgICAgICAgICAgICBQYXVsIE1vb3JlIDxwYXVsLm1vb3JlQGhwLmNvbT4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCkBAIC0yMCw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZXh0Ml9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tkLmg+CiAjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvdWRwLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KQEAgLTYwNiw2ICs2MDksOSBAQAogCSAgICBzdHJjbXAobmFtZSwgWEFUVFJfTkFNRV9TTUFDS0lQT1VUKSA9PSAwKSB7CiAJCWlmICghY2FwYWJsZShDQVBfTUFDX0FETUlOKSkKIAkJCXJjID0gLUVQRVJNOworCQkvKiBhIGxhYmVsIGNhbm5vdCBiZSB2b2lkIGFuZCBjYW5ub3QgYmVnaW4gd2l0aCAnLScgKi8KKwkJaWYgKHNpemUgPT0gMCB8fCAoc2l6ZSA+IDAgJiYgKChjaGFyICopdmFsdWUpWzBdID09ICctJykpCisJCQlyYyA9IC1FSU5WQUw7CiAJfSBlbHNlCiAJCXJjID0gY2FwX2lub2RlX3NldHhhdHRyKGRlbnRyeSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKIApAQCAtMTI3NSw3ICsxMjgxLDYgQEAKIAogCXNzcC0+c21rX2luID0gY3NwOwogCXNzcC0+c21rX291dCA9IGNzcDsKLQlzc3AtPnNta19sYWJlbGVkID0gU01BQ0tfQ0lQU09fU09DS0VUOwogCXNzcC0+c21rX3BhY2tldFswXSA9ICdcMCc7CiAKIAlzay0+c2tfc2VjdXJpdHkgPSBzc3A7CkBAIC0xMjk1LDYgKzEzMDAsNDMgQEAKIH0KIAogLyoqCisqIHNtYWNrX2hvc3RfbGFiZWwgLSBjaGVjayBob3N0IGJhc2VkIHJlc3RyaWN0aW9ucworKiBAc2lwOiB0aGUgb2JqZWN0IGVuZAorKgorKiBsb29rcyBmb3IgaG9zdCBiYXNlZCBhY2Nlc3MgcmVzdHJpY3Rpb25zCisqCisqIFRoaXMgdmVyc2lvbiB3aWxsIG9ubHkgYmUgYXBwcm9wcmlhdGUgZm9yIHJlYWxseSBzbWFsbCBzZXRzIG9mIHNpbmdsZSBsYWJlbAorKiBob3N0cy4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFJDVSByZWFkIGxvY2sgaXMKKyogdGFrZW4gYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyoKKyogUmV0dXJucyB0aGUgbGFiZWwgb2YgdGhlIGZhciBlbmQgb3IgTlVMTCBpZiBpdCdzIG5vdCBzcGVjaWFsLgorKi8KK3N0YXRpYyBjaGFyICpzbWFja19ob3N0X2xhYmVsKHN0cnVjdCBzb2NrYWRkcl9pbiAqc2lwKQoreworCXN0cnVjdCBzbWtfbmV0bGJsYWRkciAqc25wOworCXN0cnVjdCBpbl9hZGRyICpzaWFwID0gJnNpcC0+c2luX2FkZHI7CisKKwlpZiAoc2lhcC0+c19hZGRyID09IDApCisJCXJldHVybiBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc25wLCAmc21rX25ldGxibGFkZHJfbGlzdCwgbGlzdCkKKwkJLyoKKwkJKiB3ZSBicmVhayBhZnRlciBmaW5kaW5nIHRoZSBmaXJzdCBtYXRjaCBiZWNhdXNlCisJCSogdGhlIGxpc3QgaXMgc29ydGVkIGZyb20gbG9uZ2VzdCB0byBzaG9ydGVzdCBtYXNrCisJCSogc28gd2UgaGF2ZSBmb3VuZCB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaAorCQkqLworCQlpZiAoKCZzbnAtPnNta19ob3N0LnNpbl9hZGRyKS0+c19hZGRyID09CisJCSAgICAoc2lhcC0+c19hZGRyICYgKCZzbnAtPnNta19tYXNrKS0+c19hZGRyKSkgeworCQkJLyogd2UgaGF2ZSBmb3VuZCB0aGUgc3BlY2lhbCBDSVBTTyBvcHRpb24gKi8KKwkJCWlmIChzbnAtPnNta19sYWJlbCA9PSBzbWFja19jaXBzb19vcHRpb24pCisJCQkJcmV0dXJuIE5VTEw7CisJCQlyZXR1cm4gc25wLT5zbWtfbGFiZWw7CisJCX0KKworCXJldHVybiBOVUxMOworfQorCisvKioKICAqIHNtYWNrX3NldF9jYXRzZXQgLSBjb252ZXJ0IGEgY2Fwc2V0IHRvIG5ldGxhYmVsIG1scyBjYXRlZ29yaWVzCiAgKiBAY2F0c2V0OiB0aGUgU21hY2sgY2F0ZWdvcmllcwogICogQHNhcDogd2hlcmUgdG8gcHV0IHRoZSBuZXRsYWJlbCBjYXRlZ29yaWVzCkBAIC0xMzY1LDExICsxNDA3LDEwIEBACiAgKi8KIHN0YXRpYyBpbnQgc21hY2tfbmV0bGFiZWwoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGFiZWxlZCkKIHsKLQlzdHJ1Y3Qgc29ja2V0X3NtYWNrICpzc3A7CisJc3RydWN0IHNvY2tldF9zbWFjayAqc3NwID0gc2stPnNrX3NlY3VyaXR5OwogCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgc2VjYXR0cjsKIAlpbnQgcmMgPSAwOwogCi0Jc3NwID0gc2stPnNrX3NlY3VyaXR5OwogCS8qCiAJICogVXN1YWxseSB0aGUgbmV0bGFiZWwgY29kZSB3aWxsIGhhbmRsZSBjaGFuZ2luZyB0aGUKIAkgKiBwYWNrZXQgbGFiZWxpbmcgYmFzZWQgb24gdGhlIGxhYmVsLgpAQCAtMTM4NywyNyArMTQyOCw1MSBAQAogCWVsc2UgewogCQluZXRsYmxfc2VjYXR0cl9pbml0KCZzZWNhdHRyKTsKIAkJc21hY2tfdG9fc2VjYXR0cihzc3AtPnNta19vdXQsICZzZWNhdHRyKTsKLQkJcmMgPSBuZXRsYmxfc29ja19zZXRhdHRyKHNrLCAmc2VjYXR0cik7CisJCXJjID0gbmV0bGJsX3NvY2tfc2V0YXR0cihzaywgc2stPnNrX2ZhbWlseSwgJnNlY2F0dHIpOwogCQluZXRsYmxfc2VjYXR0cl9kZXN0cm95KCZzZWNhdHRyKTsKIAl9CiAKIAliaF91bmxvY2tfc29jayhzayk7CiAJbG9jYWxfYmhfZW5hYmxlKCk7Ci0JLyoKLQkgKiBSZW1lbWJlciB0aGUgbGFiZWwgc2NoZW1lIHVzZWQgc28gdGhhdCBpdCBpcyBub3QKLQkgKiBuZWNlc3NhcnkgdG8gZG8gdGhlIG5ldGxhYmVsIHNldHRpbmcgaWYgaXQgaGFzIG5vdAotCSAqIGNoYW5nZWQgdGhlIG5leHQgdGltZSB0aHJvdWdoLgotCSAqCi0JICogVGhlIC1FREVTVEFERFJSRVEgY2FzZSBpcyBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlcmUncwotCSAqIGEgc2luZ2xlIGxldmVsIGhvc3QgaW52b2x2ZWQuCi0JICovCi0JaWYgKHJjID09IDApCi0JCXNzcC0+c21rX2xhYmVsZWQgPSBsYWJlbGVkOwogCiAJcmV0dXJuIHJjOwogfQogCiAvKioKKyAqIHNtYWNrX25ldGxiZWxfc2VuZCAtIFNldCB0aGUgc2VjYXR0ciBvbiBhIHNvY2tldCBhbmQgcGVyZm9ybSBhY2Nlc3MgY2hlY2tzCisgKiBAc2s6IHRoZSBzb2NrZXQKKyAqIEBzYXA6IHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzCisgKgorICogU2V0IHRoZSBjb3JyZWN0IHNlY2F0dHIgZm9yIHRoZSBnaXZlbiBzb2NrZXQgYmFzZWQgb24gdGhlIGRlc3RpbmF0aW9uCisgKiBhZGRyZXNzIGFuZCBwZXJmb3JtIGFueSBvdXRib3VuZCBhY2Nlc3MgY2hlY2tzIG5lZWRlZC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhbiBlcnJvciBjb2RlLgorICoKKyAqLworc3RhdGljIGludCBzbWFja19uZXRsYWJlbF9zZW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX2luICpzYXApCit7CisJaW50IHJjOworCWludCBza19sYmw7CisJY2hhciAqaG9zdHNwOworCXN0cnVjdCBzb2NrZXRfc21hY2sgKnNzcCA9IHNrLT5za19zZWN1cml0eTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlob3N0c3AgPSBzbWFja19ob3N0X2xhYmVsKHNhcCk7CisJaWYgKGhvc3RzcCAhPSBOVUxMKSB7CisJCXNrX2xibCA9IFNNQUNLX1VOTEFCRUxFRF9TT0NLRVQ7CisJCXJjID0gc21rX2FjY2Vzcyhzc3AtPnNta19vdXQsIGhvc3RzcCwgTUFZX1dSSVRFKTsKKwl9IGVsc2UgeworCQlza19sYmwgPSBTTUFDS19DSVBTT19TT0NLRVQ7CisJCXJjID0gMDsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJaWYgKHJjICE9IDApCisJCXJldHVybiByYzsKKworCXJldHVybiBzbWFja19uZXRsYWJlbChzaywgc2tfbGJsKTsKK30KKworLyoqCiAgKiBzbWFja19pbm9kZV9zZXRzZWN1cml0eSAtIHNldCBzbWFjayB4YXR0cnMKICAqIEBpbm9kZTogdGhlIG9iamVjdAogICogQG5hbWU6IGF0dHJpYnV0ZSBuYW1lCkBAIC0xNDI4LDcgKzE0OTMsNyBAQAogCXN0cnVjdCBzb2NrZXQgKnNvY2s7CiAJaW50IHJjID0gMDsKIAotCWlmICh2YWx1ZSA9PSBOVUxMIHx8IHNpemUgPiBTTUtfTEFCRUxMRU4pCisJaWYgKHZhbHVlID09IE5VTEwgfHwgc2l6ZSA+IFNNS19MQUJFTExFTiB8fCBzaXplID09IDApCiAJCXJldHVybiAtRUFDQ0VTOwogCiAJc3AgPSBzbWtfaW1wb3J0KHZhbHVlLCBzaXplKTsKQEAgLTE0ODgsNDEgKzE1NTMsNiBAQAogCXJldHVybiBzbWFja19uZXRsYWJlbChzb2NrLT5zaywgU01BQ0tfQ0lQU09fU09DS0VUKTsKIH0KIAotCi0vKioKLSAqIHNtYWNrX2hvc3RfbGFiZWwgLSBjaGVjayBob3N0IGJhc2VkIHJlc3RyaWN0aW9ucwotICogQHNpcDogdGhlIG9iamVjdCBlbmQKLSAqCi0gKiBsb29rcyBmb3IgaG9zdCBiYXNlZCBhY2Nlc3MgcmVzdHJpY3Rpb25zCi0gKgotICogVGhpcyB2ZXJzaW9uIHdpbGwgb25seSBiZSBhcHByb3ByaWF0ZSBmb3IgcmVhbGx5IHNtYWxsCi0gKiBzZXRzIG9mIHNpbmdsZSBsYWJlbCBob3N0cy4KLSAqCi0gKiBSZXR1cm5zIHRoZSBsYWJlbCBvZiB0aGUgZmFyIGVuZCBvciBOVUxMIGlmIGl0J3Mgbm90IHNwZWNpYWwuCi0gKi8KLXN0YXRpYyBjaGFyICpzbWFja19ob3N0X2xhYmVsKHN0cnVjdCBzb2NrYWRkcl9pbiAqc2lwKQotewotCXN0cnVjdCBzbWtfbmV0bGJsYWRkciAqc25wOwotCXN0cnVjdCBpbl9hZGRyICpzaWFwID0gJnNpcC0+c2luX2FkZHI7Ci0KLQlpZiAoc2lhcC0+c19hZGRyID09IDApCi0JCXJldHVybiBOVUxMOwotCi0JZm9yIChzbnAgPSBzbWFja19uZXRsYmxhZGRyczsgc25wICE9IE5VTEw7IHNucCA9IHNucC0+c21rX25leHQpIHsKLQkJLyoKLQkJICogd2UgYnJlYWsgYWZ0ZXIgZmluZGluZyB0aGUgZmlyc3QgbWF0Y2ggYmVjYXVzZQotCQkgKiB0aGUgbGlzdCBpcyBzb3J0ZWQgZnJvbSBsb25nZXN0IHRvIHNob3J0ZXN0IG1hc2sKLQkJICogc28gd2UgaGF2ZSBmb3VuZCB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaAotCQkgKi8KLQkJaWYgKCgmc25wLT5zbWtfaG9zdC5zaW5fYWRkciktPnNfYWRkciAgPT0KLQkJCShzaWFwLT5zX2FkZHIgJiAoJnNucC0+c21rX21hc2spLT5zX2FkZHIpKSB7Ci0JCQlyZXR1cm4gc25wLT5zbWtfbGFiZWw7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogLyoqCiAgKiBzbWFja19zb2NrZXRfY29ubmVjdCAtIGNvbm5lY3QgYWNjZXNzIGNoZWNrCiAgKiBAc29jazogdGhlIHNvY2tldApAQCAtMTUzNiwzMCArMTU2NiwxMiBAQAogc3RhdGljIGludCBzbWFja19zb2NrZXRfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwKIAkJCQlpbnQgYWRkcmxlbikKIHsKLQlzdHJ1Y3Qgc29ja2V0X3NtYWNrICpzc3AgPSBzb2NrLT5zay0+c2tfc2VjdXJpdHk7Ci0JY2hhciAqaG9zdHNwOwotCWludCByYzsKLQogCWlmIChzb2NrLT5zayA9PSBOVUxMIHx8IHNvY2stPnNrLT5za19mYW1pbHkgIT0gUEZfSU5FVCkKIAkJcmV0dXJuIDA7Ci0KIAlpZiAoYWRkcmxlbiA8IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWhvc3RzcCA9IHNtYWNrX2hvc3RfbGFiZWwoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhcCk7Ci0JaWYgKGhvc3RzcCA9PSBOVUxMKSB7Ci0JCWlmIChzc3AtPnNta19sYWJlbGVkICE9IFNNQUNLX0NJUFNPX1NPQ0tFVCkKLQkJCXJldHVybiBzbWFja19uZXRsYWJlbChzb2NrLT5zaywgU01BQ0tfQ0lQU09fU09DS0VUKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmMgPSBzbWtfYWNjZXNzKHNzcC0+c21rX291dCwgaG9zdHNwLCBNQVlfV1JJVEUpOwotCWlmIChyYyAhPSAwKQotCQlyZXR1cm4gcmM7Ci0KLQlpZiAoc3NwLT5zbWtfbGFiZWxlZCAhPSBTTUFDS19VTkxBQkVMRURfU09DS0VUKQotCQlyZXR1cm4gc21hY2tfbmV0bGFiZWwoc29jay0+c2ssIFNNQUNLX1VOTEFCRUxFRF9TT0NLRVQpOwotCXJldHVybiAwOworCXJldHVybiBzbWFja19uZXRsYWJlbF9zZW5kKHNvY2stPnNrLCAoc3RydWN0IHNvY2thZGRyX2luICopc2FwKTsKIH0KIAogLyoqCkBAIC0yMjYwLDkgKzIyNzIsNiBAQAogCQkJCWludCBzaXplKQogewogCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2lwID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBtc2ctPm1zZ19uYW1lOwotCXN0cnVjdCBzb2NrZXRfc21hY2sgKnNzcCA9IHNvY2stPnNrLT5za19zZWN1cml0eTsKLQljaGFyICpob3N0c3A7Ci0JaW50IHJjOwogCiAJLyoKIAkgKiBQZXJmZWN0bHkgcmVhc29uYWJsZSBmb3IgdGhpcyB0byBiZSBOVUxMCkBAIC0yMjcwLDIyICsyMjc5LDcgQEAKIAlpZiAoc2lwID09IE5VTEwgfHwgc2lwLT5zaW5fZmFtaWx5ICE9IFBGX0lORVQpCiAJCXJldHVybiAwOwogCi0JaG9zdHNwID0gc21hY2tfaG9zdF9sYWJlbChzaXApOwotCWlmIChob3N0c3AgPT0gTlVMTCkgewotCQlpZiAoc3NwLT5zbWtfbGFiZWxlZCAhPSBTTUFDS19DSVBTT19TT0NLRVQpCi0JCQlyZXR1cm4gc21hY2tfbmV0bGFiZWwoc29jay0+c2ssIFNNQUNLX0NJUFNPX1NPQ0tFVCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJjID0gc21rX2FjY2Vzcyhzc3AtPnNta19vdXQsIGhvc3RzcCwgTUFZX1dSSVRFKTsKLQlpZiAocmMgIT0gMCkKLQkJcmV0dXJuIHJjOwotCi0JaWYgKHNzcC0+c21rX2xhYmVsZWQgIT0gU01BQ0tfVU5MQUJFTEVEX1NPQ0tFVCkKLQkJcmV0dXJuIHNtYWNrX25ldGxhYmVsKHNvY2stPnNrLCBTTUFDS19VTkxBQkVMRURfU09DS0VUKTsKLQotCXJldHVybiAwOwotCisJcmV0dXJuIHNtYWNrX25ldGxhYmVsX3NlbmQoc29jay0+c2ssIHNpcCk7CiB9CiAKIApAQCAtMjQ5MCwzMSArMjQ4NCwyNCBAQAogfQogCiAvKioKLSAqIHNtYWNrX3NvY2tfZ3JhZnQgLSBncmFmdCBhY2Nlc3Mgc3RhdGUgYmV0d2VlbiB0d28gc29ja2V0cwotICogQHNrOiBmcmVzaCBzb2NrCi0gKiBAcGFyZW50OiBkb25vciBzb2NrZXQKKyAqIHNtYWNrX3NvY2tfZ3JhZnQgLSBJbml0aWFsaXplIGEgbmV3bHkgY3JlYXRlZCBzb2NrZXQgd2l0aCBhbiBleGlzdGluZyBzb2NrCisgKiBAc2s6IGNoaWxkIHNvY2sKKyAqIEBwYXJlbnQ6IHBhcmVudCBzb2NrZXQKICAqCi0gKiBTZXRzIHRoZSBuZXRsYWJlbCBzb2NrZXQgc3RhdGUgb24gc2sgZnJvbSBwYXJlbnQKKyAqIFNldCB0aGUgc21rX3tpbixvdXR9IHN0YXRlIG9mIGFuIGV4aXN0aW5nIHNvY2sgYmFzZWQgb24gdGhlIHByb2Nlc3MgdGhhdAorICogaXMgY3JlYXRpbmcgdGhlIG5ldyBzb2NrZXQuCiAgKi8KIHN0YXRpYyB2b2lkIHNtYWNrX3NvY2tfZ3JhZnQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2V0ICpwYXJlbnQpCiB7CiAJc3RydWN0IHNvY2tldF9zbWFjayAqc3NwOwotCWludCByYzsKIAotCWlmIChzayA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAoc2stPnNrX2ZhbWlseSAhPSBQRl9JTkVUICYmIHNrLT5za19mYW1pbHkgIT0gUEZfSU5FVDYpCisJaWYgKHNrID09IE5VTEwgfHwKKwkgICAgKHNrLT5za19mYW1pbHkgIT0gUEZfSU5FVCAmJiBzay0+c2tfZmFtaWx5ICE9IFBGX0lORVQ2KSkKIAkJcmV0dXJuOwogCiAJc3NwID0gc2stPnNrX3NlY3VyaXR5OwogCXNzcC0+c21rX2luID0gc3NwLT5zbWtfb3V0ID0gY3VycmVudF9zZWN1cml0eSgpOwotCXNzcC0+c21rX3BhY2tldFswXSA9ICdcMCc7Ci0KLQlyYyA9IHNtYWNrX25ldGxhYmVsKHNrLCBTTUFDS19DSVBTT19TT0NLRVQpOwotCWlmIChyYyAhPSAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJTbWFjazogXCIlc1wiIG5ldGxibCBlcnJvciAlZC5cbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgLXJjKTsKKwkvKiBjc3NwLT5zbWtfcGFja2V0IGlzIGFscmVhZHkgc2V0IGluIHNtYWNrX2luZXRfY3NrX2Nsb25lKCkgKi8KIH0KIAogLyoqCkBAIC0yNTI5LDM1ICsyNTE2LDgyIEBACiBzdGF0aWMgaW50IHNtYWNrX2luZXRfY29ubl9yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiB7Ci0Jc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciBza2Jfc2VjYXR0cjsKKwl1MTYgZmFtaWx5ID0gc2stPnNrX2ZhbWlseTsKIAlzdHJ1Y3Qgc29ja2V0X3NtYWNrICpzc3AgPSBzay0+c2tfc2VjdXJpdHk7CisJc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciBzZWNhdHRyOworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCXN0cnVjdCBpcGhkciAqaGRyOwogCWNoYXIgc21hY2tbU01LX0xBQkVMTEVOXTsKIAlpbnQgcmM7CiAKLQlpZiAoc2tiID09IE5VTEwpCi0JCXJldHVybiAtRUFDQ0VTOworCS8qIGhhbmRsZSBtYXBwZWQgSVB2NCBwYWNrZXRzIGFycml2aW5nIHZpYSBJUHY2IHNvY2tldHMgKi8KKwlpZiAoZmFtaWx5ID09IFBGX0lORVQ2ICYmIHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQorCQlmYW1pbHkgPSBQRl9JTkVUOwogCi0JbmV0bGJsX3NlY2F0dHJfaW5pdCgmc2tiX3NlY2F0dHIpOwotCXJjID0gbmV0bGJsX3NrYnVmZl9nZXRhdHRyKHNrYiwgc2stPnNrX2ZhbWlseSwgJnNrYl9zZWNhdHRyKTsKKwluZXRsYmxfc2VjYXR0cl9pbml0KCZzZWNhdHRyKTsKKwlyYyA9IG5ldGxibF9za2J1ZmZfZ2V0YXR0cihza2IsIGZhbWlseSwgJnNlY2F0dHIpOwogCWlmIChyYyA9PSAwKQotCQlzbWFja19mcm9tX3NlY2F0dHIoJnNrYl9zZWNhdHRyLCBzbWFjayk7CisJCXNtYWNrX2Zyb21fc2VjYXR0cigmc2VjYXR0ciwgc21hY2spOwogCWVsc2UKIAkJc3RybmNweShzbWFjaywgc21hY2tfa25vd25faHVoLnNta19rbm93biwgU01LX01BWExFTik7Ci0JbmV0bGJsX3NlY2F0dHJfZGVzdHJveSgmc2tiX3NlY2F0dHIpOworCW5ldGxibF9zZWNhdHRyX2Rlc3Ryb3koJnNlY2F0dHIpOworCiAJLyoKLQkgKiBSZWNlaXZpbmcgYSBwYWNrZXQgcmVxdWlyZXMgdGhhdCB0aGUgb3RoZXIgZW5kCi0JICogYmUgYWJsZSB0byB3cml0ZSBoZXJlLiBSZWFkIGFjY2VzcyBpcyBub3QgcmVxdWlyZWQuCi0JICoKLQkgKiBJZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsIHNhdmUgdGhlIHBlZXIncyBsYWJlbAotCSAqIHNvIHRoYXQgU09fUEVFUkNSRUQgY2FuIHJlcG9ydCBpdC4KKwkgKiBSZWNlaXZpbmcgYSBwYWNrZXQgcmVxdWlyZXMgdGhhdCB0aGUgb3RoZXIgZW5kIGJlIGFibGUgdG8gd3JpdGUKKwkgKiBoZXJlLiBSZWFkIGFjY2VzcyBpcyBub3QgcmVxdWlyZWQuCiAJICovCiAJcmMgPSBzbWtfYWNjZXNzKHNtYWNrLCBzc3AtPnNta19pbiwgTUFZX1dSSVRFKTsKLQlpZiAocmMgPT0gMCkKLQkJc3RybmNweShzc3AtPnNta19wYWNrZXQsIHNtYWNrLCBTTUtfTUFYTEVOKTsKKwlpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJLyoKKwkgKiBTYXZlIHRoZSBwZWVyJ3MgbGFiZWwgaW4gdGhlIHJlcXVlc3Rfc29jayBzbyB3ZSBjYW4gbGF0ZXIgc2V0dXAKKwkgKiBzbWtfcGFja2V0IGluIHRoZSBjaGlsZCBzb2NrZXQgc28gdGhhdCBTT19QRUVSQ1JFRCBjYW4gcmVwb3J0IGl0LgorCSAqLworCXJlcS0+cGVlcl9zZWNpZCA9IHNtYWNrX3RvX3NlY2lkKHNtYWNrKTsKKworCS8qCisJICogV2UgbmVlZCB0byBkZWNpZGUgaWYgd2Ugd2FudCB0byBsYWJlbCB0aGUgaW5jb21pbmcgY29ubmVjdGlvbiBoZXJlCisJICogaWYgd2UgZG8gd2Ugb25seSBuZWVkIHRvIGxhYmVsIHRoZSByZXF1ZXN0X3NvY2sgYW5kIHRoZSBzdGFjayB3aWxsCisJICogcHJvcG9nYXRlIHRoZSB3aXJlLWxhYmVsIHRvIHRoZSBzb2NrIHdoZW4gaXQgaXMgY3JlYXRlZC4KKwkgKi8KKwloZHIgPSBpcF9oZHIoc2tiKTsKKwlhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGhkci0+c2FkZHI7CisJcmN1X3JlYWRfbG9jaygpOworCWlmIChzbWFja19ob3N0X2xhYmVsKCZhZGRyKSA9PSBOVUxMKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQluZXRsYmxfc2VjYXR0cl9pbml0KCZzZWNhdHRyKTsKKwkJc21hY2tfdG9fc2VjYXR0cihzbWFjaywgJnNlY2F0dHIpOworCQlyYyA9IG5ldGxibF9yZXFfc2V0YXR0cihyZXEsICZzZWNhdHRyKTsKKwkJbmV0bGJsX3NlY2F0dHJfZGVzdHJveSgmc2VjYXR0cik7CisJfSBlbHNlIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCW5ldGxibF9yZXFfZGVsYXR0cihyZXEpOworCX0KIAogCXJldHVybiByYzsKIH0KIAorLyoqCisgKiBzbWFja19pbmV0X2Nza19jbG9uZSAtIENvcHkgdGhlIGNvbm5lY3Rpb24gaW5mb3JtYXRpb24gdG8gdGhlIG5ldyBzb2NrZXQKKyAqIEBzazogdGhlIG5ldyBzb2NrZXQKKyAqIEByZXE6IHRoZSBjb25uZWN0aW9uJ3MgcmVxdWVzdF9zb2NrCisgKgorICogVHJhbnNmZXIgdGhlIGNvbm5lY3Rpb24ncyBwZWVyIGxhYmVsIHRvIHRoZSBuZXdseSBjcmVhdGVkIHNvY2tldC4KKyAqLworc3RhdGljIHZvaWQgc21hY2tfaW5ldF9jc2tfY2xvbmUoc3RydWN0IHNvY2sgKnNrLAorCQkJCSBjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCit7CisJc3RydWN0IHNvY2tldF9zbWFjayAqc3NwID0gc2stPnNrX3NlY3VyaXR5OworCWNoYXIgKnNtYWNrOworCisJaWYgKHJlcS0+cGVlcl9zZWNpZCAhPSAwKSB7CisJCXNtYWNrID0gc21hY2tfZnJvbV9zZWNpZChyZXEtPnBlZXJfc2VjaWQpOworCQlzdHJuY3B5KHNzcC0+c21rX3BhY2tldCwgc21hY2ssIFNNS19NQVhMRU4pOworCX0gZWxzZQorCQlzc3AtPnNta19wYWNrZXRbMF0gPSAnXDAnOworfQorCiAvKgogICogS2V5IG1hbmFnZW1lbnQgc2VjdXJpdHkgaG9va3MKICAqCkBAIC0yOTA5LDYgKzI5NDMsNyBAQAogCS5za19mcmVlX3NlY3VyaXR5ID0gCQlzbWFja19za19mcmVlX3NlY3VyaXR5LAogCS5zb2NrX2dyYWZ0ID0gCQkJc21hY2tfc29ja19ncmFmdCwKIAkuaW5ldF9jb25uX3JlcXVlc3QgPSAJCXNtYWNrX2luZXRfY29ubl9yZXF1ZXN0LAorCS5pbmV0X2Nza19jbG9uZSA9CQlzbWFja19pbmV0X2Nza19jbG9uZSwKIAogIC8qIGtleSBtYW5hZ2VtZW50IHNlY3VyaXR5IGhvb2tzICovCiAjaWZkZWYgQ09ORklHX0tFWVMKQEAgLTI5MzAsNiArMjk2NSwxNyBAQAogCS5yZWxlYXNlX3NlY2N0eCA9IAkJc21hY2tfcmVsZWFzZV9zZWNjdHgsCiB9OwogCisKK3N0YXRpYyBfX2luaXQgdm9pZCBpbml0X3NtYWNrX2tub3dfbGlzdCh2b2lkKQoreworCWxpc3RfYWRkKCZzbWFja19rbm93bl9odWgubGlzdCwgJnNtYWNrX2tub3duX2xpc3QpOworCWxpc3RfYWRkKCZzbWFja19rbm93bl9oYXQubGlzdCwgJnNtYWNrX2tub3duX2xpc3QpOworCWxpc3RfYWRkKCZzbWFja19rbm93bl9zdGFyLmxpc3QsICZzbWFja19rbm93bl9saXN0KTsKKwlsaXN0X2FkZCgmc21hY2tfa25vd25fZmxvb3IubGlzdCwgJnNtYWNrX2tub3duX2xpc3QpOworCWxpc3RfYWRkKCZzbWFja19rbm93bl9pbnZhbGlkLmxpc3QsICZzbWFja19rbm93bl9saXN0KTsKKwlsaXN0X2FkZCgmc21hY2tfa25vd25fd2ViLmxpc3QsICZzbWFja19rbm93bl9saXN0KTsKK30KKwogLyoqCiAgKiBzbWFja19pbml0IC0gaW5pdGlhbGl6ZSB0aGUgc21hY2sgc3lzdGVtCiAgKgpAQCAtMjk1MCw2ICsyOTk2LDggQEAKIAljcmVkID0gKHN0cnVjdCBjcmVkICopIGN1cnJlbnQtPmNyZWQ7CiAJY3JlZC0+c2VjdXJpdHkgPSAmc21hY2tfa25vd25fZmxvb3Iuc21rX2tub3duOwogCisJLyogaW5pdGlsaXplIHRoZSBzbWFja19rbm93X2xpc3QgKi8KKwlpbml0X3NtYWNrX2tub3dfbGlzdCgpOwogCS8qCiAJICogSW5pdGlhbGl6ZSBsb2NrcwogCSAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jCmluZGV4IGExYjU3ZTQuLmUwM2E3ZTEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMKQEAgLTgwLDEwICs4MCwxNCBAQAogICogUGFja2V0cyBhcmUgc2VudCB0aGVyZSB1bmxhYmVsZWQsIGJ1dCBvbmx5IGZyb20gdGFza3MgdGhhdAogICogY2FuIHdyaXRlIHRvIHRoZSBzcGVjaWZpZWQgbGFiZWwuCiAgKi8KLXN0cnVjdCBzbWtfbmV0bGJsYWRkciAqc21hY2tfbmV0bGJsYWRkcnM7CisKK0xJU1RfSEVBRChzbWtfbmV0bGJsYWRkcl9saXN0KTsKK0xJU1RfSEVBRChzbWFja19ydWxlX2xpc3QpOwogCiBzdGF0aWMgaW50IHNta19jaXBzb19kb2lfdmFsdWUgPSBTTUFDS19DSVBTT19ET0lfREVGQVVMVDsKLXN0cnVjdCBzbWtfbGlzdF9lbnRyeSAqc21hY2tfbGlzdDsKKworY29uc3QgY2hhciAqc21hY2tfY2lwc29fb3B0aW9uID0gU01BQ0tfQ0lQU09fT1BUSU9OOworCiAKICNkZWZpbmUJU0VRX1JFQURfRklOSVNIRUQJMQogCkBAIC0xMzQsMjQgKzEzOCwyNyBAQAogewogCWlmICgqcG9zID09IFNFUV9SRUFEX0ZJTklTSEVEKQogCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBzbWFja19saXN0OworCWlmIChsaXN0X2VtcHR5KCZzbWFja19ydWxlX2xpc3QpKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gc21hY2tfcnVsZV9saXN0Lm5leHQ7CiB9CiAKIHN0YXRpYyB2b2lkICpsb2FkX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IHNta19saXN0X2VudHJ5ICpza3AgPSAoKHN0cnVjdCBzbWtfbGlzdF9lbnRyeSAqKSB2KS0+c21rX25leHQ7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCA9IHY7CiAKLQlpZiAoc2twID09IE5VTEwpCisJaWYgKGxpc3RfaXNfbGFzdChsaXN0LCAmc21hY2tfcnVsZV9saXN0KSkgewogCQkqcG9zID0gU0VRX1JFQURfRklOSVNIRUQ7Ci0KLQlyZXR1cm4gc2twOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIGxpc3QtPm5leHQ7CiB9CiAKIHN0YXRpYyBpbnQgbG9hZF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCiB7Ci0Jc3RydWN0IHNta19saXN0X2VudHJ5ICpzbHAgPSAoc3RydWN0IHNta19saXN0X2VudHJ5ICopIHY7Ci0Jc3RydWN0IHNtYWNrX3J1bGUgKnNycCA9ICZzbHAtPnNta19ydWxlOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSB2OworCXN0cnVjdCBzbWFja19ydWxlICpzcnAgPQorCQkgbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3Qgc21hY2tfcnVsZSwgbGlzdCk7CiAKIAlzZXFfcHJpbnRmKHMsICIlcyAlcyIsIChjaGFyICopc3JwLT5zbWtfc3ViamVjdCwKIAkJICAgKGNoYXIgKilzcnAtPnNta19vYmplY3QpOwpAQCAtMjEyLDMyICsyMTksMjMgQEAKICAqLwogc3RhdGljIGludCBzbWtfc2V0X2FjY2VzcyhzdHJ1Y3Qgc21hY2tfcnVsZSAqc3JwKQogewotCXN0cnVjdCBzbWtfbGlzdF9lbnRyeSAqc3A7Ci0Jc3RydWN0IHNta19saXN0X2VudHJ5ICpuZXdwOworCXN0cnVjdCBzbWFja19ydWxlICpzcDsKIAlpbnQgcmV0ID0gMDsKLQorCWludCBmb3VuZDsKIAltdXRleF9sb2NrKCZzbWFja19saXN0X2xvY2spOwogCi0JZm9yIChzcCA9IHNtYWNrX2xpc3Q7IHNwICE9IE5VTEw7IHNwID0gc3AtPnNta19uZXh0KQotCQlpZiAoc3AtPnNta19ydWxlLnNta19zdWJqZWN0ID09IHNycC0+c21rX3N1YmplY3QgJiYKLQkJICAgIHNwLT5zbWtfcnVsZS5zbWtfb2JqZWN0ID09IHNycC0+c21rX29iamVjdCkgewotCQkJc3AtPnNta19ydWxlLnNta19hY2Nlc3MgPSBzcnAtPnNta19hY2Nlc3M7CisJZm91bmQgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNwLCAmc21hY2tfcnVsZV9saXN0LCBsaXN0KSB7CisJCWlmIChzcC0+c21rX3N1YmplY3QgPT0gc3JwLT5zbWtfc3ViamVjdCAmJgorCQkgICAgc3AtPnNta19vYmplY3QgPT0gc3JwLT5zbWtfb2JqZWN0KSB7CisJCQlmb3VuZCA9IDE7CisJCQlzcC0+c21rX2FjY2VzcyA9IHNycC0+c21rX2FjY2VzczsKIAkJCWJyZWFrOwogCQl9Ci0KLQlpZiAoc3AgPT0gTlVMTCkgewotCQluZXdwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNta19saXN0X2VudHJ5KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChuZXdwID09IE5VTEwpIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCW5ld3AtPnNta19ydWxlID0gKnNycDsKLQkJbmV3cC0+c21rX25leHQgPSBzbWFja19saXN0OwotCQlzbWFja19saXN0ID0gbmV3cDsKIAl9CisJaWYgKGZvdW5kID09IDApCisJCWxpc3RfYWRkX3JjdSgmc3JwLT5saXN0LCAmc21hY2tfcnVsZV9saXN0KTsKIAotb3V0OgogCW11dGV4X3VubG9jaygmc21hY2tfbGlzdF9sb2NrKTsKIAogCXJldHVybiByZXQ7CkBAIC0yNjEsNyArMjU5LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHNta193cml0ZV9sb2FkKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IHNtYWNrX3J1bGUgcnVsZTsKKwlzdHJ1Y3Qgc21hY2tfcnVsZSAqcnVsZTsKIAljaGFyICpkYXRhOwogCWludCByYyA9IC1FSU5WQUw7CiAKQEAgLTI3Miw5ICsyNzAsOCBAQAogCSAqLwogCWlmICghY2FwYWJsZShDQVBfTUFDX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKLQlpZiAoKnBwb3MgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGNvdW50ICE9IFNNS19MT0FETEVOKQorCisJaWYgKCpwcG9zICE9IDAgfHwgY291bnQgIT0gU01LX0xPQURMRU4pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZGF0YSA9IGt6YWxsb2MoY291bnQsIEdGUF9LRVJORUwpOwpAQCAtMjg2LDI1ICsyODMsMzEgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcnVsZS5zbWtfc3ViamVjdCA9IHNta19pbXBvcnQoZGF0YSwgMCk7Ci0JaWYgKHJ1bGUuc21rX3N1YmplY3QgPT0gTlVMTCkKKwlydWxlID0ga3phbGxvYyhzaXplb2YoKnJ1bGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAocnVsZSA9PSBOVUxMKSB7CisJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CisJfQogCi0JcnVsZS5zbWtfb2JqZWN0ID0gc21rX2ltcG9ydChkYXRhICsgU01LX0xBQkVMTEVOLCAwKTsKLQlpZiAocnVsZS5zbWtfb2JqZWN0ID09IE5VTEwpCi0JCWdvdG8gb3V0OworCXJ1bGUtPnNta19zdWJqZWN0ID0gc21rX2ltcG9ydChkYXRhLCAwKTsKKwlpZiAocnVsZS0+c21rX3N1YmplY3QgPT0gTlVMTCkKKwkJZ290byBvdXRfZnJlZV9ydWxlOwogCi0JcnVsZS5zbWtfYWNjZXNzID0gMDsKKwlydWxlLT5zbWtfb2JqZWN0ID0gc21rX2ltcG9ydChkYXRhICsgU01LX0xBQkVMTEVOLCAwKTsKKwlpZiAocnVsZS0+c21rX29iamVjdCA9PSBOVUxMKQorCQlnb3RvIG91dF9mcmVlX3J1bGU7CisKKwlydWxlLT5zbWtfYWNjZXNzID0gMDsKIAogCXN3aXRjaCAoZGF0YVtTTUtfTEFCRUxMRU4gKyBTTUtfTEFCRUxMRU5dKSB7CiAJY2FzZSAnLSc6CiAJCWJyZWFrOwogCWNhc2UgJ3InOgogCWNhc2UgJ1InOgotCQlydWxlLnNta19hY2Nlc3MgfD0gTUFZX1JFQUQ7CisJCXJ1bGUtPnNta19hY2Nlc3MgfD0gTUFZX1JFQUQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9mcmVlX3J1bGU7CiAJfQogCiAJc3dpdGNoIChkYXRhW1NNS19MQUJFTExFTiArIFNNS19MQUJFTExFTiArIDFdKSB7CkBAIC0zMTIsMTAgKzMxNSwxMCBAQAogCQlicmVhazsKIAljYXNlICd3JzoKIAljYXNlICdXJzoKLQkJcnVsZS5zbWtfYWNjZXNzIHw9IE1BWV9XUklURTsKKwkJcnVsZS0+c21rX2FjY2VzcyB8PSBNQVlfV1JJVEU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9mcmVlX3J1bGU7CiAJfQogCiAJc3dpdGNoIChkYXRhW1NNS19MQUJFTExFTiArIFNNS19MQUJFTExFTiArIDJdKSB7CkBAIC0zMjMsMTAgKzMyNiwxMCBAQAogCQlicmVhazsKIAljYXNlICd4JzoKIAljYXNlICdYJzoKLQkJcnVsZS5zbWtfYWNjZXNzIHw9IE1BWV9FWEVDOworCQlydWxlLT5zbWtfYWNjZXNzIHw9IE1BWV9FWEVDOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfZnJlZV9ydWxlOwogCX0KIAogCXN3aXRjaCAoZGF0YVtTTUtfTEFCRUxMRU4gKyBTTUtfTEFCRUxMRU4gKyAzXSkgewpAQCAtMzM0LDE3ICszMzcsMjAgQEAKIAkJYnJlYWs7CiAJY2FzZSAnYSc6CiAJY2FzZSAnQSc6Ci0JCXJ1bGUuc21rX2FjY2VzcyB8PSBNQVlfQVBQRU5EOworCQlydWxlLT5zbWtfYWNjZXNzIHw9IE1BWV9BUFBFTkQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9mcmVlX3J1bGU7CiAJfQogCi0JcmMgPSBzbWtfc2V0X2FjY2VzcygmcnVsZSk7CisJcmMgPSBzbWtfc2V0X2FjY2VzcyhydWxlKTsKIAogCWlmICghcmMpCiAJCXJjID0gY291bnQ7CisJZ290byBvdXQ7CiAKK291dF9mcmVlX3J1bGU6CisJa2ZyZWUocnVsZSk7CiBvdXQ6CiAJa2ZyZWUoZGF0YSk7CiAJcmV0dXJuIHJjOwpAQCAtNDMzLDI0ICs0MzksMjYgQEAKIHsKIAlpZiAoKnBvcyA9PSBTRVFfUkVBRF9GSU5JU0hFRCkKIAkJcmV0dXJuIE5VTEw7CisJaWYgKGxpc3RfZW1wdHkoJnNtYWNrX2tub3duX2xpc3QpKQorCQlyZXR1cm4gTlVMTDsKIAotCXJldHVybiBzbWFja19rbm93bjsKKwlyZXR1cm4gc21hY2tfa25vd25fbGlzdC5uZXh0OwogfQogCiBzdGF0aWMgdm9pZCAqY2lwc29fc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3Qgc21hY2tfa25vd24gKnNrcCA9ICgoc3RydWN0IHNtYWNrX2tub3duICopIHYpLT5zbWtfbmV4dDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAqbGlzdCA9IHY7CiAKIAkvKgotCSAqIE9taXQgbGFiZWxzIHdpdGggbm8gYXNzb2NpYXRlZCBjaXBzbyB2YWx1ZQorCSAqIGxhYmVscyB3aXRoIG5vIGFzc29jaWF0ZWQgY2lwc28gdmFsdWUgd29udCBiZSBwcmludGVkCisJICogaW4gY2lwc29fc2VxX3Nob3cKIAkgKi8KLQl3aGlsZSAoc2twICE9IE5VTEwgJiYgIXNrcC0+c21rX2NpcHNvKQotCQlza3AgPSBza3AtPnNta19uZXh0OwotCi0JaWYgKHNrcCA9PSBOVUxMKQorCWlmIChsaXN0X2lzX2xhc3QobGlzdCwgJnNtYWNrX2tub3duX2xpc3QpKSB7CiAJCSpwb3MgPSBTRVFfUkVBRF9GSU5JU0hFRDsKKwkJcmV0dXJuIE5VTEw7CisJfQogCi0JcmV0dXJuIHNrcDsKKwlyZXR1cm4gbGlzdC0+bmV4dDsKIH0KIAogLyoKQEAgLTQ1OSw3ICs0NjcsOSBAQAogICovCiBzdGF0aWMgaW50IGNpcHNvX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKIHsKLQlzdHJ1Y3Qgc21hY2tfa25vd24gKnNrcCA9IChzdHJ1Y3Qgc21hY2tfa25vd24gKikgdjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAqbGlzdCA9IHY7CisJc3RydWN0IHNtYWNrX2tub3duICpza3AgPQorCQkgbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3Qgc21hY2tfa25vd24sIGxpc3QpOwogCXN0cnVjdCBzbWFja19jaXBzbyAqc2NwID0gc2twLT5zbWtfY2lwc287CiAJY2hhciAqY2JwOwogCWNoYXIgc2VwID0gJy8nOwpAQCAtNTU4LDYgKzU2OCwxMSBAQAogCQlnb3RvIHVubG9ja2Vkb3V0OwogCX0KIAorCS8qIGxhYmVscyBjYW5ub3QgYmVnaW4gd2l0aCBhICctJyAqLworCWlmIChkYXRhWzBdID09ICctJykgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gdW5sb2NrZWRvdXQ7CisJfQogCWRhdGFbY291bnRdID0gJ1wwJzsKIAlydWxlID0gZGF0YTsKIAkvKgpAQCAtNjM4LDE4ICs2NTMsMjEgQEAKIHsKIAlpZiAoKnBvcyA9PSBTRVFfUkVBRF9GSU5JU0hFRCkKIAkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gc21hY2tfbmV0bGJsYWRkcnM7CisJaWYgKGxpc3RfZW1wdHkoJnNta19uZXRsYmxhZGRyX2xpc3QpKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gc21rX25ldGxibGFkZHJfbGlzdC5uZXh0OwogfQogCiBzdGF0aWMgdm9pZCAqbmV0bGJsYWRkcl9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBzbWtfbmV0bGJsYWRkciAqc2twID0gKChzdHJ1Y3Qgc21rX25ldGxibGFkZHIgKikgdiktPnNta19uZXh0OworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSB2OwogCi0JaWYgKHNrcCA9PSBOVUxMKQorCWlmIChsaXN0X2lzX2xhc3QobGlzdCwgJnNta19uZXRsYmxhZGRyX2xpc3QpKSB7CiAJCSpwb3MgPSBTRVFfUkVBRF9GSU5JU0hFRDsKKwkJcmV0dXJuIE5VTEw7CisJfQogCi0JcmV0dXJuIHNrcDsKKwlyZXR1cm4gbGlzdC0+bmV4dDsKIH0KICNkZWZpbmUgQkVCSVRTCShzaXplb2YoX19iZTMyKSAqIDgpCiAKQEAgLTY1OCw3ICs2NzYsOSBAQAogICovCiBzdGF0aWMgaW50IG5ldGxibGFkZHJfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQogewotCXN0cnVjdCBzbWtfbmV0bGJsYWRkciAqc2twID0gKHN0cnVjdCBzbWtfbmV0bGJsYWRkciAqKSB2OworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSB2OworCXN0cnVjdCBzbWtfbmV0bGJsYWRkciAqc2twID0KKwkJCSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBzbWtfbmV0bGJsYWRkciwgbGlzdCk7CiAJdW5zaWduZWQgY2hhciAqaHAgPSAoY2hhciAqKSAmc2twLT5zbWtfaG9zdC5zaW5fYWRkci5zX2FkZHI7CiAJaW50IG1hc2tuOwogCXUzMiB0ZW1wX21hc2sgPSBiZTMyX3RvX2NwdShza3AtPnNta19tYXNrLnNfYWRkcik7CkBAIC03MDIsMzAgKzcyMiwzNiBAQAogICoKICAqIFRoaXMgaGVscGVyIGluc2VydCBuZXRsYWJlbCBpbiB0aGUgc21hY2tfbmV0bGJsYWRkcnMgbGlzdAogICogc29ydGVkIGJ5IG5ldG1hc2sgbGVuZ3RoIChsb25nZXN0IHRvIHNtYWxsZXN0KQorICogbG9ja2VkIGJ5ICZzbWtfbmV0bGJsYWRkcl9sb2NrIGluIHNta193cml0ZV9uZXRsYmxhZGRyCisgKgogICovCiBzdGF0aWMgdm9pZCBzbWtfbmV0bGJsYWRkcl9pbnNlcnQoc3RydWN0IHNta19uZXRsYmxhZGRyICpuZXcpCiB7Ci0Jc3RydWN0IHNta19uZXRsYmxhZGRyICptOworCXN0cnVjdCBzbWtfbmV0bGJsYWRkciAqbSwgKm1fbmV4dDsKIAotCWlmIChzbWFja19uZXRsYmxhZGRycyA9PSBOVUxMKSB7Ci0JCXNtYWNrX25ldGxibGFkZHJzID0gbmV3OworCWlmIChsaXN0X2VtcHR5KCZzbWtfbmV0bGJsYWRkcl9saXN0KSkgeworCQlsaXN0X2FkZF9yY3UoJm5ldy0+bGlzdCwgJnNta19uZXRsYmxhZGRyX2xpc3QpOwogCQlyZXR1cm47CiAJfQogCisJbSA9IGxpc3RfZW50cnkocmN1X2RlcmVmZXJlbmNlKHNta19uZXRsYmxhZGRyX2xpc3QubmV4dCksCisJCQkgc3RydWN0IHNta19uZXRsYmxhZGRyLCBsaXN0KTsKKwogCS8qIHRoZSBjb21wYXJpc29uICc+JyBpcyBhIGJpdCBoYWNreSwgYnV0IHdvcmtzICovCi0JaWYgKG5ldy0+c21rX21hc2suc19hZGRyID4gc21hY2tfbmV0bGJsYWRkcnMtPnNta19tYXNrLnNfYWRkcikgewotCQluZXctPnNta19uZXh0ID0gc21hY2tfbmV0bGJsYWRkcnM7Ci0JCXNtYWNrX25ldGxibGFkZHJzID0gbmV3OworCWlmIChuZXctPnNta19tYXNrLnNfYWRkciA+IG0tPnNta19tYXNrLnNfYWRkcikgeworCQlsaXN0X2FkZF9yY3UoJm5ldy0+bGlzdCwgJnNta19uZXRsYmxhZGRyX2xpc3QpOwogCQlyZXR1cm47CiAJfQotCWZvciAobSA9IHNtYWNrX25ldGxibGFkZHJzOyBtICE9IE5VTEw7IG0gPSBtLT5zbWtfbmV4dCkgewotCQlpZiAobS0+c21rX25leHQgPT0gTlVMTCkgewotCQkJbS0+c21rX25leHQgPSBuZXc7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShtLCAmc21rX25ldGxibGFkZHJfbGlzdCwgbGlzdCkgeworCQlpZiAobGlzdF9pc19sYXN0KCZtLT5saXN0LCAmc21rX25ldGxibGFkZHJfbGlzdCkpIHsKKwkJCWxpc3RfYWRkX3JjdSgmbmV3LT5saXN0LCAmbS0+bGlzdCk7CiAJCQlyZXR1cm47CiAJCX0KLQkJaWYgKG5ldy0+c21rX21hc2suc19hZGRyID4gbS0+c21rX25leHQtPnNta19tYXNrLnNfYWRkcikgewotCQkJbmV3LT5zbWtfbmV4dCA9IG0tPnNta19uZXh0OwotCQkJbS0+c21rX25leHQgPSBuZXc7CisJCW1fbmV4dCA9IGxpc3RfZW50cnkocmN1X2RlcmVmZXJlbmNlKG0tPmxpc3QubmV4dCksCisJCQkJIHN0cnVjdCBzbWtfbmV0bGJsYWRkciwgbGlzdCk7CisJCWlmIChuZXctPnNta19tYXNrLnNfYWRkciA+IG1fbmV4dC0+c21rX21hc2suc19hZGRyKSB7CisJCQlsaXN0X2FkZF9yY3UoJm5ldy0+bGlzdCwgJm0tPmxpc3QpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtNzU1LDYgKzc4MSw3IEBACiAJc3RydWN0IG5ldGxibF9hdWRpdCBhdWRpdF9pbmZvOwogCXN0cnVjdCBpbl9hZGRyIG1hc2s7CiAJdW5zaWduZWQgaW50IG07CisJaW50IGZvdW5kOwogCXUzMiBtYXNrX2JpdHMgPSAoMTw8MzEpOwogCV9fYmUzMiBuc2E7CiAJdTMyIHRlbXBfbWFzazsKQEAgLTc4OSw5ICs4MTYsMTggQEAKIAlpZiAobSA+IEJFQklUUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcCA9IHNta19pbXBvcnQoc21hY2ssIDApOwotCWlmIChzcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBpZiBzbWFjayBiZWdpbnMgd2l0aCAnLScsIGl0cyBhbiBvcHRpb24sIGRvbid0IGltcG9ydCBpdCAqLworCWlmIChzbWFja1swXSAhPSAnLScpIHsKKwkJc3AgPSBzbWtfaW1wb3J0KHNtYWNrLCAwKTsKKwkJaWYgKHNwID09IE5VTEwpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQkvKiBjaGVjayBrbm93biBvcHRpb25zICovCisJCWlmIChzdHJjbXAoc21hY2ssIHNtYWNrX2NpcHNvX29wdGlvbikgPT0gMCkKKwkJCXNwID0gKGNoYXIgKilzbWFja19jaXBzb19vcHRpb247CisJCWVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWZvciAodGVtcF9tYXNrID0gMDsgbSA+IDA7IG0tLSkgewogCQl0ZW1wX21hc2sgfD0gbWFza19iaXRzOwpAQCAtODA4LDE0ICs4NDQsMTcgQEAKIAogCW5zYSA9IG5ld25hbWUuc2luX2FkZHIuc19hZGRyOwogCS8qIHRyeSB0byBmaW5kIGlmIHRoZSBwcmVmaXggaXMgYWxyZWFkeSBpbiB0aGUgbGlzdCAqLwotCWZvciAoc2twID0gc21hY2tfbmV0bGJsYWRkcnM7IHNrcCAhPSBOVUxMOyBza3AgPSBza3AtPnNta19uZXh0KQorCWZvdW5kID0gMDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShza3AsICZzbWtfbmV0bGJsYWRkcl9saXN0LCBsaXN0KSB7CiAJCWlmIChza3AtPnNta19ob3N0LnNpbl9hZGRyLnNfYWRkciA9PSBuc2EgJiYKLQkJICAgIHNrcC0+c21rX21hc2suc19hZGRyID09IG1hc2suc19hZGRyKQorCQkgICAgc2twLT5zbWtfbWFzay5zX2FkZHIgPT0gbWFzay5zX2FkZHIpIHsKKwkJCWZvdW5kID0gMTsKIAkJCWJyZWFrOwotCisJCX0KKwl9CiAJc21rX25ldGxhYmVsX2F1ZGl0X3NldCgmYXVkaXRfaW5mbyk7CiAKLQlpZiAoc2twID09IE5VTEwpIHsKKwlpZiAoZm91bmQgPT0gMCkgewogCQlza3AgPSBremFsbG9jKHNpemVvZigqc2twKSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChza3AgPT0gTlVMTCkKIAkJCXJjID0gLUVOT01FTTsKQEAgLTgyNywxOCArODY2LDIzIEBACiAJCQlzbWtfbmV0bGJsYWRkcl9pbnNlcnQoc2twKTsKIAkJfQogCX0gZWxzZSB7Ci0JCXJjID0gbmV0bGJsX2NmZ191bmxibF9zdGF0aWNfZGVsKCZpbml0X25ldCwgTlVMTCwKLQkJCSZza3AtPnNta19ob3N0LnNpbl9hZGRyLCAmc2twLT5zbWtfbWFzaywKLQkJCVBGX0lORVQsICZhdWRpdF9pbmZvKTsKKwkJLyogd2UgZGVsZXRlIHRoZSB1bmxhYmVsZWQgZW50cnksIG9ubHkgaWYgdGhlIHByZXZpb3VzIGxhYmVsCisJCSAqIHdhc250IHRoZSBzcGVjaWFsIENJUFNPIG9wdGlvbiAqLworCQlpZiAoc2twLT5zbWtfbGFiZWwgIT0gc21hY2tfY2lwc29fb3B0aW9uKQorCQkJcmMgPSBuZXRsYmxfY2ZnX3VubGJsX3N0YXRpY19kZWwoJmluaXRfbmV0LCBOVUxMLAorCQkJCQkmc2twLT5zbWtfaG9zdC5zaW5fYWRkciwgJnNrcC0+c21rX21hc2ssCisJCQkJCVBGX0lORVQsICZhdWRpdF9pbmZvKTsKKwkJZWxzZQorCQkJcmMgPSAwOwogCQlza3AtPnNta19sYWJlbCA9IHNwOwogCX0KIAogCS8qCiAJICogTm93IHRlbGwgbmV0bGFiZWwgYWJvdXQgdGhlIHNpbmdsZSBsYWJlbCBuYXR1cmUgb2YKIAkgKiB0aGlzIGhvc3Qgc28gdGhhdCBpbmNvbWluZyBwYWNrZXRzIGdldCBsYWJlbGVkLgorCSAqIGJ1dCBvbmx5IGlmIHdlIGRpZG4ndCBnZXQgdGhlIHNwZWNpYWwgQ0lQU08gb3B0aW9uCiAJICovCi0KLQlpZiAocmMgPT0gMCkKKwlpZiAocmMgPT0gMCAmJiBzcCAhPSBzbWFja19jaXBzb19vcHRpb24pCiAJCXJjID0gbmV0bGJsX2NmZ191bmxibF9zdGF0aWNfYWRkKCZpbml0X25ldCwgTlVMTCwKIAkJCSZza3AtPnNta19ob3N0LnNpbl9hZGRyLCAmc2twLT5zbWtfbWFzaywgUEZfSU5FVCwKIAkJCXNtYWNrX3RvX3NlY2lkKHNrcC0+c21rX2xhYmVsKSwgJmF1ZGl0X2luZm8pOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oIGIvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oCmluZGV4IDZkY2I3Y2MuLjI2YTc2ZDYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3RvbW95by9jb21tb24uaAorKysgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmgKQEAgLTU1LDcgKzU1LDcgQEAKIHN0cnVjdCB0b21veW9fcGF0aF9pbmZvX3dpdGhfZGF0YSB7CiAJLyogS2VlcCAiaGVhZCIgZmlyc3QsIGZvciB0aGlzIHBvaW50ZXIgaXMgcGFzc2VkIHRvIHRvbW95b19mcmVlKCkuICovCiAJc3RydWN0IHRvbW95b19wYXRoX2luZm8gaGVhZDsKLQljaGFyIGJhcmlpZXIxWzE2XTsgLyogU2FmZWd1YXJkIGZvciBvdmVycnVuLiAqLworCWNoYXIgYmFycmllcjFbMTZdOyAvKiBTYWZlZ3VhcmQgZm9yIG92ZXJydW4uICovCiAJY2hhciBib2R5W1RPTU9ZT19NQVhfUEFUSE5BTUVfTEVOXTsKIAljaGFyIGJhcnJpZXIyWzE2XTsgLyogU2FmZWd1YXJkIGZvciBvdmVycnVuLiAqLwogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaW5mby5jIGIvc291bmQvY29yZS9pbmZvLmMKaW5kZXggNzBmYTg3MS4uMzVkZjYxNCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9pbmZvLmMKKysrIGIvc291bmQvY29yZS9pbmZvLmMKQEAgLTE1NCwxMSArMTU0LDYgQEAKIHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqc25kX29zc19yb290OwogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzbmRfaW5mb19lbnRyeV9wcmVwYXJlKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUpCi17Ci0JZGUtPm93bmVyID0gVEhJU19NT0RVTEU7Ci19Ci0KIHN0YXRpYyB2b2lkIHNuZF9yZW1vdmVfcHJvY19lbnRyeShzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudCwKIAkJCQkgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUpCiB7CkBAIC01MjIsMzIgKzUxNywxMSBAQAogCS5yZWxlYXNlID0JCXNuZF9pbmZvX2VudHJ5X3JlbGVhc2UsCiB9OwogCi0vKioKLSAqIHNuZF9jcmVhdGVfcHJvY19lbnRyeSAtIGNyZWF0ZSBhIHByb2NmcyBlbnRyeQotICogQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBwcm9jIGZpbGUKLSAqIEBtb2RlOiB0aGUgZmlsZSBwZXJtaXNzaW9uIGJpdHMsIFNfSXh4eAotICogQHBhcmVudDogdGhlIHBhcmVudCBwcm9jLWRpcmVjdG9yeSBlbnRyeQotICoKLSAqIENyZWF0ZXMgYSBuZXcgcHJvYyBmaWxlIGVudHJ5IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHBlcm1pc3Npb24KLSAqIG9uIHRoZSBnaXZlbiBkaXJlY3RvcnkuCi0gKgotICogUmV0dXJucyB0aGUgcG9pbnRlciBvZiBuZXcgaW5zdGFuY2Ugb3IgTlVMTCBvbiBmYWlsdXJlLgotICovCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpzbmRfY3JlYXRlX3Byb2NfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgbW9kZV90IG1vZGUsCi0JCQkJCQkgICAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwYXJlbnQpCi17Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwOwotCXAgPSBjcmVhdGVfcHJvY19lbnRyeShuYW1lLCBtb2RlLCBwYXJlbnQpOwotCWlmIChwKQotCQlzbmRfaW5mb19lbnRyeV9wcmVwYXJlKHApOwotCXJldHVybiBwOwotfQotCiBpbnQgX19pbml0IHNuZF9pbmZvX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnA7CiAKLQlwID0gc25kX2NyZWF0ZV9wcm9jX2VudHJ5KCJhc291bmQiLCBTX0lGRElSIHwgU19JUlVHTyB8IFNfSVhVR08sIE5VTEwpOworCXAgPSBjcmVhdGVfcHJvY19lbnRyeSgiYXNvdW5kIiwgU19JRkRJUiB8IFNfSVJVR08gfCBTX0lYVUdPLCBOVUxMKTsKIAlpZiAocCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzbmRfcHJvY19yb290ID0gcDsKQEAgLTk3NCwxMiArOTQ4LDExIEBACiAJCXJldHVybiAtRU5YSU87CiAJcm9vdCA9IGVudHJ5LT5wYXJlbnQgPT0gTlVMTCA/IHNuZF9wcm9jX3Jvb3QgOiBlbnRyeS0+cGFyZW50LT5wOwogCW11dGV4X2xvY2soJmluZm9fbXV0ZXgpOwotCXAgPSBzbmRfY3JlYXRlX3Byb2NfZW50cnkoZW50cnktPm5hbWUsIGVudHJ5LT5tb2RlLCByb290KTsKKwlwID0gY3JlYXRlX3Byb2NfZW50cnkoZW50cnktPm5hbWUsIGVudHJ5LT5tb2RlLCByb290KTsKIAlpZiAoIXApIHsKIAkJbXV0ZXhfdW5sb2NrKCZpbmZvX211dGV4KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXAtPm93bmVyID0gZW50cnktPm1vZHVsZTsKIAlpZiAoIVNfSVNESVIoZW50cnktPm1vZGUpKQogCQlwLT5wcm9jX2ZvcHMgPSAmc25kX2luZm9fZW50cnlfb3BlcmF0aW9uczsKIAlwLT5zaXplID0gZW50cnktPnNpemU7CmRpZmYgLS1naXQgYS9zb3VuZC9pMmMvb3RoZXIvdGVhNTc1eC10dW5lci5jIGIvc291bmQvaTJjL290aGVyL3RlYTU3NXgtdHVuZXIuYwppbmRleCA5ZDk4YTY2Li5kMzFjMzczIDEwMDY0NAotLS0gYS9zb3VuZC9pMmMvb3RoZXIvdGVhNTc1eC10dW5lci5jCisrKyBiL3NvdW5kL2kyYy9vdGhlci90ZWE1NzV4LXR1bmVyLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3RlYTU3NXgtdHVuZXIuaD4KIApAQCAtMzEsNiArMzIsMTMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiUm91dGluZXMgZm9yIGNvbnRyb2wgb2YgVEVBNTc1Ny81NzU5IFBoaWxpcHMgQU0vRk0gcmFkaW8gdHVuZXIgY2hpcHMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorc3RhdGljIGludCByYWRpb19uciA9IC0xOworbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOworCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMikKKyNkZWZpbmUgRlJFUV9MTwkJICg4NyAqIDE2MDAwKQorI2RlZmluZSBGUkVRX0hJCQkoMTA4ICogMTYwMDApCisKIC8qCiAgKiBkZWZpbml0aW9ucwogICovCkBAIC01Myw2ICs2MSwxNyBAQAogI2RlZmluZSBURUE1NzVYX0JJVF9EVU1NWQkoMTw8MTUpCQkvKiBidWZmZXIgKi8KICNkZWZpbmUgVEVBNTc1WF9CSVRfRlJFUV9NQVNLCTB4N2ZmZgogCitzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7CisJeworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCisJCS5uYW1lICAgICAgICAgID0gIk11dGUiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJfQorfTsKKwogLyoKICAqIGxvd2xldmVsIHBhcnQKICAqLwpAQCAtODQsOTQgKzEwMywxNDYgQEAKICAqIExpbnV4IFZpZGVvIGludGVyZmFjZQogICovCiAKLXN0YXRpYyBsb25nIHNuZF90ZWE1NzV4X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCiB7CiAJc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCXZvaWQgX191c2VyICphcmcgPSAodm9pZCBfX3VzZXIgKilkYXRhOwogCi0Jc3dpdGNoKGNtZCkgewotCQljYXNlIFZJRElPQ0dDQVA6Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5IHY7Ci0JCQl2LnR5cGUgPSBWSURfVFlQRV9UVU5FUjsKLQkJCXYuY2hhbm5lbHMgPSAxOwotCQkJdi5hdWRpb3MgPSAxOwotCQkJLyogTm8gd2UgZG9uJ3QgZG8gcGljdHVyZXMgKi8KLQkJCXYubWF4d2lkdGggPSAwOwotCQkJdi5tYXhoZWlnaHQgPSAwOwotCQkJdi5taW53aWR0aCA9IDA7Ci0JCQl2Lm1pbmhlaWdodCA9IDA7Ci0JCQlzdHJjcHkodi5uYW1lLCB0ZWEtPnRlYTU3NTkgPyAiVEVBNTc1OSIgOiAiVEVBNTc1NyIpOwotCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsJnYsc2l6ZW9mKHYpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgVklESU9DR1RVTkVSOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgdjsKLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmdiwgYXJnLHNpemVvZih2KSkhPTApCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlpZiAodi50dW5lcikJLyogT25seSAxIHR1bmVyICovCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl2LnJhbmdlbG93ID0gKDg3KjE2MDAwKTsKLQkJCXYucmFuZ2VoaWdoID0gKDEwOCoxNjAwMCk7Ci0JCQl2LmZsYWdzID0gVklERU9fVFVORVJfTE9XOwotCQkJdi5tb2RlID0gVklERU9fTU9ERV9BVVRPOwotCQkJc3RyY3B5KHYubmFtZSwgIkZNIik7Ci0JCQl2LnNpZ25hbCA9IDB4RkZGRjsKLQkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdiwgc2l6ZW9mKHYpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgVklESU9DU1RVTkVSOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgdjsKLQkJCWlmKGNvcHlfZnJvbV91c2VyKCZ2LCBhcmcsIHNpemVvZih2KSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlpZih2LnR1bmVyIT0wKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJLyogT25seSAxIHR1bmVyIHNvIG5vIHNldHRpbmcgbmVlZGVkICEgKi8KLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgVklESU9DR0ZSRVE6Ci0JCQlpZihjb3B5X3RvX3VzZXIoYXJnLCAmdGVhLT5mcmVxLCBzaXplb2YodGVhLT5mcmVxKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gMDsKLQkJY2FzZSBWSURJT0NTRlJFUToKLQkJCWlmKGNvcHlfZnJvbV91c2VyKCZ0ZWEtPmZyZXEsIGFyZywgc2l6ZW9mKHRlYS0+ZnJlcSkpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJc25kX3RlYTU3NXhfc2V0X2ZyZXEodGVhKTsKLQkJCXJldHVybiAwOwotCQljYXNlIFZJRElPQ0dBVURJTzoKLQkJewotCQkJc3RydWN0IHZpZGVvX2F1ZGlvIHY7Ci0JCQltZW1zZXQoJnYsIDAsIHNpemVvZih2KSk7Ci0JCQlzdHJjcHkodi5uYW1lLCAiUmFkaW8iKTsKLQkJCWlmKGNvcHlfdG9fdXNlcihhcmcsJnYsIHNpemVvZih2KSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQljYXNlIFZJRElPQ1NBVURJTzoKLQkJewotCQkJc3RydWN0IHZpZGVvX2F1ZGlvIHY7Ci0JCQlpZihjb3B5X2Zyb21fdXNlcigmdiwgYXJnLCBzaXplb2YodikpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJaWYgKHRlYS0+b3BzLT5tdXRlKQotCQkJCXRlYS0+b3BzLT5tdXRlKHRlYSwKLQkJCQkJICAgICAgICh2LmZsYWdzICYKLQkJCQkJCVZJREVPX0FVRElPX01VVEUpID8gMSA6IDApOwotCQkJaWYodi5hdWRpbykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KKwlzdHJjcHkodi0+Y2FyZCwgdGVhLT50ZWE1NzU5ID8gIlRFQTU3NTkiIDogIlRFQTU3NTciKTsKKwlzdHJsY3B5KHYtPmRyaXZlciwgInRlYTU3NXgtdHVuZXIiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CisJc3RybGNweSh2LT5jYXJkLCAiTWFlc3RybyBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7CisJc3ByaW50Zih2LT5idXNfaW5mbywgIlBDSSIpOworCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzbmRfdGVhNTc1eF9yZWxlYXNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCkKK3N0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogeworCWlmICh2LT5pbmRleCA+IDApCisJCXJldHVybiAtRUlOVkFMOworCisJc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCXYtPnJhbmdlbG93ID0gRlJFUV9MTzsKKwl2LT5yYW5nZWhpZ2ggPSBGUkVRX0hJOworCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PfFY0TDJfVFVORVJfU1VCX1NURVJFTzsKKwl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XOworCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKKwl2LT5zaWduYWwgPSAweGZmZmY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQoreworCWlmICh2LT5pbmRleCA+IDApCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCWYtPmZyZXF1ZW5jeSA9IHRlYS0+ZnJlcTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlpZiAoZi0+ZnJlcXVlbmN5IDwgRlJFUV9MTyB8fCBmLT5mcmVxdWVuY3kgPiBGUkVRX0hJKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXRlYS0+ZnJlcSA9IGYtPmZyZXF1ZW5jeTsKKworCXNuZF90ZWE1NzV4X3NldF9mcmVxKHRlYSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJaWYgKGEtPmluZGV4ID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJaWYgKGEtPmluZGV4ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgeworCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgeworCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKKwkJCQkJCXNpemVvZigqcWMpKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJaWYgKHRlYS0+b3BzLT5tdXRlKSB7CisJCQljdHJsLT52YWx1ZSA9IHRlYS0+bXV0ZTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJaWYgKHRlYS0+b3BzLT5tdXRlKSB7CisJCQl0ZWEtPm9wcy0+bXV0ZSh0ZWEsIGN0cmwtPnZhbHVlKTsKKwkJCXRlYS0+bXV0ZSA9IDE7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQoreworCSppID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCit7CisJaWYgKGkgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3RlYTU3NXhfZXhjbHVzaXZlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0xODksNTAgKzI2MCw5MSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHRlYTU3NXhfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgICAgICAgID0gc25kX3RlYTU3NXhfZXhjbHVzaXZlX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gc25kX3RlYTU3NXhfZXhjbHVzaXZlX3JlbGVhc2UsCisJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdGVhNTc1eF9pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCAgICA9IHZpZGlvY19xdWVyeWNhcCwKKwkudmlkaW9jX2dfdHVuZXIgICAgID0gdmlkaW9jX2dfdHVuZXIsCisJLnZpZGlvY19zX3R1bmVyICAgICA9IHZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19hdWRpbyAgICAgPSB2aWRpb2NfZ19hdWRpbywKKwkudmlkaW9jX3NfYXVkaW8gICAgID0gdmlkaW9jX3NfYXVkaW8sCisJLnZpZGlvY19nX2lucHV0ICAgICA9IHZpZGlvY19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dCAgICAgPSB2aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCisJLnZpZGlvY19xdWVyeWN0cmwgICA9IHZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19nX2N0cmwgICAgICA9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCit9OworCitzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB0ZWE1NzV4X3JhZGlvID0geworCS5uYW1lICAgICAgICAgICA9ICJ0ZWE1NzV4LXR1bmVyIiwKKwkuZm9wcyAgICAgICAgICAgPSAmdGVhNTc1eF9mb3BzLAorCS5pb2N0bF9vcHMgCT0gJnRlYTU3NXhfaW9jdGxfb3BzLAorCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCit9OworCiAvKgogICogaW5pdGlhbGl6ZSBhbGwgdGhlIHRlYTU3NXggY2hpcHMKICAqLwogdm9pZCBzbmRfdGVhNTc1eF9pbml0KHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhKQogeworCWludCByZXR2YWw7CiAJdW5zaWduZWQgaW50IHZhbDsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp0ZWE1NzV4X3JhZGlvX2luc3Q7CiAKIAl2YWwgPSB0ZWEtPm9wcy0+cmVhZCh0ZWEpOwogCWlmICh2YWwgPT0gMHgxZmZmZmZmIHx8IHZhbCA9PSAwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgIkNhbm5vdCBmaW5kIFRFQTU3NXggY2hpcFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCSAgICJ0ZWE1NzV4LXR1bmVyOiBDYW5ub3QgZmluZCBURUE1NzV4IGNoaXBcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JbWVtc2V0KCZ0ZWEtPnZkLCAwLCBzaXplb2YodGVhLT52ZCkpOwotCXN0cmNweSh0ZWEtPnZkLm5hbWUsIHRlYS0+dGVhNTc1OSA/ICJURUE1NzU5IHJhZGlvIiA6ICJURUE1NzU3IHJhZGlvIik7Ci0JdGVhLT52ZC5yZWxlYXNlID0gc25kX3RlYTU3NXhfcmVsZWFzZTsKLQl2aWRlb19zZXRfZHJ2ZGF0YSgmdGVhLT52ZCwgdGVhKTsKLQl0ZWEtPnZkLmZvcHMgPSAmdGVhLT5mb3BzOwogCXRlYS0+aW5fdXNlID0gMDsKLQl0ZWEtPmZvcHMub3duZXIgPSB0ZWEtPmNhcmQtPm1vZHVsZTsKLQl0ZWEtPmZvcHMub3BlbiA9IHNuZF90ZWE1NzV4X2V4Y2x1c2l2ZV9vcGVuOwotCXRlYS0+Zm9wcy5yZWxlYXNlID0gc25kX3RlYTU3NXhfZXhjbHVzaXZlX3JlbGVhc2U7Ci0JdGVhLT5mb3BzLmlvY3RsID0gc25kX3RlYTU3NXhfaW9jdGw7Ci0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmdGVhLT52ZCwgVkZMX1RZUEVfUkFESU8sIHRlYS0+ZGV2X25yIC0gMSkgPCAwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZWdpc3RlciB0ZWE1NzV4IHR1bmVyXG4iKTsKLQkJcmV0dXJuOwotCX0KLQl0ZWEtPnZkX3JlZ2lzdGVyZWQgPSAxOwotCiAJdGVhLT52YWwgPSBURUE1NzVYX0JJVF9CQU5EX0ZNIHwgVEVBNTc1WF9CSVRfU0VBUkNIXzEwXzQwOwogCXRlYS0+ZnJlcSA9IDkwNTAwICogMTY7CQkvKiA5MC41TWh6IGRlZmF1bHQgKi8KIAorCXRlYTU3NXhfcmFkaW9faW5zdCA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmICh0ZWE1NzV4X3JhZGlvX2luc3QgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgInRlYTU3NXgtdHVuZXI6IG5vdCBlbm91Z2ggbWVtb3J5XG4iKTsKKwkJcmV0dXJuOworCX0KKworCW1lbWNweSh0ZWE1NzV4X3JhZGlvX2luc3QsICZ0ZWE1NzV4X3JhZGlvLCBzaXplb2YodGVhNTc1eF9yYWRpbykpOworCisJc3RyY3B5KHRlYTU3NXhfcmFkaW8ubmFtZSwgdGVhLT50ZWE1NzU5ID8KKwkJCQkgICAiVEVBNTc1OSByYWRpbyIgOiAiVEVBNTc1NyByYWRpbyIpOworCisJdmlkZW9fc2V0X2RydmRhdGEodGVhNTc1eF9yYWRpb19pbnN0LCB0ZWEpOworCisJcmV0dmFsID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHRlYTU3NXhfcmFkaW9faW5zdCwKKwkJCQkgICAgICAgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKTsKKwlpZiAocmV0dmFsKSB7CisJCXByaW50ayhLRVJOX0VSUiAidGVhNTc1eC10dW5lcjogY2FuJ3QgcmVnaXN0ZXIgdmlkZW8gZGV2aWNlIVxuIik7CisJCWtmcmVlKHRlYTU3NXhfcmFkaW9faW5zdCk7CisJCXJldHVybjsKKwl9CisKIAlzbmRfdGVhNTc1eF9zZXRfZnJlcSh0ZWEpOwogCiAJLyogbXV0ZSBvbiBpbml0ICovCi0JaWYgKHRlYS0+b3BzLT5tdXRlKQorCWlmICh0ZWEtPm9wcy0+bXV0ZSkgewogCQl0ZWEtPm9wcy0+bXV0ZSh0ZWEsIDEpOworCQl0ZWEtPm11dGUgPSAxOworCX0KKwl0ZWEtPnZkID0gdGVhNTc1eF9yYWRpb19pbnN0OwogfQogCiB2b2lkIHNuZF90ZWE1NzV4X2V4aXQoc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEpCiB7Ci0JaWYgKHRlYS0+dmRfcmVnaXN0ZXJlZCkgewotCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmdGVhLT52ZCk7Ci0JCXRlYS0+dmRfcmVnaXN0ZXJlZCA9IDA7CisJaWYgKHRlYS0+dmQpIHsKKwkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodGVhLT52ZCk7CisJCXRlYS0+dmQgPSBOVUxMOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL0tjb25maWcgYi9zb3VuZC9wY2kvS2NvbmZpZwppbmRleCBjYTI1ZTYxLi45MzQyMmUzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvS2NvbmZpZworKysgYi9zb3VuZC9wY2kvS2NvbmZpZwpAQCAtNTA3LDcgKzUwNyw3IEBACiBjb25maWcgU05EX0ZNODAxX1RFQTU3NVhfQk9PTAogCWJvb2wgIkZvcnRlTWVkaWEgRk04MDEgKyBURUE1NzU3IHR1bmVyIgogCWRlcGVuZHMgb24gU05EX0ZNODAxCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxPXkgfHwgVklERU9fVjRMMT1TTkRfRk04MDEKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDI9eSB8fCBWSURFT19WNEwyPVNORF9GTTgwMQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBzb3VuZGNhcmRzIGJhc2VkIG9uIHRoZSBGb3J0ZU1lZGlhCiAJICBGTTgwMSBjaGlwIHdpdGggYSBURUE1NzU3IHR1bmVyIGNvbm5lY3RlZCB0byBHUElPMS0zIHBpbnMgKE1lZGlhCmRpZmYgLS1naXQgYS91c3IvS2NvbmZpZyBiL3Vzci9LY29uZmlnCmluZGV4IDQzYTNhMGYuLjU4OGM1ODggMTAwNjQ0Ci0tLSBhL3Vzci9LY29uZmlnCisrKyBiL3Vzci9LY29uZmlnCkBAIC00Niw0OSArNDYsNTAgQEAKIAkgIElmIHlvdSBhcmUgbm90IHN1cmUsIGxlYXZlIGl0IHNldCB0byAiMCIuCiAKIGNvbmZpZyBSRF9HWklQCi0JYm9vbCAiSW5pdGlhbCByYW1kaXNrIGNvbXByZXNzZWQgdXNpbmcgZ3ppcCIKKwlib29sICJTdXBwb3J0IGluaXRpYWwgcmFtZGlza3MgY29tcHJlc3NlZCB1c2luZyBnemlwIiBpZiBFTUJFRERFRAogCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gQkxLX0RFVl9JTklUUkQ9eQorCWRlcGVuZHMgb24gQkxLX0RFVl9JTklUUkQKIAlzZWxlY3QgREVDT01QUkVTU19HWklQCiAJaGVscAogCSAgU3VwcG9ydCBsb2FkaW5nIG9mIGEgZ3ppcCBlbmNvZGVkIGluaXRpYWwgcmFtZGlzayBvciBjcGlvIGJ1ZmZlci4KIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBSRF9CWklQMgotCWJvb2wgIkluaXRpYWwgcmFtZGlzayBjb21wcmVzc2VkIHVzaW5nIGJ6aXAyIgotCWRlZmF1bHQgbgotCWRlcGVuZHMgb24gQkxLX0RFVl9JTklUUkQ9eQorCWJvb2wgIlN1cHBvcnQgaW5pdGlhbCByYW1kaXNrcyBjb21wcmVzc2VkIHVzaW5nIGJ6aXAyIiBpZiBFTUJFRERFRAorCWRlZmF1bHQgIUVNQkVEREVECisJZGVwZW5kcyBvbiBCTEtfREVWX0lOSVRSRAogCXNlbGVjdCBERUNPTVBSRVNTX0JaSVAyCiAJaGVscAogCSAgU3VwcG9ydCBsb2FkaW5nIG9mIGEgYnppcDIgZW5jb2RlZCBpbml0aWFsIHJhbWRpc2sgb3IgY3BpbyBidWZmZXIKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBSRF9MWk1BCi0JYm9vbCAiSW5pdGlhbCByYW1kaXNrIGNvbXByZXNzZWQgdXNpbmcgbHptYSIKLQlkZWZhdWx0IG4KLQlkZXBlbmRzIG9uIEJMS19ERVZfSU5JVFJEPXkKKwlib29sICJTdXBwb3J0IGluaXRpYWwgcmFtZGlza3MgY29tcHJlc3NlZCB1c2luZyBMWk1BIiBpZiBFTUJFRERFRAorCWRlZmF1bHQgIUVNQkVEREVECisJZGVwZW5kcyBvbiBCTEtfREVWX0lOSVRSRAogCXNlbGVjdCBERUNPTVBSRVNTX0xaTUEKIAloZWxwCi0JICBTdXBwb3J0IGxvYWRpbmcgb2YgYSBsem1hIGVuY29kZWQgaW5pdGlhbCByYW1kaXNrIG9yIGNwaW8gYnVmZmVyCisJICBTdXBwb3J0IGxvYWRpbmcgb2YgYSBMWk1BIGVuY29kZWQgaW5pdGlhbCByYW1kaXNrIG9yIGNwaW8gYnVmZmVyCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitpZiBJTklUUkFNRlNfU09VUkNFIT0iIgorCiBjaG9pY2UKIAlwcm9tcHQgIkJ1aWx0LWluIGluaXRyYW1mcyBjb21wcmVzc2lvbiBtb2RlIgogCWhlbHAKLQkgIFRoaXMgc2V0dGluZyBpcyBvbmx5IG1lYW5pbmdmdWwgaWYgdGhlIElOSVRSQU1GU19TT1VSQ0UgaXMKLQkgIHNldC4gSXQgZGVjaWRlcyBieSB3aGljaCBhbGdvcml0aG0gdGhlIElOSVRSQU1GU19TT1VSQ0Ugd2lsbAotCSAgYmUgY29tcHJlc3NlZC4KLQkgIFNldmVyYWwgY29tcHJlc3Npb24gYWxnb3JpdGhtcyBhcmUgYXZhaWxhYmxlLCB3aGljaCBkaWZmZXIKLQkgIGluIGVmZmljaWVuY3ksIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIHNwZWVkLgotCSAgQ29tcHJlc3Npb24gc3BlZWQgaXMgb25seSByZWxldmFudCB3aGVuIGJ1aWxkaW5nIGEga2VybmVsLgotCSAgRGVjb21wcmVzc2lvbiBzcGVlZCBpcyByZWxldmFudCBhdCBlYWNoIGJvb3QuCisJICBUaGlzIG9wdGlvbiBkZWNpZGVzIGJ5IHdoaWNoIGFsZ29yaXRobSB0aGUgYnVpbHRpbiBpbml0cmFtZnMKKwkgIHdpbGwgYmUgY29tcHJlc3NlZC4gIFNldmVyYWwgY29tcHJlc3Npb24gYWxnb3JpdGhtcyBhcmUKKwkgIGF2YWlsYWJsZSwgd2hpY2ggZGlmZmVyIGluIGVmZmljaWVuY3ksIGNvbXByZXNzaW9uIGFuZAorCSAgZGVjb21wcmVzc2lvbiBzcGVlZC4gIENvbXByZXNzaW9uIHNwZWVkIGlzIG9ubHkgcmVsZXZhbnQKKwkgIHdoZW4gYnVpbGRpbmcgYSBrZXJuZWwuICBEZWNvbXByZXNzaW9uIHNwZWVkIGlzIHJlbGV2YW50IGF0CisJICBlYWNoIGJvb3QuCiAKLQkgIElmIHlvdSBoYXZlIGFueSBwcm9ibGVtcyB3aXRoIGJ6aXAyIG9yIGx6bWEgY29tcHJlc3NlZAorCSAgSWYgeW91IGhhdmUgYW55IHByb2JsZW1zIHdpdGggYnppcDIgb3IgTFpNQSBjb21wcmVzc2VkCiAJICBpbml0cmFtZnMsIG1haWwgbWUgKEFsYWluIEtuYWZmKSA8YWxhaW5Aa25hZmYubHU+LgogCi0JICBIaWdoIGNvbXByZXNzaW9uIG9wdGlvbnMgYXJlIG1vc3RseSB1c2VmdWwgZm9yIHVzZXJzIHdobwotCSAgYXJlIGxvdyBvbiBkaXNrIHNwYWNlIChlbWJlZGRlZCBzeXN0ZW1zKSwgYnV0IGZvciB3aG9tIHJhbQotCSAgc2l6ZSBtYXR0ZXJzIGxlc3MuCisJICBIaWdoIGNvbXByZXNzaW9uIG9wdGlvbnMgYXJlIG1vc3RseSB1c2VmdWwgZm9yIHVzZXJzIHdobyBhcmUKKwkgIGxvdyBvbiBSQU0sIHNpbmNlIGl0IHJlZHVjZXMgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBkdXJpbmcKKwkgIGJvb3QuCiAKIAkgIElmIGluIGRvdWJ0LCBzZWxlY3QgJ2d6aXAnCiAKQEAgLTEzMywzICsxMzQsMTQgQEAKIAkgIHNtYWxsZXIgd2l0aCBMWk1BIGluIGNvbXBhcmlzb24gdG8gZ3ppcC4KIAogZW5kY2hvaWNlCisKK2VuZGlmCisKK2lmIElOSVRSQU1GU19TT1VSQ0U9IiIKKyMgVGhlIGJ1aWx0aW4gaW5pdHJhbWZzIGlzIHNvIHNtYWxsIHNvIHdlIGRvbid0IHdhbnQgdG8gYnVnIHRoZSB1c2VyLi4uCisKK2NvbmZpZyBJTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORQorCWJvb2wKKwlkZWZhdWx0IHkKKworZW5kaWYK